我正在构建一个简单的应用,该应用从db获取项目列表(目前大约有3000行),呈现带有项目名称的表,然后每当我们选择特定项目时就显示项目规格。
使用g:remoteLink而不是旧的basic标签渲染html表时,我注意到了一个小的性能问题。
我有一个获取数据并呈现模板的 Controller
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模板(缓慢,大约4秒)
<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模板(使用remoteLink生成的链接,速度大约为400ms)
<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标签来加快渲染速度?
谢谢 !!
最佳答案
我建议考虑的几件事...
1.)装载3,000视野内的物体通常不是一个好主意。尝试考虑通过显示此数据量来真正实现的目标。
2)如果最终您打算使用jqgrid或datatables之类的内容,则不要专注于该工具之一可能本质上会有所不同的事情。转到所需的最终解决方案,然后从那里进行调整。
3.)考虑页面上正在生成的所有代码以及实际使用了多少代码。如果您生成3,000个链接,而用户可能只单击5或10,则您可能会使用一些jQuery处理行单击时链接的动态加载。这将加快渲染速度,因为浏览器无法显示HTML。
4.)最后,像Grails这样的框架以及其他一些框架,可以使您轻松地完成可能牺牲一些性能的工作。充分利用某些东西可能需要您带来很多便利。
请享用!希望这可以帮助。