Web Worker trong React

JavaScript là một luồng đơn. Nó có nghĩa là gì và một chủ đề là gì?

Một luồng là một ngữ cảnh thực thi, là tất cả thông tin mà CPU cần để thực thi một luồng lệnh. Vì vậy, thông thường các ứng dụng JS được chứa trong một luồng.

Nhược điểm?

Hãy tưởng tượng trong ứng dụng web của bạn, bạn cần xử lý một tác vụ dài, Dom là trang web bằng ngôn ngữ thông thường sẽ bị đóng băng vì trình thông dịch cần hoàn thành tác vụ trước khi chuyển sang tác vụ tiếp theo. Anh ta không thể xử lý hai nhiệm vụ cùng một lúc, vì vậy khi anh ta hoàn thành nhiệm vụ dài, và sau đó anh ta sẽ có thể cập nhật Dom và sống lại. Giải pháp để tránh điều đó là sử dụng web worker.

Nhân viên web là gì?

Web worker là một tập lệnh JS được thực thi trong nền một cách độc lập. Nhân viên web thường có thể sử dụng nhiều cpu.

Trong trường hợp này, chúng ta sẽ xem cách sử dụng một web worker trong phản ứng.

Thiết lập :

  • Cài đặt nodeJS sẽ cung cấp cho chúng tôi quyền truy cập vào npm và npx: https://nodejs.org/en/download/
  • Tạo dự án phản ứng: chạy trong thiết bị đầu cuối “npx create-react-app Replace-me-with-the-name-of-the-app - template typecript”

Hãy cùng vui vẻ nào.

Để có thể giao tiếp với nhân viên, chúng tôi sẽ sử dụng onMessage và postMessage ().

Bây giờ chúng ta sẽ viết hàm fibonacci của chúng ta mà chúng ta sẽ được thực thi bởi web worker.

//fibo.worker.js
// eslint-disable-next-line import/no-anonymous-default-export
export default () => {
  // eslint-disable-next-line no-restricted-globals
  self.onmessage = (message) => {
    const nbr = message.data;
    var n1 = 0;
    var n2 = 1;
    var somme = 0;


    for (let i = 2; i <= nbr; i++) {
      somme = n1 + n2;


      n1 = n2;


      n2 = somme;
    }


    const result = nbr ? n2 : n1;


    postMessage(result);
  };
};

// eslint-disable-next-line import/no-anonymous-default-export

// eslint-disable-next-line no-restricted-globals

//woker-builder.js
export default class WorkerBuilder extends Worker {
  constructor(worker) {
    const code = worker.toString();
    const blob = new Blob([`(${code})()`]);
    return new Worker(URL.createObjectURL(blob));
  }
}

import WorkerBuilder from './worker/woker-builder';
import Worker from './worker/fibo.worker';

instance = new WorkerBuilder(Worker);

componentDidMount() {
    instance.onmessage = (message) => {
      if (message) {
        console.log("Message from worker", message.data);
      }
    };
  }
<button onClick   ​={() => instance.postMessage(5)}>
  Send Message
</button>

import React, { Component } from "react";
import logo from "./logo.svg";
import "./App.css";
import WorkerBuilder from "./worker/woker-builder";
import FiboWorker from "./worker/fibo.worker";

const instance = new WorkerBuilder(FiboWorker);
class App extends Component {
  componentDidMount() {
    instance.onmessage = (message) => {
      if (message) {
        console.log("Message from worker", message.data);
      }
    };
  }

  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Web worker in React
          </p>
          <button
            onClick={() => {
              instance.postMessage(5);
            }}
          >Send Message</button>
        </header>
      </div>
    );
  }
}

export default App;

      

Nếu chúng ta đi sâu hơn vào bảng điều khiển trong tab nguồn, chúng ta có thể thấy ở trên cùng bên phải, chúng ta có hai luồng là main và fibo worker có tên là f18f83d0–6ed0–484e-86f1–6d1938793085

Tôi hy vọng bạn đã học được điều gì đó từ bài giảng này, cảm ơn bạn đã đọc.

Suggested posts

Mẹo để chuyển đổi sang lĩnh vực an ninh mạng mà không cần nền tảng kỹ thuật.

Mẹo để chuyển đổi sang lĩnh vực an ninh mạng mà không cần nền tảng kỹ thuật.

Vào năm 2022, tôi chuyển từ vai trò phi kỹ thuật sang vai trò an ninh mạng. Tôi đã có bằng tiếng Đức đầu tiên, tôi biết bạn đang bị sốc và tò mò về cách tôi có thể chuyển đổi thành công, Chà, nó chỉ xảy ra thôi.

Tránh những hậu quả tàn khốc của đột quỵ: Học hỏi từ hành trình của một gia đình.

Tránh những hậu quả tàn khốc của đột quỵ: Học hỏi từ hành trình của một gia đình.

Giới thiệu Đột quỵ là một trường hợp cấp cứu y tế có thể tấn công bất kỳ ai vào bất kỳ lúc nào. Nó xảy ra khi lưu lượng máu đến một phần của não bị gián đoạn, dẫn đến mất chức năng não đột ngột.

Related posts

Mối đe dọa đó Lưu trữ: Tập 7 Black Basta

Mối đe dọa đó Lưu trữ: Tập 7 Black Basta

Trong thế giới kết nối ngày nay, mối đe dọa tấn công mạng phổ biến hơn bao giờ hết. Tội phạm mạng và các tác nhân quốc gia liên tục tìm cách khai thác các lỗ hổng và đánh cắp dữ liệu có giá trị, gây rủi ro đáng kể cho các tổ chức thuộc mọi quy mô.

Tại sao một số dịch giả tự do đang giả mạo cuộc sống của họ

Tại sao một số dịch giả tự do đang giả mạo cuộc sống của họ

Gần đây, tôi đã truy cập Linkedin, mạng xã hội chuyên nghiệp lớn nhất thế giới và tìm thấy các bài đăng của các nhà thiết kế tự do mà tôi theo dõi, những người đã thu hút sự chú ý của tôi. Tất cả họ đều đăng ảnh chụp từ máy bay, trên bãi biển với máy tính xách tay của họ, từ bể bơi và văn phòng với những khung cảnh tuyệt vời.

Tìm kiếm thông tin về tên miền

Đoạn trích từ Small, Sharp Software Tools của Brian P. Hogan

Tìm kiếm thông tin về tên miền

Khi bạn gửi yêu cầu tới facebook.com, máy tính của bạn sẽ tra cứu tên miền để dịch tên miền đó thành địa chỉ IP để máy tính của bạn có thể thực hiện kết nối đó.

Học tập trong tuần làm việc quan trọng hơn bạn nghĩ

Học tập trong tuần làm việc quan trọng hơn bạn nghĩ

Chúng ta thường thấy mình phải vật lộn để thực hiện những gì chúng ta biết là tốt cho chúng ta. Từ việc nói với một người quan trọng khác rằng chúng ta yêu họ đến việc nhớ nói chuyện như một tên cướp biển, sẽ luôn có những người cho rằng không cần thiết phải tổ chức các sự kiện trong ngày, tuần hoặc tháng vì họ đã làm những việc đó rồi.