Veri işlemeye gelince, blockpulsar.com'da yaptığımız gibi, genellikle verileri belirli bir formatta yükleyen, verileri farklı bir yapıya dönüştüren ve geri döndüren bir fonksiyon olarak anılır. Buradaki mantık oldukça basit. Bazen o kadar basittir ki, tek yaptığı, bir alanın adını değiştirmek veya bazı alanları kaldırmak olduğu için hızlı çalışacağını düşünürsünüz. Tüm bu işlemler pratikte senkronizedir; bu, aynı anda veri dönüştürme işlemleri yaparsanız oldukça CPU yoğundur.
Node.js, Async görevlerini işlemede oldukça iyidir, çünkü JavaScript'in Event Loop'u, bir zaman uyumsuz işlevinin bir sonuç vermesini beklerken bazı senkronizasyon işlemlerini yürütecek şekilde çalışır. Örneğin, Node.js sunucunuzla bir Veritabanı bağlantınız olduğunda ve ondan bazı verileri almak için zaman uyumsuz bir sorgu yaptığınızda, Node.js uygulamanız kodunuzun diğer kısımlarından bazılarını yürütme potansiyeline sahiptir. Aynı zamanda veritabanından bir yanıt bekler. Bu, her bir eşitleme işlemi tüm süreci engellediği için çok fazla eşzamanlı işlemin ele alınmasını oldukça zorlaştırır. Senkronizasyon işlemleri tamamlanana kadar zaman uyumsuz işlevler bile engellenir.
Bu sorun, basit JSON yanıtları sunan Node.js ile nispeten basit Web hizmetleri için bile çok fazla ortaya çıkıyor. Yine de nihayetinde, istekler biriktiğinde, JSON kodlama ve kod çözme, JavaScript için oldukça ağır eşitleme işlemleri olduğundan Node.js daha yavaş ve yavaş olmaya başlar.
Bu, JavaScript motorları için en yaygın performans sorunudur, çünkü bu bir eşitleme işlemidir ve Node.js yürütmesi sırasında bunu çok kullanırız. Dolayısıyla, Node.js'deki JSON ayrıştırma/dizileme performans sorunlarını henüz çözmediyseniz, genel olarak performans gösteren bir uygulamanız olmamıştır 😃
Süper yavaş değil, sadece tüm süreci engelliyor ve ayrıştırılacak veya dizilecek çok sayıda nesneniz varsa, bu, DB'den veri almak veya bir HTTP İsteğine yanıt vermek gibi zaman uyumsuz yöntemlerinizi geciktiriyor.
JSON'u Worker Threads kullanarak ayrıştırmanın ve dizgeleştirmenin bazı hileli yolları vardır, ancak kod, Node.js'nin çok iş parçacıklı uygulamaları çalıştırmak için optimize edilmediğini hissediyor. Hala yapılabilir olduğunu kabul ediyorum, bunu bir kez yaptım ama üretimi ve yerel kalkınmayı zorlaştırıyor.
Diyelim ki C++, Rust ve hatta Go gibi diğer düşük seviyeli programlama dilleriyle kodlama yaptınız (düşük seviye değil ama…). Bu durumda, hafızayı fonksiyondan fonksiyona kopyalamanın düşük performansa yol açtığını hatırlayacaksınız. Bu nedenle çoğu geliştirici bu dillerde işaretçiler kullanır ve doğrudan yerinde referans kullanarak bir değişkeni değiştirir.
Bir işlevin içindeki İşlev bağımsız değişkenini değiştirmeyen katı bir kurala sahip olmanın kod bakımı için uygun olduğunu kabul edeceğim. Yine de, bir nesneyi küçük değişikliklerle belirli bir nesnenin yayılımı olarak her döndürdüğünüzde, JS motoru belleği kopyalar ve eskisini kaldırır, bu da elbette daha fazla eşitleme işlemine yol açar.
// Not that performant, but good for code readability function processData(data: Object) { return { ...data, changedField: 100}; } // Terrible for code maintanence, but works faster function processData(data: Object) { data.changedField = 100; return data; }
Neden Docker Image boyutundan bahsediyoruz diye düşünebilirsiniz, bu veri işleme ile ilgili değil, ama aslında öyle! ETL Veri işleme sistemlerine sahip olmak için kritik olan şey, özellikle zamana duyarlı bir ilk senkronizasyonun olduğu ilk veri alımı sırasında, veri hacmine bağlı olarak olabildiğince hızlı ölçeklendirmektir. Ama gerçek bir uygulamamız var, o kadar ağır ki, bir konteyner kadar.
Bazı düğüm yürütme kitaplıkları, Node.js'yi birkaç kez kullanılan tek bir ikili dosyaya dönüştürmeye çalışıyor. Tüm destek node_moduels klasörünün kendisinden ayrı tutulmadığından, diğer modülleri yönetmek ve bunlara ayak uydurmak zordur. Bazı basit Web API'leri oluşturuyorsanız sorun değil. Genellikle bazı ikili bağımlılıklarla DB Sürücülerini kullanmaya çalıştığınız veri işleme boru hatları, doz işleri oldukça kolay bozulabilir.
blockpulsar.com'da , uygun JS kodu senkronizasyon işlemi optimizasyonlarını yazmak çok zor olduğu için Golang ve C++'a geçtik . Node.js'yi önde gelen Web Uygulaması API hizmetimiz olarak tutmaya devam ettik çünkü Web entegrasyonlarını işlemek için oluşturulmuş çok sayıda harika kitaplık olduğundan, bunu diğer arka uç teknolojileriyle yapmak zaman alıcı olurdu.
Paralel işleme, veri işleme boru hattı sistemi için başka bir dile geçmemizin ana nedeniydi. Worker Threads'li Node.js, tek bir normal süreçten yaklaşık 10 kat daha fazla bellek tüketerek Node.js'yi tasarlandığı şekilde kullanmadığımızı düşündürdü.
Şaşırtıcı derecede iyi performans sonuçları ve yalnızca statik olarak derlenmiş bir ikili dosya tuttuğumuz 20 MB'den daha az kapsayıcı görüntüleri elde ettik. Tabii ki, özellikle başlangıçta kodlamak daha fazla zaman alır, ancak veri işleme süresini 10 saniyeden 500 ms'ye düşürmeyi düşünüyorsanız, optimize etmenin yolu budur.
Node.js, bir Web API'si olarak çalışmak için harikadır, ancak yoğun veri işleme yükünün altına girdiğinizde çok fazla mücadele edecektir. Node.js ve JavaScript için genel olarak o kadar çok kitaplık ve topluluk projesi var ki, Node.js'de proje yazmak daha keyifli, ancak proje türüne bağlı olarak bu pek uygun olmayabilir.
Bu makaleyi beğendiyseniz, üretimde Düğüm ile nasıl mücadele ettiğinizi bana bildirin 😃
Bilinç nedir? Yüzyıllardır filozofların ve bilim adamlarının kafasını karıştıran bir sorudur. Bazıları bunun bedenlerimizden bağımsız olarak gerçekten anlayamadığımız geçici bir şey olduğunu söylüyor.
Yıllık ortalama 154 bin dolar maaş ve istikrarlı iş büyümesi ile şimdi blok zinciri geliştirmeyi öğrenmek için ideal zaman. Blok zinciri teknolojilerini oluşturmak ve geliştirmek için blok zinciri geliştiricileri, bilgisayar ağı, kriptografi, algoritmalar ve veri yapıları dahil olmak üzere çeşitli beceriler kullanır.
Bu blogda, İngilizce'ye yaklaşımımı nasıl ve neden değiştirmeye karar verdiğimi ve yaptığım bazı etkinliklerden para kazanarak bir yıldan kısa bir sürede fakir bir B1'den başlayarak B2 seviyesine nasıl geldiğimi tartışacağım. İçindekiler Okulda örnek bir öğrenci olmasam da İngilizce öğrenmek her zaman kültürel geçmişime eklemek istediğim bir şeydi.
Yaz sonu ve sonbahar nostaljik mevsimlerdir. Sokak lambaları ışıklarını yağmurlu sokaklara saçıyor ve ayakların altındaki yapraklar - alacakaranlığın gölgelerinde soluk kırmızı-turuncu - geçmiş günlerin bir hatırlatıcısı.
İster NFT'lerde yeni olun, ister sahnenin emektarı olun, burada anlattıklarımın faydalı olabileceğini umuyorum. Bu seri, "projelerin" herkesi kendilerine bir miktar para kazandırmak için manipüle etmek için kullandıkları özenle tasarlanmış yöntemleri ortaya çıkarmayı amaçlıyor.
Jesenko ve benim 20 yıllık evlilik yolculuğumuza nasıl başladığımıza dair başlangıç hikayemizi pek kimse bilmiyor. Bazılarının, ilk dairemizi birlikte doldurmak için yeterince para kazanmamanın çok erken zamanlarıyla ilgili olabileceğinden eminim.