Under the Hood of the Grammarly Editor, Part Two: How Suggestions Work

Bài tóm tắt Grammarly 2022 3. Quy mô lớn Độ khó: Trung bình

Grammarly · 2022 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Phần hai của series về editor web của Grammarly (phần một về chỉnh sửa cộng tác thời gian thực, chưa ingest).

Bối cảnh

  • Editor dùng giao thức operational transformation (OT) với định dạng Delta (insert, delete, retain) cho cả văn bản, thay đổi của người dùng và gợi ý từ backend. Backend quét văn bản rồi gửi gợi ý về client.

Thay đổi chính

  • Gợi ý cũng là Delta: giao thức được mở rộng bằng một trường transform chứa Delta của thay đổi đề xuất; áp gợi ý chỉ là compose Delta văn bản với Delta gợi ý. Theo Grammarly, từ gợi ý sửa một từ tới viết lại cả câu, cả đoạn, giao thức chưa phải đổi lần nào.
  • Ràng buộc: mọi lệnh mới phải rebase được theo chỉnh sửa đang diễn ra của người dùng mà không chờ backend. Client có Suggestions Repository (trạng thái registered → applied) và Delta Manager rebase mọi gợi ý còn hiệu lực sau mỗi thay đổi văn bản (ví dụ vị trí retain dịch thêm 2 khi người dùng sửa "A" thành "The"); gợi ý cho cả câu chỉ ẩn khi người dùng sửa đúng phần được tô.
  • Áp nhiều gợi ý một lần: lặp áp từng cái làm UI đứng vài giây, vì việc tốn nhất là cập nhật Delta văn bản, lặp lại cho mỗi gợi ý. Cách sửa: compose các Delta gợi ý thành một rồi áp một lần. Bản đầu làm hỏng văn bản vì mỗi gợi ý được tạo cho trạng thái văn bản trước đó; phải rebase từng gợi ý lên Delta đã gộp trước khi compose.

Vì sao

  • Trình duyệt chỉ làm một việc mỗi lúc; nhiều lần cập nhật nhỏ liên tiếp trên trạng thái lớn khiến UI đứng, còn một lần cập nhật gộp thì không.

Bài học cho SWE

  • Biểu diễn mọi thay đổi (người dùng, máy) cùng một định dạng ghép được cho phép thêm loại thay đổi mới mà không đổi giao thức.
  • Gộp nhiều thao tác thành một lần cập nhật trạng thái phải giữ ngữ nghĩa thứ tự: mỗi thao tác cần được biến đổi theo các thao tác đã gộp trước nó.

Liên quan