2012-01-30 3 views
13

Есть тонн веб-страниц в эти дни рекомендуя добавить эти правила к контенту, чтобы сделать это аппаратное ускорение:Почему браузеры не достаточно умны для аппаратного ускорения без трюков?

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

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


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

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

В первый раз я видел такой метод был в [этот вопрос] (Http: // StackOverflow.com/questions/9012753/is-there-a-firefox-equ-to-chromes-translatez0-to-force-gpu-accelera) с приятным небольшим ответом от одного из разработчиков Mozilla. Это почти так же смешно, как добавление '! Important' для решения специфики головоломки ... * почти *. – BoltClock

ответ

25

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

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

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

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

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

+0

Ничего себе, отличный ответ; Спасибо. Я оставлю это время открытым дольше, чтобы узнать, сможет ли кто-нибудь дать дополнительную информацию о стороне WebKit, но это очень ценится. – Domenic

+3

Этот ответ содержит некоторое недоразумение. «никогда не был адаптирован для ускорения более простых слоев», это просто неправильно. Из-за подхода абстракции платформы WebKit (см. Http://ariya.ofilabs.com/2011/06/your-webkit-port-is-special-just-like-every-other-port.html) ускорение примитивного чертеж делегирован графическому стеку платформы. На Mac CoreGraphics использует GPU в определенной степени. Даже на Qt WebKit-порту есть варианты OpenVG, OpenGL, OpenGL ES и т. Д. Для ускорения рисования. –

+0

Это правда, что он в основном делегирует чертеж на платформу, но ни один из платформ графической платформы не использует много аппаратного ускорения в настоящее время, кроме Direct2D в Windows. CoreGraphics делает простое ускорение для blitting и т. Д., И сложные вещи, такие как текст, на самом деле не ускоряются. Я рассказал о новой версии Android от Skia в приведенном выше надзоре. Порт Qt не используется никакими крупными реализациями браузера, о которых я знаю, и при использовании OpenVG было бы замечательно, их также мало. –

1

Для получения дополнительной информации о методе webkit, Ariya Hidayat (webkit reviewer) написал pretty good introductory blog post on hardware acceleration and webkit для нашего блога. Наслаждаться.

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

+0

Последние пара абзацев были особенно полезными. Спасибо! – Domenic

Смежные вопросы