当前位置:首页 > 科技  > 软件

Eslint 会被 Oxlint 干掉吗?

来源: 责编: 时间:2023-12-18 09:46:51 162观看
导读大家好,我卡颂。最近,一款基于Rust的linter工具Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。他相比于老大哥Eslint有什么优势?未来他会取代老大哥么?本文让我们来聊聊这个话题。Oxc与Oxlintoxlint是Oxc项目旗

U8b28资讯网——每日最新资讯28at.com

大家好,我卡颂。U8b28资讯网——每日最新资讯28at.com

最近,一款基于Rust的linter工具Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。U8b28资讯网——每日最新资讯28at.com

他相比于老大哥Eslint有什么优势?未来他会取代老大哥么?本文让我们来聊聊这个话题。U8b28资讯网——每日最新资讯28at.com

Oxc与Oxlint

oxlint是Oxc项目旗下的一款产品,Oxc作为一款Rust实现的前端工具链集合,包括:U8b28资讯网——每日最新资讯28at.com

  • linter,即oxlint,对标Eslint,本文的主角。
  • Parser,即oxc_parser,用于解析.js(x)和.ts(x),对标swc,基准测试[1]据称比swc快2倍。

U8b28资讯网——每日最新资讯28at.com

  • Resolver,解析esm、cjs文件路径,对标webpack/enhanced-resolve,基准测试[2]据称比webpack快28倍。
  • formatter,对标Prettier,还未公布。
  • transpiler,对标babel,用于将高级语法转译为低级语法,还未公布。
  • minifier,代码压缩工具,还未公布。

与Oxc抱有同样设计理念(都是基于Rust开发的工具链工具)的还有Biome与Ruff,其中:U8b28资讯网——每日最新资讯28at.com

  • Biome比较命途多舛。他的前身是Rome,由Babel作者「Sebastian McKenzie」开发,和Oxc一样目标语言是JS。
  • Ruff的目标语言是Python。

Oxlint的介绍

Oxlint之所以引发热烈讨论,主要原因是「他的性能太炸裂了」。U8b28资讯网——每日最新资讯28at.com

尤大用Oxlint跑了Vue3仓库,~590个文件跑~200条规则,仅用时50ms。U8b28资讯网——每日最新资讯28at.com

U8b28资讯网——每日最新资讯28at.com

我自己(苹果M1 pro,32G)跑一个大概50个文件的小项目,也只用了18ms,官方宣称的在基准测试中比Eslint快50~100倍果然不是空穴来风。U8b28资讯网——每日最新资讯28at.com

U8b28资讯网——每日最新资讯28at.com

当然,除了「性能优势」,Oxlint与老大哥Eslint还有很多区别。接下来我们从3个角度对比Oxlint与Eslint:U8b28资讯网——每日最新资讯28at.com

  • 易用性
  • 诊断可读性
  • 参与成本

易用性

Eslint诞生于2013年,他相比于竞争对手(JSHint、JSHint)最大的优势是「提供了大量可选的规则,并且一些场景下对于不符合规则的代码可以自动修复」。U8b28资讯网——每日最新资讯28at.com

但是,随着时代的进步,他的优势逐渐变为劣势 —— 开发者不再需要大量自定义规则,而是需要「开箱即用的规则集的最佳实践」。在此理念下诞生了很多新产品,比如:U8b28资讯网——每日最新资讯28at.com

  • 仅针对「代码风格」做出检查和格式化的Prettier。
  • antfu定制版规则集eslint-plugin-antfu[3]。

Oxlint吸取了上述产品的优点,默认提供了一套开箱即用的规则集。这套规则集主要关注「代码的正确性」(比如「语法错误」、「冗余代码」、「容易造成误解的语法」)而不是「代码的细节优化」(比如语法的性能、风格)。U8b28资讯网——每日最新资讯28at.com

所以,你只需要在项目执行如下命令,就能满足常规的校验:U8b28资讯网——每日最新资讯28at.com

npx oxlint@latest

从易用性上看,Oxlint比Eslint强很多。U8b28资讯网——每日最新资讯28at.com

诊断可读性

当linter诊断出问题后,会给开发者提供相关信息。Eslint给的信息通常比较简短,只告诉你「为什么报错」。比如对于如下代码:U8b28资讯网——每日最新资讯28at.com

let a;

通过信息「a is defined but never used」可以知道报错原因是「a定义了但未使用」。U8b28资讯网——每日最新资讯28at.com

U8b28资讯网——每日最新资讯28at.com

但如果是更复杂的规则,简短的信息可能并不能直观表达「具体哪里报错」以及「解决办法」,很多时候我们还需要查下规则文档,看看这条规则的具体含义,再结合报错的代码分析。U8b28资讯网——每日最新资讯28at.com

相比于Eslint,Oxlint的信息更直观与准确。举个例子,下面的代码执行后会得到「数字翻倍的数组」:U8b28资讯网——每日最新资讯28at.com

const numbers = [1, 2, 3, 4, 5];const result = numbers.reduce((accumulator, current) => {  return [...accumulator, current * 2];}, []);// [ 2, 4, 6, 8, 10 ]console.log(result);

这里每次执行reduce回调都会将数组展开,当数组比较长时会造成性能问题。U8b28资讯网——每日最新资讯28at.com

