Igor Konovalov
JS developer with a passion. Currently working as a senior software engineer at Epam
Manipulates
View
Model
Controller
Модель хранит данные и логику
отвечает за отображение данных модели пользователю, реагируя на изменения модели
интерпретирует действия пользователя, оповещая модель о необходимости изменений
User
Sees
Updates
Updates
Model - View - ViewModel
View
View Model
Model
привязка данных
команды
получение данных
обновление модели
модель представления связывает модель и представление через механизм привязки данных. Если в модели изменяются значения свойств, идет изменение отображаемых данных в представлении
ваш код
ваш код
Библиотека
Фреймворк
Привлекло к JavaScript внимание серьезно настроенной общественности
Облегчило разработку сложных продуктов, появились первые сборщики
NPM - все пакеты в одном месте и это стало удобно
Express.js - 16 Ноября 2010
Backbone.js - 12 Октября 2010
AngularJS - 20 Октября 2010
Ember.js - 8 Декабря 2011
React - 29 Мая 2013
Vue - Февраль 2014
Angular - 14 Сентября 2016
На самом деле facebook не придумал ничего нового, а сделал MVC нормально, назвав по другому
Библиотека для создания пользовательских интерфейсов
Высокая производительность с Virtual Dom
Масштабируемость
JSX - (давайте скрестим ужа с ежом?)
React Native и Preact
Поощряет функциональный паттерн разработки
Код разбивается на юниты и легко тестируем
Flux архитектура (с/без Redux)
Огромная экосистема и комьюнити
Применяется на больших production проектах
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const Greeting = ({ greeting }) => (
<div className="App">
<h1>{greeting}</h1>
</div>
);
const rootElement = document.getElementById("root");
ReactDOM.render(<Greeting greeting="Hello world!" />, rootElement);
<div id="root">
<div class="App">
<h1>Hello world!</h1>
</div>
</div>export default class Stars extends Component {
async componentDidMount() {
let stars = await githubStars(this.props.repo);
this.setState({ stars });
}
render({ repo }, { stars=0 }) {
let url = `//github.com/${repo}`;
return (
<a href={url} class="stars">
⭐️ {stars} Stars
</a>
);
}
}import Stars from './stars';
render(<Stars repo="developit/preact" />, document.body);С TypeScript код начинает выглядеть подозрительно похоже на Java.
В теории облегчает рефакторинг при использовании SOLID
@Component({
selector: 'hello-world'
})
@View({
template: '<div>Hello {{name}}</div>'
})
class HelloComponent({
name: 'World'
})
bootstrap(HelloComponent);html:
<hello-world></hello-world>
=> <div>Hello World</div>поддержку Vue можно добавить в уже существующий проект, благодаря чему его функциональность будет значительно расширена. И это отличает его от других фреймворков
Прогрессивность, хорошо подходит для проектов, где нужно рефакторить (JQuery), в целом очень просто интегрируется
Создавался одним человеком (Эван Ю) под влиянием Angular - с целью выкинуть все лишнее и взять лучшее
20! Кб в минимальной версии
Простой в освоении
Поддерживает основные актуальные библиотеки в соответствии с ядром
Нет большой корпорации, которая бы "прикрывала" разработку - изначально средства были собраны на Patreon
Очень хорошо подходит там, где нужно использовать анимацию/svg
Код не требуется переписывать - Vue очень просто ввести постепенно, использую его только там где надо
"Thanks to the framework, Behance could migrate the existing codebase smoothly "
"Thanks to gradually introducing Vue.js adding new features, and migrating old ones is an option without the hassle of rewrites or refactoring. Vue.js helped GitLab boost time & cost efficiency"
"Adobe wanted to maintain the exceptional user experience and performance, so they decided to have its fronted teams switch to Vue.js and migrate the existing codebase smoothly"
Библиотека для создания веб - приложений с использованием технологии Web Components
Разрабатывается Google и опенсорс комьюнити
композиционные возможности реализованы не с помощью мета-платформы и js-абстракций поверх обычного DOM, а на уровне самого браузера
Можно использовать вместе с практически любой библиотекой или фреймворком - можно писать по настоящему переиспользуемый код
Сочетание браузерных технологий, позволяющий инкапсулировать часть страницы вместе с логикой в кастомный компонент
import {PolymerElement, html} from '@polymer/polymer/polymer-element.js'
class HelloElement extends PolymerElement {
static get template() { return html`
<style>
/* Local DOM CSS style */
</style>
<!-- Local DOM -->
Hello {{name}}!
`; }
static get is() { return 'hello-element'; }
static get properties() {
return {
name: {
type: String
}
/* Element properties */
}
}
/* Custom methods */
}
window.customElements.define(HelloElement.is, HelloElement);<hello-element name="World"></hello-element>Количество скачанных пакетов в месяц
Ember и Polymer настолько малы, что не видны на этом графике
| Ember 2.2.0 | 111K |
| Ember 1.13.8 | 123K |
| Angular 2 | 111K |
| Angular 2 + Rx | 143K |
| Angular 1.4.5 | 51K |
| React 15.3.0 + React DOM | 43K |
| Vue 2.4.2 | 20.9K |
| Inferno 1.2.2 | 20K |
| Preact 7.2.0 | 4kb |
Март 2018
Github
By Igor Konovalov
Current state of modern and not-so modern frameworks (2019 Jan)
JS developer with a passion. Currently working as a senior software engineer at Epam