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

Архив WebclubТехнологии2010

Публикация прежнего Webclub · 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

Ещё из архива

Архив клуба
веб-разработчиков

HTML, CSS, программирование и история интернета. Публикации прежнего Webclub по своим адресам.

Открыть архив
Сайт на ноутбуке и телефоне