React의 웹 작업자

JavaScript는 단일 스레드입니다. 그것은 무엇을 의미하고 스레드는 무엇입니까?

스레드는 CPU가 명령 스트림을 실행하는 데 필요한 모든 정보 인 실행 컨텍스트입니다. 따라서 일반적으로 JS 애플리케이션은 하나의 스레드에 포함됩니다.

단점?

웹 앱에서 긴 작업을 처리해야한다고 상상해보십시오. 통역사가 다음 작업으로 이동하기 전에 작업을 완료해야하기 때문에 공용 언어로 된 웹 페이지 인 Dom이 멈출 것입니다. 동시에 두 가지 작업을 처리 할 수 ​​없으므로 긴 작업을 완료하면 Dom을 업데이트하고 다시 살아날 수 있습니다. 이를 피하는 해결책은 웹 작업자를 사용하는 것입니다.

웹 워커 란 무엇입니까?

웹 작업자는 백그라운드에서 독립적으로 실행되는 JS 스크립트입니다. 웹 작업자는 종종 다중 CPU를 활용할 수 있습니다.

이 경우 반응에서 웹 워커를 사용하는 방법을 살펴 보겠습니다.

설정 :

  • npm 및 npx에 대한 액세스를 제공하는 nodeJS 설치 https://nodejs.org/en/download/
  • 반응 프로젝트 생성 : 터미널에서 실행 "npx create-react-app replace-me-with-the-name-of-the-app — template typescript"

즐기자.

작업자와 통신 할 수 있도록 onMessage 및 postMessage ()를 사용합니다.

이제 웹 워커가 실행할 피보나치 함수를 작성하겠습니다.

//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;

      

소스 탭의 콘솔로 더 깊이 들어가면 오른쪽 상단에 기본 스레드 두 개와 f18f83d0–6ed0–484e-86f1–6d1938793085라는 이름의 fibo 작업자가 있습니다.

이 강의에서 뭔가를 배웠기를 바랍니다. 읽어 주셔서 감사합니다.

Suggested posts

기술적 배경 없이 사이버 보안으로 전환하기 위한 팁.

기술적 배경 없이 사이버 보안으로 전환하기 위한 팁.

2022년에 저는 비기술적인 역할에서 사이버 보안으로 전환했습니다. 저는 독일어로 첫 학위를 받았습니다, 제가 어떻게 성공적으로 전환할 수 있었는지에 대해 여러분이 충격을 받고 궁금해하고 있다는 것을 알고 있습니다.

뇌졸중의 치명적인 결과 피하기: 가족의 여정에서 배우기 .

뇌졸중의 치명적인 결과 피하기: 가족의 여정에서 배우기 .

머리말 뇌졸중은 누구에게나 언제든지 닥칠 수 있는 의학적 응급 상황입니다. 뇌의 한 부분으로의 혈류가 중단되어 갑작스러운 뇌 기능 상실로 이어질 때 발생합니다.

Related posts

작문 실력을 향상시키는 3가지 입증된 방법

글쓰기의 이점과 그렇게 하는 데 도움이 되는 전략

작문 실력을 향상시키는 3가지 입증된 방법

2022년에는 GPT-3가 출시되면서 글쓰기 능력이 덜 중요해진 것 같습니다. AI를 사용하면 글이 서투른 사람들도 양질의 직원을 생성할 수 있습니다.

2년간의 디자인 - 좋은 것, 나쁜 것, 추한 것…

2년간의 디자인 - 좋은 것, 나쁜 것, 추한 것…

“Siri야, Olivia Dean의 Me Dive 재생해줘.” 나이지리아 아쿠레에 있는 Future Academy Africa에서 인턴십을 시작한 것은 2021년 5월이었습니다.

일부 프리랜서가 자신의 삶을 속이는 이유

일부 프리랜서가 자신의 삶을 속이는 이유

나는 최근에 세계 최대의 전문 소셜 네트워크인 Linkedin에 있었고 내가 팔로우하는 프리랜서 디자이너의 게시물을 발견했는데 내 관심을 끌었습니다. 그들은 모두 비행기에서, 노트북과 함께 해변에서, 수영장에서, 멋진 전망이 있는 사무실에서 사진을 게시했습니다.

더 이상 암호가 없습니다. 암호가 암호를 대체하는 방법

더 이상 암호가 없습니다. 암호가 암호를 대체하는 방법

모호함을 피하기 위해 다음 용어가 사용됩니다. 인증자; 로그인 웹사이트를 만드는 데 사용되는 휴대폰 사용자가 로그인 요청 서비스를 만들기 위해 사용하는 웹사이트 또는 애플리케이션 주어진 서비스를 제공하는 벤더 예.