高效能JS–比較nextSibling,ChildNodes,Children速度

來源:互聯網
上載者:User
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><br /><head><br /><title></title><br /><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><br /></head><br /><body><br /><input type="button" value="start-test" id="testBtn" /><br /><ol><br /><li><br /><h3>nextSibling</h3><br /><p id="test-1"></p><br /></li><br /><li><br /><h3>childNodes</h3><br /><p id="test-2"></p><br /></li><br /><li><br /><h3>children</h3><br /><p id="test-3"></p><br /></li><br /></ol><br /><div id="mydiv"></div><br /><script type="text/javascript"><br />function $(){ return document.getElementById(arguments[0]); };<br />for(var i=0; i<8000; i++){<br />var d = document.createElement('div');<br />d.innerHTML = '第一重div<p>第二重p<span>第三重span</span></p>';<br />$('mydiv').appendChild(d);<br />}<br />$('testBtn').onclick = startTest;<br />function startTest(){<br />var time1 = new Date();<br />var tar = testNextSibling();<br />$('test-1').innerHTML = '耗時:' + (new Date() - time1) + '毫秒 ' + tar;<br />var time2 = new Date();<br />var tar2 = testChildNodes();<br />$('test-2').innerHTML = '耗時:' + (new Date() - time2) + '毫秒 ' + tar2;<br />var time3 = new Date();<br />var tar3 = testChildren();<br />$('test-3').innerHTML = '耗時:' + (new Date() - time3) + '毫秒 ' + tar3;<br />}<br />function testNextSibling(){<br />var el = $('mydiv'),<br />ch = el.firstChild,<br />name = '';<br />do {<br />name = ch.nodeName;<br />} while (ch = ch.nextSibling);<br />return name;<br />}<br />function testChildNodes(){<br />var el = $('mydiv'),<br />ch = el.childNodes,<br />len = ch.length,<br />name = '';<br />for(var count=0; count<len; count++){<br />name = ch[count].nodeName;<br />}<br />return name;<br />}<br />function testChildren(){<br />var el = $('mydiv'),<br />ch = el.children,<br />len = ch.length,<br />name = '';<br />for(var count=0; count<len; count++){<br />name = ch[count].nodeName;<br />}<br />return name;<br />}<br /></script><br /></body><br /></html>

運行代碼

原書中說:IE中nextSibling比childNodes表現優異。在IE6中,nextSibling快16倍,IE7中是105倍。

經測試後發現:IE7下:nextSibling要快一些,childNodes與childnren速度相當。IE6下:nextSibling與childNodes差別相當大,children稍快。FF下還是nextSibling快一點。

function testNextSibling(){
    var el = $('mydiv'),
        ch = el.firstChild,
        name = '';
    do {
        name = ch.nodeName;
    } while (ch = ch.nextSibling);
    return name;
}
function testChildNodes(){
    var el = $('mydiv'),
        ch = el.childNodes,
        len = ch.length,
        name = '';
    for(var count=0; count<len; count++){
        name = ch[count].nodeName;
    }
    return name;
}
function testChildren(){
    var el = $('mydiv'),
        ch = el.children,
        len = ch.length,
        name = '';
    for(var count=0; count<len; count++){
        name = ch[count].nodeName;
    }
    return name;
}

正美:

javascript測試函數運行速度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.