Bonjour,
J'ai des questions sur un problème qui me laisse perplexe.
Je souhaite me faire un ptit benchmark pour tester la rapidité de certaines instruction jquery. pour ce faire j'ai mis en place ce code:
le but du eval état de pouvoir ecrire directement le code a tester dans un formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 _timer = (function () { var _start, _stop; return { start : function () { _start = new Date().getTime(); }, stop : function () { _stop = new Date().getTime(); }, report : function () { return _stop - _start; }, reset : function () { _stop = _start = 0; } }; })(); // ce code à été copier, mais je n'ai plus la source dsl:/ var iter = 5000; var e1 = "$('#toto').find('p').toggleClass('pedro')"; var e2 = "$('#toto p').toggleClass('pedro')"; var un = eval("_timer.reset(); _timer.start(); for(i=0 ; i<"+iter+"; i++) {"+e1+" } _timer.stop();_timer.report();"); var deux = eval("_timer.reset(); _timer.start(); for(i=0 ; i<"+iter+"; i++) {"+e2+" } _timer.stop();_timer.report();");
Voila comme j'ai pensé mon code. Pour que le eval n'impacte pas sur le test, j'ai mis le timer dans le eval aussi.
Ce code fonctionne tres bien.
A ce stade je désire utiliser un evenement click sur un bouton pour lancer le test. le code devient:
Tout simplement, pourtant, il y a un soucis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 //------------------------------------------------------------------------------------------------------------------------------------------------------------ $(document).ready(function() { _timer = (function () { var _start, _stop; return { start : function () { _start = new Date().getTime(); }, stop : function () { _stop = new Date().getTime(); }, report : function () { return _stop - _start; }, reset : function () { _stop = _start = 0; } }; })(); $("#submit").click(function(){ var iter = 5000; var e1 = "$('#toto').find('p').toggleClass('pedro')"; var e2 = "$('#toto p').toggleClass('pedro')"; var un = eval("_timer.reset(); _timer.start(); for(i=0 ; i<"+iter+"; i++) {"+e1+" } _timer.stop();_timer.report();"); var deux = eval("_timer.reset(); _timer.start(); for(i=0 ; i<"+iter+"; i++) {"+e2+" } _timer.stop();_timer.report();"); }); });
Dans le premier test e1 = 60ms et e2 = 150ms. dans le cas 2, on monte a e1 = 520ms et e2 = 535ms. Pourquoi y a t'il une augmentation du temps alors que le timer se déclenche dans l'événement.
Et même pourquoi l'écart se résorbe ? même si le temps d'éxecution de 5000 itérations prends plus de temps, l'écart devrait être le même.
Je fais appel au personne connaissant le fonctionnement interne de jquery. je vous remercie pour vos réponse à ces 2 questions.
Partager