Рейтинг: 6  
Новая
Предложил Задумкин Лев 03.12.2018 10:35:57

Задачи и Проекты: не выводить группы с выключенным функционалом задач

На странице "Проекты" (Задачи и Проекты) в список проектов попадают все рабочие группы, не зависимо от того, включен ли функционал задач в группе. Из-за этого страница может долго загружаться, если в группе много участников, т.к. на каждого участника в базу отправляется запрос.

В нашем случае на портале имеется группа "Общение" на 14500+ человек (для связи интранет/экстранет пользователей), из-за которой страница "Проекты" грузится в среднем 130 секунд:


Идея: предлагаю фильтровать проекты в зависимости от включенного функционала задач в группах.
Рейтинг: 0  
Новая
Предложил Минаева Алина 02.10.2018 10:51:18

Очистка места на диске

На текущий момент при очистке места на диске необходимо проверять каждого пользователя отдельно, то есть заходить в его папки и просматривать файлы. При этом нет возможности выбора периода времени, за который нужно просмотреть файлы.
Предлагаем ввести в функционал возможность выбора времени и пользователей (уволенных, действующих) при очистке места на диске. Это существенно упростит и ускорит процесс очистки и позволит оперативно отслеживать заполняемое дисковое пространство.  
Рейтинг: 6  
На голосовании
Предложил Будагов Алексей 15.12.2017 13:12:07

Сжатие HTML-кода композитных страниц

Добрый день. В папке html_pages сайта хранятся html страницы, которые и отдаются браузеру при работе композитного кеша (если я правильно понял). Почему бы при их генерации не убирать пробелы и переносы строк. Таким образом битрикс пройдет еще одну рекомендацию от Google PageSpeed Insights
Рейтинг: 0.3403  
На голосовании
Предложил Бугай Максим 04.10.2017 04:22:17

Несколько типов кеша на одном сайте

Часто возникает потребность использовать сразу несколько типов кеша. Например, маленькие, но сильно чувствительные к быстродействию данные хранить в оперативной памяти, а тяжёлый HTML-кеш в файлах, но сейчас можно установить только один движок кеша на весь сайт.

Предложение:
Сделать настройки кеширования в settings.php в следующем виде:
...
'cache' => <настройки>,
'cache_extra' => array(
  'key1' => <настройки>,
  'key2' => <настройки>,
)
...
В конструкторе Bitrix\Main\Data\Cache, и соответственно  старых  CPhpCache и CPageCache, передавать в качестве параметра ключ для секции настроек, которые в нём используются.

По умолчанию для всех системных функций будет использоваться кеш по умолчанию.
Для своих модулей, там где это надо, свои настройки с фолбеком на настройки по умолчанию.
Рейтинг: 0.0847  
На голосовании
Предложил Ульянов Владимир 17.04.2017 07:20:50

первичный ключ в hightload-блоках

Добавить возможность использовать в качестве первичного ключа не только обычный ID с автоинкриментом, а произвольное поле (например часто возникает потребность использовать ID элемента инфоблока).

Основная идея - повысить пользу от использования handlersocket (он же работает только с первичными ключами!).
Рейтинг: 6.1547  
На голосовании
Предложил Зайцев Артемий 03.11.2014 15:53:52

Скорость сайта - данные в виде таблицы

Сейчас "Скорость сайта" работает и выглядит прикольно. Хотя бы дает общее впечатление.



Но я не могу навести на график и перейти сразу к медленной странице.

Я не могу понять почему у этого пользователя медленно рисуется HTML. Может у него IE6? Или он с мобильника зашел?

Прошу сделать последние хиты в виде таблицы:

домен,
адрес страницы,
время хита,
длительность этапа 1,
длительность этапа 2,
длительность этапа 3,
длительность этапа 4,
длительность этапа 5,
длительность этапа 6,
общее время,
Браузер,
IP,
идентификатор сессии,
идентификатор сессии модуля веб-аналитики.

Мне неловко, что заказчик тыкает в график, а  не могу посмотреть элементы, обнаружить и понять, кто конкретный виновник.

По IP я хотя бы регион пользователя узнаю. А по браузеру - насколько у него все плохо.
Рейтинг: 0.868  
Внедрено
Предложил Рубцов Дмитрий 03.05.2014 02:07:45

Добавить проверку на пустоту $arViewedIds

В файле /bitrix/modules/sale/admin/order_detail.php есть 2 строки
... = CPrice::getList(array(), array("PRODUCT_ID" => $arViewedIds, ...), false, false, array(...));
 
В случае если $arViewedIds пустой, происходит выборка всех цен. На одном проект, получился цикл более 60 000 проходов, что съедало 2-3 секунды. Понимаю что обычно у пользователей сделавших заказ есть просмотренные товары, но как выяснилось, иногда $arViewedIds пустая.
Рейтинг: 0.1925  
Ответил Жуков Евгений 04.05.2014 14:10:30
Выйдет в обновлении sale 14.5.3
Рейтинг: 15.6202  
На голосовании
Предложил Меликов Георгий 06.12.2013 12:47:30

