带有xpages的数据表插件,将json放在viewscope或sessionscope中而不是URL中?

问题描述 投票:0回答:2

我在我的应用程序中使用datatables插件,但是由于它的成功,记录的数量急剧增加(每周有1000条新记录),因此我对datatables的查看响应时间也在增加。

现在,我调用了一个REST服务,该服务是通过在与Java类连接的xpage上通过rest控件设置的,以从viewnavigator填充json数组。

根据我的了解,我无法在datatables组件启动的ajax调用中禁用URL。另一种选择是,我正在考虑将json放置在视图或sessionscope中,并通过脚本块控件加载该json,但是我不确定是否会在这里获得性能(也许有一个按钮来更新scope变量)。

您的经验/建议是什么?

datatables xpages lotus-domino xpages-extlib
2个回答
0
投票
根据我的经验,我的第一个建议是,如果可能的话,避免加载数千条记录。要在浏览器中重现Notes客户端的感觉非常困难,并且在大多数情况下,除非在极少数情况下,否则确实没有必要。让用户通过搜索来确定他们所需的信息的目标,或者让用户在后端进行分类视图,并为用户提供从下拉菜单或类似选项中选择类别的选项。

但是如果您绝对需要加载大量数据,则可以选择几个不同的方向...。

  1. DataTables的加载时间的很大一部分是表行和列的实际呈现,这取决于您对rowCallback所用的逻辑类型,等等。考虑使用只显示可见行的滚动插件。滚动表时,将呈现其他行。这大大加快了大表的渲染时间。
  2. 如果您正在加载大量数据,例如1000行,则可以对数据请求进行分块,以便用户快速获得初始数据加载(例如300-500行),并加载其余数据在幕后异步进行。通过ajax参数正常加载初始数据,然后在initComplete回调中获取其余数据。
  3. 另一个选择是首先通过ajax加载数据并将其存储在localStorage或会话存储中,然后将DataTables的“ data”参数指向本地数据。这不一定能提高性能,但可以回答有关“禁用” ajax参数的问题。例如:

var ajaxOptions = { type: 'GET', "url": *your rest url*, contentType: 'application/json', dataType: 'json', cache: false } $.ajax(ajaxOptions) .fail(function() { console.log("AJAX FAIL") }) .then(function(resp){ localStorage.setItem('dtdata', JSON.stringify(resp)); }) .done(function() { // initialize DataTable $("#myTable").DataTable( { "data": JSON.parse(localStorage.getItem('dtdata')), "columns": o.columns // other DataTable parameters }) });

    #3和1或2的任何组合。

0
投票
您是否尝试过在数据表中使用服务器端选项?我前一段时间没有插件就玩了(我手动添加了js文件,并编写了一个ssjs库来处理ajax请求)。

此选项允许您处理分页服务器端,并将发送给客户端的数据限制为当前页面的数据。它将一些参数添加到ajax调用中,您可以在返回数据的代码(代理)中对其进行处理。缺点是必须同时在服务器端完成排序,过滤等操作(除非您关闭这些选项)

更多信息可以在这里找到:https://datatables.net/manual/server-side

我不确定如何将其与rest控件一起使用,但是通过对(脚本)代理的ajax调用,它可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.