我'建立一個簡單的應用程序,會從數據庫項目列表(約3000行現在),呈現與項目名稱的表,然後顯示項目規格每當我們集團公司在一個特定的項目。 我已經注意到使用g:remoteLink而不是舊的基本a標記呈現html表時出現一個小的性能問題。Grails的remoteLink VS <a>
我有一個控制器,獲取數據並生成一個模板
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模板的另一個版本(快速,大約400ms,使用從remoteLi生成的鏈接nk)
<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而不是使用標籤的渲染速度更快?
謝謝!
如果使用'grails run-war'運行,你會看到相同的性能問題嗎?使用'run-app'時,性能問題可能只是GSP可重載性的一個副作用。 – 2013-02-08 16:28:37
安德魯說什麼加上沒有分頁數據渲染3000行通常不是一個好主意。標籤必須處理,並且一次處理很多。 – Gregg 2013-02-08 16:45:06
run-app和run-war之間有一點區別,但a標籤仍然更快。我知道顯示3000行不是一個想法。下一步是實現類似jqgrid/datatables,因爲我需要排序/過濾。我比較渲染與/不ajax調用,看看哪一個做得最好。 – Mo7 2013-02-08 18:59:26