最近做關於雨量插值的項目,本來使用後臺的GP工具做的,但是處理時間比較長需要十幾秒鐘左右,所以研究怎麼通過前臺來計算。
參考下克里金例子,思路是生成要計算區域的100乘以100網格,然後通過函數進行計算該網格克里金值,最後利用網格和值進行渲染,使用該方法繪製速度有所提高,七秒左右就能繪製完成,不過速度還是能提高的,提高的要訣是使用多線程。
多線程使用比較簡單,只要new worker('krigingworker.js'),然後通過postmessage以及onmessage與主線程和多線程中通訊。下面給出例子
<code>var
myWorker =new
Worker("krigingworker.js"
); myWorker.postMessage = myWorker.webkitPostMessage || myWorker.postMessage; myWorker.postMessage(); /<code>
krigingworker.js中
<code>importScripts("kriging.js"
)self
.postMessage =self
.webkitPostMessage ||self
.postMessage;self
.onmessage =function
(e)
{self
.postMessage(); /<code>
worker中使用別的腳本要使用importScripts導入,當需要傳遞參數可以transferable object(通訊時會比較快,參考worker使用),本次項目中使用Float64Array.看幾個初始化範例
<code>var
buffer=new
ArrayBuffer
(10248
)var
a =new
Float64Array
(buffer);var
a =new
Float64Array
(1000
);var
a =new
Float64Array
([1
,1
,1
]) /<code>
我們嘗試定義一個並接收到數據
<code>var
size =1000
;var
result =new
ArrayBuffer
(size);var
gridPoint =new
Float64Array
(result); self.postMessage(gridPoint.buffer, [gridPoint.buffer]); /<code>
<code>myWorker.onmessage =function
(e
) {var
data =new
Float64Array
(e.data);/<code>
關鍵字: 多線程 Float64Array myWorker