Состояние работы SVG на iOS и других планшетах?

Решив перейти к D3.js и SVG для визуализации, теперь похоже, что SVG отлично работает в настольном браузере или в родной оболочке, но я действительно озадачен падением скорости работы на мобильной платформе iOS.

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

Плохая новость заключается в том, что если вы запустите эти тесты в браузере Safari на новом iPad, скорость значительно снизится для SVG и Canvas. Страшная новость заключается в том, что если вы запустите эти тесты в новом браузере Chrome для iPad, скорость будет значительно выше.

Я читал, что Google вынужден использовать UIWebview, который не ускоряется движком JavaScript Apple Nitro. Я также читал, что Apple нажимает HTML5, но демонстрации запускаются только в собственном браузере Safari.

В чем проблема? Лучшая цель для моего приложения - мобильная, но даже с отличными API, такими как стандарты D3.js и HTML5, так как производительность SVG защемляется, это просто потому, что Apple хочет задержать прогресс в своей собственной повестке дня? То, как это выглядит для меня в любом случае. Я не уверен, что эти тесты выглядят на Android? Было бы здорово знать. Если тесты будут положительными, возможно, я избавлюсь от iPad и просто зайду с Android уже.

Суть в том, что я просто не уверен, возможно ли сделать мое приложение с использованием технологии HTML5 из-за этих проблем с производительностью? Я также не заинтересован в изучении Objective-C, поскольку будущее будет в HTML5. Я верю в сеть и ее стандарты, но похоже, что они блокируются. Мне очень интересно знать решения этой дилеммы.

Ответ 1

iOS7 имеет особенно плохую производительность, анимацию SVG с помощью JavaScript - хотя статический рисунок SVG значительно быстрее. Мы писали блог о производительности версии iOS7, которую вы можете увидеть для более подробной информации.

Обновление: iOS7.1 исправил проблему производительности анимации javascript. Он возвращается на 50 кадров в секунду

Ответ 2

Я обнаружил, что d3.js/SVG на моем первом поколении iPad значительно медленнее, чем запуск того же приложения на настольных браузерах (FF/Chrome/IE 9 +).

Я написал различные улучшения, которые я попытался здесь: http://hivemindmap.blogspot.co.uk/2013/01/html5-and-interactive-graphs.html

Ответ 3

Производительность обычно будет ниже на мобильных устройствах, чем на настольном комплекте. В общем, их аппаратное обеспечение менее мощное (оно больше ориентировано на низкое энергопотребление, чем на прямую скорость), и у них чертовски меньше памяти и памяти. Chrome на моем рабочем столе имеет несколько процессоров, 8 ГБ оперативной памяти и невероятно мощный графический процессор. На моем iPad у него нет нигде рядом с этим уровнем мощности.

Сторонние приложения iOS (включая Chrome) не могут использовать Nitro, это очень верно. Я считаю, что это связано с тем, что Nitro имеет возможность отмечать память как исполняемую и (по соображениям безопасности) сторонним приложениям не доверяют. Большинство материалов HTML5 будут работать в любом браузере на iOS (за исключением, возможно, Opera Mini). Анимация Canvas и SVG будет медленнее, чем в Safari, потому что все это связано с Javascript - опять-таки отсутствие доступа к Nitro удерживает их. Это уже не так: начиная с iOS 8 сторонних приложений теперь можно использовать WKWebView, которая имеет доступ к тому же высокоскоростному движку javascript, что и Safari.

Исходный код, как правило, быстрее, потому что он намного ближе к аппаратным средствам, напрямую ударяя API-интерфейсы дисплея, а не проходя через веб-стек.

Решение, как правило, упрощает все. Точно так же, как разработчики родных игр должны были значительно уменьшить сложность своих 3D-игр, чтобы заставить их работать на устройствах iOS, поэтому веб-разработчикам приходится уменьшать сложность своих SVG и приложений для холста. Меньше материала, летающего вокруг страницы, означает более высокую производительность в целом.

Есть несколько трюков, которые вы можете сделать, и много читать по теме. Прочитайте http://www.html5rocks.com/en/tutorials/canvas/performance/, http://www.html5gamedevs.com/tag/performance/, и остальную часть Google. Лично я бы построил доказательство концепции и протестировал ее, прежде чем полностью отказаться от идеи:)