Javascript 将本地数组作为Ajax文件加载以提高性能

Javascript 将本地数组作为Ajax文件加载以提高性能,javascript,jquery,ajax,datatables,jstl,Javascript,Jquery,Ajax,Datatables,Jstl,我正在使用DataTables创建一个表,但它的加载速度非常慢。我有大约9000条记录需要从SQL server处理(php不是选项)。我正在使用XML和SpringMVC。我使用XML和Java来收集数据并将其放入哈希集中(我也尝试过列表,两者似乎都不比另一个快) 一旦进入JS,我将使用for循环来填充数组,然后将其用作数据表的“数据”。我的理解是,使用服务器端和“ajax”(代替数据)将大大加快速度,因此我想知道是否有办法将我的阵列作为ajax使用 谢谢 当前代码: var Internat

我正在使用DataTables创建一个表,但它的加载速度非常慢。我有大约9000条记录需要从SQL server处理(php不是选项)。我正在使用XML和SpringMVC。我使用XML和Java来收集数据并将其放入哈希集中(我也尝试过列表,两者似乎都不比另一个快)

一旦进入JS,我将使用for循环来填充数组,然后将其用作数据表的“数据”。我的理解是,使用服务器端和“ajax”(代替数据)将大大加快速度,因此我想知道是否有办法将我的阵列作为ajax使用

谢谢

当前代码:

var InternationalSet = [];
var storeIndex = 0;
<c:forEach items="${InternationalList}" var="entry">
InternationalSet[storeIndex]= ['', "${entry.getStoreId()}","${entry.getOrderPhone()}","${entry.getAddress1()}","${entry.getCity()}","${entry.getState()}", "${entry.getZip()}", "${entry.getMgrName()}", 
  "${entry.getFranchiseeName()}", "${entry.getOrglvl6Descr()}","${entry.getCommDescr()}", "${entry.getOrglvl8Name()}", "${entry.getLatitude()}", "${entry.getLongitude()}"];
 storeIndex++;
</c:forEach>
$('#dataTable').html( '<table cellpadding="0" cellspacing="0" border="0" style="width: 99%; color:black" class="display compact" id="tableOne"></table>' );
var table = $('#tableOne').DataTable( {
  "dom": '<l<t>ip>',
  "deferRender": true,
  "lengthChange": false, 
  "data": InternationalSet,
  "pageLength": 10,
  "orderMulti": false, 
  "columns": [.....
var InternationalSet=[];
var-storeIndex=0;
InternationalSet[storeIndex]=[“”,${entry.getStoreId()},“${entry.getOrderPhone()}”、“${entry.getAddress1()}”、“${entry.getCity()}”、“${entry.getState()}”、“${entry.getZip()}”、“${entry.getMgrName()}”,
“${entry.get特许经营名称()}”、“${entry.getOrglvl6Descr()}”、“${entry.getCommDescr()}”、“${entry.getOrglvl8Name()}”、“${entry.getLatitude()}”、“${entry.getLatitude()}”];
storeIndex++;
$('#dataTable').html('');
变量表=$(“#表一”)。数据表({
“dom”:“”,
“延迟渲染”:正确,
“长度变化”:错误,
“数据”:InternationalSet,
“页面长度”:10,
“orderMulti”:错误,
“列”:[。。。。。

这不是一个完整的答案,但一个快速的改进是将列表填充为单个语句,而不是9000

var InternationalSet = [
<c:forEach items="${InternationalList}" var="e" varStatus="status">
   [ '',
     "${e.getStoreId()}",
     "${e.getOrderPhone()}",
     "${e.getAddress1()}",
     "${e.getCity()}",
     "${e.getState()}", 
     "${e.getZip()}", 
     "${e.getMgrName()}", 
     "${e.getFranchiseeName()}",
     "${e.getOrglvl6Descr()}",
     "${e.getCommDescr()}", 
     "${e.getOrglvl8Name()}",
     "${e.getLatitude()}",
     "${e.getLongitude()}"
  ] <c:if test="${!status.last}">,</c:if>   
</c:forEach>
];
var InternationalSet=[
[ '',
“${e.getStoreId()}”,
“${e.getOrderPhone()}”,
“${e.getAddress1()}”,
“${e.getCity()}”,
“${e.getState()}”,
“${e.getZip()}”,
“${e.getMgrName()}”,
“${e.get特许经营名称()}”,
“${e.getOrglvl6Descr()}”,
“${e.getCommDescr()}”,
“${e.getOrglvl8Name()}”,
“${e.getLatitude()}”,
“${e.getLongitude()}”
] ,   
];
您可以删除上面的一些新行以使其紧凑一些。对脚本的微小更改还可以构建一个JSON对象,您可以在AJAX响应中返回该对象以填充表

{
"data": [
<c:forEach items="${InternationalList}" var="e" varStatus="status">
....
</c:forEach>
]
}
{
“数据”:[
....
]
}
如果您从服务器返回节中的数据,您的响应将更改为

{
"draw": ${param.draw},
"recordsTotal": ${yourTotal},
"recordsFiltered": ${yourFiltered},
"data": [
<c:forEach items="${InternationalList}" var="e" varStatus="status"
   begin="${param.start}" end="${param.start + param.length}" >
....
</c:forEach>
]
}
{
“draw”:${param.draw},
“recordsTotal”:${yourTotal},
“recordsFiltered”:${yourFiltered},
“数据”:[
....
]
}

(您必须在
param
值上添加一些范围/值检查)

数据库查询速度慢,还是JavaScript处理速度慢?您可能一次获取9000条记录,应用分页。不要通过它们将9000条记录转储到UI页面。datatables文档中有服务器端处理的示例……相应地调整服务器脚本,以提供我所需的内容,网站上说默认情况下,它是打开的。我没有注意到它在那里和保持空白之间的区别。我已经尝试了代码的顶部部分,但是我得到了错误(红色的曲线),我尝试了使用,并且得到了曲线(缺少更好的术语)如果我删除了这张照片中带下划线的内容,那么获取下划线的速度会更快吗?哪个逗号?看起来是(这只是基于代码的第一位,我会尝试其他一些方法),但初始加载速度似乎是原来的两倍。