Panorama-tab-groups: Das Wechseln von Tab-Gruppen ist langsam und sehr ressourcenintensiv

Erstellt am 29. Dez. 2018  ·  7Kommentare  ·  Quelle: projectdelphai/panorama-tab-groups

Kann man das irgendwie beheben?

Hilfreichster Kommentar

Ich sehe aus dem Code, dass die Seite jedes Mal neu geladen wird, wenn die Registerkartengruppenansicht umgeschaltet wird. Wenn das Ereignis visibilitychange ausgelöst wird, weil das Dokument sichtbar ist ( document.hidden === false ), ruft es captureThumbnails für jede Registerkarte auf, lädt dann die Seite neu und ruft dann captureThumbnails wieder. Es speichert die Miniaturansichten in der Sitzung, lädt sie jedoch nie. Hier besteht also noch Verbesserungspotential:

  • Laden Sie die Seite nicht jedes Mal neu, wenn sie angezeigt wird
  • Erfassen Sie keine Miniaturansichten, bevor Sie die Seite neu laden
  • Thumbnails aus der Sitzung suchen, anstatt sie erneut aufzunehmen (oder nicht in der Sitzung speichern, wenn sie nicht benötigt wird)

Ich kann mir die mal anschauen wenn du willst

Alle 7 Kommentare

🤔 Ich habe bei vielen Gruppen einen etwas langsameren Wechsel erlebt.

Würden Sie uns bitte ein paar Zahlen nennen?

Wie viele Gruppen/Registerkarten haben Sie?
Wie misst man die Ressourcenintensität?

Ich habe zwei Gruppen, eine mit 219 Registerkarten, die andere mit sechs.

Die Lüfter auf meinem System beginnen sich zu drehen und wenn ich Audio über den Lesemodus abspiele. Der Ton stoppt und stottert.

System: Nightly, Fedora 29, Intel® Core™ i7-4710HQ CPU @ 2,50 GHz × 8, GeForce GTX 860M/PCIe/SSE2.

Ich sehe aus dem Code, dass die Seite jedes Mal neu geladen wird, wenn die Registerkartengruppenansicht umgeschaltet wird. Wenn das Ereignis visibilitychange ausgelöst wird, weil das Dokument sichtbar ist ( document.hidden === false ), ruft es captureThumbnails für jede Registerkarte auf, lädt dann die Seite neu und ruft dann captureThumbnails wieder. Es speichert die Miniaturansichten in der Sitzung, lädt sie jedoch nie. Hier besteht also noch Verbesserungspotential:

  • Laden Sie die Seite nicht jedes Mal neu, wenn sie angezeigt wird
  • Erfassen Sie keine Miniaturansichten, bevor Sie die Seite neu laden
  • Thumbnails aus der Sitzung suchen, anstatt sie erneut aufzunehmen (oder nicht in der Sitzung speichern, wenn sie nicht benötigt wird)

Ich kann mir die mal anschauen wenn du willst

Das wäre großartig! Danke, dass ihr euch das angeschaut habt :) Ich bin noch bis Samstagabend PST im Urlaub, also schätze ich all die Arbeit, die ihr geleistet habt!

Ich habe mir das ein bisschen angesehen und denke, es würde hier mit einer Art virtueller Dom-Bibliothek helfen. Ich zögere zwar, alles auf Reagieren zu bringen, aber es ist etwas erforderlich, um das Neuladen der gesamten Seite jedes Mal, wenn die Seite angezeigt wird, zu umgehen. Was benötigt wird, ist eine einfache Möglichkeit, das dom nur mit den Dingen zu aktualisieren, die sich geändert haben. Was denkst du? Gibt es eine Bibliothek, mit der Sie gute Erfahrungen gemacht haben?

Hier kann es zu einem leichten Fall von Over-Engineering kommen. Das erste, woran ich dachte, war, wie wäre es mit einer Option, um Thumbnails einfach zu deaktivieren? Auf diese Weise können Personen mit einer großen Anzahl von Registerkarten eine sofortige Verbesserung erfahren, ohne dass wir im Voraus eine große Menge Code hinzufügen müssen.

Einige andere Dinge, die mir einfallen könnten: die Anzahl der seit der letzten Ansicht geöffneten Registerkarten. Wenn es gleich ist, laden Sie die Tabs einfach nicht neu. Wenn es neue Registerkarten gibt, gibt es möglicherweise eine Möglichkeit, nur diese Miniaturansichten zu laden und den Rest aus dem Cache zu ziehen? Morgen etwas zum Nachdenken

Ich glaube, ich habe (eine der) größeren Quellen dafür gefunden (zumindest wenn nicht auf die Panoramaansicht umgeschaltet wird. Das ist eine eigene Dose).

Es sieht so aus, als ob der browser.tabs.onUpdated Listener tatsächlich auf eine ziemlich breite Palette von Ereignissen hört, von denen nur einige wirklich wichtig sind, um die Panoramaansicht auf dem neuesten Stand zu halten. Beachten Sie, dass, wenn Sie keine Filter festlegen, es jedes Mal ausgelöst wird, wenn eine einzelne Registerkarte ausgeblendet oder ausgeblendet wird, was bei jedem Gruppenwechsel häufig der Fall ist. Das Herausfiltern einiger weniger relevanter Ereignisse scheint die Dinge ziemlich stark zu beschleunigen.

Ich arbeite derzeit an einem Zweig, der mehrere wesentliche Leistungsoptimierungen enthält, einschließlich der oben genannten. Es wird etwas länger dauern, bis ich fertig bin (vor allem, weil ich immer noch eine unerklärlich lange CPU-Spitze habe, die ich aufspüren möchte), aber es sieht bisher ziemlich vielversprechend aus.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen