Ты ему слово, а он тебе $: в ответ. Мой первый взгляд на Svelte
Недавно мне поставили задачу реализовать движок для небольшой игры в американскую рулетку. Основными требованиями были легковесность и скорость как работы, так и разработки. Нужно было быстро и качественно сделать управляемый рандом на основе весов и коэффициентов. При этом рулетка должна крутиться, а слоты бегать по экрану как в настоящем казино. Вес и производительность были самым важным критерием.
Игра представляла собой виджет, поставляемый в виде npm пакета и монтируемый прямо на сайт.
Я решил экономить по крупному и не затаскивать никаких библиотек или фреймворков. Хотел обойтись штатными средствами языка, без лишнего бойлерплейта. Основную бизнес логику написал быстро: баланс, механизм определения победителя, историю ставок. Но веселье началось, когда дошел до UI.
Чтоб все свистело и пердело, нужно было много динамических компонентов. Делать это нативными средствами оказалось мучением, и код быстро превратился в нечитаемое адище. В итоге пришлось пойти на компромисс: либо писать свой мини фреймворк под этот виджет, либо взять что-то из готового Vue или React.
Честно, не улыбался ни один из этих вариантов. Под мою задачу они оба казались слишком тяжелыми и избыточными. Мне хотелось взять всё лучшее от этих двух красавцев.
На помощь пришел Svelte, который я когда то отмел из-за избытка магии и слишком минималистичного синтаксиса. Решил дать ему новый шанс и не пожалел. Он похож на Vue и React одновременно: гибкость как у React, шаблонность и директивы как у Vue. При этом порог входа ниже.
Svelte не использует Virtual Dom, а точечно обновляет реальный, что делает его значительно легче. А вишенкой на торте стала концепция реактивных блоков.
Если проще, то все главные фишки Vue и React: computed, watch, React hooks лаконично объединены в одном операторе $:.
Конечно, Svelte ещё молод. Его экосистема и сообщество скромные, особенно на фоне конкурентов. Есть много магии и неочевидных реактивных сюрпризов. Но под задачи вроде моей, где важно сделать быстро и просто, он показался очень даже неплохим вариантом.
Svelte показался мне отличным решением из разряда “здесь и сейчас, быстро и дешево”. Минимум настроек, реактивность из коробки, и почти нулевая боль с состоянием. Для виджетов, прототипов или интерфейсов, идеально.
Возможно, я бы рассмотрел его под микрофронты в будущих проектах. Но на что-то большее, полноценные платформы или сложные админки, брать его я бы не стал. Всё-таки экосистема, документация и инструменты пока не на уровне Vue или React.
