В параметрах любого компонента меню, вы можете увидеть следующую картинку.

По умолчанию параметры стоят в режиме совместимости, т.е. меню не кэшируется, учитываются права доступа.
По нашим предварительным оценкам, кэширование меню может дать в зависимости от проекта 15-35% уменьшение времени формирования страницы.
Обратите внимание, что включение кэширование дает наилучший результат, если вы используете простое меню, без проверки прав доступа и без подсвечивания пунктов меню в зависимости от параметров в ссылке.
Но мы предусмотрели и режим кэширования с учетом прав и с возможностью перечислить параметры, которые должны влиять на вариативность кэша.
У меня на ноутбуке на Корпоративном портале прирост на статической странице составил порядка 35%, что очень существенно. (не забываете, что первый хит будет полным, а только второй уже кэширован)
Алгоритм кэширования работает прозрачно для пользователей, т.е. при изменении пунктов меню или добавлении, кэш скидывается и обновляется.
Хочу попросить партнеров попробовать данный режим и сказать свое мнение и результаты.
Если практика окажется эффективно, мы сохраним режим и не исключено, что сделаем основным для простыв проектов, не использующих сложное меню и права доступа.
У нас есть небольшой проект, в котором в трех местах меню собирается из разделов инфоблоков. При этом на сервере даже с отключением кэширования все более-менее, но на ноутбуке (в Денвере) меню генерируется непростительно долго.
Провел эксперимент, выполняя действия пользователя, работая по пользовательской документации
Во всех .left.menu_ext.php вставил в него кусок кода отсюда .
Код вида (безо всяких дополнительных изысков):
<? // пример файла .left.menu_ext.php if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); global $APPLICATION; $aMenuLinksExt = $APPLICATION->IncludeComponent( "bitrix:menu.sections", "", Array( "ID" => $_REQUEST["ELEMENT_ID"], "IBLOCK_TYPE" => "books", "IBLOCK_ID" => "30", "SECTION_URL" => "/e-store/books/index.php?SECTION_ID=#ID#", "CACHE_TIME" => "3600" ) ); $aMenuLinks = array_merge($aMenuLinks, $aMenuLinksExt); ?>ускорение очень существенное!
На ноутбуке скорость генерации меню в первое нажатие и во второе различаются в 4-8 раз и соответствуют ситуации, когда мы принудительно кэшировали получаемые в .left.menu_ext.php данные.
Очень рад, что теперь и непрограммисты могу эффективно строить сайты с динамическим контентом в меню.
Действительно ценное обновление.
и прирос производительности будет еще больше. Особенно заметно если разделов в инфоблоке больше сотни.
if(is_array($arParams["MENU_CACHE_GET_VARS"])) { foreach($arParams["MENU_CACHE_TIME"] as $varname) {сдается мне, что это явный баг