Quindi, sto programmando una simulazione fisica 2D di Javascript. Le prestazioni sono buone, ma sto facendo delle ottimizzazioni per renderlo migliore. Quindi, poiché il programma funziona con molta geometria fisica, eseguo diversi calcoli di Teorema di Pitagora nel programma. In tutto, circa cinque calcoli; insieme, corrono circa un milione di volte al secondo. Quindi, ho pensato che avrebbe aumentato le prestazioni se avessi messo quel semplice codice del teorema di Pitagora in una nuova funzione e l'avessi chiamato; dopotutto, in questo modo il browser ha meno compilazione da fare. Quindi, ho eseguito il codice in Firefox e ottenuto ... un 4000000% aumento nel tempo di esecuzione di tale calcolo.JS: Quanto ci vuole per chiamare una funzione?
Come? È lo stesso codice: Math.sqrt (x * x + y * y), quindi come può aggiungerlo come una funzione rallentarlo? Presumo che la ragione sia che una funzione richiede tempo solo per essere chiamata, senza eseguire il codice, e che aggiungendo che un milione di questi ritardi al secondo la rallenta?
Mi sembra piuttosto allarmante. Ciò vale anche per le funzioni js predefinite? Sembra improbabile, e se è così, come lo evitano?
Il codice utilizzato per andare in questo modo:
function x()
{
dx=nx-mx;
dy=ny-my;
d=Math.sqrt(dx*dx+dy*dy);
doStuff(...
}
Quello che ho provato è stato questo:
function x()
{
dx=nx-mx;
dy=ny-my;
d=hypo(dx,dy);
doStuff(...
}
function hypo(x,y)
{
return Math.sqrt(x*x+y*y);
}
Grazie!
La funzione è definita al di fuori dell'ambito che viene eseguita un milione di volte al secondo? – alex
E non è vero che il browser ha "meno compilazione da fare" perché lo si inserisce in una funzione ... dovrebbe essere pressoché la stessa cosa, in realtà, soprattutto perché la compilazione è una cosa di avvio. Ma @alex ha probabilmente capito il motivo del tuo rallentamento del 400% :) – Ryan
@alex Sì, è definito nella finestra principale. – mindoftea