SwiftSoup 实体转义性能优化:批处理透传 Unicode 序列与完整可复现的基准验证
网页爬虫后端【免费下载链接】SwiftSoupSwiftSoup: Pure Swift HTML Parser, with best of DOM, CSS, and jquery (Supports Linux, iOS, Mac, tvOS, watchOS)项目地址https://gitcode.com/gh_mirrors/sw/SwiftSoup点击查看免费下载本篇技术指南围绕 SwiftSoup 仓库中的基准报告 entity-escaping-20260909.md 展开讲解 SwiftSoup 的 HTML 实体转义entity escaping助手函数如何从逐序列写入升级为按相邻透传序列批量拷贝以及这项纯行为保持behavior-preserving优化是如何通过 6 个独立回归测试、逐字节输出比对和 ABBA 块状基准协议得到验证的。读完后你将掌握Sources/Entities.swift中escapeFastAscii的批量透传实现原理、配套回归测试的字节预言机byte oracle设计并能用仓库自带的swiftc Python 运行脚本在本地复现整套测量流程。一、改动本体相邻透传 Unicode 序列的批量拷贝该优化针对的是 UTF 输出路径下的转义助手它原来会为每一个非 ASCII 序列单独调用一次内部缓冲区写入器现在改为把相邻的透传pass-through序列一次性拷贝到输出缓冲区。报告的边界声明非常明确这些行为完全不变ASCII 替换规则、、、的实体替换不变NBSPU00A0替换不变HTML 模式下替换为nbsp;XHTML 模式下替换为#xa0;自定义公开替换回调即调用方覆写StringBuilder的append路径及其调用顺序不变停止位置仍然落在相同的字节边界上对畸形/截断字节保留历史性的宽容 lead-byte 步进permissive lead-byte stepping没有悄悄换成会校验的 UTF-8 解码器不引入任何新缓存、新状态、新公开 API 或规范化策略。也就是说这是一次纯粹的写放大write amplification削减连续非 ASCII 内容例如一长串日文、表情符号、组合标记在旧实现中会触发多次小的写入调用新实现合并成一次memcpy式的整段拷贝而字节级输出逐位不变。1.1 源码定位escapeFastAscii 的主循环仓库中的对应实现位于 Sources/Entities.swift 的escapeFastAscii私有函数。公开入口是 Entities.escape(::)内部按ByteSlice重载分发当输出编码器是 UTF-8/UTF-16/Unicode 且不需要空白规范化时会路由到该快速路径见 ByteSlice 重载中的路由判断。主循环对每个字节分三种情况处理ASCII 段查 128 字节替换表命中则追加对应实体amp;/lt;/gt;/quot;未命中则通过扫描到下一个需处理字节的游标把整段安全 ASCII 一次性write进缓冲区NBSP 两字节序列C2 A0命中时输出nbsp;或#xa0;单独处理其余非 ASCII 序列按 lead byte 推算序列宽度1/2/3/4进入下面新增加的批量透传逻辑。1.2 批量透传的核心代码优化后的透传分支Sources/Entities.swift可以概括为// Copy adjacent non-ASCII sequences together. Keep the existing // lead-byte stepping, including for malformed/truncated UTF-8. var runEnd end while runEnd count { let next base[runEnd] if next asciiUpperLimitByte { break } // 遇到 ASCII 即停止 let nextEnd min(runEnd utf8CharLength(for: next), count) if nextEnd - runEnd 2 next StringUtil.utf8NBSPLead base[runEnd 1] StringUtil.utf8NBSPTrail { break // 遇到 NBSP 即停止它要替换 } runEnd nextEnd } accum.write(contentsOf: base.advanced(by: i), count: runEnd - i)三个关键细节与报告一一对应utf8CharLength(for:)Sources/Entities.swift按 lead byte 的取值区间128→1、0xE0→2、0xF0→3、否则 4推断序列宽度。对畸形或截断字节这个推断只是宽容地向前跨步与优化前的旧行为完全一致——报告特别强调这一点避免读者误以为引入了 UTF-8 校验扫描在遇到 ASCII 字节或 NBSP 两字节序列时立即停止保证替换回调的触发点与顺序不变整段透传最终通过 StringBuilder.write(contentsOf:count:) 一次写入替代了原来逐序列的多次写入。二、行为保持验证6 个独立回归测试报告称新增 6 个回归方法与仓库中 Tests/SwiftSoupTests/EntityEscapeRunTest.swift 完全吻合测试方法覆盖点对应报告描述testUnicodeRunsAcrossSettingsAndStorage组合标记与 emoji、base/extended/XHTML 三种EscapeMode、UTF-8/UTF-16 输出设置、attribute/text 上下文并遍历 array、offset-array、Data、非零索引Data、指针五种存储形态testMalformedAndTruncatedRuns2,048 条带种子的畸形字节串截断长度 0~64全部走转义路径testEveryLeadByteAtBoundaries每一个字节值0~255作为 lead byte 出现在截断边界7 种后缀组合testASCIIAndUnchangedPaths纯 ASCII 与免转义快路径不受影响含空白规范化参数组合testReplacementCallbacksAndSnapshots自定义append回调的调用序列、builder 别名alias与保留快照retained snapshot不被破坏testRegeneratedTextAndAttributes无原始 HTML 来源、重新生成的文档source-less regenerated HTML中 text 与 attribute 上下文输出正确这套测试的骨架是一个独立字节预言机EntityEscapeRunTest.swift 中的reference方法它不复用生产代码而是用几十行独立逻辑按历史规则重新实现转义——ASCII 按 38/60/62/34 四个替换点处理在 attribute 且 XHTML 模式、仅在 attribute 下替换非 ASCII 按224/240阈值推断宽度并原样拷贝C2 A0替换为nbsp;/#xa0;。生产输出必须与该预言机逐字节相等。测试还刻意构造了非零基址输入在字节前后垫上[255, 34, 60]/[38, 255]再取切片以及ByteSlice指针存储确保优化没有隐含任何数组从头开始的假设RecordingBuilder子类则逐条记录append回调收到的内容验证替换回调顺序amp;、#xa0;、lt;、quot;与快照隔离见 EntityEscapeRunTest.swift。三、性能测量结果3.1 独立确认目标 500 ms/进程fixture 大小 128三个目标工作负载均为合成输入报告强调它们暴露的是该助手函数而非真实流量分布escape-japanese长连续日文串加一个必须替换的escape-mixed日文、ASCII、emoji、组合标记、NBSP 与标记markup交错serialize-japanese重新生成一个 128 段落的无来源文档每段含 text 与 title 属性不复用原始 HTML 来源。这些输入在 Tools/benchmark_entities.swift 中直接可见8 条变体输入防止循环展开干扰serialize-japanese的无来源文档构造见 benchmark_entities.swift。测量结果几何均值毫秒/次正数表示候选更快WorkloadReference msCandidate msLess time95% intervalescape-japanese0.0206570.01116745.94%44.59 to 47.26%escape-mixed0.0367590.03007818.17%14.68 to 21.52%serialize-japanese0.2422210.15041537.90%36.56 to 39.22%escape-plain0.0041250.0041080.41%-2.43 to 3.17%3.2 小/ASCII 对照组不宣称 ASCII 有收益12 个块的测量中初步中位数曾提示一个很小的 ASCII 变慢但更长的重复测量及其 A/A 对照都未能确认这一点。已经安全的字符串保留既有的免转义快速路径即ByteSlice重载中基于memchr的needsEscape预判见 Sources/Entities.swift。WorkloadReference msCandidate msLess time95% intervalescape-ascii0.0152770.0150221.67%-0.75 to 4.02%escape-short0.0003130.0003101.10%-0.85 to 3.01%3.3 Reader 对照不做通用应用层声明两项实体改动合并后还在 8 个平衡块、每修订每工作负载 16 个全新进程、目标 400 ms/进程的设置下与未改动的 PR #3 基线做了对比沿用中等/字节输入的 Reader fixture深拷贝注入被真实测量浅拷贝路径仅作相等性哨兵这些 SwiftSoup 侧回放排除了形态分析、Realm/词典 I/O、WebKit 与 UIWorkloadReference msCandidate msLess time95% intervalmanabi-parse3.7452403.801148-1.49%-4.53 to 1.46%manabi-injection-deep23.27146022.9325651.46%-1.36 to 4.19%manabi-ruby5.3263875.349208-0.43%-1.70 to 0.83%manabi-inner0.0180720.0178801.07%-0.89 to 2.98%所有 Reader 区间的置信区间都横跨零。因此报告明确不主张整体 Reader 加速、通用解析器收益、Apple 设备上的性能结果或 iPhone 结果。两个成功的助手级helper-specific结果不改变这一结论——这是该报告最值得学习的克制微基准显著 ≠ 端到端收益必须用应用层 workload 单独验证并如实报告区间跨零。四、测量协议与统计方法协议细节全部记录于原文档值得在复现任何 Swift 微基准时直接借鉴环境Swift 6.2.1、Linux x86_64、CPU 0 亲和性绑定、-O -g -whole-module-optimization -swift-version 6出货库且不带-enable-testing同一个编译优化的公开客户端动态加载各版本库。fixture 准备、编译、全量输出校验、sanitizer 测试与 profiling 全部在计时区间之外每个计时循环前有 3 次进程内预热。哈希按 Swift 默认随机化不刻意固定为确定性以保证计时真实性确认轮12 个平衡 ABBA/BAAB 块即每个修订、每个工作负载 24 个全新进程。每块对每个修订取两次对数时间的均值表格报告几何均值毫秒/次以及对数时间比的成对块 Student t 95% 区间换算为节省时间百分比。报告同时声明这是探索性区间未做多重比较校正也不构成对其他机器或生产流量的预测。墙钟与进程 CPU、校准记录、全部原始进程记录、精确命令/库/客户端/源码哈希均被保留不删除任何样本或离群点初筛与对照初筛6 块、每修订每工作负载 12 进程单独保留不与确认轮选择性混池目标与 ASCII A/A 对照用 8 块Reader A/A 用 6 块。所有墙钟 A/A 区间都包含零多实体点multipoint-entity的 A/A 区间特别宽因为随机化的字典顺序会影响基线线性扫描——报告明确不隐藏这一不确定性。五、行为学验证测试套件、逐字节一致性与 ASanrelease 测试套件在完全相同的 PR #3 构建输入上未改动的参考库 两个新测试文件通过原生 release 套件818 用例801 通过17 个 opt-in benchmark 跳过0 失败每个隔离候选库 自己的 6 个新测试通过812 用例795 通过17 跳过0 失败。新测试对未改动的生产源码同样通过——这证明改动是行为保持的优化而非正确性修复且未删除或削弱任何既有测试逐字节一致性四个出货变体参考、仅转义、仅查找、两者的输出与基线逐字节一致9,408 条完整 DOM 记录、4,608 条上下文片段记录、72 个非空 Reader 输出集合。DOM 输出 SHA-256 为c243b0307f2fbfaeb781bd5786ac51e9e66f659c165b9f33f1590345416b6ca1片段输出 SHA-256 为1c582c7608ddef757b25c57b270e4e63460a21a871025db35dcb60edf5585a98ASan合并后的生产候选库通过完整原生 AddressSanitizer release 套件818 用例、801 通过、17 跳过、0 失败使用ASAN_OPTIONSdetect_leaks0——报告明确声明这不是泄漏检查。六、可移植复现步骤改动建立在 fork mastercb57c9e160da093c7dd87eb91d335b6891d0efb7之上数值对比对象是已优化的 PR #3c9c37c80eb571aabba59a1f3ef31af9b072af4a8与其仅叠加本改动的候选树参考 Sources Git tree 为98e22c134afa5144fe64565f448260239545f90f两个修订版本的原始Entities.swift完全相同blob9a8e292e58323cedb86e834cc24c8bf14af89739。PR #1~#7 已按作用域与变更文件清单审计均未改动 Entities后续复查包含正则 PR #8它只改 Pattern。两个实体 PR 改的是不同助手、可独立评审且两个 Tools 文件刻意保持字节一致合并任意顺序后共享同一套可移植 harness本项的姊妹报告见 entity-decoding-20260909.md。要精确复现报告中的测量在c9c37c80eb571aabba59a1f3ef31af9b072af4a8上建两个 detached worktree然后只把本 PR 的Sources/Entities.swiftdiff相对 master应用到候选端——不要把另一个实体改动混入隔离对比若改测 master 本身请用两个 master 基的 worktree 并标注为新的实验。设BASE、CANDIDATE指向两个 worktreeOUT为全新的绝对路径构建目录mkdir -p $OUT/base $OUT/candidate extso [ $(uname -s) Darwin ] extdylib for variant in base candidate; do root$BASE [ $variant candidate ] root$CANDIDATE swiftc -swift-version 6 -O -g -whole-module-optimization \ -emit-library -emit-module -module-name SwiftSoup $root/Sources/*.swift \ -emit-module-path $OUT/$variant/SwiftSoup.swiftmodule \ -o $OUT/$variant/libSwiftSoup.$ext done swiftc -O -g -I $OUT/base -L $OUT/base -lSwiftSoup \ Tools/benchmark_entities.swift -o $OUT/benchmark-entities然后运行以下命令再用--aa和不同的输出前缀重复一次作为 A/A 对照Tools/compare_entity_benchmarks.py 会在计时前比对两份完整公开输出、检查计时校验和并拒绝覆盖已有运行目录在 Linux 上固定一个允许的 CPU在 macOS 上记录无法绑定亲和性python3 Tools/compare_entity_benchmarks.py \ --baseline-library $OUT/base --candidate-library $OUT/candidate \ --client $OUT/benchmark-entities --blocks 12 --ms 500 --size 128 \ --workloads escape-japanese escape-mixed serialize-japanese escape-plain escape-ascii escape-short \ --output $OUT/escape-ab # Repeat with --aa and --output $OUT/escape-aa.计时期间不要与编译、sanitizer 运行或 profiler 并发执行。项目常规正确性检查仍是swift test -c release以及在支持的平台ASAN_OPTIONSdetect_leaks0 swift test -c release --sanitize address该基准不修改Package.swift也不新增依赖。七、被测产物身份与适用前提参考库 SHA-25697486712c374feabf95d22d9ae8564ee427e80e210388bee7bf963231ada16f9候选库 SHA-2568224610433f55df4fa9d408d02a750dcbc5de43f8e0cc503d3826e42aa06c99f两端相同客户端 SHA-25622672ec15224612f36814f41a8ac792c7d24c550f903f66da8c2b15cb9e51154候选Entities.swiftGit blob8dc30c59cabd7d9156a5bab3e92539e0682ec93d运行时补丁 SHA-256e7d0ee7f5df9441a37397ed089ee0bcbc54504b8f061a17a2f519b2c27928e71最后归纳适用前提避免误读本优化的收益上限由输入中连续非 ASCII 透传段的长度决定——纯 ASCII 与短字符串走既有快路径收益可忽略对照组区间跨零合成工作负载证明了助手级收益escape-japanese 约 46%、serialize-japanese 约 38%但 Reader 端到端对照区间全部跨零不能据此宣称解析器整体加速或任何 Apple 设备上的表现。完整的原始 screen/confirmation/A/A 记录、CPU 数据、校准、fixture 与源码清单、失败/中性观察、精确源码快照、测试日志与完整输出集随配套交付包保留且报告明确警示不要用其他早期报告替代本实验的结论。赞分享网页爬虫后端【免费下载链接】SwiftSoupSwiftSoup: Pure Swift HTML Parser, with best of DOM, CSS, and jquery (Supports Linux, iOS, Mac, tvOS, watchOS)项目地址https://gitcode.com/gh_mirrors/sw/SwiftSoup点击查看免费下载相关推荐AltStore终极指南iOS侧载应用商店技术深度解析与实践AltStore终极指南iOS侧载应用商店技术深度解析与实践 AltStore是一款专为非越狱iOS设备设计的第三方应用商店通过巧妙的技术手段实现应用侧载功移动开发SwiftSoup 实体解码优化复用多点实体字典的下标查找与基准验证方法SwiftSoup 实体解码优化复用多点实体字典的下标查找与基准验证方法 本篇围绕 Benchmarks/entity decoding 20260909.m网页爬虫后端Portall用户指南轻松实现端口冲突解决与跨IP迁移Portall用户指南轻松实现端口冲突解决与跨IP迁移 Portall是一款功能强大的端口管理系统专为开发者和系统管理员设计帮助他们轻松解决端口冲突问题并上一篇终极指南5分钟掌握FanControl风扇控制软件打造完美静音电脑下一篇Bifrost一站式三星固件下载与管理解决方案完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

