您好,登錄后才能下訂單哦!
這篇文章主要介紹了composer自動(dòng)加載器優(yōu)化的方法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
自動(dòng)加載器優(yōu)化
通常情況下,Composer 的自動(dòng)加載器運(yùn)行速度相對(duì)而言是比較快的。 但是,由于 PSR-4 和 PSR-0 的自動(dòng)加載規(guī)則是在最終解析一個(gè)類(lèi)之前需要去檢查文件系統(tǒng)。這會(huì)導(dǎo)致自動(dòng)加載的速度變得相當(dāng)緩慢,但在開(kāi)發(fā)環(huán)境中,這會(huì)是一種非常便捷的加載方式,因?yàn)楫?dāng)你新建了一個(gè)類(lèi)時(shí),加載器會(huì)立即發(fā)現(xiàn)并使用該類(lèi),而不需要你去重建自動(dòng)加載器的配置。
這種加載規(guī)則導(dǎo)致的問(wèn)題在生產(chǎn)環(huán)境中才真正體現(xiàn)出來(lái),在生產(chǎn)環(huán)境中,你可以在每次部署之前非常輕松的重建配置,而且在部署之間不會(huì)隨機(jī)出現(xiàn)新類(lèi),因此你不需要其一直檢查文件系統(tǒng),你通常都希望自動(dòng)加載能盡可能快速的完成。
出于以上原因,Composer 提供了一些自動(dòng)加載器的優(yōu)化策略。
注意:你不應(yīng)該在開(kāi)發(fā)環(huán)境下使用本文所述的任何一種優(yōu)化策略,因?yàn)檫@會(huì)導(dǎo)致你在添加或移除類(lèi)時(shí)出現(xiàn)各種問(wèn)題。事實(shí)上,在開(kāi)發(fā)環(huán)境中應(yīng)用這些設(shè)置所帶來(lái)的性能提升和其所帶來(lái)的問(wèn)題相比,是遠(yuǎn)遠(yuǎn)不值得的。
優(yōu)化級(jí)別 1:類(lèi)映射生成
怎么運(yùn)行它呢?
有幾個(gè)選項(xiàng)可以啟用此功能:
在 composer.json 的配置中設(shè)置 "optimize-autoloader": true
使用 -o / --optimize-autoloader 調(diào)用安裝或更新
使用 -o / --optimize 調(diào)用 dump-autoload
它有什么作用?
類(lèi)映射生成實(shí)質(zhì)上是將 PSR-4/PSR-0 規(guī)則轉(zhuǎn)換為類(lèi)映射規(guī)則。這使得一切都快很多,因?yàn)橐阎念?lèi)映射會(huì)立即返回路徑,而 Composer 可以保證類(lèi)在那里,因此不需要文件系統(tǒng)檢查。
在 PHP 5.6+ 中,類(lèi)映射也緩存在 opcache 中,這大大改善了初始化時(shí)間。如果確保啟用了 opcache ,那么類(lèi)映射應(yīng)該會(huì)立即加載,類(lèi)加載也會(huì)很快。
權(quán)衡
這種方法沒(méi)有真正的權(quán)衡。它應(yīng)該始終在生產(chǎn)中啟用。
唯一的問(wèn)題是它沒(méi)有跟蹤自動(dòng)加載 (即,當(dāng)它找不到給定的類(lèi)時(shí)),因此那些回退到 PSR-4 的規(guī)則仍然有可能導(dǎo)致文件系統(tǒng)檢查速度變慢。要解決此問(wèn)題,存在兩個(gè)二級(jí)優(yōu)化選項(xiàng),如果您對(duì)項(xiàng)目中不存在的類(lèi)執(zhí)行了大量的 class_exists 檢查, 那么可以決定啟用這兩個(gè)選項(xiàng)。
優(yōu)化級(jí)別 2/A :權(quán)威類(lèi)映射
怎么啟用它呢?
有幾個(gè)選項(xiàng)可以啟用此功能:
在 composer.json 的 config 鍵中設(shè)置 "classmap-authoritative": true
使用 -a / --classmap-authoritative 調(diào)用安裝或更新
使用 -a / --classmap-authoritative 調(diào)用 dump-autoload
它有什么作用呢?
啟用此選項(xiàng)會(huì)自動(dòng)啟用 1 級(jí)類(lèi)映射優(yōu)化。
這個(gè)選項(xiàng)很簡(jiǎn)單,它說(shuō)如果在類(lèi)圖中找不到某些東西,那么它就不存在,自動(dòng)加載器不應(yīng)該根據(jù) PSR-4 規(guī)則試圖查看文件系統(tǒng)。
權(quán)衡
此選項(xiàng)能使自動(dòng)裝填器始終快速返回。另一方面,它還意味著如果由于某種原因在運(yùn)行時(shí)生成類(lèi),則不允許自動(dòng)加載。如果您的項(xiàng)目或任何依賴(lài)項(xiàng)執(zhí)行此操作,那么您可能會(huì)在生產(chǎn)中遇到 “未找到類(lèi)” 的問(wèn)題。小心啟用它。
注意:這不能與級(jí)別 2/B 優(yōu)化結(jié)合使用。您必須選擇一個(gè),因?yàn)樗鼈円圆煌姆绞浇鉀Q相同的問(wèn)題。
優(yōu)化級(jí)別 2/B: APCu 緩存
怎么啟用它呢?
有個(gè)選項(xiàng)可以啟用此功能:
在 composer.json 的配置鍵中設(shè)置 "apcu-autoloader": true
使用 --apcu-autoloader 調(diào)用安裝或更新
使用 --apcu 調(diào)用 dump-autoload
它有什么作用?
此選項(xiàng)將 APCu 緩存添加為類(lèi)映射的備用。它不會(huì)自動(dòng)生成類(lèi)映射,因此如果您愿意,仍需手動(dòng)啟用 1 級(jí)優(yōu)化。
無(wú)論是否找到類(lèi),該事實(shí)總是緩存在 APCu 中,因此可以在下一個(gè)請(qǐng)求時(shí)快速返回。
權(quán)衡
此選項(xiàng)需要 APCu ,它可能對(duì)您有用也可能不適用。它還使用 APCu 內(nèi)存進(jìn)行自動(dòng)加載,但它是安全使用的,并且不會(huì)導(dǎo)致找不到類(lèi),如上面的權(quán)威類(lèi)映射優(yōu)化。
注意:這不能與級(jí)別 2/A 優(yōu)化結(jié)合使用。您必須選擇一個(gè),因?yàn)樗鼈円圆煌姆绞浇鉀Q相同的問(wèn)題。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“composer自動(dòng)加載器優(yōu)化的方法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。