1.懂编译真的源码可以为所欲为|不同前端框架下的代码转换
2.竟然可以在一个项目中混用 Vue 和 React?
3.react和vue对比简书?
4.react为什么比vue工资高(react比vue更利于seo吗)
5.面试中的网红Vue源码解析之虚拟DOM,你知多少呢?深入解读diff算法_百度...
6.放弃 console.log 吧!用 Debugger 你能读懂各种源码
懂编译真的源码可以为所欲为|不同前端框架下的代码转换
在前端领域快速发展和多框架并存的背景下,团队面临在不同平台投放组件的源码挑战。以淘宝页面投放闲鱼组件为例,源码面临React与Vue的源码框架差异,需要寻找跨框架代码转换的源码music源码解决方案。本文深入探讨了通过代码编译实现不同前端框架代码转换的源码技术路径,以Vue组件转化为React组件为例,源码阐述了一种通过编译器实现跨框架代码转换的源码思路。
编译器是源码将源代码转换为目标代码的工具,Babel作为现代JavaScript编译器,源码具备将新语法编译成兼容浏览器代码的源码能力。Babel工作流程包括代码解析、源码转换处理和代码生成三个步骤。源码
抽象语法树(AST)是源码计算机科学中表示代码结构的抽象表示形式,用于解析源代码。以 `const a = 1` 转换为 `var a = 1`为例,Babel通过 `@babel/parser` 解析成AST,`@babel/traverse` 对AST进行遍历和分析转换,使用 `@babel/types` 进行节点处理。在转换中,将 `const` 操作替换为 `var`,实现代码结构的转换。
Vue和React在语法和功能上存在差异,但它们之间存在映射关系。Vue组件由style、script和template组成,转换过程中需要关注属性名、生命周期方法和指令差异。转换策略包括数据映射、属性值处理、指令转换等,确保代码在目标框架中正确执行。
对于Vue代码的解析,使用官方的`vue-template-compiler`分离出template、style和script,其中script使用`@babel/parser`进行解析,提取data、props、computed等属性,以便于后续转换。template解析后转化为AST,用于生成React组件代码。
在将Vue组件转换为React组件的过程中,需要关注代码结构、属性名、生命周期方法和指令的具体差异,通过代码转换和结构重构,实现组件在目标框架的正确执行。最终,转换后的React代码包含样式和逻辑文件,具备跨框架代码转换的能力。
通过代码编译实现不同前端框架代码转换,简化了代码重复劳动,提升了开发效率。在实际生产环境中,这一思路已被应用于多个Vue组件的转为React组件,展示了跨框架代码转换的可行性和实用性。然而,跨端场景下还需考虑平台特有组件和API的兼容性,未来技术团队将继续探索和优化,以适应更多复杂场景。
竟然可以在一个项目中混用 Vue 和 React?
React与Vue是前端开发领域的两大热门框架,各自拥有强大的功能和丰富的生态系统。令人惊讶的是,在一个项目中,你竟然可以同时使用React和Vue!本文将为您介绍3个用于混合使用React和Vue的工具。
首先介绍Veaury,这是一个基于React和Vue3的工具库,适用于在项目中同时使用React和Vue的场景。它主要用于项目迁移、技术栈融合的开发模式、以及跨技术栈使用第三方组件的场景。
Veaury的特点包括详细的文档,但需要注意的是,它不支持Vue 2。如果需要使用Vue 2,可以考虑以下介绍的另一个工具库。
接下来是Vuera,这是一个允许在Vue应用中使用React组件的库,同时也支持在React应用中使用Vue组件。它提供了一种方便的方式,使开发人员能够在不同的框架之间无缝地使用对方的组件。
在Vue应用中使用React组件的步骤如下:首先在项目中安装React,然后在babel.config.js文件中添加相应的配置,以插件的形式引入并使用Vuera库。完成配置后,dpo源码公式就可以在Vue项目中引入并使用React组件了。
另一个工具是vuereact-combined,这是一个用于Vue和React快捷集成的工具包,适用于复杂的集成场景。通过这个工具,可以在任何的Vue和React项目中使用另一个类型框架的组件,并且解决了复杂的集成问题。
需要注意的是,该项目只支持使用Vue 2,如果想要使用Vue 3,可以使用Veaury。使用vuereact-combined的步骤包括安装插件、配置Babel以支持JSX语法和Vue.js的特性,以及配置webpack配置文件。
通过这些工具,你可以在一个项目中灵活地使用React和Vue,提高开发效率和代码质量。
react和vue对比简书?
前端框架React、Vue对比
公司做前后端分离,确定前端技术栈,对前端框架React、Vue,稍微做了下分析:
对比:
1、上手速度(vue:api简单,语法简单,学习成本低)
2、组件化能力(都具备)
3、渲染速度(vue更快)
vue更快,跟踪组件状态
react自己管理状态变化
4、迁移到移动端的能力(React胜)
React提供无缝迁移到移动端的能力,ReactNative(事实证明这个需要时间学习成本)。
Vue目前有weex,但是大的使用案例,都是在阿里内部,外部还没有使用案例
5、适用项目大小
vue适合小项目,React适合大项目
6、目前使用情况(React胜)
Vue最火(关注度高,使用者多,门槛低)
React使用较多
7、后期开发维护迭代(React胜,但Vue国内用的小伙伴比较多,群多)
React公司FaceBook,团队强大
Vue开源技术团队
8、支持的ui库,论坛、技术坑
ui库目前都比较多,有elementui、viewui、antd(现在也支持vue了)
React有比较好的antd、elementreact
总结:如果不考虑后期迁移移动端,和不担心技术支持的迭代中断(这个担心比较小),想要入门快,推荐用vue,
如果考虑后期迁移移动端,和技术后期官方支持,推荐React,介于公司对于组件化要求高,选择了React
vue和react哪个更好用,为什么?
Vue和React都是属于目前比较主流的前端框架,实际开发中也经常会拿Vue和React来比较。但是我们通常会根据各自优势来选择项目比较适合的框架。
React优点:
1.声明式设计?React采用声明范式,可以轻松描述应用。
2.高效?React通过对DOM的模拟,最大限度地减少与DOM的交互。
3.灵活?React可以与已知的库或框架很好地配合。
4.JSX?JSX是JavaScript语法的扩展。React开发不一定使用JSX,但我们建议使用它。
5.组件?通过React构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。
6.单向响应的数据流?React实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。
Vue优点:
1.简单易学,容易上手,Vue是国内团队开发,文档手册比较齐全,很适合前端新手小白学习。
2.更顺畅的集成:无论是单页应用程序还是复杂的Web界面,Vue.js都可以更平滑地集成更小的部件,而不会对整个系统产生任何影响。
3.性能优势,更小的尺寸:它占用更少的空间,并且往往比其他框架提供更好的性能。
精心编写的文档:通过详细的文档提供简单的学习曲线,无需额外的知识;HTML和JavaScript将完成工作。
4.运行速度快,kafka源码推荐相对于React来说,性能着一方面Vue占有绝大优势。
根据不同框架优点,我们在实际项目开发选型中一般中小型项目我们会选择使用Vue,大型项目会选择React。
react和vue哪个比较好vue比较好。
VUE是?iOS?和?Android?平台上的一款Vlog社区与编辑工具,允许用户通过简单的操作实现Vlog的拍摄、剪辑、细调、和发布,记录与分享生活。还可以在社区直接浏览他人发布的Vlog,与Vloggers互动。
随着手机摄像头的发展,越来越多的人开始使用手机拍照和摄像。摄像一般来说要比拍照门槛高,但是视频传播的信息量又远大于照片。VUE就诞生在这样的背景下,希望用拍照一样简单的操作,帮助用户在手机上拍摄精美的短视频。
主要功能:
分镜头:通过点按改变视频的分镜数实现简易的剪辑效果,而剪辑能够让视频传达更多的信息。
实时滤镜:由**调色专家调制的款滤镜供选择,切换至前置摄像头会出现自然的自拍美颜功能。
贴纸:支持款手绘贴纸,还可以编辑贴纸的出现时间。
自由画幅设置:支持1:1、:9、2.:1三种画幅的视频拍摄。
react和vue区别两者本质的区别:模板和组件化的区别
Vue本质是MVVM框架,由MVC发展而来;
React是前端组件化框架,由后端组件化发展而来;
Vue使用模板
React使用JSX
React本身就是组件化
Vue是在MVVM上扩展的
共同点:
都支持组件化,都是数据驱动视图
监听数据变化的实现原理不同:
数据流的不同:
高阶组件本质就是高阶函数,React的组件是一个纯粹的函数,所以高阶函数对React来说非常简单。
Vue中组件是一个被包装的函数,并不简单的就是我们定义组件的时候传入的对象或者函数。
组件通信的区别:
渲染模版的不同:
Vuex和Redux的区别:
diff算法不同:
事件机制不同:
数据是否可变:
react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。react在setState之后会重新走渲染的流程,如果shouldComponentUpdate返回的是true,就继续渲染,如果返回了false,就不会重新渲染
vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom
vue:
react:
react的性能优化需要手动去做,而vue的性能优化是自动的,但是vue的响应式机制也有问题,就是当state特别多的时候,Watcher也会很多,会导致卡顿,所以大型应用(状态特别多的)一般用react,更加可控
通过js来操作一切,还是用各自的处理方式:
react的思路是allinjs,通过js来生成html,所以设计了jsx,还有通过js来操作css
vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。
类式的组件写法,还是声明式的写法:
react是类式的写法,api很少
vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,vue稍微复杂。vue3支持class类式的写法了
react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定。影视策划源码react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的,vue追求的是开发的简单,而react更在乎方式是否正确。
react和vue的区别1.创建者等
react是Facebook公司创建的js框架,并创新了新的语法,JSX(htmlinjavascript),而vue相对来说更容易学习,且使用模板系统,Reat与Vue只有框架的骨架,其他的功能如路由、状态管理等是框架分离的组件。
2.关于虚拟dom
改变真实的DOM状态远比改变一个JavaScript对象的花销要大得多。·
VirtualDOM是一个映射真实DOM的JavaScript对象,如果需要改变任何元素的状态,那么是先在VirtualDOM上进行改变,而不是直接改变真实的DOM。当有变化产生时,一个新的VirtualDOM对象会被创建并计算新旧VirtualDOM之间的差别。之后这些差别会应用在真实的DOM上。
vue:渲染过程中是跟踪每一个组件的依赖,即更改了哪个组件渲染哪个。
react:会重新渲染全部子组件。
vue和react的区别之我见react和vue都是做组件化的,整体的功能都类似,但是他们的设计思路是有很多不同的。使用react和vue,主要是理解他们的设计思路的不同。
react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。react在setState之后会重新走渲染的流程,如果shouldComponentUpdate返回的是true,就继续渲染,如果返回了false,就不会重新渲染,PureComponent就是重写了shouldComponentUpdate,然后在里面作了props和state的浅层对比。
而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。
总之,react的性能优化需要手动去做,而vue的性能优化是自动的,但是vue的响应式机制也有问题,就是当state特别多的时候,Watcher也会很多,会导致卡顿,所以大型应用(状态特别多的)一般用react,更加可控。
react的思路是allinjs,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等,
vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。
react是类式的写法,api很少,
而vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,vue稍微复杂。
react可以通过高阶组件(HigherOrderComponents--HOC)来扩展,而vue需要通过mixins来扩展
一个react高阶组件的例子:
react做的事情很少,很多都交给社区去做,vue很多东西都是内置的,写起来确实方便一些,
比如redux的combineReducer就对应vuex的modules,
比如reselect就对应vuex的nb战法源码getter和vue组件的computed,
vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。
上面主要梳理了react和vue的4点不同:
(其中第3点在vue3.0支持类式写法之后就可以去掉了)
react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定。react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的,vue追求的是开发的简单,而react更在乎方式是否正确。
react为什么比vue工资高(react比vue更利于seo吗)
大公司前端一般用vue还是react
React。
在Vue2.0时代,国内大厂的前端开发框架,几乎清一色偏向React。其实现在来说,vue和react都相差无几,各有优劣,两者差距更多的是在语法,社区活跃度,实现原理之间的差距。能否做大型项目关键在于项目组的业务划分、部门之间的协调效率上,因为大型项目不是一两个人,三五个人能够完成的。一个项目之所以称为大项目是在于它是公司大量部门协同合作下的产物。也就是说,解决了项目划分等问题,使用vue和react都是可以的。
reactvue选哪一个个人推荐选择vue
先给你上一个二者对比;
1、Vue上手更简单,特别是从dom和jquery时代过来的程序员,或者习惯模板语言的后端开发,更容易接受Vue。
2、Vue从设计上讲,跟趋向于简化使用,就是说Vue从骨子里面就是想用起来简单,但React更多的是为大型工程考虑。
3、React上手稍微难一点,除了Vue那些基础,你还得学习,纯函数组件,函数式编程,JSX,css-in-js,高阶组件,Redux等。
4、在组件化上,React更纯粹,也可以说更强大一些,而Vue不是完全组件化,应对一些复杂组件,可能会有些麻烦。
5、React的设计,配合TypeScript,更适合大型或者超大型的多人协作项目,管理起来更规范,不容易出错。
6、对于移动端跨平台的支持,React的兄弟项目ReactNative已经占了半壁江山,虽然React和ReactNative可以看成两个东西,但是也有很多关联性。而Vue在移动端开发上,目前来看,有阿里的Weex基于Vue,据说也很强大,但是肯定不如ReactNative那么主流和稳定,具体Vue在移动端的表现如何,需要时间观察。
7、虽然Vue在中国、日本、韩国、法国等地区热度很高,在美国也有一定影响力,但在全世界范围看,React的社区比Vue要更大,资源也更丰富,React的背景Facebook,实力强于个人开发者-尤雨溪(背靠了阿里和一些小赞助公司)。但实力是相对的,实际上,两者实力都很强,不用担心Vue的实力不足或稳定性,Vue足够优秀,3、5年内应该都会是主流,只能说React在全世界范围内的资源更多,影响更大而已。
8、Vue和React本身只是一个基础库,对于稍微复杂一点的项目来说,大多数用户都不会自己搭框架。所以说,选择Vue还是React,要重点比较两者的第三方开发框架、UI框架、组件库及各种资源是否丰富、有活力。
9、就我目前看到的情况而言,Vue体系较热的UI框架有ElementUI、iView/ViewUI、AntDesignVue、vant、mint-ui、vux等,VueAdmin(后台管理系统)相关资源比较丰富,很多中小公司都在用;React热门UI框架有Material-UI、AntDesign、Element-react等,比较集中。可以这样说,Vue的生态就像是游击队,而React更像是正规军。ElementUI和AntDesign都是阿里系的,如果没有AntDesign的话,感觉Vue在国内要强盛一些,但有了阿里AntDesign强势介入,许多中间派就倒向React了,特别是一些稍微大一点的公司。
、其他因素:Vue的核心开发团队只有尤雨溪一人(大概%的代码都是他写的),假如他休假了、生病了,主要开发就暂停了,Vue想要健康的发展,应该要增加1~2个核心开发(每个人都深度参与开发,并可以推动开源生态发展)。
、其他因素:React从一开始就抱上了TypeScript的大腿,而Vue目前仍以ES为主,不得不说,在很长一段时间内,TS都是优于ES的,而Vue社区要切换TS生态,还有一段路要走。这注定了大公司、大项目选React+TS的概率要大一些。中小公司多少也会受到大公司的影响。
总结:
1、如果只是做项目,两者都很好,都是主流,都能极大的增强前端开发能力,选任何一个都没有错(做选择时,可考虑其他一些因素,比如自身能力、第三方组件)。
2、如果想抱大腿、跳槽大公司,建议选React+TypeScript练手。
3、5年以后的长远考虑?这两个的生命力,足以支撑5年,但你要说5年之后,它们是否还是主流,这个真不好说。现在前端技术发展太快。
4、作为一个专业前端,建议前期学Vue,后期再学React;反之,如果之前直接学的React,则一般不需要再去学Vue了,做项目,选一个就行了。
希望看完我的观点后,能对你有些帮助!
react和vue的区别及优缺点
VUE与React区别:
React的思路是HTMLinJavaScript也可以说是AllinJavaScript,通过JavaScript来生成HTML,所以设计了JSX语法,还有通过JS来操作CSS,社区的styled-component、JSS等。
而Vue是把HTML,CSS,JavaScript组合到一起,用各自的处理方式,Vue有单文件组件,可以把HTML、CSS、JS写到一个文件中,HTML提供了模板引擎来处理。
React的优缺点:
灵活性和响应性:它提供最大的灵活性和响应能力。
丰富的JavaScript库:来自世界各地的贡献者正在努力添加更多功能。
可扩展性:由于其灵活的结构和可扩展性,React已被证明对大型应用程序更好。
不断发展:?React得到了Facebook专业开发人员的支持,他们不断寻找改进方法。
Web或移动平台:?React提供ReactNative平台,可通过相同的React组件模型为iOS和Android开发本机呈现的应用程序。
Vue的优缺点:
易于使用:?Vue.js包含基于HTML的标准模板,可以更轻松地使用和修改现有应用程序。
更顺畅的集成:无论是单页应用程序还是复杂的Web界面,Vue.js都可以更平滑地集成更小的部件,而不会对整个系统产生任何影响。
更好的性能,更小的尺寸:它占用更少的空间,并且往往比其他框架提供更好的性能。
精心编写的文档:通过详细的文档提供简单的学习曲线,无需额外的知识;HTML和JavaScript将完成工作。
适应性:整体声音设计和架构使其成为一种流行的JavaScript框架。它提供无障碍的迁移,简单有效的结构和可重用的模板。
react和vue区别以及为什么会说react适合大型项目都说react适合做大型项目,但是什么是大型项目呢。
首先在上方已经说过,选用vue或者react作为大型项目的框架主要还是在于人,在于开发团队的统合程度
那为什么还要说react更适合大型项目呢,支点是什么呢?
2.react社区的活跃性
但是这些问题,经过时间的沉淀,vue终会解决,并且现在也不差
团队的协同!!!
回过头来说,对于更高自由度的react开发者而言,每个人对于react的理解都是不一样的,这是与前端开发模块化思想背道而驰的。从这点上就需要领头大佬的设计与把关能力要更优秀,也最终落实到了人身上。
其实现在来说,vue和react都相差无几,各有优劣,两者差距更多的是在语法,社区活跃度,实现原理之间的差距。能否做大型项目关键在于项目组的业务划分、部门之间的协调效率上,因为大型项目不是一两个人,三五个人能够完成的。一个项目之所以称为大项目是在于它是公司大量部门协同合作下的产物。也就是说,解决了项目划分等问题,使用vue和react都是可以的。
接下来细说一下vue和react之间的区别
参考博客1
1.设计思想上的区别(数据是不可变的)
react中数据都是进行手动更改达到视图更新,而vue是响应式的进行更改。
所以react结合typescript更容易一起写,vue稍微复杂。不过vue3.0也全面支持typescript。而且vue3.0也更加趋向于react了。这一点在年年末推出的vue3.0先行版本已经体现。所以这一点也不在是区别,而是共同点
我总结了一下众多开发者博客内容。关于广为认知的react更适合大型项目的说法,我更加认同vue和react同样都适合大型项目,小破站都知道吧,b站就是使用vue+koa进行实现的,你要说小破站不是一个大型项目么?当然我现在还是一个新手,只是对于两个框架使用上一些浅显认知,欢迎大家来怒怼我哈。
附上几个链接可以看看
第一次写,语言不够凝练或者疏漏请谅解。希望大家可以从中提炼出自己的认知理解。希望大家积极怒怼,大家一起进步。
react和vue哪个比较好vue比较好。
VUE是?iOS?和?Android?平台上的一款Vlog社区与编辑工具,允许用户通过简单的操作实现Vlog的拍摄、剪辑、细调、和发布,记录与分享生活。还可以在社区直接浏览他人发布的Vlog,与Vloggers互动。
随着手机摄像头的发展,越来越多的人开始使用手机拍照和摄像。摄像一般来说要比拍照门槛高,但是视频传播的信息量又远大于照片。VUE就诞生在这样的背景下,希望用拍照一样简单的操作,帮助用户在手机上拍摄精美的短视频。
主要功能:
分镜头:通过点按改变视频的分镜数实现简易的剪辑效果,而剪辑能够让视频传达更多的信息。
实时滤镜:由**调色专家调制的款滤镜供选择,切换至前置摄像头会出现自然的自拍美颜功能。
贴纸:支持款手绘贴纸,还可以编辑贴纸的出现时间。
自由画幅设置:支持1:1、:9、2.:1三种画幅的视频拍摄。
面试中的网红Vue源码解析之虚拟DOM,你知多少呢?深入解读diff算法_百度...
虚拟DOM(Virtual DOM)是Vue的一个核心概念,它是一种用JavaScript对象来表示真实DOM结构的轻量级抽象。通过使用虚拟DOM,Vue可以在内存中构建和操作DOM,并通过Diff算法来高效地更新真实DOM。
虚拟DOM工作原理:
1. 在Vue中,每个组件都有一个对应的虚拟DOM树,它是一个以组件根节点为起点的JavaScript对象。
2. 当数据发生改变时,Vue会重新计算虚拟DOM树的结构,并和旧的虚拟DOM树进行比较。
3. 在比较过程中,Vue使用Diff算法来找出两棵树之间的差异,并将差异记录下来。
4. 最后,Vue根据差异的记录,批量更新真实DOM,只更新需要改变的部分。
Diff算法:
Diff算法是虚拟DOM的核心,它用于比较新旧虚拟DOM树之间的差异。Vue中使用的是经典的Diff算法,具体包括以下几个步骤:
1. Walk:遍历新旧虚拟DOM树,对比节点,并记录差异。
2. Update:根据差异进行更新。如果节点类型不同,直接替换整个节点;如果节点类型相同,比较其属性和子节点。
3. Diff Attributes:比较节点的属性差异。添加、删除或更新属性。
4. Diff Children:比较节点的子节点差异。通过递归调用Diff算法,找出子节点之间的差异。
5. Keyed Diff:Vue还提供了基于key的优化方式。通过使用唯一的key来识别和复用相同节点类型的子节点,提高Diff算法的效率。
Diff算法的核心思想是最小化操作,只对有差异的部分进行更新,避免不必要的DOM操作,提高性能和效率。
需要注意的是,虚拟DOM和Diff算法并不是Vue独有的概念,其他前端框架如React也采用了类似的原理。它们都通过虚拟DOM和Diff算法来提高渲染效率,减少对真实DOM的操作次数。
深入理解和研究Vue源码的虚拟DOM和Diff算法,可以帮助开发者更好地了解Vue框架的工作原理,并且在实际开发中更有效地使用和优化Vue应用程序。
放弃 console.log 吧!用 Debugger 你能读懂各种源码
很多同学不清楚为什么要使用debugger进行调试,难道console.log不行吗?
即使学会了使用debugger,还是有很多代码看不懂,如何调试复杂的源码呢?
这篇文章将为你讲解为什么要使用这些调试工具:console.log vs Debugger。
相信绝大多数同学都会使用console.log进行调试,将想查看的变量值打印在控制台。
这种方法可以满足基本需求,但遇到对象打印时就无法胜任了。
比如,我想查看webpack源码中的compilation对象的值,我尝试打印了一下:
但你会发现,当对象的值也是对象时,它不会展开,而是打印一个[Object] [Array]这样的字符串。
更严重的是,打印的内容过长会超过缓冲区的大小,在terminal中显示不全:
而使用debugger来运行,在这里设置一个断点查看,就没有这些问题了:
有些同学可能会说,那打印一个简单的值时使用console.log还是很方便的。
比如这样:
真的吗?
那还不如使用logpoint:
代码执行到这里就会打印:
而且没有污染代码,使用console.log的话,调试完成后这个console也不得不删除掉。
而logpoint不需要,它就是一个断点的设置,不在代码中。
当然,最重要的是debugger调试可以看到调用栈和作用域!
首先是调用栈,它就是代码的执行路线。
比如这个App的函数组件,你可以看到渲染这个函数组件会经历workLoop、beginWork、renderWithHooks等流程:
你可以点击调用栈的每一帧,查看都执行了什么逻辑,用到了什么数据。比如可以看到这个函数组件的fiber节点:
再就是作用域,点击每一个栈帧就可以看到每个函数的作用域中的变量:
使用debugger可以看到代码的执行路径,每一步的作用域信息。而你使用console.log呢?
只能看到那个变量的值而已。
得到的信息量差距不是一点半点,调试时间长了,别人会对代码的运行流程越来越清晰,而你使用console.log呢?还是老样子,因为你看不到代码执行路径。
所以,不管是调试库的源码还是业务代码,不管是调试Node.js还是网页,都推荐使用debugger打断点,别再用console.log了,即使想打印日志,也可以使用LogPoint。
而且在排查问题的时候,使用debugger的话可以加一个异常断点,代码跑到抛异常的地方就会断住:
可以看到调用栈来理清出错前都走了哪些代码,可以通过作用域来看到每一个变量的值。
有了这些,排查错误就变得轻松多了!
而你使用console.log呢?
什么也没有,只能自己猜。
Performance
前面说debugger调试可以看到一条代码的执行路径,但是代码的执行路径往往比较曲折。
比如那个React会对每个fiber节点做处理,每个节点都会调用beginWork。处理完之后又会处理下一个节点,再次调用beginWork:
就像你走了一条小路,然后回到大路之后又走了另一条小路,使用debugger只能看到当前这条小路的执行路径,看不到其他小路的路径:
这时候就可以结合Performance工具了,使用Performance工具看到代码执行的全貌,然后用debugger来深入每一条代码执行路径的细节。
SourceMap
sourcemap非常重要,因为我们执行的都是编译打包后的代码,基本是不可读的,调试这种代码也没有什么意义,而sourcemap就可以让我们直接调试最初的源码。
比如vue,关联了sourcemap之后,我们能直接调试ts源码:
nest.js也是:
不使用sourcemap的话,想搞懂源码,但你调试的是编译后的代码,怎么读懂呢?
读懂一行
前面说的debugger、Performance、SourceMap只是调试代码的工具,那会了调试工具,依然读不懂代码怎么办呢?
我觉得这是不可能的。
为什么这么说呢?
就拿react源码来说:
switch case能读懂吧。三目运算符能读懂吧。函数调用能读懂吧。
每一行代码都能读懂,而全部的代码不就是由这一行行代码组成的么?
加上我们可以单步执行来知道代码执行路径。
为啥每行代码都能读懂,连起来就读不懂了呢?
那应该是代码太多了,而你花的时间不够而已。
先要读懂一行,一个函数,读懂一个小功能的实现流程,慢慢积累,之后了解的越来越多之后,你能读懂的代码就会越多。
总结
这篇文章讲了为什么要使用调试工具,如何读懂复杂代码。
console.log的弊端太多了,大对象打印不全,会超过terminal缓冲区,对象属性不能展开等等,不建议大家使用。即使要打印也可以使用LogPoint。
使用debugger可以看到调用栈,也就是代码的执行路径,每个栈帧的作用域,可以知道代码从开始运行到现在都经历了什么,而console.log只能知道某个变量的值。
此外,报错的时候也可以通过异常断点来梳理代码执行路径来排查报错原因。
但debugger只能看到一条执行路径,可以使用Performance录制代码执行的全流程,然后再结合debugger来深入其中一条路径的执行细节。
此外,只有调试最初的源码才有意义,不然调试编译后的代码会少很多信息。可以通过SourceMap来关联到源码,不管是Vue、React的源码还是Nest.js、Babel等的源码。
会了调试之后,就能调试各种代码了,不存在看不懂的源码,因为每一行代码都是基础的语法,都是能看懂的,如果看不懂,只可能是代码太多了,你需要更多的耐心去读一行行代码、一个个函数、理清一个个功能的实现,慢慢积累就好了。
掌握基于debugger、Performance、SourceMap等调试代码之后,各种网页和Node.js代码都能调试,各种源码都能读懂!
web前端培训课程包括哪些内容
您好,web前端培训课程的内容包括以下8个阶段:
阶段1.前端核心基础
HTML +_CSS核心、JavaScript基础语法、JavaScript面向对象、JavaScript DOM和BOM编程、jQuery框架
阶段2.HTML5 + CSS3 + 移动端核心
HTML5新特性、Canvas专列、CSS3新特性、CSS3进阶、CSS3实例演练
阶段3.移动端
移动端核心、移动端适配、移动端特效
阶段4.服务器端
服务器端开发、数据库操作、前后端交互核心、微信公众号开发
阶段5.JavaScript高级
JavaScript基础深入剖析、JavaScript面向对象深入讲解、JavaScript异步编程、JavaScript函数式编程、JavaScript设计模式
阶段6.前端必备
性能优化、版本控制工具、模块化、项目构建工具
阶段7.高级框架
React框架基本使用、React框架进阶、Vue框架基本使用、Vue框架进阶、Vue源码分析
阶段8.小程序
原生小程序入门、原生小程序API使用、小程序框架Mpvue