在我的JSP中,我遍历一个包含员工列表的对象并显示它。 对于每个员工行,我还提供了一个链接,以便用户可以查看员工的详细信息。该链接调用Javascript函数,其中传递了员工ID。
我遇到的问题是响应时间会随着对象中的行数急剧增加。当我的对象包含超过一千条记录时,渲染页面至少需要30秒。这是代码:
function getDetail(empID){
//AJAX call to get employee details}
}
.
.
<table>
<c_rt:forEach var="emp" items="${employeeListObj}">
<tr>
<td>
<a href="#" onClick="getDetail('<c:out value="${emp.id}"/>')"><c:out value="${emp.lastName}" /></a>
</td>
</tr>
</c_rt:forEach>
</table>
我已将罪魁祸首缩小为动态或在运行时评估的员工ID参数。我最初认为这是一个JSTL c:out问题,但我也尝试改为普通的JSP变量(即getDetail('&lt;%= ctr%&gt;')),响应时间仍然很慢。
但当我将其更改为静态字符串(即getDetail('some static string'))时,响应时间变得很好。
我也尝试将其作为函数传递(即onClick =“getDetail(function(){return''})”)但响应时间仍未改善。
是否有更好(更优化)的方式来实现更好的响应时间?
答案 0 :(得分:1)
感谢您的回复,但我找到了一个简单的解决方案。不是最优雅,但它是一个简单的改变,它满足我最终用户的需求(他们不想要分页,只是一个可滚动的DIV区域。)
而不是在循环中使用此语句:
<a href="#" onClick="getData('<c:out value="${emp.id}"/>')">
我使用员工ID作为锚标记的ID并改为传递了该标记:
<a id='<c:out value="${emp.id}"/>' href="#" onClick="getData(this.id)">
我不知道为什么,但就页面渲染时间而言,差异是白天和黑夜。它现在渲染的时间不到5秒,而直接传递c:out值超过一分钟。我正在处理10,000条记录。
答案 1 :(得分:0)
如果问题出现在浏览器中,您可以使用包含数字的属性替换单击处理程序,并通过Javascript添加单击处理程序(例如,jQuery)
编辑:例如:
$('table.SomeClass a').click(function() {
getDetail($(this).attr('data-employeeId'));
return false;
});