목차
1. 개요
명령을 사용하여 Worker 메서드를 호출하여 새 하위 스레드를 생성합니다.
콜백 함수가 있어야 합니다. . " >서브 스레드에는 메시지 이벤트를 수신하기 위한 콜백 함수가 있어야 합니다. .
오류 처리
self.close();
로그인 후 복사
" >
self.close();
로그인 후 복사
8、同页面的Web Worker
웹 프론트엔드 H5 튜토리얼 HTML5의 새로운 기능 Web Worker

HTML5의 새로운 기능 Web Worker

Mar 30, 2017 am 11:54 AM

1. 개요

JavaScript언어는 단일 스레드를 사용합니다. 모델, 즉 모든 작업이 에 배열되어 있으며, 한 번에 한 가지 작업만 수행할 수 있다는 것은 컴퓨터의 컴퓨팅 성능이 향상됨에 따라 큰 불편을 초래합니다. . JavaScript의 잠재력을 완전히 활용할 수는 없습니다. 파일 API를 사용하면 JavaScript가 로컬 파일을 읽을 수 있다는 점을 고려하면 더욱 그렇습니다. 메인 스레드가 실행되는 동안 하위 스레드는 백그라운드에서 실행되며 하위 스레드가 계산 작업을 완료한 다음 반환할 때까지 두 스레드는 서로 간섭하지 않습니다. 따라서 각 하위 스레드는 작업을 자동으로 완료하는 "작업자"와 같습니다.

웹 작업자는 다음과 같은 특징을 갖습니다.

