Один из недавних проектов начинал писать с использованием Livewire.
Столкнулся со следующими проблемами:
Скорость работы клиента всегда будет зависеть от того, как быстро обработает сервер изменение состояния, то есть поднимет всё окружение Laravel и выдаст ответ;
Каждое обновление компонента полностью перерендеривает весь компонент, включая дочерние. Например, если используется какой-нибудь select2, то его заново необходимо будет инициализировать (это есть и в JS веб-фреймворках, но там доступнее описать на каком этапе нужно заново отрисовать компонент из библиотеки) + влияет на размер ответа от сервера;
При необходимости произвести какую-либо манипуляцию на стороне клиента за рамками livewire (например, запросить доступ к камере и обрабатывать поток данных с неё) есть несколько вариантов: 3.1. Написать на alpine.js (не самый удобный способ, как по мне); 3.2. Написать на JS обработку события, которое было вызвано из js/livewire; 3.3. Отправить код из компонента livewire с помощью $this -> js() .
Обработка livewire-событий. Если правильно помню, то сначала событие уходит на сервер и ожидает своего ответа, а потом уже вызывает обработчики на стороне клиента, что вызывало проблемы с тем, когда необходимо было обработать в противоположно порядке
Если всё-таки хочется совместить клиент с Laravel, то предлагаю посмотреть в сторону inertia.js, которая позволяет рендерить приложения на react/vue/svelte без необходимости построения роутинга на клиенте и обработки авторизации через sanctum, например.
Более удачное решение в виде построения логики на сервере, как по мне, получилось у Blazor за счёт использования вебсокетов для обмена информации и WebAssembly, особенно с недавнем выходом .Net 8, где добавили возможность подгружать WebAssembly компоненты в фоне, пока у клиента грузится статика.
Information
Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Один из недавних проектов начинал писать с использованием Livewire.
Столкнулся со следующими проблемами:
Скорость работы клиента всегда будет зависеть от того, как быстро обработает сервер изменение состояния, то есть поднимет всё окружение Laravel и выдаст ответ;
Каждое обновление компонента полностью перерендеривает весь компонент, включая дочерние. Например, если используется какой-нибудь select2, то его заново необходимо будет инициализировать (это есть и в JS веб-фреймворках, но там доступнее описать на каком этапе нужно заново отрисовать компонент из библиотеки) + влияет на размер ответа от сервера;
При необходимости произвести какую-либо манипуляцию на стороне клиента за рамками livewire (например, запросить доступ к камере и обрабатывать поток данных с неё) есть несколько вариантов:
3.1. Написать на alpine.js (не самый удобный способ, как по мне);
3.2. Написать на JS обработку события, которое было вызвано из js/livewire;
3.3. Отправить код из компонента livewire с помощью $this -> js() .
Обработка livewire-событий. Если правильно помню, то сначала событие уходит на сервер и ожидает своего ответа, а потом уже вызывает обработчики на стороне клиента, что вызывало проблемы с тем, когда необходимо было обработать в противоположно порядке
Если всё-таки хочется совместить клиент с Laravel, то предлагаю посмотреть в сторону inertia.js, которая позволяет рендерить приложения на react/vue/svelte без необходимости построения роутинга на клиенте и обработки авторизации через sanctum, например.
Более удачное решение в виде построения логики на сервере, как по мне, получилось у Blazor за счёт использования вебсокетов для обмена информации и WebAssembly, особенно с недавнем выходом .Net 8, где добавили возможность подгружать WebAssembly компоненты в фоне, пока у клиента грузится статика.