我在 DataTables(另一个 jQuery 插件)方面取得了巨大的成功,其行号与您所讨论的类似。你在 javascript 中看到的速度损失比在 java 中看到的速度损失是它实际上是在渲染 DOM,这需要更多的工作。 DataTables 的美妙之处在于您能够从 javascript 数组(本质上是 json)获取数据 - 因此排序是在数组上完成的(与 java 的速度类似),然后仅显示用户需要查看的表部分是在 DOM 中生成的。
请参阅以下网址以获取示例:
http://datatables.net/examples/data_sources/js_array.html http://datatables.net/examples/data_sources/js_array.html
or
http://datatables.net/examples/data_sources/ajax.html http://datatables.net/examples/data_sources/ajax.html
我建议使用后者。如果使用静态 json 数组仍然不够快,您将需要构建一个服务器端脚本来减轻 javascript 的负担 - 这里有服务器端代码的一个很好的例子:
http://datatables.net/examples/data_sources/server_side.html http://datatables.net/examples/data_sources/server_side.html
编辑:无限滚动
正如评论中所讨论的,问题不在于排序,而在于 HTML 表与 JS 之间的转换。当用户查看时,仅加载返回排序的渲染部分,这可能会有所帮助;服务器也以JSON形式向JS提供与表相同的信息。这两种技术消除了HTML-JS转换和渲染问题,从而大大提高了速度。
HTML(这是在 JSON 出现之前最初必须渲染的所有内容 - 添加与列一样多的标签):
<table id="table_id">
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>etc</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
JQUERY:
$(document).ready(function() {
$('#table_id').dataTable( {
"bScrollInfinite": true,
"bScrollCollapse": true,
"sScrollY": "200px",
"bProcessing": true,
"sAjaxSource": 'array.txt'
});
});
array.txt 包含:
{ "aaData": [
["This will be in column 1","This in two","this in 3"],
["another row - column 1","another two","another 3"]
]}