Bonjour,

Depuis peu, un SDK est sorti pour pouvoir développer ses propres applications sur la Freebox ; le SDK est essentiellement basé sur un binding Javascript vers les Enlightment Fundation Libraries.

Le processeur de la Freebox étant globalement peu puissant (un MIPS à peu près équivalent à un Pentium 60MHz), l'exécution de code Javascript interprété par SpiderMonkey montre rapidement ses limites.

A titre d'exemple, j'ai codé un premier jet d'un mini moteur de physique (trivial) pour gérer les déplacements et collisions d'une dizaine boules de billard. Résultat: il n'arrive pas à gérer plus de 50 itérations par seconde.

C'est pourquoi je recherche de la documentation sur les bonnes pratiques à adopter quand on code en Javascript afin d'optimiser un maximum toutes les parties critiques de mon code. Le but serait de mieux savoir à priori quelles opérations sont 'lourdes' et lesquelles plus 'efficientes' (genre instanciation d'une 'classe' JS, accès à une donnée membre d'une 'instance' vs. accès à une variable globale, etc ...)

Toujours dans l'objectif d'optimiser faire mon petit moteur physique, j'ai pensé à éviter l'utilisation des calculs sur les nombres flottants car c'est un des domaines ou le MIPS est particulièrement mauvais. J'aimerais donc remplacer l'utilisation des nombres flottants par l'utilisation exclusive de nombres en 'fixed point' (*). Mais pour cela j'ai besoin de comprendre le fonctionnement interne des interpréteurs Javascript, notamment comment est stocké le contenu d'une variable (un flottant, un entier, ...) en mémoire. Quelqu'un aurait-il des pistes ?

Merci d'avance



(*) grosso modo, c'est stocker dans un mot de 32 bits (par exemple) un nombre décimal en disant que le premier bit est celui du signe ; les 16 suivants ceux de la partie entière et les 15 derniers ceux de la partie décimale. Ainsi, les calculs (addition, soustraction, multiplication, division) peuvent être faits uniquement grâce aux opérations de base sur des entiers (+,-,*,/) accompagnés d'opérations de décalage de bits (<<, >>, >>>).