Javascript실행 메커니즘
HTML5 이전에는 브라우저의 JavaScript가 단일 스레드 방식으로 작동했지만 멀티 스레딩 시뮬레이션을 구현하는 방법은 여러 가지가 있습니다(예: Javascript에서는 setinterval 메소드, setTimeout 메소드 등)을 사용하지만 본질적으로 프로그램 실행은 여전히 JavaScript 엔진에 의해 단일 스레드 방식으로 수행됩니다. . HTML5에 도입된 작업자 스레드를 사용하면 브라우저 측 Javascript 엔진이 Javascript 코드를 동시에 실행할 수 있으므로 브라우저 측 다중 스레드 프로그래밍을 효과적으로 지원할 수 있습니다. - WebWorker
HTML5의 Web Worker는 두 가지 스레드 유형으로 나눌 수 있습니다. 하나는 전용 스레드 Dedicated Worker이고 다른 하나는 공유 스레드입니다. 각 스레드 유형은 서로 다른 목적을 가지고 있습니다. >전문 웹 워커
DOM . 전용은 이 스레드가 IE를 제외한 다양한 주류 브라우저에서 한 번에 하나의 요구 사항만 처리한다는 것을 의미합니다. 스레드 생성
작업자 생성은 매우 간단합니다. 스레드에서 실행되어야 하는 JavaScript 파일의 이름을생성자
스레드 통신
에 지정합니다. 자식 스레드에서는 객체 의 postMessage 및 onmessage 메서드가 사용됩니다. 누가 누구에게 데이터를 보내는가? 송신자는 postMessage 메서드를 사용하고, 수신자는 PostMessage 메서드를 사용하여 데이터를 받습니다. , 이는 전송된 데이터이며 onmessage에도 하나의 매개변수만 있습니다. 이벤트인 경우 .data가 수신된 데이터를 가져옵니다.
data
JSON은 JS에서 기본적으로 지원하는 것입니다. 복잡한 데이터에 JSON을 사용할 필요는 없습니다. 예:
postMessage({'cmd': 'init', 'timestamp': Date.now()});오류 처리
스레드에서 오류가 발생하면 해당 onerror 이벤트 콜백이 호출됩니다. 따라서 오류를 처리하는 방법은 매우 간단합니다. 즉, 스레드 인스턴스의 onerror 이벤트를 연결하는 것입니다. 이 콜백 함수에는 3개의 필드가 있는 error 매개변수가 있습니다. message - 오류 메시지, filename - 오류가 발생한 스크립트 파일 lineno - 오류가 발생한 줄.
스레드 소멸
HTML 코드: <script type="text/javascript">
onload
= function(){
var worker =
new
Worker('fibonacci.js');
worker.onmessage = function(event) {
console.log("Result:" + event.data);
};
worker.onerror = function(error) {
console.log("Error:" + error.message);
};
worker.postMessage(40);
}
</script>
스크립트 파일 fibonacci.js 코드:
//fibonacci.js var fibonacci = function(n) { return n < 2 ? n : arguments.c all ee(n - 1) + arguments.callee(n - 2); }; onmessage = function(event) { var n = parseInt(event.data, 10); postMessage(fibonacci(n)); };
동일한 디렉터리에 넣고 페이지 파일을 실행하고 콘솔을 보면 실행 결과를 볼 수 있습니다. 여기서 또 다른 점이 있습니다. 메인 스레드에서 onmessage 이벤트를 다른 방식으로 연결할 수 있습니다. worker.addEvent
List
ener('message', function(event) {
console.log("Result:" + event.data);
}, false);
개인적으로는 매우 번거롭다고 생각하므로 직접 onmessage를 사용하는 것이 좋습니다.
작업자 스레드는 전역 메서드 importScripts를 사용하여 다른 도메인 스크립트 파일이나
를 로드하고 사용할 수 있습니다. 예를 들어 합법적인 사용 방법은 다음과 같습니다.
importScripts(); importScripts('foo.js'); importScripts('foo.js', 'bar.js');가져온 후 해당 파일에 있는 방법을 직접 사용할 수 있습니다. 인터넷에 있는 작은 예를 보세요:
mportScripts('math_utilities.js'); onmessage = function (event) { var first = event.data.first; var second = event.data.second; calculate(first,second); }; function calculate(first,second) { //do the calculation work var common_divisor=divisor(first,second); var common_multiple=multiple(first,second); postMessage("Work done! " + "The least common multiple is " + common_divisor + " and the greatest common divisor is "+common_multiple); }인터넷의 일부 네티즌들은 리소스 사전 로드 문제를 해결하기 위해 여기서 importScripts 메서드를 사용하는 것을 고려했습니다(브라우저는 리소스를 구문 분석하고 실행하지 않고 리소스를 미리 로드합니다). ) 이유도 매우 간단합니다.
스레드 중첩 작업자 스레드에서 하위 스레드를 생성할 수도 있으며 다양한 작업은 여전히 동일합니다.
동기화 문제
작업자에는 잠금 메커니즘이 없으며 멀티 스레드 동기화 문제는 코드(예: 신호
변수 정의 등)를 통해서만 해결할 수 있습니다. . 共享型SharedWebWorker 在收到web worker脚本的首个消息之后,共享型web worker把一个事件处理程序附加到激活的端口上。一般情况下,处理程序会运行自己的postMessage()方法来把一个消息返回给调用代码,接着端口的start()方法生成一个有效的消息进程。 脚本文件代码: 在上面的共享线程例子中,在主页面即各个用户连接页面构造出一个共享线程对象,然后定义了一个方法 postMessageToSharedWorker 向共享线程发送来之用户的指令。同时,在共享线程的实现代码片段中定义 connect_number 用来记录连接到这个共享线程的总数。之后,用 onconnect 事件处理器接受来自不同用户的连接,解析它们传递过来的指令。最后,定义一个了方法 execute_instruction 用于执行用户的指令,指令执行完成后将结果返回给各个用户。 这里我们并没有跟前面的例子一样使用到了工作线程的 onmessage 事件处理器,而是使用了另外一种方式 addEventListener。实际上,前面已经说过,这两种的实现原理基本一致,只是在这里有些稍微的差别,如果使用到了 addEventListener 来接受来自共享线程的消息,那么就要先使用 worker.port.start() 方法来启动这个端口。之后就可以像工作线程的使用方式一样正常的接收和发送消息。 线程中能做的事: 5.线程中可以用self获取本线程的作用域。 线程中不能做的事: 线程也是需要消耗资源的,而且使用线程也会带来一定的复杂性,所以如果没有充足的理由来使用额外的线程的话,那么就不要用它。
共享型web worker主要适用于多连接并发的问题。因为要处理多连接,所以它的API与专用型worker稍微有点区别。除了这一点,共享型web worker和专用型worker一样,不能访问DOM,并且对窗体属性的访问也受到限制。共享型web worker也不能跨越通信。
页面脚本可以与共享型web worker通信,然而,与专用型web worker(使用了一个隐式的端口通信)稍微有点不同的是,通信是显式的通过使用一个端口(port)对象并附加上一个消息事件处理程序来进行的。
看网上能找到的的唯一个例子:创建一个共享线程用于接收从不同连接发送过来的指令,然后实现自己的指令处理逻辑,指令处理完成后将结果返回到各个不同的连接用户。
HTML代码:<script>
var worker = new SharedWorker('sharedworker.js');
var log = document.getElementByIdx_x_x_x_x('response_from_worker');
worker.port.addEventListener('message', function(e) {
//log the response data in web page
log.textContent =e.data;
}, false);
worker.port.start();
worker.port.postMessage('ping from user web page..');
//following method will send user input to sharedworker
function postMessageToSharedWorker(input)
{
//define a json object to construct the request
var instructions={instruction:input.value};
worker.port.postMessage(instructions);
}
</script>
// 创建一个共享线程用于接收从不同连接发送过来的指令,指令处理完成后将结果返回到各个不同的连接用户。
var connect_number = 0;
onconnect = function(e) {
connect_number =connect_number+ 1;
//get the first port here
var port = e.ports[0];
port.postMessage('A new connection! The
current
connection number is '
+ connect_number);
port.onmessage = function(e) {
//get instructions from requester
var instruction=e.data.instruction;
var results=execute_instruction(instruction);
port.postMessage('Request: '+instruction+' Response '+results
+' from shared worker...');
};
};
function execute_instruction(instruction)
{
var result_value;
//implement your logic here
//execute the instruction...
return result_value;
}
1.能使用setTimeout(), clearTimeout(), setInterval(),clearInterval()等函数。
2.能使用navigator对象。
3.能使用XMLHttpRequest来发送请求。
4.可以在线程中使用Web Storage。
1.线程中是不能使用除navigator外的DOM/BOM对象,例如window,document(想要操作的话只能发送消息给worker创建者,通过回调函数操作)。
2.线程中不能使用主线程中的变量和函数。
3.线程中不能使用有"挂起"效果的操作命令,例如alert等。
4.线程中不能跨域加载JS。
위 내용은 HTML5의 Javascript 멀티스레딩에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

html5hassignificallytransformedwebdevelopmentbyintranticalticlementements, 향상 Multimediasupport 및 Improvingperformance.1) itmadewebsitessmoreaccessibleadseo 친환경적 인 요소, 및 .2) Html5intagnatee

