jQuery委托点击iPad中的功能速度+崩溃问题

时间:2012-05-01 16:23:58

标签: jquery ipad

在iPad ios 5.1中,https://s140452.gridserver.com/property/4123(在横向视图中)

单击“显示详细信息”按钮大约需要15秒才能在iPad上执行。有时会崩溃移动游猎。它会在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');
    }
});

1 个答案:

答案 0 :(得分:2)

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

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

其次,iOS Safari JS非常慢。 Laughably缓慢 - 头发拉得很慢。我的iPad 1 safari JS基准测试比我的PC上的Chrome慢38倍。强制jQuery遍历和匹配选择器的任何类型的事件委托都会大大减慢iOS移动网络上的应用程序速度。

话虽这么说,我敢打赌,如果你使用PhoneGap并将其转换为实际的应用程序,它会运行正常,因为它不会依赖于iOS safari JS引擎。

简而言之,除非必须,否则不要在iOS中使用面向未来的事件观察员。如果您在DOM准备就绪后没有添加.sidebar-expand个节点,请改用:

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