VueJS - 전용 웹 작업자 구현
8112 단어 vuewebworkerjavascriptbeginners
그럼에도 불구하고 특정 비동기 작업을 수행하고 메인 스레드와 때로는 인터페이스를 차단하지 않고 응답을 기다릴 수 있는 몇 가지 메커니즘을 제공합니다.
This article에서는 이러한 각 메커니즘을 설명합니다.
JavaScript에서 비동기 작업을 수행하는 몇 가지 방법이 있지만 때로는 충분하지 않습니다. 예를 들어 특정 순서에 따라 작업을 수행해야 하는 큰
for
루프를 생각해 보십시오.비동기식으로 수행하거나 CPU의 여러 코어를 활용하는 방법은 없습니다. 글쎄요, 적어도 없었습니다.
HTML 5 및 최신 웹 API를 사용하면 이제 메인 스레드 및 결과적으로 인터페이스를 차단하지 않고 무거운 처리가 필요한 코드를 실행할 수 있습니다.
오늘은 그 중 하나인 웹 작업자에 대해 이야기하겠습니다.
official specification에는 세 가지 유형의 근로자가 언급되어 있습니다.
Dedicated Worker는 기본 프로세스에 의해 인스턴스화되며 해당 프로세스와만 통신할 수 있습니다.
공유 작업자는 동일한 출처(다른 브라우저 탭, iframe 또는 기타 공유 작업자)에서 실행되는 모든 프로세스에서 액세스할 수 있습니다.
서비스 워커는 오리진과 경로에 등록된 이벤트 지향 워커입니다. 이들은 관련된 웹 사이트/페이지를 제어하고, 탐색 및 리소스 요청을 가로채 수정하고, 매우 세분화된 방식으로 리소스를 캐시할 수 있습니다.
출처: https://thecodersblog.com/web-worker-and-implementation
이 포스트에서는 VueJS에서 Dedicated Worker를 구현하고 이를 사용하여 멀티 코어 CPU를 활용하는 방법에 대해 이야기하려고 합니다.
VueJS 프로젝트 내에서 웹 작업자를 구현하는 몇 가지 방법이 있습니다.
VueJS 프로젝트에서 전용 웹 작업자를 구현하는 것은 매우 쉽습니다.
VueJS에서 전용 웹 작업자 구현
.js
폴더에 public
파일을 만듭니다. onmessage
를 매개변수로 받는 event
함수를 구현하여 데이터*를 처리하고 실행 종료 시 postMessage
를 호출하여 결과를 매개변수로 전달합니다. *이 작업자에게 매개변수로 전달된 데이터는
event.data
속성에서 검색할 수 있습니다..js
의 절대 경로를 생성자의 매개 변수로 전달합니다. onmessage
및 onerror
함수를 구현합니다.Worker로부터 메시지를 받았을 때와 에러가 났을 때 실행되는 콜백입니다.
lodash/fp/chunk
함수를 사용할 수 있음) 청크를 매개 변수로 전달하는 호출worker.postMessage
을 반복합니다. 두 파일의 구조는 다음과 유사합니다.
// ./public/worker.js file
onmessage = function(event) {
var data = event.data // data sent by the Vue component
is retrieved from 'data' attribute
var result = doSomething()
postMessage(result)
}
// Worker.vue
import { chunk, map } from 'lodash/fp'
export default {
props: ['data'],
computed: {
chunkedData() {
const size = Math.ceil(this.data.length / 4) // In this case, 4 threads will be created
return chunk(size, this.data)
}
},
run() {
const worker = new Worker('/worker.js')
worker.onmessage = function(event) {
const data = event.data // Data passed as parameter by the worker is retrieved from 'data' attribute
console.log(data)
}
worker.onerror = console.error // This will be executed in case of any errors
map(chunk => worker.postMessage(chunk), this.chunkedData)
}
}
이 구조를 사용하면 웹 작업자를 인스턴스화하고 데이터를 청크로 분할하고 각 청크를 비동기식으로 처리하여 여러 스레드를 활용하고 인터페이스 및 브라우저 정지를 방지할 수 있습니다.
**참고:
worker.js
파일 내에서 ES5 코드를 사용하는 것이 좋습니다. 이 기사가 작성되는 시점에는 Web Workers 내의 ES6+ 코드가 여전히 모든 브라우저에서 사용됩니다not fully supported.*this repo에서 이 구현의 전체 예를 찾을 수 있습니다.
당신이 그것을 좋아 바랍니다! 공유하고 의견을 말하십시오.
@helloimnik의 표지 이미지
Reference
이 문제에 관하여(VueJS - 전용 웹 작업자 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vcpablo/vuejs-simple-dedicated-web-worker-179c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)