2013-02-08 158 views
0

我'建立一個簡單的應用程序,會從數據庫項目列表(約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而不是使用標籤的渲染速度更快?

謝謝!

+1

如果使用'grails run-war'運行,你會看到相同的性能問題嗎?使用'run-app'時,性能問題可能只是GSP可重載性的一個副作用。 – 2013-02-08 16:28:37

+1

安德魯說什麼加上沒有分頁數據渲染3000行通常不是一個好主意。標籤必須處理,並且一次處理很多。 – Gregg 2013-02-08 16:45:06

+0

run-app和run-war之間有一點區別,但a標籤仍然更快。我知道顯示3000行不是一個想法。下一步是實現類似jqgrid/datatables,因爲我需要排序/過濾。我比較渲染與/不ajax調用,看看哪一個做得最好。 – Mo7 2013-02-08 18:59:26

回答

1

有幾件事情,我建議考慮...

1)在任何視圖3000加載通常不是一個好主意。試着通過展示這些數據來思考你真正想要達到的目標。

2)如果最終你計劃使用類似的jqGrid或數據表不專注的東西,這個工具之一基本上可以做到不同。直接找到你想要的最終解決方案,然後從那裏調整。

3.)考慮頁面上生成的所有代碼以及實際使用的實際數量。如果您生成了3000個鏈接,並且用戶可能只需要點擊5或10個點,那麼您可以使用一些jQuery來處理在點擊行上動態加載鏈接。這應該會加快渲染速度,因爲瀏覽器顯示的HTML較少。

4.)最後,像Grails這樣的框架在其他幾個框架中允許您輕鬆地做一些可能會犧牲某些性能的東西。充分利用某些東西可能會要求您通過很多便利。

享受!希望這可以幫助。

+0

我同意上面除了第一個,因爲它利己適合項目我工作的所有的點。第三個沒給我一個提示,所以我創建了一個封裝中包含的「點擊」事件中的JS一個js函數,它並是相當多我一直在尋找,但正如你在點4 @邁克爾說,這是一個旁路-j李 – Mo7 2013-02-11 19:26:44