Chapters
26 Chapters
|
2:53:08
|
Login to bookmark this video
-
Course Code
Subscribe to download the code!
Subscribe to download the code!
-
This Video
Subscribe to download the video!
Subscribe to download the video!
-
Subtitles
Subscribe to download the subtitles!
Subscribe to download the subtitles!
-
Course Script
Subscribe to download the script!
Subscribe to download the script!
23.
Sub Requests
Scroll down to the script below, click on any sentence (including terminal blocks) to jump to that spot in the video!
Subscribe to jump to this part in the video!
Keep on Learning!
If you liked what you've learned so far, dive in! Subscribe to get access to this tutorial plus video, code and script downloads.
This tutorial also works well for Symfony 6!
What PHP libraries does this tutorial use?
// composer.json
{
"require": {
"php": ">=8.2",
"ext-iconv": "*",
"antishov/doctrine-extensions-bundle": "^1.4", // v1.4.3
"aws/aws-sdk-php": "^3.87", // 3.133.20
"composer/package-versions-deprecated": "^1.11", // 1.11.99
"doctrine/annotations": "^1.0", // 1.12.1
"doctrine/doctrine-bundle": "^2.0", // 2.2.3
"doctrine/doctrine-migrations-bundle": "^1.3|^2.0", // 2.2.2
"doctrine/orm": "^2.5.11", // 2.8.2
"easycorp/easy-log-handler": "^1.0", // v1.0.9
"http-interop/http-factory-guzzle": "^1.0", // 1.0.0
"knplabs/knp-markdown-bundle": "^1.7", // 1.9.0
"knplabs/knp-paginator-bundle": "^5.0", // v5.4.2
"knplabs/knp-snappy-bundle": "^1.6", // v1.7.1
"knplabs/knp-time-bundle": "^1.8", // v1.16.0
"league/flysystem-aws-s3-v3": "^1.0", // 1.0.24
"league/flysystem-cached-adapter": "^1.0", // 1.0.9
"league/html-to-markdown": "^4.8", // 4.9.1
"liip/imagine-bundle": "^2.1", // 2.5.0
"oneup/flysystem-bundle": "^3.0", // 3.7.0
"php-http/guzzle6-adapter": "^2.0", // v2.0.2
"phpdocumentor/reflection-docblock": "^5.2", // 5.2.2
"sensio/framework-extra-bundle": "^5.1", // v5.6.1
"symfony/asset": "5.0.*", // v5.0.11
"symfony/console": "5.0.*", // v5.0.11
"symfony/dotenv": "5.0.*", // v5.0.11
"symfony/flex": "^1.9", // v1.21.6
"symfony/form": "5.0.*", // v5.0.11
"symfony/framework-bundle": "5.0.*", // v5.0.11
"symfony/mailer": "5.0.*", // v5.0.11
"symfony/messenger": "5.0.*", // v5.0.11
"symfony/monolog-bundle": "^3.5", // v3.6.0
"symfony/property-access": "5.0.*|| 5.1.*", // v5.1.11
"symfony/property-info": "5.0.*|| 5.1.*", // v5.1.10
"symfony/routing": "5.1.*", // v5.1.11
"symfony/security-bundle": "5.0.*", // v5.0.11
"symfony/sendgrid-mailer": "5.0.*", // v5.0.11
"symfony/serializer": "5.0.*|| 5.1.*", // v5.1.10
"symfony/twig-bundle": "5.0.*", // v5.0.11
"symfony/validator": "5.0.*", // v5.0.11
"symfony/webpack-encore-bundle": "^1.4", // v1.11.1
"symfony/yaml": "5.0.*", // v5.0.11
"twig/cssinliner-extra": "^2.12", // v2.14.3
"twig/extensions": "^1.5", // v1.5.4
"twig/extra-bundle": "^2.12|^3.0", // v3.3.0
"twig/inky-extra": "^2.12", // v2.14.3
"twig/twig": "^2.12|^3.0" // v2.14.4
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.0", // 3.4.0
"fakerphp/faker": "^1.13", // v1.13.0
"symfony/browser-kit": "5.0.*", // v5.0.11
"symfony/debug-bundle": "5.0.*", // v5.0.11
"symfony/maker-bundle": "^1.0", // v1.29.1
"symfony/phpunit-bridge": "5.0.*", // v5.0.11
"symfony/stopwatch": "^5.1", // v5.1.11
"symfony/var-dumper": "5.0.*", // v5.0.11
"symfony/web-profiler-bundle": "^5.0" // v5.0.11
}
}
8 Comments
I'm trying to come up with the simplest method for caching a subrequest from twig but I feel like there must be a better way. Anyway, I came up with:
Any thoughts on how to simplify this? I haven't tested it btw so I don't even know if this actually works!
Hey @ThibautPalma!
Have you seen
render_esi()? https://symfony.com/doc/current/http_cache/esi.htmlIt's made for this exact situation. I find working with the HTTPCache system a bit more cumbersome than the normal Cache service, but
render_esi()is the way to go. When using that, any variables you pass torender_esi()become part of the cache key.Let me know if that helps!
Cheers!
Awesome, thank you Ryan!
I was definitely in the "over use" camp at one point. Even with http caching (not vanish, just Symfony's PHP implementation) I experienced quite a speed boost once I removed all fragments and turned off http caching.
Obviously "your mileage may vary" but that was my experience.
So don't you recommend using subrequest?
Another question I have ... in each sub-request, does it open a new connection to the database?
Thanks a lot
In my app, I used an ESI to display a user toolbar while http caching the "outer" html. Every "page load" had to do a full request/response cycle for just the user toolbar. So I saved on the database queries/rendering of the outer html. Later, I wanted to have other areas of the "outer html" that were specific to the user so I had to create another ESI... and another... In the end, removing all the ESI and rendering the entire page on each page load as a single request/response was faster. It also made my app much less complex.
So I wouldn't say I don't recommend it but I consider it a premature optimization. I suggest waiting until you actually have performance issues with your site before reaching for it.
Regarding database connections, I think if the sub-request happens within the current request (not using ESI/HTTP caching), the sub-request would share the doctrine connection (but I'm not 100% sure on this).
Thanks for sharing you real-world experience Kevin B.!
I'm also 99% sure that the database connection is shared in the sub-request. A sub-request is ultimately nothing fancy: it's just more work inside the same PHP process. There is a concept of "resetting the container" in Symfony, but that does not happen between sub-requests.
Cheers!
Hey Kevin B.
Thanks for sharing your experience with us, I hope this will help to many others!
Cheers!
"Houston: no signs of life"
Start the conversation!