Skip to content
bieudobongbong

Chào bạn, mình xin tiếp thu ý kiến. Dưới đây là bài viết được điều chỉnh lại với giọng văn khách quan, nhẹ nhàng hơn, tập trung vào khía cạnh tối ưu hóa trải nghiệm người dùnghiệu quả tài nguyên thay vì dùng các từ ngữ quá mạnh.


Thách Thức Kỹ Thuật Khi Triển Khai Biểu Đồ Bong Bóng Quy Mô Lớn (1000 Mã)\

Việc xây dựng một biểu đồ bong bóng (Bubble Chart) bao quát toàn thị trường với 1000 mã cổ phiếu, trong đó mỗi mã đi kèm dữ liệu lịch sử (200 nến) và hàng loạt chỉ báo kỹ thuật (90 chỉ báo), là một bài toán đầy tham vọng.

Mặc dù ý tưởng này mang lại lượng thông tin khổng lồ cho nhà đầu tư, nhưng các nền tảng tài chính lớn thường cân nhắc rất kỹ trước khi triển khai do hai rào cản chính về mặt hiệu năng: Khối lượng dữ liệu truyền tảiKhả năng hiển thị của trình duyệt.

1. Thách thức về kích thước dữ liệu (File JSON)

Khi chúng ta muốn đưa toàn bộ dữ liệu thô xuống trình duyệt để xử lý (Client-side processing), kích thước file dữ liệu sẽ trở thành một vấn đề đáng lưu tâm.

Với bài toán: 1000 mã $\times$ (200 nến + 90 chỉ báo), ước tính dung lượng file JSON cần tải về sẽ rơi vào khoảng 150 MB.

Điều này tạo ra những trở ngại sau:

  • Thời gian chờ đợi (Loading Time): Việc tải một tệp tin 150 MB đòi hỏi đường truyền internet ổn định và thời gian nhất định. Trong bối cảnh giao dịch chứng khoán cần sự nhanh nhạy, việc người dùng phải chờ đợi dữ liệu tải xong (dù chỉ vài chục giây) có thể làm giảm trải nghiệm mượt mà vốn có của một ứng dụng Real-time.
  • Quy trình xử lý dữ liệu (Parsing): Sau khi tải về, trình duyệt cần thực hiện bước "giải mã" (Parse) file JSON này để sử dụng. Với khối lượng dữ liệu lớn, công đoạn này đòi hỏi CPU phải hoạt động hết công suất trong một khoảng thời gian ngắn. Điều này có thể khiến thao tác trên trang web (như cuộn, click) phản hồi chậm hơn bình thường đôi chút trong lúc dữ liệu đang được xử lý.
  • Tiêu tốn tài nguyên bộ nhớ (RAM usage): Dữ liệu khi được nạp vào bộ nhớ trình duyệt để tính toán thường chiếm dung lượng lớn hơn so với kích thước file gốc. Điều này có thể gây áp lực lên các thiết bị có cấu hình văn phòng cơ bản hoặc điện thoại di động, khiến việc chuyển đổi qua lại giữa các tab trình duyệt kém mượt mà.

2. Thách thức về công nghệ hiển thị (Rendering) với SVG

Đa số các thư viện biểu đồ phổ biến hiện nay (như Highcharts mặc định) sử dụng công nghệ SVG. Công nghệ này hoạt động bằng cách tạo ra các phần tử thực (DOM elements) cho từng chi tiết trên biểu đồ.

Khi áp dụng cho 1000 mã cổ phiếu:

  • Trình duyệt cần quản lý khoảng 2000 - 3000 đối tượng (bao gồm hình tròn bong bóng và nhãn tên mã).
  • Hiệu năng tương tác: Khi người dùng thực hiện các thao tác như Zoom, Pan (kéo), hoặc di chuột để xem thông tin, trình duyệt phải tính toán lại vị trí cho hàng nghìn đối tượng này cùng lúc.
  • Kết quả: Trên các máy tính cấu hình cao, mọi thứ có thể vẫn ổn. Tuy nhiên, trên các thiết bị phổ thông, tốc độ khung hình (FPS) có thể bị giảm, tạo cảm giác hình ảnh chuyển động không được trơn tru.

3. Hướng giải quyết tối ưu

Để cân bằng giữa việc cung cấp nhiều dữ liệuđảm bảo tốc độ, các hệ thống lớn thường áp dụng kiến trúc tối ưu hơn:

  • Xử lý tại nguồn (Server-side Computing): Thay vì gửi toàn bộ lịch sử nến và chỉ báo thô xuống máy người dùng, hệ thống máy chủ sẽ đảm nhận việc tính toán các chỉ báo phức tạp (RSI, MACD...). Sau đó, máy chủ chỉ gửi xuống kết quả cuối cùng (tọa độ X, Y, bán kính Z). Cách này giúp giảm dung lượng file từ hàng trăm MB xuống chỉ còn vài trăm KB, giúp dữ liệu hiển thị gần như tức thì.
  • Sử dụng công nghệ Canvas/WebGL: Đối với việc vẽ hàng nghìn điểm dữ liệu, các kỹ sư thường chuyển sang sử dụng Canvas hoặc WebGL (tận dụng sức mạnh Card đồ họa). Công nghệ này cho phép vẽ hàng chục nghìn điểm ảnh mà vẫn giữ được độ mượt mà cao, thay vì phụ thuộc vào các thẻ DOM của SVG.

Tóm lại, việc không triển khai theo cách gửi toàn bộ dữ liệu thô không phải vì không làm được, mà là sự lựa chọn giải pháp kỹ thuật phù hợp hơn để đảm bảo ứng dụng chạy nhanh, nhẹ và ổn định cho mọi người dùng.