Pregunta

Estoy tratando de actualizar dinámicamente una sugerencia hecha con Prototip y Prototype. La manera en que yo estoy tratando de hacer esto no es probablemente la mejor manera (por lo que si usted sabe una mejor manera que pueda ser útil), pero la única manera que se me ocurrió hacerlo sería para mantener el JavaScript en un elemento div y actualización el código JavaScript en el interior del elemento div con el fin de actualizar la información sobre herramientas. Sin embargo, esto parece ser una pérdida de memoria, ya que cada vez que el Javascript se actualiza, se crea un nuevo objeto Tip y se almacena en la memoria. Si no hay una mejor manera de hacer esto, como puedo borrar la memoria?

he hecho este script sencillo para probar la pérdida de memoria, ahora tengo que encontrar la manera de hacerlo de modo que la pérdida de memoria está parcheado en este ejemplo.

for (i=0; i<1000; i++) {
    $('testdiv').update("<script type='text/javascript'> new Tip('chips_tip', 'Your Chips', {style: 'creamy',stem: 'topLeft',hook: { mouse: true, tip: 'topLeft' },offset: { x: 10, y: 16 },delay: 0.04,width: 85}); <\/script>");
}

Esto es lo que el Javascript para la información sobre herramientas es normalmente:

new Tip('element', "Description", {
    style: 'creamy',
    stem: 'topLeft',
    hook: { mouse: true, tip: 'topLeft' },
    offset: { x: 10, y: 16 },
    delay: 0.04,
    width: 85
});
¿Fue útil?

Solución

Parece que la nueva construcción de punta puede tener un elemento en lugar del texto de sugerencia como un parámetro. Es posible que desee para tratar de usarla. No he hecho esto por lo que tendrá que probar por su cuenta. En primer lugar, crear el diseño sobre herramientas (etiqueta div que contiene texto de sugerencia) y el estilo como de costumbre. Establecer el atributo de estilo de este div para "display: none". A continuación, intente crear la punta de esta manera:

new Tip('source', $('tooltip_container'));

A continuación, puede cambiar el texto de la descripción usando:

$('tooltip_container').update('new tooltip text');

No es suficiente para asignar la descripción construir a una variable en el espacio global, ya que me parece que prototip inserta su propio material sobre herramientas HTML en el DOM. Mi conjetura es que cada vez que se llama "nueva Tip" que va a agregar HTML adicional en el DOM. Estos objetos de nodos DOM después hacer referencia, por lo que nunca son basura recogida. Debe ser fácil para que usted pueda comprobar que, utilizando su código de prueba y Firebug para inspeccionar el DOM.

La última opción que tiene es mirar el código fuente prototip para ver si tiene algún tipo de función setToolTipText. Entonces usted podría ser capaz de hacer algo como esto:

var tooltip = new Tip('element', 'text');
// snip
tooltip.setText('some new text');

Si esto no funciona, enviar por correo electrónico el autor de prototip. Estoy seguro de que estará encantado de ayudarle.

Otros consejos

Como se ha notado, simplemente crear instancias de un nuevo Consejo significará un nuevo objeto Consejo se crea y almacena en la memoria.

Para evitar esto, es necesario asignar el Consejo a una variable única en el ámbito global. es decir, una instancia de la variable "información sobre herramientas", y luego usar "tooltip = new Tip" en su rutina (esto permitirá que sólo el 1 información sobre herramientas para estar en uso en un momento, que yo supongo es lo que quiere, ya que sólo uno puede visualizarse ). La recolección de basura debe cuidar de los demás.

Por una instancia de la "punta" objeto que realmente realiza llamada al constructor, por ejemplo, simple llamada de función, que manejar y actualizar el elemento visual en consecuencia, pero una vez que este objeto no está referenciado por cualquier variable se supone que debe ser recogido por el colector de basura. En caso de que usted quiere estar seguro de que puede hacer lo siguiente:

var tip = new Tip( whatever);
// before next update do delete tip;

Parece que este es en realidad una pérdida de memoria en el prototipo. Según esta , la fuga se fija en 1,6 0.1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top