Home Web Front-end JS Tutorial WebWorkers - high performance computing for the front end

WebWorkers - high performance computing for the front end

Nov 18, 2017 pm 02:30 PM
web high performance

Before reading the full text, let me briefly introduce to you what WebWorkers are, and what is the relationship between WebWorkers and web high-performance computing.

First of all, what are WebWorkers?

Simply put, WebWorkers is a new API of HTML5. Web developers can use this API to run a script in the background without blocking the UI. It can be used to do things that require a lot of calculations and make full use of CPU multi-cores.

You can read this article introductionhttps://www.html5rocks.com/en/tutorials/workers/basics/, or the corresponding Chinese version.


The Web Workers specification defines an API for spawning background scripts in your web application. Web Workers allow you to do things like fire up long-running scripts to handle computationally intensive tasks, but without blocking the UI or other scripts to handle user interactions.


You can open this link (https: //nerget.com/rayjs-mt/rayjs.html) Experience the acceleration effect of WebWorkers yourself.


Now browsers basically support WebWorkers.

WebWorkers - high performance computing for the front end

Parallel.js

It is still too cumbersome to use the WebWorkers interface directly. Fortunately, someone has already encapsulated it: Parallel.js.


Note that Parallel.js can be installed through node:


##$ npm install paralleljs


But this is used under

node.js, using the cluster module of node. If you want to use it in the browser, you need to directly apply js:

<script src="parallel.js"></script>
Copy after login


and then you can get a global variable, Parallel. Parallel provides two functional programming interfaces, map and reduce, which make concurrent operations very convenient.


Let’s first define our problem. Since the business is relatively complex, I will simplify the problem here into finding the sum of 1-1,0000,0000, and then subtract the Going from 1-1,0000,0000, the answer is obvious: 0! This is done because if the number is too large, there will be data accuracy problems, and the results of the two methods will be somewhat different, which will make people feel that the parallel method is unreliable. This problem takes about 1.5s if I simply run js under my mac pro chrome61 (our actual business problem takes 15s. In order to avoid killing the browser during user testing, we have simplified the problem).

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;
    });
}
Copy after login


The code is relatively simple. Here I will talk about a few pitfalls I encountered when I first started using it.


require all required functions


For example, if sum is used in the appeal code, you need to require(sum in advance ), if another function f is used in sum, you also need to require(f). Similarly, if g is used in f, you also need to require(g) until you require all the defined functions used. . . .


Can't require the variable


In our appeal code, I originally defined N1, but it couldn't be used


Problems after ES6 was compiled into ES5 and Chrome did not report an error


In the actual project, we used the features of ES6 at the beginning: Array destructuring. Originally this was a very simple feature, but now most browsers support it. However, the babel I configured at that time will be compiled into ES5, so the code _slicedToArray will be generated. You can test it online with Babel, and it will never work under Chrome. There is no error message. After checking for a long time, I opened it in Firefox and found the error message:


##ReferenceError: _slicedToArray is not defined


It seems that Chrome is not omnipotent. . .


You can test it on this Demo page. The speed increase is about 4 times. Of course, it still depends on the number of cores of your computer's CPU. In addition, I later tested Firefox 55.0.3 (64-bit) on the same computer, and the appeal code actually only took 190ms! ! ! It is also about 190ms under Safari9.1.1. .

I will also introduce other attributes and indicators of front-end high-performance computing to you later, so please continue to pay attention.

The above is the detailed content of WebWorkers - high performance computing for the front end. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to use Swoole to implement a high-performance HTTP reverse proxy server How to use Swoole to implement a high-performance HTTP reverse proxy server Nov 07, 2023 am 08:18 AM

How to use Swoole to implement a high-performance HTTP reverse proxy server Swoole is a high-performance, asynchronous, and concurrent network communication framework based on the PHP language. It provides a series of network functions and can be used to implement HTTP servers, WebSocket servers, etc. In this article, we will introduce how to use Swoole to implement a high-performance HTTP reverse proxy server and provide specific code examples. Environment configuration First, we need to install the Swoole extension on the server

