Skip to main content

Home/ Groups/ Web Performance
anonymous

Efficiently Rendering CSS | CSS-Tricks - 16 views

  •  
    Ne pas oublier la fin : "I think the lesson here is not to sacrifice semantics or maintainability for efficient CSS"
  • ...10 more comments...
  •  
    je suis pas d'accord avec tout. par exemple : "Don't [tag qualify] with class names either" => j'avais justement lu le contraire. Qu'un "a.toto" était plus efficace qu'un ".toto". Mais ça dépend aussi peut-être des moteurs... D'ailleurs, je ne comprends pas pourquoi les moteurs ne cherchent pas d'abord le bout le plus discriminant dans le sélecteur. Ça arrive souvent de commencer un sélecteur par un sélecteur d'ID, et il me semble que ce serait plus rapide que de commencer par lui, plutôt que par le tag qui se trouve à la fin (ex: #menu a { }).
  •  
    Oui si .toto est présent sur le même type de tag à savoir "ul" ..inutile d'écrire ul.toto. " .toto" suffit et est apparement plus rapide à interpréter. C'est le cas pour les nouveau parseurs DOM il me semble (firefox). Après savoir si tous la navigateurs se comportent de la même façon sur ce point, je l'ignore.
  •  
    mais par exemple, dans un jQuery, c'est le contraire, semble-t-il. Si la perf de querySelectorAll est la même que celle utilisée pour appliquer les CSS, on doit pouvoir tester avec jsperf.com.
  •  
    "Use class selectors instead of descendant selectors." http://code.google.com/intl/fr/speed/page-speed/docs/rendering.html "It's clear that CSS selectors with a key selector that matches many elements can noticeably slow down web pages." http://www.stevesouders.com/blog/2009/06/18/simplifying-css-selectors/
  •  
    Oui, c'est l'opposé sur jquery, parce que jquery ne peut pas utiliser les index du navigateur efficacement. Ceci dit ça peut changer à l'avenir pour jquery au fur et à mesure qu'ils pourront utiliser les API querySelector et ce genre de choses. Deux règles : - finir de préférence sur le sélecteur #id, ou .classe, éventuellement un nom de balise (mais si possible pas un trop fréquent), pas de sélecteurs plus complexes (attribut seul, pseudo sélecteur, *) - éviter de surspécifier le sélecteur à gauche
  •  
    "finir de préférence sur le sélecteur #id" : si on peut faire ça, autant le mettre directement tout seul, non ?
  •  
    Non, car ton élément #id peut avoir un style différent selon le contexte
  •  
    Sachant que la plupart (tous) des navigateurs lisent les règles CSS de droite à gauche, il vaut mieux éviter de spécifier le tagName. Dans des librairies comme jQuery le problème est un peu différent même si jQuery (sizzle) lit aussi de la droite vers la gauche. Sur les navigateurs qui n'implémentent pas certaines fonctionnalités comme getElementsByClassName (IE6-8), sélectionner $('.maclasse') sera plus long que $('a.maclasse'). Le mieux étant de faire $('.maclasse', noeudDomDeDepart) si on sait a peu près où sont les classes pour éviter de traverser tout le DOM. Autre différence $('#mydiv span');sera plus rapide que $('span'); Alors qu'on pourrait croire que jQuery lit toujours de la droite vers la gauche, il effectuera une exception ici et sélectionnera d'abord $('#mydiv') puis regardera les "span". (http://forum.jquery.com/topic/about-selectors-right-to-left#14737000000472293) Enfin si on travaille sur des noeuds qui ne sont pas encore dans le DOM (pas de append()) , les méthodes employées pour parcourir le noeud seront de simples boucles qui regardent tous les noeuds, pas d'accès à getElementsByClasseName ni getElementbyId. Là dans ce cas il vaut mieux spécifier carrément le tagName + la classe (voire l'ID) ça évite de faire des tours de boucle pour rien. ça reste des cas franchement spécifiques qui ne devraient pas exister, on ne parcourt pas des noeuds html qui ne sont pas dans le DOM dans une application classique et on évite de faire des sélections brutes de $('.classe') si on connait a peu près la structure DOM. Edit: jquery (sizzle) utilise querySelectorAll quand disponible, sinon des méthodes perso combinées avec getElementbyId, className, tagname. http://www.neeraj.name/2010/02/15/how-jquery-selects-elements-using-sizzle.html
  •  
    Comme j'aime bien embêter : Jquery et le natif utilisent les algos aux propriétés presque opposées dans certains cas. Comme le jquery peut renvoyer vers le natif, si vous cherchez trop la bête, vous irez forcément dans le mur sur certains navigateurs. Bref, faites simple. Un "#xxx .yyy" sera à peu près acceptable sur jquery comme sur le natif pour peu qu'on n'utilise pas trop souvent la classe en dehors de l'arbre #xxx. C'est peut être le compromis qui passera le mieux partout (simple pour le navigateur parce qu'il utilise son index pour trouver le .yyy, que remonter au #xxx sera rapide, et qu'il ne remontera pas trop souvent inutilement ; et simple pour jquery parce que grâce à #xxx il peut isoler un arbre DOM restreint sur lequel lancer sa recherche)
  •  
    Comme cette discussion est oriente vers le js: Des selecteurs optimisés c'est bien, un bon design d'application c'est mieux. selection d'une collection - binding d'une fonction sur ces éléments ---> anti-pattern. Event Delegation ----> pattern (lors de l initialisation) selection d'une collection - modification de propriétés css ----> anti-pattern insertion d'html préstylé (classes) ---> Pattern
  •  
    @Vincent Juste pour pinailler : > Le mieux étant de faire $('.maclasse', noeudDomDeDepart) Je dirais le mieux serait même $('noeudDomDeDepart').find('.maclass') Source : http://jsperf.com/jquery-selectors-context/2
  •  
    sans les tirets alors :-) À la base, je trouve ça assez fou que $(XXX).find(YYY) soit tellement plus rapide que $(YYY, XXX). Mais quand on regarde le code on voit qu'il y a beaucoup de "if" dans l'init de jQuery et que les cas les plus courants sont placés en premier. Le cas du contexte est traité à la toute fin, ça explique la différence.
