นักพัฒนาเว็บค้นพบ API ตาราง HTML ที่ถูกลืม ซึ่งจริงๆ แล้วไม่เคยหายไปไหน

ทีมชุมชน BigGo
นักพัฒนาเว็บค้นพบ API ตาราง HTML ที่ถูกลืม ซึ่งจริงๆ แล้วไม่เคยหายไปไหน

ศิลปะที่ถูกลืมของการจัดการตาราง HTML

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

การอภิปรายเริ่มต้นขึ้นเมื่อมีบทความทางเทคนิคเน้นย้ำถึงเมธอดต่างๆ เช่น insertRow() และ insertCell() ซึ่งเป็น DOM API เฉพาะทางที่ออกแบบมาเพื่อสร้างและจัดการตาราง HTML อย่างเป็นโปรแกรมโดยเฉพาะ แม้เมธอดเหล่านี้จะเป็นส่วนหนึ่งของมาตรฐานเว็บมาตั้งแต่ปลายทศวรรษ 1990 แต่พวกมันกลับกลายเป็นความรู้ที่หายากในยุคที่ถูกครอบงำโดยเฟรมเวิร์กแบบประกาศและแนวทางการใช้ innerHTML

โค้ดตัวอย่างที่แสดงวิธีการใช้ HTML Tables API สำหรับการจัดการตารางในการพัฒนาเว็บ
โค้ดตัวอย่างที่แสดงวิธีการใช้ HTML Tables API สำหรับการจัดการตารางในการพัฒนาเว็บ

ช่องว่างความรู้ระหว่างเจนเนอเรชัน

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

ฉันเริ่มลองผิดลองถูกกับเว็บเมื่อกว่า 20 ปีที่แล้ว แต่ส่วนใหญ่ทำงานด้านแบ็กเอนด์ในช่วง 10-15 ปีที่ผ่านมา ฉันไม่รู้เลยว่าปัจจุบันโปรแกรมเมอร์ไม่รู้เรื่องนี้

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

ประโยชน์เชิงปฏิบัติของ API ตารางเฉพาะทาง

HTML Tables API นำเสนอข้อได้เปรียบหลายประการที่นักพัฒนาหลายคนอาจพลาดไป ไม่เหมือนกับการจัดการ DOM ทั่วไปหรือแนวทางการต่อสตริง เมธอดเฉพาะทางเหล่านี้ให้อินเทอร์เฟซที่ใช้งานง่ายกว่าสำหรับการทำงานกับโครงสร้างข้อมูลแบบตาราง API นี้ช่วยให้นักพัฒนาสามารถอ้างอิงถึงเซลล์ตารางโดยตรงผ่านดัชนี แทรกแถวในตำแหน่งที่เจาะจง และจัดการส่วนต่างๆ ของตาราง เช่น ส่วนหัว ส่วนเนื้อหา และส่วนท้าย โดยไม่ต้องเรนเดอร์ตารางทั้งตารางใหม่

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

เมธอด API หลักของตาราง HTML:

  • insertRow(position): แทรกแถวใหม่ที่ตำแหน่งที่ระบุ
  • insertCell(position): แทรกเซลล์เข้าไปในแถวที่ตำแหน่งที่ระบุ
  • rows[]: การเข้าถึงแถวของตารางในรูปแบบอาร์เรย์
  • cells[]: การเข้าถึงเซลล์ของแถวในรูปแบบอาร์เรย์

เหตุใดตารางจึงตกยุค

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

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

กรณีสมัยใหม่สำหรับตารางพื้นเมือง

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

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

ข้อดีของตาราง HTML แบบดั้งเดิม:

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

ปัญหาของเฟรมเวิร์ก

แง่มุมที่น่าสนใจของการอภิปรายมุ่งเน้นไปที่ว่า JavaScript frameworks สมัยใหม่มีปฏิสัมพันธ์กับ DOM APIs ระดับล่างเหล่านี้อย่างไร เฟรมเวิร์กแบบประกาศส่วนใหญ่เช่น React, Vue และ Angular ไม่ได้ใช้เมธอดตารางเฉพาะทางภายใน แต่กลับพึ่งพาการประสาน virtual DOM ของตัวเองและการสร้างองค์ประกอบทั่วไป ซึ่งหมายความว่าแม้แต่นักพัฒนาที่ทำงานกับตารางอย่างกว้างขวางในแอปพลิเคชันที่ใช้เฟรมเวิร์ก อาจไม่เคยพบกับความสามารถพื้นฐานของเบราว์เซอร์เหล่านี้

นักพัฒนาบางส่วนแสดงความกังวลเกี่ยวกับเลเยอร์ abstraction นี้ที่สร้างการตัดขาดจากความสามารถของแพลตฟอร์มพื้นฐาน อย่างไรก็ตาม บางคนตั้งข้อสังเกตว่าแนวทางแบบคอมโพเนนต์ของเฟรมเวิร์กสมัยใหม่มักทำให้วิธีการสร้าง DOM เฉพาะเจาะจงมีความเกี่ยวข้องน้อยลง เนื่องจากเฟรมเวิร์กจัดการการจัดการ DOM จริงอยู่เบื้องหลัง

ทางเลือกสมัยใหม่ที่นิยมใช้:

  • CSS Grid สำหรับการจัดวางเลย์เอาต์ (ไม่ใช่สำหรับข้อมูลแบบตาราง)
  • CSS Flexbox สำหรับการจัดวางเลย์เอาต์แบบมิติเดียว
  • โครงสร้างแบบ Div ที่มี ARIA roles
  • ไลบรารีคอมโพเนนต์ของ JavaScript framework
  • Canvas หรือ SVG สำหรับการแสดงผลข้อมูลที่ซับซ้อน

มองไปข้างหน้า

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

การปรับปรุง API ตารางที่เป็นไปได้ที่นักพัฒนาแนะนำรวมถึงการสนับสนุนที่ดีขึ้นสำหรับการสร้างองค์ประกอบ TH (table header) โดยตรง ความสามารถในการเรียงลำดับและกรองในตัวที่สร้างไว้ในเบราว์เซอร์ และเมธอดที่ใช้งานง่ายมากขึ้นสำหรับการดำเนินการตารางทั่วไป การอภิปรายสะท้อนถึงความสนใจที่เพิ่มขึ้นในการเสริมสร้างความสามารถพื้นฐานของเบราว์เซอร์ แทนที่จะพึ่งพาไลบรารี JavaScript ทั้งหมดสำหรับรูปแบบ UI ทั่วไป

สรุป

การฟื้นตัวของความสนใจใน HTML Tables API ที่ไม่คาดคิดทำหน้าที่เป็นเครื่องเตือนใจว่าการวิวัฒนาการอย่างรวดเร็วของการพัฒนาเว็บบางครั้งอาจทิ้งความสามารถพื้นฐานที่มีประโยชน์ไว้ข้างหลัง แม้เฟรมเวิร์กสมัยใหม่จะให้ abstraction ที่ทรงพลัง แต่การทำความเข้าใจแพลตฟอร์มพื้นฐานยังคงมีคุณค่า การอภิปรายเกี่ยวกับ API ตารางได้เน้นย้ำทั้งการเปลี่ยนแปลงระหว่างเจนเนอเรชันในความรู้การพัฒนาเว็บและคุณค่าอันยั่งยืนของ HTML ที่มีความหมาย

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

อ้างอิง: Abandonware of the web: do you know that there is an HTML tables API?