javascript - jQuery动态往dom填充数据导致浏览器卡顿
黄舟
黄舟 2017-04-11 11:57:59
[JavaScript讨论组]

用jQuery的HTML函数往一个标签里填充文本,而且略频繁,填充的内容比较大,大约上百kb,导致浏览器卡顿,请问有解决方案吗?


datasource是一个数组,大约10000多条数据,开始以为是遍历数组时效率低,调试后发现是操作dom导致的卡顿,请问有解决方案吗?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(5)
ringa_lee

这个一定要分页处理吧,而且要控制一下当前页面上数据的量,比如你同一时刻只能看到100条数据,那你就生成500个li,随着滚动条的位置变化,去更新这500个li。

PHP中文网

可以延伸lazyLoad的思路,只渲染用户可以看见的数据

数据量太大,一次塞入的DOM浏览器受不了,那么我们就换种思路,只展现用户可以看见的数据,用户看见哪儿,就只显示哪儿的数据。

  1. 获取浏览器的页面高度,然后获取table的一行数据高度,求出页面中最大可以显示的行数。

  2. 取出所有数据,先不渲染,计算设置table的高度,然后默认只渲染三屏的数据,这三屏的关系如下:

    +============+
    |            |
    |     A      |   ---  用户看不见
    |            |
    +============+
    |            |
    |     B      |   ---  用户可以看见
    |            |
    +============+
    |            |
    |     C      |   ---  用户看不见
    |            |
    +============+
  3. 绑定scroll,计算用户当前正在浏览的table数据行。思路很简单:一直让用户都在浏览B

    • 当用户滚动页面的时候,往上滚动到A,则把C移除DOM,,然后在A的上面填充数据,这样用户呈现给用户的结构又会变成上面画的结构。

    • 往下滚动到C,则把A移除DOM,然后在C的下面填充数据。

    • 之所以要三屏是为了让用户平滑滚动的时候,数据不会中断/空白,然后突然蹦出来

  4. 这样做有个问题,从页面顶部,直接拉滚动条到页面底部,页面填充速度会跟不上,所以会有卡顿和空白的情况,所以这里一定要做函数节流,当用户突然大幅度滚动的时候,先不显示数据,等用户停止滚动了之后,再渲染数据。

这个方案唯一的缺点是会在大幅度滚动的时候产生空白,但比如很大的数据渲染到DOM卡住浏览器,我觉得产品应该更能接受这种方案。

在手机上应用过这个方案,效果非常赞。

高洛峰

可以做分页处理

PHPz

操作dom已经要记得缓存,$(#sourceList).length这种,你就要用个
var length = $(#sourceList).length 缓存起来,
不然你循环填数据,开销很大

怪我咯

一次性也看不完那么多数据,分段缓存到内存中,然后分页分别取出数据。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号