Oncle Tom

Microjs: Fantastic Micro-Frameworks and Micro-Libraries for Fun and Profit! - 7 views

  •  
    Petite appli en ligne pour générer son propre framework Javascript, basé sur votre propre sélection de librairie, de JSON2 à Spine en passant par Ender. Les tailles sont indiquées et les librairies choisies le sont en particulier pour leur robustesse et faible empreinte mémoire.
  •  
    J'ai assisté à la présentation de Zepto à la JSConf Ce micro framework permet d'avoir une API compatible avec jQuery, mais utilisant directement les implémentations native de webkit. Il est destiné à fonctionner sur les plateformes iOS et Android avec un poids de 4 Kb contre 31 Kb pour jQuery
  •  
    Excellent, merci Alexandre pour cette précision. Comptent-ils pousser la compatibilité vers d'autres navigateurs ? En tous cas, combiné avec yepnope (pour le polyfill), ça peut être super pour construire ses dépendances à poids mini.
Éric D.

Google Code Blog: Instant Previews: Under the hood - 6 views

  •  
    - JSONP au lieu de XHR pour plus de parallélisme - data uris pour les images
  •  
    Vraiment très bon. Je note le coup du setTimeout pour l'insertion du script.
Mehdi Kabab

Trimage (lossless) image compressor - 8 views

  •  
    Interface visuelle (GUI) permettant de compresser plusieurs images, PNG et JPG. Ce programme, utilisable également en CLI, se base sur optipng, advpng et jpegoptim.
  • ...4 more comments...
  •  
    Outils peu convaincant. L'outil conserve toujours le fichier compressé même si ce dernier est supérieur en taille.
  •  
    Dommage :-/ ça automatise une partie du taf déjà.
  •  
    Mouai, Eric n'a probablement pas fait de test, mais de mon côté mieux vaut utiliser à la main les outils "optipng, pngout, deflopt avec options" on obtient de bien meilleurs résultats. L'intérêt de l'outil réside dans l'interface à la limite
  •  
    Non, je n'ai pas fait de test. Par contre j'ai vu que la correction du bug soulevé par Samuel est prévue. Après attention, on peut toujours obtenir de meilleurs résultats à la main avec ce genre d'outils, mais parfois au prix d'un temps cpu démesuré. Le propre de ces outils c'est de choisir des valeurs raisonnables et optimale pour le compromis efficacité/temps. Pour moi l'intérêt c'est surtout que c'est "déjà fait", donc pas besoin de chercher les bons paramètres pour le compromis optimal, de faire appel à image magik pour savoir quel outil utiliser en fonction du format et du nombre de couleurs, et de scripter tout ça soi même : c'est déjà fait. J'apprécie aussi qu'ils aient prévu une gui *et* une cli pour le même outil. C'est assez sympa.
  •  
    Il y a aussi http://phpied.com/files/yuicd/ a suivre, déjà essayé pour recompresser rapidement des png et le résultat est très bon à chaque fois.
  •  
    A cross-platform tool for losslessly optimizing PNG and JPG files. Inspired by ImageOptim.
