<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 片段緩存 片段緩存指的是緩存頁面內容中的某個片段。例如,一個頁面顯示了逐年銷售額的摘要表格,可以把表格緩存下來,以消除每次請求都要重新生成表格的耗時。片段緩存是基于[數據緩存](http://www.yiichina.com/doc/guide/2.0/caching-data)實現的。 在[視圖](http://www.yiichina.com/doc/guide/2.0/structure-views)中使用以下結構啟用片段緩存: ~~~ if ($this->beginCache($id)) { // ... 在此生成內容 ... $this->endCache(); } ~~~ 調用 yii\base\View::beginCache() 和 yii\base\View::endCache() 方法包裹內容生成邏輯。如果緩存中存在該內容,yii\base\View::beginCache() 方法將渲染內容并返回 false,因此將跳過內容生成邏輯。否則,內容生成邏輯被執行,一直執行到 yii\base\View::endCache() 時,生成的內容將被捕獲并存儲在緩存中。 和[[數據緩存]](http://www.yiichina.com/doc/guide/2.0/caching-data)一樣,每個片段緩存也需要全局唯一的?`$id`?標記。 ## 緩存選項 如果要為片段緩存指定額外配置項,請通過向 yii\base\View::beginCache() 方法第二個參數傳遞配置數組。在框架內部,該數組將被用來配置一個 yii\widget\FragmentCache 小部件用以實現片段緩存功能。 ### 過期時間(duration) 或許片段緩存中最常用的一個配置選項就是 yii\widgets\FragmentCache::duration 了。它指定了內容被緩存的秒數。以下代碼緩存內容最多一小時: ~~~ if ($this->beginCache($id, ['duration' => 3600])) { // ... 在此生成內容 ... $this->endCache(); } ~~~ 如果該選項未設置,則默認為 0,永不過期。 ### 依賴 和[[數據緩存]](http://www.yiichina.com/doc/guide/2.0/caching-data)一樣,片段緩存的內容一樣可以設置緩存依賴。例如一段被緩存的文章,是否重新緩存取決于它是否被修改過。 通過設置 yii\widgets\FragmentCache::dependency 選項來指定依賴,該選項的值可以是一個 yii\caching\Dependency 類的派生類,也可以是創建緩存對象的配置數組。以下代碼指定了一個片段緩存,它依賴于?`update_at`?字段是否被更改過的。 ~~~ $dependency = [ 'class' => 'yii\caching\DbDependency', 'sql' => 'SELECT MAX(updated_at) FROM post', ]; if ($this->beginCache($id, ['dependency' => $dependency])) { // ... 在此生成內容 ... $this->endCache(); } ~~~ ### 變化 緩存的內容可能需要根據一些參數的更改而變化。例如一個 Web 應用支持多語言,同一段視圖代碼也許需要生成多個語言的內容。因此可以設置緩存根據應用當前語言而變化。 通過設置 yii\widgets\FragmentCache::variations 選項來指定變化,該選項的值應該是一個標量,每個標量代表不同的變化系數。例如設置緩存根據當前語言而變化可以用以下代碼: ~~~ if ($this->beginCache($id, ['variations' => [Yii::$app->language]])) { // ... 在此生成內容 ... $this->endCache(); } ~~~ ### 開關 有時你可能只想在特定條件下開啟片段緩存。例如,一個顯示表單的頁面,可能只需要在初次請求時緩存表單(通過 GET 請求)。隨后請求所顯示(通過 POST 請求)的表單不該使用緩存,因為此時表單中可能包含用戶輸入內容。鑒于此種情況,可以使用 yii\widgets\FragmentCache::enabled 選項來指定緩存開關,如下所示: ~~~ if ($this->beginCache($id, ['enabled' => Yii::$app->request->isGet])) { // ... 在此生成內容 ... $this->endCache(); } ~~~ ## 緩存嵌套 片段緩存可以被嵌套使用。一個片段緩存可以被另一個包裹。例如,評論被緩存在里層,同時整個評論的片段又被緩存在外層的文章中。以下代碼展示了片段緩存的嵌套使用: ~~~ if ($this->beginCache($id1)) { // ...在此生成內容... if ($this->beginCache($id2, $options2)) { // ...在此生成內容... $this->endCache(); } // ...在此生成內容... $this->endCache(); } ~~~ 可以為嵌套的緩存設置不同的配置項。例如,內層緩存和外層緩存使用不同的過期時間。甚至當外層緩存的數據過期失效了,內層緩存仍然可能提供有效的片段緩存數據。但是,反之則不然。如果外層片段緩存沒有過期而被視為有效,此時即使內層片段緩存已經失效,它也將繼續提供同樣的緩存副本。因此,你必須謹慎處理緩存嵌套中的過期時間和依賴,否則外層的片段很有可能返回的是不符合你預期的失效數據。 > 譯注:外層的失效時間應該短于內層,外層的依賴條件應該低于內層,以確保最小的片段,返回的是最新的數據。 ## 動態內容 使用片段緩存時,可能會遇到一大段較為靜態的內容中有少許動態內容的情況。例如,一個顯示著菜單欄和當前用戶名的頁面頭部。還有一種可能是緩存的內容可能包含每次請求都需要執行的 PHP 代碼(例如注冊資源包的代碼)。這兩個問題都可以使用**動態內容**功能解決。 動態內容的意思是這部分輸出的內容不該被緩存,即便是它被包裹在片段緩存中。為了使內容保持動態,每次請求都執行 PHP 代碼生成,即使這些代碼已經被緩存了。 可以在片段緩存中調用 yii\base\View::renderDynamic() 去插入動態內容,如下所示: ~~~ if ($this->beginCache($id1)) { // ...在此生成內容... echo $this->renderDynamic('return Yii::$app->user->identity->name;'); // ...在此生成內容... $this->endCache(); } ~~~ yii\base\View::renderDynamic() 方法接受一段 PHP 代碼作為參數。代碼的返回值被看作是動態內容。這段代碼將在每次請求時都執行,無論其外層的片段緩存是否被存儲。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看