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

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

HTTP 緩存

HTTP 緩存

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

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

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

Last-Modified?頭

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

通過(guò)配置 yii\filters\HttpCache::lastModified 屬性向客戶(hù)端發(fā)送?Last-Modified?頭。該屬性的值應(yīng)該為 PHP callable 類(lèi)型,返回的是頁(yè)面修改時(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í)啟用。它會(huì)基于頁(yè)面最后修改時(shí)間生成一個(gè)?Last-Modified?HTTP 頭。當(dāng)瀏覽器第一次訪(fǎng)問(wèn)index?頁(yè)時(shí),服務(wù)器將會(huì)生成頁(yè)面并發(fā)送至客戶(hù)端瀏覽器。之后客戶(hù)端瀏覽器在頁(yè)面沒(méi)被修改期間訪(fǎng)問(wèn)該頁(yè),服務(wù)器將不會(huì)重新生成頁(yè)面,瀏覽器會(huì)使用之前客戶(hù)端緩存下來(lái)的內(nèi)容。因此服務(wù)端渲染和內(nèi)容傳輸都將省去。

ETag?頭

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

通過(guò)配置 yii\filters\HttpCache::etagSeed 屬性向客戶(hù)端發(fā)送?ETag?頭。該屬性的值應(yīng)該為 PHP callable 類(lèi)型,返回的是一段種子字符用來(lái)生成 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í)啟用。它會(huì)基于用戶(hù)請(qǐng)求的標(biāo)題和內(nèi)容生成一個(gè)?ETag?HTTP 頭。當(dāng)瀏覽器第一次訪(fǎng)問(wèn)?view頁(yè)時(shí),服務(wù)器將會(huì)生成頁(yè)面并發(fā)送至客戶(hù)端瀏覽器。之后客戶(hù)端瀏覽器標(biāo)題和內(nèi)容沒(méi)被修改在期間訪(fǎng)問(wèn)該頁(yè),服務(wù)器將不會(huì)重新生成頁(yè)面,瀏覽器會(huì)使用之前客戶(hù)端緩存下來(lái)的內(nèi)容。因此服務(wù)端渲染和內(nèi)容傳輸都將省去。

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

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

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

Cache-Control?頭

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

Cache-Control: public, max-age=3600

會(huì)話(huà)緩存限制器

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

SEO 影響

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