Je suis nouveau sur jquery et j'exécute un script sur ma page d'accueil qui détermine le nombre de lignes dans un conteneur (c'est-à-dire div). Si le nombre de lignes est supérieur à 3 ou 4 lignes (selon que la classe div est "threeline" ou "fourline"), elle sera tronquée et ajoutera une ellipse. Cependant, ce script prend une éternité à s'exécuter alors je me demande pourquoi ou comment il peut être optimisé. J'ai essayé d'envelopper javascript/jquery, mais c'est vraiment une langue étrangère pour moi!Pourquoi le script jquery prend-il une éternité?
Quelqu'un peut-il s'il vous plaît jeter un oeil à ce script et laissez-moi savoir comment je peux le modifier pour le rendre plus rapide? Vérifie-t-il inutilement tous les éléments de la page?
Voici comment on l'appelle sur ma page php:
<div class="bubble left">
<div class="rounded">
<blockquote class="ellipsis fourline">
<h3><a href="http://www.xyz.com">This is the title</a></h3>
<p>This is the body of the quote; if the body plus title is more than fourlines, then the text will be truncated and an ellipsis will be added</p>
</blockquote>
</div>
<cite class="rounded">March 18, 2010</cite>
</div>
<script type="text/javascript" src="/scripts/js/jquery.ellipsis.js"></script>
<script type="text/javascript"> $(".ellipsis").ellipsis(); </script>
Ce fichier est le jquery.ellipsis.js:
(function($) {
$.fn.ellipsis = function()
{
return this.each(function()
{
var el = $(this);
if(el.css("overflow") == "hidden" && el.hasClass('fourline'))
{
var text = el.html();
var fourline = el.hasClass('fourline');
var t = $(this.cloneNode(true))
.hide()
.css('position', 'absolute')
.css('overflow', 'visible')
.width(fourline ? el.width() : 'auto')
.height(fourline ? 'auto' : el.height())
;
el.after(t);
function height() { return t.height() > el.height(); };
function width() { return t.width() > el.width(); };
var func = fourline ? height : width;
while (text.length > 0 && func())
{
text = text.substr(0, text.length - 1);
t.html(text + "…");
}
el.html(t.html());
t.remove();
} else if (el.css("overflow") == "hidden" && el.hasClass('threeline'))
{
var text = el.html();
var threeline = el.hasClass('threeline');
var t = $(this.cloneNode(true))
.hide()
.css('position', 'absolute')
.css('overflow', 'visible')
.width(threeline ? el.width() : 'auto')
.height(threeline ? 'auto' : el.height())
;
el.after(t);
function height() { return t.height() > el.height(); };
function width() { return t.width() > el.width(); };
var func = threeline ? height : width;
while (text.length > 0 && func())
{
text = text.substr(0, text.length - 1);
t.html(text + "…");
}
el.html(t.html());
t.remove();
}
});
};
})(jQuery);
Merci à l'avance, j'adore ce site!
Configuration Firebug et la console est activée et profileur, mais quand je recharger la page, rien n'apparaît. J'ai ajouté console.profile() et console.profileEnd() à mon code mais je n'ai toujours rien. Est-ce parce que je suis dans un environnement de développement et firebug vérifie la version live de ma page d'accueil? – user437157
Je ne pense même pas que vous devez insérer du code. Chargez votre page, ouvrez la console, activez le bouton "Persist", cliquez sur le profil. Le profileur est maintenant en cours d'exécution. Chargez votre page à nouveau. Cliquez sur le profil une deuxième fois pour l'éteindre. Vous devriez maintenant voir les résultats. –
Et oui, il ne fera que profiler le code sur la page dans le navigateur, donc vous devez vous assurer que le navigateur est en train de charger une copie actuelle de votre script. Vous pouvez combiner firebug avec la barre d'outils du développeur Web pour Firefox et désactiver le cache du navigateur via ses options de cache pour vous assurer que vous avez toujours affaire à des pages/données en direct. –