JSP: вызов функции внутри цикла становится очень медленным. Помогите мне оптимизировать - PullRequest
0 голосов
/ 10 февраля 2011

В моем JSP я перебираю объект, содержащий список сотрудников, и отображаю его.Для каждой строки сотрудника я также предоставляю ссылку, чтобы пользователь мог просматривать данные сотрудника.Ссылка вызывает функцию Javascript, в которой передается идентификатор сотрудника.

Проблема, с которой я столкнулся, заключается в том, что время отклика резко увеличивается с увеличением количества строк в моем объекте.Когда мой объект содержит более тысячи записей, рендеринг страницы занимает не менее 30 секунд.Вот код:

function getDetail(empID){

  //AJAX call to get employee details}
}
.
.

<table>
  <c_rt:forEach var="emp" items="${employeeListObj}">
    <tr>
      <td>
    <a href="#" onClick="getDetail('<c:out value="${emp.id}"/>')"><c:out value="${emp.lastName}" /></a>
      </td>
    </tr>
  </c_rt:forEach>
</table>

Я сузил преступника до динамического параметра ID сотрудника или его оценки во время выполнения.Сначала я подумал, что это проблема JSTL c: out, но я также попытался перейти на обычную переменную JSP (т. Е. GetDetail ('<% = ctr%>')), и время отклика все еще невелико.* Но когда я изменил ее на статическую строку (т.е. getDetail («некоторая статическая строка»)), время отклика становится хорошим.

Я также попытался передать его как функцию (т.е. onClick = "getDetail (function() {return ''}) ") но время отклика все равно не улучшилось.

Есть ли лучший (более оптимизированный) способ сделать это, что приведет к лучшему времени отклика?

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Спасибо за ответы, но я нашел простое решение.Не самое элегантное, но это простое изменение, и оно отвечает потребностям моих конечных пользователей (они не хотят разбивать на страницы, просто прокручивают область DIV).

Вместо использования этого оператора внутри цикла:

<a href="#" onClick="getData('<c:out value="${emp.id}"/>')">

Я использовал идентификатор сотрудника в качестве идентификатора якорного тега и вместо этого передал его:

<a id='<c:out value="${emp.id}"/>' href="#" onClick="getData(this.id)">

Я не знаю почему, но с точки зрения рендеринга страницы разница была день и ночьвремя.Теперь он рендерится менее чем за 5 секунд по сравнению с более чем минутой при прямой передаче значения c: out.Кстати, я имел дело с 10 000 записей.

0 голосов
/ 10 февраля 2011

Если проблема в браузере, вы можете заменить обработчики кликов на атрибуты, содержащие число и обработчик одного клика, добавленные через Javascript (например, jQuery)

РЕДАКТИРОВАТЬ : дляпример:

$('table.SomeClass a').click(function() { 
    getDetail($(this).attr('data-employeeId'));
    return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...