>  기사  >  PHP 프레임워크  >  Laravel8에서 성능을 최적화하는 방법은 무엇입니까? 최적화 팁 공유

Laravel8에서 성능을 최적화하는 방법은 무엇입니까? 최적화 팁 공유

青灯夜游
青灯夜游앞으로
2022-10-08 18:23:431895검색

Laravel8에서 성능을 최적화하는 방법은 무엇입니까? 최적화 팁 공유

이 가이드에는 빠른 최적화부터 심층적인 조정까지 고성능 Laravel 애플리케이션을 구축하는 데 도움이 될 수 있는 다양한 성능 최적화 팁이 나열되어 있습니다.

이 가이드 작성에 도움을 준 Enlightn에는 많은 학생들이 있습니다. Laravel 자동화 성능이나 보안 도구를 찾고 계시다면 이 웹사이트를 방문해보세요.

성능을 향상시키는 이유는 무엇입니까?

사용자가 로딩이 느린 앱보다 빠른 앱을 선호한다는 것은 의심의 여지가 없습니다.

Google의 연구에 따르면 웹사이트를 로드하는 데 3초 이상 걸리면 모바일 장치 사용자의 53%가 웹사이트를 잃게 됩니다(떠나기를 선택합니다). 그리고 모바일 웹사이트의 평균 로딩 시간은 약 15초입니다. 이래서 성능이 중요해!

앱을 로드하는 데 1초가 더 걸릴수록 고객 전환율은 낮아집니다. 다행스럽게도 Laravel 애플리케이션의 경우 이는 해결하기 어려운 문제가 아닙니다.

1. 내장된 성능 기능을 사용하여 빠르게 승리하세요

Laravel에는 간단한 구성으로 사용할 수 있는 몇 가지 성능 개선 기능이 내장되어 있습니다.

가장 중요한 성능 개선은 경로 캐시입니다. Laravel 애플리케이션이 시작될 때마다 미들웨어가 결정되고, 별칭이 결정되고, 경로 그룹이 결정되고, 경로 컨트롤러 작업이 지정되고, 요청 매개변수가 처리된다는 것을 알고 계셨습니까?

Artisan 명령 route:cache를 사용하면 필요한 모든 라우팅 정보를 캐시하여 라우팅 처리를 건너뛸 수 있습니다. route:cache 来缓存所有必需的路由信息,从而跳过路由处理:

php artisan route:cache

这条命令可以给你带来 5 倍的性能提升!是最简单也是最有效的优化。

除了路由缓存,Laravel 还提供以下内容:

  • 配置缓存 在每次应用启动时跳过 .envconfig 文件的解析。
  • 视图缓存 预编译你的 Blade 模板视图。
  • 事件缓存 缓存应用程序所有事件和监听器清单。

提示:你应该确保将上述缓存命令添加到部署脚本中,以便每次部署时都重新缓存。否则,路由或配置文件的任何更改都不会在应用中体现。

2. 优化 Composer

Laravel 开发者常犯的一个错误是在生产模式下安装所有依赖项。一些开发包(例如 Ignition)会在内存中记录查询、日志和转储,从而提供带有上下文的友好错误消息,简化调试过程。尽管这在开发中很有用,但会减慢生产环境中应用程序的速度。

在部署脚本中,使用 Composer 安装拓展包的同时请务必使用 -no-dev 选项:

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

此外,请确保如上所述在生产环境中使用 -o 选项。这可以让 Composer 可以通过生成「classmap」来优化自动加载器。

如果你的应用在运行时没有生成类,你可以选择使用 --classmap-authoritative 选项而不是 -orrreee이 명령을 사용하면 성능이 5배 향상됩니다! 가장 간단하고 효과적인 최적화입니다.

경로 캐싱 외에도 Laravel은 다음을 제공합니다:

팁: 배포할 때마다 다시 캐시되도록 위의 캐시 명령을 배포 스크립트에 추가해야 합니다. 그렇지 않으면 라우팅 또는 구성 파일에 대한 변경 사항이 앱에 반영되지 않습니다.

2. Optimize Composer

Laravel 개발자가 저지르는 일반적인 실수는 프로덕션 모드에서 모든 종속 항목을 설치하는 것입니다. Ignition과 같은 일부 개발 패키지는 쿼리, 로그 및 메모리 덤프를 기록하여 컨텍스트와 함께 친숙한 오류 메시지를 제공하고 디버깅을 단순화합니다. 이는 개발에는 유용하지만 프로덕션에서는 애플리케이션 속도를 저하시킬 수 있습니다.

배포 스크립트에서 Composer를 사용하여 확장 패키지를 설치할 때 반드시 -no-dev 옵션을 사용해야 합니다. rrreee또한 -o도 꼭 사용하세요. 위에서 언급한 대로 프로덕션 환경에서 옵션을 사용합니다. 이를 통해 Composer는 "클래스 맵"을 생성하여 오토로더를 최적화할 수 있습니다. 애플리케이션이 런타임에 클래스를 생성하지 않는 경우 추가 최적화를 위해 -o 옵션 대신 --classmap-authoritative 옵션을 사용하도록 선택할 수 있습니다. Autoloader의 Composer 문서

Optimization Strategies

를 확인하세요.

🎜🎜3. 올바른 드라이버 선택🎜🎜🎜올바른 캐시, 대기열 및 세션 드라이버를 선택하면 애플리케이션 성능에 큰 영향을 미칩니다. 🎜🎜프로덕션 환경에서의 캐싱에는 Redis, Memcached 또는 DynamoDB와 같은 메모리 캐시 드라이버가 권장됩니다. 단일 서버 설정을 위해 로컬 파일 시스템 캐싱 사용을 고려할 수 있지만 이는 메모리로 캐시 옵션보다 속도가 느립니다. 🎜🎜큐의 경우 Redis, SQS 또는 Beanstalkd 드라이버를 사용하는 것이 좋습니다. 데이터베이스 큐 드라이버는 프로덕션 환경에 적합하지 않으며 교착 상태 문제가 있는 것으로 알려져 있습니다. 🎜🎜세션의 경우 데이터베이스, Redis, Memcached 또는 DynamoDB 드라이버를 권장합니다. 쿠키 드라이버에는 파일 크기와 보안 제한이 있으므로 프로덕션 환경에는 권장되지 않습니다. 🎜🎜🎜🎜🎜4. 대기열을 통해 시간이 많이 걸리는 작업을 처리합니다🎜🎜🎜일반적인 웹 요청 중에 완료하는 데 시간이 오래 걸리는 특정 작업이 있을 수 있습니다. Laravel은 최고의 🎜큐 시스템🎜을 갖추고 있어 시간이 많이 걸리는 작업을 대기 중인 작업으로 이동시켜 애플리케이션이 요청에 매우 빠르게 응답할 수 있도록 해줍니다. 🎜

일반적으로 이러한 작업의 일반적인 예로는 CSV 파일 구문 분석 및 저장, 타사 API와의 상호 작용, 사용자에게 알림 보내기, 길고 시간이 많이 걸리는 데이터베이스 쿼리, 검색 색인 업데이트 등이 있습니다.

5. 텍스트 파일에 대한 HTTP 압축 헤더 설정

압축 헤더는 애플리케이션 성능에 상당한 영향을 미칠 수 있습니다. CSS, JS, XML 또는 JSON과 같은 텍스트 형식 파일에 대해 웹 서버에서 압축 또는 CDN을 활성화했는지 확인하십시오.

이미지 형식에는 이미 압축 알고리즘이 구현되어 있으며 대부분의 경우 이미지 형식 파일이 압축되었으며 이미지는 텍스트 형식 파일이 아닙니다(XML 문서인 SVG 형식 제외). 따라서 이미지 형식에는 압축이 필요하지 않습니다.

웹 서버 또는 CDN에 gzip 또는 brotli(이전 브라우저는 brotli를 지원하지 않을 수 있음)를 설정하여 성능을 크게 향상시킬 수 있습니다.

일반적으로 압축을 하면 파일 크기를 약 80% 정도 줄일 수 있습니다!

6. 정적 리소스에 HTTP 캐시 헤더 설정

캐싱은 특히 이미지, CSS, JS 파일과 같은 정적 리소스의 경우 애플리케이션 성능을 향상시킬 수 있습니다. 해당하는 경우 웹 서버 또는 CDN 수준에서 캐시 제어 헤더를 활성화하는 것이 좋습니다. WebServer 대신 Larvel 애플리케이션에서 이러한 제어 헤더를 설정하려면 Larvel의 Cache Control Middleware를 사용할 수 있습니다.

캐시 헤더 필드는 웹 사이트를 여러 번 방문할 때 브라우저가 정적 리소스를 반복적으로 요청하지 않도록 합니다. 이를 통해 후속 방문 시 웹사이트가 더 빠르게 로드되므로 사용자 경험이 향상됩니다.

Laravel Mix는 CSS 또는 JS 코드가 변경될 때 브라우저가 오래된 캐시 콘텐츠를 계속 사용하지 않도록 즉시 사용 가능한 캐시 정리 기능을 제공합니다.

7. CDN 서비스를 사용하여 정적 리소스 가속화

콘텐츠 전송 네트워크(CDN)는 웹 사이트 방문자에게 더 가까운 서버를 사용하여 서비스를 제공하는 지리적으로 분산된 서버 그룹입니다. 이를 통해 사용자는 더 빠른 로딩 시간을 경험할 수 있습니다.

더 빠른 로딩 속도와 더 짧은 로딩 시간 외에도 CDN은 웹 서버 부하 감소, DDOS 보호, 정적 리소스 서비스 분석 등과 같은 다른 이점도 있습니다.

인기 있는 CDN으로는 CloudFlare, AWS CloudFront 및 Azure CDN이 있습니다. 대부분의 CDN에는 특정 무료 평가판 제한이 있습니다. 정적 리소스의 로딩 성능을 향상하려면 CDN 사용을 고려해 보세요.

Laravel은 프레임워크에서 즉시 사용 가능한 CDN 지원 구성 요소인 Mix 및 도우미 기능 asset을 제공합니다.

8. JS 및 CSS 코드 최소화

스크립트를 최소화하면 애플리케이션에서 실행에 필요하지 않은 추가 코드(예: 코드 주석, 공백, 단축된 변수 이름 및 기타 최적화)가 제거됩니다. 이는 프로덕션 환경에서 JS 및 CSS 파일의 크기를 줄이는 일반적이고 효과적인 방법입니다.

Laravel Mix는 프로덕션 스크립트에 즉시 사용 가능한 출력 최소화 기능을 제공합니다

9. 캐시를 현명하게 사용하세요

Laravel에는 캐싱 지원이 내장되어 있습니다. 캐싱은 읽기 작업이 많은 워크로드에 가장 적합합니다. 이러한 워크로드에는 시간이 많이 걸리는 데이터 검색 또는 데이터 처리 작업이 포함되는 경우가 많습니다.

