私はちょっと重すぎる計算(デジタル署名)がある時点でCordovaアプリを書いています。結果として、それらの計算を起動するボタンがクリックされると、UIが瞬時にフリーズします。集中的な計算のためにコルドバのアプリがブロックされています
計算はまたjavascriptコードです。Webワーカーなどを使用して別のスレッドにオフロードする方法はありますか?
私はちょっと重すぎる計算(デジタル署名)がある時点でCordovaアプリを書いています。結果として、それらの計算を起動するボタンがクリックされると、UIが瞬時にフリーズします。集中的な計算のためにコルドバのアプリがブロックされています
計算はまたjavascriptコードです。Webワーカーなどを使用して別のスレッドにオフロードする方法はありますか?
ウェブワーカーを使用して、別のスレッドでintensve JS処理を行うことができるため、UIスレッドをブロックしないでください。 注:最新のWebviewを使用する必要があるので、Android 4.xをターゲットにしている場合はCrosswalk(Android 5+は自動更新されたWebviewのためうまくいくはずです)。
myapp.js:
あなたはこのような何かを行うことができます
var worker = new Worker('my.worker.js');
// Receive the output from the worker when it's done
worker.addEventListener('message', function (e) {
try {
var data = e.data;
if(!data.success){
handleError(data.error);
}else{
display(data.output);
}
} catch (ex) {
handleError(ex);
}
}, false);
// Start the worker with some input
worker.postMessage({
input: "something heavy to process"
});
my.worker.js:
importScripts('lib/some.dependency.js');
// Receive the input from the main UI thread
self.addEventListener('message', function(ev) {
try{
var data = ev.data;
var input = data.input;
var output = doSomeHeavyLifting(input);
self.postMessage({
success: true,
output: output
});
}catch(ex){
self.postMessage({
success: false,
error: ex
});
}
}, false);
動作するかテストします。しかし、Cordovaアプリの中でWebワーカーを使用できると確信していますか?私は主題に関する多くの情報を見つけられませんでしたが、Webワーカーが実装されていない/禁じられているように見えました。 –
'あなたはコルドバのアプリの中でウェブワーカーを使えると確信していますか?ポジティブ:AndroidとiOSの両方について、いくつかのハイプロファイルプロダクションアプリでこのテクニックを使用します。 Crosswalk/WKWebViewでうまく動作します:〜100kユーザーのユーザーベースを組み合わせると、作業者からのクラッシュはほとんどありません。 「Webワーカーが実装されていない、または禁止されているように見えます」 - これは、あなたのCordovaアプリケーションが内部で実行しているWebviewに至り、最新のWebviewはWebワーカーをサポートしています。それを試してみてください... – DaveAlden
ありがとう、それは知っておくと良いです –
重計算はjsファイルまたはネイティブコードで行われています? – LuckyStarr
これはjavascriptで行われました –