1. 问题由来css
在移动互联网电商领域,运营天天须要搭建多个促销页面来吸引用户去点击去购买,一开始程序员临时写个新页面去实现,可这些页面能够用几回就不用了,每次建立新页面去实现费时费力,并且,电商的运营需求是快速迭代的,每次去页面代码里去改,而后上线也太不方便了。因此产品提出了Diy 页面----配置web组件去搭建页面,事先定好页面可能到用到哪些的组件,而后运营在后台选好页面由哪些组件组成,而后分别去配置对应的组件数据,这样运营能够快速地去建立他们所须要的页面,快速响应需求变化。因此Diy 页面能很好地解决电商运营的复杂而快速的需求变更。html
2. Diy 页面初期解决方案前端
每一个组件由模板文件(tpl),JS文件和css文件组成,在页面经过Ajax获取页面数据,经过Require JS按需加载页面所须要的组件内容,而后面前端渲染生成对应的组件html并执行相应JS方法,这种解决方案虽然知足了运营的需求,但页面性能不是很高,用户访问时等待时间有点长,因此必须提升页面响应速度。node
这种解决方案下页面响应慢产生的缘由:git
基于上述缘由的分析,改进后的方案最好是能够在服务端渲染web组件。程序员
3. Diy页面服务端渲染解决方案github
对于前端工程师来讲要服务端去渲染页面,在不熟悉服务端语言的状况下是一个很大挑战,幸好技术发展很快,出现了Node能够用Javascript去写服务端,本身动手丰衣足食。web
NodeJs如今发展已经很成熟了,因此使用node不用担忧出现什么问题。npm
实现方式以下 :gulp
总体过程以下:
此方案优势:
1. 大量减小组件相关的http请求,把js,或css合并为一个请求。
2. 在服务端代理请求数据接口层比用户端去访问数据接口层要快不少;
3. 服务端渲染生成页面html,方便SEO,更方便后期作页面静态化,进一步提高页面性能。
我的写了一个demo放在github上,有兴趣的人能够看下,代码还在继续完善中,地址 https://github.com/hskww/Ncomponents/
源码说明:
代码基于node的thinkjs框架,我的认为thinkjs真的不错,你们比较熟悉的MVC模式,thinksjs送给前端开发人员大大的福利,访问thinkjs https://thinkjs.org/。
源码使用步骤:
1. 安装node;
2. 安装thinkjs ,npm install thinkjs@2 -g --verbose,若是慢可使用 npm install thinkjs@2 -g --registry=https://registry.npm.taobao.org --verbose;
3. 安装依赖 npm install;
4. 运行程序 npm start;
源码中的combo接口是我的本身实现的,固然这个combo你们也能够用外面成熟combo的方案;模板选择了Nunjunks,功能强大的模板引擎(http://mozilla.github.io/nunjucks/),固然也能够选择ejs,ejs能够在模板中直接使用全局函数,而Nunjunks须要事先注册,有兴趣的朋友能够根据业务本身来选择。
Css使用sass开发,使用gulp来编译和压缩js和css文件,combo接口只来合并相关文件,在node层,对js和css的文件作了一个缓存,而后加Expires头,尽可能利用浏览器缓存。
对于node层的缓存,在生产环境中,上线时能够手动更新这些js和css缓存,让用户每次访问都是从缓存中取数据。