首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Tablesorter性能推荐?

Tablesorter性能推荐?
EN

Stack Overflow用户
提问于 2013-10-10 00:38:23
回答 1查看 1.7K关注 0票数 4

我使用tablesorter Jquery插件对我的表进行排序。当表的大小小于500行时,正常工作。当表中的行数超过2K或3K时,表页加载变得非常缓慢,而且对于基于表数据的后续筛选器来说,当我键入筛选框时,页面会停止2-7秒。几秒钟后,经过筛选的值,页面将恢复正常。这是TableSorter插件的正常行为还是与我的代码有关的行为?有什么改善这一滞后的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 01:47:13

由于大量(2K到3K行) DOM操作,性能下降。

为了提高性能,我可以看到以下的可能性。

最小化DOM操作/访问

DOM操作/访问总是很昂贵的。所以,尽量减少。

在TableSorter代码中,没有限制的-第337号行:

代码语言:javascript
运行
复制
for (var i = 0; i < totalRows; i++) {
    var pos = n[i][checkCell];
    rows.push(r[pos]);
    if (!table.config.appender) {
        var l = r[pos].length;
        for (var j = 0; j < l; j++) {
            tableBody[0].appendChild(r[pos][j]);
        }
    }
}

在上面的代码中,有两个嵌套的for循环。假设我们有2K行,并且设置了table.config.appender。在最坏的情况下,appendChild运行的次数可能超过2K X 500的次数?

这只是一个例子。在这里,不要在每次迭代中追加子字符串,而是获取行字符串并连接到结果字符串中。在所有迭代之后,替换表中的文本。在这种情况下,我们只访问DOM一次。只有当单元格中只有文本而没有绑定在单个单元格文本/元素上的事件时,这才能起作用。(即使我们想绑定单元格文本/元素上的事件,也有更好的方法)。

但这需要修改TableSorter插件。

现代浏览器中的网络工作者

运行JavaScript时,UI会冻结。因此,在我们的情况下,由于我们有大量的数据,肯定需要一些值得注意的时间来处理。如果我们将此数据处理移到其他线程(或同时运行而不阻塞UI),则会更好。

为此,我们可以使用Web Workers,并且在旧浏览器中不支持它。

那么,TableSorter是如何工作的?一旦加载了表,它将缓存所有数据。当然,它不会仅仅为了获取数据而对每一行进行迭代。一旦触发任何筛选器,它将开始处理数据以对行进行排序。此处理可以移动到Web工作人员,它将取消对UI的冻结。当这起作用时我们可以展示一些美丽的过滤。消息,同时,用户可以玩其他的元素。

我们可以检测当前浏览器是否支持Web Workers。如果是,那么我们可以在一个新线程中处理数据。

但这需要修改TableSorter插件。

使用数据库服务器

如果我们从数据库中提取数据并将其显示在前端的表中,如果我们有大量的数据,我们最好让服务器从数据库中获取已排序的数据,并使用AJAX调用显示。

相信我,数据库服务器非常适合做这些事情。此外,在执行AJAX调用时,我们可以显示一些处理,并且UI不会被冻结。

这需要服务器端编程。

这就是我所想的。也许我更喜欢使用以上三种方法。我尽可能地减少DOM操作/访问。我在现代浏览器中使用Workers。在较旧的浏览器中,我依赖于数据库服务器。当然,这将需要一些时间来实现。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19285157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档