為什麼做頁面優化要用靜態化,靜態化如何落地?
- 2019 年 11 月 21 日
- 筆記
動態網頁,是以.asp、.jsp、.php、.perl、.cgi等形式為後綴,並且在動態網頁網址中有一個標誌性的符號—「?」。首先它不是真實存在的,他需要執行ASP,php,asp.net這樣的外邊語言所生成的一個虛擬的網頁。
靜態化頁面的好處:
1、網頁打開速度快
動態頁面存放在資料庫中,當打開這個頁面的時候程式調用資料庫中的表文件,然後把內容展現出來,這個過程就需要一定的時間。靜態頁面的網頁本身已經是儲存在我們的資料庫裡面的真實的頁面,當用戶訪問的時候它直接可以呈現給用戶看。對於一個網站來說,首先是打開速度。一個頁面打開時需要好幾秒,這樣的網站用戶一定是直接關掉。所以為了減少用戶的時間成本盡量選擇靜態頁面。

2、有利於搜索引擎的抓取收錄
對於蜘蛛來說,更加喜歡html,因為純靜態網站訪問網站時候不需要調用資料庫,直接訪問,提高網站的速度,蜘蛛程式訪問一個網站不是無時間限制的訪問抓取,蜘蛛根據網站權重的高低,蜘蛛程式訪問網站的時間是一定的,提高網站速度這樣就能讓蜘蛛在同一時間內抓取多個頁面。
3、靜態網頁相對比較穩定
靜態網頁從安全形度講,很少遭到黑客攻擊,除開源程式採用的是開源cms。如果黑客不知道網站的後台、網站採用程式、資料庫的地址,靜態網頁更不容易受到黑客的攻擊網站靜態化生成html有什麼好處SEO網站優化。而且從網站穩定性來講,靜態網頁不會因為程式等,而損失網站數據,影響正常打開,從而損失用戶體驗,影響網站信任度。
靜態化方案
目前主流的靜態化主要有兩種:
(1)一種是通過程式將動態頁面抓取並保存為靜態頁面,這樣的頁面的實際存在於伺服器的硬碟中;
(2)另外一種是通過WEB伺服器的 URL Rewrite的方式,它的原理是通過web伺服器內部模組按一定規則將外部的URL請求轉化為內部的文件地址,一句話來說就是把外部請求的靜態地址轉化為實際的動態頁面地址,而靜態頁面實際是不存在的。這兩種方法都達到了實現URL靜態化的效果,但是也各有各自的特點。
(3)還有一種是把頁面劃分成子數據塊,每個數據塊可能是一個inc文件,也可能多個數據塊包含在一個inc文件中。具體的數據塊劃分根據頁面的業務結構來處理。比如:網站頭尾等公共數據塊可以獨立成一個文件。
如何實時生成靜態頁面
使用freemarker實現生成靜態頁面,將頁面的實際存在於伺服器的硬碟中,然後通過nginx反向代理伺服器訪問資源;
將動態頁面轉化為實際存在的靜態頁面這種方法,由於靜態頁面的存在,少了動態解析過程,所以提高了頁面的訪問速度和穩定性,使得優化效果非常明顯。所以這種方法被廣泛採用。但是它的局限性同樣存在。對於大型網站而言,這種方法將帶來不可忽視的問題。
一、由於生成的文件數量較多,存儲需要考慮文件、文件夾的數量問題和磁碟空間容量的問題;
二、頁面維護的複雜性和大工作量,及帶來的頁面維護及時性問題,需要一整套站點更新制度。
雖然靜態頁訪問速度快,但實現起來畢竟還是比較麻煩了,維護也是一個麻煩事情。如果您的站點更新速度快那麼就需要在你的後台數據更新部分調用相應的createHTML方法實時的生成靜態頁面。如果更新速度不慢可以在後台手動更新或者利用作業系統的定時任務功能去執行你的靜態頁面生成程式。
實戰商品詳情頁面靜態化
輸出文件的名稱:商品id+「.html」
輸出文件的路徑:工程外部的任意目錄。
網頁訪問:使用nginx訪問網頁。在此方案下tomcat只有一個作用就是生成靜態頁面。
工程部署:可以把生成頁面服務部署到多個伺服器上。
生成靜態頁面的時機:商品添加後,生成靜態頁面。可以使用mq,訂閱topic(商品添加)

(1)商品添加時,發送topic消息給消息隊列伺服器;
(2)消息隊列伺服器收到topic消息後,將消息發送給訂閱topic的靜態頁面生成服務,生成靜態頁面;
(3)有多個靜態頁面生成伺服器訂閱商品添加topic,因此保證了多台伺服器都一致保存了商品資訊,實現了備份;
(4)外界通過nginx反向代理根據並發量和任務強度訪問不同的靜態頁面伺服器;
(5)通過nginx的http伺服器訪問靜態資源實現網站頁面靜態化。
Q&A
1、Freemaker生成靜態頁面的時機?
添加商品後使用mq廣播消息,freemaker監聽到消息去資料庫查詢商品生成靜態頁面
2、為什麼不去redis中獲取商品資訊?
添加商品時還沒有存到redis中
3、為什麼不直接使用商品資訊還要到資料庫中查詢?
不在一個項目中傳輸數據麻煩,也起不到提高效率的作用,而且修改數據時也要修改靜態頁面
WEB伺服器的 URL Rewrite的方式
URL Rewrite方式特點同樣鮮明,由於是伺服器內部解析的地址,所以內容是實時更新的,也不存在文件管理和硬體問題,維護比較方便。在伺服器級URL Rewrite重寫技術並不影響頁面的執行速度。但是URL Rewrite的門檻比較高,中國虛擬主機大多不支援,而且虛擬主機是目錄級的URL Rewrite,通過遍歷目錄讀物URL轉發規則的方式將大大降低頁面的執行速度。
將頁面分成子數據塊
把頁面劃分成子數據塊,每個數據塊可能是一個inc文件,也可能多個數據塊包含在一個inc文件中。具體的數據塊劃分根據頁面的業務結構來處理。比如:網站頭尾等公共數據塊可以獨立成一個文件。
總結
對於一個大型網站來說,生成的頁面數據會非常多,管理這些頁面文件又是一個問題。例如有的頁面被刪除了,而已經生成的頁面數據還會存在各個web伺服器上。這時就需要通過後台系統記錄這些頁面文件的部署位置,以便今後統一管理。同時業務組件的量也可能會比較多,特別是存在多版本的情況下,所以也需要把業務組件的配置情況記錄到資料庫中,便於統一管理。
在web開發里,除了需要瀏覽器處理的,其他技術都可以當做服務端來理解,如果我們網站使用到了CDN,使用到了靜態web伺服器例如apache,以及服務端的web容器例如jboss,那麼按請求的行進路徑,我們結果處理越早那麼網站響應效率也就越高,所以當請求在CDN返回了,那麼肯定比在apache返回效率高,在apache就返回了肯定比jboss返回的效率高,再則服務端的web容器本身因為服務端程式運行要消耗部分系統資源,所以它在處理請求的效率會比CDN和apache差很多,所以當我們按照動靜分離策略拆分出了靜態資源後,這個資源能不放在最底層的服務端的web容器處理就不要放在服務端的web容器里處理。
作者:chun_soft 來源:https://blog.csdn.net/ztchun/article/details/78007926