Redux Saga, esas olarak ES6 jeneratör fonksiyonlarını kullanması ve karmaşık asenkron akışları bildiren karmaşık akışları işlemek için tasarımı nedeniyle Redux Thunk'dan daha verimli bir şekilde daha verimli bir şekilde işler. Redux Saga'da jeneratör işlevleri, duraklatabilecek ve devam edebilen uzun ömürlü arka plan işlemleri oluşturarak eşzamanlılık, iptal, debsounce, gaz kelebeği ve yarış koşulları dahil eşzamanlı operasyonlar üzerinde sofistike kontrole izin veren "destan", uzun ömürlü arka plan işlemleri oluşturur. Bu özellik, özellikle eşzamanlı eşzamanlı eşzamansız görevlerle karmaşık uygulamalarda yan etkileri yönetmek için yapılandırılmış ve ölçeklenebilir bir yol sağlar.
Redux Thunk, aksine, aksiyon yaratıcılarının düz eylem nesneleri yerine geri dönen işlevleri içeren daha basit bir konsepte dayanmaktadır. Bu işlevler, görev tamamlanmadan önce ve sonra farklı işlemler göndererek API çağrıları gibi eşzamansız işlemleri işleyebilir. Basit veya orta derecede karmaşık async ihtiyaçları için geçerli olmakla birlikte, Redux Thunk, eşzamanlılık kontrolü ve yan etki orkestrasyonunu ele almak için yerleşik yapılardan yoksundur, bu da üst üste binen async görevleriyle uğraşırken daha fazla daha fazla kaynak plakası, ortalama kod koduna yol açabilir.
Eşzamansız kontrol için jeneratör işlevleri
Redux Saga, ara katman yazılımı için kontrol sağlayabilen ve devam etmeden önce eşzamansız işlemlerin tamamlanmasını bekleyebilen ES6 jeneratör fonksiyonlarından yararlanır. Bu duraklama ve özet modeli, Sagas'ın birden fazla görevi aynı anda ve büyük kontrolle paralel olarak düzenlemesine olanak tanır. Örneğin, Sagas bağımsız olarak çalışan birden fazla görevi çatallayabilirken, ana destan yürütmeye devam ediyor. Ayrıca görevleri de yarışabilirler, yani bir görev ilk önce tamamladığına bağlı olarak başkalarını iptal edebilir.
Bu özellik, asenkron işlevlerin yürütebileceği ancak doğal olarak kendilerini bu kadar ince taneli görev koordinasyonuna ödünç vermediği Redux Thunk'un yaklaşımıyla tezat oluşturur. Thunks tipik olarak, çoklu eşzamanlı etkileşimlerle karmaşık ve hantal hale gelebilen yuvalama veya zincirleme vaatlerini ve geri çağrıları içerir.
Bildirici Yan Etki Yönetimi
Redux Saga, `` Takevery '', `Takelatest`,` Fork`, `Call 've` put' gibi bir dizi yerleşik efekt yaratıcısı aracılığıyla bildirim etkileri kullanır. Bu efektler, Middleware'in gerçek işlemleri gerçekleştirmeyi yorumladığı yan etkileri açıklayan düz nesneler üretir. Sagas, "nasıl yapılacağını" yerine "ne yapmalı" olarak tanımladığından, kod daha okunabilir ve test edilebilir.
Eşzamanlılık için, `Fork`, Sagas'ın paralel olarak birden fazla bloke edici görevi başlatmasına izin verir. Örneğin, bir Saga, farklı eylemleri aynı anda dinlemek veya aynı anda birkaç API çağrısı gerçekleştirmek için birkaç gözlemciyi çatallayabilir. `` Takevery ', gönderilen her eylem için bir destan çalıştırır ve ana destanı engellemeden aynı anda birden fazla eylemi ele alır.
Buna karşılık, Redux Thunk beyandan ziyade zorunludur. Eylem yaratıcıları, koşullar ve birden fazla sevk çağrısı ile eşzamansız mantığı açıkça ele alırlar. Eşzamanlılık yönetimi manueldir, genellikle karmaşık iç içe geri arama veya vaatlerle sonuçlanır, sürdürülebilirliği ve netliği etkilemektedir.
Karmaşık akışları ve görev iptalini ele almak
Redux Saga, arka plan yoklama, debouning, yeniden deneme, iptal ve sıralama eylemleri gibi basit API çağrılarının ötesinde daha karmaşık eşzamansız iş akışlarını destekler. Örneğin, Sagas belirli eylemler meydana geldiğinde devam eden görevleri iptal edebilir ve modası geçmiş veya gereksiz işlemlerin tamamlanmasını önleyebilir. Bu iptal, yeni kullanıcı girişinin önceki API çağrılarını iptal ettiği AutoComplete Search gibi eşzamanlı senaryolarda çok önemlidir.
Redux Thunk, yerleşik iptal yeteneklerinden yoksundur ve benzer etkilere ulaşmak için harici kütüphanelere veya özel mantığa dayanır. Bu sınırlama, uygulama karmaşıklığı arttıkça yarış koşullarına ve yönetilmesi zor eşzamanlı mantığa yol açabilir.
Endişelerin test edilebilirliği ve ayrılması
Redux Saga'nın jeneratör işlevleri açıklayıcı etkiler verdiğinden, gerçek asenkron operasyonları çalıştırmadan birim testi yapmak daha kolaydır. Geliştiriciler, tüm eşzamanlı ortamın tamamlanmasına gerek kalmadan, verilen efektlerin sırasını ve içeriğini ileri sürerek SAGA mantığını test edebilirler.
Redux Thunk testleri genellikle Redux mağazasının alay edilmesini ve söz verdikten sonra, async sonuçlarını test eden, ancak Thunk'ın kendisi içindeki akış kontrolünü test ettikten sonra gönderilen eylemleri ileri sürmeyi içerir.
Dahası, Redux Saga, yan etki mantığını bileşenlerden ve aksiyon yaratıcılarından sagas'a taşıyor ve endişelerin daha iyi ayrılmasını teşvik ediyor. Bu modüler yaklaşım, daha büyük uygulamalarda çok görevli async operasyonlarının ölçeklenmesini basitleştirir.
Performans Hususları
Redux Thunk, hafif doğası nedeniyle basit async akışları için daha az yük getirebilirken, Redux Saga'nın çoklu eşzamanlı görevleri ele almadaki verimliliği, daha büyük, daha zorlu uygulamalarda karmaşıklığı ve potansiyel hataları azaltır. Eşzamanlı görevleri bildirerek düzenleyerek ve merkezi bir Saga ara katman yazılımı aracılığıyla yöneterek Redux Saga, paralel operasyonların ve yan etki yönetiminin işlenmesini optimize eder.
Özet
- Redux Saga, görev yürütmeyi duraklatmak ve devam etmek için jeneratör işlevlerini kullanır ve eşzamanlı ve paralel görevler üzerinde kesin kontrol sağlar.
- Redux Saga'nın etkilerinin bildirimsel doğası (`çatal`,` call`, `` takım ', vb.) Geri, iptaller ve paralellik gibi karmaşık asenkron iş akışlarını daha doğal olarak ele almasına izin verir.
- Paralel görevler ve iptal yetenekleri için `` çatal '' gibi yerleşik eşzamanlılık yönetimi araçları sağlar, bu da Redux Thunk'un varsayılan olarak eksik olduğu.
- Redux Saga'nın saf jeneratör fonksiyonları, verilen etkileri iddia etmeyi kolaylaştırarak test edilebilirliği geliştirirken, Redux Thunk testi alay konusu gönderilmeyi gerektirir.
- Redux Saga, Sagas'ta yan etkileri izole ederek daha iyi kod organizasyonunu ve endişelerin ayrılmasını teşvik eder.
- Redux Thunk, daha basit, sıralı asenkron operasyonlar için daha uygundur, oysa Redux Saga ölçeklenebilir uygulamalarda çoklu, eşzamanlı ve karmaşık yan etkileri yönetmede mükemmeldir.