<. class=" list-paddingleft-2">
  • DOM 제한: 하위 스레드는 DOM을 읽을 수 없습니다. 즉, document, window, parent 객체는 자식 스레드에서 얻을 수 없습니다. (단, navigator 객체와 location 객체는 얻을 수 있습니다.)
  • 스크립트 제한: 하위 스레드는 웹 페이지의 전역 페이지를 읽을 수 없습니다. 변수와 함수는 경고 및 확인 메서드를 실행할 수 없지만 setInterval 및 setTimeout을 실행할 수 있으며 XMLHttpRequest 개체를 사용하여 AJAX 요청을 할 수 있습니다. >
  • 파일 제한: 하위 스레드는 로컬 파일을 읽을 수 없습니다. 즉, 하위 스레드는 로컬 파일 시스템(file://)을 열 수 없으며 로드하는 스크립트는 네트워크에서 가져와야 합니다.

  • 사용하기 전에 브라우저가 이 API를 지원하는지 확인하세요. 지원되는 브라우저에는 IE 10+, Firefox 3.6+, Safari 4.0+, Chrome 및 Opera 11이 포함되지만 모바일 브라우저는 아직 지원되지 않습니다. 지원

    if (window.Worker) {    // 支持} else {    // 不支持}
    로그인 후 복사
  • 2. 하위 스레드 생성 및 시작

    기본 스레드 내에서

    new

    명령을 사용하여 Worker 메서드를 호출하여 새 하위 스레드를 생성합니다.

    var worker = new Worker(&#39;work.js&#39;);
    로그인 후 복사

    Worker 메소드의 매개변수는 스크립트 파일이며, 이 파일은 하위 스레드가 완료할 작업입니다. 위 코드는 자식 스레드가 로컬 파일 시스템을 읽을 수 없기 때문입니다. , 스크립트 파일은 네트워크에서 가져와야 합니다. 404 오류와 같이 다운로드에 실패하면 하위 스레드가 자동으로 실패합니다. 하위 스레드는 생성된 후 시작되지 않습니다. 메인 스레드가 postMessage 메서드를 호출할 때까지 기다려야 합니다. 즉, 신호가 전송될 때까지 시작되지 않습니다.

    worker.postMessage(&#39;hello world&#39;);
    로그인 후 복사

    postMessage 메소드의 매개변수는 메인 스레드에서 하위 스레드로 전달되는 신호입니다.

    문자열

    또는 객체일 수 있습니다.

    worker.postMessage({method: &#39;each&#39;, args: [&#39;work&#39;]});
    로그인 후 복사

    3. 서브 스레드의 이벤트모니터링

    서브 스레드에는 메시지 이벤트를 수신하기 위한 콜백 함수가 있어야 합니다. .

    //File: work.jsself.addEventListener(&#39;message&#39;, function(e) {
    
        self.postMessage(&#39;You said: &#39; + e.data);
    
    }, false);
    로그인 후 복사

    self는 하위 스레드 자체를 나타내고 self.addEventListener는 하위 스레드의 메시지 이벤트에 대해 지정된 콜백 함수를 나타냅니다. (onmessage 속성 <🎜의 값을 직접 지정할 수도 있습니다. >). 콜백 함수의

    매개변수는 이벤트 객체이며 해당 데이터 속성에는 메인 스레드에서 보낸 신호가 포함되어 있습니다. self.postMessage는 하위 스레드가 기본 스레드에 신호를 보내는 것을 의미합니다.

    메인 스레드가 보내는 다양한 신호 값에 따라 하위 스레드는 다양한 메서드를 호출할 수 있습니다.

    &#39;message&#39;,  method = args = reply =);
    로그인 후 복사
    4. 메인 스레드의 이벤트 모니터링

    메인 스레드는 하위 스레드에서 보낸 신호를 수신하기 위해 메시지 이벤트에 대한 콜백 함수도 지정해야 합니다.

    // File: main.jsworker.addEventListener(&#39;message&#39;, function(e) {
        console.log(e.data);
    }, false);
    로그인 후 복사

    5.

    오류 처리

    메인 스레드는 하위 스레드에서 오류가 발생하는지 모니터링할 수 있습니다. 오류가 발생하면 메인 스레드의 오류 이벤트가 트리거됩니다.

    worker.onerror(function(e) {
        console.log(e);
    });// orworker.addEventListener(&#39;error&#39;, function(e) {
        console.log(e);
    }, false);
    로그인 후 복사
    6. 하위 스레드 닫기

    사용 후 시스템 리소스를 절약하려면 메인 스레드에서 종료 메소드를 호출하여 하위 스레드를 수동으로 닫아야 합니다.

    worker.terminate();
    로그인 후 복사

    는 하위 스레드에서 내부적으로 닫힐 수도 있습니다.

    self.close();
    로그인 후 복사

    7. 메인 스레드와 하위 스레드 간의 데이터 통신

    메인 스레드와 하위 스레드 간의 통신 내용은 텍스트일 수도 있고 객체일 수도 있습니다. 이 통신은 복사 관계입니다. 즉,

    는 주소 대신

    값을 전달하므로 하위 스레드에 의한 통신 내용 수정은 메인 스레드에 영향을 주지 않습니다. 실제로 브라우저의 내부 작동 메커니즘은 먼저 통신 내용을 직렬화한 다음 직렬화된 문자열을 하위 스레드로 전송하고 하위 스레드가 이를 복원하는 것입니다.

    메인 스레드와 하위 스레드는 파일, Blob,

    배열버퍼 및 기타 개체와 같은 바이너리 데이터를 교환할 수도 있으며 스레드 간에도 전송할 수 있습니다.

    但是,用拷贝方式发送二进制数据,会造成性能问题。比如,主线程向子线程发送一个500MB文件,默认情况下浏览器会生成一个原文件的拷贝。为了解决这个问题,JavaScript允许主线程把二进制数据直接转移给子线程,但是一旦转移,主线程就无法再使用这些二进制数据了,这是为了防止出现多个线程同时修改数据的麻烦局面。这种转移数据的方法,叫做Transferable Objects。

    如果要使用该方法,postMessage方法的最后一个参数必须是一个数组,用来指定前面发送的哪些值可以被转移给子线程。

    worker.postMessage(arrayBuffer, [arrayBuffer]);
    로그인 후 복사

    8、同页面的Web Worker

    通常情况下,子线程载入的是一个单独的JavaScript文件,但是也可以载入与主线程在同一个网页的代码。假设网页代码如下:

    <!DOCTYPE html>
        <body>
            <script id="worker" type="app/worker">
    
                addEventListener(&#39;message&#39;, function() {
                    postMessage(&#39;Im reading Tech.pro&#39;);
                }, false);        </script>
        </body></html>
    로그인 후 복사

    我们可以读取页面的script,用worker来处理。

    var blob = new Blob([document.querySelector(&#39;#workere&#39;).textContent]);
    로그인 후 복사

    这里需要把代码当作二进制数据读取,所以使用Blob接口。然后,这个二进制对象转为URL,再通过这个URL创建worker。

    var url = window.URL.createObjectURL(blob);var worker = new Worker(url);
    로그인 후 복사

    部署事件监听代码。

    worker.addEventListener(&#39;message&#39;, function(e) {
        console.log(e.data);
    }, false);
    로그인 후 복사

    最后启动worker。

    worker.postMessage(&#39;&#39;);
    로그인 후 복사

    整个页面的代码如下:

    
        
            
    
            <script>
                (function() {                
                var blob = new Blob([document.querySelector(&#39;#worker&#39;).textContent]);                
                var url = window.URL.createObjectURL(blob);                
                var worker = new Worker(url);
    
                    worker.addEventListener(&#39;message&#39;, function(e) {
                        console.log(e.data);
                    }, false);
    
                    worker.postMessage(&amp;#39;&amp;#39;);
                })();        </script>
        
    로그인 후 복사

    可以看到,主线程和子线程的代码都在同一个网页上面。

    上面所讲的Web Worker都是专属于某个网页的,当该网页关闭,worker就自动结束。除此之外,还有一种共享式的Web Worker,允许多个浏览器窗口共享同一个worker,只有当所有窗口关闭,它才会结束。这种共享式的Worker用SharedWorker对象来创建,因为适用场合不多,这里就省略了。

    위 내용은 HTML5의 새로운 기능 Web Worker의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

    핫 AI 도구

    Undresser.AI Undress

    Undresser.AI Undress

    사실적인 누드 사진을 만들기 위한 AI 기반 앱

    AI Clothes Remover

    AI Clothes Remover

    사진에서 옷을 제거하는 온라인 AI 도구입니다.

    Undress AI Tool

    Undress AI Tool

    무료로 이미지를 벗다

    Clothoff.io

    Clothoff.io

    AI 옷 제거제

    Video Face Swap

    Video Face Swap

    완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

    뜨거운 도구

    메모장++7.3.1

    메모장++7.3.1

    사용하기 쉬운 무료 코드 편집기

    SublimeText3 중국어 버전

    SublimeText3 중국어 버전

    중국어 버전, 사용하기 매우 쉽습니다.

    스튜디오 13.0.1 보내기

    스튜디오 13.0.1 보내기

    강력한 PHP 통합 개발 환경

    드림위버 CS6

    드림위버 CS6

    시각적 웹 개발 도구

    SublimeText3 Mac 버전

    SublimeText3 Mac 버전

    신 수준의 코드 편집 소프트웨어(SublimeText3)

    HTML의 테이블 테두리 HTML의 테이블 테두리 Sep 04, 2024 pm 04:49 PM

    HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

    HTML의 중첩 테이블 HTML의 중첩 테이블 Sep 04, 2024 pm 04:49 PM

    HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

    HTML 여백-왼쪽 HTML 여백-왼쪽 Sep 04, 2024 pm 04:48 PM

    HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

    HTML 테이블 레이아웃 HTML 테이블 레이아웃 Sep 04, 2024 pm 04:54 PM

    HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

    HTML 입력 자리 표시자 HTML 입력 자리 표시자 Sep 04, 2024 pm 04:54 PM

    HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

    HTML에서 텍스트 이동 HTML에서 텍스트 이동 Sep 04, 2024 pm 04:45 PM

    HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

    HTML 정렬 목록 HTML 정렬 목록 Sep 04, 2024 pm 04:43 PM

    HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

    HTML 온클릭 버튼 HTML 온클릭 버튼 Sep 04, 2024 pm 04:49 PM

    HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.

    See all articles