Mi chiedo perché lo stesso codice JavaScript sia considerevolmente più lento in un componente aggiuntivo di FireFox (utilizzando l'SDK dell'add-on) piuttosto che nell'esecuzione diretta in una pagina Web caricata in FireFox.Perché JavaScript è più lento in un componente aggiuntivo di FireFox rispetto a una pagina Web caricata in FireFox?
Per esempio, questo codice:
function isPrime(number) {
var i,
prime = true;
for(i = 2 ; i < number ; ++i) {
if(number % i === 0) {
prime = false;
}
}
return prime;
}
function sumFirstPrimeNumbers(x) {
var i,
sum = 0;
for(i = 1 ; i <= x ; ++i) {
if(isPrime(i)) {
sum += i;
}
}
return sum;
}
var sum = sumFirstPrimeNumbers(15000);
console.log(sum);
richiede meno di 2 secondi per l'esecuzione in una pagina web aperta in Firefox, ma richiede circa 15 secondi per l'esecuzione in un add-on Firefox.
So che il codice potrebbe essere migliore, ma è solo un esempio per mostrare quanto sia lento.
Perché è così lento in un componente aggiuntivo di FireFox?
C'è un modo per farlo più velocemente (senza modificare questo codice poiché è, come ho detto sopra, solo un esempio)?
Aggiornamento:
sembra essere legato alla Add-on SDK. Ho fatto un altro test: ho eseguito lo stesso codice in un add-on che non utilizza l'SDK aggiuntivo e il codice eseguito in circa 3 secondi.
Perché una differenza così grande (3 secondi contro 15 secondi) tra un componente aggiuntivo che utilizza l'SDK aggiuntivo e un componente aggiuntivo che non lo utilizza?
Quando è stato il codice viene eseguito? Come il browser era sotto pesante carico perché si stava avviando? –
Probabilmente sto dicendo una cosa stupida, e sicuramente qualcuno mi smentirà, ma è possibile che la pagina web "memorizzi" i risultati di 'isPrime' mentre l'add-on no? –
Questo codice è stato caricato all'avvio del browser. Ma ho provato a eseguire questo codice con un clic del mouse ed è lento. E non so se c'è qualche cache. – antoyo