Laravel đã trở thành một framework phổ biến để phát triển các ứng dụng tập trung vào kinh doanh và nền tảng thương mại điện tử . Mức độ phổ biến của nó chủ yếu xuất phát từ hiệu suất được tối ưu hóa cho phép các nhà phát triển tinh chỉnh hiệu suất ứng dụng Laravel của họ.
Laravel đã phát triển nhanh chóng và nằm trong số các khung PHP hàng đầu năm 2023 nhờ khả năng thực thi được tinh chỉnh nhất quán. Đây là khung phát triển PHP toàn diện để xây dựng mọi thứ từ các ứng dụng web đơn giản đến các API phức tạp.
Bài viết này tập trung rõ ràng vào việc cải thiện hiệu suất cửa hàng Laravel của bạn bằng cách làm theo các mẹo tối ưu hóa tốt nhất. Để thể hiện những ý tưởng được thảo luận trong bài viết này, tôi sẽ sử dụng Hệ thống quản lý nhân viên trong Laravel.
Tại sao doanh nghiệp nên tập trung vào việc tối ưu hóa hiệu suất của Laravel?
Laravel thường được sử dụng để tạo các ứng dụng thông tin kinh doanh có vai trò quan trọng đối với sự thành công của công ty. Những ứng dụng này hỗ trợ việc ra quyết định quản lý và cần phải nhanh chóng và hiệu quả. Đó là lý do tại sao các doanh nghiệp cần tập trung vào việc tối ưu hóa ứng dụng Laravel của mình để có hiệu suất tốt hơn.
Các doanh nghiệp thường sử dụng Laravel để xây dựng hệ thống thông tin của họ và nâng cao hiệu suất. Tuy nhiên, điều cần thiết là phải tối ưu hóa ứng dụng Laravel để đảm bảo thực hiện và triển khai dự án suôn sẻ, đặc biệt đối với các hệ thống thông tin quản lý thúc đẩy các lựa chọn kinh doanh quan trọng.
Ngay cả khi bạn đã tạo ra một ứng dụng Laravel hoàn hảo thì vẫn luôn có chỗ để cải thiện. Nâng cao hiệu suất Laravel của bạn bao gồm một số lợi ích, bao gồm:
- Thúc đẩy tăng trưởng kinh doanh : Khi ứng dụng Laravel của bạn hoạt động tốt hơn, nó sẽ trở nên hiệu quả hơn, tăng cơ hội tiếp cận đối tượng rộng hơn và thúc đẩy tăng trưởng kinh doanh.
- Môi trường phát triển hiệu quả : Ứng dụng Laravel được tối ưu hóa sẽ hợp lý hóa các tác vụ mã hóa, cho phép nhà phát triển tiết kiệm thời gian, hoàn thành nhiệm vụ nhanh hơn và phân bổ ít tài nguyên hơn.
- Xử lý lưu lượng truy cập được cải thiện : Việc sử dụng hệ thống hàng đợi Laravel giúp ứng dụng của bạn quản lý các yêu cầu ngày càng tăng và xử lý lưu lượng truy cập tăng đột biến hiệu quả hơn khi trang web của bạn mở rộng.
Phiên bản được đề xuất để sử dụng
Đối với hướng dẫn này, tôi giả sử bạn đã cài đặt ứng dụng Laravel trên máy chủ web. Thiết lập của tôi là
- Laravel 9.0
- PHP 8.0
- MariaDB
Lợi ích của việc tối ưu hóa hiệu suất Laravel
Tối ưu hóa hiệu suất của Laravel cải thiện trải nghiệm người dùng, giảm tải máy chủ và giảm chi phí. Bằng cách tối ưu hóa các truy vấn, sử dụng bộ nhớ đệm và giảm thiểu các tác vụ tiêu tốn nhiều tài nguyên, Laravel tăng tốc độ phân phối nội dung, giảm thời gian tải trang.
Tối ưu hóa ứng dụng Laravel giúp tăng hiệu quả của máy chủ để xử lý nhiều lưu lượng truy cập hơn mà không cần nâng cấp tốn kém. Các ứng dụng được tối ưu hóa tốt sẽ mở rộng quy mô một cách trơn tru, duy trì khả năng phản hồi và trải nghiệm người dùng khi chúng phát triển.
Ngoài ra, các ứng dụng được tối ưu hóa sẽ đơn giản hơn để bảo trì và khắc phục sự cố bằng cách giải quyết trước các tắc nghẽn và vấn đề về hiệu suất.
Mẹo để cải thiện hiệu suất của Laravel
Config Caching
Laravel cung cấp lệnh Artisan Cache Config giúp tăng hiệu suất. Đây là cách bạn có thể sử dụng lệnh:
php artisan config:cache
Khi bạn lưu cấu hình vào bộ đệm, mọi thay đổi bạn thực hiện sẽ không có hiệu lực. Nếu bạn muốn làm mới cấu hình, hãy chạy lại lệnh trên. Sử dụng lệnh sau để xóa bộ đệm cấu hình:
php artisan config:clear
Bạn không nên thực thi lệnh config cache trong quá trình phát triển cục bộ vì cài đặt cấu hình có thể yêu cầu thay đổi thường xuyên trong suốt quá trình phát triển ứng dụng của bạn.
Bạn có thể sử dụng OPcache để tối ưu hóa ứng dụng hơn nữa, lưu trữ mã PHP vào bộ nhớ đệm, do đó bạn không cần phải biên dịch lại nó.
Routes Caching
Routes caching là một tính năng tối ưu hóa thiết yếu, đặc biệt đối với các ứng dụng có routes và cấu hình. Nó là một mảng đơn giản và giúp tăng tốc hiệu suất của Laravel do tải mảng nhanh hơn. Thực hiện lệnh sau để định tuyến bộ nhớ đệm:
php artisan route:cache
Hãy nhớ chạy lệnh mỗi khi tập tin cấu hình hoặc routes được thay đổi. Nếu không, Laravel sẽ tải các thay đổi cũ từ bộ đệm. Xóa bộ đệm bằng cách sử dụng lệnh sau:
php artisan route:clear
Xóa dịch vụ không sử dụng
Mục tiêu chính của Laravel là giúp các nhà phát triển dễ dàng hơn trong quá trình phát triển. Khi bạn khởi chạy Laravel, nó sẽ tự động tải nhiều nhà cung cấp dịch vụ được liệt kê trong tệp config/app.php để giúp bạn bắt đầu với dự án của mình.
Bạn thường không cần các dịch vụ như View Service hoặc Session Service. Ngoài ra, nhiều nhà phát triển không tuân theo cài đặt khung mặc định. Vì vậy bạn nên vô hiệu hóa các dịch vụ không cần thiết để tối ưu hóa hiệu suất của Laravel.
Tối ưu hóa sơ đồ lớp – Classmap Optimization
Laravel gọi nhiều tệp để bao gồm các yêu cầu, do đó, ngay cả một ứng dụng Laravel cấp trung cũng sẽ có nhiều tệp.
Một thủ thuật đơn giản là khai báo tất cả các file đi kèm để bao gồm các yêu cầu và kết hợp chúng trong một file duy nhất. Do đó, một tệp duy nhất sẽ được gọi và tải cho tất cả các yêu cầu bao gồm. Đối với điều này, sử dụng lệnh sau:
php artisan optimize --force
Tối ưu hóa trình soạn thảo Optimize Composer
Laravel sử dụng một công cụ riêng gọi là Composer để giám sát các phần phụ thuộc khác nhau. Sau khi cài đặt Composer, nó sẽ tải các phần phụ thuộc của nhà phát triển vào khung của bạn theo mặc định.
Những phụ thuộc này giúp phát triển trang web. Nhưng khi trang web của bạn đã hoạt động hoàn toàn, chúng không bắt buộc phải có và sẽ chỉ làm chậm trang web của bạn.
composer install --prefer-dist --no-dev -o
Dòng lệnh trên cho phép Composer tạo một thư mục riêng để tối ưu hóa trình tải tự động. Nó yêu cầu truy xuất và đóng gói bản phân phối chính thức mà không phụ thuộc vào nhà phát triển.
Giới hạn thư viện
Điểm hay của Laravel là số lượng thư viện khổng lồ mà bạn có thể đưa vào một ứng dụng. Tuy nhiên, nó đi kèm với mức độ cản trở cao mà ứng dụng gặp phải, cuối cùng làm chậm trải nghiệm tổng thể.
Đây là lý do tại sao việc xem xét tất cả dữ liệu của thư viện được gọi lại trong mã lại quan trọng. Nếu bạn có thể làm việc mà không cần thư viện, hãy xóa nó khỏi config/app.php để tăng tốc ứng dụng Laravel của bạn. Composer.json là một nơi cần thiết khác để xem xét.
Trình biên dịch JIT
Dịch mã PHP sang mã byte và sau đó thực thi nó là một quá trình tốn nhiều tài nguyên. Đây là lý do tại sao cần có một trung gian, chẳng hạn như Zend Engine, để thực thi các chương trình con C. Bạn phải lặp lại quy trình mỗi khi ứng dụng được thực thi.
Lý tưởng nhất là quá trình này chỉ nên được thực hiện một lần để tiết kiệm thời gian và đó chính xác là lúc trình biên dịch Just-in-Time (JIT) tham gia. Đối với các ứng dụng Laravel, trình biên dịch JIT được đề xuất là HHVM của Facebook .
Chọn Trình điều khiển phiên và bộ đệm
Để điều chỉnh hiệu suất Laravel tối ưu, cách tốt nhất là lưu trữ các phần bộ đệm và phiên trong RAM. Bộ nhớ đệm phụ trợ, như Memcached, là một trong những trình điều khiển phiên và bộ đệm nhanh nhất cho hiệu suất của Laravel 9.
Khóa trình điều khiển để thay đổi trình điều khiển phiên thường nằm trong app/config/session.php và khóa để thay đổi trình điều khiển bộ nhớ đệm nằm trong app/config/cache.php.
Kết quả truy vấn bộ đệm
Lưu vào bộ nhớ đệm các kết quả truy vấn được thực hiện thường xuyên là một cách tuyệt vời để cải thiện hiệu suất của Laravel 9. Đối với điều này, tôi khuyên bạn nên sử dụng chức năng ghi nhớ như sau:
$posts = Cache::remember('index.posts', 30, function()
{
return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();
});
Sử dụng Scaling theo Chiều Ngang
Hãy cân nhắc sử dụng tỷ lệ theo chiều ngang nếu API của bạn bắt đầu nhận được lưu lượng truy cập cao. Chiến lược này liên quan đến việc phân bổ khối lượng công việc trên nhiều máy chủ, cho phép ứng dụng của bạn xử lý nhiều kết nối và yêu cầu đồng thời hơn.
Trong ngữ cảnh của Laravel, khi lưu lượng truy cập tăng lên, bạn có thể triển khai các phiên bản máy chủ bổ sung để chia sẻ tải. Điều này giúp máy chủ không bị quá tải, đảm bảo phản hồi nhanh chóng và nhất quán.
Chia tỷ lệ theo chiều ngang cũng cung cấp khả năng dự phòng và khả năng chịu lỗi. Ngay cả khi một máy chủ gặp sự cố, hệ thống vẫn tiếp tục hoạt động, cải thiện độ tin cậy chung của ứng dụng. Bằng cách kết hợp mở rộng quy mô theo chiều ngang vào tối ưu hóa hiệu suất của Laravel, các tổ chức có thể đảm bảo trải nghiệm người dùng liền mạch và không bị gián đoạn.
Sử dụng “Eager Loading” cho dữ liệu
Laravel cung cấp Eloquent, một ORM tuyệt vời để xử lý cơ sở dữ liệu. Nó tạo ra các mô hình trừu tượng hóa các bảng cơ sở dữ liệu từ các nhà phát triển.
Bằng cách sử dụng các cấu trúc đơn giản, nhà phát triển có thể sử dụng Eloquent để xử lý tất cả các hoạt động CRUD trong PHP . Khi Eloquent sử dụng tính năng Eager Loading, nó sẽ truy xuất tất cả các mô hình đối tượng được liên kết để phản hồi truy vấn ban đầu, thêm vào phản hồi của ứng dụng.
Hãy so sánh lazy loading và eager loading. Truy vấn lazy loading sẽ trông như thế này:
$books = App\Book::all();
foreach ($books as $book) {
echo $book->author->name;
}
Ngược lại, truy vấn eager loading sẽ trông như sau:
$books = App\Book::with('author')->get();
foreach ($books as $book) {
echo $book->author->name;
}
Biên dịch trước tài nguyên
Các nhà phát triển thường phân phối mã thành các tệp riêng biệt để điều chỉnh ứng dụng Laravel. Mặc dù điều này giúp mã sạch và dễ quản lý nhưng vẫn cần nhiều hơn nữa để góp phần sản xuất hiệu quả. Để giúp các nhà phát triển trong bối cảnh này, Laravel cung cấp một lệnh đơn giản:
php artisan optimize
php artisan config:cache
php artisan route:cache
Sử dụng Cloudflare CDN
Tải các tệp nội dung tĩnh từ máy chủ CDN (trái ngược với tải chúng trực tiếp từ máy chủ lưu trữ tệp) sẽ cải thiện hiệu suất ứng dụng Laravel.
Khi khách hàng truy cập một trang web, một số thông tin sẽ được cung cấp từ khu vực Cloudflare CDN gần nhất , điều này mang lại tốc độ xếp trang nhanh chóng và mang lại hiệu quả đáng kinh ngạc cho khách hàng.
Cloudflare CDN là CDN dựa trên lợi ích, có nghĩa là bạn phải mô tả các tài nguyên tĩnh (JS, CSS, HTML, hình ảnh, bản ghi, hoạt động, v.v.) trên một ứng dụng cụ thể.
Assets Bundling
Laravel Mix được mặc định đi kèm với tất cả các ứng dụng của Laravel. Sử dụng các bộ tiền xử lý CSS và JavaScript phổ biến, nó cung cấp API hiệu quả để xác định bản dựng Webpack cho các ứng dụng PHP của bạn.
Tôi sẽ sử dụng Laravel Mix để biên dịch nội dung ứng dụng, bao gồm tập lệnh, kiểu, v.v. Sử dụng Laravel Mix, chúng ta có thể ghép nhiều bảng định kiểu vào một tệp một cách hiệu quả.
mix.styles([
'public/css/vendor/normalize.css',
'public/css/styles.css'
], 'public/css/all.css');
Nó sẽ tạo một tệp CSS có tên all.css chứa các kiểu từ normalize.css và styles.css. Bằng cách này, chúng ta có thể sử dụng all.css trong HTML một cách dễ dàng thay vì bao gồm cả normalize.css và styles.css riêng lẻ.
Làm như vậy sẽ giảm số lượng yêu cầu HTTP để truy xuất các tệp này một cách riêng lẻ. Bởi vì bây giờ nó chỉ yêu cầu một yêu cầu thay vì hai để truy xuất một tệp. Và kết quả là chúng tôi nhận thấy tốc độ ứng dụng của chúng tôi tăng lên một chút.
Assets minifying
Biên dịch tất cả nội dung ở một nơi duy nhất có thể tạo ra một tệp lớn. Do đó, cách làm này sẽ không cho phép ứng dụng của chúng tôi được hưởng lợi từ quá trình biên dịch được đề xuất. Do đó, chúng tôi có thể giảm thiểu Assets của mình bằng cách sử dụng Laravel Mix để giải quyết vấn đề này.
npm run production
Lệnh trên sẽ chạy tất cả các tác vụ Mix và đảm bảo nội dung của chúng tôi sẵn sàng sản xuất. Sau khi được thu nhỏ, nội dung sẽ có kích thước nhỏ hơn và do đó sẽ được truy xuất nhanh hơn, tăng tốc hiệu suất ứng dụng của chúng tôi.
Chạy phiên bản PHP mới nhất
Phiên bản mới nhất của PHP đã mang lại những cải tiến hiệu suất đáng kể. Vì vậy, bạn phải đảm bảo ứng dụng Laravel của mình đang chạy phiên bản PHP mới nhất để khai thác tất cả các cải tiến hiệu suất được giới thiệu trong phiên bản mới của ứng dụng.
Laravel Debugbar
Mặc dù không phải là một kỹ thuật tối ưu hóa nhưng là một gói cũng có thể được sử dụng làm trình giám sát hiệu suất của Laravel. Laravel giúp bạn tích hợp Laravel Debugbar với Laravel 9 và bao gồm ServiceProvider để đăng ký thanh gỡ lỗi nó vào đầu ra.
Chúng tôi khuyên bạn nên sử dụng gói này trong khi phát triển ứng dụng của mình để kiểm tra ứng dụng của bạn và cải thiện tương ứng.
Mẹo điều chỉnh hiệu suất chung cho Laravel
Laravel thường được sử dụng để tạo các trang web. Trong nhiều trường hợp, việc tối ưu hóa hiệu suất của trang web chỉ là vấn đề thực hiện một số điều chỉnh, chẳng hạn như:
Gói soạn thảo tốc độ trang của Laravel
Tải xuống và giải nén gói renatomarinho/laravel-page-speed bằng Composer. Thêm tên gói cùng với chi tiết phiên bản trong tệp Composer.json và chạy lệnh cập nhật trình soạn thảo:
"require": {
......
......
"renatomarinho/laravel-page-speed": "^1.8"
},
Tiếp theo, chạy lệnh sau:
composer update
Cập nhật chi tiết nhà cung cấp
Sau khi giải nén thành công gói, hãy đi tới tệp config/app.php để thêm thông tin chi tiết về nhà cung cấp dịch vụ và bí danh với các lớp cụ thể.
'providers' => [
....
....
RenatoMarinho\LaravelPageSpeed\ServiceProvider::class,
],
Xuất bản gói
Sau khi thêm thông tin chi tiết về nhà cung cấp, chúng tôi cần xuất bản gói cụ thể để triển khai trong ứng dụng của mình. Lệnh sau giúp chúng tôi xuất bản gói và chúng tôi chỉ có thể sử dụng gói sau khi thực hiện lệnh này:
php artisan vendor:publish --provider="RenatoMarinho\LaravelPageSpeed\ServiceProvider"
Thêm phần mềm trung gian để truy cập web
Sau khi xuất bản gói, chúng ta cần thêm chi tiết phần mềm trung gian vào tệp Kernel.php. Chỉ cần sao chép và dán các mã sau trong $middlewareGroups,
protected $middlewareGroups = [
'web' => [
........
........
\RenatoMarinho\LaravelPageSpeed\Middleware\InlineCss::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\ElideAttributes::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\InsertDNSPrefetch::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveComments::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\TrimUrls::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\RemoveQuotes::class,
\RenatoMarinho\LaravelPageSpeed\Middleware\CollapseWhitespace::class,
]
]
Route::get('/listView', function () {
return view('listView');
});
Cách đo hiệu suất của Laravel (Công cụ giám sát)
Đo lường hiệu suất của Laravel là điều cần thiết để xác định các lĩnh vực cần cải thiện và tối ưu hóa ứng dụng để có tốc độ và hiệu quả tốt hơn. Dưới đây là một số công cụ giám sát hiệu suất mà bạn có thể xem xét để đo lường hiệu suất của Laravel:
Blackfire.io
Blackfire.io là một công cụ gỡ lỗi và lược tả hiệu suất mạnh mẽ được thiết kế dành riêng cho các ứng dụng PHP. Blackfire.io cung cấp cho các nhà phát triển những hiểu biết sâu sắc về hiệu suất ứng dụng của họ và giúp họ xác định các điểm nghẽn và sự kém hiệu quả.
Với Blackfire.io, các nhà phát triển có thể dễ dàng xác định các vấn đề về hiệu suất, ở cấp mã, truy vấn cơ sở dữ liệu và lệnh gọi API bên ngoài.
Ngoài ra, nó tích hợp hoàn hảo với các khung PHP phổ biến như Laravel, Symfony, v.v., giúp bạn dễ dàng thiết lập và bắt đầu lập hồ sơ ứng dụng của mình.
Laravel Dusk
Laravel Dusk là một công cụ kiểm tra end-to-end được cung cấp bởi Laravel framework, được thiết kế để đơn giản hóa và tự động hóa việc kiểm tra trình duyệt cho các ứng dụng web. Với Dusk, các nhà phát triển có thể viết các bài kiểm tra trình duyệt mang tính biểu cảm và đáng tin cậy bằng cách sử dụng API thông thạo và dễ hiểu.
Vì Dusk được xây dựng dựa trên cơ sở hạ tầng thử nghiệm của Laravel nên các nhà phát triển có thể viết các bài kiểm tra tương tác với ứng dụng giống như người dùng thực sự. Ngoài ra, Dusk còn cung cấp hỗ trợ chạy thử nghiệm trong các trình duyệt không có giao diện người dùng, giúp cải thiện tốc độ thực hiện thử nghiệm và cho phép tích hợp dễ dàng hơn vào các quy trình Tích hợp liên tục (CI).