Les entrailles d’un interpréteur CSS très rapide : Quantum CSS (alias Stylo)

119
31
août
2017
Mozilla

Cet été, Lin Clark a publié un article assez détaillé sur le fonctionnement du nouvel interpréteur CSS qui sera utilisé par les futures versions de Firefox.

Comme l’article est assez détaillé et qu’il révèle ce qui fait la magie de Rust et du projet Quantum, nous avons décidé de vous proposer une traduction dans la suite de la dépêche.

Veuillez noter que l’article original est sous licence _Creative Common Attribution — Partage dans les mêmes conditions 3.0 non transposé, cette dépêche suit donc les mêmes règles.

Sommaire

Les entrailles d’un interpréteur CSS très rapide : Quantum CSS (alias Stylo), par Lin Clark

Vous avez sûrement entendu parler du projet Quantum… C’est une réécriture majeure des entrailles de Firefox pour le rendre rapide. Nous intégrons actuellement dans Firefox des parties de notre navigateur Web expérimental, Servo, et nous faisons d’importantes améliorations sur d’autres parties.

Le projet peut être illustré par le remplacement en vol des pièces d’un jet. Les changements se font sur place, pièce par pièce, pour que vous puissiez voir les résultats dans Firefox le plus tôt possible dès qu’une pièce est prête.

Projet Quantum illustré par un réacteur

Et le premier composant majeur de Servo — un nouveau moteur CSS appelé Quantum CSS (connu auparavant sous le nom de Stylo) — est maintenant en cours de test dans la version Nightly de Firefox. Vous pouvez vérifier que le nouveau moteur est activé chez vous : dans la page about:config, vérifiez que le paramètre layout.css.servo.enabled est à true.

Ce nouveau moteur rassemble les innovations de l’état de l’art de quatre navigateurs Web différents pour créer un super interpréteur CSS.

Quantum CSS est nourri par 4 navigateurs Web

Il profite des matériels modernes en parallélisant le travail à travers tous les cœurs de votre machine. Il peut donc fonctionner deux, quatre ou même dix‐huit fois plus rapidement.

En plus de cette amélioration, il combine l’état de l’art des optimisations utilisées par les autres navigateurs Web. Ainsi, même si la parallélisation n’est pas utilisée, il s’agira toujours d’un moteur CSS rapide.

Course de jets

Mais que fait un moteur CSS ? Commençons par inspecter le moteur CSS et comment il s’insère dans le reste du navigateur. Ensuite, nous verrons comment Quatum CSS fait pour tout accélérer.

Que fait un moteur CSS ?

Le moteur CSS est une partie du moteur de rendu du navigateur. Le moteur de rendu prend le code HTML et les fichiers CSS d’un site Web et les transforme en pixels sur l’écran.

Des fichiers aux pixels

Chaque navigateur Web a son propre moteur de rendu. Dans Chrome, il s’appelle Blink. Dans Edge, c’est EdgeHTML. Dans Safari, il s’agit de WebKit. Et dans Firefox, il s’appelle Gecko.

Pour passer des fichiers aux pixels, tous ces moteurs de rendu font essentiellement les mêmes étapes :

  1. Analyser les fichiers et les transformer en objets que le navigateur peut comprendre, dont le DOM. À cette étape, le DOM connaît déjà toute la structure de la page. Il sait tout sur les relations parents‐enfants entre les éléments. En revanche, il ne connaît pas l’aspect visuel de chacun de ces éléments. Analyser le code HTML et en créer un arbre DOM
  2. Comprendre comment les éléments devraient apparaître. Pour chaque nœud DOM, le moteur CSS recherche les règles CSS à appliquer. Ensuite, il retrouve la valeur de chacune des propriétés CSS pour ce nœud DOM. Styliser chaque nœud de l’arbre DOM en leur attachant le style calculé
  3. Mesurer les dimensions pour chaque nœud et leur emplacement sur l’écran. Des boîtes sont créées pour chaque chose qui peut être affichée à l’écran. Les boîtes ne représentent pas seulement les nœuds DOM, vous avez aussi des boîtes pour des choses à l’intérieur des nœuds DOM, comme des lignes de texte. Mesurer toutes les boîtes pour créer un arbre de frame
  4. Dessiner les différentes boîtes. Ça peut se passer sur plusieurs calques. Je me représente ça comme les anciennes animations peintes à la main, avec différents papiers calques superposés comme une peau d’oignon. Ça permet de modifier juste un calque sans avoir à tout redessiner. Dessiner chaque calque
  5. Prendre ces différents calques, appliquer les propriétés de composition — comme transform — et les transformer en image. C’est essentiellement comme prendre une photo des calques posés les uns sur les autres. Cette image est ensuite rendue sur l’écran. Rassembler les calques et prendre une photo

Ainsi, quand il commence à calculer les styles, le moteur CSS a deux outils à disposition :

  • un arbre DOM ;
  • une liste de règles de style.

Il parcourt tous les nœuds DOM, un par un, et pour chaque nœud il retrouve les styles associés. Durant ce processus, il donne au nœud DOM une valeur pour toutes les propriétés CSS, même si les feuilles de style ne déclarent pas de valeur pour certaines propriétés.