H5는 시맨틱 요소 및 ARIA 속성을 통해 웹 페이지 접근성 및 SEO 효과를 향상시킵니다. 1. 컨텐츠 구조를 구성하고 SEO를 개선하기 위해 사용합니다. 2. Aria-Label과 같은 ARIA 속성은 접근성을 향상시키고 보조 기술 사용자는 웹 페이지를 원활하게 사용할 수 있습니다.

"H5"와 "HTML5"는 대부분의 경우 동일하지만 특정 시나리오에서는 다른 의미를 가질 수 있습니다. "HTML5"는 새로운 태그와 API를 포함하는 W3C 정의 표준입니다. "H5"는 일반적으로 HTML5의 약어이지만 모바일 개발에서는 HTML5를 기반으로 한 프레임 워크를 참조 할 수 있습니다. 이러한 차이를 이해하면 프로젝트 에서이 용어를 정확하게 사용하는 데 도움이됩니다.

H5 또는 HTML5는 HTML의 다섯 번째 버전입니다. 개발자에게 더 강력한 도구 세트를 제공하여 복잡한 웹 애플리케이션을보다 쉽게 만들 수 있습니다. H5의 핵심 기능에는 다음이 포함됩니다. 1) 웹 페이지에 그래픽 및 애니메이션을 그리는 요소; 2) 웹 페이지 구조를 SEO 최적화에 명확하고 도움이되는 시맨틱 태그 등; 3) GeolocationApi 지원 위치 기반 서비스와 같은 새로운 API; 4) 호환성 테스트 및 폴리 필 라이브러리를 통해 크로스 브라우저 호환성을 보장해야합니다.

