Duper ตั้งเป้าแซงหน้า JSON ด้วยคุณสมบัติที่เป็นมิตรต่อนักพัฒนา

ทีมชุมชน BigGo
Duper ตั้งเป้าแซงหน้า JSON ด้วยคุณสมบัติที่เป็นมิตรต่อนักพัฒนา

ในโลกของรูปแบบข้อมูล JSON ครองตำแหน่งราชาแห่งไฟล์คอนฟิกูเรชันและการแลกเปลี่ยนข้อมูลมายาวนาน อย่างไรก็ตาม มีผู้ท้าชิงใหม่ชื่อ Duper ได้ปรากฏตัวขึ้น โดยสัญญาว่าจะเป็นส่วนขยายของ JSON ที่เป็นมิตรกับมนุษย์มากขึ้น ด้วยการปรับปรุงความสะดวกสบายในการใช้งาน ประเภทข้อมูลเพิ่มเติม และตัวระบุเชิงความหมาย ขณะที่นักพัฒนากำลังค้นพบรูปแบบใหม่นี้ ชุมชนก็กำลังถกเถียงกันอย่างจริงจังเกี่ยวกับการนำไปใช้จริง การแลกเปลี่ยนด้านประสิทธิภาพ และว่าโลกนี้ต้องการมาตรฐานการซีเรียลไลซ์ข้อมูลเพิ่มเติมอีกหรือไม่

การถกเถียงเกี่ยวกับประสบการณ์ของนักพัฒนา

การสนทนาเกี่ยวกับ Duper เผยให้เห็นชุมชนที่กังวลกับรายละเอียดการนำไปใช้จริงอย่างลึกซึ้ง แทนที่จะเป็นเพียงประโยชน์ทางทฤษฎี นักพัฒนาตระหนักได้ทันทีถึงศักยภาพของ Duper ในฐานะรูปแบบไฟล์คอนฟิกูเรชัน ซึ่งการรองรับความคิดเห็น เครื่องหมายจุลภาคต่อท้าย และคีย์ที่ไม่ต้องใส่เครื่องหมายคำพูด สามารถปรับปรุงประสบการณ์การเขียนได้อย่างมีนัยสำคัญ อย่างไรก็ตาม ความกังวลเกี่ยวกับผลกระทบต่อประสิทธิภาพและขนาดบันเดิลก็เกิดขึ้นอย่างรวดเร็ว โดยเฉพาะสำหรับแอปพลิเคชันเว็บ

ฉันคิดว่าวิธีที่เจ๋งคือใช้สิ่งนี้เป็นปลั๊กอินเขียนใน VS Code เช่นเดียวกับ prettier: เขียน Duper (หรือ JSON5 หรืออะไรก็ตาม) แล้วจึงแปลงมันเป็น json ปกติโดยอัตโนมัติเมื่อกด cmd-s

คำแนะนำนี้เน้นย้ำถึงแนวทางที่ปฏิบัติได้จริง ซึ่งนักพัฒนาสามารถเพลิดเพลินกับไวยากรณ์ที่ดีขึ้นของ Duper ในระหว่างการพัฒนา ในขณะที่ยังคงความเข้ากันได้กับ JSON สำหรับการผลิต ชุมชนยังตั้งข้อสังเกตว่าเครื่องมือที่มีอยู่เช่น Prettier ได้ให้การปรับปรุงความสะดวกสบายเหล่านี้บางส่วนเมื่อทำงานกับ JSON5 ไปแล้ว ถึงแม้ว่าการแปลงจะไม่สามารถสร้าง JSON ที่ถูกต้องได้เสมอไป

ความท้าทายด้านประสิทธิภาพและการนำไปใช้งาน

ส่วนสำคัญของการอภิปรายมุ่งเน้นไปที่การพิจารณาด้านประสิทธิภาพ โดยเฉพาะอย่างยิ่งการเปรียบเทียบการแยกวิเคราะห์ Duper กับการแยกวิเคราะห์ JSON ดั้งเดิมในสภาพแวดล้อม JavaScript นักพัฒนาชี้ให้เห็นว่าการนำไปใช้งาน JSON.parse และ JSON.stringify ดั้งเดิมใน JavaScript engines รุ่นใหม่เช่น V8 ถูกปรับให้เหมาะสมอย่างมาก โดยมีการปรับปรุงล่าสุดที่ทำให้ JSON.stringify เร็วขึ้นถึง 2 เท่าสำหรับกรณีทั่วไป การนำไปใช้งาน Duper ใน WebAssembly ขณะนี้มีน้ำหนักประมาณ 488 kB ก่อนบีบอัด (159 kB หลังบีบอัดด้วย gzip) ซึ่งแสดงถึงการเพิ่มขนาดบันเดิลที่มากสำหรับแอปพลิเคชันเว็บ

ชุมชนได้เสนอวิธีแก้ปัญหาที่สร้างสรรค์เพื่อเชื่อมช่องว่างด้านประสิทธิภาพนี้ โดยแนะนำแนวทางแบบไฮบริดที่ Duper สามารถถูกแปลงเป็น JSON มาตรฐาน แล้วจึงเพิ่มประสิทธิภาพด้วยประเภทพิเศษในขั้นตอนหลังการประมวลผล ซึ่งจะใช้ประโยชน์จากตัวแยกวิเคราะห์ JSON ที่ปรับให้เหมาะสมแล้วของรันไทม์ ในขณะที่ยังคงรองรับคุณสมบัติขยายของ Duper เช่น การจัดการข้อมูลไบนารี ผ่านขั้นตอนการประมวลผลเพิ่มเติม

