|
A.減少HTTP請求數(shù).
減少HTTP請求數(shù)有什么好處:
降低服務(wù)器跟客戶端的建立和消除HTTP請求和響應(yīng)Header的開銷
減少服務(wù)器為HTTP連接的進(jìn)程和線程的開銷,如果可能,還會(huì)包括GZIP壓縮的CPU開銷.
B.減小被請求文件大小, 減少請求數(shù)據(jù)占用的網(wǎng)絡(luò)帶寬.
C.讓用戶更快的看到想要的結(jié)果.
D.提高客戶端渲染速度.
E讓瀏覽器同時(shí)能請求更多的數(shù)據(jù).
F.提高服務(wù)器相應(yīng)速度.
G.通過版本化控制客戶端Cache.
引用
二.如何解決我們的麻煩
A.如何減少HTTP請求數(shù)
1.合并JS文件跟 CSS文件.
2.合并框架圖片以及相對變動(dòng)較少的圖片成一張,通過CSS背景切割來完成渲染.
3.合理使用本地Cache來緩存JS/CSS/IMAGE.
4.合理使用UserData緩存JS文件,對于FF用戶可以單獨(dú)請求服務(wù)器,這樣能解決80%用戶的問題.
5.把JS跟CSS合并成一個(gè)文件
寫法如下:
<?header('Content-type: */*');?>
<!-- /*
window.onload=function(){
document.getElementById("test2").innerHTML="傳說中滴JS測試者。如果你看到我,那<strong>JS</strong>也生效了";
}
<!-- */
<!-- #test1,#test2{border:3px #000 solid;padding:5px;color:#123456;background-color:#ccc;} strong{color:red;}
引用
以上內(nèi)容的文件同時(shí)被JS跟Style引用,都是有效的
B.減小被請求文件大小,減少請求數(shù)據(jù)占用的網(wǎng)絡(luò)帶寬
1.壓縮JS體積
刪除JS中空白換行,注釋,混淆把長變量換成短變量
2.壓縮CSS體積
刪除CSS注釋
CSS中的寫法盡量用簡寫,比如:
.bak{background:url(sina.gif) no-repeat left};
3.使用DIV+CSS方式搭建網(wǎng)站結(jié)構(gòu),提高CSS重用性,來減少HTML文件大小.
4.使用服務(wù)器端GZIP壓縮JS/ CSS文件,縮小傳輸文件大小.
附注:Apache1跟Apache2的GZIP的效率跟方式不一樣的,根據(jù)需要自行選擇
C.讓用戶更快的看到想要的結(jié)果
用戶對于一個(gè)站點(diǎn)的白頁的忍受時(shí)間根據(jù)統(tǒng)計(jì)是8-12秒.
對于用戶能忍受的頁面白頁時(shí)間是8-10秒, 白頁的產(chǎn)生可能由于各種原因引起,我們能做的就是怎么讓用戶能變的稍微能等待更久.
方案1.多做一個(gè)引導(dǎo)頁,讓用戶體會(huì)其中的變化
案例:mail.aol.com中的loading引導(dǎo)頁
方案2.優(yōu)先載入頁面結(jié)構(gòu)以及結(jié)構(gòu)圖片,后一步載入當(dāng)前頁面數(shù)據(jù),再后 一步載入Iframe,Flash等數(shù)據(jù).讓用戶盡早的看到被打開頁面的希望.
D.提高客戶端渲染速度
這個(gè)問題就比較泛泛了,影響客戶端的渲染速度有多方面的,主要目的都是提高程序方面的效率.
1. 對于大索引的結(jié)構(gòu),盡可能的少用索引訪問,能用訪問兄弟節(jié)點(diǎn)的方式盡可能用訪問兄弟節(jié)點(diǎn)的方式.
var t1=new Date();
var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("xml.xml");
var node=xmlDoc.documentElement.firstChild;
var a=[],i=-1;
do a[++i]=node.getAttribute("text");
while(node=node.nextSibling);
a=a.join("");
document.write(a.length);
alert(new Date()-t1);
引用
2. 字符串拼接盡可能用數(shù)組方式
<script language="JScript">
function StringBuilder(sString){//字符串連接操作類
this.length=0;
this.append=function(sString){
this.length+=(this._parts[this._current++]=String(sString)).length;
this._string=null;
return this;
}
this.toString=function(){
if(this._string!=null)
return this._string;
var s=this._parts.join("");
this._parts=[s];
this._current=1;
return this._string=s;
}
this._current=0;
this._parts=[];
this._string=null;
if(sString!=null)
this.append(sString);
}
var str=new StringBuilder();
str.append("a");
str.append("b");
alert(str.toString());
</script>
引用
3. 大規(guī)模添加節(jié)點(diǎn)數(shù)據(jù),請不要使用appendChild方式,盡量使用類似innerHTML的insertAdjacentHTML方式,FF下需修正
function addHTML(oParentNode, sHTML) {
if(window.addEventListener) {// for MOZ
var oRange = oParentNode.ownerDocument.createRange();
oRange.setStartBefore(oParentNode);
var oFrag = oRange.createContextualFragment(sHTML);
oParentNode.appendChild(oFrag);
}
else {// for IE5+
oParentNode.insertAdjacentHTML("BeforeEnd", sHTML);
}
}
E讓瀏覽器同時(shí)能請求更多的數(shù)據(jù).
瀏覽器默認(rèn)只是支持單域名同時(shí)有兩個(gè)HTTP請求,使用多域名將能把請求數(shù)提高,在網(wǎng)絡(luò)條件優(yōu)良的情況下,能更快的下載數(shù)據(jù),呈現(xiàn)結(jié)果.
對于images2這樣的機(jī)器,為什么能同時(shí)有超過2個(gè)以上請求數(shù),有待考察.
F.對于需快速響應(yīng)的文件,把其放入快速響應(yīng)的服務(wù)器,應(yīng)該是不錯(cuò)的方案,優(yōu)化方案請系統(tǒng)儲(chǔ)備組提供.
G.通過版本化控制客戶端Cache.
通常js/css這類文件改動(dòng)比較頻繁,但是為了加載速度變快,我們有可能需要設(shè)定這類文件的過期時(shí)間為幾天后,這樣我們碰到的問題就是,如何及時(shí)更新這些在cache的文件?
通過一個(gè)簡單的配置,通過修改JS的版本來及時(shí)告訴瀏覽器,這些文件必須重新請求了,不要繼續(xù)使用瀏覽器cache中的數(shù)據(jù).
方案有好幾個(gè):
1. 手動(dòng)改這些js的文件名
2. 手動(dòng)改這些js的路徑
3. 通過URL Rewrite方式來改重定位js路徑
4. 通過一個(gè)在高響應(yīng)服務(wù)器上的一個(gè)js配置告知頁面,這個(gè)頁面該鏈接哪些JS文件
5. 大版本不變,小版本不斷追加,等一定時(shí)間后,統(tǒng)一更新,高效利用cache
JavaScript技術(shù):優(yōu)化網(wǎng)頁之快速的呈現(xiàn)我們的網(wǎng)頁,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。