Один из архитекторов на моей работе недавно прочитал руководство Yahoo! по передовым методам повышения производительности. где говорится об использовании заголовка Expires в далеком будущем для ресурсов, используемых страницей, таких как JavaScript, CSS и изображения. Идея состоит в том, что вы устанавливаете заголовок Expires для этих ресурсов на годы вперед, чтобы они всегда кэшировались браузером, и всякий раз, когда мы меняем файл и, следовательно, нам нужно, чтобы браузер снова запрашивал ресурс вместо использования его кеша, измените имя файла добавив номер версии.
Однако вместо того, чтобы включить это в наш процесс сборки, у него есть другая идея. Вместо того, чтобы менять имена файлов в исходниках и на диске сервера для каждой сборки (конечно, это было бы утомительно), мы собираемся подделать их. Его план состоит в том, чтобы установить отдаленные сроки действия указанных ресурсов, а затем реализовать два модуля HttpModules.
Один модуль будет перехватывать все потоки ответов наших страниц ASPX и HTML до того, как они будут отправлены, искать ссылки на ресурсы и добавлять параметр версии, который является датой последнего изменения файла. Другой HttpModule будет обрабатывать все запросы на ресурсы и просто игнорировать версию адреса. Таким образом, браузер всегда запрашивает новый файл ресурсов каждый раз, когда он изменяется на диске, даже не изменяя имя файла на диске.
Есть смысл?
Мое беспокойство связано с модулем, который переписывает поток ответа страницы ASPX/HTML. Он просто применит кучу Regex.Replace() к атрибутам "src" тегов <script>
и <img>
и к атрибуту "href" тегов <link>
. Это будет происходить для каждого отдельного запроса на сервере с типом содержимого "text/html". Потенциально сотни или тысячи в минуту.
Я понимаю, что HttpModules подключены к конвейеру IIS, но это должно добавить непомерную задержку времени, необходимого IIS для отправки HTTP-ответов. Нет? Что вы думаете?