3

ssr框架5.0发布首个同时支持React/Vue服务端渲染的框架可通过Serverless一键发布

 3 years ago
source link: https://zhuanlan.zhihu.com/p/351422017
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ssr框架5.0发布首个同时支持React/Vue服务端渲染的框架可通过Serverless一键发布

FE Node.js Rust umi SSR FaaS

仓库地址:https://github.com/ykfe/ssr 访问链接获取完整的项目描述信息

v2-56ea2851e29339aef33345f22df5826f_720w.jpg

A most advanced ssr framework on Earth that implemented serverless-side render specification for faas and traditional web server.

ssr 框架是为前端框架在服务端渲染的场景下所打造的开箱即用的服务端渲染框架。

此框架脱胎于 egg-react-ssr 项目和ssr v4.3版本(midway-faas + react ssr),在之前的基础上做了诸多演进,通过插件化的代码组织形式,支持任意服务端框架与任意前端框架的组合使用。开发者可以选择通过 Serverless 方式部署或是以传统 Node.js 的应用形式部署,并且我们专注于提升 Serverless 场景下服务端渲染应用的开发体验,打造了一站式的开发,发布应用服务的功能。最大程度提升开发者的开发体验,将应用的开发,部署成本降到最低。

在最新的 v5.0 版本中,同时支持 React 和 Vue 的服务端渲染框架,且提供一键以 Serverless 的形式发布上云的功能。我们可以非常有自信说它是地球上最先进的ssr框架。如果你希望获得开箱即用的体验且能够一键部署上云,请选择 ssr 框架。

仓库地址:https://github.com/ykfe/ssr 访问链接获取完整的项目描述信息

Features

  •  极易定制:前端支持 React/Vue 等现代Web框架;
  •  开箱即用:内置 10+ 脚手架配套扩展,如Antd、TS、Hooks等;
  •  插件驱动:基于插件架构,用户更加专注于业务逻辑;
  •  Serverless优先:一键发布到各种Serverless平台,也支持传统Web Server,比如Egg、Midway、Nest等。
  •  高可用场景,可无缝从SSR降级到CSR,最佳容灾方案。

已实现的功能

表示已经实现的功能

与 next/nuxt 等框架的对比

详细的技术细节对比可以查看本人在2020年 Node.js party 上所做的分享,从 9 个技术细节方面与 next/nuxt/easy-team 等等框架的做法进行对比。

以下简单介绍一下比较显著的优点

下简单介绍一下比较显著的优点

  • 优先考虑 Serverless,我们为应用在 Serverless 场景使用做了诸多优化包括内置发布命令一键发布到多个平台,以及对 Serverless 场景下的代码包大小优化
  • 轻量,核心源代码 2400 行 vs next.js 18w 行 vs nuxt.js 2w行,简洁的核心代码意味着更少的黑盒以及更少的性能损耗,事实上我们的性能等于直接调用框架提供的原生 API 无任何中间层
  • 没有恶心的 .next, .nuxt 这种隐藏文件夹包含着几万行通过 模版渲染/Webpack 打包出来的可读性极差的代码,当你的应用出错时,你几乎无法从这些隐藏文件中获得任何有效信息
  • 接地气,在 SSR 场景使用 UI 框架是一件不简单的事情,我们内置对世界上最流行的 UI 框架 ant-design 的支持。无需用户做额外配置
  • 没有传统模版引擎,多数开发者是都十分厌恶使用传统模版引擎且需要引入额外的库和学习成本。我们没有模版引擎,根据场景 All in JSX 或者 Vue template 来编写 html 布局
  • 没有 style-loader,不存在本地开发使用 style 标签,线上环境使用 css 文件这种开发体验割裂的情况。我们统一使用独立的 css 文件且支持 HMR 和动态加载
  • 风格统一,无论是 React/Vue 运行的本质始终都是 js,我们在两种框架的 SSR 实现思路一模一样,实现代码的高度复用,使用本框架无论是从 React 切换成 Vue 或者反过来都十分轻易
  • 功能丰富,UI 框架、代码分割、HMR、TS、Serverless、SSR 降级 CSR 开发所需要的功能应有尽有
  • 示例丰富,默认示例 cover 大多数真实线上应用场景,包含 服务端框架选择、前端调用 Node.js 接口的方式、前端页面路由跳转的数据获取,应用部署等所有功能用例在 example 中都有体现。我们拥有丰富的线上大规模 SSR 应用开发经验,用户使用过程中遇到的任何问题都有策略解决。
  • 没有 runInNewContext,我们不像其他框架的做法一样使用 vm 模块创建上下文来解析服务端 bundle,所以我们的性能是极高的,可以简单理解为与 Vue 的 renderer 提供的 runInNewContext: false 功能类似(选项为 false 本质是调用 runInThisContext)。虽然无需每次都创建一次新的上下文但 Vue 官方文档的做法仍然需要使用 vm 模块来解析代码在性能上会有一定损耗。由于代码执行的当前上下文就是服务端的 global 对象所以要注意我们的前端组件代码中应该避免去修改 global 对象。且记住 vm 模块也并不是安全沙箱机制。ref: https://ssr.vuejs.org/zh/api/#runinnewcontext
    http://nodejs.cn/api/vm.html

