Node.js在一个请求中提供多个文件

时间:2016-04-16 21:46:35

标签: javascript node.js http get

是否可以在一个请求中提供多个文件?

以下是我的代码的简化版本,用于向我们的node.js服务器提供服务,该服务器不包含任何参数(缓存代码可缓存文件数据以提高服务器效率,处理错误,等):

var http = require("http");

http.createServer(function(req, res){
    res.setHeader("Access-Control-Allow-Origin", "*");

    if (req.url == "/"){
        res.writeHead(200, {"Content-Type": "text/html"});

        fs.readFile("./pages/index/index.html", function(err, data){
            res.end(data);
        });
    } else if (req.url == "/index.css"){
        res.writeHead(200, {"Content-Type": "text/css"});

        fs.readFile("./pages/index/index.css", function(err, data){
            res.end(data);
        });
    } else if (req.url == "/index.js"){
        res.writeHead(200, {"Content-Type": "application/javascript"});

        fs.readFile("./pages/index/index.js", function(err, data){
            res.end(data);
        });
    } else if (req.url == "/indexBackground.jpg"){
        res.writeHead(200, {"Content-Type": "image/jpeg"});

        fs.readFile("./pages/index/images/background.jpg", function(err, data){
            res.end(data);
        });
    }

}).listen(port);

html文件本身使用CDN导入外部库,对样式表,脚本和图像的引用如下所示:

<link rel="stylesheet" href="https://our-website-url/index.css">
<script type="text/javascript" src="https://our-website-url/index.js"></script>
<img src="https://our-website-url/indexBackground.jpg">

页面已正确提供,但必须提供3个单独的请求才能为页面提供服务。我想这会使网站加载速度变慢,并给服务器增加了不必要的负担。

是否可以在一个请求中提供所有3个文件,尽管它们具有不同的内容类型?如果是这样,我们如何在html文件中的一个请求中引用这些文件,如果没有,是否有更有效的方法来提供我们当前使用的页面?

2 个答案:

答案 0 :(得分:2)

您是下载文件还是在浏览器中呈现文件?如果您在浏览器中呈现它们,则更有意义的是浏览器可以对资源进行多个并发请求以优化带宽而不是单个阻止请求。对CDN的3个单独请求将是并行的,这将更快。

答案 1 :(得分:2)

如果它是单个页面,您可以将它们放在脚本和样式标签中,图像可以放在数据网址中,您很高兴。如果是使用这些文件的多个页面,最好让浏览器获取并缓存它们。

我认为有一些协议(http2?),服务器可以发送浏览器接下来要求的其他文件。但我不知道这项技术的用途是什么。

祝你好运,有趣的问题!