Heim Web-Frontend js-Tutorial WebWorkers – Hochleistungsrechnen für das Frontend

WebWorkers – Hochleistungsrechnen für das Frontend

Nov 18, 2017 pm 02:30 PM
web 高性能

Bevor ich den vollständigen Text lese, möchte ich Ihnen kurz vorstellen, was WebWorker sind und welche Beziehung zwischen WebWorkern und Web-High-Performance-Computing besteht.

Was sind WebWorker?

Einfach ausgedrückt ist WebWorkers eine neue API von HTML5, mit der Webentwickler ein Skript im Hintergrund ausführen können, ohne die Benutzeroberfläche zu blockieren volle Nutzung der CPU-Mehrkerne.

Sie können diese Artikeleinführunghttps://www.html5rocks.com/en/tutorials/workers/basics/ oder die entsprechende chinesische Version lesen.


Die Web Workers-Spezifikation definiert eine API zum Spawnen von Hintergrundskripten in Ihrer Webanwendung. Mit Web Workers können Sie Dinge wie das Starten von Langzeitskripten tun Skripte zur Bewältigung rechenintensiver Aufgaben, ohne jedoch die Benutzeroberfläche oder andere Skripte zur Bewältigung von Benutzerinteraktionen zu blockieren.


Sie können diesen Link öffnen (https : //nerget.com/rayjs-mt/rayjs.html) Erleben Sie selbst den Beschleunigungseffekt von WebWorkers.


Jetzt unterstützen Browser grundsätzlich WebWorker.

WebWorkers – Hochleistungsrechnen für das Frontend
Parallel.js

Es ist immer noch zu umständlich, die WebWorkers-Schnittstelle direkt zu verwenden: Parallel.js.


Beachten Sie, dass Parallel.js über den Knoten installiert werden kann

:


$ npm install paralleljs


Aber dies wird unter

node.js

verwendet, wobei das Clustermodul von node verwendet wird. Wenn Sie es im Browser verwenden möchten, müssen Sie js direkt anwenden:

<script src="parallel.js"></script>
Nach dem Login kopieren


und dann können Sie eine globale Variable, Parallel, erhalten. Parallel bietet zwei funktionale Programmierschnittstellen, Map und Reduce, die gleichzeitige Vorgänge sehr praktisch machen.


Da das Geschäft komplexer ist, vereinfache ich das Problem hier, indem ich die Summe von 1-1.000.0000 ermittle und dann Going davon subtrahiere Von 1-1.000.0000 liegt die Antwort auf der Hand: 0! Dies liegt daran, dass es bei einer zu großen Anzahl zu Problemen mit der Datengenauigkeit kommt und die Ergebnisse der beiden Methoden etwas unterschiedlich ausfallen, was dazu führt, dass die Leute das Gefühl haben, dass die parallele Methode unzuverlässig ist. Dieses Problem dauert etwa 1,5 Sekunden, wenn ich js einfach direkt unter meinem Mac Pro Chrome61 ausführe (unser eigentliches Geschäftsproblem dauert 15 Sekunden. Um zu vermeiden, dass der Browser während des Benutzertests beendet wird, haben wir das Problem vereinfacht).

const N = 100000000;// 总次数1亿
 
function sum(start, end) {
  let total = 0;
  for (let i = start; i<=end; i += 1) total += i;
  for (let i = start; i<=end; i += 1) total -= i;
  return total;
}
 
function paraSum(N) {
  const N1 = N / 10;//我们分成10分,没分分别交给一个web worker,parallel.js会根据电脑的CPU核数建立适量的workers
  let p = new Parallel([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    .require(sum);
  return p.map(n => sum((n - 1) * 10000000 + 1, n * 10000000))// 在parallel.js里面没法直接应用外部变量N1
    .reduce(data => {
      const acc = data[0];
      const e = data[1];
      return acc + e;
    });
}
Nach dem Login kopieren


Der Code ist relativ einfach. Hier werde ich über einige Fallstricke sprechen, auf die ich gestoßen bin, als ich anfing, ihn zu verwenden.


alle erforderlichen Funktionen erforderlich


Wenn beispielsweise im Einspruchscode eine Summe verwendet wird, müssen Sie „Anfordern“ angeben (Summe im Voraus): Wenn eine andere Funktion f in sum verwendet wird, müssen Sie auch require(f) verwenden. Wenn g in f verwendet wird, müssen Sie ebenfalls require(g) verwenden, bis alle definierten Funktionen verwendet werden. . . .


Kann keine Variable erfordern


In unserem Einspruchscode habe ich ursprünglich N1 definiert, aber es hat nicht funktioniert


Probleme, nachdem ES6 in ES5 kompiliert wurde und Chrome keinen Fehler gemeldet hat


Im eigentlichen Projekt haben wir verwendet Die Funktionen von ES6 am Anfang: Array-Destrukturierung. Ursprünglich war dies eine sehr einfache Funktion, aber jetzt unterstützen die meisten Browser sie. Das von mir damals konfigurierte Babel wird jedoch in ES5 generiert, sodass der Code _slicedToArray generiert wird. Sie können es online mit Babel testen Funktioniert unter Chrome. Nach längerem Suchen habe ich es in Firefox geöffnet und die Fehlermeldung gefunden:


ReferenceError: _slicedToArray is not Defined


Es scheint, dass Chrome nicht allmächtig ist. . .


Sie können es auf dieser Demoseite testen. Die Geschwindigkeitssteigerung beträgt natürlich immer noch die Anzahl der Kerne der CPU Ihres Computers. Außerdem habe ich später Firefox 55.0.3 (64-Bit) auf demselben Computer getestet und der Einspruchscode dauerte tatsächlich nur 190 ms! ! ! Unter Safari9.1.1 beträgt sie ebenfalls etwa 190 ms. .

Ich werde Ihnen später auch andere Attribute und Indikatoren des Front-End-Hochleistungsrechnens vorstellen, also achten Sie bitte weiterhin darauf.

Das obige ist der detaillierte Inhalt vonWebWorkers – Hochleistungsrechnen für das Frontend. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie mit Swoole einen leistungsstarken HTTP-Reverse-Proxy-Server So implementieren Sie mit Swoole einen leistungsstarken HTTP-Reverse-Proxy-Server Nov 07, 2023 am 08:18 AM

So implementieren Sie mit Swoole einen leistungsstarken HTTP-Reverse-Proxy-Server. Swoole ist ein leistungsstarkes, asynchrones und gleichzeitiges Netzwerkkommunikations-Framework, das auf der PHP-Sprache basiert. Es bietet eine Reihe von Netzwerkfunktionen und kann zur Implementierung von HTTP-Servern, WebSocket-Servern usw. verwendet werden. In diesem Artikel stellen wir vor, wie Sie mit Swoole einen leistungsstarken HTTP-Reverse-Proxy-Server implementieren, und stellen spezifische Codebeispiele bereit. Umgebungskonfiguration Zuerst müssen wir die Swoole-Erweiterung auf dem Server installieren

PHP und WebSocket: Erstellen leistungsstarker Echtzeitanwendungen PHP und WebSocket: Erstellen leistungsstarker Echtzeitanwendungen Dec 17, 2023 pm 12:58 PM

PHP und WebSocket: Erstellen leistungsstarker Echtzeitanwendungen Mit der Weiterentwicklung des Internets und steigenden Benutzeranforderungen werden Echtzeitanwendungen immer häufiger eingesetzt. Das herkömmliche HTTP-Protokoll weist einige Einschränkungen bei der Verarbeitung von Echtzeitdaten auf, z. B. die Notwendigkeit häufiger oder langer Abfragen, um die neuesten Daten zu erhalten. Um dieses Problem zu lösen, wurde WebSocket ins Leben gerufen. WebSocket ist ein fortschrittliches Kommunikationsprotokoll, das bidirektionale Kommunikationsfunktionen bietet und das Senden und Empfangen in Echtzeit zwischen dem Browser und dem Server ermöglicht.

Tipps zur leistungsstarken C++-Programmierung: Optimierung des Codes für die Verarbeitung großer Datenmengen Tipps zur leistungsstarken C++-Programmierung: Optimierung des Codes für die Verarbeitung großer Datenmengen Nov 27, 2023 am 08:29 AM

C++ ist eine leistungsstarke Programmiersprache, die Entwicklern Flexibilität und Skalierbarkeit bietet. Insbesondere in großen Datenverarbeitungsszenarien sind die Effizienz und die schnelle Rechengeschwindigkeit von C++ sehr wichtig. In diesem Artikel werden einige Techniken zur Optimierung von C++-Code vorgestellt, um umfangreiche Datenverarbeitungsanforderungen zu bewältigen. Verwenden von STL-Containern anstelle herkömmlicher Arrays In der C++-Programmierung sind Arrays eine der am häufigsten verwendeten Datenstrukturen. Bei der Datenverarbeitung in großem Maßstab kann die Verwendung von STL-Containern wie Vektor, Deque, Liste und Set usw. jedoch mehr sein

Verwenden Sie die Go-Sprache, um leistungsstarke Spracherkennungsanwendungen zu entwickeln und zu implementieren Verwenden Sie die Go-Sprache, um leistungsstarke Spracherkennungsanwendungen zu entwickeln und zu implementieren Nov 20, 2023 am 08:11 AM

Mit der kontinuierlichen Weiterentwicklung von Wissenschaft und Technologie hat auch die Spracherkennungstechnologie große Fortschritte und Anwendungen gemacht. Spracherkennungsanwendungen werden häufig in Sprachassistenten, intelligenten Lautsprechern, virtueller Realität und anderen Bereichen eingesetzt und bieten Menschen eine bequemere und intelligentere Art der Interaktion. Wie leistungsstarke Spracherkennungsanwendungen implementiert werden können, ist zu einer Frage geworden, die es wert ist, untersucht zu werden. In den letzten Jahren hat die Go-Sprache als leistungsstarke Programmiersprache große Aufmerksamkeit bei der Entwicklung von Spracherkennungsanwendungen auf sich gezogen. Die Go-Sprache zeichnet sich durch hohe Parallelität, präzises Schreiben und schnelle Ausführungsgeschwindigkeit aus. Sie eignet sich sehr gut für den Aufbau hoher Leistung

Verwenden Sie die Go-Sprache, um leistungsstarke Gesichtserkennungsanwendungen zu entwickeln Verwenden Sie die Go-Sprache, um leistungsstarke Gesichtserkennungsanwendungen zu entwickeln Nov 20, 2023 am 09:48 AM

Verwenden Sie die Go-Sprache, um leistungsstarke Gesichtserkennungsanwendungen zu entwickeln. Zusammenfassung: Die Gesichtserkennungstechnologie ist im heutigen Internetzeitalter ein sehr beliebtes Anwendungsfeld. In diesem Artikel werden die Schritte und Prozesse zur Entwicklung leistungsstarker Gesichtserkennungsanwendungen mithilfe der Go-Sprache vorgestellt. Durch die Nutzung der Parallelitäts-, Hochleistungs- und Benutzerfreundlichkeitsfunktionen der Go-Sprache können Entwickler einfacher leistungsstarke Gesichtserkennungsanwendungen erstellen. Einleitung: In der heutigen Informationsgesellschaft wird Gesichtserkennungstechnologie häufig in der Sicherheitsüberwachung, Gesichtszahlung, Gesichtsentsperrung und anderen Bereichen eingesetzt. Mit der rasanten Entwicklung des Internets

So aktivieren Sie den administrativen Zugriff über die Cockpit-Web-Benutzeroberfläche So aktivieren Sie den administrativen Zugriff über die Cockpit-Web-Benutzeroberfläche Mar 20, 2024 pm 06:56 PM

Cockpit ist eine webbasierte grafische Oberfläche für Linux-Server. Es soll vor allem neuen/erfahrenen Benutzern die Verwaltung von Linux-Servern erleichtern. In diesem Artikel besprechen wir die Cockpit-Zugriffsmodi und wie Sie den Administratorzugriff von CockpitWebUI auf das Cockpit umstellen. Inhaltsthemen: Cockpit-Eingabemodi Ermitteln des aktuellen Cockpit-Zugriffsmodus Aktivieren des Verwaltungszugriffs für das Cockpit über CockpitWebUI Deaktivieren des Verwaltungszugriffs für das Cockpit über CockpitWebUI Fazit Cockpit-Eingabemodi Das Cockpit verfügt über zwei Zugriffsmodi: Eingeschränkter Zugriff: Dies ist die Standardeinstellung für den Cockpit-Zugriffsmodus. In diesem Zugriffsmodus können Sie vom Cockpit aus nicht auf den Webbenutzer zugreifen

Was bedeutet Web? Was bedeutet Web? Jan 09, 2024 pm 04:50 PM

Das Web ist ein globales Weitverkehrsnetz, auch World Wide Web genannt, eine Anwendungsform des Internets. Das Web ist ein auf Hypertext und Hypermedia basierendes Informationssystem, das es Benutzern ermöglicht, durch Hyperlinks zwischen verschiedenen Webseiten zu wechseln und Informationen abzurufen. Die Grundlage des Webs ist das Internet, das einheitliche und standardisierte Protokolle und Sprachen verwendet, um den Datenaustausch und Informationsaustausch zwischen verschiedenen Computern zu ermöglichen.

Ist PHP Front-End oder Back-End in der Webentwicklung? Ist PHP Front-End oder Back-End in der Webentwicklung? Mar 24, 2024 pm 02:18 PM

PHP gehört zum Backend in der Webentwicklung. PHP ist eine serverseitige Skriptsprache, die hauptsächlich zur Verarbeitung serverseitiger Logik und zur Generierung dynamischer Webinhalte verwendet wird. Im Vergleich zur Front-End-Technologie wird PHP eher für Back-End-Vorgänge wie die Interaktion mit Datenbanken, die Verarbeitung von Benutzeranfragen und die Generierung von Seiteninhalten verwendet. Anschließend wird anhand konkreter Codebeispiele die Anwendung von PHP in der Backend-Entwicklung veranschaulicht. Schauen wir uns zunächst ein einfaches PHP-Codebeispiel zum Herstellen einer Verbindung zu einer Datenbank und zum Abfragen von Daten an:

See all articles