Node.js'yi işte kullanıyorum ve çok güçlü buluyorum. Node.js'yi tanımlamak için bir kelime seçmek zorunda kaldım, "ilginç" (tamamen pozitif bir sıfat değil) derim. Topluluk canlı ve büyüyor. JavaScript, tuhaflıklarına rağmen kodlamak için harika bir dil olabilir. Ve günlük olarak "en iyi uygulama" ve iyi yapılandırılmış kod kalıpları hakkındaki kendi anlayışınızı yeniden düşüneceksiniz. Şu anda Node.js'ye akan muazzam bir fikir enerjisi var ve içinde çalışmak sizi tüm bu düşünceye maruz bırakıyor - harika zihinsel halter.
Üretimde Node.js kesinlikle mümkündür, ancak dokümantasyon tarafından vaat edilen "anahtar teslim" dağıtımdan çok uzaktır. Node.js v0.6.x ile, "küme" platforma entegre edildi ve temel yapı taşlarından birini sağladı, ancak benim "production.js" betiğim günlük oluşturmak gibi şeyleri işlemek için hala ~ 150 satır mantık "ciddi" bir üretim hizmeti için, gelen bağlantıları daraltmaya ve Apache'nin PHP için yaptığı her şeyi yapmaya hazır olmanız gerekir . Adil olmak gerekirse, Ruby on Rails'in tam olarak bu sorunu var. İki tamamlayıcı mekanizma ile çözülür: 1) Ruby'yi Raylara / Düğüme Koymak.Apache / Lighttd ). Web sunucusu, statik içeriği etkin bir şekilde sunabilir, giriş günlüğüne erişebilir, URL'leri yeniden yazabilir, SSL'yi sonlandırabilir , erişim kurallarını uygulayabilir ve birden çok alt hizmeti yönetebilir. Gerçek düğüm hizmetine isabet eden istekler için, web sunucusu isteği üzerinden vekalet eder. 2) Alt süreçleri yönetecek, periyodik olarak geri dönüştürecek vb. Unicorn gibi bir çerçeve kullanarak . Tamamen pişmiş gibi görünen bir Node.js hizmet çerçevesi henüz bulamadım; var olabilir, ancak henüz bulamadım ve hala el yapımı "production.js" de ~ 150 satır kullanıyorum.
Express gibi çerçevelerin okunması , standart uygulamanın, her şeye sadece bir esnaf Node.js hizmeti aracılığıyla hizmet etmektir ... "app.use (express.static (__ dirname + '/ public'))" . Düşük yük hizmetleri ve geliştirme için, bu muhtemelen iyidir. Ancak, hizmetinize büyük zaman yükü koymaya ve 7/24 çalıştırmaya başlar başlamaz, büyük siteleri, Nginx gibi iyi pişmiş, sertleştirilmiş C kodunu sitelerini önleyen ve tümüyle ele almaya iten motivasyonları hızla keşfedeceksiniz. statik içerik istekleri (... Amazon CloudFront gibi bir CDN ayarlayana kadar ). Bunu biraz esprili ve alçakça olumsuz bir şekilde ele almak için bu adama bakın .
Node.js ayrıca daha fazla hizmet dışı kullanım buluyor. Web içeriği sunmak için başka bir şey kullanıyor olsanız bile , kodunuzu düzenlemek için npm modülleri, tek bir öğeye bağlamak için Browserify ve dağıtım için küçültmek için uglify-js kullanarak, Node.js'yi bir oluşturma aracı olarak kullanabilirsiniz. . Web ile uğraşmak için JavaScript mükemmel bir empedans eşleşmesidir ve sıklıkla onu en kolay saldırı yolu haline getirir. Örneğin, bir grup JSON yanıt yükü ile uğraşmak istiyorsanız , yapılandırılmış verilerin yardımcı kemeri olan alt çizgi CLI modülümü kullanmalısınız .
Artılar ve eksiler:
- Pro: Bir sunucu için, arka uçta JavaScript yazmak, modern UI kalıplarını öğrenmek için bir "ağ geçidi ilacı" olmuştur. Artık istemci kodu yazmaktan korkmuyorum.
- Pro: Uygun hata kontrolünü teşvik etme eğilimindedir (err, neredeyse tüm geri aramalar tarafından geri döndürülür, programcıyı işlemesi için yönlendirir; Ayrıca, async.js ve diğer kütüphaneler "bu alt görevlerden herhangi biri başarısız olursa başarısız olur" paradigmasını tipik senkron koddan çok daha iyi işler )
- Profesyonel: Bazı ilginç ve normalde zor görevler önemsiz hale gelir - uçuştaki görevlerde statü almak, çalışanlar arasında iletişim kurmak veya önbellek durumunu paylaşmak gibi
- Profesyonel: Büyük bir topluluk ve sağlam bir paket yöneticisine (npm) dayanan tonlarca harika kütüphane
- Con: JavaScript'in standart bir kütüphanesi yoktur. JSON.parse veya bir npm modülü eklemeyi gerektirmeyen başka bir yerleşik yöntem kullandığınızda garip hissettiren işlevselliği içe aktarmaya alışırsınız. Bu, her şeyin beş sürümü olduğu anlamına gelir. Varsayılan uygulamadan memnun kalmamanız durumunda, Node.js "core" içerisindeki modüllerin bile beş çeşidi daha vardır. Bu hızlı evrime yol açıyor, aynı zamanda bir miktar karışıklığa da yol açıyor.
Basit bir istek başına tek işlem modeline ( LAMP ) karşı:
- Pro: Binlerce etkin bağlantıya ölçeklenebilir. Çok hızlı ve çok verimli. Bir web filosu için, PHP veya Ruby'ye göre gerekli kutu sayısında 10 kat azalma anlamına gelebilir
- Pro: Paralel kalıplar yazmak kolaydır. Memcached'dan üç (veya N) damla almanız gerektiğini düşünün . PHP bunu yapmak ... sadece ilk blob, sonra ikinci, sonra üçüncü getirilir kod yazdınız mı? Vay canına, bu yavaş. Memcached için bu özel sorunu gidermek için özel bir PECL modülü var, ancak veritabanı sorgunuza paralel olarak bazı Memcached verilerini almak istiyorsanız? Node.js'de paradigma eşzamansız olduğundan, bir web isteğinin paralel olarak birden çok şey yapması çok doğaldır.
- Con: Eşzamansız kod temelde eşzamanlı koddan daha karmaşıktır ve ön öğrenme eğrisi, eşzamanlı yürütmenin gerçekte ne anlama geldiğine dair sağlam bir anlayışa sahip olmadan geliştiriciler için zor olabilir. Yine de, kilitli her türlü çok iş parçacıklı kod yazmaktan çok daha az zor.
- Con: Yoğun bilgi gerektiren bir istek örneğin 100 msn için çalışırsa, aynı Node.js işleminde işlenen diğer isteklerin işlenmesini durduracaktır ... AKA, kooperatif-çoklu görev . Bu, Web Çalışanları kalıbı ile azaltılabilir (pahalı görevlerle başa çıkmak için bir alt süreci döndürmek). Alternatif olarak, çok sayıda Node.js çalışanı kullanabilir ve her birinin aynı anda tek bir isteği işlemesine izin verebilirsiniz (işlem geri dönüşümü olmadığı için hala oldukça verimlidir).
- Con: Bir üretim sistemi çalıştırmak, Apache + PHP, Perl , Ruby , vb. Gibi bir CGI modelinden çok daha karmaşıktır . İşlenmeyen istisnalar, işlemin tamamlanmasını engelleyerek başarısız işçileri yeniden başlatmak için mantık gerektirir ( kümeye bakın ). Buggy yerel kodlu modüller işlemi zorlaştırabilir. Bir çalışan öldüğünde, gerçekleştirdiği tüm istekler bırakılır, böylece bir buggy API diğer kodlanmış API'lar için hizmeti kolayca düşürebilir.
Java / C # / C (C? Gerçekten?)
- Pro: Node.js'de eşzamansız yapmak, başka bir yerde iş parçacığı güvenliği yapmaktan daha kolaydır ve tartışmasız daha fazla fayda sağlar. Node.js, şimdiye kadar çalıştığım en az acı veren asenkron paradigmadır. İyi kütüphanelerle, senkron kod yazmaktan sadece biraz daha zordur.
- Pro: Çoklu iş parçacığı / kilitleme hatası yok. Doğru, hiçbir engelleme işlemi olmadan uygun bir asenkron iş akışını ifade eden daha ayrıntılı kod yazmaya ön yatırım yaparsınız. Ve bazı testler yazmanız ve işe yarayacağınız şey var (bir komut dosyası dilidir ve şişman parmak değişken adları sadece birim test zamanında yakalanır). AMA, işe başladıktan sonra, heisenbugs için yüzey alanı - sadece bir milyon koşuda bir kez ortaya çıkan garip problemler - bu yüzey alanı çok daha düşük. Node.js kodunu yazan vergiler, kodlama aşamasına büyük oranda yüklenmiştir. Sonra kararlı kod ile sonuçlanma eğilimindedir.
- Pro: JavaScript işlevselliği ifade etmek için çok daha hafif. Bunu kelimelerle kanıtlamak zordur, ancak JSON , dinamik yazım, lambda gösterimi, prototip kalıtım, hafif modüller, her neyse ... aynı fikirleri ifade etmek için daha az kod alma eğilimindedir.
- Con: Belki de gerçekten, Java'daki kodlama hizmetlerinden gerçekten hoşlanıyorsunuz?
JavaScript ve node.js başka bir bakış açısı için, kontrol node.js için Java itibaren , Node.js. öğrenme bir Java geliştirici gösterimler ve deneyimlere bir blog yazısı
Modüller
Düğümü düşünürken, JavaScript kitaplığı seçiminizin deneyiminizi TANIMLAYACAĞINI unutmayın. Çoğu kişi en az iki tane, eşzamansız bir desen yardımcısı (Step, Futures, Async) ve bir JavaScript şeker modülü ( Underscore.js ) kullanır.
Yardımcı / JavaScript Şekeri:
- Underscore.js - bunu kullanın. Sadece yap. Kodunuzu _.isString () ve _.isArray () gibi öğelerle güzel ve okunabilir hale getirir. Başka türlü nasıl güvenli kod yazabileceğinizden emin değilim. Ayrıca, gelişmiş komut satırı-fu için, kendi Underscore-CLI'mı inceleyin .
Asenkron Desen Modülleri:
- Adım - seri ve paralel eylem kombinasyonlarını ifade etmenin çok zarif bir yolu. Benim kişisel tavsiyem. Bkz Gönderimimi Adım kod görünüyor beğenilerinize.
- Futures - siparişleri gereksinimler yoluyla ifade etmenin çok daha esnek (bu gerçekten iyi bir şey mi?) Yolu. "Başlat a, b, c paralel olarak. A ve B bittiğinde AB'yi başlatın. A ve C bittiğinde AC'yi başlatın." Bu esneklik, iş akışınızdaki hataları önlemek için daha fazla özen gerektirir (asla geri çağırma veya birden çok kez çağırma gibi). Raynos'un vadeli işlemleri kullanma konusundaki yazısına bakın (bu, beni " kazanma " anlamına gelen gönderi).
- Async - her desen için bir yöntemle daha geleneksel kütüphane. Ben adım adım dini dönüşüm ve daha sonra Async tüm desen tek bir daha okunabilir bir paradigma ile Adım içinde ifade edilebilir olduğunu fark önce başladı.
- TameJS - OKCupid tarafından yazılan, seri ve paralel iş akışlarını zarif bir şekilde yazmak için yeni bir dil ilkesi "bekliyor" ekleyen bir ön derleyicidir. Desen şaşırtıcı görünüyor, ancak ön derleme gerektiriyor. Bu konuda hala kararımı veriyorum.
- StreamlineJS - TameJS'ye rakip. Tame'e doğru eğildim, ama kendi kararını verirsin.
Veya asenkron kütüphaneler hakkında her şeyi okumak için yazarlarla panel röportajına bakınız .
Web Çerçevesi:
- Ekspres web sitelerini organize Raylar-esk framework Büyük Yakut. JADE'i HTML / HTML şablonlama motoru olarak kullanır , bu da HTML'yi daha az acı verici, hatta neredeyse zarif hale getirir.
- jQuery Teknik olarak bir düğüm modülü olmasa da, jQuery hızlı bir şekilde istemci tarafı kullanıcı arayüzü için fiili bir standart haline geliyor. jQuery, daha sonra üzerinde çalışılabilecek DOM öğeleri kümesi (küme işleyicileri, özellikler, stiller, vb.) için 'sorgulamak' için CSS benzeri seçiciler sağlar. Aynı damar boyunca Twitter'ın Bootstrap CSS çerçevesi, MVC deseni için Backbone.js ve tüm JavaScript dosyalarınızı tek bir dosyada birleştirmek için Browserify.js . Bu modüllerin hepsi fiili standartlar haline geliyor, bu yüzden en azından duymadıysanız kontrol etmelisiniz.
Test yapmak:
- JSHint - Kullanmalı ; İlk başta bunu anlayamadım, anlaşılmaz görünüyor. JSLint, Java gibi derlenmiş bir dille elde ettiğiniz temel doğrulamaların bir kısmını geri ekler. Eşleşmeyen parantez, bildirilmemiş değişkenler, birçok şekil ve büyüklükteki yazım hataları. Ayrıca, "anal mod" olarak adlandırdığım şeylerin çeşitli biçimlerini, beyaz alanın tarzını ve neyi doğrulayamadığınızı da açabilirsiniz. bir "" "kapanışını unuttun ... kodunu çalıştırmak ve rahatsız edici çizgiyi vurmak zorunda kalmadan. "JSHint" daha yapılandırılabilir varyantıdır Douglas Crockford sitesindeki jslint .
- Mocha'yı tercih etmeye başladığım Vows'a rakip. Her iki çerçeve de temelleri yeterince iyi ele alır, ancak Mocha'da karmaşık kalıpların ifade edilmesi daha kolay olur.
- Yemin Yemin gerçekten çok zarif. Ve hangi test senaryolarının geçtiğini / başarısız olduğunu gösteren güzel bir rapor (--spec) yazdırır. Öğrenmek için 30 dakika harcayın ve minimum çaba ile modülleriniz için temel testler oluşturabilirsiniz.
- Zombi - JSDom'u sanal bir "tarayıcı" olarak kullanarak HTML ve JavaScript için başsız test . Çok güçlü şeyler. Tarayıcı içi kodun yıldırım hızında belirleyici testlerini almak için Replay ile birleştirin .
- Testin "nasıl düşünüleceği" üzerine bir yorum:
- Test isteğe bağlı değildir. JavaScript gibi dinamik bir dilde, çok az statik kontrol vardır. Örneğin, 4 parametrenin beklendiği bir yönteme iki parametre iletilmesi, kod yürütülene kadar kesilmez. JavaScript hata oluşturmak için oldukça düşük çubuk. Derlenmiş dillerle doğrulama boşluğunu oluşturmak için temel testler gereklidir.
- Doğrulamayı unutun, kodunuzun yürütülmesini sağlayın. Her yöntem için, ilk doğrulama durumum "hiçbir şey kırılmaz" ve en sık tetiklenen durum budur. Kodunuzun fırlatmadan çalıştığını kanıtlamak, hataların% 80'ini yakalar ve kod güveninizi artırmak için çok fazla şey yapar ve kendinizi geri dönerken ve atladığınız nüanslı doğrulama vakalarını eklersiniz.
- Küçük başlayın ve atalet bariyerini kırın. Hepimiz tembel ve zamana karşı baskı altındayız ve testi "ekstra iş" olarak görmek kolaydır. Bu yüzden küçük başlayın. Test durumu 0 yazın - modülünüzü yükleyin ve başarıyı bildirin. Kendinizi bu kadar yapmaya zorlarsanız, testin atalet engeli kırılır. Belgeleri okumak da dahil olmak üzere ilk seferinde yapmak <30 dakika. Şimdi test durumu 1'i yazın - yöntemlerinizden birini arayın ve "hiçbir şeyin kesilmediğini", yani bir hata geri almadığınızı doğrulayın. Test senaryosu 1 sizi bir dakikadan az sürmelidir. Atalet kaybolduğunda, test kapsamınızı aşamalı olarak genişletmek kolaylaşır.
- Şimdi testlerinizi kodunuzla geliştirin. "Doğru" uçtan uca testin sahte sunucularla nasıl görüneceğinden korkmayın. Kod basit başlar ve yeni vakaları ele almak için gelişir; Testler de yapılmalıdır. Kodunuza yeni durumlar ve karmaşıklık ekledikçe, yeni kodu kullanmak için test senaryoları ekleyin. Hataları bulduğunuzda, hatalı kodu kapsamak için doğrulamalar ve / veya yeni durumlar ekleyin. Hata ayıklama yaparken ve bir kod parçasına olan güveninizi kaybettiğinizde, geri dönüp düşündüğünüzü yaptığını kanıtlamak için testler ekleyin. Örnek veri dizelerini (aradığınız diğer hizmetlerden, kazıdığınız web sitelerinden, ne olursa olsun) yakalayın ve bunları ayrıştırma kodunuza besleyin. Burada birkaç örnek, orada doğrulamayı geliştirdi ve son derece güvenilir bir kodla karşılaşacaksınız.
Ayrıca, önerilen Node.js modüllerinin resmi listesine göz atın. Ancak, GitHub'ın Düğüm Modülleri Wiki çok daha eksiksiz ve iyi bir kaynaktır.
Düğüm'ü anlamak için, birkaç temel tasarım seçeneğini dikkate almak yararlı olacaktır:
Node.js OLAY BAZLI ve ASENKRON / BLOK OLMAYAN. Gelen HTTP bağlantısı gibi olaylar, biraz iş yapan ve bir veritabanına bağlanma veya başka bir sunucudan içerik çekme gibi diğer eşzamansız görevleri başlatan bir JavaScript işlevini tetikler. Bu görevler başlatıldıktan sonra, etkinlik işlevi sona erer ve Node.js uyku moduna geri döner. Başka bir şey olur olmaz, veritabanı bağlantısı kurulurken veya içerikle yanıt veren harici sunucu gibi, geri çağırma işlevleri tetiklenir ve daha fazla JavaScript kodu yürütülür, bu da daha fazla eşzamansız görevleri (veritabanı sorgusu gibi) başlatır. Bu yolla Node.js, birden fazla paralel iş akışı için etkinlikleri mutlu bir şekilde araya ekleyerek, herhangi bir zamanda engellenmemiş etkinlikleri çalıştırır. Bu yüzden Node.js binlerce eşzamanlı bağlantıyı yönetmek için harika bir iş çıkarıyor.
Neden bağlantı başına sadece herkes gibi bir işlem / iş parçacığı kullanmıyorsunuz?Node.js'de yeni bir bağlantı sadece çok küçük bir yığın ayırmadır. Yeni bir süreci döndürmek, bazı platformlarda megabayt olarak önemli ölçüde daha fazla bellek gerektirir. Ancak gerçek maliyet, bağlam değiştirme ile ilişkili genel masraftır. 10 ^ 6 çekirdek iş parçacığına sahip olduğunuzda, çekirdek bir sonraki işin kimin yürütmesi gerektiğini anlamak için çok fazla iş yapmak zorundadır. Bir sürü çalışma Linux için bir O (1) zamanlayıcı oluşturmaya başladı, ancak sonunda, CPU zamanı için rekabet eden 10 ^ 6 işlemden daha tek bir olay güdümlü işleme sahip olmak çok daha verimli. Ayrıca, aşırı yük koşulları altında, çok işlemli model çok kötü davranır, kritik yönetim ve yönetim hizmetlerini, özellikle SSHD'yi aç bırakır (yani gerçekten ne kadar vidalandığını anlamak için kutuya bile giremezsiniz).
Node.js olan TEK DİŞLİ ve KİLİDİ ÜCRETSİZ . Node.js, çok kasıtlı bir tasarım seçeneği olarak, işlem başına yalnızca bir iş parçacığına sahiptir. Bu nedenle, birden çok iş parçacığının verilere aynı anda erişmesi temel olarak imkansızdır. Böylece kilit gerekmez. İplikler zordur. Gerçekten çok zor. Buna inanmıyorsanız, yeterince dişli programlama yapmadınız. Doğru kilitleme yapmak zordur ve izlenmesi gerçekten zor olan hatalara neden olur. Kilitleri ve çoklu diş açmayı ortadan kaldırmak, en berbat böcek sınıflarından birini ortadan kaldırır. Bu, düğümün en büyük avantajı olabilir.
Ancak 16 çekirdekli kutumdan nasıl yararlanabilirim?
İki yol:
- Görüntü kodlama gibi büyük bilgi işlem görevleri için Node.js, alt işlemleri tetikleyebilir veya ek çalışan işlemlere ileti gönderebilir. Bu tasarımda, ağır bilgi işlem görevleri yapan ve diğer 15 CPU'yu çiğneyen olayların akışını ve N işlemlerini yöneten bir iş parçanız olur.
- Bir web hizmetindeki iş hacmini ölçeklemek için, kümeyi kullanarak çekirdek başına bir kutuda birden çok Node.js sunucusu çalıştırmalısınız (Node.js v0.6.x ile, burada bağlı olan resmi "küme" modülü, farklı bir API). Bu yerel Node.js sunucuları, yeni bağlantıları kabul etmek ve bunlar arasındaki yükü dengelemek için bir yuvada rekabet edebilir. Bir bağlantı kabul edildiğinde, bu paylaşılan süreçlerden tek bir tanesine sıkı sıkıya bağlı hale gelir. Teoride, bu kulağa kötü geliyor, ancak pratikte oldukça iyi çalışıyor ve iş parçacığı için güvenli kod yazmanın baş ağrısından kaçınmanıza izin veriyor. Ayrıca, bu, Node.js'nin bellek bant genişliğini daha etkili bir şekilde kullanarak mükemmel CPU önbellek yakınlığı elde ettiği anlamına gelir.
Node.js, terlemeden gerçekten güçlü şeyler yapmanızı sağlar. Varsayalım ki, çeşitli görevler yapan,komutlar içinbir TCP bağlantı noktasınıdinleyen,bazı görüntüleri kodlayan her ne olursa olsunbir Node.js programınız var. Beş satır kodla, etkin görevlerin geçerli durumunu gösteren HTTP tabanlı bir web yönetimi portalına ekleyebilirsiniz. Bunu yapmak KOLAY:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(myJavascriptObject.getSomeStatusInfo());
}).listen(1337, "127.0.0.1");
Artık bir URL'ye çarpabilir ve çalışan işleminizin durumunu kontrol edebilirsiniz. Birkaç düğme ekleyin ve bir "yönetim portalınız" var. Çalışan bir Perl / Python / Ruby betiğiniz varsa, "yönetim portalına atmak" tam olarak basit değildir.
Ancak JavaScript yavaş / kötü / kötü / şeytanın doğuşu değil mi? JavaScript'in tuhaf tuhaflıkları var, ancak "iyi bölümleri" ile orada çok güçlü bir dil var ve her durumda JavaScript istemcideki (tarayıcı) THE dilidir. JavaScript burada kalmak için; diğer diller bir IL olarak hedefliyor ve dünya standartlarında yetenek en gelişmiş JavaScript motorlarını üretmek için yarışıyor. JavaScript'in tarayıcıdaki rolü nedeniyle, JavaScript'in hızla yanıp sönmesini sağlamak için muazzam miktarda mühendislik çabası atıldı. V8en azından bu ay için en yeni ve en büyük javascript motorudur. Verimlilik VE istikrar açısından diğer kodlama dillerini uçurur (size bakmak, Ruby). Ve sadece Microsoft, Google ve Mozilla'daki sorun üzerinde çalışan büyük ekiplerle daha iyi olacak, en iyi JavaScript motorunu oluşturmak için yarışıyor (Modern motorların tonlarca JIT yaptığı için artık bir JavaScript "yorumlayıcısı" değilbaşlık altında, yalnızca bir kez yürütme kodu için bir geri dönüş olarak yorumlama ile derleme). Evet, hepimiz birkaç tuhaf JavaScript dil seçimini düzeltebilmemizi dileriz, ama gerçekten o kadar da kötü değil. Ve dil o kadar esnek ki, JavaScript'i gerçekten kodlamıyorsunuz, Step veya jQuery kodluyorsunuz - JavaScript'te, kütüphanelerde deneyimi tanımlar. Web uygulamaları oluşturmak için, zaten JavaScript'i bilmeniz gerekir, bu nedenle sunucuda kodlamanın bir tür beceri seti sinerjisi vardır. Bana istemci kodu yazmayı dehşete düşürmedi.
Ayrıca, JavaScript'ten GERÇEKTEN nefret ediyorsanız, CoffeeScript gibi sözdizimsel şeker kullanabilirsiniz . Veya Google Web Araç Seti (GWT) gibi JavaScript kodu oluşturan herhangi bir şey .
JavaScript'ten bahsetmişken, "kapanış" nedir? - Çağrı zincirleri arasında sözlüksel olarak kapsamlı değişkenleri koruduğunuzu söylemenin oldukça süslü bir yolu. ;) Bunun gibi:
var myData = "foo";
database.connect( 'user:pass', function myCallback( result ) {
database.query("SELECT * from Foo where id = " + myData);
} );
// Note that doSomethingElse() executes _BEFORE_ "database.query" which is inside a callback
doSomethingElse();
Bir nesneyi saklamak gibi garip bir şey yapmadan "myData" yı nasıl kullanabileceğinizi görüyor musunuz? Java'nın aksine "myData" değişkeninin salt okunur olması gerekmez. Bu güçlü dil özelliği, zaman uyumsuz programlamayı daha az ayrıntılı ve daha az acı verici hale getirir.
Eşzamansız kod yazmak her zaman basit bir tek iş parçacıklı komut dosyası yazmaktan daha karmaşık olacaktır, ancak Node.js ile o kadar zor değildir ve binlerce eşzamanlı bağlantıya verimlilik ve ölçeklenebilirliğe ek olarak çok fazla avantaj elde edersiniz. ..