EventTarget 监听清理:函数长得一样,也不代表能移除同一个订阅 一个面板打开三次后,同一条更新消息触发三次处理,常见原因是每次挂载都注册了新监听,卸载时却没有移除原来的函数。写两遍内容相同的箭头函数,并不会得到同一个函数对象。订阅关系认的是实际回调身份,而不是源码文字。Event... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Intl.NumberFormat 数字展示:舍入只改变文字,分组与单位要按部件读取 设备读数需要在页面显示为两位小数,开发者常把格式化后的字符串又写回数据对象。短期看起来很整齐,后续排序、求平均或重新切换语言时却开始出错。数字的原始值、展示精度和地区格式应分别保存,展示文本只是最后一步的产物。Int... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
JavaScript 有界并发任务池:把任务延后启动,才能真正限制同时运行的数量 批量生成缩略信息时,直接把一百次请求交给 Promise.all,往往会在很短时间内同时启动。聚合结果的方法本身不会替你控制连接数。真正需要限制的是“任务开始到结束”这段区间里,有多少项工作处于活跃状态。解决办法是先... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python gzip 可重复压缩:内容相同,时间戳和文件名为何仍会改变输出 解压后一样,压缩包却总在变化构建脚本每次生成相同文本,再压缩成 gzip,发布系统却认为产物发生了变化。检查解压内容完全相同,直接比较压缩字节又确实不同。gzip 除了保存压缩数据,还可以在头部记录时间和原始文件名,... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python Queue 任务确认:队列已经空了,为什么 join 还可能继续等 从队列取走,不代表已经处理完批处理程序把任务放进队列,由工作线程逐一取走。主线程看到 empty 返回真便宣布完成,却发现输出文件还没生成。原因是队列为空只描述等待领取的项目,不包括已经被领取、仍在执行的任务。完成判... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python 弱值缓存:放进 WeakValueDictionary 的对象为什么会自动消失 缓存不一定负责把对象留住一个解析器希望复用已经生成的文档对象,又不想让缓存长期占住全部文档。把普通字典换成 WeakValueDictionary 后,有些键却很快消失。这并不是缓存随机丢数据,而是弱值字典只帮忙找到... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python memoryview:只读视图为什么仍会跟着底层数据改变 交出去的只读数据,为何后来变了程序从一个可复用缓冲区里切出消息,把只读视图交给后续步骤,以为这份内容已经固定。下一次读取复用了原缓冲区,前一条消息却跟着变化。问题通常出在所有权约定:禁止接收方写入,不代表发送方已经放... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python string.Template:缺失字段该报错,还是把占位符留到下一轮 一个自动生成说明文字的小工具,把文件名和价格放进模板。上线后却出现了未替换的字段,原因是调用 safe_substitute 时少传了参数:这个方法会保留无法替换的占位符。它可以保留待补内容,但后续处理需要明确设计,... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash 管道里的计数为什么带不出来:让循环在当前 shell 中读取输入 脚本把几行输出通过管道交给 while 循环,每读一行就增加计数;循环里面看起来正常,循环结束后却仍然打印零。在 Bash 的常见默认设置下,管道中的循环在子 shell 环境执行,修改的是那份环境中的变量,父 sh... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript Object.freeze:外层冻结了,里面的数组为什么仍然能增加元素 一份共享配置已经调用 Object.freeze,某个模块却仍然把服务器地址加进了数组。问题通常不在冻结失效,而在冻结只作用于当前对象自己的属性:外层保存的数组引用不能替换,数组对象本身却还没有被冻结,内部元素仍然可... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读