2 điểm bởi GN⁺ 2025-11-04 | 3 bình luận | Chia sẻ qua WhatsApp
  • Dù đã tối ưu Nextcloud trên máy chủ cá nhân, nguyên nhân khiến phản hồi vẫn chậm là cấu trúc tải JavaScript quá mức
  • Khi tải trang ban đầu, hệ thống tải xuống 15~20MB JavaScript; ngay cả sau khi nén vẫn còn ở mức 4~5MB, tiếp tục là một gánh nặng lớn
  • Dung lượng script của từng ứng dụng đều rất lớn, như core-common.js (4.71MB), NotificationsApp.chunk.mjs (1.06MB), ứng dụng Calendar 5.94MB, ứng dụng Files 18.8MB, ứng dụng Notes 20.91MB
  • Vì cấu trúc này, ngay cả trên iPhone 13 mini cũng xảy ra độ trễ 5~10 giây khi chạy ứng dụng Tasks
  • Một số tính năng đã được thay thế bằng Vikunja (1.5MB JS), Immich,... nhưng do tính tích hợp của Nextcloud nên rất khó thay thế hoàn toàn

Nguyên nhân suy giảm hiệu năng của Nextcloud

  • Nextcloud tích hợp nhiều tính năng như tệp, lịch, danh bạ, ghi chú, việc cần làm, ảnh..., nhưng tốc độ cảm nhận khi sử dụng lại chậm
    • Ngay cả trong môi trường có phần cứng đủ mạnh, phản hồi vẫn chậm
  • Kết quả phân tích bằng công cụ dành cho nhà phát triển cho thấy nguyên nhân chính của độ trễ là lượng JavaScript quá lớn
    • Khi tải trang ban đầu, 15~20MB JavaScript được tải xuống
    • Ngay cả sau khi truyền nén, vẫn ở mức 4~5MB, lớn hơn rất nhiều so với chuẩn web app thông thường (1MB)
  • Dù trình duyệt có bộ nhớ đệm, mỗi lần truy cập vẫn cần thực thi một lượng mã lớn, gây chậm khi tải

Kích thước các bundle JavaScript chính

  • core-common.js: 4.71MB, cung cấp các chức năng dùng chung cho nhiều ứng dụng
  • NotificationsApp.chunk.mjs: 1.06MB
  • Ứng dụng Calendar: chỉ riêng chế độ xem lịch mặc định đã cần 5.94MB
    • Trong môi trường mạng chậm, có thể phát sinh độ trễ tải hơn 30 giây
  • Ứng dụng Files: bao gồm nhiều script như EditorOutline (1.77MB), previewUtils (1.17MB), index (1.09MB), emoji-picker (0.9MB)
    • Tổng cộng 18.8MB, trong môi trường thực tế có thể phải chờ tải hơn 1 phút
  • Ứng dụng Notes: chỉ riêng notes-main.js đã là 4.36MB, tổng thể ở mức 20.91MB

Ảnh hưởng đến trải nghiệm người dùng

  • Ngay cả khi chạy ứng dụng Tasks cũng phát sinh độ trễ 5~10 giây
    • Ví dụ: khi mở danh sách mua sắm trong cửa hàng, nội dung không hiển thị ngay lập tức
  • Tỷ lệ giữa chức năng và kích thước bundle cao bất thường, dẫn đến mất cân đối giữa tính năng và hiệu năng
  • Do cấu trúc của Nextcloud có nhiều thư viện và công cụ dùng chung, đổi lại trải nghiệm tích hợp là sự suy giảm hiệu năng

Sử dụng các dịch vụ thay thế

  • Một số tính năng được tách ra vận hành bằng Vikunja (quản lý việc cần làm, 1.5MB JS) và Immich (quản lý ảnh)
    • Vikunja không hoàn hảo, nhưng nhờ dung lượng JS nhỏ nên tốc độ cảm nhận tốt hơn
  • Tuy nhiên, nhờ tính tích hợp và sự tiện lợi của Nextcloud nên rất khó thay thế hoàn toàn

Kết luận và thay đổi trong nhận thức

  • Cấu trúc hiện tại của Nextcloud có thể tồn tại những ràng buộc thực tế như có lý do chính đáng hoặc thiếu nhân lực
  • Dù vậy, sự suy giảm trải nghiệm người dùng và khả năng tiếp cận vẫn là vấn đề rõ ràng
  • Qua bài viết của chuyên gia hiệu năng web Alex Russell, tác giả nhận ra tầm quan trọng của hiệu năng web và vấn đề sự lơ là trong quản lý hiệu năng và khả năng tiếp cận của đội ngũ phát triển
  • Khi phát triển web app, cần cân nhắc vấn đề bất bình đẳng hiệu năng (performance inequality)

3 bình luận

 
ndrgrd 2025-11-04

