Back to Anglesharp

Performance

docs/general/04-Performance.md

1.4.057.7 KB
Original Source

Performance Evaluations

General Considerations

The library is not small (it's not huge either), which makes preloading or "warming-up" (or using NGen) a candidate for productive usage. The first runs will always be slower than the following. This is a property of C# / the MSIL (or the JIT process in general), which has nothing to do with AngleSharp.

AngleSharp has been written with performance in mind. Actually the priority is:

  1. Standard conformance
  2. Performance
  3. Helpers / extensions
  4. Tooling

Even though there are still optimizations possible (since everything had to be working first, i.e. standard conformance has been considered), the performance is promising. Parsers in established web browsers (usually written in C/C++) will still have a faster execution time, but for a completely managed process the whole parsing / DOM creation procedure is very fast.

In the following AngleSharp will be compared to other popular libraries, which are either very popular (like the HtmlAgilityPack) or ambitious (like CsQuery).

Comparison with the Html Agility Pack

The Html Agility Pack (HAP) is a good comparison target, since it is most used and established since a long time. Obviously AngleSharp is a great replacement for HAP due to the following reasons:

  • Standardized HTML5 parsing model
  • Much better error correction / handling
  • Also parses SVG / MathML elements correctly
  • Can handle CSS (selectors, rules, ...)
  • Better performance

While the first points are all quite obvious and clear (that is why AngleSharp has been developed in the first place), the last point is controversial.

To proof this point a small test program has been written. The following code snippet represents the kernel of this program.

c#
static async Task<Int64> Test(Func<String, Int64> test, String source)
{
    var min = Int64.MaxValue;

    for (int i = 0; i < 20; i++) {
        min = Math.Min(min, await Task.Run(() => test(source)));
    }

    return min;
}

static Int64 TestAngle(String source)
{
    var sw = Stopwatch.StartNew();
    var parser = new HtmlParser(source);
    parser.Parse();
    sw.Stop();
    return sw.ElapsedMilliseconds;
}

static Int64 TestAgility(String source)
{
    var sw = Stopwatch.StartNew();
    var document = new HtmlDocument();
    document.LoadHtml(source);
    sw.Stop();
    return sw.ElapsedMilliseconds;
}

This program then calls the Test method with the source code of several webpages. All of them are quite important / used very often and some of them are quite big. The biggest is definitely the official W3C syntax specification.

The following image shows the outcome of running this test. (caution: Outdated versions of all included parser; just for illustration)

Note that we took the lowest wall-time in 20 trials. The outcome details change slightly if we take the average - since AngleSharp has more code-paths and therefore requires a greater mix in warm-up runs than the HAP, however, the overall outcome is still the same with AngleSharp being faster.

The only entry where HAP excels is "GoogleNews". This is, however, a false impression. The true speedup comes from omitting the (large) inline style-sheet. Here AngleSharp has to parse CSS as well, which of course takes some additional time. The official benchmark program below excludes such edge cases by disabling CSS parsing (therefore only HTML parsing is benchmarked as intended).

Comparison with CsQuery / validator.nu HTML Parser

The CsQuery project aims to be a C# port of jQuery. To parse HTML a port of the validator.nu HTML5 engine has been selected. The validity of the resulting DOM should therefore on roughly the same level as AngleSharp, however, missing important elements such as template or main. The above image also includes the performance measurement for the HTML parser.

The parsing performance is mixed compared to AngleSharp. AngleSharp has been measured in an early stage (v0.8.6), i.e. it is likely that the performance of AngleSharp will increase even further. While the CsQuery project is ambitious and contains some interesting ideas and features, AngleSharp tries to solve the problem from the other side - follow the standards first and add nice features on top afterwards. The past has shown that implementing fancy features or a non-standard, but better, API first, will lead to problems later on.

In general there are areas where AngleSharp is performing better, and other pages where the validator.nu parser is faster. In most cases the winner does not really matter (cases such as 2ms vs 3ms).

Comparison with Other Solutions

One could also make comparisons to other projects. In the official Performance project (contained in the Visual Studio solution) you will find the Majestic (Majestic 13) parser. This one is nearly always faster than any other solution. Is it the right choice for your project? Probably not. The reason is simple: Majestic does not build a DOM, it also does not care about special tags, meanings and the HTML error correction. Basically Majestic is AngleSharp reduced to its tokenizer, with the tokenizer being a bit simpler.

This is also the reason for excluding Majestic from the performance comparison. However, you are (for your own pleasure) of course allowed to include Majestic again. The code is already checked-in.

Current Performance

Performance is valued high - even though standard-compliance is valued higher. AngleSharp's repository comes with a set of benchmarks.

HTML Parser

The setup for this test was:

ini
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
AMD Ryzen 7 2700X, 1 CPU, 16 logical and 8 physical cores
  [Host]   : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT
  ShortRun : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT

Job=ShortRun  IterationCount=3  LaunchCount=1
WarmupCount=3

The results are displayed below.

MethodUrlTestMeanErrorStdDevGen 0Gen 1Gen 2Allocated
CsQuery16326,572.23 μs8,325.645 μs456.357 μs3500.0000843.7500312.500017524.19 KB
HTMLAgilityPack16331,582.19 μs10,016.229 μs549.023 μs2687.5000937.5000312.500015171.18 KB
AngleSharp16333,778.85 μs2,390.223 μs131.016 μs1866.6667800.0000266.666711667.82 KB
CsQuery360.cn5,183.12 μs388.822 μs21.313 μs421.8750210.9375-2170.52 KB
HTMLAgilityPack360.cn5,995.97 μs217.311 μs11.912 μs585.9375289.0625-3530.83 KB
AngleSharp360.cn9,059.31 μs1,809.919 μs99.208 μs468.7500234.375031.25002350.3 KB
CsQueryaliexpress1,048.39 μs76.373 μs4.186 μs167.968854.6875-610.8 KB
HTMLAgilityPackaliexpress2,426.29 μs501.179 μs27.471 μs640.6250179.687515.62502251.48 KB
AngleSharpaliexpress2,058.30 μs334.734 μs18.348 μs156.250058.5938-591.33 KB
CsQueryamazon109.46 μs7.386 μs0.405 μs138.6719--106.57 KB
HTMLAgilityPackamazon57.12 μs0.217 μs0.012 μs32.9590--25.33 KB
AngleSharpamazon108.14 μs5.729 μs0.314 μs32.5928--25.07 KB
CsQueryask2,855.16 μs136.272 μs7.470 μs386.7188175.781342.96881917.87 KB
HTMLAgilityPackask6,720.90 μs654.156 μs35.856 μs1187.5000585.9375-6688.45 KB
AngleSharpask5,309.43 μs440.766 μs24.160 μs296.8750156.250070.31251789.05 KB
CsQuerybaidu9,185.98 μs2,700.571 μs148.027 μs12015.625011531.250011109.375058430.78 KB
HTMLAgilityPackbaidu19,836.76 μs1,686.464 μs92.441 μs28000.0000968.7500-25856.31 KB
AngleSharpbaidu5,330.41 μs1,213.111 μs66.495 μs679.6875593.7500414.06252754.81 KB
CsQuerybing1,787.21 μs173.355 μs9.502 μs851.5625421.8750-4629.7 KB
HTMLAgilityPackbing4,301.44 μs237.596 μs13.023 μs1671.8750335.937562.50004831.79 KB
AngleSharpbing2,191.32 μs107.560 μs5.896 μs183.593889.8438-798.45 KB
CsQueryblogspot118.00 μs4.659 μs0.255 μs89.2334--68.8 KB
HTMLAgilityPackblogspot224.73 μs18.088 μs0.991 μs291.2598--224.22 KB
AngleSharpblogspot284.27 μs21.215 μs1.163 μs106.44538.7891-91.93 KB
CsQuerycodeproject7,574.01 μs1,090.559 μs59.777 μs19085.9375750.0000351.562529326.3 KB
HTMLAgilityPackcodeproject8,439.77 μs1,165.335 μs63.876 μs2234.3750656.250015.62508052.49 KB
AngleSharpcodeproject4,944.07 μs142.958 μs7.836 μs312.5000164.062539.06251648.52 KB
CsQueryebay8,113.73 μs813.583 μs44.595 μs828.1250484.3750156.25004488.56 KB
HTMLAgilityPackebay13,586.42 μs817.790 μs44.826 μs1921.8750578.1250218.75009665.77 KB
AngleSharpebay13,333.32 μs3,862.157 μs211.698 μs703.1250468.7500203.12503515.6 KB
CsQueryen.wikipedia28,638.36 μs3,969.680 μs217.592 μs1687.5000781.2500218.75009941.59 KB
HTMLAgilityPacken.wikipedia50,891.40 μs28,096.639 μs1,540.072 μs2800.00001200.0000400.000014571.52 KB
AngleSharpen.wikipedia40,260.49 μs9,929.362 μs544.262 μs1692.3077923.0769307.69239609.23 KB
CsQueryflickr5,523.62 μs528.198 μs28.952 μs2187.50001953.12501343.750011630.04 KB
HTMLAgilityPackflickr16,674.56 μs1,738.980 μs95.319 μs11187.5000343.7500125.000018192.6 KB
AngleSharpflickr8,770.69 μs3,034.916 μs166.354 μs640.6250531.2500359.37502906.85 KB
CsQueryflorian-rappl707.50 μs25.038 μs1.372 μs142.578139.0625-326.33 KB
HTMLAgilityPackflorian-rappl713.63 μs90.272 μs4.948 μs134.765640.0391-457.35 KB
AngleSharpflorian-rappl1,227.61 μs69.995 μs3.837 μs121.093839.0625-342.15 KB
CsQuerygodaddy6,863.21 μs385.012 μs21.104 μs843.7500421.875070.31253965.29 KB
HTMLAgilityPackgodaddy17,099.53 μs2,352.418 μs128.944 μs3156.2500562.5000218.750014457.44 KB
AngleSharpgodaddy10,710.47 μs4,228.312 μs231.768 μs531.2500312.5000125.00002959.15 KB
CsQuerygoogle2,475.83 μs66.243 μs3.631 μs1820.3125511.718835.15636307.94 KB
HTMLAgilityPackgoogle8,117.38 μs889.700 μs48.767 μs8265.6250531.250046.87509687.47 KB
AngleSharpgoogle2,852.58 μs207.706 μs11.385 μs230.4688121.093854.68751118.61 KB
CsQueryhtml5rocks165.07 μs5.314 μs0.291 μs96.43559.2773-91.02 KB
HTMLAgilityPackhtml5rocks185.48 μs21.314 μs1.168 μs129.638716.1133-143.17 KB
AngleSharphtml5rocks344.76 μs10.928 μs0.599 μs102.05088.7891-94.98 KB
CsQueryhtml5test549.88 μs29.206 μs1.601 μs347.656396.6797-812.11 KB
HTMLAgilityPackhtml5test1,100.92 μs113.205 μs6.205 μs412.1094136.7188-1225.64 KB
AngleSharphtml5test832.16 μs80.749 μs4.426 μs127.929741.9922-326.65 KB
CsQueryhuffingtonpost19,952.34 μs12,220.195 μs669.830 μs5125.00002156.25001218.750020271.86 KB
HTMLAgilityPackhuffingtonpost23,360.13 μs267.385 μs14.656 μs13531.2500687.5000187.500019993.95 KB
AngleSharphuffingtonpost21,286.14 μs1,466.969 μs80.410 μs1093.7500718.7500343.75005560.22 KB
CsQueryimdb28,846.69 μs13,103.589 μs718.252 μs6937.50002093.75001406.250053164.72 KB
HTMLAgilityPackimdb53,782.78 μs14,400.153 μs789.321 μs46000.00001700.0000600.000047500.36 KB
AngleSharpimdb33,662.42 μs4,272.336 μs234.181 μs1666.66671200.0000533.333310612.3 KB
CsQuerykickass.to62.52 μs15.028 μs0.824 μs34.4238--26.47 KB
HTMLAgilityPackkickass.to21.91 μs4.389 μs0.241 μs26.5198--20.39 KB
AngleSharpkickass.to48.39 μs10.936 μs0.599 μs21.8506--16.79 KB
CsQuerylinkedin3,926.10 μs765.055 μs41.935 μs289.0625140.625023.43751599.7 KB
HTMLAgilityPacklinkedin3,327.32 μs415.856 μs22.794 μs343.7500171.8750-1832.89 KB
AngleSharplinkedin5,978.55 μs261.960 μs14.359 μs257.8125125.000054.68751385.39 KB
CsQuerylive1,896.05 μs90.959 μs4.986 μs162.109470.3125-875.95 KB
HTMLAgilityPacklive1,728.75 μs160.758 μs8.812 μs189.453193.7500-1068.87 KB
AngleSharplive2,967.42 μs374.529 μs20.529 μs148.437574.2188-783.66 KB
CsQuerymail.ru14,738.88 μs12,151.966 μs666.090 μs55000.00001640.6250593.750062888.42 KB
HTMLAgilityPackmail.ru20,945.32 μs6,117.784 μs335.336 μs14500.0000406.2500187.500022585.69 KB
AngleSharpmail.ru10,070.01 μs757.617 μs41.528 μs656.2500468.7500250.00003241.27 KB
CsQuerymsn10,318.80 μs2,216.914 μs121.517 μs1406.2500625.000078.12506484.48 KB
HTMLAgilityPackmsn11,391.01 μs998.940 μs54.755 μs2875.0000859.375015.62507951.19 KB
AngleSharpmsn16,140.33 μs613.836 μs33.646 μs781.2500468.7500125.00004571.39 KB
CsQuerymyspace22,910.76 μs2,477.144 μs135.781 μs62437.5000781.2500250.000062789.61 KB
HTMLAgilityPackmyspace20,529.88 μs5,132.015 μs281.303 μs1781.2500781.2500250.000010333.3 KB
AngleSharpmyspace20,662.87 μs1,721.811 μs94.378 μs906.2500437.5000125.00005388.78 KB
CsQuerynbc153,610.90 μs241,305.708 μs13,226.780 μs42000.000039000.000038000.0000847835.7 KB
HTMLAgilityPacknbc131,026.33 μs252,456.797 μs13,838.009 μs163750.00001500.0000500.0000142509.96 KB
AngleSharpnbc68,009.41 μs10,392.195 μs569.631 μs3125.00001250.0000500.000030147.35 KB
CsQueryneobux157.14 μs5.539 μs0.304 μs99.36525.6152-86.08 KB
HTMLAgilityPackneobux216.95 μs6.915 μs0.379 μs216.308614.8926-199.43 KB
AngleSharpneobux266.50 μs9.616 μs0.527 μs85.93752.9297-69.35 KB
CsQuerynetflix7,751.63 μs6,590.316 μs361.237 μs7031.25005687.50005093.750036962.4 KB
HTMLAgilityPacknetflix20,402.40 μs532.399 μs29.183 μs30218.7500187.500062.500028514.5 KB
AngleSharpnetflix5,932.85 μs370.366 μs20.301 μs781.2500718.7500500.00003935.91 KB
CsQuerynews.google15,521.61 μs1,692.227 μs92.757 μs15578.125012843.750011515.625066116.9 KB
HTMLAgilityPacknews.google22,252.10 μs1,478.085 μs81.019 μs27093.7500968.7500-26119.47 KB
AngleSharpnews.google11,707.40 μs923.723 μs50.632 μs1015.62501000.0000656.25004325.95 KB
CsQuerynytimes124,187.17 μs251,118.584 μs13,764.657 μs49000.000046000.000045000.0000718302.89 KB
HTMLAgilityPacknytimes95,744.94 μs7,128.314 μs390.727 μs156333.3333333.3333166.6667135003.91 KB
AngleSharpnytimes27,782.88 μs10,274.712 μs563.192 μs1187.5000781.2500375.000017691.08 KB
CsQuerypcmag62.39 μs1.935 μs0.106 μs36.1328--27.81 KB
HTMLAgilityPackpcmag45.43 μs3.050 μs0.167 μs65.0024--49.94 KB
AngleSharppcmag52.58 μs4.139 μs0.227 μs23.8647--18.36 KB
CsQuerypeace(...)emark [22]990.19 μs81.206 μs4.451 μs144.531346.8750-460.6 KB
HTMLAgilityPackpeace(...)emark [22]1,367.17 μs120.318 μs6.595 μs218.7500103.5156-1039.6 KB
AngleSharppeace(...)emark [22]1,632.73 μs134.103 μs7.351 μs119.140646.8750-499.36 KB
CsQuerypinterest1,081.07 μs115.151 μs6.312 μs537.1094226.5625146.48442078.93 KB
HTMLAgilityPackpinterest5,919.82 μs683.017 μs37.438 μs7679.6875210.937562.50007936.13 KB
AngleSharppinterest2,269.28 μs142.931 μs7.835 μs136.7188128.9063128.90631121.95 KB
CsQueryqq6,051.05 μs521.770 μs28.600 μs453.1250226.562531.25002471.28 KB
HTMLAgilityPackqq5,935.02 μs478.857 μs26.248 μs593.7500296.8750-3345.35 KB
AngleSharpqq8,620.11 μs605.321 μs33.180 μs406.2500203.125046.87502134.35 KB
CsQueryreddit28,485.33 μs16,629.956 μs911.544 μs7343.75006656.25005937.500097804.74 KB
HTMLAgilityPackreddit55,492.40 μs2,706.110 μs148.331 μs74000.0000400.0000200.000068976.93 KB
AngleSharpreddit18,756.14 μs3,652.892 μs200.227 μs1343.75001125.0000687.50008795.31 KB
CsQuerysitepoint5,456.44 μs75.188 μs4.121 μs1039.0625648.4375328.12503999.25 KB
HTMLAgilityPacksitepoint9,606.40 μs996.101 μs54.600 μs2796.8750484.375046.87507479.26 KB
AngleSharpsitepoint11,834.08 μs1,248.806 μs68.451 μs718.7500437.5000187.50003421.89 KB
CsQuerysmashing107.09 μs3.101 μs0.170 μs76.1719--58.63 KB
HTMLAgilityPacksmashing97.93 μs8.065 μs0.442 μs118.7744--91.27 KB
AngleSharpsmashing146.05 μs9.340 μs0.512 μs55.4199--42.68 KB
CsQuerysohu8,609.93 μs1,500.603 μs82.253 μs546.8750281.250062.50003279.43 KB
HTMLAgilityPacksohu8,968.81 μs633.634 μs34.732 μs765.6250375.0000-4585.71 KB
AngleSharpsohu13,511.16 μs3,160.689 μs173.248 μs546.8750328.1250109.37503361.91 KB
CsQueryspiegel211,519.63 μs372,492.375 μs20,417.564 μs34000.000015000.000010000.0000576924.01 KB
HTMLAgilityPackspiegel75,016.80 μs53,364.569 μs2,925.092 μs12125.00002125.0000750.000031002.63 KB
AngleSharpspiegel76,223.27 μs10,207.845 μs559.526 μs3000.00001000.0000-17287.29 KB
CsQuerystackoverflow7,908.16 μs24.694 μs1.354 μs687.5000343.750046.87504275.74 KB
HTMLAgilityPackstackoverflow6,521.56 μs373.698 μs20.484 μs718.7500343.7500-3761.42 KB
AngleSharpstackoverflow11,342.72 μs171.985 μs9.427 μs515.6250296.875093.75002645.64 KB
CsQuerytaobao8,823.25 μs4,057.001 μs222.378 μs10671.87503562.50002468.750028015.66 KB
HTMLAgilityPacktaobao24,314.95 μs2,437.444 μs133.605 μs29437.5000906.250031.250030738.97 KB
AngleSharptaobao7,903.38 μs422.405 μs23.153 μs953.1250828.1250546.87504200.56 KB
CsQuerytmall20,233.00 μs9,593.654 μs525.861 μs35156.250024750.000022781.2500132866.65 KB
HTMLAgilityPacktmall3,106.31 μs365.161 μs20.016 μs761.7188238.2813-2274 KB
AngleSharptmall3,624.70 μs51.738 μs2.836 μs234.3750175.7813175.78131540.94 KB
CsQuerytumblr1,257.62 μs103.290 μs5.662 μs187.500062.5000-591.96 KB
HTMLAgilityPacktumblr1,522.42 μs12.835 μs0.704 μs210.9375101.5625-1236.02 KB
AngleSharptumblr2,845.86 μs119.163 μs6.532 μs148.437558.5938-659.3 KB
CsQueryvk2,879.40 μs307.347 μs16.847 μs1398.4375472.6563468.75006900.75 KB
HTMLAgilityPackvk5,018.50 μs932.314 μs51.103 μs1039.0625492.1875-6016.33 KB
AngleSharpvk2,900.81 μs79.652 μs4.366 μs214.8438156.2500156.25001174.17 KB
CsQueryweibo6,864.06 μs753.160 μs41.283 μs64468.75001523.4375328.125055621.54 KB
HTMLAgilityPackweibo6,301.79 μs533.409 μs29.238 μs6210.9375242.187578.12507947.5 KB
AngleSharpweibo1,957.82 μs58.780 μs3.222 μs203.125085.937535.1563972.91 KB
CsQuerywordpress1,548.06 μs51.681 μs2.833 μs197.265676.1719-715.13 KB
CsQuerywordpress1,517.53 μs86.715 μs4.753 μs197.265676.1719-715.13 KB
HTMLAgilityPackwordpress2,479.26 μs82.376 μs4.515 μs546.8750203.1250-1891.62 KB
HTMLAgilityPackwordpress2,492.86 μs109.191 μs5.985 μs546.8750203.1250-1891.62 KB
AngleSharpwordpress3,326.00 μs172.623 μs9.462 μs171.875082.0313-898.76 KB
AngleSharpwordpress3,315.28 μs70.997 μs3.892 μs171.875082.0313-898.76 KB
CsQueryyahoo23,053.18 μs13,648.954 μs748.145 μs12718.750011000.00009250.000074161.32 KB
HTMLAgilityPackyahoo42,640.78 μs5,029.334 μs275.675 μs45500.0000333.3333166.666749719.34 KB
AngleSharpyahoo19,797.23 μs910.398 μs49.902 μs1468.75001187.5000718.75007284.6 KB
CsQueryyoutube183.10 μs4.834 μs0.265 μs103.759814.4043-108.58 KB
HTMLAgilityPackyoutube368.96 μs45.489 μs2.493 μs324.707039.5508-346.6 KB
AngleSharpyoutube454.85 μs41.482 μs2.274 μs119.628920.0195-144.41 KB

DOM Querying / CSS Selectors

The setup for this test was:

ini
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042
AMD Ryzen 7 2700X, 1 CPU, 16 logical and 8 physical cores
  [Host]   : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT
  ShortRun : .NET Framework 4.8 (4.8.4341.0), X64 RyuJIT

Job=ShortRun  IterationCount=3  LaunchCount=1
WarmupCount=3

The results are displayed below.

MethodSelectorMeanErrorStdDevGen 0Gen 1Gen 2Allocated
CsQuery#title2.866 μs0.1455 μs0.0080 μs4.4479--3.42 KB
AngleSharp#title313.784 μs13.9545 μs0.7649 μs21.4844--16.91 KB
CsQuery.note7.283 μs1.2611 μs0.0691 μs8.1787--6.28 KB
AngleSharp.note326.217 μs25.8384 μs1.4163 μs21.9727--17.13 KB
CsQuerya[href]335.407 μs38.2870 μs2.0986 μs346.6797--266.64 KB
AngleSharpa[href]344.184 μs9.6133 μs0.5269 μs27.3438--21.21 KB
CsQuerya[href][lang][class]424.967 μs22.9636 μs1.2587 μs454.1016--349.71 KB
AngleSharpa[href][lang][class]331.470 μs37.9205 μs2.0786 μs21.9727--17.25 KB
CsQuerybody3.672 μs0.6654 μs0.0365 μs4.5700--3.51 KB
AngleSharpbody313.239 μs27.4278 μs1.5034 μs21.4844--16.91 KB
CsQuerybody div28.863 μs3.9254 μs0.2152 μs28.3813--21.83 KB
AngleSharpbody div334.852 μs21.7180 μs1.1904 μs32.2266--25.01 KB
CsQuerydiv20.936 μs2.8753 μs0.1576 μs20.3857--15.67 KB
AngleSharpdiv333.623 μs12.5988 μs0.6906 μs22.9492--17.92 KB
CsQuerydiv #title81.408 μs0.8466 μs0.0464 μs78.9795--60.67 KB
AngleSharpdiv #title330.792 μs45.5623 μs2.4974 μs22.4609--17.33 KB
CsQuerydiv + p58.216 μs3.6349 μs0.1992 μs54.5654--41.92 KB
AngleSharpdiv + p420.089 μs53.8564 μs2.9521 μs42.4805--32.99 KB
CsQuerydiv > p167.408 μs0.7517 μs0.0412 μs139.6484--107.47 KB
AngleSharpdiv > p355.433 μs198.0923 μs10.8581 μs47.3633--36.54 KB
CsQuerydiv > p > a359.735 μs16.1910 μs0.8875 μs308.1055--236.69 KB
AngleSharpdiv > p > a347.709 μs52.0621 μs2.8537 μs45.4102--35.02 KB
CsQuerydiv p163.559 μs1.0895 μs0.0597 μs141.3574--108.61 KB
AngleSharpdiv p377.680 μs22.3904 μs1.2273 μs84.4727--64.98 KB
CsQuerydiv p a366.239 μs15.9706 μs0.8754 μs317.8711--244.52 KB
AngleSharpdiv p a437.168 μs30.2473 μs1.6580 μs106.4453--82.09 KB
CsQuerydiv ~ p5,177.381 μs205.7935 μs11.2802 μs6203.1250--4769.67 KB
AngleSharpdiv ~ p1,895.874 μs435.0403 μs23.8460 μs957.0313--736.77 KB
CsQuerydiv, p, a380.255 μs33.9667 μs1.8618 μs172.851618.5547-170.5 KB
AngleSharpdiv, p, a365.555 μs37.8889 μs2.0768 μs43.4570--33.48 KB
CsQuerydiv.example58.140 μs6.4138 μs0.3516 μs66.5283--51.14 KB
AngleSharpdiv.example342.246 μs3.7113 μs0.2034 μs23.4375--18.11 KB
CsQuerydiv.e(...).note [21]98.881 μs4.8513 μs0.2659 μs110.4736--84.91 KB
AngleSharpdiv.e(...).note [21]347.342 μs40.8616 μs2.2398 μs23.4375--18.52 KB
CsQuerydiv:not(.example)44.816 μs0.7542 μs0.0413 μs34.9121--26.83 KB
AngleSharpdiv:not(.example)322.179 μs10.9380 μs0.5995 μs22.4609--17.59 KB
CsQuerydiv[class!=made_up]45.888 μs12.9403 μs0.7093 μs49.8657--38.35 KB
AngleSharpdiv[class!=made_up]312.672 μs2.2162 μs0.1215 μs23.4375--18.21 KB
CsQuerydiv[class$=mple]83.416 μs5.0121 μs0.2747 μs97.6563--75.09 KB
AngleSharpdiv[class$=mple]320.199 μs4.9361 μs0.2706 μs23.4375--18.21 KB
CsQuerydiv[class=e]*84.710 μs8.6005 μs0.4714 μs95.9473--73.76 KB
AngleSharpdiv[class*=e]313.320 μs11.9783 μs0.6566 μs23.4375--18.21 KB
CsQuerydiv[class=example]83.916 μs2.8985 μs0.1589 μs95.5811--73.45 KB
AngleSharpdiv[class=example]316.863 μs28.4840 μs1.5613 μs23.4375--18.22 KB
CsQuerydiv[class]61.271 μs1.7982 μs0.0986 μs69.0918--53.14 KB
AngleSharpdiv[class]316.051 μs14.2653 μs0.7819 μs23.4375--18.15 KB
CsQuerydiv[class^=exa]83.783 μs18.9781 μs1.0403 μs96.9238--74.54 KB
AngleSharpdiv[class^=exa]311.789 μs16.0779 μs0.8813 μs23.4375--18.21 KB
CsQuerydiv[c(...)mple] [28]135.848 μs6.9089 μs0.3787 μs166.5039--128.02 KB
AngleSharpdiv[c(...)mple] [28]320.242 μs19.4510 μs1.0662 μs23.4375--18.33 KB
CsQuery**div[class=dialog]**80.618 μs3.2140 μs0.1762 μs77.3926--
AngleSharpdiv[class=dialog]310.329 μs13.1120 μs0.7187 μs21.9727--
CsQuerydiv[class~=example]102.342 μs2.3261 μs0.1275 μs117.5537--90.3 KB
AngleSharpdiv[class~=example]334.092 μs10.3627 μs0.5680 μs46.3867--36.08 KB
CsQueryh1#title4.880 μs0.2186 μs0.0120 μs6.7062--5.16 KB
AngleSharph1#title325.145 μs103.5076 μs5.6736 μs21.9727--17.11 KB
CsQueryh1#title + div > p8.236 μs0.1216 μs0.0067 μs9.7656--7.51 KB
AngleSharph1#title + div > p417.149 μs28.1992 μs1.5457 μs50.2930--38.96 KB
CsQueryh1[id(...)tors) [26]9.698 μs0.4063 μs0.0223 μs9.8114--7.55 KB
AngleSharph1[id(...)tors) [26]333.738 μs47.5316 μs2.6054 μs22.4609--17.7 KB
CsQueryp:con(...)tors) [21]383.667 μs7.8307 μs0.4292 μs59.0820--45.61 KB
AngleSharpp:con(...)tors) [21]717.665 μs17.4106 μs0.9543 μs313.4766--241.68 KB
CsQueryp:first-child110.793 μs17.4810 μs0.9582 μs78.8574--60.62 KB
AngleSharpp:first-child338.089 μs60.8125 μs3.3333 μs22.9492--18.11 KB
CsQueryp:last-child102.990 μs39.6095 μs2.1711 μs66.5283--51.15 KB
AngleSharpp:last-child336.307 μs17.5237 μs0.9605 μs22.4609--17.57 KB
CsQueryp:nth-child(2n)585.353 μs15.8116 μs0.8667 μs166.0156--127.86 KB
AngleSharpp:nth-child(2n)1,202.662 μs62.5433 μs3.4282 μs27.3438--21.32 KB
CsQueryp:nth-child(2n+1)587.156 μs4.7381 μs0.2597 μs166.9922--129.01 KB
AngleSharpp:nth-child(2n+1)1,240.121 μs124.2185 μs6.8088 μs27.3438--21.34 KB
CsQueryp:nth-child(even)581.644 μs13.6114 μs0.7461 μs166.0156--127.88 KB
AngleSharpp:nth-child(even)1,250.388 μs354.2351 μs19.4168 μs27.3438--21.3 KB
CsQueryp:nth-child(n)625.485 μs33.0617 μs1.8122 μs225.5859--173.52 KB
AngleSharpp:nth-child(n)1,216.186 μs82.9399 μs4.5462 μs31.2500--25.32 KB
CsQueryp:nth-child(odd)591.015 μs208.7191 μs11.4406 μs166.9922--129 KB
AngleSharpp:nth-child(odd)1,190.050 μs45.8750 μs2.5146 μs27.3438--21.3 KB
CsQueryp:only-child140.605 μs16.9213 μs0.9275 μs102.0508--78.48 KB
AngleSharpp:only-child526.919 μs29.0772 μs1.5938 μs21.4844--17.07 KB
CsQueryul .tocline249.207 μs1.4457 μs0.0792 μs45.7153--35.13 KB
AngleSharpul .tocline2335.199 μs7.0508 μs0.3865 μs24.4141--19.04 KB
CsQueryul.toc > li.tocline295.223 μs9.4951 μs0.5205 μs88.9893--68.44 KB
AngleSharpul.toc > li.tocline2343.599 μs32.2316 μs1.7667 μs23.4375--18.38 KB
CsQueryul.toc li.tocline2121.851 μs2.0593 μs0.1129 μs108.8867--83.7 KB
AngleSharpul.toc li.tocline2341.464 μs45.5889 μs2.4989 μs24.9023--19.38 KB