AST抽象语法树

JavaScript021

AST抽象语法树,第1张

概念

使用 astexplorer 可以在线将任意对象,表达式转换为 AST 语法树。

特点

一个对象生成 AST 的关键所在是词法分析和语法分析。

用途

案例

我们使用 AST 的概念来拆解一个最简单的函数。

对于我来说,2022年的关键词应该是“阴天更应打开窗帘”

时间一点也没停歇,马上2022就结束了,我翻看了2021年终总结,和2022新年计划,感慨万千,我们还是没有从疫情中走出来,防疫政策从严到松,谁也不好说是好是坏,凡事都有利弊,总是要积极面对吧。工作上还算稳定,不像很多人丢了工作,还有一些毕业生不好找工作。最让我开心的还是宝宝的平安出生,虽然是刨腹产,虽然家人都感染了新冠,但是好在都扛过去了,都转阴了,不得不说,平安健康真好,多亏了家人的付出,家人给的爱总能给我们无限的能量。下面详细展开讲讲吧。

工作

在摩天轮度过了第一年,相信大家和我感觉一样,经济的寒冬还是没有过去,这和新冠疫情是分不开的。不过还是很乐观,自我们放松防疫政策后,第一波疫情正在凶猛袭来,等大家都感染过一遍后,对新冠病毒的免疫也会大大加强,这个看国外的状况就可以得出结论。其实新冠的伤害确实没有那么可怕,我观察到的大部分人也都是乐观的态度。相信我们能携手共度难关,各个演唱会、线下剧场也能如雨后春笋,蓬勃开演,在迎接新春的同时,迎接新的后疫情时代。

除此之外,自己做了Uniapp的技术分享,分享了Uniapp的技术路线及构建相关的内容,对vite打包构建uniapp应用做了研究和分享,最终我的感觉是,相同的技术方案用一个框架还是很不错的选择,对于小程序,包括微信小程序、支付宝小程序、抖音小程序等基本都是基于微信小程序架构做的包装,用像uniapp这样的技术框架做会省很多事,需要做的兼容也不多,一套代码生成多个端非常高效。但是对于app和H5则需要兼容的东西就比较多了,建议不要做到一起,相反会增加很多冗余的代码,使代码可读性大大降低。

最后,基于设计模式,我也对我负责的一个全栈项目做了重构,主要是用了策略模式,代码更加清晰松耦合,相信对于后续加需求也更加得心应手。

学习

今年我着重把学习重点放在了两大块,一个是设计模式,一个是前端工程化

1、设计模式

首先我看了一本书,《JavaScript设计模式与开发实践》,因为我是前端出身,所以看了这本基于JavaScript语言的设计模式,看起来更丝滑,但其实设计模式都是相通的。书中有几个实用的我说一下。

首先是策略模式,最为实用,策略模式是解决代码堆砌冗长的最好办法,将同类型的对象抽象出来,定义一系列的算法,封装起来,并且使他们可以相互替换,就这样可以讲代码拆分解耦,也更健壮。有兴趣的可以看看这个文档,里面有一个小例子:策略模式 · 语雀。

其次是代理模式,这个应用的地方也很多,很多时候我们需要使用第三方或者是别人已经写好的方法或组件,但这个方法或组件又比较复杂,不好直接“插手”,这时我们可以考虑写个代理方法或组件,实现中间代理的功能。这样既不更改原方法组件,也可以达到新的需求。代理模式的另外一个用途是在做缓存时,频繁地调用需要大量计算的方法会造成性能的消耗,但如果我们在代理层做一层缓存,这样就能达到用内存换CPU的目的,很多时候会提升整体性能。这里也有个小例子:代理模式 · 语雀

另外还有很多,像发布订阅模式等也比较常见,在解决一些需要分发和订阅的需求时比较常用。这里就不一一赘述了,感兴趣的可以看下这本书。同时“墙裂”推荐大家在写代码的时候把这本书放在旁边,时刻提醒自己写出优雅而健壮的代码,尤其是那些刚开始入行的新人。

2、前端工程化

说到前端工程化,不得不提AST,抽象语法树(Abstract Syntax Tree,AST)是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。在代码语法的检查、代码风格的检查、代码的格式化、代码错误提示、代码自动补全等等场景均有广泛的应用。

编译器整体执行过程主要可以分为三个步骤:

Parsing(解析过程):这个过程要经词法分析、语法分析、构建AST(抽象语法树)一系列操作;

Transformation(转化过程):这个过程就是将上一步解析后的内容,按照编译器指定的规则进行处理,形成一个新的表现形式;

Code Generation(代码生成):将上一步处理好的内容转化为新的代码;

有兴趣的可以去看下我总结的这个文档库:前端工程化 · 语雀 《前端工程化》

生活

家人

今年我的宝宝,小拿铁出生了,他真的太可爱了,我也终于当爸爸了。从他出生的那一刻,我便知道了,我又多了一份责任,陪他健康成长,给他一个快乐的童年,也给他最大的支持,同时我也得更加努力了。