Panorama-tab-groups: Le changement de groupe d'onglets est lent et très gourmand en ressources

Créé le 29 déc. 2018  ·  7Commentaires  ·  Source: projectdelphai/panorama-tab-groups

Y a-t-il de toute façon cela peut être corrigé?

Commentaire le plus utile

Je vois dans le code que la page est rechargée chaque fois que la vue du groupe d'onglets est basculée. Lorsque l'événement visibilitychange est déclenché parce que le document est visible ( document.hidden === false ) il appelle captureThumbnails pour chaque onglet, puis il recharge la page et ensuite il appelle captureThumbnails encore. Il stocke les vignettes en session, mais ne les charge jamais. Il y a donc place à amélioration ici :

  • Ne rechargez pas la page à chaque fois qu'elle est affichée
  • Ne capturez pas les vignettes juste avant de recharger la page
  • Rechercher les miniatures de la session au lieu de les capturer à nouveau (ou ne pas enregistrer dans la session, si ce n'est pas nécessaire)

je peux y jeter un oeil si tu veux

Tous les 7 commentaires

🤔 J'ai connu une commutation légèrement plus lente avec beaucoup de groupes.

Pouvez-vous nous donner quelques chiffres, s'il vous plaît ?

Combien de groupes/onglets avez-vous ?
Comment mesurer l'intensité des ressources ?

J'ai deux groupes, l'un avec 219 onglets, l'autre avec six.

Les ventilateurs de mon système commencent à tourner et si je joue de l'audio via le mode lecteur. Le son s'arrête et bégaye.

Système : Nightly, Fedora 29, processeur Intel® Core™ i7-4710HQ à 2,50 GHz × 8, GeForce GTX 860M/PCIe/SSE2.

Je vois dans le code que la page est rechargée chaque fois que la vue du groupe d'onglets est basculée. Lorsque l'événement visibilitychange est déclenché parce que le document est visible ( document.hidden === false ) il appelle captureThumbnails pour chaque onglet, puis il recharge la page et ensuite il appelle captureThumbnails encore. Il stocke les vignettes en session, mais ne les charge jamais. Il y a donc place à amélioration ici :

  • Ne rechargez pas la page à chaque fois qu'elle est affichée
  • Ne capturez pas les vignettes juste avant de recharger la page
  • Rechercher les miniatures de la session au lieu de les capturer à nouveau (ou ne pas enregistrer dans la session, si ce n'est pas nécessaire)

je peux y jeter un oeil si tu veux

Ce serait génial! Merci d'avoir étudié cela :) Je suis toujours en vacances jusqu'à samedi soir PST donc j'apprécie tout le travail que vous avez fait !

J'y ai étudié un peu, et je pense que cela aiderait avec une sorte de bibliothèque de dom virtuel ici. J'hésite à tout faire réagir, mais quelque chose est nécessaire pour contourner le rechargement de la page entière à chaque fois que la page est affichée. Ce qui est nécessaire, c'est un moyen simple de mettre à jour le dom avec uniquement les choses qui ont changé, et comme tout aurait pu changer lorsque la page est affichée, quelque chose de plus intelligent que la mise à jour manuelle des nœuds du dom serait probablement utile. Qu'en penses-tu? Une bibliothèque avec laquelle vous avez de bonnes expériences ?

Il pourrait y avoir un léger cas de sur-ingénierie ici. La première chose à laquelle j'ai pensé était que diriez-vous d'une option pour simplement désactiver les vignettes ? De cette façon, les personnes disposant d'un grand nombre d'onglets peuvent bénéficier d'améliorations immédiates sans que nous ayons à ajouter une grande quantité de code au départ.

Quelques autres choses auxquelles je pourrais penser : le nombre d'onglets ouverts depuis la dernière vue. Si c'est le même, ne rechargez pas les onglets. S'il y a de nouveaux onglets, il pourrait potentiellement y avoir un moyen de charger uniquement ces vignettes et d'extraire le reste du cache ? De quoi penser demain

Je pense donc avoir trouvé (l'une des) sources les plus importantes de cela (du moins lorsque je ne passe pas à la vue panoramique. C'est sa propre boîte de vers).

Il semble que l'auditeur browser.tabs.onUpdated écoute en fait un assez large éventail d'événements, dont seuls certains importent réellement pour maintenir la vue panoramique à jour. Il est à noter que si vous ne définissez aucun filtre, il se déclenchera chaque fois qu'un onglet individuel est masqué ou affiché, ce qui se produit plusieurs fois à chaque fois que vous changez de groupe. Filtrer certains des événements les moins pertinents semble accélérer les choses assez massivement.

Je travaille actuellement sur une branche qui inclut plusieurs optimisations de performances substantielles, dont celle ci-dessus. Cela va me prendre un peu plus de temps pour terminer (surtout parce qu'il y a encore un pic de processeur inexplicablement long que j'essaie de retrouver), mais cela semble assez prometteur jusqu'à présent.

Cette page vous a été utile?
0 / 5 - 0 notes