Создать официальную инструкцию по установке Битрикс на nginx + php-fpm

Такая схема работы оправдана и даёт свои плоды, но, к сожалению, в официальной документации нет ни слова о ней.

Здесь можно найти примерно правильный конфиг nginx для данных случаев, но его приходится дорабатывать, и он создан добровольцами.

Было бы замечательно, если такой конфиг будет написан 1С-Битрикс со всеми тонкостями.

Данная связка реализуема - я администрирую такую конфигурацию, но хотелось бы официальный конфиг.
Рейтинг: 12.4783  
На голосовании
Предложил Ерофеев Анатолий 12.09.2013 08:55:46

Запросы в цикле в стандартных компонентах или хватит это терпеть

Идея

Модифицировать GetFileArray чтобы он мог получать массивы сразу для нескольких файлов и применить в компоненте news.list, чтобы он не порождал по 2 дополнительных запроса для каждого найденного элемента. Сервер скажет спасибо.

Кому и зачем нужно

В одном из самых популярных компонентов ever является news.list. С давних времен разработчики используют его для вывода всего чего угодно. И в этом важном компоненте нарушается одна из главных заповедей производительности веб-приложений - там запросы в цикле :evil:.

Приведу пример.
/bitrix/components/bitrix/news.list/component.php:240
if(array_key_exists("PREVIEW_PICTURE", $arItem))
                $arItem["PREVIEW_PICTURE"] = CFile::GetFileArray($arItem["PREVIEW_PICTURE"] ); 
Независимо от настроек всегда получается картинка. И это в цикле:o! Строчкой позже делается аналогичный запрос для детальной картинки. Если у вас в news.list 100 элементов, ждите примерно 100 дополнительных запросов (а то и все 200:!:, если у вас есть и детальная картинка и анонсная).

Кажется, что решение проблемы состоит из 1 действия - выполнить запрос всех картинок разом. Но не тут то было. Метод CFile::GetFileArray не принимает массивы ID, только 1 файл за раз. И это, кстати, большая проблема многих методов Битрикс.
Рейтинг: 1.5505  
Новая
Предложил Карабаев Виктор 30.03.2013 19:18:30

Управлять работой CIBlockElement::GetList

Имеется некая база данных. Имеется следующий код:


$arSel ect2 = Array("ID", "NAME", "PROPERTY_USER", "PROPERTY_ZAKAZ", "PROPERTY_CAT_ID", "PROPERTY_CAT_ARTICUL", "PROPERTY_CAT_MANUF", "PROPERTY_CAT_NAME", "PROPERTY_CAT_SUPPLIER", "PROPERTY_CAT_DATE", "PROPERTY_CAT_PRICE", "PROPERTY_CAT_QUANT";);
$arFilter2 = Array("IBLOCK_ID"=>$IBLOCK, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_USER"=>$_REQUEST["uid"], "!PROPERTY_ZAKAZ"=>5, "SECTION_ID"=>$_REQUEST["sid"]);
$res2 = CIBlockElement::GetList(Array(), $arFilter2, false, Array(), $arSelect2);
while($ob2 = $res2->GetNextElement()) {
 $arFields2 = $ob2->GetFields();    
}


На данный момент вот в данном инфоблоке, находится всего два элемента. Вообще в базе, около 4000 элементов, с разными свойствами. Сервер - отдельный физический сервер. Centos6. Веб окружение Битрикс с оптимальными конфигурационными файлами.

Время выполнения кода выше - 33 секунды.

Проблема:

SELECT COUNT('x') as C
FR OM
b_iblock B
INNER JOIN b_lang L ON B.LID=L.LID
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID
INNER JOIN b_iblock_property FP0 ON FP0.IBLOCK_ID = B.ID AND FP0.CODE='USER'
LEFT JOIN b_iblock_property FP1 ON FP1.IBLOCK_ID = B.ID AND FP1.CODE='ZAKAZ'
LEFT JOIN b_iblock_property FP2 ON FP2.IBLOCK_ID = B.ID AND FP2.CODE='CAT_ID'
LEFT JOIN b_iblock_property FP3 ON FP3.IBLOCK_ID = B.ID AND FP3.CODE='CAT_ARTICUL'
LEFT JOIN b_iblock_property FP4 ON FP4.IBLOCK_ID = B.ID AND FP4.CODE='CAT_MANUF'
LEFT JOIN b_iblock_property FP5 ON FP5.IBLOCK_ID = B.ID AND FP5.CODE='CAT_NAME'
LEFT JOIN b_iblock_property FP6 ON FP6.IBLOCK_ID = B.ID AND FP6.CODE='CAT_SUPPLIER'
LEFT JOIN b_iblock_property FP7 ON FP7.IBLOCK_ID = B.ID AND FP7.CODE='CAT_DATE'
LEFT JOIN b_iblock_property FP8 ON FP8.IBLOCK_ID = B.ID AND FP8.CODE='CAT_PRICE'
LEFT JOIN b_iblock_property FP9 ON FP9.IBLOCK_ID = B.ID AND FP9.CODE='CAT_QUANT'
INNER JOIN b_iblock_element_property FPV0 ON FPV0.IBLOCK_PROPERTY_ID = FP0.ID AND FPV0.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV1 ON FPV1.IBLOCK_PROPERTY_ID = FP1.ID AND FPV1.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV2 ON FPV2.IBLOCK_PROPERTY_ID = FP2.ID AND FPV2.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV3 ON FPV3.IBLOCK_PROPERTY_ID = FP3.ID AND FPV3.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV4 ON FPV4.IBLOCK_PROPERTY_ID = FP4.ID AND FPV4.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV5 ON FPV5.IBLOCK_PROPERTY_ID = FP5.ID AND FPV5.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV6 ON FPV6.IBLOCK_PROPERTY_ID = FP6.ID AND FPV6.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV7 ON FPV7.IBLOCK_PROPERTY_ID = FP7.ID AND FPV7.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV8 ON FPV8.IBLOCK_PROPERTY_ID = FP8.ID AND FPV8.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_element_property FPV9 ON FPV9.IBLOCK_PROPERTY_ID = FP9.ID AND FPV9.IBLOCK_ELEMENT_ID = BE.ID
LEFT JOIN b_iblock_property_enum FPEN0 ON FPEN0.PROPERTY_ID = FPV1.IBLOCK_PROPERTY_ID AND FPV1.VALUE_ENUM = FPEN0.ID
INNER JOIN ( SELECT DISTINCT BSE.IBLOCK_ELEMENT_ID
FR OM
b_iblock_section_element BSE
INNER JOIN b_iblock_section BS ON BSE.IBLOCK_SECTION_ID = BS.ID
WHERE
((BS.ID IN (3700))) ) BES ON BES.IBLOCK_ELEMENT_ID = BE.ID
WH ERE
1=1 AND ( ((((BE.IBLOCK_ID = '12')))) AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) AND ((((BE.ACTIVE='Y')))) AND ((((FPV0.VALUE LIKE '1')))) AND ((( FPV1.VALUE_ENUM IS NULL OR NOT (FPV1.VALUE_ENUM = '5')))) ) AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL)))    


Этот запрос занимает всё время. И результат его работы - просто подсчет количества элементов...

ЗАЧЕМ????

Мне НЕ нужно в данном случае считать элементы! ПОЧЕМУ нельзя или обойтись без этого запроса совсем, или сделать некую переменную через которую управлять подсчетом??? Передана функции переменная - посчитали. Нет - ничего не считаем.

Проблема имеет общий характер.

Обобщая это звучит так:

Если вы используете функцию CIBlockElement::GetList, вам нужно сделать выборку из инфоблока с большим количеством свойств, и нужно выбрать эти свойства, производительность падает фатально. И чем больше размер у вас бд, тем хуже и фатальней результат.
Рейтинг: -10.973  
На голосовании
Предложил Ливач Михаил 13.07.2012 10:35:41

Разбить индекс производительности на два

Известно, что индекс - это единица, делённая на время отклика. При тестировании на новом хостинге в тесте масштабируемости было замечено, что время генерации и время получения страницы разнятся приблизительно на одну и ту же величину.
В нашем случае "классический" индекс даёт 8.5, а по времени генерации 158.7

Для разработчиков сайтов гораздо больший интерес представляет именно индекс по времени генерации.
Рейтинг: 7.5697  
На голосовании
Предложил Месилов Максим 31.05.2012 14:14:12

Добавить проверку на наличие обязательных индексов в таблицах для монитора производительности

Были проблемы с производительностью проекта. Экспертиза производительности начинает разбираться и в качестве одной из причин указывает

Не хватает индексов после обновления.  Необходимо создать недостающие индексы для таблиц
статистики.

Решение:
Автоматическая проверка модулем производительности всех таблиц продукта на наличие индексов для текущей версии каждого из модулей.

Так даже если обновление было сбойным и админ это пропустил, то последующая проверка это выяснит.
Рейтинг: 19.1827  
На голосовании
Предложил Мокрушин Алексей 10.02.2012 10:19:09

Решения/конфигурации для увеличения производительности сайта

Предлагаю опубликовать ставшие уже стандартными решения по увеличению производительности сайта с применением кэша  nginx (в location), отключением модуля компрессии (так как в nginx он лучше и быстрее), использованием fast-cgi. + Добавить дополнительные параметры-модификаторы в html cache так как иначе его использовать полная бессмыслица на сайте чуть больше чем простой. В идеале сделать его фактически настраиваемым компонентом кэша nginx
Рейтинг: 7.8742  
На голосовании
Предложил Царук Антон 13.12.2011 16:47:37

Сократить потребление ресурсов :)))