Оптимизация, конечно, обширная тема и кеширование находится далеко не на первом месте, но кеширование статических ресурсов на мой взгляд вполне адекватный шаг на пути снижения загрузки на сервер:
- снижается кол-во запросов к серверу
- скорость загрузки страницы возрастает
Оба пункта безусловно важны.
Настроить кеширование статики можно через web.config. Например, нужно закешировать статику на 10 дней, тогда можно поступить следующим образом: добавить в раздел system.webServer следующее
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="10.00:00:00" />
</staticContent>
Можно использовать в качестве cacheControlMode параметр UseExpires,
<clientCache cacheControlMode="UseExpires" httpExpires="Sun, 03 Apr 2011 13:15:29 GMT"/>
но тогда для него задаётся конкретное время, что весьма неудобно: придётся периодически обновлять web.config. Плюс ко всему заголовок expires, генерируемый в этом случае, считается устаревшим. Преимущество UseMaxAge в том, что можно указывать относительное время.
Если ресурсы закешированы с помощью max-age или expires, то браузер не будет посылать запросов к серверу (конечно, если в нём не выключено кеширование), а чем меньше запросов, тем меньше нагрузка на IIS и, как следствие, тем быстрее он отвечает на действительно важные запросы.
Иногда кешировать нужно не все статические ресурсы, для этого можно использовать элемент location с указанием папки, содержимое которой не надо кешировать, или имени файла. В этом случае можно к существующей записи о кешировании статики добавить следующее:
<location path="папка1/папка2">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="0.00:00:00" />
</staticContent>
</system.webServer>
</location>
В этом случае браузер будет посылать на сервер заголовок If-Modified-Since, IIS будет сравнивать время последнего изменения статического файла с содержимым заголовка и, если они равны, выдавать в ответ статус код 304, что означает, что файл не изменялся. Т.е. в таком случае запросы будут посылаться браузером к серверу и ресурс будет обновляться в случае изменения.
В случае использования max-age и expires есть весьма неочевидный нюанс: кол-во запросов к серверу за статическими ресурсами будет напрямую зависить от времени, на которое они кешируются. Для статических ресурсов, которые не планируется изменять в ближайшем будущем я бы рекомендовал выставлять интервал в 365 дней.
Используя кеширование статики на одном из проектов удалось уменьшить количество вторичных запросов к странице с 90 до 5, а сайт визуально стал подгружаться мгновенно.