Reactive Extensions (Rx) คือชุดคำสั่งและอินเทอร์เฟซที่ถูกนำมาใช้แก้ปัญหามากมายทั้งแบบง่ายและซับซ้อนของเหล่านักพัฒนา ซึ่งการนำมาใช้ร่วมกับจาวานั้นจะทำให้คุณสามารถจัดการแอคชั่นได้หลายตัวบนอีเวนต์ของระบบที่หลากหลายได้พร้อมกัน
นอกจากนี้ยังช่วยในการเขียนโค้ดให้สวยงามโดยที่คงความเรียบง่ายไว้ได้ ดังนั้น ทาง TechNotification.com จึงได้รวบรวมเหตุผลสำคัญ 5 ประการที่คุณควรนำ RxJava มาใช้ในโปรเจ็กต์ไว้ดังต่อไปนี้
1. เป็นแนวทางแบบ Functional
การเขียนโปรแกรมแบบฟังก์ชั่นนอลนั้นได้แก่การเน้นใช้ฟังก์ชั่นในฐานะพารามิเตอร์ รวมทั้งในฐานะผลลัพธ์ของฟังก์ชั่นอื่น เช่น Map ที่เป็นฟังก์ชั่นลำดับสูงที่นิยมใช้ในภาษาโปรแกรมมิ่งหลายชนิด ถ้านำมาใช้กับทุกองค์ประกอบของรายการ ก็จะคืนค่าที่เป็นรายการของผลลัพธ์มาเช่นกัน
ดังนั้น ถ้าคุณคุ้นเคยกับการเขียนโปรแกรมแบบเน้นใช้ฟังก์ชั่น และเข้าใจหลักการของ Map และ Zip แล้ว ก็จะสามารถเรียนรู้ RxJavaได้ง่ายขึ้นด้วย
2. ใช้ Operator ผ่านตัวกำหนดเวลา
มีหลาย Operator ที่จำเป็นต้องระบุ Scheduler ถึงจะใช้ฟังก์ชั่นได้ นอกจากนี้ยังมีวิธีแบบโอเวอร์โหลดที่ใช้ computation(), delay()ในฐานะ Scheduler ได้ด้วย ซึ่งคุณควรประกาศ Scheduler ที่ต้องการในฐานะอากิวเมนต์ที่สามทุกครั้งถ้าไม่ต้องการใช้ตัวComputation Scheduler
และนอกจาก delay() แล้ว คุณยังมี Operator อื่นๆ มากมายที่สามารถเปลี่ยนการกำหนดเวลาได้ด้วยไม่ว่าจะเป็น interval (), debounce (), timer (), skip (), timeout ()เป็นต้น
3. ทำแคชได้ง่าย
การ Caching ถือเป็นหนึ่งในวิธีที่ดีที่สุดในการยกระดับประสิทธิภาพของแอพพลิเคชั่น เนื่องจากช่วยลดการเรียกใช้งานบนเครือข่ายด้วยการแคชข้อมูลตอบสนองของเน็ตเวิร์ก และจะเรียกดูข้อมูลได้รวดเร็วมากขึ้นด้วยถ้าข้อมูลถูกแคชไว้
การทำแคชนั้นมีสองรูปแบบคือ แบบ Memory Cache ที่เก็บข้อมูลไว้ในหน่วยความจำของแอพพลิเคชั่น และแบบ Disk Cache ที่บันทึกข้อมูลลงบนดิสก์
4. ใช้ Subject ได้
ถ้าคุณกำลังทำงานกับอ๊อพเจ็กต์แล้ว ก็ควรทราบว่าลำดับการเปลี่ยนแปลงในข้อมูลที่ถูกส่งไปยังSubjectonNextโดยดีฟอลต์ และจะถูกประมวลผลบน Thread เดียวกัน โดยจะมีการเรียกใช้ onNext() จนกว่าจะไม่พบ Operator observeOn()บน Sequence นั้นๆ
นั่นคือ เวลาที่เราลงทะเบียนกับ Subject จะมีการคืนค่าในทันที จากนั้นจึงถูกประมวลผลใน Thread ของ Shedulers.io()ซึ่งหลังจากนั้น เมื่อมีข้อความถัดขึ้นมาแสดงใน Subject ก็จะใช้ Thread ในการเรียกใช้ onNext()
5. สามารถสตรีมได้แบบ Asynchronous
สมมติว่าคุณต้องการส่งคำร้องขอไปยังฐานข้อมูลเพื่อต้องการทั้งข้อความและการตั้งค่าในทันที โดยเมื่อกระบวนการทั้งหมดเสร็จแล้ว ก็อยากให้แสดงข้อความต้อนรับบนหน้าจอ ซึ่งการจะได้ผลลัพธ์ดังกล่าวด้วยจาวานั้น คุณต้องทำโปรเซสที่ยาวมาก
โดยต้องรัน AsyncTaskที่แตกต่างกัน 3 – 4 รายการ แล้วสร้าง Semaphore ที่จะรอทั้งคำร้องขอการตั้งค่าและข้อความทำงานเสร็จ เป็นต้น แต่ด้วย RxJavaเราสามารถปรับปรุงกระบวนการที่โค้ดอยู่ในรูป Thread ที่ตั้งอยู่ในตำแหน่งหนึ่ง และสร้างขึ้นจากรากฐานของ Functional Paradigm ได้
ที่มา : Technotification