学习内容:
- 复习如何使用git管理项目
- 了解了webpack打包和vite打包
- 了解了JavaScript事件循环底层原理
总结
-
git
-
配置name和email git config --global user.name "xxxx"
git config --global user.email "xxx@xxx.com"
-
git文件状态
- 未跟踪
- 已跟踪
- 暂存
- 未修改
- 已修改
-
git常用命令
git status 查看当前仓库的状态git init 初始化仓库git add <filename> 将文件切换到暂存的状态git commit -m "xxx" 将暂存的文件存储到仓库中git restore <filename> 恢复文件git restore --staged <filename> 取消暂存状态git rm <filename> 删除文件git rm <filename> -f 强制删除git mv from to 移动文件git branch 查看当前分支git branch <branch name> 创建新的分支git branch -d <branch name> 删除分支git switch <branch name> 切换分支git switch -c <branch name> 创建并切换分支git merge <branch name> 合并分支 -
GitHub远程仓库常用命令
-
git remote add origin https://github.com
git branch -M main
git push -u origin main
-
git remote
git remote add <远程库名> <url>
git remote remove <远程库名>
git push -u <远程库名> <分支名>
git push <远程库> <本地分支>:<远程分支>
git clone <url>
git push
git fetch
git pull
-
gitignore
- 默认情况下,git会监视项目中所有内容,但是有些内容比如node_modules目录中的内容,我们不希望它被git所管理。我们可以在项目目录中添加一个
.gitignore 文件,来设置那些需要git忽略的文件。 -
Webpack
-
使用步骤:
- 初始化项目
npm init -y - 安装依赖
webpack webpack-cli - 在项目中创建src目录。然后编写代码
- 执行
npm webpack -
配置文件(webpack.config.js) const path = require("path")
module.exports = {
mode: "production",
entry: "./src/index.js",
output: {
},
module: {
rules: [
{
test: /\.css$/i,
use: ["style-loader", "css-loader"]
}
]
}
}
-
使用bable(将新js转旧js提高代码兼容性)
-
安装npm install -D babel-loader @babel/core @babel/preset-env -
配置: module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
-
在package.json中设置兼容列表 "browserslist": [
"defaults"
]
-
使用插件(plugin)
-
安装插件(html-webpack-plugin) -
配置依赖 plugins: [
new HTMLPlugin({
template: "./src/index.html"
})
]
-
开发服务器
- 安装
npm install -D webpack-dev-server - 启动:
npm webpack server --open devtool:"inline-source-map" 配置源码的映射 -
Vite
-
基本使用
-
Vite是一款开箱即用的打包工具
-
安装开发依赖vite -
vite的源码目录就是项目根目录 -
开发命令
- vite 启动开发服务器
- vite bulid 打包代码
- vite preview 预览打包后的代码
-
命令构建 npm create vite@latest
yarn create vite
pnpm create vite
-
配置文件 import { defineConfig } from "vite"
import legacy from "@vitejs/plugin-legacy"
export default defineConfig({
plugins: [
legacy({
targets: ["defaults"]
})
]
})
-
事件循环
-
浏览器的进程模型
-
进程:程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 -
线程:一个进程至少有一个线程,所以在进程开启后会自动创建一个线程来运行代码,该线程称之为主线程。 如果程序需要同时执行多块代码,主线程就会启动更多的线程来执行代码,所以一个进程中可以包含多个线程。 -
浏览器的主要进程(多进程多线程)
-
浏览器进程:主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。 -
网络进程:负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。 -
渲染进程:渲染进程启动后,会开启一个渲染主线程,主线程负责执行 HTML、CSS、JS 代码。 默认情况下,浏览器会为每个标签页开启一个新的渲染进程,以保证不同的标签页之间不相互影响。 -
渲染主线程
- 渲染主线程是浏览器中最繁忙的线程,需要它处理的任务(解析 HTML,解析CSS,计算样式,布局,执行js等等)
- 事件循环
- 最开始的时候,渲染主线程会进入一个无限循环
- 每一次循环会检查消息队列中是否存在任务,如果有,就取出第一个任务执行,执行完一个后进入下一次循环;如果没有,进入休眠状态。
- 其他所有线程(包括其他进程的线程)可以随时向消息队列添加任务。新任务会加到消息队列的末尾。在添加新任务时,如果主线程是休眠状态,则会将其唤醒以继续循环拿取任务。
-
消息队列优先级
- 每个任务都有一个任务类型,同一个类型的任务必须在一个队列,不同类型的任务可以分属于不同的队列。在一次事件循环中,浏览器可以根据实际情况从不同的队列中取出任务执行。
- 浏览器必须准备好一个微队列,微队列中的任务优先所有其他任务执行
- 随着浏览器的复杂度急剧提升,W3C 不再使用宏队列的说法。
- 在目前 chrome 的实现中,至少包含了下面的队列:
- 延时队列:用于存放计时器到达后的回调任务,优先级「中」
- 交互队列:用于存放用户操作后产生的事件处理任务,优先级「高」
- 微队列:用户存放需要最快执行的任务,优先级「最高」
|