В помощь разработчику: мини-анализатор кодаAndrey Karpov
В процессе разработки проекта часто можно столкнуться с одинаковыми паттернами ошибок. Своими или коллег по команде. Думаете, невозможно автоматизировать проверку этих паттернов?
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Yandex
Писать сложный клиентский JavaScript непросто. Каждый, кто пробовал, знает это не понаслышке. Как писать независимые блоки? Как писать блоки, состоящие из других блоков? Как сделать библиотеку блоков? В докладе мы расскажем про то, как упростить себе жизнь и научиться писать клиентский JavaScript в БЭМ-терминах.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Yandex
Существует большое количество разных HTML-шаблонизаторов, и, зная это, мы написали свой, экзотический! Мы расскажем о том, что получилось в итоге и зачем мы это сделали. А также подробнее остановимся на синтаксисе, семантике, оптимизации и компиляции шаблонов в эффективный JavaScript.
With application and team growth such questions as keeping documentation up to date, sharing of the knowledge, communication between stakeholder and development team became more and more actual. BDD as methodology is aimed to minimize negative impact of those issues. Spock and Geb frameworks will help us to illustrate BDD implementation on specific example.
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
В процессе работы из проекта в проект я тащу свой «велосипед», постоянного его подтачиваю или модифицирую под конкретные нужды. Хотел бы рассказать о нем, его плюсах и минусах. Кроме этого, поговорим о том, какие «велосипеды» для работы с API существуют.
В помощь разработчику: мини-анализатор кодаAndrey Karpov
В процессе разработки проекта часто можно столкнуться с одинаковыми паттернами ошибок. Своими или коллег по команде. Думаете, невозможно автоматизировать проверку этих паттернов?
Сергей Бережной "Клиентский JavaScript в БЭМ-терминах: от блока до библиотеки"Yandex
Писать сложный клиентский JavaScript непросто. Каждый, кто пробовал, знает это не понаслышке. Как писать независимые блоки? Как писать блоки, состоящие из других блоков? Как сделать библиотеку блоков? В докладе мы расскажем про то, как упростить себе жизнь и научиться писать клиентский JavaScript в БЭМ-терминах.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Yandex
Существует большое количество разных HTML-шаблонизаторов, и, зная это, мы написали свой, экзотический! Мы расскажем о том, что получилось в итоге и зачем мы это сделали. А также подробнее остановимся на синтаксисе, семантике, оптимизации и компиляции шаблонов в эффективный JavaScript.
With application and team growth such questions as keeping documentation up to date, sharing of the knowledge, communication between stakeholder and development team became more and more actual. BDD as methodology is aimed to minimize negative impact of those issues. Spock and Geb frameworks will help us to illustrate BDD implementation on specific example.
Организация работы с API на Vue.js, Виталий КопачёвMail.ru Group
В процессе работы из проекта в проект я тащу свой «велосипед», постоянного его подтачиваю или модифицирую под конкретные нужды. Хотел бы рассказать о нем, его плюсах и минусах. Кроме этого, поговорим о том, какие «велосипеды» для работы с API существуют.
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
Современный Веб всё больше стремится к динамичным, похожим на приложения, сайтам.
Оперативно строить быстрый и динамичный интерфейс на проекте N1.RU нам помогает Vue.js.
Однако, как и многие современные библиотеки и фреймворки, Vue.js не умеет рендериться на сервере.
При этом иметь такую возможность бывает полезно по нескольким причинам: начиная от вопросов SEO и заканчивая красотой загрузки страницы.
Чтобы реализовать такую возможность для Vue.js мы создали его дополнение — Vue-server.js.
Я расскажу о том, что умеет Vue.js, что у нашего дополнения "под капотом", почему мы выбрали такой путь и как, вообще, всё это работает. А ещё попробую дать критическую оценку проделанной работе.
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020OdessaJS Conf
How to develop web applications using Vue.js and implement best practices from the first day of development. Consider practical recommendations for using Vue.js, based on personal experience, thoughtful reading of documentation and analysis of best practices suggested by other developers. During the talk, you will learn what you can implement today in your development practice to make your web applications on Vue.js more productive and the development process more efficient.
Сергей Константинов — Что интересного готовит нам W3CYandex
2014 год обещает нам множество интересных нововведений. Помимо новинок в HTML5, нас ждут глобальные изменения в самой веб-платформе. Promises и модули — революция в стандартах разработки стандартов. Service Workers — новый подход к решению проблемы офлайновых веб-приложений. @@create — отнаследуйся от HTMLElement! Обо всём этом и пойдёт речь в докладе.
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
В докладе рассматривается использование популярных фреймворков в разработке ASP.NET MVC приложения, как сделать его наиболее гибким. Будет затронута тема минимизации дублирования и повторное использование кода, применение методов метапрограммирования отображений; уменьшение логики в контроллерах; применение принципов SOLID и GRASP для разработки доменной модели приложения.
По материалам конференции .NET разработчиков http://www.dotnetconf.ru/Materialy/Asp_net_mvc_kak_postroit_gibkoe_web_prilozenie
All you need is Vue, Nuxt is all you need | Odessa Frontend Meetup #10OdessaFrontend
Уже все знают о React и Angular, но что мы знаем о Vue.js? Андрей Стягайло рассказывает не только о Vue.js, но и о том что такое Nuxt.js и почему на него стоит обратить внимание в 2019 году.
Где кончается react native? / Павел Кондратенко (Rambler&Co)Ontico
РИТ++ 2017, Frontend Сonf
Зал Мумбаи, 5 июня, 11:00
Тезисы:
http://frontendconf.ru/2017/abstracts/2496.html
В своем выступлении я расскажу про то, как библиотека бумажных книг в нашей компании переехала в онлайн и причем тут react native. Погружаясь в архитектуру этой технологии я постараюсь дать представление о том, что можно выжать из нее и где заканчиваются ее возможности. Разберем потоки в приложении, возможные проблемы и все это на таких простых примерах как ActivityIndicator.
Если у вас еще не дошли руки до react native, но всегда хотели разобраться - приходите обязательно! Из моего доклада вы сможете, как минимум, получить представление об этой технологии.
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
О том, как перестать вручную контролировать DOM, писать логику навигаций и почему DOM-шаблонизация — это классно, а так же немного самокритики и сравнительных тест-кейсов.
Михаил Давыдов "Масштабируемые JavaScript-приложения"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Михаил Давыдов "Масштабируемые JavaScript-приложения"
О докладе:
Проектирование масштабируемых JavaScript-приложений уровня Яндекс.Почты.
Чем отличается сайт от JavaScript приложения? Какие проблемы могут возникнуть при разработке многокомпонентных приложений? Какую архитектуру нужно заложить, чтобы приложение могло легко развиваться?
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
Сергей Коржнев
Архитектор версии 1.4 2ГИС Web API
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Тезисы:
● Как организован код в старой версии.
● Вдумчиво смотрим, как мы используем Yii, хватаемся за голову и клавиатуру. Там отрезаем, тут пришиваем, и вуаля!
● Ну и делаем выводы, как мы забороли две классические проблемы программирования: борьба с дублированием кода и сложностью системы.
Similar to Andrew Borisenko "Magic of Vue.js"" (20)
'How i came up with my talk' by Yurii Artiukh. OdessaJS'2021OdessaJS Conf
The document describes the process by which someone decided on a topic for their presentation. They initially considered topics like animations or differential equations. After seeing an animation example, they wanted to create one themselves from 0 to 1, but struggled for over a day to get the math right. They eventually landed on an exponential function that achieved the desired animation effect over time. They questioned why they went through so much effort to figure this out.
Олексій Павленко. CONTRACT PROTECTION ON THE FRONTEND SIDE: HOW TO ORGANIZE R...OdessaJS Conf
The document discusses various approaches for performing contract protection on the frontend side such as integration testing, law-driven contract testing, consumer-driven contract testing, and runtime checking. It then focuses on runtime checking, explaining what it is and how it can add an extra step to quality assurance by allowing integration errors to be responded to in real time. Details are provided on Oleksii Pavlenko who is an engineering manager, PhD holder, and former professional basketball player with interests in surfing, snowboarding, and other boardsports.
Андрій Троян. Розробка мікросервісів з NestJS. OdessaJS'2021OdessaJS Conf
This document discusses NestJS, a framework for building Node.js microservices. It introduces microservices and their key characteristics like loose coupling and independent deployment. It then covers how NestJS provides an architecture that allows for highly testable, scalable, and maintainable applications. Specific NestJS features are summarized like modules, controllers, providers, pipes, error handling, and decorators. Finally, it discusses using NestJS for microservices, including different transporters and message styles like request-response and event-based communication.
Олексій Гончар "Використання Electron в розробці корпоративної відео-мессeндж...OdessaJS Conf
This document provides an overview of Electron and its history and principles. It then summarizes the RingCentral MVP platform, including its features and transition to using Electron. Finally, it describes the RingCentral desktop app, its features and technology, and its CI/CD processes. The document contains sections on Electron, the RingCentral MVP platform, and the RingCentral desktop app.
Максим Климишин "Що такого особливого у пропозиції вартості шаблону Micro Fro...OdessaJS Conf
Micro frontends is a design pattern that splits an application into multiple independently deployable frontend applications to reduce dependencies between teams and improve the speed of delivery. This approach can reduce execution and delivery risks like long cycle times and inconsistent user experiences. It allows for more autonomous teams and faster time to market. However, it also introduces some risks around broken user interfaces if components are not built consistently. Adopting a micro frontends approach requires buy-in from engineering leadership as well as change management to shift teams away from old habits.
Павло Галушко. GOOD CODE MYTHS. OdessaJS'2021OdessaJS Conf
The document discusses myths about writing good JavaScript code. Some myths addressed include: that good code is only for aesthetics; that programming is only about writing code; and that principles and patterns from object-oriented programming do not apply to JavaScript. The presentation argues that good code is important for business reasons like maintenance and refactoring costs. It emphasizes writing testable code, following style guides, and applying design principles universally.
'BUILDING ANGULAR APPS WITH NX' by Anastasia NecheporenkoOdessaJS Conf
This document discusses approaches to managing Angular applications, including using multiple repositories versus a monorepository. It notes advantages and disadvantages of each, such as isolation but also hard dependencies with multiple repos, versus easy code sharing but potential messiness with a monorepo. The document then introduces Nrwl Nx as an open-source tool that helps manage monorepos for Angular apps, providing features like dependency graphs, smart rebuilds, and code generators. However, it cautions that using Nx requires following its structure patterns and configurations, and migrating codebases and teams to its approach can also require effort.
'IS THERE JAVASCRIPT ON SWAGGER PLUGINS?' by Dmytro GusevOdessaJS Conf
This document discusses JavaScript plugins for the Swagger API documentation framework. It begins with an overview of Swagger and related tools like swagger-editor. It then covers challenges with customizing Swagger and different approaches tried, like using custom Swagger definitions or closures. The main topics covered are the plugin system architecture, including available React components, Redux state management, and plugin APIs. It asks several questions about how to interact with and extend the plugin system.
'ETHEREUM SMART CONTRACTS ON JS' by Yaroslav DvorovenkoOdessaJS Conf
This document discusses Ethereum, smart contracts, and blockchain technology. It defines Ethereum as a cryptocurrency platform that allows for decentralized services and applications through the use of smart contracts written in the Solidity programming language. Smart contracts are computer programs that automatically execute transactions, actions, and legally relevant events without the need for intermediaries. The document provides examples of how smart contracts could be used for elections, digital currency, and instant money transfers with low fees. It also discusses tools like Ganache, Truffle, and Web3.js that allow for developing, testing, and interacting with smart contracts and decentralized applications.
'MICROFRONTENDS WITH REACT' by Liliia KarpenkoOdessaJS Conf
This document discusses microfrontends architecture. It begins by explaining why an organization may want to use a microfrontends approach, such as when different teams in different locations need to work on the same project simultaneously. It then discusses some of the downsides of a monorepo approach and when a monorepo may be preferable to microfrontends. The document outlines some of the challenges microfrontends can present and why they can also be a good choice. It provides examples of how to divide an app into microfrontends, such as by routes, features, or a combination, and options for using different frameworks within microfrontends like web components, module federation, and iframes. It concludes by discussing testing and development
'Web performance metrics' BY ROMAN SAVITSKYI at OdessaJS'2020OdessaJS Conf
Let's brainstorm web-productivity? It's easy to get lost in different sources - so how to choose them wisely? Main topics: Metrics, best practices, problems and solutions
Вебпродуктивність. Що ще тут розповісти? Всі ми знаємо, що це важливо, як не отримувати таких проблем і до чого це призводить. Але якщо необхідно вирішити проблему серед тонни ресурсів важко обрати потрібний. Моя доповідь не тільки про рішення проблеми, а про находження інструментів та метрик для рішення проблеми. Чому саме ці метрики варто використовувати і як з цим жити. Метрики, практики, проблеми, рішення. Які різні поняття, а насправді це цепочки, які нам разом необхідно виставити в логічний ряд. Запрошую Вас побрейнштормити разом!
'JavaScript was invented in Odessa' by DMITRIY GUSEV at OdessaJS'2020OdessaJS Conf
JavaScript is wild and dangerous. I’ve been using it for years and time to time faced with the same issues.
Also being an interviewer I talked to lots of people.
And most of them able to answer the questions correctly, but can not explain why it works so. In my talk, I prepared examples of ‘what is wrong with JS’ and explained why it works so based on ECMA specifications.
'Why svelte' by BORYS MOHYLA at OdessaJS'2020OdessaJS Conf
I'll tell you why I chose Svelte. What I like about Svelte and what not. Let's talk about when to use Svelte in production and why.
The technology shows new possibilities of the composition of high-level abstractions and high-performance low-level code.
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020OdessaJS Conf
How to develop NodeJS apps effectively? I will tell you all details and share his personal experience on the whole process: from the very start and up to the production stage.
You will also learn more about Docker, SDLC and 12 Factor App. Save the date!
2. Борисенко Андрей
Занимаюсь веб-разработкой с 2000 года.
Умею верстать под пятый Эксплорер.
Пишу на джаваскрипт.
Проектирую интерфейсы.
Почта: seigiard@gmail.com
Скайп: seigiard
3. Создан в 2012 г.
Поддерживается Фейсбуком.
67000 звезд на Гитхаб за 5 лет.
Реакт используют все и везде вокруг.
Реакт компонентный — это удобно.
Реакт быстрый — это важно.
Реакт показал, как можно работать.
Реакт
4.
5. Реакт — это только представление. Собери свой велосипед!
Реакт — это JSX. Смешай джаваскрипт с «версткой»!
Реакт — мы ни слова не говорим про стили!
Реакт — это компоненты. Много компонентов. Ещё больше компонентов!
Реакт — это очень излишне непомерно избыточно раздутый код. Местами.
Реакт
9. Создан в 2014 г., переписан в 2016 г.
Поддерживается Алибаба Груп.
54000 звезд на Гитхаб за 3 года.
Под мобильные Виикс (Weex).
Используют Вью:
GitLab, Laravel, CodeShip, PageKit...
История развития Вью
Звёзды на гитхабе: Реакт, Вью
10. Хуки жизненного цикла компонента
Вью
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed
Реакт
constructor
componentWillMount
componentDidMount
componentWillReceiveProps
componentWillUpdate
componentDidUpdate
componentWillUnmount
Инициализация компонента
Создание компонента
Перед началом монтирования
Компонент смонтирован
Перед обновлением компонента
Компонент обновлён
Перед удалением компонента
Компонент удалён
12. Компоненты в Реакте
class HelloWorld extends React.Component {
let items = null;
if (this.props.items) {
items = (<ul>
{this.props.items.map(item =>
<li key={item.id}>{item.name}</li>
)}
</ul>);
}
render() {
return <div>
<h1>Hello {this.props.name}!</h1>
{this.props.items ? items : <p>No items found</p>}
</div>;
}
}
Логика может быть
размазана по всему
компоненту.
Логика может быть спрятана
в рендер-функции.
13. Компоненты во Вью: всё в одном файле
<template>
<h1>Hello {{name}}!</h1>
</template>
<style>
h1 { color: red }
</style>
<script>
export default {
data() => {
name: ‘World’
}
}
</script>
Компонент состоит
из трёх явных частей:
- Шаблон
- Стили
- Логика
14. Компоненты во Вью: всё по файлам
<template>
<h1>Hello {{name}}!</h1>
</template>
<style src="./hello.css" scoped></style>
<script src="./hello.js"></script>
16. Опции компонента: пропсы
// Простая форма записи
{
props: ['size', 'myMessage']
}
{
props: {
// только проверка типа
height: Number,
// проверка типа и другие правила валидации
age: {
type: Number,
default: 0,
required: true,
validator: x => x >= 0
}
}
}
Атрибуты компонента,
по которым приходят данные
из родительского
компонента.
18. Опции компонента: наблюдатели
{
data: { a: 1 },
watch: {
// реагирует на изменение a:
a(value, oldValue) {
console.log(
'новое значение: %s, старое значение: %s',
val,
oldVal
);
}
}
}
this.a = 2; // → новое значение: 2, старое значение:
1
Объект, ключи которого —
это свойства для
наблюдения,
а значения — функции,
вызываемые при изменении.
19. Опции компонента: методы
{
data: { a: 1 },
methods: {
plus: function () {
this.a++
}
}
}
this.a; // 1
this.plus();
this.a; // 2
Вся методы, например
обработка событий,
хранятся здесь.
22. Нет медиа-выражений.
Нет ховера и фокуса.
Нет псевдоэлементов.
Стили в Реакт: инлайн
const headerStyle = {
color: 'red',
fontSize: '24px',
// Это невозможно понять,
это можно только запомнить.
WebkitTransition: 'all', // тут большая 'W' важна
msTransition: 'all' // а 'ms' уже маленькая
};
class HelloWorld extends React.Component {
render() {
return <h1 style={headerStyle}>
Hello World!
</h1>;
}
}
30. Шаблон в Реакте, наверное, где-то тут
return <div>
{props.isLoggedIn
? <UserGreeting/>
: <GuestGreeting />
}
</div>
return <div>
{state.array
.map((s,i) => <span key={i}>{s}</span>)
}
</div>
return <div>{myAwesomeTemplate}</div>
Можно в представлении
засунуть много логики.
Можно размазать
представление по коду
компонента.
Легко запутаться и запутать
других.
31. Шаблон во Вью
<template>
<div>
<user-greeting v-if=”isLoggedIn”/>
<guest-greeting v-else />
<span v-for=”i in Array(level).fill(0)” :key=”i”/>{{i}}</span>
</div>
</template>
Валидный HTML — валидный шаблон.
Директивы, как управление логикой отображения.
Можно использовать JSX или сразу функцию render.
36. Двунаправленное связывание во Вью. С
рюшечками.
<template>
<div>
Name: <input-length v-model='name' />
<br/>
Hello {{name}}!
</div>
</template>
Компонент с поддержкой v-model:
— принимает входной параметр value
— порождает событие input с новым значением
38. Управление состоянием в Реакт: Редакс
Явно связываем
стэйт и пропсы.
Явно объявляем экшены
для диспатчеров.
39. Управление состоянием в Реакт: Мобикс
Явно указываем, за какими
свойствами стора
следим в компоненте.
Все экшены доступны.
Чуть больше магии
обсерверов.
40. Управление состоянием во Вью: Вьюикс (Vuex)
Весь стэйт доступен.
Все экшены доступны.
Магия обсерверов на 100%
45. Магия Вью: вычисляемые свойства
{
data: { a: 1 },
computed: {
// свойство только возвращает данные:
aDouble() {
return this.a * 2
},
// свойство и возвращает, и получает данные:
aPlus: {
get() { return this.a + 1 },
set(v) { this.a = v − 1 }
}
}
}
this.a; // 1
this.aPlus // 2;
this.aPlus = 5;
this.a; // 4
this.aDouble; // 8;
Свойства кешируются
и повторно вычисляются
только при изменении
реактивных зависимостей.
46. Скорость Вью и Реакт
Вью на ≈10% быстрее Реакта в сырой производительности рендеринга
и обновления страницы.
http://www.stefankrause.net/wp/?p=431
Реакт отлично оптимизируется вручную, а Вью позволяет сосредоточиться
на написании кода.
48. Преимущества Вью
Вью — коробочная система для одностраничных приложений.
Вью стремительно развивается.
Файл компонента выглядит понятно.
Удобная работа с шаблонами и стилями.
Небольшая щепотка синтаксического сахара.
У Вью настоящая реактивность под капотом.
Вью изумительно прост.
57. Работайте с тем, что
знаете.
Изучайте новое.
Задавайте вопросы.Борисенко Андрей, seigiard@gmail.com
Editor's Notes
Я веб-разработчик.
Влюбился в веб в конце 90х
Успел поверстать под пятый Интернет Эксплорер
Начал карьеру универсальным программистом на ПиЭйчПи.
Ушёл в верстальщики на модный стек HTML+CSS+JS.
В Одессу я переехал в 2012 из Минска.
Начал работать фронтенд-разработчиком в небольшой компании.
Сейчас я делаю фронтенд в полном смысле этого слова
делаю прототипы
разрабатываю интерфейсы
создаю системы разработки интерфейсов, чтобы разработчики не поубивали дизайнеров
программирую и верстаю
Первый фреймворк — Ангуляр
Легкий порог вхождения
Понятная логика работы
Большая поддержка комьюнити
Эксперименты: «Нормально», «писать можно», «попробовали и хватит», но ничего выдающегося.
Посмотреть на него в 2013 году и отложил
Посмотрел недавно и… теперь я его боюсь.
Реакт — великолепная вещь.
Компонентный подход, виртуальный дом, новая веха разработки.
Используют все.
Любят все, 67 тыс. звёзд на Гитхабе
Это большой конструктор «собери сам».
Можно построить болид, а можно разваливающийся самокат
Непонятные и странные моменты:
многословность (Редакс)
слишком много компонентов
JSX → размазанные шаблоны
Стили
Недостатки Реакта это продолжение его гибкости!
Можно сделать лучше.
Вью — нет сожалений.
Как-раз в это время простой китайский паренёк Эван Ю пришёл работать в Гугл над Ангуляром.
Многие, как и я, знакомы с первым Ангуляром.
Реальный прорыв:
Первые шаги компонентного подхода
дата-биндинг,
простое понятие скоупа,
шаблоны с фильтрами и директивам
Работало на ИЕ
Эван решил написать свой фреймворк.
Китайская модель познания мира — через копирование и улучшение.
Скопируй, повтори, улучши — как китайские телефоны.
2014 — первая версия Вью
2016 — полностью переписана новая версия Вью
54 тысячи звёзд на Гитхабе
Виикс — аналог Реакт Нэйтив.
Фейсбук = Реакт, а Гугл = Ангуляр, Алибаба Групп = Вью.
GitLab перевёл свою разработку фронтенда на Вью
GitLab, Laravel, CodeShip, PageKit
Цикл компонента:
создание,
монтирование,
обновления
уничтожение,
Почему сразу цикл? Зашёл с козырей: Красота, понятность и лаконичность наименования
Шутка.
Простота внутри.
Глядя на код компонёнта Вью, всё понятно.
В компоненте Реакта сложно разобраться, где у нас код, а где представление.
Шаблон в логике, логика в шаблоне, можно натворить делов.
Хочется простоты и понятности.
Вью: три части компонента в одном файле:
шаблон
стиль
логика
Можно разнести по разным файлам, всё работает из коробки.
Опции компонента
Компонент Вью — объект со свойствами.
Свойство «дата» — объект с данными компонента, его внутренний стейт.
Свойство «пропс» — пропсы ожидаются в компоненте, как список или развёрнуто, с валидацией и прочим.
Похоже на пропТайпс в Реакте.
Свойство «компьютед» — это вычисляемые свойства компонента.
Мы поговорим о них позже.
«Вотч» — это вотчеры
Свойство «месодтс» это объект методов компонента.
Стили — самая странная и нелюбимая часть в Реакте.
Стили — боль. Опытные реакт-разработчики притерпелись.
Я люблю ванильного аштээмэль и цээсэс и это адский ад.
Инлайн-стили.
Инлайн-стили со свойствами с префиксами.
ВебкитТранзишн мы пишем с большой, префикс для эксплорера — с маленькой.
Инлайн-стили с псевдоэлементами и медиа-выражениями.
АД в дев-инспекторе
Люди начали искать пути решения проблемы
Внешний файл со стилями и использование классов.
Классы — это классНейм, а это БЕСИТ. <> это верстка!
Компонентный подход? Все для компонента в одном месте!
реакт-цээсэс-модули: импортим файл и используем названия классов
CSS-in-JS, СтайледКомпонентс
Стилизированные дом-элементы.
Взрывает мне мозг, но ОК
Во Вью всё проще.
Внешний css и классами, как и в Реакте.
Классический путь: пишем стили в блоке стилей
Собирается в цээсэс со стилем, но применяется ко всему приложению
Нужны скоупы
Аттрибут scoped и у нас есть скоупы для компонентов
Аттрибут module и биндим имена классов
Лоадер разберётся
Вторая вещь, не очень нравится
ДжейЭсИкс — это сила, потому что это код, который притворяется разметкой.
Циклы? Условия? Всё через код → некоторые преимущества
Возникают три проблемы:
Нельзя просто так скопировать код, помни о classNames
Много логики в рендере, где хотелось бы видеть чистые шаблоны.
Или мы размазываем шаблоны по компоненту и их становится не видно.
Валидный HTML — это валидный шаблон Vue
Управление циклами и условиями — через директивы в коде.
Естественно и декларативно для HTML.
Вью поддерживает Джээсикс.
Вью поддерживает рендер.
Работа с html - это ужас! Так никто не делает и так медленно!
Код шаблонов преобразуется в джаваскрипт, как и в Реакте
Все директивы — это просто синтаксический сахар.
Иф-элз — рендерится в функцию
Двунаправленное связывание между полем ввода и какой-то переменной.
В Реакт у нас есть значение стейта, оно биндится в инпут, а каждое изменение инпута меняет это значение стейта.
Объявили переменную как ви-модел в инпуте и связь установилась сама.
Под капотом ви-модель всё также происходит биндинг переменной и запись значения на каждое изменение.
Это позволяет нам реализовать кастомные поля ввода.
Нам надо всего лишь
принимать проперти «вэлью» вниз, в компонент,
и отсылать событие «input» наверх
Перейдём к управлению состоянием приложения, чтобы раскрыть тему
Стандарт де-факто в Реакте является Редакс.
Также люди используют Мобикс.
Схема работы у этих систем проста:
компонент имеет переменные, связанные со стором.
компонент вызывает экшн
экшн запускает магию
создаётся новый стор или обновляется старый
у компонентов обновляются переменные и компонент перерисовывается
Редакс
явно связать стэйт и пропсы через мэпСтейтТуПропс
и объявить экшены через мэпДиспатчТуПропс.
Мобикс — больше реактивности, меньше ручной работы
описать экшены
в компоненте объявить, за какими свойствами стейта мы будем наблюдать
Магия обсерверов: меняем стэйт — наблюдаемые значения обновятся автоматически
Вьюэкс
Реакт и Мобикс — несколько более многословным вариантом Вьюэкса.
Всегда доступен весь стейт
Всегда доступны все экшены
При вызове экшенов наши мутации меняют стэйт и всё изменения автоматически перерисовываются на местах.
Как работает магия Вью
Кто знает Мобикс — молчать
Мы знаем, зачем в Реакте нужен шудКомпонентАпдейт.
Для оптимизации перерисовки.
Во Вью компоненты сами знаю, когда и что им перерисовывать.
После компиляции, у каждого компонента появляется наблюдатель
Наблюдатель помечает все поля, как зависимости.
Наблюдатели строят дерево зависимостией.
Переменная меняется — знают все зависимые переменные через наблюдателей.
Инициируется повторный рендеринг.
Пересчитывать зависимости и перерисовывать ДОМ на каждое изменение данных очень накладно.
Обновление ДОМ выполняется асинхронно.
При изменении данных, создаётся очередь-буфер, в которую складываются все зависимые изменения данных.
Дубликаты убираются
В следующем тике Вью разбирает очередь и выполняет актуальные обновления.
Благодаря использованию буфера и устранению дубликатов, вычисления и манипуляции с ДОМом сводятся к минимуму.
Все зависимости автоматически собираются в дерево зависимостей
При обновлении одной переменной, обновляются и зависимые.
Обновления асинхронны, чтобы оптимизировать изменение дома
Как отслеживаются изменения?
Ангуляр — дёрти-чекинг
При компиляция компонентов, все свойства объекта date превращаются в геттер/сеттер, используя Обджект.дефайнПроперти.
Геттеры и сеттеры являются тем внутренним механизмом, который сигнализирует об изменениях.
У массивов нет геттеров и сеттеров на изменения массивов.
При инициализации данных Вью перехватывает методы внесения изменений массива, такие как пуш, поп, слайс, чтобы они уведомляли об изменениях.
Иммутабельные методы массива (filter, concat или reduce) всегда возвращают новый массив.
Это не проблема.
Вью минимизирует изменения в ДОМе, не перерисовывает сразу всё.
Поэтому можно не волноваться о производительности.
Вычисляемые свойства, которые зависят от других свойств.
Знаем зависимости — пересчитываем только при изменении зависимости.
Работа с обсерверами, кеширование и минимизирование работы с домом — очень хорошая производительность из коробки.
В синтетических тестах на изменение и обновление ДОМа, Вью быстрее Реакта где-то на 10%.
Реакт хорошо поддаётся оптимизации
Если Реакт требует ручной оптимизации, то Вью позволяет сосредоточиться на написании приложения.
Я попытался рассказать немного о магии Вью, благодаря которой я получаю истинное удовольствие от программирования.
Вью — это фреймворк для разработки приложений, а не один кусочек пазла, как Реакт.
Вью — стремительно развивается
Однофайловые компоненты — очень естественными в работе.
Работа с шаблонами во Вью более наглядна, чем в Реакте
Работу со стилями просто божественна.
Вью более прост в обучении, потому что простота, скажем так, встроена в дизайн Вью.
Кстати, о простоте.
7 лет назад Виндоуз → Убунту.
Эксперименты и настройка.
Ubuntu + AwesomeWindowManager.
Супернастройка, но никто не может работать, кроме меня.
Переезд в Одессу: Убунту → Мак
Две недели попытка настроить систему под себя.
Потом понимание, что надо просто работать.
Реакт = AwesomeWindowManager или машина Формула1
Вью = Мак или серийный спорткар. Просто берёшь и работаешь.
Сообщества процветают. Реакт на пике своего могущества.
Если вы заинтересовались Вью — документаця по Вью
Документация отличная и переведена на русский.
Я не призываю вас сразу переходить на Вью.
Вью только набирает силу, а если вы и ваша команда умеет готовить Реакт — вы будете продуктивны с Реактом.
Нравится Реакт и Мобикс — Вью.
В своём сайд-проекте хотите изучить что-то новое — Вью.
Надо быстро прототипировать — Вью
Надеюсь, он вам понравится.