Làm thế nào để triển khai nhanh hơn
Nhiều người dùng có thể thấy NocoBase chạy chậm hơn dự kiến sau khi triển khai. Điều này thường do môi trường mạng, cấu hình máy chủ hoặc kiến trúc triển khai. Trước khi đi sâu vào các kỹ thuật tối ưu hóa, hãy cùng xem các giá trị tham chiếu cho tốc độ tải bình thường của NocoBase để tránh những lo lắng không cần thiết.
Tham chiếu tốc độ tải bình thường của NocoBase
Dưới đây là tốc độ tải đã được kiểm tra trong môi trường demo của NocoBase:
- Thời gian cần thiết để vào ứng dụng lần đầu khi nhập URL: khoảng 2 giây
- Thời gian cần thiết để chuyển đổi giữa các trang trong ứng dụng: khoảng 50-300 mili-giây
Tiếp theo, tôi sẽ chia sẻ một loạt kỹ thuật tối ưu hóa triển khai đơn giản nhưng hiệu quả, có thể cải thiện đáng kể tốc độ truy cập chỉ bằng cách điều chỉnh các thiết lập triển khai, mà không cần sửa đổi bất kỳ mã nguồn nào:
I. Tối ưu hóa mạng và hạ tầng
1. Phiên bản giao thức HTTP: Dễ dàng đón nhận HTTP/2
【Điều kiện tiên quyết】
- Yêu cầu hỗ trợ HTTPS: Điều này rất quan trọng! Hầu hết các trình duyệt hiện đại chỉ hỗ trợ HTTP/2 qua kết nối HTTPS, vì vậy bạn phải cấu hình chứng chỉ SSL trước.
- Yêu cầu máy chủ: Bạn cần sử dụng phần mềm máy chủ hỗ trợ HTTP/2, chẳng hạn như Nginx 1.9.5+ hoặc Apache 2.4.17+.
- Phiên bản TLS: Khuyến nghị sử dụng TLS 1.2 trở lên (tốt nhất là TLS 1.3), vì các phiên bản SSL cũ không hỗ trợ HTTP/2.
【Mẹo】
Giao thức HTTP/1.1 truyền thống có hạn chế khi xử lý nhiều yêu cầu—thường chỉ có 6-8 kết nối đồng thời, giống như xếp hàng mua vé, rất dễ gây trễ.

HTTP/2 sử dụng công nghệ "ghép kênh" (multiplexing) để xử lý nhiều yêu cầu cùng lúc, giúp tăng tốc đáng kể quá trình tải tài nguyên; trong khi đó, HTTP/3 mới nhất hoạt động tốt hơn trong các mạng không ổn định, với kết quả xuất sắc.

【Đề xuất tối ưu hóa】
- Hãy đảm bảo máy chủ web của bạn đã bật hỗ trợ HTTP/2, việc cấu hình rất dễ trên hầu hết các máy chủ (như Nginx, Caddy).
- Trong Nginx, chỉ cần thêm tham số
http2sau chỉ thị listen:
【Xác minh】
Trong bảng điều khiển nhà phát triển của trình duyệt, mở mục "Network", nhấp chuột phải và chọn "Protocol" để xem phiên bản giao thức kết nối hiện tại:

Theo các thử nghiệm của chúng tôi, tốc độ tổng thể cải thiện khoảng 10%, với mức cải thiện hiệu năng rõ rệt hơn khi hệ thống có nhiều khối (block) và tài nguyên.
2. Băng thông mạng: Càng lớn càng tốt, tính phí linh hoạt
【Mẹo】
Giống như đường cao tốc thông thoáng hơn đường nội thành, băng thông quyết định hiệu suất truyền dữ liệu. Khi NocoBase tải lần đầu, nó cần tải xuống nhiều tài nguyên frontend, và băng thông không đủ rất dễ trở thành nút thắt cổ chai.
【Đề xuất tối ưu hóa】
- Chọn băng thông đủ lớn (khuyến nghị 50Mbps+ cho nhiều người dùng), đừng tiết kiệm với tài nguyên quan trọng này.
- Khuyến nghị hình thức "trả theo dung lượng sử dụng": nhiều nhà cung cấp dịch vụ đám mây cung cấp mô hình linh hoạt này, cho phép bạn tận hưởng băng thông cao hơn trong giờ cao điểm trong khi vẫn kiểm soát chi phí lúc sử dụng bình thường.
3. Độ trễ mạng và vị trí địa lý của máy chủ: Càng gần càng nhanh
【Mẹo】
Độ trễ (latency) là thời gian chờ để truyền dữ liệu. Ngay cả khi có băng thông đủ, nếu máy chủ ở quá xa người dùng (ví dụ: người dùng ở Trung Quốc nhưng máy chủ ở Mỹ), mỗi phản hồi yêu cầu có thể bị chậm do khoảng cách quá lớn.
【Đề xuất tối ưu hóa】
- Cố gắng triển khai NocoBase ở các khu vực gần với nhóm người dùng chính của bạn.
- Nếu người dùng của bạn phân bố toàn cầu, hãy cân nhắc sử dụng các dịch vụ tăng tốc toàn cầu (như Alibaba Cloud Global Accelerator hoặc AWS Global Accelerator) để tối ưu hóa định tuyến mạng và giảm độ trễ.
【Xác minh】
Sử dụng lệnh ping để kiểm tra độ trễ từ các khu vực khác nhau.
Cách tiếp cận này cho thấy sự cải thiện rõ rệt nhất, với tốc độ truy cập tăng 1-3 lần hoặc hơn tùy khu vực.
Cách 12 múi giờ, 13 giây:

