Внимание
Данный материал отображает личное мнение автора, которое может не совпадать с мнением окружающих. Автор никак не пытается ущемить кого-либо, а лишь высказывает свое видение, основываясь на своем личном опыте
А тут много мелкого и непонятного текста, который все равно никогда обычно не читают. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Новая надежда
Давным-давно, в недалеком мире Web-разработки...
И зачем нужны эти
JS фреймворки ?
Ведь падающий снег на страницу можно и без них добавить
Back to the future
Dojo использовал require
задолго до появления Browserify
И да, в нем были компоненты !!
<script> dojo.require(”dojo.widget.Editor2”); </script> <!-- ... --> <textarea dojoType=”Editor2”> ... </textarea>
Пакеты, предоставляемые Dojo в то время
- dojo.collections — набор полезных структур данных (список, очередь, множество, стек, словарь и т. д.);
- dojo.crypto — API для шифрования данных (Blowfish, MD5, Rijndael, SHA);
- dojo.date — функциональность для работы с датами;
- dojo.dnd — API для реализации drag&drop;
- dojo.event — API для обработки событий с поддержкой AOP и topic/queue-функциональности;
- dojo.lfx — набор всевозможных специальных эффектов как для HTML, так и для SVG;
- dojo.io — различные варианты ввода-вывода, включая cookies и IFrame;
- dojo.lang — пакет существенным образом дополняет базовые возможности языка JavaScript, добавляя closure based functions и т. д.;
- dojo.logging — мини-framework для управления авторизациями;
- dojo.math — основные математические манипуляции (curves, points, matrices);
- dojo.reflect — пакет, реализующий reflection routines;
- dojo.storage — пакет, отвечающий за офлайновое хранение данных на клиентской стороне;
- dojo.string — пакет позволяет делить строки, менять их кодировку и многое другое с помощью простых функций;
- dojo.undo — менеджер для undo-функциональности;
- dojo.uri — пакет для работы с URI;
- dojo.widget — пакет, позволяющий создавать HTML/JavaScript-компоненты, которые затем можно включать с помощью простых тегов;
- dojo.xml, dojo.dom — два пакета, которые намного упрощают манипуляции с DOM и XML;
- dojo.style — позволяет легко манипулировать данными в CSS (доступ к размерам и т. д.).
2006 год
JQuery







<div id="app"> <h1>{{ message }}</h1> </div>

<div id="app"> <h1>{{ message }}</h1> </div> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script> new Vue({ el: '#app', data: () => ({ message: 'Hello R2-D2!' }) }) </script>

<template lang="pug"> #app: h1 {{ message }} </template> <script> export default { data: () => ({ message: 'Hello R2-D2!' }) } </script>

Vue VS React
class Timer extends React.Component { constructor (props) { super(props); this.state = {secondsElapsed: 0}; } tick () { this.setState((prevState) => ({ secondsElapsed: prevState.secondsElapsed + 1 })); } componentDidMount () { this.interval = setInterval( () => this.tick(), 1000 ); } componentWillUnmount () { clearInterval(this.interval); } render () { return ( <div>Seconds Elapsed: {this.state.secondsElapsed}</div> ); } }
<template> <div>Seconds Elapsed: {{ secondsElapsed }}</div> </template> <script> export default { data: () => ({ secondsElapsed: 0 }), methods: { tick () { this.secondsElapsed += 1 } }, mounted () { this.interval = setInterval(this.tick, 1000) }, destroyed () { clearInterval(this.interval) } } </script>
import Remarkable from 'remarkable' class MarkdownEditor extends React.Component { constructor (props) { super(props); this.handleChange = this.handleChange.bind(this); this.state = {value: 'Type some *markdown* here!'}; } handleChange () { this.setState({value: this.refs.textarea.value}); } getRawMarkup () { var md = new Remarkable(); return { __html: md.render(this.state.value) }; } render () { return ( <div className="MarkdownEditor"> <h3>Input</h3> <textarea onChange={this.handleChange} ref="textarea" defaultValue={this.state.value} /> <h3>Output</h3> <div className="content" dangerouslySetInnerHTML={this.getRawMarkup()} /> </div> ); } }
<template> <div class="MarkdownEditor"> <h3>Input</h3> <textarea v-model="value" /> <h3>Output</h3> <div v-html="rawMarkup" /> </div> </template> <script> import Remarkable from 'remarkable' export default { data: () => ({ value: 'Type some *markdown* here!' }), computed: { rawMarkup () { const md = new Remarkable() return md.render(this.value) } } } </script>
Vue преимущества основные
Простота
Низкий порог вхождения
Быстродействие
Небольшой вес (26К в сжатом виде)