[关闭]
@wwanghee 2017-06-29T00:39:03.000000Z 字数 910 阅读 635

【腾讯项目】Node端接入SONIC指引文档


一、快速使用

1、安装sonic_differ模块

tnpm install @tencent/sonic_differ --save

2、引入sonic_differ模块

const sonic_differ = require('@tencent/sonic_differ');

3、拦截后端直出数据,针对sonic方案进行数据加工

1)建立sonic缓存结构体

  1. let sonic = {
  2. buffer: [],
  3. write: function (chunk,encoding) {
  4. let buffer = chunk;
  5. let ecode = encoding || 'utf8';
  6. if(!Buffer.isBuffer(chunk)){
  7. buffer = new Buffer(chunk,ecode);
  8. }
  9. sonic.buffer.push(buffer);
  10. }
  11. };

2)后端直出时拦截数据,交给sonic_differ模块进行处理

  1. response.on('data',(chunk,encoding)=>{
  2. sonic.write(chunk,encoding)
  3. });
  4. response.on('end',()=>{
  5. let result = differ(ctx, Buffer.concat(sonic.buffer));
  6. sonic.buffer = [];
  7. if(result.cache){
  8. //304,对应sonic完全缓存模式
  9. return ''
  10. }else{
  11. //其它sonic模式
  12. return result.data
  13. }
  14. })


、原理介绍

后端的sonic接入最核心的关键就是拦截直出的内容,对此内容进行二次加工。加工的过程就是sonic_differ模块做的事情,加工过后将数据再输出回前端。

sonic模式共有四种(前面应该有文档介绍,这里再强调一下):

1)sonic首次访问模式:第一次访问,没有模板和数据缓存,返回原始直出数据

2)sonic完全缓存模式:等同于页面304,返回空

3)sonic数据更新模式:sonic的模板没有变化,只有数据有变化,返回变化的数据

4)sonic模板更新模式:sonic的模板有发生变化,返回原始直出数据

具体原理如下图所示:

image.png-110.3kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注