我目前正在解决一个问题,需要我的Web应用程序生成一个表示大约50k到60k个数据点的图表。它加载相当迅速(约6秒钟),但我想知道是否可以使用D3.js在Web Worker中生成图形,然后传回SVG以加载到页面中。
我目前正在解决一个问题,需要我的Web应用程序生成一个表示大约50k到60k个数据点的图表。它加载相当迅速(约6秒钟),但我想知道是否可以使用D3.js在Web Worker中生成图形,然后传回SVG以加载到页面中。
https://github.com/mbostock/d3/commit/43d38773623b52209d2667287a1ae626fb95b0d9
最近Jason Davies提交了一项内容。Mike Bostock表示,未来将从d3.core中分离出依赖于DOM的代码,这样您就可以制作一个使用web-workers API的自定义d3构建版本。我使用Web Worker计算弦和弦型分组,具体步骤如下:
create a custom build of d3 that doesn't have a dependecy on the document object or the DOM (see: https://github.com/mbostock/smash/wiki)
create a web worker file and use importScripts
to load the custom d3 build
activate your worker in your rendering code. I used a promise to encapsulate the communication with the worker:
calculateChords = (padding, matrix) ->
deferred = $.Deferred()
worker = new Worker("worker.js")
worker.onmessage = (e) ->
deferred.resolve(e.data.groups, e.data.chords);
worker.postMessage {
matrix: matrix
}
deferred.promise()
later, in the rendering function:
calculateChords(matrix).then (groups, chords) ->
...