第一章
加載與執行:
1,js腳本會阻塞頁面渲染,<script>盡可能放到<body>標簽的底部
2, 合並腳本,頁面中的<script>標簽越少;HTTP請求帶來的額外開銷方面,減少頁面外鏈腳本文件的數量將會改善性能
3,css文件是並行下載,不會阻塞頁面的其他進程
高性能JavaScript編程(高清PDF原版)及中英文對照版 PDF 下載:http://www.linuxidc.com/Linux/2015-08/121418.htm
無阻塞腳本:
1,延遲腳本:使用<script>的defer屬性(僅適用於IE4+和Firefox3.5以上版本)
2,動態創建<script>來下載並執行代碼
3,適用XHR對象下載js代碼並注入頁面
無阻塞腳本工具:YUI3,LazyLoad , LABjs
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
第三章:DOM編程
浏覽器把DOM和javascript 獨立實現,兩個相互獨立的功能只要通過接口彼此連接,就會產生消耗。
性能優化:
(1),最小化DOM訪問次數,盡可能在javascript端處理
E.g:
function innerHTMLLoop(){
for(var count=0;count<15000;count++){
document.getElementById('here').innerHTML += 'a';
}
}
優化後:
function innerHTMLLoop(){
var content = '';
for(var count=0;count<15000;count++){
content += 'a';
}
document.getElementById('here').innerHTML = countent;
}
(2) , HMTL集合優化
HTML集合包含了DOM節點引用的類數組對象,處於一種“實時狀態”實時存在,
當底層文檔對象更新時,它也會自動更新
HTML集合有:document.getElementsByName() , document.images , document.links等
//一個意外的死循環
//alldivs.length每次迭代都會增加,反映出的是底層文檔的當前狀態
var alldivs = document.getElementsByTagName('div');
for(var i=0;i<alldivs.length;i++){
document.body.appendChild(document.createElement('div'));
}
優化方法: 1,2運行速度差不多
1,把集合長度緩存到一個變量中,,並在迭代中使用
var alldivs = document.getElementsByTagName('div');
var len = alldivs.length
for(var i=0;i<len;i++){
/* 處理代碼 */
}
2,如果需要經常操作集合,建議把集合拷貝到一個數組中
var alldivs = document.getElementsByTagName('div');
var arr = toArray(alldivs); //toArray 自定義的集合到數組的函數
for(var i=0;i<arr.length;i++){
/* 處理代碼 */
}
3,對於任何類型的DOM訪問,當同一個DOM屬性或方法需要多次訪問時,最好使用一個局部變量緩存此變量
function collentionNodesLocal(){
var coll = document.getElementsByTagName('div');
len = coll.length;
name = '';
el = null;
for(var count=0;count<len;count++){
el = coll[count];
name = el.nodeName;
name = el.nodeType;
name = el.tagName;
}
return name;
}