范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

用SWC替换Babel!速度提升20x60x!

  大家好,很高兴又见面了,我是" 高级前端‬进阶 ‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
  高级前端‬进阶1.什么是Babel?
  Babel 可以将最新的 JavaScript 代码(例如 ES6)转换为旧版本浏览器支持的 JavaScript,它甚至可以转换 TypeScript。
  Babel 根据开发者定义的配置读取源代码,并编译更新的 JavaScript 功能,例如:箭头函数等。 Babel的代码转换主要包括三个核心流程:解析器Parser:Babel 的解析器获取 JavaScript 代码并将其转换为抽象语法树 (AST),这是计算机可以理解的源代码结构遍历器Traverser:Babel 的遍历器获取 AST,遍历它并将其修改为在 Babel 配置中定义的预期代码生成器Generator:Babel 的生成器会将修改后的 AST转换回常规代码
  整体转换流程如下图所示:
  图片来源: https://www.sitepoint.com/understanding-asts-building-babel-plugin/2.什么是 SWC?
  SWC 是一个可扩展的基于 Rust 的平台,用于下一代快速开发工具。 Next.js、Parcel 和 Deno 等工具以及 Vercel、字节跳动、腾讯、Shopify 等公司都在使用 SWC。
  在 Github 上,SWC 已经有超过 26.3k 的 star 和 1k 的 fork,每周的平均下载量达到了 1983k。目前有超过 6.2k 的项目使用 SWC、项目贡献人数也达到了 200+,增长势头非常迅猛。
  SWC 可用于编译和打包工作,是一个超快速的 JavaScript 编译器。 对于编译,SWC 读取 JavaScript / TypeScript 文件,并输出所有主流浏览器都支持的代码。在性能上,SWC 比其他打包方案具有明显的优势。 3.SWC从Rust处获得了什么?
  SWC 也是 JavaScript 的转译器,它是用 Rust 编写的,比 Babel 快得多。 Rust 以其性能优势、可靠性而著称,Rust鼓励企业使用它重写部分、甚至全部代码。
  例如以下非常成功的迁移Rust的示例:Firefox 决定重写其名为 Quantum CSS 的 CSS 渲染器并获得显著的性能改进Tilde 在 Rust 中重写 Java HTTP 的某些部分,将内存使用量从 5GB 减少到 50MB 获得了巨大的性能提升
  Rust 如此高效的原因之一是它处理垃圾收集的方式,这是一种内存管理方法,即及时释放不再需要的内存资源。 由于 Rust 在编译时决定哪些内存资源不再需要,因此带来性能改进。
  众所周知,代码转译是一个昂贵的过程,这就是为什么用 Rust 编写的转译器性能更高的原因。3.如何使用SWC
  可以将SWC看做一个包,可以从 NPM 包管理器安装。 首先,在目录的根目录中运行命令:// 使用 `cd` 转到正确的目录,然后运行 mkdir swc_project //实例化package.json npm init // 安装swc core和cli npm install --save-dev @swc/core @swc/cli
  通过运行以上代码就可以安装 SWC core和 CLI。 核心包将帮助进行构建设置,而 CLI 包可以在终端中使用命令运行。本文专注于使用 CLI 工具来转换 JavaScript 文件。 假设在目录的根目录中有以下 JavaScript 文件://  文件名:async.js const fetch = require("node-fetch"); async function getData() {     let res = await fetch("https://feadvance.dev.com/todos/1");     let json = await res.json();     console.log("data", json); } getData(); // 调用函数
  可以运行以下命令进行转译: // 运行此命令会将转换后的数据发送到标准输出 // 并将在终端中打印出来 npx swc async.js // 运行这个将创建一个名为 `output.js` 的新文件 // 其中包含转换后的数据 npx swc async.js -o output.js // 运行此命令将创建一个名为 transpiledDir 的新目录 // 并将转译原始目录中的所有文件 npx swc src -d transpiledDir
  现在如果希望将 SWC 作为一个工具包含在构建系统中。此时,需要使用 Webpack 作为更高级和可配置的构建器。下面是一个简单的package.json配置文件内容:{   "name": "swc-project-demo",   "version": "1.0.0",   "scripts": {     "build": "rm -rf ./dist && webpack",     "start": "webpack-dev-server"   },   "license": "MIT",   "devDependencies": {     //开发依赖     "@swc/core": "^1.1.39",     "css-loader": "^3.4.0",     "html-loader": "^0.5.5",     "swc-loader": "^0.1.9",      // ...其他配置项   },   "dependencies": {     // 依赖项     ...   } }
  下面是用于构建和启动应用程序的配置,存储在 webpack.config.js 文件中,Webpack 会自动获取该文件。output:为 Webpack 设置名称和位置以输出包、资产和文件,包括已转译的文件devServer:通过此配置为 Webpack 应用程序提供服务,是告诉 Webpack 从何处提供内容以及定义一个端口来侦听请求HTMLWebpackPlugin:定义这个插件以简化包含 Webpack 包的 HTML 文件服务过程
  但此配置中最重要的部分是 swc-loader,它允许转换带有 .js 或 .jsx 文件扩展名的 JavaScript 文件:// 下面是webpack配置 module.exports = {   mode: "development",   output: {     path: path.resolve(__dirname, "./dist"),     filename: "index_bundle.js"   },   // 是告诉 Webpack 从何处提供内容以及定义一个端口来侦听请求   devServer: {     contentBase: path.join(__dirname, "dist"),     compress: true,     port: 9000   },   module: {     rules: [         {         test: /.jsx?$/ ,         exclude: /(node_modules|bower_components)/,         use: {             // `.swcrc` in the root can be used to configure swc             loader: "swc-loader"         }       },       {         // 不同loader配置         test: /.html$/,         use: [           {             loader: "html-loader",             options: { minimize: true }           }         ]       },       {         test: /.scss/i,         use: ["style-loader", "css-loader", "sass-loader"]       }     ]   },   plugins: [     //定义这个插件以简化包含 Webpack 包的 HTML 文件服务过程     new HTMLWebpackPlugin({       filename: "./index.html",       template: path.join(__dirname, "public/index.html")     })   ] };
  通过在 Webpack 配置中设置 swc-loader,已经完成了转译 JavaScript 文件的一半。 但是,仍然需要指示 SWC 如何转换文件。SWC 通过在根目录中定义一个名为 .swcrc 的配置来进行能力扩展。
  在配置中可以使用正则表达式,以仅匹配具有 .ts 文件扩展名的文件。 此外,通过 jsx.parser 配置,指示 SWC 使用哪个解析器进行转译(可以是 typescript / ecmascript)。// .swcrc {   "test": ".*.ts#34;,   "jsc": {     "parser": {       "syntax": "typescript",        // 转移文件语法       "tsx": false,       "decorators": true,       "dynamicImport": true     }   } }
  现在,假设想在上面的 webpack SWC 示例中使用 React,可以使用一个名为 .jsx 的特定文件扩展名来编写 React 组件: // App.jsx 组件 // 全局 dependencies import React from "react"; import ReactDOM from "react-dom"; // APP组件 const App = () => {   return 

我的 SWC 应用程序

; }; ReactDOM.render(, document.querySelector("#root"));   通过 Webpack 提供此文件需要已经拥有并在上面定义的正确的 webpack 加载程序。 它还需要 .swcrc 文件中的正确转译设置。 现在通过这种方法,可以使用现代 JavaScript (ES2019) 的最新功能,并在转译时支持 .jsx 文件。 此外,如果 React 项目需要额外的转译设置,可以自有配置:// .swcrc 自行配置扩展 { "jsc": { "parser": { "syntax": "ecmascript", "jsx": true // 支持JSX } } }4.Babel 与 SWC 速度对比4.1 同步场景比较   首先,以一种人工方式进行比较,即以同步方式运行 Babel 和 SWC 的代码转换。 众所周知,JavaScript 是单线程的,在实际应用程序中不可能以异步方式运行大量计算。 但这仍然会给出一个速度指标。 下面的基准测试是在单核 CPU 上运行(由 SWC 项目的维护者执行的测试):   尽管 SWC 的 ES3 转换过程成本更高,但与 Babel 相比,SWC 的转译速度提升明显。4.2 异步场景比较   下面想对更现实的场景进行基准测试,即针对 await Promise.all() 运行示例,这是处理 JavaScript 操作的更昂贵、真实的场景。 在这个基准测试中,CPU 内核的数量和并行计算开始发挥作用。 在运行的另一个基准测试中,进行了两个实验。 两者都使用了具有 8 个 CPU 内核且并行度为 4 的机器。   第一个实验运行了 4 个Promise:   第二个实验运行了 100 个Promise:   可以从这些数字中发现: Babel 在异步操作中的性能正在下降,因为 Babel 在事件循环上工作。 这与 SWC 形成对比,SWC 在工作线程上运行并且可以很好地随着 CPU 内核的数量进行扩展。   总的来说,看到这SWC、Babel两种工具之间存在明显的速度差距, SWC 在单线程上比 Babel 快 20 倍左右,而在多核异步操作过程中快 60 倍左右。本文总结   本文主要和大家介绍下SWC,即一个使用Rust编写的Babal替代品。文章从什么是Babel、什么是SWC、SWC使用、SWC与Babel性能对比等几个角度展开。相信通过本文的比较,大家对选择SWC还是Babel都已经比较清楚了。因为篇幅有限,如果有兴趣,文末的参考资料提供了大量优秀文档以供学习。参考资料   https://blog.logrocket.com/why-you-should-use-swc/   https://dev.to/this-is-learning/what-is-babel-and-swc-49cp   https://blog.csdn.net/feiyanaffection/article/details/125599084   https://blog.csdn.net/csdnnews/article/details/121241393

近1500家管理人遭注销私募行业优胜劣汰提速近1500家管理人遭注销私募行业优胜劣汰提速财联社2月17日电,中基协数据显示,截至2月16日,今年以来注销登记的私募基金管理人近1600家,其中被协会注销的私募数量接近1500家南存辉再造光伏帝国作者丨曹恩惠编辑丨林虹图源丨新华社距离实现逆变器储能资产整体上市这一目标,南存辉就剩临门一脚。2月14日晚间,正泰电器(601877。SH)发布公告,其拟以现金方式将所持盎泰电源8A股公司最大的雷2023年1月31日,世纪华通(002602。SZ)发布业绩预告2022年亏损60亿80亿(2021年净利润23。3亿)。不出意外的话,这是财报季A股最大的雷。2022年前三季,世资产联动视角下的股市下一阶段趋势2022年11月起,中国股市一扫此前下跌的阴霾,各大指数出现了一波明显的上涨,除了12月底的一波回调外,春节前的股市可以用单边上涨来形容。但是春节过后,股市高开低走,出现震荡行情。一张证明书钩沉南侨机工历史在攸关民族生死存亡的抗日战争中,数千华侨青年奔赴国难,在滇缅公路上用生命打通了抗战输血管一张证明书钩沉南侨机工历史1939年,在华侨领袖陈嘉庚的号召下,南洋华侨中的年轻司机和机工分ChatGPT或掀创业潮?AI人才薪资再攀高峰近日,原美团联合创始人王慧文在社交平台官宣带资进组入局AI领域,称将打造中国的OpenAI,在业界引发热议。2月14日,脉脉创始人兼CEO林凡透露,目前与AIGC相关的岗位涌现,科收复台湾把握到底有多大?美军司令员吐露实情,解放军势在必得新任台湾(省)民进党党主席赖清德,此前在会议上公然表示反对九二共识,他认为这项共识会使台湾失去发展空间。中国国民党党主席朱立伦对此提出了严正警告,他表示务实台独激进台独所有形式的台财金云南丨2023年1月份云南居民消费价格指数出炉!2023年是贯彻党的二十大精神的开局之年,是实施十四五规划承上启下的关键一年。中央经济工作会议省委十一届三次全会省委经济工作会议2023省两会都明确提出要推动经济实现质的有效提升和柬埔寨留学生陈槿柠我爱的中国我的家国际在线报道(记者朱思颖邓君洋)家是什么?对于中国人来说,家是寄居之所,更是有安全感和归属感的港湾。如今,许多在中国的留学生们享受着中国社会发展给生活学习带来的多样和便利,体悟着中交广会客厅煤河三岔口上的双子星大秦线是远近闻名的煤运专线,其上1万吨2万吨煤列奔驰不息,好似一条流淌不息的煤河。大秦线迁安北站作为这条煤河的分流处所,因其开通大同秦皇岛曹妃甸三个方向,又被称作煤河三岔口。中国铁关于公交车出行安全,速看!警民直通车福州市公安局交通警察支队案件调查大队民警唐宏作为城市内不可或缺的重要公共交通工具,公交车满足了广大群众的日常通勤需求。但其车身较大的客观原因,加上城区内车流人流密集,在出
EPLS17C组前瞻jackz重返顶尖赛场,组内等级分明!经过了RMR封闭预选赛的洗礼之后,诸多强队将站上EPLS17的舞台。本次比赛将于2月22日至3月26日举行,来自各赛区的32支队伍将共同争夺冠军荣誉。C组参赛队伍B组的比赛已经于本经典游戏中故意恶心人的关卡,游戏策划常年被人寄刀片不知道大家有没有一种感觉,游戏中只要出现以水为背景的关卡,难度往往都是比较大的,而且让人感觉比较压抑。像是FC游戏的忍者神龟水下拆炸弹难度太大超级玛丽和冒险蛋水下关经常死街机合金弹欧洲冠军联赛拜仁慕尼黑VS巴黎圣日尔曼极品爆料客队伤停内少报销,巴黎三叉戟告吹!巴黎近期传来了坏消息,球队二号射手也是进攻核心内马尔(20场13球11助)脚踝旧伤复发,由于此次复发严重,内马尔将不得不接受手术治疗,预计潮牌媒体广州潮牌媒体潮牌媒体讯环保话题近日在两会上受到热议,在即将来临的周末我们也将迎来植树节。你是不是也想穿时髦的衣服,同时也想为环保做出贡献?好消息来了!近日,HM推出了全新环保先锋系列,包含一系明星妇女节营业照陈乔恩董璇穿深V性感刘涛优雅虞书欣又甜又辣马丽祝大家妇女节快乐今天是三八妇女节,不知道还在工作的女神们有没有放假呢?在妇女节这天,很多女明星也纷纷晒出自己的美照营业了一波,小编精选了几位女星的照片,大家快来看看谁的状态最好艳压章子怡闯入名媛圈,以色侍人的帽子,章泽天终究摘掉了生完二胎之后,章泽天公开亮相活动。和女明星产后复出一样,她这位总裁夫人,更是讲究排场。自从怀上二胎弟弟,章泽天就低调起来,鲜少曝光。憋了多半年,一下就放了个大招。01一次聚餐,各有曝死亡岛2媒体体验报告3。12解禁内部反馈不错据TomHenderson消息,死亡岛2的媒体体验报告将于3月13日正式解禁。TomHenderson表示他听到很多人都对死亡岛2进行了称赞,媒体反馈很不错。而他本人也将在明天带来时装周成国内女星照妖镜,刘雯太瘦,谷爱凌显老,关晓彤翻车如今各地气温回升,各位应该都感觉到了春天的气息,在这段时间国外时装周吸引了不少艺人的目光,许多国内明星或受品牌方邀请,或凭自己喜好纷纷前往。不过在国外的打光和镜头下,时装周也成为了巴黎时装周被吐槽大搞性暗示,超模集体上衣失踪,这哪美?这几天的巴黎可谓十分热闹。几乎各国的明星,都出现在了时装周上,包括国内的关晓彤刘亦菲等众多女星。但要说最万众瞩目的,还要数素有国模之光之称的刘雯。然而时隔三年再回T台,她所带给观众刘雯时隔三年再回巴黎,开放程度我惊了,第一次看见走秀还要打码最近大表姐刘雯回归秀场真的鲨疯了,时间已经过去三年,但是她的业务能力却没有丝毫下降!刘雯在秀场上的一举一动都是那么的光彩夺目,她的气质也是那么的自信。几天前,在巴黎的T台上,刘雯的四川代表团代表以视频连线形式接受境外媒体集中采访视频加载中两会期间,新能源发展话题受到广泛关注。3月8日,美国彭博新闻社日本经济新闻等60多家境外媒体,以视频连线形式集中采访四川代表团代表,对全国人大代表全国工商联副主席通威集团