我明白了,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更加优秀了。大大的降低了开发时的心智压力。

目录
相关文章
|
2天前
|
JavaScript 前端开发 C++
Vue3视图渲染技术(1)
Vue3视图渲染技术(1)
6 0
Vue3视图渲染技术(1)
|
20小时前
|
缓存 JavaScript 前端开发
Vue.js框架在构建单页面应用中的最佳实践
Vue.js最佳实践包括组件化(如单一职责组件)、使用Vuex管理状态、axios处理异步请求、Vue Router进行路由、优化性能(keep-alive及懒加载)和选择UI库配合模块化样式。通过这些方法,开发者能构建高效、可维护的SPA。【6月更文挑战第25天】
7 1
|
1天前
Vue3项目 小兔鲜问题总结
Vue3项目 小兔鲜问题总结
9 2
|
1天前
vue3基本指令使用
vue3基本指令使用
7 2
|
2天前
|
JavaScript 前端开发 API
Vue3入门 - vue3相比于vue2的优点,及如何创建Vue3项目
Vue3入门 - vue3相比于vue2的优点,及如何创建Vue3项目
|
2天前
Vue3——tdesign-vue-next如何按需加载动态渲染ICON
如题,在vue3中进行按需加载来动态的渲染icon图标;
8 1
|
10天前
|
JavaScript 前端开发 API
什么是响应式❓Vue2/Vue3中响应式的原理
什么是响应式❓Vue2/Vue3中响应式的原理
21 2
|
10天前
|
资源调度 JavaScript 前端开发
vite+vue3+ts从0到1搭建企业级项目(2)
vite+vue3+ts从0到1搭建企业级项目
25 1
|
2天前
|
JavaScript API 网络架构
Vue3路由机制router(2)
Vue3路由机制router(2)
9 0