2013-02-28 78 views
1

nodejs文檔說明nodejs模塊是否跨多個HTTP請求緩存?

模塊在第一次加載後被緩存。 這意味着(除其他事項外)每次調用需要(「富」)將得到 完全相同的對象返回,如果它會解析爲同 文件。

但它沒有指定的範圍。加載的模塊是否緩存了多個調用,以便在當前的HTTP請求或多個HTTP請求中需要('module')?

回答

3

是的,他們是。

不同於其他常見的服務器環境,如PHP, 請求完成後使Node.js服務器不會關閉。

假設你正在使用的優秀express框架,也許這個例子有助於我們理解上的差異:

... // setup your server 

// do a route, that will show a call-counter 
var callCount = {}; 

app.get('/hello/:name', function(request, response) { 
    var name = request.params.name; 
    callCount[name] = (callCount[name] || 0) + 1 

    response.send(
    "Hello " + name + ", you invoked this " + callCount[name] + " times"); 
    }); 
}); 

當調用curl localhost:3000/hello/Dave您將收到每個後續調用一個較大的數字。

第一個呼叫:Hello Dave, you invoked this 1 times

第二個呼叫:Hello Dave, you invoked this 2 times

...等等...

所以你callCount將被任何請求,這條路線修改。它來自哪裏並不重要,它可以在您的require ing的任何模塊中定義。

無論如何,這些變量,任何模塊中定義的,將當復位服務器重新啓動。 你可以反駁說,通過將它們放入一個商店,被分離從你的Node.js的過程,就像一個Redis商店(見node-redis),一個文件系統上的文件或數據庫,像MongoDB。最終取決於你。你只需要知道你的數據來自哪裏並去往哪裏。

希望有所幫助。

0

是的。同樣來自文檔:


    Multiple calls to require('foo') may not cause the module code to be executed 
    multiple times. This is an important feature. With it, "partially done" 
    objects can be returned, thus allowing transitive dependencies to be loaded 
    even when they would cause cycles. If you want to have a module execute code 
    multiple times, then export a function, and call that function. 
+0

文檔沒有指定緩存是跨越多個HTTP請求還是多次調用require('foo')來處理當前的HTTP請求。 – Rajiv 2013-02-28 08:33:52

+0

哦。文檔可能不是非常明確,但是它們被緩存用於多個請求。 :) – L0j1k 2013-02-28 08:36:12

相關問題