❝Frontier: Желаю Nuggets успешного обновления... Мистер Шуцзян - отморозок. Разобравшись, я обнаружил, что есть еще много пунктов знаний, которые недостаточно прочны. Детская обувь имеет возможность регулярно пересматривать и пересматривать себя, и разобраться в своей системе знаний. Кроме того, индустрия развлечений постоянно меняется, поэтому мы должны не только укреплять базовые знания, но и поддерживать любопытство к изучению новых вещей. Как я построил свою собственную систему знаний? (Специальный алгоритм неисправен) ⏰ Эта глава состоит из двух глав вверх и вниз, а это совместное использование является предыдущей главой.
❞
1. Система знаний Vue
1.1 Основные принципы
1.1.1 Vnode
❝Vnode, также называемый виртуальным узлом, представляет собой абстракцию реальных элементов. Предыстория рождения связана с тем, что внешний интерфейс долгое время модифицировал вид, напрямую управляя Домом.Поскольку проект большой, обслуживание становится проблемой. С другой точки зрения, подумайте об абстрагировании реального дерева Dom в абстракцию, созданную с помощью синтаксиса JS, а затем о повторном отображении его в представлении путем изменения структуры абстрактного дерева, чтобы преобразовать его в настоящий Dom.
❞
- Как генерировать виртуальные узлы? :
createElement()
Для углубленного практического обучения вы можете прочитать, что ранее писал джемРазработка динамических форм от 0 до 1 - Как Vnode обнаруживает изменения и обновляет представление?
diff算法
🌲 Дополнительное чтение:
1.1.2 nextTick
❝Целью nextTick является отсрочка вызова callback-функции до следующего раза, когда дом обновит данные, другими словами, дом не будет обновляться сразу после изменения данных, потому что обновление дома асинхронно и не может быть получен синхронным кодом.Необходимо использовать NextTick.Получено в цикле событий (обновление Dom во Vue асинхронно)
❞
this.msg = "Hello world."
✅ this.$nextTick(() => {
this.msg2 = this.$refs.msgDiv.innerHTML
})
🚫 this.msg3 = this.$refs.msgDiv.innerHTML
🌲 Дополнительное чтение:
1.1.3 MVVM
❝Полное название MVVM: Model-View-View-Model Предыстория его рождения в том, что в традиционной архитектуре MVC отсутствует роль парсинга данных, а M, V, C и т.д. анализ данных, поэтому он специально разработан для анализа данных.Родился новый класс: ViewModel, который в основном используется для связывания модели и представления, изменения данных для обновления представлений и изменения представления для обновления данных
❞
🌲 Дополнительное чтение:
1.1.4 Принцип двусторонней привязки
❝Как упоминалось в предыдущем разделе, mvvm по сути представляет собой двустороннюю привязку данных vue.Он объединяет режим издатель-подписчик в режиме разработки посредством перехвата данных, который в основном включает следующие шаги.
❞
- 1. Превратить данные в наблюдаемые: пройти
Object.defineProperty()
Установите метод установки и метод получения свойства для отслеживания изменений данных и сбора зависимостей через метод получения, а каждый метод установки является наблюдателем.Object.defineProperty()
Практика может читать варенье из дереваКак лучше управлять интерфейсом APIУпоминается (Vue3.0 используетProxy
альтернатива) - 2. Добавить подписчика Watcher и добавить подписчика сообщений Dep (при изменении данных уведомить всех подписчиков)
- 3. Реализовать компиляцию
🌲 Дополнительное чтение:
1.1.5 API, связанный с Vue
❝Vue предоставляет некоторые часто используемые API, включая глобальные, жизненный цикл, состав, свойство экземпляра и др. Вы можете просмотреть все официальные коллекции API vue.Документация
❞
- Глобальный API: например.
Vue.use( plugin )
Используется для глобальных справочных плагинов, в частности, с использованием читаемого дерева. - API композиции: например.
project/inject
Используется, чтобы компонент-предок мог вводить зависимость всем своим потомкам. - API свойства экземпляра: например.
vm.$refs
Получить все элементы DOM и экземпляры компонентов, которые содержат зарегистрированные атрибуты ref
🌲 Дополнительное чтение:
1.2 управление состоянием vuex
❝Vuex — это инструмент управления состоянием, специально разработанный для приложений Vue.js. Он использует метод централизованного хранения для записи состояния компонентов. Один объект содержит все состояние на уровне приложения, и каждое приложение будет содержать только один экземпляр хранилища. Но модульность может использоваться для управления дифференциацией
❞
1.2.1 Модульное управление состоянием
❝Из-за единого дерева состояний vuex, поскольку приложение огромно, набор состояний, которым будет управлять приложение, будет очень большим, а объект хранилища будет раздутым и сложным для управления, поэтому вам нужно использовать модуль, чтобы различать, каждый модуль имеет свое состояние, мутацию, действие, геттер
❞
🌲 Дополнительное чтение:
1.2.2 Управление постоянством
❝Мы можем использовать постоянство состояния для достижения кешированного состояния, потому что данные vuex хранятся в памяти. Когда мы обновляем страницу, память будет удалена. Если мы хотим постоянно хранить некоторые данные, нам нужно полагаться на
❞localstorge
илиvuex-persistedstate
- Ручное использование локального хранилища HTML5 (localstorge)
- Используйте плагин vuex-persistedstate
🌲 Дополнительное чтение:
Примечание. По умолчанию каждый коммит будет записывать данные в локальное хранилище, а запись в локальное хранилище выполняется синхронно, что влияет на производительность.Вам следует стараться избегать частой записи постоянных данных в различных сценариях.
1.2.3 Пять атрибутов vuex
-
состояние: основные данные vuex, используемые для хранения переменных
-
геттер: данные, полученные из базовых данных (состояния), эквивалентные вычисляемому свойству состояния.
-
мутация: метод отправки обновленных данных, который должен быть синхронным (используйте действие, если он асинхронный).
-
Действие: действие отправляет мутацию и может содержать любую асинхронную операцию, но не может напрямую изменить состояние.
-
модули: модульность vuex, упомянутая в главе 1.2.1
1.3 vue-router
❝Большинство приложений SPA используют интерфейсную маршрутизацию для управления переходами между страницами. Благодаря переключению URL-адресов представление страницы обновляется без запроса сервера. Приложения Vue неотделимы от vue-router. Используемые знания включают следующие пункты
❞
- В чем разница между режимом хеширования и режимом истории?
- Как должен осуществляться перехват маршрутизации?
- Как маршрутизация обеспечивает модульное управление?
- Как работают компоненты кэша поддержки активности?
Чтобы узнать больше о vue-router, вы можете прочитать Tree Jam's🌲 Внешняя маршрутизация этих вещей
1.4 Разработка компонентов
❝Разработка компонентов Vue заключается в извлечении и инкапсуляции компонентов с высокой степенью повторного использования путем отделения и отделения фрагментов кода с высокой частотой повторного использования от бизнес-кода.
❞
- Каковы три важные причины для компонентов Vue?
props、事件 和 slots
- Как взаимодействуют компоненты?
- Как использовать компонентный слот Vue?
- Какую роль миксины могут играть в компонентах?
- Что такое компоненты высшего порядка Vue?
1.4.1 Коммуникация и передача значений между компонентами
❝Связь компонентов Vue может быть: отношения дочерний-родительский, отношения дочерний-предок и родственные отношения. Различные отношения также означают разные способы, в основном в том числе следующие способы:
❞
$parent与$children
$emit
-
bus $eventBus
: шина событий, черезна завершение доставки и приема provide与inject
props 与 $refs
🌲 Дополнительное чтение:
- Шесть способов общения между компонентами Vue
- Полностью раскрыта коммуникация компонентов Vue (всего 7 глав)
1.4.2 Слот слот
❝Из официального введения Vue: элемент слота используется в качестве выхода для переноса содержимого дистрибутива.Простое понимание-это «занятие ямы».Подкомпонент занимает позицию заранее, а затем в соответствии с потребностями бизнеса сценарий, подкомпонент записывает соответствующую информацию
❞
🌲 Дополнительное чтение:
1.4.3 Миксин
❝Миксины предоставляют очень гибкий способ распространения повторно используемой функциональности в компонентах Vue, и несколько компонентов могут совместно использовать данные и методы с помощью миксинов. В то же время вводятся компоненты миксина, а методы и свойства миксина также включаются в компонент и могут использоваться напрямую. Функция хука также будет вызываться в обоих (хук в миксине будет выполнен первым)
❞
Чтобы узнать больше о практике смешивания, вы можете прочитать Tree Sauce's🌲Вы освоили эти записи в исходном коде библиотеки компонентов?Использование миксина библиотеки компонентов в
1.4.4 Компоненты высшего порядка
❝Компоненты более высокого порядка, также известные как HOC, описываются как способ совместного использования общей функциональности между компонентами без дублирования кода. Функция состоит в том, чтобы улучшить функцию компонента.Простое определение: вы передаете компонент методу, а затем возвращаете новый компонент, который является HOC
❞
🌲 Дополнительное чтение:
- Vue advanced должен изучить высокоуровневые компоненты HOC
- Исследуйте компоненты высшего порядка Vue
- Практика компонентов высшего порядка Vue HOC
1.5 axios
❝Приложения неотделимы от библиотеки запросов, и наиболее обсуждаемой библиотекой запросов в стеке технологий vue является axios.Axios — HTTP-клиент на основе Promise для браузеров и nodejs.Включая следующие знания.
❞
- Как axios выполняет вторичную инкапсуляцию (перехватчик)?
- Как управлять API с помощью axios?
- Как axios отменяет запрос?
- Как обновить токен с истекшим сроком действия в axios?
Об изучении первых трех можно прочитать в варенье из дерева.🌲 Как лучше управлять интерфейсом API
🌲 Дополнительное чтение:
- Разговор об инкапсуляции аксиом во Vue
- Инкапсулируйте перехватчик axios, чтобы обновить access_token без ощущения пользователя
1.6 vue-cli
❝Vue-cli — это официальная основа Vue.Вы можете использовать Vue-cli для быстрой сборки проектов и предоставления готовой поддержки Babel, TypeScript, ESLint, модульного тестирования и т. д., упрощая развертывание, упаковку, кодирование. сканирование, модульное тестирование и другие процессы, необходимые знания включают в себя следующие пункты
❞
- Как развернуть проект на основе vue-cli?
- Как настроить vue.config.js для упаковки приложений с максимальной производительностью?
- Как решить междоменную локальную разработку?
1.6.1 проект развертывания vue-cli
❝Фронтенд-развертывание неотделимо от нескольких сред, включая локальную, фиктивную, разработку, тестирование, подготовку к производству, производство и т. д. Необходимо определить разные файлы конфигурации (управление API и т. д.) в соответствии с разными средами, а также необходимо чтобы определить скрипты компиляции (скрипты в packjson), вам также нужно обратить внимание на то, нужно ли модифицировать определение publicpath
❞
Чтобы узнать больше, вы можете прочитать «Соус из дерева».🌲 Развертывание проекта на базе Vue-cli 3x
🌲 Дополнительное чтение:
1.6.2 Настройка оптимальной упаковки
❝Интерфейсный онлайн-сервер приложений SPA — это, по сути, загрузка скомпилированных статических ресурсов, а компиляция и упаковка — это фактор, влияющий на производительность. плагин конфигурации в разделе 4. Основные решения этих проблем
❞
- Оптимизировать по количеству запросов: (удалить предварительную выборку)
- Извлечение общего кода, используйте cdn для загрузки: (config.externals)
- Настроить сжатие кода
🌲 Дополнительное чтение:
1.6.3 Локальная разработка devServer
❝Есть ли междоменные проблемы в локальной разработке? Мы можем сделать прокси-решение для ответа через конфигурацию devServer в vue.config.js! Как сделать? увидеть ниже
❞
🌲 Дополнительное чтение:
2. Система инженерных знаний
❝Что касается фронтенд-инжиниринга, то, по сути, это улучшение качества интерфейсных приложений с помощью спецификаций и инструментов.передовой инжиниринг, эта статья расширяет и дополняет исходную статью
❞
2.1 Git
❝Как мы все знаем, git — это не только инструмент управления кодом, но и управление ветвями, проверка сообщений фиксации, запрос на включение и т. д.
❞
🌲 Дополнительное чтение:
2.2 Npm
❝Только
❞npm install
npm на самом деле предоставляет множество функций, в том числе следующие часто используемые:
-
npm publish
: Управление аутсорсингом -
npm link
: используется для установления соединения между локальным проектом и локальным модулем npm, которое можно протестировать локально
🌲 Дополнительное чтение:
2.3 Инструменты сборки
❝Многие интерфейсные инструменты для создания проектов включают Rollup, Webpack и Parcel.Однако в недавней бета-версии Vue.js 3.0 Ю Да упомянул небольшой инструмент vite, над которым он работал.Может ли vite заменить wepack?
❞
-
Webpack
: Подходит для построения крупномасштабных проектов: в настоящее время веб-пакет имеет наиболее полную экологию, больше сценариев приложений, высокую популярность в сообществе, а также сильную экологию загрузчика и подключаемых модулей. -
Rollup
: подходит для упаковки библиотеки инструментов: каждый модуль можно упаковать в файл с Tree-shaking для удаления бесполезного кода и уменьшения размера кода, но он не имеет мощной экологии подключаемых модулей, как webpack, и его позиционирование больше подходит для focus Упаковка в библиотеке -
Parcel
: подходит для экспериментов: несмотря на отсутствие преимущества конфигурации, приложение может быть упаковано быстро и эффективно, но оно не имеет древовидной структуры, что приводит к большому выходному файлу.
🌲 Дополнительное чтение:
2.4 CI/CD и развертывание проекта
❝Поскольку DevOps, непрерывная интеграция и непрерывная доставка (CI/CD) стали основным направлением развертывания проекта, развертывание внешнего интерфейса SPA-проекта должно быть упаковано 📦 приложениями, мы можем комбинировать Jenkins + Docker + Nginx для завершения, если это SSR. приложение, вам нужно использовать PM2 для процесса управления
❞
Чтобы узнать больше, вы можете прочитать «Соус из дерева».🌲 Фронтальная эксплуатация и развертывание обслуживания
🌲 Дополнительное чтение:
О серии DevOps и Engineering рекомендуетсяшаньюэ шаньюэКолонка брата
Система знаний 3 узлов
❝Перед соусом из дерева я разобрал две серии интервью про узел.Заинтересованные детские ботиночки могут заценить.Что интервьюер спрашивает вас об узле (основы)иИнтервьюер спрашивает вас об узле (дополнительно). В то же время, для обычной работы узла и бизнес-сценариев система узлов Шуцзяна также относительно мала и будет скорректирована и дополнена в более поздний период.В настоящее время она может не подходить для детской обуви высокого класса.
❞
🌲 Дополнительное чтение:
- Знания Node, которые помогают понять интерфейсные инструменты
- Статья для создания вашей базы знаний NodeJS
4. Оптимизация производительности
4.1 Индекс производительности
❝Показатели производительности используются для измерения производительности приложения путем получения данных и для отражения качества производительности с помощью данных.
❞
Мы также можем использовать маяк инструмента для тестирования нашего текущего приложения.
-
FCP
: первый рисунок контента -
FMP
: Первый действительный розыгрыш -
TTI
: первое интерактивное время
Ниже приведен скриншот загрузки мобильной страницы через страницу, чтобы помочь нам понять опыт, связанный с моментом времени показателей эффективности.
🌲 Дополнительное чтение:
- Внутри маяка Тест
- [Как Ant Financial достигает максимального контроля производительности переднего плана?] (https://www.infoq.cn/article/Dxa8aM44oz*Lukk5Ufhy)
- Ориентированные на пользователя показатели производительности
4.2 webpack
4.2.1 Разделение кода
❝В бизнес-сценариях в проект может быть введено множество сторонних библиотек.Эти библиотеки могут не иметь никакого отношения к бизнесу и содержимое может оставаться неизменным.Если они все упакованы вместе, пользователь должен повторно выполнить новые эффекты, если они хотят просматривать последние эффекты через браузер.Если вы можете ввести неизмененный код в отдельный файл, и имя файла каждый раз одно и то же. Затем браузер может читать из кеша вместо повторной инициации запроса или дедупликации публичной части, тогда разделение кода играет важную роль в это время.
❞
использование веб-пакетаSplitChunksPlugin
Для дедупликации и разделения чанков в vue-cli 3 вам нужно всего лишь настроить splitChunks в chainWebpack в vue.config.js следующим образом:
🌲 Дополнительное чтение:
❝Процитирую предложение: Суть разделения кода заключается в том, чтобы «выйти в онлайн напрямую из исходного кода»."и"«Упаковать как единый скрипт main.bundle.js» ** Между этими двумя крайними сценариями ищите промежуточное состояние, которое больше соответствует фактическому сценарию, и поменяйте приемлемое увеличение нагрузки на сервер на лучшее взаимодействие с пользователем.
❞
4.2.2 Сжатие UglifyJs
❝Используйте UglifyJSPlugin для сжатия js-файлов, чтобы уменьшить размер js-файлов и ускорить загрузку ресурсов, но обычно он включается в производственном процессе, поскольку замедляет исходную скорость компиляции веб-пакета.
❞
4.2.3 GIZP-сжатие
❝Мы можем использовать плагин Compression-webpack-plugin для сжатия, который эквивалентен эффекту gzip.
❞
Мы настраиваем Webpack в vue.config.js под vue-cli 3 следующим образом:
4.2.4 Tree-shaking
❝Tree-shaking, также известная как оптимизация tree-shaking, является оригинальной Tree-shaking, предназначенной для свертывания, представленной после веб-пакета 2. Используется для удаления бесполезного кода. А tree-shaking реализован на основе статических характеристик модулей ES6, а это значит, что tree-shaking можно использовать только в том случае, если вы используете модули ES6.
❞
🌲 Дополнительное чтение:
4.2.5 webpack-bundle-analyzer
❝В среде разработки, производства или разработки мы хотим сравнить, проанализировать отчет для сравнения оптимизации производительности и определить, была ли улучшена производительность проекта vue.Настроив плагин webpack-bundle-analyzer, он может отображать все пакеты в графическом виде Размер соответствующих компонентов компонентов модуля, способ выполнения:
❞npm run build --report
🌲 Дополнительное чтение:
4.3 Nginx
❝Оптимизация производительности Nginx учитывает следующие моменты:
❞
- Как настроить gzip в nginx?
- Как настроить, установив истекающий кеш?
- Как оптимизировать производительность при балансировке нагрузки?
О систематическом обучении Nginx можно прочитать tree jamЭти вещи о Nginx
4.3.1 Gizp
❝Включите Nginx gzip, после сжатия размер статических ресурсов будет значительно уменьшен, что может сэкономить большую полосу пропускания, повысить эффективность передачи и улучшить отклик и опыт.
❞
4.3.2 Настройки кэша статических ресурсов
❝Некоторые статические ресурсы имеют низкую частоту обновления или не обновляются.Мы можем настроить время кеша, установив expires для оптимизации производительности.Как это настроить?
❞
Допустим я хочу кешировать образы веб-приложения на неделю, тогда в nginx можно настроить следующее.После настройки ресурсы в течение недели будут обращаться только к ресурсам браузера, вместо запроса Nginx
4.3.3 Балансировка нагрузки
❝Как мы все знаем, балансировщик нагрузки может повысить стабильность и скорость отклика веб-сайта за счет выделения других серверов пользователям, и существует четыре распространенных способа балансировки нагрузки, которые следует упомянуть здесь:
❞响应时间来分配
режим, который позволяет нескольким серверам соревноваться, находить самый быстрый и возвращать контент пользователю, конфигурация следующая
🌲 Дополнительное чтение:
4.4 Другое
4.4.1 Предварительная выборка с предварительным запросом
❝prefetch — это значение атрибута rel в элементе ссылки, определяя этот атрибут, браузер загружает ресурсы, которые могут быть использованы следующей страницей. Чтобы ускорить скорость загрузки следующей страницы, общий сценарий приложения находится в SSR. Загрузка ресурсов домашней страницы использует предварительную загрузку, а ресурсы других маршрутов, кроме домашней страницы, используют предварительную выборку. В чем разница между двумя ? смотреть вниз
❞
-
preload
Это для того, чтобы сообщить браузеру, что странице нужны ресурсы, но браузер должен загрузить эти ресурсы. -
prefetch
заключается в том, чтобы уведомить браузер о том, что странице могут потребоваться ресурсы, но браузер не обязательно будет загружать эти ресурсы
🌲 Дополнительное чтение:
Выяснилось, что количество запросов увеличилось из-за того, что наша страница предварительно отрисовывала другие компоненты, а я не хотел выполнять предварительную загрузку, что мне делать?
❝Вы можете удалить предварительную загрузку и предварительную выборку в vue.config.js.
❞
Тотdns-prefetch
Что это? Это то же самое, что и предварительная выборка?
❝Предположим, что теперь, когда мы посещаем Baidu baidu.com, на этот раз требуется, чтобы DNS сначала преобразовал доменное имя в соответствующий IP-адрес, что является очень трудоемким процессом. Вы можете использовать предварительную выборку DNS, чтобы проанализировать доменное имя ресурсов, необходимых для этой страницы, заранее преобразовать эти доменные имена в IP-адреса, когда браузер не используется, уменьшить количество DNS-запросов и выполнить предварительную выборку DNS.
❞
<link rel='dns-prefetch' href='http://baidu.com'>
4.4.2 отсрочка и асинхронность
❝defer и async — это два атрибута в теге скрипта конфигурации. Сценарий использования — управлять загрузкой и выполнением скриптов, не блокируя синтаксический анализ дерева документов DOM на странице. В чем разница между ними?
❞
-
defer
: Выполнять после рендеринга.После загрузки необходимо дождаться загрузки страницы перед выполнением кода -
async
: Выполнить после загрузки, скрипт будет автоматически выполнен после загрузки
🌲 Дополнительное чтение:
4.4.3 SSR и пререндеринг
❝Рендеринг на стороне сервера SSR и предварительный рендеринг Prerender может решить проблему, заключающуюся в том, что время белого экрана слишком велико, и может повысить скорость отображения страницы в браузере, но предварительный рендеринг не рекомендуется.Если у вас слишком много маршрутов в вашем проекте, например, у вас 1000 статей, статью нужно пререндерить и выполнять один раз для каждого обновления, что нереально
❞
🌲 Дополнительное чтение:
4.4.4 Защита от сотрясений и дросселирование
❝И регулировка функции, и функция защиты от встряхивания используются для ограничения времени выполнения сработавшей функции, чтобы решить проблему зависания и задержки, когда скорость отклика браузера не соответствует высокой частоте срабатывания функции. Это оптимизация производительности интерфейса.
❞
-
防抖 debounce
: как следует из названия, это предотвращает дрожание.Применимые сценарии: запускать одну и ту же практику несколько раз за короткий период времени и ограничивать выполнение только одним разом. -
节流 throttle
: Подобно управлению клапаном, клапан будет регулярно открываться.После того, как функция будет выполнена один раз, он не закроется в течение определенного периода времени и будет повторно активирован по истечении времени.
🌲 Дополнительное чтение:
4.5 Загрузка по требованию
❝Перезагружайте в соответствии с потребностями просмотра.Например, на странице много картинок.Если после загрузки все картинки загружаются на страницу, это повлияет на производительность.Не было бы восхитительно прокручивать картинки до визуальной области, а затем загрузить их? Другой пример — длинный список с очень длинными данными, неограниченная загрузка DOM-данных, каждый раз перерисовка, что сильно влияет на производительность, создание контейнера на странице в виде визуальной области и отображение его в этой визуальной области Часть длинный список и то только в этой области разве это не ароматно?
❞
4.5.1 vue-lazyload
❝Про vue-lazyload можно прочитать в tree jamРазговор о загрузке по запросу на интерфейсе — ленивая загрузка изображений
❞
4.5.2 Динамическая загрузка компонентов
❝Про компонентную динамику можно прочитать в джеме дереваРазговор о загрузке интерфейса по требованию — загрузка компонентов по требованию.
❞
4.5.3 Виртуальный список
❝Виртуальный список на самом деле является реализацией отображения по запросу, то есть визуализируется только видимая область, а данные в невидимой области не визуализируются или визуализируются частично, чтобы достичь чрезвычайно высокой производительности визуализации.
❞
🌲 Дополнительное чтение:
Пожалуйста, выпейте 🍵 Не забудьте подключиться три раза~
1. После прочтения не забудьте поставить лайк 🌲 соусу, там есть 👍 и мотивация
2. Обратите внимание на интересные вещи в интерфейсе официального аккаунта и пообщайтесь с вами об интересных вещах в интерфейсе.
3. Статья размещена на GithubfrontendThingsСпасибо, Стар✨