2012-08-21 23 views
6

Ben NodeJS benim proje oluşturmak başladım ve aynı modülü gerektiren modülleri içinNodeJS zaten yüklenmiş modülleri yeniden kullanıyor ve değerlerini paylaşıyor mu?

  • mu NodeJS zaten yüklenmiş Yeniden kullanıma modülleri merak ediyorum?
  • Modüller, gereksinim duyan modüller arasında aynı "durumu" mu koruyorlar?
  • Ya ya da her ikisi birden gerçekleşirse yakalama nedir? Yüze baktığımda döngüler ve setTimeout ve koduna benzer bir sorun var mı?

Şu anda 4 dosya

  • common.js

    var i = 0; 
    
    function add(v){i += v;} 
    function view(){console.log(i);} 
    
    module.exports = { 
        add : add, 
        view : view 
    } 
    
  • a.js ve b.js

    exports.common = require('./common.js'); 
    
  • 0 ile test ettik
    var a = require('./a.js'), 
        b = require('./b.js'); 
    
    function start(){ 
        http.createServer(function (req, res) { 
    
         a.common.add(2); 
         a.common.view(); 
    
         b.common.add(4); 
         b.common.view(); 
    
         a.common.view(); 
    
    
         res.writeHead(200, {'Content-Type': 'text/plain'}); 
         res.end('Hello World\n'); 
        }).listen(config.port, config.address || '127.0.0.1'); 
        console.log('Server running'); 
    } 
    

sonuç bana öyle bir düşündüren bir sonuç verir

  • server.js

    :

    2 - view() via a.js on favicon request 
    6 - view() via b.js on favicon request 
    6 - view() via a.js on favicon request 
    8 - view() via a.js 
    12 - view() via b.js 
    12 - view() via a.js 
    

    ise buna ayrı iki tarafından gerekli olsa bile modülü paylaşmak görünüyor görünüyor modülleri ve hatta modülleri karşılar ve istekleri karşılar.

  • +0

    "Foo" ve "bar" nereden geliyor? – Amberlamps

    +0

    @Amberlamps düzenlenmiştir. Kodumda 'foo' ve' bar' kullanılır. – Joseph

    +0

    evet, yüklenen modüller önbelleğe alınmış, durumu. –

    cevap

    5

    Node.js, açık performans nedenleriyle modülleri önbelleğe alır. the Node.js website den

    Bildirimi:

    Modüller yüklenmeden sonra ilk kez önbelleğe alınır. Bu, (diğer şeylerin yanı sıra) require('foo')'a yapılan her çağrının, aynı dosyaya çözülecek olursa, tam olarak aynı nesneyi alacağı anlamına gelir.

    require('foo') numaralı çağrıların birden çok çağrılması, modül kodunun birden çok kez yürütülmesine neden olmayabilir. Bu önemli bir özellik. Bununla birlikte, "kısmen yapılmış" nesneler döndürülebilir, böylece çevrimsel bağımlılıkların döngülere neden olduğunda bile yüklenmesine izin verilir. Bir modülü birden çok kez çalıştırmak istiyorsanız, bir işlevi dışa aktarın ve bu işlevi çağırın.

    2

    Evet, tüm modüller ilk kez sonra önbelleğe alınır. yüklendi Modül önbelleğe alma hakkında daha fazla bilgiyi official node.js docs numaralı telefondan okuyabilirsiniz.

    İlgili konular