【发布时间】:2012-12-13 19:17:57
【问题描述】:
我一直在调查在 iPad Safari 上滚动我的网站时出现的一些性能问题。我们有一些页面很大 table 元素,最多 500 行;性能影响似乎与表中的行数有关(并且,在没有此类表的页面上,滚动性能似乎很好)。桌面浏览器非常好。
您可以在以下链接中尝试一下。 注意:要复制,请确保将默认值 25/page 更改为 500/page。 http://www.cellartracker.com/list.asp?table=Notes&iUserOverride=0&T=1000
在做了相当多的调试之后,我发现如果我删除了我绑定的任何“touchstart”事件,滚动性能是正常的(并且超快,正如预期的那样)。我配置了一些$(document).on('touchstart', '<selector>', function ()...) 事件,以帮助使触摸设备可以访问某些悬停功能。目前,我绑定到$(document) 有两个原因:
- 可以有很多元素匹配选择器,因此传统上单个委托事件处理程序的性能优于每个元素附加 500 多个处理程序(我刚刚在 IE8 上修复了一些与此相关的性能问题)。
- 一些受影响的元素是通过 AJAX 加载的,因此如果我绑定到单个元素,这些元素不会自动获取处理程序。
好的,太好了--我找到了原因--但我不知道为什么这仅在具有大表格的页面上是一个问题,以及如何解决它。对于具有 BOTH 触摸和键盘/鼠标的设备,我希望每个输入机制都能一致地运行(因此if (touch) bind('click') else bind('mouseenter') 方法不是我想要的)。另外,我还在考虑为某些元素实现Fast Buttons 方法,这可能需要绑定到$(document),因为这是当前绑定相应的click 处理程序的地方。
那么...关于如何提高这些页面上的滚动性能同时仍将 touchstart 绑定到 $(document) 的任何想法? HTML 在这一点上相当固定,但如果对 DOM 进行 简单 调整会产生重大影响,我愿意接受。
【问题讨论】:
标签: jquery performance jquery-ui ipad jquery-events