1 poin oleh GN⁺ 2023-11-06 | 1 komentar | Bagikan ke WhatsApp
  • Artikel tentang proses membangun parser JSON berperforma tinggi menggunakan bahasa pemrograman Go
  • Proyek yang bertujuan mendukung pekerjaan streaming, kompatibilitas dengan paket encoding/json, serta menyediakan API tanpa alokasi atau dengan alokasi terbatas
  • Artikel yang menjelaskan kompleksitas waktu parsing JSON, sambil menekankan bahwa batas bawah waktu yang dibutuhkan untuk memproses input adalah ukuran input itu sendiri
  • Artikel tentang proses tokenisasi yang mengubah aliran byte menjadi aliran token JSON
  • Artikel yang menjelaskan proses membaca data dari file JSON, sambil menyoroti kesulitan penggunaan io.Reader
  • Penulis memperkenalkan konsep byteReader yang bekerja mirip bufio.Reader, tetapi dengan API yang lebih efisien
  • Artikel tentang proses pemindaian untuk mengidentifikasi karakter mana yang merupakan token dan mana yang sekadar spasi kosong
  • Penulis menjelaskan cara meningkatkan performa scanner dengan menghindari pemanggilan fungsi pada hot path
  • Artikel tentang proses decoding untuk memeriksa apakah urutan token valid
  • Penulis mengusulkan bahwa performa decoder dapat ditingkatkan dengan menggunakan computed goto yang menyimpan method secara langsung dan memanggilnya secara langsung

1 komentar

 
GN⁺ 2023-11-06
Komentar Hacker News
  • Artikel yang memberikan panduan terperinci tentang membangun parser JSON berperforma tinggi
  • Penulis mengusulkan bahwa JSON tidak memerlukan tokenisasi eksplisit, dan parsing serta tokenisasi dapat digabungkan
  • Untuk performa yang lebih baik, penulis menyarankan menghindari alokasi heap saat tokenisasi dan parsing
  • Pemilihan library JSON dapat berdampak besar pada performa, dengan perbedaan yang bisa mencapai 3-10x
  • Jika kelas yang akan diserialisasi atau dideserialisasi sudah diketahui saat waktu kompilasi, Jackson Java bekerja dengan baik, tetapi artikel tersebut menyarankan bahwa coding yang cermat dan profiling dapat meningkatkan performa hingga 2x
  • Untuk lingkungan produksi berperforma tinggi, penulis merekomendasikan untuk melihat karya Daniel Lemire atau MinIO yang mem-porting-nya ke Go
  • Penulis juga menyebut halaman benchmark JSON di RapidJSON
  • Dibahas solusi untuk masalah "pabrik sampah" dalam tokenisasi, yang mencakup penggunaan fungsi dari byteslice ke T alih-alih string
  • Penulis menyebut pendekatan serupa yang digunakan untuk membangun tokenizer dan parser GraphQL yang sangat cepat tanpa alokasi memori
  • Penulis membahas computed goto sebagai teknik yang lebih efisien dalam penggunaan ruang
  • Penulis mengusulkan bahwa library standar dapat ditingkatkan dengan desain API yang lebih baik, tetapi parser streaming sepenuhnya yang hanya mengisi setengah struktur sebelum menemukan error adalah hal yang tidak realistis
  • Penulis tidak setuju dengan gagasan bahwa tidak realistis untuk mengharapkan sebagian besar aplikasi memiliki seluruh input di memori
  • Artikel tersebut menyampaikan ucapan terima kasih kepada Phil Pearl, dan merekomendasikan untuk melihat library Sonic di GitHub