Vue.js设计与实现

这篇具有很好参考价值的文章主要介绍了Vue.js设计与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一章 权衡艺术

1.1 命令式和声明式

从范式上看,视图层框架分为命令式和声明式。
命令式:

一大特点是:关注过程

声明式:

一大特点是:关注结果

1.2 性能与可维护性

声明式代码的性能不优于命令式代码的性能

框架本身就是封装了命令式代码才实现了面向用户的声明式

声明式代码的可维护性强

1.3 虚拟DOM的性能

为了使声明式的性能更接近命令式的性能,这就是虚拟DOM的作用

通过innerHTML创建页面的性能:HTML字符串拼接的计算量+innerHTML的DOM计算量

虚拟DOM创建页面的性能:创建JavaScript对象的计算量+创建真实DOM的计算量

innerHTML更新页面的时候:要重新构建HTML字符串,再重新设置DOM元素的innerHTML属性。其实就是要销毁所有旧的DOM元素,再全量的创建新的DOM元素。

虚拟DOM更新页面的时候:比较新旧虚拟DOM,找到变化的元素更新它

性能:原生JavaScript > 虚拟DOM > innerHTML(模板)

1.4 运行时和编译时

纯运行时:

编写一个Render函数

提供一个树型结构的数据对象:

01 const obj = {
02   tag: 'div',
03   children: [
04     { tag: 'span', children: 'hello world' }
05   ]
06 }

Render函数:

01 function Render(obj, root) {
02   const el = document.createElement(obj.tag)
03   if (typeof obj.children === 'string') {
04     const text = document.createTextNode(obj.children)
05     el.appendChild(text)
06   } else if (obj.children) {
07     // 数组,递归调用 Render,使用 el 作为 root 参数
08     obj.children.forEach((child) => Render(child, el))
09   }
10
11   // 将元素添加到 root
12   root.appendChild(el)
13 }

使用:

01 const obj = {
02   tag: 'div',
03   children: [
04     { tag: 'span', children: 'hello world' }
05   ]
06 }
07 // 渲染到 body 下
08 Render(obj, document.body)
运行时+编译时

编写Compiler的程序,作用是把HTML字符串编译成树型结构的数据对象

使用:

01 const html = `
02 <div>
03   <span>hello world</span>
04 </div>
05 `
06 // 调用 Compiler 编译得到树型结构的数据对象
07 const obj = Compiler(html)
08 // 再调用 Render 进行渲染
09 Render(obj, document.body)
纯编译时:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wBZ0pbQQ-1686448242740)(C:\Users\virtue\AppData\Roaming\Typora\typora-user-images\image-20230213173530302.png)]

这个时候只需要Compiler函数就可以了,只通过编译器编译就可以了。

第二章 框架设计的核心要素

一. 提升用户的开发体验
二. 控制框架代码的体积
三. 框架要做到良好的Tree-Shaking

Tree-Shaking 指的是消除哪些永远不会被执行的代码,排除dead code

实现Tree-Shaking必须满足模板是ESM(ES Module)依赖ESM的静态结构

Tree-Shaking工作原理:
目录结构
01 ├── demo
02 │   └── package.json
03 │   └── input.js
04 │   └── utils.js

首先安装rollup.js

01 yarn add rollup -D
02 # 或者 npm install rollup -D

input.jsutil.js文件的内容

01 // input.js
02 import { foo } from './utils.js'
03 foo()
04 // utils.js
05 export function foo(obj) {
06   obj && obj.foo
07 }
08 export function bar(obj) {
09   obj && obj.bar
10 }

input.js文件为入口,输出ESM,输出文件的名字叫作bundle.js

01 npx rollup input.js -f esm -o bundle.js

bundle.js的内容

01 // bundle.js
02 function foo(obj) {
03   obj && obj.foo
04 }
05 foo();
Tree-Shaking中的第二个关键点------副作用

如果一个函数产生了副作用,那么就不会被消除

副作用:当调用函数的时候会对外界产生影响

01 //input.js
02 import {foo} from './utils'
03
04 /*#__PURE__*/ foo()

注释代码 /#PURE/,其作用就是告诉 rollup.js,对于foo函数的调用不会产生副作用

IIFE格式的资源:iife 立刻调用的函数表达式

ESM格式的资源:esm

vue.esm-browser.js中的-browser字样的ESM资源是直接给

cjs格式的资源:cjs 全称:CommonJS文章来源地址https://www.toymoban.com/news/detail-482602.html

