te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Use Web Worker and D3.js to asynchronously generate graphs? - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Use Web Worker and D3.js to asynchronously generate graphs? - Stack Overflow

programmeradmin5浏览0评论

I'm currently working a problem that requires my web application to generate a chart that represents approximately 50k to 60k points of data. It loads fairly quickly (~6 seconds), but what I'm wondering if it is possible to use D3.js to generate the graph in a Web Worker and then pass the SVG back to be loaded into the page.

I'm currently working a problem that requires my web application to generate a chart that represents approximately 50k to 60k points of data. It loads fairly quickly (~6 seconds), but what I'm wondering if it is possible to use D3.js to generate the graph in a Web Worker and then pass the SVG back to be loaded into the page.

Share Improve this question asked Jun 11, 2012 at 17:14 user1449496user1449496 1961 silver badge5 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 5

Web Workers have no DOM access, so all you could do on that side would be to build something that could be used for quickly creating the DOM. The worker(s) could e.g process the datasets and do all the heavy putations, then pass the result back as a set of arrays.

https://github./mbostock/d3/mit/43d38773623b52209d2667287a1ae626fb95b0d9

A recent mit by Jason Davies. Mike Bostock says that in future the DOM dependent code will be separated from d3.core and that way you can make a custom d3 build that works with web-workers API.

I had the same problem where I have a force directed graph with a large number of nodes. It feels very sluggish. I want to improve the performance in some way. I think the last thread with phantomJS on a node server is a good idea, but the network latency involved in the approach will ruin the smooth force-directed feeling.

I managed to calculate the chords and groups of a chord layout using a web worker by doing the following:

  1. create a custom build of d3 that doesn't have a dependecy on the document object or the DOM (see: https://github./mbostock/smash/wiki)

  2. create a web worker file and use importScripts to load the custom d3 build

  3. activate your worker in your rendering code. I used a promise to encapsulate the munication 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) ->
        ...
    
发布评论

评论列表(0)

  1. 暂无评论