Bug #81424 [Ver]: PCRE2 10.35 JIT performance regression
| From: | cmb@php.net | Date: | Wed, 08 Sep 2021 15:02:00 +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-236470@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
Updated by: cmb@php.net
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:
> [â¦] I think that your regex is maybe equivalent for matching but
> not for replacing [â¦]
Oh, right. Maybe some other improvement can be made for that.
Anyway, let's wait on the upstream decision. :)
Previous Comments:
------------------------------------------------------------------------
[2021-09-08 14:41:14] nospam at briat dot org
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.
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
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