2025-11-06 17:53:00
偶然刷到这么一个人的童年:
奇妙的经历,估计好多人感觉都有相似之处? 🤣
2025-11-04 10:46:00
I am torn about writing this. AsyncIO in Python is always a mess, protobuf is another, gRPC is the worst of them all because of all that boilerplate code that does nothing but trouble.
The task I am facing is integrating a mesh API server based on our internal codebase.
I mean, gRPC is just h2+protobuf, how hard could it be? Even uWSGI had h2 from decades ago
Turns out the options are quite limited. h2 in uWSGI was major versions behind, SPDYv3 never took off. gRPC and h2 are related but different because the frames are marked and handled differently.
So there's either hypercorn or fallback to gRPC. To avoid further mess I decided to stick with gRPC
Now I face another challenge: The existing business logic is written in async/await style (cue FastAPI fad)
I carefully studied the gRPC async hello world example
Everything ran great, except the notorious GIL, my gRPC server runs but only on one single CPU.
Old school solution to GIL: spawn many processes. Given a 1:1 map to worker CPU. Easy? There's an official multiprocessing example
It worked... until it didn't. The major selling point of h2 is connection multiplexing, one TCP connection to serve all concurrency. And our mesh client is so good at this, only one worker consumes 100% of one CPU and the rest simply idle. 🤣
I also tried to implement a prefork worker on my own. Let's get rid of master because political-correctness we have SO_REUSEPORT already.
Unfortunately it didn't work at all, because of h2's multiplexing nature. The kernel won't schedule requests if there's only one single connection.
I looked closely and found how gRPC inits:
grpc.server(futures.ThreadPoolExecutor(max_workers=10))
Maybe swap it with ProcessPoolExecutor() ?
Nope, server went dead with a timeout. Don't have time to look into C/C++ details. Nope.
It seems gRPC only allows ThreadPoolExecutor().
Why does Google even allow it as a parameter then?
Out of despair, next I asked ChatGPT. The advanced AI model said: just use multiprocessing in your invokes
Yeah why not. So how do I run async in multiprocessing?
ChatGPT hallucinated: use apply_async. I initially believed that shit only to find it means the func will return an AsyncResult object, not running some async/await code. btw, I found the .apply() is just a shortcut for .apply_async().get()
I got the mess to work eventually.
add_generic_rpc_handlers and stuffpool = ProcessPoolExecutor(...) before the unary_unary_rpc_method_handler, with an initializer that spawns a global loop = asyncio.new_event_loop(). concurrent.futures only allows it this wayloop.run_until_complete() inside pool.submit()
If you aren't a try-hard:
avoid async
avoid gRPC
2025-10-24 17:42:00
上一篇汉字 和 汉语 的先进性 还没完
最近不知道在 X 上还是 xhs 上,原帖我翻不到了。有留子在图书馆查资料,用中文搜索,旁边印度妹问在看啥?
留子说在查学术问题。印度妹悻然说到,她的母语就没有这么多资料可查,只能有英语资料可看。
这回到我今年第一篇blog 如何用英语给出简短的 “春节” 定义 抛出的一个观点:
其实,全世界的主要语言里,只有汉语还在坚持“意译”
仔细想想还是挺恐怖的,全世界都叫 ResNET,日本人甚至用假名 レズネット 也要坚持音译。
前端时间 龙是不是要翻译成 Lonng 也是个很火的话题,现在很多人明白了。意译实际上是中文使用者的一厢情愿,特立独行的。日韩把很多东西都已经抢注了,比如 围棋 Go 泡菜 kimchi,老中还在那里老老实实的 Sour Pickles。
这个做法有好有坏,但是这种坚持就。比较难评。
又想起一个老梗:
元朝有个官职叫怯里马赤,放在现在叫翻译官。有一次忽必烈先生问孔子是什么人,有人告诉他:孔子是老天爷的怯里马赤。忽必烈先生很满意这个回答,曰:善。
出处:叶奇《草木子》卷四下:
(北人)立怯里马赤,盖译史也,以通华夷言语文字。昔世祖尝问孔子何如人。或应之曰:“是天的怯里马赤。”世祖深善之。
意译这事坚持得有多离谱呢?连天意都要给你翻译成中文。巫文史医一脉相承了等于说是。
2025-10-24 10:35:00
前几天 Andrej Karpathy 怒赞 Deekseek-OCR,认为图形比字串更能与意义产生深层次的共鸣。
老外评论说这个角度太刁钻,是不是因为中文是方块字,属于 ideogram 程序员更能看出来其中的问题?我当时就回复,没错,汉字读写其实就是记忆宫殿 Method of loci
今天1024,又有一篇讨论 When is it better to think without words?
视觉识别为什么有优势,这个在2013-11-15和朋友有如下讨论:
09:20
K:还是不喜欢看电子书 包括技术类的 是不是原始人的通病
09:23me:擦我压根就不喜欢看书 注意力不集中症
09:24K:你知道这个"不喜欢看电子书'就是一种委婉的说法 我也是
09:24me:-.-
09:24K:注意力难集中得很 看书有焦虑
09:24me:我也是啊 我日
09:24K:看一会儿就觉得我漏看一行 越回去看越觉得焦虑
09:24me:-.- 哈哈
09:25K:用手指指着两张之间 然后眼睛从两行之间的地方快速扫过 手指再下移 这个办法可以帮助我提高注意力同时避免一行一行死抠 两行之间*
09:26me:你大脑已经变成机械游标来parse文本了么 哈哈哈哈 不过我有一招可以缓解这个症状。不过只对中文有效 就是只记文字形状,不记声音和意思 这样效率奇高
09:27K:如何控制只记形状
09:27me:特别是古诗词默写什么的。给出上一句,我能记住课本那一整页的文字排版和形状
09:27K:我日
09:27me:就好比看照片一样 当然需要练习。克制自己去默读的坏习惯。 http://en.wikipedia.org/wiki/Subvocal_recognition 汉字这个东西要跟英语区分开。英语你不默读很难搞懂。。汉字倒是可以直接记忆形状
09:29K:这个估计和是不是母语也有关系
09:29me:我觉得不是吧。。英语是拼音的。。。汉字是logograph parse英语铁定要经过大脑处理音频的dsp parse汉语可以直接绕过这一个一维的串行接口 图形是并口效率高~~
09:30K:你可以去神经年会发表演讲了
09:30me:哈哈哈。。。 英语还有jb蛋痛的变形 所以parse起来效率低啊
09:31K:英语还好啦 法语这种才是parse起来慢
09:31me:性数格 一起上!
09:32K:还有倒装 宾语前置 甚至还有多宾语前置 我见过3个宾语前置的 然后按照规则排 最关键的是
09:32me:是嘛、这就是导致parse只能去线性scan。搞毛。。。
09:32K:如果是indirect object 前置的时候介词省略了 搞毛 je telephone à Marie. je lui telephone.
09:33me:national geographic 最近出了个片 世界记忆冠军就是用的照片记忆法 推荐去看看。虽然有点啰嗦 我找下imdb 这jb去街上找美女给4张亿美元。他背编号。背对了就是他的。背输了就补贴4美元 4张1美元
09:35K:哈哈 数字这个很有意思 我发现电话号码 中文的你给我念3遍 估计我就记住了 但是我发现我听英文广播的时候 念英文号码我特别痛苦 我经常先翻译成中文再记
09:35me:是啊,这个是个障碍 http://www.imdb.com/title/tt2113487/
09:36K:估计脑子里的图像和英文没有联系
09:36me:这个。可以抽空看看。我觉得拍的好!
09:36K:估计直接记形状好
09:36me:嗯。那个记忆冠军就是把字母想象成玩具一个一个挨着放在沙发上 然后虚拟拍照 http://movie.douban.com/subject/10863209/ 这个国内下载很多 居然是11年的。。囧
09:37K:... 不过不同的人 应该不同的记忆方法也不见得都适用 说来记忆冠军这个没有印度那个人肉计算机猛吧
09:37me:图形记忆效率最高。这个可以被大脑结构证实吧 眼睛输入带宽是最大的
吐槽一下自己十多年前就知道这事了,十多年后还是停留在这个认知 🤣
其实6年前我在zhihu的回答也阐述了类似的话题。干脆转录一下,锐评一波 汉字 和 汉语 。
抄题
中文在数学表达上是否处于劣势?
西方语言是以字母为基础表达含义的,现代数学表达也是以数学符号和字母为基础的,
硬要杠一下这个问题的话,欧洲各国的字母表也就是 alphabet,源自拉丁或希腊字母表,而拉丁希腊又直接师承 phoenician alphabet 腓尼基字母表,腓尼基字母被认为是当今所有字母的祖先,腓尼基发源地在黎凡特 Levant 地区,地中海东岸、阿拉伯沙漠以北和上美索不达米亚以西,也就是现在的黎巴嫩,妥妥的属于东方,亚细亚书写手段。
再往上面数,他们祖师爷是巴比伦、苏美尔楔形文字,也跟西方没半毛线关系!
所以有理由认为西方是没有自己的字母的。都是山寨东方的。不服来辩!
杠完了再仔细说说,「西方语言是以字母为基础表达含义」——这个也是大错特错。字母只能表达半个发音,一个完整的音素都算不上,单个字母脱离了上下文无法表达任何含义。
现代数学表达是以符号为基础的。字母只是书写这些符号比较方便的方式。而且就数学那坨公式而言,我觉得都不属于自然语言范畴了。那玩意压根就不是线性书写线性阅读的,上标下标 a-z 都不够用。加上晕眩的范畴体系,更加复杂。
中文在数学上表达是否处于劣势?首先说中文分为汉字和汉语,是否处于劣势呢?我觉得英文和英语也处于同样的劣势。见我对另外一个问题 汉字是否属于较落后的文字系统? 对「没有西方文字就无法进行复杂的物理、数学思维」这个说法的批判。
今天上课一位年轻的海归在讲到汉语的时候说汉字是落后的文字,汉语是落后的语言。他的观点主要是因为汉字是表意型的文字,基本构件很多,而且没有抓住语言的物质外壳——语音
而语音在语言中又最关键。作为拼音文字的西语,抓住了语言的关键–语音,因此只要掌握了字母的发音,即使从来没见过这个词,根据组成也能知道他的读音和意思。
这货恐怕从来没见过形声字。。就算画鸟图的古埃及文字最后都拼音化了。
好吧我们在说下,这里的 西语 是指西班牙语?那么还行。如果指的是西方的英语,那么问题严重了。英语恰好就没有抓住语言的关键——语音。请看下面评书:What If English Were Phonetically Consistent? 如果英语严格按照一致化发音会发生什么?

