Output caching рассказывает сервера провести вынесенного результат страницы (в виде строки) в памяти сервера - готова для следующего запроса. Это означает, что (например) любые запросы к базе данных или файлам, необходимые для заполнения данных для страницы, не должны выполняться для дальнейших запросов, пока кеш остается в силе, а также (небольшие) накладные расходы на создание представления и любых компонентов или обертоны. HTTP-кеширование сообщает клиенту и/или нисходящим прокси-серверам, что содержимое останется действительным в течение указанного периода - и его можно обслуживать из локального или прокси-кеша без необходимости повторной заявки.
Следует отметить, что дочерние действия могут применяться OutputCache, что позволяет вам кэшировать части страницы, которые не меняются между пользователями, в то же время позволяя индивидуальную настройку каждой страницы на всех пользователях. Это иногда называют «Кэширование дыры» (где «дыра» не изменяется, а остальная часть «пончика» вокруг нее).
Существует еще одна концепция «кэширования пончиков», где большая часть страницы кэшируется небольшой частью (отверстие), но это еще не поддерживается из коробки в ASP.NET MVC.
OutputCacheAttribute позволяет указать «местоположение» - клиент, нисходящий сервер, сервер и клиент - что позволяет удобному методу указать кэширование вывода клиента и сервера в одном месте, но каждый из них может управляться независимо.
Спасибо за отличное объяснение –