為了達到高效能web的訪問的效果 ,最有效方法就是網站的靜態化了,產生html訪問。比如,做一個cms,有一些地方大家是怎麼解決的呀?
+ 分類列表頁產生機制?
是後台定成產生,還是有新文章的時候,就產生分類列表頁?還是不產生?
+ 文章頁面
文章頁面,有幾個動態問題,比如,閱讀次數,評論,對於這些靜態中常變的部分,採用什麼機制呢?
回複內容:
為了達到高效能web的訪問的效果 ,最有效方法就是網站的靜態化了,產生html訪問。比如,做一個cms,有一些地方大家是怎麼解決的呀?
+ 分類列表頁產生機制?
是後台定成產生,還是有新文章的時候,就產生分類列表頁?還是不產生?
+ 文章頁面
文章頁面,有幾個動態問題,比如,閱讀次數,評論,對於這些靜態中常變的部分,採用什麼機制呢?
我個人認為,網站靜態化,並不一定非要靠寫代碼實現整站 HTML 的產生,有些工具能提供非常好的緩衝機制。在 Web 開發中,最關鍵的瓶頸往往在於資料庫,減少資料庫的讀寫壓力,就是緩衝的主要作用。
在可以提供緩衝功能的工具中,應用程式層的可以用 Memcache 和 Redis,前端緩衝可以用 Varnish 和 Nginx 的提供的緩衝功能,當然還要合理利用 304 狀態代碼。
以 Memcache 和 Redis 為例,它們的作用是讓你能夠把資料庫的資料儲存在記憶體或者是磁碟檔案上,這樣每次請求過來你仍然可以通過程式來控制商務邏輯,但是極大地減少了資料庫的訪問,效能自然提升。
而對於 Varnish 和 Nginx 這樣具有反向 Proxy功能的工具來說,它們的作用就是將第一次動態請求的頁面緩衝起來,在到期時間內,接下來的請求返回的都是緩衝裡的資料,不再向後端伺服器發起請求。
而對於你後面的問題,閱讀次數,評論這些靜態中常變的部分,使用不同工具的情況下也有不同的解決方案。
文章的閱讀次數 —— 使用應用程式層緩衝的情況下,可以先把閱讀次數寫入到緩衝中,在後台寫個指令碼定期從緩衝中讀出來寫入到資料庫裡。使用前端緩衝的情況,可以用 Ajax 非同步呼叫把閱讀次數寫入到資料庫中,如果寫壓力大的話,就像使用應用程式層緩衝一樣,先寫入緩衝,再寫指令碼定期讀。
評論 —— 同學你知道有兩個東西叫 Disqus 和 多問 嗎?如果你要手動管理評論的話,使用應用程式層緩衝的情況下,就像平常一樣讀寫即可,只需要做好緩衝管理;如果用前端緩衝的話,以 Varnish 為例,讀的時候可以用 ESI Tag 這個特性,就像 Apache 的 SSI 一樣,寫評論的話,還是要用 Ajax 來非同步寫入,當然,你得在 Varnish 裡設定不緩衝 POST 提交。
歡迎深入討論。
1,手動產生,比如織夢cms
2,配置快取檔案到期時間,使用者訪問頁面時,判斷快取檔案是否到期,如果沒有到期,直接讀取快取檔案,如果到期,就執行PHP代碼重新讀取資料庫的資料產生快取檔案
提供下我們現在使用的不成熟方案,僅供參考:
列表頁
在有新文章時,靜態產生1-3頁左右的列表頁。再往後的列表頁直接才有動態內容。因為實際上1-3頁的列表頁UV會比較高,再往後的話訪問深度會比較低。這樣相對而言在產生速度和效能上保持平衡,具體要看業務情境。
局部動態內容
使用ajax非同步載入,寫成rest-api。同時,使用memcached或redis進行緩衝。