PHP之Yii框架學習總結

Yii 是一個高性能的,適用於開發 WEB2.0 應用的 PHP 框架。
Yii 自帶了豐富的功能 ,包括:

  • 模型-視圖-控制器(MVC)設計模式: Yii在WEB編程中採用這一成熟的技術從而可以更好的將邏輯層和表現層分開
  • 與jQuery整合:作爲最流行的JavaScript框架之一,jQuery可以編寫高效而靈活的JavaScript接口。
  • 分層緩存方案: Yii支持數據緩存,頁面緩存,片段緩存和動態內容。緩存的存儲介質,可以輕鬆地更改而不觸及應用程序代碼。
  • 錯誤處理和日誌記錄:錯誤的處理很好的呈現出來,日誌信息可以分類,過濾並分配到不同的位置。
  • 安全: Yii配備了許多安全的措施,以幫助安全的Web應用程序,以防止網絡攻擊。這些措施包括跨站點腳本(XSS)預防,跨站點請求僞造(CSRF)預防,Cookie篡改預防等。
  • 自動代碼生成: Yii提供了可以自動生成的代碼的工具,根據你的需要,例如生成一個程序骨架,CRUD應用等等。
  • 完全面向對象: Yii框架堅持嚴格的面向對象編程範式。它沒有定義任何全局函數或變量。而且,它定義的類層次結構允許最大的可重用性和定製。
  • 詳細的文檔:每一個單一的方法或屬性都非常清楚的記錄着。同時提供了一個全面的教程和一些新手教程。

Yii的優勢

Yii容易學習和使用。只需要知道PHP和麪向對象編程,便可以很快上手,而不必事先去學習一種新的架構或者模板語言。
用Yii的開發速度非常之快,除框架本身之外,需要爲應用所寫的編碼極少。造就了Yii是最高效的開發框架之一。

  • Yii 具有高度的可重用性和可擴展性,是純粹的面向對象。
  • Yii中的一切都是獨立的可被配置,可重用,可擴展的組件。
  • 更重要的是Yii有着越來越多的擴展庫。主要由使用者貢獻出的組件組成,這可能有助於大大減少開發時間。

Sessions 和 Cookies

Sessions 和 cookies 允許數據在多次請求中保持, 在純PHP中,可以分別使用全局變量$_SESSION$_COOKIE 來訪問,Yii將session和cookie封裝成對象並增加一些功能, 可通過面向對象方式訪問它們。

HTTP 緩存

除了服務器端緩存外, Web 應用還可以利用客戶端緩存(HTTP 緩存)去節省相同頁面內容的生成和傳輸時間。
通過配置 yii\filters\HttpCache 過濾器,控制器操作渲染的內容就能緩存在客戶端。

緩存有關的 HTTP 頭

  • Last-Modified

使用時間戳標明頁面自上次客戶端緩存後是否被修改過。

通過配置 yii\filters\HttpCache::lastModified 屬性向客戶端發送 Last-Modified 頭。返回的是頁面修改時的 Unix 時間戳。
Demo

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['index'],
            'lastModified' => function ($action, $params) {
                $q = new \yii\db\Query();
                return $q->from('post')->max('updated_at');
            },
        ],
    ];
}

上述代碼表明 HTTP 緩存只在 index 操作時啓用。它會基於頁面最後修改時間生成一個 Last-Modified HTTP 頭。當瀏覽器第一次訪問 index 頁時,服務器將會生成頁面併發送至客戶端瀏覽器。之後客戶端瀏覽器在頁面沒被修改期間訪問該頁,服務器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內容。因此服務端渲染和內容傳輸都將省去。

  • ETag 頭

“Entity Tag”(實體標籤,簡稱 ETag)使用一個哈希值表示頁面內容。如果頁面被修改過,哈希值也會隨之改變。通過對比客戶端的哈希值和服務器端生成的哈希值,瀏覽器就能判斷頁面是否被修改過,進而決定是否應該重新傳輸內容。
通過配置 yii\filters\HttpCache::etagSeed 屬性向客戶端發送 ETag 頭。返回的是一段種子字符用來生成 ETag 哈希值。
Demo

public function behaviors()
{
    return [
        [
            'class' => 'yii\filters\HttpCache',
            'only' => ['view'],
            'etagSeed' => function ($action, $params) {
                $post = $this->findModel(\Yii::$app->request->get('id'));
                return serialize([$post->title, $post->content]);
            },
        ],
    ];
}

上述代碼表明 HTTP 緩存只在 view 操作時啓用。它會基於用戶請求的標題和內容生成一個 ETag HTTP 頭。當瀏覽器第一次訪問 view 頁時,服務器將會生成頁面併發送至客戶端瀏覽器。之後客戶端瀏覽器標題和內容沒被修改在期間訪問該頁,服務器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內容。因此服務端渲染和內容傳輸都將省去。

  • Cache-Control 頭

Cache-Control 頭指定了頁面的常規緩存策略。可以通過配置 yii\filters\HttpCache::cacheControlHeader 屬性發送相應的頭信息。
默認發送以下頭:

Cache-Control: public, max-age=3600
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章