起由:今天幫朋友解決了下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
, 或者在部署腳本中來執行它.
寫在最后
如果覺得路由緩存帶來的性能提升還不如造成的潛在混亂和麻煩多, 你可以當這個特性不存在. 但是對於有更好的部署流程管理的團隊來說, 能夠這么簡單就能減少每個頁面半秒鍾以上的加載時間, 這價值就太大了.