Skip to content

Commit 32951cc

Browse files
committed
feat(example): Run heavy work on a separate isolate
1 parent 3e32fa5 commit 32951cc

5 files changed

Lines changed: 6678 additions & 8 deletions

File tree

.github/workflows/static.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,21 @@ jobs:
2525
uses: actions/checkout@v4
2626
- name: Setup Pages
2727
uses: actions/configure-pages@v5
28-
- name: 'Setup Dart'
28+
- name: "Setup Dart"
2929
uses: dart-lang/setup-dart@v1.3
30-
- name: 'Build Jaspr'
30+
- name: Install dependencies
31+
run: dart pub get
32+
- name: Build isolate manager workers
33+
run: dart run isolate_manager:generate
34+
- name: "Build Jaspr"
3135
run: |
3236
dart pub global activate jaspr_cli
3337
cd example
3438
jaspr build --verbose
3539
- name: Upload artifact
3640
uses: actions/upload-pages-artifact@v3
3741
with:
38-
path: 'example/build/jaspr'
42+
path: "example/build/jaspr"
3943
- name: Deploy to GitHub Pages
4044
id: deployment
4145
uses: actions/deploy-pages@v4

example/lib/main.client.dart

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
11
library;
22

3+
import 'dart:async';
4+
5+
import 'package:isolate_manager/isolate_manager.dart';
36
import 'package:jaspr/client.dart';
7+
import 'package:romanize/romanize.dart';
48

59
import 'app.dart';
610

7-
void main() {
11+
@pragma('vm:entry-point')
12+
@isolateManagerWorker
13+
Future<String> romanize(String text) async {
14+
await TextRomanizer.ensureInitialized();
15+
return TextRomanizer.romanize(text);
16+
}
17+
18+
final service = RomanizationService();
19+
void main() async {
20+
await service.init();
21+
822
runApp(App());
923
}
24+
25+
class RomanizationService {
26+
late final IsolateManager<String, String> _manager;
27+
28+
Future<void> init() async {
29+
_manager = IsolateManager.create(
30+
romanize,
31+
workerName: 'romanize',
32+
concurrent: 1,
33+
);
34+
35+
await _manager.start();
36+
}
37+
38+
Future<String> convert(String text) async {
39+
return await _manager.compute(text);
40+
}
41+
}

example/lib/pages/home.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import 'package:example/main.client.dart';
12
import 'package:jaspr/dom.dart';
23
import 'package:jaspr/jaspr.dart';
3-
import 'package:romanize/romanize.dart';
44
import 'package:web/web.dart' as web;
55

66
class Home extends StatefulComponent {
@@ -12,8 +12,7 @@ class Home extends StatefulComponent {
1212

1313
class _HomeState extends State<Home> {
1414
String _text = '안녕하세요, 만나서 반갑습니다.';
15-
16-
String get _romanized => TextRomanizer.romanize(_text);
15+
late String _romanized = _text;
1716

1817
void _syncScroll(web.Event event, String otherId) {
1918
final source = event.target as web.HTMLTextAreaElement;
@@ -76,7 +75,13 @@ class _HomeState extends State<Home> {
7675
'scroll': (e) => _syncScroll(e, 'output-area'),
7776
},
7877
placeholder: 'Type your text here...',
79-
onInput: (text) => setState(() => _text = text),
78+
onInput: (text) async {
79+
setState(() => _text = text);
80+
_romanized = await service.convert(text);
81+
if (mounted) {
82+
setState(() {});
83+
}
84+
},
8085
rows: 15,
8186
required: true,
8287
spellCheck: SpellCheck.isFalse,

example/pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ environment:
1010
dependencies:
1111
jaspr: ^0.22.0
1212
web: ^1.1.1
13+
isolate_manager: ^6.1.2
1314
romanize:
1415
path: ../
1516

@@ -18,6 +19,7 @@ dev_dependencies:
1819
build_web_compilers: ^4.4.6
1920
jaspr_builder: ^0.22.0
2021
lints: ^5.0.0
22+
isolate_manager_generator: ^0.3.0
2123

2224
dependency_overrides:
2325
kuromoji:

0 commit comments

Comments
 (0)