#performance #css #webkit #mobile-webkit
#Производительность #css #webkit #mobile-webkit
Вопрос:
Мы тестировали CSS3 на iPhone (3G 4) и столкнулись с некоторыми проблемами производительности.
Мы получили веб-приложение, которое показывает изображение профиля дополнительную информацию.
У нас есть поле (по умолчанию мы скрываем поле на 90%):
border: 1px solid #aaa;
font-size: 11px;
text-shadow: 0 1px 0 rgba(0,0,0,.75);
box-shadow: inset 0 0 40px rgba(255,255,255,.8);
-webkit-box-shadow: inset 0 0 40px rgba(255,255,255,.8);
-moz-box-shadow: inset 0 0 40px rgba(255,255,255,.8);
-moz-border-radius: 0 10px 0 0;
-webkit-border-radius: 0 10px 0 0;
border-radius: 0 10px 0 0;
И у нас есть 3 иконки с надписью под ними:
background: rgba(0,0,0,.5);
padding: 3px;
font-weight: bold;
text-shadow: 0 1px 0 #000;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
Теперь, если мы анимируем (перемещаем его в более высокую позицию Y) окно te, анимация получается действительно медленной, даже не плавной.
Что мы можем сделать, чтобы анимация была плавной?
PS. на iPhone 4S работает нормально (из-за лучшего процессора)
Комментарии:
1. как у вас с анимацией? javascript? анимации css3? переходы dom?
2. Сначала мы попробовали использовать Javascript, после этого мы попробовали использовать анимации CSS3. С CSS3 мы получили лучшую производительность, но все еще недостаточно плавную…
Ответ №1:
Редактировать: я дал этот ответ, предполагая, что вы анимируете переходы CSS3. Если это не так, а вы можете, то, возможно, стоит ожидать повышения производительности… Попробовать стоит.
Проблема здесь, по-видимому, заключается в том, что webkit приходится перерисовывать две действительно тяжелые боковые тени. Это не кажется сложной задачей, но если бы вы для начала удалили вставку box-shadow, я полагаю, вы бы увидели удивительный скачок производительности.
Я столкнулся с зависшей прокруткой на своем устройстве Android (браузер на базе Webkit) и провел это тестирование, чтобы определить, в чем проблема. Текстовая тень была несколько неактуальной в настройках типа пользовательского интерфейса. Градиенты также были довольно несущественными. Как только я нажал box-shadow, я заметил почти линейный прогресс в производительности, поскольку я удалял радиус размытия пиксель за пикселем.
Например, для рендеринга большого div-файла радиусом 6 пикселей могло потребоваться 80 мс. Если бы я уменьшил это значение до 3 пикселей, время рендеринга было бы близко к 40 мс. 2 пикселя, около 20 мс.
Поэтому, возможно, вам захочется воздержаться от использования тени от окна и просто использовать изображения, если это возможно, в противном случае просто используйте тень меньшего размера. Как только вы достигнете точки, когда webkit сможет перерисовывать пользовательский интерфейс по крайней мере 20 раз в секунду на устройствах низкого уровня, вы, вероятно, будете в порядке.
Это может показаться очевидным. Поскольку нет опции для качества рендеринга (например), вы не можете оптимизировать это, кроме уменьшения масштаба… Для мобильных устройств все, что вы действительно можете сделать, это ограничить эффекты и оптимизировать свою художественную работу на основе ваших ограничений.
Комментарии:
1. Спасибо за ответ! Что я нашел в Google, если вы добавите -webkit-transform: translate3d(0, 0, 0); это к вашему элементу, вы получите лучшую производительность. Но это не работает для элементов, которые расположены абсолютно …
2. Это должно включить ускорение gpu, которое примерно настолько эффективно, насколько может быть получена анимация. Я обнаружил, что webkit загружен с неинтуитивной производительностью… Особенности? Для оптимизации он выполняет странные вещи, но в определенных условиях это происходит намного медленнее, чем кажется на первый взгляд. Я довольно смущен тем, как он перерисовывает пользовательский интерфейс, в первую очередь. Я выбрал этот вопрос на случай, если мне что-нибудь встретится. Мне было бы интересно услышать, добиваетесь ли вы прогресса!
3. Странная вещь также: если мы протестируем это на iPhone 4, анимация будет менее плавной, чем на 3G … Держу вас в курсе!
4. @StijnH iPhone4 оснащен дисплеем retina, поэтому CPU / GPU должен передавать в 2 раза больше пикселей, чем 3G. Вот почему производительность на iPhone4 низкая. Если вы попробуете 4s, производительность будет намного лучше.