Разработчици на 1C-Bitrix - Оптимизиране на времето за генериране на страници

Рижонин Николай

разработчици
Последна дата на влизане:преди 3 дни
град:Калининград
Име на компанията:Битрикс

Често има въпроси относно изпълнението на проекти, базирани на "1C-Bitrix", за решаването на които не е необходимо да се прибягва до "екстремни методи". За да помогнем при решаването на подобни проблеми, особено за разработчици, които току-що започват да работят с 1C-Bitrix, нека разгледаме пример за оптимизиране на „определена“ страница от информационен сайт. За целта ще използваме само инструментите, вградени в продукта.

И така, какво имаме:

  • VMBitrix (512M памет)
  • новинарски инфоблок

Начален час на страницата: топ php новини: 0.0285s. - sql: 0.0085s. php новини: 6.144s. - sql: 6.0927s.

времето
Ние гледаме коя заявка генерира основното натоварване, копираме я в SQL конзолата, като изпълним EXPLAIN.
1c-bitrix
Виждаме, че има много редове, включени в селекцията от таблицата b_iblock_element. В този случай използваният индекс ix_iblock_element_code не е ефективен в този случай. След като анализирахме заявката, стигаме до извода, че основният проблем в случая се дължи на проверката на периода на активност на елемента

Време за изпълнение на страницата: топ php новини: 0.0188s. - sql: 0.0029s. php новини: 0.0475s. - sql: 0,0243s. както виждате, постигнахме добър резултат доста лесно.

1c-bitrix
1c-bitrix

Да предположим, че поради редица причини се използват инфоблокове+, как ще изглежда времето за генериране на страница? Преобразуваме информационния блок и разглеждаме времето за изпълнение:

топ новини за php: 6,9868s. - sql: 6.9709s. php новини: 0.2191s. - sql: 0.1942s.

оптимизиране
Също такатърсим в SQL конзолата за обяснение най-тежката заявка от топ новините и виждаме подобен проблем, само че сега причината за това е липсата на индекс на свойството MAIN_NEWS. (В първите инфоблокове се изгражда индекс от числови стойности)

времето

И вижте резултата

разработчици
разработчици

Както можете да видите, в този случай постигнахме добро представяне.

Като резултат

Добавянето на индекси по дата на дейност към b_iblock_element трябва да се извършва внимателно. Може да има ситуация, в която този индекс не би било желателно да се използва. В този случай можете да дублирате началната и крайната дата на дейността под формата на клеймо за време като числени свойства на информационния блок и да филтрирате по тях.

Когато добавяте вашите индекси, трябва да създадете известно уникално име, така че да няма ситуация, в която името на индекса, който сте създали, и индексът, който може да бъде добавен чрез системата за актуализиране, да съвпадат.

Първите информационни блокове вече имат индекс за всички числени свойства и ID стойности на свойствата на списъка. Ако използвате infoblocks+, тогава трябва ръчно да поставите индекси на тези свойства, за които ще избирате

В бъдеще ще се опитам да засегна и други аспекти на оптимизацията.