【问题标题】:How to parallelize d3.js or cubism.js如何并行化 d3.js 或 cubism.js
【发布时间】:2013-07-21 20:09:38
【问题描述】:

我正在关注http://adambom.github.io/parallel.js/上的示例

例子:

var p = new Parallel([0, 1, 2, 3, 4, 5, 6]), 
        log = function () { console.log(arguments); };

function fib(n) {
  return n < 2 ? 1 : fib(n - 1) + fib(n - 2);
};

p.map(fib).then(log)

效果很好,现在我想在 d3 对象上应用相同的概念。

我有一个循环遍历名称列表的 for 循环:

for name in names by 1
  // set some stuff
  context = [....]
  metrics = [....]

  d3.select("#"+name)
    .selectAll(".horizon")
    .data(metrics).enter()
    .insert("div", ".bottom")
    .attr("class", "horizon")
    .call context.horizon()

如果我将 for 循环的内容放在函数 fib 内容中,它会抱怨“未定义的 d3 变量”......但我觉得我错过了这个概念。

【问题讨论】:

    标签: javascript parallel-processing coffeescript d3.js cubism.js


    【解决方案1】:

    你不能并行化链。这里的 d3 没有什么特别之处——当你链接调用时,即foo(a).bar(b).foobar(c),这意味着foo() 返回一个带有方法bar() 的对象,而后者又返回带有方法foobar() 的对象。这实质上意味着您不能同时运行foo()bar(),因为后者需要前者的结果。

    【讨论】:

    • 是的,但是如果我将整个链式事件生成 40 次,我猜我仍然不能这样做,因为它正在操纵我昨天读到的 DOM。
    • Parallel.js 使用 web worker,目前无法访问 DOM
    【解决方案2】:

    我无法并行化 d3.select

    但我只能并行化构建数组指标的部分,但几乎什么也没做 --- 少 1 秒?

    如果我发现任何问题,我将发布我的解决方案

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2016-09-10
      • 1970-01-01
      • 2014-04-07
      • 2017-06-10
      • 1970-01-01
      相关资源
      最近更新 更多