Éric D.

Don't let jQuery's $(document).ready() slow you down | Encosia - 4 views

  •  
    à voir quand même à quel point ça ne lance pas un timer qui occupe le cpu navigateur inutilement
  •  
    A noter que si les js sont insérés en bas de page, le gain sera moindre puisque le dom sera chargé. Remarque, utiliser $(document).ready() en bas de page c'est peut-être un peu enfoncer des portes ouvertes.
  •  
    Utiliser trop souvent $(document).ready sur VOTRE code c'est aussi laisser tous les autres scripts (pubilicités/widgets) s'exécuter avant vous. Ainsi ils peuvent créer autant d'éléments et occuper des requêtes navigateur pour rien. Trop souvent il est automatiquement conseillé d'utiliser $(document).ready (genre dans les guidelines pour débutant), sauf que la plupart des widgets (et surtout des publicités) se moquent de ces recommandations. Toujours maitriser l'ordre de téléchargement des éléments de votre page avant de décider d'utiliser ou non $(document).ready pour vos initialisations.
Éric D.

Front-endPerformanceImprovementsatYouTube.pdf (Objet application/pdf) - 4 views

  •  
    leur système de centralisation des "widgets" avec chargement non bloquant à la demande et récupération + routage des events sur la page est intéressant. Ca illustre pas mal la tendance de tous les sites Web à se transformer en vraie appli Web
anonymous

11 Ways to Increase Your jQuery Performance - 7 views

  •  
    Je retiens surtout l'importance des selecteurs dans les perf jQuery : toujours utiliser un #id en premier, préfixer les classes par un balise si possible balise.maClasse ...
Éric D.

MaxCDN | Content Delivery Network | CDN - 3 views

