Bug #81424 [Ver]: PCRE2 10.35 JIT performance regression

From: Date: Wed, 08 Sep 2021 14:41:14 +0000
Subject: Bug #81424 [Ver]: PCRE2 10.35 JIT performance regression
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-236469@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=81424&edit=1 ID: 81424 User updated by: nospam at briat dot org Reported by: nospam at briat dot org Summary: PCRE2 10.35 JIT performance regression Status: Verified Type: Bug Package: PCRE related Operating System: * PHP Version: 7.4 Assigned To: cmb Block user comment: N Private report: N New Comment: Here the issue https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port/issues/63 For the record, I think that your regex is maybe equivalent for matching but not for replacing: $css = preg_replace('/[^{};\/\n]+\{\}/S', '', $css); => match and replace the whole css declaration. Previous Comments: ------------------------------------------------------------------------ [2021-09-08 13:47:02] nospam at briat dot org Thanks for the analysis. I will also fill an issue on https://github.com/tubalmartin/YUI-CSS-compressor-PHP-port. ------------------------------------------------------------------------ [2021-09-08 12:34:28] cmb@php.net Anyhow, I filed <https://github.com/PhilipHazel/pcre2/issues/16>. ------------------------------------------------------------------------ [2021-09-08 12:16:29] cmb@php.net Simpler reproducer: <?php $data = file_get_contents("lorem.css.txt"); $time_start = hrtime(true); var_dump(preg_match('/[^{};\/\n]+\{\}/S', $data)); var_dump( strlen($data), (hrtime(true) - $time_start) / 100000 ); ?> Yields a performance regression by more than factor 100 for me. I'm not sure, though, whether the PCRE2 maintainers would fix this, since the regex appears to be suboptimal. Using a look behind assertion var_dump(preg_match('/(?<![{};\/\n]+)\{\}/S', $data)); instead, makes almost no performance difference. ------------------------------------------------------------------------ [2021-09-08 11:09:59] cmb@php.net I can confirm the serious performance regression, and that it is caused by the update to PCRE2 10.35. The issue persists with current master, which has PCRE2 10.37. It is possible that the issue has been fixed in PCRE2 10.38-RC1, but I haven't verified that yet. Just in case the issue has not been fixed upstream, we'd need a simpler reproducer before reporting upstream. ------------------------------------------------------------------------ [2021-09-08 10:07:59] cmb@php.net The regression can't be related to #81243, because that is only fixed as of PHP 7.4.22. It is more likely that it is related to the PCRE version update. > Could you please provide the CSS file you used for testing? Yes, please. And don't post it here in the bug tracker, but rather put it on gist.github.com or so, and post the link here. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=81424 -- Edit this bug report at https://bugs.php.net/bug.php?id=81424&edit=1

« previous php.bugs (#236469) next »