Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Redux Saga จัดการงานที่เกิดขึ้นพร้อมกันได้อย่างไรมีประสิทธิภาพมากกว่า Redux thunk อย่างไร


Redux Saga จัดการงานที่เกิดขึ้นพร้อมกันได้อย่างไรมีประสิทธิภาพมากกว่า Redux thunk อย่างไร


Redux Saga จัดการงานที่เกิดขึ้นพร้อมกันหลายอย่างได้อย่างมีประสิทธิภาพมากกว่า Redux thunk เป็นหลักเนื่องจากการใช้ฟังก์ชั่นเครื่องกำเนิดไฟฟ้า ES6 และการออกแบบเพื่อจัดการกับกระแสอะซิงโครนัสที่ซับซ้อน ใน Redux Saga ฟังก์ชั่นเครื่องกำเนิดไฟฟ้าสร้าง "SAGAS" กระบวนการพื้นหลังที่มีอายุยืนยาวซึ่งสามารถหยุดและดำเนินการต่อได้ช่วยให้การควบคุมการดำเนินงานแบบอะซิงโครนัสมีความซับซ้อนรวมถึงการเกิดขึ้นพร้อมกันการยกเลิกการเดบิวต์เค้นและสภาพการแข่งขัน ความสามารถนี้ให้วิธีที่มีโครงสร้างและปรับขนาดได้ในการจัดการผลข้างเคียงโดยเฉพาะอย่างยิ่งในแอพพลิเคชั่นที่ซับซ้อนที่มีงานอะซิงโครนัสพร้อมกันมากมาย

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

ฟังก์ชั่นเครื่องกำเนิดไฟฟ้าสำหรับการควบคุมแบบอะซิงโครนัส

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

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

การจัดการผลข้างเคียงที่ประกาศ

Redux Saga ใช้เอฟเฟกต์การประกาศผ่านชุดของผู้สร้างเอฟเฟกต์ในตัวเช่น `takeevery`,` takelatest ', `fork`,` การโทร' และ `ใส่ ' เอฟเฟกต์เหล่านี้สร้างวัตถุธรรมดาที่อธิบายถึงผลข้างเคียงซึ่งมิดเดิลแวร์ตีความเพื่อดำเนินการจริง เพราะ Sagas อธิบายว่า "สิ่งที่ต้องทำ" แทนที่จะเป็น "วิธีการทำ" รหัสนี้สามารถอ่านได้และทดสอบได้มากขึ้น

สำหรับการเกิดขึ้นพร้อมกัน `Fork` อนุญาตให้ SAGAS เริ่มงานที่ไม่ปิดกั้นหลายรายการในแบบคู่ขนาน ตัวอย่างเช่น Saga สามารถแยกผู้เฝ้าดูหลายคนเพื่อฟังการกระทำที่แตกต่างกันพร้อมกันหรือทำการโทร API หลายครั้งในครั้งเดียว `TeakeVery` เรียกใช้เทพนิยายสำหรับการกระทำทุกครั้งที่ส่งการกระทำหลายอย่างพร้อมกันโดยไม่ปิดกั้นเทพนิยายหลัก

ในทางตรงกันข้าม Redux Thunk มีความจำเป็นมากกว่าการประกาศ ผู้สร้างการดำเนินการจัดการตรรกะแบบอะซิงโครนัสอย่างชัดเจนพร้อมเงื่อนไขและการโทรหลายครั้ง การจัดการพร้อมกันเป็นแบบแมนนวลมักส่งผลให้เกิดการโทรกลับที่ซับซ้อนหรือสัญญาที่มีผลต่อการบำรุงรักษาและความชัดเจน

การจัดการกระแสที่ซับซ้อนและการยกเลิกงาน

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

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

การทดสอบและการแยกข้อกังวล

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

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

ยิ่งไปกว่านั้น Redux Saga ยังย้ายตรรกะผลข้างเคียงออกจากส่วนประกอบและผู้สร้างแอ็คชั่นลงใน Sagas เพื่อส่งเสริมการแยกข้อกังวลที่ดีขึ้น วิธีการแบบแยกส่วนนี้ทำให้การปรับการทำงานแบบหลายงานแบบหลายงานในแอปพลิเคชันขนาดใหญ่ขึ้น

ข้อควรพิจารณาประสิทธิภาพ

ในขณะที่ Redux Thunk อาจแนะนำค่าใช้จ่ายน้อยลงสำหรับการไหลแบบง่าย ๆ เนื่องจากธรรมชาติที่มีน้ำหนักเบา แต่ประสิทธิภาพของ Redux Saga ในการจัดการงานที่เกิดขึ้นพร้อมกันหลายอย่างช่วยลดความซับซ้อนและข้อบกพร่องที่อาจเกิดขึ้นในแอปพลิเคชันที่มีขนาดใหญ่กว่า ด้วยการจัดระเบียบงานที่เกิดขึ้นพร้อมกันอย่างเปิดเผยและจัดการพวกเขาผ่านมิดเดิลแวร์ SAGA ส่วนกลาง Redux Saga เพิ่มประสิทธิภาพการจัดการการดำเนินงานแบบขนานและการจัดการผลข้างเคียง

สรุป

- Redux Saga ใช้ฟังก์ชั่นเครื่องกำเนิดไฟฟ้าเพื่อหยุดชั่วคราวและดำเนินการทำงานต่อไปเปิดใช้งานการควบคุมที่แม่นยำในงานที่เกิดขึ้นพร้อมกันและแบบขนาน
- ลักษณะที่ประกาศของเอฟเฟกต์ของ Redux Saga (`fork`,` call ', `TeakeVery' ฯลฯ ) ช่วยให้สามารถจัดการกับเวิร์กโฟลว์แบบอะซิงโครนัสที่ซับซ้อนเช่นการลองใหม่การยกเลิกและการขนานตามธรรมชาติมากขึ้น
- มันมีเครื่องมือการจัดการพร้อมกันในตัวเช่น `fork` สำหรับงานคู่ขนานและความสามารถในการยกเลิกซึ่ง Redux thunk ขาดตามค่าเริ่มต้น
- ฟังก์ชั่นเครื่องกำเนิดไฟฟ้าบริสุทธิ์ของ Redux Saga ช่วยปรับปรุงความสามารถในการทดสอบโดยทำให้ง่ายต่อการยืนยันผลกระทบที่ให้ผลในขณะที่การทดสอบ Redux thunk ต้องการการเยาะเย้ย
- Redux Saga ส่งเสริมการจัดระเบียบโค้ดที่ดีขึ้นและการแยกข้อกังวลโดยการแยกผลข้างเคียงใน sagas แทนที่จะผสมกับผู้สร้างแอ็คชั่นหรือส่วนประกอบ
- Redux Thunk เหมาะกว่าสำหรับการดำเนินงานแบบอะซิงโครนัสที่ง่ายกว่าและต่อเนื่องในขณะที่ Redux Saga เก่งในการจัดการผลข้างเคียงหลายอย่างพร้อมกันและผลข้างเคียงที่ซับซ้อนในแอปพลิเคชันที่ปรับขนาดได้

ดังนั้นวิธีการของ Redux Saga ในการจัดการงานที่เกิดขึ้นพร้อมกันนั้นมีประสิทธิภาพและแข็งแกร่งกว่าเมื่อเทียบกับ Redux Thunk เมื่อต้องรับมือกับการไหลแบบอะซิงโครนัสที่ซับซ้อนในแอปพลิเคชัน Redux