每周见闻(50):AI 可能画不出狸花猫
约 1912 字大约 6 分钟
2026-01-11
每周见闻:2026-01-04 - 2026-01-11
AI 可能画不出狸花猫
我的新头像是怀中抱着的是一只狸花猫,但是我的“猫猫专家”朋友看了后,吐槽这更像是美短。然而无论我怎么给 AI 喂参考图和提示词,它都画不出狸花猫。
这可能涉及到一个冷知识。中国狸花猫曾于 2014 年被美国爱猫协会收录,但由于美国没有人养这种猫(也就炒不出价钱)。因此在 2018 年被除名(中国的爱猫协会还有收录)。
考虑到大模型又都基于国外的数据做训练,我推测很有可能外网上没有或者很少有狸花猫的图片。即便有,也可能和虎斑猫混淆在一起。当我试着喂给 AI 一个包含狸花猫的图片时,它会回答“这只虎斑猫的颜色...”。
当然这只是我个人的推测,个人知识储备有限,所以不保证正确。觉得有趣的朋友可以去即梦 AI 上试试。

工具
标签:Tools,Coding
hl 是一个基于 Rust 编写的高性能日志查看和成粗粒工具,能将 JSON 和 logfmt 格式的日志转换为人类可读的输出。对大型日志文件支持较好,且开销极小。

2、Modern JavaScript Event Calendar[^3]
标签:Tools,Coding,JavaScript
Schedule-X 是一个 JavaScript 事件日历,和 Teams 的日历很像,可以定制视图、对事件拖放功能、深色模式、国际化和响应式设计等功能。还有一个付费版,仅需要通过配置就可以使用。

AI
1、AI 提示词 - WayToAGI[^2]
标签:AI,提示词,Prompt
一个搜集了很多 AI 提示词的网站,包含了很多方面的提示词,比如写作助手、代码助手等。尽管现在 AI 很强大,在很少的提示词也能给出不错的回答。但要想发挥出 AI 全部的能力,还是需要优秀的提示词打底。
还有一个 DeepSeek 官方的提示词示例,略微有些简陋。 https://api-docs.deepseek.com/zh-cn/prompt-library

Coding
1、Streaming JSON in just 200 lines of JavaScript[^4]
标签:JavaScript
作者用了不到 200 行的 JS 代码,编写了流式 JSON 输出的库。包含了服务端的生成逻辑和客户端的解析逻辑。在好几个地方都有见过,是最近比较火的一篇文章了。
这篇文章介绍了其中的原理。关于 JSON 数据的处理,会先将需要通过异步获取的数据用占位符代替。先以部分数据 + 占位符的方式返回给客户端。占位符部分的数据会在异步处理结束后再返回。从而可以让客户端优先显示部分数据,提高用户体验。
其中关键在于数据的返回以及 JSON 数据的封装和解析。
数据的返回主要在服务端部分在 response 头部设置 Transfer-Encoding: chunked 让客户端保连接活跃,直到收到 res.end 事件。通过设置 Content-Type: application/x-ndjson; charset=utf-8 可以在单个响应中发送多个 JSON 对象,并以换行符分隔。
JSON 数据的封装和解析通过递归的方式,当遇到 Promise 时就替换为占位符,先发送给客户端。同样地,在客户端方面也做类似的解析操作。
项目是开源的,服务端和客户端两部分代码加起来也确实 200 行不到。作者也上架了 NPM,安装对应的包就可以使用。
// Expected JSON response
{
"user": {
"id": 1,
"name": "John Doe",
// These data need get from DB.
"posts": [
{ "id": 101, "title": "First Post", "content": "..." },
{ "id": 102, "title": "Second Post", "content": "..." }
]
}
}
// Chunk 1 response
{
"user": {
"id": 1,
"name": "John Doe",
"posts": "_$1"
}
}
// Chunk 2 response when _$1 is resolved
{
"_$1": [
{ "id": 101, "title": "First Post", "content": "..." },
{ "id": 102, "title": "Second Post", "content": "..." }
]
}标签:JavaScript,Node.js
作者通过研究和对比,从内存分配的角度上解释了对象数组(AoS)与数组对象(SoA)在性能上的差距。
- 对象数组(AoS)是指如下数组:
[ {x, y, z}, ...]- 数组对象(SoA)是指下面这样的对象:
obj = {
x: [1,2,3,...],
y: [1,2,3,...],
z: [1,2,3,...]
}其中关于性能差距的因素,除了 V8 引擎的优化外,主要在于以下两点:
- 属性访问开销 •
points[i].x涉及数组索引、对象属性查找和值返回,开销较大 •points.x[i]通过JIT优化,属性查找可提升到循环外,实现直接数组索引 - 对象分配与内存布局 • AoS模式产生大量堆分配,导致内存碎片、缓存局部性差和垃圾回收压力 • SoA模式使用TypedArray,仅少量分配,内存连续性得到保证
3、Automatically load .env files in Node.js scripts[^7]
标签:JavaScript,Node.js
作者介绍了 Node.js 中提供用来读取 .env 文件的新方法 loadEnvFile 。这个方法和 dotenv 类似,在 Node.js 24 版本开始支持。需要注意的是,当 .env 文件不存在时,这个方法会抛错,需要注意一下错误处理。
import { loadEnvFile } from 'node:process';
// load .env file with default path ('./.env')
loadEnvFile();
// load .env file with a custom path
loadEnvFile('../../.env');4、Benchmarking Express 4 vs Express 5[^8]
标签:JavaScript,Node.js
关于 Express 4 和 Express 5 在不同 Node 版本下的性能比较。作者测试了在多个中间键的情况下,常用的 HTTP 方法(PING、GET、POST)。最终的结论是 Express 5 确实要比 Express 4 慢一些,但并不明显。
在我的工作经历中,确实没见过 50 个中间件的情况,所以实际上性能未必会差太多。

其他
1、关于 J 人和 P 人的那点认知偏差[^6]
标签:Life
作者对于 P 人的一个正名,挺有意思的。
我想为 P 人正个名。在这个崇尚效率、恨不得把每一分钟都填进 Excel 表格的世界里,能拥有灵活变通的属性,不去追求那种死板的固化,其实是一种很难得的松弛。
我猜作者可能是个 P 人。我自己是个 J 人,虽然确实喜欢做计划。但也绝不是事事都做计划,也喜欢偶尔的随性。就像作者说的:
哪有绝对的 100% 呢?一个 J 属性极强的人,可能也只是 51% 的 J 加上 49% 的 P 罢了。

往期周刊:
参考文章:
- [1] pamburus/hl: A fast and powerful log viewer and processor that converts JSON logs or logfmt logs into a clear human-readable format.: https://github.com/pamburus/hl
- [2] AI 提示词 - WayToAGI: https://www.waytoagi.com/zh/prompts
- [3] Modern JavaScript Event Calendar: https://schedule-x.dev/
- [4] Streaming JSON in just 200 lines of JavaScript: https://krasimirtsonev.com/blog/article/streaming-json-in-just-200-lines-of-javascript
- [5] Why Object of Arrays (SoA pattern) beat interleaved arrays: a JavaScript performance rabbit hole | Royal Bhati's Blog: https://www.royalbhati.com/posts/js-array-vs-typedarray
- [6] 关于 J 人和 P 人的那点认知偏差: https://blog.solazy.me/20260107/
- [7] Automatically load .env files in Node.js scripts: https://www.stefanjudis.com/today-i-learned/load-env-files-in-node-js-scripts/
- [8] Benchmarking Express 4 vs Express 5: https://www.repoflow.io/blog/express-4-vs-express-5-benchmark-node-18-24
