1 điểm bởi GN⁺ 2025-01-18 | 1 bình luận | Chia sẻ qua WhatsApp
  • Giới thiệu

    • Learn Yjs là một chuỗi hướng dẫn tương tác giúp bạn học cách xây dựng ứng dụng cộng tác thời gian thực bằng thư viện CRDT Yjs.
    • Chính trang này là một ví dụ về ứng dụng cộng tác thời gian thực, nơi con trỏ của những người dùng khác được hiển thị theo thời gian thực.
    • Khi nhấp vào cây, thay đổi cũng sẽ được phản ánh tới những người dùng khác.
  • Kiến thức cơ bản về Yjs

    • Bắt đầu từ các khái niệm cơ bản của Yjs, nội dung này đề cập đến các kỹ thuật xử lý trạng thái trong ứng dụng phân tán.
    • Giải thích CRDT là gì và vì sao nên sử dụng nó.
    • Trình bày những vấn đề có thể phát sinh trong ứng dụng cộng tác và cách tránh chúng.
    • Bạn có thể trải nghiệm cách Yjs hoạt động thông qua các bản demo có thể khám phá và các bài tập code.
  • Ví dụ demo

    • Mỗi hộp đại diện cho một máy tính riêng biệt (client) đang chạy ứng dụng sử dụng Yjs.
    • Khi tương tác trên một client, dữ liệu sẽ tự động được đồng bộ sang các client khác.
    • Bạn có thể điều chỉnh độ trễ mạng bằng thanh trượt ở góc trên bên trái để quan sát tương tác giữa các client.
  • Giới thiệu về trang web

    • Learn Yjs là một dự án của Jamsocket, nền tảng xây dựng ứng dụng thời gian thực.
    • Con trỏ thời gian thực và khu vườn nhiều người chơi trên trang này được vận hành bằng Y-Sweet, máy chủ Yjs mã nguồn mở.
    • Website được xây dựng bằng Astro, còn các demo và bài tập tương tác được tạo bằng React và Yjs.

1 bình luận

 
GN⁺ 2025-01-18
Ý kiến trên Hacker News
  • Nhà phát triển Jamsocket đã tạo một hướng dẫn tương tác giúp xây dựng ứng dụng cộng tác và local-first bằng Yjs. Yjs là một thư viện CRDT, nên có đường cong học tập nhất định với những người chưa quen làm việc với trạng thái phân tán. Hướng dẫn này trực quan và được thiết kế để xây dựng sự hiểu biết từ nền tảng thông qua các bản demo có thể khám phá và bài tập lập trình

  • Tính năng tổng quát của Yjs có thể trở nên phức tạp, đặc biệt khi nhiều đối tượng có liên quan với nhau. Mô hình đơn giản là đưa mọi mục vào một tài liệu sẽ dẫn đến vấn đề phải truyền toàn bộ cơ sở dữ liệu. Vì vậy cần có cách chia các mục thành các đối tượng riêng lẻ và lưu bền vững chúng một cách trực tiếp

    • Có thể giải quyết vấn đề bằng Subdocuments, nhưng một số Provider không hỗ trợ. Giao thức cốt lõi của Yjs chưa được tài liệu hóa và mã liên quan bị phân tán
  • Yjs có ưu điểm là dễ đạt được kết quả P2P. Tuy nhiên, tính lưu bền vững ở backend, giải quyết xung đột, tua lại lịch sử và các vấn đề tương tự là những bài toán kỹ thuật khó. Người dùng muốn có trải nghiệm tốt với các trình soạn thảo dạng khối như Platejs, và các giải pháp như Liveblocks là nỗ lực nhằm đơn giản hóa trải nghiệm phát triển

  • Đang phát triển một ứng dụng bằng Yjs cần hoạt động cả khi offline. Đây không phải là ứng dụng cộng tác thời gian thực, nhưng nếu xem server như một cộng tác viên thì có thể hình dung ra nhiều trường hợp sử dụng khác nhau

  • Đã dùng Yjs cho một dự án nhỏ, và phía client khá dễ học, dễ dùng. Ở phía server thì hầu như không có ví dụ bằng ngôn ngữ nào ngoài Node, nên đã dùng y-websocket của Node với một chút chỉnh sửa cùng với lưu trữ bền vững dựa trên LevelDB

  • Kỹ thuật gọi là fractional indexing là việc dùng chỉ mục dưới dạng phân số thay vì số nguyên. Có thắc mắc về việc có thể dùng nó được bao nhiêu lần

  • Thanh trượt độ trễ trong bản demo tương tác có vẻ hoạt động như một bộ đệm debounce chứ không phải độ trễ mạng. Khó hiểu vì sao lại như vậy

  • Bản demo tương tác rất đẹp. Tò mò không biết có thư viện nào được dùng để xây dựng nó không

  • Đã lấy được cỏ bốn lá nhưng ai đó đã phá hỏng. Xin dành lời khen cho người tạo ra nó. Rất vui

  • Trò chơi trong ảnh banner hơi trẻ con nhưng vui