автор:JowayYoung
склад:Github,CodePen
Блог:Официальный сайт,Наггетс,думаю нет,Знай почти
Нет публики:Интерфейс IQ
Специальное заявление: Нелегко быть оригинальным, и перепечатка или плагиат не допускаются без разрешения.Если вам нужно перепечатать, вы можете связаться с автором для получения разрешения.
предисловие
Обнаружено, что сводка мелких галантереи может улучшить навыки разработки и мышления каждого, а также обеспечить более надежное качество и поддержку для массового производства кода. На этот раз давайте поговорим о темах, которые могут вас больше всего волновать:оптимизация производительности.
Когда дело доходит до оптимизации производительности страницы, каждый может подумать об этом.雅虎军规
,2-5-8原则
,3秒钟首屏指标
Эти правила не являются обязательными в процессе разработки, но иногда для достижения идеальной производительности и удобства работы исходный код необходимо модифицировать и оптимизировать.
Ниже, исходя из своего более чем трехлетнего опыта разработки и большого количества проектных практик, я разберу некоторые часто используемые точки оптимизации производительности, а заодно перечислю их.雅虎军规
,2-5-8原则
,3秒钟首屏指标
Основные пункты этих трех общих правил.
Для облегчения памяти и чтения в статье используются некоторые сокращенные существительные, поясняемые следующим образом.
-
Терминал D: страница рабочего стола
Desktop End Page
-
терминал М: Мобильная страница
Mobile End Page
Обзорное руководство
- Метод оптимизации на стороне D также применим к стороне M.
- На стороне M рендеринг завершается за 3 секунды.
首屏指标
- На основании второго пункта первый экран загружается в течение 3 секунд или используется
Loading
заполнитель - На основе среднего показателя сети 3G Unicom
338kb/s(2.71mb/s)
, ресурсы верхней части экрана не должны превышать1014kb
- Из-за причин конфигурации на стороне M, в дополнение к загрузке, скорость рендеринга также находится в центре внимания оптимизации.
- Основываясь на пятом пункте, необходимо разумно обрабатывать код, чтобы уменьшить потери при рендеринге.
- Основываясь на втором и пятом пунктах, весь код, влияющий на загрузку и рендеринг выше сгиба, должен быть размещен после логики обработки.
- После завершения нагрузки пользователь должен обратить внимание на производительность при использовании.
Оптимизация нагрузки
-
уменьшить HTTP-запросы: минимизировать количество запросов к странице (Количество одновременных запросов на первую загрузку не может превышать 4), браузер мобильного устройства отвечает на запрос на 4 запроса одновременно (
Android
Поддержка 4,iOS5+
поддержка 6)- Слияние CSS и JS
- Использование спрайтов CSS
-
ресурсы кэша: Использование кеша может уменьшить количество запросов к серверу и сэкономить время загрузки.Все статические ресурсы нужно кешировать на стороне сервера, и стараться использовать длинный кеш(Обновить кеш с отметкой времени)
- Кэшировать все кешируемые ресурсы
- использовать длинный кеш
- Использование стилей контура и скриптов
-
сжатый код: уменьшить размер ресурса, чтобы ускорить отображение страницы, сжать код и установить его на стороне сервера.
GZip
- Сжатый код (дополнительные отступы, пробелы и новые строки)
- Gzip включен
-
неблокирующий: встроенные в заголовок стили и скрипты блокируют отрисовку страницы. Стили размещаются в заголовке и используются
link
вводится метод, скрипт помещается в конец и загружается асинхронно - Загрузка выше сгиба: быстрое отображение первого экрана может значительно улучшить восприятие пользователем скорости страницы и должно быть максимально оптимизировано для быстрого отображения первого экрана.
-
нагрузка по требованию: Ресурсы, не влияющие на первый экран, и ресурсы, не используемые текущим экраном, загружаются только тогда, когда они нужны пользователю, что может значительно повысить скорость отображения и снизить общий трафик (Погрузка по требованию приведет к тому, что многие перерезывают, влияющие на производительность рендеринга)
- ленивая загрузка
- загрузка прокрутки
- Загрузка медиазапроса
-
Предварительная загрузка: Доступно для больших страниц ресурсов.
Loading
, страница отображается после загрузки ресурса, но время загрузки слишком велико, что приведет к потере пользователя- Воспринимаемая загрузка: при входе на страницу
Loading
- Незаметная загрузка: загружать следующую страницу раньше
- Воспринимаемая загрузка: при входе на страницу
-
сжатое изображение: выберите наиболее подходящий формат и размер при использовании изображений, затем используйте инструменты для сжатия и используйте
srcset
отображать по запросу (Чрезмерное сжатие размера изображения влияет на отображение изображения)- использоватьTinyJpgа такжеTinyPngсжатое изображение
- Используйте CSS3, SVG, IconFont вместо изображений
- Загружайте изображения по запросу, используя img srcset
- Выберите подходящее изображение:
webp
лучше чемjpg
,png8
лучше чемgif
- Выберите правильный размер: не больше, чем первая загрузка
1014kb
, не шире640px
- Когда PS обрезает изображение, качество сохранения изображения стороны D равно 80, а качество сохранения изображения стороны M равно 60.
-
Уменьшить количество файлов cookie:
Cookie
Повлияет на скорость загрузки, не используется статическое доменное имя ресурсаCookie
- Избегайте перенаправлений: перенаправление повлияет на скорость загрузки, правильно установите его на сервере, чтобы избежать перенаправления
- Асинхронно загружать сторонние ресурсы: неконтролируемые сторонние ресурсы будут влиять на загрузку и отображение страницы, а сторонние ресурсы должны загружаться асинхронно.
加载过程是最为耗时的过程,可能会占到总耗时的`80%时间(**优化重点**)
выполнить оптимизацию
- CSS пишется в голове, JS пишется в хвосте и асинхронно
-
Избегайте пустого src для img, iframe и т. д.:нулевой
src
Перезагрузит текущую страницу, что повлияет на скорость и эффективность - Старайтесь избегать изменения размера изображений: многократный сброс размера изображения приведет к многократной перерисовке изображения, что повлияет на производительность.
-
Изображения стараются избегать использования DataURL:
DataURL
Изображение не использует алгоритм сжатия изображения, файл станет больше, и его нужно декодировать, а затем визуализировать, что медленно загружается и занимает много времени.
执行处理不当会阻塞页面加载和渲染
Оптимизация рендеринга
-
установить область просмотра: HTML
viewport
Ускоряет рендеринг страницы<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
-
уменьшить DOM-узлы: Слишком много узлов DOM влияет на отрисовку страницы, попробуйте уменьшить количество узлов DOM.
-
Оптимизировать анимацию
- По возможности используйте анимацию CSS3.
- Разумное использование анимации requestAnimationFrame вместо setTimeout
- Правильное использование анимации Canvas: используйте в пределах 5 элементов
CSS动画
, используйте более 5 элементовCanvas动画
,iOS8+
быть пригодным для использованияWebGL动画
-
Оптимизация для высокочастотных событий:
scroll
,touchmove
и т. д. события могут вызвать несколько рендеров- регулирование функции
- Функция защиты от тряски
- Используйте requestAnimationFrame для прослушивания изменений кадров: выполняйте рендеринг в нужное время.
- Увеличьте временной интервал в ответ на изменения: уменьшите количество перерисовок
-
Ускорение графического процессора: Активируется определенными тегами HTML5 и свойствами CSS3.
GPU渲染
, пожалуйста, используйте (Чрезмерное использование может привести к повышенному энергопотреблению мобильных телефонов)- HTML-теги:
video
,canvas
,webgl
- Свойства CSS:
opacity
,transform
,transition
- HTML-теги:
оптимизация стиля
- Избегайте написания стилей в HTML
- Избегайте выражений CSS: выполнение выражений CSS должно выходить за рамки рендеринга дерева CSS.
- Удалить пустые правила CSS: Пустые правила CSS увеличивают размер файла CSS и влияют на выполнение дерева CSS.
-
Используйте ДИСПЛЕЙ правильно:
display
повлияет на рендеринг страницы-
display:inline
не следует использовать повторно послеfloat
,margin
,padding
,width
а такжеheight
-
display:inline-block
не следует использовать повторно послеfloat
-
display:block
не следует использовать повторно послеvertical-align
-
display:table-*
не следует использовать повторно послеfloat
а такжеmargin
-
-
не злоупотребляйте поплавком:
float
Объем вычислений во время рендеринга относительно велик, поэтому постарайтесь сократить использование - Не злоупотребляйте веб-шрифтами: веб-шрифты необходимо загружать, анализировать и перерисовывать на текущей странице, сводя к минимуму использование
-
Не объявляйте слишком много размеров шрифта:Слишком
font-size
Влияет на эффективность дерева CSS -
Значение 0 не требует никаких единиц: для совместимости и производительности браузера значение равно
0
Не брать юнитов -
Стандартизируйте различные префиксы браузера
- Свойства без префикса должны быть последними
- Свойства анимации CSS используют только -webkit- и без префикса
- Другие префиксы -webkit-, -moz-, -ms- и без префикса:
Opera
использовать вместо этогоblink
ядро,-o-
устранен
- Не делайте селекторы похожими на регулярные выражения: расширенные селекторы требуют много времени для выполнения и их нелегко читать, избегайте использования
Оптимизация скрипта
-
Уменьшите количество перерисовок и перекомпоновок
- Избегайте ненужных манипуляций с DOM
- Избегайте использования document.write
- Уменьшить отрисовку изображения
- Попробуйте изменить класс вместо стиля, используйте классный список вместо класса
- Кэширование выборок и вычислений DOM: вычисляется и кэшируется для каждого выбора DOM.
-
кэшировать значение .length:каждый раз
.length
Расчет сохраняет значение в переменной - Используйте делегаты событий, когда это возможно: избегайте событий пакетной привязки
-
попробуйте использовать селекторы id:
id
Селекторы быстрее всего выбирают элементы -
сенсорная оптимизация событий:использовать
tap
(touchstart
а такжеtouchend
)заменятьclick
(Уведомлениеtouch
Слишком быстрый отклик, легко вызвать неправильную работу)
Общие правила
Yahoo военный
Команда Yahoo на основе многолетней практики пришла к следующему выводу.7类35条
Правила оптимизации внешнего интерфейса, для получения подробной информации о правилах, пожалуйста, обратитесь к этому брату"35 Правила перевода в интернет-оптимизации Yahoo Front-End".
- содержание
-
Make Fewer HTTP Requests:уменьшать
HTTP
количество запросов -
Reduce DNS Lookups:уменьшать
DNS
Запрос - Avoid Redirects: избегать перенаправления
-
Make Ajax Cacheable: кеш
AJAX请求
- Postload Components: ленивая загрузка ресурсов
- Preload Components: Предварительно загрузить ресурсы
-
Reduce The Number Of DOM Elements:уменьшать
DOM
количество элементов - Split Components Across Domains: Разделите ресурсы между доменами.
-
Minimize The Number Of Iframes:уменьшать
iframe
количество -
No 404s:ликвидировать
404
ошибка
-
Make Fewer HTTP Requests:уменьшать
- стиль
- Put Stylesheets At The Top: высший стиль
-
Avoid CSS Expressions:избегать
CSS
выражение -
Choose <link> Over @import:выберите
<link>
заменять@import
- Avoid Filters: избегать фильтра
- сценарий
- Put Scripts At The Bottom: Нижний сценарий
-
Make JavaScript And CSS External: использовать внешний
JS
а такжеCSS
-
Minify JavaScript And CSS: сжатие
JS
а такжеCSS
- Remove Duplicate Scripts: удалить дубликаты скриптов
-
Minimize DOM Access:уменьшать
DOM
действовать - Develop Smart Event Handlers: Разработка эффективной обработки событий
- изображение
- Optimize Images: Оптимизация изображений
-
Optimize CSS Sprites:оптимизация
CSS精灵图
-
Don't Scale Images In HTML: Не является
HTML
изображение со средним увеличением -
Make Favicon.ico Small And Cacheable: использовать кеширование небольшого размера
favicon
- тайник
-
Reduce Cookie Size:уменьшать
Cookie
размер -
Use Cookie-Free Domains For Components: использовать Нет
Cookie
Ресурсы домена
-
Reduce Cookie Size:уменьшать
- Движущийся конец
-
Keep Components Under 25kb: сохранить ресурс меньше, чем
25kb
- Pack Components Into A Multipart Document: упаковать ресурсы в составные документы
-
Keep Components Under 25kb: сохранить ресурс меньше, чем
- сервер
-
Use A Content Delivery Network:использовать
CDN
-
Add An Expires Or A Cache-Control Header: Заголовок ответа добавлен
Expires
илиCache-Control
-
Gzip Components:
Gzip
ресурс -
Configure ETags: настроить
ETags
- Flush The Buffer Early: буферизация вывода как можно раньше
-
Use Get For AJAX Requests:
AJAX请求
использовать, когдаget
- Avoid Empty Image Src: Избегайте пустых ссылок на изображения.
-
Use A Content Delivery Network:использовать
Принцип 2-5-8
Во фронтенд-разработке это правило используется как руководство по оптимизации производительности страниц браузера.
- пользователь в
2秒内
Получите ответ, вы почувствуете, что скорость отклика страницы очень высокая. - пользователь в
2~5秒间
Когда вы получите ответ, вы почувствуете, что скорость отклика страницы в порядке. Средняя. - пользователь в
5~8秒间
Если вы получите ответ, вы почувствуете, что скорость отклика страницы очень медленная, но вы все еще можете принять медленные - пользователь в
8秒后
Все равно не могу получить ответ, будет ощущение, что скорость отклика страницы фигня(Есть четыре возможности:)- Это потому, что скорость сети плохая, сделайте второй запрос =>
刷新页面
- Что за мусорная страница, почему ты ее не открыл =>
离开页面,有可能转投竞争对手的网站
- Фигня программист, какую страницу ты делаешь =>
咒骂开发此页面的程序猿
- отключен =>
网线断了?Wi-Fi断了?信号不好?话费用完了?
- Это потому, что скорость сети плохая, сделайте второй запрос =>
知道这个规则的数字顺序怎样来的吗,看下键盘右方的数字键盘由下往上排序:2-5-8
3 секунды над индикатором сгиба
Это правило распространяется на M-сторону, как следует из названия, она завершает рендеринг и отображает контент в течение 3 секунд после открытия страницы.
Эпилог
❤️Подписаться + Нравится + Избранное + Комментарий + Переслать ❤️, оригинальность это не просто, поощряйте автора к созданию более качественных статей
Обратите внимание на публичный аккаунтIQ前端
, внешний общедоступный аккаунт, ориентированный на навыки разработки CSS / JS, вас ждут другие галантереи переднего плана
- Ответить после подписки
资料
Получите бесплатные учебные материалы - Ответить после подписки
进群
Втяните вас в группу технического обмена - Добро пожаловать, чтобы следовать
IQ前端
,БолееНавыки разработки на CSS/JSНажимайте только на публичный аккаунт