Я пробовал несколько подходов, чтобы создать одностраничное приложение с помощью Phonegap, и ищу несколько общих советов по устранению неполадок.
Первый подход:
В основном это куча разных страниц и подстраниц, загружаемых с помощью jquery в контейнеры, которые находятся на странице индекса. Таким образом, страница не загружается, просто загружая фрагменты страниц из страниц в оболочку, используя .load ().
Второй подход:
Я создал одностраничную html-страницу со всем содержимым, затем показал и скрыл ее, основываясь на сопоставлении класса элемента навигации с идентификатором контейнера содержимого.
Оба подхода работают нормально механически. Проблема, похоже, заключается в том, что все мои подстраницы имеют галерею или 2-6 изображений (так что я получил в общей сложности более 215 изображений, 660 x 440), для которых я использовал цикл jquery, и Touchwipe для активации прокрутки с помощью жестов. Галереи работают нормально, но после некоторой прокрутки около 35 галерей приложение всегда получает предупреждение памяти уровня 1, затем 2, а затем вылетает. Мое использование памяти в инструментах кажется нормальным ... версия фрагмента, загруженная ajax, остается в живых около 2 мегабайт байтов, одностраничная версия остается неизменной на уровне около 5 мегабайт. Галереи состоят из CSS-фоновых изображений в div, так как это работает лучше, чем теги.
Я не вижу никаких утечек памяти или каких-либо других проблем за пределами предупреждений памяти. Я застрял на том, как отследить это. Я сделал проб и ошибок абсолютно до смерти. Сократили JavaScript до самого необходимого. Кажется, что-то со временем накапливается.
Есть идеи, как выяснить, что происходит? Существуют ли какие-то первые подходы, чтобы убедиться, что с javascript ничего не происходит, что вызывает некоторую утечку памяти?
Очень печально, что все работает довольно хорошо, кроме как на iPad.
Моей следующей тактикой может быть попытка переписать фоновые изображения галереи в пустой GIF, когда они не используются.
Вот код, который я использую для одностраничного пейджера:
$(document).ready(function(){
document.addEventListener('touchmove', function(e){ e.preventDefault(); });
$('div#mainpages > div').hide();
$("ul#mainnav li").click(function() {
$("#mainpages > div").hide();
var navClass = $(this).attr('class');
var target='#'+navClass;
$(target).show();
$('[id^=subpages] > div').hide();
$(target).find('[id^=subpages_] div:first').show();
});
$('[id^=subnav] li').click(function() {
$('[id^=subnav_] li').removeClass('current');
$('[id^=subpages_] > div').hide();
var subnavClass = $(this).attr('class');
var subtargeted='#'+subnavClass;
$(subtargeted).show();
$(this).addClass('current');
$(subtargeted+' .gallery_div_shell').cycle({
timeout: 0,
speed: 700,
speedIn: 300,
speedOut: 300,
fx: 'scrollHorz'
});
$(subtargeted+' .gallery_div_shell').touchwipe({
wipeLeft: function() {
$('.gallery_div_shell').cycle("next");
},
wipeRight: function() {
$('.gallery_div_shell').cycle("prev");
}
});
});
});
Спасибо за любой совет, я вырываю волосы.