의심 할 여지없이 JavaScript는 한 가지 일만 할 수 있고 다음을 수행 할 수 있습니다. 사용자의 작동. 어떻게해야합니까? 감사합니다. HTML5는 우리에게 멀티 스레드 메커니즘을 제공합니다.
1. 노동자 수업 1. 방법 소개(1) 함수 구성 New Worker (Arg) : 매개 변수는 'myworker.js'와 같이 실행하려는 코드가있는 JS 파일을 나타내며 생성자는 물론 작업자 클래스의 인스턴스를 반환하는 것입니다.
(2) Worker.postMessage (메시지) :이 메소드는 기본 스레드에서 하위 스레드 또는 하위 스레드로 메시지를 기본 스레드로 보내는 것을 나타냅니다.
(3) 누군가 가이 작업자 사례에 메시지를 보내면 사건이 트리거됩니다.
WOKER 클래스의 API는 가장 일반적으로 사용되는 두 가지 방법 인 하나의 이벤트가 있습니다. 아래의 실제 예를 살펴 보겠습니다.
//main.html <!!!! </head> <div id = out> </div> <입력 유형 = 텍스트 이름 = id = txt> <버튼 id = btn> 보내기 </button> <스크립트 유형 = text/javaScript> var out = document.getElementById var tn = getElementById (btn); 스크립트> </html> // Thread1.jsonMessage tion (event) {var res = event.data+hillocen! 사후 메시지 (RES);}
텍스트 상자를 입력하면 큰 ~ 곰 보내기 버튼을 클릭하면 다음 효과가 있습니다.
간단한 분석 및 분석에서 Trip1.js에 의해 메인 스레드에서 작업자 인스턴스 작업자를 만들었습니다 .JS는 어떻습니까? 예, 그는 메시지 사건을 들었습니다. 메인 스레드는 이벤트를 트리거하고 콜백 함수를 실행하기위한 메시지를 보냈습니다. 그런 다음 다시 보내십시오. 메인 스레드는 또한 작업자의 메시지 이벤트를 들었으므로 과거에 메시지가 트리거되고 메시지 내용이 DIV에 표시되므로 위의 효과가 표시됩니다.
당신은 이것을 사용할 것입니까? 여기서는 정말 쓸모가 없습니다. 그의 복잡성은 O (1) (하하, 최근에 알고리즘을 연구하고 있습니다!)이기 때문에 작동하지만 간단한 작업이 아니었다면? 이 방법의 장점은 서브 스레드가 얼마나 복잡한 지, 메인 스레드가 바뀌면 본질을 처리 할 수 있습니다
Lu는 New Worker ()에게 전화하여 서브 스레드를 만들 수 있습니다 공식 문서를 확인한 후 관련 설명이 없음을 발견했습니다.
메인 스레드에서 여러 하위 스레드를 호출하는 예를 살펴 보겠습니다.
//main.html <!!!! </head> <div id = out> </div> <입력 유형 = 텍스트 이름 = id = txt> <버튼 id = btn> 보내기 </button> <스크립트 유형 = text/javaScript> var out = document.getElementById var tn = getElementById (btn); .postMessage (postData);}, worker1.AddeventListener (e) {worker2.postMessage (e.Data); out.innertext = e.data;}, false); postmessage (res);} // thread2.jsonmessage = function (event) {var res = event.data+당신에게 거짓말을하지 않습니다! 사후 메이저 (Res);}
기본 스레드는 하나의 작업을 완료하기 위해 두 개의 스레드가 필요합니다. Worker1에서 요청한 두 개의 스레드 Worker1,2를 생성 한 다음 Worker2를 요청한 후 Worker1 이후 데이터를 Worder2 처리를 요청한 다음 복용합니다. 최종 결과와 함께 페이지에 표시됩니다.
다른 JS 파일은 서브 스레드에서 소개 한 다음 하단의 예와 같이 호출 할 수 있습니다.
//main.html <!!!! </head> <div id = out> </div> <입력 유형 = 텍스트 이름 = id = txt> <버튼 id = btn> 보내기 </button> <스크립트 유형 = text/javaScript> var out = document.getElementById (out); var tn = document.getElementById (btn); var worker1 = btn.addeventristener (click, fortment () {var postdata = txt.value; );};; res = handler (event.data);} // thools.jsfunction handler (data) {return data+켜져 있습니다! }
Thread1.js에는 Tools.js라는 파일이 없지만 importScriptts ()를 통해 JS 파일을 가져 오면 노출 된 메소드를 호출 할 수 있음을 알 수 있습니다.
둘째, 공유 작업자 수업SharedWorker의 본질은 다른 스레드가 스레드를 공유 할 수 있으며 데이터도 공유합니다.
논의 할 직접적인 예.
하나를 사용하는 방법 ://main.html <!!!!! sharedworker ( 'shared.js'); 데이터;} </script> </body> </html> // shared.jsonconnect = function (e) {var port = e.ports [0];
이것은 W3C의 예입니다.
<! doctype html> <html> <gead> <title> 공유 작업자 : Demo 2 </title> </head> <body> <div id = log> </div> <cript> var Worker = New SharedWorker ( ' 'shared.js'); var log.getElementById ( 'log'); , false) ;; note : 참고 : addeventListener worker.postMessage ( 'ping')를 사용하면이 작업이 필요합니다. E.ports.postmessage. e.target.postmessage ( 'pong');
첫 번째 방법은 이벤트 핸들을 사용하여 Worker.port.start ()를 호출 할 필요가 없습니다. 그들은 누군가가 그와 의사 소통 할 때 Connect 이벤트가 트리거되고 그의 메시지 이벤트가 Worker를 원하지 않는다면 작업자가 어떻게하는지 다시 살펴볼 수 있습니다.
그렇다면 SharedWorker는 어떻게 데이터를 공유합니까? 다음 예를보십시오.
// main1과 main2는 <! = 텍스트 이름 = id = txt> <버튼 id = get> get </button> <button id = setton> <cript> var 작업자 = 새로운 공유 작업자 ( 'shared.js'); (get '); var set. getElementById ('set '); ) {log.innertext = e.data;}, false); vale), get.addeventListener (e) {worker.postmessage); ) {var port = e.ports [0]; function (e) {if (e.data == 'get') {port.postMessage (data);} else {data = e.data;} }}
여기에서 Main1.html의 텍스트 상자에 데이터를 입력하고 세트를 클릭 한 다음 Main2.html의 GET 메소드를 클릭하여 Java의 정적 클래스와 같이 Main1.html 단일 케이스에서 설정 한 데이터를 가져옵니다. 뉴스가 얼마나 많은지, 실제로 하나의 뉴스 만 있으므로, 우리의 다른 스레드는 공유 작업자에서 데이터를 공유 할 수 있습니다. 그림이 있습니다. 그림이없는 기사가 있다는 것을 기억하고 누군가가 나에게 제안을했고 그가 사진을 줄 수 있는지 물었습니다.
마지막으로, 요약하자, 노동자와 주식은 무대 앞에서 일을 중단하지 않고 무대 뒤에서 일을하기 위해 무대 앞에서 작업을 움직이지 않겠다고 요약합시다. 무대에서 10 년 동안 무대에서 10 년 동안 무대를 떠나면 청중의 타액 별이 이미 익사했기 때문에 여전히 그 힘든 일자리가 여전히 있다고합니다. 내려 가면 최고의 편에서 가장 좋은 면만 무대에 있습니다. 10 분 정도 충분합니다!