Skip to content
This repository was archived by the owner on May 29, 2023. It is now read-only.

Commit e70b6ad

Browse files
committed
Merge branch 'feature/webworker' of github.com:ng-web-apis/workers into feature/webworker
2 parents 97a9642 + 3d078d2 commit e70b6ad

File tree

5 files changed

+52
-17
lines changed

5 files changed

+52
-17
lines changed

projects/demo/src/app/app.browser.module.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {BrowserModule} from '@angular/platform-browser';
1010
import {WorkerModule} from '@ng-web-apis/workers';
1111
import {AppComponent} from './app.component';
1212
import {AppRoutingModule} from './app.routes';
13+
import {ClockComponent} from './clock.component';
1314

1415
@NgModule({
1516
bootstrap: [AppComponent],
@@ -20,7 +21,7 @@ import {AppRoutingModule} from './app.routes';
2021
AppRoutingModule,
2122
WorkerModule,
2223
],
23-
declarations: [AppComponent],
24+
declarations: [AppComponent, ClockComponent],
2425
providers: [
2526
{
2627
provide: LocationStrategy,
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
<form (ngSubmit)="workerThread.next(input.value)">
2-
<input #input />
3-
<button type="submit">Send</button>
4-
<button type="button" (click)="workerThread.complete()">Complete</button>
5-
</form>
1+
<app-clock></app-clock>
62

7-
{{ workerThread | async | waWorker: oneMoreFn | async | json }}
3+
<div class="example">
4+
<button (click)="workerThread.next()">Run in worker process</button>
5+
<p>Execution time: {{ workerThread | async }}</p>
6+
</div>
7+
<div class="example">
8+
<button (click)="emitter.next()">Run in main process</button>
9+
<p>Execution time: {{ result$ | async }}</p>
10+
</div>

projects/demo/src/app/app.component.less

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
align-items: center;
66
}
77

8-
.observer {
9-
background: skyblue;
10-
border-radius: 16px;
11-
padding: 40px;
8+
.example {
9+
min-width: 360px;
10+
border-top: 1px solid gainsboro;
11+
margin-top: 16px;
12+
padding-top: 16px;
1213
}
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import {ChangeDetectionStrategy, Component} from '@angular/core';
22
import {WebWorker, WorkerExecutor} from '@ng-web-apis/workers';
3+
import {Observable, Subject} from 'rxjs';
4+
import {map} from 'rxjs/operators';
35

46
@Component({
57
selector: 'main',
@@ -8,15 +10,25 @@ import {WebWorker, WorkerExecutor} from '@ng-web-apis/workers';
810
changeDetection: ChangeDetectionStrategy.OnPush,
911
})
1012
export class AppComponent {
11-
workerThread: WebWorker<string, string>;
13+
workerThread: WebWorker<void, number>;
14+
emitter: Subject<void>;
15+
result$: Observable<number>;
1216

1317
constructor(webWorkerExecutor: WorkerExecutor) {
14-
this.workerThread = webWorkerExecutor.createWorker((result: string) =>
15-
Promise.resolve(`Message from worker: ${result}`),
16-
);
18+
this.workerThread = webWorkerExecutor.createWorker(this.startCompute);
19+
this.emitter = new Subject();
20+
this.result$ = this.emitter.pipe(map(this.startCompute));
1721
}
1822

19-
oneMoreFn(data: string): Promise<string> {
20-
return Promise.resolve(data);
23+
startCompute(): number {
24+
function compute(num: number): number {
25+
return Array.from({length: num}).reduce<number>((sum: number) => sum + 1, 0);
26+
}
27+
28+
const start = performance.now();
29+
30+
Array.from({length: 16000}).forEach((_, index) => compute(index));
31+
32+
return performance.now() - start;
2133
}
2234
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
2+
import {Observable, timer} from 'rxjs';
3+
import {map} from 'rxjs/operators';
4+
5+
@Component({
6+
selector: 'app-clock',
7+
template: `
8+
{{ date | async | date: 'mediumTime' }}
9+
`,
10+
changeDetection: ChangeDetectionStrategy.OnPush,
11+
})
12+
export class ClockComponent {
13+
date: Observable<number>;
14+
15+
constructor() {
16+
this.date = timer(0, 1000).pipe(map(() => Date.now()));
17+
}
18+
}

0 commit comments

Comments
 (0)