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