Отправляет email-рассылки с помощью сервиса Sendsay

Javazing - Java Новости и Форум

  Все выпуски  

Заметки по оптимизации веб-приложения.


Привет, в первой рассылке принято познакомиться, рассказать о том, что будет и чего не будет. Так вот, следуя поговорке "нет времени на медленные танцы", приступим к делу. К тому же, вам все равно, наверняка, не важно, кто стоит (или сидит) за этой рассылкой, так что пожалуйте:

Заметки по оптимизации веб-приложения.

Конечно, основной источник тормозов любой программы – это неправильно выбранные/разработанные алгоритмы и структуры хранения данных. В веб-приложении и любой другой распределенной программе в список добавляются затратные I/O операции по передачи данных по сети.

И хотя уже как с добрый десяток лет, в разработке систем промышленного масштаба не уделяется большого внимания оптимизации программ – проще нарастить памяти, добавить процессоров и расширить канал – тем не менее, знать такие мелочи полезно и порой просто интересно. Если у вас есть свои заметки, присылайте их и мы с радостью расширим этот список. Если вы считаете, что заметки ошибочны или излишни, сообщите и об этом. 

  1. Не забывайте удалять ненужные logging и debugging инструкции, такие как System.out.println инструкции – а это дорогая операция.
 
  1. ServletRequest.getRemoteHost()   - это дорогостоящая операция и может занять несколько секунд.
 
  1. JSP страницы могут работать медленнее, чем сервлеты по отправке двоичных данных, так как JSP всегда используют PrintWriter, а сервлеты могу воспользоваться преимуществами более быстрого OutputStream.
 
  1. Черезмерное использование кастом тэгов может вызвать снижать производительность (под вопросом, надо бы более детальное обоснование).
 
  1. Не сохраняйте больших объектов в javax.servlet.http.HttpSession. Сервлеты могут сериализовать и десереализовывать сессии, и если объекты большие, то это сказывается на производительности.
 
  1. Если на JSP странице вы не работаете с сессией, используйте тэг "<%@ page session="false"%>", чтобы предотвратить создание HttpSessions по умолчанию.
 
  1. Если сессия больше не нужна, не забывайте вызывать HttpSession.invalidate(), а не обнулять сессию.
 
  1. Уменьшите таймаут сессии через session.setMaxInactiveInterval() или в web.xml.
 
  1. Используйте директиву <%@ include file="copyleft.html" %> где возможно, так как это compile-time директива, тогда как <jsp:include page="copyleft.jsp" /> является runtime директивой.
 
  1. Используйте кэширование. Существую бесплатные реализации кэша вроде OpenSymphony cache tag. http://www.opensymphony.com/oscache/
 
  1. Используйте метод servlet init() для инициализации и сохранения статических данных.
 
  1. Используйте StringBuffer, вместо String’ового + оператора, когда вам надо объединить несколько строк.
 
  1. Используйте метод print() вместо println().
 
  1. Используйте getLastModified() метод, чтобы использовать кэш браузера и кэш сервера, если таковой присутствует.
 
  1. Методы сохранения сессии от самого быстрого и вниз по убывающей: HttpSession, скрытые поля (Hidden fields), Cookies, URL rewriting.
 
  1. Используйте transient переменные, чтобы уменьшить потенциальные педали при сериализации.
 
  1. Отключите функцию по перезагрузке классов у вашего сервера.
 
  1. Ссылайтесь на статические ресурсы через прямые урлы на веб-сервер,а не через редиректы сервлета.
 
  1. Увеличьте размер буфера System.out с помощью директивы <%@ page buffer="12kb" %>.
 
  1. Использование фильтров – операция не из дешевых. Следует оценить потенциальные риски и провести тесты из-за возможного падения производительности.
 
  1. Если данные из базы занимают немного места, имеет смысл вычитать их в память и работать с ними из памяти.
 
  1. Не забывайте правильно закрывать result sets, statements и connections.
 
  1. Редиректы работают медленнее, чем форварды, потому что браузер должен сделать дополнительный запрос.
 
  1. Используйте PreparedStatements вместо обычного объекта Statement.

 

Все вышесказанное было не раз использовано мной на практике. И поскольку меня еще не выгнали с работы, значит все не так плохо, удачи :)

 Искренне Ваш, Павел Турчанинофф
 


В избранное