Performance

Drawing setsare notdocuments.

A 500-page issue at A1 is routinely hundreds of megabytes of dense vector content. Most viewers load it all or die trying. ScaleSet PDF reads only what you look at.

G-200
Only the sheets near you exist; only what you can see is drawn
SHEET G-200.1
Measured

The numbers.

Measured on the generated 800-page, 49.1 MB sample set with npm run perf.

1.1MB

read to open a 49 MB, 800-sheet set and paint the first sheet

480ms

until the first sheet is on screen

129ms

to jump from sheet 1 to sheet 601

5ms

for 500 hit tests across 4,000 markups on one sheet

npm run perf · 800 pages · 49.1 MB

      
SHEET G-200.2
How

Four things keep
it responsive.

01 · Range reading

Read only what you look at

Opening reads the cross-reference tables and the pages you look at, through pdf.js range requests over the app's own file access. The rest of the file is never touched until you go there.

  • Open1.1 MB of 49.1 MB, 19 range requests
  • First paint480 ms
G-200.2
OPEN · 800 PAGES
  1. 01Cross-reference tables read
  2. 02Page 1 requested, nothing else
  3. 03First sheet painted at 480 ms
  4. 04Total read: 1.1 MB of 49.1 MB
02 · Virtualisation

Three pages exist, wherever you are

Only the pages near the viewport exist at all. On page 1 or page 601, three pages are mounted. Rendering work is cancelled the moment you scroll past it, and page objects are leased so a background thumbnail cannot be torn down mid-draw.

G-200.3
ON PAGE 601
  1. 01Pages 600, 601 and 602 exist
  2. 02Every other page is a placeholder
  3. 03Rendering cancelled as you scroll past
  4. 04Thumbnails leased, never torn down mid-draw
  5. 05Jump from page 1: 129 ms
03 · Two-layer raster

Sharp at 1200%, without the memory

A pixel-capped whole-page canvas sits underneath, with a full-resolution canvas covering only the visible slice. Zooming to 1200% costs about 4 MP of raster instead of about 4,000 MP, and panning never shows blank paper.

  • Zoom to 1200%detail painted in 259 ms
  • Raster held3.8 MP
G-200.4
AT 1200%
  1. 01Base canvas: whole page, pixel-capped
  2. 02Detail canvas: the visible slice only
  3. 03Raster held: 3.8 MP
  4. 04Panning: never blank paper
04 · Spatial index

4,000 markups, no slowdown

Viewport queries, hit-testing and lasso selection use a uniform grid rather than scanning every markup. The flatten export runs in a worker, so a 400-page export never freezes the window.

  • 500 hit tests5 ms with 4,000 markups
  • Overlay rebuild54 ms with 4,000 markups
G-200.5
4,000 MARKUPS
  1. 01Uniform grid over the sheet
  2. 02Only cells under the cursor are asked
  3. 03500 hit tests in 5 ms
  4. 04Overlay rebuilt in 54 ms
SHEET G-200.6
The full log

npm run perf.

PERF800-page, 49.1 MB generated sample
MeasureResult
Open (metadata ready)255 ms
First page painted480 ms
Bytes read to open + paint page 11.1 MB of 49.1 MB (19 range requests)
Jump to page 601129 ms
Sustained scroll17 ms/frame
Zoom to 1200% (detail tile painted)259 ms
Raster held in memory at 1200%3.8 MP
Overlay rebuild, 4,000 markups54 ms
500 hit tests, 4,000 markups5 ms
JS heap14 MB
SHEET G-501
Get ScaleSet PDF

Put the set
under control.

ScaleSet PDF is free to read. The markup, takeoff and editing tools are licensed to teams, a seat per person - download it now, and tell us how many seats you need.