Глоссарий
- Стандарты браузера: эта статья используется как собирательное название для es6, css3 и h5.
Зачем нам нужно изучать реализацию vue
Мы используем vue, потому что это одно из лучших решений в текущей индустрии, но волна итерации фронтенд-техрешений и развития промышленной стандартизации здесь, скорее всего, не дойдёт до конца во vue.
jQuery не умер, его гены были внедрены в стандарты браузеров. Вдохновение веб-компонента shadow dom также вдохновлено технологией vdom vue и react. Конечно, vue тоже развивается, но вы должны знать, что конкурентом vue является не реакция, а процесс стандартизации браузеров. Когда веб-компонент становится мейнстримом, технология vdom, о которой мы сейчас говорим, выполнила свою переходную миссию.
Поэтому у нас должно быть чувство кризиса и любопытства, и мы не можем слишком полагаться на vue. Нам нужно выяснить, какое волшебство творится в черном ящике Vue. В то же время мы также можем изучить многие современные методы разработки программного обеспечения и шаблоны проектирования, такие как tdd, шаблон агента, шаблон наблюдателя, искусство инкапсуляции и разделения.
Почему исходный код Vue трудно читать
- Так много функций
Цель чтения исходного кода vue — понять всю картину и реализацию некоторых основных функций, таких как двусторонняя привязка, рендеринг vnode и т. д. Исходный код Vue содержит слишком много неосновного кода, такого как keep live, динамический компонент, функциональный компонент и т. д. Это не маловажно, но нас временно не очень интересует его реализация, вмешательство этих кодов будет мешать нам понять основной части.
- Обратная совместимость
Исходный код Vue содержит много кода, совместимого с предыдущими версиями, но по мере того, как стандарт браузера поглощает суть основного фреймворка, а основной браузер приближается к стандарту браузера, ответственность Vue как фреймворка будет становиться все меньше и меньше. простой пример: использование ES6 Proxy для реализации двусторонней привязки намного проще, чем хак с defineProperty в Vue2.x. И когда веб-компонент созреет, vue даже не нужно будет делать vdom. Так что реализация vue3 точно будет проще, чем vue2, что официально подтверждено. Я считаю, что реализация vue4 определенно будет более упорядоченной, и эта тенденция будет продолжаться до тех пор, пока vue не сойдет со сцены истории.
Зачем писать vue с 0
Так как нам предстоит изучить реализацию Vue, а исходный код Vue содержит слишком много шума, разобраться сложно. По всей сети, хотя статьи и руководства по анализу исходного кода появляются бесконечным потоком, большинство идей все еще скрыты в сложных деталях кода vue. Итак, почему бы нам не избавиться от неинтересных функций, не заботиться о совместимости браузеров, просто использовать новейшие технологии и написать минималистичный Vue?
Этот пункт будетПубличные идеи Vue3.0, используя метод разработки через тестирование, шаг за шагом напишите минимальный Vue, и я постараюсь сделать так, чтобы каждый коммит был легко понятен. Рекомендуется выполнить следующие шаги, чтобы у вас было четкое представление о Vue.
Разработка через тестирование ~ почему?
В программной инженерии, насколько я понимаю, полностью нисходящий дизайн (водопадная модель) — устаревший подход. Даже очень большие компьютерные проекты, такие как проектирование на уровне операционной системы, реализуются по принципу макросверху вниз и микросверху вниз (гибкая разработка). TDD — это практика программирования, которая сочетает в себе верх и низ.Для каждого модуля сначала разработайте тестовые примеры, а затем напишите код для их реализации. Имеет следующие преимущества:
- Контролируйте качество, облегчайте регрессионное тестирование и повышайте эффективность разработки
- тест-кейс — это документация
- После чернового дизайна верхнего уровня (включая дизайн продукта и технический дизайн) вы можете начать программирование снизу вверх, избегая переходного дизайна.
шаг
Так как у tdd есть мощный тесткейс, то есть ген документа, чтобы понять, что делает каждый шаг, вам нужно только посмотреть код соответствующего тесткейса.
Каждый шаг ниже будет дан в виде diff, а при необходимости будет добавлен комментарий. Большая часть общего описания будет написана в области комментариев внизу страницы сравнения, а комментарии для определенного фрагмента кода будут перемежаться. Комментарии и вопросы приветствуются.
Этап 1: Базовый
В этой части начинаем с 0, реализуем некоторые базовые возможности, не стремимся к совершенству
После запуска npm run test нажмите кнопку DEBUG на всплывающей странице браузера, чтобы увидеть результат.
Фаза 2: Уточните mvvm
В этой части мы улучшаем mvvm, чтобы реализовать все функции vue2.x, а также реализовать важную функцию, предоставленную vue3.0.Официальное заявление: «Обнаружение добавления/удаления свойства».В vue2.x нам нужно использовать $ установить.
После запуска npm run test нажмите кнопку DEBUG на всплывающей странице браузера, чтобы увидеть результат.
Настройте свое настроение, а затем вперед
Фаза 3: Вспомогательные компоненты
Этап 4. Вычисление и просмотр
Чтобы решить проблему, связанную с тем, что изменение нескольких данных вызовет несколько рендеров.
var cb = jasmine.createSpy('cb');
var vm = new Vue({
data () {
return {
a:1,
b:2,
}
},
render (h) {
cb()
return h('p', null, this.a + this.b)
}
}).$mount()
expect(cb).toHaveBeenCalledTimes(1)
vm.a = 10
vm.b = 11
setTimeout(_ => {
expect(cb).toHaveBeenCalledTimes(2) // change 'a' and 'b' only trigger one render
done()
})
Todo list
-
Patch
-
Scoped Slot
Пополнить
virtual dom vs shadow dom
Вышеизложенное немного сбивает с толку о виртуальном доме и теневом доме, Чтобы не вводить вас в заблуждение, вот две рекомендуемые статьи.
Поэтому есть две возможности развития vue в будущем:
-
Он также может делать виртуальный дом, но виртуальный дом на самом деле будет отображаться как веб-компонент, и теперь css vue с ограниченной областью действия также будет заменен теневым домом.
-
Но есть и другая возможность. Смысл существования виртуального дома в том, что необходимо объединить операцию дома, учитывая высокие накладные расходы на работу с домом. Но действующий теневой дом будет намного быстрее, поэтому я сомневаюсь, что виртуальный дом понадобится в будущем.