靜態和偽靜態都是各有優缺點的
靜態的好處是你生成了html文件,那么訪問量高的時候,服務器的I/O是一個瓶頸。但數據庫的壓力小了,而且更新的時候,需要重新生成。
而偽靜態剛I/O的瓶頸比靜態的要小,但是數據庫的壓力比較大。
如果訪問量和並發比較大的話,就使用靜態吧。
================
靜態文件分發、分布式非常容易,使用CDN很方便,一般不過期,海量流量應付很輕松,只需加CDN帶寬即可。
使用memcache這樣的內存緩存一般只緩存部分時間不敏感、業務不復雜的數據。以空間換速度。memcache對數據過期時間的控制能力較好。
文件緩存:一般情況下磁盤IO才是主要壓力,除非SQL足夠復雜,耗費較多CPU。這個時候也可以交給MySQL的查詢緩存解決。文件緩存常見於壓力不大的站點或者開源程序使用,具有適應性好、對運行環境要求低的特點。
=================
我來說幾句廢話,樓主先把緩存的概念理解透再談緩存。
緩存是什么,緩存就是把低速設備上的文件放入高速設備,把從離終端遠的位置移到靠近終端的位置。
over,就是這么簡單。
理解了概念,你就不會困惑了。不理解請參考3L。3L就是對這個概念的闡述。
有了CDN,靜態訪問不是問題,再加上本地緩存,效果更好。
一切快慢都只是相對的,如果你認為訪問和操作內存就是最快最好的,天下無敵的,那又錯了。
一方面,還有比內存更快的。現在基於JAVA的LMAX架構考慮的深度已經到了CPU的高速緩存這一層了,訪問和操作內存,慢!得想辦法能直接訪問高速緩存,並避免並發爭奪問題。另一方面,還有某些場合下比內存訪問更合適的,如CDN。當然這個例子可能和主題關系不大。只是說明一切都是相對的。
=======================
文件緩存:
還是要請求PHP,由PHP來讀取硬盤上緩存的文件。有時候緩存的是整個頁面的HTML,有時候只是緩存部分數據或者變量值。
靜態化:
不需要PHP來處理,直接由web server讀取文件內容並輸出。靜態化文件的內容只能是HTML代碼或者SHTML代碼。好處是性能和分布式上的優勢,但是沒有PHP來處理靈活。
也有雜合的,比如使用偽靜態來統一URL,然后以一定策略來決定是訪問PHP還是直接HTML。
=======================
如果糾結,推薦一種方案:偽靜態和真靜態結合。
如果你看過wordpress的.htaccess文件,可以發現這樣的偽靜態規則
那如何偽靜態+真靜態呢?
如果訪問壓力大,則生成HTML到指定位置,在重寫規則里!-f條件不成立,這個時候就是真靜態;
如果這個頁面訪問數量少(比如是去年的新聞頁),這個時候真靜態意義已經不大了,這個時候可以通過管理后台直接刪除這個HTML。這個時候重寫規則里!-f條件成立,由PHP分析請求的URL,並輸出HTML代碼。對用戶透明,感覺不到區別。
優點:可伸縮性、節省硬盤、性能和靈活性的最大化
缺點:對靜態頁面要求內容時效不敏感、要求能夠啟用重寫規則