Je l’imagine comme une personne qui parcourt un formulaire et le remplit. Il a besoin de remplir un formulaire pour chacun des nœuds DOM. Et pour chacune des questions, il doit avoir une réponse.

Formulaire avec propriétés CSS sans valeurs

Pour le remplir, le moteur CSS a besoin de faire deux choses :

  • trouver quelles règles s’appliquent au nœud ­— c’est‐à‐dire faire correspondre les sélecteurs CSS aux nœuds DOM ;
  • remplir toutes les valeurs manquantes avec les valeurs du parent ou une valeur par défaut — c’est‐à‐dire cascader les styles.

Faire correspondre les sélecteurs CSS aux nœuds DOM

Durant cette étape, nous allons ajouter chaque règle qui correspond au nœud DOM dans une liste. Comme plusieurs règles peuvent correspondre, il pourrait y avoir plusieurs déclarations de valeur pour une même propriété.
Personne qui coche chaque règle CSS correspondante au nœud DOM

En plus des règles déclarées par le code du site, le navigateur ajoute lui‐même certaines CSS par défaut (appelées feuilles de style user agent).

Comment est‐ce que le moteur CSS peut choisir quelle valeur doit être utilisée avec ces multiples déclarations ?

C’est ici que le principe de la spécificité des déclarations CSS intervient. Le moteur CSS crée en gros une feuille de calcul avec pour chaque ligne une déclaration CSS. Ensuite, il ordonne les lignes selon différentes colonnes.
Déclarations dans un tableur

La règle CSS définie avec la plus grande spécificité gagne. Ainsi, depuis cette feuille de calcul, le moteur CSS est capable de remplir les valeurs dans le formulaire. Pour l’instant, il ne remplit que les valeurs déclarées explicitement par des règles du code CSS du site.
Formulaire avec quelques propriétés CSS remplies

Pour le reste, il va devoir utiliser la cascade.

La cascade de styles

Le principe de la cascade rend le code CSS plus facile à écrire et maintenir. Grâce à la cascade, vous pouvez paramétrer la propriété color une fois sur le corps de la page <body/> et vous savez que le texte des éléments <p/>, <span/> et <li/> utilisera la même couleur (à moins de faîre une règle plus précise qui remplacera cette valeur).

Pour arriver à ce résultat, le moteur CSS regarde tous les blancs qui restent dans le formulaire. Si une propriété hérite par défaut de la valeur de l’élément parent, alors le moteur CSS remonte l’arbre DOM et regarde si le parent a une valeur. Si aucune valeur n’est déclarée pour le parent ou si une propriété n’hérite pas, il utilise la valeur par défaut.
Formulaire avec toutes les propriétés CSS remplies

Maintenant tous les styles ont été calculés pour ce nœud DOM.

Quelques précisions : le partage des structures de style

Le formulaire que je vous ai montré est une simplification. Le standard CSS a des centaines de propriétés. Si le moteur CSS tenait pour chaque nœud DOM la liste de chaque propriété avec une valeur, il serait rapidement à court de mémoire.

Ainsi, au lieu de tenir de tels formulaires, les moteurs utilisent généralement ce qu’on appelle le partage des structures de style. Ils enregistrent les données qui vont habituellement ensemble (comme toutes les propriétés de police d’écriture) dans un même objet appelé structure de style. Ensuite, plutôt que d’avoir toutes les propriétés dans un même objet pour un nœud, l’objet contenant le style calculé du nœud est un ensemble de pointeurs. Pour chaque catégorie de propriétés, il y a un pointeur vers une structure de style qui a les bonnes valeurs pour ce nœud DOM.
Parties de formulaires retirées dans des objets séparés

Cette technique permet à la fois de réduire l’espace mémoire et le temps de traitement nécessaire. Tous les nœuds qui ont des propriétés proches (comme les jumeaux) peuvent simplement pointer vers les mêmes structures pour les propriétés partagées. Et comme beaucoup de propriétés sont héritées, un ancêtre peut partager une structure avec tous ses descendants qui n’ont pas de déclaration de valeur plus spécifique.

Maintenant, comment peut‐on faire tout ça rapidement ?

Voici à quoi ressemblent les calculs de style si vous ne les avez pas optimisés.
Les étapes de calcul de style CSS : connexion des sélecteurs, ordonnancement par spécificité et calcul des valeurs de propriété

Il y a beaucoup de travail à exécuter ici. Et pas seulement au premier chargement de la page. Le travail doit être refait encore et encore tant que l’utilisateur interagit avec la page, en passant la souris par‐dessus des éléments (hover) ou en modifiant le DOM, déclenchant à nouveau le calcul des styles.
Création initiale de style et recréation pour le recouvrement de la souris, l’ajout de nœud DOM, etc

Ainsi, le calcul des styles CSS est un très bon candidat pour l’optimisation et les navigateurs ont testé différentes stratégies pour l’optimiser durant ces vingt dernières années. Ce que Quantum CSS fait est de prendre le meilleur des stratégies des différents moteurs, de les combiner et de créer un nouveau moteur très rapide.

Examinons donc en détail comment faire fonctionner ensemble ces stratégies.

Tout faire en parallèle

