กรอไปข้างหน้าจนถึงเดือนธันวาคม 2017 เว็บซ็อกเก็ตได้รับการสนับสนุนโดย (ในทางปฏิบัติ) ทุกเบราว์เซอร์และการใช้งานเป็นเรื่องธรรมดามาก
อย่างไรก็ตามนี่ไม่ได้หมายความว่า Websockets มีการจัดการเพื่อแทนที่ AJAX อย่างน้อยก็ไม่สมบูรณ์โดยเฉพาะอย่างยิ่งเมื่อมีการปรับ HTTP / 2 ขึ้นเรื่อย ๆ
คำตอบสั้น ๆ ก็คือ AJAX ยังคงยอดเยี่ยมสำหรับแอปพลิเคชัน REST ส่วนใหญ่แม้ว่าจะใช้ Websockets ก็ตาม แต่พระเจ้าอยู่ในรายละเอียดดังนั้น ... :
AJAX สำหรับการสำรวจ?
การใช้ AJAX สำหรับการสำรวจ (หรือการสำรวจแบบยาว) กำลังจะตาย (และควรจะเป็น) แต่ก็ยังคงมีการใช้งานด้วยเหตุผลสองประการที่ดี (ส่วนใหญ่สำหรับเว็บแอปขนาดเล็ก):
สำหรับนักพัฒนาหลายคน AJAX นั้นง่ายต่อการเขียนโค้ดโดยเฉพาะอย่างยิ่งเมื่อมันมาถึงการเขียนโค้ดและออกแบบแบ็กเอนด์
ด้วย HTTP / 2 ค่าใช้จ่ายสูงสุดที่เกี่ยวข้องกับ AJAX (การสร้างการเชื่อมต่อใหม่) จะถูกตัดออกไปทำให้การโทร AJAX นั้นมีประสิทธิภาพมากโดยเฉพาะอย่างยิ่งสำหรับการโพสต์และอัปโหลดข้อมูล
อย่างไรก็ตามการกดปุ่ม Websocket นั้นเหนือกว่า AJAX (ไม่จำเป็นต้องรับรองความถูกต้องอีกครั้งหรือส่งส่วนหัวอีกต่อไปไม่ต้องใช้การปัดเศษ "ไม่มีข้อมูล" ฯลฯ ) เรื่องนี้ถูกกล่าวถึงหลายครั้ง
AJAX สำหรับ REST หรือไม่
การใช้ AJAX ที่ดีกว่าคือการเรียกใช้ REST API การใช้งานนี้ช่วยลดความยุ่งยากของฐานรหัสและป้องกันไม่ให้การเชื่อมต่อ Websocket ปิดกั้น (โดยเฉพาะการอัปโหลดข้อมูลขนาดกลาง)
มีหลายเหตุผลที่น่าสนใจที่จะชอบการโทร AJAX สำหรับ REST APIและการอัปโหลดข้อมูล:
AJAX API ได้รับการออกแบบในทางปฏิบัติสำหรับการโทร REST API และเป็นแบบที่เหมาะสม
ส่วนที่เหลือการโทรและการอัปโหลดโดยใช้ AJAX นั้นง่ายกว่าในการเขียนโค้ดทั้งบนไคลเอนต์และแบ็กเอนด์
เมื่อปริมาณข้อมูลเพิ่มขึ้นการเชื่อมต่อ Websocket อาจถูกบล็อกเว้นแต่ว่าการกระจายตัวของข้อความ / ตรรกะมัลติเพล็กซ์จะถูกเข้ารหัส
หากทำการอัพโหลดในการsend
โทรWebsocket ครั้งเดียวมันสามารถปิดกั้นการสตรีม Websocket ได้จนกว่าการอัปโหลดจะเสร็จสิ้น สิ่งนี้จะลดประสิทธิภาพโดยเฉพาะกับลูกค้าที่ช้าลง
การออกแบบทั่วไปใช้ข้อความ bidi ขนาดเล็กที่ถ่ายโอนผ่าน Websockets ในขณะที่ REST และการอัปโหลดข้อมูล (ไคลเอนต์ไปยังเซิร์ฟเวอร์) ใช้ประโยชน์จาก AJAX ที่ใช้งานง่ายเพื่อป้องกัน Websocket ไม่ให้ถูกบล็อก
อย่างไรก็ตามสำหรับโครงการขนาดใหญ่ความยืดหยุ่นที่ได้รับจาก Websockets และความสมดุลระหว่างความซับซ้อนของรหัสและการจัดการทรัพยากรจะทำให้ยอดเงินคงเหลืออยู่ในความโปรดปรานของ Websockets
ตัวอย่างเช่นการอัปโหลดจาก Websocket สามารถเสนอความสามารถในการอัปโหลดขนาดใหญ่ต่อหลังจากการเชื่อมต่อถูกยกเลิกและสร้างใหม่อีกครั้ง (โปรดจำไว้ว่าภาพยนตร์ 5GB ที่คุณต้องการอัปโหลด?)
ด้วยการเข้ารหัสโค้ดการกระจายตัวของการอัพโหลดทำให้ง่ายต่อการอัปโหลดขัดจังหวะต่อ (ส่วนที่ยากคือการเขียนโค้ด)
HTTP / 2 push เป็นอย่างไร
ฉันควรจะเพิ่มว่าคุณสมบัติการกด HTTP / 2 ไม่ได้ (และอาจเป็นไปไม่ได้) แทนที่ Websockets
เรื่องนี้เคยพูดถึงที่นี่มาก่อน แต่พอจะพูดถึงว่าการเชื่อมต่อ HTTP / 2 เดียวให้บริการเบราว์เซอร์ทั้งหมด (แท็บ / หน้าต่างทั้งหมด) ดังนั้นข้อมูลที่ถูกผลักโดย HTTP / 2 ไม่ทราบว่าเป็นแท็บ / หน้าต่างใด กำจัดความสามารถในการแทนที่ความสามารถของ Websocket ในการส่งข้อมูลโดยตรงไปยังแท็บ / หน้าต่างเบราว์เซอร์ที่ต้องการ
ในขณะที่ Websockets นั้นยอดเยี่ยมสำหรับการสื่อสารข้อมูลแบบสองทิศทางขนาดเล็ก AJAX ยังคงมีข้อดีหลายประการโดยเฉพาะอย่างยิ่งเมื่อพิจารณา payloads ที่มีขนาดใหญ่ขึ้น (อัพโหลดเป็นต้น)
และความปลอดภัย?
โดยทั่วไปยิ่งมีความไว้วางใจและการควบคุมมากขึ้นสำหรับโปรแกรมเมอร์โปรแกรมเมอร์ที่มีประสิทธิภาพยิ่งขึ้นและความกังวลด้านความปลอดภัยที่เพิ่มขึ้น
AJAX ตามธรรมชาติแล้วจะมีความได้เปรียบเพราะความปลอดภัยมันถูกสร้างไว้ในโค้ดของเบราว์เซอร์ (ซึ่งบางครั้งก็เป็นที่น่าสงสัย แต่ก็ยังมีอยู่)
ในทางกลับกันการโทร AJAX มีความอ่อนไหวต่อการโจมตี "คนที่อยู่ตรงกลาง" มากกว่าในขณะที่ปัญหาด้านความปลอดภัยของ Websockets มักจะเป็นข้อบกพร่องในรหัสแอปพลิเคชันที่แนะนำข้อบกพร่องด้านความปลอดภัย
โดยส่วนตัวแล้วฉันไม่คิดว่ามันจะมีความแตกต่างขนาดใหญ่ถ้ามีอะไรที่ฉันคิดว่าเว็บซ็อกเก็ตจะดีขึ้นเล็กน้อยโดยเฉพาะเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่
ความเห็นต่ำต้อยของฉัน
IMHO ฉันจะใช้ Websockets สำหรับทุกสิ่งยกเว้นการโทร REST API อัปโหลดข้อมูลขนาดใหญ่ฉันจะแยกส่วนและส่งผ่าน Websockets เมื่อเป็นไปได้
การสำรวจความคิดเห็น IMHO ควรผิดกฎหมายค่าใช้จ่ายในการรับส่งข้อมูลเครือข่ายน่ากลัวและการผลักดัน Websocket นั้นง่ายพอที่จะจัดการแม้กระทั่งสำหรับนักพัฒนาใหม่