我开发了一个基于RESTFul设计的Web应用程序,其中应用程序从基于JAVA的Web服务获取JSON响应并在UI中显示并且每5秒刷新一次数据。 该应用程序使用Bootstrap进行UI设计,使用Backbone和require.js实现MVC结构,其中JSON响应被解析为Backbone集合。 当管理员使用此应用程序时,JSON响应大小太大(从800到1100个对象)。 这是事情变得混乱的地方。根据我的分析,浏览器占用了太多的资源。所以应用程序的其余部分非常慢。例如,如果我尝试打开模态,系统会冻结一段时间并慢慢打开,从而给用户带来非常糟糕的体验。 根据我的分析,正在分析解析数据的时间 作为补救措施,我将删除代码中的所有注释,并尝试为JSON文件/ html / css / js实现Gzip压缩。 JSON对象的样本粘贴在
下面{
"name": "TEST",
"state": "Lunch",
"time": "00:00:09",
"manager": "TEST",
"site": "C",
"skill": "TEST",
"center": "TEST",
"teamLead": "TEST",
"workGroup": "TEST",
"lanId": "TEST",
"dbID": "TETS",
"loginId": "TEST",
"avgAcwTime": "nn",
"avgHandleTime": "nn",
"avgTalkTime": "nn",
"callsAnswered": "nn",
"dispSkill": "-",
"errCode": null,
"errDesc": null,
"avgAcwTimeth": "medium",
"avgHandleTimeth": "high",
"avgTalkTimeTh": "medium",
"callsAnsweredTh": "medium",
"stateTh": "high"
}
由于某些要求,无法完成Pagenation。 任何人都可以建议一些改善性能的方法
我也使用Backbone.Collection.fetch()
获取数据getAgentMetric(){
this.metrices.fetch({
url : (isLocal) ? ('http://localhost:8080/jsons/agent.json') : (prev_this.url + '/agentstat'),
data: JSON.stringify(param),
type: "POST",
dataType: "JSON",
contentType: "application/json",
})
.done(function() {
// passing the datasource from ajax call
prev_this.agentLoacalSource.localdata = prev_this.metrices.toJSON();
});
timeout = setTimeout(_.bind(this.getAgentMetric, this), 5000);
},
答案 0 :(得分:1)
浏览器可以处理超过一千个对象而没有任何压力,所以我不认为你只是从后端请求大量数据。你的一些解析或渲染代码很可能很慢。
一些可能性,而不再看到您的代码:
.append()
吗?这会让事情变慢。您应该生成所有需要生成的html,然后运行.append()
一次。与您的缓慢问题无关,我在此代码中看到了一些问题:
应该从ajax中的.always()
函数调用超时,以防止并发请求因请求缓慢而无法出去。
this.metrices.fetch(...)
.always(function() {
timeout = setTimeout(...);
}.bind(this));
仅提取数据的请求应使用GET而不是POST请求类型。您可以查看https://stackoverflow.com/a/3477374/5780021了解更多相关信息。
我建议您计算一些代码,看看实际发生的缓慢程度。这将允许您实际确定代码中点之间的时间。