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