Hallo Herr Singelmann,
nachdem ich bei meinen Hyperlink-Lösungen gerne den Durchsatz etwas steigern würde, war ich über Ihren Lösungsansatz ganz begeistert und habe Ihr Beispiel auf
hyperlinkPageItemSources
übertragen.
Meine beiden Routinen sehen so aus:
Die ursprüngliche Lösung:
/*pageItemSource*/function existThisPageitemSourceAlready(id)
{
try
{
var l = document.hyperlinkPageItemSources.length;
var piss = document.hyperlinkPageItemSources;
for (var i = 0; i {
if (piss.sourcePageItem.id == pi.id) return piss;
}
}
catch (error)
{
gO.myError.doError(error, arguments, $.stack, -1, false, true);
}
return null;
}
Die von nach Ihrem Vorschlag modifizierte Lösung:
/*pageItemSource*/function existThisPageitemSourceAlready(id)
{
try
{
var pis = document.hyperlinkPageItemSources.firstItem();
if (pis.isValid)
{
do
{
if (pis.sourcePageItem.id == id) return pis;
pis = document.hyperlinkPageItemSources.nextItem( pis );
} while (pis.isValid)
}
}
catch (error)
{
gO.myError.doError(error, arguments, $.stack, -1, false, true);
}
return null;
}
Der Geschwindigkeitsunterschied ist gewaltig, nur leider ganz anders als von mir erwartet:
Bei 232 Aufrufen benötigt die zweite Lösung die
sechzigfache Zeit!
Dabei fällt mir auf, dass der Vorgang vermutlich, warum auch immer, sehr speicherintensiv zu sein scheint, weil einige Durchgänge recht schnell ablaufen, dann eine längere Pause eintritt (garbage collector?) und danach geht es wieder für einige Durchläufe recht schnell ....
Bei der ersten Routine laufen die Aufrufe ganz gleichmäßig ab.