我明白了,Vue3设计与实现-框架设计的核心要素读后感

简介: 第一章我已经觉得有所收获了,写的很精彩,接下来就是第二章了,框架设计的核心要素,应该是框架的大体轮廓的介绍吧。构建产物、模块格式、警告信息、定位问题、开发和生产的区别、热更新的支持、树摇(去掉框架中没用到的功能代码)。

前言

第一章我已经觉得有所收获了,写的很精彩,接下来就是第二章了,框架设计的核心要素,应该是框架的大体轮廓的介绍吧。

构建产物、模块格式、警告信息、定位问题、开发和生产的区别、热更新的支持、树摇(去掉框架中没用到的功能代码)。

很不错,得好好看看,开始。

用户的开发体验提升

开发的体验提升,出了开发快之外,有时还会因为不小心、没注意从而导致使用了不对的变量或者函数,这个时候控制台的报错或者告警信息就显得尤为重要了。

最明显的就是你把vue的应用挂载到一个不存在的dom上,这时候就会告诉你挂载失败,该dom不存在。

还有就是输出vue的对象,在开发的时候,vue3是有自定义输出对象的formatter的,但是需要你在开发人员工具的Console面板中勾选Enable custom formatters这个复选框,这样你就不会看到很复杂的对象结构了,比如ref对象。

框架代码体积的控制

vue3的源码中有__DEV__这个常量,可以用来区分环境,如果为开发环境,那就正常执行里面的操作,如果为非开发环境,那么就会在打包的时候直接移除掉。

vue都是用rollup打包的,这个常量也是通过它的插件来定义的。

vue3在输出资源时会针对不同环境来输出资源文件,开发时输出vue.global.js,生产时输出vue.global.prod.js,生产的资源那文件中不会有__DEV__以及用__DEV__来作为判断依据的那部分代码。

这样一来,开发时的告警信息不会在生产环境中出现,从而减少了很多的开发环境时的框架代码,于是就在不影响开发体验的同时还控制了框架代码的体积。

框架要做到良好的tree-shanking

树摇只在es模块中起作用,因为es模块是静态的结构,才可以将没有使用到的代码给剔除掉。

最早rollup这个工具中出现的,现在webpack也支持。

通过常量__DEV__来去除告警信息的代码,通过树摇来去除框架中未使用到的代码。

当遇到静态分析后很难去除的js代码,可以通过一个机制来去除,很难去除的代码是因为可能会有副作用,只要你写上/*#__PURE__*/,就等于告诉rollup,这段代码没有副作用,可以去除它。

一般来说只有模块内的顶级调用才会触发函数的副作用,如果这个函数A的调用是包裹在另一个函数B中,那么只要另一个函数B不调用,树摇就会去除函数B了。如果函数A是直接在模块内直接调用,那么树摇才会觉得它可能会产生副作用,于是就不会移除函数A。

框架输出的产物

vue3 输出的产物格式有以下几种:

IIFE:立即调用的函数表达式,用于直接在浏览器中使用,比如 (function (exports) {...})(obj),自调用函数。
ESM:es模块,用于script=module时的直接在浏览器使用。
CommonJS:Nodejs的写法,用于服务器端渲染时的使用。

IIFE 可以直接用script引入,从而可以在页面中直接使用vue。
ESM 可以在浏览器中直接使用import的方式来使用vue。
CommonJS:通过require来使用vue。

特性开关

vue3 兼容了 vue2,但是如果你的项目中用不到vue2的组件选项的api功能特性,可以通过将预定义常量__VUE_OPTIONS_API__设置为false来关闭这样的特性。
这样一来,代码中只会包含vue3的组合式api的功能特性,而不会有vue2的组件选项式api的功能特性了,就会减少很多代码体积了。

错误处理

错误的处理可以单个单个的处理,比如你在调用这个函数的时候给它外层加上try catch。这个会导致你写很多遍 try catch。

错误的处理可以统一的处理,比如封装一层,在这一层里面去try catch,你只需要把函数传递进去就行。这个会导致错误处理catch的行为与封装的这层耦合到一起了。

错误的处理统一处理,可以再升级以下,留一个定制的接口,通过这个接口可以设置如何处理try catch后的错误。这个将错误处理catch的行为与封装的这层解耦了。

错误的处理全局处理,可以将所有的错误都进行收集,通过留一个定制的接口,只要发生错误,都可以通过这个接口收集到所有try catch后的错误信息。这个用于全局处理异常,更为方便。

感觉其实很多重复的操作都可以经过这一层的封装噢。比如axios请求的catch,也可以这样做,将多个请求的catch统一处理,也支持你自己定制。

良好的TS类型支持

TS 是微软开源的基于JS的超集编程语言,能为JS提供类型支持。
TS可以做到代码即文档、编辑器自动提示、能避免低级BUG、增强代码的可维护性。所以它能作为评价一个框架是否完善的重要指标。
并不是使用TS就代表TS类型支持友好,如果你老使用any,可能它的那些好处也几乎没用了。有时你想给你的项目弄到完善的TS支持,可能会因此在一开始的时候产生数倍的工作量,它需要花很大的力气,不过它会在之后的开发与维护过程中非常的方便,因为前期完善了这些TS支持,后面就可以享受到它的好处带来的体验与效率。

总结

开发体验对于一个框架来说很重要。框架的体积、输出的资源格式、特性的开关、错误的处理、类型支持,都是衡量一个框架是否完善的指标。

vue在这方面表现很不错,特别是vue3更加优秀了。大大的降低了开发时的心智压力。

目录
相关文章
|
19天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
16天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
37 7
|
16天前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
22 1
|
17天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
39 3
|
16天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
36 1
|
16天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
37 1
|
17天前
|
JavaScript 前端开发 API
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第26天】前端技术的飞速发展让开发者在构建用户界面时有了更多选择。本文对比了Vue.js和Angular两大框架,介绍了它们的特点和优劣,并给出了在实际项目中如何选择的建议。Vue.js轻量级、易上手,适合小型项目;Angular结构化、功能强大,适合大型项目。
16 1
|
18天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
19天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
22天前
|
JavaScript Java API
vue3知识点:setup
vue3知识点:setup
27 5