[wp-trac] [WordPress Trac] #58069: Performance of _wp_normalize_relative_css_links() can be increased >2x

WordPress Trac noreply at wordpress.org
Mon Apr 3 22:39:19 UTC 2023


#58069: Performance of _wp_normalize_relative_css_links() can be increased >2x
------------------------------+-------------------------
 Reporter:  westonruter       |      Owner:  westonruter
     Type:  defect (bug)      |     Status:  assigned
 Priority:  normal            |  Milestone:  6.2.1
Component:  Editor            |    Version:  5.9
 Severity:  normal            |   Keywords:
  Focuses:  css, performance  |
------------------------------+-------------------------
 The `_wp_normalize_relative_css_links()` function is not currently
 implemented in an optimal way. It is doing a regex match for all instances
 of `url(...)` in a given CSS, and then for each match it checks if it is a
 relative URL. If so, it then makes the URL absolute and then does
 ''another'' global search & replace in the CSS to replace the relative
 path with the absolute path. This means for every search there is a
 secondary search. This secondary `str_replace()` can be eliminated by
 replacing the unitial `preg_match_all()` with a `preg_replace_callback()`.
 This makes the function run >2x faster when
 [https://gist.github.com/westonruter/7f916bee3f45ef9307235daefb603e7c
 benchmarked] being run across each CSS file in Gutenberg and the built-in
 themes.


 {{{
 $ composer run-script test -- --iterations=10 --revs=500
 > phpbench run Bench.php --report=default '--iterations=10' '--revs=500'
 PHPBench (1.2.10) running benchmarks... #standwithukraine
 with PHP version 7.4.33, xdebug ❌, opcache ❌

 \Bench

     benchTrunk..............................I9 - Mo7.734ms (±2.96%)
     benchPatch..............................I9 - Mo3.527ms (±6.74%)

 Subjects: 2, Assertions: 0, Failures: 0, Errors: 0
 +------+-----------+------------+-----+------+------------+-------------+--------------+----------------+
 | iter | benchmark | subject    | set | revs | mem_peak   | time_avg    |
 comp_z_value | comp_deviation |
 +------+-----------+------------+-----+------+------------+-------------+--------------+----------------+
 | 0    | Bench     | benchTrunk |     | 500  | 4,242,960b | 8,066.348μs |
 +0.76σ       | +2.24%         |
 | 1    | Bench     | benchTrunk |     | 500  | 4,242,960b | 8,006.150μs |
 +0.50σ       | +1.48%         |
 | 2    | Bench     | benchTrunk |     | 500  | 4,242,960b | 7,815.732μs |
 -0.32σ       | -0.93%         |
 | 3    | Bench     | benchTrunk |     | 500  | 4,242,960b | 7,706.406μs |
 -0.78σ       | -2.32%         |
 | 4    | Bench     | benchTrunk |     | 500  | 4,242,960b | 7,702.188μs |
 -0.80σ       | -2.37%         |
 | 5    | Bench     | benchTrunk |     | 500  | 4,242,960b | 7,649.464μs |
 -1.03σ       | -3.04%         |
 | 6    | Bench     | benchTrunk |     | 500  | 4,242,960b | 7,628.240μs |
 -1.12σ       | -3.31%         |
 | 7    | Bench     | benchTrunk |     | 500  | 4,242,960b | 7,785.394μs |
 -0.45σ       | -1.32%         |
 | 8    | Bench     | benchTrunk |     | 500  | 4,242,960b | 8,314.294μs |
 +1.82σ       | +5.39%         |
 | 9    | Bench     | benchTrunk |     | 500  | 4,242,960b | 8,219.126μs |
 +1.41σ       | +4.18%         |
 | 0    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,492.050μs |
 -0.80σ       | -5.42%         |
 | 1    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,440.668μs |
 -1.01σ       | -6.81%         |
 | 2    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,524.826μs |
 -0.67σ       | -4.53%         |
 | 3    | Bench     | benchPatch |     | 500  | 4,242,960b | 4,035.964μs |
 +1.38σ       | +9.32%         |
 | 4    | Bench     | benchPatch |     | 500  | 4,242,960b | 4,178.894μs |
 +1.96σ       | +13.19%        |
 | 5    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,769.186μs |
 +0.31σ       | +2.09%         |
 | 6    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,527.606μs |
 -0.66σ       | -4.45%         |
 | 7    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,900.464μs |
 +0.84σ       | +5.65%         |
 | 8    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,542.204μs |
 -0.60σ       | -4.06%         |
 | 9    | Bench     | benchPatch |     | 500  | 4,242,960b | 3,508.126μs |
 -0.74σ       | -4.98%         |
 +------+-----------+------------+-----+------+------------+-------------+--------------+----------------+
 }}}

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/58069>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list