2

In letzter Zeit stoße ich auf Web-Arbeiter, es ist eine Möglichkeit, Ihre Skripte parallel laufen zu lassen. Geben Sie Ihr Skript in den Hintergrund, ohne die Benutzeroberfläche "einzufrieren". Als ich das herausfand, denke ich, dass ich eine neue Technik gefunden habe, die in meine ionische App implementiert werden kann, die eine signifikante Verbesserung der UX-Leistung bringen sollte.Werden Web-Mitarbeiter von ionic app profitieren?

Aber nach einigem Suchen finde ich kaum irgendeinen Artikel, der über Netzarbeiter im Ionen spricht. Als Web-Arbeiter ist das nicht etwas ganz Neues, warum gibt es da kaum Erwähnung in ionischen oder gar eckigen? Ist ionischen nicht geeignet zu implementieren? Oder ist es etwas anderes, das ich übersehe?

+1

Was versuchen Sie mit Web-Mitarbeitern zu erreichen? – guest271314

Antwort

10

Werden Web-Mitarbeiter von ionic app profitieren?

Das hängt ganz davon ab, ob Sie eine schwere Verarbeitung haben, die Sie an Web-Arbeiter abladen können.

Als Web-Arbeiter ist nicht etwas sehr Neues, warum gibt es kaum Erwähnung darüber in ionischen oder sogar eckigen?

Da Web-Arbeiter nichts mit UI-Frameworks zu tun hat, weil Code in Web-Arbeiter nicht direkt auf die Benutzeroberfläche des Browsers manipulieren kann (zB kann das DOM nicht manipulieren oder alert s tun, spielt Audio, etc.). Daher hat der Code von Web-Arbeitern für eine UI-Framework-Bibliothek wenig zu tun, da die Aufgabe dieser Bibliothek hauptsächlich darin besteht, Dinge zu tun, die der Web-Arbeiter nicht tun kann. Stattdessen gibt es einen Hauptthread für die Benutzeroberfläche (den Standard-JavaScript-Thread für die Seite), der das DOM und ähnliches verwenden darf, und hat daher Grund, UI-Framework-Bibliotheken zu verwenden.

Details:

Ursprünglich JavaScript in Webbrowsern liefen auf einem einzigen Thread, der auch die Benutzeroberfläche aktualisiert. Dies führte zu einem sehr einfachen Modell ohne Nebenläufigkeitsprobleme und war enorm einfach und erfolgreich. Aber es ist auch begrenzend: Als JavaScript begann, für immer mehr Dinge verwendet zu werden, wurde dieser eine UI-Thread in der Verarbeitung steckengeblieben, und Browser mussten Heuristiken implementieren, um "langsame Skript" -Warnungen zu machen und so, dass der Benutzer den Browser nicht dachte war gefroren.

Web-Worker wurden eingeführt, damit wir Threads in Browser-gehostetem JavaScript haben und gleichzeitig die leistungsstarke Einfachheit des einzelnen UI-Threads ohne Nebenläufigkeitsprobleme beibehalten können (deshalb teilen sie auch keinen globalen Datenbereich mit anderen) Threads). Sie lassen uns schwere Verarbeitung in anderen Threads durchführen, aber nicht ermöglicht uns die UI in diesen Threads zu aktualisieren.

Diese Arbeit kann indirekt bezogen auf UI sein. Zum Beispiel ist es in modernen Browsern möglich, bestimmte Arten von Objekten, genannt transferrable objects, vom Haupt-UI-Code an den Web-Worker-Code zu senden. IIRC, Leinwände sind übertragbar. Wir umgehen das Problem der Parallelität, denn sobald Sie ein übertragbares Objekt von einem Thread auf einen anderen veröffentlichen, ist es nur im Ziel und nicht mehr in der Quelle verfügbar. Der Hauptbenutzeroberflächenthread, der direkt mit der Benutzeroberfläche interagieren darf, kann also etwas (wie eine Arbeitsfläche) übernehmen und an einen Web-Worker übertragen, um etwas daran zu tun (vielleicht eine Transformation) und es dann zurückzusenden. Da diese Arbeit jedoch nicht direkt die Browser-Benutzeroberfläche (DOM usw.) manipulieren würde, ist es unwahrscheinlich, dass viel Aufruf für die Verwendung einer UI-Framework-Bibliothek erfolgt.

+0

Danke für Ihre Antwort. Lassen Sie mich sagen, ich habe einige UI-Verarbeitung, kann ich es an Web-Arbeiter auslagern? Nachdem die Verarbeitung abgeschlossen ist, erhalten Sie das Ergebnis und drücken Sie es auf der Benutzeroberfläche? – user1995781

+1

@ user1995781: Es hängt von der Verarbeitung ab.In aktuellen Browsern ist es möglich, eine Zeichenfläche aus dem Hauptthread der Benutzeroberfläche in einen Web-Worker zu übertragen, die Zeichenfläche im Web-Worker zu bearbeiten und sie dann an den Haupt-UI-Thread zurück zu übertragen, der sie erneut anzeigen kann. Dies liegt daran, dass die Canvases [* übertragbare Objekte *] sind (https://www.w3.org/TR/html5/infrastructure.html#transferable-objects): Der Vorgang, bei dem ein Beitrag an einen oder von einem Web-Mitarbeiter gesendet wird, macht ihn ungültig Sendekontext und erlaubt dem empfangenden Kontext, ihn zu verwenden. (Ich bin mir nicht sofort sicher, ob Canvas übertragbar ist oder nur seine Bilddaten.) –