Je suis assez d'accord avec sekaijin, ta librairie n'apporte pas grand chose de nouveau, et la compétition est déjà féroce dans le domaine. Mais ca reste un projet qui peux être très enrichissent.
J'ai regardé le script, et je te propose quelques optimisations
La fonction color est mal construire, plus généralement, quand une fonction à besoin d’appeler d'autres procédures qui lui sont propre le mieux est de créer un nouveau scope. Déclarer des fonctions dans une fonctions (autre celle qui sert au scope) peut poser des problèmes de performance, surtout sur les vieux navigateurs. Le remarque est valable pas que pour les fonctions en faite, mais plus globalement aux constantes (dans color l'objet dico des couleurs), et aux variable partagé par les procédures (toujours dans color, les fonctions spécifique de transformation pourraient partager en commun les variables r,g,b,a par exemple).
Un petit exemple
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
color : (function(){
var r,g,b,a;
var simple_colors = {};
function hslToRgb(){/*...*/}
return function color(){//pas de fonction anonyme, pour le debugage, et aussi pour eviter de passer le namespace lors de l'invocation
a=null;//pas tjrs d'alpha
//appel les procédure privé si besoin qui init r,g,b,a
return {r:r,g:g,b:b,a:a};
}
})() |
Toujours dans color, l'utilisation de simple_color est mauvaise. D'une la boucle n'a pas besoin de tester hasOwnProperty. C'est un objet simple hérité de Object, donc sans prototype public si on peux dire. De deux, et c'est le plus important, la boucle n'est pas nécessaire, autant utiliser l'algo de recherche du navigateur bien plus performant en testant direct l’existence de la propriété dans l'objet via un ( if(color_string.toLowerCase() in simple_colors) ... =
Encore dans color, color_defs et la boucle qui s'en suit n'apporte aucune automatisation. La procédure à effectué (teste du type et récupération des données) est statique, elle ne bougera jamais, donc autant écrire les choses sans passer par une boucle non? De plus la boucle n'est pas "breaker".
Toujours dans color, tu renvoies false, quand un paramètre d'une fonction n'est pas bon. C'est pas super en faite, même si c'est déjà moins important que le point du dessus, il faut, en principe, essayer de renvoyer toujours un même type. C'est une conception hérité des langage typé fort. Ca n'est pas nécessaire en js, mais ca permet d'avoir un code plus logique, et aussi permet une meilleurs compilation jit du navigateur et donc de meilleurs perf. Dans ton cas tu as deux options, soit renvoyer null, ou déclencher une erreur.
La fonction inArray, peux être optimisé en testant avant son initialisation l'existence de indexOf. Ca evite de faire le teste à chaque fois!
inArray: array.indexOf && flyjs.isFunction(array.indexOf) ? function inArray(){} : function inArray(){};
Mettre en variable car beaucoup utilisé, Object.prototype.toString
Un lien sympas pour trim
Faut éviter d'utiliser des fonctions d'itérations, comme each et autres. Niveau performance c'est très mauvais, et ça ne réduit pas grand chose sur la taille du code.
En tout cas, le code est bien écrit est facile à lire, ca semble assez bien structuré. Pour 17 piges, je trouve ça très prometteur, bravo, continue comme ca
Partager