Laravel 5.0 - Route Caching

Posted on September 20, 2014 | By Matt Stauffer


Warning: This post is over a year old. I don't always update old posts with new information, so some of this information may be out of date.

Performance optimization within our PHP code isn't always something at the forefront of our minds, but our backend code--especially our more complex operations--can impact our sites' request times to the tune of tens and maybe even hundreds of milliseconds. It may not sound like much, but a few hundred milliseconds can mean a huge difference in the perceived quickness of your applications.

Whether or not you were aware of it, the routing logic in Laravel 4 and earlier--especially as you have more and more routes in your application--were one such place for performance bottlenecks. A site with just a few hundred routes could, in the past, lose up to a half second just for the framework to register those routes. Fear no more, as Laravel 5 introduces route caching, optimizing the performance of your routes (except Closure routes, so it's time to move them all to controllers).

Using Route Caching

There's not a lot to using this feature, honestly. There's a new Artisan command, route:cache, which serializes the results of your routes.php file--it's performing the operation of parsing the routes once and then storing those result. Sort of like pre-compiling a Handlebars template, if you've ever done that before.

That's it! Now your routes are being parsed from the cached file, not your routes file. You can make all the changes you want to routes.php and the routing of your app won't change until you re-cache.

Pros and Cons

The pros are pretty clear: your site gets faster.

The cons, however, need to be noted: Once you cache the site's routes once, you'll now have to re-cache your routes every time you make any changes to routes.php, or the changes won't show up. This could cause confusion for new developers, or even for you if you just happen to forget you were using caching.

Thankfully, there are two things that can help you here. First, you can run artisan route:clear, and artisan will delete your route cache. Second, you can consider only caching on your production server. Maybe only run artisan route:cache as a post-deploy hook in Git, or just run it as a part of your Forge deploy process.

Konklu┼╝joni

The performance benefit of route caching might not be worth the potential confusion for you. If so, you can pretend this doesn't exist. But for groups with more managed deploy processes, the idea of something this simple trimming off a half second or more of load time on every page is huge.


Comments? I'm @stauffermatt on Twitter


Tags: laravel  •  5.0  •  laravel 5