務器端優化我們網站的速度時,緩存是最關鍵的技術之一。
加速站點需要緩存:它不是讓服務器為每個請求動態創建HTML輸出,而是僅在第一次請求HTML之后創建HTML,緩存它,然后從此開始提供緩存版本,緩存提供更快的響應,并釋放服務器中的資源。從服務器端優化我們站點的速度時,緩存是最重要的任務之一。
生成頁面的HTML輸出時,如果它包含具有用戶狀態的代碼,例如為登錄用戶打印歡迎消息“Hello {{User name}}!”,則無法緩存該頁面。否則,如果有人首先訪問該站點,并且緩存了HTML輸出,那么所有用戶都會受到“Hello!”的歡迎。
因此,緩存插件通常會在用戶登錄時禁用緩存,如下面的插件WP Super Cache所示:
禁用已登錄用戶的緩存是不可取的,應該避免使用,因為即使具有用戶狀態的HTML代碼量與頁面中的靜態內容相比最小,仍然不會緩存任何內容,原因是要緩存的實體是頁面,而不是頁面中HTML代碼的特定部分,因此通過包含一行不能緩存的代碼,就不會緩存任何內容,這是一種全有或全無的情況。
通常為了解決這個問題,我們會搭建服務器,以避免在服務器端使用用戶狀態呈現HTML代碼,并在通過API獲取所需數據后,僅在客戶端呈現它,通過從服務器上呈現的代碼中刪除用戶狀態,即使用戶已登錄,也可以緩存該頁面。
?我們也正在探索一種增強網站緩存的方法 ,主要是為了即使在用戶登錄時也能在網站上啟用緩存,策略依賴于僅對那些需要用戶狀態的頁面禁用緩存,以及使用哪些組件可以決定是在客戶端還是在服務器端呈現,具體取決于訪問用戶狀態的頁面。
最后我們堅信一個網站緩存技術發展,從而提供更快的響應和更好的用戶體驗。
迎關注我的頭條號:Wooola,專注于Java、Golang、微服務架構,致力于每天分享原創文章、快樂編碼和開源技術。
最近發版前端項目,用戶經常反饋新添加功能在線上環境不好用,常出現新老頁面并存的狀況。經前端同事排查法發現,實際上只需要重新刷新一下頁面就沒事了。但是每次去通知用戶肯定不現實,所以需要對前端的js和css等文件采取一定的緩存失效的措施,強制瀏覽器重新去服務器獲取新的js代碼以及css文件。
樓主經過實際的項目情況反饋,總結以下兩點切實可行的辦法,分享給大家,希望對大家有幫助。
時間版本號
如果每次發布,針對修改過的js或者css文件路徑加上時間的版本號,一般以年月日拼寫。
<script type="text/javascript" src="lib/common.js?v=20190719"></script> <link rel="stylesheet" type="text/css" href="assets/css/ie/ie8.css?v=20190719" />
如果發生緊急情況,需要在一天當中對某些css或者js文件多次發版,可以把時間精確到時分秒。
目前樓主主推采用加版本號的方式,因為文件太多,只能做增量修改。好處是沒有做任何修改js或者css文件可以不用加版本號。
采用隨機數
document.write('<script src=\".lib/common.js?r=' + Math.random() + "\"" + '><\/script>');
一般不建議用隨機數的方式,因為每次刷新頁面,隨機數都會變化,那么瀏覽器認為一個新的url需要重新請求服務端獲取js或css文件,不會在使用瀏覽器本地緩存。同時占用網絡帶寬,影響服務器響應速度。
可以利用 gulp-rev或者webpack
entry: { main: './src/common.js', slove: './src/ie8.js' }, output: { filename: '[name].[hash].js', path: path.resolve(__dirname, 'dist') }
例如百度搜索首頁,就是利用hash給js和css文件重命名。
齡稍微大一點的朋友都知道,以前百度搜索有一個查看網頁快照的功能。當用戶從搜索結果中點擊某個感興趣的網頁鏈接地址,原網頁可能因為各種原因無法打開,最常見的就是報404錯誤。
如果碰到這種情況,用戶可以點擊搜索結果旁邊的“百度快照”,就可以打開一個原網頁的快照副本,也就是原網頁的緩存。這個副本可能去掉了CSS和各種樣式,版面也可能會發生錯亂,但是會保留、顯示源網頁的主要文字部分內容,這個功能非常方便實用。
提起這個功能,小編當年有一個記憶非常深刻、而且有點“搞笑”的事情。有一次小編在后臺誤刪除了一篇非常重要的文章,結果嘗試了各種辦法,怎么也找不回來。
最后,小編抱著死馬當活馬醫的心態,在百度搜索原文章的標題,成功找到了之前那篇文章的鏈接。當然,由于在這之前我已經刪除了這篇內容,所以當時這個鏈接指向的是一個不存在的空鏈接,是不可能打開的。
所幸的是點擊旁邊的百度快照,可以成功地打開、看到原網頁的快照緩存副本,那篇文章還在,于是我趕緊把文章復制添加回數據庫,成功地找回恢復了原內容,有驚無險。
現在大家都知道,百度已經在搜索結果中刪除了這項功能,現在用戶已經無法查看網頁緩存快照了,另外一方面,作為全球搜索市場上的龍頭,谷歌一直保留著這項功能。
不過有一段時間,也有部分用戶反映吐槽,表示自己在使用谷歌搜索的時候,無法使用這個功能。很明顯,谷歌方面在進行調整測試,引發了很多用戶的擔憂。
現在壞消息來了,2024年2月2日,谷歌高管丹尼·沙利文(Danny Sullivan)宣布,谷歌方面也將在搜索結果中刪除查看網頁緩存功能,該功能將被正式關閉。丹尼·沙利文(Danny Sullivan)在其個人社交媒體上發文宣布了這個消息,并解釋了原因。
該高管表示,谷歌之所以在早期推出這項功能,主要是因為在互聯網普及的初期,網站(包括提供支持的后臺服務器和骨干通信網)各方面的可靠性較差。
在這種情況下,部分網站(或者網頁)出現打不開,或者加載速度緩慢的情況比較普遍。在這種背景下,谷歌在搜索結果中提供查看網頁緩存的功能非常有必要,而且很實用。
但是,現在的情況和當時已經不可同日而語了,主流網站穩定性和可靠性都很高,網頁打不開的問題基本不存在了,所以谷歌方面決定正式棄用、刪除這項功能。
其實,在搜索結果中提供原網頁的緩存快照副本,還有很多其它功能和作用,去掉非常可惜。但這是一種大趨勢,現在幾乎所有的搜索引擎都不再提供這項功能,一個時代過去了。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。