我尝试了几种方法使用Phonegap制作单页面本地应用程序,并寻求一些通用的故障排除建议。
第一种方法:基本上是将不同页面和子页面加载到在索引页上的容器中,使用.load()从页面加载页面片段而不是页面加载。
第二种方法:我制作了一个包含所有内容的单页面HTML页面,然后根据导航项的类匹配到内容容器的ID来显示和隐藏它。
这两种方法机械上都可以很好地工作。问题似乎在于我的所有子页面都有一个画廊或2-6张图片,(所以总共有215多张图片,660 x 440),我已经使用jquery cycle和Touchwipe来激活手势滚动。画廊效果很好,但在大约浏览35个画廊之后,该应用程序总是收到内存警告级别1,然后2,最后崩溃。仪器中的内存使用率看起来还好……Ajax加载的片段版本保持在2兆字节左右,单页版始终保持在5兆字节左右。画廊由CSS背景图像组成,因为这似乎比标记表现更好。
我没有发现任何内存泄漏或其他问题,除了内存警告外。我不知道如何追踪这个问题。我已经试过所有的试错方法。将JavaScript简化到基本要素。似乎有些东西随着时间的推移而积累。
如何找出问题所在?是否有一些第一步方法确保JavaScript没有引起某种类型的内存泄漏?
很令人沮丧的是,整个系统在iPad上工作得非常好。
我的下一个策略可能是尝试重新编写画廊背景图像,当它们不使用时重写为空白gif。
这是我用于单页应用程序的代码:
第一种方法:基本上是将不同页面和子页面加载到在索引页上的容器中,使用.load()从页面加载页面片段而不是页面加载。
第二种方法:我制作了一个包含所有内容的单页面HTML页面,然后根据导航项的类匹配到内容容器的ID来显示和隐藏它。
这两种方法机械上都可以很好地工作。问题似乎在于我的所有子页面都有一个画廊或2-6张图片,(所以总共有215多张图片,660 x 440),我已经使用jquery cycle和Touchwipe来激活手势滚动。画廊效果很好,但在大约浏览35个画廊之后,该应用程序总是收到内存警告级别1,然后2,最后崩溃。仪器中的内存使用率看起来还好……Ajax加载的片段版本保持在2兆字节左右,单页版始终保持在5兆字节左右。画廊由CSS背景图像组成,因为这似乎比标记表现更好。
我没有发现任何内存泄漏或其他问题,除了内存警告外。我不知道如何追踪这个问题。我已经试过所有的试错方法。将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");
}
});
});
});
非常感谢您的建议,我都快被搞疯了。