javascript - 创建过多 DOM 后页面挂起

标签 javascript jquery dom

我目前进行一些异步 ajax 调用,并根据返回的数据在表中创建行。如果行数约为 400-500,页面将在 dom 创建后挂起。例如。如果我单击任何文本框或下拉菜单,它就会永远卡住。如果行数约为 100-200,然后我单击任何文本框,它仍然很慢,但至少不会卡住。

所以,我认为问题是有太多的 dom 需要创建,这会导致浏览器或页面或其他任何问题。

您有任何想法或解决方案来提高此性能吗?

最佳答案

您需要lazy load您的数据以某种方式。您是否曾在 Twitter、Facebook 和其他网站上注意到,当您滚动到页面底部时,它会开始从服务器加载更多记录?好的应用程序将开始垃圾收集已向上滚动的旧记录。

当您滚动浏览 Facebook 新闻源时,它不会同时将 2007 年以来所有 friend 的帖子加载到浏览器中。一旦 DOM 中的帖子数量达到最大数量,Facebook 将开始删除您向上滚动的最旧的帖子,为更多帖子腾出空间,并从服务器获取新帖子,以便您可以继续滚动。当您向下滚动时,您甚至可以看到浏览器滚动条向上跳跃,因为更多的帖子被添加到 DOM 中。

没有浏览器能够处理那么多数据。您必须坐下来想出更好的方法来向用户显示该数据。只有您知道用户真正想要什么体验,但无论如何您都必须减少页面上包含的元素数量。

示例:

注意浏览器滚动条到达底部时如何向上跳一点。 Twitter 会到达底部,然后加载更多数据以供滚动浏览。如果我滚动得足够远,它最终也会开始清理页面顶部的数据。

最简单的解决方案可能是通过 ajax 请求传递页码,并让服务器仅返回该数据页的结果。

关于javascript - 创建过多 DOM 后页面挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898312/

相关文章:

javascript - 为什么onclick的处理函数没有按预期工作?

JavaScript 多次打印

javascript - ReactJS 的 'require' 函数是什么?

php - 如何显示具有多个值的 get-variable 的查询 'DB'?

javascript - Chrome 无法进行 jquery 表单验证

javascript - 在父类javascript中选择标签

javascript - XML 的 documentElement.innerHTML 的等效项

javascript - Dojo:过滤选择模板

javascript - 打开 div 后,toggleClass 不会关闭

javascript - 在元素加载之前更改 CSS