floki icon indicating copy to clipboard operation
floki copied to clipboard

Find without html tree for some pseudo classes

Open ypconstante opened this issue 1 year ago • 0 comments

This PR adds support for traversal without building HTMLTree for the pseudo-classes that don't require tree information - :checked, :disabled, and :not not using any of the other pseudo-classes.

Final PR for https://github.com/philss/floki/issues/515

##### With input big #####
Name                                       ips        average  deviation         median         99th %
checked (pr)                            593.06        1.69 ms     ±8.05%        1.66 ms        2.22 ms
disabled (pr)                           593.05        1.69 ms     ±7.67%        1.66 ms        2.19 ms
not checked (pr)                        588.96        1.70 ms    ±13.37%        1.66 ms        2.58 ms
checked (v0.36.2-4-gc3417a5)             35.65       28.05 ms    ±58.88%       21.24 ms       83.09 ms
disabled (v0.36.2-4-gc3417a5)            34.80       28.74 ms    ±54.31%       22.21 ms       72.75 ms
not checked (v0.36.2-4-gc3417a5)         30.42       32.87 ms    ±53.87%       25.51 ms       87.42 ms

Comparison: 
checked (pr)                            593.06
disabled (pr)                           593.05 - 1.00x slower +0.00004 ms
not checked (pr)                        588.96 - 1.01x slower +0.0118 ms
checked (v0.36.2-4-gc3417a5)             35.65 - 16.63x slower +26.36 ms
disabled (v0.36.2-4-gc3417a5)            34.80 - 17.04x slower +27.05 ms
not checked (v0.36.2-4-gc3417a5)         30.42 - 19.49x slower +31.18 ms

Memory usage statistics:

Name                                Memory usage
checked (pr)                             1.87 MB
disabled (pr)                            1.87 MB - 1.00x memory usage -0.00024 MB
not checked (pr)                         1.88 MB - 1.00x memory usage +0.00188 MB
checked (v0.36.2-4-gc3417a5)             9.46 MB - 5.04x memory usage +7.58 MB
disabled (v0.36.2-4-gc3417a5)            9.45 MB - 5.04x memory usage +7.58 MB
not checked (v0.36.2-4-gc3417a5)         9.46 MB - 5.05x memory usage +7.58 MB

**All measurements for memory usage were the same**

##### With input medium #####
Name                                       ips        average  deviation         median         99th %
not checked (pr)                        1.82 K        0.55 ms     ±6.03%        0.53 ms        0.68 ms
checked (pr)                            1.82 K        0.55 ms     ±7.04%        0.54 ms        0.70 ms
disabled (pr)                           1.82 K        0.55 ms     ±7.29%        0.53 ms        0.71 ms
checked (v0.36.2-4-gc3417a5)            0.35 K        2.82 ms     ±8.00%        2.77 ms        4.08 ms
disabled (v0.36.2-4-gc3417a5)           0.35 K        2.84 ms     ±7.87%        2.78 ms        4.01 ms
not checked (v0.36.2-4-gc3417a5)        0.35 K        2.90 ms     ±8.97%        2.84 ms        4.30 ms

Comparison: 
not checked (pr)                        1.82 K
checked (pr)                            1.82 K - 1.00x slower +0.00163 ms
disabled (pr)                           1.82 K - 1.00x slower +0.00184 ms
checked (v0.36.2-4-gc3417a5)            0.35 K - 5.14x slower +2.27 ms
disabled (v0.36.2-4-gc3417a5)           0.35 K - 5.17x slower +2.29 ms
not checked (v0.36.2-4-gc3417a5)        0.35 K - 5.29x slower +2.35 ms

Memory usage statistics:

Name                                Memory usage
not checked (pr)                         0.61 MB
checked (pr)                             0.61 MB - 1.00x memory usage -0.00173 MB
disabled (pr)                            0.61 MB - 1.00x memory usage -0.00204 MB
checked (v0.36.2-4-gc3417a5)             2.74 MB - 4.49x memory usage +2.13 MB
disabled (v0.36.2-4-gc3417a5)            2.74 MB - 4.49x memory usage +2.13 MB
not checked (v0.36.2-4-gc3417a5)         2.74 MB - 4.50x memory usage +2.13 MB

**All measurements for memory usage were the same**

##### With input small #####
Name                                       ips        average  deviation         median         99th %
not checked (pr)                        8.69 K      115.08 μs    ±12.09%      112.32 μs      171.40 μs
checked (pr)                            8.68 K      115.25 μs    ±16.25%      110.24 μs      185.13 μs
disabled (pr)                           8.52 K      117.41 μs    ±19.30%      111.78 μs      239.50 μs
disabled (v0.36.2-4-gc3417a5)           1.78 K      561.55 μs    ±18.67%      584.53 μs      759.41 μs
checked (v0.36.2-4-gc3417a5)            1.78 K      562.87 μs    ±19.39%      591.40 μs      819.01 μs
not checked (v0.36.2-4-gc3417a5)        1.70 K      586.67 μs    ±20.81%      610.79 μs      992.99 μs

Comparison: 
not checked (pr)                        8.69 K
checked (pr)                            8.68 K - 1.00x slower +0.175 μs
disabled (pr)                           8.52 K - 1.02x slower +2.33 μs
disabled (v0.36.2-4-gc3417a5)           1.78 K - 4.88x slower +446.47 μs
checked (v0.36.2-4-gc3417a5)            1.78 K - 4.89x slower +447.79 μs
not checked (v0.36.2-4-gc3417a5)        1.70 K - 5.10x slower +471.59 μs

Memory usage statistics:

Name                                Memory usage
not checked (pr)                       130.06 KB
checked (pr)                           128.21 KB - 0.99x memory usage -1.85156 KB
disabled (pr)                          127.97 KB - 0.98x memory usage -2.09375 KB
disabled (v0.36.2-4-gc3417a5)          619.08 KB - 4.76x memory usage +489.02 KB
checked (v0.36.2-4-gc3417a5)           619.32 KB - 4.76x memory usage +489.26 KB
not checked (v0.36.2-4-gc3417a5)       621.93 KB - 4.78x memory usage +491.87 KB

ypconstante avatar May 18 '24 01:05 ypconstante