Grails remoteLink vs<;a>;

Grails remoteLink vs<;a>;,grails,gsp,Grails,Gsp,我正在构建一个简单的应用程序,它从db中获取一个项目列表(目前大约3000行),用项目名称呈现一个表,然后每当我们对特定项目进行clic时,显示项目规格。 我注意到在使用g:remoteLink而不是旧的基本a标记呈现html表时出现了一个小的性能问题 我有一个获取数据和呈现模板的控制器 def items = sql.rows("select * from items") render (template:'itemList',model:[result:items]) 我还有一个简单的索引

我正在构建一个简单的应用程序,它从db中获取一个项目列表(目前大约3000行),用项目名称呈现一个表,然后每当我们对特定项目进行clic时,显示项目规格。 我注意到在使用g:remoteLink而不是旧的基本a标记呈现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>

项目
和我的项目列表模板(慢,大约4s)


${item.itemcode}
itemList模板的另一个版本(快速,大约400ms,使用remoteLink生成的链接)


有没有一种方法可以使用remoteLink而不是a标记加快渲染速度


谢谢

我建议考虑一些事情

1.)加载3000个视图中的任何内容通常不是一个好主意。尝试通过显示这些数据量来思考您真正想要实现的目标

2.)如果您最终计划使用jqgrid或datatables之类的工具,请不要将重点放在这些工具中的一个可能会有本质不同的功能上。直接转到所需的最终解决方案,然后从那里进行调整

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

4.)最后,Grails等框架允许您轻松完成一些可能以牺牲性能为代价的事情。充分利用某些东西可能需要你忽略很多便利


享受吧!希望这有帮助

如果使用
grailsrunwar
运行,您是否会看到相同的性能问题?使用
runapp
时,性能下降可能只是GSP可重新加载性的一个副作用。Andrew所说的,再加上在没有分页数据的情况下渲染3000行通常不是一个好主意。标签确实需要处理,这是一次大量的处理。run app和run war之间有一点区别,但a标签速度更快。我知道展示3000排不是一个好主意。下一步是实现类似jqgrid/datatables的东西,因为我需要排序/过滤。我比较了使用ajax调用和不使用ajax调用的渲染,看哪一个做得最好。除了第一个,我同意上面所有的观点,因为它不适合我正在进行的项目。第三个确实给了我一个提示,所以我创建了一个js函数,它包装了“onclick”事件中包含的js,它做的几乎是我正在寻找的,但正如您在第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>
<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>