4 查詢效能優化技術之頁面靜態化

2021-10-09 07:49:12 字數 1945 閱讀 9060

cdn一邊返回對應的檔案,一邊將檔案按照http指示的生命週期快取起來,以便下次使用者訪問時,直接返回。

cdn有很多的加速節點,當使用者請求cdn的時候,cdn會返回乙個就近的節點為他加速,如果cdn中有相應的檔案,就立刻返回,如果沒有相應的檔案,就訪問源站(nginx伺服器)

cache control狀態標誌著快取的策略

有效性判斷

整個客戶端向瀏覽器請求流程如下:

首先使用者請求資源,

1)先判斷url本地是否有快取,如果沒有直接向伺服器請求,然後返回;

2)如果有,判斷快取是否過期(max-age),沒有過期,直接使用快取資源;

3)如果有max-age但過期,則優先判斷etag:有的話向伺服器請求if-none-match,請求帶上etage;

4)沒有etag,判斷是否有last-modified,然後向伺服器請求if-modified-since(客戶端傳送的匹配資源最後修改時間如果早於資源修改時間last-modified,則無效已經被修改,如果晚於則有效)

5)伺服器返回的是304表示資源沒有修改,則本地快取可直接使用;如果返回200,表示資源被修改,向伺服器發起請求;

部署策略一

如果靜態資源檔案(css,js,img)檔名不變,採用max-age快取時間設定後,如果在快取有效時間內發生版本更新,比如重大故障或更新,如果全都是讓使用者來手動重新整理瀏覽器,清快取,這樣體驗不好,有以下幾種部署策略:

1.css,js,img等元素使用帶版本號部署,例如a.js?v=1.0不便利,且維護困難(如果單純改某個檔案版本,其他檔案是否更新版本號會難以維護)

html內嵌css,js,img這些資源,必須設定成no-cache,向伺服器做快取協商機制。html一般採用強推的概念,可以設定max-age,但每次請求都會讓cdn全部失效,然後回源,這樣將max-age設定乙個短的時間後,使用者就有版本更新

2.css,js,img等元素使用帶摘要部署:例如a.js?v=45edw存在先部署html還是先部署資源的覆蓋問題;

給資源檔名後加乙個部署摘要(一段字串,如果檔案沒變化,摘要也不改變),但會存在問題。

1) 情況1-先部署資源檔案後部署html

某個js檔案發生變化,更改摘要後如果js先部署,js會覆蓋老版本,此時html引用的還是老js,有可能導致不相容問題;

2) 情況2-先部署html後部署資源檔案

先部署html會引用新的js,而此時伺服器還是老的js等,容易出錯

3.(推薦)css,js,imh等元素使用摘要做檔名部署,例如45edw.js,新老版本並存,且可回滾,資源部署完成後再部署html;

部署策略二

html,css,js靜態資源cdn化 -->js ajax動態請求cdn化(將請求變成靜態檔案傳送到cdn)–>全頁面靜態化

定義:在服務端完成html,css,甚至js的load渲染成純html檔案後直接以靜態資源的方式部署到cdn上

phantomjs

首先phantomjs是乙個無頭瀏覽器,可以借助其模擬webkit js 的執行

總結:經過全頁面靜態化以後,從以前重新整理ajax請求填充到html這個過程變成了已經執行好的靜態html頁面,將這個靜態頁面放入cdn中,當使用者進行重新整理或者發起連線請求的時候,可以直接返回這個靜態頁面,速度會更快

034 效能優化 頁面靜態化

思考 美多 的首頁訪問頻繁,而且查詢資料量大,其中還有大量的迴圈處理。問題 使用者訪問首頁會耗費伺服器大量的資源,並且響應資料的效率會大大降低。解決 頁面靜態化 1.為什麼要做頁面靜態化 2.什麼是頁面靜態化 3.頁面靜態化注意點 1.首頁頁面靜態化實現步驟 2.首頁頁面靜態化實現 def gene...

頁面靜態化技術

第一步 修改配置檔案,在system.web節點下新增 type中寫靜態化處理類名,path中寫要靜態化的頁面 第二步 編寫靜態化處理類 using system using system.collections.generic using system.linq using system.web ...

頁面靜態化技術

動態 所謂動態 一般來說去查詢資料庫,比如 特點 查詢資料庫,速度慢 接收引數,安全性要注意 sql注入 不利於seo搜尋引擎優化。靜態 比如 這個就是乙個靜態 特點 不查詢資料庫,速度快 不接收引數,安全性高 利於seo 偽靜態 從形式上看是乙個靜態頁面,但是實際上對應乙個動態頁面,特點 本身需要...