Mengoptimalkan untuk CRDT yang Lebih Cepat
(josephg.com)- Tulisan yang menjelaskan proses menemukan dan menyelesaikan masalah pada library CRDT yang ada agar menjadi lebih cepat
→ Benchmark pengujian: input 180 ribu karakter, penghapusan 70 ribu karakter, perpindahan kursor 100 ribu kali
→ 5000x lebih cepat dibanding Automerge (5 menit vs. 56ms)
- Mengapa Automerge lambat?
→ Semakin besar dokumen, semakin besar dan lambat struktur data internal berbasis tree
→ Banyak menggunakan ImmutableJS; fiturnya bagus, tetapi lambat dan penggunaan memorinya besar
→ Setiap karakter yang dimasukkan diproses sebagai item terpisah
→ Automerge saat ini juga sedang mengimplementasikan versi Rust terpisah dengan performa yang ditingkatkan
- Library Yjs jauh lebih cepat daripada Automerge
→ Struktur datanya diperbaiki
- Diamond Types: implementasi CRDT berbasis Rust
→ Diubah ke Rust dan struktur datanya diperbaiki seperti Yjs agar menjadi lebih cepat
→ Menggunakan Range Tree alih-alih linked list
→ Saat dijalankan dengan Wasm, 3x lebih cepat daripada perubahan string di JS (0.19s, 1500x lebih cepat daripada Automerge)
→ Saat dijalankan sebagai Rust Native, 0.056s atau 5000x lebih cepat
Lampiran A - Jika ingin memakai CRDT di aplikasi saya, sebaiknya pakai apa?
-
Jika membuat alat kolaborasi berbasis dokumen, "Yjs direkomendasikan". Performanya bagus dan penggunaan memorinya kecil. Ke depannya akan jadi lebih cepat
-
Tentu saja Automerge juga sangat bagus. Kemungkinan akan menjadi lebih cepat tahun ini
-
Diamond memang sangat cepat, tetapi masih perlu banyak penambahan fitur
-
Jika menginginkan semantik DB ketimbang semantik dokumen, meski berbasis OT, ShareDB direkomendasikan
-
Menantikan Redwood
2 komentar
Tulisan ini adalah artikel terbaru dari Joseph Gentle, pengembang Google Wave yang juga penulis artikel di bawah ini. Sebaiknya dibaca terlebih dahulu.
Tulisan Raph Levien, pengembang Xi Editor, juga layak dijadikan referensi.
https://github.com/xi-editor/xi-editor/…