首页
文章列表
标签墙
返回找工具啦
性能优化
共 119 篇文章
JavaScript防抖和节流为什么用闭包实现更优雅
2026-04-27 18:30:59
在处理高频事件(如窗口大小调整、滚动、输入框输入)时,浏览器会被大量重复的任务阻塞,导致页面卡顿。防抖和节流是解决这一问题的两种核心策略。大多数初级开发者会使用全局变量来存储计时器状态,但这不仅污染全局命名空间,还导致同一个函数无法在页面上复用。 使用闭包可以将计时器状态“私有化”,让每个函数调用都
JavaScript
防抖
节流
30
0
C++ std::move_iterator与std::make_move_iterator的用法
2026-04-27 08:23:09
C++ std::moveiterator与std::makemoveiterator的用法 在 C++ 开发中,处理大量数据或包含动态资源的对象(如 std::string、std::vector)时,深拷贝往往会带来巨大的性能开销。为了避免不必要的拷贝,C++11 引入了“移动语义”。通常我们使
C++
移动语义
迭代器
25
0
Java偏向锁撤销时的安全点停顿问题分析
2026-04-27 04:19:44
Java偏向锁撤销时的安全点停顿问题分析 Java偏向锁是为了在无竞争情况下减少获取锁性能损耗而引入的优化机制,它假设锁通常由同一线程多次获得。然而,一旦出现第二个线程尝试获取锁,偏向锁就必须撤销,这个过程并非瞬间完成,而是依赖于JVM的全局安全点,这会导致系统性能出现不可预测的停顿。 一、 理解偏
Java
偏向锁
安全点
29
0
React useTransition实现非阻塞UI更新的原理
2026-04-26 20:16:32
React useTransition实现非阻塞UI更新的原理 在处理 React 应用中繁重的列表渲染或复杂计算时,直接更新状态会导致主线程被阻塞,造成输入框卡顿、按钮无响应等糟糕的用户体验。useTransition 是 React 18 引入的并发特性核心 Hook,它允许将状态更新标记为“非
React
并发特性
性能优化
34
0
Redis SCAN命令替代KEYS的渐进式遍历原理
2026-04-26 19:22:41
Redis SCAN命令替代KEYS的渐进式遍历原理 在生产环境中直接使用 KEYS 命令是导致 Redis 服务阻塞甚至瘫痪的常见原因。KEYS 命令会遍历整个数据库中的所有键,一旦键数量巨大(例如百万级别),Redis 的单线程特性会导致所有其他请求被挂起,等待遍历完成。SCAN 命令提供了一种
Redis
SCAN命令
渐进式遍历
31
0
Java ThreadPoolExecutor的prestartCoreThread预启动机制
2026-04-26 14:16:16
Java ThreadPoolExecutor的prestartCoreThread预启动机制 在Java并发编程中,ThreadPoolExecutor 默认采用“懒加载”策略来管理核心线程,即只有在任务到来时才创建线程。这种机制虽然节省了资源,但在高并发初始化或对延迟敏感的场景下,会导致第一个任
Java
并发编程
线程池
36
0
Go语言runtime.GC手动触发垃圾回收的阻塞影响
2026-04-26 12:13:54
Go语言runtime.GC手动触发垃圾回收的阻塞影响 在 Go 语言中,垃圾回收(GC)通常作为后台进程自动运行,开发者无需关心内存释放的时机。然而,在高性能敏感或特定内存控制的场景下,开发者可能会尝试手动调用 runtime.GC。理解该函数对程序执行流的“阻塞”特性,对于避免服务抖动至关重要。
Go语言
垃圾回收
手动GC
37
0
Redis AOF重写机制为什么不会阻塞主线程
2026-04-26 09:14:46
Redis AOF重写机制为什么不会阻塞主线程 Redis 的 AOF(Append Only File)持久化机制通过记录每一次写命令来保证数据安全。随着运行时间的增加,AOF 文件体积会不断膨胀,这不仅占用磁盘空间,还会导致 Redis 重启时恢复数据变慢。为了解决这个问题,Redis 引入了
Redis
AOF重写
数据持久化
44
0
JavaScript WeakRef弱引用在缓存场景中的实际应用
2026-04-25 22:21:54
JavaScript WeakRef弱引用在缓存场景中的实际应用 在开发高流量或数据密集型的 Web 应用时,缓存是提升性能的关键手段。然而,使用传统的 JavaScript Map 或普通对象构建缓存,往往面临一个棘手问题:内存泄漏。如果不手动清理,缓存的数据会一直占用内存,直到进程崩溃。 Jav
WeakRef
弱引用
缓存
36
0
C++ std::function类型擦除与虚函数开销对比
2026-04-25 19:17:51
C++ std::function类型擦除与虚函数开销对比 在 C++ 性能优化的过程中,选择正确的多态实现方式至关重要。本文将通过实际代码测试,对比传统虚函数与 std::function 的性能差异,并揭示其背后的内存与CPU开销机制。 1. 搭建性能测试环境 为了准确测量调用开销,我们需要创建
C++
性能优化
std::function
26
0
MySQL 临时表与派生表在复杂查询中的性能影响
2026-04-25 18:18:04
MySQL 临时表与派生表在复杂查询中的性能影响 在处理涉及多表关联、聚合计算或分页的复杂 SQL 查询时,经常会遇到性能瓶颈。这通常是因为 MySQL 在后台悄悄创建了“派生表”或“临时表”来存储中间结果,而这些表往往缺乏有效的索引支持。以下指南将深入剖析这两种表的工作机制,并提供可执行的优化步骤
MySQL
临时表
派生表
36
0
Vue3 triggerRef手动触发shallowRef的响应式更新
2026-04-25 15:19:18
Vue3 triggerRef手动触发shallowRef的响应式更新 在 Vue 3 的响应式系统中,ref 和 reactive 是构建数据驱动视图的核心。然而,在处理大型数据结构或性能敏感场景时,Vue 3 提供了 shallowRef 和 shallowReactive 这样的“浅层响应式”
Vue3
响应式
浅层响应式
35
0
Go语言逃逸分析:变量何时分配在堆上而非栈上
2026-04-25 00:19:27
Go语言逃逸分析:变量何时分配在堆上而非栈上 理解 Go 语言的逃逸分析是编写高性能代码的关键。Go 编译器会自动决定变量是分配在快速的栈上,还是需要垃圾回收(GC)管理的堆上。掌握这一机制,能有效减少 GC 压力,提升程序运行速度。 1. 理解核心机制:栈与堆的区别 在深入分析之前,需明确变量存储
Go语言
逃逸分析
内存分配
32
0
C++智能指针make_shared比直接new+shared_ptr好在哪
2026-04-24 23:28:22
C++智能指针makeshared比直接new+sharedptr好在哪 C++11 引入了智能指针来管理动态内存,std::sharedptr 是最常用的一种。但在创建 std::sharedptr 时,直接使用 new 和使用 std::makeshared 存在显著差异。以下是详细的对比分析与
C++
智能指针
内存管理
46
0
MySQL Generated Always As表达式索引的使用技巧
2026-04-24 13:19:22
MySQL Generated Always As表达式索引的使用技巧 MySQL 5.7 引入了虚拟列功能,MySQL 8.0 进一步完善了函数索引的支持。利用 GENERATED ALWAYS AS 可以在不修改业务代码逻辑的前提下,将复杂的计算、函数调用或 JSON 字段提取逻辑固化为列,并直
MySQL
表达式索引
虚拟列
31
0
Python concurrent.futures.as_completed按完成顺序获取结果
2026-04-24 03:28:59
Python concurrent.futures.ascompleted按完成顺序获取结果 在并发编程中,处理批量任务(如网络请求、文件读写或复杂计算)时,通常会遇到两个核心需求:一是加速执行(利用多线程或多进程并行),二是实时处理结果(谁先跑完先处理谁)。concurrent.futures.a
Python
并发编程
多线程
42
0
Java JIT编译器的热点代码优化与逃逸分析
2026-04-23 20:18:57
Java JIT编译器的热点代码优化与逃逸分析 Java 程序在运行初期通常较慢,但随着时间的推移,速度会显著提升。这种性能飞跃的核心机制在于即时编译器(JIT)及其对热点代码的深度优化。理解并利用这一机制,能让你写出性能极致的 Java 代码。 1. 理解 JIT 编译与热点代码 Java 代码首
Java
JIT编译器
性能优化
40
0
Java LongAdder在高并发计数场景下的分段锁优化
2026-04-23 04:25:28
Java LongAdder在高并发计数场景下的分段锁优化 在并发编程中,统计计数(如点击量、请求数)是极其常见的需求。JDK 8 之前,我们通常使用 AtomicLong 或 synchronized 来实现线程安全计数。然而,在极高的并发场景下,这两种方案都会遇到性能瓶颈。LongAdder 是
Java
LongAdder
高并发
40
0
JavaScript setTimeout最小延迟为什么是4ms
2026-04-22 17:25:50
JavaScript setTimeout最小延迟为什么是4ms 理解 setTimeout 的基本工作机制。setTimeout 是JavaScript中用于延迟执行代码的函数,它接受两个参数:要执行的函数和延迟时间(毫秒)。看似简单,但背后隐藏着浏览器的优化机制。 为什么最小延迟是4ms 发现
JS定时器
延迟机制
浏览器优化
42
0
Go语言runtime.GOMAXPROCS对Goroutine并行度的影响
2026-04-22 15:17:18
Go语言runtime.GOMAXPROCS对Goroutine并行度的影响 理解GOMAXPROCS的基本概念 理解 runtime.GOMAXPROCS 是Go语言中控制并行度的关键参数。这个函数决定了Go程序同时运行多少操作系统线程来执行用户代码。默认情况下,GOMAXPROCS 的值等于逻辑
Go语言
GOMAXPROCS
并行处理
29
0
上一页
1
2
3
4
5
6
下一页