Let's talk about cache baby! In this post, you will get all information about caching methods and patterns which match with your laravel app. Caching is a great aspect. Deal with it and implement it now.
I will also add all sources, interesting links, and videos so you can learn much more about the magic of caching in laravel.
At first I will ask some question?
How many files are required for one request in laravel?
Roundabout 218 files. I've found that answer in some older presentation, https://www.slideshare.net/chtalbert/the-integration-of-laravel-with-swoole
That is huge stuff to answer only one request. I know the answer is not so easy, it depends on your used laravel version and the setup, but the answer is enough to get a feeling! Don't waste the time of your visitors, save them. They are searching for information. Bring up your information fast, nobody wants to wait.
You have also no time?
Then take some short way. Drink a coffee and implement the laravel coffee cache.
linslin / laravel-coffee-cache
☕ File based lever out cache for laravel. This cache hook in before composer autoload and Laravel boostrapping. It will push your application into light speed.
☕ laravel-coffee-cache
Store based lever out view cache for Laravel 4.x, 5.x 6.x, 7.x, 8.x, 9.x and 10.x. This cache hook in before composer autoload and Laravel bootstrapping. It will push your application into light speed. By default, all GET-Requests will be cached.
It's a coffee cache. You can drink more coffee instead of spending time to optimize your application or server environment. Mokka Mokka!
Why and when should I use laravel-coffee-cache?
Laravel getting bigger and bigger over the years. Today laravel is a very nice framework which helps you to speed up your software development and programming in its best way. On the other hand laravel is slow in handling requests and consumes a lot of memory per request, even if you use View or Database caches. The bootstrapping of laravel takes a bit time also it consumes a lot of memory. E.g. if you want to render…
link: ☕ https://github.com/linslin/laravel-coffee-cache
If you have time and you will digging deeper than the next explanations are for you.
the request
The beginning of each good journey starts with some https ... request!
Someone on this globe is visiting your page (hopefully built with laravel), then boom over 200 files are called to pass the framework and answer the request.
The request passed by routes, logic, views, controllers & all the magic inside your laravel app.
At the end of each request, all is passed but required to answer only one simple user request. All that "magic" steps take time. The request journey is called the "lifecycle".
Time is like a ghost and now you will learn how you can cache them. Be an cachebuster. Don't repeat the same queries on each request, you know don't repeat yourself use cache instead.
lifecycle
For understanding a request it is every time a great idea if you are looking for some diagrams or explanations "laravel lifecycle" is a great keyword. Here some short compressed overview.
If you are searching for laravel lifecycle or take a breath of the fantastic documentation you can find more concrete stuff: https://laravel.com/docs/7.x/lifecycle
The short way (laravel request lifecycle):
It is an MVC-Framework.
1) Your laravel app got some user requests.
2) Over public/index.php & the web.php, the route is called.
3) The route calls the controller, he is acting with models (database) & data (files).
4) All collected data are passed to the view.
That is the short explanation.
Now the longer one:
The detailed perspective
1) Request
2) public/index.php
3) Autoload
4) Load App
5) Http Kernel
6) Bootstrap
7) Register Service Providers
8) Boot Service Providers
9) Middleware
10) Dispatch by router
11) Routes Match
12) Controller
13) Response
14) Terminate middleware
https://blog.albert-chen.com/the-integration-of-laravel-with-swoole-part-1/
I think it is clear. All that stuff needs time. If you are using some caching pattern the request can answer faster, because some steps are skipped for a specified time.
It is like you save some phone numbers in your phone. You don't need to think about all the numbers, you can call directly. The workflow is short. Or you can think vice versa if someone is calling you and you see directly her or his name.
What is caching and why you should use it?
Caching [...] is a software component that stores data so that future requests for that data can be served faster; the data stored in a cache might be the result of an earlier computation or a copy of data stored elsewhere. A cache hit occurs when the requested data can be found in a cache, while a cache miss occurs when it cannot. Cache hits are served by reading data from the cache, which is faster than recomputing a result or reading from a slower data store; thus, the more requests that can be served from the cache, the faster the system performs., https://en.wikipedia.org/wiki/Cache_(computing)
- SpeedUp your page (from 472ms to 284ms) ...
- Reduce the load
- Fewer queries
- faster results
The target is to get most data directly from cache instead of databases.
caching behavior
At first there exist different caching ideas & patterns.
You can cache the whole rendered output (the whole dom of your page) or you can decide to cache only database queries or you activate the route cache.
Then you can also decide where you want to save your cache.
I will show you all possibilities.
Let's start with
Cache Routing
Route Caching exist since laravel 5.
Route caching just caches the translation of incoming requests to controller action not the actual data or response from the controller.
Artisan commands enter in your CLI:
// creates a serialized result of your route.php
php artisan route:cache
// clear the route cache file, use it if you have changed routes.php
php artisan route:clear
Quicknote:
The artisan route:cache command serializes the results of the route.php
Routes are parsed from the cached file, not the routes file.
Read more here: https://mattstauffer.com/blog/laravel-5.0-route-caching/
Caching eloquent queries
Cache driver(s)
// Take a look at .env
CACHE_DRIVER=file
Also, possible cache_drivers are: Memcached, Redis, Database, File, Array
/*
use this to put something into your cache
key = you should set some unique name to identify,
if you have multiple apps that write in your cache storage use also prefixes.
value = the cached, use closures to put for example eloquent stuff in the cache
duration = how long the cache should stay,
the unit depends on laravel version (ms, s)
*/
Cache::put('someUniqueKey', 'value', 60);
// here with remember & closure
Cache::remember('allPosts', 60, function() {
return Posts::all();
});
// read the cache by key
Cache::get('allPosts');
// check and read from cache or put
if (Cache::has('allPosts')){
Cache::get('allPosts');
} else {
Cache::put('allPosts', $cachedStuff, 60);
}
// forget all cached stuff by key
Cache::forget('allPosts');
or clear the cache via CLI
php artisan cache:clear
Timing comparisons
Some interesting article about caching & timing Memcache vs Redis.
https://scotch.io/tutorials/caching-in-laravel-with-speed-comparisons#toc-results-recommendation
Testing
You can use for example the postman browser extension to test and track your caching mechanism and timing.
Learn more / code more / read more
Videos
learn how to set up and use config cache
cache eloquent queries
cache with Redis
cache how to measure the duration
Sources and links which help to learn more:
https://www.google.com/amp/s/www.cloudways.com/blog/integrate-laravel-cache/amp/
https://www.slideshare.net/chtalbert/the-integration-of-laravel-with-swoole
https://laravel.com/docs/4.2/cache
https://mattstauffer.com/blog/laravel-5.0-route-caching/
https://medium.com/swlh/cache-eloquent-queries-in-laravel-6-af722c09a6f7
https://www.mindtwo.de/blog/laravel-cache-bessere-web-performance
https://vegibit.com/laravel-cache-tutorial/
https://scotch.io/tutorials/caching-in-laravel-with-speed-comparisons
https://laravel-news.com/page-cache
https://stackoverflow.com/questions/59073842/laravel-how-to-cache-route-for-5-minutes
https://stackoverflow.com/questions/59073842/laravel-how-to-cache-route-for-5-minutes#comment104385474_59073842
https://docs.spatie.be/laravel-permission/v3/advanced-usage/cache/
https://voltagead.com/practical-object-caching-in-laravel/
https://freek.dev/1351-caching-the-entire-response-of-a-laravel-app
https://blog.albert-chen.com/the-integration-of-laravel-with-swoole-part-1/
Top comments (0)