Пользователи начали жаловаться что зависает приложение битрикс, помогает только завершение процесса и перезапуск. Диагностика проблемы показала что зависание происходит при обращении к поиску, а конкретно при выполнении вот этого запроса: /bitrix/components/bitrix/im.messenger/im.ajax.php?CONTACT_LIST&V=130
Проверил через последний хром, открыв desktop_app, он тоже зависает, конечно не весь как приложение битрикс, а только вкладка, которую он заботливо предлагает закрыть. Значит проблема не в приложении.
А оказалась проблема в функции быстрого поиска чатов. Эта функция загружает с сервера ВСЕ чаты, контакты, сотрудников и телефоны, доступные пользователю. А после она видимо формирует из них html контейнеры чтобы оперативно выводить при поиске.
Но дело в том, что при разработке не учитывалось масштабирование системы, и то что пользователей и чатов может быть очень много. Так например произошло в моем случае, и формирование ответа сервера мало того что занимало >9 секунд, так ещё и ответ весил 2,6 Мб, это всё был json с сотрудниками и чатами открытых линий и CRM:
Решение Сначала попытался отключить параметр "Включить предварительную загрузку всех пользователей портала для быстрого поиска" в настройках модуля Веб-мессенджер. Но это не помогло, так как отключился только запрос сотрудников, а чаты так и продолжили загружаться, плюс проявился ещё один баг, после отключения этой функции, но о нем ниже.
Пришлось опять лезть в ядро что бы поправить ошибку, оказалось что данные для ответа собирает метод \CIMContactList::GetList() Находится он в этом файле /home/bitrix/www/bitrix/modules/im/classes/general/im_contact_list.php:22 И оказывается он принимает параметр LOAD_CHATS который отвечает за загрузку всех доступных пользователю чатов, но видимо забыли вывести этот параметр в настройки модуля.
Предлагаю костылить следующе, в файле обработчике ajax запросов из веб-мессенджера /home/bitrix/www/bitrix/components/bitrix/im.messenger/im.ajax.php в строке 1165 добавляем передачу параметра LOAD_CHATS в метод \CIMContactList::GetList():
Добавляем так же что бы параметр брался из настроек, как и с сотрудниками, что бы можно было отключить. Соблюдаем странный перегон логической переменной в Y/N, что метод нас понял.
На этом всё, ждем исправлений от разработчиков, а пока они их не сделают придётся костылить это после каждого обновления модуля.
Дополнительный баг
А теперь баг о котором написал выше. Если отключить загрузку сотрудников в настройках модуля, то тогда перестаёт работать поиск при делегировании чатов открытых линий, так как он производит поиск только по локально сохранённым сотрудникам.
При этом при добавлении сотрудника в чат, поиск производится так же через запрос на сервер, но при делегировании только локально, забыли наверное. Я лезть в js не стал, включил загрузку сотрудников, без загрузки всех чатов зависания нет, так как чатов грузилось аж 45998. При этом, без чатов, запрос выполняется всё равно долго >7 секунд, но там есть кэширование, которое более менее выручает. В общем ждём исправлений.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».