Jquery PhoneGap iPad应用程序内存警告/崩溃

Jquery PhoneGap iPad应用程序内存警告/崩溃,jquery,ipad,memory-management,cordova,Jquery,Ipad,Memory Management,Cordova,我已经尝试了几种方法来使用Phonegap制作一个单页本机应用程序,我正在寻求一些关于故障排除的一般建议 第一种方法: 它基本上是一堆不同的页面和子页面,用jquery加载到位于索引页面上的容器中。因此,没有页面加载,只是使用.load()将页面片段从页面加载到shell中 第二种方法: 我创建了一个包含所有内容的单页html页面,然后根据导航项的类与内容容器的id进行匹配来显示和隐藏该页面 这两种方法在机械上都能很好地工作。问题似乎在于,我的所有子页面都有一个图库或2-6个图像(因此我总共有2

我已经尝试了几种方法来使用Phonegap制作一个单页本机应用程序,我正在寻求一些关于故障排除的一般建议

第一种方法: 它基本上是一堆不同的页面和子页面,用jquery加载到位于索引页面上的容器中。因此,没有页面加载,只是使用.load()将页面片段从页面加载到shell中

第二种方法: 我创建了一个包含所有内容的单页html页面,然后根据导航项的类与内容容器的id进行匹配来显示和隐藏该页面

这两种方法在机械上都能很好地工作。问题似乎在于,我的所有子页面都有一个图库或2-6个图像(因此我总共有215多个图像,660 x 440),我使用jquery cycle和Touchwipe来激活手势滚动。这些库工作正常,但在滚动大约35个库之后,应用程序总是会收到一个内存警告级别1,然后是2,然后崩溃。我在乐器中的记忆使用似乎还可以。。。ajax加载的片段版本保持在2兆字节左右的活动字节,一页机始终保持在5兆字节左右。这些库由div中的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");
            } 
        });  
    });
});

谢谢你的建议,我现在正忙得不可开交

乍一看,我没发现什么不对劲。在打开下一个jQuery循环库时,您可能会尝试显式销毁jQuery循环库,看看这是否有帮助

$(youridentifier).cycle('destroy');

我认为问题与javascript无关,而是与webkit可以在活动内存中维护的图像数量有关。这似乎与这个问题有关:

我的解决方案是结合使用上面提到的东西。首先,我正在为我的图库使用带有背景图像的div。第二,我开始将所有背景图像设置为空白GIF。当我显示一个子段并激活一个图库时,我使用jQuery将CSS背景图像重写为实际的图像源,然后当我点击一个新的子Link时,我将它重置为空白GIF。这似乎将“活动”div背景图像的数量一次仅保持在3-7个,除了界面gfx。同时,其他200多个在图库中有背景图像的div(无论如何都不显示)只是一个空白的gif


我认为这个问题通常与UIWebview中的限制有关,而不是与PhoneGap或jquery有关。我不确定这是否是最终的解决方案,但到目前为止,我能够在不崩溃的情况下运行应用程序,并且我在分配工具中的活动字节始终保持在1.3兆左右

谢谢你看,我也试过了。我首先在当前图库中添加了一个类,类似于“.active_gallery”,然后在导航的单击事件中首先明确销毁特定的“cycle”图库,然后在查看设置新的当前cycle图库的所有代码之前删除该类。我还没找到运气。看起来不管怎样,在滑过35个库之后,它开始收到内存警告。使用ajax加载应用程序,即使在销毁循环库、删除“擦除”处理程序等之后,我也会得到相同的结果。