100 วัน, 87 เครื่องมือ, ไม่ต้องใช้เซิร์ฟเวอร์เลยสักเครื่อง

ผมใช้เวลา 100 วันในการสร้าง ToolKnit ซึ่งเป็นชุดเครื่องมือบนเบราว์เซอร์จำนวน 87 ชนิด

เว็บไซต์เครื่องมือส่วนใหญ่ทำงานแบบนี้:

  • คุณอัปโหลดไฟล์
  • เซิร์ฟเวอร์ประมวลผลไฟล์นั้น
  • คุณดาวน์โหลดผลลัพธ์

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

นี่คือสิ่งที่ผมได้เรียนรู้จากการสร้างโปรเจกต์โดยไม่มี backend

The Stack

  • HTML และ Tailwind CSS
  • Vanilla JavaScript
  • PHP สำหรับเก็บสถิติง่ายๆ เท่านั้น
  • ไม่ใช้ framework เลย ไม่ว่าจะเป็น React หรือ Vue

ทำไมต้องเป็น Static HTML?

  1. SEO ดีกว่า Google สามารถ crawl หน้าเว็บแบบ static ได้ทันที และไม่มีปัญหาเรื่องความล่าช้าจากการทำ hydration
  2. ความเร็วสูงกว่า ผู้ใช้สามารถใช้งานเครื่องมือได้ทันที โดยไม่ต้องรอโหลด JavaScript bundle ขนาดใหญ่
  3. ค่าใช้จ่ายต่ำ ผมแทบไม่ต้องใช้พลังประมวลผลของเซิร์ฟเวอร์เลย

ความท้าทาย การสร้าง 87 หน้าโดยไม่มี component เป็นเรื่องยาก ถ้าผมต้องการเปลี่ยนลิงก์ที่ footer ผมต้องตามไปแก้ไขถึง 87 ไฟล์ ผมจึงต้องเขียน Python script ขึ้นมาเพื่อจัดการเรื่องนี้

ผมได้เรียนรู้ถึงขีดจำกัดของเบราว์เซอร์:

  • การบีบอัด PDF นั้นยาก ต้องมีการจัดการ stream ที่ซับซ้อนเพื่อป้องกันไม่ให้ไฟล์เสียหาย
  • การสังเคราะห์เสียง (Audio synthesis) นั้นลึกซึ้ง การจะสร้างเสียงเปียโนที่สมจริงต้องใช้ oscillator หลายตัวและ custom harmonics
  • วิดีโอมีขนาดใหญ่ การใช้ ffmpeg.wasm นั้นใช้งานได้จริง แต่การต้องดาวน์โหลดไฟล์ขนาด 32 MB ถือเป็นภาระสำหรับผู้ที่ใช้การเชื่อมต่ออินเทอร์เน็ตความเร็วต่ำ

บทเรียนที่ยิ่งใหญ่ที่สุดของผม จงตัดฟีเจอร์ที่ "เกือบจะใช้งานได้" ทิ้งไป

ผมเคยสร้างเครื่องมือสำหรับ iPhone Live Photos แต่มันมีข้อบกพร่องหลักๆ 3 อย่าง:

  • การคำนวณมุมโค้ง (rounded corners) ใน Canvas API ผิดพลาด
  • การแปลงไฟล์วิดีโอ (transcoding) ใช้เวลานานเกินไป
  • แอปอย่าง WeChat ตัดข้อมูลที่ผมจำเป็นต้องใช้ทิ้งไป

เครื่องมือที่ทำงานได้เพียง 90% จะทำลายความเชื่อมั่น ถ้ามันยังไม่ดีพอ ก็อย่าเพิ่งปล่อยมันออกมา

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

สรุปผลการสร้างใน 100 วัน: • ปล่อยเครื่องมือไปแล้ว 87 ชนิด • ยกเลิกไป 3 ชนิด • ไม่มีการพึ่งพา framework เลย • มีการใช้งานรวมกว่า 3,000 ครั้ง

คุณกำลังสร้างเครื่องมือแบบ client-side อยู่หรือเปล่า? มาแชร์เรื่อง architecture ของคุณในคอมเมนต์ได้เลย

Source: https://dev.to/dngzihng114379/100-days-87-tools-zero-servers-what-i-learned-building-a-fully-client-side-utility-suite-1bh0