Итак, у нас есть ASP-скрипт для ответа на простые поисковые запросы AJAX. Данные для поиска хранятся в XML-документе. Было бы расточительно разбирать этот документ снова и снова. Достаточно и быстрее всего проанализировать его один раз, прочитать данные в памяти (пара тысяч строковых записей, не более), а затем ответить из памяти.
Так что это похоже на задачу инициализации. При запуске (или первом запуске) скрипт должен загрузить данные; используйте его при последующих запросах.
Как вы кодируете такие инициалы в ASP-скрипте? Нужен ли файл Global.asa
? Или в моем скрипте может быть логика, которая проверяет наличие объекта в Application.Contents
для создания и сохранения, если он отсутствует?
Вот мой код, который пытается кэшировать документ, но не достигает этой цели:
<%
Option Explicit
Sub PrintNodes( xmlDoc )
For Each node In xmlDoc.SelectNodes("//item")
key = node.GetAttribute("id")
value = node.ChildNodes(0).ChildNodes(0).Text
Response.Write( key & ": " & value & VbNewline )
Next
End Sub
Dim locale, cacheKey, xmlFile, xmlDoc, node, key, value
locale = "de_CH" ' Vorgabe
cacheKey = "doc." & locale
Response.ContentType = "text/plain"
Response.Write( cacheKey & VbNewline )
If Not Application( cacheKey ) Then
xmlFile = Server.MapPath( locale & "/kat.all.xml" )
Response.Write( xmlFile & VbNewline )
Set xmlDoc = Server.CreateObject("MSXML2.DomDocument.6.0")
xmlDoc.load( xmlFile )
If xmlDoc.parseError.errorcode <> 0 Then
Response.Write("XML Error" & VbNewline )
Else
PrintNodes( xmlDoc )
Application.Lock
Application( cacheKey ) = xmlDoc
Application.Unlock
End If
Else
Response.Write( "Jetzt ELSE!" & VbNewline )
Application.Lock
Set xmlDoc = Application( cacheKey )
PrintNodes( xmlDoc )
Application.Unlock
End If
%>
Примеры в JScript или PerlScript (расширение ActiveState PerlScript) также приветствуются.