針對讀者:網絡程序員,尤其是前端程序員。
一般說來,只有移動才有這個問題,因為桌面太強大了。移動一般在三個方面比桌面遜色很多。第一是CPU速度,第二是網速,或者稱帶寬,第三是內存。
眼下網絡應用的一個重要問題是顯示速度,如果讓網民多等一秒鐘,就不爽了,如果要等若干秒,那這個網站可能就是不想活了。而因為以上原因,移動顯示要比桌面慢很多倍,速度和等待時間可能就很可觀了。網頁加快技術是WPO(Web performance optimization)里極其重要的一部份。
現在網頁的複雜性也惡化了這個問題,因為有大量的動態腳本,無論是CSS還是JS。另外,HTML5固然強大,本身占有資源也不少。更加上為了追求完美或者發展環境,大量的庫,插件和框架被運用,這些全都消耗資源。
在上面三個方面,內存問題最小,僅僅是在大數據量,大程序,或者編程不佳,內存沒有釋放才會出問題。而且問題往往乾脆就是崩潰了。影響速度最主要的還是CPU和網速。
但網速是很客觀和無奈的。作為程序員,可做的不多,了不起就是把AJAX改成WbSocket,這樣雖然快一點,但這樣不但前端要變,後端也要加入大量程序工作。
前端只能在一定的網速下,減輕對網速的負擔。
首先是減少外調庫或者程序的聯結次數,無論是CSS還是JS的。能夠合併儘量合併。HTTP次數越少越好。
但同時不宜把可以外掛的連接內容拷貝進網頁里來,那永遠不是什麼好主意。另外,如果可以把遠程的外掛文件拷貝在本地,也是加快速度的好事。
CDN翻譯IP地址花時間,可以直接用IP,當然顯示仍然可以用CDN字符串。
外掛文件可以去掉空格,或者用min文件。
HTTPS要用掉大量資源,儘可能考慮用HTTP,比如對AJAX需要加密部分採用HTTPS。
一般說來,JS腳本不會對上來顯示有關,所以應該放在頁面顯示之後,CSS腳本也是同樣道理,但固定和初始化的辦法直接放進HTML文件里。原則是:在網頁完成顯示之前不操作任何JS和CSS(動態的)。
在網頁完成顯示之前更不應該,也沒有可以避免的是AJAX或者redirection操作了。這是網絡程序員可以起碼做的到的。如果需要進行後台操作,比如數據庫提取,那這個操作可以在後台提前。就是在比較極端的情況下,程序也可以通過數據庫來更新相對靜態(指不需要初始化就操作AJAX)的網頁以供網民。總之,相對比較靜態的網頁準備必須就可能做到。當然,網頁的參數可以很多,如何儘可能做到完全依靠程序員的經驗和能力了。
|