#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 среда вроде как затрагивается.
Комментариев нет:
Отправить комментарий