ajax一次输出1万条数据库,后端接口一次给出100万条数据,请问你前端怎么分页处理...

面试官既然能这么问,我们从技术的角度出发,探索一下这道题,上手操作了一下:

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;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“” '' ``区别 初学者自用

单引号 相当于吧里面的内容直接输出。并不会考虑里面是否有变量命令等双引号 "" 只认变量 命令会直接输出反引号 两种都认 实例&#xff1a; a"hello" [localhost.localdomain 10:16:09]$echo echo %a输出&#xff1a;echo %a [localhost.localdomain…

maven私有库配置

不同的项目&#xff0c;不同的私有库1、添加仓库Release 发布&#xff1b; 发行仓库snapshot 快照&#xff0c;开发&#xff0c;调试仓库配置完成2、配置权限默认开通的权限&#xff0c;查看权限给刚才建的两个私有库添加权限配置好后3、创建角色&#xff0c;分配权限添加rolei…

asc desc排序_21.数据库排序?左连接 ?右连接?

更多内容来源&#xff1a;http://mp.weixin.qq.com/mp/homepage?__bizMzA5OTQ1ODE1NQ&hid6&sn843337a7d9931839214ec8f861ac2164&scene18#wechat_redirect1、数据库排序语法 select column_name,column_name from table_name order by column_name,column_name as…

京东ajax怎么用,使用Ajax、json实现京东购物车结算界面的数据交互实例

全选商品单价数量小计操作全选删除选中产品总价&#xff1a;&#xffe5;0body,html,ul,li,a{margin:0;padding:0;font-family:"microsoft yahei";list-style:none;text-decoration:none;}.fl{float:left;}.fr{float:right;}.f12{font-size:12px;}.disl{display:inli…

Facebook 游戏开发更新文档 API 参考文档 v6.0

Facebook 游戏开发更新文档 API 参考文档 v6.0 更新日志 1.排行榜 此版本全新推出排行榜 API&#xff01;提供一套强大的 API&#xff0c; 使得游戏可获取排行榜、查询得分 情况和设置新分数&#xff08;支持分数所带的 任意元数据&#xff09;&#xff0c;并可向 Messenger 对…

maven私有库搭建

为什么要搭建maven私有库&#xff1f; 有位博主在2008年时这样写道&#xff1a; 如果没有私服&#xff0c;我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地&#xff0c;而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓库的负载和浪费…

mysql查询_MYSQL查询

-- 单表查询SELECT sc.*FROM scSELECT * FROM course-- 分页 LIMIT 从0开始检索SELECT * FROM course LIMIT 0,3SELECT * FROM course limit 3,3SELECT * FROM course LIMIT 6,1-- 多表连接查询-- 1.等值与非等值连接查询SELECT * FROM student;SELECT * FROM course;SELECT *…

微软封闭服务器切换,执行服务器切换:Exchange 2013 帮助 | Microsoft Docs

执行服务器切换2021/6/1本文内容适用于&#xff1a;Exchange Server 2013 SP1服务器切换是一个任务&#xff0c;执行该任务以将当前邮箱服务器的所有活动邮箱数据库副本移动到数据库可用性组 (中的一个或多个其他邮箱) 。 此任务作为为当前邮箱服务器的计划中断做准备的一部分执…

eclipse maven访问maven私有库

1、Windows本地maven下载 https://maven.apache.org/download.cgi 2、maven setting 文件配置 进入maven 目录下 conf。apache-maven-3.2.3\conf 新建.xml 文件&#xff0c;内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?><set…

入门系列之在Ubuntu 16.04使用Buildbot建立持续集成系统

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由angel_郁发表于云社区专栏 介绍 Buildbot是一个基于Python的持续集成系统&#xff0c;用于自动化软件构建&#xff0c;测试和发布过程。 在本教程中&#xff0c;我们将演示如何设置持续集成系统以自动…

