现代 JavaScript 的入门教程
现代 JavaScript 的定义
现代 JavaScript 通常指的是自 ECMAScript 2015(也称为 ES6)以来的一系列语言更新和改进,以及随之而来的开发工具、库和框架的生态系统。这些变化不仅增强了 JavaScript 的功能性和表达能力,还推动了更高效、更模块化和更具可维护性的编程实践。以下是现代 JavaScript 的一些关键特征:
1. 新的语言特性
- ES6+ 特性:包括箭头函数、
let
和const
关键字、模板字符串、解构赋值、默认参数、剩余/扩展运算符、类语法等。 - 异步编程:引入了 Promises 和
async/await
,使得处理异步操作更加直观和简洁。 - 模块系统:通过
import
和export
语句支持原生模块化开发,取代了早期的全局变量或命名空间模式。
2. 工具链与构建流程
- 编译器:如 Babel,它可以将较新的 JavaScript 代码转换为向后兼容的形式,确保在旧版本浏览器中也能正常运行。
- 打包工具:如 Webpack 或 Rollup,它们能够优化资源加载、执行代码分割、移除未使用的代码(Tree Shaking)等。
- 任务运行器:例如 Gulp 或 Grunt,用于自动化常见的开发任务,如压缩文件、启动服务器、运行测试等。
3. 框架和库
- 前端框架:Vue.js、React、Angular 等提供了完整的 MVC 或 MVVM 架构支持,增强了组件化开发的能力。
- 状态管理库:如 Redux、Vuex,帮助管理复杂应用中的数据流和状态变更。
- UI 组件库:Material-UI、Ant Design 等,提供了一套现成的设计组件,加快了界面开发的速度。
4. 开发环境
- 集成开发环境 (IDE):像 Visual Studio Code 这样的现代编辑器内置了丰富的插件和扩展,极大地提高了开发效率。
- 调试工具:Chrome DevTools 等高级调试工具支持 Source Maps,即使经过编译后的代码也可以方便地进行源码级别的调试。
- 版本控制系统:Git 是标准的版本控制工具,广泛应用于团队协作和项目管理。
5. 社区与标准化
- 活跃的社区:JavaScript 拥有一个庞大且活跃的开发者社区,不断提出新特性和改进建议。
- 标准化组织:TC39 委员会负责推进 JavaScript 标准的发展,确保新特性经过充分讨论和审查后再纳入正式规范。
6. 最佳实践
- 模块化设计:鼓励将应用程序拆分为小而独立的功能单元,提高代码复用性和可维护性。
- 声明式编程:强调描述“做什么”而不是“怎么做”,简化代码逻辑并减少副作用。
- 测试驱动开发 (TDD):编写自动化测试以验证代码行为,保证质量的同时加快迭代速度。
- 持续集成/持续部署 (CI/CD):自动化构建、测试和部署流程,确保每次更改都能快速可靠地发布到生产环境中。
7. 性能优化
- 懒加载:只在需要时加载必要的资源,减少初始页面加载时间。
- 代码分割:将大型代码库拆分成多个较小的部分,按需加载,进一步提升性能。
- Tree Shaking:移除未引用的代码,减小程序体积。
现代 JavaScript 不仅仅是指语言本身的新特性,它还包括了一个完整的技术栈,涵盖了从开发工具、库和框架到最佳实践和工作流程等多个方面。这种全面的进步让 JavaScript 成为了一个强大、灵活且充满活力的编程平台,适用于从简单的网页交互到复杂的企业级应用的各种场景。随着新技术的不断涌现,JavaScript 社区也在持续进步和发展,为开发者提供了越来越多的机会来创建令人惊叹的应用程序。
当然,下面是一个现代 JavaScript 的入门教程,它涵盖了 ES6+(ECMAScript 2015 及以后版本)中的一些重要特性,并介绍了如何使用这些特性来编写更简洁、可维护的代码。这个教程适合已经有一些编程基础的人士,特别是那些熟悉早期 JavaScript 或其他编程语言的人。
现代 JavaScript 入门教程
1. 安装 Node.js 和 npm
为了在本地环境中运行和测试 JavaScript 代码,建议安装 Node.js,它包含了 npm(Node Package Manager),这是 JavaScript 的包管理工具。它允许开发者轻松地安装、共享、分发和管理 JavaScript 代码包(库或框架)。npm 提供了一个庞大的在线仓库,名为 npm Registry,其中包含了超过一百万个开源包,涵盖了从工具链到用户界面组件的各种资源。现代 JavaScript 强调模块化编程,而 npm 正好提供了理想的工具来管理和组织这些模块。无论是前端还是后端应用,都可以依赖 npm 来处理复杂的依赖关系
- npm 可以帮助项目追踪其依赖项,并确保每个依赖项都使用正确的版本。通过 package.json 文件,你可以明确指定项目所需的各个库及其版本范围。
使用简单的命令行指令,如 npm install ,可以快速下载并安装第三方库。同样,npm update 命令可以将所有依赖更新到最新版本(根据 package.json 中定义的版本策略)。
在 package.json 中定义脚本,例如构建、测试、启动服务器等任务,可以通过 npm run 来执行这些自定义命令。
新加入一个项目时,只需运行 npm install 即可自动解析并安装所有必要的依赖,简化了开发环境的设置过程。 - 下载并安装最新版本的 Node.js。
- 打开命令行工具(如 Terminal 或 Command Prompt),输入
node -v
检查是否正确安装了 Node.js。 - 输入
npm -v
检查 npm 是否也已安装。
2. 创建项目结构
创建一个新的文件夹作为你的项目根目录,并初始化一个 npm 项目:
mkdir modern-js-tutorial
cd modern-js-tutorial
npm init -y
这将生成一个 package.json
文件,用来记录项目的依赖关系和其他元数据。
3. 编写第一个模块化脚本
在项目根目录下创建两个文件:greet.js
和 main.js
。
greet.js
// 导出函数 greet
export const greet = (name) => `Hello, ${name}!`;
main.js
// 从 greet.js 导入 greet 函数
import { greet } from './greet';console.log(greet('World'));
4. 编译和运行代码
由于浏览器可能不完全支持最新的 JavaScript 特性,我们通常会使用 Babel 将代码转换为向后兼容的形式。Babel 是一个广泛使用的 JavaScript 编译器,它允许开发者编写下一代 JavaScript 代码(如 ES6+),然后将其转换为向后兼容的版本(如 ES5),以确保在旧版浏览器或环境中也能正常运行。Babel 的核心功能是解析、转换和生成 JavaScript 代码,使其能够跨越不同的 ECMAScript 标准版本。首先,安装 Babel 及相关插件:
npm install --save-dev @babel/core @babel/cli @babel/preset-env
然后,在 package.json
中添加一个 script 来运行 Babel:
"scripts": {"build": "babel src -d dist"
}
创建一个名为 .babelrc
的配置文件:
{"presets": ["@babel/preset-env"]
}
现在你可以通过以下命令编译代码:
npx babel main.js --out-file compiled.js
最后,在命令行中执行编译后的代码:
node compiled.js
你应该会在控制台看到输出 "Hello, World!"
。
5. 学习更多 ES6+ 特性
5.1 箭头函数
简化函数定义,自动绑定 this:
const add = (a, b) => a + b;
console.log(add(2, 3)); // 输出 5
5.2 let 和 const
代替 var 关键字,提供块级作用域:
let x = 10;
if (true) {let y = 20;console.log(x, y); // 输出 10 20
}
console.log(x); // 输出 10
// console.log(y); // 抛出错误: y is not defined
5.3 模板字符串
允许内嵌表达式和多行文本:
const name = 'Alice';
console.log(`Hello, ${name}. How are you?`);
5.4 解构赋值
从数组或对象中提取值:
const [first, second] = ['apple', 'banana'];
console.log(first, second); // 输出 apple bananaconst { message } = { message: 'Hello!' };
console.log(message); // 输出 Hello!
5.5 默认参数
设置函数参数的默认值:
function greet(name = 'Guest') {return `Hello, ${name}!`;
}
console.log(greet()); // 输出 Hello, Guest!
console.log(greet('John')); // 输出 Hello, John!
5.6 剩余/扩展运算符
用于处理不定数量的参数或合并数组/对象:
const numbers = [1, 2, 3];
console.log(...numbers); // 输出 1 2 3const newNumbers = [...numbers, 4, 5];
console.log(newNumbers); // 输出 [1, 2, 3, 4, 5]const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };
console.log(obj2); // 输出 { a: 1, b: 2, c: 3 }
5.7 类
ES6 引入了面向对象编程的支持:
class Person {constructor(name) {this.name = name;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}const person = new Person('Bob');
person.sayHello(); // 输出 Hello, my name is Bob
6. 异步编程
6.1 Promise
替代传统的回调函数,更好地处理异步操作:
const fetchData = () =>new Promise((resolve, reject) => {setTimeout(() => resolve('Data fetched!'), 1000);});fetchData().then(data => console.log(data));
6.2 async/await
让异步代码看起来像同步代码,提高可读性和易用性:
async function fetchDataAsync() {const data = await fetchData();console.log(data);
}fetchDataAsync();
7. 模块化开发
利用 import/export 实现模块化开发,使代码更加清晰和易于维护。
8. 调试与工具链
- 使用 Source Maps 调试经过编译的代码。
- 配置 Webpack 或 Rollup 等构建工具来优化打包过程。
- 利用 ESLint 进行代码风格检查和错误预防。
9. 实践练习
- 构建一个小的应用程序,比如待办事项列表(To-Do List),尝试应用所学的知识点。
- 探索 Vue.js、React 或 Angular 等流行的前端框架,体验组件化开发的魅力。
以上就是一份简要的现代 JavaScript 入门教程。随着你对这些概念和技术的理解加深,可以继续深入研究更高级的主题,如性能优化、状态管理和服务器端渲染等。祝你在学习过程中取得进步!
相关文章:
现代 JavaScript 的入门教程
现代 JavaScript 的定义 现代 JavaScript 通常指的是自 ECMAScript 2015(也称为 ES6)以来的一系列语言更新和改进,以及随之而来的开发工具、库和框架的生态系统。这些变化不仅增强了 JavaScript 的功能性和表达能力,还推动了更高…...
linux naive代理设置
naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...
Java数据结构 (链表反转(LinkedList----Leetcode206))
1. 链表的当前结构 每个方框代表一个节点,每个节点包含两个部分: 左侧的数字:节点存储的值,例如 45、34 等。右侧的地址(如 0x90):表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…...
游戏与硬件深度协同,打造更精细的体验优化
高画质的游戏往往带来手机的发热和卡顿从而影响游戏体验。开发者希望能够获取到手机运行的实时状态,从而能够进行主动的负载调节,将手机发热时游戏体验影响降到最低;同时手机也可以通过游戏传入的关键场景如"正在下载资源"“团战中…...
C++实现设计模式---命令模式 (Command)
命令模式 (Command) 命令模式 是一种行为型设计模式,它将请求封装为一个对象,从而使得可以用不同的请求对客户端进行参数化、对请求排队或记录日志,以及支持可撤销的操作。 意图 将操作的调用者与接收者分离,通过将请求封装为独…...
office 2019 关闭word窗口后卡死未响应
最近关闭word文件总是出现卡死未响应的状态,必须从任务管理器才能杀掉word 进程,然后重新打开word再保存,很是麻烦。(#其他特征,在word中打字会特别变慢,敲击键盘半秒才出现字符。) office官网…...
flutter入门系列教程<三>:tabbar的高度自适用,支持无限滚动
背景 在之前的文章中,简介了tabbar组件的使用,它通常用于顶部放置tabbar标签页头,内容全部都是TabbarView的全部内容,且内容通常是占满屏幕的(尽可能大),如下: 但是有时候我们需要…...
前端三件套详解之 HTML
HTML: 师承b站pink老师【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)css3移动端前端视频教程】 HTML概述 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创…...
【pytorch 】miniconda python3.11 环境安装pytorch
ubuntu24.04 miniconda python3.11 环境安装pytorch 组件:langgraph本身不需要有一些模型是需要的:python3.11环境:报错ModuleNotFoundError: No module named ‘torchaudio’ ModuleNotFoundError: No module named ‘torchaudio’File "/root/miniconda3/envs/05_ep_…...
支持大功率输出高速频闪的图像处理用光源控制器
机器视觉系统中的光源控制器在确保图像质量、提高系统稳定性、降低能耗以及方便系统扩展和升级等方面发挥着重要作用。它可提供稳定光源,调节参数,另外具有操作便捷性。 下面我们来看Gardasoft的光源控制器,Gardasoft拥有作为图像处理用LED光…...
使用 Python 和 Tesseract 实现验证码识别
验证码识别是一个常见且实用的技术需求,尤其是在自动化测试和数据采集场景中。通过开源 OCR(Optical Character Recognition,光学字符识别)工具 Tesseract,结合 Python 的强大生态,我们可以高效实现验证码识…...
Opencv学习
Long time no see!哈哈,假期终于有时间做一点自己喜欢的东西了 还是想说,每天花一点时间投在自己喜欢的事情上,或者专攻一些平时不学的方向,真的很酷! 图片绘制 对于图像绘制,可以分为:图像创…...
数学大模型MAmmoTH:通过混合说明调整建立数学通才模型
向悦和陈文虎是该项目的主要作者。他们这个项目推出 MAmmoTH,这是一系列专为解决一般数学问题而定制的开源大型语言模型 (LLM)。 MAmmoTH 模型在 MathInstruct 上进行训练,MathInstruct 是我们精心策划的指令调整数据集。 MathInstruct 已编译 来自 13 个…...
springboot 配置多数据源以及动态切换数据源
场景 我们springboot项目,通常会有多个数据库,例如mysql,vertica,postgresql等等数据库,通常我们需要动态切换使用我们想要的数据库,这时候就需要配置多数据源了 多数据源特性 支持多数据库类型:例如,同…...
计算机图形学:实验三 光照与阴影
一、程序功能设计 设置了一个3D渲染场景,支持通过键盘和鼠标控制交互,能够动态调整光源位置、物体材质参数等,具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体:代码中通过 openGLObject 结构体表示一个…...
idea修改模块名导致程序编译出错
本文简单描述分别用Idea菜单、pom.xml文件管理项目模块module 踩过的坑: 通过idea菜单创建模块,并用idea菜单修改模块名,结构程序编译报错,出错的代码莫名奇妙。双击maven弹窗clean时,还是报错。因为模块是新建的&am…...
Arcgis国产化替代:Bigemap Pro正式发布
在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…...
RNN实现阿尔茨海默症的诊断识别
本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…...
大数据学习(36)- Hive和YARN
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦ᾑ…...
【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析
在Windows系统中,你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效,如图: 你可以使用以下代码: import os import winreg as reg# ffmpeg.exe的路径 ffmpeg_path …...
计算机的错误计算(二百二十一)
摘要 利用一个数学解题器化简计算 实验表明,即使是数学解题器,也是一派胡言。 有一读者来信,询问数学大模型的推理事宜。现就前面的案例继续做一讨论。 例1. 化简计算摘要中算式。 下面是与一个数学解题器的对话。 点评: &am…...
小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统
全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片:...
外部flash烧写算法学习笔记(一)
一,STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二,QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了,含MDK下载算法制作和STM32CubeProg下载算法制作 …...
嵌入式MCU面试笔记2
目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道,通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…...
差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法
四轮驱小车的话: 转向角度计算方法:float turning_angle z_angular / x_linear; // 转向角度,单位为弧度 速度的话直接用线速度 两轮驱动小车: 计算公式: leftSpeed x_linear - z_angular * ORIGINBOT_WHEEL_TRACK /…...
解释器模式
在软件开发的诸多场景中,我们有时需要处理特定领域的语言或表达式。例如,在数据库查询中,我们使用 SQL 语句来查询数据;在数学计算软件里,需要解析和计算各种数学表达式。解释器模式(Interpreter Pattern&a…...
代码随想录刷题day14(2)|(链表篇)02.07. 链表相交(疑点)
目录 一、链表理论基础 二、链表相交求解思路 三、相关算法题目 四、疑点 一、链表理论基础 代码随想录 二、链表相交求解思路 链表相交时,是结点的位置,也就是指针相同,不是结点的数值相同; 思路:定义两个指针…...
戴尔电脑用u盘重装系统_戴尔电脑用u盘重装win10系统教程
戴尔电脑用u盘重装系统?戴尔电脑这几年默认预装win10家庭版和win11家庭版。有的用户用上了预装win11家庭版的戴尔电脑,使用一段时间依然不习惯,于是想退回win10。但不知道怎么重装win10,这几年的戴尔电脑建议采用U盘方式安装系统比…...
http的请求体各项解析
一、前言 做Java开发的人员都知道,其实我们很多时候不单单在写Java程序。做的各种各样的系统,不管是PC的 还是移动端的,还是为别的系统提供接口。其实都离不开http协议或者https 这些东西。Java作为编程语言,再做业务开发时&#…...
【MARK】Cline配合FreeAPI,再薅亿点点token
说明 自从用了cline,token消耗的速度就开始起飞。各家免费的几百万Token,看起来挺多,实际用起来还是顶不住几天~ FreeAPI是个简单的替代,上下文长度还是不如官方API,所以还是推荐使用官方,这个只是玩具&a…...
如何使用CRM数据分析优化销售和客户关系?
嘿,大家好!你有没有想过为什么有些公司在市场上如鱼得水,而另一些却在苦苦挣扎?答案可能就藏在他们的销售策略和客户关系管理(CRM)系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…...
c语言数组详解
前言 一、数组的定义: 二、数组的初始化: 1.如何给数组赋初值: 1.1逐个赋值: 1.2使用花括号初始化: 1.3使用等号赋值: 2.不同的初始化方式 2.1使用循环初始化: 2.2使用默认初始化: 三…...
EasyNVR免费版已发布!EasyNVR接入海康NVR大华NVR宇视NVR天地伟业NVR接入各种IPC摄像机工业监控家庭监控
EasyNVR不用多说了,驰名已久!之前一直是收费的,不管多少个摄像机接入都是收费的,这就导致,很多个人用户,或者说是家庭用户,家里就那么两三个摄像机,想通过EasyNVR接入NAS系统&#x…...
GSI快速收录服务:让你的网站内容“上架”谷歌
辛苦制作的内容无法被谷歌抓取和展示,导致访客无法找到你的网站,这是会让人丧失信心的事情。GSI快速收录服务就是为了解决这种问题而存在的。无论是新上线的页面,还是长期未被收录的内容,通过我们的技术支持,都能迅速被…...
vue2的$el.querySelector在vue3中怎么写
这个也属于直接操作 dom 了,不建议在项目中这样操作,不过我是在vue2升级vue3的时候遇到的,是以前同事写的代码,也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例,并且…...
C++ list 容器用法
C list 容器用法 C 标准库提供了丰富的功能,其中 <list> 是一个非常重要的容器类,用于存储元素集合,支持双向迭代器。<list> 是 C 标准模板库(STL)中的一个序列容器,它允许在容器的任意位置快速…...
双目立体校正和Q矩阵
立体校正 对两个摄像机的图像平面重投影,使二者位于同一平面,而且左右图像的行对准。 Bouguet 该算法需要用到双目标定后外参(R,T) 从上图中可以看出,该算法主要分为两步: 使成像平面共面 这个办法很直观ÿ…...
又是一年啊
又是一年 回顾2024一、2024的愿望二、愿望实现了吗?三、总结 展望2025几个愿望~~(终于快写完了)~~ 华丽结尾 回顾2024 一、2024的愿望 1.CSP-J上岸; 2.小升初上岸; 3.数学进入联赛班; 4.初一期末年级前五…...
Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅
一、引言 在当今数字化时代,构建高效、可靠的网络应用是开发者面临的重要挑战。Spring Boot 作为一款强大的 Java 开发框架,以其快速开发、简洁配置和丰富的生态支持,深受广大开发者喜爱。而 Netty 作为高性能、异步的网络通信框架ÿ…...
简识JVM私有内存区域栈、数据结构
前记:JVM稀有内存区域栈包含:虚拟机栈、本地方法栈、程序计数器; 在JVM(Java虚拟机)中,私有内存区域栈主要指的是虚拟机栈(VM Stack)和本地方法栈(Native Method Stack&…...
【C++基础】多线程并发场景下的同步方法
如果在多线程程序中对全局变量的访问没有进行适当的同步控制(例如使用互斥锁、原子变量等),会导致多个线程同时访问和修改全局变量时发生竞态条件(race condition)。这种竞态条件可能会导致一系列不确定和严重的后果。…...
【优选算法】10----无重复字符的最长子串
---------------------------------------begin--------------------------------------- 题目解析: 看到这一类题目,有没有那种一眼就感觉时要用到滑动窗口的感觉,铁子们? 讲解算法原理: 方法一: 暴力解法ÿ…...
C语言程序设计十大排序—冒泡排序
文章目录 1.概念✅2.冒泡排序🎈3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展…...
26考研资料分享 百度网盘
基础班: 通过网盘分享的文件:2026【考研数学】等3个文件 链接:https://pan.baidu.com/s/1djzJiut1h0DH8WmrI05YHg?pwd1234 提取码:1234--来自百度网盘超级会员v3的分享 通过网盘分享的文件:01、2026【考研政治】 链接:https://pan.baidu.…...
C++ lambda表达式
目录 1.lambda表达式 1.1什么是Lambda表达式? 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式? Lambda表达式是C11标准引入的一种匿名函数,它允许你在需要函数的地方直接编写代码…...
halo附件图片迁移到easyimage图床
前言 在使用 markdown 编写文章之后,markdown 内容中引用的图片都是图床的地址 部分文章是在 halo 没有使用图床前,就已经发布了的,这些图片都是直接存储在 halo 系统中的 需要将这些文章的图片全部迁移到图床上,这些文章的图片…...
Grafana
Grafana 是一款广泛使用的开源数据可视化与监控平台,通过与 Prometheus、InfluxDB、Elasticsearch 等多种数据源集成,提供强大的监控、数据展示和告警功能。其告警体系在及时通知系统异常、保障业务稳定性方面起到关键作用。 Grafana 告警体系概述 Graf…...
前端性能优化:HMR热更新和预获取加载
最近发现项目开发,有点加载快,有点却是卡机式,甚至刷新导致白屏情况。于是,我找开发和性能优化的方法,找到下面几种。 本文将深入探讨 预获取(Prefetch)、动态导入(Dynamic Import&…...
OpenCV相机标定与3D重建(66)对立体匹配生成的视差图(disparity map)进行验证的函数validateDisparity()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用左右检查来验证视差。矩阵 “cost” 应该由立体对应算法计算。 cv::validateDisparity 函数是 OpenCV 库中用于对立体匹配生成的视差图&…...
git reset (取消暂存,保留工作区修改)
出现这种情况的背景:我不小心把node_modules文件添加到暂存区了,由于文件过大,导致不能提交,所以我想恢复之前的状态,但又不想把修改的代码恢复为之前的状态,所以使用这个命令可以只恢复暂存区的状态&#…...