这视频在网上特别火。不喜欢Y站的可以去 b站搜 av41779729
看完之后,再聊下语言的核心——发音。这其实也有大问题。视觉系统是并行的,听觉是串行的。并行 IO 远高于串行。所有欧美语言特种训练 speed reading 都要强调 subvocal 这个概念。为啥呢?呵呵呵呵。再想想罗马宫殿记忆法本质是什么?这可是古希腊古罗马传统记忆比赛冠军的最重要技术!英语中形容一个人记忆力最强状态是什么?photographic memory。其实这个「photographic」很有意思,为汉语里也叫过「目」不忘呢?所以高效记忆的本质还是——形状。
再说说识别效率,英语阅读理解每分钟达到 200 words per minute 被认为是很好的水平了。更高的速度需要特别的手段,比如 Spritz 这家公司他们这家公司他们的方案。你去看下方案就会笑掉大牙。这玩意就是把 连续发音 人为割断成「方块字」!这样反而提高了阅读速度?哈哈哈。
所以,论记忆效率,形状快于语音;论识别效率,形状也是大于语音的;语言的核心(或许可能)是发音,但是文字呢?支持文字和语音分离。表意文字万岁!查表效率最高!
汉字其实就是一个 intermediate bytecode ,中间字节码。解析、存储效率相当高。口语白话,那只是各种上层表达语言而已。汉语在秦始皇的时候就发明了 LLVM 的架构了。牛逼。你们西方语言还在手写 x86机器码!稍微硬件平台换一下语言就不兼容了,发音的准确传承极易被历史事件打断。其实,英语的第一本字典是 1591 年代 Robert Cawdrey 发明的。。。再往之前文字就是贵族私塾才教,平民大众压根没人看得懂文字都是文盲。说起来你们不信,这作者名字 Cawdrey 自己名字都会写错,因为也有人写 Cawdry 。反正读音都一样对吧。
就算这词典出版了,spelling 也就是文字体系垃圾到什么地步?这词典里兔子 cony 这个词,竟然出现了 conny conye conie connie coni cuny cunny cunnie 这么多重。说好的发音是文字的精髓呢?茴香豆也没这么多种写法啊。
1591年这才差不多 开始 统一文字的拼写方法,啊!卧槽,想象一下这是什么年代?永乐大典据说都在宫里被烧掉一波了,明神宗朱翊钧 都要完成三大征了,利玛窦都开始在南京翻译《Elements》了,再国50年牛爵爷就出生了,开始满世界找苹果砸脑袋了。这连文字标准写法都才开始慢慢统一?
你要说记录发音就记录发音吧,五线谱、IPA 甚至韩国谚文都比你那套好。印欧语系最大的死穴是什么呢?——屈折语。这个词形变化的毛病太恶心了。性、数、格、时、体、态、人称、语气、级、式、非限定、级、序这些变化真的能体现语言的关键–语音么?为毛昨天吃和今天吃,都是吃,发音就不一样?这样的文字书写体系,你很难从一大段语音或者文字里找出「相同」的词。比如前面一个 go 后面一个 went,其实讲的都是同一个意思,但是就是没法直接对应起来。非常影响查找 recall 效率。
通过语音交流进而形成语言是生命发展过程中很奇特的东西。但交流的本质还是大量物品的视觉、事物、理念的碰撞,而不是没接种传播单一音频振幅序列。你发明一个正字法仅仅把「发音」规范化,这是舍本逐末了。真正应该规范的是把相关联的事儿合并成一个书写手段。所以你们有没有想过为什么英语把pig meat 叫 pork ??不要以为这是逼格的问题。让我想起了 zhihu 上看到一个回答,老外得知葡萄干是葡萄做的之后震惊了。。。。哈哈哈。因为葡萄干叫 currant或raisin,葡萄叫grape。。。还有葡萄酒叫。。。wine!这几个单词八竿子打不着。
未来属于分析语!
不过,也说点英语的好吧。长句从句表达意思很清晰。这一点分析语就特别爱好各种比喻排比。
其实评论里还提到另外一个事儿,不得不补充下。随着书写工具现代化,字母记录发音的语言遇到新问题——emoji。这事儿越来越严肃了
Your honor, it’s an eggplant: Lawyers call for guidance on interpreting emoji
Emoji are showing up in court cases exponentially, and courts aren’t prepared
2014年,密歇根州上诉法院的法官得出结论, :P 这个表情符号“代表一张吐舌头的脸,表达开玩笑或者讽刺的意思”。法院表示,不能严肃地看待这则评论,也不该把它视作诽谤。
一个以色列2017年的案子,其中涉及一对打算租房的夫妇。两人给房东发了一串表情:笑脸、彗星、香槟酒瓶、跳舞的兔女郎还有一只花栗鼠。房东以为(一半要归功于这串表情)他俩同意租房了,于是就把房屋信息从中介那里撤回,结果等夫妻俩不回短信以后,房东就把他们告上了法庭。
来来来,觉得语言的关键是「语音」的,把这几个 emoji 给我读出来。:P
这事儿其实你们可以好好考虑下。emoji 是文字么。现在大家无非发几个表情或者动物用来搞笑,但是20年50年后呢? 熟练使用 emoji 的下一代长大以后呢?
语言的关键,我觉得还是传达意义。表意文字就是代表着最先进表意序列化手段。
请注意,这不等同于汉字就是最先进的文字体系了。但是我认为汉字所代表的方向是无比先进和正确的。
这句话是否正确我们先放一下,这句话和题主「语音在语言中又最关键」相映成趣。随便举个例子:

