Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Виджет зависает при инициализации #34

Open
EngineMaster opened this issue Jan 25, 2024 · 16 comments
Open
Assignees
Labels
enhancement New feature or request

Comments

@EngineMaster
Copy link

Пробовали различные эксперименты, но виджет все время застрявает на инициализации и кладет фронт на время.

Пример https://fizzymarket.com в корзине.

Да в целом и у вас на виджете тоже можно это заметить, только чуть поменьше провисание

https://widget.cdek.ru/

@vermorag
Copy link
Member

vermorag commented Feb 5, 2024

Добрый день. Можете проверить с последней версией?

@ubzor
Copy link

ubzor commented Feb 6, 2024

Добрый день!

Проверил на последней версии - проблема всё ещё актуальна.

Связано это, скорее всего, с тем, что при инициализации виджет подгружает все доступные точки СДЕК - на данный момент это 8250 штук. Это 165 запросов к скрипту, заданному в переменной servicePath, и в общей сложности ~15MB трафика. Причём, поскольку запросы идут через скрипт, а не напрямую к api СДЕКа, это дополнительно замедляет загрузку, т.к. плюсует туда время ответа от api скрипту и производительность сервера, на котором лежит скрипт.

Как один из вариантов решения могу предложить изначально грузить только те точки, которые попадают в стартовый bounding box карты, а остальные догружать по мере надобности.

edit:
Ещё один вариант (лучший на мой взгляд) - отказаться от скрипта на бэке и обращаться напрямую к api СДЕКа из браузера. Но раз так до сих по не сделали, видимо на это есть какие-то причины, поэтому:

Как ещё один из вариантов - кэшировать данные о точках на бэке (выигрываем время, затрачиваемое каждый раз на обращение к апи), периодически обновляя их по крону.

edit2:
Да, и ещё - каждая точка содержит полный набор данных - телефоны, часы работы, и так далее. Это всё не нужно для отрисовки точек на карте, достаточно координат и айди, и можно было бы подгружать всё остальное по необходимости - например, при клике на конкретную точку. Получается, что львиная доля трафика вообще не несёт никакой полезной нагрузки для среднего пользователя.

edit3:
Ещё один вариант оптимизации - не блокировать карту индикатором загрузки в ожидании пока все 165 запросов придут обратно с данными, а добавлять маркеры на карту порциями, после каждого запроса.

@vermorag
Copy link
Member

vermorag commented Feb 7, 2024

Добрый день.

отказаться от скрипта на бэке и обращаться напрямую к api СДЕКа из браузера

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

кэшировать данные о точках на бэке (выигрываем время, затрачиваемое каждый раз на обращение к апи), периодически обновляя их по крону.

service.php предназначен для запуска в универсальной среде, ему не нужна база, он не работает с файлами, из-за этого приходится мириться с такими ограничениями как невозможность кэширования. Однако никто не мешает разработчику его самостоятельно модифицировать под коркретную среду.

Да, и ещё - каждая точка содержит полный набор данных - телефоны, часы работы, и так далее

Это особенность работы общих протоколов - они предоставляют сразу все данные об офисах

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

Тогда как мы можем гарантировать, что, открыв карту, мы увидим точки сразу на открытой области, а не через какое-то время?

Наша команда сейчас работает над альтернативной API учитывающей особенностей виджета, но конкретный срок назвать я не могу, тк дата выпуска будет зависеть и от загруженности смежных отделов. В настоящий момент реализация стоит на 1 квартал 2024.

@ubzor
Copy link

ubzor commented Feb 7, 2024

Спасибо за подробный ответ. Сделал кэширование на бэкенде, стало грузиться быстрее. С нетерпением ждём новую версию виджета!

@vMamr
Copy link

vMamr commented Apr 11, 2024

Спасибо за подробный ответ. Сделал кэширование на бэкенде, стало грузиться быстрее. С нетерпением ждём новую версию виджета!

Подскажите а как сделали кэширование?

@vermorag
Copy link
Member

Спасибо за подробный ответ. Сделал кэширование на бэкенде, стало грузиться быстрее. С нетерпением ждём новую версию виджета!

Номер задачи на доработку CMS-806. Если требуется, можете подключиться к рассылке по релизу всех новых версий наших плагинов. Письма в рассылке о новых версиях содержат номера задач команды разработки, входящих в патч, а также краткое описание обновлений. Для подписки на рассылку напишите, пожалуйста, в телеграм: https://t.me/cdek_it_bot, раздел Интеграция для интернет-магазинов.

@vermorag vermorag self-assigned this Apr 11, 2024
@ubzor
Copy link

ubzor commented Apr 16, 2024

Подскажите а как сделали кэширование?

Вместо того, чтобы, как это сделано в файле service.php из этого репозитория, фетчить каждый раз пункты выдачи из апи СДЕК'а при обращении к методу getOffices(), я сохраняю их в бд и обновляю по крону, и их и использую для выдачи виджету, обернув в Laravel'евский Cache::rememberForever. После каждого обновления пунктов выдачи в базе их кэш сбрасывается.

@vermorag vermorag added the enhancement New feature or request label May 6, 2024
@vermorag
Copy link
Member

vermorag commented May 6, 2024

@ubzor Если у вас есть возможность/желание поучаствовать в закрытом тестировании 4 версии виджета, напишите мне на почту cms-integrator@cdek.ru, расскажу подробнее про особенности и процедуре.

@m6t9
Copy link

m6t9 commented May 13, 2024

Есть ли примерный дедлайн для 4 версии виджета?
Фронтэнд на MODx при тестовом подключении жутко тормозит, а при "боевом" подключении (больше ПВЗ) браузер не справляется. На Бэкенде конечно кэширую, но Фронтэнду уже это не помогает.

@vermorag
Copy link
Member

Есть ли примерный дедлайн для 4 версии виджета?

В настоящий момент - 30.06.2024.

@piton-zel

This comment was marked as abuse.

@ceobit
Copy link

ceobit commented Jul 21, 2024

Поддержу, есть сроки?

@piton-zel

This comment was marked as abuse.

@Vlad-i-Slav
Copy link

Vlad-i-Slav commented Aug 5, 2024

И всё же, в соседней ветке был набор на бета-тест. Написал на почту, ответа нет. Здесь тоже тишина.
Не будет нового релиза? Просто можно написать об этом же.

@vermorag
Copy link
Member

vermorag commented Aug 6, 2024

Добрый день. Релиз 4 версии виджета действительно был запланирован на конец июня. 26 мая произошел массовый сбой, отчего все силы были брошены на восстановление работы всей системы.

Единственное письмо на почту было 04.07, в ответ на него были запрошены уточнения.

На текущий момент работа над виджетом возобновлена. К сожалению, предоставить новый точный срок релиза сейчас не смогу. Если у вас возникнут другие вопросы по текущим проектам - мы готовы подключиться к решению вопроса в рамках новых задач.

@Semdevmaster
Copy link

Есть хоть какие-то подвижки в вопросе ускорения инициализации виджета? У меня уже несколько клиентов просто отказались от сотрудничества со СДЭК из-за этой проблемы.
Виджет грузится порой до 30 секунд!!!
Понятное дело, что столько ни один клиент не будет ждать и приходит к выводу что способ доставки просто не рабочий.
Удивляет тот факт, что старые версии, которые ещё с JQuery работают быстрее.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

9 participants