วันนี้มีกระทู้หนึ่งอยากแชร์ครับ เป็นคำถามที่สำหรับ developer หลายคนมักตั้งคำถามกัน และจริงๆ อยากแชร์เผื่อใครที่ยังไม่ทราบด้วยว่ามันมีด้วยเหรอ
AJAX ทุกคนคงจะทราบกันดี เรียกว่าเป็นของหากินในยุคสมัยนี้เลย เขียนไม่เป็นถือว่าบาปกันเลยทีเดียว ที่นี้เมื่องานสายเว็บเราเริ่มก้าวสู่คำว่า web application โจทย์หลายๆ อย่างจะเริ่มบีบเราจนเราเริ่มรู้ตัวว่า AJAX ไม่พอใช้แล้ว
กระทู้นี้จึงเป็นคำถามที่คนไปค้นคว้ามาแล้วมาตั้งว่า ตามรายการต่อไปนี้
- AJAX
- AJAX Long Polling
- WebSocket
- WebRTC
- Server-Sent Events
แต่ล่ะกันเป็นยังไง ควรใช้กับอะไร ข้อดีข้อเสียคืออะไร
- AJAX
- AJAX Long Polling
- WebSocket
- WebRTC
- Server-Sent Events
แต่ล่ะกันเป็นยังไง ควรใช้กับอะไร ข้อดีข้อเสียคืออะไร
แน่นอนว่า... ผมขี้เกียจแปลทั้งหมดครับ ดังนั้นผมจะเรียบเรียงและสรุปส่วนใจความเนื้อๆ ให้ล่ะกันนะครับ
AJAX - ไม่แปล ถือว่ารู้กัน ไม่รู้บาป
AJAX Long Polliing อันนี้ถือว่าเป็นขั้นสูงกว่า AJAX นิดหนึ่ง ใช้กับงานที่ต้องรอการประมวลผลหรือเวลา เช่น ระบบ checkout ตระกร้าสินค้า แล้วต้องรอคิวการทำงานเบื้องหลังซึ่งไม่เสร็จในทันที วิธีการคือใช้การต่อแบบ AJAX แต่ฝั่ง server จะใช้ฟังค์ชั่น พวก while กับ sleep ทำการหน่วงเวลาเพื่อทำการตรวจสอบงานก่อนจะส่งผล เพราะงานนั้นๆ อาจจะทำงานช้าหรือเข้าคิว ทีนี้โดยตามปกติ AJAX Long Polling จะไม่หน่วงเวลา request นั้นๆ ยาวจนเกินไป เพราะส่วนมาก browser จะตัด connection ทิ้งไปซะก่อน เมื่อถึงช่วงหนึ่งควรคืน response ไป แล้ว Javascript ต้องทำการ reconnect AJAX ทันที จนกว่าจะได้ผลลัพท์การทำงานที่แท้จริงตาม app logic นั้นๆ
WebSocket อันนี้ใช้ในการติดต่อระหว่าง client และ server แบบสองทาง โดยเป็นการติดต่อแบบตลอดเวลาเท่าที่ต้องการจะติดต่อ มีขั้นตอนการ handshake ครั้งแรกผ่าน http แล้วหลังจากนั้นจะเป็นการเปิด tcp คุยกับสองทางตลอดเวลา เหมาะทำไปทำระบบที่ต้องคุยสองทางตลอดเวลา เช่น ระบบแชทรูท หรือเกมส์ออนไลน์ ข้อดีคือข้อมูลที่คุยกับจะมีการเข้ารหัส และสามารถส่งข้อมูลกันได้ realtime
WebRTC อันนี้ใช้สำหรับการติดต่อแบบ peer to peer โดยไว้สำหรับส่งข้อมูลที่ยอมให้เสียหายได้บ้าง แต่แลกกับความ realtime สูง และส่งข้อมูลได้มาก เช่น การส่งวิดีโอและเสียง โดยส่วนมากจะใช้ทำระบบ video call ซึ่งอาจยอมให้ภาพวิดีโอบ้างส่วนเพี้ยนได้ แต่จะแสดงผลได้ตลอดโดย timing ไม่เพี้ยน web rtc จะอาศัย server ทำการบอกข้อมูลของ peer ที่จะต่อด้วย หลังจากที่ peer เจอกันเองแล้ว server ก็ไม่มีความจำเป็นอีก
Server-Sent Events อันนี้เป็นการติดต่อจาก server มา client แบบทางเดียว โดยครั้งแรก client จะเรียก server เพื่อเปิดช่องทางการติดต่อแบบระยะยาว แล้วจากนั้น server จะเป็นฝ่ายส่งข้อมูลได้อย่างเดียวจนกว่า client จะหรือ server จะสั่งปิด เหมาะกับการทำระบบ ticker จาก server เช่น อัพเดตราคา stock เป็นต้น เป็นเทคโนโลยีที่ควรใช้มากกว่า AJAX Long Polling เพียงแต่มีข้อเสียในตอนนี้คือ IE ไม่รองรับ (แต่มี polyfill อยู่ใช้ได้ใน IE10 และ 11)
ลองศึกษากันเพิ่มดูนะครับ
//โจ้
ปล. อีกกระทู้แนะนำให้อ่านการเทียบระหว่าง Websocket และ Server-Sent
http://stackoverflow.com/questions/10028770/html5-websocket-vs-long-polling-vs-ajax-vs-webrtc-vs-server-sent-events