Le projet Servo (d’où vient le moteur Quantum CSS) est un navigateur expérimental qui essaie de paralléliser toutes les différentes parties de la création de rendu d’une page Web. Qu’est‐ce que ça signifie ?

Un ordinateur ressemble à un cerveau. Il y a une partie qui pense (l’ALU). Très proche de celle‐ci, il y a une mémoire à court terme (les registres). Ces parties rassemblées forment le processeur (CPU). Ensuite, il y a la mémoire à long terme, la mémoire vive.
CPU avec ALU (la partie qui fait le job) et les registres (mémoire à court terme)

Les premiers ordinateurs ne pouvaient penser qu’à une chose à la fois en utilisant ce CPU. Mais ces dernières années, les CPU ont évolué pour avoir plusieurs ALU et registres, regroupés en cœurs. C’est‐à‐dire que le CPU peut penser à plusieurs choses en même temps ­— en parallèle.
Processeur avec plusieurs cœurs contenant chacun des ALU et des registres

Quantum CSS utilise cette fonctionnalité récente sur les ordinateurs en partageant le calcul des styles pour les différents nœuds DOM à travers les différents cœurs.

Ça paraît être facile à faire… Simplement partager les branches de l’arbre DOM et les envoyer aux différents cœurs. C’est en réalité beaucoup plus difficile, et ce pour plusieurs raisons. Une de ces raisons est que l’arbre DOM est souvent déséquilibré. Ainsi, un cœur aura beaucoup plus de travail que les autres.
Arbre DOM déséquilibré qui sera partagé non équitablement entre plusieurs cœurs

Pour répartir le travail plus équitablement, Quantum CSS utilise une technique nommée le vol de travail. Quand un nœud DOM est en train d’être analysé, le code reprend ses enfants directs et les partage en une ou plusieurs « unités de travail ». Ces unités de travail sont mises dans une queue.
Les cœurs segmentent leur travail en unités de travail

Quand un cœur finit le travail de sa queue, il regarde la queue des autres pour trouver plus de travail à faire. Ainsi, nous pouvons séparer équitablement le travail sans perdre du temps pour traverser l’arbre et chercher comment l’équilibrer à l’avance.
Les cœurs qui ont terminé leur travail volent celui du cœur avec le plus de job

Dans la plupart des navigateurs, il serait très difficile de bien le faire. Le parallélisme est un problème connu pour être difficile et le moteur CSS est très complexe. Il s’insère aussi entre les deux autres parties les plus complexes d’un moteur de rendu ­— le DOM et l’affichage. Ainsi, il est très facile de créer des bogues et, quand le parallélisme engendre des bogues, qui sont très difficiles à résoudre, ils sont appelés « courses de données » (data races). J’approfondis les explications sur ce type de problèmes dans un autre article.

N. D. M. : voir cette discussion pour plus de détails sur les différences entre data race (« course de données ») et race condition (« concurrence critique » ou « situation de compétition »).

Quand vous acceptez des contributions de centaines ou de milliers d’ingénieurs, comment pouvez‐vous créer un programme parallélisé sans être effrayé ? C’est pour ça que nous avons Rust.
Logo Rust

Avec Rust, vous pouvez vérifier statiquement que vous n’aurez pas de courses de données. C’est‐à‐dire que vous empêchez l’apparition de bogues difficiles à résoudre, simplement en vous empêchant de les créer dans votre code dès le début. Le compilateur ne vous laissera pas faire. Je suis en train d’écrire d’autres articles à ce sujet. Pour l’instant, vous pouvez voir cette vidéo d’introduction au sujet du parallélisme dans Rust ou celle‐ci, qui est une discussion plus détaillée sur le vol de travail.

Avec tout ceci, le calcul des styles CSS évolue de ce que nous appelions « un difficile problème de parallélisme » à « de très petits problèmes bloquants pour une exécution en parallèle efficace ». C’est‐à‐dire que nous pouvons nous rapprocher d’une accélération linéaire en termes de vitesse. Si vous avez quatre cœurs dans votre machine, alors ça pourra s’exécuter presque quatre fois plus vite.

Accélérer les recalculs de style avec l’arbre des règles

Pour chaque nœud DOM, le moteur CSS doit traverser toutes les règles pour faire la correspondance des sélecteurs CSS. Pour la plupart des nœuds, les correspondances ne changeront pas souvent. Par exemple, si l’utilisateur passe la souris sur un parent, les règles qui y sont liées pourraient changer. Nous devons donc encore recalculer les styles pour ses descendants afin d’appliquer correctement les propriétés héritées. Mais les règles correspondant à ses descendants ne changeront probablement pas.

Ce serait mieux si nous pouvions simplement noter quelles règles correspondent à chaque descendant et ne pas avoir besoin de refaire le calcul des correspondances pour eux de nouveau… C’est ce que fait l’arbre des règles, emprunté du précédent moteur CSS de Firefox.

Le moteur CSS effectue la recherche des sélecteurs qui correspondent et ensuite les trie par spécificité. De ceci, il crée une liste chaînée de règles.

Cette liste sera ajoutée à l’arbre des règles.
Une chaîne de règle à ajouter à l’arbre des règles

