最近做關於雨量插值的項目,本來使用后台的GP工具做的,但是處理時間比較長需要十幾秒鍾左右,所以研究怎么通過前台來計算。
參考下克里金例子,思路是生成要計算區域的100乘以100網格,然后通過函數進行計算該網格克里金值,最后利用網格和值進行渲染,使用該方法繪制速度有所提高,七秒左右就能繪制完成,不過速度還是能提高的,提高的要訣是使用多線程。
多線程使用比較簡單,只要new worker('krigingworker.js'),然后通過postmessage以及onmessage與主線程和多線程中通訊。下面給出例子
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);