前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ques NodeJS服务器渲染设计

Ques NodeJS服务器渲染设计

作者头像
IMWeb前端团队
发布2019-12-03 18:27:11
1.6K0
发布2019-12-03 18:27:11
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb 杨文坚 原文出处:IMWeb社区 未经同意,禁止转载

Ques NodeJS服务器渲染设计

本文会探讨一下Ques的服务器渲染设计方案,实现方案则留给@袁飞翔来详解。

Ques同构?

Yes,Ques NodeJS服务器渲染本质上为了实现:通过Mark来实现浏览器渲染 or 服务渲染的自动切换,即所谓的前后端代码重用(是的,我们野心不仅仅是重用模版而已)。

从Rely中我们学到什么?

  • 模版 + 数据 = 字符串 or DOM操作

字符串用于解决服务器渲染输出,DOM操作用于解决浏览器动态渲染。

  • Type System Query Language(eg. GraphQL) = 数据源与数据Filter重用

也就是数据源和数据Filter(或者叫数据Format)并非不能复用,但是应当在后台去统一,而非前端。

所以过程就变成了

模版 + 数据 = 字符串 or DOM操作

也就是Q.js负责模版在浏览器端渲染,Q.tpl负责模版在!How?

实际上DOM Template是轻逻辑型模版,其通过指令来封装指令,只要实现Q.js中的大部分指令到通用Template的转换,我们便可以做到在服务器渲染,例如q-text

  • before:
代码语言:javascript
复制
<p q-text="msg"></p>
  • after:
代码语言:javascript
复制
<p q-text="msg"><%- msg %></p>

Today is difficult, tomorrow is more difficult, but the day after tomorrow is beautiful.

未来,从浏览器渲染切换向服务器渲染方案只需要:

  • 在页面使用diy-cgi组件
代码语言:javascript
复制
<diy-cgi></diy-cgi>
  • 在对应db文件加上renderTo属性,如:
代码语言:javascript
复制
DB.extend({
    test: DB.graphQL({
        // TSQL 前后端复用
        query: 'query CoursesQuery {\
          courses {\
            name\
            start\
            end\
          }\
        }',
        // 所以Ques会自动将id为recommend的Component转成模版,
        // 并进行渲染
        renderTo: '#recommend'
    })
});

便可完成服务器渲染工作。

中间过度方案

由于数据层统一并非易事,所以必然有中间过程,中间过程方案可以参见:https://github.com/miniflycn/Ques/issues/42

相关项目

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-09-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ques NodeJS服务器渲染设计
    • Ques同构?
      • 从Rely中我们学到什么?
        • 所以过程就变成了
          • 模版 + 数据 = 字符串 or DOM操作
            • Today is difficult, tomorrow is more difficult, but the day after tomorrow is beautiful.
              • 中间过度方案
                • 相关项目
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档