Svelte, исчезающий фреймворк, который уже не исчезнет

    Когда на днях в наш уютный чатик @sveltejs в телеграм запостили ссылку на очередную «разоблачающую» статью про Svelte, я очень обрадовался, предвосхищая интересный технический батл или хотя бы увлекательное чтиво чужого практического опыта. Кроме того, что это всегда интересно и полезно, определенное стечение обстоятельств — плановый отпуск и карантин — заставляют меня скучать дома, а подобная статья могла бы несколько разнообразить мой день. Каково же было мое разочарование, вы даже представить себе не можете… но давайте по делу.



    Уточню еще раз, данная статья является ответной на публикацию «Svelte, исчезающий фреймворк, что всё никак не исчезал».

    Disclaimer
    Вынужден сразу попросить прощения у читателей, ведь технический и практический уровнь оригинальной статьи настолько низок, что у меня не было ни малейшей возможности зацепиться хоть за что-то, чтобы вытянуть общую канву публикаций из клоаки чистой публицистики и популизма. Единственное что я смог сделать, чтобы хоть как-то приблизиться к стандартам технического ресурса — это соблюсти в своих ответах четкость и безэмоциональность, подкрепленную фактами, а не «домыслами и смыслами».

    Немотря на то, что автор оригинальной статьи, уважаемый action52champion, явно находится в депрессивном состоянии, вероятно вызванном самоизоляцией и мировым кризисом, о чем прямо пишет сам:

    action52champion: Паранойя, скажете вы и будете правы. Но мой психотерапевт занят поддержкой пострадавших от коронавируса. Им нужнее. Поэтому выговариваться мне придётся вам.

    я все же постараюсь сделать ответную публикацию максимально полезной, интересной и главное НЕ злой, представив все как некое подобие интервью автора оригинальной статьи со мной. Попутно я постараюсь ответить на некоторые частозадаваемые вопросы по поводу выбора Svelte в качестве инструмента, как именно происходило его внедрение у нас и что происходит с ним сегодня. Расскажу пару историй. Итак по порядку.

    Интервью


    Про меня


    action52champion: Меня переполняет восхищение от наглости писавших её. С серьёзнейшим видом эти люди приходят и начинают рассказывать что их фреймворк в принципе может рассматриваться как альтернатива большой тройке: Angular, React, Vue. Первый раз я подумал, что автор из-за своей неопытности на полном серьёзе рассматривает Svelte как вменяемую production-ready альтернативу устоявшимся фреймворкам.

    Привет Экшн Чемпион, мне очень приятно быть здесь, спасибо что пригласил! Меня зовут Павел Малышев, я автор всех тех замечательных статей (даже несмотря на то, что большая их часть — переводы), которые так «переполняют» тебя. В данный момент времени я руковожу разработкой в небольшой Нижегородской студии по направлениям веб и Smart TV.

    Даже если кто-то из наших читателей не следит за Svelte, возможно они могут знать меня по моим докладам на крупнейших IT конференциях России и СНГ, таких как HolyJS, РИТ++, FrontendConf, DUMP, CSS-Minsk-JS, мероприятиях Яндекса и всевозможных митапах в разных городах РФ.

    Также мне довелось быть героем выпусков RadioJS №54-55, Веб-стандарты №170, Девшахты №94 и некоторых других. Кроме Svelte, я люблю рассказывать про изоморфные веб-приложения с SSR, PWA, Web components и SmartTV.

    Про то, как и почему начали использовать Svelte


    action52champion: Второй раз я подумал, что автор испытывает творческий кризис и его так тошнит от большой тройки, что ему хочется писать на чём угодно, но только не на ней.

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

    К сожалению, в IT компаниях лицо, принимающее такие решения, часто оказывается сильно оторванным от самого процесса разработки и технологий, поэтому руководствуется даже не мнением своих разработчиков, а некими общепринятыми вариантами решений и хайпом. То есть рассуждают примерно также как вы: «есть Большая тройка и полно готовых решений для нее, че думать то».

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

    Если говорить конкретно о Svelte, то первый проект, на который он был выбран мною в 2017 году, — встраиваемый виджет для сайтов. На самом деле выбор был не велик — либо ванила, либо то, что компилируется в ванилу. Даже нами любимый в тот момент Vue в чистом виде весил ~25Кб gzip, что чудовищно много для такого проекта.

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

    В том же году, уже после того как мы закончили проект, я написал свою первую статью о Svelte на Хабре «Магически исчезающий JS фреймворк», чтобы поделиться с сообществом новым и перспективным инструментом. Естественно, статью встретили довольно прохладно, о чем может свидетельствовать хотя бы то, что более-менее техническая статья с примерами кода и неплохим оформлением тогда собрала в 3 раза меньше плюсов чем ваш профанский «высер» сегодня. По факту это была одна из первых статей о Svelte вообще и не только русскоязычных.

    Про проплаченные статьи и в чем «профит»


    action52champion: В последующие разы меня преследовало чувство, что кто-то просто строчит заказные посты.

    Вдруг подумалось, что часть времени, которое я трачу на community development для Svelte, фактически оплачивается моей работой. Не уверен, следует ли при этом считать мои материалы заказными?

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

    Окей, расскажу как это работает. Заказчики, как правило, делятся на 2 категории:

    1. где-то слышали что React/Vue/Angular/Ember/{вставить свое} — это круто, поэтому давайте юзать его
    2. ничего не понимают, поэтому полагаются на мнение специалистов.

    К сожалению, часто 1-е навязывают решения исходя из хайпа/PR-а, который, конечно же, сильнее у тех инструментов за которыми стоят корпорации (React/Angular) и/или сильные сообщества (Vue + китайцы).

    Нет смысла скрывать, что нам хотелось чтобы в списке «тех фреймворков о котором я слышал» наших заказчиков входил и тот инструмент, который мы считаем лучшим. Не потому, что мы какие-то мазохисты или злодеи и хотим сделать всем вокруг плохо, а потому что это реально достойный инструмент, по нашему скромному мнению. Решения на Svelte просты и эффективны. Чаще всего я с ужасом смотрю на проекты React, которые к нам иногда приходят на доделку. Даже вполне себе прекрасный и любимый мною Vue уже смотрится громоздким.

    В целом, считаю что «лед тронулся» и мы добились своего. Если в 2017-18 годах делать проект на Svelte можно было только для заказчиков 2-го типа, то в 2019-20 годах о Svelte уже многие слышали и готовы использовать в своих проектах. Почти каждый день мне в личку Телеграм и в чат Svelte пишут люди, представители различных компаний, в том числе крупных сервисов, и спрашивают про Svelte и его экосистему. Рад что вы, уважаемый Экшн, дали мне возможность рассказать и об этом.

    Про конкретные недостатки


    action52champion: Не хочу сравнивать Svelte и остальные фреймворки и проходить по его конкретным недостаткам. Можете почитать эту статью ради конкретики.

    Тут вы лукавите. Насколько я понял, у вас нет никакого опыта со Svelte. Мне кажется вы даже не прошли Tutorial на его официальном сайте, чтобы рассуждать на тему предметно. Поэтому считаю, что вы просто не смогли бы этого сделать. Если я ошибаюсь, то напишите мне об этом и я готов проверить на практике, например, заключив с вами что-то вроде пари.

    В свою очередь, я бы с удовольствием рассмотрел какой-то конкретный кейс, а основные недостатки Svelte я уже упоминал в конце этой статьи. Кроме того, много материала и реальных отзывов можно найти в нашем телеграм чате. У нас там нет цензуры и можно писать любые вопросы по сабжу.

    Про Большую тройку


    action52champion: Ну знаете как то: лисп замечательный язык, только на нём почти никто не пишет, хаскелл — язычище каких поискать(как и тех кто пишет на нём) и т.д. Всё хорошо, всё отлично, только никому не нужно. Так что давайте сразу зайдем с козырей. У нас есть большая тройка вёб-фреймворков. Она худо-бедно устоялась за последние 5 лет. На ней создана и работает куча проектов. Для неё есть куча библиотек и компонентов. Для неё исправлены многие детские болезни. У неё большое сообщество опытных профессионалов. Для неё куча работы.

    Знаете, вы затронули интересную тему. Такими ли «зрелыми» являются проекты Большой тройки? Могут ли они покрыть абсолютно все кейсы веб-разработки, ответить на все «новые вызовы»? Очевидным ответом будет «Нет», потому что иначе мы бы не наблюдали появление все новых и новых решений.

    Хорошо ли, что новые решения появляются? Однозначно «Да», потому что время идет и появляются новые задачи, новые вызовы. 10 лет назад, мы думали только о десктопах и ослике, 5 лет назад мы думали о мобильных, сегодня на первый план выходят IoT, embedded и носимые устройства.

    Я понимаю, что как разработчику, склонному к депрессивным состояниям, вам бы хотелось, чтобы прогресс остановился или хотя бы замедлился. Чтобы ваша картина мира стала простой как валенок — есть фреймворки Большой тройки, как бы на любой вкус и цвет, и вы точно знаете что надо делать. Но дорогой Экшн, так не бывает.

    Так не было с первой волной frontend фреймворков, так не будет и с текущими лидерами. Кстати, в этом смысле, я вовсе не утверждаю что Svelte — это обязательно инструмент новой волны. Он действительно многое переосмыслил, но в то же время, многое якорит его к существующим решениям. Займет ли он лидирующие позиции в новом пантеоне фронтенд технологий или же является лишь предвестником их появления, я не знаю, хотя и не исключаю такой возможности.

    Про Vue


    action52champion: Я помню как взлетал и набирал популярность Vue на фоне реакта с ангуляром. Да пиар был, но Vue просто не нуждался в пиаре. Он решал реальные проблемы раздутости и сложности других фреймворков. Он взял то что было реализовано в других и реализовал в минималистичной форме. Он решал конкретную проблему — сложность и монструозность двух других фреймворков. Какую реальную проблему решает Svelte я не знаю. То что написано у них на сайте это заявление о благих намерениях.

    Я очень люблю эту историю. Про то как благородный Vue, с прекрасным дизайном неожиданно для всех ворвался в пантеон фреймворков озарив его своей простотой и лаконичностью. Мне нравится все в этой истории, кроме того, что это не более чем миф. Вот смотрите:

    Это код Vue (2014):

    var app = new Vue({
      el: '#app',
      data: function() {
        return {
           greeting: 'Hello',
           firstName: 'Экшн',
           lastName: 'Чемпион'
        };
      },
      computed: {
          fullName: function() {
             return this.firstName + ' ' + this.lastName;
         }
      } 
    });
    

    А это код Ractive (2012):

    var app = new Ractive({
      el: '#app',
      data: function() {
        return {
           greeting: 'Hello',
           firstName: 'Экшн',
           lastName: 'Чемпион'
        };
      },
      computed: {
          fullName: function() {
             return this.get('firstName') + ' ' + this.get('lastName');
         }
      } 
    });
    

    Как видите кроме незначительных косметических отличий, в остальном код практически идентичен.

    Возможно вы скажете, что это олдскул и на Vue все пишут в SFC (2015 год):

    <template>
    <p>{{greeting}} {{fullName}}</p>
    </template>
    
    <script>
    export default {
      data: function() {
        return {
           greeting: 'Hello',
           firstName: 'Экшн',
           lastName: 'Чемпион'
        };
      },
      computed: {
          fullName: function() {
             return this.firstName + ' ' + this.lastName;
         }
      } 
    };
    </script>
    
    <style scoped>
    p { color: red; }
    </style>
    

    А я вам отвечу, что «ничто не ново под луной» (с) — Ractive (2014):

    <p>{{greeting}} {{fullName}}</p>
    
    <script>
    component.exports = {
      data: function() {
        return {
           greeting: 'Hello',
           firstName: 'Экшн',
           lastName: 'Чемпион'
        };
      },
      computed: {
          fullName: function() {
             return this.get('firstName') + ' ' + this.get('lastName');
         }
      } 
    };
    </script>
    
    <style>
    p { color: red; }
    </style>
    

    А еще тот самый Virtual DOM, или все таки Parallel DOM? Надеюсь я вас окончательно не запутал. Бегло пробежался по комментариям к оригинальной статье и понял, что вы не понимаете разницы между Virtual DOM и Shadow DOM, что явно следует из этого комментария:

    action52champion: Shadow DOM ввели во фреймворки не от хорошей жизни. Его отсутсвие означает, что Svelte заведомо будет медленнее, где будет много обновлений.

    видимо про Web components вы тоже не слышали, а зачем нужен Virtual DOM даже не представляете. Ничего, зато вы хороший интервьюер, за это вас и любим.

    Но продолжу. Одна из причин, почему в 2015 году мы пересели на Vue, заключала в том, что Ractive, который мы использовали с 2013 года, из-за отсутствия «агрессивных евангелистов» просто не смог выбиться и нарастить массу. В тоже время молодой Vue, похожий на него как 2 капли воды, на волне поддержки со стороны очень сплоченного и национально-ориентированного китайского сообщества, уже начал хайпить в поднебесной. Переезд оказался фактически бесплатным, хотя мы и потеряли часть крутых фичей Ractive, которых во Vue нет до сих пор.

    Это было уроком, который стоит усвоить и вам — не всегда лучшая технология оказывается в топе. Есть намного больше факторов чем качество и инновационность идей. Должен быть драйвер роста, будь то поддержка корпорации или крутое сообщество. Просто так даже алмаз не становится бриллиантом.

    Мне действительно нравится Vue и я считаю что это наиболее подходящий для меня инструмент из Большой тройки, но я объективно понимаю, что мне нравится не он сам, а те идеи, которые он отражает. Идеи из Ractive, которые мы потеряли.

    Svelte, во многом, является продолжателем идей Ractive соединенных с идеями заложенными в Rollup (eg. минимализм, tree-shaking и т.п.) и это не удивительно, ведь у всех этих инструментов один автор.

    Относительно недавно в Angular появилась AoT компиляция шаблонов, похожая на Svelte. А знаете где я видел (и даже использовал) нечто подобное в первый раз и это позволяло нам еще в 2013 году выкидывать ту часть рантайма, которая работала с шаблонами? Ну вы поняли.

    Про то, почему так долго


    action52champion: С практической точки зрения важно одно — насколько хорошо фреймворк решает реальные бизнес задачи. И с этой точки зрения, если взять 2 фреймворка примерно одинаково решающие задачи, но у одного из них больше коммьюнити и экосистема, разумно выбрать последний. Svelte вышел в 2016 году. Vue вышел в 2014. Разница в 2 года. Т.е. Svelte мог учесть все ошибки Vue и стать лучшим, отвоевать аудиторию и рынок. Но он до сих пор является полнейшей маргинальщиной известной в основном по своим хвалебным статьям.

    Прежде чем ответить на вопрос, немного откорректирую ваше утверждение. По-сути Svelte вышел в 2017 году. Его автор, Рич Харрис, рассказал о нем в своем «Frameworks without the framework: why didn't we think of this sooner?» лишь в самом конце 2016.

    Кроме того Svelte 1 был скорее proof-of-concept, о чем не раз обсуждалось как в сообществе, так и при общении с автором. Несмотря на это, именно Svelte 1 я использовал на первом проекте с виджетом и для такой задачи он работал отлично. В тот момент, мы продолжали писать на Vue и поддерживать проекты на Ractive. Первый более-менее серьезный проект был разработан уже на Svelte 2, релиз которого произошел только в середине 2018 года, о чем я сразу написал в соответствующей статье.

    Я бы сказал, что только начиная со второй версии Svelte в принципе стал хоть как-то продвигаться. До этого ни я, ни автор, ни другие рябята из сообщества, не предпринимали особых попыток рассказать о нем. Поэтому раз вам так хочется считать года, уместнее буде считать датой выхода Svelte середину 2018 года.

    Некоторые рябята в комментариях предлагали считать датой выхода Svelte появления Svelte 3, который вообще вышел только год назад и за этот год достиг потрясающих результатов. На эту тему можно вспомнить Angular и AngularJS — два разных фреймворка под одним названием. Лично я считаю все эти подсчеты не более чем глупым популизмом.

    Возможно вы захотите узнать, почему мы не стали писать еще проекты на Svelte 1, раз он был так прекрасен. Кажется ответ очевиден — в тот момент он был действительно сыроват и подходил только для проектов типа виджетов. Не могу сказать что мы вообще забросили его. На Svelte 1 были также написаны несколько внутренних проектов, а также переписаны части старых приложений на Ractive. Те компоненты, которые были «узкими местами» в производительности Virtual DOM, были успешно переписаны на Svelte 1 и внедрены в проекты, увеличив производительность данных компонентов вдвое. Это также был весьма положительный опыт.

    Про тупых и алчных фронтендеров


    action52champion: Особенно актуально это для тех, кто только въезжает во фронтенд. Часто въезжает за деньгами. Так вот: в Svelte денег нет. Работы на нём тоже нет. И самое интересное — опыта на нём тоже не будет.

    Очень эмоциональная формулировка. Мне почему-то подумалось, что вы как раз один из тех, кто «въехал во фронтенд за деньгами», причем кажется довольно недавно.

    Если же я ошибаюсь, и вы матерый фронтендер, то возможно вы помните, что еще пару лет назад работы для того же Vue также не было совершено. Вакансии были штучные и по деньгам предлагали меньше чем React, Angular или даже Ember разработчикам. В тоже время, сейчас мы видим, что Vue уже занял достойную позицию. Для Svelte это также неизбежно, хочется вам этого или нет.

    Про экосистему


    action52champion: Мантра «у нас есть настоящая реактивность и небольшой размер фреймворка» на самом деле означает «во фреймворке нет кучи типовых фич, а осваивать большую тройку вам все равно придётся». Так вот, заклинаю всех входящих в мир фронтенда, не ведитесь на хвалебные статьи. Не ведитесь на эту чушь! Фреймворк без экосистемы в 2020 году целящий на место большой тройки — это мёртвый фреймворк.


    Что касается Sveltе и его экосистемы. Стоит сразу отметить, что, несмотря на кажущуюся простоту и минимализм, Svelte весьма fullfeatured прямо из коробки. Как добротный UI фреймворк в нем есть абсолютно все, что необходимо для создания совеременного UI. Вот диаграмма по встроенным фичам, которую я готовил к одному из своих докладов:



    Например, в том же React ничего такого и в помине нет. Хотя React у нас самый популярный UI фреймворк, а по функционалу не более чем шаблонизатор.

    Конечно же внешняя экосистема пока намного скромнее. Однако Svelte уже имеет довольно обшиный список готовых решений и всевозможных наборов компонентов, которые вы можете найти тут и он движется в этом направлении ровно также, как до этого двигались и другие фреймворки. Жаль что такие как вы, бездумно пытаются забрать у него этот шанс. С другой стороны, я помню как пару-тройку лет назад все тоже самое писали про Vue, а лет 6 назад про React и ничего, прорвались. Невежды всегда остаются лишь невеждами.

    Про «святое»


    action52champion: Когда про реакт в начале его популярности писали даже в Спидинфо, было всё то же самое, только с одной разницей — реакт решал какие-то проблемы разработки. Даже если не решал, то он смог родить вокруг себя за 3 года такую мощную экосистему, которая перечеркнула все его недостатки. Я ненавижу реакт, но понимаю, что если не буду использовать его, то попросту проиграю в эффективности тем, кто его использует, имея доступ ко вкуснейшим компонентам и библиотекам. Не используя Svelte я не теряю ничего.

    Не хотел бы улгубляться в тот вопрос, дабы никого не обидеть. Скажу лишь, что часто тот же React часто критикуют именно за «заточенность» под особенности проблем корпоративной разработки Facebook. Оно и понятно, Facebook делает React прежде всего для себя и далеко не все решения, которые хороши для Facebook, хороши для ваших проектов, но жаловаться некому.

    React в целом хороший фреймворк, который подходит многим проектам, особено когда нужна отличная поддержка Typescript. Но он далеко не идеален и ему определенно нужны альтернативы.

    Про всякое разное


    action52champion: Сам подход минимализма, который предлагает Svelte недостижим в принципе. Я не могу представить ситуацию когда целесообразно будет использовать не чистый JS или VueJS, а Svelte. Vanilla JS как преимущество, когда тайпскрипт стал уже практически стандартом для написания сложных проектов? Попытки выиграть в размере кода на мелком проекте, где большая часть это сторонние компоненты и библиотеки? Выиграть на размере фреймворка в по-настоящему крупном проекте? Отсутствие Virtual DOM, но взамен него костыль в виде очередного уровня транспиляции заложенной в саму суть фреймворка? Write less code? При нулевой экосистеме? Причем заметьте, что в примерах на сайте рассматриваются именно крохотные компоненты, на которых разница достигается только за счет того, что в Vuejs и React есть какая-то инициализация компонента или описание редьюсеров, которые сделаны не просто так.

    Блиц вопрос, отлично.

    1. Минимализм достижим. Проблемы с этим возникают тогда, когда в саму основу решения заложен иной принцип. Например, Reduх по своей сути не может быть минималистичным из-за заложенного в него обилия бойлерплейта. В тоже время Storeon, работая по-сути по тем же принципам, остается минималистичным. В целом все современные фреймворки стремятся дробить свои компоненты как минимально возможные юниты. Кроме того, нужно понимать как писать максимально декларативный и state-driven код.
    2. Это не выбор между Vanilla JS и Svelte. Svelte — это и есть Vanilla JS, который вам не нужно писать и который в разы проще поддерживать и развивать.
    3. Typescript + сложные проекты — опять звучит как «мы все тут пишем энтерпрайзы», ну-ну. Не нужно обобщений и не нужно себе льстить. Далеко не все пишут сложные проекты в которых обязательно нужен TS. Хотя если он вам так нужен, тогда о каком Vue может идти речь? Поддержка TS там ± такая же как в Svelte.
    4. Мы уже выяснили, что вы не понимаете что такое Virtual DOM. В Svelte заложен механизм трекинга зависимостей в момент компиляции, который в разы упрощает механизмы change detection и применения изменений в рантайме. За счет этого мы получаем значительный прирост в скорости и низкое потребление памяти.
    5. Про экосистему уже писал выше. Она далеко не нулевая. Лично участвовал в переписывании проектов с React и Vue. Кода получается в среднем в 1.5 раза меньше, а сам код выглядит лаконичнее и аккуратнее.
    6. Раз вам не нравятся примеры из документации Svelte. Можете предложить более серьезные на ваш взгляд кейсы из документаций других фреймворков?

    Обычно, чтобы кратко объяснить как работает Svelte я использую такую формулировку:

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



    И этот подход сильно отличается даже от Vue, в котором SFC не более чем более удобный способ записи Vue.extend.

    Про сообщество


    action52champion: Говорят, что у Svelte большое русскоязычное коммьюнити. Я его не вижу, вижу только евангелистов, каждый из которых проповедует за десятерых.

    Рад что вы спросили об этом. Русскоязычное сообщество представлено основным чатом в телеграмм (@sveltejs), отдельным чатом для фреймворка Sapper (@sapperjs), каналом с вакансиями (@sveltejs_jobs) и новостями (@sveltejs_public), а также группой в VK (@sveltejs_ru).
    Основная движуха идет в чате в котором уже больше 1,5К человек и довольно бодрый костяк активных товарищей.




    На нашем первом оффлан митапе 22 февраля в Москве было более 170 человек, а онлайн трансляцию смотрели почти 1К посетителей. Следующий митап должен был быть в Питере в апреле-мае, но пандемия внесла свои коррективы в наши планы. Надеюсь скоро все наладится и мы продолжим. Можете следить за нашими митапами на официальной странице Svelte Russian Meetups.

    Посмотрим кто еще говорит о Svelte. К примеру, вот уважаемый Андрей Мелихов (Девшахта) рассказывает как Яндекс.Деньги используют Svelte:



    Вот, буквальная цитата Андрея Ситника (автор PostCSS/Autoprefixer/etc) на прошлогоднем HolyJS Piter:
    «Svelte — это честно говоря самое лучшее изобретение в мире Javascript фреймворков которое было. Мы не должны говорить про хуки, мы должны говорить про Svelte.»

    И хотя, скорее всего это было сценическое преувеличение, его постоянные твиты и ретвиты о Svelte не дают усомниться в его искренности.



    Я конечно не сомневаюсь, что мой уважаемый интервьюер умнее нас всех… хотя нет, сомневаюсь. Извините, мысли вслух.

    Про (НЕ)осознанность


    action52champion: Контраргументы уровня — вы просто не смогли разобраться со Svelte — это вообще за гранью юмора. Люди, которые работают с ангуляром и реактом не могут разобраться в с маленьким простым Svelte? Наверное тут дело в самом Svelte. Или в том, что там в принципе не в чем разбираться, потому что ничего стоящего нет.

    Кажется я уже отвечал на подобный вопрос, но готов повторить, раз вы предоставили мне такую возможность. Одна из проблем, которую лично я вижу в плане продвижения Svelte — это то, что визуально он слишком похож на фреймворки Большой тройки, хотя концептуально отличается довольно сильно. Особенно это ощущалось в Svelte 1/2, когда в сообщество и комментарии Хабра приходили люди и искрене не понимали чем Svelte отличается от Vue. И действительно, в тот момент оба были слишком похожи на Ractive. С выходом Svelte 3 различия стали ярче, но это не решило проблему полностью.

    Именно поэтому люди приходящие в Svelte чаще всего тащат туда те же подходы, которые они использовали в других фреймворках, не понимая что Svelte может предложить более изящные решения тех же задач. Вы даже не представляете сколько подобных кейсов мы рассматриваем в нашем чате буквально ежедневно и чаще всего люди уходят с комментарием «а чо так можно было?».


    Про (НЕ)популярность


    action52champion: Когда им задают вопрос «зачем нужен ваш фреймворк, который не взлетает уже 3 года при имеющейся тройке?», то в ответ слышны лишь шутки про то что на вкус все фломастеры разные. Это достойный ответ для кучи технологий в ИТ, но только не для фронтенда и только не для реактивных фреймворков. Еще 5 лет назад этого добра было навалом, всех уже и не упомнишь. Но как-то эволюционно мы пришли к тройке лидеров, к тому что нужно отрасли. Вокруг лидеров сформировалось коммьюнити и экосистема. Мы пришли к набору фломастеров, каждый из которых солёный и легко кладется за воротник(хоть это и тема для другого разговора). Суть в другом — к фломастерам есть определённые требования, которым надо соответствовать.


    А вы провокатор, однако! ))) Хотя многие сочли бы это достоинством интервьюера, я все же считаю что нужно хотя бы чуточку разбираться в сабже, чтобы не выглядеть глупо в своих провокациях.

    «Вы опять все проспали, голубчик». (с) Смотрите StateOfJS 2018 — Svelte в топ-1 среди «Other libraries», а в прошлом 2019 году стабильно вошел в основной пул frontend фреймворков, при этом лидирует по критерию «интереса» к нему:



    Так что прогресс налицо. Однако также на лицо абсолютное непонимание простейших законов рынка. Когда рынок «пустой», его еще называют «голубой океан», то и занять его просто, особенно когда за тобой стоит Facebook. Когда рынок конкурентный (алый океан), то выйти на него намного сложнее. Поэтому логично что со временем выход в лидеры начинает занимать больше времени, но ведь это же говорит и об обратном — если ты смог выбится в лидеры на высококонкурентном рынке, да еще и без денег и PR-а, значит твой продукт действительно достоен.

    В конце концов, посмотрите сколько существует вокруг всевозможных фреймворков/библиотек/платформ/$mol-ов и далеко не все из них встают в один ряд с Большой тройкой. Да хотя бы просто имеют свой хаб на популярном IT ресурсе и подсветку кастомного синтаксиса на Github.

    У Svelte все это уже есть, но конечно же не просто так, а благодаря работе сообщества. Он уже достаточно популярен чтобы иметь кучу статей на Medium и Dev.to, кучу обучающих и иных видео на Youtube и множество всевозможных готовых решений. Не корите себя, все ошибаются.

    Про OSS


    action52champion: Svelte не соответствует этим требованиям. За время существования Svelte, сравнимое со временем существования других фреймворков до получения ими признания, вокруг Svelte не сложилось ничего. Ах, за тройкой стоят корпорации? Господа, вы вроде как претендуете на то что у вас замечательный фреймворк. Почему вы не можете найти финансирование для своего замечательного фреймворка? У вас же на сайте куча логотипов в секции Who's using Svelte?.. Может с ним что-то не так? Вы уверены, что если его допилить, то получится не второй VueJS только сырой?

    Как мы уже выяснили ваше, за 2 года с начала популяризации Svelte и/или за 1 год с выпуска его популярной версии, вокруг него сложилось много всего, поэтому считаю этот вопрос голосновным.

    Однако, важно упомянуть еще одну вещь: Svelte — это чисто community driven проект и сообщество не хочет быть ангажированно и аффилировано с какой-либо корпорацией. Буквально недавно, кто-то из сообщества завел разговор о Патреоне для автора фреймворка, но сам автор пресек даже эти обсуждения. Я понимаю, что многие привыкли пользоваться благами OSS за просто так и даже предъявнять к ним свои бизнес-требования. Но на самом деле люди делающие OSS вам ничего не должны, уважаемые, а вот многие из нас могли бы и поучаствовать в OSS проектах, а не тупо зарабатывать деньги на чужих решениях.

    Касательно Svelte, те самые «не такие» корпорации помогают нам по-другому. Например, Mail.Ru, очень помогли нам с первым в России митапом по Svelte. Предоставили свой прекрасный офис с оборудованием, печеньками, взяли на себя организацию трансляции и записи. Спасибо Mail.Ru!

    Про то-то что


    action52champion: Вы уверены, что в праве советовать этот фреймворк так категорично? Фронтенд — это область куда каждый день приходят новые люди без опыта. Они не в состоянии оценить масштаб ненужности Svelte. Они увидят хвалебные статьи где умные дядьки с серьёзным видом рассуждают о том какой там замечательный проброс событий, компилятор и т.д. Что интересно с академической точки зрения, но не с практической. Они подумают что с этим стоит связываться, потратят свое время и останутся ни с чем. А выдавая пачками статьи про то, как замечательно на Svelte можно сделать какую-то хрень, которую можно так же сделать на нормальных фреймворках, вы подкладываете начинающим людям огромную свинью.

    Мой любимый вопрос! Почти как вишенка на торте.

    Да я уверен что я в праве и вот почему:

    • Я знаю о чем говорю. Использую Svelte в своей работе и выкладываю решения в OSS.
    • Являюсь лицом принимающим решения по выбору технологий и отвечаю за успех проектов.
    • У меня есть с чем сравнивать. Кроме Svelte, имею опыт со многими фреймворками сейчас и в прошлом (Backbone, AngularJS, Ractive, Riot, Vue/Nuxt, React, LitElement).
    • Много общаюсь с теми, кто также использует Svelte и часто помогаю тем, кто хочет его изучить. Слышу их проблемы и стараюсь всегда предлагать решения.
    • Читаю доклады про Svelte и готов предметно отвечать на вопросы.

    Спасибо, уважаемый Экшн Чемпион, за то что пригласили и дали мне возможность еще раз рассказать про такой замечательный фреймворк как Svelte! Спасибо за ваши продуманные, прекрасно сформулированные вопросы и поднятые темы. Всего вам доброго и хорошего дня!



    P/S


    Интервью закончилось, а теперь алаверды. А вы, уважаемый @action52champio, уверены что вправе хаять инструмент, который не только не использовали, да и в глаза толком не видели? Какой у вас практический опыт со Svelte, да и вообще есть ли он хоть с одним из фреймворков? React вы не любите, во Vue не разбираетесь. Angular? Нет, не думаю.

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

    UPDATE:


    Пользуясь случаем, приглашаю всех на онлайн-митап с участием автора Svelte, на котором он будет отвечать на наиболее интересные вопросы, которыми были собраны из сообщества:
    sveltesociety.dev

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 238

      +6
      Интересно, почему позитивные статьи про Svelte набирают меньше положительных голосований, чем то, что стало причиной написания этой статьи? Даже если посмотреть на старые годные, где много хорошего мяса и кишок. Вообще, по ощущениями от Svelte у многих дико бомбит — мне кажется меньше, чем при появлении Vue например.
        +19
        Вообще, по ощущениями от Svelte у многих дико бомбит — мне кажется меньше, чем при появлении Vue например.

        Слишком агрессивный пиар, даже для хабра «слишком». Бомбит-то людей от этого, со svelte как с инструментом — всё нормально. Ну сырой, ну молодой еще, ничего сверхъестественного.
          +4
          А можно пример, в чем именно агрессивный? Например данная статья написана довольно спокойно. Доклады про svelte, что я видел — тоже адекватные. Статья-причина написания этой, как раз написана в довольно хамском тоне. В чем же агрессия? Я не видел, например, в статьях про React комментариев, типа бросай свое и пиши на истинном фреймворке.
            +14
            А можно пример, в чем именно агрессивный?

            Здесь на хабре — например, неоднократно декларировалась (сейчас я уж не скажу, в статьях или только в комментах, но в комментах точно) точка зрения вида «если вам что-то не нравится (например, длительный игнор встроенной поддержки тайпскрипта) — то дело в вас, а svelte развивается идеологически правильно».

            Короче, когда пишешь, что именно тебе не нравится, а в ответ неизменно получаешь «ну это проблема на вашей стороне, а на нашей всё прекрасно» — это очень такой себе стиль пиара.
              0
              Я видел несколько комментариев, но на мой вкус там и правда была проблема «на вашей стороне». И видел такие комментарии с чистой вкусовщиной — я привык по другому и т.д.
                +2
                А вообще мне кажется, что у Svelte очень дружелюбное комьюнити — в телеграм-чате отвечают довольно вежливо и даже на глупые вопросы. Имел опыт общения с одним комьюнити С++, так там на любой вопрос получишь тонны ненависти к себе. Правда стоит сказать, что это было лет 6 назад, возможно атмосфера изменилась.
                  +1
                  Коммьюнити действительно хорошее, что отечественное в телеграме, что англоязычное в дискорде, я с этим никогда и не спорил.
                    0
                    Правда стоит сказать, что это было лет 6 назад, возможно атмосфера изменилась.

                    Да вроде не особенно. Недавно они "своего" перед баном отправили к нам, в Rust-тусовку. Шутники.

                    +2
                    Было бы не плохо использовать какие-то конкретные примеры для аргументации. Насколько я помню, большая часть протагонистов просто выдавала свои субъективные мнения за объективную реальность, требуя «правильных» ответов взамен тех, которые им давали.

                    Я пишу статьи не для того, чтобы давать людям субъективно правильные на их взгляд ответы, а чтобы рассказать об инструменте и своем опыте с ним.

                    Странно приходить из React во Vue и с порога требовать, условно говоря, делать `this.setState({ foo: 1 })`, а не `this.foo = 1;`. А если оказывается что setState вовсе не нужен и есть способ лучше, уходить ворча, что все не так, да не эдак.

                    В телеграм чат часто приходят с готовым решением задачи, которое нужно срочно натянуть на Svelte, даже если оно натягивается с трудом. Такова природа человека — сперва мы пытается работать так как привыкли. Я и другие ребята в чате, кто активно юзает Svelte, всегда предлагаем говорить о сути задачи и стараемся предложить более подходящее решение. Собственно об этом я написал в разделе «Про (НЕ)осознанность». Если есть возможность перечитать — сделайте это пожалуйста.
                      +6
                      Хотя если он вам так нужен, тогда о каком Vue может идти речь? Поддержка TS там ± такая же как в Svelte.

                      TypeScript — это не синтаксический сахар для корпораций, это автоматизация работы/тестирования, статический анализ, вместе с Реактом шел Flow, а затем и полноценная поддержка TS.

                      Писать на чистом JavaScript в 2020 — это откат назад, в прошлое, где нужно проверять типы руками и писать тесты там, где TS покрывает этот код автоматически, синтаксисом.

                      Та же проблема с Angular и шаблонами в нем, с учетом директив, пайпов и всего того, что можно засунуть в шаблон — это нереальная боль. С другой стороны во всем остальном, Angular полностью поддерживает TS.
                      Последняя версия Vue достаточно хорошо поддерживает типизацию из коробки, но до Реакта далеко.

                      Конечно, есть инструменты для статического анализа и шаблонов ангуляра и Svelte, но говорить в 2020 году, что статическая типизация во Frontend только для корпораций — это провокация или глупость.
                        +1

                        Да нет, поддержка TS в Ангуляре далеко не полная. Вот что я с ходу помню:


                        1. Всевозможные View/Content Child/Query никак не проверяются на корректность. Можно написать какую-нибудь ерунду вроде @ContentChild(Foo) foo: Bar и она успешно скомпилируется, хотя казалось бы ошибку заметить несложно. Плюс сюда же накладываются нетипизируемые щаблоны, из-за которых при выборе по id может попасться объект вообще любого типа — счастливой отладки, блин.


                        2. Они же не дружат со строгим режимом и проверками на null.


                        3. При динамической загрузке модулей под видом NgModule в рантайме может оказаться NgModuleFactory.


                    +12
                    А можно пример, в чем именно агрессивный? Например данная статья написана довольно спокойно.


                    Да собственно прям с первых абзацев — переход на личности:
                    Немотря на то, что автор оригинальной статьи, уважаемый action52champion, явно находится в депрессивном состоянии,

                    Ставить подобные диагнозы, это уже перебор.
                      +2
                      Да собственно прям с первых абзацев — переход на личности:

                      А вы оригинальную то статью читали? Если не уловили, то там речь шла только о моих статьях, поэтому все набросы, коих там полно, также адресуются мне.

                      Ставить подобные диагнозы, это уже перебор.

                      Никто не заставлял автора оригинальной статьи писать ту фразу, которую он написал. Дальше каждый делает выводы. Я сделал вывод, что фраза про «психотерапевта» и «выговариваться мне придётся вам» в скопе с явно нервозным тоном публикации, может говорить о наличии депрессии.

                      Более того, обратите внимание что за последнее время никаких особых статей про Svelte не выходило. То есть тезис о том, что автора прям так вот до невозможности достали постоянно выходящие статьи также не подтверждается.
                        +5
                        Я, признаться, был изрядно удивлен, когда увидел диагноз. Настолько, что прям промотал вверх и кликнул в профиль, чтобы убедиться что это тот самый PaulMaly. Право, так не стоит :)
                          0
                          Каюсь, не удержался) Уж такая забавная фраза была в оригинале))
                      +1
                      В этой статье переход на личности прямо во втором параграфе:
                      автор оригинальной статьи, уважаемый action52champion, явно находится в депрессивном состоянии, вероятно вызванном самоизоляцией и мировым кризисом
                      На мой взгляд, Хабр не площадка для персональных нападок и всякой соловьёвщины, такое на заборе-то противно читать.
                      +2
                      вы путаете с $mol
                        +3
                        Нет, не путаю, но категорическая неспособность (или категорическое нежелание, не берусь судить) авторов ставить себя на место собеседников — очень похожая в обоих случаях, да.
                          –4

                          А что на вашем месте такого особенного, что все должны ставить себя на него?

                      +5
                      Вообще, по ощущениями от Svelte у многих дико бомбит — мне кажется меньше, чем при появлении Vue например

                      Парадокс Блаба в действии, я считаю. Люди привыкли жить в уютном теплом мирке любимой технологии и яростно сопротивляются подсознательным мыслям «А вдруг действительно окажется лучше и все перейдут на него, а я останусь не удел… Надо переучиваться? Но я боюсь переучиваться. Нет! Нет! И еще раз нет! Я не настолько хорош, чтоб освоить новый фреймворк/язык».

                      Svelte другой, а люди боятся нового по своей природе, вот и все.
                        +1

                        Может не настолько, но времени, инвестированного в изучение реакт/ангулар/вью/… жалко

                          +2

                          А чего жалеть — оно же не прошло даром. Уверен, что человек, знающий на среднем уровне что-то из большой тройки svelte осилит за пару вечеров. Современные фреймворки близки идеологически — большое внимание на реактивность в той или иной интерпритации. Разница только в реализации.

                          +2
                          Svelte другой, а люди боятся нового по своей природе, вот и все.

                          Меня более смущает не то что он другой, а то что он такой же.


                          Например другой подход — это скажем нативные веб-компоненты или Polymer в качестве адаптера для браузеров не поддерживающих веб-компоненты.


                          Все эти "разности" большой тройки+svelte быстро исчезают если абстрагироваться от мелких деталей.


                          Особенно весело выглядят в разных статьях примеры кода на Angular/React/Vue/Svelte (выбрать один из вариантов по своему усмотрению) после которых победоносно дается другой пример кода с эпиграфом: "А теперь зацените как это можно написать на Svelte/Vue/React/Angular" — и приводится фрагмент кода в стиле найдите N > 0 отличей.

                            +1

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

                              +3

                              А когда показываешь что-то совершенно другое, все плачутся, что всё слишком не похоже на то, к чему они привыкли.

                                0
                                Это кстати одна из постоянных тем в дизайне Svelte. Соблюсти баланс между привычным и удобным, и новыми идеями и подходами, невероятно сложно. Если перегнуть палку, то инструмент получится кардинально другой и его будет сложно понять. Если недогнуть, тогда инструмент не будет выделяться чем-то особенным и пройдет мимо. Мне кажется, что Svelte 3 удалось найти некий баланс между двумя этими крайностями и это частично повлияло на то, что он выстрелил.
                                0
                                Кстати довольно верная мысль. Примерно это я и пытался выразить в разделе «Про (НЕ)осознанность».

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

                                Иными словами да, Svelte делает многие вещи по-другому, местами удобнее и лаконичнее, но в масштабе это точно также же компонентный фреймворк, как и React или Vue.

                                Поэтому я и написал в статье, что вовсе не утверждаю что Svelte — это обязательно и бесповоротно фреймворк будущего, но то что он уже на пороге Большой четверки я не сомневаюсь.
                                0

                                Другой смол, а не это)

                              +4

                              Спасибо этим срачам, я нашёл время и посмотрел на svelte подробнее. 32000 звёзд на гитхабе внушают уважение и снимают вопросы о популярности.


                              В Svelte заложен механизм трекинга зависимостей в момент компиляции, который в разы упрощает механизмы change detection и применения изменений в рантайме.

                              Где прочитать как это работает внутри? В туторале я видел сомнительные штуки вроде obj = obj, чтобы запустить этот самый change detection.


                              Что будет, если я в цикле начну менять свойства объекта, запуская change detection. Я рискую 1000 раз запустить рендер или же рендер запустится после цикла и будет только одна отрисовка? Опять же — как это работает?


                              Смущает этап компиляции, не сломает ли он мой код? Хочется знать как конкретно оно работает.

                                +3
                                Вот есть несколько роликов c мясом компиляции www.youtube.com/watch?v=d_4S45kHoEc
                                  –2
                                  Ну как бы гораздо быстрее просто взять и проверить самому. Это же элементарно.
                                  Вот: svelte.dev/repl/d69576cba0944f0daabca709ff928b11?version=3.21.0
                                  P.S. это заняло у меня аж целых 2 минуты от силы, это гораздо меньше, чем время, затраченное вами на написание этого комментария.
                                    +6
                                    Ну для новичка в технологии не всегда все очевидно, например наличие REPL=))
                                      +1

                                      Наличие REPL сейчас уже стандарт.

                                    0
                                    Где прочитать как это работает внутри?

                                    Вот тут и вот тут. Там нет ничего более сверхъестественного, кроме заворачивания ваших деклараций в то, что предоставляет svelte/store. И да, у этого есть конечно же есть caveats, типа необходимости объявлять что-то только на верхнем уровне модуля, чтоб это было завернуто в стор.

                                    Смущает этап компиляции, не сломает ли он мой код? Хочется знать как конкретно оно работает.

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

                                    EDIT: Пардон, не «исходники», а результат компиляции, конечно же. Этого скорее всего достаточно будет для понимания множества проблем.
                                      +2

                                      svelte/store никак не связан с механизмом реактивности Svelte. Это минималистическая реализация сторов аля Observable, работает в рантайме, т.е. спокойно можно использовать отдельно от Svelte, в своих проектах.

                                        0
                                        Да, спасибо за уточнение.

                                        Это минималистическая реализация сторов аля Observable, работает в рантайме, т.е. спокойно можно использовать отдельно от Svelte, в своих проектах.

                                        В сравнении с той же MobX — это тачка vs 18-wheeler, всё ж таки. Синтаксического сахара никакого, наглядности в коде тоже особо не создаётся. Ну да, имплементация атома — но их таких десятки.
                                          +3

                                          В вашем сравнении, я бы сказал, что это скорее колесо от 18-wheeler. Минимальный кирпичик, легко кастомизируемый под совершенно разные задачи. Реализаций сторов миллион, и Svelte совсем не обязывает использовать коробочный вариант, можно и MobX использовать. Для коробочного варианта фреймворк предлагает "сахар" в своих компонентах в виде автоподписок, но этот же "сахар" будет работать со всем observable-подобным(т.е. любой объект с методом subscribe), например популярный RxJS.

                                    +15

                                    PaulMaly, спасибо за статью. Получилось почти что неплохо. Но лично для меня


                                    интересной и главное НЕ злой, представив все как некое подобие интервью автора оригинальной статьи со мной

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


                                    Если выкинуть все эти переходы на личности и эмоции с вашей стороны, то статья отличная

                                      +3
                                      Справедливости ради, статья, на которую тут написан ответ — с технической стороны вообще крайне слабая, а уж дальнейшие рассуждения автора за Shadow DOM / Virtual DOM — вообще вызывают фейспалм, отчётливо видно, что он просто совсем не в теме.
                                        +7

                                        Я не защищаю оригинальную статью.


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


                                        Представьте, какой-нибудь студент будет брать интервью у Uncle Bob'a, а тот будет ему отвечать, что тот вообще не рабирается в программировании и архитектуре, и должен сперва что-то сделать достойное, чем вообще разговаривать

                                          +5
                                          Если студент будет наезжать при интервью, типа что вы тут навыдумывали, какая архитектура, я писал сортировку и мне не нужно было, то вряд ли с ним будут вежливо разговаривать.

                                          Но каждый, конечно, должен отвечать за себя.
                                            +11

                                            Как говорится:


                                            Никогда не спорьте с идиотами. Вы опуститесь до их уровня, где они вас задавят своим опытом.
                                              +1
                                              А это хороший вопрос к размышлению, нужно ли реагировать на такой идиотизм или лучше его просто не замечать) В каждом кейсе есть + и -.
                                                0
                                                Из плюсов, воспользовавшись поводом, еще раз рассказать всем про Svelte ;-)
                                                  +2
                                                  <sarcasm>Слишком много агрессии рассказывать про что-то!</sarcasm>
                                                    –2
                                                    Можно еще заминусовать мой комментарий, но факт остается фактом.

                                                    Было
                                                    image
                                                    Стало


                                                    Не так уж и плохо за пару дней для «непопулярного» фреймворка.
                                            0

                                            (удалено, дубликат)

                                            +1
                                            этом пункте вы полностью провалились.

                                            Эх, я очень старался, честно.))) Возможно сыграло то, что все посылы оригинальной статьи были так или иначе направлены на меня. Только в более завуалированной форме. Я предпочитаю открытость и честность.
                                              +7

                                              Мне кажется, если бы вы оставили статью на ночь, переспать, и перечитали со свежей головой, то половину негатива бы выкинули.


                                              Меня зовут Павел Малышев, я автор всех тех замечательных статей, которые так «переполняют» тебя

                                              Например, последнюю сноску можно выкинуть, от этого статья ничего не потеряет, а вы выиграете +1 к уважению


                                              Чем меньше эмоций, тем солиднее и полезнее выглядит статья, имхо.


                                              Но все равно спасибо, я узнал пару интересных технических вещей для себя.

                                            –1

                                            Возможно евангелисты Svelte проплачены психотерапевтам, а код тут совсем не при чем. В следующих статьях будут прямые номера?

                                              +1
                                              PaulMaly хотелось бы узнать, над чем сейчас идет работа, какие новые фичи планируется добавить в svelte
                                                0
                                                Есть стремления вывести Sapper в 1.0 и добавить таки поддержку Typescript. Рич еще в тихую пилит Svelte GL, который в будущем можно будет использовать для 3D графики и интерфейсов к VR.

                                                В самом Svelte сейчас по факту community-stage, когда сообщество уже получило на руки рабочий инструмент и наращивает экосистему вокруг него.

                                                Надеюсь мне удалось ответить не агрессивно ))))
                                                  0

                                                  Правильно ли я понимаю, что TS можно и сейчас использовать в svelte-компонентах, нельзя только в реактивность через метку $?

                                                    0
                                                    TS можно прикрутить через препроцессоры, и это вполне даже работает. Естественно, что что-то не укладывающееся в нормальный код, типа $ — TS сам по себе не поймет. Но за исключением этого — работает.
                                                      +2

                                                      Ну тогда некорректно говорить, что ts не поддерживается — скорее поддерживается, кроме пары фич. А что через препроцессоры — так вроде альтернатив то нет. Браузеры в ts не умеют, вроде даже Deno транспилирует перед выполнением.

                                                        0
                                                        Поддержка TS есть только внутри script и только с использованием специального препроцессора для компилятора Svelte. В шаблонах поддержки типов нет из-за отсутствия поддержки кастомных DSL в самом TS.

                                                        То есть мы устанавливаем препроцессор в настройки компилятора (например можно юзать сразу пакет препроцессоров svelte-preprocess), выставляем тегу script аттрибут type=«typescript» и пишем TS.

                                                        Далее, во время сборки, сперва код проходит через компилятор TS, проверяются типы и все такое, потому уже сгенерированный TS-ом JS идет в Svelte.

                                                        Однако тут есть пара моментов:

                                                        1. Писать TS приходится с оглядкой на SvelteScript. Многие вещи TS не понимает, некоторые конструкции TS ломают компиляцию Svelte.
                                                        2. Процесс сборки становится в 2 раза дольше (2 компилятора)

                                                        Поэтому поддержка TS есть, но она не полная и сбоку.

                                                          –2
                                                            0
                                                            Насколько я вижу это не дает типизацию в шаблонах. Если я не прав, может есть ссылка где с помощью этой фичи реализована поддержка любого шаблонизатора?
                                                              0
                                                                0
                                                                Мне наверное надо глубже изучить Language Service Plugin, но по ссылке опять же Javascript-first код, котором появился кастомный синтаксис. А в Svelte у нас HTML-first код с кастомным синтаксисом и кажется в этом одно из основных отличий. Если опять ошибаюсь, можете меня поправить. Глубоко в Language Service Plugin не смотрел.
                                                                  –1
                                                                  Ну конечно же, плагин для TypeScript подразумевает, что вы в него встраиваете другой язык, иначе в чем смысл?
                                                                  Однако, можно типизировать html-шаблоны в шаблонных строках.

                                                                  И да, как я уже написал выше, это не просто какая-то блажь, основная боль в таких фреймворках — это вручную искать соответствие между шаблоном и кодом.

                                                                  И встроить в TypeScript шаблонные строки можно и достаточно несложно. А вот наоборот как подтягивать в кастомный html все структуры и интерфейсы для сопоставления типов из языка программирования, с нынешними инструментами — это большой вопрос.

                                                                  Но конечно, смысла говорить об этом с людьми, которые считают других психически больными, а сами вручную на чистом JS бегают ищут ошибки типов и думают, что автоматизация — это удел корпораций, нет, с такими людьми спорить бесполезно.
                                                                    –1
                                                                    Ну конечно же, плагин для TypeScript подразумевает, что вы в него встраиваете другой язык, иначе в чем смысл?
                                                                    Однако, можно типизировать html-шаблоны в шаблонных строках.

                                                                    Svelte уже HTML-first и, как я писал выше, и мы в очередной раз выяснили, TS не дает средств работы с такими вещами. Шаблонные строки это тот же JS и никто не сомневается что TS дает работать с JS. Другое дело, что загнать любой кастомный DSL внутрь шаблонных строк тоже не получится. Это просто не удобно.

                                                                    Но конечно, смысла говорить об этом с людьми, которые считают других психически больными, а сами вручную на чистом JS бегают ищут ошибки типов и думают, что автоматизация — это удел корпораций, нет, с такими людьми спорить бесполезно.

                                                                    Я вам ничего плохого не писал и конкретно с вами был весьма корректен. Не нужно строить из себя Робина Гуда, пожалуйста. Это вы пришли в мою статью по той теме, которая вам не интересна. Стали отвечать на мои комментарии и давать решения, не соответствующие проблеме.

                                                                    Вы можете писать что угодно, но «караван идет». В будет идти дальше.
                                                                      0
                                                                      Это вы пришли в мою статью по той теме, которая вам не интересна.

                                                                      Да, все уже поняли, вы видите всех насквозь. И про меня все знаете. И даже куда мне ходить и что мне интересно.
                                                                      Стали отвечать на мои комментарии и давать решения, не соответствующие проблеме.

                                                                      Я даю комментарии, отвечающие проблеме, если вы их не понимаете — перечитайте еще раз.
                                                                      Svelte уже HTML-first и, как я писал выше, и мы в очередной раз выяснили, TS не дает средств работы с такими вещами.

                                                                      Для вас не дает. Только вы зачем-то зашли в мой комментарий и даете ответ на мой комментарий, который написан не для вас (как я уже сказал, с вами спорить бесполезно). Он написан для людей, которым важна эффективность, а не религиозные высказывания про корпорации, html-first или психику других людей.

                                                                      HTML — это строка, строки можно типизировать с помощью плагинов в TypeScript, пример я скинул.
                                                                      То, что Svelte не поддерживает полноценно из коробки TypeScript и делает неудобным работу с HTML — это проблема Svelte, можете называть ее html-first, если так хочется.
                                                                        0

                                                                        Давайте я лучше расскажу в чём проблема. HTML, как и любой DSL, конечно, можно засунуть в строку, но тут есть проблемы, которые MS всё никак не торопится решать в TS:


                                                                        1. Чтобы показывать подсказки в этой строке нужно иметь информацию о доступных в контексте её написания типах.


                                                                        2. Нет возможности предоставлять тайпскрипту типы, декларируемые в такой строке. Для компилятора это всего лишь строка, не более.


                                                                        3. Соответственно, компилятор не протайпчекает стык между TS и DSL.


                                                                        4. И конечно на выходе он выдаст в рантайм строку, которую ещё надо будет распарсить и транспилировать в рантайме.


                                                                          –2
                                                                          Это никакая не проблема HTML в TS, это проблема конкретных шаблонизаторов.

                                                                          Вот пример с lit-html.

                                                                          Обратите внимание, шаблонные строки — это не просто строки: «Шаблонными литералами называются строковые литералы, допускающие использование выражений внутри.».
                                                                          Вот эти самые выражения уже типизированы из коробки. Если этого недостаточно, вы можете добавить какую-то функциональность с помощью плагина.

                                                                          1. Эта информация есть, либо через выражения, либо через плагин.
                                                                          2. --=--
                                                                          3. --=--
                                                                          4. HTML-файл шаблона — это тоже просто строка, это причем тут вообще, это дело фреймворка уже, что он хочет строки использовать. А если вы просто, как красиво в реакте реализовали JSX — то абсолютно с вами согласен.

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

                                                                            Когда вы пишете всякие ${} вы фактически выходите из строки обратно в JS. Код вида:


                                                                            foo`xxx${bar}yyy`

                                                                            фактически является синтаксическим сахаром для:


                                                                            foo( 'xxx', bar , 'yyy' )

                                                                            Внутри строки же всё автодополнение ограничивается некоторыми захардкоженными вариантами и не включает то, что вы пишете в коде.


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

                                                              0

                                                              Более того, есть и тикет с подробным описанием, как этого достичь в Svelte. Перспективы на поддержку Typescript в Svelte очень радужные.

                                                                0
                                                                Более того, есть и тикет с подробным описанием, как этого достичь в Svelte.

                                                                Да видел, но кажется там немало подводных камней.

                                                                Перспективы на поддержку Typescript в Svelte очень радужные.

                                                                Буквально час назад они стали еще более радужными, после выступления на Svelte Society Day чувака из MS, который рассказал как они попробовали Svelte на внутреннем хакатоне, как он им очень понравился. И вроде как в MS есть даже планы на нативную поддержку Svelte со стороны Typescript. Но эту информацию еще нужно проверять.
                                                  +2
                                                  Немотря на то, что автор оригинальной статьи, уважаемый action52champion, явно находится в депрессивном состоянии, вероятно вызванном самоизоляцией и мировым кризисом, о чем прямо пишет сам:

                                                  Очень грязный ход. С самого начала поставили человеку диагноз по статье, а дальше пишете в стиле «ну а что с этого психа спрашивать».
                                                    –3
                                                    Возможно. С другой стороны action52champion также никто за язык не тянул. Наверное…
                                                      +2

                                                      все верно, кто из нас в садике не говорил: «А он первый начал» — пусть первым бросит камень.

                                                    +5

                                                    Как мне кажется, дело здесь совсем не в Svelte, а в остальных популярных фреймворках, на которые все регулярно пеняют, что они медленные и сложные. Svelte здесь приходится ко столу, как "молодой и перспективный", вот его регулярно и припоминают.


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


                                                    Хотя всё дело обычно в нашем собственном коде, а не зависимостях.

                                                      +2
                                                      Стоило ещё упомянуть про канал со списком вакансий для Svelte @sveltejs_jobs
                                                        +1
                                                        Есть там, в разделе про сообщество.
                                                        +2
                                                        Отдельное большое спасибо за обзор истории развития js-фреймворков!
                                                          +15
                                                          На всякий случай привожу тезисную выжимку претензий из моей статьи, на которую написан ответ, и комментариев оттуда:

                                                          — Количество вакансий на Svelte околонулевое
                                                          — Слабый результат в плане захвата рынка — VueJS достиг за 3 года большего чем Svelte за тот же промежуток времени.
                                                          — Агрессивное сообщество, считающее себя белым и пушистым
                                                          — Не в меру агрессивный пиар для столь непримечательного фреймворка — например посчитайте число статей на хабре по какому-нибудь Infernojs и по Svelte.
                                                          — Складывается впечатление, что фреймворк ставит во главу угла идеологию, а не решение практических проблем, что пытается решить проблемы, которые в принципе не решаемы в рамках веб-платформы.
                                                          — Фреймворк противопоставляется большой тройке, хотя ни по коммьюнити, ни по экосистеме не готов к этому.
                                                          — Есть проблемы интеграции Svelte с нативными веб-компонентами, причем это тянется аж с 18 года.
                                                          — Мажорные версии Svelte несовместимы между собой, при этом заявляется, что фреймворк готов для использования в продакшене.

                                                          Искренне желаю успеха Svelte, но лишь за счет победы в честной конкуренции с другими открытыми решениями, без использования SMM. А то дурной пример заразителен.
                                                            +2
                                                            — Мажорные версии Svelte несовместимы между собой, при этом заявляется, что фреймворк готов для использования в продакшене.

                                                            Эм, на то они и мажорные. По вашему, как завезли хуки в React или composition api в Vue3 — сразу вон с продакшена эти нестабильные фреймворки/библиотеки?

                                                              +3

                                                              Эмм, это же вроде немного разные категории. И Vue и React позволяют смешивать старое и новое API в одном приложении, позволяя переехать постепенно. А можно ли Svelte2 компоненты подключить в Svelte3 без переписывания?

                                                                +2

                                                                Через адаптер разве что. Но соглашусь пример не очень контекстный вышел, хотел сказать, что ничто не вечно и подходы работавшие много лет(приносящие деньги, позволившие стать популярными за 3 года и прочее по тексту) тоже переосмысливаются и заменяются. Svelte3 смог радикально поменять свою парадигму за счет немногочисленности его использования до v3. Изначально предполагалось написать тулинг для конвертации компонентов, но никто не просил и забылось. Если доживем до предпосылок необходимости v4, то такой фокус провернуть уже не получится.

                                                                  +1
                                                                  А можно ли Svelte2 компоненты подключить в Svelte3 без переписывания?

                                                                  Да, достаточно сделать один из них веб-компонентом.


                                                                  Сильная сторона Svelte — в интеграции с чем угодно, было бы очень странно если бы при этом его было нельзя интегрировать сам с собой.

                                                                    0
                                                                    Да, достаточно сделать один из них веб-компонентом.

                                                                    Таким образом можно интегрировать любой фреймворк с любым другим. Но при этом компоненты теряют важные возможности, вроде доступа к общему глобальному стору. Поэтому за полноценную интеграцию это не считается.

                                                                      +1

                                                                      Если компонент Svelte2 уже написан — то и используемый им стор тоже уже написан, а адаптер к нему для Svelte3 пишется без труда.

                                                                        +1

                                                                        Я все равно не понимаю. По уровню сложности интеграция Svelte2 и Svelte3 сравнима с интеграцией Svelte и Vue (например). Каких-то общих между v2 и v3 утилит тут нет. Где вы здесь видите особую легкость миграции?

                                                                  0
                                                                  Хуки завезли в миноре
                                                                  –10
                                                                  Я так понял, статью вы не осилили. Жаль, я так старался для вас. Если кратко — все что вы написали, в той или иной степени, НЕ соответствует действительности и является лишь плодом ваших собственных мироощущений.

                                                                  Почему? Все ответы есть в статье.
                                                                    +4

                                                                    PaulMaly, а можно раскрыть, в чем конкретно проблема в этом ишаке?

                                                                      0
                                                                      При компиляции в Web Components, который состоит из нескольких стандартов, среди которых Custom Elements и Shadow DOM, Svelte пытается использовать максимум возможностей встроенных в браузер. Иными словами компоненты получаются с использованием Shadow DOM для их изоляции. В этом ишаке предлагается, чтобы это поведение можно было настраивать.

                                                                      В целом думаю было бы не плохо иметь такую возможность. Однако так как компиляция в веб-компоненты не является приоритетной для Svelte, а переделывать это видимо не просто, думаю это предложение имеет не очень высокий приоритет.
                                                                        +2
                                                                        — Есть проблемы интеграции Svelte с нативными веб-компонентами, причем это тянется аж с 18 года.

                                                                        Ну это же скорее не проблема интеграции, а отсутствие фичи.

                                                                        +7
                                                                        Однако так как компиляция в веб-компоненты не является приоритетной для Svelte, а переделывать это видимо не просто, думаю это предложение имеет не очень высокий приоритет.

                                                                        Я уже не в первый раз замечаю, что вы то ли намеренно, то ли неосознанно отвечаете на каждый выпад в адрес svelte с максимально возможным сужением контекста. То есть, вот скажем, в этой ветке комментариев вы пишете «веб-компоненты — это не приоритетно, поэтому ничего удивительного, что чего-то не сделано», в то время как в соседней теме вы комментируете мой выбор вебкомпонентов, и пишите:
                                                                        Не взяли и не взяли. Дело ваше, проблем нет. Если вы умеете оценить свои потребности и риски, это отлично. У меня другой опыт, мы наоборот не взяли LitElement вот по каким причинам: 1) веб-компоненты не везде, полифилы работают коряво; 2) LitElement в сравнении со Svelte намного более громоздкий; 3) Svelte в любой момент можно скомпилировать в web components, на случай если они захавают мир (очень сомневаюсь).

                                                                        «Svelte в любой момент можно скомпилировать в вебкомпоненты», правда «компиляция в веб-компоненты не в приоритете, поэтому ничего удивительного, если у вас там что-то не сложится».
                                                                        Забавно.

                                                                        Мне вот правда интересно, вы намеренно ведете себя так, что вот эта вот статья прямо 100% про вас, или у вас это неосознанно выходит?
                                                                          +1
                                                                          Я, в свою очередь, не первый раз замечаю что вы пристально следите за моих блоготворчеством. Это приятно, спасибо! ;-)

                                                                          «Svelte в любой момент можно скомпилировать в вебкомпоненты», правда «компиляция в веб-компоненты не в приоритете, поэтому ничего удивительного, если у вас там что-то не сложится».
                                                                          Забавно.

                                                                          Не уверен, что понимаю что именно забавного вы тут видите. Это обычная логика и констатация фактов. Факты следующие:

                                                                          Факт 1: Компиляция в веб-компоненты мне может понадобиться в том случае, если они захватят мир. В данный момент до этого далеко, поэтому они не являются приоритетом.

                                                                          Факт 2:Svelte уже по всем тестам (ссылку давал где-то по треду) имеет прекрасную поддержку веб-компонентов. В случае если веб-компоненты начнут захватывать мир, приоритет их поддержки изменится и можно будет допиливать пожелания типа «хочу, чтобы Shadow DOM был опциональным». Главное, что их поддержка и принципиальная возможность компиляции в них уже существует.

                                                                          Какой из тезисов вам не понятен или как вы выразились «сужает контекст»?

                                                                          Мне вот правда интересно, вы намеренно ведете себя так, что вот эта вот статья прямо 100% про вас, или у вас это неосознанно выходит?

                                                                          Спасибо, ознакомлюсь на досуге.
                                                                    +1
                                                                    — Не в меру агрессивный пиар для столь непримечательного фреймворка — например посчитайте число статей на хабре по какому-нибудь Infernojs и по Svelte.

                                                                    Господа, не смейте писать статьи по интересующим вас темам больше нормы! За нормой, пожалуйста, в очередь к action52champion!

                                                                    action52champion, вы как себе это представляете? Люди пишут на интересующую их тему и вроде имеют на это право, согласно правилам Хабра. Если у какой-то темы много статей, значит есть неравнодушные люди, значит есть комьюнити.
                                                                      +5
                                                                      — Количество вакансий на Svelte околонулевое

                                                                      Без учёта вакансий где исполнителю дают право выбирать фреймворк на его усмотрение — это ничего не значит. Моим клиентам, например, совершенно всё равно, хоть на BF — главное результат в рамках заданных временных и иных параметров.


                                                                      — Агрессивное сообщество, считающее себя белым и пушистым

                                                                      В любом большом сообществе есть агрессивные элементы, считающие себя белыми и пушистыми.


                                                                      — Слабый результат в плане захвата рынка — VueJS достиг за 3 года большего чем Svelte за тот же промежуток времени.
                                                                      — Фреймворк противопоставляется большой тройке, хотя ни по коммьюнити, ни по экосистеме не готов к этому.

                                                                      Вспомните историю Линукса — ни рынка, ни большой коммьюнити, да и конкуренция ого-го — и так очень много лет. А потом как понеслось… Конечно, может не совсем корректно сравнивать операционку и фреймворк, но всё же — пока ещё рано подбивать итоги.


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

                                                                      +5
                                                                      Отвечу на частый вопрос насчет сочетаемости svelte и typescript — у нас несколько проектов на typescript и svelte, 2 из них уже в продакшене.
                                                                      В чем секрет? Нет, мы не используем костыли по приколачиванию typescript внутрь .svelte файлов. У нас просто не смешивается логика и UI. Мы пишем логику в .ts файлах, где она отлично типизируется, а в .svelte файлах у нас только декларативное описание компонента.
                                                                      Сам svelte написан на typescript и очень хорошо типизирован, получше многого, что встречается на npm. Даже импортируя что-то из svelte/internal (там очень уж удобные абстракции для прямого взаимодействия с DOM, например в тех же экшенах) мы получаем отлично типизированные функции. Если сравнивать типизацию svelte с типизацией vue (проще выбросить и написать свою, ибо не знает даже о половине тех вещей, что есть в Vue) или react (неплохо, но много недочетов. Например почему SyntheticEvent будучи дженериком от EventTarget'а требует тайпгварда для event.target, чтоб воспользоваться методами, которые там гарантировано есть?)

                                                                      Ну и немного о javascript и его надмножествах:
                                                                      typescript является надмножеством javascript, это как javascript но с дополнительным синтаксисом для описания типов;
                                                                      jsx является надмножеством javascript, это как javascript но с дополнительным синтаксисом для описания xml шаблонов;
                                                                      svelte является надмножеством javascript и html, это как javascript и html но с дополнительным синтаксисом для описания реактивности и манипуляций с DOM.

                                                                      Ни один из них, не является надмножеством другого… хотя нет, есть tsx, который является надмножеством typescript. И сообщество react должно быть благодарно тому, что у Microsoft так много работы с xml, а jsx оказался очень удобным для его построения, настолько, что они добавили его в свой язык. Не случись этого, в jsx до сих пор не было бы typescript.

                                                                      Однофайловым компонентам vue и svelte повезло меньше, что впрочем не мешает использовать typescript за их пределами. Вы же не тянете логику внутрь компонента, где по идее должен быть только UI?
                                                                        0
                                                                        EDIT: плохо прочитал пост, пардон.
                                                                          +2

                                                                          Куда тянуть логику UI? Банальный цикл/map по коллекции? Или в нём типищация не нужна?

                                                                            +1
                                                                            в большинстве случаев это будет блок {#each} прямо в шаблоне. Да, если туда попадет не коллекция, оно упадет в тестах ну или в рантайме…
                                                                              +1

                                                                              А с TS упал бы во время компиляции. В целом это более предпочтительно, т. к. тесты пишут не все или пишут, но все кейсы не покрыты. Да и в рантайме можно долго ждать, что звезды сложились так, что баг воспроизведётся и пользователь создаст баг-репорт, по которому можно будет баг локализовать и исправить.

                                                                                +1
                                                                                Нормальные типы к TS пишут вообще единицы, а без них полезность TS вообще стремится к нулю… Ну а тесты у нас ревьювят в первую очередь.
                                                                                  +1

                                                                                  Хотя бы на уровне структур из примитивных типов много где пишут. А тесты как-то обычно особо не ревьювят как раз, если TDD не введено. так, CI прошло, покрытие не упало — апрув.

                                                                                    0
                                                                                    Нормальные — это какие?
                                                                                      +2

                                                                                      Которые не сваливаются при первом неудобном случае в tsignore, as any, as unknown as Some, disable eslint rule и пр… Скажем тот же параметризм высшего порядка это тема слишком сложная для большинства разработчиков (увы).

                                                                                        0

                                                                                        Я бы не сказал, что прямо слишком сложная. Скорее совпадение нескольких факторов:


                                                                                        • нет особой мотивации изучать
                                                                                        • нет материалов, дающих такую мотивацию
                                                                                        • нет удобных средств отладки типов в целом

                                                                                        По последнему пункту много нареканий вообще при работе с типами (которые type). У нас вот практически полный отказ от type в пользу interface исключительно по причине невнятных сообщение об ошибках. И вполне по этой причине вместо сложного типа могут на код-ревью вынудить использовать any.

                                                                                          +1

                                                                                          Когда дело доходит до хитрых случаев то вообще часто непонятно, что и как делать. Вот всякий раз когда я сталкиваюсь с d.ts файлами у меня что-нибудь идёт не так :( Собираю все виды ошибок из самых глубин преисподнейtypescript компилятора.


                                                                                          Или скажем когда есть хитрая комбинация high-order-functions с генериками, и часто high-order-rank polymorphism-ом, то там очень часто всё куда-то как-то разъезжается и умирает (молча превращает всё в any). Я даже стал писать тесты на типы, настолько хрупкая эта инфраструктура порой.


                                                                                          Ну и непонятно как это всё вменяемо дебажить. Одна из наиболее используемых мною штук в vscode это ctrl+shift+p + Typescript: Restart Typescript Server.

                                                                                            0
                                                                                            когда есть хитрая комбинация high-order-functions с генериками, и часто high-order-rank polymorphism-ом

                                                                                            Keep It Simple и будет No Problemos. Более одного HOF'a это уже перебор. Всегда удивлялся тому, как народ сам всё усложняет на пустом месте, а потом волосы на голове рвет, потом плюют на все это и увольняются оставляя свое чудо наследие другим.
                                                                                            0

                                                                                            Приведёте пример такого невнятного сообщения? Может подскажу как сделать его внятным.

                                                                                +4
                                                                                Например почему SyntheticEvent будучи дженериком от EventTarget'а требует тайпгварда для event.target, чтоб воспользоваться методами, которые там гарантировано есть?

                                                                                Потому что в таких случаях вам нужен не event.target, а event.currentTarget. event.target — это тот элемент, на котором возникло событие, и он может быть где-то в глубине DOM, если событие не было обработано на нём самом, а всплыло выше. А event.currentTarget — это тот самый элемент, на котором установлен обработчик.

                                                                                +2
                                                                                Следующий митап должен был быть в Питере в апреле-мае, но пандемия внесла свои коррективы в наши планы.

                                                                                Зарубежные коллеги завтра (26.04.2020) организуют очень обширный онлайн-митап — https://sveltesociety.dev/. Спикеры со всего мира, включая создателя фреймворка.

                                                                                  +1
                                                                                  Странно, что такая простая идея как компиляция в нативный код не пришла в голову создателям Angular, React, Vue. Тем более, что на тот момент в других языках уже были решения с посткомпиляцией на основе аспектно-ориентировнного программирования. Ну, с Angular понятно: первая версия вышла давно, тогда транспилеры еще не были в моде, но Фейсбук-то что затупил? Все эти Virtual DOM, прокси-объекты, dirty checking выглядят, скорее, как грязный хак, нежели элегантное решение. Например, Vue не отслеживает изменния в Set или пользовательской коллекции, только в массиве. Сюрприз!
                                                                                    +2

                                                                                    У компиляции есть одно не очень приятное свойство — ты в итоге отлаживать будешь не то, что написал. Если в babel, ts это отличается от написанного, но не прям очень-очень, то в svelte на выходе получается сильно измененный код. И иногда это может стать болью. Хотя есть расширения для браузера, позволяющие отлаживать со Svelte-компонентами. И все комьюнити-дривен кстати))))

                                                                                      +2

                                                                                      И поддержка Sourcemap имеется

                                                                                        +2

                                                                                        С одной стороны, нативный мир живёт с этим уже десятки лет, и ничего. Агрессивная оптимизация может изменить ассемблерный выхлоп до неузнаваемости, при этом выкинув 9/10-х исходной логики за ненадобностью. С другой стороны, я иногда смотрю на результаты всяких там DI или Service Locator и понимаю, что отлаживать это практически невозможно из-за адового количества подкапотной магии. Так что я до сих пор не совсем понимаю, почему во фронтэнде не прижился подход с JS-as-assembly.

                                                                                          0
                                                                                          Думаю потому что всем чего-то не хватает в JS и его обязательно нужно улучшить.))) Кстати, output у Svelte очень понятный, очевидный и легко читается. Можете сами посмотреть в REPL.
                                                                                            0

                                                                                            Это не так. Простейший пример порождает:


                                                                                            function create_fragment(ctx) {
                                                                                                let input;
                                                                                                let t0;
                                                                                                let p;
                                                                                                let t1;
                                                                                                let t2_value = (/*name*/ ctx[0] || "stranger") + "";
                                                                                                let t2;
                                                                                                let t3;
                                                                                                let dispose;
                                                                                            
                                                                                                return {
                                                                                                    c() {
                                                                                                        input = element("input");
                                                                                                        t0 = space();
                                                                                                        p = element("p");
                                                                                                        t1 = text("Hello ");
                                                                                                        t2 = text(t2_value);
                                                                                                        t3 = text("!");
                                                                                                        attr(input, "placeholder", "enter your name");
                                                                                                    },
                                                                                                    m(target, anchor, remount) {
                                                                                                        insert(target, input, anchor);
                                                                                                        set_input_value(input, /*name*/ ctx[0]);
                                                                                                        insert(target, t0, anchor);
                                                                                                        insert(target, p, anchor);
                                                                                                        append(p, t1);
                                                                                                        append(p, t2);
                                                                                                        append(p, t3);
                                                                                                        if (remount) dispose();
                                                                                                        dispose = listen(input, "input", /*input_input_handler*/ ctx[1]);
                                                                                                    },
                                                                                                    p(ctx, [dirty]) {
                                                                                                        if (dirty & /*name*/ 1 && input.value !== /*name*/ ctx[0]) {
                                                                                                            set_input_value(input, /*name*/ ctx[0]);
                                                                                                        }
                                                                                            
                                                                                                        if (dirty & /*name*/ 1 && t2_value !== (t2_value = (/*name*/ ctx[0] || "stranger") + "")) set_data(t2, t2_value);
                                                                                                    },
                                                                                                    i: noop,
                                                                                                    o: noop,
                                                                                                    d(detaching) {
                                                                                                        if (detaching) detach(input);
                                                                                                        if (detaching) detach(t0);
                                                                                                        if (detaching) detach(p);
                                                                                                        dispose();
                                                                                                    }
                                                                                                };
                                                                                            }
                                                                                            
                                                                                            function instance($$self, $$props, $$invalidate) {
                                                                                                let name = "";
                                                                                            
                                                                                                function input_input_handler() {
                                                                                                    name = this.value;
                                                                                                    $$invalidate(0, name);
                                                                                                }
                                                                                            
                                                                                                return [name, input_input_handler];
                                                                                            }
                                                                                            
                                                                                            class App extends SvelteComponent {
                                                                                                constructor(options) {
                                                                                                    super();
                                                                                                    init(this, options, instance, create_fragment, safe_not_equal, {});
                                                                                                }
                                                                                            }

                                                                                            Для сравнения, как выглядит похожий пример в действительно понятном, очевидном и легко читаемом виде:


                                                                                            "use strict";
                                                                                            var $;
                                                                                            (function ($) {
                                                                                                class $my_app extends $mol_view {
                                                                                                    /**
                                                                                                     *  ```
                                                                                                     *  sub /$mol_view
                                                                                                     *      <= Input
                                                                                                     *      <= Output
                                                                                                     *  ```
                                                                                                     **/
                                                                                                    sub() {
                                                                                                        return [this.Input(), this.Output()];
                                                                                                    }
                                                                                                    /**
                                                                                                     *  ```
                                                                                                     *  Input $mol_string
                                                                                                     *      value?val <=> name?val
                                                                                                     *      placeholder \enter your name
                                                                                                     *  ```
                                                                                                     **/
                                                                                                    Input() {
                                                                                                        return ((obj) => {
                                                                                                            obj.value = (val) => this.name(val);
                                                                                                            obj.placeholder = () => "enter your name";
                                                                                                            return obj;
                                                                                                        })(new this.$.$mol_string());
                                                                                                    }
                                                                                                    /**
                                                                                                     *  ```
                                                                                                     *  name?val \stranger
                                                                                                     *  ```
                                                                                                     **/
                                                                                                    name(val, force) {
                                                                                                        return (val !== void 0) ? val : "stranger";
                                                                                                    }
                                                                                                    /**
                                                                                                     *  ```
                                                                                                     *  Output $mol_view sub /string <= name
                                                                                                     *  ```
                                                                                                     **/
                                                                                                    Output() {
                                                                                                        return ((obj) => {
                                                                                                            obj.sub = () => [this.name()];
                                                                                                            return obj;
                                                                                                        })(new this.$.$mol_view());
                                                                                                    }
                                                                                                }
                                                                                                __decorate([
                                                                                                    $mol_mem
                                                                                                ], $my_app.prototype, "Input", null);
                                                                                                __decorate([
                                                                                                    $mol_mem
                                                                                                ], $my_app.prototype, "name", null);
                                                                                                __decorate([
                                                                                                    $mol_mem
                                                                                                ], $my_app.prototype, "Output", null);
                                                                                                $.$my_app = $my_app;
                                                                                            })($ || ($ = {}));
                                                                                              0
                                                                                              А комментарии там видимо из-за его понятности? ;-) Если не ерничать, то думаю оба примера вполне себе хорошо читаются. Подходы разные, это да, но уверен что даже начинающий JS разработчик поймет что тут написано.

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

                                                                                              Читая аутпут $mol надо сразу понимать откуда взялись все эти $mol_view и т.п. То есть придется сразу почитать про MAAM. Опять же работа с this. Да и за кулисами же есть ядро, которое дергает за все эти «ниточки».

                                                                                              В аутпуте Svelte мы видим сразу все что нужно. Однако повторюсь, оба выхлопа выглядят в целом вполне читаемо и понятно.
                                                                                                0

                                                                                                Нет, комментарии как раз для непонятности. Там же абракадабра в них. А если серьёзно, то они здорово помогают в изучении view.tree.


                                                                                                Есть большая разница между "прочитать что написано" и "понять что происходит". В первом коде понять существенно сложнее.


                                                                                                Для понимания кода компонента знать про МАААМ вообще не обязательно. Даже про работу "хелперов" $mol_mem и $mol_view знать надо не больше, чем "эта штука мемоизирует" и "эта штука — базовый класс".

                                                                                                  0
                                                                                                  Нет, комментарии как раз для непонятности. Там же абракадабра в них. А если серьёзно, то они здорово помогают в изучении view.tree.

                                                                                                  Да, для пониманию view.tree реально все средства хороши. )))

                                                                                                  Есть большая разница между «прочитать что написано» и «понять что происходит». В первом коде понять существенно сложнее.

                                                                                                  Ты написал субъективное мнение без обоснования. Я выше в комментарии написал точно такое же субъективное мнение, но противоположное. Однако обосновал это хоть как-то.

                                                                                                  Для понимания кода компонента знать про МАААМ вообще не обязательно. Даже про работу «хелперов» $mol_mem и $mol_view знать надо не больше, чем «эта штука мемоизирует» и «эта штука — базовый класс».

                                                                                                  Ну как это. У нас JS, а не PHP, в котором классы могут браться «из воздуха» благодаря авто-загрузке. В JS то что не импортировано, не существует в скоупе. Поэтому любому JS разработчику сперва нужно будет разобраться откуда взялись магические классы типа $mol_view и что это вообще.

                                                                                                  В Svelte сверху файла просто и очевидно импортируются хэлперы с вполне говорящими именами, на которые всегда можно ткнуть и посмотреть их код. Сами хелперы как правило не более чем в 10-ток строк кода.
                                                                                                    0
                                                                                                    сперва нужно будет разобраться откуда взялись магические классы типа $mol_view и что это вообще.

                                                                                                    1. Не нужно.
                                                                                                    2. ctrl+click
                                                                                                    3. Импорты тут погоды не делают.

                                                                                                    В JS то что не импортировано, не существует в скоупе.

                                                                                                    Опять ложь. Собственно, это одна из основных претензий людей к вашему пиару — использование дешёвых полемических приёмов. Называете чёрное белым и думаете, что читатели схавают. Новички может и схавают. У всех остальных это вызывает лишь отвращение.

                                                                                                      0
                                                                                                      ctrl+click

                                                                                                      Не знал что это работает с MAAM. Как реализовано?

                                                                                                      Опять ложь.

                                                                                                      В каком смысле ложь? Так работают модули JS или я не прав в этом? Глобалы конечно тоже работают, но глобалы как бы bad practice, поэтому о них говорить смысла нет.
                                                                                          0
                                                                                          почему во фронтэнде не прижился подход с JS-as-assembly
                                                                                          Потому что js вполне себе человекопонятный язык. Вы спокойно можете его читать, править и даже просто писать на нем. И Вам не нужно для этого objdump или подобных утилит.
                                                                                          Согласитесь, никто ведь не пишет в wasm файлы напрямую, то же касается elf и exe.
                                                                                          Хотя признаюсь, я в свое время писал руками числодробилку на asm.js, но asm.js тоже вполне человекопонятный, да и вызвано это было скорее тем, что emscripten в то время для абсолютно аналогичной функции на C генерил в 3 раза больше кода asm.js, чем я написал руками.
                                                                                            0

                                                                                            Я немного не о человекочитаемости. Я о том, что все абстракции в исходном коде проекта 1:1 попадают в браузер, который вынужден их переваривать. Хотя можно бы пройтись транспилятором и выкинуть мусор, оставив только голую низкоуровневую логику.

                                                                                              –2

                                                                                              Эти абстракции могут быть оптимизированы JIT компилятором один раз и, так как они используются из многих мест, это может дать хороший буст производительности. А уникальный код для каждого компонента не факт, что вообще будет оптимизирован.

                                                                                      +2

                                                                                      На днях пробовал svelte. Прикольный ничего не скажешь. Ничего не скажешь.
                                                                                      Я думаю судьба у него поболее чем у Polymer, который я так охотно изучил сразу после его анонса на гугл ио, что он и закончился на том же месте :))
                                                                                      Главное это экосистема, пока она не дорастет до реактовской или хотя бы vue — спорить рано.

                                                                                        0
                                                                                        А разве у Polymer не была довольно приличная экосистема? До сих пор большая часть существующий готовых веб-компонентов завязана на него или что-то из его окружения. Мне почему-то кажется, что основная проблема Polymer была именно в том, что стандарт веб-компонентов довольно долго не могли стандартизировать, а разработчики Polymer уже понаписали своего добра. При этом мир не стоял на месте и получилось так, что Polymer устаревал до того, как стандарт который он реализовывал принимался комитетами.
                                                                                        +2

                                                                                        Не могу не поправить фактическую ошибку в тексте:


                                                                                        И этот подход сильно отличается даже от Vue, в котором SFC не более чем более удобный способ записи Vue.extend.

                                                                                        SFC во Vue это просто способ группировки файлов, вместо трёх отдельных файлов для шаблона, скрипта и стилей вы имеете один файл. На картинке представлены этапы от декларативного кода до скомпилированного императивного. Всё это есть во Vue, на верхнем уровне вы оперируете декларативными шаблонами которые потом компилируются в императивные рендер-функции. Удобство Vue в том что в каждый из этих этапов мы можем проникнуть и написать скомпилированный код (рендер-функцию) сами. В Svelte же мы ограничены исключительно декларативным подходом.

                                                                                          0
                                                                                          Да я тут немного упростил из-за ненадобности. Собственно в тоже же Vue.extend под капотом тот же VDOM и теми же рендер-функции. Все это лишь разные формы записи по-сути.

                                                                                          Ну и конечно не могу согласиться с тем, что Vue делает тоже самое что и Svelte. Скорее уж он делает тоже самое что React. Вся кодогенерация сводится в тому чтобы превратить декларативный шаблон в вызовы функций и подготовить это хозяйство к работе в рантайм.

                                                                                          Удобство Vue в том что в каждый из этих этапов мы можем проникнуть и написать скомпилированный код (рендер-функцию) сами. В Svelte же мы ограничены исключительно декларативным подходом.

                                                                                          Да, это верно.
                                                                                            +3
                                                                                            Удобство Vue в том что в каждый из этих этапов мы можем проникнуть и написать скомпилированный код (рендер-функцию) сами
                                                                                            Да, можно написать код который генерирует дерево VirtualDOM, но при этом оно все равно будет иметь этап обработки в рантайме, прежде чем попадет в реальный DOM.
                                                                                            В Svelte же мы ограничены исключительно декларативным подходом.
                                                                                            В Svelte императивный подход заключается в манипулировании нативным DOM с помощью небольших функций-хелперов из модуля svelte/internal
                                                                                            Никто не мешает сделать руками так:
                                                                                            import {
                                                                                                SvelteComponent, init, noop, not_equal,
                                                                                                create_component, mount_component, destroy_component,
                                                                                                insert, detach, element, text
                                                                                            } from 'svelte/internal';
                                                                                            
                                                                                            class Component1 extends SvelteComponent {
                                                                                                constructor(opts) {
                                                                                                    super();
                                                                                                    let div, prop;
                                                                                                    init(this, opts, ($$self, $$props, $$invalidate) => {
                                                                                                        $$self.$set = $$updatedProps => {
                                                                                                            ('prop' in $$updatedProps) && $$invalidate(0, $$updatedProps.prop);
                                                                                                        };
                                                                                            	    return [$$props.prop];
                                                                                                    }, ctx => ({
                                                                                                        c() {
                                                                                                            prop = ctx[0];
                                                                                                            div = element('div');
                                                                                                            div.textContent = `Hello ${prop}!`;
                                                                                                        },
                                                                                                        m(target, anchor) {
                                                                                                            insert(target, div, anchor);
                                                                                                        },
                                                                                                        p(ctx, [updates]) {
                                                                                                            if(updates & 1 && prop !== ctx[0]) {
                                                                                                                prop = ctx[0];
                                                                                                                div.textContent = `Hello ${prop}!`;
                                                                                                            }
                                                                                                        },
                                                                                                        i: noop,
                                                                                                        o: noop,
                                                                                                        d(detaching) {
                                                                                                            detaching && detach(div);
                                                                                                        }
                                                                                                    }), not_equal, {});
                                                                                                }
                                                                                            }
                                                                                            
                                                                                            class App extends SvelteComponent {
                                                                                                constructor(opts) {
                                                                                                    super();
                                                                                                    const comp = new Component1({props: {
                                                                                                        prop: 'world'
                                                                                                    }});
                                                                                                    init(this, opts, null, ctx => ({
                                                                                                        c() {
                                                                                                            create_component(comp.$$.fragment);
                                                                                                        },
                                                                                                        m(target, anchor) {
                                                                                                            mount_component(comp, target, anchor);
                                                                                                        },
                                                                                                        p: noop,
                                                                                                        i: noop,
                                                                                                        o: noop,
                                                                                                        d(detaching) {
                                                                                                            destroy_component(comp, detaching);
                                                                                                        }
                                                                                                    }), not_equal, {});
                                                                                                }
                                                                                            }
                                                                                            
                                                                                            document.addEventListener('DOMContentLoaded', () => new App({
                                                                                                target: document.body
                                                                                            }));
                                                                                            

                                                                                            Да не спорю, это совсем не
                                                                                            render(h) {
                                                                                                return h('div', 'Hello world!');
                                                                                            }
                                                                                            
                                                                                            но на то оно и выхлоп компилятора, работающий напрямую с нативным DOM

                                                                                            Просто это Вам попросту не нужно, все что обычно в vue решается самописной render функцией, в svelte гораздо проще сделать с помощью use:action
                                                                                            +9
                                                                                            Можете обижаться, но у меня сложилось впечатление, что Svelte, может, и неплохой фреймворк и через пару лет будет готов к продакшену. Но пиарят его полные мудаки и невежды. И с такими «друзьями» врагов уже не надо.
                                                                                              +4
                                                                                              Но пиарят его полные мудаки и невежды

                                                                                              В каком месте? Во всей этой истории ответок «мудаки и невежды» как раз те, кто выступает против svelte.
                                                                                              Я вообще тут со стороны (бэкэнд моя стихия) пришел почитать, чего в JS творится, в котором я вообще не работаю и знать ничего не знаю, но до чего удивительно все это читать. Приходят люди, которые ничего не понимают ни в новой технологии, ни даже в той, которую сами постоянно используют, пишут технически безграмотный поток сознания, а в ответ получают просто аргументированные статьи как сабж. Но почему-то «мудаки и невежды» оказались последние. Как?!

                                                                                              Для интереса посмотрел доклад о 3 версии svelte — да это же очевидно. Нахера весь этот оверхед виртуальный домов? Это же полный абсурд. Фреймворк делает то, что обязан делать. Задает парадигму, освобождает разработчика от рутины, а за кулисами оптимизирует это максимально. Одних бенчмарков достаточно, чтобы понять — у svelte, или по крайней мере его подхода, светлое будущее гарантировано.
                                                                                                +3
                                                                                                Я ничего плохого про Svelte как рабочий инструмент не говорю. Здравая идея, вижу use case, хотя и не столь универсально, как считают создатели. Однако в последнее время я вижу много статей, где его агрессивно навязывают. В ответ автор закономерно получает агрессию от читателей. Потому что никто не любит агрессивного навязывания. Получив свою порцию хейта автор уходит плакать о том, что ZOG обижает маленький беззащитный open source. Хотя всем похуй.
                                                                                                В общем, это не профессиональное общение. И у меня, простого разработчика, Svelte уже начал ассоциироваться с такими вот срачами.
                                                                                                  +1
                                                                                                  Я не видел ниодной агрессивной статьи. Примеры?
                                                                                                    +1
                                                                                                    Вы в ее комментариях находитесь.
                                                                                                      +2
                                                                                                      Значит нет примеров. Я нахожусь в комментариях адекватного ответа на неадекватную статью от противника svelte.
                                                                                                        +1

                                                                                                        Это был бы адекватный пример кабы он был комментарием.

                                                                                              +2

                                                                                              Когда впервые прочитал о svelte, подумал: наконец-то! Очень заманчиво, надеюсь завтра попробовать на практике.

                                                                                                +5
                                                                                                Проблема в том, что вообще требуется агрессивный пиар. Да, в Svelte есть компиляция в нативный JS. Лучше ли это — нет. Это просто другой подход. Наверно он отлично подходит для создания виджетов, но для крупных проектов преимуществ ноль. Попытки заявить, что он потеснит большую тройку — обречены. В лучшем случае останется на позиции LitElement.
                                                                                                Что касается личного опыта, после попыток написать что-то сложнее примеров из документации я плевался. Чувствуется недостаток гибкости после React. Идеологически мне не подходит. Но уверен, что Svelte сможет найти свою нишу.
                                                                                                  +3
                                                                                                  Было бы интересно узнать о каких именно недостатках гибкости идет речь? Спасибо.
                                                                                                  +3

                                                                                                  Месяц назад выбирали фреймворк для написания одного приложения. Из претендентов были как раз ReactJS, Vue, Svelte. В результате остановились на первом, но абсолютно не по вине достоинств или недостатков фреймворков. Просто разработчик, который на react оказался более квалифицированным и опытным и предложил более оптимальные для нас решения. Так что больше была гонка девелоперов, чем фреймворков.

                                                                                                    +2
                                                                                                    Это здраво и так часто бывает. Успеха вам в проекте!
                                                                                                    –5
                                                                                                    Ваша статья ровно точно такая же субъективная и с передергиваниями, как и оригинальная.

                                                                                                    Svelte, как и Vue — это просто развлечения их создателей, форма искусства, оторванная от практики. Как искусство они очень хороши, их изучать — одно удовольствие.

                                                                                                    React и Angular — реальные инновации, они полезны экономически. Это просто совсем другой уровень. Комьюнити и коммерческие проекты — очень разные. И авторы комьюнити фреймворков принципиально не могут посмотреть на крупные коммерческие базы кода, их просто туда никто не пустит смотреть. Если их, конечно, не наймут в одну из таких компаний. Гвидо ван Россум сделал питон, потом его наняли в Google и он смог наблюдать, как его язык используется на практике и сделал python3, который стал конфликтовать с 2.7.

                                                                                                    Можете сколько угодно писать, что Svelte «такой же, и даже лучше», но в действительности, единственная причина его появление — автору было скучно. Завтра он найдет себе другое занятие и кончится весь Svelte.
                                                                                                      +5
                                                                                                      React и Angular — реальные инновации, они полезны экономически.
                                                                                                      Svelte, как и Vue — это просто развлечения их создателей, форма искусства, оторванная от практики.

                                                                                                      А мужики-то не знали, оказывается, что vue оторван от практики.


                                                                                                      Монструозный ангуляр и реакторская мешанина — вот она, ваша инновация.

                                                                                                        0
                                                                                                        Ну так вообще-то и на ангуляре и на реакте написаны реальные приложения, которые приносят деньги. Много денег.
                                                                                                          +3

                                                                                                          Я вам по секрету скажу, что проекты на 1С приносят ещё больше денег. При всех его недостатках, он позволяет сделать за час больше, чем на Реакте вы будете бойлерплейтить неделю.

                                                                                                            0
                                                                                                            А я и не критиковал 1С. Я написал лишь то, что React и ангуляр решают реальные проблемы разработчиков. А многие другие фреймворки/библиотеки решают лишь проблему чем бы заняться их авторам на досуге.
                                                                                                              –1

                                                                                                              Они создают проблем больше, чем решают.

                                                                                                                0
                                                                                                                Ну да. Сотни разработчиков в фейсбуке и столько же в гугле дураки и не понимают ничего. Конечно же Брин с Цукербергом подписали циркуляр, в котором приказали пользоваться именно реактом и ангуляром.
                                                                                                                  0
                                                                                                                  Сотни разработчиков в фейсбуке и столько же в гугле дураки и не понимают ничего.

                                                                                                                  Вы делаете очень показательную ошибку: вы считаете, что люди в фейсбуке и гугле будут своими фреймворками главным образом создавать пользу для вас. В то время, как создают пользу они главным образом для себя.

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

                                                                                                                  ЗЫ: Но, разумеется, дев-коммьюнити svelte тоже решает проблемы дев-коммьюнити svelte, а не ваши. Другое дело, что к ним присоединиться куда как возможнее, чем к гуглу или фейсбуку.
                                                                                                                    –1
                                                                                                                    Ну, не буквально, конечно, в гугле и фб, но в таких же крупных компаниях я работал. Одна на 15 000 сотрудников, другая на 8 000. Причем, вы удивитесь, но там как раз пишут на реакте и на ангуляре. А на Vue и на Svelte не пишут. Так что, да. Я фейсбук.
                                                                                                                      +1

                                                                                                                      Не знаю насчёт svelte и google, но мой первый же PR в фейсбуковский продукт был принят. С замечаниями, исправлениями, но принят.

                                                                                                                        0
                                                                                                                        Эм.
                                                                                                                        А как еще-то, по-вашему, ценность опенсорса создаётся? Циничный корпоративный взгляд на опенсорс — это «они нам протестируют, пофиксят, и может быть даже разовьют софт, а мы будем стоять во главе процесса, и рулить, куда нам надо».

                                                                                                                        Это, конечно, не отменяет пользы для других людей, это не zero sum game, в конце концов. Я к тому, что конечно же PR будут принимать, если они укладываются в намеченную линию развития.
                                                                                                                          0
                                                                                                                          Это у вас какой-то циничный взгляд. Крупные корпорации не обязаны ничего выкладывать, и уж тем более тратить ресурсы на втягивание комьюнити PR-ов к себе. Это они делают чисто по доброте душевной.

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

                                                                                                                          Раньше с таким лозунгом в некрупных компаниях продавали руководству выкладывание своих наработок в опенсорс, но практика показала, что если вы не гугл, ваша работа просто не будет никому интересна.
                                                                                                                            +1
                                                                                                                            Раньше с таким лозунгом в некрупных компаниях продавали руководству выкладывание своих наработок в опенсорс, но практика показала, что если вы не гугл, ваша работа просто не будет никому интересна.

                                                                                                                            Вы всерьез что-ли думаете, что кроме творчества пера гугла в опенсорсе ничего интересного корпоративного нет? Лул.

                                                                                                                            Как раз таки море опенсорса — это вот проекты относительно некрупных компаний. Реакт нет, а вот MobX уже да.
                                                                                                                              0

                                                                                                                              Очень интересная мысль на самом деле. Создатель MobX устроился в фейсбук. Про его предыдущую компанию ничего не слышно, особой репутации как место с интересными инновациями она не заработала

                                                                                                                                0
                                                                                                                                Ну теперь-то да, но когда создавали MobX — еще нет. Интересный способ в фейсбук попасть вышел, кстати.
                                                                                                                                –1
                                                                                                                                Интересного в каком плане? В плане «утащить к себе в норку»? Этого навалом, да. А так, чтобы еще и PR-ы получать в ответку — таких проектов совсем не много. Думаю, сотни на весь гитхаб.
                                                                                                                        –2

                                                                                                                        Вы правы, сотни мух не могут ошибаться.

                                                                                                              +3
                                                                                                              На Vue написаны реальные приложения, которые приносят много денег (https://github.com/vuejs/awesome-vue#enterprise-usage). И создатель Vue — Evan You, работал в Google (Google Creative Lab), уж у него-то был доступ к крупным коммерческим базам кода. Так что ваши доводы не верны.
                                                                                                                0
                                                                                                                И Vue в этом смысле, конечно, сильнее Svelte, вероятно, поэтому он с реактом на равных.

                                                                                                                Работал, да перестал. Нужно же всегда иметь актуальные данные. Всегда можно еще улучшить.
                                                                                                                +2
                                                                                                                React и Angular — реальные инновации, они полезны экономически
                                                                                                                Извините, а в чем инновации в React?
                                                                                                                Писать js прямо в шаблоне? — Было до него, шаблонизатор ejs, хоть и строковый, но позволял писать в шаблоне любой js, даже обычные циклы и if'ы
                                                                                                                Компонентный подход? — Ну в принципе он давно известен в разработке UI, и даже в вебе он уже был в angular.js, в Elm, а может и еще где
                                                                                                                Хм, может VirtualDOM? — Ан нет, Elm был как минимум на год раньше с этой идеей. И с идеей, что компонент — это просто функция, которая возвращает вьюшку. Притом это все было весьма достойно для универской курсовой, коей являлся Elm, но уж никак не для либы агресивно впариваемой большой корпорацией.
                                                                                                                Что-то еще? А ничего больше в самом реакт и нет собственно. Просто распиаренный шаблонизатор с поддержкой компонентов и работающий на таком костыле как VirtualDOM.
                                                                                                                  +2
                                                                                                                  Я вот сейчас пишу UI на питоне. Без реакта. Слезы наворачиваются.

                                                                                                                  Вы про искусство. Я же профессионально работаю фронтенд-разработчиком. Каждый день по 8 часов в день последние несколько лет. В работе реально помогает. Я и на ejs писал и на ангуляре первом — это все не то. Перечислять отличия бессмысленно, потому что все то же самое можно было сделать и раньше. Просто не удобно. Больше кода, больше ошибок, сложнее отлаживать, больше всяких нюансов неочевидных.
                                                                                                                    +2

                                                                                                                    Можете считать React в мире фронта iPhone в мире смартфонов — инновация в объединение уже существующих технологий таким образом, что рынок "взорван". Если, что я далеко не фанат Apple, но отдаю им должное.

                                                                                                                      +1
                                                                                                                      Весьма точное сравнение. А отсюда напрашиваются пара выводов:
                                                                                                                      1. Можно просто собрать несколько удачных решений в одном месте, хорошо так присыпать пиаром — и все, готов продукт которые будет нравиться многим.
                                                                                                                      2. Распиаренность и наличие преданных фанатов не означает, что продукт лучше других.
                                                                                                                  +2
                                                                                                                  Создается впечатление, что тут идет борьба за рынки сбыта. Сторонники «большой тройки» вдруг почувствовали угрозу со стороны «новичка». Отсюда агрессивный тон, переходящий в оскорбления. Уж не боятся ли сторонники «большой тройки» возникновения сильного сообщества вокруг «новичка».
                                                                                                                    0

                                                                                                                    Конечно боятся. Вот сколько я ни пиарил $mol — не было ни одной негативной статьи (если не считать тот разгромный комментарий под последней статьёй, преисполненный боли и негодования от… неиспользования $mol). Всё потому, что можно без опаски просто игнорировать его существование и продолжать пилить подпорки к Реакту, тратя итерацию на то, что можно было бы сделать за день.

                                                                                                                    +4
                                                                                                                    Как много комментариев об агрессивном пиаре/манере повествования. При этом статья, на которую дан ответ, является потоком сознания графомана, без каких-либо технических выкладок.

                                                                                                                    К вопросу о популярности svelte, первый раз увидел упоминания о нем здесь, на хабре. Так как решил его использовать для петпроджекта, то добавился в чат телеграма, чтобы задавать всякие нубские вопросы (так как я не фронтендер). Тогда чат насчитывал около 150 пользователей, а сейчас уже 1.5к юзеров, т.е. интерес есть.
                                                                                                                    В плане поддержки сообщества, топик-стартер и прочие участники чата всегда в этом чатике помогали с непонятными мне моментами по фреймворку и подключению внешних компонентов в него. Так что, если уж ТС — пиарщик на зарплате, то хорошо ему должны платить за постоянную помощь участникам коммьюнити и написание всяких демонстрационных заготовок кода, по наиболее частым вопросам.

                                                                                                                    В общем, хейта в сторону фреймворка не понимаю. Если он такой плохо, то зачем вы пытаетесь всех догнать и непременно об этом рассказать? Ну, это я к автору оригинальной статьи обращаюсь)
                                                                                                                      +1
                                                                                                                      Откровенно говоря, в чем-то я понимаю противников всего нового. Взять, к примеру, те же рельсы на рубях. Там все сделано изначально правильно, и с каждой новой версией как фреймворка, так и языка, только добавляется новая функциональность и ускоряется компилятор. И в целом, какой-нибудь старый гем, прекративший обновляться пару лет назад, скорее всего продолжит работу.

                                                                                                                      Но фронт, это какая-то чертовщина. Возможно, потому что его изначально проектировали не под то, во что он превратился сейчас. Возможно, из-за огромного количества разработчиков. Но что за напасть такая. Вначале я писал на jQuery. Потом перешел на angular.js — он предлагал слишком много вкусных фич, чтобы остаться в стороне. Сообщество создало под него огромную кучу плагинов и компонентов на любой вкус. Один лишь был недостаток — медленный рендер. Потом вдруг ангуляр превращается в тыкву, а нам предлагают вторую версию, настоящий энтерпрайз, в плохом смысле этого слова. Среди аналогов есть лишь реакт, который могли придумать только пхпшники — это ж надо было додуматься идти по пути смешивания кода и представления! Вдобавок этот ваш jsx еще и далеко не всеми редакторами поддерживался в плане подсветки синтаксиса. Но вот пришел vue, алилуйя! То, что действительно надо, он вобрал лучшее и из реакта и из первого ангуляра. Перешел на него несколько лет назад и до сих под не нарадуюсь. Сейчас к тому же под него экосистема есть — куча готовых компонентов, шикарные вещи вроде генератора статистических сайтов и многое другое. И тут такой приходит svelte, мол подвиньтесь, ребят. Я его еще не изучал, даже поверхностно, но понимаю, что если он действительно настолько хорош, как о нем говорят, то нужно будет не просто этот фреймворк изучить — какие проблемы пару вечеров потратить, но заново всю инфраструктуру изобретать. Ах да, это я еще не говорю про кофе-скрипт — покойся с миром, дружище!

                                                                                                                      И это ведь ни разу не предел. Браузеры будут и дальше внедрять новые штуки, жаваскрипт будет и дальше развиваться. Повторюсь, просто потому что во фронте как бы не больше разработчиков, чем во всех остальных сферах, вместе взятых. И это значит, что каждые 5 — 10 лет будет появляться новый фреймворк, с новыми принципами построения приложений, и надо будет делать заново абсолютно всё.

                                                                                                                      Когда пишешь какую-то либу на беке — это инвестиция. Один раз написал, потом просто поддерживай и обновляй под изменившиеся реалии. Когда делаешь то же самое для фронта — ты заранее знаешь, что твоя новая либа улетит в мусорку через пару лет.
                                                                                                                        +1
                                                                                                                        Огромное комьюнити и, как по мне, меньшая стоимость смены фреймворка. Сменить бэкэнд технологию нифига так просто не получится. Слишком многое зависит от нее. Новый проект — возможно. Текущий — хер тебе. Микросервисы разве что, где можно по кусочкам обновлять. Полностью переписать же фронтэнд на моей памяти случалось у крупные проектов частенько. Был реакт, переписали на вью. Сейчас посмотрят на бенчмарки, перепишут на свелте этом.

                                                                                                                        А насчет руби, переход с него как раз вполне начался, когда многим надоела медлительность рельс и руби. Тоже самое с питоном на бэке. Но это тектонический сдвиг, такие вещи не происходят каждый день. И то, просто так не получится взять и отказаться от монолита на рельсах. Вижу, что люди по-кусочкам отщипывают куски системы в сервисы на других технологиях.
                                                                                                                          0
                                                                                                                          Но фронт, это какая-то чертовщина.

                                                                                                                          Сомнительное заявление. Я десять с лишним лет назад писал на JS, пять лет назад писал на JS, год назад писал на JS, и сейчас всё еще пишу на JS. Ну, на TS, конечно, но это одно и то же.
                                                                                                                          Ни разу не видел смысла «писать на фреймворке», и до сих пор не вижу. Хотя, разумеется, пользуюсь ими. Тем не менее, использование жквери, реакта, ангуляра, вью, и так далее — не означает, что нужно прям писать на жквери, реакте, ангуляре, вью, и так далее. Более того, этого достаточно легко не делать. Кроме как с ангуляром — но и там есть пути не слишком-то зацикливаться на нём самом.
                                                                                                                            +1

                                                                                                                            Пишу либы на ваниле плюс плагины, никуда ничего не улетает. Последнее время оцениваю фронтенд с точки зрения удобства интеграции с ванилой, у свелт с этим все нормально. С бэком конечно проще всего, согласен.

                                                                                                                              –2
                                                                                                                              Среди аналогов есть лишь реакт, который могли придумать только пхпшники — это ж надо было додуматься идти по пути смешивания кода и представления

                                                                                                                              Поставил минус за это предложение. Такое может написать только человек с катастрофическим незнанием матчасти. Представление – это тоже код. Что плохого в смешивании кода и кода?