- 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
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
rclonehoặcdufssẽ ổn hơn.copyparty khá ổn đấy
Ý 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
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
copyparty GitHub — chỉ có những tính năng cần thiết, không bị phình to vô ích
Nhưng để thay thế Dropbox thì vẫn chưa có lựa chọn nào thật sự phù hợp
Ứ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ả
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
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
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
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
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
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
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 đã 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
filebrowser GitHub
filebrowser-docker
liên kết demo
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
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
divbên trong ứng dụng, nhưng cuối cùng vẫn phải dùng pdf.jsNhiề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
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
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