我正在构建一个简单的应用程序,它从db获取项目列表(现在大约3000行),呈现带有项目名称的表格,然后在我们查看特定项目时显示项目规格。 在使用g:remoteLink而不是旧的基本标记渲染html表时,我注意到了一个小的性能问题。
我有一个获取数据并呈现模板的控制器
def items = sql.rows("select * from items")
render (template:'itemList',model:[result:items])
我还有一个简单的索引文件
<body>
<g:remoteLink controller="items" action="getItems" update="itemList">Items</g:remoteLink>
<div class="body" style="width: 1000px;">
<div id="itemList"></div>
</div>
</body>
和我的itemList模板(慢,大约4s)
<table width="100%" cellspacing="0" cellpadding="0" border="1" id="mytable">
<g:each var="item" in="${result}">
<tr>
<td><g:remoteLink controller="items" action="getItemSpec" update="itemDetail" params="${ [itemcode: item.itemcode] }">
${item.itemcode}</g:remoteLink></td></tr>
</g:each>
</table>
另一个版本的itemList模板(快速,大约400毫秒,使用来自remoteLink的生成链接)
<table width="100%" cellspacing="0" cellpadding="0" border="1" id="mytable">
<g:each var="item" in="${result}">
<tr>
<td>
<a onclick="jQuery.ajax({type:'POST',data:{'itemcode': '${item.itemcode}'}, url:'/myApp/items/getItemSpec',success:function(data,textStatus){jQuery('#itemDetail').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){}});return false;" href="/myApp/items/getItemSpec?itemcode=${item.itemcode} "> ${item.itemcode}</a>
</td>
</tr>
</g:each>
</table>
有没有办法使用remoteLink而不是使用a标签来提高渲染速度?
谢谢!
答案 0 :(得分:1)
我建议考虑一些事情......
1。)在视野中加载3,000个任何东西通常不是一个好主意。尝试通过显示这些数据来考虑您真正想要实现的目标。
2。)如果最终你计划使用像jqgrid或datatables这样的东西,那就不要专注于这些工具之一可能基本上做不同的事情。直接找到你想要的最终解决方案,然后从那里进行调整。
3。)考虑页面上生成的所有代码以及实际使用的数量。如果您生成3,000个链接并且用户可能只点击5或10,则可能使用一些jQuery来处理行单击时链接的动态加载。这样可以加快渲染速度,因为浏览器显示的HTML较少。
4。)最后,像Grails这样的框架允许你轻松地做一些可能牺牲一些性能的事情。充分利用某些东西可能需要你通过很多便利。
享受!希望这可以帮助。