H5 링크를 만드는 방법? 링크 대상 결정 : H5 페이지 또는 응용 프로그램의 URL을 가져옵니다. HTML 앵커 작성 : & lt; a & gt; 태그 앵커를 만들고 링크 대상 URL을 지정합니다. 링크 속성 설정 (선택 사항) : 필요에 따라 대상, 제목 및 on 클릭 속성을 설정하십시오. 웹 페이지에 추가 : 링크가 나타나려는 웹 페이지에 HTML 앵커 코드를 추가하십시오.

H5 호환성 문제에 대한 솔루션에는 다음이 포함됩니다. 웹 페이지가 화면 크기에 따라 레이아웃을 조정할 수있는 반응 형 디자인을 사용합니다. 릴리스 전에 호환성을 테스트하기 위해 브라우저 크로스 브라우저 테스트 도구를 사용하십시오. PolyFill을 사용하여 이전 브라우저의 새로운 API를 지원합니다. 웹 표준을 따르고 효과적인 코드 및 모범 사례를 사용하십시오. CSS 프리 프로세서를 사용하여 CSS 코드를 단순화하고 가독성을 향상시킵니다. 이미지를 최적화하고 웹 페이지 크기를 줄이며로드 속도를 높이십시오. HTTPS를 통해 웹 사이트의 보안을 보장하십시오.

H5 페이지는 링크를 수동으로 만들거나 짧은 링크 서비스를 사용하는 두 가지 방식으로 링크를 생성 할 수 있습니다. 수동으로 생성하면 H5 페이지의 URL을 복사하면됩니다. 짧은 링크 서비스를 통해 URL을 서비스에 붙여 넣은 다음 단축 된 URL을 가져와야합니다.

참여를 높이고 리드를 생성하며 브랜드 인지도를 높이기 위해 매력적인 H5 공유 페이지를 만드는 것이 중요합니다. 단계에는 대상 고객 식별, 매력적인 비주얼 설계, 매력적인 컨텐츠 작성, 대화 형 요소 추가, 소셜 미디어 공유 최적화, 테스트 및 개선이 포함됩니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

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

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

뜨거운 주제



