Poor Pan, масштабируйте производительность в Android Webview с помощью HTML5 Canvas и KineticJS

Наше мобильное веб-приложение включает в себя интерактивный дизайнер, который мы реализовали с помощью HTML5 canvas и Kinetic.js. Мы пытаемся динамически отображать на холсте около 353 объектов, из которых 178 являются текстом, а остальные — линиями и прямоугольниками.

Во время операции панорамирования или масштабирования холст перестает отвечать на запросы. Похоже, такое поведение проявляется только на устройстве Android, так как то же самое работает исключительно хорошо на IOS. Мы также попробовали одно и то же приложение через браузеры напрямую и заметили похожее поведение без ответа в браузере Android и Chrome. Firefox сравнительно отзывчив.

Мы попробовали варианты, указанные в следующих ссылках, но проблема не устранена (например, несколько слоев холста) 1) Низкая производительность с кинетическими js 2) Проблемы производительности с HTML5 Canvas в некоторые мобильные браузеры.

Подход, указанный в ссылках KineticJS — перемещение 4000 плиток с помощью Stage. перетаскиваемый , Как кэшировать весь слой прямо перед запуском перетаскивания и вернуть его обратно на dragend? кажется многообещающим, но мы не сможем пойти с этим, так как наш дизайнер будет содержать довольно много пользователей взаимодействия (например, перетаскивание разделов рисования).

Я также нашел здесь еще один вопрос со ссылкой на аналогичную проблему zoom-is-unre">https://stackoverflow.com/questions/18853952/kinectic-js-performance-on-android-4-1-devices-особенно-pan-and-zoom-is-unre

Есть ли какие-либо другие возможные решения/исправления для улучшения этой производительности, пожалуйста, помогите.

РЕДАКТИРОВАНИЕ. Мы протестировали наше приложение на следующих устройствах: 1) Samsung Note 800 (Android 4.1.2) 2) Samsung Tab 2 (Android 4.1.2) 3) ASUS Transformer Pad TF300TG (Android 4.2.1). ) и 4) Nexus 7 (Android 4.3).


person chirag kalyanpur    schedule 25.09.2013    source источник
comment
Привет, ты решил свою проблему? У меня есть еще одна проблема с KineticJS + Android WebView => на ASUS TF300TG почему-то возникают глюки при рисовании. Не на Nexus 7. Не проверял на других устройствах.   -  person sasha.sochka    schedule 21.10.2013
comment
Нет, Сочка, я еще не нашел решения для этого. Я также пытался визуализировать объекты с помощью простого холста javascript API, и, как ни странно, он очень хорошо работает на Chrome и Firefox. Производительность в веб-просмотре улучшается лишь незначительно. Я попробовал предварительный рендеринг (без кинетики), но при масштабировании за пределы определенной степени текст и линии начинают пикселизироваться. Все еще пытаюсь найти решение :(   -  person chirag kalyanpur    schedule 24.10.2013
comment
Кому-то может быть полезно: github.com/lavrton/kineticjs-tips-and- tools#performance Есть несколько советов по повышению производительности. Также включите советы по Android.   -  person lavrton    schedule 13.04.2014


Ответы (1)


Вам определенно нужно кэшировать сцену как изображение непосредственно перед перетаскиванием, потому что если вы попытаетесь очень быстро отобразить сотни текстовых элементов на холсте (собственный холст или KineticJS), производительность будет низкой, особенно на Android. В конце перетаскивания вы можете уничтожить кешированное изображение с помощью destroy().

person Eric Rowell    schedule 25.10.2013
comment
Конечно, Эрик попробует это. Изначально мы пробовали пререндерить изображение, но как бы перестали вникать в это, так как масштабирование за пределы определенной точки приводило к размытию текста и линий (из-за интерполяции). Я нашел пару ссылок о предотвращении интерполяции - посмотрю на это дальше. - person chirag kalyanpur; 29.10.2013