shared by Éric D. on 21 Oct 10 - Cached
Vincent Voyer liked it
  •  
    Certes le discours est très commercial "intégration en 5 minutes etc.." Mais c'est la vérité ! Vous conservez toute votre architecture normale, vous changez les urls d'appel pour les pages de prod, et voilà ... Il s'occupe ensuite de récupérer les fichiers, à la demande. Amazing !
  • ...2 more comments...
  •  
    Pas de présence en France par contre, dommage
  •  
    c'est cool hein, mais c'est pas non plus une révolution, yen a d'autres des CDN qui proposent l'Origin Pull (ce qui est super d'ailleurs comme truc) :)
  •  
    Ah et bien je veux bien que tu me passe une liste si tu as .. Moi je ne connais que celui ci
  •  
    Je connais au moins PantherExpress (enfin, CDNetworks maintenant) parce-que c'est ce que libération utilise, mais il yen a d'autres, je préfère pas donner de nom par peur de me gourrer vu que les offres ont tendance à changer (si il ya un truc chiant avec les CDN, c'est bien l'impossibilité de comparer leurs tarifs vu le milliard d'offres différentes et services proposés autour), mais c'est un sujet récurrent sur stackoverflow et compagnie, donc une petite recherche sur "cdn origin pull" devrait t'en donner un paquet
Éric D.

Setting up your own page test systems? Beware of your CPU and memory limitations. - Web... - 7 views

  •  
    à propos de l'influence de l'enregistrement vidéo sur les tests WebPageTest : http://blog.patrickmeenan.com/2010/10/performance-measurement-consistency-and.html en résumé : ça dépend de la machine utilisée !
Éric D.

drop.io - webperf - 7 views

  •  
    Le service drop.io va être fermé le 15 décembre ; j'espère que ce qui est dessus n'est pas important ;-(
Oncle Tom

Pushing Beyond Gzipping - 7 views

  •  
    Une bonne solution pour s'occuper du cas des 15% de personnes ne recevant pas de contenu compressé, pour cause de proxy ou d'entête mal formée.
  •  
    Attention qu'on risque de casser le rendu pour certains quand même. Je préfère l'optique de http://www.stevesouders.com/blog/2010/07/12/velocity-forcing-gzip-compression/ et http://velocityconf.com/velocity2010/public/schedule/detail/14334 Il s'agit de faire passer un petit js gzipé. S'il s'exécute correctement c'est que le navigateur sait lire gzip. On met alors un cookie et c'est la présence de ce cookie qui permet de forcer gzip côté serveur. La conséquence c'est que ces 15% n'auront pas gzip lors de leur premier accès, mais en retour on sait qu'on n'activera pas gzip s'ils ne le supportent vraiment pas
Samuel Martin

Javascript Is Awesome: Faster than jQuery(document).ready() - Wait Until Exists - 7 views

  •  
    Je viens de commenter là bas pour dire que ça allait ralentir toutes les manipulations DOM après. Donc oui tu gagnes en "read", mais tu perds énormément en "write". J'avais fait un testcase pour Sizzle à l'époque de sa sortie et ils ont désactivé les DOMNodeInserted après ça. Du coup, je pense qu'on doit retirer ce lien de cette liste.
  •  
    Ou garder le lien dans la liste, avec ton commentaire pour expliquer le problème, ça permet de savoir que c'est une fausse bonne idée.
Éric D.

jQuery Event Delegation Improves Performance - 7 views

  •  
    Je suis sceptique quant à ce qui est exposé là : la doc jQuery (http://api.jquery.com/delegate/) indique que delegate est équivalent à faire un "live" sur chaque élément. Le code de jQuery va également dans ce sens : https://github.com/jquery/jquery/blob/master/src/event.js J'aimerais bien avoir des résultats de test du coup.
  • ...1 more comment...
  •  
    Je n'ai pas vérifié comment traire ça jQuery spécifiquement, mais le procédé est habituel. Au lieu d'enregistrer un événement pour 10 éléments dans zone géographique réduite un à un, on l'enregistrer sur le parent et c'est le javascript qui fait l'éventuelle répartition ensuite. Ça peut effectivement avoir un impact sur les performances. Après si jQuery fait effectivement une simple boucle en interne pour enregistrer 10 fois l'évenement, ça n'amène à rien. Ce serait étrange tout de même
  •  
    Au temps pour moi, en allant plus loin dans l'analyse, il semble que jQuery ne place qu'un listener sur l'élément parent, ce qui parait logique ! J'étais d'accord avec le principe, mais c'est la doc de jQuery qui m'a mis le doute. En tout cas ça n'empêche pas que j'aimerais avoir le résultat d'un benchmark :).
Éric D.

The Surprising Effect of Distance on Download Speed - HttpWatch Blog - 6 views

  •  
    à cause de la manière dont TCP marche, la distance augmente la latence et réduit le débit maximum
  • ...1 more comment...
  •  
    voir aussi http://coherentnoise.ca/blog/2008/08/response-to-the-surprising-effect-of-distance-on-download-speed/ une réponse à cet article :-) Ceci dit, j'ai l'impression ça n'a que peu d'intérêt pour la performance des sites web (sauf peut-être les gros Flash).
  •  
    malheureusement cet article très technique (honnêtement je comprends vaguement le concept, mais je décroche) vient sans chiffres ou tests, ses contre-arguments restent donc très théoriques, ce qui ne veut pas dire qu'ils sont faux, mais surtout qu'on n'a aucune idée de la manière dont ça influe les sites
  •  
    Il dit surtout que le calcul du 1er article est trop simpliste. Il n'empêche qu'empiriquement, on a tous constaté qu'en téléchargeant une ISO Debian à l'autre bout du monde, ça va moins vite que si on la prend chez OVH.
anonymous

jQuery LazyLoad Advertising Plugin - Web2ajaX - 6 views

  •  
    rien d'exceptionnel pour ceux qui l'ont déjà codé à la main, mais ils disent avoir une solution pour les pubs avec document.write(), à tester donc ... pour reproduire leur technique :)
  • ...2 more comments...
  •  
    jQuery LazyLoad Ad
  •  
    ça à l'air bien sympa, j'ai testé sur leur site ça fonctionne bien et avec plusieurs providers. LE truc intéressant c'est que comme c'est du "Lazy", ça peut apparaître au moment ou tu scroll la page et donc attirer l'oeil plus rapidement... ? Par contre, le nombre d'afichages de publicités avec cette technique doit baisser énormément car une pub en bas du site ne serait pas affichée si non visible. Comment justifier cette baisse auprès des commerciaux etc? Est-ce qu'un affichage en moins peut impliquer moins d'argent pour le site en question ?
  •  
    En général, je scrolle assez vite, et je ne supporte pas le lazyload des images. Donc pour les pubs, ça risque de m'énerver encore plus... ;-) Pour ce qui est du revenu à l'affichage, clair que ça le fait diminuer. Il faut privilégier le revenu au clic...
  •  
    J'aime le lazyload des images s'il est immédiat, sans fade à la noix. Je pense que les lazyload lents ne sont dû qu'à de mauvais plugins/méthodes.
1 - 20 Next › Last »
Showing 20 items per page