<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Laravel 8 性能優(yōu)化自查清單

          共 3786字,需瀏覽 8分鐘

           ·

          2021-04-02 23:37

          a6f8b782fcdcb6c76894b1e332c4c139.webp

          Laravel 開(kāi)箱即用速度很快,但通過(guò)優(yōu)化配置和應(yīng)用程序代碼,你可以使其更快。本指南列出了從快速優(yōu)化到深度調(diào)優(yōu)的各種性能優(yōu)化技巧,這些技巧可以幫助你讓你的 Laravel 應(yīng)用成為客戶(hù)想要的輕巧、簡(jiǎn)約的程序服務(wù)。

          在?Enlightn?上有不少同學(xué)在幫助我們編寫(xiě)了本指南。如果你正在尋求 Laravel 的自動(dòng)化性能或安全工具,不妨可以訪(fǎng)問(wèn)這個(gè)網(wǎng)站看看。

          為什么要提高性能?

          毫無(wú)疑問(wèn),相比加載速度慢的應(yīng)用程序,我們更喜歡加載速度更快的應(yīng)用程序。

          根據(jù)谷歌的一項(xiàng)研究,加載時(shí)間超過(guò)3秒的網(wǎng)站,在移動(dòng)端會(huì)有 53% 的用戶(hù)流失(選擇離開(kāi))。而移動(dòng)網(wǎng)站的平均加載時(shí)間約為 15 秒。這就是性能的重要性!

          你的應(yīng)用每增加一秒的加載時(shí)間,你的客戶(hù)轉(zhuǎn)化率可能就會(huì)越低。謝天謝地,對(duì)于 Laravel 應(yīng)用程序來(lái)說(shuō),這并不是一個(gè)很難解決的問(wèn)題。

          1. 使用內(nèi)置性能能力快速獲勝

          Laravel 提供了一些內(nèi)置的性能提升能力,可以適用于任何應(yīng)用程序。

          最關(guān)鍵的性能提升是?路由緩存?。你是否知道每次啟動(dòng) Laravel 應(yīng)用程序時(shí),應(yīng)用程序都會(huì)確定中間件,解析別名,解析路由組并為每個(gè)路由標(biāo)識(shí)控制器操作和參數(shù)輸入?

          你可以使用 Artisan 命令?route:cache?來(lái)緩存所有必需的路由信息,從而繞過(guò)路由處理:

          php artisan route:cache

          這條命令可以給你帶來(lái) 5 倍的性能提升!它會(huì)對(duì)你的應(yīng)用程序性能產(chǎn)生重大影響。

          除了路由緩存,Laravel 還提供以下內(nèi)容:

          • 配置緩存?在每次應(yīng)用啟動(dòng)時(shí)跳過(guò)?.env?和?config?文件的解析。

          • 視圖緩存?預(yù)編譯你的 Blade 模板視圖。

          • 事件緩存?緩存應(yīng)用程序所有事件和監(jiān)聽(tīng)器清單。

          提示:你應(yīng)該確保將上述緩存命令添加到部署腳本中,以便每次部署時(shí)都重新緩存路由,配置,視圖和事件。否則,你對(duì)路由或配置文件所做的任何更改都不會(huì)在應(yīng)用程序中更新。

          2. 優(yōu)化 Composer

          Laravel 開(kāi)發(fā)人員時(shí)常會(huì)犯的一個(gè)錯(cuò)誤是在生產(chǎn)模式下安裝所有依賴(lài)項(xiàng)。一些開(kāi)發(fā)包(例如 Ignition)會(huì)在內(nèi)存中記錄你的查詢(xún)、日志和轉(zhuǎn)儲(chǔ),從而為你提供帶有上下文的友好錯(cuò)誤消息,簡(jiǎn)化調(diào)試過(guò)程。盡管這在開(kāi)發(fā)中很有用,但可能會(huì)減慢生產(chǎn)環(huán)境中應(yīng)用程序的速度。

          在你的部署腳本中,使用 Composer 安裝拓展包的同時(shí)請(qǐng)務(wù)必使用?-no-dev?選項(xiàng):

          composer install --prefer-dist --no-dev -o

          此外,請(qǐng)確保如上所述在生產(chǎn)環(huán)境中使用?-o?選項(xiàng)。這可以讓 Composer 可以通過(guò)生成「classmap」來(lái)優(yōu)化自動(dòng)加載器。

          如果你的應(yīng)用在運(yùn)行時(shí)沒(méi)有生成類(lèi),你可以選擇使用?--classmap-authoritative?選項(xiàng)而不是?-o?選項(xiàng)進(jìn)行進(jìn)一步優(yōu)化。請(qǐng)務(wù)必查看 Autoloader 的 Composer 文檔?優(yōu)化策略.

          3. 選擇正確的驅(qū)動(dòng)程序

          選擇正確的緩存、隊(duì)列和會(huì)話(huà)驅(qū)動(dòng)程序?qū)?huì)對(duì)應(yīng)用程序性能產(chǎn)生極大影響。

          對(duì)于生產(chǎn)環(huán)境中的緩存,我們推薦 Redis、Memcached 或 DynamoDB 等內(nèi)存緩存驅(qū)動(dòng)程序。你可以考慮將本地文件系統(tǒng)緩存用于單服務(wù)器設(shè)置,盡管這將比緩存到內(nèi)存的選項(xiàng)慢。

          對(duì)于隊(duì)列,我們推薦使用 Redis、SQS 或 Beanstalkd 驅(qū)動(dòng)程序。數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序不適用于生產(chǎn)環(huán)境,并且已知可能會(huì)存在死鎖問(wèn)題。

          對(duì)于 session,我們推薦數(shù)據(jù)庫(kù)、Redis、Memcached 或 DynamoDB 驅(qū)動(dòng)程序。Cookie 驅(qū)動(dòng)程序具有文件大小和安全限制,不建議用于生產(chǎn)環(huán)境。

          4. 將耗時(shí)的任務(wù)通過(guò)隊(duì)列處理

          在典型的 Web 請(qǐng)求過(guò)程中,可能會(huì)有一些特定任務(wù)需要很長(zhǎng)時(shí)間才能執(zhí)行完成。Laravel 擁有一流的?隊(duì)列系統(tǒng),這可以讓我們將耗時(shí)的任務(wù)轉(zhuǎn)移到隊(duì)列的任務(wù)中,從而讓你的應(yīng)用程序能夠以極快的速度響應(yīng)請(qǐng)求。

          一般情況下,這類(lèi)任務(wù)的常見(jiàn)示例包括解析和存儲(chǔ) CSV 文件、與第三方 API 交互、向用戶(hù)發(fā)送通知、存在較長(zhǎng)耗時(shí)的數(shù)據(jù)庫(kù)查詢(xún)和搜索索引更新。

          5. 在文本格式文件上設(shè)置壓縮頭

          壓縮頭會(huì)對(duì)應(yīng)用程序性能產(chǎn)生重大影響。確保你在 Web 服務(wù)器上為文本格式文件(如 CSS、JS、XML 或 JSON)啟用壓縮頭或 CDN。

          圖像格式已經(jīng)有壓縮算法的實(shí)現(xiàn)且大多數(shù)情況圖像格式文件已經(jīng)被壓縮過(guò),并且圖像并不是文本格式文件(SVG格式除外,這是XML文檔)。因此,圖像格式不需要壓縮。

          你可以在 Web 服務(wù)器或 CDN 上設(shè)置 gzip 或 brotli(較舊的瀏覽器可能不支持 brotli),以獲得較大的性能提升。

          通常情況下,壓縮可以將文件體積大小減少 80% 左右!

          6. 在靜態(tài)資源上設(shè)置緩存頭

          緩存可以提高應(yīng)用程序的性能,特別是對(duì)于靜態(tài)資源,如圖像、CSS 和 JS 文件。建議在 Web 服務(wù)器或CDN 級(jí)別啟用緩存控制頭(如果適用的話(huà))。如果你希望在 Larvel 應(yīng)用程序而不是 WebServer上設(shè)置這些控制頭,可以使用 Larvel 的?緩存控制中間件。

          Cache 消息頭字段可以確保瀏覽器不會(huì)在以后訪(fǎng)問(wèn)你的網(wǎng)站時(shí)重復(fù)請(qǐng)求靜態(tài)資源。這可以提高你的用戶(hù)體驗(yàn),因?yàn)槟愕木W(wǎng)站在隨后的訪(fǎng)問(wèn)時(shí)可以加載更快。

          確保你使用了緩存清理的功能,以便在更改 CSS 或 JS 代碼時(shí),瀏覽器不會(huì)繼續(xù)使用舊的緩存內(nèi)容。Laravel Mix 提供了開(kāi)箱即用的緩存清理?功能。

          7. 考慮使用 CDN 服務(wù)加速靜態(tài)資源

          內(nèi)容交付網(wǎng)絡(luò)(CDN)是一個(gè)基于地理分布式的服務(wù)器組,通過(guò)使用距離網(wǎng)站訪(fǎng)客更近的服務(wù)器來(lái)提供服務(wù)。可以讓訪(fǎng)問(wèn)用戶(hù)體驗(yàn)到更快的加載時(shí)間。

          除了更快的加載速度和更短的加載時(shí)間外,CDN 還具有其他優(yōu)點(diǎn),如減少 Web 服務(wù)器負(fù)載,DDOS 保護(hù)和靜態(tài)資源服務(wù)的分析等。

          一些流行的 CDN 包括 CloudFlare、AWS CloudFront 和 Azure CDN。大多數(shù) CDN 都有一定的免費(fèi)試用額度。請(qǐng)考慮使用 CDN 來(lái)提升靜態(tài)資源的加載性能。

          Laravel 在框架中提供了開(kāi)箱即用的 CDN 支持組件?Mix?和助手函數(shù)?asset。

          8. 最小化你的 JS 和 CSS 代碼

          最小化腳本將會(huì)從你的應(yīng)用程序中去除對(duì)執(zhí)行不必要的額外代碼(如代碼注釋、空格、將變量重命名為名稱(chēng)較短的變量名以及其他優(yōu)化)。這是一個(gè)在生產(chǎn)環(huán)境中減小 JS 和 CSS 文件大小常用且有效的手段。

          Laravel Mix 為你的生產(chǎn)腳本提供了開(kāi)箱即用的?最小化輸出?功能

          9. 合理使用緩存

          Laravel 內(nèi)置了?緩存?支持。緩存最適合用于讀取繁重的工作負(fù)載。這些工作負(fù)載通常涉及耗時(shí)的數(shù)據(jù)檢索或數(shù)據(jù)處理任務(wù)。

          緩存的一些常見(jiàn)場(chǎng)景案例可能包括:

          • 緩存靜態(tài)頁(yè)面:緩存靜態(tài)頁(yè)面是一件輕而易舉的事. Laravel 的官網(wǎng)使用?頁(yè)面緩存?的方式緩存每一個(gè)文檔頁(yè)面。

          • 片段或部分緩存:有時(shí)候,相比緩存整個(gè)頁(yè)面,緩存頁(yè)面片段可能更有用。例如,你可能希望緩存包含用戶(hù)名和用戶(hù)頭像的頁(yè)眉。你可以一次性緩存頁(yè)面頁(yè)眉片段,而不需要每次都從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。

          • 查詢(xún)緩存:如果你的應(yīng)用程序頻繁地查詢(xún)數(shù)據(jù)庫(kù)中很少更改的項(xiàng),則查詢(xún)緩存可能會(huì)很有用。例如,當(dāng)你經(jīng)營(yíng)一家電商網(wǎng)站,你可能希望緩存商城主頁(yè)上顯示的項(xiàng)目,而不是在每次訪(fǎng)問(wèn)商城時(shí)從數(shù)據(jù)庫(kù)中讀取這些項(xiàng)目。

          請(qǐng)記住,緩存對(duì)long tail(很少請(qǐng)求的項(xiàng)目)沒(méi)有用處。相反,對(duì)于任何頻繁進(jìn)行的數(shù)據(jù)檢索(與數(shù)據(jù)更新相比),應(yīng)謹(jǐn)慎使用它。

          還必須確保每次緩存內(nèi)容更改時(shí)都使緩存無(wú)效或刷新緩存。例如,如果您正在緩存配置文件頭,則在用戶(hù)更新其配置文件圖片后刷新緩存。

          10. 確定您的應(yīng)用程序的性能瓶頸

          如果您的某些頁(yè)面加載時(shí)間較長(zhǎng)或內(nèi)存使用率較高,則可能需要確定性能瓶頸。Laravel 生態(tài)系統(tǒng)中有許多工具可以幫助您做到這一點(diǎn),包括 Laravel Telescope、Laravel Debugbar 和 Clockwork 。

          一些常見(jiàn)的性能瓶頸包括:

          • N+1個(gè)查詢(xún):如果您的代碼為每個(gè)記錄執(zhí)行一個(gè)查詢(xún),將導(dǎo)致更多的網(wǎng)絡(luò)往返和更多的查詢(xún)。這可以在 Laravel 中使用?Equired loading.

          • Duplicate Queries]來(lái)解決:如果您的代碼針對(duì)同一請(qǐng)求多次執(zhí)行同一查詢(xún),則可能會(huì)減慢您的應(yīng)用程序的運(yùn)行速度。通常情況下,如果多個(gè)服務(wù)或類(lèi)需要相同的數(shù)據(jù)集,則可以通過(guò)將數(shù)據(jù)計(jì)算或檢索提取到單獨(dú)的類(lèi)來(lái)解決這些問(wèn)題。

          • 高內(nèi)存使用率:為了減少應(yīng)用程序的內(nèi)存使用量,可以考慮使用?Lazy collections?和?Query chunking?來(lái)減少模型水化。若要存儲(chǔ)文件,請(qǐng)簽出?Automatic streaming?以減少內(nèi)存使用。

          • 慢查詢(xún):如果您的查詢(xún)執(zhí)行時(shí)間過(guò)長(zhǎng),則應(yīng)考慮使用查詢(xún)緩存和/或使用EXPLAIN語(yǔ)句來(lái)優(yōu)化查詢(xún)執(zhí)行計(jì)劃。

          如果你無(wú)法使用上述調(diào)試工具確定應(yīng)用程序中的性能瓶頸,則可以考慮使用 XDebug 或 Blackfire 等分析工具。

          總結(jié)

          性能優(yōu)化是一個(gè)永恒的話(huà)題,但 Laravel 有幾個(gè)內(nèi)置組件,如 Mix、queues 和緩存,這使性能優(yōu)化看起來(lái)很簡(jiǎn)單!我們希望你在提高應(yīng)用程序性能方面學(xué)到一些新知識(shí)。


          瀏覽 69
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黑人大鸡巴 | 成人在线看mv | 欧美精品超级AAAAAA | 玖玖精品影视 | 国产精品无码久久久 |