PHP and WebSocket: Building high-performance, real-time applications PHP and WebSocket: Building high-performance, real-time applications Dec 17, 2023 pm 12:58 PM

PHP and WebSocket: Building high-performance real-time applications As the Internet develops and user needs increase, real-time applications are becoming more and more common. The traditional HTTP protocol has some limitations when processing real-time data, such as the need for frequent polling or long polling to obtain the latest data. To solve this problem, WebSocket came into being. WebSocket is an advanced communication protocol that provides two-way communication capabilities, allowing real-time sending and receiving between the browser and the server.

C++ High-Performance Programming Tips: Optimizing Code for Large-Scale Data Processing C++ High-Performance Programming Tips: Optimizing Code for Large-Scale Data Processing Nov 27, 2023 am 08:29 AM

C++ is a high-performance programming language that provides developers with flexibility and scalability. Especially in large-scale data processing scenarios, the efficiency and fast computing speed of C++ are very important. This article will introduce some techniques for optimizing C++ code to cope with large-scale data processing needs. Using STL containers instead of traditional arrays In C++ programming, arrays are one of the commonly used data structures. However, in large-scale data processing, using STL containers, such as vector, deque, list, set, etc., can be more

Use Go language to develop and implement high-performance speech recognition applications Use Go language to develop and implement high-performance speech recognition applications Nov 20, 2023 am 08:11 AM

With the continuous development of science and technology, speech recognition technology has also made great progress and application. Speech recognition applications are widely used in voice assistants, smart speakers, virtual reality and other fields, providing people with a more convenient and intelligent way of interaction. How to implement high-performance speech recognition applications has become a question worth exploring. In recent years, Go language, as a high-performance programming language, has attracted much attention in the development of speech recognition applications. The Go language has the characteristics of high concurrency, concise writing, and fast execution speed. It is very suitable for building high-performance

Use Go language to develop high-performance face recognition applications Use Go language to develop high-performance face recognition applications Nov 20, 2023 am 09:48 AM

Use Go language to develop high-performance face recognition applications Abstract: Face recognition technology is a very popular application field in today's Internet era. This article introduces the steps and processes for developing high-performance face recognition applications using Go language. By using the concurrency, high performance, and ease-of-use features of the Go language, developers can more easily build high-performance face recognition applications. Introduction: In today's information society, face recognition technology is widely used in security monitoring, face payment, face unlocking and other fields. With the rapid development of the Internet

How to enable administrative access from the cockpit web UI How to enable administrative access from the cockpit web UI Mar 20, 2024 pm 06:56 PM

Cockpit is a web-based graphical interface for Linux servers. It is mainly intended to make managing Linux servers easier for new/expert users. In this article, we will discuss Cockpit access modes and how to switch administrative access to Cockpit from CockpitWebUI. Content Topics: Cockpit Entry Modes Finding the Current Cockpit Access Mode Enable Administrative Access for Cockpit from CockpitWebUI Disabling Administrative Access for Cockpit from CockpitWebUI Conclusion Cockpit Entry Modes The cockpit has two access modes: Restricted Access: This is the default for the cockpit access mode. In this access mode you cannot access the web user from the cockpit

what does web mean what does web mean Jan 09, 2024 pm 04:50 PM

The web is a global wide area network, also known as the World Wide Web, which is an application form of the Internet. The Web is an information system based on hypertext and hypermedia, which allows users to browse and obtain information by jumping between different web pages through hyperlinks. The basis of the Web is the Internet, which uses unified and standardized protocols and languages ​​to enable data exchange and information sharing between different computers.

Is PHP front-end or back-end in web development? Is PHP front-end or back-end in web development? Mar 24, 2024 pm 02:18 PM

PHP belongs to the backend in web development. PHP is a server-side scripting language, mainly used to process server-side logic and generate dynamic web content. Compared with front-end technology, PHP is more used for back-end operations such as interacting with databases, processing user requests, and generating page content. Next, specific code examples will be used to illustrate the application of PHP in back-end development. First, let's look at a simple PHP code example for connecting to a database and querying data:

See all articles