摘要:確定的代碼位于的中這樣一看,其實就是將文件刪除,而這個是會自動生成的一個數組文件,這里指定了每個和的位置和命名空間的全路徑等,在啟動項目的時候,可以直接讀取使用。所以這個命令可以拆為兩步層面優化加載速度刪除很清晰。
原文:https://www.codecasts.com/blo...
在部署 Laravel 項目的時候,我們經常會使用到一個提升性能的命令:
php artisan optimize
本文來看看這個命令執行背后的源碼:
首先我們可以使用編輯器搜 OptimizeCommand,應該就可以找到該命令源碼的所在:
IlluminateFoundationConsoleOptimizeCommand,我們關注其中的 fire() 方法:
public function fire() { $this->info("Generating optimized class loader"); if ($this->option("psr")) { $this->composer->dumpAutoloads(); } else { $this->composer->dumpOptimized(); } $this->call("clear-compiled"); }
fire() 方法,默認情況下,會執行$this->composer->dumpOptimized(),而這行代碼觸發的其實就是composer dump-autoload --optimize,源代碼可以在IlluminateSupportComposer 的 dumpOptimized() 找到:
public function dumpOptimized() { $this->dumpAutoloads("--optimize"); }
最后,optimize 命令還執行了call("clear-compiled"),其實就是觸發php artisan clear-compiled,而很巧的是,我們也是可以直接使用編輯器搜ClearCompiledCommand 來找到源碼,位于 IlluminateFoundationConsoleClearCompiledCommand 中,這里的 fire() 方法其實關鍵的一步就是刪除了一下 cache 下的文件,我們來看:
public function fire() { $servicesPath = $this->laravel->getCachedServicesPath(); if (file_exists($servicesPath)) { @unlink($servicesPath); } $this->info("The compiled services file has been removed."); }
通過確定 $servicesPath 的位置,再使用 @unlink($servicesPath); 刪除。
確定 $servicesPath 的代碼 $this->laravel->getCachedServicesPath() 位于 IlluminateFoundationApplication 的 getCachedServicesPath 中:
public function getCachedServicesPath() { return $this->bootstrapPath()."/cache/services.php"; }
這樣一看,其實就是將 bootstrap/cache/services.php 文件刪除,而這個 services.php 是 Laravel 會自動生成的一個數組文件,這里指定了每個 Providers 和 Facades 的位置和命名空間的全路徑等,在啟動 Laravel 項目的時候,可以直接讀取使用。
所以這個命令可以拆為兩步:
1.composer dump-autoload --optimize // composer 層面優化加載速度 2.php artisan clear-compiled // 刪除 bootstrap/cache/services.php
很清晰。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23120.html
摘要:原文來自在學習的時候,可能很多人接觸的第一個的命令就是,這樣我們就可以跑起第一個的應用。本文來嘗試解讀一下這個命令行的源碼。 原文來自:https://www.codecasts.com/blo... 在學習 Laravel 的時候,可能很多人接觸的第一個 artisan 的命令就是:php artisan serve,這樣我們就可以跑起第一個 Laravel 的應用。本文來嘗試解讀一...
摘要:然而,本文的討論重點,還是背后的源碼,是怎么做到這一步的。從哪開始看源碼位于你還是可以使用編輯器搜,就可以看到源碼了。第三步序列化所有路由注冊映射關系,還是在的方法中上面的方法位于中的中。所以到這里,的源碼解讀就完成了。 學 Laravel 和 Vuejs 你真應該來 codecasts.com ! Laravel ?route:cache 可以直接緩存路由文件,這樣其實可以在一定程度...
摘要:因實際項目需求,近日在開發包的時候,發現設置屬性設置為時,會導致在方法中注冊的無效。研究源碼在中注冊無效,但是在其他中注冊有效,說明是其他問題。所以切記如果準備采用延遲加載時,嚴禁進行注冊等系列操作。嚴禁在延遲加載的注冊和。 因實際項目需求,近日在開發 laravel-database-logger 包的時候,發現設置 ServiceProvider defer 屬性設置為 true ...
摘要:添加路由在方法中,通過下面幾行代碼添加路由注意這個參數,就是將這個文件的內容附加在原來路由文件的后面,并不會將原來的路由清零。 學 Laravel 和 Vuejs,你真應該來 codecasts.com ,有免費高質量視頻! 在 Laravel 5.2 的時候,官方給我們提供了 make:auth 命令,這個命令使得我們在執行一條命令的情況下實現用戶注冊和登錄,忘記密碼,找回密碼的過程...
摘要:使用即時編譯器和都能輕輕松松的讓你的應用程序在不用做任何修改的情況下,直接提高或者更高的性能,之前做個一個實驗,具體請見使用提升程序性能。 本文經授權轉自 PHPHub 社區 說明 性能一直是 Laravel 框架為人詬病的一個點,所以調優 Laravel 程序算是一個必學的技能。 接下來分享一些開發的最佳實踐,還有調優技巧,大家有別的建議也歡迎留言討論。 這里是簡單的列表: 配置信...
閱讀 2591·2021-09-26 10:17
閱讀 3221·2021-09-22 15:16
閱讀 2131·2021-09-03 10:43
閱讀 3258·2019-08-30 11:23
閱讀 3658·2019-08-29 13:23
閱讀 1301·2019-08-29 11:31
閱讀 3686·2019-08-26 13:52
閱讀 1394·2019-08-26 12:22