Bug #81424 [PATCH]: PCRE2 10.35 JIT performance regression
| From: | cmb@php.net | Date: | Fri, 10 Sep 2021 10:47:17 +0000 |
| Subject: | Bug #81424 [PATCH]: PCRE2 10.35 JIT performance regression | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-236518@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
Patch added 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:
The following pull request has been associated:
Patch Name: Fix #81424: PCRE2 10.35 JIT performance regression
On GitHub: https://github.com/php/php-src/pull/7484
Patch: https://github.com/php/php-src/pull/7484.patch
Previous Comments:
------------------------------------------------------------------------
[2021-09-08 15:02:00] cmb@php.net
> [â¦] 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. :)
------------------------------------------------------------------------
[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.
------------------------------------------------------------------------
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