El gadget que muestras parece ser una aplicación de escritorio sin embargo su codigo esta basando por lo que muestras en mucho javascript no crees que seria mas conveniente exponer tu caso en el foro de Desarrollo Web y no aqui en el de Scripting, dado que javascript es un lenguaje que tiene mas orientación a ser usado en la web
Te agradezco el consejo, pero en mi opinión el desarrollo web no implica solo utilizar un lenguaje orientado a web (como JS), sino que el problema/código también esté orientado al uso Web, en este caso no es así, como bien dices es para una aplicación de escritorio, por eso lo he considerado más adecuado en la sección de Scripting, al ser JS un lenguaje de Scripting también.
Los gadgets se decontinuaron desde hace tiempo por eso ya no se actualizan mas..
https://technet.microsoft.com/library/security/2719662
https://www.youtube.com/watch?v=7uK8t0haGmU
https://technet.microsoft.com/library/security/2719662
https://www.youtube.com/watch?v=7uK8t0haGmU
Gracias por comentar, ¿pero que tendrá que ver eso con el problema y la pregunta? '¬¬

de todas formas yo los utilizo en Windows 8.1, la plataforma sigue siendo usable

Desktop gadgets and sidebar for Windows 8.1 | Winaero
Ya he solucionado el problema, bueno, mejor dicho me han ayudado a solucionarlo, ya que ni de lejos habría podido resolver yo solo este problema sin los conocimientos necesarios sobre este lenguaje, ya que además la raíz del problema se trataba de algo bastante interno.
Y como me temía desde un principio, es debido a malas prácticas de uso, a la programación descuidada por parte del autor.
El motivo del overflow y la solución:
Citar
The main loop of the Gadget looks like this:
which basically means: call paintGadget every 2.5 seconds, for ever
This should be fine if the javascript engine and its resources are garbage collected when they are no longer in any scope. And this where things might go wromg due to sloppy programming.
Based on the answer from user dsg we learn that eventlisteners are a root cause for garbage collection to fail.
To overcome this problem we have to replace the line 'targets.innerHtml = '';' in the function 'paintGadget' with an implementation that removes the eventhandlers on every element before removing the element it self, like so:
Código
function paintGadget() { // repaint/rebuild all UI elelments // remove all elements targets.innerHtml = ''; // buildup var o = document.createElement('DIV'); o.onclick = openDrive; targets.appendChild(o); } function openDrive() { } window.setInterval(paintGadget, 2500);
which basically means: call paintGadget every 2.5 seconds, for ever
This should be fine if the javascript engine and its resources are garbage collected when they are no longer in any scope. And this where things might go wromg due to sloppy programming.
Based on the answer from user dsg we learn that eventlisteners are a root cause for garbage collection to fail.
To overcome this problem we have to replace the line 'targets.innerHtml = '';' in the function 'paintGadget' with an implementation that removes the eventhandlers on every element before removing the element it self, like so:
Código
while(targets.firstChild) { var ch = targets.firstChild; ch.onclick = null; targets.removeChild(ch); }
Con ese pequeño y útil reemplazamiento, el gadget ha superado todas las espectativas, cuando antes en 48h podía llegar al 1 GB de consumo de RAM, ahora nunca pasa de los 15 mb.
Saludos!