alor-broker / Astras-Trading-UI

Astras. The Angular's trading terminal from Alor Broker. https://alorbroker.ru/
Apache License 2.0
66 stars 21 forks source link

[TECHNICAL]: Переработать виджет Выбор инструмента #1849

Open sbelashevskiy opened 1 week ago

sbelashevskiy commented 1 week ago
  1. Избавиться от отрисовки списка в таблице. На больших списках таблица жутко тормозит:

https://github.com/user-attachments/assets/2a7a409a-e2c4-4efb-92f8-f9b9e3d61758

Сейчас поток данных организован так, что обновление одной позиции в одном из списков триггерит обновление всей таблицы. Angular это сглаживает, но при добавлении большого числа новых записей (разворачивание секций) все равно тормоза очень ощутимые. Можно, конечно, поправить стрим даты, но есть ощущение, что ng-table все равно будет тормозить т.к таблица подразумевает отображение статических данных, а тут больше кол-во динамических. Кроме того приходится "бороться" с фичами ng-table. Например, сейчас в таблице включен virtual scrolling исключительно для того, чтобы был автоскролл при перемещении записей между секциями. Для примера на tradingview.com watchlist сделан обычными div и при том они утверждают, что поддерживают до 1000 инструментов. у нас же отрисовка 200+ сильно тормозит и заставлеяет лагать весь терминал

  1. После реализации https://github.com/alor-broker/Astras-Trading-UI/issues/1847 убрать поиск. Точнее переместить его в кнопку, клик по которой вызовет диалог поиска, как это сделано в TV

https://github.com/user-attachments/assets/a5766102-e6e2-4ebd-af71-d59f49f89c1a

  1. Очень желательно сделать отдельный WS эндпоинт для watchlist на стороне бэка. Сейчас чтобы собрать данные для таблицы для КАЖДОЙ записи мы делаем:

-Http запрос для получения данных по инструменту -Http запрос для получения последних 2 свечей (дневных), чтобы отобразить closePrice и openPrice, minPrice и maxPrice, volume -Http запрос для получения последней свечки для выбранного таймфрейма (отображение priceChange и priceChangeRatio) -WS подписка на свечи чтобы только отобразить priceChange и priceChangeRatio -WS подписка на котировки.

Итого на каждый инструмент по 3 http запроса и 2 WS подписки. И если http запросы оказывают влияние (значительное) при загрузке виджета и переключения списков, то 2 WS заставлют обновлять интерфейс дважды, причем на списке 200+ обновления приходят каждые 2-5 мсек !!! В итоге WS канал забит этими сообщениями

Для пример TV устанавливает всего 1 подписку Логичнее запросы 2-5 реализовать и аггрегироватмь на бэке