Cách 2 múi giờ, 8 giây:

Cùng khu vực, khoảng 3 giây:

II. Tối ưu hóa kiến trúc triển khai
4. Phương thức triển khai máy chủ và proxy: Chọn kiến trúc phù hợp nhất
【Điều kiện tiên quyết】
- Quyền máy chủ: Bạn cần quyền root hoặc sudo để cấu hình các dịch vụ như Nginx.
- Kỹ năng cơ bản: Cần có một số kiến thức cấu hình máy ch ủ cơ bản, nhưng đừng lo, các ví dụ cấu hình cụ thể sẽ được cung cấp.
- Truy cập cổng: Đảm bảo tường lửa của bạn cho phép truy cập vào cổng 80 (HTTP) và 443 (HTTPS).
【Mẹo】
Khi người dùng truy cập NocoBase, yêu cầu sẽ đi thẳng đến máy chủ của bạn. Một phương thức triển khai phù hợp cho phép máy chủ của bạn xử lý yêu cầu hiệu quả hơn, đem lại phản hồi nhanh hơn.
【Các giải pháp khác nhau và khuyến nghị】
Khởi động NocoBase mà không dùng reverse proxy cho tài nguyên tĩnh (không khuyến nghị):
- Nhược điểm: Phương thức này đơn giản nhưng hiệu năng kém khi xử lý đồng thời cao hoặc các tệp tĩnh; chỉ phù hợp cho phát triển và kiểm thử.
- Khuyến nghị: Vui lòng tránh phương thức này nếu có thể.
Tham khảo "Tài liệu cài đặt"
Không có reverse proxy, tải trang chủ mất khoảng 6,1 giây

Sử dụng Nginx / Caddy làm reverse proxy (khuyến nghị mạnh mẽ):
- Ưu điểm: Máy chủ reverse proxy có thể xử lý hiệu quả các kết nối đồng thời, phục vụ các tệp tĩnh, triển khai cân bằng tải và làm cho việc cấu hình HTTP/2 trở nên đơn giản.
- Khuyến nghị: Trong môi trường production, sau khi triển khai ứng dụng (triển khai từ mã nguồn / create-nocobase-app / image Docker), hãy sử dụng Nginx hoặc Caddy làm reverse proxy.
Tham khảo "Tài liệu triển khai"
Với proxy Nginx, tải trang chủ mất khoảng 3-4 giây


