figma

Speeding Up File Load Times, One Page At A Time | Figma Blog (opens in new tab)

Figma improved file-loading performance by dynamically loading only the page a user opens instead of the entire file. This approach reflects user-perceived complexity, reduces memory usage, and avoids making small pages wait for unrelated content. For the slowest 5% of loads, the change reduced load times by 33%.

Loading Content According to User Needs

  • Figma files can contain dozens of pages, hundreds of frames, components, styles, variables, and prototype screens.
  • Usage data showed that users often treat a file as an entire project but typically visit only a subset of its pages in one session.
  • Loading everything up front made a small page unnecessarily depend on the size of the whole file.
  • Dynamic loading lets Figma display the selected page first and fetch additional content only when needed.

Cross-Page Read Dependencies

  • A Figma file is modeled as a tree of nodes, with nodes representing interactable layers and their properties.
  • Nodes can reference content located on other pages, creating cross-page dependencies.
  • An instance points to its backing component, which may be on another page; the component must be loaded before the instance can render correctly.
  • Styles and variables also create dependencies:
    • A fill style requires loading its corresponding style node.
    • A variable-based font size requires the variable node so the client can resolve the raw value.

QueryGraph and Earlier Dynamic Loading

  • Figma had already developed dynamic loading for view-only files and prototypes.
  • Its QueryGraph framework stores dependency relationships as an in-memory graph.
  • The multiplayer system uses this graph to determine which parts of a file should be sent to connected clients.
  • Previous loading strategies included:
    • Page-based canvas loading: Load the selected page and its required dependencies, then fetch other pages on demand.
    • Frame-based prototype loading: Load the current prototype screen and preload reachable frames within a limited number of transitions.

Performance Impact

  • The goal is for load times to trend downward even as files become larger and more feature-rich.
  • Dynamic loading improves both initial responsiveness and memory consumption.
  • The largest benefits appear in worst-case loads, with a reported 33% reduction for the slowest 5% of page loads.

Figma’s approach demonstrates that large collaborative documents should be loaded according to the user’s immediate context, while dependency tracking ensures referenced content remains available when required.