到了这里,关于Vue.js设计与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Vue】Vue简介、引入、命令式和声明式编程

    💭💭 ✨: 开始陆陆续续更新vue啦   💟:东非不开森的主页   💜:如果有幸和你一起学习一起进步,那就太棒啦,一起学习吧。💜💜   一、初识Vue 1.1.vue简介 Vue 是一套用于构建用户界面的渐进式 JavaScript框架。 全称是Vue.js或者Vuejs; 它基于标准 HTML、CSS 和 JavaScript 构

    2024年02月01日
    浏览(31)
  • 《语音识别模式、算法设计与实践》——第一章 语音识别概述

    本专栏仅为本人学习研读体会分享,以及实际完成的测试代码。更加详细内容详见该书。 定义: 语音识别是让机器具备自动接收和分析人类的语音,并最终输出对应文本的过程。 目标: 将输入语音转化为文字的输出                  目标实现条件: 提前规定好该系

    2024年04月12日
    浏览(47)
  • 王道第一章:简单的C程序设计基础

    目录 程序框架: scanf const修饰符 一、C语言词汇 1.1 二、各数据类型的常量与变量 2.1基本类型 2.1.1整型int 2.1.2浮点型(实型)float、double

    2024年02月07日
    浏览(47)
  • 【算法】算法设计与分析 课程笔记 第一章&第二章

    算法的四个性质: 输入、输出、确定性和有穷性 。 1. 常见的时间复杂度 常数阶 O(1) 对数阶 O(log n) 线性阶 O(n) 线性对数阶 O(nlog n) 平方阶 O(n^2) 立方阶 O(n^3) k 次方阶 O(n^k) 指数阶 O(2^n) 注:上面的 log n 均代表 以2为底 的对数。 2. 时间复杂度排序 常见的算法时间复杂度由小到

    2024年02月09日
    浏览(45)
  • 从Vue2到Vue3【一】——Composition API(第一章)

    内容 链接 从Vue2到Vue3【零】 Vue3简介 从Vue2到Vue3【一】 Composition API(第一章) 从Vue2到Vue3【二】 Composition API(第二章) 从Vue2到Vue3【三】 Composition API(第三章) 从Vue2到Vue3【四】 Composition API(第四章) Vue3作为Vue.js框架的最新版本,引入了许多令人激动的新特性和改进。其

    2024年02月16日
    浏览(32)
  • verilog数字系统设计教程(夏闻宇)|第一章-第六章

    早听闻此书大名,虽然有些verilog的编程经验,今天来系统的学习下verilog,完善知识体系,提升编程能力。本文章只当自己做笔记使用,记录自己没掌握的重难点,和大家一起学习。 目录 第一章  第二章 verilog语法 第三章 模块的结构、数据类型、变量和基本运算符号 1.常量

    2024年03月18日
    浏览(48)
  • 基于FPGA的UDP协议栈设计第一章_MAC层设计

    前导码 :7个0h55和一个起始界定符SFD,0hD5,不过大部分地方好像是7个0hAA,就是bit顺序相反,不过我用FPGA接收到的上位机的网口数据是55,估计是大小端传输问题吧。 注 :有时候有可能是六个55一个D5 类型 :IP:0X0800。ARP:0X0806 发送模块按部就班按照协议格式进行组帧即可

    2024年04月17日
    浏览(31)
  • 明德扬FPGA至简设计原理与应用 第一篇 FPGA基础知识 第一章 FPGA简介

    FPGA 的全称为 Field-Programmable Gate Array, 即现场可编程门阵列。FPGA 就是一个可以“改变”内部结构的芯片,而让这个芯片来实现怎样的功能,就需要通过编程即设计HDL,经过 EDA工具编译、综合、布局布线成后转换为可烧录的文件,最终加载到 FPGA 器件中去,改变 FPGA 内部的连

    2024年01月16日
    浏览(79)
  • [ XJTUSE ]JAVA语言基础知识——第一章 面向对象程序设计思想

    类描述了一组有相同 特性 (属性)和相同 行为 (方法)的对象,类和对象是面向对象思想的两个核心概念 · 人类是一种类,每一个具体的人则是这个类的对象 用面向对象程序来模拟真实世界 发现并创建类 发现类的特征 发现类的行为 在面向对象程序中,对象的特征由各种

    2023年04月13日
    浏览(93)
  • vite+vue3+cesium大屏数据可视化项目——第一章:搭建项目

    目录 系列文章目录 前言 一、搭建项目 1.检查node版本号 2.搭建vue3项目 二、配置cesium 1.前期准备 2.安装cesium 3.引入cesium 4.初始化页面 总结   这几年智慧城市、数字孪生、数字可视化这些高级词汇可太多啦,招聘简介上也有很多要求会webGis等相关经验,所以我觉得最近来学一

    2024年02月07日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包