是require
ing模塊將阻止每一個單一的請求?根據docs,模塊在第一個require
之後被緩存,但是我想查看是否在響應請求時執行動態require
的反模式。我應該在迴應請求時避免調用require嗎?
3
A
回答
3
不,它不會在每次請求(因爲您需要每次都在同一個模塊,只要)塊,這不是一個反模式。
如果您在每個請求中加載相同的模塊,則任何對require
的調用都將立即返回(因爲該模塊已被加載,編譯和緩存)。但是,如果可能需要許多不同的模塊,以致於無法獲得緩存的好處,那麼執行異步請求可能會更好。
但是像這樣的東西?
function handler(req, res) { require('fs').readFile(…); }
沒什麼大不了的。這只是一個風格問題。
1
我經常被告知任何類型的阻塞都是node.js中的no-no,並且異步性是它的主要命令之一。你可以嘗試以下。
從non-blocking require in node.js
引用答案這是多麼需要實現:
> console.log(require.extensions['.js'].toString())
function (module, filename) {
var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
module._compile(stripBOM(content), filename);
}
你可以做同樣的事情在你的應用程序。我想這樣的事情會的工作:
var fs = require('fs')
require.async = function(filename, callback) {
fs.readFile(filename, 'utf8', function(err, content) {
if (err) return callback(err)
module._compile(content, filename)
// this require call won't block anything because of caching
callback(null, require(filename))
})
}
require.async('./test.js', function(err, module) {
console.log(module)
})
0
這不是慢或快。要求是同步操作。這意味着它將在執行時阻塞整個服務器。如果你有100000個連接,所有將等待100000個需求。
永遠不要使用內循環,這是不好的做法。
所以回答你原來的問題是。
相關問題
- 1. 我應該避免多部分/表單請求嗎?
- 2. 我應該避免使用sp_getAppLock嗎?
- 3. 我應該避免投射指針嗎?
- 4. 我應該在生產應用程序中避免打包嗎?
- 5. 我應該避免@@ Fetch_Status?
- 6. 我應該避免UI時,iOS應用程序在後臺
- 7. 優化OpenGL ES應用程序。我應該儘可能避免調用glVertexPointer嗎?
- 8. 我應該避免在CSS中使用!important嗎?
- 9. 使用回調函數和異步請求時避免重複
- 10. 我應該阻止HTTP 1.0請求嗎?
- 11. 我應該限制ajax請求嗎?
- 12. 我應該避免使用「開關」?
- 13. 我應該避免使用STATIC vaiables
- 14. 我應該使用/避免jQuery動畫?
- 15. 我們應該避免使用LEFT JOIN
- 16. 「雙重」任務 - 應該避免嗎?
- 17. C++程序員應該避免memset嗎?
- 18. 如何避免QNetworkAccessManager多重POST請求?我的應用程序
- 19. 我應該避免使用Prolog和一般的尾遞歸嗎?
- 20. 我應該儘可能避免使用魔術字符串嗎?
- 21. 我應該用guard子句,並試圖避免else子句嗎?
- 22. 我應該避免使用Monad失敗嗎?
- 23. 我應該總是避免使用小寫的類名嗎?
- 24. 我應該避免使用對象作爲變量名嗎?
- 25. 我應該避免在全局隊列中創建JSContext嗎?
- 26. 我應該避免在foreach循環中查詢數據庫嗎?
- 27. 我應該在Activity類之外避免`startActivity`嗎?
- 28. 我應該避免在Rails視圖中檢查零嗎?
- 29. 我應該避免在IIS中安裝WordPress嗎?
- 30. 我應該避免在golang中打包單身人士嗎?
它是緩慢和多餘的。但是,這很好......如果你想要一個非常滯後,緩慢的Web服務:) – Markasoftware
@Markasoftware:錯了。 'require()'緩存模塊,所以重複'require()'很快。 – SLaks