Hi David, Great to see this post about D3.js _ I am a fan of D3.js :-)
I have been using D3 based JS lib called plotly https://plot.ly/javascript/ to visualise JSON data from 4D/MongoDB/CSVs/JSON in few projects now. Here are a few prototypes I produced in node.js: http://plotly.tenthmatrix.co.uk/ the great things about this tool is it is super quick to just start building charts. Very less coding required. http://plotly.tenthmatrix.co.uk/test7 is dynamically fetching changed data from server. I have recently added plotly.js in my upcoming CRM app release - I have also used these charts in 4D desktop and our JS Team India has build chart reporting system for Cloud SAAS business apps with great results. I will be releasing some examples working with code on GitHub soon. Stay tuned :-) Cheers / Balinder On 14 January 2017 at 22:29, David Adams <[email protected]> wrote: > Bertrand, > > Since you brought it up.... > > That was a pretty interesting piece, but they very unfortunately went to a > great deal of work and missed out on a lot of existing information. Here's > a better post on the same subject: > > http://www.visualcinnamon.com/2015/11/learnings-from-a-d3- > js-addict-on-starting-with-canvas.html > > For those of you following along at home, a recap: > > * If what you want are Web-based business charts, pay for HighCharts and > move on. It just looks fantastic and very easy to use. D3 is...something > else. If you need to invent a new chart type, go with D3. > > * D3 binds data to DOM elements in a browser. It's SVG. That's the default. > * Browsers render SVG using the CPU (mostly, if not entirely.) That tops > out. People with substantial data sets where they need to render thousands > of moving objects simultaneously hit a performance wall. > > * The big problem is the big DOM. Fact of life. > > * But SVG is awesome! Transitions, styling, native objects, vectors. > Vectors! So good. But you just hit a wall at some point. Not a D3 specific > issue, but an issue that D3 users run into, if they have huge data sets > with complex rendering. (My data sets aren't that size, but some people's > sets are.) > > Enter HTML5 and the Canvas object. It is a *bitmap* rendering space, not a > vector space. Eh? It's pushed out to the GPU, so you can get *massive* > processing power for "free." This is exactly why I said the other day > (roughly): "Cores? Who cares about cores. The cool kids are pushing stuff > to the GPU." You can render ginormous data sets to a bitmap this way and it > works great. These days, it's not that common to optimize something by > pushing it to a different bit of hardware, but that's the case here. > > But wait..bitmap...so how do you get events? Transitions? You don't. > They're bitmaps - static. So you have to put more work into simulating > those features. To get transitions (frame animation), you have to renderer > the scene over, and over, and over very quickly. So you end up doing vastly > more work, but the result executes more quickly because of all of the GPU > processing. That's the point behind taking advantage of WebGL. (The post > Bernard listed doesn't seem to explain this - but that's the reason to push > things to WebGL, it's GPU optimized for the bitmaps.) > > Okay, we've got animation back. What about events? I mean when you click on > a "circle" or something, there's no circle object there - it's just a pixel > like all of the others. I've seen two approaches. One is that you overlay a > Voronoi diagram: > > https://en.wikipedia.org/wiki/Voronoi_diagram > > Yeah, like I know what any of that means ;-) There are tons of D3 examples > of overlaying Voronoi diagrams for various reasons. > > The other technique (and the one I'll guess that the Pixi library mentioned > uses) is to take advantage of a spare bit of information in the pixel You > can generate a unique 'color index' in a non-display area so that each > pixel has its own unique ID. Kind of cool and very efficient. Then you need > to have a mapping system to translate which "object" that pixel is a part > of. Click-get color index-lookup index in map-figure out if the click is in > an 'object'-run appropriate event handling code. > > I haven't implemented either of these techniques. I managed to make it up > to the first day of 4D's very nice world tour last year and JPR showed a > renderer in 4D that had pixel-level responsiveness for millions of pixels. > I assumed he was using a technique similar-if-not-identical-to the second > one. (In which case, moving it to a WebArea + JS + Canvas would get you GPU > acceleration.) I couldn't come to the second day, so I never did find out > if that's how he was doing it! > > This is all off the top of my head, first thing in the morning...and, > again, I haven't implemented either of these things. Why, in fact, do I > even know about all of this? Well, when I learn a new tool, I like to poke > around at the edges a lot and see what sort of problems people run into. > That way, if you ever do run into it, you know how other people have > already solved the problem. The idea of an overcrowded DOM is pretty > obvious and easy to run into at scale, so it pops up frequently. I'm > surprised that the folks in the blob post that Bertrand mentioned had to > "reinvent the car" on this one. > > Oh, I should also add that Mike Bostock (Mr. D3) is well aware of this > issue and has been for years. He's had lots of posts, proof-of-concept code > for working with Canvas and such. In fact, version 4 of D3 (out for several > months), adds support for abstracting the rendering engine. Meaning, you > can render to SVG or Canvas. At least for some of the primitives. So, > targeting Canvas - for the very reasons mentioned in the post Bertrand > listed - is a core feature of the shipping version of D3 and support will > only increase over time. He's got a bunch of blog posts about it but I > don't have them to hand. > > Unfortunately, I haven't been able to work on D3 for about 6 months or > since the V4 release. I've got a roadmap that takes me back to D3, but > there's a few months of prep work before I get there. Looking forward to. > The thing is just amazing. It's a turning point in data visualization, no > joke. Super big deal. > ********************************************************************** > 4D Internet Users Group (4D iNUG) > FAQ: http://lists.4d.com/faqnug.html > Archive: http://lists.4d.com/archives.html > Options: http://lists.4d.com/mailman/options/4d_tech > Unsub: mailto:[email protected] > ********************************************************************** > ********************************************************************** 4D Internet Users Group (4D iNUG) FAQ: http://lists.4d.com/faqnug.html Archive: http://lists.4d.com/archives.html Options: http://lists.4d.com/mailman/options/4d_tech Unsub: mailto:[email protected] **********************************************************************

