帝国建站系统,手机上可以做网站吗,电脑维修 做网站,宝安网站设计面试官既然能这么问#xff0c;我们从技术的角度出发#xff0c;探索一下这道题#xff0c;上手操作了一下#xff1a;function loadAll(response) {var html ;for (var i 0; i 100000; i) {html title: 我正在测试[i] ;}$(…面试官既然能这么问我们从技术的角度出发探索一下这道题上手操作了一下function loadAll(response) {var html ;for (var i 0; i 100000; i) {html title: 我正在测试[i] ;}$(#content).html(html);}在chorme浏览器下面 非常卡顿刷新页面数据非常卡顿渲染页面大概花掉10秒左右的时间,卡顿非常明显,性能瓶颈是在将html字符串插入到文档中这个过程上 也就是性能瓶颈是在将html字符串插入到文档中这个过程上也就是$(#content).html(html); 这句代码的执行 毕竟有10万个li元素要被挺入到文档里面 页面渲染速度缓慢也在情理之中。解决方案既然一次渲染10万条数据会造成页面加载速度缓慢那么我们可以不要一次性渲染这么多数据而是分批次渲染 比如一次10000条分10次来完成 这样或许会对页面的渲染速度有提升。 然而如果这13次操作在同一个代码执行流程中运行那似乎不但无法解决糟糕的页面卡顿问题反而会将代码复杂化。 类似的问题在其它语言最佳的解决方案是使用多线程JavaScript虽然没有多线程但是setTimeout和setInterval两个函数却能起到和多线程差不多的效果。 因此要解决这个问题 其中的setTimeout便可以大显身手。 setTimeout函数的功能可以看作是在指定时间之后启动一个新的线程来完成任务。ajax 请求。。。。function loadAll(response) {//将10万条数据分组 每组500条一共200组var groups group(response);for (var i 0; i groups.length; i) {//闭包 保持i值的正确性window.setTimeout(function () {var group groups[i];var index i 1;return function () {//分批渲染loadPart( group, index );}}(), 1);}}//数据分组函数(每组500条)function group(data) {var result [];var groupItem;for (var i 0; i data.length; i) {if (i % 500 0) {groupItem ! null result.push(groupItem);groupItem [];}groupItem.push(data[i]);}result.push(groupItem);return result;}var currIndex 0;//加载某一批数据的函数function loadPart( group, index ) {var html ;for (var i 0; i group.length; i) {var item group[i];html title: item.title index content: item.content index ;}//保证顺序不错乱while (index - currIndex 1) {$(#content).append(html);currIndex index;}}