Skip to content

Conversation

@microalps
Copy link
Contributor

@microalps microalps commented Jul 6, 2021

This improves upon render time with a slew of under the hood changes. Notable changes:
For all versions:

With an opt-in flag for DotLiquid 2.2 Syntax

It remains unknown how much this impacts the benchmarks on RicoSuter/NJsonSchema#1346 ... would love to hear from that team

@microalps
Copy link
Contributor Author

Performance (based on Fluid's benchmark) vs latest NuGet

|              Method |        Job | BuildConfiguration |      Mean |    Error |   StdDev | Ratio | RatioSD |   Gen 0 |  Gen 1 | Gen 2 | Allocated |
|-------------------- |----------- |------------------- |----------:|---------:|---------:|------:|--------:|--------:|-------:|------:|----------:|
|               Parse | Job-SCOQHT |              NuGet |  19.99 us | 0.394 us | 0.679 us |  1.00 |    0.00 |  2.6245 | 0.0305 |     - |     16 KB |
|               Parse | DefaultJob |            Default |  19.40 us | 0.386 us | 0.716 us |  0.97 |    0.04 |  2.6245 | 0.0305 |     - |     16 KB |
|                     |            |                    |           |          |          |       |         |         |        |       |           |
|            ParseBig | Job-SCOQHT |              NuGet |  75.11 us | 0.949 us | 0.841 us |  1.00 |    0.00 | 15.3809 | 1.0986 |     - |     94 KB |
|            ParseBig | DefaultJob |            Default |  74.19 us | 0.947 us | 0.840 us |  0.99 |    0.02 | 15.3809 | 1.0986 |     - |     94 KB |
|                     |            |                    |           |          |          |       |         |         |        |       |           |
|    RenderNestedHash | Job-SCOQHT |              NuGet | 492.93 us | 4.901 us | 4.345 us |  1.00 |    0.00 | 66.4063 | 9.7656 |     - |    410 KB |
|    RenderNestedHash | DefaultJob |            Default | 277.51 us | 3.998 us | 3.339 us |  0.56 |    0.01 | 46.3867 | 6.8359 |     - |    287 KB |
|                     |            |                    |           |          |          |       |         |         |        |       |           |
| RenderILiquidizable | Job-SCOQHT |              NuGet | 965.68 us | 8.052 us | 7.532 us |  1.00 |    0.00 | 73.2422 | 8.7891 |     - |    452 KB |
| RenderILiquidizable | DefaultJob |            Default | 564.06 us | 2.323 us | 2.060 us |  0.58 |    0.00 | 49.8047 | 5.8594 |     - |    310 KB |

@codecov-commenter
Copy link

codecov-commenter commented Jul 6, 2021

Codecov Report

Merging #441 (e6e9365) into master (32950d5) will increase coverage by 1.66%.
The diff coverage is 97.51%.

❗ Current head e6e9365 differs from pull request most recent head 73a012a. Consider uploading reports for the commit 73a012a to get more accurate results
Impacted file tree graph

@@            Coverage Diff             @@
##           master     #441      +/-   ##
==========================================
+ Coverage   85.07%   86.73%   +1.66%     
==========================================
  Files          61       62       +1     
  Lines        2452     2511      +59     
  Branches      670      599      -71     
==========================================
+ Hits         2086     2178      +92     
+ Misses        223      213      -10     
+ Partials      143      120      -23     
Impacted Files Coverage Δ
src/DotLiquid/Liquid.cs 100.00% <ø> (ø)
src/DotLiquid/Tokenizer.cs 94.87% <94.44%> (+0.84%) ⬆️
src/DotLiquid/Context.cs 94.64% <98.71%> (+2.08%) ⬆️
src/DotLiquid/ExtendedFilters.cs 100.00% <100.00%> (ø)
src/DotLiquid/Hash.cs 77.22% <100.00%> (+1.26%) ⬆️
src/DotLiquid/StandardFilters.cs 93.25% <100.00%> (+3.81%) ⬆️
src/DotLiquid/Tags/If.cs 85.96% <100.00%> (ø)
src/DotLiquid/Template.cs 92.18% <100.00%> (+4.98%) ⬆️
src/DotLiquid/Drop.cs 71.95% <0.00%> (ø)
... and 10 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 32950d5...73a012a. Read the comment docs.

@microalps microalps changed the title [WIP] Render Performance Strict Liquid Syntax (Part 2) + Render Performance Jul 12, 2021
@microalps
Copy link
Contributor Author

microalps commented Jul 12, 2021

Here is an updated benchmark, accounting for the differences in behavior between DotLiquid 2.1 and 2.2

|              Method |        Job | BuildConfiguration | SyntaxCompatibilityLevel |      Mean |     Error |    StdDev | Ratio | RatioSD |   Gen 0 |  Gen 1 | Gen 2 | Allocated |
|-------------------- |----------- |------------------- |------------------------- |----------:|----------:|----------:|------:|--------:|--------:|-------:|------:|----------:|
|               Parse | Job-XXIMLP |              NuGet |              DotLiquid20 |  19.15 us |  0.114 us |  0.107 us |  1.00 |    0.00 |  2.6550 | 0.0305 |     - |     16 KB |
|               Parse | DefaultJob |            Default |              DotLiquid20 |  19.00 us |  0.353 us |  0.346 us |  0.99 |    0.02 |  2.6550 | 0.0305 |     - |     16 KB |
|                     |            |                    |                          |           |           |           |       |         |         |        |       |           |
|            ParseBig | Job-XXIMLP |              NuGet |              DotLiquid20 |  75.91 us |  0.721 us |  0.639 us |  1.00 |    0.00 | 15.8691 | 1.2207 |     - |     98 KB |
|            ParseBig | DefaultJob |            Default |              DotLiquid20 |  76.06 us |  1.520 us |  1.492 us |  1.00 |    0.02 | 15.8691 | 1.2207 |     - |     98 KB |
|                     |            |                    |                          |           |           |           |       |         |         |        |       |           |
|    RenderNestedHash | Job-XXIMLP |              NuGet |              DotLiquid20 | 492.01 us |  4.058 us |  3.796 us |  1.00 |    0.00 | 66.4063 | 9.7656 |     - |    410 KB |
|    RenderNestedHash | DefaultJob |            Default |              DotLiquid20 | 330.10 us |  6.483 us |  6.064 us |  0.67 |    0.01 | 58.5938 | 8.7891 |     - |    362 KB |
|                     |            |                    |                          |           |           |           |       |         |         |        |       |           |
| RenderILiquidizable | Job-XXIMLP |              NuGet |              DotLiquid20 | 947.22 us |  7.149 us |  5.970 us |  1.00 |    0.00 | 73.2422 | 8.7891 |     - |    452 KB |
| RenderILiquidizable | DefaultJob |            Default |              DotLiquid20 | 650.13 us | 11.948 us | 18.951 us |  0.69 |    0.02 | 62.5000 | 6.8359 |     - |    386 KB |
|               Parse | Job-XXIMLP |              NuGet |              DotLiquid22 |  19.50 us |  0.365 us |  0.342 us |  1.00 |    0.00 |  2.6550 | 0.0305 |     - |     16 KB |
|               Parse | DefaultJob |            Default |              DotLiquid22 |  18.40 us |  0.281 us |  0.263 us |  0.94 |    0.02 |  2.6245 | 0.0305 |     - |     16 KB |
|                     |            |                    |                          |           |           |           |       |         |         |        |       |           |
|            ParseBig | Job-XXIMLP |              NuGet |              DotLiquid22 |  76.41 us |  1.116 us |  1.044 us |  1.00 |    0.00 | 15.8691 | 1.2207 |     - |     98 KB |
|            ParseBig | DefaultJob |            Default |              DotLiquid22 |  70.04 us |  1.351 us |  1.757 us |  0.92 |    0.04 | 15.2588 | 1.0986 |     - |     94 KB |
|                     |            |                    |                          |           |           |           |       |         |         |        |       |           |
|    RenderNestedHash | Job-XXIMLP |              NuGet |              DotLiquid22 | 495.92 us |  8.054 us |  7.533 us |  1.00 |    0.00 | 66.4063 | 9.7656 |     - |    410 KB |
|    RenderNestedHash | DefaultJob |            Default |              DotLiquid22 | 272.86 us |  1.418 us |  1.257 us |  0.55 |    0.01 | 46.3867 | 6.8359 |     - |    285 KB |
|                     |            |                    |                          |           |           |           |       |         |         |        |       |           |
| RenderILiquidizable | Job-XXIMLP |              NuGet |              DotLiquid22 | 957.73 us | 12.200 us | 11.412 us |  1.00 |    0.00 | 72.2656 | 7.8125 |     - |    452 KB |
| RenderILiquidizable | DefaultJob |            Default |              DotLiquid22 | 578.03 us |  3.955 us |  3.506 us |  0.60 |    0.01 | 49.8047 | 5.8594 |     - |    309 KB |

Summary: 2.2 gives a 10% edge over 2.1 on render and on parse operations. Overall, rendering can be 65% - 80% faster when utilizing all the performance tweaks.

@microalps microalps linked an issue Jul 13, 2021 that may be closed by this pull request
@microalps microalps requested a review from daviburg July 21, 2021 23:05
@microalps microalps linked an issue Jul 27, 2021 that may be closed by this pull request
@daviburg
Copy link
Member

I'm trying to use inline suggestion for minor/cosmetic changes so you can just click on the accept button. Approved to merge with only these minor comments.

@microalps microalps merged commit e18c34c into dotliquid:master Jul 28, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

4 participants