2012-04-24 64 views
-1

我有一個關於jQuery和JavaScript性能的問題。我的應用程序正在使用的佈局,多個選項卡,並在它們之間進行切換,我寫了這個代碼:jQuery更改可見性瀏覽器性能問題

function openTab(id, holder) { 
    $("#" + holder).children(".tab").addClass("visHidden"); 
    $("#" + id).removeClass("visHidden"); 
    $("#"+holder+" .tab-nav").removeClass("tab_navAkt"); 
    if (/^\d*$/.test(id)) {         
     $("#"+holder+" ." + id).addClass("tab_navAkt"); 
    } 
} 

它這樣做是:增加了類visibility:hidden所有選項卡,然後刪除標籤這個類,我想看看然後它將選項卡控件元素設置爲活動狀態(如果需要的話)。 我的問題是,這段代碼在Firefox或Chrome中大約需要3ms,在Internet Explorer 7中大約需要500ms 8?標籤中的平均數據大小爲500kb,我認爲這並不是太多。難道我做錯了什麼?

+0

這或許應該被遷移到[代碼審查(http://codereview.stackexchange.com/)站點。 – Sparky 2012-04-24 18:13:45

回答

0

我的猜測是這是導致問題的正則表達式。此外,您可以使用.show().hide()來重寫。

$("#" + holder).children(".tab").hide(); 
    $("#" + id).show().addClass("tab_navAct"); 
+0

但我讀過一篇關於show/hide的文章,它說顯示/隱藏比改變類更慢 – user1352324 2012-04-24 19:41:46

+0

看着src它只是設置可見性的本地屬性,所以我懷疑它比addClass https:// github慢。 com/jquery/jquery/blob/master/src/effects.js#L18 – dstarh 2012-04-24 21:18:16

+0

好吧,它不是,它改變了顯示屬性,它更慢,因爲它改變了頁面佈局和瀏覽器hav來保存隱藏元素的數據再次恢復他們。根據這篇文章http://www.learningjquery.com/2010/05/now-you-see-me-showhide-performance – user1352324 2012-04-25 05:08:11

1

與FF和Chrome在JavaScript執行中相比,IE通常要慢一些。但是,您可以優化您的代碼並嘗試在IE中的性能。嘗試這個。

function openTab(id, holder) { 
    var $holder = $("#" + holder); 
    $holder.children(".tab").addClass("visHidden"); 
    $("#" + id).removeClass("visHidden"); 
    $holder.find(".tab-nav").removeClass("tab_navAkt"); 
    //you can get rid of this check. jQuery will addClass only if it finds the element 
    //if (/^\d*$/.test(id)) {         
     $holder.find(" ." + id).addClass("tab_navAkt"); 
    //} 
}