[英]Web Workers for Parsing Raw Input in Chrome Packaged Calculator App
我目前正在使用將作為打包(桌面)Chrome應用程序運行的計算器。 我正在使用math.js庫來解析數學輸入。 這是我的舊代碼:
Evaluation.js:
var parser = math.parser();
function evaluate(input){
$("#output").text(parser.eval(input));
}
但是,如果輸入不合理,例如6234523412368492857483928!
,該應用只是凍結,因為它正在嘗試評估輸入。 我知道math.js
仍處於測試階段,因此最終可能會解決(溢出錯誤),但是我找不到其他任何庫可以像math.js
一樣解析原始輸入。
為了解決這個問題,我正在嘗試使用網絡工作者來解決此問題,以使其異步運行。 這是我現在擁有的代碼:
main.js
var evaluator = new Worker('evaluate.js');
evaluator.addEventListener('message', function(e){
$("#output").text(e.data);
}, false);
function evaluate(input){
evaluator.postMessage(input);
}
Evaluation.js
var parser = math.parser();
function mathEval(input){
return parser.eval(input);
}
self.addEventListener('message', function(e){
self.postMessage(mathEval(e.data));
});
但是,這在我運行時不起作用。 另外,我注意到當我使用Web Worker時,它會引發錯誤Uncaught ReferenceError: math is not defined - evaluate.js:1
,但是對於舊代碼卻沒有引發此錯誤。
問題:為什么這段代碼無法評估輸入? 是否可以使用多個工作人員來加快速度? 如果我想在工作者花費超過2秒的時間來實現某種溢出錯誤,那么做這件事的最佳方法是什么? 最后,還有更好的方法嗎?
Web Worker在完全獨立的上下文中運行。 他們無權訪問父網頁上的對象。 如果要使用math.js,則必須使用importScript將其導入到worker中。
我建議閱讀“ 使用Web Workers”指南的“導入腳本和庫”部分,其中介紹了如何進行操作以及其詳細工作方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.