利用Dart编写的后端框架选择
引言:实习公司在利用Flutter的新特性编写web页面,并期望利用flutter的Dart语言开发个后台系统达到一码多开发+云部署的结果。不过由于dart在pc端和web端的社区不够强大,有些轮子造的不够完善不能直接利用,所以整出了以下内容。
Dart的后台框架(轮子)
三个后台框架
Dart的后台框架共有三种,分别是:
- Shelf
- Stream
- Jaguar
下图为三种框架主函数以及使用例子的图片:
性能:
- Jaguar_server 初次查询耗时:200 - 230 MS
- Stream_server 初次查询耗时:75 - 80 MS
- Shelf_server 初次查询耗时:100 - 110 MS
- 缓存后的后期查询速度无差
三者对比
Shelf
- 优点:
- Web Server Middleware for Dart 由官方推荐/官方编写的后台服务框架,起源至今时间长,拥有社区支持完善,可通过stackoverflow查到相关的资料
- 该包文件一直在更新,支持 null safe,同时有相较于其余两个框架有更多的插件包支持,可扩展性高,可以自己写中间件和handler
- 效率上在三个框架中排第二,略逊于stream但强于jaguar
- 支持跨域,静态文件通过扩展包实现
- 有比较完整的后台支持,可通过插件启用热重载(flutter新加入功能)
- 缺点:
- 代码不好写,相较于其他两个框架shelf的代码比较难写,如header的文本类型定义比较麻烦
- Post的formdata取值需要通过包扩展的方式且取值效率低(通过遍历)
- 没有提供实例,需要自己探索
Stream
- 优点
- 历史长度和shelf相当,具有较长时间的更新与支持,支持null safe
- 效率最高,在请求速度上比其他两个框架快(比shelf快一点)
- 样例包完整,提供多种解决方案(静态文件/mvc/ajax/templating)
- 取值方便,提供框架方法
- 代码相较于shelf好写且易懂
- 缺点
- 支持包较少,大部分均已过期且不支持dart2.0以上版本
- 通过Dart packages (pub.dev)搜索轮子仅stream包
- Formdata没有提供方法获取
- 可参考资料较少,可能需要自我攻克(google未搜索暂不清楚结果)
Jaguar
- 优点
- 起源时间长,更新版本多且支持null safe
- 官网提供最全的方法,相较于其余两个框架入手门槛低
- Pub中提供的包,Jaguar比stream多且功能较为齐全,甚至提供数据库orm但不支持mongodb,但没有shelf多
- 使用样例直接在pub包下提供
- 各种取值方法由框架提供,较为完善,带json/formdata判断
- 缺点
- 可参考资料较少,需要自行攻克
- 效率较其他两个框架偏低
三个后台框架的共同特点:
- Cookie数据管理 / 接收发送均有
- Json数据三者皆可收发
- 三者均没有数据库管理,需要引入mongo—dart / redis包
- 使用难易程度 shelf > stream > jaguar
项目架构
项目代码结构
结论(选择)
最终决定选择Shelf作为后台框架,主要有以下因素:
- 有官方支持,后期更新能得到保障
- 虽然使用上有难度,但上手后适应期极短
- 效率上可以接受
- 有较好的社区支持,出现问题可以较方便的获取支持
2022年3月22日
利用Dart编写的后端框架选择
http://blask.cn/2022/03/22/Dart的后端框架选择/