Подтвердить что ты не робот

Почему браузеры не достаточно умны для аппаратного ускорения без трюков?

В настоящее время существует множество веб-страниц, рекомендующих добавить эти правила к вашему контенту, чтобы ускорить его аппаратное ускорение:

transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);

Это всегда казалось мне смешным. Почему браузеру нужна моя помощь в решении аппаратного ускорения? Это будет быстрее, не так ли? Так почему бы просто не сделать это? Зачем ждать меня, чтобы "обмануть" браузер?


Другой способ задать этот вопрос может быть, почему не каждая таблица стилей / reset содержит строки

* {
    transform: translate3d(0,0,0);
    -webkit-transform: translate3d(0,0,0);
}
4b9b3361

Ответ 1

Это не так много, что браузеры не могут быть или не достаточно умны, чтобы использовать аппаратное ускорение. Вместо этого то, что вы имеете в виду, действительно применимо только к WebKit, и особенно к мобильным версиям WebKit. Firefox и IE обе ​​аппаратные ускоряют все, и они автоматически разбивают страницу на "слои", которые компонуются на графическом процессоре. Вот почему они обычно пролетают мимо Chrome при проверке скорости. WebKit, с другой стороны, никогда не был адаптирован для ускорения ускорения простых шагов.

Поскольку Firefox и IE могут использовать Direct2D-рендеринг на платформах Windows (где каждая операция рисования аппаратно ускоряется), по сути, было требованием, чтобы они могли выполнять аппаратно-ускоренную компоновку. Если бы они только ускорили операции рисования, а не композицию, они потеряли бы большую часть преимуществ от использования Direct2D в первую очередь, потому что потребовалось бы копирование между графическим процессором и системной памятью, что было бы медленным. С другой стороны, все средства поддержки WebKit, которые мне известны, полностью выполняют рендеринг в программном обеспечении и несут штраф за копирование в GPU, когда они являются составными (если используется компоновка графического процессора). Таким образом, это становится компромиссом. Если слой, который вы компонуете, не занимает много времени для рендеринга на CPU, не всегда имеет смысл выполнять копию и композицию на GPU вообще.

Из-за этого, а также крайне ограниченного характера мобильных графических процессоров, ни один из браузеров WebKit еще не начал выполнять автоматическое аппаратное ускорение, за исключением случаев, когда это абсолютно необходимо (например, при настройке 3D-преобразования). Если бы вы хотели мое мнение, я бы также добавил, что я думаю, что ленивость со стороны разработчиков WebKit и поддерживающих компаний также является фактором. Использование GPU является основным источником ошибок, поэтому им проще просто не использовать его, а не устранять проблемы.

Кстати, Firefox для Android может постоянно компоновать графику, хотя вам может потребоваться включить ее в: config; Я не знаю, включен ли он по умолчанию. Для ПК я бы рекомендовал использовать Firefox или IE для действительно быстрого рендеринга.

EDIT: Я также должен добавить, что в самых последних версиях Android Google добавила аппаратное ускорение в Skia, которое обрабатывает почти все 2D-рендеринг в ОС. Это не так много устройств в дикой природе, но это означает, что производительность улучшится для всего на Android в ближайшем будущем. Тем не менее, я не знаю, работает ли их реализация Skia без проблем с OpenGL. Композиция все еще может содержать некоторые дополнительные копии, пока они не справятся с ней.

Ответ 2

Для получения дополнительной информации о подходе к webkit, Ария Хидаят (webkit reviewer) написала неплохую вводную запись в блоге об аппаратном ускорении и webkit для нашего блога, Наслаждайтесь.

[Пунш-линия - это то, что ускорение HW может переварить много памяти, поэтому будьте осторожны.]