DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 網頁制作代碼經驗總結:JS代碼優化
網頁制作代碼經驗總結:JS代碼優化
編輯:關於JavaScript     

這些是我寫代碼時的一些經驗,總結了一下分想給大家,沒啥順序,想到就寫上了

1.使用局部變量避免使用全局變量
比如


function test(){
                var s = document.getElementById('aaa');
                s.innerHTML = document.body.clientHeight;
        }
 改成


function test(){
                var d = document;
                        s = d.getElementById('aaa');
                s.innerHTML = d.body.clientHeight;
        }
局部變量的好處就是減少了作用域鏈的查找
我建議要是有兩次的引用就用局部變量

2.避免使用with(這個估計地球人都知道)

我理解原因就是with會創建自己的作用域,這樣就加長了原來的作用域鏈,使得在with塊中執行的代碼反而變慢了,在書寫上好像省了代碼,其實在訪問上反而變長變繁瑣了,性能下降了
例子
        使用with


function test(){
                        with(document.body){
                                clientHeight = '200px';
                                clientWidth = '200px'
                        }
                }

        其實都可以寫成


function test(){
                        var ds = document.body;
                        ds.clientHeight = '200px';
                        ds.clientWidth = '200px'
                }

3. 遍歷nodelist的方式

 一般的方式都是

var as = document.getElementsByTagName('div');
        for(var i=0,l<as.length;i<l;i++){//只計算一次長度}
        我的方式一次都不用
        for(var i=0,ci;ci=as[i++];){}當nodeList完結時就為false就結束了
        好處,沒計算長度,省了在循環裡賦值,代碼更加少了,i++到了判斷裡
(注意:這個方式用在nodelist裡可以,如果你用到array裡,可會有問題的,數組裡有個0後者null什麼的就瞎了)

4.別用那麼多個var,一個加逗號就搞定了

var a =1;
        var b = 1;
        var c =1;
        代碼長,性能差
        拆成
        var a=1,
                b=1,
                c=1;

 5.innerHTML是最好的選擇

往元素添加元素時,最好用innerHTML

6.ie的removeChild不好用

一般咱們刪除一個元素會用

elm.removeChild(subElm)

這個在ie下不好用,因為在ie下這個只是把這個元素從dom樹中斷開了,但並沒用真正刪除,它現在變成了孤立的節點了,要想真正刪除,可以這樣


var ryc = document.createElement('div');
        div.appendChild(subElm);
        div.innerHTML = '';
        div = null;

這樣就真的刪除了,除了ie外別的都可以用removeChild達到效果

7.為多個同級元素綁定事件時,不用為每個都綁定,為他們的父級綁定就行了
比如

<ul id="a">
                <li>sdf</li><li>sdf</li><li>sdf</li><li>sdf</li><li>sdf</li><li>sdf</li>
        </ul>
可能你要為每個li添加click

為每個添加那可繁瑣且容易出現溢出(ie)

其實只要為 ul一個添加就行了,因為事件是冒泡向上的


var ul = document.getElementById('a');
        ul.onclick = function (e){
                !e&&(e=event);
                var target = e.srcElement||e.target;
                if(target.tagName=='LI'){
                        //your code
                }
        }

8.盡量用原生的方法,因為原生的都是用c/c++編譯而成的他們執行的要比用js寫的方法快多了
9.appendChild用的多時一定要用docuemntfragment

比如
        for(var i=0;i<1000;i++){
                var o = document.createElement('div');
                document.body.appendChild(o);
        }
用documentFragment


var f = document.createDocumentFragment();
        for(var i=0;i<1000;i++){
                var o = document.createElement('div');
                f.appendChild(o);
        }
        document.body.appendChild(f);
10. if else用的>=3個了,那用switch吧,好閱讀,性能好

11. if<=3,別用if了,用3元表達式吧

12. if==1,if改&&


if(a==1)a=2
        改
        a==1&&(a=2);
13.計算元素位置,while()offsetParent

這個方式是老方式了,現在的浏覽器ie6以上,ff3.1以上,chrome,opera(我只測了最新的)都支持這個el.getBoundingClientRect返回一個對像,分別是top,left,right,bottom的值

14.正則的查找沒有indexOf快


var s= 'sdfsdfsdfAAAsdfdsfs';
for(var i=0;i<1000;i++){
        s.indexOf('AAA')
}
比這個快


var s= 'sdfsdfsdfAAAsdfdsfs';
for(var i=0;i<1000;i++){
        /AAA/.test(s)
}
15.在正則中多用非捕獲(?:)這樣快

16.設置某個元素的style時用cssText簡單些


el.style.cssText +=";postion:absolute;"
(注意:position前;不能去了,因為ie沒有這個;position認不出來了就,比的浏覽器沒這個毛病)

17.在new 時,沒有參數時函數名後邊的括號可以去了


new fn()==>new fn
new Image()==>new Image

先想到這麼多,再想到時在補償,認為不對的提啊,別客氣

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved