利用Dart编写的后端框架选择

引言:实习公司在利用Flutter的新特性编写web页面,并期望利用flutter的Dart语言开发个后台系统达到一码多开发+云部署的结果。不过由于dart在pc端和web端的社区不够强大,有些轮子造的不够完善不能直接利用,所以整出了以下内容。

Dart的后台框架(轮子)

三个后台框架

Dart的后台框架共有三种,分别是:

  1. Shelf
  2. Stream
  3. Jaguar

下图为三种框架主函数以及使用例子的图片:

Shelf实例

Jaguar实例

Stream实例

性能:

  • Jaguar_server 初次查询耗时:200 - 230 MS
  • Stream_server 初次查询耗时:75 - 80 MS
  • Shelf_server 初次查询耗时:100 - 110 MS
  • 缓存后的后期查询速度无差

三者对比

Shelf

  • 优点:
  1. Web Server Middleware for Dart 由官方推荐/官方编写的后台服务框架,起源至今时间长,拥有社区支持完善,可通过stackoverflow查到相关的资料
  2. 该包文件一直在更新,支持 null safe,同时有相较于其余两个框架有更多的插件包支持,可扩展性高,可以自己写中间件和handler
  3. 效率上在三个框架中排第二,略逊于stream但强于jaguar
  4. 支持跨域,静态文件通过扩展包实现
  5. 有比较完整的后台支持,可通过插件启用热重载(flutter新加入功能)

一些Shelf包

  • 缺点:
  1. 代码不好写,相较于其他两个框架shelf的代码比较难写,如header的文本类型定义比较麻烦
  2. Post的formdata取值需要通过包扩展的方式且取值效率低(通过遍历)
  3. 没有提供实例,需要自己探索

获取formdata方式

官方提供的example

Stream

  • 优点

一些Stream包

  1. 历史长度和shelf相当,具有较长时间的更新与支持,支持null safe
  2. 效率最高,在请求速度上比其他两个框架快(比shelf快一点)
  3. 样例包完整,提供多种解决方案(静态文件/mvc/ajax/templating)
  4. 取值方便,提供框架方法
  5. 代码相较于shelf好写且易懂

Stream实例

  • 缺点
  1. 支持包较少,大部分均已过期且不支持dart2.0以上版本
  2. 通过Dart packages (pub.dev)搜索轮子仅stream包
  3. Formdata没有提供方法获取
  4. 可参考资料较少,可能需要自我攻克(google未搜索暂不清楚结果)

Stream包

Jaguar

  • 优点
  1. 起源时间长,更新版本多且支持null safe
  2. 官网提供最全的方法,相较于其余两个框架入手门槛低
  3. Pub中提供的包,Jaguar比stream多且功能较为齐全,甚至提供数据库orm但不支持mongodb,但没有shelf多
  4. 使用样例直接在pub包下提供
  5. 各种取值方法由框架提供,较为完善,带json/formdata判断

Jaguar使用样例

  • 缺点
  1. 可参考资料较少,需要自行攻克
  2. 效率较其他两个框架偏低

三个后台框架的共同特点:

  • Cookie数据管理 / 接收发送均有
  • Json数据三者皆可收发
  • 三者均没有数据库管理,需要引入mongo—dart / redis包
  • 使用难易程度 shelf > stream > jaguar

项目架构

项目的基本架构

项目代码结构

代码结构

结论(选择)

最终决定选择Shelf作为后台框架,主要有以下因素:

  • 有官方支持,后期更新能得到保障
  • 虽然使用上有难度,但上手后适应期极短
  • 效率上可以接受
  • 有较好的社区支持,出现问题可以较方便的获取支持

2022年3月22日


利用Dart编写的后端框架选择
http://blask.cn/2022/03/22/Dart的后端框架选择/
作者
Wayne Li
发布于
2022年3月22日
许可协议