He intentado varios enfoques para hacer una aplicación nativa de una página utilizando Phonegap, y estoy buscando algún consejo general sobre solución de problemas.Advertencias de memoria/colisión con la aplicación para iPad PhoneGap
Primera aproximación: Es básicamente un montón de diferentes páginas y sub-páginas cargadas con jQuery en contenedores que viven en la página de índice. Por lo tanto, no se carga la página, solo carga los fragmentos de página de las páginas en un shell, usando .load().
Segundo enfoque: hice una página HTML de una página con todo el contenido, a continuación, mostrar y ocultar que en base a acuerdo con la clase de un elemento de navegación a un id de un contenedor de contenido.
Ambos enfoques funcionan bien mecánicamente. El problema parece residir en el hecho de que todas mis subpáginas tienen una galería o de 2 a 6 imágenes (así que tengo un total de más de 215 imágenes en total, 660 x 440) para las que he usado el ciclo jquery, y Touchwipe para activar el desplazamiento con gestos. Las galerías funcionan bien, pero después de desplazarse por unas 35 galerías, la aplicación siempre recibe un nivel de advertencia de memoria 1, luego 2 y luego se bloquea. El uso de mi memoria en los instrumentos parece estar bien ... la versión de fragmentos cargados de Ajax se mantiene alrededor de 2 megabytes de bytes en vivo, el de un solo busca consistentemente en alrededor de 5 megas. Las galerías están compuestas por imágenes de fondo CSS en divs, ya que parece funcionar mejor que las etiquetas.
No veo ninguna pérdida de memoria, o realmente cualquier otro problema fuera de las advertencias de memoria. Estoy algo atrapado en cómo rastrear esto. He hecho pruebas y errores absolutamente hasta la muerte. Ha reducido el javascript a lo esencial. Algo parece estar acumulándose con el tiempo.
¿Alguna idea sobre cómo descubrir qué está pasando? ¿Hay algunos primeros enfoques para asegurarse de que no está pasando nada con el javascript que está causando algún tipo de pérdida de memoria?
Es muy frustrante que todo funcione bastante bien, excepto en el iPad.
Mi próxima táctica podría ser intentar reescribir las imágenes de fondo de la galería a un gif en blanco cuando no estén en uso.
Aquí está el código que estoy usando para el localizador:
$(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");
}
});
});
});
Gracias por cualquier consejo, estoy tirando de mi pelo.
Gracias por echar un vistazo, lo he intentado también. Primero agregué una clase a la galería actual, algo así como ".active_gallery", luego específicamente destruyo esa galería específica de "ciclo" lo primero en el evento click de la navegación, luego elimino la clase antes de pasar por todo el código que configura el nueva galería del ciclo actual. No tuve suerte con eso todavía. Parece que pase lo que pase, después de deslizarse por 35 galerías, comienza a recibir advertencias de memoria. Con la aplicación de carga de ajax, obtengo el mismo resultado, incluso después de destruir las galerías de bicicletas, eliminar los manipuladores 'limpiar', etc. – Transoptic