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

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

HTTP 緩存

HTTP 緩存

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

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

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

Last-Modified?頭

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

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

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?操作時(shí)啟用。它會基于頁面最后修改時(shí)間生成一個(gè)?Last-Modified?HTTP 頭。當(dāng)瀏覽器第一次訪問index?頁時(shí),服務(wù)器將會生成頁面并發(fā)送至客戶端瀏覽器。之后客戶端瀏覽器在頁面沒被修改期間訪問該頁,服務(wù)器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內(nèi)容。因此服務(wù)端渲染和內(nèi)容傳輸都將省去。

ETag?頭

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

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

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?操作時(shí)啟用。它會基于用戶請求的標(biāo)題和內(nèi)容生成一個(gè)?ETag?HTTP 頭。當(dāng)瀏覽器第一次訪問?view頁時(shí),服務(wù)器將會生成頁面并發(fā)送至客戶端瀏覽器。之后客戶端瀏覽器標(biāo)題和內(nèi)容沒被修改在期間訪問該頁,服務(wù)器將不會重新生成頁面,瀏覽器會使用之前客戶端緩存下來的內(nèi)容。因此服務(wù)端渲染和內(nèi)容傳輸都將省去。

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

復(fù)雜的 Etag 生成種子可能會違背使用?HttpCache?的初衷而引起不必要的性能開銷,因?yàn)轫憫?yīng)每一次請求都需要重新計(jì)算 Etag。請?jiān)囍页鲆粋€(gè)最簡單的表達(dá)式去觸發(fā) Etag 失效。

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

Cache-Control?頭

Cache-Control?頭指定了頁面的常規(guī)緩存策略。可以通過配置 yii\filters\HttpCache::cacheControlHeader 屬性發(fā)送相應(yīng)的頭信息。默認(rèn)發(fā)送以下頭:

Cache-Control: public, max-age=3600

會話緩存限制器

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

SEO 影響

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