Sheetwrite 0.6.1 fixes four slowdowns that the 0.6.0 release comparison found against 0.5.4. It has no API changes. All eight packages release as 0.6.1.
Highlights
- Data-grid edits as fast as 0.5.4 again. Value edits in a workbook without formulas no longer run the formula recalculation pass.
- Faster scrolling back to evicted pages. The screen-reader mirror no longer rewrites cells whose labels did not change.
- Faster text lookups. Recalculation after many single-cell writes no longer checks every written cell.
- Faster XLSX safety checks. A file that expands too much is rejected before its parts are read.
Changes
Each number below compares the same workload, one capture of each version on the same machine, paired run by run. A ratio below 1× is faster.
Data-grid edits
0.6.0 made 1,000 value edits on a data grid about 27% slower than 0.5.4. Every value edit called the formula recalculation pass, even in a workbook without formulas, where the pass has no work to do.
In 0.6.1 a value edit in a workbook without formulas or pivot tables skips the pass. Edits take 0.79× the time of 0.6.0, the same as 0.5.4. Workbooks with formulas or pivot tables recalculate as before.
Paged scrolling
In 0.6.0, every data refresh also refreshes the accessibility mirror, so a
screen reader reads loaded values instead of #LOADING!. The mirror then
rewrote every cell, even when nothing had changed. Scrolling back to a page
that was evicted took 2.1× as long as in 0.5.4.
In 0.6.1 the mirror writes only the cells and attributes that change. The same scroll takes 0.60× the time of 0.6.0. Screen readers still read the loaded values.
Text lookups
When many single-cell writes are followed by one bulk write, the next recalculation checked every written cell, although the sheet had far fewer formulas. In 0.6.1 the recalculation checks the formulas instead when they are fewer. Lookups over 1,000 text cells are 9% to 17% faster than in 0.5.4.
XLSX import and export
- A file whose parts declare too much expansion, such as a ZIP bomb, is now rejected from the archive directory, before any part is read. The reject takes 0.84× the time of 0.6.0.
- Small worksheets parse in one step: the deeply nested XML reject takes 0.98× the time of 0.6.0, with the same depth and size limits.
- Export leaves about 7% less short-lived memory behind for large scalar sheets.
All limits apply as before. Import and export produce the same bytes.
Upgrade checklist
-
Update every package together
Install 0.6.1 for each
@sheetwrite/*package that you use. Packages from different versions are not supported together.corewasmformulasxlsxchartsreactvuesvelte -
Complete the 0.6.0 steps first
Read the 0.6.0 upgrade checklist.