【发布时间】:2018-07-26 18:27:58
【问题描述】:
我正在使用具有最少配置的 jquery 数据表在我的网站上展示数据。我有 1,00,000 条记录要显示在数据表中。
目前数据表初始化记录的时间过长。所以系统将进入环聊模式。
我正在使用来自 java 端的 JSON 返回数据。
这里的jquery代码:
$("button#searchbutton").click(function() {
var fromDate = $("#fD").val();
var toDate = $("#tD").val();
url = "/Search?fromDate="+fromDate+"&toDate="+toDate;
$('#table').DataTable({
"ajax" : url,
"bDestroy":true,
"columns":[
{"data": "txnid" },
{"data": "date"},
{"data": "Amount"}
],
"order": [[ 1, "desc" ]],
"language": {
"lengthMenu": "| View _MENU_ records per page",
"zeroRecords": "Nothing found - sorry",
"infoEmpty": "No records available",
"infoFiltered": "(filtered from _MAX_ total records)"
},
"pagingType": "full_numbers",
"lengthChange": false
});
});
这里是服务器端代码:
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@RequestMapping(value = "/Search", produces = "application/json")
public @ResponseBody JSONObject getPendingList(@RequestParam(required = false) String fromDate,
@RequestParam(required = false) String toDate,Model model) throws ParseException
{
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Date fromDate1 = null;
Date toDate1 = null;
if (StringUtils.isEmpty(fromDate)) {
fromDate1 = null;
} else {
fromDate1 = sf.parse(fromDate);
}
if (StringUtils.isEmpty(toDate)) {
toDate1 = null;
} else {
toDate1 = sf.parse(toDate);
}
List<AccountDetails> list2 = service.getList(fromDate1, toDate1);
JSONObject ajson = null;
if (list2 != null && list2.size() != 0) {
for (AccountDetails deatils : list2) {
Map<String, Object> map = new LinkedHashMap<String, Object>();
map.put("txnid", deatils.getTxnid());
map.put("amount", deatils.getAmount());
if(deatils.getTxnDate() != null){
map.put("date", sf.format(deatils.getTxnDate()));
}else{
map.put("date", "");
}
list.add(map);
}
ajson = new JSONObject();
ajson.put("data", list);
}else {
ajson = new JSONObject();
ajson.put("data", null);
}
}
这里的服务接口:
public List<AccountDetails> getList(fromDate1, toDate1);
在这里实现:
@Override
public List<AccountDetails> getList(Date fromDate, Date toDate) {
Session session = entityManager.unwrap(Session.class);
Criteria criteria = session.createCriteria(AccountDetails.class);
System.out.println(fromDate+"********"+toDate);
if (fromDate != null) {
criteria.add(Restrictions.ge("txnDate", fromDate));
}
if (toDate != null) {
criteria.add(Restrictions.le("txnDate", toDate));
}
return criteria.list();
}
您对缩短加载时间有何建议?
【问题讨论】:
-
不管你做什么。 1mill 记录总是需要很长时间才能显示出来,因为对于 Web 浏览器的设计而言,它的数据太多了。通过仅添加
<table>(它需要了解有关其内容的所有内容才能呈现它/随着更多数据加载而更改)(甚至消除数据表开销)来复合它,您将走向灾难。重新思考如何“展示”您的数据。 -
@Durga 嗨,伙计,您遇到的问题是服务器端和客户端的组合。你需要包含更多关于你在服务器端所做的事情的信息,才能真正从社区获得有价值的帮助。我建议分页。您可以在几乎任何框架上搜索分页,stackoverflow 应该会为您提供答案。
-
@Terrance00 嗨,请检查我的更新代码
标签: java jquery pagination spring-data-jpa