>웹 프론트엔드 >JS 튜토리얼 >Laravel 프레임워크 성능 조정 방법

Laravel 프레임워크 성능 조정 방법

一个新手
一个新手원래의
2017-10-25 13:56:152095검색

이후 요약입니다. 튜닝 과정에서 많은 우여곡절을 겪은 끝에 마침내 예비 성능 테스트 계획을 완성하고 구현했으며, 실제 테스트 데이터를 통해 Laravel 개발 과정의 몇 가지 실무 기술을 요약했습니다.

Origin of 0x00

최근 한 동료가 Laravel로 작성한 애플리케이션의 응답이 약간 느리고 20개 이상의 동시 애플리케이션이 CPU를 가득 채운다고 보고했습니다. 느린 문제를 해결하기 위해 일부 인터페이스는 심지어 nodejs로 작성되었습니다.

그리고 나의 첫 번째 반응은 인기 있는 프레임워크가 어떻게 그렇게 나쁠 수 있는가?였습니다. 사용에 문제가 있는 것 같습니다. 이를 알아보기 위해 Laravel 애플리케이션 성능 튜닝 여정을 시작했습니다.

0x01 Tuning Tips

이 성능 테스트 계획에 사용된 최적화 팁은 주로 Laravel 프레임워크 자체와 그것이 제공하는 도구를 기반으로 합니다.

  1. 애플리케이션 디버그 끄기 app.debug=falseapp.debug=false

  2. 缓存配置信息 php artisan config:cache

  3. 缓存路由信息 php artisan router:cache

  4. 类映射加载优化 php artisan optimize

  5. 自动加载优化 composer dumpautoload

  6. 根据需要只加载必要的中间件

  7. 使用即时编译器(JIT),如:HHVM、OPcache

  8. 使用 PHP 7.x

除了以上优化技巧之外,还有很多编码上的实践可以提升 Laravel 应用性能,在本文中暂时不会做说明。(也可以关注我的后续文章)

1. 关闭应用 debug

打开应用根目录下的 .env 文件,把 debug 设置为 false。

APP_DEBUG=false

2. 缓存配置信息

php artisan config:cache

运行以上命令可以把 config 文件夹里所有配置信息合并到一个 bootstrap/cache/config.php 文件中,减少运行时载入文件的数量。

php artisan config:clear

运行以上命令可以清除配置信息的缓存,也就是删除 bootstrap/cache/config.php 文件

3. 缓存路由信息

php artisan route:cache

运行以上命令会生成文件 bootstrap/cache/routes.php。路由缓存可以有效的提高路由器的注册效率,在大型应用程序中效果越加明显。

php artisan route:clear

运行以上命令会清除路由缓存,也就是删除 bootstrap/cache/routes.php 文件。

4. 类映射加载优化

php artisan optimize --force

运行以上命令能够把常用加载的类合并到一个文件中,通过减少文件的加载来提高运行效率。这个命令会生成 bootstrap/cache/compiled.phpbootstrap/cache/services.json 两个文件。

通过修改 config/compile.php 文件可以添加要合并的类。

在生产环境中不需要指定 --force 参数文件也可以自动生成。

php artisan clear-compiled

运行以上命令会清除类映射加载优化,也就是删除 bootstrap/cache/compiled.phpbootstrap/cache/services.json 两个文件。

5. 自动加载优化

composer dumpautoload -o

Laravel 应用程序是使用 composer 来构建的。这个命令会把 PSR-0 和 PSR-4 转换为一个类映射表来提高类的加载速度。

注意:php artisan optimize --force 命令里已经做了这个操作。

6. 根据需要只加载必要的中间件

Laravel 应用程序内置了并开启了很多的中间件。每一个 Laravel 的请求都会加载相关的中间件、产生各种数据。在 app/Http/Kernel.php 中注释掉不需要的中间件(如 session 支持)可以极大的提升性能。

7. 使用即时编译器

HHVM 和 OPcache 都能轻轻松松的让你的应用程序在不用做任何修改的情况下,直接提高 50% 或者更高的性能。

8. 使用 PHP 7.x

只能说 PHP 7.x 比起之前的版本在性能上有了极大的提升。

嗯,限于你的真实企业环境,这个也许很长时间内改变不了,算我没说。

0x02 测试方案

我们使用简单的 Apache ab 命令仅对应用入口文件进行测试,并记录和分析数据。

  1. 仅对应用的入口文件 index.php 进行测试,访问 “/” 或者 “/index.php” 返回框架的欢迎页面。更全面的性能测试需要针对应用的更多接口进行测试。

  2. 使用 Apache ab 命令。ab -t 10 -c 10 {url}

  3. 캐시 구성 정보 php artisan config:cache

    🎜🎜캐시 라우팅 정보 php artisan router:cache🎜🎜🎜🎜클래스 맵 로딩 최적화php artisanoptim🎜🎜🎜🎜자동 로딩 최적화composer dumpautoload🎜🎜🎜🎜있는 것만 로드하세요 미들웨어🎜🎜🎜🎜는 HHVM, OPcache🎜🎜🎜🎜와 같은 JIT(Just-In-Time 컴파일러)를 사용합니다. PHP 7.x🎜🎜
🎜위의 최적화 기술 외에도 , 많은 코딩 방법이 있습니다. 이는 Laravel 애플리케이션 성능을 향상시킬 수 있지만 이 기사에서는 당분간 설명하지 않습니다. (제 후속 기사를 팔로우하실 수도 있습니다.) 🎜

1. 애플리케이션 디버그 닫기

🎜 애플리케이션 루트 디렉터리에서 .env 파일을 열고 디버그를 false로 설정하세요. 🎜rrreee

2. 캐시 구성 정보

rrreee🎜위 명령을 실행하면 config 폴더의 모든 구성 정보를 하나의 bootstrap/cache/config.php 파일로 병합하여 need to run 해당 시점에 로드된 파일 수입니다. 🎜rrreee🎜위 명령을 실행하여 구성 정보 캐시를 삭제합니다. 즉, bootstrap/cache/config.php 파일을 삭제합니다🎜

캐시 라우팅 정보

rrreee🎜. 위 명령을 실행하여 bootstrap/cache/routes.php 파일을 생성합니다. 경로 캐싱은 라우터의 등록 효율성을 효과적으로 향상시킬 수 있으며 그 효과는 대규모 애플리케이션에서 더욱 분명합니다. 🎜rrreee🎜위 명령을 실행하면 라우팅 캐시가 지워집니다. 이는 bootstrap/cache/routes.php 파일이 삭제된다는 의미입니다. 🎜

4. 클래스 매핑 로딩 최적화

rrreee🎜위 명령을 실행하면 일반적으로 로드되는 클래스를 하나의 파일로 병합하여 파일 로딩을 줄여 작업 효율성을 높일 수 있습니다. 이 명령은 bootstrap/cache/compiled.phpbootstrap/cache/services.json이라는 두 개의 파일을 생성합니다. 🎜🎜 config/compile.php 파일을 수정하여 병합할 클래스를 추가할 수 있습니다. 🎜🎜프로덕션 환경에서는 --force 매개변수 파일을 지정할 필요가 없으며 자동으로 생성될 수 있습니다. 🎜rrreee🎜위 명령을 실행하면 클래스 맵 로딩 최적화가 지워집니다. 즉, bootstrap/cache/compiled.phpbootstrap/cache/services.json두 파일이 삭제됩니다. >. 🎜

5. 자동 로딩 최적화

rrreee🎜Laravel 애플리케이션은 작곡가를 사용하여 구축되었습니다. 이 명령은 PSR-0과 PSR-4를 클래스 매핑 테이블로 변환하여 클래스 로딩 속도를 향상시킵니다. 🎜
🎜참고: 이 작업은 php artisanoptim-force 명령에서 이미 수행되었습니다. 🎜

6. 필요에 따라 필요한 미들웨어만 로드하세요.

🎜Laravel 애플리케이션에는 많은 미들웨어가 내장되어 활성화되어 있습니다. 모든 Laravel 요청은 관련 미들웨어를 로드하고 다양한 데이터를 생성합니다. app/Http/Kernel.php에서 불필요한 미들웨어(예: 세션 지원)를 주석 처리하면 성능이 크게 향상될 수 있습니다. 🎜

7. 적시 컴파일러 사용

🎜HHVM 및 OPcache는 수정 없이 애플리케이션 성능을 50% 이상 쉽게 향상시킬 수 있습니다. 🎜

8. PHP 7.x 사용

🎜PHP 7.x는 이전 버전에 비해 성능이 크게 향상되었다고 할 수 있습니다. 🎜
🎜글쎄, 실제 기업 환경에 국한되어 오랫동안 변경되지 않을 수도 있으므로 언급하지 않았습니다. 🎜
🎜0x02 테스트 계획🎜🎜간단한 Apache ab 명령을 사용하여 애플리케이션 항목 파일만 테스트하고 데이터를 기록하고 분석합니다. 🎜🎜🎜🎜애플리케이션의 항목 파일인 index.php만 테스트하세요. 프레임워크의 시작 페이지로 돌아가려면 "/" 또는 "/index.php"에 액세스하세요. 보다 포괄적인 성능 테스트를 위해서는 애플리케이션의 더 많은 인터페이스를 테스트해야 합니다. 🎜🎜🎜🎜Apache ab 명령을 사용하세요. ab -t 10 -c 10 {url}. 이 명령은 해당 URL에 대한 10개의 요청을 동시에 시작하고 10초 동안 지속된다는 의미입니다. 명령의 특정 매개변수 설정은 테스트할 서버 성능에 따라 선택해야 합니다. 🎜🎜🎜🎜기계 변동으로 인한 데이터 오류를 방지하기 위해 각 테스트 조건은 여러 ab 명령을 실행하고 명령 실행 결과를 기록하며, 초당 처리되는 요청 수와 요청 응답 시간에 중점을 두고 이상값을 분석 및 제거합니다. 🎜
  • 테스트 조건이 조정될 때마다 테스트 조건 수정으로 인한 접속 오류가 없는지 확인하기 위해 브라우저에서 웰컴 페이지에 접속해야 합니다. 페이지 액세스 오류가 발생하면 테스트 결과가 올바르지 않게 됩니다.

  • 서버 환경 설명

    특정 환경과 분리된 모든 테스트 데이터는 의미가 없으며 유사한 조건에서만 비교할 수 있습니다.

    1. 이 환경은 8G 메모리, 2.8GHz 프로세서 및 SSD 하드 드라이브를 갖춘 Mac에서 실행됩니다.

    2. 테스트 서버는 홈스테드를 사용하여 구축되었습니다. 가상 머신은 단일 코어 CPU와 2G 메모리로 구성됩니다.

    3. 서버 PHP 버전은 7.1입니다. 지정하지 않으면 OPcache가 켜집니다.

    4. 테스트된 Laravel 애플리케이션은 버전 5.2에서 작성되었습니다. appHttproutes.php에는 85개의 경로가 정의되어 있습니다. appHttproutes.php 中定义了 85 个路由。

    5. 测试过程中除了虚拟机、终端及固定的浏览器窗口外,没有会影响机器的程序运行。

    以上的数据,大家在自己进行测试时可以参考。

    0x03 测试过程及数据

    1. 未做任何优化

    1.1 操作

    • 按照以下检查项执行相应的操作。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

    基础检查项

    • .env 文件中 APP_DEBUG=true

    • 不存在 bootstrap/cache/config.php

    • 不存在 bootstrap/cache/routes.php

    • 不存在 bootstrap/cache/compiled.phpbootstrap/cache/services.json

    • app/Http/Kernel.php 中开启了大部分的中间件

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问

    1.2 数据记录

    Laravel 프레임워크 성능 조정 방법

    2. 关闭应用debug

    2.1 操作

    • 在步骤 1 基础上修改 .env 文件中 APP_DEBUG=false

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

    2.2 数据记录

    Laravel 프레임워크 성능 조정 방법

    2.3 对比结果

    与步骤 1 结果比较发现:关闭应用 debug 之后,每秒处理请求数从 26-34 上升到 33-35,请求响应时间从 大部分 300ms 以上下降到 290ms 左右,效果不太明显,但确实有一定的提升。

    注意:这部分与应用中的日志等使用情况有比较大的关联。

    3. 开启缓存配置信息

    3.1 操作

    • 在步骤 2 基础上,运行 php artisan config:cache,确认生成 bootstrap/cache/config.php

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

    3.2 数据记录

    Laravel 프레임워크 성능 조정 방법

    3.3 对比结果

    与步骤 2 结果比较发现:开启配置信息缓存之后,每秒处理请求数从 33-35 上升到 36-38,请求响应时间从 290ms 左右下降到 260ms 左右,效果不太明显,但确实有一定的提升。

    4. 开启缓存路由信息

    4.1 操作

    • 在步骤 3 基础上,运行 php artisan route:cache,确认生成 bootstrap/cache/routes.php

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

    4.2 数据记录

    Laravel 프레임워크 성능 조정 방법

    4.3 对比结果

    与步骤 3 结果比较发现:开启路由信息缓存之后,每秒处理请求数从 36-38 上升到 60 左右,请求响应时间从 260ms 下降到 160ms 左右,效果显著,从 TPS 看,提升了 70%。

    5. 删除不必要的中间件

    5.1 操作

    • 在步骤 4 基础上,注释掉不必要的中间件代码。

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

      🎜🎜테스트 과정에서 가상 머신, 터미널, 고정 브라우저 창 외에는 머신 작동에 영향을 줄 수 있는 프로그램이 없었습니다. 🎜🎜🎜🎜위 데이터는 자체 테스트 시 참고하실 수 있습니다. 🎜

      0x03 테스트 프로세스 및 데이터

      1. 최적화가 수행되지 않았습니다.

      1.1 작업

        🎜🎜 다음 확인 항목은 해당 작업을 수행합니다. 🎜🎜🎜🎜ab -t 10 -c 10 http://myurl.com/index.php🎜🎜
      🎜🎜기본 점검 항목🎜🎜
        APP_DEBUG=true🎜🎜🎜🎜가 🎜🎜.env 파일에 존재하지 않습니다.bootstrap/cache/config.php🎜🎜🎜🎜이 존재하지 않습니다. bootstrap/cache/routes.php🎜🎜🎜🎜가 존재하지 않습니다bootstrap/cache/compiled.phpbootstrap/cache/services.json 🎜🎜🎜🎜 대부분의 미들웨어는 app/Http/Kernel.php에서 활성화되어 있습니다.🎜🎜🎜🎜브라우저는 정상적인 액세스를 보장하기 위해 Laravel 애플리케이션 시작 페이지에 액세스합니다🎜🎜

      1.2 데이터 기록🎜Laravel 프레임워크 성능 조정 방법 🎜

      2. 애플리케이션 디버그 끄기

      2.1 작업

        🎜🎜.env 파일 기반 수정 1단계 APP_DEBUG=false. 🎜🎜🎜🎜브라우저로 Laravel 애플리케이션 시작 페이지를 방문하여 정상적인 액세스를 확인하세요. 🎜🎜🎜🎜 ab -t 10 -c 10 http://myurl.com/index.php를 실행하세요. 🎜🎜

      2.2 데이터 기록

      🎜Laravel 프레임워크 성능 조정 방법🎜

      2.3 결과 비교

      🎜1단계 결과와 비교하면 애플리케이션 디버그를 끈 후 처리된 요청 수가 초당 26-34에서 33-35로 증가하고 요청 응답 시간이 300ms 이상에서 약 290ms로 감소했습니다. 효과는 분명하지 않지만 실제로는 어느 정도 개선되었습니다. 🎜🎜
      🎜참고: 이 부분은 애플리케이션의 로그 사용과 밀접한 관련이 있습니다. 🎜

      3. 캐시 구성 정보 활성화

      3.1 작업

        🎜🎜2단계에 따라 를 실행합니다. php artisan config:cache, bootstrap/cache/config.php 생성을 확인하세요. 🎜🎜🎜🎜브라우저로 Laravel 애플리케이션 시작 페이지를 방문하여 정상적인 액세스를 확인하세요. 🎜🎜🎜🎜 ab -t 10 -c 10 http://myurl.com/index.php를 실행하세요. 🎜🎜

      3.2 데이터 기록

      🎜Laravel 프레임워크 성능 조정 방법🎜

      3.3 결과 비교

      🎜2단계 결과와 비교하면 구성 정보 캐시를 켠 후 숫자가 초당 처리되는 요청 수가 33-35에서 36-38로 증가하고 요청 응답 시간이 약 290ms에서 약 260ms로 감소했습니다. 효과는 분명하지 않지만 실제로는 어느 정도 개선되었습니다. 🎜🎜

      4. 캐시된 라우팅 정보 켜기

      4.1 작업

        🎜🎜3단계를 바탕으로 php artisan을 실행합니다. Route:cache, bootstrap/cache/routes.php 생성을 확인하세요. 🎜🎜🎜🎜브라우저로 Laravel 애플리케이션 시작 페이지를 방문하여 정상적인 액세스를 확인하세요. 🎜🎜🎜🎜 ab -t 10 -c 10 http://myurl.com/index.php를 실행하세요. 🎜🎜

      4.2 데이터 기록

      🎜Laravel 프레임워크 성능 조정 방법🎜

      4.3 결과 비교

      🎜3단계 결과와 비교하면 라우팅 정보 캐시를 켠 후 번호가 초당 처리되는 요청 수가 36~38개에서 약 60개로 증가하고, 요청 응답 시간이 260ms에서 약 160ms로 감소한 것은 TPS 측면에서 볼 때 그 효과가 상당합니다. 🎜🎜

      5. 불필요한 미들웨어 삭제

      5.1 작업

        🎜🎜4단계를 바탕으로 불필요한 미들웨어 코드를 주석 처리합니다. 🎜🎜🎜🎜브라우저로 Laravel 애플리케이션 시작 페이지를 방문하여 정상적인 액세스를 확인하세요. 🎜🎜🎜🎜 ab -t 10 -c 10 http://myurl.com/index.php를 실행하세요. 🎜

    Laravel 프레임워크 성능 조정 방법

    참고: 이 테스트에서는 모든 미들웨어를 주석 처리했습니다. 실제 상황에서는 꼭 필요한 미들웨어만 유지하도록 노력해야 합니다.

    5.2 데이터 기록

    Laravel 프레임워크 성능 조정 방법

    5.3 결과 비교

    4단계 결과와 비교하면 불필요한 미들웨어를 삭제한 후 초당 처리되는 요청 수가 약 60개에서 약 60개로 증가한 것으로 나타났습니다. 90, 요청 응답 시간은 160ms에서 약 110ms로 TPS의 관점에서 볼 때 효과가 매우 분명합니다.

    6. 클래스 맵 로딩 최적화 켜기

    6.1 작업

    • 5단계에 따라 php artisanoptim --force를 실행하고 bootstrap/cache/compiled가 phpbootstrap/cache/services.json이 생성되었습니다.

      php artisan optimize --force,确认生成 bootstrap/cache/compiled.phpbootstrap/cache/services.json

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

    6.2 数据记录

    Laravel 프레임워크 성능 조정 방법

    6.3 对比结果

    与步骤 5 结果比较发现:做了类映射加载优化之后,每秒处理请求数从 90 上升到 110,请求响应时间从 110ms 下降到 100ms 以下,效果还是比较明显的。

    7. 关闭 OPcache

    7.1 操作

    • 在步骤 6 基础上,关闭 PHP 的 OPcache,并重启服务器。通过 phpinfo() 的 Zend OPcache 确认 OPcache 已经关闭。

    • 浏览器访问 Laravel 应用程序欢迎页确保正常访问。

    • 运行 ab -t 10 -c 10 http://myurl.com/index.php

    7.2 数据记录

    Laravel 프레임워크 성능 조정 방법

    7.3 对比结果

    与步骤 6 结果比较发现:关闭 OPcache 之后,每秒处理请求数从 110 下降到 15,请求响应时间从 100ms 以下上升到 650ms 以上。开启与关闭 OPcache,数据上竟有几倍的差别。

    此后,我重新开启了 PHP 的 OPcache,数据恢复到步骤 6 水平。

    0x04 踩过的坑

    1. [LogicException] Unable to prepare route [/] for serialization. Uses Closure.

    在运行 php artisan route:cache 命令时报这个错误。

    原因:路由文件中处理“/”时使用了闭包的方式。要运行该命令,路由的具体实现不能使用闭包方式。

    修改方案:将路由的具体实现放到控制器中来实现。

    2. [Exception] Serialization of 'Closure' is not allowed.

    在运行 php artisan route:cache 命令时报这个错误。

    原因:路由文件中定义了重复的路由。

    修改方案:排查路由文件中的重复路由并修改。尤其要注意 resource 方法很可能导致与其方法重复。

    3. [RuntimeException] Invalid filename provided.

    在运行 php artisan optimize --force 命名时报这个错误。

    原因:在加载需要编译的类时没有找到相应的文件。5.2 版本的 vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php 中定义了要编译的文件路径,但不知道为什么 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/ActiveRecords.php 没有找到,所以报了这个错误。

    修改方案:暂时注释掉了以上 config.php 中的 ../ActiveRecords.php 一行。

    4. InvalidArgumentException in FileViewFinder.php line 137: View [welcome] not found.

    在运行 php artisan config:cache 之后,浏览器上访问 Laravel 应用程序欢迎页报这个错误。

    原因:Laravel 应用程序服务器是通过 Homestead 在虚拟机上搭建的。而这个命令我是在虚拟机之外运行的,导致生成的 config.php 中的路径是本机路径,而不是虚拟机上的路径。所以无法找到视图文件。

    修改方案:ssh 到虚拟机内部运行该命令。

    0x05 实践技巧

    坑也踩了,测试也做过了。这里针对这次经历做个实践技巧的简单总结。

    1. 有效的 Laravel 应用程序优化技巧

    1. 关闭应用debug app.debug=false

    2. 缓存配置信息 php artisan config:cache

    3. 缓存路由信息 php artisan router:cache

      🎜브라우저로 Laravel 애플리케이션 시작 페이지를 방문하여 정상적인 액세스를 확인하세요. 🎜🎜🎜🎜 ab -t 10 -c 10 http://myurl.com/index.php를 실행하세요. 🎜🎜🎜🎜6.2 데이터 기록🎜🎜🎜Laravel 프레임워크 성능 조정 방법🎜🎜🎜6.3 비교 결과 🎜 🎜5단계 결과와 비교하면 클래스 매핑 로딩 최적화 후 초당 처리되는 요청 수가 90에서 110으로 증가하고 요청 응답 시간이 110ms에서 100ms 미만으로 감소한 것으로 나타났습니다. 🎜효과가 상당히 큽니다. 분명한. 🎜🎜🎜7. OPcache 닫기🎜🎜7.1 Operation🎜🎜🎜🎜 6단계에 따라 PHP의 OPcache를 닫고 서버를 다시 시작합니다. phpinfo()의 Zend OPcache를 통해 OPcache가 닫혔는지 확인하세요. 🎜🎜🎜🎜브라우저로 Laravel 애플리케이션 시작 페이지를 방문하여 정상적인 액세스를 확인하세요. 🎜🎜🎜🎜 ab -t 10 -c 10 http://myurl.com/index.php를 실행하세요. 🎜🎜🎜🎜7.2 데이터 기록🎜🎜🎜Laravel 프레임워크 성능 조정 방법🎜🎜🎜7.3 비교 결과 🎜 🎜6단계 결과와 비교하면, OPcache를 끈 후 초당 처리되는 요청 수가 110에서 15로 감소하고, 요청 응답 시간이 100ms 미만에서 650ms 이상으로 증가한 것으로 나타났습니다. 🎜OPcache를 열고 닫으면 데이터 차이가 몇 배나 납니다. 🎜🎜🎜🎜이후 PHP의 OPcache를 다시 열었더니 6단계 수준으로 데이터가 복원되었습니다. 🎜🎜

      0x04 함정

      🎜1. [LogicException] 직렬화를 위해 경로 [/]를 준비할 수 없습니다. Closure를 사용합니다.🎜🎜 php artisan Route:cache 명령 실행 이 오류를 보고하세요. . 🎜🎜원인: 라우팅 파일에서 "/" 처리 시 클로저가 사용되었습니다. 이 명령을 실행하려면 라우팅 구현에서 클로저를 사용하면 안 됩니다. 🎜🎜수정 계획: 컨트롤러에 특정 라우팅 구현을 넣습니다. 🎜🎜2. [예외] 'Closure' 직렬화는 허용되지 않습니다. 🎜🎜이 오류는 php artisan Route:cache 명령을 실행할 때 보고됩니다. 🎜🎜원인: 라우팅 파일에 중복된 경로가 정의되어 있습니다. 🎜🎜수정 계획: 라우팅 파일에서 중복된 경로를 확인하고 수정합니다. 특히, resource 메서드는 해당 메서드의 중복을 일으킬 가능성이 있다는 점에 유의하세요. 🎜🎜3. [RuntimeException] 잘못된 파일 이름이 제공되었습니다.🎜🎜이 오류는 php artisanoptim --force 이름 지정을 실행할 때 발생합니다. 🎜🎜원인: 컴파일해야 하는 클래스를 로드할 때 해당 파일을 찾을 수 없습니다. 컴파일할 파일 경로는 5.2 버전의 vendor/laravel/framework/src/Illuminate/Foundation/Console/Optimize/config.php에 정의되어 있는데 왜 인지 모르겠습니다. /vendor/laravel/framework/src/Illuminate/Database/Eloquent/ActiveRecords.php를 찾을 수 없어 이 오류가 보고되었습니다. 🎜🎜수정 계획: 위 config.php의 ../ActiveRecords.php 줄을 임시로 주석 처리하세요. 🎜🎜4. FileViewFinder.php 라인 137의 InvalidArgumentException: View [welcome]을 찾을 수 없습니다. 🎜🎜php artisan config:cache를 실행한 후 브라우저에서 Laravel 애플리케이션 시작 페이지에 액세스할 때 이 오류가 보고됩니다. . 🎜🎜이유: Laravel 애플리케이션 서버는 Homestead를 사용하는 가상 머신에 구축되었습니다. 가상 머신 외부에서 이 명령을 실행했는데, 이로 인해 생성된 config.php의 경로가 가상 머신의 경로가 아닌 로컬 경로가 되었습니다. 따라서 뷰 파일을 찾을 수 없습니다. 🎜🎜수정 계획: SSH를 통해 가상 머신에 접속하고 이 명령을 실행하세요. 🎜

      0x05 실기

      🎜 함정을 극복하고 테스트를 완료했습니다. 이 경험을 바탕으로 실제적인 기술을 간략하게 요약하면 다음과 같습니다. 🎜🎜1. 효과적인 Laravel 애플리케이션 최적화 팁🎜
        🎜🎜애플리케이션 디버그 끄기 app.debug=false🎜🎜🎜🎜캐시 구성 정보 php artisan config:cache🎜🎜🎜🎜캐시 라우팅 정보php artisan router:cache🎜
    4. 클래스 맵 로딩 최적화 php artisanoptim(자동 로딩 최적화 composer dumpautoload 포함) php artisan optimize(包含自动加载优化 composer dumpautoload

    5. 根据需要只加载必要的中间件

    6. 使用即时编译器(JIT),如:HHVM、OPcache

    2. 编写代码时注意事项

    1. 路由的具体实现放到控制器中。

    2. 不定义重复的路由,尤其注意 resouce

    3. 필요에 따라 필요한 미들웨어만 로드

    인스턴트 컴파일러 사용( JIT), 예: HHVM, OPcache

    2. 코드 작성 시 주의 사항

    라우팅의 구체적인 구현은 컨트롤러에 있습니다.
    1. 중복된 경로를 정의하지 마세요. resource 메서드에 특히 주의하세요.
    2. 각 미들웨어의 역할을 명확하게 하고 불필요한 미들웨어 참조를 삭제합니다.
    3. 0x06 다음 단계
    4. 위의 튜닝 팁과 코딩 고려 사항은 주로 프레임워크 자체에 대한 것이며 여기서는 논의하지 않습니다.

      다음 최적화는 특정 코딩 방법에 중점을 둡니다.
    5. Memcached를 사용하여 세션 config/session.php 저장

    전문 캐시 드라이버 사용

    데이터베이스 요청 최적화


    데이터 세트 쓰기 및 캐싱 logic🎜🎜🎜🎜Elixir와 병합된 프런트엔드 리소스🎜🎜🎜🎜0x07 마지막에 작성🎜🎜인터넷에서 프레임워크 성능 비교에 대한 글과 논쟁을 많이 봤고, 간단한 데이터 포스팅도 많이 봤습니다. . 이것만으로는 실제 상황을 엿볼 수 없기 때문에 이러한 관행을 실시하고 그 과정에서 상세한 기록을 남겼습니다. 이는 독자들에게 연습 중에 참조, 비교 및 ​​반성을 제공합니다. 이 관행에 대해 질문이 있는 독자도 질문과 의견을 제출할 수 있습니다. 🎜🎜🎜🎜🎜🎜🎜

    위 내용은 Laravel 프레임워크 성능 조정 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.