ข้อพิจารณาด้านประสิทธิภาพ

  • การแยกวิเคราะห์ JSON แบบเนทีฟใน JavaScript engines ได้รับการปรับให้ทำงานอย่างมีประสิทธิภาพสูง
  • Duper WebAssembly bundle: ขนาดประมาณ 488 kB แบบไม่บีบอัด, 159 kB แบบ gzip
  • แนวทางแบบผสมผสานที่เสนอ: แปลง Duper ไปเป็น JSON จากนั้นเพิ่มประสิทธิภาพด้วยประเภทข้อมูลพิเศษ
  • ข้อกังวลเกี่ยวกับประสิทธิภาพการเข้ารหัสข้อมูลไบนารีด้วยอักขระ escape เทียบกับ base64

คำถามเรื่องการเพิ่มขึ้นของมาตรฐาน

อย่างหลีกเลี่ยงไม่ได้ การอภิปรายได้เปลี่ยนไปสู่คำถามโบราณเกี่ยวกับว่าเราต้องการมาตรฐานอีกแล้วหรือไม่ การอ้างอิงถึงการ์ตูน XKCD ที่มีชื่อเสียงเกี่ยวกับการเพิ่มขึ้นของมาตรฐานปรากฏขึ้นหลายครั้ง สะท้อนถึงความระมัดระวังของนักพัฒนาในการเพิ่มรูปแบบอื่นเข้าไปในสนามที่แออัดอยู่แล้ว อย่างไรก็ตาม การสนทนายังเผยให้เห็นความหงุดหงิดอย่างจริงจังกับทางเลือกที่มีอยู่ - ปัญหาความกำกวมของ YAML ข้อจำกัดของ TOML กับแท็บในสตริง และความเข้ากันได้กับ JSON ที่ไม่สมบูรณ์ของ JSON5

ที่น่าสนใจคือ นักพัฒนาบางคนแนะนำว่ารูปแบบที่ชนะในที่สุดอาจถูกกำหนดโดยความเข้ากันได้กับระบบ AI ขณะที่โมเดลภาษาขนาดใหญ่เริ่มมีบทบาทมากขึ้นในการสร้างโค้ด รูปแบบที่ระบบเหล่านี้สามารถผลิตและแยกวิเคราะห์ได้ง่ายอาจได้เปรียบ ซึ่งเพิ่มมิติใหม่ให้กับการต่อสู้ของรูปแบบข้อมูล นอกเหนือจากการพิจารณาด้านการอ่านได้โดยมนุษย์และประสิทธิภาพแบบดั้งเดิม

ตารางเปรียบเทียบฟีเจอร์

ฟีเจอร์ Duper JSON JSON5 YAML TOML
คอมเมนต์
Trailing Commas
Unquoted Keys
รองรับข้อมูลไบนารี จำกัด
ประเภทวันที่/เวลา อยู่ระหว่างพิจารณา
เข้ากันได้กับ JSON - บางส่วน

ระบบประเภทและทิศทางในอนาคต

ชุมชนได้ให้ข้อเสนอแนะอย่างละเอียดเกี่ยวกับระบบประเภทของ Duper โดยเฉพาะอย่างยิ่งเกี่ยวกับการขาดการรองรับวันที่และเวลาโดยธรรมชาติ แม้ผู้สร้างจะแย้งในตอนแรกว่าโดยทั่วไปแล้ววันที่จะถูกส่งเป็นสตริงใน JSON และสามารถใช้ตัวระบุเชิงความหมายได้ แต่เหล่านักพัฒนาก็โต้กลับ โดยชี้ให้เห็นถึงความสำคัญของการจัดการเรื่องเวลาที่เหมาะสมในแอปพลิเคชันสมัยใหม่ การอภิปรายได้พัฒนาจนรวมถึงความแตกต่างที่ซับซ้อนระหว่างการแสดงวันที่-เวลาประเภทต่างๆ รวมถึงความแตกต่างระหว่างการประทับเวลา UTC อย่างง่ายและวันที่-เวลาแบบมีโซนที่คำนึงถึงกฎการเปลี่ยนเขตเวลา

การแลกเปลี่ยนนี้แสดงให้เห็นว่าการออกแบบรูปแบบข้อมูลต้องสร้างสมดุลระหว่างความเรียบง่ายกับความต้องการที่ซับซ้อนของแอปพลิเคชันในโลกจริง ผู้สร้างดูเหมือนจะยอมรับข้อเสนอแนะนี้ โดยแนะนำว่าการรองรับวันที่และเวลาอาจถูกเพิ่มเข้าไปในรูปแบบตามคำแนะนำของชุมชน ถึงแม้ว่าสิ่งนี้จะเพิ่มความซับซ้อนให้กับตัวแยกวิเคราะห์อย่างหลีกเลี่ยงไม่ได้

การสนทนาที่ดำเนินอยู่เกี่ยวกับ Duper เผยให้เห็นชุมชนนักพัฒนาที่ทั้งกระตือรือร้นที่จะปรับปรุงประสบการณ์ของนักพัฒนา และตระหนักถึงความท้าทายในการแนะนำมาตรฐานใหม่อย่าง realist แม้ว่าตอนนี้การครองตำแหน่งของ JSON จะดูมั่นคง แต่จุดปัญหาที่ระบุไว้โดยเฉพาะอย่างยิ่งรอบๆ การเขียนไฟล์คอนฟิกูเรชันและการจัดการข้อมูลไบนารี ชี้ให้เห็นว่ายังมีพื้นที่สำหรับนวัตกรรมในด้านนี้

อ้างอิง: Duper The format that's super!