2017-10-26 2 views
0

最近読んだのは、「ECMAScript 6モジュールは、エンジンがモジュールを同期して(サーバなど)、非同期に(ブラウザなどで)ロードするかどうかに関係なく動作する必要があります。ブラウザとサーバーのJSモジュールの読み込み(asyncとsync)が異なるのはなぜですか?

なぜJSは、サーバーとブラウザの両方で、非同期的かつ同期的に読み込まれますか?これは意図的ですか?

+1

サーバー上では、モジュールファイルはファイルシステムから(高速で)読み込まれますが、ブラウザではネットワーク経由でロードされます(遅いため、ページをハングアップさせるのではなく非同期でロードする方が便利です)。ネットワークフェッチ)。それはあなたが探している答えか、もっと技術的なものですか?たとえば、実際に読み込みを実行するために使用されているAPIやコードですか? – apsillers

+0

サーバーはファイルシステムに直接アクセスし、ハードドライブから直接モジュールをロードします。とにかくハードウェアの速度によってのみ制限されるため、非同期は必要ありません。一方、ブラウザはネットワーク速度によって大きく制限されています。彼らは、ファイルをロードするのを待っているので、UIを常にブロックする余裕がないので、非同期で行う必要があります。 –

+0

@ JeremyThilleには、サーバーが非同期にもロードされない理由がありますか?それは傷つけないようです。私は両者のトレードオフを理解しようとしています。 –

答えて

2

サーバーはファイルシステムからすぐに読み込まれるため、モジュールを同期してインポートすることを推奨します。一般に、同期コードは書き込みと読み込みが容易です。それは行うことができるようにノードに素晴らしいことだ:ネットワーク負荷が長い時間と同期実行ブロックを取ることができますので、代わりに

require("mymodule", function(err, myModule) { 
    require("foo", function(err, foo) { 
     myModule.doThing(foo); 
    }); 
}); 

var myModule = require("mymodule"), 
    foo = require("foo"); 
myModule.doThing(foo); 

は逆に、非同期コードは、ブラウザでしばしば好ましいです。 UI。バックグラウンドでモジュールを静かにロードし、その完了に非同期で応答しながら、ブラウザのスレッドをユーザに応答させておくこと(およびロードアニメーションなどを表示すること)が望ましいです。

関連する問題