Le moteur CSS essaie de conserver le plus petit nombre de branches dans l’arbre. Pour cela, il essaie de réutiliser une branche dès qu’il peut.

Si la plupart des sélecteurs dans une liste sont les mêmes que dans une branche existante, alors il suivra le même chemin. Mais il pourrait atteindre un point où la règle suivante dans la liste n’est pas dans cette branche de l’arbre. Seulement à ce point il ajoute une nouvelle branche.
Le dernier élément de la chaîne doit être ajouté à l’arbre

Le nœud DOM recevra un pointeur vers la règle qui a été insérée en dernier (dans cet exemple, la règle div#warning). C’est la plus spécifique.

Lors d’un recalcul de styles, le moteur fera une vérification rapide pour voir si le changement du parent modifie les règles qui correspondent aux enfants. Si les correspondances ne changent pas, alors pour tous les descendants, le moteur peut juste suivre le pointeur du nœud descendant pour obtenir la règle. De là, il peut remonter l’arbre jusqu’à la racine pour obtenir une liste complète de règles correspondantes, de la plus spécifique à la moins spécifique. Ça signifie qu’il peut complètement outrepasser les étapes de recherche de correspondance de sélecteurs et de leur tri.
Outrepasser la correspondance des sélecteurs et leur tri par spécificité

Ainsi, cela aide à réduire le travail nécessaire durant le recalcul de styles. Mais il y a encore beaucoup de travail pour le premier calcul de styles. Si vous avez 10 000 nœuds, vous devez toujours faire la recherche de correspondance des sélecteurs 10 000 fois. Mais il y a un autre moyen d’accélérer tout ceci.

Accélérer le rendu initial (et la cascade) avec le cache partagé des styles

Pensez à une page avec des milliers de nœuds. Beaucoup de ces nœuds correspondront aux mêmes règles. Par exemple, pensez à un long article Wikipédia ; les paragraphes dans le contenu principal devraient tous suivre exactement les mêmes règles et avoir donc les mêmes styles calculés.

S’il n’y avait pas d’optimisation, alors le moteur CSS devrait faire la correspondance des sélecteurs et calculer les styles pour chaque paragraphe individuellement. Mais s’il y avait un moyen pour prouver que les styles seront les mêmes d’un paragraphe à l’autre, alors le moteur ne devrait faire ce travail qu’une fois et il ferait pointer chaque nœud de paragraphe au même style calculé.

C’est ce que fait le cache partagé des styles, inspiré par Safari et Chrome. Après avoir traité un nœud, il met le style calculé dans le cache. Ensuite, avant de débuter le calcul de style du nœud suivant, il lance quelques vérifications pour voir s’il peut réutiliser les données du cache.

Ces vérifications sont :

  • est‐ce que les deux nœuds ont les mêmes identifiants, classes, etc. ? Si oui, alors ils vont correspondre aux même règles ;
  • pour ceux qui ne sont pas stylés depuis les sélecteurs — les styles inline par exemple —, est‐ce que les nœuds ont les mêmes valeurs ? Le cas échéant, les règles au‐dessus soit ne seront pas surchargées, soit elles seront surchargées, mais de la même manière ;
  • est‐ce que les deux parents pointent vers le même objet de styles calculés ? Si oui, alors les valeurs héritées seront identiques.

Les styles calculés sont partagés par leurs parentées et on leur demande si un cousin peut être paragé. Réponse : oui

Ces vérifications ont été utilisées dès le début des premiers caches de styles partagés. Mais il y a beaucoup d’autres petits cas où les styles pourraient ne pas correspondre. Par exemple, si une règle CSS utilise le sélecteur :first-child, alors deux paragraphes ne pourraient pas correspondre, même quand les vérifications ci‐dessus suggèrent que oui.

Dans WebKit et Blink, le cache partagé de styles est abandonné dans ces cas et le cache n’est pas utilisé. Comme de plus en plus de sites utilisent ces sélecteurs modernes, l’optimisation a été de moins en moins utile, à tel point que l’équipe Blink l’a récemment enlevée. Mais il s’avère qu’il y a un moyen d’utiliser le cache de styles partagés avec ces changements.

Dans Quantum CSS, nous rassemblons tous ces sélecteurs bizarres et vérifions s’ils s’appliquent au nœud DOM. Ensuite, nous stockons les réponses avec des uns et des zéros. Si les deux éléments ont le même nombre de uns et de zéros, nous savons qu’ils correspondent effectivement.
Un tableau de scores montrant les zéros et uns, chaque colonne est nommée avec des sélecteurs comme « :first-child »

Si un nœud DOM peut partager des styles qui ont déjà été calculés, vous pouvez passer outre presque tout le travail. Comme les pages ont souvent beaucoup de nœuds DOM avec les mêmes styles, le cache de styles partagés peut économiser beaucoup de mémoire et vraiment accélérer les choses.

Livraison de tout le travail

Conclusion

C’est le premier grand transfert de technologie de Servo vers Firefox. Durant ce chemin, nous avons beaucoup appris sur la manière d’apporter du code moderne et performant écrit en Rust dans le cœur de Firefox.

Nous sommes vraiment enthousiastes d’avoir rendu disponible cette grosse pièce du projet Quantum aux utilisateurs pour qu’ils l’expérimentent directement. Nous sommes très heureux de vous laisser l’essayer et, si vous rencontrez le moindre problème, faites‐le nous savoir.

Aller plus loin

  • # Belle promesse

    Posté par  . Évalué à 7.

    L'article omet juste d'évaluer le poids des CSS dans le calcul d'une page. Quelqu'un aurait une idée de combien le rendu global d'une page est accéléré avec Stylo?

    ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

    • [^] # Re: Belle promesse

      Posté par  . Évalué à 7.

      Et aussi une petite comparaison de perf avec «l'avant» et les concurrents

    • [^] # Re: Belle promesse

      Posté par  (site web personnel, Mastodon) . Évalué à 5.

      L'article était déjà bien assez long pour ne pas y inclure un benchmark :D

      Je ne sais pas si des benchmarks sont déjà sorti, mais tu peux déjà tester toi-même le nouveau moteur en installant Firefox Nightly comme écrit dans les premiers paragraphes.

      • [^] # Re: Belle promesse

        Posté par  . Évalué à 1.

        Au passage, dans firefox 55, about:config contient déjà cette option pour servo, à false par défaut. m'enfin, tout est déjà rapide chez moi sur la 55. Je suis dans le cas de ceux qui utilisent des 100aines d'onglets et firefox 55 a été du pain béni pour moi sur ce point, et je retrouve la fluidité d’antan sur les autres points (très notable dans les glissé/déposé des onglets vers les signets. Il y avait parfois du retard qui pouvait approcher de la seconde, il n'y en a plus aucun. Testé sur un ordi sous Intel core i7 et un autre avec un processeur ARMv7 RK3288.

        Il reste un bug (ancien) sur cette version, après avoir utilisé pas mal d'onglets parmi mes centaines. quand je tape une url dans la barre dédiée, je n'ai plus de suggestion depuis mon historique (je désactive généralement la recherche sur le net pour que le moteur de recherche ne log pas tout ce que je tape). (ça fait 1 ou 2 ans que je me dit qu'il faut que je fasse un rapport de bug).

    • [^] # Re: Belle promesse

      Posté par  (site web personnel) . Évalué à 10.

      Je ne connais pas de benchmarks comparatifs de Stylo ou même de Quantum, mais ce que je peux dire après être passé de Firefox 55 à la nightly, c'est que c'est absolument incomparable au niveau performance.
      Cette nightly est une véritable bombe, à un point qu'elle arrive à me faire faire une croix (temporaire) sur beaucoup de mes extensions devenues incompatibles.

      • [^] # Re: Belle promesse

        Posté par  (site web personnel) . Évalué à 4.

        Tu peux vérifier que ce soit bien dû à cela (ou plutôt quelle part) en désactivant la fonctionnalité dans about:config. Il y'a beaucoup d'efforts ces derniers temps autour des perfs, entre autre une diminution importante de la consommation mémoire (par exemple https://metafluff.com/2017/07/21/i-am-a-tab-hoarder/)

      • [^] # Re: Belle promesse

        Posté par  (site web personnel) . Évalué à 10.

        Si tu as beaucoup d'extensions, le gain de perf peut venir en partie de la croix faite dessus…

        • [^] # Re: Belle promesse

          Posté par  . Évalué à 1.

          C'est un peu vrai mais l'apport de la Nightly par rapport à Firefox 55 nu est Substantiel.

        • [^] # Re: Belle promesse

          Posté par  (site web personnel) . Évalué à 4. Dernière modification le 01 septembre 2017 à 11:48.

          J'hésite à décrire mon expérience individuel ici car je ne suis pas certain de la pertinence du lieu, mais je rencontre de gros problèmes de ralentissement avec la 55 même sans absolument aucune extension. Juste 7 ou 8 onglets avec certes 1 ou 2 applications un peu gourmandes en javascript.

          Là où ça passe comme une lettre à la poste avec chromium (60 onglets en général), Firefox 55 se traîne et devient parfois inutilisable sur mon laptop…

          Tout cela disparaît avec la nightly. Alors effectivement, je viens de faire le test en désactivant Servo, et la nightly semble fonctionner également parfaitement bien, donc c'est probablement pas lié aux améliorations intrinsèques à Stylo (qui doivent se percevoir à mon avis dans un contexte beaucoup plus chargé en onglets), mais juste aux autres amélios de la 56 et la 57 ou bien mon environnement local (machine, os, etc) qui entrave le bon fonctionnement de la 55.

          • [^] # Re: Belle promesse

            Posté par  . Évalué à 3.

            Je confirme que depuis quelques temps Firefox n'est plus que l'ombre de ce qu'il était, en particulier lorsque des onglets de sites google comme youtube, gmail, docs sont épinglés.

            Et comme Google n'arrête pas de faire de la pub tous azimuts pour son navigateur chrome soit disant mieux optimisé dés qu'il détecte qu'on utilise Firefox, et qu'effectivement sous Chrome il n'y a pas de soucis, j'en suis arrivé au point où je soupçonne Google de faire ramer Firefox exprès et ça m'agace.

  • # Coquilles

    Posté par  . Évalué à 2.

    "il s'insert" (2 occurrences) => il s'insère http://www.wordreference.com/conj/FRverbs.aspx?v=s%27ins%c3%a9rer

    "à besoin" => "a besoin"

    "en détails" => "en détail" https://french.stackexchange.com/questions/19002/doit-on-%c3%a9crire-en-d%c3%a9tail-ou-en-d%c3%a9tails

    "de très petits problèmes bloquant" => "de très petits problèmes bloquants" http://fr.lettres.langue.francaise.narkive.com/k8MA5eKd/criteres-bloquant-ou-criteres-bloquants

    • [^] # Re: Coquilles

      Posté par  (site web personnel) . Évalué à 4.

      Corrigé, merci.

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 1. Dernière modification le 01 septembre 2017 à 00:49.

        Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: Coquilles

          Posté par  (site web personnel, Mastodon) . Évalué à 5.

          Hello,

          Note que dans le 3ème paragraphe de l'introduction de la dépêche, nous avons inclus le texte qui mentionne bien la licences CC BY SA 3.0 avec le lien vers la bonne version résumée (j'ai trouvé cette licence dans le pied de page du site web contenant l'article original).

          Le lien que tu pointes est celui ajouté automatiquement par LinuxFR sous le titre de la dépêche.
          Dans l'espace de rédaction, je n'ai pas vu d'option pour désactiver cette licence automatique.

          Est-ce que c'est possible de mettre à jour son lien ou on n'a que le texte qui peut le surpasser ?

        • [^] # Re: Coquilles

          Posté par  (site web personnel) . Évalué à 7. Dernière modification le 01 septembre 2017 à 08:39.

          La licence vient de :
          "Veuillez noter que l'article original est sous licence Creative Common Attribution - Partage dans les Mêmes Conditions 3.0 non transposé, cette dépêche suit donc les mêmes règles."

          Le "4.0" du lien au dessus est un problème technique du site qui ne donne pas le choix de version, mais à mon avis n'importe quelle personne "normale" qui lit la dépêche comprend que c'est de 3.0.

          J'avoue que je n'ai pas lu les deux versions de la licence

          Dommage, tu y trouverais pas exemple "You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License (…)" donc la licence mise par le site semble bien compatible.

          (à ma connaissance c'est arrivé avec la version 3 des CC, et ça doit bien aider pour le futur pour ne pas se prendre la tête avec des incompatibilités idiotes)

          edit : grillé pendant la rédaction :)

          • [^] # Commentaire supprimé

            Posté par  . Évalué à -4.

            Ce commentaire a été supprimé par l’équipe de modération.

          • [^] # Re: Coquilles

            Posté par  (site web personnel) . Évalué à 5.

            (à ma connaissance c'est arrivé avec la version 3 des CC, et ça doit bien aider pour le futur pour ne pas se prendre la tête avec des incompatibilités idiotes)

            c'est déjà dans la CC-by-sa 2.0 https://creativecommons.org/licenses/by-sa/2.0/legalcode

            • voir §4.b
            • You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-ShareAlike 2.0 Japan).

            un peu comme pour la GPL où c'est la GPL-2.0 qui inclut par défaut le GPL-2 + (sauf quand il est expressément retiré comme pour le noyau Linux…)

            • [^] # Re: Coquilles

              Posté par  (site web personnel, Mastodon) . Évalué à 2.

              un peu comme pour la GPL où c'est la GPL-2.0 qui inclut par défaut le GPL-2 + (sauf quand il est expressément retiré comme pour le noyau Linux…)

              Pas exactement. La GPL 2.0 elle-même ne dit rien là-dessus. Cependant, le texte que la FSF propose d'utiliser pour choisir la GPL indique "version 2 ou n'importe quelle version ultérieure". Précisément cela apparaît dans "How to Apply These Terms to Your New Programs", juste après la fin de la license (END OF TERMS AND CONDITIONS) ici: https://www.gnu.org/licenses/old-licenses/gpl-2.0.fr.html

              Dans le texte de la licence il est bien précisé que ce changement de version n'est possible que si c'est spécifié explicitement de cette façon.

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 8.

        Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: Coquilles

          Posté par  (site web personnel, Mastodon) . Évalué à 5.

          Merci pour tes contributions, c'est dommage que tu ne puisses pas nous aider en amont :(

          Pour le «data race», le contexte de l'article est une vulgarisation de beaucoup d'aspects techniques. Je pense que dans ce cas, il est dommage d'y apporter de si grandes notes de traduction pour un point qui est clairement renvoyé à un autre article plus détaillé.

          • [^] # Commentaire supprimé

            Posté par  . Évalué à -5.

            Ce commentaire a été supprimé par l’équipe de modération.

            • [^] # Re: Coquilles

              Posté par  (site web personnel) . Évalué à 7.

              avec mon karma très souvent négatif (lié à une kabbale

              Ton karma est négatif à cause de tes interventions ineptes sur l'informatique, de ta logorhée assez délirante sur Zino et de tes propos d'extrême-droite. Tu en es à ton septième compte (au moins) ouvert sur linuxfr après fermeture des autres par les modérateurs ou toi-même.
              Tu tentes de te refaire une santé en corrigeant des fautes d'orthographe et en t'acharnant sur des détails sensibles par ici (les questions de licences). De même, tu adoptes de temps en temps les tics de langage de la tribune.
              Ça ne change rien au fait que tu connais très mal Linux et le logiciel libre.

              "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

              • [^] # Commentaire supprimé

                Posté par  . Évalué à -10.

                Ce commentaire a été supprimé par l’équipe de modération.

              • [^] # Re: Coquilles

                Posté par  . Évalué à 2. Dernière modification le 02 septembre 2017 à 09:40.

                Ton karma est négatif à cause de tes interventions ineptes sur l'informatique, de ta logorhée assez délirante sur Zino et de tes propos d'extrême-droite.

                Il souleve quand meme un vrai probleme (dans son commentaire en lien). Il est possible de moinser plein de messages sans les lire.

                mais ça n'a pas duré : bien que je n'ai posté aucun autre commentaire depuis le 24 août, un utilisateur malveillant à mon égard a pris soin de "moinser" de très nombreux anciens commentaires (je conclue ainsi, sinon je ne vois pas comment je serais passé de positif à -32 dans la nuit) ;

                Ce n'est plus l'expression de son avis sur un commentaire. Tout le monde peut devenir un censeur selon ses propres criteres plus ou moins naif sans devoir s'expliquer de rien ni a personne.

                • [^] # Re: Coquilles

                  Posté par  (site web personnel) . Évalué à 7.

                  Il souleve quand meme un vrai probleme (dans son commentaire en lien). Il est possible de moinser plein de messages sans les lire.

                  Problème qui n'a rien à voir avec Linuxfr : il est possible de dire du mal d'un livre sans l'avoir lu, d'élire quelqu'un sans connaître son programme, d'écrire une dépêche sans connaître le sujet, etc. La technique ne peut résoudre un problème éthique et moral.

                  Quand au moinssage d'anciens commentaires on peut aussi bien y voir l'action de personnes étonnées par ses propos, qui ont voulu en savoir plus et qui sont donc parti chercher ses commentaires précédents.

                  "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                  • [^] # Re: Coquilles

                    Posté par  . Évalué à -7.

                    Problème qui n'a rien à voir avec Linuxfr : il est possible de dire du mal d'un livre sans l'avoir lu, d'élire quelqu'un sans connaître son programme, d'écrire une dépêche sans connaître le sujet, etc. La technique ne peut résoudre un problème éthique et moral.

                    Quand au moinssage d'anciens commentaires on peut aussi bien y voir l'action de personnes étonnées par ses propos, qui ont voulu en savoir plus et qui sont donc parti chercher ses commentaires précédents.

                    Tu fais semblant de ne pas comprendre. Ce n'est pas une bonne attitude de communication, tu sais.

                    • [^] # Re: Coquilles

                      Posté par  (site web personnel) . Évalué à 5.

                      ???
                      Eh oh faut arrêter avec le mode "conspirateurs partout"! Si tu penses que je n'ai pas compris explique au lieu de penser que je le fais exprès.

                      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                      • [^] # Re: Coquilles

                        Posté par  . Évalué à 3.

                        Il dit qu'il est possible d'aller moinsser des messages vieux de plusieurs semaines/mois.
                        Ce qui est vrai, dans une certaine mesure : si j'en crois ma rapide vérification empirique, je peux aller plusser/moinsser des commentaires d'un journal datant du 9 juin, mais pas ceux d'un autre journal datant du 23 mai.

                        • [^] # Re: Coquilles

                          Posté par  (site web personnel) . Évalué à 6.

                          c'est limité à 3 mois, ce qui semble cohérent. Après, se plaindre de son karma et espionner ses propres notes relève àmha du complot, ça n'est pas si important que cela au jour le jour et ne va pas révolutionner votre vie…

                          • [^] # Re: Coquilles

                            Posté par  (site web personnel) . Évalué à 10.

                            C'est du logiciel libre, le code est dispo et donc les conditions sont définies ainsi : un compte actif, qui ne soit pas celui qui a écrit le commentaire, un commentaire qui doit avoir moins de 3 mois, un compte ayant encore au moins une note à attribuer ou qui soit modérateur/admin, et un compte qui n'a pas déjà noté ce commentaire-là.

                              def votable_by?(account)
                                !deleted? && user_id != account.user_id    &&
                                    (Time.now - created_at) < 3.months     &&
                                    (account.nb_votes > 0 || account.amr?) &&
                                    !vote_by?(account.id)
                              end
                            • [^] # Re: Coquilles

                              Posté par  . Évalué à 2.

                              Merci.
                              La flemme d'aller chercher dans le code de linuxfr…

                        • [^] # Re: Coquilles

                          Posté par  (site web personnel) . Évalué à 4. Dernière modification le 02 septembre 2017 à 16:54.

                          Ce qui est très bien. Comme dit Baud, c'est cohérent, le contenu n'étant pas périmé ou peut toujours réagir. Bien que modérateur, donc très assidu par ici, il y a plein de contenu intéressant que je rate et découvre au hasard d'une recherche.
                          (et merci pour l'explication, je n'avais effectivement pas compris que c'était la date ancienne qui posait problème)

                          "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

              • [^] # Re: Coquilles

                Posté par  . Évalué à -4. Dernière modification le 04 septembre 2017 à 11:40.

                @ Zero Heure
                Bon je le comprends. Avec la bande de t-d-c "commissaires du peuple" politisé sur ce site! (confère les menaces de "liste de moutons noirs" à une autre occasion)
                Je ne suis pas de droite et pas de gauche non plus, mais linuxfr.org est en train de devenir une feuille de choux avec des propos de plus en plus sectaire mené par une bande d'ignares. Et c'est récurrent maintenant.
                Au final, cette liste a de moins en moins d'intérêt. En tous cas rien a voir avec Linux ou le libre ou l'informatique.

                • [^] # Re: Coquilles

                  Posté par  (site web personnel) . Évalué à 5.

                  C'est une tendance très générale d'oublier que toutes ces choses dépendent de nous. L'ambiance sur le site dépend de ceux qui la fond. Tu ne commente pas souvent, implique-toi, rédige des journaux, des dépêches, …

                  C'est comme en politique : on a trop souvent une attitude fataliste devant les décisions du gouvernement, avec l'impression qu'on ne peut pas influencer cette grosse machine. Or c'est faux, l'histoire le prouve amplement : manifs, syndicats, associations, … ont toujours influé les décisions. Par contre on ne le voit pas, le processus est long, les changements interviennent longtemps après.

                  "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

                • [^] # Re: Coquilles

                  Posté par  . Évalué à 4.

                  la bande de t-d-c "commissaires du peuple" politisé sur ce site

                  Je débarque totalement. Tu peux donner des exemples ?
                  Je n'ai aucun souvenir d'avoir lu quoi que ce soit qui me fasse penser à ça. Où alors mon seuil de détection est trop laxiste.

                  • [^] # Re: Coquilles

                    Posté par  . Évalué à 3.

                    Deux qui me viennent en tête, le premier est un article sur un jeux ou le développement d'un jeu dont les images étaient trouvée sexiste. Un autre article parlant d'une personne décédée promettait de faire une liste de ceux qui n'allait pas dans son sens style le "mur des cons" qui avait défrayé la chronique en son temps dans les infos.
                    Deux exemples frappants.

                    Pour le reste, non effectivement je ne commente pas beaucoup, parce que je ne vois pas l'utilité de mettre mon grain de sel si je n'ai rien à dire ou rien a proposer de plus et que l'article est complet. Pas plus que je coche souvent les cases pertinents ou pas, encore moins d'aller me renseigner sur un de ceux qui s'expriment juste pour voir de quel bord ils sont. (exemple : cet article dans un commentaire un peu plus haut). Je me fous de savoir ce que les utilisateurs de site font dans leur vie et je me fous de savoir s'ils sont casher ou pas. La question ne se pose même pas. Il y a eu en son temps l'abominable étoile jaune et je ne vois pas pourquoi il y en aurait qui seraient d'autres couleurs aujourd'hui. C'est honteux!

                    Par contre, je trouve très bien le souci des corrections orthographiques. Lorsque l'ont vois des articles de journalistes mainstream pas fichu d'écrire une phrase sans 10 fautes ou avec des tournures de phrases qui ne veulent rien dire. Je pense que c'est une très bonne chose qui participe au sérieux d'un media.

            • [^] # Re: Coquilles

              Posté par  (site web personnel) . Évalué à 4.

              Corrigé, merci.

  • # Super article!

    Posté par  . Évalué à 10.

    C'est le genre de contenu que j'aimerais voir plus souvent sur LinuxFR.
    Technique détaillé et très bien expliqué.

    Merci pour la traduction!

    • [^] # Re: Super article!

      Posté par  (site web personnel) . Évalué à 10.

      Pour voir plus souvent ce genre de contenu, il faut les écrire ou les traduire, ou encore faire des interviews. Lecteurs, à vous de jouer!

      "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

  • # La suite !

    Posté par  (site web personnel) . Évalué à 7.

    Durant ce chemin, nous avons beaucoup appris sur la manière d'apporter du code moderne et performant écrit en Rust dans le cœur de Firefox

    Ça c'est super, ça veut dire que les prochaines intégrations Quantum pourraient ne pas prendre trop de temps (miam, miam) :)

  • # Republication de l'article et publicité

    Posté par  . Évalué à 6.

    L'article a été republié sur le blog de Mozilla et un petit message pour l'annoncé est apparu sur la page d'accueil de nightly.

  • # CSS

    Posté par  (site web personnel) . Évalué à 2.

    Ma CSS ne redimensionne pas les images… L'article est donc illisible :'(

    --> []

    • [^] # Re: CSS

      Posté par  . Évalué à 4.

      Clic-droit → ouvrir en navigation privée.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Expression du Québec VS Expression de la France

    Posté par  . Évalué à 5.

    il regarde la queue des autres pour trouver plus de travail à faire

    Bon vous allez me trouver enfantin, mais ce n'est pas grave! Dans le contexte de la phrase cité ci-dessus, au Québec, l'expression "queue" n'existe pas et on dit plutôt "file d'attente"! Cette phrase en joual québecois veux littéralement dire "il regarde la bizoune des autres pour trouver plus de travail à faire"!

    Très bonne article et en plus j'ai rit un bon coup!

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.