双机并联逆变器自适应虚拟阻抗下垂控制:原理、参数与Simulink仿真

双机并联逆变器自适应虚拟阻抗下垂控制:原理、参数与Simulink仿真

双机并联逆变器这套东西,最近两年在微电网和储能项目里出现频率很高。不少刚接触的朋友照网上的下垂控制模型搭了一遍,两台逆变器一带负载就发现功率分得歪歪扭扭,甚至一台满载一台轻载,查来查去也不知道问题出在哪。这个问题大概…

2026/10/13 8:33:45 阅读更多 →
APQP系统如何解决汽车制造行业的质量管理痛点

APQP系统如何解决汽车制造行业的质量管理痛点

1. 项目背景与行业痛点解析在汽车及高端制造行业,产品质量先期策划(APQP)是产品研发过程中不可或缺的核心方法论。这套由AIAG提出的标准化流程,涵盖了从项目立项到批量生产的完整产品生命周期管理。然而在实际操作中,传…

2026/10/13 8:33:45 阅读更多 →
蓝鲸配置平台(bk-cmdb)批量更新被引用模型实例接口实战:batch_update_quoted_inst 全解析

蓝鲸配置平台(bk-cmdb)批量更新被引用模型实例接口实战:batch_update_quoted_inst 全解析

后端企业应用运维 【免费下载链接】bk-cmdb 蓝鲸智云配置平台(BlueKing CMDB) 项目地址: https://gitcode.com/gh_mirrors/bk/bk-cmdb 点击查看 免费下载 导读 在蓝鲸智云配置平台(BlueKing CMDB)中,"模型引用(…

2026/10/13 8:33:45 阅读更多 →

最新新闻

Python大数据分析实验通关指南:从数据清洗到可视化全流程

Python大数据分析实验通关指南:从数据清洗到可视化全流程

1. 从lab7这个编号说起:为什么Python课设总在第七周卡住 如果你正在翻这门课的实验安排,看到lab7这个编号,大概率已经过了前六周的语法基础、循环判断、函数封装,开始进入真正要“处理数据”的阶段了。这门课的名字叫《Python程序…

2026/10/13 9:22:51 阅读更多 →
RAG系统实战:从知识库构建到检索生成的全链路设计与调优

RAG系统实战:从知识库构建到检索生成的全链路设计与调优

1. RAG系统到底在解决什么问题第一次接触RAG这个概念是在一个内部知识库项目里。当时团队想把一堆产品文档、会议纪要、客服记录做成一个能问答的系统,第一反应是直接丢给大模型。结果很快就撞墙了:模型对内部信息一无所知,问它某个产品的具体…

2026/10/13 9:22:51 阅读更多 →
AI写的PowerShell脚本一跑就崩?根因分析与实用提示词模板

AI写的PowerShell脚本一跑就崩?根因分析与实用提示词模板

前几天帮朋友排查一个调度任务,卡在一个PowerShell脚本上,AI一口气生成了四十多行“看起来很完整”的代码,结果跑起来第一行就报“术语无法识别”,后面全部白给。这不是我第一次见到AI写的PowerShell翻车了。它给出的命令确实存在…

