我们正在构建一个Web应用程序,其中包含一个页面,用户可以在其中看到一个可编辑项目的大表。此表具有控制每行以向上/向下移动行以及删除行的选项。每行还有两个选择元素。
在极端情况下,这个表可能包含大约200行,当我们有很多行时,我们会遇到严重的性能问题。页面向上和向下滚动速度非常慢,我们在屏幕上看到“checker-boxing”,删除一行需要大约30秒,有时甚至更多!上下移动需要相似的时间,页面通常无法使用。
我们一直在努力缩小问题的确切范围,我们非常确定它是否与表中的select元素有关 - 如果我们从行中删除它们;滚动是完美的,上下移动约1秒,删除行~7秒。
如果我们从200行表的底部删除一行,那么它几乎是即时的。
似乎问题与页面上的CSS有关,当我们运行探查器时,重新计算样式大约需要3秒。
该页面在其他浏览器中表现良好,任何帮助/知识都会很棒。
由于
答案 0 :(得分:0)
我们在iOS 6的Web App中有几个表,其中一些表包含几百行只读文本,但有些也包含SELECT元素。
将表格布局设置为固定会对性能产生巨大影响。一些较大的表在默认动态表宽度计算中存在主要的渲染问题,到目前为止我们还没有克服这些问题。当一行包含复选框时尤其如此。
有些表格没有渲染最后一行,或者表格在底部附近被切断,依此类推。
我们使用一个特殊的样式表作为纵向模式,它改变了TABLE和TD元素的宽度,并完全删除了一些列。
这项工作非常好,到目前为止没有引起任何副作用或问题。
对于滚动,我们使用围绕表格的特殊DIV元素,该元素具有已定义的高度并使用“-webkit-overflow-scrolling:touch”。即使是最大的表格,大约有850个条目滚动,也没有任何性能损失或闪烁。
你什么时候渲染表?在页面渲染/准备/加载事件期间? 您是使用“innerHTML”赋值还是在逻辑中创建DOM树?
答案 1 :(得分:-1)
将table-layout:fixed;
设置为表格(在样式表中)中的样式属性可能会使响应速度更快。浏览器必须进行较少的计算,缺点是您必须自己指定列宽。