0

私は現在、パッケージ化された (デスクトップ) クロム アプリとして実行される電卓に取り組んでいます。math.jsライブラリを使用して数学入力を解析しています。これは私の古いコードです:

評価.js:

var parser = math.parser();  
function evaluate(input){  
    $("#output").text(parser.eval(input));  
}

ただし、入力が のような不合理なものである場合6234523412368492857483928!、アプリは入力を評価しようとしているため、フリーズするだけです。まだベータ版であることはわかっているmath.jsので、最終的には修正される可能性があります (オーバーフロー エラー) math.js

これを修正するために、Web ワーカーを使用してこれを修正し、非同期で実行しようとしています。これが私が今持っているコードです:

main.js

var evaluator = new Worker('evaluate.js');
evaluator.addEventListener('message', function(e){
    $("#output").text(e.data);
}, false);
function evaluate(input){
    evaluator.postMessage(input);
}

evaluate.js

var parser = math.parser();
function mathEval(input){
    return parser.eval(input);
}
self.addEventListener('message', function(e){
    self.postMessage(mathEval(e.data));
});

ただし、これを実行すると機能しません。また、Web ワーカーを使用するとエラーがスローされることに気付きUncaught ReferenceError: math is not defined - evaluate.js:1ましたが、古いコードではこのエラーはスローされませんでした。

質問:このコードが入力の評価に機能しないのはなぜですか? 複数のワーカーを使用して高速化することは可能ですか? ワーカーが 2 秒以上かかる場合に何らかのオーバーフロー エラーを実装したい場合、どのように実行するのが最善でしょうか? 最後に、これを行うためのより良い方法はありますか?

4

1 に答える 1

1

Web ワーカーは、完全に別のコンテキストで実行されます。親 Web ページのオブジェクトにはアクセスできません。math.js を使用する場合は、importScript を使用してワーカーにインポートする必要があります。

Using Web Workersガイドの「Importing Scripts And Libraries」の部分を読むことをお勧めします。これには、その方法と詳細な動作が説明されています。

于 2013-10-05T20:08:51.103 に答える