2019 Каталог решений по оптимизации производительности интерфейса
🔥Предисловие
Оптимизация производительности фронтенда — распространенная тема, и с этой проблемой сталкиваются программисты, нанятые на работу два-три года назад. Хотя каждый проект отличается, идеи похожи. Эта статья предназначена для того, чтобы разобраться с оптимизацией производительности внешнего интерфейса предыдущего проекта, а также надеемся быть полезной для друзей в сообществе.
Статус проекта
Текущий проект (платформа визуализации, если вы знаете Feibing и Drafting, это, вероятно, на один уровень сложнее, чем эти два) очень большой и сложный.Фронтенд разделен на более чем 10 проектов, которые далее делятся на состояние разработки иРабочее состояние зависит друг от друга через программные ссылки, в общей сложности около 2 миллионов строк кода.Он разделен на две фазы.Пользователи начинают использовать его после передачи первой фазы.За этот период было выявлено много проблем , включая проблемы с производительностью.
вопрос:
открыть консоль,network
серединаOnline
переключиться наFast3G
, нажмите на консольPerformance
, нажмите кнопку обновления, чтобы наблюдать время белого экрана, обычная страница должна открывать время белого экрана5s, сложные страницы требуют14s
- Время белого экрана:
地址栏输入网址后回车 - 浏览器出现第一个元素
- Экранное время:
地址栏输入网址后回车 - 浏览器第一屏渲染完成
анализировать
- Скомпилированный пакет фреймворка слишком велик
- Фреймворк изначально загружает слишком много данных, а логика громоздкая.
- Изначально загружены все ресурсы
- Данные, возвращаемые сервером, слишком велики и избыточны.
- Интерфейс не использует кеш службы
строить планы
1. Инициализируйте страницу и добавьте карту размещения
На самом деле это не оптимизирует время загрузки, но улучшает взаимодействие с пользователем.
2. Сократите HTTP-запросы и избыточные данные
Интерфейс запрашивает разные ресурсы через 4 интерфейса при инициализации окна редактирования. При согласовании с серверной частью четыре интерфейса заменяются на один интерфейс, и возвращаемые данные удаляются одновременно, и возвращаются только данные, используемые интерфейсом.
3. Компоненты, маршрутизация отложенной загрузки
Разделить страницы. разделить давление нагрузки
4. Настройте оптимизацию nginx
-
Сжатый файл
включиgzip
допустимыйvue-cli2
средняя ручка лесовconfig/index.js
серединаproductionGzip
Установить какtruelocation { gzip on; //开启压缩 gzip_typestext/htmltext/plaintext/css; //指定需要压缩的文件类型,默认为text/html gzip_min_length 512; //需要进行压缩的最小文件大小(单位字节) }
-
Распределение буфера оптимизации
Nginx использует запросы к хранилищу кеша и возвращает данные, оптимизирует назначение кеша для экономии места в памяти и уменьшения использования ЦП. Обычно используемые JS, CSS и изображение могут быть установлены в локальном кеше браузера, чтобы пользователь локально кэшировал указанный выше контент, повышая скорость загрузки страницы при последующем открытии, экономя большую часть полосы пропускания. -
Настроить белый список
5. Оптимизировать механизм упаковки wepack
Используйте плагины
件webpack-bundle-analyzer
Посмотреть все пакеты и размеры проекта
- Оптимизация кода упаковки, сжатие кода
purifyCS
Оптимизация упаковки, дедупликация и недопустимый код
UglifyJsPlugin
Сожмите файл js, чтобы уменьшить размер файла js и увеличить скорость загрузки.УведомлениеЭтот плагин будет замедлять скорость компиляции webpack, рекомендуется отключить его на этапе разработки и снова включить во время развертывания.
Tree Shaking
Удалить неиспользуемый код. Такой функционал отлично подходит для создания больших приложений - Зависимости вводятся по требованию Удалите избыточные зависимости
Например: интерфейс iview импортируется по запросу. - код субподряда
- Удалите ненужные файлы
6. Используйте CDN
Основная функция CDN заключается в кэшировании контента в разных местах и использовании технологии балансировки нагрузки для направления пользовательских запросов на наиболее подходящий сервер кэширования для получения контента.
7. Предварительный рендеринг
По сравнению с SSR предварительный рендеринг относительно прост, и предварительный рендеринг может значительно повысить скорость доступа к веб-странице. Нет необходимости в динамической компиляции в реальном времени на сервере, используется предварительный рендеринг, а статические HTML-файлы просто генерируются для определенных маршрутов во время сборки.
использоватьprerender-spa-plugin
плагин
8.ssr
客户端渲染:
Также известный как внешний рендеринг, он возник с появлением js. Ajax делает внешний рендеринг более зрелым, передний конец фокусируется на пользовательском интерфейсе, а внутренний — на логике. end и back-end, взаимодействуя через согласованный API, причем back-end предоставляет данные, front-end генерирует DOM по данным и вставляет их в HTML-страницу. Большая часть первоначального рендеринга заключается в замене метки данных {{}} в исходном html, щелкните правой кнопкой мыши, чтобы просмотреть исходный код, код страницы не виден в исходном коде, а потребление производительности находится на стороне клиента.
преимущество: снижение нагрузки на сервер, возможность частичного обновления, отсутствие необходимости каждый раз запрашивать полную страницу, более удобный интерфейс.недостаток: фронтенд занимает много времени, рендеринг первого экрана медленный, и перед рендерингом нужно скачать кучу js и css файлов, что не способствует SEO, а краулер не может увидеть весь код
服务端渲染:
Также известный как внутренняя визуализация, перед возвратом HTML сервер заполняет специфичные для региона символы HTML данными, а затем отправляет их клиенту.Клиент отвечает только за синтаксический анализ HTML. Если щелкнуть правой кнопкой мыши и выбрать «Просмотр исходного кода», код страницы можно увидеть в исходном коде. Потребление производительности находится на стороне сервера.Когда пользователь достигает определенного уровня, бэкэнд рассмотрит возможность кэширования некоторых данных, чтобы избежать повторного рендеринга чрезмерного потребления ресурсов.
преимущество: Менее трудоемкий интерфейс, более быстрый первый рендеринг, более быстрое время прибытия контента, хорошо для SEO
недостаток: объем данных, передаваемых по сети, велик, он занимает часть вычислительных ресурсов сервера, пользовательский опыт оставляет желать лучшего, и его нелегко поддерживать.
9. Изображение в base64
в упаковкеurl-loader
Преобразуйте изображение, которое не установлено или меньше, чем установка предельного байта, и используется src img в формате base64; а для изображения, превышающего предельное байт, используйтеfile-loader
разобрать.
10. Фоновое распределенное развертывание, балансировка нагрузки
Эпилог
Выше приведены наиболее распространенные решения по оптимизации интерфейса.Больше подробностей не написано.Вы можете обратиться к другим статьям.Каждое расширение точки можно использовать как отдельную статью для более глубокого понимания.Эта статья является только справочным каталогом.