发布时间:2020年3月9日 - 6分钟阅读
我们又在做了。这是2020年,还有2019年、2018年和2017年。
让我先说一下--这绝不是在比较你下一个选择的前端应该是什么。这是一个小范围的、相对不成熟的、关于三方面的比较。性能,大小,和代码行数的相当相似的应用程序。
考虑到这一点,下面是它的工作原理:
我们比较的是RealWorld App -- 比 "待办事项 "更重要的东西。通常 "to-do "并不能传达足够的知识和观点来实际构建真正的应用。
它在某种程度上是标准化的--一个符合一定规则的项目--有一个规范。提供后端API、静态标记和样式。
由专家编写或审查 - 一个一致的,真实世界的项目,理想情况下,该技术的专家会建立或审查。
我们在比较哪些库/框架?
在写这篇文章的时候,RealWorld repo上有24个Conduit的实现。它是否有很多追随者并不重要。唯一的条件是--它出现在RealWorld repo页面上。
我们要看哪些指标?
性能--这个App需要多长时间来显示内容并变得可用?
大小--这个App有多大?我们只比较编译后的JavaScript文件的大小。HTML和CSS对所有变体都是通用的,并从CDN(内容交付网络)下载。所有技术都会编译或移植到JavaScript,因此我们只比较这个文件的大小。
代码行数--作者需要多少行代码才能根据规范创建RealWorld应用?公平的说,有些应用的花样更多一些,但应该不会有太大影响。我们量化的唯一文件夹是每个app中的src/。不管它是否是自动生成的 - 你仍然需要维护它。
衡量标准#1:性能
我们将检查Chrome浏览器附带的Lighthouse Audit的性能评分。Lighthouse的性能得分在0到100之间。0为最低分。更多详情请查看Lighthouse评分指南。
审核设置
Lighthouse审核设置所有测试的应用程序
理由
越早绘制,越早有人能做事,对使用APP的人来说,体验越好。
性能(0-100分)--越高越好。
备注
注:由于缺乏Demo应用,PureScript被跳过。
结束语
Lighthouse评分非常实事求是。今年你可以看到,那些没有维护/更新的应用正在从90的悬崖上掉下来。如果你的应用得分>90,可能不会有成吨的差别。话说AppRun、Elm和Svelte真的令人印象深刻。
衡量标准#2:规模
传输大小来自Chrome网络标签。GZIP压缩了的 响应头加上响应主体,由服务器交付。
这取决于框架的大小以及添加的任何额外的依赖关系。此外,构建构建工具能多好地消除捆绑包中未使用的代码。
基本原理
文件越小,下载的速度越快,解析的难度也越小。
传输大小以KB为单位--越少越好
备注
由于缺少Demo应用,PureScript被跳过。
Angular +ngrx +nx请不要怪我Angular + ngrx + nx--检查Chrome开发工具网络标签,如果我数错了--请告诉我。
Rust + Yew + WebAssembly还包括.wasm文件。
结论
Svelte和Stencil社区的工作令人惊叹,把它弄到20KB以下,真的是一项成就。
指标#3:代码行数
使用 cloc 我们计算每个 repo 的 src 文件夹中的代码行数。空白和注释行不在计算范围内。为什么这很有意义呢?
如果说调试是消除软件错误的过程,那么编程一定是把错误放进去的过程--Edsger Dijkstra。
理由
这显示了给定库/框架/语言的简洁程度。你需要多少行代码来实现几乎相同的应用程序(其中一些有更多的皮带和口哨),相应的规范。
代码行数--越少越好
备注
Svelte是在文章最初发布后添加的--感谢Svelte大师。
riotjs-effector-universal-hot由于cloc无法处理.riot文件而被跳过。
Angular+ngrx。LoC计算只在/libs文件夹下进行,包括.ts和.html文件。如果你认为这是错误的,请告诉我正确的数字是什么,你是如何计算的。
结束语
在1000LoC下,只有Imba和[ClojureScript带re-frame]可以实现应用。Clojure以异常的表现力著称。Imba是第一次出现在这里(去年的cloc,不知道.imba文件格式),看来它是要留下来了。如果你关心你的LoC,你就知道该怎么做了。
总结
请记住,这并不是完全的苹果对苹果的比较。有些实现使用代码拆分,有些没有。其中有些托管在GitHub,有些托管在Now,有些托管在Netlify。你还想知道哪个是最好的吗?我把它留给你。
#常见问题解答
#1 为什么框架X、Y和Z没有被包括在这次比较中?
因为RealWorld repo还没有完成实施。考虑一下贡献吧! 在你最喜欢的库/框架中实现这个解决方案,我们下次就会把它包括在内。
#2 为什么你把它叫做真实世界?
因为它不仅仅是一个待办事项应用。我们所说的RealWorld并不是说我们会比较工资、维护、生产力、学习曲线等。有其他调查可以回答其中的一些问题。我们所说的RealWorld是指一个连接到服务器、进行身份验证并允许用户进行CRUD的应用--就像一个真实世界的应用一样。
#3 为什么你没有包含我最喜欢的框架?
请看上面的#1,但为了以防万一,又来了:因为RealWorld repo的实现没有完成。我不做所有的实现--这是一个社区的努力。如果你想在比较中看到你的框架,可以考虑贡献一下。
#4 你包含了哪个版本的库/框架?
在写作的时候(2020年3月)可用的版本。这些信息来自RealWorld repo。我相信你可以从GitHub repo中找到这个信息。
#5 为什么你忘了包含一个比比较中更流行的框架?
同样,见#1和#3。在RealWorld repo的实现并不完整,就这么简单。
如果你喜欢这篇文章,你应该在Twitter上关注我。我只写/推特上的编程和技术。
🎉 学习ClojureScript和re-farme - 视频教程 🎉 .
通过( www.DeepL.com/Translator )(免费版)翻译