高性能網(wǎng)站優(yōu)化指南
性能黃金法則:
只有10%~20%的最終用戶響應(yīng)時間花在了下載HTML文檔上。其余的80%~90%時間花在了下載頁面中的所有組件上。
規(guī)則1 減少HTTP請求
可以通過使用圖片地圖,CSS Sprites(有利有弊),內(nèi)聯(lián)圖片(data:URL模式,IE不支持,不能被緩存),合并腳本和樣式表。
規(guī)則2 使用內(nèi)容發(fā)布網(wǎng)絡(luò)
如果應(yīng)用程序web服務(wù)器離用戶更近,則一個HTTP請求的響應(yīng)時間將縮短 ;
如果組件web服務(wù)器離用戶更近,則多個HTTP請求的響應(yīng)時間將縮短。
內(nèi)容發(fā)布網(wǎng)絡(luò)(CDN)是一組分布在多個不同地理位置的web服務(wù)器,用于更加有效地向用戶發(fā)布內(nèi)容。
規(guī)則3 添加Expires頭
web服務(wù)器使用Expires頭告訴web客戶端他可以使用一個組件的當前副本,直到指定的時間為止。要求服務(wù)器與客戶端的時鐘嚴格同步,并且要在時間過期后在服務(wù)器配置中提供一個新的日期。
Max-Age和mod_expires可以彌補Expires的不足。
規(guī)則4 壓縮組件
從HTTp1.1開始,
規(guī)則5 將樣式表放在頂部
逐步呈現(xiàn),避免白屏
規(guī)則6 將腳本放在底部
HTTP1.1規(guī)范建議瀏覽器從每個主機名并行下載兩個組件,在下載腳本時,并行下載實際上是被禁用的。
原因之一是腳本有可能使用document.write來修改頁面內(nèi)容,因此瀏覽器會等待,以確保頁面能夠恰當?shù)夭季郑?br />原因之二是為了保證腳本能夠按照正確的順序執(zhí)行,如果并行下載多個腳本,就無法保證響應(yīng)是按照特定順序到達瀏覽器。
將腳本放在頂部將會阻塞對其后面內(nèi)容的呈現(xiàn),并且會阻塞對其后面組件的下載。
規(guī)則7 避免CSS表達式
表達式expression方法被其他瀏覽器忽略,但是對于IE來說是一個有用的工具。能夠在IE中設(shè)置屬性,創(chuàng)建跨瀏覽器的一致體驗。例如,IE[IE6,IE7(Quirk),IE8(Quirk]不支持min-width屬性,用表達式的方法可以解決這一問題:
width: expression(document.body.clientwidth<600?"600px": "auto");
min-width: 600px;
表達式的問題在于對其進行的求值的頻率比人們期望的要高。他們不僅在頁面呈現(xiàn)和大小改變時求值,當頁面滾動甚至用戶鼠標在頁面上移過時都要求值。我們可以向CSS表達式中添加一個計數(shù)器來進行跟蹤。
表達式計數(shù)器的實例:
http://stevesouders.com/hpws/expression-counter.php
P {
width: expression(setCntr(),document.body.clientwidth<600?"600px": "auto");
min-width: 600px;
}
取代表達式的方法:事件處理器(Event Handlers)
通過在onresize事件中設(shè)置樣式的width屬性來修正min-width問題。
事件處理器的實例:
http://stevesouders.com/hpws/event-handler.php
當瀏覽器的大小改變時,這個例子使用setMinWidth()函數(shù)來修改所有段落元素的大小——
function setMinWidth(){
setCntr(); //用于顯示求值次數(shù)
var aElements = document.getElementsByTagName("p");
for(var i=0;i<aElements.length;i++){
aElements[i].runtimeStyle.width=(document.body.clientwidth<600?"600px": "auto");
}
}
if(1!=navigator.userAgent.indexOf("MSIE")){
window.onresize=setMinWidth;
}
這會在瀏覽器改變大小時中動態(tài)設(shè)置寬度,但是第一次呈現(xiàn)時這并不能恰當?shù)卦O(shè)置段落大小,因此,頁面還需要使用“一次性表達式”,通過表達式設(shè)置初始寬度。
規(guī)則8 使用外部JavaScript和CSS
規(guī)則9 減少DNS查找
規(guī)則10 精簡JavaScript
精簡VS混淆VS壓縮
規(guī)則11 避免重定向
當Web服務(wù)器向瀏覽器返回一個重定向是,響應(yīng)中就會擁有一個范圍在3xx的狀態(tài)碼。這表示用戶代理必須執(zhí)行進一步操作才能完成請求。
重定向影響的是HTML文檔的下載。
規(guī)則12 移除重復(fù)腳本
規(guī)則13 配置ETag
規(guī)則14 使Ajax可緩存
最后奉上本書的內(nèi)容提綱,以備復(fù)習(xí)使用!
相關(guān)文章

15 個為編程初學(xué)者準備的網(wǎng)站(都是國外的一些網(wǎng)站)
今天的文章,我們將分享15個可以學(xué)習(xí)編程的網(wǎng)站,這些網(wǎng)站上提供了很多編程教程,圖書以及編程練習(xí),希望對你有用2024-11-02- 這篇文章主要介紹了web開發(fā)中的長度單位主要包括px,pt,em等,需要的朋友可以參考下2023-08-06
網(wǎng)頁前端開發(fā)的一些尺寸單位(px,rem單位)
px單位是絕對單位,一般用于pc端網(wǎng)頁開發(fā),因為是絕對單位所以在移動端上的使用體驗并不是很好,rem它是描述相對于當前根元素字體尺寸,是相對單位,它可以根據(jù)根元素的變換而2023-08-06WEB前端優(yōu)化必備js/css壓縮工具YUI-compressor詳解與集成用法
壓縮工具層次不窮,各有優(yōu)點,選擇適合的壓縮工具為將來做項目開發(fā)使用是一件很重要的事情?。≡谶@介紹YUI-compressor,需要的朋友可以參考下2023-06-21- 瀏覽器是多進程的,有瀏覽器主進程,網(wǎng)絡(luò)進程,渲染進程,插件進程等,在將html,css,javascript解析成一個頁面的時候,就需要多個進程的分工合作2023-05-01
- 本文為大家整理了常用的文件對應(yīng)的MIME類型,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-25
postman中form-data、x-www-form-urlencoded、raw、binary的區(qū)別介紹
這篇文章介紹了postman中form-data、x-www-form-urlencoded、raw、binary的區(qū)別,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-28網(wǎng)頁中使用Unicode字符的介紹(&#,\u等)
國際組織制定了可以容納世界上所有文字和符號的字符編碼方案,稱為Unicode,是通用字符集Universal Character Set的縮寫,用以滿足跨語言、跨平臺進行文本轉(zhuǎn)換、處理的要求2021-11-27前端實現(xiàn)字符串GBK與GB2312的編解碼(小結(jié))
這篇文章主要介紹了前端實現(xiàn)字符串GBK與GB2312的編解碼(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-12-02
這篇文章主要介紹了告別硬編碼讓你的前端表格自動計算,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-27



