Skip to content

Commit d80532d

Browse files
committed
Run heavy generator inside web worker
1 parent 42d212b commit d80532d

File tree

7 files changed

+60
-16
lines changed

7 files changed

+60
-16
lines changed

angular.json

+16-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
"styles": [
3131
"src/styles.scss"
3232
],
33-
"scripts": []
33+
"scripts": [
34+
{ "input": "dist/generator.worker.js", "lazy": true }
35+
]
3436
},
3537
"configurations": {
3638
"production": {
@@ -130,7 +132,19 @@
130132
}
131133
}
132134
}
135+
},
136+
"sudoku-generator": {
137+
"root": "",
138+
"projectType": "library",
139+
"architect": {
140+
"build": {
141+
"builder": "@angular-devkit/build-webpack:webpack",
142+
"options": {
143+
"webpackConfig": "webpack.config.js"
144+
}
145+
}
146+
}
133147
}
134148
},
135149
"defaultProject": "ng-sudoku"
136-
}
150+
}

package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
"version": "0.0.0",
44
"scripts": {
55
"ng": "ng",
6-
"start": "ng serve",
7-
"build": "ng build",
6+
"start": "ng run sudoku-generator:build && ng serve",
7+
"build": "ng run sudoku-generator:build && ng build",
88
"test": "ng test",
99
"lint": "ng lint",
1010
"e2e": "ng e2e"
1111
},
1212
"private": true,
1313
"dependencies": {
14+
"@angular-devkit/build-webpack": "^0.7.3",
1415
"@angular/animations": "^6.1.2",
1516
"@angular/cdk": "^6.4.3",
1617
"@angular/common": "^6.1.0",

src/app/app.component.ts

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Component, OnInit } from '@angular/core';
2-
import { SudokuSolver } from '@jlguenego/sudoku-generator';
32
import { Subscription, timer } from 'rxjs';
43

54
import { Sudoku } from './sudoku/sudoku';
@@ -27,19 +26,26 @@ export class AppComponent implements OnInit {
2726
}
2827

2928
generate(): void {
30-
const solution = SudokuSolver.generate();
31-
const masked = SudokuSolver.carve(solution, this.numberOfEmptyFields);
29+
const worker = new Worker('generator.worker.js');
3230

33-
this.sudoku = solution.map(row => row.map(number => ({answer: number})));
31+
worker.postMessage(this.numberOfEmptyFields);
3432

35-
masked.forEach((row, rowIndex) => {
36-
row.forEach((value, colIndex) => {
37-
this.sudoku[rowIndex][colIndex].value = value === 0 ? undefined : value;
38-
this.sudoku[rowIndex][colIndex].readonly = value !== 0;
33+
worker.onmessage = (event) => {
34+
const { solution, masked } = event.data;
35+
36+
this.sudoku = solution.map(row => row.map(number => ({answer: number})));
37+
38+
masked.forEach((row, rowIndex) => {
39+
row.forEach((value, colIndex) => {
40+
this.sudoku[rowIndex][colIndex].value = value === 0 ? undefined : value;
41+
this.sudoku[rowIndex][colIndex].readonly = value !== 0;
42+
});
3943
});
40-
});
4144

42-
this.startTimer();
45+
this.startTimer();
46+
47+
worker.terminate();
48+
};
4349
}
4450

4551
onGameFinished() {

src/app/generator.worker.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { SudokuSolver } from '@jlguenego/sudoku-generator';
2+
3+
onmessage = function(e) {
4+
const solution = SudokuSolver.generate();
5+
const masked = SudokuSolver.carve(solution, e.data);
6+
7+
postMessage({
8+
solution: solution,
9+
masked: masked
10+
});
11+
};

src/app/sudoku/sudoku.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export class SudokuComponent implements OnChanges {
8686
hint() {
8787
if (this.activeField && !this.activeField.readonly) {
8888
this.activeField.value = this.activeField.answer;
89-
this.checkFinished();
89+
this.insertNumber(this.activeField.answer);
9090
}
9191
}
9292

webpack.config.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const path = require('path');
2+
3+
const config = {
4+
entry: './src/app/generator.worker.js',
5+
mode: 'production',
6+
output: {
7+
path: path.resolve(__dirname, 'dist'),
8+
filename: 'generator.worker.js'
9+
}
10+
};
11+
12+
module.exports = config;

yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
typescript "~2.9.1"
7272
webpack-sources "^1.1.0"
7373

74-
"@angular-devkit/[email protected]":
74+
"@angular-devkit/[email protected]", "@angular-devkit/build-webpack@^0.7.3":
7575
version "0.7.3"
7676
resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.7.3.tgz#2810675dd776f70605166ab3d577cfad3262d755"
7777
dependencies:

0 commit comments

Comments
 (0)