2017-02-15 60 views

回答

2

因爲您通常在服務器啓動時執行一次操作,所以這是唯一一次使用阻止調用如fs.readFileSync()require()--在事件循環的第一個記號上。

在讀取這些密鑰之前,您通常不希望發生任何其他事情,並且阻止調用要容易得多。那時沒有事件被處理,所以不會發生性能下降和併發問題。

但事件循環的第一個滴答結束後,您應該只使用非阻塞調用。

這並不是說不可能使用fs.readFile()來獲取證書文件,但只有在所有相關的fs.readFile()調用的所有回調已成功完成後,您才需要啓動其他任何操作。

+0

也很好的原因++ – CaptEmulation

+0

謝謝兄弟。 –

1

主要原因是示例的複雜性。使用readFileSync可讓您編寫同步順序代碼,當給出示例時,不需要提供可用於同步異步代碼的各種解決方案。

例如,使用readFile一個威力:

fs.readFile('/path/to/franciskim.co.key', 'utf8', function (err, privateKey) { 
    if (err) { // .. handle no key found; 
    return; 
    } 
    fs.readFileSync('/path/to/franciskim.co.crt', 'utf8', function (err, certificate) { 
    if (err) { // .. handle no cert found; 
     return; 
    } 
    var credentials = { key: privateKey, cert: certificate }; 
    // Now create https server here 
    }); 
}); 

這裏這個例子是一個接近等同於readFileSync除了現在你必須明確地處理錯誤。使用readFileSync只會導致異常並導致應用程序崩潰。使用異步版本,您必須明確處理錯誤,而且不同的開發人員通常不同地處理錯誤。

使用異步函數確實打開了提高性能的機會,例如通過同時打開兩個文件。

var async = require('async'); 

async.parallel([ 
    fs.readFile.bind(fs, '/path/to/franciskim.co.key', 'utf8'), 
    fs.readFile.bind(fs '/path/to/franciskim.co.key', 'utf8') 
], function (err, results) { 
    var credentials = { key: results[0], cert: results[1] }; 
    // Open https server here 
}); 

這是偉大的,所有,但現在我們在另一個庫,因爲有多個(壞)的方式必須實現這個邏輯自己拉。

readFileSync的使用保留了一些例子,解釋和一致性錯誤流量的空間很小。

+0

好例子++ – rsp

相關問題