为什么不用js去渲染页面?
用js去渲染页面,服务器只提供数据。 那么页面都可以是静态的html文件。 通过ajax获取数据。然后js去渲染。 这样不是很和谐么?
而且好处也很多。首先页面只包含模板,静态化有助于各级缓存。
其次js 渲染简单方便。分担服务器渲染的计算量。
服务器程序实现简单只提供数据。
画个流程吧:
client ---------------------- > server
<------- html模板 + js
ajax ------------->
<------------json 数据
然后:
js 把json数据 填充 html 模板 -----> 浏览器解析渲染画到屏幕上
我指的就是js 填充 html模板这一过程.
我觉得 唯一不好的是搜索引擎不知道支持不支持这种页面了。
可是奇怪的是虽然有很多js渲染库 。有的横方便而且超简单 。但是各个网站并没有使用这些技术。请问只是为啥。仅仅是对搜索引擎不友好么?
自己照着tempo.js写了一个用于 js模板渲染的函数。
function render(id, data, insert){
if(!data) return;
if(!render.__t)render.__t = {};
var t = render.__t[id];
dom = document.getElementById(id);
if(!dom) return;
if(!t){
var html = dom.innerHTML.replace(/[\n\r]/gm,' ')
.replace(/([\'|\\|\"])/gm,"\\$1")
.replace(/#([\w\d]{3,40})#/gmi, "'+data[\"$1\"]+'");
html = ["return '", html ,"';"].join('');
t = new Function('data',html);
render.__t[id] = t;
dom.innerHTML = '';
}
if(!t) return;
var ret = '';
if(data.length){
for(var i=0,len=arr.length; i<len; i++){
arr[i] = t(arr[i]);
}
ret = arr.join('');
}else{
ret = t(data);
}
if(insert == 0){
ret = ret + dom.innerHTML;
}else if(insert == -1){
ret = dom.innerHTML + ret;
}
dom.innerHTML = ret;
}
js这么写
var obj = {urladdr:'http://google.com', name:'草根'};
render('xxx',obj);
搞定 。 如果穿进去一个list [] 。就会渲染出一串。
做了一个例子 渲染sohu微博页面的.
http://fengshihao.tk/jst.html
打开页面直接看源码. 渲染速度没问题 .
实现有两种方式,
1 把生成的json数据放到页面里 直接带过来.(不知道这样对 seo支持的怎么样?)
2 用ajax去获得.