Sylius / SyliusThemeBundle

Theming for Symfony, supports templates, assets and translations.
https://sylius.com
MIT License
92 stars 36 forks source link

Performance issue #109

Open GSpecDrum opened 3 years ago

GSpecDrum commented 3 years ago

I have performance issues with migrating from liip/theme-bundle to SyliusThemeBundle.

vendor version
PHP 7.4.12
Symfony/Symfony 4.4.15
Sylius/SyliusThemeBundle 2.2.0
sonata-project/SonataAdminBundle 3.76

Our project has more than 3 themes and we are using SonataAdminBundle. It has many twig template calls to rendering small blocks.

As a result, Sylius\Bundle\ThemeBundle\Twig\ThemeFilesystemLoader::locateTemplate is called more than 200 times per request.

Inside this method HierarchicalTemplateLocator rotating through all themes and all themed locators for each twig render call. It tooks very long time for such frequent calls.

In total, requests fall in timeout.

I have profiler screenshots to show my case (dev environment):

image 2 themes is configured

image 7 themes configured

one more screen - for CRUD list action, 2 themes configured: image

Based on the above, for now I can't using this bundle for my project. I don't understand why this bundle is recommended to replacing for liip/theme-bundle.

Roshyo commented 2 years ago

Indeed it loops a lot, but still the performances showed here are terrible compared to the ones I get. With 4 themes enabled, 4800 times on the CompositeTemplateLocator but the Sylius home page still loads in 750ms approx. And the render time was 0.1094 seconds. So clearly acceptable, even more since this whole thing will get cached once the production mode will be enabled (once on prod mode, it reaches 0.0390 seconds of rendering time)

Are you sure it is not rather related to your environment ?

In any case, do you have some solution in mind ?

GSpecDrum commented 2 years ago

Yes, it is related to environment, like I said. On dev environment it is terribly worse than on production.

About solution - I recommend to look how it was done in liip/theme-bundle. There was caching mechanism to not call locateTemplate for each time when template is rendering.

mario-fehr commented 2 years ago

Probably related to #70 and #71