0

Je suis actuellement en train d'implémenter un émulateur en Javascript, le modèle de mémoire de la plateforme émulée est plutôt complexe, donc mes lectures et écritures passent par un ensemble de fonctions, par exemple exemple:Optimisation et implémentation de longs tableaux de fonctions en Javascript

var MRead = []; 
ReadBiosSpace = function(addr) { return (EnableBios ? BIOS[addr] : ROM[addr]); }; 
for (i = 0; i <= 0xFF; i++) { MRead[i] = ReadBiosSpace; }; 
function Read(addr) { return MRead[addr](addr); }; 

car évidemment la lecture et l'écriture des fonctions seront appelées très souvent (au moins une fois par instruction, l'exécution principale est Operators[Read(ProgramCounter)]()) ils sont extrêmement sensibles aux performances.

Y a-t-il des optimisations de performance qui peuvent être effectuées? Est-ce la meilleure méthode?

+0

Suppression de lignes et le retrait ne vous donnera pas une amélioration de la performance mesurable. – NullUserException

Répondre

1

Si EnableBios ne change pas très souvent alors la seule amélioration évidente que je peux voir est d'avoir deux versions différentes de ReadBiosSpace et de réaffecter le approprié à ces 256 premiers emplacements chaque fois qu'il change.

Cela évite d'avoir à appeler l'opérateur ternaire chaque fois que l'on accède à l'un de ces emplacements.

+0

EnableBios ne change pas souvent du tout (en fait seulement les changements une fois), ce qui est une bonne idée, cela dit qu'il y a des zones de mémoire où les pointeurs sont susceptibles de changer fréquemment. – Fascia

1

En plus des autres réponses, vous pouvez utiliser ce ainsi:

for (i = 0xFF - 1; i--) { MRead[i] = ReadBiosSpace; }; 
+0

Eh bien les boucles for ne sont exécutées qu'une seule fois quand le script est chargé pour remplir les tableaux, mais c'est une syntaxe beaucoup plus propre donc je vais l'adopter! – Fascia

Questions connexes