ASP: СОВЕТЫ ASP-РАЗРАБОТЧИКУ
СОВЕТ 6: РАЗУМНОЕ ИСПОЛЬЗОВАНИЕ ОБЪЕКТА SESSION
Теперь, когда в предыдущих советах были раскрыты достоинства кэширования данных в
объектах Applications и Sessions, мы собираемся предложить вам избегать использования
объекта Session. Сессии имеют несколько ловушек когда используются на загруженных
сайтах. Под "загруженными" имеются ввиду сайты с сотнями запрашиваемых
страниц в секунду или тысячами пользователей одновременно. Этот совет также важен
для сайтов, которые должны масштабироваться горизонтально у т.е. те сайты, которые
используют несколько серверов для распределения нагрузки и обеспечения отказоустойчивости
при сбоях. Для меньших сайтов, типа intranet-сайтов, преимущества применения Sessions
все же перевешивают.
Обобщая, ASP автоматически создает Session для каждого пользователя, который обращается
к веб-серверу. Каждая сессия занимает приблизительно 10 Кб памяти (сверх любых данных,
сохраненных в Session) и немного замедляет выполнение всех запросов. Сессия остается
действующей до окончания таймаута (timeout), обычно 20 мин.
Но самая большая проблема при использовании сессий - это не производительность, а
расширяемость. Сессии не охватывают все задействованные веб-сервера; как только Session
была создана на одном сервере ее данные остаются там. Это означает, что если вы используете
сессии на мультисерверном веб-сайте, вы должны придумать стратегию для обработки
запросов каждого пользователя, которые должны быть всегда направлены на сервер, на
котором существует сессия этого пользователя. Это называется "застреванием"
пользователя на сервере (или "липкой сессией").
Объект Application также не охватывает все сервера: если вам нужно совместно использовать
и обновлять данные Application через веб-сервера, вам нужно использовать конечную
базу данных. Однако неизменяемые (read-only) данные Application все же полезны на
мультисерверных сайтах.
Наиболее критичные к скорости сайты обычно используют не менее двух веб-серверов.
Поэтому при проектировании вашего ASP-приложения вы должны либо использовать "липкие
сессии", либо просто избегать применения объекта Session, также как любых других
методов, сохраняющих информацию пользователя на разных веб-серверах.
Если же вы не используете Session, то убедитесь, что отключили их. Это можно сделать
посредством Internet Services Manager (см. документацию по ISM). Но если вам все-таки
необходимо использовать сессии, то есть несколько путей уменьшить их удары про производительности.
Вы можете переместить содержимое, которое не требует сессий (например, страницы help
и т.д.) в отдельное ASP-приложение, у которого сессии выключены. Кроме того, на страницах,
где объект Session не используется, применяйте следующую директиву, помещещаемую
вверху страницы:
<% @EnableSessionState=False %>
Одна из основных причин ее применения - то, что Session создает интересную проблему
в случае использования фрэймов (frameset). ASP гарантирует, что в любое время будет
выполняться только один запрос от Session. Это делается для того, чтобы при одновременном
запросе одним пользователем нескольких страниц, только один ASP-запрос был обработан
сессией, что помогает избежать проблем многопоточного доступа к объекту Session.
К сожалению, в результате этого все страницы в frameset будут загружаться последовательно,
а не одновременно, и пользователю придется продолжительное время ждать полной загрузки.
Мораль этой истории: если вы не уверены, что с использованием фрэймов и Session ваше
приложение правильно работает, то используйте:
<% @EnableSessionState=False %>
Альтернативой использованию объекта Session являются многочисленные параметры управления
Session. При передаче малых объемов данных (менее 4 Кб) обычно рекомендуется использовать
Cookies, переменные QueryString и скрытые (hidden) переменные форм. При использовании
большого количества передаваемых параметров (например, корзина произведенных заказов
в он-лайн магазине) наиболее лучший выбор - конечная база данных.
Кроме того, все ваши вопросы о программировании VB, ASP и БД найдут ответ на форумах
vbCode - http://vbcity.com/vbcode/ru/home.asp
--------------------------------------------------------------------------------
НОВОСТИ САЙТА VBCODE - http://vbcity.com/vbcode
VB: НОВЫЕ СЕКРЕТЫ ПРОГРАММИРОВАНИЯ
Пример работы с БД DBASE через ADO
Определение версии Internet Explorer
Использование функции AutoComplete
"Перетаскивание" текстовых файлов из Проводника в TextBox
Библиотека полезных функций Pron32.DLL
Control - InputNetAddress
Control - AutoClose
GetServicesPortID
ReplaceString
Get Taskbar Hight
VB: НОВЫЕ ТЕМЫ ОБСУЖДЕНИЯ
дайте совет о хорошей книге про vb!!! [4]
Проблема со шрифтами в приложении на VB [2]
Файл ресурсов [3]
Как реализовать на байсике макос написаный в С++ [0]
Макс-ое ожидание таймера 65500 мсек,как увеличить? [3]
Как записать весь текст из Word -а , не открывая его, в переменную? [0]
Вопрос о ТекстБокс [1]
Контроль нажатия клавиши [3]
Как закрыть приложение? [4]
Создать oбьект в VB [2]
БД: НОВЫЕ ТЕМЫ ОБСУЖДЕНИЯ
kak udalit iz tablizy SQL vse ne unikalnyje stroki [1]
Статические функции..? [14]
Процедуры в MS SQL: оператор LIKE не понимает параметров??? [6]
Программная передача текстового фарагмента в приложениях Windows [19]
Посоветуйте с выбором Базы Данных [0]
Poisk po mesiatsu [9]
Как вставить текущую дату через SQL?!! [11]
First(), Last() в Oracle???? [5]
Масштабирование текста в RTBox [4]
problema s Access 2000 i VB 6.0 [6]
--------------------------------------------------------------------------------
Выпуск подготовил Алексей Смирнов
http://vbcity.com/vbcode/ru/home.asp