通过访问以下链接来预览该框架通过 Serverless 一键部署到阿里云/腾讯云服务的应用详情。
通过使用 queryParams csr=true 来让 SSR 服务端渲染模式一键降级为 CSR 客户端渲染模式,也可以通过 config.js 来进行配置。

Getting Start

迅速开始一个应用

$ node -v # 建议版本>=v10.15.0
v12.16.1

create-ssr-app

我们提供了 create-ssr-app 脚手架,可迅速创建不同类型的 example。如无特殊需求,我们推荐创建 Serverless 类型的应用,可享受一站式的应用开发,部署能力。

在最新的版本中,我们集成了 midway-serverless 2.0 的强大特性,使得开发者可以任意在传统 Node.js 应用与 Serverless 应用中切换。详情见该 PR
开发者可以调用 npm run prod 以传统 Node.js 应用的形式部署,也可以调用 ssr deploy 一键发布到云平台。

$ npm init ssr-app my-ssr-project --template=midway-react-ssr # 创建 React SSR 应用,同时支持 Serverless 形式一键发布或以传统 Node.js 应用的形式部署
$ npm init ssr-app my-ssr-project --template=midway-vue-ssr # 创建 Vue SSR 应用,同时支持 Serverless 形式一键发布或以传统 Node.js 应用的形式部署
$ npm init ssr-app my-ssr-project --template=nestjs-react-ssr # 创建 React SSR 应用,基于 Nestjs Node.js 框架提供的能力以传统 Node.js 应用的形式部署
$ npm init ssr-app my-ssr-project --template=nestjs-vue-ssr # 创建 Vue SSR 应用,基于 Nestjs Node.js 框架提供的能力以传统 Node.js 应用的形式部署
$ npm i
$ npm start # 等价于 ssr start
$ open http://localhost:3000
$ npm run build # 等价于 ssr build
$ GENERATE_ANALYSIS=true npm run build # 可视化生成构建产物
$ npm run deploy # 支持发布多个平台默认发布到阿里云 等价于 ssr deploy
$ npm run deploy:tencent # 发布到腾讯云 等价于 ssr deploy --tencent

我们针对 Serverless 场景的代码包做了优化,将发布速度做到极致。

上述内容简单介绍了一下 ssr 框架具有哪些强大的能力,如果你想详细的了解应用的运行机制以及使用细则,建议访问仓库地址以获得更加详细的信息。也可以扫码加入我们的钉钉交流群实时获得最新信息。

仓库地址:https://github.com/ykfe/ssr 访问链接获取完整的项目描述信息


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK