14 декабря прошел партнерский семинар нашей компании. Огромное спасибо всем, кто приехал и принял участие в этом мероприятии. Всего на семинаре присутствовало 180 человек.
Как мы и обещали, это был технологический семинар. Мне кажется, в первых четырех докладах от нашей компании удалось детально и подробно рассказать о проделанной работе по выпуску 5.1 и о ближайших планах по выпуску версии 6.0.
Огромный интерес вызвала презентация Алексея Кирсанова по компонентам 2.0 В результате обсуждены даже было принято решение выпустить поддержку в ядре для новых компонент с несколькими примерами до завершения работы над визуальными инструментами, чтобы партнеры получили возможность приступить к изучению и подготовке своих компонент в новых проектах как можно раньше. (и как выяснили на семинаре, чтобы людям было чем заняться на новогодних праздниках )
С большим интересом все слушали Антона Титкова из компании "Консультанты ТАГО" по юридическим вопросам. Жаль, нет презентации. Но надеюсь, мы в скором времени представим планируемые для публикации комплекты договоров для партнеров.
Много было вопросов по партнерской программе. Но надеюсь, все вопросы удалось разрешить.
Если вопросы будут, вы всегда можете уточнить их в форуме или у нас по телефонам.
Очень приятно было видеть, что доклады выступили только катализатором процесса обсуждения и в перерывах и на фуршете все активно общались друг с другом, решали вопросы, заключали союзы и планировали новые проекты.
Очень интересно было нашим разработчикам пообщаться с партнерами, услышать их пожелания, мысли и планы. Уже вечером попивая чай Максим и Алексей выписывали какие-то идеи, которые планируют реализовать в продукте в новых версиях...
Мы по настоящему вдохновлены сильнейшим положительным настроем, который исходит от наших партнеров и клиентов! Ваши замечательные отзывы и добрые слова в наш адрес, конструктивность в обсуждении вопросов, вдохновляют нас работать и покорять новые вершины. Спасибо всем огромное!
Надеемся, что подарки вам понравились, а музыкальный подарок вам будет приятно слушать за компьютером во время работы.
Только вчера отгрузили последние 17 коробок из предыдущего тиража, сегодня поступила часть новой партии. Учитывая, что тираж заказывался несколько месяцев назад, такой точностью можно восхищаться.
Но в этот раз тираж и большой и тяжелый, много полиграфии пришло.
Давно нас просили провести отдельную конференцию для разработчиков, чтобы можно было поговорить о технике вопросов.
Мы решили провести специальное однодневное мероприятие, предназначенное в первую очередь для партнеров и разработчиков, для всех тех, кто уже знаком с продуктом и работает с ним активно.
Участие в семинаре бесплатное. Дата: 14 декабря 2006 г. Время: 12:00 – 22:00 (фуршет c 19:00 до 22:00) Место: Останкинский парк, ресторан «О кино»
На семинаре мы расскажем о планах на будущее, о новых возможностях продукта «Битрикс: Управление сайтом 5.1» и наверное 6.0 С , обсудим инфоблоки+ и новые Компоненты 2.0, поговорим о модулях, которые будут выпущены в самое ближайшее время, о программе сертификации партнеров на 2007 год. Вы сможете напрямую пообщаться с разработчиками «Битрикс: Управление сайтом», обсудить планы развития продукта, принять участие в конкурсе для разработчиков. В завершении семинара вас ждет фуршет.
В пятницу, 1 декабря, у нас состоялось очередное коллективно собрание по утверждению технологии "Компонент 2.0".
Мы практикуем такую форму обсуждений, когда в большой комнате собираются разработчики, поддержка и маркетинг, и обсуждают обновления, новый функционал, планируемые изменений, технологические предложения...
Слово дается обычно тому человеку, который разрабатывал решение или является проводником идеи. Иногда несколько человек выступают, если работали вместе. Компьютер разработчика подключаем к проектору и...
Например, если новый модуль показывается всем, разработчик рассказывает, как он будет работать, как пользоваться интерфейсом, какие планы по доработкам. И самое главное в таких обсуждениях, на мой взгляд, организовать рабочее конструктивное обсуждение. Потенциал коллектива огромен! Мы все по-разному воспринимаем и обрабатываем информацию и, высказывая свое мнение, или просто озабоченность, мы помогаем проявиться мнениям и идеям других. Конструктивное обсуждение помогает найти наиболее правильные и взвешенные решения, отметить заслуги людей и всем по настоящему осознать объемы и масштабы выполненной работы.
Основной темой нашего обсуждения в пятницу были "Компоненты 2.0". Проект, который давно готовится, неоднократно обсуждался в небольших рабочих группах и вот прототип дозрел до презентации его всей компании
Выступать предстояло Юре Тушинскому, технический директор компании, и Алексею Кирсанову, ведущему разработчику нашей компании.
13 декабря в рамках "Платформы-2007" в Москве пройдет круглый стол «Как заработать деньги на разработке программного обеспечения».
В круглом столе примут участие: Александр «Саша» Галицкий, Михаил Елашкин, Феликс Мучник, Сергей Рыжиков.
Если вы занимаетесь бизнесом и ваш бизнес связан с разработкой ПО, то рекомендую посетить как круглый стол, как и вообще побывать на Платформе. Если вы работаете как аутсорсер или увлеклись "идеей" государства по поводу аутсорсинга - приходите, мы вам вправим мозги.
Кто не знает, напомню, что Платформа – основное технологическое мероприятие Майкрософт. На конференции будет 3000 человек со всей России. 40% - разработчики (а также архитекторы, руководители), 40% - ИТ-профессионалы (администраторы, руководители ИТ-служб), 20% - люди уровня CIO.
Ура! Мы стали "Лауреатами Премии Рунета-2006" в номинации "Технологии и Инновации"!
Я искренне поздравляю всех сотрудников нашей компании с этой наградой! Это большое достижение стало результатом прекрасной работы всего коллектива. Я всех вас люблю!
Только что приехал с награждения. Немного фотографий Все официальные новости будут завтра.
В сети активно обсуждается сходство дизайна Эльдорадо с дизайном западного проекта http://www.bestbuy.com/
Причем все шишки валятся на QSoft, мол, делали они и заимствовали дизайн тоже они. Но, на мой взгляд, все критики не смотрят в суть вещей, банально полагая, что QSoft может принимать решение за компанию с оборотом почти в 4 миллиарда баксов.
Все, кто делал сайты для более-менее крупных компаний, понимают, что в компаниях такого размера, с оборотом, с сеткой в 1000 магазинов, с кучей уровней утверждения решений... решение по дизайну основного сайта принимаются очень и очень тяжело, причем на самом верхнем уровне.
Ну давайте подумаем, что вообще происходит на рынке. Но вначале посмотрим в историю.
PR-директор «Эльдорадо» Тимофей Суровцев комментировать рестайлинг сети отказался, пообещав рассказать обо всем в четверг. Представители обслуживающего «Эльдорадо» рекламного агентства Aegis Media/OKS от комментариев также отказались.
Участники рынка отмечают, что новая цветовая гамма «Эльдорадо» почти полностью совпадает с цветами немецкой Media Markt, первые магазины которой должны открыться в России до конца этого года. «Эльдорадо» готовится к приходу конкурента»,- констатирует топ-менеджер крупной сети. Напомним, обе сети работают в формате жесткого дискаунтера.
«Эльдорадо» всегда использовало наиболее интересные рекламные идеи Media Markt, известен случай, когда «Эльдорадо» в точности скопировало их рекламный ролик»,- рассказывает PR-директор сети «Мир» Елизавета Тотунова. Рестайлинг «Эльдорадо» позволит сети после выхода на российский рынок Media Markt использовать потенциал немецкой сети, заключает она.
Первые российские магазины Mediamarkt откроются 2 декабря в "Рамсторах" на проспекте Вернадского и Правобережной улице в Москве. Как рассказал Ъ источник, знакомый с планами немецкой сети, специально для России сеть изменила корпоративные цвета с красно-белых на малиново-белые. В новых цветах уже оформлен и российский сайт ритейлера. "В других странах, где работает Mediamarkt, цвета брэнда останутся прежними. В России к изменению корпоративной расцветки в Mediamarkt прибегли, чтобы дистанцироваться от своего российского конкурента – 'Эльдорадо', который полностью копирует их стиль",– говорит собеседник Ъ. Информацию о смене корпоративных цветов для российского Mediamarkt подтвердила и глава российского представительства Metro Group Юлия Белова.
Вы видите, что такие решения принимаются осознанно и исполнители не дадут вам комментариев. На войне как на войне. Нет уже детских игр, есть обороты, проценты роста, динамика, акции. Задержка для конкурента на 1-2 года с выходом на рынок - это огромное состояние для одних и убытки для других.
Так что не будем ждать комментарии от QSоft-а. Уверен, они в бумагах о неразглашении зарылись по самые уши И не даст комментариев Эльдорадо.
Так что я думаю, что стоит нам откинуть эмоции и посмотреть на событие другими глазами.
Является ли BestBuy конкурентом для Эльдорадо или это только заимствованная успешная идея - рассуждать можно сколько угодно.
Фактически, в Интернете началась конкурентная война крупнейших мировых ретейлеров. Игроки соревнуются уже не только в офлайне, но и выбирают для себя конкурентов в Интернете и готовятся к длительным боевым действиям.
Сегодня заглянул на Сотфкей.Ру, посмотреть как идут у нас дела с продажами в этом месяце. По заказам то видно, что дела идут просто замечательно, но хотелось увидеть сумму продаж и убедиться, что запланированные темпы роста сохраняются.
На российском Софткее мы уже больше года в лидерах продаж стоим по продуктам В начале боролись с Касперскими, но уже довольно давно по продукту обгоняем. http://softkey.ru/catalog/rating.php?flt_PERIOD=360
В оборотах по компании мы уступаем еще Microsoft и Касперским
Удивительно, что до сих пор ключевой вопрос для этой аудитории - это регистрироваться или работать подпольно. Никак не хотят понять, что основные деньги можно заработать именно на юридических лицах. А для юридического лица очень невыгодно заключать договора с частными лицами. Это фактически, брать людей на работу и платить за них налоги. Иначе компания не может заплатить частнику деньги. Остается только нелегальная работа и оплата. А следовательно, на этом фрилансен собираем самых прижимистых и необязательных клиентов, скажем так.
Фрилансер должен понять, что нужно не пытаться сэкономить несчастные 6% налогов, работая нелегально. Намного ВЫГОДНЕЕ зарегистрироваться частным предпренимателем, заключать правильные договора, спокойно увеличить ценник за свои услуги за счет легальности для компании, снять риски невыплаты, снять риски клиента на неправильную передачу имущественных прав, платить с поступлений 6% налогов или 15% с прибыли и жить себе нормально, не опасаясь стука в дверь и наездов.
А то, что увеличить ценник при безналичной оплате можно просто в два раза - это совершенно точно.
Вообще, проекту Free-lance нужно изменять статус и отношение к фрилансерам с нелегальных черных частников, на нормальных частных творческих предпринимателей. Возможно, стоит проекту Free-lance сделать у себя поддержку в интерфейсе типа фрилансера (Частное лицо или частный предприниматель) и правильных юридических лиц показывать везде выше и лучше, в общем, всячески поддерживать.
А там глядишь, корпоративщики перестанут бояться, что их частник "кинет" и начнут нормальные договора подписывать и платить безналом. Отличная была бы рекламная кампания
Ну что, можно сказать, что новая версия 5.1 перешла из состояния бета-версии в релиз. Клиенты устанавливают, больших проблем пока не замечено. Идет сборка нового дистрибутива. Готовится официальный тест по нагрузочному тестированию.
Выпуском 5.1 мы завершили первый этап оптимизации, впереди еще ждет статистика, поиск и ряд других интересных идей...
Как я уже сказал, мы планируем провести масштабное нагрузочное тестирование. Но в рамках работы мы сами проводили тесты, о которых можно немного рассказать.
Начиная с версии 5.1.4 главного модуля, появились расширенные инструменты для отладки производительности компонент и всего сайта в целом.
Все уже знают параметры для страницы:
show_page_exec_time=Y - Выводит общее время исполнения страницы
show_include_exec_time=Y - выводит время исполнения каждой из компонент. В новой версии ядра еще выводится время формирования меню.
Появился еще один интересный параметр: show_sql_stat=Y
Этот параметр работает в корреляции с вышеперечисленными параметрами и выводит число SQL запросов, общее время исполнения SQL запросов и позволяет проанализировать сами запросы, как на всю страницу, так и на отдельно взятый компонент или меню.
Пример:
На этом рисунке представлена статистика SQL запросов для компоненты новостей на нашей главной странице. Выводится она 2 запросами. Общее время работы компоненты составляет 0.067 с. Время SQL запросов 0.0211 с или 31.49% от времени работы компоненты (%помогает выявлять ресурсоемкий PHP код или тяжелые запросы). Возле каждого запроса указывается, сколько раз аналогичные запросы повторялись с вариацией параметров. В статистике перечисляется, откуда вызван запрос и с какими параметрами.
Следующий пример со страницы блога. Запросов уже 5 штук. Но они потребляют меньше 7% от времени компоненты, которое составляет 0.0206 с. Важно, что само по себе число запросов не играет решающей роли, важнее время выполнения запросов.
Практика использования инструментария позволит: * быстро выявлять больные участки сайта * находить ошибки программирования, в которых компонент генерирует очень много запросов или мало, но медленных запросов (поддержкой были выявлены случаи, когда модифицированный партнером компонент вместо 3 наших запросов генерировал больше 4 тысяч и убивал сервер наповал) * выявлять особенности и недостатки конфигурации SQL сервера или отдельных таблиц (бывали случаи, когда обычный запрос на отдельном проекте работаел в сотни раз медленнее. Причина был в MySQL и лечилось все оптимизацией проблемной таблицы) * помочь партнерам указать нам на неоптимальные компоненты или проблемные участки, чтобы переработать их и улучшить производительность (чего греха таить, ряд компонент уже переписаны нами для нового дистрибутива, а некоторые находятся в работе)
Мы планируем и дальше развивать инструментарий отладки. Уже есть понимание, в каком направлении и как это лучше представить отладку в интерфейсе панелей, чтобы не вводить параметры руками.
Готовится к выпуску ряд завершающих обновлений по продукту в плане подготовки к выпуску 5.1.
Готовы и частично опубликованы следующие обновления: Главный модуль, Информационные блоки, Форум, Рекламы, Торговый каталог, Интернет-Магазин, Обучение, Опросы, Валюты. На очереди - Техподдержка, Управление структурой и визуальный редактор.
До релиза 5.1 осталось уже недолго.
Про функциональные изменения в модулях смотрите в истории версий: http://www.bitrixsoft.ru/sitemanager/versions.php эта страница ведется автоматически и представляет описания после появления обновления в системе SiteUpdate.
В своем сообщении я остановлюсь именно на вопросах производительности продукта.
Главный модуль 5.1.4:
В главном модуле переработаны целый ряд методов и функции. Код стал еще более оптимизированным для больших нагрузок и виртуальный хостинг.
В дополнение к имеющимся механизмам управляемого КЭШа добавился механизм кэширования графических файлов из библиотеки изображений (таблица b_file).
Рекомендуется включать этот механизм на виртуальных хостинга для уменьшения числа SQL запросов к удаленной или медленно базе данных. На выделенных машинах этот тип кэширования заметного результата может не дать. Рационально использовать такой кэш, если число файлов не очень большое (не больше 10 тысяч) или на странице выводиться одновременно много элементов.
Для этого типа информации использована интересная методика кэширования с разделением хранилища на секции. Это позволяет уменьшить число файлов и сделать кэш эффективней. Причем данные кэшируются с опережением, что даже при включении позволяет уменьшить число запросов. Но отметим, что по умолчанию этот механизм выключен, так как нет пока возможности определять динамически число файлов в b_files во время работы, а проектов с большим числом файлов возможно создание объемного кэша. Но мы рекомендуем попробовать включить кэширование на виртуальном хостинге и индивидуально для свое проекта определить применимость данного инструмента.
Добавлена поддержка управляемого кэша для типов информационных блоков и значений свойств типа "список". Константы 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;
Оптимизиран метод подключения модуля на странице; Оптимизирован повторный вызов функций;
В общем, стало заметно быстрее.
По мере готовности буду публиковать дополнительные материалы
С сегодняшнего дня мы открываем на сайте бесплатную учебную и сертификационную программу для пользователей и разработчиков. Подробности в официальном пресс-релизе на сайте: http://www.bitrixsoft.ru/sitemanager/news/15626.php
Каждый учебный курс содержит цикл уроков, flash-ролики, примеры настроек продукта, тесты для самопроверки и итоговые сертификационные тесты.
Самый большой курс "Администрирование системы (BX-ADM002)" содержит на сегодня 104 урока и более 100 проверочных вопросов. В печатном варианте курс занимает более 250 страниц.
Есть курсы, предназначенные именно для разработчиков. Партнерская сеть "Битрикс" уже насчитывает более 700 компаний, и нашим партнерам требуется инструмент быстрого и системного обучения своих специалистов.
Как я уже сказал, обучение бесплатное и проводится на нашем сайте. С начала тестирования программы сертификации партнерам и клиентам компании выдано уже порядка 250 сертификатов.
В дальнейшем планируется открыть еще несколько курсов для пользователей, для маркетологов по Веб-аналитике, а так же ряд сложных курсов по архитектуре продукта для разработчиков крупных проектов...
Так же планируется открытие очных учебных курсов с партнерами компании, где можно будет не только поучиться, но и просто пройти сертификацию и получить бумажные сертификаты.
Отмечу, что вся учебная и сертификационная программа реализована на модуле "Обучение и Тестирование", который входит в стандартную поставку Битрикс, редакций "Эксперт" и "Бизнес".
Разработала проект компания QSoft, наш опытный партнер, который специализируется на крупных проектах. Используется редакция Бизнес.
Сказано в новости про проект было уже много, про SAP/R3, про сроки.
Но что меня удивляет, так это лавина заказов, которая посыпалась на голову Эльдорадо сразу после открытия. Временами по 2 заказа в минуту валится. Народа на сайте по 200 человек онлайн.
Конечно, это потому, что есть что покупать. Причем каталог содержит только позиции, которые сегодня доставляются по Москве и Московской области. А что же будет дальше, когда они откроют всю Россию. А такие планы есть, проектирование было сделано с учетом этой задачи и уверен, долго себя Эльдорадо ждать не заставит.
Но одного каталога недостаточно было бы. Вот что значит реальный бизнес, у которого больше 1000 магазинов по России.
Кстати, они и к делу отнеслись торжественно и по взрослому. Интернте-магазин выделен в отдельную структуру как любой их магазин, с директором, штатом сотрудников и службой доставки. Причем у них супер план по продажам, аж... в первый год. И я верю, что они этот план выполнят
Приятно, когда продукт удовлетворяет задачам проектов такого размера и на сайте кипит жизнь и зарабатываются деньги. Приятно говорить с Эльдорадо и слышать их прекрасные отзывы о продукте и QSoft. Именно сейчас понимаешь, для чего делаешь продукт, строишь партнерские отношения и для кого все это нужно!
Когда вся компания занимается оптимизацией, все начинают оптимально думать И это касается каждого разработчика и каждого модуля.
Как же на практике проходит оптимизация?
Есть несколько направлений, в которых идет работа: * оптимизация кода * оптимизация запросов, числа запросов, цены запросов, объемов передаваемых данных * оптимизация архитектуры * уменьшение объемов исполняемого и компилируемого кода * поиск новых решений
Как я уже говорил, одна из задач по оптимизации заключалась в том, чтобы оптимизировать работу базовой версии продукта Старт. Про оптимизацию по SQL запросам я уже писал в первых постах. Результаты отличные. Стоит рассказать немного, как идет оптимизация кода.
Мы используем один из лучших профилировщиков для PHP xdebug
Продукт загоняется в профилировщик, запускается нагрузка на тестовый сайт и изучается, какие функции больше всего занимают в процентах времени исполнения.
Функции оптимизируются до тех пор, пока не оказываются "внизу" топа.
И так опять и опять, фактически неделями, повторяя после каждого цикла оптимизации того или иного модуля. Так избавляемся от лишних вызовов, где-то условия местами переставили и получили более оптимальное исполнение. Иногда логика функций сохраняется, но код реконструируется полностью. Это позволяет избавиться от ненужного наследия или просто посмотреть на код свежим взглядом.
Обычно оптимизация кода делается именно с включенных прекомпилятором PHP, чтобы исключить погрешность измерений, вносимую большим временем компиляции кода по отношению к времени исполнения самого кода.
Объем компилируемого кода и время компиляции кода так же является важным направлением оптимизации. В PHP5 появилась возможность загрузки кода только при первом факте использования ( __autoload )
Autoload позволяет подгружать только те файлы модуля, которые нужны для работы. Например, если пользователь открыл каталог товаров, то подключаются модули каталога и магазина. При этом подавляющее большинство функционала этих модулей в данном случае не нужно. Но при обычном подключении в PHP4 весь функционал подгружается и обрабатывается.
Если использовать Autoload, то никакие скрипты не подгружаются до первого использования их функционала. А так как в каталоге товаров нужен грубо говоря только класс корзины и (может быть) заказа, то остальные скрипты просто тихо лежат на диске.
Преимущества очевидны в данном случае, но только нужно соблюдать совместимость версий PHP4 и PHP5, а лучше даже единство кода.
В частности, такая методика впервые будет использована в ближайшем обновлении модулей Интернет-магазина и Торгового каталога. При тестировании выяснилось, что на каждом отдельном хите выйгрыш не просматривается, так как машина свободна. Но при максимальном нагрузочном тестировании эффективность Autoload составила порядка 20% по памяти и производительности. Что очень даже ощутимо для нагруженных проектов и виртуального хостинга.
Еще одна хорошая новость.
В ближайшее время появится новый класс кэширования (построенный, конечно, на стандартных классах кэширования), который эмулирует кэш баз данных LRU (Least Recently Used) http://en.wikipedia.org/wiki/Cache_algorithms
Цель появления такого КЭШа такова: некоторые данные могут иметь теоретически неограниченно большой размер, поэтому их полное кэширование не представляется возможным. Но в реальной жизни и на реальном сайте эти данные могут быть весьма ограничены и/или какие-то из этих данных будут более востребованы, чем остальные. Причем некоторые данные очень часто запрашивается на сайте.
Мы посчитали, что имеет смысл как-то кэшировать эти данные. Но так, чтобы кэш не оказался многомегабайтной длины (что очевидно не только не убыстрит, но и даже затормозит работу). LRU кэш является управляемым и имеет управляемый размер (настраивается для каждого кэшируемого объекта).
Если происходит запрос к кэшируемому объекту, то объект сначала проверяется в КЭШе. Если там уже есть необходимые данные, то они передвигаются в начало КЭШа и возвращаются без запросов и вычислений. Если данных в КЭШе нет, то они выбираются (и вычисляются) и добавляются в начало КЭШа. Если при этом КЭШ перерос ограничения по длине, то последний элемент из него вытесняется.
Таким образом кэш ограничен по размеру на случай очень большого числа данных в базе. Если данных окажется реально немного, то они будут полностью кэшированы. Если данных много, но одни из них запрашиваются чаше других, то высока вероятность, что часто запрашиваемые данные будут постоянно жить в КЭШе (так как из КЭШа при переполнении удаляются те данные, которые дольше всего не запрашивались).
Первоначально этот тип кэширования будет применен к некоторым объектам в каталоге. Например, к скидкам.
Но для данных, которых заведомо мало, лучше использовать управляемый кэш. В частности, в новом модуле валют вообще не будет возникать запросов к базе данных при использовании большинства функций. Управляемый кэш сейчас будет применяться и в инфоблоках для обработки наиболее частных операций.
Опять же в качестве примера, успешно оптимизирован модуль опросов. Кэшированы группы опросов, права доступа, сайты. Оптимизирован повторный вызов функций. Использование модуля существенно оптимизировано.
Оптимизированные модули, безусловно, отражаются на скорости работы публичных компонент и административных разделов сайта.
Ожидаем в ближайшее время обновление по Интернет-магазину, торговому каталогу, опросам, техподдержке, инфоблокам, главному модулю, форумам...
В систему обновлений поступила бета-версия главного модуля 5.1.3, модуля Управления структурой и Информационных блоков.
В это обновление вошли изменения интерфейса указанные в предыдущем моем посте (пока не вошло управление компонентами).
В главном модуле и модуле информационных блоков был проведен полный анализ кода и все «узкие» места были переписаны и оптимизированы, в результате чего скорость исполнения PHP кода была увеличена примерно на 20% (тест для главной страницы редакции «Старт» прекомпилированной версии).
Вот полный список изменений:
Главный модуль:
- Новая административная панель. Позволяет работать с сайтом в трех специализированных режимах: Публичный раздел, Панель управления и Режим редактирования сайта. - Оптимизирован код модуля. Увеличена производительность критических и часто используемых функций. - Исправлена ошибка экспорта шаблонов с папки, содержащей в пути пробелы. - Исправлена ошибка обработки папок с именем "0" ("ноль"). - Незначительные изменения
Управление структурой:
- Добавлена возможность переименования файлов и каталогов, а также управления доступом посредством контекстного меню на странице "Файлы и папки" - Исправлена ошибка некорректной обработки имен каталогов с символом "+" - Исправлена ошибка неправильного определения сайта при работе с несколькими сайтами Изменения в визуальном HTML редакторе: - Добавлена функция перехвата вставки текста из MS Word с возможностью его предварительной очистки. - Изменен диалог "Вставить из Word". Добавлена возможность установить уровень очистки от различных тегов. - Увеличено быстродействие, скорость реакции на различные события. - Вставка тега параграфа ("p") при нажатии кнопки Enter в Internet Explorer заменена на вставку тега переноса строки ("br"). - Исправлена ошибка сохранения данных при наличии на странице более двух визуальных редакторов - Исправлена ошибка, связанная с перекрытием одного редактора другим(некорректная установка Z-Index) в Mozilla Firefox при работе с двумя редакторами на странице - Исправлена ошибка сохранения аттрибута src у тегов "IMG" при его изменении через диалоговое окно вставки рисунка.
Информационные блоки: - Исправлена ошибка изменения элемента информационного блока при увеличении счетчика показов. - Исправлен формат представления значений числовых не множественных свойств в Инфоблоках+. - Улучшение производительности.
Но работы продолжаются. И сегодня мы расскажем об изменениях, которые произойдут в публичной административной панели с выпуском обновления главного модуля 5.1.3.
Сформировалась новая концепция: "режимы" работы с сайтом. Вводится три режима: просмотр публичного раздела, "живое" редактирование сайта, управление в административном разделе. Визуально режимы представлены закладками в панели управления.
Для удобства работы с административной панелью появилась возможность зафиксировать ее положение на экране. В этом режиме панель всегда видна в верхней области экрана. (Все примеры даны в середине экрана, чтобы показать позиционирование панели)
Одно из ключевых новшеств связано с изменением концепции работы с компонентами. Под "живым" редактированием понимается настройка параметров визуальных компонентов и включаемых областей без перехода в визуальный редактор, как ранее.
Безусловно, параметры компонент можно будет править и в визуальном редакторе. Но теперь, чтобы только изменить параметры компоненты не потребуется открывать визуальный редактор. Это так же позволит управлять компонентами, которые размещены в шаблоне дизайна.
Изменения в интерфейсе еще будут, следите за новостями
Сегодня мне пришлось дать комментарий для сайта http://www.securitylab.ru/ относительно новости связанной с нашей компанией.
"Серовский городской суд вынес обвинительный приговор по уголовному делу, возбужденному в отношении 23-летнего жителя г. Серова Игоря Ушакова, который вымогал деньги у руководства компании «Битрикс». Ушаков был признан виновным по статье 272 УК РФ «Неправомерный доступ к компьютерной информации» и по статье 163 УК РФ «Вымогательство». Ему назначено наказание в виде одного года лишения свободы с отбыванием наказания в колонии-поселении. Также хакеру придется выплатить штраф в размере 10 тыс. рублей. Это один из редких случаев, когда хакер получил реальный срок лишения свободы за компьютерные преступления."
Я процитирую свои комментарии, чтобы не вносить сумятицу разными изложениями:
«Эта история началась в конце 2005 года. Я получил по почте письмо от неизвестного, с утверждением, что он обладает исходной версией продукта «Битрикс: Управление сайтом» и за определенное вознаграждение готов не выкладывать ее в сеть.
С самого начала письмо вызвало много сомнений. Низкий уровень русского языка и мутное изложение мыслей - характерные черты для подобных авторов. Но в тексте постоянно путались технические термины, понятия сайт и сервер, и было непонятно, о чем идет речь. Но было совершенно очевидно, что мы имеем дело с банальным вымогателем. Вымогательство - это серьезное преступление и довольно тяжелая статья Уголовного кодекса. Ни одна фирма не может мириться с подобными проявлениями.
Мы обратились в ассоциацию «Русский Щит», которая занимается защитой наших авторских прав. По нашему мнению, чем бы ни руководствовался человек, он не должен переступать черту закона. Ассоциация «Русский Щит», в свою очередь, по установленной Законом РФ процедуре подключила к делу правоохранительные органы.
Многим кажется, что Интернет - среда полной анонимности и именно это дает им ощущение безнаказанности. Но для специалистов все имеет значение, и каждый шаг оставляет следы. И что немаловажно, все компании, включая и западные, готовы оказывать помощь в поиске преступников.
Мы установили, что неизвестный смог получить доступ к дистрибутиву через ошибку в операционной системе сервера провайдера. Мы выяснили очень много о неизвестном и собрали массу доказательств, которые передали в правоохранительные органы. И надо отдать должное отделу «К», они оперативно отрабатывали все поступающие к ним материалы и версии. В результате совместных действий нескольких организаций были собраны неопровержимые доказательства вины неизвестного. Как мы потом узнали, вымогателем оказался Игорь Ушаков, житель г. Серова под Екатеринбургом.
Сотрудниками милиции Игорь был задержан через несколько дней и дал признательные показания. Следствие собрало неопровержимые доказательства вины Ушакова. На суде Ушаков отказался от ранее данных признательных показаний и свою вину отрицал. Несмотря на это в ходе судебных заседаний вина вымогателя была полностью установлена.
Без сомнения, появится масса версий произошедшего. Особенно относительно сценария расследования и поимки преступника. Но все это не имеет значения, т.к. каждый из нас должен понять, что именно он выбирает, какой следующий шаг сделать, на какую дорогу встать».
В режиме бета-версии стали доступны обновления еще под трем модулям: информационные блоки, форум, управление структурой сайта (визуальный редактор).
Форум:
Новые его возможности можно было всю эту неделю видеть на нашем сайте. Это, конечно же, приватные сообщения и "антимат" (хотя с этим на нашем сайте и раньше проблем не возникало), ну и многое другое. Чтобы все заработало в полную силу, необходимо либо использовать наши стандартные компоненты, либо модифицировать кастомизированные.
Полный список изменений: - Добавлена новая возможность отправлять личные сообщения зарегистрированным посетителям форума. Работа с сообщениями осуществляется на странице "Личные сообщения", где можно написать, прочитать, удалить письмо в корзину или сохранить его в одной из настраиваемых папок. При получении нового личного сообщения, пользователю приходит уведомление по E-Mail. Для персональных сообщений в настройках модуля форума можно установить лимит по максимальному количеству личных сообщений в ящике - Добавлен механизм фильтрации нецензурных слов. Фильтр основан на работе словаря нецензурных слов и словаря транслитерации (правил всевозможного написания сивмолов). Также есть возможность поиска и замены нецензурных слов на основе регулярных выражений. При установке будут добавлены русский и английский словари, чтобы включить фильтр необходимо установить соответствующий флажок в настройках модуля форума - Добавлена возможность предпросмотра сообщения перед отправкой - Новая страница для просмотра последних тем на всех форумах - Новая страница списка пользователей форума. Для каждого пользователя выводится сводная информация по темам, сообщениям, даты регистрации и последнего посещения - Новая страница списка всех тем и всех сообщений пользователя - Добавлена возможность модератору переносить темы текущего форума на другой форум, где он не является модератором - В списках тем и форумов модераторам показывается количество непроверенных сообщений - Новая административная страница "управление темами" - для возможности управления темами из административного интерфейса - Внесены косметические изменения в страницу профиля пользователя - Появилась возможность подписки на текущую тему при создании сообщения
Модуль Управления структурой:
Все наши усилия в этом модуле сейчас сосредоточены, конечно, на визуальном HTML редакторе. Помимо того, что было добавлено много новых функций и диалогов, большая часть времени и сил была потрачена на его ускорение, устранение ошибок и утечек памяти.
Полный список изменений: - Добавлена функция проверки орфографии с возможностью использования орфографии клиентского Microsoft Word (только для IE) и(или) серверного Pspell - Добавлена возможность редактирования таблиц (добавление/удаление строк, столбцов, ячеек) при помощи контекстного меню - Новая кнопка на панели инструментов "Выделить все" - Новый диалог вставки специальных символов - Добавлена возможность включать/отключать автоперенос строк в режиме редактирования исходного кода (только для IE) - Увеличена скорость работы кнопок панели инструментов в Internet Explorer - Устранены утечки памяти, что, в результате, повысило общую производительность и стабильность работы визуального редактора - Устранена ошибка аварийного завершения работы Internet Explorer при выполнении некоторых операций с контекстным меню и выпадающими списками в интерфейсе - Устранена ошибка изменения атрибутов src у изображений и href у ссылок с относительных на абсолютные при их перетаскивании и работе с буфером обмена - Устранена ошибка замены специальных символов (html-сущностей) их HTML эквивалентами при переключении между режимами html и исходного кода - Устранена ошибка отсутствия реакции списка стилей в панели свойств при их изменении
Информационные блоки:
Это, во-первых, новый тип хранения значений свойств элементов - в отдельных таблицах. Данная методика позволяет работать со значениями свойств, не добавляя JOIN-ы для каждого свойства в запросы к БД. Также, при новом типе хранения уменьшается общее количество записей в одной таблице, что также положительно сказывается на скорость выборки. Замечу, то, что этот тип хранения новый, не означает что он во всем лучше старого, просто он лучше при определенных условиях, а именно активной работе со значениями свойств (фильтр, сортировка, выборка). Для схемы "просто выбрать элементы"-"выбрать все его свойства", в общем случае, будет эффективней использовать первую версию. Плюс, новый тип хранения требует изменения компонент для его эффективного использования (стандартные компоненты, оптимизированные под новый тип, выйдут чуть позже). С новым типом пока не работает быстрая загрузка из CommerceML.
Другое заметное нововведение в модуле - возможность создавать пользовательские типы свойств, при помощи обработки события. Документации по этой возможности пока нет, но есть два замечательных примера - реализация типов "дата" и "привязка элементов по внешнему коду". Их реализацию можно увидеть соответственно в файлах prop_datetime.php и prop_xmlid.php, папка /bitrix/modules/iblock/classes/general/. Произвольные типы позволят в дальнейшем создавать такие свойства как: привязка к пользователю, теме форума и т.п.
В ближайших планах дальнейшая оптимизация модуля, в том числе внедрение технологии управляемого кэширования для некоторых объектов.
Полный список изменений:
Инфоблоки+. Добавлен новый режим хранения значений свойств элементов информационных блоков в отдельных таблицах для каждого инфоблока. Добавление или изменение новых свойств модифицирует структуру таблицы инфоблока+. Данный режим позволяет увеличить производительность фильтрации, сортировки и группировки элементов информационных блоков по значениям их свойств, а также увеличивать скорость выборки значений свойств одновременно с полями элемента. Для перевода информационного блока в новый режим необходимо выполнить его конвертацию в административном разделе, а также модифицировать компоненты его показа для более эффективного использования новой версии. Подробнее смотрите в документации. - Добавлена поддержка пользовательских типов свойств. Для создания своего типа необходимо добавить обработчик события OnIBlockPropertyBuildList. - На основе возможности создавать пользовательские типы свойств, добавлены два новых типа: Дата/Время и привязка к элементам по внешнему коду. - Добавлен смешанный вид просмотра элементов и разделов. В этом режиме элементы и разделы информационного блока отображаются в общем списке (как файлы и папки). Новый режим включается в настройках модуля информационных блоков. - При удалении элемента автоматически удаляются все его связи с другими элементами и группами. - В параметры информационного блока добавлены два новых поля: "Файл для редактирования элемента, позволяющий модифицировать поля перед сохранением" и "Файл с формой редактирования элемента" - для установки своих скриптов редактирования элемента для каждого инфоблока, а не целиком типа информационных блоков. - Исправлена ошибка редактирования элемента в списке административного раздела.
Выпущено несколько обновлений по главному модулю связанных с оптимизацией. Заметно оптимизирована система обработки событий.
v5.1.2 # Файлы управляемого кэша перенесены из папки /bitrix/cache в папку /bitrix/managed_cache - для возможности исключать неуправляемый кэш публичных страниц из обработки eAccelerator-ом. # Исправлена ошибка кэширования меню. # Добавлена возможность полной очистки управляемого кэша на странице настроек Главного модуля. # Оптимизация механизма обработки событий.
v5.1.1 # Исправлена ошибка определения сайта по доменному имени.
В рамках подготовки к версии 5.1 вышло большое обновление Интернет-магазина. Пока доступно в режиме бета-тестирования.
Появилась аффилиатная система, причем очень масштабная, включает даже многоуровневых аффилиатов (Multi Tier Affiliate Program), появились многоразовые и одноразовые купоны, которых ждали и масса других возможностей.
Торговый каталог:
v5.1.0 # Ускорена работа функции выборки скидок путем предпросчета данных. Внимание! После установки обновления необходимо сгенерировать данные для предпросчета. Для этого воспользуйтесь кнопкой "Перегенерация" на странице глобальных настроек модуля "Торговый каталог". # Появились многоразовые и одноразовые купоны. # Исправлены некоторые ошибки скриптов импорта и экспорта данных. # Появились новые события модуля catalog: OnGenerateCoupon - событие на генерацию купона, может использоваться для генерации купонов нестандартного вида; OnGetDiscountByPrice - на получение скидки по коду цены, может использоваться для подмены стандартного алгоритма вычисления скидки своим; OnGetDiscountByProduct - на получение скидки по коду товара, может использоваться для подмены стандартного алгоритма вычисления скидки своим.
Интернет-Магазин:
v5.1.0 # Добавилась возможность организации аффилиатской сети магазина. Комиссия аффилиата может зависеть от количества товаров, проданных за определенный период через аффилиата, либо от суммы стоимостей товаров, проданных за определенный период через аффилиата. Появилась возможность организовать многоуровневое аффилиатство, при котором аффилиат будет получать доход не только от товаров, проданных через него, но и от товаров, проданных через других аффилиатов, которые пришли на сайт благодаря ему. Заработанные деньги могут либо выплачиваться аффилиату, либо заноситься на его внутренний счет в магазине. # Внимание! Изменена система прав доступа для менеджеров магазина. Если вы использовали прежнюю систему нестандартным образом, убедитесь в работоспособности вашего сайта на тестовой копии перед установкой обновления на рабочую копию. Система прав стала более гибкой: появилась возможность указать для каждого статуса кто может менять заказ, кто может смотреть заказ, кто может менять статус и т.д. После установки обновления проверьте в глобальных настройках модуля магазина права групп пользователей на доступ к магазину, права групп пользователей на доступ к заказам разных сайтов, а так же в форме управления статусами права групп пользователей на доступ и изменение заказов в разных статусах. # Изменилась форма редактирования заказа. Появилась возможность автоматически пересчитывать суммы заказа на основании настроек магазина, разделять заказ на два заказа с пересчетом суммы или без него. # Появилась возможность добавлять пользовательские скрипты экспорта заказов. # Скидки по объему заказа теперь имеют период действия. # Появились новые события модуля sale: OnOrderListFilter - для дополнительной фильтрации списка заказов в административной части; OnProductSearchForm и OnBasketItemSave - для изменения параметров элемента заказа при редактировании заказа. # Появилась возможность блокировать заказ для его обработки (для того, чтобы одним заказом не занимались два менеджера).
Продолжается выпуск обновлений для версии 5.1. Вышло обновление модуля обучения. Изменений много. Добавлен функционал, появилось понятие "сертификация", новые компоненты, оптимизирована производительность для больших курсов.
v5.1.0 # Улучшен шаблон сайта: добавлено раскрывающееся меню; исправлена ошибка CSS, возникающая в IE 7.0. Для установки нового шаблона переустановите модуль "Обучения" с сохранением таблиц, указав прежний идентификатор шаблона и каталог публичной части сайта; # Добавлено понятие "Сертификация" - результат прохождения курса студентом. Учащийся, прошедщий все тесты курса, получает сертификат; # Добавлено три компонента: "Профиль студента", "Страница сертификации студента", "Отчет по курсам"; # На странице редактирования пользователя добавлена вкладка "Обучение", которая позволяет разрешить публичный доступ к профайлу студента; # Улучшена компонента "Результаты теста": добавлен вывод попыток прохождения теста; # Для компонентов "Список курсов" и "Детальное описание курса" добавлен параметр "Проверять право доступа"; # Добавлено поле активности у вопроса; # В результатах тестирования добавлено поле "Правильно отвечен"; # Для Oracle-версии исправлен триггер b_learn_test_insert; # Мелкие изменения компонент и административных страниц.
Этим сообщением мне бы хотелось начать серию публикаций посвященных вопросам оптимизации продукта. Возможно, что ряд следующих публикаций будет подготовлен моими коллегами, так как потребуется давать более дельные советы и рекомендации разработчикам.
Без сомнения, в жизни любого продукта есть этапы развития. Сначала мы максимум внимания уделяли функциональности. Следующим шагом была безопасность. Потом интерфейсы и юзабилити. Не значит, что эти этапы пройдены и работы в этих направлениях не будут вестись. Скорее наоборот, работы ведутся еще активнее. Просто в каждом из этих направлений достигнуты заметные результаты.
Как вы видите, мы закрывали наиболее значимые проблемы для наших клиентов.
На сегодняшний момент мы считаем, что наиболее актуальная для наших клиентов проблемы - это производительность продукта. И именно этому вопросу будут посвящены значительные усилия в развитии ближайшего времени.
Производительность - это очень многогранная проблема. В производительности участвует парсинг кода PHP, исполнение кода PHP, запросы к базе данных, конкуретная нагрузка и блокировки в базе данных, объемы передаваемых данных, число запросов к базе, производительность веб-сервера, буферы для страниц для PHP и масса других параметров и характеристик.
Причем, поведение одного и того же кода может принципиально отличаться для выделенного сервера или для виртуального хостинга. За счет чего?
Например, на выделенной машине база данных и запросы к данным кэшированы. Т.е. обычный select * from b_lang таблицы с двумя строчками данных выполняется за 0.000ХХ секунды. Так как данные просто уже в памяти базы данных и не требуется выполнять медленную операцию чтения данных с диска.
На виртуальном хостинге сотни пользователей обращаются к базе данных и учитывая, что кэш базы данных умеет вытеснять редко используемые данные, получается, что этот простой запрос, выполняется каждый раз в десятки раз медленнее. Просто потому, что базе данных нужно прочитать данные с диска.
Аналогичная ситуация с файлами PHP. Мы делаем Include файла PHP. Его нужно прочитать с диска. На выделенной системе этот файл в файловом КЭШе и читается быстро. Как результат, время выполнения скрипта, а в него все включается и парсинг и чтение файла и исполнение, будет минимальным.
На виртуальном хостинге опять же жуткая ситуация, каждый файл будет читаться с диска, процессора не будет хватать для быстрого парсинга.
Причем получается, что чем меньше посещаемость сайта, тем больше проект вытесняется из КЭШа базы данных и файлового КЭШа и тем медленнее работает.
Вот такой получается парадокс и очень противоречивые стратегии по оптимизации.
В этом сообщении я немного расскажу об обновлении главного модуля 5.1, которое будет выпущено в ближайшее время. Вообще, в ближайшее время планируется много обновлений, но это будет интересно с точки зрения производительности.
Начнем.
1. Оптимизация кода ядра. Проведена глобальная проверка и оптимизация кода ядра продукта. Фактически, каждый участок кода был перепроверен. Весь продукт многократно исследовался специальными продуктами оптимизации. Каждая функция и системный вызов проверялись. Некоторые функции были оптимизированы или просто переписаны. Исследовалось и оптимизировалось покрытие кода, поведение под нагрузкой и в разных тестовых системах.
2. Число SQL запросов к базе данных. Ядром продукта используются справочные таблицы, обычно небольшого размера с редко изменяющимся содержимым. Запросы к таким таблицам выполняются быстро, но только в случае, когда кэш базы данных не "перегружен" и задержки на передачу запроса по каналу и получение данных от SQL сервера невелики. В противном случае целесообразнее использовать файловый кэш.
В версии продукта 5.1 реализован так называемый "управляемый КЭШ".
Управляемый кэш - означает, что при изменении данных, кэш сам чиститься и обновляется. Т.е. кэширование работает прозрачно и незаметно для пользователя.
На статической странице наш продукт выполняет до 24 запросов. В новой версии ядра, не потребуется ни одного SQL запроса, более того, продукт сможет обойтись даже без открытия соединения к базе данных. И что очень важно, будут отсутствовать запросы на блокировку данных таблицы агентов и событий, что увеличит параллельность исполнения.
Файлы кэша создаются в подкаталоге /bitrix/cache/bitrix, т.е. требуются соответствующие права операционной системы на запись в данном каталоге. По умолчанию в версии 5.1 кэш ядра будет включен. Для его отключения требуется в файле /bitrix/php_interface/dbconn.php определить следующие константы:
Такой вариант работы теоретически может пригодиться для крупных проектов на выделенных машинах.
Как я уже сказал, очистка и обновление КЭШа будет происходит автоматически при изменении данных. Естественно, что изменение будет выполняться только в случае, когда такое изменение происходит с использованием API продукта. Также есть возможность настроить время кэширования. Например: define("CACHED_b_option", 3600*24);
По умолчанию кэширование будет выполняться на 1 час. Мы считаем этого достаточным.
В связи с тем, что на чистой странице или странице с кэшированными компонентами, возможно полное отсутствие SQL запросов появляется возможность не устанавливать подключение к базе данных. Или вернее сказать, подключение к базе данных будет автоматически устанавливаться при первом запросе через API функции.
Для работы такого режима достаточно в файле /bitrix/php_interface/dbconn.php определить следующую константу:
define("DELAY_DB_CONNECT", true);
Тогда подключение к БД будет выполнено при первом запросе через API продукта прозрачно для разработчика.
По умолчанию эта возможность будет выключена т.к. не редка ситуация "прямых" вызовов функций базы данных из PHP. Но в новом дистрибутиве продукта мы планируем этот режим включить.
3. Оптимизация работы меню. Следующий важный пункт - оптимизация дисковых операций для разделяемого хостинга. Тесты показали, что кэширование части операций в меню позволит ускорить работу.
В новой версии 5.1 будет по умолчанию включен режим кэширования права доступа и части проверок для меню для неавторизованных пользователей. Учитывая, что большая часть посетителей - это незарегистрированные пользователи, к ним применен специальный алгоритм кэширования. Кэш управляемый и обновляется при редактировании меню или изменении прав доступа к файлам и папкам через административный интерфейс и API. Т.е. обычные пользователи вообще не заметят, что существует какой-то алгоритм кэширования. Если только разработчики правят меню руками, то им потребуется скинуть кэш меню в интерфейсе. Кэш можно будет отключить, определив следующую константу: define("CACHED_menu", false);
===================
Перечисленные оптимизации по нашим тестам обеспечили на выделенной тестовой машине более чем 40% ускорение. Мы ожидаем, что на виртуальном хостинге ускорение будет еще больше.
Так же отмечу, что в новой версии ядра для параметров show_page_exec_time=Y и show_include_exec_time=Y для админа будет выводиться дополнительная информация по числу SQL запросов и общему времени исполнения запросов на SQL сервере. Это поможет разработчикам быстрее выявлять узкие места в разработке.
Оптимизация через создание файлов КЭШа имеет еще одно большое преимущество для проектов, которые используют прекомпиляторы. Файлы КЭШа являются PHP файлами, отлично прекомпилируются и хранятся в памяти, что дает еще больший прирост производительности.
В завершении этой темы отмечу, что для всех проектов мы рекомендуем PHP прекомпиляторы, это очень существенный ресурс оптимизации PHP приложений.
Ждем обновление 5.1
Дальше на очереди, инфоблоки+ (выпуск уже скоро), реклама, статистика, поиск и другие модули...
XML + XSLT - это давняя тема, о которой можно написать целую статью, чтобы выразить свое субъективное мнение по этому вопросу. Появление модуля Блогов в нашем продукте, это отличный повод опубликовать материал.
Действительно, было написано много книг и учебников, в которых программистов и проектировщиков учили, что единственный способ абстрагировать внешний вид (представление) от данных - это загнать все в XML, пропустить потом через XSLT и уже на выходе получить HTML.
Утверждалось, что проекты c XSLT шаблонами должны быть проще и удобнее, чем любые другие шаблоны и ими будет удобнее управлять. Много говорилось об удобстве переносимости и простоте развития таких проектов.
Все восприняли это буквально и начали делать подобные продукты. Не скрою, мы тоже были в рядах сторонников этой технологии и выпустили на рынок продукт "Битрикс: Инфо-портал" разработанный на ASP+MSSQL+XML+XSLT. Совершили подвиг, заставив XSLT шаблоны работать достаточно быстро, вложили кучу сил, времени и денег в разработку технологии... Самые большие каталоги товаров вмещали по 70 тысяч товаров.
Но клиенты голосовали рублем и внесли ясность. Что мы получили в итоге:
1. Иллюзия простоты XSLT шаблонов.
Проекты на XML+XSLT очень тяжело поддерживать клиентам. Специалистов по XSLT очень мало. Технологичный шаблон может подправить только специалист очень высокой квалификации. Таким образом, развеялась иллюзия, о простоте для клиентов и удобстве в управлении.
2. Иллюзия управляемости и гибкости.
Шаблонов XSLT в большинстве своем недостаточно для написания серьезной бизнес логики в публичной части сайта. XSLT не дорос до полноценного языка программирования, на нем можно делать только простые условные представления и очень ограниченную логику. Нет возможности использовать все возможности современных языков программирования и библиотек (графика, представление, сервисные функции и т.п.)
3. Иллюзия производительности, дешевого размещения и масштабируемости.
Как не стараются разработчики, производительность XML+XSLT систем остается очень низкой, несмотря на все усилия индустрии. Да и как выжать эту производительность? Сначала данные из SQL базы преобразуются в XML (а это текстовый файл большого размера в силу своей архитектуры). Потом XML данные загружаются в XML парсер уже в серверной части, где они занимают еще больше памяти для работы XPATH, формирования индексов по XML данным в момент загрузки и т.п. Далее XSLT проходит по огромному массиву данных получая на выходе опять же текст, который занимает память.
Реальное решение производительности просматривается только в многоуровневом кэшировании, что не всегда возможно, или нежелательно.
Ну и как результат, проекты на этой технологии очень тяжело хостить, почти всегда это выделенные машины. Потребность в масштабирование таких проектов возникает уже начиная с 1000-10000 уникальных пользователей в день и требует значительных финансовых усилий.
4. Иллюзия удобства абстрагирования данных и внешнего вида.
Один из плюсов, за которым все гонятся, используя технологии XML+XSLT - добиться качественной абстракции внешнего вида. Но только уже после создания первых шаблонов все понимают, что абстракция получилась, только никому она уже больше не нужна. Шаблон XSLT очень сложен для представления внешнего вида. Корректива его требует много сил. Полная смена дизайна требует полного переписывания всех шаблонов, что в расчете на сложность создания XSLT получается еще дороже. Таким образом, получается, что цена владения технологией XML+XSLT очень высока как для разработчиков, так и для их клиентов.
Это только некоторые моменты...
И что получается в результате героических усилий разработчиков по освоению технологии?
Большие расходы на владение и разработку, постоянно возрастающие расходы на масштабирование, низкий спрос на продукты, дорогие услуги, переход в дорогую ценовую группу, уменьшение числа заказов, снижение темпов развития продуктов, отсутствие работающей партнерской сети...
Значит ли это, что надо вообще отказаться от XML? Конечно нет. XML+XSLT очень красивая технология и будет еще развиваться. XML отлично работает для связи между проектами (RSS 2.0, Яндекс.Маркет, CommerceML и другие). Для небольших шаблонов и фрагментов и сегодня вполне эффективно используется XSLT для обработки XML.
Можно ли добиться абстрагирования продукта от дизайна и бизнес-логики другим способом, отличным от XML+XSLT? Конечно, возможно. В своем продукте "Битрикс: Управление сайтом" мы это сделали. Причем сумели даже создать технологию обновлений SiteUpdate, которая в нормальной реализации встречается вообще крайне редко и возможна только при полном разделении внешнего вида и бизнес-логики приложений: http://www.bitrixsoft.ru/sitemanager/siteupdate.php
Тема интересная и говорить о ней можно долго При случае, продолжу...