2016-07-14 5 views
1

私は次のように気づいた:なぜapp.renderはローカルファイルパスを使用してイメージを同期して読み込みますか? - NodeJS

  • 私は別のウェブサイトこのようなでホストされている画像URLの配列レンダリングする場合:

index.js

MongoClient.connect('mongodb://localhost:27017/sample', function(err, db) { 
    db.collection('collSample').findOne({ somevar: 'somevalue' }, function(err, doc) { 
     assert.equal(null, err); 
     res.render('index', { 
      title: 'render images' , 
      imagesPaths: doc.images.`**URLs**` 
     }); 
     db.close(); 
    }); 
}); 

index.jade

- each path in imagesPaths 
    span 
     img(src="#{path}") 

このネットワーク情報はChromeデベロッパーツールから入手できます。

index.js

MongoClient.connect('mongodb://localhost:27017/sample', function(err, db) { 
    db.collection('collSample').findOne({ somevar: 'somevalue' }, function(err, doc) { 
     assert.equal(null, err); 
     res.render('index', { 
      title: 'render images' , 
      imagesPaths: doc.images.`**localPath**` 
     }); 
     db.close(); 
    }); 
}); 

:私はとlocalYこのように保存されている画像を使用した場合、画像が非同期 As you can see, images are loading asynchronously

  • をレンダリングされているかに注目してくださいしかし、 index.jade

    - each path in imagesPaths 
        span 
         img(src="#{path}") 
    

    私はこのネットワーク情報を取得します。 iamgesはと同時ににレンダリングされていることに注意してください。また、の読み込み時間はかなり低いです。 enter image description here

    質問1:どのように私は非同期的に画像をレンダリングする強制することができますか?

    質問2:なぜnodejsが画像を非同期にレンダリングし、他のものが同期するのですか?私は、nodejsが、イメージsrc属性の内側に何があるかにかかわらず、イメージの束を非同期的にレンダリングすると考えました。

+1

Node.jsはイメージをレンダリングしません。あなたのブラウザはそうです。 – Cristy

+0

あなたはまったく正しい@Cristyです。これは、[ここ](https://developers.google.com/web/tools/chrome-devtools/profile/network-performance/understanding-resource-timing)から抽出された画像がキューに入れられる理由です:_Chrome HTTP/2を使用しない限り、ホストごとに最大6つのTCP接続( – thorstorm

+0

)を適用します。 – Cristy

答えて

1
  1. は同期的にロードされませんです。すべての要求は非同期に行われます(すべての白い四角形が同時に印刷されることを参照してください)。

本当の違いは、リソースの場所への要求のパスに立つ:

  • すべてのリモート要求は、インターネットを介して取得、到着順序がで同じであることを保証するものではありません開始。

  • すべてのローカル要求はかなりあまりにも要求の順序を維持し、同期する錯覚を与え、かなりすぐ処理されます。

証明:アレイの中央に(例えばhttp://www.nasa.gov/sites/default/files/thumbnails/image/hs-2015-02-a-hires_jpg.jpgため)エイブリィ巨大画像O(Nの*の10メガバイト)またはO(100メガバイト)のローカルパスを追加し、画像がに終了であることを確認してみてください最後にロードする。

関連する問題