Monday, September 07, 2009

Сессии в JavaScript

Один из технических приемов, который может быть использован в нагруженных веб-приложениях - хранение информации из сессии на стороне клиента. Более того - не требуя передачи этих данных на сервер при каждом запросе.
Типично, сессии используются для хранения данных между обращениями. Программировать удобно, но при большой нагрузке возникают проблемы. И память на сервере расходуется под хранение данных, и утилизировать потом эту память нужно, а сборка мусора есть дело не очень хорошее, балансировать нагрузку при интенсивном использовании сессий сложнее и т.д.
Можно хранить данные между запросами в cookie. Но этот заголовок ограничен по размерам.
А трюк состоит в том, что для хранения данных на стороне клиента можно использовать атрибут name объекта window. То есть в буквальном смысле слова, если в JavaScript проинициализировать этот атрибут:

<script type="text/javascript">
window.name = "строка _ с _ данными";
</script>

то это значение window.name будет сохраняться при переходах между страницами. И атрибут этот все равно не используется (если вы не открываете диалоговые окна). А хранить там можно много информации. Возможно, точные лимиты зависят от браузера, но на практике по 100Kb умещалось без проблем.

Основной недостаток - это, конечно, безопасность. Но в сессии вовсе не всегда хранятся какие-то закрытые данные. А если таковые есть, то, конечно, лучше их таким образом не сохранять. А в остальном - вполне работающий способ разгрузить сервер.

P.S. в случае фреймов можно использовать window.top.name

1 comment:

Anonymous said...

Оригинально. Рад, что прочёл это.