За последние 24 часа нас посетили 19866 программистов и 1001 робот. Сейчас ищут 285 программистов ...

Причины популярности Vue

Тема в разделе "JavaScript и AJAX", создана пользователем marlin, 23 апр 2020.

  1. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Не подскажите ваше мнение почему у нас в СНГ так как то массово народ на Vue стал работать?
    Вот пример таких проектов, и встречаю это за последнее время просто неоднократно.
    Плюс начинают эти вещи требовать от бэкенд программиста.

    Мои идеи:
    - JQuery для фронта типа уже не годится и надо что то выбирать

    - И при выборе среди React/Angular/Vue
    у Vue есть плюсы:
    - мол он попроще чем те два первых
    - и соответственно его может знать Fullstack разработчик, который будет и бэкенд и фронтэнд тянуть
    - а для первых двух потребовались бы чисто отдельные фронтендеры

    p.s.
    Впечатления от самостоятельного изучения Vue пока очень неоднозначные:
    - Очень сильно отличается от того что мы всегда делали на jQuery.
    - Очень много магии происходит на фоне, эти вещи мало объяснены, и картинка происходящего пока не складывается
    - Компоненты vue напоминают не более чем виджеты у Yii; реактивная привязка данных в data ( ViewModel в системе) к html-у, ну вроде ничего, но что теперь то? Имеем пока код в методах в data, т.е. процедурное программирование.
    Не видится фреймворк, как костяк приложения, может на фронте под этим что то другое понимают.. Ну может это дальше когда дойду до vue_cli, vuex и т.д.
     
  2. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @marlin jquery это библиотека, vue это js фреймворк.
    По факту для vue от php нужно только получение данных из бд. Все остальное пишется на vue.
    То есть сравнивать jquery и vue смысла ноль.
    У vue есть свой роутер.

    Мое личное мнение почему он так популярен.
    1. Стандартизация, писать код нужно одинаково, по другому там ничего не напишешь, есть определенная структура. В обычном js или jquery можно писать как угодно, хранить свои функции где угодно. происходит бардак. Поэтому и популярны js фреймворки.
    2. Ты фиг отпарсишь какой нибудь сайт с товарами написанный с помощью vue, если они его таким образом напишут.
     
    #2 Artur_hopf, 23 апр 2020
    Последнее редактирование: 23 апр 2020
    marlin нравится это.
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    да ну? Данные то все равно поступают... их и будешь парсить, другой вопрос насколько это более трудоемко и удобно
     
  4. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Причина популярности Vue в том, что он идёт в комплекте к популярному Laravel. Если бы Тейлор вместо Vue выбрал React или что-то ещё, то тысячи ларавельщиков массово использовали бы React.

    А Angular мощнее, сложнее и тяжеловеснее Vue и React. Поэтому подключать сложную махину к типовым проектам на попсовом Laravel нет никакого смысла.
    Изначально jQuery мы использовали для поиска элементов по селекторам через $('.class p'), делали анимацию через $(...).show(), навешивали слушатели через $(...).on('click', ...) и делали запросы через $.ajax(). Это было удобно в старых Internet Explorer. Теперь в новых браузерах это всё есть и так. Для поиска есть querySelector('.class p'), есть анимация через CSS, для Ajax есть нативный fetch() или сторонний axios. Для избавления от куч асинхронных коллбэков придумали промисы. Так что jQuery становится всё менее полезной библиотекой.

    А так да, как уже сказали, Angular и подобные - это уже фреймворки. Когда всем надоело велосипедить и костылить на голом PHP программисты придумали backend-фреймворки. Аналогично когда JS-кода стало много и на jQuery он стал превращался в кашу придумали более удобные frontend-фреймворки.
    Да, в Vue много магии. В этом плане React прямолинейнее и понятнее, но... без магии всё это же приходится программировать вручную.
    Да, на фронтенде нас интересует именно построение интерактивного пользовательского интерфейса. Из виджетов, взаимодействующих с данными в реальном времени по настоящему циклу MVC. Поэтому Vue и React - это как раз инструменты для программирования виджетов.
    Здесь имеем не процедурное, а именно более удобное для рендеринга и вычислений функциональное программирование с однонаправленным потоком:
    Код (Javascript):
    1. newData = modify(oldData);
    2. newDom = renderApp(newData);
    3. sync(newDom, body);
    чтобы не приходилось по $(...).remove() вручную вычищать старый DOM и чтобы можно было навесить перерендер на onChange данных.

    На бэкенде можно один раз всё отрендерить и вернуть. А на фронтенде помимо первоначального рендеринга нужна именно реактивность и перерендер элементов по каждому видимому действию. Поэтому и подход отличается.
    Если рассматривать эти фремворки:

    - Angular
    - Vue+Vuex+VueRouter
    - React+Redux+ReactRouter

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

    Если дойдёте до Vuex или Redux и вынесете туда состояние, то увидите, что в проекте Vue и React по сути останутся UI-шаблонизаторами (View), а компоненты Vuex и Redux будут хранить данные и управлять ими через экшены (Model и Controller).
     
    marlin нравится это.
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    И я вставлю свои 5 копеек, касательно vue, помимо того что его пиарит laravel, это еще и китайский фреймворк, если посмотреть в тот же awesome, неожиданно окажется, что там половина всего написано китайцами, которых миллиарды, оно и не странно, что у него столько звезд, ну и плюс для быстрого старта, nuxt vuetify vuex выглядит очень привлекательным, а если копнуть по глубже, попытаться добавить typescript, который уже практически становится стандартом, увы окажется, что шаблоны живут своей жизнью, их никак в реалтайме не проверишь, да и отсутсвие хоть какой либо структуры, никакого тебе ооп, никакого солида... и т.д. Это печаль. React в этом плане выглядит привлекательнее. Ну а Angular вообще топ. А если мы еще берем нест под апи, создаем монорепу, шарим интерфейсы, или генерим типы на основе граф схем.. тут уж совсем красота получается. На счет невозможности спарсить контент, так себе аргумент, если не делать ssr, это во первых медленно, во вторых пс тоже ничего не увидит. Да и гугл уже давно позаботился о добросовестных контент мейкерах и создал puppeter.
     
    marlin нравится это.
  6. Poznakomlus

    Poznakomlus Активный пользователь

    С нами с:
    12 сен 2014
    Сообщения:
    96
    Симпатии:
    19
    Адрес:
    Киев
    китайцы не пользуются gitom
    иначе вы бы все прозрели. в таких вещах как видео, ииб робототехника .. они первые в мире сейчас
    не забывайте, что у них китайский файрвол и свои системы управлениями версиями
    vue крут крут потому как у него легкий порог вхождения, а это главное для массовости
    в этом нет никаких проблем
    а еще скажу, что стандартом он не станет уж точно никогда, потому как это не язык а транслятор. Верьте Microsoft который похоронил vbs который по первоначальным возможностям был круче js
    и вы должны понимать, что где идет борьба за производительность то он уж точно не должен быть использован
     
  7. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Мне не совсем понятны такие приложения.
    Если все писать на vue, то это все будет подразумевать и бизнес логику и application сервисы и правила валидации для форм. Но насколько такой подход безопасен? В js то код мы можем вмешаться из консоли.


    1. Ну вот дойдя в Vue доках до "Переходы и анимации" , т.е. уже вроде как до неважного, я такой структуры еще не заметил. Они описали как можно реактивно связать данные из опции data с отображением на странице и как создать виджеты(компоненты) для переиспользования кода. И все. Никакой структуры.
    2. Мой опыт как раз говорит что парсить сайты у которых есть api очень легко, берешь просто с этого api все что хочешь, как и ихний js скрипт
     
  8. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Спасибо.
    Плохо что в доке про Vue они эту картину сразу не обрисовывают. Хотя типа фреймворк.
    Того что разговор ведется о View слое будущего vue приложения.

    jQuery был просто удобной оберткой над тем что иначе пришлось бы делать на голом js.
    Сейчас вы бы стали программировать на голом js если есть jQuery?
    Разница не только же в аякс и анимации, эти вещи второстепенные.

    В jQuery с каждым тегом можно работать как с объектом, присваивать ему св-ва через data, находит его соседей, работать как с узлом.
    querySelector тоже не покрывает всех возможностей выборки jQuery.

    Реактивности он конечно не дает, но вот эти задачи по манипуляции DOM - они же как раз из самых легких для программирования.

    p.s. Сейчас пока завис на попытке использовать однофайловые компоненты vue.
    Пока сидел c Yii, этот весь фронтэнд прогресс мимо прошел.
    Yii сам зависимости между скриптами разрешает, а тут webpack-и всякие, и ставятся скрипты через npm, все это в новинку
     
  9. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @marlin ну вот смотри, цикл в vue. Ты когда верстку делаешь, пишешь цикл прямо в верстку. И по другому ни как.
    А на js множество вариантов. Скорее всего ты запихнешь свой цикл в какую то функцию, в рандомный файлик. Или запихнешь ее прям в этот же файл где верстка. И выглядеть твой цикл может как угодно. Найди его потом. Обзовешь свою функцию как угодно. Да и кода будет в разы больше:
    Можно так:
    Код (Javascript):
    1. for (i = 0; i < 5; i++) {
    2.    var newDiv = document.createElement("div");
    3.         newDiv.innerHTML = "<h1>Привет!</h1>";
    4.     my_div = document.getElementById("org_div1");
    5.     document.body.insertBefore(newDiv, my_div);
    6. }
    Можно тоже самое так:
    Код (Javascript):
    1. var newDiv ="";
    2. for (i = 0; i < 5; i++) {
    3.         newDiv += "<div id='org_div1'><h1>Привет!</h1></div>";
    4. }
    Еще так:
    Код (Javascript):
    1. arraySparse.forEach((element) => {
    2. });
    Код будет делать одно и то же, написать его можно множество разных способов.
    --- Добавлено ---
    https://learn.javascript.ru/traversing-dom
    @marlin на голом js можно тоже самое.
     
  10. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    То что св-ва некоего объекта реактивно отражены в некий html - это вполне определенный функционал.
    Я не отрицаю что это может быть удобно, если цель - никакой манипуляции DOM из своего кода.
    Выше я говорил о структуре именно приложения.
    Куда например код валидации форм складывать, об этом же ни намека пока.
    Как получить свои первые данные, например видел в книге что по хуку created:
    Код (Text):
    1.         axios.get('./products.json')
    2.           .then((response) => {
    3.             this.products = response.data.products;
    4.           });
    и ни слова о том, а что если аякс ответ не успеет, с чем тогда работать всему функционалу, который в v-for перебирает this.products
    Вы дочитали там до:
    ? :)
    Да там и дальше куча подробностей, про текстовые узлы.
    Именно вот этого всего jQuery и помогала избежать.
    Когда ты работаешь со страницей комфортно и ожидаемо, но функционал явоскриптовый то, все эти слушатели, DOM, ты это все видешь как реально оно работает в браузере, всплытие/опускание события, без навороченной магии как та что встретил в Vue
     
  11. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    А если не для рендеринга?
    Вот пример из книги , где они делают список продуктов и корзину.
    Как эти все методы из methods назвать иначе чем просто набором процедур?
    Их даже нельзя отнести к методам одного объекта(SRP), т.к. там одним объектом и не пахнет, по сути туда складывается все что "потребуется" - и инфа нужная для отображения и реакция на действия пользователя и бизнес логика.
    Про то как они на js сортировку самопальную, на строке 239, изобрели, вообще волосы приподнимаются.
    Ну да, охота забить на все возможности баз данных, лишь бы на js было занятие, часы оплачиваемой работы
     
  12. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Нет. Вся бизнес-логика, cервисы и валидация так и остаются в API. Фронтенд лишь рендерит форму, отсылает запрос в API и просто выводит под полями ошибки, которые ему вернулись в JSON. Только такой подход безопасен, когда вся логика на сервере, а фронт только рендерит и посылает Ajax-запросы.
    В первом же абзаце во вступлении обрисовывают:
    Так что Vue - это именно фреймворк для view. Для построения интерфейсов из компонентов-виджетов, а не фрейморк для всего проекта. Поэтому в его документации и написано только про его анимацию, реактивность и рендеринг, но ничего нет про организацию бизнес-логики, запросы к API и всё остальное. Если добавить роутер, то с ним комплект Vue+Router уже станет микрофреймворком для разработки приложений из нескольких псевдостраниц. Если добавить хранилище, то данные и бизнес-логику можно будет вынести из виджетов туда.

    В экосистеме React есть сайт с документацией по самой библиотеке React и есть отдельный второй сайт с документацией по разработке целикового приложения с маршрутизацией, бизнес-логикой и тестированием. Поэтому там программисты не путаются.
     
    marlin нравится это.
  13. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Ну это я другому человеку писал, который утверждал выше что php останется чисто для выборки данных из базы.
    Насчет валидации, вот неуверен что одной аякс валидацией удобно будет обойтись.
    Вот как в yii: в основном работает клиентская валидация, на лету, а уж если что не получается, то серверная, через аякс
    ну да, если сейчас на это так взглянуть...
    Хотя в моем понимании задачи уровня представления - это все с чем пользователь контактирует в браузере, т.е. все js приложение
     
  14. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Ну так можно и совмещать при желании. Добавить клиентскую как в документации нативно или библиотеками, если помимо серверной хочется это по onChange делать. Но при этом основная так и будет на сервере, а клиентская лишь для красоты.
    Пользователь в браузере контактирует с DOM. С тегами и событиями. Это всё Vue предоставляет. А что программист по onClick будет делать - это уже его дело.
     
  15. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Обернуть v-for в v-if:
    HTML:
    1. <div v-if="products">
    2.     <div v-for="product in products">...</div>
    3. </div>
    4. <div v-else>
    5.     Loading...
    6. </div>
    И пока поле products пустое будет выводиться Loading.
    Это виджет корзины со всеми методами для кнопок корзины. Здесь выделением бизнес-логики не заморачивались.

    Вы так говорите, как будто в Yii программисты в слое представления на jQuery такого не делают.
     
  16. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Ну так это по любому потребуется, любой какой нибудь типа compare валидатор или регулярку - это все логика, которую на vue надо куда то располагать
    Ну есть же тут кое какая логика - canAddToCart - то что и на беке бы проверялось, если без vue, и что полюбому придется проверять при получении такой корзины.

    Там человек на yii написал простой скрипт как он его на чистом php бы написал, просто используя yii как обертку. Явно новичек.
    Вот и я сейчас начав знакомиться с Vue, такое же мог бы накатать на нем, все в одном файле для простоты, учитывая отсутствие структуры из доки по vue.
     
  17. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    Хотя может конечно меня подводило мое незнание трендов и технологий в js.
    Для меня это было всегда просто, есть jQuery, есть мой js код, а yii делает последовательности подключения за тебя.
    А на фронте уже начиная с ES5 хитрыми путями модульность писали и собирали это через webpack, хотя последнее походу и для ES6 нотаций тоже делают.
     
  18. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Оригинальный валидатор так и будет в бэке. Если же захотелось для красоты добавить ту же самую валидацию реактивно на фронт, то придётся копировать регулярку. Либо самому вписать if по onKeyUp или onChange, либо подключить библиотеку для клиентской валидации.
    Эта логика используется для отображения или сокрытия кнопки:
    HTML:
    1. <button v-on:click="addToCart(product)" v-if="canAddToCart(product)">Add to cart</button>
    чтобы в корзину не накликали больше товаров, чем есть в наличии.

    Если в примере корзина хранится только в LocalStorage браузера, а не на бэке, то бэк это сейчас никак не посчитает.
    А здесь такой же человек на Vue написал простой скрипт как он его на чистом JS бы написал, просто используя Vue как обертку. Накатав вывод товаров и корзину в одном файле для простоты без структуры из доки. Тоже может быть новичок.

    Я про то, что как в моём примере мешанина в одном файле без структуры на Yii, так и в вашем примере такая же мешанина в одном файле без структуры на Vue.

    Так что либо ваш автор книги пока сильно упрощает и потом всё исправит, либо вам просто с автором не повезло.
     
  19. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    61
    Симпатии:
    3
    @ElisDN как считаете у Vue уверенное будущее?
    Не сольют его, как тот китаец, основатель Yii, слил свой проект.
     
  20. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Из Yii тот китаец ушёл в 2015-ом. Но этого никто не заметил, так как уже была команда из нескольких человек.

    Также в Vue можете ознакомиться с его командой. Так что будущее у Vue есть. А понравится оно вам или нет - это уже другой вопрос.