私は現在、約50k〜60kポイントのデータを表すグラフをWebアプリケーションで生成する必要がある問題を解決しています。かなり速く(〜6秒)ロードされますが、D3.jsを使用してWebワーカーでグラフを生成し、SVGを渡してページにロードすることが可能かどうかは疑問です。Web WorkerとD3.jsを使用して非同期にグラフを生成しますか?
答えて
WebワーカーにはDOMアクセス権がありません。そのためにできることは、DOMをすばやく作成するために使用できるものを構築することだけです。作業者は、例えば、データセットを処理し、すべての重い計算を行い、その結果をアレイのセットとして戻すことができる。
https://github.com/mbostock/d3/commit/43d38773623b52209d2667287a1ae626fb95b0d9
最近のジェイソン・デイヴィスによってコミット。 Mike Bostockによれば、将来はDOM依存コードがd3.coreから分離され、WebワーカーAPIで動作するカスタムd3ビルドを作成することができます。
私は、多数のノードを持つ強制的なグラフを持っているのと同じ問題がありました。それは非常に鈍いと感じます。私は何らかの形でパフォーマンスを向上させたい。私は、ノードサーバ上のphantomJSを使った最後のスレッドは良い考えだと思うが、このアプローチに含まれるネットワークの待ち時間は、スムーズな力指向の感覚を損なうだろう。
DOM依存関係のないD3をどこから見つけるのですか? –
私は次のようにしてウェブ労働者を使用して、コードレイアウトの和音とグループを計算するために管理:
は、ドキュメントオブジェクト上dependecyを持っていませんD3のカスタムビルドを作成したり、 DOM(参照:https://github.com/mbostock/smash/wiki)を
は、Webワーカーファイルを作成し、カスタムd3は
を構築ロードするために
importScripts
を使用して、あなたのレンダリングコードであなたの労働者を有効にします。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()
後に、描画機能で:私は労働者との通信をカプセル化する約束を使用
calculateChords(matrix).then (groups, chords) -> ...
実際には、Webワーカーで、実際にd3を起動してd3をarroundに置いたままにしておくと、標準のd3を実行できます。しかし、(Webワーカーとd3を使用する際の)主な問題は、送受信メッセージのシリアライゼーションオーバーヘッドです。私は非常に誰かがシリアル化を取り除くために転送可能なオブジェクトを使用するための素晴らしい方法を考え出しているかどうかを知ることに非常に興味があります。 –
- 1. D3.JSを使用して同じWebサイトでAPIエンドポイントにアクセス
- 2. 非同期機能を使用していないときに非同期エラーが発生しますか?
- 3. Rails5アプリケーションでd3.jsを使用して棒グラフを作成する方法
- 4. 非同期JSを使用してDIVを描画する
- 5. d3.jsを使用して棒グラフにラベルを整える
- 6. Angular Js Promisesを使用して複数の非同期リクエストを作成する
- 7. THREE.jsとd3.jsを同期する
- 8. self.assertRaisesを非同期コンテキストマネージャとして使用できますか?
- 9. D3.js d3.nest()を使用して棒グラフでデータをグループ化する
- 10. 非同期JS関数をラップしてOCamlで使用できますか?
- 11. ノードAWS APIを使用したJS非同期呼び出し
- 12. CanBeNullとReSharper - 非同期タスクで使用していますか?
- 13. d3.json()とJSON.parse()は同じ結果を生成しますか?
- 14. コールバックを使用した.NET非同期Webサービス呼び出し
- 15. Web Workerを使用してファイルからImageImageを取得する
- 16. JavaScriptを使用してWebページに画像を非同期にロードする
- 17. Phantomjsを使用してD3.jsからSVGグラフを出力する
- 18. Redux-thunk非同期アクション:非同期アクションにはカスタムミドルウェアを使用します
- 19. Subjectを使用してカスタム非同期バリデータを作成できますか?
- 20. RecyclerAdapterから非同期タスクを使用中にエラーが発生しました
- 21. バックグラウンド同期モジュールを使用したWorkbox Service Worker
- 22. ツイストフレームワークを使用して非同期httpクライアントを作成
- 23. 非同期に非同期デリゲートを呼び出しますか?
- 24. 非同期タスクは良い応答を生成しません
- 25. jQueryを使用したD3.jsグラフのノード検索バー
- 26. 非同期メソッド(Web呼び出しを行う)を非同期にラップする
- 27. Web-Workerでメッセージを同期的に待機する
- 28. web2pyを使用した非同期バックグラウンドプロセス
- 29. D3.jsを使用した階層的な力のグラフ
- 30. d3.jsを使用したインタラクティブな線グラフ
感謝を。私はこれが答えになるのではないかと心配しました。 – user1449496
これはすでに古い質問ですが、... phantomJSはどうですか? – meetamit
@meetamitこれはオプションだと思いますが、phantomJSを使ってサーバー上にDOMを生成し、それをクライアントに渡しますか?しかしそれはウェブワーカーを使用していませんが、これが問題でした。 –