对此,Oxlint的信息包括三部分:U8b28资讯网——每日最新资讯28at.com

  • 为什么报错
  • 具体哪里报错
  • 怎么解决

U8b28资讯网——每日最新资讯28at.com

这段示例代码比较简短,可能体现不出Oxlint信息的价值,让我们看看下面这段报错信息:U8b28资讯网——每日最新资讯28at.com

U8b28资讯网——每日最新资讯28at.com

一眼就能看出是哪个reduce(紫色字体)中的哪个展开操作(青色字体)引发的问题。U8b28资讯网——每日最新资讯28at.com

虽然有些同学会说:如果项目大了,lint信息这么详细看的人脑袋痛。U8b28资讯网——每日最新资讯28at.com

但我们要知道 —— 「你能提供,但我不用」和「你不能提供」完全是两个概念。U8b28资讯网——每日最新资讯28at.com

从「诊断可读性」看,Oxlint比Eslint更优秀。U8b28资讯网——每日最新资讯28at.com

参与成本

「参与成本」是指开发者自定义规则的成本。Oxlint是Rust编写的,如果开发者自定义规则也得写Rust,那成本就太高了。相比之下,Eslint的规则都是JS编写的,成本低很多。U8b28资讯网——每日最新资讯28at.com

Oxlint从2个角度出发尝试解决这个问题:U8b28资讯网——每日最新资讯28at.com

你别自己写了,官方将常用的规则都写好了。U8b28资讯网——每日最新资讯28at.com

截止本文发稿,官方实现了200个左右的规则,从名字就能看出,这些规则是从各个常见库的最佳实践中摘出来的,比如:U8b28资讯网——每日最新资讯28at.com

  • jest: no-confusing-set-timeout
  • react: jsx-no-duplicate-props
  • eslint: default-case-last
  • typescript: no-unnecessary-type-constraint

实现一套专门编写规则的DSL。U8b28资讯网——每日最新资讯28at.com

Oxlint正在研究开发一套DSL,专门用来编写规则。至于这套DSL何时问世、好不好用暂不得知。U8b28资讯网——每日最新资讯28at.com

从「参与成本」角度看,Eslint完胜。U8b28资讯网——每日最新资讯28at.com

Oxlint会取代Eslint么?

基于已知的现状 —— Oxlint规则参与成本高于Eslint,只要这个问题不解决,就一定存在某些Eslint支持,但Oxlint不支持的规则。所以,要完全取代Eslint,短期内并不现实。U8b28资讯网——每日最新资讯28at.com

但是,就像Vite之于Webpack,前者也没有实现后者的所有功能。但只要满足开发者最常见的90%需求且体验更好,就能从Webpack手中抢走大部分用户。U8b28资讯网——每日最新资讯28at.com

Oxlint显然也是这么做的 —— 他们建议开发者在lint-staged或CI设置中先运行Oxlint再运行ESLint。这样,大部分常见问题还没走到Eslint这一步就被Oxlint挡住了。U8b28资讯网——每日最新资讯28at.com

这种方式能显著提高lint流程的速度,且上手成本极低。所以很可能在开发者中快速普及开。U8b28资讯网——每日最新资讯28at.com

当这种方式普及后,随着Oxlint规则覆盖度与日俱增,会在「最常见的90%需求」中逐渐取代Eslint。U8b28资讯网——每日最新资讯28at.com

届时,会形成一种Oxlint为主,Eslint为辅(处理少量特殊规则)的局面。U8b28资讯网——每日最新资讯28at.com

从这个角度看,Oxlint的赢面很大。U8b28资讯网——每日最新资讯28at.com

后记

虽然Oxlint有着不错的前景,但当前他还存在一些不足,比如:U8b28资讯网——每日最新资讯28at.com

  • 框架语法支持度不高

Oxlint原生支持js(x)、ts(x),但不支持Svelte、Vue模版语法。U8b28资讯网——每日最新资讯28at.com

  • vscode插件还不稳定,有bug

比如下面代码中警告的应该是第1、3行,但是第2行也被标记了。U8b28资讯网——每日最新资讯28at.com

U8b28资讯网——每日最新资讯28at.com

相信随着开发团队的持续投入,社区生态的形成,Oxlint及其背后的Oxc会有不错的未来。U8b28资讯网——每日最新资讯28at.com

参考资料

[1]基准测试:https://github.com/oxc-project/bench-javascript-parser-written-in-rust。U8b28资讯网——每日最新资讯28at.com

[2]基准测试:https://github.com/oxc-project/bench-nodejs-resolver。U8b28资讯网——每日最新资讯28at.com

[3]eslint-plugin-antfu:https://github.com/antfu/eslint-plugin-antfu?tab=readme-ov-file。U8b28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-48349-0.htmlEslint 会被 Oxlint 干掉吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用 Sidecar CRD 优化 Istio 性能

下一篇: 消息队列,聊聊发送消息的四种姿势~

标签:
  • 热门焦点
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 一年经验在二线城市面试后端的经验分享

    一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 三言两语说透柯里化和反柯里化

    三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 梁柱接棒两年,腾讯音乐闯出新路子

    梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 东方甄选单飞:有些鸟注定是关不住的

    东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
Top