19 คะแนน โดย xguru 2021-08-02 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความอธิบายกระบวนการค้นหาและแก้ปัญหาของไลบรารี CRDT ที่มีอยู่เดิมเพื่อทำให้เร็วขึ้น

→ การทดสอบเบนช์มาร์ก: ป้อนข้อความ 180,000 ตัวอักษร, ลบ 70,000 ตัวอักษร, ย้ายเคอร์เซอร์ 100,000 ครั้ง

→ เร็วกว่า Automerge 5000x (5 นาที vs. 56ms)

  • ทำไม Automerge ถึงช้า?

→ ยิ่งเอกสารมีขนาดใหญ่ โครงสร้างข้อมูลแบบต้นไม้ภายในก็ยิ่งใหญ่ขึ้นและช้าลง

→ ใช้ ImmutableJS เป็นจำนวนมาก ซึ่งฟีเจอร์ดีแต่ช้าและใช้หน่วยความจำมาก

โฆษณา

→ ประมวลผลอักขระที่ป้อนเข้าไปแต่ละตัวเป็นไอเท็มแยกกัน

→ ขณะนี้ Automerge กำลังพัฒนาเวอร์ชัน Rust ที่ปรับปรุงประสิทธิภาพไว้แยกต่างหาก

  • ไลบรารี Yjs เร็วกว่า Automerge มาก

→ ปรับปรุงโครงสร้างข้อมูล

  • Diamond Types: อิมพลีเมนเทชัน CRDT บน Rust
โฆษณา

→ เปลี่ยนภาษาเป็น Rust และปรับปรุงโครงสร้างข้อมูลแบบเดียวกับ Yjs เพื่อให้เร็วขึ้น

→ ใช้ Range Tree แทน linked list

→ เมื่อรันด้วย Wasm เร็วกว่า string mutation ใน JS 3 เท่า (0.19s, เร็วกว่า Automerge 1500 เท่า)

→ เมื่อรันแบบ Rust Native ใช้เวลา 0.056s เร็วกว่า 5000 เท่า

ภาคผนวก A - ถ้าจะใช้ CRDT ในแอปของฉัน ควรใช้อะไรดี?

  • ถ้าจะสร้างเครื่องมือทำงานร่วมกันแบบเอกสาร แนะนำ "Yjs" เพราะประสิทธิภาพดีและใช้หน่วยความจำน้อย และน่าจะเร็วขึ้นอีก

    โฆษณา
  • แน่นอนว่า Automerge ก็ยอดเยี่ยม และน่าจะเร็วขึ้นอีกภายในปีนี้

  • Diamond เร็วมากจริง ๆ แต่ยังต้องเพิ่มฟีเจอร์อีกมาก

  • ถ้าต้องการ DB semantics มากกว่า document semantics แม้จะอิงตาม OT แต่แนะนำ ShareDB

  • กำลังตั้งตารอ Redwood

2 ความคิดเห็น

 
xguru 2021-08-02

บทความนี้เป็นบทความล่าสุดของ Joseph Gentle ผู้พัฒนา Google Wave ซึ่งเป็นผู้เขียนบทความด้านล่างนี้ อ่านก่อนจะช่วยให้เข้าใจได้ดีขึ้น

 
alstjr7375 2021-08-02

บทความของ Raph Levien ผู้พัฒนา Xi Editor ก็น่าอ้างอิงเช่นกัน

https://github.com/xi-editor/xi-editor/…