問題:拿10萬文章的動易系統和10萬主題的動網論壇相比,都是采用動態頁面,單就資源占用來說,相同的服務器動網可以迅速訪問,而用動易的服務器早就死機了。假如動易不重視這個問題會很危險的。后果會很嚴重。
解答:讓我們來分析一下同樣的數據量時,動網論壇為什么快,而動易相當占資源。
1、10萬主題的論壇的數據量,看起來很大,但因為90%的貼子可能只有幾個字,查詢時與10萬篇平均1000字的文章比起來,所占用內存等會相差多大?另外,動網的前臺顯示基本上是沒有顯示內容的,而動易的顯示是可以自定義顯示內容,許多網站也正使用了這一點,這一項功能比起來,動易就根本不可能達到動網的“快”,因為完全是不同的應用,不同的數據模式,不同的設計思想。
2、再來看每個頁面。動易比動網慢的頁面只有兩種頁面:首頁和大類欄目頁。
先看首頁,動網的首頁主體部分只顯示了一級欄目的信息,這只需要一次查詢即可,只相當于動易首頁的欄目導航或頂部欄目菜單中的一級欄目部分,動易相比較而言,在首頁不僅顯示了一級欄目,所有的欄目都顯示了。另外最重要的是,動易首頁的每個欄目都還要查詢數據庫,以顯示每個欄目的文章列表。假如是在網站首頁,這些欄目還可能跨頻道,這樣為了得到正確的路徑,還要查詢相應的頻道設置等。這樣多的功能,還要求達到論壇首頁一樣的速度?同樣在首頁,公告、友情鏈接、調查、統計等其他功能,動易一項不少,這些都需要查詢數據庫,當然也要消耗一些資源。首頁是大家訪問最多的頁面,就算是同樣的數據,因為動易相對來說,因為要顯示每個欄目的文章列表,這樣每個欄目要多一次查詢,20個欄目就要多20次查詢,當然會比論壇首頁慢多了。假如把動易首頁的顯示樣式改為論壇一樣,動易至少可以提速幾十倍。但改成論壇的首頁樣式,還是網站的首頁嗎?
再看大類欄目頁,動網論壇仍是只顯示子欄目的信息,只需一個查詢即可,只相當于動易大類欄目頁的子欄目導航功能。動易在大類欄目頁是采用分類顯示的,所以同樣需要對每個子欄目查詢,以顯示每個子欄目的文章列表。這樣,當大類下有20個子欄目時,除了一次查詢子欄目外,還要20次查詢每個子欄目的文章列表。這樣,當然又要比論壇慢上幾十倍了。
然后看子欄目頁面,這里動易和動網的速度基本上是一樣的。因為都只有一次查詢,采用的都是聯合查詢,采用了同樣的分頁算法。但論壇是不顯示貼子內容的,而有些使用動易的網站的列表是“每篇文章的標題下面再顯示文章的內容簡介”,這樣肯定要比論壇多占用許多資源了。
再看搜索結果頁,論壇默認的是在某個欄目中進行搜索,而動易默認是全站搜索,這里可想而知,速度方面又不在一個檔次上。
最后,我想和大家說的是,動易在這三年的發展過程,在程序代碼和速度算法上,從未停止過優化的進程。我們已經盡我們所能,把代碼和算法優化到最好的程序。舉一些例子吧:
1、1.0版和2.0版是兩級分類,3.0版以后是無限級分類,功能加強了,但也帶來一個速度方面的大影響。懂點程序的人應該都知道,在兩級分類時,我要查詢屬于某個大類的文章時,只需簡單的一句查詢代碼(select * from PE_Article where BigClassID=2)即可。到了無限級欄目,則要針對某個大類,先查詢出他下面的所有小類(select ClassID from PE_Class where ParentID=2),這樣得到一個欄目ID數組(如2,6,8,11,35,87),然后必須這樣查詢(select * from PE_Article where ClassID in (2,6,8,11,35,87),才能得到這個大類的所有文章,這樣在性能上就下降了不止10倍。這兩個查詢也可以用一個查詢來實現(select * from PE_Article where ClassID in (select ClassID from PE_Class where ClassID=2 or ParentID=2),但性能是差不多的。其實這里還簡化了邏輯,因為并沒有考慮三級或四級以上的欄目結構,沒有考慮這個大類欄目下有三四級子欄目的情況。所以性能方面還要下降。在2005版中,我們通過事先把屬于此欄目的所有子欄目的ID放到一個字段中,這樣就解決了了這個問題,使得無限級欄目的性能與兩級欄目的性能相差不是太大。從而使得首頁的執行速度提升了10倍不止,欄目結構越復雜,性能提升越明顯。
|
新聞熱點
疑難解答
圖片精選