Chỉ đơn giản là chậm. Không chỉ client chậm mà server cũng chậm.
Trên máy 8745HS, việc tạo thumbnail cho vài trăm file PDF mất hàng giờ mà vẫn không xong.
Tốt hơn là cứ dùng bất kỳ file server nào khác. Nếu client là Windows thì dùng SMB, còn lại thì dùng server WebDAV bằng rclone hoặc dufs sẽ ổn hơn.

 
yeorinhieut 2025-11-05

copyparty khá ổn đấy

 
GN⁺ 2025-11-04
Ý kiến Hacker News
  • Tôi muốn thích Nextcloud. Tôi nghĩ bản thân sự tồn tại của nó đã rất tuyệt
    Nhưng nhìn bề ngoài thì có vẻ hoạt động ổn, rồi thỉnh thoảng lại phát sinh lỗi không thể khôi phục khiến mọi thứ hỏng hoàn toàn
    Tôi đã thử tự động sao lưu ảnh gia đình bằng ứng dụng iOS/Android, nhưng app iOS thỉnh thoảng báo lỗi “locked webdav” hoặc đồng bộ bị treo
    Kết quả là có lúc tôi phải tải lại toàn bộ 80GB ảnh từ đầu
    Nó quá thiếu ổn định để gia đình dùng, nên cần một giải pháp thay thế đáng tin cậy. Thực tế thì ngoài iCloud ra gần như không có lựa chọn nào

    • Ứng dụng iOS từng ngắt kết nối tài khoản trong nền và làm mất dữ liệu
      Tôi dán tệp qua tính năng tích hợp của app Files, nhưng không hề đồng bộ và dữ liệu biến mất mà không có bất kỳ cảnh báo nào
    • Gần đây có một lựa chọn thay thế siêu nhẹ do cộng đồng tạo ra là copyparty
      copyparty GitHub — chỉ có những tính năng cần thiết, không bị phình to vô ích
    • Nếu dùng để sao lưu ảnh thì Immich mang lại trải nghiệm tốt hơn nhiều
      Nhưng để thay thế Dropbox thì vẫn chưa có lựa chọn nào thật sự phù hợp
    • Về ảnh thì tôi nghĩ Immich là tốt nhất
    • Tôi đã chuyển phần tải lên trên di động sang FolderSync và nó hoạt động hoàn hảo
      Ứng dụng chính thức thì đầy lỗi, nhưng phía máy chủ lại ổn định
  • Nextcloud chậm vì có quá nhiều lệnh gọi JavaScript
    Khi làm mới trang lịch, có 124 lệnh gọi mạng được tạo ra, trong đó 31 lệnh không được cache
    Mỗi lịch mất hơn 30ms, nên càng nhiều lịch thì độ trễ càng cộng dồn
    Ngay cả trong mạng nội bộ cũng mất 1 giây, còn trên 4G thì hơn 33 giây. Bản thân thiết kế đã kém hiệu quả

    • Có quá nhiều file JS và yêu cầu AJAX quá nhiều
      Kiểu kiến trúc dựa trên REST như thế này trên mạng di động thì độ trễ khứ hồi lớn nên chậm là điều tất yếu
      Tôi nghĩ giờ đã đến lúc dùng WebSocket thay cho REST
    • Trước đây lịch của Nextcloud thực sự rất tốt, nhưng sau lần thiết kế lại thì hỏng hoàn toàn
      Việc thêm hay sửa lịch trở nên bất tiện, UI cũng trông trẻ con hơn. Không có web calendar mã nguồn mở nào thật sự dùng được
    • Muốn giải quyết vấn đề này thì giao thức đồng bộ dữ liệu phải được cải thiện
      Cách tiếp cận như Electric SQL khá thú vị
      Ngoài ra các đề xuất cải tiến JS như TC39 import proposal cũng có thể hữu ích
  • Trước đây tôi từng duy trì một soft fork của Nextcloud, và cấu trúc nền tảng của nó quá phức tạp
    Chỉ cần áp vài bản vá hiệu năng là tốc độ render file manager đã nhanh hơn vài lần
    Nhưng codebase là kiểu chồng lớp này lên lớp khác, nên rất khó để tin cậy
    Cuối cùng tôi bỏ dự án. Có cảm giác chính sự phức tạp này lại đang nuôi sống hệ sinh thái các nhà cung cấp hosting

    • Tôi cũng nghĩ vậy. Nextcloud đang mắc cái bẫy của tính mô-đun
      Mỗi tính năng ban đầu là một plugin độc lập nên thiếu tính tích hợp
      Giờ nó đã thành một con quái vật, và tôi thấy thà kết nối nhiều công cụ bằng SSO còn tốt hơn
    • Tôi tò mò không biết bạn có chia sẻ các bản vá đó không. Nếu cải thiện tốc độ lớn như vậy thì sẽ rất có ích cho cộng đồng
      Và thực ra việc vận hành Nextcloud cũng không khó đến thế. Chỉ cần thiết lập một lần là việc bảo trì khá đơn giản
  • Tôi nghĩ nguyên nhân khiến nó chậm không phải là dung lượng JS như bài viết nói, mà là logic kém hiệu quả
    Vấn đề là có quá nhiều lệnh gọi API và cập nhật UI

    • Nếu JS quá nhiều thì chi phí parse, thực thi, thao tác DOM... sẽ tạo thành overhead tích lũy rất lớn
      Trước đây chỉ cần vượt 200KB là tôi đã kiểm tra tối ưu hóa, trong khi Nextcloud lên tới 15MB
    • Cũng có thể nguyên nhân là cache không hoạt động đúng, hoặc tải trước không cần thiết
  • Tôi đã dùng Nextcloud để sao lưu ảnh gia đình suốt 7 năm
    Nó bảo vệ quyền riêng tư tốt và khá ổn định, nhưng tôi tuyệt đối không khuyến nghị nó như một giải pháp thay thế Google Docs
    Tải lên dung lượng lớn hoặc tải thumbnail đều thiếu ổn định và chậm
    Dù vậy, không có giải pháp thay thế nào khác, và tôi không muốn giao dữ liệu cho AI của các tập đoàn lớn
    Tôi chỉ mong gia đình mình dùng nó tích cực hơn

    • Tôi tò mò liệu Immich có thể là lựa chọn thay thế đó không. Tôi nghe nói nó rất mạnh về quản lý ảnh và video
  • Tôi đã thử nhiều trình quản lý tệp self-hosted
    Tôi đã dùng theo thứ tự Ajaxplorer → Pydio → Nextcloud → FileRun, và hài lòng nhất với FileRun
    Nó nhanh, ổn định và hoạt động tốt cả trên trình duyệt di động
    Giờ thì là phần mềm trả phí, nhưng rất đáng tiền
    copyparty cũng nhẹ và nhanh, nhưng không thân thiện với người dùng phổ thông
    Tôi nhớ tính năng “file request” của FileRun

    • Tôi thích filebrowser. Dùng cùng Syncthing thì nó trở thành kiểu Dropbox mini
      filebrowser GitHub
      filebrowser-docker
    • Trong copyparty cũng có thể tạo liên kết tải lên tương tự bằng tính năng “shares(--shr)”
      liên kết demo
    • copyparty chỉ hỗ trợ đồng bộ một chiều, nên khó thay thế Nextcloud
      Tôi đang tính kết hợp với Syncthing, nhưng lo ngại tải CPU sẽ cao
  • Nextcloud chậm và cồng kềnh, nhưng ổn định
    Tôi đã dùng nó nhiều năm trong một công ty 8 người mà không gặp vấn đề gì
    Web app chậm nên tôi hầu như không dùng, chủ yếu dùng desktop sync client
    Plugin xác thực IMAP rất hữu ích, giúp việc quản lý người dùng dễ dàng

    • Mọi người nói web app chậm, nhưng web app cũng có nhiều ưu điểm
      Có thể tùy biến tự do bằng uBlock, userstyle, userscript v.v.
  • Trước đây tôi từng phát hiện và báo cáo một lỗ hổng trong trình xem PDF của Nextcloud
    Vấn đề là họ đã nhúng một trình xem PDF cũ dựa trên JS, và năm 16 tuổi tôi đã nhận được $100
    bài blog của tôi

    • Tôi cũng từng cố hiển thị PDF trong một div bên trong ứng dụng, nhưng cuối cùng vẫn phải dùng pdf.js
  • Nhiều người phàn nàn về dự án mã nguồn mở, nhưng rất ít người thực sự cố gắng cải thiện nó
    Tôi yêu Nextcloud. Dù chậm, tôi vẫn sở hữu dữ liệu của mình, và vì là mã AGPL nên cũng có thể tự sửa
    Dùng miễn phí, lại có thể thêm tính năng mở rộng như “đi mua sắm”
    Tôi đã dùng hơn 6 năm mà không gặp vấn đề lớn nào, và sự tự do đó thực sự rất tuyệt
    Nó không hoàn hảo, nhưng tôi biết ơn vì dự án này tồn tại

  • Điểm mạnh của Nextcloud là có thể xử lý toàn bộ bộ công cụ cộng tác trên một nền tảng duy nhất
    Nó mang lại trải nghiệm tích hợp cho file, lịch, ghi chú, office, ảnh, Talk v.v.
    Gói AIO đã giải quyết được khá nhiều vấn đề về cập nhật và độ ổn định
    Tuy vậy, do dựa trên PHP nên hiệu năng vẫn kém, và UI thì nên được trau chuốt như Synology DSM

    • Đổi ngôn ngữ cũng không cải thiện tốc độ được bao nhiêu
      Vấn đề là cấu trúc I/O kém hiệu quả và vô số lệnh gọi XHR
      PHP lại có ưu thế về khả năng tiếp cận nên thuận lợi cho cộng đồng đóng góp
    • Tham khảo thêm thì Owncloud Infinite Scale là phiên bản được viết lại bằng Go
      tài liệu chính thức — tuy nhiên nó phụ thuộc Docker khá nhiều và có nhiều ràng buộc môi trường