我有一个Servlet将一个JSON对象返回给ajax调用,但由于JSON对象是由一个包含4000行的excel组成的,因此调用返回前端的时间超过两分钟......在ajax调用显示之后,JSON形成了大约两分钟的警报。请建议一种有效的方法来减少延迟。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/json");
String costpath = request.getParameter("fname");
String revenuepath = request.getParameter("sname");
Path costpathobj = new Path(costpath);
Path revenuepathobj = new Path(revenuepath);
Gson gson = new Gson();
JsonObject myObj = new JsonObject();
Xlfunction xlfunction = new Xlfunction();
boolean flag;
try {
SheetBean[] sheetBean = new SheetBean[2];
flag = xlfunction.functionality(costpathobj,revenuepathobj,sheetBean);
JsonElement sheetobj = gson.toJsonTree(sheetBean);
myObj.add("projectInfo", sheetobj);
if(flag == true)
{
myObj.addProperty("success", true);
}
else
myObj.addProperty("success", false);
response.getWriter().write(myObj.toString());
}
$.ajax({
type: "GET",
url: "ExcelController",
data: "fname="+costpath+"&sname="+revenuepath,
dataType: "json",
//if received a response from the server
success: function( data, textStatus, jqXHR) {
if(data.success)
{
alert("data loaded");
}
答案 0 :(得分:0)
鉴于问题似乎是数据从服务器传输到客户端的速度很慢,我建议在Application Server上启用GZIP压缩。如果您使用的是Tomcat,则可以将compression
属性添加到server.xml中的HTTP / 1.1 Connector元素:
<Connector port="80" protocol="HTTP/1.1" ... compression="on"/>
JSON,纯文本压缩很多,减少了发送数据所需的往返次数。
您可以尝试的其他事项:
减少您在任何时间发送给客户端的数据量,例如将其拆分为单独的调用,以便在需要时调用。
如果您要使用数据来更新DOM,而不是处理客户端上的数据,请使用jsp输出HTML并在AJAX调用中将其返回,将辛苦工作转移到服务器侧的