下面由composer指令使用教學欄位來介紹關於composer自動載入器優化,希望對需要的朋友有幫助!
自動載入器最佳化
通常情況下,Composer 的自動載入器運作速度相對而言是比較快的。但是,由於 PSR-4 和 PSR-0 的自動載入規則是在最終解析一個類別之前需要去檢查檔案系統。這會導致自動載入的速度變得相當緩慢,但在開發環境中,這會是一種非常便捷的載入方式,因為當你新建了一個類別時,載入器會立即發現並使用該類別,而不需要你去重建自動載入器的配置。
這種載入規則所導致的問題在生產環境中才真正體現出來,在生產環境中,你可以在每次部署之前非常輕鬆的重建配置,而且在部署之間不會隨機出現新類,因此你不需要其一直檢查文件系統,你通常都希望自動加載能盡可能快速的完成。
基於以上原因,Composer 提供了一些自動載入器的最佳化策略。
注意:你不應該在開發環境下使用本文所述的任何一種最佳化策略,因為這會導致你在新增或移除類別時出現各種問題。事實上,在開發環境中應用這些設定所帶來的效能提升和其所帶來的問題相比,是遠遠不值得的。
優化等級 1:類別映射產生
怎麼運行它呢?
有幾個選項可以啟用此功能:
在composer.json 的配置中設定"optimize-autoloader": true
使用-o / - -optimize-autoloader 呼叫安裝或更新
使用-o / --optimize 呼叫dump-autoload
它有什麼作用?
類別映射產生實質上是將 PSR-4/PSR-0 規則轉換為類別映射規則。這使得一切都快很多,因為已知的類別映射會立即返迴路徑,而 Composer 可以保證類別在那裡,因此不需要檔案系統檢查。
在 PHP 5.6 中,類別映射也會快取在 opcache 中,這大大改善了初始化時間。如果確保啟用了 opcache ,那麼類別映射應該會立即加載,類別加載也會很快。
權衡
這種方法沒有真正的權衡。它應該始終在生產中啟用。
唯一的問題是它沒有追蹤自動載入(即,當它找不到給定的類別時),因此那些回退到PSR-4 的規則仍然有可能導致檔案系統檢查速度變慢。要解決此問題,有兩個二級最佳化選項,如果您對專案中不存在的類別執行了大量的 class_exists 檢查, 那麼可以決定啟用這兩個選項。
優化等級 2/A :權威類別映射
#怎麼啟用它?
有幾個選項可以啟用此功能:
在composer.json 的config 鍵中設定"classmap-authoritative": true
##使用-a / --classmap-authoritative 呼叫安裝或更新使用-a / --classmap-authoritative 呼叫 dump-autoload它有什麼作用呢?
啟用此選項會自動啟用 1 級類別對映最佳化。 這個選項很簡單,它說如果在類別圖中找不到某些東西,那麼它就不存在,自動載入器不應該根據 PSR-4 規則試圖查看檔案系統。權衡
此選項能讓自動裝置裝置始終快速返回。另一方面,它還意味著如果由於某種原因在運行時生成類,則不允許自動加載。如果您的專案或任何依賴項執行此操作,那麼您可能會在生產中遇到 “未找到類別” 的問題。小心啟用它。 注意:這不能與等級 2/B 最佳化結合使用。您必須選擇一個,因為它們以不同的方式解決相同的問題。優化等級 2/B: APCu 快取
#怎麼啟用它?
有選項可以啟用此功能:在composer.json 的設定鍵中設定"apcu-autoloader": true 使用--apcu- autoloader 呼叫安裝或更新使用 --apcu 呼叫dump-autoload它有什麼作用?
此選項將 APCu 快取新增為類別映射的備用。它不會自動產生類別映射,因此如果您願意,仍需手動啟用 1 級最佳化。 無論是否找到類,該事實總是緩存在 APCu 中,因此可以在下一個請求時快速返回。權衡
此選項需要 APCu ,它可能對您有用也可能不適用。它還使用 APCu 記憶體進行自動加載,但它是安全使用的,並且不會導致找不到類,如上面的權威類映射優化。 注意:這不能與等級 2/A 最佳化結合使用。您必須選擇一個,因為它們以不同的方式解決相同的問題。以上是composer自動載入器優化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

在處理PHP源碼分析的過程中,我遇到了一個棘手的問題:如何將PHP代碼轉換為更易於分析和處理的格式。我嘗試了多種方法,但效果都不理想。最後,通過使用Composer安裝theseer/tokenizer庫,我成功地將PHP源碼轉換為XML格式,極大地簡化了後續的分析工作。

Composer是一個PHP依賴管理工具,通過composer.json文件管理項目依賴。 1.安裝Composer:運行幾條命令並移動到全局路徑。 2.配置Composer:在項目根目錄創建composer.json文件並運行composerinstall。 3.依賴管理:通過composer.json指定庫及其版本,使用語義化版本號控制。 4.使用Autoloading:通過autoload字段定義類的自動加載規則,簡化開發。 5.包管理:支持私有庫管理,通過repositories字段定義私有庫地址

在開發PHP項目時,我們常常需要對代碼的執行時間進行監控,以優化性能。在我最近的一個項目中,我遇到了一個問題:需要在不同代碼段之間進行精確的計時,但手動實現計時器不僅繁瑣,而且容易出錯。經過一番探索,我發現了phpunit/php-timer這個庫,它通過Composer輕鬆集成,極大地簡化了我的工作。

在開發過程中,版本管理一直是個棘手的問題,尤其是在處理軟件包依賴時。最近,我在項目中遇到了一個關於版本控制的問題:需要精確地管理和比較不同軟件包的版本信息,確保項目能夠正確地依賴和升級。我嘗試了幾種方法,但效果不盡如人意。最終,我找到了phar-io/version這個庫,它完美地解決了我的問題。

在開發項目時,我常常需要使用一些新版本PHP的特性,但有時由於服務器環境的限制,不得不使用較低版本的PHP。這導致我無法使用某些新功能,比如PHP8.3中引入的json_validate和Override等。為了解決這個問題,我找到了Symfony的polyfill-php83庫,它讓我可以在低版本PHP中使用這些新功能。

在進行PHP項目開發時,統計代碼行數是一項常見的需求,尤其是在評估項目規模或進行代碼審查時。然而,手動統計不僅耗時且容易出錯。最近,我在項目中遇到了這個需求,嘗試了多種方法後,最終通過Composer安裝sebastian/lines-of-code庫,輕鬆解決了這一問題。

在開發PHP項目時,經常會遇到一些函數或方法執行時間過長,導致程序超時的問題。我曾嘗試了多種解決方案,但效果不盡如人意,直到我發現了phpunit/php-invoker庫。這個庫通過設置超時時間來調用可執行函數,徹底解決了我的難題。

在開發一個文件處理系統時,我遇到了一個棘手的問題:如何準確地檢測文件的MIME類型。最初,我嘗試使用PHP的內置函數mime_content_type()和finfo類,但發現這些方法在處理某些特殊文件時不夠穩定,導致系統誤判文件類型,影響了用戶體驗。經過一番探索,我找到了league/mime-type-detection這個庫,它為我的項目帶來了完美的解決方案。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版