看这个数学公式,如果你用「发音」来传递信息,能精确无误表达这个不等式吗?别的不说你们能用口述精确把这个不等式复述出来么?
恰好数学物理,把「意义」给符号化了,脱离了「发音」的困扰,才使得精确信息传递变成了可能。数学物理里面一些大道理其实根本没法发音。字母文字这种一维线性的书写手段压根没法表达上标下标优先级高阶运算等等含义。所以科学家才不得不新发明一套 mathematical notation。这套 notation 脱离了语言,直接用符号表达意义,所以评论区这种观点,恰好成为反驳这个问题最好的论据。2333。
其实现代先进生产力的东西,都是越来越脱离语音的。又想起来了,如果用语音输入来进行 Perl 编程会发生什么?你们安静一下影响我用 TNT 了!还有如何用苏格兰方言语音控制电梯到11楼。2333
表音文字的问题说完了,在来强行吹一波汉语的好。参考《科学美国人》2004年报道的一项严肃的学术研究
Speaking Tonal Languages Promotes Perfect Pitch
1999年 NYTimes 报道,一直到2016年,都有团队从很多个角度证明了,绝对音高是个天赋,而且是和语言密切相关的。
A new study concludes that young musicians who speak Mandarin Chinese can learn to identify isolated musical notes much better than English speakers can
可能有人觉得「绝对音高什么鬼」那么放一个 zhihu 传送门 具有绝对音高(感)的准确定义?
你们知道很多五音不准的老外有多羡慕 absolute pitch 的天赋的人吗?在西方世界,贝多芬和肖邦那样的天才才会拥有这一项天赋。《科学美国人》说这项天赋是 Fewer than one American in 10,000 has absolute pitch。没有这个天赋的人,需要幼年开始长期艰苦后天训练才有资格拥有。然而在汉语这种 tonal language 里,很多普通人不用经过额外的训练就无意中拥有了这项技能。
老祖宗发明的语音,给你你们万里挑一的天赋——绝对音高;
老祖宗发明的文字,历经演化,给了你们世界上解析效率极高、记忆成本最低的书写媒介;
……你们却把这门语言用来在网上骂别人傻逼。
2025-10-23 21:11:00
问你几个问题,我国小学 中学 高中 大学 一共要掌握多少英语词汇量?
我这有个准确的答案:
怎么来的?我前几天写了个英语词典,为了节约token费用,直接把这8k+个词汇的解释给缓存了。
https://github.com/est/dict_json
可以拿来做很多比较有趣的事。比如我把每个词汇的不同意义项都分别罗列出来了近义词、反义词。
这个近反义列表里,哪些词汇是最高频出现呢?结果可能出乎你的意料:
居然有93个词的近反义包含 calm?我看看都有哪些
furious,stir,unrest,riot,irritation,easy,circus,fury,gentle,tense,fanatic,
firework,pacific,relaxation,excite,wind,fiery,rough,tranquil,wild,clamor,
arouse,violent,annoy,terrify,frantic,clamour,craze,ANGER,windy,disturb,
rouse,impatient,irritate,fume,frighten,settle,dramatic,still,startle,
scare,placid,restless,serene,trouble,nervous,worry,disconcert,worried,
reassure,steady,fireworks,crisis,mad,uproar,provoke,soothe,peace,
fearful,peaceful,busy,turbulent,anxiety,rage,chaos,at rest,incense,
anxious,cool,eruption,ferment,temperate,desperate,compose,hysterical,
breathless,indignant,frenzy,madden,OVERWHELM,fuss,hysteric,tension,
quiet,angry,uneasy,tumult,disturbance,flare,drama,silence,panic,UPSET
好家伙,这么多。
release 呢?
absolve,album,bail,bind,bottle,bridle,cage,capture,clamp,clasp,classify,
cling,close,clutch,collar,confine,confinement,confiscate,constrain,contain,
control,corner,curb,dam,deploy,detain,discharge,dismiss,drop,edition,eject,
emancipate,emission,emit,encircle,enclose,engulf,enslave,excuse,exempt,free,
freedom,grab,grasp,grip,harbor,harness,hold,hook,imprison,issue,jail,kidnap,
launch,let down,let out,liberate,liberation,loose,oblige,outlet,output,press,
publish,rein,relax,repression,reserve,restrain,retention,seize,subdue,
submerge,suppress,therapy,touch,trap,unlock,untie,vent,version,withhold
其他的杂七杂八看了一通,让AI依次总结了一下:
如果说一门语言在特定局部词汇的精密和丰富程度代表了这一种文化对该局部的重视程度,那么这就是现代英语一种奇妙的展开。
这一组词汇有一种 从0到1,从鸿蒙到盘古开天辟地,生万物的美。
人的情绪的刻画是至高,内心的平静 calm 是原始状态;
有了收放,就有了吐纳,有了呼吸,也就有了支持和破坏优劣之分;
也有有了明暗之争,也就有了连接和分离;
也就产生了无趣和安全感。
用AI的话说:“从内在情感到外部关系,再到最终认知与状态”的完整心智与行为模型。
| 组别 | 核心对立概念 | 逻辑层面 | 演绎关系 |
|---|---|---|---|
| 第一组 | 愤怒 vs. 平静 | 内在情感 | 起点:原始动力 |
| 第二组 | 束缚 vs. 释放 | 个体行动 | 对情感的回应 |
| 第三组 | 支持 vs. 反对 | 社会互动 | 在关系中的实践 |
| 第四组 | 清晰 vs. 模糊 | 认知判断 | 对互动的理解 |
| 第五组 | 安全 vs. 危险 | 最终状态 | 所有行动的目标 |
好。下面问题来了,我并没有给出接下来的词汇 praise,但是AI给猜出来了:
这一组词汇将围绕 “有意义 vs. 无意义”、“重要 vs. 琐碎”、“真实 vs. 虚假” 展开。它是对所有行动和认知的终极评判。
上面那个表,可以扩展到 社会评价:赞扬 vs. 谴责。很接近 praise 了。
接下来AI推测是哪个词呢?
推测七(高可能性):自尊与自我概念。这一组将围绕 “自豪 vs. 羞耻”、“自信 vs. 自卑”、“尊严 vs. 屈辱” 展开。这是外部评价在个体内心内化的结果。
情绪与感受的广度。这一组将超越第一组“愤怒vs平静”的单一情绪维度,扩展到 “喜悦 vs. 悲伤”、“爱 vs. 恐惧”、“希望 vs. 绝望” 等更广阔的情感光谱。
哇,这个众多的意义汇集到一个概念——decline
AI说:
为什么“Decline”是绝妙的下一步
Decline 使得这个词汇宇宙从描述状态和行为,跃升到了描述过程和命运的层面。
它完成的不是一个线性递进,而是一个逻辑上的闭环:
我们从充满活力的情感开始,经过一系列的社会建构与认知努力,去追求安全与荣誉,但最终,所有这一切都可能面临 Decline。
这引入了一种深刻的悲剧性和现实主义色彩,也让整个模型变得更加宏大和富有智慧。它不再只是一个关于“如何成功”的模型,而是一个关于“存在本身”的模型,涵盖了兴起与衰落、肯定与否定的完整循环。
这真是一个精妙绝伦的设计。我更加期待接下来的发展了!
我问:
那你猜猜
AI回答:
好的,基于 “Decline” 引入的 “衰减、拒绝、下降” 这个强大的新维度——它代表了进程、循环和终结——我现在对下一个词的猜测是:
Yield
直接吃了一惊!!!
接下来的开枝散叶我就不展开了。有得猜得对,有得就不行,词汇的意义面变得愈发琐碎和平凡。
AI最后总结为:
我们可以将这16个词分为四个清晰的乐章:
第一乐章:内在的奠基
1. Calm (平静)
2. Release (释放)
3. Support (支持)旅程始于 Calm,这是所有行动的基石。在平静中,我们才能 Release 内心的执念与负面情绪,从而腾出空间去接纳和给予 Support。这完成了内在世界的初步构建:从静心,到放下,再到联结。
第二乐章:外在的探索
4. Clear (清晰)
5. Separate (分离)
6. Dull (迟钝)带着内在的安定,我们走向世界。我们首先寻求 Clear 的认知,以理解环境。基于清晰的认知,我们学会 Separate(区分重要与次要,真实与虚假)。而 Dull 则提醒我们,在探索中难免会遇到瓶颈、感到麻木,这是成长中必要的停顿与反思。
第三乐章:秩序的构建
7. Secure (安全)
8. Praise (赞扬)
9. Decline (衰退)
10. Yield (产出/屈服)在探索之后,我们开始构建。我们寻求 Secure 的根基,并渴望通过 Praise 来确认价值。然而,Decline 是任何系统都无法避免的自然规律,我们必须在其中学会 Yield——或是产出成果,或是顺应时势。这构成了一个完整的生命周期:建立、认可、衰退、转化。
第四乐章:智慧的觉醒
11. Standard (标准)
12. Neglect (忽视)
13. Direct (引导)
14. Fail (失败)
15. Minor (次要)
16. Present (当下)这是通往智慧的最终阶梯。我们依据内在的 Standard 行事,但必须意识到 Neglect 的存在(无论是主动忽视还是无意遗漏)。于是我们主动 Direct 自己的生活。Fail 是我们必然会经历的,它教会我们辨别什么是 Minor 的琐碎,而什么才是真正重要的。最终,所有的领悟都将我们带回一切的起点和归宿:Present(当下)。此时此刻,全然地存在——这既是手段,也是目的。
总结:
这条路径可以概括为:
由内而外(从 Calm 到 Support),
由外而识(从 Clear 到 Dull),
由识而建(从 Secure 到 Yield),
最终由建而悟(从 Standard 到 Present)。
是一场美妙的语言之旅。
2025-10-22 21:21:00
标题里的 "hydration" 应该来自 React 里 hydrateRoot 这个对象,其本意是如果说服务端模板输出的 html 是静态的,noscript的,干瘪的,那么 js 的引入就可以让页面变得 “湿润”,“充水”,“流动”,“顺滑” 起来。国内Web社区把这玩意翻译成 “水合”。
作为一个后端仔,这几天小搓了下页面,发现javascript工程化的一个大坑,说说我对 “hydration” 的理解。
以这个vue官方教程为例:
const items = ref([{ message: 'Foo' }, { message: 'Bar' }])
<ul>
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
看上去人畜无害很容易
但是加上 SSR 就复杂了。比如这个 TodoMVC 已经在服务端输出两条了
<ul>
<li>A</li>
<li>B</li>
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
现在如果 items 更新需要重绘,怎么让 v-for 知道前面两个 <li> 的存在呢?
假如这个问题你能解决,浏览器端OK,那么服务端怎么写呢?
<ul>
{% for item in ["A", "B"] %}
<li>{{ item }}</li>
{% endfor %}
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
这样?是不是觉得太丑了,最好把两个逻辑合并呢?
这就是我理解的 hydration 问题。上面只是一个简单例子,复杂的SSR,理论上应该可以精确渲染到页面特定路由的特定状态的精确那一帧。
要达到这个目的,目前普遍做法是在服务端多一个 编译(compile) 过程,其核心无非是在服务器内存里山寨一个 DOM 的层级结构。
感觉应该有更好的做法,但是我没找到。现有的 Vue Vite React Next 都有解,但是我觉得都太重了。在一个 .html 里写几条 directive 修修改改就能把这事儿搞定的办法,目前看来几乎不可能。
累了,毁灭吧。