【问题标题】:loading big tables in HTML, what are other possibilities?在 HTML 中加载大表,还有哪些其他可能性?
【发布时间】:2013-11-27 10:34:09
【问题描述】:
【问题讨论】:
标签:
javascript
html
performance
performance-testing
【解决方案1】:
无需将其拆分为更少的记录并在页面中导航
为什么不简单地在滚动时创建一个 ajax 请求,以便在第一次加载页面时只加载可见记录,而在向下滚动时加载其他记录?
例如:jscroll.com
【解决方案2】:
方法
如果你的表只是属性相似的数据的重复,你可以
- 使用
JSON发送数据;
- 使用模板系统(例如
handlebarsjs)呈现表格;
代码
假设您有一个array of arrays,例如:
{
myData: [
['row1', 'data', 'data'],
['row2', 'data', 'data'],
['row2', 'data', 'data'],
]
}
模板
您的HandlebarsJS 模板如下所示:
<script id="entry-template" type="text/x-handlebars-template">
<table>
{{#each myData}}
<tr>
{{#each this}}<!-- row's data -->
<td>{{ this }}</td>
{{/each}}
</tr>
{{/each}}
</table>
</script>
HTML
<head>
<script>
var mySource = $("#entry-template").html();
var myTpl = Handlebars.compile(mySource);
var myJSON = {/* JSON above */};
$(document.body).append (myTpl (myJSON)); // insert result to page
</script>
</head>
<body>
<!-- result should appears here -->
</body>
【解决方案3】:
我总是发现下划线模板在更大的表格中表现出色。
模板:
<script id="tmpl-students" type="text/template">
<% for (var i = 0; i < students.length; i++) { %>
<% var student = students[i]; %>
<tr>
<td><%= student.name %></td>
<td><%= student.docType %></td>
<td><%= student.field3 %></td>
<td><%= student.field4 %></td>
</tr>
<% } %>
</script>
然后在你的js文件中:
// grab the template
var tmpl = $('#tmpl-students').html();
// compile the template
var compiled = _.template(tmpl, { students : data });
// render the html
$('#yourDiv').html(compiled);
看这里:
http://underscorejs.org/#template