2023.08.20前端周刊

100 阅读4分钟

本专栏(FE weekly news)文章争取每周一更,但由于精力有限,每篇周报的内容可能不多,欢迎大家关注

新闻

  1. The “Skeleton Squad” is now targeting NPM

    Socket团队发现npm生态最近被一些bad coder盯上了,它们已经开始尝试攻击npm用户。

  2. Bun1.0即将发布,发布会将在9月7号召开,想参加的话可以在这里报名

文章

1. Things you forgot (or never knew) because of React

作者对React大胆开炮(我先说我只是文章的翻译工,React Fans不要攻击我,我对框架没有特别的偏好,不站队。逃走─=≡Σ(((つ•̀ω•́)つ)

文章的主要观点是,不可否认,React对前端的贡献巨大,Hooks的提出、服务端渲染的支持、以及很多让前端往前大迈步的想法都与React密切相关,但这不代表React现在的表现仍然是No.1, 前端领域的很多框架都是在 React 核心理念的基础上迭代后的产物,他们的表现很可能比React更好,作者呼吁各位开发者不要再盲目崇拜React。

关于文章中提出的React的不足,我总结一下:

  1. 对web components的支持: React竟然直到现在,仍然缺乏对web components的支持(尽管这一功能一直放在React开发团队的todo list上,但是这个todo,要什么时候do,遥遥无期。)
  2. 学习成本:对于React外的框架,你学会了使用一个框架,再学其他的几乎没难度,甚至可以直接上手用。相反的,React的各种规则与市面上其他框架大不相同,且学习难度要比其他框架大的多(React的很多规则是根据 08 年的限制条件设计制定的规则,放在现代来看,完全没必要,且它所基于的架构决策早已成为其迭代能力的障碍)。
  3. (与其他框架/vanilla JavaScript的)兼容性差: 如第2点所说,很多东西是React特有的规则,这导致哪怕是原生js的工具包,在React项目中都有可能会导致渲染周期或其他未知的问题,更别说把为React写的包用到其他地方了。(作为拉踩,作者用Preact Signals 举例,它可以单独拉出来用在任何框架中,甚至是vanilla JavaScript)
  4. 开发者要关心、考虑的事情太多了: 现代框架大多已经足够聪明,不需要开发者一步一步告诉他们下一步要去做什么,React则需要开发者考虑各种渲染周期中的微观规则,这大大消耗了开发者的心力。
  5. 表单处理繁琐:很多框架都通过双向绑定来实现了状态&DOM的自动更新,React则需要用户每次都手动更改状态值。诚然其他框架的便捷规则可能会导致一些麻烦,但对比起来,React的教条式规则带来的麻烦可能更多。
  6. 没有一个first-party css scoped方案。很多框架都内置了scoped css方案,React则需要开发者去自己选择&寻找合适的方案。
  7. Hooks不好用: 很多现代框架同样提供了Hooks,且规则更少,使用更简单。而React,他的规则实在是弯弯绕绕晦涩难懂....UseEffect有多难用就不用多说了,甚至有的开发者会尽量避免使用UseEffect,一个如此普通且必要的工具,竟然会让人害怕去使用,这本身就说明它存在着很大问题。
  8. 性能一般:目前网上已经有了大量的测试,其结果证明很多框架的性能(打包后代码的大小和页面的执行速度)都与 React 不相上下,甚至更好(在最新的JS web frameworks benchmark中表明, React比 Solid 慢近 50%,比 Vue 慢 25%,比 Svelte 慢 40%,比 Preact 慢 35%)

2. You Dont Need Lodash Underscore

Lodash和Underscore是伟大的js工具库,但随着js的发展,很多api都已经被native js实现了(如果你想让这些native js在legacy JS引擎中兼容,可以借助es5-shim)。因此,在使用Lodash和Underscore时,你要考虑一下,你是否真的有引入他们的必要:

  1. 通过eslint的 eslint-plugin-you-dont-need-lodash-underscore插件,可以校验你当前对lodash的使用是否有必要。

  2. 如果native js没有实现这个api,文章里也提供了很多Lodash api的实现方式,供开发者借鉴。