-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PEG.js based parser introduced a performance regression #1646
Comments
Sounds like it would be a good idea to bail early when there are absolutely no blocks in a post, e.g. by doing a simple strpos() or regex search. |
Looks like it just gets slower the more content you have. You can test with http://www.loremipsum.de/index_e.html. I started with 5 paragraphs and increased the content by 5 more paragraphs for each test. 358 words: 0.062175989151001s |
This was foreseen as almost unavoidable. The grammar is both designed to be above-all easy to read and implement (so that more-performant versions can be built from it) and also built for JS consumption. PHP is a pretty bad platform on which to generate the parser due to the ways that the semantics of function calling and closures work. Instead we should prefer a hand-written parser that implements the necessary parts of the grammar for the server side. |
I suspect some of the performance problems here are more related to #1611. I will look into a fix using the existing setup and I am confident that we can achieve a reasonable result here.
There are no closures in the generated parser - I've removed them from the code because they are not supported on PHP 5.2. I am also skeptical that function calling semantics are the problem. Can you elaborate on that?
It is mandatory that client and server parsing behave the same way. I see two ways to achieve this:
|
We also having the similar issue of the slow parser cause php maximum execution timeout. Steps to Reproduce
I'm using the Gutenberg v0.3.0 and use Gutenberg Demo content. |
I'll implement a fix for this in time for this week's release. |
* Use string-array instead of plurals tag in strings.xml See https://github.com/GlotPress/GlotPress-WP/blob/master/gp-includes/formats/format-android.php * Update string files * Update scripts to minimize changes in git diff and keep the same context for android * Exclude strings from tests * Fix lint errors * Bump version to 1.17.1 * Update gutenberg ref following 1.17 merge to gutenberg master * Update gutenberg ref * Remove declaration on bridge of unused methods. * Added bridge code for gutenberg to request a native fullscreen preview for for an image from a URL on iOS. * Updating bundle and gutenberg reference. * Updated release notes. * Update gutenberg ref * Update gutenberg ref * Update gutenberg ref * Update GB reference. * Updating bundle after catching up branch and gutenberg submodule. * Update gutenberg ref * Update release notes. * Update UI test * Pass postType as initial prop on iOS * Pass postType down to Editor * Allow Android to set the post type * Updating gutenberg reference. * Removed duplicate line from merge. * updafe test files and iOS version for running locally with xcode 11 * Update gutenberg ref * Update gutenberg ref * Update aztec to version that support reversed and start on lists. * Update Gutenberg to version where list settings are active in native. * update block list check and capabilities * replace double click on android * fix block insertion timeout * update branch with develop * Update gutenberg ref * Update package.json and JS bundle for 1.18.0 release * Update Gutenberg * Update Gutenberg * update gutenberg ref * Update GB-reference. * Update release notes. * revert caps to iPhone Simulator * Update Gutenberg ref * Update Release notes * Update gutenberg/ reference * Update bundles * Update GB reference. * Fix spacing * Add static method to Media class to create instance using mimeType * Add flag to track when appending multiple selected media items as blocks * Introduce mediaSelectionCancelled method in WPAndroidGlueCode * Set flag to append blocks when multiple = false is not respected * Only use appendUploadMediaFiles plural version * Update gutenberg ref * Update to latest Gutenberg master * Patch jsdom to implement Element.closest() * Bring back changes on package.json from 1.7.1 * Add docstring to the function * Return null as per https://dom.spec.whatwg.org/#dom-element-closest * Update Aztec version. * Update GB reference. * Update gutenberg ref * Update RELEASE-NOTES.txt * Update GB reference * Improve code block style * Update GB reference. * Update gutenberg ref * Update Media mimeType truncation to use enum names * Add Javadoc for mAppendsMultipleSelectedToSiblingBlocks flag * Set appends to sibling blocks flag explicitly for all requests * Add clarifying comment for special block append handling * Remove singular (unused) appendMedia method * Update GB reference. * Update GB reference to master. * Set appends to sibling blocks flag explicitly for other media pick * Update GB reference. * Update GB reference. * Use lowercase for Media mimeType truncation * Update Gutenberg * Update Gutenberg * Update Gutenberg ref - after fix for caption alignment * Update bundles * Point to aztecVersion hash which supports list with start and reverse attribute * Update bundle and gutenberg ref - fix disappearing image * Update GB reference. * Update GB reference. * Update GB reference. * Update Gutenberg * Update Gutenberg ref * Update GB reference * Update GB reference. * Only enable page templates on dev builds * Update aztec version * Update aztec version * Add colors for gallery block * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update GB reference. * Update Gutenberg ref * Update Aztec version to 1.14.0 * Make sure if the textColor is changed the default text color is updated. * Use Slider from react-native-community lib (#1620) * Use Slider from react-native-community lib * Update slider version * Add function to read npm version * Rengenerate yarn.lock * Bump node version * Update readNPMVersion function * Use Slider from fork * Update Slider commit * Use Slider from wordpress-mobile fork * Add react-native-slider podspec * Improve babel config * Correct settings.gradle * Correct project.pbxproj * Update ref * Bump * Update ref * Update ref to gutenberg master * Update ref to gutenberg quick fix * Update ref to gutenberg master * Update Aztec editor version. * Update to iOS 13 * Update Xcode version. * Use iOS 12 for tests. * Fix typo * Update Aztec to fix CI error with xcode 10 * Use iOS 12.2 * Update Appium version. * Update to appium 1.15.1 * Update to Appium 1.15.1 only in iOS * Update caps. * Add Gallery Block (#1498) * WIP - initial-html.js for gallery testing * Add parent app media mock for Android * Update gutenberg reference * Update gutenberg reference * Comment out line setting mPendingMediaUploadCallback to null * Update gutenberg reference * Generate bundles * Update gutenberg ref * Generate bundles * Generate bundles * Add some color-studio colors for gallery * Update gutenberg reference * Generate bundle * WIP update ref * Update gutenberg reference * Update gutenberg submodule * Generate bundles * Add $gray-40 color * Update gutenberg reference * Generate bundles * Update gutenberg reference * Generate bundles * Update gutenberg reference * Generate bundles * Update gutenberg reference * Generate bundles * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Restore demo content * Restore anonymous implementation of GutenbergBridgeJS2Parent * Update gutenberg reference * Generate bundles * Bump up Aztec version on iOS Example app * Update gb ref * Generate bundles * Update gutenberg ref * Update gutenberg ref (#1646) * Add release notes for Gallery (#1658) * Make sure we use iPhone 11 (iOS 13) for build and run tests * Pooint aztecVersion to develop * Update Appium for Android tests too. * Set Appium to 1.15.0 * Update aztec version to 1.3.36 * Update appium to 1.16.0-rc.1 * Update Aztec iOS to 1.14.1 * Update GB reference. * Activate preformat block on android platform (#1615) * Updates package.json and JS bundle for 1.19.0 release. * Update to shorten git commands Make the git commands a little easier to copy by taking out `$` from the start of the lines. This also matches with the other commands on the page which do not start with `$`. * Update Unit Tests headings in Getting Started documentation The heading "Test" should be "Unit Tests". The heading "Writing and Running Tests" should be "Writing and Running Unit Tests". https://github.com/wordpress-mobile/gutenberg-mobile/blob/develop/src/index.test.js * Update gutenberg reference * Update gutenberg reference * Update gutenberg ref * Updating bundles. * Feat: Navigation Down in InnerBlocks (#1379) * Add ref to gutenberg repo * Fix e2e tests * Update ref to gutenberg master * Update Gutenberg ref * Remove empty line between checkboxes * Updating release notes to show video settings in 1.19 * Updating gutenberg reference to latest 1.19 release change on gutenberg master branch * Update gutenberg ref * Sass Transformer: Also look for partials Add support for [SASS partials](https://sass-lang.com/guide), as is already present [upstream](https://github.com/kristerkari/react-native-sass-transformer/blob/52884dd59582856fa17e2b2e8ca9efc37d412387/index.js#L41-L42). This should fix the issue introduced by #19159, and discussed there. * Single quotes * Also update sass-transformer-inside-gb.js * Update release notes * Update gutenberg ref * Update gutenberg ref * Update gutenberg ref * Update gutenberg ref * Update Gutenberg ref * Update gutenberg ref * Update gutenberg ref * Bundles up to date with merged code from develop * Add ref to gutenberg repo * Update ref * Update ref * Update ref * Upgrade the SVG lib to fix #1703 * Upgrade the Video lib to fix #1705 * Upgrade the Slider lib to use node_modules in local npm build * Update ref * Upgrade the SVG lib ref * Upgrade the Video lib ref * Upgrade the Slider lib ref * Update ref * Brings back gb master to normal (#1722) * Fix/Bring back master to normal (#1724) * Update Gutenberg ref * Update Gutenberg ref Co-authored-by: Tugdual de Kerviler <[email protected]> Co-authored-by: Matt Chowning <[email protected]> Co-authored-by: etoledom <[email protected]> Co-authored-by: Sérgio Estêvão <[email protected]> Co-authored-by: Cameron Voell <[email protected]> Co-authored-by: Jorge Bernal <[email protected]> Co-authored-by: Javon Davis <[email protected]> Co-authored-by: Maxime Biais <[email protected]> Co-authored-by: Gerardo Pacheco <[email protected]> Co-authored-by: Matthew Kevins <[email protected]> Co-authored-by: Stefanos Togoulidis <[email protected]> Co-authored-by: Marko Savic <[email protected]> Co-authored-by: Luke Walczak <[email protected]> Co-authored-by: Pinar Olguc <[email protected]> Co-authored-by: Sheri Bigelow <[email protected]> Co-authored-by: jbinda <[email protected]> Co-authored-by: Bernie Reiter <[email protected]>
* Use string-array instead of plurals tag in strings.xml See https://github.com/GlotPress/GlotPress-WP/blob/master/gp-includes/formats/format-android.php * Update string files * Update scripts to minimize changes in git diff and keep the same context for android * Exclude strings from tests * Fix lint errors * Bump version to 1.17.1 * Update gutenberg ref following 1.17 merge to gutenberg master * Update gutenberg ref * Remove declaration on bridge of unused methods. * Added bridge code for gutenberg to request a native fullscreen preview for for an image from a URL on iOS. * Updating bundle and gutenberg reference. * Updated release notes. * Update gutenberg ref * Update gutenberg ref * Update gutenberg ref * Update GB reference. * Updating bundle after catching up branch and gutenberg submodule. * Update gutenberg ref * Update release notes. * Update UI test * Pass postType as initial prop on iOS * Pass postType down to Editor * Allow Android to set the post type * Updating gutenberg reference. * Removed duplicate line from merge. * updafe test files and iOS version for running locally with xcode 11 * Update gutenberg ref * Update gutenberg ref * Update aztec to version that support reversed and start on lists. * Update Gutenberg to version where list settings are active in native. * update block list check and capabilities * replace double click on android * fix block insertion timeout * update branch with develop * Update gutenberg ref * Update package.json and JS bundle for 1.18.0 release * Update Gutenberg * Update Gutenberg * update gutenberg ref * Update GB-reference. * Update release notes. * revert caps to iPhone Simulator * Update Gutenberg ref * Update Release notes * Update gutenberg/ reference * Update bundles * Update GB reference. * Fix spacing * Add static method to Media class to create instance using mimeType * Add flag to track when appending multiple selected media items as blocks * Introduce mediaSelectionCancelled method in WPAndroidGlueCode * Set flag to append blocks when multiple = false is not respected * Only use appendUploadMediaFiles plural version * Update gutenberg ref * Update to latest Gutenberg master * Patch jsdom to implement Element.closest() * Bring back changes on package.json from 1.7.1 * Add docstring to the function * Return null as per https://dom.spec.whatwg.org/#dom-element-closest * Update Aztec version. * Update GB reference. * Update gutenberg ref * Update RELEASE-NOTES.txt * Update GB reference * Improve code block style * Update GB reference. * Update gutenberg ref * Update Media mimeType truncation to use enum names * Add Javadoc for mAppendsMultipleSelectedToSiblingBlocks flag * Set appends to sibling blocks flag explicitly for all requests * Add clarifying comment for special block append handling * Remove singular (unused) appendMedia method * Update GB reference. * Update GB reference to master. * Set appends to sibling blocks flag explicitly for other media pick * Update GB reference. * Update GB reference. * Use lowercase for Media mimeType truncation * Update Gutenberg * Update Gutenberg * Update Gutenberg ref - after fix for caption alignment * Update bundles * Point to aztecVersion hash which supports list with start and reverse attribute * Update bundle and gutenberg ref - fix disappearing image * Update GB reference. * Update GB reference. * Update GB reference. * Update Gutenberg * Update Gutenberg ref * Update GB reference * Update GB reference. * Only enable page templates on dev builds * Update aztec version * Update aztec version * Add colors for gallery block * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update GB reference. * Update Gutenberg ref * Update Aztec version to 1.14.0 * Make sure if the textColor is changed the default text color is updated. * Use Slider from react-native-community lib (#1620) * Use Slider from react-native-community lib * Update slider version * Add function to read npm version * Rengenerate yarn.lock * Bump node version * Update readNPMVersion function * Use Slider from fork * Update Slider commit * Use Slider from wordpress-mobile fork * Add react-native-slider podspec * Improve babel config * Correct settings.gradle * Correct project.pbxproj * Update ref * Bump * Update ref * Update ref to gutenberg master * Update ref to gutenberg quick fix * Update ref to gutenberg master * Update Aztec editor version. * Update to iOS 13 * Update Xcode version. * Use iOS 12 for tests. * Fix typo * Update Aztec to fix CI error with xcode 10 * Use iOS 12.2 * Update Appium version. * Update to appium 1.15.1 * Update to Appium 1.15.1 only in iOS * Update caps. * Add Gallery Block (#1498) * WIP - initial-html.js for gallery testing * Add parent app media mock for Android * Update gutenberg reference * Update gutenberg reference * Comment out line setting mPendingMediaUploadCallback to null * Update gutenberg reference * Generate bundles * Update gutenberg ref * Generate bundles * Generate bundles * Add some color-studio colors for gallery * Update gutenberg reference * Generate bundle * WIP update ref * Update gutenberg reference * Update gutenberg submodule * Generate bundles * Add $gray-40 color * Update gutenberg reference * Generate bundles * Update gutenberg reference * Generate bundles * Update gutenberg reference * Generate bundles * Update gutenberg reference * Generate bundles * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Update gutenberg reference * Restore demo content * Restore anonymous implementation of GutenbergBridgeJS2Parent * Update gutenberg reference * Generate bundles * Bump up Aztec version on iOS Example app * Update gb ref * Generate bundles * Update gutenberg ref * Update gutenberg ref (#1646) * Add release notes for Gallery (#1658) * Make sure we use iPhone 11 (iOS 13) for build and run tests * Pooint aztecVersion to develop * Update Appium for Android tests too. * Set Appium to 1.15.0 * Update aztec version to 1.3.36 * Update appium to 1.16.0-rc.1 * Update Aztec iOS to 1.14.1 * Update GB reference. * Activate preformat block on android platform (#1615) * Updates package.json and JS bundle for 1.19.0 release. * Update to shorten git commands Make the git commands a little easier to copy by taking out `$` from the start of the lines. This also matches with the other commands on the page which do not start with `$`. * Update Unit Tests headings in Getting Started documentation The heading "Test" should be "Unit Tests". The heading "Writing and Running Tests" should be "Writing and Running Unit Tests". https://github.com/wordpress-mobile/gutenberg-mobile/blob/develop/src/index.test.js * Update gutenberg reference * Update gutenberg reference * Update gutenberg ref * Updating bundles. * Feat: Navigation Down in InnerBlocks (#1379) * Add ref to gutenberg repo * Fix e2e tests * Update ref to gutenberg master * Update Gutenberg ref * Remove empty line between checkboxes * Updating release notes to show video settings in 1.19 * Updating gutenberg reference to latest 1.19 release change on gutenberg master branch * Update gutenberg ref * Sass Transformer: Also look for partials Add support for [SASS partials](https://sass-lang.com/guide), as is already present [upstream](https://github.com/kristerkari/react-native-sass-transformer/blob/52884dd59582856fa17e2b2e8ca9efc37d412387/index.js#L41-L42). This should fix the issue introduced by #19159, and discussed there. * Single quotes * Also update sass-transformer-inside-gb.js * Update release notes * Update gutenberg ref * Update gutenberg ref * Update gutenberg ref * Update gutenberg ref * Update Gutenberg ref * Update gutenberg ref * Update gutenberg ref * Bundles up to date with merged code from develop * Add ref to gutenberg repo * Update ref * Update ref * Update ref * Upgrade the SVG lib to fix #1703 * Upgrade the Video lib to fix #1705 * Upgrade the Slider lib to use node_modules in local npm build * Update ref * Upgrade the SVG lib ref * Upgrade the Video lib ref * Upgrade the Slider lib ref * Update ref * Brings back gb master to normal (#1722) * Fix/Bring back master to normal (#1724) * Update Gutenberg ref * Update Gutenberg ref Co-authored-by: Tugdual de Kerviler <[email protected]> Co-authored-by: Matt Chowning <[email protected]> Co-authored-by: etoledom <[email protected]> Co-authored-by: Sérgio Estêvão <[email protected]> Co-authored-by: Cameron Voell <[email protected]> Co-authored-by: Jorge Bernal <[email protected]> Co-authored-by: Javon Davis <[email protected]> Co-authored-by: Maxime Biais <[email protected]> Co-authored-by: Gerardo Pacheco <[email protected]> Co-authored-by: Matthew Kevins <[email protected]> Co-authored-by: Stefanos Togoulidis <[email protected]> Co-authored-by: Marko Savic <[email protected]> Co-authored-by: Luke Walczak <[email protected]> Co-authored-by: Pinar Olguc <[email protected]> Co-authored-by: Sheri Bigelow <[email protected]> Co-authored-by: jbinda <[email protected]> Co-authored-by: Bernie Reiter <[email protected]>
After updating the plugin on a site I noticed a performance decrease by 2-3 seconds.
vs.
Checking further
So I removed the filter on
the_content
and the load was back to normal. I also reverted thedo_blocks()
function to the previous version and the load was still normal. But once the PEG version is in use the page load increases by ~3 seconds.Will investigate further to get the exact cause for this.
The text was updated successfully, but these errors were encountered: