成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Yii2性能優(yōu)化之:類的延遲加載技術(shù)介紹

tuniutech / 1910人閱讀

摘要:據(jù)官方介紹,框架廣泛的使用了一種叫做延遲加載的技術(shù),從而達到這樣的效果。比如我們在判斷中,需要實例化類的時候,再去加載相應(yīng)的文件。代碼如下等于不等于優(yōu)化過后的文件效率肯定得到了提升,這個也就是類的延遲加載雛形。這就是的延遲加載了。

Yii框架號稱最高效的PHP框架,執(zhí)行效率高出其他框架很多。據(jù)官方介紹,Yii框架廣泛的使用了一種叫做延遲加載的技術(shù),從而達到這樣的效果。

下面我們就通過實例詳細的來介紹一下這個技術(shù)

類的延遲加載

首先我們在www目錄新建2個類Class1、Class2和一個index.php文件。

Class1Class2中我們只簡單的寫一個簡單結(jié)構(gòu)

Class1.php

class Class1{

    public function __construct(){
        echo "class1";
    }
    
}

Class2.php

class Class2{

    public function __construct(){
        echo "class2";
    }

}

接下來我們在index.php文件中引入這兩個類

require_once("Class1.php");
require_once("Class2.php");

同時我們再定義一個變量$state,將其值設(shè)置為1。我們再對$state做一些判斷操作。

$state = 1;

if($state == 1)
{
    echo "state 等于 1";
    $class1 = new Class1();
}
else
{
    echo "state 不等于 1";
    $class2 = new Class2();
}

我們判斷$state值,如果為1,則輸出一句話和實例化Class1。否則,同樣輸出一句話,和實例化Class2。

代碼正常運行。但是我們發(fā)現(xiàn),我們在if中實例化Class1Class2。不管何時,都只能實例化其中的一個,而我們在引入文件的時候,卻是一次性的將兩個類都引入進來了。這樣不可避免的造成了一些資源的浪費。

所以,我們可以先進行一些小的優(yōu)化。

比如:我們在if判斷中,需要實例化類的時候,再去加載相應(yīng)的文件。代碼如下:

$state = 1;

if($state == 1)
{
    echo "state 等于 1";
    require_once("Class1.php");
    $class1 = new Class1();
}
else
{
    echo "state 不等于 1";
    require_once("Class2.php");
    $class2 = new Class2();
}

優(yōu)化過后的index.php文件效率肯定得到了提升,這個也就是類的延遲加載雛形。但是這樣就會出現(xiàn)一個問題,在需要加載的文件很多時候,并不是太方便。通用性不是很強。

在Yii中,這個問題被很好的解決。

其核心武器就是spl_autoload_register()函數(shù),該函數(shù)可以自動執(zhí)行函數(shù)。
其括號中參數(shù)為需要執(zhí)行的函數(shù)的函數(shù)名。比如我們定義一個函數(shù),叫fun_loader().然后將fun_loader作為spl_autoload_register()的參數(shù),那么在程序運行時候,就會自動的執(zhí)行fun_loader函數(shù)。

我們先在index.php函數(shù)頂部加入代碼

function fun_loader($value)
{
    echo "123";
}

spl_autoload_register("fun_loader");

這樣程序在運行時候就會自動調(diào)用函數(shù)fun_loader,并且輸出123

有了自動調(diào)用函數(shù)功能,我們就可以把剛剛的需要加載的兩個類放入這個函數(shù),達到自動加載的效果。

function fun_loader($value)
{
    require_once("Class1.php");
    require_once("Class2.php");
}

但是這樣還是回歸到了之前的情況,多加載了一個無用的類。

所以,fun_loader的參數(shù)起作用了,我們可以動態(tài)的將需要加載的類傳遞進來,實現(xiàn)按需加載。

我們將改造后的index.php完整的寫出來,如下:

function fun_loader($value)
{
    require_once($value.".php");
}

spl_autoload_register("fun_loader");

$state = 1;

if($state == 1)
{
    echo "state 等于 1";
    $class1 = new Class1();
}
else
{
    echo "state 不等于 1";
    $class2 = new Class2();
}

這樣,當實例化的時候,如果發(fā)現(xiàn)沒有找到相應(yīng)的類。那么就會執(zhí)行一下fun_loader函數(shù)。同時,將實例化的類名作為參數(shù),傳遞給fun_loader

這樣就可以實現(xiàn)需要時候加載需要的類。這就是Yii的延遲加載了。

Yii具體的代碼在文件vendoryiisoftyii2Yii.php


 * @since 2.0
 */
class Yii extends yiiBaseYii
{
}

spl_autoload_register(["Yii", "autoload"], true, true);
Yii::$classMap = require(__DIR__ . "/classes.php");
Yii::$container = new yiidiContainer();

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/30423.html

相關(guān)文章

  • YII2通過composer優(yōu)化vendor

    摘要:本文討論通過工具安裝框架并優(yōu)化過程中遇到的問題,約定讀者對基本原理有一定了解,并且有安裝框架的實際經(jīng)驗。這個命令是優(yōu)化包的關(guān)鍵一環(huán)。命令要謹慎使用。 本文討論通過composer工具安裝Yii2框架并優(yōu)化Vendor過程中遇到的問題,約定讀者對composer基本原理有一定了解,并且有安裝Yii2框架的實際經(jīng)驗。 在Yii2社區(qū)里經(jīng)常會遇到一類問題,那就是 安裝完官方推薦的版本后1 ...

    dcr309duan 評論0 收藏0
  • Yii修行路 - Extension 擴展

    摘要:運行來安裝指定的擴展。這更便于用戶辨別是否是的擴展。當用戶運行安裝一個擴展時,文件會被自動更新使之包含新擴展的信息。上述代碼表明該擴展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達到這個目的,你應(yīng)當在公開發(fā)布前做測試。 簡述 擴展是專門設(shè)計的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴展在你的應(yīng)用的每個頁面底部添加...

    bovenson 評論0 收藏0
  • Vue.js應(yīng)用性能優(yōu)化:第一部分---介紹性能優(yōu)化和懶加載

    摘要:我的目標是使本系列成為關(guān)于應(yīng)用程序性能的完整指南。代碼分割就是將應(yīng)用程序分割成這些延遲加載的塊??偨Y(jié)延遲加載是提高應(yīng)用程序性能并減少其大小的最佳方法之一。在本系列的下一部分中,我將向您展示如何使用和路由來分割應(yīng)用程序代碼。 當移動優(yōu)先(mobile-first)的方式逐漸成為一種標準,而不確定的網(wǎng)絡(luò)環(huán)境因素應(yīng)該始終是我們考慮的一點,因此保持讓應(yīng)用程序快速加載變得越來越困難。在本系列文章...

    ZweiZhao 評論0 收藏0
  • Java設(shè)計模式-單例模式(Singleton Pattern)

    摘要:如果需要防范這種攻擊,請修改構(gòu)造函數(shù),使其在被要求創(chuàng)建第二個實例時拋出異常。單例模式與單一職責(zé)原則有沖突。源碼地址參考文獻設(shè)計模式之禪 定義 單例模式是一個比較簡單的模式,其定義如下: 保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 或者 Ensure a class has only one instance, and provide a global point of ac...

    k00baa 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<