值得关注的文本排版引擎
📅 2026/7/1 1:32:53
👁️ 次浏览
Pretext 是一个用 TypeScript 实现的用于多行文本精确测量和布局的引擎。不碰 DOM不触发 reflow却能完美匹配浏览器字体引擎在各种语言、emoji、混合文字方向下的真实表现。它刚刚发布发展势头很猛。我觉得这是过去十年里最值得关注的文本引擎之一。它不是小打小闹的优化而是把文本这块一直卡着大家脖子的核心问题彻底解决掉了。先说清楚它解决什么痛点。网页上但凡涉及动态文本比如聊天消息、文章卡片、虚拟列表、自动换行输入框、响应式排版你都得问浏览器“这个文本在多宽容器里到底占多少高”。过去唯一办法是扔进 DOM读 getBoundingClientRect 或者 offsetHeight然后立刻写回样式。这操作直接触发布局重排浏览器要重新计算整个页面流式布局尤其在长列表、频繁 resize、AI 生成内容实时流式输出的时候性能直接雪崩。很多框架只好批量测量、缓存估算值、妥协精度结果就是滚动卡顿、布局偏移、虚拟化高度猜不准、画布渲染对不上 CSS 样式。Pretext 把这一切全绕过去一次 prepare 预计算后面 layout 全是纯算术毫秒级出结果还跨浏览器一致。它体积极小支持所有主流语言包括 CJK、阿拉伯文、希伯来文、emoji、混合 bidi还特别处理了 Safari、Chrome、Firefox 各自的换行 quirks。作者 Cheng Lou 之前在 React、ReasonML、ReScript 这些项目里摸爬滚打又在 Midjourney 干过视觉生成对文本排版的需求理解得透彻。他说这是“爬过地狱”才搞出来的基础件我完全相信。因为文本测量看似简单实际是浏览器字体引擎 Unicode 规范 各家实现差异的超级复杂组合普通人根本遭不住。核心 API 拆解与使用库暴露两套 API一套给“只需要高度”的场景另一套给“手动控制每一行”的高级玩法。先看简单那套绝大多数业务场景够用import { prepare, layout } from chenglou/pretext const prepared prepare(AGI 春天到了. بدأت الرحلة , 16px Inter) const { height, lineCount } layout(prepared, 300, 24) // 宽度 300px行高 24pxprepare 做一次性重活规范化空白、按语义分割文本、应用换行规则、用 Canvas 测量每段宽度、缓存结果返回一个不透明句柄。layout 就纯计算输入最大宽度和行高立刻吐高度和行数。注意 font 参数必须和 CSS 里 font 声明完全一致大小、字重、家族行高也要对齐不然精度会飘。如果你的文本是 textarea 那种要保留空格、tab、硬换行可见就加选项const prepared prepare(textareaValue, 16px Inter, { whiteSpace: pre-wrap })性能数据官方基准prepare 对 500 条混合文本批次大概 19mslayout 同一批次只要 0.09ms。实际项目里你在组件 mount 时 prepare 一次resize 或宽度变化时只跑 layout帧率直接起飞。以前用 DOM 测量 requestAnimationFrame 节流1000 条动态高度消息列表滚动还偶尔掉帧。现在换 Pretext虚拟化逻辑简化成线性遍历高度缓存120fps 稳得一批。高级 API 更狠面向 Canvas、SVG、WebGL、甚至未来服务端渲染import { prepareWithSegments, layoutWithLines, walkLineRanges, layoutNextLine } from chenglou/pretext const prepared prepareWithSegments(text, 18px Helvetica Neue) const { lines } layoutWithLines(prepared, 320, 26) // 固定宽度返回所有行信息 for (const line of lines) { ctx.fillText(line.text, 0, y) y 26 }prepareWithSegments 返回带段信息的结构。layoutWithLines 直接给你每行完整文本和宽度。walkLineRanges 更底层只给宽度和光标位置不拼接字符串适合二分搜索最优容器宽度比如聊天气泡 shrinkwrap。layoutNextLine 是迭代器能处理变宽场景比如文字绕图、杂志多栏、浮动元素let cursor { segmentIndex: 0, graphemeIndex: 0 } let y 0 while (true) { const width (y imageBottom) ? columnWidth - imageWidth : columnWidth const line layoutNextLine(prepared, cursor, width) if (!line) break // 渲染 line.text cursor line.end y lineHeight
告警风暴的终结者:智能异常检测算法对比与 AIOps 落地实践
一、静态阈值的困局:为什么 90% 的告警都是噪音
传统运维监控依赖静态阈值触发告警——CPU 利用率超过 80% 就告警、请求延迟超过 500ms 就告警。这种机制在稳定负载下有效,但在云原…
📅 2026/7/1 1:32:53
最近简单更新了一下自己的个人学术主页:
https://yuzhang-zhong.github.io/
我是 Yuzhang Zhong / 钟宇璋,目前是美国西北大学的 visiting predoctoral fellow,同时也是澳门大学计算机科学本科生。
主页里整理了一些我最近的研究兴趣、项目…
📅 2026/7/1 1:30:53
在信息安全的发展史中,机密性长期占据着防线设计的核心。从早期的军事通信到现代的数据防泄露,人们耗费了巨大精力来防止敏感信息泄露给未授权者。然而,在许多关键业务和高安全等级的系统中,另一个维度的威胁同样致命,…
📅 2026/7/1 1:30:53
香橙派Zero 3深度定制:基于Buildroot打造极致精简的Linux系统在嵌入式开发领域,现成的发行版镜像虽然方便,却往往包含大量冗余组件,难以满足对系统尺寸、启动速度或特定软件版本有严格要求的场景。香橙派Zero 3凭借其全志H618四核…
📅 2026/7/1 2:43:02
引言模型预测控制(MPC)已经成为现代控制工程中不可或缺的方法——从化工厂到自动驾驶,从无人机到机器人,MPC无处不在。但传统的MPC有一个“理想化”的假设:模型是精确的,系统是集中式的,计算是充…
📅 2026/7/1 2:43:02
K-D Tree 是一种适用于 维空间信息处理的数据结构,一般是维护 个点的信息,建出平衡二叉树;在 比较小的
建树:
一般使用交替建树,递归的分为以下三个步骤: 交替选择一个维度切割(即 依次切…
📅 2026/7/1 2:43:02
【银行合规 RAG 实战】一文搞懂 KM 知识库:内规外规、1-hop、Neo4j 侧车、RRF 融合检索 文章目录【银行合规 RAG 实战】一文搞懂 KM 知识库:内规外规、1-hop、Neo4j 侧车、RRF 融合检索前言:为什么你的合规知识库「能搜到,但说不清…
📅 2026/7/1 2:43:02
文章目录Fluent M3U8:跨平台 M3U8 视频下载器Fluent M3U8:跨平台 M3U8 视频下载器
一个基于 PySide6 的 M3U8 下载器,Star 数 1,500。 Fluent M3U8 是一个跨平台的 M3U8 视频下载工具,支持 Windows、Linux 和 macOS 系统。
这个…
📅 2026/7/1 2:43:02
压入结果的条件是path.size()>2,回溯过程结束的条件是移动到了边上startIndex>num.size()
在树中,非递减序列,要求压入的元素必须比之前压入的大:if(path.empty()||nums[i]>path.back())问题如果给出的数组包含重复元素&…
📅 2026/7/1 2:41:02
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39
6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…
📅 2026/6/30 10:04:37
引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…
📅 2026/6/30 6:54:54
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/1 0:00:39
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/1 0:00:39
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/1 0:00:39