vue diff算法与虚拟dom知识整理(2) snabbdom简介并搭建开发环境

news2024/12/23 13:29:01

snabbdom算是diff算法 和 虚拟dom 的一个鼻租了

vue源码借鉴了snabbdom

这个单词翻译出来叫速度
在这里插入图片描述
命名还是用了点心的 后面是 dom 这个 我们大概去猜作者的意思 大概想表示的就是 一个比较快的dom操作

snabbdom的get地址如下
https://github.com/snabbdom/snabbdom
这里的简介也简单讲述了整体的一个概念
在这里插入图片描述
大概就是 一个简单、模块化、强大和高性能的虚拟DOM库

重点来了 这个虚拟dom库的核心源码 仅有200行代码 且代码真的是把简化和优化做到了很高的程度
在这里插入图片描述
这两百行代码的思想和其中的算法 是面试官经常喜欢去问的 所以 掌握的程度还是非常重要的

snabbdom实际是TS写的 而get上是不提供编译好的JavaScript版本的
我们这里 点src目录进去
在这里插入图片描述
看到很多文件都还是 ts结尾的
在这里插入图片描述

但这样就还是有点麻烦 其实我们可以直接通过

npm i -D snabbdom

下载到 JavaScript版本的snabbdom

这里 就不建议大家去克隆get上的snabbdom了 因为 你get克隆下来 还是一个TypeScript版本的 还是要编译成js版本的

好 那么 我们现在来搭建环境
我们现在电脑里创建一个文件夹 然后打开
在这里插入图片描述
然后在终端打开这个目录 输入

npm init

这样我们就创建一个基本的 package.json 依赖
在这里插入图片描述
然后我们在终端输入

npm i -S snabbdom

然后 我们的snabbdom就进来了
在这里插入图片描述
安装好之后 打开新出来的 node_modules
打开下面的src
你会发现 它Ts的源码其实也进来了
在这里插入图片描述
但其实还有 build 里面就还有js的源码
在这里插入图片描述
而 这里大家会注意到 这里都有一个 .d.ts 这个就是 ts转js留下的一个保存类型的文件

snabbdom是一个dom库 简单说 就是 他是有界面的
你可以在上面写任何html标签 但他不能在node环境下运行

那我们就需要一个 webpack和webpack-dev-server的开发环境
webpack是构建工具 webpack-dev-server则是让程序在端口上跑起来

但大家一定要注意 webpack要装5啊 你要是装4那就没有读取exports的一个能力的

我们在终端执行这样一段代码

npm i -D webpack@5 webpack-cli@3 webpack-dev-server@3

这样我们的依赖就进来了在这里插入图片描述
然后 我们在项目根目录创建 webpack.config.js
参考代码如下

//通过node获取到当前文件的位置
const path = require('path')

module.exports = {
    //设置当前入口文件
    entry: './src/index.js',
    //出口配置
    output: {
      //设置打包后文件的名字
      filename: 'bundle.js',
      //设置虚拟打包  文件并不会真正打包到项目中 而是出现在指定端口上
      publicPath: 'xuni'
    },
    devServer: {
        port: 8080,
        contentBase: 'www'
    }
}

这里 我们指定了入口为 src下的index.js文件 那么 目前还没有 我们创建一下

在根目录下创建目录 叫 src
在src下面创建一个文件 叫 index.js
内容先不用管 先创建出来

然后 我们这里指定了contentBase为一个 3w目录

我们在根目录下创建一个文件夹 叫 www
在项目创建一个文件叫 index.html
参考代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>你好!!!</h1>
</body>
</html>

就是一个比较基本的html结构代码

然后 我们打开项目根目录下的 package.json
在scripts下添加一个命令

"serve": "webpack-dev-server"

在这里插入图片描述
好 然后我们来尝试第一次打包 在终端执行

npm run serve

在这里插入图片描述
好 这样 我们的项目就跑起来了

然后 我们尝试访问自己指定的 8080端口
http://localhost:8080/
在这里插入图片描述
我们html代码的效果就出来了

那么 因为我们的webpack配置的是虚拟打包的 所以 我们在项目中并看不到包

那么 打包后端文件 我们可以通过 http://localhost:8080/xuni/bundle.js 访问到
在这里插入图片描述
因为 我们webpack.config.js的配置
在这里插入图片描述
指定端口的 就不说了 然后 指定打包的文件的文件夹名为xuni 里面的文件叫bundle.js 这都是我们自己配置的

然后 我们在www下的index.html中引入这个打包后的文件