Sử dụng triển khai cluster kèm cân bằng tải (phù hợp cho các kịch bản đồng thời cao và độ sẵn sàng cao):
- Ưu điểm: Bằng cách triển khai nhiều instance để xử lý yêu cầu, bạn có thể cải thiện đáng kể độ ổn định tổng thể của hệ thống và khả năng đồng thời.
- Để biết cách triển khai cụ thể, xem Chế độ Cluster
5. Sử dụng CDN để tăng tốc tài nguyên tĩnh
【Điều kiện tiên quyết】
- Yêu cầu tên miền: Bạn cần một tên miền đã đăng ký và khả năng quản lý các thiết lập DNS của nó.
- Chứng chỉ SSL: Hầu hết các dịch vụ CDN yêu cầu cấu hình chứng chỉ SSL (bạn có thể sử dụng chứng chỉ Let's Encrypt miễn phí).
- Lựa chọn dịch vụ: Chọn nhà cung cấp CDN phù hợp dựa trên khu vực của người dùng (người dùng tại Trung Quốc đại lục cần CDN có giấy phép ICP).
【Mẹo】 CDN (Content Delivery Network) lưu trữ tài nguyên tĩnh của bạn trong bộ nhớ đệm tại các node trên khắp thế giới, cho phép người dùng lấy tài nguyên từ node gần nhất, giống như lấy nước từ nguồn gần đó, giảm đáng kể độ trễ tải.
Ngoài ra, lợi ích lớn nhất của CDN là khả năng giảm đáng kể tải và áp lực băng thông cho máy chủ ứng dụng của bạn. Khi nhiều người dùng truy cập NocoBase đồng thời mà không có CDN, tất cả các yêu cầu tài nguyên tĩnh (JavaScript, CSS, hình ảnh, v.v.) sẽ trực tiếp đến máy chủ của bạn, có thể gây bão hòa băng thông, suy giảm hiệu năng, hoặc thậm chí làm sập máy chủ. Bằng cách chuyển những yêu cầu này sang CDN, máy chủ của bạn có thể tập trung xử lý logic nghiệp vụ cốt lõi, đem lại cho người dùng trải nghiệm ổn định hơn.

【Đề xuất tối ưu hóa】• Cấu hình máy chủ của bạn để phân phối các yêu cầu tài nguyên tĩnh qua CDN.• Chọn nhà cung cấp CDN phù hợp dựa trên vị trí người dùng:
- Người dùng toàn cầu: Cloudflare, Akamai, AWS CloudFront;
- Người dùng tại Trung Quốc đại lục: Alibaba Cloud CDN, Tencent Cloud CDN, Baidu Cloud Acceleration. Ví dụ cấu hình:
- Đối với các dự án nhỏ, gói miễn phí của Cloudflare có thể cung cấp khả năng tăng tốc CDN tốt:
- Đăng ký tài khoản Cloudflare và thêm tên miền của bạn;
- Sửa DNS để trỏ tên miền của bạn đến các máy chủ của Cloudflare;
- Đặt mức bộ nhớ đệm thích hợp trong bảng điều khiển.
Lưu ý đặc biệt: Ngay cả khi tất cả người dùng của bạn ở cùng một khu vực, vẫn rất khuyến nghị sử dụng CDN vì nó giúp giảm gánh nặng cho máy chủ một cách hiệu quả, cải thiện độ ổn định tổng thể của hệ thống, đặc biệt là trong thời gian lưu lượng truy cập cao.
III. Tối ưu hóa tài nguyên tĩnh
6. Cấu hình nén và bộ nhớ đệm của máy chủ
【Điều kiện tiên quyết】
- Tài nguyên CPU: Việc nén làm tăng tải CPU của máy chủ, vì vậy máy chủ của bạn cần có đủ sức mạnh xử lý.
- Hỗ trợ module Nginx: Nén Gzip thường được tích hợp sẵn, nhưng nén Brotli có thể yêu cầu cài đặt module bổ sung.
- Quyền cấu hình: Bạn cần quyền sửa đổi cấu hình máy chủ.
【Mẹo】
Bằng cách bật nén và triển khai các chiến lược bộ nhớ đệm hợp lý, bạn có thể giảm đáng kể lượng dữ liệu truyền tải và các yêu cầu lặp lại, về cơ bản là "giảm cân" cho các tài nguyên của bạn để tốc độ tải có thể cất cánh.

【Đề xuất tối ưu hóa】
- Giải pháp đơn giản nhất: Sử dụng dịch vụ CDN miễn phí của Cloudflare, dịch vụ này tự động bật nén Gzip.
- Bật nén Gzip hoặc Brotli, có thể thiết lập trong Nginx như sau:
- Thiết lập các header bộ nhớ đệm thích hợp cho tài nguyên tĩnh để giảm việc tải lại:
7. Sử dụng SSL/TLS và tối ưu hóa hiệu năng
【Điều kiện tiên quyết】
- Chứng chỉ SSL: Bạn cần một chứng chỉ SSL hợp lệ (có thể sử dụng chứng chỉ Let's Encrypt miễn phí).
- Quyền cấu hình máy chủ: Bạn cần có khả năng sửa đổi cấu hình SSL.
- Cấu hình DNS: Cấu hình các resolver DNS đáng tin cậy cho OCSP Stapling.
【Mẹo】
Bảo mật luôn được đặt lên hàng đầu, nhưng cấu hình HTTPS không phù hợp có thể tạo thêm một số độ trễ. Dưới đây là một số mẹo tối ưu hóa giúp bạn duy trì hiệu năng cao trong khi vẫn đảm bảo an toàn.

