1f190833

После создания статической страницы ее


После создания статической страницы ее можно сжать с помощью gZip, а полученный сжатый файл передавать клиентам сайта вместо первичных данных. Нам только придется позаботиться о том, чтобы в случае внесения изменений в исходную информацию происходило автоматическое обновление соответствующего сжатого файла. Попробуем решить эту задачу. Допишем в наш output.inc следующую функцию (см. Листинг 4). Листинг 4. Добавление для output.inc. function CompareModifyDate(filename1, filename2) if InStr(LCase(Request.ServerVariables(<HTTP_ACCEPT_ENCODING>)), LCase(<gzip>))=0 then CompareModifyDate=1 else on error resume next Set fso = CreateObject(<Scripting.FileSystemObject>) Set File1 = fso.GetFile(filename1) Set File2 = fso.GetFile(filename2) if (File1.DateLastModified>File2.DateLastModified) or (File2.Size=0) then CompareModifyDate=1 else CompareModifyDate=2 end if Set File2 = Nothing Set File1 = Nothing Set fso = Nothing end if end function Данная функция предназначена для сравнения даты последней модификации двух файлов, имена которых передаются в качестве параметров. Одним из этих файлов будет файл с исходной информацией (имя файла - первый параметр функции), а вторым - сжатый файл (имя файла - второй параметр функции). В том случае, если исходный файл более новый или если сжатый файл имеет нулевую длину (например, его просто нет на диске), функция возвращает значение 1. Попробуем написать "самосжимающуюся" статическую страницу. Страницу test1.asp нужно переделать в test2.asp так, как показано в Листинге 5. Листинг 5. Самосжимаемая asp-страница <%@ LANGUAGE=>VBScript> %> <!-- #INCLUDE VIRTUAL=>/test/output.inc> --> <% ' Основная идея в том, чтобы проверить, является ли дата создания этого файла более поздней, ' чем дата создания сжатого файла. ' Если да, надо создать сжатый файл заново ' Если нет - то надо передавать клиенту существующий сжатый файл Response.Buffer = TRUE file=>test2> file=CreateTempFile(file) compare=CompareModifyDate(file&>.asp>,file&>.gz>) if CInt(compare)=1 then 'Создание нового содержимого и компрессия данных 'Здесь можно вставлять вызовы функции Write, с помощью которых 'формировать текст нашей <статической> страницы '''''''''''''''''''''''''''''''''''''''''''''''''''''' call Write(file,><html><head><title>Test< /title></head><body><table border='0'>>) color=>#d0fdc8> for i=0 to 1999 if color=>#d0fdc8> then color=>#9ef988> else color=>#d0fdc8> end if call Write(file,><tr>>) call Write(file,><td bgcolor='>+color+>'>Row <+CStr(i)+></td>>) call Write(file,><td bgcolor='>+color+>'>> +CStr(2000-i)+></td>>) call Write(file,></tr>>) next call Write (file,></table></body></html>>) '''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Компрессия данных call Compress(file) end if 'Удаление промежуточного файла call DeleteFiles(file&>.txt>) 'Отправка сжатых данных call Send(file) %> Из комментариев, которые вставлены в текст этой страницы, становится ясно, как происходит "самосжимание".К сожалению, написанная страница отслеживает только собственную актуальность, и этот код пригоден лишь для сжатия "статических" страниц. Если же используются динамически изменяемые данные, например при формировании прайс-листа или форума, придется вместо функции CompareModifyDate написать функцию, которая будет проверять необходимость обновления архивного файла, основываясь на данных, предназначенных для вывода на экран. АНДРЕЙ НИДЕНС - заместитель директора департамента информатики в Объединенном Грузинском банке. С ним можно связаться по адресу:  

Начало  Назад  Вперед