Я создаю простое приложение, которое получает список элементов из db (около 3000 строк), отображает таблицу с именами элементов, а затем отображает спецификации элементов всякий раз, когда мы кликаем по определенному элементу. Я заметил небольшую проблему с производительностью при рендеринге таблицы html с g: remoteLink вместо старого базового тега.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 (быстрая, около 400 мс, с использованием сгенерированной ссылки с удаленногоLink)
<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»? Снижение производительности может быть просто побочным эффектом перезагрузки GSP при использовании 'run-app'. –
Что сказал Андрей и тот факт, что рендеринг 3000 строк без данных подкачки, как правило, не является отличной идеей. Тег должен обрабатываться, и это очень много обработки сразу. – Gregg
Существует небольшая разница между run-app и run-war, но тег все еще быстрее. Я знаю, что отображение 3000 строк не является идеей geat. Следующий шаг - реализовать что-то вроде jqgrid/datatables, потому что мне понадобится сортировка/фильтрация. Я сравниваю рендеринг с/без вызовов ajax, чтобы увидеть, какой из них лучше всего работает. – Mo7