Страницы

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

воскресенье, 12 января 2020 г.

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

#aspnet_mvc


Здравствуйте, я возможно сейчас один глупый вопрос задам, но все же:
Мне не совсем понятно за счет чего страница закэшированная на уровне контроллера(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.
Спасибо.    


Ответы

Ответ 1



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

Ответ 2



Попробую на свой вопрос что ли ответить: Кэш Jit-компилятора хранит IL сборку (результат первого этапа компиляции) (.net исходник -> IL assembly) Кэш [OutputCache] атрибута это готовый HTML, который не меняется определенное время (результат второго этапа компиляции) (IL assembly + .aspx/.cshtml views -> html page) Вроде так, если ничего не напутал. Т.е при jit компиляции CLR среда вроде как затрагивается.

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

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