【问题标题】:How to improve jquery datatable performance to load large data efficiently with 1,00,000 records如何提高 jquery 数据表性能以高效加载 1,00,000 条记录的大数据
【发布时间】: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 浏览器的设计而言,它的数据太多了。通过仅添加&lt;table&gt;(它需要了解有关其内容的所有内容才能呈现它/随着更多数据加载而更改)(甚至消除数据表开销)来复合它,您将走向灾难。重新思考如何“展示”您的数据。
  • @Durga 嗨,伙计,您遇到的问题是服务器端和客户端的组合。你需要包含更多关于你在服务器端所做的事情的信息,才能真正从社区获得有价值的帮助。我建议分页。您可以在几乎任何框架上搜索分页,stackoverflow 应该会为您提供答案。
  • @Terrance00 嗨,请检查我的更新代码

标签: java jquery pagination spring-data-jpa


【解决方案1】:

在服务器端和数据表上都使用分页。 当您点击下一页或某些页码请求将转到服务器并仅返回与该页对应的数据。

浏览器一次无法处理大量数据。最好分块加载数据并在浏览器上显示。

https://gist.github.com/emrekgn/d67d991f3d1a12f2bd00a12a27140485

java代码可以参考链接。

【讨论】:

  • 如何编写代码.. 请提供任何示例代码。我正在使用 spring boot jpa 存储库
  • 前端需要任何更改..我只使用 HTML5 和 jquery
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 2012-02-06
  • 2019-08-06
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多