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

From: 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

« previous php.bugs (#236518) next »