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

Методы профилирования памяти на рабочем столе Safari и iOS?

Обновлено 10/21: Изменено название и вопрос, чтобы получить ответ (кроме "нет" ).

Мы испытываем утечки в Safari (подтвержденные в Windows и Mac, подозреваемые в iOS). Существуют ли расширения Safari, которые позволяют использовать одно использование профиля JavaScript/DOM для обнаружения потенциальных утечек? Еще лучше, есть ли какой-либо инструмент, который можно использовать на iOS или в эмуляторе Apple iOS? Какие существуют методы обнаружения того, что может вызвать утечку памяти в JavaScript/DOM в Safari? И знает ли кто-нибудь о ЛЮБОЕ способе доступа к информации о памяти для iOS?

Фон

Мы разрабатываем веб-приложение iOS Safari, которое использует одностраничную парадигму приложения, загружая 100s полноэкранных изображений. Мы изменили нормальный лимит изображения для iPhone 6,5 МБ iOS, сбросив исходный код для тегов изображений, но теперь мы сталкиваемся с тем, что, по моему мнению, является утечкой памяти в iOS Safari. После загрузки ~ 250-300 изображений iOS Safari просто перестает загружать изображения, из-за чего мы подозреваем утечку памяти. Не удивительно, учитывая, что одна и та же утечка появляется как в Safari для Windows, так и в Safari для Mac - в Windows это особенно плохо; для каждого нового полноэкранного изображения с высоким разрешением потребляется еще 10-15 МБ памяти, если мы переключаемся на более низкие изображения, они по-прежнему накапливают ~ 5 МБ на изображение.

В Windows мы изолировали утечку от простого действия рендеринга изображения в окне просмотра браузера - у нас есть карусель изображений и даже с нулевой манипуляцией DOM, просто переведя (3d) изображение через окно просмотра, память выделяется и никогда не выпускается. В Windows потребление памяти может быстро перерасти до 1,5 ГБ, после чего Safari просто сработает. На Mac это не так плохо, но память легко перескакивает от 100 МБ в начале до 500 МБ и далее. Для сравнения, вкладка Chrome/процесс, на котором размещается одна и та же страница, растет от примерно 33 МБ до ~ 120 МБ, а затем стабилизируется.

Попытка обходных решений

Мы попытались удалить отдельные теги изображений и заменить их образ-заполнителем вместо их сброса, но это, похоже, не облегчает проблему, а также вызывает проблемы с производительностью, предположительно из-за сбоя DOM. Интересно, что удаление/отключение ВСЕХ изображений работает - как только выполняется команда, память освобождается. Однако это вызывает проблемы, управляет состоянием пользовательского интерфейса и создает резервную копию карусели также занимает значительное время. Обновление страницы - это еще один способ обхода, но это приводит к еще большему сбою UX.

Обновление 04/10: Просто обновление о том, что мы закончили: iOS 4.2 представила ограничение, которое отсекает 3D-преобразованное Div на 122,900 пикселей. Не знаю, почему, но это заставило нас перепроектировать и перейти с динамической карусели вместо нашей предыдущей статической диафильмы.

Во-вторых, мы обнаружили, что использование div с фоновыми изображениями работает лучше самих изображений. Это похоже на еще одну ошибку в Safari или, в лучшем случае, на противоречивую реализацию ограничений.

окончательное обновление

Мысли? Если вы столкнулись с подозрениями в утечке в Safari, каков был ваш подход к их работе?

4b9b3361

Ответ 1

Когда вы устанавливаете SDK iOS, также устанавливается утилита с именем "Инструменты". Он может отслеживать все виды статистики использования, включая память (есть даже шаблон "Утечки" ). Самое замечательное в том, что он может отслеживать как симулятор iPhone/iPad, так и любое подключенное устройство разработки iOS. Разумеется, это также можно использовать для мониторинга использования памяти в Mac OS, поэтому это может помочь и с Safari. Вы можете найти инструменты в /Developer/Applications.

Что-то еще удобное в том, что всякий раз, когда вы синхронизируете iPad/iPhone с iTunes, он также синхронизирует любые отчеты о сбоях с устройства на вашем компьютере. Их можно найти в ~/Library/Logs/CrashReporter/MobileDevice/[Имя устройства]/.

Одна вещь, которую мы обнаружили при разработке iPad, в частности, заключалась в том, что она была очень подвержена сбоям из-за проблем с памятью, особенно в таких тяжелых приложениях, как наша. Одна вещь, которую мы узнали, заключалась в том, что просто удаление элемента DOM не означает, что этот элемент будет мусором, собранным браузером. Мы обнаружили, что установка изображения src (или фонового изображения, если он был div) пустой строкой, прежде чем удалить его из DOM, очень помогло.

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