WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Совет 2: Кэшируйте часто используемые данные в объектах Application или Session

Совет 2: Кэшируйте часто используемые данные в объектах Application или Session


Дата публикации: 18-12-2010

Объекты Application и Session служат для хранения данных в памяти, значения которых могут быть доступны между несколькими HTTP-запросами (в отличие от обычных переменных, чьи значения доступны только в теле одной ASP-страницы). Данные объекта Session доступны только одному пользователю (в течении его сессии), в то время как данные Application доступны всем пользователям веб-сайта. Поэтому часто перед разработчиком возникает вопрос: в каком из объектов сохранять часто используемые данные. Обычно, для инициализации переменных этих объектов используются процедуры файла Global.asa - Application_OnStart() или Session_OnStart() соответственно. Если в вашем Global.asa еще нет этих процедур, то вы можете добавить их сами или инициализировать переменные, когда это будет необходимо. Примером может быть следующая процедура, использующая Application для хранения значений многократно использующейся переменной EmploymentStatusList. Процедура проверяет существование данных в EmploymentStatusList и при необходимости расчитывает их заново:

<%
Function GetEmploymentStatusList
   Dim d
   d = Application("EmploymentStatusList")
   If d = "" Then ' Если значения нет - выполним расчет
      d = FetchEmploymentStatusList() 
      Application("EmploymentStatusList") = d
   End If
   GetEmploymentStatusList = d
End Function
%>

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

'Сохранить значение recordset в виде массива
Function FetchEmploymentStatusList
   Dim rs 
   Set rs = CreateObject("ADODB.Recordset")
   rs.Open "select StatusName, StatusID 
            from EmployeeStatus", _
           "dsn=employees;uid=sa;pwd=;"
   'Получить все строки
   FetchEmploymentStatusList = rs.GetRows() 
   rs.Close
   Set rs = Nothing
End Function

Если полученный массив будет часто использоваться, тогда лучше хранить его сразу в виде HTML-списка, чем массив, которое каждый раз нужно преобразовывать в HTML:

'Сохранить значение recordset в виде HTML-списка
Function FetchEmploymentStatusList
   Dim rs, fldName, s
   Set rs = CreateObject("ADODB.Recordset")
   rs.Open "select StatusName, StatusID
            from EmployeeStatus", _
           "dsn=employees;uid=sa;pwd=;"
   s = "<select name=""EmploymentStatus">" & vbCrLf
   Set fldName = rs.Fields("StatusName") 
   Do Until rs.EOF
     s = s & " <option>" & fldName _ 
	     & "</option>" & vbCrLf
     rs.MoveNext
   Loop
   s = s & "</select>" & vbCrLf
   rs.Close
   Set rs = Nothing 
   FetchEmploymentStatusList = s
End Function

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Март 2017 (1)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Уоррен Баффет:

    "Правило №1: Берегите деньги. Правило №2: Помните о правиле №1."

    Опрос

    Как Вам новый дизайн сайта?

    Отлично
    Неплохо
    Нормальный
    Ужасно