docs: restructure the 3.13.0 post around themes and use cases
- deeper technical detail and code in the eight themes; pull request numbers move to the appendix, timeline steps are labelled by theme - comparison with other libraries by use case, as heatmaps per platform, with validation levels and the caveats next to the results - appendix: test files, all 182 suite rows with a histogram, timeline steps, algorithmic fixes, per-file tables, behaviour changes, setup, pull requests by theme Signed-off-by: Niels Lohmann <mail@nlohmann.me>
No files matched your search
@@ -766,7 +766,7 @@ body:has(.nj-hero) .md-content {
|
||||
|
||||
/* figure captions: "Figure N." in bold, close to the figure, set in from the text column; figures and tables are
|
||||
numbered per page, each with its own counter */
|
||||
.md-content__inner { counter-reset: nj-figure nj-table; }
|
||||
.md-content__inner { counter-reset: nj-figure nj-table nj-listing; }
|
||||
.md-typeset :is(.nj-caption, .nj-charts-caption) {
|
||||
max-width: none;
|
||||
margin: .3rem 2rem 1.5rem;
|
||||
@@ -787,6 +787,25 @@ body:has(.nj-hero) .md-content {
|
||||
.md-typeset :is(.nj-caption, .nj-charts-caption) { margin-inline: 1rem; }
|
||||
}
|
||||
|
||||
/* code captions: "Listing N." in bold, directly below the code block, in the figure caption style */
|
||||
.md-typeset .nj-code-caption {
|
||||
max-width: none;
|
||||
margin: -.4rem 2rem 1.5rem;
|
||||
font-size: .75rem;
|
||||
line-height: 1.5;
|
||||
text-align: left;
|
||||
color: var(--md-default-fg-color--light);
|
||||
}
|
||||
.md-typeset .nj-code-caption::before {
|
||||
counter-increment: nj-listing;
|
||||
content: "Listing " counter(nj-listing) ". ";
|
||||
font-weight: 700;
|
||||
color: var(--md-default-fg-color);
|
||||
}
|
||||
@media screen and (max-width: 44.9375em) {
|
||||
.md-typeset .nj-code-caption { margin-inline: 1rem; }
|
||||
}
|
||||
|
||||
/* table captions: "Table N." in bold, directly below the table, in the figure caption style */
|
||||
.md-typeset .nj-table-caption {
|
||||
max-width: none;
|
||||
|
||||
@@ -47,6 +47,29 @@
|
||||
paint-order: stroke; stroke: var(--md-default-bg-color); stroke-width: 4px; stroke-linejoin: round; }
|
||||
.nj-charts .nj-charts-factor { fill: var(--nj-charts-ink2); font-size: 12px; font-weight: 600; text-anchor: middle; }
|
||||
.nj-charts .nj-charts-note { fill: var(--nj-charts-ink2); font-size: 12px; }
|
||||
/* heatmap cells (perf_blog_usecases_*.svg): green for the fastest, gray around twice the time, red for the slowest;
|
||||
adjacent steps checked for CVD separation on the light and the slate surface; the numbers are in every cell */
|
||||
.md-typeset svg.nj-charts--heat { max-width: 49rem; }
|
||||
.nj-charts--heat { --nj-heat-0: #3fa557; --nj-heat-1: #8bcc95; --nj-heat-2: #ebeae6; --nj-heat-3: #f2ae9b;
|
||||
--nj-heat-4: #dc5a43; --nj-heat-ink: #1b1b1b; --nj-heat-ink-strong: #1b1b1b; }
|
||||
[data-md-color-scheme="slate"] .nj-charts--heat { --nj-heat-0: #3a9d50; --nj-heat-1: #2c6b3a; --nj-heat-2: #33353a;
|
||||
--nj-heat-3: #8a3f2e; --nj-heat-4: #d95b3a; --nj-heat-ink: #e8e8e6; --nj-heat-ink-strong: #141414; }
|
||||
.nj-charts .nj-heat-0 { fill: var(--nj-heat-0); }
|
||||
.nj-charts .nj-heat-1 { fill: var(--nj-heat-1); }
|
||||
.nj-charts .nj-heat-2 { fill: var(--nj-heat-2); }
|
||||
.nj-charts .nj-heat-3 { fill: var(--nj-heat-3); }
|
||||
.nj-charts .nj-heat-4 { fill: var(--nj-heat-4); }
|
||||
.nj-charts .nj-heat-na { fill: none; stroke: var(--nj-charts-grid); stroke-width: 1; }
|
||||
.nj-charts .nj-charts-cell { fill: var(--nj-heat-ink); font-size: 12px; font-variant-numeric: tabular-nums; }
|
||||
.nj-charts :is(.nj-heat-0, .nj-heat-4) ~ .nj-charts-cell { fill: var(--nj-heat-ink-strong); }
|
||||
.nj-charts .nj-charts-cell--small { font-size: 10.5px; }
|
||||
.nj-charts .nj-heat-cell { cursor: default; outline: none; }
|
||||
.nj-charts .nj-heat-cell:is(:hover, :focus-visible, .nj-heat-on) rect { stroke: var(--md-default-fg-color); stroke-width: 1.5; }
|
||||
.nj-heat-tip { position: absolute; z-index: 5; max-width: 24rem; padding: .5rem .7rem; border-radius: 6px;
|
||||
background: var(--md-default-bg-color); color: var(--md-default-fg-color);
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, .25); font-size: .68rem; line-height: 1.45; pointer-events: none; }
|
||||
.nj-heat-tip strong { display: block; margin-bottom: .2rem; }
|
||||
.nj-heat-tip[hidden] { display: none; }
|
||||
|
||||
.nj-charts .nj-charts-grid { stroke: var(--nj-charts-grid); stroke-width: 1; }
|
||||
.nj-charts .nj-charts-zero, .nj-charts .nj-charts-axis { stroke: var(--nj-charts-base); stroke-width: 1.5; }
|
||||
@@ -145,3 +168,19 @@
|
||||
/* direct line labels replace the legend */
|
||||
.nj-charts .nj-charts-name-json { fill: var(--nj-charts-json-c); font-weight: 600; }
|
||||
.nj-charts .nj-charts-name-ojson { fill: var(--nj-charts-ojson-c); font-weight: 600; }
|
||||
|
||||
/* theme badges of home/blog/how_3_13_0_got_faster.md: the number of one of the eight themes, as a digit in a blue
|
||||
circle, in headings, text, tables and the timeline figures (nj-theme-dot); "U" and other marks are gray */
|
||||
.md-typeset .nj-theme { display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
|
||||
min-width: 1.45em; height: 1.45em; padding: 0 .3em; border-radius: .725em; vertical-align: .08em;
|
||||
background: var(--nj-blue); color: var(--md-default-bg-color); font-size: .78em; font-weight: 700; line-height: 1;
|
||||
font-variant-numeric: tabular-nums; text-decoration: none; }
|
||||
.md-typeset a.nj-theme:is(:hover, :focus-visible) { background: var(--nj-blue-deep); color: var(--md-default-bg-color); }
|
||||
.md-typeset .nj-theme--other { background: var(--md-default-fg-color--light); }
|
||||
.md-typeset h2 .nj-theme { margin-right: .35em; vertical-align: .12em; }
|
||||
.md-typeset .nj-theme-list > ul { list-style: none; margin-left: 0; }
|
||||
.md-typeset .nj-theme-list > ul > li { margin-left: 0; padding-left: 2em; text-indent: -2em; }
|
||||
.md-typeset .nj-theme-list > ul > li > .nj-theme { margin-right: .55em; text-indent: 0; }
|
||||
.nj-charts .nj-theme-dot { fill: var(--nj-blue); }
|
||||
.nj-charts .nj-theme-dot--other { fill: var(--nj-charts-ink2); }
|
||||
.nj-charts .nj-theme-num { fill: var(--md-default-bg-color); font-size: 11px; font-weight: 700; }
|
||||
@@ -1,6 +1,6 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog" viewBox="0 0 600 380" role="img" aria-labelledby="nj-blog-cliffs nj-blog-cliffs-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-cliffs">Operations that grew quadratically or worse: time with 3.12.0 and 3.13.0, log scale</title>
|
||||
<desc id="nj-blog-cliffs-d">Dot plot on a logarithmic time axis, less is better; an arrow leads from each 3.12.0 time to the 3.13.0 time. diff() 64k numbers vs []: 4102 ms to 9.98 ms; diff() 20k objects vs half: 119 ms to 3.85 ms; parse() callback, 32k objects: 1334 ms to 11.5 ms; < nested 24 deep: 62.6 ms to 0.002 ms; < citm, 10x: 274 ms to 3.81 ms; flatten() citm, ordered_json: 253 ms to 1.37 ms; to_bson() 200 deep, 100x: 19.5 ms to 0.566 ms; push_back() 100k, diagnostics: 1514 ms to 4.98 ms; at(i) 10k, diagnostics: 43.2 ms to 0.081 ms.</desc>
|
||||
<desc id="nj-blog-cliffs-d">Dot plot on a logarithmic time axis, less is better; an arrow leads from each 3.12.0 time to the 3.13.0 time. diff() 64k numbers vs []: 4102 ms to 9.98 ms; diff() 20k objects vs half: 119 ms to 3.85 ms; parse() callback, 32k objects: 1334 ms to 11.5 ms; operator< nested 24 deep: 62.6 ms to 0.002 ms; operator< citm, 10x: 274 ms to 3.81 ms; flatten() citm, ordered_json: 253 ms to 1.37 ms; to_bson() 200 deep, 100x: 19.5 ms to 0.566 ms; push_back() 100k, diagnostics: 1514 ms to 4.98 ms; at(i) 10k, diagnostics: 43.2 ms to 0.081 ms.</desc>
|
||||
<line class="nj-charts-grid" x1="250" y1="30" x2="250" y2="336"/>
|
||||
<text class="nj-charts-tick" x="250" y="352">1 µs</text>
|
||||
<line class="nj-charts-grid" x1="297.857" y1="30" x2="297.857" y2="336"/>
|
||||
@@ -36,15 +36,15 @@
|
||||
<circle class="nj-charts-ojson-dot" cx="543.132" cy="116" r="5"><title>parse() callback, 32k objects, 3.12.0: 1334 ms</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="444.333" cy="116" r="5"><title>parse() callback, 32k objects, 3.13.0: 11.5 ms</title></circle>
|
||||
<text class="nj-charts-factor" x="493.733" y="109">116×</text>
|
||||
<text class="nj-charts-rowlabel" x="240" y="154" text-anchor="end">< nested 24 deep</text>
|
||||
<text class="nj-charts-rowlabel" x="240" y="154" text-anchor="end">operator< nested 24 deep</text>
|
||||
<line class="nj-charts-axis" x1="473.55" y1="150" x2="271.406" y2="150" marker-end="url(#nj-blog-cliffs-head)"/>
|
||||
<circle class="nj-charts-ojson-dot" cx="479.55" cy="150" r="5"><title>< nested 24 deep, 3.12.0: 62.6 ms</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="264.406" cy="150" r="5"><title>< nested 24 deep, 3.13.0: 0.002 ms</title></circle>
|
||||
<circle class="nj-charts-ojson-dot" cx="479.55" cy="150" r="5"><title>operator< nested 24 deep, 3.12.0: 62.6 ms</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="264.406" cy="150" r="5"><title>operator< nested 24 deep, 3.13.0: 0.002 ms</title></circle>
|
||||
<text class="nj-charts-factor" x="371.978" y="143">31300×</text>
|
||||
<text class="nj-charts-rowlabel" x="240" y="188" text-anchor="end">< citm, 10x</text>
|
||||
<text class="nj-charts-rowlabel" x="240" y="188" text-anchor="end">operator< citm, 10x</text>
|
||||
<line class="nj-charts-axis" x1="504.235" y1="184" x2="428.373" y2="184" marker-end="url(#nj-blog-cliffs-head)"/>
|
||||
<circle class="nj-charts-ojson-dot" cx="510.235" cy="184" r="5"><title>< citm, 10x, 3.12.0: 274 ms</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="421.373" cy="184" r="5"><title>< citm, 10x, 3.13.0: 3.81 ms</title></circle>
|
||||
<circle class="nj-charts-ojson-dot" cx="510.235" cy="184" r="5"><title>operator< citm, 10x, 3.12.0: 274 ms</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="421.373" cy="184" r="5"><title>operator< citm, 10x, 3.13.0: 3.81 ms</title></circle>
|
||||
<text class="nj-charts-factor" x="465.804" y="177">72×</text>
|
||||
<text class="nj-charts-rowlabel" x="240" y="222" text-anchor="end">flatten() citm, ordered_json</text>
|
||||
<line class="nj-charts-axis" x1="502.578" y1="218" x2="407.114" y2="218" marker-end="url(#nj-blog-cliffs-head)"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.2 KiB |
@@ -0,0 +1,36 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog" viewBox="0 0 560 250" role="img" aria-labelledby="nj-blog-dist nj-blog-dist-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-dist">Speedup of 3.13.0 over 3.12.0 for all 182 benchmarks of the suite</title>
|
||||
<desc id="nj-blog-dist-d">Bars counting the benchmarks per speedup range: below 1x: 2; 1 to 1.5x: 23; 1.5 to 2x: 17; 2 to 3x: 57; 3 to 5x: 54; 5 to 10x: 24; 10x or more: 5. Median 2.9x, geometric mean 2.9x.</desc>
|
||||
<line class="nj-charts-grid" x1="52" y1="196" x2="548" y2="196"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="46" y="200">0</text>
|
||||
<line class="nj-charts-grid" x1="52" y1="144.571" x2="548" y2="144.571"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="46" y="148.571">20</text>
|
||||
<line class="nj-charts-grid" x1="52" y1="93.1429" x2="548" y2="93.1429"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="46" y="97.1429">40</text>
|
||||
<line class="nj-charts-grid" x1="52" y1="41.7143" x2="548" y2="41.7143"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="46" y="45.7143">60</text>
|
||||
<rect class="nj-charts-c2" x="60.0" y="190.9" width="54.9" height="5.1" rx="3"><title>below 1×: 2</title></rect>
|
||||
<text class="nj-charts-val" x="87.4" y="185.9" text-anchor="middle">2</text>
|
||||
<text class="nj-charts-tick" x="87.4" y="212.0">below 1×</text>
|
||||
<rect class="nj-charts-c1" x="130.9" y="136.9" width="54.9" height="59.1" rx="3"><title>1 to 1.5×: 23</title></rect>
|
||||
<text class="nj-charts-val" x="158.3" y="131.9" text-anchor="middle">23</text>
|
||||
<text class="nj-charts-tick" x="158.3" y="212.0">1 to 1.5×</text>
|
||||
<rect class="nj-charts-c1" x="201.7" y="152.3" width="54.9" height="43.7" rx="3"><title>1.5 to 2×: 17</title></rect>
|
||||
<text class="nj-charts-val" x="229.1" y="147.3" text-anchor="middle">17</text>
|
||||
<text class="nj-charts-tick" x="229.1" y="212.0">1.5 to 2×</text>
|
||||
<rect class="nj-charts-c1" x="272.6" y="49.4" width="54.9" height="146.6" rx="3"><title>2 to 3×: 57</title></rect>
|
||||
<text class="nj-charts-val" x="300.0" y="44.4" text-anchor="middle">57</text>
|
||||
<text class="nj-charts-tick" x="300.0" y="212.0">2 to 3×</text>
|
||||
<rect class="nj-charts-c1" x="343.4" y="57.1" width="54.9" height="138.9" rx="3"><title>3 to 5×: 54</title></rect>
|
||||
<text class="nj-charts-val" x="370.9" y="52.1" text-anchor="middle">54</text>
|
||||
<text class="nj-charts-tick" x="370.9" y="212.0">3 to 5×</text>
|
||||
<rect class="nj-charts-c1" x="414.3" y="134.3" width="54.9" height="61.7" rx="3"><title>5 to 10×: 24</title></rect>
|
||||
<text class="nj-charts-val" x="441.7" y="129.3" text-anchor="middle">24</text>
|
||||
<text class="nj-charts-tick" x="441.7" y="212.0">5 to 10×</text>
|
||||
<rect class="nj-charts-c1" x="485.1" y="183.1" width="54.9" height="12.9" rx="3"><title>10× or more: 5</title></rect>
|
||||
<text class="nj-charts-val" x="512.6" y="178.1" text-anchor="middle">5</text>
|
||||
<text class="nj-charts-tick" x="512.6" y="212.0">10× or more</text>
|
||||
<line class="nj-charts-axis" x1="52" y1="196" x2="548" y2="196"/>
|
||||
<text class="nj-charts-tick" x="300" y="240">speedup over 3.12.0, more is better</text>
|
||||
<text class="nj-charts-tick" transform="rotate(-90)" x="-106" y="14">number of benchmarks</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -1,87 +1,87 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog" viewBox="0 0 560 614" role="img" aria-labelledby="nj-blog-overview nj-blog-overview-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg class="nj-fig nj-charts nj-charts--blog" viewBox="0 0 560 604" role="img" aria-labelledby="nj-blog-overview nj-blog-overview-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-overview">Speedup of 3.13.0 over 3.12.0 per workload, Apple M1 Max, Apple clang</title>
|
||||
<desc id="nj-blog-overview-d">Horizontal bars of the speedup, more is better. twitter.json 3.0x; citm_catalog.json 4.1x; canada.json 3.5x; canada.json, indented 6.7x; citm, ordered_json 6.6x; twitter, std::ifstream 2.5x; citm, FILE* 4.8x; citm, accept() 7.0x; dump() twitter 6.7x; dump() canada 3.0x; dump(4) citm 4.6x; to_cbor() twitter 4.5x; twitter, memory 3.1x; twitter, FILE* 6.3x; diff() canada 10x; iterate canada 2.7x; copy + destroy citm 1.11x; == citm 1.04x.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="46">Parsing</text>
|
||||
<text class="nj-charts-panel" x="8" y="270">Writing</text>
|
||||
<text class="nj-charts-panel" x="8" y="398">Reading C​BOR</text>
|
||||
<text class="nj-charts-panel" x="8" y="478">Values</text>
|
||||
<line class="nj-charts-grid" x1="220" y1="34" x2="220" y2="586"/>
|
||||
<text class="nj-charts-tick" x="220" y="602">1×</text>
|
||||
<line class="nj-charts-grid" x1="250" y1="34" x2="250" y2="586"/>
|
||||
<text class="nj-charts-tick" x="250" y="602">2×</text>
|
||||
<line class="nj-charts-grid" x1="280" y1="34" x2="280" y2="586"/>
|
||||
<text class="nj-charts-tick" x="280" y="602">3×</text>
|
||||
<line class="nj-charts-grid" x1="310" y1="34" x2="310" y2="586"/>
|
||||
<text class="nj-charts-tick" x="310" y="602">4×</text>
|
||||
<line class="nj-charts-grid" x1="340" y1="34" x2="340" y2="586"/>
|
||||
<text class="nj-charts-tick" x="340" y="602">5×</text>
|
||||
<line class="nj-charts-grid" x1="370" y1="34" x2="370" y2="586"/>
|
||||
<text class="nj-charts-tick" x="370" y="602">6×</text>
|
||||
<line class="nj-charts-grid" x1="400" y1="34" x2="400" y2="586"/>
|
||||
<text class="nj-charts-tick" x="400" y="602">7×</text>
|
||||
<line class="nj-charts-grid" x1="430" y1="34" x2="430" y2="586"/>
|
||||
<text class="nj-charts-tick" x="430" y="602">8×</text>
|
||||
<line class="nj-charts-grid" x1="460" y1="34" x2="460" y2="586"/>
|
||||
<text class="nj-charts-tick" x="460" y="602">9×</text>
|
||||
<line class="nj-charts-grid" x1="490" y1="34" x2="490" y2="586"/>
|
||||
<text class="nj-charts-tick" x="490" y="602">10×</text>
|
||||
<line class="nj-charts-grid" x1="520" y1="34" x2="520" y2="586"/>
|
||||
<text class="nj-charts-tick" x="520" y="602">11×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="68" text-anchor="end">twitter.json</text>
|
||||
<path class="nj-charts-c1" d="M190 56 H276.6 Q280.6 56 280.6 60 V67 Q280.6 71 276.6 71 H190 Z"><title>twitter.json: 3.0×</title></path>
|
||||
<text class="nj-charts-val" x="285.6" y="68">3.0×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="92" text-anchor="end">citm_catalog.json</text>
|
||||
<path class="nj-charts-c1" d="M190 80 H309.9 Q313.9 80 313.9 84 V91 Q313.9 95 309.9 95 H190 Z"><title>citm_catalog.json: 4.1×</title></path>
|
||||
<text class="nj-charts-val" x="318.9" y="92">4.1×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="116" text-anchor="end">canada.json</text>
|
||||
<path class="nj-charts-c1" d="M190 104 H289.8 Q293.8 104 293.8 108 V115 Q293.8 119 289.8 119 H190 Z"><title>canada.json: 3.5×</title></path>
|
||||
<text class="nj-charts-val" x="298.8" y="116">3.5×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="140" text-anchor="end">canada.json, indented</text>
|
||||
<path class="nj-charts-c1" d="M190 128 H388.2 Q392.2 128 392.2 132 V139 Q392.2 143 388.2 143 H190 Z"><title>canada.json, indented: 6.7×</title></path>
|
||||
<text class="nj-charts-val" x="397.2" y="140">6.7×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="164" text-anchor="end">citm, ordered_json</text>
|
||||
<path class="nj-charts-c1" d="M190 152 H383.4 Q387.4 152 387.4 156 V163 Q387.4 167 383.4 167 H190 Z"><title>citm, ordered_json: 6.6×</title></path>
|
||||
<text class="nj-charts-val" x="392.4" y="164">6.6×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="188" text-anchor="end">twitter, std::ifstream</text>
|
||||
<path class="nj-charts-c1" d="M190 176 H259.8 Q263.8 176 263.8 180 V187 Q263.8 191 259.8 191 H190 Z"><title>twitter, std::ifstream: 2.5×</title></path>
|
||||
<text class="nj-charts-val" x="268.8" y="188">2.5×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="212" text-anchor="end">citm, FILE*</text>
|
||||
<path class="nj-charts-c1" d="M190 200 H328.8 Q332.8 200 332.8 204 V211 Q332.8 215 328.8 215 H190 Z"><title>citm, FILE*: 4.8×</title></path>
|
||||
<text class="nj-charts-val" x="337.8" y="212">4.8×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="236" text-anchor="end">citm, accept()</text>
|
||||
<path class="nj-charts-c1" d="M190 224 H395.7 Q399.7 224 399.7 228 V235 Q399.7 239 395.7 239 H190 Z"><title>citm, accept(): 7.0×</title></path>
|
||||
<text class="nj-charts-val" x="404.7" y="236">7.0×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="292" text-anchor="end">dump() twitter</text>
|
||||
<path class="nj-charts-c1" d="M190 280 H386.1 Q390.1 280 390.1 284 V291 Q390.1 295 386.1 295 H190 Z"><title>dump() twitter: 6.7×</title></path>
|
||||
<text class="nj-charts-val" x="395.1" y="292">6.7×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="316" text-anchor="end">dump() canada</text>
|
||||
<path class="nj-charts-c1" d="M190 304 H274.5 Q278.5 304 278.5 308 V315 Q278.5 319 274.5 319 H190 Z"><title>dump() canada: 3.0×</title></path>
|
||||
<text class="nj-charts-val" x="283.5" y="316">3.0×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="340" text-anchor="end">dump(4) citm</text>
|
||||
<path class="nj-charts-c1" d="M190 328 H324.9 Q328.9 328 328.9 332 V339 Q328.9 343 324.9 343 H190 Z"><title>dump(4) citm: 4.6×</title></path>
|
||||
<text class="nj-charts-val" x="333.9" y="340">4.6×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="364" text-anchor="end">to_cbor() twitter</text>
|
||||
<path class="nj-charts-c1" d="M190 352 H321 Q325 352 325 356 V363 Q325 367 321 367 H190 Z"><title>to_cbor() twitter: 4.5×</title></path>
|
||||
<text class="nj-charts-val" x="330" y="364">4.5×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="420" text-anchor="end">twitter, memory</text>
|
||||
<path class="nj-charts-c1" d="M190 408 H279.3 Q283.3 408 283.3 412 V419 Q283.3 423 279.3 423 H190 Z"><title>twitter, memory: 3.1×</title></path>
|
||||
<text class="nj-charts-val" x="288.3" y="420">3.1×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="444" text-anchor="end">twitter, FILE*</text>
|
||||
<path class="nj-charts-c1" d="M190 432 H375.3 Q379.3 432 379.3 436 V443 Q379.3 447 375.3 447 H190 Z"><title>twitter, FILE*: 6.3×</title></path>
|
||||
<text class="nj-charts-val" x="384.3" y="444">6.3×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="500" text-anchor="end">diff() canada</text>
|
||||
<path class="nj-charts-c1" d="M190 488 H499.2 Q503.2 488 503.2 492 V499 Q503.2 503 499.2 503 H190 Z"><title>diff() canada: 10×</title></path>
|
||||
<text class="nj-charts-val" x="508.2" y="500">10×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="524" text-anchor="end">iterate canada</text>
|
||||
<path class="nj-charts-c1" d="M190 512 H266.7 Q270.7 512 270.7 516 V523 Q270.7 527 266.7 527 H190 Z"><title>iterate canada: 2.7×</title></path>
|
||||
<text class="nj-charts-val" x="275.7" y="524">2.7×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="548" text-anchor="end">copy + destroy citm</text>
|
||||
<path class="nj-charts-c1" d="M190 536 H219.3 Q223.3 536 223.3 540 V547 Q223.3 551 219.3 551 H190 Z"><title>copy + destroy citm: 1.11×</title></path>
|
||||
<text class="nj-charts-val" x="228.3" y="548">1.11×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="572" text-anchor="end">== citm</text>
|
||||
<path class="nj-charts-c1" d="M190 560 H217.2 Q221.2 560 221.2 564 V571 Q221.2 575 217.2 575 H190 Z"><title>== citm: 1.04×</title></path>
|
||||
<text class="nj-charts-val" x="226.2" y="572">1.04×</text>
|
||||
<line class="nj-charts-ref" x1="220" y1="34" x2="220" y2="586"/>
|
||||
<line class="nj-charts-zero" x1="190" y1="34" x2="190" y2="586"/>
|
||||
<text class="nj-charts-note" x="190" y="18">speedup over 3.12.0, more is better (the line at 1× is 3.12.0)</text>
|
||||
<text class="nj-charts-panel" x="8" y="20">Parsing</text>
|
||||
<text class="nj-charts-panel" x="8" y="244">Writing</text>
|
||||
<text class="nj-charts-panel" x="8" y="372">Reading C​BOR</text>
|
||||
<text class="nj-charts-panel" x="8" y="452">Values</text>
|
||||
<line class="nj-charts-grid" x1="220" y1="8" x2="220" y2="560"/>
|
||||
<text class="nj-charts-tick" x="220" y="576">1×</text>
|
||||
<line class="nj-charts-grid" x1="250" y1="8" x2="250" y2="560"/>
|
||||
<text class="nj-charts-tick" x="250" y="576">2×</text>
|
||||
<line class="nj-charts-grid" x1="280" y1="8" x2="280" y2="560"/>
|
||||
<text class="nj-charts-tick" x="280" y="576">3×</text>
|
||||
<line class="nj-charts-grid" x1="310" y1="8" x2="310" y2="560"/>
|
||||
<text class="nj-charts-tick" x="310" y="576">4×</text>
|
||||
<line class="nj-charts-grid" x1="340" y1="8" x2="340" y2="560"/>
|
||||
<text class="nj-charts-tick" x="340" y="576">5×</text>
|
||||
<line class="nj-charts-grid" x1="370" y1="8" x2="370" y2="560"/>
|
||||
<text class="nj-charts-tick" x="370" y="576">6×</text>
|
||||
<line class="nj-charts-grid" x1="400" y1="8" x2="400" y2="560"/>
|
||||
<text class="nj-charts-tick" x="400" y="576">7×</text>
|
||||
<line class="nj-charts-grid" x1="430" y1="8" x2="430" y2="560"/>
|
||||
<text class="nj-charts-tick" x="430" y="576">8×</text>
|
||||
<line class="nj-charts-grid" x1="460" y1="8" x2="460" y2="560"/>
|
||||
<text class="nj-charts-tick" x="460" y="576">9×</text>
|
||||
<line class="nj-charts-grid" x1="490" y1="8" x2="490" y2="560"/>
|
||||
<text class="nj-charts-tick" x="490" y="576">10×</text>
|
||||
<line class="nj-charts-grid" x1="520" y1="8" x2="520" y2="560"/>
|
||||
<text class="nj-charts-tick" x="520" y="576">11×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="42" text-anchor="end">twitter.json</text>
|
||||
<path class="nj-charts-c1" d="M190 30 H276.6 Q280.6 30 280.6 34 V41 Q280.6 45 276.6 45 H190 Z"><title>twitter.json: 3.0×</title></path>
|
||||
<text class="nj-charts-val" x="285.6" y="42">3.0×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="66" text-anchor="end">citm_catalog.json</text>
|
||||
<path class="nj-charts-c1" d="M190 54 H309.9 Q313.9 54 313.9 58 V65 Q313.9 69 309.9 69 H190 Z"><title>citm_catalog.json: 4.1×</title></path>
|
||||
<text class="nj-charts-val" x="318.9" y="66">4.1×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="90" text-anchor="end">canada.json</text>
|
||||
<path class="nj-charts-c1" d="M190 78 H289.8 Q293.8 78 293.8 82 V89 Q293.8 93 289.8 93 H190 Z"><title>canada.json: 3.5×</title></path>
|
||||
<text class="nj-charts-val" x="298.8" y="90">3.5×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="114" text-anchor="end">canada.json, indented</text>
|
||||
<path class="nj-charts-c1" d="M190 102 H388.2 Q392.2 102 392.2 106 V113 Q392.2 117 388.2 117 H190 Z"><title>canada.json, indented: 6.7×</title></path>
|
||||
<text class="nj-charts-val" x="397.2" y="114">6.7×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="138" text-anchor="end">citm, ordered_json</text>
|
||||
<path class="nj-charts-c1" d="M190 126 H383.4 Q387.4 126 387.4 130 V137 Q387.4 141 383.4 141 H190 Z"><title>citm, ordered_json: 6.6×</title></path>
|
||||
<text class="nj-charts-val" x="392.4" y="138">6.6×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="162" text-anchor="end">twitter, std::ifstream</text>
|
||||
<path class="nj-charts-c1" d="M190 150 H259.8 Q263.8 150 263.8 154 V161 Q263.8 165 259.8 165 H190 Z"><title>twitter, std::ifstream: 2.5×</title></path>
|
||||
<text class="nj-charts-val" x="268.8" y="162">2.5×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="186" text-anchor="end">citm, FILE*</text>
|
||||
<path class="nj-charts-c1" d="M190 174 H328.8 Q332.8 174 332.8 178 V185 Q332.8 189 328.8 189 H190 Z"><title>citm, FILE*: 4.8×</title></path>
|
||||
<text class="nj-charts-val" x="337.8" y="186">4.8×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="210" text-anchor="end">citm, accept()</text>
|
||||
<path class="nj-charts-c1" d="M190 198 H395.7 Q399.7 198 399.7 202 V209 Q399.7 213 395.7 213 H190 Z"><title>citm, accept(): 7.0×</title></path>
|
||||
<text class="nj-charts-val" x="404.7" y="210">7.0×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="266" text-anchor="end">dump() twitter</text>
|
||||
<path class="nj-charts-c1" d="M190 254 H386.1 Q390.1 254 390.1 258 V265 Q390.1 269 386.1 269 H190 Z"><title>dump() twitter: 6.7×</title></path>
|
||||
<text class="nj-charts-val" x="395.1" y="266">6.7×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="290" text-anchor="end">dump() canada</text>
|
||||
<path class="nj-charts-c1" d="M190 278 H274.5 Q278.5 278 278.5 282 V289 Q278.5 293 274.5 293 H190 Z"><title>dump() canada: 3.0×</title></path>
|
||||
<text class="nj-charts-val" x="283.5" y="290">3.0×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="314" text-anchor="end">dump(4) citm</text>
|
||||
<path class="nj-charts-c1" d="M190 302 H324.9 Q328.9 302 328.9 306 V313 Q328.9 317 324.9 317 H190 Z"><title>dump(4) citm: 4.6×</title></path>
|
||||
<text class="nj-charts-val" x="333.9" y="314">4.6×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="338" text-anchor="end">to_cbor() twitter</text>
|
||||
<path class="nj-charts-c1" d="M190 326 H321 Q325 326 325 330 V337 Q325 341 321 341 H190 Z"><title>to_cbor() twitter: 4.5×</title></path>
|
||||
<text class="nj-charts-val" x="330" y="338">4.5×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="394" text-anchor="end">twitter, memory</text>
|
||||
<path class="nj-charts-c1" d="M190 382 H279.3 Q283.3 382 283.3 386 V393 Q283.3 397 279.3 397 H190 Z"><title>twitter, memory: 3.1×</title></path>
|
||||
<text class="nj-charts-val" x="288.3" y="394">3.1×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="418" text-anchor="end">twitter, FILE*</text>
|
||||
<path class="nj-charts-c1" d="M190 406 H375.3 Q379.3 406 379.3 410 V417 Q379.3 421 375.3 421 H190 Z"><title>twitter, FILE*: 6.3×</title></path>
|
||||
<text class="nj-charts-val" x="384.3" y="418">6.3×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="474" text-anchor="end">diff() canada</text>
|
||||
<path class="nj-charts-c1" d="M190 462 H499.2 Q503.2 462 503.2 466 V473 Q503.2 477 499.2 477 H190 Z"><title>diff() canada: 10×</title></path>
|
||||
<text class="nj-charts-val" x="508.2" y="474">10×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="498" text-anchor="end">iterate canada</text>
|
||||
<path class="nj-charts-c1" d="M190 486 H266.7 Q270.7 486 270.7 490 V497 Q270.7 501 266.7 501 H190 Z"><title>iterate canada: 2.7×</title></path>
|
||||
<text class="nj-charts-val" x="275.7" y="498">2.7×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="522" text-anchor="end">copy + destroy citm</text>
|
||||
<path class="nj-charts-c1" d="M190 510 H219.3 Q223.3 510 223.3 514 V521 Q223.3 525 219.3 525 H190 Z"><title>copy + destroy citm: 1.11×</title></path>
|
||||
<text class="nj-charts-val" x="228.3" y="522">1.11×</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-tick--r" x="182" y="546" text-anchor="end">== citm</text>
|
||||
<path class="nj-charts-c1" d="M190 534 H217.2 Q221.2 534 221.2 538 V545 Q221.2 549 217.2 549 H190 Z"><title>== citm: 1.04×</title></path>
|
||||
<text class="nj-charts-val" x="226.2" y="546">1.04×</text>
|
||||
<line class="nj-charts-ref" x1="220" y1="8" x2="220" y2="560"/>
|
||||
<line class="nj-charts-zero" x1="190" y1="8" x2="190" y2="560"/>
|
||||
<text class="nj-charts-tick" x="355" y="594">speedup over 3.12.0 (3.12.0 = 1×), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
@@ -0,0 +1,99 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog" viewBox="0 0 600 618" role="img" aria-labelledby="nj-blog-price nj-blog-price-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-price">Compile time of two programs with 3.13.0, alone, with a precompiled header and as a module, compared with 3.12.0</title>
|
||||
<desc id="nj-blog-price-d">Horizontal bars of the change in compile time against 3.12.0, less is better. Apple clang 21, -O0 (debug), count_numbers, 3.13.0: +20 %; Apple clang 21, -O0 (debug), count_numbers, 3.13.0, precompiled header: -29 %; Apple clang 21, -O0 (debug), count_numbers, 3.13.0, module: -16 %; Apple clang 21, -O0 (debug), server_config, 3.13.0: +30 %; Apple clang 21, -O0 (debug), server_config, 3.13.0, precompiled header: -31 %; Apple clang 21, -O0 (debug), server_config, 3.13.0, module: -5 %; Apple clang 21, -O2, count_numbers, 3.13.0: +47 %; Apple clang 21, -O2, count_numbers, 3.13.0, precompiled header: +8 %; Apple clang 21, -O2, count_numbers, 3.13.0, module: +19 %; Apple clang 21, -O2, server_config, 3.13.0: +49 %; Apple clang 21, -O2, server_config, 3.13.0, precompiled header: +11 %; Apple clang 21, -O2, server_config, 3.13.0, module: +36 %; G​CC 16, -O0 (debug), count_numbers, 3.13.0: +63 %; G​CC 16, -O0 (debug), count_numbers, 3.13.0, precompiled header: +9 %; G​CC 16, -O0 (debug), count_numbers, 3.13.0, module: +15 %; G​CC 16, -O0 (debug), server_config, 3.13.0: +40 %; G​CC 16, -O0 (debug), server_config, 3.13.0, precompiled header: +6 %; G​CC 16, -O0 (debug), server_config, 3.13.0, module: +10 %; G​CC 16, -O2, count_numbers, 3.13.0: +48 %; G​CC 16, -O2, count_numbers, 3.13.0, precompiled header: +28 %; G​CC 16, -O2, count_numbers, 3.13.0, module: +24 %; G​CC 16, -O2, server_config, 3.13.0: +52 %; G​CC 16, -O2, server_config, 3.13.0, precompiled header: +36 %; G​CC 16, -O2, server_config, 3.13.0, module: +32 %.</desc>
|
||||
<rect class="nj-charts-c2" x="8" y="6" width="12" height="12" rx="3"/>
|
||||
<text class="nj-charts-leg" x="26" y="16.5">3.13.0</text>
|
||||
<rect class="nj-charts-c1" x="97.2" y="6" width="12" height="12" rx="3"/>
|
||||
<text class="nj-charts-leg" x="115.2" y="16.5">3.13.0, precompiled header</text>
|
||||
<rect class="nj-charts-c3" x="350.4" y="6" width="12" height="12" rx="3"/>
|
||||
<text class="nj-charts-leg" x="368.4" y="16.5">3.13.0, module</text>
|
||||
<text class="nj-charts-tick" x="320.833" y="46">as fast as 3.12.0</text>
|
||||
<text class="nj-charts-panel" x="8" y="68">Apple clang 21, -O0 (debug)</text>
|
||||
<line class="nj-charts-grid" x1="184.167" y1="74" x2="184.167" y2="170"/>
|
||||
<line class="nj-charts-grid" x1="252.5" y1="74" x2="252.5" y2="170"/>
|
||||
<line class="nj-charts-grid" x1="389.167" y1="74" x2="389.167" y2="170"/>
|
||||
<line class="nj-charts-grid" x1="457.5" y1="74" x2="457.5" y2="170"/>
|
||||
<line class="nj-charts-grid" x1="525.833" y1="74" x2="525.833" y2="170"/>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="101" text-anchor="end">count_numbers</text>
|
||||
<path class="nj-charts-c2" d="M320.833 78 H385.167 Q389.167 78 389.167 82 V85 Q389.167 89 385.167 89 H320.833 Z"><title>count_numbers, Apple clang 21, -O0 (debug), 3.13.0: 1,155 ms against 959 ms with 3.12.0 (+20 %)</title></path>
|
||||
<text class="nj-charts-val" x="394.167" y="87.5">+20 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 92 H225.75 Q221.75 92 221.75 96 V99 Q221.75 103 225.75 103 H320.833 Z"><title>count_numbers, Apple clang 21, -O0 (debug), 3.13.0, precompiled header: 679 ms against 959 ms with 3.12.0 (−29 %)</title></path>
|
||||
<text class="nj-charts-val" x="216.75" y="101.5" text-anchor="end">−29 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 106 H270.167 Q266.167 106 266.167 110 V113 Q266.167 117 270.167 117 H320.833 Z"><title>count_numbers, Apple clang 21, -O0 (debug), 3.13.0, module: 804 ms against 959 ms with 3.12.0 (−16 %)</title></path>
|
||||
<text class="nj-charts-val" x="261.167" y="115.5" text-anchor="end">−16 %</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="150" text-anchor="end">server_config</text>
|
||||
<path class="nj-charts-c2" d="M320.833 127 H419.333 Q423.333 127 423.333 131 V134 Q423.333 138 419.333 138 H320.833 Z"><title>server_config, Apple clang 21, -O0 (debug), 3.13.0: 1,445 ms against 1,108 ms with 3.12.0 (+30 %)</title></path>
|
||||
<text class="nj-charts-val" x="428.333" y="136.5">+30 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 141 H218.917 Q214.917 141 214.917 145 V148 Q214.917 152 218.917 152 H320.833 Z"><title>server_config, Apple clang 21, -O0 (debug), 3.13.0, precompiled header: 763 ms against 1,108 ms with 3.12.0 (−31 %)</title></path>
|
||||
<text class="nj-charts-val" x="209.917" y="150.5" text-anchor="end">−31 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 155 H307.75 Q303.75 155 303.75 159 V162 Q303.75 166 307.75 166 H320.833 Z"><title>server_config, Apple clang 21, -O0 (debug), 3.13.0, module: 1,057 ms against 1,108 ms with 3.12.0 (−5 %)</title></path>
|
||||
<text class="nj-charts-val" x="298.75" y="164.5" text-anchor="end">−5 %</text>
|
||||
<text class="nj-charts-panel" x="8" y="198">Apple clang 21, -O2</text>
|
||||
<line class="nj-charts-grid" x1="184.167" y1="204" x2="184.167" y2="300"/>
|
||||
<line class="nj-charts-grid" x1="252.5" y1="204" x2="252.5" y2="300"/>
|
||||
<line class="nj-charts-grid" x1="389.167" y1="204" x2="389.167" y2="300"/>
|
||||
<line class="nj-charts-grid" x1="457.5" y1="204" x2="457.5" y2="300"/>
|
||||
<line class="nj-charts-grid" x1="525.833" y1="204" x2="525.833" y2="300"/>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="231" text-anchor="end">count_numbers</text>
|
||||
<path class="nj-charts-c2" d="M320.833 208 H477.417 Q481.417 208 481.417 212 V215 Q481.417 219 477.417 219 H320.833 Z"><title>count_numbers, Apple clang 21, -O2, 3.13.0: 1,868 ms against 1,269 ms with 3.12.0 (+47 %)</title></path>
|
||||
<text class="nj-charts-val" x="486.417" y="217.5">+47 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 222 H344.167 Q348.167 222 348.167 226 V229 Q348.167 233 344.167 233 H320.833 Z"><title>count_numbers, Apple clang 21, -O2, 3.13.0, precompiled header: 1,364 ms against 1,269 ms with 3.12.0 (+8 %)</title></path>
|
||||
<text class="nj-charts-val" x="353.167" y="231.5">+8 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 236 H381.75 Q385.75 236 385.75 240 V243 Q385.75 247 381.75 247 H320.833 Z"><title>count_numbers, Apple clang 21, -O2, 3.13.0, module: 1,513 ms against 1,269 ms with 3.12.0 (+19 %)</title></path>
|
||||
<text class="nj-charts-val" x="390.75" y="245.5">+19 %</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="280" text-anchor="end">server_config</text>
|
||||
<path class="nj-charts-c2" d="M320.833 257 H484.25 Q488.25 257 488.25 261 V264 Q488.25 268 484.25 268 H320.833 Z"><title>server_config, Apple clang 21, -O2, 3.13.0: 2,354 ms against 1,577 ms with 3.12.0 (+49 %)</title></path>
|
||||
<text class="nj-charts-val" x="493.25" y="266.5">+49 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 271 H354.417 Q358.417 271 358.417 275 V278 Q358.417 282 354.417 282 H320.833 Z"><title>server_config, Apple clang 21, -O2, 3.13.0, precompiled header: 1,749 ms against 1,577 ms with 3.12.0 (+11 %)</title></path>
|
||||
<text class="nj-charts-val" x="363.417" y="280.5">+11 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 285 H439.833 Q443.833 285 443.833 289 V292 Q443.833 296 439.833 296 H320.833 Z"><title>server_config, Apple clang 21, -O2, 3.13.0, module: 2,141 ms against 1,577 ms with 3.12.0 (+36 %)</title></path>
|
||||
<text class="nj-charts-val" x="448.833" y="294.5">+36 %</text>
|
||||
<text class="nj-charts-panel" x="8" y="328">G​CC 16, -O0 (debug)</text>
|
||||
<line class="nj-charts-grid" x1="184.167" y1="334" x2="184.167" y2="430"/>
|
||||
<line class="nj-charts-grid" x1="252.5" y1="334" x2="252.5" y2="430"/>
|
||||
<line class="nj-charts-grid" x1="389.167" y1="334" x2="389.167" y2="430"/>
|
||||
<line class="nj-charts-grid" x1="457.5" y1="334" x2="457.5" y2="430"/>
|
||||
<line class="nj-charts-grid" x1="525.833" y1="334" x2="525.833" y2="430"/>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="361" text-anchor="end">count_numbers</text>
|
||||
<path class="nj-charts-c2" d="M320.833 338 H532.083 Q536.083 338 536.083 342 V345 Q536.083 349 532.083 349 H320.833 Z"><title>count_numbers, G​CC 16, -O0 (debug), 3.13.0: 2,346 ms against 1,444 ms with 3.12.0 (+63 %)</title></path>
|
||||
<text class="nj-charts-val" x="541.083" y="347.5">+63 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 352 H347.583 Q351.583 352 351.583 356 V359 Q351.583 363 347.583 363 H320.833 Z"><title>count_numbers, G​CC 16, -O0 (debug), 3.13.0, precompiled header: 1,579 ms against 1,444 ms with 3.12.0 (+9 %)</title></path>
|
||||
<text class="nj-charts-val" x="356.583" y="361.5">+9 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 366 H368.083 Q372.083 366 372.083 370 V373 Q372.083 377 368.083 377 H320.833 Z"><title>count_numbers, G​CC 16, -O0 (debug), 3.13.0, module: 1,662 ms against 1,444 ms with 3.12.0 (+15 %)</title></path>
|
||||
<text class="nj-charts-val" x="377.083" y="375.5">+15 %</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="410" text-anchor="end">server_config</text>
|
||||
<path class="nj-charts-c2" d="M320.833 387 H453.5 Q457.5 387 457.5 391 V394 Q457.5 398 453.5 398 H320.833 Z"><title>server_config, G​CC 16, -O0 (debug), 3.13.0: 2,782 ms against 1,985 ms with 3.12.0 (+40 %)</title></path>
|
||||
<text class="nj-charts-val" x="462.5" y="396.5">+40 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 401 H337.333 Q341.333 401 341.333 405 V408 Q341.333 412 337.333 412 H320.833 Z"><title>server_config, G​CC 16, -O0 (debug), 3.13.0, precompiled header: 2,113 ms against 1,985 ms with 3.12.0 (+6 %)</title></path>
|
||||
<text class="nj-charts-val" x="346.333" y="410.5">+6 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 415 H351 Q355 415 355 419 V422 Q355 426 351 426 H320.833 Z"><title>server_config, G​CC 16, -O0 (debug), 3.13.0, module: 2,181 ms against 1,985 ms with 3.12.0 (+10 %)</title></path>
|
||||
<text class="nj-charts-val" x="360" y="424.5">+10 %</text>
|
||||
<text class="nj-charts-panel" x="8" y="458">G​CC 16, -O2</text>
|
||||
<line class="nj-charts-grid" x1="184.167" y1="464" x2="184.167" y2="560"/>
|
||||
<line class="nj-charts-grid" x1="252.5" y1="464" x2="252.5" y2="560"/>
|
||||
<line class="nj-charts-grid" x1="389.167" y1="464" x2="389.167" y2="560"/>
|
||||
<line class="nj-charts-grid" x1="457.5" y1="464" x2="457.5" y2="560"/>
|
||||
<line class="nj-charts-grid" x1="525.833" y1="464" x2="525.833" y2="560"/>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="491" text-anchor="end">count_numbers</text>
|
||||
<path class="nj-charts-c2" d="M320.833 468 H480.833 Q484.833 468 484.833 472 V475 Q484.833 479 480.833 479 H320.833 Z"><title>count_numbers, G​CC 16, -O2, 3.13.0: 3,453 ms against 2,327 ms with 3.12.0 (+48 %)</title></path>
|
||||
<text class="nj-charts-val" x="489.833" y="477.5">+48 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 482 H412.5 Q416.5 482 416.5 486 V489 Q416.5 493 412.5 493 H320.833 Z"><title>count_numbers, G​CC 16, -O2, 3.13.0, precompiled header: 2,972 ms against 2,327 ms with 3.12.0 (+28 %)</title></path>
|
||||
<text class="nj-charts-val" x="421.5" y="491.5">+28 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 496 H398.833 Q402.833 496 402.833 500 V503 Q402.833 507 398.833 507 H320.833 Z"><title>count_numbers, G​CC 16, -O2, 3.13.0, module: 2,895 ms against 2,327 ms with 3.12.0 (+24 %)</title></path>
|
||||
<text class="nj-charts-val" x="407.833" y="505.5">+24 %</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-code" x="142" y="540" text-anchor="end">server_config</text>
|
||||
<path class="nj-charts-c2" d="M320.833 517 H494.5 Q498.5 517 498.5 521 V524 Q498.5 528 494.5 528 H320.833 Z"><title>server_config, G​CC 16, -O2, 3.13.0: 4,389 ms against 2,889 ms with 3.12.0 (+52 %)</title></path>
|
||||
<text class="nj-charts-val" x="503.5" y="526.5">+52 %</text>
|
||||
<path class="nj-charts-c1" d="M320.833 531 H439.833 Q443.833 531 443.833 535 V538 Q443.833 542 439.833 542 H320.833 Z"><title>server_config, G​CC 16, -O2, 3.13.0, precompiled header: 3,942 ms against 2,889 ms with 3.12.0 (+36 %)</title></path>
|
||||
<text class="nj-charts-val" x="448.833" y="540.5">+36 %</text>
|
||||
<path class="nj-charts-c3" d="M320.833 545 H426.167 Q430.167 545 430.167 549 V552 Q430.167 556 426.167 556 H320.833 Z"><title>server_config, G​CC 16, -O2, 3.13.0, module: 3,826 ms against 2,889 ms with 3.12.0 (+32 %)</title></path>
|
||||
<text class="nj-charts-val" x="435.167" y="554.5">+32 %</text>
|
||||
<line class="nj-charts-ref" x1="320.833" y1="52" x2="320.833" y2="574"/>
|
||||
<text class="nj-charts-tick" x="184.167" y="590">−40 %</text>
|
||||
<text class="nj-charts-tick" x="252.5" y="590">−20 %</text>
|
||||
<text class="nj-charts-tick" x="320.833" y="590">0</text>
|
||||
<text class="nj-charts-tick" x="389.167" y="590">+20 %</text>
|
||||
<text class="nj-charts-tick" x="457.5" y="590">+40 %</text>
|
||||
<text class="nj-charts-tick" x="525.833" y="590">+60 %</text>
|
||||
<text class="nj-charts-tick" x="355" y="608">compile time compared with 3.12.0, less is better</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 13 KiB |
@@ -1,38 +1,45 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-accept_twitter nj-blog-tl-accept_twitter-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-accept_twitter">accept() twitter.json: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-accept_twitter-d">accept() twitter.json: speedup over 3.12.0 at each of 317 commits, ending at 5.0x. Labeled steps: #5234, #5283, #5592, #5809, #5810, #5853.</desc>
|
||||
<desc id="nj-blog-tl-accept_twitter-d">accept() twitter.json: speedup over 3.12.0 at each of 317 commits, ending at 5.0x. Labeled steps, by theme: 4, 1, 4, 4, 2, 2.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">accept() twitter.json</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="159.333" x2="330" y2="159.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="163.333">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="110.667" x2="330" y2="110.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="114.667">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">8×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="160.667" x2="330" y2="160.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="164.667">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="113.333" x2="330" y2="113.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="117.333">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">8×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.1 45.8,208.1 45.8,207.8 46.7,207.8 46.7,208.0 47.6,208.0 47.6,207.7 48.5,207.7 48.5,207.9 49.4,207.9 49.4,208.0 50.3,208.0 50.3,208.1 51.2,208.1 51.2,208.4 52.1,208.4 52.1,207.1 53.1,207.1 53.1,207.9 54.0,207.9 54.0,208.2 54.9,208.2 54.9,207.9 55.8,207.9 55.8,207.9 56.7,207.9 56.7,207.7 57.6,207.7 57.6,207.9 58.5,207.9 58.5,207.8 59.4,207.8 59.4,207.7 60.3,207.7 60.3,208.2 61.2,208.2 61.2,207.2 62.1,207.2 62.1,208.0 63.0,208.0 63.0,208.0 63.9,208.0 63.9,207.8 64.8,207.8 64.8,207.9 65.7,207.9 65.7,207.9 66.6,207.9 66.6,207.1 67.5,207.1 67.5,207.8 68.4,207.8 68.4,207.5 69.3,207.5 69.3,207.8 70.2,207.8 70.2,207.9 71.2,207.9 71.2,207.9 72.1,207.9 72.1,207.3 73.0,207.3 73.0,207.7 73.9,207.7 73.9,207.6 74.8,207.6 74.8,207.7 75.7,207.7 75.7,208.1 76.6,208.1 76.6,207.8 77.5,207.8 77.5,207.1 78.4,207.1 78.4,207.9 79.3,207.9 79.3,207.1 80.2,207.1 80.2,207.8 81.1,207.8 81.1,207.3 82.0,207.3 82.0,208.1 82.9,208.1 82.9,207.6 83.8,207.6 83.8,207.6 84.7,207.6 84.7,208.1 85.6,208.1 85.6,208.3 86.5,208.3 86.5,207.8 87.4,207.8 87.4,207.7 88.3,207.7 88.3,207.9 89.3,207.9 89.3,207.8 90.2,207.8 90.2,207.5 91.1,207.5 91.1,207.9 92.0,207.9 92.0,207.8 92.9,207.8 92.9,208.0 93.8,208.0 93.8,194.2 94.7,194.2 94.7,194.9 95.6,194.9 95.6,195.2 96.5,195.2 96.5,194.7 97.4,194.7 97.4,195.3 98.3,195.3 98.3,194.2 99.2,194.2 99.2,194.3 100.1,194.3 100.1,195.0 101.0,195.0 101.0,194.7 101.9,194.7 101.9,194.8 102.8,194.8 102.8,195.3 103.7,195.3 103.7,194.2 104.6,194.2 104.6,194.8 105.5,194.8 105.5,194.9 106.4,194.9 106.4,195.3 107.4,195.3 107.4,194.9 108.3,194.9 108.3,195.0 109.2,195.0 109.2,194.9 110.1,194.9 110.1,195.5 111.0,195.5 111.0,194.7 111.9,194.7 111.9,195.0 112.8,195.0 112.8,195.9 113.7,195.9 113.7,195.3 114.6,195.3 114.6,194.2 115.5,194.2 115.5,194.3 116.4,194.3 116.4,194.8 117.3,194.8 117.3,195.2 118.2,195.2 118.2,195.2 119.1,195.2 119.1,195.2 120.0,195.2 120.0,194.2 120.9,194.2 120.9,194.0 121.8,194.0 121.8,194.8 122.7,194.8 122.7,195.0 123.6,195.0 123.6,195.5 124.6,195.5 124.6,194.2 125.5,194.2 125.5,194.6 126.4,194.6 126.4,195.1 127.3,195.1 127.3,194.8 128.2,194.8 128.2,195.1 129.1,195.1 129.1,193.1 130.0,193.1 130.0,194.6 130.9,194.6 130.9,194.8 131.8,194.8 131.8,194.5 132.7,194.5 132.7,194.2 133.6,194.2 133.6,194.3 134.5,194.3 134.5,194.7 135.4,194.7 135.4,194.7 136.3,194.7 136.3,194.4 137.2,194.4 137.2,195.0 138.1,195.0 138.1,194.3 139.0,194.3 139.0,194.3 139.9,194.3 139.9,141.4 140.8,141.4 140.8,141.1 141.7,141.1 141.7,140.4 142.7,140.4 142.7,140.1 143.6,140.1 143.6,141.2 144.5,141.2 144.5,140.7 145.4,140.7 145.4,140.5 146.3,140.5 146.3,141.1 147.2,141.1 147.2,141.2 148.1,141.2 148.1,141.4 149.0,141.4 149.0,140.3 149.9,140.3 149.9,141.3 150.8,141.3 150.8,140.5 151.7,140.5 151.7,141.2 152.6,141.2 152.6,140.0 153.5,140.0 153.5,141.3 154.4,141.3 154.4,140.0 155.3,140.0 155.3,141.2 156.2,141.2 156.2,141.1 157.1,141.1 157.1,140.1 158.0,140.1 158.0,140.6 158.9,140.6 158.9,140.5 159.8,140.5 159.8,141.7 160.8,141.7 160.8,141.1 161.7,141.1 161.7,140.5 162.6,140.5 162.6,141.3 163.5,141.3 163.5,140.1 164.4,140.1 164.4,140.6 165.3,140.6 165.3,140.1 166.2,140.1 166.2,140.0 167.1,140.0 167.1,139.4 168.0,139.4 168.0,141.0 168.9,141.0 168.9,139.4 169.8,139.4 169.8,140.9 170.7,140.9 170.7,140.8 171.6,140.8 171.6,140.5 172.5,140.5 172.5,140.8 173.4,140.8 173.4,140.1 174.3,140.1 174.3,139.7 175.2,139.7 175.2,139.3 176.1,139.3 176.1,139.5 177.0,139.5 177.0,140.0 177.9,140.0 177.9,139.7 178.9,139.7 178.9,140.0 179.8,140.0 179.8,140.1 180.7,140.1 180.7,140.1 181.6,140.1 181.6,139.6 182.5,139.6 182.5,140.5 183.4,140.5 183.4,139.9 184.3,139.9 184.3,140.5 185.2,140.5 185.2,140.1 186.1,140.1 186.1,139.8 187.0,139.8 187.0,139.2 187.9,139.2 187.9,139.7 188.8,139.7 188.8,139.7 189.7,139.7 189.7,139.8 190.6,139.8 190.6,138.4 191.5,138.4 191.5,138.8 192.4,138.8 192.4,138.7 193.3,138.7 193.3,139.2 194.2,139.2 194.2,140.0 195.1,140.0 195.1,139.7 196.1,139.7 196.1,139.7 197.0,139.7 197.0,139.1 197.9,139.1 197.9,139.3 198.8,139.3 198.8,138.8 199.7,138.8 199.7,138.5 200.6,138.5 200.6,140.2 201.5,140.2 201.5,139.8 202.4,139.8 202.4,139.3 203.3,139.3 203.3,139.6 204.2,139.6 204.2,138.5 205.1,138.5 205.1,139.1 206.0,139.1 206.0,139.6 206.9,139.6 206.9,139.4 207.8,139.4 207.8,140.2 208.7,140.2 208.7,138.5 209.6,138.5 209.6,139.2 210.5,139.2 210.5,139.7 211.4,139.7 211.4,139.0 212.3,139.0 212.3,139.8 213.2,139.8 213.2,138.5 214.2,138.5 214.2,140.1 215.1,140.1 215.1,139.3 216.0,139.3 216.0,139.6 216.9,139.6 216.9,138.7 217.8,138.7 217.8,139.5 218.7,139.5 218.7,138.1 219.6,138.1 219.6,139.3 220.5,139.3 220.5,138.9 221.4,138.9 221.4,139.5 222.3,139.5 222.3,139.6 223.2,139.6 223.2,139.3 224.1,139.3 224.1,140.2 225.0,140.2 225.0,140.7 225.9,140.7 225.9,140.4 226.8,140.4 226.8,138.7 227.7,138.7 227.7,138.9 228.6,138.9 228.6,139.0 229.5,139.0 229.5,139.2 230.4,139.2 230.4,139.7 231.3,139.7 231.3,139.1 232.3,139.1 232.3,139.6 233.2,139.6 233.2,139.5 234.1,139.5 234.1,140.1 235.0,140.1 235.0,138.7 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="93.8" cy="194.2" r="3.5"><title>#5234: 1.22×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="93.8" y1="54.0" x2="93.8" y2="189.2"/>
|
||||
<text class="nj-charts-note" x="93.8" y="50.0" text-anchor="middle">#5234</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.9" cy="141.4" r="3.5"><title>#5283: 2.6×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.9" y1="54.0" x2="139.9" y2="136.4"/>
|
||||
<text class="nj-charts-note" x="139.9" y="50.0" text-anchor="middle">#5283</text>
|
||||
<circle class="nj-charts-json-dot" cx="243.1" cy="133.1" r="3.5"><title>#5592: 2.9×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="243.1" y1="54.0" x2="243.1" y2="128.1"/>
|
||||
<text class="nj-charts-note" x="243.1" y="50.0" text-anchor="middle">#5592</text>
|
||||
<circle class="nj-charts-json-dot" cx="265.7" cy="116.2" r="3.5"><title>#5809: 3.7×</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="266.6" cy="110.0" r="3.5"><title>#5810: 4.0×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="266.6" y1="41.0" x2="266.6" y2="105.0"/>
|
||||
<text class="nj-charts-note" x="266.6" y="37.0" text-anchor="middle">#5809, #5810</text>
|
||||
<circle class="nj-charts-json-dot" cx="299.2" cy="96.1" r="3.5"><title>#5853: 4.9×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="299.2" y1="54.0" x2="299.2" y2="91.1"/>
|
||||
<text class="nj-charts-note" x="299.2" y="50.0" text-anchor="middle">#5853</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.1 45.8,208.1 45.8,207.8 46.7,207.8 46.7,208.0 47.6,208.0 47.6,207.7 48.5,207.7 48.5,207.9 49.4,207.9 49.4,208.0 50.3,208.0 50.3,208.1 51.2,208.1 51.2,208.4 52.1,208.4 52.1,207.1 53.1,207.1 53.1,207.9 54.0,207.9 54.0,208.2 54.9,208.2 54.9,207.9 55.8,207.9 55.8,207.9 56.7,207.9 56.7,207.7 57.6,207.7 57.6,207.9 58.5,207.9 58.5,207.8 59.4,207.8 59.4,207.7 60.3,207.7 60.3,208.2 61.2,208.2 61.2,207.3 62.1,207.3 62.1,208.0 63.0,208.0 63.0,208.0 63.9,208.0 63.9,207.8 64.8,207.8 64.8,207.9 65.7,207.9 65.7,207.9 66.6,207.9 66.6,207.2 67.5,207.2 67.5,207.8 68.4,207.8 68.4,207.6 69.3,207.6 69.3,207.8 70.2,207.8 70.2,207.9 71.2,207.9 71.2,207.9 72.1,207.9 72.1,207.4 73.0,207.4 73.0,207.7 73.9,207.7 73.9,207.6 74.8,207.6 74.8,207.7 75.7,207.7 75.7,208.1 76.6,208.1 76.6,207.8 77.5,207.8 77.5,207.1 78.4,207.1 78.4,207.9 79.3,207.9 79.3,207.1 80.2,207.1 80.2,207.8 81.1,207.8 81.1,207.3 82.0,207.3 82.0,208.1 82.9,208.1 82.9,207.6 83.8,207.6 83.8,207.6 84.7,207.6 84.7,208.1 85.6,208.1 85.6,208.3 86.5,208.3 86.5,207.8 87.4,207.8 87.4,207.7 88.3,207.7 88.3,207.9 89.3,207.9 89.3,207.8 90.2,207.8 90.2,207.5 91.1,207.5 91.1,207.9 92.0,207.9 92.0,207.8 92.9,207.8 92.9,208.0 93.8,208.0 93.8,194.6 94.7,194.6 94.7,195.3 95.6,195.3 95.6,195.6 96.5,195.6 96.5,195.1 97.4,195.1 97.4,195.6 98.3,195.6 98.3,194.6 99.2,194.6 99.2,194.7 100.1,194.7 100.1,195.3 101.0,195.3 101.0,195.1 101.9,195.1 101.9,195.1 102.8,195.1 102.8,195.6 103.7,195.6 103.7,194.6 104.6,194.6 104.6,195.2 105.5,195.2 105.5,195.3 106.4,195.3 106.4,195.6 107.4,195.6 107.4,195.3 108.3,195.3 108.3,195.4 109.2,195.4 109.2,195.2 110.1,195.2 110.1,195.8 111.0,195.8 111.0,195.1 111.9,195.1 111.9,195.3 112.8,195.3 112.8,196.2 113.7,196.2 113.7,195.7 114.6,195.7 114.6,194.5 115.5,194.5 115.5,194.7 116.4,194.7 116.4,195.1 117.3,195.1 117.3,195.6 118.2,195.6 118.2,195.6 119.1,195.6 119.1,195.5 120.0,195.5 120.0,194.6 120.9,194.6 120.9,194.4 121.8,194.4 121.8,195.1 122.7,195.1 122.7,195.4 123.6,195.4 123.6,195.8 124.6,195.8 124.6,194.6 125.5,194.6 125.5,195.0 126.4,195.0 126.4,195.4 127.3,195.4 127.3,195.1 128.2,195.1 128.2,195.5 129.1,195.5 129.1,193.5 130.0,193.5 130.0,194.9 130.9,194.9 130.9,195.1 131.8,195.1 131.8,194.8 132.7,194.8 132.7,194.6 133.6,194.6 133.6,194.7 134.5,194.7 134.5,195.1 135.4,195.1 135.4,195.0 136.3,195.0 136.3,194.7 137.2,194.7 137.2,195.3 138.1,195.3 138.1,194.6 139.0,194.6 139.0,194.7 139.9,194.7 139.9,143.3 140.8,143.3 140.8,143.0 141.7,143.0 141.7,142.2 142.7,142.2 142.7,141.9 143.6,141.9 143.6,143.0 144.5,143.0 144.5,142.6 145.4,142.6 145.4,142.4 146.3,142.4 146.3,142.9 147.2,142.9 147.2,143.1 148.1,143.1 148.1,143.2 149.0,143.2 149.0,142.1 149.9,142.1 149.9,143.1 150.8,143.1 150.8,142.4 151.7,142.4 151.7,143.0 152.6,143.0 152.6,141.8 153.5,141.8 153.5,143.1 154.4,143.1 154.4,141.9 155.3,141.9 155.3,143.1 156.2,143.1 156.2,142.9 157.1,142.9 157.1,142.0 158.0,142.0 158.0,142.5 158.9,142.5 158.9,142.4 159.8,142.4 159.8,143.5 160.8,143.5 160.8,142.9 161.7,142.9 161.7,142.3 162.6,142.3 162.6,143.1 163.5,143.1 163.5,141.9 164.4,141.9 164.4,142.4 165.3,142.4 165.3,141.9 166.2,141.9 166.2,141.8 167.1,141.8 167.1,141.3 168.0,141.3 168.0,142.9 168.9,142.9 168.9,141.2 169.8,141.2 169.8,142.8 170.7,142.8 170.7,142.6 171.6,142.6 171.6,142.3 172.5,142.3 172.5,142.7 173.4,142.7 173.4,142.0 174.3,142.0 174.3,141.5 175.2,141.5 175.2,141.2 176.1,141.2 176.1,141.4 177.0,141.4 177.0,141.9 177.9,141.9 177.9,141.6 178.9,141.6 178.9,141.8 179.8,141.8 179.8,142.0 180.7,142.0 180.7,142.0 181.6,142.0 181.6,141.5 182.5,141.5 182.5,142.4 183.4,142.4 183.4,141.7 184.3,141.7 184.3,142.4 185.2,142.4 185.2,141.9 186.1,141.9 186.1,141.7 187.0,141.7 187.0,141.1 187.9,141.1 187.9,141.5 188.8,141.5 188.8,141.6 189.7,141.6 189.7,141.7 190.6,141.7 190.6,140.3 191.5,140.3 191.5,140.7 192.4,140.7 192.4,140.6 193.3,140.6 193.3,141.0 194.2,141.0 194.2,141.8 195.1,141.8 195.1,141.6 196.1,141.6 196.1,141.5 197.0,141.5 197.0,141.0 197.9,141.0 197.9,141.1 198.8,141.1 198.8,140.7 199.7,140.7 199.7,140.4 200.6,140.4 200.6,142.1 201.5,142.1 201.5,141.7 202.4,141.7 202.4,141.2 203.3,141.2 203.3,141.5 204.2,141.5 204.2,140.4 205.1,140.4 205.1,141.0 206.0,141.0 206.0,141.5 206.9,141.5 206.9,141.2 207.8,141.2 207.8,142.1 208.7,142.1 208.7,140.4 209.6,140.4 209.6,141.1 210.5,141.1 210.5,141.5 211.4,141.5 211.4,140.9 212.3,140.9 212.3,141.7 213.2,141.7 213.2,140.4 214.2,140.4 214.2,141.9 215.1,141.9 215.1,141.1 216.0,141.1 216.0,141.4 216.9,141.4 216.9,140.6 217.8,140.6 217.8,141.4 218.7,141.4 218.7,140.1 219.6,140.1 219.6,141.2 220.5,141.2 220.5,140.8 221.4,140.8 221.4,141.4 222.3,141.4 222.3,141.5 223.2,141.5 223.2,141.2 224.1,141.2 224.1,142.0 225.0,142.0 225.0,142.6 225.9,142.6 225.9,142.3 226.8,142.3 226.8,140.6 227.7,140.6 227.7,140.8 228.6,140.8 228.6,140.9 229.5,140.9 229.5,141.1 230.4,141.1 230.4,141.6 231.3,141.6 231.3,141.0 232.3,141.0 232.3,141.5 233.2,141.5 233.2,141.4 234.1,141.4 234.1,142.0 235.0,142.0 235.0,140.6 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="93.8" cy="194.6" r="3.5"><title>#5234: 1.22×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="93.8" y1="54.0" x2="93.8" y2="189.6"/>
|
||||
<circle class="nj-theme-dot" cx="93.8" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="93.8" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.9" cy="143.3" r="3.5"><title>#5283: 2.6×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.9" y1="54.0" x2="139.9" y2="138.3"/>
|
||||
<circle class="nj-theme-dot" cx="139.9" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="139.9" y="50.0" text-anchor="middle">1</text>
|
||||
<circle class="nj-charts-json-dot" cx="243.1" cy="135.2" r="3.5"><title>#5592: 2.9×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="243.1" y1="54.0" x2="243.1" y2="130.2"/>
|
||||
<circle class="nj-theme-dot" cx="243.1" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="243.1" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="265.7" cy="118.7" r="3.5"><title>#5809: 3.7×</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="266.6" cy="112.7" r="3.5"><title>#5810: 4.0×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="266.6" y1="36.0" x2="266.6" y2="107.7"/>
|
||||
<circle class="nj-theme-dot" cx="257.6" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="257.6" y="32.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-theme-dot" cx="275.6" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="275.6" y="32.0" text-anchor="middle">2</text>
|
||||
<circle class="nj-charts-json-dot" cx="299.2" cy="99.2" r="3.5"><title>#5853: 4.9×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="299.2" y1="54.0" x2="299.2" y2="94.2"/>
|
||||
<circle class="nj-theme-dot" cx="299.2" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="299.2" y="50.0" text-anchor="middle">2</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
@@ -1,28 +1,30 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-dump_canada nj-blog-tl-dump_canada-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-dump_canada">dump() canada.json: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-dump_canada-d">dump() canada.json: speedup over 3.12.0 at each of 317 commits, ending at 3.3x. Labeled steps: #5285, #5634.</desc>
|
||||
<desc id="nj-blog-tl-dump_canada-d">dump() canada.json: speedup over 3.12.0 at each of 317 commits, ending at 3.3x. Labeled steps, by theme: 6, 3.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">dump() canada.json</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="159.333" x2="330" y2="159.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="163.333">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="110.667" x2="330" y2="110.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="114.667">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">8×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="160.667" x2="330" y2="160.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="164.667">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="113.333" x2="330" y2="113.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="117.333">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">8×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.0 45.8,208.0 45.8,207.2 46.7,207.2 46.7,207.9 47.6,207.9 47.6,206.7 48.5,206.7 48.5,207.5 49.4,207.5 49.4,207.7 50.3,207.7 50.3,207.3 51.2,207.3 51.2,207.9 52.1,207.9 52.1,206.5 53.1,206.5 53.1,207.5 54.0,207.5 54.0,208.0 54.9,208.0 54.9,207.6 55.8,207.6 55.8,207.2 56.7,207.2 56.7,207.5 57.6,207.5 57.6,206.6 58.5,206.6 58.5,207.1 59.4,207.1 59.4,207.1 60.3,207.1 60.3,207.2 61.2,207.2 61.2,206.6 62.1,206.6 62.1,207.5 63.0,207.5 63.0,207.6 63.9,207.6 63.9,207.7 64.8,207.7 64.8,207.2 65.7,207.2 65.7,206.5 66.6,206.5 66.6,206.8 67.5,206.8 67.5,207.1 68.4,207.1 68.4,207.0 69.3,207.0 69.3,207.0 70.2,207.0 70.2,206.7 71.2,206.7 71.2,208.2 72.1,208.2 72.1,207.5 73.0,207.5 73.0,206.5 73.9,206.5 73.9,206.7 74.8,206.7 74.8,206.2 75.7,206.2 75.7,208.4 76.6,208.4 76.6,207.3 77.5,207.3 77.5,206.8 78.4,206.8 78.4,208.0 79.3,208.0 79.3,207.7 80.2,207.7 80.2,207.1 81.1,207.1 81.1,207.5 82.0,207.5 82.0,207.9 82.9,207.9 82.9,206.3 83.8,206.3 83.8,206.7 84.7,206.7 84.7,207.5 85.6,207.5 85.6,208.1 86.5,208.1 86.5,206.6 87.4,206.6 87.4,207.1 88.3,207.1 88.3,207.2 89.3,207.2 89.3,207.4 90.2,207.4 90.2,207.0 91.1,207.0 91.1,206.7 92.0,206.7 92.0,206.5 92.9,206.5 92.9,207.6 93.8,207.6 93.8,207.4 94.7,207.4 94.7,207.2 95.6,207.2 95.6,207.5 96.5,207.5 96.5,207.6 97.4,207.6 97.4,208.0 98.3,208.0 98.3,208.2 99.2,208.2 99.2,206.7 100.1,206.7 100.1,207.4 101.0,207.4 101.0,206.6 101.9,206.6 101.9,206.5 102.8,206.5 102.8,208.0 103.7,208.0 103.7,208.0 104.6,208.0 104.6,206.3 105.5,206.3 105.5,208.4 106.4,208.4 106.4,207.8 107.4,207.8 107.4,207.4 108.3,207.4 108.3,206.3 109.2,206.3 109.2,208.1 110.1,208.1 110.1,207.5 111.0,207.5 111.0,207.4 111.9,207.4 111.9,207.5 112.8,207.5 112.8,207.7 113.7,207.7 113.7,208.0 114.6,208.0 114.6,206.9 115.5,206.9 115.5,207.4 116.4,207.4 116.4,207.2 117.3,207.2 117.3,207.7 118.2,207.7 118.2,207.3 119.1,207.3 119.1,208.0 120.0,208.0 120.0,206.7 120.9,206.7 120.9,206.5 121.8,206.5 121.8,207.2 122.7,207.2 122.7,208.1 123.6,208.1 123.6,208.1 124.6,208.1 124.6,206.7 125.5,206.7 125.5,207.8 126.4,207.8 126.4,207.6 127.3,207.6 127.3,207.4 128.2,207.4 128.2,207.0 129.1,207.0 129.1,207.4 130.0,207.4 130.0,208.8 130.9,208.8 130.9,209.2 131.8,209.2 131.8,208.4 132.7,208.4 132.7,208.3 133.6,208.3 133.6,208.0 134.5,208.0 134.5,209.1 135.4,209.1 135.4,208.5 136.3,208.5 136.3,209.1 137.2,209.1 137.2,209.2 138.1,209.2 138.1,208.7 139.0,208.7 139.0,207.7 139.9,207.7 139.9,207.7 140.8,207.7 140.8,207.5 141.7,207.5 141.7,202.0 142.7,202.0 142.7,202.1 143.6,202.1 143.6,201.5 144.5,201.5 144.5,202.2 145.4,202.2 145.4,201.7 146.3,201.7 146.3,201.0 147.2,201.0 147.2,202.0 148.1,202.0 148.1,202.4 149.0,202.4 149.0,201.3 149.9,201.3 149.9,202.1 150.8,202.1 150.8,202.1 151.7,202.1 151.7,201.5 152.6,201.5 152.6,201.1 153.5,201.1 153.5,202.3 154.4,202.3 154.4,201.0 155.3,201.0 155.3,202.8 156.2,202.8 156.2,202.1 157.1,202.1 157.1,201.5 158.0,201.5 158.0,201.6 158.9,201.6 158.9,201.4 159.8,201.4 159.8,202.9 160.8,202.9 160.8,202.5 161.7,202.5 161.7,202.2 162.6,202.2 162.6,202.6 163.5,202.6 163.5,201.9 164.4,201.9 164.4,202.9 165.3,202.9 165.3,202.1 166.2,202.1 166.2,202.2 167.1,202.2 167.1,201.6 168.0,201.6 168.0,202.9 168.9,202.9 168.9,201.6 169.8,201.6 169.8,202.5 170.7,202.5 170.7,202.4 171.6,202.4 171.6,202.8 172.5,202.8 172.5,202.1 173.4,202.1 173.4,202.1 174.3,202.1 174.3,201.4 175.2,201.4 175.2,201.3 176.1,201.3 176.1,202.2 177.0,202.2 177.0,201.5 177.9,201.5 177.9,201.0 178.9,201.0 178.9,202.1 179.8,202.1 179.8,201.4 180.7,201.4 180.7,201.4 181.6,201.4 181.6,201.7 182.5,201.7 182.5,201.9 183.4,201.9 183.4,201.5 184.3,201.5 184.3,201.2 185.2,201.2 185.2,202.1 186.1,202.1 186.1,202.6 187.0,202.6 187.0,202.2 187.9,202.2 187.9,201.5 188.8,201.5 188.8,201.5 189.7,201.5 189.7,202.2 190.6,202.2 190.6,201.5 191.5,201.5 191.5,201.5 192.4,201.5 192.4,202.1 193.3,202.1 193.3,202.0 194.2,202.0 194.2,202.3 195.1,202.3 195.1,201.6 196.1,201.6 196.1,201.9 197.0,201.9 197.0,201.4 197.9,201.4 197.9,202.1 198.8,202.1 198.8,201.7 199.7,201.7 199.7,201.7 200.6,201.7 200.6,202.4 201.5,202.4 201.5,201.4 202.4,201.4 202.4,201.9 203.3,201.9 203.3,202.2 204.2,202.2 204.2,201.6 205.1,201.6 205.1,201.3 206.0,201.3 206.0,202.2 206.9,202.2 206.9,202.0 207.8,202.0 207.8,202.8 208.7,202.8 208.7,201.1 209.6,201.1 209.6,202.0 210.5,202.0 210.5,203.5 211.4,203.5 211.4,201.7 212.3,201.7 212.3,202.3 213.2,202.3 213.2,201.5 214.2,201.5 214.2,202.6 215.1,202.6 215.1,202.2 216.0,202.2 216.0,202.3 216.9,202.3 216.9,202.0 217.8,202.0 217.8,203.3 218.7,203.3 218.7,201.9 219.6,201.9 219.6,202.1 220.5,202.1 220.5,201.7 221.4,201.7 221.4,202.1 222.3,202.1 222.3,201.6 223.2,201.6 223.2,202.3 224.1,202.3 224.1,202.2 225.0,202.2 225.0,202.7 225.9,202.7 225.9,202.8 226.8,202.8 226.8,202.0 227.7,202.0 227.7,202.2 228.6,202.2 228.6,202.1 229.5,202.1 229.5,202.6 230.4,202.6 230.4,202.3 231.3,202.3 231.3,202.3 232.3,202.3 232.3,201.3 233.2,201.3 233.2,203.0 234.1,203.0 234.1,203.0 235.0,203.0 235.0,201.3 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="141.7" cy="202.0" r="3.5"><title>#5285: 1.09×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="141.7" y1="54.0" x2="141.7" y2="197.0"/>
|
||||
<text class="nj-charts-note" x="141.7" y="50.0" text-anchor="middle">#5285</text>
|
||||
<circle class="nj-charts-json-dot" cx="269.4" cy="128.5" r="3.5"><title>#5634: 3.1×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="269.4" y1="54.0" x2="269.4" y2="123.5"/>
|
||||
<text class="nj-charts-note" x="269.4" y="50.0" text-anchor="middle">#5634</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.0 45.8,208.0 45.8,207.2 46.7,207.2 46.7,207.9 47.6,207.9 47.6,206.7 48.5,206.7 48.5,207.5 49.4,207.5 49.4,207.7 50.3,207.7 50.3,207.3 51.2,207.3 51.2,207.9 52.1,207.9 52.1,206.6 53.1,206.6 53.1,207.5 54.0,207.5 54.0,208.0 54.9,208.0 54.9,207.6 55.8,207.6 55.8,207.2 56.7,207.2 56.7,207.5 57.6,207.5 57.6,206.6 58.5,206.6 58.5,207.1 59.4,207.1 59.4,207.1 60.3,207.1 60.3,207.2 61.2,207.2 61.2,206.6 62.1,206.6 62.1,207.5 63.0,207.5 63.0,207.6 63.9,207.6 63.9,207.7 64.8,207.7 64.8,207.2 65.7,207.2 65.7,206.5 66.6,206.5 66.6,206.8 67.5,206.8 67.5,207.1 68.4,207.1 68.4,207.0 69.3,207.0 69.3,207.1 70.2,207.1 70.2,206.7 71.2,206.7 71.2,208.2 72.1,208.2 72.1,207.5 73.0,207.5 73.0,206.6 73.9,206.6 73.9,206.7 74.8,206.7 74.8,206.3 75.7,206.3 75.7,208.4 76.6,208.4 76.6,207.3 77.5,207.3 77.5,206.8 78.4,206.8 78.4,208.0 79.3,208.0 79.3,207.8 80.2,207.8 80.2,207.1 81.1,207.1 81.1,207.5 82.0,207.5 82.0,207.9 82.9,207.9 82.9,206.3 83.8,206.3 83.8,206.8 84.7,206.8 84.7,207.5 85.6,207.5 85.6,208.1 86.5,208.1 86.5,206.6 87.4,206.6 87.4,207.2 88.3,207.2 88.3,207.2 89.3,207.2 89.3,207.4 90.2,207.4 90.2,207.0 91.1,207.0 91.1,206.7 92.0,206.7 92.0,206.5 92.9,206.5 92.9,207.6 93.8,207.6 93.8,207.4 94.7,207.4 94.7,207.2 95.6,207.2 95.6,207.5 96.5,207.5 96.5,207.6 97.4,207.6 97.4,208.0 98.3,208.0 98.3,208.2 99.2,208.2 99.2,206.7 100.1,206.7 100.1,207.4 101.0,207.4 101.0,206.7 101.9,206.7 101.9,206.6 102.8,206.6 102.8,208.0 103.7,208.0 103.7,208.0 104.6,208.0 104.6,206.3 105.5,206.3 105.5,208.3 106.4,208.3 106.4,207.8 107.4,207.8 107.4,207.4 108.3,207.4 108.3,206.3 109.2,206.3 109.2,208.1 110.1,208.1 110.1,207.5 111.0,207.5 111.0,207.4 111.9,207.4 111.9,207.5 112.8,207.5 112.8,207.7 113.7,207.7 113.7,208.0 114.6,208.0 114.6,207.0 115.5,207.0 115.5,207.5 116.4,207.5 116.4,207.2 117.3,207.2 117.3,207.7 118.2,207.7 118.2,207.3 119.1,207.3 119.1,208.0 120.0,208.0 120.0,206.7 120.9,206.7 120.9,206.6 121.8,206.6 121.8,207.2 122.7,207.2 122.7,208.1 123.6,208.1 123.6,208.1 124.6,208.1 124.6,206.7 125.5,206.7 125.5,207.8 126.4,207.8 126.4,207.6 127.3,207.6 127.3,207.4 128.2,207.4 128.2,207.1 129.1,207.1 129.1,207.5 130.0,207.5 130.0,208.8 130.9,208.8 130.9,209.2 131.8,209.2 131.8,208.4 132.7,208.4 132.7,208.3 133.6,208.3 133.6,208.0 134.5,208.0 134.5,209.0 135.4,209.0 135.4,208.5 136.3,208.5 136.3,209.1 137.2,209.1 137.2,209.2 138.1,209.2 138.1,208.6 139.0,208.6 139.0,207.7 139.9,207.7 139.9,207.7 140.8,207.7 140.8,207.5 141.7,207.5 141.7,202.2 142.7,202.2 142.7,202.3 143.6,202.3 143.6,201.7 144.5,201.7 144.5,202.3 145.4,202.3 145.4,201.9 146.3,201.9 146.3,201.2 147.2,201.2 147.2,202.1 148.1,202.1 148.1,202.6 149.0,202.6 149.0,201.5 149.9,201.5 149.9,202.3 150.8,202.3 150.8,202.3 151.7,202.3 151.7,201.7 152.6,201.7 152.6,201.3 153.5,201.3 153.5,202.5 154.4,202.5 154.4,201.1 155.3,201.1 155.3,202.9 156.2,202.9 156.2,202.2 157.1,202.2 157.1,201.7 158.0,201.7 158.0,201.7 158.9,201.7 158.9,201.6 159.8,201.6 159.8,203.0 160.8,203.0 160.8,202.7 161.7,202.7 161.7,202.4 162.6,202.4 162.6,202.8 163.5,202.8 163.5,202.1 164.4,202.1 164.4,203.1 165.3,203.1 165.3,202.3 166.2,202.3 166.2,202.3 167.1,202.3 167.1,201.8 168.0,201.8 168.0,203.1 168.9,203.1 168.9,201.8 169.8,201.8 169.8,202.6 170.7,202.6 170.7,202.6 171.6,202.6 171.6,202.9 172.5,202.9 172.5,202.3 173.4,202.3 173.4,202.3 174.3,202.3 174.3,201.6 175.2,201.6 175.2,201.5 176.1,201.5 176.1,202.4 177.0,202.4 177.0,201.7 177.9,201.7 177.9,201.2 178.9,201.2 178.9,202.2 179.8,202.2 179.8,201.6 180.7,201.6 180.7,201.6 181.6,201.6 181.6,201.8 182.5,201.8 182.5,202.1 183.4,202.1 183.4,201.7 184.3,201.7 184.3,201.4 185.2,201.4 185.2,202.2 186.1,202.2 186.1,202.7 187.0,202.7 187.0,202.4 187.9,202.4 187.9,201.7 188.8,201.7 188.8,201.7 189.7,201.7 189.7,202.3 190.6,202.3 190.6,201.6 191.5,201.6 191.5,201.7 192.4,201.7 192.4,202.2 193.3,202.2 193.3,202.2 194.2,202.2 194.2,202.4 195.1,202.4 195.1,201.7 196.1,201.7 196.1,202.1 197.0,202.1 197.0,201.6 197.9,201.6 197.9,202.2 198.8,202.2 198.8,201.9 199.7,201.9 199.7,201.9 200.6,201.9 200.6,202.5 201.5,202.5 201.5,201.6 202.4,201.6 202.4,202.1 203.3,202.1 203.3,202.3 204.2,202.3 204.2,201.8 205.1,201.8 205.1,201.5 206.0,201.5 206.0,202.3 206.9,202.3 206.9,202.2 207.8,202.2 207.8,202.9 208.7,202.9 208.7,201.3 209.6,201.3 209.6,202.2 210.5,202.2 210.5,203.6 211.4,203.6 211.4,201.9 212.3,201.9 212.3,202.4 213.2,202.4 213.2,201.7 214.2,201.7 214.2,202.7 215.1,202.7 215.1,202.3 216.0,202.3 216.0,202.5 216.9,202.5 216.9,202.1 217.8,202.1 217.8,203.4 218.7,203.4 218.7,202.1 219.6,202.1 219.6,202.3 220.5,202.3 220.5,201.9 221.4,201.9 221.4,202.3 222.3,202.3 222.3,201.7 223.2,201.7 223.2,202.4 224.1,202.4 224.1,202.3 225.0,202.3 225.0,202.9 225.9,202.9 225.9,202.9 226.8,202.9 226.8,202.2 227.7,202.2 227.7,202.4 228.6,202.4 228.6,202.2 229.5,202.2 229.5,202.7 230.4,202.7 230.4,202.5 231.3,202.5 231.3,202.5 232.3,202.5 232.3,201.5 233.2,201.5 233.2,203.1 234.1,203.1 234.1,203.2 235.0,203.2 235.0,201.5 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="141.7" cy="202.2" r="3.5"><title>#5285: 1.09×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="141.7" y1="54.0" x2="141.7" y2="197.2"/>
|
||||
<circle class="nj-theme-dot" cx="141.7" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="141.7" y="50.0" text-anchor="middle">6</text>
|
||||
<circle class="nj-charts-json-dot" cx="269.4" cy="130.7" r="3.5"><title>#5634: 3.1×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="269.4" y1="54.0" x2="269.4" y2="125.7"/>
|
||||
<circle class="nj-theme-dot" cx="269.4" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="269.4" y="50.0" text-anchor="middle">3</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.6 KiB |
@@ -1,36 +1,40 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-dump_twitter nj-blog-tl-dump_twitter-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-dump_twitter">dump() twitter.json: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-dump_twitter-d">dump() twitter.json: speedup over 3.12.0 at each of 317 commits, ending at 6.7x. Labeled steps: #5285, #5738, #5878, #5883.</desc>
|
||||
<desc id="nj-blog-tl-dump_twitter-d">dump() twitter.json: speedup over 3.12.0 at each of 317 commits, ending at 6.7x. Labeled steps, by theme: 6, 2, 2, 2.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">dump() twitter.json</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="171.5" x2="330" y2="171.5"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="175.5">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="135" x2="330" y2="135"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="139">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="98.5" x2="330" y2="98.5"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="102.5">8×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">16×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="172.5" x2="330" y2="172.5"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="176.5">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="137" x2="330" y2="137"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="141">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="101.5" x2="330" y2="101.5"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="105.5">8×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">16×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.0 45.8,208.0 45.8,207.2 46.7,207.2 46.7,207.9 47.6,207.9 47.6,206.8 48.5,206.8 48.5,208.0 49.4,208.0 49.4,207.4 50.3,207.4 50.3,207.3 51.2,207.3 51.2,208.0 52.1,208.0 52.1,206.8 53.1,206.8 53.1,207.1 54.0,207.1 54.0,208.0 54.9,208.0 54.9,207.2 55.8,207.2 55.8,207.5 56.7,207.5 56.7,206.8 57.6,206.8 57.6,206.8 58.5,206.8 58.5,207.5 59.4,207.5 59.4,207.3 60.3,207.3 60.3,207.8 61.2,207.8 61.2,206.8 62.1,206.8 62.1,207.8 63.0,207.8 63.0,207.3 63.9,207.3 63.9,208.0 64.8,208.0 64.8,207.4 65.7,207.4 65.7,207.3 66.6,207.3 66.6,206.9 67.5,206.9 67.5,207.2 68.4,207.2 68.4,207.4 69.3,207.4 69.3,207.6 70.2,207.6 70.2,207.5 71.2,207.5 71.2,207.6 72.1,207.6 72.1,207.4 73.0,207.4 73.0,207.2 73.9,207.2 73.9,207.1 74.8,207.1 74.8,207.3 75.7,207.3 75.7,207.7 76.6,207.7 76.6,207.8 77.5,207.8 77.5,206.8 78.4,206.8 78.4,207.6 79.3,207.6 79.3,207.0 80.2,207.0 80.2,206.9 81.1,206.9 81.1,207.3 82.0,207.3 82.0,207.5 82.9,207.5 82.9,206.8 83.8,206.8 83.8,207.7 84.7,207.7 84.7,207.4 85.6,207.4 85.6,207.4 86.5,207.4 86.5,207.1 87.4,207.1 87.4,207.3 88.3,207.3 88.3,207.5 89.3,207.5 89.3,207.3 90.2,207.3 90.2,207.3 91.1,207.3 91.1,206.8 92.0,206.8 92.0,207.4 92.9,207.4 92.9,207.9 93.8,207.9 93.8,207.3 94.7,207.3 94.7,206.7 95.6,206.7 95.6,207.6 96.5,207.6 96.5,207.7 97.4,207.7 97.4,208.7 98.3,208.7 98.3,208.6 99.2,208.6 99.2,208.6 100.1,208.6 100.1,209.2 101.0,209.2 101.0,208.5 101.9,208.5 101.9,208.2 102.8,208.2 102.8,209.3 103.7,209.3 103.7,208.4 104.6,208.4 104.6,208.4 105.5,208.4 105.5,209.0 106.4,209.0 106.4,209.1 107.4,209.1 107.4,208.7 108.3,208.7 108.3,208.9 109.2,208.9 109.2,208.7 110.1,208.7 110.1,209.0 111.0,209.0 111.0,208.8 111.9,208.8 111.9,208.7 112.8,208.7 112.8,209.3 113.7,209.3 113.7,208.7 114.6,208.7 114.6,208.5 115.5,208.5 115.5,208.5 116.4,208.5 116.4,208.0 117.3,208.0 117.3,208.9 118.2,208.9 118.2,208.7 119.1,208.7 119.1,209.0 120.0,209.0 120.0,208.1 120.9,208.1 120.9,208.0 121.8,208.0 121.8,208.6 122.7,208.6 122.7,208.5 123.6,208.5 123.6,209.2 124.6,209.2 124.6,208.0 125.5,208.0 125.5,209.1 126.4,209.1 126.4,209.0 127.3,209.0 127.3,208.5 128.2,208.5 128.2,209.1 129.1,209.1 129.1,209.0 130.0,209.0 130.0,208.9 130.9,208.9 130.9,208.6 131.8,208.6 131.8,208.7 132.7,208.7 132.7,208.2 133.6,208.2 133.6,209.1 134.5,209.1 134.5,209.3 135.4,209.3 135.4,209.1 136.3,209.1 136.3,209.2 137.2,209.2 137.2,209.3 138.1,209.3 138.1,208.5 139.0,208.5 139.0,208.8 139.9,208.8 139.9,209.5 140.8,209.5 140.8,208.4 141.7,208.4 141.7,145.7 142.7,145.7 142.7,146.6 143.6,146.6 143.6,146.7 144.5,146.7 144.5,145.8 145.4,145.8 145.4,145.8 146.3,145.8 146.3,146.0 147.2,146.0 147.2,146.5 148.1,146.5 148.1,146.5 149.0,146.5 149.0,145.6 149.9,145.6 149.9,146.4 150.8,146.4 150.8,145.5 151.7,145.5 151.7,145.8 152.6,145.8 152.6,145.6 153.5,145.6 153.5,146.7 154.4,146.7 154.4,145.7 155.3,145.7 155.3,146.6 156.2,146.6 156.2,146.8 157.1,146.8 157.1,146.0 158.0,146.0 158.0,146.1 158.9,146.1 158.9,146.4 159.8,146.4 159.8,146.9 160.8,146.9 160.8,146.3 161.7,146.3 161.7,146.4 162.6,146.4 162.6,146.5 163.5,146.5 163.5,146.6 164.4,146.6 164.4,147.3 165.3,147.3 165.3,147.0 166.2,147.0 166.2,146.5 167.1,146.5 167.1,146.4 168.0,146.4 168.0,147.3 168.9,147.3 168.9,146.0 169.8,146.0 169.8,147.5 170.7,147.5 170.7,147.4 171.6,147.4 171.6,147.1 172.5,147.1 172.5,146.4 173.4,146.4 173.4,147.0 174.3,147.0 174.3,146.0 175.2,146.0 175.2,146.2 176.1,146.2 176.1,146.0 177.0,146.0 177.0,146.6 177.9,146.6 177.9,146.4 178.9,146.4 178.9,146.5 179.8,146.5 179.8,146.7 180.7,146.7 180.7,146.6 181.6,146.6 181.6,146.4 182.5,146.4 182.5,147.3 183.4,147.3 183.4,146.1 184.3,146.1 184.3,147.2 185.2,147.2 185.2,146.6 186.1,146.6 186.1,146.3 187.0,146.3 187.0,146.1 187.9,146.1 187.9,146.3 188.8,146.3 188.8,146.0 189.7,146.0 189.7,146.5 190.6,146.5 190.6,145.3 191.5,145.3 191.5,146.2 192.4,146.2 192.4,146.2 193.3,146.2 193.3,146.2 194.2,146.2 194.2,146.0 195.1,146.0 195.1,146.3 196.1,146.3 196.1,145.7 197.0,145.7 197.0,145.8 197.9,145.8 197.9,145.8 198.8,145.8 198.8,145.3 199.7,145.3 199.7,145.3 200.6,145.3 200.6,146.6 201.5,146.6 201.5,146.0 202.4,146.0 202.4,146.3 203.3,146.3 203.3,146.5 204.2,146.5 204.2,146.0 205.1,146.0 205.1,146.1 206.0,146.1 206.0,146.6 206.9,146.6 206.9,146.6 207.8,146.6 207.8,146.8 208.7,146.8 208.7,146.4 209.6,146.4 209.6,146.2 210.5,146.2 210.5,146.5 211.4,146.5 211.4,145.8 212.3,145.8 212.3,146.4 213.2,146.4 213.2,145.9 214.2,145.9 214.2,146.7 215.1,146.7 215.1,146.5 216.0,146.5 216.0,146.6 216.9,146.6 216.9,147.0 217.8,147.0 217.8,147.7 218.7,147.7 218.7,147.0 219.6,147.0 219.6,147.8 220.5,147.8 220.5,146.5 221.4,146.5 221.4,146.8 222.3,146.8 222.3,147.4 223.2,147.4 223.2,147.1 224.1,147.1 224.1,147.5 225.0,147.5 225.0,147.7 225.9,147.7 225.9,147.5 226.8,147.5 226.8,146.9 227.7,146.9 227.7,147.2 228.6,147.2 228.6,146.9 229.5,146.9 229.5,147.2 230.4,147.2 230.4,147.3 231.3,147.3 231.3,147.3 232.3,147.3 232.3,146.8 233.2,146.8 233.2,147.5 234.1,147.5 234.1,147.5 235.0,147.5 235.0,146.6 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="141.7" cy="145.7" r="3.5"><title>#5285: 3.3×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="141.7" y1="54.0" x2="141.7" y2="140.7"/>
|
||||
<text class="nj-charts-note" x="141.7" y="50.0" text-anchor="middle">#5285</text>
|
||||
<circle class="nj-charts-json-dot" cx="268.5" cy="137.1" r="3.5"><title>#5738: 3.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="268.5" y1="54.0" x2="268.5" y2="132.1"/>
|
||||
<text class="nj-charts-note" x="268.5" y="50.0" text-anchor="middle">#5738</text>
|
||||
<circle class="nj-charts-json-dot" cx="301.9" cy="128.8" r="3.5"><title>#5878: 4.5×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="301.9" y1="41.0" x2="301.9" y2="123.8"/>
|
||||
<text class="nj-charts-note" x="301.9" y="37.0" text-anchor="middle">#5878</text>
|
||||
<circle class="nj-charts-json-dot" cx="308.3" cy="106.8" r="3.5"><title>#5883: 6.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="308.3" y1="28.0" x2="308.3" y2="101.8"/>
|
||||
<text class="nj-charts-note" x="308.3" y="24.0" text-anchor="middle">#5883</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.0 45.8,208.0 45.8,207.2 46.7,207.2 46.7,207.9 47.6,207.9 47.6,206.8 48.5,206.8 48.5,208.0 49.4,208.0 49.4,207.4 50.3,207.4 50.3,207.3 51.2,207.3 51.2,208.0 52.1,208.0 52.1,206.8 53.1,206.8 53.1,207.2 54.0,207.2 54.0,208.0 54.9,208.0 54.9,207.2 55.8,207.2 55.8,207.5 56.7,207.5 56.7,206.8 57.6,206.8 57.6,206.9 58.5,206.9 58.5,207.5 59.4,207.5 59.4,207.3 60.3,207.3 60.3,207.8 61.2,207.8 61.2,206.8 62.1,206.8 62.1,207.8 63.0,207.8 63.0,207.4 63.9,207.4 63.9,208.0 64.8,208.0 64.8,207.4 65.7,207.4 65.7,207.3 66.6,207.3 66.6,206.9 67.5,206.9 67.5,207.3 68.4,207.3 68.4,207.4 69.3,207.4 69.3,207.6 70.2,207.6 70.2,207.5 71.2,207.5 71.2,207.6 72.1,207.6 72.1,207.4 73.0,207.4 73.0,207.2 73.9,207.2 73.9,207.1 74.8,207.1 74.8,207.3 75.7,207.3 75.7,207.7 76.6,207.7 76.6,207.8 77.5,207.8 77.5,206.9 78.4,206.9 78.4,207.6 79.3,207.6 79.3,207.0 80.2,207.0 80.2,207.0 81.1,207.0 81.1,207.3 82.0,207.3 82.0,207.6 82.9,207.6 82.9,206.8 83.8,206.8 83.8,207.7 84.7,207.7 84.7,207.4 85.6,207.4 85.6,207.5 86.5,207.5 86.5,207.1 87.4,207.1 87.4,207.3 88.3,207.3 88.3,207.5 89.3,207.5 89.3,207.3 90.2,207.3 90.2,207.3 91.1,207.3 91.1,206.9 92.0,206.9 92.0,207.4 92.9,207.4 92.9,207.9 93.8,207.9 93.8,207.3 94.7,207.3 94.7,206.8 95.6,206.8 95.6,207.6 96.5,207.6 96.5,207.7 97.4,207.7 97.4,208.6 98.3,208.6 98.3,208.5 99.2,208.5 99.2,208.6 100.1,208.6 100.1,209.2 101.0,209.2 101.0,208.5 101.9,208.5 101.9,208.2 102.8,208.2 102.8,209.3 103.7,209.3 103.7,208.4 104.6,208.4 104.6,208.4 105.5,208.4 105.5,209.0 106.4,209.0 106.4,209.0 107.4,209.0 107.4,208.7 108.3,208.7 108.3,208.9 109.2,208.9 109.2,208.7 110.1,208.7 110.1,209.0 111.0,209.0 111.0,208.8 111.9,208.8 111.9,208.7 112.8,208.7 112.8,209.3 113.7,209.3 113.7,208.6 114.6,208.6 114.6,208.5 115.5,208.5 115.5,208.4 116.4,208.4 116.4,208.0 117.3,208.0 117.3,208.9 118.2,208.9 118.2,208.6 119.1,208.6 119.1,208.9 120.0,208.9 120.0,208.1 120.9,208.1 120.9,208.0 121.8,208.0 121.8,208.6 122.7,208.6 122.7,208.5 123.6,208.5 123.6,209.1 124.6,209.1 124.6,208.0 125.5,208.0 125.5,209.1 126.4,209.1 126.4,208.9 127.3,208.9 127.3,208.5 128.2,208.5 128.2,209.1 129.1,209.1 129.1,209.0 130.0,209.0 130.0,208.8 130.9,208.8 130.9,208.6 131.8,208.6 131.8,208.6 132.7,208.6 132.7,208.2 133.6,208.2 133.6,209.0 134.5,209.0 134.5,209.2 135.4,209.2 135.4,209.1 136.3,209.1 136.3,209.2 137.2,209.2 137.2,209.2 138.1,209.2 138.1,208.5 139.0,208.5 139.0,208.7 139.9,208.7 139.9,209.5 140.8,209.5 140.8,208.4 141.7,208.4 141.7,147.4 142.7,147.4 142.7,148.3 143.6,148.3 143.6,148.4 144.5,148.4 144.5,147.5 145.4,147.5 145.4,147.5 146.3,147.5 146.3,147.7 147.2,147.7 147.2,148.2 148.1,148.2 148.1,148.2 149.0,148.2 149.0,147.3 149.9,147.3 149.9,148.1 150.8,148.1 150.8,147.2 151.7,147.2 151.7,147.5 152.6,147.5 152.6,147.3 153.5,147.3 153.5,148.4 154.4,148.4 154.4,147.4 155.3,147.4 155.3,148.3 156.2,148.3 156.2,148.5 157.1,148.5 157.1,147.7 158.0,147.7 158.0,147.8 158.9,147.8 158.9,148.0 159.8,148.0 159.8,148.5 160.8,148.5 160.8,148.0 161.7,148.0 161.7,148.1 162.6,148.1 162.6,148.2 163.5,148.2 163.5,148.3 164.4,148.3 164.4,149.0 165.3,149.0 165.3,148.7 166.2,148.7 166.2,148.2 167.1,148.2 167.1,148.1 168.0,148.1 168.0,148.9 168.9,148.9 168.9,147.7 169.8,147.7 169.8,149.2 170.7,149.2 170.7,149.1 171.6,149.1 171.6,148.8 172.5,148.8 172.5,148.1 173.4,148.1 173.4,148.7 174.3,148.7 174.3,147.7 175.2,147.7 175.2,147.9 176.1,147.9 176.1,147.7 177.0,147.7 177.0,148.3 177.9,148.3 177.9,148.0 178.9,148.0 178.9,148.2 179.8,148.2 179.8,148.4 180.7,148.4 180.7,148.3 181.6,148.3 181.6,148.1 182.5,148.1 182.5,149.0 183.4,149.0 183.4,147.8 184.3,147.8 184.3,148.8 185.2,148.8 185.2,148.3 186.1,148.3 186.1,148.0 187.0,148.0 187.0,147.8 187.9,147.8 187.9,148.0 188.8,148.0 188.8,147.7 189.7,147.7 189.7,148.2 190.6,148.2 190.6,147.1 191.5,147.1 191.5,147.9 192.4,147.9 192.4,147.9 193.3,147.9 193.3,147.9 194.2,147.9 194.2,147.7 195.1,147.7 195.1,148.0 196.1,148.0 196.1,147.4 197.0,147.4 197.0,147.5 197.9,147.5 197.9,147.5 198.8,147.5 198.8,147.0 199.7,147.0 199.7,147.0 200.6,147.0 200.6,148.2 201.5,148.2 201.5,147.7 202.4,147.7 202.4,148.0 203.3,148.0 203.3,148.2 204.2,148.2 204.2,147.7 205.1,147.7 205.1,147.8 206.0,147.8 206.0,148.2 206.9,148.2 206.9,148.3 207.8,148.3 207.8,148.5 208.7,148.5 208.7,148.1 209.6,148.1 209.6,147.9 210.5,147.9 210.5,148.2 211.4,148.2 211.4,147.5 212.3,147.5 212.3,148.1 213.2,148.1 213.2,147.6 214.2,147.6 214.2,148.4 215.1,148.4 215.1,148.2 216.0,148.2 216.0,148.3 216.9,148.3 216.9,148.7 217.8,148.7 217.8,149.4 218.7,149.4 218.7,148.7 219.6,148.7 219.6,149.5 220.5,149.5 220.5,148.2 221.4,148.2 221.4,148.5 222.3,148.5 222.3,149.1 223.2,149.1 223.2,148.8 224.1,148.8 224.1,149.2 225.0,149.2 225.0,149.3 225.9,149.3 225.9,149.1 226.8,149.1 226.8,148.6 227.7,148.6 227.7,148.9 228.6,148.9 228.6,148.5 229.5,148.5 229.5,148.9 230.4,148.9 230.4,149.0 231.3,149.0 231.3,149.0 232.3,149.0 232.3,148.5 233.2,148.5 233.2,149.1 234.1,149.1 234.1,149.2 235.0,149.2 235.0,148.3 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="141.7" cy="147.4" r="3.5"><title>#5285: 3.3×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="141.7" y1="54.0" x2="141.7" y2="142.4"/>
|
||||
<circle class="nj-theme-dot" cx="141.7" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="141.7" y="50.0" text-anchor="middle">6</text>
|
||||
<circle class="nj-charts-json-dot" cx="268.5" cy="139.0" r="3.5"><title>#5738: 3.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="268.5" y1="54.0" x2="268.5" y2="134.0"/>
|
||||
<circle class="nj-theme-dot" cx="268.5" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="268.5" y="50.0" text-anchor="middle">2</text>
|
||||
<circle class="nj-charts-json-dot" cx="301.9" cy="131.0" r="3.5"><title>#5878: 4.5×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="301.9" y1="54.0" x2="301.9" y2="126.0"/>
|
||||
<circle class="nj-theme-dot" cx="301.9" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="301.9" y="50.0" text-anchor="middle">2</text>
|
||||
<circle class="nj-charts-json-dot" cx="308.3" cy="109.6" r="3.5"><title>#5883: 6.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="308.3" y1="36.0" x2="308.3" y2="104.6"/>
|
||||
<circle class="nj-theme-dot" cx="308.3" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="308.3" y="32.0" text-anchor="middle">2</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
@@ -1,32 +1,36 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-from_cbor_twitter nj-blog-tl-from_cbor_twitter-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-from_cbor_twitter">from_cbor() twitter: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-from_cbor_twitter-d">from_cbor() twitter: speedup over 3.12.0 at each of 317 commits, ending at 2.6x. Labeled steps: #5233, #5501, #5185, #5746.</desc>
|
||||
<desc id="nj-blog-tl-from_cbor_twitter-d">from_cbor() twitter: speedup over 3.12.0 at each of 317 commits, ending at 2.6x. Labeled steps, by theme: 1, 4, U, U.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">from_cbor() twitter</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="135" x2="330" y2="135"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="139">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="137" x2="330" y2="137"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="141">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">4×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,209.1 45.8,209.1 45.8,208.2 46.7,208.2 46.7,208.6 47.6,208.6 47.6,208.0 48.5,208.0 48.5,208.5 49.4,208.5 49.4,208.6 50.3,208.6 50.3,208.3 51.2,208.3 51.2,209.1 52.1,209.1 52.1,207.8 53.1,207.8 53.1,208.5 54.0,208.5 54.0,208.6 54.9,208.6 54.9,208.7 55.8,208.7 55.8,207.7 56.7,207.7 56.7,207.1 57.6,207.1 57.6,207.3 58.5,207.3 58.5,206.9 59.4,206.9 59.4,207.1 60.3,207.1 60.3,207.0 61.2,207.0 61.2,207.1 62.1,207.1 62.1,207.1 63.0,207.1 63.0,207.5 63.9,207.5 63.9,207.5 64.8,207.5 64.8,206.8 65.7,206.8 65.7,206.9 66.6,206.9 66.6,206.2 67.5,206.2 67.5,207.1 68.4,207.1 68.4,208.5 69.3,208.5 69.3,208.0 70.2,208.0 70.2,207.7 71.2,207.7 71.2,208.5 72.1,208.5 72.1,207.8 73.0,207.8 73.0,207.0 73.9,207.0 73.9,208.1 74.8,208.1 74.8,208.2 75.7,208.2 75.7,208.7 76.6,208.7 76.6,208.1 77.5,208.1 77.5,207.2 78.4,207.2 78.4,208.3 79.3,208.3 79.3,207.4 80.2,207.4 80.2,207.9 81.1,207.9 81.1,207.7 82.0,207.7 82.0,208.7 82.9,208.7 82.9,207.3 83.8,207.3 83.8,207.9 84.7,207.9 84.7,208.4 85.6,208.4 85.6,208.5 86.5,208.5 86.5,208.0 87.4,208.0 87.4,207.0 88.3,207.0 88.3,208.1 89.3,208.1 89.3,208.1 90.2,208.1 90.2,207.8 91.1,207.8 91.1,207.9 92.0,207.9 92.0,207.9 92.9,207.9 92.9,208.7 93.8,208.7 93.8,208.1 94.7,208.1 94.7,167.8 95.6,167.8 95.6,169.3 96.5,169.3 96.5,168.9 97.4,168.9 97.4,167.9 98.3,167.9 98.3,168.6 99.2,168.6 99.2,168.0 100.1,168.0 100.1,169.0 101.0,169.0 101.0,167.7 101.9,167.7 101.9,166.7 102.8,166.7 102.8,169.3 103.7,169.3 103.7,168.4 104.6,168.4 104.6,168.6 105.5,168.6 105.5,171.9 106.4,171.9 106.4,169.4 107.4,169.4 107.4,169.3 108.3,169.3 108.3,169.1 109.2,169.1 109.2,169.2 110.1,169.2 110.1,169.7 111.0,169.7 111.0,169.4 111.9,169.4 111.9,169.3 112.8,169.3 112.8,170.1 113.7,170.1 113.7,169.2 114.6,169.2 114.6,167.5 115.5,167.5 115.5,167.8 116.4,167.8 116.4,167.7 117.3,167.7 117.3,169.4 118.2,169.4 118.2,168.1 119.1,168.1 119.1,168.7 120.0,168.7 120.0,167.1 120.9,167.1 120.9,167.2 121.8,167.2 121.8,168.8 122.7,168.8 122.7,169.2 123.6,169.2 123.6,169.4 124.6,169.4 124.6,168.1 125.5,168.1 125.5,169.4 126.4,169.4 126.4,169.0 127.3,169.0 127.3,168.9 128.2,168.9 128.2,168.9 129.1,168.9 129.1,168.6 130.0,168.6 130.0,168.9 130.9,168.9 130.9,168.1 131.8,168.1 131.8,168.5 132.7,168.5 132.7,168.9 133.6,168.9 133.6,168.9 134.5,168.9 134.5,169.4 135.4,169.4 135.4,169.7 136.3,169.7 136.3,169.4 137.2,169.4 137.2,169.7 138.1,169.7 138.1,168.1 139.0,168.1 139.0,126.4 139.9,126.4 139.9,118.6 140.8,118.6 140.8,118.0 141.7,118.0 141.7,118.3 142.7,118.3 142.7,118.5 143.6,118.5 143.6,117.8 144.5,117.8 144.5,113.9 145.4,113.9 145.4,114.9 146.3,114.9 146.3,114.8 147.2,114.8 147.2,115.4 148.1,115.4 148.1,115.8 149.0,115.8 149.0,115.5 149.9,115.5 149.9,117.6 150.8,117.6 150.8,116.4 151.7,116.4 151.7,117.1 152.6,117.1 152.6,116.5 153.5,116.5 153.5,118.5 154.4,118.5 154.4,116.0 155.3,116.0 155.3,118.7 156.2,118.7 156.2,117.6 157.1,117.6 157.1,115.9 158.0,115.9 158.0,116.8 158.9,116.8 158.9,116.5 159.8,116.5 159.8,117.7 160.8,117.7 160.8,116.5 161.7,116.5 161.7,116.9 162.6,116.9 162.6,117.3 163.5,117.3 163.5,117.9 164.4,117.9 164.4,118.2 165.3,118.2 165.3,117.1 166.2,117.1 166.2,116.3 167.1,116.3 167.1,115.9 168.0,115.9 168.0,117.7 168.9,117.7 168.9,116.9 169.8,116.9 169.8,117.4 170.7,117.4 170.7,117.2 171.6,117.2 171.6,117.3 172.5,117.3 172.5,116.7 173.4,116.7 173.4,117.0 174.3,117.0 174.3,115.5 175.2,115.5 175.2,148.6 176.1,148.6 176.1,148.9 177.0,148.9 177.0,149.0 177.9,149.0 177.9,149.7 178.9,149.7 178.9,149.8 179.8,149.8 179.8,149.1 180.7,149.1 180.7,150.6 181.6,150.6 181.6,150.2 182.5,150.2 182.5,150.9 183.4,150.9 183.4,149.0 184.3,149.0 184.3,151.3 185.2,151.3 185.2,152.7 186.1,152.7 186.1,151.3 187.0,151.3 187.0,151.3 187.9,151.3 187.9,152.0 188.8,152.0 188.8,150.1 189.7,150.1 189.7,152.3 190.6,152.3 190.6,150.0 191.5,150.0 191.5,151.0 192.4,151.0 192.4,152.0 193.3,152.0 193.3,150.2 194.2,150.2 194.2,151.2 195.1,151.2 195.1,152.1 196.1,152.1 196.1,151.2 197.0,151.2 197.0,150.9 197.9,150.9 197.9,151.2 198.8,151.2 198.8,150.0 199.7,150.0 199.7,151.6 200.6,151.6 200.6,153.1 201.5,153.1 201.5,150.5 202.4,150.5 202.4,151.4 203.3,151.4 203.3,152.4 204.2,152.4 204.2,151.5 205.1,151.5 205.1,151.1 206.0,151.1 206.0,152.5 206.9,152.5 206.9,152.5 207.8,152.5 207.8,152.8 208.7,152.8 208.7,151.0 209.6,151.0 209.6,152.8 210.5,152.8 210.5,152.6 211.4,152.6 211.4,150.3 212.3,150.3 212.3,152.5 213.2,152.5 213.2,151.5 214.2,151.5 214.2,150.7 215.1,150.7 215.1,152.2 216.0,152.2 216.0,152.3 216.9,152.3 216.9,152.4 217.8,152.4 217.8,154.0 218.7,154.0 218.7,151.8 219.6,151.8 219.6,153.9 220.5,153.9 220.5,151.2 221.4,151.2 221.4,152.5 222.3,152.5 222.3,150.7 223.2,150.7 223.2,151.6 224.1,151.6 224.1,151.9 225.0,151.9 225.0,152.1 225.9,152.1 225.9,153.1 226.8,153.1 226.8,151.2 227.7,151.2 227.7,153.9 228.6,153.9 228.6,151.0 229.5,151.0 229.5,151.8 230.4,151.8 230.4,151.7 231.3,151.7 231.3,153.0 232.3,153.0 232.3,151.0 233.2,151.0 233.2,151.5 234.1,151.5 234.1,152.8 235.0,152.8 235.0,119.6 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="94.7" cy="167.8" r="3.5"><title>#5233: 1.47×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="94.7" y1="54.0" x2="94.7" y2="162.8"/>
|
||||
<text class="nj-charts-note" x="94.7" y="50.0" text-anchor="middle">#5233</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.0" cy="126.4" r="3.5"><title>#5501: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.0" y1="54.0" x2="139.0" y2="121.4"/>
|
||||
<text class="nj-charts-note" x="139.0" y="50.0" text-anchor="middle">#5501</text>
|
||||
<circle class="nj-charts-json-dot" cx="175.2" cy="148.6" r="3.5"><title>#5185: 1.76×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="175.2" y1="41.0" x2="175.2" y2="143.6"/>
|
||||
<text class="nj-charts-note" x="175.2" y="37.0" text-anchor="middle">#5185</text>
|
||||
<circle class="nj-charts-json-dot" cx="235.0" cy="119.6" r="3.5"><title>#5746: 2.3×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="235.0" y1="54.0" x2="235.0" y2="114.6"/>
|
||||
<text class="nj-charts-note" x="235.0" y="50.0" text-anchor="middle">#5746</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,209.1 45.8,209.1 45.8,208.2 46.7,208.2 46.7,208.6 47.6,208.6 47.6,208.0 48.5,208.0 48.5,208.4 49.4,208.4 49.4,208.6 50.3,208.6 50.3,208.3 51.2,208.3 51.2,209.1 52.1,209.1 52.1,207.8 53.1,207.8 53.1,208.5 54.0,208.5 54.0,208.6 54.9,208.6 54.9,208.6 55.8,208.6 55.8,207.7 56.7,207.7 56.7,207.1 57.6,207.1 57.6,207.3 58.5,207.3 58.5,206.9 59.4,206.9 59.4,207.1 60.3,207.1 60.3,207.0 61.2,207.0 61.2,207.1 62.1,207.1 62.1,207.1 63.0,207.1 63.0,207.5 63.9,207.5 63.9,207.5 64.8,207.5 64.8,206.9 65.7,206.9 65.7,207.0 66.6,207.0 66.6,206.2 67.5,206.2 67.5,207.1 68.4,207.1 68.4,208.5 69.3,208.5 69.3,208.0 70.2,208.0 70.2,207.8 71.2,207.8 71.2,208.5 72.1,208.5 72.1,207.8 73.0,207.8 73.0,207.0 73.9,207.0 73.9,208.1 74.8,208.1 74.8,208.2 75.7,208.2 75.7,208.6 76.6,208.6 76.6,208.1 77.5,208.1 77.5,207.2 78.4,207.2 78.4,208.3 79.3,208.3 79.3,207.4 80.2,207.4 80.2,207.9 81.1,207.9 81.1,207.7 82.0,207.7 82.0,208.6 82.9,208.6 82.9,207.3 83.8,207.3 83.8,207.9 84.7,207.9 84.7,208.4 85.6,208.4 85.6,208.5 86.5,208.5 86.5,208.0 87.4,208.0 87.4,207.1 88.3,207.1 88.3,208.1 89.3,208.1 89.3,208.1 90.2,208.1 90.2,207.8 91.1,207.8 91.1,207.9 92.0,207.9 92.0,207.9 92.9,207.9 92.9,208.7 93.8,208.7 93.8,208.1 94.7,208.1 94.7,168.9 95.6,168.9 95.6,170.3 96.5,170.3 96.5,169.9 97.4,169.9 97.4,169.0 98.3,169.0 98.3,169.6 99.2,169.6 99.2,169.1 100.1,169.1 100.1,170.1 101.0,170.1 101.0,168.8 101.9,168.8 101.9,167.9 102.8,167.9 102.8,170.4 103.7,170.4 103.7,169.5 104.6,169.5 104.6,169.7 105.5,169.7 105.5,172.9 106.4,172.9 106.4,170.5 107.4,170.5 107.4,170.4 108.3,170.4 108.3,170.1 109.2,170.1 109.2,170.2 110.1,170.2 110.1,170.7 111.0,170.7 111.0,170.5 111.9,170.5 111.9,170.4 112.8,170.4 112.8,171.1 113.7,171.1 113.7,170.2 114.6,170.2 114.6,168.6 115.5,168.6 115.5,168.9 116.4,168.9 116.4,168.8 117.3,168.8 117.3,170.5 118.2,170.5 118.2,169.2 119.1,169.2 119.1,169.8 120.0,169.8 120.0,168.2 120.9,168.2 120.9,168.3 121.8,168.3 121.8,169.9 122.7,169.9 122.7,170.3 123.6,170.3 123.6,170.5 124.6,170.5 124.6,169.2 125.5,169.2 125.5,170.5 126.4,170.5 126.4,170.1 127.3,170.1 127.3,170.0 128.2,170.0 128.2,170.0 129.1,170.0 129.1,169.7 130.0,169.7 130.0,169.9 130.9,169.9 130.9,169.2 131.8,169.2 131.8,169.6 132.7,169.6 132.7,170.0 133.6,170.0 133.6,170.0 134.5,170.0 134.5,170.5 135.4,170.5 135.4,170.8 136.3,170.8 136.3,170.5 137.2,170.5 137.2,170.8 138.1,170.8 138.1,169.2 139.0,169.2 139.0,128.6 139.9,128.6 139.9,121.0 140.8,121.0 140.8,120.5 141.7,120.5 141.7,120.8 142.7,120.8 142.7,120.9 143.6,120.9 143.6,120.2 144.5,120.2 144.5,116.5 145.4,116.5 145.4,117.5 146.3,117.5 146.3,117.4 147.2,117.4 147.2,118.0 148.1,118.0 148.1,118.3 149.0,118.3 149.0,118.0 149.9,118.0 149.9,120.1 150.8,120.1 150.8,118.9 151.7,118.9 151.7,119.6 152.6,119.6 152.6,119.0 153.5,119.0 153.5,120.9 154.4,120.9 154.4,118.6 155.3,118.6 155.3,121.1 156.2,121.1 156.2,120.1 157.1,120.1 157.1,118.4 158.0,118.4 158.0,119.3 158.9,119.3 158.9,119.0 159.8,119.0 159.8,120.2 160.8,120.2 160.8,119.0 161.7,119.0 161.7,119.4 162.6,119.4 162.6,119.8 163.5,119.8 163.5,120.4 164.4,120.4 164.4,120.6 165.3,120.6 165.3,119.6 166.2,119.6 166.2,118.8 167.1,118.8 167.1,118.4 168.0,118.4 168.0,120.2 168.9,120.2 168.9,119.3 169.8,119.3 169.8,119.9 170.7,119.9 170.7,119.6 171.6,119.6 171.6,119.7 172.5,119.7 172.5,119.2 173.4,119.2 173.4,119.5 174.3,119.5 174.3,118.0 175.2,118.0 175.2,150.3 176.1,150.3 176.1,150.5 177.0,150.5 177.0,150.6 177.9,150.6 177.9,151.3 178.9,151.3 178.9,151.4 179.8,151.4 179.8,150.7 180.7,150.7 180.7,152.1 181.6,152.1 181.6,151.8 182.5,151.8 182.5,152.4 183.4,152.4 183.4,150.6 184.3,150.6 184.3,152.8 185.2,152.8 185.2,154.2 186.1,154.2 186.1,152.8 187.0,152.8 187.0,152.9 187.9,152.9 187.9,153.6 188.8,153.6 188.8,151.7 189.7,151.7 189.7,153.8 190.6,153.8 190.6,151.6 191.5,151.6 191.5,152.6 192.4,152.6 192.4,153.5 193.3,153.5 193.3,151.8 194.2,151.8 194.2,152.7 195.1,152.7 195.1,153.6 196.1,153.6 196.1,152.7 197.0,152.7 197.0,152.5 197.9,152.5 197.9,152.7 198.8,152.7 198.8,151.6 199.7,151.6 199.7,153.2 200.6,153.2 200.6,154.6 201.5,154.6 201.5,152.1 202.4,152.1 202.4,152.9 203.3,152.9 203.3,153.9 204.2,153.9 204.2,153.0 205.1,153.0 205.1,152.6 206.0,152.6 206.0,154.0 206.9,154.0 206.9,154.0 207.8,154.0 207.8,154.3 208.7,154.3 208.7,152.5 209.6,152.5 209.6,154.4 210.5,154.4 210.5,154.2 211.4,154.2 211.4,151.8 212.3,151.8 212.3,154.0 213.2,154.0 213.2,153.0 214.2,153.0 214.2,152.2 215.1,152.2 215.1,153.7 216.0,153.7 216.0,153.8 216.9,153.8 216.9,153.9 217.8,153.9 217.8,155.5 218.7,155.5 218.7,153.4 219.6,153.4 219.6,155.4 220.5,155.4 220.5,152.8 221.4,152.8 221.4,154.0 222.3,154.0 222.3,152.3 223.2,152.3 223.2,153.2 224.1,153.2 224.1,153.5 225.0,153.5 225.0,153.6 225.9,153.6 225.9,154.6 226.8,154.6 226.8,152.7 227.7,152.7 227.7,155.4 228.6,155.4 228.6,152.5 229.5,152.5 229.5,153.3 230.4,153.3 230.4,153.3 231.3,153.3 231.3,154.5 232.3,154.5 232.3,152.6 233.2,152.6 233.2,153.0 234.1,153.0 234.1,154.3 235.0,154.3 235.0,122.0 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="94.7" cy="168.9" r="3.5"><title>#5233: 1.47×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="94.7" y1="54.0" x2="94.7" y2="163.9"/>
|
||||
<circle class="nj-theme-dot" cx="94.7" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="94.7" y="50.0" text-anchor="middle">1</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.0" cy="128.6" r="3.5"><title>#5501: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.0" y1="54.0" x2="139.0" y2="123.6"/>
|
||||
<circle class="nj-theme-dot" cx="139.0" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="139.0" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="175.2" cy="150.3" r="3.5"><title>#5185: 1.76×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="175.2" y1="54.0" x2="175.2" y2="145.3"/>
|
||||
<circle class="nj-theme-dot nj-theme-dot--other" cx="175.2" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="175.2" y="50.0" text-anchor="middle">U</text>
|
||||
<circle class="nj-charts-json-dot" cx="235.0" cy="122.0" r="3.5"><title>#5746: 2.3×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="235.0" y1="54.0" x2="235.0" y2="117.0"/>
|
||||
<circle class="nj-theme-dot nj-theme-dot--other" cx="235.0" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="235.0" y="50.0" text-anchor="middle">U</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
@@ -1,38 +1,44 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-parse_canada nj-blog-tl-parse_canada-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-parse_canada">parse() canada.json: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-parse_canada-d">parse() canada.json: speedup over 3.12.0 at each of 317 commits, ending at 2.8x. Labeled steps: #5234, #5283, #5617, #5738, #5851, #5882.</desc>
|
||||
<desc id="nj-blog-tl-parse_canada-d">parse() canada.json: speedup over 3.12.0 at each of 317 commits, ending at 2.8x. Labeled steps, by theme: 4, 1, 3, 3, 3, 4.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">parse() canada.json</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="135" x2="330" y2="135"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="139">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="137" x2="330" y2="137"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="141">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">4×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.2 45.8,208.2 45.8,208.1 46.7,208.1 46.7,207.7 47.6,207.7 47.6,207.2 48.5,207.2 48.5,208.0 49.4,208.0 49.4,208.2 50.3,208.2 50.3,207.8 51.2,207.8 51.2,208.5 52.1,208.5 52.1,207.3 53.1,207.3 53.1,208.0 54.0,208.0 54.0,209.2 54.9,209.2 54.9,208.5 55.8,208.5 55.8,208.1 56.7,208.1 56.7,207.7 57.6,207.7 57.6,209.8 58.5,209.8 58.5,208.6 59.4,208.6 59.4,208.1 60.3,208.1 60.3,208.1 61.2,208.1 61.2,207.0 62.1,207.0 62.1,207.8 63.0,207.8 63.0,207.6 63.9,207.6 63.9,208.1 64.8,208.1 64.8,208.4 65.7,208.4 65.7,207.7 66.6,207.7 66.6,207.4 67.5,207.4 67.5,208.3 68.4,208.3 68.4,207.3 69.3,207.3 69.3,207.8 70.2,207.8 70.2,207.9 71.2,207.9 71.2,207.9 72.1,207.9 72.1,207.4 73.0,207.4 73.0,207.5 73.9,207.5 73.9,208.1 74.8,208.1 74.8,208.1 75.7,208.1 75.7,207.9 76.6,207.9 76.6,207.8 77.5,207.8 77.5,207.0 78.4,207.0 78.4,207.6 79.3,207.6 79.3,207.8 80.2,207.8 80.2,207.3 81.1,207.3 81.1,207.6 82.0,207.6 82.0,208.6 82.9,208.6 82.9,206.5 83.8,206.5 83.8,208.0 84.7,208.0 84.7,208.7 85.6,208.7 85.6,208.0 86.5,208.0 86.5,207.7 87.4,207.7 87.4,208.4 88.3,208.4 88.3,207.9 89.3,207.9 89.3,207.5 90.2,207.5 90.2,207.9 91.1,207.9 91.1,207.4 92.0,207.4 92.0,207.5 92.9,207.5 92.9,208.5 93.8,208.5 93.8,197.2 94.7,197.2 94.7,197.7 95.6,197.7 95.6,196.5 96.5,196.5 96.5,196.7 97.4,196.7 97.4,197.5 98.3,197.5 98.3,195.7 99.2,195.7 99.2,197.0 100.1,197.0 100.1,197.8 101.0,197.8 101.0,197.1 101.9,197.1 101.9,196.7 102.8,196.7 102.8,197.2 103.7,197.2 103.7,197.0 104.6,197.0 104.6,197.4 105.5,197.4 105.5,197.4 106.4,197.4 106.4,197.3 107.4,197.3 107.4,196.6 108.3,196.6 108.3,197.6 109.2,197.6 109.2,197.6 110.1,197.6 110.1,197.3 111.0,197.3 111.0,197.3 111.9,197.3 111.9,197.3 112.8,197.3 112.8,197.8 113.7,197.8 113.7,197.7 114.6,197.7 114.6,195.0 115.5,195.0 115.5,196.3 116.4,196.3 116.4,197.6 117.3,197.6 117.3,196.7 118.2,196.7 118.2,196.0 119.1,196.0 119.1,196.5 120.0,196.5 120.0,196.2 120.9,196.2 120.9,196.3 121.8,196.3 121.8,197.4 122.7,197.4 122.7,197.3 123.6,197.3 123.6,197.8 124.6,197.8 124.6,195.5 125.5,195.5 125.5,197.2 126.4,197.2 126.4,197.3 127.3,197.3 127.3,196.4 128.2,196.4 128.2,196.7 129.1,196.7 129.1,197.7 130.0,197.7 130.0,196.7 130.9,196.7 130.9,196.9 131.8,196.9 131.8,196.3 132.7,196.3 132.7,196.7 133.6,196.7 133.6,196.9 134.5,196.9 134.5,197.3 135.4,197.3 135.4,197.5 136.3,197.5 136.3,196.9 137.2,196.9 137.2,197.3 138.1,197.3 138.1,197.0 139.0,197.0 139.0,196.7 139.9,196.7 139.9,167.5 140.8,167.5 140.8,168.6 141.7,168.6 141.7,169.1 142.7,169.1 142.7,167.8 143.6,167.8 143.6,167.2 144.5,167.2 144.5,168.9 145.4,168.9 145.4,167.6 146.3,167.6 146.3,167.2 147.2,167.2 147.2,168.6 148.1,168.6 148.1,169.8 149.0,169.8 149.0,167.0 149.9,167.0 149.9,169.1 150.8,169.1 150.8,168.0 151.7,168.0 151.7,169.0 152.6,169.0 152.6,167.3 153.5,167.3 153.5,168.7 154.4,168.7 154.4,169.0 155.3,169.0 155.3,168.7 156.2,168.7 156.2,168.0 157.1,168.0 157.1,166.0 158.0,166.0 158.0,168.7 158.9,168.7 158.9,167.5 159.8,167.5 159.8,169.2 160.8,169.2 160.8,168.7 161.7,168.7 161.7,167.6 162.6,167.6 162.6,168.2 163.5,168.2 163.5,171.3 164.4,171.3 164.4,170.2 165.3,170.2 165.3,168.0 166.2,168.0 166.2,166.7 167.1,166.7 167.1,168.2 168.0,168.2 168.0,168.0 168.9,168.0 168.9,167.4 169.8,167.4 169.8,167.6 170.7,167.6 170.7,167.5 171.6,167.5 171.6,167.9 172.5,167.9 172.5,167.4 173.4,167.4 173.4,169.8 174.3,169.8 174.3,168.8 175.2,168.8 175.2,166.9 176.1,166.9 176.1,167.7 177.0,167.7 177.0,167.4 177.9,167.4 177.9,167.3 178.9,167.3 178.9,168.8 179.8,168.8 179.8,168.0 180.7,168.0 180.7,167.4 181.6,167.4 181.6,167.5 182.5,167.5 182.5,168.3 183.4,168.3 183.4,168.0 184.3,168.0 184.3,169.1 185.2,169.1 185.2,177.1 186.1,177.1 186.1,176.5 187.0,176.5 187.0,166.6 187.9,166.6 187.9,167.4 188.8,167.4 188.8,167.6 189.7,167.6 189.7,167.4 190.6,167.4 190.6,167.7 191.5,167.7 191.5,166.9 192.4,166.9 192.4,167.1 193.3,167.1 193.3,166.5 194.2,166.5 194.2,166.3 195.1,166.3 195.1,167.0 196.1,167.0 196.1,167.2 197.0,167.2 197.0,167.0 197.9,167.0 197.9,167.0 198.8,167.0 198.8,166.4 199.7,166.4 199.7,165.4 200.6,165.4 200.6,168.1 201.5,168.1 201.5,167.5 202.4,167.5 202.4,167.3 203.3,167.3 203.3,167.0 204.2,167.0 204.2,166.2 205.1,166.2 205.1,166.8 206.0,166.8 206.0,167.1 206.9,167.1 206.9,167.4 207.8,167.4 207.8,167.9 208.7,167.9 208.7,165.4 209.6,165.4 209.6,168.3 210.5,168.3 210.5,168.2 211.4,168.2 211.4,166.1 212.3,166.1 212.3,167.4 213.2,167.4 213.2,166.0 214.2,166.0 214.2,168.3 215.1,168.3 215.1,167.8 216.0,167.8 216.0,166.3 216.9,166.3 216.9,167.3 217.8,167.3 217.8,167.3 218.7,167.3 218.7,165.8 219.6,165.8 219.6,167.6 220.5,167.6 220.5,164.5 221.4,164.5 221.4,165.8 222.3,165.8 222.3,165.4 223.2,165.4 223.2,166.3 224.1,166.3 224.1,166.5 225.0,166.5 225.0,166.0 225.9,166.0 225.9,166.2 226.8,166.2 226.8,165.4 227.7,165.4 227.7,165.0 228.6,165.0 228.6,167.3 229.5,167.3 229.5,166.0 230.4,166.0 230.4,165.5 231.3,165.5 231.3,165.3 232.3,165.3 232.3,164.9 233.2,164.9 233.2,166.2 234.1,166.2 234.1,166.1 235.0,166.1 235.0,166.1 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="93.8" cy="197.2" r="3.5"><title>#5234: 1.11×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="93.8" y1="54.0" x2="93.8" y2="192.2"/>
|
||||
<text class="nj-charts-note" x="93.8" y="50.0" text-anchor="middle">#5234</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.9" cy="167.5" r="3.5"><title>#5283: 1.47×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.9" y1="54.0" x2="139.9" y2="162.5"/>
|
||||
<text class="nj-charts-note" x="139.9" y="50.0" text-anchor="middle">#5283</text>
|
||||
<circle class="nj-charts-json-dot" cx="187.0" cy="166.6" r="3.5"><title>#5617: 1.48×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="187.0" y1="54.0" x2="187.0" y2="161.6"/>
|
||||
<text class="nj-charts-note" x="187.0" y="50.0" text-anchor="middle">#5617</text>
|
||||
<circle class="nj-charts-json-dot" cx="268.5" cy="137.9" r="3.5"><title>#5738: 1.95×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="268.5" y1="54.0" x2="268.5" y2="132.9"/>
|
||||
<text class="nj-charts-note" x="268.5" y="50.0" text-anchor="middle">#5738</text>
|
||||
<circle class="nj-charts-json-dot" cx="297.4" cy="125.1" r="3.5"><title>#5851: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="297.4" y1="41.0" x2="297.4" y2="120.1"/>
|
||||
<text class="nj-charts-note" x="297.4" y="37.0" text-anchor="middle">#5851</text>
|
||||
<circle class="nj-charts-json-dot" cx="312.8" cy="99.2" r="3.5"><title>#5882: 2.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="312.8" y1="54.0" x2="312.8" y2="94.2"/>
|
||||
<text class="nj-charts-note" x="312.0" y="50.0" text-anchor="middle">#5882</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.2 45.8,208.2 45.8,208.1 46.7,208.1 46.7,207.7 47.6,207.7 47.6,207.2 48.5,207.2 48.5,208.0 49.4,208.0 49.4,208.2 50.3,208.2 50.3,207.8 51.2,207.8 51.2,208.5 52.1,208.5 52.1,207.3 53.1,207.3 53.1,208.0 54.0,208.0 54.0,209.1 54.9,209.1 54.9,208.5 55.8,208.5 55.8,208.1 56.7,208.1 56.7,207.7 57.6,207.7 57.6,209.8 58.5,209.8 58.5,208.6 59.4,208.6 59.4,208.1 60.3,208.1 60.3,208.1 61.2,208.1 61.2,207.0 62.1,207.0 62.1,207.8 63.0,207.8 63.0,207.6 63.9,207.6 63.9,208.1 64.8,208.1 64.8,208.4 65.7,208.4 65.7,207.8 66.6,207.8 66.6,207.4 67.5,207.4 67.5,208.3 68.4,208.3 68.4,207.3 69.3,207.3 69.3,207.8 70.2,207.8 70.2,207.9 71.2,207.9 71.2,207.9 72.1,207.9 72.1,207.5 73.0,207.5 73.0,207.5 73.9,207.5 73.9,208.1 74.8,208.1 74.8,208.1 75.7,208.1 75.7,207.9 76.6,207.9 76.6,207.8 77.5,207.8 77.5,207.1 78.4,207.1 78.4,207.6 79.3,207.6 79.3,207.8 80.2,207.8 80.2,207.3 81.1,207.3 81.1,207.6 82.0,207.6 82.0,208.6 82.9,208.6 82.9,206.5 83.8,206.5 83.8,208.0 84.7,208.0 84.7,208.7 85.6,208.7 85.6,208.0 86.5,208.0 86.5,207.7 87.4,207.7 87.4,208.4 88.3,208.4 88.3,207.9 89.3,207.9 89.3,207.5 90.2,207.5 90.2,207.9 91.1,207.9 91.1,207.4 92.0,207.4 92.0,207.5 92.9,207.5 92.9,208.5 93.8,208.5 93.8,197.5 94.7,197.5 94.7,197.9 95.6,197.9 95.6,196.9 96.5,196.9 96.5,197.0 97.4,197.0 97.4,197.7 98.3,197.7 98.3,196.0 99.2,196.0 99.2,197.3 100.1,197.3 100.1,198.1 101.0,198.1 101.0,197.4 101.9,197.4 101.9,197.0 102.8,197.0 102.8,197.5 103.7,197.5 103.7,197.3 104.6,197.3 104.6,197.7 105.5,197.7 105.5,197.7 106.4,197.7 106.4,197.6 107.4,197.6 107.4,196.9 108.3,196.9 108.3,197.9 109.2,197.9 109.2,197.9 110.1,197.9 110.1,197.6 111.0,197.6 111.0,197.6 111.9,197.6 111.9,197.6 112.8,197.6 112.8,198.1 113.7,198.1 113.7,198.0 114.6,198.0 114.6,195.3 115.5,195.3 115.5,196.6 116.4,196.6 116.4,197.9 117.3,197.9 117.3,197.0 118.2,197.0 118.2,196.3 119.1,196.3 119.1,196.8 120.0,196.8 120.0,196.6 120.9,196.6 120.9,196.6 121.8,196.6 121.8,197.7 122.7,197.7 122.7,197.5 123.6,197.5 123.6,198.1 124.6,198.1 124.6,195.9 125.5,195.9 125.5,197.5 126.4,197.5 126.4,197.6 127.3,197.6 127.3,196.7 128.2,196.7 128.2,197.0 129.1,197.0 129.1,198.0 130.0,198.0 130.0,197.0 130.9,197.0 130.9,197.2 131.8,197.2 131.8,196.6 132.7,196.6 132.7,197.0 133.6,197.0 133.6,197.2 134.5,197.2 134.5,197.6 135.4,197.6 135.4,197.8 136.3,197.8 136.3,197.2 137.2,197.2 137.2,197.6 138.1,197.6 138.1,197.3 139.0,197.3 139.0,197.0 139.9,197.0 139.9,168.6 140.8,168.6 140.8,169.7 141.7,169.7 141.7,170.1 142.7,170.1 142.7,168.9 143.6,168.9 143.6,168.3 144.5,168.3 144.5,169.9 145.4,169.9 145.4,168.7 146.3,168.7 146.3,168.3 147.2,168.3 147.2,169.7 148.1,169.7 148.1,170.9 149.0,170.9 149.0,168.1 149.9,168.1 149.9,170.2 150.8,170.2 150.8,169.1 151.7,169.1 151.7,170.1 152.6,170.1 152.6,168.5 153.5,168.5 153.5,169.7 154.4,169.7 154.4,170.1 155.3,170.1 155.3,169.8 156.2,169.8 156.2,169.1 157.1,169.1 157.1,167.2 158.0,167.2 158.0,169.7 158.9,169.7 158.9,168.6 159.8,168.6 159.8,170.3 160.8,170.3 160.8,169.7 161.7,169.7 161.7,168.7 162.6,168.7 162.6,169.3 163.5,169.3 163.5,172.3 164.4,172.3 164.4,171.2 165.3,171.2 165.3,169.1 166.2,169.1 166.2,167.8 167.1,167.8 167.1,169.3 168.0,169.3 168.0,169.1 168.9,169.1 168.9,168.5 169.8,168.5 169.8,168.7 170.7,168.7 170.7,168.6 171.6,168.6 171.6,169.0 172.5,169.0 172.5,168.5 173.4,168.5 173.4,170.9 174.3,170.9 174.3,169.9 175.2,169.9 175.2,168.0 176.1,168.0 176.1,168.8 177.0,168.8 177.0,168.5 177.9,168.5 177.9,168.5 178.9,168.5 178.9,169.9 179.8,169.9 179.8,169.1 180.7,169.1 180.7,168.6 181.6,168.6 181.6,168.6 182.5,168.6 182.5,169.4 183.4,169.4 183.4,169.1 184.3,169.1 184.3,170.2 185.2,170.2 185.2,178.0 186.1,178.0 186.1,177.3 187.0,177.3 187.0,167.7 187.9,167.7 187.9,168.5 188.8,168.5 188.8,168.7 189.7,168.7 189.7,168.5 190.6,168.5 190.6,168.8 191.5,168.8 191.5,168.0 192.4,168.0 192.4,168.2 193.3,168.2 193.3,167.7 194.2,167.7 194.2,167.5 195.1,167.5 195.1,168.1 196.1,168.1 196.1,168.3 197.0,168.3 197.0,168.1 197.9,168.1 197.9,168.1 198.8,168.1 198.8,167.5 199.7,167.5 199.7,166.5 200.6,166.5 200.6,169.1 201.5,169.1 201.5,168.6 202.4,168.6 202.4,168.5 203.3,168.5 203.3,168.1 204.2,168.1 204.2,167.3 205.1,167.3 205.1,168.0 206.0,168.0 206.0,168.3 206.9,168.3 206.9,168.6 207.8,168.6 207.8,169.0 208.7,169.0 208.7,166.6 209.6,166.6 209.6,169.4 210.5,169.4 210.5,169.3 211.4,169.3 211.4,167.3 212.3,167.3 212.3,168.5 213.2,168.5 213.2,167.1 214.2,167.1 214.2,169.4 215.1,169.4 215.1,168.9 216.0,168.9 216.0,167.4 216.9,167.4 216.9,168.4 217.8,168.4 217.8,168.5 218.7,168.5 218.7,166.9 219.6,166.9 219.6,168.7 220.5,168.7 220.5,165.7 221.4,165.7 221.4,167.0 222.3,167.0 222.3,166.6 223.2,166.6 223.2,167.4 224.1,167.4 224.1,167.6 225.0,167.6 225.0,167.2 225.9,167.2 225.9,167.4 226.8,167.4 226.8,166.6 227.7,166.6 227.7,166.2 228.6,166.2 228.6,168.4 229.5,168.4 229.5,167.2 230.4,167.2 230.4,166.7 231.3,166.7 231.3,166.5 232.3,166.5 232.3,166.0 233.2,166.0 233.2,167.4 234.1,167.4 234.1,167.3 235.0,167.3 235.0,167.3 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="93.8" cy="197.5" r="3.5"><title>#5234: 1.11×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="93.8" y1="54.0" x2="93.8" y2="192.5"/>
|
||||
<circle class="nj-theme-dot" cx="93.8" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="93.8" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.9" cy="168.6" r="3.5"><title>#5283: 1.47×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.9" y1="54.0" x2="139.9" y2="163.6"/>
|
||||
<circle class="nj-theme-dot" cx="139.9" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="139.9" y="50.0" text-anchor="middle">1</text>
|
||||
<circle class="nj-charts-json-dot" cx="187.0" cy="167.7" r="3.5"><title>#5617: 1.48×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="187.0" y1="54.0" x2="187.0" y2="162.7"/>
|
||||
<circle class="nj-theme-dot" cx="187.0" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="187.0" y="50.0" text-anchor="middle">3</text>
|
||||
<circle class="nj-charts-json-dot" cx="268.5" cy="139.8" r="3.5"><title>#5738: 1.95×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="268.5" y1="54.0" x2="268.5" y2="134.8"/>
|
||||
<circle class="nj-theme-dot" cx="268.5" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="268.5" y="50.0" text-anchor="middle">3</text>
|
||||
<circle class="nj-charts-json-dot" cx="297.4" cy="127.4" r="3.5"><title>#5851: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="297.4" y1="54.0" x2="297.4" y2="122.4"/>
|
||||
<circle class="nj-theme-dot" cx="297.4" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="297.4" y="50.0" text-anchor="middle">3</text>
|
||||
<circle class="nj-charts-json-dot" cx="312.8" cy="102.2" r="3.5"><title>#5882: 2.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="312.8" y1="36.0" x2="312.8" y2="97.2"/>
|
||||
<circle class="nj-theme-dot" cx="312.8" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="312.8" y="32.0" text-anchor="middle">4</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
@@ -1,38 +1,45 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-parse_citm nj-blog-tl-parse_citm-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-parse_citm">parse() citm_catalog.json: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-parse_citm-d">parse() citm_catalog.json: speedup over 3.12.0 at each of 317 commits, ending at 3.3x. Labeled steps: #5234, #5283, #5592, #5809, #5810, #5882.</desc>
|
||||
<desc id="nj-blog-tl-parse_citm-d">parse() citm_catalog.json: speedup over 3.12.0 at each of 317 commits, ending at 3.3x. Labeled steps, by theme: 4, 1, 4, 4, 2, 4.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">parse() citm_catalog.json</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="159.333" x2="330" y2="159.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="163.333">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="110.667" x2="330" y2="110.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="114.667">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">8×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="160.667" x2="330" y2="160.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="164.667">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="113.333" x2="330" y2="113.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="117.333">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">8×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.2 45.8,208.2 45.8,207.8 46.7,207.8 46.7,207.5 47.6,207.5 47.6,206.4 48.5,206.4 48.5,208.3 49.4,208.3 49.4,207.3 50.3,207.3 50.3,206.8 51.2,206.8 51.2,207.8 52.1,207.8 52.1,206.8 53.1,206.8 53.1,207.3 54.0,207.3 54.0,207.6 54.9,207.6 54.9,207.8 55.8,207.8 55.8,207.0 56.7,207.0 56.7,207.2 57.6,207.2 57.6,207.2 58.5,207.2 58.5,207.3 59.4,207.3 59.4,207.5 60.3,207.5 60.3,207.4 61.2,207.4 61.2,206.5 62.1,206.5 62.1,207.6 63.0,207.6 63.0,207.6 63.9,207.6 63.9,207.1 64.8,207.1 64.8,207.0 65.7,207.0 65.7,207.6 66.6,207.6 66.6,206.6 67.5,206.6 67.5,207.3 68.4,207.3 68.4,206.8 69.3,206.8 69.3,207.3 70.2,207.3 70.2,207.7 71.2,207.7 71.2,207.9 72.1,207.9 72.1,207.2 73.0,207.2 73.0,206.4 73.9,206.4 73.9,207.6 74.8,207.6 74.8,206.4 75.7,206.4 75.7,208.0 76.6,208.0 76.6,207.4 77.5,207.4 77.5,206.4 78.4,206.4 78.4,207.5 79.3,207.5 79.3,207.1 80.2,207.1 80.2,206.9 81.1,206.9 81.1,207.6 82.0,207.6 82.0,207.6 82.9,207.6 82.9,207.0 83.8,207.0 83.8,206.8 84.7,206.8 84.7,208.0 85.6,208.0 85.6,207.6 86.5,207.6 86.5,206.6 87.4,206.6 87.4,206.7 88.3,206.7 88.3,207.3 89.3,207.3 89.3,206.9 90.2,206.9 90.2,207.6 91.1,207.6 91.1,207.1 92.0,207.1 92.0,207.6 92.9,207.6 92.9,207.9 93.8,207.9 93.8,177.3 94.7,177.3 94.7,176.7 95.6,176.7 95.6,176.9 96.5,176.9 96.5,176.8 97.4,176.8 97.4,176.8 98.3,176.8 98.3,176.2 99.2,176.2 99.2,176.0 100.1,176.0 100.1,176.8 101.0,176.8 101.0,176.7 101.9,176.7 101.9,175.9 102.8,175.9 102.8,177.0 103.7,177.0 103.7,176.1 104.6,176.1 104.6,175.9 105.5,175.9 105.5,177.2 106.4,177.2 106.4,177.2 107.4,177.2 107.4,176.7 108.3,176.7 108.3,176.8 109.2,176.8 109.2,176.6 110.1,176.6 110.1,176.8 111.0,176.8 111.0,177.0 111.9,177.0 111.9,176.7 112.8,176.7 112.8,177.1 113.7,177.1 113.7,176.8 114.6,176.8 114.6,175.0 115.5,175.0 115.5,176.6 116.4,176.6 116.4,176.7 117.3,176.7 117.3,176.8 118.2,176.8 118.2,176.0 119.1,176.0 119.1,176.6 120.0,176.6 120.0,176.5 120.9,176.5 120.9,176.5 121.8,176.5 121.8,176.0 122.7,176.0 122.7,177.1 123.6,177.1 123.6,176.4 124.6,176.4 124.6,175.7 125.5,175.7 125.5,176.6 126.4,176.6 126.4,176.6 127.3,176.6 127.3,176.6 128.2,176.6 128.2,176.6 129.1,176.6 129.1,176.2 130.0,176.2 130.0,176.9 130.9,176.9 130.9,175.3 131.8,175.3 131.8,176.1 132.7,176.1 132.7,176.6 133.6,176.6 133.6,176.9 134.5,176.9 134.5,176.9 135.4,176.9 135.4,177.0 136.3,177.0 136.3,176.4 137.2,176.4 137.2,176.6 138.1,176.6 138.1,176.6 139.0,176.6 139.0,176.3 139.9,176.3 139.9,161.2 140.8,161.2 140.8,160.9 141.7,160.9 141.7,160.4 142.7,160.4 142.7,160.9 143.6,160.9 143.6,159.8 144.5,159.8 144.5,159.4 145.4,159.4 145.4,158.0 146.3,158.0 146.3,158.9 147.2,158.9 147.2,159.0 148.1,159.0 148.1,159.3 149.0,159.3 149.0,158.1 149.9,158.1 149.9,159.1 150.8,159.1 150.8,158.2 151.7,158.2 151.7,158.6 152.6,158.6 152.6,158.5 153.5,158.5 153.5,158.8 154.4,158.8 154.4,158.3 155.3,158.3 155.3,159.4 156.2,159.4 156.2,158.8 157.1,158.8 157.1,157.7 158.0,157.7 158.0,158.4 158.9,158.4 158.9,158.5 159.8,158.5 159.8,159.2 160.8,159.2 160.8,158.9 161.7,158.9 161.7,158.6 162.6,158.6 162.6,159.1 163.5,159.1 163.5,159.2 164.4,159.2 164.4,159.2 165.3,159.2 165.3,158.3 166.2,158.3 166.2,158.2 167.1,158.2 167.1,158.7 168.0,158.7 168.0,158.9 168.9,158.9 168.9,158.7 169.8,158.7 169.8,159.2 170.7,159.2 170.7,158.5 171.6,158.5 171.6,158.9 172.5,158.9 172.5,158.7 173.4,158.7 173.4,159.5 174.3,159.5 174.3,157.8 175.2,157.8 175.2,158.3 176.1,158.3 176.1,157.8 177.0,157.8 177.0,158.6 177.9,158.6 177.9,158.0 178.9,158.0 178.9,158.3 179.8,158.3 179.8,158.1 180.7,158.1 180.7,158.7 181.6,158.7 181.6,157.7 182.5,157.7 182.5,158.0 183.4,158.0 183.4,158.9 184.3,158.9 184.3,160.0 185.2,160.0 185.2,160.4 186.1,160.4 186.1,160.3 187.0,160.3 187.0,158.9 187.9,158.9 187.9,159.7 188.8,159.7 188.8,159.9 189.7,159.9 189.7,160.4 190.6,160.4 190.6,159.8 191.5,159.8 191.5,159.1 192.4,159.1 192.4,160.3 193.3,160.3 193.3,159.3 194.2,159.3 194.2,160.1 195.1,160.1 195.1,160.0 196.1,160.0 196.1,160.0 197.0,160.0 197.0,160.4 197.9,160.4 197.9,159.9 198.8,159.9 198.8,158.7 199.7,158.7 199.7,159.6 200.6,159.6 200.6,160.2 201.5,160.2 201.5,159.3 202.4,159.3 202.4,160.6 203.3,160.6 203.3,160.1 204.2,160.1 204.2,158.7 205.1,158.7 205.1,159.2 206.0,159.2 206.0,160.7 206.9,160.7 206.9,160.2 207.8,160.2 207.8,160.7 208.7,160.7 208.7,160.0 209.6,160.0 209.6,161.1 210.5,161.1 210.5,160.8 211.4,160.8 211.4,159.5 212.3,159.5 212.3,160.2 213.2,160.2 213.2,160.1 214.2,160.1 214.2,161.0 215.1,161.0 215.1,160.1 216.0,160.1 216.0,160.1 216.9,160.1 216.9,160.5 217.8,160.5 217.8,159.4 218.7,159.4 218.7,159.2 219.6,159.2 219.6,159.1 220.5,159.1 220.5,157.9 221.4,157.9 221.4,158.1 222.3,158.1 222.3,159.0 223.2,159.0 223.2,158.7 224.1,158.7 224.1,159.0 225.0,159.0 225.0,159.1 225.9,159.1 225.9,159.5 226.8,159.5 226.8,158.5 227.7,158.5 227.7,158.0 228.6,158.0 228.6,159.2 229.5,159.2 229.5,158.8 230.4,158.8 230.4,159.4 231.3,159.4 231.3,159.3 232.3,159.3 232.3,158.1 233.2,158.1 233.2,159.7 234.1,159.7 234.1,160.0 235.0,160.0 235.0,159.7 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="93.8" cy="177.3" r="3.5"><title>#5234: 1.55×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="93.8" y1="54.0" x2="93.8" y2="172.3"/>
|
||||
<text class="nj-charts-note" x="93.8" y="50.0" text-anchor="middle">#5234</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.9" cy="161.2" r="3.5"><title>#5283: 1.95×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.9" y1="54.0" x2="139.9" y2="156.2"/>
|
||||
<text class="nj-charts-note" x="139.9" y="50.0" text-anchor="middle">#5283</text>
|
||||
<circle class="nj-charts-json-dot" cx="243.1" cy="153.9" r="3.5"><title>#5592: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="243.1" y1="54.0" x2="243.1" y2="148.9"/>
|
||||
<text class="nj-charts-note" x="243.1" y="50.0" text-anchor="middle">#5592</text>
|
||||
<circle class="nj-charts-json-dot" cx="265.7" cy="145.4" r="3.5"><title>#5809: 2.4×</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="266.6" cy="136.3" r="3.5"><title>#5810: 2.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="266.6" y1="41.0" x2="266.6" y2="131.3"/>
|
||||
<text class="nj-charts-note" x="266.6" y="37.0" text-anchor="middle">#5809, #5810</text>
|
||||
<circle class="nj-charts-json-dot" cx="312.8" cy="123.3" r="3.5"><title>#5882: 3.3×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="312.8" y1="54.0" x2="312.8" y2="118.3"/>
|
||||
<text class="nj-charts-note" x="312.0" y="50.0" text-anchor="middle">#5882</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.2 45.8,208.2 45.8,207.8 46.7,207.8 46.7,207.5 47.6,207.5 47.6,206.5 48.5,206.5 48.5,208.3 49.4,208.3 49.4,207.3 50.3,207.3 50.3,206.8 51.2,206.8 51.2,207.8 52.1,207.8 52.1,206.8 53.1,206.8 53.1,207.3 54.0,207.3 54.0,207.6 54.9,207.6 54.9,207.8 55.8,207.8 55.8,207.0 56.7,207.0 56.7,207.3 57.6,207.3 57.6,207.2 58.5,207.2 58.5,207.4 59.4,207.4 59.4,207.5 60.3,207.5 60.3,207.4 61.2,207.4 61.2,206.6 62.1,206.6 62.1,207.6 63.0,207.6 63.0,207.6 63.9,207.6 63.9,207.2 64.8,207.2 64.8,207.0 65.7,207.0 65.7,207.6 66.6,207.6 66.6,206.7 67.5,206.7 67.5,207.4 68.4,207.4 68.4,206.8 69.3,206.8 69.3,207.3 70.2,207.3 70.2,207.7 71.2,207.7 71.2,207.9 72.1,207.9 72.1,207.2 73.0,207.2 73.0,206.4 73.9,206.4 73.9,207.6 74.8,207.6 74.8,206.4 75.7,206.4 75.7,208.0 76.6,208.0 76.6,207.4 77.5,207.4 77.5,206.5 78.4,206.5 78.4,207.5 79.3,207.5 79.3,207.2 80.2,207.2 80.2,206.9 81.1,206.9 81.1,207.6 82.0,207.6 82.0,207.6 82.9,207.6 82.9,207.0 83.8,207.0 83.8,206.9 84.7,206.9 84.7,208.0 85.6,208.0 85.6,207.6 86.5,207.6 86.5,206.6 87.4,206.6 87.4,206.8 88.3,206.8 88.3,207.3 89.3,207.3 89.3,206.9 90.2,206.9 90.2,207.6 91.1,207.6 91.1,207.1 92.0,207.1 92.0,207.6 92.9,207.6 92.9,207.9 93.8,207.9 93.8,178.2 94.7,178.2 94.7,177.5 95.6,177.5 95.6,177.7 96.5,177.7 96.5,177.6 97.4,177.6 97.4,177.7 98.3,177.7 98.3,177.1 99.2,177.1 99.2,176.8 100.1,176.8 100.1,177.7 101.0,177.7 101.0,177.6 101.9,177.6 101.9,176.8 102.8,176.8 102.8,177.8 103.7,177.8 103.7,177.0 104.6,177.0 104.6,176.8 105.5,176.8 105.5,178.0 106.4,178.0 106.4,178.1 107.4,178.1 107.4,177.6 108.3,177.6 108.3,177.6 109.2,177.6 109.2,177.4 110.1,177.4 110.1,177.6 111.0,177.6 111.0,177.8 111.9,177.8 111.9,177.5 112.8,177.5 112.8,177.9 113.7,177.9 113.7,177.7 114.6,177.7 114.6,175.9 115.5,175.9 115.5,177.5 116.4,177.5 116.4,177.6 117.3,177.6 117.3,177.6 118.2,177.6 118.2,176.9 119.1,176.9 119.1,177.5 120.0,177.5 120.0,177.4 120.9,177.4 120.9,177.4 121.8,177.4 121.8,176.9 122.7,176.9 122.7,177.9 123.6,177.9 123.6,177.3 124.6,177.3 124.6,176.6 125.5,176.6 125.5,177.4 126.4,177.4 126.4,177.5 127.3,177.5 127.3,177.5 128.2,177.5 128.2,177.4 129.1,177.4 129.1,177.0 130.0,177.0 130.0,177.7 130.9,177.7 130.9,176.2 131.8,176.2 131.8,176.9 132.7,176.9 132.7,177.5 133.6,177.5 133.6,177.8 134.5,177.8 134.5,177.8 135.4,177.8 135.4,177.9 136.3,177.9 136.3,177.3 137.2,177.3 137.2,177.5 138.1,177.5 138.1,177.4 139.0,177.4 139.0,177.1 139.9,177.1 139.9,162.5 140.8,162.5 140.8,162.2 141.7,162.2 141.7,161.8 142.7,161.8 142.7,162.2 143.6,162.2 143.6,161.2 144.5,161.2 144.5,160.7 145.4,160.7 145.4,159.4 146.3,159.4 146.3,160.3 147.2,160.3 147.2,160.4 148.1,160.4 148.1,160.6 149.0,160.6 149.0,159.5 149.9,159.5 149.9,160.4 150.8,160.4 150.8,159.6 151.7,159.6 151.7,160.0 152.6,160.0 152.6,159.9 153.5,159.9 153.5,160.2 154.4,160.2 154.4,159.6 155.3,159.6 155.3,160.8 156.2,160.8 156.2,160.1 157.1,160.1 157.1,159.1 158.0,159.1 158.0,159.7 158.9,159.7 158.9,159.9 159.8,159.9 159.8,160.5 160.8,160.5 160.8,160.2 161.7,160.2 161.7,159.9 162.6,159.9 162.6,160.5 163.5,160.5 163.5,160.5 164.4,160.5 164.4,160.6 165.3,160.6 165.3,159.7 166.2,159.7 166.2,159.5 167.1,159.5 167.1,160.0 168.0,160.0 168.0,160.2 168.9,160.2 168.9,160.0 169.8,160.0 169.8,160.6 170.7,160.6 170.7,159.9 171.6,159.9 171.6,160.2 172.5,160.2 172.5,160.1 173.4,160.1 173.4,160.8 174.3,160.8 174.3,159.2 175.2,159.2 175.2,159.6 176.1,159.6 176.1,159.2 177.0,159.2 177.0,160.0 177.9,160.0 177.9,159.4 178.9,159.4 178.9,159.6 179.8,159.6 179.8,159.5 180.7,159.5 180.7,160.1 181.6,160.1 181.6,159.0 182.5,159.0 182.5,159.4 183.4,159.4 183.4,160.2 184.3,160.2 184.3,161.4 185.2,161.4 185.2,161.7 186.1,161.7 186.1,161.6 187.0,161.6 187.0,160.3 187.9,160.3 187.9,161.1 188.8,161.1 188.8,161.2 189.7,161.2 189.7,161.7 190.6,161.7 190.6,161.2 191.5,161.2 191.5,160.4 192.4,160.4 192.4,161.6 193.3,161.6 193.3,160.6 194.2,160.6 194.2,161.4 195.1,161.4 195.1,161.3 196.1,161.3 196.1,161.3 197.0,161.3 197.0,161.7 197.9,161.7 197.9,161.2 198.8,161.2 198.8,160.1 199.7,160.1 199.7,160.9 200.6,160.9 200.6,161.5 201.5,161.5 201.5,160.6 202.4,160.6 202.4,161.9 203.3,161.9 203.3,161.4 204.2,161.4 204.2,160.1 205.1,160.1 205.1,160.6 206.0,160.6 206.0,162.0 206.9,162.0 206.9,161.5 207.8,161.5 207.8,162.0 208.7,162.0 208.7,161.3 209.6,161.3 209.6,162.3 210.5,162.3 210.5,162.1 211.4,162.1 211.4,160.8 212.3,160.8 212.3,161.5 213.2,161.5 213.2,161.4 214.2,161.4 214.2,162.2 215.1,162.2 215.1,161.4 216.0,161.4 216.0,161.4 216.9,161.4 216.9,161.8 217.8,161.8 217.8,160.7 218.7,160.7 218.7,160.5 219.6,160.5 219.6,160.5 220.5,160.5 220.5,159.3 221.4,159.3 221.4,159.4 222.3,159.4 222.3,160.4 223.2,160.4 223.2,160.1 224.1,160.1 224.1,160.4 225.0,160.4 225.0,160.4 225.9,160.4 225.9,160.8 226.8,160.8 226.8,159.8 227.7,159.8 227.7,159.4 228.6,159.4 228.6,160.5 229.5,160.5 229.5,160.1 230.4,160.1 230.4,160.7 231.3,160.7 231.3,160.6 232.3,160.6 232.3,159.5 233.2,159.5 233.2,161.1 234.1,161.1 234.1,161.3 235.0,161.3 235.0,161.0 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="93.8" cy="178.2" r="3.5"><title>#5234: 1.55×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="93.8" y1="54.0" x2="93.8" y2="173.2"/>
|
||||
<circle class="nj-theme-dot" cx="93.8" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="93.8" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="139.9" cy="162.5" r="3.5"><title>#5283: 1.95×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="139.9" y1="54.0" x2="139.9" y2="157.5"/>
|
||||
<circle class="nj-theme-dot" cx="139.9" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="139.9" y="50.0" text-anchor="middle">1</text>
|
||||
<circle class="nj-charts-json-dot" cx="243.1" cy="155.4" r="3.5"><title>#5592: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="243.1" y1="54.0" x2="243.1" y2="150.4"/>
|
||||
<circle class="nj-theme-dot" cx="243.1" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="243.1" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="265.7" cy="147.1" r="3.5"><title>#5809: 2.4×</title></circle>
|
||||
<circle class="nj-charts-json-dot" cx="266.6" cy="138.2" r="3.5"><title>#5810: 2.8×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="266.6" y1="36.0" x2="266.6" y2="133.2"/>
|
||||
<circle class="nj-theme-dot" cx="257.6" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="257.6" y="32.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-theme-dot" cx="275.6" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="275.6" y="32.0" text-anchor="middle">2</text>
|
||||
<circle class="nj-charts-json-dot" cx="312.8" cy="125.7" r="3.5"><title>#5882: 3.3×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="312.8" y1="54.0" x2="312.8" y2="120.7"/>
|
||||
<circle class="nj-theme-dot" cx="312.8" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="312.8" y="50.0" text-anchor="middle">4</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
@@ -1,26 +1,28 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-parse_twitter_ifstream nj-blog-tl-parse_twitter_ifstream-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-parse_twitter_ifstream">parse() twitter.json, std::ifstream: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-parse_twitter_ifstream-d">parse() twitter.json, std::ifstream: speedup over 3.12.0 at each of 317 commits, ending at 2.2x. Labeled steps: #5828, #5884.</desc>
|
||||
<desc id="nj-blog-tl-parse_twitter_ifstream-d">parse() twitter.json, std::ifstream: speedup over 3.12.0 at each of 317 commits, ending at 2.2x. Labeled steps, by theme: 1, 1.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">parse() twitter.json, std::ifstream</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="135" x2="330" y2="135"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="139">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="137" x2="330" y2="137"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="141">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">4×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,209.3 45.8,209.3 45.8,206.6 46.7,206.6 46.7,208.4 47.6,208.4 47.6,205.9 48.5,205.9 48.5,209.4 49.4,209.4 49.4,208.3 50.3,208.3 50.3,207.9 51.2,207.9 51.2,209.5 52.1,209.5 52.1,205.7 53.1,205.7 53.1,206.7 54.0,206.7 54.0,209.2 54.9,209.2 54.9,208.2 55.8,208.2 55.8,206.9 56.7,206.9 56.7,207.4 57.6,207.4 57.6,207.4 58.5,207.4 58.5,207.5 59.4,207.5 59.4,206.9 60.3,206.9 60.3,206.9 61.2,206.9 61.2,208.4 62.1,208.4 62.1,208.6 63.0,208.6 63.0,209.2 63.9,209.2 63.9,207.7 64.8,207.7 64.8,207.0 65.7,207.0 65.7,206.7 66.6,206.7 66.6,206.0 67.5,206.0 67.5,207.5 68.4,207.5 68.4,206.3 69.3,206.3 69.3,206.7 70.2,206.7 70.2,206.7 71.2,206.7 71.2,209.3 72.1,209.3 72.1,206.7 73.0,206.7 73.0,206.8 73.9,206.8 73.9,206.6 74.8,206.6 74.8,206.8 75.7,206.8 75.7,209.2 76.6,209.2 76.6,207.6 77.5,207.6 77.5,205.9 78.4,205.9 78.4,209.1 79.3,209.1 79.3,206.6 80.2,206.6 80.2,207.4 81.1,207.4 81.1,206.9 82.0,206.9 82.0,209.1 82.9,209.1 82.9,205.7 83.8,205.7 83.8,206.9 84.7,206.9 84.7,208.0 85.6,208.0 85.6,208.5 86.5,208.5 86.5,206.5 87.4,206.5 87.4,206.0 88.3,206.0 88.3,207.9 89.3,207.9 89.3,206.6 90.2,206.6 90.2,206.5 91.1,206.5 91.1,206.5 92.0,206.5 92.0,207.1 92.9,207.1 92.9,208.0 93.8,208.0 93.8,208.1 94.7,208.1 94.7,206.7 95.6,206.7 95.6,207.8 96.5,207.8 96.5,206.6 97.4,206.6 97.4,208.1 98.3,208.1 98.3,205.9 99.2,205.9 99.2,206.7 100.1,206.7 100.1,208.0 101.0,208.0 101.0,207.3 101.9,207.3 101.9,206.7 102.8,206.7 102.8,209.3 103.7,209.3 103.7,206.5 104.6,206.5 104.6,207.2 105.5,207.2 105.5,208.2 106.4,208.2 106.4,209.3 107.4,209.3 107.4,207.8 108.3,207.8 108.3,206.9 109.2,206.9 109.2,206.7 110.1,206.7 110.1,209.0 111.0,209.0 111.0,208.0 111.9,208.0 111.9,208.1 112.8,208.1 112.8,209.2 113.7,209.2 113.7,208.1 114.6,208.1 114.6,205.5 115.5,205.5 115.5,206.9 116.4,206.9 116.4,206.6 117.3,206.6 117.3,207.8 118.2,207.8 118.2,206.7 119.1,206.7 119.1,206.9 120.0,206.9 120.0,206.7 120.9,206.7 120.9,206.3 121.8,206.3 121.8,207.1 122.7,207.1 122.7,208.6 123.6,208.6 123.6,208.7 124.6,208.7 124.6,206.6 125.5,206.6 125.5,209.3 126.4,209.3 126.4,208.0 127.3,208.0 127.3,206.7 128.2,206.7 128.2,207.7 129.1,207.7 129.1,206.9 130.0,206.9 130.0,208.9 130.9,208.9 130.9,208.7 131.8,208.7 131.8,207.7 132.7,207.7 132.7,208.8 133.6,208.8 133.6,207.8 134.5,207.8 134.5,210.4 135.4,210.4 135.4,209.0 136.3,209.0 136.3,209.0 137.2,209.0 137.2,209.1 138.1,209.1 138.1,208.0 139.0,208.0 139.0,207.7 139.9,207.7 139.9,208.3 140.8,208.3 140.8,207.0 141.7,207.0 141.7,207.2 142.7,207.2 142.7,207.5 143.6,207.5 143.6,208.0 144.5,208.0 144.5,207.6 145.4,207.6 145.4,207.9 146.3,207.9 146.3,207.6 147.2,207.6 147.2,208.5 148.1,208.5 148.1,209.2 149.0,209.2 149.0,206.3 149.9,206.3 149.9,208.8 150.8,208.8 150.8,207.6 151.7,207.6 151.7,207.4 152.6,207.4 152.6,207.5 153.5,207.5 153.5,209.0 154.4,209.0 154.4,206.8 155.3,206.8 155.3,209.3 156.2,209.3 156.2,210.0 157.1,210.0 157.1,207.0 158.0,207.0 158.0,207.3 158.9,207.3 158.9,208.1 159.8,208.1 159.8,209.8 160.8,209.8 160.8,208.1 161.7,208.1 161.7,208.1 162.6,208.1 162.6,208.6 163.5,208.6 163.5,208.2 164.4,208.2 164.4,210.4 165.3,210.4 165.3,207.7 166.2,207.7 166.2,207.2 167.1,207.2 167.1,206.6 168.0,206.6 168.0,210.0 168.9,210.0 168.9,206.5 169.8,206.5 169.8,210.0 170.7,210.0 170.7,208.8 171.6,208.8 171.6,208.8 172.5,208.8 172.5,209.5 173.4,209.5 173.4,208.9 174.3,208.9 174.3,206.3 175.2,206.3 175.2,207.2 176.1,207.2 176.1,206.9 177.0,206.9 177.0,207.2 177.9,207.2 177.9,206.5 178.9,206.5 178.9,207.1 179.8,207.1 179.8,208.0 180.7,208.0 180.7,207.6 181.6,207.6 181.6,207.9 182.5,207.9 182.5,207.5 183.4,207.5 183.4,205.6 184.3,205.6 184.3,208.0 185.2,208.0 185.2,209.7 186.1,209.7 186.1,207.9 187.0,207.9 187.0,207.6 187.9,207.6 187.9,208.5 188.8,208.5 188.8,207.9 189.7,207.9 189.7,210.5 190.6,210.5 190.6,206.7 191.5,206.7 191.5,207.7 192.4,207.7 192.4,209.2 193.3,209.2 193.3,206.7 194.2,206.7 194.2,209.3 195.1,209.3 195.1,208.0 196.1,208.0 196.1,208.0 197.0,208.0 197.0,207.9 197.9,207.9 197.9,208.2 198.8,208.2 198.8,207.9 199.7,207.9 199.7,207.0 200.6,207.0 200.6,208.8 201.5,208.8 201.5,208.0 202.4,208.0 202.4,208.0 203.3,208.0 203.3,209.2 204.2,209.2 204.2,206.7 205.1,206.7 205.1,206.6 206.0,206.6 206.0,208.5 206.9,208.5 206.9,208.9 207.8,208.9 207.8,210.1 208.7,210.1 208.7,206.4 209.6,206.4 209.6,209.4 210.5,209.4 210.5,210.1 211.4,210.1 211.4,207.6 212.3,207.6 212.3,209.5 213.2,209.5 213.2,208.7 214.2,208.7 214.2,211.2 215.1,211.2 215.1,210.1 216.0,210.1 216.0,211.8 216.9,211.8 216.9,208.8 217.8,208.8 217.8,209.2 218.7,209.2 218.7,207.7 219.6,207.7 219.6,208.1 220.5,208.1 220.5,206.3 221.4,206.3 221.4,206.7 222.3,206.7 222.3,207.3 223.2,207.3 223.2,207.8 224.1,207.8 224.1,208.7 225.0,208.7 225.0,210.1 225.9,210.1 225.9,210.1 226.8,210.1 226.8,206.8 227.7,206.8 227.7,209.0 228.6,209.0 228.6,208.7 229.5,208.7 229.5,209.2 230.4,209.2 230.4,208.6 231.3,208.6 231.3,209.0 232.3,209.0 232.3,207.3 233.2,207.3 233.2,209.0 234.1,209.0 234.1,209.3 235.0,209.3 235.0,207.3 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="287.5" cy="136.8" r="3.5"><title>#5828: 1.97×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="287.5" y1="54.0" x2="287.5" y2="131.8"/>
|
||||
<text class="nj-charts-note" x="287.5" y="50.0" text-anchor="middle">#5828</text>
|
||||
<circle class="nj-charts-json-dot" cx="306.5" cy="124.7" r="3.5"><title>#5884: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="306.5" y1="41.0" x2="306.5" y2="119.7"/>
|
||||
<text class="nj-charts-note" x="306.5" y="37.0" text-anchor="middle">#5884</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,209.3 45.8,209.3 45.8,206.6 46.7,206.6 46.7,208.3 47.6,208.3 47.6,205.9 48.5,205.9 48.5,209.3 49.4,209.3 49.4,208.3 50.3,208.3 50.3,207.9 51.2,207.9 51.2,209.4 52.1,209.4 52.1,205.8 53.1,205.8 53.1,206.7 54.0,206.7 54.0,209.2 54.9,209.2 54.9,208.1 55.8,208.1 55.8,206.9 56.7,206.9 56.7,207.5 57.6,207.5 57.6,207.5 58.5,207.5 58.5,207.6 59.4,207.6 59.4,206.9 60.3,206.9 60.3,206.9 61.2,206.9 61.2,208.4 62.1,208.4 62.1,208.6 63.0,208.6 63.0,209.1 63.9,209.1 63.9,207.7 64.8,207.7 64.8,207.0 65.7,207.0 65.7,206.7 66.6,206.7 66.6,206.1 67.5,206.1 67.5,207.5 68.4,207.5 68.4,206.4 69.3,206.4 69.3,206.7 70.2,206.7 70.2,206.8 71.2,206.8 71.2,209.3 72.1,209.3 72.1,206.7 73.0,206.7 73.0,206.8 73.9,206.8 73.9,206.6 74.8,206.6 74.8,206.8 75.7,206.8 75.7,209.2 76.6,209.2 76.6,207.6 77.5,207.6 77.5,205.9 78.4,205.9 78.4,209.1 79.3,209.1 79.3,206.6 80.2,206.6 80.2,207.4 81.1,207.4 81.1,207.0 82.0,207.0 82.0,209.1 82.9,209.1 82.9,205.8 83.8,205.8 83.8,206.9 84.7,206.9 84.7,208.0 85.6,208.0 85.6,208.5 86.5,208.5 86.5,206.6 87.4,206.6 87.4,206.0 88.3,206.0 88.3,207.9 89.3,207.9 89.3,206.6 90.2,206.6 90.2,206.5 91.1,206.5 91.1,206.6 92.0,206.6 92.0,207.2 92.9,207.2 92.9,208.0 93.8,208.0 93.8,208.1 94.7,208.1 94.7,206.7 95.6,206.7 95.6,207.8 96.5,207.8 96.5,206.7 97.4,206.7 97.4,208.1 98.3,208.1 98.3,205.9 99.2,205.9 99.2,206.8 100.1,206.8 100.1,208.0 101.0,208.0 101.0,207.3 101.9,207.3 101.9,206.7 102.8,206.7 102.8,209.3 103.7,209.3 103.7,206.5 104.6,206.5 104.6,207.2 105.5,207.2 105.5,208.2 106.4,208.2 106.4,209.3 107.4,209.3 107.4,207.8 108.3,207.8 108.3,206.9 109.2,206.9 109.2,206.7 110.1,206.7 110.1,209.0 111.0,209.0 111.0,208.0 111.9,208.0 111.9,208.1 112.8,208.1 112.8,209.1 113.7,209.1 113.7,208.1 114.6,208.1 114.6,205.6 115.5,205.6 115.5,207.0 116.4,207.0 116.4,206.7 117.3,206.7 117.3,207.9 118.2,207.9 118.2,206.7 119.1,206.7 119.1,206.9 120.0,206.9 120.0,206.8 120.9,206.8 120.9,206.4 121.8,206.4 121.8,207.1 122.7,207.1 122.7,208.6 123.6,208.6 123.6,208.7 124.6,208.7 124.6,206.6 125.5,206.6 125.5,209.3 126.4,209.3 126.4,208.0 127.3,208.0 127.3,206.7 128.2,206.7 128.2,207.7 129.1,207.7 129.1,206.9 130.0,206.9 130.0,208.8 130.9,208.8 130.9,208.7 131.8,208.7 131.8,207.7 132.7,207.7 132.7,208.8 133.6,208.8 133.6,207.8 134.5,207.8 134.5,210.3 135.4,210.3 135.4,208.9 136.3,208.9 136.3,208.9 137.2,208.9 137.2,209.0 138.1,209.0 138.1,208.0 139.0,208.0 139.0,207.7 139.9,207.7 139.9,208.3 140.8,208.3 140.8,207.0 141.7,207.0 141.7,207.2 142.7,207.2 142.7,207.5 143.6,207.5 143.6,208.0 144.5,208.0 144.5,207.6 145.4,207.6 145.4,207.9 146.3,207.9 146.3,207.6 147.2,207.6 147.2,208.5 148.1,208.5 148.1,209.2 149.0,209.2 149.0,206.3 149.9,206.3 149.9,208.7 150.8,208.7 150.8,207.6 151.7,207.6 151.7,207.4 152.6,207.4 152.6,207.5 153.5,207.5 153.5,209.0 154.4,209.0 154.4,206.9 155.3,206.9 155.3,209.3 156.2,209.3 156.2,209.9 157.1,209.9 157.1,207.0 158.0,207.0 158.0,207.3 158.9,207.3 158.9,208.1 159.8,208.1 159.8,209.8 160.8,209.8 160.8,208.1 161.7,208.1 161.7,208.1 162.6,208.1 162.6,208.5 163.5,208.5 163.5,208.2 164.4,208.2 164.4,210.4 165.3,210.4 165.3,207.7 166.2,207.7 166.2,207.2 167.1,207.2 167.1,206.7 168.0,206.7 168.0,209.9 168.9,209.9 168.9,206.6 169.8,206.6 169.8,209.9 170.7,209.9 170.7,208.8 171.6,208.8 171.6,208.8 172.5,208.8 172.5,209.5 173.4,209.5 173.4,208.9 174.3,208.9 174.3,206.4 175.2,206.4 175.2,207.2 176.1,207.2 176.1,207.0 177.0,207.0 177.0,207.2 177.9,207.2 177.9,206.6 178.9,206.6 178.9,207.2 179.8,207.2 179.8,208.0 180.7,208.0 180.7,207.6 181.6,207.6 181.6,207.9 182.5,207.9 182.5,207.5 183.4,207.5 183.4,205.6 184.3,205.6 184.3,208.0 185.2,208.0 185.2,209.7 186.1,209.7 186.1,207.9 187.0,207.9 187.0,207.6 187.9,207.6 187.9,208.5 188.8,208.5 188.8,207.9 189.7,207.9 189.7,210.4 190.6,210.4 190.6,206.7 191.5,206.7 191.5,207.7 192.4,207.7 192.4,209.2 193.3,209.2 193.3,206.8 194.2,206.8 194.2,209.3 195.1,209.3 195.1,208.0 196.1,208.0 196.1,208.0 197.0,208.0 197.0,207.9 197.9,207.9 197.9,208.2 198.8,208.2 198.8,207.9 199.7,207.9 199.7,207.0 200.6,207.0 200.6,208.8 201.5,208.8 201.5,208.0 202.4,208.0 202.4,208.0 203.3,208.0 203.3,209.2 204.2,209.2 204.2,206.7 205.1,206.7 205.1,206.7 206.0,206.7 206.0,208.5 206.9,208.5 206.9,208.9 207.8,208.9 207.8,210.1 208.7,210.1 208.7,206.4 209.6,206.4 209.6,209.4 210.5,209.4 210.5,210.1 211.4,210.1 211.4,207.6 212.3,207.6 212.3,209.5 213.2,209.5 213.2,208.7 214.2,208.7 214.2,211.1 215.1,211.1 215.1,210.1 216.0,210.1 216.0,211.7 216.9,211.7 216.9,208.8 217.8,208.8 217.8,209.2 218.7,209.2 218.7,207.7 219.6,207.7 219.6,208.1 220.5,208.1 220.5,206.4 221.4,206.4 221.4,206.7 222.3,206.7 222.3,207.3 223.2,207.3 223.2,207.8 224.1,207.8 224.1,208.7 225.0,208.7 225.0,210.1 225.9,210.1 225.9,210.0 226.8,210.0 226.8,206.9 227.7,206.9 227.7,209.0 228.6,209.0 228.6,208.7 229.5,208.7 229.5,209.1 230.4,209.1 230.4,208.6 231.3,208.6 231.3,208.9 232.3,208.9 232.3,207.3 233.2,207.3 233.2,208.9 234.1,208.9 234.1,209.2 235.0,209.2 235.0,207.3 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="287.5" cy="138.8" r="3.5"><title>#5828: 1.97×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="287.5" y1="54.0" x2="287.5" y2="133.8"/>
|
||||
<circle class="nj-theme-dot" cx="287.5" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="287.5" y="50.0" text-anchor="middle">1</text>
|
||||
<circle class="nj-charts-json-dot" cx="306.5" cy="127.0" r="3.5"><title>#5884: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="306.5" y1="54.0" x2="306.5" y2="122.0"/>
|
||||
<circle class="nj-theme-dot" cx="306.5" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="306.5" y="50.0" text-anchor="middle">1</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.6 KiB |
@@ -1,31 +1,34 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--timeline" viewBox="0 0 340 270" role="img" aria-labelledby="nj-blog-tl-to_cbor_twitter nj-blog-tl-to_cbor_twitter-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-tl-to_cbor_twitter">to_cbor() twitter: speedup over 3.12.0 by commit</title>
|
||||
<desc id="nj-blog-tl-to_cbor_twitter-d">to_cbor() twitter: speedup over 3.12.0 at each of 317 commits, ending at 5.0x. Labeled steps: #5328, #5824, #5885.</desc>
|
||||
<desc id="nj-blog-tl-to_cbor_twitter-d">to_cbor() twitter: speedup over 3.12.0 at each of 317 commits, ending at 5.0x. Labeled steps, by theme: 4, 6, 6.</desc>
|
||||
<text class="nj-charts-panel" x="8" y="18">to_cbor() twitter</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="212">1×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="159.333" x2="330" y2="159.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="163.333">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="110.667" x2="330" y2="110.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="114.667">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="62" x2="330" y2="62"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="66">8×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="160.667" x2="330" y2="160.667"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="164.667">2×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="113.333" x2="330" y2="113.333"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="117.333">4×</text>
|
||||
<line class="nj-charts-grid" x1="44" y1="66" x2="330" y2="66"/>
|
||||
<text class="nj-charts-tick nj-charts-tick--r" x="38" y="70">8×</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="44" y2="212"/>
|
||||
<text class="nj-charts-tick" x="44" y="225">3.12.0</text>
|
||||
<line class="nj-charts-axis" x1="126.361" y1="208" x2="126.361" y2="212"/>
|
||||
<text class="nj-charts-tick" x="126.361" y="225">Sep 2026</text>
|
||||
<line class="nj-charts-axis" x1="215.962" y1="208" x2="215.962" y2="212"/>
|
||||
<text class="nj-charts-tick" x="215.962" y="225">Oct</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.0 45.8,208.0 45.8,204.8 46.7,204.8 46.7,205.2 47.6,205.2 47.6,204.6 48.5,204.6 48.5,205.2 49.4,205.2 49.4,204.9 50.3,204.9 50.3,204.8 51.2,204.8 51.2,205.0 52.1,205.0 52.1,204.9 53.1,204.9 53.1,205.0 54.0,205.0 54.0,205.3 54.9,205.3 54.9,204.9 55.8,204.9 55.8,205.1 56.7,205.1 56.7,211.7 57.6,211.7 57.6,206.7 58.5,206.7 58.5,204.1 59.4,204.1 59.4,207.6 60.3,207.6 60.3,204.0 61.2,204.0 61.2,203.7 62.1,203.7 62.1,204.0 63.0,204.0 63.0,205.0 63.9,205.0 63.9,204.3 64.8,204.3 64.8,204.2 65.7,204.2 65.7,203.9 66.6,203.9 66.6,202.6 67.5,202.6 67.5,204.1 68.4,204.1 68.4,204.1 69.3,204.1 69.3,204.1 70.2,204.1 70.2,204.3 71.2,204.3 71.2,206.1 72.1,206.1 72.1,204.2 73.0,204.2 73.0,204.0 73.9,204.0 73.9,204.2 74.8,204.2 74.8,204.2 75.7,204.2 75.7,204.2 76.6,204.2 76.6,204.1 77.5,204.1 77.5,204.3 78.4,204.3 78.4,204.7 79.3,204.7 79.3,208.4 80.2,208.4 80.2,203.4 81.1,203.4 81.1,206.1 82.0,206.1 82.0,204.3 82.9,204.3 82.9,203.1 83.8,203.1 83.8,204.0 84.7,204.0 84.7,204.1 85.6,204.1 85.6,203.6 86.5,203.6 86.5,204.1 87.4,204.1 87.4,203.0 88.3,203.0 88.3,204.1 89.3,204.1 89.3,204.3 90.2,204.3 90.2,203.6 91.1,203.6 91.1,204.3 92.0,204.3 92.0,204.6 92.9,204.6 92.9,204.5 93.8,204.5 93.8,208.7 94.7,208.7 94.7,205.1 95.6,205.1 95.6,205.4 96.5,205.4 96.5,205.1 97.4,205.1 97.4,205.2 98.3,205.2 98.3,206.8 99.2,206.8 99.2,204.5 100.1,204.5 100.1,205.4 101.0,205.4 101.0,205.0 101.9,205.0 101.9,204.6 102.8,204.6 102.8,205.6 103.7,205.6 103.7,204.9 104.6,204.9 104.6,204.8 105.5,204.8 105.5,206.4 106.4,206.4 106.4,205.5 107.4,205.5 107.4,204.9 108.3,204.9 108.3,209.3 109.2,209.3 109.2,205.8 110.1,205.8 110.1,206.4 111.0,206.4 111.0,205.5 111.9,205.5 111.9,205.2 112.8,205.2 112.8,205.3 113.7,205.3 113.7,205.1 114.6,205.1 114.6,204.3 115.5,204.3 115.5,204.5 116.4,204.5 116.4,204.7 117.3,204.7 117.3,204.0 118.2,204.0 118.2,203.6 119.1,203.6 119.1,204.3 120.0,204.3 120.0,202.7 120.9,202.7 120.9,203.3 121.8,203.3 121.8,203.9 122.7,203.9 122.7,204.2 123.6,204.2 123.6,202.8 124.6,202.8 124.6,203.1 125.5,203.1 125.5,204.3 126.4,204.3 126.4,204.4 127.3,204.4 127.3,204.0 128.2,204.0 128.2,208.3 129.1,208.3 129.1,203.7 130.0,203.7 130.0,206.9 130.9,206.9 130.9,205.9 131.8,205.9 131.8,205.4 132.7,205.4 132.7,205.2 133.6,205.2 133.6,205.8 134.5,205.8 134.5,205.3 135.4,205.3 135.4,205.6 136.3,205.6 136.3,206.3 137.2,206.3 137.2,205.4 138.1,205.4 138.1,204.7 139.0,204.7 139.0,204.5 139.9,204.5 139.9,206.0 140.8,206.0 140.8,204.5 141.7,204.5 141.7,204.0 142.7,204.0 142.7,204.2 143.6,204.2 143.6,205.5 144.5,205.5 144.5,203.8 145.4,203.8 145.4,203.9 146.3,203.9 146.3,203.8 147.2,203.8 147.2,204.5 148.1,204.5 148.1,204.0 149.0,204.0 149.0,203.8 149.9,203.8 149.9,204.8 150.8,204.8 150.8,203.1 151.7,203.1 151.7,203.2 152.6,203.2 152.6,204.6 153.5,204.6 153.5,208.3 154.4,208.3 154.4,204.2 155.3,204.2 155.3,207.4 156.2,207.4 156.2,204.3 157.1,204.3 157.1,208.3 158.0,208.3 158.0,204.9 158.9,204.9 158.9,204.8 159.8,204.8 159.8,208.9 160.8,208.9 160.8,207.9 161.7,207.9 161.7,206.2 162.6,206.2 162.6,204.1 163.5,204.1 163.5,204.0 164.4,204.0 164.4,204.1 165.3,204.1 165.3,202.0 166.2,202.0 166.2,205.5 167.1,205.5 167.1,202.9 168.0,202.9 168.0,203.2 168.9,203.2 168.9,202.5 169.8,202.5 169.8,203.5 170.7,203.5 170.7,203.1 171.6,203.1 171.6,203.0 172.5,203.0 172.5,204.8 173.4,204.8 173.4,202.8 174.3,202.8 174.3,202.1 175.2,202.1 175.2,202.3 176.1,202.3 176.1,202.8 177.0,202.8 177.0,202.8 177.9,202.8 177.9,202.2 178.9,202.2 178.9,202.8 179.8,202.8 179.8,203.6 180.7,203.6 180.7,204.0 181.6,204.0 181.6,203.8 182.5,203.8 182.5,203.6 183.4,203.6 183.4,203.2 184.3,203.2 184.3,203.7 185.2,203.7 185.2,204.9 186.1,204.9 186.1,208.0 187.0,208.0 187.0,205.1 187.9,205.1 187.9,206.4 188.8,206.4 188.8,205.3 189.7,205.3 189.7,205.4 190.6,205.4 190.6,206.9 191.5,206.9 191.5,204.8 192.4,204.8 192.4,205.4 193.3,205.4 193.3,203.5 194.2,203.5 194.2,205.7 195.1,205.7 195.1,204.4 196.1,204.4 196.1,204.9 197.0,204.9 197.0,205.1 197.9,205.1 197.9,204.8 198.8,204.8 198.8,204.4 199.7,204.4 199.7,204.8 200.6,204.8 200.6,205.2 201.5,205.2 201.5,203.8 202.4,203.8 202.4,204.7 203.3,204.7 203.3,204.7 204.2,204.7 204.2,203.5 205.1,203.5 205.1,203.3 206.0,203.3 206.0,203.7 206.9,203.7 206.9,205.0 207.8,205.0 207.8,205.4 208.7,205.4 208.7,203.9 209.6,203.9 209.6,204.8 210.5,204.8 210.5,204.9 211.4,204.9 211.4,206.4 212.3,206.4 212.3,205.0 213.2,205.0 213.2,204.4 214.2,204.4 214.2,204.7 215.1,204.7 215.1,205.1 216.0,205.1 216.0,204.9 216.9,204.9 216.9,204.5 217.8,204.5 217.8,203.7 218.7,203.7 218.7,203.3 219.6,203.3 219.6,203.5 220.5,203.5 220.5,204.1 221.4,204.1 221.4,205.9 222.3,205.9 222.3,205.1 223.2,205.1 223.2,204.7 224.1,204.7 224.1,207.3 225.0,207.3 225.0,205.1 225.9,205.1 225.9,208.6 226.8,208.6 226.8,204.2 227.7,204.2 227.7,203.8 228.6,203.8 228.6,203.0 229.5,203.0 229.5,203.7 230.4,203.7 230.4,205.8 231.3,205.8 231.3,204.8 232.3,204.8 232.3,204.7 233.2,204.7 233.2,203.5 234.1,203.5 234.1,203.6 235.0,203.6 235.0,208.2 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="256.7" cy="152.2" r="3.5"><title>#5328: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="256.7" y1="54.0" x2="256.7" y2="147.2"/>
|
||||
<text class="nj-charts-note" x="256.7" y="50.0" text-anchor="middle">#5328</text>
|
||||
<circle class="nj-charts-json-dot" cx="295.6" cy="121.0" r="3.5"><title>#5824: 3.5×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="295.6" y1="41.0" x2="295.6" y2="116.0"/>
|
||||
<text class="nj-charts-note" x="295.6" y="37.0" text-anchor="middle">#5824</text>
|
||||
<circle class="nj-charts-json-dot" cx="309.2" cy="93.7" r="3.5"><title>#5885: 5.1×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="309.2" y1="54.0" x2="309.2" y2="88.7"/>
|
||||
<text class="nj-charts-note" x="309.2" y="50.0" text-anchor="middle">#5885</text>
|
||||
<polyline class="nj-charts-json" points="44.0,208.0 44.9,208.0 44.9,208.0 45.8,208.0 45.8,204.9 46.7,204.9 46.7,205.2 47.6,205.2 47.6,204.7 48.5,204.7 48.5,205.2 49.4,205.2 49.4,205.0 50.3,205.0 50.3,204.9 51.2,204.9 51.2,205.0 52.1,205.0 52.1,205.0 53.1,205.0 53.1,205.1 54.0,205.1 54.0,205.4 54.9,205.4 54.9,205.0 55.8,205.0 55.8,205.2 56.7,205.2 56.7,211.6 57.6,211.6 57.6,206.8 58.5,206.8 58.5,204.2 59.4,204.2 59.4,207.6 60.3,207.6 60.3,204.1 61.2,204.1 61.2,203.8 62.1,203.8 62.1,204.2 63.0,204.2 63.0,205.1 63.9,205.1 63.9,204.4 64.8,204.4 64.8,204.3 65.7,204.3 65.7,204.0 66.6,204.0 66.6,202.7 67.5,202.7 67.5,204.2 68.4,204.2 68.4,204.2 69.3,204.2 69.3,204.2 70.2,204.2 70.2,204.4 71.2,204.4 71.2,206.2 72.1,206.2 72.1,204.3 73.0,204.3 73.0,204.1 73.9,204.1 73.9,204.3 74.8,204.3 74.8,204.3 75.7,204.3 75.7,204.3 76.6,204.3 76.6,204.3 77.5,204.3 77.5,204.4 78.4,204.4 78.4,204.8 79.3,204.8 79.3,208.4 80.2,208.4 80.2,203.5 81.1,203.5 81.1,206.2 82.0,206.2 82.0,204.4 82.9,204.4 82.9,203.2 83.8,203.2 83.8,204.1 84.7,204.1 84.7,204.2 85.6,204.2 85.6,203.7 86.5,203.7 86.5,204.2 87.4,204.2 87.4,203.2 88.3,203.2 88.3,204.2 89.3,204.2 89.3,204.4 90.2,204.4 90.2,203.8 91.1,203.8 91.1,204.4 92.0,204.4 92.0,204.7 92.9,204.7 92.9,204.6 93.8,204.6 93.8,208.7 94.7,208.7 94.7,205.2 95.6,205.2 95.6,205.5 96.5,205.5 96.5,205.2 97.4,205.2 97.4,205.3 98.3,205.3 98.3,206.8 99.2,206.8 99.2,204.6 100.1,204.6 100.1,205.5 101.0,205.5 101.0,205.1 101.9,205.1 101.9,204.7 102.8,204.7 102.8,205.7 103.7,205.7 103.7,205.0 104.6,205.0 104.6,204.9 105.5,204.9 105.5,206.5 106.4,206.5 106.4,205.6 107.4,205.6 107.4,205.0 108.3,205.0 108.3,209.2 109.2,209.2 109.2,205.9 110.1,205.9 110.1,206.5 111.0,206.5 111.0,205.5 111.9,205.5 111.9,205.3 112.8,205.3 112.8,205.3 113.7,205.3 113.7,205.1 114.6,205.1 114.6,204.4 115.5,204.4 115.5,204.6 116.4,204.6 116.4,204.8 117.3,204.8 117.3,204.2 118.2,204.2 118.2,203.8 119.1,203.8 119.1,204.4 120.0,204.4 120.0,202.8 120.9,202.8 120.9,203.5 121.8,203.5 121.8,204.0 122.7,204.0 122.7,204.3 123.6,204.3 123.6,202.9 124.6,202.9 124.6,203.3 125.5,203.3 125.5,204.4 126.4,204.4 126.4,204.5 127.3,204.5 127.3,204.1 128.2,204.1 128.2,208.3 129.1,208.3 129.1,203.8 130.0,203.8 130.0,207.0 130.9,207.0 130.9,205.9 131.8,205.9 131.8,205.4 132.7,205.4 132.7,205.3 133.6,205.3 133.6,205.8 134.5,205.8 134.5,205.4 135.4,205.4 135.4,205.6 136.3,205.6 136.3,206.3 137.2,206.3 137.2,205.5 138.1,205.5 138.1,204.8 139.0,204.8 139.0,204.6 139.9,204.6 139.9,206.1 140.8,206.1 140.8,204.6 141.7,204.6 141.7,204.1 142.7,204.1 142.7,204.3 143.6,204.3 143.6,205.6 144.5,205.6 144.5,203.9 145.4,203.9 145.4,204.0 146.3,204.0 146.3,203.9 147.2,203.9 147.2,204.6 148.1,204.6 148.1,204.1 149.0,204.1 149.0,203.9 149.9,203.9 149.9,204.8 150.8,204.8 150.8,203.2 151.7,203.2 151.7,203.3 152.6,203.3 152.6,204.7 153.5,204.7 153.5,208.3 154.4,208.3 154.4,204.3 155.3,204.3 155.3,207.4 156.2,207.4 156.2,204.4 157.1,204.4 157.1,208.2 158.0,208.2 158.0,205.0 158.9,205.0 158.9,204.9 159.8,204.9 159.8,208.8 160.8,208.8 160.8,207.9 161.7,207.9 161.7,206.2 162.6,206.2 162.6,204.2 163.5,204.2 163.5,204.1 164.4,204.1 164.4,204.2 165.3,204.2 165.3,202.2 166.2,202.2 166.2,205.6 167.1,205.6 167.1,203.0 168.0,203.0 168.0,203.4 168.9,203.4 168.9,202.7 169.8,202.7 169.8,203.6 170.7,203.6 170.7,203.3 171.6,203.3 171.6,203.2 172.5,203.2 172.5,204.9 173.4,204.9 173.4,202.9 174.3,202.9 174.3,202.2 175.2,202.2 175.2,202.5 176.1,202.5 176.1,202.9 177.0,202.9 177.0,202.9 177.9,202.9 177.9,202.3 178.9,202.3 178.9,202.9 179.8,202.9 179.8,203.7 180.7,203.7 180.7,204.1 181.6,204.1 181.6,203.9 182.5,203.9 182.5,203.7 183.4,203.7 183.4,203.3 184.3,203.3 184.3,203.8 185.2,203.8 185.2,205.0 186.1,205.0 186.1,208.0 187.0,208.0 187.0,205.1 187.9,205.1 187.9,206.5 188.8,206.5 188.8,205.4 189.7,205.4 189.7,205.4 190.6,205.4 190.6,207.0 191.5,207.0 191.5,204.9 192.4,204.9 192.4,205.4 193.3,205.4 193.3,203.6 194.2,203.6 194.2,205.7 195.1,205.7 195.1,204.5 196.1,204.5 196.1,205.0 197.0,205.0 197.0,205.2 197.9,205.2 197.9,204.9 198.8,204.9 198.8,204.5 199.7,204.5 199.7,204.9 200.6,204.9 200.6,205.3 201.5,205.3 201.5,203.9 202.4,203.9 202.4,204.8 203.3,204.8 203.3,204.8 204.2,204.8 204.2,203.6 205.1,203.6 205.1,203.4 206.0,203.4 206.0,203.8 206.9,203.8 206.9,205.1 207.8,205.1 207.8,205.5 208.7,205.5 208.7,204.0 209.6,204.0 209.6,204.9 210.5,204.9 210.5,205.0 211.4,205.0 211.4,206.4 212.3,206.4 212.3,205.1 213.2,205.1 213.2,204.5 214.2,204.5 214.2,204.8 215.1,204.8 215.1,205.2 216.0,205.2 216.0,205.0 216.9,205.0 216.9,204.6 217.8,204.6 217.8,203.9 218.7,203.9 218.7,203.5 219.6,203.5 219.6,203.6 220.5,203.6 220.5,204.2 221.4,204.2 221.4,205.9 222.3,205.9 222.3,205.2 223.2,205.2 223.2,204.8 224.1,204.8 224.1,207.3 225.0,207.3 225.0,205.2 225.9,205.2 225.9,208.6 226.8,208.6 226.8,204.3 227.7,204.3 227.7,203.9 228.6,203.9 228.6,203.2 229.5,203.2 229.5,203.9 230.4,203.9 230.4,205.9 231.3,205.9 231.3,204.8 232.3,204.8 232.3,204.7 233.2,204.7 233.2,203.6 234.1,203.6 234.1,203.7 235.0,203.7 235.0,208.2 235.9Line truncated
|
||||
<circle class="nj-charts-json-dot" cx="256.7" cy="153.7" r="3.5"><title>#5328: 2.2×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="256.7" y1="54.0" x2="256.7" y2="148.7"/>
|
||||
<circle class="nj-theme-dot" cx="256.7" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="256.7" y="50.0" text-anchor="middle">4</text>
|
||||
<circle class="nj-charts-json-dot" cx="295.6" cy="123.4" r="3.5"><title>#5824: 3.5×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="295.6" y1="54.0" x2="295.6" y2="118.4"/>
|
||||
<circle class="nj-theme-dot" cx="295.6" cy="46.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="295.6" y="50.0" text-anchor="middle">6</text>
|
||||
<circle class="nj-charts-json-dot" cx="309.2" cy="96.9" r="3.5"><title>#5885: 5.1×</title></circle>
|
||||
<line class="nj-charts-grid" stroke-dasharray="2 2" x1="309.2" y1="36.0" x2="309.2" y2="91.9"/>
|
||||
<circle class="nj-theme-dot" cx="309.2" cy="28.0" r="7.5"/>
|
||||
<text class="nj-theme-num" x="309.2" y="32.0" text-anchor="middle">6</text>
|
||||
<line class="nj-charts-axis" x1="44" y1="208" x2="330" y2="208"/>
|
||||
<text class="nj-charts-note" x="8" y="262">speedup over 3.12.0 (log scale), more is better</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.9 KiB |
@@ -0,0 +1,359 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-mac nj-blog-uc-mac-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-uc-mac">Use cases: time of each library relative to the fastest, Apple M1 Max</title>
|
||||
<desc id="nj-blog-uc-mac-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.00; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.30; yyjson sum: 1.14; yyjson select: 1.29; yyjson edit: 1.48; yyjson minify: 1.24; yyjson write: 1.24; sonic-rs (Rust) validate: 1.79; sonic-rs (Rust) sum: 1.54; sonic-rs (Rust) select: 1.84; sonic-rs (Rust) edit: 2.09; sonic-rs (Rust) minify: 1.93; sonic-rs (Rust) write: 2.37; simdjson validate: 1.46; simdjson sum: 1.24; simdjson select: 1.48 (0.85 checking less, partial); simdjson edit: n/a; simdjson minify: 2.41 (0.19 checking less, partial); simdjson write: 4.02; simd-json (Rust) validate: 1.95; simd-json (Rust) sum: 1.65; simd-json (Rust) select: 2.35; simd-json (Rust) edit: 2.84; simd-json (Rust) minify: 3.39; simd-json (Rust) write: 3.13; sonic-cpp validate: no fully validating way (2.33 checking less, no U​TF-8); sonic-cpp sum: no fully validating way (1.85 checking less, no U​TF-8); sonic-cpp select: no fully validating way (2.30 checking less, no U​TF-8); sonic-cpp edit: no fully validating way (1.70 checking less, no U​TF-8); sonic-cpp minify: no fully validating way (2.02 checking less, no U​TF-8); sonic-cpp write: 1.59; Glaze validate: 1.88; Glaze sum: 5.58; Glaze select: 1.82 (0.83 checking less, partial); Glaze edit: 4.44; Glaze minify: 5.18 (1.04 checking less, partial); Glaze write: 2.21; Boost.J​SON validate: 2.87; Boost.J​SON sum: 2.00; Boost.J​SON select: 4.09; Boost.J​SON edit: 3.23; Boost.J​SON minify: 3.86; Boost.J​SON write: 3.68; serde_json (Rust) validate: 2.28 (2.06 checking less, no U​TF-8); serde_json (Rust) sum: 2.59; serde_json (Rust) select: 2.38 (2.24 checking less, no U​TF-8); serde_json (Rust) edit: 4.97; serde_json (Rust) minify: 5.80; serde_json (Rust) write: 2.95; nlohmann/json json validate: 2.65; nlohmann/json json sum: 1.96; nlohmann/json json select: 6.83; nlohmann/json json edit: 3.58; nlohmann/json json minify: 4.87; nlohmann/json json write: 2.05; RapidJSON validate: 6.21 (4.04 checking less, no U​TF-8); RapidJSON sum: 4.45 (3.02 checking less, no U​TF-8); RapidJSON select: 5.90 (3.85 checking less, no U​TF-8); RapidJSON edit: 4.85 (3.82 checking less, no U​TF-8); RapidJSON minify: 4.85 (4.54 checking less, no U​TF-8); RapidJSON write: 5.78.</desc>
|
||||
<text class="nj-charts-tick" x="270" y="34">validate</text>
|
||||
<text class="nj-charts-tick" x="362" y="34">sum</text>
|
||||
<text class="nj-charts-tick" x="454" y="34">select</text>
|
||||
<text class="nj-charts-tick" x="546" y="34">edit</text>
|
||||
<text class="nj-charts-tick" x="638" y="34">minify</text>
|
||||
<text class="nj-charts-tick" x="730" y="34">write</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate 1.00× the time of the fastest library (fully validating) way: parse twitter.json: 176 µs citm_catalog.json: 359 µs canada.json: 943 µs jeopardy.json: 22,862 µs">
|
||||
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum 1.00× the time of the fastest library (fully validating) way: parse twitter.json: 226 µs citm_catalog.json: 480 µs canada.json: 1,804 µs jeopardy.json: 29,208 µs">
|
||||
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select 1.00× the time of the fastest library (fully validating) twitter.json: 187 µs · structs (from_json) citm_catalog.json: 367 µs · parse canada.json: 987 µs · structs (from_json) jeopardy.json: 24,409 µs · parse">
|
||||
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit 1.00× the time of the fastest library (fully validating) way: editable twitter.json: 290 µs citm_catalog.json: 560 µs canada.json: 2,742 µs jeopardy.json: 58,265 µs">
|
||||
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify 1.00× the time of the fastest library (fully validating) way: parse + dump twitter.json: 264 µs citm_catalog.json: 496 µs canada.json: 2,566 µs jeopardy.json: 37,936 µs">
|
||||
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write 1.00× the time of the fastest library (fully validating) way: dump twitter.json: 75.2 µs citm_catalog.json: 136 µs canada.json: 1,621 µs jeopardy.json: 14,846 µs">
|
||||
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate 1.30× the time of the fastest library (fully validating) twitter.json: 180 µs · insitu (copy) citm_catalog.json: 473 µs · read canada.json: 1,493 µs · read jeopardy.json: 30,542 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="225" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.30</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum 1.14× the time of the fastest library (fully validating) twitter.json: 229 µs · insitu (copy) citm_catalog.json: 573 µs · read canada.json: 1,937 µs · read jeopardy.json: 37,916 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-0" x="317" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.14</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select 1.29× the time of the fastest library (fully validating) twitter.json: 188 µs · insitu (copy) citm_catalog.json: 481 µs · read canada.json: 1,493 µs · read jeopardy.json: 33,546 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.29</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit 1.48× the time of the fastest library (fully validating) twitter.json: 438 µs · insitu (copy) + mut copy citm_catalog.json: 900 µs · mut copy canada.json: 3,694 µs · insitu (copy) + mut copy jeopardy.json: 84,447 µs · mut copy (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="501" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.48</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify 1.24× the time of the fastest library (fully validating) twitter.json: 289 µs · insitu (copy) + write citm_catalog.json: 640 µs · insitu (copy) + write canada.json: 3,213 µs · read + write jeopardy.json: 50,740 µs · read + write (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.24</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write 1.24× the time of the fastest library (fully validating) way: write twitter.json: 104 µs citm_catalog.json: 164 µs canada.json: 1,717 µs jeopardy.json: 20,119 µs">
|
||||
<rect class="nj-heat-1" x="685" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.24</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate 1.79× the time of the fastest library (fully validating) way: Value twitter.json: 329 µs citm_catalog.json: 684 µs canada.json: 1,930 µs jeopardy.json: 32,169 µs">
|
||||
<rect class="nj-heat-2" x="225" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.79</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum 1.54× the time of the fastest library (fully validating) way: visitor twitter.json: 372 µs citm_catalog.json: 778 µs canada.json: 2,695 µs jeopardy.json: 41,462 µs">
|
||||
<rect class="nj-heat-2" x="317" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.54</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select 1.84× the time of the fastest library (fully validating) way: Value twitter.json: 340 µs citm_catalog.json: 700 µs canada.json: 1,938 µs jeopardy.json: 41,203 µs">
|
||||
<rect class="nj-heat-2" x="409" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.84</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit 2.09× the time of the fastest library (fully validating) way: Value twitter.json: 634 µs citm_catalog.json: 1,264 µs canada.json: 4,379 µs jeopardy.json: 140,693 µs">
|
||||
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">2.09</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify 1.93× the time of the fastest library (fully validating) way: Value twitter.json: 546 µs citm_catalog.json: 1,139 µs canada.json: 4,366 µs jeopardy.json: 64,830 µs">
|
||||
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.93</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write 2.37× the time of the fastest library (fully validating) way: Value twitter.json: 214 µs citm_catalog.json: 454 µs canada.json: 2,414 µs jeopardy.json: 33,358 µs">
|
||||
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">2.37</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate 1.46× the time of the fastest library (fully validating) way: D​OM twitter.json: 221 µs citm_catalog.json: 493 µs canada.json: 2,104 µs jeopardy.json: 27,311 µs">
|
||||
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.46</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum 1.24× the time of the fastest library (fully validating) twitter.json: 256 µs · On-Demand citm_catalog.json: 608 µs · On-Demand canada.json: 2,594 µs · D​OM jeopardy.json: 33,706 µs · D​OM">
|
||||
<rect class="nj-heat-1" x="317" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.24</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select 1.48× the time of the fastest library (fully validating) way: D​OM twitter.json: 231 µs citm_catalog.json: 510 µs canada.json: 2,104 µs jeopardy.json: 32,075 µs">
|
||||
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.48</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less 0.85× the time of the fastest fully validating library way: On-Demand twitter.json: 144 µs citm_catalog.json: 500 µs canada.json: 646 µs jeopardy.json: 18,601 µs reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
|
||||
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.85</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit simdjson's documents are read-only: it has no A​PI to change a value and write the result">
|
||||
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-tick" x="546" y="174">n/a</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify 2.41× the time of the fastest library (fully validating) way: D​OM + to_string twitter.json: 590 µs citm_catalog.json: 990 µs canada.json: 8,949 µs jeopardy.json: 82,232 µs">
|
||||
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">2.41</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less 0.19× the time of the fastest fully validating library way: minify twitter.json: 65.0 µs citm_catalog.json: 178 µs canada.json: 236 µs jeopardy.json: 5,929 µs simdjson::minify() only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.19</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write 4.02× the time of the fastest library (fully validating) way: to_string twitter.json: 352 µs citm_catalog.json: 494 µs canada.json: 6,770 µs jeopardy.json: 54,528 µs">
|
||||
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">4.02</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">simd-json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate 1.95× the time of the fastest library (fully validating) way: tape (copy) twitter.json: 304 µs citm_catalog.json: 709 µs canada.json: 2,286 µs jeopardy.json: 39,592 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="225" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="210" text-anchor="middle">1.95</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum 1.65× the time of the fastest library (fully validating) way: visitor (copy) twitter.json: 372 µs citm_catalog.json: 866 µs canada.json: 2,727 µs jeopardy.json: 48,506 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="317" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="210" text-anchor="middle">1.65</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select 2.35× the time of the fastest library (fully validating) way: structs (copy) twitter.json: 375 µs citm_catalog.json: 871 µs canada.json: 2,660 µs jeopardy.json: 57,877 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="409" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="210" text-anchor="middle">2.35</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit 2.84× the time of the fastest library (fully validating) way: borrowed (copy) twitter.json: 934 µs citm_catalog.json: 2,111 µs canada.json: 7,695 µs jeopardy.json: 111,832 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="210" text-anchor="middle">2.84</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify 3.39× the time of the fastest library (fully validating) way: borrowed (copy) twitter.json: 959 µs citm_catalog.json: 2,097 µs canada.json: 7,743 µs jeopardy.json: 107,444 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="593" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="210" text-anchor="middle">3.39</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write 3.13× the time of the fastest library (fully validating) way: borrowed twitter.json: 364 µs citm_catalog.json: 496 µs canada.json: 2,723 µs jeopardy.json: 48,114 µs">
|
||||
<rect class="nj-heat-3" x="685" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">3.13</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">sonic-cpp</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less 2.33× the time of the fastest fully validating library way: Document twitter.json: 380 µs citm_catalog.json: 982 µs canada.json: 2,577 µs jeopardy.json: 41,571 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="240" text-anchor="middle">2.33</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="253" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less 1.85× the time of the fastest fully validating library way: Document twitter.json: 427 µs citm_catalog.json: 1,091 µs canada.json: 2,976 µs jeopardy.json: 48,840 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-2" x="317" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="240" text-anchor="middle">1.85</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="253" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less 2.30× the time of the fastest fully validating library way: Document twitter.json: 385 µs citm_catalog.json: 992 µs canada.json: 2,590 µs jeopardy.json: 46,922 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-2" x="409" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="240" text-anchor="middle">2.30</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="253" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less 1.70× the time of the fastest fully validating library way: Document twitter.json: 490 µs citm_catalog.json: 1,227 µs canada.json: 5,655 µs jeopardy.json: 63,940 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="240" text-anchor="middle">1.70</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="253" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less 2.02× the time of the fastest fully validating library way: Document + Serialize twitter.json: 497 µs citm_catalog.json: 1,219 µs canada.json: 5,658 µs jeopardy.json: 61,948 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-2" x="593" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="240" text-anchor="middle">2.02</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="253" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write 1.59× the time of the fastest library (fully validating) way: Serialize twitter.json: 111 µs citm_catalog.json: 231 µs canada.json: 3,047 µs jeopardy.json: 20,342 µs">
|
||||
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">1.59</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">Glaze</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate 1.88× the time of the fastest library (fully validating) way: validate_json twitter.json: 329 µs citm_catalog.json: 853 µs canada.json: 1,302 µs jeopardy.json: 46,471 µs">
|
||||
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">1.88</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum 5.58× the time of the fastest library (fully validating) way: generic twitter.json: 1,323 µs citm_catalog.json: 2,845 µs canada.json: 9,777 µs jeopardy.json: 151,441 µs">
|
||||
<rect class="nj-heat-4" x="317" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">5.58</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select 1.82× the time of the fastest library (fully validating) way: structs (validate_skipped) twitter.json: 312 µs citm_catalog.json: 873 µs canada.json: 1,304 µs jeopardy.json: 51,046 µs">
|
||||
<rect class="nj-heat-2" x="409" y="261" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="282" text-anchor="middle">1.82</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less 0.83× the time of the fastest fully validating library way: structs twitter.json: 238 µs citm_catalog.json: 252 µs canada.json: 316 µs jeopardy.json: 41,037 µs reads into structs and steps over fields it doesn't know without checking them (validate_skipped checks them too)">
|
||||
<rect class="nj-heat-0" x="455" y="261" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="276" text-anchor="middle">0.83</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="289" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit 4.44× the time of the fastest library (fully validating) way: generic twitter.json: 1,503 µs citm_catalog.json: 3,223 µs canada.json: 11,125 µs jeopardy.json: 187,294 µs">
|
||||
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">4.44</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify 5.18× the time of the fastest library (fully validating) way: generic twitter.json: 1,488 µs citm_catalog.json: 3,208 µs canada.json: 11,076 µs jeopardy.json: 172,917 µs">
|
||||
<rect class="nj-heat-4" x="593" y="261" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="282" text-anchor="middle">5.18</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less 1.04× the time of the fastest fully validating library way: minify_json twitter.json: 283 µs citm_catalog.json: 740 µs canada.json: 1,808 µs jeopardy.json: 39,976 µs minify_json only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="261" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="276" text-anchor="middle">1.04</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="289" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write 2.21× the time of the fastest library (fully validating) way: generic twitter.json: 212 µs citm_catalog.json: 469 µs canada.json: 1,692 µs jeopardy.json: 34,921 µs">
|
||||
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.21</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">Boost.J​SON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · validate 2.87× the time of the fastest library (fully validating) way: S​AX twitter.json: 536 µs citm_catalog.json: 1,017 µs canada.json: 3,065 µs jeopardy.json: 55,102 µs">
|
||||
<rect class="nj-heat-3" x="225" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="318" text-anchor="middle">2.87</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · sum 2.00× the time of the fastest library (fully validating) way: S​AX twitter.json: 537 µs citm_catalog.json: 1,020 µs canada.json: 3,046 µs jeopardy.json: 54,818 µs">
|
||||
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · select 4.09× the time of the fastest library (fully validating) way: parse twitter.json: 889 µs citm_catalog.json: 1,490 µs canada.json: 3,632 µs jeopardy.json: 96,757 µs">
|
||||
<rect class="nj-heat-3" x="409" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">4.09</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · edit 3.23× the time of the fastest library (fully validating) way: parse twitter.json: 1,367 µs citm_catalog.json: 1,999 µs canada.json: 6,542 µs jeopardy.json: 157,555 µs">
|
||||
<rect class="nj-heat-3" x="501" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">3.23</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · minify 3.86× the time of the fastest library (fully validating) way: parse + serialize twitter.json: 1,391 µs citm_catalog.json: 1,987 µs canada.json: 6,586 µs jeopardy.json: 154,714 µs">
|
||||
<rect class="nj-heat-3" x="593" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">3.86</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · write 3.68× the time of the fastest library (fully validating) way: serialize twitter.json: 499 µs citm_catalog.json: 503 µs canada.json: 2,868 µs jeopardy.json: 62,964 µs">
|
||||
<rect class="nj-heat-3" x="685" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">3.68</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">serde_json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate 2.28× the time of the fastest library (fully validating) way: from_utf8 + IgnoredAny twitter.json: 457 µs citm_catalog.json: 1,105 µs canada.json: 1,532 µs jeopardy.json: 47,547 µs">
|
||||
<rect class="nj-heat-2" x="225" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="354" text-anchor="middle">2.28</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less 2.06× the time of the fastest fully validating library way: IgnoredAny twitter.json: 354 µs citm_catalog.json: 1,052 µs canada.json: 1,459 µs jeopardy.json: 44,881 µs trusts U​TF-8 in the strings it skips (from_slice); strings it reads are checked">
|
||||
<rect class="nj-heat-2" x="271" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="348" text-anchor="middle">2.06</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum 2.59× the time of the fastest library (fully validating) way: visitor twitter.json: 665 µs citm_catalog.json: 1,229 µs canada.json: 4,813 µs jeopardy.json: 66,093 µs">
|
||||
<rect class="nj-heat-3" x="317" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="354" text-anchor="middle">2.59</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select 2.38× the time of the fastest library (fully validating) way: from_utf8 + structs twitter.json: 483 µs citm_catalog.json: 1,121 µs canada.json: 1,532 µs jeopardy.json: 63,635 µs">
|
||||
<rect class="nj-heat-2" x="409" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">2.38</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select, checking less 2.24× the time of the fastest fully validating library twitter.json: 416 µs · structs citm_catalog.json: 1,082 µs · structs canada.json: 1,458 µs · structs jeopardy.json: 63,635 µs · from_utf8 + structs (validates fully) trusts U​TF-8 in the strings it skips (from_slice); strings it reads are checked">
|
||||
<rect class="nj-heat-2" x="455" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">2.24</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit 4.97× the time of the fastest library (fully validating) way: Value twitter.json: 2,001 µs citm_catalog.json: 3,287 µs canada.json: 9,670 µs jeopardy.json: 248,681 µs">
|
||||
<rect class="nj-heat-3" x="501" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">4.97</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify 5.80× the time of the fastest library (fully validating) way: Value twitter.json: 1,999 µs citm_catalog.json: 3,240 µs canada.json: 9,748 µs jeopardy.json: 227,301 µs">
|
||||
<rect class="nj-heat-4" x="593" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="354" text-anchor="middle">5.80</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write 2.95× the time of the fastest library (fully validating) way: Value twitter.json: 327 µs citm_catalog.json: 504 µs canada.json: 2,257 µs jeopardy.json: 49,857 µs">
|
||||
<rect class="nj-heat-3" x="685" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">2.95</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="390" text-anchor="end">nlohmann/json json</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate 2.65× the time of the fastest library (fully validating) way: accept twitter.json: 481 µs citm_catalog.json: 897 µs canada.json: 2,463 µs jeopardy.json: 63,383 µs">
|
||||
<rect class="nj-heat-3" x="225" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">2.65</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum 1.96× the time of the fastest library (fully validating) way: sax twitter.json: 461 µs citm_catalog.json: 928 µs canada.json: 3,100 µs jeopardy.json: 63,272 µs">
|
||||
<rect class="nj-heat-2" x="317" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="390" text-anchor="middle">1.96</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select 6.83× the time of the fastest library (fully validating) twitter.json: 1,357 µs · structs (from_json) citm_catalog.json: 2,439 µs · structs (from_json) canada.json: 6,066 µs · structs (from_json) jeopardy.json: 179,366 µs · parse">
|
||||
<rect class="nj-heat-4" x="409" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">6.83</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit 3.58× the time of the fastest library (fully validating) twitter.json: 1,269 µs · ordered_json citm_catalog.json: 2,376 µs · ordered_json canada.json: 8,194 µs · parse jeopardy.json: 173,089 µs · ordered_json">
|
||||
<rect class="nj-heat-3" x="501" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">3.58</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify 4.87× the time of the fastest library (fully validating) way: parse + dump twitter.json: 1,592 µs citm_catalog.json: 2,694 µs canada.json: 8,280 µs jeopardy.json: 200,923 µs">
|
||||
<rect class="nj-heat-3" x="593" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">4.87</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write 2.05× the time of the fastest library (fully validating) way: dump twitter.json: 220 µs citm_catalog.json: 286 µs canada.json: 2,240 µs jeopardy.json: 30,983 µs">
|
||||
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">2.05</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="426" text-anchor="end">RapidJSON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate 6.21× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,314 µs citm_catalog.json: 1,568 µs canada.json: 6,871 µs jeopardy.json: 142,654 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-4" x="225" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">6.21</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less 4.04× the time of the fastest fully validating library way: insitu (copy) (no encoding check) twitter.json: 704 µs citm_catalog.json: 1,150 µs canada.json: 6,851 µs jeopardy.json: 65,584 µs trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="271" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">4.04</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum 4.45× the time of the fastest library (fully validating) twitter.json: 1,331 µs · S​AX citm_catalog.json: 1,626 µs · S​AX canada.json: 6,924 µs · S​AX jeopardy.json: 149,474 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="317" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">4.45</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less 3.02× the time of the fastest fully validating library twitter.json: 755 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,258 µs · insitu (copy) (no encoding check) canada.json: 6,924 µs · S​AX (validates fully) jeopardy.json: 72,381 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="363" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">3.02</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select 5.90× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,319 µs citm_catalog.json: 1,572 µs canada.json: 6,762 µs jeopardy.json: 142,740 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-4" x="409" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">5.90</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less 3.85× the time of the fastest fully validating library twitter.json: 703 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,146 µs · insitu (copy) (no encoding check) canada.json: 6,762 µs · insitu (copy) (validates fully) jeopardy.json: 66,763 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="455" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.85</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit 4.85× the time of the fastest library (fully validating) twitter.json: 1,917 µs · Document citm_catalog.json: 2,404 µs · insitu (copy) canada.json: 13,880 µs · insitu (copy) jeopardy.json: 224,650 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">4.85</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less 3.82× the time of the fastest fully validating library twitter.json: 1,349 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,987 µs · insitu (copy) (no encoding check) canada.json: 13,880 µs · insitu (copy) (validates fully) jeopardy.json: 148,239 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="547" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">3.82</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify 4.85× the time of the fastest library (fully validating) twitter.json: 1,497 µs · S​AX to Writer citm_catalog.json: 1,797 µs · S​AX to Writer canada.json: 14,455 µs · Document + Writer jeopardy.json: 181,502 µs · S​AX to Writer">
|
||||
<rect class="nj-heat-3" x="593" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">4.85</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less 4.54× the time of the fastest fully validating library twitter.json: 1,310 µs · S​AX to Writer (no encoding check) citm_catalog.json: 1,699 µs · S​AX to Writer (no encoding check) canada.json: 14,455 µs · Document + Writer (validates fully) jeopardy.json: 167,920 µs · S​AX to Writer (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it)">
|
||||
<rect class="nj-heat-3" x="639" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">4.54</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write 5.78× the time of the fastest library (fully validating) way: Writer twitter.json: 592 µs citm_catalog.json: 818 µs canada.json: 6,947 µs jeopardy.json: 81,580 µs">
|
||||
<rect class="nj-heat-4" x="685" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">5.78</text>
|
||||
</g>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
|
||||
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="46" y="496" text-anchor="middle">below 1.15</text></g>
|
||||
<g><rect class="nj-heat-1" x="88" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="126" y="496" text-anchor="middle">1.15 to 1.5</text></g>
|
||||
<g><rect class="nj-heat-2" x="168" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="206" y="496" text-anchor="middle">1.5 to 2.5</text></g>
|
||||
<g><rect class="nj-heat-3" x="248" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="286" y="496" text-anchor="middle">2.5 to 5</text></g>
|
||||
<g><rect class="nj-heat-4" x="328" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="366" y="496" text-anchor="middle">5 and more</text></g>
|
||||
<rect class="nj-heat-na" x="420" y="482" width="40" height="20" rx="3"/>
|
||||
<text class="nj-charts-tick" x="440" y="496">n/a</text>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="468" y="496">no A​PI for it</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,359 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-x86-clang nj-blog-uc-x86-clang-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-uc-x86-clang">Use cases: time of each library relative to the fastest, x86-64 with Clang 23</title>
|
||||
<desc id="nj-blog-uc-x86-clang-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.00; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.40; yyjson sum: 1.14; yyjson select: 1.38; yyjson edit: 1.50; yyjson minify: 1.28; yyjson write: 1.18; sonic-rs (Rust) validate: 1.15; sonic-rs (Rust) sum: 1.05; sonic-rs (Rust) select: 1.33; sonic-rs (Rust) edit: 1.90; sonic-rs (Rust) minify: 1.73; sonic-rs (Rust) write: 2.00; simdjson validate: 1.29; simdjson sum: 1.10; simdjson select: 1.29 (0.61 checking less, partial); simdjson edit: n/a; simdjson minify: 2.06 (0.19 checking less, partial); simdjson write: 3.18; sonic-cpp validate: no fully validating way (1.46 checking less, no U​TF-8); sonic-cpp sum: no fully validating way (1.18 checking less, no U​TF-8); sonic-cpp select: no fully validating way (1.43 checking less, no U​TF-8); sonic-cpp edit: no fully validating way (1.18 checking less, no U​TF-8); sonic-cpp minify: no fully validating way (1.37 checking less, no U​TF-8); sonic-cpp write: 1.37; Boost.J​SON validate: 1.58; Boost.J​SON sum: 1.10; Boost.J​SON select: 3.00; Boost.J​SON edit: 2.30; Boost.J​SON minify: 2.69; Boost.J​SON write: 2.36; simd-json (Rust) validate: 2.22; simd-json (Rust) sum: 1.83; simd-json (Rust) select: 2.54; simd-json (Rust) edit: 3.05; simd-json (Rust) minify: 3.42; simd-json (Rust) write: 2.24; serde_json (Rust) validate: 1.47 (1.31 checking less, no U​TF-8); serde_json (Rust) sum: 2.18; serde_json (Rust) select: 1.69; serde_json (Rust) edit: 5.01; serde_json (Rust) minify: 5.25; serde_json (Rust) write: 2.19; nlohmann/json json validate: 1.94; nlohmann/json json sum: 1.49; nlohmann/json json select: 7.92; nlohmann/json json edit: 4.24; nlohmann/json json minify: 5.30; nlohmann/json json write: 1.92; Glaze validate: 1.40; Glaze sum: 7.35 (5.04 checking less, partial); Glaze select: 1.35 (0.61 checking less, partial); Glaze edit: 6.32; Glaze minify: 6.39 (0.69 checking less, partial); Glaze write: 2.03; RapidJSON validate: 4.31 (3.29 checking less, no U​TF-8); RapidJSON sum: 3.16 (2.42 checking less, no U​TF-8); RapidJSON select: 4.32 (3.40 checking less, no U​TF-8); RapidJSON edit: 3.16 (2.69 checking less, no U​TF-8); RapidJSON minify: 3.48 (2.90 checking less, no U​TF-8); RapidJSON write: 2.93.</desc>
|
||||
<text class="nj-charts-tick" x="270" y="34">validate</text>
|
||||
<text class="nj-charts-tick" x="362" y="34">sum</text>
|
||||
<text class="nj-charts-tick" x="454" y="34">select</text>
|
||||
<text class="nj-charts-tick" x="546" y="34">edit</text>
|
||||
<text class="nj-charts-tick" x="638" y="34">minify</text>
|
||||
<text class="nj-charts-tick" x="730" y="34">write</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate 1.00× the time of the fastest library (fully validating) way: parse twitter.json: 302 µs citm_catalog.json: 720 µs canada.json: 1,784 µs jeopardy.json: 81,370 µs">
|
||||
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum 1.00× the time of the fastest library (fully validating) way: parse twitter.json: 378 µs citm_catalog.json: 891 µs canada.json: 4,151 µs jeopardy.json: 89,689 µs">
|
||||
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select 1.00× the time of the fastest library (fully validating) twitter.json: 324 µs · parse citm_catalog.json: 728 µs · parse canada.json: 1,784 µs · structs (from_json) jeopardy.json: 89,731 µs · parse">
|
||||
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit 1.00× the time of the fastest library (fully validating) way: editable twitter.json: 534 µs citm_catalog.json: 1,100 µs canada.json: 5,935 µs jeopardy.json: 208,247 µs">
|
||||
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify 1.00× the time of the fastest library (fully validating) way: parse + dump twitter.json: 474 µs citm_catalog.json: 993 µs canada.json: 5,445 µs jeopardy.json: 153,155 µs">
|
||||
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write 1.00× the time of the fastest library (fully validating) way: dump twitter.json: 152 µs citm_catalog.json: 272 µs canada.json: 3,634 µs jeopardy.json: 68,840 µs">
|
||||
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate 1.40× the time of the fastest library (fully validating) twitter.json: 379 µs · insitu (copy) citm_catalog.json: 896 µs · read canada.json: 2,851 µs · insitu (copy) jeopardy.json: 124,180 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="225" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.40</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum 1.14× the time of the fastest library (fully validating) twitter.json: 435 µs · insitu (copy) citm_catalog.json: 1,048 µs · insitu (copy) canada.json: 3,467 µs · insitu (copy) jeopardy.json: 135,382 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-0" x="317" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.14</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select 1.38× the time of the fastest library (fully validating) twitter.json: 387 µs · insitu (copy) citm_catalog.json: 900 µs · insitu (copy) canada.json: 2,814 µs · read jeopardy.json: 139,634 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.38</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit 1.50× the time of the fastest library (fully validating) twitter.json: 912 µs · mut copy citm_catalog.json: 1,686 µs · mut copy canada.json: 7,407 µs · mut copy jeopardy.json: 318,770 µs · insitu (copy) + mut copy (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="501" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.50</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify 1.28× the time of the fastest library (fully validating) twitter.json: 625 µs · insitu (copy) + write citm_catalog.json: 1,256 µs · read + write canada.json: 6,261 µs · read + write jeopardy.json: 212,043 µs · insitu (copy) + write (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.28</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write 1.18× the time of the fastest library (fully validating) way: write twitter.json: 219 µs citm_catalog.json: 364 µs canada.json: 3,380 µs jeopardy.json: 75,136 µs">
|
||||
<rect class="nj-heat-1" x="685" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.18</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate 1.15× the time of the fastest library (fully validating) way: IgnoredAny twitter.json: 470 µs citm_catalog.json: 966 µs canada.json: 2,249 µs jeopardy.json: 54,246 µs">
|
||||
<rect class="nj-heat-1" x="225" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.15</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum 1.05× the time of the fastest library (fully validating) way: visitor twitter.json: 494 µs citm_catalog.json: 1,135 µs canada.json: 4,580 µs jeopardy.json: 59,149 µs">
|
||||
<rect class="nj-heat-0" x="317" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.05</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select 1.33× the time of the fastest library (fully validating) way: structs twitter.json: 557 µs citm_catalog.json: 1,023 µs canada.json: 2,247 µs jeopardy.json: 91,996 µs">
|
||||
<rect class="nj-heat-1" x="409" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.33</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit 1.90× the time of the fastest library (fully validating) way: Value twitter.json: 1,189 µs citm_catalog.json: 2,384 µs canada.json: 8,007 µs jeopardy.json: 413,714 µs">
|
||||
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">1.90</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify 1.73× the time of the fastest library (fully validating) way: Value twitter.json: 988 µs citm_catalog.json: 2,093 µs canada.json: 7,775 µs jeopardy.json: 217,697 µs">
|
||||
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.73</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write 2.00× the time of the fastest library (fully validating) way: Value twitter.json: 442 µs citm_catalog.json: 935 µs canada.json: 3,954 µs jeopardy.json: 100,889 µs">
|
||||
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">2.00</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate 1.29× the time of the fastest library (fully validating) way: D​OM twitter.json: 311 µs citm_catalog.json: 736 µs canada.json: 3,343 µs jeopardy.json: 115,626 µs">
|
||||
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.29</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum 1.10× the time of the fastest library (fully validating) twitter.json: 399 µs · D​OM citm_catalog.json: 946 µs · D​OM canada.json: 4,100 µs · D​OM jeopardy.json: 120,056 µs · On-Demand">
|
||||
<rect class="nj-heat-0" x="317" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.10</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select 1.29× the time of the fastest library (fully validating) way: D​OM twitter.json: 330 µs citm_catalog.json: 743 µs canada.json: 3,291 µs jeopardy.json: 129,470 µs">
|
||||
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.29</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less 0.61× the time of the fastest fully validating library way: On-Demand twitter.json: 210 µs citm_catalog.json: 610 µs canada.json: 861 µs jeopardy.json: 48,548 µs reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
|
||||
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.61</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit simdjson's documents are read-only: it has no A​PI to change a value and write the result">
|
||||
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-tick" x="546" y="174">n/a</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify 2.06× the time of the fastest library (fully validating) way: D​OM + to_string twitter.json: 857 µs citm_catalog.json: 1,543 µs canada.json: 16,516 µs jeopardy.json: 326,881 µs">
|
||||
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">2.06</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less 0.19× the time of the fastest fully validating library way: minify twitter.json: 103 µs citm_catalog.json: 256 µs canada.json: 373 µs jeopardy.json: 51,243 µs simdjson::minify() only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.19</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write 3.18× the time of the fastest library (fully validating) way: to_string twitter.json: 551 µs citm_catalog.json: 803 µs canada.json: 12,977 µs jeopardy.json: 183,837 µs">
|
||||
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">3.18</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less 1.46× the time of the fastest fully validating library way: Document twitter.json: 450 µs citm_catalog.json: 1,026 µs canada.json: 3,140 µs jeopardy.json: 98,200 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="225" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">1.46</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less 1.18× the time of the fastest fully validating library way: Document twitter.json: 504 µs citm_catalog.json: 1,180 µs canada.json: 3,736 µs jeopardy.json: 110,324 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="317" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.18</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less 1.43× the time of the fastest fully validating library way: Document twitter.json: 461 µs citm_catalog.json: 1,024 µs canada.json: 3,030 µs jeopardy.json: 109,906 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="409" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">1.43</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less 1.18× the time of the fastest fully validating library way: Document twitter.json: 644 µs citm_catalog.json: 1,508 µs canada.json: 7,972 µs jeopardy.json: 184,491 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="501" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.18</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less 1.37× the time of the fastest fully validating library way: Document + Serialize twitter.json: 647 µs citm_catalog.json: 1,487 µs canada.json: 7,924 µs jeopardy.json: 182,940 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="593" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">1.37</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write 1.37× the time of the fastest library (fully validating) way: Serialize twitter.json: 231 µs citm_catalog.json: 475 µs canada.json: 4,851 µs jeopardy.json: 69,344 µs">
|
||||
<rect class="nj-heat-1" x="685" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.37</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">Boost.J​SON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · validate 1.58× the time of the fastest library (fully validating) way: S​AX twitter.json: 596 µs citm_catalog.json: 923 µs canada.json: 6,234 µs jeopardy.json: 56,654 µs">
|
||||
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.58</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · sum 1.10× the time of the fastest library (fully validating) way: S​AX twitter.json: 582 µs citm_catalog.json: 927 µs canada.json: 5,935 µs jeopardy.json: 56,310 µs">
|
||||
<rect class="nj-heat-0" x="317" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.10</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · select 3.00× the time of the fastest library (fully validating) way: parse twitter.json: 1,264 µs citm_catalog.json: 1,659 µs canada.json: 7,173 µs jeopardy.json: 202,456 µs">
|
||||
<rect class="nj-heat-3" x="409" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">3.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · edit 2.30× the time of the fastest library (fully validating) way: parse twitter.json: 1,722 µs citm_catalog.json: 2,614 µs canada.json: 12,953 µs jeopardy.json: 346,073 µs">
|
||||
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.30</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · minify 2.69× the time of the fastest library (fully validating) way: parse + serialize twitter.json: 1,758 µs citm_catalog.json: 2,553 µs canada.json: 12,744 µs jeopardy.json: 358,018 µs">
|
||||
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.69</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · write 2.36× the time of the fastest library (fully validating) way: serialize twitter.json: 489 µs citm_catalog.json: 902 µs canada.json: 5,659 µs jeopardy.json: 127,823 µs">
|
||||
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.36</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">simd-json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate 2.22× the time of the fastest library (fully validating) way: tape (copy) twitter.json: 592 µs citm_catalog.json: 1,426 µs canada.json: 4,303 µs jeopardy.json: 211,716 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.22</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum 1.83× the time of the fastest library (fully validating) way: visitor (copy) twitter.json: 722 µs citm_catalog.json: 1,686 µs canada.json: 5,191 µs jeopardy.json: 220,582 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="317" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.83</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select 2.54× the time of the fastest library (fully validating) way: structs (copy) twitter.json: 730 µs citm_catalog.json: 1,658 µs canada.json: 4,915 µs jeopardy.json: 266,073 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="409" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.54</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit 3.05× the time of the fastest library (fully validating) twitter.json: 2,071 µs · borrowed (copy) citm_catalog.json: 4,465 µs · borrowed (copy) canada.json: 16,360 µs · owned (copy) jeopardy.json: 416,658 µs · borrowed (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.05</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify 3.42× the time of the fastest library (fully validating) way: borrowed (copy) twitter.json: 1,924 µs citm_catalog.json: 4,375 µs canada.json: 15,278 µs jeopardy.json: 419,474 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="593" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.42</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write 2.24× the time of the fastest library (fully validating) way: borrowed twitter.json: 604 µs citm_catalog.json: 809 µs canada.json: 4,825 µs jeopardy.json: 110,710 µs">
|
||||
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.24</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">serde_json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate 1.47× the time of the fastest library (fully validating) way: from_utf8 + IgnoredAny twitter.json: 634 µs citm_catalog.json: 1,448 µs canada.json: 2,402 µs jeopardy.json: 66,822 µs">
|
||||
<rect class="nj-heat-1" x="225" y="297" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.47</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less 1.31× the time of the fastest fully validating library way: IgnoredAny twitter.json: 487 µs citm_catalog.json: 1,370 µs canada.json: 2,318 µs jeopardy.json: 59,801 µs trusts U​TF-8 in the strings it skips (from_slice); strings it reads are checked">
|
||||
<rect class="nj-heat-1" x="271" y="297" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.31</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="325" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum 2.18× the time of the fastest library (fully validating) way: visitor twitter.json: 1,318 µs citm_catalog.json: 2,299 µs canada.json: 7,610 µs jeopardy.json: 123,810 µs">
|
||||
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.18</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select 1.69× the time of the fastest library (fully validating) way: from_utf8 + structs twitter.json: 769 µs citm_catalog.json: 1,504 µs canada.json: 2,442 µs jeopardy.json: 108,386 µs">
|
||||
<rect class="nj-heat-2" x="409" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.69</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit 5.01× the time of the fastest library (fully validating) way: Value twitter.json: 4,474 µs citm_catalog.json: 6,922 µs canada.json: 18,301 µs jeopardy.json: 805,290 µs">
|
||||
<rect class="nj-heat-4" x="501" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">5.01</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify 5.25× the time of the fastest library (fully validating) way: Value twitter.json: 4,081 µs citm_catalog.json: 6,880 µs canada.json: 17,249 µs jeopardy.json: 615,033 µs">
|
||||
<rect class="nj-heat-4" x="593" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.25</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write 2.19× the time of the fastest library (fully validating) way: Value twitter.json: 563 µs citm_catalog.json: 882 µs canada.json: 3,979 µs jeopardy.json: 120,716 µs">
|
||||
<rect class="nj-heat-2" x="685" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.19</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="354" text-anchor="end">nlohmann/json json</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate 1.94× the time of the fastest library (fully validating) way: accept twitter.json: 746 µs citm_catalog.json: 1,424 µs canada.json: 4,201 µs jeopardy.json: 100,878 µs">
|
||||
<rect class="nj-heat-2" x="225" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="354" text-anchor="middle">1.94</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum 1.49× the time of the fastest library (fully validating) way: sax twitter.json: 784 µs citm_catalog.json: 1,466 µs canada.json: 5,345 µs jeopardy.json: 101,437 µs">
|
||||
<rect class="nj-heat-1" x="317" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="354" text-anchor="middle">1.49</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select 7.92× the time of the fastest library (fully validating) twitter.json: 3,654 µs · parse citm_catalog.json: 5,494 µs · parse canada.json: 11,583 µs · structs (from_json) jeopardy.json: 641,176 µs · structs (from_json)">
|
||||
<rect class="nj-heat-4" x="409" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="354" text-anchor="middle">7.92</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit 4.24× the time of the fastest library (fully validating) twitter.json: 3,058 µs · ordered_json citm_catalog.json: 5,099 µs · ordered_json canada.json: 16,378 µs · parse jeopardy.json: 920,570 µs · ordered_json">
|
||||
<rect class="nj-heat-3" x="501" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">4.24</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify 5.30× the time of the fastest library (fully validating) way: parse + dump twitter.json: 4,037 µs citm_catalog.json: 6,081 µs canada.json: 16,349 µs jeopardy.json: 771,912 µs">
|
||||
<rect class="nj-heat-4" x="593" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="354" text-anchor="middle">5.30</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write 1.92× the time of the fastest library (fully validating) way: dump twitter.json: 445 µs citm_catalog.json: 590 µs canada.json: 4,523 µs jeopardy.json: 118,446 µs">
|
||||
<rect class="nj-heat-2" x="685" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.92</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="390" text-anchor="end">Glaze</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate 1.40× the time of the fastest library (fully validating) way: validate_json twitter.json: 621 µs citm_catalog.json: 1,402 µs canada.json: 1,806 µs jeopardy.json: 76,164 µs">
|
||||
<rect class="nj-heat-1" x="225" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">1.40</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum 7.35× the time of the fastest library (fully validating) way: generic twitter.json: 3,890 µs citm_catalog.json: 7,282 µs canada.json: 25,798 µs jeopardy.json: 501,805 µs">
|
||||
<rect class="nj-heat-4" x="317" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="390" text-anchor="middle">7.35</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less 5.04× the time of the fastest fully validating library twitter.json: 2,829 µs · lazy_json citm_catalog.json: 7,282 µs · generic (validates fully) canada.json: 17,578 µs · lazy_json jeopardy.json: 223,672 µs · lazy_json reads lazily: lazy_json reads only what you ask for and steps over the rest">
|
||||
<rect class="nj-heat-4" x="363" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="384" text-anchor="middle">5.04</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="397" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select 1.35× the time of the fastest library (fully validating) way: structs (validate_skipped) twitter.json: 560 µs citm_catalog.json: 1,329 µs canada.json: 1,780 µs jeopardy.json: 93,674 µs">
|
||||
<rect class="nj-heat-1" x="409" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="390" text-anchor="middle">1.35</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less 0.61× the time of the fastest fully validating library way: structs twitter.json: 345 µs citm_catalog.json: 424 µs canada.json: 463 µs jeopardy.json: 76,186 µs reads into structs and steps over fields it doesn't know without checking them (validate_skipped checks them too)">
|
||||
<rect class="nj-heat-0" x="455" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="384" text-anchor="middle">0.61</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="397" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit 6.32× the time of the fastest library (fully validating) way: generic twitter.json: 4,278 µs citm_catalog.json: 7,989 µs canada.json: 30,869 µs jeopardy.json: 1,095,800 µs">
|
||||
<rect class="nj-heat-4" x="501" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">6.32</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify 6.39× the time of the fastest library (fully validating) way: generic twitter.json: 4,215 µs citm_catalog.json: 7,644 µs canada.json: 29,762 µs jeopardy.json: 683,744 µs">
|
||||
<rect class="nj-heat-4" x="593" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="390" text-anchor="middle">6.39</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less 0.69× the time of the fastest fully validating library way: minify_json twitter.json: 418 µs citm_catalog.json: 1,062 µs canada.json: 2,150 µs jeopardy.json: 93,265 µs minify_json only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="384" text-anchor="middle">0.69</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="397" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write 2.03× the time of the fastest library (fully validating) way: generic twitter.json: 413 µs citm_catalog.json: 725 µs canada.json: 4,239 µs jeopardy.json: 137,011 µs">
|
||||
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">2.03</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="426" text-anchor="end">RapidJSON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate 4.31× the time of the fastest library (fully validating) twitter.json: 1,845 µs · insitu (copy) citm_catalog.json: 2,150 µs · S​AX canada.json: 11,719 µs · S​AX jeopardy.json: 233,417 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="225" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">4.31</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less 3.29× the time of the fastest fully validating library twitter.json: 1,227 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,665 µs · S​AX (no encoding check) canada.json: 11,601 µs · S​AX (no encoding check) jeopardy.json: 156,744 µs · S​AX (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="271" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.29</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum 3.16× the time of the fastest library (fully validating) twitter.json: 1,869 µs · insitu (copy) citm_catalog.json: 2,172 µs · S​AX canada.json: 12,183 µs · S​AX jeopardy.json: 253,075 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="317" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">3.16</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less 2.42× the time of the fastest fully validating library twitter.json: 1,237 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,770 µs · S​AX (no encoding check) canada.json: 12,082 µs · insitu (copy) (no encoding check) jeopardy.json: 163,826 µs · S​AX (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="363" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.42</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select 4.32× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,901 µs citm_catalog.json: 2,329 µs canada.json: 11,814 µs jeopardy.json: 251,223 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="409" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">4.32</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less 3.40× the time of the fastest fully validating library way: insitu (copy) (no encoding check) twitter.json: 1,251 µs citm_catalog.json: 1,936 µs canada.json: 11,565 µs jeopardy.json: 181,144 µs trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="455" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.40</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit 3.16× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 2,565 µs citm_catalog.json: 3,328 µs canada.json: 22,449 µs jeopardy.json: 378,036 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">3.16</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less 2.69× the time of the fastest fully validating library way: insitu (copy) (no encoding check) twitter.json: 1,902 µs citm_catalog.json: 2,859 µs canada.json: 21,667 µs jeopardy.json: 321,177 µs trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="547" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">2.69</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify 3.48× the time of the fastest library (fully validating) twitter.json: 2,465 µs · S​AX to Writer citm_catalog.json: 2,829 µs · S​AX to Writer canada.json: 22,132 µs · Document + Writer jeopardy.json: 374,258 µs · S​AX to Writer">
|
||||
<rect class="nj-heat-3" x="593" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">3.48</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less 2.90× the time of the fastest fully validating library twitter.json: 1,928 µs · S​AX to Writer (no encoding check) citm_catalog.json: 2,416 µs · S​AX to Writer (no encoding check) canada.json: 22,132 µs · Document + Writer (validates fully) jeopardy.json: 269,637 µs · S​AX to Writer (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it)">
|
||||
<rect class="nj-heat-3" x="639" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">2.90</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write 2.93× the time of the fastest library (fully validating) way: Writer twitter.json: 644 µs citm_catalog.json: 966 µs canada.json: 9,614 µs jeopardy.json: 127,167 µs">
|
||||
<rect class="nj-heat-3" x="685" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">2.93</text>
|
||||
</g>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
|
||||
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="46" y="496" text-anchor="middle">below 1.15</text></g>
|
||||
<g><rect class="nj-heat-1" x="88" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="126" y="496" text-anchor="middle">1.15 to 1.5</text></g>
|
||||
<g><rect class="nj-heat-2" x="168" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="206" y="496" text-anchor="middle">1.5 to 2.5</text></g>
|
||||
<g><rect class="nj-heat-3" x="248" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="286" y="496" text-anchor="middle">2.5 to 5</text></g>
|
||||
<g><rect class="nj-heat-4" x="328" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="366" y="496" text-anchor="middle">5 and more</text></g>
|
||||
<rect class="nj-heat-na" x="420" y="482" width="40" height="20" rx="3"/>
|
||||
<text class="nj-charts-tick" x="440" y="496">n/a</text>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="468" y="496">no A​PI for it</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,359 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-x86-gcc nj-blog-uc-x86-gcc-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-uc-x86-gcc">Use cases: time of each library relative to the fastest, x86-64 with G​CC 16.2</title>
|
||||
<desc id="nj-blog-uc-x86-gcc-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.10; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.53; yyjson sum: 1.32; yyjson select: 1.47; yyjson edit: 1.45; yyjson minify: 1.28; yyjson write: 1.07; sonic-rs (Rust) validate: 1.17; sonic-rs (Rust) sum: 1.15; sonic-rs (Rust) select: 1.31; sonic-rs (Rust) edit: 1.92; sonic-rs (Rust) minify: 1.67; sonic-rs (Rust) write: 1.98; simdjson validate: 1.27; simdjson sum: 1.00; simdjson select: 1.26 (0.62 checking less, partial); simdjson edit: n/a; simdjson minify: 1.87 (0.18 checking less, partial); simdjson write: 2.84; sonic-cpp validate: no fully validating way (1.41 checking less, no U​TF-8); sonic-cpp sum: no fully validating way (1.25 checking less, no U​TF-8); sonic-cpp select: no fully validating way (1.36 checking less, no U​TF-8); sonic-cpp edit: no fully validating way (1.21 checking less, no U​TF-8); sonic-cpp minify: no fully validating way (1.34 checking less, no U​TF-8); sonic-cpp write: 1.50; Boost.J​SON validate: 1.67; Boost.J​SON sum: 1.26; Boost.J​SON select: 3.04; Boost.J​SON edit: 2.24; Boost.J​SON minify: 2.57; Boost.J​SON write: 2.25; simd-json (Rust) validate: 2.26; simd-json (Rust) sum: 1.99; simd-json (Rust) select: 2.52; simd-json (Rust) edit: 3.09; simd-json (Rust) minify: 3.31; simd-json (Rust) write: 2.22; serde_json (Rust) validate: 1.49 (1.33 checking less, no U​TF-8); serde_json (Rust) sum: 2.38; serde_json (Rust) select: 1.67; serde_json (Rust) edit: 5.07; serde_json (Rust) minify: 5.07; serde_json (Rust) write: 2.17; RapidJSON validate: 3.34 (3.06 checking less, no U​TF-8); RapidJSON sum: 2.70 (2.46 checking less, no U​TF-8); RapidJSON select: 3.27 (3.10 checking less, no U​TF-8); RapidJSON edit: 2.64 (2.54 checking less, no U​TF-8); RapidJSON minify: 3.37 (2.78 checking less, no U​TF-8); RapidJSON write: 2.95; Glaze validate: 1.76; Glaze sum: 5.98 (5.38 checking less, partial); Glaze select: 1.71 (0.59 checking less, partial); Glaze edit: 5.05; Glaze minify: 4.82 (0.75 checking less, partial); Glaze write: 1.90; nlohmann/json json validate: 2.06; nlohmann/json json sum: 1.67; nlohmann/json json select: 7.98; nlohmann/json json edit: 4.16; nlohmann/json json minify: 5.23; nlohmann/json json write: 1.87.</desc>
|
||||
<text class="nj-charts-tick" x="270" y="34">validate</text>
|
||||
<text class="nj-charts-tick" x="362" y="34">sum</text>
|
||||
<text class="nj-charts-tick" x="454" y="34">select</text>
|
||||
<text class="nj-charts-tick" x="546" y="34">edit</text>
|
||||
<text class="nj-charts-tick" x="638" y="34">minify</text>
|
||||
<text class="nj-charts-tick" x="730" y="34">write</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate 1.00× the time of the fastest library (fully validating) twitter.json: 304 µs · parse citm_catalog.json: 733 µs · parse canada.json: 1,682 µs · accept jeopardy.json: 78,594 µs · parse">
|
||||
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum 1.10× the time of the fastest library (fully validating) way: parse twitter.json: 383 µs citm_catalog.json: 932 µs canada.json: 3,874 µs jeopardy.json: 93,197 µs">
|
||||
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.10</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select 1.00× the time of the fastest library (fully validating) twitter.json: 325 µs · structs (from_json) citm_catalog.json: 784 µs · structs (from_json) canada.json: 1,686 µs · parse jeopardy.json: 91,622 µs · parse">
|
||||
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit 1.00× the time of the fastest library (fully validating) way: editable twitter.json: 552 µs citm_catalog.json: 1,082 µs canada.json: 5,801 µs jeopardy.json: 198,867 µs">
|
||||
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify 1.00× the time of the fastest library (fully validating) way: parse + dump twitter.json: 482 µs citm_catalog.json: 1,001 µs canada.json: 5,856 µs jeopardy.json: 159,533 µs">
|
||||
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write 1.00× the time of the fastest library (fully validating) way: dump twitter.json: 155 µs citm_catalog.json: 253 µs canada.json: 3,899 µs jeopardy.json: 69,593 µs">
|
||||
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate 1.53× the time of the fastest library (fully validating) twitter.json: 394 µs · insitu (copy) citm_catalog.json: 956 µs · read canada.json: 3,322 µs · insitu (copy) jeopardy.json: 130,978 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="225" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.53</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum 1.32× the time of the fastest library (fully validating) twitter.json: 448 µs · insitu (copy) citm_catalog.json: 1,094 µs · insitu (copy) canada.json: 3,955 µs · insitu (copy) jeopardy.json: 136,684 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="317" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.32</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select 1.47× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 403 µs citm_catalog.json: 1,011 µs canada.json: 3,268 µs jeopardy.json: 139,623 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="409" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.47</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit 1.45× the time of the fastest library (fully validating) twitter.json: 801 µs · insitu (copy) + mut copy citm_catalog.json: 1,641 µs · mut copy canada.json: 7,402 µs · mut copy jeopardy.json: 313,182 µs · insitu (copy) + mut copy (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="501" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.45</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify 1.28× the time of the fastest library (fully validating) twitter.json: 658 µs · read + write citm_catalog.json: 1,268 µs · insitu (copy) + write canada.json: 6,934 µs · insitu (copy) + write jeopardy.json: 210,677 µs · insitu (copy) + write (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.28</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write 1.07× the time of the fastest library (fully validating) way: write twitter.json: 190 µs citm_catalog.json: 320 µs canada.json: 3,349 µs jeopardy.json: 69,582 µs">
|
||||
<rect class="nj-heat-0" x="685" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.07</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate 1.17× the time of the fastest library (fully validating) way: IgnoredAny twitter.json: 470 µs citm_catalog.json: 966 µs canada.json: 2,249 µs jeopardy.json: 54,246 µs">
|
||||
<rect class="nj-heat-1" x="225" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.17</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum 1.15× the time of the fastest library (fully validating) way: visitor twitter.json: 494 µs citm_catalog.json: 1,135 µs canada.json: 4,580 µs jeopardy.json: 59,149 µs">
|
||||
<rect class="nj-heat-0" x="317" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.15</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select 1.31× the time of the fastest library (fully validating) way: structs twitter.json: 557 µs citm_catalog.json: 1,023 µs canada.json: 2,247 µs jeopardy.json: 91,996 µs">
|
||||
<rect class="nj-heat-1" x="409" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.31</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit 1.92× the time of the fastest library (fully validating) way: Value twitter.json: 1,189 µs citm_catalog.json: 2,384 µs canada.json: 8,007 µs jeopardy.json: 413,714 µs">
|
||||
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">1.92</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify 1.67× the time of the fastest library (fully validating) way: Value twitter.json: 988 µs citm_catalog.json: 2,093 µs canada.json: 7,775 µs jeopardy.json: 217,697 µs">
|
||||
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.67</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write 1.98× the time of the fastest library (fully validating) way: Value twitter.json: 442 µs citm_catalog.json: 935 µs canada.json: 3,954 µs jeopardy.json: 100,889 µs">
|
||||
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.98</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate 1.27× the time of the fastest library (fully validating) way: D​OM twitter.json: 302 µs citm_catalog.json: 705 µs canada.json: 3,176 µs jeopardy.json: 114,180 µs">
|
||||
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.27</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum 1.00× the time of the fastest library (fully validating) way: On-Demand twitter.json: 347 µs citm_catalog.json: 796 µs canada.json: 3,476 µs jeopardy.json: 92,000 µs">
|
||||
<rect class="nj-heat-0" x="317" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select 1.26× the time of the fastest library (fully validating) way: D​OM twitter.json: 315 µs citm_catalog.json: 754 µs canada.json: 3,190 µs jeopardy.json: 129,838 µs">
|
||||
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.26</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less 0.62× the time of the fastest fully validating library way: On-Demand twitter.json: 202 µs citm_catalog.json: 642 µs canada.json: 907 µs jeopardy.json: 50,352 µs reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
|
||||
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.62</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit simdjson's documents are read-only: it has no A​PI to change a value and write the result">
|
||||
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-tick" x="546" y="174">n/a</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify 1.87× the time of the fastest library (fully validating) way: D​OM + to_string twitter.json: 799 µs citm_catalog.json: 1,461 µs canada.json: 15,173 µs jeopardy.json: 310,524 µs">
|
||||
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.87</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less 0.18× the time of the fastest fully validating library way: minify twitter.json: 104 µs citm_catalog.json: 246 µs canada.json: 365 µs jeopardy.json: 47,397 µs simdjson::minify() only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.18</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write 2.84× the time of the fastest library (fully validating) way: to_string twitter.json: 471 µs citm_catalog.json: 712 µs canada.json: 11,156 µs jeopardy.json: 186,861 µs">
|
||||
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.84</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less 1.41× the time of the fastest fully validating library way: Document twitter.json: 405 µs citm_catalog.json: 935 µs canada.json: 3,218 µs jeopardy.json: 95,565 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="225" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">1.41</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less 1.25× the time of the fastest fully validating library way: Document twitter.json: 462 µs citm_catalog.json: 1,125 µs canada.json: 3,867 µs jeopardy.json: 106,727 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="317" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.25</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less 1.36× the time of the fastest fully validating library way: Document twitter.json: 410 µs citm_catalog.json: 952 µs canada.json: 3,249 µs jeopardy.json: 106,866 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="409" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">1.36</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less 1.21× the time of the fastest fully validating library way: Document twitter.json: 629 µs citm_catalog.json: 1,455 µs canada.json: 8,594 µs jeopardy.json: 185,870 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="501" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.21</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less 1.34× the time of the fastest fully validating library way: Document + Serialize twitter.json: 633 µs citm_catalog.json: 1,436 µs canada.json: 8,992 µs jeopardy.json: 178,113 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="593" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">1.34</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write 1.50× the time of the fastest library (fully validating) way: Serialize twitter.json: 259 µs citm_catalog.json: 510 µs canada.json: 5,269 µs jeopardy.json: 76,584 µs">
|
||||
<rect class="nj-heat-1" x="685" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.50</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">Boost.J​SON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · validate 1.67× the time of the fastest library (fully validating) way: S​AX twitter.json: 680 µs citm_catalog.json: 922 µs canada.json: 5,993 µs jeopardy.json: 60,687 µs">
|
||||
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.67</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · sum 1.26× the time of the fastest library (fully validating) way: S​AX twitter.json: 668 µs citm_catalog.json: 934 µs canada.json: 5,692 µs jeopardy.json: 62,486 µs">
|
||||
<rect class="nj-heat-1" x="317" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.26</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · select 3.04× the time of the fastest library (fully validating) way: parse twitter.json: 1,326 µs citm_catalog.json: 1,871 µs canada.json: 6,892 µs jeopardy.json: 196,136 µs">
|
||||
<rect class="nj-heat-3" x="409" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">3.04</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · edit 2.24× the time of the fastest library (fully validating) way: parse twitter.json: 1,771 µs citm_catalog.json: 2,496 µs canada.json: 12,504 µs jeopardy.json: 311,015 µs">
|
||||
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.24</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · minify 2.57× the time of the fastest library (fully validating) way: parse + serialize twitter.json: 1,803 µs citm_catalog.json: 2,480 µs canada.json: 13,545 µs jeopardy.json: 324,721 µs">
|
||||
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.57</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · write 2.25× the time of the fastest library (fully validating) way: serialize twitter.json: 454 µs citm_catalog.json: 835 µs canada.json: 5,468 µs jeopardy.json: 132,656 µs">
|
||||
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.25</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">simd-json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate 2.26× the time of the fastest library (fully validating) way: tape (copy) twitter.json: 592 µs citm_catalog.json: 1,426 µs canada.json: 4,303 µs jeopardy.json: 211,716 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.26</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum 1.99× the time of the fastest library (fully validating) way: visitor (copy) twitter.json: 722 µs citm_catalog.json: 1,686 µs canada.json: 5,191 µs jeopardy.json: 220,582 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="317" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.99</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select 2.52× the time of the fastest library (fully validating) way: structs (copy) twitter.json: 730 µs citm_catalog.json: 1,658 µs canada.json: 4,915 µs jeopardy.json: 266,073 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="409" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.52</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit 3.09× the time of the fastest library (fully validating) twitter.json: 2,071 µs · borrowed (copy) citm_catalog.json: 4,465 µs · borrowed (copy) canada.json: 16,360 µs · owned (copy) jeopardy.json: 416,658 µs · borrowed (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.09</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify 3.31× the time of the fastest library (fully validating) way: borrowed (copy) twitter.json: 1,924 µs citm_catalog.json: 4,375 µs canada.json: 15,278 µs jeopardy.json: 419,474 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="593" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.31</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write 2.22× the time of the fastest library (fully validating) way: borrowed twitter.json: 604 µs citm_catalog.json: 809 µs canada.json: 4,825 µs jeopardy.json: 110,710 µs">
|
||||
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.22</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">serde_json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate 1.49× the time of the fastest library (fully validating) way: from_utf8 + IgnoredAny twitter.json: 634 µs citm_catalog.json: 1,448 µs canada.json: 2,402 µs jeopardy.json: 66,822 µs">
|
||||
<rect class="nj-heat-1" x="225" y="297" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.49</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less 1.33× the time of the fastest fully validating library way: IgnoredAny twitter.json: 487 µs citm_catalog.json: 1,370 µs canada.json: 2,318 µs jeopardy.json: 59,801 µs trusts U​TF-8 in the strings it skips (from_slice); strings it reads are checked">
|
||||
<rect class="nj-heat-1" x="271" y="297" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.33</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="325" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum 2.38× the time of the fastest library (fully validating) way: visitor twitter.json: 1,318 µs citm_catalog.json: 2,299 µs canada.json: 7,610 µs jeopardy.json: 123,810 µs">
|
||||
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.38</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select 1.67× the time of the fastest library (fully validating) way: from_utf8 + structs twitter.json: 769 µs citm_catalog.json: 1,504 µs canada.json: 2,442 µs jeopardy.json: 108,386 µs">
|
||||
<rect class="nj-heat-2" x="409" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.67</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit 5.07× the time of the fastest library (fully validating) way: Value twitter.json: 4,474 µs citm_catalog.json: 6,922 µs canada.json: 18,301 µs jeopardy.json: 805,290 µs">
|
||||
<rect class="nj-heat-4" x="501" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">5.07</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify 5.07× the time of the fastest library (fully validating) way: Value twitter.json: 4,081 µs citm_catalog.json: 6,880 µs canada.json: 17,249 µs jeopardy.json: 615,033 µs">
|
||||
<rect class="nj-heat-4" x="593" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.07</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write 2.17× the time of the fastest library (fully validating) way: Value twitter.json: 563 µs citm_catalog.json: 882 µs canada.json: 3,979 µs jeopardy.json: 120,716 µs">
|
||||
<rect class="nj-heat-2" x="685" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.17</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">RapidJSON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate 3.34× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,250 µs citm_catalog.json: 1,910 µs canada.json: 10,181 µs jeopardy.json: 150,241 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="225" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="354" text-anchor="middle">3.34</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less 3.06× the time of the fastest fully validating library twitter.json: 1,098 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,607 µs · S​AX (no encoding check) canada.json: 10,181 µs · insitu (copy) (validates fully) jeopardy.json: 143,546 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="271" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="348" text-anchor="middle">3.06</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum 2.70× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,296 µs citm_catalog.json: 2,011 µs canada.json: 10,601 µs jeopardy.json: 170,083 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="317" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">2.70</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less 2.46× the time of the fastest fully validating library twitter.json: 1,145 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,688 µs · S​AX (no encoding check) canada.json: 10,601 µs · insitu (copy) (validates fully) jeopardy.json: 157,809 µs · S​AX (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="363" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">2.46</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select 3.27× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,274 µs citm_catalog.json: 2,060 µs canada.json: 10,432 µs jeopardy.json: 165,343 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="409" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">3.27</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less 3.10× the time of the fastest fully validating library twitter.json: 1,098 µs · insitu (copy) (no encoding check) citm_catalog.json: 2,034 µs · Document (no encoding check) canada.json: 10,432 µs · insitu (copy) (validates fully) jeopardy.json: 156,012 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="455" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">3.10</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit 2.64× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 1,983 µs citm_catalog.json: 2,859 µs canada.json: 19,769 µs jeopardy.json: 298,015 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="523.5" y="354" text-anchor="middle">2.64</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less 2.54× the time of the fastest fully validating library twitter.json: 1,799 µs · insitu (copy) (no encoding check) citm_catalog.json: 2,859 µs · insitu (copy) (validates fully) canada.json: 19,394 µs · insitu (copy) (no encoding check) jeopardy.json: 286,231 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="547" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="568.5" y="348" text-anchor="middle">2.54</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify 3.37× the time of the fastest library (fully validating) twitter.json: 2,606 µs · S​AX to Writer citm_catalog.json: 2,810 µs · S​AX to Writer canada.json: 22,160 µs · Document + Writer jeopardy.json: 360,474 µs · S​AX to Writer">
|
||||
<rect class="nj-heat-3" x="593" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">3.37</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less 2.78× the time of the fastest fully validating library way: S​AX to Writer (no encoding check) twitter.json: 1,820 µs citm_catalog.json: 2,456 µs canada.json: 21,770 µs jeopardy.json: 277,281 µs trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it)">
|
||||
<rect class="nj-heat-3" x="639" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="348" text-anchor="middle">2.78</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="361" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write 2.95× the time of the fastest library (fully validating) way: Writer twitter.json: 653 µs citm_catalog.json: 978 µs canada.json: 9,071 µs jeopardy.json: 138,832 µs">
|
||||
<rect class="nj-heat-3" x="685" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">2.95</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="390" text-anchor="end">Glaze</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate 1.76× the time of the fastest library (fully validating) way: validate_json twitter.json: 727 µs citm_catalog.json: 1,983 µs canada.json: 2,571 µs jeopardy.json: 76,361 µs">
|
||||
<rect class="nj-heat-2" x="225" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">1.76</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum 5.98× the time of the fastest library (fully validating) way: generic twitter.json: 2,940 µs citm_catalog.json: 5,528 µs canada.json: 17,830 µs jeopardy.json: 390,814 µs">
|
||||
<rect class="nj-heat-4" x="317" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="390" text-anchor="middle">5.98</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less 5.38× the time of the fastest fully validating library twitter.json: 2,940 µs · generic (validates fully) citm_catalog.json: 5,528 µs · generic (validates fully) canada.json: 17,830 µs · generic (validates fully) jeopardy.json: 255,217 µs · lazy_json reads lazily: lazy_json reads only what you ask for and steps over the rest">
|
||||
<rect class="nj-heat-4" x="363" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="384" text-anchor="middle">5.38</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="397" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select 1.71× the time of the fastest library (fully validating) way: structs (validate_skipped) twitter.json: 619 µs citm_catalog.json: 2,238 µs canada.json: 2,544 µs jeopardy.json: 96,608 µs">
|
||||
<rect class="nj-heat-2" x="409" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="390" text-anchor="middle">1.71</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less 0.59× the time of the fastest fully validating library way: structs twitter.json: 360 µs citm_catalog.json: 412 µs canada.json: 433 µs jeopardy.json: 74,849 µs reads into structs and steps over fields it doesn't know without checking them (validate_skipped checks them too)">
|
||||
<rect class="nj-heat-0" x="455" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="384" text-anchor="middle">0.59</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="397" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit 5.05× the time of the fastest library (fully validating) way: generic twitter.json: 3,547 µs citm_catalog.json: 6,080 µs canada.json: 22,146 µs jeopardy.json: 937,712 µs">
|
||||
<rect class="nj-heat-4" x="501" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">5.05</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify 4.82× the time of the fastest library (fully validating) way: generic twitter.json: 3,394 µs citm_catalog.json: 6,016 µs canada.json: 23,223 µs jeopardy.json: 512,061 µs">
|
||||
<rect class="nj-heat-3" x="593" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="390" text-anchor="middle">4.82</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less 0.75× the time of the fastest fully validating library way: minify_json twitter.json: 419 µs citm_catalog.json: 1,301 µs canada.json: 2,832 µs jeopardy.json: 92,190 µs minify_json only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="369" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="384" text-anchor="middle">0.75</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="397" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write 1.90× the time of the fastest library (fully validating) way: generic twitter.json: 367 µs citm_catalog.json: 688 µs canada.json: 4,097 µs jeopardy.json: 134,165 µs">
|
||||
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">1.90</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="426" text-anchor="end">nlohmann/json json</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate 2.06× the time of the fastest library (fully validating) way: accept twitter.json: 817 µs citm_catalog.json: 1,614 µs canada.json: 4,402 µs jeopardy.json: 92,387 µs">
|
||||
<rect class="nj-heat-2" x="225" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="426" text-anchor="middle">2.06</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum 1.67× the time of the fastest library (fully validating) way: sax twitter.json: 790 µs citm_catalog.json: 1,624 µs canada.json: 5,671 µs jeopardy.json: 93,964 µs">
|
||||
<rect class="nj-heat-2" x="317" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="426" text-anchor="middle">1.67</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select 7.98× the time of the fastest library (fully validating) twitter.json: 3,643 µs · structs (from_json) citm_catalog.json: 6,199 µs · structs (from_json) canada.json: 11,694 µs · structs (from_json) jeopardy.json: 605,646 µs · parse">
|
||||
<rect class="nj-heat-4" x="409" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="426" text-anchor="middle">7.98</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit 4.16× the time of the fastest library (fully validating) way: ordered_json twitter.json: 3,046 µs citm_catalog.json: 5,087 µs canada.json: 15,464 µs jeopardy.json: 863,465 µs">
|
||||
<rect class="nj-heat-3" x="501" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="426" text-anchor="middle">4.16</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify 5.23× the time of the fastest library (fully validating) way: parse + dump twitter.json: 4,168 µs citm_catalog.json: 6,253 µs canada.json: 16,656 µs jeopardy.json: 777,125 µs">
|
||||
<rect class="nj-heat-4" x="593" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="426" text-anchor="middle">5.23</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write 1.87× the time of the fastest library (fully validating) way: dump twitter.json: 433 µs citm_catalog.json: 607 µs canada.json: 3,896 µs jeopardy.json: 126,529 µs">
|
||||
<rect class="nj-heat-2" x="685" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">1.87</text>
|
||||
</g>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
|
||||
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="46" y="496" text-anchor="middle">below 1.15</text></g>
|
||||
<g><rect class="nj-heat-1" x="88" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="126" y="496" text-anchor="middle">1.15 to 1.5</text></g>
|
||||
<g><rect class="nj-heat-2" x="168" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="206" y="496" text-anchor="middle">1.5 to 2.5</text></g>
|
||||
<g><rect class="nj-heat-3" x="248" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="286" y="496" text-anchor="middle">2.5 to 5</text></g>
|
||||
<g><rect class="nj-heat-4" x="328" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="366" y="496" text-anchor="middle">5 and more</text></g>
|
||||
<rect class="nj-heat-na" x="420" y="482" width="40" height="20" rx="3"/>
|
||||
<text class="nj-charts-tick" x="440" y="496">n/a</text>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="468" y="496">no A​PI for it</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,359 @@
|
||||
<svg class="nj-fig nj-charts nj-charts--blog nj-charts--heat" viewBox="0 0 784 510" role="img" aria-labelledby="nj-blog-uc-x86-gcc13 nj-blog-uc-x86-gcc13-d" xmlns="http://www.w3.org/2000/svg">
|
||||
<title id="nj-blog-uc-x86-gcc13">Use cases: time of each library relative to the fastest, x86-64 with G​CC 13</title>
|
||||
<desc id="nj-blog-uc-x86-gcc13-d">Table of relative times, libraries by use case. nlohmann/json json_document validate: 1.00; nlohmann/json json_document sum: 1.11; nlohmann/json json_document select: 1.00; nlohmann/json json_document edit: 1.00; nlohmann/json json_document minify: 1.00; nlohmann/json json_document write: 1.00; yyjson validate: 1.68; yyjson sum: 1.47; yyjson select: 1.63; yyjson edit: 1.56; yyjson minify: 1.35; yyjson write: 1.14; sonic-rs (Rust) validate: 1.12; sonic-rs (Rust) sum: 1.14; sonic-rs (Rust) select: 1.28; sonic-rs (Rust) edit: 1.88; sonic-rs (Rust) minify: 1.65; sonic-rs (Rust) write: 1.94; simdjson validate: 1.31; simdjson sum: 1.00; simdjson select: 1.30 (0.69 checking less, partial); simdjson edit: n/a; simdjson minify: 1.86 (0.21 checking less, partial); simdjson write: 2.86; sonic-cpp validate: no fully validating way (1.45 checking less, no U​TF-8); sonic-cpp sum: no fully validating way (1.32 checking less, no U​TF-8); sonic-cpp select: no fully validating way (1.42 checking less, no U​TF-8); sonic-cpp edit: no fully validating way (1.22 checking less, no U​TF-8); sonic-cpp minify: no fully validating way (1.36 checking less, no U​TF-8); sonic-cpp write: 1.50; Boost.J​SON validate: 1.62; Boost.J​SON sum: 1.32; Boost.J​SON select: 3.26; Boost.J​SON edit: 2.44; Boost.J​SON minify: 2.70; Boost.J​SON write: 2.39; simd-json (Rust) validate: 2.17; simd-json (Rust) sum: 1.98; simd-json (Rust) select: 2.44; simd-json (Rust) edit: 3.03; simd-json (Rust) minify: 3.27; simd-json (Rust) write: 2.17; serde_json (Rust) validate: 1.43 (1.28 checking less, no U​TF-8); serde_json (Rust) sum: 2.37; serde_json (Rust) select: 1.62; serde_json (Rust) edit: 4.96; serde_json (Rust) minify: 5.01; serde_json (Rust) write: 2.12; Glaze validate: 1.33; Glaze sum: 6.46 (5.20 checking less, partial); Glaze select: 1.35 (0.58 checking less, partial); Glaze edit: 5.23; Glaze minify: 5.12 (0.70 checking less, partial); Glaze write: 1.92; nlohmann/json json validate: 2.00; nlohmann/json json sum: 1.73; nlohmann/json json select: 7.68; nlohmann/json json edit: 4.27; nlohmann/json json minify: 5.15; nlohmann/json json write: 1.88; RapidJSON validate: 3.97 (3.13 checking less, no U​TF-8); RapidJSON sum: 3.21 (2.54 checking less, no U​TF-8); RapidJSON select: 3.98 (3.24 checking less, no U​TF-8); RapidJSON edit: 3.02 (2.63 checking less, no U​TF-8); RapidJSON minify: 3.65 (2.79 checking less, no U​TF-8); RapidJSON write: 3.05.</desc>
|
||||
<text class="nj-charts-tick" x="270" y="34">validate</text>
|
||||
<text class="nj-charts-tick" x="362" y="34">sum</text>
|
||||
<text class="nj-charts-tick" x="454" y="34">select</text>
|
||||
<text class="nj-charts-tick" x="546" y="34">edit</text>
|
||||
<text class="nj-charts-tick" x="638" y="34">minify</text>
|
||||
<text class="nj-charts-tick" x="730" y="34">write</text>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="66" text-anchor="end">nlohmann/json json_document</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · validate 1.00× the time of the fastest library (fully validating) twitter.json: 325 µs · parse citm_catalog.json: 742 µs · parse canada.json: 1,699 µs · accept jeopardy.json: 84,790 µs · accept">
|
||||
<rect class="nj-heat-0" x="225" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · sum 1.11× the time of the fastest library (fully validating) way: parse twitter.json: 405 µs citm_catalog.json: 945 µs canada.json: 4,038 µs jeopardy.json: 87,781 µs">
|
||||
<rect class="nj-heat-0" x="317" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="66" text-anchor="middle">1.11</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · select 1.00× the time of the fastest library (fully validating) twitter.json: 347 µs · structs (from_json) citm_catalog.json: 763 µs · parse canada.json: 1,700 µs · parse jeopardy.json: 98,540 µs · parse">
|
||||
<rect class="nj-heat-0" x="409" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · edit 1.00× the time of the fastest library (fully validating) way: editable twitter.json: 552 µs citm_catalog.json: 1,112 µs canada.json: 6,027 µs jeopardy.json: 203,217 µs">
|
||||
<rect class="nj-heat-0" x="501" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · minify 1.00× the time of the fastest library (fully validating) way: parse + dump twitter.json: 497 µs citm_catalog.json: 1,028 µs canada.json: 5,930 µs jeopardy.json: 156,014 µs">
|
||||
<rect class="nj-heat-0" x="593" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json_document · write 1.00× the time of the fastest library (fully validating) way: dump twitter.json: 153 µs citm_catalog.json: 271 µs canada.json: 3,934 µs jeopardy.json: 72,106 µs">
|
||||
<rect class="nj-heat-0" x="685" y="45" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="66" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="102" text-anchor="end">yyjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · validate 1.68× the time of the fastest library (fully validating) twitter.json: 390 µs · insitu (copy) citm_catalog.json: 995 µs · insitu (copy) canada.json: 5,320 µs · read jeopardy.json: 132,598 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="225" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="102" text-anchor="middle">1.68</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · sum 1.47× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 447 µs citm_catalog.json: 1,148 µs canada.json: 5,959 µs jeopardy.json: 138,001 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="317" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="102" text-anchor="middle">1.47</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · select 1.63× the time of the fastest library (fully validating) twitter.json: 408 µs · insitu (copy) citm_catalog.json: 996 µs · insitu (copy) canada.json: 5,375 µs · insitu (copy) jeopardy.json: 142,713 µs · read (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="409" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="102" text-anchor="middle">1.63</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · edit 1.56× the time of the fastest library (fully validating) twitter.json: 810 µs · insitu (copy) + mut copy citm_catalog.json: 1,724 µs · insitu (copy) + mut copy canada.json: 9,806 µs · mut copy jeopardy.json: 322,621 µs · insitu (copy) + mut copy (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="501" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="102" text-anchor="middle">1.56</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · minify 1.35× the time of the fastest library (fully validating) twitter.json: 657 µs · insitu (copy) + write citm_catalog.json: 1,326 µs · read + write canada.json: 9,202 µs · insitu (copy) + write jeopardy.json: 195,618 µs · read + write (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-1" x="593" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="102" text-anchor="middle">1.35</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="yyjson · write 1.14× the time of the fastest library (fully validating) way: write twitter.json: 216 µs citm_catalog.json: 331 µs canada.json: 3,620 µs jeopardy.json: 76,733 µs">
|
||||
<rect class="nj-heat-0" x="685" y="81" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="102" text-anchor="middle">1.14</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="138" text-anchor="end">sonic-rs (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · validate 1.12× the time of the fastest library (fully validating) way: IgnoredAny twitter.json: 470 µs citm_catalog.json: 966 µs canada.json: 2,249 µs jeopardy.json: 54,246 µs">
|
||||
<rect class="nj-heat-0" x="225" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="138" text-anchor="middle">1.12</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · sum 1.14× the time of the fastest library (fully validating) way: visitor twitter.json: 494 µs citm_catalog.json: 1,135 µs canada.json: 4,580 µs jeopardy.json: 59,149 µs">
|
||||
<rect class="nj-heat-0" x="317" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="138" text-anchor="middle">1.14</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · select 1.28× the time of the fastest library (fully validating) way: structs twitter.json: 557 µs citm_catalog.json: 1,023 µs canada.json: 2,247 µs jeopardy.json: 91,996 µs">
|
||||
<rect class="nj-heat-1" x="409" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="138" text-anchor="middle">1.28</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · edit 1.88× the time of the fastest library (fully validating) way: Value twitter.json: 1,189 µs citm_catalog.json: 2,384 µs canada.json: 8,007 µs jeopardy.json: 413,714 µs">
|
||||
<rect class="nj-heat-2" x="501" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="138" text-anchor="middle">1.88</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · minify 1.65× the time of the fastest library (fully validating) way: Value twitter.json: 988 µs citm_catalog.json: 2,093 µs canada.json: 7,775 µs jeopardy.json: 217,697 µs">
|
||||
<rect class="nj-heat-2" x="593" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="138" text-anchor="middle">1.65</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-rs (Rust) · write 1.94× the time of the fastest library (fully validating) way: Value twitter.json: 442 µs citm_catalog.json: 935 µs canada.json: 3,954 µs jeopardy.json: 100,889 µs">
|
||||
<rect class="nj-heat-2" x="685" y="117" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="138" text-anchor="middle">1.94</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="174" text-anchor="end">simdjson</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · validate 1.31× the time of the fastest library (fully validating) way: D​OM twitter.json: 328 µs citm_catalog.json: 810 µs canada.json: 3,178 µs jeopardy.json: 121,064 µs">
|
||||
<rect class="nj-heat-1" x="225" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="174" text-anchor="middle">1.31</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · sum 1.00× the time of the fastest library (fully validating) way: On-Demand twitter.json: 358 µs citm_catalog.json: 817 µs canada.json: 3,407 µs jeopardy.json: 90,338 µs">
|
||||
<rect class="nj-heat-0" x="317" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="174" text-anchor="middle">1.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select 1.30× the time of the fastest library (fully validating) way: D​OM twitter.json: 337 µs citm_catalog.json: 837 µs canada.json: 3,283 µs jeopardy.json: 134,701 µs">
|
||||
<rect class="nj-heat-1" x="409" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="174" text-anchor="middle">1.30</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · select, checking less 0.69× the time of the fastest fully validating library way: On-Demand twitter.json: 211 µs citm_catalog.json: 804 µs canada.json: 1,138 µs jeopardy.json: 51,878 µs reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets">
|
||||
<rect class="nj-heat-0" x="455" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="168" text-anchor="middle">0.69</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · edit simdjson's documents are read-only: it has no A​PI to change a value and write the result">
|
||||
<rect class="nj-heat-na" x="501" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-tick" x="546" y="174">n/a</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify 1.86× the time of the fastest library (fully validating) way: D​OM + to_string twitter.json: 839 µs citm_catalog.json: 1,588 µs canada.json: 14,645 µs jeopardy.json: 292,317 µs">
|
||||
<rect class="nj-heat-2" x="593" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="174" text-anchor="middle">1.86</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · minify, checking less 0.21× the time of the fastest fully validating library way: minify twitter.json: 128 µs citm_catalog.json: 322 µs canada.json: 469 µs jeopardy.json: 50,456 µs simdjson::minify() only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="153" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="168" text-anchor="middle">0.21</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="181" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simdjson · write 2.86× the time of the fastest library (fully validating) way: to_string twitter.json: 491 µs citm_catalog.json: 750 µs canada.json: 10,840 µs jeopardy.json: 196,092 µs">
|
||||
<rect class="nj-heat-3" x="685" y="153" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="174" text-anchor="middle">2.86</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="210" text-anchor="end">sonic-cpp</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · validate, checking less 1.45× the time of the fastest fully validating library way: Document twitter.json: 425 µs citm_catalog.json: 1,032 µs canada.json: 3,618 µs jeopardy.json: 95,772 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="225" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="204" text-anchor="middle">1.45</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="270" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · sum, checking less 1.32× the time of the fastest fully validating library way: Document twitter.json: 482 µs citm_catalog.json: 1,234 µs canada.json: 4,412 µs jeopardy.json: 105,062 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="317" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="204" text-anchor="middle">1.32</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="362" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · select, checking less 1.42× the time of the fastest fully validating library way: Document twitter.json: 419 µs citm_catalog.json: 1,044 µs canada.json: 3,675 µs jeopardy.json: 111,999 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="409" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="204" text-anchor="middle">1.42</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="454" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · edit, checking less 1.22× the time of the fastest fully validating library way: Document twitter.json: 663 µs citm_catalog.json: 1,572 µs canada.json: 8,879 µs jeopardy.json: 181,438 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="501" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="204" text-anchor="middle">1.22</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="546" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · minify, checking less 1.36× the time of the fastest fully validating library way: Document + Serialize twitter.json: 667 µs citm_catalog.json: 1,568 µs canada.json: 9,007 µs jeopardy.json: 174,144 µs trusts U​TF-8: sonic-cpp 1.0.2 doesn't check it">
|
||||
<rect class="nj-heat-1" x="593" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="204" text-anchor="middle">1.36</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="638" y="217" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="sonic-cpp · write 1.50× the time of the fastest library (fully validating) way: Serialize twitter.json: 270 µs citm_catalog.json: 533 µs canada.json: 5,100 µs jeopardy.json: 80,556 µs">
|
||||
<rect class="nj-heat-1" x="685" y="189" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="210" text-anchor="middle">1.50</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="246" text-anchor="end">Boost.J​SON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · validate 1.62× the time of the fastest library (fully validating) way: S​AX twitter.json: 738 µs citm_catalog.json: 1,007 µs canada.json: 5,465 µs jeopardy.json: 59,249 µs">
|
||||
<rect class="nj-heat-2" x="225" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="246" text-anchor="middle">1.62</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · sum 1.32× the time of the fastest library (fully validating) way: S​AX twitter.json: 753 µs citm_catalog.json: 1,030 µs canada.json: 5,688 µs jeopardy.json: 61,479 µs">
|
||||
<rect class="nj-heat-1" x="317" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="246" text-anchor="middle">1.32</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · select 3.26× the time of the fastest library (fully validating) way: parse twitter.json: 1,605 µs citm_catalog.json: 1,903 µs canada.json: 7,605 µs jeopardy.json: 214,973 µs">
|
||||
<rect class="nj-heat-3" x="409" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="246" text-anchor="middle">3.26</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · edit 2.44× the time of the fastest library (fully validating) way: parse twitter.json: 2,026 µs citm_catalog.json: 2,943 µs canada.json: 13,352 µs jeopardy.json: 337,632 µs">
|
||||
<rect class="nj-heat-2" x="501" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="246" text-anchor="middle">2.44</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · minify 2.70× the time of the fastest library (fully validating) way: parse + serialize twitter.json: 1,931 µs citm_catalog.json: 2,902 µs canada.json: 13,756 µs jeopardy.json: 328,321 µs">
|
||||
<rect class="nj-heat-3" x="593" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="246" text-anchor="middle">2.70</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Boost.J​SON · write 2.39× the time of the fastest library (fully validating) way: serialize twitter.json: 478 µs citm_catalog.json: 1,015 µs canada.json: 5,750 µs jeopardy.json: 137,840 µs">
|
||||
<rect class="nj-heat-2" x="685" y="225" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="246" text-anchor="middle">2.39</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="282" text-anchor="end">simd-json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · validate 2.17× the time of the fastest library (fully validating) way: tape (copy) twitter.json: 592 µs citm_catalog.json: 1,426 µs canada.json: 4,303 µs jeopardy.json: 211,716 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="225" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="282" text-anchor="middle">2.17</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · sum 1.98× the time of the fastest library (fully validating) way: visitor (copy) twitter.json: 722 µs citm_catalog.json: 1,686 µs canada.json: 5,191 µs jeopardy.json: 220,582 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="317" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="282" text-anchor="middle">1.98</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · select 2.44× the time of the fastest library (fully validating) way: structs (copy) twitter.json: 730 µs citm_catalog.json: 1,658 µs canada.json: 4,915 µs jeopardy.json: 266,073 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-2" x="409" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="282" text-anchor="middle">2.44</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · edit 3.03× the time of the fastest library (fully validating) twitter.json: 2,071 µs · borrowed (copy) citm_catalog.json: 4,465 µs · borrowed (copy) canada.json: 16,360 µs · owned (copy) jeopardy.json: 416,658 µs · borrowed (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="282" text-anchor="middle">3.03</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · minify 3.27× the time of the fastest library (fully validating) way: borrowed (copy) twitter.json: 1,924 µs citm_catalog.json: 4,375 µs canada.json: 15,278 µs jeopardy.json: 419,474 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="593" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="282" text-anchor="middle">3.27</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="simd-json (Rust) · write 2.17× the time of the fastest library (fully validating) way: borrowed twitter.json: 604 µs citm_catalog.json: 809 µs canada.json: 4,825 µs jeopardy.json: 110,710 µs">
|
||||
<rect class="nj-heat-2" x="685" y="261" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="282" text-anchor="middle">2.17</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="318" text-anchor="end">serde_json (Rust)</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate 1.43× the time of the fastest library (fully validating) way: from_utf8 + IgnoredAny twitter.json: 634 µs citm_catalog.json: 1,448 µs canada.json: 2,402 µs jeopardy.json: 66,822 µs">
|
||||
<rect class="nj-heat-1" x="225" y="297" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="318" text-anchor="middle">1.43</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · validate, checking less 1.28× the time of the fastest fully validating library way: IgnoredAny twitter.json: 487 µs citm_catalog.json: 1,370 µs canada.json: 2,318 µs jeopardy.json: 59,801 µs trusts U​TF-8 in the strings it skips (from_slice); strings it reads are checked">
|
||||
<rect class="nj-heat-1" x="271" y="297" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="312" text-anchor="middle">1.28</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="325" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · sum 2.37× the time of the fastest library (fully validating) way: visitor twitter.json: 1,318 µs citm_catalog.json: 2,299 µs canada.json: 7,610 µs jeopardy.json: 123,810 µs">
|
||||
<rect class="nj-heat-2" x="317" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="318" text-anchor="middle">2.37</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · select 1.62× the time of the fastest library (fully validating) way: from_utf8 + structs twitter.json: 769 µs citm_catalog.json: 1,504 µs canada.json: 2,442 µs jeopardy.json: 108,386 µs">
|
||||
<rect class="nj-heat-2" x="409" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="318" text-anchor="middle">1.62</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · edit 4.96× the time of the fastest library (fully validating) way: Value twitter.json: 4,474 µs citm_catalog.json: 6,922 µs canada.json: 18,301 µs jeopardy.json: 805,290 µs">
|
||||
<rect class="nj-heat-3" x="501" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="318" text-anchor="middle">4.96</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · minify 5.01× the time of the fastest library (fully validating) way: Value twitter.json: 4,081 µs citm_catalog.json: 6,880 µs canada.json: 17,249 µs jeopardy.json: 615,033 µs">
|
||||
<rect class="nj-heat-4" x="593" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="318" text-anchor="middle">5.01</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="serde_json (Rust) · write 2.12× the time of the fastest library (fully validating) way: Value twitter.json: 563 µs citm_catalog.json: 882 µs canada.json: 3,979 µs jeopardy.json: 120,716 µs">
|
||||
<rect class="nj-heat-2" x="685" y="297" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="318" text-anchor="middle">2.12</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="354" text-anchor="end">Glaze</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · validate 1.33× the time of the fastest library (fully validating) way: validate_json twitter.json: 590 µs citm_catalog.json: 1,399 µs canada.json: 1,847 µs jeopardy.json: 71,293 µs">
|
||||
<rect class="nj-heat-1" x="225" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="354" text-anchor="middle">1.33</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum 6.46× the time of the fastest library (fully validating) way: generic twitter.json: 3,206 µs citm_catalog.json: 5,928 µs canada.json: 20,405 µs jeopardy.json: 403,975 µs">
|
||||
<rect class="nj-heat-4" x="317" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="354" text-anchor="middle">6.46</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · sum, checking less 5.20× the time of the fastest fully validating library twitter.json: 2,948 µs · lazy_json citm_catalog.json: 5,928 µs · generic (validates fully) canada.json: 16,203 µs · lazy_json jeopardy.json: 231,683 µs · lazy_json reads lazily: lazy_json reads only what you ask for and steps over the rest">
|
||||
<rect class="nj-heat-4" x="363" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="348" text-anchor="middle">5.20</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="361" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select 1.35× the time of the fastest library (fully validating) way: structs (validate_skipped) twitter.json: 539 µs citm_catalog.json: 1,475 µs canada.json: 1,850 µs jeopardy.json: 99,194 µs">
|
||||
<rect class="nj-heat-1" x="409" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="354" text-anchor="middle">1.35</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · select, checking less 0.58× the time of the fastest fully validating library way: structs twitter.json: 348 µs citm_catalog.json: 408 µs canada.json: 449 µs jeopardy.json: 77,565 µs reads into structs and steps over fields it doesn't know without checking them (validate_skipped checks them too)">
|
||||
<rect class="nj-heat-0" x="455" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="348" text-anchor="middle">0.58</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="361" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · edit 5.23× the time of the fastest library (fully validating) way: generic twitter.json: 3,767 µs citm_catalog.json: 6,532 µs canada.json: 24,351 µs jeopardy.json: 940,280 µs">
|
||||
<rect class="nj-heat-4" x="501" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="354" text-anchor="middle">5.23</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify 5.12× the time of the fastest library (fully validating) way: generic twitter.json: 3,647 µs citm_catalog.json: 6,503 µs canada.json: 25,082 µs jeopardy.json: 546,003 µs">
|
||||
<rect class="nj-heat-4" x="593" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="354" text-anchor="middle">5.12</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · minify, checking less 0.70× the time of the fastest fully validating library way: minify_json twitter.json: 428 µs citm_catalog.json: 1,144 µs canada.json: 2,468 µs jeopardy.json: 94,867 µs minify_json only removes whitespace, without parsing the values">
|
||||
<rect class="nj-heat-0" x="639" y="333" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="348" text-anchor="middle">0.70</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="361" text-anchor="middle">P</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="Glaze · write 1.92× the time of the fastest library (fully validating) way: generic twitter.json: 364 µs citm_catalog.json: 712 µs canada.json: 4,265 µs jeopardy.json: 143,981 µs">
|
||||
<rect class="nj-heat-2" x="685" y="333" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="354" text-anchor="middle">1.92</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel nj-charts-name-json" x="216" y="390" text-anchor="end">nlohmann/json json</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · validate 2.00× the time of the fastest library (fully validating) way: accept twitter.json: 789 µs citm_catalog.json: 1,631 µs canada.json: 4,570 µs jeopardy.json: 94,289 µs">
|
||||
<rect class="nj-heat-2" x="225" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="270" y="390" text-anchor="middle">2.00</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · sum 1.73× the time of the fastest library (fully validating) way: sax twitter.json: 807 µs citm_catalog.json: 1,647 µs canada.json: 5,962 µs jeopardy.json: 100,804 µs">
|
||||
<rect class="nj-heat-2" x="317" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="362" y="390" text-anchor="middle">1.73</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · select 7.68× the time of the fastest library (fully validating) twitter.json: 3,523 µs · parse citm_catalog.json: 5,534 µs · structs (from_json) canada.json: 12,684 µs · parse jeopardy.json: 623,070 µs · structs (from_json)">
|
||||
<rect class="nj-heat-4" x="409" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="454" y="390" text-anchor="middle">7.68</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · edit 4.27× the time of the fastest library (fully validating) way: ordered_json twitter.json: 3,156 µs citm_catalog.json: 5,280 µs canada.json: 16,247 µs jeopardy.json: 922,463 µs">
|
||||
<rect class="nj-heat-3" x="501" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="546" y="390" text-anchor="middle">4.27</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · minify 5.15× the time of the fastest library (fully validating) way: parse + dump twitter.json: 3,980 µs citm_catalog.json: 6,495 µs canada.json: 17,573 µs jeopardy.json: 730,814 µs">
|
||||
<rect class="nj-heat-4" x="593" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="638" y="390" text-anchor="middle">5.15</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="nlohmann/json json · write 1.88× the time of the fastest library (fully validating) way: dump twitter.json: 441 µs citm_catalog.json: 628 µs canada.json: 4,091 µs jeopardy.json: 129,455 µs">
|
||||
<rect class="nj-heat-2" x="685" y="369" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="390" text-anchor="middle">1.88</text>
|
||||
</g>
|
||||
<text class="nj-charts-rowlabel " x="216" y="426" text-anchor="end">RapidJSON</text>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate 3.97× the time of the fastest library (fully validating) twitter.json: 1,638 µs · insitu (copy) citm_catalog.json: 2,230 µs · S​AX canada.json: 11,264 µs · S​AX jeopardy.json: 209,691 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="225" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="247.5" y="426" text-anchor="middle">3.97</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · validate, checking less 3.13× the time of the fastest fully validating library twitter.json: 1,135 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,666 µs · S​AX (no encoding check) canada.json: 11,264 µs · S​AX (validates fully) jeopardy.json: 157,274 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="271" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="292.5" y="420" text-anchor="middle">3.13</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="292.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum 3.21× the time of the fastest library (fully validating) twitter.json: 1,679 µs · insitu (copy) citm_catalog.json: 2,388 µs · S​AX canada.json: 11,030 µs · S​AX jeopardy.json: 216,612 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="317" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="339.5" y="426" text-anchor="middle">3.21</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · sum, checking less 2.54× the time of the fastest fully validating library twitter.json: 1,185 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,768 µs · S​AX (no encoding check) canada.json: 11,030 µs · S​AX (validates fully) jeopardy.json: 161,397 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="363" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="384.5" y="420" text-anchor="middle">2.54</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="384.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select 3.98× the time of the fastest library (fully validating) twitter.json: 1,779 µs · insitu (copy) citm_catalog.json: 2,257 µs · insitu (copy) canada.json: 12,214 µs · Document jeopardy.json: 226,825 µs · insitu (copy) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="409" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="431.5" y="426" text-anchor="middle">3.98</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · select, checking less 3.24× the time of the fastest fully validating library twitter.json: 1,194 µs · insitu (copy) (no encoding check) citm_catalog.json: 1,923 µs · Document (no encoding check) canada.json: 12,165 µs · Document (no encoding check) jeopardy.json: 175,262 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="455" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="476.5" y="420" text-anchor="middle">3.24</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="476.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit 3.02× the time of the fastest library (fully validating) way: insitu (copy) twitter.json: 2,511 µs citm_catalog.json: 3,310 µs canada.json: 20,627 µs jeopardy.json: 362,717 µs (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="501" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="523.5" y="426" text-anchor="middle">3.02</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · edit, checking less 2.63× the time of the fastest fully validating library twitter.json: 1,896 µs · insitu (copy) (no encoding check) citm_catalog.json: 2,942 µs · Document (no encoding check) canada.json: 20,627 µs · insitu (copy) (validates fully) jeopardy.json: 314,375 µs · insitu (copy) (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it) (copy): parses in place, on a copy of the input that is part of the time">
|
||||
<rect class="nj-heat-3" x="547" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="568.5" y="420" text-anchor="middle">2.63</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="568.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify 3.65× the time of the fastest library (fully validating) twitter.json: 2,963 µs · S​AX to Writer citm_catalog.json: 3,189 µs · S​AX to Writer canada.json: 21,761 µs · Document + Writer jeopardy.json: 406,899 µs · S​AX to Writer">
|
||||
<rect class="nj-heat-3" x="593" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="615.5" y="426" text-anchor="middle">3.65</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · minify, checking less 2.79× the time of the fastest fully validating library twitter.json: 1,872 µs · S​AX to Writer (no encoding check) citm_catalog.json: 2,490 µs · S​AX to Writer (no encoding check) canada.json: 21,761 µs · Document + Writer (validates fully) jeopardy.json: 282,973 µs · S​AX to Writer (no encoding check) trusts U​TF-8: RapidJSON's default (kParseValidateEncodingFlag checks it)">
|
||||
<rect class="nj-heat-3" x="639" y="405" width="44" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="660.5" y="420" text-anchor="middle">2.79</text>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="660.5" y="433" text-anchor="middle">U</text>
|
||||
</g>
|
||||
<g class="nj-heat-cell" tabindex="0" data-tip="RapidJSON · write 3.05× the time of the fastest library (fully validating) way: Writer twitter.json: 746 µs citm_catalog.json: 1,032 µs canada.json: 8,773 µs jeopardy.json: 150,334 µs">
|
||||
<rect class="nj-heat-3" x="685" y="405" width="90" height="34" rx="3"/>
|
||||
<text class="nj-charts-cell" x="730" y="426" text-anchor="middle">3.05</text>
|
||||
</g>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="8" y="472">time relative to the fastest fully validating library, less is better</text>
|
||||
<g><rect class="nj-heat-0" x="8" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="46" y="496" text-anchor="middle">below 1.15</text></g>
|
||||
<g><rect class="nj-heat-1" x="88" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="126" y="496" text-anchor="middle">1.15 to 1.5</text></g>
|
||||
<g><rect class="nj-heat-2" x="168" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="206" y="496" text-anchor="middle">1.5 to 2.5</text></g>
|
||||
<g><rect class="nj-heat-3" x="248" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="286" y="496" text-anchor="middle">2.5 to 5</text></g>
|
||||
<g><rect class="nj-heat-4" x="328" y="482" width="76" height="20" rx="3"/>
|
||||
<text class="nj-charts-cell nj-charts-cell--small" x="366" y="496" text-anchor="middle">5 and more</text></g>
|
||||
<rect class="nj-heat-na" x="420" y="482" width="40" height="20" rx="3"/>
|
||||
<text class="nj-charts-tick" x="440" y="496">n/a</text>
|
||||
<text class="nj-charts-tick nj-charts-tick--l" x="468" y="496">no A​PI for it</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 43 KiB |
@@ -104,3 +104,72 @@
|
||||
init();
|
||||
}
|
||||
})();
|
||||
|
||||
/* figures: the tooltips of the heatmaps in home/blog/how_3_13_0_got_faster.md (perf_blog_usecases_*.svg). Each
|
||||
cell is a focusable <g data-tip>: its lines (the first one the heading) are shown on hover, keyboard focus or tap.
|
||||
Without JS, the figure's <desc> and the tables in the appendix carry the same numbers. */
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
var tip = null;
|
||||
var current = null;
|
||||
|
||||
function show(cell) {
|
||||
if (!tip) {
|
||||
tip = document.createElement("div");
|
||||
tip.className = "nj-heat-tip";
|
||||
tip.setAttribute("role", "tooltip");
|
||||
tip.hidden = true;
|
||||
document.body.appendChild(tip);
|
||||
}
|
||||
if (current) current.classList.remove("nj-heat-on");
|
||||
current = cell;
|
||||
cell.classList.add("nj-heat-on");
|
||||
var lines = (cell.getAttribute("data-tip") || "").split("\n");
|
||||
tip.textContent = "";
|
||||
lines.forEach(function (line, i) {
|
||||
var el = document.createElement(i === 0 ? "strong" : "div");
|
||||
el.textContent = line;
|
||||
tip.appendChild(el);
|
||||
});
|
||||
tip.hidden = false;
|
||||
var r = cell.getBoundingClientRect();
|
||||
var w = tip.offsetWidth, h = tip.offsetHeight;
|
||||
var x = Math.min(Math.max(8, r.left + r.width / 2 - w / 2), document.documentElement.clientWidth - w - 8);
|
||||
var y = r.bottom + 8 + h > window.innerHeight ? r.top - h - 8 : r.bottom + 8;
|
||||
tip.style.left = (x + window.scrollX) + "px";
|
||||
tip.style.top = (y + window.scrollY) + "px";
|
||||
}
|
||||
|
||||
function hide() {
|
||||
if (current) current.classList.remove("nj-heat-on");
|
||||
current = null;
|
||||
if (tip) tip.hidden = true;
|
||||
}
|
||||
|
||||
function init() {
|
||||
hide();
|
||||
Array.prototype.forEach.call(document.querySelectorAll("svg.nj-charts--heat .nj-heat-cell"), function (cell) {
|
||||
if (cell.dataset.njHeatReady) return;
|
||||
cell.dataset.njHeatReady = "1";
|
||||
cell.addEventListener("mouseenter", function () { show(cell); });
|
||||
cell.addEventListener("mouseleave", hide);
|
||||
cell.addEventListener("focus", function () { show(cell); });
|
||||
cell.addEventListener("blur", hide);
|
||||
// a tap also focuses the cell; a tap elsewhere or Escape hides the tooltip
|
||||
cell.addEventListener("click", function (ev) { ev.stopPropagation(); show(cell); });
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener("click", hide);
|
||||
document.addEventListener("keydown", function (ev) { if (ev.key === "Escape") hide(); });
|
||||
window.addEventListener("scroll", hide, { passive: true });
|
||||
|
||||
if (typeof document$ !== "undefined" && document$ && typeof document$.subscribe === "function") {
|
||||
document$.subscribe(init);
|
||||
} else if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", init);
|
||||
} else {
|
||||
init();
|
||||
}
|
||||
})();
|
||||
@@ -8,6 +8,7 @@
|
||||
*[BDFL]: Benevolent Dictator for Life
|
||||
*[BJData]: Binary JData
|
||||
*[BON8]: Binary Object Notation 8
|
||||
*[BSL]: Boost Software License
|
||||
*[BSON]: Binary JSON
|
||||
*[CBOR]: Concise Binary Object Representation
|
||||
*[CC0]: Creative Commons Zero
|
||||
@@ -16,6 +17,7 @@
|
||||
*[CUDA]: Compute Unified Device Architecture
|
||||
*[CVE]: Common Vulnerabilities and Exposures
|
||||
*[DOM]: Document Object Model
|
||||
*[EDG]: Edison Design Group, maker of a C++ compiler front end
|
||||
*[EOF]: End of File
|
||||
*[FAQ]: Frequently Asked Questions
|
||||
*[GCC]: GNU Compiler Collection
|
||||
@@ -31,9 +33,11 @@
|
||||
*[JSONC]: JSON with Comments
|
||||
*[JWCC]: JSON With Commas and Comments
|
||||
*[LLDB]: LLVM Debugger
|
||||
*[LTO]: Link-Time Optimization
|
||||
*[LTS]: Long-Term Support
|
||||
*[MinGW]: Minimalist GNU for Windows
|
||||
*[MIT]: Massachusetts Institute of Technology
|
||||
*[MPL]: Mozilla Public License
|
||||
*[MsgPack]: MessagePack
|
||||
*[MSVC]: Microsoft Visual C++
|
||||
*[NaN]: Not a Number
|
||||
@@ -42,6 +46,7 @@
|
||||
*[NEON]: Arm SIMD instruction set extension
|
||||
*[NUL]: Null character (U+0000, byte value 0)
|
||||
*[ODR]: One Definition Rule
|
||||
*[PCH]: Precompiled Header
|
||||
*[REUSE]: Software licensing specification by the Free Software Foundation Europe
|
||||
*[RFC]: Request for Comments
|
||||
*[RTTI]: Runtime Type Information
|
||||
@@ -60,3 +65,4 @@
|
||||
*[UDLs]: User-defined literals
|
||||
*[URL]: Uniform Resource Locator
|
||||
*[UTF]: Unicode Transformation Format
|
||||
*[XOR]: Exclusive or
|
||||
@@ -0,0 +1,183 @@
|
||||
benchmark,unit,3.12.0,3.13.0,speedup
|
||||
FromBinaryBuffer/bson / twitter,ns,3.07203e+06,998445,3.077
|
||||
ParseStringOrdered/jeopardy,ns,3.56038e+08,1.10829e+08,3.213
|
||||
JsonPointerToString/twitter,ns,2.16889e+06,793513,2.733
|
||||
BinaryToCbor/8192,ns,511.25,238.725,2.142
|
||||
FromMsgpack/unsigned_ints,ns,5.51164e+07,2.72444e+07,2.023
|
||||
JsonPointerAt/twitter,ns,780306,585055,1.334
|
||||
CopyOnly/twitter,ns,393964,399209,0.987
|
||||
FlattenOrdered/citm_catalog,ns,2.52682e+08,1.37388e+06,183.919
|
||||
FromBinaryFile/ubjson / canada,ns,1.34e+07,6.20075e+06,2.161
|
||||
FromBinaryShape/containers / bjdata,ns,1.41456e+07,7.04794e+06,2.007
|
||||
ParseIndented/jeopardy / 4,ns,3.33616e+08,1.31177e+08,2.543
|
||||
FromMsgpack/signed_ints,ns,6.19882e+07,3.19294e+07,1.941
|
||||
FromBinaryShape/containers / bson,ns,1.69936e+07,9.81169e+06,1.732
|
||||
BinaryToCbor/128,ns,247.24,110.472,2.238
|
||||
FromBinaryBuffer/cbor / jeopardy,ns,3.52319e+08,1.15873e+08,3.041
|
||||
ParseFile/jeopardy,ns,3.26899e+08,1.57231e+08,2.079
|
||||
FromMsgpack/jeopardy,ns,1.11847e+09,1.81305e+08,6.169
|
||||
FromBinaryFile/cbor / twitter,ns,9.70523e+06,1.5381e+06,6.310
|
||||
ToCbor/floats,ns,8.8461e+06,1.88426e+06,4.695
|
||||
ParseFile/small_signed_ints,ns,6.30771e+07,3.13826e+07,2.010
|
||||
FromBinaryBuffer/msgpack / twitter,ns,3.01937e+06,937570,3.220
|
||||
BinaryToCbor/16384,ns,947.242,408.275,2.320
|
||||
FromBinaryFile/bson / twitter,ns,9.98109e+06,1.78121e+06,5.604
|
||||
ParseString/twitter,ns,3.15572e+06,1.04655e+06,3.015
|
||||
Unflatten/twitter,ns,4.47709e+06,2.11403e+06,2.118
|
||||
BinaryToCbor/8,ns,242.891,46.6253,5.209
|
||||
BinaryToCbor/16,ns,238.431,46.5179,5.126
|
||||
Dump/small_signed_ints / 4,ns,2.49933e+07,8.62966e+06,2.896
|
||||
ParseString/jeopardy,ns,3.04927e+08,1.29515e+08,2.354
|
||||
Dump/signed_ints / 4,ns,3.18294e+07,1.68297e+07,1.891
|
||||
Flatten/twitter,ns,3.4886e+06,2.00532e+06,1.740
|
||||
FromBinaryBuffer/cbor / twitter,ns,3.00428e+06,964870,3.114
|
||||
Dump/jeopardy / 4,ns,2.19025e+08,3.43818e+07,6.370
|
||||
SaxParse/citm_catalog,ns,6.33865e+06,969665,6.537
|
||||
JsonPointerAt/citm_catalog,ns,1.80656e+06,1.10975e+06,1.628
|
||||
DestroyOnly/citm_catalog,ns,874073,663615,1.317
|
||||
FromBinaryShape/scalars / ubjson,ns,2.46643e+07,1.13906e+07,2.165
|
||||
Unflatten/canada,ns,4.04569e+07,1.07458e+07,3.765
|
||||
ParseString/floats,ns,1.18934e+08,3.02332e+07,3.934
|
||||
ParseIndented/canada / 4,ns,3.38495e+07,5.02409e+06,6.737
|
||||
ParseString/signed_ints,ns,1.19593e+08,3.14351e+07,3.804
|
||||
ParseFile/signed_ints,ns,1.24813e+08,4.61765e+07,2.703
|
||||
JsonPointerContains/twitter,ns,1.27938e+06,606069,2.111
|
||||
Dump/floats / 4,ns,7.10935e+07,2.41369e+07,2.945
|
||||
Dump/floats / -,ns,6.27641e+07,2.33213e+07,2.691
|
||||
ToCbor/canada,ns,1.36795e+06,546001,2.505
|
||||
FromBinaryBuffer/bson / canada,ns,9.21307e+06,5.51059e+06,1.672
|
||||
ToCbor/twitter,ns,638321,141975,4.496
|
||||
ParseIndented/twitter / 4,ns,3.58298e+06,1.10646e+06,3.238
|
||||
Iterate/citm_catalog,ns,297646,167302,1.779
|
||||
FromBinaryBuffer/bjdata / canada,ns,8.08015e+06,4.17334e+06,1.936
|
||||
ParseStreamValues/ndjson,ns,6.96248e+06,3.7254e+06,1.869
|
||||
Diff/twitter,ns,4.79296e+06,635531,7.542
|
||||
Dump/citm_catalog / -,ns,1.37753e+06,290658,4.739
|
||||
FromBinaryShape/nested / bjdata,ns,96017.5,37882.1,2.535
|
||||
ToJsonStrings/copy,ns,5.83243e+06,5.54046e+06,1.053
|
||||
Dump/canada / 4,ns,8.9039e+06,2.9943e+06,2.974
|
||||
CopyRing/twitter,ns,855374,766521,1.116
|
||||
FromBinaryBuffer/cbor / citm_catalog,ns,3.70397e+06,1.46121e+06,2.535
|
||||
FromBinaryFile/bjdata / twitter,ns,1.02688e+07,1.90492e+06,5.391
|
||||
FromBinaryShape/containers / ubjson_optimized,ns,1.4727e+07,4.80309e+06,3.066
|
||||
FromMsgpack/citm_catalog,ns,8.85701e+06,2.2473e+06,3.941
|
||||
CopyOnly/canada,ns,1.53425e+06,1.49609e+06,1.026
|
||||
Equal/canada,ns,453965,332795,1.364
|
||||
Diff/citm_catalog,ns,6.74369e+06,1.07135e+06,6.295
|
||||
ParseStringOrdered/canada,ns,1.49834e+07,4.29102e+06,3.492
|
||||
Flatten/canada,ns,2.82148e+07,1.11369e+07,2.533
|
||||
Accept/canada,ns,1.26836e+07,2.25933e+06,5.614
|
||||
CopyAssign/twitter,ns,804857,735341,1.095
|
||||
BinaryToCbor/4096,ns,402.442,159.22,2.528
|
||||
ParseFILE/citm_catalog,ns,3.45528e+07,7.26455e+06,4.756
|
||||
ToCbor/signed_ints,ns,1.13256e+07,2.76748e+06,4.092
|
||||
Patch/canada,ns,9.80719e+06,3.36006e+06,2.919
|
||||
GetArray<std::vector<int>>,ns,6589.63,655.021,10.060
|
||||
Dump/canada / -,ns,6.62927e+06,2.24661e+06,2.951
|
||||
GetVectorDouble/floats,ns,6.62214e+06,641259,10.327
|
||||
Accept/citm_catalog,ns,6.3596e+06,909397,6.993
|
||||
ParseFILE/twitter,ns,1.35627e+07,3.27982e+06,4.135
|
||||
FromBinaryBuffer/msgpack / jeopardy,ns,3.54302e+08,1.10166e+08,3.216
|
||||
ParseFile/floats,ns,1.3128e+08,4.88806e+07,2.686
|
||||
Accept/small_signed_ints,ns,5.5849e+07,1.88756e+07,2.959
|
||||
Accept/jeopardy,ns,2.2049e+08,6.3504e+07,3.472
|
||||
Accept/signed_ints,ns,1.15055e+08,2.84818e+07,4.040
|
||||
CopyRing/canada,ns,3.68758e+06,2.88527e+06,1.278
|
||||
Patch/twitter,ns,1.44963e+06,848729,1.708
|
||||
Iterate/twitter,ns,87147.2,61831.9,1.409
|
||||
ParseFile/twitter,ns,3.33795e+06,1.3545e+06,2.464
|
||||
GetArray<std::deque<int>>,ns,8110.78,1156.06,7.016
|
||||
FromBinaryBuffer/cbor / canada,ns,8.20468e+06,2.31071e+06,3.551
|
||||
Equal/twitter,ns,141057,125995,1.120
|
||||
ParseStreamValues/numbers,ns,1.87073e+06,370959,5.043
|
||||
Dump/small_signed_ints / -,ns,1.78162e+07,7.86562e+06,2.265
|
||||
JsonPointerToString/citm_catalog,ns,6.63798e+06,1.869e+06,3.552
|
||||
Copy/twitter,ns,797034,721889,1.104
|
||||
Diff/canada,ns,3.83337e+07,3.67301e+06,10.437
|
||||
FromBinaryBuffer/ubjson_optimized / twitter,ns,3.1281e+06,959992,3.258
|
||||
BinaryToCbor/32,ns,251.857,47.32,5.322
|
||||
GetArray<std::set<int>>,ns,58113.1,40911.2,1.420
|
||||
CopyAssign/citm_catalog,ns,1.66804e+06,1.48043e+06,1.127
|
||||
ToCbor/jeopardy,ns,7.16464e+07,2.11077e+07,3.394
|
||||
CopyRing/citm_catalog,ns,1.70236e+06,1.50767e+06,1.129
|
||||
FromBinaryBuffer/ubjson / canada,ns,8.14082e+06,4.15725e+06,1.958
|
||||
ToCbor/small_signed_ints,ns,1.02087e+07,2.3872e+06,4.276
|
||||
DestroyOnly/canada,ns,2.13545e+06,1.37061e+06,1.558
|
||||
FromBinaryBuffer/ubjson / citm_catalog,ns,3.81161e+06,1.73601e+06,2.196
|
||||
Dump/jeopardy / -,ns,2.01242e+08,3.04052e+07,6.619
|
||||
FromBinaryBuffer/msgpack / citm_catalog,ns,3.70428e+06,1.42385e+06,2.602
|
||||
ParseStringOrdered/citm_catalog,ns,1.07899e+07,1.63999e+06,6.579
|
||||
ParseString/unsigned_ints,ns,1.17897e+08,3.02538e+07,3.897
|
||||
Patch/citm_catalog,ns,2.48869e+06,1.60776e+06,1.548
|
||||
SaxParse/canada,ns,1.28389e+07,3.21707e+06,3.991
|
||||
ParseString/citm_catalog,ns,7.20303e+06,1.7454e+06,4.127
|
||||
FromBinaryFile/cbor / canada,ns,1.42056e+07,4.37844e+06,3.244
|
||||
BinaryToCbor/256,ns,269.641,86.3027,3.124
|
||||
ParseFILE/canada,ns,5.22098e+07,1.38907e+07,3.759
|
||||
BinaryToCbor/32768,ns,1538.42,806.578,1.907
|
||||
Accept/floats,ns,1.13316e+08,2.40029e+07,4.721
|
||||
FromMsgpack/floats,ns,5.92985e+07,2.71551e+07,2.184
|
||||
ParseString/small_signed_ints,ns,6.05098e+07,2.18687e+07,2.767
|
||||
JsonPointerParse/citm_catalog,ns,5.64871e+06,2.16902e+06,2.604
|
||||
Copy/canada,ns,3.64004e+06,2.8296e+06,1.286
|
||||
Dump/twitter / 4,ns,1.56293e+06,247785,6.308
|
||||
FromBinaryShape/nested / msgpack,ns,90351.2,34224,2.640
|
||||
FromBinaryBuffer/ubjson_optimized / canada,ns,8.36221e+06,2.82594e+06,2.959
|
||||
JsonPointerContains/citm_catalog,ns,2.71985e+06,1.23844e+06,2.196
|
||||
FromMsgpack/small_signed_ints,ns,6.27969e+07,3.33815e+07,1.881
|
||||
DestroyOnly/twitter,ns,401772,322543,1.246
|
||||
FromBinaryShape/containers / msgpack,ns,1.37471e+07,3.71417e+06,3.701
|
||||
FromBinaryShape/scalars / msgpack,ns,2.40944e+07,9.77821e+06,2.464
|
||||
ToCbor/citm_catalog,ns,1.02089e+06,257529,3.964
|
||||
GetVectorInt/signed_ints,ns,8.04308e+06,3.35704e+06,2.396
|
||||
Accept/twitter,ns,2.45943e+06,458446,5.365
|
||||
Iterate/canada,ns,861455,320474,2.688
|
||||
ToCbor/unsigned_ints,ns,7.98977e+06,2.75684e+06,2.898
|
||||
FromBinaryShape/scalars / bjdata,ns,2.43317e+07,1.12007e+07,2.172
|
||||
BinaryToCbor/2048,ns,332.826,114.084,2.917
|
||||
BinaryToCbor/512,ns,291.316,92.8039,3.139
|
||||
FlattenOrdered/twitter,ns,4.92534e+07,851500,57.843
|
||||
Copy/citm_catalog,ns,1.61348e+06,1.44942e+06,1.113
|
||||
FromBinaryShape/containers / ubjson,ns,1.40981e+07,6.87399e+06,2.051
|
||||
BinaryToCbor/1024,ns,304.119,95.8643,3.172
|
||||
FromBinaryBuffer/ubjson / twitter,ns,3.12147e+06,962822,3.242
|
||||
Dump/signed_ints / -,ns,2.34455e+07,1.61521e+07,1.452
|
||||
FromBinaryShape/scalars / cbor,ns,2.54779e+07,9.63099e+06,2.645
|
||||
FromBinaryBuffer/cbor / signed_ints,ns,3.57449e+07,1.2803e+07,2.792
|
||||
CopyOnly/citm_catalog,ns,734852,783826,0.938
|
||||
Dump/unsigned_ints / -,ns,2.3437e+07,1.6565e+07,1.415
|
||||
Accept/unsigned_ints,ns,1.14173e+08,2.74092e+07,4.165
|
||||
FromMsgpack/canada,ns,1.42472e+07,4.37022e+06,3.260
|
||||
ParseStringOrdered/twitter,ns,4.32143e+06,910717,4.745
|
||||
Dump/twitter / -,ns,1.38581e+06,207620,6.675
|
||||
BinaryToCbor/64,ns,250.506,81.5793,3.071
|
||||
JsonPointerParse/twitter,ns,2.40825e+06,979256,2.459
|
||||
GetMap/citm_catalog,ns,3.41415e+06,2.37109e+06,1.440
|
||||
ToJsonStrings/move,ns,5.83899e+06,3.02241e+06,1.932
|
||||
FromBinaryBuffer/ubjson / jeopardy,ns,3.67059e+08,1.15063e+08,3.190
|
||||
FromBinaryShape/nested / ubjson,ns,96068.6,37753.5,2.545
|
||||
FromBinaryBuffer/bjdata / twitter,ns,3.11851e+06,963022,3.238
|
||||
FromBinaryShape/nested / cbor,ns,93124.8,34434.7,2.704
|
||||
ParseFile/citm_catalog,ns,7.62707e+06,2.39694e+06,3.182
|
||||
FromBinaryFile/ubjson / twitter,ns,1.04355e+07,1.90842e+06,5.468
|
||||
Dump/citm_catalog / 4,ns,1.92608e+06,416105,4.629
|
||||
CopyAssign/canada,ns,3.68545e+06,2.87633e+06,1.281
|
||||
Unflatten/citm_catalog,ns,9.65545e+06,3.47021e+06,2.782
|
||||
FromBinaryBuffer/bjdata_optimized / twitter,ns,3.14359e+06,967149,3.250
|
||||
FromBinaryBuffer/cbor / floats,ns,2.88404e+07,8.22731e+06,3.505
|
||||
Equal/citm_catalog,ns,264018,254367,1.038
|
||||
FromBinaryShape/containers / cbor,ns,1.38356e+07,3.8445e+06,3.599
|
||||
Flatten/citm_catalog,ns,6.43708e+06,2.96328e+06,2.172
|
||||
FromMsgpack/twitter,ns,9.69832e+06,1.46011e+06,6.642
|
||||
FromBinaryBuffer/bson / citm_catalog,ns,3.86353e+06,1.73584e+06,2.226
|
||||
FromBinaryBuffer/msgpack / canada,ns,8.21458e+06,2.2769e+06,3.608
|
||||
"GetArray<std::array<int, 1000>>",ns,2228.17,630.225,3.536
|
||||
SaxParse/twitter,ns,2.4729e+06,472447,5.234
|
||||
ParseString/canada,ns,1.50552e+07,4.35028e+06,3.461
|
||||
ParseFile/canada,ns,1.79247e+07,6.11532e+06,2.931
|
||||
ParseFile/unsigned_ints,ns,1.22099e+08,4.40082e+07,2.774
|
||||
FromCborChunkedString/10000 chunks,ns,89638.1,81306.2,1.102
|
||||
FromBinaryShape/nested / bson,ns,102178,46148.5,2.214
|
||||
ParseIndented/citm_catalog / 4,ns,7.27956e+06,1.75204e+06,4.155
|
||||
Dump/unsigned_ints / 4,ns,3.15101e+07,1.7373e+07,1.814
|
||||
FromBinaryBuffer/bjdata_optimized / canada,ns,8.52567e+06,2.93164e+06,2.908
|
||||
|
@@ -3,22 +3,24 @@
|
||||
Generated files:
|
||||
|
||||
- perf_blog_overview.svg: speedup of 3.13.0 over 3.12.0 per workload (Google Benchmark suite)
|
||||
- perf_blog_distribution.svg: how many of the suite's benchmarks got how much faster (data/perf_suite.csv)
|
||||
- perf_blog_timeline_<workload>.svg: speedup over 3.12.0 of eight workloads at every develop commit that changed
|
||||
json.hpp or json_view.hpp since 3.12.0, one panel each
|
||||
- perf_blog_swar.svg: the eight-byte string test on one word of input
|
||||
- perf_blog_cliffs.svg: operations that were quadratic or worse, 3.12.0 against 3.13.0 (log scale)
|
||||
- perf_blog_view.svg: parse throughput of json_document and six other document parsers
|
||||
- perf_blog_view_dump.svg: write throughput of the same engines, each writing a document parsed beforehand
|
||||
- perf_blog_usecases_<platform>.svg: libraries x use cases, time relative to the fastest fully validating library
|
||||
(data/perf_usecases_<platform>.json); perf_blog_tables.py prints the tables of the appendix from the same data
|
||||
|
||||
The numbers are copied from the tables of the post (the timeline from data/perf_timeline.csv, which
|
||||
`tests/benchmarks/history/history.py summarize` writes); the tables stay on the page as the accessible fallback. Update both together.
|
||||
Like the figures of charts.py, the SVGs are not images: the page includes their text with
|
||||
`--8<-- "images/<name>.svg"`, so they follow the colours and fonts of the page (`nj-charts` rules in
|
||||
`--8<-- "images/<name>.svg"`, so they follow the colors and fonts of the page (`nj-charts` rules in
|
||||
docs/css/fig-charts.css, `nj-fig` rules in docs/css/brand.css). Run `python3 scripts/figures/perf_blog.py` from
|
||||
docs/mkdocs after changing data or drawing, and commit the generated files.
|
||||
"""
|
||||
import csv
|
||||
import html
|
||||
import json
|
||||
import math
|
||||
import re
|
||||
from pathlib import Path
|
||||
@@ -29,7 +31,8 @@ MINUS = "−"
|
||||
TIMES = "×"
|
||||
|
||||
# words the abbreviation extension (includes/glossary.md) would wrap in <abbr> inside the SVG text
|
||||
ABBR = re.compile(r"(?<![\w;])(BJData|BON8|BSON|CBOR|GCC|UBJSON|MsgPack|JSON|DOM|SAX|SIMD|UTF|ASCII)(?!\w)")
|
||||
GLOSSARY = re.findall(r"^\*\[([^\]]+)\]", (HERE.parents[1] / "includes" / "glossary.md").read_text(), re.M)
|
||||
ABBR = re.compile(r"(?<![\w;])(%s)(?!\w)" % "|".join(sorted(map(re.escape, GLOSSARY), key=len, reverse=True)))
|
||||
|
||||
|
||||
def protect(text):
|
||||
@@ -140,7 +143,7 @@ def overview():
|
||||
hi = max(v for _, _, v in OVERVIEW)
|
||||
hi = math.ceil(hi + 0.5)
|
||||
X = lambda v: L + v / hi * (R - L)
|
||||
pitch, bh, top = 24, 15, 34
|
||||
pitch, bh, top = 24, 15, 8
|
||||
b, desc = [], []
|
||||
y = top
|
||||
group = None
|
||||
@@ -165,23 +168,66 @@ def overview():
|
||||
desc.append("%s %s" % (label, fx(v).replace(TIMES, "x")))
|
||||
b.append('<line class="nj-charts-ref" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (X(1), top, X(1), axis_y))
|
||||
b.append('<line class="nj-charts-zero" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (X(0), top, X(0), axis_y))
|
||||
b.append('<text class="nj-charts-note" x="%g" y="%g">speedup over 3.12.0, more is better (the line at 1%s is 3.12.0)</text>' % (L, 18, TIMES))
|
||||
write("perf_blog_overview.svg", W, axis_y + 28, "nj-charts--blog", "nj-blog-overview",
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">speedup over 3.12.0 (3.12.0 = 1%s), more is better</text>'
|
||||
% ((L + R) / 2, axis_y + 34, TIMES))
|
||||
write("perf_blog_overview.svg", W, axis_y + 44, "nj-charts--blog", "nj-blog-overview",
|
||||
"Speedup of 3.13.0 over 3.12.0 per workload, Apple M1 Max, Apple clang",
|
||||
"Horizontal bars of the speedup, more is better. " + "; ".join(desc) + ".", b)
|
||||
|
||||
|
||||
# ---------- distribution: how many of the suite's benchmarks got how much faster ----------
|
||||
# bins of the speedup (3.12.0 time / 3.13.0 time) over all rows of data/perf_suite.csv
|
||||
BINS = [(0, 1, "below 1" + TIMES), (1, 1.5, "1 to 1.5" + TIMES), (1.5, 2, "1.5 to 2" + TIMES),
|
||||
(2, 3, "2 to 3" + TIMES), (3, 5, "3 to 5" + TIMES), (5, 10, "5 to 10" + TIMES), (10, 1e9, "10" + TIMES + " or more")]
|
||||
|
||||
|
||||
def distribution():
|
||||
rows = list(csv.DictReader((HERE / "data" / "perf_suite.csv").open()))
|
||||
s = sorted(float(r["speedup"]) for r in rows)
|
||||
n = len(s)
|
||||
counts = [sum(lo <= v < hi for v in s) for lo, hi, _ in BINS]
|
||||
geo = math.exp(sum(math.log(v) for v in s) / n)
|
||||
med = (s[(n - 1) // 2] + s[n // 2]) / 2
|
||||
W, H = 560, 250
|
||||
L, R, T, B = 52, 548, 16, 196
|
||||
hi = 10 * math.ceil(max(counts) / 10 + 0.4)
|
||||
Y = lambda c: B - c / hi * (B - T)
|
||||
slot = (R - L) / len(BINS)
|
||||
b, desc = [], []
|
||||
for t in range(0, hi + 1, 20):
|
||||
b.append('<line class="nj-charts-grid" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (L, Y(t), R, Y(t)))
|
||||
b.append('<text class="nj-charts-tick nj-charts-tick--r" x="%g" y="%g">%d</text>' % (L - 6, Y(t) + 4, t))
|
||||
for k, ((lo, _, label), c) in enumerate(zip(BINS, counts)):
|
||||
x = L + k * slot + 8
|
||||
w = slot - 16
|
||||
cls = "nj-charts-c2" if lo < 1 else "nj-charts-c1"
|
||||
b.append('<rect class="%s" x="%.1f" y="%.1f" width="%.1f" height="%.1f" rx="3"><title>%s: %d</title></rect>'
|
||||
% (cls, x, Y(c), w, B - Y(c), label, c))
|
||||
b.append('<text class="nj-charts-val" x="%.1f" y="%.1f" text-anchor="middle">%d</text>' % (x + w / 2, Y(c) - 5, c))
|
||||
b.append('<text class="nj-charts-tick" x="%.1f" y="%.1f">%s</text>' % (x + w / 2, B + 16, label))
|
||||
desc.append("%s: %d" % (label.replace(TIMES, "x"), c))
|
||||
b.append('<line class="nj-charts-axis" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (L, B, R, B))
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">speedup over 3.12.0, more is better</text>' % ((L + R) / 2, H - 10))
|
||||
b.append('<text class="nj-charts-tick" transform="rotate(-90)" x="%g" y="14">number of benchmarks</text>' % (-(T + B) / 2))
|
||||
print("distribution: median %s, geometric mean %s" % (fx(med), fx(geo)))
|
||||
write("perf_blog_distribution.svg", W, H, "nj-charts--blog", "nj-blog-dist",
|
||||
"Speedup of 3.13.0 over 3.12.0 for all %d benchmarks of the suite" % n,
|
||||
"Bars counting the benchmarks per speedup range: " + "; ".join(desc)
|
||||
+ ". Median %s, geometric mean %s." % (fx(med).replace(TIMES, "x"), fx(geo).replace(TIMES, "x")), b)
|
||||
|
||||
|
||||
# ---------- timeline: one panel per workload ----------
|
||||
# (column in perf_timeline.csv, panel title, [PR numbers to label])
|
||||
# (column in perf_timeline.csv, panel title, [(PR, label)]): each labeled step shows the number of the theme that
|
||||
# explains it ("U" for the UTF-8 check of the binary readers that came and went); the appendix maps steps to PRs
|
||||
TIMELINE = [
|
||||
("parse_citm", "parse() citm_catalog.json", [5234, 5283, 5592, 5809, 5810, 5882]),
|
||||
("parse_canada", "parse() canada.json", [5234, 5283, 5617, 5738, 5851, 5882]),
|
||||
("accept_twitter", "accept() twitter.json", [5234, 5283, 5592, 5809, 5810, 5853]),
|
||||
("parse_twitter_ifstream", "parse() twitter.json, std::ifstream", [5828, 5884]),
|
||||
("dump_twitter", "dump() twitter.json", [5285, 5738, 5878, 5883]),
|
||||
("dump_canada", "dump() canada.json", [5285, 5634]),
|
||||
("from_cbor_twitter", "from_cbor() twitter", [5233, 5501, 5185, 5746]),
|
||||
("to_cbor_twitter", "to_cbor() twitter", [5328, 5824, 5885]),
|
||||
("parse_citm", "parse() citm_catalog.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5882, "4")]),
|
||||
("parse_canada", "parse() canada.json", [(5234, "4"), (5283, "1"), (5617, "3"), (5738, "3"), (5851, "3"), (5882, "4")]),
|
||||
("accept_twitter", "accept() twitter.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5853, "2")]),
|
||||
("parse_twitter_ifstream", "parse() twitter.json, std::ifstream", [(5828, "1"), (5884, "1")]),
|
||||
("dump_twitter", "dump() twitter.json", [(5285, "6"), (5738, "2"), (5878, "2"), (5883, "2")]),
|
||||
("dump_canada", "dump() canada.json", [(5285, "6"), (5634, "3")]),
|
||||
("from_cbor_twitter", "from_cbor() twitter", [(5233, "1"), (5501, "4"), (5185, "U"), (5746, "U")]),
|
||||
("to_cbor_twitter", "to_cbor() twitter", [(5328, "4"), (5824, "6"), (5885, "6")]),
|
||||
]
|
||||
MONTHS = [("2025-04", "3.12.0"), ("2026-09", "Sep 2026"), ("2026-10", "Oct")]
|
||||
|
||||
@@ -190,7 +236,7 @@ def timeline():
|
||||
rows = list(csv.DictReader((HERE / "data" / "perf_timeline.csv").open()))
|
||||
n = len(rows)
|
||||
W, H = 340, 270
|
||||
L, R, T, B = 44, 330, 62, 208
|
||||
L, R, T, B = 44, 330, 66, 208
|
||||
for col, title, labels in TIMELINE:
|
||||
vals = [float(r[col]) if r[col] else None for r in rows]
|
||||
base = vals[0]
|
||||
@@ -227,35 +273,38 @@ def timeline():
|
||||
# labels for named steps: a dot at the commit and its PR number above it; PRs a few commits apart share a
|
||||
# label, and a label that would overlap one already placed moves up
|
||||
groups = []
|
||||
for pr in labels:
|
||||
for pr, lab in labels:
|
||||
i = next(k for k, r in enumerate(rows) if r["pr"] == str(pr))
|
||||
if groups and X(i) - X(groups[-1][-1][1]) < 6:
|
||||
groups[-1].append((pr, i))
|
||||
groups[-1].append((pr, i, lab))
|
||||
else:
|
||||
groups.append([(pr, i)])
|
||||
groups.append([(pr, i, lab)])
|
||||
# labels in two rows above the plot, each with a guide down to its dot
|
||||
placed = []
|
||||
for g in groups:
|
||||
i = g[-1][1]
|
||||
x, y = X(i), Y(rel[i])
|
||||
for pr, k in g:
|
||||
for pr, k, lab in g:
|
||||
b.append('<circle class="nj-charts-json-dot" cx="%.1f" cy="%.1f" r="3.5"><title>#%s: %s</title></circle>'
|
||||
% (X(k), Y(rel[k]), pr, fx(rel[k])))
|
||||
text = ", ".join("#%s" % pr for pr, _ in g)
|
||||
w = 7.2 * len(text)
|
||||
marks = list(dict.fromkeys(lab for _, _, lab in g))
|
||||
w = 18 * len(marks) - 3
|
||||
tx = min(max(x, L + w / 2), R - w / 2)
|
||||
row = 0
|
||||
while any(r == row and abs(tx - px) < (w + pw) / 2 + 4 for px, r, pw in placed):
|
||||
row += 1
|
||||
placed.append((tx, row, w))
|
||||
ty = 50 - 13 * row
|
||||
b.append('<line class="nj-charts-grid" stroke-dasharray="2 2" x1="%.1f" y1="%.1f" x2="%.1f" y2="%.1f"/>' % (x, ty + 4, x, y - 5))
|
||||
b.append('<text class="nj-charts-note" x="%.1f" y="%.1f" text-anchor="middle">%s</text>' % (tx, ty, text))
|
||||
ty = 46 - 18 * row # the center of the badges
|
||||
b.append('<line class="nj-charts-grid" stroke-dasharray="2 2" x1="%.1f" y1="%.1f" x2="%.1f" y2="%.1f"/>' % (x, ty + 8, x, y - 5))
|
||||
for k, mark in enumerate(marks):
|
||||
cx = tx - w / 2 + 7.5 + 18 * k
|
||||
b.append('<circle class="nj-theme-dot%s" cx="%.1f" cy="%.1f" r="7.5"/>' % ("" if mark.isdigit() else " nj-theme-dot--other", cx, ty))
|
||||
b.append('<text class="nj-theme-num" x="%.1f" y="%.1f" text-anchor="middle">%s</text>' % (cx, ty + 4, mark))
|
||||
b.append('<line class="nj-charts-axis" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (L, B, R, B))
|
||||
b.append('<text class="nj-charts-note" x="%g" y="%g">speedup over 3.12.0 (log scale), more is better</text>' % (8, H - 8))
|
||||
final = rel[-1]
|
||||
desc = ("%s: speedup over 3.12.0 at each of %d commits, ending at %s. Labeled steps: %s."
|
||||
% (title, n, fx(final).replace(TIMES, "x"), ", ".join("#%s" % p for p in labels)))
|
||||
desc = ("%s: speedup over 3.12.0 at each of %d commits, ending at %s. Labeled steps, by theme: %s."
|
||||
% (title, n, fx(final).replace(TIMES, "x"), ", ".join(lab for _, lab in labels)))
|
||||
write("perf_blog_timeline_%s.svg" % col, W, H, "nj-charts--timeline", "nj-blog-tl-" + col,
|
||||
"%s: speedup over 3.12.0 by commit" % title, desc, b)
|
||||
|
||||
@@ -266,8 +315,8 @@ CLIFFS = [
|
||||
("diff() 64k numbers vs []", 4102, 9.98),
|
||||
("diff() 20k objects vs half", 119, 3.85),
|
||||
("parse() callback, 32k objects", 1334, 11.5),
|
||||
("< nested 24 deep", 62.6, 0.002),
|
||||
("< citm, 10x", 274, 3.81),
|
||||
("operator< nested 24 deep", 62.6, 0.002),
|
||||
("operator< citm, 10x", 274, 3.81),
|
||||
("flatten() citm, ordered_json", 253, 1.37),
|
||||
("to_bson() 200 deep, 100x", 19.5, 0.566),
|
||||
("push_back() 100k, diagnostics", 1514, 4.98),
|
||||
@@ -306,84 +355,282 @@ def cliffs():
|
||||
"Dot plot on a logarithmic time axis, less is better; an arrow leads from each 3.12.0 time to the 3.13.0 time. " + "; ".join(desc) + ".", b)
|
||||
|
||||
|
||||
# ---------- json_view: parse throughput ----------
|
||||
# engines and GB/s per file, copied from the table in "Build a different data structure"
|
||||
VIEW_FILES = ["twitter.json", "citm_catalog.json", "canada.json", "jeopardy.json"]
|
||||
VIEW_BYTES = [631514, 1727204, 2251051, 55554625]
|
||||
VIEW_US = [ # (engine, css class, [µs per file]), fresh documents, from the table in "How it compares"
|
||||
("nlohmann/json json_document", "nj-charts-c1", [183, 364, 943, 22681]),
|
||||
("yyjson", "nj-charts-c2", [194, 478, 1489, 30342]),
|
||||
("simdjson DOM", "nj-charts-c3", [202, 486, 2097, 26904]),
|
||||
("sonic-rs (Rust)", "nj-charts-c4", [302, 664, 1907, 30202]),
|
||||
("sonic-cpp", "nj-charts-c5", [379, 986, 2580, 40804]),
|
||||
("Boost.JSON", "nj-charts-c6", [868, 1483, 2481, 88925]),
|
||||
("nlohmann/json json::parse", "nj-charts-c1 nj-charts-dim", [1352, 2386, 5915, 163750]),
|
||||
# ---------- the price: compile time of two programs against 3.12.0 ----------
|
||||
# CPU time of the compiler in ms, median of 9 interleaved rounds, C++20, M1 Max (the post's appendix G)
|
||||
# (3.12.0, 3.13.0, 3.13.0 with a precompiled header, 3.13.0 as a module)
|
||||
PRICE = [
|
||||
("Apple clang 21, -O0 (debug)", [("count_numbers", 959.1, 1155.3, 679.1, 803.9), ("server_config", 1108.2, 1445.1, 763.1, 1057.0)]),
|
||||
("Apple clang 21, -O2", [("count_numbers", 1268.8, 1867.7, 1364.3, 1512.9), ("server_config", 1576.9, 2353.6, 1749.4, 2141.4)]),
|
||||
("GCC 16, -O0 (debug)", [("count_numbers", 1443.7, 2346.4, 1579.2, 1662.5), ("server_config", 1984.8, 2781.7, 2113.3, 2181.1)]),
|
||||
("GCC 16, -O2", [("count_numbers", 2326.9, 3453.3, 2972.4, 2895.3), ("server_config", 2888.7, 4388.6, 3941.8, 3825.5)]),
|
||||
]
|
||||
VIEW = [(e, c, [n / (t * 1000) for n, t in zip(VIEW_BYTES, us)]) for e, c, us in VIEW_US] # GB/s
|
||||
# dump: the bytes of the compact output, and the same engines, from the dump table in "How it compares"
|
||||
DUMP_BYTES = [466906, 500299, 2090234, 52508728]
|
||||
DUMP_US = [
|
||||
("nlohmann/json json_document", "nj-charts-c1", [74.5, 132.8, 1625.1, 14757.2]),
|
||||
("yyjson", "nj-charts-c2", [104.2, 165.7, 1715.7, 20133.5]),
|
||||
("simdjson DOM", "nj-charts-c3", [354.2, 498.2, 6816.1, 54833.4]),
|
||||
("sonic-rs (Rust)", "nj-charts-c4", [212.6, 443.9, 2416.8, 33818.5]),
|
||||
("sonic-cpp", "nj-charts-c5", [104.6, 222.3, 3044.2, 19836.1]),
|
||||
("Boost.JSON", "nj-charts-c6", [497.6, 501.4, 2941.8, 63392.3]),
|
||||
("nlohmann/json json::dump", "nj-charts-c1 nj-charts-dim", [216.7, 285.5, 2244.0, 31205.3]),
|
||||
]
|
||||
DUMP = [(e, c, [n / (t * 1000) for n, t in zip(DUMP_BYTES, us)]) for e, c, us in DUMP_US] # GB/s
|
||||
PRICE_SERIES = [("3.13.0", "nj-charts-c2"), ("3.13.0, precompiled header", "nj-charts-c1"), ("3.13.0, module", "nj-charts-c3")]
|
||||
|
||||
|
||||
def view(VIEW=VIEW, name="perf_blog_view.svg", tid="nj-blog-view",
|
||||
title="Parse throughput of nlohmann/json's json_document and json::parse and five other document parsers, fresh documents, Apple M1 Max",
|
||||
what="parse"):
|
||||
W, L, R = 580, 142, 545
|
||||
hi = max(max(v) for _, _, v in VIEW)
|
||||
hi = math.ceil(hi * 2) / 2
|
||||
X = lambda v: L + v / hi * (R - L)
|
||||
bh, gap = 9, 2
|
||||
group_h = len(VIEW) * (bh + gap) + 14
|
||||
def price():
|
||||
W, L, R = 600, 150, 560
|
||||
lo, hi = -50, 70
|
||||
X = lambda pct: L + (pct - lo) / (hi - lo) * (R - L)
|
||||
pct = lambda new, old: round((new / old - 1) * 100)
|
||||
lab = lambda p: (MINUS + "%d %%" % -p) if p < 0 else "+%d %%" % p
|
||||
bh, pitch, gap = 11, 14, 10
|
||||
b, desc = [], []
|
||||
x, ly = 8, 10
|
||||
for j, (eng, cls, _) in enumerate(VIEW):
|
||||
w = 18 + 7.4 * len(eng) + 16
|
||||
if x + w > W:
|
||||
x, ly = 8, ly + 20
|
||||
b.append('<rect class="%s" x="%g" y="%g" width="12" height="12" rx="3"/>' % (cls, x, ly))
|
||||
b.append('<text class="nj-charts-leg" x="%g" y="%g">%s</text>' % (x + 18, ly + 10.5, esc(eng)))
|
||||
x += w
|
||||
top = ly + 34 # below the last row of the legend
|
||||
axis_y = top + group_h * len(VIEW_FILES)
|
||||
t = 0.5
|
||||
while t <= hi + 1e-9:
|
||||
b.append('<line class="nj-charts-grid" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (X(t), top - 4, X(t), axis_y))
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">%g</text>' % (X(t), axis_y + 16, t))
|
||||
t += 0.5
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">GB/s, more is better</text>' % ((L + R) / 2, axis_y + 34))
|
||||
for i, f in enumerate(VIEW_FILES):
|
||||
y0 = top + i * group_h
|
||||
b.append('<text class="nj-charts-rowlabel" x="%g" y="%g" text-anchor="end">%s</text>' % (L - 8, y0 + group_h / 2, esc(f)))
|
||||
for j, (eng, cls, vals) in enumerate(VIEW):
|
||||
y = y0 + j * (bh + gap)
|
||||
b.append('<path class="%s" d="%s"><title>%s, %s: %.2f GB/s</title></path>' % (cls, hbar(X(0), X(vals[i]), y, bh), esc(eng), esc(f), vals[i]))
|
||||
b.append('<text class="nj-charts-val" x="%g" y="%g">%.2f</text>' % (X(vals[i]) + 4, y + bh - 1.5, vals[i]))
|
||||
desc.append("%s %s %.2f GB/s" % (f, eng, vals[i]))
|
||||
b.append('<line class="nj-charts-zero" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (X(0), top - 4, X(0), axis_y))
|
||||
write(name, W, axis_y + 44, "nj-charts--blog", tid, title,
|
||||
"Grouped horizontal bars of %s throughput in GB/s, more is better. " % what + "; ".join(desc) + ".", b)
|
||||
# the key above the plot
|
||||
x = 8
|
||||
for name, cls in PRICE_SERIES:
|
||||
b.append('<rect class="%s" x="%g" y="6" width="12" height="12" rx="3"/>' % (cls, x))
|
||||
b.append('<text class="nj-charts-leg" x="%g" y="16.5">%s</text>' % (x + 18, esc(name)))
|
||||
x += 18 + 8.2 * len(name) + 22
|
||||
top = 54
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">as fast as 3.12.0</text>' % (X(0), top - 8))
|
||||
y = top
|
||||
for build, progs in PRICE:
|
||||
b.append('<text class="nj-charts-panel" x="8" y="%g">%s</text>' % (y + 14, esc(build)))
|
||||
y += 24
|
||||
y0, at = y, len(b)
|
||||
for prog, old, *new in progs:
|
||||
b.append('<text class="nj-charts-rowlabel nj-charts-code" x="%g" y="%g" text-anchor="end">%s</text>'
|
||||
% (L - 8, y + 1.5 * pitch + 2, prog))
|
||||
for (name, cls), t in zip(PRICE_SERIES, new):
|
||||
p = pct(t, old)
|
||||
b.append('<path class="%s" d="%s"><title>%s, %s, %s: %s ms against %s ms with 3.12.0 (%s)</title></path>'
|
||||
% (cls, hbar(X(0), X(p), y, bh), prog, esc(build), esc(name), format(round(t), ","), format(round(old), ","), lab(p)))
|
||||
if p < 0:
|
||||
b.append('<text class="nj-charts-val" x="%g" y="%g" text-anchor="end">%s</text>' % (X(p) - 5, y + bh - 1.5, lab(p)))
|
||||
else:
|
||||
b.append('<text class="nj-charts-val" x="%g" y="%g">%s</text>' % (X(p) + 5, y + bh - 1.5, lab(p)))
|
||||
desc.append("%s, %s, %s: %s" % (build, prog, name, lab(p).replace(MINUS, "-")))
|
||||
y += pitch
|
||||
y += gap - (pitch - bh)
|
||||
# the grid behind this panel's bars only, so that it doesn't cross the panel titles
|
||||
b[at:at] = ['<line class="nj-charts-grid" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (X(t), y0 - 4, X(t), y - gap + 4)
|
||||
for t in range(lo + 10, hi + 1, 20) if t]
|
||||
y += 8
|
||||
axis_y = y
|
||||
b.append('<line class="nj-charts-ref" x1="%g" y1="%g" x2="%g" y2="%g"/>' % (X(0), top - 2, X(0), axis_y))
|
||||
for t in range(lo + 10, hi + 1, 20):
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">%s</text>' % (X(t), axis_y + 16, "0" if t == 0 else lab(t)))
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">compile time compared with 3.12.0, less is better</text>' % ((L + R) / 2, axis_y + 34))
|
||||
write("perf_blog_price.svg", W, axis_y + 44, "nj-charts--blog", "nj-blog-price",
|
||||
"Compile time of two programs with 3.13.0, alone, with a precompiled header and as a module, compared with 3.12.0",
|
||||
"Horizontal bars of the change in compile time against 3.12.0, less is better. " + "; ".join(desc) + ".", b)
|
||||
|
||||
|
||||
# ---------- use cases: libraries x use cases, relative time ----------
|
||||
# data/perf_usecases_<platform>.json is written by tests/benchmarks/json_view/others/summarize.py --json
|
||||
UC_FILES = ["twitter", "citm_catalog", "canada", "jeopardy"]
|
||||
USE_CASES = [("validate", "validate"), ("sum", "sum"), ("select", "select"),
|
||||
("edit", "edit"), ("minify", "minify"), ("write", "write")]
|
||||
UC_LIBS = { # library in the JSON -> row label
|
||||
"nlohmann json_document": "nlohmann/json json_document", "nlohmann json": "nlohmann/json json",
|
||||
"yyjson": "yyjson", "simdjson": "simdjson", "sonic-cpp": "sonic-cpp", "Glaze": "Glaze", "Boost.JSON": "Boost.JSON",
|
||||
"RapidJSON": "RapidJSON", "sonic-rs": "sonic-rs (Rust)", "simd-json": "simd-json (Rust)", "serde_json": "serde_json (Rust)",
|
||||
}
|
||||
UC_PLATFORMS = [("mac", "Use cases: time of each library relative to the fastest, Apple M1 Max"),
|
||||
("x86-gcc", "Use cases: time of each library relative to the fastest, x86-64 with GCC 16.2"),
|
||||
("x86-gcc13", "Use cases: time of each library relative to the fastest, x86-64 with GCC 13"),
|
||||
("x86-clang", "Use cases: time of each library relative to the fastest, x86-64 with Clang 23")]
|
||||
LEVEL_MARK = {"no UTF-8": "U", "partial": "P", "full": ""}
|
||||
# why a cell is empty (the tooltips of the n/a cells)
|
||||
NA = {("simdjson", "edit"): "simdjson's documents are read-only: it has no API to change a value and write the result"}
|
||||
|
||||
|
||||
def geomean(xs):
|
||||
return math.exp(sum(math.log(x) for x in xs) / len(xs))
|
||||
|
||||
|
||||
def normalize_usecases(data):
|
||||
"""Chooses each library's best variants again with the rules of the post: variants that copy each number's text
|
||||
instead of formatting it (json_document's number_format::source, RapidJSON's raw numbers) and variants that reuse
|
||||
a parser or document across calls are measured but not chosen"""
|
||||
data = json.loads(json.dumps(data))
|
||||
rank = {"full": 0, "n/a": 0, "no UTF-8": 1, "partial": 2}
|
||||
for files in data.values():
|
||||
for cell in files.values():
|
||||
for e in cell.values():
|
||||
vs = [(v["us"], k, v["level"]) for k, v in e["variants"].items()
|
||||
if not any(w in k for w in ("source numbers", "raw numbers", "reused"))]
|
||||
full = [v for v in vs if rank[v[2]] == 0]
|
||||
pick = lambda v: {"us": v[0], "variant": v[1], "level": "full" if rank[v[2]] == 0 else v[2]}
|
||||
e["best"] = pick(min(full)) if full else None
|
||||
e["best_any"] = pick(min(vs))
|
||||
return data
|
||||
|
||||
|
||||
FILE_NAMES = {"twitter": "twitter.json", "citm_catalog": "citm_catalog.json", "canada": "canada.json",
|
||||
"jeopardy": "jeopardy.json"}
|
||||
# what a variant that checks less skips, worded as the trade it is (the tooltips of the heatmaps)
|
||||
CHECKS_LESS = [
|
||||
("simdjson", "On-Demand", "reads lazily: On-Demand reads only what you ask for and steps over the rest by matching brackets"),
|
||||
("simdjson", "minify", "simdjson::minify() only removes whitespace, without parsing the values"),
|
||||
("Glaze", "lazy_json", "reads lazily: lazy_json reads only what you ask for and steps over the rest"),
|
||||
("Glaze", "minify_json", "minify_json only removes whitespace, without parsing the values"),
|
||||
("Glaze", "structs", "reads into structs and steps over fields it doesn't know without checking them "
|
||||
"(validate_skipped checks them too)"),
|
||||
("RapidJSON", "", "trusts UTF-8: RapidJSON's default (kParseValidateEncodingFlag checks it)"),
|
||||
("sonic-cpp", "", "trusts UTF-8: sonic-cpp 1.0.2 doesn't check it"),
|
||||
("serde_json", "", "trusts UTF-8 in the strings it skips (from_slice); strings it reads are checked"),
|
||||
]
|
||||
|
||||
|
||||
def checks_less(lib, variant):
|
||||
for l, v, text in CHECKS_LESS:
|
||||
if l == lib and v in variant:
|
||||
return text
|
||||
return "checks less"
|
||||
|
||||
|
||||
def usecase_table(data):
|
||||
"""{library: {use case: cell}}: per library the geometric mean over UC_FILES of its fastest fully validating time
|
||||
("full") and of its fastest time at any level ("alt", only if it is at least 3 % faster), each divided by the best
|
||||
such fully validating mean in the use case, so that every file counts equally and the fastest library is 1.00"""
|
||||
out = {}
|
||||
data = normalize_usecases(data)
|
||||
for uc, _ in USE_CASES:
|
||||
files = data.get(uc, {})
|
||||
if not files:
|
||||
continue
|
||||
cells = {}
|
||||
for lib in UC_LIBS:
|
||||
es = [files.get(f, {}).get(lib) for f in UC_FILES]
|
||||
if not all(es):
|
||||
continue
|
||||
full = [e["best"] for e in es]
|
||||
alt = [e["best_any"] for e in es]
|
||||
cells[lib] = {"full": geomean([b["us"] for b in full]) if all(full) else None, "alt": geomean([a["us"] for a in alt]),
|
||||
"files": [(f, b, a) for f, b, a in zip(UC_FILES, full, alt)]}
|
||||
ref = min(c["full"] for c in cells.values() if c["full"])
|
||||
for lib, c in cells.items():
|
||||
full = c["full"] / ref if c["full"] else None
|
||||
alt = c["alt"] / ref
|
||||
if full is not None and alt > full * 0.97:
|
||||
alt = None
|
||||
levels = {a["level"] for _, _, a in c["files"]} if alt is not None else set()
|
||||
level = "partial" if "partial" in levels else "no UTF-8" if "no UTF-8" in levels else "full"
|
||||
out.setdefault(lib, {})[uc] = {"full": full, "alt": alt, "level": level, "files": c["files"]}
|
||||
return out
|
||||
|
||||
|
||||
# cell colors: green for the fastest, gray around twice the time, red for the slowest; the upper bounds of the steps
|
||||
HEAT_STEPS = [1.15, 1.5, 2.5, 5, float("inf")]
|
||||
HEAT_LABELS = ["below 1.15", "1.15 to 1.5", "1.5 to 2.5", "2.5 to 5", "5 and more"]
|
||||
|
||||
|
||||
def heat(r):
|
||||
return next(i for i, b in enumerate(HEAT_STEPS) if r < b)
|
||||
|
||||
|
||||
def fr(r):
|
||||
return "%.2f" % r if r < 9.995 else "%.1f" % r if r < 99.95 else "%.0f" % r
|
||||
|
||||
|
||||
def fus(us):
|
||||
return "{:,.0f} µs".format(us) if us >= 100 else "%.1f µs" % us
|
||||
|
||||
|
||||
def tip(lib, uc_label, c, half):
|
||||
"""the tooltip of a cell: lines separated by newlines ( in the attribute), the first one the heading"""
|
||||
if half == "full":
|
||||
lines = ["%s · %s" % (UC_LIBS[lib], uc_label),
|
||||
"%s× the time of the fastest library (fully validating)" % fr(c["full"])]
|
||||
picks = [(f, b) for f, b, _ in c["files"]]
|
||||
else:
|
||||
lines = ["%s · %s, checking less" % (UC_LIBS[lib], uc_label),
|
||||
"%s× the time of the fastest fully validating library" % fr(c["alt"])]
|
||||
picks = [(f, a) for f, _, a in c["files"]]
|
||||
ways = sorted({e["variant"] for _, e in picks})
|
||||
if len(ways) == 1:
|
||||
lines.append("way: %s" % ways[0])
|
||||
for f, e in picks:
|
||||
lines.append("%s: %s%s%s" % (FILE_NAMES[f], fus(e["us"]), "" if len(ways) == 1 else " · " + e["variant"],
|
||||
" (validates fully)" if half == "alt" and e["level"] == "full" else ""))
|
||||
if half == "alt":
|
||||
seen = []
|
||||
for _, e in picks:
|
||||
if e["level"] != "full":
|
||||
t = checks_less(lib, e["variant"])
|
||||
if t not in seen:
|
||||
seen.append(t)
|
||||
lines += seen
|
||||
if any("(copy)" in e["variant"] for _, e in picks):
|
||||
lines.append("(copy): parses in place, on a copy of the input that is part of the time")
|
||||
return " ".join(lines)
|
||||
|
||||
|
||||
def heatmap(platform, title):
|
||||
data = json.load((HERE / "data" / ("perf_usecases_%s.json" % platform)).open())
|
||||
t = usecase_table(data)
|
||||
libs = [l for l in UC_LIBS if l in t]
|
||||
score = lambda l: geomean([v["full"] if v["full"] else v["alt"] * 1.5 for v in t[l].values()])
|
||||
libs.sort(key=score)
|
||||
W, L, cw, ch, top = 784, 224, 92, 36, 44
|
||||
b, desc = [], []
|
||||
for j, (uc, label) in enumerate(USE_CASES):
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">%s</text>' % (L + j * cw + cw / 2, top - 10, esc(label)))
|
||||
for i, lib in enumerate(libs):
|
||||
y = top + i * ch
|
||||
cls = "nj-charts-name-json" if lib.startswith("nlohmann") else ""
|
||||
b.append('<text class="nj-charts-rowlabel %s" x="%g" y="%g" text-anchor="end">%s</text>' % (cls, L - 8, y + ch / 2 + 4, esc(UC_LIBS[lib])))
|
||||
for j, (uc, label) in enumerate(USE_CASES):
|
||||
x = L + j * cw
|
||||
c = t[lib].get(uc)
|
||||
if c is None:
|
||||
b.append('<g class="nj-heat-cell" tabindex="0" data-tip="%s">' % esc("%s · %s %s" % (UC_LIBS[lib], label, NA.get((lib, uc), "the library has no API for this use case"))))
|
||||
b.append('<rect class="nj-heat-na" x="%g" y="%g" width="%g" height="%g" rx="3"/>' % (x + 1, y + 1, cw - 2, ch - 2))
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">n/a</text>' % (x + cw / 2, y + ch / 2 + 4))
|
||||
b.append('</g>')
|
||||
desc.append("%s %s: n/a" % (UC_LIBS[lib], label))
|
||||
continue
|
||||
halves = []
|
||||
if c["full"] is not None:
|
||||
halves.append(("full", c["full"]))
|
||||
if c["alt"] is not None:
|
||||
halves.append(("alt", c["alt"]))
|
||||
hw = (cw - 2) / len(halves)
|
||||
for k, (half, r) in enumerate(halves):
|
||||
hx = x + 1 + k * hw
|
||||
gap = 1 if len(halves) == 2 else 0
|
||||
b.append('<g class="nj-heat-cell" tabindex="0" data-tip="%s">' % esc(tip(lib, label, c, half)))
|
||||
b.append('<rect class="nj-heat-%d" x="%g" y="%g" width="%g" height="%g" rx="3"/>'
|
||||
% (heat(r), hx + (gap if k else 0), y + 1, hw - gap, ch - 2))
|
||||
cx = hx + hw / 2
|
||||
if half == "alt":
|
||||
b.append('<text class="nj-charts-cell" x="%g" y="%g" text-anchor="middle">%s</text>' % (cx, y + 16, fr(r)))
|
||||
b.append('<text class="nj-charts-cell nj-charts-cell--small" x="%g" y="%g" text-anchor="middle">%s</text>'
|
||||
% (cx, y + 29, LEVEL_MARK[c["level"]]))
|
||||
else:
|
||||
b.append('<text class="nj-charts-cell" x="%g" y="%g" text-anchor="middle">%s</text>' % (cx, y + ch / 2 + 4, fr(r)))
|
||||
b.append('</g>')
|
||||
if c["full"] is None: # no fully validating way: the left half stays empty
|
||||
pass
|
||||
desc.append("%s %s: %s%s" % (UC_LIBS[lib], label, fr(c["full"]) if c["full"] else "no fully validating way",
|
||||
(" (%s checking less, %s)" % (fr(c["alt"]), c["level"])) if c["alt"] else ""))
|
||||
# the key, set apart from the grid and narrower than its columns, so that it doesn't read as a row of it
|
||||
yb = top + len(libs) * ch + 28
|
||||
b.append('<text class="nj-charts-tick nj-charts-tick--l" x="8" y="%g">time relative to the fastest fully validating library, less is better</text>' % (yb + 4))
|
||||
kw, ky = 76, yb + 14
|
||||
for i, lab in enumerate(HEAT_LABELS):
|
||||
# each swatch in its own group, so that the ink rule for the strong steps (a sibling selector) stays inside it
|
||||
b.append('<g><rect class="nj-heat-%d" x="%g" y="%g" width="%g" height="20" rx="3"/>' % (i, 8 + i * (kw + 4), ky, kw))
|
||||
b.append('<text class="nj-charts-cell nj-charts-cell--small" x="%g" y="%g" text-anchor="middle">%s</text></g>' % (8 + i * (kw + 4) + kw / 2, ky + 14, esc(lab)))
|
||||
nx = 8 + len(HEAT_LABELS) * (kw + 4) + 12
|
||||
b.append('<rect class="nj-heat-na" x="%g" y="%g" width="%g" height="20" rx="3"/>' % (nx, ky, 40))
|
||||
b.append('<text class="nj-charts-tick" x="%g" y="%g">n/a</text>' % (nx + 20, ky + 14))
|
||||
b.append('<text class="nj-charts-tick nj-charts-tick--l" x="%g" y="%g">no API for it</text>' % (nx + 48, ky + 14))
|
||||
write("perf_blog_usecases_%s.svg" % platform, W, ky + 28, "nj-charts--blog nj-charts--heat", "nj-blog-uc-" + platform, title,
|
||||
"Table of relative times, libraries by use case. " + "; ".join(desc) + ".", b)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
swar()
|
||||
if OVERVIEW:
|
||||
overview()
|
||||
distribution()
|
||||
if TIMELINE:
|
||||
timeline()
|
||||
if CLIFFS:
|
||||
cliffs()
|
||||
if VIEW:
|
||||
view()
|
||||
if DUMP:
|
||||
view(DUMP, "perf_blog_view_dump.svg", "nj-blog-view-dump",
|
||||
"Write throughput of nlohmann/json's json_document and json, and five other libraries, each writing a "
|
||||
"document parsed beforehand, Apple M1 Max", "write")
|
||||
price()
|
||||
for platform, title in UC_PLATFORMS:
|
||||
if (HERE / "data" / ("perf_usecases_%s.json" % platform)).exists():
|
||||
heatmap(platform, title)
|
||||
@@ -0,0 +1,67 @@
|
||||
"""Prints the tables of Appendix E of home/blog/how_3_13_0_got_faster.md (comparison with other libraries) as Markdown,
|
||||
from data/perf_usecases_<platform>.json, which tests/benchmarks/json_view/others/summarize.py --json writes.
|
||||
|
||||
Usage: python3 scripts/figures/perf_blog_tables.py <platform> [title]
|
||||
"""
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
from perf_blog import normalize_usecases
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
FILES = [("twitter", "`twitter.json`"), ("citm_catalog", "`citm_catalog.json`"), ("canada", "`canada.json`"),
|
||||
("jeopardy", "`jeopardy.json`"), ("status", "one status (2.5 KB)")]
|
||||
USE_CASES = [("validate", "validate"), ("sum", "sum"), ("select", "select"), ("edit", "edit"), ("minify", "minify"),
|
||||
("write", "write")]
|
||||
NAMES = {"nlohmann json_document": "nlohmann/json `json_document`", "nlohmann json": "nlohmann/json `json`",
|
||||
"sonic-rs": "sonic-rs (Rust)", "simd-json": "simd-json (Rust)", "serde_json": "serde_json (Rust)"}
|
||||
MARK = {"no UTF-8": "U", "partial": "P"}
|
||||
|
||||
|
||||
def fmt(us):
|
||||
if us >= 10000:
|
||||
return "{:,.0f}".format(us)
|
||||
if us >= 100:
|
||||
return "{:,.0f}".format(us)
|
||||
return "%.1f" % us
|
||||
|
||||
|
||||
def table(data, uc, indent):
|
||||
files = [f for f, _ in FILES if f in data.get(uc, {})]
|
||||
libs = list(data[uc][files[0]].keys())
|
||||
jd = lambda f: data[uc][f]["nlohmann json_document"]["best"]["us"]
|
||||
libs.sort(key=lambda l: sum(((data[uc][f][l]["best"] or data[uc][f][l]["best_any"])["us"] / jd(f)) for f in files))
|
||||
head = "| library | variant | " + " | ".join(n for f, n in FILES if f in files) + " |"
|
||||
rows = [head, "| --- | --- | " + " | ".join("--:" for _ in files) + " |"]
|
||||
for lib in libs:
|
||||
best = [data[uc][f][lib]["best"] for f in files]
|
||||
anyv = [data[uc][f][lib]["best_any"] for f in files]
|
||||
names = sorted({b["variant"] for b in best if b} | {a["variant"] + " [%s]" % MARK[a["level"]] for b, a in zip(best, anyv) if a["level"] in MARK and (not b or a["us"] < b["us"])})
|
||||
cells = []
|
||||
for b, a in zip(best, anyv):
|
||||
c = fmt(b["us"]) if b else "–"
|
||||
if a["level"] in MARK and (not b or a["us"] < b["us"] * 0.97):
|
||||
c += " (%s %s)" % (MARK[a["level"]], fmt(a["us"]))
|
||||
cells.append(c)
|
||||
bold = "**%s**" if lib == "nlohmann json_document" else "%s"
|
||||
rows.append("| %s | %s | %s |" % (bold % NAMES.get(lib, lib), ", ".join(names), " | ".join(cells)))
|
||||
return "\n".join(indent + r for r in rows)
|
||||
|
||||
|
||||
def main():
|
||||
platform = sys.argv[1]
|
||||
data = json.load((HERE / "data" / ("perf_usecases_%s.json" % platform)).open())
|
||||
data = normalize_usecases(data) # the same choices as the figure
|
||||
out = []
|
||||
for uc, label in USE_CASES:
|
||||
if uc not in data:
|
||||
continue
|
||||
out.append("**%s**\n" % label)
|
||||
out.append(table(data, uc, ""))
|
||||
out.append("")
|
||||
print("\n".join(out))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||