<script src="/xuni/bundle.js"></script>

在这里插入图片描述
然后 我们来测试一下 在 src下的 index.js 中写一段代码

alert(123);

然后 我们再次访问端口
在这里插入图片描述
弹出这个提示 说明成功了
他成功打包了入口文件 index.js的脚本并执行出来了

这样 环境就基本ok了 好消息是不需要安装任何loader
特别是ts 因为我们要搞的纯js脚本 并不需要ts
对我们也会方便非常多

然后我们在
https://github.com/snabbdom/snabbdom
中 找到这个位置
在这里插入图片描述
将这篇代码考到src入口文件index.js中

然后 看到 www目录下的index.html中 加入一个 id为container的元素
因为 这段js代码中已经写的比较明白了 要找一个 id为 container的盒子

在这里插入图片描述
在这里插入图片描述
然后访问项目端口
在这里插入图片描述
界面能出现这个 就说明成功了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「OceanBase 4.1 体验」|快速安装部署[OBD方式]

文章目录 一、Oceanbase数据库简介1.1 核心特性1.2 系统架构1.2.1 存储层1.2.2 复制层1.2.3 均衡层1.2.4 事务层1.2.4.1 原子性1.2.4.2 隔离性 1.2.5 SQL 层1.2.5.1 SQL 层组件1.2.5.2 多种计划 1.2.6 接入层 二、OceanBase 数据库社区版部署2.1 部署方式2.2 基础环境配置2.3 通…

【华为OD机试真题】信号发射和接收(javaC++python)100%通过率 超详细代码注释 代码深度解读

信号发射和接收 知识点数组栈 单调栈时间限制: 1s 空间限制: 256MB 限定语言:不限 题目描述: 有一个二维的天线矩阵&#xff0c;每根天线可以向其他天线发射信号也能接收其他天线的信号&#xff0c;为了简化起见&#xff0c;我们约定每根天线只能向东和向南发射信号&#xf…

【ROS仿真实战】获取机器人在gazebo位置真值的三种方法(三)

文章目录 前言一. 使用ROS tf库二、 使用Gazebo Model Plugin三、 使用libgazebo_ros_p3d插件四、总结 前言 在ROS和Gazebo中&#xff0c;获取机器人的位置信息通常通过ROS消息传递进行。在这篇文章中&#xff0c;我们将介绍三种获取机器人在Gazebo中位置真值的方法&#xff1…

CTF ASCII码 密码解密题 简单

1. 题目 这次的CTF题目就是一张图片如下&#xff0c;并且说有几个蛋被打乱过。明显是一个密码学的解码题。 2. 解题思路 左边表格给出10种颜色&#xff0c;特别是第二列给出了数字0&#xff0c;种种迹象都指向了10进制。每一个蛋都有三种颜色&#xff0c;代表每个蛋都是三位…

【GORM框架】一文学会用gorm实现对单表的增删改查操作

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: GORM框架学习 近期目标&#xff1a;写好专栏的每一篇文章 文章目录 一、…

M1 Mac配置JAVA环境

1、下载JDK 目前JDK有Oracle的JDK还有zulu的Open JDK可供选择&#xff0c;因为需要JAVA1.8所以下文以zulu的JDK为例。 Zulu官网&#xff1a;https://www.azul.com/downloads/?packagejdk 选择所需的JDK版本&#xff08;注意选择ARM架构&#xff09;> 下载.dmg包 > 安装 …

DAY 47 Ngnix优化与防盗链

Ngnix优化主要有两种&#xff0c;一种是配置上的优化&#xff0c;一种是内核上的优化 隐藏响应头中的版本号 方法一&#xff1a;curl命令 网页查看 隐藏版本信息 修改nginx的运行用户和组 方法一&#xff1a;在编译安装时&#xff0c;指定运行用户和组 [root nginx-1.12.2]#…

【英语】100个句子记完7000个雅思单词

其实主要的7000词其实是在主题归纳里面&#xff0c;不过过一遍100个句子也挺好的&#xff0c;反正也不多。 文章目录 Sentence 01Sentence 02Sentence 03Sentence 04Sentence 05Sentence 06Sentence 07Sentence 08Sentence 09Sentence 10Sentence 11Sentence 12Sentence 13Sent…

Linux常用的压缩、解压缩以及scp远程传输命令的使用