캐싱에 대한 몇 가지 일반적인 시나리오는 다음과 같습니다:

  • 정적 페이지 캐싱: Laravel의 공식 웹사이트는 페이지 캐시를 사용하여 각 문서 페이지를 캐시합니다.
  • 조각 또는 부분 캐싱: 때로는 전체 페이지를 캐싱하는 것보다 페이지의 일부를 캐싱하는 것이 더 유용할 수 있습니다. 예를 들어 사용자 이름과 사용자 아바타가 포함된 페이지 헤더를 캐시할 수 있습니다. 매번 데이터베이스에서 데이터를 가져올 필요 없이 페이지 헤더 조각을 한 번 캐시할 수 있습니다.
  • 쿼리 캐시: 쿼리 캐시는 애플리케이션이 거의 변경되지 않는 항목에 대해 데이터베이스를 자주 쿼리하는 경우 유용할 수 있습니다. 예를 들어, 전자상거래 웹사이트를 운영하는 경우 쇼핑몰을 방문할 때마다 데이터베이스에서 이러한 품목 카테고리를 읽는 대신 쇼핑몰 홈페이지에 표시된 품목 카테고리를 캐시할 수 있습니다.

캐싱은 long tail(거의 요청되지 않는 항목)에는 쓸모가 없다는 점을 기억하세요. 반대로 데이터 업데이트와 비교하여 빈번한 데이터 검색에는 주의해서 사용해야 합니다.

또한 캐시된 콘텐츠가 변경될 때마다 캐시를 ​​무효화하거나 플러시해야 합니다. 예를 들어 프로필 헤더를 캐싱하는 경우 사용자가 프로필 사진을 업데이트한 후 캐시를 새로 고칩니다.

10. 애플리케이션의 성능 병목 현상 식별

일부 페이지를 로드하는 데 시간이 오래 걸리거나 메모리 사용량이 많은 경우 성능 병목 현상을 식별해야 할 수도 있습니다. Laravel 생태계에는 Laravel Telescope, Laravel Debugbar 및 Clockwork를 포함하여 이를 수행하는 데 도움이 되는 많은 도구가 있습니다.

몇 가지 일반적인 성능 병목 현상은 다음과 같습니다.

  • N+1 쿼리: 코드가 각 레코드에 대해 하나의 쿼리를 수행하는 경우 더 많은 네트워크 왕복 및 쿼리가 발생합니다. 이는 Data Preloading을 사용하여 Laravel에서 작동합니다.
  • Duplicate Requests: 코드가 동일한 요청을 처리하는 동안 동일한 쿼리를 여러 번 실행하는 경우 애플리케이션 속도가 느려질 수 있습니다. 일반적으로 여러 서비스나 클래스에 동일한 데이터 세트가 필요한 경우 데이터 계산 또는 검색을 별도의 클래스로 추출하여 이러한 문제를 해결할 수 있습니다.
  • 높은 메모리 사용량: 애플리케이션의 메모리 사용량을 줄이려면 Lazy collectionsQuery Chunking을 사용하여 한 번에 처리되는 데이터 양을 줄이는 것이 좋습니다. 파일을 저장하려면 자동 스트리밍을 사용하여 메모리 사용량을 줄이세요.
  • 느린 쿼리: 쿼리 실행 시간이 너무 오래 걸리는 경우 쿼리 캐시 사용을 고려하거나 EXPLAIN 문을 사용하여 쿼리 실행 계획을 최적화해야 합니다.

위의 디버깅 도구를 사용하여 애플리케이션의 성능 병목 현상을 식별할 수 없는 경우 XDebug 또는 Blackfire와 같은 분석 도구를 사용하는 것이 좋습니다.

온라인 체크리스트

또한 참조용 전체 온라인 체크리스트가 있습니다. 41. 과정 요약 | "LX3 Laravel 성능 최적화 소개".

요약

성능 최적화는 영원한 주제이지만 Laravel에는 믹스, 큐, 캐시와 같은 여러 내장 구성 요소가 있어 성능 최적화가 쉬워 보입니다! 애플리케이션 성능 향상에 관해 새로운 내용을 배우셨기를 바랍니다.

원본주소 : https://laravel-news.com/performance-checklist

번역주소 : https://learnku.com/laravel/t/55702

[관련 추천 : laravel 영상 튜토리얼]

위 내용은 Laravel8에서 성능을 최적화하는 방법은 무엇입니까? 최적화 팁 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제