|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2016-07-21 13:10 UTC] arjen at parse dot nl
Description: ------------ After reading http://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016 we checked our own implementation. We did not use possessive or atomic grouping in our trim regexps, so one trim call with 20000 whitespace char and a following non-whitespace char took 6 seconds. After updating the regexp this dropped to 2 seconds. Better but still not safe enough.. So we checked the performance in different php versions on 3v4l.org and 5.6 appeared 25x faster: https://3v4l.org/SPEXB/perf#tabs Avg 0.066 for 5.6.x compared to 1.670 for 7.0.x Test script: --------------- <?php preg_replace('~(?>[\pZ\pC]+)$~u', '', str_repeat("\u{2029}", 20000) . 'x'); Expected result: ---------------- Run-time comparable to 5.6.x Actual result: -------------- 25x slowdown. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 04:00:01 2025 UTC |
Please take a look at the user time, not at system time. Or confirm by running it at CLI: time php -r 'preg_replace("~(?>[\pZ\pC]+)$~u", "", str_repeat("\u{2029}", 20000) . "x");' real 0m0.975s user 0m0.973s sys 0m0.000s\u{2029} is a PHP7 feature, so test in 5.6 is not the same.. :-/ See https://3v4l.org/7Wfc5/perf#tabs PHP7 is faster. Regexp still slow, but no regression. Please close :XI recommend using (*SKIP) though - this is the fastest you'll get. preg_replace('~[\pZ\pC]+(*SKIP)$~u', '', str_repeat("\u{2029}", 20000) . 'x');