Hướng dẫn tăng tốc website OpenCart phiên bản 1.5.6.x lên 10 lần

Opencart là một trong những mã nguồn thương mại điện tử miễn phí nổi tiếng hiện nay, được xem là một giải pháp hiệu quả nhằm tạo ra các website bán hàng trực tuyến. Opencart cũng hỗ trợ người dùng rất nhiều plugin, giao diện, v.v… và có cả cộng đồng phát triển rộng khắp trên toàn thế giới – những người tạo nên sự phát triển vững mạnh cho Opencart tới ngày nay. Mặc dù phiên bản mới nhất là 2.x nhưng Opencart bản 1.5.6.x vẫn là phiên bản tối ưu nhất trong thời điểm hiện nay.

Với một website bán hàng vừa và nhỏ, mọi chuyện sẽ không có gì đáng để bàn. Nhưng khi số lượng sản phẩm trong website của bạn vượt mức 50.000 sản phẩm, chắc chắn bạn sẽ cảm thấy rất khó chịu vì tốc độ tải trang ì ạch, mỗi cú click chuột vào các chức năng như: Trang chủ, Danh mục sản phẩm, Chi tiết sản phẩm, v.v…. phải đợi lâu. Vậy đâu là nguyên nhân của vấn đề này? Đơn giản vì khi số lượng sản phẩm trên website của bạn nhiều, đồng nghĩa với số lượng truy vấn SQL sẽ tăng theo và khi đó tốc độ tải trang của website bạn sẽ chậm hơn. VinaHost sẽ hỗ trợ bạn khắc phục vấn đề này, giúp website của bạn có thể tải nhanh hơn tới 10 lần!

Đầu tiên, hãy mở phpMyAdmin và truy cập vào Database của Opencart, nếu bạn chưa từng nghe những từ này, hãy mở một phiếu hỗ trợ cho Phòng kỹ thuật VinaHost để nhờ trợ giúp và đừng cố gắng tự thực hiện vì việc này làm có thể làm tất cả mọi dữ liệu trong website của bạn bị lỗi và gây ra mất dữ liệu.

Tiếp theo, bạn hãy xem qua các table về product, category và xem thử các trường như category_id, product_id đã được “index” chưa, nếu chưa hãy thực hiện add index các trường này.

Hoặc đơn giản hơn, bạn hãy chạy đoạn query sau để thực hiện tự động hóa quá trình này nhé:

ALTER TABLE category ADD INDEX status ( status ); — có thể bỏ qua ALTER TABLE category_to_store ADD INDEX store_id ( store_id ); ALTER TABLE category_description ADD INDEX language_id ( language_id ); ALTER TABLE product_attribute ADD INDEX attribute_id ( attribute_id ); — có thể bỏ qua ALTER TABLE product_attribute ADD INDEX language_id ( language_id ); — có thể bỏ qua ALTER TABLE information ADD INDEX status ( status ); — có thể bỏ qua ALTER TABLE information ADD INDEX sort_order ( sort_order ); — có thể bỏ qua ALTER TABLE information_to_store ADD INDEX store_id ( store_id ); ALTER TABLE product ADD INDEX status ( status ); — có thể bỏ qua ALTER TABLE product_description ADD INDEX language_id ( language_id ); — có thể bỏ qua ALTER TABLE product_image ADD INDEX product_id ( product_id ); ALTER TABLE product_image ADD INDEX sort_order ( sort_order ); — có thể bỏ qua ALTER TABLE product_reward ADD INDEX product_id ( product_id ); ALTER TABLE product_reward ADD INDEX customer_group_id ( customer_group_id ); — có thể bỏ qua ALTER TABLE product_option ADD INDEX product_id (product_id); ALTER TABLE product_option ADD INDEX option_id (option_id); — có thể bỏ qua ALTER TABLE product_option_value ADD INDEX product_option_id (product_option_id); — có thể bỏ qua ALTER TABLE product_option_value ADD INDEX product_id (product_id); ALTER TABLE product_option_value ADD INDEX option_id (option_id); — có thể bỏ qua ALTER TABLE product_option_value ADD INDEX option_value_id (option_value_id); — có thể bỏ qua ALTER TABLE product_option_value ADD INDEX subtract (subtract); — có thể bỏ qua ALTER TABLE product_option_value ADD INDEX quantity (quantity); — có thể bỏ qua ALTER TABLE product_to_category ADD INDEX category_id ( category_id ); ALTER TABLE product_to_store ADD INDEX store_id ( store_id ); ALTER TABLE setting ADD INDEX store_id ( store_id ); — có thể bỏ qua ALTER TABLE setting ADD INDEX `group` ( `group` ); — có thể bỏ qua ALTER TABLE setting ADD INDEX `key` ( `key` ); — có thể bỏ qua ALTER TABLE setting ADD INDEX serialized ( serialized ); — có thể bỏ qua ALTER TABLE url_alias ADD INDEX query ( query );– có thể bỏ qua

Sau quá trình trên, website của bạn đã có hiệu năng được cải thiện rõ rệt rồi đấy! Vậy là chúng ta đã tối ưu database của Opencart rồi, nhưng vẫn còn một vấn đề nữa, website có quá nhiều sản phẩm, đồng nghĩa mỗi khi tải trang sẽ cần truy vấn một khối lượng lớn SQL Queries, vậy có cách nào tối ưu được quá trình này? Làm sao để quá trình này chỉ diễn ra một lần và các lần tải trang sau sẽ không lặp lại? Câu trả lời chính là áp dụng phương thức MySQL Database Caching!

Vậy MySQL Database Caching là gì?

Tất cả mọi trang trong Opencart đều bao gồm nhiều module nhằm truy vấn tới database để lấy dữ liệu mỗi khi bạn truy cập. Nhiều trang khác nhau nhưng cũng có thể sẽ có module như nhau và dữ liệu lấy về cũng như nhau, việc cùng một truy vấn được lặp lại nhiều lần gây lãng phí tài nguyên hệ thống và thời gian người dùng phải đợi tải trang, MySQL Database Caching sẽ giúp quá trình này được diễn ra tối ưu hơn, khi nhận được yêu cầu đã từng xử lý hệ thống sẽ trả về kết quả ngay mà không cần phải lặp lại quá trình truy vấn lại dữ liệu.

Extension DB Cache của Opencart sẽ hỗ trợ chúng ta thực hiện được vấn đề trên một cách dễ dàng, bạn có thể tải extension này hoàn toàn miễn phí tại đây.

Sau đây là kết quả test trước và sau khi cài đặt extension DB Cache để các bạn có thể tham khảo:

Thực hiện lệnh test trước khi kích hoạt DB Cache: ab -n 100 -c 2 https://demo.vinahost.vn/

Server Software: nginx Server Hostname: demo.vinahost.vn Server Port: 443 Document Path: / Document Length: 218427 bytes Concurrency Level: 2 Time taken for tests: 108.071 seconds Complete requests: 100 Failed requests: 84 (Connect: 0, Receive: 0, Length: 84, Exceptions: 0) Write errors: 0 Total transferred: 21899476 bytes HTML transferred: 21841776 bytes Requests per second: 0.93 [#/sec] (mean) Time per request: 2161.416 [ms] (mean) Time per request: 1080.708 [ms] (mean, across all concurrent requests) Transfer rate: 197.89 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 0 Processing: 1471 2132 216.6 2120 2934 Waiting: 1468 2128 216.2 2109 2925 Total: 1471 2132 216.6 2121 2934 Percentage of the requests served within a certain time (ms) 50% 2121 66% 2205 75% 2248 80% 2291 90% 2364 95% 2500 98% 2806 99% 2934 100% 2934 (longest request)

Thực hiện lại lệnh test sau khi kích hoạt DB Cache: ab -n 100 -c 2 https://demo.vinahost.vn/

Server Software: nginx Server Hostname: demo.vinahost.vn Server Port: 443 Document Path: / Document Length: 218427 bytes Concurrency Level: 2 Time taken for tests: 24.025 seconds Complete requests: 100 Failed requests: 74 (Connect: 0, Receive: 0, Length: 74, Exceptions: 0) Write errors: 0 Total transferred: 21899740 bytes HTML transferred: 21842040 bytes Requests per second: 4.16 [#/sec] (mean) Time per request: 480.506 [ms] (mean) Time per request: 240.253 [ms] (mean, across all concurrent requests) Transfer rate: 890.16 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 0 Processing: 382 467 169.7 433 1521 Waiting: 354 429 164.5 395 1487 Total: 383 467 169.8 433 1521 Percentage of the requests served within a certain time (ms) 50% 433 66% 450 75% 467 80% 476 90% 499 95% 515 98% 1472 99% 1521 100% 1521 (longest request)

Hãy nhìn vào giá trị “Requests per second”, chúng ta nhận được kết quả 4.16 [#/sec] khi đã kích hoạt DB Cache và 0.93 [#/sec] khi chưa kích hoạt DB Cache; Vậy là website demo này đã có sự cải thiện gấp 04 lần rồi đấy, website càng nhiều dữ liệu thì khả năng cài thiện sẽ càng cao!

Nếu có điều gì thắc mắc, xin vui lòng liên hệ Vinahost qua hotline 1900 6046 ext 3 hoặc email support@vinahost.vn


Chúc các bạn thành công!

Was this article helpful?