亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Verzeichnis suchen
閱讀前篇 簡介 Yii 是什么 從 Yii 1.1 升級 入門 安裝 Yii 運行應用 第一次問候 使用Forms 數(shù)據庫應用 使用 Gii 生成代碼 進階 應用結構 概述 入口腳本 應用(Applications) 應用組件(Application Components) 控制器(Controllers) 模型(Models) 視圖(views) 模塊(Modules) 過濾器(Filters) 小部件(Widgets) 前端資源(Assets) 擴展(Extensions) 請求處理 運行概述 啟動引導(Bootstrapping) 路由和創(chuàng)建URL 請求(Requests) 響應(Responses) Sessions 和 Cookies 錯誤處理(Handling Errors) 日志(Logging) 關鍵概念 組件(Component) 屬性(Property) 事件(Events) 行為(Behaviors) 配置(Configurations) 別名(Aliases) 類自動加載(Autoloading) 服務定位器(Service Locator) 依賴注入容器(Dependency Injection Container) 配合數(shù)據庫工作 數(shù)據庫訪問 (Data Access Objects) 查詢生成器(Query Builder) 活動記錄(Active Record) 數(shù)據庫遷移(Migrations) Sphinx Redis MongoDB Elasticsearch 接收用戶數(shù)據 創(chuàng)建表單(Creating Forms) 輸入驗證(Validating Input) 文件上傳(Uploading Files) 收集列表輸入(Collecting Tabular Input) 多模型的復合表單(Getting Data for Multiple Models) 顯示數(shù)據 格式化輸出數(shù)據(Data Formatting) 分頁(Pagination) 排序(Sorting) 數(shù)據提供器(Data Providers) 數(shù)據小部件(Data Widgets) 客戶端腳本使用(Working with Client Scripts) 主題(Theming) 安全 認證(Authentication) 授權(Authorization) 處理密碼(Working with Passwords) 客戶端認證(Auth Clients) 最佳安全實踐(Best Practices) 緩存 概述 數(shù)據緩存 片段緩存 頁面緩存 HTTP 緩存 RESTfull Web服務 快速入門(Quick Start) 資源(Resources) 控制器(Controllers) 路由(Routing) 格式化響應(Response Formatting) 授權認證(Authentication) 速率限制(Rate Limiting) 版本(Versioning) 錯誤處理(Error Handling) 開發(fā)工具 調試工具欄和調試器 使用Gii生成代碼 生成API文檔 測試 概述(Overview) 配置測試環(huán)境(Testing environment setup) 單元測試(Unit Tests) 功能測試(Function Tests) 驗收測試(Acceptance Tests) 測試夾具(Fixtures) 高級專題 高級應用模板 創(chuàng)建自定義應用程序結構 控制臺命令 核心驗證器(Core Validators) 國際化 收發(fā)郵件 性能優(yōu)化 共享主機環(huán)境 模板引擎 集成第三方代碼 小部件 Bootstrap 小部件 Jquery UI 助手類 概述 Array 助手(ArrayHelper) Html 助手(Html) Url 助手(Url)
Figuren

HTTP 緩存

HTTP 緩存

除了前面章節(jié)講到的服務器端緩存外, Web 應用還可以利用客戶端緩存去節(jié)省相同頁面內容的生成和傳輸時間。

通過配置 yii\filters\HttpCache 過濾器,控制器操作渲染的內容就能緩存在客戶端。yii\filters\HttpCache 過濾器僅對?GET?和?HEAD?請求生效,它能為這些請求設置三種與緩存有關的 HTTP 頭。

  • yii\filters\HttpCache::lastModified
  • yii\filters\HttpCache::etagSeed
  • yii\filters\HttpCache::cacheControlHeader

Last-Modified?頭

Last-Modified?頭使用時間戳標明頁面自上次客戶端緩存后是否被修改過。

通過配置 yii\filters\HttpCache::lastModified 屬性向客戶端發(fā)送?Last-Modified?頭。該屬性的值應該為 PHP callable 類型,返回的是頁面修改時的 Unix 時間戳。該 callable 的參數(shù)和返回值應該如下:

function ($action, $params)

以下是使用?Last-Modified?頭的示例:

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?頁時,服務器將會生成頁面并發(fā)送至客戶端瀏覽器。之后客戶端瀏覽器在頁面沒被修改期間訪問該頁,服務器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內容。因此服務端渲染和內容傳輸都將省去。

ETag?頭

“Entity Tag”(實體標簽,簡稱 ETag)使用一個哈希值表示頁面內容。如果頁面被修改過,哈希值也會隨之改變。通過對比客戶端的哈希值和服務器端生成的哈希值,瀏覽器就能判斷頁面是否被修改過,進而決定是否應該重新傳輸內容。

通過配置 yii\filters\HttpCache::etagSeed 屬性向客戶端發(fā)送?ETag?頭。該屬性的值應該為 PHP callable 類型,返回的是一段種子字符用來生成 ETag 哈希值。該 callable 的參數(shù)和返回值應該如下:

function ($action, $params)

以下是使用?ETag?頭的示例:

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頁時,服務器將會生成頁面并發(fā)送至客戶端瀏覽器。之后客戶端瀏覽器標題和內容沒被修改在期間訪問該頁,服務器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內容。因此服務端渲染和內容傳輸都將省去。

ETag 相比?Last-Modified?能實現(xiàn)更復雜和更精確的緩存策略。例如,當站點切換到另一個主題時可以使 ETag 失效。

復雜的 Etag 生成種子可能會違背使用?HttpCache?的初衷而引起不必要的性能開銷,因為響應每一次請求都需要重新計算 Etag。請試著找出一個最簡單的表達式去觸發(fā) Etag 失效。

注意:為了遵循?RFC 7232(HTTP 1.1 協(xié)議),如果同時配置了?ETag?和?Last-Modified?頭,HttpCache?將會同時發(fā)送它們。并且如果客戶端同時發(fā)送?If-None-Match?頭和?If-Modified-Since?頭,則只有前者會被接受。

Cache-Control?頭

Cache-Control?頭指定了頁面的常規(guī)緩存策略??梢酝ㄟ^配置 yii\filters\HttpCache::cacheControlHeader 屬性發(fā)送相應的頭信息。默認發(fā)送以下頭:

Cache-Control: public, max-age=3600

會話緩存限制器

當頁面使 session 時,PHP 將會按照 PHP.INI 中所設置的?session.cache_limiter?值自動發(fā)送一些緩存相關的 HTTP 頭。這些 HTTP 頭有可能會干擾你原本設置的?HttpCache?或讓其失效。為了避免此問題,默認情況下?HttpCache?禁止自動發(fā)送這些頭。想改變這一行為,可以配置 yii\filters\HttpCache::sessionCacheLimiter 屬性。該屬性接受一個字符串值,包括?public,private,private_no_expire,和?nocache。請參考 PHP 手冊中的緩存限制器了解這些值的含義。

SEO 影響

搜索引擎趨向于遵循站點的緩存頭。因為一些爬蟲的抓取頻率有限制,啟用緩存頭可以可以減少重復請求數(shù)量,增加爬蟲抓取效率(譯者:大意如此,但搜索引擎的排名規(guī)則不了解,好的緩存策略應該是可以為用戶體驗加分的)。
Vorheriger Artikel: N?chster Artikel: