bigpipe服务器端渲染、bigpipe前端渲染, 速度之比较
发布于 7个月前 作者 tulayang 633 次浏览

采用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快很多,前端渲染在服务器上花费的时间更多,前端渲染“更慢一些”。

5 回复

服务器端渲染,有利于不支持JS的搜索引擎抓取,但用户量大了服务器压力大,可能会比客户端渲染更慢了。 客户端渲染,还得看客户端环境和配置

你都没看明白我说的内容。 我所说的就是"但用户量大了服务器压力大,可能会比客户端渲染更慢了。"这个问题。 如果事实是这样的话,我就没必要在这里谈这个问题了。

使用预编译模板, 客户端渲染在服务器内消耗的时间要高于服务器端渲染。 注意,客户端消耗时间高于服务器端渲染, 而且客户端只完成了发送json字符串。

前端渲染性能上确实作用不大了,但是别忘了这样可以和后端完全脱离,不管你后端用java还是.net,还是nodejs,切换的时候就方便了。json转化速度慢应该有更快的库。

在客户端慢那么一点点无所谓了,大家的配置越来越好的

不是在客户端慢,是在服务器端慢

回到顶部