Вариант Явный
Если ваши сценарии не начинаются с Option Explict
, сделайте это сейчас. Затем исправьте все ошибки компиляции, которые появляются. Производительность не помогает, но когда я вижу доказательства того, что совершается эта самая большая из ошибок скриптинга, это просто необходимо упомянуть.
FileSystemObject
Я сомневаюсь, что проблема с производительностью является результатом FileSystemObject
, все, что вы делаете, это создаете экземпляр и проверяете наличие файла. Это вряд ли может вызвать проблемы.
Сказав, что я все равно откажусь от FileSystemObject
. Просто позвольте сценарию выдать ошибку, если есть проблема. Используйте диспетчер IIS, чтобы сопоставить коды состояния 500.100 с ASP-страницей, которая представляет дружественную страницу «Что-то плохое случилось» для пользователя. (500.100 - это состояние запроса, когда скрипт выдает исключение). Также проверьте логический результат метода DOM load
, выдавайте ошибку, когда ошибка разбора также не равна 0. Таким образом, вы передаете всю ужасную обработку исключений на страницу обработки 500.100, и ваш код может оставаться чистым, просто имея дело с номинальным путем кода.
привести в порядок дорожки
Возможно, есть причина, по которой вы часто используете "//" в своих путях (но непоследовательно), но я собираюсь предположить, что нет, поэтому мы можем упростить некоторые пути:
Dim newsItem: Set newsItem = source.selectSingleNode("/LIST/ITEM/NEWSITEM")
Dim str_head: str_head = newsItem .selectSingleNode("HEADLINE").text
Dim str_by: str_by = newsItem .selectSingleNode("PROVIDER").text
Dim News_date_orig: News_date_orig = newsItem .selectSingleNode("CREATED").text
Dim str_date: str_date = formatdatetime(News_date_orig, 1)
Dim bodyNode: Set bodyNode = newsItem.selectSingleNode("BODY")
Кэш XSLTemplate
Область, в которой вы могли бы добиться реального улучшения производительности, заключается в кэшировании XSL-преобразования в объекте приложения (что возможно из-за того, что XSLTemplate
является свободным потоковым объектом). Как это:
Dim xslTemplate
If IsObject(Application("xsl_template")) Then
Set xslTemplate = Application("xsl_template")
Else
Set style = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.3.0")
style.async = false
style.validateOnParse = false
style.resolveExternals = false
style.preserveWhiteSpace = false
style.load Server.MapPath("/includes/xsl/template.xsl")
Set xslTemplate = CreateObject("MSXML2.XSLTemplate.3.0")
xslTemplate.stylesheet = xsl
Set Application("template") = xslTemplate
End If
Dim xslProc: Set xslProc = xslTemplate.createProcessor()
xslProc.input = bodyNode
xslProc.transform()
news_full = xslProc.output
Усилия по чтению, анализу и компиляции XSL-преобразования выполняются только один раз за все время жизни приложения.
Наиболее вероятный виновник
Если честно, я подозреваю, что наиболее вероятным виновником является stripHTMLtags
. Это звучит как целая нагрузка обработки строк, а производительность обработки строк VBScript низкая. Особенно плохо, когда код неправильно ориентирован на знание ограничений производительности обработки строк (например, чрезмерных и повторяющихся конкатенаций строк). Скорее всего, именно там встречается наиболее актуальный VBScript, который часто является причиной проблем с производительностью.