2012-05-01 43 views
1

崩潰問題在iPad等iOS 5.1,https://s140452.gridserver.com/property/4123(橫向視圖)jQuery的委託點擊功能速度+在iPad上

點擊「顯示詳細信息」按鈕,大約需要15秒,在iPad上運行。有時它會使移動Safari瀏覽器崩潰。它會立即在Chrome或Firefox中發生。

我做錯了什麼?

$j('#locations').delegate('.sidebar-expand', 'click', function(){ 
    var $me = $j(this), 
     $locations = $j('#locations'); 

    if($locations.hasClass('expand')) { 
     $locations.removeClass('expand'); 
    } else { 
     $locations.addClass('expand'); 
    } 
}); 
+0

什麼是'$ j'?!? – mattytommo

+1

@mattytommo可能只是因爲沒有衝突而重命名jQuery。 – AlienWebguy

回答

2

首先,使用on代替delegate,因爲它在1.7+引入了一些小的性能提升,但更重要的是它成爲最佳實踐。相同的語法:

$j('#locations').on('.sidebar-expand', 'click', function(){... 

其次,iOS Safari JS是非常緩慢的。可笑的緩慢 - 頭髮拉慢。我的iPad 1 safari JS基準測試比我的PC慢了38倍。任何強制jQuery遍歷並匹配選擇器的事件委託會顯着減慢iOS移動Web上的應用程序。

話雖如此,我敢打賭,如果您使用PhoneGap並將其轉換爲實際的應用程序,它將運行良好,因爲它不會依賴iOS Safari Safari引擎。

簡而言之,除非必須,否則不要在iOS中使用面向未來的事件觀察器。如果在DOM準備好之後沒有添加.sidebar-expand節點,只需使用下面的代碼:

$j('.sidebar-expand').on('click', function(){... 
+0

超徹底的答案。謝謝!!! –

+0

很高興幫助! :) – AlienWebguy

+0

也注意到使用「vclick」會更快,因爲它不必等待300毫秒才能執行 –