采用bigpipe后,HTML渲染在服务器端快还是前端快?
首先,差异出现在JSON.stringify(用户数据)
和template.render(用户数据)
即把动态数据解析为字符串–>浏览器慢? 还是渲染使用动态数据替换字符串慢?
现在,把要渲染的HTML模板预编译,作为缓存,简单的测试如下:
var blog = [ {title:'1', text:'t'} ]
var now = new Date().getTime();
for (var i = 0; i < 1000; i++) {
JSON.stringify({ blog : blog });
}
var last = new Date().getTime();
console.log('前端渲染: %sms', last - now);
var hogan = require('hogan');
// 预编译的模板字符串, 缓存
var t = new hogan.Template(function(c,p,i){var _=this;_.b(i=i||"");if(_.s(_.f("blog",c,p,1),c,p,0,9,57,"{{ }}")){_.rs(c,p,function(c,p,_){_.b("<h3>");_.b(_.v(_.f("title",c,p,0)));_.b("</h3><hr />");_.b("\n" + i);_.b("<div>");_.b(_.t(_.f("text",c,p,0)));_.b("</div>");_.b("\n");});c.pop();}return _.fl();;});
var now = new Date().getTime();
for (var i = 0; i < 1000; i++) {
t.render({ blog : blog });
}
var last = new Date().getTime();
console.log('服务器渲染: %sms', last - now);
var hogan = require('hogan');
// 预编译的模板字符串, 缓存
var t = new hogan.Template(function(c,p,i){var _=this;_.b(i=i||"");if(_.s(_.f("blog",c,p,1),c,p,0,9,57,"{{ }}")){_.rs(c,p,function(c,p,_){_.b("<h3>");_.b(_.v(_.f("title",c,p,0)));_.b("</h3><hr />");_.b("\n" + i);_.b("<div>");_.b(_.t(_.f("text",c,p,0)));_.b("</div>");_.b("\n");});c.pop();}return _.fl();;});
var now = new Date().getTime();
for (var i = 0; i < 1000; i++) {
JSON.stringify({
id : 'test',
content : t.render({ blog : blog })
});
}
var last = new Date().getTime();
console.log('服务器渲染: %sms', last - now);
你会发现服务器端渲染HTML要比JSON.stringify快很多,前端渲染在服务器上花费的时间更多,前端渲染“更慢一些”。