首页 > 代码库 > laravel 路由修改不起作用解决方案

laravel 路由修改不起作用解决方案

起由:今天帮朋友解决了下bug,bug就是它使用laravel时候,怎样修改路由文件,都没有发生变化,但是故意在routes.php中增加语法错误时又具有错误,因此想到了可能是这个项目使用的laravel的路由缓存,而且其路由文件中就有很多很多的路由,因此更加断定项目使用了路由缓存。

解决方案:每次在修改路由文件的时候,在项目中打开命令行,执行php artisan route:cache进行重新缓存,这样修改的路由文件才可以起作用

laravel路由缓存的优点:

  当路由定义特别多的时候,每次进行注册都非常耗时,为了达到更好的用户体验,因此需要减少这部分代码的执行时间,而路由缓存可以更好的解决此问题

laravel路由缓存的缺点:

  就像此次的bug一样,有的人可能会很难排查到这个问题,若是不考虑缓存,此问题非常之诡异。

  开启路由缓存,每次更新路由文件的时候都要再生成一次缓存

  缺点解决方案:

    当项目上线的时候,再开启此功能

 

参考文章:http://www.tuicool.com/articles/jUZjMj               由衷的感谢此作者分享

 

附文章:

  

本文译自 Matt Stauffer 的 系列文章 .

在 PHP 代码中进行性能优化并非总是我们优先考虑的问题. 但是我们对后端代码的性能优化--特别是在一些很复杂的操作上--可以对网站的请求时间产生几十甚至几百毫秒的影响. 看上去不算很多, 但是 几百毫秒的差异对于你的应用的用户感知速度来说可能意味着巨大的差异 (链接可能需要扶墙访问).

你可能没有注意到, 在 Laravel 4 以及更老版本中, 路由逻辑是性能上的一个瓶颈--特别是对于有很多路由定义的应用而言. 一个只有几百条路由定义的 Laravel 站点, 框架光注册路由就需要半秒多的时间. 不过以后不用担心这个问题了, 因为 Laravel 5 引入了 路由缓存(route caching) , 可以大大优化路由的性能(闭包方式定义的路由不能缓存, 所以该把所有的闭包路由定义都移到控制器中了).

使用路由缓存

老实说, 使用路由缓存很简单. 有一个新的 Artisan 命令 route:cache 可以把 routes.php 文件中的所有路由定义序列化 -- 会对所有的路由进行一次解析然后把解析结果缓存起来. 如果你曾经用过 Handlebars 模板的预编译的话, Laravel 5 的路由缓存机制跟它有点类似.

这样就已经搞定了. 执行完这个命令以后, 所有的路由都是从缓存文件而不是路由文件进行读取. 之后你可以对 routes.php 的随意进行修改, 但应用的路由不会发生变化, 一直到再次执行 route:cache 重新缓存.

优点和缺点

优点很明显: 网站的速度会更快.

但缺点也不得不提: 只要缓存过一次网站的路由定义, 以后每次对 routes.php 文件进行修改都需要重新执行缓存操作, 否则修改不会生效. 这可能会造成部分开发者的疑惑, 有可能你可能怎么修改 routes.php 都没用, 偏偏一时没想到是路由缓存造成的.

幸亏有两个方法可以解决这个问题. 第一种方法: 可以执行 artisan route:clear , 这样 artisan 会删除路由缓存. 第二种方法: 可以考虑只在正式环境使用路由缓存. 然后在 Git 的 post-deploy 钩子中执行 artisan route:cache , 或者在部署脚本中来执行它.

写在最后

如果觉得路由缓存带来的性能提升还不如造成的潜在混乱和麻烦多, 你可以当这个特性不存在. 但是对于有更好的部署流程管理的团队来说, 能够这么简单就能减少每个页面半秒钟以上的加载时间, 这价值就太大了.

laravel 路由修改不起作用解决方案