Страницы

Поиск по вопросам

суббота, 9 марта 2019 г.

Output caching и кэширование на уровне Jit компиляции

Здравствуйте, я возможно сейчас один глупый вопрос задам, но все же: Мне не совсем понятно за счет чего страница закэшированная на уровне контроллера(OutputCache) должна обрабатываться быстрее , чем любая другая страница по дефолту кэшируемая Jit компилятором.По поводу этого в одной книге было следующее: [OutputCache] is actually implemented using the core ASP.NET platform’s output-caching technology, which means that if there’s a cache entry for a particular URL, it will be served without invoking any part of ASP.NET MVC Но разве кеш Jit компилятора это не уровень веб-сервера?И все запросы, кроме первого , должны быть так же обработаны напрямую, не затрагивая ASP.NET MVC. Спасибо.


Ответ

Вы пытаетесь сравнить два механизма, работающих на абсолютно разных уровнях: JIT-компилятор выполняет компиляцию IL-кода при первом обращении приложения к этому коду. После этой операции он сохраняет скомпилированный код в памяти, чтобы не выполнять компиляцию при повторном обращении. Это верно не только для ASP.NET Web-приложений, но и для всех .NET-приложений (если они не были заранее скомпилированы в native code, например с помощью NGen). Атрибут OutputCache обеспечивает кэширование всех, либо некоторых действий контроллера. Это значит, что после первого обращения приложения к действию контроллера, результат этого действия будет закеширован, согласно параметрам атрибута. По умолчанию, он будет сохранен на Web-сервере, всех proxy-серверах (если таковые имеются) и в браузере пользователя. При последующих обращениях приложения к этому действию, оно не будет вызываться, а Web-сервер будет сразу возвращать результат из своего кэша. Такое кэширование (как вы указали в вопросе) реализовано платформой ASP.NET и характерно именно для Web-приложений. Отсюда и ответ на ваш вопрос: ВЕСЬ код приложения компилируется по мере обращения к нему и сохраняется JIT-компилятором. Но это всего лишь код. Атрибут OutputCache обеспечивает кэширование результата выполнения этого кода, за счет чего код не будет вызываться повторно. Поэтому, при использовании [OutputCache] и достигается выигрыш в скорости.

Комментариев нет:

Отправить комментарий