par
Naroth » 03 août 2016, 12:52
Bonjour,
J'ai trouvé la source du problème : javaScript (Jquery dans mon cas)
En enlevant tous les scripts Jquery le temps de chargement sous Chrome se trouve sous la barre des 5 secondes
Les scripts en question ne servant que dans la barre de menu.
Après recherche sur les moteurs de Chrome et de Mozilla je suis tombé sur un mini-Benchmark, mettant en lumière la différence de temps entre le selecteur par id ou par class
Le Benchmark ci-dessous lance la recherche par selecteur 20000 fois avant de donner le temps d’exécution de cette recherche
Code : Tout sélectionner
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
startTime = new Date().getTime();
for (i = 0; i < 20000; i++)
{
s = $(".someclass");
}
$("#class").html(elapsedMilliseconds(startTime));
startTime = new Date().getTime();
for (i = 0; i < 20000; i++)
{
s = $("#somecontainer");
}
$("#id").html(elapsedMilliseconds(startTime));
});
function elapsedMilliseconds(startTime)
{
var n = new Date();
var s = n.getTime();
var diff = s - startTime;
return diff;
}
</script>
</head>
<body>
<h1>jQuery Selector Performance: Context vs No Context</h1>
<h2>$(".someclass")</h2>
<span id="class">---</span> ms<br /><br />
<h2>$("#somecontainer")</h2>
<span id="id">---</span> ms<br /><br />
<hr />
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<div id="somecontainer">
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="someclass">someclass</p>
</div>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
<p class="a">a</p>
<p class="b">b</p>
<p class="c">c</p>
</body>
</html>
Mes résultats :
Firefox
$(".someclass") - 79 ms
$("#somecontainer") - 32 ms
Chrome
$(".someclass") - 115 ms
$("#somecontainer") - 15 ms
1 - Le sélecteur par ID est beaucoup plus rapide car le moteur s'arrête dès qu'il a trouvé l'ID
2 - Le sélecteur par class lui va jusqu’à la fin du fichier pour trouver toutes les classes correspondantes
Cause :
Affichant plus de 20K lignes avec plusieurs classes la quantité de code à analyser pour les moteurs javascripts est relativement grande.
En combinant la taille du code plus le fait que Chrome soit plus lent dans la recherche par class que Firefox c'est sans surprise que Chrome paraît plus lent.
Solution :
J'ai donc choisis de supprimer tous le JS sur cette page. En faisant ainsi le temps de chargement est sous la barre des 5 secondes