2026/10/13 9:22:51 阅读更多 →
基于OpenCV的单目与双目相机测距:标定、视差与精度实践

基于OpenCV的单目与双目相机测距:标定、视差与精度实践

简介:一套基于Python和OpenCV的普通相机图像测距系统资料包,面向计算机视觉与立体成像方向的开发者和学习者,解决通过普通相机拍摄图像实现精确距离测量的问题。系统涵盖单目相机标定校正、双目相机空间位置关系标定、左右视图视差计算与深度…

2026/10/13 9:22:51 阅读更多 →
dplyr 值映射重编码:深入解析 `recode_values()` 与 `replace_values()` 的语义、类型安全与防御性编程

dplyr 值映射重编码:深入解析 `recode_values()` 与 `replace_values()` 的语义、类型安全与防御性编程

数据分析 【免费下载链接】dplyr dplyr: A grammar of data manipulation 项目地址: https://gitcode.com/gh_mirrors/dp/dplyr 点击查看 免费下载 recode_values() 与 replace_values() 是 dplyr 1.2.x 引入的"按值匹配"重编码函数族:前者用…

2026/10/13 9:22:51 阅读更多 →
互联网大厂职场生存指南:高薪背后的健康与职业危机

互联网大厂职场生存指南:高薪背后的健康与职业危机

1. 职场生存现状:光鲜背后的残酷现实那天晚上十点半,我正收拾东西准备离开办公室,突然听到隔壁工位传来一阵骚动。老张,那个连续加班三个月的技术总监,突然倒在了键盘上。救护车来得很快,但已经来不及了。一…

2026/10/13 9:21:48 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →