網站靜態化方案(一)靜態化原理
時間:2016-10-26 15:52:04
作者:zhongxia
原文地址:https://github.com/zhongxia245/blog/issues/39
網站靜態化,看產品或者網站的需求,不要為了靜態化而靜態化。
這里主要講一些原理,沒有具體的實例。
一、 為什么要靜態化?
-
加快頁面打開瀏覽速度,靜態頁面無需連接數據庫打開速度較動態頁面有明顯提高;
-
有利於搜索引擎優化SEO,Baidu、Google都會優先收錄靜態頁面,不僅被收錄的快還收錄的全;
-
減輕服務器負擔,瀏覽網頁無需調用系統數據庫;
-
網站更安全,HTML頁面不會受php相關漏洞的影響; 觀看一下大一點的網站基本全是靜態頁面,而且可以減少攻擊,防sql注入。
當然有好處,也有不足?
-
信息不同步。只有重新生成HTML頁面,才能保持信息同步。
-
服務器存儲問題。數據一直增加,靜態HTML頁面會不斷增加,會占用大量的磁盤。需要考慮這個問題
-
靜態化算法的精密性。要良好的處理數據與網頁模板,及各種文件鏈接路徑的問題,這就要求我們在靜態化的算法中考慮到方方面面。稍有細小疏忽,將導致生成的頁面中存在這樣或那樣的錯誤鏈接,甚至存在死鏈。因此,我們必須恰到好處的解決這些問題。既不能增加算法的可能性,又要照顧到方方面面。做到這一點,的確不容易。
二、PHP靜態化
參考文章:《分享常見的幾種頁面靜態化的方法》
PHP靜態化的簡單理解就是使網站生成頁面以靜態HTML的形式展現在訪客面前,PHP靜態化分純靜態化和偽靜態化,兩者的區別在於PHP生成靜態頁面的處理機制不同。
純靜態化:PHP生成HTML文件
偽靜態化:把內容存放在nosql內存(memcached),然后訪問頁面的時候,直接從內存里面讀取。
大型動態網站靜態化
參考文章:《大型網站的靜態化處理》
大型網站(高訪問量,高並發量),如果是靜態網站,可以通過擴展足夠多的 web服務器,然后支持超大規模的並發訪問。
如果是一個動態的網站,特別是使用到了數據庫的網站是很難做到通過增加web服務器數量的方式來有效的增加網站並發訪問能力的。比如淘寶,京東。
靜態化方案:
大型靜態網站之所以能夠快速響應高並發,因為他們盡量把動態網站靜態化。
-
js,css,img等資源,服務端合並在返回
-
CDN 內容分發網絡技術【網絡傳輸的效率跟距離長短有關系的原理,通過算法,計算最近的靜態服務器節點】
-
web服務器動靜結合。頁面有一部分是一直不變的,比如 header, footer 部分。 那么這一部分是否可以放在緩存。web服務器 apache或ngnix, appache有一個模塊叫做ESI,CSI。能夠動靜拼接。把靜態的部分緩存在 web服務器上,然后和服務器返回的動態頁面拼接在一起。
-
瀏覽器實現動靜結合,前端MVC。