From efb1ccece8b669f82059d0aeb8ee0c04ddf14ab8 Mon Sep 17 00:00:00 2001 From: Tim de Groot Date: Mon, 28 Sep 2026 22:15:38 +0200 Subject: [PATCH 1/2] Release 2.4.1 Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 15 + docs/performance.md | 5 +- example/robot_dashboard.html | 347 +++++++++++-------- example/robot_results.db | Bin 532480 -> 532480 bytes robotframework_dashboard/version.py | 2 +- setup.py | 2 +- tests/robot/resources/cli_output/version.txt | 2 +- 7 files changed, 218 insertions(+), 155 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 190963bd..62081d70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). --- +## [2.4.1](https://github.com/MarketSquare/robotframework-dashboard/releases/tag/v2.4.1) - 2026-09-28 + +### Changed +- Much faster filtering on large dashboards — suites, tests and keywords are matched to the filtered runs with a set lookup instead of a scan per row, and the millisecond/timezone versions of the data are computed once per setting instead of on every filter change. On a dashboard with 504 runs and 208k tests, applying the default filter went from 1.2 s to 0.4 s and applying all runs from 9.8 s to 3.6 s +- Faster Most Failed, Most Flaky and Messages timelines — their rows are grouped once by test and run instead of scanning every row for every cell, and the rules of a `--messageconfig` are compiled once +- The Overview page only draws the donut of a run card when the card scrolls into view, so updating an Overview with hundreds of run cards went from about 4 s to under 0.1 s +- Faster Tables page — the column types are set up front instead of DataTables checking every cell on every update (3.9 s to 2.4 s with all runs) +- Faster initial load — the embedded data is decompressed in parallel with the browser's native `DecompressionStream`, and the pako library is no longer needed (also not in `--offlinedependencies` mode). The dashboard now needs Chrome 80+, Firefox 113+ or Safari 16.4+. Loading the 504 run dashboard went from 3.8 s to 2.3 s + +### Fixed +- The donut charts of the Overview run cards were never freed when the cards were rebuilt, so the page used more memory with every filter change +- The Messages timeline with a `--messageconfig` relied on an undeclared variable and a block-scoped function that break in strict JavaScript + +--- + ## [2.4.0](https://github.com/MarketSquare/robotframework-dashboard/releases/tag/v2.4.0) - 2026-09-26 ### Added diff --git a/docs/performance.md b/docs/performance.md index 093e915b..8d89f328 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -14,7 +14,7 @@ The process has three distinct stages — each with its own time and size cost: |---|---| | **XML processing** | `OutputProcessor` uses `robot.api.ExecutionResult` to parse each `output.xml` and insert its data into the SQLite database. | | **Dashboard generation** | `DashboardGenerator` reads all data from the database, compresses it (JSON → zlib → base64), inlines all JS/CSS, and writes a single self-contained `.html` file. | -| **Browser rendering** | The browser decompresses the embedded data and renders charts using Chart.js. Render time scales with the number of displayed runs and active data views. | +| **Browser rendering** | The browser decompresses the embedded data with its native `DecompressionStream` (Chrome 80+, Firefox 113+, Safari 16.4+) and renders charts using Chart.js. Render time scales with the number of displayed runs and active data views. | ## Baseline Results @@ -88,8 +88,7 @@ Very large dashboards (500+ runs with many unique tests) may reach 5–10 MB. Th The time it takes for the dashboard to finish drawing after the page opens is driven by Chart.js — not by data size or HTML file size. Key factors: - **Default quantity is 20 runs per project** — renders near-instantly on any hardware. The amount filter is applied per project (run name / `project_` tag), so a dashboard with several projects renders more runs than the quantity itself. -- **50 runs** — expect a couple of seconds while Chart.js draws all graphs. -- **100+ runs** — rendering can approach **~10 seconds or more!**. The exact time depends on: +- **Hundreds of runs** — expect a few seconds. As a reference, a dashboard with 504 runs, 208k test results and 138k keyword results loads in about 2.3 seconds with the default quantity, and applying a filter that shows all 504 runs takes about 3.6 seconds on the Dashboard page, 2.4 seconds on the Tables page and under 0.1 seconds on the Overview page. The exact time depends on: - The **size of your test suite** — more tests and suites mean more data points per chart. - Whether **"All Suites"** or **"All Tests"** is selected in their respective sections — these views render one data series per unique suite/test name, which scales with the breadth of your suite. diff --git a/example/robot_dashboard.html b/example/robot_dashboard.html index f59d3d54..61b17139 100644 --- a/example/robot_dashboard.html +++ b/example/robot_dashboard.html @@ -14,7 +14,6 @@ -