Grails remoteLink vs <a></a>

时间:2013-02-08 15:59:45

标签: grails gsp

我正在构建一个简单的应用程序,它从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标签来提高渲染速度?

谢谢!

1 个答案:

答案 0 :(得分:1)

我建议考虑一些事情......

1。)在视野中加载3,000个任何东西通常不是一个好主意。尝试通过显示这些数据来考虑您真正想要实现的目标。

2。)如果最终你计划使用像jqgrid或datatables这样的东西,那就不要专注于这些工具之一可能基本上做不同的事情。直接找到你想要的最终解决方案,然后从那里进行调整。

3。)考虑页面上生成的所有代码以及实际使用的数量。如果您生成3,000个链接并且用户可能只点击5或10,则可能使用一些jQuery来处理行单击时链接的动态加载。这样可以加快渲染速度,因为浏览器显示的HTML较少。

4。)最后,像Grails这样的框架允许你轻松地做一些可能牺牲一些性能的事情。充分利用某些东西可能需要你通过很多便利。

享受!希望这可以帮助。