我一直在调查在 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 加载的,因此如果我绑定到单个元素,这些元素不会自动获取处理程序。
好的,太好了——我找到了原因——但我不知道为什么这只是在带有大表的页面上出现的问题以及如何解决它。对于同时具有触摸和键盘/鼠标的设备,我希望每个输入机制都能一致地运行(所以这种if (touch) bind('click') else bind('mouseenter')
方法不是我想要的)。另外,我还在考虑为某些元素实现快速按钮方法,这可能需要绑定到当前绑定$(document)
相应处理程序的位置。click
那么......关于如何提高这些页面上的滚动性能同时仍将 touchstart 绑定到的任何想法$(document)
?HTML 在这一点上是相当固定的,但是如果对 DOM 有一些简单的调整会产生很大的影响,我愿意接受它。