【发布时间】:2018-09-12 13:36:37
【问题描述】:
在我的网站上需要加载一些 JSON 文件,一般情况下,我会在 客户端 上使用 fetch,如下所示:
fetch(jsonFileLocation)
.then(res => res.json())
.then(json => {
document.getElementById("jsonOutput").innerText = JSON.stringify(json, null, 2);
});
但在我的例子中,HTML 渲染有一个明显的延迟,用户会首先看到一个空白区域,然后加载 JSON 内容。所以我想如果我渲染 JSON 内容服务器端,它可能会加快速度。
我可以先解析 JSON,然后 res.render() 完全解析 HTML,但我不希望解析 JSON 文件的过程延迟页面的其余部分,所以在我的 Node/ Express/Pug 设置我尝试进行两次渲染:
res.render('index', {
title: 'Homepage',
mainContent: '...'
});
fs.readFile(jsonFileLocation, 'utf8', (err, data) => {
if (err) {
return;
}
res.render('index', {
jsonOutput: JSON.stringify(json, null, 2)
})
})
但这给了我Error: Can't set headers after they are sent.的错误。
解决这个问题有什么更好的方法?
【问题讨论】:
-
你应该先弄清楚到底什么是慢;延迟不太可能是由浏览器内渲染引起的。如果您的服务器代码是延迟的来源,那么在服务器上做更多的工作只会让事情变慢。收集实际性能数据,以免您在黑暗中工作。
-
好点,我会调查缓慢的原因,但我的问题是,有没有办法像我尝试的那样从服务器端部分呈现 HTML 内容?
标签: javascript html node.js express pug