Bài viết này sẽ hướng dẫn bạn cách 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!
Hãy cùng xem qua các giải pháp sau nhé:
Đầ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!
Chúc các bạn thành công!

Câu trả lời này có hữu ích không? 6 Người dùng thấy điều này hữu ích (81 Bình chọn)

Powered by WHMCompleteSolution