关于角度通用的两个问题:
我如何获得角度来缓存服务器端的渲染页面,因为它只需要大约 2 秒才能在客户端进行初始响应,因为 Angular 每次都会在服务器端生成页面。
在前端,角度似乎正在破坏网站,例如 self.context.(funcname) 不存在。我知道的这些问题与调用函数的范围有关,如果我不使用通用(包括预引导),它们确实有效。
有任何想法吗。
关于角度通用的两个问题:
我如何获得角度来缓存服务器端的渲染页面,因为它只需要大约 2 秒才能在客户端进行初始响应,因为 Angular 每次都会在服务器端生成页面。
在前端,角度似乎正在破坏网站,例如 self.context.(funcname) 不存在。我知道的这些问题与调用函数的范围有关,如果我不使用通用(包括预引导),它们确实有效。
有任何想法吗。
只是为了回答这个问题:
我在 server.ts 中简单地制作了一个自定义解决方案:
const cache = {};
function ngApp(req, res) {
let baseUrl = '/';
let url = req.originalUrl || '/';
res.setHeader('Cache-Control', 'public, max-age=300');
if (cache.hasOwnProperty(url)) {
var hit = cache[url];
if (hit[0] > Date.now()) {
res.status(200).send(hit[1]);
return;
}
}
res.render('index', {
req,
res,
ngModule: MainModule,
preboot: {
appRoot: ['app'],
uglify: false,
buffer: true
},
async: false,
baseUrl: baseUrl,
requestUrl: req.originalUrl,
originUrl: 'http://localhost:3000'
},(err, html) => {
cache[url] = [Date.now()+180000,html];
res.status(200).send(html);
});
}
app.get('*', ngApp);
app.get('/', ngApp);
所以基本上我检查内存中的变量,如果我有请求的 url 的现有缓存条目,如果没有,或者它已经过期,然后我重新渲染页面并更新/创建一个缓存条目。
这大大改善了后续请求的交付。在本地,它从大约 1 秒下降到只有 10 毫秒。