fedora mysql 初始化_Linux(fedora)下启动MySQL,结果显示:env: /etc/init.d/mysql:权限不够。 我已经将权限切换到su了...

展开全部Linu下启动MySQL结果显示&#xff1a;env: /etc/init.d/mysql: 是脚e69da5e887aa62616964757a686964616f31333365646235本执行的问题解决办法&#xff1a;依次执行下面的命令(执行失败的话&#xff0c;检查路径是否正确)&#xff1a;cp /etc/init.d/mysql /etc/init.d/…

3.Android的新虚拟ART与原虚拟机DVM的区别

Android在4.2之前的虚拟机叫做 DVM 在4.2的时候多了一个虚拟机选择&#xff0c;这是新的虚拟机 ART。Android Runingtime 那时ART还不够成熟&#xff0c;需要测试&#xff0c;所以默认虚拟机是DVM。国内的ROM厂商直接把ART给割了。 Android5.0起&#xff0c;默认使用ART虚拟…

mysql binlog 统计_对MySQL binlog日志解析,统计每张表的DML次数

想要获取每天数据库每张表的DML的次数&#xff0c;统计热度表&#xff0c;可以使用该脚本# coding:utf-8# 解析binlog&#xff0c;统计热度表&#xff0c;表的DML个数import sysimport os# mysqlbinlog解析binlog日志def binlog_output():binlog_file sys.argv[1]file_num bi…

strapi 开源api 内容管理平台试用

strapi 是一个开源的api && 内容管理平台&#xff0c;功能操作起来还是比较方便简单的。 安装 使用docker && docker-compose 代码clonegit clone https://github.com/strapi/strapi-docker && cd strapi-docker 启动 docker-compose up -d 访问 首次初…

1.android体系结构介绍

一、Android的介绍 android介绍见百度百科&#xff1a;Android的介绍&#xff0c;度娘把Android介绍的这么清楚&#xff0c;如果谷歌是Android的爹&#xff0c;那度娘就是娘了。 二、Android的架构图 android系统主要分四层&#xff1a; 从上致下&#xff1a; 1、应用层 2、…

mysql seconds_behind_master_MySQL中的seconds_behind_master的理解

通过show slave status查看到的Seconds_Behind_Master&#xff0c;从字面上来看&#xff0c;他是slave落后master的秒数&#xff0c;一般情况下&#xff0c;也确实这样&#xff0c;我们可以通过Seconds_Behind_Master数字查看slave是否落后于master&#xff0c;但是在一些环境中…

2.JVM和DVM之间的区别

1、JVM .java----->.class----->.jar 运行在内存的 栈 栈虚拟机 2、DVM .java----->.class------>.dex-----(加上其它资源文件)---->apk 运行在CPU的 寄存器 寄存器虚拟机 ---------------------------------------------------------- 3、DVM与JVM的区…

Node.js模块以及模块加载机制

2019独角兽企业重金招聘Python工程师标准>>> Node.js中的模块 在Node.js中&#xff0c;以模块为单位划分功能&#xff0c;通过一个完整的模块加载机制使得开发人员可以将应用程序划分为多个不同的部分。模块的使用可以提高代码重用率&#xff0c;提高应用程序的开发…

wordpress支持MySQL5.5_wordpress数据库版本为5.5以上导出不能在5.5以下的版本导入的问题解决...

自从wordpress4.2版本出现以后&#xff0c;已经可以支持utf8mb4数据编码&#xff0c;那么如果您的php空间的数据库版本是mysql5.1的&#xff0c;那么很多站长朋友从mysql5.5导出来再导入到5.1的数据中的时候&#xff0c;那么问题来了&#xff0c;就会报错Unknown collation ‘u…

i++与++i的区别

代码&#xff1a; int i1; int ai;//先赋值&#xff0c;然后再自增&#xff0c;它等价于 a i ; i i 1System.out.println("a"a);System.out.println("i"i);System.out.println("---------------");int j1; int bj;//先自增&#xff0c;后赋值…