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

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

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

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

您的经验/建议是什么?

xujing_521 回答:带有xpages的datatables插件,将json放在viewscope或sessionscope中而不是URL中?

根据我的经验,我的第一个建议是尽可能避免加载数千条记录。要在浏览器中重现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
             })
        });

  1. #3和1或2的任意组合。
,

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

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

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

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

本文链接:https://www.f2er.com/3166030.html

大家都在问