
Готовы и частично опубликованы следующие обновления: Главный модуль, Информационные блоки, Форум, Рекламы, Торговый каталог, Интернет-Магазин, Обучение, Опросы, Валюты.
На очереди - Техподдержка, Управление структурой и визуальный редактор.
До релиза 5.1 осталось уже недолго.
Про функциональные изменения в модулях смотрите в истории версий:
эта страница ведется автоматически и представляет описания после появления обновления в системе SiteUpdate.
В своем сообщении я остановлюсь именно на вопросах производительности продукта.
Главный модуль 5.1.4:
В главном модуле переработаны целый ряд методов и функции. Код стал еще более оптимизированным для больших нагрузок и виртуальный хостинг.
В дополнение к имеющимся механизмам управляемого КЭШа добавился механизм кэширования графических файлов из библиотеки изображений (таблица b_file).
Рекомендуется включать этот механизм на виртуальных хостинга для уменьшения числа SQL запросов к удаленной или медленно базе данных. На выделенных машинах этот тип кэширования заметного результата может не дать. Рационально использовать такой кэш, если число файлов не очень большое (не больше 10 тысяч) или на странице выводиться одновременно много элементов.
Для этого типа информации использована интересная методика кэширования с разделением хранилища на секции. Это позволяет уменьшить число файлов и сделать кэш эффективней. Причем данные кэшируются с опережением, что даже при включении позволяет уменьшить число запросов. Но отметим, что по умолчанию этот механизм выключен, так как нет пока возможности определять динамически число файлов в b_files во время работы, а проектов с большим числом файлов возможно создание объемного кэша. Но мы рекомендуем попробовать включить кэширование на виртуальном хостинге и индивидуально для свое проекта определить применимость данного инструмента.
Включается кэширование константой:
define("CACHED_b_file", 3600);
Напомню все константы и значения по умолчанию:
define("CACHED_b_lang", 3600);
define("CACHED_b_option", 3600);
define("CACHED_b_lang_domain", 3600);
define("CACHED_b_site_template", 3600);
define("CACHED_b_event", 3600);
define("CACHED_b_agent", 3600);
define("CACHED_menu", 3600);
define("CACHED_b_file", false);
Информационные блоки 5.1.2:
Добавлена поддержка управляемого кэша для типов информационных блоков и значений свойств типа "список". Константы CACHED_b_iblock_type и CACHED_b_iblock_property_enum соответственно.
По умолчанию кэширование включено и значения следующие:
define("CACHED_b_iblock_type", 3600);
define("CACHED_b_iblock_property_enum", 3600);
В функциях работы со списками элементов в массив возвращаемых полей элементов добавлено поле PROPERTY_*. Используется только в Инфоблоках+ и только при отсутствии группировки списка. Использование этого поля позволяет избежать дополнительных запросов к БД при вызове метода _CIBElement::GetProperties.
Также если в массиве возвращаемых полей элементов встречаются поля DETAIL_PAGE_URL, SECTION_PAGE_URL и LIST_PAGE_URL, то в случае отсутствия группировки список полей автоматически расширяется полями необходимыми для макроподстановок элементов пути.
Существенно оптимизированы некоторые компоненты.
Модуль рекламы 5.1.0:
Учитывая, что на странице реклама вызывается многократно, модуль рекламы был заметно оптимизирован.
Оптимизирован сбор статистики. При большом числе баннеров теперь выполняется только один набор запросов по сохранению данных, вместо отдельного набора ранее для каждого баннера.
В настройках модуля добавлена возможность отключить ограничения контрактов при показе баннеров. Если вы не используете контракты, включите эту опцию, это упростит запросы и исключит запросы на запись ненужных вам данных;
В параметрах баннера добавилась опция "Фиксировать число показов баннера". У баннеров, для которых подсчет количества показов не имеет принципиального смысла, рекомендуется отключить данную опцию; Это исключит запросы на запись статистики в базу данных.
Использован Autoload, значит для PHP5 есть предпочтения.
Интернет-Магазин и Торговый Каталог 5.1.Х:
В обоих модулях реализована поддержка Autoload что позволяет получит заметный выигрыш при использовании PHP5.
Оптимизированы компоненты магазина.
Оптимизирован и сделан более универсальным компонент показа цен данного товара. Для показа цен рекомендуется пользоваться компонентом "Цены товара" (price.php).
Оптимизирована функция выборки скидок и другие наиболее используемые методы модуля.
Рекомендуется пользоваться следующими методами:
CCatalogGroup::GetListEx - для выборки типов цен с / без фильтра по группам пользователей, которые могут видеть (покупать) по ценам данного типа
CCatalogGroup::GetGroupsPerms - для выборки кодов типов цен, которые может видеть и / или покупать член данных групп пользователей (метод использует кеширование)
CCatalogGroup::GetListArray - для выборки массива всех типов цен (метод использует кеширование)
CPrice::GetListEx - для выборки цен товара с / без фильтра по типу цены и группам пользователей, которые могут видеть (покупать) данный тип цены
CCatalogDiscount::GetDiscount - для выборки скидок на данный товар (метод использует кеширование)
CCatalogProduct::CountPriceWithDiscount - вычисление реальной цены по цене из каталога и результату метода выборки скидок (не пораждает запросов к базе)
В модуле включена поддержка функционала autoload. Так что не забывайте что PHP5 уже предпочтительнее.
По умолчанию кэширование включено.
Ключи управления КЭШем:
* если определена константа CURRENCY_SKIP_CACHE и установлена в True, то валюты кэшироваться не будут
* если определена константа CATALOG_STACK_DISCOUNT_LENGTH и установлена в целое число, то она определяет длину LRU кэша скидок (По умолчанию 100).
* если определена константа CATALOG_STACK_ELEMENT_LENGTH и установлена в целое число, то она определяет длину LRU кеша групп, в которых находится товар (По умолчанию 200)
* если определена константа CATALOG_SKIP_CACHE и установлена в True, то каталог кэшироваться не будет
В завершении про этот модуль пример использования LRU КЭШа.
Класс CStackCacheManager. Объект stackCacheManager создается автоматически. Можно установить длину кеша методом SetLength(entity, length), где entity - некий код сущности (например, catalog_discount для скидок), а length - длина. Можно проверить существование записи для данной сущности методом Exist(entity, key), где entity - некий код сущности, а key - код записи. Если запись с кодом key у сущности entity существует, то ее можно получить методом Get(entity, key). При этом запись в кеше перемещается на первое место. Если записи нет, то ее можно добавить методом Set(entity, key, value). При этом запись ставится в кеше на первое место, а последняя запись убирается, если кеш перерос свою длину. Методом Clear(entity) можно очистить все записи данной сущности.
Пример:
Нам нужно получить значение для ключа "zzz" сущности "my_entity"
$GLOBALS["stackCacheManager"]->SetLength("my_entity", 50);
if ($GLOBALS["stackCacheManager"]->Exist("my_entity", "zzz"))
{
$arResult = $GLOBALS["stackCacheManager"]->Get("my_entity", "zzz");
}
else
{
// Вычисляем $arResult, запрашиваем базу и все такое
$GLOBALS["stackCacheManager"]->Set("my_entity", "zzz", $arResult);
}
Опросы 5.1.0:
В управляемый кэш добавлены группы опросов, права доступа и привязка групп к сайтам. Время кэширования (в секундах) можно изменить с помощью константы VOTE_CACHE_TIME. По умолчанию время кэширования равно 1 часу. Для отключения управляемого кэша следует установить константу VOTE_CACHE_TIME в значение false;
Оптимизиран метод подключения модуля на странице;
Оптимизирован повторный вызов функций;
В общем, стало заметно быстрее.
По мере готовности буду публиковать дополнительные материалы
