簡體   English   中英

網絡工作者在Chrome打包計算器應用中解析原始輸入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM