SL - Forum scripts

[Wiki] Guide : Best Practice LSL

Répondre
Partager Rechercher
Ce message est en mode wiki. Tous les comptes de plus de 30 jours avec plus de 30 messages peuvent le modifier.
La question d'optimiser les scripts pour qu'ils soient plus rapide et génère moins de lag est quelque chose qui est difficile d'expliquer de manière exhaustive.

Je propose donc que chacun y pose sa pierre au fur et à mesure que l'on rencontre des cas, de façon à ce que l'on fasse tous des script plus performant.





Valeurs

même si la partie décimale n'est pas explicitement nécéssaire quand on assigne une valeur, on obtient de meilleurs performances en les mettant au complet, surtout si cette valeur est directement passée en paramètre ou utilisée dans une exepression.
exemple:
Code:
vector vec=llGetPos()+<1.0,20.0,50.0>;
rotation rot=llGetRot()+<1.0,2.0,5.0,0.1>;
float fl=llFrand(10.0);

Nomenclature

Les variables doivent respecter le "camel case" c'est à dire une majuscule à chaque partie de la variable.
Cela permet une meilleur lisibilité
Exemple:
Code:
integer MyChannel=10;
integer MaVariableAvecUnTresGrandNom=1;
Les variables globales (celles definies à l'exterieur des states) doivent commencer par un g
exemple:
Code:
string gMonMessage="Hello World.";
    default
    {
        state_entry()
        {
            llSay(0, gMonMessage);
        }
    }
les constantes (valeur qu ne sera pas modifiée) doivent être nommées en majuscule
exemple:
Code:
string MESSAGE="Hello World.";
    default
    {
        state_entry()
        {
            llSay(0, MESSAGE);
        }
    }
Dernières modifications :
(Voir) 16/5/2008 12:14:52 : Magic Cat (orthographe)
(Voir) (Comparer)16/5/2008 12:12:05 : Magic Cat (présentation)
(Voir) (Comparer)16/5/2008 12:05:25 : Magic Cat (présentation)
Je pense que le meilleur lien vers des infos sur ce sujet reste celui-ci:

http://rpgstats.com/wiki/index.php?title=Lag

(Bon ok c'est en anglais...)

Les pieges de base dans lesquels je suis tombee moi au debut:
- Utilisation inconsideree de llSetTimerEvent, avec une occurence de l'evenement de timer bien trop elevee
- Meme commentaire sur llSensorRepeat

Mae
Citation :
Publié par Pi78
Dans ce cas précis, j'ai bien peur que la conversion en float se fasse au moment de la compilation, et donc l'exécution ne devrait pas en souffrir... Non ?
Je veux pas me mouiller (normal pour un chat) mais je crois que le lsl n'est pas du complier, mais de l'interprété. Donc le code n'est pas corrigé
Hmmm dans ma comprehension, ce n'est pas le cas. On a tout d'abord une phase de "pre compilation" au cours de laquelle le script lsl est converti en lso, une sorte de "byte code intermediaire"

De maniere analogue a Java ou .net, une premiere etape de compilation a lieu, suivie d'une interpretation a l'execution du byte code.
Citation :
Publié par Magic Cat
Je veux pas me mouiller (normal pour un chat) mais je crois que le lsl n'est pas du complier, mais de l'interprété. Donc le code n'est pas corrigé
Il doit quand même y avoir une sorte de pseudo-compilation (genre Java), car quand tu écris un script sous SL et que tu le sauvegardes, il te dit bien qu'il compile avant de faire le save
Quelque informations ici aussi sur l'efficacité des scripts :
http://wiki.secondlife.com/wiki/LSL_Script_Efficiency

et d'autres infos un peu dans le même ton là :
http://wiki.secondlife.com/wiki/LSL_Script_Efficiency

En reprenant le script proposé dans le premier lien j'ai testé les deux cas suivants :

llSetScale(<1, 1, 1>)

Citation :
[10:52] Object: The function in the loop took a total of 0.600000 milliseconds.
[10:53] Object: 15560
[10:53] Object: The function in the loop took a total of 0.574400 milliseconds.
[10:53] Object: 15560
[10:53] Object: The function in the loop took a total of 0.590000 milliseconds.
[10:53] Object: 15560
[10:53] Object: The function in the loop took a total of 0.571600 milliseconds.
et

llSetScale(<1.0, 1.0, 1.0>)


Citation :
[10:54] Object: 15566
[10:54] Object: The function in the loop took a total of 0.489200 milliseconds.
[10:54] Object: 15566
[10:54] Object: The function in the loop took a total of 0.463600 milliseconds.
[10:54] Object: 15566
[10:54] Object: The function in the loop took a total of 0.331200 milliseconds.
[10:54] Object: 15566
[10:55] Object: The function in the loop took a total of 0.463200 milliseconds.
même avec la variation lors de chaque test (fait sur une sim normal) on a un différence de temps d'exécution entre les deux écritures.
Ce que tu dit Magic est valable pour toute les fonctions qui attendent un float en paramétre, comme llSleep ou llSetTimerEvent : il faut mettre le point décimal en plus.Une bonne pratique pour les boucles for : ne pas mettre une fonction dans le test, ou elle sera exécuté à chaque itération; exemple pour parcourir une liste:for (i ; i < llGetListLenght(maliste) ; i++) n'est pas à faire; il faut faire :integer nb = llGetListLenght(maliste) ;for (i; i
Effectivement le LSL n'est pas compilé en langage machine mais dans un bytecode du style de celui de java. Une machine virtuelle est chargé de l'exécuter.

En ce qui concerne l'optimisation de l'écriture des scripts la donne va être un peu changée avec l'arrivée de mono :

http://wiki.secondlife.com:80/wiki/Mono

Certaines SIM sont déjà sous cette plateforme et on peut y tester nos scripts. Les tests montrent un gain en vitesse de l'ordre de 200. D'autre part la mémoire attribuée à chaque script va passer de 16KO à 64 KO.

Ca ne veut évidemment pas dire qu'il ne faudra plus s'inquiéter de l'optimisation des scripts mais on aura plus de marge de manoeuvre. Par contre on ne bénéficiera pas d'un langage évolué comme on aurait pu l'espérer avec l'arrivée de Mono. On va en rester au LSL et sa rusticité fonctionnelle. Dommage
Hello hello !


1 p'tite question d'ignorant vite fais après je vous laisse reparler votre langue obscure :

-Mono aura-t-il un impact significatif sur les performances des sims (alléger le travail des CPU niveau calcul des scripts pour par exemple laisser plus de temps machine à la gestion des AV et retarder le lag).Je pense que oui sinon quoi d'autre?

Ah et aussi ,quand Mono fera son entrée dans la grid public? (j'ai l'impression que son impact sera bien plus "visible" que havok4 non?( qui au passage m'a détraqué pas mal de choses désormais inutilisable )

Merci pour vos éclaircissement



(PS:mmmm je crois que je me suis emballé :il faudra que les scripts soient compilés pour mono ,donc tous les anciens scripts boufferont autant de CPU?Je me trompe?)
Citation :
Publié par Lhoreena
Quelque informations ici aussi sur l'efficacité des scripts :
http://wiki.secondlife.com/wiki/LSL_Script_Efficiency

et d'autres infos un peu dans le même ton là :
http://wiki.secondlife.com/wiki/LSL_Script_Efficiency

Merci Lhoreena pour ces liens très intéressants... Tiens, au passage j'y ai lu un bon truc à savoir :
le a++ met 40% plus de temps à s'exécuter que le ++a
Etonnant, non ?
Bon ca part un peu en vrille tout ca
Merci Lhoreena d'avoir fait le test, ca évite toutes discussion.

J'aurais bien aimé que tout le monde mettes des petits trucs
Je comptais pas faire un post à débat sur comment fonctionne le LSL et tout ca
Un fil sur le sujet pourrait être interessant, c'est certain.

Mais regroupons ici l'essentiel, comment bien faire...
Ca transforme le sujet en un wiki, et ensuite on met les infos utiles dans le message de départ du fil et youhou !


(non, je n'ai pas lu de sujet parlant de lsl, non non non, jamais)
Citation :
Publié par Magic Cat
J'y ai bien pensé mais je suis pas modo

J'ai d'ailleurs fais une demande à ma modo prèférée et elle me boude.... hhaaa les femmes...
Désolé, elle était occupée pendant deux jours à changer des textures de sims .

[Passage en wiki et mis en persistant.].
Une pratique hélas assez rare : avant de commencer à coder, créer une structure avec des commentaires, puis placer le code après ! Personnellement, ça m'aide beaucoup

// variables globales
...

// Routine de calcul xxx
...
// Routine de conversion yyy
...

// C'est parti !
...
etc.
Pas faux d'ailleurs je fais comme ca ^^

Je me pose la question, quand ceci il va se passer ceci faudra que.
et là du coup je balance tout les event dont j'aurai besoin sans code dedans.

Mais les best practice c'est pas une exclue pour les pro
C'est pour apprendre à coder bien comme il faut, dans les règles de l'art

Je te laisse l'honneur de le rajouter dans la wiki
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés