Laravel 5.0 - Route Caching

Posted on September 20, 2014

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


(This is part of a series of posts on New Features in Laravel 5.0. )

  1. Sep 10, 2014 | laravel, 5.0, laravel 5
    In creating FormRequest, Taylor separated out both an interface (ValidatesWhenResolved) and a trait (ValidatesWhenResolvedTra...
  2. Sep 10, 2014 | laravel, 5.0, laravel 5
    Laravel 5.0 Laravel 5.0 is coming out in November, and there are a lot of features that have folks excited. The New Directory...
  3. Sep 12, 2014 | laravel, laravel 5, 5.0
    One of the big reasons Laravel 4.3 got moved to 5.0 is because the directory structure can seem like a big shift in thinking....
  4. Sep 20, 2014 | laravel, 5.0, laravel 5
    Performance optimization within our PHP code isn't always something at the forefront of our minds, but our backend code--espe...
  5. Sep 28, 2014 | laravel, laravel 5, 5.0
    In Laravel 5, you can now use the same Filesystem class which previously simplified interactions with the local filesystem, a...
  6. Sep 30, 2014 | laravel, 5.0, laravel 5
    Laravel 5.0 introduces the ability for the Container to resolve depencies injected into any methods that are resolved by the ...
  7. Oct 9, 2014 | laravel, 5.0, laravel 5
    Note: Route Annotations were eventually removed from core, and separated to a package maintained by the Laravel Community. T...
  8. Oct 10, 2014 | laravel, 5.0, laravel 5
    If you've been following along with my previous blog posts about Laravel 5.0, you may have noticed that route filters were fi...
  9. Oct 10, 2014 | laravel, 5.0, laravel 5
    Note: Event Annotations were eventually removed from core, and separated to a package maintained by the Laravel Community. T...
  10. Oct 16, 2014 | laravel, 5.0, laravel 5
    If you've followed my blog for a while, you've probably seen me struggle with Laravel's environment detection--especially reg...
  11. Nov 20, 2014 | laravel, 5.0, laravel 5
    Eric Barnes has a longer write up on this, so I'll just keep it short: Laravel 5.0 is introducing a pretty incredible cron-st...
  12. Jan 2, 2015 | laravel, 5.0, commands, laravel 5
    As you’ve probably read me mention on Twitter, I’ve paused on blogging new Laravel 5 features to try to give Taylor some ...
  13. Jan 16, 2015 | laravel, laravel 5
    It's very simple to get started in a new Laravel 5 app: composer create-project laravel/laravel my-project-name-here dev-deve...
  14. Jan 19, 2015 | laravel 5, laravel
    You might be missing the "prettier" Whoops error handler from Laravel 4. If so, here's how to bring it back. Updat...
  15. Jan 21, 2015 | laravel, events, 5.0, laravel 5
    If you haven't read it yet, go read the Laravel 5.0 - Commands & Handlers post. It'll give much-needed background for th...
  16. Jan 26, 2015 | laravel, laravel 5
    Sometimes it can seem like a lot of work to create an event, create its handler, and bind the two. Create a command, create i...
  17. Feb 1, 2015 | laravel, laravel 5
    When you wanted to customize your error pages—for example, showing a particular cat GIF when your users hit a 404—you’d...
  18. Feb 14, 2015 | laravel 5, laravel, eloquent
    I had completely forgotten to finish my Laravel 5.0 blog posts, but I saw a great quick introduction to attribute casting at ...

Subscribe

For quick links to fresh content, and more thoughts that don't make it to the blog