背景:一个页面需要输出list中所有数据 (list大小>1000,客户要求不分页),生成的页面时间会很长,浏览器会出现短暂的空白。
700条XX信息数据大小965.9KB,耗时1.66s
1000条XX数据大小1803.6KB,耗时2.68s
100条数据 大小 194.8KB 耗时 140ms
优化思路:将数据分成多块,分多次响应给客户端。 如:优化700条数据,第一次输出100条数据(这样用户就很快看到有页面出来),剩余的600条数据,通过ajax分6次请求,每次也是100条数据,给客户端。(这里相当于:用户的一个请求结果,被切割成7请求来完成)
这里有关键的几个点:
第一: 7次的请求怎么保证他们操作的都说同一个list。(缓存第一次从数据库查出来的list,缓存的key要唯一性,可以采用时间戳来做key)
第二: 判断是否是最后一次请求,是。。就要清空这次的缓存
第三: 后台返回的不是一个list,而是一个已经在jsp中生成好的html,ajax直接把后台生成html,inner进当前页面。
流程:
解释:
1.用户第一次请求
2.方法1>>去数据库取数据,判断返回list的大小。若大于100,取list中的 0-99放到listB中,返回。同时把list缓存起来,以时间戳做key,同时把key也返回。
3,4.去jsp1>> jsp1中有<div id="data"> <table>表头</table> <jsp:include page="jsp2.jsp"></jsp:include> </div> 。
5.jsp1最后还会调用一段js,把list大小和key传进去,
6.js 根据list大小算出还要发送多少个请求
/**
* 分页请求方法
* @param {} count 结果集大小
* @param {} key
*/
page:function(count,key){
var divId="data";
var pageCount = count/fundQuery.limit;//默认100
if(pageCount == 0){//结果小于 每页显示数
return;
}
for(var i=1;i<=pageCount;i++){//循环创建div
var _span = document.createElement("div");
_span.id = divId + i;
var newText = document.createTextNode(" ");
_span.appendChild(newText);
TFL.dom.selector(divId).append(_span);
}
for(var i=1;i<=pageCount;i++){//循环发送请求
var last=false;
if(i==pageCount){
last=true;
}
var pageurl ="funds/fundsquery.jhtm";
var vars ="service=page&start="+i+"&limit="+fundQuery.limit+"&last="+last+"&key="+key;
var requestObject =
{
url: pageurl,
getType: "1",
vars: vars,
method: "post",
callBack: function(html){
var start = parseInt(ajaxGetPage.gup('start',this.vars));//获取 vars 中的参数
TFL.dom.selector("data"+start).html(html); //将后台返回的html inner进指定的div
}
};
var ajax = new TFL.ajax2();
ajax.ajaxRequest(requestObject);//ajax封装
}
}
7.ajax调用controller的方法:
public OutputVO page(FundNavInput in,Boolean last,Long key){
OutputVO out = new OutputVO();
List<FundNavInfoVO> result = (List<FundNavInfoVO>)map.get(key);
List<FundNavInfoVO> res = null;
if(result != null){
int startIndex = in.getStart() * in.getLimit(); //开始的索引 = 页码*大小
int toIndex = startIndex + in.getLimit() >result.size()?result.size():startIndex+in.getLimit();//结束索引=开始索引+每页条数
res = result.subList(startIndex, toIndex);
out.setList(res);
out.setCount(res.size());
if(last){//最后一次 移除这次的结果
map.remove(key);
}
}
ViewUtil.setViewName("jsp2");
return out;
}
8.jsp2中 <table cellpadding="0" cellspacing="0" class="list" style="border-bottom: #d3d2d3 0px solid;">
<c:forEach var="dataRow" items="${outputVO.list}" varStatus="stat"> <tr>.....<tr> </c:forEach>
</table>
9.返回一段已经画好的表格。js ajax回调函数中把这段html inner 进指定的div
总结:
这种解决方案其实相当于 隐式的分页。。。。 个人挺满意这种方案。! 欢迎大伙拍砖!
分享到:
相关推荐
在网页开发中,数据分页是一项非常重要的功能,特别是在处理大量数据时,它能提高页面加载速度,优化用户体验。本文将深入探讨如何使用jQuery和AJAX实现高效的数据分页,结合给定的"ajax大量数据分页"标题和描述,...
总的来说,使用Prototype和Rico库,我们可以优雅地处理Ajax动态读取大量数据的问题。通过合理的分页策略和滚动加载机制,可以显著提高Web应用的性能和用户体验。在实际开发中,还需要根据具体需求和场景进行优化,...
这种技术极大地提升了用户体验,尤其在处理大量数据或者需要频繁交互的场景下,如Google搜索、Gmail等。** **Ajax的核心原理在于通过JavaScript创建XMLHttpRequest对象,该对象负责与服务器进行通信。当用户触发一...
当涉及到大数据量处理时,AJAX就显得尤为重要,因为传统的网页刷新方式可能会导致用户体验下降,尤其是在处理大量数据时。以下是关于AJAX处理大数据量的一些关键知识点: 1. **分页加载**:在处理大数据集时,AJAX...
GET请求常用于获取少量数据,而POST请求则用于发送大量数据或修改服务器数据。 二、事件处理 Ajax的事件处理主要集中在XMLHttpRequest对象的`onreadystatechange`属性上。当请求状态改变时,该属性中定义的函数会...
Ajax(Asynchronous JavaScript and XML)是一种创建动态网页的技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。在本场景中,Ajax被用于前台向后台请求菜单数据,这样可以提高...
3. 数据处理:接收到数据后,利用JavaScript动态生成HTML元素,插入到DOM中。 四、进度条展示 为了提高用户体验,可以添加一个进度条组件(如文件名processbar暗示的那样),实时显示数据加载进度。这通常通过计算...
jQuery中的AJAX请求是一种非常常见的前端异步数据交互方式,它的作用是使得页面无需重新加载即可向服务器请求数据,并将数据动态地加载到页面中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它...
然而,当涉及大量数据时,如果不采取适当的策略,可能会导致性能下降、用户界面冻结,甚至服务器崩溃。以下是一些关于在.NET下利用AJAX处理大数据量的关键知识点: 1. **分页与分块传输**:处理大数据最常用的方法...
这极大地提高了用户体验,尤其是在加载大量数据时。 5. **分页策略**:为了减少一次性加载的数据量,滚动加载通常采用分页策略。每次请求只获取一部分数据,这样可以减轻服务器压力,同时也降低了网络传输成本。 6...
在本示例中,"Ajax技术实现动态获取数据的树状菜单"是一个具体的实践应用,主要目标是创建一个动态加载数据的树状菜单,用户可以在不刷新页面的情况下查看和操作数据。 首先,我们来了解树状菜单的基本概念。树状...
在IT行业中,我们经常遇到各种数据传输的...综上所述,解决Ajax POST数据过长的问题需要结合服务器端配置调整、数据处理策略优化、传输技术选择等多个方面。在实际开发中,应根据项目需求和资源限制选择合适的方法。
当我们需要处理大量数据时,如何高效地在服务器(PHP)与客户端(JavaScript)之间传递这些数据,成为了开发者面临的重要问题。"php+pako+ajax压缩数据"这个主题就是针对这种情况提出的一种解决方案,结合了PHP后端...
当我们处理如用户列表、商品展示等需要展示大量数据的场景时,一次性加载所有数据可能导致页面加载速度慢,用户体验下降。这时,我们可以采用AJAX(Asynchronous JavaScript and XML)技术结合JSON(JavaScript ...
它结合了JavaServer Pages(JSP)、数据库技术、Ajax(Asynchronous JavaScript and XML)以及前端分页组件,为用户提供了一种无需整个页面刷新即可获取并显示大量数据的高效方式。下面我们将详细探讨这一技术的应用...
在网页开发中,"Ajax分页与JSON数据返回"是一个常用的技术组合,它极大地提升了用户体验,使得用户在浏览大量信息时无需等待整个页面刷新。Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的...
通过Ajax,前端可以直接向后端提交数据,而后端返回操作结果,再由Ajax处理这些结果并更新页面。 5. **加密解密**:在敏感数据传输时,Ajax可以结合加密算法,如AES、RSA等,对数据进行加密,保障数据的安全性。 6...
总结来说,Ajax结合Json在批量数据传递中的应用,实现了无刷新的高效数据交互,提升了用户体验,同时也简化了前后端的数据处理流程。这种技术在现代Web开发中被广泛应用,特别是在大数据量的场景下,如表格数据的增...
在网页开发中,分页是一种常见的用户界面设计,它允许用户逐步浏览大量数据,而无需一次性加载所有内容,从而提高页面加载速度并优化用户体验。AJAX(Asynchronous JavaScript and XML)技术是实现这一功能的关键,...
在ASP.NET开发中,有时我们需要处理大量的数据,例如从Excel文件中导入数据到数据库。当数据量较大时,用户可能需要等待较长时间,此时提供一个进度条和百分比统计能够显著提升用户体验。本文将深入探讨如何使用ASP...