7
votes

Est-ce que le dernier sélecteur enfant est mauvais pour la performance?

J'utilise : Sélecteur Last-enfant Beaucoup de fois, principalement lors de l'utilisation de Base-Bottom dans une liste où j'utilise bordure: aucun; Pour le dernier enfant ou lors de l'utilisation de marges. Donc, ma question est, c'est le : dernier-enfant sélecteur mauvais d'un point de vue de la performance?

Aussi j'ai entendu dire qu'il a été supprimé de la spécification CSS2 car utiliser : premier enfant est facile pour le navigateur de détecter, mais pour détecter : dernier enfant Il faut faire boucle.


8 commentaires

Si : Last-Enfant n'est nécessaire que pour supprimer la bordure inférieure du dernier enfant de la liste, vous pouvez ajouter la bordure supérieure et le supprimer de d'abord: enfant . Bien sûr, cela pourrait ne pas répondre à vos besoins.


Avez-vous déjà lu ceci? snook.ca/archives/html_and_css/csss-parent-selectors


@ T.Niese: CSS4 introduira probablement le sélecteur parent: Le dernier enfant est également en spécification: W3. org / tr / sélectors4 (mais bien sûr, les implémentations peuvent avoir des problèmes de performance que l'article affiche)


@buli Eh bien, c'est plus sur la partie Pourquoi c'est-à-dire que c.-à-d. Atteignez si longtemps pour obtenir: la dernière pension de l'enfant


@ T.Niese je parlais en général :)


@ M.ALien moi aussi. Il existe également une information sur: Firefox traite le dernier élément chargé comme le dernier élément jusqu'à ce qu'il obtienne une nouvelle. dans Safari, Chrome et Opera [...] Ces navigateurs ne font pas Traitez n'importe quel élément comme le dernier élément jusqu'à la fermeture de l'élément parent. Just pensait que cette observation pourrait provenir d'intérêt, pourquoi il aurait pu être préoccupé par la mauvaise performance. Quoi qu'il en soit, je ne pense pas que ce soit un problème réel, car si vous regardez les pages dynamiques avec où JS crée et retire l'élément encore et encore. Je ne m'attendrais pas à ce que : dernier enfant serait le problème .


@ T.Niese qui était un fait agréable, avez-vous eu un lien pour un article qui explique cela?


@ M.ALien Ceci est du lien de mon premier commentaire (en vertu de la section Pourquoi c'est-à-dire que c'est-à-dire que c.-à-d. Atteindre si longtemps pour obtenir: la dernière main d'enfant Le problème est expliqué.) Dans la section suivante, sont les parties que j'ai citées. .


3 Réponses :


-1
votes

Je crois que c'est toujours le moyen le plus simple et basse performance d'obtenir votre dernier enfant. Par cela, je veux dire, tous les autres moyens d'obtenir le dernier enfant seront pires pour la performance, car il n'aura pas de travail effectué par la communauté W3C avant.


4 commentaires

Non, mais comme il s'agit d'une fonctionnalité de la spécification et que le W3C en a fait un sélecteur entièrement documenté, nous ne pouvons que supposer qu'ils travaillaient dessus.


Les spécifications et la mise en œuvre sont deux choses différentes. Peu importe que le sélecteur fait officiellement partie de la spécification CSS ou non. Il suffit de prétendre qu'il n'y a pas de problèmes car un groupe de personnes pensait à ce que devrait n'est pas un argument très fort.


Le groupe de personnes en question est celui qui définit à peu près toutes les règles de programmation Internet et certains d'entre eux sont ceux qui conçoivent les navigateurs. Je crois que s'ils ont fait le choix de mettre en œuvre le dernier enfant tel qu'il est, il doit y avoir une raison car il est également leur travail de lire ce CSS après, dans leurs navigateurs


@Felix KLING: Ils sont étroitement liés de toute façon - Spécifications Drop ou diffèrent des fonctionnalités s'il y a trop peu d'implémentations interopérables, ce qui aurait été ce qui est arrivé ici avec : dernier enfant . Cela dit, votre dernière déclaration est toujours vraie - surtout quand il n'y a pas de références à sauvegarder de telles affirmations.



13
votes

S'il a été différé de CSS2 pour des problèmes de performance, mais réintroduit dans Selectors 3, je soupçonne que c'est parce que la performance n'est plus un problème tel qu'il était précédemment.

N'oubliez pas que : dernier enfant est le définitif et seul moyen de sélectionner le dernier enfant d'un parent (en plus de : Nth-last-enfant (1) , évidemment). Si les responsables de la navigation n'ont plus de problèmes de performance, nous ne devons ni les auteurs.

La seule raison impérieuse que je puisse penser pour remplacer un style frontière avec : premier enfant par opposition à : dernier enfant est de permettre la compatibilité avec IE7 et IE8 . Si cela augmente la performance, laissez cela être un effet secondaire. Si vous ne BESOIN IE7 et IE8, vous ne devriez pas vous sentir obligé d'utiliser : premier enfant sur : dernier enfant . Même si la performance du navigateur est absolument critique, vous devez vous en résoudre la bonne manière en testant et en comparifiant, non par optimisation prématurée.


1 commentaires

Si vous avez le contrôle sur le rendu de la page sur le serveur, alors dernier enfant n'est pas le seul moyen de sélectionner le dernier élément enfant d'un autre élément. Vous pouvez ajouter une classe et sélectionnez-la à l'aide de cela.



3
votes

En général, les sélecteurs de base CSS fonctionnent assez bien que la plupart d'entre nous ne devraient pas être inquiets de les utiliser. Oui, certains d'entre eux font pire que d'autres, mais même les pires performants sont peu susceptibles d'être le principal goulot d'étranglement de votre site.

Sauf si vous avez déjà optimisé tout le reste à la perfection, je vous conseillerais de ne pas m'inquiéter à ce sujet. Utilisez un outil de profilage comme Yslow pour trouver les problèmes de performance réels sur votre site et corrigez ceux-ci.

Dans tous les cas, même s'il existe une implication notable de performance pour un sélecteur CSS donné (ou une autre caractéristique du navigateur), je dirais que c'est la responsabilité de la réparatrice du navigateur de le réparer, pas la vôtre de travailler autour de lui. < / p>


0 commentaires