私は現在、パッケージ化された (デスクトップ) クロム アプリとして実行される電卓に取り組んでいます。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 秒以上かかる場合に何らかのオーバーフロー エラーを実装したい場合、どのように実行するのが最善でしょうか? 最後に、これを行うためのより良い方法はありますか?