1 điểm bởi GN⁺ 2023-11-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • Bài viết về quá trình xây dựng trình phân tích cú pháp JSON hiệu năng cao bằng ngôn ngữ lập trình Go
  • Dự án hướng tới hỗ trợ xử lý theo luồng, tương thích với gói encoding/json, và cung cấp API không cấp phát hoặc cấp phát hạn chế
  • Bài viết giải thích về độ phức tạp thời gian của việc phân tích JSON, nhấn mạnh rằng cận dưới của thời gian cần để xử lý đầu vào là kích thước của chính đầu vào
  • Bài viết về quá trình token hóa để chuyển đổi luồng byte thành luồng token JSON
  • Bài viết giải thích quá trình đọc dữ liệu từ tệp JSON, nhấn mạnh khó khăn khi sử dụng io.Reader
  • Tác giả giới thiệu khái niệm byteReader, hoạt động tương tự bufio.Reader nhưng có API hiệu quả hơn
  • Bài viết về quá trình quét để xác định ký tự nào là token và ký tự nào chỉ đơn thuần là khoảng trắng
  • Tác giả giải thích cách cải thiện hiệu năng của bộ quét bằng cách tránh gọi hàm trên đường nóng
  • Bài viết về quá trình giải mã để kiểm tra xem chuỗi token có hợp lệ hay không
  • Tác giả đề xuất có thể cải thiện hiệu năng của bộ giải mã bằng cách dùng computed goto, trong đó lưu trực tiếp các phương thức và gọi trực tiếp chúng

1 bình luận

 
GN⁺ 2023-11-06
Ý kiến trên Hacker News
  • Bài viết cung cấp hướng dẫn chi tiết về cách xây dựng trình phân tích cú pháp JSON hiệu năng cao
  • Tác giả cho rằng JSON không cần token hóa tường minh và có thể hợp nhất việc phân tích cú pháp với token hóa
  • Tác giả khuyến nghị tránh cấp phát heap trong quá trình token hóa và phân tích cú pháp để đạt hiệu năng tốt hơn
  • Việc lựa chọn thư viện JSON có thể ảnh hưởng lớn đến hiệu năng, với chênh lệch có thể lên tới 3-10 lần
  • Bài viết cho rằng nếu các lớp cần serialize hoặc deserialize đã được biết tại thời điểm biên dịch thì Jackson Java hoạt động tốt, nhưng việc viết mã cẩn thận và profiling có thể cải thiện hiệu năng gấp 2 lần
  • Đối với môi trường production hiệu năng cao, tác giả khuyến nghị xem công trình của Daniel Lemire hoặc MinIO, phiên bản port sang Go của nó
  • Tác giả cũng nhắc đến trang benchmark JSON của RapidJSON
  • Bài viết thảo luận về giải pháp cho vấn đề "nhà máy rác" trong token hóa, bao gồm việc dùng hàm từ byteslice sang T thay vì dùng chuỗi
  • Tác giả đề cập đến cách tiếp cận tương tự đã được dùng để xây dựng tokenizer và parser GraphQL rất nhanh, không cần cấp phát bộ nhớ
  • Tác giả thảo luận về computed goto như một kỹ thuật tiết kiệm không gian hơn
  • Tác giả cho rằng có thể cải thiện thư viện chuẩn bằng thiết kế API tốt hơn, nhưng một trình phân tích cú pháp streaming hoàn toàn mà chỉ phát hiện lỗi sau khi đã điền nửa cấu trúc là điều phi thực tế
  • Tác giả không đồng ý với quan điểm cho rằng trong hầu hết ứng dụng, việc kỳ vọng có toàn bộ đầu vào trong bộ nhớ là không thực tế
  • Bài viết gửi lời cảm ơn đến Phil Pearl và khuyến nghị xem qua thư viện Sonic trên GitHub