Быть более конкретным, этот пост действительно оказывает производительность. Другими словами, это все о том, как мы можем предоставить более гладкие пользователи, когда пользователи взаимодействуют с нашей веб-страницей.
Давайте посмотрим на веб-сайт, который делает этот супер хорошо: Google I/O 2015 Отказ Играйте с кнопкой навигации в правом верхнем углу экрана (вверху слева, если вы на вашем телефоне), и вы увидите, что анимация запускается довольно гладкой. Не стесняйтесь нажимать на другое содержимое на сайте – все они высокопроизводительны.
Есть некоторые трюки, когда речь идет о предоставлении плавного пользовательского опыта в Интернете. Однако, прежде чем мы прыгнем и начнем изучать эти трюки, мы сначала должны понимать, как браузеры рендерируют.
Пиксельный трубопровод
Держите это изображение в уме во все время, потому что это супер важно!
Вы пройдете пять последовательных фаз, когда вы идете от Пиксель на экран :
JavaScript: На этом этапе вы будете использовать JS, чтобы сделать визуальные изменения. Это может включать увеличение или уменьшение количества элементов или использования jQuery’s
анимация
Заказать и сортировать свои данные и элементы. Все вышеперечисленное повлияет на окончательный визуальный продукт.Стиль: Ваш браузер решит, какие правила CSS будут представлены, к которым элементы на основе селектора CSS на этом этапе. Мы могли бы написать каскадное правило CSS ниже:
Какие элементы будут зависеть от каких правил и стилей, все это решается на этом этапе.
Макет: Как только браузер знает, какой элемент соответствует какому стилю, мы можем сказать, где и сколько пространства (например, ширина, высота) каждый элемент займет на экран. Имейте в виду, каждый элемент может потенциально повлиять на другие элементы. Например, стиль
может повлиять на ширину всех его дочерних элементов.
Краска: Все пиксели будут отображаться на несколько слоев на этом этапе. Рендеринг будет включать тексты, цвета, изображения, тени и многое другое. Короче говоря, все визуальные части элементов будут включены.
Композитный: Поскольку веб-браузер сократит пиксели на несколько слоев, вы должны быть осторожны с этими слоями. Вы должны сделать их на экране в правильном порядке, особенно если вы имеете дело с перекрытиями между различными слоями. Браузер должен быть способен точно отображать детали, которые будут покрыты, а детали, которые будут видны пользователям.
Искусство настройки производительности: избежать ненужных изменений
Вот как вы должны приблизиться к настройке производительности: если мне не нужно коснуться его, я не прикасаюсь к нему. Вот и все (пожалуйста, не переводите это отношение к вашей работе или другим людям XD).
1. Выполните все шаги в пиксельном трубопроводе
Предположим, вы изменили свойства «Макет»: ширина элемента, высота, влево, верх. Неважно, если вы используете JS или CSS, чтобы внести изменения, даже если вы изменили только один элемент, который может влиять на другие элементы, браузер должен будет пересчитать положение и размер каждого элемента. Это то, что мы называем Reploud Отказ Браузер придется рендер всех элементов, которые воздействуют и воссоздают экран, что означает, что он должен пройти через пять фаз, которые мы только что обсуждали.
2. JS/CSS> Стиль> Краска> Композитный (без макета)
Предположим, вы изменили только так называемые «только« краска »только« только »: фоновое изображение элемента, цвет текста или тень. Регулировка этих свойств не будет влиять на компоновку экрана, поэтому браузер может пропустить шаг «Макет» в пиксельном трубопроводе. Мы называем это Перекрасить И мы можем выполнить один меньший шаг! Я!
3. JS/CSS> Стиль> Композитный (без макета и краски)
Еще лучше, некоторые изменения не потребуют браузеров, чтобы отравить или перекрасить – они только триггерные композиты. Это лучшее для производительности, и это то, что мы должны стремиться. Он может быть использован для разрешения проблем в прокрутке страницы или Janks в анимации.
Теперь есть только два свойства, которые могут достичь этой цели: трансформировать
и непрозрачность
Отказ Если вы можете использовать преобразование и непрозрачность вместо других свойств, вы должны использовать их. Причины просты: эти два свойства будут только триггерные композиты.
Более того, мы можем продвигать элементы анимации в вашем плане, добавив слой композитора. Вот как:
.moving-element { will-change: transform; }
Для браузеров, которые не поддерживают будет изменить
, использовать:
.moving-element { transform: translateZ(0); }
Добавляя слой композитора, вы можете заставить вашу анимацию работать гладким, потому что браузеры поддерживают одновременную рендурирование на нескольких слоях. С этим сказанным, добавление слоев означает, что вы будете потребляем больше памяти, поэтому вы должны быть осторожны с использованием функции продвижения.
Почему это важно
Поскольку большинство машин будут освещать свои экраны 60 раз в секунду, каждый кадр взял бы 16 мс (1 секунда/.66 мс). При выполнении пиксельного трубопровода требуется более 16 мс, экран будет унравиться. Поскольку мы также должны объяснить время, которое требуется для браузера, чтобы сделать его работу, сохранение нашего контролируемого процесса в … 10 мс это самая идеальная ситуация.
Расширенное чтение
В приведенном выше пиксельном трубопроводе есть вещи, которые могут быть оптимизированы в каждом этапе. Я опубликую другие посты на этих темах, но на данный момент здесь есть некоторые полезные статьи:
Рекомендации
- Оказание производительности
- Переверните свою анимацию
- Измерьте производительность с железнодорожной моделью
Все фотографии в этой статье зачислены на Веб Основы
Этот пост был переведен на английский язык по команде контента кодаментатора. Здесь Оригинальный китайский пост Тома, инженером программного обеспечения в Yahoo! Представлять