ノードで開発するときは、常にブロッキング(同期)関数を避けて非同期関数を使用する必要があることを知っていますが、それらがどのように比較されるかを確認するために少しテストします。
i18nデータ(日付と時刻の形式など)を含むjsonファイルを開き、そのデータを、このデータを使用してビューの数値などを形式化するクラスに渡す必要があります。
クラスのすべてのメソッドをコールバック内にラップし始めるのはちょっと厄介なので、可能であれば、代わりに同期バージョンを使用します。
console.time('one');
console.time('two');
fs.readFile( this.dir + "/" + locale + ".json", function (err, data) {
if (err) cb( err );
console.timeEnd('one');
});
var data = fs.readFileSync( this.dir + "/" + locale + ".json" );
console.timeEnd('two');
これにより、コンソールに次の行が表示されます。
two: 1ms
one: 159ms
fs.readFileSyncはfs.readFileよりも約150倍高速で、50KBのjsonファイル(縮小)をロードするのに約1msかかるようです。私のすべてのjsonファイルは約50-100KBです。
また、このjsonデータをメモ化するか、セッションに保存して、ファイルがセッションごとに1回だけ(またはユーザーがロケールを変更したときに)読み取られるようにすることも考えていました。私はそれをどのように行うのか完全にはわかりません、それはただの考えです。
fs.readFileSync
私の場合は使用しても大丈夫ですか、それとも後で問題が発生しますか?