!16 update readme, add license

Merge pull request !16 from yaojian16/master
This commit is contained in:
openharmony_ci
2021-12-02 13:25:07 +00:00
committed by Gitee
4 changed files with 681 additions and 132 deletions
-36
View File
@@ -1,36 +0,0 @@
# js_worker_module
#### Description
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
#### Software Architecture
Software architecture description
#### Installation
1. xxxx
2. xxxx
3. xxxx
#### Instructions
1. xxxx
2. xxxx
3. xxxx
#### Contribution
1. Fork the repository
2. Create Feat_xxx branch
3. Commit your code
4. Create Pull Request
#### Gitee Feature
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
4. The most valuable open source project [GVP](https://gitee.com/gvp)
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
+235 -96
View File
@@ -1,235 +1,374 @@
# js_worker_module
#### 一、Worker介绍
### Introduction
worker能够让js拥有多线程的能力,通过postMessage完成worker线程与宿主线程通信。
Worker enables JS to have the ability of multithreading, and completes the communication between worker thread and host thread through PostMessage.
一. Worker介绍
### Interface description
For interface implementation, see: js_worker_module/jsapi/worker
接口介绍
#### Worker object description
1.constructor(scriptURL:string, options? WorkerOptions);
构造函数
The object object used by the host thread to communicate with the worker thread.
使用方法:
##### Interface
1.
- name
|constructor(scriptURL:string, options? WorkerOptions) | worker constructor to Creates a worker instance |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
```
2. postMessage(message:Object, options?:PostMessageOptions): void;
描述:
向worker线程发送消息,数据的传输采用结构化算法
2.
使用方法:
- name
示例一
| postMessage(message:Object, options?:PostMessageOptions) | Sends a message to the worker thread |
|---|---|
| postMessage(message:Object, transfer:ArrayBuffer[]) | Sends a message to the worker thread |
- example
```
// example 1
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
示例二
// example 2
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
var buffer = new ArrayBuffer(8)
var buffer = new ArrayBuffer(8);
worker.postMessage(buffer, [buffer]);
```
3. on(type:string, listener:EventListener):void;
描述:
向worker添加一个事件监听
3.
使用方法:
- name
| on(type:string, listener:EventListener) | Adds an event listener to the worker |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.on("alert", (e)=>{
console.log("worker on...");
console.log("worker on...");
})
```
4. once(type:string, listener:EventListener):void;
描述:
向worker添加一个事件监听, 事件监听只执行一次,一旦出发便会自动删除
4.
使用方法
- name
| once(type:string, listener:EventListener) | Adds an event listener to the worker and
removes the event listener automically after it is invoked once |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.once("alert", (e)=>{
console.log("worker on...");
})
```
5. off(type:string, listener?:EventListener):void;
描述:
删除worker的事件监听
5.
使用方法
- name
| off(type:string, listener?:EventListener) | Removes an event listener to the worker |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.off("alert");
```
6. terminate():void;
描述:
关闭worker线程,终止worker发送消息
6.
使用方法
- name
| terminate() | Terminates the worker thread to stop the worker from receiving messages |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.terminate();
```
7. removeEventListener(type:string, listener?:EventListener):void;
描述:
删除worker的事件监听
7.
使用方法
- name
| removeEventListener(type:string, listener?:EventListener) | Removes an event defined for the worker |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.removeEventListener("alert");
```
8. dispatchEvent(event: Event):boolean;
描述:
分发worker的事件监听
8.
使用方法
- name
| dispatchEvent(event: Event) | Dispatches the event defined for the worker |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.dispatchEvent({type:"alert"});
```
9. removeAllEventListener(): void;
描述:
删除worker的所有事件监听
9.
使用方法
- name
| removeAllListener() | Removes all event listeners for the worker |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.removeAllEventListener();
worker.removeAllListener();
```
10. onexit?:(code:number)=>void;
描述:
worker退出时出发js线程的回调方法
##### Attribute
使用方法
1.
- name
| onexit?:(code:number)=>void | The onexit attribute of the worker specifies the event handler to be called
when the worker exits. The handler is executed in the host thread |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onexit = function(e) {
console.log("onexit...");
}
```
11. onerror?:(ev:ErrorEvent)=>void;
描述:
worker内部执行js发生异常触发的宿主线程回调
2.
使用方法:
- name
| onerror?:(ev:ErrorEvent)=>void | The onerror attribute of the worker specifies the event handler to be called
when an exception occurs during worker execution. The event handler is executed in the host thread |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onerror = function(e) {
console.log("onerror...");
}
```
12. onmessage?:(ev:MessageEvent)=>void;
描述:
当宿主线程接受到来自其创建的worker消息时,会在worker对象上触发message事件。例如,当worker通过parentPort.postMessage()发送了一条消息
3.
使用方法:
- name
| onmessage?:(ev:MessageEvent)=>void | The onmessage attribute of the worker specifies the event handler to be called
then the host thread receives a message created by itself and sent by the worker through the parentPort.postMessage.
The event handler is executed in the host thread |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onmessage = function(e) {
console.log("onmessage...");
}
```
13. onmessageerror?:(event:MessageEvent)=>void;
描述:
worker对象接收到一条无法序列化的消息时,messageerror事件将在该对象上被触发
4.
使用方法:
- name
| onmessageerror?:(event:MessageEvent)=>void | The onmessage attribute of the worker specifies the event handler
when the worker receives a message that cannot be serialized. The event handler is executed in the host thread |
|---|---|
- example
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onmessageerror = function(e) {
console.log("onmessageerror...");
}
```
二. parentPort介绍
描述:
worker线程用于与宿主线程通信的Object对象,通过parentPort接口发送消息给主线程、close接口关闭worker线程
#### parentPort object description
接口介绍
Object of the worker thread used to communicate with the host thread
1. parent.postMessage(message:Object, options?:PostMessageOptions): void;
描述:
worker向宿主线程发送消息
##### Interface
使用方法:
main.js
1.
- name
| postMessage(message:Object, options?:PostMessageOptions) | Send a message to host thread |
|---|---|
| postMessage(message:Object, transfer:ArrayBuffer[]) | Send a message to host thread |
- example
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
worker.js
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
parentPort.postMessage("hello world from worker.js");
}
```
2. parent.close():void
描述:
关闭worker线程,终止worker接收消息
2.
使用方法:
main.js
- name
| close() | Close the worker thread to stop the worker from receiving messages |
|---|---|
- example
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
worker.js
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
parentPort.close();
}
```
3. parent.onmessage?:(event:MessageEvent)=>void
描述:
parent接口的onmessage属性表示在消息事件发生时要调用的事件处理程序,即当使用worker.postMessage方法将消息发送至worker时
##### Attribute
使用方法:
main.js
1.
- name
| onmessage?:(event:MessageEvent)=>void | The onmessage attribute of parentPort specifies the event handler to be called
then the worker thread receives a message sent by the host thread through worker postMessage.
The event handler is executed in the worker thread |
|---|---|
- example
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
worker.js
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
console.log("receive main.js message");
}
```
4. parentPort.onerror?:(ev: ErrorEvent)=>void;
描述:
worker线程内部执行js发生异常触发的worker回调
2.
使用方法:
main.js
- name
| onerror?:(ev: ErrorEvent)=>void | The onerror attribute of parentPort specifies the event handler to be called
when an exception occurs during worker execution. The event handler is executed in the worker thread |
|---|---|
- example
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
worker.js
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onerror = function(e) {
console.log("onerror...");
}
5. parentPort.onmessageerror?:(event: MessageEvent)=>void;
描述:
当worker接收到一条无法被反序列化的消息时,messageerror将在该事件上触发
```
使用方法:
main.js
3.
- name
| onmessageerror?:(event: MessageEvent)=>void | The onmessage attribute of parentPort specifies the event handler to be called
then the worker receives a message that cannot be deserialized. The event handler is executed in the worker thread. |
|---|---|
- example
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
worker.js
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessageerror = function(e) {
console.log("onmessageerror...");
}
}
```
### Repositories Involved
- ace_ace_engine
- ace_napi
### License
Worker is available under [Mozilla license](https://www.mozilla.org/en-US/MPL/), and the documentation is detailed in [documentation](https://gitee.com/openharmony/js_worker_module/blob/master/mozilla_docs.txt). See [LICENSE](https://gitee.com/openharmony/js_worker_module/blob/master/LICENSE) for the full license text.
+365
View File
@@ -0,0 +1,365 @@
# js_worker_module
### 简介
worker能够让js拥有多线程的能力,通过postMessage完成worker线程与宿主线程通信。
### 接口说明
接口实现详见:js_worker_module/jsapi/worker
#### Worker对象描述
宿主线程用于与worker线程通信的Object对象。
##### 接口
1.
- 接口名
|constructor(scriptURL:string, options? WorkerOptions) | 构造函数 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
```
2.
- 接口名
| postMessage(message:Object, options?:PostMessageOptions) | 向worker线程发送消息 |
|---|---|
| postMessage(message:Object, transfer:ArrayBuffer[]) | 向worker线程发送消息 |
- 使用示例
```
// 示例一
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
// 示例二
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
var buffer = new ArrayBuffer(8);
worker.postMessage(buffer, [buffer]);
```
3.
- 接口名
| on(type:string, listener:EventListener) | 向worker添加一个事件监听 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.on("alert", (e)=>{
console.log("worker on...");
})
```
4.
- 接口名
| once(type:string, listener:EventListener) | 向worker添加一个事件监听, 事件监听只执行一次便自动删除 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.once("alert", (e)=>{
console.log("worker on...");
})
```
5.
- 接口名
| off(type:string, listener?:EventListener) | 删除worker的事件监听 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.off("alert");
```
6.
- 接口名
| terminate() | 关闭worker线程,终止worker发送消息 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.terminate();
```
7.
- 接口名
| removeEventListener(type:string, listener?:EventListener) | 删除worker的事件监听 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.removeEventListener("alert");
```
8.
- 接口名
| dispatchEvent(event: Event) | 分发定义在worker的事件 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.dispatchEvent({type:"alert"});
```
9.
- 接口名
| removeAllListener() | 删除worker的所有事件监听 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.removeAllListener();
```
##### 属性
1.
- 属性名
| onexit?:(code:number)=>void | worker退出时被调用的事件处理程序,处理程序在宿主线程中执行 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onexit = function(e) {
console.log("onexit...");
}
```
2.
- 属性名
| onerror?:(ev:ErrorEvent)=>void | worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onerror = function(e) {
console.log("onerror...");
}
```
3.
- 属性名
| onmessage?:(ev:MessageEvent)=>void | 宿主线程收到来自其创建的worker通过parentPort.postMessage接口发送的消息时被调用的事件处理程序, 处理程序在宿主线程中执行 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onmessage = function(e) {
console.log("onmessage...");
}
```
4.
- 属性名
| onmessageerror?:(event:MessageEvent)=>void | worker对象接收到一条无法序列化的消息时被调用的事件处理程序, 处理程序在宿主线程中执行 |
|---|---|
- 使用示例
```
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.onmessageerror = function(e) {
console.log("onmessageerror...");
}
```
#### parentPort对象描述
worker线程用于与宿主线程通信的Object对象。
##### 接口
1.
- 接口名
| postMessage(message:Object, options?:PostMessageOptions) | 向宿主线程发送消息 |
|---|---|
| postMessage(message:Object, transfer:ArrayBuffer[]) | 向宿主线程发送消息 |
- 使用示例
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
parentPort.postMessage("hello world from worker.js");
}
```
2.
- 接口名
| close() | 关闭worker线程,终止worker接收消息 |
|---|---|
- 使用示例
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
parentPort.close();
}
```
##### 属性
1.
- 属性名
| onmessage?:(event:MessageEvent)=>void | 宿主线程收到来自其创建的worker通过worker.postMessage接口发送的消息时被调用的事件处理程序,
处理程序在worker线程中执行 |
|---|---|
- 使用示例
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessage = function(e) {
console.log("receive main.js message");
}
```
2.
- 属性名
| onerror?:(ev: ErrorEvent)=>void | worker在执行过程中发生异常被调用的事件处理程序,处理程序在worker线程中执行 |
|---|---|
- 使用示例
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onerror = function(e) {
console.log("onerror...");
}
```
3.
- 属性名
| onmessageerror?:(event: MessageEvent)=>void | worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序, 处理程序在worker线程中执行 |
|---|---|
- 使用示例
```
// main.js
import worker from "@ohos.worker"
const worker = new worker.Worker("workers/worker.js");
worker.postMessage("hello world");
// worker.js
import worker from "@ohos.worker"
const parentPort = worker.parentPort;
parentPort.onmessageerror = function(e) {
console.log("onmessageerror...");
}
```
### 涉及仓
- ace_ace_engine
- ace_napi
### 许可证
Worker在[Mozilla许可证](https://www.mozilla.org/en-US/MPL/)下可用,说明文档详见[说明文档](https://gitee.com/openharmony/js_worker_module/blob/master/mozilla_docs.txt)。有关完整的许可证文本,有关完整的许可证文本,请参见[许可证](https://gitee.com/openharmony/js_worker_module/blob/master/LICENSE)
+81
View File
@@ -0,0 +1,81 @@
The definitions of some interfaces implemented in jsapi/workers/worker.cpp are released under Mozilla license.
The definitions and functions of these interfaces are consistent with the standard interfaces under mozila license,
but the implementation of specific functions is independent and self-developed.
All interfaces are described in d.ts, the following is the interface written in d.ts under to Mozilla license
export interface WorkerOptions {
type?: "classic" | "module";
name?: string;
shared?: boolean;
}
export interface Event {
readonly type: string;
readonly timeStamp: number;
}
interface ErrorEvent extends Event {
readonly message: string;
readonly filename: string;
readonly lineno: number;
readonly colno: number;
readonly error: Object;
}
declare interface MessageEvent<T = Object> extends Event {
readonly data: T;
}
export interface PostMessageOptions {
transfer?: Object[];
}
export interface EventListener {
(evt: Event): void | Promise<void>;
}
type MessageType = "message" | "messageerror";
declare interface EventTarget {
addEventListener(
type: string,
listener: EventListener
): void;
dispatchEvent(event: Event): boolean;
removeEventListener(
type: string,
callback?: EventListener
): void;
removeAllListener(): void;
}
declare interface WorkerGlobalScope extends EventTarget {
readonly name: string;
onerror?: (ev: ErrorEvent) => void;
readonly self: WorkerGlobalScope & typeof globalThis;
}
declare interface DedicatedWorkerGlobalScope extends WorkerGlobalScope {
onmessage?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) => void;
onmessageerror?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) => void;
close(): void;
postMessage(messageObject: Object, transfer: Transferable[]): void;
postMessage(messageObject: Object, options?: PostMessageOptions): void;
}
declare namespace worker {
class Worker extends EventTarget {
constructor(scriptURL: string, options?: WorkerOptions);
onexit?: (code: number) => void;
onerror?: (err: ErrorEvent) => void;
onmessage?: (event: MessageEvent) => void;
onmessageerror?: (event: MessageEvent) => void;
postMessage(message: Object, transfer: ArrayBuffer[]): void;
postMessage(message: Object, options?: PostMessageOptions): void;
terminate(): void;
}
const parentPort: DedicatedWorkerGlobalScope;
}