DO NOT EDIT TVCG2020 SSVG Final
DO NOT EDIT TVCG2020 SSVG Final
Abstract—
The dominant markup language for Web visualizations—Scalable Vector Graphics (SVG)—is comparatively easy to learn, and is open,
accessible, customizable via CSS, and searchable via the DOM, with easy interaction handling and debugging. Because these attributes
allow visualization creators to focus on design on implementation details, tools built on top of SVG, such as D3.js, are essential to the
visualization community. However, slow SVG rendering can limit designs by effectively capping the number of on-screen data points, and
this can force visualization creators to switch to Canvas or WebGL. These are less flexible (e.g., no search or styling via CSS), and harder
to learn. We introduce Scalable Scalable Vector Graphics (SSVG) to reduce these limitations and allow complex and smooth visualizations
to be created with SVG. SSVG automatically translates interactive SVG visualizations into a dynamic virtual DOM (VDOM) to bypass
the browser’s slow ‘to specification’ rendering by intercepting JavaScript function calls. De-coupling the SVG visualization specification
from SVG rendering, and obtaining a dynamic VDOM, creates flexibility and opportunity for visualization system research. SSVG uses
this flexibility to free up the main thread for more interactivity and renders the visualization with Canvas or WebGL on a web worker. Together,
these concepts create a drop-in JavaScript library which can improve rendering performance by 3–9× with only one line of code added.
To demonstrate applicability, we describe the use of SSVG on multiple example visualizations including published visualization research.
A free copy of this paper, collected data, and source code are available as open science at osf.io/ge8wp.
1 I NTRODUCTION
CALABLE Vector Graphics (SVG) is the dominant markup to lower-level pixel-based interfaces such as Canvas and WebGL.
S language for visualizations on the web. The format is open
and comparatively easy to learn, and the SVG document object
For instance, in one 2009 Firefox benchmark [37], Canvas is
≈ 4× faster than SVG for rendering 600 circles. These gains are
model (DOM) is accessible, searchable, and easy to customize wrought by bypassing the DOM and requiring the user to provide
with CSS. As data is represented via individual elements, it is their own higher-level object (and data binding) abstraction, but this
easy to add interaction to these elements, and to select and debug approach is harder to learn, causes more difficult implementation
them when necessary. The data visualization community has built and debugging, loses the useful searchable and CSS customizable
infrastructure around SVG with tools like D3.js [7], which enable properties of SVG, and makes element-wise interactions more
fast development because data are bound to visual mark objects like difficult to implement. While object-level abstraction libraries have
<circle> and <rect> in the SVG DOM. The success of this open been proposed to simplify the development process for Canvas and
format is in part due to Web browser tools that help developers WebGL [31], none have yet gained a critical mass within the visual-
inspect and debug element appearance and behavior. With the help ization community. Similarly, browsers have recently added support
of these tools, it is easy to learn from and adapt existing SVG for the new OffscreenCanvas feature [40], which can parallelize
markup, leading to many visualizations being created using SVG. drawing work and increase performance. But so far, few visual-
In these respects, SVG is essential to the visualization community. izations take advantage of these options for higher performance
However, this flexibility comes at a price: as dataset size because they are challenging to use. Community investment in SVG
increases and the corresponding number of DOM nodes grows, continues as it is easier and more flexible for visualization proto-
SVG-based visualizations become slow. Even a minor DOM typing and development; yet the performance problems remain.
update triggers the browser rendering pipeline which includes The research question we address is how the SVG specification
full re-calculation of styles, layout, updating the DOM layer of visualizations — which is important to the community — may be
tree, painting, and compositing. This overhead can lead to slow de-coupled from the browser-based SVG rendering — which does
performance for animation and interaction even with only a few not sufficiently scale. To answer this question, we explored multiple
hundred nodes, which acts as a significant limitation on the space new visualization system ideas by analyzing the state of the art
of possible visualization designs and datasets. and the background relevant to data visualization. We discovered
For rendering and interaction performance, the community turns several shortcomings and identified research opportunities for
data visualization system research. First, we studied whether and
how JavaScript function calls meant to populate and update the
• Michail Schwab, David Saffo, Nicholas Bond, Cody Dunne, and Michelle DOM can be intercepted and redirected to instead reliably and
A. Borkin are with Northeastern University. E-mail: {schwab.m, saffo.d,
bond.n, c.dunne, m.borkin}@northeastern.edu. efficiently target a virtual DOM (VDOM). Specifically, we focused
• Shash Sinha, Jeff Huang and James Tompkin are with Brown University. on a common scenario in data visualization: updating attributes
E-mail: {ssinha11, jeff huang, james tompkin}@brown.edu. of many elements at once. Second, we explored communication
Manuscript received April XX, 20XX; revised August XX, 20XX. strategies to effectively maintain a VDOM on a worker thread
2
Setup
Line Marks
12,000
Implementation
SVG & D3
SVG
Rendering
7 FPS
Interaction Delay
151 ms
Contribution: SSVG
Rendering
36 FPS
Interaction Delay
21 ms
Fig. 1. Viegas & Wattenberg’s popular wind map visualization is written for the Web using Canvas for its rendering speed (http://hint.fm/wind/).
Implementation via the more-familiar SVG and D3.js is comparatively simple and enables element-level events for interaction, styling with CSS, and
element inspection, but results in slow rendering at 7 frames per second (FPS). Using SSVG, via one line of additional code, we reach 36 FPS. This
is faster than the original Canvas implementation. Live at ssvg.io/examples/windmap.
including SharedArrayBuffers. Again, we optimized for common show SSVG’s applicability in visualization research in a real-world
data visualization usage patterns of SVGs. Third, we introduced research project that uses SSVG published at CHI 2020 by Klamka,
the usage of the new OffscreenCanvas element to offload the Horak and Dachselt, researchers unaffiliated with the authors [23].
rendering work from the main thread to the worker thread. This We release SSVG as open source software for interactive
effectively provides the first accessible multi-thread solution visualization developers to use at ssvg.io and osf.io/ge8wp. Beyond
for web-based information visualization. Fourth, we enabled the SSVG system, we contribute:
element-level interactivity common in SVGs even when rendering • The concept of automated translation from interactive DOM to
Canvas visualizations. We do this by performing hitbox testing dynamic VDOM, de-coupling SVG specification and rendering,
on the VDOM and re-triggering JavaScript events on the hidden • A communication technique to efficiently maintain a dynamic
DOM events so that JavaScript event listeners can capture them. VDOM on a worker thread,
We developed, implemented and bundled these concepts into • An optimized rendering approach that batches the drawing of
Scalable Scalable Vector Graphics (SSVG): a drop-in JavaScript many elements and that uses OffscreenCanvas without additional
library for D3.js which can ‘scale’ SVG performance to that of burdens for visualization creators,
a native Canvas reimplementation. Depending on code complexity, • Recommendations for visualization system creators based on
SSVG works with as little as one line of code. SSVG is the first our lessons learned, including research opportunities in the areas
system able to continuously render a dynamic SVG as Canvas of accessibility, expressivity and responsiveness which take
or WebGL, which dramatically improves rendering performance advantage of the availability of a dynamic VDOM.
and reduces DOM overhead. In addition, SSVG is the first
web-based visualization system to take advantage of parallel 2 A M OTIVATING E XAMPLE
rendering. This approach frees the main thread from rendering Jasmine is a student who has taken a data visualization course
and asks it only to process simulation computations, interaction and learned basic Web development and D3.js. She sees Viegas &
handling, and VDOM updates. For example, adding SSVG helps Wattenberg’s wind map [39] and feels inspired to better understand
the computationally-intensive calculation of a force-directed graph the chosen encodings by interactively editing them. She right-clicks
layout converge much faster while maintaining an interactive the map and looks for “Inspect” to change the map’s color via CSS,
visualization (see Figure 12 & Figure 11). but is surprised to find instead “Save image as...”: the visualization
We evaluated the robustness of SSVG by applying it to 25 is rendered via Canvas, which only allows exporting as an image
visualizations taken from bl.ocks.org. We find that SSVG works on and has no DOM to inspect. Jasmine investigates to find that the
24 of them without any code changes, and that changing 2 lines of Canvas visualization is over 1,000 lines of pure JavaScript.
code allows the one remaining visualization to work with SSVG. Undeterred, Jasmine re-makes the visualization as a learning
Further, we evaluated SSVG’s efficiency on four rendering-heavy exercise. Using D3.js, she binds the wind data to line elements
visualizations. SSVG improves rendering performance by 3−9×, in her SVG and, with 200 lines of JavaScript code, creates the
and shows a speedup in network layout visualization stabilization visualization seen in Figure 1. With moderate effort, she has imple-
from 16 seconds to 5 seconds. We show that SSVG increases its mented it in a format open to inspection, CSS manipulation, and
performance twice as much as SVG given an increase in CPU power. modification in editors such as Inkscape or Illustrator. However, she
We also demonstrate the increased ease of development for complex quickly realizes why Canvas was used, as Jasmine’s SVG windmap
data visualizations with a remake of a famous wind map visualiza- has three problems: First, the rendering happens at such a low frame
tion (Fig. 1) and a node-link visualization of the IEEE Information rate (7 FPS) that she sees individual images rather than continuous
Visualization conference co-author network (Fig. 11). Finally, we motion. Second, the browser becomes slow to respond to interaction
3
this markup into pixels visible on the screen. On Google Chrome, to use the OffscreenCanvas element would need to implement
the steps which are performed on the main thread are shown in their custom logic for rendering the specific visualization, for
Figure 31 : Style, Layout, Paint, and Composite. The Style step communicating updates from the main thread to the renderer thread,
applies rules specified in CSS, the Layout step lays out elements and to support interactivity. Interactivity is particularly challenging
on the website, the Paint step decides which areas get filled with because knowing what visualization elements were interacted with
what color, and the Compositing step resolves layering questions requires position information that typically lives on the rendering
and requests output. These modular steps happen one after another, thread. Further, if a lot of data must be updated, such as in a large
each taking the output of the previous step as input. node-link visualization, communicating the new node positions
While this ordering always ensures correct rendering, it also loses is costly, and the overhead needs to be managed. To our knowl-
context which could make the rendering faster. For example, when edge, OffscreenCanvas has never been used by the information
only the position of one circle element is changed by JavaScript, visualization research community to improve visualization render
the style rules are still re-parsed and re-applied to every SVG node performance. We find a way for visualization creators to easily take
in the DOM because the Style step requires the complete DOM advantage of the new OffscreenCanvas element by streamlining
as input. In fact, at the browser’s tick rate, the whole pipeline is communication between threads and by minimizing changes to
triggered any time anything on the DOM is accessed or edited. visualization development for increased adoption.
While browsers try to keep track of “dirty” elements and regions
to avoid unnecessary work, their to-spec implementation has to be
conservative and is more optimized for HTML than for SVG. Fur-
3.5 Related Work
ther, while in HTML, developers can specify nodes that should be
assigned individual compositing layers for joint transformations of 3.5.1 Canvas and WebGL Libraries
nested elements, such optimizations are not enabled for SVG. With
a sufficient number of DOM nodes, the time spent in unnecessarily Significant progress has been made in simplifying the use of Canvas
performed work in the render process pipeline is often greater than and WebGL for information visualization. Vega [34], shown in
the time spent in the visualization’s JavaScript code. Figure 4, uses a custom declaration to specify the visualization and
Challenge 2: The expensive render pipeline is triggered for create a scene graph, which can be rendered as SVG or WebGL.
any SVG DOM updates, which can slow down rendering with Three.js [9] is a general-purpose WebGL library which abstracts
re-applying previously completed work on unchanged nodes. We some low-level implementation details of WebGL programming.
use the knowledge of what DOM changes have occurred to avoid PixiJS [14] is a 2D WebGL rendering library which simplifies the
unnecessary work and explore additional strategies that minimize complexities of WebGL scenes, cameras, and GPU sprite loading.
work by communicating information across rendering steps. Proton [21] is a WebGL library which comes with many predefined
behaviors and physics simulations for particle rendering. For net-
work visualizations, vis.js [1] and Cytoscape [12], [36] provide fast-
3.4 The OffscreenCanvas HTML Element
rendering and configurable visualizations. These libraries signifi-
Newly added to the document of Web standards—the HTML Living cantly simplify parts of the challenges of developing visualizations
Specification—in Section 4.12.5.3 [40] is the OffscreenCanvas with WebGL. However, they have a higher barrier of entry than
element: “an HTMLCanvasElement but with no connection to the SVG for designing custom visualization since they require either
DOM. This makes it possible to use Canvas rendering contexts in Canvas/WebGL knowledge or knowledge of these less familiar
[web] workers.” To date, Chromium-based browsers support Off- libraries, and there is little compatibility with existing visualizations
screenCanvas, such as Google Chrome and Microsoft’s new Edge and workflows compared to the open standard of SVGs.
browser, as well as Opera [30]. Mozilla Firefox allows enabling Other libraries propose paradigms closer to the DOM. Stardust
OffscreenCanvas in the settings, with official support coming soon. [31] is a library which provides a data-binding abstraction for
OffscreenCanvas implies that rendering can happen on a separate WebGL visualizations and reduces the required effort to create 2D
thread without blocking the main thread and without triggering the data visualization in WebGL. Two.js [8] has a similar objective,
render process pipeline for DOM updates. The OffscreenCanvas and replicates some DOM advantages such as CSS-like styling.
is linked to a Canvas DOM element, and changes on the Offscreen- Paper.js [24] defines a programming interface to more easily define
Canvas appear instantly in the browser window – no manual transfer Canvas visualizations that are also statically exportable as SVG.
of the OffscreenCanvas image is needed. This is an opportunity for While promising, these tools are not yet widely used in the
the data visualization community with many potential applications. information visualization community. Two possible reasons are
Simulation-intensive visualizations would not slow down a separate that Canvas and WebGL are less flexible to style (no CSS) and
rendering thread, e.g., with expensive node position calculations. are harder to debug in the browser. Another reason is that each
Likewise, drawing-intensive visualizations can render in a separate framework proposes its own application programming interface
thread to free up the main thread for faster interaction performance (API), and a consensus on which to standardize has yet to form
and simulation. Finally, removing rendering from the main thread within the community. We believe that switching to one of these
could improve the overall interaction performance of the browser, APIs with their own language is counterproductive to the sharing
which currently must wait for a response from the render process and extending tools necessary for a vital visualization ecosystem.
before responding to general UI requests which relate to the page. In contrast, SVG is already an open standard with widespread
Challenge 3: To achieve parallelization through rendering support and widely-used infrastructure such as D3.js. None of
on an OffscreenCanvas, the main thread needs to efficiently these tools aim to improve existing visualizations and support
communicate to the render thread what to render—effectively the established and preferred infrastructure. While changes in
replacing the DOM analysis functions provided by the render visualization creators’ workflows are sometimes desirable, e.g., for
process pipeline. Conventionally, visualization creators wishing more expressivity, we see a switch from the open standard of SVGs
to a custom API due to performance reasons as detrimental to the
1. Mozilla is currently developing and rolling out GPU-based threaded paint-
ing and compositing for Firefox, called WebRender [2]. For simplicity of expo- ecosystem. We advocate for extending the rendering capabilities
sition and due to its popularity, we use Google Chrome as our example browser of SVGs to strengthen this open and expressive format.
5
SSVG
Translate into Batch VDOM Updates, Updated Worker
VDOM Updates Send to Worker VDOM
Canvas Canvas
Specification Renderer
JS
Fig. 4. A high level comparison of how visualization creators specify and define data visualizations in different languages and frameworks, and how these
specifications are then rendered by the browser. Green denotes specifications familiar to the data visualization community and fast renderers, red denotes
specifications less familiar to the community and slow renderers. Bridging the gap between the familiar SVG Specification and the fast Canvas and
WebGL Renderers is a crucial challenge for data visualization system research to allow the community to use their preferred language even on large data
sets. Translating the SVG Specification for automatic application to a Canvas or WebGL Renderer is a difficult process that SSVG tackles with a VDOM.
3.5.2 Canvas and WebGL with D3.js or not. Likewise, existing solutions do not maintain the valuable
D3.js [7] can render to Canvas by specifying a custom namespace, properties of SVG like CSS styling, and do not provide consistency
appending so-called custom elements, and then defining a custom with the SVG API. Existing VDOM implementations require
Canvas draw function for each element type such as circles and custom implementations and are not useful for multi-threaded
rectangles. This provides visualization creators some familiarity visualization, and no current visualization systems support
within the Canvas environment and helps manage data binding rendering on a web worker. This is a large set of challenges
to virtual elements. However, implementing the draw functions and opportunities for data visualization system research, as data
requires time and familiarity with Canvas, and the use of D3.js visualization can benefit from progress in all these areas.
in this way does not provide the advantages of styling via CSS. We build upon existing technology and infrastructure which is
Some projects convert SVG visualizations into Canvas already in use by the information visualization community, and
renderings, e.g., by extracting the rendered SVG as pixels and avoid custom APIs while still increasing SVG performance. To take
pasting the bitmap or rendering a textured quad into a Canvas. advantage of multi-threading, we create a VDOM implementation
This does not increase performance as more work must be optimized for communication of SVG properties across threads
completed. Other projects, such as canvg [25], render SVG simply based on JavaScript function calls to the DOM.
elements individually in a Canvas. Canvg supports many SVG In Figure 4, we display a high-level overview comparison of dif-
features, including definition-based complex gradients. However, ferent visualization creator inputs and the corresponding rendering
canvg is optimized for static SVGs and one-time rendering. outputs across different visualization systems. The SVG specifica-
tion as input allows visualization creators to design with HTML,
3.5.3 Virtual DOM CSS, and JavaScript, such as D3.js, but typically requires going
The concept of VDOMs is widely known and well adopted through the browsers’ slow DOM pipeline and SVG renderer. Other
to improve DOM update performance, particularly in frontend systems, such as Vega, Canvas and WebGL require less familiar and
JavaScript frameworks such as React [13], Vue.js [41], Angular less open languages to specify the visualization, but allow usage
[15], and many others. These frameworks use optimized VDOM of the faster rendering performance. We propose for visualization
implementations to efficiently update the DOM but, to our systems to bridge this gap between desired visualization creator
knowledge, no frameworks exist to intercept DOM changes to input and desired rendering engine. SSVG achieves this by parsing
populate a VDOM. Furthermore, efficiently maintaining a VDOM SVGs and JavaScript DOM calls, translating them into well-defined
on a worker thread requires effective communication that is hard VDOM updates, sending batched VDOM updates to a worker, and
to achieve because the worker thread has no access to the DOM. rendering the VDOM as Canvas or WebGL on the worker.
One work-in-progress project, WorkerDOM [5], implements
synchronization of the DOM across web workers to support a
small number of compute-heavy operations; however, it does not 4 G OALS
consider rendering nor our scenario of coping with updates on Drawing from our insights on the browser’s rendering pipeline and
many thousands of visualization elements per frame. lessons learned from related work, we arrive at the following goals
for Scalable Scalable Vector Graphics (SSVG):
3.5.4 Summary G1: SVG Format: As shown in Sec. 3.1, the information
To our knowledge, prior work has yet to enable rendering of visualization community relies on SVGs and is familiar with D3.js.
interactive or animated SVG visualizations as Canvas, smooth We believe that SVG is a natural fit for data binding because of the
6
JavaScript Offscreen
Canvas
node =
node
Find VDOM
Interaction Capture Node from Event
Canvas Event Position
Fig. 5. Overview of SSVG’s architecture and how it enables a conventional nodelink diagram written with D3.js to be rendered smoothly. From left
to right, the diagram shows the user’s visualization code, SSVG’s main thread tasks, it’s internal representation of the DOM, and the Canvas rendering
in a web worker. Methods that read and write on the DOM are overridden to instead operate on the VDOM, which is used to render the Canvas. The
browser rendering pipeline is largely skipped because DOM updates are avoided.
availability of elements (to which data can be mapped). We also the reader understand the system’s inner workings, but this is not
believe that since SVG allows inspection and is customized more required for understanding later sections of the paper.
easily in browsers’ developer tools as well as with CSS, reviewing
existing SVG code is more conducive to learning than Canvas
5.1 Overview and Alternative Strategies
implementations. We want SSVG to be SVG-based.
G2: Interactivity: Interactivity plays a big role in data At a high level, SSVG circumvents browsers’ render process, as
visualizations. Enabling listeners on elements rather than absolute we have identified this pipeline to be too slow for high interactivity
positions eases interactivity implementation, as Canvas-based and rendering performance (G2 & G3). Any system designed to
visualizations have to manually infer which data point was hovered circumvent the DOM for custom rendering needs a VDOM as
or clicked. In SSVG, we wish to enable element-based listeners an internal representation of the visualization so that it can be
as they exist on SVG. rendered. Flexibility exists in the approach of obtaining a VDOM,
G3: Rendering Performance: To address SVG’s main in the format of the VDOM, and in the rendering technique.
shortcoming, we wish to make the technology scalable to more SSVG obtains a VDOM by intercepting JavaScript calls which
elements so that more data can be displayed. For a smooth user would normally affect the SVG DOM. SSVG’s approach causes
experience, the rendering performance should be at least 20–30 no interaction with the Webpage’s own DOM, and avoids the costs
FPS, see Sec. 3.2. associated with browsers’ render pipeline. SSVG uses the DOM
G4: Load on main thread: To aid scalability, slow rendering function calls to maintain a VDOM and records associated styles
should impact the user experience as little as possible. We wish to from relevant CSS. This approach has the benefit of not introducing
perform rendering on a separate thread such that the main thread a new API and not requiring workflow changes for visualization
can prepare the next frame concurrently. Little free time on the creators, but comes with some challenges to interpret the JavaScript
main thread can also lead to slow visualization layouts, such as calls correctly. The much more common approach of obtaining a
network visualizations. We aim to keep the load on the main thread VDOM is via custom APIs, or via templates such as in React [13]
low to maximize browser interaction performance, and for quick or Angular [15]. This approach is possible for visualization systems,
layout computations. but reduces compatibility with existing systems such as D3.js.
SSVG draws the VDOM on an OffscreenCanvas in its own
render thread, but also allows single-thread use. This requires us to
5 S YSTEM automatically communicate all required VDOM information across
In this section we describe Scalable Scalable Vector Graphic the separate main and rendering threads. We implement efficient
(SSVG)’s core concepts, its architecture, implementation, browser communication via SharedArrayBuffers: a low-level technology for
support, features, limitations, future work, and how these address sharing integers across JavaScript workers. Our implementation
our design goals. We also include technical information to help focuses on canvas rendering and optimizes the canvas drawing calls.
7
An alternative strategy is to use WebGL for rendering. WebGL events on the original SVG elements after they occur on the Canvas
rendering is fast when the information needed to render is largely element. To find the correct SVG element on which to trigger an
contained within the graphics card, and little communication is event, the matching VDOM element must be identified based on
needed to update the image. This is unfortunately not the case for the event position. SSVG achieves this with manual hitbox testing,
general-purpose rendering systems, as they have no information but for speed it performs this only on elements which received a
about what is causing the data updates. Therefore, for cases like listener function from the visualization. To allow event listeners to
this, the WebGL performance is expected to be similar to Canvas. receive events without delay, hitbox testing needs to occur on the
Our choice to use OffscreenCanvas is in line with our goal to main thread. To support hitbox testing on the main thread, the main
improve interactivity and to reduce the load on the main thread thread needs to have a partial copy of the VDOM that contains
(G2 & G4), but other systems could reduce our communication position information of elements. For a smooth user experience
overhead and complexity with single-thread rendering at the cost (G2), it is important to minimize discrepancies between the main
of some interactivity and rendering performance. thread VDOM, which users interact with, and the render VDOM,
Put together, SSVG is a system for turning main-thread-rendered which is used to display the visualization. SSVG minimizes the
SVG visualizations into multi-threaded visualizations. It achieves discrepancy by only applying changes to the main thread VDOM
higher rendering performance, low interaction delays, and low when the render thread is done rendering and ready to update its
computation times with minimal code changes — many existing VDOM for rendering a new frame. SSVG’s fast parallel rendering
visualizations are accelerated simply by importing ssvg.js with also contributes to an immediate response to user interaction.
one line of code. For other cases, we describe limitations and
workarounds in Sec. 5.5.
5.3 Cross-thread Communication
To allow the worker thread to render the visualization, the main
5.2 Description thread has to communicate all VDOM data and keep the worker
To support interactive visualizations built with SVG (see G1 and VDOM up to date by sending updates when they occur. To prevent
G2 in Sec. 4), we want to enable fast rendering on visualizations race conditions, the main thread saves the local VDOM updates
implemented with D3.js with as few changes as possible. To until the rendering thread informs the main thread that it is done
achieve fast rendering (G3), we address challenges 1 and 2 rendering the last frame and is ready to receive updates for a new
identified in Sec. 3.3 by taking the rendering work off the main frame. We identify three main requirements for the communication:
thread and using a tight connection between the rendering steps Lightweight Communication: Serializing large messages
in Figure 3 to avoid unnecessary work. for JavaScript’s postMessage is expensive. To minimize delay,
We address these issues with the design of SSVG by maintaining message sizes need to be small even when communicating updated
an up-to-date virtual DOM (VDOM), only re-applying CSS for data for thousands of node attributes.
new or changed elements, and using the VDOM to render the Reliable Identification: Because messages are serialized, no
visualization in a separate worker. In Figure 5, we explain these VDOM node references can be transferred, and changed nodes
concepts through an example of a node-link visualization: have to be identified based on a specified message protocol.
Init (top arrow, blue): To set up the VDOM and the Canvas However identifiers, such as element selectors, can be unreliable;
element, SSVG parses the SVG and extracts any potential the communication happens asynchronously and the changes may
contained elements and copies them to the VDOM. Stylesheet effect the DOM and VDOM structure. For example, the commands
rules are parsed. The original SVG element is hidden and replaced “move the fifth SVG element to the right, then delete the fourth
with a new Canvas element of the same size at the same position. SVG element, then move the fifth SVG element down“ need to be
Control over the Canvas contents is then passed to the Web Worker, executed in the correct order so that the element that is moved to the
which is responsible for rendering. right and the element that is moved down are not the same element.
Update (middle arrow, orange): When a visualization attempts Efficient Computation: It is important to consider the
to access the DOM, the operation is re-routed to the VDOM. computational cost of generating the update messages on the main
This is achieved by capturing JavaScript function calls such as thread as well as decoding and applying the update on the worker
appendChild(), setAttribute(), and getAttribute(). In thread. Importantly, the main thread has to generate a message that
this way, visualizations do not modify the DOM when calling uniquely assigns the new values to specific elements. If element
setAttribute(). Meanwhile, the visualization remains naive to selectors are used to identify nodes, efficient ways to generate
these processes and continues to operate as usual. This is possible these selectors and intelligent ways of caching and updating these
because getAttribute() also accesses the VDOM instead of the selectors are needed. On the worker, the updates have to be applied
DOM. As a performance improvement, we intercept D3.js’ attr quickly without the need to look up nodes on an individual basis,
function which operates on a selection of nodes instead of indi- and fast iterations over the elements are desired.
vidual nodes. This helps minimize the overhead of mapping DOM To address these three requirements, visualization systems
to VDOM. But because this is only a performance improvement, aiming to support multi-thread VDOM updates for many nodes
SSVG works with other frameworks such as Vega and React. Calls need to explore different batching strategies for update messages.
to appendChild() determine the position of an element in the Before switching to our latest strategy, SSVG used hierarchy-based
VDOM, but are also used to fake hierarchy in the original elements lists of updates similar to how D3.js applies attribute changes to
so that visualizations can continue to rely on the DOM structure, a selection of elements with a common parent. Within the parent,
such as with element.parentNode. When accessing the DOM elements can be identified simply by their child index, and the
outside the SVG, SSVG passes on the information to the native worker can iterate over all children instead of looking them up
functions so as to not disrupt any non-SVG JavaScript on a website. individually. We paired this strategy with a selector-based method
Interaction (bottom arrow, purple): In SVG visualizations, event of identifying the parent element. Positive aspects of this approach
listeners are attached to DOM elements. With SSVG, no elements are that it is similar to D3.js, lists are only as big as the number
are appended to the DOM so event handling must work differently. of elements within a parent, and the worker can iterate over the
To support element-based interactions, SSVG manually re-triggers nodes efficiently if they have the same parent. On the other hand,
8
5
Turns
18
Turns
Fig. 7. A sample visualization which counts the completed turns for particles moving in a circle, rendered with SVG (left) and SSVG (right) over one
minute each. While the particles have made 18 turns with SSVG, only 5 turns were completed with SVG. The number of particles is gradually increased.
SSVG’s rendering contains more particles for a given framerate, demonstrating its higher performance. Live on ssvg.io/examples/donut.
Rendering Performance Comparison Between Techniques Performance Comparison with Shapes between SVG and SSVG
Very Smooth 60 60
Very Smooth
SSVG with Stardust
SSVG with Canvas
50 Native 50
Average Frames Per Second
Smooth
rewrite Line
needed A Text
30 30
Motion
20 20
Single thread
SVG
SVG Circle
10 10 Rectangle
Line
Images
Images
A Text
1,000 5,000 10,000 15,000 20,000 25,000 30,000 1,000 5,000 10,000 15,000 20,000 25,000 30,000
Number of Rectangles Number of Nodes
Fig. 9. Rendering performance comparison between SVG (blue), SSVG Fig. 10. Rendering performance comparison between SVG and SSVG for
(yellow), SSVG with Stardust using WebGL (orange), custom native text, circle, rectangle, and line primitives. SSVG outperforms SVG across
implementations of the same visualization for Canvas (green) and Stardust all tested shapes. Around 17,000 lines, SSVG’s performance is lower than
(cyan), and a single-threaded version of SSVG and SSVG with Stardust with more and fewer nodes. This anomaly requires further investigation.
(yellow and orange, dash-dotted) that shows how much multi-threading
contributes to SSVG’s performance. At 20,000 nodes, the SVG only ren- Results: The performance results for rectangles are shown in
ders at about 6 FPS, leading to jank and a bad user experience. Meanwhile,
both SSVG implementations render at about 55 FPS, on par with and even Figure 9. At 15,000 nodes, SSVG renders about 9× faster than
outperforming custom native implementations of the same visualization SVG, and overall about on par with a custom native implementation
in Canvas and WebGL. Data and implementations at osf.io/ge8wp. of the visualization for Canvas. To stay above a rendering
performance of 30 FPS, SVGs limit data visualization creators to
frame. Because updates occur much more frequently in data visual- about 2,500 data points, whereas SSVG supports about 35,000 data
izations than node creations, SSVG is more optimized for updating points at the same frame rate without any code changes; a 14-fold
attributes, and creating an element involves the additional cost increase. Even for browsers that do not yet support the multi-thread
of transferring the information across threads. A two-line change setup, SSVG still allows up to 14,000 data points. This shows
in the visualization code prevented the unnecessary deletion and that the bigger contributor to SSVG’s performance improvement
re-creation of elements, and cause SSVG’s rendering to be smooth. over SVG is the ability to render dynamic SVGs as Canvas, side-
With this change, all 25 interactive visualizations work with SSVG. stepping the browser’s rendering pipeline by intercepting JavaScript
While we are working on continuously growing our support function calls without any changes to the SVG visualization code.
for SVG features, we demonstrated here that SSVG works a CPU Scaling: To compare performance across different CPU
large subset of D3.js visualizations to be of immediate use to the powers, we measure SVG and SSVG performance on a computer us-
visualization community. At ssvg.io/examples, we present a list of ing full CPU clock speed, as well as using only half the CPU’s clock
SSVG-rendered visualizations. At osf.io/ge8wp, we document the speed. Given twice the CPU performance, SVG’s performance
evaluation of the 25 example visualizations with testable demos. increased by 50%. However, SSVG increased its performance by
100%. As there is less overhead, SSVG can better take advantage
7.2 Benchmark of the faster CPU. On a fast computer, SSVG performs even faster
than the native Canvas implementation because multi-threading is
To measure our success in achieving goal G3: high performance more advantageous there. This data is included at osf.io/ge8wp.
rendering, we take a D3.js SVG data visualization and compare Smart Phones: Initial benchmarks on smart phones show
its performance against SSVG rendering. We create a simple average of a 55–60% rendering performance increase for 1,000–
visualization with many marks but little computationally-heavy 10,000 rectangles on an iPhone SE iOS 11 for Chrome 73 and
work (Figure 7). Data points move in a circle at varying radii and Safari 11, and an average of 180% speedup for a Pixel 3 device.
speeds (also visible on ssvg.io). WebGL: When evaluating our basic Stardust WebGL renderer
Visualization: For the benchmark, we use a simplified version of (see Sec. 5.4), we found similar performance compared to the
the circular visualization: All elements are gray and begin moving Canvas-based worker. Based on these results, our impression is
immediately. We gradually increase the number of data points with that the Canvas renderer is already quite optimized for this use
a step size of 100 nodes and average the rendering performance over case and little improvement can be made by switching to WebGL.
a time period of 6 seconds at each step. We create a native Canvas Conclusion: These benchmarks show how that a speedup of
implementation for the same visualization to compare performance. up to 9× is possible, and our results in Figure 10 show that this
Setup: For software, we use Google Chrome version 78. For speedup is consistent across different shapes. In the next sections,
hardware, we use a Apple MacBook Pro (16-inch, 2019) with we demonstrate real-world applicability: We analyze the utility of
32 GB memory, an 2.4 GHz 8-Core Intel Core i9 processor and SSVG for a previously-published VIS paper technique, describe
AMD Radeon Pro 5500M 8 GB graphics card, capped at a 60 FPS how SSVG was used in a research project published at CHI by re-
tick rate by the OS and hardware display. Performance will vary searchers unaffiliated with the authors, and discuss more examples.
across devices due to varying hardware and software. Additional
results for other hardware, including smart phones, is provided at
osf.io/ge8wp and briefly described below. Also note that the frame 7.3 Probabilistic Graph
rate results also imply corresponding interaction delay: for single- Faster Web rendering with SSVG would allow our community to
thread systems, such as SVG and Canvas, the interaction delay is share more complex designs or data with online demos. We could
equivalent to the FPS because interactions can only be picked up then collectively learn from these online demos because they are
when the rendering process is done. For SSVG’s multi-threading, created and shared in a familiar format. To demonstrate this aspect
interaction performance is at least as high as rendering performance. of SSVG’s utility to the data visualization research community,
11
SVG
Circle Marks Setup
Rendering
1,000
16 FPS SC Line Marks Implementation
Interaction Delay
CP TM 2,500 SVG & D3
61 ms JH NE
JF
PD
JD JW
DW
Layout HP AB
MS AS OD
16 seconds JH BL AL
HS
PI
MS
WC
MM NR
KM
SSVG JS
HQ
Rendering
44 FPS
Interaction Delay
23 ms
TD
Layout
5 seconds KM
Authorship Map
Fig. 11. IEEE VIS Information Visualization paper authors of the last 10 years, visualized by a combination of geolocation and co-authorship of
papers [33]. Author nodes are sized by number of papers and colored by affiliation. Authors with at least 8 papers are shown with initials, such as
Hanspeter Pfister (HP) or Sheelagh Carpendale (SC). Visualization researchers on the US East coast often collaborate with Europe, and researchers
from Australia tend to collaborate with the US and Europe. Several authors are placed far from their institution. For example, Tim Dwyer (TD) and Huamin
Qu (HQ) are placed far from Australia and Hong Kong, respectively, due to co-authorships with collaborators in the US and Europe. Without SSVG,
this visualization’s layout takes 16 seconds to compute, whereas with SSVG, the layout only takes 5 seconds and the visualization renders smoothly.
SSVG
SVG
Rendering
Setup
Rendering
et al. [20], we explore the co-authorships of researchers depending
Implementation
9 FPS SVG & D3 23 FPS on location. We use multiple forces to determine authors’ positions
Interaction Delay Rectangle & Line Marks Interaction Delay on the visualization, for which D3.js provides excellent support:
117 ms 6,000 44 ms
Layout
A collision force prevents node overlaps and a geoposition
Layout
79 seconds 27 seconds force determines an author’s position on the map. Co-authors
are linked and pulled toward each other, whereas researchers
without collaboration are repelled. A combination of these forces
moves authors close to their affiliations, but allows collaborations
to have a significant impact on their position (Figure 11). The
visualization is available online at ssvg.io/examples/infovis and
has been presented as a IEEE VIS 2019 poster [33].
We created this visualization by starting with an example
Fig. 12. A graph layout with 6,000 elements rendered with SSVG. This network graph on bl.ocks.org [6], added a map background, and
could be used as a starting point to make Schulz’ work [35] open and
accessible on the Web. SVG renders at 9 FPS, and layout takes 79
defined custom forces to move nodes to the desired locations. We
seconds to stabilize. SSVG renders at 23 FPS and arrives at a stable did not have to learn the API of a network visualization library
layout in 27 seconds. Available at ssvg.io/examples/probabilistic. nor implement custom drawing functions. Instead, we were able
to benefit from forces and colors provided by D3.js, and SSVG
we present an example case where SSVG could be used to make is able to render the visualization smoothly (44 FPS instead of 15
available online recent research which was completed offline. FPS) and quickly produces a stable layout (5 seconds instead of
In 2017, Schulz et al. [35] developed probabilistic graph 16 seconds). In this familiar workflow, we can add other forces
layouts including uncertainty, drawing thousands of nodes and provided by D3.js to experiment with different layouts, or style
marking clusters. Unfortunately, the work was completed offline, nodes differently with CSS. We believe maintaining the D3.js
making the results difficult to share. Here, we create a SVG-based design process is helpful to data visualization research.
visualization with similar visual encoding to demonstrate feasibility
of rendering similarly structured networks with many nodes. Our 7.5 Windmap
implementation is a two-layer force layout where the node groups
We developed a remake of Fernanda Viegas and Martin Watten-
repel each other, and individual nodes are pulled toward the node
berg’s popular wind map [39], as illustrated in Sec. 2 and Figure 1,
group centers. Our recreated visualization contains 6,000 elements
to demonstrate that particle visualizations are feasible with SVG
(Figure 12). SSVG increases rendering performance from 9 FPS to
when SSVG is used for rendering. Our new implementation and
23 FPS and decreases the time to stabilize the network layout from
performance results are shown in Figure 1. Wind is visualized as
79 to 27 seconds. Our demonstration shows that rendering this
3,000 traces at a given time using four line segments with decreas-
probabilistic graph using a simple D3.js and SSVG implementation
ing opacity, or 12,000 individual SVG elements total. Opacities and
is feasible even with large datasets. While other factors, such as
colors are simply set with CSS, and the lines are drawn with D3.js.
availability of clustering algorithms, may have played a role in their
The SVG visualization renders too slowly and causes low browser
decision to implement their research offline, we want rendering
interactivity with this much data (≈ 7 FPS). Including the SSVG
performance to not dictate whether work can be shared online.
library immediately results in an improved performance of 36 FPS.
This new windmap visualization can now be customized easily,
7.4 Network Visualization such as styling path colors with CSS, and data binding makes
In this example, we demonstrate SSVG’s utility with the ability to the code’s structure clear. In Figure 13 we compare the SVG and
focus on design even in complex network visualizations. This is a SSVG rendering pipeline, demonstrating that SSVG performs faster
domain which typically requires heavy attention on implementation both by executing the rendering pipeline more quickly, as well as
due to the many visualized data points. Using data from Isenberg preparing the next frame while rendering via the multi-thread setup.
12
visualization community to take advantages of new developments changes in their way to create visualizations, and hope that this
such as these while also benefiting from the open format of SVGs. approach will inspire more work that adds to existing infrastructure.
Overall, SSVG combines several existing and new ideas to Ultimately, we hope to contribute to the success of the visualization
achieve Canvas- and WebGL-based rendering on a worker thread ecosystem by making Scalable Vector Graphics more scalable.
of traditional SVG and D3.js visualizations. Each step — DOM,
CSS and JS → VDOM → worker VDOM → Canvas/WebGL ACKNOWLEDGMENTS
drawing — comes with opportunities and trade-offs. SSVG focuses We thank Alex Ahmed, Sara Di Bartolomeo, Aditeya Pandey, Lulu
on replicating SVG and DOM capabilities most efficiently with Liu, and Laura South for experimenting with SSVG and providing
optimized communication and rendering, and other systems may useful feedback and advice. This work was supported by the
focus on other aspects, such as added expressivity and accessibility. Khoury College of Computer Sciences, Northeastern University.
Custom APIs: The benefits of by-passing the browser’s
rendering pipeline can also be achieved by using Canvas directly, R EFERENCES
or by using one of the available frameworks that provide a custom
[1] Almende B.V. vis.js: A dynamic, browser based visualization library.
API to design visualizations. While this solution makes sense in http://visjs.org. Accessed: 2019-03-29.
special cases, we believe it is important for the data visualization [2] D. Anderson. Mozilla GFX Team Blog: Off-Main-Thread Painting.
ecosystem to continue to invest in the open, inspectable, and https://mozillagfx.wordpress.com/2017/12/05/off-main-thread-painting/.
flexible format of SVG, and build on established works like D3.js. Accessed: 2019-03-31.
[3] P. Bakaus. The Illusion of Motion. https://paulbakaus.com/tutorials/
Advantages over Browser-Based Rendering: The perfor- performance/the-illusion-of-motion/. Accessed: 2019-03-29.
mance gains of SSVG are achieved by replacing the normal browser [4] D. H. Ballard, M. M. Hayhoe, P. K. Pook, and R. P. N. Rao. Deictic
rendering process, by batching attribute changes, by avoiding work codes for the embodiment of cognition. Behavioral and Brain Sciences,
20:723–767, 1995. doi: 10.1017/s0140525x97001611
on unchanged nodes, and by taking advantage of new multi-thread [5] K. Baxter. WorkerDOM: JavaScript Concurrency and the DOM.
technology. In each step, we take advantage of how data visual- https://github.com/ampproject/worker-dom. Accessed: 2019-12-04.
izations are typically created: CSS rules typically do not change [6] M. Bostock. Force-directed graph. https://observablehq.com/@d3/
over time, many SVG features are rarely needed, and many nodes’ force-directed-graph. Accessed: 2019-03-29.
[7] M. Bostock, V. Ogievetsky, and J. Heer. D3 data-driven documents. IEEE
attributes are often changed at once. This domain knowledge of how Transactions on Visualization and Computer Graphics, 17(12):2301–2309,
SVGs are typically used in the data visualization domain allows Dec. 2011. doi: 10.1109/TVCG.2011.185
us to make assumptions, simplifications, and performance improve- [8] J. Brandel. Two.js: A renderer agnostic two-dimensional drawing api
for the web. https://two.js.org. Accessed: 2019-03-29.
ments that are not possible for browser vendors without breaking [9] R. Cabello. Three.js: 3D Javascript Library. https://threejs.org. Accessed:
backward compatibility. Through public discussions and personal 2019-03-29.
communication with the Google Chrome SVG team, we have [10] S. K. Card, A. Newell, and T. P. Moran. The Psychology of Human-
advocated for systematic improvements to SVG rendering. In some Computer Interaction. L. Erlbaum Associates Inc., Hillsdale, NJ, USA,
1983.
cases, we were successful: as part of the discussion surrounding [11] M. Claypool, K. Claypool, and F. Damaa. The effects of frame rate and
our suggestion to add a “bulk setAttribute” function on many nodes resolution on users playing first person shooter games. Proceedings of
at crbug.com/978513, improvements in the existing setAttribute SPIE - The International Society for Optical Engineering, 6071, 01 2006.
doi: 10.1117/12.648609
function were identified, implemented and deployed in Chrome that [12] Cytoscape Consortium. Cytoscape: Network data integration, analysis,
speed up its execution by about 20%. We continue to work with the and visualization in a box. https://cytoscape.org. Accessed: 2019-03-29.
Chrome team to share our lessons learned. However, from our dis- [13] Facebook. React. https://reactjs.org/. Accessed: 2019-12-04.
cussions, it is clear that substantial improvements, such as the 3–9× [14] Goodboy Digital Ltd. Pixijs: The HTML5 creation engine.
http://www.pixijs.com. Accessed: 2019-03-29.
speedup provided by SSVG, are not feasible for browser vendors [15] Google. Angular. https://angular.io/. Accessed: 2019-12-04.
because they can not make the assumptions and simplifications that [16] Google. Web fundamentals: Measure performance with the RAIL model.
we can make within the data visualization community. Therefore, https://web.dev/rail/. Accessed: 2019-03-29.
we argue that community-driven visualization systems are a useful [17] Google. Web fundamentals: Rendering performance. https:
//developers.google.com/web/fundamentals/performance/rendering/.
path toward greater SVG performance in data visualization. Accessed: 2019-03-29.
[18] W. D. Gray and D. A. Boehm-Davis. Milliseconds matter: an introduction
9 C ONCLUSION to microstrategies and to their use in describing and predicting interactive
behavior. Journal of experimental psychology. Applied, 6 4:322–35, 2000.
We contribute Scalable Scalable Vector Graphics (SSVG): a doi: 10.1037/1076-898X.6.4.322
JavaScript library for faster rendering and interaction of Scalable [19] H. Gueziri, M. J. McGuffin, and C. Laporte. Latency management
in scribble-based interactive segmentation of medical images. IEEE
Vector Graphics (SVG). As this is a foundational technology Transactions on Biomedical Engineering, 65(5):1140–1150, May 2018.
for the visualization community, we hope SSVG will enable the doi: 10.1109/TBME.2017.2777742
development of new and complex data visualizations on the Web. [20] P. Isenberg, F. Heimerl, S. Koch, T. Isenberg, P. Xu, C. Stolper,
We show that SSVG automatically enables a 3–9× performance M. Sedlmair, J. Chen, T. Möller, and J. Stasko. vispubdata.org: A
metadata collection about IEEE visualization (VIS) publications. IEEE
boost on four rendering-intensive visualizations. We use an online Transactions on Visualization and Computer Graphics, 23(9):2199–2206,
collection of data visualizations to demonstrate compatibility. Sept. 2017. doi: 10.1109/TVCG.2016.2615308
We believe that enabling visualization creators to use their [21] A. Jie. Proton: JavaScript particle engine. https://a-jie.github.io/Proton/.
generally-preferred technology—SVG—allows them to increase Accessed: 2019-03-29.
[22] J. Jo, F. Vernier, P. Dragicevic, and J. Fekete. A declarative rendering
the number of iterations within the design process because it is a model for multiclass density maps. IEEE Transactions on Visualization
high-level specification with CSS customizability. This may aid and Computer Graphics, 25(1):470–480, Jan 2019. doi: 10.1109/TVCG
researchers to focus on the visual design and interpretation, rather .2018.2865141
[23] K. Klamka, T. Horak, and R. Dachselt. Watch+strap: Extending
than on Canvas and WebGL implementation details. With SSVG, smartwatches with interactive strapdisplays. In Proceedings of the ACM
we encourage continued SVG-based visualization research because CHI Conference on Human Factors in Computing Systems, CHI’20.
the result is open, meaning it can be easily customized, analyzed ACM, 2020. doi: 10.1145/3313831.3376199
and learned from—crucial elements for research. To visualization [24] J. Lehni and J. Puckey. Paper.js — The Swiss Army Knife of Vector
Graphics Scripting. http://paperjs.org. Accessed: 2019-12-04.
system designers, we show how Canvas rendering and multi- [25] G. Lerner. canvg: JavaScript SVG parser and renderer on Canvas.
threading can be integrated into users’ visualization without many https://github.com/canvg/canvg. Accessed: 2019-03-29.
14
[26] Z. Liu and J. Heer. The effects of interactive latency on exploratory visual Nicholas Bond Nicholas Bond is a software
analysis. IEEE Transactions on Visualization and Computer Graphics, engineer at Voltus where he creates tools for
20(12):2122–2131, Dec 2014. doi: 10.1109/TVCG.2014.2346452 visualizing data related to power grids and energy
[27] R. B. Miller. Response time in man-computer conversational transactions. markets. Nicholas has a Bachelor of Science from
In Proceedings of the December 9-11, 1968, Fall Joint Computer Northeastern University in Computer Science
Conference, Part I, AFIPS ’68 (Fall, part I), pp. 267–277. ACM, New and Interaction Design.
York, NY, USA, 1968. doi: 10.1145/1476589.1476628
[28] Mozilla. MDN Web Docs: Blob. https://developer.mozilla.org/en-US/
docs/Web/API/Blob. Accessed: 2019-03-29.
[29] Mozilla. MDN Web Docs: SharedArrayBuffer. https:
//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global
Objects/SharedArrayBuffer. Accessed: 2019-03-29.
[30] Mozilla Developer Network. The OffscreenCanvas Element.
https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas/ Shash Sinha Shash Sinha received the
OffscreenCanvas#Browser compatibility. Accessed: 2020-09-24. BE (Hons) Degree in software engineering
[31] D. Ren, B. Lee, and T. Höllerer. Stardust: Accessible and transparent from the University of Waikato, New Zealand,
gpu support for information visualization rendering. Computer Graphics in 2017, and the Sc.M. degree in Computer
Forum, 36(3):179–188, June 2017. doi: 10.1111/cgf.13178 Science from Brown University, USA, in 2020.
[32] W. Ritter, G. Kempter, and T. Werner. User-acceptance of latency in touch Currently employed at Amazon in Seattle, WA, he
interactions. In M. Antona and C. Stephanidis, eds., Universal Access incorporates modern visualization techniques in
in Human-Computer Interaction. Access to Interaction, pp. 139–147. his work regularly.
Springer International Publishing, Cham, 2015.
[33] D. Saffo, M. Schwab, M. A. Borkin, and C. Dunne. GeoSocialVis:
Visualizing Geosocial Academic Co-Authorship Networks by Balancing
Topology- and Geography- Based Layouts. IEEE VIS Poster, 2019. doi:
10.31219/osf.io/ykwah Cody Dunne is an Assistant Professor at
[34] A. Satyanarayan, K. Wongsuphasawat, and J. Heer. Declarative interaction Northeastern University. His research focuses on
design for data visualization. In Proceedings of the 27th Annual ACM applying data visualization and human-computer-
Symposium on User Interface Software and Technology, UIST ’14, pp. 669– interaction principles to real-world problems and
678. ACM, New York, NY, USA, 2014. doi: 10.1145/2642918.2647360 generalizing the results — often via design studies.
[35] C. Schulz, A. Nocaj, J. Goertler, O. Deussen, U. Brandes, and D. Weiskopf. He generally works with problems that combine
Probabilistic graph layout for uncertain network visualization. IEEE showing network topology, position in space,
Transactions on Visualization and Computer Graphics, 23(1), 2017. doi: values of attributes, changes to these over time,
10.1109/TVCG.2016.2598919 and how changes or events happen in sequence.
[36] P. Shannon, A. Markiel, O. Ozier, N. S. Baliga, J. T. Wang, D. Ramage, He received his Computer Science Ph.D. in 2013
N. Amin, B. Schwikowski, and T. Ideker. Cytoscape: a software and M.S. in 2009 from the University of Maryland.
environment for integrated models of biomolecular interaction networks.
Genome research, 13(11):2498–2504, 2003. doi: 10.1101/gr.1239303
[37] B. Smus. Performance of canvas versus SVG. https:
//smus.com/canvas-vs-svg-performance/. Accessed: 2019-03-29. Jeff Huang Jeff Huang is an Associate Professor
[38] Y. Wang, D. Archambault, C. E. Scheidegger, and H. Qu. A vector in Computer Science at Brown University. His
field design approach to animated transitions. IEEE Transactions on research in human-computer interaction focuses
Visualization and Computer Graphics, 24(9):2487–2500, Sep. 2018. doi: on behavior-powered systems, spanning the
10.1109/TVCG.2017.2750689 domains of mobile devices, personal informatics,
[39] M. Wattenberg and F. Viégas. Wind map. http://hint.fm/wind/, 2012. and web search. Jeff’s Ph.D. is in Information
Accessed: 2019-03-29. Science from the University of Washington in
[40] World Wide Web Consortium. HTML living standard: The Seattle, and his masters and undergraduate
OffscreenCanvas interface. https://html.spec.whatwg.org/multipage/ degrees are in Computer Science from the
canvas.html#the-offscreencanvas-interface. Accessed: 2019-03-29. University of Illinois at Urbana-Champaign.
[41] E. You. Vue.js. https://vuejs.org. Accessed: 2019-12-04.