Linux常用的压缩、解压缩以及scp远程传输命令的使用 1.压缩命令2 解压命令3. 大文件压缩分割为多个压缩文件4. 远程传输命令scp4.1 将本地文件复制到远程主机目录4.2 将本地目录复制到远程主机目录4.3 将远程主机的文件复制到本机4.4 复制远程主机目录到本机 1.压缩命令 tar -…

Packet Tracer - 综合技能练习(配置新交换机的初始设置、SSH 和端口安全)

Packet Tracer - 综合技能练习 地址分配表 设备 接口 IP 地址 子网掩码 S1 VLAN 1 10.10.10.2 255.255.255.0 PC1 NIC 10.10.10.10 255.255.255.0 PC2 NIC 10.10.10.11 255.255.255.0 场景 网络管理员要求您配置新交换机。 在本练习中&#xff0c;您将使用一…

二分搜索算法通解框架

文章介绍了二分搜索最常见的几个场景的使用&#xff1a;寻找一个数、寻找左侧边界以及寻找右侧边界。阅读本文只需读者了解二分搜索的使用限制和基本原理即可。 我相信&#xff0c;友好的讨论交流会让彼此快速进步&#xff01;文章难免有疏漏之处&#xff0c;十分欢迎大家在评…

密码学【java】初探究加密方式之对称加密

文章目录 一 常见加密方式二 对称加密2.1 Cipher类简介2.2 Base算法2.3 补充&#xff1a;Byte&bit2.4 DES加密演示2.5 DES解密2.6 补充&#xff1a;对于IDEA控制台乱码的解决方法2.7 AES加密解密2.8 补充&#xff1a; toString()与new String ()用法区别2.9 加密模式2.9.1 …

MySQL学习笔记第六天

第06章多表查询 5. 7种SQL JOINS的实现 A是员工表&#xff0c;B是部门表。 5.7.1 代码实现 #8. UNION 和 UNION ALL的使用 # UNION&#xff1a;会执行去重操作 # UNION ALL:不会执行去重操作&#xff0c;效率优于前者&#xff0c;开发中优先使用 #结论&#xff1a;如果明确…

【Java入门合集】第二章Java语言基础(四——第二章结束)

【Java入门合集】第二章Java语言基础&#xff08;四——第二章结束&#xff09; 博主&#xff1a;命运之光 专栏&#xff1a;JAVA入门 学习目标 掌握变量、常量、表达式的概念&#xff0c;数据类型及变量的定义方法&#xff1b; 掌握常用运算符的使用&#xff1b; 掌握程序的顺…

【LeetCode股票买卖系列:188. 买卖股票的最佳时机 IV | 暴力递归=>记忆化搜索=>动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Hibernate(一)——入门

在之前经常用到操作数据库的框架是Mybatis或者Mybatis-plus。 Hibernate在項目中用过&#xff0c;但没有深入的了解过&#xff0c;所以这次趁着假期把这个框架了解一下。 目录 概念Hibernate和Mybatis的区别Hibernate使用依赖引入Hibernate配置文件XML配置文件详解properties文…

2023 年 五一杯 B 题过程 + 代码(第一问)

文章目录 第一题问题分析PageRank 算法&#xff08;可跳过&#xff09;PageRank 算法修正权重系数 结果各城市链出与链入链出 权重链入 权重 PageRank 算法结果代码 第一题 问题分析 从收货量、发货量、快递数量增长/减少趋势、相关性等多角度考虑&#xff0c;建立数学模型&…

如何使用git更新别人的代码

文章目录 如何使用git更新别人的代码问题说明省流问题示例操作步骤总结总结 如何使用git更新别人的代码 问题说明 当自己git clone别人的代码之后&#xff0c;代码一直停留到本地电脑上&#xff0c;而你就跑了一次程序就搁置了。 后来有一天你想再次运行该代码&#xff0c;但…

可观测性:你的应用健康吗?

一、需求来源 首先来看一下&#xff0c;整个需求的来源&#xff1a;当把应用迁移到 Kubernetes 之后&#xff0c;要如何去保障应用的健康与稳定呢&#xff1f;其实很简单&#xff0c;可以从两个方面来进行增强&#xff1a; 首先是提高应用的可观测性&#xff1b;第二是提高应…

Matplotlib 安装介绍

文章目录 安装步骤 Matplotlib 不止是一个数学绘图库&#xff0c;它也是可视化和分析工具中最流行之一。我们可用其制作简单的图表&#xff0c;如折线图和散点图。 安装步骤 先进入&#xff1a;python官网 跳转到界面&#xff1a; 录入并搜索 下载之前&#xff0c;看一下自…