为什么表达app.render同步加载具有本地文件路径的图像? - NodeJS

时间:2016-07-14 23:44:37

标签: node.js image express asynchronous

我注意到以下内容:

  • 当我想渲染一个包含在另一个网站中的图像网址
  • 时,如下所示:

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开发者工具获取此网络信息。注意图像是如何以异步呈现的 As you can see, images are loading asynchronously

  • 但是,如果我使用图像存储的localy ,就像这样:

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();
    });
});

index.jade

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

我收到此网络信息。请注意,iamges正在以同步呈现。此外,加载时间相当低enter image description here

问题1 :如何异步强制渲染图像?

问题2 :为什么有时nodejs呈现图像异步和其他同步?我认为nodejs将异步呈现一堆图像,无论图像src属性内部是什么。

1 个答案:

答案 0 :(得分:1)

  1. 未同步加载。所有请求都是异步的(请参阅所有白色矩形开始同时打印)。
  2. 真正的区别在于对资源位置的请求路径:

    • 每个远程请求都会通过互联网,并且无法保证到达时的到达顺序相同。

    • 每个本地请求都会立即处理 ,从而产生同步错觉,同时也保留了请求的顺序。

    证明:尝试在数组中间添加非常大的图像o(N * 10MB)或o(100MB)(例如http://www.nasa.gov/sites/default/files/thumbnails/image/hs-2015-02-a-hires_jpg.jpg)的本地路径,并查看图像完成最后加载。