Node'un güçlü olay odaklı mimarisi, en güçlü avantajlarından biridir.
Temel Çıkarımlar
- Olay odaklı programlama, kodun kullanıcı eylemlerine herhangi bir sırayla yanıt vermesine olanak tanıdığından etkileşimli uygulamalar, özellikle de GUI uygulamaları için iyi bir seçimdir.
- Olay odaklı programlama, kullanıcılar DOM ile etkileşime girdiğinde olay dinleyicilerinin tetiklendiği web uygulamalarında yaygın olarak kullanılır.
- Node.js'de olay odaklı programlama uygulamak, özel olaylar oluşturmanıza ve bunları işlemek için olay dinleyicileri eklemenize olanak tanıyan EventEmitter sınıfıyla kolaydır.
Herhangi bir yazılım uygulaması oluştururken önemli kararlardan biri kodunuz için uygun paradigmanın seçilmesidir.
Olay odaklı programlama, herhangi bir sırada gerçekleşebilecek kullanıcı eylemlerine yanıt veren etkileşimli uygulamalar için iyi bir seçimdir. GUI uygulamalarında, komut satırı programlarından veya gömülü sistem kodlarından daha popüler bir paradigmadır.
Etkinlikler Nelerdir?
Bir olayı, kodunuzun tanıyabileceği ve yanıt verebileceği bir eylem veya olay olarak düşünebilirsiniz. Sistem veya kullanıcı bir olayı tetikleyebilir ve kodunuz genellikle bunu yönetecek bir işlevi kaydeder.
Temel bir olaya örnek olarak belirli bir eylemi gerçekleştirmek için bir düğmeye tıklamak verilebilir. Düğmeye tıklama eylemi bir olayı tetikler ve tıklama gerçekleştiğinde çalışan işleve düğme adı verilir. olay dinleyicisi (veya işleyici).
Olay Odaklı Programlama Nedir?
Olay odaklı programlama programlama paradigması Bir uygulamanın yürütme akışının kesinlikle sıralı olmaktan ziyade meydana gelen olaylara bağlı olduğu.
Bu paradigma çoğunlukla, kullanıcı eylemi gibi bir olayın sistemdeki bir eylemi tetiklemesi gereken kullanıcı arayüzleri ve gerçek zamanlı uygulamalar oluştururken kullanılır.
Paradigma, kullanıcılar etkileşime girdiğinde olay dinleyicilerinin tetiklendiği web uygulamaları oluştururken çok popülerdir. Belge Nesne Modeli (DOM).
Aşağıdaki resimde olay odaklı programlamada akışın nasıl çalıştığı gösterilmektedir. Bir olay meydana geldiğinde, olay kanalı bunu alır ve işlenmesi için uygun dinleyiciye iletir:
Node.js'de Olay Odaklı Programlama
JavaScript olay döngüsü Node.js çalışma zamanının eşzamansız yapısının ardındaki temel kavramlardan biridir. Olay odaklı bir mimari, yerleşik yapısını kullanır. Olay Verici Kesintisiz yürütme akışını kolaylaştıran modül.
Olay odaklı programlamayla Node.js, kullanıcı etkileşimini, G/Ç işlemlerini ve gerçek zamanlı veri işlemeyi gerçekleştirebilen sunucu tarafı uygulamalar oluşturmanıza olanak tanır. Bu, engelleyici olmayan bir şekilde gerçekleşir ve kullanıcı için gelişmiş performans ve daha sorunsuz bir deneyim sağlar.
Olayları tanımlamanın, tetiklemenin ve işlemenin temellerini anladığınızda Node.js'de olay odaklı programlama uygulamak kolaydır.
EventEmitter Sınıfı
İle Olay Verici Node.js'de özel etkinlikler oluşturabilir ve bunları işlemek için olay dinleyicileri ekleyebilirsiniz. Sınıfı kodunuzda kullanmak için onu şuradan içe aktarın: olaylar bunun gibi modül:
// CommonJS
const { EventEmitter } = require("events")
// ES6
import { EventEmitter } from"events"
Böylece sınıf ve üye işlevleri uygulamanızda kullanabilirsiniz. Olayları yaymaya ve işlemeye başlamak için, olayın yeni bir örneğini başlatın. Olay Verici sınıf.
Örneğin:
const FoodEvents = new EventEmitter()
Bu, adı verilen yeni bir yayıcı nesne oluşturur. YemekEtkinlikleri olayları yayabilen ve dinleyicileri kaydedebilen. EventEmmitter sınıfı bir olayı dinlemek için üç yöntem sağlar: Açık, addDinleyici, Ve bir kere.
Açık yöntem, olay dinleyicilerini eklemek için en temel işlevdir ve addListener tamamen aynı şekilde çalışır. Her ikisi de olay adını ve geri çağırma işlevini argüman olarak kabul eder. Geri arama gerçek işleyici işlevidir. Kullanabilirsiniz Açık Ve addListener birbirinin yerine kullanılabilir.
kullanarak bir olayı nasıl ele alacağınız aşağıda açıklanmıştır: Açık yöntem:
FoodEvents.on("cookie_ready", (data) => {
console.log("Cookie ready for packaging, data received: ", data);
})
Kullanma addListener doğrudan bir alternatif olarak Açık:
FoodEvents.addListener("cookie_ready", (data) => {
console.log(
"Cookie will now be packaged and sent out, data received: ",
data
);
})
Bu örneklerin her ikisi de geri aramayı olay dinleyicileri dizisine ekleyecektir. cookie_ready etkinlik. Her ikisini de kullanırsanız geri aramaları sırayla gerçekleşir.
bir kere yöntem, olayın bir sonraki tetiklenişinde çalışan tek seferlik bir olay dinleyicisini kaydeder. Bundan sonra sistem onu dinleyici dizisinden kaldıracaktır.
İşte nasıl kullanılacağı bir kere tek seferlik bir olayı işlemek için:
FoodEvents.once("cookie_sent", (data) => {
console.log("Cookie is sent out, data received: ", data);
})
Bu durumda verici yalnızca çerez_sent olayı bir kez kontrol edin ve çalıştırıldıktan sonra işleyiciyi kaldırın.
Her üç yöntem de yayıcıyı döndürür, böylece aramaları bunlardan herhangi birine zincirleyebilirsiniz.
Bir dinleyicinin bir olayı işleyebilmesi için uygulamanın bir noktada o olayı yayması gerektiğini unutmayın. İşte yaymak için bazı örnek kodlar cookie_ready kullanarak olay yaymak yöntem:
functionbakeCookie() {
console.log("Cookie is baking, almost ready...")setTimeout(() => {
FoodEvents.emit("cookie_ready", { flavor: "vanilla cookie" })
}, 3000)
}
bakeCookie()
Konsolda çerezin piştiğine dair bir bildirim basan bu kodu çalıştırdığınızda, 3 saniye bekler ve cookie_ready Etkinlikte aşağıdaki resimdeki gibi bir çıktı elde edeceksiniz:
Bu, olay dinleyicilerinin kaydettiğiniz sıraya göre nasıl çalıştığını gösterir.
Olay Verici sınıf aşağıdakiler de dahil olmak üzere daha fazla yöntem sağlar:
- kaldırDinleyici: Olay dinleyicileri dizisinden bir dinleyici örneğini kaldırır. kapalı Bu amaç için de yöntem mevcuttur.
- başınaDinleyici: Bu yöntem aynı zamanda bir dinleyiciyi de kaydeder ancak onu dinleyiciler dizisinin sonuna eklemek yerine başına ekler. Daha sonra, daha önce kaydetmiş olabileceğiniz diğer dinleyicilerden önce çalışacaktır.
- başınaOnceListener: Bu tıpkı prependListener gibi çalışır, ancak dinleyici yalnızca bir kez çalışır. bir kere.
- Tüm Dinleyicileri kaldır: Bu işlev, belirli bir adlandırılmış olay için kayıtlı tüm dinleyicileri veya herhangi bir argüman iletmemeniz durumunda tüm dinleyicileri kaldırır.
- dinleyiciler: Bağımsız değişken olarak ilettiğiniz olay adının dinleyicilerinin bir dizisini döndürür.
- olay İsimleri: Halihazırda bir dinleyici kaydettiğiniz tüm etkinlik adlarını almak için bu işlevi kullanabilirsiniz.
- setMaxListeners: Node.js, bir olay için 10'dan fazla dinleyici kaydettiğinizde bellek sızıntılarını önlemek için varsayılan olarak bir uyarı verir. Bu varsayılan değeri setMaxListeners'ı kullanarak ayarlayabilirsiniz. Bu değeri kullanarak da kontrol edebilirsiniz. getMaxListeners.
olaylar paket, Node.js'de olaya dayalı programlama için kapsamlı işlevsellik sağlar.
Olay Odaklı Programlamanın En İyi Uygulamalarından Bazıları Nelerdir?
Her programlama yaklaşımının ödünleşimleri vardır ve en iyi uygulamaları göz ardı etmek, uygulamanız üzerinde olumsuz etkilere neden olabilir. Olay odaklı uygulamalar oluştururken göz önünde bulundurulması gereken en iyi uygulamalardan bazıları şunlardır:
- Temiz ve bakımı kolay bir kod tabanı sağlamak amacıyla olaylar için kısa ve açıklayıcı adlar kullanın.
- Hataların kolayca ayıklanmasını sağlamak için iyi hata işleme ve günlüğe kaydetme uygulamalarını benimseyin.
- Olay dinleyicilerini yazarken geri arama cehenneminden (birden fazla geri aramayı iç içe geçirmekten) kaçının. Bunun yerine JavaScript vaatlerini kullanın.
- Bir etkinlik için çok fazla dinleyici oluşturmayın. Olayları bölmeyi ve bunun yerine zincirlemeyi düşünün.
Doğru Mimariyle Uygulamalar Oluşturun
Yazılım oluşturmada geçerli olan genel kural, uygun mimari ve tasarım kararlarının alınmasıdır. Bir uygulama geliştirirken yanlış yaklaşımı izlediğinizde eninde sonunda sonuçlarıyla yüzleşirsiniz.
Olay odaklı programlama, bir uygulamanın mimarisi ve performansı üzerinde önemli bir etkiye sahip olabilecek bir paradigmadır. Uygulamanızın veya bir kısmının çalışması olaylara bağlı olduğunda, olaya dayalı programlamayı düşünmelisiniz.