小结: js 在浏览器执行原理
浏览器多进程与多线程
现代浏览器的标签环境隔离主要通过多进程架构和多线程机制实现,以确保安全、性能和稳定性。以下是浏览器实现标签环境隔离的多进程和多线程交互架构的详细解析:
+-------------------+ +-------------------+ +-------------------+
| 浏览器主进程 | | 渲染进程(标签页) | | GPU进程 |
| - UI管理 |◄----► | - 主线程 |◄----► | - 图形渲染加速 |
| - 网络管理 | | (JS执行/渲染) | | - 图层合成 |
| - 存储管理 | | - 合成线程 ▲ | +-------------------+
+-------------------+ | - 网络线程 ▲ | ▲▲ | - 定时器线程 ▲ | || IPC协议 | - 事件触发线程 ▲ | | 提交图层数据▼ +-------------------+ |
+-------------------+ | ▲ |
| 插件进程(可选) | | | |
| - 第三方插件运行 | | | 事件回调/资源响应 |
+-------------------+ ▼ | |+-------------------+ || 任务队列 |◄—定时器线程/网络线程/事件线程| - 宏任务队列 | || - 微任务队列 |◄—Promise/MutationObserver+-------------------+
层级 | 技术实现 | 隔离目标 |
---|---|---|
进程级 | 多进程架构 + IPC | 崩溃隔离、系统权限控制 |
沙箱级 | 操作系统限制 + Mojo接口代理 | 系统资源访问隔离 |
站点级 | Site Isolation + 同源策略 | 跨站脚本攻击防御 |
渲染级 | 独立合成层 + GPU多队列 | 视觉/性能干扰隔离 |
1. 多进程架构
浏览器的多进程架构将不同功能模块分配到独立进程中,典型进程包括:
- 浏览器进程(Browser Process):
- 负责管理用户界面(地址栏、书签、历史记录等)、网络请求、文件访问等全局功能。
- 协调其他进程的通信和资源分配。
- 通常是单进程,运行主线程和若干辅助线程。
- 渲染进程(Renderer Process):
- **每个标签页(或一组相关标签页)通常对应
一个独立的渲染进程
,负责解析 HTML、CSS、执行 JavaScript、渲染页面等。**
- 站点隔离(Site Isolation):现代浏览器(如 Chrome)为不同域名(如 example.com 和 sub.example.com)的页面分配不同渲染进程,进一步增强安全性,防止跨站脚本攻击(XSS)或数据泄露。
- 每个渲染进程运行在沙箱环境中,限制其对系统资源的直接访问。
- GPU 进程(GPU Process):
- 负责处理图形渲染任务,利用 GPU 加速绘制页面内容(如 CSS 动画、WebGL)。
- 所有渲染进程共享此进程,避免重复初始化 GPU 资源。
- 网络进程(Network Process):
- 处理所有网络请求(如 HTTP、WebSocket),确保网络操作集中管理和优化。
- 隔离网络操作,防止渲染进程直接访问网络,提升安全性。
- 插件进程(Plugin Process):
- 运行 Flash 或其他浏览器插件(现已逐渐淘汰)。
- 隔离插件运行环境,防止插件崩溃影响整个浏览器。
- 扩展进程(Extension Process):
- 运行浏览器扩展,隔离扩展逻辑,防止恶意扩展干扰页面或浏览器。
多进程的优势
- 安全性:进程间通过沙箱隔离,单个标签页崩溃或被攻击不会影响其他标签或浏览器。
- 稳定性:一个渲染进程崩溃不会导致整个浏览器崩溃。
- 性能:不同进程可并行运行,充分利用多核 CPU。
多进程的挑战
- 资源占用:每个进程需要独立内存,多个标签页可能导致高内存消耗。
- 进程间通信(IPC)开销:进程间通过 IPC(如 Mojo 在 Chrome 中)通信,增加复杂性和延迟。
2. 多线程机制
每个进程内部通常包含多个线程,以处理特定任务。以下以渲染进程为例,说明线程的角色和交互:
渲染进程的主要线程
- 主线程(Main Thread):
- 负责解析 HTML/CSS、构建 DOM 和渲染树、执行 JavaScript(通过 V8 引擎)、处理用户交互事件(如点击、滚动)。
- 运行事件循环(Event Loop),按顺序处理任务队列中的任务。
- 所有 DOM 操作和同步 JavaScript 代码都在主线程执行,因此主线程阻塞(如长时间运行的 JavaScript)会导致页面卡顿。
- 合成线程(Compositor Thread):
- 负责将渲染好的图层(Layers)合成最终画面,交给 GPU 进程绘制。
- 处理高效的滚动和动画(如 CSS transform),避免主线程参与。
- 与主线程异步工作,提升页面响应性。
- 工作线程(Worker Threads):
- 运行 Web Worker 或 Service Worker,处理后台任务(如复杂计算、数据处理)。
- 隔离 JavaScript 执行环境,无法直接访问 DOM,通过消息传递(postMessage)与主线程通信。
- 光栅化线程(Raster Thread):
- 将渲染树转换为位图(光栅化),通常在渲染进程或 GPU 进程中执行。
- 优化图形渲染性能。
- I/O 线程:
- 处理异步 I/O 操作,如网络请求的回调、文件读写。
- 避免阻塞主线程。
线程间交互
- 主线程与合成线程:
- 主线程生成渲染树和图层树后,将绘制任务交给合成线程。
- 合成线程独立处理平滑滚动和简单动画,减少主线程负担。
- 通过共享内存或消息队列(如 Chrome 的 cc 层)通信。
- 主线程与工作线程:
- 主线程通过 postMessage API 向 Worker 发送任务,Worker 完成计算后返回结果。
- Worker 线程无法直接操作 DOM,需通过主线程代理。
- 主线程与 I/O 线程:
- I/O 线程处理网络响应后,通过事件循环将结果传递给主线程(如 fetch API 的回调)。
3. 标签环境隔离的实现
标签环境的隔离主要依赖以下机制:
- 进程级隔离:
- 每个标签页(或站点)的渲染进程独立运行,内存空间和权限分离。
- Chrome 的站点隔离策略确保不同源(origin)的页面运行在不同进程,即使在同一标签组内。
- 沙箱机制:
- 渲染进程运行在沙箱中,限制对文件系统、网络、设备的直接访问。
- 沙箱通过操作系统提供的安全机制(如 Linux 的 seccomp、Windows 的 AppContainer)实现。
- 跨进程通信(IPC):
- 渲染进程通过 IPC 与浏览器进程通信,请求网络资源、访问剪贴板或触发 UI 更新。
- IPC 基于消息传递(如 Chrome 的 Mojo),确保高效且安全。
- 线程级隔离:
- 每个渲染进程内的线程分工明确,主线程专注于 UI 和 JavaScript 执行,其他线程处理后台任务。
- Web Worker 和 Service Worker 提供线程级隔离,运行独立脚本环境。
4. 交互架构的工作流程
以下是一个典型的用户交互流程,展示多进程和多线程的协作:
- 用户输入 URL:
- 浏览器进程的主线程解析 URL,发起网络请求(交给网络进程)。
- 网络进程返回数据:
- 网络进程通过 IPC 将 HTML 数据传回浏览器进程,浏览器进程分配一个渲染进程。
- 渲染进程解析与渲染:
- 渲染进程的主线程解析 HTML/CSS,构建 DOM 和渲染树,执行 JavaScript。
- 光栅化线程将渲染树转为位图,合成线程生成最终图层。
- 绘制到屏幕:
- 合成线程将图层数据发送到 GPU 进程,GPU 进程完成硬件加速绘制。
- 用户交互(如点击):
- 主线程处理点击事件,执行相关 JavaScript。
- 如果涉及动画,合成线程接管高效绘制。
- 后台任务:
- Web Worker 处理复杂计算,Service Worker 缓存资源或处理离线逻辑。
5. 典型浏览器的实现
- Google Chrome:
- 采用严格的多进程架构,每个标签页默认一个渲染进程(可通过站点隔离细化为每站点一个进程)。
- 使用 Mojo 进行高效 IPC,Blink 引擎负责渲染。
- 合成线程和光栅化线程优化动画和滚动性能。
- Mozilla Firefox:
- 通过 **Electrolysis(E10S)**项目实现多进程架构,但渲染进程数量较 Chrome 更少(默认 4-8 个)。
- 使用 WebRender 优化渲染性能,Servo 引擎逐步集成。
- Safari(WebKit):
- 采用多进程架构,但渲染进程共享更多资源(如 JavaScript 引擎)。
- WebKit 引擎强调低功耗,适合移动设备。
6. 优化与未来趋势
- 内存优化:
- 浏览器通过进程合并(将低活跃标签页合并到同一进程)或内存压缩减少占用。
- Chrome 的 Tab Discarding 机制卸载后台标签页内存。
- 性能优化:
- 异步渲染(如 OffscreenCanvas)将更多任务从主线程卸载。
- WebAssembly 和 GPU 加速提升复杂应用的性能。
- 安全增强:
- 更严格的站点隔离和沙箱策略。
- 限制第三方 Cookie 和跨站跟踪,强化隐私保护。
- WebGPU 和低级 API:
- 未来浏览器将支持更底层的图形和计算 API(如 WebGPU),需要更复杂的进程和线程协作。
网页的生命周期状态转换
主要由用户操作、系统事件和浏览器行为驱动。以下是常见的生命周期状态、转换流程以及可捕获的事件,简要概述:**
1. 网页生命周期状态
网页生命周期通常包括以下状态(基于HTML标准和浏览器行为):
- 加载中 (Loading):页面开始加载,资源(如HTML、CSS、JS)正在获取和解析。
- 交互 (Interactive):DOM已构建完成,可交互,但部分资源(如图片、异步脚本)可能仍在加载。
- 完成 (Complete):所有资源加载完成,页面完全渲染。
- 隐藏 (Hidden):页面不可见(如切换标签页或最小化浏览器)。
- 终止 (Terminated):页面被销毁(如关闭标签页或刷新)。
2. 状态转换流程及触发条件
以下是状态之间的转换逻辑及触发条件:
- 初始 → 加载中:
- 触发:用户输入URL、点击链接或刷新页面,浏览器发起导航请求。
- 事件:beforeunload(前页面卸载)、DOMContentLoaded(DOM解析开始)。
- 加载中 → 交互:
- 触发:HTML解析完成,DOM树构建完成,主文档进入可交互状态。
- 事件:DOMContentLoaded(DOM完全可用)。
- 交互 → 完成:
- 触发:所有子资源(图片、脚本、样式等)加载完成,页面完全渲染。
- 事件:load(窗口和所有资源加载完成)。
- 完成 → 隐藏:
- 触发:用户切换标签页、最小化窗口或设备进入休眠。
- 事件:visibilitychange(页面可见性变化,结合document.hidden)。
- 任何状态 → 终止:
- 触发:用户关闭标签页、刷新页面或导航到新页面。
- 事件:unload(页面卸载)、beforeunload(可提示用户确认离开)。
- 隐藏 → 完成:
- 触发:用户返回页面(如切换回标签页)。
- 事件:visibilitychange、focus。
3. 可捕获的事件
以下是与生命周期相关的主要事件,开发者可通过JavaScript监听:
- 导航与加载:
- beforeunload:页面即将卸载,可提示用户确认。
- DOMContentLoaded:DOM解析完成,脚本可操作DOM。
- load:所有资源加载完成。
- 可见性与焦点:
- visibilitychange:页面可见性变化,检查document.visibilityState(visible或hidden)。
- focus / blur:窗口或元素获取/失去焦点。
- 卸载与终止:
- unload:页面卸载,清理资源(不推荐过多依赖,因执行不保证)。
- 用户交互:
- click, keydown, input等:用户操作触发,影响页面动态状态。
- 网络与资源:
- error:资源加载失败。
- abort:资源加载被中止。
4. 附加说明
- 用户操作:如点击链接、表单提交、刷新等,直接影响导航和状态转换。
- 系统事件:如网络断开(online/offline事件)、电池状态变化(batterystatus),可能触发页面行为调整。
- 浏览器行为:如缓存(Service Worker)、预加载、懒加载等,影响资源加载顺序和生命周期效率。
- 性能监控:使用Performance API(如performance.timing)捕获详细的加载时间点,便于优化。
5. 开发者注意事项
- 事件监听:优先使用addEventListener绑定事件,确保兼容性和性能。
- 状态管理:通过document.readyState(loading、interactive、complete)实时检查页面状态。
- 兼容性:不同浏览器对unload等事件的支持可能不一致,需测试。
- 优化:避免在unload中执行复杂逻辑,利用requestIdleCallback处理低优先级任务。
// 1. beforeunload - 页面卸载前提示用户确认
window.addEventListener('beforeunload', (event) => {// 提示用户是否离开(某些浏览器可能忽略自定义消息)event.preventDefault();event.returnValue = ''; // 触发默认提示// 自定义提示(部分浏览器不支持)return '您有未保存的更改,确定要离开吗?';
});// 2. DOMContentLoaded - DOM 解析完成
document.addEventListener('DOMContentLoaded', () => {console.log('DOM 完全加载并解析完成!');// 示例:初始化 DOM 元素const button = document.querySelector('#myButton');if (button) {button.addEventListener('click', () => alert('按钮被点击!'));}
});// 3. load - 所有资源加载完成
window.addEventListener('load', () => {console.log('页面及所有资源(如图片、CSS)已加载完成!');// 示例:隐藏加载动画const loader = document.querySelector('.loader');if (loader) {loader.style.display = 'none';}
});// 4. visibilitychange - 页面可见性变化
document.addEventListener('visibilitychange', () => {if (document.visibilityState === 'visible') {console.log('页面可见,恢复活动(如动画、轮询)');// 示例:恢复视频播放const video = document.querySelector('video');if (video) video.play();} else {console.log('页面隐藏,暂停活动以节省资源');// 示例:暂停视频播放const video = document.querySelector('video');if (video) video.pause();}
});// 5. unload - 页面卸载
window.addEventListener('unload', () => {console.log('页面正在卸载,清理资源');// 注意:现代浏览器可能限制unload中的复杂逻辑// 示例:发送分析数据(需快速执行)navigator.sendBeacon('/analytics', JSON.stringify({ event: 'page_unload' }));
});// 6. focus / blur - 窗口焦点变化
window.addEventListener('focus', () => {console.log('窗口获得焦点');// 示例:更新页面标题document.title = '欢迎回来!';
});window.addEventListener('blur', () => {console.log('窗口失去焦点');// 示例:暂停计时器clearInterval(someTimer); // 假设 someTimer 是全局定时器
});// 7. error - 捕获资源加载错误
window.addEventListener('error', (event) => {console.error('资源加载错误:', event.message, event.filename);// 示例:记录错误到服务器fetch('/log-error', {method: 'POST',body: JSON.stringify({ error: event.message, file: event.filename }),});
}, true); // 使用捕获阶段// 8. online / offline - 网络状态变化
window.addEventListener('online', () => {console.log('网络已连接');// 示例:恢复离线时暂停的请求retryPendingRequests();
});window.addEventListener('offline', () => {console.log('网络断开');// 示例:显示离线提示const offlineMessage = document.querySelector('#offlineMessage');if (offlineMessage) {offlineMessage.style.display = 'block';}
});
浏览器渲染流程
1. DOM(文档对象模型)
- HTML Parser:解析HTML源代码,将其转换为DOM Tree(文档对象树)。
- Content Sink:接收解析后的内容,构建DOM节点。
2. CSS 处理
- CSS Parser:解析CSS样式表和内联样式,生成CSSOM(CSS对象模型)。
- Style Rules:存储CSS规则,用于后续样式计算。
3. 构建渲染树(Content Model)
- 结合DOM和CSSOM,生成渲染树(Render Tree),仅包含需要显示的节点(如忽略
display: none
的元素)。
4. 布局(Reflow)
- Frame Constructor:为渲染树中的每个节点创建布局框架(Frame)。
- Frame Tree:计算每个节点的几何信息(位置、大小等),这一过程称为**回流(Reflow)**或布局。
5. 绘制(Painting)
- 将布局后的节点转换为屏幕上的实际像素,生成绘制指令(如填充颜色、绘制边框等)。
6. 显示(Display)
- 最终将绘制结果合成并显示到屏幕上(可能涉及图层合成、GPU加速等)。
js脚本解析 the-script-element
相关文章:
小结: js 在浏览器执行原理
浏览器多进程与多线程 现代浏览器的标签环境隔离主要通过多进程架构和多线程机制实现,以确保安全、性能和稳定性。以下是浏览器实现标签环境隔离的多进程和多线程交互架构的详细解析: ------------------- ------------------- -----------…...
C++核心编程--2 引用
引用就是给变量起别名,操作引用就等于操作原始变量。 2.1 引用基本用法 int var 10; int & r_var var; 2.2 注意事项 声明时必须初始化不允许更改引用指向的原始变量 2.3 引用作为函数参数传递 简化指针修饰函数参数 2.4 引用作为函数返回值 不要返回…...
音频/AI/BLE/WIFI/玩具/商业等方向的论坛网站总结
我爱音频网 我爱音频网 - 我们只谈音频,丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 中国人工智能学会 中国人工智能学会 (caai.cn) AIIA人工智能网 https://www.aiiaw.com/ 世界人工智能论坛 世界人工智能论坛 - (amtbbs.org) 36氪 36氪_让一部分人先…...
告别碎片化!MCP 带来 AI Agent 开发生态的革命性突破
引言: 在当今的智能客服系统开发中,开发者常常面临一个棘手的挑战:需要整合用户的 CRM 数据、知识库和实时聊天记录。然而,由于缺乏统一的标准,每个团队都不得不手动实现这些集成。这不仅延长了开发周期,还…...
centos7部署mysql5.7
1.下载mysql的官方yum源 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2.安装yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm3.安装秘钥文件 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20224.安装mysql5.7…...
linux dbus
Linux D-Bus(Desktop Bus)是一种进程间通信(IPC)机制,主要用于Linux桌面环境和系统服务之间的消息传递。它允许不同的应用程序或系统组件以高效、安全的方式相互通信,是现代Linux桌面(如GNOME、KDE)的核心基础设施之一。 1. D-Bus 的核心概念 消息总线(Message Bus):…...
计量——异方差的检验及其修正
目录 1.异方差的检验 1 BP检验 2white检验 2.异方差的修正 1.异方差的检验 1 BP检验 选择检验方法:BP BP检验的实际步骤(非机器): 1.y对所有x进行回归,得到残差u。计算残差的平方u^2 2.u^2对所有x进行回归&#…...
操作系统学习笔记第3章 内存管理(灰灰题库)
1. 单选题 某页式存储管理系统中,主存为 128KB,分成 32 块,块号为 0、1、2、3、…、31。某作业有 5 块,其页号为 0、1、2、3、4,被分别装入主存的 3、8、4、6、9 块中。有一逻辑地址为 [3, 70](其中方括号中…...
vue3项目中使用CanvasEditor开箱即用(组件的形式,组件封装好了)
canvas-editor-vue 这是canvas-editor项目的vue版本,我封装成组建了,当然了这是个已经把canvas-editor封装好的的Vue项目 项目地址GitHub地址:GitHub - aini-aini/canvas-editor-vue: this is a project than can be used in vue project as Componentthis is a project than…...
人体肢体工作识别-一步几个脚印从头设计数字生命——仙盟创梦IDE
人体肢体识别是借助计算机视觉、传感器等技术,对人体各肢体的位置、动作、姿态等进行检测与分析的技术。其在医疗健康、智能交互、运动训练、安全监控等多个领域具有重要价值, 示例代码 import cv2 import mediapipe as mp import numpy as np import c…...
【重磅】配电网智能软开关和储能联合规划
目录 1 主要内容 目标函数 数据说明 节点系统图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《具有源荷不平衡特性的配电网智能软开关和储能联合规划》部分模型,未考虑聚类分析和分布鲁棒部分,就智能软开关和储能联合规划部分进行了…...
实验6 电子邮件
实验6 电子邮件 1、实验目的 理解电子邮件系统基本结构 理解客户端和服务器端,以及服务器之间的通信 分析理解SMTP,POP3协议 2、实验环境 硬件要求:阿里云云主机ECS 一台。 软件要求:Linux/ Windows 操作系统 3、实验内容…...
NHANES指标推荐:OBS
文章题目:Association between oxidative balance score and all-cause and cancer-specific mortality among cancer survivors DOI:10.3389/fimmu.2025.1541675 中文标题:癌症幸存者氧化平衡评分与全因死亡率和癌症特异性死亡率之间的关联 …...
python-修改图片背景色
在Python中,可以使用图像处理库(如OpenCV或Pillow)来修改图片的背景色。通常,修改背景色的流程包括以下步骤: 1、对图片进行分割,识别前景和背景。 2、对背景区域进行颜色替换。 下面是两种实现方法&#x…...
数据结构与算法--顺序表--单链表
一 顺序表 需要指向存储位置的基地址分配一段连续的内存用length记录实际的元素的个数,也即顺序表的长度,因为顺序表是允许删除和插入元素的不需要定义数组 1.1 普通结构体数组实现版本,实现白色的点以一定的步长移除画面,大量fo…...
MATLAB安装全攻略:常见问题与解决方案
MATLAB安装常见问题与解决方案 一、系统兼容性验证 安装前需确认操作系统满足MATLAB版本要求: Windows 10版本1903及以上(64位)macOS Monterey 12.6及以上Ubuntu 22.04 LTS及以上 验证命令示例: # Linux系统验证 lsb_release…...
constexpr 关键字的意义(入门)
author: hjjdebug date: 2025年 05月 15日 星期四 16:03:33 CST description: constexpr 关键字的意义(入门) constexpr 是c11 引入的一个关键字, 代表了一种属性. 文章目录 1. constexpr 修饰的变量, 在编译期间就可以得到其数值.2. constexpr 修饰的函数, 可以在编译期间被调…...
aptitude 深度教程:从基础到生产实践
目录 一、aptitude 基础:核心概念与环境准备 1.1 aptitude 是什么? 1.2 安装与环境配置 二、aptitude 核心操作:从命令行到交互式界面 2.1 命令行基础操作 2.2 交互式界面(TUI)入门 三、高级功能:依赖管理与版本控制 3.1 依赖冲突解决实战 3.2 版本锁定与降级 3…...
嵌入式开发学习日志(数据结构--双链表)Day21
一、双链表 1.定义 双向链表是在单链表的每个结点中,再设置一个指向其钱去节点的指针域。 2、声明文件 3、创建表头 4、头插 5、 遍历 6、尾插、 7、指定插 8、查找 9、修改 10.、删除 11、逆序 12、销毁链表 13、main.c 三、扩展:工程管理工具&#…...
抢购Python代码示例与技术解析
引言:抢购系统的技术挑战 在当今电子商务高度发达的时代,抢购活动已成为各大电商平台吸引用户的重要手段。然而,高并发、低延迟的抢购场景对系统设计提出了严峻挑战。本文将提供一个完整的Python抢购代码示例,并深入分析其技术实…...
undefined reference to CPUAllocatorSingleton::instance
它发生的原因是你声明了 CPUAllocatorSingleton 类中的 instance 变量,但没有提供它的定义。 这个错误是链接器无法找到 CPUAllocatorSingleton::instance 的定义。它发生的原因是你声明了 CPUAllocatorSingleton 类中的 instance 变量,但没有提供它的定…...
【c语言】动态内存分配
文章标题 一、为什么要进行动态内存管理二、malloc和free2.1. malloc2.2. free2.3. 举例 三、calloc和realloc3.1. calloc3.2. realloc 四、常见的动态内存错误4.1. 对NULL指针的解引用操作4.2. 对动态开辟空间的越界访问4.3. 对非动态开辟内存使用free释放4.4. 使用free释放⼀…...
深入理解JavaScript中的闭包:原理、应用与常见问题
引言 闭包(Closure)是JavaScript中一个既强大又容易让人困惑的概念。理解闭包对于成为一名优秀的JavaScript开发者至关重要。本文将深入探讨闭包的工作原理、实际应用场景以及常见问题,帮助你彻底掌握这一重要概念。 什么是闭包? 闭包是指那些能够访问…...
IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖
2025 MVNOs 世界大会于5月12日至14日在奥地利维也纳举行,汇聚了来自50多个国家的550余位行业领袖,共同探讨移动虚拟网络运营商(MVNO)领域的变革趋势。本届大会聚焦数字化转型、技术创新与战略合作,其中IPLOOK凭借其创新…...
为什么elasticsearch配置文件JVM配置31G最佳
Elasticsearch的JVM堆内存配置为32GB被视为最佳实践,主要基于以下综合技术原理和性能优化考量: 1. JVM指针压缩机制优化内存效率 当堆内存≤32GB时,JVM启用对象指针压缩(Compressed Ordinary Object Pointers, COOP&#…...
单片机开发软件
目录 纯编码 vscode Ardunio Keil 1. 集成化开发环境(IDE) 2. 多架构芯片支持 3. 高效的代码生成与优化 4. 强大的调试与仿真功能 5. 丰富的库函数与生态系统 6. 教育与企业级适用性 典型应用场景 半编码半图形化 STM32CUBEIED 1. 图形化配置…...
Java随机生成邀请码 (包含字母大小写+数字)
前言: 目前我们生成的是6位包含数字和大小写字母的随机邀请码, 并且代码中已经有了处理冲突的机制确保了邀请码的唯一性如(①生成随机邀请码后会检查数据库中是否已存在②如果存在冲突,会尝试最多10次重新生成③如果多次尝试仍失败,会使用"U"用户ID派生的…...
mybatis-plus配置逻辑删除
在实体类中标记软删除字段使用注解 TableLogic 标记该字段为软删除字段 import com.baomidou.mybatisplus.annotation.*;public class YourEntity {// ...其他字段TableLogicprivate Integer isDeleted;// getter/setter }yml配置 # 逻辑已删除值 logicDeleteValue: 2 # 逻辑…...
第二十五天打卡
常见报错类型 try-except-else-finally 语句 首先执行try语句,若正确直接执行else语句 若try语句发生错误,则判断错误类型,执行错误类型对应的except语句,不执行else语句 finally语句无条件执行,多用于资源保存&…...
JESD204 ip核使用与例程分析(一)
JESD204 ip核使用与例程分析(一) JESD204理解JESD204 与JESD204 PHY成对使用原因JESD204B IP核JESD204B IP核特点JESD204B IP核配置第一页第二页第三页第四页JESD204 PHY IP核配置第一页第二页JESD204理解 JESD204B是一种针对ADC、DAC设计的传输接口协议。此协议包含四层, …...
Synchronized详解及高频面试问答
目录 JVM简述 Synchronized详解及面试高频问答 而synchronized是什么,可以解决什么问题? synchronized怎么使用? 锁升级升级了什么? 为什么要这样做锁升级? 锁升级的过程是怎样的?为什么会有偏向锁&…...
【LLIE专题】基于码本先验与生成式归一化流的低光照图像增强新方法
GLARE: Low Light Image Enhancement via Generative Latent Feature based Codebook Retrieval(2024,ECCV) 专题介绍一、研究背景二、GLARE方法阶段一:正常光照代码本学习(Normal-Light Codebook Learning)…...
26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述
26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述 文章目录 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述1.1 计算机的发展1.2 计算机硬件和软件1.2.1 计算机硬件的基本组成1.2.2 各个硬件的工作原理1.2.3 计算机软件1.2.4 计算机系统的层次结构1.2.5 计算机系统…...
Linux云计算训练营笔记day08(MySQL数据库)
Linux云计算训练营笔记day08(MySQL数据库) 目录 Linux云计算训练营笔记day08(MySQL数据库)数据准备修改更新update删除delete数据类型1.整数类型2.浮点数类型(小数)3.字符类型4.日期5.枚举: 表头的值必须在列举的值里选择拷贝表复…...
从基础到实习项目:C++后端开发学习指南
在当今技术快速迭代的背景下,后端开发作为软件工程的核心支柱持续发挥着关键作用。C凭借其卓越的性能表现和系统级控制能力,依然是构建高性能后端服务的首选语言之一。本文将系统性地解析现代C后端开发的核心技术体系,包括从语言特性精要到架…...
jedis+redis pipeline诡异的链接损坏、数据读取异常问题解决
文章目录 问题现象栈溢出(不断的重连)读取超时未知响应尝试读取损坏的链接读取到的数据和自己要读的无关,导致空指针、类型转换错误,数据读取错乱 问题写法问题分析修复注意点 问题现象 栈溢出(不断的重连)…...
十、HQL:排序、联合与 CTE 高级查询
作者:IvanCodes 日期:2025年5月15日 专栏:Hive教程 Apache Hive 作为大数据领域主流的数据仓库解决方案,其查询语言 HQL (Hive Query Language) 是数据分析师和工程师日常工作的核心。除了基础的 SELECT-FROM-WHERE,HQ…...
数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)
目录 一 斐波那契数列(递归算法) 定义 原理 二 冒泡排序 定义 排序思路 函数原型 参数详解: 算法分析: 1. 使用函数库的qsort函数 2. 自定义冒泡排序 三 选择排序 定义 排序思路 四 插入排序 定义 排序思路 五 快速…...
NetSuite CSV导入Item Fulfillment的功能测试
上一篇我们说过如何通过CSV导入更新IF上的Department/Class信息,这篇是来测试一下如果SO在Pending Fulfillment的状态下通过CSV导入IF,这个新版本的一个功能,刚好将测试的过程与结果与大家分享~ 准备文件 External ID是外部ID; …...
网络原理 | 网络基础概念复习
目录 网络中的重要概念 IP地址 端口号 协议 五元组 协议分层 OSI七层网络模型 TCP/IP 五层(四层)模型 网络设备所在的分层 封装和分用 网络中的重要概念 IP地址 IP地址主要用于标识网络主机、其他网络设备的网络地址。在网络数据传输中&#…...
Vsan数据恢复——Vsan上虚拟机不可用,虚拟机组件信息破坏的数据恢复
Vsan数据恢复环境: 一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用,存储内的数据丢失。 Vsan数据恢复过程: 1、将故障存储设备断电,将存储内的硬盘编号后取出。硬件工程师检测后没有发…...
V837s-LAN8720A网口phy芯片调试
目录 前言 一、LAN8720A 芯片概述 二、硬件连接 三、设备树配置 四、内核配置 五、网口调试 总结 前言 在嵌入式系统开发中,网络连接是至关重要的一部分。v837s开发板搭载了LAN8720A系列的网口PHY芯片,用于实现以太网连接。在开发过程中,对于网口的稳定性和性能的调试至…...
C++(12):using声明
目录 一、定义 二、核心用法示例 示例 1:单独引入 std::string 和 std::coun 示例 2:在局部作用域中使用 using 声明 三、对比 using namespace std(不推荐) 四、关键注意事项 1. 名称冲突问题 2. 作用域规则 3. 头文件中的陷阱 五、最佳实践总结 六、完整安全示…...
Xinference 命令大全:从模型部署到管理
Xinference 是一个高性能、分布式的模型推理框架,支持多种大语言模型(LLM)、嵌入模型(Embedding)和图像生成模型。本文将详细介绍 Xinference 的常用命令,涵盖模型启动、管理、监控及 API 调用,帮助你快速掌握其核心功能。 1. 安装与启动 Xinference 1.1 安装 Xinferen…...
如何在线免费压缩PDF文档?
PDF文件太大,通常是因为内部嵌入字体和图片。怎么才能将文件大小减减肥呢,主要有降低图片清晰度和去除相关字体两个方向来实现文档效果。接下来介绍三个免费压缩PDF实用工具。 (一)iLoveOFD在线转换工具 iLoveOFD在线转换工具&a…...
在Rocky Linux 9.5上部署MongoDB 8.0.9:从安装到认证的完整指南
mongodb 的部署 #安装依赖 yum -y install libcurl openssl #安装mongodb yum -y install https://repo.mongodb.org/yum/redhat/9/mongodb-org/8.0/x86_64/RPMS/mongodb-org-server-8.0.9-1.el9.x86_64.rpm #启动服务 systemctl start mongod.service && system…...
Unix Bourne Shell
本文来源 : 腾讯元宝 Unix Bourne Shell(简称sh)是Unix系统中最经典的命令行解释器(shell),由Stephen Bourne于1977年在贝尔实验室开发,并成为后续众多shell(如bash、ksh等ÿ…...
如何在 AWS 上构建支持 AVIF 的前端图片优化方案
一、为什么使用 AVIF 图片格式? 优势点 说明 高压缩率 在相似质量下,AVIF 文件比 JPEG/PNG/WebP 更小,能有效节省带宽和存储空间。 更高画质 即使在低码率下也能保持清晰细节,减少压缩带来的马赛克或模糊问题。 支持透明度 …...
Linux系统进行环境开发环境配置
一. 使用fishros(鱼香肉丝)配置开发环境 对于初学者来说,最难的关卡莫非是开发环境的的搭建,特别是在Ubuntu系统上ROS系统安装时后出现的各种报错以及失败,本篇博客讲述了ROS系统的一键安装过程,适用于18.04及以后的Ubuntu系统版本…...
前端npm的核心作用与使用详解
一、npm是什么? npm(Node Package Manager) 是 Node.js 的默认包管理工具,也是全球最大的开源代码库生态系统。虽然它最初是为 Node.js 后端服务设计的,但如今在前端开发中已成为不可或缺的基础设施。通过npm,开发者可以轻松安装、管理和共享代码模块。 特性: 依赖管理…...