diff --git a/404.html b/404.html index 1207391..3e79b86 100644 --- a/404.html +++ b/404.html @@ -8,8 +8,8 @@ - - + + diff --git a/about/growth/inner-experience.html b/about/growth/inner-experience.html index ae68ce1..a542abf 100644 --- a/about/growth/inner-experience.html +++ b/about/growth/inner-experience.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/about/growth/outer-experience.html b/about/growth/outer-experience.html index af0e83c..f254ee6 100644 --- a/about/growth/outer-experience.html +++ b/about/growth/outer-experience.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/about/growth/weight-loss.html b/about/growth/weight-loss.html index ab0ce96..8bf81fd 100644 --- a/about/growth/weight-loss.html +++ b/about/growth/weight-loss.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/about/me.html b/about/me.html index 9fd321f..e02b440 100644 --- a/about/me.html +++ b/about/me.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai-coding/ai-change-work-workflow.html b/ai-coding/ai-change-work-workflow.html index 9032412..56930b8 100644 --- a/ai-coding/ai-change-work-workflow.html +++ b/ai-coding/ai-change-work-workflow.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/ai-coding/ai-engineer-capability.html b/ai-coding/ai-engineer-capability.html index cad7194..06ed60f 100644 --- a/ai-coding/ai-engineer-capability.html +++ b/ai-coding/ai-engineer-capability.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/ai-coding/ai-native.html b/ai-coding/ai-native.html index d153614..037c000 100644 --- a/ai-coding/ai-native.html +++ b/ai-coding/ai-native.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/ai-coding/claude-code-deep-dive.html b/ai-coding/claude-code-deep-dive.html index b904844..de734b8 100644 --- a/ai-coding/claude-code-deep-dive.html +++ b/ai-coding/claude-code-deep-dive.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai-coding/overview.html b/ai-coding/overview.html index f113031..fc4737a 100644 --- a/ai-coding/overview.html +++ b/ai-coding/overview.html @@ -8,13 +8,13 @@ - - - - - - - + + + + + + + diff --git a/ai-coding/resources.html b/ai-coding/resources.html index 29941b8..2851f30 100644 --- a/ai-coding/resources.html +++ b/ai-coding/resources.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/agent/claude-agent-sdk-basic-build.html b/ai/agent/claude-agent-sdk-basic-build.html index c750701..8f62cd3 100644 --- a/ai/agent/claude-agent-sdk-basic-build.html +++ b/ai/agent/claude-agent-sdk-basic-build.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/ai/agent/composition-ai-components.html b/ai/agent/composition-ai-components.html index 920c99c..b4f92e9 100644 --- a/ai/agent/composition-ai-components.html +++ b/ai/agent/composition-ai-components.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/agent/deepresearch-agent.html b/ai/agent/deepresearch-agent.html index 1bb941c..e9195c6 100644 --- a/ai/agent/deepresearch-agent.html +++ b/ai/agent/deepresearch-agent.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/ai/agent/math-bot.html b/ai/agent/math-bot.html index 6f01be4..79b4d8b 100644 --- a/ai/agent/math-bot.html +++ b/ai/agent/math-bot.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/agent/overview.html b/ai/agent/overview.html index 9f8e371..e46e9a7 100644 --- a/ai/agent/overview.html +++ b/ai/agent/overview.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/agent/planning-module.html b/ai/agent/planning-module.html index d8638b2..d92d4a4 100644 --- a/ai/agent/planning-module.html +++ b/ai/agent/planning-module.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/agent/poetry-bot.html b/ai/agent/poetry-bot.html index de0d3a7..f7aeaca 100644 --- a/ai/agent/poetry-bot.html +++ b/ai/agent/poetry-bot.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/agent/skills-practice-summary.html b/ai/agent/skills-practice-summary.html index 60d33d2..d172562 100644 --- a/ai/agent/skills-practice-summary.html +++ b/ai/agent/skills-practice-summary.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/ai/full-stack-builder.html b/ai/full-stack-builder.html index bf1f9af..1f404d5 100644 --- a/ai/full-stack-builder.html +++ b/ai/full-stack-builder.html @@ -8,12 +8,12 @@ - - - - - - + + + + + + diff --git a/ai/llm-api-resources.html b/ai/llm-api-resources.html index adc13eb..85ba194 100644 --- a/ai/llm-api-resources.html +++ b/ai/llm-api-resources.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/ai/overview.html b/ai/overview.html index 95a53a5..6855a17 100644 --- a/ai/overview.html +++ b/ai/overview.html @@ -8,13 +8,13 @@ - - - - - - - + + + + + + + diff --git a/ai/tools-assistant.html b/ai/tools-assistant.html index 075b1d2..406ef21 100644 --- a/ai/tools-assistant.html +++ b/ai/tools-assistant.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/assets/about_growth_inner-experience.md.Bv6irQCt.js b/assets/about_growth_inner-experience.md.BISUXRTm.js similarity index 99% rename from assets/about_growth_inner-experience.md.Bv6irQCt.js rename to assets/about_growth_inner-experience.md.BISUXRTm.js index 5ffbfd8..2a530f7 100644 --- a/assets/about_growth_inner-experience.md.Bv6irQCt.js +++ b/assets/about_growth_inner-experience.md.BISUXRTm.js @@ -1 +1 @@ -import{_ as r,c as t,o as i,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l('

向内思变:当疫情给世界按下暂停键,去重构生活秩序

摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。

目标到践行思维流程示意图

写在前面

自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:

疫情期间,笔者基本没有怎么出过远门,甚至阴差阳错地给自己安排了更多的独处时间。周末也倒逼自己按照比较严格的作息推动业余实践,尝试向内探索。因此,所谓 “向内思变”,用时髦的说法也叫 “闭关”,接下来就阐述下要漫谈的话题。

漫谈话题

健康,拥有的时候经常不会被珍惜,失去的时候却追悔莫及,但重新找回后却很容易再次不被珍惜(不难理解,这就是人性)

读书与学习,一个被广为熟知的话题,但笔者在这方面是有一定自信的,因为有过比较正向的实践,多少有点底气。自大学时代开始,笔者在这方面有一定的嗜好,且系统践行了此嗜好,还通过啃一些跨专业的书来学习,直至可以抛弃原来的专业,在毕业时也留下了两篇关于这方面的总结文章。当然,任何时候、任何人的经历都代表不了实力。本次漫谈笔者会结合自己的经验、思考与总结来梳理,尽最大努力让这个话题起到抛砖引玉的作用,有兴趣的小伙伴在以后的日子里可共同进步。

时间管理,这个话题虽被大家熟知,却很少有人能自信地说 “自己能很好地管理时间”,笔者肯定也不例外。但本次漫谈会梳理下笔者自己在实操方面的尝试,思考与总结。

混合工作制,这个话题在疫情到来后被大家熟知,所以笔者这里也未必能分享出多么稀奇古怪的见解,但同样会结合实操给出自己的思考与总结。

漫谈健康

健康危机

鉴于笔者在大学阶段自由学习与探索的勇气可嘉,因此在经历两次 “校园互联网小作坊” 的锻炼后,毕业时选择的工作自然而然地成为了大学兴趣的延续。当然,也延续了很多大学阶段养成的对健康不利的习惯,作息无规律,仗着无知挥霍身体;无健康意识,不怎么锻炼身体,比如:

人无作息规律地熬一天不累,熬十天就累了,熬几年也就要坏事了。就这样经过长年累月地洗礼,健康也在疫情到来的第一年亮起了小红灯。当然,经过医生、家人等多方的协力帮助,以及自己的坚忍硬扛,最终康复了。期间虽然经历了比疫情放开后大部人转阳痛苦且印象深刻多倍的事情,但不是本文的重点,这里只留下笔者事后深刻反思的几个心得:

健康知识学习

既然已经知晓自身问题且暂时止损了,自然要继续寻找更长远的解决方法。但方法不会凭空从天上掉下来的,它需要自己去寻找。笔者寻找方法的主要途径是:向专业或有经验的人咨询,向书本上的健康标准和知识找

1、向有专业或有经验的人咨询

由于笔者仍然保持着大学时代学会的“免费”思维,所以在接近康复出院的时候就开始跟医生、医护、病友等以聊天的方式咨询。众所周知,医生是经常传授病人一些健康知识的专业人员,医护是长年累月协助病人康复训练的专业人员,病友是那些与自身有着相同失误的人,向这几波人咨询更能习得比较正向的建议或小技巧。这一阶段积累了一些碎片化的健康意识,康复训练小技巧,以及戒掉不良生活习惯的注意点,也为后面的防治宜早、起居有常、适量运动等原则做了铺垫

2、学习健康标准和知识

健康其实是有标准、有依据的:

*《皇帝内经》中的标准:形与神俱,而终其天年,度百岁乃去。 *现代的健康标准:生理健康、心理健康、社会及自然环境适应良好,道德良好,并达到人之天年

如上所述,健康标准简单且易懂,但它不足以指导大部人去实践(除非是不世出的罕见人才,看到标准后就能推导出符合实际的解法)。所以笔者结合自身经历和健康知识,进一步采用 “分解” 和渐进明细的方式,学着梳理出一些健康原则

最后,为保证自己在理论意识上更注重身体健康,笔者还拜读了毛教员在青年时期写下的《体育之研究》。读过教员鞭辟入里的文章后,也更从理论上明白了:“体者,载知识之车而寓道德之舍也。体育一道,配德育与智育,而德智皆寄于体。”

3、健康实践

结合沉淀下来的原则,笔者花费了 1.5 年的时间,进行了两个方面的实践:

随着时间的流逝,笔者现在也能自己做出 75 分的家常菜了(特别感谢很多师傅指导),且将下面这张图作为自己的日常饮食原则:

日常饮食原则示意图

关于健身减肥方面的实践,笔者这里只阐述下主要实践思路,实践细节可参考笔者之前写的一篇文章:减肥这件小事阶段随笔汇总

关键点 1:要考虑打工人工作比较忙碌的客观现实,将时间周期拉的长一点,目标拆解的细一点,可分阶段来。我们可以结合身边的很多例子来反思下,为什么那么多人喊着健身和减肥,真正成功的却不多呢?是耐力不够,还是客观环境不允许呢?笔者觉得两个原因都有,如果时间足够充裕,用这么多空闲时间来专注地完成一件正确的事情是没有大问题的。可现实生活中时间不会多么充裕,正是基于客观考虑,笔者才调整了实践思路:

关键点 2:实践过程中借助体脂秤的指标和数据统计,来定期分析自身数据,及时发现、纠正实操过程中的问题(这是笔者所在行业的惯用套路)。我们可以继续结合生活中的例子来看下,自己可有花些时间来反思、复盘自身存在的问题,然后调整行动呢?大部分应该都没有这么做。其实,笔者之前在这方面做的也特别少,后来随着工作和生活阅历的增加,慢慢注重这方面了。

4、健康小结

健康这个话题聊的差不多了,笔者在这个话题的最后简单分享两个自己学到的、且感觉比较实用、可广泛应用的迭代实践套路。有兴趣的朋友可去深入学习,如果还能在工作和生活中尝试起来,相信会取得更好的效果。

(1) 目标 -> 问题 -> 诊断 -> 方案 -> 践行 (套路来自《原则》这本书,该书在疫情前被笔者知晓后阅读,疫情后又翻了下,跟老朋友们也强烈推荐过)

目标到践行思维流程示意图

2、一个全面质量管理的思想基础和方法依据,循环式品质管理 PDCA,又称戴明环。由戴明提出,据说他十分热爱统计学,二战时曾将统计学应用于制造业,后来在日本传授质量控制,随着日本制造技术的逐渐发达,戴明也成为了比较著名的人物。

漫谈读书与学习

1、读书的目的

读书与学习的区别是什么呢?

在笔者看来,读书与学习是两码事,读书不等于学习,想要学习成长倒是可以多读点书。当然,有些人会把读书当成一种习惯和爱好,但笔者想继续问的是:习惯和爱好不是凭空来的,这种习惯和爱好背后的本质原因和动力又是什么呢?可能答案中多少会涵盖点 “想从读书中学到点东西”吧。

身处一个知识迭代速度和生活节奏都在加快的时代,“焦虑”与“迷茫”会时不时来敲门。因此,为应对社会生活中的焦虑与迷茫,人们选择了各种各样的方式,读书与学习自然也成为了一种常用的方式。笔者之前主动跟人交流的动力不大,所以读书与自我规划学习也是笔者的选择。

因此,如果有人问起 “你读书的目的是什么”,笔者会结合读过的《纳瓦尔宝典》这本书给出现在的答案:构建自己的心智模型。当然,如果在未来 N 年后有人再问起这个问题,笔者希望自己可以结合《穷查理宝典》这本书和查理芒格这个人给出比当前更深入和细化的答案(目前不能给这个答案,因为笔者自己构建的心智模型还不够好)。

2、读书的方式

随着时间的推移,笔者在读书方面体验了以下三种方式:

我们并不需要像辩论赛那样争论、PK 出上述哪种方式好,哪种方式不好。因为每种方式都有可能、或多或少助力我们成长。从实践效果来看,或许海绵式阅读是大多数人认可的方式,但有些采用自由式阅读的人真的在某些方面比采用海绵式阅读的人优秀;从时间维度来看,没有自由式、填鸭式的阅读,也很难直接转变为海绵式阅读。

在笔者看来,我们要关注的不是单选题,是“全都要”,要学会在不同的场景下切换到不同的阅读方式。即使是同一个人,也可根据不同的场景、不同的时间来切换到不同的阅读方式。所以,这里再做一个大胆又狂妄地的论断:为什么很多人读了很多的书,却依旧过不好这一生?因为纵使一个人满腹经纶,但 TA 没有清晰的认清问题本质,做不到学以致用与知行合一(书生误国也是这个道理)

3、读书工具选择与实践

大学时代,自接触互联网后,笔者依旧会买一些纸质书来看,但也坚信“信息化”是大势所趋,一个大学生在学好数学等基础学科的基础上,应该花些精力来学习了解下计算机技术。经历疫情这三年后,笔者再次坚信 “数字化” 是继 “全球化” 之后的大势所趋。

在阅读工具的选择方面笔者经历了以下几个阶段:

目前,“纸质书 + 微信阅读 + 互联网信息”成为了笔者最终选择的组合工具。在 2021 年底,笔者认为微信读书推出的年度报告产品已不足以总结自己在阅读方面的全貌,而且在闲暇的时候觉得自己在阅读方面不够系统化。因此,就创建了一个“阅读准则表格”,用于指导自己的阅读实践。表格依旧采用了分解与渐进明细的思路

目标到践行思维流程示意图

4、小结

在上述“阅读准则表格”的协助下,阅读与学习这件小事在疫情期间也变得比之前明晰起来,且由于 2022 年频繁居家,节省下来的时间也就多了,笔者希望能继续向着“构建自己的心智模型”这个方向实践下去。

阅读与学习这个话题到此也基本漫谈完了,对这个话题或阅读工具感兴趣的朋友可以看下凯文凯利在几年前写的《必然》这本书(笔者坚信,微信读书这个产品在发展的过程中,其团队中肯定有人读过这本书)。当然,如果不觉得笔者在做广告,也可看下笔者毕业前留下的两篇相关文章:

漫谈时间管理

1、时间不够用问题

时间是我们在这个世界上最优质和公平的资产,可它也能是让人在其面前最无奈。因此,如何利用、管理自己的时间也成为了每个人的必修课。

身处时间碎片化、角色多元化的社会,我们的时间变得越来越碎,每个角色背后也都有一堆琐碎的事不断涌进来。很多人觉得时间管理、时间不够用是老生长谈的话题,身边充斥着讲这个方面的人和书,但没有多少实际的用处。笔者曾试图分析过这个现象,最终总结出来的主要原因有 3 个:

刚好在疫情这三年,笔者有机会基于遇到的问题,在这方面尝试改善了下。重新拥有健康的身体后,有几个难题摆在了笔者面前:

笔者相信,有过类似经历的人肯定能更明白其中的矛盾与酸楚,面对很多件抢占时间资源的事务,又不得不逼着自己想方设法找到解决办法,真的蛮有压力的。当然,躺平和摆烂是一种方式,可人躺久了也会不自觉地想要尝试突破一下局限,与其让问题与环境倒逼自己改变,不如自己思变。

2、分阶段调整时间管理

第一阶段:疯狂做减法,专注重要的事

不推荐的严格时间表,形如 7:20-7:50 起床、洗漱;7:50-8:30 锻炼身体;8:20-8:50: 吃早饭...... 这样简单地把一天时间分为线段的作息日程表.

(1)丢弃不靠谱的严格时间表,为自己减压

(2)重新理解与应用“时间四象限”

(3)重新调整周末时间

在这种“快刀斩乱麻”式的操作下,近小半年后笔者发现自己在工作方面不那么像四处灭火的“捉急状态”了。健康、读书与学习两方面的习惯得以保住,虽然体重变化存在小范围波动,但健身减肥的胜利果实也被巩固住了。

第二阶段:升级清单管理

在这个阶段,鉴于笔者看了一些时间管理相关的书,比如《哈佛时间管理课》、《哪里没有时间》等书。结合自己在第一阶段的问题,决定在第二阶段对清单进行改善。清单是个好东西,能用来梳理、分析自己的时间利用是否符合预期,有助于使用者不断思考如何将日常任务做的更好。列出来清单后能降低甚至避免焦虑,因为在执行时不是从大脑中提取,而是从清单中读取

在升级清单管理前,笔者只有一个主要用来管理工作相关事务的清单,业余时间是没有清单管理的。但随着健康与业余自我充电相关的投入加大,升级清单管理有了一定的必要条件。升级清单管理的主要思路依旧运用了分解与渐进明细,将清单分为:碎片清单、工作日-日常清单、周末-日常清单三类

就这样,升级后的三个清单进一步优化了笔者的时间。持续几个月后,笔者也慢慢变得敢于决断,哪怕决断错了也要干。因为改变说起来容易做起来难,如果在做的过程中还惧怕错了,那只能是被束缚得各种不适,改变也就很可能夭折。

第三阶段:刻意统计并调整时间

经历了前两个阶段的改变,某天,笔者在娱乐的时候刚好看到有个 UP 主在讲 “进入人工智能时代后,人要怎么做才能既不失业,还能活的不错”。鉴于笔者统计分析的意识已经建立起来(统计学与数学知识应用依旧存在短板),所以笔者冒出了一个想法:UP 主列出的这个东西可能就是当下自己没有梳理过的时间分配准则。

废话不多说,这里直接贴出 UP 主给出的时间消耗建议,也是笔者在第三阶段的时间统计与调整准则,具体如下图:

当前时间消耗现状时间调整建议

因此,笔者结合准则和自己在第一、二阶段沉淀下来的时间分配情况,整出了一个粗糙的时间统计。整个时间统计采用了由局部到整体的方式:

优先统计工作日早上至午休这段时间的分配,基于统计情况调整时间;然后统计并调整午休、下午和晚上等时间的分配 以此类推,次优统计并调整周末时间的分配(为避免自己变成有强迫症的人,周末调整没有工作日拆解的细,为自己预留一些挥霍的自由) 笔者这里给出统计与调整示意如下:

工作日早上至上班前时间统计与调整午休时间统计与调整

至此,刻意统计与调整阶段的阶段也漫谈完了。笔者在这一阶段还挺觉得有成就感的,因为终于有机会在工作之外初级又粗糙地运用了统计学分析,很好地鼓励自己在统计学分析方面继续加大投入力度。

漫谈混合工作制

书接上文,如果说时间管理其实就是对时间这一个维度进行切割,然后把工作与生活中的事务填充进去,那么混合工作制就是基于物理空间和时间这两个维度来切割平面,然后把工作与生活中的事务填充进去。因此,笔者要漫谈的最后一个话题就是混合工作制。

这里所谓的“混合工作制”,对打工人来讲其实就是一部分时间在办公室工作,一部分时间居家远程办公。如果没有疫情,这种方式在国内还不会被大范围运用,虽然互联网行业一直有弹性工作制,但国内很少有企业让员工能持续几天甚至一个月居家办公。笔者认为,疫情只是更显象化了这种方式,因为在疫情出现之前,国外真的有公司在实践,而且国外的自由职业者是比国内多出很多的。

这里不是要展开争论,而是想抛出问题:我们虽然在疫情期间熟悉了这种工作模式,但我们可觉得自己能很好地处理这种模式呢?疫情总会过去的,在疫情后我们要不要继续实践混合工作制呢?

1、适应混合工作制

如上所述,混合工作制是基于空间与时间两个维度来安排要处理的事务,所以适应混合工作制,就是基于二维平面来安排好自己的工作与生活,试着把日子过得顺畅。

笔者不敢说自己在疫情期间很好地适应了混合工作制,因为在疫情早期居家办公真的很累,工作与生活没有了界限,有时觉得自己除了睡觉就一直在工作,回到公司上班的时候就觉得特别爽。但随着疫情的多次反复,也就有了一次次地尝试改变自己来适应居家办公,拥抱混合工作制。在这种客观条件的倒逼下,终究还是适应了,也实现了向内思变。

混合工作制最大的痛点是解决居家办公的苦恼,善用居家办公的优势,甚至把居家办公的经验适当地用在办公室工作中,从而实现真正的混合工作。在居家办公的时候,笔者觉得有以下几个要点需要注意:

当从居家办公切换到办公室工作环境中,除了不用划定专门的办公空间,很多经验都是可以继续沿用的。只有在碰到特别重要紧急的事情或者娱乐的事情才需要与同事当面沟通交流,这在一定程度上可以提升个人工作效率,去尝试摆脱“无头苍蝇式的忙碌”。

2、延伸思考混合工作制

不知道细心的朋友有没有发现,在疫情到来之前,我们大多接触到一些具有数字化特性的 C 端消费品(如:体脂秤具有称 + APP数据统计 + 虚拟社区;智能手表具有手表+数据收集与分析),只在办公时间或业余遇到紧急问题时才使用远程办公工具来协作,而疫情到来后我们更加主动拥抱、主动适应远程办公工具等数字化、虚拟化产品了。这在一定程度上也表明了:

那么问题来了,一个普通的打工人去延伸思考这些东西有什么用处呢?这是不是类似刚入职的员工操着 CEO 的心,或者说一个普通百姓,业余闲着没事操着治理国家的心呢?笔者个人认为:都不是。而是想基于以上延伸思考引出一个新的业余尝试:业余跨地域协作

这也关系到疫情后要不要继续实践混合工作制?不在其位就不谋其政,笔者这里不去谈国家或公司会不会在疫情后落地混合工作制,比如“3+2”或“4+1”工作制,因为笔者想延伸地是:如何在业余更大范围地尝试、实践混合工作制

遥想当年学生时代,一群比较合得来的学生仅仅凭借几成勇气就在业余时间集中到一个物理空间内去捣鼓一些东西,也因为这样的折腾让我们顺利走向了工作岗位。走向工作岗位后,时不时会在虚拟社群中一起侃大山,聊聊工作与生活,吐槽一下自己的改变,但最终收尾的时候多少都还流露出想要搞些有点创造力或者正能量的事情。

所以笔者认为,在上述延伸思考下,其实业余是可以协作的,主要原因有以下三点:

其实最主要的问题还是在于有没有共同的诉求,能不能拿出时间来捣鼓,有没有人能组织且管理好这种自由的远程协作团伙,并合理分配项目收益,实现大家的共同诉求。在疫情中后期,笔者业余时间没少在由几个老伙计组成的社群中“传销”上述延伸思考,疫情结束后也可能会继续尝试下去。

写在最后

行文至此,疫情这三年向内思变的复盘总结基本梳理完成了,不管文章最终的水平怎么样,依旧把自己的“闭关”经历沉淀下来了。

在文章的最后,顺便聊一聊思变。经历了疫情这三年,笔者认为思变不能只“打鸡血”或者 “立Flag”,思变是要结合客观事实和自身诉求来落地的。如果我们宽泛地谈改变,然后逼着自己变,挺内耗的。因为这种改变容易失败,失败后我们又不太容易原谅自己。可如果我们慢慢固化了,一旦大环境发生变化,我们又只能被动地任由社会教育。所以,改变之前需要多思考,需要学习一些知识套路尝试着实践。

笔者在落地上述几个话题的改变时,有些侧重实践为主,基于遇到的问题寻找解决方法;有些则以读书学习、与别人沟通交流的方式推动;还有些以业余娱乐的方式观察发现来推动,但最终实践的时候其实都初窥门径地用到了一些通识且有点哲学味道的“套路”:

最后,引用一下笔者早年看过的小说作为结束,其作者萧鼎老师说过“如果没有曾经的一段经历,自己写不出《诛仙》这样的作品”。虽然笔者与萧鼎老师相差甚远,也想在文章的最后说下:“如果没有疫情这三年的经历和刻意的向内思变,笔者也写不出一篇将多个话题串联起来的长文”。

之所以还记得《诛仙》这本小说,倒不是因为小说阐述了“天地不仁,以万物为刍狗”的法则,而是因为它也讲述了一个资质普通又平凡的少年,虽不醉心于修真,但真的凭借着坚韧、阅历一步步身兼“佛道魔”三种功法,这种特质在经济下行的大环境下可能更值得学习。

',121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; +import{_ as r,c as t,o as i,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l('

向内思变:当疫情给世界按下暂停键,去重构生活秩序

摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。

目标到践行思维流程示意图

写在前面

自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:

疫情期间,笔者基本没有怎么出过远门,甚至阴差阳错地给自己安排了更多的独处时间。周末也倒逼自己按照比较严格的作息推动业余实践,尝试向内探索。因此,所谓 “向内思变”,用时髦的说法也叫 “闭关”,接下来就阐述下要漫谈的话题。

漫谈话题

健康,拥有的时候经常不会被珍惜,失去的时候却追悔莫及,但重新找回后却很容易再次不被珍惜(不难理解,这就是人性)

读书与学习,一个被广为熟知的话题,但笔者在这方面是有一定自信的,因为有过比较正向的实践,多少有点底气。自大学时代开始,笔者在这方面有一定的嗜好,且系统践行了此嗜好,还通过啃一些跨专业的书来学习,直至可以抛弃原来的专业,在毕业时也留下了两篇关于这方面的总结文章。当然,任何时候、任何人的经历都代表不了实力。本次漫谈笔者会结合自己的经验、思考与总结来梳理,尽最大努力让这个话题起到抛砖引玉的作用,有兴趣的小伙伴在以后的日子里可共同进步。

时间管理,这个话题虽被大家熟知,却很少有人能自信地说 “自己能很好地管理时间”,笔者肯定也不例外。但本次漫谈会梳理下笔者自己在实操方面的尝试,思考与总结。

混合工作制,这个话题在疫情到来后被大家熟知,所以笔者这里也未必能分享出多么稀奇古怪的见解,但同样会结合实操给出自己的思考与总结。

漫谈健康

健康危机

鉴于笔者在大学阶段自由学习与探索的勇气可嘉,因此在经历两次 “校园互联网小作坊” 的锻炼后,毕业时选择的工作自然而然地成为了大学兴趣的延续。当然,也延续了很多大学阶段养成的对健康不利的习惯,作息无规律,仗着无知挥霍身体;无健康意识,不怎么锻炼身体,比如:

人无作息规律地熬一天不累,熬十天就累了,熬几年也就要坏事了。就这样经过长年累月地洗礼,健康也在疫情到来的第一年亮起了小红灯。当然,经过医生、家人等多方的协力帮助,以及自己的坚忍硬扛,最终康复了。期间虽然经历了比疫情放开后大部人转阳痛苦且印象深刻多倍的事情,但不是本文的重点,这里只留下笔者事后深刻反思的几个心得:

健康知识学习

既然已经知晓自身问题且暂时止损了,自然要继续寻找更长远的解决方法。但方法不会凭空从天上掉下来的,它需要自己去寻找。笔者寻找方法的主要途径是:向专业或有经验的人咨询,向书本上的健康标准和知识找

1、向有专业或有经验的人咨询

由于笔者仍然保持着大学时代学会的“免费”思维,所以在接近康复出院的时候就开始跟医生、医护、病友等以聊天的方式咨询。众所周知,医生是经常传授病人一些健康知识的专业人员,医护是长年累月协助病人康复训练的专业人员,病友是那些与自身有着相同失误的人,向这几波人咨询更能习得比较正向的建议或小技巧。这一阶段积累了一些碎片化的健康意识,康复训练小技巧,以及戒掉不良生活习惯的注意点,也为后面的防治宜早、起居有常、适量运动等原则做了铺垫

2、学习健康标准和知识

健康其实是有标准、有依据的:

*《皇帝内经》中的标准:形与神俱,而终其天年,度百岁乃去。 *现代的健康标准:生理健康、心理健康、社会及自然环境适应良好,道德良好,并达到人之天年

如上所述,健康标准简单且易懂,但它不足以指导大部人去实践(除非是不世出的罕见人才,看到标准后就能推导出符合实际的解法)。所以笔者结合自身经历和健康知识,进一步采用 “分解” 和渐进明细的方式,学着梳理出一些健康原则

最后,为保证自己在理论意识上更注重身体健康,笔者还拜读了毛教员在青年时期写下的《体育之研究》。读过教员鞭辟入里的文章后,也更从理论上明白了:“体者,载知识之车而寓道德之舍也。体育一道,配德育与智育,而德智皆寄于体。”

3、健康实践

结合沉淀下来的原则,笔者花费了 1.5 年的时间,进行了两个方面的实践:

随着时间的流逝,笔者现在也能自己做出 75 分的家常菜了(特别感谢很多师傅指导),且将下面这张图作为自己的日常饮食原则:

日常饮食原则示意图

关于健身减肥方面的实践,笔者这里只阐述下主要实践思路,实践细节可参考笔者之前写的一篇文章:减肥这件小事阶段随笔汇总

关键点 1:要考虑打工人工作比较忙碌的客观现实,将时间周期拉的长一点,目标拆解的细一点,可分阶段来。我们可以结合身边的很多例子来反思下,为什么那么多人喊着健身和减肥,真正成功的却不多呢?是耐力不够,还是客观环境不允许呢?笔者觉得两个原因都有,如果时间足够充裕,用这么多空闲时间来专注地完成一件正确的事情是没有大问题的。可现实生活中时间不会多么充裕,正是基于客观考虑,笔者才调整了实践思路:

关键点 2:实践过程中借助体脂秤的指标和数据统计,来定期分析自身数据,及时发现、纠正实操过程中的问题(这是笔者所在行业的惯用套路)。我们可以继续结合生活中的例子来看下,自己可有花些时间来反思、复盘自身存在的问题,然后调整行动呢?大部分应该都没有这么做。其实,笔者之前在这方面做的也特别少,后来随着工作和生活阅历的增加,慢慢注重这方面了。

4、健康小结

健康这个话题聊的差不多了,笔者在这个话题的最后简单分享两个自己学到的、且感觉比较实用、可广泛应用的迭代实践套路。有兴趣的朋友可去深入学习,如果还能在工作和生活中尝试起来,相信会取得更好的效果。

(1) 目标 -> 问题 -> 诊断 -> 方案 -> 践行 (套路来自《原则》这本书,该书在疫情前被笔者知晓后阅读,疫情后又翻了下,跟老朋友们也强烈推荐过)

目标到践行思维流程示意图

2、一个全面质量管理的思想基础和方法依据,循环式品质管理 PDCA,又称戴明环。由戴明提出,据说他十分热爱统计学,二战时曾将统计学应用于制造业,后来在日本传授质量控制,随着日本制造技术的逐渐发达,戴明也成为了比较著名的人物。

漫谈读书与学习

1、读书的目的

读书与学习的区别是什么呢?

在笔者看来,读书与学习是两码事,读书不等于学习,想要学习成长倒是可以多读点书。当然,有些人会把读书当成一种习惯和爱好,但笔者想继续问的是:习惯和爱好不是凭空来的,这种习惯和爱好背后的本质原因和动力又是什么呢?可能答案中多少会涵盖点 “想从读书中学到点东西”吧。

身处一个知识迭代速度和生活节奏都在加快的时代,“焦虑”与“迷茫”会时不时来敲门。因此,为应对社会生活中的焦虑与迷茫,人们选择了各种各样的方式,读书与学习自然也成为了一种常用的方式。笔者之前主动跟人交流的动力不大,所以读书与自我规划学习也是笔者的选择。

因此,如果有人问起 “你读书的目的是什么”,笔者会结合读过的《纳瓦尔宝典》这本书给出现在的答案:构建自己的心智模型。当然,如果在未来 N 年后有人再问起这个问题,笔者希望自己可以结合《穷查理宝典》这本书和查理芒格这个人给出比当前更深入和细化的答案(目前不能给这个答案,因为笔者自己构建的心智模型还不够好)。

2、读书的方式

随着时间的推移,笔者在读书方面体验了以下三种方式:

我们并不需要像辩论赛那样争论、PK 出上述哪种方式好,哪种方式不好。因为每种方式都有可能、或多或少助力我们成长。从实践效果来看,或许海绵式阅读是大多数人认可的方式,但有些采用自由式阅读的人真的在某些方面比采用海绵式阅读的人优秀;从时间维度来看,没有自由式、填鸭式的阅读,也很难直接转变为海绵式阅读。

在笔者看来,我们要关注的不是单选题,是“全都要”,要学会在不同的场景下切换到不同的阅读方式。即使是同一个人,也可根据不同的场景、不同的时间来切换到不同的阅读方式。所以,这里再做一个大胆又狂妄地的论断:为什么很多人读了很多的书,却依旧过不好这一生?因为纵使一个人满腹经纶,但 TA 没有清晰的认清问题本质,做不到学以致用与知行合一(书生误国也是这个道理)

3、读书工具选择与实践

大学时代,自接触互联网后,笔者依旧会买一些纸质书来看,但也坚信“信息化”是大势所趋,一个大学生在学好数学等基础学科的基础上,应该花些精力来学习了解下计算机技术。经历疫情这三年后,笔者再次坚信 “数字化” 是继 “全球化” 之后的大势所趋。

在阅读工具的选择方面笔者经历了以下几个阶段:

目前,“纸质书 + 微信阅读 + 互联网信息”成为了笔者最终选择的组合工具。在 2021 年底,笔者认为微信读书推出的年度报告产品已不足以总结自己在阅读方面的全貌,而且在闲暇的时候觉得自己在阅读方面不够系统化。因此,就创建了一个“阅读准则表格”,用于指导自己的阅读实践。表格依旧采用了分解与渐进明细的思路

目标到践行思维流程示意图

4、小结

在上述“阅读准则表格”的协助下,阅读与学习这件小事在疫情期间也变得比之前明晰起来,且由于 2022 年频繁居家,节省下来的时间也就多了,笔者希望能继续向着“构建自己的心智模型”这个方向实践下去。

阅读与学习这个话题到此也基本漫谈完了,对这个话题或阅读工具感兴趣的朋友可以看下凯文凯利在几年前写的《必然》这本书(笔者坚信,微信读书这个产品在发展的过程中,其团队中肯定有人读过这本书)。当然,如果不觉得笔者在做广告,也可看下笔者毕业前留下的两篇相关文章:

漫谈时间管理

1、时间不够用问题

时间是我们在这个世界上最优质和公平的资产,可它也能是让人在其面前最无奈。因此,如何利用、管理自己的时间也成为了每个人的必修课。

身处时间碎片化、角色多元化的社会,我们的时间变得越来越碎,每个角色背后也都有一堆琐碎的事不断涌进来。很多人觉得时间管理、时间不够用是老生长谈的话题,身边充斥着讲这个方面的人和书,但没有多少实际的用处。笔者曾试图分析过这个现象,最终总结出来的主要原因有 3 个:

刚好在疫情这三年,笔者有机会基于遇到的问题,在这方面尝试改善了下。重新拥有健康的身体后,有几个难题摆在了笔者面前:

笔者相信,有过类似经历的人肯定能更明白其中的矛盾与酸楚,面对很多件抢占时间资源的事务,又不得不逼着自己想方设法找到解决办法,真的蛮有压力的。当然,躺平和摆烂是一种方式,可人躺久了也会不自觉地想要尝试突破一下局限,与其让问题与环境倒逼自己改变,不如自己思变。

2、分阶段调整时间管理

第一阶段:疯狂做减法,专注重要的事

不推荐的严格时间表,形如 7:20-7:50 起床、洗漱;7:50-8:30 锻炼身体;8:20-8:50: 吃早饭...... 这样简单地把一天时间分为线段的作息日程表.

(1)丢弃不靠谱的严格时间表,为自己减压

(2)重新理解与应用“时间四象限”

(3)重新调整周末时间

在这种“快刀斩乱麻”式的操作下,近小半年后笔者发现自己在工作方面不那么像四处灭火的“捉急状态”了。健康、读书与学习两方面的习惯得以保住,虽然体重变化存在小范围波动,但健身减肥的胜利果实也被巩固住了。

第二阶段:升级清单管理

在这个阶段,鉴于笔者看了一些时间管理相关的书,比如《哈佛时间管理课》、《哪里没有时间》等书。结合自己在第一阶段的问题,决定在第二阶段对清单进行改善。清单是个好东西,能用来梳理、分析自己的时间利用是否符合预期,有助于使用者不断思考如何将日常任务做的更好。列出来清单后能降低甚至避免焦虑,因为在执行时不是从大脑中提取,而是从清单中读取

在升级清单管理前,笔者只有一个主要用来管理工作相关事务的清单,业余时间是没有清单管理的。但随着健康与业余自我充电相关的投入加大,升级清单管理有了一定的必要条件。升级清单管理的主要思路依旧运用了分解与渐进明细,将清单分为:碎片清单、工作日-日常清单、周末-日常清单三类

就这样,升级后的三个清单进一步优化了笔者的时间。持续几个月后,笔者也慢慢变得敢于决断,哪怕决断错了也要干。因为改变说起来容易做起来难,如果在做的过程中还惧怕错了,那只能是被束缚得各种不适,改变也就很可能夭折。

第三阶段:刻意统计并调整时间

经历了前两个阶段的改变,某天,笔者在娱乐的时候刚好看到有个 UP 主在讲 “进入人工智能时代后,人要怎么做才能既不失业,还能活的不错”。鉴于笔者统计分析的意识已经建立起来(统计学与数学知识应用依旧存在短板),所以笔者冒出了一个想法:UP 主列出的这个东西可能就是当下自己没有梳理过的时间分配准则。

废话不多说,这里直接贴出 UP 主给出的时间消耗建议,也是笔者在第三阶段的时间统计与调整准则,具体如下图:

当前时间消耗现状时间调整建议

因此,笔者结合准则和自己在第一、二阶段沉淀下来的时间分配情况,整出了一个粗糙的时间统计。整个时间统计采用了由局部到整体的方式:

优先统计工作日早上至午休这段时间的分配,基于统计情况调整时间;然后统计并调整午休、下午和晚上等时间的分配 以此类推,次优统计并调整周末时间的分配(为避免自己变成有强迫症的人,周末调整没有工作日拆解的细,为自己预留一些挥霍的自由) 笔者这里给出统计与调整示意如下:

工作日早上至上班前时间统计与调整午休时间统计与调整

至此,刻意统计与调整阶段的阶段也漫谈完了。笔者在这一阶段还挺觉得有成就感的,因为终于有机会在工作之外初级又粗糙地运用了统计学分析,很好地鼓励自己在统计学分析方面继续加大投入力度。

漫谈混合工作制

书接上文,如果说时间管理其实就是对时间这一个维度进行切割,然后把工作与生活中的事务填充进去,那么混合工作制就是基于物理空间和时间这两个维度来切割平面,然后把工作与生活中的事务填充进去。因此,笔者要漫谈的最后一个话题就是混合工作制。

这里所谓的“混合工作制”,对打工人来讲其实就是一部分时间在办公室工作,一部分时间居家远程办公。如果没有疫情,这种方式在国内还不会被大范围运用,虽然互联网行业一直有弹性工作制,但国内很少有企业让员工能持续几天甚至一个月居家办公。笔者认为,疫情只是更显象化了这种方式,因为在疫情出现之前,国外真的有公司在实践,而且国外的自由职业者是比国内多出很多的。

这里不是要展开争论,而是想抛出问题:我们虽然在疫情期间熟悉了这种工作模式,但我们可觉得自己能很好地处理这种模式呢?疫情总会过去的,在疫情后我们要不要继续实践混合工作制呢?

1、适应混合工作制

如上所述,混合工作制是基于空间与时间两个维度来安排要处理的事务,所以适应混合工作制,就是基于二维平面来安排好自己的工作与生活,试着把日子过得顺畅。

笔者不敢说自己在疫情期间很好地适应了混合工作制,因为在疫情早期居家办公真的很累,工作与生活没有了界限,有时觉得自己除了睡觉就一直在工作,回到公司上班的时候就觉得特别爽。但随着疫情的多次反复,也就有了一次次地尝试改变自己来适应居家办公,拥抱混合工作制。在这种客观条件的倒逼下,终究还是适应了,也实现了向内思变。

混合工作制最大的痛点是解决居家办公的苦恼,善用居家办公的优势,甚至把居家办公的经验适当地用在办公室工作中,从而实现真正的混合工作。在居家办公的时候,笔者觉得有以下几个要点需要注意:

当从居家办公切换到办公室工作环境中,除了不用划定专门的办公空间,很多经验都是可以继续沿用的。只有在碰到特别重要紧急的事情或者娱乐的事情才需要与同事当面沟通交流,这在一定程度上可以提升个人工作效率,去尝试摆脱“无头苍蝇式的忙碌”。

2、延伸思考混合工作制

不知道细心的朋友有没有发现,在疫情到来之前,我们大多接触到一些具有数字化特性的 C 端消费品(如:体脂秤具有称 + APP数据统计 + 虚拟社区;智能手表具有手表+数据收集与分析),只在办公时间或业余遇到紧急问题时才使用远程办公工具来协作,而疫情到来后我们更加主动拥抱、主动适应远程办公工具等数字化、虚拟化产品了。这在一定程度上也表明了:

那么问题来了,一个普通的打工人去延伸思考这些东西有什么用处呢?这是不是类似刚入职的员工操着 CEO 的心,或者说一个普通百姓,业余闲着没事操着治理国家的心呢?笔者个人认为:都不是。而是想基于以上延伸思考引出一个新的业余尝试:业余跨地域协作

这也关系到疫情后要不要继续实践混合工作制?不在其位就不谋其政,笔者这里不去谈国家或公司会不会在疫情后落地混合工作制,比如“3+2”或“4+1”工作制,因为笔者想延伸地是:如何在业余更大范围地尝试、实践混合工作制

遥想当年学生时代,一群比较合得来的学生仅仅凭借几成勇气就在业余时间集中到一个物理空间内去捣鼓一些东西,也因为这样的折腾让我们顺利走向了工作岗位。走向工作岗位后,时不时会在虚拟社群中一起侃大山,聊聊工作与生活,吐槽一下自己的改变,但最终收尾的时候多少都还流露出想要搞些有点创造力或者正能量的事情。

所以笔者认为,在上述延伸思考下,其实业余是可以协作的,主要原因有以下三点:

其实最主要的问题还是在于有没有共同的诉求,能不能拿出时间来捣鼓,有没有人能组织且管理好这种自由的远程协作团伙,并合理分配项目收益,实现大家的共同诉求。在疫情中后期,笔者业余时间没少在由几个老伙计组成的社群中“传销”上述延伸思考,疫情结束后也可能会继续尝试下去。

写在最后

行文至此,疫情这三年向内思变的复盘总结基本梳理完成了,不管文章最终的水平怎么样,依旧把自己的“闭关”经历沉淀下来了。

在文章的最后,顺便聊一聊思变。经历了疫情这三年,笔者认为思变不能只“打鸡血”或者 “立Flag”,思变是要结合客观事实和自身诉求来落地的。如果我们宽泛地谈改变,然后逼着自己变,挺内耗的。因为这种改变容易失败,失败后我们又不太容易原谅自己。可如果我们慢慢固化了,一旦大环境发生变化,我们又只能被动地任由社会教育。所以,改变之前需要多思考,需要学习一些知识套路尝试着实践。

笔者在落地上述几个话题的改变时,有些侧重实践为主,基于遇到的问题寻找解决方法;有些则以读书学习、与别人沟通交流的方式推动;还有些以业余娱乐的方式观察发现来推动,但最终实践的时候其实都初窥门径地用到了一些通识且有点哲学味道的“套路”:

最后,引用一下笔者早年看过的小说作为结束,其作者萧鼎老师说过“如果没有曾经的一段经历,自己写不出《诛仙》这样的作品”。虽然笔者与萧鼎老师相差甚远,也想在文章的最后说下:“如果没有疫情这三年的经历和刻意的向内思变,笔者也写不出一篇将多个话题串联起来的长文”。

之所以还记得《诛仙》这本小说,倒不是因为小说阐述了“天地不仁,以万物为刍狗”的法则,而是因为它也讲述了一个资质普通又平凡的少年,虽不醉心于修真,但真的凭借着坚韧、阅历一步步身兼“佛道魔”三种功法,这种特质在经济下行的大环境下可能更值得学习。

',121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; diff --git a/assets/about_growth_inner-experience.md.Bv6irQCt.lean.js b/assets/about_growth_inner-experience.md.BISUXRTm.lean.js similarity index 96% rename from assets/about_growth_inner-experience.md.Bv6irQCt.lean.js rename to assets/about_growth_inner-experience.md.BISUXRTm.lean.js index b276d5f..ff08203 100644 --- a/assets/about_growth_inner-experience.md.Bv6irQCt.lean.js +++ b/assets/about_growth_inner-experience.md.BISUXRTm.lean.js @@ -1 +1 @@ -import{_ as r,c as t,o as i,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l("",121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; +import{_ as r,c as t,o as i,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l("",121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; diff --git a/assets/about_growth_outer-experience.md.H37qqbXv.js b/assets/about_growth_outer-experience.md.DniEKTlV.js similarity index 99% rename from assets/about_growth_outer-experience.md.H37qqbXv.js rename to assets/about_growth_outer-experience.md.DniEKTlV.js index bc61ef3..5304261 100644 --- a/assets/about_growth_outer-experience.md.H37qqbXv.js +++ b/assets/about_growth_outer-experience.md.DniEKTlV.js @@ -1 +1 @@ -import{_ as s,c as r,o as i,d as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a('

走出“目标隧道”:用系统与数学思维重构底层逻辑

摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。

1. 写在前面

时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。

那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。

在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时会觉得很累。自 OpenAI 这家公司名声大噪且 LLM(大语言模型)被各行各业的人们知晓后,笔者开始质疑起了『目标』,尤其在看过 OpenAI 研究员写的《为什么伟大不能被计划》且向一些大佬咨询请教后,更觉得目标是一把双刃剑:

在目标制定、执行和调整之外,或许存在更通用的方法论,它既包括一些成长书中所谓的使命感,也包括个人智慧与经验等因素。因此,笔者在看书、学习数学基础知识与思维、卷 AI 大模型的过程中,尝试去寻找答案,大概率找不到最好答案,但或多或少能找出优于当前状态的路径或答案。

2. 重读《要事第一》

原则、使命与角色示意树

图1:原则、使命与角色示意树

四个维度圈示意图

图2:四个维度圈示意图

在重读《要事第一》后,笔者貌似找到了一部分答案。我们经常听到 "人要独立,要有自己的想法",但我们确实生活在一个相互依赖的社会,独立与相互依赖这两个看似矛盾的点是我们需要学着平衡的

在平衡思维与多维度视角的基础上,我们很自然地产出长(比如年)、中(比如季度)、短(比如周)三个方面的方向或目标,而不是把自己变成一个工具或发条去卷。自然也能尝试使用《要事第一》作者推出的第四代时间管理模式:更看重『人』的范畴,所关注的焦点超越了如何对事务进行有效而机械的管理,更重视同别人进行有效的互动合作。以人为本的模式对于在家庭、组织和其他形式的团体中获得成功都是至关重要的

鉴于笔者个人的视角也有一定的局限性,对这部分答案感兴趣的读者,可以去阅读原著,来帮助找出一些适合自己实践的答案。

3. 基于系统与模型思维构建洞察力模型

众所周知,在数字化时代,我们每天都在与各种各样的系统交互,每一个表象背后都有一个黑盒子,黑盒子才是规律产生的原因,这个黑盒子也就是系统。

当系统运转正常的时候,我们在遵循着表象的规律做事,可一旦系统出了问题,这些规律将会失效。如果我们无法洞察表象背后的系统,就不可能知道问题出在哪里,更不知道如何解决。笔者在年轻时也不晓得这个道理,所以经常会固执坚守错误的认知,此后被社会打磨得多了,也就开始琢磨系统运行原理、锻炼自己的洞察力了。

洞察力模型就是:理解『表象』背后的『黑盒子』——系统,从而真正从本质上解决问题。在现实世界中,遇到问题,可以尝试摸索,但不要停留在一些似是而非的概念世界里。在知识付费时代,人们更容易陷入概念世界的迷障,我们应该继续尝试走进科学、知识的世界,甚至是智慧世界来抽象分析,然后结合实际情况降维打击具象世界(疫情期间从 B 站林超所长视频中学到的总结,有兴趣的可自己看原创视频):

系统与模型思维构建洞察力模型

系统是一组相互关联的要素,即:系统 = 要素 x 连接关系。在日常工作与生活中,要素是易识别,要素的关联关系容易被忽略,但问题的解决方案,常常就藏在这些『连接关系』里

因此,我们可基于拆解与关联的思路按照以下步骤进行:

1. 寻找因果关系,人与事、人与物、人与人之间均是如此。若洞察不了关联、因果关系,就一个字『乱』,信息熵越来越大,噪声信息越来越多。因此,我们可以不断拿起两个可能有关系的变量,问自己:他们之间有增强关系吗,有减弱关系吗?

2. 寻找增强回路,因果关系只是单向线段,有头有尾,作用效果从头传到尾就结束了。因此,我们需要继续思考是否能把结尾与开头也用一条线段连接起来形成一个增强回路。生活中有很多增强回路的示例:

3. 很多时候,我们的改善并不需要一直猛踩油门,有时只要松开刹车就好,在增强回路的成效越来越低时,很难再有突破,调节回路有助于改善增强回路带来的问题。

三个回路示意图

3.1. 增强回路小例子 🌰

长久以来,人们给增强回路导致的大起大落现象,起了无数的名字,常见的有:马太效应、经济学家口中的赢家通吃、金融学中的复利效应、互联网公司的指数型增长。

小事情推动靠聪明才智,比较长远的事情要靠建立正向的增强回路。2022 年底到2023 年末,大模型相当火爆,其背后的 OpenAI 更是成为影响力很大的公司,我们可有关注他们在内部协作的增强回路呢?

OpenAI 产品推动的思路是: The model is the product,将模型的新功能融入产品,在设计产品过程中与研究团队专注设计模型行为:

OpenAI 产品推动的思路

笔者是一个比较喜欢阅读的人,随着阅读时间的累加,也在逐步思考怎么才能将自己获得的『输入信息』变成有一定质量与正向效果的『输出』?

起初,只想到了一些常用的 Push 方法:多读书,多与别人沟通、请教,然后尝试去改善『输出』。

后来,也不知哪天突发奇想,想起了大学老师曾经在某节课堂上(幸亏当时没有在课上睡觉)提到的一个常见的商业管理模式:推拉模式(Push/Pull)。于是就将『输入』与『输出』简化为:听、说、读、写这四个因素,从 Push 与 Pull 两个方面来编排这四个因素,就能组成输入与输出之间的增强回路

推拉模式

让两者形成一个增强回路,变成一个自动运行的卷动机,效果就会比单独 Push 或 Pull 更好。

3.2. 调节回路

如果说增强回路的存在,是让这个世界走向极端,那么调节回路的存在,就是让这个世界回归平衡因为增强回路就是『狂卷』,追求极端,很容易陷入『目标隧道』,而调节回路,让人回归平衡、自然,在得到休息的同时增添乐趣

因此,我们在找到自己的增强回路后也需要借助调节回路,以及上述提到的平衡思维来落地调节回路,笔者这里就不做过多赘述。

当然,模型思维固然能帮助我们很好地实践,让自己变得简洁、清晰、透彻,但也有其局限性。在模型基本确定的情况下,其能力的『天花板』也随之确定,天花板的突破需要我们根据实际情况来持续丰富、升级自己的心智模型。

4. 重读数学的乐趣

NOTE

行文至此,基本到了最后一个专题:数学。鉴于许多人对数学有着又爱又恨的恐惧心理,笔者在这里保证不会引入一些复杂的公式,而是重在强调数学思维真的又底层又有用,更贴近人们常说的『第一性原理』

4.1. 怎么突然又学起数学了?

相信很多人都听说过分解、分类、排列、组合、四象限、流程等比较热门的词语,那么问题来了,我们是否梳理总结过自己真正实践、应用了多少呢?笔者还真的刻意梳理过:

组合示意图

在基础逻辑与行动指导、产出表述与写作训练阶段,只要肯花时间去学习领悟,并刻意训练,我们基本都能获得不错的效果。随着时间的积累,笔者逐渐发现自己在底层原理方面的抽象理解能力不是一般的薄弱:

因此,基于多方面遇到的问题,笔者就重新学起了数学:

4.2. 重新发现了有趣的数学思维

分解与分类、排列与组合

相信不少人已经比较熟悉『化繁为简』,『见缝插针』式事务管理。笔者这里依旧把『分解与分类、排列与组合』放在第一位,我们在接收九年义务教育时就开始学习这些,但很少有人能用这些比较简单的数学思维管理自己的时间与事务

笔者这里只提一个人:雷军,刨除后来的光环不讲,他当年在武汉大学读书时真的将这些应用得淋漓尽致,后来也在不少场合以经历回顾的方式传授给很多年轻人(感兴趣的可在网上搜一些更详细的资料)。所以,笔者也认为:一个人越早学会将『分解与分类、排列与组合』应用到工作与生活中越好,带来的正向效果特别多,活得不糊里糊涂,有自己的节奏感

多样性红利

假设一个方程代表从一个角度观察得到的结果,那么,如果我们从多个角度观察,就会得到方程组,求解方程组的过程就是整合多个角度的观察结果,找到最接近真相的答案:

病态方程组示意

图1:病态方程组:两条线特征近似,稍微发生变化就带来较大误差

兼顾多样性的方程组示意

图2:兼顾多样性的方程组

如果我们总是基于斜率非常接近的直线建立方程组,某条直线只要稍微变化一点,最终的答案就会有很大变化。通过病态方程组,我们可以更好地看清为什么多样性特别重要,多样性已经是一个公认的优势,任何人都会有认知盲点,站在不同角度的人在一起讨论后达成的共识往往最接近真相

因此,我们在日常工作生活中要试着平衡,运用多样性红利,不应该『过卷、过拟合』,否则容易导致适应性下降,碰到新环境就会各种不适应

这个世界是稀疏的

傅立叶在 1807 年提交了一篇论文,阐述了一个结论:任何一个连续的周期信号,都可以通过不同频率的正弦波叠加得出,这些正弦波前面的系数大部分为零,只有少部分系数描述了曲线的核心特征

傅立叶级数示意

图1:图片来自《心中有数,生活中的数学思维》

傅立叶级数系数示意

图2:图片来自《心中有数,生活中的数学思维》

熟悉数据压缩的读者应该知道这个原理,我们只需把少量比较大的系数对应的简单图像和对应的系数一起存起来,就可以恢复原始图像,且大大压缩了存储空间:

数据压缩示意

图片来自《心中有数,生活中的数学思维》

因此,我们在遇到比较复杂的问题时,不需要害怕,因为现实世界中的事物看似复杂,一旦转换为其他的表示方法后,通常是稀疏的。我们只需要拆解并关注少部分核心要素,以及它们之间的关联即可。稀疏无处不在,很多看起来复杂的现象背后所包含的规律,往往都是稀疏且简单的。

概率的世界观

笔者在 2023 年五一假期去『杭州宋城』游玩了一下,快结束时遇到了一个特别有意思的娱乐活动:"赌钱"。这里的 "赌钱"活动是游客拿着在宋城钱庄里兑换的、且消费一天后还剩余的零钱铜板去赌一把,碰碰运气,体验下宋朝的赌场。

规则很简单:拿着手里的铜板选择押大或押小,美丽的西子姑娘直接掷骰子,顾客赢了就给同样的下注铜板,庄家赢了就直接赢走下注的铜板。看似简单又粗暴的规则,一段时间下来,大部分游客基本都把仅剩的铜板留在了宋城,很少有顾客能赢。当然,笔者和朋友也不例外,不过还是采用了一个策略去反抗了下,让游戏时间延长一点:三个人约定分工,一人只能押大,另一人只能押小,最后一人拿着剩余的铜板自由调度选择押大押小。可终究没有改变最终的结果,相信熟悉 "大数定律"的人已经知道为什么了:只要一件事情发生的次数足够多,它出现某一个结果的频率就等于其概率。

宋城这个大庄家是活动举办方,一直有职员在玩,基本可以看成有 1/6 的概率稳赢,广大游客来宋城的目的是游玩,不是『赌钱』,玩得次数相对少太多,赢的概率远远比庄家少。笔者阐述这个『大数定律』的小例子,主要是想引出一些启发,觉得我们需要建立起概率的世界观:

AI 教会了我们哪些?

早在几年前,传统的机器学习都是通过『投喂』特定的训练数据给某个单一模型,训练完成后模型能够完成一些特定的任务,但当我们让模型去完成一些别的任务时,其表现就相当差。 我们可以发现,『单任务学习』看起来是集中精力做一件事,但聚焦于某一特定任务并不是最好的方式,因为特别容易忽略任务之间的关联。如果我们把不同任务放在一起训练,充分利用任务之间的关系,就很可能让最后训练出来的模型比单独训练出来的模型表现得更好。相信对大模型有一定了解的读者应该已经发现,这跟大语言模型的思路很像,随着训练数据的加大,大语言模型的表现越来越让人惊艳,尤其是自然语言理解方面。

这也引出了一些好的学习方法论:通识教育是相当重要的,一个人在学习时所使用的方式、思维模型和章法也是相当重要的。“技能”通常是针对某个特定的任务而言的,而“学习方法论”则可以应用于多个不同的任务。那些综合表现好的人,一般都掌握了好的学习方法论,借助这些学习方法论,可以经过短时间的学习就能较好地完成多个不同的任务。

5. 写在最后

行文至此,"疫情后的第一年向外体验" 也基本梳理完成了.在文章的最后,顺便交代下:这是笔者第一次在文章中大篇幅尝试引入数学相关的知识,鉴于数学功底有限,肯定存在不足之处,有兴趣的可阅读一些更专业的书籍

虽然不少人觉得大模型会成为新的泡沫,笔者这里也不好说看法是否对,但笔者曾阅读过 OpenAI 首席科学家,以及一些研究员早年写的博客,有一个比较共同的特点值得敬佩:即使有很多人在评论区质疑他们描述的 AGI,但他们大多坚信自己能搞出来通用人工智能,这些年也在用实践推动着 AI 的发展

随着大模型被广泛熟知,AI 应用与变革的路才刚刚开始,希望更多的人能主动思变,拥抱 AI。笔者也会努力继续深入学习 AI,自从再次深入学习 AI 知识后,作为工作几年后的打工人,有点觉得自己的心态变得年轻、有趣了

',77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; +import{_ as s,c as r,o as i,d as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a('

走出“目标隧道”:用系统与数学思维重构底层逻辑

摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。

1. 写在前面

时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。

那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。

在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时会觉得很累。自 OpenAI 这家公司名声大噪且 LLM(大语言模型)被各行各业的人们知晓后,笔者开始质疑起了『目标』,尤其在看过 OpenAI 研究员写的《为什么伟大不能被计划》且向一些大佬咨询请教后,更觉得目标是一把双刃剑:

在目标制定、执行和调整之外,或许存在更通用的方法论,它既包括一些成长书中所谓的使命感,也包括个人智慧与经验等因素。因此,笔者在看书、学习数学基础知识与思维、卷 AI 大模型的过程中,尝试去寻找答案,大概率找不到最好答案,但或多或少能找出优于当前状态的路径或答案。

2. 重读《要事第一》

原则、使命与角色示意树

图1:原则、使命与角色示意树

四个维度圈示意图

图2:四个维度圈示意图

在重读《要事第一》后,笔者貌似找到了一部分答案。我们经常听到 "人要独立,要有自己的想法",但我们确实生活在一个相互依赖的社会,独立与相互依赖这两个看似矛盾的点是我们需要学着平衡的

在平衡思维与多维度视角的基础上,我们很自然地产出长(比如年)、中(比如季度)、短(比如周)三个方面的方向或目标,而不是把自己变成一个工具或发条去卷。自然也能尝试使用《要事第一》作者推出的第四代时间管理模式:更看重『人』的范畴,所关注的焦点超越了如何对事务进行有效而机械的管理,更重视同别人进行有效的互动合作。以人为本的模式对于在家庭、组织和其他形式的团体中获得成功都是至关重要的

鉴于笔者个人的视角也有一定的局限性,对这部分答案感兴趣的读者,可以去阅读原著,来帮助找出一些适合自己实践的答案。

3. 基于系统与模型思维构建洞察力模型

众所周知,在数字化时代,我们每天都在与各种各样的系统交互,每一个表象背后都有一个黑盒子,黑盒子才是规律产生的原因,这个黑盒子也就是系统。

当系统运转正常的时候,我们在遵循着表象的规律做事,可一旦系统出了问题,这些规律将会失效。如果我们无法洞察表象背后的系统,就不可能知道问题出在哪里,更不知道如何解决。笔者在年轻时也不晓得这个道理,所以经常会固执坚守错误的认知,此后被社会打磨得多了,也就开始琢磨系统运行原理、锻炼自己的洞察力了。

洞察力模型就是:理解『表象』背后的『黑盒子』——系统,从而真正从本质上解决问题。在现实世界中,遇到问题,可以尝试摸索,但不要停留在一些似是而非的概念世界里。在知识付费时代,人们更容易陷入概念世界的迷障,我们应该继续尝试走进科学、知识的世界,甚至是智慧世界来抽象分析,然后结合实际情况降维打击具象世界(疫情期间从 B 站林超所长视频中学到的总结,有兴趣的可自己看原创视频):

系统与模型思维构建洞察力模型

系统是一组相互关联的要素,即:系统 = 要素 x 连接关系。在日常工作与生活中,要素是易识别,要素的关联关系容易被忽略,但问题的解决方案,常常就藏在这些『连接关系』里

因此,我们可基于拆解与关联的思路按照以下步骤进行:

1. 寻找因果关系,人与事、人与物、人与人之间均是如此。若洞察不了关联、因果关系,就一个字『乱』,信息熵越来越大,噪声信息越来越多。因此,我们可以不断拿起两个可能有关系的变量,问自己:他们之间有增强关系吗,有减弱关系吗?

2. 寻找增强回路,因果关系只是单向线段,有头有尾,作用效果从头传到尾就结束了。因此,我们需要继续思考是否能把结尾与开头也用一条线段连接起来形成一个增强回路。生活中有很多增强回路的示例:

3. 很多时候,我们的改善并不需要一直猛踩油门,有时只要松开刹车就好,在增强回路的成效越来越低时,很难再有突破,调节回路有助于改善增强回路带来的问题。

三个回路示意图

3.1. 增强回路小例子 🌰

长久以来,人们给增强回路导致的大起大落现象,起了无数的名字,常见的有:马太效应、经济学家口中的赢家通吃、金融学中的复利效应、互联网公司的指数型增长。

小事情推动靠聪明才智,比较长远的事情要靠建立正向的增强回路。2022 年底到2023 年末,大模型相当火爆,其背后的 OpenAI 更是成为影响力很大的公司,我们可有关注他们在内部协作的增强回路呢?

OpenAI 产品推动的思路是: The model is the product,将模型的新功能融入产品,在设计产品过程中与研究团队专注设计模型行为:

OpenAI 产品推动的思路

笔者是一个比较喜欢阅读的人,随着阅读时间的累加,也在逐步思考怎么才能将自己获得的『输入信息』变成有一定质量与正向效果的『输出』?

起初,只想到了一些常用的 Push 方法:多读书,多与别人沟通、请教,然后尝试去改善『输出』。

后来,也不知哪天突发奇想,想起了大学老师曾经在某节课堂上(幸亏当时没有在课上睡觉)提到的一个常见的商业管理模式:推拉模式(Push/Pull)。于是就将『输入』与『输出』简化为:听、说、读、写这四个因素,从 Push 与 Pull 两个方面来编排这四个因素,就能组成输入与输出之间的增强回路

推拉模式

让两者形成一个增强回路,变成一个自动运行的卷动机,效果就会比单独 Push 或 Pull 更好。

3.2. 调节回路

如果说增强回路的存在,是让这个世界走向极端,那么调节回路的存在,就是让这个世界回归平衡因为增强回路就是『狂卷』,追求极端,很容易陷入『目标隧道』,而调节回路,让人回归平衡、自然,在得到休息的同时增添乐趣

因此,我们在找到自己的增强回路后也需要借助调节回路,以及上述提到的平衡思维来落地调节回路,笔者这里就不做过多赘述。

当然,模型思维固然能帮助我们很好地实践,让自己变得简洁、清晰、透彻,但也有其局限性。在模型基本确定的情况下,其能力的『天花板』也随之确定,天花板的突破需要我们根据实际情况来持续丰富、升级自己的心智模型。

4. 重读数学的乐趣

NOTE

行文至此,基本到了最后一个专题:数学。鉴于许多人对数学有着又爱又恨的恐惧心理,笔者在这里保证不会引入一些复杂的公式,而是重在强调数学思维真的又底层又有用,更贴近人们常说的『第一性原理』

4.1. 怎么突然又学起数学了?

相信很多人都听说过分解、分类、排列、组合、四象限、流程等比较热门的词语,那么问题来了,我们是否梳理总结过自己真正实践、应用了多少呢?笔者还真的刻意梳理过:

组合示意图

在基础逻辑与行动指导、产出表述与写作训练阶段,只要肯花时间去学习领悟,并刻意训练,我们基本都能获得不错的效果。随着时间的积累,笔者逐渐发现自己在底层原理方面的抽象理解能力不是一般的薄弱:

因此,基于多方面遇到的问题,笔者就重新学起了数学:

4.2. 重新发现了有趣的数学思维

分解与分类、排列与组合

相信不少人已经比较熟悉『化繁为简』,『见缝插针』式事务管理。笔者这里依旧把『分解与分类、排列与组合』放在第一位,我们在接收九年义务教育时就开始学习这些,但很少有人能用这些比较简单的数学思维管理自己的时间与事务

笔者这里只提一个人:雷军,刨除后来的光环不讲,他当年在武汉大学读书时真的将这些应用得淋漓尽致,后来也在不少场合以经历回顾的方式传授给很多年轻人(感兴趣的可在网上搜一些更详细的资料)。所以,笔者也认为:一个人越早学会将『分解与分类、排列与组合』应用到工作与生活中越好,带来的正向效果特别多,活得不糊里糊涂,有自己的节奏感

多样性红利

假设一个方程代表从一个角度观察得到的结果,那么,如果我们从多个角度观察,就会得到方程组,求解方程组的过程就是整合多个角度的观察结果,找到最接近真相的答案:

病态方程组示意

图1:病态方程组:两条线特征近似,稍微发生变化就带来较大误差

兼顾多样性的方程组示意

图2:兼顾多样性的方程组

如果我们总是基于斜率非常接近的直线建立方程组,某条直线只要稍微变化一点,最终的答案就会有很大变化。通过病态方程组,我们可以更好地看清为什么多样性特别重要,多样性已经是一个公认的优势,任何人都会有认知盲点,站在不同角度的人在一起讨论后达成的共识往往最接近真相

因此,我们在日常工作生活中要试着平衡,运用多样性红利,不应该『过卷、过拟合』,否则容易导致适应性下降,碰到新环境就会各种不适应

这个世界是稀疏的

傅立叶在 1807 年提交了一篇论文,阐述了一个结论:任何一个连续的周期信号,都可以通过不同频率的正弦波叠加得出,这些正弦波前面的系数大部分为零,只有少部分系数描述了曲线的核心特征

傅立叶级数示意

图1:图片来自《心中有数,生活中的数学思维》

傅立叶级数系数示意

图2:图片来自《心中有数,生活中的数学思维》

熟悉数据压缩的读者应该知道这个原理,我们只需把少量比较大的系数对应的简单图像和对应的系数一起存起来,就可以恢复原始图像,且大大压缩了存储空间:

数据压缩示意

图片来自《心中有数,生活中的数学思维》

因此,我们在遇到比较复杂的问题时,不需要害怕,因为现实世界中的事物看似复杂,一旦转换为其他的表示方法后,通常是稀疏的。我们只需要拆解并关注少部分核心要素,以及它们之间的关联即可。稀疏无处不在,很多看起来复杂的现象背后所包含的规律,往往都是稀疏且简单的。

概率的世界观

笔者在 2023 年五一假期去『杭州宋城』游玩了一下,快结束时遇到了一个特别有意思的娱乐活动:"赌钱"。这里的 "赌钱"活动是游客拿着在宋城钱庄里兑换的、且消费一天后还剩余的零钱铜板去赌一把,碰碰运气,体验下宋朝的赌场。

规则很简单:拿着手里的铜板选择押大或押小,美丽的西子姑娘直接掷骰子,顾客赢了就给同样的下注铜板,庄家赢了就直接赢走下注的铜板。看似简单又粗暴的规则,一段时间下来,大部分游客基本都把仅剩的铜板留在了宋城,很少有顾客能赢。当然,笔者和朋友也不例外,不过还是采用了一个策略去反抗了下,让游戏时间延长一点:三个人约定分工,一人只能押大,另一人只能押小,最后一人拿着剩余的铜板自由调度选择押大押小。可终究没有改变最终的结果,相信熟悉 "大数定律"的人已经知道为什么了:只要一件事情发生的次数足够多,它出现某一个结果的频率就等于其概率。

宋城这个大庄家是活动举办方,一直有职员在玩,基本可以看成有 1/6 的概率稳赢,广大游客来宋城的目的是游玩,不是『赌钱』,玩得次数相对少太多,赢的概率远远比庄家少。笔者阐述这个『大数定律』的小例子,主要是想引出一些启发,觉得我们需要建立起概率的世界观:

AI 教会了我们哪些?

早在几年前,传统的机器学习都是通过『投喂』特定的训练数据给某个单一模型,训练完成后模型能够完成一些特定的任务,但当我们让模型去完成一些别的任务时,其表现就相当差。 我们可以发现,『单任务学习』看起来是集中精力做一件事,但聚焦于某一特定任务并不是最好的方式,因为特别容易忽略任务之间的关联。如果我们把不同任务放在一起训练,充分利用任务之间的关系,就很可能让最后训练出来的模型比单独训练出来的模型表现得更好。相信对大模型有一定了解的读者应该已经发现,这跟大语言模型的思路很像,随着训练数据的加大,大语言模型的表现越来越让人惊艳,尤其是自然语言理解方面。

这也引出了一些好的学习方法论:通识教育是相当重要的,一个人在学习时所使用的方式、思维模型和章法也是相当重要的。“技能”通常是针对某个特定的任务而言的,而“学习方法论”则可以应用于多个不同的任务。那些综合表现好的人,一般都掌握了好的学习方法论,借助这些学习方法论,可以经过短时间的学习就能较好地完成多个不同的任务。

5. 写在最后

行文至此,"疫情后的第一年向外体验" 也基本梳理完成了.在文章的最后,顺便交代下:这是笔者第一次在文章中大篇幅尝试引入数学相关的知识,鉴于数学功底有限,肯定存在不足之处,有兴趣的可阅读一些更专业的书籍

虽然不少人觉得大模型会成为新的泡沫,笔者这里也不好说看法是否对,但笔者曾阅读过 OpenAI 首席科学家,以及一些研究员早年写的博客,有一个比较共同的特点值得敬佩:即使有很多人在评论区质疑他们描述的 AGI,但他们大多坚信自己能搞出来通用人工智能,这些年也在用实践推动着 AI 的发展

随着大模型被广泛熟知,AI 应用与变革的路才刚刚开始,希望更多的人能主动思变,拥抱 AI。笔者也会努力继续深入学习 AI,自从再次深入学习 AI 知识后,作为工作几年后的打工人,有点觉得自己的心态变得年轻、有趣了

',77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; diff --git a/assets/about_growth_outer-experience.md.H37qqbXv.lean.js b/assets/about_growth_outer-experience.md.DniEKTlV.lean.js similarity index 97% rename from assets/about_growth_outer-experience.md.H37qqbXv.lean.js rename to assets/about_growth_outer-experience.md.DniEKTlV.lean.js index af80d76..a2646ff 100644 --- a/assets/about_growth_outer-experience.md.H37qqbXv.lean.js +++ b/assets/about_growth_outer-experience.md.DniEKTlV.lean.js @@ -1 +1 @@ -import{_ as s,c as r,o as i,d as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a("",77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; +import{_ as s,c as r,o as i,d as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a("",77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; diff --git a/assets/about_growth_weight-loss.md.CJOxYo7l.js b/assets/about_growth_weight-loss.md.n7uAYRkF.js similarity index 99% rename from assets/about_growth_weight-loss.md.CJOxYo7l.js rename to assets/about_growth_weight-loss.md.n7uAYRkF.js index 890df28..b041dbb 100644 --- a/assets/about_growth_weight-loss.md.CJOxYo7l.js +++ b/assets/about_growth_weight-loss.md.n7uAYRkF.js @@ -1 +1 @@ -import{_ as l,c as r,o,d as i}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i('

用科学与迭代改善的方式推动减肥这件小事

摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。

写在前面

在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。

因此,也就有了这篇减肥这件小事阶段随笔汇总。一方面来总结下前几个阶段的操作,在操作的过程中也有跟老同学、老朋友互相请教过,希望其中的一些操作能对需要的人有一定的帮助;另一方面也想借助网络平台,收集一些建议,来改善不足的地方。

从整体来讲,减肥的原因有以下几点:

直接原因 、错误纠正、深层次原因、榜样的影响都有了,也就需要考虑如何真真正正的进行尝试实践了。

1、前期准备

2、第一阶段

NOTE

第一阶段最重要的准则是:“管住嘴,迈开腿”

  1. 饮食限制时间和饭量

周末饮食保持正常

  1. 运动则选择每周至少三次在午休或晚休时间走一定的路,保证每日步数在5000 至 6000 步。
  2. 居家健身器材锻炼每周一到两次,不做过多要求。

第一阶段的时间大概维持了一个月,体重获得了 8 斤左右的下降。期间最大的困难是新习惯的建立比较难,原有的生活习惯时不时进入大脑,只能硬着头皮控制自己。由于周末没有做比较大的限制,体重也因为周末饮食不当陆续出现反弹,在下降 5 斤 到 8 斤之间跳跃。所以,周六加了一个项目:下午拍篮球 1个小时 + 遛弯1个小时,如果还有体力,骑行 30 分钟到 1个小时。这个雷打不动的项目引入,不但解决了周末饮食的主要问题,对习惯的养成起到了一定的正向作用

3、第二阶段

本阶段主要吸收更多减肥方面的常识和习惯来调整减肥策略:

这个阶段更注重强化减肥这件小事的目标合理性,以及其收益。看一些比较正向的文章,饥饿时转移注意力。业余跟老伙计保持财商与减肥方面的学习沟通,并强制每两天内必须在朋友圈至少打卡一次。

就这样,第二阶段的时间也大概维持了一个月,体重再次获得了 5 斤下降。在第二阶段快结束时遇到了体重基本不再下降,甚至一周基本保持不变的情况,经过分析体重外的指标发现:肌肉与脂肪指标数据不稳,两者基本保持此消彼长的竞争状态。基础代谢率有时达到标准状态,有时不达标

减肥这件事情可大可小,笔者在第二阶段时还属于身体管理小白,体重维持不变后基本不晓得怎么搞了。在这期间,从微信读书上找了本书,业余翻了翻,其中大部分的讲解或许对很多人有帮助,但对于笔者存在很多不可行之处。这个时候也想过在健身房报个班,每次想去健身房看看时,就会想到在学校毕业季曾因锻炼不当锻炼后疼了很久,后来健身房也就成了几个已经找到工作的懒人的澡堂子啦。这一次比较幸运,因为一次偶然的事情出现后,从大佬口中得知他在减体重时尝试过不吃主食。

不吃主食这个事情笔者个人之前没有尝试过,听起来在一定时间内或许不会有问题,但长期看对身体可能存在某些不好的地方。在查过一些资料文章后,笔者还是决定在第三阶段试试一段时间

4、第三阶段

第三阶段主要通过以下几个方面来继续把减肥这件小事执行下去:

  1. 进一步强化把握最终目标,引入平时处理项目的经验来管理、拆解目标:将总目标拆解为每 6 天至少减重 1 斤,每月体重下降至少 5 斤。另外,把日常看的时间管理相关书籍,也尝试应用于工作、生活和减肥这件小事上。
  2. 在保持第一和二阶段建立的习惯基础上,继续加大训练强度
  3. 饮食调整(工作日午饭和晚饭最多吃两天主食,且主食为半份糙米饭)

🥗 饮食表

时段可选项
早餐玉米/红薯 + 鸡蛋 + 低脂牛奶燕麦
玉米/红薯 + 鸡蛋羹 + 低脂牛奶燕麦
周末早饭玉米/红薯/豆腐 + 鸡蛋羹 + 低脂牛奶燕麦
午餐/晚餐素菜 + 小份轻食(含少部分主食)
鱼 + 素菜(不吃主食/半份糙米饭)
轻食一份
周末午餐/晚饭尝试使用鸡胸肉、扇贝肉、胡萝卜、西蓝花、玉米等食材搭配做一道简版轻食 + 燕麦/少量水饺
使用三文鱼、巴沙鱼片、虾仁等食材做一道菜或汤 + 燕麦/少量水饺
使用青椒、青菜、黄瓜、木耳、鸡蛋等食材做一到两道家常菜 + 燕麦/少量水饺

第三阶段也是大概维持了一个月,一直到 8 月底,在吃极少量主食和加大运动量的坚持下,体重又获得了 5—6斤的下降,虽然会呈现少部分波动,但基本能够控制住整体继续下降的趋势。这一阶段,对笔者来说取得了一些比较大的进步,这些进步不局限于减肥这件小事上:

5、第四阶段(2021.09)

第四阶段,即现阶段(9月份),正在通过以下几种方式来将减肥这件小事继续:

  1. 坚持执行拆解后的目标:每 6 天至少减重 1 斤,每月体重下降至少 5 斤
  2. 在保持第一、二、三阶段建立的习惯基础上,继续加大训练强度
  3. 饮食微调:整体保持第三阶段的执行,在尝试去观察改善
  4. 继续积累常识:保持业余通过看书或文章,与同事、同学和朋友交流等方式了解一些小常识。每周阅读1- 2篇专刊会 APP 中关于运动健康方面的杂志文章,了解一些常识。
  5. 关注并优化体重秤日常的 总体重、基础代谢率、肌肉、水分等指标:

现阶段也需要维持一个月,如果出现反弹情况,甚至需要花费两个月。当前目标、运动、饮食调整基本正常执行,指标与业余学习和交流后续希望以周为单位推进。

结尾

以上仅仅是结合个人实践的记录,还需要进一步实验下去,估计未必适合每一个人。我们迈入社会后,难免会看到社会用各种属性来评判一个人。在这所更大的学校中,笔者感觉自己属于转变比较慢的一批人。

之前很多同学和朋友甚至早已融入到社会之中,而笔者个人觉得自己从 2020 年才转变为社会人。快与慢只是表象,只要能把握住规则的脉搏,结合自己的习惯和节奏也可以慢慢上轨,纵然中间有一些偏差或挫折,但触底反弹,反省自身的不足会有新的领悟境界

',38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; +import{_ as l,c as r,o,d as i}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i('

用科学与迭代改善的方式推动减肥这件小事

摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。

写在前面

在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。

因此,也就有了这篇减肥这件小事阶段随笔汇总。一方面来总结下前几个阶段的操作,在操作的过程中也有跟老同学、老朋友互相请教过,希望其中的一些操作能对需要的人有一定的帮助;另一方面也想借助网络平台,收集一些建议,来改善不足的地方。

从整体来讲,减肥的原因有以下几点:

直接原因 、错误纠正、深层次原因、榜样的影响都有了,也就需要考虑如何真真正正的进行尝试实践了。

1、前期准备

2、第一阶段

NOTE

第一阶段最重要的准则是:“管住嘴,迈开腿”

  1. 饮食限制时间和饭量

周末饮食保持正常

  1. 运动则选择每周至少三次在午休或晚休时间走一定的路,保证每日步数在5000 至 6000 步。
  2. 居家健身器材锻炼每周一到两次,不做过多要求。

第一阶段的时间大概维持了一个月,体重获得了 8 斤左右的下降。期间最大的困难是新习惯的建立比较难,原有的生活习惯时不时进入大脑,只能硬着头皮控制自己。由于周末没有做比较大的限制,体重也因为周末饮食不当陆续出现反弹,在下降 5 斤 到 8 斤之间跳跃。所以,周六加了一个项目:下午拍篮球 1个小时 + 遛弯1个小时,如果还有体力,骑行 30 分钟到 1个小时。这个雷打不动的项目引入,不但解决了周末饮食的主要问题,对习惯的养成起到了一定的正向作用

3、第二阶段

本阶段主要吸收更多减肥方面的常识和习惯来调整减肥策略:

这个阶段更注重强化减肥这件小事的目标合理性,以及其收益。看一些比较正向的文章,饥饿时转移注意力。业余跟老伙计保持财商与减肥方面的学习沟通,并强制每两天内必须在朋友圈至少打卡一次。

就这样,第二阶段的时间也大概维持了一个月,体重再次获得了 5 斤下降。在第二阶段快结束时遇到了体重基本不再下降,甚至一周基本保持不变的情况,经过分析体重外的指标发现:肌肉与脂肪指标数据不稳,两者基本保持此消彼长的竞争状态。基础代谢率有时达到标准状态,有时不达标

减肥这件事情可大可小,笔者在第二阶段时还属于身体管理小白,体重维持不变后基本不晓得怎么搞了。在这期间,从微信读书上找了本书,业余翻了翻,其中大部分的讲解或许对很多人有帮助,但对于笔者存在很多不可行之处。这个时候也想过在健身房报个班,每次想去健身房看看时,就会想到在学校毕业季曾因锻炼不当锻炼后疼了很久,后来健身房也就成了几个已经找到工作的懒人的澡堂子啦。这一次比较幸运,因为一次偶然的事情出现后,从大佬口中得知他在减体重时尝试过不吃主食。

不吃主食这个事情笔者个人之前没有尝试过,听起来在一定时间内或许不会有问题,但长期看对身体可能存在某些不好的地方。在查过一些资料文章后,笔者还是决定在第三阶段试试一段时间

4、第三阶段

第三阶段主要通过以下几个方面来继续把减肥这件小事执行下去:

  1. 进一步强化把握最终目标,引入平时处理项目的经验来管理、拆解目标:将总目标拆解为每 6 天至少减重 1 斤,每月体重下降至少 5 斤。另外,把日常看的时间管理相关书籍,也尝试应用于工作、生活和减肥这件小事上。
  2. 在保持第一和二阶段建立的习惯基础上,继续加大训练强度
  3. 饮食调整(工作日午饭和晚饭最多吃两天主食,且主食为半份糙米饭)

🥗 饮食表

时段可选项
早餐玉米/红薯 + 鸡蛋 + 低脂牛奶燕麦
玉米/红薯 + 鸡蛋羹 + 低脂牛奶燕麦
周末早饭玉米/红薯/豆腐 + 鸡蛋羹 + 低脂牛奶燕麦
午餐/晚餐素菜 + 小份轻食(含少部分主食)
鱼 + 素菜(不吃主食/半份糙米饭)
轻食一份
周末午餐/晚饭尝试使用鸡胸肉、扇贝肉、胡萝卜、西蓝花、玉米等食材搭配做一道简版轻食 + 燕麦/少量水饺
使用三文鱼、巴沙鱼片、虾仁等食材做一道菜或汤 + 燕麦/少量水饺
使用青椒、青菜、黄瓜、木耳、鸡蛋等食材做一到两道家常菜 + 燕麦/少量水饺

第三阶段也是大概维持了一个月,一直到 8 月底,在吃极少量主食和加大运动量的坚持下,体重又获得了 5—6斤的下降,虽然会呈现少部分波动,但基本能够控制住整体继续下降的趋势。这一阶段,对笔者来说取得了一些比较大的进步,这些进步不局限于减肥这件小事上:

5、第四阶段(2021.09)

第四阶段,即现阶段(9月份),正在通过以下几种方式来将减肥这件小事继续:

  1. 坚持执行拆解后的目标:每 6 天至少减重 1 斤,每月体重下降至少 5 斤
  2. 在保持第一、二、三阶段建立的习惯基础上,继续加大训练强度
  3. 饮食微调:整体保持第三阶段的执行,在尝试去观察改善
  4. 继续积累常识:保持业余通过看书或文章,与同事、同学和朋友交流等方式了解一些小常识。每周阅读1- 2篇专刊会 APP 中关于运动健康方面的杂志文章,了解一些常识。
  5. 关注并优化体重秤日常的 总体重、基础代谢率、肌肉、水分等指标:

现阶段也需要维持一个月,如果出现反弹情况,甚至需要花费两个月。当前目标、运动、饮食调整基本正常执行,指标与业余学习和交流后续希望以周为单位推进。

结尾

以上仅仅是结合个人实践的记录,还需要进一步实验下去,估计未必适合每一个人。我们迈入社会后,难免会看到社会用各种属性来评判一个人。在这所更大的学校中,笔者感觉自己属于转变比较慢的一批人。

之前很多同学和朋友甚至早已融入到社会之中,而笔者个人觉得自己从 2020 年才转变为社会人。快与慢只是表象,只要能把握住规则的脉搏,结合自己的习惯和节奏也可以慢慢上轨,纵然中间有一些偏差或挫折,但触底反弹,反省自身的不足会有新的领悟境界

',38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; diff --git a/assets/about_growth_weight-loss.md.CJOxYo7l.lean.js b/assets/about_growth_weight-loss.md.n7uAYRkF.lean.js similarity index 97% rename from assets/about_growth_weight-loss.md.CJOxYo7l.lean.js rename to assets/about_growth_weight-loss.md.n7uAYRkF.lean.js index c2b2ebd..7225acb 100644 --- a/assets/about_growth_weight-loss.md.CJOxYo7l.lean.js +++ b/assets/about_growth_weight-loss.md.n7uAYRkF.lean.js @@ -1 +1 @@ -import{_ as l,c as r,o,d as i}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i("",38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; +import{_ as l,c as r,o,d as i}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i("",38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; diff --git a/assets/about_me.md.-7r9zfxP.js b/assets/about_me.md.BZPZvAJ3.js similarity index 99% rename from assets/about_me.md.-7r9zfxP.js rename to assets/about_me.md.BZPZvAJ3.js index 2755ceb..6473e62 100644 --- a/assets/about_me.md.-7r9zfxP.js +++ b/assets/about_me.md.BZPZvAJ3.js @@ -1 +1 @@ -import{_ as t,c as s,o as n,d as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const e="/img/cover/about_site_bg.png",g=JSON.parse('{"title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","frontmatter":{"date":"2025-08-29T09:40:53.000Z","title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png","permalink":"/about/me","categories":["关于"]},"headers":[],"relativePath":"about/me.md","filePath":"40.关于/01.关于我.md"}'),r={name:"about/me.md"};function m(i,a,l,p,c,h){return n(),s("div",null,[...a[0]||(a[0]=[o('

关于我

我是谁

我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力

自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。

Insight Stack = Engineering Logic × Product Sense × AI Force

目前,我主要在折腾实践以下几个方向:

我的认知迭代

在很长一段时间里,我和大多数开发者一样,认为"全栈"就是收集更多的技术徽章:从 React 到 NestJS,从 Python 到 Rust。我曾以为技术的广度、扎实的工程化能力就是护城河。

但在 AI 重构代码生产方式与编程范式的今天,我意识到规则变了。现在的我,不再执着于手里有多少把锤子,而更关注能构建出怎样的建筑,也更愿意将自己定义为一个 "Product Engineer" (产品型工程师)"AI-Augmented Builder" (AI 增强型构建者)

在这个博客 Insight Stack 中,记录了我对技术角色的重新思考,我相信未来的全栈不再是线性的技能堆叠,而是一个新的全栈价值公式:

Full Stack=(Engineering+Product)×AI\\mathbf{Full\\ Stack} \\; = \\; (\\mathbf{Engineering} \\; + \\; \\mathbf{Product}) \\; \\times \\; \\mathbf{AI}

如果你对这些思考感兴趣,推荐阅读我的两篇核心文章:

关于本站

Insight Stack 是我的数字花园,也是我践行上述理念的实验场之一。我把它定义为 "一个探索全栈工程、产品思维与 LLM 交叉领域的数字花园"

这里的 Stack 有两层含义:

我不希望这里只是枯燥的代码片段或简单的技术分享与总结,我希望你看到的是一个工程师对 LLM 落地路径的真实探索,对 产品 Sense 这一核心能力的深度复盘,以及个人在技术浪潮中的成长记录。

值得一提的是,本站也是人机协作(Human-AI Collaboration)的产物。 在文章的构思与润色过程中,我深度使用了 Gemini/Claude 等模型作为"主要配角"。我经常与它们发起激烈的"辩论",利用 AI 来打破思维盲区。我认为,能够熟练地与 AI 共舞,将是新一代工程师最核心的元能力

当然,一些文章在撰写过程中,我也应用了 AI,甚至用 Gemini3 Pro/Claude 来辅助我创作,并发起过不少"人机辩论"。因为我认为,AI 可以帮助我们更快、更准确地表达自己的思想,也可以帮助我们发现新的角度、新的解决方案。

❤️ 致谢

Insight Stack Blog 博客站点主要基于 VitePressvitepress-theme-teek 搭建而成。

about site background

特别感谢开源社区赋予我们如此强大的工具,让我能将精力聚焦于内容的创作,而非重复造轮子。本站的核心架构基于以下优秀项目构建:

连接与交流

最好的学习是公开分享,最快的成长是与优秀者同行。无论是探讨全栈AI 编程与应用Agent 落地,还是交流产品心得,都非常欢迎你联系我~

联系方式

',30)])])}const u=t(r,[["render",m]]);export{g as __pageData,u as default}; +import{_ as t,c as s,o as n,d as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const e="/img/cover/about_site_bg.png",g=JSON.parse('{"title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","frontmatter":{"date":"2025-08-29T09:40:53.000Z","title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png","permalink":"/about/me","categories":["关于"]},"headers":[],"relativePath":"about/me.md","filePath":"40.关于/01.关于我.md"}'),r={name:"about/me.md"};function m(i,a,l,p,c,h){return n(),s("div",null,[...a[0]||(a[0]=[o('

关于我

我是谁

我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力

自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。

Insight Stack = Engineering Logic × Product Sense × AI Force

目前,我主要在折腾实践以下几个方向:

我的认知迭代

在很长一段时间里,我和大多数开发者一样,认为"全栈"就是收集更多的技术徽章:从 React 到 NestJS,从 Python 到 Rust。我曾以为技术的广度、扎实的工程化能力就是护城河。

但在 AI 重构代码生产方式与编程范式的今天,我意识到规则变了。现在的我,不再执着于手里有多少把锤子,而更关注能构建出怎样的建筑,也更愿意将自己定义为一个 "Product Engineer" (产品型工程师)"AI-Augmented Builder" (AI 增强型构建者)

在这个博客 Insight Stack 中,记录了我对技术角色的重新思考,我相信未来的全栈不再是线性的技能堆叠,而是一个新的全栈价值公式:

Full Stack=(Engineering+Product)×AI\\mathbf{Full\\ Stack} \\; = \\; (\\mathbf{Engineering} \\; + \\; \\mathbf{Product}) \\; \\times \\; \\mathbf{AI}

如果你对这些思考感兴趣,推荐阅读我的两篇核心文章:

关于本站

Insight Stack 是我的数字花园,也是我践行上述理念的实验场之一。我把它定义为 "一个探索全栈工程、产品思维与 LLM 交叉领域的数字花园"

这里的 Stack 有两层含义:

我不希望这里只是枯燥的代码片段或简单的技术分享与总结,我希望你看到的是一个工程师对 LLM 落地路径的真实探索,对 产品 Sense 这一核心能力的深度复盘,以及个人在技术浪潮中的成长记录。

值得一提的是,本站也是人机协作(Human-AI Collaboration)的产物。 在文章的构思与润色过程中,我深度使用了 Gemini/Claude 等模型作为"主要配角"。我经常与它们发起激烈的"辩论",利用 AI 来打破思维盲区。我认为,能够熟练地与 AI 共舞,将是新一代工程师最核心的元能力

当然,一些文章在撰写过程中,我也应用了 AI,甚至用 Gemini3 Pro/Claude 来辅助我创作,并发起过不少"人机辩论"。因为我认为,AI 可以帮助我们更快、更准确地表达自己的思想,也可以帮助我们发现新的角度、新的解决方案。

❤️ 致谢

Insight Stack Blog 博客站点主要基于 VitePressvitepress-theme-teek 搭建而成。

about site background

特别感谢开源社区赋予我们如此强大的工具,让我能将精力聚焦于内容的创作,而非重复造轮子。本站的核心架构基于以下优秀项目构建:

连接与交流

最好的学习是公开分享,最快的成长是与优秀者同行。无论是探讨全栈AI 编程与应用Agent 落地,还是交流产品心得,都非常欢迎你联系我~

联系方式

',30)])])}const u=t(r,[["render",m]]);export{g as __pageData,u as default}; diff --git a/assets/about_me.md.-7r9zfxP.lean.js b/assets/about_me.md.BZPZvAJ3.lean.js similarity index 94% rename from assets/about_me.md.-7r9zfxP.lean.js rename to assets/about_me.md.BZPZvAJ3.lean.js index 9a4ad15..0165d45 100644 --- a/assets/about_me.md.-7r9zfxP.lean.js +++ b/assets/about_me.md.BZPZvAJ3.lean.js @@ -1 +1 @@ -import{_ as t,c as s,o as n,d as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const e="/img/cover/about_site_bg.png",g=JSON.parse('{"title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","frontmatter":{"date":"2025-08-29T09:40:53.000Z","title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png","permalink":"/about/me","categories":["关于"]},"headers":[],"relativePath":"about/me.md","filePath":"40.关于/01.关于我.md"}'),r={name:"about/me.md"};function m(i,a,l,p,c,h){return n(),s("div",null,[...a[0]||(a[0]=[o("",30)])])}const u=t(r,[["render",m]]);export{g as __pageData,u as default}; +import{_ as t,c as s,o as n,d as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const e="/img/cover/about_site_bg.png",g=JSON.parse('{"title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","frontmatter":{"date":"2025-08-29T09:40:53.000Z","title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png","permalink":"/about/me","categories":["关于"]},"headers":[],"relativePath":"about/me.md","filePath":"40.关于/01.关于我.md"}'),r={name:"about/me.md"};function m(i,a,l,p,c,h){return n(),s("div",null,[...a[0]||(a[0]=[o("",30)])])}const u=t(r,[["render",m]]);export{g as __pageData,u as default}; diff --git a/assets/ai-coding_ai-change-work-workflow.md.Cf1dGJ-F.js b/assets/ai-coding_ai-change-work-workflow.md.Dfds8zzd.js similarity index 99% rename from assets/ai-coding_ai-change-work-workflow.md.Cf1dGJ-F.js rename to assets/ai-coding_ai-change-work-workflow.md.Dfds8zzd.js index c548b4e..92dffd1 100644 --- a/assets/ai-coding_ai-change-work-workflow.md.Cf1dGJ-F.js +++ b/assets/ai-coding_ai-change-work-workflow.md.Dfds8zzd.js @@ -1 +1 @@ -import{H as a}from"./chunks/HighLightText.pXHFEzDb.js";import{c as l,o as s,a as o,d as i,e as r,b as n,w as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const p={class:"tip custom-block"},c=JSON.parse('{"title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","frontmatter":{"date":"2025-12-06T22:05:50.000Z","title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","permalink":"/ai-coding/ai-change-work-workflow/","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-change-work-workflow.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md"}'),u={name:"ai-coding/ai-change-work-workflow.md"},I=Object.assign(u,{setup(d){return(A,t)=>(s(),l("div",null,[t[10]||(t[10]=o("h1",{id:"读-anthropic-研究报告-探寻-ai-时代的工程范式重塑",tabindex:"-1"},[r("读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑 "),o("a",{class:"header-anchor",href:"#读-anthropic-研究报告-探寻-ai-时代的工程范式重塑","aria-label":"Permalink to “读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑”"},"​")],-1)),t[11]||(t[11]=o("blockquote",null,[o("p",null,[o("strong",null,"摘要总结"),r(":软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。")])],-1)),o("div",p,[t[3]||(t[3]=i('

博客原文

地址How AI is transforming work at Anthropic

核心标签AI辅助编程 工程 范式转移 工作转型 生产力提升 技能发展 人机协作

一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一场关于工程范式与职业认同的重塑。

',4)),o("p",null,[t[1]||(t[1]=o("strong",null,"延伸思考",-1)),t[2]||(t[2]=r(":",-1)),n(a,{type:"note",bold:""},{default:e(()=>[...t[0]||(t[0]=[r("工程团队要用多少年,才会把现在的'人+AI 协作方式',沉淀为一个稳定的工程范式?",-1)])]),_:1})])]),t[12]||(t[12]=i('

1. 引言

软件工程的历史,本质上是一部不断通过“抽象”来对抗“复杂度”的进化史。从汇编语言到高级语言,从手动内存管理到垃圾回收,每一次抽象层的上移,都会让一部分曾经引以为傲的手艺淡出舞台,同时释放出更宏大的创造力。

2025 年底,Anthropic 发布了一份具有里程碑意义的研究报告:《AI 如何改变 Anthropic 的工作方式》。作为大模型的缔造者,Anthropic 将自己变成了一个“AI 时代工作范式的实验室”。他们不仅向外输出模型,更在内部深度观测:当工程师拥有了像 Claude 这样具备自主能力的“AI 同事”后,代码的生产流程、团队的协作边界、甚至是“工程师”这一职业的底层逻辑,究竟发生了怎样的质变?

这份报告揭示了一组迷人且令人警醒的数据:在 AI 辅助下,工程师们不仅在提速,更在处理那 27% 曾经“不划算”或“超出能力边界”的任务。然而,光鲜的数据背后,是“编程技能萎缩”的隐忧和“监督悖论”的挑战。

站在产品与应用工程师的角度看,我最关心的不仅是“AI 能写多快”,而是如何将这种碎片化的、依赖“灵感”的 AI 协作,沉淀为一套稳定的工程范式

本文将基于 Anthropic 的这份深度观测,结合我们在 AI Native 应用架构、以及“规格驱动开发(SDD)”中的一些实践,探讨三个核心命题:

2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%

一句话总结:

AI 对工程团队的真正馈赠,是让我们从繁琐的、“不得不做”的苦力活中抽身,去夺回对软件质量的掌控力。速度是副产品,质量的密度才是衡量 AI 协作水平的终极标准。

在讨论 AI 提效时,我们很容易掉入的陷阱就是 “速度幻觉”。如果单纯观察代码产出行数(LOC)或需求交付周期,我们可能会得出“工程师变快了”的浅层结论,但 Anthropic 的研究给出了一个更具洞察力的视角:AI 带来的最大变量,不是让既有任务变快了,而是改变了“任务的构成比例”

报告中提到的那个关键数字——27%,代表了那些如果没有 AI 辅助,工程师根本不会去碰的任务。这 27% 并非边缘工作,而是软件工程中长期被牺牲掉的“工程尊严”。

2.1 从"技术债务"到"系统韧性"

在传统开发模式下,那些遗留的烂代码、缺失的测试覆盖、疏于维护的内部工具——这些"技术债务"虽不至于让系统立刻崩溃,却如同慢性毒药,持续侵蚀团队的认知资源与开发效率。

Anthropic 的观察揭示了一个关键转折点:当 AI 介入后,清偿这些"技术债务"的成本首次降到了可接受的阈值之下。

2.2 从"不划算"到"高价值":任务优先级的重新洗牌

作为产品工程师,我们每天都在做取舍:哪些任务值得投入时间,哪些只能往后放?过去,很多工程改进任务——比如增加可观测性的埋点、搭建内部性能看板——虽然对系统长期健康很重要,但因为做起来太费功夫,往往被无限期搁置。我们心里都明白这些任务有价值,但"性价比"太低,排不上优先级。

AI 的出现改变了这个算式。它像一根杠杆,把那些原本需要花费大量时间的繁琐工作,变成了可以快速完成的"轻量级任务"。过去可能要花一整天写的监控脚本,现在几分钟就能让 AI 生成初稿;以前需要专门排期的重构工作,现在可以随手完成。

这意味着什么?那些曾经因为"太麻烦"而被忽视的任务,现在突然变得"很划算"了。团队不再只是追求开发速度,而是有能力把系统打磨得更健壮、更可维护。我们不再只是跑得更快,而是能跑得更稳、更远。

2.3 跨领域能力的“无痛溢出”

研究还揭示了一个引人注目的现象:工程师的角色边界正在变得愈发模糊,"全栈化"趋势日益明显。

这种能力的自然延伸并非意味着人人都成为通才,而是 AI 将跨领域协作的摩擦成本大幅降低。当技术壁垒被削平,原本需要数周协调的跨职能配合,如今可在数小时内完成闭环验证——反馈周期实现了量级压缩。

3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense

一句话总结:

抽象层的上移并不意味着底层知识的贬值,反而意味着识别平庸的能力变得空前昂贵。当每个人都有一个能写代码的 AI 同事时,你对“完美工程”的定义能力,决定了你在这个时代的价值上限。

当编程的门槛降低到“只要会说话就能写代码”时,软件工程正经历一场权力的交接:自然语言(英语/中文)正在成为最高级的编程语言。

这种转变带来了一种极其诱人的“Vibe Coding(凭感觉编程)”体验。然而,Anthropic 的研究揭示了一个冷酷的现实:AI 往往表现得像一个“极其聪明但缺乏责任感的初级工程师”。如果我们全盘接受这种便利,而不去有意识地重构自身的职业能力,我们可能会陷入一种“监督悖论(Supervision Paradox)”——即当你失去了手动解决问题的能力时,你也失去了监督 AI 的资格。

3.1 警惕“监督悖论”与能力的平庸化

Anthropic 的报告中提到,有效使用 AI 需要极强的“监督力”,而这种能力恰恰源于那些正在被 AI 取代的底层编码实践。这种转变催生了一个深刻的监督悖论:

(附带学习)的丧失: 过去我们在翻阅文档、调试 Bug 的痛苦过程中,会意外学到系统的运行机理。AI 直接给出答案,切断了这种深度学习的路径。

AI Free 的刻意练习:每周或每个迭代,挑选一个核心逻辑块,尝试在完全不求助 AI 的情况下,手写实现并进行性能调优。这就像飞行员必须定期进行手动起降练习一样,是保持底层“肌肉记忆”的唯一方式。

3.2 从 Vibe Coding 进化到规范驱动(SDD)

为了不让工程质量滑向“随机性”的深渊,我们需要将“凭感觉”转化为 “定规范”。在“英语即编程语言”的时代,工程师的独特价值不再是实现细节,而是对约束条件的定义。

3.3. 构建新型“工程 Sense”:从手艺人到导演

未来的高级工程师,其核心竞争力将体现在对品味与评判权的掌控上。

4. 范式落地——在随机性之上,构建确定性的工程基座

一句话总结:

范式的落地不是一蹴而就的规则设定,而是一场伴随模型能力进化的动态博弈。我们要构建的是一套 “宽容输入、严格输出” 的链路:给 AI 足够的空间去创造和提效,但在交付的最后一公里,用最传统的工程理性进行最严苛的审判。

如果说 AI 是一台拥有无限爆发力的引擎,那么软件工程范式就是承载它的底盘。当前最核心的矛盾在于:大模型本质上是概率性的,而工程交付要求的却是确定性的。

如何让"不确定的生成"进化为"可交付的代码"?这不只是技术层面的挑战,更是一个关于全链路治理的系统性命题。我们不能以静态的视角审视现有工具,而需要动态地观察 LLM 能力演进、Agent 架构革新与传统工程设施的深度融合与协同演化。

4.1 从“单点指令”转向“多智能体编排(Multi-Agent Orchestration)”

正如 Anthropic 内部使用 Claude Code 处理日益复杂的任务,未来的落地范式绝非"人与单一窗口的对话",而是一个闭环的多智能体协作流水线。

4.2 构建"上下文护城河":从 Prompt 到知识图谱

AI 输出的质量,本质上取决于它对业务语境的理解深度。当前最大的工程化障碍,正是模型面对团队私有知识时的"冷启动"困境——它缺乏对特定代码规范、架构决策和历史演进的隐性认知。

4.3 "可观测性":让 AI 的决策过程透明可见

传统 DevOps 关注的是服务器负载、响应时间等机器指标;而在 AI 工程时代,我们需要追踪的是 AI 的"思考过程"。

4.4 拥抱"不确定性",但守住"质量底线"

我们需要认清一个现实:未来的软件开发将是人与 AI 协作的过渡态,不会是非黑即白的完全自动化。与其追求每一步都人工可控,不如确保最终结果可验证、可信赖

这意味着工程团队的核心能力要从"亲自写代码"转向 "搭建完善的评估体系"。只要你的测试、监控、回滚机制足够健壮,即使 AI 的输出带有一定随机性,也能被牢牢限制在安全的边界之内。

5. 结语

Anthropic 的这份报告,本质上是为我们展现了一个软件工程的“后工业时代”。在这个时代,AI 不是取代你的收割机,而是给了你“一百万匹马”的爆发力。

',56)),o("p",null,[t[5]||(t[5]=r("正如报告中所揭示的那样:我们不应再纠结于单应仰望更高应仰望更高维度的景观。",-1)),n(a,{bold:""},{default:e(()=>[...t[4]||(t[4]=[r("当写代码变得不再昂贵,对“什么是好代码”的定义权,以及对“系统为何而存在”的理解力,便成了这个行业最后的稀缺品",-1)])]),_:1}),t[6]||(t[6]=r("。",-1))]),t[13]||(t[13]=o("p",null,"未来,最优秀的工程师或许不再是那个能手写极致算法的人,而是那个能在随机生成的迷雾中,凭借深厚的底层功底,一眼识破平庸与风险,并为 AI 指明方向的人。",-1)),o("p",null,[t[8]||(t[8]=r("范式的沉淀或许仍需时间,请务必在享受 AI 提效的同时,刻意保持你的技术尖锐度。因为 ",-1)),n(a,{type:"warning",bold:""},{default:e(()=>[...t[7]||(t[7]=[r("在“机器执行”的洪流下,人类的品位与责任感,依然是软件工程中那道最坚固、也最温暖的防御线",-1)])]),_:1}),t[9]||(t[9]=r("。",-1))])]))}});export{c as __pageData,I as default}; +import{H as a}from"./chunks/HighLightText.DNC3BKyb.js";import{c as l,o as s,a as o,d as i,e as r,b as n,w as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const p={class:"tip custom-block"},c=JSON.parse('{"title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","frontmatter":{"date":"2025-12-06T22:05:50.000Z","title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","permalink":"/ai-coding/ai-change-work-workflow/","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-change-work-workflow.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md"}'),u={name:"ai-coding/ai-change-work-workflow.md"},I=Object.assign(u,{setup(d){return(A,t)=>(s(),l("div",null,[t[10]||(t[10]=o("h1",{id:"读-anthropic-研究报告-探寻-ai-时代的工程范式重塑",tabindex:"-1"},[r("读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑 "),o("a",{class:"header-anchor",href:"#读-anthropic-研究报告-探寻-ai-时代的工程范式重塑","aria-label":"Permalink to “读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑”"},"​")],-1)),t[11]||(t[11]=o("blockquote",null,[o("p",null,[o("strong",null,"摘要总结"),r(":软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。")])],-1)),o("div",p,[t[3]||(t[3]=i('

博客原文

地址How AI is transforming work at Anthropic

核心标签AI辅助编程 工程 范式转移 工作转型 生产力提升 技能发展 人机协作

一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一场关于工程范式与职业认同的重塑。

',4)),o("p",null,[t[1]||(t[1]=o("strong",null,"延伸思考",-1)),t[2]||(t[2]=r(":",-1)),n(a,{type:"note",bold:""},{default:e(()=>[...t[0]||(t[0]=[r("工程团队要用多少年,才会把现在的'人+AI 协作方式',沉淀为一个稳定的工程范式?",-1)])]),_:1})])]),t[12]||(t[12]=i('

1. 引言

软件工程的历史,本质上是一部不断通过“抽象”来对抗“复杂度”的进化史。从汇编语言到高级语言,从手动内存管理到垃圾回收,每一次抽象层的上移,都会让一部分曾经引以为傲的手艺淡出舞台,同时释放出更宏大的创造力。

2025 年底,Anthropic 发布了一份具有里程碑意义的研究报告:《AI 如何改变 Anthropic 的工作方式》。作为大模型的缔造者,Anthropic 将自己变成了一个“AI 时代工作范式的实验室”。他们不仅向外输出模型,更在内部深度观测:当工程师拥有了像 Claude 这样具备自主能力的“AI 同事”后,代码的生产流程、团队的协作边界、甚至是“工程师”这一职业的底层逻辑,究竟发生了怎样的质变?

这份报告揭示了一组迷人且令人警醒的数据:在 AI 辅助下,工程师们不仅在提速,更在处理那 27% 曾经“不划算”或“超出能力边界”的任务。然而,光鲜的数据背后,是“编程技能萎缩”的隐忧和“监督悖论”的挑战。

站在产品与应用工程师的角度看,我最关心的不仅是“AI 能写多快”,而是如何将这种碎片化的、依赖“灵感”的 AI 协作,沉淀为一套稳定的工程范式

本文将基于 Anthropic 的这份深度观测,结合我们在 AI Native 应用架构、以及“规格驱动开发(SDD)”中的一些实践,探讨三个核心命题:

2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%

一句话总结:

AI 对工程团队的真正馈赠,是让我们从繁琐的、“不得不做”的苦力活中抽身,去夺回对软件质量的掌控力。速度是副产品,质量的密度才是衡量 AI 协作水平的终极标准。

在讨论 AI 提效时,我们很容易掉入的陷阱就是 “速度幻觉”。如果单纯观察代码产出行数(LOC)或需求交付周期,我们可能会得出“工程师变快了”的浅层结论,但 Anthropic 的研究给出了一个更具洞察力的视角:AI 带来的最大变量,不是让既有任务变快了,而是改变了“任务的构成比例”

报告中提到的那个关键数字——27%,代表了那些如果没有 AI 辅助,工程师根本不会去碰的任务。这 27% 并非边缘工作,而是软件工程中长期被牺牲掉的“工程尊严”。

2.1 从"技术债务"到"系统韧性"

在传统开发模式下,那些遗留的烂代码、缺失的测试覆盖、疏于维护的内部工具——这些"技术债务"虽不至于让系统立刻崩溃,却如同慢性毒药,持续侵蚀团队的认知资源与开发效率。

Anthropic 的观察揭示了一个关键转折点:当 AI 介入后,清偿这些"技术债务"的成本首次降到了可接受的阈值之下。

2.2 从"不划算"到"高价值":任务优先级的重新洗牌

作为产品工程师,我们每天都在做取舍:哪些任务值得投入时间,哪些只能往后放?过去,很多工程改进任务——比如增加可观测性的埋点、搭建内部性能看板——虽然对系统长期健康很重要,但因为做起来太费功夫,往往被无限期搁置。我们心里都明白这些任务有价值,但"性价比"太低,排不上优先级。

AI 的出现改变了这个算式。它像一根杠杆,把那些原本需要花费大量时间的繁琐工作,变成了可以快速完成的"轻量级任务"。过去可能要花一整天写的监控脚本,现在几分钟就能让 AI 生成初稿;以前需要专门排期的重构工作,现在可以随手完成。

这意味着什么?那些曾经因为"太麻烦"而被忽视的任务,现在突然变得"很划算"了。团队不再只是追求开发速度,而是有能力把系统打磨得更健壮、更可维护。我们不再只是跑得更快,而是能跑得更稳、更远。

2.3 跨领域能力的“无痛溢出”

研究还揭示了一个引人注目的现象:工程师的角色边界正在变得愈发模糊,"全栈化"趋势日益明显。

这种能力的自然延伸并非意味着人人都成为通才,而是 AI 将跨领域协作的摩擦成本大幅降低。当技术壁垒被削平,原本需要数周协调的跨职能配合,如今可在数小时内完成闭环验证——反馈周期实现了量级压缩。

3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense

一句话总结:

抽象层的上移并不意味着底层知识的贬值,反而意味着识别平庸的能力变得空前昂贵。当每个人都有一个能写代码的 AI 同事时,你对“完美工程”的定义能力,决定了你在这个时代的价值上限。

当编程的门槛降低到“只要会说话就能写代码”时,软件工程正经历一场权力的交接:自然语言(英语/中文)正在成为最高级的编程语言。

这种转变带来了一种极其诱人的“Vibe Coding(凭感觉编程)”体验。然而,Anthropic 的研究揭示了一个冷酷的现实:AI 往往表现得像一个“极其聪明但缺乏责任感的初级工程师”。如果我们全盘接受这种便利,而不去有意识地重构自身的职业能力,我们可能会陷入一种“监督悖论(Supervision Paradox)”——即当你失去了手动解决问题的能力时,你也失去了监督 AI 的资格。

3.1 警惕“监督悖论”与能力的平庸化

Anthropic 的报告中提到,有效使用 AI 需要极强的“监督力”,而这种能力恰恰源于那些正在被 AI 取代的底层编码实践。这种转变催生了一个深刻的监督悖论:

(附带学习)的丧失: 过去我们在翻阅文档、调试 Bug 的痛苦过程中,会意外学到系统的运行机理。AI 直接给出答案,切断了这种深度学习的路径。

AI Free 的刻意练习:每周或每个迭代,挑选一个核心逻辑块,尝试在完全不求助 AI 的情况下,手写实现并进行性能调优。这就像飞行员必须定期进行手动起降练习一样,是保持底层“肌肉记忆”的唯一方式。

3.2 从 Vibe Coding 进化到规范驱动(SDD)

为了不让工程质量滑向“随机性”的深渊,我们需要将“凭感觉”转化为 “定规范”。在“英语即编程语言”的时代,工程师的独特价值不再是实现细节,而是对约束条件的定义。

3.3. 构建新型“工程 Sense”:从手艺人到导演

未来的高级工程师,其核心竞争力将体现在对品味与评判权的掌控上。

4. 范式落地——在随机性之上,构建确定性的工程基座

一句话总结:

范式的落地不是一蹴而就的规则设定,而是一场伴随模型能力进化的动态博弈。我们要构建的是一套 “宽容输入、严格输出” 的链路:给 AI 足够的空间去创造和提效,但在交付的最后一公里,用最传统的工程理性进行最严苛的审判。

如果说 AI 是一台拥有无限爆发力的引擎,那么软件工程范式就是承载它的底盘。当前最核心的矛盾在于:大模型本质上是概率性的,而工程交付要求的却是确定性的。

如何让"不确定的生成"进化为"可交付的代码"?这不只是技术层面的挑战,更是一个关于全链路治理的系统性命题。我们不能以静态的视角审视现有工具,而需要动态地观察 LLM 能力演进、Agent 架构革新与传统工程设施的深度融合与协同演化。

4.1 从“单点指令”转向“多智能体编排(Multi-Agent Orchestration)”

正如 Anthropic 内部使用 Claude Code 处理日益复杂的任务,未来的落地范式绝非"人与单一窗口的对话",而是一个闭环的多智能体协作流水线。

4.2 构建"上下文护城河":从 Prompt 到知识图谱

AI 输出的质量,本质上取决于它对业务语境的理解深度。当前最大的工程化障碍,正是模型面对团队私有知识时的"冷启动"困境——它缺乏对特定代码规范、架构决策和历史演进的隐性认知。

4.3 "可观测性":让 AI 的决策过程透明可见

传统 DevOps 关注的是服务器负载、响应时间等机器指标;而在 AI 工程时代,我们需要追踪的是 AI 的"思考过程"。

4.4 拥抱"不确定性",但守住"质量底线"

我们需要认清一个现实:未来的软件开发将是人与 AI 协作的过渡态,不会是非黑即白的完全自动化。与其追求每一步都人工可控,不如确保最终结果可验证、可信赖

这意味着工程团队的核心能力要从"亲自写代码"转向 "搭建完善的评估体系"。只要你的测试、监控、回滚机制足够健壮,即使 AI 的输出带有一定随机性,也能被牢牢限制在安全的边界之内。

5. 结语

Anthropic 的这份报告,本质上是为我们展现了一个软件工程的“后工业时代”。在这个时代,AI 不是取代你的收割机,而是给了你“一百万匹马”的爆发力。

',56)),o("p",null,[t[5]||(t[5]=r("正如报告中所揭示的那样:我们不应再纠结于单应仰望更高应仰望更高维度的景观。",-1)),n(a,{bold:""},{default:e(()=>[...t[4]||(t[4]=[r("当写代码变得不再昂贵,对“什么是好代码”的定义权,以及对“系统为何而存在”的理解力,便成了这个行业最后的稀缺品",-1)])]),_:1}),t[6]||(t[6]=r("。",-1))]),t[13]||(t[13]=o("p",null,"未来,最优秀的工程师或许不再是那个能手写极致算法的人,而是那个能在随机生成的迷雾中,凭借深厚的底层功底,一眼识破平庸与风险,并为 AI 指明方向的人。",-1)),o("p",null,[t[8]||(t[8]=r("范式的沉淀或许仍需时间,请务必在享受 AI 提效的同时,刻意保持你的技术尖锐度。因为 ",-1)),n(a,{type:"warning",bold:""},{default:e(()=>[...t[7]||(t[7]=[r("在“机器执行”的洪流下,人类的品位与责任感,依然是软件工程中那道最坚固、也最温暖的防御线",-1)])]),_:1}),t[9]||(t[9]=r("。",-1))])]))}});export{c as __pageData,I as default}; diff --git a/assets/ai-coding_ai-change-work-workflow.md.Cf1dGJ-F.lean.js b/assets/ai-coding_ai-change-work-workflow.md.Dfds8zzd.lean.js similarity index 97% rename from assets/ai-coding_ai-change-work-workflow.md.Cf1dGJ-F.lean.js rename to assets/ai-coding_ai-change-work-workflow.md.Dfds8zzd.lean.js index 35dcb9d..02f9b3d 100644 --- a/assets/ai-coding_ai-change-work-workflow.md.Cf1dGJ-F.lean.js +++ b/assets/ai-coding_ai-change-work-workflow.md.Dfds8zzd.lean.js @@ -1 +1 @@ -import{H as a}from"./chunks/HighLightText.pXHFEzDb.js";import{c as l,o as s,a as o,d as i,e as r,b as n,w as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const p={class:"tip custom-block"},c=JSON.parse('{"title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","frontmatter":{"date":"2025-12-06T22:05:50.000Z","title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","permalink":"/ai-coding/ai-change-work-workflow/","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-change-work-workflow.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md"}'),u={name:"ai-coding/ai-change-work-workflow.md"},I=Object.assign(u,{setup(d){return(A,t)=>(s(),l("div",null,[t[10]||(t[10]=o("h1",{id:"读-anthropic-研究报告-探寻-ai-时代的工程范式重塑",tabindex:"-1"},[r("读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑 "),o("a",{class:"header-anchor",href:"#读-anthropic-研究报告-探寻-ai-时代的工程范式重塑","aria-label":"Permalink to “读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑”"},"​")],-1)),t[11]||(t[11]=o("blockquote",null,[o("p",null,[o("strong",null,"摘要总结"),r(":软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。")])],-1)),o("div",p,[t[3]||(t[3]=i("",4)),o("p",null,[t[1]||(t[1]=o("strong",null,"延伸思考",-1)),t[2]||(t[2]=r(":",-1)),n(a,{type:"note",bold:""},{default:e(()=>[...t[0]||(t[0]=[r("工程团队要用多少年,才会把现在的'人+AI 协作方式',沉淀为一个稳定的工程范式?",-1)])]),_:1})])]),t[12]||(t[12]=i("",56)),o("p",null,[t[5]||(t[5]=r("正如报告中所揭示的那样:我们不应再纠结于单应仰望更高应仰望更高维度的景观。",-1)),n(a,{bold:""},{default:e(()=>[...t[4]||(t[4]=[r("当写代码变得不再昂贵,对“什么是好代码”的定义权,以及对“系统为何而存在”的理解力,便成了这个行业最后的稀缺品",-1)])]),_:1}),t[6]||(t[6]=r("。",-1))]),t[13]||(t[13]=o("p",null,"未来,最优秀的工程师或许不再是那个能手写极致算法的人,而是那个能在随机生成的迷雾中,凭借深厚的底层功底,一眼识破平庸与风险,并为 AI 指明方向的人。",-1)),o("p",null,[t[8]||(t[8]=r("范式的沉淀或许仍需时间,请务必在享受 AI 提效的同时,刻意保持你的技术尖锐度。因为 ",-1)),n(a,{type:"warning",bold:""},{default:e(()=>[...t[7]||(t[7]=[r("在“机器执行”的洪流下,人类的品位与责任感,依然是软件工程中那道最坚固、也最温暖的防御线",-1)])]),_:1}),t[9]||(t[9]=r("。",-1))])]))}});export{c as __pageData,I as default}; +import{H as a}from"./chunks/HighLightText.DNC3BKyb.js";import{c as l,o as s,a as o,d as i,e as r,b as n,w as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const p={class:"tip custom-block"},c=JSON.parse('{"title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","frontmatter":{"date":"2025-12-06T22:05:50.000Z","title":"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑","description":"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。","permalink":"/ai-coding/ai-change-work-workflow/","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-change-work-workflow.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md"}'),u={name:"ai-coding/ai-change-work-workflow.md"},I=Object.assign(u,{setup(d){return(A,t)=>(s(),l("div",null,[t[10]||(t[10]=o("h1",{id:"读-anthropic-研究报告-探寻-ai-时代的工程范式重塑",tabindex:"-1"},[r("读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑 "),o("a",{class:"header-anchor",href:"#读-anthropic-研究报告-探寻-ai-时代的工程范式重塑","aria-label":"Permalink to “读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑”"},"​")],-1)),t[11]||(t[11]=o("blockquote",null,[o("p",null,[o("strong",null,"摘要总结"),r(":软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。")])],-1)),o("div",p,[t[3]||(t[3]=i("",4)),o("p",null,[t[1]||(t[1]=o("strong",null,"延伸思考",-1)),t[2]||(t[2]=r(":",-1)),n(a,{type:"note",bold:""},{default:e(()=>[...t[0]||(t[0]=[r("工程团队要用多少年,才会把现在的'人+AI 协作方式',沉淀为一个稳定的工程范式?",-1)])]),_:1})])]),t[12]||(t[12]=i("",56)),o("p",null,[t[5]||(t[5]=r("正如报告中所揭示的那样:我们不应再纠结于单应仰望更高应仰望更高维度的景观。",-1)),n(a,{bold:""},{default:e(()=>[...t[4]||(t[4]=[r("当写代码变得不再昂贵,对“什么是好代码”的定义权,以及对“系统为何而存在”的理解力,便成了这个行业最后的稀缺品",-1)])]),_:1}),t[6]||(t[6]=r("。",-1))]),t[13]||(t[13]=o("p",null,"未来,最优秀的工程师或许不再是那个能手写极致算法的人,而是那个能在随机生成的迷雾中,凭借深厚的底层功底,一眼识破平庸与风险,并为 AI 指明方向的人。",-1)),o("p",null,[t[8]||(t[8]=r("范式的沉淀或许仍需时间,请务必在享受 AI 提效的同时,刻意保持你的技术尖锐度。因为 ",-1)),n(a,{type:"warning",bold:""},{default:e(()=>[...t[7]||(t[7]=[r("在“机器执行”的洪流下,人类的品位与责任感,依然是软件工程中那道最坚固、也最温暖的防御线",-1)])]),_:1}),t[9]||(t[9]=r("。",-1))])]))}});export{c as __pageData,I as default}; diff --git a/assets/ai-coding_ai-engineer-capability.md.Dm2zRND9.js b/assets/ai-coding_ai-engineer-capability.md.DZPwC1tg.js similarity index 99% rename from assets/ai-coding_ai-engineer-capability.md.Dm2zRND9.js rename to assets/ai-coding_ai-engineer-capability.md.DZPwC1tg.js index aad062f..70c3a9b 100644 --- a/assets/ai-coding_ai-engineer-capability.md.Dm2zRND9.js +++ b/assets/ai-coding_ai-engineer-capability.md.DZPwC1tg.js @@ -1 +1 @@ -import{H as r}from"./chunks/HighLightText.pXHFEzDb.js";import{c as o,o as i,d as a,a as n,e,b as s,w as g}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const I=JSON.parse('{"title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","frontmatter":{"date":"2026-03-02T11:05:50.000Z","title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","permalink":"/ai-coding/ai-engineer-capability","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-engineer-capability.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md"}'),d={name:"ai-coding/ai-engineer-capability.md"},b=Object.assign(d,{setup(l){return(h,t)=>(i(),o("div",null,[t[5]||(t[5]=a('

重构开发者:AI 时代下的工程师能力图谱与演进指南

摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。

about site background

如果你对近两年的技术浪潮保持敏感,大概会得出一个有些残酷但无比真实的结论:代码正在发生“通货膨胀”。随着大模型编程能力的指数级跃升,纯粹的“将业务逻辑翻译成代码”这项技能的溢价正在快速衰减。当 AI 能在几秒钟内吐出包含完整类型定义、错误处理和测试用例的后端接口或是 React 组件时,软件工程师的护城河究竟在哪里?

行业的演进给出了答案:开发者的角色正在经历一次彻底的重构。我们正在从“代码的编写者”转变为“系统的架构者”与“AI 智能体的指挥官”。结合当下的工业界实践,我们可以将 AI 时代的工程师图谱清晰地划分为三大核心圈层:产品应用层、Agent 开发层与 AI 基础设施层

1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈

核心壁垒:技术视野 + 产品敏锐度 + 极速的架构组装能力,能够单枪匹马或带领极小团队,将一个灵感迅速转化为高可用产品。

在 AI 极大地降低了代码编写门槛的今天,“决定做什么”和“如何利用 AI 构建系统”的价值,已经逐渐超越了“纯手工敲击代码”的价值。这或许是传统前端、后端开发者转型最顺滑、也最能释放巨大商业价值的一层。

',8)),n("p",null,[t[1]||(t[1]=e("在这一层,“全栈工程师”的定义被重新改写为“产品工程师(Product Engineer)”。",-1)),t[2]||(t[2]=n("strong",null,"技术栈不再仅仅是前端框架和数据库,而是包含了“产品 Sense”与“商业洞察”的 Insight Stack",-1)),t[3]||(t[3]=e("。全栈工程师也正在进化为“超级个体”或“产品工程师(Product Engineer)”。",-1)),s(r,{type:"note",bold:""},{default:g(()=>[...t[0]||(t[0]=[e("问题发现 -> 创意沉淀 -> AI 辅助技术方案 -> AI 驱动代码生成",-1)])]),_:1}),t[4]||(t[4]=e(" 这一闭环,正是当前最高效的独立开发或小团队敏捷开发范式。",-1))]),t[6]||(t[6]=a('

1.1 产品 Sense 与业务洞察

过去,工程师往往是被动接收 PRD。而在 AI 时代,技术门槛的降低意味着工程师可以随时将生活和工作中的“灵感碎片”与“痛点捕获”转化为产品创意。我们需要具备极其敏锐的 AI 边界认知,明确知道哪些场景适合用传统的 CRUD 解决,哪些必须交由 LLM 去处理模糊与非确定性。

在产品应用层,我们还需要具备数据飞轮意识,注重在应用层设计埋点,收集用户的交互与纠错数据,为后续的 Agentic workflow 优化或模型微调提供高质量数据源。

1.2 Agentic Engineering(智能体工程)

这是一种全新的开发范式,开发者不再逐行手敲代码,而是通过撰写严谨的 Spec、利用 TDD(测试驱动开发)和 Lint 强约束,去“驱动”和“管理” AI 编程助手(如 Claude Code、Cursor),全栈基础设施的范畴也扩展到了跨端轻量化应用(例如利用前端技术栈快速构建高价值的浏览器插件)。

能力维度具体要求
规划、设计与迭代能力• 能够快速响应业务需求,规划产品功能,完成技术架构的调研、选型与整体设计。
• 能借助 AI 进行前端视图层、Node.js 后端核心数据流、业务流程的顶层设计。
• 不但能单枪匹马或带领极小团队中的人,还懂得领导、管理 AI 数字员工。
AI 驱动编程基于 Spec、TDD、Hooks(Lint 检查)等强约束机制,驱动 Claude Code / Copilot 等工具生成高规范度代码。
全栈基础设施熟练掌握传统架构体系(数据库选型、Redis、微服务、消息队列),以及跨端/轻量化形态(如 Chrome 插件生态)的工程搭建。
DevOps现代化的自动化部署、CI/CD 流水线搭建与运维。

1.3 AI-First 的交互哲学

AI 应用的体验与传统软件截然不同。为了对抗大模型的延迟与幻觉,工程师必须掌握流式渲染(Streaming UI)、生成式 UI(Generative UI)等新一代交互模式,用优雅的工程设计兜底 AI 的不确定性。

2. Agent 开发层:构建连接物理世界的数字中枢

核心壁垒:标准化模块组装 + 复杂 Agentic Workflow 编排 + 严谨的评测体系,这一层负责为 AI 赋予记忆、手脚和专业领域的知识,是连接“底层模型大脑”与“上层应用交互”的核心枢纽。

如果说大模型是大脑,那么 Agent 工程师就是为这个大脑装上“四肢”、“记忆”和“专业工具”的人,这是一个正在爆发的新兴领域,也是实现 AI 业务落地的核心枢纽

2.1 Agentic Workflow 设计

能力维度具体要求
任务拆解与路由基于 CoT(思维链)等技术工程的任务拆解与路由机制,针对不同复杂度的工作流设计稳健的多 Agent 协作与分发机制。
设计模式与编排熟练应用 ReAct、Plan-and-Execute 等智能体设计模式,针对不同的业务场景(如信息爬取、长文总结过滤等自动化处理),设计稳健的多 Agent 协作与路由流。
主流 Agent 框架的核心机制与实战落地熟悉并掌握如 Claude Agent SDK、LangChain、AutoGen 等主流 Agent 框架的核心机制,能够在实际项目中灵活应用,解决复杂的业务场景。

2.2 记忆机制(Memory Management)

要让 Agent 变得“好用”,必须解决上下文遗忘和知识幻觉的问题。这就要求工程师深谙长期记忆/短期记忆的协同管理,以及复杂文档的切块(Chunking)、向量化(Embedding)和混合检索(Hybrid Search)技术。

2.3 技能的插件化(Agent Skill)

Agent Skill 是由 Anthropic 提出并推动的一种开放式标准,旨在将特定领域的知识、工作流、指令和脚本打包封装成的标准化、模块化资源包,让 AI Agent 按需动态加载这些技能,实现从通用助手向特定任务专家(如代码审计、法律文件分析)的无缝转变。

无论是长文抓取、摘要提取还是打标签,都可以被封装为独立的 Skill,在复杂的 Workflow 中被 Agent 动态挂载,即插即用,在构建特定场景的 Agent(例如专注于技术资讯处理的知识管理助手)时,能够像搭积木一样,根据当前任务的上下文动态加载所需的 Skills,从而大幅提升 Agent 的泛化能力和开发效率。

2.4 从硬编码到标准协议与上下文连接

随着 MCP(Model Context Protocol)等标准化协议的成熟,Agent 开发正在摆脱杂乱的胶水代码。我们可以利用熟悉的后端生态(如 Node.js)构建 MCP Server,让 AI 安全、统一地读取外部 API 或是企业内部知识库,打破信息孤岛。

2.5 模型选型、路由与可观测性

2.6 EDD(评估驱动开发)重塑工程质量

在 Agent 开发中,大模型的输出具有非确定性,如果说开发 Agent 只是完成了从 0 到 1 的“能用”,那么构建完善的评测体系,就是解决从 1 到 100 的“好用”与“敢用”的核心壁垒。成熟的 Agent 工程师必须建立系统的评测与监控体系(Observability),通过构建黄金测试集(Golden Dataset)、引入 LLM-as-a-Judge,以及精确到 Token 级的链路追踪(Tracing),将“感觉不错”的玄学转化为可量化的工程指标。

能力维度具体要求
自动化评测驱动 (EDD)摒弃"肉眼看效果"的游击战,建立特定场景的 Golden Dataset(基准测试集),熟练引入 Promptfoo、Ragas 等评估框架,将评测无缝融入 CI/CD 流水线。
多维指标体系设计针对具体任务(如长文总结、内容归类),设计并量化诸如事实一致性 (Faithfulness)、答案相关性 (Answer Relevance)、幻觉率 (Hallucination Rate) 等核心指标。
LLM-as-a-Judge 与人工对齐使用强模型(如 Claude 4.6/GPT)来批量自动评测弱模型或 Agent 的输出质量,并在关键节点结合 HITL(Human-in-the-loop,人机协同)进行人工微调与对齐。
链路追踪与归因 (Tracing)面对多 Agent 协作或复杂的 RAG 链路,熟练使用 LangSmith、Langfuse 等可观测性工具,记录每一次工具调用、Prompt 组装耗时和 Token 消耗,精准定位 Bad Case 的根因。

3. AI 基础设施层:算力与模型的重工业底座

核心壁垒:深厚的底层算法素养 + 极致的性能压榨 + 大规模分布式系统经验。这一层是 AI 时代的“重工业”底座,负责打造和打磨基础模型,并提供极致性价比的算力支撑。

技术工程背景的工程师可暂时只关注于模型预备训练、后训练、推理等放面的原理与流程,以及如何在大规模分布式系统上高效部署和运行这些模型,而无需深入理解底层的分布式系统和计算架构。

如果前两层是造车和开车的,这一层就是修路和提炼石油的。这属于 AI 的“重工业”,门槛极高,主要由具备深厚算法背景和底层工程能力的顶级大厂或 AI Native 独角兽主导。

能力维度具体要求
模型精炼与对齐随着开源基座模型的强大,预训练已不再是唯一解。后训练(Post-training)阶段的变得至关重要,通过 RL(强化学习)、SFT(监督微调)、RLHF/DPO(人类偏好对齐),将通用模型打磨成特定领域(如代码生成、逻辑推理)的专家。
极致的推理优化随着模型越大,成本越高。熟练掌握 vLLM 等高性能推理框架,运用量化技术(如 FP8/INT4)、KV Cache 优化(如 PagedAttention),在不牺牲精度的前提下榨干每一滴 GPU 算力。
LLMOps 与算力调度在万卡级别的 GPU 集群上,处理节点故障、实现资源负载均衡和容灾恢复,保障极其昂贵的算力资源不被浪费。

4. 找准自己的生态位

面对这股重塑整个行业的洪流,焦虑是本能,但进阶才是解药。

对于绝大多数有着丰富 Web 开发经验(无论是精通前端交互,还是深谙 Node.js/Golang/Java 等后端架构)的工程师而言,“产品应用层”和“Agent 开发层”不仅是最具性价比的切入点,更是能够最大化杠杆原有技能的沃土

我们不应该将自己局限在“写代码的机器”这一狭窄定义中。尝试用产品 Sense 发现问题,用 AI 编程工具快速实现 MVP,用标准的 Agent skills、MCP 协议和高阶 Agentic workflow 设计赋予应用专业深度。

AI 不会淘汰开发者,只会淘汰那些拒绝使用 AI 来放大自身产品价值的开发者。在技术通缩的时代,唯有洞察力和对业务流的把控力,才能迎来真正的价值膨胀。

',38))]))}});export{I as __pageData,b as default}; +import{H as r}from"./chunks/HighLightText.DNC3BKyb.js";import{c as o,o as i,d as a,a as n,e,b as s,w as g}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const I=JSON.parse('{"title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","frontmatter":{"date":"2026-03-02T11:05:50.000Z","title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","permalink":"/ai-coding/ai-engineer-capability","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-engineer-capability.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md"}'),d={name:"ai-coding/ai-engineer-capability.md"},b=Object.assign(d,{setup(l){return(h,t)=>(i(),o("div",null,[t[5]||(t[5]=a('

重构开发者:AI 时代下的工程师能力图谱与演进指南

摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。

about site background

如果你对近两年的技术浪潮保持敏感,大概会得出一个有些残酷但无比真实的结论:代码正在发生“通货膨胀”。随着大模型编程能力的指数级跃升,纯粹的“将业务逻辑翻译成代码”这项技能的溢价正在快速衰减。当 AI 能在几秒钟内吐出包含完整类型定义、错误处理和测试用例的后端接口或是 React 组件时,软件工程师的护城河究竟在哪里?

行业的演进给出了答案:开发者的角色正在经历一次彻底的重构。我们正在从“代码的编写者”转变为“系统的架构者”与“AI 智能体的指挥官”。结合当下的工业界实践,我们可以将 AI 时代的工程师图谱清晰地划分为三大核心圈层:产品应用层、Agent 开发层与 AI 基础设施层

1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈

核心壁垒:技术视野 + 产品敏锐度 + 极速的架构组装能力,能够单枪匹马或带领极小团队,将一个灵感迅速转化为高可用产品。

在 AI 极大地降低了代码编写门槛的今天,“决定做什么”和“如何利用 AI 构建系统”的价值,已经逐渐超越了“纯手工敲击代码”的价值。这或许是传统前端、后端开发者转型最顺滑、也最能释放巨大商业价值的一层。

',8)),n("p",null,[t[1]||(t[1]=e("在这一层,“全栈工程师”的定义被重新改写为“产品工程师(Product Engineer)”。",-1)),t[2]||(t[2]=n("strong",null,"技术栈不再仅仅是前端框架和数据库,而是包含了“产品 Sense”与“商业洞察”的 Insight Stack",-1)),t[3]||(t[3]=e("。全栈工程师也正在进化为“超级个体”或“产品工程师(Product Engineer)”。",-1)),s(r,{type:"note",bold:""},{default:g(()=>[...t[0]||(t[0]=[e("问题发现 -> 创意沉淀 -> AI 辅助技术方案 -> AI 驱动代码生成",-1)])]),_:1}),t[4]||(t[4]=e(" 这一闭环,正是当前最高效的独立开发或小团队敏捷开发范式。",-1))]),t[6]||(t[6]=a('

1.1 产品 Sense 与业务洞察

过去,工程师往往是被动接收 PRD。而在 AI 时代,技术门槛的降低意味着工程师可以随时将生活和工作中的“灵感碎片”与“痛点捕获”转化为产品创意。我们需要具备极其敏锐的 AI 边界认知,明确知道哪些场景适合用传统的 CRUD 解决,哪些必须交由 LLM 去处理模糊与非确定性。

在产品应用层,我们还需要具备数据飞轮意识,注重在应用层设计埋点,收集用户的交互与纠错数据,为后续的 Agentic workflow 优化或模型微调提供高质量数据源。

1.2 Agentic Engineering(智能体工程)

这是一种全新的开发范式,开发者不再逐行手敲代码,而是通过撰写严谨的 Spec、利用 TDD(测试驱动开发)和 Lint 强约束,去“驱动”和“管理” AI 编程助手(如 Claude Code、Cursor),全栈基础设施的范畴也扩展到了跨端轻量化应用(例如利用前端技术栈快速构建高价值的浏览器插件)。

能力维度具体要求
规划、设计与迭代能力• 能够快速响应业务需求,规划产品功能,完成技术架构的调研、选型与整体设计。
• 能借助 AI 进行前端视图层、Node.js 后端核心数据流、业务流程的顶层设计。
• 不但能单枪匹马或带领极小团队中的人,还懂得领导、管理 AI 数字员工。
AI 驱动编程基于 Spec、TDD、Hooks(Lint 检查)等强约束机制,驱动 Claude Code / Copilot 等工具生成高规范度代码。
全栈基础设施熟练掌握传统架构体系(数据库选型、Redis、微服务、消息队列),以及跨端/轻量化形态(如 Chrome 插件生态)的工程搭建。
DevOps现代化的自动化部署、CI/CD 流水线搭建与运维。

1.3 AI-First 的交互哲学

AI 应用的体验与传统软件截然不同。为了对抗大模型的延迟与幻觉,工程师必须掌握流式渲染(Streaming UI)、生成式 UI(Generative UI)等新一代交互模式,用优雅的工程设计兜底 AI 的不确定性。

2. Agent 开发层:构建连接物理世界的数字中枢

核心壁垒:标准化模块组装 + 复杂 Agentic Workflow 编排 + 严谨的评测体系,这一层负责为 AI 赋予记忆、手脚和专业领域的知识,是连接“底层模型大脑”与“上层应用交互”的核心枢纽。

如果说大模型是大脑,那么 Agent 工程师就是为这个大脑装上“四肢”、“记忆”和“专业工具”的人,这是一个正在爆发的新兴领域,也是实现 AI 业务落地的核心枢纽

2.1 Agentic Workflow 设计

能力维度具体要求
任务拆解与路由基于 CoT(思维链)等技术工程的任务拆解与路由机制,针对不同复杂度的工作流设计稳健的多 Agent 协作与分发机制。
设计模式与编排熟练应用 ReAct、Plan-and-Execute 等智能体设计模式,针对不同的业务场景(如信息爬取、长文总结过滤等自动化处理),设计稳健的多 Agent 协作与路由流。
主流 Agent 框架的核心机制与实战落地熟悉并掌握如 Claude Agent SDK、LangChain、AutoGen 等主流 Agent 框架的核心机制,能够在实际项目中灵活应用,解决复杂的业务场景。

2.2 记忆机制(Memory Management)

要让 Agent 变得“好用”,必须解决上下文遗忘和知识幻觉的问题。这就要求工程师深谙长期记忆/短期记忆的协同管理,以及复杂文档的切块(Chunking)、向量化(Embedding)和混合检索(Hybrid Search)技术。

2.3 技能的插件化(Agent Skill)

Agent Skill 是由 Anthropic 提出并推动的一种开放式标准,旨在将特定领域的知识、工作流、指令和脚本打包封装成的标准化、模块化资源包,让 AI Agent 按需动态加载这些技能,实现从通用助手向特定任务专家(如代码审计、法律文件分析)的无缝转变。

无论是长文抓取、摘要提取还是打标签,都可以被封装为独立的 Skill,在复杂的 Workflow 中被 Agent 动态挂载,即插即用,在构建特定场景的 Agent(例如专注于技术资讯处理的知识管理助手)时,能够像搭积木一样,根据当前任务的上下文动态加载所需的 Skills,从而大幅提升 Agent 的泛化能力和开发效率。

2.4 从硬编码到标准协议与上下文连接

随着 MCP(Model Context Protocol)等标准化协议的成熟,Agent 开发正在摆脱杂乱的胶水代码。我们可以利用熟悉的后端生态(如 Node.js)构建 MCP Server,让 AI 安全、统一地读取外部 API 或是企业内部知识库,打破信息孤岛。

2.5 模型选型、路由与可观测性

2.6 EDD(评估驱动开发)重塑工程质量

在 Agent 开发中,大模型的输出具有非确定性,如果说开发 Agent 只是完成了从 0 到 1 的“能用”,那么构建完善的评测体系,就是解决从 1 到 100 的“好用”与“敢用”的核心壁垒。成熟的 Agent 工程师必须建立系统的评测与监控体系(Observability),通过构建黄金测试集(Golden Dataset)、引入 LLM-as-a-Judge,以及精确到 Token 级的链路追踪(Tracing),将“感觉不错”的玄学转化为可量化的工程指标。

能力维度具体要求
自动化评测驱动 (EDD)摒弃"肉眼看效果"的游击战,建立特定场景的 Golden Dataset(基准测试集),熟练引入 Promptfoo、Ragas 等评估框架,将评测无缝融入 CI/CD 流水线。
多维指标体系设计针对具体任务(如长文总结、内容归类),设计并量化诸如事实一致性 (Faithfulness)、答案相关性 (Answer Relevance)、幻觉率 (Hallucination Rate) 等核心指标。
LLM-as-a-Judge 与人工对齐使用强模型(如 Claude 4.6/GPT)来批量自动评测弱模型或 Agent 的输出质量,并在关键节点结合 HITL(Human-in-the-loop,人机协同)进行人工微调与对齐。
链路追踪与归因 (Tracing)面对多 Agent 协作或复杂的 RAG 链路,熟练使用 LangSmith、Langfuse 等可观测性工具,记录每一次工具调用、Prompt 组装耗时和 Token 消耗,精准定位 Bad Case 的根因。

3. AI 基础设施层:算力与模型的重工业底座

核心壁垒:深厚的底层算法素养 + 极致的性能压榨 + 大规模分布式系统经验。这一层是 AI 时代的“重工业”底座,负责打造和打磨基础模型,并提供极致性价比的算力支撑。

技术工程背景的工程师可暂时只关注于模型预备训练、后训练、推理等放面的原理与流程,以及如何在大规模分布式系统上高效部署和运行这些模型,而无需深入理解底层的分布式系统和计算架构。

如果前两层是造车和开车的,这一层就是修路和提炼石油的。这属于 AI 的“重工业”,门槛极高,主要由具备深厚算法背景和底层工程能力的顶级大厂或 AI Native 独角兽主导。

能力维度具体要求
模型精炼与对齐随着开源基座模型的强大,预训练已不再是唯一解。后训练(Post-training)阶段的变得至关重要,通过 RL(强化学习)、SFT(监督微调)、RLHF/DPO(人类偏好对齐),将通用模型打磨成特定领域(如代码生成、逻辑推理)的专家。
极致的推理优化随着模型越大,成本越高。熟练掌握 vLLM 等高性能推理框架,运用量化技术(如 FP8/INT4)、KV Cache 优化(如 PagedAttention),在不牺牲精度的前提下榨干每一滴 GPU 算力。
LLMOps 与算力调度在万卡级别的 GPU 集群上,处理节点故障、实现资源负载均衡和容灾恢复,保障极其昂贵的算力资源不被浪费。

4. 找准自己的生态位

面对这股重塑整个行业的洪流,焦虑是本能,但进阶才是解药。

对于绝大多数有着丰富 Web 开发经验(无论是精通前端交互,还是深谙 Node.js/Golang/Java 等后端架构)的工程师而言,“产品应用层”和“Agent 开发层”不仅是最具性价比的切入点,更是能够最大化杠杆原有技能的沃土

我们不应该将自己局限在“写代码的机器”这一狭窄定义中。尝试用产品 Sense 发现问题,用 AI 编程工具快速实现 MVP,用标准的 Agent skills、MCP 协议和高阶 Agentic workflow 设计赋予应用专业深度。

AI 不会淘汰开发者,只会淘汰那些拒绝使用 AI 来放大自身产品价值的开发者。在技术通缩的时代,唯有洞察力和对业务流的把控力,才能迎来真正的价值膨胀。

',38))]))}});export{I as __pageData,b as default}; diff --git a/assets/ai-coding_ai-engineer-capability.md.Dm2zRND9.lean.js b/assets/ai-coding_ai-engineer-capability.md.DZPwC1tg.lean.js similarity index 95% rename from assets/ai-coding_ai-engineer-capability.md.Dm2zRND9.lean.js rename to assets/ai-coding_ai-engineer-capability.md.DZPwC1tg.lean.js index f4717eb..88fe961 100644 --- a/assets/ai-coding_ai-engineer-capability.md.Dm2zRND9.lean.js +++ b/assets/ai-coding_ai-engineer-capability.md.DZPwC1tg.lean.js @@ -1 +1 @@ -import{H as r}from"./chunks/HighLightText.pXHFEzDb.js";import{c as o,o as i,d as a,a as n,e,b as s,w as g}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const I=JSON.parse('{"title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","frontmatter":{"date":"2026-03-02T11:05:50.000Z","title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","permalink":"/ai-coding/ai-engineer-capability","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-engineer-capability.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md"}'),d={name:"ai-coding/ai-engineer-capability.md"},b=Object.assign(d,{setup(l){return(h,t)=>(i(),o("div",null,[t[5]||(t[5]=a("",8)),n("p",null,[t[1]||(t[1]=e("在这一层,“全栈工程师”的定义被重新改写为“产品工程师(Product Engineer)”。",-1)),t[2]||(t[2]=n("strong",null,"技术栈不再仅仅是前端框架和数据库,而是包含了“产品 Sense”与“商业洞察”的 Insight Stack",-1)),t[3]||(t[3]=e("。全栈工程师也正在进化为“超级个体”或“产品工程师(Product Engineer)”。",-1)),s(r,{type:"note",bold:""},{default:g(()=>[...t[0]||(t[0]=[e("问题发现 -> 创意沉淀 -> AI 辅助技术方案 -> AI 驱动代码生成",-1)])]),_:1}),t[4]||(t[4]=e(" 这一闭环,正是当前最高效的独立开发或小团队敏捷开发范式。",-1))]),t[6]||(t[6]=a("",38))]))}});export{I as __pageData,b as default}; +import{H as r}from"./chunks/HighLightText.DNC3BKyb.js";import{c as o,o as i,d as a,a as n,e,b as s,w as g}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const I=JSON.parse('{"title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","frontmatter":{"date":"2026-03-02T11:05:50.000Z","title":"重构开发者:AI 时代下的工程师能力图谱与演进指南","description":"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。","permalink":"/ai-coding/ai-engineer-capability","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","top":true,"tags":["全栈","AI"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-engineer-capability.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md"}'),d={name:"ai-coding/ai-engineer-capability.md"},b=Object.assign(d,{setup(l){return(h,t)=>(i(),o("div",null,[t[5]||(t[5]=a("",8)),n("p",null,[t[1]||(t[1]=e("在这一层,“全栈工程师”的定义被重新改写为“产品工程师(Product Engineer)”。",-1)),t[2]||(t[2]=n("strong",null,"技术栈不再仅仅是前端框架和数据库,而是包含了“产品 Sense”与“商业洞察”的 Insight Stack",-1)),t[3]||(t[3]=e("。全栈工程师也正在进化为“超级个体”或“产品工程师(Product Engineer)”。",-1)),s(r,{type:"note",bold:""},{default:g(()=>[...t[0]||(t[0]=[e("问题发现 -> 创意沉淀 -> AI 辅助技术方案 -> AI 驱动代码生成",-1)])]),_:1}),t[4]||(t[4]=e(" 这一闭环,正是当前最高效的独立开发或小团队敏捷开发范式。",-1))]),t[6]||(t[6]=a("",38))]))}});export{I as __pageData,b as default}; diff --git a/assets/ai-coding_ai-native.md.COrigMZ-.js b/assets/ai-coding_ai-native.md.CGQ4u-7o.js similarity index 99% rename from assets/ai-coding_ai-native.md.COrigMZ-.js rename to assets/ai-coding_ai-native.md.CGQ4u-7o.js index 534b8a3..e7e3889 100644 --- a/assets/ai-coding_ai-native.md.COrigMZ-.js +++ b/assets/ai-coding_ai-native.md.CGQ4u-7o.js @@ -1 +1 @@ -import{H as e}from"./chunks/HighLightText.pXHFEzDb.js";import{c as i,o as r,d as n,a,e as s,b as l,w as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const m="/img/full-stack/insight_stack.png",d={class:"note custom-block"},p={class:"note custom-block"},x=JSON.parse('{"title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","frontmatter":{"date":"2025-10-24T11:05:50.000Z","title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/ai-coding/ai-native","sticky":1,"top":true,"tags":["全栈","AI","产品"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-native.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md"}'),c={name:"ai-coding/ai-native.md"},y=Object.assign(c,{setup(g){return(h,t)=>(r(),i("div",null,[t[10]||(t[10]=n('

不止于代码:构建 AI 时代全栈工程师的“认知三层塔”

摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。

1. 引言

在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单

就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:

那个时候,我认为全栈的护城河在于“掌握编程语言的数量”。只要我能写前端、能写后端、偶尔还能写点 Python 爬虫,我就是全栈。我们都在拼命地做加法,试图把自己打磨成一把无所不能的瑞士军刀。

但在 AI 彻底重构代码生产方式的今天,这个定义显得过时且狭隘。当 GPT5/Claude Code/Cursor 等能够在一分钟内生成高质量的 CRUD 代码,甚至自动完成单元测试时,我们掌握语言、语法的价值又还剩多少?如果一个人就能通过 AI 完成一支团队的工作,那么“全栈”的边界到底在哪里?

真正的全栈,已经从“技能的物理叠加” 进化到了 “价值的化学闭环”。如果一个人通过 AI 就能完成过去一支团队的交付量,那么“全栈”的边界就不再是技术栈(Tech Stack),而是认知栈(Insight Stack)。

维度旧全栈 (Legacy Full Stack)新全栈 (AI-Native Full Stack)
关注点语言、框架、语法 (Tools)问题、场景、价值 (Value)
核心能力纯手工编码 (Coding)架构设计、Prompt 工程、代码审查 (Architecting)
交付边界前端页面 + 后端接口需求洞察 \\rightarrow 产品设计 \\rightarrow 落地运营
AI 的角色辅助工具 (Copilot)核心引擎与分身 (Co-founder)

2. AI 时代的全栈新公式

在重新思考技术演进的逻辑后,笔者思考出了一个更具现代感的全栈价值公式。这不仅仅是技能的组合,更是思维模型的重构:

Full Stack=(Engineering+Product)×AI\\mathbf{Full\\ Stack} \\; = \\; (\\mathbf{Engineering} \\; + \\; \\mathbf{Product}) \\; \\times \\; \\mathbf{AI}

这个公式告诉我们:不要再执着于手里有多少把锤子,而要关注你能构建出怎样的建筑,AI 是那个能够让工程能力和产品思维产生指数级爆炸的乘数。

2.1. Engineering (工程力):从“困于实现”到“敢于设计”

',15)),a("div",d,[t[3]||(t[3]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[4]||(t[4]=a("p",null,[a("strong",null,"旧模式"),s(":熟练记忆 API,手写大量样板代码,关注具体的语言和语法细节。")],-1)),a("p",null,[t[1]||(t[1]=a("strong",null,"新模式",-1)),t[2]||(t[2]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[0]||(t[0]=[s("具备系统级视野,关注架构的健壮性、可维护性以及自动化交付体系。",-1)])]),_:1})])]),t[11]||(t[11]=n('

在 AI 时代,工程力的内核发生了迁移,AI 在逐渐接管 How(怎么写代码),人类必须专注于 What(做什么系统)和 Why(为什么这样设计)。

能力维度核心要点
架构决策当代码生成变得廉价,架构决策变得昂贵。是选择单体还是微服务?是 SQL 还是 NoSQL?这些决定了系统的上限。
代码审计与验收你从"写作者"变成了"编辑"和"审计员",当 AI 帮你写完 80% 的代码后,你是否有能力调试剩下那 20% 最隐蔽的逻辑漏洞?
DevOps 与交付工程力不再止步于 localhost,它意味着你能利用 Docker、K8s、CI/CD 乃至 Serverless,将代码安全、稳定地送达线上,并将产品交付到用户手中。

2.2. Product (产品力):从“需求翻译机”到“价值定义者”

',3)),a("div",p,[t[8]||(t[8]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[9]||(t[9]=a("p",null,[a("strong",null,"旧模式"),s(":被动接收需求文档,关注功能的按时上线。")],-1)),a("p",null,[t[6]||(t[6]=a("strong",null,"新模式",-1)),t[7]||(t[7]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[5]||(t[5]=[s("理解商业模式与用户痛点,能判断“做什么”比“怎么做”更重要。",-1)])]),_:1})])]),t[12]||(t[12]=n('

产品力是技术人员最容易忽视,但在公式中权重极高的变量,它与工程力是相加关系——没有产品力的工程师,只是 AI 的操作员。

维度核心要点
同理心 (Empathy)脱离"技术自嗨",回归"用户感知"。工程师常沉迷于后端架构的完美重构(High Effort),却忽略前端模糊的报错提示(Low Effort)正让用户抓狂。
具备同理心的全栈懂得计算体验 ROI:优先解决阻碍用户达成目标的"可见障碍",而非盲目追求技术实现的"隐性完美"。
MVP 思维 (ROI 意识)精准识别"低成本高价值"的功能。在 AI 辅助下,快速构建最小可行性产品(MVP)验证假设,而非陷入过度设计的泥潭。
业务闭环不仅把功能做出来,还要考虑数据如何回流、用户如何增长。

2.3. AI (AI 杠杆):指数级倍增器

NOTE

旧模式:将 AI 视为搜索引擎的替代品或简单的代码补全工具。

新模式:AI 是你的数字员工、技能分身,是让个人产出这种线性增长变成指数增长的关键变量。

为什么 AI 处于乘数的位置?因为它是对上述两种能力的全方位放大

能力维度核心要点
技能树的补全利用 Cursor/Claude Code 等 AI 编程与 Agentic 工具,后端工程师可以写出像素级完美的前端 CSS,前端工程师可以编写复杂的 SQL 分析语句。AI 抹平了技术栈之间的专业门槛
上下文工程学会如何向 AI 提供高质量的上下文(Context),让 AI 理解你的项目结构、业务逻辑和编码规范,从而生成生产级代码。
时间压缩将从"Idea"到"Demo"的时间从数周压缩到数小时。这让"超级个体(Solo Maker)"成为可能——一个人就是一支队伍。

3. 从 Tech Stack 到 Insight Stack:进阶之路

全栈新时代架构图

过去的“全栈”是指 Tech Stack(技术栈) —— 我们在简历上堆砌的 React、Vue、NestJS、Python、Rust 等名词。

现在的“全栈”是指 Insight Stack(认知栈) —— 我们构建的是一套解决复杂问题的思维模型。

在新的范式下,我们的核心竞争力不再是精通具体的语言特性或掌握庞杂的框架细节——因为 AI 已是最好的“百科全书”与“熟练工”——而是转变为构建以下三层认知模型:

  1. 洞察层:具备 Product Sense,能够发现真实世界中值得解决的问题,并定义清楚需求的边界。
  2. 架构层:具备 Engineering Logic,能够设计出高可用、可扩展的技术方案,并指挥 AI 完成具体的模块实现。
  3. 杠杆层:具备 AI Quotient (AI商),熟练运用 LLM、RAG、Agents 等工具,将上述两层能力指数级放大。

AI 并没有以此消灭全栈工程师,它只是消灭了“平庸的搬运工”。它正在邀请我们,从“代码工人”进化为真正的“价值创造者”。

',13))]))}});export{x as __pageData,y as default}; +import{H as e}from"./chunks/HighLightText.DNC3BKyb.js";import{c as i,o as r,d as n,a,e as s,b as l,w as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const m="/img/full-stack/insight_stack.png",d={class:"note custom-block"},p={class:"note custom-block"},x=JSON.parse('{"title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","frontmatter":{"date":"2025-10-24T11:05:50.000Z","title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/ai-coding/ai-native","sticky":1,"top":true,"tags":["全栈","AI","产品"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-native.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md"}'),c={name:"ai-coding/ai-native.md"},y=Object.assign(c,{setup(g){return(h,t)=>(r(),i("div",null,[t[10]||(t[10]=n('

不止于代码:构建 AI 时代全栈工程师的“认知三层塔”

摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。

1. 引言

在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单

就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:

那个时候,我认为全栈的护城河在于“掌握编程语言的数量”。只要我能写前端、能写后端、偶尔还能写点 Python 爬虫,我就是全栈。我们都在拼命地做加法,试图把自己打磨成一把无所不能的瑞士军刀。

但在 AI 彻底重构代码生产方式的今天,这个定义显得过时且狭隘。当 GPT5/Claude Code/Cursor 等能够在一分钟内生成高质量的 CRUD 代码,甚至自动完成单元测试时,我们掌握语言、语法的价值又还剩多少?如果一个人就能通过 AI 完成一支团队的工作,那么“全栈”的边界到底在哪里?

真正的全栈,已经从“技能的物理叠加” 进化到了 “价值的化学闭环”。如果一个人通过 AI 就能完成过去一支团队的交付量,那么“全栈”的边界就不再是技术栈(Tech Stack),而是认知栈(Insight Stack)。

维度旧全栈 (Legacy Full Stack)新全栈 (AI-Native Full Stack)
关注点语言、框架、语法 (Tools)问题、场景、价值 (Value)
核心能力纯手工编码 (Coding)架构设计、Prompt 工程、代码审查 (Architecting)
交付边界前端页面 + 后端接口需求洞察 \\rightarrow 产品设计 \\rightarrow 落地运营
AI 的角色辅助工具 (Copilot)核心引擎与分身 (Co-founder)

2. AI 时代的全栈新公式

在重新思考技术演进的逻辑后,笔者思考出了一个更具现代感的全栈价值公式。这不仅仅是技能的组合,更是思维模型的重构:

Full Stack=(Engineering+Product)×AI\\mathbf{Full\\ Stack} \\; = \\; (\\mathbf{Engineering} \\; + \\; \\mathbf{Product}) \\; \\times \\; \\mathbf{AI}

这个公式告诉我们:不要再执着于手里有多少把锤子,而要关注你能构建出怎样的建筑,AI 是那个能够让工程能力和产品思维产生指数级爆炸的乘数。

2.1. Engineering (工程力):从“困于实现”到“敢于设计”

',15)),a("div",d,[t[3]||(t[3]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[4]||(t[4]=a("p",null,[a("strong",null,"旧模式"),s(":熟练记忆 API,手写大量样板代码,关注具体的语言和语法细节。")],-1)),a("p",null,[t[1]||(t[1]=a("strong",null,"新模式",-1)),t[2]||(t[2]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[0]||(t[0]=[s("具备系统级视野,关注架构的健壮性、可维护性以及自动化交付体系。",-1)])]),_:1})])]),t[11]||(t[11]=n('

在 AI 时代,工程力的内核发生了迁移,AI 在逐渐接管 How(怎么写代码),人类必须专注于 What(做什么系统)和 Why(为什么这样设计)。

能力维度核心要点
架构决策当代码生成变得廉价,架构决策变得昂贵。是选择单体还是微服务?是 SQL 还是 NoSQL?这些决定了系统的上限。
代码审计与验收你从"写作者"变成了"编辑"和"审计员",当 AI 帮你写完 80% 的代码后,你是否有能力调试剩下那 20% 最隐蔽的逻辑漏洞?
DevOps 与交付工程力不再止步于 localhost,它意味着你能利用 Docker、K8s、CI/CD 乃至 Serverless,将代码安全、稳定地送达线上,并将产品交付到用户手中。

2.2. Product (产品力):从“需求翻译机”到“价值定义者”

',3)),a("div",p,[t[8]||(t[8]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[9]||(t[9]=a("p",null,[a("strong",null,"旧模式"),s(":被动接收需求文档,关注功能的按时上线。")],-1)),a("p",null,[t[6]||(t[6]=a("strong",null,"新模式",-1)),t[7]||(t[7]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[5]||(t[5]=[s("理解商业模式与用户痛点,能判断“做什么”比“怎么做”更重要。",-1)])]),_:1})])]),t[12]||(t[12]=n('

产品力是技术人员最容易忽视,但在公式中权重极高的变量,它与工程力是相加关系——没有产品力的工程师,只是 AI 的操作员。

维度核心要点
同理心 (Empathy)脱离"技术自嗨",回归"用户感知"。工程师常沉迷于后端架构的完美重构(High Effort),却忽略前端模糊的报错提示(Low Effort)正让用户抓狂。
具备同理心的全栈懂得计算体验 ROI:优先解决阻碍用户达成目标的"可见障碍",而非盲目追求技术实现的"隐性完美"。
MVP 思维 (ROI 意识)精准识别"低成本高价值"的功能。在 AI 辅助下,快速构建最小可行性产品(MVP)验证假设,而非陷入过度设计的泥潭。
业务闭环不仅把功能做出来,还要考虑数据如何回流、用户如何增长。

2.3. AI (AI 杠杆):指数级倍增器

NOTE

旧模式:将 AI 视为搜索引擎的替代品或简单的代码补全工具。

新模式:AI 是你的数字员工、技能分身,是让个人产出这种线性增长变成指数增长的关键变量。

为什么 AI 处于乘数的位置?因为它是对上述两种能力的全方位放大

能力维度核心要点
技能树的补全利用 Cursor/Claude Code 等 AI 编程与 Agentic 工具,后端工程师可以写出像素级完美的前端 CSS,前端工程师可以编写复杂的 SQL 分析语句。AI 抹平了技术栈之间的专业门槛
上下文工程学会如何向 AI 提供高质量的上下文(Context),让 AI 理解你的项目结构、业务逻辑和编码规范,从而生成生产级代码。
时间压缩将从"Idea"到"Demo"的时间从数周压缩到数小时。这让"超级个体(Solo Maker)"成为可能——一个人就是一支队伍。

3. 从 Tech Stack 到 Insight Stack:进阶之路

全栈新时代架构图

过去的“全栈”是指 Tech Stack(技术栈) —— 我们在简历上堆砌的 React、Vue、NestJS、Python、Rust 等名词。

现在的“全栈”是指 Insight Stack(认知栈) —— 我们构建的是一套解决复杂问题的思维模型。

在新的范式下,我们的核心竞争力不再是精通具体的语言特性或掌握庞杂的框架细节——因为 AI 已是最好的“百科全书”与“熟练工”——而是转变为构建以下三层认知模型:

  1. 洞察层:具备 Product Sense,能够发现真实世界中值得解决的问题,并定义清楚需求的边界。
  2. 架构层:具备 Engineering Logic,能够设计出高可用、可扩展的技术方案,并指挥 AI 完成具体的模块实现。
  3. 杠杆层:具备 AI Quotient (AI商),熟练运用 LLM、RAG、Agents 等工具,将上述两层能力指数级放大。

AI 并没有以此消灭全栈工程师,它只是消灭了“平庸的搬运工”。它正在邀请我们,从“代码工人”进化为真正的“价值创造者”。

',13))]))}});export{x as __pageData,y as default}; diff --git a/assets/ai-coding_ai-native.md.COrigMZ-.lean.js b/assets/ai-coding_ai-native.md.CGQ4u-7o.lean.js similarity index 95% rename from assets/ai-coding_ai-native.md.COrigMZ-.lean.js rename to assets/ai-coding_ai-native.md.CGQ4u-7o.lean.js index a31e9f4..8303de1 100644 --- a/assets/ai-coding_ai-native.md.COrigMZ-.lean.js +++ b/assets/ai-coding_ai-native.md.CGQ4u-7o.lean.js @@ -1 +1 @@ -import{H as e}from"./chunks/HighLightText.pXHFEzDb.js";import{c as i,o as r,d as n,a,e as s,b as l,w as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const m="/img/full-stack/insight_stack.png",d={class:"note custom-block"},p={class:"note custom-block"},x=JSON.parse('{"title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","frontmatter":{"date":"2025-10-24T11:05:50.000Z","title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/ai-coding/ai-native","sticky":1,"top":true,"tags":["全栈","AI","产品"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-native.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md"}'),c={name:"ai-coding/ai-native.md"},y=Object.assign(c,{setup(g){return(h,t)=>(r(),i("div",null,[t[10]||(t[10]=n("",15)),a("div",d,[t[3]||(t[3]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[4]||(t[4]=a("p",null,[a("strong",null,"旧模式"),s(":熟练记忆 API,手写大量样板代码,关注具体的语言和语法细节。")],-1)),a("p",null,[t[1]||(t[1]=a("strong",null,"新模式",-1)),t[2]||(t[2]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[0]||(t[0]=[s("具备系统级视野,关注架构的健壮性、可维护性以及自动化交付体系。",-1)])]),_:1})])]),t[11]||(t[11]=n("",3)),a("div",p,[t[8]||(t[8]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[9]||(t[9]=a("p",null,[a("strong",null,"旧模式"),s(":被动接收需求文档,关注功能的按时上线。")],-1)),a("p",null,[t[6]||(t[6]=a("strong",null,"新模式",-1)),t[7]||(t[7]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[5]||(t[5]=[s("理解商业模式与用户痛点,能判断“做什么”比“怎么做”更重要。",-1)])]),_:1})])]),t[12]||(t[12]=n("",13))]))}});export{x as __pageData,y as default}; +import{H as e}from"./chunks/HighLightText.DNC3BKyb.js";import{c as i,o as r,d as n,a,e as s,b as l,w as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const m="/img/full-stack/insight_stack.png",d={class:"note custom-block"},p={class:"note custom-block"},x=JSON.parse('{"title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","frontmatter":{"date":"2025-10-24T11:05:50.000Z","title":"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”","description":"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/ai-coding/ai-native","sticky":1,"top":true,"tags":["全栈","AI","产品"],"categories":["全栈"]},"headers":[],"relativePath":"ai-coding/ai-native.md","filePath":"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md"}'),c={name:"ai-coding/ai-native.md"},y=Object.assign(c,{setup(g){return(h,t)=>(r(),i("div",null,[t[10]||(t[10]=n("",15)),a("div",d,[t[3]||(t[3]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[4]||(t[4]=a("p",null,[a("strong",null,"旧模式"),s(":熟练记忆 API,手写大量样板代码,关注具体的语言和语法细节。")],-1)),a("p",null,[t[1]||(t[1]=a("strong",null,"新模式",-1)),t[2]||(t[2]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[0]||(t[0]=[s("具备系统级视野,关注架构的健壮性、可维护性以及自动化交付体系。",-1)])]),_:1})])]),t[11]||(t[11]=n("",3)),a("div",p,[t[8]||(t[8]=a("p",{class:"title note-title custom-block-title"},"新旧模式对比:",-1)),t[9]||(t[9]=a("p",null,[a("strong",null,"旧模式"),s(":被动接收需求文档,关注功能的按时上线。")],-1)),a("p",null,[t[6]||(t[6]=a("strong",null,"新模式",-1)),t[7]||(t[7]=s(":",-1)),l(e,{type:"note",bold:""},{default:o(()=>[...t[5]||(t[5]=[s("理解商业模式与用户痛点,能判断“做什么”比“怎么做”更重要。",-1)])]),_:1})])]),t[12]||(t[12]=n("",13))]))}});export{x as __pageData,y as default}; diff --git a/assets/ai-coding_claude-code-deep-dive.md.DTTIPzhz.js b/assets/ai-coding_claude-code-deep-dive.md.TnvtJZZ3.js similarity index 99% rename from assets/ai-coding_claude-code-deep-dive.md.DTTIPzhz.js rename to assets/ai-coding_claude-code-deep-dive.md.TnvtJZZ3.js index 4303018..620e070 100644 --- a/assets/ai-coding_claude-code-deep-dive.md.DTTIPzhz.js +++ b/assets/ai-coding_claude-code-deep-dive.md.TnvtJZZ3.js @@ -1,4 +1,4 @@ -import{_ as a,c as n,o as i,d as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"从 .claude 文件夹读懂 Claude Code","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","frontmatter":{"date":"2026-03-15T22:27:51.000Z","title":"从 .claude 文件夹读懂 Claude Code","tldr":"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","tags":["AI Coding","Claude Code","Agentic Engineering","Developer Tools"],"categories":["全栈","AI 编程系列"],"permalink":"/ai-coding/claude-code-deep-dive"},"headers":[],"relativePath":"ai-coding/claude-code-deep-dive.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md"}'),e={name:"ai-coding/claude-code-deep-dive.md"};function l(p,s,d,r,h,o){return i(),n("div",null,[...s[0]||(s[0]=[t(`

从 .claude 文件夹读懂 Claude Code

摘要总结: 针对 AI 编程范式从 Vibe Coding 向 Agentic Engineering 跃迁的背景,深入拆解 Claude Code 工具的核心配置体系。通过分析 .claude 目录结构,系统阐述全局与项目级两级配置的设计思路,详细解读 CLAUDE.md、rules、commands、skills、agents 等模块的功能定位与使用场景,并结合权限隔离、模块化扩展等设计原则,为团队协作提供可落地的配置方案。

1. 引言

在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初"动动嘴皮子就能生成完整项目"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的"自主工程师"。

在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 .claude 文件夹开始,深入拆解 Claude Code 的内部机制,从而理解 Claude Code 的工作原理。

2. 目录概览

Claude Code 通过 .claude/ 文件夹实现配置与扩展,支持全局配置~/.claude/)和项目级配置(项目根目录下的 .claude/)两级体系:

markdown
全局 (~/.claude/): 
+import{_ as a,c as n,o as i,d as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"从 .claude 文件夹读懂 Claude Code","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","frontmatter":{"date":"2026-03-15T22:27:51.000Z","title":"从 .claude 文件夹读懂 Claude Code","tldr":"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","tags":["AI Coding","Claude Code","Agentic Engineering","Developer Tools"],"categories":["全栈","AI 编程系列"],"permalink":"/ai-coding/claude-code-deep-dive"},"headers":[],"relativePath":"ai-coding/claude-code-deep-dive.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md"}'),e={name:"ai-coding/claude-code-deep-dive.md"};function l(p,s,d,r,h,o){return i(),n("div",null,[...s[0]||(s[0]=[t(`

从 .claude 文件夹读懂 Claude Code

摘要总结: 针对 AI 编程范式从 Vibe Coding 向 Agentic Engineering 跃迁的背景,深入拆解 Claude Code 工具的核心配置体系。通过分析 .claude 目录结构,系统阐述全局与项目级两级配置的设计思路,详细解读 CLAUDE.md、rules、commands、skills、agents 等模块的功能定位与使用场景,并结合权限隔离、模块化扩展等设计原则,为团队协作提供可落地的配置方案。

1. 引言

在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初"动动嘴皮子就能生成完整项目"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的"自主工程师"。

在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 .claude 文件夹开始,深入拆解 Claude Code 的内部机制,从而理解 Claude Code 的工作原理。

2. 目录概览

Claude Code 通过 .claude/ 文件夹实现配置与扩展,支持全局配置~/.claude/)和项目级配置(项目根目录下的 .claude/)两级体系:

  • 全局:~/.claude/,包含个人偏好、本机状态,如会话历史和自动记忆。
  • 项目级:<your-project>/.claude/团队配置,提交到 git 每个人都能获得相同的规则、自定义命令和权限设置策略。
markdown
全局 (~/.claude/): 
 ├── CLAUDE.md          # 全局偏好,定义个人习惯的交互风格
 ├── commands/          # 个人自定义斜杠命令
 ├── skills/            # 个人技能,封装可复用的工作流
diff --git a/assets/ai-coding_claude-code-deep-dive.md.DTTIPzhz.lean.js b/assets/ai-coding_claude-code-deep-dive.md.TnvtJZZ3.lean.js
similarity index 94%
rename from assets/ai-coding_claude-code-deep-dive.md.DTTIPzhz.lean.js
rename to assets/ai-coding_claude-code-deep-dive.md.TnvtJZZ3.lean.js
index 257c824..8628dec 100644
--- a/assets/ai-coding_claude-code-deep-dive.md.DTTIPzhz.lean.js
+++ b/assets/ai-coding_claude-code-deep-dive.md.TnvtJZZ3.lean.js
@@ -1 +1 @@
-import{_ as a,c as n,o as i,d as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"从 .claude 文件夹读懂 Claude Code","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","frontmatter":{"date":"2026-03-15T22:27:51.000Z","title":"从 .claude 文件夹读懂 Claude Code","tldr":"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","tags":["AI Coding","Claude Code","Agentic Engineering","Developer Tools"],"categories":["全栈","AI 编程系列"],"permalink":"/ai-coding/claude-code-deep-dive"},"headers":[],"relativePath":"ai-coding/claude-code-deep-dive.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md"}'),e={name:"ai-coding/claude-code-deep-dive.md"};function l(p,s,d,r,h,o){return i(),n("div",null,[...s[0]||(s[0]=[t("",124)])])}const g=a(e,[["render",l]]);export{c as __pageData,g as default};
+import{_ as a,c as n,o as i,d as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"从 .claude 文件夹读懂 Claude Code","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","frontmatter":{"date":"2026-03-15T22:27:51.000Z","title":"从 .claude 文件夹读懂 Claude Code","tldr":"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。","description":"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。","tags":["AI Coding","Claude Code","Agentic Engineering","Developer Tools"],"categories":["全栈","AI 编程系列"],"permalink":"/ai-coding/claude-code-deep-dive"},"headers":[],"relativePath":"ai-coding/claude-code-deep-dive.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md"}'),e={name:"ai-coding/claude-code-deep-dive.md"};function l(p,s,d,r,h,o){return i(),n("div",null,[...s[0]||(s[0]=[t("",124)])])}const g=a(e,[["render",l]]);export{c as __pageData,g as default};
diff --git a/assets/ai-coding_overview.md.CDUVxDM3.js b/assets/ai-coding_overview.md.72rTeUxR.js
similarity index 94%
rename from assets/ai-coding_overview.md.CDUVxDM3.js
rename to assets/ai-coding_overview.md.72rTeUxR.js
index bb5dd28..2b0c63e 100644
--- a/assets/ai-coding_overview.md.CDUVxDM3.js
+++ b/assets/ai-coding_overview.md.72rTeUxR.js
@@ -1 +1 @@
-import{K as r,A as l}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as s}from"./chunks/Blockquote.acMDZFAD.js";import{F as c,C as d}from"./chunks/Callout.B-9wy57V.js";import{c as g,o as A,a as i,b as t,e as a,u as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                                          */const n=[{id:"ai-native",title:"AI Native 工程思维",icon:"🤖",color:"#a855f7",articles:[{title:"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑",url:"/ai-coding/ai-change-work-workflow",description:'软件工程正经历从"手写逻辑"向"意图调度"的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经"不划算"的工程任务,重塑了软件质量的密度。'},{title:"重构开发者:AI 时代下的工程师能力图谱与演进指南",url:"/ai-coding/ai-engineer-capability",description:'当 AI 极速降低代码编写门槛,单纯的"业务代码翻译器"角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层、Agent 开发层与 AI 基础设施层。'},{title:'不止于代码:构建 AI 时代全栈工程师的"认知三层塔"',url:"/ai-coding/ai-native",description:'在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从"技术栈堆砌"转向"认知栈重构"。本文提出 "(工程 + 产品) × AI" 的新公式,助力开发者构建"洞察-架构-杠杆"认知三层塔,利用 AI 杠杆让自己进化为价值创造者。'}]},{id:"ai-coding-guides",title:"AI 编程实践指南",icon:"✨",color:"#c084fc",articles:[{title:"AI 编程工具与资源推荐",url:"/ai-coding/resources",description:'本文系统梳理 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务),并通过横向对比主流工具,勾勒出一条从"快速原型"到"高效协同"再到"自主交付"的进阶路径。'},{title:"从 .claude 文件夹读懂 Claude Code",url:"/ai-coding/claude-code-deep-dive",description:"深入拆解 Claude Code 的 .claude 配置目录,涵盖 CLAUDE.md、rules、commands、skills、agents 等模块的功能定位与使用场景,结合权限隔离、模块化扩展等设计原则,为团队协作提供可落地的配置方案。"}]}],b=JSON.parse('{"title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","frontmatter":{"date":"2026-05-14T17:19:49.000Z","title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","categories":["AI 学习与实践","AI 编程专题"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","permalink":"/ai-coding/overview","articleShare":false},"headers":[],"relativePath":"ai-coding/overview.md","filePath":"21.AI 编程专题/00.overview.md"}'),p={name:"ai-coding/overview.md"},k=Object.assign(p,{setup(u){return(I,e)=>(A(),g("div",null,[e[0]||(e[0]=i("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),i("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),t(s,{variant:"insight",quote:"AI 编程的本质不是让 AI 替我们写代码,而是把工程师从不值得投入的编码劳动中解放出来,将注意力还给真正创造价值的工程决策。"}),e[1]||(e[1]=i("p",null,[i("strong",null,"认知先行"),a("——理解 AI 编程的范式转移,建立 AI Native 的工程思维与能力图谱。")],-1)),e[2]||(e[2]=i("p",null,[i("strong",null,"实操演进"),a("——以 AI Native 思维重构工程范式,从 Vibe Coding 的自然语言原型,到 AI IDE 的深度辅助,再到 Agentic Engineering 的自主交付,在范式演进中建立的程杠杆。")],-1)),t(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png",caption:"AI-Coding 研发新范式全景示意图"}),t(d,{type:"info",title:"双层结构:认知层 + 实践层",content:"本专题采用双层组织架构:上层 AI Native 工程思维聚焦范式转移与能力模型,下层 AI 编程实践指南聚焦工具、配置与工作流。两层互为支撑。"}),e[3]||(e[3]=i("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),i("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),t(r,{categories:o(n),"root-label":"AI 编程","show-articles":!1},null,8,["categories"]),t(l,{categories:o(n)},null,8,["categories"])]))}});export{b as __pageData,k as default};
+import{K as r,A as l}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as s}from"./chunks/Blockquote.B7nHhHWl.js";import{F as c,C as d}from"./chunks/Callout.Bss1uX1v.js";import{c as g,o as A,a as i,b as t,e as a,u as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                                          */const n=[{id:"ai-native",title:"AI Native 工程思维",icon:"🤖",color:"#a855f7",articles:[{title:"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑",url:"/ai-coding/ai-change-work-workflow",description:'软件工程正经历从"手写逻辑"向"意图调度"的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经"不划算"的工程任务,重塑了软件质量的密度。'},{title:"重构开发者:AI 时代下的工程师能力图谱与演进指南",url:"/ai-coding/ai-engineer-capability",description:'当 AI 极速降低代码编写门槛,单纯的"业务代码翻译器"角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层、Agent 开发层与 AI 基础设施层。'},{title:'不止于代码:构建 AI 时代全栈工程师的"认知三层塔"',url:"/ai-coding/ai-native",description:'在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从"技术栈堆砌"转向"认知栈重构"。本文提出 "(工程 + 产品) × AI" 的新公式,助力开发者构建"洞察-架构-杠杆"认知三层塔,利用 AI 杠杆让自己进化为价值创造者。'}]},{id:"ai-coding-guides",title:"AI 编程实践指南",icon:"✨",color:"#c084fc",articles:[{title:"AI 编程工具与资源推荐",url:"/ai-coding/resources",description:'本文系统梳理 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务),并通过横向对比主流工具,勾勒出一条从"快速原型"到"高效协同"再到"自主交付"的进阶路径。'},{title:"从 .claude 文件夹读懂 Claude Code",url:"/ai-coding/claude-code-deep-dive",description:"深入拆解 Claude Code 的 .claude 配置目录,涵盖 CLAUDE.md、rules、commands、skills、agents 等模块的功能定位与使用场景,结合权限隔离、模块化扩展等设计原则,为团队协作提供可落地的配置方案。"}]}],b=JSON.parse('{"title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","frontmatter":{"date":"2026-05-14T17:19:49.000Z","title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","categories":["AI 学习与实践","AI 编程专题"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","permalink":"/ai-coding/overview","articleShare":false},"headers":[],"relativePath":"ai-coding/overview.md","filePath":"21.AI 编程专题/00.overview.md"}'),p={name:"ai-coding/overview.md"},k=Object.assign(p,{setup(u){return(I,e)=>(A(),g("div",null,[e[0]||(e[0]=i("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),i("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),t(s,{variant:"insight",quote:"AI 编程的本质不是让 AI 替我们写代码,而是把工程师从不值得投入的编码劳动中解放出来,将注意力还给真正创造价值的工程决策。"}),e[1]||(e[1]=i("p",null,[i("strong",null,"认知先行"),a("——理解 AI 编程的范式转移,建立 AI Native 的工程思维与能力图谱。")],-1)),e[2]||(e[2]=i("p",null,[i("strong",null,"实操演进"),a("——以 AI Native 思维重构工程范式,从 Vibe Coding 的自然语言原型,到 AI IDE 的深度辅助,再到 Agentic Engineering 的自主交付,在范式演进中建立的程杠杆。")],-1)),t(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png",caption:"AI-Coding 研发新范式全景示意图"}),t(d,{type:"info",title:"双层结构:认知层 + 实践层",content:"本专题采用双层组织架构:上层 AI Native 工程思维聚焦范式转移与能力模型,下层 AI 编程实践指南聚焦工具、配置与工作流。两层互为支撑。"}),e[3]||(e[3]=i("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),i("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),t(r,{categories:o(n),"root-label":"AI 编程","show-articles":!1},null,8,["categories"]),t(l,{categories:o(n)},null,8,["categories"])]))}});export{b as __pageData,k as default};
diff --git a/assets/ai-coding_overview.md.CDUVxDM3.lean.js b/assets/ai-coding_overview.md.72rTeUxR.lean.js
similarity index 94%
rename from assets/ai-coding_overview.md.CDUVxDM3.lean.js
rename to assets/ai-coding_overview.md.72rTeUxR.lean.js
index bb5dd28..2b0c63e 100644
--- a/assets/ai-coding_overview.md.CDUVxDM3.lean.js
+++ b/assets/ai-coding_overview.md.72rTeUxR.lean.js
@@ -1 +1 @@
-import{K as r,A as l}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as s}from"./chunks/Blockquote.acMDZFAD.js";import{F as c,C as d}from"./chunks/Callout.B-9wy57V.js";import{c as g,o as A,a as i,b as t,e as a,u as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                                          */const n=[{id:"ai-native",title:"AI Native 工程思维",icon:"🤖",color:"#a855f7",articles:[{title:"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑",url:"/ai-coding/ai-change-work-workflow",description:'软件工程正经历从"手写逻辑"向"意图调度"的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经"不划算"的工程任务,重塑了软件质量的密度。'},{title:"重构开发者:AI 时代下的工程师能力图谱与演进指南",url:"/ai-coding/ai-engineer-capability",description:'当 AI 极速降低代码编写门槛,单纯的"业务代码翻译器"角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层、Agent 开发层与 AI 基础设施层。'},{title:'不止于代码:构建 AI 时代全栈工程师的"认知三层塔"',url:"/ai-coding/ai-native",description:'在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从"技术栈堆砌"转向"认知栈重构"。本文提出 "(工程 + 产品) × AI" 的新公式,助力开发者构建"洞察-架构-杠杆"认知三层塔,利用 AI 杠杆让自己进化为价值创造者。'}]},{id:"ai-coding-guides",title:"AI 编程实践指南",icon:"✨",color:"#c084fc",articles:[{title:"AI 编程工具与资源推荐",url:"/ai-coding/resources",description:'本文系统梳理 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务),并通过横向对比主流工具,勾勒出一条从"快速原型"到"高效协同"再到"自主交付"的进阶路径。'},{title:"从 .claude 文件夹读懂 Claude Code",url:"/ai-coding/claude-code-deep-dive",description:"深入拆解 Claude Code 的 .claude 配置目录,涵盖 CLAUDE.md、rules、commands、skills、agents 等模块的功能定位与使用场景,结合权限隔离、模块化扩展等设计原则,为团队协作提供可落地的配置方案。"}]}],b=JSON.parse('{"title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","frontmatter":{"date":"2026-05-14T17:19:49.000Z","title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","categories":["AI 学习与实践","AI 编程专题"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","permalink":"/ai-coding/overview","articleShare":false},"headers":[],"relativePath":"ai-coding/overview.md","filePath":"21.AI 编程专题/00.overview.md"}'),p={name:"ai-coding/overview.md"},k=Object.assign(p,{setup(u){return(I,e)=>(A(),g("div",null,[e[0]||(e[0]=i("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),i("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),t(s,{variant:"insight",quote:"AI 编程的本质不是让 AI 替我们写代码,而是把工程师从不值得投入的编码劳动中解放出来,将注意力还给真正创造价值的工程决策。"}),e[1]||(e[1]=i("p",null,[i("strong",null,"认知先行"),a("——理解 AI 编程的范式转移,建立 AI Native 的工程思维与能力图谱。")],-1)),e[2]||(e[2]=i("p",null,[i("strong",null,"实操演进"),a("——以 AI Native 思维重构工程范式,从 Vibe Coding 的自然语言原型,到 AI IDE 的深度辅助,再到 Agentic Engineering 的自主交付,在范式演进中建立的程杠杆。")],-1)),t(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png",caption:"AI-Coding 研发新范式全景示意图"}),t(d,{type:"info",title:"双层结构:认知层 + 实践层",content:"本专题采用双层组织架构:上层 AI Native 工程思维聚焦范式转移与能力模型,下层 AI 编程实践指南聚焦工具、配置与工作流。两层互为支撑。"}),e[3]||(e[3]=i("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),i("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),t(r,{categories:o(n),"root-label":"AI 编程","show-articles":!1},null,8,["categories"]),t(l,{categories:o(n)},null,8,["categories"])]))}});export{b as __pageData,k as default};
+import{K as r,A as l}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as s}from"./chunks/Blockquote.B7nHhHWl.js";import{F as c,C as d}from"./chunks/Callout.Bss1uX1v.js";import{c as g,o as A,a as i,b as t,e as a,u as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                                          */const n=[{id:"ai-native",title:"AI Native 工程思维",icon:"🤖",color:"#a855f7",articles:[{title:"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑",url:"/ai-coding/ai-change-work-workflow",description:'软件工程正经历从"手写逻辑"向"意图调度"的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经"不划算"的工程任务,重塑了软件质量的密度。'},{title:"重构开发者:AI 时代下的工程师能力图谱与演进指南",url:"/ai-coding/ai-engineer-capability",description:'当 AI 极速降低代码编写门槛,单纯的"业务代码翻译器"角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层、Agent 开发层与 AI 基础设施层。'},{title:'不止于代码:构建 AI 时代全栈工程师的"认知三层塔"',url:"/ai-coding/ai-native",description:'在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从"技术栈堆砌"转向"认知栈重构"。本文提出 "(工程 + 产品) × AI" 的新公式,助力开发者构建"洞察-架构-杠杆"认知三层塔,利用 AI 杠杆让自己进化为价值创造者。'}]},{id:"ai-coding-guides",title:"AI 编程实践指南",icon:"✨",color:"#c084fc",articles:[{title:"AI 编程工具与资源推荐",url:"/ai-coding/resources",description:'本文系统梳理 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务),并通过横向对比主流工具,勾勒出一条从"快速原型"到"高效协同"再到"自主交付"的进阶路径。'},{title:"从 .claude 文件夹读懂 Claude Code",url:"/ai-coding/claude-code-deep-dive",description:"深入拆解 Claude Code 的 .claude 配置目录,涵盖 CLAUDE.md、rules、commands、skills、agents 等模块的功能定位与使用场景,结合权限隔离、模块化扩展等设计原则,为团队协作提供可落地的配置方案。"}]}],b=JSON.parse('{"title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","frontmatter":{"date":"2026-05-14T17:19:49.000Z","title":"全景一览","description":"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。","categories":["AI 学习与实践","AI 编程专题"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","permalink":"/ai-coding/overview","articleShare":false},"headers":[],"relativePath":"ai-coding/overview.md","filePath":"21.AI 编程专题/00.overview.md"}'),p={name:"ai-coding/overview.md"},k=Object.assign(p,{setup(u){return(I,e)=>(A(),g("div",null,[e[0]||(e[0]=i("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),i("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),t(s,{variant:"insight",quote:"AI 编程的本质不是让 AI 替我们写代码,而是把工程师从不值得投入的编码劳动中解放出来,将注意力还给真正创造价值的工程决策。"}),e[1]||(e[1]=i("p",null,[i("strong",null,"认知先行"),a("——理解 AI 编程的范式转移,建立 AI Native 的工程思维与能力图谱。")],-1)),e[2]||(e[2]=i("p",null,[i("strong",null,"实操演进"),a("——以 AI Native 思维重构工程范式,从 Vibe Coding 的自然语言原型,到 AI IDE 的深度辅助,再到 Agentic Engineering 的自主交付,在范式演进中建立的程杠杆。")],-1)),t(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png",caption:"AI-Coding 研发新范式全景示意图"}),t(d,{type:"info",title:"双层结构:认知层 + 实践层",content:"本专题采用双层组织架构:上层 AI Native 工程思维聚焦范式转移与能力模型,下层 AI 编程实践指南聚焦工具、配置与工作流。两层互为支撑。"}),e[3]||(e[3]=i("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),i("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),t(r,{categories:o(n),"root-label":"AI 编程","show-articles":!1},null,8,["categories"]),t(l,{categories:o(n)},null,8,["categories"])]))}});export{b as __pageData,k as default};
diff --git a/assets/ai-coding_resources.md.nk3hBjmO.js b/assets/ai-coding_resources.md.BEyzO6Q5.js
similarity index 99%
rename from assets/ai-coding_resources.md.nk3hBjmO.js
rename to assets/ai-coding_resources.md.BEyzO6Q5.js
index 7b63881..9a2701c 100644
--- a/assets/ai-coding_resources.md.nk3hBjmO.js
+++ b/assets/ai-coding_resources.md.BEyzO6Q5.js
@@ -1 +1 @@
-import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","permalink":"/ai-coding/resources","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","categories":["全栈","AI 编程系列"],"tags":["资源推荐","AI","AI Coding","Vibe Coding","Agentic Engineering"]},"headers":[],"relativePath":"ai-coding/resources.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md"}'),d={name:"ai-coding/resources.md"};function i(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e('

AI 编程工具与资源推荐

摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。

1. 三种编程范式速览

范式一句话描述你的角色
Vibe Coding用自然语言描述需求,AI 直接生成可运行的完整项目描述需求,让 AI 写代码(新手友好)
AI IDE在编辑器里引入 AI 辅助,边写边补全、边问边改主导开发,让 AI 做副驾驶(更多控制)
Agentic EngineeringAI 作为"自主工程师",接收任务后自动规划并执行全套代码工作流提任务、审结果,让 AI 执行(极致提效)

新手路线建议:先用 Bolt.new 或 v0.dev 体验 Vibe Coding 零门槛出产品的感觉 → 再切换到 Cursor 做日常编码提效 → 最后尝试 Claude Code/opencode 体验 AI 自主完成工程任务,三步感受"AI 如何重塑编程工作流"。

注意:使用 Claude Code 等 CLI Agent 工具,需要订阅官方模型服务(Claude Pro / API)。若暂无订阅,可通过配置自定义模型服务,支持对接兼容 第三方服务(如 GLM、DeepSeek、通义千问),实现低成本上手。

2. Vibe Coding — 用自然语言"说"出一个应用

2.1 关键点说明

适合人群:产品经理、设计师、创业者,或想快速验证想法的非专业开发者。

核心价值:从一段文字描述到可运行的 Web 应用,无需搭建开发环境;天生适合 MVP 原型验证UI 快速迭代

如何上手:打开网站 → 在输入框描述你的应用(如"做一个番茄钟 App,有开始暂停按钮,完成后有提示音")→ AI 生成代码并实时预览 → 继续对话迭代功能。

',9),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://bolt.new/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://bolt.new/static/favicon-192x192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Bolt.new")]),t("p",{class:"desc"},"StackBlitz 推出的全栈 AI 开发平台,在浏览器中直接生成并运行完整的 React 项目,支持多轮对话迭代,可一键部署到 Netlify / Vercel,零环境配置从描述到上线全链路打通。"),t("span",{class:"VPBadge tip badge"},"一键部署")]),t("a",{href:"https://v0.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://v0.app/assets/icon-dark-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"v0 (Vercel)")]),t("p",{class:"desc"},"Vercel 推出的 UI 组件生成工具,专注前端界面:用自然语言描述界面,生成 React + Tailwind CSS + shadcn/ui 组件代码,可直接复制进项目,天生与 Next.js 生态无缝衔接,非常适合前端 UI 的快速原型。"),t("span",{class:"VPBadge tip badge"},"UI 生成")]),t("a",{href:"https://lovable.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lovable.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Lovable")]),t("p",{class:"desc"},"面向非技术用户的 AI 全栈应用生成器,输入产品想法生成前后端完整应用,内置 Supabase 数据库集成与一键部署,支持实时预览和多轮对话修改,让没有编程基础的人也能独立做出可上线的 Web 产品。"),t("span",{class:"VPBadge tip badge"},"无代码全栈")]),t("a",{href:"https://replit.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://replit.com/public/icons/favicon-prompt-192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Replit Agent")]),t("p",{class:"desc"},"云端在线 IDE Replit 内置的 AI Agent,能从需求描述自动生成完整项目、安装依赖、运行调试,全程在浏览器内完成,内置托管与分享功能,零本地环境要求,适合快速原型和在线学习编程。"),t("span",{class:"VPBadge tip badge"},"云端全栈")]),t("a",{href:"https://same.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://same.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Same.dev")]),t("p",{class:"desc"},'专注"克隆任意网站 UI"的 AI 编码工具,输入目标网站 URL,AI 自动还原其界面并生成对应前端代码,适合学习参考优秀设计、快速复现竞品界面,以及建站初始模板快速搭建。'),t("span",{class:"VPBadge tip badge"},"UI 克隆")]),t("a",{href:"https://www.miaoda.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://resource-static.cdn.bcebos.com/img/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秒哒 Miaoda")]),t("p",{class:"desc"},'百度出品的无代码应用搭建平台,口号"一句话做应用"。在输入框用自然语言描述需求,即可一键生成可部署的 Web 应用或微信小程序;内置深度开发模式、插件市场与风格定制,帮助想法从描述直达成品。配套"应用广场"汇聚社区作品,可浏览、点赞并参考他人案例,适合产品原型快速验证、学习参考与演示展示。'),t("span",{class:"VPBadge tip badge"},"中文体验佳")])])],-1),e('

2.2 六款工具横向对比

💡 快速选择建议

  • 要做完整全栈 Web 并直接上线Bolt.new(成熟度最高)
  • 只需前端 UI 组件嵌入现有项目 → v0
  • 非技术背景想独立做出有数据库的产品 → Lovable
  • 在线学编程或使用 Python / Go 等非 React 语言 → Replit Agent
  • 手头有参考网站想直接还原其界面 → Same.dev
  • 中文用户或目标平台是微信小程序秒哒 Miaoda
工具核心定位输出形态技术栈最适场景上手门槛
Bolt.new应用生成完整 Web 应用React快速生成可部署全栈 Demo
v0UI 组件生成React 组件代码片段React + Tailwind + shadcn/ui前端界面快速出图,嵌入 Next.js 项目
Lovable零代码全栈建站含数据库的完整 Web 产品前端 + Supabase 后端非技术人员独立做出可上线产品
Replit Agent云端多语言全栈多语言完整项目Python / JS / Go 等多语言在线学编程、非 React 技术栈原型⭐⭐
Same.dev网站 UI 克隆前端页面还原代码前端(URL → 代码)参考竞品设计、快速获取建站初始模板
秒哒 Miaoda无代码应用搭建Web 应用 / 微信小程序Web + 小程序双端中文一句话出原型,尤其适合小程序

3. AI IDE — 与代码编辑器深度融合

3.1 关键点说明

适合人群:有一定编程基础、追求研发效率的开发者。

核心价值:上下文感知补全 + 自然语言对话改代码 + Agent 自主多文件重构,让"写代码"变成"描述 + 确认"。

如何上手:安装对应工具 → 打开项目 → 用快捷键呼出 AI 对话框(如 Cursor 的 Cmd+K)→ 用自然语言描述要改什么 → 确认差异后应用。

',6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.cursor.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.cursor.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Cursor")]),t("p",{class:"desc"},"基于 VS Code 深度改造的 AI 原生 IDE,三大核心能力:① Tab 智能补全(感知上下文多文件);② Cmd+K 行内生成与修改;③ Cursor Agent 可自主规划、读写多文件、运行终端完成复杂任务。是目前口碑最好的 AI 编程工具。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://www.trae.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-cdn.trae.com.cn/obj/trae-com-cn/trae_website_prod_cn/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Trae IDE")]),t("p",{class:"desc"},'国内出品的 AI 原生 IDE,"The Real AI Engineer(真正的 AI 工程师)",免费可用。三大核心能力:① 智能补全与对话式改代码;② 多文件 Agent 自主重构,全面对标 Cursor;③ **数据安全优先** — 坚持"本地优先、最小化数据收集"原则,内置隐私模式,代码默认存于本地。另提供 SOLO 在线轻量版供快速体验,适合关注数据主权的国内开发者与有合规要求的企业团队。'),t("span",{class:"VPBadge tip badge"},"国内自主支持")]),t("a",{href:"https://windsurf.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://codeium.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Windsurf")]),t("p",{class:"desc"},'Codeium 出品的 AI 原生 IDE,现已迁至独立域名 windsurf.com,口号"开发者做出最佳工作的地方"。两大核心能力:① **Cascade Agent** — 能前瞻 10 步以上,自动规划、编码、修复 Bug,深度理解整个代码库并串联多步骤任务;② **Windsurf Tab** — 一键补全代码、跳转光标、自动导入依赖,保持开发"心流"不中断。支持 GPT-4.5、Gemini 等主流模型,提供个人免费版与企业版。'),t("span",{class:"VPBadge tip badge"},"分析代码")])])],-1),e('

3.2 三款工具横向对比

💡 选择建议

  • 追求口碑最佳 + 生态最成熟的 AI IDE → Cursor(社区资源最丰富)
  • 数据安全 / 合规要求,或想要免费的国产方案 → Trae IDE
  • 喜欢 AI 自动串联多步任务,享受不中断的"心流"编程体验 → Windsurf
  • 三款均基于 VS Code 改造,现有 VS Code 插件和快捷键习惯均可无缝迁移
工具核心特色Agent 能力数据安全费用最适场景
Cursor多文件上下文感知补全 + Cmd+K 行内生成强 — 多文件规划 + 终端执行一般(代码发往云端)免费额度 + 订阅日常功能开发、多文件重构、代码 Review
Trae IDE国产免费 + 本地优先数据安全强 — 对标 Cursor,含在线 SOLO 版本地优先 + 隐私模式免费有合规需求的国内团队、个人日常开发
WindsurfCascade 前瞻规划 + Tab 一键心流强 — 前瞻 10 步、自动串联多步任务一般(代码发往云端)免费额度 + 订阅复杂多步任务自动执行、追求"心流"开发体验

4. Agentic Engineering — AI 自主完成工程任务

4.1 关键点说明

适合人群:希望将完整工程任务交给 AI 自主处理的资深开发者或团队。

核心价值:AI 不再只是"副驾驶",而是能自主读取代码库、运行测试、修复 Bug、甚至提交 PR 的"自主工程师",适合 Bug 修复、功能迭代、代码重构等完整工程周期。

如何上手(以 Claude Code 为例)npm install -g @anthropic-ai/claude-code → 在项目根目录执行 claude → 输入任务(如"帮我找出 #123 这个 Bug 的根因,写好测试后提交")→ Claude Code 自主读取代码库、执行命令并逐步反馈,审查后确认提交。

',6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://claude-update-code.squarespace.com/?gad_source=1&gad_campaignid=23635038607&gbraid=0AAAAADBLX79DSBI8Ftftv8_FSgjubKKve&gclid=CjwKCAiAtq_NBhA_EiwA78nNWBwq9FGhmQLtwZ0ImoSZ5098wJU2cJMAwk8pHy9DtfDpt6Zf_TzDNhoCptgQAvD_BwE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://claude.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Claude Code")]),t("p",{class:"desc"},'Anthropic 官方推出的命令行 AI 编程 Agent,在终端中直接与代码库深度对话,支持多文件读写、执行 Shell 命令、Git 操作,能够完成"读懂整个代码库→制定方案→逐步执行"的完整工程任务流,是最贴近真实工程流程的终端 Agent。'),t("span",{class:"VPBadge tip badge"},"CLI Agent")]),t("a",{href:"https://opencode.ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://opencode.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"opencode")]),t("p",{class:"desc"},"开源 AI 编程代理,Claude Code 的开源平替,内置免费模型,也可配置、连接任意提供商的任意模型,包括 Claude、GPT、Gemini,以及国内模型。"),t("span",{class:"VPBadge tip badge"},"开源 CLI Agent")]),t("a",{href:"https://devin.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://devin.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Devin")]),t("p",{class:"desc"},'全球首个商用"AI 软件工程师",能接收 GitHub Issue 或自然语言任务,自主浏览文档、搜索资料、编写代码、运行测试并提交 PR,具备完整工程任务自主执行闭环,是 Agentic Engineering 的行业标杆。'),t("span",{class:"VPBadge tip badge"},"自主 Agent 标杆")]),t("a",{href:"https://github.com/All-Hands-AI/OpenHands",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://github.githubassets.com/favicons/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenHands")]),t("p",{class:"desc"},"前 OpenDevin,完全开源的 AI 软件工程师平台,Devin 的开源可自托管替代方案,可本地 Docker 部署,支持接入多种 LLM(GPT / Claude / DeepSeek 等),自主执行代码库任务、运行 Shell 命令、浏览网页查阅文档。"),t("span",{class:"VPBadge tip badge"},"开源可自部署")]),t("a",{href:"https://www.augmentcode.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.augmentcode.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Augment Code")]),t("p",{class:"desc"},"专为大型代码库设计的 AI 编程 Agent 平台,能深度索引企业级代码库(百万行级别),提供精准的上下文感知补全和 Agent 任务执行,适合中大型团队在已有复杂代码库上进行 AI 辅助开发。"),t("span",{class:"VPBadge tip badge"},"企业级 Agent")])])],-1),e('

4.2 五款 Agentic 工具横向对比

选型建议

  • 个人 / 小项目:优先 Claude Code(体验最流畅),无订阅则用 opencode 接入低成本模型平替。
  • 团队 / 私有部署:用 OpenHands 自托管,统一管控模型与 API Key,保障数据不出域。
  • Issue 驱动的研发流:接入 Devin,让 AI 全程完成 Issue → 代码 → PR 闭环,人工只做 Review。
  • 大型存量代码库:优先 Augment Code,深度索引能力是 CLI Agent 难以替代的。
工具交互方式核心优势适场景典型任务示例费用
Claude Code终端 CLI与本地代码库深度结合,可执行 Shell / Git,多文件读写全自动个人或小团队的重构、批量 Bug 修复、自动提交等完整工程周期claude → "重构 auth 模块,保持接口不变,补齐单测后提交"Claude Pro / API 按量计费
opencode终端 CLI完全开源,内置免费模型,支持接入任意 LLM(含国内模型)无官方订阅、希望接入 DeepSeek / 通义等低成本模型的场景opencode → 配置自定义模型 → 同上工程任务取决于所接模型
DevinWeb 界面高度自主,可持续跟进 GitHub Issue,全链路无人值守有明确 Issue 驱动的团队研发流,AI 自动完成功能开发并提 PR粘贴 Issue URL → 指定验收标准 → 审查 PR付费(企业为主)
OpenHandsWeb / API开源自托管,支持多 LLM,可定制扩展 Agentic 流程企业私有化部署,团队共享 AI 工程师能力,保障数据安全Docker 启动 → 接入 DeepSeek → 批量分配修复任务开源免费,按模型计费
Augment CodeIDE 插件深度索引百万行级代码库,上下文感知精准大型企业存量代码库的日常开发、重构与工程管理圈选模块 → "梳理调用链并生成文档"免费额度 + 订阅
',3)])])}const m=s(d,[["render",i]]);export{h as __pageData,m as default}; +import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","permalink":"/ai-coding/resources","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","categories":["全栈","AI 编程系列"],"tags":["资源推荐","AI","AI Coding","Vibe Coding","Agentic Engineering"]},"headers":[],"relativePath":"ai-coding/resources.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md"}'),d={name:"ai-coding/resources.md"};function i(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e('

AI 编程工具与资源推荐

摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。

1. 三种编程范式速览

范式一句话描述你的角色
Vibe Coding用自然语言描述需求,AI 直接生成可运行的完整项目描述需求,让 AI 写代码(新手友好)
AI IDE在编辑器里引入 AI 辅助,边写边补全、边问边改主导开发,让 AI 做副驾驶(更多控制)
Agentic EngineeringAI 作为"自主工程师",接收任务后自动规划并执行全套代码工作流提任务、审结果,让 AI 执行(极致提效)

新手路线建议:先用 Bolt.new 或 v0.dev 体验 Vibe Coding 零门槛出产品的感觉 → 再切换到 Cursor 做日常编码提效 → 最后尝试 Claude Code/opencode 体验 AI 自主完成工程任务,三步感受"AI 如何重塑编程工作流"。

注意:使用 Claude Code 等 CLI Agent 工具,需要订阅官方模型服务(Claude Pro / API)。若暂无订阅,可通过配置自定义模型服务,支持对接兼容 第三方服务(如 GLM、DeepSeek、通义千问),实现低成本上手。

2. Vibe Coding — 用自然语言"说"出一个应用

2.1 关键点说明

适合人群:产品经理、设计师、创业者,或想快速验证想法的非专业开发者。

核心价值:从一段文字描述到可运行的 Web 应用,无需搭建开发环境;天生适合 MVP 原型验证UI 快速迭代

如何上手:打开网站 → 在输入框描述你的应用(如"做一个番茄钟 App,有开始暂停按钮,完成后有提示音")→ AI 生成代码并实时预览 → 继续对话迭代功能。

',9),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://bolt.new/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://bolt.new/static/favicon-192x192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Bolt.new")]),t("p",{class:"desc"},"StackBlitz 推出的全栈 AI 开发平台,在浏览器中直接生成并运行完整的 React 项目,支持多轮对话迭代,可一键部署到 Netlify / Vercel,零环境配置从描述到上线全链路打通。"),t("span",{class:"VPBadge tip badge"},"一键部署")]),t("a",{href:"https://v0.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://v0.app/assets/icon-dark-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"v0 (Vercel)")]),t("p",{class:"desc"},"Vercel 推出的 UI 组件生成工具,专注前端界面:用自然语言描述界面,生成 React + Tailwind CSS + shadcn/ui 组件代码,可直接复制进项目,天生与 Next.js 生态无缝衔接,非常适合前端 UI 的快速原型。"),t("span",{class:"VPBadge tip badge"},"UI 生成")]),t("a",{href:"https://lovable.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lovable.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Lovable")]),t("p",{class:"desc"},"面向非技术用户的 AI 全栈应用生成器,输入产品想法生成前后端完整应用,内置 Supabase 数据库集成与一键部署,支持实时预览和多轮对话修改,让没有编程基础的人也能独立做出可上线的 Web 产品。"),t("span",{class:"VPBadge tip badge"},"无代码全栈")]),t("a",{href:"https://replit.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://replit.com/public/icons/favicon-prompt-192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Replit Agent")]),t("p",{class:"desc"},"云端在线 IDE Replit 内置的 AI Agent,能从需求描述自动生成完整项目、安装依赖、运行调试,全程在浏览器内完成,内置托管与分享功能,零本地环境要求,适合快速原型和在线学习编程。"),t("span",{class:"VPBadge tip badge"},"云端全栈")]),t("a",{href:"https://same.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://same.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Same.dev")]),t("p",{class:"desc"},'专注"克隆任意网站 UI"的 AI 编码工具,输入目标网站 URL,AI 自动还原其界面并生成对应前端代码,适合学习参考优秀设计、快速复现竞品界面,以及建站初始模板快速搭建。'),t("span",{class:"VPBadge tip badge"},"UI 克隆")]),t("a",{href:"https://www.miaoda.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://resource-static.cdn.bcebos.com/img/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秒哒 Miaoda")]),t("p",{class:"desc"},'百度出品的无代码应用搭建平台,口号"一句话做应用"。在输入框用自然语言描述需求,即可一键生成可部署的 Web 应用或微信小程序;内置深度开发模式、插件市场与风格定制,帮助想法从描述直达成品。配套"应用广场"汇聚社区作品,可浏览、点赞并参考他人案例,适合产品原型快速验证、学习参考与演示展示。'),t("span",{class:"VPBadge tip badge"},"中文体验佳")])])],-1),e('

2.2 六款工具横向对比

💡 快速选择建议

  • 要做完整全栈 Web 并直接上线Bolt.new(成熟度最高)
  • 只需前端 UI 组件嵌入现有项目 → v0
  • 非技术背景想独立做出有数据库的产品 → Lovable
  • 在线学编程或使用 Python / Go 等非 React 语言 → Replit Agent
  • 手头有参考网站想直接还原其界面 → Same.dev
  • 中文用户或目标平台是微信小程序秒哒 Miaoda
工具核心定位输出形态技术栈最适场景上手门槛
Bolt.new应用生成完整 Web 应用React快速生成可部署全栈 Demo
v0UI 组件生成React 组件代码片段React + Tailwind + shadcn/ui前端界面快速出图,嵌入 Next.js 项目
Lovable零代码全栈建站含数据库的完整 Web 产品前端 + Supabase 后端非技术人员独立做出可上线产品
Replit Agent云端多语言全栈多语言完整项目Python / JS / Go 等多语言在线学编程、非 React 技术栈原型⭐⭐
Same.dev网站 UI 克隆前端页面还原代码前端(URL → 代码)参考竞品设计、快速获取建站初始模板
秒哒 Miaoda无代码应用搭建Web 应用 / 微信小程序Web + 小程序双端中文一句话出原型,尤其适合小程序

3. AI IDE — 与代码编辑器深度融合

3.1 关键点说明

适合人群:有一定编程基础、追求研发效率的开发者。

核心价值:上下文感知补全 + 自然语言对话改代码 + Agent 自主多文件重构,让"写代码"变成"描述 + 确认"。

如何上手:安装对应工具 → 打开项目 → 用快捷键呼出 AI 对话框(如 Cursor 的 Cmd+K)→ 用自然语言描述要改什么 → 确认差异后应用。

',6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.cursor.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.cursor.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Cursor")]),t("p",{class:"desc"},"基于 VS Code 深度改造的 AI 原生 IDE,三大核心能力:① Tab 智能补全(感知上下文多文件);② Cmd+K 行内生成与修改;③ Cursor Agent 可自主规划、读写多文件、运行终端完成复杂任务。是目前口碑最好的 AI 编程工具。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://www.trae.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-cdn.trae.com.cn/obj/trae-com-cn/trae_website_prod_cn/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Trae IDE")]),t("p",{class:"desc"},'国内出品的 AI 原生 IDE,"The Real AI Engineer(真正的 AI 工程师)",免费可用。三大核心能力:① 智能补全与对话式改代码;② 多文件 Agent 自主重构,全面对标 Cursor;③ **数据安全优先** — 坚持"本地优先、最小化数据收集"原则,内置隐私模式,代码默认存于本地。另提供 SOLO 在线轻量版供快速体验,适合关注数据主权的国内开发者与有合规要求的企业团队。'),t("span",{class:"VPBadge tip badge"},"国内自主支持")]),t("a",{href:"https://windsurf.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://codeium.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Windsurf")]),t("p",{class:"desc"},'Codeium 出品的 AI 原生 IDE,现已迁至独立域名 windsurf.com,口号"开发者做出最佳工作的地方"。两大核心能力:① **Cascade Agent** — 能前瞻 10 步以上,自动规划、编码、修复 Bug,深度理解整个代码库并串联多步骤任务;② **Windsurf Tab** — 一键补全代码、跳转光标、自动导入依赖,保持开发"心流"不中断。支持 GPT-4.5、Gemini 等主流模型,提供个人免费版与企业版。'),t("span",{class:"VPBadge tip badge"},"分析代码")])])],-1),e('

3.2 三款工具横向对比

💡 选择建议

  • 追求口碑最佳 + 生态最成熟的 AI IDE → Cursor(社区资源最丰富)
  • 数据安全 / 合规要求,或想要免费的国产方案 → Trae IDE
  • 喜欢 AI 自动串联多步任务,享受不中断的"心流"编程体验 → Windsurf
  • 三款均基于 VS Code 改造,现有 VS Code 插件和快捷键习惯均可无缝迁移
工具核心特色Agent 能力数据安全费用最适场景
Cursor多文件上下文感知补全 + Cmd+K 行内生成强 — 多文件规划 + 终端执行一般(代码发往云端)免费额度 + 订阅日常功能开发、多文件重构、代码 Review
Trae IDE国产免费 + 本地优先数据安全强 — 对标 Cursor,含在线 SOLO 版本地优先 + 隐私模式免费有合规需求的国内团队、个人日常开发
WindsurfCascade 前瞻规划 + Tab 一键心流强 — 前瞻 10 步、自动串联多步任务一般(代码发往云端)免费额度 + 订阅复杂多步任务自动执行、追求"心流"开发体验

4. Agentic Engineering — AI 自主完成工程任务

4.1 关键点说明

适合人群:希望将完整工程任务交给 AI 自主处理的资深开发者或团队。

核心价值:AI 不再只是"副驾驶",而是能自主读取代码库、运行测试、修复 Bug、甚至提交 PR 的"自主工程师",适合 Bug 修复、功能迭代、代码重构等完整工程周期。

如何上手(以 Claude Code 为例)npm install -g @anthropic-ai/claude-code → 在项目根目录执行 claude → 输入任务(如"帮我找出 #123 这个 Bug 的根因,写好测试后提交")→ Claude Code 自主读取代码库、执行命令并逐步反馈,审查后确认提交。

',6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://claude-update-code.squarespace.com/?gad_source=1&gad_campaignid=23635038607&gbraid=0AAAAADBLX79DSBI8Ftftv8_FSgjubKKve&gclid=CjwKCAiAtq_NBhA_EiwA78nNWBwq9FGhmQLtwZ0ImoSZ5098wJU2cJMAwk8pHy9DtfDpt6Zf_TzDNhoCptgQAvD_BwE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://claude.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Claude Code")]),t("p",{class:"desc"},'Anthropic 官方推出的命令行 AI 编程 Agent,在终端中直接与代码库深度对话,支持多文件读写、执行 Shell 命令、Git 操作,能够完成"读懂整个代码库→制定方案→逐步执行"的完整工程任务流,是最贴近真实工程流程的终端 Agent。'),t("span",{class:"VPBadge tip badge"},"CLI Agent")]),t("a",{href:"https://opencode.ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://opencode.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"opencode")]),t("p",{class:"desc"},"开源 AI 编程代理,Claude Code 的开源平替,内置免费模型,也可配置、连接任意提供商的任意模型,包括 Claude、GPT、Gemini,以及国内模型。"),t("span",{class:"VPBadge tip badge"},"开源 CLI Agent")]),t("a",{href:"https://devin.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://devin.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Devin")]),t("p",{class:"desc"},'全球首个商用"AI 软件工程师",能接收 GitHub Issue 或自然语言任务,自主浏览文档、搜索资料、编写代码、运行测试并提交 PR,具备完整工程任务自主执行闭环,是 Agentic Engineering 的行业标杆。'),t("span",{class:"VPBadge tip badge"},"自主 Agent 标杆")]),t("a",{href:"https://github.com/All-Hands-AI/OpenHands",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://github.githubassets.com/favicons/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenHands")]),t("p",{class:"desc"},"前 OpenDevin,完全开源的 AI 软件工程师平台,Devin 的开源可自托管替代方案,可本地 Docker 部署,支持接入多种 LLM(GPT / Claude / DeepSeek 等),自主执行代码库任务、运行 Shell 命令、浏览网页查阅文档。"),t("span",{class:"VPBadge tip badge"},"开源可自部署")]),t("a",{href:"https://www.augmentcode.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.augmentcode.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Augment Code")]),t("p",{class:"desc"},"专为大型代码库设计的 AI 编程 Agent 平台,能深度索引企业级代码库(百万行级别),提供精准的上下文感知补全和 Agent 任务执行,适合中大型团队在已有复杂代码库上进行 AI 辅助开发。"),t("span",{class:"VPBadge tip badge"},"企业级 Agent")])])],-1),e('

4.2 五款 Agentic 工具横向对比

选型建议

  • 个人 / 小项目:优先 Claude Code(体验最流畅),无订阅则用 opencode 接入低成本模型平替。
  • 团队 / 私有部署:用 OpenHands 自托管,统一管控模型与 API Key,保障数据不出域。
  • Issue 驱动的研发流:接入 Devin,让 AI 全程完成 Issue → 代码 → PR 闭环,人工只做 Review。
  • 大型存量代码库:优先 Augment Code,深度索引能力是 CLI Agent 难以替代的。
工具交互方式核心优势适场景典型任务示例费用
Claude Code终端 CLI与本地代码库深度结合,可执行 Shell / Git,多文件读写全自动个人或小团队的重构、批量 Bug 修复、自动提交等完整工程周期claude → "重构 auth 模块,保持接口不变,补齐单测后提交"Claude Pro / API 按量计费
opencode终端 CLI完全开源,内置免费模型,支持接入任意 LLM(含国内模型)无官方订阅、希望接入 DeepSeek / 通义等低成本模型的场景opencode → 配置自定义模型 → 同上工程任务取决于所接模型
DevinWeb 界面高度自主,可持续跟进 GitHub Issue,全链路无人值守有明确 Issue 驱动的团队研发流,AI 自动完成功能开发并提 PR粘贴 Issue URL → 指定验收标准 → 审查 PR付费(企业为主)
OpenHandsWeb / API开源自托管,支持多 LLM,可定制扩展 Agentic 流程企业私有化部署,团队共享 AI 工程师能力,保障数据安全Docker 启动 → 接入 DeepSeek → 批量分配修复任务开源免费,按模型计费
Augment CodeIDE 插件深度索引百万行级代码库,上下文感知精准大型企业存量代码库的日常开发、重构与工程管理圈选模块 → "梳理调用链并生成文档"免费额度 + 订阅
',3)])])}const m=s(d,[["render",i]]);export{h as __pageData,m as default}; diff --git a/assets/ai-coding_resources.md.nk3hBjmO.lean.js b/assets/ai-coding_resources.md.BEyzO6Q5.lean.js similarity index 99% rename from assets/ai-coding_resources.md.nk3hBjmO.lean.js rename to assets/ai-coding_resources.md.BEyzO6Q5.lean.js index a37cefd..a5c3404 100644 --- a/assets/ai-coding_resources.md.nk3hBjmO.lean.js +++ b/assets/ai-coding_resources.md.BEyzO6Q5.lean.js @@ -1 +1 @@ -import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","permalink":"/ai-coding/resources","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","categories":["全栈","AI 编程系列"],"tags":["资源推荐","AI","AI Coding","Vibe Coding","Agentic Engineering"]},"headers":[],"relativePath":"ai-coding/resources.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md"}'),d={name:"ai-coding/resources.md"};function i(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e("",9),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://bolt.new/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://bolt.new/static/favicon-192x192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Bolt.new")]),t("p",{class:"desc"},"StackBlitz 推出的全栈 AI 开发平台,在浏览器中直接生成并运行完整的 React 项目,支持多轮对话迭代,可一键部署到 Netlify / Vercel,零环境配置从描述到上线全链路打通。"),t("span",{class:"VPBadge tip badge"},"一键部署")]),t("a",{href:"https://v0.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://v0.app/assets/icon-dark-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"v0 (Vercel)")]),t("p",{class:"desc"},"Vercel 推出的 UI 组件生成工具,专注前端界面:用自然语言描述界面,生成 React + Tailwind CSS + shadcn/ui 组件代码,可直接复制进项目,天生与 Next.js 生态无缝衔接,非常适合前端 UI 的快速原型。"),t("span",{class:"VPBadge tip badge"},"UI 生成")]),t("a",{href:"https://lovable.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lovable.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Lovable")]),t("p",{class:"desc"},"面向非技术用户的 AI 全栈应用生成器,输入产品想法生成前后端完整应用,内置 Supabase 数据库集成与一键部署,支持实时预览和多轮对话修改,让没有编程基础的人也能独立做出可上线的 Web 产品。"),t("span",{class:"VPBadge tip badge"},"无代码全栈")]),t("a",{href:"https://replit.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://replit.com/public/icons/favicon-prompt-192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Replit Agent")]),t("p",{class:"desc"},"云端在线 IDE Replit 内置的 AI Agent,能从需求描述自动生成完整项目、安装依赖、运行调试,全程在浏览器内完成,内置托管与分享功能,零本地环境要求,适合快速原型和在线学习编程。"),t("span",{class:"VPBadge tip badge"},"云端全栈")]),t("a",{href:"https://same.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://same.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Same.dev")]),t("p",{class:"desc"},'专注"克隆任意网站 UI"的 AI 编码工具,输入目标网站 URL,AI 自动还原其界面并生成对应前端代码,适合学习参考优秀设计、快速复现竞品界面,以及建站初始模板快速搭建。'),t("span",{class:"VPBadge tip badge"},"UI 克隆")]),t("a",{href:"https://www.miaoda.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://resource-static.cdn.bcebos.com/img/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秒哒 Miaoda")]),t("p",{class:"desc"},'百度出品的无代码应用搭建平台,口号"一句话做应用"。在输入框用自然语言描述需求,即可一键生成可部署的 Web 应用或微信小程序;内置深度开发模式、插件市场与风格定制,帮助想法从描述直达成品。配套"应用广场"汇聚社区作品,可浏览、点赞并参考他人案例,适合产品原型快速验证、学习参考与演示展示。'),t("span",{class:"VPBadge tip badge"},"中文体验佳")])])],-1),e("",6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.cursor.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.cursor.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Cursor")]),t("p",{class:"desc"},"基于 VS Code 深度改造的 AI 原生 IDE,三大核心能力:① Tab 智能补全(感知上下文多文件);② Cmd+K 行内生成与修改;③ Cursor Agent 可自主规划、读写多文件、运行终端完成复杂任务。是目前口碑最好的 AI 编程工具。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://www.trae.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-cdn.trae.com.cn/obj/trae-com-cn/trae_website_prod_cn/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Trae IDE")]),t("p",{class:"desc"},'国内出品的 AI 原生 IDE,"The Real AI Engineer(真正的 AI 工程师)",免费可用。三大核心能力:① 智能补全与对话式改代码;② 多文件 Agent 自主重构,全面对标 Cursor;③ **数据安全优先** — 坚持"本地优先、最小化数据收集"原则,内置隐私模式,代码默认存于本地。另提供 SOLO 在线轻量版供快速体验,适合关注数据主权的国内开发者与有合规要求的企业团队。'),t("span",{class:"VPBadge tip badge"},"国内自主支持")]),t("a",{href:"https://windsurf.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://codeium.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Windsurf")]),t("p",{class:"desc"},'Codeium 出品的 AI 原生 IDE,现已迁至独立域名 windsurf.com,口号"开发者做出最佳工作的地方"。两大核心能力:① **Cascade Agent** — 能前瞻 10 步以上,自动规划、编码、修复 Bug,深度理解整个代码库并串联多步骤任务;② **Windsurf Tab** — 一键补全代码、跳转光标、自动导入依赖,保持开发"心流"不中断。支持 GPT-4.5、Gemini 等主流模型,提供个人免费版与企业版。'),t("span",{class:"VPBadge tip badge"},"分析代码")])])],-1),e("",6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://claude-update-code.squarespace.com/?gad_source=1&gad_campaignid=23635038607&gbraid=0AAAAADBLX79DSBI8Ftftv8_FSgjubKKve&gclid=CjwKCAiAtq_NBhA_EiwA78nNWBwq9FGhmQLtwZ0ImoSZ5098wJU2cJMAwk8pHy9DtfDpt6Zf_TzDNhoCptgQAvD_BwE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://claude.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Claude Code")]),t("p",{class:"desc"},'Anthropic 官方推出的命令行 AI 编程 Agent,在终端中直接与代码库深度对话,支持多文件读写、执行 Shell 命令、Git 操作,能够完成"读懂整个代码库→制定方案→逐步执行"的完整工程任务流,是最贴近真实工程流程的终端 Agent。'),t("span",{class:"VPBadge tip badge"},"CLI Agent")]),t("a",{href:"https://opencode.ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://opencode.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"opencode")]),t("p",{class:"desc"},"开源 AI 编程代理,Claude Code 的开源平替,内置免费模型,也可配置、连接任意提供商的任意模型,包括 Claude、GPT、Gemini,以及国内模型。"),t("span",{class:"VPBadge tip badge"},"开源 CLI Agent")]),t("a",{href:"https://devin.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://devin.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Devin")]),t("p",{class:"desc"},'全球首个商用"AI 软件工程师",能接收 GitHub Issue 或自然语言任务,自主浏览文档、搜索资料、编写代码、运行测试并提交 PR,具备完整工程任务自主执行闭环,是 Agentic Engineering 的行业标杆。'),t("span",{class:"VPBadge tip badge"},"自主 Agent 标杆")]),t("a",{href:"https://github.com/All-Hands-AI/OpenHands",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://github.githubassets.com/favicons/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenHands")]),t("p",{class:"desc"},"前 OpenDevin,完全开源的 AI 软件工程师平台,Devin 的开源可自托管替代方案,可本地 Docker 部署,支持接入多种 LLM(GPT / Claude / DeepSeek 等),自主执行代码库任务、运行 Shell 命令、浏览网页查阅文档。"),t("span",{class:"VPBadge tip badge"},"开源可自部署")]),t("a",{href:"https://www.augmentcode.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.augmentcode.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Augment Code")]),t("p",{class:"desc"},"专为大型代码库设计的 AI 编程 Agent 平台,能深度索引企业级代码库(百万行级别),提供精准的上下文感知补全和 Agent 任务执行,适合中大型团队在已有复杂代码库上进行 AI 辅助开发。"),t("span",{class:"VPBadge tip badge"},"企业级 Agent")])])],-1),e("",3)])])}const m=s(d,[["render",i]]);export{h as __pageData,m as default}; +import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"AI 编程工具与资源推荐","description":"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。","permalink":"/ai-coding/resources","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png","categories":["全栈","AI 编程系列"],"tags":["资源推荐","AI","AI Coding","Vibe Coding","Agentic Engineering"]},"headers":[],"relativePath":"ai-coding/resources.md","filePath":"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md"}'),d={name:"ai-coding/resources.md"};function i(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e("",9),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://bolt.new/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://bolt.new/static/favicon-192x192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Bolt.new")]),t("p",{class:"desc"},"StackBlitz 推出的全栈 AI 开发平台,在浏览器中直接生成并运行完整的 React 项目,支持多轮对话迭代,可一键部署到 Netlify / Vercel,零环境配置从描述到上线全链路打通。"),t("span",{class:"VPBadge tip badge"},"一键部署")]),t("a",{href:"https://v0.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://v0.app/assets/icon-dark-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"v0 (Vercel)")]),t("p",{class:"desc"},"Vercel 推出的 UI 组件生成工具,专注前端界面:用自然语言描述界面,生成 React + Tailwind CSS + shadcn/ui 组件代码,可直接复制进项目,天生与 Next.js 生态无缝衔接,非常适合前端 UI 的快速原型。"),t("span",{class:"VPBadge tip badge"},"UI 生成")]),t("a",{href:"https://lovable.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lovable.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Lovable")]),t("p",{class:"desc"},"面向非技术用户的 AI 全栈应用生成器,输入产品想法生成前后端完整应用,内置 Supabase 数据库集成与一键部署,支持实时预览和多轮对话修改,让没有编程基础的人也能独立做出可上线的 Web 产品。"),t("span",{class:"VPBadge tip badge"},"无代码全栈")]),t("a",{href:"https://replit.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://replit.com/public/icons/favicon-prompt-192.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Replit Agent")]),t("p",{class:"desc"},"云端在线 IDE Replit 内置的 AI Agent,能从需求描述自动生成完整项目、安装依赖、运行调试,全程在浏览器内完成,内置托管与分享功能,零本地环境要求,适合快速原型和在线学习编程。"),t("span",{class:"VPBadge tip badge"},"云端全栈")]),t("a",{href:"https://same.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://same.dev/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Same.dev")]),t("p",{class:"desc"},'专注"克隆任意网站 UI"的 AI 编码工具,输入目标网站 URL,AI 自动还原其界面并生成对应前端代码,适合学习参考优秀设计、快速复现竞品界面,以及建站初始模板快速搭建。'),t("span",{class:"VPBadge tip badge"},"UI 克隆")]),t("a",{href:"https://www.miaoda.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://resource-static.cdn.bcebos.com/img/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秒哒 Miaoda")]),t("p",{class:"desc"},'百度出品的无代码应用搭建平台,口号"一句话做应用"。在输入框用自然语言描述需求,即可一键生成可部署的 Web 应用或微信小程序;内置深度开发模式、插件市场与风格定制,帮助想法从描述直达成品。配套"应用广场"汇聚社区作品,可浏览、点赞并参考他人案例,适合产品原型快速验证、学习参考与演示展示。'),t("span",{class:"VPBadge tip badge"},"中文体验佳")])])],-1),e("",6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.cursor.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.cursor.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Cursor")]),t("p",{class:"desc"},"基于 VS Code 深度改造的 AI 原生 IDE,三大核心能力:① Tab 智能补全(感知上下文多文件);② Cmd+K 行内生成与修改;③ Cursor Agent 可自主规划、读写多文件、运行终端完成复杂任务。是目前口碑最好的 AI 编程工具。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://www.trae.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-cdn.trae.com.cn/obj/trae-com-cn/trae_website_prod_cn/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Trae IDE")]),t("p",{class:"desc"},'国内出品的 AI 原生 IDE,"The Real AI Engineer(真正的 AI 工程师)",免费可用。三大核心能力:① 智能补全与对话式改代码;② 多文件 Agent 自主重构,全面对标 Cursor;③ **数据安全优先** — 坚持"本地优先、最小化数据收集"原则,内置隐私模式,代码默认存于本地。另提供 SOLO 在线轻量版供快速体验,适合关注数据主权的国内开发者与有合规要求的企业团队。'),t("span",{class:"VPBadge tip badge"},"国内自主支持")]),t("a",{href:"https://windsurf.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://codeium.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Windsurf")]),t("p",{class:"desc"},'Codeium 出品的 AI 原生 IDE,现已迁至独立域名 windsurf.com,口号"开发者做出最佳工作的地方"。两大核心能力:① **Cascade Agent** — 能前瞻 10 步以上,自动规划、编码、修复 Bug,深度理解整个代码库并串联多步骤任务;② **Windsurf Tab** — 一键补全代码、跳转光标、自动导入依赖,保持开发"心流"不中断。支持 GPT-4.5、Gemini 等主流模型,提供个人免费版与企业版。'),t("span",{class:"VPBadge tip badge"},"分析代码")])])],-1),e("",6),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://claude-update-code.squarespace.com/?gad_source=1&gad_campaignid=23635038607&gbraid=0AAAAADBLX79DSBI8Ftftv8_FSgjubKKve&gclid=CjwKCAiAtq_NBhA_EiwA78nNWBwq9FGhmQLtwZ0ImoSZ5098wJU2cJMAwk8pHy9DtfDpt6Zf_TzDNhoCptgQAvD_BwE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://claude.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Claude Code")]),t("p",{class:"desc"},'Anthropic 官方推出的命令行 AI 编程 Agent,在终端中直接与代码库深度对话,支持多文件读写、执行 Shell 命令、Git 操作,能够完成"读懂整个代码库→制定方案→逐步执行"的完整工程任务流,是最贴近真实工程流程的终端 Agent。'),t("span",{class:"VPBadge tip badge"},"CLI Agent")]),t("a",{href:"https://opencode.ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://opencode.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"opencode")]),t("p",{class:"desc"},"开源 AI 编程代理,Claude Code 的开源平替,内置免费模型,也可配置、连接任意提供商的任意模型,包括 Claude、GPT、Gemini,以及国内模型。"),t("span",{class:"VPBadge tip badge"},"开源 CLI Agent")]),t("a",{href:"https://devin.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://devin.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Devin")]),t("p",{class:"desc"},'全球首个商用"AI 软件工程师",能接收 GitHub Issue 或自然语言任务,自主浏览文档、搜索资料、编写代码、运行测试并提交 PR,具备完整工程任务自主执行闭环,是 Agentic Engineering 的行业标杆。'),t("span",{class:"VPBadge tip badge"},"自主 Agent 标杆")]),t("a",{href:"https://github.com/All-Hands-AI/OpenHands",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://github.githubassets.com/favicons/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenHands")]),t("p",{class:"desc"},"前 OpenDevin,完全开源的 AI 软件工程师平台,Devin 的开源可自托管替代方案,可本地 Docker 部署,支持接入多种 LLM(GPT / Claude / DeepSeek 等),自主执行代码库任务、运行 Shell 命令、浏览网页查阅文档。"),t("span",{class:"VPBadge tip badge"},"开源可自部署")]),t("a",{href:"https://www.augmentcode.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.augmentcode.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Augment Code")]),t("p",{class:"desc"},"专为大型代码库设计的 AI 编程 Agent 平台,能深度索引企业级代码库(百万行级别),提供精准的上下文感知补全和 Agent 任务执行,适合中大型团队在已有复杂代码库上进行 AI 辅助开发。"),t("span",{class:"VPBadge tip badge"},"企业级 Agent")])])],-1),e("",3)])])}const m=s(d,[["render",i]]);export{h as __pageData,m as default}; diff --git a/assets/ai_agent_claude-agent-sdk-basic-build.md.CgSYkaoQ.js b/assets/ai_agent_claude-agent-sdk-basic-build.md.DyF6SguD.js similarity index 99% rename from assets/ai_agent_claude-agent-sdk-basic-build.md.CgSYkaoQ.js rename to assets/ai_agent_claude-agent-sdk-basic-build.md.DyF6SguD.js index b7a85f5..5e5760f 100644 --- a/assets/ai_agent_claude-agent-sdk-basic-build.md.CgSYkaoQ.js +++ b/assets/ai_agent_claude-agent-sdk-basic-build.md.DyF6SguD.js @@ -1,4 +1,4 @@ -import{T as n}from"./chunks/TwoColumnImage.CvkELYbv.js";import{c as l,o as p,d as e,b as h,a as i,e as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e(`

告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环

摘要总结:在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop、会话持久化等机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。

1. 引言

当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的"半自动"模式,进化为能够自主洞察环境变化动态调整执行策略实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。

近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent 的首选。

本文将基于 Claude Agent SDK,分享一个从 0 到 1 构建简单 Agent 的实践经验。相关源代码已开源至 GitHub,托管在我与几个好友共同创建的组织 full-stack-workspace 旗下的 agent-playground 仓库中,对应示例项目为:@agent-playground/basic-example

2. 为什么选择 Claude Agent SDK?

Claude Agent SDK(前身为 Claude Code SDK)是 Anthropic 官方推出的开源框架。它的核心价值在于将复杂的“规划-执行-观察”循环(Agent Loop)进行了高度工程化封装,提供简洁的 API 用于构建具有工具使用能力的 AI Agent,让开发者专注于业务逻辑和智能体行为的设计。

对于开发者而言,它解决了以下核心痛点:

特性说明
Agent LoopSDK 内部自动管理多轮交互、规划决策和工具调用,开发者无需再手写复杂的递归或循环逻辑。
开箱即用的原生技能预置了经过 Anthropic 深度优化的工具,如文件系统操作(Read/Write/Edit)、终端命令执行(Bash)以及网络访问。
渐进式权限控制提供多级 PermissionMode(如 acceptEdits、dontAsk 等),在安全与效率之间取得了极佳平衡。
上下文"记忆"管理通过会话 ID 自动处理对话历史和工作状态,支持复杂的长上下文理解。

更多了解可参考:Claude Agent SDK 文档

3.快速上手:环境配置与初始化

3.1 安装依赖

由于本项目基于 Node.js 与 TypeScript,首先需要引入核心包:

bash
pnpm install @anthropic-ai/claude-agent-sdk

3.2 环境变量的“陷阱”与配置

SDK 默认不会主动扫描 .env 文件。为了确保 API Key 和自定义模型参数生效,我们需要在入口处显式加载:

typescript
// 项目入口文件 index.ts
+import{T as n}from"./chunks/TwoColumnImage.BkZ7ar0-.js";import{c as l,o as p,d as e,b as h,a as i,e as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e(`

告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环

摘要总结:在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop、会话持久化等机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。

1. 引言

当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的"半自动"模式,进化为能够自主洞察环境变化动态调整执行策略实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。

近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent 的首选。

本文将基于 Claude Agent SDK,分享一个从 0 到 1 构建简单 Agent 的实践经验。相关源代码已开源至 GitHub,托管在我与几个好友共同创建的组织 full-stack-workspace 旗下的 agent-playground 仓库中,对应示例项目为:@agent-playground/basic-example

2. 为什么选择 Claude Agent SDK?

Claude Agent SDK(前身为 Claude Code SDK)是 Anthropic 官方推出的开源框架。它的核心价值在于将复杂的“规划-执行-观察”循环(Agent Loop)进行了高度工程化封装,提供简洁的 API 用于构建具有工具使用能力的 AI Agent,让开发者专注于业务逻辑和智能体行为的设计。

对于开发者而言,它解决了以下核心痛点:

特性说明
Agent LoopSDK 内部自动管理多轮交互、规划决策和工具调用,开发者无需再手写复杂的递归或循环逻辑。
开箱即用的原生技能预置了经过 Anthropic 深度优化的工具,如文件系统操作(Read/Write/Edit)、终端命令执行(Bash)以及网络访问。
渐进式权限控制提供多级 PermissionMode(如 acceptEdits、dontAsk 等),在安全与效率之间取得了极佳平衡。
上下文"记忆"管理通过会话 ID 自动处理对话历史和工作状态,支持复杂的长上下文理解。

更多了解可参考:Claude Agent SDK 文档

3.快速上手:环境配置与初始化

3.1 安装依赖

由于本项目基于 Node.js 与 TypeScript,首先需要引入核心包:

bash
pnpm install @anthropic-ai/claude-agent-sdk

3.2 环境变量的“陷阱”与配置

SDK 默认不会主动扫描 .env 文件。为了确保 API Key 和自定义模型参数生效,我们需要在入口处显式加载:

typescript
// 项目入口文件 index.ts
 // 显式将 .env 文件中的内容加载到环境变量中
 import 'dotenv/config';

.env 文件配置建议:在测试阶段,建议配置 ANTHROPIC_DEFAULT_HAIKU_MODEL 处理简单逻辑,使用 SONNET 处理复杂规划,以平衡响应速度与成本。

bash
# .env
 ANTHROPIC_BASE_URL=your_custom_model_api_base_url
diff --git a/assets/ai_agent_claude-agent-sdk-basic-build.md.CgSYkaoQ.lean.js b/assets/ai_agent_claude-agent-sdk-basic-build.md.DyF6SguD.lean.js
similarity index 96%
rename from assets/ai_agent_claude-agent-sdk-basic-build.md.CgSYkaoQ.lean.js
rename to assets/ai_agent_claude-agent-sdk-basic-build.md.DyF6SguD.lean.js
index 6f5236b..653c18e 100644
--- a/assets/ai_agent_claude-agent-sdk-basic-build.md.CgSYkaoQ.lean.js
+++ b/assets/ai_agent_claude-agent-sdk-basic-build.md.DyF6SguD.lean.js
@@ -1 +1 @@
-import{T as n}from"./chunks/TwoColumnImage.CvkELYbv.js";import{c as l,o as p,d as e,b as h,a as i,e as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e("",51)),h(n,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_1.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_2.png",leftCaption:"",rightCaption:""}),s[1]||(s[1]=i("h2",{id:"_7-结束语",tabindex:"-1"},[a("7. 结束语 "),i("a",{class:"header-anchor",href:"#_7-结束语","aria-label":"Permalink to “7. 结束语”"},"​")],-1)),s[2]||(s[2]=i("blockquote",null,[i("p",null,[i("strong",null,"从“调包侠”到“AI 架构师”,迈向更复杂的业务编排。")])],-1)),s[3]||(s[3]=i("p",null,[a("通过 Claude Agent SDK ,我们仅需少量代码就能构建出具备自主执行能力的 Agent,其背后的设计思想:"),i("strong",null,"通过标准化 Skill 和会话管理"),a(",将复杂的 AI 交互逻辑转化为可预测的软件工程实践。")],-1)),s[4]||(s[4]=i("p",null,"深度体验后,我最大的感触是:,Agent 的开发重心也正在转向“如何构建可靠的工程闭环”。通过 SDK 提供的 Agent Loop、会话管理和标准化的工具、Skill 和 MCP 等扩展,我们实际上是在为 AI 搭建一套专属的“操作系统”。它让 AI 的行为变得可观测(通过流式日志)、可追溯(通过会话 ID)且可扩展(通过自定义工具)。",-1)),s[5]||(s[5]=i("p",null,"这种转变标志着真正的 AI Native 软件工程的正式到来。掌握这类 SDK,本质上是在学习如何利用 AI 这个“高阶杠杆”去编排复杂的业务流。",-1)),s[6]||(s[6]=i("p",null,'目前,我正在尝试将这套理念融入我的博客内容工作流,实现从"多维信源抓取"到"风格化润色"的全流程自动化。如果你对 Agent 在真实业务场景中可能面临的"工程腐化"问题,或是其"效率边界"的探索感兴趣,欢迎持续关注本系列的后续更新。',-1))]))}});export{g as __pageData,c as default};
+import{T as n}from"./chunks/TwoColumnImage.BkZ7ar0-.js";import{c as l,o as p,d as e,b as h,a as i,e as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e("",51)),h(n,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_1.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_2.png",leftCaption:"",rightCaption:""}),s[1]||(s[1]=i("h2",{id:"_7-结束语",tabindex:"-1"},[a("7. 结束语 "),i("a",{class:"header-anchor",href:"#_7-结束语","aria-label":"Permalink to “7. 结束语”"},"​")],-1)),s[2]||(s[2]=i("blockquote",null,[i("p",null,[i("strong",null,"从“调包侠”到“AI 架构师”,迈向更复杂的业务编排。")])],-1)),s[3]||(s[3]=i("p",null,[a("通过 Claude Agent SDK ,我们仅需少量代码就能构建出具备自主执行能力的 Agent,其背后的设计思想:"),i("strong",null,"通过标准化 Skill 和会话管理"),a(",将复杂的 AI 交互逻辑转化为可预测的软件工程实践。")],-1)),s[4]||(s[4]=i("p",null,"深度体验后,我最大的感触是:,Agent 的开发重心也正在转向“如何构建可靠的工程闭环”。通过 SDK 提供的 Agent Loop、会话管理和标准化的工具、Skill 和 MCP 等扩展,我们实际上是在为 AI 搭建一套专属的“操作系统”。它让 AI 的行为变得可观测(通过流式日志)、可追溯(通过会话 ID)且可扩展(通过自定义工具)。",-1)),s[5]||(s[5]=i("p",null,"这种转变标志着真正的 AI Native 软件工程的正式到来。掌握这类 SDK,本质上是在学习如何利用 AI 这个“高阶杠杆”去编排复杂的业务流。",-1)),s[6]||(s[6]=i("p",null,'目前,我正在尝试将这套理念融入我的博客内容工作流,实现从"多维信源抓取"到"风格化润色"的全流程自动化。如果你对 Agent 在真实业务场景中可能面临的"工程腐化"问题,或是其"效率边界"的探索感兴趣,欢迎持续关注本系列的后续更新。',-1))]))}});export{g as __pageData,c as default};
diff --git a/assets/ai_agent_composition-ai-components.md.C4n6A38j.js b/assets/ai_agent_composition-ai-components.md.D63rfIxj.js
similarity index 99%
rename from assets/ai_agent_composition-ai-components.md.C4n6A38j.js
rename to assets/ai_agent_composition-ai-components.md.D63rfIxj.js
index 15f89d4..482c537 100644
--- a/assets/ai_agent_composition-ai-components.md.C4n6A38j.js
+++ b/assets/ai_agent_composition-ai-components.md.D63rfIxj.js
@@ -1 +1 @@
-import{_ as o,c as r,o as s,d as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e('

构建 Agentic 生态:零散组件化为可持续的工作流

摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。

about site background

1. 引言

问题:在智能体生态里,各个组件到底是怎么协同工作的?

当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态,一个最核心的问题往往萦绕在开发者和用户的脑海中:在这个生态里,各个组件究竟是如何协同工作的?

事实上,一个成熟的 Agentic 生态系统,其本质是通过优雅地整合 Prompts、Skills、Projects、Subagents 以及 MCP 等核心组件,将原本零散的 AI 能力,编织成一条可持续、高可用的工作流。这不仅大幅提升了人机协作的效率,更为系统运行的稳定性提供了坚实保障。

接下来,我们将逐一拆解这些核心组件,看看它们是如何各司其职的。

2. Prompts:即时灵活的对话指令

角色定位

随叫随到的“即时口头指令”

Prompts 是生态中最基础的交互单元,如同我们在日常对话中下达的即时指令。你通过自然语言驱动 AI,它随叫随到,响应迅速。

⚠️ 注意事项:Prompts 不具备持久性,不会跨对话自动保留,关闭对话后上下文即刻失效。因此,对于重复性工作或涉及深厚专业知识的任务,强烈建议将其沉淀为 Skills 或 Projects。

适用场景:

场景类型具体说明
一次性需求快速进行文章总结、短句翻译等
对话中的迭代优化临时修改文案语气、调整表述逻辑
临时数据处理输入一段临时上下文,进行即时的数据分析或内容解读
指定输出格式例如要求 AI "按项目符号列表输出" 或 "输出为 JSON 格式"

3. Skills:可复用的专属能力包(把高频方法变成可复用能力)

角色定位

标准化的“操作手册 + 资源包”

如果说 Prompts 是随口交代的任务,那么 Skills 就是标准化的“操作手册 + 资源包”。它将高频使用的方法固化下来,确保 AI 能够稳定、专业地按照同一套标准“做事”。

Skills 是一个包含完整指令说明、配套脚本和资源文件的能力文件夹。它采用渐进式加载机制(先加载元信息,再按需加载完整说明),在处理任务时按需发现、动态加载,实现特定领域的稳定、专业执行。

适用场景:

类型说明示例
组织级工作流标准化流程,固化企业内部的统一规范品牌使用指南、合规审批流程、常用文档模板
领域型能力专业任务能力,沉淀特定领域的操作最佳实践Excel 复杂建模、PDF 深度解析、数据清洗规则
个人偏好个性化工作方式,固化个人的工作习惯特定的笔记结构、代码风格、信息调研流程

一些典型的应用场景: 读写本地文件、处理 PDF/Word/Excel、运行代码分析、执行 Git 操作、生成图表和可视化、优化自己或团队的工作流。

4. Projects:长期专属工作空间

角色定位

沉淀持久上下文的“独立工作室”

Projects 是面向特定工作主题的“独立工作室”。它是一个自包含的工作空间,旨在为 AI 提供持续积累的知识与对话上下文。因此,Projects 本质上就是 Agent 核心组件中的记忆模块的一种具体实现——它以文件夹的形式,为特定主题提供持久化的上下文存储。当然,记忆的实现方式不止这一种,但这种"项目式"的组织方式在实际使用中尤为便捷直观。

每个 Project 都配备独立的聊天记录和高达 200K 的上下文窗口,支持上传背景资料、补充领域知识,并可配置项目级的全局自定义指令。

核心辨析:Projects vs. Skills

  • Projects 解决的是“背景上下文”问题(例如:存放某个产品发布的所有背景材料、公司代码库或长期客户信息)。
  • Skills 解决的是“具体怎么做”问题(例如:沉淀团队的代码评审流程)。 最佳实践: 如果你发现在多个 Projects 之间需要反复复制同一套指令,请将这些通用规则抽离出来,封装成一个 Skill。

适用场景: 当需要以下能力时,优先选择 Projects:

场景类型具体说明
持久上下文需要让同一批背景知识持续作用于每一轮对话的长期任务。
工作空间隔离规整工作台,将不同项目、不同工作计划的上下文物理隔离,避免信息混淆。
团队协作在 Team/Enterprise 环境下共享知识库与对话历史。
角色扮演为特定的专项项目设置专属的语气、视角或工作方式。

5. Subagents:分工明确的专项助手

角色定位

分工明确、限制隔离的“专职打工人”

正如综述中所描述的,多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作",通过 “专注子任务、上下文解耦、并行推进” 的逻辑,不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。

Subagents 是系统中的“独立执行单元”或“专职打工人”,它们是专攻特定细分任务的 AI 助手,拥有独立的上下文窗口和严格限定的工具权限。

通过自动委派或手动调用,Subagents 可以独立处理离散任务,并将结果回传给主代理,从而实现复杂任务的解耦与并行工作。

核心辨析:Subagents vs. Skills 用 Skills:把“怎么做”的通用方法论教给所有代理,让大家都能用。 用 Subagents:当需要独立执行、权限隔离、上下文隔离,并且希望按角色分工完成任务时。如果希望多个代理复用同一套安全审查流程,应该写成 Skill,而不是写死在某个 Subagent 里。

适用场景:

场景类型具体说明
专精类任务自动进行代码审查、测试用例生成、安全审计等闭环工作。
上下文管理将专业且细碎的脏活累活下放给子代理,保持主对话上下文的清晰与聚焦。
并行处理多个 Subagent 同时处理不同维度的任务,实现多任务并行处理,提升整体吞吐量。
隔离与限制将特定 Subagent 限制在更安全的边界内(例如仅授予数据库的只读权限)。

6. MCP:模型上下文协议(外部连接通用协议)

角色定位

解决“数据在哪儿”的“外部桥梁与 USB 协议”

最后是 MCP(Model Context Protocol,模型上下文协议)。如果前面四个组件都在解决 AI 大脑内部的组织问题,那么 MCP 解决的就是“数据在哪儿”的外部桥梁问题。

MCP 是一套开放标准的连接层协议,专门用于将 AI 助手无缝接入各类外部系统、工具与数据源,彻底打破数据孤岛。它分为 MCP 服务端(暴露外部数据与能力)和 MCP 客户端(AI 应用发起调用)。

核心辨析: MPC vs. Skills,如果 AI Agent 是操作系统,MCP 就是 USB 协议,Skills 就是应用程序。

随着 Skills 的普及,MCP 的需求会大幅减少,Anthropic 的工程博客提到:他们用"代码执行 + MCP"的方法,把一个 150,000 token 的工作流压缩到了 2,000 tokens。他们的核心思路是让 AI 写代码调用工具,而不是预加载所有工具定义。这正是 Skills 的设计方向:用脚本封装能力,用渐进式披露管理知识,最大限度减少上下文消耗。

适用场景:

场景类型具体说明
访问外部公共数据调用第三方 SaaS API,桥接 Google Drive、Slack、GitHub 或各类云端数据库。
调用常规业务系统对接企业的 CRM 系统、ERP 软件或项目管理平台。
访问需要认证的外部服务访问需要 API 密钥或令牌的外部服务,如支付网关、数据仓库等。
对接企业自研系统为内部专属业务工具提供标准化的 AI 接入方案。

7. 结束语

一个强大的 Agentic 生态,绝非新奇技术组件的无序堆砌,而是一场关乎系统架构产品思维的深刻重塑。

当我们用 MCP 作为底层的“通用接口”去连接真实的外部数据,用 Projects 构筑起持久的领域知识上下文,用 Skills 将专家的工程规范与最佳实践固化为可执行脚本,用 Subagents 优雅地拆解并并行化复杂的业务逻辑,最后通过 Prompts 进行敏捷的意图调度时——我们实际上是在构建一个高度自治、可持续运转的 AI 原生操作系统

在这个范式下,我们面对的不再是冷冰冰的代码或碎片化的对话框。通过规范驱动(Specification-Driven)的组件编排,我们正在以前所未有的效率,将零散的 AI 能力编织成高吞吐量的工作流,这不仅是机器能力的倍增,更是人类创造力的解放。

掌握了这套生态的协同机制,我们便能真正以一个 AI 赋能构建者(AI-Augmented Builder)的视角,让前沿技术精准落地,持续为产品与业务创造不可替代的价值。

',48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default}; +import{_ as o,c as r,o as s,d as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e('

构建 Agentic 生态:零散组件化为可持续的工作流

摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。

about site background

1. 引言

问题:在智能体生态里,各个组件到底是怎么协同工作的?

当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态,一个最核心的问题往往萦绕在开发者和用户的脑海中:在这个生态里,各个组件究竟是如何协同工作的?

事实上,一个成熟的 Agentic 生态系统,其本质是通过优雅地整合 Prompts、Skills、Projects、Subagents 以及 MCP 等核心组件,将原本零散的 AI 能力,编织成一条可持续、高可用的工作流。这不仅大幅提升了人机协作的效率,更为系统运行的稳定性提供了坚实保障。

接下来,我们将逐一拆解这些核心组件,看看它们是如何各司其职的。

2. Prompts:即时灵活的对话指令

角色定位

随叫随到的“即时口头指令”

Prompts 是生态中最基础的交互单元,如同我们在日常对话中下达的即时指令。你通过自然语言驱动 AI,它随叫随到,响应迅速。

⚠️ 注意事项:Prompts 不具备持久性,不会跨对话自动保留,关闭对话后上下文即刻失效。因此,对于重复性工作或涉及深厚专业知识的任务,强烈建议将其沉淀为 Skills 或 Projects。

适用场景:

场景类型具体说明
一次性需求快速进行文章总结、短句翻译等
对话中的迭代优化临时修改文案语气、调整表述逻辑
临时数据处理输入一段临时上下文,进行即时的数据分析或内容解读
指定输出格式例如要求 AI "按项目符号列表输出" 或 "输出为 JSON 格式"

3. Skills:可复用的专属能力包(把高频方法变成可复用能力)

角色定位

标准化的“操作手册 + 资源包”

如果说 Prompts 是随口交代的任务,那么 Skills 就是标准化的“操作手册 + 资源包”。它将高频使用的方法固化下来,确保 AI 能够稳定、专业地按照同一套标准“做事”。

Skills 是一个包含完整指令说明、配套脚本和资源文件的能力文件夹。它采用渐进式加载机制(先加载元信息,再按需加载完整说明),在处理任务时按需发现、动态加载,实现特定领域的稳定、专业执行。

适用场景:

类型说明示例
组织级工作流标准化流程,固化企业内部的统一规范品牌使用指南、合规审批流程、常用文档模板
领域型能力专业任务能力,沉淀特定领域的操作最佳实践Excel 复杂建模、PDF 深度解析、数据清洗规则
个人偏好个性化工作方式,固化个人的工作习惯特定的笔记结构、代码风格、信息调研流程

一些典型的应用场景: 读写本地文件、处理 PDF/Word/Excel、运行代码分析、执行 Git 操作、生成图表和可视化、优化自己或团队的工作流。

4. Projects:长期专属工作空间

角色定位

沉淀持久上下文的“独立工作室”

Projects 是面向特定工作主题的“独立工作室”。它是一个自包含的工作空间,旨在为 AI 提供持续积累的知识与对话上下文。因此,Projects 本质上就是 Agent 核心组件中的记忆模块的一种具体实现——它以文件夹的形式,为特定主题提供持久化的上下文存储。当然,记忆的实现方式不止这一种,但这种"项目式"的组织方式在实际使用中尤为便捷直观。

每个 Project 都配备独立的聊天记录和高达 200K 的上下文窗口,支持上传背景资料、补充领域知识,并可配置项目级的全局自定义指令。

核心辨析:Projects vs. Skills

  • Projects 解决的是“背景上下文”问题(例如:存放某个产品发布的所有背景材料、公司代码库或长期客户信息)。
  • Skills 解决的是“具体怎么做”问题(例如:沉淀团队的代码评审流程)。 最佳实践: 如果你发现在多个 Projects 之间需要反复复制同一套指令,请将这些通用规则抽离出来,封装成一个 Skill。

适用场景: 当需要以下能力时,优先选择 Projects:

场景类型具体说明
持久上下文需要让同一批背景知识持续作用于每一轮对话的长期任务。
工作空间隔离规整工作台,将不同项目、不同工作计划的上下文物理隔离,避免信息混淆。
团队协作在 Team/Enterprise 环境下共享知识库与对话历史。
角色扮演为特定的专项项目设置专属的语气、视角或工作方式。

5. Subagents:分工明确的专项助手

角色定位

分工明确、限制隔离的“专职打工人”

正如综述中所描述的,多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作",通过 “专注子任务、上下文解耦、并行推进” 的逻辑,不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。

Subagents 是系统中的“独立执行单元”或“专职打工人”,它们是专攻特定细分任务的 AI 助手,拥有独立的上下文窗口和严格限定的工具权限。

通过自动委派或手动调用,Subagents 可以独立处理离散任务,并将结果回传给主代理,从而实现复杂任务的解耦与并行工作。

核心辨析:Subagents vs. Skills 用 Skills:把“怎么做”的通用方法论教给所有代理,让大家都能用。 用 Subagents:当需要独立执行、权限隔离、上下文隔离,并且希望按角色分工完成任务时。如果希望多个代理复用同一套安全审查流程,应该写成 Skill,而不是写死在某个 Subagent 里。

适用场景:

场景类型具体说明
专精类任务自动进行代码审查、测试用例生成、安全审计等闭环工作。
上下文管理将专业且细碎的脏活累活下放给子代理,保持主对话上下文的清晰与聚焦。
并行处理多个 Subagent 同时处理不同维度的任务,实现多任务并行处理,提升整体吞吐量。
隔离与限制将特定 Subagent 限制在更安全的边界内(例如仅授予数据库的只读权限)。

6. MCP:模型上下文协议(外部连接通用协议)

角色定位

解决“数据在哪儿”的“外部桥梁与 USB 协议”

最后是 MCP(Model Context Protocol,模型上下文协议)。如果前面四个组件都在解决 AI 大脑内部的组织问题,那么 MCP 解决的就是“数据在哪儿”的外部桥梁问题。

MCP 是一套开放标准的连接层协议,专门用于将 AI 助手无缝接入各类外部系统、工具与数据源,彻底打破数据孤岛。它分为 MCP 服务端(暴露外部数据与能力)和 MCP 客户端(AI 应用发起调用)。

核心辨析: MPC vs. Skills,如果 AI Agent 是操作系统,MCP 就是 USB 协议,Skills 就是应用程序。

随着 Skills 的普及,MCP 的需求会大幅减少,Anthropic 的工程博客提到:他们用"代码执行 + MCP"的方法,把一个 150,000 token 的工作流压缩到了 2,000 tokens。他们的核心思路是让 AI 写代码调用工具,而不是预加载所有工具定义。这正是 Skills 的设计方向:用脚本封装能力,用渐进式披露管理知识,最大限度减少上下文消耗。

适用场景:

场景类型具体说明
访问外部公共数据调用第三方 SaaS API,桥接 Google Drive、Slack、GitHub 或各类云端数据库。
调用常规业务系统对接企业的 CRM 系统、ERP 软件或项目管理平台。
访问需要认证的外部服务访问需要 API 密钥或令牌的外部服务,如支付网关、数据仓库等。
对接企业自研系统为内部专属业务工具提供标准化的 AI 接入方案。

7. 结束语

一个强大的 Agentic 生态,绝非新奇技术组件的无序堆砌,而是一场关乎系统架构产品思维的深刻重塑。

当我们用 MCP 作为底层的“通用接口”去连接真实的外部数据,用 Projects 构筑起持久的领域知识上下文,用 Skills 将专家的工程规范与最佳实践固化为可执行脚本,用 Subagents 优雅地拆解并并行化复杂的业务逻辑,最后通过 Prompts 进行敏捷的意图调度时——我们实际上是在构建一个高度自治、可持续运转的 AI 原生操作系统

在这个范式下,我们面对的不再是冷冰冰的代码或碎片化的对话框。通过规范驱动(Specification-Driven)的组件编排,我们正在以前所未有的效率,将零散的 AI 能力编织成高吞吐量的工作流,这不仅是机器能力的倍增,更是人类创造力的解放。

掌握了这套生态的协同机制,我们便能真正以一个 AI 赋能构建者(AI-Augmented Builder)的视角,让前沿技术精准落地,持续为产品与业务创造不可替代的价值。

',48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default}; diff --git a/assets/ai_agent_composition-ai-components.md.C4n6A38j.lean.js b/assets/ai_agent_composition-ai-components.md.D63rfIxj.lean.js similarity index 96% rename from assets/ai_agent_composition-ai-components.md.C4n6A38j.lean.js rename to assets/ai_agent_composition-ai-components.md.D63rfIxj.lean.js index 7874c1e..cef84d8 100644 --- a/assets/ai_agent_composition-ai-components.md.C4n6A38j.lean.js +++ b/assets/ai_agent_composition-ai-components.md.D63rfIxj.lean.js @@ -1 +1 @@ -import{_ as o,c as r,o as s,d as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e("",48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default}; +import{_ as o,c as r,o as s,d as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e("",48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default}; diff --git a/assets/ai_agent_deepresearch-agent.md.D1VHqJFV.js b/assets/ai_agent_deepresearch-agent.md.BN6_LZWf.js similarity index 99% rename from assets/ai_agent_deepresearch-agent.md.D1VHqJFV.js rename to assets/ai_agent_deepresearch-agent.md.BN6_LZWf.js index daa0b79..c5e698e 100644 --- a/assets/ai_agent_deepresearch-agent.md.D1VHqJFV.js +++ b/assets/ai_agent_deepresearch-agent.md.BN6_LZWf.js @@ -1,4 +1,4 @@ -import{T as s}from"./chunks/TwoColumnImage.CvkELYbv.js";import{c as t,o as r,d as e,b as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e(`

声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统

摘要总结:对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过 “Lead + Subagent” 的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。

1. 引言

AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板,更通过模块化的设计增强了系统的可解释性与可控性。

但在实际工程落地中,开发者往往会面临一个尴尬的现实:简单的任务单智能体就能搞定,复杂的任务给单智能体加再多 Prompt 也会陷入“逻辑疲劳”或“上下文迷失”。深度研究(Deep Research)正是这类复杂任务的典型代表。它要求系统在长上下文环境下,同时具备高效的信息检索、严谨的数据推理和专业的文档输出能力。

本文将分享我基于 Claude Agent SDK(TypeScript 版)构建 Deep Research Agent 的实践过程。我们将探讨如何通过声明式架构实现多 Agent 的职责隔离,并展示这种模式如何通过模块化设计显著提升研究报告的专业度。

说明

  • 本项目基于 Anthropic 官方示例进行了 TypeScript 重构与流程优化。完整代码已开源至 GitHub,托管在我与几位好友共同创建的 full-stack-workspace 组织下的 agent-playground 仓库中,具体路径为:@agent-playground/deepresearch-agent
  • 如果你希望了解 Python 版本的实现,建议直接查阅官方示例仓库:claude-agent-sdk-demos

2. 为什么深度研究需要 Multi-Agent 架构模式?

回顾我们自己在某个领域或专题进行深度研究的经历,不难发现:深度研究并非单一的写作任务,而是一个多工种流水线。这其实是一个典型的多阶段任务,每个阶段都需要不同的专业能力:

阶段描述
搜索阶段专注于信息检索与收集,帮助建立对该领域的初步认知
分析阶段对收集到的信息进行深度分析与归纳,提取关键洞察,并据此确定研究方向与重点
写作阶段将分析成果转化为结构化的文字内容,如研究论文、技术报告等
可视化阶段通过数据图表、信息图等形式直观呈现分析结果,提升信息传达效率

这种阶段化的专业分工,与人类研究团队中的协作模式高度契合。此外,深度研究任务往往涉及很多信息整合,具有较高的复杂度。若采用单智能体架构,通常会面临 Context Window 限制、早期信息被稀释、推理质量随任务推进而下降等挑战。

Multi-Agent 模式则通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅能显著提升任务处理的上限,更通过模块化设计增强了系统的可解释性与可控性。

3. 系统架构

3.1 核心设计与职责分配

DeepResearch Agent 通过搜索、收集、分析各种来源的信息,将这些信息整合为带有可视化图表的深度研究报告,以支持复杂的研究和决策任务。其架构采用 Lead Agent + Subagent的设计思路:

  • Lead Agent 的核心规则是“只做管理,不做执行”。它的 allowedTools 被严格限制为 Task 工具。这种设计能有效防止 Lead Agent 因为过度处理细节而导致的逻辑发散。
  • Researcher 须找到 10-15+ 个具体数据点(百分比、市场规模、增长率等)供 Data Analyst 可视化
  • Report Writer 使用 Python + reportlab 通过 Bash 工具生成 PDF 报告,确保报告格式专业、内容
智能体职责工具
Lead Agent协调研究,并将任务委派给子智能体。任务分解、协调调度(仅使用 Task 工具委托任务)Task
Researcher并行网络搜索,收集量化数据(每个研究员专注一个子主题)WebSearch, Write
Data Analyst读取研究笔记,提取指标,生成 Python/matplotlib 图表Glob, Read, Grep, Bash, Write, Edit
Report Writer读取研究笔记和图表,生成 reportlab PDF 报告Skill, Write, Glob, Read, Bash

Claude Agent SDK 起源于 Anthropic 的 Claude Code 项目,采用了与 Claude Code 相同的声明式设计,支持自定义技能和命令,针对 DeepResearch Agent 的具体任务,我们可以利用其声明式和模块化设计,添加一些相关的自定义 Agent Skills 和 Commands 命令:

deepresearch-agent/
+import{T as s}from"./chunks/TwoColumnImage.BkZ7ar0-.js";import{c as t,o as r,d as e,b as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e(`

声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统

摘要总结:对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过 “Lead + Subagent” 的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。

1. 引言

AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板,更通过模块化的设计增强了系统的可解释性与可控性。

但在实际工程落地中,开发者往往会面临一个尴尬的现实:简单的任务单智能体就能搞定,复杂的任务给单智能体加再多 Prompt 也会陷入“逻辑疲劳”或“上下文迷失”。深度研究(Deep Research)正是这类复杂任务的典型代表。它要求系统在长上下文环境下,同时具备高效的信息检索、严谨的数据推理和专业的文档输出能力。

本文将分享我基于 Claude Agent SDK(TypeScript 版)构建 Deep Research Agent 的实践过程。我们将探讨如何通过声明式架构实现多 Agent 的职责隔离,并展示这种模式如何通过模块化设计显著提升研究报告的专业度。

说明

  • 本项目基于 Anthropic 官方示例进行了 TypeScript 重构与流程优化。完整代码已开源至 GitHub,托管在我与几位好友共同创建的 full-stack-workspace 组织下的 agent-playground 仓库中,具体路径为:@agent-playground/deepresearch-agent
  • 如果你希望了解 Python 版本的实现,建议直接查阅官方示例仓库:claude-agent-sdk-demos

2. 为什么深度研究需要 Multi-Agent 架构模式?

回顾我们自己在某个领域或专题进行深度研究的经历,不难发现:深度研究并非单一的写作任务,而是一个多工种流水线。这其实是一个典型的多阶段任务,每个阶段都需要不同的专业能力:

阶段描述
搜索阶段专注于信息检索与收集,帮助建立对该领域的初步认知
分析阶段对收集到的信息进行深度分析与归纳,提取关键洞察,并据此确定研究方向与重点
写作阶段将分析成果转化为结构化的文字内容,如研究论文、技术报告等
可视化阶段通过数据图表、信息图等形式直观呈现分析结果,提升信息传达效率

这种阶段化的专业分工,与人类研究团队中的协作模式高度契合。此外,深度研究任务往往涉及很多信息整合,具有较高的复杂度。若采用单智能体架构,通常会面临 Context Window 限制、早期信息被稀释、推理质量随任务推进而下降等挑战。

Multi-Agent 模式则通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅能显著提升任务处理的上限,更通过模块化设计增强了系统的可解释性与可控性。

3. 系统架构

3.1 核心设计与职责分配

DeepResearch Agent 通过搜索、收集、分析各种来源的信息,将这些信息整合为带有可视化图表的深度研究报告,以支持复杂的研究和决策任务。其架构采用 Lead Agent + Subagent的设计思路:

  • Lead Agent 的核心规则是“只做管理,不做执行”。它的 allowedTools 被严格限制为 Task 工具。这种设计能有效防止 Lead Agent 因为过度处理细节而导致的逻辑发散。
  • Researcher 须找到 10-15+ 个具体数据点(百分比、市场规模、增长率等)供 Data Analyst 可视化
  • Report Writer 使用 Python + reportlab 通过 Bash 工具生成 PDF 报告,确保报告格式专业、内容
智能体职责工具
Lead Agent协调研究,并将任务委派给子智能体。任务分解、协调调度(仅使用 Task 工具委托任务)Task
Researcher并行网络搜索,收集量化数据(每个研究员专注一个子主题)WebSearch, Write
Data Analyst读取研究笔记,提取指标,生成 Python/matplotlib 图表Glob, Read, Grep, Bash, Write, Edit
Report Writer读取研究笔记和图表,生成 reportlab PDF 报告Skill, Write, Glob, Read, Bash

Claude Agent SDK 起源于 Anthropic 的 Claude Code 项目,采用了与 Claude Code 相同的声明式设计,支持自定义技能和命令,针对 DeepResearch Agent 的具体任务,我们可以利用其声明式和模块化设计,添加一些相关的自定义 Agent Skills 和 Commands 命令:

deepresearch-agent/
 ├── .claude/
 │   ├── skills/            # 可使用的 Agent Skills 技能目录
 │   │   ├── pdf/           # 生成 PDF 报告的技能
diff --git a/assets/ai_agent_deepresearch-agent.md.D1VHqJFV.lean.js b/assets/ai_agent_deepresearch-agent.md.BN6_LZWf.lean.js
similarity index 92%
rename from assets/ai_agent_deepresearch-agent.md.D1VHqJFV.lean.js
rename to assets/ai_agent_deepresearch-agent.md.BN6_LZWf.lean.js
index ad254fb..2c772b3 100644
--- a/assets/ai_agent_deepresearch-agent.md.D1VHqJFV.lean.js
+++ b/assets/ai_agent_deepresearch-agent.md.BN6_LZWf.lean.js
@@ -1 +1 @@
-import{T as s}from"./chunks/TwoColumnImage.CvkELYbv.js";import{c as t,o as r,d as e,b as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e("",38)),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_3.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_2.jpg",leftCaption:"图 1:初中生数学成绩下降原因分析",rightCaption:"图 2:不同学习方法下的数学成绩优秀率对比"}),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_math_module.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_4.jpg",leftCaption:"图 3:初中数学各模块分值占比分布示意",rightCaption:"图 4:人的记忆保持随时间变化趋势曲线"}),a[1]||(a[1]=e("",5))]))}});export{o as __pageData,h as default};
+import{T as s}from"./chunks/TwoColumnImage.BkZ7ar0-.js";import{c as t,o as r,d as e,b as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e("",38)),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_3.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_2.jpg",leftCaption:"图 1:初中生数学成绩下降原因分析",rightCaption:"图 2:不同学习方法下的数学成绩优秀率对比"}),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_math_module.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_4.jpg",leftCaption:"图 3:初中数学各模块分值占比分布示意",rightCaption:"图 4:人的记忆保持随时间变化趋势曲线"}),a[1]||(a[1]=e("",5))]))}});export{o as __pageData,h as default};
diff --git a/assets/ai_agent_math-bot.md.Dcxg40jZ.js b/assets/ai_agent_math-bot.md.BXhAqWyU.js
similarity index 99%
rename from assets/ai_agent_math-bot.md.Dcxg40jZ.js
rename to assets/ai_agent_math-bot.md.BXhAqWyU.js
index a6afe33..46e448f 100644
--- a/assets/ai_agent_math-bot.md.Dcxg40jZ.js
+++ b/assets/ai_agent_math-bot.md.BXhAqWyU.js
@@ -1,4 +1,4 @@
-import{_ as n,c as a,o as i,d as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e(`

一次由 Product Sense 驱动的 Agent 极限实践

摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。

在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。

令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」

复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。

以下是关于这次“K12 数学小助手” Agent 搭建的实践总结与思考。

1. 破局点:面对 K12 赛道,谁才是真正的用户?

活动给定的命题是“K12 教育”。在极限开发的时间压力下,最容易陷入的思维陷阱就是“直线思考”——既然是 K12,那就直接做一个给学生用的解题机器人。

但这恰恰违背了产品的核心逻辑。从受众角度来看,直接面向心智尚未成熟的 K12 学生提供一个“答案生成器”,极易沦为应付作业的作弊工具,既得不到学校的认可,也会引发家长的担忧。

因此,在选题阶段,我们进行了一次关键的视角切换:将目标用户从“学生”转移到了“家长和老师”

当代家长在辅导孩子尤其是数学作业时,最大的痛点往往不是“不知道答案”,而是“不知道如何科学地给孩子讲解”。基于这个 Product Sense,我们确定了 Agent 的核心定位——它不是一个冷冰冰的解题机,而是一位帮助家长掌握科学辅导方法的“幕后导师”

2. 为什么选择“数学”?—— 技术边界与场景的完美契合

在众多的 K12 学科中,我们最终锁定了“数学”,这并非偶然,而是基于对大语言模型(LLM)能力边界的清晰认知:

  • 规避“幻觉”的工程解法:众所周知,纯文本大模型在进行严谨的逻辑推演和数学计算时,极易产生“幻觉”。但自定义 Agent 拥有调用外部工具(尤其是代码解释器 Code Interpreter)的能力。这意味着我们可以让 Agent 通过编写和执行代码来处理复杂的数学计算,从而在架构层面保证了结果的准确性。

  • 满足“解题”与“解释”的双重需求:数学不仅仅是得出正确答案,更重要的是推导过程。Agent 可以并发处理双重任务——一方面在后台精准计算,另一方面在前台用自然语言将解题思路拆解为通俗易懂的“人话”,提供全面的教学辅助。

3. Agent 核心设计:结构化的 Prompt 规范

确定了产品方向后,接下来的重点就是“规范驱动” Prompt 设计。为了让 Agent 稳定输出高质量的内容,我们对其角色、工作流、工具链和限制条件进行了严格的定义。以下是我们在比赛中使用的核心 Prompt 设计:

markdown
# 角色任务
+import{_ as n,c as a,o as i,d as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e(`

一次由 Product Sense 驱动的 Agent 极限实践

摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。

在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。

令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」

复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。

以下是关于这次“K12 数学小助手” Agent 搭建的实践总结与思考。

1. 破局点:面对 K12 赛道,谁才是真正的用户?

活动给定的命题是“K12 教育”。在极限开发的时间压力下,最容易陷入的思维陷阱就是“直线思考”——既然是 K12,那就直接做一个给学生用的解题机器人。

但这恰恰违背了产品的核心逻辑。从受众角度来看,直接面向心智尚未成熟的 K12 学生提供一个“答案生成器”,极易沦为应付作业的作弊工具,既得不到学校的认可,也会引发家长的担忧。

因此,在选题阶段,我们进行了一次关键的视角切换:将目标用户从“学生”转移到了“家长和老师”

当代家长在辅导孩子尤其是数学作业时,最大的痛点往往不是“不知道答案”,而是“不知道如何科学地给孩子讲解”。基于这个 Product Sense,我们确定了 Agent 的核心定位——它不是一个冷冰冰的解题机,而是一位帮助家长掌握科学辅导方法的“幕后导师”

2. 为什么选择“数学”?—— 技术边界与场景的完美契合

在众多的 K12 学科中,我们最终锁定了“数学”,这并非偶然,而是基于对大语言模型(LLM)能力边界的清晰认知:

  • 规避“幻觉”的工程解法:众所周知,纯文本大模型在进行严谨的逻辑推演和数学计算时,极易产生“幻觉”。但自定义 Agent 拥有调用外部工具(尤其是代码解释器 Code Interpreter)的能力。这意味着我们可以让 Agent 通过编写和执行代码来处理复杂的数学计算,从而在架构层面保证了结果的准确性。

  • 满足“解题”与“解释”的双重需求:数学不仅仅是得出正确答案,更重要的是推导过程。Agent 可以并发处理双重任务——一方面在后台精准计算,另一方面在前台用自然语言将解题思路拆解为通俗易懂的“人话”,提供全面的教学辅助。

3. Agent 核心设计:结构化的 Prompt 规范

确定了产品方向后,接下来的重点就是“规范驱动” Prompt 设计。为了让 Agent 稳定输出高质量的内容,我们对其角色、工作流、工具链和限制条件进行了严格的定义。以下是我们在比赛中使用的核心 Prompt 设计:

markdown
# 角色任务
 你是一位经验丰富的小学数学教师,专注于帮助家长掌握科学的数学辅导方法。你的核心目标是引导家长理解问题背后的思维逻辑,提升他们协助孩子分析与解决问题的能力,真正做到“授人以渔”,同时还能够举一反三。
 
 在回应家长提问时,请严格遵循以下三步流程:
diff --git a/assets/ai_agent_math-bot.md.Dcxg40jZ.lean.js b/assets/ai_agent_math-bot.md.BXhAqWyU.lean.js
similarity index 95%
rename from assets/ai_agent_math-bot.md.Dcxg40jZ.lean.js
rename to assets/ai_agent_math-bot.md.BXhAqWyU.lean.js
index f33025e..8f37b3c 100644
--- a/assets/ai_agent_math-bot.md.Dcxg40jZ.lean.js
+++ b/assets/ai_agent_math-bot.md.BXhAqWyU.lean.js
@@ -1 +1 @@
-import{_ as n,c as a,o as i,d as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e("",24)])])}const d=n(p,[["render",l]]);export{c as __pageData,d as default};
+import{_ as n,c as a,o as i,d as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e("",24)])])}const d=n(p,[["render",l]]);export{c as __pageData,d as default};
diff --git a/assets/ai_agent_overview.md.CBny6Kqh.js b/assets/ai_agent_overview.md.BZYkese5.js
similarity index 99%
rename from assets/ai_agent_overview.md.CBny6Kqh.js
rename to assets/ai_agent_overview.md.BZYkese5.js
index 37a9b86..1a107c6 100644
--- a/assets/ai_agent_overview.md.CBny6Kqh.js
+++ b/assets/ai_agent_overview.md.BZYkese5.js
@@ -1 +1 @@
-import{_ as e,c as n,o as l,d as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o('

从提示词到数字员工:AI Agent 深度全景综述

摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从"以人为中心"向"以 AI 为中心"的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。

1. 什么是 Agent?——从“工具”到“实体”的进化

核心逻辑:现代 Agent 的本质是 "LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。

在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。

如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:

  • 自主性 (Autonomy): 无须时刻盯着,设定目标后它能自己想办法完成。

  • 适应性 (Adaptability): 环境变了(比如网页改版或 API 报错),它能实时调整策略。

  • 主动性 (Proactivity): 不只是被动响应指令,它会主动拆解目标并寻找路径。

  • 社会性 (Sociality): 它能像人一样,与其他 Agent 或人类进行协作。

2. 核心价值:自动化程度的阶梯式跨越

我们对 Agent 的追求,本质上是从“写好提示词(Prompt)”转向“构建自主工作流(Workflow)”。为了更直观地衡量 Agent 的能力,我们可以将其自动化程度分为三个档次:

自动化等级核心特征典型代表
L1:任务执行者处理单一模态、简单数据;调用少量标准工具;执行预定义的静态任务。翻译脚本、简单 SQL 生成器
L2:流程编排者多模态感知;具备长短期记忆;能编排复杂、长尾的任务流。Dify, Coze, n8n
L3:自主进化者极少人工干预;自主洞察环境变化;实现业务流程的自适应编排。Claude Code, Manus, OpenClaw

随着 Agent 能力的"逐梯跨越",过往的工作范式可能被颠覆,实现从"面向过程"到"面向目标"的根本性颠覆。对于软件系统开发人员而言,传统的软件工程思路以人为中心,AI 只是辅助工具,通过采用固定形态的交互界面和预定义有限域的任务,实现规模化的生产方式。而 Agent 工程则是以 AI 为中心,人类转型为监督者和资源提供者,采用动态人机交互界面和无预制有限域的任务,完成规模化的个性化生产

3. 应用场景:谁会被替代,谁会被增强?

3.1 深度替代与变革型

在这类场景中,AI 已经能够闭环完成 80% 以上的工作,在显著重构工作模式后,部分岗位可能被替代:

  • 基础编程:AI 代码助手自动生成样板代码、排查 Bug,初级 Coders 必须向架构和复杂逻辑转型。

  • 基础学习(知识点 / 技能):题库刷题、基础答疑、知识点检索。AI 可直接替代人工答疑 / 辅导,覆盖 80% 基础学习需求。

  • 标准化客服:处理 90% 的售后咨询与查询,人工仅负责处理极端复杂的情感诉求。

3.2 辅助增强型(升级工作价值)

AI 作为效率工具,不替代核心岗位,而是负责脏活累活、升级工作价值,人类负责决策与审美:

  • 高级咨询:Agent 可自动整理行业数据、生成分析报告初稿,咨询师从"信息收集"中解放出来,更聚焦策略洞察、客户沟通等高价值环节。
  • 深度研究(学术 / 行业):Agent 自动完成文献检索、数据清洗与报告框架搭建,研究者得以专注于核心创新结论、深度洞察与研究设计,实现从"资料整理"到"思想创造"的价值跃迁。
  • 高级学习(研究性 / 技能):Agent 辅助完成知识体系搭建、复杂技能拆解与进阶路径规划,学习者将精力投入理解内化、实践探索与自主创新,完成从"知识获取"到"能力建构"的范式转变。

3.3 生活与垂直领域(长尾覆盖)

  • 健康医护:虚拟健康助手基于可穿戴设备数据提供 24h 监护,并在异常时主动预警。
  • 个性化教育:Agent 就像一个 1 对 1 助教,根据你的错题逻辑实时调整教学大纲,而非死记硬背。
  • 个人财务:自动追踪账单、优化预算,并根据市场动态提供初步投资建议。

4. 技术拆解:Agent 核心要素与关键技术

Agent = LLM (大脑) + 工具 (手脚) + 指令 (行为准则) + 自主工作流执行

一个成熟的 Agent 系统通常由规划(Planning)​、记忆(Memory)​、工具(Tools)和行动(Action)四大核心模块构成:

about site background
  • 规划(Planning)​:解决"怎么做"
    • 任务分解:将“帮我写一个电商 App”拆解为 UI 设计、后端架构、数据库建模等子目标。
    • 反思与评价:在执行过程中不断“自我批评”,发现走不通时及时掉头。
  • 记忆(Memory)​:解决"我是谁,我做过什么"
    • 短期记忆:与上下文学习有关,存储当前的对话流,记录最近的交互历史,如用户指令、系统响应等。
    • 长期记忆:涉及信息的长时间保留和检索,存储长期的知识库,如用户个人信息、任务历史等,通常通过利用外部向量存储与快速检索来实现。
  • 工具 (Tools):解决"能力边界"。LLM 虽然博学,但不会算高难度数学,也不知道昨天的天气,工具就是它的“外挂”。
  • 行动(Action)​:解决"落地执行",将规划好的逻辑转化为具体的 API 调用或代码执行,并接收环境反馈,形成闭环。

4.1 规划

Agent的规划核心包含任务分解与自我反思两部分:任务分解是将复杂目标拆解为易执行的子任务,主要有先分解后规划、边分解边规划及基于语言模型的分解三类方法;自我反思则通过“生成-反思”循环,结合相关框架与模式优化执行结果、提升运行质量。

若需进一步了解详细的规划机制,可打开:Agent规划模块

4.2 记忆

Agent的记忆是其核心模块,借鉴人类记忆分为感觉、短期、长期三类,结合内部、跨任务及外部知识积累,应用中需适配场景选择存储检索方式。

记忆类型说明
感官记忆这是最基础的阶段,指智能体接收外部输入(文本、图像、语音)的瞬时感知。在 LLM 交互中,这表现为模型对当前 Prompt 的原始解析。
短期记忆主要指上下文学习(In-Context Learning),它受限于 LLM 的上下文窗口(Context Window),存储的只是有限轮次的对话历史,如用户指令、系统响应等。
核心功能:存储当前对话流,记录最近几轮的交互历史(指令、系统响应、中间思考过程)。
技术实现:通过将历史对话拼接在当前的 Prompt 中实现。
长期记忆涉及信息的长时间保留和在需要时的精准检索,这是 Agent 迈向高度自主的关键。
核心功能:存储用户的个人偏好、长期的项目背景、历史任务的成功经验或失败教训。
技术实现:通常利用外部向量数据库(Vector DB)实现,通过"嵌入(Embedding)+ 向量检索"在数百万条记录中快速定位相关信息。

如果规划模块赋予了 Agent “逻辑”,那么记忆模块则赋予了它“灵魂”和“连续性”。随着长文本技术(Long Context)和向量搜索算法的不断演进,Agent 的记忆将变得越来越深邃且精准。

对于开发者而言,设计优秀的记忆淘汰与检索算法,比单纯追求大模型的参数规模更为重要。只有当 Agent 能够“记住”业务细节并“忘记”无关噪音时,它才真正具备了从“对话工具”进化为“数字合伙人”的素质。

4.3 工具

典型案例:Claude Code 集成了文件读写、查找、Bash 等一系列通用工具,使其成为一个能够自主写代码的"数字工程师"。

LLM 本身在处理实时信息(如天气)、精确计算(如高阶数学)或特定私域数据(如公司财务报表)时存在天然局限,而工具赋予了 Agent 超越模型内核的能力。我们可以从功能属性和实现方式两个维度来理解 Agent 的工具箱:

1、按功能属性分类:Agent 能做什么?

类别功能定位核心能力
数据类 (Data)解决"信息差"通过检索工具(Retrieval)从搜索引擎、数据库或 PDF 文档中获取最新上下文。
行动类 (Action)解决"执行力"通过 API 调用在外部系统中产生影响,例如发送邮件、修改 CRM 记录或提交订单。
编排类 (Orchestration)解决"复杂性"将多个子任务组合成一个更大的任务。一个 Agent 也可以被封装成工具,供另一个更高级的 Agent 调用,实现多智体协作。

2、按实现方式分类:Agent 怎么调用?

实现方式说明
函数调用 (Function Calling)模型生成结构化指令,由客户端在本地执行(如操作本地文件或内网数据库),兼顾安全性与灵活性。
标准扩展 (Extensions)通过标准化的协议(如 OpenAPI)直接连接外部服务,使 Agent 能够像乐高积木一样无缝对接各种云端 API。
计算机使用 (Computer Use)对于没有 API 的陈旧系统,Agent 可以通过视觉识别和模拟鼠标键盘,像人类一样直接操作软件界面。

4.4 行动

行动(Action)模块是 Agent 的执行机构,它的职责是将规划阶段生成的"蓝图"转化为物理世界或数字系统中的"动作"。它不仅是指令的输出者,更是环境反馈的接收者。

行动模块的核心在于完成以下三个层面的逻辑闭环:

模块说明示例
动作生成 (Action Generation)将复杂的子目标转化为具体的步骤规划是"调查市场趋势",行动则是先"搜索关键词",再"提取网页内容",最后"生成摘要"
动态调整 (Dynamic Adaptation)行动并非死板的执行脚本,Agent 会根据工具返回的结果(反馈)实时调整策略如果一次搜索没有找到答案,行动模块会决定尝试不同的关键词或切换工具
环境交互 (Interaction)明确行动的范围,包括内部行动与外部工具调用利用 LLM 的内在能力(如推理、总结)进行内部行动,以及通过调用外部工具(如 API、数据库)扩展行动边界,最终达成预设的行动目标

整体来讲,行动模块确保了 Agent 的"言行一致":它基于记忆来决策,利用工具来施展,最终通过不断与环境互动,将抽象的目标变为真实的结果

5. Agent 的分类与未来

目前 Agent 领域尚无统一标准,但我们可以按其业务深度与协作范式将其归纳为五大形态。从单兵作战的“全能大脑”到成群结队的“数字团队”,它们正以不同的进化路径渗透进各种复杂的生产场景。接下来,我们将逐一拆解这五种重塑生产力的核心类别。

5.1 通用 Agent

随着技术的演进,业界对智能体的认知也发生了变化:真正的 Agent 不应只是被动响应人类指令的"聊天插件",而是一个自主的目标执行者

在这种背景下,通用 Agent (General Agent) 脱颖而出。它并非为特定单一任务(如“写一段代码”)而生,而是一个拥有广泛能力边界、能够解决开放式问题的智能系统。其运作逻辑可以精炼为“思考(Think)、行动(Act)、学习(Learn)”的闭环:

阶段核心功能详细说明
思考任务拆解与路径规划智能体接收到模糊目标(如"帮我调研并搭建一个技术博客")后,会进行任务拆解与路径规划,并在执行过程中不断反思"当前方案是否最优?是否需要调整?"
行动调用高度自动化的原子能力基于思考结果,调用高度自动化的原子能力。除了读写文件、网页浏览、运行终端命令或访问数据库外,常见的原子能力还包括:
环境探测:自动识别当前操作系统环境、安装缺失的依赖包。
视觉交互:在没有 API 的情况下,通过屏幕截图识别 UI 元素并模拟点击。
资源调度:自动申请 API Key、配置云端服务或触发 GitHub Actions 工作流。
跨应用编排:将 A 应用的输出处理后,精准填充到 B 应用的表单中。
学习个人偏好沉淀与经验积累这是通用 Agent 进阶的关键。它能从交互中记住你的个人偏好(例如:报告偏好 PDF 格式、代码风格倾向于 TypeScript),并将其沉淀为"经验",使下一次决策更符合预期。

为了应对不同复杂程度的任务,业界演化出了两种主流的实现范式:

  • ReAct 像是一个反应敏捷的**“现场协调员”,擅长随机应变。
  • Plan-and-Execute 则更像一位经验丰富的“项目经理”**,以全局规划见长。
范式类型核心逻辑优势适用场景
ReAct Agent采用"思考-行动-观测"小步快跑模式。模型走一步看一步,根据环境的即时反馈调整下一步动作。实时性强、交互自然、逻辑链路透明。较为简单的任务、对成本敏感的轻量级场景。
Plan-and-Execute Agent先由一个"大脑"将复杂目标拆解为完整的步骤列表(Todo List),再由另一只 "手" 负责逐一高效执行。准确率极高,能够处理具备深度依赖关系的复杂工程。需要长程推理的任务、软件开发、深度行业调研。

5.2 多智能体系统 (Multi-Agent System)

多智能体系统通过 “专注子任务、上下文解耦、并行推进” 的逻辑,让 AI 从一个人的独角戏,演变成了指挥若定的交响乐。它不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。

当面对较复杂的工程任务时,单个 Agent 往往会因为任务链信息量太大而信息量太大而陷入"混乱"或出错。多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作"。

在 MAS 架构中,主智能体(Lead Agent)可以根据需求生成多个独立的子智能体(Subagent)。这些子智能体像是一群专注的专家,各自处理特定的子任务,从而带来了四个维度的核心优势:

维度详细说明
上下文的精细隔离这是多智能体最强悍的地方。每个子智能体拥有独立的记忆空间,确保细碎的中间任务不会"污染"主对话环境。例如,负责搜集海量原始数据的 Subagent,其繁杂的搜索记录会被隔离在自己的上下文中,只把最终提炼的结论汇报给主智能体,让主脑始终保持清醒的大局观。
极致的并行化效率在单 Agent 模式下,任务只能一件接一件地做;而在 MAS 中,多个子智能体可以并行运行。就像一个调研项目,多个研究员可以同时在不同领域搜集数据,显著加快了复杂工作流的交付速度。
专业指令的深度定制我们可以为不同的 Subagent 注入不同的"灵魂"。负责"代码审计"的拥有最严苛的安全规范,负责"文案润色"的拥有细腻的品牌调性。这种指令隔离避免了在同一个提示词(Prompt)中堆砌太多要求而导致的指令失效。
工具调用的安全边界我们可以精准限制每个子智能体的权限。例如,查询数据的 Subagent 只有"只读"权限,而"发送邮件"或"修改数据库"权限被严格限制在特定的 Subagent 手中,极大降低了 AI 产生意外行为的风险。

典型案例:Deep Research 深度调研系统

以一个复杂的调研流程为例,系统会通过 Lead Agent + Subagent 的分层架构完美闭环:

  • Lead Agent (协调员):负责“脑力拆解”,将主题分解为若干子课题,并委派任务,它从不亲自查资料,保持绝对的简效。
  • Researcher (研究员):多个实例并行出发,每个专注于一个子主题,搜集至少 10-15 个硬核数据点。
  • Data Analyst (数据分析师):仅负责读取研究笔记,利用 Python 生成直观的图表。
  • Report Writer (报告撰写员): 汇总所有研究成果,最终调用工具生成一份专业的 PDF 报告。

5.3 知识型 Agent

如果说通用 Agent 擅长逻辑推理,那么多智能体擅长流程协作,知识型 Agent 的核心使命则是"理解并转化海量非结构化数据"。它不仅仅是一个简单的搜索工具,而是一个能够深度理解私域知识并基于此进行复杂决策的智能实体。

在企业级应用中,数据往往散落在物理文档、代码仓库、Slack 聊天记录或关系型数据库中。知识型 Agent 的核心诉求在于:

  • "全局理解与跨库关联":它能跨越不同的文档格式与存储介质,建立起知识间的逻辑联系。

  • "动态更新与实时同步":它能感知环境反馈,随着项目进展自动同步最新的会议纪要或技术方案。

  • "深度的知识推理": 不止是"检索",更是"思考"。

应用场景示例:

想象你需要复盘一个复杂项目的进度。知识型 Agent 可以瞬间扫描过去三个月的所有项目会议纪要、Slack 讨论记录和技术文档,最终为你总结出:"导致 X 项目延期的核心原因主要集中在 A 接口的权限变动,以及 B 团队在第二周的人力缺口。"

这种 Agent 的核心价值在于,它将原本"死"的资料库变成了"活"的生产力工具。无论是基于全局文档回答复杂问题,还是结合外部非知识工具(如自动发邮件通知相关责任人),知识型 Agent 都是构建知识密集型应用的关键。

5.4 多模态 Agent

多模态 Agent 是一种能够处理多种模态数据(如文本、图像、视频等)的 Agent 类型。其核心价值在于其感知与推理的深度融合:它不仅能"读"指令,更能"看"环境,并据此生成多维度的反馈。

  • 全感官输入与输出:它可以直接接收图片、视频流或实时语音,并生成对应的多媒体内容或执行具体的动作。
  • 跨模态深度推理:例如,它能结合图像细节与文本逻辑,识别出复杂的对象关联或异常状态。

典型应用场景:

想象一个"自动化 QA 测试 Agent":你只需给它一段手机屏幕录屏,它能自动识别出 UI 界面上导致崩溃的 Bug 按钮位置,精准截取关键帧,并自动在 Jira 系统中提交一个包含“操作步骤、异常截图、预期效果”的专业技术工单。

这种能"能看、能听、能说"的特性,让 Agent 彻底走出了纯文字的温室,开始在 UI 自动化测试、工业巡检、智能家居等现实交互场景中大放异彩。

5.5 迈向高度自主:OpenClaw 与"数字员工"

通用型 Agent 虽然在逻辑推理与工具调用方面取得了长足进步,但在实际落地场景中仍面临显著限制。大多数系统本质上是反应性的,依赖人类持续的指令输入,难以在没有人工干预的情况下独立完成跨越数日的长时运行任务(Long-Running Tasks)。人们对一个 7 天 24 小时不间断工作的数字员工的愿景,催生了对基础架构的重新审视。

在这种背景下,OpenClaw 脱颖而出,成为解决长时运行、自主规划与持久化状态管理等核心技术挑战的典型代表。它不仅是一个 Agent 框架,更像是一个初步成形的 “Agent OS(智能体操作系统)”。其架构设计并非简单的 API 封装,而是一个务实的分布式控制平面。其最显著的特征是实现了控制逻辑(Control Plane)与推理执行(Runtime)的深度解耦。这一设计使得 OpenClaw 能够作为机器上的长久守护进程运行,保持对各种通讯频道的监听,同时处理复杂的后台任务。

另外,通过将网关控制平面、文件优先的记忆系统与心跳触发的被动唤醒机制相结合,OpenClaw 成功构建了一个支持长效运行的基础设施。它证明了自主智能体的真正力量不在于模型有多大,而在于其与物理环境、文件系统及人类现有通讯工具的深度集成程度。随着 IronClaw 等安全增强版本的成熟,以及 OpenClaw-RL 带来的持续进化能力,这种 24/7 不间断工作的"数字员工"将从开发者的玩具,逐步演变为企业和个人不可或缺的核心生产力基础设施。

在不久的将来,智能体的竞争焦点将从单纯的推理速度转向"运营可靠性",那些具备自我修复能力、并在严格安全约束下执行高度自主任务的系统,将最终定义 AI 时代的数字化工作范式。OpenClaw 已经为这一未来铺平了道路,并建立了一个庞大的、去中心化的技能与知识库,让人们都能通过简单的 Markdown 配置,定制属于自己的、具备高度自主权的智能体助手。

6. 结语:从“对话”到“协同”的范式革命

从最初只会吟诗作对的"聊天机器人",到如今能够独立思考、调用工具、协同作战的"数字员工",AI Agent 的演进正以前所未有的速度重塑着人类的劳动范式。

我们正在经历一场深刻的变革:软件的形态正在从"死板的工具"转变为"有能动性的实体"。对于开发者而言,未来的核心竞争力将不再仅仅是编写了多少行代码,而是能否构建出深谙业务逻辑、能够自主调度资源并交付结果的 Agent 系统。

Agent 不是要取代人类的智慧,而是要将我们从繁琐的、重复性的数字劳作中解放出来,去关注更具创造力的决策。在这个 AI 驱动的新纪元里,每个人都将拥有一支属于自己的数字团队。未来已来,而 Agent 正是那把开启规模化个性化生产大门的钥匙。

',82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default}; +import{_ as e,c as n,o as l,d as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o('

从提示词到数字员工:AI Agent 深度全景综述

摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从"以人为中心"向"以 AI 为中心"的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。

1. 什么是 Agent?——从“工具”到“实体”的进化

核心逻辑:现代 Agent 的本质是 "LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。

在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。

如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:

  • 自主性 (Autonomy): 无须时刻盯着,设定目标后它能自己想办法完成。

  • 适应性 (Adaptability): 环境变了(比如网页改版或 API 报错),它能实时调整策略。

  • 主动性 (Proactivity): 不只是被动响应指令,它会主动拆解目标并寻找路径。

  • 社会性 (Sociality): 它能像人一样,与其他 Agent 或人类进行协作。

2. 核心价值:自动化程度的阶梯式跨越

我们对 Agent 的追求,本质上是从“写好提示词(Prompt)”转向“构建自主工作流(Workflow)”。为了更直观地衡量 Agent 的能力,我们可以将其自动化程度分为三个档次:

自动化等级核心特征典型代表
L1:任务执行者处理单一模态、简单数据;调用少量标准工具;执行预定义的静态任务。翻译脚本、简单 SQL 生成器
L2:流程编排者多模态感知;具备长短期记忆;能编排复杂、长尾的任务流。Dify, Coze, n8n
L3:自主进化者极少人工干预;自主洞察环境变化;实现业务流程的自适应编排。Claude Code, Manus, OpenClaw

随着 Agent 能力的"逐梯跨越",过往的工作范式可能被颠覆,实现从"面向过程"到"面向目标"的根本性颠覆。对于软件系统开发人员而言,传统的软件工程思路以人为中心,AI 只是辅助工具,通过采用固定形态的交互界面和预定义有限域的任务,实现规模化的生产方式。而 Agent 工程则是以 AI 为中心,人类转型为监督者和资源提供者,采用动态人机交互界面和无预制有限域的任务,完成规模化的个性化生产

3. 应用场景:谁会被替代,谁会被增强?

3.1 深度替代与变革型

在这类场景中,AI 已经能够闭环完成 80% 以上的工作,在显著重构工作模式后,部分岗位可能被替代:

  • 基础编程:AI 代码助手自动生成样板代码、排查 Bug,初级 Coders 必须向架构和复杂逻辑转型。

  • 基础学习(知识点 / 技能):题库刷题、基础答疑、知识点检索。AI 可直接替代人工答疑 / 辅导,覆盖 80% 基础学习需求。

  • 标准化客服:处理 90% 的售后咨询与查询,人工仅负责处理极端复杂的情感诉求。

3.2 辅助增强型(升级工作价值)

AI 作为效率工具,不替代核心岗位,而是负责脏活累活、升级工作价值,人类负责决策与审美:

  • 高级咨询:Agent 可自动整理行业数据、生成分析报告初稿,咨询师从"信息收集"中解放出来,更聚焦策略洞察、客户沟通等高价值环节。
  • 深度研究(学术 / 行业):Agent 自动完成文献检索、数据清洗与报告框架搭建,研究者得以专注于核心创新结论、深度洞察与研究设计,实现从"资料整理"到"思想创造"的价值跃迁。
  • 高级学习(研究性 / 技能):Agent 辅助完成知识体系搭建、复杂技能拆解与进阶路径规划,学习者将精力投入理解内化、实践探索与自主创新,完成从"知识获取"到"能力建构"的范式转变。

3.3 生活与垂直领域(长尾覆盖)

  • 健康医护:虚拟健康助手基于可穿戴设备数据提供 24h 监护,并在异常时主动预警。
  • 个性化教育:Agent 就像一个 1 对 1 助教,根据你的错题逻辑实时调整教学大纲,而非死记硬背。
  • 个人财务:自动追踪账单、优化预算,并根据市场动态提供初步投资建议。

4. 技术拆解:Agent 核心要素与关键技术

Agent = LLM (大脑) + 工具 (手脚) + 指令 (行为准则) + 自主工作流执行

一个成熟的 Agent 系统通常由规划(Planning)​、记忆(Memory)​、工具(Tools)和行动(Action)四大核心模块构成:

about site background
  • 规划(Planning)​:解决"怎么做"
    • 任务分解:将“帮我写一个电商 App”拆解为 UI 设计、后端架构、数据库建模等子目标。
    • 反思与评价:在执行过程中不断“自我批评”,发现走不通时及时掉头。
  • 记忆(Memory)​:解决"我是谁,我做过什么"
    • 短期记忆:与上下文学习有关,存储当前的对话流,记录最近的交互历史,如用户指令、系统响应等。
    • 长期记忆:涉及信息的长时间保留和检索,存储长期的知识库,如用户个人信息、任务历史等,通常通过利用外部向量存储与快速检索来实现。
  • 工具 (Tools):解决"能力边界"。LLM 虽然博学,但不会算高难度数学,也不知道昨天的天气,工具就是它的“外挂”。
  • 行动(Action)​:解决"落地执行",将规划好的逻辑转化为具体的 API 调用或代码执行,并接收环境反馈,形成闭环。

4.1 规划

Agent的规划核心包含任务分解与自我反思两部分:任务分解是将复杂目标拆解为易执行的子任务,主要有先分解后规划、边分解边规划及基于语言模型的分解三类方法;自我反思则通过“生成-反思”循环,结合相关框架与模式优化执行结果、提升运行质量。

若需进一步了解详细的规划机制,可打开:Agent规划模块

4.2 记忆

Agent的记忆是其核心模块,借鉴人类记忆分为感觉、短期、长期三类,结合内部、跨任务及外部知识积累,应用中需适配场景选择存储检索方式。

记忆类型说明
感官记忆这是最基础的阶段,指智能体接收外部输入(文本、图像、语音)的瞬时感知。在 LLM 交互中,这表现为模型对当前 Prompt 的原始解析。
短期记忆主要指上下文学习(In-Context Learning),它受限于 LLM 的上下文窗口(Context Window),存储的只是有限轮次的对话历史,如用户指令、系统响应等。
核心功能:存储当前对话流,记录最近几轮的交互历史(指令、系统响应、中间思考过程)。
技术实现:通过将历史对话拼接在当前的 Prompt 中实现。
长期记忆涉及信息的长时间保留和在需要时的精准检索,这是 Agent 迈向高度自主的关键。
核心功能:存储用户的个人偏好、长期的项目背景、历史任务的成功经验或失败教训。
技术实现:通常利用外部向量数据库(Vector DB)实现,通过"嵌入(Embedding)+ 向量检索"在数百万条记录中快速定位相关信息。

如果规划模块赋予了 Agent “逻辑”,那么记忆模块则赋予了它“灵魂”和“连续性”。随着长文本技术(Long Context)和向量搜索算法的不断演进,Agent 的记忆将变得越来越深邃且精准。

对于开发者而言,设计优秀的记忆淘汰与检索算法,比单纯追求大模型的参数规模更为重要。只有当 Agent 能够“记住”业务细节并“忘记”无关噪音时,它才真正具备了从“对话工具”进化为“数字合伙人”的素质。

4.3 工具

典型案例:Claude Code 集成了文件读写、查找、Bash 等一系列通用工具,使其成为一个能够自主写代码的"数字工程师"。

LLM 本身在处理实时信息(如天气)、精确计算(如高阶数学)或特定私域数据(如公司财务报表)时存在天然局限,而工具赋予了 Agent 超越模型内核的能力。我们可以从功能属性和实现方式两个维度来理解 Agent 的工具箱:

1、按功能属性分类:Agent 能做什么?

类别功能定位核心能力
数据类 (Data)解决"信息差"通过检索工具(Retrieval)从搜索引擎、数据库或 PDF 文档中获取最新上下文。
行动类 (Action)解决"执行力"通过 API 调用在外部系统中产生影响,例如发送邮件、修改 CRM 记录或提交订单。
编排类 (Orchestration)解决"复杂性"将多个子任务组合成一个更大的任务。一个 Agent 也可以被封装成工具,供另一个更高级的 Agent 调用,实现多智体协作。

2、按实现方式分类:Agent 怎么调用?

实现方式说明
函数调用 (Function Calling)模型生成结构化指令,由客户端在本地执行(如操作本地文件或内网数据库),兼顾安全性与灵活性。
标准扩展 (Extensions)通过标准化的协议(如 OpenAPI)直接连接外部服务,使 Agent 能够像乐高积木一样无缝对接各种云端 API。
计算机使用 (Computer Use)对于没有 API 的陈旧系统,Agent 可以通过视觉识别和模拟鼠标键盘,像人类一样直接操作软件界面。

4.4 行动

行动(Action)模块是 Agent 的执行机构,它的职责是将规划阶段生成的"蓝图"转化为物理世界或数字系统中的"动作"。它不仅是指令的输出者,更是环境反馈的接收者。

行动模块的核心在于完成以下三个层面的逻辑闭环:

模块说明示例
动作生成 (Action Generation)将复杂的子目标转化为具体的步骤规划是"调查市场趋势",行动则是先"搜索关键词",再"提取网页内容",最后"生成摘要"
动态调整 (Dynamic Adaptation)行动并非死板的执行脚本,Agent 会根据工具返回的结果(反馈)实时调整策略如果一次搜索没有找到答案,行动模块会决定尝试不同的关键词或切换工具
环境交互 (Interaction)明确行动的范围,包括内部行动与外部工具调用利用 LLM 的内在能力(如推理、总结)进行内部行动,以及通过调用外部工具(如 API、数据库)扩展行动边界,最终达成预设的行动目标

整体来讲,行动模块确保了 Agent 的"言行一致":它基于记忆来决策,利用工具来施展,最终通过不断与环境互动,将抽象的目标变为真实的结果

5. Agent 的分类与未来

目前 Agent 领域尚无统一标准,但我们可以按其业务深度与协作范式将其归纳为五大形态。从单兵作战的“全能大脑”到成群结队的“数字团队”,它们正以不同的进化路径渗透进各种复杂的生产场景。接下来,我们将逐一拆解这五种重塑生产力的核心类别。

5.1 通用 Agent

随着技术的演进,业界对智能体的认知也发生了变化:真正的 Agent 不应只是被动响应人类指令的"聊天插件",而是一个自主的目标执行者

在这种背景下,通用 Agent (General Agent) 脱颖而出。它并非为特定单一任务(如“写一段代码”)而生,而是一个拥有广泛能力边界、能够解决开放式问题的智能系统。其运作逻辑可以精炼为“思考(Think)、行动(Act)、学习(Learn)”的闭环:

阶段核心功能详细说明
思考任务拆解与路径规划智能体接收到模糊目标(如"帮我调研并搭建一个技术博客")后,会进行任务拆解与路径规划,并在执行过程中不断反思"当前方案是否最优?是否需要调整?"
行动调用高度自动化的原子能力基于思考结果,调用高度自动化的原子能力。除了读写文件、网页浏览、运行终端命令或访问数据库外,常见的原子能力还包括:
环境探测:自动识别当前操作系统环境、安装缺失的依赖包。
视觉交互:在没有 API 的情况下,通过屏幕截图识别 UI 元素并模拟点击。
资源调度:自动申请 API Key、配置云端服务或触发 GitHub Actions 工作流。
跨应用编排:将 A 应用的输出处理后,精准填充到 B 应用的表单中。
学习个人偏好沉淀与经验积累这是通用 Agent 进阶的关键。它能从交互中记住你的个人偏好(例如:报告偏好 PDF 格式、代码风格倾向于 TypeScript),并将其沉淀为"经验",使下一次决策更符合预期。

为了应对不同复杂程度的任务,业界演化出了两种主流的实现范式:

  • ReAct 像是一个反应敏捷的**“现场协调员”,擅长随机应变。
  • Plan-and-Execute 则更像一位经验丰富的“项目经理”**,以全局规划见长。
范式类型核心逻辑优势适用场景
ReAct Agent采用"思考-行动-观测"小步快跑模式。模型走一步看一步,根据环境的即时反馈调整下一步动作。实时性强、交互自然、逻辑链路透明。较为简单的任务、对成本敏感的轻量级场景。
Plan-and-Execute Agent先由一个"大脑"将复杂目标拆解为完整的步骤列表(Todo List),再由另一只 "手" 负责逐一高效执行。准确率极高,能够处理具备深度依赖关系的复杂工程。需要长程推理的任务、软件开发、深度行业调研。

5.2 多智能体系统 (Multi-Agent System)

多智能体系统通过 “专注子任务、上下文解耦、并行推进” 的逻辑,让 AI 从一个人的独角戏,演变成了指挥若定的交响乐。它不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。

当面对较复杂的工程任务时,单个 Agent 往往会因为任务链信息量太大而信息量太大而陷入"混乱"或出错。多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作"。

在 MAS 架构中,主智能体(Lead Agent)可以根据需求生成多个独立的子智能体(Subagent)。这些子智能体像是一群专注的专家,各自处理特定的子任务,从而带来了四个维度的核心优势:

维度详细说明
上下文的精细隔离这是多智能体最强悍的地方。每个子智能体拥有独立的记忆空间,确保细碎的中间任务不会"污染"主对话环境。例如,负责搜集海量原始数据的 Subagent,其繁杂的搜索记录会被隔离在自己的上下文中,只把最终提炼的结论汇报给主智能体,让主脑始终保持清醒的大局观。
极致的并行化效率在单 Agent 模式下,任务只能一件接一件地做;而在 MAS 中,多个子智能体可以并行运行。就像一个调研项目,多个研究员可以同时在不同领域搜集数据,显著加快了复杂工作流的交付速度。
专业指令的深度定制我们可以为不同的 Subagent 注入不同的"灵魂"。负责"代码审计"的拥有最严苛的安全规范,负责"文案润色"的拥有细腻的品牌调性。这种指令隔离避免了在同一个提示词(Prompt)中堆砌太多要求而导致的指令失效。
工具调用的安全边界我们可以精准限制每个子智能体的权限。例如,查询数据的 Subagent 只有"只读"权限,而"发送邮件"或"修改数据库"权限被严格限制在特定的 Subagent 手中,极大降低了 AI 产生意外行为的风险。

典型案例:Deep Research 深度调研系统

以一个复杂的调研流程为例,系统会通过 Lead Agent + Subagent 的分层架构完美闭环:

  • Lead Agent (协调员):负责“脑力拆解”,将主题分解为若干子课题,并委派任务,它从不亲自查资料,保持绝对的简效。
  • Researcher (研究员):多个实例并行出发,每个专注于一个子主题,搜集至少 10-15 个硬核数据点。
  • Data Analyst (数据分析师):仅负责读取研究笔记,利用 Python 生成直观的图表。
  • Report Writer (报告撰写员): 汇总所有研究成果,最终调用工具生成一份专业的 PDF 报告。

5.3 知识型 Agent

如果说通用 Agent 擅长逻辑推理,那么多智能体擅长流程协作,知识型 Agent 的核心使命则是"理解并转化海量非结构化数据"。它不仅仅是一个简单的搜索工具,而是一个能够深度理解私域知识并基于此进行复杂决策的智能实体。

在企业级应用中,数据往往散落在物理文档、代码仓库、Slack 聊天记录或关系型数据库中。知识型 Agent 的核心诉求在于:

  • "全局理解与跨库关联":它能跨越不同的文档格式与存储介质,建立起知识间的逻辑联系。

  • "动态更新与实时同步":它能感知环境反馈,随着项目进展自动同步最新的会议纪要或技术方案。

  • "深度的知识推理": 不止是"检索",更是"思考"。

应用场景示例:

想象你需要复盘一个复杂项目的进度。知识型 Agent 可以瞬间扫描过去三个月的所有项目会议纪要、Slack 讨论记录和技术文档,最终为你总结出:"导致 X 项目延期的核心原因主要集中在 A 接口的权限变动,以及 B 团队在第二周的人力缺口。"

这种 Agent 的核心价值在于,它将原本"死"的资料库变成了"活"的生产力工具。无论是基于全局文档回答复杂问题,还是结合外部非知识工具(如自动发邮件通知相关责任人),知识型 Agent 都是构建知识密集型应用的关键。

5.4 多模态 Agent

多模态 Agent 是一种能够处理多种模态数据(如文本、图像、视频等)的 Agent 类型。其核心价值在于其感知与推理的深度融合:它不仅能"读"指令,更能"看"环境,并据此生成多维度的反馈。

  • 全感官输入与输出:它可以直接接收图片、视频流或实时语音,并生成对应的多媒体内容或执行具体的动作。
  • 跨模态深度推理:例如,它能结合图像细节与文本逻辑,识别出复杂的对象关联或异常状态。

典型应用场景:

想象一个"自动化 QA 测试 Agent":你只需给它一段手机屏幕录屏,它能自动识别出 UI 界面上导致崩溃的 Bug 按钮位置,精准截取关键帧,并自动在 Jira 系统中提交一个包含“操作步骤、异常截图、预期效果”的专业技术工单。

这种能"能看、能听、能说"的特性,让 Agent 彻底走出了纯文字的温室,开始在 UI 自动化测试、工业巡检、智能家居等现实交互场景中大放异彩。

5.5 迈向高度自主:OpenClaw 与"数字员工"

通用型 Agent 虽然在逻辑推理与工具调用方面取得了长足进步,但在实际落地场景中仍面临显著限制。大多数系统本质上是反应性的,依赖人类持续的指令输入,难以在没有人工干预的情况下独立完成跨越数日的长时运行任务(Long-Running Tasks)。人们对一个 7 天 24 小时不间断工作的数字员工的愿景,催生了对基础架构的重新审视。

在这种背景下,OpenClaw 脱颖而出,成为解决长时运行、自主规划与持久化状态管理等核心技术挑战的典型代表。它不仅是一个 Agent 框架,更像是一个初步成形的 “Agent OS(智能体操作系统)”。其架构设计并非简单的 API 封装,而是一个务实的分布式控制平面。其最显著的特征是实现了控制逻辑(Control Plane)与推理执行(Runtime)的深度解耦。这一设计使得 OpenClaw 能够作为机器上的长久守护进程运行,保持对各种通讯频道的监听,同时处理复杂的后台任务。

另外,通过将网关控制平面、文件优先的记忆系统与心跳触发的被动唤醒机制相结合,OpenClaw 成功构建了一个支持长效运行的基础设施。它证明了自主智能体的真正力量不在于模型有多大,而在于其与物理环境、文件系统及人类现有通讯工具的深度集成程度。随着 IronClaw 等安全增强版本的成熟,以及 OpenClaw-RL 带来的持续进化能力,这种 24/7 不间断工作的"数字员工"将从开发者的玩具,逐步演变为企业和个人不可或缺的核心生产力基础设施。

在不久的将来,智能体的竞争焦点将从单纯的推理速度转向"运营可靠性",那些具备自我修复能力、并在严格安全约束下执行高度自主任务的系统,将最终定义 AI 时代的数字化工作范式。OpenClaw 已经为这一未来铺平了道路,并建立了一个庞大的、去中心化的技能与知识库,让人们都能通过简单的 Markdown 配置,定制属于自己的、具备高度自主权的智能体助手。

6. 结语:从“对话”到“协同”的范式革命

从最初只会吟诗作对的"聊天机器人",到如今能够独立思考、调用工具、协同作战的"数字员工",AI Agent 的演进正以前所未有的速度重塑着人类的劳动范式。

我们正在经历一场深刻的变革:软件的形态正在从"死板的工具"转变为"有能动性的实体"。对于开发者而言,未来的核心竞争力将不再仅仅是编写了多少行代码,而是能否构建出深谙业务逻辑、能够自主调度资源并交付结果的 Agent 系统。

Agent 不是要取代人类的智慧,而是要将我们从繁琐的、重复性的数字劳作中解放出来,去关注更具创造力的决策。在这个 AI 驱动的新纪元里,每个人都将拥有一支属于自己的数字团队。未来已来,而 Agent 正是那把开启规模化个性化生产大门的钥匙。

',82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default}; diff --git a/assets/ai_agent_overview.md.CBny6Kqh.lean.js b/assets/ai_agent_overview.md.BZYkese5.lean.js similarity index 97% rename from assets/ai_agent_overview.md.CBny6Kqh.lean.js rename to assets/ai_agent_overview.md.BZYkese5.lean.js index 143aa6a..19e225f 100644 --- a/assets/ai_agent_overview.md.CBny6Kqh.lean.js +++ b/assets/ai_agent_overview.md.BZYkese5.lean.js @@ -1 +1 @@ -import{_ as e,c as n,o as l,d as o}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o("",82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default}; +import{_ as e,c as n,o as l,d as o}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o("",82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default}; diff --git a/assets/ai_agent_planning-module.md.CDlvBNcn.js b/assets/ai_agent_planning-module.md.CTDZNcds.js similarity index 99% rename from assets/ai_agent_planning-module.md.CDlvBNcn.js rename to assets/ai_agent_planning-module.md.CTDZNcds.js index cb2871a..8e375ed 100644 --- a/assets/ai_agent_planning-module.md.CDlvBNcn.js +++ b/assets/ai_agent_planning-module.md.CTDZNcds.js @@ -1 +1 @@ -import{_ as e,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l('

探寻 Agent 决策中枢:迈向确定性执行的规划范式

摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。

1. 引言

在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。

Agent 的规划能力主要由两部分协同驱动:任务分解自我反思

2. 任务分解:化繁为简的策略

任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。

根据“规划”与“执行”发生的时间节点,业界形成了三类主流方法。

2.1 先分解后规划

这种模式类似于“建筑图纸制”,先将复杂任务拆解为多个子任务,然后再为每个子任务制订详细的执行计划,确保Agent 在动手之前,必须产出完整的步骤清单。其核心逻辑是先将任务细化为子任务,并明确依赖关系。

先分解后规划的优势在于任务与原任务联系紧密,能有效降低任务遗漏和幻觉风险。它的不足在于缺乏灵活性,一旦初始计划中的某一步在执行时受阻,由于计划已固定,整个流程容易陷入死循环或彻底失败。因此,在工程实践中,我们必须深入思考如何设计动态调整策略或引入人工干预节点,以规避问题。

2.2 边分解边规划

这种模式类似于"摸着石头过河",让推理与行动交替进行。Agent 不预设固定的执行路径,而是根据每一步的反馈动态调整,在分解任务的同时进行规划,实时优化子任务的执行顺序和策略。

分解边规划的策略能实时响应环境反馈,根据环境反馈调整分解策略,容错率高,具有较好的灵活性和适应性。但是,在处理复杂任务时,如果整个规划过程过长,可能会因为 LLM 上下文过长而产生“幻觉”,导致后续的任务与规划偏离初始目标。

2.3 基于语言模型的自主分解

这是一种更纯粹的模式,利用 LLM 强大的语义理解能力,直接通过 Prompt 引导其生成管理子任务的指令,将自然语言目标转化为机器可理解的步骤树。

它的核心逻辑是直接将自然任务细化为子任务,无需预设计划。这种模式虽然简单,但是需要 LLM 具备强大的语义理解能力,才能准确地将自然语言目标转换为子任务。同时,由于 LLM 生成的子任务是基于当前环境反馈的,因此在处理复杂任务时,可能会因为环境变化而产生“幻觉”,导致后续规划逐渐偏离初始目标。

3. 自我反思:闭环控制的艺术

在 Agent 规划模块中,反思(Reflection)是一个重要的概念,如果说任务分解是“进攻”,那么自我反思就是“防守”与“修正”。它是一种提升 Agent 运行成功率的核心提示策略,通过模型的自我审查来改进初步成果。

反思的基本原理是通过模型的自我审查和自我反馈来改进初步生成的内容,反思机制也通常遵循一个“生成-评估-修正”的循环:

  • 生成阶段:模型产出初步的解决方案(如一段代码或一份大纲)。

  • 反思阶段:模型切换为“审计员”角色,对照用户需求和客观约束,找出初步结果中的不足、逻辑漏洞或错误。

  • 修正阶段:基于反思建议,重新组织结构或调整细节,产出更高质量的最终版本。

在每一轮反思中,AI 模型会回顾生成的内容,评估其质量,并提出修改建议。这些修改建议可以是细节上的调整,也可以是对生成结构的重新组织,目的是提升内容的连贯性、逻辑性、表达清晰度或增强对用户需求的适应性。

为了让这种“自我纠错”能力规模化,业界也演化出了几种成熟框架:

  • Reflexion:赋予 Agent 动态记忆能力,通过回顾过去的失败经验来优化当下的决策。

  • CoH (Chain of Hindsight):向模型展示带有正面和负面反馈的历史输出,通过对比学习,鼓励模型在当前任务中“趋利避害”。

4. 动态响应模式:基于 ReAct 看规划闭环

在众多 Agent 设计模式中,ReAct (Reasoning + Acting) 是目前应用最广、直观性最强的模式。它完美体现了前文提到的“边分解边规划”策略,通过将推理(Reasoning)与行动(Acting)深度耦合,让 Agent 具备了在复杂环境中“小步快跑”的能力。

about site background
  • 推理(Reason):这是思考环节,Agent 根据当前状态评估形势,分析可能的行动方案,为下一步决策提供依据。
  • 行动(Action):根据推理结果,Agent 选择并执行具体的操作,将思考转化为实际动作。
  • 观测(Observation):这是闭环中最关键的一步,是关键的反馈吸收阶段。行动执行后,Agent 收集环境反馈,评估执行效果,并将结果作为下一轮推理的输入,形成闭环。

传统的 LLM 容易在长路径任务中迷失方向,而 ReAct 的核心在于构建了一个不断自修正的逻辑闭环,引入了“动态重判断”机制:

  • 容错性:如果 Action 的结果报错(Observation),Agent 会在下一轮 Thought 中意识到错误,并主动调整策略。

  • 透明性:人类可以清晰地看到 Agent 的“内心独白”,理解它是如何从初始目标一步步逼近最终答案的。

  • 终止判断:当 Observation 的结果已经足以回答问题时,Agent 会做出“无需再调用工具”的决策,直接输出 Final Answer,优雅地结束规划。

这种“推理-行动-观测”的循环,将原本死板的逻辑链路转化为了具有生命力的、可进化的工作流。

5. 预编排模式:Plan-and-Execute 下的自动化工程

在分析完侧重“边走边看”的 ReAct 模式后,我们必须讨论另一种在处理高复杂度、长链路、强依赖任务时表现更稳健的范式:Plan-and-Execute(规划与执行分离)。

5.1 核心运行机制

Plan and Execute Workflow

与 ReAct 将推理与行动混合在每一轮循环中不同,该模式通过一个显式的“计划清单”作为中转站,实现了决策与执行的解耦:

  • 规划器:建立全局航向,当用户提交一个宏观任务(如“从零开发一个 NestJS 认证模块”)时,规划器首先介入。它利用最强模型的逻辑能力,将模糊的目标拆解为一系列结构化的 Task List。这一步是“谋定”的过程。

  • 执行器:专注原子操作,执行器并不关心最终目标有多宏观,它只负责按照清单逐一执行。这种设计允许执行器内部进行自循环(Internal Loop),以最纯粹的方式利用工具完成特定的子任务。

  • 重规划:动态闭环的关键,每完成一个子任务,系统会带着执行结果(Observation)进入重规划环节。此时,Agent 会面临一个关键判定:

    • 需要继续:如果当前结果是中间产物,则修改计划清单,进入下一环。

    • 不需要继续:如果目标已达成,则通知用户任务完成。

5.2 为什么在复杂场景中这种模式更具优势?

  • 减少“推理漂移”:在 ReAct 模式下,模型容易因为每一步都要思考而逐渐忘记“初心”。Plan-and-Execute 通过一份全局可见的任务清单,锚定了长期目标。

  • 上下文解耦:Executor 在执行第 5 个任务时,不需要关注第 1 个任务的详细推理过程,只需要关注第 4 个任务的输出。这极大节省了上下文空间,减少了因信息过载导致的幻觉。

  • 高效重试:当任务执行失败时,系统只需要定位到清单中的特定索引进行重试或局部修正,而不需要从头开始整个推理链条。

5.3 小结

总的来说,Plan-and-Execute 模式并非排斥“边走边看”,而是通过架构上的解耦,为 Agent 注入了“工程师思维”:先出方案、逐项落实、节点复盘。

这一模式的精髓在于引入了重规划(RePlan)回路。正如流程图所示,它并不是在执行死板的脚本,而是在每一个关键步骤后都进行一次“判定是否继续”的元认知检查。这种机制有效地对抗了 LLM 的“瞬时记忆遗忘”,让 Agent 在面对需要跨越数十个步骤的自动化工程任务时,依然能保持航向的精准。

6. 范式选择:如何为你的 Agent 配置“小脑”?

在理解了 ReAct 与 Plan-and-Execute 后,开发者面临的核心挑战是如何在实际业务中进行选型。下表从工程实践角度对两者进行了对比总结:

维度ReActPlan-and-Execute
规划时机执行过程中实时推理执行前进行全局拆解
错误处理依赖下一轮 Thought 修正依赖 RePlan 机制重修清单
适用广度开放域交互、工具调用少垂直域工程、长链路、强依赖
系统熵值较高(状态随交互实时变化)较低(状态锚定在任务清单)

7. 结语:规划是 Agent 迈向“确定性”的定盘星

至此,我们深度拆解了 Agent 规划模块的两大支柱:任务分解与自我反思。规划模块赋予了 Agent “逻辑”,但这仅仅是构建“数字员工”的第一步。一个能在复杂业务中持久生存的智能体,除了要懂得“如何思考”,还需要解决“我是谁、我做过什么、我从哪获取知识”的问题。在构建 Agent 时,并没有绝对的优劣之分。成熟的系统往往采用混合模式:在大目标上使用 Plan-and-Execute 保证方向不偏,在具体的子任务执行中开启 ReAct

本篇文章到此结束,建议结合前文 《AI Agent 深度全景综述》 一起阅读,构建更完整的认知闭环。

',48)])])}const A=e(r,[["render",i]]);export{h as __pageData,A as default}; +import{_ as e,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l('

探寻 Agent 决策中枢:迈向确定性执行的规划范式

摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。

1. 引言

在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。

Agent 的规划能力主要由两部分协同驱动:任务分解自我反思

2. 任务分解:化繁为简的策略

任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。

根据“规划”与“执行”发生的时间节点,业界形成了三类主流方法。

2.1 先分解后规划

这种模式类似于“建筑图纸制”,先将复杂任务拆解为多个子任务,然后再为每个子任务制订详细的执行计划,确保Agent 在动手之前,必须产出完整的步骤清单。其核心逻辑是先将任务细化为子任务,并明确依赖关系。

先分解后规划的优势在于任务与原任务联系紧密,能有效降低任务遗漏和幻觉风险。它的不足在于缺乏灵活性,一旦初始计划中的某一步在执行时受阻,由于计划已固定,整个流程容易陷入死循环或彻底失败。因此,在工程实践中,我们必须深入思考如何设计动态调整策略或引入人工干预节点,以规避问题。

2.2 边分解边规划

这种模式类似于"摸着石头过河",让推理与行动交替进行。Agent 不预设固定的执行路径,而是根据每一步的反馈动态调整,在分解任务的同时进行规划,实时优化子任务的执行顺序和策略。

分解边规划的策略能实时响应环境反馈,根据环境反馈调整分解策略,容错率高,具有较好的灵活性和适应性。但是,在处理复杂任务时,如果整个规划过程过长,可能会因为 LLM 上下文过长而产生“幻觉”,导致后续的任务与规划偏离初始目标。

2.3 基于语言模型的自主分解

这是一种更纯粹的模式,利用 LLM 强大的语义理解能力,直接通过 Prompt 引导其生成管理子任务的指令,将自然语言目标转化为机器可理解的步骤树。

它的核心逻辑是直接将自然任务细化为子任务,无需预设计划。这种模式虽然简单,但是需要 LLM 具备强大的语义理解能力,才能准确地将自然语言目标转换为子任务。同时,由于 LLM 生成的子任务是基于当前环境反馈的,因此在处理复杂任务时,可能会因为环境变化而产生“幻觉”,导致后续规划逐渐偏离初始目标。

3. 自我反思:闭环控制的艺术

在 Agent 规划模块中,反思(Reflection)是一个重要的概念,如果说任务分解是“进攻”,那么自我反思就是“防守”与“修正”。它是一种提升 Agent 运行成功率的核心提示策略,通过模型的自我审查来改进初步成果。

反思的基本原理是通过模型的自我审查和自我反馈来改进初步生成的内容,反思机制也通常遵循一个“生成-评估-修正”的循环:

  • 生成阶段:模型产出初步的解决方案(如一段代码或一份大纲)。

  • 反思阶段:模型切换为“审计员”角色,对照用户需求和客观约束,找出初步结果中的不足、逻辑漏洞或错误。

  • 修正阶段:基于反思建议,重新组织结构或调整细节,产出更高质量的最终版本。

在每一轮反思中,AI 模型会回顾生成的内容,评估其质量,并提出修改建议。这些修改建议可以是细节上的调整,也可以是对生成结构的重新组织,目的是提升内容的连贯性、逻辑性、表达清晰度或增强对用户需求的适应性。

为了让这种“自我纠错”能力规模化,业界也演化出了几种成熟框架:

  • Reflexion:赋予 Agent 动态记忆能力,通过回顾过去的失败经验来优化当下的决策。

  • CoH (Chain of Hindsight):向模型展示带有正面和负面反馈的历史输出,通过对比学习,鼓励模型在当前任务中“趋利避害”。

4. 动态响应模式:基于 ReAct 看规划闭环

在众多 Agent 设计模式中,ReAct (Reasoning + Acting) 是目前应用最广、直观性最强的模式。它完美体现了前文提到的“边分解边规划”策略,通过将推理(Reasoning)与行动(Acting)深度耦合,让 Agent 具备了在复杂环境中“小步快跑”的能力。

about site background
  • 推理(Reason):这是思考环节,Agent 根据当前状态评估形势,分析可能的行动方案,为下一步决策提供依据。
  • 行动(Action):根据推理结果,Agent 选择并执行具体的操作,将思考转化为实际动作。
  • 观测(Observation):这是闭环中最关键的一步,是关键的反馈吸收阶段。行动执行后,Agent 收集环境反馈,评估执行效果,并将结果作为下一轮推理的输入,形成闭环。

传统的 LLM 容易在长路径任务中迷失方向,而 ReAct 的核心在于构建了一个不断自修正的逻辑闭环,引入了“动态重判断”机制:

  • 容错性:如果 Action 的结果报错(Observation),Agent 会在下一轮 Thought 中意识到错误,并主动调整策略。

  • 透明性:人类可以清晰地看到 Agent 的“内心独白”,理解它是如何从初始目标一步步逼近最终答案的。

  • 终止判断:当 Observation 的结果已经足以回答问题时,Agent 会做出“无需再调用工具”的决策,直接输出 Final Answer,优雅地结束规划。

这种“推理-行动-观测”的循环,将原本死板的逻辑链路转化为了具有生命力的、可进化的工作流。

5. 预编排模式:Plan-and-Execute 下的自动化工程

在分析完侧重“边走边看”的 ReAct 模式后,我们必须讨论另一种在处理高复杂度、长链路、强依赖任务时表现更稳健的范式:Plan-and-Execute(规划与执行分离)。

5.1 核心运行机制

Plan and Execute Workflow

与 ReAct 将推理与行动混合在每一轮循环中不同,该模式通过一个显式的“计划清单”作为中转站,实现了决策与执行的解耦:

  • 规划器:建立全局航向,当用户提交一个宏观任务(如“从零开发一个 NestJS 认证模块”)时,规划器首先介入。它利用最强模型的逻辑能力,将模糊的目标拆解为一系列结构化的 Task List。这一步是“谋定”的过程。

  • 执行器:专注原子操作,执行器并不关心最终目标有多宏观,它只负责按照清单逐一执行。这种设计允许执行器内部进行自循环(Internal Loop),以最纯粹的方式利用工具完成特定的子任务。

  • 重规划:动态闭环的关键,每完成一个子任务,系统会带着执行结果(Observation)进入重规划环节。此时,Agent 会面临一个关键判定:

    • 需要继续:如果当前结果是中间产物,则修改计划清单,进入下一环。

    • 不需要继续:如果目标已达成,则通知用户任务完成。

5.2 为什么在复杂场景中这种模式更具优势?

  • 减少“推理漂移”:在 ReAct 模式下,模型容易因为每一步都要思考而逐渐忘记“初心”。Plan-and-Execute 通过一份全局可见的任务清单,锚定了长期目标。

  • 上下文解耦:Executor 在执行第 5 个任务时,不需要关注第 1 个任务的详细推理过程,只需要关注第 4 个任务的输出。这极大节省了上下文空间,减少了因信息过载导致的幻觉。

  • 高效重试:当任务执行失败时,系统只需要定位到清单中的特定索引进行重试或局部修正,而不需要从头开始整个推理链条。

5.3 小结

总的来说,Plan-and-Execute 模式并非排斥“边走边看”,而是通过架构上的解耦,为 Agent 注入了“工程师思维”:先出方案、逐项落实、节点复盘。

这一模式的精髓在于引入了重规划(RePlan)回路。正如流程图所示,它并不是在执行死板的脚本,而是在每一个关键步骤后都进行一次“判定是否继续”的元认知检查。这种机制有效地对抗了 LLM 的“瞬时记忆遗忘”,让 Agent 在面对需要跨越数十个步骤的自动化工程任务时,依然能保持航向的精准。

6. 范式选择:如何为你的 Agent 配置“小脑”?

在理解了 ReAct 与 Plan-and-Execute 后,开发者面临的核心挑战是如何在实际业务中进行选型。下表从工程实践角度对两者进行了对比总结:

维度ReActPlan-and-Execute
规划时机执行过程中实时推理执行前进行全局拆解
错误处理依赖下一轮 Thought 修正依赖 RePlan 机制重修清单
适用广度开放域交互、工具调用少垂直域工程、长链路、强依赖
系统熵值较高(状态随交互实时变化)较低(状态锚定在任务清单)

7. 结语:规划是 Agent 迈向“确定性”的定盘星

至此,我们深度拆解了 Agent 规划模块的两大支柱:任务分解与自我反思。规划模块赋予了 Agent “逻辑”,但这仅仅是构建“数字员工”的第一步。一个能在复杂业务中持久生存的智能体,除了要懂得“如何思考”,还需要解决“我是谁、我做过什么、我从哪获取知识”的问题。在构建 Agent 时,并没有绝对的优劣之分。成熟的系统往往采用混合模式:在大目标上使用 Plan-and-Execute 保证方向不偏,在具体的子任务执行中开启 ReAct

本篇文章到此结束,建议结合前文 《AI Agent 深度全景综述》 一起阅读,构建更完整的认知闭环。

',48)])])}const A=e(r,[["render",i]]);export{h as __pageData,A as default}; diff --git a/assets/ai_agent_planning-module.md.CDlvBNcn.lean.js b/assets/ai_agent_planning-module.md.CTDZNcds.lean.js similarity index 96% rename from assets/ai_agent_planning-module.md.CDlvBNcn.lean.js rename to assets/ai_agent_planning-module.md.CTDZNcds.lean.js index 81afd4c..0aeb629 100644 --- a/assets/ai_agent_planning-module.md.CDlvBNcn.lean.js +++ b/assets/ai_agent_planning-module.md.CTDZNcds.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l("",48)])])}const A=e(r,[["render",i]]);export{h as __pageData,A as default}; +import{_ as e,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l("",48)])])}const A=e(r,[["render",i]]);export{h as __pageData,A as default}; diff --git a/assets/ai_agent_poetry-bot.md.BJeZitt5.js b/assets/ai_agent_poetry-bot.md.Djc9_lGV.js similarity index 99% rename from assets/ai_agent_poetry-bot.md.BJeZitt5.js rename to assets/ai_agent_poetry-bot.md.Djc9_lGV.js index 77f2521..0fec619 100644 --- a/assets/ai_agent_poetry-bot.md.BJeZitt5.js +++ b/assets/ai_agent_poetry-bot.md.Djc9_lGV.js @@ -1,4 +1,4 @@ -import{_ as n,c as i,o as a,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l(`

零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战

摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。

1. 实践背景

周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键

正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。

2. 平台与 Agent 基本人设

2.1 平台选择

基于零代码平台搭建的需求,可选 Coze、Dify 和文心智能体等平台,但考虑到体验自家近期更新的能力,本次实践选择在文心智能体平台上进行。

2.2 角色设定与物料生成

在 AI 时代,创建一个 Agent 的“门面”自然也要用 AI 来完成。

  1. Icon 生成: 平台自带的图片生成能力表现不错,生成的 Icon 符合预期。
  2. 名称与描述: 平台自带的文本生成结果较为生硬,缺乏“人味”。因此,我转而使用更高阶的模型(ChatGPT),经过两轮对话对齐了调性,最终确定了满意的设定:
    • 智能体名称: 诗歌小精灵
    • 描述: 一个擅长创作诗歌、俏皮又灵动的小精灵

3. 工作模式与工具集配置

3.1 工具/插件配置

好的诗歌创作需要能综合考虑多个因素,因此可使用联网搜索能力、诗词搜索能力等工具,来获取相关的背景信息、创作灵感等:

  • ✅ 联网搜索能力:用于获取相关背景信息。
  • ✅ 诗词搜索能力:用于检索古诗词典故与创作灵感。

3.2 工作模式设定

为确保 Agent 在创作过程中既能调用工具,又能进行深度思考与逻辑组织,我排除了单一的“快速对话”或纯“工具调用”,最终选择了 工具调用 + 推理(深度思考) 的综合模式。

  • ✅ 工具调用 + 推理
  • ❌ 快速对话
  • ❌ 深度思考
  • ❌ 工具调用

3. Prompt 演进:从常规 Prompt 到结构化 Prompt

> 提示词演进:从“一段有逻辑的话”到“一套逻辑”。本次实践中最核心的目标:通过对比试验,分析结构化 Prompt 到底比普通 Prompt 好在哪里。

System Prompt 的质量直接决定了 Agent 的输出下限与上限。本次实践的核心,就是对比传统 Prompt 框架与结构化 Prompt 的实际表现。

3.1 阶段一:非结构化 System Prompt(基线测试)

思路: 围绕市面上常用的 Prompt 框架与模板,编写了一个较为规范的 Prompt。但这仅仅是一个“长文本”指令,在后续的扩展和微调上缺乏灵活性。

markdown
# 角色规范
+import{_ as n,c as i,o as a,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l(`

零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战

摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。

1. 实践背景

周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键

正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。

2. 平台与 Agent 基本人设

2.1 平台选择

基于零代码平台搭建的需求,可选 Coze、Dify 和文心智能体等平台,但考虑到体验自家近期更新的能力,本次实践选择在文心智能体平台上进行。

2.2 角色设定与物料生成

在 AI 时代,创建一个 Agent 的“门面”自然也要用 AI 来完成。

  1. Icon 生成: 平台自带的图片生成能力表现不错,生成的 Icon 符合预期。
  2. 名称与描述: 平台自带的文本生成结果较为生硬,缺乏“人味”。因此,我转而使用更高阶的模型(ChatGPT),经过两轮对话对齐了调性,最终确定了满意的设定:
    • 智能体名称: 诗歌小精灵
    • 描述: 一个擅长创作诗歌、俏皮又灵动的小精灵

3. 工作模式与工具集配置

3.1 工具/插件配置

好的诗歌创作需要能综合考虑多个因素,因此可使用联网搜索能力、诗词搜索能力等工具,来获取相关的背景信息、创作灵感等:

  • ✅ 联网搜索能力:用于获取相关背景信息。
  • ✅ 诗词搜索能力:用于检索古诗词典故与创作灵感。

3.2 工作模式设定

为确保 Agent 在创作过程中既能调用工具,又能进行深度思考与逻辑组织,我排除了单一的“快速对话”或纯“工具调用”,最终选择了 工具调用 + 推理(深度思考) 的综合模式。

  • ✅ 工具调用 + 推理
  • ❌ 快速对话
  • ❌ 深度思考
  • ❌ 工具调用

3. Prompt 演进:从常规 Prompt 到结构化 Prompt

> 提示词演进:从“一段有逻辑的话”到“一套逻辑”。本次实践中最核心的目标:通过对比试验,分析结构化 Prompt 到底比普通 Prompt 好在哪里。

System Prompt 的质量直接决定了 Agent 的输出下限与上限。本次实践的核心,就是对比传统 Prompt 框架与结构化 Prompt 的实际表现。

3.1 阶段一:非结构化 System Prompt(基线测试)

思路: 围绕市面上常用的 Prompt 框架与模板,编写了一个较为规范的 Prompt。但这仅仅是一个“长文本”指令,在后续的扩展和微调上缺乏灵活性。

markdown
# 角色规范
 你是一位专业的诗人,擅长创作现代诗、七言律诗和五言诗。你的任务是帮助用户通过诗歌表达情感、描绘景象或讲述故事。当用户提供诗歌形式和主题后,你将创作相应的诗歌,并附上解读、创作思路和灵感说明,最后通过精灵寄语激发用户的诗歌创作热情。
 
 # 思考规范
diff --git a/assets/ai_agent_poetry-bot.md.BJeZitt5.lean.js b/assets/ai_agent_poetry-bot.md.Djc9_lGV.lean.js
similarity index 96%
rename from assets/ai_agent_poetry-bot.md.BJeZitt5.lean.js
rename to assets/ai_agent_poetry-bot.md.Djc9_lGV.lean.js
index b325eb5..245816e 100644
--- a/assets/ai_agent_poetry-bot.md.BJeZitt5.lean.js
+++ b/assets/ai_agent_poetry-bot.md.Djc9_lGV.lean.js
@@ -1 +1 @@
-import{_ as n,c as i,o as a,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l("",44)])])}const b=n(p,[["render",e]]);export{d as __pageData,b as default};
+import{_ as n,c as i,o as a,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l("",44)])])}const b=n(p,[["render",e]]);export{d as __pageData,b as default};
diff --git a/assets/ai_agent_skills-practice-summary.md.CYdSmJnx.js b/assets/ai_agent_skills-practice-summary.md.CsJjSRg1.js
similarity index 99%
rename from assets/ai_agent_skills-practice-summary.md.CYdSmJnx.js
rename to assets/ai_agent_skills-practice-summary.md.CsJjSRg1.js
index a1995b2..f8147cd 100644
--- a/assets/ai_agent_skills-practice-summary.md.CYdSmJnx.js
+++ b/assets/ai_agent_skills-practice-summary.md.CsJjSRg1.js
@@ -1,4 +1,4 @@
-import{T as a}from"./chunks/TwoColumnImage.CvkELYbv.js";import{c as i,o as l,d as n,b as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},c=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n(`

如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南

摘要总结:大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。

1. 引言:Agent Skills 是什么?

在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。

为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力最直接、最硬核的落地载体,便是其配套的命令行工具 Claude Code)。

我们可以从两个维度来理解 Agent Skills 是什么:

维度说明
工程架构维度Agent Skills 是一种模块化的能力组件,用于更优雅地扩展 AI 智能体(Agent)的功能,让 Agent 能够在更复杂的场景下执行更专业的任务。
实现维度它是一个包含完整指令说明、配套脚本和资源文件的能力文件夹,集成了完备的指令说明(Prompts)、配套脚本(Scripts)及相关资源文件,其核心精髓在于:渐进式披露、动态发现与按需执行,从而在扩展能力的同时,严格控制上下文窗口的 Token 消耗和认知过载。

构建 Agentic 生态:零散组件化为可持续的工作流 一文中,我们确立了一些 “可持续工作流” 的共识。接下来,我们将通过细节解析与工程实践,揭开 Agent Skills 的面纱。

2. 文件夹结构拆解:标准化的操作手册

从本质上来讲,Agent Skills 是提供给 AI 的“操作手册 + 资源包”,其标准化的目录树如下:

严格的工程规范:

  • 主文件必须命名为 SKILL.md(区分大小写,不能有其他变体)。
  • 文件夹名称必须使用 kebab-case(如 my-skill-name,不能写成 My Skill Name)。
skill-name/ 
+import{T as a}from"./chunks/TwoColumnImage.BkZ7ar0-.js";import{c as i,o as l,d as n,b as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},c=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n(`

如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南

摘要总结:大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。

1. 引言:Agent Skills 是什么?

在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。

为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力最直接、最硬核的落地载体,便是其配套的命令行工具 Claude Code)。

我们可以从两个维度来理解 Agent Skills 是什么:

维度说明
工程架构维度Agent Skills 是一种模块化的能力组件,用于更优雅地扩展 AI 智能体(Agent)的功能,让 Agent 能够在更复杂的场景下执行更专业的任务。
实现维度它是一个包含完整指令说明、配套脚本和资源文件的能力文件夹,集成了完备的指令说明(Prompts)、配套脚本(Scripts)及相关资源文件,其核心精髓在于:渐进式披露、动态发现与按需执行,从而在扩展能力的同时,严格控制上下文窗口的 Token 消耗和认知过载。

构建 Agentic 生态:零散组件化为可持续的工作流 一文中,我们确立了一些 “可持续工作流” 的共识。接下来,我们将通过细节解析与工程实践,揭开 Agent Skills 的面纱。

2. 文件夹结构拆解:标准化的操作手册

从本质上来讲,Agent Skills 是提供给 AI 的“操作手册 + 资源包”,其标准化的目录树如下:

严格的工程规范:

  • 主文件必须命名为 SKILL.md(区分大小写,不能有其他变体)。
  • 文件夹名称必须使用 kebab-case(如 my-skill-name,不能写成 My Skill Name)。
skill-name/ 
 ├── SKILL.md ← 主文件(必需):SKILL描述、逻辑编排、核心指令,是技能核心内容。 
 ├── scripts/ ← 脚本(可选):Python、Bash 等脚本, 是可执行代码。 
 ├── references/ ← 参考资源(可选):规则、规范、参考指南、示例等。 
diff --git a/assets/ai_agent_skills-practice-summary.md.CYdSmJnx.lean.js b/assets/ai_agent_skills-practice-summary.md.CsJjSRg1.lean.js
similarity index 90%
rename from assets/ai_agent_skills-practice-summary.md.CYdSmJnx.lean.js
rename to assets/ai_agent_skills-practice-summary.md.CsJjSRg1.lean.js
index 00f909a..ac029ca 100644
--- a/assets/ai_agent_skills-practice-summary.md.CYdSmJnx.lean.js
+++ b/assets/ai_agent_skills-practice-summary.md.CsJjSRg1.lean.js
@@ -1 +1 @@
-import{T as a}from"./chunks/TwoColumnImage.CvkELYbv.js";import{c as i,o as l,d as n,b as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},c=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n("",15)),e(a,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_skill_md.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_use_skill_md.png",leftCaption:"图 1:来自 Anthropic 官方文档",rightCaption:"图 2:核心工作机制示意"}),s[1]||(s[1]=n("",46))]))}});export{d as __pageData,c as default};
+import{T as a}from"./chunks/TwoColumnImage.BkZ7ar0-.js";import{c as i,o as l,d as n,b as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},c=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n("",15)),e(a,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_skill_md.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_use_skill_md.png",leftCaption:"图 1:来自 Anthropic 官方文档",rightCaption:"图 2:核心工作机制示意"}),s[1]||(s[1]=n("",46))]))}});export{d as __pageData,c as default};
diff --git a/assets/ai_full-stack-builder.md.BGzdsC-3.js b/assets/ai_full-stack-builder.md.CtpFpp0a.js
similarity index 99%
rename from assets/ai_full-stack-builder.md.BGzdsC-3.js
rename to assets/ai_full-stack-builder.md.CtpFpp0a.js
index a11a2bd..bce9e92 100644
--- a/assets/ai_full-stack-builder.md.BGzdsC-3.js
+++ b/assets/ai_full-stack-builder.md.CtpFpp0a.js
@@ -1 +1 @@
-import{H as e}from"./chunks/HighLightText.pXHFEzDb.js";import{F as o}from"./chunks/FeatureGrid.C9SUnqP9.js";import{c as m,o as d,a as t,b as s,d as i,e as l,w as r}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const v=JSON.parse('{"title":"做好 AI 时代的 Full Stack Builder","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","frontmatter":{"date":"2026-04-27T18:00:00.000Z","title":"做好 AI 时代的 Full Stack Builder","tldr":"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","sticky":1,"top":true,"tags":["全栈","AI","能力模型","职业成长"],"categories":["AI 学习与实践","社区活动与实践小项目"],"permalink":"/ai/full-stack-builder"},"headers":[],"relativePath":"ai/full-stack-builder.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md"}'),c={name:"ai/full-stack-builder.md"},x=Object.assign(c,{setup(p){const n=[{icon:"🌊",title:"WHY NOW — 结构性缺口",description:'市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对"轻量、快速、个性化"场景化应用的爆发式需求。'},{icon:"✨",title:"WHY AI — 能力范式跃迁",description:'AI 带来的绝不仅是"替代人工"的降本增效,而是实现能力的平权。它让一个人可以在需求发现、原型验证、代码实现甚至分发之间自由穿梭,创造出过去需要一个完整小队才能交付的体验。'},{icon:"👁️",title:'WHY YOU — 回归"人"的壁垒',description:'当技术栈不再是黑盒,真正的护城河反而回退到了最"人"的属性:你对某个细分场景的深刻洞察、你对优质产品的"品味"、以及那些无法被大模型参数化的产品直觉。'}];return(u,a)=>(d(),m("div",null,[a[4]||(a[4]=t("h1",{id:"做好-ai-时代的-full-stack-builder",tabindex:"-1"},[l("做好 AI 时代的 Full Stack Builder "),t("a",{class:"header-anchor",href:"#做好-ai-时代的-full-stack-builder","aria-label":"Permalink to “做好 AI 时代的 Full Stack Builder”"},"​")],-1)),a[5]||(a[5]=t("blockquote",null,[t("p",null,[t("strong",null,"摘要总结"),l(": 传统产品开发高度依赖科层制分工,但协同成本高、信息衰减严重。AI 技术的突破正在松动这套分工体系,使个体获得实现能力的平权。本文从 WHY NOW、WHY AI、WHY YOU 三个维度出发,解构 Full Stack Builder 的核心能力模型,将能力拆解为判断力(Taste)、实现力(Build)与杠杆力(Leverage)三个乘数因子,任何一环为零则总产出归零。在此基础上,梳理了从工具化(L1)到能做产品(L2)再到创造者(L3)的三级演进路径,并结合复利效应与成长阶段,分析了重复性信息处理、工具协作断层、决策缺乏即时依据三类高价值切入场景。最终提出:AI 时代的真正分野在于个体是将自己视为被挤压生存空间的执行者,还是以价值交付为导向、运用 AI 作为系统级杠杆的 Builder。")])],-1)),a[6]||(a[6]=t("h2",{id:"_1-引言-全能的幻觉与稀缺的转移",tabindex:"-1"},[l("1. 引言:全能的幻觉与稀缺的转移 "),t("a",{class:"header-anchor",href:"#_1-引言-全能的幻觉与稀缺的转移","aria-label":"Permalink to “1. 引言:全能的幻觉与稀缺的转移”"},"​")],-1)),a[7]||(a[7]=t("p",null,'两天前,笔者在杭州良渚参加了一场 PM x AI 产品力大会。当嘉宾抛出"Full Stack Builder"这个概念时,我首先感到的是一种熟悉的兴奋——它像是对个体能力边界的一次浪漫想象:一个人就能打通创意、技术、产品、增长的全链路。',-1)),t("p",null,[a[1]||(a[1]=l("但在随后整理笔记、反复咀嚼那些关键词时,另一种辩证的思考逐渐浮现:",-1)),s(e,{bold:""},{default:r(()=>[...a[0]||(a[0]=[l('我们真的需要每个人都成为全知全能的"超级开发者"吗?或者说,当 AI 让"实现"的代码门槛急剧降低之后,什么才算得上是真正的稀缺?',-1)])]),_:1})]),a[8]||(a[8]=t("p",null,'传统模式下,产品的诞生高度依赖科层制的分工:产品经理定义需求,设计师绘制界面,工程师负责架构与代码,运营推向市场。这套流程在过去几十年被证明是高效的,它让专业的人做专业的事。但代价也显而易见:想法在传递中不可避免地衰减,决策在跨部门协同中迟滞,而创造者也在精密的分工缝隙中,丧失了对产品全貌的掌控感与"手感"。',-1)),a[9]||(a[9]=t("p",null,'今天,我们重新讨论"Full Stack Builder",并非为了盲目追捧个人英雄主义,而是因为技术底座的剧变,正在从根本上松动这套分工体系的根基:',-1)),s(o,{items:n,columns:3}),a[10]||(a[10]=i('

2. 解构 Full Stack:不是简单加法,而是乘数效应

我们需要清醒地认识到:真正的 Full Stack Builder,并不是要求一个人在设计、前后端、算法和营销上都达到专家的标准。 如果试图用肉身去对抗各领域的专业深度,最终只会陷入平庸。

现实是,每个人都有自己的原生优势象限。真正的全栈,是能够敏锐识别自己的长板,并借助 AI 和自动化工具链去无缝填补短板。这里的核心,是建立判断力(Taste)构建力(Build)杠杆力(Leverage)的乘数模型。

',3)),a[11]||(a[11]=t("p",null,[t("span",{class:"katex-display"},[t("span",{class:"katex"},[t("span",{class:"katex-mathml"},[t("math",null,[t("semantics",null,[t("mrow",null,[t("mtext",null,[t("mi",{mathvariant:"normal"},"F"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"S"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"c"),t("mi",{mathvariant:"normal"},"k")]),t("mo",null,"="),t("mtext",null,[t("mi",{mathvariant:"normal"},"T"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"s"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"e")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"B"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"i"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"d")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"L"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"v"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"r"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"g"),t("mi",{mathvariant:"normal"},"e")])]),t("annotation",{encoding:"application/x-tex"},"\\text{FullStack} = \\text{Taste} \\times \\text{Build} \\times \\text{Leverage} ")])])]),t("span",{class:"katex-html","aria-hidden":"true"},[t("span",{class:"strut",style:{height:"0.69444em"}}),t("span",{class:"strut bottom",style:{height:"0.8888799999999999em","vertical-align":"-0.19444em"}}),t("span",{class:"base displaystyle textstyle uncramped"},[t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"F"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"S"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"c"),t("span",{class:"mord mathrm"},"k")]),t("span",{class:"mrel"},"="),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"T"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"s"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"e")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"B"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"i"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"d")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"L"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"v"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm"},"r"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"g"),t("span",{class:"mord mathrm"},"e")])])])])])],-1)),a[12]||(a[12]=i('

任何一个环节为零,总产出就是零。

Full Stack Builder 能力拆解图 ▲ Full Stack Builder 能力拆解图

2.1 核心能力矩阵与 3 个 Level

Full Stack Builder 不是"一开始就要做系统、做创造",而是可以沿着层级逐步演进。多数人可以从 L1 开始,用现成的 AI 工具完成一个小闭环,再慢慢向 L2、L3 进阶。

Full Stack Builder 能力层级图 ▲ Full Stack Builder 三级能力矩阵

如上图所示,Full Stack Builder 的能力演进可归纳为三个递进的层级:

  • 工具化阶段(L1),核心在于建立基础的产品审美与单点工具使用能力,借助 AI 完成日常辅助;
  • 进入能做产品阶段(L2),关键在于准确定义问题并剥离噪音,能够独立开发完整产品,并设计串联工作流;
  • 而到达创造者阶段(L3),则需要具备洞察趋势的前瞻视野,构建可复用的底层系统,并运用技术与分发实现价值的 10 倍放大。

L1 工具化阶段

关键词: 基础产品审美、单点工具使用、AI 日常辅助

L2 能做产品阶段

关键词: 准确定义问题、独立开发完整产品、设计串联工作流

L3 创造者阶段

关键词: 洞察趋势前瞻、构建可复用底层系统、10 倍价值放大

这三个层级并非割裂,而是判断力、构建力与杠杆力在不同成熟度下的综合体现。

2.2 判断力(Taste):最难被 AI 替代的元能力

核心定义

判断力不只是"好看",而是知道什么是对的,准确的信噪比分离能力。它无法被 AI 替代,也是最值钱的部分。

当 AI 能帮你生成 10 个方案时,你需要有能力判断哪一个真正有效:

  • 信息层级是否清晰?
  • 这个流程是否多余?
  • 用户在哪里会困惑?
  • 什么是核心,什么是噪音?

判断力的本质,是你在一个领域里积累的隐性知识。它无法被 AI 替代,也是最值钱的部分。

2.3 实现力(Build):从"敲代码"到"系统编排"

核心定义

实现力不再是"懂一点代码",而是能够独立完成从想法到上线的闭环——问题到验证,一天内完成。

传统模式下,一个想法到可用产品可能需要数周甚至数月;而在 AI 时代,借助 Vibe Coding、Low-Code 和各类生成式工具,实现力被重新定义为:问题 → 验证,一天内完成

这并不意味着你必须成为资深工程师,而是要具备"把想法变成可交互原型、再变成可运行产品"的最小闭环能力。

2.4 杠杆力(Leverage):寻找你的 10x 乘数

核心定义

AI 是杠杆,不是替代品。真正的杠杆能力取决于 你的优势 × 你的执行瓶颈 × AI 当前边界 的交集。

不是通用公式

杠杆能力没有一刀切的答案。对别人有效的 AI 工作流,到你手里可能水土不服——关键是找到你自己的交叉点。

你可以用三个问题来定位自己的杠杆:

你的判断力在哪里最强?

用户洞察 / 业务逻辑 / 数据解读 / 产品决策……这是你不能交给 AI 的部分,也是最值得放大的起点。

哪些执行环节最消耗你的时间?

文档整理 / UI 搭建 / 代码实现 / 数据清洗……这些正是 AI 可以接管的环节,用来释放你的带宽。

你现在在用 AI 做什么?

只是对话搜索,还是真正嵌入工作流?用 AI "写作业"只能得到及格线,将 AI 嵌入决策框架和自动化 Pipeline,才能创造增量。

3. Full Stack Builder 的复利效应

AI 时代的 Full-Stack Builder 会经历一条清晰的复利曲线。

Full Stack Builder 复利曲线 ▲ Full Stack Builder 复利曲线

核心洞察

每个项目都在同时训练你的判断力、提升你的实现速度、扩展你的工具栈——这就是复利效应的来源。

最终,你将积累起一个强大的"经验储备器"——它包含精准的判断力、指数级的交付速度,以及持续进化的前沿工具栈。

4. 进阶路径:Full Stack Builder 的成长路径

能力并非一蹴而就,每个 Builder 都会经历从旁观到创造的演进。这不仅是技能的堆砌,更是"经验池"的深度积累。在这个过程中,你的判断力愈发精准,交付速度呈指数级上升,工具栈也从单一走向前沿。

Full Stack Builder 成长路径 ▲ Full Stack Builder 成长路径

每一个阶段并不需要"完全达标"才能进入下一阶段,它们可以交叉进行。

常见误区

跳过 Stage 1 和 Stage 2,直接想成为 Creator——这会因为缺乏判断力和手感而很难走远。

随着时间的推移与项目经验的累积,Builder 的能力增长并非线性,而是在 Stage 3 之后,依托 AI 工作流的成型,展现出陡峭的指数级复利效应。

5. AI 时代的机会在哪里?

如果你正处于不知道"做什么"的迷茫期,不妨跳出宏大叙事,回归日常的高痛点场景寻找切入点。以下三类问题场景,是目前 Full Stack Builder 最容易切入的高价值区域:

切入场景典型痛点描述发生频率用户情绪当前效率
重复性信息处理每天耗费大量时间在多源信息的收集、清洗、打标签与总结转发上。高频高度烦躁极低
工具协作断层数据散落在多个平台(如文档、代码库、通讯软件),API 衔接缺乏,手动同步成本高。高频中度无奈
决策缺乏即时依据关键会议或拍板时缺乏动态数据支撑,等待人工分析报告往往错失战机。中频高度焦虑

这些场景的共同特点是:高频、情绪消耗大、现有工具没有很好解决。而 AI 恰好擅长处理信息流转、跨平台整合、快速生成摘要或建议。

切入公式

高频 + 情绪消耗大 + 现有工具未解决 = AI 最佳切入点。 如果你能在其中任何一个场景里,用最小的产品闭环解决具体人群的痛点,就已经走在了正确的方向上。

行动建议

不需要一开始就想做"平台级产品"。从一个小场景的一个小闭环开始——哪怕只是一个自动化脚本、一个浏览器插件、一个聊天机器人——用 AI 把它跑通,然后迭代。

6. 结语

在 AI 时代,讨论"要不要成为全栈"本身就是一个伪命题。因为工具的进化,已经不可逆地将每个人推向了全栈的起跑线。

成为 AI 时代的 Full Stack Builder,不是要你成为一个无所不能的孤胆英雄,而是希望你用更低的成本、更快的节奏,把判断力、实现力、杠杆能力组合成一个属于自己的飞轮。

',47)),t("p",null,[a[3]||(a[3]=l("真正的分野在于:",-1)),s(e,{type:"info",bold:""},{default:r(()=>[...a[2]||(a[2]=[l('你是将自己视为被 AI 挤压生存空间的"切图仔/写特定语言的码农",还是以最终价值交付为导向、运用 AI 作为系统级杠杆的 Builder。',-1)])]),_:1})]),a[13]||(a[13]=t("div",{class:"tip custom-block"},[t("p",{class:"custom-block-title"},"开始行动"),t("p",null,"你不需要一次性学会所有东西,只需要从一个小问题开始,用 AI 把它跑通,然后在这个过程中,积累下一次能做得更好的判断力。")],-1))]))}});export{v as __pageData,x as default}; +import{H as e}from"./chunks/HighLightText.DNC3BKyb.js";import{F as o}from"./chunks/FeatureGrid.LE2S2SBN.js";import{c as m,o as d,a as t,b as s,d as i,e as l,w as r}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const v=JSON.parse('{"title":"做好 AI 时代的 Full Stack Builder","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","frontmatter":{"date":"2026-04-27T18:00:00.000Z","title":"做好 AI 时代的 Full Stack Builder","tldr":"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","sticky":1,"top":true,"tags":["全栈","AI","能力模型","职业成长"],"categories":["AI 学习与实践","社区活动与实践小项目"],"permalink":"/ai/full-stack-builder"},"headers":[],"relativePath":"ai/full-stack-builder.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md"}'),c={name:"ai/full-stack-builder.md"},x=Object.assign(c,{setup(p){const n=[{icon:"🌊",title:"WHY NOW — 结构性缺口",description:'市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对"轻量、快速、个性化"场景化应用的爆发式需求。'},{icon:"✨",title:"WHY AI — 能力范式跃迁",description:'AI 带来的绝不仅是"替代人工"的降本增效,而是实现能力的平权。它让一个人可以在需求发现、原型验证、代码实现甚至分发之间自由穿梭,创造出过去需要一个完整小队才能交付的体验。'},{icon:"👁️",title:'WHY YOU — 回归"人"的壁垒',description:'当技术栈不再是黑盒,真正的护城河反而回退到了最"人"的属性:你对某个细分场景的深刻洞察、你对优质产品的"品味"、以及那些无法被大模型参数化的产品直觉。'}];return(u,a)=>(d(),m("div",null,[a[4]||(a[4]=t("h1",{id:"做好-ai-时代的-full-stack-builder",tabindex:"-1"},[l("做好 AI 时代的 Full Stack Builder "),t("a",{class:"header-anchor",href:"#做好-ai-时代的-full-stack-builder","aria-label":"Permalink to “做好 AI 时代的 Full Stack Builder”"},"​")],-1)),a[5]||(a[5]=t("blockquote",null,[t("p",null,[t("strong",null,"摘要总结"),l(": 传统产品开发高度依赖科层制分工,但协同成本高、信息衰减严重。AI 技术的突破正在松动这套分工体系,使个体获得实现能力的平权。本文从 WHY NOW、WHY AI、WHY YOU 三个维度出发,解构 Full Stack Builder 的核心能力模型,将能力拆解为判断力(Taste)、实现力(Build)与杠杆力(Leverage)三个乘数因子,任何一环为零则总产出归零。在此基础上,梳理了从工具化(L1)到能做产品(L2)再到创造者(L3)的三级演进路径,并结合复利效应与成长阶段,分析了重复性信息处理、工具协作断层、决策缺乏即时依据三类高价值切入场景。最终提出:AI 时代的真正分野在于个体是将自己视为被挤压生存空间的执行者,还是以价值交付为导向、运用 AI 作为系统级杠杆的 Builder。")])],-1)),a[6]||(a[6]=t("h2",{id:"_1-引言-全能的幻觉与稀缺的转移",tabindex:"-1"},[l("1. 引言:全能的幻觉与稀缺的转移 "),t("a",{class:"header-anchor",href:"#_1-引言-全能的幻觉与稀缺的转移","aria-label":"Permalink to “1. 引言:全能的幻觉与稀缺的转移”"},"​")],-1)),a[7]||(a[7]=t("p",null,'两天前,笔者在杭州良渚参加了一场 PM x AI 产品力大会。当嘉宾抛出"Full Stack Builder"这个概念时,我首先感到的是一种熟悉的兴奋——它像是对个体能力边界的一次浪漫想象:一个人就能打通创意、技术、产品、增长的全链路。',-1)),t("p",null,[a[1]||(a[1]=l("但在随后整理笔记、反复咀嚼那些关键词时,另一种辩证的思考逐渐浮现:",-1)),s(e,{bold:""},{default:r(()=>[...a[0]||(a[0]=[l('我们真的需要每个人都成为全知全能的"超级开发者"吗?或者说,当 AI 让"实现"的代码门槛急剧降低之后,什么才算得上是真正的稀缺?',-1)])]),_:1})]),a[8]||(a[8]=t("p",null,'传统模式下,产品的诞生高度依赖科层制的分工:产品经理定义需求,设计师绘制界面,工程师负责架构与代码,运营推向市场。这套流程在过去几十年被证明是高效的,它让专业的人做专业的事。但代价也显而易见:想法在传递中不可避免地衰减,决策在跨部门协同中迟滞,而创造者也在精密的分工缝隙中,丧失了对产品全貌的掌控感与"手感"。',-1)),a[9]||(a[9]=t("p",null,'今天,我们重新讨论"Full Stack Builder",并非为了盲目追捧个人英雄主义,而是因为技术底座的剧变,正在从根本上松动这套分工体系的根基:',-1)),s(o,{items:n,columns:3}),a[10]||(a[10]=i('

2. 解构 Full Stack:不是简单加法,而是乘数效应

我们需要清醒地认识到:真正的 Full Stack Builder,并不是要求一个人在设计、前后端、算法和营销上都达到专家的标准。 如果试图用肉身去对抗各领域的专业深度,最终只会陷入平庸。

现实是,每个人都有自己的原生优势象限。真正的全栈,是能够敏锐识别自己的长板,并借助 AI 和自动化工具链去无缝填补短板。这里的核心,是建立判断力(Taste)构建力(Build)杠杆力(Leverage)的乘数模型。

',3)),a[11]||(a[11]=t("p",null,[t("span",{class:"katex-display"},[t("span",{class:"katex"},[t("span",{class:"katex-mathml"},[t("math",null,[t("semantics",null,[t("mrow",null,[t("mtext",null,[t("mi",{mathvariant:"normal"},"F"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"S"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"c"),t("mi",{mathvariant:"normal"},"k")]),t("mo",null,"="),t("mtext",null,[t("mi",{mathvariant:"normal"},"T"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"s"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"e")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"B"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"i"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"d")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"L"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"v"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"r"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"g"),t("mi",{mathvariant:"normal"},"e")])]),t("annotation",{encoding:"application/x-tex"},"\\text{FullStack} = \\text{Taste} \\times \\text{Build} \\times \\text{Leverage} ")])])]),t("span",{class:"katex-html","aria-hidden":"true"},[t("span",{class:"strut",style:{height:"0.69444em"}}),t("span",{class:"strut bottom",style:{height:"0.8888799999999999em","vertical-align":"-0.19444em"}}),t("span",{class:"base displaystyle textstyle uncramped"},[t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"F"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"S"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"c"),t("span",{class:"mord mathrm"},"k")]),t("span",{class:"mrel"},"="),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"T"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"s"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"e")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"B"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"i"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"d")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"L"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"v"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm"},"r"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"g"),t("span",{class:"mord mathrm"},"e")])])])])])],-1)),a[12]||(a[12]=i('

任何一个环节为零,总产出就是零。

Full Stack Builder 能力拆解图 ▲ Full Stack Builder 能力拆解图

2.1 核心能力矩阵与 3 个 Level

Full Stack Builder 不是"一开始就要做系统、做创造",而是可以沿着层级逐步演进。多数人可以从 L1 开始,用现成的 AI 工具完成一个小闭环,再慢慢向 L2、L3 进阶。

Full Stack Builder 能力层级图 ▲ Full Stack Builder 三级能力矩阵

如上图所示,Full Stack Builder 的能力演进可归纳为三个递进的层级:

  • 工具化阶段(L1),核心在于建立基础的产品审美与单点工具使用能力,借助 AI 完成日常辅助;
  • 进入能做产品阶段(L2),关键在于准确定义问题并剥离噪音,能够独立开发完整产品,并设计串联工作流;
  • 而到达创造者阶段(L3),则需要具备洞察趋势的前瞻视野,构建可复用的底层系统,并运用技术与分发实现价值的 10 倍放大。

L1 工具化阶段

关键词: 基础产品审美、单点工具使用、AI 日常辅助

L2 能做产品阶段

关键词: 准确定义问题、独立开发完整产品、设计串联工作流

L3 创造者阶段

关键词: 洞察趋势前瞻、构建可复用底层系统、10 倍价值放大

这三个层级并非割裂,而是判断力、构建力与杠杆力在不同成熟度下的综合体现。

2.2 判断力(Taste):最难被 AI 替代的元能力

核心定义

判断力不只是"好看",而是知道什么是对的,准确的信噪比分离能力。它无法被 AI 替代,也是最值钱的部分。

当 AI 能帮你生成 10 个方案时,你需要有能力判断哪一个真正有效:

  • 信息层级是否清晰?
  • 这个流程是否多余?
  • 用户在哪里会困惑?
  • 什么是核心,什么是噪音?

判断力的本质,是你在一个领域里积累的隐性知识。它无法被 AI 替代,也是最值钱的部分。

2.3 实现力(Build):从"敲代码"到"系统编排"

核心定义

实现力不再是"懂一点代码",而是能够独立完成从想法到上线的闭环——问题到验证,一天内完成。

传统模式下,一个想法到可用产品可能需要数周甚至数月;而在 AI 时代,借助 Vibe Coding、Low-Code 和各类生成式工具,实现力被重新定义为:问题 → 验证,一天内完成

这并不意味着你必须成为资深工程师,而是要具备"把想法变成可交互原型、再变成可运行产品"的最小闭环能力。

2.4 杠杆力(Leverage):寻找你的 10x 乘数

核心定义

AI 是杠杆,不是替代品。真正的杠杆能力取决于 你的优势 × 你的执行瓶颈 × AI 当前边界 的交集。

不是通用公式

杠杆能力没有一刀切的答案。对别人有效的 AI 工作流,到你手里可能水土不服——关键是找到你自己的交叉点。

你可以用三个问题来定位自己的杠杆:

你的判断力在哪里最强?

用户洞察 / 业务逻辑 / 数据解读 / 产品决策……这是你不能交给 AI 的部分,也是最值得放大的起点。

哪些执行环节最消耗你的时间?

文档整理 / UI 搭建 / 代码实现 / 数据清洗……这些正是 AI 可以接管的环节,用来释放你的带宽。

你现在在用 AI 做什么?

只是对话搜索,还是真正嵌入工作流?用 AI "写作业"只能得到及格线,将 AI 嵌入决策框架和自动化 Pipeline,才能创造增量。

3. Full Stack Builder 的复利效应

AI 时代的 Full-Stack Builder 会经历一条清晰的复利曲线。

Full Stack Builder 复利曲线 ▲ Full Stack Builder 复利曲线

核心洞察

每个项目都在同时训练你的判断力、提升你的实现速度、扩展你的工具栈——这就是复利效应的来源。

最终,你将积累起一个强大的"经验储备器"——它包含精准的判断力、指数级的交付速度,以及持续进化的前沿工具栈。

4. 进阶路径:Full Stack Builder 的成长路径

能力并非一蹴而就,每个 Builder 都会经历从旁观到创造的演进。这不仅是技能的堆砌,更是"经验池"的深度积累。在这个过程中,你的判断力愈发精准,交付速度呈指数级上升,工具栈也从单一走向前沿。

Full Stack Builder 成长路径 ▲ Full Stack Builder 成长路径

每一个阶段并不需要"完全达标"才能进入下一阶段,它们可以交叉进行。

常见误区

跳过 Stage 1 和 Stage 2,直接想成为 Creator——这会因为缺乏判断力和手感而很难走远。

随着时间的推移与项目经验的累积,Builder 的能力增长并非线性,而是在 Stage 3 之后,依托 AI 工作流的成型,展现出陡峭的指数级复利效应。

5. AI 时代的机会在哪里?

如果你正处于不知道"做什么"的迷茫期,不妨跳出宏大叙事,回归日常的高痛点场景寻找切入点。以下三类问题场景,是目前 Full Stack Builder 最容易切入的高价值区域:

切入场景典型痛点描述发生频率用户情绪当前效率
重复性信息处理每天耗费大量时间在多源信息的收集、清洗、打标签与总结转发上。高频高度烦躁极低
工具协作断层数据散落在多个平台(如文档、代码库、通讯软件),API 衔接缺乏,手动同步成本高。高频中度无奈
决策缺乏即时依据关键会议或拍板时缺乏动态数据支撑,等待人工分析报告往往错失战机。中频高度焦虑

这些场景的共同特点是:高频、情绪消耗大、现有工具没有很好解决。而 AI 恰好擅长处理信息流转、跨平台整合、快速生成摘要或建议。

切入公式

高频 + 情绪消耗大 + 现有工具未解决 = AI 最佳切入点。 如果你能在其中任何一个场景里,用最小的产品闭环解决具体人群的痛点,就已经走在了正确的方向上。

行动建议

不需要一开始就想做"平台级产品"。从一个小场景的一个小闭环开始——哪怕只是一个自动化脚本、一个浏览器插件、一个聊天机器人——用 AI 把它跑通,然后迭代。

6. 结语

在 AI 时代,讨论"要不要成为全栈"本身就是一个伪命题。因为工具的进化,已经不可逆地将每个人推向了全栈的起跑线。

成为 AI 时代的 Full Stack Builder,不是要你成为一个无所不能的孤胆英雄,而是希望你用更低的成本、更快的节奏,把判断力、实现力、杠杆能力组合成一个属于自己的飞轮。

',47)),t("p",null,[a[3]||(a[3]=l("真正的分野在于:",-1)),s(e,{type:"info",bold:""},{default:r(()=>[...a[2]||(a[2]=[l('你是将自己视为被 AI 挤压生存空间的"切图仔/写特定语言的码农",还是以最终价值交付为导向、运用 AI 作为系统级杠杆的 Builder。',-1)])]),_:1})]),a[13]||(a[13]=t("div",{class:"tip custom-block"},[t("p",{class:"custom-block-title"},"开始行动"),t("p",null,"你不需要一次性学会所有东西,只需要从一个小问题开始,用 AI 把它跑通,然后在这个过程中,积累下一次能做得更好的判断力。")],-1))]))}});export{v as __pageData,x as default}; diff --git a/assets/ai_full-stack-builder.md.BGzdsC-3.lean.js b/assets/ai_full-stack-builder.md.CtpFpp0a.lean.js similarity index 97% rename from assets/ai_full-stack-builder.md.BGzdsC-3.lean.js rename to assets/ai_full-stack-builder.md.CtpFpp0a.lean.js index 1596f18..472dbdf 100644 --- a/assets/ai_full-stack-builder.md.BGzdsC-3.lean.js +++ b/assets/ai_full-stack-builder.md.CtpFpp0a.lean.js @@ -1 +1 @@ -import{H as e}from"./chunks/HighLightText.pXHFEzDb.js";import{F as o}from"./chunks/FeatureGrid.C9SUnqP9.js";import{c as m,o as d,a as t,b as s,d as i,e as l,w as r}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const v=JSON.parse('{"title":"做好 AI 时代的 Full Stack Builder","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","frontmatter":{"date":"2026-04-27T18:00:00.000Z","title":"做好 AI 时代的 Full Stack Builder","tldr":"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","sticky":1,"top":true,"tags":["全栈","AI","能力模型","职业成长"],"categories":["AI 学习与实践","社区活动与实践小项目"],"permalink":"/ai/full-stack-builder"},"headers":[],"relativePath":"ai/full-stack-builder.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md"}'),c={name:"ai/full-stack-builder.md"},x=Object.assign(c,{setup(p){const n=[{icon:"🌊",title:"WHY NOW — 结构性缺口",description:'市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对"轻量、快速、个性化"场景化应用的爆发式需求。'},{icon:"✨",title:"WHY AI — 能力范式跃迁",description:'AI 带来的绝不仅是"替代人工"的降本增效,而是实现能力的平权。它让一个人可以在需求发现、原型验证、代码实现甚至分发之间自由穿梭,创造出过去需要一个完整小队才能交付的体验。'},{icon:"👁️",title:'WHY YOU — 回归"人"的壁垒',description:'当技术栈不再是黑盒,真正的护城河反而回退到了最"人"的属性:你对某个细分场景的深刻洞察、你对优质产品的"品味"、以及那些无法被大模型参数化的产品直觉。'}];return(u,a)=>(d(),m("div",null,[a[4]||(a[4]=t("h1",{id:"做好-ai-时代的-full-stack-builder",tabindex:"-1"},[l("做好 AI 时代的 Full Stack Builder "),t("a",{class:"header-anchor",href:"#做好-ai-时代的-full-stack-builder","aria-label":"Permalink to “做好 AI 时代的 Full Stack Builder”"},"​")],-1)),a[5]||(a[5]=t("blockquote",null,[t("p",null,[t("strong",null,"摘要总结"),l(": 传统产品开发高度依赖科层制分工,但协同成本高、信息衰减严重。AI 技术的突破正在松动这套分工体系,使个体获得实现能力的平权。本文从 WHY NOW、WHY AI、WHY YOU 三个维度出发,解构 Full Stack Builder 的核心能力模型,将能力拆解为判断力(Taste)、实现力(Build)与杠杆力(Leverage)三个乘数因子,任何一环为零则总产出归零。在此基础上,梳理了从工具化(L1)到能做产品(L2)再到创造者(L3)的三级演进路径,并结合复利效应与成长阶段,分析了重复性信息处理、工具协作断层、决策缺乏即时依据三类高价值切入场景。最终提出:AI 时代的真正分野在于个体是将自己视为被挤压生存空间的执行者,还是以价值交付为导向、运用 AI 作为系统级杠杆的 Builder。")])],-1)),a[6]||(a[6]=t("h2",{id:"_1-引言-全能的幻觉与稀缺的转移",tabindex:"-1"},[l("1. 引言:全能的幻觉与稀缺的转移 "),t("a",{class:"header-anchor",href:"#_1-引言-全能的幻觉与稀缺的转移","aria-label":"Permalink to “1. 引言:全能的幻觉与稀缺的转移”"},"​")],-1)),a[7]||(a[7]=t("p",null,'两天前,笔者在杭州良渚参加了一场 PM x AI 产品力大会。当嘉宾抛出"Full Stack Builder"这个概念时,我首先感到的是一种熟悉的兴奋——它像是对个体能力边界的一次浪漫想象:一个人就能打通创意、技术、产品、增长的全链路。',-1)),t("p",null,[a[1]||(a[1]=l("但在随后整理笔记、反复咀嚼那些关键词时,另一种辩证的思考逐渐浮现:",-1)),s(e,{bold:""},{default:r(()=>[...a[0]||(a[0]=[l('我们真的需要每个人都成为全知全能的"超级开发者"吗?或者说,当 AI 让"实现"的代码门槛急剧降低之后,什么才算得上是真正的稀缺?',-1)])]),_:1})]),a[8]||(a[8]=t("p",null,'传统模式下,产品的诞生高度依赖科层制的分工:产品经理定义需求,设计师绘制界面,工程师负责架构与代码,运营推向市场。这套流程在过去几十年被证明是高效的,它让专业的人做专业的事。但代价也显而易见:想法在传递中不可避免地衰减,决策在跨部门协同中迟滞,而创造者也在精密的分工缝隙中,丧失了对产品全貌的掌控感与"手感"。',-1)),a[9]||(a[9]=t("p",null,'今天,我们重新讨论"Full Stack Builder",并非为了盲目追捧个人英雄主义,而是因为技术底座的剧变,正在从根本上松动这套分工体系的根基:',-1)),s(o,{items:n,columns:3}),a[10]||(a[10]=i("",3)),a[11]||(a[11]=t("p",null,[t("span",{class:"katex-display"},[t("span",{class:"katex"},[t("span",{class:"katex-mathml"},[t("math",null,[t("semantics",null,[t("mrow",null,[t("mtext",null,[t("mi",{mathvariant:"normal"},"F"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"S"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"c"),t("mi",{mathvariant:"normal"},"k")]),t("mo",null,"="),t("mtext",null,[t("mi",{mathvariant:"normal"},"T"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"s"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"e")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"B"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"i"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"d")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"L"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"v"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"r"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"g"),t("mi",{mathvariant:"normal"},"e")])]),t("annotation",{encoding:"application/x-tex"},"\\text{FullStack} = \\text{Taste} \\times \\text{Build} \\times \\text{Leverage} ")])])]),t("span",{class:"katex-html","aria-hidden":"true"},[t("span",{class:"strut",style:{height:"0.69444em"}}),t("span",{class:"strut bottom",style:{height:"0.8888799999999999em","vertical-align":"-0.19444em"}}),t("span",{class:"base displaystyle textstyle uncramped"},[t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"F"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"S"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"c"),t("span",{class:"mord mathrm"},"k")]),t("span",{class:"mrel"},"="),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"T"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"s"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"e")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"B"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"i"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"d")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"L"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"v"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm"},"r"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"g"),t("span",{class:"mord mathrm"},"e")])])])])])],-1)),a[12]||(a[12]=i("",47)),t("p",null,[a[3]||(a[3]=l("真正的分野在于:",-1)),s(e,{type:"info",bold:""},{default:r(()=>[...a[2]||(a[2]=[l('你是将自己视为被 AI 挤压生存空间的"切图仔/写特定语言的码农",还是以最终价值交付为导向、运用 AI 作为系统级杠杆的 Builder。',-1)])]),_:1})]),a[13]||(a[13]=t("div",{class:"tip custom-block"},[t("p",{class:"custom-block-title"},"开始行动"),t("p",null,"你不需要一次性学会所有东西,只需要从一个小问题开始,用 AI 把它跑通,然后在这个过程中,积累下一次能做得更好的判断力。")],-1))]))}});export{v as __pageData,x as default}; +import{H as e}from"./chunks/HighLightText.DNC3BKyb.js";import{F as o}from"./chunks/FeatureGrid.LE2S2SBN.js";import{c as m,o as d,a as t,b as s,d as i,e as l,w as r}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const v=JSON.parse('{"title":"做好 AI 时代的 Full Stack Builder","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","frontmatter":{"date":"2026-04-27T18:00:00.000Z","title":"做好 AI 时代的 Full Stack Builder","tldr":"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。","description":"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。","sticky":1,"top":true,"tags":["全栈","AI","能力模型","职业成长"],"categories":["AI 学习与实践","社区活动与实践小项目"],"permalink":"/ai/full-stack-builder"},"headers":[],"relativePath":"ai/full-stack-builder.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md"}'),c={name:"ai/full-stack-builder.md"},x=Object.assign(c,{setup(p){const n=[{icon:"🌊",title:"WHY NOW — 结构性缺口",description:'市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对"轻量、快速、个性化"场景化应用的爆发式需求。'},{icon:"✨",title:"WHY AI — 能力范式跃迁",description:'AI 带来的绝不仅是"替代人工"的降本增效,而是实现能力的平权。它让一个人可以在需求发现、原型验证、代码实现甚至分发之间自由穿梭,创造出过去需要一个完整小队才能交付的体验。'},{icon:"👁️",title:'WHY YOU — 回归"人"的壁垒',description:'当技术栈不再是黑盒,真正的护城河反而回退到了最"人"的属性:你对某个细分场景的深刻洞察、你对优质产品的"品味"、以及那些无法被大模型参数化的产品直觉。'}];return(u,a)=>(d(),m("div",null,[a[4]||(a[4]=t("h1",{id:"做好-ai-时代的-full-stack-builder",tabindex:"-1"},[l("做好 AI 时代的 Full Stack Builder "),t("a",{class:"header-anchor",href:"#做好-ai-时代的-full-stack-builder","aria-label":"Permalink to “做好 AI 时代的 Full Stack Builder”"},"​")],-1)),a[5]||(a[5]=t("blockquote",null,[t("p",null,[t("strong",null,"摘要总结"),l(": 传统产品开发高度依赖科层制分工,但协同成本高、信息衰减严重。AI 技术的突破正在松动这套分工体系,使个体获得实现能力的平权。本文从 WHY NOW、WHY AI、WHY YOU 三个维度出发,解构 Full Stack Builder 的核心能力模型,将能力拆解为判断力(Taste)、实现力(Build)与杠杆力(Leverage)三个乘数因子,任何一环为零则总产出归零。在此基础上,梳理了从工具化(L1)到能做产品(L2)再到创造者(L3)的三级演进路径,并结合复利效应与成长阶段,分析了重复性信息处理、工具协作断层、决策缺乏即时依据三类高价值切入场景。最终提出:AI 时代的真正分野在于个体是将自己视为被挤压生存空间的执行者,还是以价值交付为导向、运用 AI 作为系统级杠杆的 Builder。")])],-1)),a[6]||(a[6]=t("h2",{id:"_1-引言-全能的幻觉与稀缺的转移",tabindex:"-1"},[l("1. 引言:全能的幻觉与稀缺的转移 "),t("a",{class:"header-anchor",href:"#_1-引言-全能的幻觉与稀缺的转移","aria-label":"Permalink to “1. 引言:全能的幻觉与稀缺的转移”"},"​")],-1)),a[7]||(a[7]=t("p",null,'两天前,笔者在杭州良渚参加了一场 PM x AI 产品力大会。当嘉宾抛出"Full Stack Builder"这个概念时,我首先感到的是一种熟悉的兴奋——它像是对个体能力边界的一次浪漫想象:一个人就能打通创意、技术、产品、增长的全链路。',-1)),t("p",null,[a[1]||(a[1]=l("但在随后整理笔记、反复咀嚼那些关键词时,另一种辩证的思考逐渐浮现:",-1)),s(e,{bold:""},{default:r(()=>[...a[0]||(a[0]=[l('我们真的需要每个人都成为全知全能的"超级开发者"吗?或者说,当 AI 让"实现"的代码门槛急剧降低之后,什么才算得上是真正的稀缺?',-1)])]),_:1})]),a[8]||(a[8]=t("p",null,'传统模式下,产品的诞生高度依赖科层制的分工:产品经理定义需求,设计师绘制界面,工程师负责架构与代码,运营推向市场。这套流程在过去几十年被证明是高效的,它让专业的人做专业的事。但代价也显而易见:想法在传递中不可避免地衰减,决策在跨部门协同中迟滞,而创造者也在精密的分工缝隙中,丧失了对产品全貌的掌控感与"手感"。',-1)),a[9]||(a[9]=t("p",null,'今天,我们重新讨论"Full Stack Builder",并非为了盲目追捧个人英雄主义,而是因为技术底座的剧变,正在从根本上松动这套分工体系的根基:',-1)),s(o,{items:n,columns:3}),a[10]||(a[10]=i("",3)),a[11]||(a[11]=t("p",null,[t("span",{class:"katex-display"},[t("span",{class:"katex"},[t("span",{class:"katex-mathml"},[t("math",null,[t("semantics",null,[t("mrow",null,[t("mtext",null,[t("mi",{mathvariant:"normal"},"F"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"S"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"c"),t("mi",{mathvariant:"normal"},"k")]),t("mo",null,"="),t("mtext",null,[t("mi",{mathvariant:"normal"},"T"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"s"),t("mi",{mathvariant:"normal"},"t"),t("mi",{mathvariant:"normal"},"e")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"B"),t("mi",{mathvariant:"normal"},"u"),t("mi",{mathvariant:"normal"},"i"),t("mi",{mathvariant:"normal"},"l"),t("mi",{mathvariant:"normal"},"d")]),t("mo",null,"×"),t("mtext",null,[t("mi",{mathvariant:"normal"},"L"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"v"),t("mi",{mathvariant:"normal"},"e"),t("mi",{mathvariant:"normal"},"r"),t("mi",{mathvariant:"normal"},"a"),t("mi",{mathvariant:"normal"},"g"),t("mi",{mathvariant:"normal"},"e")])]),t("annotation",{encoding:"application/x-tex"},"\\text{FullStack} = \\text{Taste} \\times \\text{Build} \\times \\text{Leverage} ")])])]),t("span",{class:"katex-html","aria-hidden":"true"},[t("span",{class:"strut",style:{height:"0.69444em"}}),t("span",{class:"strut bottom",style:{height:"0.8888799999999999em","vertical-align":"-0.19444em"}}),t("span",{class:"base displaystyle textstyle uncramped"},[t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"F"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"S"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"c"),t("span",{class:"mord mathrm"},"k")]),t("span",{class:"mrel"},"="),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"T"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm"},"s"),t("span",{class:"mord mathrm"},"t"),t("span",{class:"mord mathrm"},"e")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"B"),t("span",{class:"mord mathrm"},"u"),t("span",{class:"mord mathrm"},"i"),t("span",{class:"mord mathrm"},"l"),t("span",{class:"mord mathrm"},"d")]),t("span",{class:"mbin"},"×"),t("span",{class:"text mord displaystyle textstyle uncramped"},[t("span",{class:"mord mathrm"},"L"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"v"),t("span",{class:"mord mathrm"},"e"),t("span",{class:"mord mathrm"},"r"),t("span",{class:"mord mathrm"},"a"),t("span",{class:"mord mathrm",style:{"margin-right":"0.01389em"}},"g"),t("span",{class:"mord mathrm"},"e")])])])])])],-1)),a[12]||(a[12]=i("",47)),t("p",null,[a[3]||(a[3]=l("真正的分野在于:",-1)),s(e,{type:"info",bold:""},{default:r(()=>[...a[2]||(a[2]=[l('你是将自己视为被 AI 挤压生存空间的"切图仔/写特定语言的码农",还是以最终价值交付为导向、运用 AI 作为系统级杠杆的 Builder。',-1)])]),_:1})]),a[13]||(a[13]=t("div",{class:"tip custom-block"},[t("p",{class:"custom-block-title"},"开始行动"),t("p",null,"你不需要一次性学会所有东西,只需要从一个小问题开始,用 AI 把它跑通,然后在这个过程中,积累下一次能做得更好的判断力。")],-1))]))}});export{v as __pageData,x as default}; diff --git a/assets/ai_llm-api-resources.md.D_6BiDYj.js b/assets/ai_llm-api-resources.md.W2VuMWN0.js similarity index 99% rename from assets/ai_llm-api-resources.md.D_6BiDYj.js rename to assets/ai_llm-api-resources.md.W2VuMWN0.js index 2100cef..a65c9ea 100644 --- a/assets/ai_llm-api-resources.md.D_6BiDYj.js +++ b/assets/ai_llm-api-resources.md.W2VuMWN0.js @@ -1 +1 @@ -import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e('

LLM API 平台推荐与选型指南

摘要总结:截至 2026 年,LLM API 服务已形成"官方直连 + 第三方聚合"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。

1. 选模型前,先想清楚这几件事

在对比具体平台之前,可从以下四个维度梳理自身诉求,避免"眼花缭乱后随便选一个":

维度关键问题影响决策
任务类型是通用对话、代码生成、长文档分析,还是多模态理解?不同模型在垂直能力上差距悬殊
成本预算每月调用量级?能否接受海外结算与汇率风险?国产模型 Token 价格通常低 3~10 倍
合规与部署数据能否出境?能否使用海外服务?是否需要私有化部署?涉及政务/金融/医疗场景必须考虑
网络环境开发/部署环境能否稳定访问海外 API?决定是否需要中转或国内聚合平台

三类模型服务的核心差异:

  • 国际顶尖模型(Claude / ChatGPT / Gemini):综合能力最强,英文处理、代码生成、复杂推理均居前列,多模态支持完善,但价格较高,国内访问需要特殊网络;
  • 国产优秀模型(DeepSeek / Kimi / GLM / MiniMax / Doubao 等):中文理解与合规性优势突出,Token 价格极具竞争力,部分模型推理能力已逼近国际顶尖,是国内开发者的性价比首选;
  • 开源模型(Qwen / LLaMA / Mixtral 等):支持本地或私有化部署,无数据出境风险,可通过 Ollama / vLLM / 硅基流动等部署或调用,适合对数据隐私或成本极度敏感的场景。

2. 官方 API 平台

官方平台即模型研发方直接开放的 API 服务,优势是最新模型第一时间可用、文档权威、SLA 有保障,缺点是需要逐一注册账号、管理多个 Key。

2.1 国际顶尖模型

',10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e('
模型 / 平台核心优势最适场景价格档位
OpenAI GPT综合能力最全面;原生多模态(图/文/音/视频);o 系列有深度推理链写作与内容创作 · 代码生成与调试 · 多模态分析 · 复杂推理
Anthropic Claude指令遵循精准;输出结构清晰;长文档理解最强;代码与文档质量高;幻觉率低长文档精读/摘要 · 复杂任务规划 · 高质量代码审查 · Agent 推理后端高(Haiku 版较低)
Google Gemini超长上下文、原生多模态;与 Google Search / Workspace 深度整合;免费额度慷慨超长资料理解 · 视频/音频分析 · 研究辅助 · Google 生态集成
免费额度大

2.2 国内优秀模型

',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('
模型 / 平台核心优势最适场景价格档位
DeepSeekR1 推理能力逼近 o1;数学/代码/逻辑顶尖;完全开源可本地部署;API 价格极低代码生成与调试 · 数学/逻辑推理 · 学术研究 · 私有化部署极低 ⭐
Moonshot (Kimi)中文长上下文最强;多格式文件解析(PDF/Word/代码);内置深度研究模式长文档阅读与结构化提炼 · 法律/合同分析 · 多文件对比
miniMax100 万 Token 长上下文;文本/语音/视频多模态;语音合成与视频生成能力强超长文档理解 · AI 视频/语音生成 · 角色扮演/AI 陪伴
豆包 (Doubao)响应速度极快;API 价格最低;与字节跳动生态打通高并发轻量对话 · 内容摘要 · 短视频内容策划极低 ⭐
通义千问 (Qwen)子模型丰富(Coder/Math/VL);阿里云生态集成;部分开源中文内容创作 · 代码/数学 · 钉钉/阿里云场景
智谱 GLM数学与代码推理突出;Function Call 工具调用完善;企业 RAG 生态成熟企业知识库问答 · Agent 工具链 · 图文多模态理解

3. 第三方聚合平台

第三方平台将多家主流模型聚合为统一 API 入口,开发者无需逐一申请各厂商 Key,可一站访问 GPT、Claude、Gemini、 MininMax、DeepSeek 等数百个模型,按量计费、兼容 OpenAI SDK,大幅降低接入与切换成本。国际开发者首选 OpenRouter,国内开发者首选硅基流动。

',3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e('
平台核心定位计费方式国内可用
OpenRouter多模型聚合路由,300+ 模型统一入口按 Tokens,随用随付
需科学上网
硅基流动国内聚合推理,价格最低按 Tokens,部分免费
GroqLPU 超高速推理,延迟极低免费额度 + 按量付费
需科学上网
Hugging Face开源生态标准入口,模型最全数十万开源模型(文本/图像/音频/多模态)Serverless 免费 + Dedicated 按量
Together AI开源模型推理 + Fine-tuning按 Tokens + 训练时长
需科学上网
Replicate开源模型市场,多模态覆盖广按 GPU 计算秒数
需科学上网
302.AI国内直连海外模型中转充值按量消耗
API2DOpenAI 系列国内稳定代理按 Tokens 消耗

预算极有限(个人开发者 / 原型阶段):

  • 国内直连 → 硅基流动(DeepSeek / Qwen 部分模型免费)
  • 有海外网络 → OpenRouter 免费模型Groq 免费额度
  • 需要 GPT-4o / Claude 但无法直连 → 302.AI / API2D 按量充值

成本敏感但有一定预算(初创产品 / 小团队):

  • DeepSeek API(官方直连)或 硅基流动 跑 DeepSeek / Qwen 系列
  • 对质量要求高的核心场景:用 Claude Haiku(低价高质量)或 Gemini 3.0 Flash

企业级 / 不计较成本优先质量:

  • 英文为主 → OpenAI GPT + Claude 4.6 Sonnet 双保险
  • 中文为主且需合规 → 百度千帆(支持 Fine-tuning + 私有化)/ 阿里云百炼

📌 实战建议

  1. 从硅基流动起步:国内开发者强烈建议先注册 硅基流动,用免费额度把 DeepSeek-V3 / Qwen 跑起来,对比效果再决定是否升级。
  2. 保持接口兼容性:无论选哪家,优先使用 OpenAI 兼容格式/v1/chat/completions),这样换模型/换平台只需改一行 base_url,不用重写代码。
  3. 不要只用一个模型:推荐"主力模型 + 降级备用"组合——主力走质量优先的模型,备用走低成本模型,在 OpenRouter / 硅基流动上配置 Fallback 自动切换。
  4. 注意 Token 用量陷阱:长上下文模型(如 Kimi 1M)单次输入成本随 Token 数线性增长,实际使用中要做好截断策略,避免账单超出预期。
  5. 企业场景必看合规:涉及用户隐私、金融、医疗等数据时,优先选择支持私有化部署数据不出境承诺的服务(百度千帆、阿里云百炼、本地部署 DeepSeek 等)。
',8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default}; +import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e('

LLM API 平台推荐与选型指南

摘要总结:截至 2026 年,LLM API 服务已形成"官方直连 + 第三方聚合"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。

1. 选模型前,先想清楚这几件事

在对比具体平台之前,可从以下四个维度梳理自身诉求,避免"眼花缭乱后随便选一个":

维度关键问题影响决策
任务类型是通用对话、代码生成、长文档分析,还是多模态理解?不同模型在垂直能力上差距悬殊
成本预算每月调用量级?能否接受海外结算与汇率风险?国产模型 Token 价格通常低 3~10 倍
合规与部署数据能否出境?能否使用海外服务?是否需要私有化部署?涉及政务/金融/医疗场景必须考虑
网络环境开发/部署环境能否稳定访问海外 API?决定是否需要中转或国内聚合平台

三类模型服务的核心差异:

  • 国际顶尖模型(Claude / ChatGPT / Gemini):综合能力最强,英文处理、代码生成、复杂推理均居前列,多模态支持完善,但价格较高,国内访问需要特殊网络;
  • 国产优秀模型(DeepSeek / Kimi / GLM / MiniMax / Doubao 等):中文理解与合规性优势突出,Token 价格极具竞争力,部分模型推理能力已逼近国际顶尖,是国内开发者的性价比首选;
  • 开源模型(Qwen / LLaMA / Mixtral 等):支持本地或私有化部署,无数据出境风险,可通过 Ollama / vLLM / 硅基流动等部署或调用,适合对数据隐私或成本极度敏感的场景。

2. 官方 API 平台

官方平台即模型研发方直接开放的 API 服务,优势是最新模型第一时间可用、文档权威、SLA 有保障,缺点是需要逐一注册账号、管理多个 Key。

2.1 国际顶尖模型

',10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e('
模型 / 平台核心优势最适场景价格档位
OpenAI GPT综合能力最全面;原生多模态(图/文/音/视频);o 系列有深度推理链写作与内容创作 · 代码生成与调试 · 多模态分析 · 复杂推理
Anthropic Claude指令遵循精准;输出结构清晰;长文档理解最强;代码与文档质量高;幻觉率低长文档精读/摘要 · 复杂任务规划 · 高质量代码审查 · Agent 推理后端高(Haiku 版较低)
Google Gemini超长上下文、原生多模态;与 Google Search / Workspace 深度整合;免费额度慷慨超长资料理解 · 视频/音频分析 · 研究辅助 · Google 生态集成
免费额度大

2.2 国内优秀模型

',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('
模型 / 平台核心优势最适场景价格档位
DeepSeekR1 推理能力逼近 o1;数学/代码/逻辑顶尖;完全开源可本地部署;API 价格极低代码生成与调试 · 数学/逻辑推理 · 学术研究 · 私有化部署极低 ⭐
Moonshot (Kimi)中文长上下文最强;多格式文件解析(PDF/Word/代码);内置深度研究模式长文档阅读与结构化提炼 · 法律/合同分析 · 多文件对比
miniMax100 万 Token 长上下文;文本/语音/视频多模态;语音合成与视频生成能力强超长文档理解 · AI 视频/语音生成 · 角色扮演/AI 陪伴
豆包 (Doubao)响应速度极快;API 价格最低;与字节跳动生态打通高并发轻量对话 · 内容摘要 · 短视频内容策划极低 ⭐
通义千问 (Qwen)子模型丰富(Coder/Math/VL);阿里云生态集成;部分开源中文内容创作 · 代码/数学 · 钉钉/阿里云场景
智谱 GLM数学与代码推理突出;Function Call 工具调用完善;企业 RAG 生态成熟企业知识库问答 · Agent 工具链 · 图文多模态理解

3. 第三方聚合平台

第三方平台将多家主流模型聚合为统一 API 入口,开发者无需逐一申请各厂商 Key,可一站访问 GPT、Claude、Gemini、 MininMax、DeepSeek 等数百个模型,按量计费、兼容 OpenAI SDK,大幅降低接入与切换成本。国际开发者首选 OpenRouter,国内开发者首选硅基流动。

',3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e('
平台核心定位计费方式国内可用
OpenRouter多模型聚合路由,300+ 模型统一入口按 Tokens,随用随付
需科学上网
硅基流动国内聚合推理,价格最低按 Tokens,部分免费
GroqLPU 超高速推理,延迟极低免费额度 + 按量付费
需科学上网
Hugging Face开源生态标准入口,模型最全数十万开源模型(文本/图像/音频/多模态)Serverless 免费 + Dedicated 按量
Together AI开源模型推理 + Fine-tuning按 Tokens + 训练时长
需科学上网
Replicate开源模型市场,多模态覆盖广按 GPU 计算秒数
需科学上网
302.AI国内直连海外模型中转充值按量消耗
API2DOpenAI 系列国内稳定代理按 Tokens 消耗

预算极有限(个人开发者 / 原型阶段):

  • 国内直连 → 硅基流动(DeepSeek / Qwen 部分模型免费)
  • 有海外网络 → OpenRouter 免费模型Groq 免费额度
  • 需要 GPT-4o / Claude 但无法直连 → 302.AI / API2D 按量充值

成本敏感但有一定预算(初创产品 / 小团队):

  • DeepSeek API(官方直连)或 硅基流动 跑 DeepSeek / Qwen 系列
  • 对质量要求高的核心场景:用 Claude Haiku(低价高质量)或 Gemini 3.0 Flash

企业级 / 不计较成本优先质量:

  • 英文为主 → OpenAI GPT + Claude 4.6 Sonnet 双保险
  • 中文为主且需合规 → 百度千帆(支持 Fine-tuning + 私有化)/ 阿里云百炼

📌 实战建议

  1. 从硅基流动起步:国内开发者强烈建议先注册 硅基流动,用免费额度把 DeepSeek-V3 / Qwen 跑起来,对比效果再决定是否升级。
  2. 保持接口兼容性:无论选哪家,优先使用 OpenAI 兼容格式/v1/chat/completions),这样换模型/换平台只需改一行 base_url,不用重写代码。
  3. 不要只用一个模型:推荐"主力模型 + 降级备用"组合——主力走质量优先的模型,备用走低成本模型,在 OpenRouter / 硅基流动上配置 Fallback 自动切换。
  4. 注意 Token 用量陷阱:长上下文模型(如 Kimi 1M)单次输入成本随 Token 数线性增长,实际使用中要做好截断策略,避免账单超出预期。
  5. 企业场景必看合规:涉及用户隐私、金融、医疗等数据时,优先选择支持私有化部署数据不出境承诺的服务(百度千帆、阿里云百炼、本地部署 DeepSeek 等)。
',8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default}; diff --git a/assets/ai_llm-api-resources.md.D_6BiDYj.lean.js b/assets/ai_llm-api-resources.md.W2VuMWN0.lean.js similarity index 99% rename from assets/ai_llm-api-resources.md.D_6BiDYj.lean.js rename to assets/ai_llm-api-resources.md.W2VuMWN0.lean.js index d8b8bed..1aedb98 100644 --- a/assets/ai_llm-api-resources.md.D_6BiDYj.lean.js +++ b/assets/ai_llm-api-resources.md.W2VuMWN0.lean.js @@ -1 +1 @@ -import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e("",10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e("",8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default}; +import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e("",10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e("",8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default}; diff --git a/assets/ai_overview.md.CRjjlPMp.js b/assets/ai_overview.md.DWoy5IjF.js similarity index 96% rename from assets/ai_overview.md.CRjjlPMp.js rename to assets/ai_overview.md.DWoy5IjF.js index 13e4096..a7a3848 100644 --- a/assets/ai_overview.md.CRjjlPMp.js +++ b/assets/ai_overview.md.DWoy5IjF.js @@ -1 +1 @@ -import{K as o,A as l}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as s}from"./chunks/Blockquote.acMDZFAD.js";import{F as c,C as g}from"./chunks/Callout.B-9wy57V.js";import{c as A,o as p,a as e,b as i,e as a,u as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const r=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"做好 AI 时代的 Full Stack Builder",url:"/ai/full-stack-builder",description:"本文从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。"},{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],P=JSON.parse('{"title":"全景一览","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"全景一览","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"],"articleShare":false},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),d={name:"ai/overview.md"},b=Object.assign(d,{setup(u){return(m,t)=>(p(),A("div",null,[t[0]||(t[0]=e("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),e("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(s,{variant:"insight",quote:"AI 学习与实践的精髓在于把碎片信息转化为可执行的工程能力,在动手搭建中获得对 AI 的深层认知。"}),t[1]||(t[1]=e("p",null,[e("strong",null,"动手为先"),a("——不满足于读论文、看教程,亲手搭建 Agent、编写 Skill、跑通工程化闭环;")],-1)),t[2]||(t[2]=e("p",null,[e("strong",null,"系统化沉淀"),a("——将零散的 Prompt、Agent Skills、MCP、Subagent 组装成可复用、可持续进化的方法论体系。")],-1)),i(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png",caption:"AI 学习与实践知识体系"}),i(g,{type:"info",title:"学以致用,知行合一",content:"在 AI 技术以周为单位迭代的时代,学习最大的陷阱是永远停留在概念层。真正的认知跃迁发生在第一次亲手跑通 Agent Loop、第一次把 Prompt 提炼为可复用的 Skill、第一次将碎片组件拼成可持续运转的工作流。这里的每一篇文章,都来自真实的搭建、调试与复盘。"}),t[3]||(t[3]=e("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),e("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(o,{categories:n(r),"root-label":"AI 学习与实践","show-articles":!1},null,8,["categories"]),i(l,{categories:n(r)},null,8,["categories"])]))}});export{P as __pageData,b as default}; +import{K as o,A as l}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as s}from"./chunks/Blockquote.B7nHhHWl.js";import{F as c,C as g}from"./chunks/Callout.Bss1uX1v.js";import{c as A,o as p,a as e,b as i,e as a,u as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const r=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"做好 AI 时代的 Full Stack Builder",url:"/ai/full-stack-builder",description:"本文从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。"},{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],P=JSON.parse('{"title":"全景一览","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"全景一览","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"],"articleShare":false},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),d={name:"ai/overview.md"},b=Object.assign(d,{setup(u){return(m,t)=>(p(),A("div",null,[t[0]||(t[0]=e("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),e("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(s,{variant:"insight",quote:"AI 学习与实践的精髓在于把碎片信息转化为可执行的工程能力,在动手搭建中获得对 AI 的深层认知。"}),t[1]||(t[1]=e("p",null,[e("strong",null,"动手为先"),a("——不满足于读论文、看教程,亲手搭建 Agent、编写 Skill、跑通工程化闭环;")],-1)),t[2]||(t[2]=e("p",null,[e("strong",null,"系统化沉淀"),a("——将零散的 Prompt、Agent Skills、MCP、Subagent 组装成可复用、可持续进化的方法论体系。")],-1)),i(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png",caption:"AI 学习与实践知识体系"}),i(g,{type:"info",title:"学以致用,知行合一",content:"在 AI 技术以周为单位迭代的时代,学习最大的陷阱是永远停留在概念层。真正的认知跃迁发生在第一次亲手跑通 Agent Loop、第一次把 Prompt 提炼为可复用的 Skill、第一次将碎片组件拼成可持续运转的工作流。这里的每一篇文章,都来自真实的搭建、调试与复盘。"}),t[3]||(t[3]=e("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),e("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(o,{categories:n(r),"root-label":"AI 学习与实践","show-articles":!1},null,8,["categories"]),i(l,{categories:n(r)},null,8,["categories"])]))}});export{P as __pageData,b as default}; diff --git a/assets/ai_overview.md.CRjjlPMp.lean.js b/assets/ai_overview.md.DWoy5IjF.lean.js similarity index 96% rename from assets/ai_overview.md.CRjjlPMp.lean.js rename to assets/ai_overview.md.DWoy5IjF.lean.js index 13e4096..a7a3848 100644 --- a/assets/ai_overview.md.CRjjlPMp.lean.js +++ b/assets/ai_overview.md.DWoy5IjF.lean.js @@ -1 +1 @@ -import{K as o,A as l}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as s}from"./chunks/Blockquote.acMDZFAD.js";import{F as c,C as g}from"./chunks/Callout.B-9wy57V.js";import{c as A,o as p,a as e,b as i,e as a,u as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const r=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"做好 AI 时代的 Full Stack Builder",url:"/ai/full-stack-builder",description:"本文从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。"},{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],P=JSON.parse('{"title":"全景一览","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"全景一览","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"],"articleShare":false},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),d={name:"ai/overview.md"},b=Object.assign(d,{setup(u){return(m,t)=>(p(),A("div",null,[t[0]||(t[0]=e("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),e("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(s,{variant:"insight",quote:"AI 学习与实践的精髓在于把碎片信息转化为可执行的工程能力,在动手搭建中获得对 AI 的深层认知。"}),t[1]||(t[1]=e("p",null,[e("strong",null,"动手为先"),a("——不满足于读论文、看教程,亲手搭建 Agent、编写 Skill、跑通工程化闭环;")],-1)),t[2]||(t[2]=e("p",null,[e("strong",null,"系统化沉淀"),a("——将零散的 Prompt、Agent Skills、MCP、Subagent 组装成可复用、可持续进化的方法论体系。")],-1)),i(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png",caption:"AI 学习与实践知识体系"}),i(g,{type:"info",title:"学以致用,知行合一",content:"在 AI 技术以周为单位迭代的时代,学习最大的陷阱是永远停留在概念层。真正的认知跃迁发生在第一次亲手跑通 Agent Loop、第一次把 Prompt 提炼为可复用的 Skill、第一次将碎片组件拼成可持续运转的工作流。这里的每一篇文章,都来自真实的搭建、调试与复盘。"}),t[3]||(t[3]=e("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),e("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(o,{categories:n(r),"root-label":"AI 学习与实践","show-articles":!1},null,8,["categories"]),i(l,{categories:n(r)},null,8,["categories"])]))}});export{P as __pageData,b as default}; +import{K as o,A as l}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as s}from"./chunks/Blockquote.B7nHhHWl.js";import{F as c,C as g}from"./chunks/Callout.Bss1uX1v.js";import{c as A,o as p,a as e,b as i,e as a,u as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const r=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"做好 AI 时代的 Full Stack Builder",url:"/ai/full-stack-builder",description:"本文从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。"},{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],P=JSON.parse('{"title":"全景一览","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"全景一览","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"],"articleShare":false},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),d={name:"ai/overview.md"},b=Object.assign(d,{setup(u){return(m,t)=>(p(),A("div",null,[t[0]||(t[0]=e("h1",{id:"全景一览",tabindex:"-1"},[a("全景一览 "),e("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(s,{variant:"insight",quote:"AI 学习与实践的精髓在于把碎片信息转化为可执行的工程能力,在动手搭建中获得对 AI 的深层认知。"}),t[1]||(t[1]=e("p",null,[e("strong",null,"动手为先"),a("——不满足于读论文、看教程,亲手搭建 Agent、编写 Skill、跑通工程化闭环;")],-1)),t[2]||(t[2]=e("p",null,[e("strong",null,"系统化沉淀"),a("——将零散的 Prompt、Agent Skills、MCP、Subagent 组装成可复用、可持续进化的方法论体系。")],-1)),i(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png",caption:"AI 学习与实践知识体系"}),i(g,{type:"info",title:"学以致用,知行合一",content:"在 AI 技术以周为单位迭代的时代,学习最大的陷阱是永远停留在概念层。真正的认知跃迁发生在第一次亲手跑通 Agent Loop、第一次把 Prompt 提炼为可复用的 Skill、第一次将碎片组件拼成可持续运转的工作流。这里的每一篇文章,都来自真实的搭建、调试与复盘。"}),t[3]||(t[3]=e("h2",{id:"精选专题",tabindex:"-1"},[a("精选专题 "),e("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(o,{categories:n(r),"root-label":"AI 学习与实践","show-articles":!1},null,8,["categories"]),i(l,{categories:n(r)},null,8,["categories"])]))}});export{P as __pageData,b as default}; diff --git a/assets/ai_tools-assistant.md.a4OzjAJ7.js b/assets/ai_tools-assistant.md.r9bHqTO_.js similarity index 99% rename from assets/ai_tools-assistant.md.a4OzjAJ7.js rename to assets/ai_tools-assistant.md.r9bHqTO_.js index 646100c..d275360 100644 --- a/assets/ai_tools-assistant.md.a4OzjAJ7.js +++ b/assets/ai_tools-assistant.md.r9bHqTO_.js @@ -1 +1 @@ -import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e('

好用的 AI 助手与工作站推荐

摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。

1. AI 助手

选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。

:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规性和部分定制化场景下更具优势,且访问更为便捷,适合日常使用和本地需求。

1.1. 国外

',5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e('
助手🔑 核心能力标签💡 典型使用场景
ChatGPT综合能力最全面;GPT-4o 原生多模态(图/文/音/视频);o1 / o3 系列深度推理链;GPTs 工具插件生态最丰富写作与内容创作 代码生成与调试 复杂多步推理 多模态内容分析
Claude200K 长上下文,指令遵循精准;输出逻辑严谨、结构清晰,极少幻觉;代码与文档质量高长文档精读与摘要 复杂任务规划 高质量代码审查 AI Agent 推理后端
Gemini100 万 Token 超长上下文;原生多模态(图/音频/视频);与 Google Search、Workspace 生态深度整合实时信息检索 · 跨模态内容理解 · 研究辅助 · Google 办公场景
Grok实时接入 X(Twitter)数据流,时事感知最新;推理能力强;对话风格开放,限制少时事热点与舆情追踪 · 开放性话题讨论 · 社媒内容分析

1.2. 国内

',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('
助手🔑 核心能力标签💡 典型使用场景
miniMax100 万 Token 超长上下文(国内领先);文本 / 语音 / 视频多模态全覆盖;Hailuo AI 视频生成、Talkie 角色对话出海竞争力强;API 开放度高超长文档理解 · AI 视频生成 · 语音合成与克隆 · 角色扮演 / AI 陪伴 · 多模态应用开发
Kimi100 万 Token 中文长上下文;多格式文件解析(PDF / Word / 代码);内置联网检索与深度研究(Research)模式长文档阅读与结构化提炼 · 学术论文 / 法律合同分析 · 多文件对比 · 深度研究报告
智谱清言 (GLM)GLM-4 数学与代码推理突出;支持 Function Call 工具调用;多模态(GLM-4V);企业 RAG / Agent 生态完善企业知识库问答与 RAG · 代码与数学推理 · Agent 工具链开发 · 图文多模态理解
DeepSeek全量权重开源可本地部署;R1 具备类 o1 慢思考推理链,数学与逻辑能力顶尖;API 价格极低性价比高代码生成与调试 · 数学 / 逻辑推理 · 学术研究 · 低成本私有化部署
通义千问 (Qwen)Qwen2.5 涵盖文本 / 代码(Qwen-Coder)/ 数学 / 多模态(Qwen-VL)子模型;与钉钉、阿里云工具链深度集成;部分开源中文内容创作 · 代码与数学 · 钉钉 / 阿里云生态集成 · 多模态图文生成
豆包 (Doubao)响应速度快,日常体验流畅;与抖音 / 飞书 / 剪映生态打通;具备联网搜索与图像理解;API 价格友好日常问答与内容摘要 · 创意写作辅助 · 短视频内容策划 · 飞书 / 抖音场景集成
文心一言 (ERNIE)与百度搜索深度融合,联网实时性强;千帆平台支持 Fine-tuning 与私有化部署;中文知识图谱积累深厚搜索增强实时问答 · 中文专业内容生成 · 企业知识库 · Fine-tuning 定制业务模型
腾讯元宝 (Hunyuan)融合腾讯搜索与知识图谱;无缝对接微信 / 企业微信 / 腾讯文档;多轮对话与文档分析稳定;企业合规有保障企业微信客服 / 智能助理 · 办公协作场景 · 文档分析 · 腾讯生态集成

2. AI 学习与内容创作工作站

2.1 关键点说明

这类工具的本质是将 AI 嵌入「学习 — 整理 — 创作」全流程,我们在选择时需要关注三个维度:

  • 输入能力: 能否导入 PDF / 网页 / 音视频等多种资料
  • 知识关联: AI 能否跨文档建立联系、自动标签与归纳
  • 输出质量: 总结 / 提问 / 大纲 / 演示文稿的实用性

2.2 选择建议

选择建议:深度学习与知识整合 → 强烈推荐 NotebookLM / YouMind(多源资料导入 + AI 总结 + 音频概述,学习神器);个人笔记与知识库 → Notion AI;团队办公协作 → 飞书智能创作 / 飞书妙记;需要制作演示文稿 → Gamma;中文轻量知识管理 → FlowUs;流程文档与表格自动化 → Coda AI

',7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e('
工具核心能力标签典型使用场景多源导入AI 总结多人协作
NotebookLM多源知识融合;AI 自动总结 / FAQ / 学习指南 / 时间线 / 思维导图;Audio Overview 音频概述(可将资料转为播客式对话);Gemini3 模型驱动论文精读 · 课程笔记 · 调研资料汇总 · 播客式复习 · 知识卡片管理
YouMindAI 学习与创作智能体;浏览器插件一键抓取;自动整理与知识图谱;多模型可选碎片信息收集 · 个人知识库 · 灵感捕捉 · 内容创作辅助
Notion AI笔记内嵌 AI 助手;文档生成 / 总结 / 翻译 / 润色;数据库 + 看板 + Wiki 一体化;模板生态丰富个人知识库 · 团队项目管理 · 内容整理与二次创作 · Wiki 文档协作
飞书智能创作飞书 Docs 内置 AI 写作;会议纪要自动整理;头脑风暴与大纲生成;与飞书日历 / 任务深度联动企业文档编写 · 会议知识总结 · 团队头脑风暴 · OKR / 周报
Gamma一句话生成精美演示文稿 / 网页 / 文档;自动排版与配图;支持导入大纲或笔记一键转 PPT项目汇报 · 教学课件 · 产品演示 · 知识分享
FlowUs中文友好的 Notion 替代品;AI 辅助写作 / 总结 / 翻译;支持多维表格与看板个人笔记 · 团队知识库 · 项目管理 · 中文内容协作
Coda AI文档 + 表格 + 自动化三合一;AI 自动填写与内容总结;强大的公式与流程引擎流程梳理 · 数据驱动文档 · 团队知识管理 · 内容自动化
飞书妙记中英双语实时语音转录;AI 自动摘要与知识点提取;生成笔记与任务清单会议实时记录 · 在线课程复习 · 播客转文字 · 培训内容归档

📌 上手指引

  1. 第一步试 NotebookLM:打开 notebooklm.google,创建一个笔记本,导入你手头的 PDF / 网页链接 / YouTube 视频,几秒钟即可获得 AI 总结、FAQ 和学习指南。别忘了点 Audio Overview 生成"播客式"音频——通勤路上听知识,效率翻倍。
  2. 碎片知识收集:装好 YouMind 浏览器插件,日常刷到好文章/帖子一键保存,AI 自动打标签建图谱,告别"收藏夹吃灰"。
  3. 知识体系搭建:用 Notion AIFlowUs 建个人 Wiki,把 NotebookLM 的总结、YouMind 的碎片、自己的思考沉淀到统一知识库,AI 辅助润色与二次加工。
  4. 团队协作场景:会议用 飞书妙记 实时转录 → 飞书智能创作生成纪要 → Notion / 飞书 Docs 归档,形成团队知识流水线。
  5. 知识输出与分享:需要做汇报或分享时,把笔记丢进 Gamma,一键生成精美演示文稿,省去排版烦恼。

3. AI 搜索

3.1 关键点说明

AI 搜索 ≠ 普通搜索,它会先用大模型理解意图、实时抓取多个网页,再综合归纳成"带引用的答案",省去你逐条点链接的过程。判断一款 AI 搜索工具的关键维度:

  • 引用可溯源性:答案是否附有来源链接
  • 实时性:能否检索今日新闻
  • 深度研究能力:是否支持多轮追问与自动报告生成

3.2 选择建议

选择建议:需要实时、带引用的英文学术/技术检索 → 优先 Perplexity;日常中文搜索想要直接答案 → 秘塔搜索 / 夸克;需要深度专题报告 → Perplexity Deep Research / 秘塔深度研究

',8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('
工具核心能力标签典型使用场景
Perplexity AIAI 答案引用透明;学术/新闻/代码垂直搜索;Deep Research 自动多轮报告。英文技术文档检索 · 学术调研 · 竞品速览 · 深度专题报告
Google AI Overviews嵌入 Google 主搜索页;Gemini 驱动;保留蓝链兜底;覆盖范围最广。
深入解读参考:Complete Guide to AI Overview Optimization 2025
无需切换产品的日常搜索 · 快速事实核查 · 概念解释
秘塔搜索零广告;大纲结构答案;深度研究报告;简洁/深入/研究三档。中文学术调研 · 行业洞察报告 · 政策/法规检索 · 无干扰信息获取
百度 AI 搜索文心大模型;中文资源覆盖最广;百科/地图/文库联动;传统搜索兜底中文日常搜索 · 本地生活服务 · 百科知识查询 · 国内政策法规
夸克 AI 搜索通义千问驱动;文件/图片解析;网盘资源检索;移动端体验佳手机端日常问答 · 文件快速解析 · 网盘资源查找 · 阿里生态联动

📌 上手指引

  1. 新手入门:先用 秘塔搜索Perplexity,直接把你以前用搜索引擎搜的问题原文粘进去,对比一下答案质量与来源引用。
  2. 追问技巧:AI 搜索支持多轮对话,搜到初步答案后,追问「能展开说说 X 部分吗?」「有没有反面案例?」效果远好于新开一次搜索。
  3. 深度研究:遇到需要写报告或做调研的场景,优先用 Perplexity Deep Research(英文)或 秘塔深度研究(中文),输入一句话主题即可自动生成带引用的多章节报告。
  4. 引用核查:AI 搜索会有"幻觉"风险,养成点击答案中的来源链接核实关键数据的习惯,尤其是数字、时间、人名等关键事实。
  5. 场景匹配:技术文档/代码 → Perplexity(学术模式);中文无广告信息获取 → 秘塔;手机端快捷 → 夸克。
',2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default}; +import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e('

好用的 AI 助手与工作站推荐

摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。

1. AI 助手

选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。

:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规性和部分定制化场景下更具优势,且访问更为便捷,适合日常使用和本地需求。

1.1. 国外

',5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e('
助手🔑 核心能力标签💡 典型使用场景
ChatGPT综合能力最全面;GPT-4o 原生多模态(图/文/音/视频);o1 / o3 系列深度推理链;GPTs 工具插件生态最丰富写作与内容创作 代码生成与调试 复杂多步推理 多模态内容分析
Claude200K 长上下文,指令遵循精准;输出逻辑严谨、结构清晰,极少幻觉;代码与文档质量高长文档精读与摘要 复杂任务规划 高质量代码审查 AI Agent 推理后端
Gemini100 万 Token 超长上下文;原生多模态(图/音频/视频);与 Google Search、Workspace 生态深度整合实时信息检索 · 跨模态内容理解 · 研究辅助 · Google 办公场景
Grok实时接入 X(Twitter)数据流,时事感知最新;推理能力强;对话风格开放,限制少时事热点与舆情追踪 · 开放性话题讨论 · 社媒内容分析

1.2. 国内

',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('
助手🔑 核心能力标签💡 典型使用场景
miniMax100 万 Token 超长上下文(国内领先);文本 / 语音 / 视频多模态全覆盖;Hailuo AI 视频生成、Talkie 角色对话出海竞争力强;API 开放度高超长文档理解 · AI 视频生成 · 语音合成与克隆 · 角色扮演 / AI 陪伴 · 多模态应用开发
Kimi100 万 Token 中文长上下文;多格式文件解析(PDF / Word / 代码);内置联网检索与深度研究(Research)模式长文档阅读与结构化提炼 · 学术论文 / 法律合同分析 · 多文件对比 · 深度研究报告
智谱清言 (GLM)GLM-4 数学与代码推理突出;支持 Function Call 工具调用;多模态(GLM-4V);企业 RAG / Agent 生态完善企业知识库问答与 RAG · 代码与数学推理 · Agent 工具链开发 · 图文多模态理解
DeepSeek全量权重开源可本地部署;R1 具备类 o1 慢思考推理链,数学与逻辑能力顶尖;API 价格极低性价比高代码生成与调试 · 数学 / 逻辑推理 · 学术研究 · 低成本私有化部署
通义千问 (Qwen)Qwen2.5 涵盖文本 / 代码(Qwen-Coder)/ 数学 / 多模态(Qwen-VL)子模型;与钉钉、阿里云工具链深度集成;部分开源中文内容创作 · 代码与数学 · 钉钉 / 阿里云生态集成 · 多模态图文生成
豆包 (Doubao)响应速度快,日常体验流畅;与抖音 / 飞书 / 剪映生态打通;具备联网搜索与图像理解;API 价格友好日常问答与内容摘要 · 创意写作辅助 · 短视频内容策划 · 飞书 / 抖音场景集成
文心一言 (ERNIE)与百度搜索深度融合,联网实时性强;千帆平台支持 Fine-tuning 与私有化部署;中文知识图谱积累深厚搜索增强实时问答 · 中文专业内容生成 · 企业知识库 · Fine-tuning 定制业务模型
腾讯元宝 (Hunyuan)融合腾讯搜索与知识图谱;无缝对接微信 / 企业微信 / 腾讯文档;多轮对话与文档分析稳定;企业合规有保障企业微信客服 / 智能助理 · 办公协作场景 · 文档分析 · 腾讯生态集成

2. AI 学习与内容创作工作站

2.1 关键点说明

这类工具的本质是将 AI 嵌入「学习 — 整理 — 创作」全流程,我们在选择时需要关注三个维度:

  • 输入能力: 能否导入 PDF / 网页 / 音视频等多种资料
  • 知识关联: AI 能否跨文档建立联系、自动标签与归纳
  • 输出质量: 总结 / 提问 / 大纲 / 演示文稿的实用性

2.2 选择建议

选择建议:深度学习与知识整合 → 强烈推荐 NotebookLM / YouMind(多源资料导入 + AI 总结 + 音频概述,学习神器);个人笔记与知识库 → Notion AI;团队办公协作 → 飞书智能创作 / 飞书妙记;需要制作演示文稿 → Gamma;中文轻量知识管理 → FlowUs;流程文档与表格自动化 → Coda AI

',7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e('
工具核心能力标签典型使用场景多源导入AI 总结多人协作
NotebookLM多源知识融合;AI 自动总结 / FAQ / 学习指南 / 时间线 / 思维导图;Audio Overview 音频概述(可将资料转为播客式对话);Gemini3 模型驱动论文精读 · 课程笔记 · 调研资料汇总 · 播客式复习 · 知识卡片管理
YouMindAI 学习与创作智能体;浏览器插件一键抓取;自动整理与知识图谱;多模型可选碎片信息收集 · 个人知识库 · 灵感捕捉 · 内容创作辅助
Notion AI笔记内嵌 AI 助手;文档生成 / 总结 / 翻译 / 润色;数据库 + 看板 + Wiki 一体化;模板生态丰富个人知识库 · 团队项目管理 · 内容整理与二次创作 · Wiki 文档协作
飞书智能创作飞书 Docs 内置 AI 写作;会议纪要自动整理;头脑风暴与大纲生成;与飞书日历 / 任务深度联动企业文档编写 · 会议知识总结 · 团队头脑风暴 · OKR / 周报
Gamma一句话生成精美演示文稿 / 网页 / 文档;自动排版与配图;支持导入大纲或笔记一键转 PPT项目汇报 · 教学课件 · 产品演示 · 知识分享
FlowUs中文友好的 Notion 替代品;AI 辅助写作 / 总结 / 翻译;支持多维表格与看板个人笔记 · 团队知识库 · 项目管理 · 中文内容协作
Coda AI文档 + 表格 + 自动化三合一;AI 自动填写与内容总结;强大的公式与流程引擎流程梳理 · 数据驱动文档 · 团队知识管理 · 内容自动化
飞书妙记中英双语实时语音转录;AI 自动摘要与知识点提取;生成笔记与任务清单会议实时记录 · 在线课程复习 · 播客转文字 · 培训内容归档

📌 上手指引

  1. 第一步试 NotebookLM:打开 notebooklm.google,创建一个笔记本,导入你手头的 PDF / 网页链接 / YouTube 视频,几秒钟即可获得 AI 总结、FAQ 和学习指南。别忘了点 Audio Overview 生成"播客式"音频——通勤路上听知识,效率翻倍。
  2. 碎片知识收集:装好 YouMind 浏览器插件,日常刷到好文章/帖子一键保存,AI 自动打标签建图谱,告别"收藏夹吃灰"。
  3. 知识体系搭建:用 Notion AIFlowUs 建个人 Wiki,把 NotebookLM 的总结、YouMind 的碎片、自己的思考沉淀到统一知识库,AI 辅助润色与二次加工。
  4. 团队协作场景:会议用 飞书妙记 实时转录 → 飞书智能创作生成纪要 → Notion / 飞书 Docs 归档,形成团队知识流水线。
  5. 知识输出与分享:需要做汇报或分享时,把笔记丢进 Gamma,一键生成精美演示文稿,省去排版烦恼。

3. AI 搜索

3.1 关键点说明

AI 搜索 ≠ 普通搜索,它会先用大模型理解意图、实时抓取多个网页,再综合归纳成"带引用的答案",省去你逐条点链接的过程。判断一款 AI 搜索工具的关键维度:

  • 引用可溯源性:答案是否附有来源链接
  • 实时性:能否检索今日新闻
  • 深度研究能力:是否支持多轮追问与自动报告生成

3.2 选择建议

选择建议:需要实时、带引用的英文学术/技术检索 → 优先 Perplexity;日常中文搜索想要直接答案 → 秘塔搜索 / 夸克;需要深度专题报告 → Perplexity Deep Research / 秘塔深度研究

',8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('
工具核心能力标签典型使用场景
Perplexity AIAI 答案引用透明;学术/新闻/代码垂直搜索;Deep Research 自动多轮报告。英文技术文档检索 · 学术调研 · 竞品速览 · 深度专题报告
Google AI Overviews嵌入 Google 主搜索页;Gemini 驱动;保留蓝链兜底;覆盖范围最广。
深入解读参考:Complete Guide to AI Overview Optimization 2025
无需切换产品的日常搜索 · 快速事实核查 · 概念解释
秘塔搜索零广告;大纲结构答案;深度研究报告;简洁/深入/研究三档。中文学术调研 · 行业洞察报告 · 政策/法规检索 · 无干扰信息获取
百度 AI 搜索文心大模型;中文资源覆盖最广;百科/地图/文库联动;传统搜索兜底中文日常搜索 · 本地生活服务 · 百科知识查询 · 国内政策法规
夸克 AI 搜索通义千问驱动;文件/图片解析;网盘资源检索;移动端体验佳手机端日常问答 · 文件快速解析 · 网盘资源查找 · 阿里生态联动

📌 上手指引

  1. 新手入门:先用 秘塔搜索Perplexity,直接把你以前用搜索引擎搜的问题原文粘进去,对比一下答案质量与来源引用。
  2. 追问技巧:AI 搜索支持多轮对话,搜到初步答案后,追问「能展开说说 X 部分吗?」「有没有反面案例?」效果远好于新开一次搜索。
  3. 深度研究:遇到需要写报告或做调研的场景,优先用 Perplexity Deep Research(英文)或 秘塔深度研究(中文),输入一句话主题即可自动生成带引用的多章节报告。
  4. 引用核查:AI 搜索会有"幻觉"风险,养成点击答案中的来源链接核实关键数据的习惯,尤其是数字、时间、人名等关键事实。
  5. 场景匹配:技术文档/代码 → Perplexity(学术模式);中文无广告信息获取 → 秘塔;手机端快捷 → 夸克。
',2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default}; diff --git a/assets/ai_tools-assistant.md.a4OzjAJ7.lean.js b/assets/ai_tools-assistant.md.r9bHqTO_.lean.js similarity index 99% rename from assets/ai_tools-assistant.md.a4OzjAJ7.lean.js rename to assets/ai_tools-assistant.md.r9bHqTO_.lean.js index 9860a52..fbc78ce 100644 --- a/assets/ai_tools-assistant.md.a4OzjAJ7.lean.js +++ b/assets/ai_tools-assistant.md.r9bHqTO_.lean.js @@ -1 +1 @@ -import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e("",5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e("",8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default}; +import{_ as s,c as l,o as n,d as e,a as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e("",5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e("",8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default}; diff --git a/assets/app.DiEjJ8gz.js b/assets/app.DfYWW83x.js similarity index 99% rename from assets/app.DiEjJ8gz.js rename to assets/app.DfYWW83x.js index abd1e61..b54f34e 100644 --- a/assets/app.DiEjJ8gz.js +++ b/assets/app.DfYWW83x.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.CTr5MXTt.js","assets/chunks/graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js","assets/chunks/baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js","assets/chunks/layout-FfY8zw-4-CVLJrweZ.BPwdqM1F.js","assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js","assets/chunks/clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js","assets/chunks/vitepress-theme-teek.CUuTa6hm.js","assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.DPl3JjN1.js","assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js","assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js","assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js","assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js","assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js","assets/chunks/channel-CYBQPlIk-DDfBD8St.CNciJ1_Y.js","assets/chunks/erDiagram-3M52JZNH-Br8ppgaz-B4QUrJzs.8rN853_B.js","assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.adA6Yltn.js","assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js","assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js","assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js","assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.4mlfbojo.js","assets/chunks/linear-m73w_WNc-FCrKOMM3.W3QlvtjM.js","assets/chunks/init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js","assets/chunks/defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js","assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.BXxB37i9.js","assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.DrfJFWrX.js","assets/chunks/arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js","assets/chunks/ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js","assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.Cm0TOG_e.js","assets/chunks/xychartDiagram-H2YORKM3-RGV0rR_j-DEZyUg2T.BdflZvbN.js","assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DFy2a-9L.js","assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.op8l4Jsx.js","assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.C12oGQvn.js","assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.u1EkA7cz.js","assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.C12oGQvn.js","assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.BO96OnGS.js","assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.Bposhqfo.js","assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.DluC3sue.js","assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.CcjblcaA.js","assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.HonFmolT.js","assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.B_Qa0jXF.js","assets/chunks/cytoscape.esm-wWJwD64P-C103aMMl.DNxweH6G.js","assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BrKyeqfp.js","assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.B-y2STaX.js","assets/chunks/diagram-5UYTHUR4-Ts8DWvW8-DtNiVIiC.BmfI6jgz.js","assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.3E3O7MPS.js","assets/chunks/blockDiagram-6J76NXCF-CKU6xA4s-D8REXnmR.CCvVx74G.js","assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.BmBUXIJr.js","assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BgEzd_En.js"])))=>i.map(i=>d[i]); -import{f as un,p as o7,a4 as eEt,a5 as qU,h as Ot,s as It,a6 as rEt,a7 as nEt,v as Fn,x as vi,q as Bn,c as Rt,o as Mt,a as Bt,Q as iEt,n as _r,u as Ht,a8 as TF,_ as Jb,i as En,a9 as aEt,w as rn,m as pa,z as WU,t as mn,F as kr,A as oEt,g as Gr,d as sEt,k as Qn,l as Si,b as De,aa as Cpt,ab as Bi,C as ti,B as Dn,ac as s7,ad as l7,ae as c7,E as wr,af as u7,ag as h7,W as Df,X as f7,ah as d7,ai as lEt,y as tx,aj as p7,ak as ls,al as g7,N as nn,am as Ba,j as sr,an as ff,e as df,ao as Pf,V as Lp,ap as cEt,aq as uEt,ar as hEt,as as fEt,a2 as Tpt,at as dEt,au as pEt,a1 as gEt,av as mEt,aw as vEt,ax as yEt,ay as bEt}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";var yB=function(t,e){return yB=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},yB(t,e)};function yt(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");yB(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}var xEt=(function(){function t(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return t})(),wEt=(function(){function t(){this.browser=new xEt,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window<"u"}return t})(),fr=new wEt;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(fr.wxa=!0,fr.touchEventsSupported=!0):typeof document>"u"&&typeof self<"u"?fr.worker=!0:!fr.hasGlobalWindow||"Deno"in window?(fr.node=!0,fr.svgSupported=!0):_Et(navigator.userAgent,fr);function _Et(t,e){var r=e.browser,n=t.match(/Firefox\/([\d.]+)/),i=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),a=t.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(t);n&&(r.firefox=!0,r.version=n[1]),i&&(r.ie=!0,r.version=i[1]),a&&(r.edge=!0,r.version=a[1],r.newEdge=+a[1].split(".")[0]>18),o&&(r.weChat=!0),e.svgSupported=typeof SVGRect<"u",e.touchEventsSupported="ontouchstart"in window&&!r.ie&&!r.edge,e.pointerEventsSupported="onpointerdown"in window&&(r.edge||r.ie&&+r.version>=11),e.domSupported=typeof document<"u";var s=document.documentElement.style;e.transform3dSupported=(r.ie&&"transition"in s||r.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||r.ie&&+r.version>=9}var AF=12,Apt="sans-serif",pf=AF+"px "+Apt,SEt=20,kEt=100,CEt="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function TEt(t){var e={};if(typeof JSON>"u")return e;for(var r=0;r=0)s=o*r.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",n[l]+":0",i[c]+":0",n[1-l]+":auto",i[1-c]+":auto",""].join("!important;"),t.appendChild(o),r.push(o)}return r}function UEt(t,e,r){for(var n=r?"invTrans":"trans",i=e[n],a=e.srcCoords,o=[],s=[],l=!0,c=0;c<4;c++){var u=t[c].getBoundingClientRect(),h=2*c,f=u.left,d=u.top;o.push(f,d),l=l&&a&&f===a[h]&&d===a[h+1],s.push(t[c].offsetLeft,t[c].offsetTop)}return l&&i?i:(e.srcCoords=o,e[n]=r?XU(s,o):XU(o,s))}function $pt(t){return t.nodeName.toUpperCase()==="CANVAS"}var YEt=/([&<>"'])/g,XEt={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ya(t){return t==null?"":(t+"").replace(YEt,function(e,r){return XEt[r]})}var ZEt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,W8=[],KEt=fr.browser.firefox&&+fr.browser.version.split(".")[0]<39;function CB(t,e,r,n){return r=r||{},n?KU(t,e,r):KEt&&e.layerX!=null&&e.layerX!==e.offsetX?(r.zrX=e.layerX,r.zrY=e.layerY):e.offsetX!=null?(r.zrX=e.offsetX,r.zrY=e.offsetY):KU(t,e,r),r}function KU(t,e,r){if(fr.domSupported&&t.getBoundingClientRect){var n=e.clientX,i=e.clientY;if($pt(t)){var a=t.getBoundingClientRect();r.zrX=n-a.left,r.zrY=i-a.top;return}else if(kB(W8,t,n,i)){r.zrX=W8[0],r.zrY=W8[1];return}}r.zrX=r.zrY=0}function $F(t){return t||window.event}function Cs(t,e,r){if(e=$F(e),e.zrX!=null)return e;var n=e.type,i=n&&n.indexOf("touch")>=0;if(i){var o=n!=="touchend"?e.targetTouches[0]:e.changedTouches[0];o&&CB(t,o,e,r)}else{CB(t,e,e,r);var a=QEt(e);e.zrDelta=a?a/120:-(e.detail||0)/3}var s=e.button;return e.which==null&&s!==void 0&&ZEt.test(e.type)&&(e.which=s&1?1:s&2?3:s&4?2:0),e}function QEt(t){var e=t.wheelDelta;if(e)return e;var r=t.deltaX,n=t.deltaY;if(r==null||n==null)return e;var i=Math.abs(n!==0?n:r),a=n>0?-1:n<0?1:r>0?-1:1;return 3*i*a}function TB(t,e,r,n){t.addEventListener(e,r,n)}function JEt(t,e,r,n){t.removeEventListener(e,r,n)}var Pu=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function QU(t){return t.which===2||t.which===3}var tLt=(function(){function t(){this._track=[]}return t.prototype.recognize=function(e,r,n){return this._doTrack(e,r,n),this._recognize(e)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(e,r,n){var i=e.touches;if(i){for(var a={points:[],touches:[],target:r,event:e},o=0,s=i.length;o1&&n&&n.length>1){var a=JU(n)/JU(i);!isFinite(a)&&(a=1),e.pinchScale=a;var o=eLt(n);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:t[0].target,event:e}}}}};function is(){return[1,0,0,1,0,0]}function b7(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function BF(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function ku(t,e,r){var n=e[0]*r[0]+e[2]*r[1],i=e[1]*r[0]+e[3]*r[1],a=e[0]*r[2]+e[2]*r[3],o=e[1]*r[2]+e[3]*r[3],s=e[0]*r[4]+e[2]*r[5]+e[4],l=e[1]*r[4]+e[3]*r[5]+e[5];return t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t}function bc(t,e,r){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+r[0],t[5]=e[5]+r[1],t}function e0(t,e,r,n){n===void 0&&(n=[0,0]);var i=e[0],a=e[2],o=e[4],s=e[1],l=e[3],c=e[5],u=Math.sin(r),h=Math.cos(r);return t[0]=i*h+s*u,t[1]=-i*u+s*h,t[2]=a*h+l*u,t[3]=-a*u+h*l,t[4]=h*(o-n[0])+u*(c-n[1])+n[0],t[5]=h*(c-n[1])-u*(o-n[0])+n[1],t}function OF(t,e,r){var n=r[0],i=r[1];return t[0]=e[0]*n,t[1]=e[1]*i,t[2]=e[2]*n,t[3]=e[3]*i,t[4]=e[4]*n,t[5]=e[5]*i,t}function nv(t,e){var r=e[0],n=e[2],i=e[4],a=e[1],o=e[3],s=e[5],l=r*o-a*n;return l?(l=1/l,t[0]=o*l,t[1]=-a*l,t[2]=-n*l,t[3]=r*l,t[4]=(n*s-o*i)*l,t[5]=(a*i-r*s)*l,t):null}function rLt(t){var e=is();return BF(e,t),e}var Ue=(function(){function t(e,r){this.x=e||0,this.y=r||0}return t.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(e,r){return this.x=e,this.y=r,this},t.prototype.equal=function(e){return e.x===this.x&&e.y===this.y},t.prototype.add=function(e){return this.x+=e.x,this.y+=e.y,this},t.prototype.scale=function(e){this.x*=e,this.y*=e},t.prototype.scaleAndAdd=function(e,r){this.x+=e.x*r,this.y+=e.y*r},t.prototype.sub=function(e){return this.x-=e.x,this.y-=e.y,this},t.prototype.dot=function(e){return this.x*e.x+this.y*e.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var e=this.len();return this.x/=e,this.y/=e,this},t.prototype.distance=function(e){var r=this.x-e.x,n=this.y-e.y;return Math.sqrt(r*r+n*n)},t.prototype.distanceSquare=function(e){var r=this.x-e.x,n=this.y-e.y;return r*r+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(e){if(e){var r=this.x,n=this.y;return this.x=e[0]*r+e[2]*n+e[4],this.y=e[1]*r+e[3]*n+e[5],this}},t.prototype.toArray=function(e){return e[0]=this.x,e[1]=this.y,e},t.prototype.fromArray=function(e){this.x=e[0],this.y=e[1]},t.set=function(e,r,n){e.x=r,e.y=n},t.copy=function(e,r){e.x=r.x,e.y=r.y},t.len=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},t.lenSquare=function(e){return e.x*e.x+e.y*e.y},t.dot=function(e,r){return e.x*r.x+e.y*r.y},t.add=function(e,r,n){e.x=r.x+n.x,e.y=r.y+n.y},t.sub=function(e,r,n){e.x=r.x-n.x,e.y=r.y-n.y},t.scale=function(e,r,n){e.x=r.x*n,e.y=r.y*n},t.scaleAndAdd=function(e,r,n,i){e.x=r.x+n.x*i,e.y=r.y+n.y*i},t.lerp=function(e,r,n,i){var a=1-i;e.x=a*r.x+i*n.x,e.y=a*r.y+i*n.y},t})(),Bw=Math.min,Ow=Math.max,Gf=new Ue,Uf=new Ue,Yf=new Ue,Xf=new Ue,Xv=new Ue,Zv=new Ue,Xe=(function(){function t(e,r,n,i){n<0&&(e=e+n,n=-n),i<0&&(r=r+i,i=-i),this.x=e,this.y=r,this.width=n,this.height=i}return t.prototype.union=function(e){var r=Bw(e.x,this.x),n=Bw(e.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Ow(e.x+e.width,this.x+this.width)-r:this.width=e.width,isFinite(this.y)&&isFinite(this.height)?this.height=Ow(e.y+e.height,this.y+this.height)-n:this.height=e.height,this.x=r,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(e){var r=this,n=e.width/r.width,i=e.height/r.height,a=is();return bc(a,a,[-r.x,-r.y]),OF(a,a,[n,i]),bc(a,a,[e.x,e.y]),a},t.prototype.intersect=function(e,r){if(!e)return!1;e instanceof t||(e=t.create(e));var n=this,i=n.x,a=n.x+n.width,o=n.y,s=n.y+n.height,l=e.x,c=e.x+e.width,u=e.y,h=e.y+e.height,f=!(ap&&(p=b,gp&&(p=x,v=n.x&&e<=n.x+n.width&&r>=n.y&&r<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return this.width===0||this.height===0},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(e,r){e.x=r.x,e.y=r.y,e.width=r.width,e.height=r.height},t.applyTransform=function(e,r,n){if(!n){e!==r&&t.copy(e,r);return}if(n[1]<1e-5&&n[1]>-1e-5&&n[2]<1e-5&&n[2]>-1e-5){var i=n[0],a=n[3],o=n[4],s=n[5];e.x=r.x*i+o,e.y=r.y*a+s,e.width=r.width*i,e.height=r.height*a,e.width<0&&(e.x+=e.width,e.width=-e.width),e.height<0&&(e.y+=e.height,e.height=-e.height);return}Gf.x=Yf.x=r.x,Gf.y=Xf.y=r.y,Uf.x=Xf.x=r.x+r.width,Uf.y=Yf.y=r.y+r.height,Gf.transform(n),Xf.transform(n),Uf.transform(n),Yf.transform(n),e.x=Bw(Gf.x,Uf.x,Yf.x,Xf.x),e.y=Bw(Gf.y,Uf.y,Yf.y,Xf.y);var l=Ow(Gf.x,Uf.x,Yf.x,Xf.x),c=Ow(Gf.y,Uf.y,Yf.y,Xf.y);e.width=l-e.x,e.height=c-e.y},t})(),Bpt="silent";function nLt(t,e,r){return{type:t,event:r,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:r.zrX,offsetY:r.zrY,gestureEvent:r.gestureEvent,pinchX:r.pinchX,pinchY:r.pinchY,pinchScale:r.pinchScale,wheelDelta:r.zrDelta,zrByTouch:r.zrByTouch,which:r.which,stop:iLt}}function iLt(){Pu(this.event)}var aLt=(function(t){yt(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.handler=null,r}return e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e})(Ws),Kv=(function(){function t(e,r){this.x=e,this.y=r}return t})(),oLt=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],U8=new Xe(0,0,0,0),Opt=(function(t){yt(e,t);function e(r,n,i,a,o){var s=t.call(this)||this;return s._hovered=new Kv(0,0),s.storage=r,s.painter=n,s.painterRoot=a,s._pointerSize=o,i=i||new aLt,s.proxy=null,s.setHandlerProxy(i),s._draggingMgr=new jEt(s),s}return e.prototype.setHandlerProxy=function(r){this.proxy&&this.proxy.dispose(),r&&(Z(oLt,function(n){r.on&&r.on(n,this[n],this)},this),r.handler=this),this.proxy=r},e.prototype.mousemove=function(r){var n=r.zrX,i=r.zrY,a=zpt(this,n,i),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=a?new Kv(n,i):this.findHover(n,i),c=l.target,u=this.proxy;u.setCursor&&u.setCursor(c?c.cursor:"default"),s&&c!==s&&this.dispatchToElement(o,"mouseout",r),this.dispatchToElement(l,"mousemove",r),c&&c!==s&&this.dispatchToElement(l,"mouseover",r)},e.prototype.mouseout=function(r){var n=r.zrEventControl;n!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",r),n!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:r})},e.prototype.resize=function(){this._hovered=new Kv(0,0)},e.prototype.dispatch=function(r,n){var i=this[r];i&&i.call(this,n)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(r){var n=this.proxy;n.setCursor&&n.setCursor(r)},e.prototype.dispatchToElement=function(r,n,i){r=r||{};var a=r.target;if(!(a&&a.silent)){for(var o="on"+n,s=nLt(n,r,i);a&&(a[o]&&(s.cancelBubble=!!a[o].call(a,s)),a.trigger(n,s),a=a.__hostTarget?a.__hostTarget:a.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(n,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(n,s)}))}},e.prototype.findHover=function(r,n,i){var a=this.storage.getDisplayList(),o=new Kv(r,n);if(tY(a,o,r,n,i),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,c=l/2,u=new Xe(r-c,n-c,l,l),h=a.length-1;h>=0;h--){var f=a[h];f!==i&&!f.ignore&&!f.ignoreCoarsePointer&&(!f.parent||!f.parent.ignoreCoarsePointer)&&(U8.copy(f.getBoundingRect()),f.transform&&U8.applyTransform(f.transform),U8.intersect(u)&&s.push(f))}if(s.length)for(var d=4,p=Math.PI/12,g=Math.PI*2,m=0;m4)return;this._downPoint=null}this.dispatchToElement(a,t,e)}});function sLt(t,e,r){if(t[t.rectHover?"rectContain":"contain"](e,r)){for(var n=t,i=void 0,a=!1;n;){if(n.ignoreClip&&(a=!0),!a){var o=n.getClipPath();if(o&&!o.contain(e,r))return!1}n.silent&&(i=!0);var s=n.__hostTarget;n=s||n.parent}return i?Bpt:!0}return!1}function tY(t,e,r,n,i){for(var a=t.length-1;a>=0;a--){var o=t[a],s=void 0;if(o!==i&&!o.ignore&&(s=sLt(o,r,n))&&(!e.topTarget&&(e.topTarget=o),s!==Bpt)){e.target=o;break}}}function zpt(t,e,r){var n=t.painter;return e<0||e>n.getWidth()||r<0||r>n.getHeight()}var Rpt=32,Qv=7;function lLt(t){for(var e=0;t>=Rpt;)e|=t&1,t>>=1;return t+e}function eY(t,e,r,n){var i=e+1;if(i===r)return 1;if(n(t[i++],t[e])<0){for(;i=0;)i++;return i-e}function cLt(t,e,r){for(r--;e>>1,i(a,t[l])<0?s=l:o=l+1;var c=n-o;switch(c){case 3:t[o+3]=t[o+2];case 2:t[o+2]=t[o+1];case 1:t[o+1]=t[o];break;default:for(;c>0;)t[o+c]=t[o+c-1],c--}t[o]=a}}function Y8(t,e,r,n,i,a){var o=0,s=0,l=1;if(a(t,e[r+i])>0){for(s=n-i;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}else{for(s=i+1;ls&&(l=s);var c=o;o=i-l,l=i-c}for(o++;o>>1);a(t,e[r+u])>0?o=u+1:l=u}return l}function X8(t,e,r,n,i,a){var o=0,s=0,l=1;if(a(t,e[r+i])<0){for(s=i+1;ls&&(l=s);var c=o;o=i-l,l=i-c}else{for(s=n-i;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}for(o++;o>>1);a(t,e[r+u])<0?l=u:o=u+1}return l}function uLt(t,e){var r=Qv,n,i,a=0,o=[];n=[],i=[];function s(d,p){n[a]=d,i[a]=p,a+=1}function l(){for(;a>1;){var d=a-2;if(d>=1&&i[d-1]<=i[d]+i[d+1]||d>=2&&i[d-2]<=i[d]+i[d-1])i[d-1]i[d+1])break;u(d)}}function c(){for(;a>1;){var d=a-2;d>0&&i[d-1]=Qv||C>=Qv);if(E)break;w<0&&(w=0),w+=2}if(r=w,r<1&&(r=1),p===1){for(v=0;v=0;v--)t[_+v]=t[w+v];t[x]=o[b];return}for(var C=r;;){var E=0,k=0,A=!1;do if(e(o[b],t[y])<0){if(t[x--]=t[y--],E++,k=0,--p===0){A=!0;break}}else if(t[x--]=o[b--],k++,E=0,--m===1){A=!0;break}while((E|k)=0;v--)t[_+v]=t[w+v];if(p===0){A=!0;break}}if(t[x--]=o[b--],--m===1){A=!0;break}if(k=m-Y8(t[y],o,0,m,m-1,e),k!==0){for(x-=k,b-=k,m-=k,_=x+1,w=b+1,v=0;v=Qv||k>=Qv);if(A)break;C<0&&(C=0),C+=2}if(r=C,r<1&&(r=1),m===1){for(x-=p,y-=p,_=x+1,w=y+1,v=p-1;v>=0;v--)t[_+v]=t[w+v];t[x]=o[b]}else{if(m===0)throw new Error;for(w=x-(m-1),v=0;vs&&(l=s),rY(t,r,r+l,r+a,e),a=l}o.pushRun(r,a),o.mergeRuns(),i-=a,r+=a}while(i!==0);o.forceMergeRuns()}}var es=1,sy=2,xg=4,nY=!1;function Z8(){nY||(nY=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function iY(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var hLt=(function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=iY}return t.prototype.traverse=function(e,r){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(Z8(),u.z=0),isNaN(u.z2)&&(Z8(),u.z2=0),isNaN(u.zlevel)&&(Z8(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=e.getDecalElement&&e.getDecalElement();h&&this._updateAndAddDisplayable(h,r,n);var f=e.getTextGuideLine();f&&this._updateAndAddDisplayable(f,r,n);var d=e.getTextContent();d&&this._updateAndAddDisplayable(d,r,n)}},t.prototype.addRoot=function(e){e.__zr&&e.__zr.storage===this||this._roots.push(e)},t.prototype.delRoot=function(e){if(e instanceof Array){for(var r=0,n=e.length;r=0&&this._roots.splice(i,1)},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t})(),b5;b5=fr.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)};var Xy={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return .5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return t===0?0:Math.pow(1024,t-1)},exponentialOut:function(t){return t===1?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return t===0?0:t===1?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(-Math.pow(2,-10*(t-1))+2)},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,r=.1,n=.4;return t===0?0:t===1?1:(!r||r<1?(r=1,e=n/4):e=n*Math.asin(1/r)/(2*Math.PI),-(r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)))},elasticOut:function(t){var e,r=.1,n=.4;return t===0?0:t===1?1:(!r||r<1?(r=1,e=n/4):e=n*Math.asin(1/r)/(2*Math.PI),r*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},elasticInOut:function(t){var e,r=.1,n=.4;return t===0?0:t===1?1:(!r||r<1?(r=1,e=n/4):e=n*Math.asin(1/r)/(2*Math.PI),(t*=2)<1?-.5*(r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)):r*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?.5*(t*t*((e+1)*t-e)):.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Xy.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?Xy.bounceIn(t*2)*.5:Xy.bounceOut(t*2-1)*.5+.5}},zw=Math.pow,ef=Math.sqrt,x5=1e-8,Npt=1e-4,aY=ef(3),Rw=1/3,Zl=t0(),Ls=t0(),qg=t0();function jh(t){return t>-x5&&tx5||t<-x5}function Vi(t,e,r,n,i){var a=1-i;return a*a*(a*t+3*i*e)+i*i*(i*n+3*a*r)}function oY(t,e,r,n,i){var a=1-i;return 3*(((e-t)*a+2*(r-e)*i)*a+(n-r)*i*i)}function w5(t,e,r,n,i,a){var o=n+3*(e-r)-t,s=3*(r-e*2+t),l=3*(e-t),c=t-i,u=s*s-3*o*l,h=s*l-9*o*c,f=l*l-3*s*c,d=0;if(jh(u)&&jh(h))if(jh(s))a[0]=0;else{var p=-l/s;p>=0&&p<=1&&(a[d++]=p)}else{var g=h*h-4*u*f;if(jh(g)){var m=h/u,p=-s/o+m,v=-m/2;p>=0&&p<=1&&(a[d++]=p),v>=0&&v<=1&&(a[d++]=v)}else if(g>0){var y=ef(g),b=u*s+1.5*o*(-h+y),x=u*s+1.5*o*(-h-y);b<0?b=-zw(-b,Rw):b=zw(b,Rw),x<0?x=-zw(-x,Rw):x=zw(x,Rw);var p=(-s-(b+x))/(3*o);p>=0&&p<=1&&(a[d++]=p)}else{var w=(2*u*s-3*o*h)/(2*ef(u*u*u)),_=Math.acos(w)/3,C=ef(u),E=Math.cos(_),p=(-s-2*C*E)/(3*o),v=(-s+C*(E+aY*Math.sin(_)))/(3*o),k=(-s+C*(E-aY*Math.sin(_)))/(3*o);p>=0&&p<=1&&(a[d++]=p),v>=0&&v<=1&&(a[d++]=v),k>=0&&k<=1&&(a[d++]=k)}}return d}function Hpt(t,e,r,n,i){var a=6*r-12*e+6*t,o=9*e+3*n-3*t-9*r,s=3*e-3*t,l=0;if(jh(o)){if(Fpt(a)){var c=-s/a;c>=0&&c<=1&&(i[l++]=c)}}else{var u=a*a-4*o*s;if(jh(u))i[0]=-a/(2*o);else if(u>0){var h=ef(u),c=(-a+h)/(2*o),f=(-a-h)/(2*o);c>=0&&c<=1&&(i[l++]=c),f>=0&&f<=1&&(i[l++]=f)}}return l}function mf(t,e,r,n,i,a){var o=(e-t)*i+t,s=(r-e)*i+e,l=(n-r)*i+r,c=(s-o)*i+o,u=(l-s)*i+s,h=(u-c)*i+c;a[0]=t,a[1]=o,a[2]=c,a[3]=h,a[4]=h,a[5]=u,a[6]=l,a[7]=n}function Vpt(t,e,r,n,i,a,o,s,l,c,u){var h,f=.005,d=1/0,p,g,m,v;Zl[0]=l,Zl[1]=c;for(var y=0;y<1;y+=.05)Ls[0]=Vi(t,r,i,o,y),Ls[1]=Vi(e,n,a,s,y),m=pp(Zl,Ls),m=0&&m=0&&c<=1&&(i[l++]=c)}}else{var u=o*o-4*a*s;if(jh(u)){var c=-o/(2*a);c>=0&&c<=1&&(i[l++]=c)}else if(u>0){var h=ef(u),c=(-o+h)/(2*a),f=(-o-h)/(2*a);c>=0&&c<=1&&(i[l++]=c),f>=0&&f<=1&&(i[l++]=f)}}return l}function jpt(t,e,r){var n=t+r-2*e;return n===0?.5:(t-e)/n}function L2(t,e,r,n,i){var a=(e-t)*n+t,o=(r-e)*n+e,s=(o-a)*n+a;i[0]=t,i[1]=a,i[2]=s,i[3]=s,i[4]=o,i[5]=r}function qpt(t,e,r,n,i,a,o,s,l){var c,u=.005,h=1/0;Zl[0]=o,Zl[1]=s;for(var f=0;f<1;f+=.05){Ls[0]=ca(t,r,i,f),Ls[1]=ca(e,n,a,f);var d=pp(Zl,Ls);d=0&&d=1?1:w5(0,n,a,1,l,s)&&Vi(0,i,o,1,s[0])}}}var mLt=(function(){function t(e){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=e.life||1e3,this._delay=e.delay||0,this.loop=e.loop||!1,this.onframe=e.onframe||mi,this.ondestroy=e.ondestroy||mi,this.onrestart=e.onrestart||mi,e.easing&&this.setEasing(e.easing)}return t.prototype.step=function(e,r){if(this._inited||(this._startTime=e+this._delay,this._inited=!0),this._paused){this._pausedTime+=r;return}var n=this._life,i=e-this._startTime-this._pausedTime,a=i/n;a<0&&(a=0),a=Math.min(a,1);var o=this.easingFunc,s=o?o(a):a;if(this.onframe(s),a===1)if(this.loop){var l=i%n;this._startTime=e-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(e){this.easing=e,this.easingFunc=xe(e)?e:Xy[e]||zF(e)},t})(),Wpt=(function(){function t(e){this.value=e}return t})(),vLt=(function(){function t(){this._len=0}return t.prototype.insert=function(e){var r=new Wpt(e);return this.insertEntry(r),r},t.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,e.next=null,this.tail=e):this.head=this.tail=e,this._len++},t.prototype.remove=function(e){var r=e.prev,n=e.next;r?r.next=n:this.head=n,n?n.prev=r:this.tail=r,e.next=e.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t})(),ex=(function(){function t(e){this._list=new vLt,this._maxSize=10,this._map={},this._maxSize=e}return t.prototype.put=function(e,r){var n=this._list,i=this._map,a=null;if(i[e]==null){var o=n.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=n.head;n.remove(l),delete i[l.key],a=l.value,this._lastRemovedEntry=l}s?s.value=r:s=new Wpt(r),s.key=e,n.insertEntry(s),i[e]=s}return a},t.prototype.get=function(e){var r=this._map[e],n=this._list;if(r!=null)return r!==n.tail&&(n.remove(r),n.insertEntry(r)),r.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t})(),sY={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function gl(t){return t=Math.round(t),t<0?0:t>255?255:t}function yLt(t){return t=Math.round(t),t<0?0:t>360?360:t}function I2(t){return t<0?0:t>1?1:t}function K8(t){var e=t;return e.length&&e.charAt(e.length-1)==="%"?gl(parseFloat(e)/100*255):gl(parseInt(e,10))}function gp(t){var e=t;return e.length&&e.charAt(e.length-1)==="%"?I2(parseFloat(e)/100):I2(parseFloat(e))}function Q8(t,e,r){return r<0?r+=1:r>1&&(r-=1),r*6<1?t+(e-t)*r*6:r*2<1?e:r*3<2?t+(e-t)*(2/3-r)*6:t}function qh(t,e,r){return t+(e-t)*r}function ks(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function MB(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var Gpt=new ex(20),Nw=null;function B0(t,e){Nw&&MB(Nw,e),Nw=Gpt.put(t,Nw||e.slice())}function as(t,e){if(t){e=e||[];var r=Gpt.get(t);if(r)return MB(e,r);t=t+"";var n=t.replace(/ /g,"").toLowerCase();if(n in sY)return MB(e,sY[n]),B0(t,e),e;var i=n.length;if(n.charAt(0)==="#"){if(i===4||i===5){var a=parseInt(n.slice(1,4),16);if(!(a>=0&&a<=4095)){ks(e,0,0,0,1);return}return ks(e,(a&3840)>>4|(a&3840)>>8,a&240|(a&240)>>4,a&15|(a&15)<<4,i===5?parseInt(n.slice(4),16)/15:1),B0(t,e),e}else if(i===7||i===9){var a=parseInt(n.slice(1,7),16);if(!(a>=0&&a<=16777215)){ks(e,0,0,0,1);return}return ks(e,(a&16711680)>>16,(a&65280)>>8,a&255,i===9?parseInt(n.slice(7),16)/255:1),B0(t,e),e}return}var o=n.indexOf("("),s=n.indexOf(")");if(o!==-1&&s+1===i){var l=n.substr(0,o),c=n.substr(o+1,s-(o+1)).split(","),u=1;switch(l){case"rgba":if(c.length!==4)return c.length===3?ks(e,+c[0],+c[1],+c[2],1):ks(e,0,0,0,1);u=gp(c.pop());case"rgb":if(c.length>=3)return ks(e,K8(c[0]),K8(c[1]),K8(c[2]),c.length===3?u:gp(c[3])),B0(t,e),e;ks(e,0,0,0,1);return;case"hsla":if(c.length!==4){ks(e,0,0,0,1);return}return c[3]=gp(c[3]),EB(c,e),B0(t,e),e;case"hsl":if(c.length!==3){ks(e,0,0,0,1);return}return EB(c,e),B0(t,e),e;default:return}}ks(e,0,0,0,1)}}function EB(t,e){var r=(parseFloat(t[0])%360+360)%360/360,n=gp(t[1]),i=gp(t[2]),a=i<=.5?i*(n+1):i+n-i*n,o=i*2-a;return e=e||[],ks(e,gl(Q8(o,a,r+1/3)*255),gl(Q8(o,a,r)*255),gl(Q8(o,a,r-1/3)*255),1),t.length===4&&(e[3]=t[3]),e}function bLt(t){if(t){var e=t[0]/255,r=t[1]/255,n=t[2]/255,i=Math.min(e,r,n),a=Math.max(e,r,n),o=a-i,s=(a+i)/2,l,c;if(o===0)l=0,c=0;else{s<.5?c=o/(a+i):c=o/(2-a-i);var u=((a-e)/6+o/2)/o,h=((a-r)/6+o/2)/o,f=((a-n)/6+o/2)/o;e===a?l=f-h:r===a?l=1/3+u-f:n===a&&(l=2/3+h-u),l<0&&(l+=1),l>1&&(l-=1)}var d=[l*360,c,s];return t[3]!=null&&d.push(t[3]),d}}function LB(t,e){var r=as(t);if(r){for(var n=0;n<3;n++)e<0?r[n]=r[n]*(1-e)|0:r[n]=(255-r[n])*e+r[n]|0,r[n]>255?r[n]=255:r[n]<0&&(r[n]=0);return Cu(r,r.length===4?"rgba":"rgb")}}function J8(t,e,r){if(!(!(e&&e.length)||!(t>=0&&t<=1))){r=r||[];var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=e[i],s=e[a],l=n-i;return r[0]=gl(qh(o[0],s[0],l)),r[1]=gl(qh(o[1],s[1],l)),r[2]=gl(qh(o[2],s[2],l)),r[3]=I2(qh(o[3],s[3],l)),r}}function xLt(t,e,r){if(!(!(e&&e.length)||!(t>=0&&t<=1))){var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=as(e[i]),s=as(e[a]),l=n-i,c=Cu([gl(qh(o[0],s[0],l)),gl(qh(o[1],s[1],l)),gl(qh(o[2],s[2],l)),I2(qh(o[3],s[3],l))],"rgba");return r?{color:c,leftIndex:i,rightIndex:a,value:n}:c}}function Zy(t,e,r,n){var i=as(t);if(t)return i=bLt(i),e!=null&&(i[0]=yLt(e)),r!=null&&(i[1]=gp(r)),n!=null&&(i[2]=gp(n)),Cu(EB(i),"rgba")}function _5(t,e){var r=as(t);if(r&&e!=null)return r[3]=I2(e),Cu(r,"rgba")}function Cu(t,e){if(!(!t||!t.length)){var r=t[0]+","+t[1]+","+t[2];return(e==="rgba"||e==="hsva"||e==="hsla")&&(r+=","+t[3]),e+"("+r+")"}}function S5(t,e){var r=as(t);return r?(.299*r[0]+.587*r[1]+.114*r[2])*r[3]/255+(1-r[3])*e:0}var lY=new ex(100);function IB(t){if(ee(t)){var e=lY.get(t);return e||(e=LB(t,-.1),lY.put(t,e)),e}else if(v7(t)){var r=Et({},t);return r.colorStops=$t(t.colorStops,function(n){return{offset:n.offset,color:LB(n.color,-.1)}}),r}return t}var k5=Math.round;function D2(t){var e;if(!t||t==="transparent")t="none";else if(typeof t=="string"&&t.indexOf("rgba")>-1){var r=as(t);r&&(t="rgb("+r[0]+","+r[1]+","+r[2]+")",e=r[3])}return{color:t,opacity:e??1}}var cY=1e-4;function Wh(t){return t-cY}function Fw(t){return k5(t*1e3)/1e3}function DB(t){return k5(t*1e4)/1e4}function wLt(t){return"matrix("+Fw(t[0])+","+Fw(t[1])+","+Fw(t[2])+","+Fw(t[3])+","+DB(t[4])+","+DB(t[5])+")"}var _Lt={left:"start",right:"end",center:"middle",middle:"middle"};function SLt(t,e,r){return r==="top"?t+=e/2:r==="bottom"&&(t-=e/2),t}function kLt(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}function CLt(t){var e=t.style,r=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),r[0],r[1]].join(",")}function Upt(t){return t&&!!t.image}function TLt(t){return t&&!!t.svgElement}function RF(t){return Upt(t)||TLt(t)}function Ypt(t){return t.type==="linear"}function Xpt(t){return t.type==="radial"}function Zpt(t){return t&&(t.type==="linear"||t.type==="radial")}function x7(t){return"url(#"+t+")"}function Kpt(t){var e=t.getGlobalScale(),r=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(r)/Math.log(10)),1)}function Qpt(t){var e=t.x||0,r=t.y||0,n=(t.rotation||0)*G3,i=Oe(t.scaleX,1),a=Oe(t.scaleY,1),o=t.skewX||0,s=t.skewY||0,l=[];return(e||r)&&l.push("translate("+e+"px,"+r+"px)"),n&&l.push("rotate("+n+")"),(i!==1||a!==1)&&l.push("scale("+i+","+a+")"),(o||s)&&l.push("skew("+k5(o*G3)+"deg, "+k5(s*G3)+"deg)"),l.join(" ")}var ALt=(function(){return fr.hasGlobalWindow&&xe(window.btoa)?function(t){return window.btoa(unescape(encodeURIComponent(t)))}:typeof Buffer<"u"?function(t){return Buffer.from(t).toString("base64")}:function(t){return null}})(),PB=Array.prototype.slice;function uu(t,e,r){return(e-t)*r+t}function t9(t,e,r,n){for(var i=e.length,a=0;an?e:t,a=Math.min(r,n),o=i[a-1]||{color:[0,0,0,0],offset:0},s=a;so;if(s)n.length=o;else for(var l=a;l=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(e,r,n){this._needsSort=!0;var i=this.keyframes,a=i.length,o=!1,s=hY,l=r;if(za(r)){var c=ILt(r);s=c,(c===1&&!Nr(r[0])||c===2&&!Nr(r[0][0]))&&(o=!0)}else if(Nr(r)&&!M2(r))s=Vw;else if(ee(r))if(!isNaN(+r))s=Vw;else{var u=as(r);u&&(l=u,s=ly)}else if(v7(r)){var h=Et({},l);h.colorStops=$t(r.colorStops,function(d){return{offset:d.offset,color:as(d.color)}}),Ypt(r)?s=$B:Xpt(r)&&(s=BB),l=h}a===0?this.valType=s:(s!==this.valType||s===hY)&&(o=!0),this.discrete=this.discrete||o;var f={time:e,value:l,rawValue:r,percent:0};return n&&(f.easing=n,f.easingFunc=xe(n)?n:Xy[n]||zF(n)),i.push(f),f},t.prototype.prepare=function(e,r){var n=this.keyframes;this._needsSort&&n.sort(function(g,m){return g.time-m.time});for(var i=this.valType,a=n.length,o=n[a-1],s=this.discrete,l=jw(i),c=fY(i),u=0;u=0&&!(o[u].percent<=r);u--);u=f(u,s-2)}else{for(u=h;ur);u++);u=f(u-1,s-2)}p=o[u+1],d=o[u]}if(d&&p){this._lastFr=u,this._lastFrP=r;var m=p.percent-d.percent,v=m===0?1:f((r-d.percent)/m,1);p.easingFunc&&(v=p.easingFunc(v));var y=n?this._additiveValue:c?Jv:e[l];if((jw(a)||c)&&!y&&(y=this._additiveValue=[]),this.discrete)e[l]=v<1?d.rawValue:p.rawValue;else if(jw(a))a===K3?t9(y,d[i],p[i],v):MLt(y,d[i],p[i],v);else if(fY(a)){var b=d[i],x=p[i],w=a===$B;e[l]={type:w?"linear":"radial",x:uu(b.x,x.x,v),y:uu(b.y,x.y,v),colorStops:$t(b.colorStops,function(C,E){var k=x.colorStops[E];return{offset:uu(C.offset,k.offset,v),color:Z3(t9([],C.color,k.color,v))}}),global:x.global},w?(e[l].x2=uu(b.x2,x.x2,v),e[l].y2=uu(b.y2,x.y2,v)):e[l].r=uu(b.r,x.r,v)}else if(c)t9(y,d[i],p[i],v),n||(e[l]=Z3(y));else{var _=uu(d[i],p[i],v);n?this._additiveValue=_:e[l]=_}n&&this._addToTarget(e)}}},t.prototype._addToTarget=function(e){var r=this.valType,n=this.propName,i=this._additiveValue;r===Vw?e[n]=e[n]+i:r===ly?(as(e[n],Jv),Hw(Jv,Jv,i,1),e[n]=Z3(Jv)):r===K3?Hw(e[n],e[n],i,1):r===Jpt&&uY(e[n],e[n],i,1)},t})(),NF=(function(){function t(e,r,n,i){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=e,this._loop=r,r&&i){LF("Can' use additive animation on looped animation.");return}this._additiveAnimators=i,this._allowDiscrete=n}return t.prototype.getMaxTime=function(){return this._maxTime},t.prototype.getDelay=function(){return this._delay},t.prototype.getLoop=function(){return this._loop},t.prototype.getTarget=function(){return this._target},t.prototype.changeTarget=function(e){this._target=e},t.prototype.when=function(e,r,n){return this.whenWithKeys(e,r,br(r),n)},t.prototype.whenWithKeys=function(e,r,n,i){for(var a=this._tracks,o=0;o0&&l.addKeyframe(0,Ky(c),i),this._trackKeys.push(s)}l.addKeyframe(e,Ky(r[s]),i)}return this._maxTime=Math.max(this._maxTime,e),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(e){return this._maxTime=e,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var e=this._doneCbs;if(e)for(var r=e.length,n=0;n0)){this._started=1;for(var r=this,n=[],i=this._maxTime||0,a=0;a1){var s=o.pop();a.addKeyframe(s.time,e[i]),a.prepare(this._maxTime,a.getAdditiveTrack())}}}},t})();function Lg(){return new Date().getTime()}var PLt=(function(t){yt(e,t);function e(r){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,r=r||{},n.stage=r.stage||{},n}return e.prototype.addClip=function(r){r.animation&&this.removeClip(r),this._head?(this._tail.next=r,r.prev=this._tail,r.next=null,this._tail=r):this._head=this._tail=r,r.animation=this},e.prototype.addAnimator=function(r){r.animation=this;var n=r.getClip();n&&this.addClip(n)},e.prototype.removeClip=function(r){if(r.animation){var n=r.prev,i=r.next;n?n.next=i:this._head=i,i?i.prev=n:this._tail=n,r.next=r.prev=r.animation=null}},e.prototype.removeAnimator=function(r){var n=r.getClip();n&&this.removeClip(n),r.animation=null},e.prototype.update=function(r){for(var n=Lg()-this._pausedTime,i=n-this._time,a=this._head;a;){var o=a.next,s=a.step(n,i);s&&(a.ondestroy(),this.removeClip(a)),a=o}this._time=n,r||(this.trigger("frame",i),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var r=this;this._running=!0;function n(){r._running&&(b5(n),!r._paused&&r.update())}b5(n)},e.prototype.start=function(){this._running||(this._time=Lg(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=Lg(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=Lg()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var r=this._head;r;){var n=r.next;r.prev=r.next=r.animation=null,r=n}this._head=this._tail=null},e.prototype.isFinished=function(){return this._head==null},e.prototype.animate=function(r,n){n=n||{},this.start();var i=new NF(r,n.loop);return this.addAnimator(i),i},e})(Ws),$Lt=300,e9=fr.domSupported,r9=(function(){var t=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],r={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},n=$t(t,function(i){var a=i.replace("mouse","pointer");return r.hasOwnProperty(a)?a:i});return{mouse:t,touch:e,pointer:n}})(),dY={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},pY=!1;function OB(t){var e=t.pointerType;return e==="pen"||e==="touch"}function BLt(t){t.touching=!0,t.touchTimer!=null&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout(function(){t.touching=!1,t.touchTimer=null},700)}function n9(t){t&&(t.zrByTouch=!0)}function OLt(t,e){return Cs(t.dom,new zLt(t,e),!0)}function t0t(t,e){for(var r=e,n=!1;r&&r.nodeType!==9&&!(n=r.domBelongToZr||r!==e&&r===t.painterRoot);)r=r.parentNode;return n}var zLt=(function(){function t(e,r){this.stopPropagation=mi,this.stopImmediatePropagation=mi,this.preventDefault=mi,this.type=r.type,this.target=this.currentTarget=e.dom,this.pointerType=r.pointerType,this.clientX=r.clientX,this.clientY=r.clientY}return t})(),il={mousedown:function(t){t=Cs(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=Cs(this.dom,t);var e=this.__mayPointerCapture;e&&(t.zrX!==e[0]||t.zrY!==e[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=Cs(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){t=Cs(this.dom,t);var e=t.toElement||t.relatedTarget;t0t(this,e)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){pY=!0,t=Cs(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){pY||(t=Cs(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){t=Cs(this.dom,t),n9(t),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),il.mousemove.call(this,t),il.mousedown.call(this,t)},touchmove:function(t){t=Cs(this.dom,t),n9(t),this.handler.processGesture(t,"change"),il.mousemove.call(this,t)},touchend:function(t){t=Cs(this.dom,t),n9(t),this.handler.processGesture(t,"end"),il.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<$Lt&&il.click.call(this,t)},pointerdown:function(t){il.mousedown.call(this,t)},pointermove:function(t){OB(t)||il.mousemove.call(this,t)},pointerup:function(t){il.mouseup.call(this,t)},pointerout:function(t){OB(t)||il.mouseout.call(this,t)}};Z(["click","dblclick","contextmenu"],function(t){il[t]=function(e){e=Cs(this.dom,e),this.trigger(t,e)}});var zB={pointermove:function(t){OB(t)||zB.mousemove.call(this,t)},pointerup:function(t){zB.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function RLt(t,e){var r=e.domHandlers;fr.pointerEventsSupported?Z(r9.pointer,function(n){Q3(e,n,function(i){r[n].call(t,i)})}):(fr.touchEventsSupported&&Z(r9.touch,function(n){Q3(e,n,function(i){r[n].call(t,i),BLt(e)})}),Z(r9.mouse,function(n){Q3(e,n,function(i){i=$F(i),e.touching||r[n].call(t,i)})}))}function NLt(t,e){fr.pointerEventsSupported?Z(dY.pointer,r):fr.touchEventsSupported||Z(dY.mouse,r);function r(n){function i(a){a=$F(a),t0t(t,a.target)||(a=OLt(t,a),e.domHandlers[n].call(t,a))}Q3(e,n,i,{capture:!0})}}function Q3(t,e,r,n){t.mounted[e]=r,t.listenerOpts[e]=n,TB(t.domTarget,e,r,n)}function i9(t){var e=t.mounted;for(var r in e)e.hasOwnProperty(r)&&JEt(t.domTarget,r,e[r],t.listenerOpts[r]);t.mounted={}}var gY=(function(){function t(e,r){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=e,this.domHandlers=r}return t})(),FLt=(function(t){yt(e,t);function e(r,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=r,i.painterRoot=n,i._localHandlerScope=new gY(r,il),e9&&(i._globalHandlerScope=new gY(document,zB)),RLt(i,i._localHandlerScope),i}return e.prototype.dispose=function(){i9(this._localHandlerScope),e9&&i9(this._globalHandlerScope)},e.prototype.setCursor=function(r){this.dom.style&&(this.dom.style.cursor=r||"default")},e.prototype.__togglePointerCapture=function(r){if(this.__mayPointerCapture=null,e9&&+this.__pointerCapturing^+r){this.__pointerCapturing=r;var n=this._globalHandlerScope;r?NLt(this,n):i9(n)}},e})(Ws),e0t=1;fr.hasGlobalWindow&&(e0t=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var C5=e0t,RB=.4,NB="#333",FB="#ccc",HLt="#eee",mY=b7,vY=5e-5;function Zf(t){return t>vY||t<-vY}var Kf=[],O0=[],a9=is(),o9=Math.abs,mu=(function(){function t(){}return t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.setPosition=function(e){this.x=e[0],this.y=e[1]},t.prototype.setScale=function(e){this.scaleX=e[0],this.scaleY=e[1]},t.prototype.setSkew=function(e){this.skewX=e[0],this.skewY=e[1]},t.prototype.setOrigin=function(e){this.originX=e[0],this.originY=e[1]},t.prototype.needLocalTransform=function(){return Zf(this.rotation)||Zf(this.x)||Zf(this.y)||Zf(this.scaleX-1)||Zf(this.scaleY-1)||Zf(this.skewX)||Zf(this.skewY)},t.prototype.updateTransform=function(){var e=this.parent&&this.parent.transform,r=this.needLocalTransform(),n=this.transform;if(!(r||e)){n&&(mY(n),this.invTransform=null);return}n=n||is(),r?this.getLocalTransform(n):mY(n),e&&(r?ku(n,e,n):BF(n,e)),this.transform=n,this._resolveGlobalScaleRatio(n)},t.prototype._resolveGlobalScaleRatio=function(e){var r=this.globalScaleRatio;if(r!=null&&r!==1){this.getGlobalScale(Kf);var n=Kf[0]<0?-1:1,i=Kf[1]<0?-1:1,a=((Kf[0]-n)*r+n)/Kf[0]||0,o=((Kf[1]-i)*r+i)/Kf[1]||0;e[0]*=a,e[1]*=a,e[2]*=o,e[3]*=o}this.invTransform=this.invTransform||is(),nv(this.invTransform,e)},t.prototype.getComputedTransform=function(){for(var e=this,r=[];e;)r.push(e),e=e.parent;for(;e=r.pop();)e.updateTransform();return this.transform},t.prototype.setLocalTransform=function(e){if(e){var r=e[0]*e[0]+e[1]*e[1],n=e[2]*e[2]+e[3]*e[3],i=Math.atan2(e[1],e[0]),a=Math.PI/2+i-Math.atan2(e[3],e[2]);n=Math.sqrt(n)*Math.cos(a),r=Math.sqrt(r),this.skewX=a,this.skewY=0,this.rotation=-i,this.x=+e[4],this.y=+e[5],this.scaleX=r,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var e=this.parent,r=this.transform;e&&e.transform&&(e.invTransform=e.invTransform||is(),ku(O0,e.invTransform,r),r=O0);var n=this.originX,i=this.originY;(n||i)&&(a9[4]=n,a9[5]=i,ku(O0,r,a9),O0[4]-=n,O0[5]-=i,r=O0),this.setLocalTransform(r)}},t.prototype.getGlobalScale=function(e){var r=this.transform;return e=e||[],r?(e[0]=Math.sqrt(r[0]*r[0]+r[1]*r[1]),e[1]=Math.sqrt(r[2]*r[2]+r[3]*r[3]),r[0]<0&&(e[0]=-e[0]),r[3]<0&&(e[1]=-e[1]),e):(e[0]=1,e[1]=1,e)},t.prototype.transformCoordToLocal=function(e,r){var n=[e,r],i=this.invTransform;return i&&Ca(n,n,i),n},t.prototype.transformCoordToGlobal=function(e,r){var n=[e,r],i=this.transform;return i&&Ca(n,n,i),n},t.prototype.getLineScale=function(){var e=this.transform;return e&&o9(e[0]-1)>1e-10&&o9(e[3]-1)>1e-10?Math.sqrt(o9(e[0]*e[3]-e[2]*e[1])):1},t.prototype.copyTransform=function(e){r0t(this,e)},t.getLocalTransform=function(e,r){r=r||[];var n=e.originX||0,i=e.originY||0,a=e.scaleX,o=e.scaleY,s=e.anchorX,l=e.anchorY,c=e.rotation||0,u=e.x,h=e.y,f=e.skewX?Math.tan(e.skewX):0,d=e.skewY?Math.tan(-e.skewY):0;if(n||i||s||l){var p=n+s,g=i+l;r[4]=-p*a-f*g*o,r[5]=-g*o-d*p*a}else r[4]=r[5]=0;return r[0]=a,r[3]=o,r[1]=d*a,r[2]=f*o,c&&e0(r,r,c),r[4]+=n+u,r[5]+=i+h,r},t.initDefaultProps=(function(){var e=t.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0})(),t})(),xc=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function r0t(t,e){for(var r=0;ri.map(i=>d[i]); +import{f as un,p as o7,a4 as eEt,a5 as qU,h as Ot,s as It,a6 as rEt,a7 as nEt,v as Fn,x as vi,q as Bn,c as Rt,o as Mt,a as Bt,Q as iEt,n as _r,u as Ht,a8 as TF,_ as Jb,i as En,a9 as aEt,w as rn,m as pa,z as WU,t as mn,F as kr,A as oEt,g as Gr,d as sEt,k as Qn,l as Si,b as De,aa as Cpt,ab as Bi,C as ti,B as Dn,ac as s7,ad as l7,ae as c7,E as wr,af as u7,ag as h7,W as Df,X as f7,ah as d7,ai as lEt,y as tx,aj as p7,ak as ls,al as g7,N as nn,am as Ba,j as sr,an as ff,e as df,ao as Pf,V as Lp,ap as cEt,aq as uEt,ar as hEt,as as fEt,a2 as Tpt,at as dEt,au as pEt,a1 as gEt,av as mEt,aw as vEt,ax as yEt,ay as bEt}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";var yB=function(t,e){return yB=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},yB(t,e)};function yt(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");yB(t,e);function r(){this.constructor=t}t.prototype=e===null?Object.create(e):(r.prototype=e.prototype,new r)}var xEt=(function(){function t(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return t})(),wEt=(function(){function t(){this.browser=new xEt,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window<"u"}return t})(),fr=new wEt;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(fr.wxa=!0,fr.touchEventsSupported=!0):typeof document>"u"&&typeof self<"u"?fr.worker=!0:!fr.hasGlobalWindow||"Deno"in window?(fr.node=!0,fr.svgSupported=!0):_Et(navigator.userAgent,fr);function _Et(t,e){var r=e.browser,n=t.match(/Firefox\/([\d.]+)/),i=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),a=t.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(t);n&&(r.firefox=!0,r.version=n[1]),i&&(r.ie=!0,r.version=i[1]),a&&(r.edge=!0,r.version=a[1],r.newEdge=+a[1].split(".")[0]>18),o&&(r.weChat=!0),e.svgSupported=typeof SVGRect<"u",e.touchEventsSupported="ontouchstart"in window&&!r.ie&&!r.edge,e.pointerEventsSupported="onpointerdown"in window&&(r.edge||r.ie&&+r.version>=11),e.domSupported=typeof document<"u";var s=document.documentElement.style;e.transform3dSupported=(r.ie&&"transition"in s||r.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||r.ie&&+r.version>=9}var AF=12,Apt="sans-serif",pf=AF+"px "+Apt,SEt=20,kEt=100,CEt="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function TEt(t){var e={};if(typeof JSON>"u")return e;for(var r=0;r=0)s=o*r.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",n[l]+":0",i[c]+":0",n[1-l]+":auto",i[1-c]+":auto",""].join("!important;"),t.appendChild(o),r.push(o)}return r}function UEt(t,e,r){for(var n=r?"invTrans":"trans",i=e[n],a=e.srcCoords,o=[],s=[],l=!0,c=0;c<4;c++){var u=t[c].getBoundingClientRect(),h=2*c,f=u.left,d=u.top;o.push(f,d),l=l&&a&&f===a[h]&&d===a[h+1],s.push(t[c].offsetLeft,t[c].offsetTop)}return l&&i?i:(e.srcCoords=o,e[n]=r?XU(s,o):XU(o,s))}function $pt(t){return t.nodeName.toUpperCase()==="CANVAS"}var YEt=/([&<>"'])/g,XEt={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ya(t){return t==null?"":(t+"").replace(YEt,function(e,r){return XEt[r]})}var ZEt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,W8=[],KEt=fr.browser.firefox&&+fr.browser.version.split(".")[0]<39;function CB(t,e,r,n){return r=r||{},n?KU(t,e,r):KEt&&e.layerX!=null&&e.layerX!==e.offsetX?(r.zrX=e.layerX,r.zrY=e.layerY):e.offsetX!=null?(r.zrX=e.offsetX,r.zrY=e.offsetY):KU(t,e,r),r}function KU(t,e,r){if(fr.domSupported&&t.getBoundingClientRect){var n=e.clientX,i=e.clientY;if($pt(t)){var a=t.getBoundingClientRect();r.zrX=n-a.left,r.zrY=i-a.top;return}else if(kB(W8,t,n,i)){r.zrX=W8[0],r.zrY=W8[1];return}}r.zrX=r.zrY=0}function $F(t){return t||window.event}function Cs(t,e,r){if(e=$F(e),e.zrX!=null)return e;var n=e.type,i=n&&n.indexOf("touch")>=0;if(i){var o=n!=="touchend"?e.targetTouches[0]:e.changedTouches[0];o&&CB(t,o,e,r)}else{CB(t,e,e,r);var a=QEt(e);e.zrDelta=a?a/120:-(e.detail||0)/3}var s=e.button;return e.which==null&&s!==void 0&&ZEt.test(e.type)&&(e.which=s&1?1:s&2?3:s&4?2:0),e}function QEt(t){var e=t.wheelDelta;if(e)return e;var r=t.deltaX,n=t.deltaY;if(r==null||n==null)return e;var i=Math.abs(n!==0?n:r),a=n>0?-1:n<0?1:r>0?-1:1;return 3*i*a}function TB(t,e,r,n){t.addEventListener(e,r,n)}function JEt(t,e,r,n){t.removeEventListener(e,r,n)}var Pu=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function QU(t){return t.which===2||t.which===3}var tLt=(function(){function t(){this._track=[]}return t.prototype.recognize=function(e,r,n){return this._doTrack(e,r,n),this._recognize(e)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(e,r,n){var i=e.touches;if(i){for(var a={points:[],touches:[],target:r,event:e},o=0,s=i.length;o1&&n&&n.length>1){var a=JU(n)/JU(i);!isFinite(a)&&(a=1),e.pinchScale=a;var o=eLt(n);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:t[0].target,event:e}}}}};function is(){return[1,0,0,1,0,0]}function b7(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function BF(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function ku(t,e,r){var n=e[0]*r[0]+e[2]*r[1],i=e[1]*r[0]+e[3]*r[1],a=e[0]*r[2]+e[2]*r[3],o=e[1]*r[2]+e[3]*r[3],s=e[0]*r[4]+e[2]*r[5]+e[4],l=e[1]*r[4]+e[3]*r[5]+e[5];return t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t}function bc(t,e,r){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+r[0],t[5]=e[5]+r[1],t}function e0(t,e,r,n){n===void 0&&(n=[0,0]);var i=e[0],a=e[2],o=e[4],s=e[1],l=e[3],c=e[5],u=Math.sin(r),h=Math.cos(r);return t[0]=i*h+s*u,t[1]=-i*u+s*h,t[2]=a*h+l*u,t[3]=-a*u+h*l,t[4]=h*(o-n[0])+u*(c-n[1])+n[0],t[5]=h*(c-n[1])-u*(o-n[0])+n[1],t}function OF(t,e,r){var n=r[0],i=r[1];return t[0]=e[0]*n,t[1]=e[1]*i,t[2]=e[2]*n,t[3]=e[3]*i,t[4]=e[4]*n,t[5]=e[5]*i,t}function nv(t,e){var r=e[0],n=e[2],i=e[4],a=e[1],o=e[3],s=e[5],l=r*o-a*n;return l?(l=1/l,t[0]=o*l,t[1]=-a*l,t[2]=-n*l,t[3]=r*l,t[4]=(n*s-o*i)*l,t[5]=(a*i-r*s)*l,t):null}function rLt(t){var e=is();return BF(e,t),e}var Ue=(function(){function t(e,r){this.x=e||0,this.y=r||0}return t.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(e,r){return this.x=e,this.y=r,this},t.prototype.equal=function(e){return e.x===this.x&&e.y===this.y},t.prototype.add=function(e){return this.x+=e.x,this.y+=e.y,this},t.prototype.scale=function(e){this.x*=e,this.y*=e},t.prototype.scaleAndAdd=function(e,r){this.x+=e.x*r,this.y+=e.y*r},t.prototype.sub=function(e){return this.x-=e.x,this.y-=e.y,this},t.prototype.dot=function(e){return this.x*e.x+this.y*e.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var e=this.len();return this.x/=e,this.y/=e,this},t.prototype.distance=function(e){var r=this.x-e.x,n=this.y-e.y;return Math.sqrt(r*r+n*n)},t.prototype.distanceSquare=function(e){var r=this.x-e.x,n=this.y-e.y;return r*r+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(e){if(e){var r=this.x,n=this.y;return this.x=e[0]*r+e[2]*n+e[4],this.y=e[1]*r+e[3]*n+e[5],this}},t.prototype.toArray=function(e){return e[0]=this.x,e[1]=this.y,e},t.prototype.fromArray=function(e){this.x=e[0],this.y=e[1]},t.set=function(e,r,n){e.x=r,e.y=n},t.copy=function(e,r){e.x=r.x,e.y=r.y},t.len=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},t.lenSquare=function(e){return e.x*e.x+e.y*e.y},t.dot=function(e,r){return e.x*r.x+e.y*r.y},t.add=function(e,r,n){e.x=r.x+n.x,e.y=r.y+n.y},t.sub=function(e,r,n){e.x=r.x-n.x,e.y=r.y-n.y},t.scale=function(e,r,n){e.x=r.x*n,e.y=r.y*n},t.scaleAndAdd=function(e,r,n,i){e.x=r.x+n.x*i,e.y=r.y+n.y*i},t.lerp=function(e,r,n,i){var a=1-i;e.x=a*r.x+i*n.x,e.y=a*r.y+i*n.y},t})(),Bw=Math.min,Ow=Math.max,Gf=new Ue,Uf=new Ue,Yf=new Ue,Xf=new Ue,Xv=new Ue,Zv=new Ue,Xe=(function(){function t(e,r,n,i){n<0&&(e=e+n,n=-n),i<0&&(r=r+i,i=-i),this.x=e,this.y=r,this.width=n,this.height=i}return t.prototype.union=function(e){var r=Bw(e.x,this.x),n=Bw(e.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Ow(e.x+e.width,this.x+this.width)-r:this.width=e.width,isFinite(this.y)&&isFinite(this.height)?this.height=Ow(e.y+e.height,this.y+this.height)-n:this.height=e.height,this.x=r,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(e){var r=this,n=e.width/r.width,i=e.height/r.height,a=is();return bc(a,a,[-r.x,-r.y]),OF(a,a,[n,i]),bc(a,a,[e.x,e.y]),a},t.prototype.intersect=function(e,r){if(!e)return!1;e instanceof t||(e=t.create(e));var n=this,i=n.x,a=n.x+n.width,o=n.y,s=n.y+n.height,l=e.x,c=e.x+e.width,u=e.y,h=e.y+e.height,f=!(ap&&(p=b,gp&&(p=x,v=n.x&&e<=n.x+n.width&&r>=n.y&&r<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return this.width===0||this.height===0},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(e,r){e.x=r.x,e.y=r.y,e.width=r.width,e.height=r.height},t.applyTransform=function(e,r,n){if(!n){e!==r&&t.copy(e,r);return}if(n[1]<1e-5&&n[1]>-1e-5&&n[2]<1e-5&&n[2]>-1e-5){var i=n[0],a=n[3],o=n[4],s=n[5];e.x=r.x*i+o,e.y=r.y*a+s,e.width=r.width*i,e.height=r.height*a,e.width<0&&(e.x+=e.width,e.width=-e.width),e.height<0&&(e.y+=e.height,e.height=-e.height);return}Gf.x=Yf.x=r.x,Gf.y=Xf.y=r.y,Uf.x=Xf.x=r.x+r.width,Uf.y=Yf.y=r.y+r.height,Gf.transform(n),Xf.transform(n),Uf.transform(n),Yf.transform(n),e.x=Bw(Gf.x,Uf.x,Yf.x,Xf.x),e.y=Bw(Gf.y,Uf.y,Yf.y,Xf.y);var l=Ow(Gf.x,Uf.x,Yf.x,Xf.x),c=Ow(Gf.y,Uf.y,Yf.y,Xf.y);e.width=l-e.x,e.height=c-e.y},t})(),Bpt="silent";function nLt(t,e,r){return{type:t,event:r,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:r.zrX,offsetY:r.zrY,gestureEvent:r.gestureEvent,pinchX:r.pinchX,pinchY:r.pinchY,pinchScale:r.pinchScale,wheelDelta:r.zrDelta,zrByTouch:r.zrByTouch,which:r.which,stop:iLt}}function iLt(){Pu(this.event)}var aLt=(function(t){yt(e,t);function e(){var r=t!==null&&t.apply(this,arguments)||this;return r.handler=null,r}return e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e})(Ws),Kv=(function(){function t(e,r){this.x=e,this.y=r}return t})(),oLt=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],U8=new Xe(0,0,0,0),Opt=(function(t){yt(e,t);function e(r,n,i,a,o){var s=t.call(this)||this;return s._hovered=new Kv(0,0),s.storage=r,s.painter=n,s.painterRoot=a,s._pointerSize=o,i=i||new aLt,s.proxy=null,s.setHandlerProxy(i),s._draggingMgr=new jEt(s),s}return e.prototype.setHandlerProxy=function(r){this.proxy&&this.proxy.dispose(),r&&(Z(oLt,function(n){r.on&&r.on(n,this[n],this)},this),r.handler=this),this.proxy=r},e.prototype.mousemove=function(r){var n=r.zrX,i=r.zrY,a=zpt(this,n,i),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=a?new Kv(n,i):this.findHover(n,i),c=l.target,u=this.proxy;u.setCursor&&u.setCursor(c?c.cursor:"default"),s&&c!==s&&this.dispatchToElement(o,"mouseout",r),this.dispatchToElement(l,"mousemove",r),c&&c!==s&&this.dispatchToElement(l,"mouseover",r)},e.prototype.mouseout=function(r){var n=r.zrEventControl;n!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",r),n!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:r})},e.prototype.resize=function(){this._hovered=new Kv(0,0)},e.prototype.dispatch=function(r,n){var i=this[r];i&&i.call(this,n)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(r){var n=this.proxy;n.setCursor&&n.setCursor(r)},e.prototype.dispatchToElement=function(r,n,i){r=r||{};var a=r.target;if(!(a&&a.silent)){for(var o="on"+n,s=nLt(n,r,i);a&&(a[o]&&(s.cancelBubble=!!a[o].call(a,s)),a.trigger(n,s),a=a.__hostTarget?a.__hostTarget:a.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(n,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(n,s)}))}},e.prototype.findHover=function(r,n,i){var a=this.storage.getDisplayList(),o=new Kv(r,n);if(tY(a,o,r,n,i),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,c=l/2,u=new Xe(r-c,n-c,l,l),h=a.length-1;h>=0;h--){var f=a[h];f!==i&&!f.ignore&&!f.ignoreCoarsePointer&&(!f.parent||!f.parent.ignoreCoarsePointer)&&(U8.copy(f.getBoundingRect()),f.transform&&U8.applyTransform(f.transform),U8.intersect(u)&&s.push(f))}if(s.length)for(var d=4,p=Math.PI/12,g=Math.PI*2,m=0;m4)return;this._downPoint=null}this.dispatchToElement(a,t,e)}});function sLt(t,e,r){if(t[t.rectHover?"rectContain":"contain"](e,r)){for(var n=t,i=void 0,a=!1;n;){if(n.ignoreClip&&(a=!0),!a){var o=n.getClipPath();if(o&&!o.contain(e,r))return!1}n.silent&&(i=!0);var s=n.__hostTarget;n=s||n.parent}return i?Bpt:!0}return!1}function tY(t,e,r,n,i){for(var a=t.length-1;a>=0;a--){var o=t[a],s=void 0;if(o!==i&&!o.ignore&&(s=sLt(o,r,n))&&(!e.topTarget&&(e.topTarget=o),s!==Bpt)){e.target=o;break}}}function zpt(t,e,r){var n=t.painter;return e<0||e>n.getWidth()||r<0||r>n.getHeight()}var Rpt=32,Qv=7;function lLt(t){for(var e=0;t>=Rpt;)e|=t&1,t>>=1;return t+e}function eY(t,e,r,n){var i=e+1;if(i===r)return 1;if(n(t[i++],t[e])<0){for(;i=0;)i++;return i-e}function cLt(t,e,r){for(r--;e>>1,i(a,t[l])<0?s=l:o=l+1;var c=n-o;switch(c){case 3:t[o+3]=t[o+2];case 2:t[o+2]=t[o+1];case 1:t[o+1]=t[o];break;default:for(;c>0;)t[o+c]=t[o+c-1],c--}t[o]=a}}function Y8(t,e,r,n,i,a){var o=0,s=0,l=1;if(a(t,e[r+i])>0){for(s=n-i;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}else{for(s=i+1;ls&&(l=s);var c=o;o=i-l,l=i-c}for(o++;o>>1);a(t,e[r+u])>0?o=u+1:l=u}return l}function X8(t,e,r,n,i,a){var o=0,s=0,l=1;if(a(t,e[r+i])<0){for(s=i+1;ls&&(l=s);var c=o;o=i-l,l=i-c}else{for(s=n-i;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}for(o++;o>>1);a(t,e[r+u])<0?l=u:o=u+1}return l}function uLt(t,e){var r=Qv,n,i,a=0,o=[];n=[],i=[];function s(d,p){n[a]=d,i[a]=p,a+=1}function l(){for(;a>1;){var d=a-2;if(d>=1&&i[d-1]<=i[d]+i[d+1]||d>=2&&i[d-2]<=i[d]+i[d-1])i[d-1]i[d+1])break;u(d)}}function c(){for(;a>1;){var d=a-2;d>0&&i[d-1]=Qv||C>=Qv);if(E)break;w<0&&(w=0),w+=2}if(r=w,r<1&&(r=1),p===1){for(v=0;v=0;v--)t[_+v]=t[w+v];t[x]=o[b];return}for(var C=r;;){var E=0,k=0,A=!1;do if(e(o[b],t[y])<0){if(t[x--]=t[y--],E++,k=0,--p===0){A=!0;break}}else if(t[x--]=o[b--],k++,E=0,--m===1){A=!0;break}while((E|k)=0;v--)t[_+v]=t[w+v];if(p===0){A=!0;break}}if(t[x--]=o[b--],--m===1){A=!0;break}if(k=m-Y8(t[y],o,0,m,m-1,e),k!==0){for(x-=k,b-=k,m-=k,_=x+1,w=b+1,v=0;v=Qv||k>=Qv);if(A)break;C<0&&(C=0),C+=2}if(r=C,r<1&&(r=1),m===1){for(x-=p,y-=p,_=x+1,w=y+1,v=p-1;v>=0;v--)t[_+v]=t[w+v];t[x]=o[b]}else{if(m===0)throw new Error;for(w=x-(m-1),v=0;vs&&(l=s),rY(t,r,r+l,r+a,e),a=l}o.pushRun(r,a),o.mergeRuns(),i-=a,r+=a}while(i!==0);o.forceMergeRuns()}}var es=1,sy=2,xg=4,nY=!1;function Z8(){nY||(nY=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function iY(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var hLt=(function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=iY}return t.prototype.traverse=function(e,r){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(Z8(),u.z=0),isNaN(u.z2)&&(Z8(),u.z2=0),isNaN(u.zlevel)&&(Z8(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=e.getDecalElement&&e.getDecalElement();h&&this._updateAndAddDisplayable(h,r,n);var f=e.getTextGuideLine();f&&this._updateAndAddDisplayable(f,r,n);var d=e.getTextContent();d&&this._updateAndAddDisplayable(d,r,n)}},t.prototype.addRoot=function(e){e.__zr&&e.__zr.storage===this||this._roots.push(e)},t.prototype.delRoot=function(e){if(e instanceof Array){for(var r=0,n=e.length;r=0&&this._roots.splice(i,1)},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t})(),b5;b5=fr.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)};var Xy={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return .5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return t===0?0:Math.pow(1024,t-1)},exponentialOut:function(t){return t===1?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return t===0?0:t===1?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(-Math.pow(2,-10*(t-1))+2)},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,r=.1,n=.4;return t===0?0:t===1?1:(!r||r<1?(r=1,e=n/4):e=n*Math.asin(1/r)/(2*Math.PI),-(r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)))},elasticOut:function(t){var e,r=.1,n=.4;return t===0?0:t===1?1:(!r||r<1?(r=1,e=n/4):e=n*Math.asin(1/r)/(2*Math.PI),r*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},elasticInOut:function(t){var e,r=.1,n=.4;return t===0?0:t===1?1:(!r||r<1?(r=1,e=n/4):e=n*Math.asin(1/r)/(2*Math.PI),(t*=2)<1?-.5*(r*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)):r*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?.5*(t*t*((e+1)*t-e)):.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Xy.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?Xy.bounceIn(t*2)*.5:Xy.bounceOut(t*2-1)*.5+.5}},zw=Math.pow,ef=Math.sqrt,x5=1e-8,Npt=1e-4,aY=ef(3),Rw=1/3,Zl=t0(),Ls=t0(),qg=t0();function jh(t){return t>-x5&&tx5||t<-x5}function Vi(t,e,r,n,i){var a=1-i;return a*a*(a*t+3*i*e)+i*i*(i*n+3*a*r)}function oY(t,e,r,n,i){var a=1-i;return 3*(((e-t)*a+2*(r-e)*i)*a+(n-r)*i*i)}function w5(t,e,r,n,i,a){var o=n+3*(e-r)-t,s=3*(r-e*2+t),l=3*(e-t),c=t-i,u=s*s-3*o*l,h=s*l-9*o*c,f=l*l-3*s*c,d=0;if(jh(u)&&jh(h))if(jh(s))a[0]=0;else{var p=-l/s;p>=0&&p<=1&&(a[d++]=p)}else{var g=h*h-4*u*f;if(jh(g)){var m=h/u,p=-s/o+m,v=-m/2;p>=0&&p<=1&&(a[d++]=p),v>=0&&v<=1&&(a[d++]=v)}else if(g>0){var y=ef(g),b=u*s+1.5*o*(-h+y),x=u*s+1.5*o*(-h-y);b<0?b=-zw(-b,Rw):b=zw(b,Rw),x<0?x=-zw(-x,Rw):x=zw(x,Rw);var p=(-s-(b+x))/(3*o);p>=0&&p<=1&&(a[d++]=p)}else{var w=(2*u*s-3*o*h)/(2*ef(u*u*u)),_=Math.acos(w)/3,C=ef(u),E=Math.cos(_),p=(-s-2*C*E)/(3*o),v=(-s+C*(E+aY*Math.sin(_)))/(3*o),k=(-s+C*(E-aY*Math.sin(_)))/(3*o);p>=0&&p<=1&&(a[d++]=p),v>=0&&v<=1&&(a[d++]=v),k>=0&&k<=1&&(a[d++]=k)}}return d}function Hpt(t,e,r,n,i){var a=6*r-12*e+6*t,o=9*e+3*n-3*t-9*r,s=3*e-3*t,l=0;if(jh(o)){if(Fpt(a)){var c=-s/a;c>=0&&c<=1&&(i[l++]=c)}}else{var u=a*a-4*o*s;if(jh(u))i[0]=-a/(2*o);else if(u>0){var h=ef(u),c=(-a+h)/(2*o),f=(-a-h)/(2*o);c>=0&&c<=1&&(i[l++]=c),f>=0&&f<=1&&(i[l++]=f)}}return l}function mf(t,e,r,n,i,a){var o=(e-t)*i+t,s=(r-e)*i+e,l=(n-r)*i+r,c=(s-o)*i+o,u=(l-s)*i+s,h=(u-c)*i+c;a[0]=t,a[1]=o,a[2]=c,a[3]=h,a[4]=h,a[5]=u,a[6]=l,a[7]=n}function Vpt(t,e,r,n,i,a,o,s,l,c,u){var h,f=.005,d=1/0,p,g,m,v;Zl[0]=l,Zl[1]=c;for(var y=0;y<1;y+=.05)Ls[0]=Vi(t,r,i,o,y),Ls[1]=Vi(e,n,a,s,y),m=pp(Zl,Ls),m=0&&m=0&&c<=1&&(i[l++]=c)}}else{var u=o*o-4*a*s;if(jh(u)){var c=-o/(2*a);c>=0&&c<=1&&(i[l++]=c)}else if(u>0){var h=ef(u),c=(-o+h)/(2*a),f=(-o-h)/(2*a);c>=0&&c<=1&&(i[l++]=c),f>=0&&f<=1&&(i[l++]=f)}}return l}function jpt(t,e,r){var n=t+r-2*e;return n===0?.5:(t-e)/n}function L2(t,e,r,n,i){var a=(e-t)*n+t,o=(r-e)*n+e,s=(o-a)*n+a;i[0]=t,i[1]=a,i[2]=s,i[3]=s,i[4]=o,i[5]=r}function qpt(t,e,r,n,i,a,o,s,l){var c,u=.005,h=1/0;Zl[0]=o,Zl[1]=s;for(var f=0;f<1;f+=.05){Ls[0]=ca(t,r,i,f),Ls[1]=ca(e,n,a,f);var d=pp(Zl,Ls);d=0&&d=1?1:w5(0,n,a,1,l,s)&&Vi(0,i,o,1,s[0])}}}var mLt=(function(){function t(e){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=e.life||1e3,this._delay=e.delay||0,this.loop=e.loop||!1,this.onframe=e.onframe||mi,this.ondestroy=e.ondestroy||mi,this.onrestart=e.onrestart||mi,e.easing&&this.setEasing(e.easing)}return t.prototype.step=function(e,r){if(this._inited||(this._startTime=e+this._delay,this._inited=!0),this._paused){this._pausedTime+=r;return}var n=this._life,i=e-this._startTime-this._pausedTime,a=i/n;a<0&&(a=0),a=Math.min(a,1);var o=this.easingFunc,s=o?o(a):a;if(this.onframe(s),a===1)if(this.loop){var l=i%n;this._startTime=e-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(e){this.easing=e,this.easingFunc=xe(e)?e:Xy[e]||zF(e)},t})(),Wpt=(function(){function t(e){this.value=e}return t})(),vLt=(function(){function t(){this._len=0}return t.prototype.insert=function(e){var r=new Wpt(e);return this.insertEntry(r),r},t.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,e.next=null,this.tail=e):this.head=this.tail=e,this._len++},t.prototype.remove=function(e){var r=e.prev,n=e.next;r?r.next=n:this.head=n,n?n.prev=r:this.tail=r,e.next=e.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t})(),ex=(function(){function t(e){this._list=new vLt,this._maxSize=10,this._map={},this._maxSize=e}return t.prototype.put=function(e,r){var n=this._list,i=this._map,a=null;if(i[e]==null){var o=n.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=n.head;n.remove(l),delete i[l.key],a=l.value,this._lastRemovedEntry=l}s?s.value=r:s=new Wpt(r),s.key=e,n.insertEntry(s),i[e]=s}return a},t.prototype.get=function(e){var r=this._map[e],n=this._list;if(r!=null)return r!==n.tail&&(n.remove(r),n.insertEntry(r)),r.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t})(),sY={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function gl(t){return t=Math.round(t),t<0?0:t>255?255:t}function yLt(t){return t=Math.round(t),t<0?0:t>360?360:t}function I2(t){return t<0?0:t>1?1:t}function K8(t){var e=t;return e.length&&e.charAt(e.length-1)==="%"?gl(parseFloat(e)/100*255):gl(parseInt(e,10))}function gp(t){var e=t;return e.length&&e.charAt(e.length-1)==="%"?I2(parseFloat(e)/100):I2(parseFloat(e))}function Q8(t,e,r){return r<0?r+=1:r>1&&(r-=1),r*6<1?t+(e-t)*r*6:r*2<1?e:r*3<2?t+(e-t)*(2/3-r)*6:t}function qh(t,e,r){return t+(e-t)*r}function ks(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t}function MB(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var Gpt=new ex(20),Nw=null;function B0(t,e){Nw&&MB(Nw,e),Nw=Gpt.put(t,Nw||e.slice())}function as(t,e){if(t){e=e||[];var r=Gpt.get(t);if(r)return MB(e,r);t=t+"";var n=t.replace(/ /g,"").toLowerCase();if(n in sY)return MB(e,sY[n]),B0(t,e),e;var i=n.length;if(n.charAt(0)==="#"){if(i===4||i===5){var a=parseInt(n.slice(1,4),16);if(!(a>=0&&a<=4095)){ks(e,0,0,0,1);return}return ks(e,(a&3840)>>4|(a&3840)>>8,a&240|(a&240)>>4,a&15|(a&15)<<4,i===5?parseInt(n.slice(4),16)/15:1),B0(t,e),e}else if(i===7||i===9){var a=parseInt(n.slice(1,7),16);if(!(a>=0&&a<=16777215)){ks(e,0,0,0,1);return}return ks(e,(a&16711680)>>16,(a&65280)>>8,a&255,i===9?parseInt(n.slice(7),16)/255:1),B0(t,e),e}return}var o=n.indexOf("("),s=n.indexOf(")");if(o!==-1&&s+1===i){var l=n.substr(0,o),c=n.substr(o+1,s-(o+1)).split(","),u=1;switch(l){case"rgba":if(c.length!==4)return c.length===3?ks(e,+c[0],+c[1],+c[2],1):ks(e,0,0,0,1);u=gp(c.pop());case"rgb":if(c.length>=3)return ks(e,K8(c[0]),K8(c[1]),K8(c[2]),c.length===3?u:gp(c[3])),B0(t,e),e;ks(e,0,0,0,1);return;case"hsla":if(c.length!==4){ks(e,0,0,0,1);return}return c[3]=gp(c[3]),EB(c,e),B0(t,e),e;case"hsl":if(c.length!==3){ks(e,0,0,0,1);return}return EB(c,e),B0(t,e),e;default:return}}ks(e,0,0,0,1)}}function EB(t,e){var r=(parseFloat(t[0])%360+360)%360/360,n=gp(t[1]),i=gp(t[2]),a=i<=.5?i*(n+1):i+n-i*n,o=i*2-a;return e=e||[],ks(e,gl(Q8(o,a,r+1/3)*255),gl(Q8(o,a,r)*255),gl(Q8(o,a,r-1/3)*255),1),t.length===4&&(e[3]=t[3]),e}function bLt(t){if(t){var e=t[0]/255,r=t[1]/255,n=t[2]/255,i=Math.min(e,r,n),a=Math.max(e,r,n),o=a-i,s=(a+i)/2,l,c;if(o===0)l=0,c=0;else{s<.5?c=o/(a+i):c=o/(2-a-i);var u=((a-e)/6+o/2)/o,h=((a-r)/6+o/2)/o,f=((a-n)/6+o/2)/o;e===a?l=f-h:r===a?l=1/3+u-f:n===a&&(l=2/3+h-u),l<0&&(l+=1),l>1&&(l-=1)}var d=[l*360,c,s];return t[3]!=null&&d.push(t[3]),d}}function LB(t,e){var r=as(t);if(r){for(var n=0;n<3;n++)e<0?r[n]=r[n]*(1-e)|0:r[n]=(255-r[n])*e+r[n]|0,r[n]>255?r[n]=255:r[n]<0&&(r[n]=0);return Cu(r,r.length===4?"rgba":"rgb")}}function J8(t,e,r){if(!(!(e&&e.length)||!(t>=0&&t<=1))){r=r||[];var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=e[i],s=e[a],l=n-i;return r[0]=gl(qh(o[0],s[0],l)),r[1]=gl(qh(o[1],s[1],l)),r[2]=gl(qh(o[2],s[2],l)),r[3]=I2(qh(o[3],s[3],l)),r}}function xLt(t,e,r){if(!(!(e&&e.length)||!(t>=0&&t<=1))){var n=t*(e.length-1),i=Math.floor(n),a=Math.ceil(n),o=as(e[i]),s=as(e[a]),l=n-i,c=Cu([gl(qh(o[0],s[0],l)),gl(qh(o[1],s[1],l)),gl(qh(o[2],s[2],l)),I2(qh(o[3],s[3],l))],"rgba");return r?{color:c,leftIndex:i,rightIndex:a,value:n}:c}}function Zy(t,e,r,n){var i=as(t);if(t)return i=bLt(i),e!=null&&(i[0]=yLt(e)),r!=null&&(i[1]=gp(r)),n!=null&&(i[2]=gp(n)),Cu(EB(i),"rgba")}function _5(t,e){var r=as(t);if(r&&e!=null)return r[3]=I2(e),Cu(r,"rgba")}function Cu(t,e){if(!(!t||!t.length)){var r=t[0]+","+t[1]+","+t[2];return(e==="rgba"||e==="hsva"||e==="hsla")&&(r+=","+t[3]),e+"("+r+")"}}function S5(t,e){var r=as(t);return r?(.299*r[0]+.587*r[1]+.114*r[2])*r[3]/255+(1-r[3])*e:0}var lY=new ex(100);function IB(t){if(ee(t)){var e=lY.get(t);return e||(e=LB(t,-.1),lY.put(t,e)),e}else if(v7(t)){var r=Et({},t);return r.colorStops=$t(t.colorStops,function(n){return{offset:n.offset,color:LB(n.color,-.1)}}),r}return t}var k5=Math.round;function D2(t){var e;if(!t||t==="transparent")t="none";else if(typeof t=="string"&&t.indexOf("rgba")>-1){var r=as(t);r&&(t="rgb("+r[0]+","+r[1]+","+r[2]+")",e=r[3])}return{color:t,opacity:e??1}}var cY=1e-4;function Wh(t){return t-cY}function Fw(t){return k5(t*1e3)/1e3}function DB(t){return k5(t*1e4)/1e4}function wLt(t){return"matrix("+Fw(t[0])+","+Fw(t[1])+","+Fw(t[2])+","+Fw(t[3])+","+DB(t[4])+","+DB(t[5])+")"}var _Lt={left:"start",right:"end",center:"middle",middle:"middle"};function SLt(t,e,r){return r==="top"?t+=e/2:r==="bottom"&&(t-=e/2),t}function kLt(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}function CLt(t){var e=t.style,r=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),r[0],r[1]].join(",")}function Upt(t){return t&&!!t.image}function TLt(t){return t&&!!t.svgElement}function RF(t){return Upt(t)||TLt(t)}function Ypt(t){return t.type==="linear"}function Xpt(t){return t.type==="radial"}function Zpt(t){return t&&(t.type==="linear"||t.type==="radial")}function x7(t){return"url(#"+t+")"}function Kpt(t){var e=t.getGlobalScale(),r=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(r)/Math.log(10)),1)}function Qpt(t){var e=t.x||0,r=t.y||0,n=(t.rotation||0)*G3,i=Oe(t.scaleX,1),a=Oe(t.scaleY,1),o=t.skewX||0,s=t.skewY||0,l=[];return(e||r)&&l.push("translate("+e+"px,"+r+"px)"),n&&l.push("rotate("+n+")"),(i!==1||a!==1)&&l.push("scale("+i+","+a+")"),(o||s)&&l.push("skew("+k5(o*G3)+"deg, "+k5(s*G3)+"deg)"),l.join(" ")}var ALt=(function(){return fr.hasGlobalWindow&&xe(window.btoa)?function(t){return window.btoa(unescape(encodeURIComponent(t)))}:typeof Buffer<"u"?function(t){return Buffer.from(t).toString("base64")}:function(t){return null}})(),PB=Array.prototype.slice;function uu(t,e,r){return(e-t)*r+t}function t9(t,e,r,n){for(var i=e.length,a=0;an?e:t,a=Math.min(r,n),o=i[a-1]||{color:[0,0,0,0],offset:0},s=a;so;if(s)n.length=o;else for(var l=a;l=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(e,r,n){this._needsSort=!0;var i=this.keyframes,a=i.length,o=!1,s=hY,l=r;if(za(r)){var c=ILt(r);s=c,(c===1&&!Nr(r[0])||c===2&&!Nr(r[0][0]))&&(o=!0)}else if(Nr(r)&&!M2(r))s=Vw;else if(ee(r))if(!isNaN(+r))s=Vw;else{var u=as(r);u&&(l=u,s=ly)}else if(v7(r)){var h=Et({},l);h.colorStops=$t(r.colorStops,function(d){return{offset:d.offset,color:as(d.color)}}),Ypt(r)?s=$B:Xpt(r)&&(s=BB),l=h}a===0?this.valType=s:(s!==this.valType||s===hY)&&(o=!0),this.discrete=this.discrete||o;var f={time:e,value:l,rawValue:r,percent:0};return n&&(f.easing=n,f.easingFunc=xe(n)?n:Xy[n]||zF(n)),i.push(f),f},t.prototype.prepare=function(e,r){var n=this.keyframes;this._needsSort&&n.sort(function(g,m){return g.time-m.time});for(var i=this.valType,a=n.length,o=n[a-1],s=this.discrete,l=jw(i),c=fY(i),u=0;u=0&&!(o[u].percent<=r);u--);u=f(u,s-2)}else{for(u=h;ur);u++);u=f(u-1,s-2)}p=o[u+1],d=o[u]}if(d&&p){this._lastFr=u,this._lastFrP=r;var m=p.percent-d.percent,v=m===0?1:f((r-d.percent)/m,1);p.easingFunc&&(v=p.easingFunc(v));var y=n?this._additiveValue:c?Jv:e[l];if((jw(a)||c)&&!y&&(y=this._additiveValue=[]),this.discrete)e[l]=v<1?d.rawValue:p.rawValue;else if(jw(a))a===K3?t9(y,d[i],p[i],v):MLt(y,d[i],p[i],v);else if(fY(a)){var b=d[i],x=p[i],w=a===$B;e[l]={type:w?"linear":"radial",x:uu(b.x,x.x,v),y:uu(b.y,x.y,v),colorStops:$t(b.colorStops,function(C,E){var k=x.colorStops[E];return{offset:uu(C.offset,k.offset,v),color:Z3(t9([],C.color,k.color,v))}}),global:x.global},w?(e[l].x2=uu(b.x2,x.x2,v),e[l].y2=uu(b.y2,x.y2,v)):e[l].r=uu(b.r,x.r,v)}else if(c)t9(y,d[i],p[i],v),n||(e[l]=Z3(y));else{var _=uu(d[i],p[i],v);n?this._additiveValue=_:e[l]=_}n&&this._addToTarget(e)}}},t.prototype._addToTarget=function(e){var r=this.valType,n=this.propName,i=this._additiveValue;r===Vw?e[n]=e[n]+i:r===ly?(as(e[n],Jv),Hw(Jv,Jv,i,1),e[n]=Z3(Jv)):r===K3?Hw(e[n],e[n],i,1):r===Jpt&&uY(e[n],e[n],i,1)},t})(),NF=(function(){function t(e,r,n,i){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=e,this._loop=r,r&&i){LF("Can' use additive animation on looped animation.");return}this._additiveAnimators=i,this._allowDiscrete=n}return t.prototype.getMaxTime=function(){return this._maxTime},t.prototype.getDelay=function(){return this._delay},t.prototype.getLoop=function(){return this._loop},t.prototype.getTarget=function(){return this._target},t.prototype.changeTarget=function(e){this._target=e},t.prototype.when=function(e,r,n){return this.whenWithKeys(e,r,br(r),n)},t.prototype.whenWithKeys=function(e,r,n,i){for(var a=this._tracks,o=0;o0&&l.addKeyframe(0,Ky(c),i),this._trackKeys.push(s)}l.addKeyframe(e,Ky(r[s]),i)}return this._maxTime=Math.max(this._maxTime,e),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(e){return this._maxTime=e,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var e=this._doneCbs;if(e)for(var r=e.length,n=0;n0)){this._started=1;for(var r=this,n=[],i=this._maxTime||0,a=0;a1){var s=o.pop();a.addKeyframe(s.time,e[i]),a.prepare(this._maxTime,a.getAdditiveTrack())}}}},t})();function Lg(){return new Date().getTime()}var PLt=(function(t){yt(e,t);function e(r){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,r=r||{},n.stage=r.stage||{},n}return e.prototype.addClip=function(r){r.animation&&this.removeClip(r),this._head?(this._tail.next=r,r.prev=this._tail,r.next=null,this._tail=r):this._head=this._tail=r,r.animation=this},e.prototype.addAnimator=function(r){r.animation=this;var n=r.getClip();n&&this.addClip(n)},e.prototype.removeClip=function(r){if(r.animation){var n=r.prev,i=r.next;n?n.next=i:this._head=i,i?i.prev=n:this._tail=n,r.next=r.prev=r.animation=null}},e.prototype.removeAnimator=function(r){var n=r.getClip();n&&this.removeClip(n),r.animation=null},e.prototype.update=function(r){for(var n=Lg()-this._pausedTime,i=n-this._time,a=this._head;a;){var o=a.next,s=a.step(n,i);s&&(a.ondestroy(),this.removeClip(a)),a=o}this._time=n,r||(this.trigger("frame",i),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var r=this;this._running=!0;function n(){r._running&&(b5(n),!r._paused&&r.update())}b5(n)},e.prototype.start=function(){this._running||(this._time=Lg(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=Lg(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=Lg()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var r=this._head;r;){var n=r.next;r.prev=r.next=r.animation=null,r=n}this._head=this._tail=null},e.prototype.isFinished=function(){return this._head==null},e.prototype.animate=function(r,n){n=n||{},this.start();var i=new NF(r,n.loop);return this.addAnimator(i),i},e})(Ws),$Lt=300,e9=fr.domSupported,r9=(function(){var t=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],r={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},n=$t(t,function(i){var a=i.replace("mouse","pointer");return r.hasOwnProperty(a)?a:i});return{mouse:t,touch:e,pointer:n}})(),dY={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},pY=!1;function OB(t){var e=t.pointerType;return e==="pen"||e==="touch"}function BLt(t){t.touching=!0,t.touchTimer!=null&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout(function(){t.touching=!1,t.touchTimer=null},700)}function n9(t){t&&(t.zrByTouch=!0)}function OLt(t,e){return Cs(t.dom,new zLt(t,e),!0)}function t0t(t,e){for(var r=e,n=!1;r&&r.nodeType!==9&&!(n=r.domBelongToZr||r!==e&&r===t.painterRoot);)r=r.parentNode;return n}var zLt=(function(){function t(e,r){this.stopPropagation=mi,this.stopImmediatePropagation=mi,this.preventDefault=mi,this.type=r.type,this.target=this.currentTarget=e.dom,this.pointerType=r.pointerType,this.clientX=r.clientX,this.clientY=r.clientY}return t})(),il={mousedown:function(t){t=Cs(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=Cs(this.dom,t);var e=this.__mayPointerCapture;e&&(t.zrX!==e[0]||t.zrY!==e[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=Cs(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){t=Cs(this.dom,t);var e=t.toElement||t.relatedTarget;t0t(this,e)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){pY=!0,t=Cs(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){pY||(t=Cs(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){t=Cs(this.dom,t),n9(t),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),il.mousemove.call(this,t),il.mousedown.call(this,t)},touchmove:function(t){t=Cs(this.dom,t),n9(t),this.handler.processGesture(t,"change"),il.mousemove.call(this,t)},touchend:function(t){t=Cs(this.dom,t),n9(t),this.handler.processGesture(t,"end"),il.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<$Lt&&il.click.call(this,t)},pointerdown:function(t){il.mousedown.call(this,t)},pointermove:function(t){OB(t)||il.mousemove.call(this,t)},pointerup:function(t){il.mouseup.call(this,t)},pointerout:function(t){OB(t)||il.mouseout.call(this,t)}};Z(["click","dblclick","contextmenu"],function(t){il[t]=function(e){e=Cs(this.dom,e),this.trigger(t,e)}});var zB={pointermove:function(t){OB(t)||zB.mousemove.call(this,t)},pointerup:function(t){zB.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function RLt(t,e){var r=e.domHandlers;fr.pointerEventsSupported?Z(r9.pointer,function(n){Q3(e,n,function(i){r[n].call(t,i)})}):(fr.touchEventsSupported&&Z(r9.touch,function(n){Q3(e,n,function(i){r[n].call(t,i),BLt(e)})}),Z(r9.mouse,function(n){Q3(e,n,function(i){i=$F(i),e.touching||r[n].call(t,i)})}))}function NLt(t,e){fr.pointerEventsSupported?Z(dY.pointer,r):fr.touchEventsSupported||Z(dY.mouse,r);function r(n){function i(a){a=$F(a),t0t(t,a.target)||(a=OLt(t,a),e.domHandlers[n].call(t,a))}Q3(e,n,i,{capture:!0})}}function Q3(t,e,r,n){t.mounted[e]=r,t.listenerOpts[e]=n,TB(t.domTarget,e,r,n)}function i9(t){var e=t.mounted;for(var r in e)e.hasOwnProperty(r)&&JEt(t.domTarget,r,e[r],t.listenerOpts[r]);t.mounted={}}var gY=(function(){function t(e,r){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=e,this.domHandlers=r}return t})(),FLt=(function(t){yt(e,t);function e(r,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=r,i.painterRoot=n,i._localHandlerScope=new gY(r,il),e9&&(i._globalHandlerScope=new gY(document,zB)),RLt(i,i._localHandlerScope),i}return e.prototype.dispose=function(){i9(this._localHandlerScope),e9&&i9(this._globalHandlerScope)},e.prototype.setCursor=function(r){this.dom.style&&(this.dom.style.cursor=r||"default")},e.prototype.__togglePointerCapture=function(r){if(this.__mayPointerCapture=null,e9&&+this.__pointerCapturing^+r){this.__pointerCapturing=r;var n=this._globalHandlerScope;r?NLt(this,n):i9(n)}},e})(Ws),e0t=1;fr.hasGlobalWindow&&(e0t=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var C5=e0t,RB=.4,NB="#333",FB="#ccc",HLt="#eee",mY=b7,vY=5e-5;function Zf(t){return t>vY||t<-vY}var Kf=[],O0=[],a9=is(),o9=Math.abs,mu=(function(){function t(){}return t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.setPosition=function(e){this.x=e[0],this.y=e[1]},t.prototype.setScale=function(e){this.scaleX=e[0],this.scaleY=e[1]},t.prototype.setSkew=function(e){this.skewX=e[0],this.skewY=e[1]},t.prototype.setOrigin=function(e){this.originX=e[0],this.originY=e[1]},t.prototype.needLocalTransform=function(){return Zf(this.rotation)||Zf(this.x)||Zf(this.y)||Zf(this.scaleX-1)||Zf(this.scaleY-1)||Zf(this.skewX)||Zf(this.skewY)},t.prototype.updateTransform=function(){var e=this.parent&&this.parent.transform,r=this.needLocalTransform(),n=this.transform;if(!(r||e)){n&&(mY(n),this.invTransform=null);return}n=n||is(),r?this.getLocalTransform(n):mY(n),e&&(r?ku(n,e,n):BF(n,e)),this.transform=n,this._resolveGlobalScaleRatio(n)},t.prototype._resolveGlobalScaleRatio=function(e){var r=this.globalScaleRatio;if(r!=null&&r!==1){this.getGlobalScale(Kf);var n=Kf[0]<0?-1:1,i=Kf[1]<0?-1:1,a=((Kf[0]-n)*r+n)/Kf[0]||0,o=((Kf[1]-i)*r+i)/Kf[1]||0;e[0]*=a,e[1]*=a,e[2]*=o,e[3]*=o}this.invTransform=this.invTransform||is(),nv(this.invTransform,e)},t.prototype.getComputedTransform=function(){for(var e=this,r=[];e;)r.push(e),e=e.parent;for(;e=r.pop();)e.updateTransform();return this.transform},t.prototype.setLocalTransform=function(e){if(e){var r=e[0]*e[0]+e[1]*e[1],n=e[2]*e[2]+e[3]*e[3],i=Math.atan2(e[1],e[0]),a=Math.PI/2+i-Math.atan2(e[3],e[2]);n=Math.sqrt(n)*Math.cos(a),r=Math.sqrt(r),this.skewX=a,this.skewY=0,this.rotation=-i,this.x=+e[4],this.y=+e[5],this.scaleX=r,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var e=this.parent,r=this.transform;e&&e.transform&&(e.invTransform=e.invTransform||is(),ku(O0,e.invTransform,r),r=O0);var n=this.originX,i=this.originY;(n||i)&&(a9[4]=n,a9[5]=i,ku(O0,r,a9),O0[4]-=n,O0[5]-=i,r=O0),this.setLocalTransform(r)}},t.prototype.getGlobalScale=function(e){var r=this.transform;return e=e||[],r?(e[0]=Math.sqrt(r[0]*r[0]+r[1]*r[1]),e[1]=Math.sqrt(r[2]*r[2]+r[3]*r[3]),r[0]<0&&(e[0]=-e[0]),r[3]<0&&(e[1]=-e[1]),e):(e[0]=1,e[1]=1,e)},t.prototype.transformCoordToLocal=function(e,r){var n=[e,r],i=this.invTransform;return i&&Ca(n,n,i),n},t.prototype.transformCoordToGlobal=function(e,r){var n=[e,r],i=this.transform;return i&&Ca(n,n,i),n},t.prototype.getLineScale=function(){var e=this.transform;return e&&o9(e[0]-1)>1e-10&&o9(e[3]-1)>1e-10?Math.sqrt(o9(e[0]*e[3]-e[2]*e[1])):1},t.prototype.copyTransform=function(e){r0t(this,e)},t.getLocalTransform=function(e,r){r=r||[];var n=e.originX||0,i=e.originY||0,a=e.scaleX,o=e.scaleY,s=e.anchorX,l=e.anchorY,c=e.rotation||0,u=e.x,h=e.y,f=e.skewX?Math.tan(e.skewX):0,d=e.skewY?Math.tan(-e.skewY):0;if(n||i||s||l){var p=n+s,g=i+l;r[4]=-p*a-f*g*o,r[5]=-g*o-d*p*a}else r[4]=r[5]=0;return r[0]=a,r[3]=o,r[1]=d*a,r[2]=f*o,c&&e0(r,r,c),r[4]+=n+u,r[5]+=i+h,r},t.initDefaultProps=(function(){var e=t.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0})(),t})(),xc=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function r0t(t,e){for(var r=0;r=0?parseFloat(t)/100*e:parseFloat(t):t}function T5(t,e,r){var n=e.position||"inside",i=e.distance!=null?e.distance:5,a=r.height,o=r.width,s=a/2,l=r.x,c=r.y,u="left",h="top";if(n instanceof Array)l+=bl(n[0],r.width),c+=bl(n[1],r.height),u=null,h=null;else switch(n){case"left":l-=i,c+=s,u="right",h="middle";break;case"right":l+=i+o,c+=s,h="middle";break;case"top":l+=o/2,c-=i,u="center",h="bottom";break;case"bottom":l+=o/2,c+=a+i,u="center";break;case"inside":l+=o/2,c+=s,u="center",h="middle";break;case"insideLeft":l+=i,c+=s,h="middle";break;case"insideRight":l+=o-i,c+=s,u="right",h="middle";break;case"insideTop":l+=o/2,c+=i,u="center";break;case"insideBottom":l+=o/2,c+=a-i,u="center",h="bottom";break;case"insideTopLeft":l+=i,c+=i;break;case"insideTopRight":l+=o-i,c+=i,u="right";break;case"insideBottomLeft":l+=i,c+=a-i,h="bottom";break;case"insideBottomRight":l+=o-i,c+=a-i,u="right",h="bottom";break}return t=t||{},t.x=l,t.y=c,t.align=u,t.verticalAlign=h,t}var s9="__zr_normal__",l9=xc.concat(["ignore"]),VLt=yc(xc,function(t,e){return t[e]=!0,t},{ignore:!1}),z0={},jLt=new Xe(0,0,0,0),_7=(function(){function t(e){this.id=Lpt(),this.animators=[],this.currentStates=[],this.states={},this._init(e)}return t.prototype._init=function(e){this.attr(e)},t.prototype.drift=function(e,r,n){switch(this.draggable){case"horizontal":r=0;break;case"vertical":e=0;break}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=e,i[5]+=r,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(e){var r=this._textContent;if(r&&(!r.ignore||e)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,a=r.innerTransformable,o=void 0,s=void 0,l=!1;a.parent=i?this:null;var c=!1;if(a.copyTransform(r),n.position!=null){var u=jLt;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),i||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(z0,n,u):T5(z0,n,u),a.x=z0.x,a.y=z0.y,o=z0.align,s=z0.verticalAlign;var h=n.origin;if(h&&n.rotation!=null){var f=void 0,d=void 0;h==="center"?(f=u.width*.5,d=u.height*.5):(f=bl(h[0],u.width),d=bl(h[1],u.height)),c=!0,a.originX=-a.x+f+(i?0:u.x),a.originY=-a.y+d+(i?0:u.y)}}n.rotation!=null&&(a.rotation=n.rotation);var p=n.offset;p&&(a.x+=p[0],a.y+=p[1],c||(a.originX=-p[0],a.originY=-p[1]));var g=n.inside==null?typeof n.position=="string"&&n.position.indexOf("inside")>=0:n.inside,m=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),v=void 0,y=void 0,b=void 0;g&&this.canBeInsideText()?(v=n.insideFill,y=n.insideStroke,(v==null||v==="auto")&&(v=this.getInsideTextFill()),(y==null||y==="auto")&&(y=this.getInsideTextStroke(v),b=!0)):(v=n.outsideFill,y=n.outsideStroke,(v==null||v==="auto")&&(v=this.getOutsideFill()),(y==null||y==="auto")&&(y=this.getOutsideStroke(v),b=!0)),v=v||"#000",(v!==m.fill||y!==m.stroke||b!==m.autoStroke||o!==m.align||s!==m.verticalAlign)&&(l=!0,m.fill=v,m.stroke=y,m.autoStroke=b,m.align=o,m.verticalAlign=s,r.setDefaultTextStyle(m)),r.__dirty|=es,l&&r.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(e){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?FB:NB},t.prototype.getOutsideStroke=function(e){var r=this.__zr&&this.__zr.getBackgroundColor(),n=typeof r=="string"&&as(r);n||(n=[255,255,255,1]);for(var i=n[3],a=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(a?0:255)*(1-i);return n[3]=1,Cu(n,"rgba")},t.prototype.traverse=function(e,r){},t.prototype.attrKV=function(e,r){e==="textConfig"?this.setTextConfig(r):e==="textContent"?this.setTextContent(r):e==="clipPath"?this.setClipPath(r):e==="extra"?(this.extra=this.extra||{},Et(this.extra,r)):this[e]=r},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(e,r){if(typeof e=="string")this.attrKV(e,r);else if(Ce(e))for(var n=e,i=br(n),a=0;a0},t.prototype.getState=function(e){return this.states[e]},t.prototype.ensureState=function(e){var r=this.states;return r[e]||(r[e]={}),r[e]},t.prototype.clearStates=function(e){this.useState(s9,!1,e)},t.prototype.useState=function(e,r,n,i){var a=e===s9,o=this.hasState();if(!(!o&&a)){var s=this.currentStates,l=this.stateTransition;if(!(Je(s,e)>=0&&(r||s.length===1))){var c;if(this.stateProxy&&!a&&(c=this.stateProxy(e)),c||(c=this.states&&this.states[e]),!c&&!a){LF("State "+e+" not exists.");return}a||this.saveCurrentToNormalState(c);var u=!!(c&&c.hoverLayer||i);u&&this._toggleHoverLayerFlag(!0),this._applyStateObj(e,c,this._normalState,r,!n&&!this.__inHover&&l&&l.duration>0,l);var h=this._textContent,f=this._textGuide;return h&&h.useState(e,r,n,u),f&&f.useState(e,r,n,u),a?(this.currentStates=[],this._normalState={}):r?this.currentStates.push(e):this.currentStates=[e],this._updateAnimationTargets(),this.markRedraw(),!u&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~es),c}}},t.prototype.useStates=function(e,r,n){if(!e.length)this.clearStates();else{var i=[],a=this.currentStates,o=e.length,s=o===a.length;if(s){for(var l=0;l0,p);var g=this._textContent,m=this._textGuide;g&&g.useStates(e,r,f),m&&m.useStates(e,r,f),this._updateAnimationTargets(),this.currentStates=e.slice(),this.markRedraw(),!f&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~es)}},t.prototype.isSilent=function(){for(var e=this.silent,r=this.parent;!e&&r;){if(r.silent){e=!0;break}r=r.parent}return e},t.prototype._updateAnimationTargets=function(){for(var e=0;e=0){var n=this.currentStates.slice();n.splice(r,1),this.useStates(n)}},t.prototype.replaceState=function(e,r,n){var i=this.currentStates.slice(),a=Je(i,e),o=Je(i,r)>=0;a>=0?o?i.splice(a,1):i[a]=r:n&&!o&&i.push(r),this.useStates(i)},t.prototype.toggleState=function(e,r){r?this.useState(e,!0):this.removeState(e)},t.prototype._mergeStates=function(e){for(var r={},n,i=0;i=0&&a.splice(o,1)}),this.animators.push(e),n&&n.animation.addAnimator(e),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(e){this.markRedraw()},t.prototype.stopAnimation=function(e,r){for(var n=this.animators,i=n.length,a=[],o=0;o0&&r.during&&a[0].during(function(p,g){r.during(g)});for(var f=0;f0||i.force&&!o.length){var E=void 0,k=void 0,A=void 0;if(s){k={},f&&(E={});for(var x=0;x=0&&(i.splice(a,0,r),this._doAdd(r))}return this},e.prototype.replace=function(r,n){var i=Je(this._children,r);return i>=0&&this.replaceAt(n,i),this},e.prototype.replaceAt=function(r,n){var i=this._children,a=i[n];if(r&&r!==this&&r.parent!==this&&r!==a){i[n]=r,a.parent=null;var o=this.__zr;o&&a.removeSelfFromZr(o),this._doAdd(r)}return this},e.prototype._doAdd=function(r){r.parent&&r.parent.remove(r),r.parent=this;var n=this.__zr;n&&n!==r.__zr&&r.addSelfToZr(n),n&&n.refresh()},e.prototype.remove=function(r){var n=this.__zr,i=this._children,a=Je(i,r);return a<0?this:(i.splice(a,1),r.parent=null,n&&r.removeSelfFromZr(n),n&&n.refresh(),this)},e.prototype.removeAll=function(){for(var r=this._children,n=this.__zr,i=0;i0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(e){this._sleepAfterStill=e},t.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._disposed||(this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover())},t.prototype.resize=function(e){this._disposed||(e=e||{},this.painter.resize(e.width,e.height),this.handler.resize())},t.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},t.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},t.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},t.prototype.setCursorStyle=function(e){this._disposed||this.handler.setCursorStyle(e)},t.prototype.findHover=function(e,r){if(!this._disposed)return this.handler.findHover(e,r)},t.prototype.on=function(e,r,n){return this._disposed||this.handler.on(e,r,n),this},t.prototype.off=function(e,r){this._disposed||this.handler.off(e,r)},t.prototype.trigger=function(e,r){this._disposed||this.handler.trigger(e,r)},t.prototype.clear=function(){if(!this._disposed){for(var e=this.storage.getRoots(),r=0;r0){if(t<=i)return o;if(t>=a)return s}else{if(t>=i)return o;if(t<=a)return s}else{if(t===i)return o;if(t===a)return s}return(t-i)/l*c+o}function Wt(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%";break}return ee(t)?tIt(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):t==null?NaN:+t}function ci(t,e,r){return e==null&&(e=10),e=Math.min(Math.max(0,e),a0t),t=(+t).toFixed(e),r?t:+t}function zs(t){return t.sort(function(e,r){return e-r}),t}function nc(t){if(t=+t,isNaN(t))return 0;if(t>1e-14){for(var e=1,r=0;r<15;r++,e*=10)if(Math.round(t*e)/e===t)return r}return eIt(t)}function eIt(t){var e=t.toString().toLowerCase(),r=e.indexOf("e"),n=r>0?+e.slice(r+1):0,i=r>0?r:e.length,a=e.indexOf("."),o=a<0?0:i-1-a;return Math.max(0,o-n)}function o0t(t,e){var r=Math.log,n=Math.LN10,i=Math.floor(r(t[1]-t[0])/n),a=Math.round(r(Math.abs(e[1]-e[0]))/n),o=Math.min(Math.max(-i+a,0),20);return isFinite(o)?o:20}function rIt(t,e){var r=yc(t,function(d,p){return d+(isNaN(p)?0:p)},0);if(r===0)return[];for(var n=Math.pow(10,e),i=$t(t,function(d){return(isNaN(d)?0:d)/r*n*100}),a=n*100,o=$t(i,function(d){return Math.floor(d)}),s=yc(o,function(d,p){return d+p},0),l=$t(i,function(d,p){return d-o[p]});sc&&(c=l[h],u=h);++o[u],l[u]=0,++s}return $t(o,function(d){return d/n})}function nIt(t,e){var r=Math.max(nc(t),nc(e)),n=t+e;return r>a0t?n:ci(n,r)}var _Y=9007199254740991;function s0t(t){var e=Math.PI*2;return(t%e+e)%e}function P2(t){return t>-wY&&t=10&&e++,e}function l0t(t,e){var r=FF(t),n=Math.pow(10,r),i=t/n,a;return i<1.5?a=1:i<2.5?a=2:i<4?a=3:i<7?a=5:a=10,t=a*n,r>=-20?+t.toFixed(r<0?-r:0):t}function h9(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),i=+t[n-1],a=r-n;return a?i+a*(t[n]-i):i}function SY(t){t.sort(function(l,c){return s(l,c,0)?-1:1});for(var e=-1/0,r=1,n=0;n=0||a&&Je(a,l)<0)){var c=n.getShallow(l,e);c!=null&&(o[t[s][0]]=c)}}return o}}var EIt=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],LIt=Pp(EIt),IIt=(function(){function t(){}return t.prototype.getAreaStyle=function(e,r){return LIt(this,e,r)},t})(),jB=new ex(50);function DIt(t){if(typeof t=="string"){var e=jB.get(t);return e&&e.image}else return t}function qF(t,e,r,n,i){if(t)if(typeof t=="string"){if(e&&e.__zrImageSrc===t||!r)return e;var a=jB.get(t),o={hostEl:r,cb:n,cbPayload:i};return a?(e=a.image,!k7(e)&&a.pending.push(o)):(e=gf.loadImage(t,AY,AY),e.__zrImageSrc=t,jB.put(t,e.__cachedImgObj={image:e,pending:[o]})),e}else return t;else return e}function AY(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=o;l++)s-=o;var c=os(r,e);return c>s&&(r="",c=0),s=t-c,i.ellipsis=r,i.ellipsisWidth=c,i.contentWidth=s,i.containerWidth=t,i}function w0t(t,e,r){var n=r.containerWidth,i=r.font,a=r.contentWidth;if(!n){t.textLine="",t.isTruncated=!1;return}var o=os(e,i);if(o<=n){t.textLine=e,t.isTruncated=!1;return}for(var s=0;;s++){if(o<=a||s>=r.maxIterations){e+=r.ellipsis;break}var l=s===0?$It(e,a,r.ascCharWidth,r.cnCharWidth):o>0?Math.floor(e.length*a/o):0;e=e.substr(0,l),o=os(e,i)}e===""&&(e=r.placeholder),t.textLine=e,t.isTruncated=!0}function $It(t,e,r,n){for(var i=0,a=0,o=t.length;aMath.abs(n-e.x)*l){let h=r.y{Vt.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(Vt.info("abc88 checking point",a,e),!I_e(e,a)&&!i){const o=D_e(e,n,a);Vt.debug("abc88 inside",a,n,o),Vt.debug("abc88 intersection",o,e);let s=!1;r.forEach(l=>{s=s||l.x===o.x&&l.y===o.y}),r.some(l=>l.x===o.x&&l.y===o.y)?Vt.warn("abc88 no intersect",o,r):r.push(o),i=!0}else Vt.warn("abc88 outside",a,n),n=a,i||r.push(a)}),Vt.debug("returning points",r),r},"cutPathAtIntersect");function bSt(t){const e=[],r=[];for(let n=1;n5&&Math.abs(a.y-i.y)>5||i.y===a.y&&a.x===o.x&&Math.abs(a.x-i.x)>5&&Math.abs(a.y-o.y)>5)&&(e.push(a),r.push(n))}return{cornerPoints:e,cornerPointPositions:r}}G(bSt,"extractCornerPoints");var Sit=G(function(t,e,r){const n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),o=r/a;return{x:e.x-o*n,y:e.y-o*i}},"findAdjacentPoint"),P_e=G(function(t){const{cornerPointPositions:e}=bSt(t),r=[];for(let n=0;n10&&Math.abs(a.y-i.y)>=10){Vt.debug("Corner point fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));const d=5;o.x===s.x?f={x:c<0?s.x-d+h:s.x+d-h,y:u<0?s.y-h:s.y+h}:f={x:c<0?s.x-h:s.x+h,y:u<0?s.y-d+h:s.y+d-h}}else Vt.debug("Corner point skipping fixing",Math.abs(a.x-i.x),Math.abs(a.y-i.y));r.push(f,l)}else r.push(t[n]);return r},"fixCorners"),$_e=G(function(t,e,r,n,i,a,o){const{handDrawnSeed:s}=vn();let l=e.points,c=!1;const u=i;var h=a;const f=[];for(const k in e.cssCompiledStyles)i_t(k)||f.push(e.cssCompiledStyles[k]);h.intersect&&u.intersect&&(l=l.slice(1,e.points.length-1),l.unshift(u.intersect(l[0])),Vt.debug("Last point APA12",e.start,"-->",e.end,l[l.length-1],h,h.intersect(l[l.length-1])),l.push(h.intersect(l[l.length-1]))),e.toCluster&&(Vt.info("to cluster abc88",r.get(e.toCluster)),l=_it(e.points,r.get(e.toCluster).node),c=!0),e.fromCluster&&(Vt.debug("from cluster abc88",r.get(e.fromCluster),JSON.stringify(l,null,2)),l=_it(l.reverse(),r.get(e.fromCluster).node).reverse(),c=!0);let d=l.filter(k=>!Number.isNaN(k.y));d=P_e(d);let p=B_;switch(p=tS,e.curve){case"linear":p=tS;break;case"basis":p=B_;break;case"cardinal":p=F_t;break;case"bumpX":p=B_t;break;case"bumpY":p=O_t;break;case"catmullRom":p=V_t;break;case"monotoneX":p=Y_t;break;case"monotoneY":p=X_t;break;case"natural":p=K_t;break;case"step":p=Q_t;break;case"stepAfter":p=t5t;break;case"stepBefore":p=J_t;break;default:p=B_}const{x:g,y:m}=n1e(e),v=Lbe().x(g).y(m).curve(p);let y;switch(e.thickness){case"normal":y="edge-thickness-normal";break;case"thick":y="edge-thickness-thick";break;case"invisible":y="edge-thickness-invisible";break;default:y="edge-thickness-normal"}switch(e.pattern){case"solid":y+=" edge-pattern-solid";break;case"dotted":y+=" edge-pattern-dotted";break;case"dashed":y+=" edge-pattern-dashed";break;default:y+=" edge-pattern-solid"}let b,x=v(d);const w=Array.isArray(e.style)?e.style:e.style?[e.style]:[];let _=w.find(k=>k?.startsWith("stroke:"));if(e.look==="handDrawn"){const k=Pe.svg(t);Object.assign([],d);const A=k.path(x,{roughness:.3,seed:s});y+=" transition",b=en(A).select("path").attr("id",e.id).attr("class"," "+y+(e.classes?" "+e.classes:"")).attr("style",w?w.reduce((z,O)=>z+";"+O,""):"");let L=b.attr("d");b.attr("d",L),t.node().appendChild(b.node())}else{const k=f.join(";"),A=w?w.reduce((O,I)=>O+I+";",""):"";let L="";e.animate&&(L=" edge-animation-fast"),e.animation&&(L=" edge-animation-"+e.animation);const z=k?k+";"+A+";":A;b=t.append("path").attr("d",x).attr("id",e.id).attr("class"," "+y+(e.classes?" "+e.classes:"")+(L??"")).attr("style",z),_=z.match(/stroke:([^;]+)/)?.[1]}let C="";(vn().flowchart.arrowMarkerAbsolute||vn().state.arrowMarkerAbsolute)&&(C=x4t(!0)),Vt.info("arrowTypeStart",e.arrowTypeStart),Vt.info("arrowTypeEnd",e.arrowTypeEnd),A_e(b,e,C,o,n,_);let E={};return c&&(E.updatedPath=l),E.originalPath=e.points,E},"insertEdge"),B_e=G((t,e,r,n)=>{e.forEach(i=>{K_e[i](t,r,n)})},"insertMarkers"),O_e=G((t,e,r)=>{Vt.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionStart").attr("class","marker extension "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},"extension"),z_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionStart").attr("class","marker composition "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"composition"),R_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",18).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",1).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},"aggregation"),N_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",6).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",r+"_"+e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",13).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},"dependency"),F_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",13).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6),t.append("defs").append("marker").attr("id",r+"_"+e+"-lollipopEnd").attr("class","marker lollipop "+e).attr("refX",1).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","transparent").attr("cx",7).attr("cy",7).attr("r",6)},"lollipop"),H_e=G((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",4.5).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",8).attr("markerHeight",8).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"point"),V_e=G((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},"circle"),j_e=G((t,e,r)=>{t.append("marker").attr("id",r+"_"+e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",r+"_"+e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},"cross"),q_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","userSpaceOnUse").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"barb"),W_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneStart").attr("class","marker onlyOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",r+"_"+e+"-onlyOneEnd").attr("class","marker onlyOne "+e).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("d","M3,0 L3,18 M9,0 L9,18")},"only_one"),G_e=G((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneStart").attr("class","marker zeroOrOne "+e).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("d","M9,0 L9,18");const i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrOneEnd").attr("class","marker zeroOrOne "+e).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),i.append("path").attr("d","M21,0 L21,18")},"zero_or_one"),U_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreStart").attr("class","marker oneOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",r+"_"+e+"-oneOrMoreEnd").attr("class","marker oneOrMore "+e).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18")},"one_or_more"),Y_e=G((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreStart").attr("class","marker zeroOrMore "+e).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");n.append("circle").attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18");const i=t.append("defs").append("marker").attr("id",r+"_"+e+"-zeroOrMoreEnd").attr("class","marker zeroOrMore "+e).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto");i.append("circle").attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),i.append("path").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},"zero_or_more"),X_e=G((t,e,r)=>{t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_arrowEnd").attr("refX",20).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("path").attr("d",`M0,0 L20,10 M20,10 - L0,20`)},"requirement_arrow"),Z_e=G((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),K_e={extension:O_e,composition:z_e,aggregation:R_e,dependency:N_e,lollipop:F_e,point:H_e,circle:V_e,cross:j_e,barb:q_e,only_one:W_e,zero_or_one:G_e,one_or_more:U_e,zero_or_more:Y_e,requirement_arrow:X_e,requirement_contains:Z_e},Q_e=B_e,J_e={common:Mv,getConfig:zo,insertCluster:s_e,insertEdge:$_e,insertEdgeLabel:E_e,insertMarkers:Q_e,insertNode:ySt,interpolateToCurve:bq,labelHelper:dr,log:Vt,positionEdgeLabel:L_e},$b={},xSt=G(t=>{for(const e of t)$b[e.name]=e},"registerLayoutLoaders"),t5e=G(()=>{xSt([{name:"dagre",loader:G(async()=>await Dn(()=>import("./chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.CTr5MXTt.js"),__vite__mapDeps([0,1,2,3,4,5,6])),"loader")}])},"registerDefaultLayoutLoaders");t5e();var Qrr=G(async(t,e)=>{if(!(t.layoutAlgorithm in $b))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);const r=$b[t.layoutAlgorithm];return(await r.loader()).render(t,e,J_e,{algorithm:r.algorithm})},"render"),Jrr=G((t="",{fallback:e="dagre"}={})=>{if(t in $b)return t;if(e in $b)return Vt.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm"),kit={name:"mermaid",version:"11.9.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.5",katex:"^0.16.22",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^16.0.0",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",canvas:"^3.1.0",chokidar:"3.6.0",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.1.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}},e5e=G(t=>{const{securityLevel:e}=vn();let r=en("body");if(e==="sandbox"){const n=en(`#i${t}`).node()?.contentDocument??document;r=en(n.body)}return r.select(`#${t}`)},"selectSvgElement"),wSt="comm",_St="rule",SSt="decl",r5e="@import",n5e="@namespace",i5e="@keyframes",a5e="@layer",kSt=Math.abs,Nq=String.fromCharCode;function CSt(t){return t.trim()}function N_(t,e,r){return t.replace(e,r)}function o5e(t,e,r){return t.indexOf(e,r)}function am(t,e){return t.charCodeAt(e)|0}function Hm(t,e,r){return t.slice(e,r)}function Xl(t){return t.length}function s5e(t){return t.length}function u3(t,e){return e.push(t),t}var rC=1,Vm=1,TSt=0,qs=0,$i=0,Pv="";function Fq(t,e,r,n,i,a,o,s){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:rC,column:Vm,length:o,return:"",siblings:s}}function l5e(){return $i}function c5e(){return $i=qs>0?am(Pv,--qs):0,Vm--,$i===10&&(Vm=1,rC--),$i}function yl(){return $i=qs2||Bb($i)>3?"":" "}function d5e(t,e){for(;--e&&yl()&&!($i<48||$i>102||$i>57&&$i<65||$i>70&&$i<97););return nC(t,F_()+(e<6&&Jh()==32&&yl()==32))}function GR(t){for(;yl();)switch($i){case t:return qs;case 34:case 39:t!==34&&t!==39&&GR($i);break;case 40:t===41&&GR(t);break;case 92:yl();break}return qs}function p5e(t,e){for(;yl()&&t+$i!==57&&!(t+$i===84&&Jh()===47););return"/*"+nC(e,qs-1)+"*"+Nq(t===47?t:yl())}function g5e(t){for(;!Bb(Jh());)yl();return nC(t,qs)}function m5e(t){return h5e(H_("",null,null,null,[""],t=u5e(t),0,[0],t))}function H_(t,e,r,n,i,a,o,s,l){for(var c=0,u=0,h=o,f=0,d=0,p=0,g=1,m=1,v=1,y=0,b="",x=i,w=a,_=n,C=b;m;)switch(p=y,y=yl()){case 40:if(p!=108&&am(C,h-1)==58){o5e(C+=N_(IM(y),"&","&\f"),"&\f",kSt(c?s[c-1]:0))!=-1&&(v=-1);break}case 34:case 39:case 91:C+=IM(y);break;case 9:case 10:case 13:case 32:C+=f5e(p);break;case 92:C+=d5e(F_()-1,7);continue;case 47:switch(Jh()){case 42:case 47:u3(v5e(p5e(yl(),F_()),e,r,l),l),(Bb(p||1)==5||Bb(Jh()||1)==5)&&Xl(C)&&Hm(C,-1,void 0)!==" "&&(C+=" ");break;default:C+="/"}break;case 123*g:s[c++]=Xl(C)*v;case 125*g:case 59:case 0:switch(y){case 0:case 125:m=0;case 59+u:v==-1&&(C=N_(C,/\f/g,"")),d>0&&(Xl(C)-h||g===0&&p===47)&&u3(d>32?Tit(C+";",n,r,h-1,l):Tit(N_(C," ","")+";",n,r,h-2,l),l);break;case 59:C+=";";default:if(u3(_=Cit(C,e,r,c,u,i,s,b,x=[],w=[],h,a),a),y===123)if(u===0)H_(C,e,_,_,x,a,h,s,w);else{switch(f){case 99:if(am(C,3)===110)break;case 108:if(am(C,2)===97)break;default:u=0;case 100:case 109:case 115:}u?H_(t,_,_,n&&u3(Cit(t,_,_,0,0,i,s,b,i,x=[],h,w),w),i,w,h,s,n?x:w):H_(C,_,_,_,[""],w,0,s,w)}}c=u=d=0,g=v=1,b=C="",h=o;break;case 58:h=1+Xl(C),d=p;default:if(g<1){if(y==123)--g;else if(y==125&&g++==0&&c5e()==125)continue}switch(C+=Nq(y),y*g){case 38:v=u>0?1:(C+="\f",-1);break;case 44:s[c++]=(Xl(C)-1)*v,v=1;break;case 64:Jh()===45&&(C+=IM(yl())),f=Jh(),u=h=Xl(b=C+=g5e(F_())),y++;break;case 45:p===45&&Xl(C)==2&&(g=0)}}return a}function Cit(t,e,r,n,i,a,o,s,l,c,u,h){for(var f=i-1,d=i===0?a:[""],p=s5e(d),g=0,m=0,v=0;g0?d[y]+" "+b:N_(b,/&\f/g,d[y])))&&(l[v++]=x);return Fq(t,e,r,i===0?_St:s,l,c,u,h)}function v5e(t,e,r,n){return Fq(t,e,r,wSt,Nq(l5e()),Hm(t,2,-2),0,n)}function Tit(t,e,r,n,i){return Fq(t,e,r,SSt,Hm(t,0,n),Hm(t,n+1,-1),n,i)}function UR(t,e){for(var r="",n=0;n/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),$5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.DPl3JjN1.js");return{diagram:e}},__vite__mapDeps([7,8,6]));return{id:ASt,diagram:t}},"loader"),B5e={id:ASt,detector:P5e,loader:$5e},O5e=B5e,MSt="flowchart",z5e=G((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),R5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js");return{diagram:e}},__vite__mapDeps([9,10,11,12,13,6]));return{id:MSt,diagram:t}},"loader"),N5e={id:MSt,detector:z5e,loader:R5e},F5e=N5e,ESt="flowchart-v2",H5e=G((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),V5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js");return{diagram:e}},__vite__mapDeps([9,10,11,12,13,6]));return{id:ESt,diagram:t}},"loader"),j5e={id:ESt,detector:H5e,loader:V5e},q5e=j5e,LSt="er",W5e=G(t=>/^\s*erDiagram/.test(t),"detector"),G5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/erDiagram-3M52JZNH-Br8ppgaz-B4QUrJzs.8rN853_B.js");return{diagram:e}},__vite__mapDeps([14,11,12,13,6]));return{id:LSt,diagram:t}},"loader"),U5e={id:LSt,detector:W5e,loader:G5e},Y5e=U5e,ISt="gitGraph",X5e=G(t=>/^\s*gitGraph/.test(t),"detector"),Z5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.adA6Yltn.js");return{diagram:e}},__vite__mapDeps([15,16,17,18,6,2,4,5]));return{id:ISt,diagram:t}},"loader"),K5e={id:ISt,detector:X5e,loader:Z5e},Q5e=K5e,DSt="gantt",J5e=G(t=>/^\s*gantt/.test(t),"detector"),t6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.4mlfbojo.js");return{diagram:e}},__vite__mapDeps([19,20,21,22,6]));return{id:DSt,diagram:t}},"loader"),e6e={id:DSt,detector:J5e,loader:t6e},r6e=e6e,PSt="info",n6e=G(t=>/^\s*info/.test(t),"detector"),i6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.BXxB37i9.js");return{diagram:e}},__vite__mapDeps([23,18,6,2,4,5]));return{id:PSt,diagram:t}},"loader"),a6e={id:PSt,detector:n6e,loader:i6e},$St="pie",o6e=G(t=>/^\s*pie/.test(t),"detector"),s6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.DrfJFWrX.js");return{diagram:e}},__vite__mapDeps([24,16,18,6,2,4,5,25,26,21]));return{id:$St,diagram:t}},"loader"),l6e={id:$St,detector:o6e,loader:s6e},BSt="quadrantChart",c6e=G(t=>/^\s*quadrantChart/.test(t),"detector"),u6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.Cm0TOG_e.js");return{diagram:e}},__vite__mapDeps([27,20,21,22,6]));return{id:BSt,diagram:t}},"loader"),h6e={id:BSt,detector:c6e,loader:u6e},f6e=h6e,OSt="xychart",d6e=G(t=>/^\s*xychart-beta/.test(t),"detector"),p6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/xychartDiagram-H2YORKM3-RGV0rR_j-DEZyUg2T.BdflZvbN.js");return{diagram:e}},__vite__mapDeps([28,21,26,20,22,6]));return{id:OSt,diagram:t}},"loader"),g6e={id:OSt,detector:d6e,loader:p6e},m6e=g6e,zSt="requirement",v6e=G(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),y6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DFy2a-9L.js");return{diagram:e}},__vite__mapDeps([29,11,12,6]));return{id:zSt,diagram:t}},"loader"),b6e={id:zSt,detector:v6e,loader:y6e},x6e=b6e,RSt="sequence",w6e=G(t=>/^\s*sequenceDiagram/.test(t),"detector"),_6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.op8l4Jsx.js");return{diagram:e}},__vite__mapDeps([30,8,17,6]));return{id:RSt,diagram:t}},"loader"),S6e={id:RSt,detector:w6e,loader:_6e},k6e=S6e,NSt="class",C6e=G((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),T6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.C12oGQvn.js");return{diagram:e}},__vite__mapDeps([31,32,10,11,12,6]));return{id:NSt,diagram:t}},"loader"),A6e={id:NSt,detector:C6e,loader:T6e},M6e=A6e,FSt="classDiagram",E6e=G((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),L6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.C12oGQvn.js");return{diagram:e}},__vite__mapDeps([33,32,10,11,12,6]));return{id:FSt,diagram:t}},"loader"),I6e={id:FSt,detector:E6e,loader:L6e},D6e=I6e,HSt="state",P6e=G((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),$6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.BO96OnGS.js");return{diagram:e}},__vite__mapDeps([34,35,11,12,1,2,3,4,6]));return{id:HSt,diagram:t}},"loader"),B6e={id:HSt,detector:P6e,loader:$6e},O6e=B6e,VSt="stateDiagram",z6e=G((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),R6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.DluC3sue.js");return{diagram:e}},__vite__mapDeps([36,35,11,12,6]));return{id:VSt,diagram:t}},"loader"),N6e={id:VSt,detector:z6e,loader:R6e},F6e=N6e,jSt="journey",H6e=G(t=>/^\s*journey/.test(t),"detector"),V6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.CcjblcaA.js");return{diagram:e}},__vite__mapDeps([37,8,10,25,6]));return{id:jSt,diagram:t}},"loader"),j6e={id:jSt,detector:H6e,loader:V6e},q6e=j6e,W6e=G((t,e,r)=>{Vt.debug(`rendering svg for syntax error -`);const n=e5e(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),w4t(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),qSt={draw:W6e},G6e=qSt,U6e={db:{},renderer:qSt,parser:{parse:G(()=>{},"parse")}},Y6e=U6e,WSt="flowchart-elk",X6e=G((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),Z6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js");return{diagram:e}},__vite__mapDeps([9,10,11,12,13,6]));return{id:WSt,diagram:t}},"loader"),K6e={id:WSt,detector:X6e,loader:Z6e},Q6e=K6e,GSt="timeline",J6e=G(t=>/^\s*timeline/.test(t),"detector"),tSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.HonFmolT.js");return{diagram:e}},__vite__mapDeps([38,25,6]));return{id:GSt,diagram:t}},"loader"),eSe={id:GSt,detector:J6e,loader:tSe},rSe=eSe,USt="mindmap",nSe=G(t=>/^\s*mindmap/.test(t),"detector"),iSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.B_Qa0jXF.js");return{diagram:e}},__vite__mapDeps([39,40,6]));return{id:USt,diagram:t}},"loader"),aSe={id:USt,detector:nSe,loader:iSe},oSe=aSe,YSt="kanban",sSe=G(t=>/^\s*kanban/.test(t),"detector"),lSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BrKyeqfp.js");return{diagram:e}},__vite__mapDeps([41,10,6]));return{id:YSt,diagram:t}},"loader"),cSe={id:YSt,detector:sSe,loader:lSe},uSe=cSe,XSt="sankey",hSe=G(t=>/^\s*sankey-beta/.test(t),"detector"),fSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.B-y2STaX.js");return{diagram:e}},__vite__mapDeps([42,26,21,6]));return{id:XSt,diagram:t}},"loader"),dSe={id:XSt,detector:hSe,loader:fSe},pSe=dSe,ZSt="packet",gSe=G(t=>/^\s*packet(-beta)?/.test(t),"detector"),mSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/diagram-5UYTHUR4-Ts8DWvW8-DtNiVIiC.BmfI6jgz.js");return{diagram:e}},__vite__mapDeps([43,16,18,6,2,4,5]));return{id:ZSt,diagram:t}},"loader"),vSe={id:ZSt,detector:gSe,loader:mSe},KSt="radar",ySe=G(t=>/^\s*radar-beta/.test(t),"detector"),bSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.3E3O7MPS.js");return{diagram:e}},__vite__mapDeps([44,16,18,6,2,4,5]));return{id:KSt,diagram:t}},"loader"),xSe={id:KSt,detector:ySe,loader:bSe},QSt="block",wSe=G(t=>/^\s*block-beta/.test(t),"detector"),_Se=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/blockDiagram-6J76NXCF-CKU6xA4s-D8REXnmR.CCvVx74G.js");return{diagram:e}},__vite__mapDeps([45,10,5,2,1,13,6]));return{id:QSt,diagram:t}},"loader"),SSe={id:QSt,detector:wSe,loader:_Se},kSe=SSe,JSt="architecture",CSe=G(t=>/^\s*architecture/.test(t),"detector"),TSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.BmBUXIJr.js");return{diagram:e}},__vite__mapDeps([46,16,17,18,6,2,4,5,40]));return{id:JSt,diagram:t}},"loader"),ASe={id:JSt,detector:CSe,loader:TSe},MSe=ASe,t7t="treemap",ESe=G(t=>/^\s*treemap/.test(t),"detector"),LSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BgEzd_En.js");return{diagram:e}},__vite__mapDeps([47,12,16,18,6,2,4,5,22,26,21]));return{id:t7t,diagram:t}},"loader"),ISe={id:t7t,detector:ESe,loader:LSe},Pit=!1,iC=G(()=>{Pit||(Pit=!0,H6("error",Y6e,t=>t.toLowerCase().trim()==="error"),H6("---",{db:{clear:G(()=>{},"clear")},styles:{},renderer:{draw:G(()=>{},"draw")},parser:{parse:G(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:G(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),oR(Q6e,oSe,MSe),oR(O5e,uSe,D6e,M6e,Y5e,r6e,a6e,l6e,x6e,k6e,q5e,F5e,rSe,Q5e,F6e,O6e,q6e,f6e,pSe,vSe,m6e,kSe,xSe,ISe))},"addDiagrams"),DSe=G(async()=>{Vt.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(jp).map(async([e,{detector:r,loader:n}])=>{if(n)try{uR(e)}catch{try{const{diagram:i,id:a}=await n();H6(a,i,r)}catch(i){throw Vt.error(`Failed to load external diagram with key ${e}. Removing from detectors.`),delete jp[e],i}}}))).filter(e=>e.status==="rejected");if(t.length>0){Vt.error(`Failed to load ${t.length} external diagrams`);for(const e of t)Vt.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}},"loadRegisteredDiagrams"),PSe="graphics-document document";function e7t(t,e){t.attr("role",PSe),e!==""&&t.attr("aria-roledescription",e)}G(e7t,"setA11yDiagramInfo");function r7t(t,e,r,n){if(t.insert!==void 0){if(r){const i=`chart-desc-${n}`;t.attr("aria-describedby",i),t.insert("desc",":first-child").attr("id",i).text(r)}if(e){const i=`chart-title-${n}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}G(r7t,"addSVGa11yTitleDescription");var h3,QR=(h3=class{constructor(t,e,r,n,i){this.type=t,this.text=e,this.db=r,this.parser=n,this.renderer=i}static async fromText(t,e={}){const r=zo(),n=jj(t,r);t=L4e(t)+` + L0,20`)},"requirement_arrow"),Z_e=G((t,e,r)=>{const n=t.append("defs").append("marker").attr("id",r+"_"+e+"-requirement_containsStart").attr("refX",0).attr("refY",10).attr("markerWidth",20).attr("markerHeight",20).attr("orient","auto").append("g");n.append("circle").attr("cx",10).attr("cy",10).attr("r",9).attr("fill","none"),n.append("line").attr("x1",1).attr("x2",19).attr("y1",10).attr("y2",10),n.append("line").attr("y1",1).attr("y2",19).attr("x1",10).attr("x2",10)},"requirement_contains"),K_e={extension:O_e,composition:z_e,aggregation:R_e,dependency:N_e,lollipop:F_e,point:H_e,circle:V_e,cross:j_e,barb:q_e,only_one:W_e,zero_or_one:G_e,one_or_more:U_e,zero_or_more:Y_e,requirement_arrow:X_e,requirement_contains:Z_e},Q_e=B_e,J_e={common:Mv,getConfig:zo,insertCluster:s_e,insertEdge:$_e,insertEdgeLabel:E_e,insertMarkers:Q_e,insertNode:ySt,interpolateToCurve:bq,labelHelper:dr,log:Vt,positionEdgeLabel:L_e},$b={},xSt=G(t=>{for(const e of t)$b[e.name]=e},"registerLayoutLoaders"),t5e=G(()=>{xSt([{name:"dagre",loader:G(async()=>await Dn(()=>import("./chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.DfVkA-kZ.js"),__vite__mapDeps([0,1,2,3,4,5,6])),"loader")}])},"registerDefaultLayoutLoaders");t5e();var Qrr=G(async(t,e)=>{if(!(t.layoutAlgorithm in $b))throw new Error(`Unknown layout algorithm: ${t.layoutAlgorithm}`);const r=$b[t.layoutAlgorithm];return(await r.loader()).render(t,e,J_e,{algorithm:r.algorithm})},"render"),Jrr=G((t="",{fallback:e="dagre"}={})=>{if(t in $b)return t;if(e in $b)return Vt.warn(`Layout algorithm ${t} is not registered. Using ${e} as fallback.`),e;throw new Error(`Both layout algorithms ${t} and ${e} are not registered.`)},"getRegisteredLayoutAlgorithm"),kit={name:"mermaid",version:"11.9.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",type:"module",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",exports:{".":{types:"./dist/mermaid.d.ts",import:"./dist/mermaid.core.mjs",default:"./dist/mermaid.core.mjs"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph","mindmap","packet diagram","c4 diagram","er diagram","pie chart","pie diagram","quadrant chart","requirement diagram","graph"],scripts:{clean:"rimraf dist",dev:"pnpm -w dev","docs:code":"typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup","docs:build":"rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts","docs:verify":"pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify","docs:pre:vitepress":"pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts","docs:build:vitepress":"pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing","docs:dev":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:dev:docker":'pnpm docs:pre:vitepress && concurrently "pnpm --filter ./src/vitepress dev:docker" "tsx scripts/docs.cli.mts --watch --vitepress"',"docs:serve":"pnpm docs:build:vitepress && vitepress serve src/vitepress","docs:spellcheck":'cspell "src/docs/**/*.md"',"docs:release-version":"tsx scripts/update-release-version.mts","docs:verify-version":"tsx scripts/update-release-version.mts --verify","types:build-config":"tsx scripts/create-types-from-json-schema.mts","types:verify-config":"tsx scripts/create-types-from-json-schema.mts --verify",checkCircle:"npx madge --circular ./src",prepublishOnly:"pnpm docs:verify-version"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^7.0.4","@iconify/utils":"^2.1.33","@mermaid-js/parser":"workspace:^","@types/d3":"^7.4.3",cytoscape:"^3.29.3","cytoscape-cose-bilkent":"^4.1.0","cytoscape-fcose":"^2.2.0",d3:"^7.9.0","d3-sankey":"^0.12.3","dagre-d3-es":"7.0.11",dayjs:"^1.11.13",dompurify:"^3.2.5",katex:"^0.16.22",khroma:"^2.1.0","lodash-es":"^4.17.21",marked:"^16.0.0",roughjs:"^4.6.6",stylis:"^4.3.6","ts-dedent":"^2.2.0",uuid:"^11.1.0"},devDependencies:{"@adobe/jsonschema2md":"^8.0.2","@iconify/types":"^2.0.0","@types/cytoscape":"^3.21.9","@types/cytoscape-fcose":"^2.2.4","@types/d3-sankey":"^0.12.4","@types/d3-scale":"^4.0.9","@types/d3-scale-chromatic":"^3.1.0","@types/d3-selection":"^3.0.11","@types/d3-shape":"^3.1.7","@types/jsdom":"^21.1.7","@types/katex":"^0.16.7","@types/lodash-es":"^4.17.12","@types/micromatch":"^4.0.9","@types/stylis":"^4.2.7","@types/uuid":"^10.0.0",ajv:"^8.17.1",canvas:"^3.1.0",chokidar:"3.6.0",concurrently:"^9.1.2","csstree-validator":"^4.0.1",globby:"^14.0.2",jison:"^0.4.18","js-base64":"^3.7.7",jsdom:"^26.1.0","json-schema-to-typescript":"^15.0.4",micromatch:"^4.0.8","path-browserify":"^1.0.1",prettier:"^3.5.2",remark:"^15.0.1","remark-frontmatter":"^5.0.0","remark-gfm":"^4.0.1",rimraf:"^6.0.1","start-server-and-test":"^2.0.10","type-fest":"^4.35.0",typedoc:"^0.27.8","typedoc-plugin-markdown":"^4.4.2",typescript:"~5.7.3","unist-util-flatmap":"^1.0.0","unist-util-visit":"^5.0.0",vitepress:"^1.0.2","vitepress-plugin-search":"1.0.4-alpha.22"},files:["dist/","README.md"],publishConfig:{access:"public"}},e5e=G(t=>{const{securityLevel:e}=vn();let r=en("body");if(e==="sandbox"){const n=en(`#i${t}`).node()?.contentDocument??document;r=en(n.body)}return r.select(`#${t}`)},"selectSvgElement"),wSt="comm",_St="rule",SSt="decl",r5e="@import",n5e="@namespace",i5e="@keyframes",a5e="@layer",kSt=Math.abs,Nq=String.fromCharCode;function CSt(t){return t.trim()}function N_(t,e,r){return t.replace(e,r)}function o5e(t,e,r){return t.indexOf(e,r)}function am(t,e){return t.charCodeAt(e)|0}function Hm(t,e,r){return t.slice(e,r)}function Xl(t){return t.length}function s5e(t){return t.length}function u3(t,e){return e.push(t),t}var rC=1,Vm=1,TSt=0,qs=0,$i=0,Pv="";function Fq(t,e,r,n,i,a,o,s){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:rC,column:Vm,length:o,return:"",siblings:s}}function l5e(){return $i}function c5e(){return $i=qs>0?am(Pv,--qs):0,Vm--,$i===10&&(Vm=1,rC--),$i}function yl(){return $i=qs2||Bb($i)>3?"":" "}function d5e(t,e){for(;--e&&yl()&&!($i<48||$i>102||$i>57&&$i<65||$i>70&&$i<97););return nC(t,F_()+(e<6&&Jh()==32&&yl()==32))}function GR(t){for(;yl();)switch($i){case t:return qs;case 34:case 39:t!==34&&t!==39&&GR($i);break;case 40:t===41&&GR(t);break;case 92:yl();break}return qs}function p5e(t,e){for(;yl()&&t+$i!==57&&!(t+$i===84&&Jh()===47););return"/*"+nC(e,qs-1)+"*"+Nq(t===47?t:yl())}function g5e(t){for(;!Bb(Jh());)yl();return nC(t,qs)}function m5e(t){return h5e(H_("",null,null,null,[""],t=u5e(t),0,[0],t))}function H_(t,e,r,n,i,a,o,s,l){for(var c=0,u=0,h=o,f=0,d=0,p=0,g=1,m=1,v=1,y=0,b="",x=i,w=a,_=n,C=b;m;)switch(p=y,y=yl()){case 40:if(p!=108&&am(C,h-1)==58){o5e(C+=N_(IM(y),"&","&\f"),"&\f",kSt(c?s[c-1]:0))!=-1&&(v=-1);break}case 34:case 39:case 91:C+=IM(y);break;case 9:case 10:case 13:case 32:C+=f5e(p);break;case 92:C+=d5e(F_()-1,7);continue;case 47:switch(Jh()){case 42:case 47:u3(v5e(p5e(yl(),F_()),e,r,l),l),(Bb(p||1)==5||Bb(Jh()||1)==5)&&Xl(C)&&Hm(C,-1,void 0)!==" "&&(C+=" ");break;default:C+="/"}break;case 123*g:s[c++]=Xl(C)*v;case 125*g:case 59:case 0:switch(y){case 0:case 125:m=0;case 59+u:v==-1&&(C=N_(C,/\f/g,"")),d>0&&(Xl(C)-h||g===0&&p===47)&&u3(d>32?Tit(C+";",n,r,h-1,l):Tit(N_(C," ","")+";",n,r,h-2,l),l);break;case 59:C+=";";default:if(u3(_=Cit(C,e,r,c,u,i,s,b,x=[],w=[],h,a),a),y===123)if(u===0)H_(C,e,_,_,x,a,h,s,w);else{switch(f){case 99:if(am(C,3)===110)break;case 108:if(am(C,2)===97)break;default:u=0;case 100:case 109:case 115:}u?H_(t,_,_,n&&u3(Cit(t,_,_,0,0,i,s,b,i,x=[],h,w),w),i,w,h,s,n?x:w):H_(C,_,_,_,[""],w,0,s,w)}}c=u=d=0,g=v=1,b=C="",h=o;break;case 58:h=1+Xl(C),d=p;default:if(g<1){if(y==123)--g;else if(y==125&&g++==0&&c5e()==125)continue}switch(C+=Nq(y),y*g){case 38:v=u>0?1:(C+="\f",-1);break;case 44:s[c++]=(Xl(C)-1)*v,v=1;break;case 64:Jh()===45&&(C+=IM(yl())),f=Jh(),u=h=Xl(b=C+=g5e(F_())),y++;break;case 45:p===45&&Xl(C)==2&&(g=0)}}return a}function Cit(t,e,r,n,i,a,o,s,l,c,u,h){for(var f=i-1,d=i===0?a:[""],p=s5e(d),g=0,m=0,v=0;g0?d[y]+" "+b:N_(b,/&\f/g,d[y])))&&(l[v++]=x);return Fq(t,e,r,i===0?_St:s,l,c,u,h)}function v5e(t,e,r,n){return Fq(t,e,r,wSt,Nq(l5e()),Hm(t,2,-2),0,n)}function Tit(t,e,r,n,i){return Fq(t,e,r,SSt,Hm(t,0,n),Hm(t,n+1,-1),n,i)}function UR(t,e){for(var r="",n=0;n/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),"detector"),$5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.BkDiTFKx.js");return{diagram:e}},__vite__mapDeps([7,8,6]));return{id:ASt,diagram:t}},"loader"),B5e={id:ASt,detector:P5e,loader:$5e},O5e=B5e,MSt="flowchart",z5e=G((t,e)=>e?.flowchart?.defaultRenderer==="dagre-wrapper"||e?.flowchart?.defaultRenderer==="elk"?!1:/^\s*graph/.test(t),"detector"),R5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.B6lsWZ93.js");return{diagram:e}},__vite__mapDeps([9,10,11,12,13,6]));return{id:MSt,diagram:t}},"loader"),N5e={id:MSt,detector:z5e,loader:R5e},F5e=N5e,ESt="flowchart-v2",H5e=G((t,e)=>e?.flowchart?.defaultRenderer==="dagre-d3"?!1:(e?.flowchart?.defaultRenderer==="elk"&&(e.layout="elk"),/^\s*graph/.test(t)&&e?.flowchart?.defaultRenderer==="dagre-wrapper"?!0:/^\s*flowchart/.test(t)),"detector"),V5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.B6lsWZ93.js");return{diagram:e}},__vite__mapDeps([9,10,11,12,13,6]));return{id:ESt,diagram:t}},"loader"),j5e={id:ESt,detector:H5e,loader:V5e},q5e=j5e,LSt="er",W5e=G(t=>/^\s*erDiagram/.test(t),"detector"),G5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/erDiagram-3M52JZNH-Br8ppgaz-B4QUrJzs.BHDmL7kr.js");return{diagram:e}},__vite__mapDeps([14,11,12,13,6]));return{id:LSt,diagram:t}},"loader"),U5e={id:LSt,detector:W5e,loader:G5e},Y5e=U5e,ISt="gitGraph",X5e=G(t=>/^\s*gitGraph/.test(t),"detector"),Z5e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.C7_PT9aX.js");return{diagram:e}},__vite__mapDeps([15,16,17,18,6,2,4,5]));return{id:ISt,diagram:t}},"loader"),K5e={id:ISt,detector:X5e,loader:Z5e},Q5e=K5e,DSt="gantt",J5e=G(t=>/^\s*gantt/.test(t),"detector"),t6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.DuURMpPQ.js");return{diagram:e}},__vite__mapDeps([19,20,21,22,6]));return{id:DSt,diagram:t}},"loader"),e6e={id:DSt,detector:J5e,loader:t6e},r6e=e6e,PSt="info",n6e=G(t=>/^\s*info/.test(t),"detector"),i6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.Cy7BIWS3.js");return{diagram:e}},__vite__mapDeps([23,18,6,2,4,5]));return{id:PSt,diagram:t}},"loader"),a6e={id:PSt,detector:n6e,loader:i6e},$St="pie",o6e=G(t=>/^\s*pie/.test(t),"detector"),s6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.BuSMwSOI.js");return{diagram:e}},__vite__mapDeps([24,16,18,6,2,4,5,25,26,21]));return{id:$St,diagram:t}},"loader"),l6e={id:$St,detector:o6e,loader:s6e},BSt="quadrantChart",c6e=G(t=>/^\s*quadrantChart/.test(t),"detector"),u6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.DMAY0E28.js");return{diagram:e}},__vite__mapDeps([27,20,21,22,6]));return{id:BSt,diagram:t}},"loader"),h6e={id:BSt,detector:c6e,loader:u6e},f6e=h6e,OSt="xychart",d6e=G(t=>/^\s*xychart-beta/.test(t),"detector"),p6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/xychartDiagram-H2YORKM3-RGV0rR_j-DEZyUg2T.Ba7jQb4S.js");return{diagram:e}},__vite__mapDeps([28,21,26,20,22,6]));return{id:OSt,diagram:t}},"loader"),g6e={id:OSt,detector:d6e,loader:p6e},m6e=g6e,zSt="requirement",v6e=G(t=>/^\s*requirement(Diagram)?/.test(t),"detector"),y6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DS4y_B-C.js");return{diagram:e}},__vite__mapDeps([29,11,12,6]));return{id:zSt,diagram:t}},"loader"),b6e={id:zSt,detector:v6e,loader:y6e},x6e=b6e,RSt="sequence",w6e=G(t=>/^\s*sequenceDiagram/.test(t),"detector"),_6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.Dq1KKRt3.js");return{diagram:e}},__vite__mapDeps([30,8,17,6]));return{id:RSt,diagram:t}},"loader"),S6e={id:RSt,detector:w6e,loader:_6e},k6e=S6e,NSt="class",C6e=G((t,e)=>e?.class?.defaultRenderer==="dagre-wrapper"?!1:/^\s*classDiagram/.test(t),"detector"),T6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.DAtmvBpB.js");return{diagram:e}},__vite__mapDeps([31,32,10,11,12,6]));return{id:NSt,diagram:t}},"loader"),A6e={id:NSt,detector:C6e,loader:T6e},M6e=A6e,FSt="classDiagram",E6e=G((t,e)=>/^\s*classDiagram/.test(t)&&e?.class?.defaultRenderer==="dagre-wrapper"?!0:/^\s*classDiagram-v2/.test(t),"detector"),L6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.DAtmvBpB.js");return{diagram:e}},__vite__mapDeps([33,32,10,11,12,6]));return{id:FSt,diagram:t}},"loader"),I6e={id:FSt,detector:E6e,loader:L6e},D6e=I6e,HSt="state",P6e=G((t,e)=>e?.state?.defaultRenderer==="dagre-wrapper"?!1:/^\s*stateDiagram/.test(t),"detector"),$6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.Bwo-rHhY.js");return{diagram:e}},__vite__mapDeps([34,35,11,12,1,2,3,4,6]));return{id:HSt,diagram:t}},"loader"),B6e={id:HSt,detector:P6e,loader:$6e},O6e=B6e,VSt="stateDiagram",z6e=G((t,e)=>!!(/^\s*stateDiagram-v2/.test(t)||/^\s*stateDiagram/.test(t)&&e?.state?.defaultRenderer==="dagre-wrapper"),"detector"),R6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.BhLrX9rT.js");return{diagram:e}},__vite__mapDeps([36,35,11,12,6]));return{id:VSt,diagram:t}},"loader"),N6e={id:VSt,detector:z6e,loader:R6e},F6e=N6e,jSt="journey",H6e=G(t=>/^\s*journey/.test(t),"detector"),V6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.DSJ4Yilw.js");return{diagram:e}},__vite__mapDeps([37,8,10,25,6]));return{id:jSt,diagram:t}},"loader"),j6e={id:jSt,detector:H6e,loader:V6e},q6e=j6e,W6e=G((t,e,r)=>{Vt.debug(`rendering svg for syntax error +`);const n=e5e(e),i=n.append("g");n.attr("viewBox","0 0 2412 512"),w4t(n,100,512,!0),i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${r}`)},"draw"),qSt={draw:W6e},G6e=qSt,U6e={db:{},renderer:qSt,parser:{parse:G(()=>{},"parse")}},Y6e=U6e,WSt="flowchart-elk",X6e=G((t,e={})=>/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&e?.flowchart?.defaultRenderer==="elk"?(e.layout="elk",!0):!1,"detector"),Z6e=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.B6lsWZ93.js");return{diagram:e}},__vite__mapDeps([9,10,11,12,13,6]));return{id:WSt,diagram:t}},"loader"),K6e={id:WSt,detector:X6e,loader:Z6e},Q6e=K6e,GSt="timeline",J6e=G(t=>/^\s*timeline/.test(t),"detector"),tSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.B_87a6ob.js");return{diagram:e}},__vite__mapDeps([38,25,6]));return{id:GSt,diagram:t}},"loader"),eSe={id:GSt,detector:J6e,loader:tSe},rSe=eSe,USt="mindmap",nSe=G(t=>/^\s*mindmap/.test(t),"detector"),iSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.MCFe2lSf.js");return{diagram:e}},__vite__mapDeps([39,40,6]));return{id:USt,diagram:t}},"loader"),aSe={id:USt,detector:nSe,loader:iSe},oSe=aSe,YSt="kanban",sSe=G(t=>/^\s*kanban/.test(t),"detector"),lSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BFZhmnh9.js");return{diagram:e}},__vite__mapDeps([41,10,6]));return{id:YSt,diagram:t}},"loader"),cSe={id:YSt,detector:sSe,loader:lSe},uSe=cSe,XSt="sankey",hSe=G(t=>/^\s*sankey-beta/.test(t),"detector"),fSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.CKpep3Yg.js");return{diagram:e}},__vite__mapDeps([42,26,21,6]));return{id:XSt,diagram:t}},"loader"),dSe={id:XSt,detector:hSe,loader:fSe},pSe=dSe,ZSt="packet",gSe=G(t=>/^\s*packet(-beta)?/.test(t),"detector"),mSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/diagram-5UYTHUR4-Ts8DWvW8-DtNiVIiC.CX5YyFrd.js");return{diagram:e}},__vite__mapDeps([43,16,18,6,2,4,5]));return{id:ZSt,diagram:t}},"loader"),vSe={id:ZSt,detector:gSe,loader:mSe},KSt="radar",ySe=G(t=>/^\s*radar-beta/.test(t),"detector"),bSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.CcKUrUxd.js");return{diagram:e}},__vite__mapDeps([44,16,18,6,2,4,5]));return{id:KSt,diagram:t}},"loader"),xSe={id:KSt,detector:ySe,loader:bSe},QSt="block",wSe=G(t=>/^\s*block-beta/.test(t),"detector"),_Se=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/blockDiagram-6J76NXCF-CKU6xA4s-D8REXnmR.C-6BOuOR.js");return{diagram:e}},__vite__mapDeps([45,10,5,2,1,13,6]));return{id:QSt,diagram:t}},"loader"),SSe={id:QSt,detector:wSe,loader:_Se},kSe=SSe,JSt="architecture",CSe=G(t=>/^\s*architecture/.test(t),"detector"),TSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.DUyQUGjS.js");return{diagram:e}},__vite__mapDeps([46,16,17,18,6,2,4,5,40]));return{id:JSt,diagram:t}},"loader"),ASe={id:JSt,detector:CSe,loader:TSe},MSe=ASe,t7t="treemap",ESe=G(t=>/^\s*treemap/.test(t),"detector"),LSe=G(async()=>{const{diagram:t}=await Dn(async()=>{const{diagram:e}=await import("./chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BCf_Uzji.js");return{diagram:e}},__vite__mapDeps([47,12,16,18,6,2,4,5,22,26,21]));return{id:t7t,diagram:t}},"loader"),ISe={id:t7t,detector:ESe,loader:LSe},Pit=!1,iC=G(()=>{Pit||(Pit=!0,H6("error",Y6e,t=>t.toLowerCase().trim()==="error"),H6("---",{db:{clear:G(()=>{},"clear")},styles:{},renderer:{draw:G(()=>{},"draw")},parser:{parse:G(()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")},"parse")},init:G(()=>null,"init")},t=>t.toLowerCase().trimStart().startsWith("---")),oR(Q6e,oSe,MSe),oR(O5e,uSe,D6e,M6e,Y5e,r6e,a6e,l6e,x6e,k6e,q5e,F5e,rSe,Q5e,F6e,O6e,q6e,f6e,pSe,vSe,m6e,kSe,xSe,ISe))},"addDiagrams"),DSe=G(async()=>{Vt.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(jp).map(async([e,{detector:r,loader:n}])=>{if(n)try{uR(e)}catch{try{const{diagram:i,id:a}=await n();H6(a,i,r)}catch(i){throw Vt.error(`Failed to load external diagram with key ${e}. Removing from detectors.`),delete jp[e],i}}}))).filter(e=>e.status==="rejected");if(t.length>0){Vt.error(`Failed to load ${t.length} external diagrams`);for(const e of t)Vt.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}},"loadRegisteredDiagrams"),PSe="graphics-document document";function e7t(t,e){t.attr("role",PSe),e!==""&&t.attr("aria-roledescription",e)}G(e7t,"setA11yDiagramInfo");function r7t(t,e,r,n){if(t.insert!==void 0){if(r){const i=`chart-desc-${n}`;t.attr("aria-describedby",i),t.insert("desc",":first-child").attr("id",i).text(r)}if(e){const i=`chart-title-${n}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}G(r7t,"addSVGa11yTitleDescription");var h3,QR=(h3=class{constructor(t,e,r,n,i){this.type=t,this.text=e,this.db=r,this.parser=n,this.renderer=i}static async fromText(t,e={}){const r=zo(),n=jj(t,r);t=L4e(t)+` `;try{uR(n)}catch{const l=ime(n);if(!l)throw new s4t(`Diagram ${n} not found.`);const{id:c,diagram:u}=await l();H6(c,u)}const{db:i,parser:a,renderer:o,init:s}=uR(n);return a.parser&&(a.parser.yy=i),i.clear?.(),s?.(r),e.title&&i.setDiagramTitle?.(e.title),await a.parse(t),new h3(n,t,i,a,o)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}},G(h3,"Diagram"),h3),$it=[],$Se=G(()=>{$it.forEach(t=>{t()}),$it=[]},"attachFunctions"),BSe=G(t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart(),"cleanupComments");function n7t(t){const e=t.match(o4t);if(!e)return{text:t,metadata:{}};let r=r1e(e[1],{schema:e1e})??{};r=typeof r=="object"&&!Array.isArray(r)?r:{};const n={};return r.displayMode&&(n.displayMode=r.displayMode.toString()),r.title&&(n.title=r.title.toString()),r.config&&(n.config=r.config),{text:t.slice(e[0].length),metadata:n}}G(n7t,"extractFrontMatter");var OSe=G(t=>t.replace(/\r\n?/g,` `).replace(/<(\w+)([^>]*)>/g,(e,r,n)=>"<"+r+n.replace(/="([^"]*)"/g,"='$1'")+">"),"cleanupText"),zSe=G(t=>{const{text:e,metadata:r}=n7t(t),{displayMode:n,title:i,config:a={}}=r;return n&&(a.gantt||(a.gantt={}),a.gantt.displayMode=n),{title:i,config:a,text:e}},"processFrontmatter"),RSe=G(t=>{const e=ec.detectInit(t)??{},r=ec.detectDirective(t,"wrap");return Array.isArray(r)?e.wrap=r.some(({type:n})=>n==="wrap"):r?.type==="wrap"&&(e.wrap=!0),{text:v4e(t),directive:e}},"processDirectives");function Hq(t){const e=OSe(t),r=zSe(e),n=RSe(r.text),i=kq(r.config,n.directive);return t=BSe(n.text),{code:t,title:r.title,config:i}}G(Hq,"preprocessDiagram");function i7t(t){const e=new TextEncoder().encode(t),r=Array.from(e,n=>String.fromCodePoint(n)).join("");return btoa(r)}G(i7t,"toBase64");var NSe=5e4,FSe="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa",HSe="sandbox",VSe="loose",jSe="http://www.w3.org/2000/svg",qSe="http://www.w3.org/1999/xlink",WSe="http://www.w3.org/1999/xhtml",GSe="100%",USe="100%",YSe="border:0;margin:0;",XSe="margin:0",ZSe="allow-top-navigation-by-user-activation allow-popups",KSe='The "iframe" tag is not supported by your browser.',QSe=["foreignobject"],JSe=["dominant-baseline"];function Vq(t){const e=Hq(t);return N6(),xme(e.config??{}),e}G(Vq,"processAndSetConfigs");async function a7t(t,e){iC();try{const{code:r,config:n}=Vq(t);return{diagramType:(await s7t(r)).type,config:n}}catch(r){if(e?.suppressErrors)return!1;throw r}}G(a7t,"parse");var Bit=G((t,e,r=[])=>` .${t} ${e} { ${r.join(" !important; ")} !important; }`,"cssImportantStyles"),t7e=G((t,e=new Map)=>{let r="";if(t.themeCSS!==void 0&&(r+=` diff --git a/assets/categories.md.CnMuA3JG.js b/assets/categories.md.CVTxAp5y.js similarity index 72% rename from assets/categories.md.CnMuA3JG.js rename to assets/categories.md.CVTxAp5y.js index 436e554..b081174 100644 --- a/assets/categories.md.CnMuA3JG.js +++ b/assets/categories.md.CVTxAp5y.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"分类","description":"","frontmatter":{"title":"分类","categoriesPage":true,"permalink":"/categories","article":false,"layout":"home"},"headers":[],"relativePath":"categories.md","filePath":"@pages/categoriesPage.md"}'),r={name:"categories.md"};function o(s,c,i,n,p,l){return a(),t("div")}const _=e(r,[["render",o]]);export{m as __pageData,_ as default}; +import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"分类","description":"","frontmatter":{"title":"分类","categoriesPage":true,"permalink":"/categories","article":false,"layout":"home"},"headers":[],"relativePath":"categories.md","filePath":"@pages/categoriesPage.md"}'),r={name:"categories.md"};function o(s,c,i,n,p,l){return a(),t("div")}const _=e(r,[["render",o]]);export{m as __pageData,_ as default}; diff --git a/assets/categories.md.CnMuA3JG.lean.js b/assets/categories.md.CVTxAp5y.lean.js similarity index 72% rename from assets/categories.md.CnMuA3JG.lean.js rename to assets/categories.md.CVTxAp5y.lean.js index 436e554..b081174 100644 --- a/assets/categories.md.CnMuA3JG.lean.js +++ b/assets/categories.md.CVTxAp5y.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"分类","description":"","frontmatter":{"title":"分类","categoriesPage":true,"permalink":"/categories","article":false,"layout":"home"},"headers":[],"relativePath":"categories.md","filePath":"@pages/categoriesPage.md"}'),r={name:"categories.md"};function o(s,c,i,n,p,l){return a(),t("div")}const _=e(r,[["render",o]]);export{m as __pageData,_ as default}; +import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"分类","description":"","frontmatter":{"title":"分类","categoriesPage":true,"permalink":"/categories","article":false,"layout":"home"},"headers":[],"relativePath":"categories.md","filePath":"@pages/categoriesPage.md"}'),r={name:"categories.md"};function o(s,c,i,n,p,l){return a(),t("div")}const _=e(r,[["render",o]]);export{m as __pageData,_ as default}; diff --git a/assets/chunks/@localSearchIndexroot.DDuUMxZm.js b/assets/chunks/@localSearchIndexroot.DDuUMxZm.js new file mode 100644 index 0000000..32de2dd --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.DDuUMxZm.js @@ -0,0 +1 @@ +const e='{"documentCount":1050,"nextId":1050,"documentIds":{"0":"/fullstack/overview#精选专题","1":"/fullstack/jamstack#_1-jamstack-核心概念与核心特性","2":"/fullstack/jamstack#_1-1-核心定义","3":"/fullstack/jamstack#_1-2-核心特性-与传统动态网站对比","4":"/fullstack/jamstack#_1-3-关键误区澄清","5":"/fullstack/jamstack#_2-jamstack-核心技术栈-工具链选型","6":"/fullstack/jamstack#_2-1-核心构建工具-静态站点生成器-ssg","7":"/fullstack/jamstack#_2-2-静态资源托管-部署平台","8":"/fullstack/jamstack#_2-3-api-baas-服务-后端能力补充","9":"/fullstack/jamstack#_2-4-无头-cms-内容管理","10":"/fullstack/jamstack#_3-jamstack-项目实践-从-0-到-1-搭建博客网站","11":"/fullstack/jamstack#_3-1-技术栈选型","12":"/fullstack/jamstack#_3-2-具体实施步骤","13":"/fullstack/jamstack#步骤-1-初始化-next-js-项目-ssg-模式","14":"/fullstack/jamstack#步骤-2-配置-contentful-内容管理","15":"/fullstack/jamstack#步骤-3-预渲染博客页面-ssg-核心","16":"/fullstack/jamstack#步骤-4-集成-supabase-实现动态评论","17":"/fullstack/jamstack#步骤-5-部署到-vercel-一键上线","18":"/fullstack/jamstack#_3-3-项目扩展-从博客到电商-jamstack-场景延伸","19":"/fullstack/jamstack#_4-jamstack-适用场景与不适用场景","20":"/fullstack/jamstack#_5-总结","21":"/fullstack/frontend-rendering-scheme#_1-引言","22":"/fullstack/frontend-rendering-scheme#_2-csr-渲染方案","23":"/fullstack/frontend-rendering-scheme#核心原理","24":"/fullstack/frontend-rendering-scheme#优缺点","25":"/fullstack/frontend-rendering-scheme#适用与不适用场景","26":"/fullstack/frontend-rendering-scheme#_3-ssr-渲染方案","27":"/fullstack/frontend-rendering-scheme#核心原理-1","28":"/fullstack/frontend-rendering-scheme#优缺点-1","29":"/fullstack/frontend-rendering-scheme#适用与不适用场景-1","30":"/fullstack/frontend-rendering-scheme#_4-ssg-渲染方案","31":"/fullstack/frontend-rendering-scheme#核心原理-2","32":"/fullstack/frontend-rendering-scheme#优缺点-2","33":"/fullstack/frontend-rendering-scheme#适用与不适用场景-2","34":"/fullstack/frontend-rendering-scheme#_5-isr-渲染方案","35":"/fullstack/frontend-rendering-scheme#核心原理-3","36":"/fullstack/frontend-rendering-scheme#isr-的两种模式","37":"/fullstack/frontend-rendering-scheme#优缺点-3","38":"/fullstack/frontend-rendering-scheme#适用与不适用场景-3","39":"/fullstack/frontend-rendering-scheme#_6-ppr-渲染方案","40":"/fullstack/frontend-rendering-scheme#核心原理-4","41":"/fullstack/frontend-rendering-scheme#与-isr-的本质区别","42":"/fullstack/frontend-rendering-scheme#优缺点-4","43":"/fullstack/frontend-rendering-scheme#适用与不适用场景-4","44":"/fullstack/frontend-rendering-scheme#_7-关键差异点分析与实践选择指南","45":"/fullstack/frontend-rendering-scheme#_7-1-五种方案综合对比","46":"/fullstack/frontend-rendering-scheme#_7-3-选型决策树","47":"/fullstack/frontend-rendering-scheme#_7-4-常见落地陷阱与解决方案","48":"/fullstack/frontend-rendering-scheme#_8-vitepress-一个典型的-ssg-实践案例","49":"/fullstack/frontend-rendering-scheme#_8-1-vitepress-如何落地-ssg","50":"/fullstack/frontend-rendering-scheme#_1-构建时穷举","51":"/fullstack/frontend-rendering-scheme#_2-零运行时","52":"/fullstack/frontend-rendering-scheme#_3-纯静态分发","53":"/fullstack/frontend-rendering-scheme#_8-2-核心原理","54":"/fullstack/frontend-rendering-scheme#_8-3-从-vitepress-学到的五件事","55":"/fullstack/frontend-rendering-scheme#_9-结语","56":"/fullstack/next-deep-dive#_1-从-react-ssr-到-next-js-为什么需要一个框架","57":"/fullstack/next-deep-dive#_1-1-react-dom-server-—-服务端渲染","58":"/fullstack/next-deep-dive#_1-2-react-dom-client-—-客户端水合-hydration","59":"/fullstack/next-deep-dive#_1-3-从-库-到-框架-的鸿沟","60":"/fullstack/next-deep-dive#_2-server-first-next-js-的架构内核","61":"/fullstack/next-deep-dive#_2-1-react-server-components-rsc","62":"/fullstack/next-deep-dive#_2-2-client-components-按需声明交互边界","63":"/fullstack/next-deep-dive#_3-混合渲染-四种策略-各取所需-灵活混用","64":"/fullstack/next-deep-dive#_4-app-router-文件系统即路由系统-约定大于配置","65":"/fullstack/next-deep-dive#_4-1-基础规则","66":"/fullstack/next-deep-dive#_4-2-特殊文件约定","67":"/fullstack/next-deep-dive#_4-3-目录结构与路由关系示例","68":"/fullstack/next-deep-dive#_5-数据获取的新范式","69":"/fullstack/next-deep-dive#_5-1-记忆化请求去重","70":"/fullstack/next-deep-dive#_5-2-动态-seo-元数据","71":"/fullstack/next-deep-dive#_5-3-api-routes-内置后端能力","72":"/fullstack/next-deep-dive#_6-内置优化组件-让性能在框架层解决","73":"/fullstack/next-deep-dive#_6-性能进阶-streaming、suspense、ppr-与-cache","74":"/fullstack/next-deep-dive#_6-1-streaming-suspense-先让用户看到内容","75":"/fullstack/next-deep-dive#_6-3-ppr-partial-prerendering-动静分离","76":"/fullstack/next-deep-dive#_6-4-cache-components-use-cache-跳过重复计算","77":"/fullstack/next-deep-dive#_6-5-ppr-cache-的协同","78":"/fullstack/next-deep-dive#_6-6-客户端缓存-swr","79":"/fullstack/next-deep-dive#_7-场景边界与建议","80":"/fullstack/next-deep-dive#_7-1-适合-next-js-的场景","81":"/fullstack/next-deep-dive#_7-2-不适合-next-js-的场景","82":"/fullstack/next-deep-dive#_7-3-核心实践原则","83":"/fullstack/server-state-management#_1-引言","84":"/fullstack/server-state-management#_1-swr","85":"/fullstack/server-state-management#_1-1-简介与核心流程说明","86":"/fullstack/server-state-management#_1-3-核心应用场景解析","87":"/fullstack/server-state-management#场景-1-封装领域-hook-与全局配置","88":"/fullstack/server-state-management#场景-2-乐观-ui-更新-optimistic-ui","89":"/fullstack/server-state-management#场景-3-依赖请求-dependent-fetching","90":"/fullstack/server-state-management#_2-tanstack-query-react-query","91":"/fullstack/server-state-management#_2-1-简介与核心流程说明","92":"/fullstack/server-state-management#_2-2-优势分析","93":"/fullstack/server-state-management#_2-3-核心应用场景解析","94":"/fullstack/server-state-management#场景-1-全局引擎配置-queryclient","95":"/fullstack/server-state-management#场景-2-高级查询-数据转换、依赖与分页","96":"/fullstack/server-state-management#场景-3-架构级难点-——-乐观-ui-更新-optimistic-updates","97":"/fullstack/server-state-management#_3-选型评估-swr-vs-react-query","98":"/fullstack/server-state-management#_3-1-核心设计与功能对比分析","99":"/fullstack/server-state-management#_3-2-场景驱动选型-到底需要哪一个","100":"/fullstack/server-state-management#场景-a-应该毫不犹豫选择-swr-的情况","101":"/fullstack/server-state-management#场景-b-应该毫不犹豫选择-tanstack-query-的情况","102":"/fullstack/networking-protocol-selection-guide#_1-引言","103":"/fullstack/networking-protocol-selection-guide#_2-传统-http——web-通信的基石","104":"/fullstack/networking-protocol-selection-guide#_3-流式-http-streamable-http","105":"/fullstack/networking-protocol-selection-guide#_3-1-核心原理-分块传输的艺术","106":"/fullstack/networking-protocol-selection-guide#_3-2-应用场景-从大文件到-ai-时代","107":"/fullstack/networking-protocol-selection-guide#_3-3-隐藏的坑-代理与缓冲","108":"/fullstack/networking-protocol-selection-guide#_4-sse-server-sent-events-规范化的单向推送协议","109":"/fullstack/networking-protocol-selection-guide#_4-1-核心原理-严格的文本契约","110":"/fullstack/networking-protocol-selection-guide#_4-2-网络机制-原生浏览器的-自动驾驶","111":"/fullstack/networking-protocol-selection-guide#_4-3-典型场景-轻量级的实时感知","112":"/fullstack/networking-protocol-selection-guide#_4-4-工程避坑指南-不可忽视的约束","113":"/fullstack/networking-protocol-selection-guide#_5-websocket-全双工通信","114":"/fullstack/networking-protocol-selection-guide#_5-1-核心原理","115":"/fullstack/networking-protocol-selection-guide#_5-2-网络机制","116":"/fullstack/networking-protocol-selection-guide#_5-3-应用场景-高互动的终极方案","117":"/fullstack/networking-protocol-selection-guide#_5-4-工程落地的-重装-代价","118":"/fullstack/networking-protocol-selection-guide#_6-webhooks-事件驱动的反向回调","119":"/fullstack/networking-protocol-selection-guide#_6-1-核心原理-回调的自动化","120":"/fullstack/networking-protocol-selection-guide#_6-2-典型场景-跨系统的松耦合集成","121":"/fullstack/networking-protocol-selection-guide#_6-3-工程考量-可靠投递与安全防护","122":"/fullstack/networking-protocol-selection-guide#_6-4-与-sse-的本质区别","123":"/fullstack/networking-protocol-selection-guide#_7-关于-http-轮询的讨论","124":"/fullstack/networking-protocol-selection-guide#_7-1-任务特性的本质差异-流式输出-vs-异步大任务","125":"/fullstack/networking-protocol-selection-guide#_7-2-基础设施的残酷现实-连接池枯竭与网关超时","126":"/fullstack/networking-protocol-selection-guide#_7-3-后端架构的天然要求-解耦与消息队列","127":"/fullstack/networking-protocol-selection-guide#_7-4-移动端弱网环境下的-绝对鲁棒性","128":"/fullstack/networking-protocol-selection-guide#_7-5-小结","129":"/fullstack/networking-protocol-selection-guide#_8-实践选型指南-不买最贵的-只选最对的","130":"/fullstack/networking-protocol-selection-guide#_8-1-决策矩阵-ai-与实时业务场景选型","131":"/fullstack/networking-protocol-selection-guide#_8-2-深度决策逻辑-工程选型的五条金律","132":"/fullstack/networking-protocol-selection-guide#_9-结语","133":"/fullstack/networking-sse-practice#_1-引言","134":"/fullstack/networking-sse-practice#_1-1-概念澄清-两种技术-两个层次","135":"/fullstack/networking-sse-practice#_1-2-关联与协作","136":"/fullstack/networking-sse-practice#_1-3-sse-协议数据格式","137":"/fullstack/networking-sse-practice#_2-原生-sse-客户端-api","138":"/fullstack/networking-sse-practice#_2-1-eventsource-api-概览","139":"/fullstack/networking-sse-practice#_2-2-服务端实现示例","140":"/fullstack/networking-sse-practice#_3-fetch-readablestream-实现方案","141":"/fullstack/networking-sse-practice#_3-1-原生-fetch-readablestream-实现","142":"/fullstack/networking-sse-practice#_3-2-fetch-event-source-更优雅的解决方案","143":"/fullstack/networking-sse-practice#_3-3-解析流水线详解","144":"/fullstack/networking-sse-practice#_3-4-典型使用示例","145":"/fullstack/networking-sse-practice#_4-生产实践要点与完整示例","146":"/fullstack/networking-sse-practice#_4-1-重试策略-指数退避","147":"/fullstack/networking-sse-practice#_4-2-事件分类处理-区分业务事件与协议控制事件","148":"/fullstack/networking-sse-practice#_4-3-连接状态追踪-防止重复回调","149":"/fullstack/networking-sse-practice#_4-4-资源清理-abortcontroller-与主动取消","150":"/fullstack/networking-sse-practice#_4-5-完整示例-任务流订阅客户端","151":"/fullstack/networking-sse-practice#_5-流式响应的服务端","152":"/fullstack/networking-sse-practice#_5-1-服务端要点","153":"/fullstack/networking-sse-practice#_5-2-nestjs-实现示例","154":"/fullstack/networking-sse-practice#_5-3-支持-post-请求的-sse","155":"/fullstack/networking-sse-practice#_6-结语","156":"/fullstack/networking-polling-optimization#_1-引言","157":"/fullstack/networking-polling-optimization#_2-退避轮询","158":"/fullstack/networking-polling-optimization#_2-1-为什么需要退避轮询","159":"/fullstack/networking-polling-optimization#_2-2-核心机制与运行规则","160":"/fullstack/networking-polling-optimization#_2-3-客户端实现示例","161":"/fullstack/networking-polling-optimization#_3-长轮询","162":"/fullstack/networking-polling-optimization#_3-1-核心思想与流程","163":"/fullstack/networking-polling-optimization#_3-2-服务端实现-nestjs-示例","164":"/fullstack/networking-polling-optimization#_3-3-客户端实现示例","165":"/fullstack/networking-polling-optimization#_4-总结与选型建议","166":"/fullstack/networking-polling-optimization#_4-1-两种策略核心对比与选型建议","167":"/fullstack/networking-polling-optimization#_4-2-适用场景速查","168":"/fullstack/networking-polling-optimization#_4-3-混合策略建议","169":"/fullstack/react-design-philosophy-ai-augmented#_1-引言","170":"/fullstack/react-design-philosophy-ai-augmented#_2-划分具备分层结构的-自治-组件","171":"/fullstack/react-design-philosophy-ai-augmented#_3-构建纯渲染的静态版本-确立工程基线","172":"/fullstack/react-design-philosophy-ai-augmented#_4-寻找状态的最简表示-敲定拓扑位置","173":"/fullstack/react-design-philosophy-ai-augmented#_4-1-什么是-state-什么是-derived-data-派生数据","174":"/fullstack/react-design-philosophy-ai-augmented#_4-2-敲定-state-的安放位置","175":"/fullstack/react-design-philosophy-ai-augmented#_4-建立反向数据流-让回调成为刚性契约","176":"/fullstack/react-design-philosophy-ai-augmented#_5-规范驱动开发-sdd-从执行者转变为立法者","177":"/fullstack/react-design-philosophy-ai-augmented#_5-1-sdd-模式的核心流程与实践要点","178":"/fullstack/react-design-philosophy-ai-augmented#_5-2-sdd-模式的适用场景","179":"/fullstack/react-design-philosophy-ai-augmented#_5-3-为什么-react-与-sdd-天生一对","180":"/fullstack/react-design-philosophy-ai-augmented#_6-结语-工程师的不可替代性","181":"/fullstack/occams-razor-software-design#_1-奥卡姆剃刀原则的核心内涵","182":"/fullstack/occams-razor-software-design#_2-编程与设计中应用奥卡姆剃刀的核心场景","183":"/fullstack/occams-razor-software-design#_2-1-场景1-需求实现-拒绝-提前设计未来功能","184":"/fullstack/occams-razor-software-design#反例-过度设计","185":"/fullstack/occams-razor-software-design#正例-按需设计","186":"/fullstack/occams-razor-software-design#_2-2-场景2-代码实现-避免-冗余逻辑与重复代码","187":"/fullstack/occams-razor-software-design#反例-冗余代码","188":"/fullstack/occams-razor-software-design#正例-简洁代码","189":"/fullstack/occams-razor-software-design#_2-3-场景3-架构设计-优先-简单架构-拒绝-过度抽象","190":"/fullstack/occams-razor-software-design#反例-过度抽象的架构","191":"/fullstack/occams-razor-software-design#正例-简洁架构","192":"/fullstack/occams-razor-software-design#_2-4-场景4-依赖管理-减少-不必要的第三方库","193":"/fullstack/occams-razor-software-design#反例-过度依赖","194":"/fullstack/occams-razor-software-design#正例-按需依赖","195":"/fullstack/occams-razor-software-design#_2-5-场景5-接口设计-遵循-最小接口原则","196":"/fullstack/occams-razor-software-design#反例-冗余接口","197":"/fullstack/occams-razor-software-design#正例-简洁接口","198":"/fullstack/occams-razor-software-design#_2-6-场景6-调试与优化-优先排查-简单原因","199":"/fullstack/occams-razor-software-design#案例-接口返回-空数据-的排查流程","200":"/fullstack/occams-razor-software-design#_3-应用奥卡姆剃刀的三个关键注意事项","201":"/fullstack/occams-razor-software-design#_4-结语","202":"/fullstack/typescript-compilation-debugging-guide#_1-typescript-编译配置与-tsconfig-json","203":"/fullstack/typescript-compilation-debugging-guide#_1-1-tsconfig-json-核心配置梳理","204":"/fullstack/typescript-compilation-debugging-guide#_1-2-常用-typescript-配置组合","205":"/fullstack/typescript-compilation-debugging-guide#_2-大型项目的模块化配置-extends-与-references","206":"/fullstack/typescript-compilation-debugging-guide#_2-1-核心概念解析","207":"/fullstack/typescript-compilation-debugging-guide#_1、references-项目引用","208":"/fullstack/typescript-compilation-debugging-guide#_2、composite-复合项目","209":"/fullstack/typescript-compilation-debugging-guide#_3、extends-配置继承","210":"/fullstack/typescript-compilation-debugging-guide#_2-2-extends-与-references-的区别","211":"/fullstack/typescript-compilation-debugging-guide#_3-monorepo-项目配置实践","212":"/fullstack/typescript-compilation-debugging-guide#_3-1-根配置-tsconfig-base-json","213":"/fullstack/typescript-compilation-debugging-guide#_3-2-共享库项目-packages-shared-tsconfig-json","214":"/fullstack/typescript-compilation-debugging-guide#_3-3-web-前端项目-packages-web-tsconfig-json","215":"/fullstack/typescript-compilation-debugging-guide#_3-4-api-后端项目-packages-api-tsconfig-json","216":"/fullstack/typescript-compilation-debugging-guide#_3-5-最佳实践总结","217":"/fullstack/typescript-compilation-debugging-guide#_3-调试代码","218":"/fullstack/typescript-compilation-debugging-guide#_4-引入扩展工具","219":"/fullstack/typescript-compilation-debugging-guide#_4-1-静态检查工具-eslint","220":"/fullstack/typescript-compilation-debugging-guide#_4-2-单测工具-jest","221":"/fullstack/typescript-compilation-debugging-guide#_4-2-1-安装依赖","222":"/fullstack/typescript-compilation-debugging-guide#_4-2-2-配置-jest","223":"/fullstack/typescript-compilation-debugging-guide#_4-2-3-编写测试用例","224":"/fullstack/typescript-compilation-debugging-guide#_4-2-4-运行测试","225":"/fullstack/typescript-compilation-debugging-guide#_4-2-5-高级特性","226":"/fullstack/typescript-compilation-debugging-guide#_5-结语","227":"/fullstack/union-types-vs-intersection-types#_1-前置概念-类型即集合","228":"/fullstack/union-types-vs-intersection-types#_2-联合类型-类型的-或","229":"/fullstack/union-types-vs-intersection-types#_2-1-基础语法与语义","230":"/fullstack/union-types-vs-intersection-types#_2-2-可辨识联合-discriminated-union","231":"/fullstack/union-types-vs-intersection-types#_2-3-类型收窄全解","232":"/fullstack/union-types-vs-intersection-types#_2-4-穷尽性检查-never-的妙用","233":"/fullstack/union-types-vs-intersection-types#_2-5-keyof-在联合类型上的行为","234":"/fullstack/union-types-vs-intersection-types#_2-6-分布式条件类型","235":"/fullstack/union-types-vs-intersection-types#_3-交叉类型-类型的-与","236":"/fullstack/union-types-vs-intersection-types#_3-1-基础语法与语义","237":"/fullstack/union-types-vs-intersection-types#_3-2-属性冲突的本质","238":"/fullstack/union-types-vs-intersection-types#_3-3-函数类型的交叉-重载签名","239":"/fullstack/union-types-vs-intersection-types#_3-4-keyof-在交叉类型上的行为","240":"/fullstack/union-types-vs-intersection-types#_3-5-交叉类型-vs-extends-继承","241":"/fullstack/union-types-vs-intersection-types#_4-联合与交叉的深层关系","242":"/fullstack/union-types-vs-intersection-types#_4-1-keyof-对偶性","243":"/fullstack/union-types-vs-intersection-types#_4-2-分配律","244":"/fullstack/union-types-vs-intersection-types#_4-3-与类型层级的代数关系","245":"/fullstack/union-types-vs-intersection-types#_5-实战模式","246":"/fullstack/union-types-vs-intersection-types#_5-1-result-either-模式","247":"/fullstack/union-types-vs-intersection-types#_5-2-branded-type-标记类型","248":"/fullstack/union-types-vs-intersection-types#_5-3-mixin-组合模式","249":"/fullstack/union-types-vs-intersection-types#_5-4-精确的组件-props-类型","250":"/fullstack/union-types-vs-intersection-types#_6-总结","251":"/fullstack/typescript-generic-types#_1-泛型的基本概念和作用","252":"/fullstack/typescript-generic-types#_1-1-核心定义","253":"/fullstack/typescript-generic-types#_1-2-泛型与-any-类型的对比","254":"/fullstack/typescript-generic-types#_1-3-泛型的工作原理","255":"/fullstack/typescript-generic-types#_1-4-泛型的核心优势","256":"/fullstack/typescript-generic-types#_1-5-泛型的应用场景","257":"/fullstack/typescript-generic-types#_2-泛型代码示例","258":"/fullstack/typescript-generic-types#_2-1-基础泛型函数","259":"/fullstack/typescript-generic-types#_2-2-实用泛型函数-项目场景","260":"/fullstack/typescript-generic-types#_2-3-泛型接口-api-响应处理","261":"/fullstack/typescript-generic-types#_2-4-泛型类-数据容器","262":"/fullstack/typescript-generic-types#_2-5-泛型类型别名与高级应用","263":"/fullstack/typescript-generic-types#_3-泛型最佳实践总结","264":"/fullstack/typescript-generic-types#_4-泛型约束","265":"/fullstack/typescript-generic-types#_4-1-基本类型约束","266":"/fullstack/typescript-generic-types#_4-2-接口约束","267":"/fullstack/typescript-generic-types#_4-3-多重约束","268":"/fullstack/typescript-generic-types#_4-4-keyof-约束","269":"/fullstack/typescript-generic-types#_4-5-类约束","270":"/fullstack/typescript-generic-types#_4-6-小结","271":"/fullstack/typescript-generic-types#_5-结语","272":"/fullstack/module-programming-practice-guide#_1-引言","273":"/fullstack/module-programming-practice-guide#_2-分层架构设计","274":"/fullstack/module-programming-practice-guide#_2-1-前端分层架构","275":"/fullstack/module-programming-practice-guide#_2-2-后端模块化分层架构","276":"/fullstack/module-programming-practice-guide#_2-3-领域驱动设计-ddd-与模块化","277":"/fullstack/module-programming-practice-guide#_2-3-1-ddd-的核心理念","278":"/fullstack/module-programming-practice-guide#_2-3-2-ddd-的关键概念","279":"/fullstack/module-programming-practice-guide#_2-3-3-ddd-的分层架构","280":"/fullstack/module-programming-practice-guide#_2-3-4-全栈-ddd-项目目录结构示例","281":"/fullstack/module-programming-practice-guide#_2-3-5-ddd-实践指导","282":"/fullstack/module-programming-practice-guide#_2-3-6-ddd-实施建议","283":"/fullstack/module-programming-practice-guide#_2-3-7-ddd-的优势与挑战","284":"/fullstack/module-programming-practice-guide#_2-4-微前端与模块化","285":"/fullstack/module-programming-practice-guide#_2-4-1-微前端的核心理念","286":"/fullstack/module-programming-practice-guide#_2-4-2-微前端的模块化设计原则","287":"/fullstack/module-programming-practice-guide#_2-4-3-微前端实现方案对比","288":"/fullstack/module-programming-practice-guide#_2-4-4-模块联邦-module-federation-实战","289":"/fullstack/module-programming-practice-guide#_2-4-5-微前端通信机制","290":"/fullstack/module-programming-practice-guide#_2-4-6-微前端项目目录结构","291":"/fullstack/module-programming-practice-guide#_2-4-7-微前端最佳实践","292":"/fullstack/module-programming-practice-guide#_2-4-8-微前端小结","293":"/fullstack/module-programming-practice-guide#结语","294":"/fullstack/frontend-module-programming-basic#_1-引言","295":"/fullstack/frontend-module-programming-basic#_2-模块化编程初体验","296":"/fullstack/frontend-module-programming-basic#_3-模块与模块化的基础概念","297":"/fullstack/frontend-module-programming-basic#_3-1-痛点解决与工程价值","298":"/fullstack/frontend-module-programming-basic#_3-2-前端模块化的演进历程","299":"/fullstack/frontend-module-programming-basic#_3-3-结合设计模式的模块化实践","300":"/fullstack/frontend-module-programming-basic#工厂模式","301":"/fullstack/frontend-module-programming-basic#单例模式","302":"/fullstack/frontend-module-programming-basic#观察者模式观察者模式-发布订阅模式-observer-pub-sub","303":"/fullstack/frontend-module-programming-basic#_4-结语-在秩序与复杂中寻找平衡","304":"/fullstack/different-module-programming-specifications#_1-commonjs-规范-node-js-生态的基石","305":"/fullstack/different-module-programming-specifications#_2-amd-规范-浏览器异步加载方案","306":"/fullstack/different-module-programming-specifications#_3-umd-规范-跨环境兼容方案","307":"/fullstack/different-module-programming-specifications#_4-es-modules-现代开发的终极标准","308":"/fullstack/different-module-programming-specifications#_5-规范对比与现代迁移指南","309":"/fullstack/different-module-programming-specifications#_6-结语-在标准之上构建未来","310":"/fullstack/decode-es-modules#_1-命名导出与导入-精准的代码引用","311":"/fullstack/decode-es-modules#_2-默认导出与导入-单一职责的体现","312":"/fullstack/decode-es-modules#_3-转移导出-re-exporting-构建模块聚合层","313":"/fullstack/decode-es-modules#_4-动态导入-dynamic-import-性能优化的-大杀器","314":"/fullstack/decode-es-modules#_5-模块执行逻辑-静态解析与单例","315":"/fullstack/decode-es-modules#_6-循环依赖-挑战与生存指南","316":"/fullstack/decode-es-modules#_7-结语-在标准规范中寻求最优解","317":"/fullstack/typescript-module-programming-enhancement#_1-引言","318":"/fullstack/typescript-module-programming-enhancement#_2-类型导出与导入-极致的运行时优化","319":"/fullstack/typescript-module-programming-enhancement#_3-类型系统与模块化的深度融合","320":"/fullstack/typescript-module-programming-enhancement#_4-命名空间与模块-历史的交棒","321":"/fullstack/typescript-module-programming-enhancement#_5-声明文件-d-ts-抹平-js-与-ts-的鸿沟","322":"/fullstack/typescript-module-programming-enhancement#_6-现代模块化项目的-ts-配置指南","323":"/fullstack/typescript-module-programming-enhancement#_7-typescript-5-0-模块化新特性","324":"/fullstack/typescript-module-programming-enhancement#标准化装饰器-stage-3-decorators","325":"/fullstack/typescript-module-programming-enhancement#模块扩展-module-augmentation","326":"/fullstack/typescript-module-programming-enhancement#_8-结语-构建稳固的类型防线","327":"/fullstack/module-programming-principles-best-practices#_1-单一职责原则","328":"/fullstack/module-programming-principles-best-practices#_2-高内聚低耦合","329":"/fullstack/module-programming-principles-best-practices#_3-模块粒度设计","330":"/fullstack/module-programming-principles-best-practices#_4-命名规范","331":"/fullstack/module-programming-principles-best-practices#_5-模块版本管理","332":"/fullstack/module-programming-principles-best-practices#_6-结语-构建可预测的秩序","333":"/fullstack/nodejs-module-programming-summary#_1-commonjs-与-es-modules-双模共存","334":"/fullstack/nodejs-module-programming-summary#_2-node-js-模块加载机制","335":"/fullstack/nodejs-module-programming-summary#_3-包管理与模块化","336":"/fullstack/nodejs-module-programming-summary#_4-模块化架构-分层设计与关注点分离","337":"/fullstack/nodejs-module-programming-summary#_5-结语","338":"/fullstack/full-stack-resources#_1-基本语言与环境","339":"/fullstack/full-stack-resources#_2-核心-ui-框架","340":"/fullstack/full-stack-resources#_3-样式与-ui-组件库-styling-component-libraries","341":"/fullstack/full-stack-resources#_4-路由与状态管理","342":"/fullstack/full-stack-resources#_5-数据获取与-api-集成-data-fetching-api","343":"/fullstack/full-stack-resources#_6-构建工具与工作流-build-tools-workflow","344":"/fullstack/full-stack-resources#_7-全栈框架","345":"/fullstack/full-stack-resources#_8-部署与托管-deployment-hosting","346":"/fullstack/full-stack-resources#_9-学习资源与社区-learning-community","347":"/product-sense/overview#精选专题","348":"/product-sense/perplexity-knowledge-worker#_1-引言","349":"/product-sense/perplexity-knowledge-worker#_2-核心定位-从-链接导航-到-知识发现","350":"/product-sense/perplexity-knowledge-worker#_3-产品交互重构-反直觉的-ui-创新","351":"/product-sense/perplexity-knowledge-worker#_4-技术护城河-搜索是一项工程与模型的交响","352":"/product-sense/perplexity-knowledge-worker#_4-1-驯服幻觉-hallucination-的四个维度","353":"/product-sense/perplexity-knowledge-worker#_4-2-极致的性能优化-追踪尾部延迟-tail-latency","354":"/product-sense/perplexity-knowledge-worker#_5-商业逻辑-你的利润率-就是我的机会","355":"/product-sense/perplexity-knowledge-worker#_6-未来演进-从被动响应到主动-agent","356":"/product-sense/perplexity-knowledge-worker#写在最后","357":"/product-sense/ai-native-composite-talents#_1-引言-当-执行-被-ai-填平-什么才是核心壁垒","358":"/product-sense/ai-native-composite-talents#_2-从-解决问题-到-发现问题-提问力决定生产力","359":"/product-sense/ai-native-composite-talents#_3-培养非共识的-品味-逃离-ai-生成的-平均数","360":"/product-sense/ai-native-composite-talents#_4-保持真诚与-打破规则-的勇气-抵抗-ai-的-幻觉-与平庸","361":"/product-sense/ai-native-composite-talents#_5-复合指数增长-以小见大的行动力","362":"/product-sense/ai-native-composite-talents#_6-在算力面前保持敬畏-在机器面前保持好奇","363":"/product-sense/engineer-build-product-sense#_1-引言","364":"/product-sense/engineer-build-product-sense#_2-解构产品-sense-的数学之美","365":"/product-sense/engineer-build-product-sense#_2-1-极简杠杆公式-寻找-roi-的最大解","366":"/product-sense/engineer-build-product-sense#_2-2-洞察力公式-理智与情感的共舞","367":"/product-sense/engineer-build-product-sense#_2-3-ai-前沿视角公式-从-功能产品-到-语境构建","368":"/product-sense/engineer-build-product-sense#_3-刻意练习-如何从-凭感觉-到-有直觉","369":"/product-sense/engineer-build-product-sense#_3-1-建立-预测-验证-的反馈闭环","370":"/product-sense/engineer-build-product-sense#_3-2-培养-摩擦力日记","371":"/product-sense/engineer-build-product-sense#_3-3-解构-魔法-从惊叹到复刻的逆向工程","372":"/product-sense/engineer-build-product-sense#_1-记录-record-捕捉情绪颗粒度","373":"/product-sense/engineer-build-product-sense#_2-解剖-peel-上帝视角的逻辑拆解","374":"/product-sense/engineer-build-product-sense#_3-重构-reconstruct-全栈视角的复刻推演","375":"/product-sense/engineer-build-product-sense#_4-沉淀-crystallize-输出倒逼内化","376":"/product-sense/engineer-build-product-sense#_4-结语-从-如何实现-的焦虑中解放-拥抱-为何而做-的自由","377":"/product-sense/small-rule-learn#_1-社区先行-从-我是谁-到-我能为谁解决问题","378":"/product-sense/small-rule-learn#_2-极简流转-用-克制-对抗-熵增-用-自动化-替代-堆人力","379":"/product-sense/small-rule-learn#_3-盈利自信-做时间的朋友-而非资本的奴隶","380":"/product-sense/small-rule-learn#_4-建造你想住的房子-真实的营销与价值观契合","381":"/product-sense/small-rule-learn#_5-总结与反思","382":"/product-sense/insight-model#_1-表象背后藏着决定一切的-系统黑盒","383":"/product-sense/insight-model#_2-系统的核心-要素-连接关系","384":"/product-sense/insight-model#_3-变量-系统里的-变化因子","385":"/product-sense/insight-model#_4-因果链-搭建系统的骨架","386":"/product-sense/insight-model#_5-增强回路-造就指数级增长","387":"/product-sense/insight-model#_6-调节回路-让系统回归平衡","388":"/product-sense/insight-model#_7-滞后效应-时间的迷雾","389":"/product-sense/insight-model#_8-总结-从观察者到洞察者","390":"/product-sense/using-economics-thinking#_1-生活里的经济学洞察——洞察不仅是关于需求-更是关于成本与博弈","391":"/product-sense/using-economics-thinking#_1-1-容器的形状-方盒与圆瓶背后的成本战术","392":"/product-sense/using-economics-thinking#_1-2-可乐的三十年价格迷局-双头垄断下的博弈均衡","393":"/product-sense/using-economics-thinking#_1-3-来都来了-与沉没成本陷阱-有限理性的普遍胜利","394":"/product-sense/using-economics-thinking#_1-4-帕累托优化与最优体验-在约束条件下求最优解","395":"/product-sense/using-economics-thinking#_2-系统化方法论——将经济学思维系统化地应用到产品全生命周期","396":"/product-sense/using-economics-thinking#_2-1-产品定义与定位-深入市场洞察与价值发现","397":"/product-sense/using-economics-thinking#_2-2-产品定价策略-最大化收益与捕获用户剩余","398":"/product-sense/using-economics-thinking#_2-3-产品用户体验与留存-构建锁定效应与对抗边际效用递减","399":"/product-sense/using-economics-thinking#_2-4-产品商业化与生态构建-追求帕累托改进与管理外部性","400":"/product-sense/using-economics-thinking#_3-总结-方法论提炼与职业修养——培养-经济直觉","401":"/ai/overview#精选专题","402":"/ai/agent/overview#_1-什么是-agent-——从-工具-到-实体-的进化","403":"/ai/agent/overview#_2-核心价值-自动化程度的阶梯式跨越","404":"/ai/agent/overview#_3-应用场景-谁会被替代-谁会被增强","405":"/ai/agent/overview#_3-1-深度替代与变革型","406":"/ai/agent/overview#_3-2-辅助增强型-升级工作价值","407":"/ai/agent/overview#_3-3-生活与垂直领域-长尾覆盖","408":"/ai/agent/overview#_4-技术拆解-agent-核心要素与关键技术","409":"/ai/agent/overview#_4-1-规划","410":"/ai/agent/overview#_4-2-记忆","411":"/ai/agent/overview#_4-3-工具","412":"/ai/agent/overview#_4-4-行动","413":"/ai/agent/overview#_5-agent-的分类与未来","414":"/ai/agent/overview#_5-1-通用-agent","415":"/ai/agent/overview#_5-2-多智能体系统-multi-agent-system","416":"/ai/agent/overview#典型案例-deep-research-深度调研系统","417":"/ai/agent/overview#_5-3-知识型-agent","418":"/ai/agent/overview#_5-4-多模态-agent","419":"/ai/agent/overview#_5-5-迈向高度自主-openclaw-与-数字员工","420":"/ai/agent/overview#_6-结语-从-对话-到-协同-的范式革命","421":"/ai/agent/planning-module#_1-引言","422":"/ai/agent/planning-module#_2-任务分解-化繁为简的策略","423":"/ai/agent/planning-module#_2-1-先分解后规划","424":"/ai/agent/planning-module#_2-2-边分解边规划","425":"/ai/agent/planning-module#_2-3-基于语言模型的自主分解","426":"/ai/agent/planning-module#_3-自我反思-闭环控制的艺术","427":"/ai/agent/planning-module#_4-动态响应模式-基于-react-看规划闭环","428":"/ai/agent/planning-module#_5-预编排模式-plan-and-execute-下的自动化工程","429":"/ai/agent/planning-module#_5-1-核心运行机制","430":"/ai/agent/planning-module#_5-2-为什么在复杂场景中这种模式更具优势","431":"/ai/agent/planning-module#_5-3-小结","432":"/ai/agent/planning-module#_6-范式选择-如何为你的-agent-配置-小脑","433":"/ai/agent/planning-module#_7-结语-规划是-agent-迈向-确定性-的定盘星","434":"/ai/agent/composition-ai-components#_1-引言","435":"/ai/agent/composition-ai-components#_2-prompts-即时灵活的对话指令","436":"/ai/agent/composition-ai-components#_3-skills-可复用的专属能力包-把高频方法变成可复用能力","437":"/ai/agent/composition-ai-components#_4-projects-长期专属工作空间","438":"/ai/agent/composition-ai-components#_5-subagents-分工明确的专项助手","439":"/ai/agent/composition-ai-components#_6-mcp-模型上下文协议-外部连接通用协议","440":"/ai/agent/composition-ai-components#_7-结束语","441":"/ai/agent/skills-practice-summary#_1-引言-agent-skills-是什么","442":"/ai/agent/skills-practice-summary#_2-文件夹结构拆解-标准化的操作手册","443":"/ai/agent/skills-practice-summary#_3-核心机制与流程-渐进式披露的艺术","444":"/ai/agent/skills-practice-summary#_4-实践指南-如何写好一个-agent-skill","445":"/ai/agent/skills-practice-summary#_4-1-核心编写原则","446":"/ai/agent/skills-practice-summary#_4-2-四步法","447":"/ai/agent/skills-practice-summary#步骤-1-明确使用场景与边界","448":"/ai/agent/skills-practice-summary#步骤-2-编写元信息-yaml-frontmatter","449":"/ai/agent/skills-practice-summary#步骤-3-编写执行指令-markdown-body","450":"/ai/agent/skills-practice-summary#步骤4-skill-质量检查清单-checklist","451":"/ai/agent/skills-practice-summary#_5-一个具体的-agent-skill-示例-git-workflow","452":"/ai/agent/skills-practice-summary#_6-三类常见-agent-skill-模式","453":"/ai/agent/skills-practice-summary#模式-1-文档与资源生成","454":"/ai/agent/skills-practice-summary#模式-2-工作流自动化","455":"/ai/agent/skills-practice-summary#模式-3-mcp-增强与编排","456":"/ai/agent/skills-practice-summary#_7-总结-从零散指令到可持续工作流","457":"/ai/full-stack-builder#_1-引言-全能的幻觉与稀缺的转移","458":"/ai/full-stack-builder#_2-解构-full-stack-不是简单加法-而是乘数效应","459":"/ai/full-stack-builder#_2-1-核心能力矩阵与-3-个-level","460":"/ai/full-stack-builder#_2-2-判断力-taste-最难被-ai-替代的元能力","461":"/ai/full-stack-builder#_2-3-实现力-build-从-敲代码-到-系统编排","462":"/ai/full-stack-builder#_2-4-杠杆力-leverage-寻找你的-10x-乘数","463":"/ai/full-stack-builder#_3-full-stack-builder-的复利效应","464":"/ai/full-stack-builder#_4-进阶路径-full-stack-builder-的成长路径","465":"/ai/full-stack-builder#_5-ai-时代的机会在哪里","466":"/ai/full-stack-builder#_6-结语","467":"/ai/agent/deepresearch-agent#_1-引言","468":"/ai/agent/deepresearch-agent#_2-为什么深度研究需要-multi-agent-架构模式","469":"/ai/agent/deepresearch-agent#_3-系统架构","470":"/ai/agent/deepresearch-agent#_3-1-核心设计与职责分配","471":"/ai/agent/deepresearch-agent#_3-2-工作流设计","472":"/ai/agent/deepresearch-agent#_3-3-技术要点说明","473":"/ai/agent/deepresearch-agent#_4-实践案例-以-初中数学学习研究-为例","474":"/ai/agent/deepresearch-agent#_4-1-执行流观察","475":"/ai/agent/deepresearch-agent#_4-2-数据可视化的深度","476":"/ai/agent/deepresearch-agent#_5-结束语-迈向更可控的-agent-开发","477":"/ai/agent/claude-agent-sdk-basic-build#_1-引言","478":"/ai/agent/claude-agent-sdk-basic-build#_2-为什么选择-claude-agent-sdk","479":"/ai/agent/claude-agent-sdk-basic-build#_3-快速上手-环境配置与初始化","480":"/ai/agent/claude-agent-sdk-basic-build#_3-1-安装依赖","481":"/ai/agent/claude-agent-sdk-basic-build#_3-2-环境变量的-陷阱-与配置","482":"/ai/agent/claude-agent-sdk-basic-build#_4-核心实践-从无状态交互到自主执行","483":"/ai/agent/claude-agent-sdk-basic-build#_4-1-模式一-基础无状态对话","484":"/ai/agent/claude-agent-sdk-basic-build#_4-2-模式二-自主找-bug-并修复-agentic-loop","485":"/ai/agent/claude-agent-sdk-basic-build#_5-进阶-会话管理与持久化记忆","486":"/ai/agent/claude-agent-sdk-basic-build#_5-1-会话-id-的捕获与恢复","487":"/ai/agent/claude-agent-sdk-basic-build#_6-实战-tui-应用-构建流式交互-agent-终端","488":"/ai/agent/claude-agent-sdk-basic-build#_6-1-核心逻辑-流式解析-stream-event","489":"/ai/agent/claude-agent-sdk-basic-build#_6-2-封装-tuichat-对话循环","490":"/ai/agent/claude-agent-sdk-basic-build#_6-3-交互效果展示","491":"/ai/agent/claude-agent-sdk-basic-build#_7-结束语","492":"/ai/agent/math-bot#_1-破局点-面对-k12-赛道-谁才是真正的用户","493":"/ai/agent/math-bot#_2-为什么选择-数学-——-技术边界与场景的完美契合","494":"/ai/agent/math-bot#_3-agent-核心设计-结构化的-prompt-规范","495":"/ai/agent/math-bot#_4-总结-从研发思维到产品直觉","496":"/ai/agent/poetry-bot#_1-实践背景","497":"/ai/agent/poetry-bot#_2-平台与-agent-基本人设","498":"/ai/agent/poetry-bot#_2-1-平台选择","499":"/ai/agent/poetry-bot#_2-2-角色设定与物料生成","500":"/ai/agent/poetry-bot#_3-工作模式与工具集配置","501":"/ai/agent/poetry-bot#_3-1-工具-插件配置","502":"/ai/agent/poetry-bot#_3-2-工作模式设定","503":"/ai/agent/poetry-bot#_3-prompt-演进-从常规-prompt-到结构化-prompt","504":"/ai/agent/poetry-bot#_3-1-阶段一-非结构化-system-prompt-基线测试","505":"/ai/agent/poetry-bot#测试-case","506":"/ai/agent/poetry-bot#_3-2-阶段二-结构化-system-prompt-langgpt-范式","507":"/ai/agent/poetry-bot#测试-case-1","508":"/ai/agent/poetry-bot#测试-case-2","509":"/ai/agent/poetry-bot#_5-实践小总结","510":"/ai/tools-assistant#_1-ai-助手","511":"/ai/tools-assistant#_1-1-国外","512":"/ai/tools-assistant#_1-2-国内","513":"/ai/tools-assistant#_2-ai-学习与内容创作工作站","514":"/ai/tools-assistant#_2-1-关键点说明","515":"/ai/tools-assistant#_2-2-选择建议","516":"/ai/tools-assistant#_3-ai-搜索","517":"/ai/tools-assistant#_3-1-关键点说明","518":"/ai/tools-assistant#_3-2-选择建议","519":"/ai/llm-api-resources#_1-选模型前-先想清楚这几件事","520":"/ai/llm-api-resources#_2-官方-api-平台","521":"/ai/llm-api-resources#_2-1-国际顶尖模型","522":"/ai/llm-api-resources#_2-2-国内优秀模型","523":"/ai/llm-api-resources#_3-第三方聚合平台","524":"/ai-coding/overview#精选专题","525":"/ai-coding/ai-change-work-workflow#_1-引言","526":"/ai-coding/ai-change-work-workflow#_2-盯准任务构成-而非单一速度-重获-工程尊严-的-27","527":"/ai-coding/ai-change-work-workflow#_2-1-从-技术债务-到-系统韧性","528":"/ai-coding/ai-change-work-workflow#_2-2-从-不划算-到-高价值-任务优先级的重新洗牌","529":"/ai-coding/ai-change-work-workflow#_2-3-跨领域能力的-无痛溢出","530":"/ai-coding/ai-change-work-workflow#_3-对抗-平庸化-——-在自然语言编程时代重塑工程-sense","531":"/ai-coding/ai-change-work-workflow#_3-1-警惕-监督悖论-与能力的平庸化","532":"/ai-coding/ai-change-work-workflow#_3-2-从-vibe-coding-进化到规范驱动-sdd","533":"/ai-coding/ai-change-work-workflow#_3-3-构建新型-工程-sense-从手艺人到导演","534":"/ai-coding/ai-change-work-workflow#_4-范式落地——在随机性之上-构建确定性的工程基座","535":"/ai-coding/ai-change-work-workflow#_4-1-从-单点指令-转向-多智能体编排-multi-agent-orchestration","536":"/ai-coding/ai-change-work-workflow#_4-2-构建-上下文护城河-从-prompt-到知识图谱","537":"/ai-coding/ai-change-work-workflow#_4-3-可观测性-让-ai-的决策过程透明可见","538":"/ai-coding/ai-change-work-workflow#_4-4-拥抱-不确定性-但守住-质量底线","539":"/ai-coding/ai-change-work-workflow#_5-结语","540":"/ai-coding/ai-engineer-capability#_1-产品应用层-insight-stack-走向-超级个体-的-ai-原生全栈","541":"/ai-coding/ai-engineer-capability#_1-1-产品-sense-与业务洞察","542":"/ai-coding/ai-engineer-capability#_1-2-agentic-engineering-智能体工程","543":"/ai-coding/ai-engineer-capability#_1-3-ai-first-的交互哲学","544":"/ai-coding/ai-engineer-capability#_2-agent-开发层-构建连接物理世界的数字中枢","545":"/ai-coding/ai-engineer-capability#_2-1-agentic-workflow-设计","546":"/ai-coding/ai-engineer-capability#_2-2-记忆机制-memory-management","547":"/ai-coding/ai-engineer-capability#_2-3-技能的插件化-agent-skill","548":"/ai-coding/ai-engineer-capability#_2-4-从硬编码到标准协议与上下文连接","549":"/ai-coding/ai-engineer-capability#_2-5-模型选型、路由与可观测性","550":"/ai-coding/ai-engineer-capability#_2-6-edd-评估驱动开发-重塑工程质量","551":"/ai-coding/ai-engineer-capability#_3-ai-基础设施层-算力与模型的重工业底座","552":"/ai-coding/ai-engineer-capability#_4-找准自己的生态位","553":"/ai-coding/ai-native#_1-引言","554":"/ai-coding/ai-native#_2-ai-时代的全栈新公式","555":"/ai-coding/ai-native#_2-1-engineering-工程力-从-困于实现-到-敢于设计","556":"/ai-coding/ai-native#_2-2-product-产品力-从-需求翻译机-到-价值定义者","557":"/ai-coding/ai-native#_2-3-ai-ai-杠杆-指数级倍增器","558":"/ai-coding/ai-native#_3-从-tech-stack-到-insight-stack-进阶之路","559":"/ai-coding/resources#_1-三种编程范式速览","560":"/ai-coding/resources#_2-vibe-coding-—-用自然语言-说-出一个应用","561":"/ai-coding/resources#_2-1-关键点说明","562":"/ai-coding/resources#_2-2-六款工具横向对比","563":"/ai-coding/resources#_3-ai-ide-—-与代码编辑器深度融合","564":"/ai-coding/resources#_3-1-关键点说明","565":"/ai-coding/resources#_3-2-三款工具横向对比","566":"/ai-coding/resources#_4-agentic-engineering-—-ai-自主完成工程任务","567":"/ai-coding/resources#_4-1-关键点说明","568":"/ai-coding/resources#_4-2-五款-agentic-工具横向对比","569":"/ai-coding/claude-code-deep-dive#_1-引言","570":"/ai-coding/claude-code-deep-dive#_2-目录概览","571":"/ai-coding/claude-code-deep-dive#_3-claude-md-最核心的配置文件","572":"/ai-coding/claude-code-deep-dive#_3-1-应该写什么","573":"/ai-coding/claude-code-deep-dive#_3-2-示例","574":"/ai-coding/claude-code-deep-dive#_3-3-如何创建-claude-md","575":"/ai-coding/claude-code-deep-dive#_4-rules-模块化规则","576":"/ai-coding/claude-code-deep-dive#_4-1-路径过滤-让规则精准生效","577":"/ai-coding/claude-code-deep-dive#_4-2-何时该拆分到-rules","578":"/ai-coding/claude-code-deep-dive#_4-3-规则文件的组织建议","579":"/ai-coding/claude-code-deep-dive#_5-commands-自定义斜杠命令","580":"/ai-coding/claude-code-deep-dive#_5-1-命令的存放位置","581":"/ai-coding/claude-code-deep-dive#_5-2-命令的结构","582":"/ai-coding/claude-code-deep-dive#_5-3-传递参数-arguments","583":"/ai-coding/claude-code-deep-dive#_5-4-命令的价值","584":"/ai-coding/claude-code-deep-dive#_6-skills-自动触发的工作流","585":"/ai-coding/claude-code-deep-dive#_6-1-技能与命令的根本区别","586":"/ai-coding/claude-code-deep-dive#_6-2-技能的结构","587":"/ai-coding/claude-code-deep-dive#_6-3-技能的使用场景","588":"/ai-coding/claude-code-deep-dive#_6-4-何时用命令-何时用技能","589":"/ai-coding/claude-code-deep-dive#_7-agents-独立执行的专职角色","590":"/ai-coding/claude-code-deep-dive#_7-1-为什么需要-agents","591":"/ai-coding/claude-code-deep-dive#_7-2-agents-的定义结构","592":"/ai-coding/claude-code-deep-dive#_7-3-agents-vs-skills-谁是更好的选择","593":"/ai-coding/claude-code-deep-dive#_8-settings-json-权限与项目配置","594":"/ai-coding/claude-code-deep-dive#_8-1-配置结构","595":"/ai-coding/claude-code-deep-dive#_8-2-典型场景","596":"/ai-coding/claude-code-deep-dive#_8-3-settings-local-json-个人权限覆盖","597":"/ai-coding/claude-code-deep-dive#_9-结语","598":"/growth/books#_1-ai-与数学思维","599":"/growth/books#_2-产品与商业","600":"/growth/books#_2-1-产品-sense-与创造","601":"/growth/books#_2-2-商业化","602":"/growth/books#_3-效率与效能","603":"/growth/books#_4-学习与成长","604":"/growth/books#_5-人文社科","605":"/growth/books#_6-健康生活","606":"/growth/reading-tips#_1-我们为什么需要读书","607":"/growth/reading-tips#_2-读书-三要","608":"/growth/reading-tips#第一-要-完整地读-整本地读","609":"/growth/reading-tips#第二-要-带着问题去读-构建知识树","610":"/growth/reading-tips#第三-要-与人-或ai-讨论-检验理解的试金石","611":"/growth/reading-tips#_3-读书-三不要","612":"/growth/reading-tips#第一-不要-不要怀揣哀怨心态-避免读书目的被异化","613":"/growth/reading-tips#第二-不要-不要玩物丧志-陷入对物理媒介的过度迷恋","614":"/growth/reading-tips#第三-不要-不要只读书不知现实-避免知识结构陷入-真空","615":"/growth/reading-tips#_4-让书籍成为连接自我与现实的桥梁","616":"/growth/distinguish-useful-information#_1-打破-信息差-的系统性错觉","617":"/growth/distinguish-useful-information#_1-1-表面是你在筛选信息-实际是信息在筛选人","618":"/growth/distinguish-useful-information#_1-2-警惕算法构建的-信息茧房","619":"/growth/distinguish-useful-information#_2-信息泛滥与脑力带宽的消耗","620":"/growth/distinguish-useful-information#_2-1-从-追求差-到-对抗泛滥","621":"/growth/distinguish-useful-information#_2-2-无效信息是对算力的极大消耗","622":"/growth/distinguish-useful-information#_3-价值创造的核心-思考-执行-突破信息壁垒","623":"/growth/distinguish-useful-information#_4-行动指南","624":"/growth/distinguish-useful-information#_4-1-信息筛选-果断做减法-锚定核心目标","625":"/growth/distinguish-useful-information#_4-2-信息解读-穿透表象-洞察未言之意","626":"/growth/distinguish-useful-information#_4-3-差异破局-向内求索-强化-思考-执行","627":"/insight-labs/overview#卡片盒笔记法","628":"/insight-labs/overview#ai-增强型-obsidian-卡片盒-llm-wiki-library-双轨制","629":"/insight-labs/overview#输出驱动-从内化到输出","630":"/insight-labs/overview#知识仓库目录划分与设计","631":"/insight-labs/overview#数据如何流动","632":"/insight-labs/ai-insight-engine#项目简介","633":"/insight-labs/ai-insight-engine#四阶段流水线","634":"/insight-labs/ai-insight-engine#三种消费模式","635":"/insight-labs/ai-insight-engine#项目时间线","636":"/insight-labs/repo-insight/overview#项目简介","637":"/insight-labs/repo-insight/overview#解读案例","638":"/insight-labs/repo-insight/amis#_1-项目概览","639":"/insight-labs/repo-insight/amis#_1-1-项目定位与核心价值","640":"/insight-labs/repo-insight/amis#_1-2-目标场景与典型-case","641":"/insight-labs/repo-insight/amis#_1-3-核心技术亮点","642":"/insight-labs/repo-insight/amis#_1-4-技术栈与选型对比","643":"/insight-labs/repo-insight/amis#_1-5-项目规模","644":"/insight-labs/repo-insight/amis#_2-整体架构设计-overall-architecture","645":"/insight-labs/repo-insight/amis#_2-1-架构概述","646":"/insight-labs/repo-insight/amis#_2-2-整体架构图","647":"/insight-labs/repo-insight/amis#_2-3-目录结构","648":"/insight-labs/repo-insight/amis#_3-模块依赖与调用关系","649":"/insight-labs/repo-insight/amis#_3-1-全局入口与核心路由","650":"/insight-labs/repo-insight/amis#_3-2-核心业务实体与关联","651":"/insight-labs/repo-insight/amis#_4-核心模块详解","652":"/insight-labs/repo-insight/amis#模块一-渲染器工厂系统-factory-system","653":"/insight-labs/repo-insight/amis#模块二-mst-store-状态管理系统","654":"/insight-labs/repo-insight/amis#模块三-动作与事件系统-action-system","655":"/insight-labs/repo-insight/amis#模块四-表达式引擎-amis-formula","656":"/insight-labs/repo-insight/amis#模块五-可视化编辑器系统-editor-system","657":"/insight-labs/repo-insight/amis#_5-关键数据流程","658":"/insight-labs/repo-insight/amis#场景说明","659":"/insight-labs/repo-insight/amis#场景说明-1","660":"/insight-labs/repo-insight/amis#_6-接口与契约规范","661":"/insight-labs/repo-insight/amis#_6-1-渲染器注册契约-typescript","662":"/insight-labs/repo-insight/amis#_6-2-环境接口契约-typescript","663":"/insight-labs/repo-insight/amis#_6-3-mst-store-契约-typescript","664":"/insight-labs/repo-insight/amis#_7-快速开始","665":"/insight-labs/repo-insight/amis#_7-1-环境要求","666":"/insight-labs/repo-insight/amis#_7-2-安装与运行","667":"/insight-labs/repo-insight/amis#_7-3-测试","668":"/insight-labs/repo-insight/amis#_7-4-典型用例","669":"/insight-labs/repo-insight/konva#_1-项目概览","670":"/insight-labs/repo-insight/konva#_1-1-项目定位与核心价值","671":"/insight-labs/repo-insight/konva#_1-2-目标用户与使用场景","672":"/insight-labs/repo-insight/konva#_1-3-核心技术亮点","673":"/insight-labs/repo-insight/konva#_1-4-技术栈与选型对比","674":"/insight-labs/repo-insight/konva#_2-整体架构设计","675":"/insight-labs/repo-insight/konva#_2-1-架构概述","676":"/insight-labs/repo-insight/konva#整体架构图","677":"/insight-labs/repo-insight/konva#目录结构","678":"/insight-labs/repo-insight/konva#_3-模块依赖与调用关系","679":"/insight-labs/repo-insight/konva#_3-1-全局入口与核心路由","680":"/insight-labs/repo-insight/konva#_3-2-核心业务实体与关联","681":"/insight-labs/repo-insight/konva#_4-核心模块详解","682":"/insight-labs/repo-insight/konva#模块一-node-所有节点的抽象基类","683":"/insight-labs/repo-insight/konva#模块二-shape-形状渲染基类","684":"/insight-labs/repo-insight/konva#模块三-stage-舞台根节点与事件中枢","685":"/insight-labs/repo-insight/konva#模块四-factory-属性系统工厂","686":"/insight-labs/repo-insight/konva#模块五-animation-tween-动画引擎","687":"/insight-labs/repo-insight/konva#_5-关键数据流程","688":"/insight-labs/repo-insight/konva#场景一-用户点击一个-shape-的完整事件流程","689":"/insight-labs/repo-insight/konva#场景二-形状属性变更到屏幕渲染的完整流程","690":"/insight-labs/repo-insight/konva#场景三-拖拽操作的完整事件链","691":"/insight-labs/repo-insight/konva#_6-接口与契约规范","692":"/insight-labs/repo-insight/konva#_6-1-核心内部模块契约-typescript","693":"/insight-labs/repo-insight/konva#对外-api-契约-公共-api-导出","694":"/insight-labs/repo-insight/konva#_7-快速开始","695":"/insight-labs/repo-insight/konva#_7-1-安装与运行","696":"/insight-labs/repo-insight/konva#_7-2-最简示例","697":"/insight-labs/repo-insight/konva#_7-3-构建命令","698":"/insight-labs/repo-insight/echarts#_1-项目概览","699":"/insight-labs/repo-insight/echarts#_1-1-项目定位与核心价值","700":"/insight-labs/repo-insight/echarts#_1-2-目标用户与使用场景","701":"/insight-labs/repo-insight/echarts#_1-3-核心技术亮点","702":"/insight-labs/repo-insight/echarts#_1-4-技术栈与选型对比","703":"/insight-labs/repo-insight/echarts#_2-整体架构设计","704":"/insight-labs/repo-insight/echarts#_2-1-架构概述","705":"/insight-labs/repo-insight/echarts#_2-2-整体架构图","706":"/insight-labs/repo-insight/echarts#_2-3-目录结构","707":"/insight-labs/repo-insight/echarts#_3-模块依赖与调用关系","708":"/insight-labs/repo-insight/echarts#_3-1-全局入口与核心路由","709":"/insight-labs/repo-insight/echarts#_3-2-核心业务实体与关联","710":"/insight-labs/repo-insight/echarts#_4-核心模块详解","711":"/insight-labs/repo-insight/echarts#模块一-扩展系统-extension-system","712":"/insight-labs/repo-insight/echarts#模块二-调度管道-scheduler-pipeline","713":"/insight-labs/repo-insight/echarts#模块三-数据管理系统-data-system","714":"/insight-labs/repo-insight/echarts#模块四-坐标系系统-coordinate-system","715":"/insight-labs/repo-insight/echarts#模块五-视觉编码系统-visual-encoding","716":"/insight-labs/repo-insight/echarts#_5-关键数据流程","717":"/insight-labs/repo-insight/echarts#_5-1-初始化与渲染完整流程","718":"/insight-labs/repo-insight/echarts#_6-接口与契约规范","719":"/insight-labs/repo-insight/echarts#_6-1-核心内部模块契约-typescript-interfaces","720":"/insight-labs/repo-insight/echarts#扩展安装器契约-typescript-interface","721":"/insight-labs/repo-insight/echarts#_8-快速开始","722":"/insight-labs/repo-insight/echarts#_8-1-环境配置","723":"/insight-labs/repo-insight/echarts#_8-2-开发模式","724":"/insight-labs/repo-insight/echarts#_8-3-典型用例","725":"/insight-labs/repo-insight/echarts#_8-4-按需引入","726":"/insight-labs/repo-insight/echarts#_8-5-构建发布","727":"/insight-labs/repo-insight/lottie-web#_1-项目概览","728":"/insight-labs/repo-insight/lottie-web#_1-1-项目定位与核心价值","729":"/insight-labs/repo-insight/lottie-web#_1-2-目标用户与使用场景","730":"/insight-labs/repo-insight/lottie-web#_1-3-核心技术亮点","731":"/insight-labs/repo-insight/lottie-web#_1-4-技术栈与选型对比","732":"/insight-labs/repo-insight/lottie-web#_2-整体架构设计","733":"/insight-labs/repo-insight/lottie-web#_2-1-架构概述","734":"/insight-labs/repo-insight/lottie-web#_2-2-整体架构图","735":"/insight-labs/repo-insight/lottie-web#_2-3-目录结构","736":"/insight-labs/repo-insight/lottie-web#_3-模块依赖与调用关系","737":"/insight-labs/repo-insight/lottie-web#_3-1-全局入口与核心路由","738":"/insight-labs/repo-insight/lottie-web#_3-2-核心业务实体与关联","739":"/insight-labs/repo-insight/lottie-web#_4-核心模块详解","740":"/insight-labs/repo-insight/lottie-web#模块一-animationmanager-动画生命周期管理器","741":"/insight-labs/repo-insight/lottie-web#模块二-renderer-系统-渲染器策略层","742":"/insight-labs/repo-insight/lottie-web#模块三-expressionengine-after-effects-表达式引擎","743":"/insight-labs/repo-insight/lottie-web#模块四-propertyfactory-动画属性与关键帧插值系统","744":"/insight-labs/repo-insight/lottie-web#模块五-shapemodifiers-形状变形修饰器系统","745":"/insight-labs/repo-insight/lottie-web#_5-关键数据流程","746":"/insight-labs/repo-insight/lottie-web#场景一-lottie-loadanimation-完整生命周期","747":"/insight-labs/repo-insight/lottie-web#场景二-表达式引擎求值流程","748":"/insight-labs/repo-insight/lottie-web#_6-接口与契约规范","749":"/insight-labs/repo-insight/lottie-web#_6-1-核心内部模块契约-typescript","750":"/insight-labs/repo-insight/lottie-web#_6-2-对外-api-契约-typescript-与-index-d-ts-对齐","751":"/insight-labs/repo-insight/lottie-web#_7-构建系统与产物矩阵","752":"/insight-labs/repo-insight/lottie-web#_8-快速开始","753":"/insight-labs/repo-insight/lottie-web#_8-1-环境配置","754":"/insight-labs/repo-insight/lottie-web#_8-2-安装与运行","755":"/insight-labs/repo-insight/lottie-web#_8-3-典型用例","756":"/insight-labs/repo-insight/three-js#_1-项目概览","757":"/insight-labs/repo-insight/three-js#_1-1-项目定位与核心价值","758":"/insight-labs/repo-insight/three-js#_1-2-核心技术亮点","759":"/insight-labs/repo-insight/three-js#_1-3-技术栈与选型对比","760":"/insight-labs/repo-insight/three-js#_2-整体架构设计","761":"/insight-labs/repo-insight/three-js#_2-1-架构概述","762":"/insight-labs/repo-insight/three-js#_2-2-整体架构图","763":"/insight-labs/repo-insight/three-js#_2-3-目录结构","764":"/insight-labs/repo-insight/three-js#_3-模块依赖与调用关系","765":"/insight-labs/repo-insight/three-js#_3-1-全局入口与核心路由","766":"/insight-labs/repo-insight/three-js#_3-2-核心业务实体与关联","767":"/insight-labs/repo-insight/three-js#_4-核心模块详解","768":"/insight-labs/repo-insight/three-js#模块一-渲染器系统-renderer-system","769":"/insight-labs/repo-insight/three-js#模块二-场景图系统-scene-graph-object3d","770":"/insight-labs/repo-insight/three-js#模块三-tsl-节点着色系统-three-js-shading-language","771":"/insight-labs/repo-insight/three-js#模块四-材质系统-material-system","772":"/insight-labs/repo-insight/three-js#模块五-动画系统-animation-system","773":"/insight-labs/repo-insight/three-js#_5-关键数据流程","774":"/insight-labs/repo-insight/three-js#场景一-webgpu-渲染帧的完整生命周期","775":"/insight-labs/repo-insight/three-js#场景二-tsl-着色器编译流程","776":"/insight-labs/repo-insight/three-js#_6-接口与契约规范","777":"/insight-labs/repo-insight/three-js#_6-1-核心内部模块契约-typescript-interfaces","778":"/insight-labs/repo-insight/three-js#对外-api-契约-openspec-格式-—-公共类-api","779":"/insight-labs/repo-insight/three-js#_8-快速开始","780":"/insight-labs/repo-insight/three-js#_8-1-环境配置","781":"/insight-labs/repo-insight/three-js#_8-2-安装与运行","782":"/insight-labs/repo-insight/three-js#_8-3-典型用例","783":"/insight-labs/repo-insight/pretext#_1-项目概览","784":"/insight-labs/repo-insight/pretext#_1-1-项目定位与核心价值","785":"/insight-labs/repo-insight/pretext#_1-2-技术栈与选型对比","786":"/insight-labs/repo-insight/pretext#_1-3-核心技术亮点","787":"/insight-labs/repo-insight/pretext#_2-整体架构设计","788":"/insight-labs/repo-insight/pretext#_2-1-架构概述","789":"/insight-labs/repo-insight/pretext#_2-2-整体架构图","790":"/insight-labs/repo-insight/pretext#_2-3-目录结构图","791":"/insight-labs/repo-insight/pretext#_3-模块依赖与调用关系","792":"/insight-labs/repo-insight/pretext#_3-1-全局入口与核心路由","793":"/insight-labs/repo-insight/pretext#_2-2-核心业务实体与关联","794":"/insight-labs/repo-insight/pretext#_4-核心模块详解","795":"/insight-labs/repo-insight/pretext#模块一-文本分析引擎-analysis-ts","796":"/insight-labs/repo-insight/pretext#模块二-canvas-测量引擎-measurement-ts","797":"/insight-labs/repo-insight/pretext#模块三-行行走引擎-line-break-ts","798":"/insight-labs/repo-insight/pretext#模块四-核心聚合层-layout-ts","799":"/insight-labs/repo-insight/pretext#模块五-富文本内联辅助-rich-inline-ts","800":"/insight-labs/repo-insight/pretext#_5-关键数据流程","801":"/insight-labs/repo-insight/pretext#场景一-快速高度测量-prepare-layout","802":"/insight-labs/repo-insight/pretext#场景二-手工逐行布局-可变行宽-layoutnextlinerange-materializelinerange","803":"/insight-labs/repo-insight/pretext#场景三-多行-shrinkwrap-walklineranges","804":"/insight-labs/repo-insight/pretext#_6-接口与契约规范","805":"/insight-labs/repo-insight/pretext#_6-1-核心类型定义","806":"/insight-labs/repo-insight/pretext#_6-2公共-api-函数签名汇总","807":"/insight-labs/repo-insight/pretext#_8-快速开始","808":"/insight-labs/repo-insight/pretext#_8-1-环境配置","809":"/insight-labs/repo-insight/pretext#_8-2-安装与使用","810":"/insight-labs/repo-insight/pretext#_8-3-典型用例","811":"/insight-labs/repo-insight/anime#_1-项目概览","812":"/insight-labs/repo-insight/anime#_1-1-项目定位与核心价值","813":"/insight-labs/repo-insight/anime#_1-2-目标用户与使用场景","814":"/insight-labs/repo-insight/anime#_1-3-核心技术亮点","815":"/insight-labs/repo-insight/anime#_1-4-技术栈与选型对比","816":"/insight-labs/repo-insight/anime#_2-整体架构设计","817":"/insight-labs/repo-insight/anime#_2-1-架构概述","818":"/insight-labs/repo-insight/anime#_2-2-整体架构图","819":"/insight-labs/repo-insight/anime#_2-3-目录结构","820":"/insight-labs/repo-insight/anime#_3-模块依赖与调用关系","821":"/insight-labs/repo-insight/anime#_3-1-全局入口与核心路由","822":"/insight-labs/repo-insight/anime#_3-2-核心业务实体与关联","823":"/insight-labs/repo-insight/anime#_4-核心模块详解","824":"/insight-labs/repo-insight/anime#模块一-clock-时间基类","825":"/insight-labs/repo-insight/anime#模块二-timer-动画时间基类","826":"/insight-labs/repo-insight/anime#模块三-engine-全局动画引擎","827":"/insight-labs/repo-insight/anime#模块四-render-渲染核心","828":"/insight-labs/repo-insight/anime#模块五-values-值处理系统","829":"/insight-labs/repo-insight/anime#_5-关键数据流程","830":"/insight-labs/repo-insight/anime#场景一-动画从创建到完成的生命周期","831":"/insight-labs/repo-insight/anime#场景二-timeline-时间线编排","832":"/insight-labs/repo-insight/anime#场景三-tween-合成与冲突处理","833":"/insight-labs/repo-insight/anime#_6-接口与契约规范","834":"/insight-labs/repo-insight/anime#_6-1-核心内部模块契约-typescript","835":"/insight-labs/repo-insight/anime#_6-2-对外公共-api-契约-函数签名","836":"/insight-labs/repo-insight/anime#_7-构建与包结构","837":"/insight-labs/repo-insight/anime#_8-快速开始","838":"/insight-labs/repo-insight/anime#_8-1-安装","839":"/insight-labs/repo-insight/anime#_8-2-基本用法","840":"/insight-labs/repo-insight/anime#_8-3-开发环境","841":"/insight-labs/repo-insight/anime#_8-4-模块化导入","842":"/insight-labs/repo-insight/open-cli#_1-项目概览","843":"/insight-labs/repo-insight/open-cli#_1-1-项目定位与核心价值","844":"/insight-labs/repo-insight/open-cli#_1-2-目标用户与使用场景","845":"/insight-labs/repo-insight/open-cli#_1-3-核心技术亮点","846":"/insight-labs/repo-insight/open-cli#_1-4-技术栈与选型对比","847":"/insight-labs/repo-insight/open-cli#_2-整体架构设计","848":"/insight-labs/repo-insight/open-cli#_2-1-架构概述","849":"/insight-labs/repo-insight/open-cli#_2-2-整体架构图-ascii","850":"/insight-labs/repo-insight/open-cli#_2-3-分层职责说明","851":"/insight-labs/repo-insight/open-cli#_2-4-完整目录树","852":"/insight-labs/repo-insight/open-cli#_3-模块依赖与调用关系","853":"/insight-labs/repo-insight/open-cli#_3-1-全局入口与核心路由","854":"/insight-labs/repo-insight/open-cli#逻辑说明","855":"/insight-labs/repo-insight/open-cli#调用拓扑-plaintext","856":"/insight-labs/repo-insight/open-cli#_3-2-核心业务实体与关联","857":"/insight-labs/repo-insight/open-cli#_4-核心模块详解","858":"/insight-labs/repo-insight/open-cli#_4-1-浏览器控制模块-src-browser","859":"/insight-labs/repo-insight/open-cli#_4-2-适配器注册与发现-src-registry-ts-discovery-ts","860":"/insight-labs/repo-insight/open-cli#_4-3-守护进程-src-daemon-ts","861":"/insight-labs/repo-insight/open-cli#_5-关键数据流程","862":"/insight-labs/repo-insight/open-cli#_5-1-浏览器命令执行流程","863":"/insight-labs/repo-insight/open-cli#_5-2-网站适配器执行流程","864":"/insight-labs/repo-insight/open-cli#_6-接口与契约规范","865":"/insight-labs/repo-insight/open-cli#_6-1-核心内部模块契约-typescript","866":"/insight-labs/repo-insight/open-cli#_6-2-daemon-http-api-openspec-格式","867":"/insight-labs/repo-insight/open-cli#_7-快速开始","868":"/insight-labs/repo-insight/open-cli#_7-1-环境配置","869":"/insight-labs/repo-insight/open-cli#_7-2-安装与运行","870":"/insight-labs/repo-insight/open-cli#_7-3-典型用例","871":"/insight-labs/repo-insight/fetch-event-source#第一部分-业务价值篇","872":"/insight-labs/repo-insight/fetch-event-source#项目定位","873":"/insight-labs/repo-insight/fetch-event-source#解决的核心痛点","874":"/insight-labs/repo-insight/fetch-event-source#技术亮点","875":"/insight-labs/repo-insight/fetch-event-source#适用场景","876":"/insight-labs/repo-insight/fetch-event-source#典型使用-case","877":"/insight-labs/repo-insight/fetch-event-source#case-1-基础-sse-连接","878":"/insight-labs/repo-insight/fetch-event-source#case-2-带认证和自定义请求","879":"/insight-labs/repo-insight/fetch-event-source#case-3-自定义错误处理和重试","880":"/insight-labs/repo-insight/fetch-event-source#技术栈分析","881":"/insight-labs/repo-insight/fetch-event-source#选型决策分析","882":"/insight-labs/repo-insight/fetch-event-source#项目结构初览","883":"/insight-labs/repo-insight/fetch-event-source#核心模块职责","884":"/insight-labs/repo-insight/fetch-event-source#依赖关系","885":"/insight-labs/repo-insight/fetch-event-source#外部依赖","886":"/insight-labs/repo-insight/fetch-event-source#内部依赖","887":"/insight-labs/repo-insight/fetch-event-source#构建输出","888":"/insight-labs/repo-insight/fetch-event-source#第二部分-架构设计篇","889":"/insight-labs/repo-insight/fetch-event-source#系统整体架构","890":"/insight-labs/repo-insight/fetch-event-source#核心模块设计","891":"/insight-labs/repo-insight/fetch-event-source#_1-fetch-ts-主控制器模块","892":"/insight-labs/repo-insight/fetch-event-source#_2-parse-ts-事件流解析模块","893":"/insight-labs/repo-insight/fetch-event-source#核心数据流转时序","894":"/insight-labs/repo-insight/fetch-event-source#正常消息接收流程","895":"/insight-labs/repo-insight/fetch-event-source#重试流程","896":"/insight-labs/repo-insight/fetch-event-source#页面可见性变化流程","897":"/insight-labs/repo-insight/fetch-event-source#接口契约定义","898":"/insight-labs/repo-insight/fetch-event-source#公共-api","899":"/insight-labs/repo-insight/fetch-event-source#内部解析-api","900":"/insight-labs/repo-insight/vercel-ai-sdk#_1-项目概览","901":"/insight-labs/repo-insight/vercel-ai-sdk#_1-1-项目定位与核心价值","902":"/insight-labs/repo-insight/vercel-ai-sdk#_1-2-目标用户与使用场景","903":"/insight-labs/repo-insight/vercel-ai-sdk#_1-3-核心技术亮点","904":"/insight-labs/repo-insight/vercel-ai-sdk#_1-4-技术栈与选型对比","905":"/insight-labs/repo-insight/vercel-ai-sdk#_2-整体架构设计","906":"/insight-labs/repo-insight/vercel-ai-sdk#_2-1-架构概述","907":"/insight-labs/repo-insight/vercel-ai-sdk#_2-2-整体架构图","908":"/insight-labs/repo-insight/vercel-ai-sdk#_2-3-完整目录结构","909":"/insight-labs/repo-insight/vercel-ai-sdk#_2-4-最重要的文件","910":"/insight-labs/repo-insight/vercel-ai-sdk#_2-5-核心设计模式速查表","911":"/insight-labs/repo-insight/vercel-ai-sdk#_3-模块依赖与调用关系","912":"/insight-labs/repo-insight/vercel-ai-sdk#_3-1-全局入口与核心路由","913":"/insight-labs/repo-insight/vercel-ai-sdk#_3-2-核心业务实体与关联","914":"/insight-labs/repo-insight/vercel-ai-sdk#_4-核心模块设计","915":"/insight-labs/repo-insight/vercel-ai-sdk#_4-1-text-生成核心-generatetext-streamtext","916":"/insight-labs/repo-insight/vercel-ai-sdk#_4-2-provider-适配器模式","917":"/insight-labs/repo-insight/vercel-ai-sdk#_4-3-ui-消息流与框架集成-usechat-chat","918":"/insight-labs/repo-insight/vercel-ai-sdk#_4-4-agent-与工作流-toolloopagent-workflow","919":"/insight-labs/repo-insight/vercel-ai-sdk#_4-5-模型注册中心-registry","920":"/insight-labs/repo-insight/vercel-ai-sdk#_4-6-中间件系统","921":"/insight-labs/repo-insight/vercel-ai-sdk#_5-关键数据流程","922":"/insight-labs/repo-insight/vercel-ai-sdk#_5-1-场景一-generatetext-带工具调用的完整流程","923":"/insight-labs/repo-insight/vercel-ai-sdk#_5-2-streamtext-usechat-前端流式对话","924":"/insight-labs/repo-insight/vercel-ai-sdk#_6-接口与契约规范","925":"/insight-labs/repo-insight/vercel-ai-sdk#_6-1-核心内部模块契约-typescript","926":"/insight-labs/repo-insight/vercel-ai-sdk#_6-2-公共-api-契约","927":"/insight-labs/repo-insight/vercel-ai-sdk#_7-provider-工具系统","928":"/insight-labs/repo-insight/vercel-ai-sdk#_8-快速开始","929":"/insight-labs/repo-insight/vercel-ai-sdk#_8-1-环境要求","930":"/insight-labs/repo-insight/vercel-ai-sdk#_8-2-安装与运行","931":"/insight-labs/repo-insight/vercel-ai-sdk#_8-3-关键目录","932":"/insight-labs/repo-insight/a2ui#_1-项目概览","933":"/insight-labs/repo-insight/a2ui#_1-1-项目定位与核心价值","934":"/insight-labs/repo-insight/a2ui#_1-2-目标用户与使用场景","935":"/insight-labs/repo-insight/a2ui#_1-3-核心技术亮点","936":"/insight-labs/repo-insight/a2ui#_1-4-技术栈与选型对比","937":"/insight-labs/repo-insight/a2ui#_2-整体架构设计","938":"/insight-labs/repo-insight/a2ui#_2-1-架构概述","939":"/insight-labs/repo-insight/a2ui#_2-2-目录结构","940":"/insight-labs/repo-insight/a2ui#_3-模块依赖与调用关系","941":"/insight-labs/repo-insight/a2ui#_3-1-全局入口与核心路由","942":"/insight-labs/repo-insight/a2ui#_3-2-核心业务实体与关联","943":"/insight-labs/repo-insight/a2ui#_4-核心模块详解","944":"/insight-labs/repo-insight/a2ui#模块一-messageprocessor-消息处理器","945":"/insight-labs/repo-insight/a2ui#模块二-datamodel-响应式数据模型","946":"/insight-labs/repo-insight/a2ui#模块三-genericbinder-通用数据绑定引擎","947":"/insight-labs/repo-insight/a2ui#模块四-a2uistreamparser-流式解析器","948":"/insight-labs/repo-insight/a2ui#模块五-catalog-system-组件目录系统","949":"/insight-labs/repo-insight/a2ui#_5-关键数据流程","950":"/insight-labs/repo-insight/a2ui#_6-接口与契约规范","951":"/insight-labs/repo-insight/a2ui#_6-1-核心内部模块契约-typescript","952":"/insight-labs/repo-insight/a2ui#_6-2-对外-api-契约-a2ui-v0-9-核心消息-schema","953":"/insight-labs/repo-insight/a2ui#_7-快速开始","954":"/insight-labs/repo-insight/a2ui#_7-1-环境配置","955":"/insight-labs/repo-insight/a2ui#_7-2-安装与运行","956":"/insight-labs/repo-insight/a2ui#_7-3-典型用例","957":"/fullstack/css-engineering#_1-引言-主流-css-工程化方案有哪些","958":"/fullstack/css-engineering#_2-css-预处理器","959":"/fullstack/css-engineering#_3-css-in-js","960":"/fullstack/css-engineering#_4-css-modules","961":"/fullstack/css-engineering#_5-scoped-css","962":"/fullstack/css-engineering#_6-原子化-css-utility-first-atomic-css","963":"/fullstack/css-engineering#为什么-ai-应用产品都在拥抱-tailwind","964":"/fullstack/css-engineering#_7-变体驱动的原子化-variants-driven-atomic-css-cva-tailwind","965":"/fullstack/css-engineering#_8-实践指南-如何构建可扩展的样式工程化体系","966":"/fullstack/css-engineering#_8-1-第一层-架构的根基-——-css-变量、设计规范与-design-token","967":"/fullstack/css-engineering#_8-2-第二层-生产力基石与标准协议-——-占比-90-的主力构建层","968":"/fullstack/css-engineering#_8-3-第三层-兜底封装与高级逻辑-——-占比-10-的边界-逃生舱","969":"/fullstack/css-engineering#_8-4-底部构建环境-postcss-编译管道-pipeline","970":"/fullstack/css-engineering#_8-5-架构红线-——-一些必须规避的反模式","971":"/fullstack/css-engineering#_9-结语-从手工精雕到-ai-增强的架构跃迁","972":"/insight-labs/repo-insight/superpowers#_1-项目概览","973":"/insight-labs/repo-insight/superpowers#_1-1-项目定位与核心价值","974":"/insight-labs/repo-insight/superpowers#_1-2-目标用户与使用场景","975":"/insight-labs/repo-insight/superpowers#_1-3-核心技术亮点","976":"/insight-labs/repo-insight/superpowers#_1-4-技术栈与选型对比","977":"/insight-labs/repo-insight/superpowers#_2-整体架构设计","978":"/insight-labs/repo-insight/superpowers#_2-1-架构概述","979":"/insight-labs/repo-insight/superpowers#_2-2-整体架构图","980":"/insight-labs/repo-insight/superpowers#_2-3-目录结构","981":"/insight-labs/repo-insight/superpowers#_3-模块依赖与调用关系","982":"/insight-labs/repo-insight/superpowers#_3-1-全局入口与核心路由","983":"/insight-labs/repo-insight/superpowers#_3-2-核心业务实体与关联","984":"/insight-labs/repo-insight/superpowers#_4-核心模块详解","985":"/insight-labs/repo-insight/superpowers#模块一-hook-引导系统-hook-bootstrap-system","986":"/insight-labs/repo-insight/superpowers#模块二-using-superpowers-引导技能","987":"/insight-labs/repo-insight/superpowers#模块三-brainstorming-头脑风暴技能","988":"/insight-labs/repo-insight/superpowers#模块四-subagent-driven-development-子agent驱动开发","989":"/insight-labs/repo-insight/superpowers#模块五-test-driven-development-tdd-技能","990":"/insight-labs/repo-insight/superpowers#_5-关键数据流程","991":"/insight-labs/repo-insight/superpowers#场景一-完整开发工作流-从需求到合并","992":"/insight-labs/repo-insight/superpowers#场景二-bug-修复调试流程","993":"/insight-labs/repo-insight/superpowers#_6-接口与契约规范","994":"/insight-labs/repo-insight/superpowers#_6-1-核心内部模块契约-typescript","995":"/insight-labs/repo-insight/superpowers#_6-2-技能间调用契约","996":"/insight-labs/repo-insight/superpowers#_7-快速开始","997":"/insight-labs/repo-insight/superpowers#_7-1-环境要求","998":"/insight-labs/repo-insight/superpowers#_7-2-安装","999":"/insight-labs/repo-insight/superpowers#_7-3-典型工作流","1000":"/about/me#我是谁","1001":"/about/me#我的认知迭代","1002":"/about/me#关于本站","1003":"/about/me#❤️-致谢","1004":"/about/me#连接与交流","1005":"/about/growth/outer-experience#_1-写在前面","1006":"/about/growth/outer-experience#_2-重读《要事第一》","1007":"/about/growth/outer-experience#_3-基于系统与模型思维构建洞察力模型","1008":"/about/growth/outer-experience#_3-1-增强回路小例子-🌰","1009":"/about/growth/outer-experience#_3-2-调节回路","1010":"/about/growth/outer-experience#_4-重读数学的乐趣","1011":"/about/growth/outer-experience#_4-1-怎么突然又学起数学了","1012":"/about/growth/outer-experience#_4-2-重新发现了有趣的数学思维","1013":"/about/growth/outer-experience#分解与分类、排列与组合","1014":"/about/growth/outer-experience#多样性红利","1015":"/about/growth/outer-experience#这个世界是稀疏的","1016":"/about/growth/outer-experience#概率的世界观","1017":"/about/growth/outer-experience#ai-教会了我们哪些","1018":"/about/growth/outer-experience#_5-写在最后","1019":"/about/growth/inner-experience#写在前面","1020":"/about/growth/inner-experience#漫谈话题","1021":"/about/growth/inner-experience#漫谈健康","1022":"/about/growth/inner-experience#健康危机","1023":"/about/growth/inner-experience#健康知识学习","1024":"/about/growth/inner-experience#_1、向有专业或有经验的人咨询","1025":"/about/growth/inner-experience#_2、学习健康标准和知识","1026":"/about/growth/inner-experience#_3、健康实践","1027":"/about/growth/inner-experience#_4、健康小结","1028":"/about/growth/inner-experience#漫谈读书与学习","1029":"/about/growth/inner-experience#_1、读书的目的","1030":"/about/growth/inner-experience#_2、读书的方式","1031":"/about/growth/inner-experience#_3、读书工具选择与实践","1032":"/about/growth/inner-experience#_4、小结","1033":"/about/growth/inner-experience#漫谈时间管理","1034":"/about/growth/inner-experience#_1、时间不够用问题","1035":"/about/growth/inner-experience#_2、分阶段调整时间管理","1036":"/about/growth/inner-experience#第一阶段-疯狂做减法-专注重要的事","1037":"/about/growth/inner-experience#第二阶段-升级清单管理","1038":"/about/growth/inner-experience#第三阶段-刻意统计并调整时间","1039":"/about/growth/inner-experience#漫谈混合工作制","1040":"/about/growth/inner-experience#_1、适应混合工作制","1041":"/about/growth/inner-experience#_2、延伸思考混合工作制","1042":"/about/growth/inner-experience#写在最后","1043":"/about/growth/weight-loss#写在前面","1044":"/about/growth/weight-loss#_1、前期准备","1045":"/about/growth/weight-loss#_2、第一阶段","1046":"/about/growth/weight-loss#_3、第二阶段","1047":"/about/growth/weight-loss#_4、第三阶段","1048":"/about/growth/weight-loss#_5、第四阶段-2021-09","1049":"/about/growth/weight-loss#结尾"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,1],"1":[3,1,1],"2":[2,3,27],"3":[5,3,55],"4":[3,3,47],"5":[5,1,11],"6":[6,5,51],"7":[4,5,33],"8":[7,5,47],"9":[6,5,24],"10":[8,1,12],"11":[3,8,32],"12":[3,8,1],"13":[9,10,37],"14":[6,10,88],"15":[6,10,130],"16":[5,10,196],"17":[6,10,70],"18":[6,8,37],"19":[3,1,51],"20":[2,1,50],"21":[2,1,48],"22":[3,1,18],"23":[1,3,41],"24":[1,3,1],"25":[1,3,17],"26":[3,1,32],"27":[1,3,33],"28":[1,3,1],"29":[1,3,15],"30":[3,1,25],"31":[1,3,30],"32":[1,3,1],"33":[1,3,11],"34":[3,1,46],"35":[1,3,53],"36":[2,3,28],"37":[1,3,1],"38":[1,3,18],"39":[3,1,16],"40":[1,3,44],"41":[3,3,22],"42":[1,3,1],"43":[1,3,18],"44":[2,1,1],"45":[3,2,181],"46":[3,2,52],"47":[3,2,132],"48":[5,1,27],"49":[5,5,8],"50":[2,7,36],"51":[2,7,21],"52":[2,7,13],"53":[3,5,100],"54":[5,5,131],"55":[2,1,52],"56":[8,1,13],"57":[5,8,24],"58":[8,8,27],"59":[8,8,99],"60":[6,1,26],"61":[7,6,51],"62":[4,6,58],"63":[5,1,70],"64":[5,1,9],"65":[3,5,16],"66":[3,5,31],"67":[3,5,55],"68":[2,1,21],"69":[3,2,56],"70":[5,2,46],"71":[5,2,52],"72":[3,1,69],"73":[7,1,15],"74":[6,7,113],"75":[6,7,50],"76":[7,7,31],"77":[6,7,30],"78":[3,7,50],"79":[2,1,1],"80":[6,2,42],"81":[6,2,33],"82":[3,2,58],"83":[2,1,43],"84":[2,1,1],"85":[2,2,170],"86":[3,2,1],"87":[5,4,84],"88":[7,4,77],"89":[6,4,52],"90":[5,1,1],"91":[3,5,113],"92":[2,5,109],"93":[3,5,1],"94":[5,6,72],"95":[6,6,70],"96":[9,6,87],"97":[6,1,13],"98":[3,6,144],"99":[5,6,29],"100":[5,10,34],"101":[6,10,47],"102":[2,1,39],"103":[5,1,102],"104":[5,1,17],"105":[4,5,44],"106":[6,5,38],"107":[3,5,36],"108":[6,1,14],"109":[4,6,30],"110":[6,6,19],"111":[4,6,20],"112":[3,6,58],"113":[3,1,34],"114":[3,3,29],"115":[3,3,43],"116":[4,3,24],"117":[5,3,56],"118":[3,1,14],"119":[4,3,32],"120":[4,3,35],"121":[4,3,26],"122":[5,3,23],"123":[4,1,31],"124":[6,4,47],"125":[4,4,51],"126":[4,4,56],"127":[6,4,26],"128":[3,4,26],"129":[4,1,11],"130":[5,4,77],"131":[4,4,127],"132":[2,1,47],"133":[2,1,18],"134":[4,2,43],"135":[3,2,124],"136":[4,2,31],"137":[5,1,9],"138":[5,5,91],"139":[2,5,72],"140":[5,1,22],"141":[7,5,181],"142":[6,5,48],"143":[2,5,150],"144":[3,5,129],"145":[2,1,11],"146":[4,2,69],"147":[4,2,51],"148":[4,2,36],"149":[4,2,25],"150":[4,2,217],"151":[2,1,10],"152":[3,2,50],"153":[4,2,107],"154":[6,2,90],"155":[2,1,69],"156":[2,1,60],"157":[2,1,6],"158":[4,2,21],"159":[2,2,38],"160":[3,2,112],"161":[2,1,10],"162":[3,2,43],"163":[6,2,125],"164":[2,2,103],"165":[2,1,1],"166":[3,2,83],"167":[3,2,37],"168":[3,2,17],"169":[2,1,99],"170":[4,1,109],"171":[3,1,116],"172":[3,1,1],"173":[8,3,46],"174":[5,3,47],"175":[3,1,45],"176":[4,1,25],"177":[4,4,105],"178":[4,4,44],"179":[8,4,81],"180":[3,1,69],"181":[2,1,68],"182":[2,1,22],"183":[8,2,14],"184":[3,9,44],"185":[3,9,35],"186":[7,2,14],"187":[3,8,29],"188":[3,8,35],"189":[10,2,20],"190":[3,11,32],"191":[3,11,32],"192":[8,2,18],"193":[3,9,27],"194":[3,9,33],"195":[8,2,15],"196":[3,9,32],"197":[3,9,29],"198":[8,2,20],"199":[5,9,41],"200":[2,1,53],"201":[2,1,56],"202":[5,1,40],"203":[4,5,412],"204":[5,5,76],"205":[5,1,27],"206":[3,5,1],"207":[4,7,18],"208":[4,7,20],"209":[4,7,27],"210":[5,5,32],"211":[3,1,26],"212":[7,3,15],"213":[8,3,22],"214":[8,3,32],"215":[9,3,31],"216":[3,3,101],"217":[2,1,35],"218":[2,1,1],"219":[4,2,18],"220":[4,2,11],"221":[4,5,21],"222":[4,5,38],"223":[4,5,40],"224":[3,5,13],"225":[4,5,23],"226":[2,1,45],"227":[3,1,80],"228":[6,1,1],"229":[3,6,66],"230":[5,6,68],"231":[3,6,84],"232":[5,6,61],"233":[4,6,35],"234":[3,6,58],"235":[6,1,1],"236":[3,6,48],"237":[3,6,45],"238":[4,6,56],"239":[4,6,33],"240":[6,6,34],"241":[2,1,1],"242":[4,2,45],"243":[3,2,41],"244":[3,2,69],"245":[2,1,1],"246":[5,2,66],"247":[6,2,51],"248":[4,2,63],"249":[5,2,58],"250":[2,1,59],"251":[2,1,1],"252":[2,2,16],"253":[5,2,20],"254":[3,2,62],"255":[3,2,66],"256":[3,2,63],"257":[2,1,1],"258":[3,2,41],"259":[4,2,58],"260":[6,2,54],"261":[5,2,76],"262":[3,2,80],"263":[2,1,140],"264":[2,1,25],"265":[3,2,37],"266":[3,2,57],"267":[3,2,69],"268":[3,2,53],"269":[3,2,65],"270":[3,2,73],"271":[2,1,37],"272":[2,1,37],"273":[2,1,4],"274":[3,2,250],"275":[2,2,130],"276":[5,2,13],"277":[5,6,25],"278":[4,6,65],"279":[4,6,49],"280":[6,6,146],"281":[5,6,229],"282":[5,6,49],"283":[5,6,30],"284":[3,2,8],"285":[4,4,20],"286":[3,4,44],"287":[4,4,51],"288":[6,4,155],"289":[4,4,109],"290":[4,4,75],"291":[4,4,56],"292":[4,4,55],"293":[1,1,23],"294":[2,1,13],"295":[2,1,48],"296":[2,1,18],"297":[3,2,44],"298":[3,2,51],"299":[2,2,5],"300":[1,3,26],"301":[1,3,38],"302":[6,3,41],"303":[3,1,50],"304":[6,1,71],"305":[4,1,65],"306":[4,1,66],"307":[4,1,75],"308":[2,1,82],"309":[3,1,26],"310":[3,1,49],"311":[3,1,58],"312":[5,1,32],"313":[7,1,47],"314":[3,1,49],"315":[3,1,82],"316":[3,1,30],"317":[2,1,23],"318":[3,1,72],"319":[2,1,39],"320":[3,1,46],"321":[9,1,35],"322":[4,1,51],"323":[5,1,6],"324":[5,5,43],"325":[4,5,27],"326":[3,1,21],"327":[2,1,45],"328":[2,1,44],"329":[2,1,26],"330":[2,1,67],"331":[2,1,61],"332":[3,1,24],"333":[6,1,61],"334":[4,1,49],"335":[2,1,54],"336":[3,1,34],"337":[2,1,39],"338":[2,1,79],"339":[4,1,36],"340":[9,1,61],"341":[2,1,89],"342":[8,1,330],"343":[7,1,96],"344":[2,1,165],"345":[6,1,57],"346":[6,1,52],"347":[1,1,1],"348":[2,1,28],"349":[7,1,25],"350":[5,1,40],"351":[3,1,10],"352":[5,3,21],"353":[7,3,34],"354":[4,1,36],"355":[4,1,31],"356":[1,1,10],"357":[9,1,33],"358":[6,1,47],"359":[8,1,39],"360":[9,1,52],"361":[3,1,48],"362":[3,1,31],"363":[2,1,73],"364":[4,1,16],"365":[6,4,79],"366":[3,4,165],"367":[9,4,111],"368":[7,1,9],"369":[6,7,35],"370":[5,7,36],"371":[4,7,22],"372":[5,9,30],"373":[5,9,28],"374":[5,9,16],"375":[5,9,57],"376":[8,1,45],"377":[7,1,35],"378":[10,1,34],"379":[4,1,23],"380":[3,1,27],"381":[2,1,18],"382":[4,1,34],"383":[4,1,57],"384":[5,1,19],"385":[3,1,28],"386":[3,1,49],"387":[3,1,51],"388":[3,1,30],"389":[3,1,26],"390":[4,1,6],"391":[3,4,46],"392":[4,4,52],"393":[5,4,33],"394":[4,4,27],"395":[3,1,1],"396":[4,3,29],"397":[3,3,50],"398":[4,3,28],"399":[4,3,21],"400":[6,1,52],"401":[1,1,1],"402":[8,1,55],"403":[3,1,66],"404":[5,1,1],"405":[3,5,30],"406":[5,5,40],"407":[4,5,18],"408":[4,1,65],"409":[3,4,14],"410":[3,4,86],"411":[3,4,86],"412":[2,4,61],"413":[3,1,12],"414":[4,3,120],"415":[7,3,89],"416":[4,8,37],"417":[4,3,52],"418":[4,3,56],"419":[7,3,76],"420":[7,1,31],"421":[2,1,17],"422":[3,1,17],"423":[3,3,20],"424":[2,3,22],"425":[3,3,22],"426":[3,1,61],"427":[5,1,74],"428":[6,1,13],"429":[3,6,48],"430":[4,6,30],"431":[3,6,30],"432":[7,1,32],"433":[7,1,36],"434":[2,1,36],"435":[3,1,41],"436":[5,1,61],"437":[3,1,67],"438":[3,1,75],"439":[5,1,92],"440":[2,1,44],"441":[6,1,76],"442":[3,1,110],"443":[3,1,105],"444":[6,1,20],"445":[3,6,41],"446":[3,6,1],"447":[3,7,25],"448":[6,7,52],"449":[6,7,41],"450":[5,7,29],"451":[7,1,195],"452":[5,1,6],"453":[3,5,20],"454":[3,5,19],"455":[4,5,25],"456":[3,1,40],"457":[3,1,50],"458":[6,1,35],"459":[6,6,53],"460":[6,6,23],"461":[10,6,28],"462":[7,6,47],"463":[5,1,21],"464":[6,1,40],"465":[4,1,66],"466":[2,1,36],"467":[2,1,66],"468":[6,1,43],"469":[2,1,1],"470":[3,2,115],"471":[3,2,68],"472":[2,2,83],"473":[5,1,7],"474":[3,5,43],"475":[3,5,24],"476":[5,1,35],"477":[2,1,53],"478":[6,1,56],"479":[3,6,1],"480":[3,8,15],"481":[5,8,46],"482":[3,6,128],"483":[4,8,43],"484":[9,8,57],"485":[3,6,11],"486":[5,8,44],"487":[7,6,10],"488":[6,11,49],"489":[5,11,91],"490":[3,11,36],"491":[2,6,62],"492":[7,1,38],"493":[4,1,38],"494":[6,1,145],"495":[3,1,32],"496":[2,1,33],"497":[4,1,1],"498":[3,4,8],"499":[2,4,29],"500":[2,1,1],"501":[4,2,11],"502":[3,2,16],"503":[5,1,21],"504":[8,5,64],"505":[2,11,114],"506":[9,1,118],"507":[2,13,99],"508":[4,13,102],"509":[2,1,79],"510":[3,1,36],"511":[2,3,107],"512":[3,3,203],"513":[3,1,1],"514":[3,3,22],"515":[2,3,243],"516":[3,1,1],"517":[3,3,19],"518":[3,3,171],"519":[3,1,68],"520":[4,1,11],"521":[3,4,100],"522":[2,4,151],"523":[2,1,267],"524":[1,1,1],"525":[2,1,91],"526":[8,1,37],"527":[8,8,42],"528":[7,8,42],"529":[5,8,17],"530":[5,1,38],"531":[5,5,36],"532":[8,5,36],"533":[5,5,25],"534":[4,1,32],"535":[10,4,35],"536":[8,4,35],"537":[7,4,35],"538":[7,4,20],"539":[2,1,39],"540":[9,1,46],"541":[4,9,28],"542":[6,9,62],"543":[5,9,28],"544":[4,1,30],"545":[5,4,34],"546":[5,4,27],"547":[6,4,48],"548":[3,4,41],"549":[4,4,24],"550":[5,4,102],"551":[4,1,70],"552":[2,1,44],"553":[2,1,124],"554":[3,1,21],"555":[9,3,63],"556":[8,3,55],"557":[5,3,51],"558":[7,1,57],"559":[2,1,69],"560":[7,1,1],"561":[3,7,119],"562":[2,7,80],"563":[4,1,1],"564":[3,4,105],"565":[3,4,70],"566":[5,1,1],"567":[3,5,116],"568":[5,5,117],"569":[2,1,36],"570":[2,1,141],"571":[4,1,44],"572":[3,4,47],"573":[3,4,93],"574":[4,4,9],"575":[3,1,36],"576":[4,3,47],"577":[5,3,35],"578":[3,3,24],"579":[3,1,10],"580":[3,3,13],"581":[3,3,81],"582":[4,3,17],"583":[3,3,101],"584":[3,1,14],"585":[3,3,32],"586":[3,3,57],"587":[3,3,30],"588":[4,3,31],"589":[3,1,11],"590":[4,3,48],"591":[4,3,75],"592":[6,3,72],"593":[4,1,12],"594":[3,4,45],"595":[3,4,23],"596":[6,4,21],"597":[2,1,57],"598":[3,1,25],"599":[2,1,1],"600":[5,2,16],"601":[2,2,30],"602":[2,1,26],"603":[2,1,38],"604":[2,1,30],"605":[2,1,29],"606":[3,1,40],"607":[5,1,1],"608":[4,5,33],"609":[4,5,47],"610":[6,5,78],"611":[5,1,1],"612":[4,5,51],"613":[4,5,61],"614":[6,5,48],"615":[2,1,25],"616":[4,1,16],"617":[3,4,28],"618":[5,4,16],"619":[2,1,10],"620":[7,2,20],"621":[2,2,23],"622":[4,1,76],"623":[2,1,1],"624":[5,2,15],"625":[5,2,20],"626":[7,2,31],"627":[1,1,1],"628":[9,1,75],"629":[2,1,22],"630":[1,1,8],"631":[1,1,40],"632":[1,1,32],"633":[1,1,1],"634":[1,1,3],"635":[1,1,1],"636":[1,1,43],"637":[1,1,6],"638":[2,1,1],"639":[2,2,49],"640":[4,2,62],"641":[3,2,44],"642":[3,2,68],"643":[3,2,46],"644":[5,1,1],"645":[3,5,64],"646":[2,5,166],"647":[3,5,443],"648":[2,1,1],"649":[3,2,91],"650":[3,2,100],"651":[2,1,1],"652":[5,2,97],"653":[4,2,90],"654":[5,2,69],"655":[5,2,88],"656":[5,2,84],"657":[2,1,1],"658":[1,2,19],"659":[1,2,15],"660":[2,2,1],"661":[5,4,142],"662":[5,4,113],"663":[7,4,103],"664":[2,2,1],"665":[3,4,11],"666":[3,4,24],"667":[3,4,25],"668":[3,4,41],"669":[2,1,1],"670":[2,2,40],"671":[3,2,26],"672":[3,2,64],"673":[3,2,56],"674":[2,1,1],"675":[3,2,41],"676":[1,2,81],"677":[1,2,368],"678":[2,1,1],"679":[3,2,126],"680":[3,2,121],"681":[2,1,1],"682":[4,2,87],"683":[4,2,67],"684":[4,2,69],"685":[4,2,66],"686":[6,2,73],"687":[2,1,1],"688":[4,2,11],"689":[2,2,13],"690":[2,2,5],"691":[2,1,1],"692":[5,2,219],"693":[6,2,93],"694":[2,1,1],"695":[3,2,21],"696":[3,2,48],"697":[3,2,19],"698":[2,1,1],"699":[2,2,64],"700":[3,2,37],"701":[3,2,54],"702":[3,2,46],"703":[2,1,1],"704":[3,2,66],"705":[2,2,119],"706":[3,2,659],"707":[2,1,1],"708":[3,2,90],"709":[3,2,66],"710":[2,1,1],"711":[5,2,58],"712":[5,2,85],"713":[5,2,64],"714":[5,2,71],"715":[5,2,78],"716":[2,1,1],"717":[3,2,17],"718":[2,1,1],"719":[6,2,173],"720":[4,2,78],"721":[2,1,1],"722":[3,2,12],"723":[3,2,14],"724":[3,2,39],"725":[3,2,18],"726":[3,2,10],"727":[2,1,1],"728":[2,2,96],"729":[3,2,39],"730":[3,2,55],"731":[3,2,42],"732":[2,1,1],"733":[3,2,29],"734":[2,2,151],"735":[3,2,604],"736":[2,1,1],"737":[3,2,101],"738":[3,2,82],"739":[2,1,1],"740":[3,2,69],"741":[4,2,99],"742":[5,2,97],"743":[3,2,92],"744":[3,2,85],"745":[2,1,1],"746":[4,2,25],"747":[2,2,17],"748":[2,1,1],"749":[5,2,222],"750":[12,2,124],"751":[2,1,30],"752":[2,1,1],"753":[3,2,15],"754":[3,2,27],"755":[3,2,26],"756":[2,1,1],"757":[2,2,48],"758":[3,2,37],"759":[3,2,44],"760":[2,1,1],"761":[3,2,49],"762":[2,2,138],"763":[3,2,868],"764":[2,1,1],"765":[3,2,89],"766":[3,2,103],"767":[2,1,1],"768":[5,2,81],"769":[6,2,85],"770":[8,2,92],"771":[5,2,82],"772":[5,2,79],"773":[2,1,1],"774":[3,2,25],"775":[3,2,13],"776":[2,1,1],"777":[6,2,277],"778":[7,2,92],"779":[2,1,1],"780":[3,2,22],"781":[3,2,17],"782":[3,2,58],"783":[2,1,1],"784":[2,2,73],"785":[3,2,53],"786":[3,2,53],"787":[2,1,1],"788":[3,2,54],"789":[2,2,110],"790":[3,2,488],"791":[2,1,1],"792":[3,2,109],"793":[2,2,87],"794":[2,1,1],"795":[5,2,90],"796":[6,2,104],"797":[6,2,87],"798":[5,2,89],"799":[6,2,67],"800":[2,1,1],"801":[6,2,13],"802":[7,2,10],"803":[5,2,11],"804":[2,1,1],"805":[3,2,177],"806":[4,2,69],"807":[2,1,1],"808":[3,2,22],"809":[3,2,26],"810":[3,2,25],"811":[2,1,1],"812":[2,2,42],"813":[3,2,15],"814":[3,2,53],"815":[3,2,40],"816":[2,1,1],"817":[3,2,50],"818":[2,2,169],"819":[3,2,390],"820":[2,1,1],"821":[3,2,94],"822":[3,2,78],"823":[2,1,1],"824":[3,2,57],"825":[3,2,108],"826":[3,2,82],"827":[3,2,89],"828":[3,2,94],"829":[2,1,1],"830":[2,2,34],"831":[3,2,23],"832":[3,2,27],"833":[2,1,1],"834":[5,2,248],"835":[7,2,84],"836":[2,1,38],"837":[2,1,1],"838":[3,2,5],"839":[3,2,22],"840":[3,2,24],"841":[3,2,19],"842":[2,1,1],"843":[2,2,39],"844":[3,2,24],"845":[3,2,31],"846":[3,2,48],"847":[2,1,1],"848":[3,2,24],"849":[4,2,114],"850":[3,2,39],"851":[3,2,321],"852":[2,1,1],"853":[3,2,1],"854":[1,4,27],"855":[3,4,64],"856":[3,2,60],"857":[2,1,1],"858":[6,2,109],"859":[9,2,99],"860":[7,2,113],"861":[2,1,1],"862":[3,2,11],"863":[3,2,11],"864":[2,1,1],"865":[5,2,187],"866":[8,2,89],"867":[2,1,1],"868":[3,2,14],"869":[3,2,11],"870":[3,2,25],"871":[2,1,1],"872":[1,2,16],"873":[1,2,33],"874":[1,2,33],"875":[1,2,16],"876":[2,2,1],"877":[5,4,17],"878":[3,4,29],"879":[3,4,47],"880":[1,2,16],"881":[1,3,47],"882":[1,2,91],"883":[1,3,21],"884":[1,2,1],"885":[1,3,10],"886":[1,3,9],"887":[1,2,23],"888":[2,1,1],"889":[1,2,59],"890":[1,2,1],"891":[4,3,96],"892":[4,3,98],"893":[1,2,1],"894":[1,3,1],"895":[1,3,1],"896":[1,3,1],"897":[1,2,1],"898":[2,3,143],"899":[2,3,60],"900":[2,1,1],"901":[2,2,57],"902":[3,2,60],"903":[3,2,32],"904":[3,2,98],"905":[2,1,1],"906":[3,2,70],"907":[2,2,89],"908":[3,2,79],"909":[3,2,43],"910":[3,2,51],"911":[2,1,1],"912":[3,2,64],"913":[3,2,54],"914":[2,1,1],"915":[7,2,90],"916":[4,2,91],"917":[7,2,63],"918":[6,2,77],"919":[5,2,26],"920":[3,2,19],"921":[2,1,1],"922":[5,2,19],"923":[6,2,22],"924":[2,1,1],"925":[5,2,119],"926":[5,2,75],"927":[3,1,43],"928":[2,1,1],"929":[3,2,9],"930":[3,2,14],"931":[3,2,28],"932":[2,1,1],"933":[2,2,81],"934":[3,2,61],"935":[3,2,43],"936":[3,2,83],"937":[2,1,1],"938":[3,2,109],"939":[2,2,721],"940":[2,1,1],"941":[3,2,114],"942":[3,2,95],"943":[2,1,1],"944":[4,2,71],"945":[4,2,81],"946":[4,2,94],"947":[4,2,93],"948":[5,2,97],"949":[2,1,24],"950":[2,1,1],"951":[5,2,138],"952":[11,2,69],"953":[2,1,1],"954":[3,2,16],"955":[3,2,31],"956":[3,2,28],"957":[6,1,37],"958":[3,1,95],"959":[4,1,129],"960":[3,1,121],"961":[3,1,149],"962":[7,1,206],"963":[5,7,58],"964":[9,1,235],"965":[4,1,392],"966":[9,4,60],"967":[7,4,85],"968":[9,4,78],"969":[7,4,54],"970":[4,4,101],"971":[5,1,167],"972":[2,1,1],"973":[2,2,44],"974":[3,2,14],"975":[3,2,38],"976":[3,2,44],"977":[2,1,1],"978":[3,2,57],"979":[2,2,137],"980":[3,2,433],"981":[2,1,1],"982":[3,2,86],"983":[3,2,86],"984":[2,1,1],"985":[6,2,72],"986":[4,2,114],"987":[3,2,88],"988":[5,2,77],"989":[6,2,68],"990":[2,1,1],"991":[4,2,29],"992":[3,2,18],"993":[2,1,1],"994":[5,2,148],"995":[3,2,40],"996":[2,1,1],"997":[3,2,21],"998":[3,2,27],"999":[3,2,21],"1000":[1,1,82],"1001":[1,1,108],"1002":[1,1,58],"1003":[2,1,31],"1004":[1,1,28],"1005":[2,1,72],"1006":[4,1,68],"1007":[2,1,92],"1008":[4,2,73],"1009":[3,2,30],"1010":[2,1,10],"1011":[4,2,49],"1012":[3,2,1],"1013":[2,4,24],"1014":[1,4,29],"1015":[1,4,29],"1016":[1,4,63],"1017":[3,4,34],"1018":[2,1,34],"1019":[1,1,44],"1020":[1,1,36],"1021":[1,1,1],"1022":[1,1,55],"1023":[1,1,8],"1024":[2,2,18],"1025":[2,2,60],"1026":[2,2,81],"1027":[2,2,32],"1028":[1,1,1],"1029":[2,1,39],"1030":[2,1,45],"1031":[2,1,59],"1032":[2,1,28],"1033":[1,1,1],"1034":[2,1,63],"1035":[2,1,1],"1036":[3,3,63],"1037":[2,3,63],"1038":[2,3,38],"1039":[1,1,26],"1040":[2,1,46],"1041":[2,1,85],"1042":[1,1,71],"1043":[1,1,116],"1044":[2,1,23],"1045":[2,1,60],"1046":[2,1,65],"1047":[2,1,103],"1048":[5,1,82],"1049":[1,1,18]},"averageFieldLength":[3.6019047619047604,2.604761904761904,53.47999999999997],"storedFields":{"0":{"title":"精选专题","titles":[]},"1":{"title":"1. JAMStack 核心概念与核心特性","titles":[]},"2":{"title":"1.1 核心定义","titles":["1. JAMStack 核心概念与核心特性"]},"3":{"title":"1.2 核心特性(与传统动态网站对比)","titles":["1. JAMStack 核心概念与核心特性"]},"4":{"title":"1.3 关键误区澄清","titles":["1. JAMStack 核心概念与核心特性"]},"5":{"title":"2. JAMStack 核心技术栈(工具链选型)","titles":[]},"6":{"title":"2.1 核心构建工具(静态站点生成器 SSG)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"7":{"title":"2.2 静态资源托管(部署平台)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"8":{"title":"2.3 API/BaaS 服务(后端能力补充)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"9":{"title":"2.4 无头 CMS(内容管理)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"10":{"title":"3. JAMStack 项目实践:从 0 到 1 搭建博客网站","titles":[]},"11":{"title":"3.1 技术栈选型","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站"]},"12":{"title":"3.2 具体实施步骤","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站"]},"13":{"title":"步骤 1:初始化 Next.js 项目(SSG 模式)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"14":{"title":"步骤 2:配置 Contentful(内容管理)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"15":{"title":"步骤 3:预渲染博客页面(SSG 核心)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"16":{"title":"步骤 4:集成 Supabase 实现动态评论","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"17":{"title":"步骤 5:部署到 Vercel(一键上线)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"18":{"title":"3.3 项目扩展:从博客到电商(JAMStack 场景延伸)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站"]},"19":{"title":"4. JAMStack 适用场景与不适用场景","titles":[]},"20":{"title":"5. 总结","titles":[]},"21":{"title":"1. 引言","titles":[]},"22":{"title":"2. CSR 渲染方案","titles":[]},"23":{"title":"核心原理","titles":["2. CSR 渲染方案"]},"24":{"title":"优缺点","titles":["2. CSR 渲染方案"]},"25":{"title":"适用与不适用场景","titles":["2. CSR 渲染方案"]},"26":{"title":"3. SSR 渲染方案","titles":[]},"27":{"title":"核心原理","titles":["3. SSR 渲染方案"]},"28":{"title":"优缺点","titles":["3. SSR 渲染方案"]},"29":{"title":"适用与不适用场景","titles":["3. SSR 渲染方案"]},"30":{"title":"4. SSG 渲染方案","titles":[]},"31":{"title":"核心原理","titles":["4. SSG 渲染方案"]},"32":{"title":"优缺点","titles":["4. SSG 渲染方案"]},"33":{"title":"适用与不适用场景","titles":["4. SSG 渲染方案"]},"34":{"title":"5. ISR 渲染方案","titles":[]},"35":{"title":"核心原理","titles":["5. ISR 渲染方案"]},"36":{"title":"ISR 的两种模式","titles":["5. ISR 渲染方案"]},"37":{"title":"优缺点","titles":["5. ISR 渲染方案"]},"38":{"title":"适用与不适用场景","titles":["5. ISR 渲染方案"]},"39":{"title":"6. PPR 渲染方案","titles":[]},"40":{"title":"核心原理","titles":["6. PPR 渲染方案"]},"41":{"title":"与 ISR 的本质区别","titles":["6. PPR 渲染方案"]},"42":{"title":"优缺点","titles":["6. PPR 渲染方案"]},"43":{"title":"适用与不适用场景","titles":["6. PPR 渲染方案"]},"44":{"title":"7. 关键差异点分析与实践选择指南","titles":[]},"45":{"title":"7.1 五种方案综合对比","titles":["7. 关键差异点分析与实践选择指南"]},"46":{"title":"7.3 选型决策树","titles":["7. 关键差异点分析与实践选择指南"]},"47":{"title":"7.4 常见落地陷阱与解决方案","titles":["7. 关键差异点分析与实践选择指南"]},"48":{"title":"8. VitePress:一个典型的 SSG 实践案例","titles":[]},"49":{"title":"8.1 VitePress 如何落地 SSG","titles":["8. VitePress:一个典型的 SSG 实践案例"]},"50":{"title":"① 构建时穷举","titles":["8. VitePress:一个典型的 SSG 实践案例","8.1 VitePress 如何落地 SSG"]},"51":{"title":"② 零运行时","titles":["8. VitePress:一个典型的 SSG 实践案例","8.1 VitePress 如何落地 SSG"]},"52":{"title":"③ 纯静态分发","titles":["8. VitePress:一个典型的 SSG 实践案例","8.1 VitePress 如何落地 SSG"]},"53":{"title":"8.2 核心原理","titles":["8. VitePress:一个典型的 SSG 实践案例"]},"54":{"title":"8.3 从 VitePress 学到的五件事","titles":["8. VitePress:一个典型的 SSG 实践案例"]},"55":{"title":"9. 结语","titles":[]},"56":{"title":"1. 从 React SSR 到 Next.js:为什么需要一个框架","titles":[]},"57":{"title":"1.1 react-dom/server — 服务端渲染","titles":["1. 从 React SSR 到 Next.js:为什么需要一个框架"]},"58":{"title":"1.2 react-dom/client — 客户端水合(Hydration)","titles":["1. 从 React SSR 到 Next.js:为什么需要一个框架"]},"59":{"title":"1.3 从"库"到"框架"的鸿沟","titles":["1. 从 React SSR 到 Next.js:为什么需要一个框架"]},"60":{"title":"2. Server First:Next.js 的架构内核","titles":[]},"61":{"title":"2.1 React Server Components (RSC)","titles":["2. Server First:Next.js 的架构内核"]},"62":{"title":"2.2 Client Components:按需声明交互边界","titles":["2. Server First:Next.js 的架构内核"]},"63":{"title":"3. 混合渲染:四种策略,各取所需,灵活混用","titles":[]},"64":{"title":"4. App Router:文件系统即路由系统,约定大于配置","titles":[]},"65":{"title":"4.1 基础规则","titles":["4. App Router:文件系统即路由系统,约定大于配置"]},"66":{"title":"4.2 特殊文件约定","titles":["4. App Router:文件系统即路由系统,约定大于配置"]},"67":{"title":"4.3 目录结构与路由关系示例","titles":["4. App Router:文件系统即路由系统,约定大于配置"]},"68":{"title":"5. 数据获取的新范式","titles":[]},"69":{"title":"5.1 记忆化请求去重","titles":["5. 数据获取的新范式"]},"70":{"title":"5.2 动态 SEO 元数据","titles":["5. 数据获取的新范式"]},"71":{"title":"5.3 API Routes:内置后端能力","titles":["5. 数据获取的新范式"]},"72":{"title":"6. 内置优化组件:让性能在框架层解决","titles":[]},"73":{"title":"6. 性能进阶:Streaming、Suspense、PPR 与 Cache","titles":[]},"74":{"title":"6.1 Streaming + Suspense:先让用户看到内容","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"75":{"title":"6.3 PPR(Partial Prerendering):动静分离","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"76":{"title":"6.4 Cache Components(\'use cache\'):跳过重复计算","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"77":{"title":"6.5 PPR + Cache 的协同","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"78":{"title":"6.6 客户端缓存:SWR","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"79":{"title":"7. 场景边界与建议","titles":[]},"80":{"title":"7.1 适合 Next.js 的场景","titles":["7. 场景边界与建议"]},"81":{"title":"7.2 不适合 Next.js 的场景","titles":["7. 场景边界与建议"]},"82":{"title":"7.3 核心实践原则","titles":["7. 场景边界与建议"]},"83":{"title":"1. 引言","titles":[]},"84":{"title":"1. SWR","titles":[]},"85":{"title":"1.1 简介与核心流程说明","titles":["1. SWR"]},"86":{"title":"1.3 核心应用场景解析","titles":["1. SWR"]},"87":{"title":"场景 1:封装领域 Hook 与全局配置","titles":["1. SWR","1.3 核心应用场景解析"]},"88":{"title":"场景 2:乐观 UI 更新 (Optimistic UI)","titles":["1. SWR","1.3 核心应用场景解析"]},"89":{"title":"场景 3:依赖请求 (Dependent Fetching)","titles":["1. SWR","1.3 核心应用场景解析"]},"90":{"title":"2. TanStack Query(React Query)","titles":[]},"91":{"title":"2.1 简介与核心流程说明","titles":["2. TanStack Query(React Query)"]},"92":{"title":"2.2 优势分析","titles":["2. TanStack Query(React Query)"]},"93":{"title":"2.3 核心应用场景解析","titles":["2. TanStack Query(React Query)"]},"94":{"title":"场景 1:全局引擎配置(QueryClient)","titles":["2. TanStack Query(React Query)","2.3 核心应用场景解析"]},"95":{"title":"场景 2:高级查询(数据转换、依赖与分页)","titles":["2. TanStack Query(React Query)","2.3 核心应用场景解析"]},"96":{"title":"场景 3:架构级难点 —— 乐观 UI 更新(Optimistic Updates)","titles":["2. TanStack Query(React Query)","2.3 核心应用场景解析"]},"97":{"title":"3. 选型评估:SWR vs React Query","titles":[]},"98":{"title":"3.1 核心设计与功能对比分析","titles":["3. 选型评估:SWR vs React Query"]},"99":{"title":"3.2 场景驱动选型:到底需要哪一个?","titles":["3. 选型评估:SWR vs React Query"]},"100":{"title":"场景 A:应该毫不犹豫选择 SWR 的情况","titles":["3. 选型评估:SWR vs React Query","3.2 场景驱动选型:到底需要哪一个?"]},"101":{"title":"场景 B:应该毫不犹豫选择 TanStack Query 的情况","titles":["3. 选型评估:SWR vs React Query","3.2 场景驱动选型:到底需要哪一个?"]},"102":{"title":"1. 引言","titles":[]},"103":{"title":"2. 传统 HTTP——Web 通信的基石","titles":[]},"104":{"title":"3. 流式 HTTP(Streamable HTTP)","titles":[]},"105":{"title":"3.1 核心原理:分块传输的艺术","titles":["3. 流式 HTTP(Streamable HTTP)"]},"106":{"title":"3.2 应用场景:从大文件到 AI 时代","titles":["3. 流式 HTTP(Streamable HTTP)"]},"107":{"title":"3.3 隐藏的坑:代理与缓冲","titles":["3. 流式 HTTP(Streamable HTTP)"]},"108":{"title":"4. SSE (Server-Sent Events):规范化的单向推送协议","titles":[]},"109":{"title":"4.1 核心原理:严格的文本契约","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"110":{"title":"4.2 网络机制:原生浏览器的“自动驾驶”","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"111":{"title":"4.3 典型场景:轻量级的实时感知","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"112":{"title":"4.4 工程避坑指南:不可忽视的约束","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"113":{"title":"5. WebSocket:全双工通信","titles":[]},"114":{"title":"5.1 核心原理","titles":["5. WebSocket:全双工通信"]},"115":{"title":"5.2 网络机制","titles":["5. WebSocket:全双工通信"]},"116":{"title":"5.3 应用场景:高互动的终极方案","titles":["5. WebSocket:全双工通信"]},"117":{"title":"5.4 工程落地的“重装”代价","titles":["5. WebSocket:全双工通信"]},"118":{"title":"6. Webhooks:事件驱动的反向回调","titles":[]},"119":{"title":"6.1 核心原理:回调的自动化","titles":["6. Webhooks:事件驱动的反向回调"]},"120":{"title":"6.2 典型场景:跨系统的松耦合集成","titles":["6. Webhooks:事件驱动的反向回调"]},"121":{"title":"6.3 工程考量:可靠投递与安全防护","titles":["6. Webhooks:事件驱动的反向回调"]},"122":{"title":"6.4 与 SSE 的本质区别","titles":["6. Webhooks:事件驱动的反向回调"]},"123":{"title":"7. 关于 HTTP 轮询的讨论","titles":[]},"124":{"title":"7.1 任务特性的本质差异:流式输出 vs 异步大任务","titles":["7. 关于 HTTP 轮询的讨论"]},"125":{"title":"7.2 基础设施的残酷现实:连接池枯竭与网关超时","titles":["7. 关于 HTTP 轮询的讨论"]},"126":{"title":"7.3 后端架构的天然要求:解耦与消息队列","titles":["7. 关于 HTTP 轮询的讨论"]},"127":{"title":"7.4 移动端弱网环境下的"绝对鲁棒性"","titles":["7. 关于 HTTP 轮询的讨论"]},"128":{"title":"7.5 小结","titles":["7. 关于 HTTP 轮询的讨论"]},"129":{"title":"8. 实践选型指南:不买最贵的,只选最对的","titles":[]},"130":{"title":"8.1 决策矩阵:AI 与实时业务场景选型","titles":["8. 实践选型指南:不买最贵的,只选最对的"]},"131":{"title":"8.2 深度决策逻辑:工程选型的五条金律","titles":["8. 实践选型指南:不买最贵的,只选最对的"]},"132":{"title":"9. 结语","titles":[]},"133":{"title":"1. 引言","titles":[]},"134":{"title":"1.1 概念澄清:两种技术,两个层次","titles":["1. 引言"]},"135":{"title":"1.2 关联与协作","titles":["1. 引言"]},"136":{"title":"1.3 SSE 协议数据格式","titles":["1. 引言"]},"137":{"title":"2. 原生 SSE 客户端 API","titles":[]},"138":{"title":"2.1 EventSource API 概览","titles":["2. 原生 SSE 客户端 API"]},"139":{"title":"2.2 服务端实现示例","titles":["2. 原生 SSE 客户端 API"]},"140":{"title":"3. Fetch + ReadableStream 实现方案","titles":[]},"141":{"title":"3.1 原生 Fetch + ReadableStream 实现","titles":["3. Fetch + ReadableStream 实现方案"]},"142":{"title":"3.2 fetch-event-source:更优雅的解决方案","titles":["3. Fetch + ReadableStream 实现方案"]},"143":{"title":"3.3 解析流水线详解","titles":["3. Fetch + ReadableStream 实现方案"]},"144":{"title":"3.4 典型使用示例","titles":["3. Fetch + ReadableStream 实现方案"]},"145":{"title":"4. 生产实践要点与完整示例","titles":[]},"146":{"title":"4.1 重试策略:指数退避","titles":["4. 生产实践要点与完整示例"]},"147":{"title":"4.2 事件分类处理:区分业务事件与协议控制事件","titles":["4. 生产实践要点与完整示例"]},"148":{"title":"4.3 连接状态追踪:防止重复回调","titles":["4. 生产实践要点与完整示例"]},"149":{"title":"4.4 资源清理:AbortController 与主动取消","titles":["4. 生产实践要点与完整示例"]},"150":{"title":"4.5 完整示例:任务流订阅客户端","titles":["4. 生产实践要点与完整示例"]},"151":{"title":"5. 流式响应的服务端","titles":[]},"152":{"title":"5.1 服务端要点","titles":["5. 流式响应的服务端"]},"153":{"title":"5.2 NestJS 实现示例","titles":["5. 流式响应的服务端"]},"154":{"title":"5.3 支持 POST 请求的 SSE","titles":["5. 流式响应的服务端"]},"155":{"title":"6. 结语","titles":[]},"156":{"title":"1. 引言","titles":[]},"157":{"title":"2. 退避轮询","titles":[]},"158":{"title":"2.1 为什么需要退避轮询?","titles":["2. 退避轮询"]},"159":{"title":"2.2 核心机制与运行规则","titles":["2. 退避轮询"]},"160":{"title":"2.3 客户端实现示例","titles":["2. 退避轮询"]},"161":{"title":"3. 长轮询","titles":[]},"162":{"title":"3.1 核心思想与流程","titles":["3. 长轮询"]},"163":{"title":"3.2 服务端实现(NestJS 示例)","titles":["3. 长轮询"]},"164":{"title":"3.3. 客户端实现示例","titles":["3. 长轮询"]},"165":{"title":"4. 总结与选型建议","titles":[]},"166":{"title":"4.1 两种策略核心对比与选型建议","titles":["4. 总结与选型建议"]},"167":{"title":"4.2 适用场景速查","titles":["4. 总结与选型建议"]},"168":{"title":"4.3 混合策略建议","titles":["4. 总结与选型建议"]},"169":{"title":"1. 引言","titles":[]},"170":{"title":"2. 划分具备分层结构的“自治”组件","titles":[]},"171":{"title":"3. 构建纯渲染的静态版本:确立工程基线","titles":[]},"172":{"title":"4. 寻找状态的最简表示,敲定拓扑位置","titles":[]},"173":{"title":"4.1 什么是 State?什么是 Derived Data(派生数据)?","titles":["4. 寻找状态的最简表示,敲定拓扑位置"]},"174":{"title":"4.2 敲定 State 的安放位置","titles":["4. 寻找状态的最简表示,敲定拓扑位置"]},"175":{"title":"4. 建立反向数据流:让回调成为刚性契约","titles":[]},"176":{"title":"5. 规范驱动开发(SDD):从执行者转变为立法者","titles":[]},"177":{"title":"5.1 SDD 模式的核心流程与实践要点","titles":["5. 规范驱动开发(SDD):从执行者转变为立法者"]},"178":{"title":"5.2 SDD 模式的适用场景","titles":["5. 规范驱动开发(SDD):从执行者转变为立法者"]},"179":{"title":"5.3 为什么 React 与 SDD 天生一对?","titles":["5. 规范驱动开发(SDD):从执行者转变为立法者"]},"180":{"title":"6.结语:工程师的不可替代性","titles":[]},"181":{"title":"1. 奥卡姆剃刀原则的核心内涵","titles":[]},"182":{"title":"2. 编程与设计中应用奥卡姆剃刀的核心场景","titles":[]},"183":{"title":"2.1 场景1:需求实现,拒绝"提前设计未来功能"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"184":{"title":"反例(过度设计)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.1 场景1:需求实现,拒绝"提前设计未来功能""]},"185":{"title":"正例(按需设计)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.1 场景1:需求实现,拒绝"提前设计未来功能""]},"186":{"title":"2.2 场景2:代码实现,避免"冗余逻辑与重复代码"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"187":{"title":"反例(冗余代码)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.2 场景2:代码实现,避免"冗余逻辑与重复代码""]},"188":{"title":"正例(简洁代码)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.2 场景2:代码实现,避免"冗余逻辑与重复代码""]},"189":{"title":"2.3 场景3:架构设计,优先"简单架构",拒绝"过度抽象"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"190":{"title":"反例(过度抽象的架构):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.3 场景3:架构设计,优先"简单架构",拒绝"过度抽象""]},"191":{"title":"正例(简洁架构):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.3 场景3:架构设计,优先"简单架构",拒绝"过度抽象""]},"192":{"title":"2.4 场景4:依赖管理,减少"不必要的第三方库"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"193":{"title":"反例(过度依赖):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.4 场景4:依赖管理,减少"不必要的第三方库""]},"194":{"title":"正例(按需依赖):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.4 场景4:依赖管理,减少"不必要的第三方库""]},"195":{"title":"2.5 场景5:接口设计,遵循"最小接口原则"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"196":{"title":"反例(冗余接口):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.5 场景5:接口设计,遵循"最小接口原则""]},"197":{"title":"正例(简洁接口):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.5 场景5:接口设计,遵循"最小接口原则""]},"198":{"title":"2.6 场景6:调试与优化,优先排查"简单原因"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"199":{"title":"案例:接口返回"空数据"的排查流程","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.6 场景6:调试与优化,优先排查"简单原因""]},"200":{"title":"3. 应用奥卡姆剃刀的三个关键注意事项","titles":[]},"201":{"title":"4. 结语","titles":[]},"202":{"title":"1. TypeScript 编译配置与 tsconfig.json","titles":[]},"203":{"title":"1.1 tsconfig.json 核心配置梳理","titles":["1. TypeScript 编译配置与 tsconfig.json"]},"204":{"title":"1.2 常用 TypeScript 配置组合","titles":["1. TypeScript 编译配置与 tsconfig.json"]},"205":{"title":"2. 大型项目的模块化配置:extends 与 references","titles":[]},"206":{"title":"2.1 核心概念解析","titles":["2. 大型项目的模块化配置:extends 与 references"]},"207":{"title":"1、references(项目引用)","titles":["2. 大型项目的模块化配置:extends 与 references","2.1 核心概念解析"]},"208":{"title":"2、composite(复合项目)","titles":["2. 大型项目的模块化配置:extends 与 references","2.1 核心概念解析"]},"209":{"title":"3、extends(配置继承)","titles":["2. 大型项目的模块化配置:extends 与 references","2.1 核心概念解析"]},"210":{"title":"2.2 extends 与 references 的区别","titles":["2. 大型项目的模块化配置:extends 与 references"]},"211":{"title":"3. Monorepo 项目配置实践","titles":[]},"212":{"title":"3.1 根配置(tsconfig.base.json)","titles":["3. Monorepo 项目配置实践"]},"213":{"title":"3.2 共享库项目(packages/shared/tsconfig.json)","titles":["3. Monorepo 项目配置实践"]},"214":{"title":"3.3 Web 前端项目(packages/web/tsconfig.json)","titles":["3. Monorepo 项目配置实践"]},"215":{"title":"3.4 API 后端项目(packages/api/tsconfig.json)","titles":["3. Monorepo 项目配置实践"]},"216":{"title":"3.5 最佳实践总结","titles":["3. Monorepo 项目配置实践"]},"217":{"title":"3. 调试代码","titles":[]},"218":{"title":"4. 引入扩展工具","titles":[]},"219":{"title":"4.1. 静态检查工具 ESLint","titles":["4. 引入扩展工具"]},"220":{"title":"4.2. 单测工具 Jest","titles":["4. 引入扩展工具"]},"221":{"title":"4.2.1 安装依赖","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"222":{"title":"4.2.2 配置 Jest","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"223":{"title":"4.2.3 编写测试用例","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"224":{"title":"4.2.4 运行测试","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"225":{"title":"4.2.5 高级特性","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"226":{"title":"5. 结语","titles":[]},"227":{"title":"1. 前置概念:类型即集合","titles":[]},"228":{"title":"2. 联合类型:类型的"或"","titles":[]},"229":{"title":"2.1 基础语法与语义","titles":["2. 联合类型:类型的"或""]},"230":{"title":"2.2 可辨识联合(Discriminated Union)","titles":["2. 联合类型:类型的"或""]},"231":{"title":"2.3 类型收窄全解","titles":["2. 联合类型:类型的"或""]},"232":{"title":"2.4 穷尽性检查:never 的妙用","titles":["2. 联合类型:类型的"或""]},"233":{"title":"2.5 keyof 在联合类型上的行为","titles":["2. 联合类型:类型的"或""]},"234":{"title":"2.6 分布式条件类型","titles":["2. 联合类型:类型的"或""]},"235":{"title":"3. 交叉类型:类型的"与"","titles":[]},"236":{"title":"3.1 基础语法与语义","titles":["3. 交叉类型:类型的"与""]},"237":{"title":"3.2 属性冲突的本质","titles":["3. 交叉类型:类型的"与""]},"238":{"title":"3.3 函数类型的交叉 = 重载签名","titles":["3. 交叉类型:类型的"与""]},"239":{"title":"3.4 keyof 在交叉类型上的行为","titles":["3. 交叉类型:类型的"与""]},"240":{"title":"3.5 交叉类型 vs extends 继承","titles":["3. 交叉类型:类型的"与""]},"241":{"title":"4. 联合与交叉的深层关系","titles":[]},"242":{"title":"4.1 keyof 对偶性","titles":["4. 联合与交叉的深层关系"]},"243":{"title":"4.2 分配律","titles":["4. 联合与交叉的深层关系"]},"244":{"title":"4.3 与类型层级的代数关系","titles":["4. 联合与交叉的深层关系"]},"245":{"title":"5. 实战模式","titles":[]},"246":{"title":"5.1 Result / Either 模式","titles":["5. 实战模式"]},"247":{"title":"5.2 Branded Type(标记类型)","titles":["5. 实战模式"]},"248":{"title":"5.3 Mixin 组合模式","titles":["5. 实战模式"]},"249":{"title":"5.4 精确的组件 Props 类型","titles":["5. 实战模式"]},"250":{"title":"6. 总结","titles":[]},"251":{"title":"1. 泛型的基本概念和作用","titles":[]},"252":{"title":"1.1 核心定义","titles":["1. 泛型的基本概念和作用"]},"253":{"title":"1.2 泛型与 any 类型的对比","titles":["1. 泛型的基本概念和作用"]},"254":{"title":"1.3 泛型的工作原理","titles":["1. 泛型的基本概念和作用"]},"255":{"title":"1.4 泛型的核心优势","titles":["1. 泛型的基本概念和作用"]},"256":{"title":"1.5 泛型的应用场景","titles":["1. 泛型的基本概念和作用"]},"257":{"title":"2. 泛型代码示例","titles":[]},"258":{"title":"2.1 基础泛型函数","titles":["2. 泛型代码示例"]},"259":{"title":"2.2 实用泛型函数(项目场景)","titles":["2. 泛型代码示例"]},"260":{"title":"2.3 泛型接口(API 响应处理)","titles":["2. 泛型代码示例"]},"261":{"title":"2.4 泛型类(数据容器)","titles":["2. 泛型代码示例"]},"262":{"title":"2.5 泛型类型别名与高级应用","titles":["2. 泛型代码示例"]},"263":{"title":"3. 泛型最佳实践总结","titles":[]},"264":{"title":"4. 泛型约束","titles":[]},"265":{"title":"4.1 基本类型约束","titles":["4. 泛型约束"]},"266":{"title":"4.2 接口约束","titles":["4. 泛型约束"]},"267":{"title":"4.3 多重约束","titles":["4. 泛型约束"]},"268":{"title":"4.4 Keyof 约束","titles":["4. 泛型约束"]},"269":{"title":"4.5 类约束","titles":["4. 泛型约束"]},"270":{"title":"4.6 小结","titles":["4. 泛型约束"]},"271":{"title":"5. 结语","titles":[]},"272":{"title":"1. 引言","titles":[]},"273":{"title":"2.分层架构设计","titles":[]},"274":{"title":"2.1 前端分层架构","titles":["2.分层架构设计"]},"275":{"title":"2.2 后端模块化分层架构","titles":["2.分层架构设计"]},"276":{"title":"2.3 领域驱动设计(DDD)与模块化","titles":["2.分层架构设计"]},"277":{"title":"2.3.1 DDD 的核心理念","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"278":{"title":"2.3.2 DDD 的关键概念","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"279":{"title":"2.3.3 DDD 的分层架构","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"280":{"title":"2.3.4 全栈 DDD 项目目录结构示例","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"281":{"title":"2.3.5 DDD 实践指导","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"282":{"title":"2.3.6 DDD 实施建议","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"283":{"title":"2.3.7 DDD 的优势与挑战","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"284":{"title":"2.4 微前端与模块化","titles":["2.分层架构设计"]},"285":{"title":"2.4.1 微前端的核心理念","titles":["2.分层架构设计","2.4 微前端与模块化"]},"286":{"title":"2.4.2 微前端的模块化设计原则","titles":["2.分层架构设计","2.4 微前端与模块化"]},"287":{"title":"2.4.3 微前端实现方案对比","titles":["2.分层架构设计","2.4 微前端与模块化"]},"288":{"title":"2.4.4 模块联邦(Module Federation)实战","titles":["2.分层架构设计","2.4 微前端与模块化"]},"289":{"title":"2.4.5 微前端通信机制","titles":["2.分层架构设计","2.4 微前端与模块化"]},"290":{"title":"2.4.6 微前端项目目录结构","titles":["2.分层架构设计","2.4 微前端与模块化"]},"291":{"title":"2.4.7 微前端最佳实践","titles":["2.分层架构设计","2.4 微前端与模块化"]},"292":{"title":"2.4.8 微前端小结","titles":["2.分层架构设计","2.4 微前端与模块化"]},"293":{"title":"结语","titles":[]},"294":{"title":"1. 引言","titles":[]},"295":{"title":"2. 模块化编程初体验","titles":[]},"296":{"title":"3. 模块与模块化的基础概念","titles":[]},"297":{"title":"3.1 痛点解决与工程价值","titles":["3. 模块与模块化的基础概念"]},"298":{"title":"3.2 前端模块化的演进历程","titles":["3. 模块与模块化的基础概念"]},"299":{"title":"3.3 结合设计模式的模块化实践","titles":["3. 模块与模块化的基础概念"]},"300":{"title":"工厂模式","titles":["3. 模块与模块化的基础概念","3.3 结合设计模式的模块化实践"]},"301":{"title":"单例模式","titles":["3. 模块与模块化的基础概念","3.3 结合设计模式的模块化实践"]},"302":{"title":"观察者模式观察者模式 / 发布订阅模式(Observer / Pub-Sub)","titles":["3. 模块与模块化的基础概念","3.3 结合设计模式的模块化实践"]},"303":{"title":"4. 结语:在秩序与复杂中寻找平衡","titles":[]},"304":{"title":"1. CommonJS 规范:Node.js 生态的基石","titles":[]},"305":{"title":"2. AMD 规范:浏览器异步加载方案","titles":[]},"306":{"title":"3. UMD 规范:跨环境兼容方案","titles":[]},"307":{"title":"4. ES Modules:现代开发的终极标准","titles":[]},"308":{"title":"5. 规范对比与现代迁移指南","titles":[]},"309":{"title":"6. 结语:在标准之上构建未来","titles":[]},"310":{"title":"1. 命名导出与导入:精准的代码引用","titles":[]},"311":{"title":"2. 默认导出与导入:单一职责的体现","titles":[]},"312":{"title":"3. 转移导出(Re-exporting):构建模块聚合层","titles":[]},"313":{"title":"4. 动态导入(Dynamic Import):性能优化的“大杀器”","titles":[]},"314":{"title":"5. 模块执行逻辑:静态解析与单例","titles":[]},"315":{"title":"6. 循环依赖:挑战与生存指南","titles":[]},"316":{"title":"7. 结语:在标准规范中寻求最优解","titles":[]},"317":{"title":"1. 引言","titles":[]},"318":{"title":"2. 类型导出与导入:极致的运行时优化","titles":[]},"319":{"title":"3. 类型系统与模块化的深度融合","titles":[]},"320":{"title":"4. 命名空间与模块:历史的交棒","titles":[]},"321":{"title":"5. 声明文件(.d.ts):抹平 JS 与 TS 的鸿沟","titles":[]},"322":{"title":"6. 现代模块化项目的 TS 配置指南","titles":[]},"323":{"title":"7. TypeScript 5.0+ 模块化新特性","titles":[]},"324":{"title":"标准化装饰器(Stage 3 Decorators)","titles":["7. TypeScript 5.0+ 模块化新特性"]},"325":{"title":"模块扩展(Module Augmentation)","titles":["7. TypeScript 5.0+ 模块化新特性"]},"326":{"title":"8. 结语:构建稳固的类型防线","titles":[]},"327":{"title":"1. 单一职责原则","titles":[]},"328":{"title":"2. 高内聚低耦合","titles":[]},"329":{"title":"3. 模块粒度设计","titles":[]},"330":{"title":"4. 命名规范","titles":[]},"331":{"title":"5. 模块版本管理","titles":[]},"332":{"title":"6. 结语:构建可预测的秩序","titles":[]},"333":{"title":"1. CommonJS 与 ES Modules 双模共存","titles":[]},"334":{"title":"2. Node.js 模块加载机制","titles":[]},"335":{"title":"3. 包管理与模块化","titles":[]},"336":{"title":"4. 模块化架构:分层设计与关注点分离","titles":[]},"337":{"title":"5. 结语","titles":[]},"338":{"title":"1. 基本语言与环境","titles":[]},"339":{"title":"2. 核心 UI 框架","titles":[]},"340":{"title":"3. 样式与 UI 组件库 (Styling & Component Libraries)","titles":[]},"341":{"title":"4. 路由与状态管理","titles":[]},"342":{"title":"5. 数据获取与 API 集成 (Data Fetching & API)","titles":[]},"343":{"title":"6. 构建工具与工作流 (Build Tools & Workflow)","titles":[]},"344":{"title":"7. 全栈框架","titles":[]},"345":{"title":"8. 部署与托管 (Deployment & Hosting)","titles":[]},"346":{"title":"9. 学习资源与社区 (Learning & Community)","titles":[]},"347":{"title":"精选专题","titles":[]},"348":{"title":"1. 引言","titles":[]},"349":{"title":"2. 核心定位:从“链接导航”到“知识发现”","titles":[]},"350":{"title":"3. 产品交互重构:反直觉的 UI 创新","titles":[]},"351":{"title":"4. 技术护城河:搜索是一项工程与模型的交响","titles":[]},"352":{"title":"4.1 驯服幻觉(Hallucination)的四个维度","titles":["4. 技术护城河:搜索是一项工程与模型的交响"]},"353":{"title":"4.2 极致的性能优化:追踪尾部延迟(Tail Latency)","titles":["4. 技术护城河:搜索是一项工程与模型的交响"]},"354":{"title":"5. 商业逻辑:你的利润率,就是我的机会","titles":[]},"355":{"title":"6. 未来演进:从被动响应到主动 Agent","titles":[]},"356":{"title":"写在最后","titles":[]},"357":{"title":"1. 引言:当“执行”被 AI 填平,什么才是核心壁垒?","titles":[]},"358":{"title":"2. 从“解决问题”到“发现问题”:提问力决定生产力","titles":[]},"359":{"title":"3. 培养非共识的“品味”:逃离 AI 生成的“平均数”","titles":[]},"360":{"title":"4. 保持真诚与“打破规则”的勇气:抵抗 AI 的“幻觉”与平庸","titles":[]},"361":{"title":"5. 复合指数增长:以小见大的行动力","titles":[]},"362":{"title":"6. 在算力面前保持敬畏,在机器面前保持好奇","titles":[]},"363":{"title":"1. 引言","titles":[]},"364":{"title":"2. 解构产品 Sense 的数学之美","titles":[]},"365":{"title":"2.1. 极简杠杆公式:寻找 ROI 的最大解","titles":["2. 解构产品 Sense 的数学之美"]},"366":{"title":"2.2. 洞察力公式:理智与情感的共舞","titles":["2. 解构产品 Sense 的数学之美"]},"367":{"title":"2.3. AI 前沿视角公式:从“功能产品”到“语境构建”","titles":["2. 解构产品 Sense 的数学之美"]},"368":{"title":"3. 刻意练习:如何从“凭感觉”到“有直觉”?","titles":[]},"369":{"title":"3.1. 建立“预测-验证”的反馈闭环","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?"]},"370":{"title":"3.2. 培养“摩擦力日记”","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?"]},"371":{"title":"3.3. 解构“魔法”:从惊叹到复刻的逆向工程","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?"]},"372":{"title":"(1)记录 (Record):捕捉情绪颗粒度","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"373":{"title":"(2)解剖 (Peel):上帝视角的逻辑拆解","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"374":{"title":"(3)重构 (Reconstruct):全栈视角的复刻推演","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"375":{"title":"(4)沉淀 (Crystallize):输出倒逼内化","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"376":{"title":"4. 结语:从“如何实现”的焦虑中解放,拥抱“为何而做”的自由","titles":[]},"377":{"title":"1. 社区先行:从“我是谁”到“我能为谁解决问题”","titles":[]},"378":{"title":"2. 极简流转:用“克制”对抗“熵增”,用“自动化”替代“堆人力”","titles":[]},"379":{"title":"3. 盈利自信:做时间的朋友,而非资本的奴隶","titles":[]},"380":{"title":"4. 建造你想住的房子:真实的营销与价值观契合","titles":[]},"381":{"title":"5. 总结与反思","titles":[]},"382":{"title":"1. 表象背后藏着决定一切的“系统黑盒”","titles":[]},"383":{"title":"2. 系统的核心:要素 * 连接关系","titles":[]},"384":{"title":"3. 变量:系统里的“变化因子”","titles":[]},"385":{"title":"4. 因果链:搭建系统的骨架","titles":[]},"386":{"title":"5. 增强回路:造就指数级增长","titles":[]},"387":{"title":"6. 调节回路:让系统回归平衡","titles":[]},"388":{"title":"7. 滞后效应:时间的迷雾","titles":[]},"389":{"title":"8. 总结:从观察者到洞察者","titles":[]},"390":{"title":"1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈","titles":[]},"391":{"title":"1.1 容器的形状:方盒与圆瓶背后的成本战术","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"392":{"title":"1.2 可乐的三十年价格迷局:双头垄断下的博弈均衡","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"393":{"title":"1.3 “来都来了”与沉没成本陷阱:有限理性的普遍胜利","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"394":{"title":"1.4 帕累托优化与最优体验:在约束条件下求最优解","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"395":{"title":"2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期","titles":[]},"396":{"title":"2.1 产品定义与定位:深入市场洞察与价值发现","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"397":{"title":"2.2 产品定价策略:最大化收益与捕获用户剩余","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"398":{"title":"2.3 产品用户体验与留存:构建锁定效应与对抗边际效用递减","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"399":{"title":"2.4 产品商业化与生态构建:追求帕累托改进与管理外部性","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"400":{"title":"3. 总结:方法论提炼与职业修养——培养“经济直觉”","titles":[]},"401":{"title":"精选专题","titles":[]},"402":{"title":"1. 什么是 Agent?——从“工具”到“实体”的进化","titles":[]},"403":{"title":"2. 核心价值:自动化程度的阶梯式跨越","titles":[]},"404":{"title":"3. 应用场景:谁会被替代,谁会被增强?","titles":[]},"405":{"title":"3.1 深度替代与变革型","titles":["3. 应用场景:谁会被替代,谁会被增强?"]},"406":{"title":"3.2 辅助增强型(升级工作价值)","titles":["3. 应用场景:谁会被替代,谁会被增强?"]},"407":{"title":"3.3 生活与垂直领域(长尾覆盖)","titles":["3. 应用场景:谁会被替代,谁会被增强?"]},"408":{"title":"4. 技术拆解:Agent 核心要素与关键技术","titles":[]},"409":{"title":"4.1 规划","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"410":{"title":"4.2 记忆","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"411":{"title":"4.3 工具","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"412":{"title":"4.4 行动","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"413":{"title":"5. Agent 的分类与未来","titles":[]},"414":{"title":"5.1 通用 Agent","titles":["5. Agent 的分类与未来"]},"415":{"title":"5.2 多智能体系统 (Multi-Agent System)","titles":["5. Agent 的分类与未来"]},"416":{"title":"典型案例:Deep Research 深度调研系统","titles":["5. Agent 的分类与未来","5.2 多智能体系统 (Multi-Agent System)"]},"417":{"title":"5.3 知识型 Agent","titles":["5. Agent 的分类与未来"]},"418":{"title":"5.4 多模态 Agent","titles":["5. Agent 的分类与未来"]},"419":{"title":"5.5 迈向高度自主:OpenClaw 与"数字员工"","titles":["5. Agent 的分类与未来"]},"420":{"title":"6. 结语:从“对话”到“协同”的范式革命","titles":[]},"421":{"title":"1. 引言","titles":[]},"422":{"title":"2. 任务分解:化繁为简的策略","titles":[]},"423":{"title":"2.1 先分解后规划","titles":["2. 任务分解:化繁为简的策略"]},"424":{"title":"2.2 边分解边规划","titles":["2. 任务分解:化繁为简的策略"]},"425":{"title":"2.3 基于语言模型的自主分解","titles":["2. 任务分解:化繁为简的策略"]},"426":{"title":"3. 自我反思:闭环控制的艺术","titles":[]},"427":{"title":"4. 动态响应模式:基于 ReAct 看规划闭环","titles":[]},"428":{"title":"5. 预编排模式:Plan-and-Execute 下的自动化工程","titles":[]},"429":{"title":"5.1 核心运行机制","titles":["5. 预编排模式:Plan-and-Execute 下的自动化工程"]},"430":{"title":"5.2 为什么在复杂场景中这种模式更具优势?","titles":["5. 预编排模式:Plan-and-Execute 下的自动化工程"]},"431":{"title":"5.3 小结","titles":["5. 预编排模式:Plan-and-Execute 下的自动化工程"]},"432":{"title":"6. 范式选择:如何为你的 Agent 配置“小脑”?","titles":[]},"433":{"title":"7. 结语:规划是 Agent 迈向“确定性”的定盘星","titles":[]},"434":{"title":"1. 引言","titles":[]},"435":{"title":"2. Prompts:即时灵活的对话指令","titles":[]},"436":{"title":"3. Skills:可复用的专属能力包(把高频方法变成可复用能力)","titles":[]},"437":{"title":"4. Projects:长期专属工作空间","titles":[]},"438":{"title":"5. Subagents:分工明确的专项助手","titles":[]},"439":{"title":"6. MCP:模型上下文协议(外部连接通用协议)","titles":[]},"440":{"title":"7. 结束语","titles":[]},"441":{"title":"1. 引言:Agent Skills 是什么?","titles":[]},"442":{"title":"2. 文件夹结构拆解:标准化的操作手册","titles":[]},"443":{"title":"3. 核心机制与流程:渐进式披露的艺术","titles":[]},"444":{"title":"4. 实践指南:如何写好一个 Agent Skill?","titles":[]},"445":{"title":"4.1 核心编写原则","titles":["4. 实践指南:如何写好一个 Agent Skill?"]},"446":{"title":"4.2 四步法","titles":["4. 实践指南:如何写好一个 Agent Skill?"]},"447":{"title":"步骤 1:明确使用场景与边界","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"448":{"title":"步骤 2:编写元信息(YAML Frontmatter)","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"449":{"title":"步骤 3:编写执行指令 (Markdown Body)","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"450":{"title":"步骤4:Skill 质量检查清单 (Checklist)","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"451":{"title":"5. 一个具体的 Agent skill 示例:git-workflow","titles":[]},"452":{"title":"6. 三类常见 Agent Skill 模式","titles":[]},"453":{"title":"模式 1:文档与资源生成","titles":["6. 三类常见 Agent Skill 模式"]},"454":{"title":"模式 2:工作流自动化","titles":["6. 三类常见 Agent Skill 模式"]},"455":{"title":"模式 3:MCP 增强与编排","titles":["6. 三类常见 Agent Skill 模式"]},"456":{"title":"7. 总结:从零散指令到可持续工作流","titles":[]},"457":{"title":"1. 引言:全能的幻觉与稀缺的转移","titles":[]},"458":{"title":"2. 解构 Full Stack:不是简单加法,而是乘数效应","titles":[]},"459":{"title":"2.1 核心能力矩阵与 3 个 Level","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"460":{"title":"2.2 判断力(Taste):最难被 AI 替代的元能力","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"461":{"title":"2.3 实现力(Build):从"敲代码"到"系统编排"","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"462":{"title":"2.4 杠杆力(Leverage):寻找你的 10x 乘数","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"463":{"title":"3. Full Stack Builder 的复利效应","titles":[]},"464":{"title":"4. 进阶路径:Full Stack Builder 的成长路径","titles":[]},"465":{"title":"5. AI 时代的机会在哪里?","titles":[]},"466":{"title":"6. 结语","titles":[]},"467":{"title":"1. 引言","titles":[]},"468":{"title":"2. 为什么深度研究需要 Multi-Agent 架构模式?","titles":[]},"469":{"title":"3. 系统架构","titles":[]},"470":{"title":"3.1 核心设计与职责分配","titles":["3. 系统架构"]},"471":{"title":"3.2 工作流设计","titles":["3. 系统架构"]},"472":{"title":"3.3 技术要点说明","titles":["3. 系统架构"]},"473":{"title":"4. 实践案例:以“初中数学学习研究”为例","titles":[]},"474":{"title":"4.1 执行流观察","titles":["4. 实践案例:以“初中数学学习研究”为例"]},"475":{"title":"4.2 数据可视化的深度","titles":["4. 实践案例:以“初中数学学习研究”为例"]},"476":{"title":"5. 结束语:迈向更可控的 Agent 开发","titles":[]},"477":{"title":"1. 引言","titles":[]},"478":{"title":"2. 为什么选择 Claude Agent SDK?","titles":[]},"479":{"title":"3.快速上手:环境配置与初始化","titles":["2. 为什么选择 Claude Agent SDK?"]},"480":{"title":"3.1 安装依赖","titles":["2. 为什么选择 Claude Agent SDK?","3.快速上手:环境配置与初始化"]},"481":{"title":"3.2 环境变量的“陷阱”与配置","titles":["2. 为什么选择 Claude Agent SDK?","3.快速上手:环境配置与初始化"]},"482":{"title":"4. 核心实践:从无状态交互到自主执行","titles":["2. 为什么选择 Claude Agent SDK?"]},"483":{"title":"4.1 模式一:基础无状态对话","titles":["2. 为什么选择 Claude Agent SDK?","4. 核心实践:从无状态交互到自主执行"]},"484":{"title":"4.2 模式二:自主找 Bug 并修复(Agentic Loop)","titles":["2. 为什么选择 Claude Agent SDK?","4. 核心实践:从无状态交互到自主执行"]},"485":{"title":"5. 进阶:会话管理与持久化记忆","titles":["2. 为什么选择 Claude Agent SDK?"]},"486":{"title":"5.1 会话 ID 的捕获与恢复","titles":["2. 为什么选择 Claude Agent SDK?","5. 进阶:会话管理与持久化记忆"]},"487":{"title":"6. 实战 TUI 应用:构建流式交互 Agent 终端","titles":["2. 为什么选择 Claude Agent SDK?"]},"488":{"title":"6.1 核心逻辑:流式解析 stream_event","titles":["2. 为什么选择 Claude Agent SDK?","6. 实战 TUI 应用:构建流式交互 Agent 终端"]},"489":{"title":"6.2 封装 tuiChat 对话循环","titles":["2. 为什么选择 Claude Agent SDK?","6. 实战 TUI 应用:构建流式交互 Agent 终端"]},"490":{"title":"6.3 交互效果展示","titles":["2. 为什么选择 Claude Agent SDK?","6. 实战 TUI 应用:构建流式交互 Agent 终端"]},"491":{"title":"7. 结束语","titles":["2. 为什么选择 Claude Agent SDK?"]},"492":{"title":"1. 破局点:面对 K12 赛道,谁才是真正的用户?","titles":[]},"493":{"title":"2. 为什么选择“数学”?—— 技术边界与场景的完美契合","titles":[]},"494":{"title":"3. Agent 核心设计:结构化的 Prompt 规范","titles":[]},"495":{"title":"4. 总结:从研发思维到产品直觉","titles":[]},"496":{"title":"1. 实践背景","titles":[]},"497":{"title":"2. 平台与 Agent 基本人设","titles":[]},"498":{"title":"2.1 平台选择","titles":["2. 平台与 Agent 基本人设"]},"499":{"title":"2.2 角色设定与物料生成","titles":["2. 平台与 Agent 基本人设"]},"500":{"title":"3. 工作模式与工具集配置","titles":[]},"501":{"title":"3.1 工具/插件配置","titles":["3. 工作模式与工具集配置"]},"502":{"title":"3.2 工作模式设定","titles":["3. 工作模式与工具集配置"]},"503":{"title":"3. Prompt 演进:从常规 Prompt 到结构化 Prompt","titles":[]},"504":{"title":"3.1 阶段一:非结构化 System Prompt(基线测试)","titles":["3. Prompt 演进:从常规 Prompt 到结构化 Prompt"]},"505":{"title":"测试 Case","titles":["3. Prompt 演进:从常规 Prompt 到结构化 Prompt","3.1 阶段一:非结构化 System Prompt(基线测试)"]},"506":{"title":"3.2 阶段二:结构化 System Prompt(LangGPT 范式)","titles":[]},"507":{"title":"测试 Case","titles":["3.2 阶段二:结构化 System Prompt(LangGPT 范式)","3.1 阶段一:非结构化 System Prompt(基线测试)"]},"508":{"title":"测试 Case 2:","titles":["3.2 阶段二:结构化 System Prompt(LangGPT 范式)","3.1 阶段一:非结构化 System Prompt(基线测试)"]},"509":{"title":"5. 实践小总结","titles":[]},"510":{"title":"1. AI 助手","titles":[]},"511":{"title":"1.1. 国外","titles":["1. AI 助手"]},"512":{"title":"1.2. 国内","titles":["1. AI 助手"]},"513":{"title":"2. AI 学习与内容创作工作站","titles":[]},"514":{"title":"2.1 关键点说明","titles":["2. AI 学习与内容创作工作站"]},"515":{"title":"2.2 选择建议","titles":["2. AI 学习与内容创作工作站"]},"516":{"title":"3. AI 搜索","titles":[]},"517":{"title":"3.1 关键点说明","titles":["3. AI 搜索"]},"518":{"title":"3.2 选择建议","titles":["3. AI 搜索"]},"519":{"title":"1. 选模型前,先想清楚这几件事","titles":[]},"520":{"title":"2. 官方 API 平台","titles":[]},"521":{"title":"2.1 国际顶尖模型","titles":["2. 官方 API 平台"]},"522":{"title":"2.2 国内优秀模型","titles":["2. 官方 API 平台"]},"523":{"title":"3. 第三方聚合平台","titles":[]},"524":{"title":"精选专题","titles":[]},"525":{"title":"1. 引言","titles":[]},"526":{"title":"2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%","titles":[]},"527":{"title":"2.1 从"技术债务"到"系统韧性"","titles":["2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%"]},"528":{"title":"2.2 从"不划算"到"高价值":任务优先级的重新洗牌","titles":["2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%"]},"529":{"title":"2.3 跨领域能力的“无痛溢出”","titles":["2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%"]},"530":{"title":"3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense","titles":[]},"531":{"title":"3.1 警惕“监督悖论”与能力的平庸化","titles":["3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense"]},"532":{"title":"3.2 从 Vibe Coding 进化到规范驱动(SDD)","titles":["3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense"]},"533":{"title":"3.3. 构建新型“工程 Sense”:从手艺人到导演","titles":["3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense"]},"534":{"title":"4. 范式落地——在随机性之上,构建确定性的工程基座","titles":[]},"535":{"title":"4.1 从“单点指令”转向“多智能体编排(Multi-Agent Orchestration)”","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"536":{"title":"4.2 构建"上下文护城河":从 Prompt 到知识图谱","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"537":{"title":"4.3 "可观测性":让 AI 的决策过程透明可见","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"538":{"title":"4.4 拥抱"不确定性",但守住"质量底线"","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"539":{"title":"5. 结语","titles":[]},"540":{"title":"1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈","titles":[]},"541":{"title":"1.1 产品 Sense 与业务洞察","titles":["1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈"]},"542":{"title":"1.2 Agentic Engineering(智能体工程)","titles":["1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈"]},"543":{"title":"1.3 AI-First 的交互哲学","titles":["1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈"]},"544":{"title":"2. Agent 开发层:构建连接物理世界的数字中枢","titles":[]},"545":{"title":"2.1 Agentic Workflow 设计","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"546":{"title":"2.2 记忆机制(Memory Management)","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"547":{"title":"2.3 技能的插件化(Agent Skill)","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"548":{"title":"2.4 从硬编码到标准协议与上下文连接","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"549":{"title":"2.5 模型选型、路由与可观测性","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"550":{"title":"2.6 EDD(评估驱动开发)重塑工程质量","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"551":{"title":"3. AI 基础设施层:算力与模型的重工业底座","titles":[]},"552":{"title":"4. 找准自己的生态位","titles":[]},"553":{"title":"1. 引言","titles":[]},"554":{"title":"2. AI 时代的全栈新公式","titles":[]},"555":{"title":"2.1. Engineering (工程力):从“困于实现”到“敢于设计”","titles":["2. AI 时代的全栈新公式"]},"556":{"title":"2.2. Product (产品力):从“需求翻译机”到“价值定义者”","titles":["2. AI 时代的全栈新公式"]},"557":{"title":"2.3. AI (AI 杠杆):指数级倍增器","titles":["2. AI 时代的全栈新公式"]},"558":{"title":"3. 从 Tech Stack 到 Insight Stack:进阶之路","titles":[]},"559":{"title":"1. 三种编程范式速览","titles":[]},"560":{"title":"2. Vibe Coding — 用自然语言"说"出一个应用","titles":[]},"561":{"title":"2.1 关键点说明","titles":["2. Vibe Coding — 用自然语言"说"出一个应用"]},"562":{"title":"2.2 六款工具横向对比","titles":["2. Vibe Coding — 用自然语言"说"出一个应用"]},"563":{"title":"3. AI IDE — 与代码编辑器深度融合","titles":[]},"564":{"title":"3.1 关键点说明","titles":["3. AI IDE — 与代码编辑器深度融合"]},"565":{"title":"3.2 三款工具横向对比","titles":["3. AI IDE — 与代码编辑器深度融合"]},"566":{"title":"4. Agentic Engineering — AI 自主完成工程任务","titles":[]},"567":{"title":"4.1 关键点说明","titles":["4. Agentic Engineering — AI 自主完成工程任务"]},"568":{"title":"4.2 五款 Agentic 工具横向对比","titles":["4. Agentic Engineering — AI 自主完成工程任务"]},"569":{"title":"1. 引言","titles":[]},"570":{"title":"2. 目录概览","titles":[]},"571":{"title":"3. CLAUDE.md:最核心的配置文件","titles":[]},"572":{"title":"3.1 应该写什么","titles":["3. CLAUDE.md:最核心的配置文件"]},"573":{"title":"3.2 示例","titles":["3. CLAUDE.md:最核心的配置文件"]},"574":{"title":"3.3 如何创建 CLAUDE.md","titles":["3. CLAUDE.md:最核心的配置文件"]},"575":{"title":"4. rules/:模块化规则","titles":[]},"576":{"title":"4.1 路径过滤:让规则精准生效","titles":["4. rules/:模块化规则"]},"577":{"title":"4.2 何时该拆分到 rules/","titles":["4. rules/:模块化规则"]},"578":{"title":"4.3 规则文件的组织建议","titles":["4. rules/:模块化规则"]},"579":{"title":"5. commands/:自定义斜杠命令","titles":[]},"580":{"title":"5.1 命令的存放位置","titles":["5. commands/:自定义斜杠命令"]},"581":{"title":"5.2 命令的结构","titles":["5. commands/:自定义斜杠命令"]},"582":{"title":"5.3 传递参数:$ARGUMENTS","titles":["5. commands/:自定义斜杠命令"]},"583":{"title":"5.4 命令的价值","titles":["5. commands/:自定义斜杠命令"]},"584":{"title":"6. skills/:自动触发的工作流","titles":[]},"585":{"title":"6.1 技能与命令的根本区别","titles":["6. skills/:自动触发的工作流"]},"586":{"title":"6.2 技能的结构","titles":["6. skills/:自动触发的工作流"]},"587":{"title":"6.3 技能的使用场景","titles":["6. skills/:自动触发的工作流"]},"588":{"title":"6.4 何时用命令,何时用技能","titles":["6. skills/:自动触发的工作流"]},"589":{"title":"7. agents/:独立执行的专职角色","titles":[]},"590":{"title":"7.1 为什么需要 agents","titles":["7. agents/:独立执行的专职角色"]},"591":{"title":"7.2 agents 的定义结构","titles":["7. agents/:独立执行的专职角色"]},"592":{"title":"7.3 agents vs skills:谁是更好的选择","titles":["7. agents/:独立执行的专职角色"]},"593":{"title":"8. settings.json:权限与项目配置","titles":[]},"594":{"title":"8.1 配置结构","titles":["8. settings.json:权限与项目配置"]},"595":{"title":"8.2 典型场景","titles":["8. settings.json:权限与项目配置"]},"596":{"title":"8.3 settings.local.json:个人权限覆盖","titles":["8. settings.json:权限与项目配置"]},"597":{"title":"9. 结语","titles":[]},"598":{"title":"1. AI 与数学思维","titles":[]},"599":{"title":"2. 产品与商业","titles":[]},"600":{"title":"2.1 产品 Sense 与创造","titles":["2. 产品与商业"]},"601":{"title":"2.2 商业化","titles":["2. 产品与商业"]},"602":{"title":"3. 效率与效能","titles":[]},"603":{"title":"4. 学习与成长","titles":[]},"604":{"title":"5. 人文社科","titles":[]},"605":{"title":"6. 健康生活","titles":[]},"606":{"title":"1. 我们为什么需要读书?","titles":[]},"607":{"title":"2. 读书"三要"","titles":[]},"608":{"title":"第一“要”:完整地读,整本地读","titles":["2. 读书"三要""]},"609":{"title":"第二“要”:带着问题去读,构建知识树","titles":["2. 读书"三要""]},"610":{"title":"第三“要”:与人(或AI)讨论,检验理解的试金石","titles":["2. 读书"三要""]},"611":{"title":"3. 读书"三不要"","titles":[]},"612":{"title":"第一“不要”:不要怀揣哀怨心态,避免读书目的被异化","titles":["3. 读书"三不要""]},"613":{"title":"第二“不要”:不要玩物丧志,陷入对物理媒介的过度迷恋","titles":["3. 读书"三不要""]},"614":{"title":"第三“不要”:不要只读书不知现实,避免知识结构陷入“真空”","titles":["3. 读书"三不要""]},"615":{"title":"4. 让书籍成为连接自我与现实的桥梁","titles":[]},"616":{"title":"1. 打破“信息差”的系统性错觉","titles":[]},"617":{"title":"1.1 表面是你在筛选信息,实际是信息在筛选人","titles":["1. 打破“信息差”的系统性错觉"]},"618":{"title":"1.2 警惕算法构建的“信息茧房”","titles":["1. 打破“信息差”的系统性错觉"]},"619":{"title":"2. 信息泛滥与脑力带宽的消耗","titles":[]},"620":{"title":"2.1 从“追求差”到“对抗泛滥”","titles":["2. 信息泛滥与脑力带宽的消耗"]},"621":{"title":"2.2 无效信息是对算力的极大消耗","titles":["2. 信息泛滥与脑力带宽的消耗"]},"622":{"title":"3. 价值创造的核心:思考+执行,突破信息壁垒","titles":[]},"623":{"title":"4. 行动指南","titles":[]},"624":{"title":"4.1 信息筛选:果断做减法,锚定核心目标","titles":["4. 行动指南"]},"625":{"title":"4.2 信息解读:穿透表象,洞察未言之意","titles":["4. 行动指南"]},"626":{"title":"4.3 差异破局:向内求索,强化“思考+执行”","titles":["4. 行动指南"]},"627":{"title":"卡片盒笔记法","titles":[]},"628":{"title":"AI 增强型 Obsidian 卡片盒:LLM Wiki + Library 双轨制","titles":[]},"629":{"title":"输出驱动:从内化到输出","titles":[]},"630":{"title":"知识仓库目录划分与设计","titles":[]},"631":{"title":"数据如何流动","titles":[]},"632":{"title":"项目简介","titles":[]},"633":{"title":"四阶段流水线","titles":[]},"634":{"title":"三种消费模式","titles":[]},"635":{"title":"项目时间线","titles":[]},"636":{"title":"项目简介","titles":[]},"637":{"title":"解读案例","titles":[]},"638":{"title":"1. 项目概览","titles":[]},"639":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"640":{"title":"1.2 目标场景与典型 Case","titles":["1. 项目概览"]},"641":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"642":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"643":{"title":"1.5 项目规模","titles":["1. 项目概览"]},"644":{"title":"2. 整体架构设计 (Overall Architecture)","titles":[]},"645":{"title":"2.1 架构概述","titles":["2. 整体架构设计 (Overall Architecture)"]},"646":{"title":"2.2 整体架构图","titles":["2. 整体架构设计 (Overall Architecture)"]},"647":{"title":"2.3 目录结构","titles":["2. 整体架构设计 (Overall Architecture)"]},"648":{"title":"3. 模块依赖与调用关系","titles":[]},"649":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"650":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"651":{"title":"4. 核心模块详解","titles":[]},"652":{"title":"模块一:渲染器工厂系统 (Factory System)","titles":["4. 核心模块详解"]},"653":{"title":"模块二:MST Store 状态管理系统","titles":["4. 核心模块详解"]},"654":{"title":"模块三:动作与事件系统 (Action System)","titles":["4. 核心模块详解"]},"655":{"title":"模块四:表达式引擎 (amis-formula)","titles":["4. 核心模块详解"]},"656":{"title":"模块五:可视化编辑器系统 (Editor System)","titles":["4. 核心模块详解"]},"657":{"title":"5. 关键数据流程","titles":[]},"658":{"title":"场景说明","titles":["5. 关键数据流程"]},"659":{"title":"场景说明","titles":["5. 关键数据流程"]},"660":{"title":"6. 接口与契约规范","titles":["5. 关键数据流程"]},"661":{"title":"6.1 渲染器注册契约 (TypeScript)","titles":["5. 关键数据流程","6. 接口与契约规范"]},"662":{"title":"6.2 环境接口契约 (TypeScript)","titles":["5. 关键数据流程","6. 接口与契约规范"]},"663":{"title":"6.3 MST Store 契约 (TypeScript)","titles":["5. 关键数据流程","6. 接口与契约规范"]},"664":{"title":"7. 快速开始","titles":["5. 关键数据流程"]},"665":{"title":"7.1 环境要求","titles":["5. 关键数据流程","7. 快速开始"]},"666":{"title":"7.2 安装与运行","titles":["5. 关键数据流程","7. 快速开始"]},"667":{"title":"7.3 测试","titles":["5. 关键数据流程","7. 快速开始"]},"668":{"title":"7.4 典型用例","titles":["5. 关键数据流程","7. 快速开始"]},"669":{"title":"1. 项目概览","titles":[]},"670":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"671":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"672":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"673":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"674":{"title":"2. 整体架构设计","titles":[]},"675":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"676":{"title":"整体架构图","titles":["2. 整体架构设计"]},"677":{"title":"目录结构","titles":["2. 整体架构设计"]},"678":{"title":"3. 模块依赖与调用关系","titles":[]},"679":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"680":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"681":{"title":"4. 核心模块详解","titles":[]},"682":{"title":"模块一:Node(所有节点的抽象基类)","titles":["4. 核心模块详解"]},"683":{"title":"模块二:Shape(形状渲染基类)","titles":["4. 核心模块详解"]},"684":{"title":"模块三:Stage(舞台根节点与事件中枢)","titles":["4. 核心模块详解"]},"685":{"title":"模块四:Factory(属性系统工厂)","titles":["4. 核心模块详解"]},"686":{"title":"模块五:Animation + Tween(动画引擎)","titles":["4. 核心模块详解"]},"687":{"title":"5. 关键数据流程","titles":[]},"688":{"title":"场景一:用户点击一个 Shape 的完整事件流程","titles":["5. 关键数据流程"]},"689":{"title":"场景二:形状属性变更到屏幕渲染的完整流程","titles":["5. 关键数据流程"]},"690":{"title":"场景三:拖拽操作的完整事件链","titles":["5. 关键数据流程"]},"691":{"title":"6. 接口与契约规范","titles":[]},"692":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"693":{"title":"对外 API 契约(公共 API 导出)","titles":["6. 接口与契约规范"]},"694":{"title":"7. 快速开始","titles":[]},"695":{"title":"7.1 安装与运行","titles":["7. 快速开始"]},"696":{"title":"7.2 最简示例","titles":["7. 快速开始"]},"697":{"title":"7.3 构建命令","titles":["7. 快速开始"]},"698":{"title":"1. 项目概览","titles":[]},"699":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"700":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"701":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"702":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"703":{"title":"2. 整体架构设计","titles":[]},"704":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"705":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"706":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"707":{"title":"3. 模块依赖与调用关系","titles":[]},"708":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"709":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"710":{"title":"4. 核心模块详解","titles":[]},"711":{"title":"模块一:扩展系统 (Extension System)","titles":["4. 核心模块详解"]},"712":{"title":"模块二:调度管道 (Scheduler Pipeline)","titles":["4. 核心模块详解"]},"713":{"title":"模块三:数据管理系统 (Data System)","titles":["4. 核心模块详解"]},"714":{"title":"模块四:坐标系系统 (Coordinate System)","titles":["4. 核心模块详解"]},"715":{"title":"模块五:视觉编码系统 (Visual Encoding)","titles":["4. 核心模块详解"]},"716":{"title":"5. 关键数据流程","titles":[]},"717":{"title":"5.1 初始化与渲染完整流程","titles":["5. 关键数据流程"]},"718":{"title":"6. 接口与契约规范","titles":[]},"719":{"title":"6.1 核心内部模块契约 (TypeScript Interfaces)","titles":["6. 接口与契约规范"]},"720":{"title":"扩展安装器契约 (TypeScript Interface)","titles":["6. 接口与契约规范"]},"721":{"title":"8. 快速开始","titles":[]},"722":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"723":{"title":"8.2 开发模式","titles":["8. 快速开始"]},"724":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"725":{"title":"8.4 按需引入","titles":["8. 快速开始"]},"726":{"title":"8.5 构建发布","titles":["8. 快速开始"]},"727":{"title":"1. 项目概览","titles":[]},"728":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"729":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"730":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"731":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"732":{"title":"2. 整体架构设计","titles":[]},"733":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"734":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"735":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"736":{"title":"3. 模块依赖与调用关系","titles":[]},"737":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"738":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"739":{"title":"4. 核心模块详解","titles":[]},"740":{"title":"模块一:AnimationManager - 动画生命周期管理器","titles":["4. 核心模块详解"]},"741":{"title":"模块二:Renderer 系统 - 渲染器策略层","titles":["4. 核心模块详解"]},"742":{"title":"模块三:ExpressionEngine - After Effects 表达式引擎","titles":["4. 核心模块详解"]},"743":{"title":"模块四:PropertyFactory - 动画属性与关键帧插值系统","titles":["4. 核心模块详解"]},"744":{"title":"模块五:ShapeModifiers - 形状变形修饰器系统","titles":["4. 核心模块详解"]},"745":{"title":"5. 关键数据流程","titles":[]},"746":{"title":"场景一:lottie.loadAnimation() 完整生命周期","titles":["5. 关键数据流程"]},"747":{"title":"场景二:表达式引擎求值流程","titles":["5. 关键数据流程"]},"748":{"title":"6. 接口与契约规范","titles":[]},"749":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"750":{"title":"6.2 对外 API 契约 (TypeScript - 与 index.d.ts 对齐)","titles":["6. 接口与契约规范"]},"751":{"title":"7. 构建系统与产物矩阵","titles":[]},"752":{"title":"8. 快速开始","titles":[]},"753":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"754":{"title":"8.2 安装与运行","titles":["8. 快速开始"]},"755":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"756":{"title":"1. 项目概览","titles":[]},"757":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"758":{"title":"1.2 核心技术亮点","titles":["1. 项目概览"]},"759":{"title":"1.3 技术栈与选型对比","titles":["1. 项目概览"]},"760":{"title":"2. 整体架构设计","titles":[]},"761":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"762":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"763":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"764":{"title":"3. 模块依赖与调用关系","titles":[]},"765":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"766":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"767":{"title":"4. 核心模块详解","titles":[]},"768":{"title":"模块一:渲染器系统 (Renderer System)","titles":["4. 核心模块详解"]},"769":{"title":"模块二:场景图系统 (Scene Graph / Object3D)","titles":["4. 核心模块详解"]},"770":{"title":"模块三:TSL 节点着色系统 (Three.js Shading Language)","titles":["4. 核心模块详解"]},"771":{"title":"模块四:材质系统 (Material System)","titles":["4. 核心模块详解"]},"772":{"title":"模块五:动画系统 (Animation System)","titles":["4. 核心模块详解"]},"773":{"title":"5. 关键数据流程","titles":[]},"774":{"title":"场景一:WebGPU 渲染帧的完整生命周期","titles":["5. 关键数据流程"]},"775":{"title":"场景二:TSL 着色器编译流程","titles":["5. 关键数据流程"]},"776":{"title":"6. 接口与契约规范","titles":[]},"777":{"title":"6.1 核心内部模块契约 (TypeScript Interfaces)","titles":["6. 接口与契约规范"]},"778":{"title":"对外 API 契约 (OpenSpec 格式 — 公共类 API)","titles":["6. 接口与契约规范"]},"779":{"title":"8. 快速开始","titles":[]},"780":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"781":{"title":"8.2 安装与运行","titles":["8. 快速开始"]},"782":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"783":{"title":"1. 项目概览","titles":[]},"784":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"785":{"title":"1.2 技术栈与选型对比","titles":["1. 项目概览"]},"786":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"787":{"title":"2. 整体架构设计","titles":[]},"788":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"789":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"790":{"title":"2.3 目录结构图","titles":["2. 整体架构设计"]},"791":{"title":"3. 模块依赖与调用关系","titles":[]},"792":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"793":{"title":"2.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"794":{"title":"4. 核心模块详解","titles":[]},"795":{"title":"模块一:文本分析引擎 (analysis.ts)","titles":["4. 核心模块详解"]},"796":{"title":"模块二:Canvas 测量引擎 (measurement.ts)","titles":["4. 核心模块详解"]},"797":{"title":"模块三:行行走引擎 (line-break.ts)","titles":["4. 核心模块详解"]},"798":{"title":"模块四:核心聚合层 (layout.ts)","titles":["4. 核心模块详解"]},"799":{"title":"模块五:富文本内联辅助 (rich-inline.ts)","titles":["4. 核心模块详解"]},"800":{"title":"5. 关键数据流程","titles":[]},"801":{"title":"场景一:快速高度测量 (prepare + layout)","titles":["5. 关键数据流程"]},"802":{"title":"场景二:手工逐行布局 + 可变行宽 (layoutNextLineRange + materializeLineRange)","titles":["5. 关键数据流程"]},"803":{"title":"场景三:多行 Shrinkwrap (walkLineRanges)","titles":["5. 关键数据流程"]},"804":{"title":"6. 接口与契约规范","titles":[]},"805":{"title":"6.1 核心类型定义","titles":["6. 接口与契约规范"]},"806":{"title":"6.2公共 API 函数签名汇总","titles":["6. 接口与契约规范"]},"807":{"title":"8. 快速开始","titles":[]},"808":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"809":{"title":"8.2 安装与使用","titles":["8. 快速开始"]},"810":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"811":{"title":"1. 项目概览","titles":[]},"812":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"813":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"814":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"815":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"816":{"title":"2. 整体架构设计","titles":[]},"817":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"818":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"819":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"820":{"title":"3. 模块依赖与调用关系","titles":[]},"821":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"822":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"823":{"title":"4. 核心模块详解","titles":[]},"824":{"title":"模块一:Clock - 时间基类","titles":["4. 核心模块详解"]},"825":{"title":"模块二:Timer - 动画时间基类","titles":["4. 核心模块详解"]},"826":{"title":"模块三:Engine - 全局动画引擎","titles":["4. 核心模块详解"]},"827":{"title":"模块四:Render 渲染核心","titles":["4. 核心模块详解"]},"828":{"title":"模块五:Values 值处理系统","titles":["4. 核心模块详解"]},"829":{"title":"5. 关键数据流程","titles":[]},"830":{"title":"场景一:动画从创建到完成的生命周期","titles":["5. 关键数据流程"]},"831":{"title":"场景二:Timeline 时间线编排","titles":["5. 关键数据流程"]},"832":{"title":"场景三:Tween 合成与冲突处理","titles":["5. 关键数据流程"]},"833":{"title":"6. 接口与契约规范","titles":[]},"834":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"835":{"title":"6.2 对外公共 API 契约 (函数签名)","titles":["6. 接口与契约规范"]},"836":{"title":"7. 构建与包结构","titles":[]},"837":{"title":"8. 快速开始","titles":[]},"838":{"title":"8.1 安装","titles":["8. 快速开始"]},"839":{"title":"8.2 基本用法","titles":["8. 快速开始"]},"840":{"title":"8.3 开发环境","titles":["8. 快速开始"]},"841":{"title":"8.4 模块化导入","titles":["8. 快速开始"]},"842":{"title":"1. 项目概览","titles":[]},"843":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"844":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"845":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"846":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"847":{"title":"2. 整体架构设计","titles":[]},"848":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"849":{"title":"2.2 整体架构图 (ASCII)","titles":["2. 整体架构设计"]},"850":{"title":"2.3 分层职责说明","titles":["2. 整体架构设计"]},"851":{"title":"2.4 完整目录树","titles":["2. 整体架构设计"]},"852":{"title":"3. 模块依赖与调用关系","titles":[]},"853":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"854":{"title":"逻辑说明","titles":["3. 模块依赖与调用关系","3.1 全局入口与核心路由"]},"855":{"title":"调用拓扑 (plainText)","titles":["3. 模块依赖与调用关系","3.1 全局入口与核心路由"]},"856":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"857":{"title":"4. 核心模块详解","titles":[]},"858":{"title":"4.1 浏览器控制模块 (src/browser/)","titles":["4. 核心模块详解"]},"859":{"title":"4.2 适配器注册与发现 (src/registry.ts + discovery.ts)","titles":["4. 核心模块详解"]},"860":{"title":"4.3 守护进程 (src/daemon.ts)","titles":["4. 核心模块详解"]},"861":{"title":"5. 关键数据流程","titles":[]},"862":{"title":"5.1 浏览器命令执行流程","titles":["5. 关键数据流程"]},"863":{"title":"5.2 网站适配器执行流程","titles":["5. 关键数据流程"]},"864":{"title":"6. 接口与契约规范","titles":[]},"865":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"866":{"title":"6.2 Daemon HTTP API (OpenSpec 格式)","titles":["6. 接口与契约规范"]},"867":{"title":"7. 快速开始","titles":[]},"868":{"title":"7.1 环境配置","titles":["7. 快速开始"]},"869":{"title":"7.2 安装与运行","titles":["7. 快速开始"]},"870":{"title":"7.3 典型用例","titles":["7. 快速开始"]},"871":{"title":"第一部分: 业务价值篇","titles":[]},"872":{"title":"项目定位","titles":["第一部分: 业务价值篇"]},"873":{"title":"解决的核心痛点","titles":["第一部分: 业务价值篇"]},"874":{"title":"技术亮点","titles":["第一部分: 业务价值篇"]},"875":{"title":"适用场景","titles":["第一部分: 业务价值篇"]},"876":{"title":"典型使用 Case","titles":["第一部分: 业务价值篇"]},"877":{"title":"Case 1: 基础 SSE 连接","titles":["第一部分: 业务价值篇","典型使用 Case"]},"878":{"title":"Case 2: 带认证和自定义请求","titles":["第一部分: 业务价值篇","典型使用 Case"]},"879":{"title":"Case 3: 自定义错误处理和重试","titles":["第一部分: 业务价值篇","典型使用 Case"]},"880":{"title":"技术栈分析","titles":["第一部分: 业务价值篇"]},"881":{"title":"选型决策分析","titles":["第一部分: 业务价值篇","技术栈分析"]},"882":{"title":"项目结构初览","titles":["第一部分: 业务价值篇"]},"883":{"title":"核心模块职责","titles":["第一部分: 业务价值篇","项目结构初览"]},"884":{"title":"依赖关系","titles":["第一部分: 业务价值篇"]},"885":{"title":"外部依赖","titles":["第一部分: 业务价值篇","依赖关系"]},"886":{"title":"内部依赖","titles":["第一部分: 业务价值篇","依赖关系"]},"887":{"title":"构建输出","titles":["第一部分: 业务价值篇"]},"888":{"title":"第二部分: 架构设计篇","titles":[]},"889":{"title":"系统整体架构","titles":["第二部分: 架构设计篇"]},"890":{"title":"核心模块设计","titles":["第二部分: 架构设计篇"]},"891":{"title":"1. fetch.ts - 主控制器模块","titles":["第二部分: 架构设计篇","核心模块设计"]},"892":{"title":"2. parse.ts - 事件流解析模块","titles":["第二部分: 架构设计篇","核心模块设计"]},"893":{"title":"核心数据流转时序","titles":["第二部分: 架构设计篇"]},"894":{"title":"正常消息接收流程","titles":["第二部分: 架构设计篇","核心数据流转时序"]},"895":{"title":"重试流程","titles":["第二部分: 架构设计篇","核心数据流转时序"]},"896":{"title":"页面可见性变化流程","titles":["第二部分: 架构设计篇","核心数据流转时序"]},"897":{"title":"接口契约定义","titles":["第二部分: 架构设计篇"]},"898":{"title":"公共 API","titles":["第二部分: 架构设计篇","接口契约定义"]},"899":{"title":"内部解析 API","titles":["第二部分: 架构设计篇","接口契约定义"]},"900":{"title":"1. 项目概览","titles":[]},"901":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"902":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"903":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"904":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"905":{"title":"2. 整体架构设计","titles":[]},"906":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"907":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"908":{"title":"2.3 完整目录结构","titles":["2. 整体架构设计"]},"909":{"title":"2.4 最重要的文件","titles":["2. 整体架构设计"]},"910":{"title":"2.5 核心设计模式速查表","titles":["2. 整体架构设计"]},"911":{"title":"3. 模块依赖与调用关系","titles":[]},"912":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"913":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"914":{"title":"4. 核心模块设计","titles":[]},"915":{"title":"4.1 text 生成核心 (generateText / streamText)","titles":["4. 核心模块设计"]},"916":{"title":"4.2 Provider 适配器模式","titles":["4. 核心模块设计"]},"917":{"title":"4.3 UI 消息流与框架集成(useChat / Chat)","titles":["4. 核心模块设计"]},"918":{"title":"4.4 Agent 与工作流(ToolLoopAgent / Workflow)","titles":["4. 核心模块设计"]},"919":{"title":"4.5 模型注册中心(Registry)","titles":["4. 核心模块设计"]},"920":{"title":"4.6 中间件系统","titles":["4. 核心模块设计"]},"921":{"title":"5. 关键数据流程","titles":[]},"922":{"title":"5.1 场景一:generateText 带工具调用的完整流程","titles":["5. 关键数据流程"]},"923":{"title":"5.2 streamText + useChat 前端流式对话","titles":["5. 关键数据流程"]},"924":{"title":"6. 接口与契约规范","titles":[]},"925":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"926":{"title":"6.2 公共 API 契约","titles":["6. 接口与契约规范"]},"927":{"title":"7. Provider 工具系统","titles":[]},"928":{"title":"8. 快速开始","titles":[]},"929":{"title":"8.1 环境要求","titles":["8. 快速开始"]},"930":{"title":"8.2 安装与运行","titles":["8. 快速开始"]},"931":{"title":"8.3 关键目录","titles":["8. 快速开始"]},"932":{"title":"1. 项目概览","titles":[]},"933":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"934":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"935":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"936":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"937":{"title":"2. 整体架构设计","titles":[]},"938":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"939":{"title":"2.2 目录结构","titles":["2. 整体架构设计"]},"940":{"title":"3. 模块依赖与调用关系","titles":[]},"941":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"942":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"943":{"title":"4. 核心模块详解","titles":[]},"944":{"title":"模块一:MessageProcessor (消息处理器)","titles":["4. 核心模块详解"]},"945":{"title":"模块二:DataModel (响应式数据模型)","titles":["4. 核心模块详解"]},"946":{"title":"模块三:GenericBinder (通用数据绑定引擎)","titles":["4. 核心模块详解"]},"947":{"title":"模块四:A2uiStreamParser (流式解析器)","titles":["4. 核心模块详解"]},"948":{"title":"模块五:Catalog System (组件目录系统)","titles":["4. 核心模块详解"]},"949":{"title":"5. 关键数据流程","titles":[]},"950":{"title":"6. 接口与契约规范","titles":[]},"951":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"952":{"title":"6.2 对外 API 契约 (A2UI v0.9 核心消息 Schema)","titles":["6. 接口与契约规范"]},"953":{"title":"7. 快速开始","titles":[]},"954":{"title":"7.1 环境配置","titles":["7. 快速开始"]},"955":{"title":"7.2 安装与运行","titles":["7. 快速开始"]},"956":{"title":"7.3 典型用例","titles":["7. 快速开始"]},"957":{"title":"1. 引言:主流 CSS 工程化方案有哪些?","titles":[]},"958":{"title":"2. CSS 预处理器","titles":[]},"959":{"title":"3. CSS-in-JS","titles":[]},"960":{"title":"4. CSS Modules","titles":[]},"961":{"title":"5. Scoped CSS","titles":[]},"962":{"title":"6. 原子化 CSS(Utility-First / Atomic CSS)","titles":[]},"963":{"title":"为什么 AI 应用产品都在拥抱 Tailwind ?","titles":["6. 原子化 CSS(Utility-First / Atomic CSS)"]},"964":{"title":"7. 变体驱动的原子化 (Variants-Driven Atomic CSS):CVA + Tailwind","titles":[]},"965":{"title":"8. 实践指南:如何构建可扩展的样式工程化体系?","titles":[]},"966":{"title":"8.1 第一层:架构的根基 —— CSS 变量、设计规范与 Design Token","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"967":{"title":"8.2 第二层:生产力基石与标准协议 —— 占比 90% 的主力构建层","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"968":{"title":"8.3 第三层:兜底封装与高级逻辑 —— 占比 10% 的边界“逃生舱”","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"969":{"title":"8.4 底部构建环境:PostCSS 编译管道 (Pipeline)","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"970":{"title":"8.5 架构红线 —— 一些必须规避的反模式","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"971":{"title":"9. 结语:从手工精雕到 AI 增强的架构跃迁","titles":[]},"972":{"title":"1. 项目概览","titles":[]},"973":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"974":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"975":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"976":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"977":{"title":"2. 整体架构设计","titles":[]},"978":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"979":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"980":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"981":{"title":"3. 模块依赖与调用关系","titles":[]},"982":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"983":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"984":{"title":"4. 核心模块详解","titles":[]},"985":{"title":"模块一:Hook 引导系统 (Hook Bootstrap System)","titles":["4. 核心模块详解"]},"986":{"title":"模块二:using-superpowers 引导技能","titles":["4. 核心模块详解"]},"987":{"title":"模块三:brainstorming 头脑风暴技能","titles":["4. 核心模块详解"]},"988":{"title":"模块四:subagent-driven-development 子Agent驱动开发","titles":["4. 核心模块详解"]},"989":{"title":"模块五:test-driven-development TDD 技能","titles":["4. 核心模块详解"]},"990":{"title":"5. 关键数据流程","titles":[]},"991":{"title":"场景一:完整开发工作流 (从需求到合并)","titles":["5. 关键数据流程"]},"992":{"title":"场景二:Bug 修复调试流程","titles":["5. 关键数据流程"]},"993":{"title":"6. 接口与契约规范","titles":[]},"994":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"995":{"title":"6.2 技能间调用契约","titles":["6. 接口与契约规范"]},"996":{"title":"7. 快速开始","titles":[]},"997":{"title":"7.1 环境要求","titles":["7. 快速开始"]},"998":{"title":"7.2 安装","titles":["7. 快速开始"]},"999":{"title":"7.3 典型工作流","titles":["7. 快速开始"]},"1000":{"title":"我是谁","titles":[]},"1001":{"title":"我的认知迭代","titles":[]},"1002":{"title":"关于本站","titles":[]},"1003":{"title":"❤️ 致谢","titles":[]},"1004":{"title":"连接与交流","titles":[]},"1005":{"title":"1. 写在前面","titles":[]},"1006":{"title":"2. 重读《要事第一》","titles":[]},"1007":{"title":"3. 基于系统与模型思维构建洞察力模型","titles":[]},"1008":{"title":"3.1. 增强回路小例子 🌰","titles":["3. 基于系统与模型思维构建洞察力模型"]},"1009":{"title":"3.2. 调节回路","titles":["3. 基于系统与模型思维构建洞察力模型"]},"1010":{"title":"4. 重读数学的乐趣","titles":[]},"1011":{"title":"4.1. 怎么突然又学起数学了?","titles":["4. 重读数学的乐趣"]},"1012":{"title":"4.2. 重新发现了有趣的数学思维","titles":["4. 重读数学的乐趣"]},"1013":{"title":"分解与分类、排列与组合","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"1014":{"title":"多样性红利","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"1015":{"title":"这个世界是稀疏的","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"1016":{"title":"概率的世界观","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"1017":{"title":"AI 教会了我们哪些?","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"1018":{"title":"5. 写在最后","titles":[]},"1019":{"title":"写在前面","titles":[]},"1020":{"title":"漫谈话题","titles":[]},"1021":{"title":"漫谈健康","titles":[]},"1022":{"title":"健康危机","titles":["漫谈健康"]},"1023":{"title":"健康知识学习","titles":["漫谈健康"]},"1024":{"title":"1、向有专业或有经验的人咨询","titles":["漫谈健康","健康知识学习"]},"1025":{"title":"2、学习健康标准和知识","titles":["漫谈健康","健康知识学习"]},"1026":{"title":"3、健康实践","titles":["漫谈健康","健康知识学习"]},"1027":{"title":"4、健康小结","titles":["漫谈健康","健康知识学习"]},"1028":{"title":"漫谈读书与学习","titles":[]},"1029":{"title":"1、读书的目的","titles":["漫谈读书与学习"]},"1030":{"title":"2、读书的方式","titles":["漫谈读书与学习"]},"1031":{"title":"3、读书工具选择与实践","titles":["漫谈读书与学习"]},"1032":{"title":"4、小结","titles":["漫谈读书与学习"]},"1033":{"title":"漫谈时间管理","titles":[]},"1034":{"title":"1、时间不够用问题","titles":["漫谈时间管理"]},"1035":{"title":"2、分阶段调整时间管理","titles":["漫谈时间管理"]},"1036":{"title":"第一阶段:疯狂做减法,专注重要的事","titles":["漫谈时间管理","2、分阶段调整时间管理"]},"1037":{"title":"第二阶段:升级清单管理","titles":["漫谈时间管理","2、分阶段调整时间管理"]},"1038":{"title":"第三阶段:刻意统计并调整时间","titles":["漫谈时间管理","2、分阶段调整时间管理"]},"1039":{"title":"漫谈混合工作制","titles":[]},"1040":{"title":"1、适应混合工作制","titles":["漫谈混合工作制"]},"1041":{"title":"2、延伸思考混合工作制","titles":["漫谈混合工作制"]},"1042":{"title":"写在最后","titles":[]},"1043":{"title":"写在前面","titles":[]},"1044":{"title":"1、前期准备","titles":[]},"1045":{"title":"2、第一阶段","titles":[]},"1046":{"title":"3、第二阶段","titles":[]},"1047":{"title":"4、第三阶段","titles":[]},"1048":{"title":"5、第四阶段(2021.09)","titles":[]},"1049":{"title":"结尾","titles":[]}},"dirtCount":0,"index":[["估计未必适合每一个人",{"2":{"1049":1}}],["卖一部分基金还是可以消费橄榄油的",{"2":{"1048":1}}],["橄榄油的具体效用这里不做介绍",{"2":{"1048":1}}],["摄入量",{"2":{"1048":1}}],["木耳",{"2":{"1047":1}}],["木偶",{"2":{"421":1}}],["黄瓜",{"2":{"1047":1}}],["青菜",{"2":{"1047":1}}],["虾仁等食材做一道菜或汤",{"2":{"1047":1}}],["巴沙鱼片",{"2":{"1047":1}}],["胡萝卜",{"2":{"1047":1}}],["胡搅蛮缠",{"2":{"610":1}}],["扇贝肉",{"2":{"1047":1}}],["扇形",{"2":{"677":1}}],["鱼",{"2":{"1047":1}}],["豆腐",{"2":{"1047":1}}],["豆包",{"2":{"512":3,"522":1}}],["🥗",{"2":{"1047":1}}],["饥饿时转移注意力",{"2":{"1046":1}}],["米饭改为减半",{"2":{"1046":1}}],["玉米等食材搭配做一道简版轻食",{"2":{"1047":1}}],["玉米",{"2":{"1046":1,"1047":2}}],["玉骨",{"2":{"507":1}}],["玉骨冰肌澈",{"2":{"507":2}}],["骑行",{"2":{"1045":1}}],["遛弯1个小时",{"2":{"1045":1}}],["期间最大的困难是新习惯的建立比较难",{"2":{"1045":1}}],["期间虽然经历了比疫情放开后大部人转阳痛苦且印象深刻多倍的事情",{"2":{"1022":1}}],["居家健身器材锻炼每周一到两次",{"2":{"1045":1}}],["居家办公时要强调效果和效率",{"2":{"1040":1}}],["晚饭尝试",{"2":{"1047":1}}],["晚饭正常吃",{"2":{"1043":1}}],["晚餐",{"2":{"1045":1,"1047":1}}],["荤菜",{"2":{"1045":1}}],["午餐和晚餐不做大改变",{"2":{"1046":1}}],["午餐",{"2":{"1045":1,"1047":1}}],["午饭少吃点",{"2":{"1043":1}}],["燕麦",{"2":{"1045":1,"1046":1,"1047":3}}],["鸡蛋等食材做一到两道家常菜",{"2":{"1047":1}}],["鸡蛋羹",{"2":{"1047":2}}],["鸡蛋",{"2":{"1045":1,"1046":1,"1047":1}}],["俯卧撑支架",{"2":{"1044":1}}],["哑铃",{"2":{"1044":1}}],["瑜伽垫",{"2":{"1044":1}}],["蛋白质等指标",{"2":{"1044":1}}],["肌肉占比",{"2":{"1048":1}}],["肌肉与脂肪指标数据不稳",{"2":{"1046":1}}],["肌肉",{"2":{"1044":1,"1048":1}}],["肌肉记忆",{"2":{"531":1}}],["脂肪",{"2":{"1044":1}}],["沁园春",{"2":{"1043":1}}],["毛爷爷的思想和韬略真的足够学",{"2":{"1043":1}}],["榜样的影响都有了",{"2":{"1043":1}}],["榜样的影响",{"2":{"1043":1}}],["齐家达到某种程度的尝试",{"2":{"1043":1}}],["遇事火急火燎的自己逐渐得到了改善",{"2":{"1043":1}}],["遇到问题",{"2":{"1007":1}}],["遇到复杂的业务定制样式",{"2":{"971":1}}],["遇到疑问或不同意见就会随时打断",{"2":{"610":1}}],["遇到困难时又如何转换视角",{"2":{"608":1}}],["遇到需要写报告或做调研的场景",{"2":{"518":1}}],["遇到冲突时",{"2":{"451":1}}],["遇到这种情况该怎么办",{"2":{"387":1}}],["遇到网络波动等错误也可以复用退避等待逻辑",{"2":{"160":1}}],["遇到极其耗时的计算或查库操作",{"2":{"76":1}}],["走路只是维持正常的有氧运动",{"2":{"1048":1}}],["走出校门进入社会后",{"2":{"1043":1}}],["走向工作岗位后",{"2":{"1041":1}}],["走向了",{"2":{"1005":1}}],["走向",{"0":{"540":1},"1":{"541":1,"542":1,"543":1},"2":{"525":1}}],["佛道魔",{"2":{"1042":1}}],["倒不是因为小说阐述了",{"2":{"1042":1}}],["诛仙",{"2":{"1042":2}}],["西蓝花",{"2":{"1047":1}}],["西方还原论的部分应用",{"2":{"1042":1}}],["西西弗斯式",{"2":{"553":1}}],["挺内耗的",{"2":{"1042":1}}],["吐槽一下自己的改变",{"2":{"1041":1}}],["吐字",{"2":{"124":1}}],["聊聊工作与生活",{"2":{"1041":1}}],["聊天状态管理",{"2":{"925":1}}],["聊天状态模型",{"2":{"790":1}}],["聊天助手",{"2":{"902":1}}],["聊天测试数据",{"2":{"790":1}}],["聊天逻辑",{"2":{"790":1}}],["聊天机器人",{"2":{"420":1}}],["聊天记录或关系型数据库中",{"2":{"417":1}}],["聊天插件",{"2":{"414":1}}],["聊天应用的提示词",{"2":{"489":1}}],["聊天应用",{"2":{"112":1,"490":1}}],["聊天",{"2":{"102":1,"784":1,"790":1,"909":1,"926":1}}],["遥想当年学生时代",{"2":{"1041":1}}],["废话不多说",{"2":{"1038":1}}],["废弃",{"2":{"647":2,"706":1,"763":1}}],["购物等事务",{"2":{"1037":1}}],["购物车子应用",{"2":{"290":1}}],["购物车",{"2":{"18":1,"19":1,"80":1}}],["哈佛时间管理课",{"2":{"1037":1}}],["捉急状态",{"2":{"1036":1}}],["丢弃不靠谱的严格时间表",{"2":{"1036":1}}],["吃早饭",{"2":{"1036":1}}],["锻炼身体",{"2":{"1036":1}}],["锻炼自己的洞察力了",{"2":{"1007":1}}],["洗漱",{"2":{"1036":1}}],["疯狂做减法",{"0":{"1036":1}}],["躺平和摆烂是一种方式",{"2":{"1034":1}}],["刚好还有个小爱好",{"2":{"1043":1}}],["刚好在疫情这三年",{"2":{"1034":1}}],["刚提交任务便遭遇了",{"2":{"127":1}}],["遍访了全天下有相关经验的人",{"2":{"1034":1}}],["遍历组件树",{"2":{"939":1}}],["遍历子节点",{"2":{"827":1}}],["遍历链表",{"2":{"826":1}}],["遍历节点图",{"2":{"770":1}}],["遍历关键帧数组",{"2":{"743":1}}],["遍历",{"2":{"655":1,"686":1,"777":1,"827":1,"941":1}}],["遍历所有字节块",{"2":{"143":1}}],["遍历所有完整行",{"2":{"141":1}}],["遍历已有的",{"2":{"58":1}}],["职业发展学习",{"2":{"1031":1}}],["职责定位",{"2":{"965":3}}],["职责隔离与并行协作机制",{"2":{"467":1,"468":1}}],["职责拆分明确",{"2":{"327":1}}],["职责说明",{"2":{"279":1}}],["职责清晰",{"2":{"277":1}}],["职责",{"2":{"197":1,"470":1,"768":1,"789":1,"850":1,"883":1,"891":1,"892":1,"965":1}}],["职责边界",{"2":{"59":1}}],["蜗牛读书等",{"2":{"1031":1}}],["纸质书",{"2":{"1031":4}}],["穷查理宝典",{"2":{"1029":1}}],["穷尽性检查",{"0":{"232":1}}],["纳瓦尔宝典",{"2":{"1029":1}}],["迷茫",{"2":{"1029":1}}],["吧",{"2":{"1029":1}}],["戴明也成为了比较著名的人物",{"2":{"1027":1}}],["据说他十分热爱统计学",{"2":{"1027":1}}],["跟老朋友们也强烈推荐过",{"2":{"1027":1}}],["跟随鼠标显示数值",{"2":{"706":1}}],["践行",{"2":{"1027":1}}],["纠正实操过程中的问题",{"2":{"1026":1}}],["纠错",{"2":{"939":1}}],["巩固阶段",{"2":{"1026":1}}],["斤下降",{"2":{"1046":1}}],["斤之间跳跃",{"2":{"1045":1}}],["斤左右的下降",{"2":{"1045":1}}],["斤",{"2":{"1026":2,"1043":1,"1045":1,"1047":2,"1048":2}}],["迈开腿",{"2":{"1026":2,"1045":1}}],["迈向更复杂的业务编排",{"2":{"491":1}}],["迈向更可控的",{"0":{"476":1}}],["迈向",{"0":{"433":1}}],["迈向高度自主",{"0":{"419":1}}],["迈向高度自主的关键",{"2":{"410":1}}],["载知识之车而寓道德之舍也",{"2":{"1025":1,"1043":1}}],["宁可不合群",{"2":{"1025":1}}],["宁愿使用",{"2":{"112":1}}],["循序渐进",{"2":{"1025":1}}],["循环式品质管理",{"2":{"1027":1}}],["循环控制",{"2":{"825":1}}],["循环播放的完整流程",{"2":{"746":1}}],["循环模式等",{"2":{"738":1}}],["循环驱动",{"2":{"734":1}}],["循环每帧调用",{"2":{"686":1}}],["循环依赖",{"0":{"315":1}}],["循环进行内部检查",{"2":{"163":1}}],["循环持续检查",{"2":{"163":1}}],["循环",{"2":{"162":1,"409":1,"478":1,"672":1,"677":1,"680":1,"686":1,"734":1,"815":1,"825":1,"827":1,"980":1,"989":2}}],["循环和",{"2":{"160":1}}],["循环读取",{"2":{"143":1}}],["循环读取流数据",{"2":{"141":1}}],["道德良好",{"2":{"1025":1}}],["皇帝内经",{"2":{"1025":1}}],["康复训练小技巧",{"2":{"1024":1}}],["医生是经常传授病人一些健康知识的专业人员",{"2":{"1024":1}}],["医护是长年累月协助病人康复训练的专业人员",{"2":{"1024":1}}],["医护",{"2":{"1024":1}}],["医疗等数据时",{"2":{"523":1}}],["医疗场景必须考虑",{"2":{"519":1}}],["休养康复",{"2":{"1022":1}}],["懊悔等悲观情绪都没有任何用处",{"2":{"1022":1}}],["熬几年也就要坏事了",{"2":{"1022":1}}],["熬十天就累了",{"2":{"1022":1}}],["仗着无知挥霍身体",{"2":{"1022":1}}],["毕业季让即将出国的女神写了一幅字",{"2":{"1043":1}}],["毕业时选择的工作自然而然地成为了大学兴趣的延续",{"2":{"1022":1}}],["毕竟静态版本是整个项目的工程基线",{"2":{"171":1}}],["毕竟",{"2":{"132":1}}],["间接原因",{"2":{"1019":1}}],["间距工具类",{"2":{"647":1}}],["间距",{"2":{"338":1,"965":1,"967":1,"971":1}}],["幸亏当初学习培养财商",{"2":{"1048":1}}],["幸亏当时没有在课上睡觉",{"2":{"1008":1}}],["幸运的是从中也学到了一些东西",{"2":{"1019":1}}],["肯定存在不足之处",{"2":{"1018":1}}],["顺便聊一聊思变",{"2":{"1042":1}}],["顺便交代下",{"2":{"1018":1}}],["顺应媒介演进的效率趋势",{"2":{"613":1}}],["赢的概率远远比庄家少",{"2":{"1016":1}}],["赢家通吃",{"2":{"386":1}}],["玩得次数相对少太多",{"2":{"1016":1}}],["玩物丧志",{"2":{"613":1}}],["宋城这个大庄家是活动举办方",{"2":{"1016":1}}],["庄家赢了就直接赢走下注的铜板",{"2":{"1016":1}}],["拿来借鉴也未必能起到多少效果",{"2":{"1034":1}}],["拿着手里的铜板选择押大或押小",{"2":{"1016":1}}],["拿到最新数据后",{"2":{"85":1}}],["碰碰运气",{"2":{"1016":1}}],["碰到新环境就会各种不适应",{"2":{"1014":1}}],["赌钱",{"2":{"1016":3}}],["游刃有余",{"2":{"1043":1}}],["游玩了一下",{"2":{"1016":1}}],["游戏开发者",{"2":{"671":1,"757":1}}],["游戏",{"2":{"116":1,"729":1}}],["杭州宋城",{"2":{"1016":1}}],["稀疏无处不在",{"2":{"1015":1}}],["稀缺的是提出绝佳问题的能力",{"2":{"358":1}}],["阐述了一个结论",{"2":{"1015":1}}],["傅立叶在",{"2":{"1015":1}}],["稍微发生变化就带来较大误差",{"2":{"1014":1}}],["稍有不慎就会导致项目变得比原来更难维护",{"2":{"970":1}}],["病友是那些与自身有着相同失误的人",{"2":{"1024":1}}],["病友等以聊天的方式咨询",{"2":{"1024":1}}],["病态方程组",{"2":{"1014":1}}],["病菌与钢铁",{"2":{"604":1}}],["求解方程组的过程就是整合多个角度的观察结果",{"2":{"1014":1}}],["求值和上下文模拟系统",{"2":{"742":1}}],["求值",{"2":{"735":1,"742":1}}],["求值器",{"2":{"646":1,"655":1}}],["他当年在武汉大学读书时真的将这些应用得淋漓尽致",{"2":{"1013":1}}],["他们之间有增强关系吗",{"2":{"1007":1}}],["他们的关注点会从书本内容彻底转移到别人的眼光上",{"2":{"612":1}}],["他们的核心思路是让",{"2":{"439":1}}],["他们可不会把我当",{"2":{"610":1}}],["他们如何一步步推导出结论",{"2":{"608":1}}],["他们不仅向外输出模型",{"2":{"525":1}}],["他们用",{"2":{"439":1}}],["他们把资金花在维护老客户和提升产品体验上",{"2":{"379":1}}],["他们首先是某个社区的深度参与者和",{"2":{"377":1}}],["他们会在你意想不到的地方卡住",{"2":{"366":1}}],["刨除后来的光环不讲",{"2":{"1013":1}}],["雷军",{"2":{"1013":1}}],["雷达坐标系",{"2":{"706":1}}],["雷达坐标系组件",{"2":{"706":1}}],["雷达图",{"2":{"706":1}}],["雷达",{"2":{"701":1}}],["式事务管理",{"2":{"1013":1}}],["式的操作下",{"2":{"1036":1}}],["式的被动驱动",{"2":{"603":1}}],["式的认知防护",{"2":{"602":1}}],["见识启蒙",{"2":{"1043":1}}],["见缝插针",{"2":{"1013":1}}],["见天地",{"2":{"397":1}}],["靠前一批的注册者",{"2":{"1011":1}}],["量化分析等兴趣的加强",{"2":{"1011":1}}],["量化提取",{"2":{"475":1}}],["贝叶斯等概率理论应用到日常工作与生活中",{"2":{"1011":1}}],["贝塞尔控制点",{"2":{"835":1}}],["贝塞尔",{"2":{"743":1}}],["贝塞尔缓动",{"2":{"743":1}}],["贝塞尔缓动函数计算",{"2":{"735":1}}],["贝塞尔工具函数",{"2":{"735":1}}],["贝塞尔曲线长度池",{"2":{"735":1}}],["贝塞尔曲线",{"2":{"677":1,"679":1}}],["贝塞尔曲线计算",{"2":{"677":1}}],["狂卷",{"2":{"1009":1}}],["🌰",{"0":{"1008":1}}],["🏆",{"2":{"965":3}}],["乱",{"2":{"1007":1}}],["乱序",{"2":{"814":1}}],["疫情结束后也可能会继续尝试下去",{"2":{"1041":1}}],["疫情总会过去的",{"2":{"1039":1}}],["疫情只是更显象化了这种方式",{"2":{"1039":1}}],["疫情后又翻了下",{"2":{"1027":1}}],["疫情后的第一年向外体验",{"2":{"1018":1}}],["疫情期间",{"2":{"1019":1}}],["疫情期间从",{"2":{"1007":1}}],["疫情这三年向内思变的复盘总结基本梳理完成了",{"2":{"1042":1}}],["疫情这三年",{"2":{"1019":1}}],["疫情已经由放开状态继续演变为过去式状态",{"2":{"1005":1}}],["鉴于笔者统计分析的意识已经建立起来",{"2":{"1038":1}}],["鉴于笔者看了一些时间管理相关的书",{"2":{"1037":1}}],["鉴于笔者在大学阶段自由学习与探索的勇气可嘉",{"2":{"1022":1}}],["鉴于笔者没有过多思考要总结哪些东西",{"2":{"1019":1}}],["鉴于笔者个人的视角也有一定的局限性",{"2":{"1006":1}}],["鉴于数学功底有限",{"2":{"1018":1}}],["鉴于许多人对数学有着又爱又恨的恐惧心理",{"2":{"1010":1}}],["鉴权逻辑",{"2":{"131":1}}],["漫谈混合工作制",{"0":{"1039":1},"1":{"1040":1,"1041":1}}],["漫谈时间管理",{"0":{"1033":1},"1":{"1034":1,"1035":1,"1036":1,"1037":1,"1038":1}}],["漫谈读书与学习",{"0":{"1028":1},"1":{"1029":1,"1030":1,"1031":1,"1032":1}}],["漫谈健康",{"0":{"1021":1},"1":{"1022":1,"1023":1,"1024":1,"1025":1,"1026":1,"1027":1}}],["漫谈话题",{"0":{"1020":1}}],["漫谈疫情这三年向内思变",{"2":{"1019":1}}],["漫谈一下疫情后的向外体验",{"2":{"1005":1}}],["漫反射",{"2":{"763":1}}],["❤️",{"0":{"1003":1}}],["辩论",{"2":{"1002":1}}],["扎实的工程化能力就是护城河",{"2":{"1001":1}}],["扎根现实",{"2":{"615":1}}],["摸索",{"2":{"1000":1}}],["摸着石头过河",{"2":{"424":1}}],["浪潮涌现以来",{"2":{"1000":1}}],["浪潮下",{"2":{"348":1}}],["呈现合并选项",{"2":{"999":1}}],["违规惩罚",{"2":{"989":1}}],["澄清问题",{"2":{"987":1}}],["苏格拉底式提问",{"2":{"987":1}}],["塑造",{"2":{"986":1}}],["钩子",{"2":{"983":1}}],["钩子触发",{"2":{"130":1}}],["纵然中间有一些偏差或挫折",{"2":{"1049":1}}],["纵深防御修复策略",{"2":{"980":1}}],["纵观前文",{"2":{"971":1}}],["纵观历史",{"2":{"613":1}}],["铁律",{"2":{"980":1,"989":1}}],["纪律",{"2":{"980":1,"989":1}}],["纪伯伦",{"2":{"505":2}}],["诸如",{"2":{"971":1}}],["封闭的枚举上下文",{"2":{"971":1}}],["封装鼠标",{"2":{"822":1}}],["封装element",{"2":{"819":1}}],["封装具体",{"2":{"768":1}}],["封装底层",{"2":{"761":1}}],["封装所有公共方法",{"2":{"734":1}}],["封装重复操作",{"2":{"597":1}}],["封装一套流程",{"2":{"590":1}}],["封装一段指令",{"2":{"590":1}}],["封装为",{"2":{"583":3}}],["封装为format",{"2":{"188":1}}],["封装可复用的工作流",{"2":{"570":1}}],["封装成一个",{"2":{"437":1}}],["封装创建逻辑",{"2":{"278":1}}],["封装数据访问逻辑",{"2":{"278":1}}],["封装核心业务逻辑",{"2":{"275":1}}],["封装业务规则与流程",{"2":{"274":1}}],["封装的内容",{"2":{"583":1}}],["封装的",{"2":{"153":1}}],["封装",{"0":{"489":1},"2":{"95":1,"197":1,"419":1,"677":1,"762":1,"763":1,"766":1,"819":1,"851":1,"910":1,"917":1}}],["封装领域",{"0":{"87":1},"2":{"87":1}}],["史诗级增强",{"2":{"971":1}}],["片段丢进",{"2":{"971":1}}],["片段类型",{"2":{"750":1}}],["滥用",{"2":{"970":1}}],["症状",{"2":{"970":1}}],["兜底类优雅拼装",{"2":{"968":1}}],["兜底封装与高级逻辑",{"0":{"968":1},"2":{"965":1}}],["逃生舱",{"0":{"968":1},"2":{"968":1,"971":1}}],["逃离",{"0":{"359":1}}],["免去了在",{"2":{"967":1}}],["免费可用",{"2":{"564":1}}],["免费模型",{"2":{"523":1}}],["免费套餐慷慨",{"2":{"523":1}}],["免费套餐额度慷慨",{"2":{"521":1}}],["免费额度",{"2":{"523":2,"565":2,"568":1}}],["免费额度大",{"2":{"521":1}}],["免费额度慷慨",{"2":{"521":1}}],["免费额度更大",{"2":{"345":1}}],["免费的静态网站托管服务",{"2":{"345":1}}],["免费的",{"2":{"344":1}}],["免费托管方案丰富",{"2":{"20":1}}],["免费版足够个人博客使用",{"2":{"11":1}}],["免费无广告",{"2":{"7":1}}],["免费",{"2":{"7":1,"523":1,"565":1,"1024":1}}],["免费入门",{"2":{"7":1}}],["哲学",{"2":{"965":1}}],["局部增强利器",{"2":{"968":1}}],["局部逃生舱",{"2":{"965":1}}],["局限性",{"2":{"958":1,"959":1,"961":1,"962":1,"964":1}}],["局限性与妥协",{"2":{"342":1}}],["局限",{"2":{"107":1,"112":1}}],["承担",{"2":{"965":2}}],["承载动画的所有状态",{"2":{"738":1}}],["承载高并发",{"2":{"344":2}}],["徒增模板语法噪音",{"2":{"965":1}}],["银弹",{"2":{"965":1}}],["良好",{"2":{"965":2}}],["良好的命名是最好的文档",{"2":{"330":1}}],["干掉紧急不重要的事务有点过于暴力",{"2":{"1036":1}}],["干净得不可思议",{"2":{"964":1}}],["干扰调试流程",{"2":{"217":1}}],["契合",{"2":{"963":1}}],["契约交互",{"2":{"317":1}}],["契约验证",{"2":{"171":1}}],["契约应绝对最小化",{"2":{"170":1}}],["契约",{"0":{"663":1,"693":1,"750":1,"778":1,"835":1,"926":1,"952":1},"2":{"98":1,"170":1,"178":1,"179":1,"336":1,"661":1,"735":1,"750":1,"805":1}}],["僵尸样式",{"2":{"963":1}}],["僵尸粉",{"2":{"379":1}}],["暖色调形成与品牌色的视觉对比",{"2":{"962":1}}],["左右",{"2":{"962":1}}],["左手用",{"2":{"553":1}}],["绞尽脑汁起类名的烦恼",{"2":{"962":1}}],["穿透麻烦",{"2":{"961":1}}],["穿透表象",{"0":{"625":1},"2":{"604":1}}],["偷偷",{"2":{"961":1}}],["\\t",{"2":{"960":1}}],["删除长时间没有被迁移且渐进明细到日常清单的事务",{"2":{"1037":1}}],["删除意味着删除",{"2":{"989":1}}],["删除事件",{"2":{"951":1}}],["删除",{"2":{"951":1,"989":1}}],["删减了用户",{"2":{"373":1}}],["删减",{"2":{"373":1}}],["块",{"2":{"947":1}}],["餐厅查找应用",{"2":{"955":1}}],["餐厅查找",{"2":{"939":2}}],["餐厅查找场景",{"2":{"939":1}}],["楼层平面图场景",{"2":{"939":1}}],["航班状态场景",{"2":{"939":1}}],["拓扑分析",{"2":{"939":1}}],["拓展机制",{"2":{"54":1}}],["滑块",{"2":{"934":1,"939":1}}],["滑块控制效果",{"2":{"735":1}}],["拦截流式调用",{"2":{"920":1}}],["拦截非流式调用",{"2":{"920":1}}],["拦截器",{"2":{"275":2}}],["惰性创建",{"2":{"951":1}}],["惰性执行",{"2":{"909":1}}],["惰性流式执行",{"2":{"903":1}}],["贡献者行为守则",{"2":{"980":1}}],["贡献者",{"2":{"974":1}}],["贡献者指南",{"2":{"908":1}}],["贡献指南",{"2":{"706":1,"819":1,"882":1,"939":1}}],["↘",{"2":{"886":1}}],["错开大众上班高峰时间",{"2":{"1036":1}}],["错过",{"2":{"860":1}}],["错误纠正",{"2":{"1043":2}}],["错误类型定义",{"2":{"939":2}}],["错误变更",{"2":{"917":1}}],["错误基类",{"2":{"907":1}}],["错误分类处理",{"2":{"889":1}}],["错误定义",{"2":{"851":1}}],["错误定义与处理",{"2":{"851":1}}],["错误信息",{"2":{"663":1}}],["错误响应必须包含机器可读的错误码",{"2":{"576":1}}],["错误状态码",{"2":{"342":1}}],["错误状态管理",{"2":{"342":1}}],["错误路径和成功路径一样",{"2":{"246":1}}],["错误思路",{"2":{"199":1}}],["错误回调",{"2":{"150":1}}],["错误回滚",{"2":{"88":1}}],["错误处理能力有限",{"2":{"873":1}}],["错误处理风格",{"2":{"572":1}}],["错误处理",{"2":{"142":1,"274":1,"291":1,"432":1,"591":1,"891":1}}],["错误",{"2":{"62":1,"158":1,"449":1}}],["攻击",{"2":{"860":1}}],["攻击面极小",{"2":{"3":1}}],["守护进程是",{"2":{"860":1}}],["守护进程",{"0":{"860":1}}],["守卫",{"2":{"275":2}}],["扫描所有",{"2":{"962":1}}],["扫描已安装插件",{"2":{"859":1}}],["扫描目录下的适配器",{"2":{"859":1}}],["扫描字符流",{"2":{"655":1}}],["归一化后注册",{"2":{"859":1}}],["归档",{"2":{"515":1}}],["┌─────▼─────────────────────────────────┐",{"2":{"892":1}}],["┌─────▼─────┐",{"2":{"859":1}}],["┌──────▼──────┐",{"2":{"858":1,"859":1}}],["┌───────▼───────┐",{"2":{"858":1}}],["┌────────▼─────────┐",{"2":{"858":1}}],["┌─────────▼──────────┐",{"2":{"858":1}}],["┌─────────▼─────────┐",{"2":{"849":1}}],["┌───────────┐",{"2":{"892":1}}],["┌────────────▼─────────────┐",{"2":{"849":1}}],["┌─────────────┐",{"2":{"858":2}}],["┌─────────────▼─────────────┐",{"2":{"849":1}}],["┌──────────────▼───────────────────┐",{"2":{"892":2}}],["┌──────────────▼─────────────────────────┐",{"2":{"892":1}}],["┌──────────────▼─────────────────────────▼───────────────────────────────────┐",{"2":{"849":1}}],["┌───────────────┐",{"2":{"891":1,"892":3}}],["┌─────────────────▼─────────────────────┐",{"2":{"892":1}}],["┌───────────────────┼───────────────────┐",{"2":{"891":1}}],["┌────────────────────┼────────────────────┐",{"2":{"859":1}}],["┌─────────────────────────┐",{"2":{"849":2,"889":3}}],["┌─────────────────────────┐│",{"2":{"849":2}}],["┌──────────────────────────────────┐",{"2":{"892":1}}],["┌──────────────────────────────────────┼──────────────────────────────────────┐",{"2":{"889":1}}],["┌───────────────────────────────────────────────────────┐",{"2":{"889":2}}],["┌─────────────────────────────────────────────────────────────────┐",{"2":{"892":1}}],["┌─────────────────────────────────────────────────────────────────────┐│",{"2":{"858":1,"859":3,"860":4}}],["┌───────────────────────────────────────────────────────────────────────┐",{"2":{"849":2}}],["┌──────────────────────────────────────────────────────────────────────┐",{"2":{"45":5}}],["┌─────────────────────────────────────────────────────────────┐",{"2":{"889":4}}],["┌─────────────────────────────────────────────────────────┐",{"2":{"471":1,"891":1}}],["┌─────────────────────────────────────────┐",{"2":{"279":1}}],["┌───────────────────────────────┐",{"2":{"860":1}}],["┌─────────────────────────────▼─────────────────────────────────────────────┐",{"2":{"859":1}}],["┌─────────────────────────────▼───────────────────────────────────────────────┐",{"2":{"849":2}}],["┌───────────────────────┐│",{"2":{"849":2}}],["┌───────────────────┴───────────────────┐",{"2":{"858":1}}],["┌───────────────────┐",{"2":{"849":1}}],["┌──────────────────┐",{"2":{"849":2,"891":1}}],["┌────────────────┼────────────────┐",{"2":{"858":1}}],["┌───────────────┴───────────────┐",{"2":{"849":1}}],["┌──────────────┐",{"2":{"849":6,"891":3}}],["┌──────────┴──────────┐",{"2":{"891":1}}],["┌──────────┐",{"2":{"889":4}}],["┌──────────▼──────────┐",{"2":{"849":1}}],["┌────▼────┐",{"2":{"858":3,"859":1}}],["刷新所有子动画",{"2":{"834":1}}],["刷新动画值",{"2":{"834":1}}],["刷几小时短视频",{"2":{"606":1}}],["贯穿所有动画类型",{"2":{"830":1}}],["唤醒后遍历活跃的",{"2":{"830":1}}],["唤醒引擎",{"2":{"826":1,"834":1}}],["暂停引擎",{"2":{"834":1}}],["暂停状态",{"2":{"834":2}}],["暂停",{"2":{"825":1}}],["暂停动画",{"2":{"749":1,"825":1}}],["─>",{"2":{"821":2}}],["──是──→",{"2":{"891":1}}],["──┘",{"2":{"860":2}}],["──┐",{"2":{"860":2}}],["──>",{"2":{"856":2}}],["──",{"2":{"819":5}}],["─────>",{"2":{"821":1}}],["────────>",{"2":{"821":1}}],["────>",{"2":{"821":1}}],["────",{"2":{"61":3}}],["──►",{"2":{"45":1}}],["赞助商图片",{"2":{"819":1}}],["阶梯缓动",{"2":{"819":1}}],["阶段根因分析",{"2":{"979":1,"992":1}}],["阶段门",{"2":{"975":1}}],["阶段执行",{"2":{"715":1}}],["阶段的变得至关重要",{"2":{"551":1}}],["阶段二",{"0":{"506":1},"1":{"507":1,"508":1}}],["阶段一",{"0":{"504":1},"1":{"505":1,"507":1,"508":1}}],["阶段",{"2":{"177":1,"282":1,"298":1,"378":1,"414":1,"443":1,"468":1,"622":1,"708":1}}],["枚举",{"2":{"819":1}}],["الرحلة",{"2":{"809":1}}],["بدأت",{"2":{"809":1}}],["春天到了",{"2":{"809":1}}],["春水",{"2":{"507":2}}],["­",{"2":{"795":1}}],["词段拆分为单字",{"2":{"795":1}}],["词",{"2":{"795":1}}],["词级分段",{"2":{"792":1,"795":1}}],["词法→语法→求值",{"2":{"647":1}}],["词法",{"2":{"646":1}}],["词法分析器",{"2":{"647":1,"655":1}}],["词法分析",{"2":{"646":1}}],["证据",{"2":{"790":1}}],["尺寸扫描",{"2":{"790":1}}],["祝福",{"2":{"790":1}}],["鲁迅",{"2":{"790":2}}],["羅生門",{"2":{"790":1}}],["蜘蛛の糸",{"2":{"790":1}}],["芥川龙之介",{"2":{"790":2}}],["古典文学",{"2":{"790":2}}],["瀑布流数据",{"2":{"790":1}}],["瀑布流逻辑",{"2":{"790":1}}],["瀑布流",{"2":{"790":2}}],["狗粮",{"2":{"790":4}}],["侧重",{"2":{"1026":1}}],["侧通道接收",{"2":{"790":1}}],["侧通道",{"2":{"790":1}}],["侧边栏折叠",{"2":{"85":1}}],["侧边栏",{"2":{"75":1,"85":1,"942":1}}],["侧边栏和骨架屏",{"2":{"74":1}}],["套路",{"2":{"1030":1,"1042":1}}],["套路来自",{"2":{"1027":1}}],["套件",{"2":{"790":1}}],["套壳",{"2":{"351":1}}],["累加",{"2":{"789":1,"796":1,"819":1}}],["胶合规则",{"2":{"789":2,"790":1}}],["段内字形索引",{"2":{"805":1}}],["段内断行",{"2":{"797":1}}],["段索引",{"2":{"805":1}}],["段宽",{"2":{"805":1}}],["段宽度累加",{"2":{"789":1,"790":1}}],["段宽度缓存",{"2":{"789":2,"790":1}}],["段宽度",{"2":{"789":1,"793":1,"796":1}}],["段的",{"2":{"805":1}}],["段数量",{"2":{"805":1}}],["段数组",{"2":{"793":1}}],["段断行行为分类",{"2":{"805":1}}],["段跳跃到下一个",{"2":{"797":1}}],["段不可断",{"2":{"797":1}}],["段消费后断行",{"2":{"797":1}}],["段",{"2":{"793":1,"795":1}}],["段类型分类",{"2":{"795":1}}],["段类型数组",{"2":{"793":1}}],["段类型",{"2":{"793":1,"795":1}}],["段文本拼接",{"2":{"792":1}}],["段级偏移计算",{"2":{"790":1}}],["段范围→字符串拼接",{"2":{"789":1,"790":1}}],["段范围→字符串",{"2":{"789":1}}],["段落",{"2":{"338":1,"488":1}}],["准备选项",{"2":{"805":1}}],["准备阶段",{"2":{"788":1,"806":1}}],["准确输出了七言律诗",{"2":{"508":1}}],["准确的信噪比分离能力",{"2":{"460":1}}],["准确定义问题",{"2":{"459":1}}],["准确率极高",{"2":{"414":1}}],["准确",{"2":{"350":1}}],["乌尔都语",{"2":{"786":1,"790":1}}],["缅甸语",{"2":{"786":1,"790":2}}],["韩语",{"2":{"786":1,"790":2}}],["印地语",{"2":{"786":1,"790":1}}],["希伯来语",{"2":{"786":1,"790":1}}],["希望其中的一些操作能对需要的人有一定的帮助",{"2":{"1043":1}}],["希望",{"2":{"1026":1}}],["希望更多的人能主动思变",{"2":{"1018":1}}],["希望接入",{"2":{"568":1}}],["希望将完整工程任务交给",{"2":{"567":1}}],["希望完成什么目标",{"2":{"447":1}}],["希望这份",{"2":{"971":1}}],["希望这套模型",{"2":{"389":1}}],["希望这篇梳理能为你夯实全栈基础",{"2":{"309":1}}],["希望这次的模块化初体验",{"2":{"303":1}}],["希望本系列文章能够帮助读者理解模块化编程的重要性",{"2":{"293":1}}],["希望本文不仅帮助你掌握了泛型",{"2":{"271":1}}],["希望本文能为你的项目实践提供一些参考和帮助",{"2":{"226":1}}],["软性的思维模型与产品洞察",{"2":{"1002":1}}],["软连字符策略",{"2":{"796":1,"805":1}}],["软连字符可见化",{"2":{"792":1}}],["软连字符可视化",{"2":{"789":1,"790":1}}],["软连字符处理",{"2":{"789":1}}],["软连字符",{"2":{"786":1,"790":1,"795":1,"805":1}}],["软件基金会的顶级开源项目",{"2":{"699":1}}],["软件工程师平台",{"2":{"567":1}}],["软件工程师",{"2":{"567":1}}],["软件工程正经历一场权力的交接",{"2":{"530":1}}],["软件工程的历史",{"2":{"525":1}}],["软件工程的正式到来",{"2":{"491":1}}],["软件或项目管理平台",{"2":{"439":1}}],["软件的形态正在从",{"2":{"420":1}}],["软件的核心是业务领域",{"2":{"277":1}}],["软件开发",{"2":{"414":1}}],["软件设计紧密围绕业务需求",{"2":{"283":1}}],["泰语",{"2":{"784":1,"786":1,"790":2}}],["阿拉伯语",{"2":{"790":2}}],["阿拉伯语双向文本",{"2":{"784":1}}],["阿里生态联动",{"2":{"518":1}}],["阿里旗下夸克浏览器内置的",{"2":{"518":1}}],["阿里云百炼",{"2":{"523":2}}],["阿里云场景",{"2":{"522":1}}],["阿里云",{"2":{"522":1}}],["阿里云生态集成",{"2":{"512":1,"522":1}}],["阿里云工具链深度集成",{"2":{"512":1}}],["阿里云推出的通义千问大模型",{"2":{"512":1}}],["测量的",{"2":{"796":1}}],["测量是",{"2":{"796":1}}],["测量结果",{"2":{"793":1,"805":1}}],["测量层",{"2":{"789":1}}],["测量引擎契约",{"2":{"805":1}}],["测量引擎",{"0":{"796":1},"2":{"789":1,"790":1}}],["测量",{"2":{"785":1,"788":2,"789":1,"792":1}}],["测量来实现高性能多行文本排版",{"2":{"784":1}}],["测试实现细节而非行为",{"2":{"989":1}}],["测试策略与方法指南",{"2":{"980":1}}],["测试策略示例",{"2":{"980":1}}],["测试执行器",{"2":{"980":1}}],["测试提示词集合",{"2":{"980":1}}],["测试通用辅助函数库",{"2":{"980":1}}],["测试依赖配置",{"2":{"980":1}}],["测试反模式参考手册",{"2":{"980":1}}],["测试环境配置",{"2":{"939":1}}],["测试夹具",{"2":{"851":1}}],["测试框架配置",{"2":{"882":1}}],["测试框架",{"2":{"846":1,"880":1,"904":1}}],["测试套件定义",{"2":{"939":1}}],["测试套件",{"2":{"819":1,"978":1}}],["测试套件是质量的三道防线",{"2":{"177":1}}],["测试页",{"2":{"790":1}}],["测试入口",{"2":{"735":1}}],["测试工作流",{"2":{"735":1}}],["测试工具",{"2":{"274":1}}],["测试构建工具",{"2":{"706":1}}],["测试辅助库",{"2":{"706":1}}],["测试数据共享",{"2":{"790":1}}],["测试数据",{"2":{"706":1}}],["测试服务器",{"2":{"706":1}}],["测试用的",{"2":{"735":1}}],["测试用",{"2":{"677":1}}],["测试用例目录",{"2":{"819":1}}],["测试用例等",{"2":{"453":1}}],["测试用例生成",{"2":{"438":1,"706":1}}],["测试用例是规范的具象化表达",{"2":{"177":1}}],["测试用例",{"2":{"177":1,"980":1}}],["测试资源",{"2":{"677":1}}],["测试与报告",{"2":{"583":1}}],["测试与文档的范式转移",{"2":{"527":1}}],["测试相关规范",{"2":{"575":1}}],["测试需要先启动",{"2":{"573":1}}],["测试寻找更优解",{"2":{"394":1}}],["测试方案设计",{"2":{"366":1}}],["测试和模型切换",{"2":{"919":1}}],["测试和分析",{"2":{"345":1}}],["测试和部署",{"2":{"285":1}}],["测试",{"0":{"505":1,"507":1,"508":1,"667":1},"2":{"284":1,"343":1,"418":1,"572":1,"677":2,"695":1,"840":1,"882":1,"939":3,"973":1,"980":1}}],["测试配置和工具",{"2":{"274":1}}],["测试层",{"2":{"274":1}}],["测试覆盖",{"2":{"226":1}}],["测试覆盖率配置",{"2":{"882":1}}],["测试覆盖率",{"2":{"225":1}}],["测试覆盖率报告",{"2":{"203":1}}],["测试目录",{"2":{"203":1,"706":1,"851":1}}],["测试文件目录",{"2":{"677":1}}],["测试文件",{"2":{"203":4}}],["测试组件",{"2":{"203":1}}],["测试代码",{"2":{"203":1}}],["测试驱动开发",{"2":{"542":1}}],["测试驱动",{"2":{"177":1}}],["度百岁乃去",{"2":{"1025":1}}],["度",{"2":{"778":1}}],["垂直布局",{"2":{"939":1}}],["垂直视野角度",{"2":{"778":1}}],["垂直域工程",{"2":{"432":1}}],["拼接",{"2":{"971":1}}],["拼装着色器代码",{"2":{"771":1}}],["拼命地订阅各种干货",{"2":{"621":1}}],["顶点属性",{"2":{"766":1}}],["顶层声明污染全树",{"2":{"62":1}}],["撤销",{"2":{"763":1}}],["菜单栏",{"2":{"763":1}}],["菜单组件",{"2":{"647":1}}],["↔",{"2":{"763":1,"826":1}}],["卷腹等健身器材",{"2":{"1044":1}}],["卷",{"2":{"1005":1}}],["卷云",{"2":{"763":1}}],["卷价格的",{"2":{"620":1}}],["凸包等",{"2":{"763":1}}],["八叉树",{"2":{"763":1}}],["宽",{"2":{"796":1}}],["宽度",{"2":{"797":3}}],["宽度比",{"2":{"796":1}}],["宽度累加",{"2":{"792":1}}],["宽度遍历",{"2":{"790":1}}],["宽度修正",{"2":{"789":1}}],["宽度修正等大量细节",{"2":{"784":1}}],["宽度差异",{"2":{"786":1}}],["宽高比",{"2":{"778":1}}],["宽线条渲染",{"2":{"763":1}}],["宽容输入",{"2":{"534":1}}],["宽容",{"2":{"237":1}}],["海绵式阅读",{"2":{"1030":1}}],["海洋",{"2":{"763":1}}],["海量并发场景",{"2":{"167":1}}],["雾",{"2":{"763":1}}],["雾效",{"2":{"763":1}}],["距离切换",{"2":{"763":1}}],["距离场",{"2":{"763":1}}],["细粒度任务列表",{"2":{"994":1}}],["细粒度断行追踪",{"2":{"790":1}}],["细粒度更新",{"2":{"341":1}}],["细节层次",{"2":{"763":1}}],["粒子",{"2":{"763":1}}],["粒子系统材质",{"2":{"763":1}}],["骨骼集合",{"2":{"763":1}}],["骨骼节点",{"2":{"763":1}}],["骨骼动画网格",{"2":{"763":1}}],["骨架屏的布局与实际组件一致",{"2":{"74":1}}],["骨架",{"2":{"23":1,"170":1,"763":1}}],["蒙皮动画",{"2":{"769":1}}],["蒙皮动画网格",{"2":{"766":1}}],["蒙皮",{"2":{"763":1}}],["蒙版",{"2":{"677":1}}],["程序级约束",{"2":{"976":1}}],["程序缓存",{"2":{"763":1}}],["程序化纹理",{"2":{"763":1}}],["程序员成长指北",{"2":{"346":1}}],["粗糙度贴图",{"2":{"778":1}}],["粗糙度",{"2":{"778":1}}],["粗糙度工作流",{"2":{"778":1}}],["粗糙度等",{"2":{"763":1}}],["粗指针模式",{"2":{"719":1}}],["钳制等",{"2":{"763":1}}],["柱坐标",{"2":{"763":1}}],["柱状",{"2":{"701":1}}],["柱状图网格布局",{"2":{"706":1}}],["柱状图",{"2":{"700":1,"706":1}}],["欧拉角",{"2":{"763":1}}],["烘焙光照",{"2":{"763":1}}],["烘托洛神出场之朦胧",{"2":{"508":1}}],["烘托其仪态",{"2":{"505":1}}],["卡通渲染",{"2":{"763":1}}],["卡片容器",{"2":{"939":1}}],["卡片",{"2":{"629":1}}],["卡片盒",{"0":{"628":1}}],["卡片盒笔记法",{"0":{"627":1}}],["球坐标",{"2":{"763":1}}],["球谐函数",{"2":{"763":1}}],["球谐",{"2":{"763":1}}],["球体",{"2":{"763":1}}],["拉伸时间",{"2":{"825":1}}],["拉伸体",{"2":{"763":1}}],["拉文吉亚倡导",{"2":{"380":1}}],["曲线核心",{"2":{"763":1}}],["棋盘格等",{"2":{"763":1}}],["位掩码",{"2":{"763":1}}],["位置解析",{"2":{"819":1}}],["位置计算",{"2":{"818":1}}],["位置音频",{"2":{"763":1}}],["位置追踪",{"2":{"677":1}}],["位置",{"2":{"571":1,"580":1,"591":1,"682":1,"738":1,"743":1,"763":1,"910":1}}],["位置的占位符",{"2":{"254":1}}],["射线",{"2":{"763":2}}],["射线检测",{"2":{"763":1,"777":1}}],["警告等",{"2":{"763":1}}],["警惕算法构建的",{"0":{"618":1}}],["警惕脱离现实的",{"2":{"614":1}}],["警惕被",{"2":{"613":1}}],["警惕心态失衡与怨天尤人",{"2":{"612":1}}],["警惕",{"0":{"531":1},"2":{"612":1}}],["遗留兼容",{"2":{"763":1}}],["遗憾的是",{"2":{"232":1}}],["纹理采样",{"2":{"770":1}}],["纹理贴图",{"2":{"766":1}}],["纹理数据实体",{"2":{"766":1}}],["纹理数据源",{"2":{"763":1}}],["纹理等视觉属性",{"2":{"766":1}}],["纹理资源",{"2":{"763":1,"766":1}}],["纹理基类",{"2":{"763":1}}],["纹理体系",{"2":{"763":1}}],["纹理管理",{"2":{"763":1}}],["纹理管理等",{"2":{"761":1}}],["纹理加载",{"2":{"763":1}}],["纹理生成",{"2":{"763":2}}],["纹理",{"2":{"762":1,"763":2,"777":1}}],["着色节点",{"2":{"766":1}}],["着色器",{"2":{"771":2}}],["着色器绑定",{"2":{"768":1}}],["着色器管线缓存",{"2":{"766":1}}],["着色器中的一个计算节点",{"2":{"766":1}}],["着色器节点实体",{"2":{"766":1}}],["着色器节点图构建与编译",{"2":{"762":1}}],["着色器库",{"2":{"765":1}}],["着色器代码片段",{"2":{"763":1}}],["着色器代码生成",{"2":{"762":1}}],["着色器程序",{"2":{"763":1}}],["着色器编译流程",{"0":{"775":1}}],["着色器编译",{"2":{"762":1,"774":1}}],["着色语言入口",{"2":{"763":1}}],["着色语言",{"2":{"758":1,"759":1,"765":1}}],["委托给",{"2":{"792":1,"918":1}}],["委托",{"2":{"762":1}}],["丰富扩展",{"2":{"814":1}}],["丰富的扩展生态",{"2":{"758":1,"761":1}}],["丰富性等方面",{"2":{"510":1}}],["光学对齐",{"2":{"790":1}}],["光源实体",{"2":{"766":1}}],["光源数据访问",{"2":{"763":1}}],["光源基类",{"2":{"763":1}}],["光源系统",{"2":{"763":1}}],["光照扩展",{"2":{"763":1}}],["光照工具",{"2":{"763":1}}],["光照状态",{"2":{"763":1}}],["光照管理器",{"2":{"763":1}}],["光照计算",{"2":{"763":1,"770":1}}],["光照模型",{"2":{"763":2}}],["光照探针",{"2":{"763":2}}],["光照",{"2":{"757":1,"762":1}}],["光鲜的数据背后",{"2":{"525":1}}],["材质契约",{"2":{"777":1}}],["材质被编译为着色器程序",{"2":{"771":1}}],["材质描述实体",{"2":{"766":1}}],["材质编译",{"2":{"763":1}}],["材质属性被转换为节点图",{"2":{"771":1}}],["材质属性",{"2":{"763":1}}],["材质基类",{"2":{"763":1}}],["材质体系",{"2":{"763":1}}],["材质系统",{"0":{"771":1},"2":{"758":1}}],["材质",{"2":{"757":1,"763":1,"765":1,"766":1,"771":1}}],["待处理的形状数据",{"2":{"744":1}}],["待分析",{"2":{"735":1}}],["缓动名称字符串或函数",{"2":{"835":1}}],["缓动名称→函数解析器",{"2":{"819":1}}],["缓动函数系统",{"2":{"819":1}}],["缓动函数",{"2":{"818":1,"822":1,"834":1,"835":4}}],["缓动",{"2":{"817":1,"822":1}}],["缓动类型",{"2":{"743":1}}],["缓冲区管理",{"2":{"762":1}}],["缓存和惰性初始化",{"2":{"945":1}}],["缓存控制",{"2":{"806":1}}],["缓存到",{"2":{"792":1,"796":1}}],["缓存清除",{"2":{"789":1}}],["缓存所有中间结果",{"2":{"788":1}}],["缓存系统",{"2":{"682":2}}],["缓存处理",{"2":{"342":1}}],["缓存机制难以直接利用",{"2":{"342":1}}],["缓存机制",{"2":{"304":1}}],["缓存等技术实现",{"2":{"279":1}}],["缓存不完整的行",{"2":{"143":1}}],["缓存失效与精细化刷新",{"2":{"98":1}}],["缓存审查器",{"2":{"98":1}}],["缓存标识",{"2":{"98":1}}],["缓存自动清理",{"2":{"91":1}}],["缓存读取的网络开销可能比直接渲染更大",{"2":{"76":1}}],["缓存形同虚设",{"2":{"47":1}}],["缓存能力",{"2":{"45":1}}],["缓存命中时",{"2":{"683":1}}],["缓存命中时无服务端计算",{"2":{"45":1}}],["缓存命中时等同",{"2":{"45":1}}],["缓存",{"2":{"35":2,"45":1,"54":1,"63":1,"88":1,"91":1,"342":1,"489":1,"677":1,"679":1,"743":1,"768":1,"789":1}}],["缓存无缝切换",{"2":{"35":1}}],["缓存期内",{"2":{"35":1}}],["缓存策略",{"2":{"35":1,"59":1,"342":1}}],["锚点",{"2":{"743":2}}],["锚定核心目标",{"0":{"624":1}}],["锚定了长期目标",{"2":{"430":1}}],["锚定效应",{"2":{"397":1}}],["锯齿变形",{"2":{"744":1}}],["锯齿变形修饰器",{"2":{"735":1}}],["锯齿",{"2":{"737":1}}],["膨胀收缩",{"2":{"737":1,"744":1}}],["膨胀收缩修饰器",{"2":{"735":1}}],["插值结果",{"2":{"828":1}}],["插值后重新合成为目标格式",{"2":{"828":1}}],["插值器",{"2":{"772":1}}],["插值器基类",{"2":{"763":1}}],["插值实现",{"2":{"763":1}}],["插值",{"2":{"763":1}}],["插槽管理器",{"2":{"735":1}}],["插件主入口",{"2":{"980":1}}],["插件运行时代码",{"2":{"980":1}}],["插件注册元数据",{"2":{"980":3}}],["插件注册入口",{"2":{"742":1}}],["插件同步机制测试",{"2":{"980":1}}],["插件加载机制测试",{"2":{"980":1}}],["插件顺序决定了编译结果",{"2":{"969":1}}],["插件链",{"2":{"965":1}}],["插件进行处理",{"2":{"960":1}}],["插件脚手架生成",{"2":{"851":1}}],["插件系统",{"2":{"851":1}}],["插件系统和实时预览",{"2":{"645":1}}],["插件发现与加载",{"2":{"851":1}}],["插件的",{"2":{"735":1}}],["插件导出",{"2":{"729":1}}],["插件导出的",{"2":{"728":1}}],["插件化适配器",{"2":{"845":1,"848":1}}],["插件化管道",{"2":{"702":1}}],["插件化架构",{"2":{"701":1}}],["插件类型定义",{"2":{"647":1}}],["插件管理器",{"2":{"647":1,"656":1}}],["插件和快捷键习惯均可无缝迁移",{"2":{"565":1}}],["插件市场与风格定制",{"2":{"561":1}}],["插件生态",{"2":{"542":1}}],["插件生态和",{"2":{"510":1}}],["插件生态丰富",{"2":{"6":1}}],["插件配置",{"0":{"501":1}}],["插件",{"2":{"320":1,"340":1,"568":1,"629":1,"647":2,"851":1,"859":2,"980":1}}],["插件实现",{"2":{"135":1}}],["圆柱体",{"2":{"763":1}}],["圆角等",{"2":{"738":1}}],["圆角",{"2":{"737":1,"744":1,"962":1}}],["圆角修饰器",{"2":{"735":1}}],["圆形",{"2":{"677":1}}],["遮罩系统",{"2":{"735":1}}],["遮罩对象代理",{"2":{"735":1}}],["遮罩元素",{"2":{"735":1}}],["镜头元素",{"2":{"735":1}}],["素菜",{"2":{"1045":1,"1047":2}}],["素材",{"2":{"735":1}}],["素月斜",{"2":{"508":1}}],["栈式状态",{"2":{"735":1}}],["圣诞节动画",{"2":{"735":1}}],["圣方济各会修士威廉",{"2":{"181":1}}],["享元模式",{"2":{"734":1,"740":1}}],["享受纯粹而充实的悦读时光",{"2":{"615":1}}],["享受不中断的",{"2":{"565":1}}],["压缩等多种格式",{"2":{"766":1}}],["压缩纹理",{"2":{"763":1}}],["压缩后仅几",{"2":{"85":1}}],["压力也随之上升",{"2":{"1034":1}}],["压力测试用例",{"2":{"980":3}}],["压力",{"2":{"730":1}}],["投喂",{"2":{"1017":1}}],["投喂需求与视觉规格",{"2":{"170":1}}],["投影滤镜",{"2":{"735":1}}],["投影",{"2":{"730":1}}],["矢量图形动画专属",{"2":{"819":1}}],["矢量无损",{"2":{"730":1}}],["矢量渲染",{"2":{"728":1}}],["费时费力且效果容易走样",{"2":{"728":1}}],["费用",{"2":{"565":1,"568":1}}],["销量",{"2":{"724":1}}],["销毁所有监听",{"2":{"951":1}}],["销毁元素",{"2":{"749":1}}],["销毁动画",{"2":{"749":1}}],["销毁实例",{"2":{"719":1}}],["销毁",{"2":{"704":1,"951":1}}],["袜子",{"2":{"724":1}}],["裤子",{"2":{"724":1}}],["羊毛衫",{"2":{"724":1}}],["衬衫",{"2":{"724":1}}],["衬托神女超凡脱俗",{"2":{"505":1}}],["派发行为",{"2":{"719":1}}],["派生数据",{"0":{"173":1},"2":{"173":1}}],["级多主题策略",{"2":{"965":1}}],["级主题参数",{"2":{"952":1}}],["级联通知机制",{"2":{"945":1}}],["级联阴影",{"2":{"763":1}}],["级组件注册表",{"2":{"939":1}}],["级别的",{"2":{"715":1}}],["级的链路追踪",{"2":{"550":1}}],["盒模型布局计算",{"2":{"706":1}}],["渐渐演变为",{"2":{"1043":1}}],["渐变属性",{"2":{"735":1}}],["渐变描边样式数据",{"2":{"735":1}}],["渐变填充样式数据",{"2":{"735":1}}],["渐变",{"2":{"706":1}}],["渐进扩展",{"2":{"597":1}}],["渐进披露",{"2":{"547":1}}],["渐进式渲染",{"2":{"701":1,"935":1}}],["渐进式权限控制",{"2":{"478":1}}],["渐进式加载模块",{"2":{"443":1}}],["渐进式披露的艺术",{"0":{"443":1}}],["渐进式披露",{"2":{"441":1,"445":1}}],["渐进式升级",{"2":{"285":1}}],["渐进式增强",{"2":{"98":1}}],["渐进式",{"2":{"34":1,"339":1,"786":1}}],["淡化",{"2":{"706":1}}],["堆叠图表",{"2":{"706":1}}],["堆人力",{"0":{"378":1}}],["力导向布局",{"2":{"706":1}}],["力导向图",{"2":{"706":1}}],["符号引用父选择器",{"2":{"958":1}}],["符号断行检查",{"2":{"790":1}}],["符号",{"2":{"790":3}}],["符号编码",{"2":{"706":1}}],["符合律诗",{"2":{"507":1,"508":1}}],["符合预期",{"2":{"499":1}}],["符合奥卡姆剃刀的",{"2":{"188":1}}],["符合极简与高效的技术审美",{"2":{"85":1}}],["轴",{"2":{"706":1}}],["角度轴",{"2":{"706":2}}],["角色多元化的社会",{"2":{"1034":1}}],["角色让我们关注身体",{"2":{"1006":1}}],["角色动画",{"2":{"735":1}}],["角色专业化分工",{"2":{"535":1}}],["角色对话出海竞争力强",{"2":{"512":1}}],["角色规范",{"2":{"504":1,"506":1}}],["角色设定与物料生成",{"0":{"499":1}}],["角色任务",{"2":{"494":1}}],["角色扮演",{"2":{"437":1,"512":1,"522":1}}],["角色定位",{"2":{"435":1,"436":1,"437":1,"438":1,"439":1}}],["角色",{"2":{"426":1,"918":1,"933":1}}],["角色的超级个体",{"2":{"361":1}}],["角色界定",{"2":{"170":1}}],["屏幕阅读器支持",{"2":{"706":1}}],["屏蔽底层差异",{"2":{"812":1}}],["屏蔽",{"2":{"699":1}}],["悬停数据提示",{"2":{"706":1}}],["滚动联动",{"2":{"834":1}}],["滚动观察器",{"2":{"822":1}}],["滚动位置→动画时间的映射",{"2":{"819":1}}],["滚动驱动",{"2":{"814":1,"819":1}}],["滚动",{"2":{"706":1}}],["坐标轴",{"2":{"763":1}}],["坐标轴指示器",{"2":{"706":1}}],["坐标轴组件",{"2":{"706":1}}],["坐标系是",{"2":{"714":1}}],["坐标系系统",{"0":{"714":1}}],["坐标系接口",{"2":{"706":1}}],["坐标系抽象层",{"2":{"706":1}}],["坐标系绑定",{"2":{"706":1}}],["坐标系统绑定",{"2":{"706":1}}],["坐标系管理器",{"2":{"706":1}}],["坐标系",{"2":{"704":1,"709":1,"711":1}}],["象形柱图",{"2":{"706":1}}],["涟漪散点图",{"2":{"706":1}}],["旭日图",{"2":{"706":1}}],["旭日等",{"2":{"701":1}}],["仪表盘",{"2":{"706":1}}],["仪表盘等",{"2":{"639":1}}],["漏斗图",{"2":{"706":1}}],["漏洞",{"2":{"586":1,"587":1}}],["漏洞分类",{"2":{"586":1}}],["箱线图",{"2":{"706":1}}],["气泡共享逻辑",{"2":{"790":1}}],["气泡排版逻辑",{"2":{"790":1}}],["气泡排版",{"2":{"790":1}}],["气泡图",{"2":{"706":1}}],["气质",{"2":{"507":1}}],["序数元数据",{"2":{"706":1}}],["序列化",{"2":{"256":1,"777":1,"918":1}}],["序列化后的渲染结果",{"2":{"61":1}}],["索引页",{"2":{"790":1}}],["索引缓冲",{"2":{"766":1}}],["索引等",{"2":{"766":1}}],["索引管理",{"2":{"706":1}}],["索引所有坐标系实例",{"2":{"706":1}}],["笛卡尔坐标映射",{"2":{"706":1}}],["笛卡尔坐标系",{"2":{"706":1}}],["笛卡尔",{"2":{"701":1}}],["桑基图",{"2":{"706":1}}],["桑基",{"2":{"701":1}}],["散点布局",{"2":{"706":1}}],["散点图",{"2":{"706":1}}],["散点",{"2":{"701":1}}],["饼图无坐标系",{"2":{"714":1}}],["饼图",{"2":{"700":1,"701":1,"706":1}}],["框选高亮",{"2":{"715":1}}],["框选组件",{"2":{"706":1}}],["框选",{"2":{"699":1}}],["框架层面的组件",{"2":{"970":1}}],["框架自带的",{"2":{"970":1}}],["框架自动渲染",{"2":{"640":1}}],["框架规范",{"2":{"965":1}}],["框架级",{"2":{"965":1}}],["框架集成层",{"2":{"906":1,"907":1}}],["框架无关状态管理",{"2":{"917":1}}],["框架无关状态管理核心",{"2":{"917":1}}],["框架无关",{"2":{"813":1,"935":1}}],["框架的核心机制",{"2":{"545":1}}],["框架的核心机制与实战落地",{"2":{"545":1}}],["框架的本质是",{"2":{"54":1}}],["框架与模板",{"2":{"504":1}}],["框架与结构化",{"2":{"503":1}}],["框架定位",{"2":{"344":1}}],["框架下的",{"2":{"113":1}}],["框架",{"0":{"59":1,"339":1},"2":{"59":1,"192":1,"340":1,"344":3,"353":1,"419":1,"553":1,"846":1,"956":1,"987":1}}],["框架作者不需要从零实现一个编程语言",{"2":{"54":1}}],["框架和一份",{"2":{"22":1}}],["采样像素颜色来定位命中的节点",{"2":{"683":1}}],["采用的处理方式自然也不同",{"2":{"1034":1}}],["采用的模块化规范",{"2":{"298":1}}],["采用观察者模式",{"2":{"944":1}}],["采用协议驱动的分层架构模式",{"2":{"938":1}}],["采用装饰器模式",{"2":{"920":1}}],["采用工具循环模式",{"2":{"918":1}}],["采用工厂模式根据",{"2":{"947":1}}],["采用工厂模式",{"2":{"916":1}}],["采用多层防御设计",{"2":{"860":1}}],["采用注册中心模式",{"2":{"859":1}}],["采用桥接模式",{"2":{"858":1}}],["采用两阶段分离",{"2":{"788":1}}],["采用组合模式",{"2":{"769":1}}],["采用组件化架构",{"2":{"339":2}}],["采用缓存策略",{"2":{"743":1}}],["采用策略模式",{"2":{"741":1,"948":1}}],["采用插件化分层管道架构",{"2":{"704":1}}],["采用模板方法模式",{"2":{"683":1,"915":1}}],["采用分层适配器架构",{"2":{"906":1}}],["采用分层插件化架构",{"2":{"761":1,"848":1}}],["采用分层+插件化架构",{"2":{"733":1}}],["采用分层图形树架构",{"2":{"675":1}}],["采用分层",{"2":{"645":1}}],["采用了与",{"2":{"470":1}}],["采用智能的三级系统",{"2":{"443":1}}],["采用动态人机交互界面和无预制有限域的任务",{"2":{"403":1}}],["采用自研的",{"2":{"353":1}}],["采用指数退避避免瞬时并发压力",{"2":{"150":1}}],["采用同步的请求",{"2":{"102":1}}],["采用",{"2":{"47":1,"135":1,"314":1,"342":2,"387":1,"414":1,"817":1,"942":1,"946":1,"965":3,"978":1,"987":1,"988":1}}],["脏标记系统",{"2":{"682":1}}],["阴影贴图",{"2":{"763":1}}],["阴影接收",{"2":{"763":1}}],["阴影基础",{"2":{"763":1}}],["阴影处理",{"2":{"683":1}}],["阴影等样式处理",{"2":{"683":1}}],["阴影等样式",{"2":{"680":1}}],["阴影样式",{"2":{"677":1}}],["触屏优化",{"2":{"719":1}}],["触摸交互到动画",{"2":{"822":1}}],["触摸拖拽",{"2":{"819":1}}],["触摸",{"2":{"680":1}}],["触发测试提示词",{"2":{"980":1}}],["触发系统",{"2":{"980":1}}],["触发规则",{"2":{"978":1}}],["触发同步回流",{"2":{"785":1}}],["触发同步布局回流",{"2":{"784":1}}],["触发代码生成",{"2":{"765":1}}],["触发图表交互",{"2":{"719":1}}],["触发调度管道依次执行",{"2":{"708":1}}],["触发",{"2":{"682":2,"827":3,"941":1,"979":1,"980":2,"992":1}}],["触发动作",{"2":{"659":1}}],["触发后自动执行",{"2":{"590":1}}],["触发场景",{"2":{"587":1}}],["触发关键词列表",{"2":{"586":1}}],["触发方式",{"2":{"585":1,"592":1}}],["触发条件",{"2":{"447":1,"450":1,"586":1}}],["触发自顶向下的重新渲染",{"2":{"175":1}}],["触发回调",{"2":{"141":1}}],["触发的时机",{"2":{"138":1}}],["触发之前执行",{"2":{"96":1}}],["触发乐观更新",{"2":{"88":1}}],["触发事件选择",{"2":{"17":1}}],["触发构建工具重新预渲染静态页面",{"2":{"9":1}}],["鼠标交互修饰器",{"2":{"735":1}}],["鼠标",{"2":{"680":1,"819":1}}],["舞台契约",{"2":{"692":1}}],["舞台",{"2":{"679":1}}],["舞台根节点与事件中枢",{"0":{"684":1}}],["舞台根节点",{"2":{"677":1}}],["许可证",{"2":{"677":1,"699":1,"706":1,"728":1,"735":1,"790":1,"851":1,"882":1,"939":1,"973":1}}],["许多经典在当年都是锋芒毕露",{"2":{"609":1}}],["许多团队在项目初期享受着组件化带来的快感",{"2":{"169":1}}],["曝光过度",{"2":{"677":1}}],["色调滤镜",{"2":{"735":1}}],["色调等",{"2":{"730":1}}],["色调分离",{"2":{"677":1}}],["色阶滤镜",{"2":{"735":1}}],["色阶",{"2":{"730":1,"763":1,"962":1}}],["色彩空间",{"2":{"763":1}}],["色彩空间转换",{"2":{"763":1}}],["色彩空间调整",{"2":{"677":2}}],["色彩对比‌",{"2":{"505":1}}],["噪声信息越来越多",{"2":{"1007":1}}],["噪点",{"2":{"677":1}}],["噪音",{"2":{"576":1}}],["灰度化",{"2":{"677":1}}],["亮度调整",{"2":{"677":1}}],["楔形",{"2":{"677":1}}],["沿路径排列文本",{"2":{"677":1}}],["星形",{"2":{"677":1}}],["环形图",{"2":{"706":1}}],["环形",{"2":{"677":1}}],["环境检测",{"2":{"817":1,"818":1,"819":1}}],["环境贴图",{"2":{"778":1}}],["环境贴图生成",{"2":{"765":1}}],["环境生成",{"2":{"763":1}}],["环境光",{"2":{"763":1}}],["环境光照",{"2":{"758":1}}],["环境要求",{"0":{"665":1,"929":1,"997":1}}],["环境接口契约",{"0":{"662":1}}],["环境覆盖",{"2":{"649":1}}],["环境定义",{"2":{"647":1}}],["环境确认",{"2":{"583":1}}],["环境未就绪",{"2":{"583":1}}],["环境探测",{"2":{"414":1}}],["环境交互",{"2":{"412":1}}],["环境变量注入",{"2":{"649":1}}],["环境变量的",{"0":{"481":1}}],["环境变量类型",{"2":{"274":1}}],["环境变了",{"2":{"402":1}}],["环境适配",{"2":{"313":1}}],["环境和浏览器环境",{"2":{"306":1}}],["环境类型",{"2":{"274":1}}],["环境配置注意点",{"2":{"573":1}}],["环境配置与初始化",{"0":{"479":1},"1":{"480":1,"481":1}}],["环境配置",{"0":{"722":1,"753":1,"780":1,"808":1,"868":1,"954":1},"2":{"214":1,"215":1,"980":1}}],["环境",{"2":{"167":1,"418":1,"763":1,"765":1}}],["环境下共享知识库与对话历史",{"2":{"437":1}}],["环境下表现最佳",{"2":{"342":1}}],["环境下",{"2":{"112":1,"320":1}}],["环境中",{"2":{"57":1,"342":1}}],["六边形等",{"2":{"677":1}}],["六款工具横向对比",{"0":{"562":1}}],["矩阵运算",{"2":{"734":1,"737":1}}],["矩阵坐标系",{"2":{"706":1}}],["矩阵热力图坐标",{"2":{"706":1}}],["矩阵组件",{"2":{"706":1}}],["矩阵",{"2":{"682":1,"701":1,"763":2}}],["矩阵类",{"2":{"677":1}}],["矩形区域光",{"2":{"763":1}}],["矩形树图",{"2":{"706":1}}],["矩形",{"2":{"677":1,"706":1}}],["折线图",{"2":{"706":1}}],["折线",{"2":{"677":1,"700":1}}],["折扣",{"2":{"278":1}}],["椭圆",{"2":{"677":1}}],["箭头",{"2":{"677":1}}],["弧形路径",{"2":{"677":1}}],["帧间隔时间",{"2":{"834":1}}],["帧率",{"2":{"824":1,"834":1}}],["帧持续时间",{"2":{"824":1,"834":1}}],["帧调度",{"2":{"818":1}}],["帧节流判断",{"2":{"824":1}}],["帧节流",{"2":{"814":1,"834":1}}],["帧缓冲拷贝",{"2":{"777":1}}],["帧缓冲纹理",{"2":{"763":1}}],["帧",{"2":{"749":1}}],["帧元素辅助",{"2":{"735":1}}],["帧循环与补间动画",{"2":{"686":1}}],["帧播放",{"2":{"677":1}}],["帧计时",{"2":{"677":1}}],["帧格式进行数据传输",{"2":{"114":1}}],["裁剪上下文",{"2":{"763":1}}],["裁剪组",{"2":{"763":1}}],["裁剪路径修饰器",{"2":{"735":1}}],["裁剪路径",{"2":{"706":1,"737":1,"744":1}}],["裁剪",{"2":{"676":1,"677":2,"738":1,"777":1}}],["绑定到数据模型的特定位置",{"2":{"942":1}}],["绑定到",{"2":{"939":1}}],["绑定驱动动画循环",{"2":{"740":1}}],["绑定事件处理器",{"2":{"719":1}}],["绑定层",{"2":{"684":1}}],["绑定",{"2":{"676":1,"680":1,"704":1,"705":1,"735":1,"917":2,"939":2}}],["绑架",{"2":{"613":1}}],["牺牲了一定底层灵活性",{"2":{"673":1}}],["偏移路径",{"2":{"737":1,"744":1}}],["偏移路径修饰器",{"2":{"735":1}}],["偏移",{"2":{"682":1}}],["偏移的仿射变换矩阵",{"2":{"672":1}}],["偏好轻量方案",{"2":{"341":1}}],["倾向于使用视觉效果命名",{"2":{"962":1}}],["倾斜",{"2":{"672":1,"680":1,"682":1}}],["倾城非有意",{"2":{"505":1}}],["缩略图组件",{"2":{"706":1}}],["缩略图生成",{"2":{"671":1}}],["缩放手柄",{"2":{"677":1}}],["缩放",{"2":{"672":1,"680":2,"682":1,"738":1,"743":1}}],["旋转锚点",{"2":{"677":1}}],["旋转",{"2":{"672":1,"680":2,"682":1,"738":1,"763":1}}],["滤镜等",{"2":{"737":1}}],["滤镜工具",{"2":{"735":1}}],["滤镜效果注册管理器",{"2":{"735":1}}],["滤镜效果实现",{"2":{"735":1}}],["滤镜效果",{"2":{"730":1,"737":1}}],["滤镜系统",{"2":{"730":1}}],["滤镜",{"2":{"693":1,"735":1}}],["滤镜函数",{"2":{"682":1}}],["滤镜函数双模式",{"2":{"672":1}}],["滤镜管线",{"2":{"675":1,"676":1}}],["滤镜管道",{"2":{"672":1,"677":1,"682":2}}],["离散跳变",{"2":{"743":1}}],["离屏渲染",{"2":{"763":1}}],["离屏缓存",{"2":{"676":1}}],["离屏",{"2":{"670":1}}],["离开提示行并暂停",{"2":{"489":1}}],["父子组件嵌套时",{"2":{"961":1}}],["父子路径的级联通知",{"2":{"945":1}}],["父级",{"2":{"834":1}}],["父节点变换",{"2":{"769":1}}],["父",{"2":{"663":1}}],["父组件",{"2":{"653":1}}],["父组件在回调中执行",{"2":{"175":1}}],["父组件通过",{"2":{"175":1}}],["剪贴板复制方法",{"2":{"662":1}}],["剪映生态打通",{"2":{"512":1}}],["张三",{"2":{"655":1}}],["张鑫旭的个人博客",{"2":{"346":1}}],["张鑫旭",{"2":{"346":1}}],["岁",{"2":{"655":2}}],["今年",{"2":{"655":2}}],["今天",{"2":{"457":1}}],["权衡理由",{"2":{"904":1}}],["权衡考量",{"2":{"815":1}}],["权衡",{"2":{"673":1,"759":1}}],["权重",{"2":{"661":1}}],["权重排序插入",{"2":{"652":1}}],["权限与项目配置",{"0":{"593":1},"1":{"594":1,"595":1,"596":1}}],["权限校验缺失提醒",{"2":{"586":1}}],["权限+配置",{"2":{"570":1}}],["权限模式",{"2":{"482":1}}],["权限模式等",{"2":{"482":1}}],["权限隔离",{"2":{"438":1,"570":1}}],["权限被严格限制在特定的",{"2":{"415":1}}],["权限",{"2":{"415":1,"583":1,"592":1}}],["权限控制",{"2":{"275":1,"279":1}}],["叶子节点",{"2":{"649":1}}],["弹簧参数",{"2":{"835":1}}],["弹窗",{"2":{"650":3,"653":1}}],["弹窗状态",{"2":{"647":1}}],["弹性扩容",{"2":{"3":1}}],["递归组件节点渲染",{"2":{"939":1}}],["递归扫描子目录",{"2":{"859":1}}],["递归遍历子节点",{"2":{"946":1}}],["递归遍历",{"2":{"818":1}}],["递归渲染函数",{"2":{"661":1}}],["递归渲染",{"2":{"658":1}}],["递归下降解析",{"2":{"655":1}}],["递归处理子节点",{"2":{"819":1}}],["递归处理",{"2":{"649":1}}],["递归",{"2":{"647":1,"766":1,"946":2}}],["递归解析引擎",{"2":{"646":1,"650":1}}],["化繁为简",{"2":{"1013":1}}],["化繁为简的策略",{"0":{"422":1},"1":{"423":1,"424":1,"425":1}}],["化支持",{"2":{"825":1}}],["化输入字符串",{"2":{"655":1}}],["化",{"2":{"646":1}}],["映射类名与透明度",{"2":{"965":1}}],["映射类",{"2":{"965":1}}],["映射为强类型的枚举接口",{"2":{"965":1}}],["映射数据到数组",{"2":{"719":1}}],["映射",{"2":{"712":1}}],["映射到段",{"2":{"792":1}}],["映射到",{"2":{"645":1}}],["映射规格",{"2":{"179":1}}],["映射规则",{"2":{"85":1}}],["沙箱安全执行",{"2":{"646":1}}],["沙箱",{"2":{"642":1,"655":1}}],["拖拽式组件构建",{"2":{"939":1}}],["拖拽控制器",{"2":{"822":1}}],["拖拽交互",{"2":{"818":1,"819":1}}],["拖拽",{"2":{"814":1,"817":1}}],["拖拽操作的完整事件链",{"0":{"690":1}}],["拖拽位置计算",{"2":{"680":1}}],["拖拽引擎",{"2":{"675":1,"677":1,"679":1}}],["拖拽系统",{"2":{"647":1,"656":1}}],["拖拽构建页面",{"2":{"641":1}}],["拖拽保存的工具型产品",{"2":{"99":1}}],["姓名",{"2":{"640":1,"668":1}}],["爱速搭",{"2":{"640":1}}],["财务",{"2":{"640":1}}],["科技媒体及社区讨论四大领域",{"2":{"632":1}}],["致谢",{"0":{"1003":1}}],["致力于解决信息过载难题",{"2":{"632":1}}],["致命错误",{"2":{"144":1}}],["梳理的概念网络",{"2":{"631":1}}],["梳理调用链并生成文档",{"2":{"568":1}}],["萃取到项目孵化",{"2":{"630":1}}],["孵化流程",{"2":{"629":1}}],["论文阅读",{"2":{"628":1}}],["论文解读四类内容",{"2":{"628":1}}],["论文精读",{"2":{"515":1}}],["潜在坑点",{"2":{"625":1}}],["潜在的性能瓶颈",{"2":{"591":1}}],["果断做减法",{"0":{"624":1}}],["果又减弱因",{"2":{"386":1}}],["果又增强因",{"2":{"386":1}}],["差异分类词汇",{"2":{"790":1}}],["差异分类",{"2":{"790":1}}],["差异",{"2":{"757":1}}],["差异破局",{"0":{"626":1}}],["差距便由此产生",{"2":{"622":1}}],["差着十万八千里",{"2":{"610":1}}],["劣币驱逐良币",{"2":{"620":1}}],["劣势",{"2":{"287":1}}],["仔细扒开源码就会发现",{"2":{"620":1}}],["阻塞点位置",{"2":{"712":1}}],["阻碍多数人的原因通常有三个",{"2":{"617":1}}],["阻断",{"2":{"591":1}}],["举个最常见的例子",{"2":{"617":1}}],["举个经典的机械手表例子",{"2":{"383":1}}],["抓不住机会是因为缺少信息差",{"2":{"616":1}}],["赚钱",{"2":{"617":1}}],["赚钱或成功的模式往往是粗放的",{"2":{"616":1}}],["赚不到钱",{"2":{"616":1}}],["扭曲认知",{"2":{"614":1}}],["故鄉",{"2":{"790":1}}],["故不可脱离现实",{"2":{"614":1}}],["故障排查",{"2":{"449":1}}],["愉快的方式",{"2":{"613":1}}],["竹简到纸张",{"2":{"613":1}}],["油墨的香气",{"2":{"613":1}}],["汲取知识",{"2":{"613":1}}],["陷入对物理媒介的过度迷恋",{"0":{"613":1}}],["陷阱",{"0":{"481":1}}],["鄙夷与哀怨",{"2":{"612":1}}],["伯乐",{"2":{"612":1}}],["静养心神",{"2":{"1025":1}}],["静观其变",{"2":{"620":1}}],["静等着",{"2":{"612":1}}],["静态图片等等",{"2":{"442":1}}],["静态类型",{"2":{"338":1}}],["静态加载",{"2":{"314":1}}],["静态解析与单例",{"0":{"314":1}}],["静态分析更简单",{"2":{"311":1}}],["静态分析",{"2":{"307":1,"759":1}}],["静态成员不能使用泛型参数",{"2":{"261":1}}],["静态检查工具",{"0":{"219":1}}],["静态基线",{"2":{"180":1}}],["静态产物",{"2":{"171":1}}],["静态版本是对渲染行为的锚定",{"2":{"180":1}}],["静态版本应保证组件无副作用",{"2":{"171":1}}],["静态版本",{"2":{"171":1}}],["静态站点不等于",{"2":{"54":1}}],["静态站点生成",{"2":{"30":1,"45":1,"344":2}}],["静态站点生成器",{"0":{"6":1}}],["静态优先",{"2":{"45":1}}],["静态文件",{"2":{"45":1,"763":1}}],["静态文档",{"2":{"6":1}}],["静态",{"2":{"45":1,"58":1,"308":1}}],["静态外壳先到",{"2":{"75":1}}],["静态外壳可缓存",{"2":{"45":1}}],["静态外壳无需或少量水合",{"2":{"45":1}}],["静态外壳每次需渲染",{"2":{"45":1}}],["静态外壳每次请求新渲染",{"2":{"45":1}}],["静态外壳包含完整页面结构",{"2":{"45":1}}],["静态外壳立即返回",{"2":{"45":1}}],["静态外壳实时",{"2":{"45":1}}],["静态外壳",{"2":{"40":1,"41":1}}],["静态部分在服务端预渲染并立即返回",{"2":{"39":1}}],["静态页面可缓存",{"2":{"45":1}}],["静态页面水合",{"2":{"45":1}}],["静态页面",{"2":{"19":1}}],["静态场景",{"2":{"18":1}}],["静态资源",{"2":{"706":1,"790":1,"979":1}}],["静态资源层",{"2":{"274":1}}],["静态资源托管",{"0":{"7":1}}],["静态资源无单点故障",{"2":{"3":1}}],["静态托管",{"2":{"5":1}}],["静态托管免费",{"2":{"3":1}}],["刁难",{"2":{"610":1}}],["讲述的过程会倒逼你",{"2":{"610":1}}],["讲述故事",{"2":{"506":1}}],["讲清楚",{"2":{"610":1}}],["师傅领进门",{"2":{"609":1}}],["针锋相对的论辩性作品",{"2":{"609":1}}],["针对原子类难以描述的复杂场景",{"2":{"968":1}}],["针对具体任务",{"2":{"550":1}}],["针对不同的业务场景",{"2":{"545":1}}],["针对不同复杂度的工作流设计稳健的多",{"2":{"545":1}}],["针对不需要频繁变动的用户数据",{"2":{"87":1}}],["针对用户给定的主题",{"2":{"506":1}}],["针对",{"2":{"470":1,"827":1,"965":1,"967":1,"1000":1}}],["针对这个具体问题写这段具体代码",{"2":{"271":1}}],["针对功能内聚",{"2":{"178":1}}],["刻舟求剑",{"2":{"608":1}}],["刻意统计与调整阶段的阶段也漫谈完了",{"2":{"1038":1}}],["刻意统计并调整时间",{"0":{"1038":1}}],["刻意忽略不重要的事",{"2":{"1036":1}}],["刻意保持你的技术尖锐度",{"2":{"539":1}}],["刻意练习",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1},"2":{"368":1}}],["书生意气",{"2":{"1043":1}}],["书生误国也是这个道理",{"2":{"1030":1}}],["书接上文",{"2":{"1005":1,"1039":1}}],["书本知识只是认识世界的一小部分",{"2":{"614":1}}],["书籍所承载的仅仅是世界知识总量中极小的一部分",{"2":{"614":1}}],["书籍仅承载极少知识",{"2":{"614":1}}],["书籍往往是创作者多年思考",{"2":{"606":1}}],["书面语",{"2":{"606":1}}],["书中的信息因此往往条理清晰",{"2":{"606":1}}],["书中提出了一个极具穿透力的概念",{"2":{"379":1}}],["书中另一个贯穿始终的理念是",{"2":{"378":1}}],["置换身心状态的巨大回报",{"2":{"605":1}}],["睡前屏蔽数字通知等",{"2":{"605":1}}],["睡眠这四个高频生活维度中",{"2":{"605":1}}],["植入微小但杠杆率极高的改变",{"2":{"605":1}}],["饮食微调",{"2":{"1048":1}}],["饮食表",{"2":{"1047":1}}],["饮食调整基本正常执行",{"2":{"1048":1}}],["饮食调整",{"2":{"1046":1,"1047":1}}],["饮食限制时间和饭量",{"2":{"1045":1}}],["饮食",{"2":{"605":1}}],["健康的身体",{"2":{"1034":1}}],["健康这个话题聊的差不多了",{"2":{"1027":1}}],["健康小结",{"0":{"1027":1}}],["健康实践",{"0":{"1026":1}}],["健康有序",{"2":{"1025":1}}],["健康标准简单且易懂",{"2":{"1025":1}}],["健康其实是有标准",{"2":{"1025":1}}],["健康知识学习",{"0":{"1023":1},"1":{"1024":1,"1025":1,"1026":1,"1027":1}}],["健康也在疫情到来的第一年亮起了小红灯",{"2":{"1022":1}}],["健康危机",{"0":{"1022":1}}],["健康检查",{"2":{"860":2,"866":2}}],["健康不再仅仅是",{"2":{"605":1}}],["健康",{"2":{"605":1,"1020":1,"1036":1}}],["健康生活",{"0":{"605":1}}],["健康医护",{"2":{"407":1}}],["附近",{"2":{"604":1}}],["附带学习",{"2":{"531":1}}],["枪炮",{"2":{"604":1}}],["释放战略思考的精力",{"2":{"602":1}}],["释放进一步增长的潜力",{"2":{"387":1}}],["猴子管理法",{"2":{"602":1}}],["冷静",{"2":{"601":1}}],["冷启动",{"2":{"536":1}}],["卓越的组织不仅需要极简的流程与高效的分布式协作",{"2":{"601":1}}],["卓越的产品力不仅关乎功能设计",{"2":{"600":1}}],["卓越的产品嗅觉",{"2":{"365":1}}],["难免会看到社会用各种属性来评判一个人",{"2":{"1049":1}}],["难",{"2":{"1019":1}}],["难而正确",{"2":{"601":1}}],["难以描述的极端伪元素逻辑",{"2":{"971":1}}],["难以管理",{"2":{"957":1}}],["难以应对实务",{"2":{"614":1}}],["难以替代的",{"2":{"568":1}}],["难以在没有人工干预的情况下独立完成跨越数日的长时运行任务",{"2":{"419":1}}],["难以修改",{"2":{"200":1}}],["难以追踪的副作用",{"2":{"169":1}}],["难以精细控制",{"2":{"135":1,"142":1}}],["难以缓存",{"2":{"45":1}}],["盈利才是企业的核心护城河",{"2":{"601":1}}],["盈利自信",{"0":{"379":1},"2":{"379":1}}],["寻宝者思维",{"2":{"598":1}}],["寻找增强回路",{"2":{"1007":1}}],["寻找因果关系",{"2":{"1007":1}}],["寻找高质量的对话",{"2":{"610":1}}],["寻找你的",{"0":{"462":1}}],["寻找有效需求",{"2":{"396":1}}],["寻找",{"0":{"365":1}}],["寻找答案的能力将不再稀缺",{"2":{"358":1}}],["寻找状态的最简表示",{"0":{"172":1},"1":{"173":1,"174":1}}],["踏脚石",{"2":{"598":1}}],["倡导在不确定性中通过",{"2":{"598":1}}],["危险命令",{"2":{"595":1}}],["白名单",{"2":{"594":1}}],["伺机而动",{"2":{"585":1}}],["繁琐的",{"2":{"583":1}}],["占比",{"0":{"967":1,"968":1},"2":{"965":2}}],["占位符接收命令后的额外输入",{"2":{"582":1}}],["占用了新功能开发时间",{"2":{"386":1}}],["坑点",{"2":{"573":1}}],["列出来清单后能降低甚至避免焦虑",{"2":{"1037":1}}],["列出常用命令及说明",{"2":{"573":1}}],["列",{"2":{"650":1}}],["列配置控件",{"2":{"647":1}}],["列表信息",{"2":{"980":1}}],["列表操作",{"2":{"653":1}}],["列表",{"2":{"650":4,"653":1,"948":1,"952":1}}],["列表增删改查",{"2":{"647":1}}],["列表页",{"2":{"639":1}}],["列表无限滚动",{"2":{"342":1}}],["⚡自动",{"2":{"570":1}}],["敏锐地识别并实现那些",{"2":{"1001":1}}],["敏感信息硬编码检查",{"2":{"586":1}}],["敏感信息不上传",{"2":{"570":1}}],["敏捷开发",{"2":{"361":1}}],["敏捷迭代的",{"2":{"344":1}}],["敏捷全栈",{"2":{"342":1}}],["圈选模块",{"2":{"568":1}}],["圈可能转很久",{"2":{"77":1}}],["付费",{"2":{"568":1}}],["付出了多大的工程代价",{"2":{"374":1}}],["粘贴",{"2":{"568":1}}],["补全共享逻辑",{"2":{"851":1}}],["补全生成",{"2":{"851":1}}],["补间管理器",{"2":{"686":1}}],["补间动画契约",{"2":{"692":1}}],["补间动画引擎",{"2":{"679":1}}],["补间动画",{"2":{"672":1,"677":1}}],["补充在底部",{"2":{"971":1}}],["补充阅读",{"2":{"631":1}}],["补充上下文",{"2":{"628":1}}],["补充领域知识",{"2":{"437":1}}],["补齐单测后提交",{"2":{"568":1}}],["私有部署",{"2":{"568":1}}],["私有化",{"2":{"523":1}}],["私有化部署",{"2":{"522":1}}],["浏览网站",{"2":{"870":1}}],["浏览网页",{"2":{"606":1}}],["浏览网页查阅文档",{"2":{"567":1}}],["浏览示例",{"2":{"840":1}}],["浏览器辅助",{"2":{"987":1}}],["浏览器样式重置",{"2":{"939":1}}],["浏览器命令执行流程",{"0":{"862":1}}],["浏览器无法跨域发送",{"2":{"860":1}}],["浏览器页面抽象",{"2":{"856":1,"865":2}}],["浏览器页面的抽象接口",{"2":{"856":1}}],["浏览器操作参考",{"2":{"851":1}}],["浏览器操作步骤",{"2":{"851":1}}],["浏览器扩展",{"2":{"851":1}}],["浏览器工具函数",{"2":{"851":1}}],["浏览器控制模块",{"0":{"858":1},"2":{"851":1,"858":1}}],["浏览器控制层",{"2":{"849":1,"850":1}}],["浏览器通信",{"2":{"846":1}}],["浏览器会话启动器",{"2":{"851":1}}],["浏览器会话",{"2":{"843":1}}],["浏览器测试",{"2":{"840":1}}],["浏览器测试入口",{"2":{"819":1}}],["浏览器dom符号",{"2":{"819":1}}],["浏览器精度快照",{"2":{"790":1}}],["浏览器自动化",{"2":{"790":1,"848":1}}],["浏览器自适应",{"2":{"786":1}}],["浏览器特性检测",{"2":{"735":1}}],["浏览器和",{"2":{"670":1}}],["浏览器插件",{"2":{"515":1}}],["浏览器插件一键抓取",{"2":{"515":1}}],["浏览器引擎特征",{"2":{"805":1}}],["浏览器引擎特征检测",{"2":{"796":1}}],["浏览器引擎",{"2":{"338":1}}],["浏览器的开发者工具中保留了原本清晰的类名",{"2":{"961":1}}],["浏览器的一部分",{"2":{"338":1}}],["浏览器的引擎",{"2":{"338":1}}],["浏览器中实现交互性和动态内容",{"2":{"338":1}}],["浏览器全局",{"2":{"306":1}}],["浏览器异步加载方案",{"0":{"305":1}}],["浏览器兼容性",{"2":{"287":1}}],["浏览器调试器会直接显示原始的",{"2":{"217":1}}],["浏览器原生标准协议",{"2":{"342":1}}],["浏览器原生的词级分词",{"2":{"795":1}}],["浏览器原生的",{"2":{"155":1}}],["浏览器原生提供了",{"2":{"137":1}}],["浏览器原生",{"2":{"135":1,"785":1}}],["浏览器原生支持",{"2":{"134":1,"287":1}}],["浏览器内置",{"2":{"135":1,"142":1}}],["浏览器对同一域名的并发长连接限制通常只有",{"2":{"112":1}}],["浏览器收到数据流后",{"2":{"74":1}}],["浏览器端渲染辅助脚本",{"2":{"980":1}}],["浏览器端页面",{"2":{"790":1}}],["浏览器端实时更新",{"2":{"122":1}}],["浏览器端",{"2":{"63":1,"677":1}}],["浏览器拿到服务端返回的",{"2":{"58":1}}],["浏览器接收到的",{"2":{"53":1}}],["浏览器解析",{"2":{"45":1}}],["浏览器显示页面框架",{"2":{"40":1}}],["浏览器逐步消费并替换对应的占位内容",{"2":{"40":1}}],["浏览器立即呈现页面框架",{"2":{"40":1}}],["浏览器直接显示页面内容",{"2":{"27":1}}],["浏览器直接显示内容",{"2":{"27":1}}],["浏览器可以直接呈现",{"2":{"26":1}}],["浏览器执行",{"2":{"23":1,"45":1}}],["浏览器下载",{"2":{"23":1}}],["浏览器",{"2":{"21":1,"102":1,"112":1,"122":1,"308":1,"320":1,"672":1,"790":2,"817":1,"818":1,"819":1,"826":1,"868":1}}],["副驾驶",{"2":{"567":1}}],["副作用订阅",{"2":{"945":1}}],["副作用边界与可组合性的透彻推演",{"2":{"169":1}}],["副作用的完美闭环",{"2":{"92":1}}],["喜欢",{"2":{"565":1}}],["汇聚了所有子模块的公共",{"2":{"912":1}}],["汇聚社区作品",{"2":{"561":1}}],["汇总所有研究成果",{"2":{"416":1}}],["口号",{"2":{"561":1,"564":1}}],["克隆仓库",{"2":{"780":1}}],["克隆",{"2":{"561":1,"562":1,"763":1}}],["克隆任意网站",{"2":{"561":1}}],["克制",{"0":{"378":1}}],["处零宽断行",{"2":{"797":1}}],["处可选择断行",{"2":{"797":1}}],["处于乘数的位置",{"2":{"557":1}}],["处理它",{"2":{"1037":1}}],["处理所有标准化",{"2":{"971":1}}],["处理兼容前缀",{"2":{"969":1}}],["处理高度定制的第三方",{"2":{"965":1}}],["处理极端定制",{"2":{"965":1}}],["处理一批",{"2":{"951":1}}],["处理字符串",{"2":{"915":1}}],["处理剩余",{"2":{"892":1}}],["处理多字段",{"2":{"892":1}}],["处理分块传输编码",{"2":{"892":1}}],["处理重试逻辑",{"2":{"891":1}}],["处理消息",{"2":{"878":1,"898":1}}],["处理循环回调",{"2":{"827":1}}],["处理绝对",{"2":{"819":1}}],["处理replace",{"2":{"819":1}}],["处理图层父子层级",{"2":{"741":1}}],["处理图层父子层级关系",{"2":{"741":1}}],["处理进入灵感池",{"2":{"631":1}}],["处理广度",{"2":{"628":1}}],["处理团队共识",{"2":{"597":1}}],["处理个人偏好",{"2":{"597":1}}],["处理节点故障",{"2":{"551":1}}],["处理日益复杂的任务",{"2":{"535":1}}],["处理正式输出",{"2":{"488":1}}],["处理思考过程",{"2":{"488":1}}],["处理复杂规划",{"2":{"481":1}}],["处理复杂文件上传的传统全栈或中后台系统",{"2":{"342":1}}],["处理简单逻辑",{"2":{"481":1}}],["处理单一模态",{"2":{"403":1}}],["处理与乐观更新",{"2":{"342":1}}],["处理与后端的通信",{"2":{"274":1}}],["处理全局",{"2":{"342":1}}],["处理模块加载",{"2":{"308":1}}],["处理用户在",{"2":{"951":1}}],["处理用户交互",{"2":{"279":1}}],["处理用例",{"2":{"279":1}}],["处理下单流程",{"2":{"278":1}}],["处理请求",{"2":{"275":1,"934":1}}],["处理权限控制与代码分割",{"2":{"274":1}}],["处理继承体系的场景",{"2":{"270":1}}],["处理操作结果",{"2":{"262":1}}],["处理中",{"2":{"159":1,"162":1}}],["处理令牌失效等致命错误",{"2":{"147":1}}],["处理最后一行",{"2":{"143":1}}],["处理跨块边界的行分割问题",{"2":{"143":1}}],["处理心跳保活方面的额外资源损耗",{"2":{"131":1}}],["处理",{"2":{"80":1,"87":1,"126":1,"203":1,"275":1,"279":1,"342":1,"405":1,"436":1,"447":1,"735":1,"785":1,"797":1,"827":2,"828":2,"851":1,"855":1,"892":2}}],["处理竞态条件",{"2":{"68":1}}],["处理数据",{"2":{"45":1}}],["处理后端逻辑",{"2":{"8":1}}],["乃至",{"2":{"555":1}}],["困于实现",{"0":{"555":1}}],["困境",{"2":{"536":1}}],["爬虫",{"2":{"553":1}}],["爬虫抓不到内容",{"2":{"45":1}}],["偶尔还能写点",{"2":{"553":1}}],["物理弹簧缓动",{"2":{"819":1}}],["物理材质",{"2":{"771":1}}],["物理集成",{"2":{"763":1}}],["物理",{"2":{"763":1}}],["物理渲染",{"2":{"758":1}}],["物理式的拼接",{"2":{"553":1}}],["物流单号",{"2":{"200":1}}],["右手用",{"2":{"553":1}}],["努力提高自身的基础概率",{"2":{"1016":1}}],["努力",{"2":{"553":1}}],["脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单",{"2":{"553":1}}],["脑力拆解",{"2":{"416":1}}],["焦虑感",{"2":{"1036":1}}],["焦虑",{"2":{"1029":1}}],["焦虑是本能",{"2":{"552":1}}],["焦点聚焦时自动刷新",{"2":{"342":1}}],["算法工程师无需精通",{"2":{"963":1}}],["算法",{"2":{"677":1,"706":1}}],["算法和营销上都达到专家的标准",{"2":{"458":1}}],["算力",{"2":{"551":1}}],["算力与模型的重工业底座",{"0":{"551":1}}],["肉眼看效果",{"2":{"550":1}}],["摒弃",{"2":{"550":1}}],["敢于设计",{"0":{"555":1}}],["敢于在非核心功能上使用",{"2":{"365":1}}],["敢用",{"2":{"550":1}}],["截然不同的思路",{"2":{"962":1}}],["截断与摘要",{"2":{"546":1}}],["截屏比对",{"2":{"706":1}}],["截屏",{"2":{"372":1}}],["熟悉数据压缩的读者应该知道这个原理",{"2":{"1015":1}}],["熟悉并掌握如",{"2":{"545":1}}],["熟练运用",{"2":{"558":1}}],["熟练工",{"2":{"558":1}}],["熟练记忆",{"2":{"555":1}}],["熟练使用",{"2":{"550":1}}],["熟练引入",{"2":{"550":1}}],["熟练应用",{"2":{"545":1}}],["熟练掌握传统架构体系",{"2":{"542":1}}],["熟练掌握",{"2":{"293":1,"551":1}}],["机读状态",{"2":{"790":1}}],["机械落地但缺乏方向",{"2":{"622":1}}],["机器执行",{"2":{"539":1}}],["机制上仍有提升空间",{"2":{"476":1}}],["机制重修清单",{"2":{"432":1}}],["机制对循环依赖有更好的容忍度",{"2":{"315":1}}],["机制以复用底层",{"2":{"103":1}}],["机制",{"2":{"77":1,"107":1,"110":1,"427":1,"590":1,"947":1}}],["改变下生活方式",{"2":{"1043":1}}],["改变之前需要多思考",{"2":{"1042":1}}],["改变也就很可能夭折",{"2":{"1037":1}}],["改变图表尺寸",{"2":{"719":1}}],["改编",{"2":{"989":1}}],["改进",{"2":{"974":1}}],["改进错误处理",{"2":{"331":1}}],["改写选择器",{"2":{"965":1}}],["改写类名",{"2":{"965":1}}],["改",{"2":{"640":1}}],["改造",{"2":{"565":1}}],["改了什么",{"2":{"537":1}}],["融入",{"2":{"536":1}}],["融合通义千问大模型",{"2":{"518":1}}],["融合",{"2":{"515":1}}],["融合腾讯搜索与知识图谱",{"2":{"512":1}}],["融合智能问答",{"2":{"511":1}}],["融合古典美人元素",{"2":{"505":1}}],["诊断工具",{"2":{"851":1}}],["诊断知识盲区",{"2":{"628":1}}],["诊断",{"2":{"535":1,"970":1,"1027":1}}],["诊断和报告选项",{"2":{"203":1}}],["习惯和爱好不是凭空来的",{"2":{"1029":1}}],["习惯",{"2":{"533":1}}],["聪明但危险",{"2":{"533":1}}],["逆向工程能力",{"2":{"533":1}}],["尝试把一些别的领域或事务的经验迁移",{"2":{"1047":1}}],["尝试实践",{"2":{"1043":1}}],["尝试拆解分析出影响事物的本质原因",{"2":{"1042":1}}],["尝试改变生活方式",{"2":{"1025":1}}],["尝试向内探索",{"2":{"1019":1}}],["尝试去寻找答案",{"2":{"1005":1}}],["尝试将书中的一些知识用到工作和生活中",{"2":{"1025":1}}],["尝试将自己的想法转化为",{"2":{"1000":1}}],["尝试将sdd",{"2":{"1000":1}}],["尝试提取完整的",{"2":{"947":1}}],["尝试用产品",{"2":{"552":1}}],["尝试在完全不求助",{"2":{"531":1}}],["尝试重建它",{"2":{"374":1}}],["挑选一个核心逻辑块",{"2":{"531":1}}],["挑战与生存指南",{"0":{"315":1}}],["挑战",{"2":{"125":1,"283":1}}],["趋势下能得到缓解",{"2":{"1041":1}}],["趋势与机会",{"2":{"632":1}}],["趋势日益明显",{"2":{"529":1}}],["趋利避害",{"2":{"426":1}}],["太阳光",{"2":{"763":1}}],["太麻烦",{"2":{"528":1}}],["太低",{"2":{"528":1}}],["太复杂",{"2":{"366":1}}],["介绍文档",{"2":{"939":1}}],["介绍完五种渲染方案",{"2":{"48":1}}],["介入后",{"2":{"527":1}}],["疏于维护的内部工具",{"2":{"527":1}}],["盯准任务构成",{"0":{"526":1},"1":{"527":1,"528":1,"529":1}}],["英语即编程语言",{"2":{"532":1}}],["英语",{"2":{"525":1,"530":1,"790":1}}],["英文项目主文档",{"2":{"819":1}}],["英文项目说明文档",{"2":{"677":1,"735":1}}],["英文处理",{"2":{"519":1}}],["英文",{"2":{"518":1,"763":1,"851":1,"882":1,"939":1}}],["英文技术文档检索",{"2":{"518":1}}],["英文为主",{"2":{"510":1,"523":1}}],["曾经需要资深工程师耗费数小时",{"2":{"527":1}}],["曾经",{"2":{"525":1}}],["曾是标配",{"2":{"335":1}}],["曾是组织代码的主力",{"2":{"320":1}}],["究竟发生了怎样的质变",{"2":{"525":1}}],["备选方案及其权衡",{"2":{"994":1}}],["备用走低成本模型",{"2":{"523":1}}],["备注说明",{"2":{"472":1}}],["跑起来",{"2":{"523":1}}],["跑",{"2":{"523":1}}],["跑偏",{"2":{"509":1}}],["充分利用任务之间的关系",{"2":{"1017":1}}],["充分利用",{"2":{"874":1}}],["充值按量消耗",{"2":{"523":1}}],["充当你的",{"2":{"375":1}}],["充当",{"2":{"170":2}}],["硅基流动上配置",{"2":{"523":1}}],["硅基流动",{"2":{"523":4}}],["硅基流动等部署或调用",{"2":{"519":1}}],["训练完成后模型能够完成一些特定的任务",{"2":{"1017":1}}],["训练时长",{"2":{"523":1}}],["训练能力",{"2":{"523":1}}],["训练出来的产物",{"2":{"360":1}}],["芯片的超高速推理平台",{"2":{"523":1}}],["额外水平",{"2":{"805":1}}],["额外宽度",{"2":{"799":1}}],["额外属性注入",{"2":{"692":1}}],["额外说明",{"2":{"494":2}}],["额度",{"2":{"522":1}}],["涵盖了场景图更新",{"2":{"774":1}}],["涵盖折线",{"2":{"701":1}}],["涵盖学术论文",{"2":{"632":1}}],["涵盖",{"2":{"522":1}}],["涵盖文本",{"2":{"512":1}}],["摘要提取还是打标签",{"2":{"547":1}}],["摘要",{"2":{"521":1}}],["摘要区域",{"2":{"518":1}}],["眼花缭乱后随便选一个",{"2":{"519":1}}],["养成点击答案中的来源链接核实关键数据的习惯",{"2":{"518":1}}],["风口",{"2":{"620":1}}],["风险信号",{"2":{"632":1}}],["风险",{"2":{"518":1}}],["风格和交互规范",{"2":{"639":1}}],["风格化润色",{"2":{"491":1}}],["风格",{"2":{"203":1,"573":1,"939":1}}],["风格解析",{"2":{"203":1}}],["秘塔",{"2":{"518":1}}],["秘塔深度研究",{"2":{"518":2}}],["秘塔搜索",{"2":{"518":4}}],["夸克",{"2":{"518":4}}],["告别长串的嵌套三元运算符",{"2":{"964":1}}],["告别",{"2":{"515":1}}],["告诉编译器返回",{"2":{"231":1}}],["告诉",{"2":{"88":1}}],["帖子一键保存",{"2":{"515":1}}],["装好",{"2":{"515":1}}],["装饰器模式",{"2":{"734":1}}],["装饰器模式的组件注册与分发机制",{"2":{"652":1}}],["装饰器调用",{"2":{"652":1}}],["装饰器注册渲染器时的配置接口",{"2":{"661":1}}],["装饰器注册渲染器",{"2":{"652":1}}],["装饰器注册自定义渲染器",{"2":{"641":1}}],["装饰器",{"2":{"153":1,"742":1,"910":1}}],["装饰器期望返回",{"2":{"153":1}}],["装饰器和",{"2":{"153":1}}],["碎片清单是另外两个清单的主要输入",{"2":{"1037":1}}],["碎片清单",{"2":{"1037":2,"1040":1}}],["碎片化",{"2":{"812":1,"901":1}}],["碎片化或难以用语言明确表达的知识",{"2":{"614":1}}],["碎片知识收集",{"2":{"515":1}}],["碎片信息收集",{"2":{"515":1}}],["别的方面比较懒",{"2":{"1022":1}}],["别人越愿意和你合作",{"2":{"1007":2}}],["别名列表",{"2":{"661":1}}],["别名注册",{"2":{"652":1}}],["别让信息躺在那里吃灰",{"2":{"626":1}}],["别忘了点",{"2":{"515":1}}],["别急",{"2":{"494":1}}],["培训内容归档",{"2":{"515":1}}],["培养健康意识",{"2":{"1022":1}}],["培养经济直觉",{"2":{"400":1}}],["培养",{"0":{"370":1,"400":1}}],["培养非共识的",{"0":{"359":1}}],["润色",{"2":{"515":1}}],["播放速率",{"2":{"824":2,"834":1}}],["播放速度",{"2":{"738":1,"834":1}}],["播放控制",{"2":{"763":1}}],["播放器核心源代码目录",{"2":{"735":1}}],["播放动画",{"2":{"366":1}}],["播客式",{"2":{"515":1}}],["播客式复习",{"2":{"515":1}}],["播客转文字",{"2":{"515":1}}],["课程笔记",{"2":{"515":1,"628":1}}],["课程复习",{"2":{"515":1}}],["笔记状态模型",{"2":{"790":1}}],["笔记反哺",{"2":{"631":1}}],["笔记内嵌",{"2":{"515":1}}],["笔记+协作",{"2":{"515":1}}],["笔者感觉自己属于转变比较慢的一批人",{"2":{"1049":1}}],["笔者知道自己不可能达到那种高度",{"2":{"1043":1}}],["笔者业余也算是读了一定的书",{"2":{"1043":1}}],["笔者业余时间没少在由几个老伙计组成的社群中",{"2":{"1041":1}}],["笔者的答案是",{"2":{"1043":1}}],["笔者个人认为",{"2":{"1041":1}}],["笔者觉得有以下几个要点需要注意",{"2":{"1040":1}}],["笔者觉得两个原因都有",{"2":{"1026":1}}],["笔者不敢说自己在疫情期间很好地适应了混合工作制",{"2":{"1040":1}}],["笔者不但想在工作方面多做些正确的事",{"2":{"1034":1}}],["笔者认为思变不能只",{"2":{"1042":1}}],["笔者认为",{"2":{"1039":1}}],["笔者认为微信读书推出的年度报告产品已不足以总结自己在阅读方面的全貌",{"2":{"1031":1}}],["笔者要漫谈的最后一个话题就是混合工作制",{"2":{"1039":1}}],["笔者结合准则和自己在第一",{"2":{"1038":1}}],["笔者只有一个主要用来管理工作相关事务的清单",{"2":{"1037":1}}],["笔者相信",{"2":{"1034":1}}],["笔者有机会基于遇到的问题",{"2":{"1034":1}}],["笔者曾试图分析过这个现象",{"2":{"1034":1}}],["笔者坚信",{"2":{"1032":1}}],["笔者希望能继续向着",{"2":{"1032":1}}],["笔者希望自己可以结合",{"2":{"1029":1}}],["笔者再次坚信",{"2":{"1031":1}}],["笔者依旧会买一些纸质书来看",{"2":{"1031":1}}],["笔者会结合读过的",{"2":{"1029":1}}],["笔者之前在大学时看过一些毛爷爷的相关书和电视剧后很膜拜",{"2":{"1043":1}}],["笔者之前在这方面做的也特别少",{"2":{"1026":1}}],["笔者之前主动跟人交流的动力不大",{"2":{"1029":1}}],["笔者才调整了实践思路",{"2":{"1026":1}}],["笔者现在也能自己做出",{"2":{"1026":1}}],["笔者花费了",{"2":{"1026":1}}],["笔者还是决定在第三阶段试试一段时间",{"2":{"1046":1}}],["笔者还拜读了毛教员在青年时期写下的",{"2":{"1025":1}}],["笔者还真的刻意梳理过",{"2":{"1011":1}}],["笔者寻找方法的主要途径是",{"2":{"1023":1}}],["笔者肯定也不例外",{"2":{"1020":1}}],["笔者基本没有怎么出过远门",{"2":{"1019":1}}],["笔者决定借助开放平台来继续完成一篇复盘总结文章",{"2":{"1019":1}}],["笔者这三年也在疫情影响的基础上",{"2":{"1019":1}}],["笔者这里不去谈国家或公司会不会在疫情后落地混合工作制",{"2":{"1041":1}}],["笔者这里依旧沿用了时间管理中提到的三个清单",{"2":{"1040":1}}],["笔者这里依旧把",{"2":{"1013":1}}],["笔者这里给出统计与调整示意如下",{"2":{"1038":1}}],["笔者这里只阐述下主要实践思路",{"2":{"1026":1}}],["笔者这里只提一个人",{"2":{"1013":1}}],["笔者这里也不好说看法是否对",{"2":{"1018":1}}],["笔者这里就不做过多赘述",{"2":{"1009":1}}],["笔者就没有继续写软文了",{"2":{"1019":1}}],["笔者就重新学起了数学",{"2":{"1011":1}}],["笔者也写不出一篇将多个话题串联起来的长文",{"2":{"1042":1}}],["笔者也慢慢变得敢于决断",{"2":{"1037":1}}],["笔者也会努力继续深入学习",{"2":{"1018":1}}],["笔者也认为",{"2":{"1013":1}}],["笔者阐述这个",{"2":{"1016":1}}],["笔者和朋友也不例外",{"2":{"1016":1}}],["笔者逐渐发现自己在底层原理方面的抽象理解能力不是一般的薄弱",{"2":{"1011":1}}],["笔者是一个比较喜欢阅读的人",{"2":{"1008":1}}],["笔者貌似找到了一部分答案",{"2":{"1006":1}}],["笔者开始质疑起了",{"2":{"1005":1}}],["笔者又是近一年没有向外输出软文了",{"2":{"1005":1}}],["笔者作为社会中的普通一员",{"2":{"1005":1}}],["笔者思考出了一个更具现代感的全栈价值公式",{"2":{"554":1}}],["笔者在第二阶段时还属于身体管理小白",{"2":{"1046":1}}],["笔者在落地上述几个话题的改变时",{"2":{"1042":1}}],["笔者在娱乐的时候刚好看到有个",{"2":{"1038":1}}],["笔者在读书方面体验了以下三种方式",{"2":{"1030":1}}],["笔者在这一阶段还挺觉得有成就感的",{"2":{"1038":1}}],["笔者在这个话题的最后简单分享两个自己学到的",{"2":{"1027":1}}],["笔者在这方面有一定的嗜好",{"2":{"1020":1}}],["笔者在这里保证不会引入一些复杂的公式",{"2":{"1010":1}}],["笔者在",{"2":{"1016":1}}],["笔者在年轻时也不晓得这个道理",{"2":{"1007":1}}],["笔者在看书",{"2":{"1005":1}}],["笔者在为个人博客引入智能化运营能力",{"2":{"477":1}}],["笔者在杭州良渚参加了一场",{"2":{"457":1}}],["笔者最大的感受是",{"2":{"357":1}}],["笔者将从产品交互",{"2":{"348":1}}],["头部",{"2":{"874":1,"889":2}}],["头部开销沉重",{"2":{"103":1}}],["头脑风暴技能",{"0":{"987":1}}],["头脑风暴",{"2":{"980":1}}],["头脑风暴与大纲生成",{"2":{"515":1}}],["头脑风暴和自动分类归档",{"2":{"515":1}}],["堪称当下最强的个人学习与知识整合工具",{"2":{"515":1}}],["堪称负载均衡器的",{"2":{"117":1}}],["听起来在一定时间内或许不会有问题",{"2":{"1046":1}}],["听",{"2":{"1008":1}}],["听播客",{"2":{"606":1}}],["听着学",{"2":{"515":1}}],["听风",{"2":{"507":1}}],["办公协作场景",{"2":{"512":1}}],["办公场景",{"2":{"511":1}}],["抖音场景集成",{"2":{"512":1}}],["钉钉生态深度集成",{"2":{"522":1}}],["钉钉",{"2":{"512":1,"522":1}}],["法线贴图",{"2":{"778":1}}],["法线贴图等",{"2":{"763":1}}],["法线",{"2":{"766":1}}],["法线可视化",{"2":{"763":1}}],["法律文件分析",{"2":{"547":1}}],["法律",{"2":{"522":1}}],["法律合同分析",{"2":{"512":1}}],["法规检索",{"2":{"518":1}}],["法规",{"2":{"400":1}}],["陪伴",{"2":{"512":1,"522":1}}],["陪练",{"2":{"375":1}}],["腾讯生态集成",{"2":{"512":1}}],["腾讯文档",{"2":{"512":1}}],["腾讯元宝",{"2":{"512":1}}],["腾讯推出的元宝",{"2":{"512":1}}],["腾讯云",{"2":{"7":1}}],["研发活跃",{"2":{"512":1}}],["研究日志",{"2":{"790":1}}],["研究数据",{"2":{"790":1}}],["研究还揭示了一个引人注目的现象",{"2":{"529":1}}],["研究三档",{"2":{"518":1}}],["研究三种检索深度",{"2":{"518":1}}],["研究辅助",{"2":{"511":1,"521":1}}],["研究笔记",{"2":{"475":1}}],["研究笔记产出",{"2":{"474":1}}],["研究报告产出",{"2":{"474":1}}],["研究员写的",{"2":{"1005":1}}],["研究员也能独立搭建用于实验的内部管理后台",{"2":{"529":1}}],["研究员们并行深入互联网寻找具体数字",{"2":{"474":1}}],["研究员的数据优先策略",{"2":{"472":1}}],["研究员收集的量化数据",{"2":{"471":1}}],["研究员",{"2":{"416":1,"471":1}}],["研究性",{"2":{"406":1}}],["研究者得以专注于核心创新结论",{"2":{"406":1}}],["🔗",{"2":{"1004":1}}],["📮",{"2":{"1004":1}}],["💬",{"2":{"1004":1}}],["💬隔离",{"2":{"570":1}}],["🛑",{"2":{"965":2}}],["🚀‎",{"2":{"809":1}}],["🟢",{"2":{"591":1}}],["🟡",{"2":{"591":1}}],["🔴",{"2":{"591":1}}],["📌",{"2":{"515":1,"518":1,"523":1}}],["💡",{"2":{"511":1,"512":1,"562":1,"565":1,"965":3}}],["🔑",{"2":{"511":1,"512":1}}],["📖",{"2":{"156":1}}],["幽默对话风格和强大知识推理能力",{"2":{"511":1}}],["答疑",{"2":{"511":1}}],["答案相关性",{"2":{"550":1}}],["答案引用透明",{"2":{"518":1}}],["答案以",{"2":{"518":1}}],["答案生成器",{"2":{"492":1}}],["答案是否附有来源链接",{"2":{"517":1}}],["答案是",{"2":{"387":1}}],["答案",{"2":{"354":1}}],["答案的算力成本极高",{"2":{"354":1}}],["国家都能基于现状做出追赶发达国家到哪种程度的规划",{"2":{"1043":1}}],["国际化语言标识",{"2":{"719":1}}],["国际化语言包",{"2":{"647":1}}],["国际化文件发布目录",{"2":{"706":1}}],["国际化构建脚本",{"2":{"706":1}}],["国际化源文件",{"2":{"706":1}}],["国际化",{"2":{"647":1,"706":1}}],["国际化系统",{"2":{"647":1}}],["国际化基础设施",{"2":{"645":1}}],["国际开发者首选",{"2":{"523":1}}],["国际顶尖模型",{"0":{"521":1},"2":{"519":1}}],["国产免费",{"2":{"565":1}}],["国产优秀模型",{"2":{"519":1}}],["国产模型",{"2":{"519":1}}],["国内阅读app",{"2":{"1031":1}}],["国内自主支持",{"2":{"564":1}}],["国内出品的",{"2":{"564":1}}],["国内开发者强烈建议先注册",{"2":{"523":1}}],["国内开发者首选硅基流动",{"2":{"523":1}}],["国内聚合推理",{"2":{"523":1}}],["国内可用",{"2":{"523":1}}],["国内直连",{"2":{"523":1}}],["国内直连海外模型中转",{"2":{"523":1}}],["国内直连访问稳定",{"2":{"523":1}}],["国内直连稳定",{"2":{"523":1}}],["国内中转",{"2":{"523":1}}],["国内知名的",{"2":{"523":1}}],["国内知识库",{"2":{"515":1}}],["国内首选",{"2":{"523":1}}],["国内最受开发者欢迎的",{"2":{"523":1}}],["国内优秀模型",{"0":{"522":1}}],["国内访问需要特殊网络",{"2":{"519":1}}],["国内政策法规",{"2":{"518":1}}],["国内新一代知识管理与协作平台",{"2":{"515":1}}],["国内领先",{"2":{"512":1}}],["国内",{"0":{"512":1},"2":{"512":6,"518":4,"522":2}}],["国内模型在中文理解",{"2":{"510":1}}],["国外真的有公司在实践",{"2":{"1039":1}}],["国外",{"0":{"511":1},"2":{"518":2,"521":3}}],["落地",{"2":{"1004":1}}],["落地路径的真实探索",{"2":{"1002":1}}],["落地型创业者",{"2":{"625":1}}],["落地运营",{"2":{"553":1}}],["落地执行",{"2":{"408":1}}],["落在心田便开花",{"2":{"508":1}}],["尾部添加一行",{"2":{"581":1}}],["尾字虚实交替",{"2":{"508":1}}],["尾联直抒",{"2":{"508":1}}],["尾联显境界",{"2":{"507":1}}],["尾联以",{"2":{"507":1}}],["尾联",{"2":{"507":1}}],["尾联化用",{"2":{"505":1}}],["尾联点明其倾城之姿浑然天成",{"2":{"505":1}}],["华",{"2":{"508":1}}],["葭",{"2":{"508":1}}],["斜",{"2":{"508":1}}],["纱",{"2":{"508":1}}],["霞",{"2":{"508":1}}],["押",{"2":{"508":1}}],["押韵基本准确",{"2":{"505":2}}],["梦华",{"2":{"508":1}}],["浮动图片绕排",{"2":{"810":1}}],["浮雕效果",{"2":{"677":1}}],["浮光碎",{"2":{"508":1}}],["浮士德",{"2":{"506":1}}],["托微情于微波",{"2":{"508":1}}],["托管数千个开源图像",{"2":{"523":1}}],["托管在我与几个好友共同创建的组织",{"2":{"477":1}}],["托管在我与几位好友共同创建的",{"2":{"467":1}}],["托管以及持续集成",{"2":{"345":1}}],["托管到",{"2":{"20":1}}],["托管平台",{"2":{"11":1}}],["托管静态资源",{"2":{"3":1}}],["呼应赋中",{"2":{"508":1}}],["入缓动控制点",{"2":{"749":1}}],["入门示例",{"2":{"724":1}}],["入梦华",{"2":{"508":1}}],["入口还包括",{"2":{"982":1}}],["入口文件",{"2":{"728":1}}],["入口组件",{"2":{"649":1}}],["入口函数创建",{"2":{"649":1}}],["入口模块",{"2":{"314":1,"751":1}}],["入口",{"2":{"67":1,"523":1,"735":1,"763":1,"765":1,"851":1,"855":1,"882":1,"889":1,"891":1,"939":1}}],["洲滴泪暗喻阻隔",{"2":{"508":1}}],["婉若游龙",{"2":{"508":1}}],["翩若惊鸿",{"2":{"508":1}}],["仰联化用",{"2":{"508":1}}],["仰联展动态",{"2":{"507":1}}],["轻食一份",{"2":{"1045":1,"1047":1}}],["轻松涉足复杂的数据可视化前端开发",{"2":{"529":1}}],["轻纱",{"2":{"508":1}}],["轻量化适合渲染简单",{"2":{"936":1}}],["轻量化形态",{"2":{"542":1}}],["轻量版入口",{"2":{"735":3}}],["轻量核心",{"2":{"733":1}}],["轻量快速",{"2":{"636":1}}],["轻量级的",{"2":{"812":1}}],["轻量级的实时感知",{"0":{"111":1}}],["轻量级任务",{"2":{"528":1}}],["轻量级聚合",{"2":{"344":2}}],["轻量级帧结构",{"2":{"115":1}}],["轻量级",{"2":{"85":1,"100":1}}],["轻量得多",{"2":{"53":1}}],["轻量",{"2":{"20":1,"192":1,"1041":1}}],["轻量无依赖",{"2":{"6":1}}],["夕霞",{"2":{"508":1}}],["恨无良媒通神意",{"2":{"508":1}}],["琼琚摇曳步轻纱",{"2":{"508":1}}],["洛水微波映夕霞",{"2":{"508":1}}],["洛神赋",{"2":{"505":5,"508":4}}],["绘图网格",{"2":{"706":1}}],["绘图解析",{"2":{"647":1}}],["绘制等关键步骤",{"2":{"774":1}}],["绘制的全过程",{"2":{"717":1}}],["绘制管线",{"2":{"683":1}}],["绘制核心",{"2":{"683":1}}],["绘制领域模型图",{"2":{"282":1}}],["绘洛水女神之翩跹",{"2":{"508":1}}],["音视频等多种资料",{"2":{"514":1}}],["音视频建议等方式",{"2":{"494":1}}],["音频播放器",{"2":{"939":1}}],["音频播放库",{"2":{"735":1}}],["音频资源",{"2":{"763":1}}],["音频监听器",{"2":{"763":1}}],["音频源",{"2":{"763":1}}],["音频元素",{"2":{"735":1}}],["音频控制",{"2":{"738":1}}],["音频控制器",{"2":{"735":1}}],["音频控制模块",{"2":{"735":1}}],["音频图层元素",{"2":{"735":1}}],["音频分析",{"2":{"521":1}}],["音频概述",{"2":{"515":3}}],["音频",{"2":{"511":1,"515":2,"521":2,"523":2}}],["音",{"2":{"511":1,"521":1}}],["音韵设计‌",{"2":{"508":1}}],["音韵设计",{"2":{"508":1}}],["亲自写代码",{"2":{"538":1}}],["亲爱的旅人",{"2":{"508":1}}],["亲爱的诗友",{"2":{"507":1}}],["亲切自然",{"2":{"494":1}}],["✨",{"2":{"507":1,"508":1}}],["雪",{"2":{"1043":1}}],["雪纺衫",{"2":{"724":1}}],["雪莱曾说",{"2":{"507":1,"508":1}}],["雪花算法",{"2":{"196":1}}],["澈",{"2":{"507":1}}],["炼字技巧‌",{"2":{"507":1}}],["仄仄平平仄",{"2":{"507":1}}],["嗅觉",{"2":{"507":1}}],["声",{"2":{"507":1}}],["声明",{"2":{"986":1}}],["声明对其他项目的依赖",{"2":{"216":1}}],["声明文件发布目录",{"2":{"706":1}}],["声明文件是",{"2":{"321":1}}],["声明文件输出目录",{"2":{"203":1}}],["声明文件",{"0":{"321":1},"2":{"203":1,"208":2}}],["声明式数据替代可执行代码",{"2":{"938":1}}],["声明式数据确保",{"2":{"936":1}}],["声明式数据源管理",{"2":{"706":1}}],["声明式着色语言",{"2":{"763":1}}],["声明式的图谱查询",{"2":{"342":1}}],["声明式",{"2":{"170":1,"339":1,"699":1,"761":1,"762":1,"936":1}}],["声明这是",{"2":{"152":1}}],["萦",{"2":{"507":2}}],["韵",{"2":{"507":2}}],["韵脚清雅",{"2":{"505":1}}],["庚青",{"2":{"507":1}}],["颈联转写离别之悲",{"2":{"508":1}}],["颈联赋才情",{"2":{"507":1}}],["颈联",{"2":{"507":1,"508":1}}],["颈联以",{"2":{"505":1}}],["颔联",{"2":{"507":1,"508":1}}],["颔联描摹眉眼与朱唇的灵动",{"2":{"505":1}}],["红薯",{"2":{"1047":3}}],["红线四",{"2":{"970":1}}],["红线三",{"2":{"970":1}}],["红线二",{"2":{"970":1}}],["红线一",{"2":{"970":1}}],["红线",{"2":{"970":1}}],["红尘",{"2":{"507":1}}],["红尘千丈外",{"2":{"507":2}}],["红队审查者",{"2":{"535":1}}],["红队",{"2":{"375":1}}],["闲调绿绮声",{"2":{"507":2}}],["闲置长连接",{"2":{"124":1}}],["寄语",{"2":{"507":1}}],["袖引暗香萦",{"2":{"507":2}}],["袖引",{"2":{"507":2}}],["眸含春水漾",{"2":{"507":2}}],["眸含",{"2":{"507":2}}],["眸含秋水澈",{"2":{"505":1}}],["奇偶相配",{"2":{"506":1}}],["歌德的",{"2":{"506":1}}],["水分三个指标优化至稳步停留在标准范围内",{"2":{"1048":1}}],["水分等指标",{"2":{"1048":1}}],["水平布局",{"2":{"939":1}}],["水映天",{"2":{"505":1}}],["水合就会失败",{"2":{"58":1}}],["水合开销大",{"2":{"45":1}}],["水合延迟",{"2":{"29":1}}],["水合过程完成后用户体验与",{"2":{"29":1}}],["水合",{"2":{"26":1,"27":2,"45":1,"47":1,"53":1}}],["凌波",{"2":{"505":1}}],["凌波微步洛川边",{"2":{"505":1}}],["末句将个人惊艳升华为文化共鸣",{"2":{"505":1}}],["末句点出赋文跨越时空的艺术魅力",{"2":{"505":1}}],["末尾可能缺少换行符",{"2":{"143":1}}],["顾客赢了就给同样的下注铜板",{"2":{"1016":1}}],["顾盼流辉惊落雁",{"2":{"505":1}}],["顾名思义",{"2":{"384":1}}],["罗盘",{"2":{"602":1}}],["罗袜",{"2":{"505":1}}],["罗袜生尘水映天",{"2":{"505":1}}],["罗衣",{"2":{"505":1}}],["罗衣拂柳烟",{"2":{"505":1}}],["弦",{"2":{"505":1}}],["雁",{"2":{"505":1}}],["典故",{"2":{"505":1}}],["典型工作流",{"0":{"999":1}}],["典型代码量",{"2":{"902":1}}],["典型代表",{"2":{"403":1}}],["典型任务示例",{"2":{"568":1}}],["典型使用",{"0":{"876":1},"1":{"877":1,"878":1,"879":1},"2":{"640":1,"934":1}}],["典型使用场景",{"2":{"511":1,"512":1,"515":1,"518":1}}],["典型使用示例",{"0":{"144":1}}],["典型痛点描述",{"2":{"465":1}}],["典型案例",{"0":{"416":1},"2":{"411":1}}],["典型的就是",{"2":{"386":1}}],["典型的后端模块化分层架构包含以下核心组件",{"2":{"275":1}}],["典型场景",{"0":{"111":1,"120":1,"595":1}}],["典型应用场景",{"2":{"418":1}}],["典型应用",{"2":{"103":1,"116":1}}],["典型用例",{"0":{"668":1,"724":1,"755":1,"782":1,"810":1,"870":1,"956":1}}],["典型用途",{"2":{"580":1}}],["典型用法的示例如下",{"2":{"78":1}}],["典型用户感知",{"2":{"63":1}}],["升级后的三个清单进一步优化了笔者的时间",{"2":{"1037":1}}],["升级清单管理的主要思路依旧运用了分解与渐进明细",{"2":{"1037":1}}],["升级清单管理有了一定的必要条件",{"2":{"1037":1}}],["升级清单管理",{"0":{"1037":1}}],["升级自己的心智模型",{"2":{"1009":1}}],["升级为能自主遵循工程纪律的",{"2":{"973":1}}],["升级工作价值",{"0":{"406":1},"2":{"406":1}}],["升华其超然境界",{"2":{"507":1}}],["升华主题‌",{"2":{"505":1}}],["绽",{"2":{"505":1}}],["拂",{"2":{"505":1}}],["绾",{"2":{"505":1}}],["营养",{"2":{"1025":1}}],["营造澄澈空灵的背景",{"2":{"505":1}}],["营造画面感",{"2":{"505":1}}],["营销不是为了制造博人眼球的头条新闻",{"2":{"380":1}}],["营销页面",{"2":{"63":1}}],["营销网站",{"2":{"6":1,"19":1}}],["山川",{"2":{"505":1}}],["鸿影",{"2":{"505":1}}],["柳烟",{"2":{"505":1}}],["樱唇",{"2":{"505":1}}],["秋水",{"2":{"505":1}}],["暗色主题",{"2":{"706":1}}],["暗香",{"2":{"507":2}}],["暗喻才情雅趣",{"2":{"507":1}}],["暗含",{"2":{"505":1}}],["暗号型",{"2":{"445":1}}],["拈花",{"2":{"505":1}}],["拈花落玉钿",{"2":{"505":1}}],["步数尽量不要超过10000",{"2":{"1048":1}}],["步工作流",{"2":{"987":1}}],["步",{"2":{"565":1,"988":2,"1045":1,"1046":1,"1047":1}}],["步以上",{"2":{"564":1,"1048":1}}],["步月",{"2":{"505":1}}],["步月惊鸿影",{"2":{"505":1}}],["步骤编排",{"2":{"918":1}}],["步骤类型",{"2":{"849":1}}],["步骤固定",{"2":{"588":1}}],["步骤4",{"0":{"450":1}}],["步骤2",{"2":{"447":1}}],["步骤1",{"2":{"447":1}}],["步骤与约束",{"2":{"442":1}}],["步骤",{"0":{"13":1,"14":1,"15":1,"16":1,"17":1,"447":1,"448":1,"449":1},"2":{"449":1,"583":1}}],["步骤如下",{"2":{"10":1}}],["唇绽绛樱鲜",{"2":{"505":1}}],["云服务已经发展得足够简单",{"2":{"1041":1}}],["云端多语言全栈",{"2":{"562":1}}],["云端全栈",{"2":{"561":1}}],["云端在线",{"2":{"561":1}}],["云环鬟",{"2":{"507":1}}],["云鬟映月明",{"2":{"507":2}}],["云鬓",{"2":{"505":1}}],["云鬓绾春色",{"2":{"505":1}}],["云盘",{"2":{"398":1}}],["‌情感递进‌",{"2":{"508":1}}],["‌诗句‌",{"2":{"508":1}}],["‌题记‌",{"2":{"508":1}}],["‌3",{"2":{"505":1,"508":1}}],["‌2",{"2":{"505":1}}],["‌1",{"2":{"505":1,"508":1}}],["‌",{"2":{"505":8,"507":4,"508":4}}],["川",{"2":{"505":2}}],["钿",{"2":{"505":2}}],["鲜活",{"2":{"507":1}}],["鲜",{"2":{"505":2}}],["烟",{"2":{"505":2}}],["美丽的西子姑娘直接掷骰子",{"2":{"1016":1}}],["美人",{"2":{"505":1}}],["美人吟",{"2":{"505":2,"507":2}}],["美而不自知",{"2":{"505":1}}],["美观",{"2":{"340":1}}],["五层结构从下到上",{"2":{"906":1}}],["五个模块",{"2":{"798":1}}],["五边形",{"2":{"677":1}}],["五款",{"0":{"568":1}}],["五言律诗",{"2":{"505":1,"507":1}}],["五种方案",{"2":{"55":1}}],["五种方案综合对比",{"0":{"45":1}}],["描边色",{"2":{"743":1}}],["描边宽度等",{"2":{"743":1}}],["描边效果",{"2":{"735":1}}],["描边样式数据",{"2":{"735":1}}],["描边样式处理",{"2":{"683":1}}],["描边",{"2":{"677":1,"680":1,"683":1,"814":1}}],["描摹灵动气韵",{"2":{"507":1}}],["描绘景象",{"2":{"506":1}}],["描绘景象或讲述故事",{"2":{"504":1}}],["描绘洛神凌波而来的仙姿",{"2":{"505":1}}],["描述要做的事情",{"2":{"999":1}}],["描述测试",{"2":{"980":1}}],["描述属性",{"2":{"942":1}}],["描述开发者使用",{"2":{"775":1}}],["描述基于",{"2":{"774":1}}],["描述光照模型参数",{"2":{"771":1}}],["描述一个操作",{"2":{"650":1}}],["描述项目的核心功能和特点",{"2":{"573":1}}],["描述需求",{"2":{"559":1}}],["描述人物或故事",{"2":{"506":1}}],["描述必须做到两点",{"2":{"448":1}}],["描述即实现",{"2":{"179":1}}],["描述",{"2":{"177":1,"450":1,"451":1,"453":1,"468":1,"499":1,"564":1,"650":2,"680":1,"700":1,"933":1}}],["七绝",{"2":{"505":1}}],["七言咏怀",{"2":{"508":1}}],["七言体是古代诗歌体裁",{"2":{"506":1}}],["七言绝句",{"2":{"505":1}}],["七言律诗",{"2":{"508":1}}],["七言律诗或五言诗",{"2":{"504":1}}],["七言律诗和五言诗要押韵",{"2":{"504":1,"506":1}}],["七言律诗和五言诗",{"2":{"504":1}}],["七步之内",{"2":{"387":1}}],["围绕市面上常用的",{"2":{"504":1}}],["围绕两个核心包展开",{"2":{"56":1}}],["联系方式",{"2":{"1004":1}}],["联系人卡片场景",{"2":{"939":1}}],["联网实时性强",{"2":{"512":1}}],["联网搜索",{"2":{"506":1}}],["联网搜索能力",{"2":{"501":1}}],["联合生态伙伴正式开源",{"2":{"441":1}}],["联合的",{"2":{"250":1}}],["联合",{"2":{"249":1}}],["联合与交叉的零等律",{"2":{"244":1}}],["联合与交叉的深层关系",{"0":{"241":1},"1":{"242":1,"243":1,"244":1}}],["联合和交叉与这两个特殊类型的交互",{"2":{"244":1}}],["联合类型和交叉类型本质上对应集合的并与交",{"2":{"250":1}}],["联合类型使用",{"2":{"229":1}}],["联合类型",{"0":{"228":1},"1":{"229":1,"230":1,"231":1,"232":1,"233":1,"234":1}}],["诗是乘着风的种子",{"2":{"508":1}}],["诗是生命在形象中的呼吸",{"2":{"507":1}}],["诗是迷醉心怀的智慧",{"2":{"505":2}}],["诗词搜索",{"2":{"506":1}}],["诗词搜索能力",{"2":{"501":1}}],["诗词搜索能力等工具",{"2":{"501":1}}],["诗人创作的作品可以是纪事性的",{"2":{"506":1}}],["诗人是创作诗歌的艺术家",{"2":{"506":1}}],["诗人",{"2":{"506":1}}],["诗歌题目和诗句",{"2":{"504":1}}],["诗歌小精灵",{"2":{"496":1,"499":1,"506":1,"509":1}}],["俏皮又灵动的小精灵",{"2":{"499":1}}],["门槛高",{"2":{"901":1}}],["门槛极高",{"2":{"551":1}}],["门面",{"2":{"499":1}}],["门户",{"2":{"80":1}}],["达到更高的输出上限",{"2":{"496":1}}],["达到什么样的具体目标",{"2":{"447":1}}],["周日不做要求",{"2":{"1046":1,"1047":1}}],["周日上午随意",{"2":{"1036":1}}],["周六和周日侧重进行分组的无氧运动来加强锻炼",{"2":{"1048":1}}],["周六拍篮球的场地和时间不再继续做限制",{"2":{"1048":1}}],["周六锻炼继续保持",{"2":{"1046":1,"1047":1}}],["周六加了一个项目",{"2":{"1045":1}}],["周六下午预留健身时间",{"2":{"1036":1}}],["周六上午预留网上冲浪和阅读文章充电时间",{"2":{"1036":1}}],["周六无重要事不约不逛",{"2":{"1036":1}}],["周末做饭",{"2":{"1048":1}}],["周末不做限制",{"2":{"1048":1}}],["周末午餐",{"2":{"1047":1}}],["周末早饭",{"2":{"1047":1}}],["周末饮食保持正常",{"2":{"1045":1}}],["周末调整没有工作日拆解的细",{"2":{"1038":1}}],["周末",{"2":{"1037":2,"1040":1}}],["周末培养一些做饭的技能",{"2":{"1026":1}}],["周末也倒逼自己按照比较严格的作息推动业余实践",{"2":{"1019":1}}],["周末在社区活动中再次听到了",{"2":{"496":1}}],["周报",{"2":{"515":1}}],["周期过长",{"2":{"47":1}}],["周期设置两极化",{"2":{"47":1}}],["周期",{"2":{"45":1}}],["周期更新",{"2":{"36":1}}],["周期后",{"2":{"35":1}}],["周期内访问",{"2":{"35":1}}],["台下的反响印证了我们最初的判断",{"2":{"495":1}}],["拍照问答",{"2":{"494":1}}],["呢~",{"2":{"494":1}}],["孩子做应用题总是读不懂题意",{"2":{"494":1,"495":1}}],["示意如下",{"2":{"958":1}}],["示意图",{"2":{"494":1}}],["示例项目集合",{"2":{"939":1}}],["示例项目",{"2":{"908":1}}],["示例截图",{"2":{"763":1}}],["示例页面",{"2":{"668":1}}],["示例等",{"2":{"442":1}}],["示例场景",{"2":{"315":1}}],["示例代码和演示页面",{"2":{"647":1}}],["示例代码",{"2":{"304":1,"305":1,"306":1,"307":1,"312":1,"318":1,"980":1}}],["示例",{"0":{"163":1,"451":1,"573":1},"2":{"67":1,"154":1,"167":2,"278":1,"281":2,"295":1,"314":1,"321":1,"330":1,"331":1,"412":1,"436":1,"449":1,"451":1,"494":1,"763":1,"939":3,"959":1,"960":1}}],["挖掘该知识点在真实生活或工作中的趣味应用案例",{"2":{"494":1}}],["挖掘出真正有价值的答案",{"2":{"358":1}}],["趣味延伸",{"2":{"494":1}}],["授人以渔",{"2":{"494":1,"597":1}}],["众所周知",{"2":{"493":1,"1007":1,"1024":1}}],["幕后导师",{"2":{"492":1}}],["家人等多方的协力帮助",{"2":{"1022":1}}],["家长和老师",{"2":{"492":1}}],["家底",{"2":{"384":1}}],["教导而非编程",{"2":{"986":1}}],["教会了我们哪些",{"0":{"1017":1}}],["教会agent查找",{"2":{"983":1}}],["教会agent如何使用技能系统",{"2":{"980":1}}],["教会",{"2":{"978":1,"979":1,"986":1}}],["教我们通过有效授权拒绝无谓的干扰",{"2":{"602":1}}],["教家长如何圈出",{"2":{"495":1}}],["教育场景",{"2":{"939":1}}],["教育与科研人员",{"2":{"757":1}}],["教育",{"2":{"492":1}}],["教学课件",{"2":{"515":1}}],["教学案例或生活应用场景",{"2":{"494":1}}],["教学",{"2":{"380":1}}],["谁是更好的选择",{"0":{"592":1}}],["谁才是真正的用户",{"0":{"492":1}}],["谁会被增强",{"0":{"404":1},"1":{"405":1,"406":1,"407":1}}],["谁会被替代",{"0":{"404":1},"1":{"405":1,"406":1,"407":1}}],["赛道",{"0":{"492":1},"2":{"963":1}}],["破局点",{"0":{"492":1}}],["欢迎持续关注本系列的后续更新",{"2":{"491":1}}],["恢复引擎",{"2":{"834":1}}],["恢复播放",{"2":{"825":1}}],["恢复数据状态",{"2":{"708":1,"719":1}}],["恢复",{"2":{"489":1,"819":1}}],["旗下的旗舰级",{"2":{"511":1}}],["旗下的",{"2":{"477":1}}],["审批",{"2":{"915":1}}],["审查代码质量",{"2":{"988":1}}],["审查代码是否匹配规格",{"2":{"988":1}}],["审查代码",{"2":{"982":1}}],["审查反馈的接收与响应",{"2":{"980":1}}],["审查请求流程与模板",{"2":{"980":1}}],["审查结论会更客观",{"2":{"590":1}}],["审查过程中如果涉及到安全问题",{"2":{"588":1}}],["审查重点",{"2":{"583":1}}],["审查",{"2":{"568":1,"570":1,"980":1}}],["审查后确认提交",{"2":{"567":1}}],["审结果",{"2":{"559":1}}],["审稿与发布",{"2":{"477":1}}],["审计员",{"2":{"426":1,"555":1}}],["近小半年后笔者发现自己在工作方面不那么像四处灭火的",{"2":{"1036":1}}],["近裁剪面距离",{"2":{"778":1}}],["近期",{"2":{"477":1}}],["近实时",{"2":{"45":1}}],["半份糙米饭",{"2":{"1047":1}}],["半份米饭",{"2":{"1045":1}}],["半小时用于健身",{"2":{"1036":1}}],["半年减",{"2":{"1026":1}}],["半年实现副业变现",{"2":{"624":1}}],["半球光",{"2":{"763":1}}],["半径轴",{"2":{"706":1}}],["半径轴管理",{"2":{"706":1}}],["半自动",{"2":{"477":1}}],["半天即可全团队推行",{"2":{"98":1}}],["校园互联网小作坊",{"2":{"1022":1}}],["校对",{"2":{"476":1}}],["校验器执行",{"2":{"685":1}}],["校验请求体",{"2":{"576":1}}],["校验",{"2":{"85":1,"451":1,"583":1,"650":2,"652":1,"685":1}}],["筛选后的量化笔记",{"2":{"475":1}}],["起床",{"2":{"1036":1}}],["起居有常",{"2":{"1024":1,"1025":1}}],["起初会看一些数学发展史",{"2":{"1011":1}}],["起初",{"2":{"1008":1}}],["起初我们学习",{"2":{"271":1}}],["起了无数的名字",{"2":{"1008":1}}],["起点",{"2":{"965":1}}],["起始数值",{"2":{"834":1}}],["起始时间偏移",{"2":{"834":1}}],["起始时间",{"2":{"824":1,"834":1}}],["起始位置",{"2":{"795":1}}],["起始值",{"2":{"749":1}}],["起草博客文章",{"2":{"631":1}}],["起辅助作用",{"2":{"628":1}}],["起来",{"2":{"515":1}}],["起承转合",{"2":{"507":1,"508":1}}],["起源于",{"2":{"470":1}}],["须找到",{"2":{"470":1}}],["积累新知识的能力越强",{"2":{"1007":1}}],["积累新知识的能力就越强",{"2":{"1007":1}}],["积累了从",{"2":{"1000":1}}],["积累下一次能做得更好的判断力",{"2":{"466":1}}],["积极拥抱新媒介的红利",{"2":{"613":1}}],["积极向上",{"2":{"504":1,"506":1}}],["积攒",{"2":{"107":1}}],["挤压生存空间的",{"2":{"466":1}}],["讨论搭子",{"2":{"610":1}}],["讨论深入",{"2":{"610":1}}],["讨论是检验理解的试金石",{"2":{"610":1}}],["讨论",{"0":{"610":1},"2":{"466":1}}],["讨论记录和技术文档",{"2":{"417":1}}],["衔接缺乏",{"2":{"465":1}}],["杠杆层",{"2":{"558":1}}],["杠杆",{"0":{"557":1},"2":{"1001":1}}],["杠杆能力组合成一个属于自己的飞轮",{"2":{"466":1}}],["杠杆能力没有一刀切的答案",{"2":{"462":1}}],["杠杆力",{"0":{"462":1}}],["乘数",{"0":{"462":1},"2":{"1001":1}}],["懂一点代码",{"2":{"461":1}}],["懂得等待",{"2":{"388":1}}],["敲代码",{"0":{"461":1}}],["敲定状态拓扑",{"2":{"180":1}}],["敲定",{"0":{"174":1}}],["敲定拓扑位置",{"0":{"172":1},"1":{"173":1,"174":1}}],["▲",{"2":{"458":1,"459":1,"463":1,"464":1}}],["丧失了对产品全貌的掌控感与",{"2":{"457":1}}],["杂项",{"2":{"763":1}}],["杂乱的脚本和抽象的领域规范统一封装到",{"2":{"456":1}}],["杂货铺",{"2":{"327":1}}],["串联成高可靠性的业务流",{"2":{"455":1}}],["串行陷阱",{"2":{"47":1}}],["范围计算",{"2":{"706":1}}],["范围",{"2":{"451":1}}],["范式注入到生成流",{"2":{"1000":1}}],["范式的沉淀或许仍需时间",{"2":{"539":1}}],["范式的落地不是一蹴而就的规则设定",{"2":{"534":1}}],["范式的根本性反思",{"2":{"59":1}}],["范式落地",{"0":{"534":1},"1":{"535":1,"536":1,"537":1,"538":1},"2":{"525":1}}],["范式",{"0":{"506":1},"1":{"507":1,"508":1},"2":{"559":1}}],["范式选择",{"0":{"432":1}}],["范式类型",{"2":{"414":1}}],["范式革命",{"2":{"113":1}}],["范式转移",{"2":{"92":1}}],["获得技能使用能力后",{"2":{"982":1}}],["获得的知识与思考深度",{"2":{"606":1}}],["获得确认后再执行",{"2":{"451":1}}],["获取同步快照",{"2":{"951":1}}],["获取路径对应的",{"2":{"951":1}}],["获取启用了",{"2":{"951":1}}],["获取客户端能力声明",{"2":{"951":1}}],["获取单个组件状态",{"2":{"939":1}}],["获取单篇文章",{"2":{"14":1}}],["获取日志",{"2":{"866":1}}],["获取全局",{"2":{"859":1}}],["获取适配器",{"2":{"851":1}}],["获取后端特定数据",{"2":{"777":1}}],["获取场景图",{"2":{"765":1}}],["获取指定帧的值",{"2":{"749":1}}],["获取指定维度名称",{"2":{"719":1}}],["获取自身矩阵",{"2":{"749":1}}],["获取动画时长",{"2":{"749":1}}],["获取动态能力",{"2":{"8":1}}],["获取当前帧的实时属性值",{"2":{"747":1}}],["获取当前缓存中的数据快照",{"2":{"96":1}}],["获取完整的数据项模型",{"2":{"719":1}}],["获取数据项的视觉编码",{"2":{"719":1}}],["获取数据值",{"2":{"719":1}}],["获取连接的",{"2":{"719":1}}],["获取选项",{"2":{"719":1}}],["获取平台特定实现",{"2":{"706":1}}],["获取命中节点",{"2":{"684":1}}],["获取子元素",{"2":{"749":1}}],["获取子",{"2":{"663":1}}],["获取方法",{"2":{"662":1}}],["获取和处理信息",{"2":{"621":1}}],["获取最丰沛的知识",{"2":{"613":1}}],["获取现有项目",{"2":{"449":1}}],["获取所有子",{"2":{"663":1}}],["获取所有数据",{"2":{"261":1}}],["获取所有博客文章",{"2":{"14":1}}],["获取装饰器元数据",{"2":{"203":1}}],["获取到结果",{"2":{"160":1}}],["获取流的读取器",{"2":{"143":1}}],["获取流读取器",{"2":{"141":1}}],["获取响应体的流读取器",{"2":{"141":1}}],["获取结果",{"2":{"126":1}}],["获取用户信息",{"2":{"103":1,"330":1}}],["获取用户列表",{"2":{"95":1}}],["获取该用户的项目列表",{"2":{"89":1}}],["获取该文章的所有评论",{"2":{"16":1}}],["获取项目",{"2":{"16":1}}],["获取",{"2":{"14":1,"345":1,"472":1,"663":1,"719":3,"866":1,"939":1}}],["冲突",{"2":{"960":1}}],["冲突处理",{"2":{"451":1,"814":1}}],["冲突的位运算",{"2":{"203":1}}],["熔断机制",{"2":{"450":1}}],["糟糕设计",{"2":{"448":1}}],["验收标准",{"2":{"447":1}}],["验证步骤",{"2":{"994":1}}],["验证的完整流程",{"2":{"992":1}}],["验证清单与检查流程",{"2":{"980":1}}],["验证并分发",{"2":{"951":1}}],["验证规则数组",{"2":{"946":1}}],["验证测试",{"2":{"939":1}}],["验证响应",{"2":{"891":1}}],["验证夹具",{"2":{"851":1}}],["验证质量",{"2":{"628":1}}],["验证假设",{"2":{"556":1}}],["验证机制",{"2":{"450":1}}],["验证数据",{"2":{"449":1}}],["验证",{"0":{"369":1},"2":{"461":1,"535":1,"939":1,"941":1,"947":1}}],["验证工具",{"2":{"274":1}}],["验证基础要求",{"2":{"201":1}}],["验证码",{"2":{"200":1}}],["验证通过后再进入下一个模块的开发",{"2":{"177":1}}],["验证通过",{"2":{"144":1}}],["搞清楚",{"2":{"447":1}}],["硬核的技术积累与工程实践",{"2":{"1002":1}}],["硬链接节省磁盘",{"2":{"904":1}}],["硬换行分块信息",{"2":{"805":1}}],["硬换行",{"2":{"805":1}}],["硬编码细节过多",{"2":{"445":1}}],["硬套多层架构",{"2":{"190":1}}],["硬套",{"2":{"189":1}}],["脆弱型",{"2":{"445":1}}],["百万行级别",{"2":{"567":1}}],["百炼",{"2":{"522":1}}],["百科全书",{"2":{"558":1}}],["百科全书型",{"2":{"445":1}}],["百科知识查询",{"2":{"518":1}}],["百科",{"2":{"518":1}}],["百度地图扩展",{"2":{"706":1}}],["百度的低代码平台",{"2":{"640":1}}],["百度出品的无代码应用搭建平台",{"2":{"561":1}}],["百度千帆",{"2":{"523":2}}],["百度文库深度联动",{"2":{"518":1}}],["百度百科",{"2":{"518":1}}],["百度在传统搜索基础上接入文心大模型",{"2":{"518":1}}],["百度",{"2":{"518":2}}],["百度推出的文心一言",{"2":{"512":1}}],["百度搜索",{"2":{"494":3}}],["百分数",{"2":{"494":1}}],["百分比",{"2":{"470":1,"472":1}}],["百级以下",{"2":{"46":1}}],["激起层层涟漪",{"2":{"505":1}}],["激发孩子对数学的兴趣",{"2":{"494":1}}],["激活阶段",{"2":{"443":1}}],["激励",{"2":{"380":1}}],["意识",{"2":{"556":1}}],["意涵丰富",{"2":{"506":1}}],["意象提炼‌",{"2":{"508":1}}],["意象提炼",{"2":{"508":1}}],["意象经营‌",{"2":{"507":1}}],["意象经营重于修辞运用",{"2":{"506":1}}],["意象空灵",{"2":{"507":1}}],["意象",{"2":{"505":1}}],["意象选择‌",{"2":{"505":2}}],["意图识别",{"2":{"443":1}}],["意味着任何一个为零",{"2":{"366":1}}],["意味着服务端的",{"2":{"164":1}}],["意味着获取即过期",{"2":{"92":1}}],["意味着同时学习",{"2":{"81":1}}],["参考文档",{"2":{"763":1,"851":1}}],["参考竞品设计",{"2":{"562":1}}],["参考",{"2":{"453":1,"454":1,"455":1,"790":1,"939":1,"989":1}}],["参考规范文件",{"2":{"451":1}}],["参考指南",{"2":{"442":1}}],["参考资源",{"2":{"442":1}}],["参数双层加载",{"2":{"916":1}}],["参数处理",{"2":{"850":1}}],["参数直观",{"2":{"759":1}}],["参数实现了完美的会话恢复",{"2":{"485":1}}],["参数校验",{"2":{"336":1}}],["参数类型为",{"2":{"258":1}}],["参数过滤数据",{"2":{"154":1}}],["参数为",{"2":{"141":1}}],["参数做高性能的衍生数据计算",{"2":{"95":1}}],["参数",{"2":{"34":1,"482":1,"741":1,"835":1}}],["揭开",{"2":{"441":1}}],["月底",{"2":{"1047":1}}],["月份迁移几篇旧文后",{"2":{"1019":1}}],["月之暗面官方",{"2":{"522":1}}],["月",{"2":{"441":1}}],["系列数据存储",{"2":{"709":1}}],["系列基类",{"2":{"706":1}}],["系列",{"2":{"523":1,"790":1}}],["系列国内稳定代理",{"2":{"523":1}}],["系列模型",{"2":{"709":1}}],["系列模型国内中转的",{"2":{"523":1}}],["系列模型官方",{"2":{"522":1}}],["系列有深度推理链",{"2":{"521":1}}],["系列具备深度推理链能力",{"2":{"521":1}}],["系列深度推理链",{"2":{"511":1}}],["系列中正式推出了",{"2":{"441":1}}],["系统论",{"2":{"1042":1}}],["系统自举",{"2":{"986":1}}],["系统自顶向下分为",{"2":{"704":1}}],["系统引导技能",{"2":{"980":1}}],["系统由四层组成",{"2":{"978":1}}],["系统级皮肤容器",{"2":{"965":1}}],["系统共分为五层",{"2":{"938":1}}],["系统整体架构",{"0":{"889":1}}],["系统还支持函数值",{"2":{"828":1}}],["系统能从原始值中提取",{"2":{"828":1}}],["系统是一组相互关联的要素",{"2":{"1007":1}}],["系统是",{"2":{"828":1}}],["系统有多个构建入口文件",{"2":{"737":1}}],["系统完整经历了",{"2":{"717":1}}],["系统通过",{"2":{"715":1}}],["系统通常由规划",{"2":{"408":1}}],["系统分为四个层次",{"2":{"675":1}}],["系统管理数据加载",{"2":{"653":1}}],["系统支持同步",{"2":{"652":1}}],["系统主题定义",{"2":{"647":1}}],["系统从下到上分为",{"2":{"645":1}}],["系统且连贯",{"2":{"614":1}}],["系统为何而存在",{"2":{"539":1}}],["系统韧性",{"0":{"527":1}}],["系统化能力",{"2":{"509":1}}],["系统化方法论",{"0":{"395":1},"1":{"396":1,"397":1,"398":1,"399":1}}],["系统提示词",{"2":{"570":1,"941":1}}],["系统提示",{"2":{"482":1}}],["系统架构",{"0":{"469":1},"1":{"470":1,"471":1,"472":1}}],["系统编排",{"0":{"461":1}}],["系统性地探讨如何写好一个",{"2":{"444":1}}],["系统将不再仅依赖通用模型能力",{"2":{"443":1}}],["系统熵值",{"2":{"432":1}}],["系统熵增以及用户认知的负担",{"2":{"365":1}}],["系统只需要定位到清单中的特定索引进行重试或局部修正",{"2":{"430":1}}],["系统会在",{"2":{"486":1}}],["系统会带着执行结果",{"2":{"429":1}}],["系统会通过",{"2":{"416":1}}],["系统中",{"2":{"933":1}}],["系统中提交一个包含",{"2":{"418":1}}],["系统中积累的变量总和",{"2":{"384":1}}],["系统响应",{"2":{"410":1}}],["系统响应等",{"2":{"408":1,"410":1}}],["系统洞察力",{"2":{"389":1}}],["系统里的",{"0":{"384":1}}],["系统并不是一团乱麻",{"2":{"383":1}}],["系统的",{"2":{"985":1}}],["系统的输出展现出了令人惊喜的",{"2":{"473":1}}],["系统的核心",{"0":{"383":1}}],["系统的灵魂",{"2":{"336":1}}],["系统黑盒",{"0":{"382":1}}],["系统必须直接拒绝回答",{"2":{"352":1}}],["系统构建者",{"2":{"303":1}}],["系统",{"0":{"741":1},"2":{"120":1,"344":1,"382":2,"383":1,"420":1,"439":1,"645":1,"647":1,"653":1,"846":1,"1007":2}}],["系统资源占用大盘",{"2":{"111":1}}],["赋能的开发流中",{"2":{"495":1}}],["赋能构建者",{"2":{"440":1}}],["赋予其透明度计算能力",{"2":{"966":1}}],["赋予其",{"2":{"958":1}}],["赋予记忆",{"2":{"544":1}}],["赋予",{"2":{"355":1,"426":1,"484":1}}],["桥接",{"2":{"439":1,"647":1,"817":1,"818":1,"966":1}}],["里绑定变量",{"2":{"961":1}}],["里写",{"2":{"959":1}}],["里",{"2":{"438":1,"1007":1}}],["里精准舞蹈",{"2":{"367":1}}],["助力你在不同项目需求下做出精准的技术选型",{"2":{"965":1}}],["助手平台",{"2":{"512":1}}],["助手无缝接入各类外部系统",{"2":{"439":1}}],["助手",{"0":{"510":1},"1":{"511":1,"512":1},"2":{"438":1,"511":4,"512":1,"515":2}}],["助教",{"2":{"407":1}}],["持之以恒地坚持下去",{"2":{"1025":1}}],["持有实际的二维数据表",{"2":{"709":1}}],["持久化",{"2":{"939":1}}],["持久化存储用户画像与历史交互状态",{"2":{"546":1}}],["持久化此",{"2":{"486":1}}],["持久上下文",{"2":{"437":1}}],["持续几个月后",{"2":{"1037":1}}],["持续阶段",{"2":{"1026":1}}],["持续执行原则",{"2":{"988":1}}],["持续侵蚀团队的认知资源与开发效率",{"2":{"527":1}}],["持续为产品与业务创造不可替代的价值",{"2":{"440":1}}],["持续创新与改进",{"2":{"400":1}}],["持续部署",{"2":{"345":1}}],["持续演进",{"2":{"282":1}}],["持续重构",{"2":{"277":1}}],["持续迭代新功能来刺激用户",{"2":{"398":1}}],["持续迭代",{"2":{"177":1}}],["持续读取流中的数据块",{"2":{"141":1}}],["持续累积到",{"2":{"141":1}}],["持续文本流",{"2":{"130":1}}],["背景",{"2":{"763":1}}],["背景渲染",{"2":{"763":1}}],["背景工具类",{"2":{"647":1}}],["背景上下文",{"2":{"437":1}}],["背后都有一个",{"2":{"609":1}}],["背后的",{"2":{"382":1,"1007":1}}],["背后的需求是",{"2":{"366":1}}],["背后的情绪可能是",{"2":{"366":1}}],["固守传统媒介的人获取知识的成本会越来越高",{"2":{"613":1}}],["固化个人的工作习惯",{"2":{"436":1}}],["固化企业内部的统一规范",{"2":{"436":1}}],["固定执行流程",{"2":{"910":1}}],["固定成本",{"2":{"391":1}}],["固定部分仅",{"2":{"115":1}}],["固定优先",{"2":{"47":1}}],["临时数据处理",{"2":{"435":1}}],["临时修改文案语气",{"2":{"435":1}}],["短",{"2":{"1006":1}}],["短视频内容策划",{"2":{"512":1,"522":1}}],["短句翻译等",{"2":{"435":1}}],["短期可完成的项目是可以协作完成的",{"2":{"1041":1}}],["短期",{"2":{"410":1}}],["短期记忆的协同管理",{"2":{"546":1}}],["短期记忆",{"2":{"408":1,"410":1,"546":1}}],["⚠️",{"2":{"435":1,"735":1,"959":1}}],["瞬时记忆遗忘",{"2":{"431":1}}],["瞬间看起来像个专家",{"2":{"359":1}}],["瞬间响应",{"2":{"88":1,"342":1}}],["判断是否应该渲染当前帧",{"2":{"834":1}}],["判断是否为",{"2":{"719":1}}],["判断当前路由是否活跃",{"2":{"662":1}}],["判断当前任务匹配时自动触发",{"2":{"585":1}}],["判断",{"2":{"622":1}}],["判断维度",{"2":{"592":1}}],["判断一款",{"2":{"517":1}}],["判断力的本质",{"2":{"460":1}}],["判断力不只是",{"2":{"460":1}}],["判断力",{"0":{"460":1}}],["判断为",{"2":{"149":1}}],["判定某技能匹配当前任务时",{"2":{"443":1}}],["判定是否继续",{"2":{"431":1}}],["谋定",{"2":{"429":1}}],["计数",{"2":{"793":1}}],["计划标题",{"2":{"994":1}}],["计划中的单个执行单元",{"2":{"983":1}}],["计划",{"2":{"983":1,"994":1}}],["计划文档审查提示词",{"2":{"980":1}}],["计划编写规范",{"2":{"980":1}}],["计划阶段",{"2":{"712":1}}],["计划清单",{"2":{"429":1}}],["计费方式",{"2":{"523":1}}],["计算体验",{"2":{"1001":1}}],["计算器",{"2":{"939":1}}],["计算当前帧的",{"2":{"830":1}}],["计算当前值并写入目标",{"2":{"827":1}}],["计算帧间隔",{"2":{"824":1,"834":1}}],["计算单帧tween值写入目标",{"2":{"819":1}}],["计算自然宽度",{"2":{"799":1}}],["计算",{"2":{"763":1,"798":1,"827":2,"831":1}}],["计算着色器",{"2":{"763":1}}],["计算增量步长",{"2":{"712":1}}],["计算机或棋类等高度抽象",{"2":{"614":1}}],["计算机使用",{"2":{"411":1}}],["计算秒数",{"2":{"523":1}}],["计算秒数计费",{"2":{"523":1}}],["计算订单项数量",{"2":{"281":1}}],["计算订单总价",{"2":{"278":1}}],["计算总价",{"2":{"281":1}}],["计算两个数的和",{"2":{"187":1}}],["计算得出",{"2":{"173":1}}],["计算下一次需要等待的时间",{"2":{"160":1}}],["计算指数退避延迟时间",{"2":{"150":1}}],["计算节点与",{"2":{"130":1}}],["计算成本",{"2":{"77":1}}],["鼓励模型在当前任务中",{"2":{"426":1}}],["闭关",{"2":{"1005":1,"1019":1,"1042":1}}],["闭合线条",{"2":{"763":1}}],["闭环",{"2":{"568":1}}],["闭环控制的艺术",{"0":{"426":1}}],["闭门造车打磨产品",{"2":{"377":1}}],["另提供",{"2":{"564":1}}],["另一方面也想借助网络平台",{"2":{"1043":1}}],["另一方面在前台用自然语言将解题思路拆解为通俗易懂的",{"2":{"493":1}}],["另一人只能押小",{"2":{"1016":1}}],["另一扇则照向当下社会的真实肌理",{"2":{"604":1}}],["另一个关键点",{"2":{"590":1}}],["另一个负责代码实现",{"2":{"535":1}}],["另一个常用模式",{"2":{"234":1}}],["另一种辩证的思考逐渐浮现",{"2":{"457":1}}],["另外",{"2":{"419":1,"509":1,"1043":1,"1047":1}}],["催生了对基础架构的重新审视",{"2":{"419":1}}],["操作类型",{"2":{"994":1}}],["操作用户已登录的浏览器",{"2":{"844":1}}],["操作的直接对象",{"2":{"738":1}}],["操作的文件匹配指定路径时",{"2":{"576":1}}],["操作封装",{"2":{"735":1}}],["操作体验",{"2":{"672":1}}],["操作系统",{"2":{"491":1}}],["操作",{"2":{"436":1,"443":1,"449":1,"451":1,"567":1,"656":1,"677":1,"705":1,"712":1,"713":1,"735":1,"822":1,"850":1,"945":1}}],["操作手册",{"2":{"436":2,"442":1}}],["操作步骤是否无歧义",{"2":{"450":1}}],["操作步骤",{"2":{"418":1}}],["操作符实现",{"2":{"270":1}}],["操作符组合多个约束条件",{"2":{"270":1}}],["操作符将多个类型或接口组合在一起",{"2":{"267":1}}],["操作符结合",{"2":{"263":1}}],["操作符",{"2":{"262":1,"268":1}}],["读过教员鞭辟入里的文章后",{"2":{"1025":1}}],["读完一本书",{"2":{"610":1}}],["读起来必须动脑筋",{"2":{"608":1}}],["读者可以随时停下翻回反复琢磨",{"2":{"606":1}}],["读书工具选择与实践",{"0":{"1031":1}}],["读书不等于学习",{"2":{"1029":1}}],["读书的方式",{"0":{"1030":1}}],["读书的目的",{"0":{"1029":1}}],["读书的核心目的是为了获取信息",{"2":{"613":1}}],["读书与学习相关的事务",{"2":{"1037":1}}],["读书与学习两方面的习惯得以保住",{"2":{"1036":1}}],["读书与学习自然也成为了一种常用的方式",{"2":{"1029":1}}],["读书与学习是两码事",{"2":{"1029":1}}],["读书与学习的区别是什么呢",{"2":{"1029":1}}],["读书与学习",{"2":{"1005":1,"1020":1,"1034":1}}],["读书从来不是为了把自己变成一个装满各类观点的",{"2":{"615":1}}],["读书对于这类人来说",{"2":{"612":1}}],["读书将异化为排解情绪与博取关注的工具",{"2":{"612":1}}],["读书多不等于人才",{"2":{"612":2}}],["读书",{"0":{"607":1,"611":1},"1":{"608":1,"609":1,"610":1,"612":1,"613":1,"614":1},"2":{"613":1}}],["读书允许读者专注其中",{"2":{"606":1}}],["读书是从外界接受信息的一种方式",{"2":{"606":1}}],["读懂大时代变革背后隐秘的结构性逻辑与阶层焦虑",{"2":{"604":1}}],["读懂整个代码库→制定方案→逐步执行",{"2":{"567":1}}],["读写多文件",{"2":{"564":1}}],["读写本地文件",{"2":{"436":1}}],["读来如涟漪荡漾",{"2":{"508":1}}],["读",{"2":{"418":1,"798":1,"1008":1,"1032":2}}],["读取传入的",{"2":{"959":1}}],["读取指定路径的数据",{"2":{"951":1}}],["读取字节流",{"2":{"889":1}}],["读取缓存的",{"2":{"854":1}}],["读取",{"2":{"472":1,"851":1,"855":1,"965":1,"979":1,"985":1}}],["读取研究笔记和图表",{"2":{"470":1}}],["读取研究笔记",{"2":{"470":1}}],["读取规范文档",{"2":{"443":1}}],["读取速度极快",{"2":{"304":1}}],["读取文件系统",{"2":{"70":1}}],["活动是游客拿着在宋城钱庄里兑换的",{"2":{"1016":1}}],["活动给定的命题是",{"2":{"492":1}}],["活得不糊里糊涂",{"2":{"1013":1}}],["活",{"2":{"417":1,"515":1}}],["死代码扫描",{"2":{"790":1}}],["死循环",{"2":{"620":1}}],["死板的工具",{"2":{"420":1}}],["死",{"2":{"417":1}}],["搜到初步答案后",{"2":{"518":1}}],["搜集至少",{"2":{"416":1}}],["搜索资料",{"2":{"567":1}}],["搜索会有",{"2":{"518":1}}],["搜索支持多轮对话",{"2":{"518":1}}],["搜索入口",{"2":{"518":1}}],["搜索体验最佳之一",{"2":{"518":1}}],["搜索引擎",{"2":{"518":1}}],["搜索引擎的范式正在发生转移",{"2":{"348":1}}],["搜索工具的关键维度",{"2":{"517":1}}],["搜索增强实时问答",{"2":{"512":1}}],["搜索",{"0":{"516":1},"1":{"517":1,"518":1},"2":{"512":1,"517":1,"518":7,"851":1,"998":1}}],["搜索与编辑文件的权力",{"2":{"484":1}}],["搜索阶段",{"2":{"468":1}}],["搜索关键词",{"2":{"412":1}}],["搜索的终局不仅仅是回答问题",{"2":{"355":1}}],["搜索转型时的历史包袱",{"2":{"354":1}}],["搜索只是大模型的",{"2":{"351":1}}],["搜索是一项工程与模型的交响",{"0":{"351":1},"1":{"352":1,"353":1}}],["搜索产品的设计逻辑与用户体验优化路径",{"2":{"348":1}}],["搜索产品",{"2":{"348":1}}],["搜索结果",{"2":{"80":1}}],["污染",{"2":{"415":1,"576":1}}],["演变为",{"2":{"963":1,"1043":1}}],["演变成了指挥若定的交响乐",{"2":{"415":1}}],["演示",{"2":{"515":1}}],["演示文稿与内容创作平台",{"2":{"515":1}}],["演示文稿的实用性",{"2":{"514":1}}],["演示环节",{"2":{"495":1}}],["演进历程",{"2":{"272":1}}],["演进",{"0":{"503":1},"1":{"504":1,"505":1},"2":{"103":1}}],["较多",{"2":{"647":2}}],["较高",{"2":{"432":1,"965":2}}],["较为简单的任务",{"2":{"414":1}}],["较低",{"2":{"3":1,"166":1,"432":1}}],["观测",{"2":{"414":1,"427":2}}],["观察同事们",{"2":{"1048":1}}],["观察",{"2":{"478":1,"484":1}}],["观察生活",{"2":{"400":1}}],["观察者",{"2":{"910":1}}],["观察者模式",{"2":{"734":1,"740":1,"763":1}}],["观察者模式观察者模式",{"0":{"302":1}}],["观察者等经典设计模式自然地融入日常开发时",{"2":{"303":1}}],["擅长的",{"2":{"527":1}}],["擅长代码生成",{"2":{"512":1}}],["擅长长文本理解",{"2":{"511":1}}],["擅长写五言诗",{"2":{"506":1}}],["擅长写七言律诗",{"2":{"506":1}}],["擅长写现代诗",{"2":{"506":1}}],["擅长通过诗歌来表达情感",{"2":{"506":1}}],["擅长创作现代诗",{"2":{"504":1}}],["擅长逻辑推理",{"2":{"417":1}}],["擅长随机应变",{"2":{"414":1}}],["擅长处理具有确定性",{"2":{"349":1}}],["脱颖而出",{"2":{"414":1,"419":1}}],["脱离现实的纯粹阅读",{"2":{"614":1}}],["脱离",{"2":{"556":1}}],["脱离浏览器也能构建复杂的系统应用",{"2":{"304":1}}],["脱离业务场景谈协议与通信方案的优劣是毫无意义的",{"2":{"129":1}}],["脱离具体业务场景谈技术选型毫无意义",{"2":{"55":1}}],["言行一致",{"2":{"412":1}}],["忘记",{"2":{"410":1}}],["感兴趣的可在网上搜一些更详细的资料",{"2":{"1013":1}}],["感知",{"2":{"677":1}}],["感知上下文多文件",{"2":{"564":1}}],["感知用户真实感受的能力",{"2":{"366":1}}],["感觉不错",{"2":{"550":1}}],["感受那份穿越千年的心动",{"2":{"505":1}}],["感性领域",{"2":{"496":1}}],["感官记忆",{"2":{"410":1}}],["涉及的文件路径",{"2":{"994":1}}],["涉及认证",{"2":{"592":1}}],["涉及用户隐私",{"2":{"523":1}}],["涉及用户私人状态的组件",{"2":{"76":1}}],["涉及政务",{"2":{"519":1}}],["涉及关键词",{"2":{"451":1}}],["涉及哪些领域知识或工具",{"2":{"447":1}}],["涉及信息的长时间保留和在需要时的精准检索",{"2":{"410":1}}],["涉及信息的长时间保留和检索",{"2":{"408":1}}],["帮你找到开发效率与架构韧性之间的最佳杠杆",{"2":{"971":1}}],["帮你写完",{"2":{"555":1}}],["帮孩子圈出关键词",{"2":{"494":1}}],["帮我做一个",{"2":{"991":1}}],["帮我找附近的意大利餐厅",{"2":{"934":1,"949":1}}],["帮我找出",{"2":{"567":1}}],["帮我处理",{"2":{"583":1}}],["帮我调研并搭建一个技术博客",{"2":{"414":1}}],["帮我写一个电商",{"2":{"408":1}}],["帮助团队在日常协作中保持样式代码的一致性与可维护性",{"2":{"965":1}}],["帮助函数",{"2":{"851":1}}],["帮助梳理逻辑",{"2":{"628":1}}],["帮助想法从描述直达成品",{"2":{"561":1}}],["帮助家长举一反三",{"2":{"494":1}}],["帮助建立对该领域的初步认知",{"2":{"468":1}}],["帮助用户一步步构建新的",{"2":{"454":1}}],["帮助处理前端开发项目",{"2":{"448":1}}],["帮助不擅长提问的用户将模糊的",{"2":{"350":1}}],["帮助读者理解",{"2":{"348":1}}],["帮助开发者构建清晰的领域模型",{"2":{"278":1}}],["帮助我们根据项目需求做出合适的技术选型",{"2":{"97":1}}],["​",{"2":{"408":5,"795":1}}],["客户管理等内部系统",{"2":{"640":1}}],["客户沟通等高价值环节",{"2":{"406":1}}],["客户端将在每次数据更新时发送完整数据模型",{"2":{"952":1}}],["客户端侧",{"2":{"948":1}}],["客户端声明",{"2":{"948":1}}],["客户端声明其能力",{"2":{"948":1}}],["客户端内联提供的完整目录定义",{"2":{"952":1}}],["客户端内联",{"2":{"948":1}}],["客户端支持的目录",{"2":{"948":1,"952":1}}],["客户端可以将自定义组件的",{"2":{"948":1}}],["客户端可用于断线重连",{"2":{"153":1}}],["客户端示例",{"2":{"939":1}}],["客户端能力声明",{"2":{"939":1}}],["客户端→服务端消息定义",{"2":{"939":1}}],["客户端开发者",{"2":{"933":1}}],["客户端执行全部在核心层",{"2":{"915":1}}],["客户端库",{"2":{"872":1}}],["客户端配置",{"2":{"274":1}}],["客户端复杂度",{"2":{"166":1}}],["客户端长轮询实现",{"2":{"164":1}}],["客户端处理完响应后",{"2":{"162":1}}],["客户端收到响应后",{"2":{"162":1}}],["客户端收到回调后",{"2":{"119":1}}],["客户端发请求后",{"2":{"162":1}}],["客户端发出请求后",{"2":{"161":1}}],["客户端挂起等待",{"2":{"160":1}}],["客户端退避轮询实现",{"2":{"160":1}}],["客户端下一次查询的等待时间并非固定",{"2":{"157":1}}],["客户端解析零成本",{"2":{"155":1}}],["客户端解析毫无额外成本",{"2":{"135":1}}],["客户端层",{"2":{"155":1}}],["客户端说完",{"2":{"151":1}}],["客户端时",{"2":{"145":1}}],["客户端错误",{"2":{"144":1,"146":1}}],["客户端方案",{"2":{"142":1}}],["客户端的核心状态管理模块",{"2":{"945":1}}],["客户端的",{"2":{"139":1}}],["客户端通过",{"2":{"139":1,"153":1}}],["客户端通过验证签名来确认请求的真实性",{"2":{"121":1}}],["客户端实现简单",{"2":{"160":1}}],["客户端实现示例",{"0":{"160":1,"164":1}}],["客户端实现",{"2":{"138":1}}],["客户端提交任务后获得",{"2":{"131":1}}],["客户端持",{"2":{"130":1}}],["客户端持有",{"2":{"126":1,"127":1}}],["客户端应当具备幂等处理能力",{"2":{"121":1}}],["客户端与服务器可随时",{"2":{"115":1}}],["客户端与服务器可双向",{"2":{"113":1}}],["客户端在请求头中声明",{"2":{"114":1}}],["客户端在重连时会自动携带最后一次收到的",{"2":{"110":1}}],["客户端在接收到",{"2":{"105":1}}],["客户端缓存",{"0":{"78":1}}],["客户端无缝替换",{"2":{"74":1}}],["客户端动态详情",{"2":{"67":1}}],["客户端交互组件",{"2":{"67":1}}],["客户端水合",{"0":{"58":1},"2":{"46":1}}],["客户端躺平",{"2":{"45":1}}],["客户端累死服务器清闲",{"2":{"45":1}}],["客户端全包",{"2":{"45":1}}],["客户端获取",{"2":{"45":1}}],["客户端运行时",{"2":{"45":1}}],["客户端完成",{"2":{"23":1}}],["客户端渲染器集合",{"2":{"939":1}}],["客户端渲染层",{"2":{"938":1}}],["客户端渲染",{"2":{"22":1,"45":1}}],["客户端",{"0":{"137":1},"1":{"138":1,"139":1},"2":{"21":1,"45":1,"60":1,"91":1,"119":1,"126":1,"141":1,"150":1,"159":1,"160":4,"162":1,"164":4,"439":1,"706":1,"851":1,"902":1,"934":1,"939":2,"941":1}}],["咨询师从",{"2":{"406":1}}],["辅以自然意象",{"2":{"505":1}}],["辅导",{"2":{"405":1}}],["辅助脚本",{"2":{"980":1}}],["辅助技能",{"2":{"979":1}}],["辅助技术方案",{"2":{"540":1}}],["辅助诊断与改善",{"2":{"628":1}}],["辅助开发",{"2":{"567":1}}],["辅助工具类",{"2":{"647":1}}],["辅助工具",{"2":{"553":1,"647":1}}],["辅助工具使用",{"2":{"512":1}}],["辅助",{"2":{"526":1,"559":1}}],["辅助下几分钟即可完成初稿并通过基础验证",{"2":{"527":1}}],["辅助下",{"2":{"525":1,"556":1}}],["辅助润色与二次加工",{"2":{"515":1}}],["辅助写作",{"2":{"515":2}}],["辅助完成知识体系搭建",{"2":{"406":1}}],["辅助增强型",{"0":{"406":1}}],["辅助编程日益普及的今天",{"2":{"332":1}}],["辅助编程普及的今天",{"2":{"309":1}}],["辅助函数",{"2":{"274":1,"647":1,"735":1}}],["辅助分析并输出组件层级树",{"2":{"170":1}}],["题库刷题",{"2":{"405":1}}],["技能补全",{"2":{"1001":1}}],["技能自动激活",{"2":{"999":1}}],["技能自动触发机制测试",{"2":{"980":1}}],["技能间转换规则",{"2":{"995":1}}],["技能间调用契约",{"0":{"995":1}}],["技能描述",{"2":{"994":1}}],["技能唯一标识",{"2":{"994":1}}],["技能引擎",{"2":{"986":1}}],["技能优先级规则等内容",{"2":{"986":1}}],["技能优先级测试",{"2":{"980":1}}],["技能输出的设计文档",{"2":{"983":1}}],["技能输出的细粒度任务列表",{"2":{"983":1}}],["技能文件同步到",{"2":{"980":1}}],["技能加载与注册",{"2":{"980":1}}],["技能编写参考示例",{"2":{"980":1}}],["技能编排层",{"2":{"978":1,"979":1}}],["技能开发方法论与测试框架",{"2":{"980":1}}],["技能创建过程的技术日志",{"2":{"980":1}}],["技能设计注解",{"2":{"980":5}}],["技能内容注入",{"2":{"978":1}}],["技能组合",{"2":{"978":1}}],["技能组合在一起",{"2":{"848":1}}],["技能载体",{"2":{"976":1}}],["技能主文件",{"2":{"851":1}}],["技能介入",{"2":{"588":1}}],["技能特别适合那些触发条件明确",{"2":{"587":1}}],["技能定义库",{"2":{"980":1}}],["技能定义",{"2":{"586":1}}],["技能是",{"2":{"585":1}}],["技能与命令的根本区别",{"0":{"585":1}}],["技能树的补全",{"2":{"557":1}}],["技能分身",{"2":{"557":1}}],["技能的使用场景",{"0":{"587":1}}],["技能的结构",{"0":{"586":1}}],["技能的物理叠加",{"2":{"553":1}}],["技能的插件化",{"0":{"547":1}}],["技能可多次重复使用",{"2":{"547":1}}],["技能萎缩的风险",{"2":{"531":1}}],["技能目录",{"2":{"470":1}}],["技能名称",{"2":{"449":1}}],["技能",{"0":{"989":1},"2":{"405":1,"406":1,"454":1,"455":1,"587":1,"851":1,"983":1,"986":2,"992":1,"1017":1}}],["技术底色源于工作几年后积累了较为扎实的工程化实践",{"2":{"1000":1}}],["技术适配",{"2":{"965":2}}],["技术决策",{"2":{"904":1}}],["技术亮点",{"0":{"874":1},"2":{"874":1}}],["技术选择",{"2":{"731":1,"785":1,"936":1}}],["技术选型",{"2":{"702":1,"815":1,"846":1}}],["技术选型决策",{"2":{"365":1}}],["技术选型决策树",{"2":{"166":1}}],["技术选型的成熟标志",{"2":{"55":1}}],["技术博客",{"2":{"632":1}}],["技术自嗨",{"2":{"556":1}}],["技术门槛的降低意味着工程师可以随时将生活和工作中的",{"2":{"541":1}}],["技术视野",{"2":{"540":1}}],["技术文档",{"2":{"518":1}}],["技术检索",{"2":{"518":1}}],["技术边界与场景的完美契合",{"0":{"493":1}}],["技术正在快速走向成熟与普及",{"2":{"477":1}}],["技术要点说明",{"0":{"472":1}}],["技术报告等",{"2":{"468":1}}],["技术发展迅猛",{"2":{"434":1}}],["技术拆解",{"0":{"408":1},"1":{"409":1,"410":1,"411":1,"412":1}}],["技术方法迭代日新月异",{"2":{"400":1}}],["技术方法在不断更新",{"2":{"400":1}}],["技术债务",{"0":{"527":1},"2":{"527":2}}],["技术债",{"2":{"386":1}}],["技术的进步与工具的完善",{"2":{"381":1}}],["技术的演进从来不是",{"2":{"132":1}}],["技术是我们的压舱石",{"2":{"376":1}}],["技术理解力",{"2":{"376":1}}],["技术推演",{"2":{"374":1}}],["技术上完美但用户不买账",{"2":{"366":1}}],["技术可实现性",{"2":{"363":1}}],["技术护城河",{"0":{"351":1},"1":{"352":1,"353":1}}],["技术工程背景的工程师可暂时只关注于模型预备训练",{"2":{"551":1}}],["技术工程",{"2":{"348":1}}],["技术周刊内容分类主要包括如下",{"2":{"346":1}}],["技术周刊",{"2":{"346":4}}],["技术团队的全栈转型",{"2":{"344":1}}],["技术演进",{"2":{"292":1}}],["技术复杂度",{"2":{"283":1}}],["技术实现",{"2":{"279":1,"287":1,"410":2}}],["技术实现应服务于业务需求",{"2":{"277":1}}],["技术会过时",{"2":{"180":1}}],["技术洁癖",{"2":{"123":1}}],["技术",{"2":{"103":1,"342":1,"344":1,"457":1,"546":1,"642":1,"880":1}}],["技术栈构建",{"2":{"902":1}}],["技术栈分析",{"0":{"880":1},"1":{"881":1}}],["技术栈与选型对比",{"0":{"642":1,"673":1,"702":1,"731":1,"759":1,"785":1,"815":1,"846":1,"904":1,"936":1,"976":1}}],["技术栈说明",{"2":{"575":1}}],["技术栈约束",{"2":{"570":1}}],["技术栈原型",{"2":{"562":1}}],["技术栈不再仅仅是前端框架和数据库",{"2":{"540":1}}],["技术栈",{"2":{"342":1,"558":1,"562":1,"573":1,"994":1}}],["技术栈无关",{"2":{"285":1}}],["技术栈为例",{"2":{"274":1,"275":1}}],["技术栈团队",{"2":{"81":1}}],["技术栈选型",{"0":{"11":1}}],["技术栈依赖",{"2":{"6":1}}],["政策",{"2":{"400":1,"518":1}}],["宏观经济日新月异",{"2":{"400":1}}],["帕累托改进",{"2":{"399":1}}],["帕累托优化与最优体验",{"0":{"394":1}}],["诱饵效应",{"2":{"397":1}}],["群体化定价",{"2":{"397":1}}],["三阶段建立的习惯基础上",{"2":{"1048":1}}],["三阶段编译",{"2":{"770":1}}],["三餐慢慢靠向合理均衡",{"2":{"1026":1}}],["三浏览器数据",{"2":{"790":1}}],["三个人约定分工",{"2":{"1016":1}}],["三个方面的方向或目标",{"2":{"1006":1}}],["三个提示词文件",{"2":{"988":1}}],["三个具体渲染器",{"2":{"741":1}}],["三个层次",{"2":{"380":1}}],["三色调滤镜",{"2":{"735":1}}],["三角形",{"2":{"677":1,"763":2}}],["三种功法",{"2":{"1042":1}}],["三种",{"2":{"814":1}}],["三种渲染器并存",{"2":{"730":1,"731":1}}],["三种渲染模式",{"2":{"728":1}}],["三种消费模式",{"0":{"634":1}}],["三种编程范式速览",{"0":{"559":1}}],["三不要",{"0":{"611":1},"1":{"612":1,"613":1,"614":1},"2":{"615":1}}],["三要",{"0":{"607":1},"1":{"608":1,"609":1,"610":1},"2":{"615":1}}],["三款均基于",{"2":{"565":1}}],["三款工具横向对比",{"0":{"565":1}}],["三大核心能力",{"2":{"564":2}}],["三步感受",{"2":{"559":1}}],["三步走工作流",{"2":{"494":1}}],["三类",{"2":{"1031":2}}],["三类模型服务的核心差异",{"2":{"519":1}}],["三类常见",{"0":{"452":1},"1":{"453":1,"454":1,"455":1}}],["三级能力矩阵",{"2":{"459":1}}],["三级价格歧视",{"2":{"397":1}}],["促使用户转化和付费",{"2":{"397":1}}],["察人性",{"2":{"397":1}}],["租房案例中",{"2":{"394":1}}],["沉没成本描述的是已经发生且与当前决策无关的费用",{"2":{"393":1}}],["沉没成本",{"2":{"393":1}}],["沉淀出了多种主流的",{"2":{"957":1}}],["沉淀理解",{"2":{"631":1}}],["沉淀在书中的信息",{"2":{"606":1}}],["沉淀为一套稳定的工程范式",{"2":{"525":1}}],["沉淀团队的代码评审流程",{"2":{"437":1}}],["沉淀持久上下文的",{"2":{"437":1}}],["沉淀特定领域的操作最佳实践",{"2":{"436":1}}],["沉淀",{"0":{"375":1},"2":{"371":1,"628":1}}],["沉淀复用资产",{"2":{"297":1}}],["逛遍景点再说",{"2":{"393":1}}],["锁定效应",{"2":{"392":1}}],["涨价不仅面临博弈风险",{"2":{"392":1}}],["肥宅快乐水",{"2":{"392":1}}],["竞品速览",{"2":{"518":1}}],["竞品分析",{"2":{"518":1}}],["竞争分析命令",{"2":{"470":1}}],["竞争",{"2":{"392":1}}],["竞争博弈的经典案例",{"2":{"392":1}}],["竞技游戏",{"2":{"116":1}}],["昂贵资产",{"2":{"391":1}}],["冰柜里的存储空间不仅是资源",{"2":{"391":1}}],["冰柜不仅昂贵",{"2":{"391":1}}],["冰冷的逻辑机器",{"2":{"366":1}}],["利润通过极致的规模化获得",{"2":{"392":1}}],["利乐纸易塑形",{"2":{"391":1}}],["利用包围盒",{"2":{"769":1}}],["利用工具来施展",{"2":{"412":1}}],["利用边际效用递减",{"2":{"398":1}}],["利用替代成本构建锁定效应",{"2":{"398":1}}],["利用沉没成本",{"2":{"398":2}}],["利用比较优势寻找产品核心竞争优势",{"2":{"396":1}}],["利用供求关系发现市场蓝海",{"2":{"396":1}}],["利用索引友好",{"2":{"311":1}}],["利用构建工具的代码分割功能实现按需加载",{"2":{"308":1}}],["利用交叉类型组合多个独立的能力",{"2":{"248":1}}],["利用交叉类型创建名义上不同的类型",{"2":{"247":1}}],["利用",{"2":{"110":1,"170":1,"188":1,"244":1,"308":1,"412":1,"416":1,"425":1,"542":1,"557":1,"603":1,"965":3,"1000":1,"1002":1}}],["考虑滞后效应",{"2":{"389":1}}],["考量点",{"2":{"121":1}}],["没说什么",{"2":{"625":1}}],["没反应",{"2":{"388":1}}],["没有清晰的认清问题本质",{"2":{"1030":1}}],["没有自由式",{"2":{"1030":1}}],["没有失败测试就没有产品代码",{"2":{"989":1}}],["没有原生的多行文本宽度收缩适配",{"2":{"784":1}}],["没有人有义务把复杂的底层逻辑拆解成现成的方法论",{"2":{"619":1}}],["没有沉下心来对技术或业务进行深度解析与架构思考",{"2":{"617":1}}],["没有疾病",{"2":{"605":1}}],["没有产品力的工程师",{"2":{"556":1}}],["没有输出的思考",{"2":{"375":1}}],["没有模块化机制",{"2":{"298":1}}],["没有唯一标识的对象",{"2":{"278":1}}],["没有匹配的重载签名",{"2":{"238":1}}],["没有任何值能满足",{"2":{"237":1}}],["没有任何实际收益",{"2":{"54":1}}],["没有",{"2":{"77":2,"132":1,"316":1,"450":1,"971":1}}],["没有交互",{"2":{"54":1}}],["往复",{"2":{"686":1}}],["往日之不可追",{"2":{"393":1}}],["往热水方向拧了一点",{"2":{"388":1}}],["往往都是稀疏且简单的",{"2":{"1015":1}}],["往往难以在开发效率",{"2":{"965":1}}],["往往比看一部电视剧或漫无目的地浏览网页能获得更多知识",{"2":{"606":1}}],["往往比获取数据更复杂",{"2":{"92":1}}],["往往超过看几部剧",{"2":{"606":1}}],["往往逻辑性强",{"2":{"606":1}}],["往往源于敢于挑战",{"2":{"601":1}}],["往往会逐渐膨胀",{"2":{"575":1}}],["往往会因为任务链信息量太大而信息量太大而陷入",{"2":{"415":1}}],["往往表现得像一个",{"2":{"530":1}}],["往往被无限期搁置",{"2":{"528":1}}],["往往就藏在那些看不见的连接关系里",{"2":{"383":1}}],["往往就是下一款好产品的起点",{"2":{"376":1}}],["往往能从你忽略的历史背景",{"2":{"375":1}}],["往往不是屏幕上的像素",{"2":{"367":1}}],["往往是思考的深度和执行的颗粒度不到位",{"2":{"622":1}}],["往往是为了解答",{"2":{"609":1}}],["往往是潜意识在极短时间内完成的高维计算",{"2":{"364":1}}],["往往是正确答案",{"2":{"54":1}}],["往往发生在三个维度的交汇点",{"2":{"363":1}}],["往往需要数周时间",{"2":{"361":1}}],["性味平衡",{"2":{"1025":1}}],["性价比",{"2":{"528":1}}],["性价比高",{"2":{"512":1}}],["性格迥然不同",{"2":{"387":1}}],["性能指标要求",{"2":{"965":1}}],["性能与工程",{"2":{"963":1}}],["性能与网络优化",{"2":{"85":1}}],["性能基准面快照",{"2":{"790":1}}],["性能基准测试",{"2":{"763":1}}],["性能快照",{"2":{"790":2}}],["性能吞吐量对比",{"2":{"790":1}}],["性能测试",{"2":{"677":1}}],["性能问题排查时",{"2":{"592":1}}],["性能开销",{"2":{"292":1}}],["性能优先",{"2":{"759":1}}],["性能优化的",{"0":{"313":1}}],["性能优化",{"2":{"291":1,"341":1,"680":1,"734":1,"735":1}}],["性能优秀",{"2":{"287":1}}],["性能差",{"2":{"287":1}}],["性能更好",{"2":{"203":1}}],["性能体系的核心支柱",{"2":{"73":1}}],["性能进阶",{"0":{"73":1},"1":{"74":1,"75":1,"76":1,"77":1,"78":1}}],["性能极致",{"2":{"20":1}}],["性能",{"2":{"3":1,"331":1,"988":1}}],["撞上了",{"2":{"387":1}}],["凡是有",{"2":{"387":1}}],["凡是需要",{"2":{"116":1}}],["频谱分析",{"2":{"763":1}}],["频发",{"2":{"386":1}}],["频繁触发重新构建",{"2":{"19":1}}],["马太效应",{"2":{"386":1,"1008":1}}],["吸取医生的建议",{"2":{"1025":1}}],["吸引的用户就越多",{"2":{"386":1}}],["吸收",{"2":{"244":1,"622":1}}],["造就指数级增长",{"0":{"386":1}}],["造成了带宽的极大浪费",{"2":{"103":1}}],["种方案",{"2":{"987":1}}],["种常见借口",{"2":{"986":1}}],["种常见借口并逐条反制",{"2":{"975":1}}],["种语言",{"2":{"790":1}}],["种模式",{"2":{"789":1}}],["种段类型",{"2":{"786":1}}],["种辅助器",{"2":{"763":1}}],["种几何体",{"2":{"763":1}}],["种不同组合的产物文件",{"2":{"751":1}}],["种不同体积的产物",{"2":{"730":1}}],["种产物组合",{"2":{"735":1}}],["种对象池减少",{"2":{"730":1}}],["种",{"2":{"730":1,"805":1}}],["种形状修饰器",{"2":{"730":1}}],["种组件",{"2":{"706":1}}],["种实现",{"2":{"706":1}}],["种图表",{"2":{"706":2}}],["种图表类型",{"2":{"701":1}}],["种坐标系",{"2":{"701":1}}],["种内置滤镜",{"2":{"672":1}}],["种连接关系",{"2":{"383":1}}],["种要素",{"2":{"383":1}}],["滞后效应让原本在空间维度上就很复杂的系统",{"2":{"388":1}}],["滞后效应",{"0":{"388":1},"2":{"383":2,"388":1}}],["岗位",{"2":{"383":1}}],["几乎每个角色实际上都至少通过另外某一个人发生人际关系",{"2":{"1006":1}}],["几乎所有项目",{"2":{"958":1}}],["几何测量",{"2":{"797":1}}],["几何数据",{"2":{"766":1}}],["几何数据容器",{"2":{"766":1}}],["几何节点",{"2":{"763":1}}],["几何体修改器",{"2":{"763":1}}],["几何体管理",{"2":{"763":1}}],["几何体",{"2":{"759":1,"763":1}}],["几何碰撞计算",{"2":{"673":1}}],["几秒钟即可获得",{"2":{"515":1}}],["几秒~几十秒",{"2":{"130":1}}],["几百个微小的齿轮和游丝",{"2":{"383":1}}],["叫做",{"2":{"382":1}}],["黑白灰",{"2":{"963":1}}],["黑名单机制",{"2":{"597":1}}],["黑名单",{"2":{"594":1}}],["黑盒",{"2":{"509":1}}],["黑盒子才是规律产生的原因",{"2":{"1007":1}}],["黑盒子",{"2":{"382":1,"1007":1}}],["黑箱",{"2":{"255":1}}],["线条",{"2":{"763":1}}],["线条材质",{"2":{"763":1}}],["线图",{"2":{"706":1}}],["线段长度池",{"2":{"735":1}}],["线段",{"2":{"677":1,"763":2}}],["线索生长出来的",{"2":{"609":1}}],["线性缓动",{"2":{"819":1}}],["线性雾",{"2":{"763":1}}],["线性",{"2":{"743":1}}],["线性的技能叠加",{"2":{"553":1}}],["线性累加",{"2":{"47":1}}],["线上问题频发",{"2":{"387":1}}],["线上故障率",{"2":{"385":1}}],["线上出现了一个偶现的",{"2":{"382":1}}],["找准自己的生态位",{"0":{"552":1}}],["找准一个社区",{"2":{"381":1}}],["找一道类似的题试试看",{"2":{"494":1}}],["找出初步结果中的不足",{"2":{"426":1}}],["找到最接近真相的答案",{"2":{"1014":1}}],["找到行尾",{"2":{"892":1}}],["找到刚好容纳所有文本的最小宽度",{"2":{"803":1}}],["找到一种既不伤害核心用户体验",{"2":{"394":1}}],["找到调节回路",{"2":{"389":1}}],["找到增强回路",{"2":{"389":1}}],["找到关键因果链",{"2":{"389":1}}],["找到核心存量",{"2":{"389":1}}],["找到正确的问题",{"2":{"357":1}}],["找到返回匹配项",{"2":{"259":1}}],["找到冒号位置",{"2":{"143":1}}],["娱乐",{"2":{"380":1}}],["早餐",{"2":{"1045":1,"1046":1,"1047":1}}],["早饭吃得好",{"2":{"1043":1}}],["早防早治",{"2":{"1025":1}}],["早在几年前",{"2":{"1017":1}}],["早早交付的敏捷性",{"2":{"378":1}}],["早期信息被稀释",{"2":{"468":1}}],["早期删减了复杂的格式兼容",{"2":{"373":1}}],["早期发现用户不愿预订",{"2":{"366":1}}],["早期利用病毒式裂变降低获客成本",{"2":{"363":1}}],["早期",{"2":{"298":1,"320":1}}],["雇佣软件而不是雇佣人力",{"2":{"378":1}}],["亦能通过技术手段实现无缝流转",{"2":{"378":1}}],["譬如",{"2":{"378":1}}],["身为新时代的打工人",{"2":{"1043":1}}],["身体康复了",{"2":{"1043":1}}],["身体却因原本在大学时没有怎么在意",{"2":{"1043":1}}],["身材无敌",{"2":{"1043":1}}],["身边充斥着讲这个方面的人和书",{"2":{"1034":1}}],["身边充满着太多类似笔者这种不够注重自身健康的人",{"2":{"1022":1}}],["身处时间碎片化",{"2":{"1034":1}}],["身处一个知识迭代速度和生活节奏都在加快的时代",{"2":{"1029":1}}],["身处当下的技术变革期",{"2":{"378":1}}],["身份验证",{"2":{"851":1}}],["身份验证不便",{"2":{"135":1}}],["唯有在框架生态",{"2":{"965":1}}],["唯有能用自己的语言让别人听懂",{"2":{"610":1}}],["唯有拥抱",{"2":{"598":1}}],["唯有洞察力和对业务流的把控力",{"2":{"552":1}}],["唯有当用户为这个人工流程付费后",{"2":{"378":1}}],["唯寄相思入梦华",{"2":{"508":1}}],["唯一合法出口",{"2":{"995":1}}],["唯一真理来源",{"2":{"966":1}}],["唯一",{"2":{"663":1}}],["唯一的路径是重构和精进自己",{"2":{"622":1}}],["唯一的重点是",{"2":{"164":1}}],["唯一路径是",{"2":{"622":1}}],["唯一标识符",{"2":{"952":1}}],["唯一标识",{"2":{"14":1,"442":1,"777":1,"834":1}}],["总体重需要呈现下降确实",{"2":{"1048":1}}],["总体重",{"2":{"1048":1}}],["总迭代次数",{"2":{"834":1}}],["总持续时间",{"2":{"834":1}}],["总文件数",{"2":{"699":1,"728":1}}],["总有效源文件",{"2":{"643":1}}],["总是使用自定义日志模块",{"2":{"571":1}}],["总是在实现之前编写测试",{"2":{"571":1}}],["总是被各种",{"2":{"382":1}}],["总而言之",{"2":{"509":1}}],["总产出就是零",{"2":{"458":1}}],["总的来说",{"2":{"431":1}}],["总能用技术手段帮大家搞定繁琐工作",{"2":{"377":1}}],["总结与反思",{"0":{"381":1}}],["总结与选型建议",{"0":{"165":1},"1":{"166":1,"167":1,"168":1}}],["总结的复杂问题",{"2":{"349":1}}],["总结",{"0":{"20":1,"250":1,"389":1,"400":1,"456":1,"495":1},"2":{"412":1,"514":1,"515":6,"628":1}}],["心理健康",{"2":{"1025":1}}],["心中有数",{"2":{"1015":3}}],["心脏起搏器",{"2":{"985":1}}],["心智负担",{"2":{"965":1}}],["心流",{"2":{"564":1,"565":2}}],["心存敬畏",{"2":{"376":1}}],["心跳与重连机制",{"2":{"860":1}}],["心跳系统",{"2":{"827":1}}],["心跳检测",{"2":{"117":1}}],["心跳保活或消息确认等机制",{"2":{"117":1}}],["品牌色",{"2":{"962":1}}],["品牌动效",{"2":{"729":1}}],["品牌使用指南",{"2":{"436":1}}],["品牌忠诚",{"2":{"398":1}}],["品位",{"2":{"376":1}}],["品味",{"0":{"359":1},"2":{"359":2}}],["洞察力模型就是",{"2":{"1007":1}}],["洞察力公式",{"0":{"366":1}}],["洞察更优路径的时机",{"2":{"1005":1}}],["洞察未言之意",{"0":{"625":1}}],["洞察层",{"2":{"558":1}}],["洞察趋势前瞻",{"2":{"459":1}}],["洞察不仅是关于需求",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1}}],["洞察",{"2":{"376":1}}],["假想敌",{"2":{"375":1}}],["假设一个方程代表从一个角度观察得到的结果",{"2":{"1014":1}}],["假设两家公司生产同质化产品",{"2":{"392":1}}],["假设挑战",{"2":{"366":1}}],["假设我们需要处理一些数学运算",{"2":{"295":1}}],["假设我们有一个电商平台",{"2":{"288":1}}],["假设最少",{"2":{"198":1}}],["假设",{"2":{"125":1}}],["了",{"2":{"528":1,"1036":1}}],["了什么",{"2":{"373":1}}],["了解一些常识",{"2":{"1048":1}}],["了解某个技能或东西",{"2":{"1030":1}}],["了解了",{"2":{"1000":1}}],["了解了上述核心配置选项后",{"2":{"204":1}}],["了解",{"2":{"622":1}}],["了解轮询与短连接",{"2":{"156":1}}],["虚线材质",{"2":{"763":1}}],["虚线偏移",{"2":{"743":1}}],["虚线属性",{"2":{"735":1}}],["虚荣",{"2":{"373":1}}],["虚拟化产品了",{"2":{"1041":1}}],["虚拟化聊天",{"2":{"790":1}}],["虚拟社区",{"2":{"1041":1}}],["虚拟滚动高度预测",{"2":{"810":1}}],["虚拟列表",{"2":{"647":1}}],["虚拟健康助手基于可穿戴设备数据提供",{"2":{"407":1}}],["虚拟",{"2":{"179":1}}],["掌控感",{"2":{"372":1}}],["掌握高维信息的人确实拥有更强的资源调配能力",{"2":{"619":1}}],["掌握方法",{"2":{"615":1}}],["掌握思考方法的唯一途径",{"2":{"608":1}}],["掌握逆风而行的主动权",{"2":{"603":1}}],["掌握编程语言的数量",{"2":{"553":1}}],["掌握了这套生态的协同机制",{"2":{"440":1}}],["掌握",{"2":{"316":1,"456":1}}],["掌握一些模块化设计的原则和实践技巧",{"2":{"293":1}}],["掌握泛型意味着站在了类型系统的高阶入口",{"2":{"263":1}}],["掌握泛型需要遵循一些业界总结的最佳实践",{"2":{"263":1}}],["掌握这类",{"2":{"491":1}}],["掌握这个模型",{"2":{"250":1}}],["掌握这些编译与调试的核心技能",{"2":{"226":1}}],["键时的毫秒级响应",{"2":{"372":1}}],["爽",{"2":{"372":1}}],["录屏",{"2":{"372":1}}],["惊鸿",{"2":{"508":1}}],["惊鸿照影浮光碎",{"2":{"508":1}}],["惊叹",{"2":{"372":1}}],["惊群效应",{"2":{"158":1}}],["捕捉情绪颗粒度",{"0":{"372":1}}],["捕获异常",{"2":{"98":1}}],["千帆平台支持",{"2":{"512":1}}],["千丈外",{"2":{"507":1}}],["千秋一赋动心弦",{"2":{"505":1}}],["千万不要只停留在消费者的视角感叹",{"2":{"371":1}}],["千级以上",{"2":{"46":1}}],["四处看一看后",{"2":{"1043":1}}],["四平八稳",{"2":{"1043":1}}],["四象限",{"2":{"1011":1}}],["四个维度圈示意图",{"2":{"1006":1}}],["四元数",{"2":{"763":1}}],["四阶段流水线",{"0":{"633":1}}],["四肢",{"2":{"544":1}}],["四步法",{"0":{"446":1},"1":{"447":1,"448":1,"449":1,"450":1}}],["四步闭环",{"2":{"371":1}}],["四大核心模块构成",{"2":{"408":1}}],["四种类型",{"2":{"814":1}}],["四种输出模式",{"2":{"790":1,"797":2}}],["四种策略",{"0":{"63":1}}],["四种方案各自的原理",{"2":{"21":1}}],["魔法",{"0":{"371":1},"1":{"372":1,"373":1,"374":1,"375":1},"2":{"371":1}}],["魔力指标",{"2":{"350":1}}],["摩擦力日记",{"0":{"370":1}}],["损失函数",{"2":{"369":1}}],["练习方法",{"2":{"369":1,"370":1}}],["喂数据",{"2":{"367":1}}],["喂给",{"2":{"171":1}}],["哪里没有时间",{"2":{"1037":1}}],["哪里有刹车",{"2":{"389":1}}],["哪种方式不好",{"2":{"1030":1}}],["哪些完全禁止",{"2":{"593":1}}],["哪些需要确认",{"2":{"593":1}}],["哪些操作可以直接执行",{"2":{"593":1}}],["哪些必须交由",{"2":{"541":1}}],["哪些只能往后放",{"2":{"528":1}}],["哪些任务值得投入时间",{"2":{"528":1}}],["哪些被长期忽视的",{"2":{"525":1}}],["哪些执行环节最消耗你的时间",{"2":{"462":1}}],["哪些环节必须由传统代码",{"2":{"367":1}}],["哪怕决断错了也要干",{"2":{"1037":1}}],["哪怕只是一个自动化脚本",{"2":{"465":1}}],["哪怕只涨一点点",{"2":{"392":1}}],["哪怕早期模型偶尔会出现幻觉",{"2":{"350":1}}],["哪怕你从",{"2":{"336":1}}],["照片认证",{"2":{"366":1}}],["房东验证",{"2":{"366":1}}],["信任陌生房东",{"2":{"366":1}}],["信息化",{"2":{"1031":1}}],["信息熵越来越大",{"2":{"1007":1}}],["信息统计",{"2":{"777":1}}],["信息更新回调",{"2":{"662":1}}],["信息密度已趋于饱和的",{"2":{"629":1}}],["信息落地清单",{"2":{"626":1}}],["信息不真实",{"2":{"626":1}}],["信息不对称的根源",{"2":{"622":1}}],["信息不对称",{"2":{"616":1}}],["信息解读",{"0":{"625":1}}],["信息焦虑",{"2":{"624":1}}],["信息筛选",{"0":{"624":1}}],["信息无法转化为任何价值",{"2":{"622":1}}],["信息本质是工具",{"2":{"622":1}}],["信息积累不够",{"2":{"621":1}}],["信息即权力",{"2":{"619":1}}],["信息泛滥与脑力带宽的消耗",{"0":{"619":1},"1":{"620":1,"621":1}}],["信息茧房",{"0":{"618":1}}],["信息媒介的演进始终朝着",{"2":{"613":1}}],["信息检索",{"2":{"512":1}}],["信息图等形式直观呈现分析结果",{"2":{"468":1}}],["信息层级是否清晰",{"2":{"460":1}}],["信息调研流程",{"2":{"436":1}}],["信息差",{"0":{"616":1},"1":{"617":1,"618":1},"2":{"411":1,"622":1}}],["信息收集",{"2":{"406":1}}],["信息",{"2":{"103":1,"622":1}}],["飞线",{"2":{"706":1}}],["飞书旗下会议智能转录与总结服务",{"2":{"515":1}}],["飞书妙记",{"2":{"515":4}}],["飞书智能创作生成纪要",{"2":{"515":1}}],["飞书智能创作",{"2":{"515":3}}],["飞书",{"2":{"512":2,"515":3}}],["飞书聊天",{"2":{"116":1}}],["飞机",{"2":{"366":1}}],["火车",{"2":{"366":1}}],["质疑一切",{"2":{"366":1}}],["质量门",{"2":{"987":1}}],["质量保证",{"2":{"647":2,"677":6,"706":4,"790":33,"819":3,"851":1,"939":19,"980":29}}],["质量底线",{"0":{"538":1}}],["质量的密度才是衡量",{"2":{"526":1}}],["质量检查清单",{"0":{"450":1}}],["质量",{"2":{"270":1,"358":1}}],["透彻",{"2":{"1009":1}}],["透视投影相机",{"2":{"763":1,"778":1}}],["透明度",{"2":{"771":1}}],["透明度等",{"2":{"715":1}}],["透明度等变换属性",{"2":{"680":1}}],["透明性",{"2":{"427":1}}],["透过表象",{"2":{"383":1}}],["透过表皮看骨架",{"2":{"373":1}}],["透过现象看本质的能力",{"2":{"366":1}}],["透传到外部工具",{"2":{"855":1}}],["透传错误信息",{"2":{"150":1}}],["透传机制",{"2":{"98":1}}],["某天",{"2":{"1038":1}}],["某条直线只要稍微变化一点",{"2":{"1014":1}}],["某次",{"2":{"592":1}}],["某电商",{"2":{"366":1}}],["某个功能的转化率不及预期",{"2":{"382":1}}],["某个",{"2":{"92":1}}],["情感",{"2":{"1006":1}}],["情感递进",{"2":{"508":1}}],["情感升华‌",{"2":{"505":1}}],["情绪消耗大",{"2":{"465":2}}],["情绪捕捉",{"2":{"366":1}}],["情境代入",{"2":{"366":1}}],["痛苦的根源是什么",{"2":{"366":1}}],["痛点捕获",{"2":{"541":1}}],["痛点和期望",{"2":{"396":1}}],["痛点烈度",{"2":{"365":1}}],["痛点解决与工程价值",{"0":{"297":1}}],["痛点",{"2":{"103":1,"131":1,"142":1,"376":1}}],["批准执行",{"2":{"999":1}}],["批准设计",{"2":{"999":1}}],["批判",{"2":{"609":1}}],["批判性思考",{"2":{"628":1}}],["批判性思维不是",{"2":{"366":1}}],["批判性思维",{"2":{"366":1}}],["批判性思维让你追问",{"2":{"366":1}}],["批判性思维告诉你",{"2":{"366":2}}],["批判性思维提供",{"2":{"366":1}}],["批判性审美",{"2":{"533":1}}],["批驳或赞同某个特定的观点",{"2":{"609":1}}],["批量执行",{"2":{"980":1}}],["批量执行替代方案",{"2":{"979":1}}],["批量更新优化",{"2":{"945":1}}],["批量合并渲染",{"2":{"763":1,"769":1}}],["批量控制一组动画的生命周期",{"2":{"822":1}}],["批量控制",{"2":{"763":1,"819":1}}],["批量渲染",{"2":{"679":1}}],["批量绘制",{"2":{"676":1,"677":1}}],["批量分配修复任务",{"2":{"568":1}}],["批量",{"2":{"568":1,"806":1}}],["批量导出",{"2":{"310":1}}],["批量数据导出进度",{"2":{"167":1}}],["笨办法",{"2":{"365":1}}],["留在",{"2":{"577":1}}],["留白",{"2":{"508":1}}],["留存",{"2":{"365":1}}],["留出",{"2":{"75":1}}],["排列与组合",{"0":{"1013":1},"2":{"1013":2}}],["排列组合方面也尚可",{"2":{"1011":1}}],["排列",{"2":{"1011":1}}],["排版与色彩",{"2":{"965":1}}],["排版工具类",{"2":{"647":1}}],["排序",{"2":{"656":1,"715":1}}],["排序存储",{"2":{"652":1}}],["排不上优先级",{"2":{"528":1}}],["排名",{"2":{"472":1}}],["排查问题非常直观",{"2":{"961":1}}],["排查问题时",{"2":{"198":1}}],["排查",{"2":{"405":1}}],["排期优先级",{"2":{"365":1}}],["明明写了",{"2":{"961":1}}],["明",{"2":{"507":1}}],["明天就能上线",{"2":{"363":1}}],["明确自己当前的定位",{"2":{"1031":1}}],["明确自身阶段目标",{"2":{"624":1}}],["明确告诉",{"2":{"583":1}}],["明确告诉世界",{"2":{"380":1}}],["明确知道哪些场景适合用传统的",{"2":{"541":1}}],["明确使用场景与边界",{"0":{"447":1}}],["明确定义",{"2":{"445":1}}],["明确行动的范围",{"2":{"412":1}}],["明确了谁依赖谁",{"2":{"297":1}}],["明确各层职责",{"2":{"282":1}}],["明确实体",{"2":{"282":1}}],["明确领域的边界",{"2":{"277":1}}],["明确的",{"2":{"585":1}}],["明确的类型约束",{"2":{"270":1}}],["明确的层级关系",{"2":{"240":1}}],["明确泛型参数的预期类型范围",{"2":{"264":1}}],["明确类型意图",{"2":{"253":1}}],["明确项目间的依赖关系",{"2":{"207":1}}],["明确核心目标",{"2":{"201":1}}],["伪元素组合以及第三方黑盒组件时的短板",{"2":{"968":1}}],["伪随机数种子生成器",{"2":{"735":1}}],["伪代码",{"2":{"640":1}}],["伪需求",{"2":{"363":1}}],["伪实现",{"2":{"103":1}}],["剩下",{"2":{"494":1,"495":1}}],["剩下的",{"2":{"362":1,"968":1}}],["剩余分支自动推断",{"2":{"231":1}}],["杰出成就的累积效应是被严重低估的",{"2":{"361":1}}],["伟大的突破往往无法被预设",{"2":{"598":1}}],["伟大的产品往往由它不做什么来定义",{"2":{"373":1}}],["伟大",{"2":{"360":1}}],["伟大成就指南",{"2":{"357":1}}],["智力",{"2":{"1006":1}}],["智力诚实",{"2":{"360":2}}],["智谱",{"2":{"522":3}}],["智谱清言是由智谱ai推出的国产大模型应用平台",{"2":{"512":1}}],["智谱清言",{"2":{"512":2}}],["智能手表具有手表+数据收集与分析",{"2":{"1041":1}}],["智能时代",{"2":{"1032":1}}],["智能解决",{"2":{"964":1}}],["智能搜索",{"2":{"851":1}}],["智能提交已",{"2":{"581":1}}],["智能提示依赖类型导出",{"2":{"673":1}}],["智能提示",{"2":{"216":1}}],["智能补全与对话式改代码",{"2":{"564":1}}],["智能补全",{"2":{"564":1}}],["智能化解决工作",{"2":{"515":1}}],["智能助理",{"2":{"512":1}}],["智能创作",{"2":{"512":1}}],["智能问答",{"2":{"512":1}}],["智能家居等现实交互场景中大放异彩",{"2":{"418":1}}],["智能体工程",{"0":{"542":1}}],["智能体工作流",{"2":{"367":1}}],["智能体名称",{"2":{"499":1}}],["智能体的竞争焦点将从单纯的推理速度转向",{"2":{"419":1}}],["智能体操作系统",{"2":{"419":1}}],["智能体接收到模糊目标",{"2":{"414":1}}],["智能体",{"2":{"402":1,"434":1,"441":1,"470":1,"471":1}}],["智能体应用时",{"2":{"101":1}}],["抵抗",{"0":{"360":1}}],["说服心理学原则",{"2":{"980":1}}],["说了什么",{"2":{"625":1}}],["说起话来头头是道",{"2":{"612":1}}],["说",{"0":{"560":1},"1":{"561":1,"562":1},"2":{"933":1,"1008":1}}],["说的那样",{"2":{"360":1}}],["说的",{"2":{"358":1}}],["说明什么情况下命令应该拒绝执行或提示用户",{"2":{"583":1}}],["说明这个目录的作用",{"2":{"573":2}}],["说明细致清晰",{"2":{"504":1}}],["说明技能功能",{"2":{"448":1}}],["说明描述太抽象",{"2":{"445":1}}],["说明实践方法",{"2":{"182":1}}],["说明",{"2":{"19":1,"36":1,"103":2,"107":1,"111":1,"112":1,"120":1,"121":1,"125":1,"170":1,"181":1,"200":1,"207":1,"208":1,"209":1,"216":1,"226":1,"227":1,"250":1,"255":1,"256":1,"270":1,"274":1,"275":1,"286":1,"297":2,"304":1,"305":1,"307":1,"410":1,"411":1,"412":1,"436":1,"441":1,"451":1,"467":1,"471":2,"478":1,"570":2,"672":1,"697":1,"814":1,"822":1,"859":1,"873":1,"874":1,"875":1,"910":1,"956":1,"958":1,"959":1,"961":1,"962":1,"971":1}}],["远裁剪面距离",{"2":{"778":1}}],["远高于单纯的信息壁垒",{"2":{"622":1}}],["远超在",{"2":{"358":1}}],["远程子",{"2":{"934":1,"939":1}}],["远程子应用配置",{"2":{"288":1}}],["远程",{"2":{"933":1,"934":1}}],["远程办公",{"2":{"601":1}}],["远程入口文件",{"2":{"288":1}}],["撰写基础文案甚至简单的数据分析",{"2":{"357":1}}],["画布",{"2":{"942":1}}],["画布高度",{"2":{"719":1}}],["画布宽度",{"2":{"719":1}}],["画布抽象",{"2":{"677":1,"679":1}}],["画布应用",{"2":{"671":1}}],["画个简单的图示",{"2":{"494":1}}],["画图",{"2":{"357":1}}],["画出什么",{"2":{"59":1}}],["爆发的当下",{"2":{"357":1}}],["格雷厄姆所说",{"2":{"362":1}}],["格雷厄姆",{"2":{"357":1}}],["格式生成和传递丰富的交互式用户界面",{"2":{"933":1}}],["格式的字节流",{"2":{"892":1}}],["格式解析流水线",{"2":{"882":1}}],["格式解析",{"2":{"882":1}}],["格式产物",{"2":{"735":2}}],["格式转换",{"2":{"706":1,"763":1}}],["格式为",{"2":{"581":1}}],["格式分割",{"2":{"507":1}}],["格式规范",{"2":{"450":1,"583":1}}],["格式化",{"2":{"706":2}}],["格式化显示",{"2":{"281":1}}],["格式化工具",{"2":{"274":1}}],["格式化输出",{"2":{"203":1,"855":1}}],["格式数据",{"2":{"153":1}}],["格式",{"0":{"778":1,"866":1},"2":{"141":1,"143":1,"144":1,"150":1,"414":1,"435":1,"451":2,"576":1,"735":1,"751":1,"763":2,"859":1,"874":2,"887":2,"898":1,"952":1,"970":1,"979":1}}],["什么才算得上是真正的稀缺",{"2":{"457":1}}],["什么才是核心壁垒",{"0":{"357":1}}],["什么情况下它应该停止尝试",{"2":{"450":1}}],["什么",{"2":{"367":2}}],["什么是好代码",{"2":{"539":1}}],["什么是噪音",{"2":{"460":1}}],["什么是核心",{"2":{"460":1}}],["什么是",{"0":{"173":2,"402":1},"2":{"532":1}}],["仍是被动响应的",{"2":{"355":1}}],["仍是更合适的选择",{"2":{"155":1}}],["档服务",{"2":{"354":1}}],["巧妙地利用了这一点",{"2":{"354":1}}],["巧妙地实现了请求分流",{"2":{"159":1}}],["广大游客来宋城的目的是游玩",{"2":{"1016":1}}],["广告竞价",{"2":{"354":1}}],["广泛用于开源项目",{"2":{"345":1}}],["追加",{"2":{"947":1}}],["追加数据",{"2":{"719":1}}],["追踪",{"2":{"642":1}}],["追踪尾部延迟",{"0":{"353":1}}],["追问",{"2":{"518":1,"965":1}}],["追问技巧",{"2":{"518":1}}],["追问为什么",{"2":{"366":1}}],["追求差",{"0":{"620":1}}],["追求",{"2":{"565":1}}],["追求口碑最佳",{"2":{"565":1}}],["追求研发效率的开发者",{"2":{"564":1}}],["追求低成本开源部署",{"2":{"510":1}}],["追求帕累托改进与外部性管理",{"2":{"399":1}}],["追求帕累托改进与管理外部性",{"0":{"399":1}}],["追求极速与零产物膨胀",{"2":{"965":1}}],["追求极端",{"2":{"387":1,"1009":1}}],["追求极致的现代前端审美",{"2":{"100":1}}],["追求长期成长的优秀同路人",{"2":{"380":1}}],["追求敏捷开发",{"2":{"342":1}}],["检测环境→呈现选项→执行清理",{"2":{"980":1}}],["检测",{"2":{"789":2,"790":1,"796":2}}],["检验真知",{"2":{"615":1}}],["检验理解的试金石",{"0":{"610":1}}],["检索完整响应",{"2":{"858":1}}],["检索力",{"2":{"603":1}}],["检索",{"2":{"417":1}}],["检索质量",{"2":{"352":1}}],["检索增强生成",{"2":{"352":1,"536":1}}],["检查是否遗漏需求",{"2":{"988":1}}],["检查是否",{"2":{"986":1}}],["检查适用技能",{"2":{"982":1}}],["检查安装",{"2":{"869":1}}],["检查并创建到期图层",{"2":{"741":1}}],["检查逻辑错误",{"2":{"591":1}}],["检查漏洞",{"2":{"586":1}}],["检查清单等",{"2":{"994":1}}],["检查清单长",{"2":{"587":1}}],["检查清单",{"2":{"586":1}}],["检查范围",{"2":{"583":1}}],["检查",{"2":{"484":1,"542":1,"581":1,"790":2,"860":2}}],["检查mybatis映射文件",{"2":{"199":1}}],["检查项",{"2":{"169":1}}],["检查响应是否成功且内容类型匹配",{"2":{"150":1}}],["检查响应是否成功且内容类型为",{"2":{"144":1}}],["坚实的基石",{"2":{"1001":1}}],["坚决避开在",{"2":{"968":1}}],["坚决抵制为了",{"2":{"967":1}}],["坚决消灭硬编码",{"2":{"966":1}}],["坚决弃用",{"2":{"965":1}}],["坚决不能作为",{"2":{"173":1}}],["坚守",{"2":{"961":1}}],["坚持执行拆解后的目标",{"2":{"1048":1}}],["坚持长期主义",{"2":{"603":1}}],["坚持",{"2":{"564":1}}],["坚持比标准",{"2":{"352":1}}],["驯服幻觉",{"0":{"352":1}}],["认清书籍的局限性",{"2":{"614":1}}],["认真读一本好书",{"2":{"606":1}}],["认真读完一本好书",{"2":{"606":1}}],["认知三层塔",{"2":{"1001":1}}],["认知框架与执行系统",{"2":{"626":1}}],["认知高度",{"2":{"622":1}}],["认知操作系统",{"2":{"598":1}}],["认知栈",{"2":{"558":1}}],["认知对齐",{"2":{"366":1}}],["认为",{"2":{"350":1,"358":1,"1001":1}}],["认证模块",{"2":{"275":1,"429":1}}],["认证相关类型",{"2":{"274":1}}],["认证相关状态",{"2":{"274":1}}],["认证相关",{"2":{"274":2}}],["认证相关组件",{"2":{"274":1}}],["认证功能",{"2":{"274":1}}],["认证令牌",{"2":{"141":1,"144":1}}],["认证",{"2":{"8":1}}],["问倒",{"2":{"610":1}}],["问答机",{"2":{"402":1}}],["问答引擎",{"2":{"350":1}}],["问问自己",{"2":{"385":1}}],["问自己",{"2":{"372":1,"1007":1}}],["问题陈述",{"2":{"994":1}}],["问题情境",{"2":{"609":2}}],["问题发现",{"2":{"540":1}}],["问题发现者",{"2":{"358":1}}],["问题到验证",{"2":{"461":1}}],["问题空间",{"2":{"360":1}}],["问题不仅导向答案",{"2":{"358":1}}],["问题解决",{"2":{"199":1}}],["问题的根源往往不在于",{"2":{"169":1}}],["问题",{"2":{"29":1,"107":1,"377":1,"434":1,"437":2,"461":1,"491":1,"553":1,"1027":1}}],["条反制规则",{"2":{"986":1}}],["条形图",{"2":{"706":1}}],["条件等待",{"2":{"980":1}}],["条件等待技术",{"2":{"980":1}}],["条件构建器",{"2":{"647":1}}],["条件类型对裸类型参数分发",{"2":{"250":1}}],["条件类型会分发到每个成员",{"2":{"234":1}}],["条规则",{"2":{"577":1}}],["条蓝色链接是绝对的主角",{"2":{"350":1}}],["降级为",{"2":{"968":1}}],["降级备用",{"2":{"523":1}}],["降级链接的视觉权重",{"2":{"350":1}}],["降低门槛",{"2":{"963":1}}],["降低前端门槛",{"2":{"639":1}}],["降低主文件变动频率",{"2":{"577":1}}],["降低用户的挫败感",{"2":{"543":1}}],["降低每单位体积的存储成本",{"2":{"391":1}}],["降低心智负担",{"2":{"332":1}}],["降低了系统的整体复杂度",{"2":{"292":1,"296":1}}],["降低了心智负担",{"2":{"85":1}}],["降低技术债务",{"2":{"285":1}}],["降低维护成本",{"2":{"283":1}}],["降低系统复杂性并提高可维护性与可复用性",{"2":{"272":1}}],["降低开发",{"2":{"19":1}}],["降低开发成本",{"2":{"4":1}}],["创造一个角色",{"2":{"590":1}}],["创造者阶段",{"2":{"459":1}}],["创业者",{"2":{"561":1}}],["创业不过是水到渠成之事",{"2":{"377":1}}],["创意落地与小产品开发",{"2":{"1000":1}}],["创意设计师",{"2":{"813":1}}],["创意技术专家",{"2":{"757":1}}],["创意沉淀",{"2":{"540":1}}],["创意写作辅助",{"2":{"512":1}}],["创作",{"2":{"514":1}}],["创作诗歌",{"2":{"506":1}}],["创作思路和精灵寄语",{"2":{"505":2}}],["创作思路和灵感说明",{"2":{"504":1}}],["创作思路",{"2":{"504":2,"505":2,"506":1,"507":2,"508":2}}],["创作灵感等",{"2":{"501":1}}],["创作者",{"2":{"377":1}}],["创新",{"0":{"350":1}}],["创建日期",{"2":{"994":1}}],["创建的项目",{"2":{"960":1}}],["创建事件",{"2":{"951":1}}],["创建响应式原语",{"2":{"945":1}}],["创建具体模型实例",{"2":{"916":1}}],["创建作用域",{"2":{"835":1}}],["创建交错延迟",{"2":{"835":1}}],["创建弹簧缓动",{"2":{"835":1}}],["创建三次贝塞尔缓动",{"2":{"835":1}}],["创建动画时间线",{"2":{"835":1}}],["创建批量动画",{"2":{"835":1}}],["创建单次动画",{"2":{"835":1}}],["创建立方体",{"2":{"782":1}}],["创建场景",{"2":{"782":1}}],["创建计算管线",{"2":{"777":1}}],["创建渲染",{"2":{"951":1}}],["创建渲染管线",{"2":{"777":1}}],["创建渲染器",{"2":{"708":1}}],["创建对应的",{"2":{"741":1}}],["创建图层",{"2":{"734":1}}],["创建内部",{"2":{"708":1}}],["创建器",{"2":{"706":1}}],["创建元素",{"2":{"677":1}}],["创建根节点后",{"2":{"679":1}}],["创建根",{"2":{"649":1}}],["创建迁移文件",{"2":{"583":1}}],["创建一个动画",{"2":{"830":1}}],["创建一个笔记本",{"2":{"515":1}}],["创建一个",{"2":{"499":1}}],["创建一个简单的",{"2":{"223":1}}],["创建新项目",{"2":{"449":1}}],["创建订单及其订单项",{"2":{"278":1}}],["创建不同类型的配置映射",{"2":{"262":1}}],["创建模拟函数",{"2":{"225":1}}],["创建账号+返回id",{"2":{"201":1}}],["创建文本解码器",{"2":{"141":1}}],["创建时通知外部",{"2":{"120":1}}],["创建",{"2":{"14":1,"16":1,"144":1,"222":1,"654":1,"658":1,"680":1,"684":1,"686":1,"704":2,"705":1,"706":1,"708":1,"719":1,"735":2,"737":1,"770":1,"777":2,"889":1,"916":1,"941":2,"980":1,"982":1}}],["创建空间",{"2":{"14":1}}],["创建项目",{"2":{"13":1,"16":1}}],["股价",{"2":{"349":1}}],["股票行情",{"2":{"875":1}}],["股票价格",{"2":{"111":1}}],["股票",{"2":{"76":1}}],["股票交易平台",{"2":{"19":1}}],["知是行的开始",{"2":{"1042":1}}],["知是行的头脑",{"2":{"1042":1}}],["知行合一",{"2":{"1042":1}}],["知道",{"2":{"622":1}}],["知道每一块拼图的位置",{"2":{"332":1}}],["知而不行",{"2":{"441":1}}],["知识后",{"2":{"1018":1}}],["知识的世界",{"2":{"1007":1}}],["知识仓库的目录不是按主题或媒体类型划分的",{"2":{"630":1}}],["知识仓库目录划分与设计",{"0":{"630":1}}],["知识内化的价值最终通过输出来兑现",{"2":{"629":1}}],["知识萃取",{"2":{"628":1,"631":1}}],["知识以各种方式存在于社会的各个角落",{"2":{"614":1}}],["知识性书籍的诞生",{"2":{"609":1}}],["知识含量远超日常碎片化信息",{"2":{"606":1}}],["知识密度高",{"2":{"606":1}}],["知识密度远高于日常谈话或碎片内容",{"2":{"606":1}}],["知识输出与分享",{"2":{"515":1}}],["知识体系搭建",{"2":{"515":1}}],["知识分享",{"2":{"515":1}}],["知识卡片管理",{"2":{"515":1}}],["知识关联",{"2":{"514":1}}],["知识检索等服务",{"2":{"512":1}}],["知识检索等丰富场景",{"2":{"512":1}}],["知识检索",{"2":{"512":1}}],["知识问答",{"2":{"511":1}}],["知识可视化",{"2":{"509":1}}],["知识库",{"2":{"494":1}}],["知识型",{"0":{"417":1},"2":{"417":4}}],["知识获取",{"2":{"406":1}}],["知识点维度组织信息",{"2":{"628":1}}],["知识点检索",{"2":{"405":1}}],["知识点",{"2":{"405":1}}],["知识工作者对效率极其敏感",{"2":{"353":1}}],["知识发现引擎",{"2":{"355":1}}],["知识发现",{"0":{"349":1}}],["淘宝前端团队",{"2":{"346":1}}],["淘系前端团队",{"2":{"346":1}}],["鑫生活",{"2":{"346":1}}],["鑫空间",{"2":{"346":1}}],["桌面应用命令",{"2":{"851":1}}],["桌面应用缺乏自动化接口",{"2":{"843":1}}],["桌面应用等客户端和",{"2":{"102":1}}],["桌面开发",{"2":{"346":1}}],["蒲公英",{"2":{"346":1}}],["凹凸实验室维护整理的技术周刊",{"2":{"346":1}}],["凹凸实验室",{"2":{"346":1}}],["阮一峰的网络日志",{"2":{"346":1}}],["阮一峰网络日志",{"2":{"346":1}}],["庞大的微服务集群",{"2":{"344":1}}],["版渲染实现",{"2":{"939":2}}],["版功能对等",{"2":{"939":1}}],["版协议规范",{"2":{"939":3}}],["版较低",{"2":{"521":1}}],["版价格较低",{"2":{"521":1}}],["版提供",{"2":{"518":1}}],["版",{"2":{"467":1,"565":1}}],["版的",{"2":{"344":2}}],["版本创建对应的解析器实例",{"2":{"947":1}}],["版本判断",{"2":{"941":1}}],["版本双向转码器",{"2":{"939":1}}],["版本路由",{"2":{"939":1}}],["版本管理",{"2":{"904":1}}],["版本信息",{"2":{"851":1}}],["版本历史",{"2":{"790":1}}],["版本号管理工具配置",{"2":{"980":1}}],["版本号常量",{"2":{"939":1}}],["版本号",{"2":{"777":1}}],["版本包含所有三种渲染器",{"2":{"751":1}}],["版本不包含表达式引擎",{"2":{"751":1}}],["版本入口",{"2":{"735":4}}],["版本变更日志",{"2":{"677":1}}],["版本的考究",{"2":{"613":1}}],["版本的实现",{"2":{"467":1}}],["版本或依赖的特殊要求",{"2":{"573":1}}],["版本发布引导",{"2":{"454":1}}],["版本化定价",{"2":{"397":1}}],["版本",{"2":{"203":2,"699":1,"728":1,"880":2,"973":1}}],["版本冲突风险升高",{"2":{"192":1}}],["版本控制系统",{"2":{"120":1}}],["版本引入",{"2":{"34":1}}],["倍价值放大",{"2":{"459":1}}],["倍放大",{"2":{"459":1}}],["倍的本地开发体验",{"2":{"343":1}}],["倍",{"2":{"343":1,"519":1,"642":1}}],["威力大打折扣",{"2":{"342":1}}],["越来越觉得",{"2":{"1043":1}}],["越是努力地执行严格的时间表",{"2":{"1036":1}}],["越轻越好",{"2":{"342":1}}],["越多",{"2":{"45":1}}],["陡峭",{"2":{"341":1}}],["贴近react思维",{"2":{"341":1}}],["界面零广告",{"2":{"518":1}}],["界面简洁功能丰富",{"2":{"512":1}}],["界面简洁易用",{"2":{"512":1}}],["界面清爽体验友好",{"2":{"512":1}}],["界面友好",{"2":{"512":1}}],["界面体验优秀",{"2":{"512":1}}],["界面上导致崩溃的",{"2":{"418":1}}],["界面",{"2":{"340":1,"568":1}}],["界面应当呈现何种输出",{"2":{"179":1}}],["冗长的代码问题",{"2":{"340":1}}],["冗余信息",{"2":{"196":1}}],["冗余接口",{"0":{"196":1}}],["冗余代码",{"0":{"187":1}}],["冗余",{"2":{"186":1,"196":2}}],["冗余逻辑与重复代码",{"0":{"186":1},"1":{"187":1,"188":1}}],["弱类型的脚本语言",{"2":{"338":1}}],["颜色排布",{"2":{"971":1}}],["颜色系统类型定义",{"2":{"939":1}}],["颜色属性",{"2":{"743":1}}],["颜色等",{"2":{"738":1}}],["颜色处理",{"2":{"706":1,"819":1}}],["颜色→形状映射",{"2":{"683":1}}],["颜色解析与格式化",{"2":{"819":1}}],["颜色解析",{"2":{"677":1}}],["颜色编码的命中检测",{"2":{"683":1}}],["颜色编码命中",{"2":{"677":1}}],["颜色编码",{"2":{"672":1,"673":1,"683":1}}],["颜色",{"2":{"338":1,"715":1,"743":1,"763":3,"766":1,"771":1,"828":1,"964":1,"971":1}}],["链式处理",{"2":{"910":1}}],["链式调用辅助",{"2":{"819":1}}],["链表尾",{"2":{"834":1}}],["链表头",{"2":{"834":1}}],["链表上一个",{"2":{"834":1}}],["链表下一个",{"2":{"834":1}}],["链表中移除",{"2":{"830":1}}],["链表",{"2":{"818":1,"822":1,"827":2,"830":1}}],["链表管理",{"2":{"818":1,"826":1}}],["链表遍历",{"2":{"814":1,"818":1}}],["链路",{"2":{"550":1}}],["链路追踪与归因",{"2":{"550":1}}],["链路通畅",{"2":{"107":1}}],["链接导航",{"0":{"349":1}}],["链接等",{"2":{"338":1}}],["凭借深厚的底层功底",{"2":{"539":1}}],["凭借其极速的硬链接机制和简洁的配置",{"2":{"335":1}}],["凭感觉编程",{"2":{"530":1}}],["凭感觉",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1},"2":{"532":1}}],["凭证",{"2":{"14":1}}],["得到别人的口头赞许",{"2":{"612":1}}],["得到的是同一个单例对象",{"2":{"334":1}}],["得益于静态产物的极低访问成本",{"2":{"52":1}}],["均实现此接口",{"2":{"903":1}}],["均匀照明",{"2":{"763":1}}],["均以插件形式注册",{"2":{"704":1}}],["均继承",{"2":{"677":1}}],["均视为",{"2":{"333":1}}],["均已原生支持",{"2":{"307":1}}],["双方通过",{"2":{"948":1}}],["双版本兼容",{"2":{"904":2}}],["双环境适配",{"2":{"818":1}}],["双级定位",{"2":{"805":1}}],["双栏浮动绕排",{"2":{"790":1}}],["双层材质体系",{"2":{"771":1}}],["双核心架构",{"2":{"768":1}}],["双阶段管道",{"2":{"706":1}}],["双渲染后端",{"2":{"704":1}}],["双渲染",{"2":{"701":1}}],["双后端架构",{"2":{"758":1}}],["双后端",{"2":{"672":1,"673":1}}],["双轨制是这套知识系统的核心设计",{"2":{"628":1}}],["双轨制",{"0":{"628":1}}],["双保险",{"2":{"523":1}}],["双头垄断下的博弈均衡",{"0":{"392":1}}],["双模共存",{"0":{"333":1}}],["双向链表",{"2":{"818":1,"822":1}}],["双向",{"2":{"789":1}}],["双向文本元数据",{"2":{"790":1}}],["双向文本",{"2":{"788":1}}],["双向散射分布函数",{"2":{"763":1}}],["双向高频互动",{"2":{"130":1}}],["双向通道",{"2":{"113":1}}],["记住",{"2":{"410":1}}],["记录了我对技术角色的重新思考",{"2":{"1001":1}}],["记录痛点",{"2":{"631":1}}],["记录问题",{"2":{"631":1}}],["记录每一次工具调用",{"2":{"550":1}}],["记录或提交订单",{"2":{"411":1}}],["记录最近几轮的交互历史",{"2":{"410":1}}],["记录最近的交互历史",{"2":{"408":1}}],["记录下那个让你嘴角上扬或瞳孔放大的瞬间",{"2":{"372":1}}],["记录",{"0":{"372":1},"2":{"371":1,"537":1}}],["记录版本变更",{"2":{"331":1}}],["记忆机制",{"0":{"546":1}}],["记忆曲线数据",{"2":{"474":1}}],["记忆的实现方式不止这一种",{"2":{"437":1}}],["记忆类型",{"2":{"410":1}}],["记忆",{"0":{"410":1},"2":{"408":2,"478":1,"544":1}}],["记忆化请求去重",{"0":{"69":1}}],["记忆口诀",{"2":{"45":1}}],["修身",{"2":{"1043":1}}],["修饰器之间可以链式串联",{"2":{"744":1}}],["修饰器在每一帧处理前序形状数据",{"2":{"744":1}}],["修行在个人",{"2":{"609":1}}],["修补",{"2":{"451":1}}],["修正的段宽度",{"2":{"796":1}}],["修正量为",{"2":{"796":1}}],["修正量通过一次",{"2":{"796":1}}],["修正阶段",{"2":{"426":1}}],["修正",{"2":{"426":2,"432":1,"789":1,"790":1,"792":1,"796":2,"805":1}}],["修复调试流程",{"0":{"992":1}}],["修复质量问题",{"2":{"988":1}}],["修复规格差异",{"2":{"988":1}}],["修复后",{"2":{"982":1}}],["修复建议",{"2":{"586":1,"591":1}}],["修复问题",{"2":{"570":1}}],["修复移动端导航栏遮挡问题`",{"2":{"451":1}}],["修复",{"2":{"331":1,"451":1,"455":1,"535":1,"564":1,"567":2,"568":1,"939":1,"982":1,"992":1}}],["修复或性能优化",{"2":{"331":1}}],["修订号",{"2":{"331":2}}],["修改技能时",{"2":{"982":1}}],["修改修饰符状态",{"2":{"958":1}}],["修改子路径时通知所有祖先路径的订阅者",{"2":{"945":1}}],["修改参数",{"2":{"920":1}}],["修改属性",{"2":{"689":1}}],["修改代码时",{"2":{"537":1}}],["修改",{"2":{"411":1,"587":1}}],["修改变量名时",{"2":{"311":1}}],["修改或重构某个模块时",{"2":{"297":1}}],["修改某条项目详情后",{"2":{"92":1}}],["修改数据库",{"2":{"415":1}}],["修改数据",{"2":{"92":1}}],["屎山",{"2":{"327":1}}],["避开",{"2":{"755":1}}],["避坑",{"2":{"327":1,"328":1}}],["避免供应链风险",{"2":{"976":1}}],["避免选择器权重过高导致后期的维护灾难",{"2":{"968":1}}],["避免为简单命令付出完整启动成本",{"2":{"854":1}}],["避免为了微前端而微前端",{"2":{"292":1}}],["避免分配",{"2":{"798":1}}],["避免编译步骤",{"2":{"731":1}}],["避免阻塞",{"2":{"712":1}}],["避免阻塞浏览器主线程",{"2":{"305":1}}],["避免开发者重复造轮子",{"2":{"699":1}}],["避免知识结构陷入",{"0":{"614":1}}],["避免读书目的被异化",{"0":{"612":1}}],["避免利益冲突",{"2":{"590":1}}],["避免将多个操作强行合并",{"2":{"583":1}}],["避免模糊描述",{"2":{"578":1}}],["避免模型混淆",{"2":{"277":1}}],["避免单个",{"2":{"570":1}}],["避免账单超出预期",{"2":{"523":1}}],["避免偏离主题",{"2":{"504":1}}],["避免学术化术语",{"2":{"494":1}}],["避免大模型自由发挥导致的格式混乱",{"2":{"453":1}}],["避免信息混淆",{"2":{"437":1}}],["避免一次性将海量文档全部丢给模型导致",{"2":{"352":1}}],["避免提取过时或冲突的信息",{"2":{"352":1}}],["避免不必要重渲染",{"2":{"341":1}}],["避免循环依赖陷阱",{"2":{"318":1}}],["避免全局变量污染",{"2":{"298":1}}],["避免了规则的",{"2":{"576":1}}],["避免了技术债务的积累",{"2":{"292":1}}],["避免了内存爆仓",{"2":{"106":1}}],["避免版本冲突",{"2":{"291":1,"731":1}}],["避免过度拆分",{"2":{"291":1}}],["避免过度工程化",{"2":{"55":1}}],["避免样式冲突",{"2":{"286":1}}],["避免直接依赖",{"2":{"286":1}}],["避免外部修改",{"2":{"261":1}}],["避免重复注册",{"2":{"711":1}}],["避免重复加载",{"2":{"334":1}}],["避免重复定义相同的编译选项",{"2":{"209":1}}],["避免重复业务操作",{"2":{"121":1}}],["避免类型不明确导致的",{"2":{"203":1}}],["避免沦为",{"2":{"201":1}}],["避免引入多余依赖",{"2":{"194":1}}],["避免",{"0":{"186":1},"1":{"187":1,"188":1},"2":{"194":1,"519":1,"592":1,"967":1,"988":1}}],["避免无意义的",{"2":{"181":1,"199":1}}],["避免手动修补",{"2":{"177":1}}],["避免碎片化",{"2":{"177":1}}],["避免污染全局",{"2":{"174":1}}],["避免长时间占用连接资源",{"2":{"168":1}}],["避免等待过久导致体验断层",{"2":{"159":1}}],["避免在多个地方重复定义相同的颜色值",{"2":{"966":1}}],["避免在容器中混杂复杂的",{"2":{"170":1}}],["避免在",{"2":{"148":1}}],["避免组件来回切换引发大量",{"2":{"94":1}}],["避免频繁的毫无意义的重试",{"2":{"94":1}}],["避免内容注入时发生布局跳动",{"2":{"74":1}}],["避免同一页面混合使用多种渲染模式",{"2":{"47":1}}],["避免前端暴露支付密钥",{"2":{"18":1}}],["抹平了前后端的技术门槛",{"2":{"1001":1}}],["抹平了技术栈之间的专业门槛",{"2":{"557":1}}],["抹平",{"0":{"321":1}}],["隔离上下文的任务执行",{"2":{"988":1}}],["隔离上下文不干扰主任务",{"2":{"592":1}}],["隔离工作区管理",{"2":{"979":1}}],["隔离后端差异",{"2":{"761":1}}],["隔离数据作用域",{"2":{"652":1}}],["隔离",{"2":{"652":1}}],["隔离与限制",{"2":{"438":1}}],["隔离性",{"2":{"320":1}}],["隔离错误",{"2":{"66":1}}],["历经多轮",{"2":{"535":1}}],["历经客户端到服务端的完整技术链条",{"2":{"155":1}}],["历史读物",{"2":{"1031":1}}],["历史开发计划",{"2":{"980":1}}],["历史文本",{"2":{"790":1}}],["历史版本详细记录",{"2":{"735":1}}],["历史原因",{"2":{"731":1}}],["历史任务的成功经验或失败教训",{"2":{"410":1}}],["历史数据的平均值",{"2":{"359":1}}],["历史的交棒",{"0":{"320":1}}],["热门组件库",{"2":{"963":1}}],["热门",{"2":{"851":1}}],["热门文档可能被大量并发访问",{"2":{"54":1}}],["热路径",{"2":{"798":1}}],["热路径需要的预计算数据",{"2":{"792":1}}],["热力图",{"2":{"706":1}}],["热更新",{"2":{"316":1}}],["延迟偏移",{"2":{"834":1}}],["延迟初始化",{"2":{"796":1}}],["延迟极低",{"2":{"523":1}}],["延迟导入",{"2":{"315":1}}],["延伸思考混合工作制",{"0":{"1041":1}}],["延伸",{"2":{"494":1}}],["延伸实践",{"2":{"188":1,"194":1}}],["延伸阅读",{"2":{"82":1,"597":1}}],["桶文件",{"2":{"312":1}}],["蜕变的过程",{"2":{"309":1}}],["脚本返回的",{"2":{"994":1}}],["脚本采用策略模式",{"2":{"985":1}}],["脚本",{"2":{"442":1,"472":1,"553":1,"636":1,"851":1,"858":1,"982":2}}],["脚本语言",{"2":{"309":1,"338":1}}],["脚手架生成",{"2":{"171":1}}],["迁移至",{"2":{"1001":1}}],["迁移和复用成本极低",{"2":{"964":1}}],["迁移工具",{"2":{"908":1}}],["迁移到",{"2":{"308":2}}],["迁移策略建议",{"2":{"308":1}}],["现阶段也需要维持一个月",{"2":{"1048":1}}],["现阶段它通常不作为独立的解决方案",{"2":{"958":1}}],["现有",{"2":{"565":1,"881":1}}],["现有工具未解决",{"2":{"465":1}}],["现有工具没有很好解决",{"2":{"465":1}}],["现已迁至独立域名",{"2":{"564":1}}],["现在的我",{"2":{"1001":1}}],["现在的",{"2":{"558":1}}],["现在突然变得",{"2":{"528":1}}],["现在可以随手完成",{"2":{"528":1}}],["现在几分钟就能让",{"2":{"528":1}}],["现实是",{"2":{"458":1}}],["现场协调员",{"2":{"414":1}}],["现更名为",{"2":{"342":1}}],["现状",{"2":{"308":1,"320":1}}],["现代的健康标准",{"2":{"1025":1}}],["现代医疗虽能救死扶伤",{"2":{"1022":1}}],["现代框架",{"2":{"963":1}}],["现代项目极其依赖第三方",{"2":{"961":1}}],["现代标准",{"2":{"881":1}}],["现代文学",{"2":{"790":4}}],["现代人之所以读不进去",{"2":{"609":1}}],["现代化的自动化部署",{"2":{"542":1}}],["现代化前端项目",{"2":{"287":1}}],["现代诗形式自由",{"2":{"506":1}}],["现代诗",{"2":{"504":1}}],["现代全栈开发倾向于使用",{"2":{"344":1}}],["现代前端极致形态",{"2":{"965":1}}],["现代前端首选的实用优先",{"2":{"340":1}}],["现代前端框架如",{"2":{"263":1}}],["现代包通过",{"2":{"335":1}}],["现代",{"2":{"322":1,"342":1,"402":1,"964":1,"965":1}}],["现代模块化项目的",{"0":{"322":1}}],["现代模块化方案支持动态引入",{"2":{"297":1}}],["现代开发的唯一推荐标准",{"2":{"308":1}}],["现代开发的终极标准",{"0":{"307":1}}],["现代浏览器及",{"2":{"307":1}}],["现代浏览器支持",{"2":{"203":2}}],["现代高并发",{"2":{"126":1}}],["剔除未使用的代码",{"2":{"307":1}}],["剔除可推导字段",{"2":{"173":1}}],["终究还是适应了",{"2":{"1040":1}}],["终端执行",{"2":{"565":1}}],["终端",{"0":{"487":1},"1":{"488":1,"489":1,"490":1},"2":{"568":2,"851":1}}],["终端命令执行",{"2":{"478":1}}],["终止",{"2":{"891":1}}],["终止判断",{"2":{"427":1}}],["终止重试",{"2":{"146":1}}],["终于彻底结束了长达十年的规范之争",{"2":{"307":1}}],["年才转变为社会人",{"2":{"1049":1}}],["年龄成迷",{"2":{"1043":1}}],["年频繁居家",{"2":{"1032":1}}],["年后有人再问起这个问题",{"2":{"1029":1}}],["年及以后的日子里可以继续做到",{"2":{"1026":1}}],["年的时间",{"2":{"1026":1}}],["年五一假期去",{"2":{"1016":1}}],["年提交了一篇论文",{"2":{"1015":1}}],["年更是启动了数学通识基础知识",{"2":{"1011":1}}],["年末",{"2":{"1008":1}}],["年初洋洋洒洒写了一篇在健康",{"2":{"1005":1}}],["年底到2023",{"2":{"1008":1}}],["年底",{"2":{"525":1,"1031":1}}],["年最伟大的商业模式",{"2":{"354":1}}],["年",{"2":{"307":1,"441":1,"1000":1}}],["年诞生以来",{"2":{"103":1}}],["普通人勤奋些是对的",{"2":{"1036":1}}],["普通人观察表象",{"2":{"389":1}}],["普通命令",{"2":{"855":1}}],["普通用户",{"2":{"843":1}}],["普通文本段",{"2":{"805":1}}],["普通文本",{"2":{"797":1}}],["普通搜索",{"2":{"517":1}}],["普通对象不是",{"2":{"269":1}}],["普及之前",{"2":{"306":1}}],["缺少一站式",{"2":{"757":1}}],["缺少请求取消机制",{"2":{"342":1}}],["缺失的环节才会立刻暴露出来",{"2":{"610":1}}],["缺失的测试覆盖",{"2":{"527":1}}],["缺乏工程纪律",{"2":{"973":1}}],["缺乏统一发现和调用机制",{"2":{"843":1}}],["缺乏可靠的网站操作能力",{"2":{"843":1}}],["缺乏时间线编排能力",{"2":{"812":1}}],["缺乏深度计算",{"2":{"617":1}}],["缺乏持续输出的执行力",{"2":{"617":1}}],["缺乏持久化机制",{"2":{"617":1}}],["缺乏",{"2":{"499":1}}],["缺乏在服务器端运行所需的组织结构",{"2":{"304":1}}],["缺口",{"2":{"358":1}}],["缺点是需要逐一注册账号",{"2":{"520":1}}],["缺点",{"2":{"160":1,"164":1}}],["诞生的规范",{"2":{"304":1}}],["熵增",{"0":{"378":1},"2":{"303":1}}],["详细技术设计规格",{"2":{"980":1}}],["详细检查清单参见",{"2":{"586":1}}],["详细指南",{"2":{"586":1}}],["详细提交规范",{"2":{"451":1}}],["详细说明",{"2":{"414":1,"415":1}}],["详细的规范可参考下一篇系列文章",{"2":{"298":1}}],["详细地址",{"2":{"278":1}}],["容差",{"2":{"792":1}}],["容错与兜底机制",{"2":{"543":1}}],["容错性",{"2":{"427":1}}],["容错率高",{"2":{"424":1}}],["容易出现幻觉",{"2":{"971":1}}],["容易导致我们在遇到真正有价值",{"2":{"618":1}}],["容易导致命名冲突和代码污染",{"2":{"298":1}}],["容易踩坑的地方",{"2":{"573":1}}],["容易被忽略的坑点",{"2":{"572":1}}],["容易在长路径任务中迷失方向",{"2":{"427":1}}],["容易产生",{"2":{"342":1,"610":1}}],["容器高度",{"2":{"719":1}}],["容器宽度",{"2":{"719":1}}],["容器契约",{"2":{"692":1}}],["容器",{"2":{"680":1,"684":1,"939":2}}],["容器抽象",{"2":{"679":1}}],["容器抽象类",{"2":{"677":1}}],["容器绑定",{"2":{"677":1}}],["容器的形状",{"0":{"391":1}}],["容器中存储的数据类型",{"2":{"261":1}}],["容器组件",{"2":{"170":2}}],["彻底抛弃外部",{"2":{"967":1}}],["彻底抛弃传统的",{"2":{"964":1}}],["彻底干掉",{"2":{"965":1,"971":1}}],["彻底颠覆",{"2":{"604":1}}],["彻底重构代码生产方式的今天",{"2":{"553":1}}],["彻底打破数据孤岛",{"2":{"439":1}}],["彻底走出了纯文字的温室",{"2":{"418":1}}],["彻底免去了手动维护",{"2":{"342":1}}],["彻底解决起名困难",{"2":{"965":1}}],["彻底解决了全局污染问题",{"2":{"959":1}}],["彻底解决多端设备",{"2":{"342":1}}],["彻底解决",{"2":{"342":1}}],["彻底移除未使用的模块",{"2":{"318":1}}],["彻底告别了多个脚本文件中变量名相互覆盖的噩梦",{"2":{"297":1}}],["彻底改变了",{"2":{"68":1}}],["神经网络等模型与算法依赖的数学知识",{"2":{"1011":1}}],["神曲",{"2":{"506":1}}],["神",{"2":{"296":1,"507":1}}],["神器",{"2":{"98":1}}],["像代码一样表达力强",{"2":{"933":1}}],["像数据一样安全",{"2":{"933":1}}],["像素化",{"2":{"677":1}}],["像素级精度",{"2":{"673":1}}],["像素级命中检测",{"2":{"672":1}}],["像素级",{"2":{"171":1}}],["像是一个反应敏捷的",{"2":{"414":1}}],["像人类一样直接操作软件界面",{"2":{"411":1}}],["像捕捉蝴蝶一样捕捉你的情绪",{"2":{"372":1}}],["像",{"2":{"363":1}}],["像搭积木一样",{"2":{"294":1}}],["务必评估项目的实际需求",{"2":{"292":1}}],["制表符",{"2":{"805":1}}],["制作动画",{"2":{"729":1}}],["制定有效的价格策略",{"2":{"397":1}}],["制定统一的编码规范和目录结构",{"2":{"291":1}}],["制造更多技术债务",{"2":{"180":1}}],["制造技术债务",{"2":{"177":1}}],["给自己的生活做减法",{"2":{"1025":1}}],["给大模型提供了一个",{"2":{"971":1}}],["给",{"2":{"534":1}}],["给出三个方案",{"2":{"533":1}}],["给出你创作诗歌时的详细思路与灵感说明",{"2":{"506":1}}],["给出",{"2":{"360":1}}],["给出看似完美的常规解答时",{"2":{"360":1}}],["给出的多个解决方案时",{"2":{"359":1}}],["给子应用",{"2":{"289":1}}],["给定特定的状态输入",{"2":{"179":1}}],["拥挤的赛道最终必然走向卷利润",{"2":{"620":1}}],["拥有的时候经常不会被珍惜",{"2":{"1020":1}}],["拥有互不兼容的",{"2":{"901":1}}],["拥有",{"2":{"766":1}}],["拥有纸质书无法比拟的优势",{"2":{"613":1}}],["拥有丰富的",{"2":{"512":1}}],["拥有多模态大模型能力",{"2":{"512":1}}],["拥有实时联网",{"2":{"511":1}}],["拥有对业务痛点的敏锐嗅觉",{"2":{"495":1}}],["拥有调用外部工具",{"2":{"493":1}}],["拥有独立的",{"2":{"680":1}}],["拥有独立的上下文窗口和严格限定的工具权限",{"2":{"438":1}}],["拥有独立的代码仓库和构建流程",{"2":{"286":1}}],["拥有比别人更短的纠错半径",{"2":{"376":1}}],["拥有无限的潜力",{"2":{"367":1}}],["拥有过去",{"2":{"354":1}}],["拥有全球加速节点",{"2":{"345":1}}],["拥有私有的作用域",{"2":{"304":1}}],["拥抱混合工作制",{"2":{"1040":1}}],["拥抱长类名",{"2":{"967":1}}],["拥抱高效",{"2":{"615":1}}],["拥抱原生",{"2":{"272":1}}],["拥抱",{"0":{"376":1,"538":1},"2":{"169":1,"966":1,"1018":1}}],["团队不应在构建管道中添加过多臃肿的自定义插件",{"2":{"969":1}}],["团队不再只是追求开发速度",{"2":{"528":1}}],["团队或复杂自研",{"2":{"967":1}}],["团队成员对各样式方案的学习成本与上手难度",{"2":{"965":1}}],["团队能力",{"2":{"965":1}}],["团队能力与未来拓展等因素",{"2":{"965":1}}],["团队规模大小",{"2":{"965":1}}],["团队使用同一套",{"2":{"962":1}}],["团队熟悉度",{"2":{"642":1}}],["团队特定流程放在",{"2":{"583":1}}],["团队标准化流程",{"2":{"580":1}}],["团队统一的编码规范",{"2":{"573":1}}],["团队统一的权限策略",{"2":{"570":2,"596":1}}],["团队技能",{"2":{"570":1}}],["团队斜杠命令",{"2":{"570":1}}],["团队指令",{"2":{"570":1}}],["团队配置",{"2":{"570":1}}],["团队共享上下文",{"2":{"571":1}}],["团队共享",{"2":{"568":1}}],["团队",{"2":{"568":1}}],["团队的工程文化",{"2":{"536":1}}],["团队的协作边界",{"2":{"525":1}}],["团队的规模和技术能力",{"2":{"292":1}}],["团队知识管理",{"2":{"515":1}}],["团队知识库",{"2":{"515":1}}],["团队头脑风暴",{"2":{"515":1}}],["团队项目管理",{"2":{"515":1}}],["团队内容协作",{"2":{"515":1}}],["团队办公协作",{"2":{"515":1}}],["团队打造的旗舰",{"2":{"511":1}}],["团队在第二周的人力缺口",{"2":{"417":1}}],["团队开源",{"2":{"343":1}}],["团队提出",{"2":{"305":1}}],["团队要求",{"2":{"292":1}}],["团队要求高",{"2":{"283":1}}],["团队协作场景",{"2":{"515":1}}],["团队协作模型",{"2":{"344":1}}],["团队协作和技术演进问题时",{"2":{"292":1}}],["团队协作",{"2":{"292":1,"415":1,"437":1,"438":1,"515":1,"597":1}}],["团队自治",{"2":{"285":1}}],["沟通效率高",{"2":{"283":1}}],["识别规则",{"2":{"946":1}}],["识别字段名位置",{"2":{"892":1}}],["识别类型",{"2":{"828":1}}],["识别",{"2":{"655":1}}],["识别出复杂的对象关联或异常状态",{"2":{"418":1}}],["识别核心业务概念",{"2":{"282":1}}],["识别限界上下文",{"2":{"281":1}}],["识别当前需求的本质",{"2":{"201":1}}],["仓储实现",{"2":{"281":1,"282":1}}],["仓储接口",{"2":{"281":1,"282":1}}],["仓储接口应定义在领域层",{"2":{"281":1}}],["仓储",{"2":{"278":1}}],["仓库规模",{"2":{"904":1}}],["仓库静态资源",{"2":{"819":1}}],["仓库中",{"2":{"467":1,"477":1}}],["仓库一变就失效",{"2":{"445":1}}],["仓库结构",{"2":{"205":1}}],["仓库事件触发",{"2":{"131":1}}],["仓库",{"2":{"17":1,"345":1,"451":1,"570":1,"728":1}}],["聚光灯",{"2":{"763":1}}],["聚焦自然语言理解与智能创作",{"2":{"512":1}}],["聚焦",{"2":{"350":1,"505":1}}],["聚焦技术动态",{"2":{"346":1}}],["聚焦于问题的本质",{"2":{"201":1}}],["聚合精度",{"2":{"790":1}}],["聚合层",{"2":{"790":1}}],["聚合所有模块并暴露公共",{"2":{"788":1}}],["聚合与推理加速平台",{"2":{"523":1}}],["聚合平台",{"2":{"523":1}}],["聚合导出",{"2":{"312":1}}],["聚合和限界上下文确保模块独立性",{"2":{"283":1}}],["聚合的根实体",{"2":{"278":1}}],["聚合根",{"2":{"278":1}}],["聚合",{"2":{"278":1,"282":1}}],["金属度贴图",{"2":{"778":1}}],["金属度",{"2":{"778":1}}],["金属",{"2":{"778":1}}],["金额值对象",{"2":{"281":1}}],["金额",{"2":{"278":1}}],["金融学中的复利效应",{"2":{"1008":1}}],["金融博弈",{"2":{"116":1}}],["金融",{"2":{"111":1,"519":1,"523":1}}],["市面上很多被大肆宣扬的",{"2":{"620":1}}],["市场趋势分析命令",{"2":{"470":1}}],["市场规模",{"2":{"470":1,"472":1}}],["市场是不断变化的",{"2":{"400":1}}],["市场份额",{"2":{"396":1}}],["市",{"2":{"278":1}}],["省去起名和文件切换时间",{"2":{"963":1}}],["省去了在",{"2":{"962":1}}],["省去你逐条点链接的过程",{"2":{"517":1}}],["省去排版烦恼",{"2":{"515":1}}],["省",{"2":{"278":1}}],["省略必要环节",{"2":{"181":1}}],["地域化的问题在",{"2":{"1041":1}}],["地面",{"2":{"763":1}}],["地呈现在",{"2":{"728":1}}],["地理坐标系",{"2":{"706":1}}],["地理坐标系组件",{"2":{"706":1}}],["地理",{"2":{"701":1}}],["地址",{"2":{"278":1}}],["地图注册与解析",{"2":{"706":1}}],["地图感",{"2":{"332":1}}],["地图",{"2":{"8":1,"518":1,"700":1,"701":1,"706":1}}],["限界上下文",{"2":{"277":1}}],["限制大文件处理",{"2":{"595":1}}],["限制工具就是限制风险",{"2":{"591":1}}],["限制少",{"2":{"511":1}}],["限制在更安全的边界内",{"2":{"438":1}}],["限制隔离的",{"2":{"438":1}}],["限制泛型参数必须是",{"2":{"265":1}}],["限制",{"2":{"112":1,"468":1,"577":1,"873":1}}],["管住嘴",{"2":{"1026":2,"1045":1}}],["管线状态切换",{"2":{"768":1}}],["管线状态管理",{"2":{"768":1}}],["管线创建",{"2":{"768":1}}],["管线管理",{"2":{"763":1}}],["管线",{"2":{"757":1}}],["管道步骤注册",{"2":{"851":1}}],["管道执行器",{"2":{"851":1}}],["管道执行引擎",{"2":{"851":1}}],["管道执行层",{"2":{"849":1}}],["管道",{"2":{"275":1,"704":1,"909":1,"910":2,"939":1}}],["管理自己的时间也成为了每个人的必修课",{"2":{"1034":1}}],["管理自身行为",{"2":{"170":1}}],["管理响应式原语",{"2":{"945":1}}],["管理连接生命周期",{"2":{"891":1}}],["管理连接状态",{"2":{"138":1}}],["管理外部",{"2":{"870":1}}],["管理帧率和播放速率",{"2":{"822":1}}],["管理单一属性随时间的变化曲线",{"2":{"772":1}}],["管理单个组件",{"2":{"709":1}}],["管理单个系列的数据",{"2":{"709":1}}],["管理单个表单项的值",{"2":{"650":1}}],["管理资源绑定",{"2":{"765":1}}],["管理着色器管线",{"2":{"765":1}}],["管理渲染对象状态",{"2":{"765":1}}],["管理渲染流程",{"2":{"761":1}}],["管理元素生命周期",{"2":{"741":1}}],["管理父子层级关系",{"2":{"735":1}}],["管理图层到元素的映射",{"2":{"734":1}}],["管理所有活跃",{"2":{"822":1}}],["管理所有已注册的坐标系创建器",{"2":{"714":1}}],["管理所有",{"2":{"709":1}}],["管理所有子",{"2":{"650":1}}],["管理整个图表生命周期",{"2":{"709":1}}],["管理序数轴的类别映射",{"2":{"706":1}}],["管理各自配置与状态",{"2":{"704":1}}],["管理实例生命周期",{"2":{"704":1}}],["管理填充",{"2":{"680":1}}],["管理应用级设置",{"2":{"650":1}}],["管理分页状态",{"2":{"650":1}}],["管理分页列表数据增删改查",{"2":{"650":1}}],["管理多层级嵌套表单组合",{"2":{"650":1}}],["管理多个子",{"2":{"822":1}}],["管理多个动画实例的生命周期",{"2":{"734":1}}],["管理多个",{"2":{"520":1,"713":1,"772":2}}],["管理全局弹窗状态",{"2":{"650":1}}],["管理全局与局部状态",{"2":{"274":1}}],["管理简单列表数据",{"2":{"650":1}}],["管理表格数据",{"2":{"650":1}}],["管理表单数据",{"2":{"650":1}}],["管理页面级数据",{"2":{"650":1}}],["管理器",{"2":{"647":1,"948":1}}],["管理复杂度",{"2":{"387":2}}],["管理复杂实体关系",{"2":{"342":1}}],["管理子应用",{"2":{"286":1}}],["管理事务边界",{"2":{"279":1}}],["管理",{"2":{"68":1,"342":1,"478":1,"542":2,"572":1,"647":1,"650":1,"677":1,"684":1,"686":2,"706":3,"714":1,"735":1,"738":1,"763":1,"789":1,"798":1,"826":1,"904":1,"939":1,"980":1}}],["管理后台",{"2":{"4":1,"6":1,"19":1}}],["区域映射",{"2":{"706":1}}],["区",{"2":{"278":1}}],["区块",{"2":{"274":1}}],["区分预处理与后处理的边界",{"2":{"969":1}}],["区分大小写",{"2":{"442":1}}],["区分结构相同但语义不同的类型",{"2":{"250":1}}],["区分",{"2":{"170":1}}],["区分协议控制消息",{"2":{"150":1}}],["区分可重试错误与致命错误",{"2":{"150":1}}],["区分业务事件与协议控制事件",{"0":{"147":1}}],["价值的指引",{"2":{"1001":1}}],["价值的化学闭环",{"2":{"553":1}}],["价值创造的核心",{"0":{"622":1}}],["价值创造者",{"2":{"558":1}}],["价值转化",{"2":{"612":1}}],["价值定义者",{"0":{"556":1}}],["价值",{"2":{"553":1,"966":1,"967":1,"968":1,"969":1}}],["价值低又很难做",{"2":{"365":1}}],["价值极高",{"2":{"365":1}}],["价值维度",{"2":{"270":1}}],["价格业内极低",{"2":{"523":1}}],["价格最低",{"2":{"522":1,"523":1}}],["价格档位",{"2":{"521":1,"522":1}}],["价格极低",{"2":{"522":1}}],["价格极低性价比高",{"2":{"512":1}}],["价格极具竞争力",{"2":{"519":1,"523":1}}],["价格通常低",{"2":{"519":1}}],["价格友好",{"2":{"512":1}}],["价格心理学应用",{"2":{"397":1}}],["价格歧视",{"2":{"397":1}}],["价格变化时主动更新",{"2":{"36":1}}],["价格",{"2":{"18":1}}],["输入信息",{"2":{"1008":1}}],["输入设计",{"2":{"983":1}}],["输入框等",{"2":{"934":1}}],["输入格式",{"2":{"706":1}}],["输入即开始分析",{"2":{"636":1}}],["输入任务",{"2":{"567":1}}],["输入目标网站",{"2":{"561":1}}],["输入产品想法生成前后端完整应用",{"2":{"561":1}}],["输入一句话主题即可自动生成带引用的多章节报告",{"2":{"518":1}}],["输入一句话主题或导入笔记",{"2":{"515":1}}],["输入一段临时上下文",{"2":{"435":1}}],["输入能力",{"2":{"514":1}}],["输入",{"2":{"505":2,"507":2,"508":2,"828":1,"836":2,"899":1,"916":1,"1008":1}}],["输入数组",{"2":{"259":1}}],["输出细粒度任务",{"2":{"983":1}}],["输出任务列表",{"2":{"983":1}}],["输出补全",{"2":{"855":1}}],["输出dist",{"2":{"819":1}}],["输出结构化的",{"2":{"795":1}}],["输出结构清晰",{"2":{"521":2}}],["输出目标",{"2":{"763":1}}],["输出目录",{"2":{"203":1,"213":1,"214":1,"215":1}}],["输出驱动",{"0":{"629":1}}],["输出形态",{"2":{"562":1}}],["输出的数据结构",{"2":{"994":2}}],["输出的质量",{"2":{"536":1}}],["输出的结构",{"2":{"170":1}}],["输出质量",{"2":{"514":1}}],["输出逻辑严谨",{"2":{"511":1}}],["输出表现",{"2":{"505":2,"507":1,"508":1}}],["输出格式化",{"2":{"850":1,"851":1}}],["输出格式要求等",{"2":{"570":1}}],["输出格式",{"2":{"482":1,"583":1,"591":1}}],["输出文件目录",{"2":{"474":1}}],["输出为",{"2":{"435":1}}],["输出倒逼内化",{"0":{"375":1}}],["输出",{"2":{"204":1,"295":5,"301":1,"304":2,"307":2,"311":1,"325":1,"471":1,"472":1,"655":1,"789":1,"836":2,"913":1,"916":1,"918":1,"939":2,"994":1,"1008":4}}],["输出控制选项",{"2":{"203":1}}],["输出设计文档",{"2":{"177":1,"983":1}}],["日语",{"2":{"786":1,"790":2}}],["日历坐标系",{"2":{"706":2}}],["日历",{"2":{"701":1}}],["日历组件",{"2":{"647":1}}],["日常任务清单",{"2":{"1040":2}}],["日常清单收集事务依旧不能照搬碎片清单",{"2":{"1037":1}}],["日常清单收集事务不能照搬碎片清单",{"2":{"1037":1}}],["日常清单三类",{"2":{"1037":1}}],["日常清单",{"2":{"1037":3}}],["日常饮食注重杂食多样",{"2":{"1025":1}}],["日常工作与生活中常用的数学知识",{"2":{"1011":1}}],["日常功能开发",{"2":{"565":1}}],["日常习惯",{"2":{"527":1}}],["日常中文搜索想要直接答案",{"2":{"518":1}}],["日常刷到好文章",{"2":{"515":1}}],["日常问答与内容摘要",{"2":{"512":1}}],["日常体验流畅",{"2":{"512":1}}],["日常辅助",{"2":{"459":1}}],["日常的内容分发与用户服务",{"2":{"378":1}}],["日常开发中的工具函数",{"2":{"256":1}}],["日志流",{"2":{"875":1}}],["日志环形缓冲区",{"2":{"860":1}}],["日志工具",{"2":{"706":1,"851":1}}],["日志",{"2":{"279":1,"763":1,"910":1}}],["日期选择器",{"2":{"934":1}}],["日期解析",{"2":{"706":1}}],["日期单元格",{"2":{"706":1}}],["日期网格布局",{"2":{"706":1}}],["日期格式化",{"2":{"188":1}}],["日期",{"2":{"14":1,"655":1}}],["面积图",{"2":{"706":1}}],["面临的过度获取",{"2":{"342":1}}],["面对很多件抢占时间资源的事务",{"2":{"1034":1}}],["面对前端生态中百花齐放的",{"2":{"965":1}}],["面对这些公开的",{"2":{"617":1}}],["面对这股重塑整个行业的洪流",{"2":{"552":1}}],["面对多",{"2":{"550":1}}],["面对",{"0":{"492":1}}],["面对繁杂的智能体生态",{"2":{"434":1}}],["面对极其复杂的异步状态流转",{"2":{"342":1}}],["面对跨层级通信时",{"2":{"175":1}}],["面向",{"2":{"973":1}}],["面向前端的",{"2":{"784":1}}],["面向中小型仓库",{"2":{"636":1}}],["面向非技术用户的",{"2":{"561":1}}],["面向工作流编排",{"2":{"456":1}}],["面向目标",{"2":{"403":1}}],["面向过程",{"2":{"403":1}}],["面向切面编程",{"2":{"344":1}}],["面向对象编程",{"2":{"344":2}}],["面向对象编程中",{"2":{"256":1}}],["面向未来的扩展性",{"2":{"255":1}}],["泛型只是其中的一个子集",{"2":{"271":1}}],["泛型不仅仅是一种语法特性",{"2":{"271":1}}],["泛型不是孤立的",{"2":{"263":1}}],["泛型系统中的核心机制",{"2":{"270":1}}],["泛型系统中的重要机制",{"2":{"264":1}}],["泛型参数必须同时满足",{"2":{"267":1}}],["泛型参数需要具备某些特性才能在函数体内正常使用",{"2":{"263":1}}],["泛型约束与接口",{"2":{"270":1}}],["泛型约束的核心价值在于平衡类型安全与代码通用性",{"2":{"270":1}}],["泛型约束广泛应用于数据处理",{"2":{"264":1}}],["泛型约束可以",{"2":{"264":1}}],["泛型约束是",{"2":{"264":1,"270":1}}],["泛型约束",{"0":{"264":1},"1":{"265":1,"266":1,"267":1,"268":1,"269":1,"270":1}}],["泛型是",{"2":{"263":1}}],["泛型在组件",{"2":{"263":1}}],["泛型在实际开发中的应用非常广泛",{"2":{"256":1}}],["泛型最佳实践总结",{"0":{"263":1}}],["泛型方法",{"2":{"261":3}}],["泛型构造函数",{"2":{"261":1}}],["泛型实例成员",{"2":{"261":1}}],["泛型类型别名",{"2":{"262":3}}],["泛型类型别名与高级应用",{"0":{"262":1}}],["泛型类型信息只存在于编译阶段",{"2":{"254":1}}],["泛型类",{"0":{"261":1},"2":{"261":1}}],["泛型接口",{"0":{"260":1},"2":{"260":1}}],["泛型函数",{"2":{"259":1,"268":1}}],["泛型标识函数",{"2":{"258":1}}],["泛型代码示例",{"0":{"257":1},"1":{"258":1,"259":1,"260":1,"261":1,"262":1}}],["泛型让这种设计成为可能",{"2":{"256":1}}],["泛型让我们能够定义如",{"2":{"256":1}}],["泛型组件如",{"2":{"256":1}}],["泛型能够在保持类型安全的同时",{"2":{"256":1}}],["泛型鼓励开发者从一开始就从通用的角度思考问题",{"2":{"255":1}}],["泛型之所以重要",{"2":{"255":1}}],["泛型与联合类型结合",{"2":{"263":1}}],["泛型与接口结合",{"2":{"263":1}}],["泛型与",{"0":{"253":1},"2":{"263":1}}],["泛型的学习曲线实际上是从具体到抽象的过程",{"2":{"271":1}}],["泛型的通用性就越低",{"2":{"263":1}}],["泛型的应用场景",{"0":{"256":1}}],["泛型的核心优势",{"0":{"255":1}}],["泛型的核心思想是将类型作为参数传递给函数",{"2":{"252":1}}],["泛型的工作原理",{"0":{"254":1}}],["泛型的基本概念和作用",{"0":{"251":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1}}],["泛型",{"2":{"252":1,"253":1,"677":1}}],["驾驭",{"2":{"250":1}}],["做限制的原因",{"2":{"1048":1}}],["做一些适合的无氧运动",{"2":{"1044":1}}],["做一个番茄钟",{"2":{"561":1}}],["做不到学以致用与知行合一",{"2":{"1030":1}}],["做不成事归结于",{"2":{"621":1}}],["做到",{"2":{"901":1}}],["做到这些",{"2":{"389":1}}],["做纯算术的行行走",{"2":{"792":1}}],["做技术调研",{"2":{"631":1}}],["做学习笔记",{"2":{"631":1}}],["做得太少",{"2":{"621":1}}],["做好信息的甄别与筛选",{"2":{"618":1}}],["做好搜索需要深厚的领域",{"2":{"351":1}}],["做更少但创造更多价值",{"2":{"601":1}}],["做对产品",{"2":{"600":1}}],["做日常编码提效",{"2":{"559":1}}],["做副驾驶",{"2":{"559":1}}],["做创造",{"2":{"459":1}}],["做事",{"2":{"436":1}}],["做出准确决策",{"2":{"400":1}}],["做团队的要素是成员",{"2":{"383":1}}],["做产品的要素是用户",{"2":{"383":1}}],["做最真实的自己",{"2":{"380":1}}],["做时间的朋友",{"0":{"379":1}}],["做穷尽性检查",{"2":{"250":1}}],["做什么系统",{"2":{"555":1}}],["做什么",{"2":{"177":1,"179":1,"363":1,"462":1,"465":1,"556":1,"583":1}}],["公开",{"2":{"750":1,"939":3}}],["公开导出层",{"2":{"706":1}}],["公开但无",{"2":{"46":1}}],["公式解析与求值引擎",{"2":{"655":1}}],["公式计算",{"2":{"647":1}}],["公式编辑器控件",{"2":{"647":1}}],["公式编辑器组件",{"2":{"647":1}}],["公式文档",{"2":{"647":1}}],["公式函数文档词典",{"2":{"647":1}}],["公式函数注册系统",{"2":{"647":1}}],["公式",{"2":{"646":1}}],["公司代码库或长期客户信息",{"2":{"437":1}}],["公司维护",{"2":{"344":1}}],["公共基础设施",{"2":{"939":1}}],["公共类型",{"2":{"939":1}}],["公共类",{"0":{"778":1}}],["公共常量和工具函数",{"2":{"735":1}}],["公共接口定义",{"2":{"735":1}}],["公共",{"0":{"693":1,"898":1,"926":1},"2":{"733":1,"734":2,"735":2,"737":1,"778":1,"789":2,"790":2}}],["公共模块",{"2":{"275":1}}],["公共属性",{"2":{"249":1}}],["误传给期望",{"2":{"247":1}}],["误区3",{"2":{"4":1}}],["误区2",{"2":{"4":1}}],["误区1",{"2":{"4":1}}],["异常处理",{"2":{"891":1}}],["异常清晰",{"2":{"507":1}}],["异常截图",{"2":{"418":1}}],["异常诊断与迭代优化",{"2":{"378":1}}],["异常会中断控制流且类型系统中无法追踪",{"2":{"246":1}}],["异构系统",{"2":{"342":1}}],["异步渲染器加载",{"2":{"652":1}}],["异步表达式求值器",{"2":{"647":1}}],["异步",{"2":{"308":1,"646":1}}],["异步加载渲染器的工厂函数",{"2":{"661":1}}],["异步加载支持",{"2":{"307":1}}],["异步加载",{"2":{"305":1,"652":1}}],["异步加载模块",{"2":{"305":1}}],["异步模块定义",{"2":{"298":1}}],["异步测试",{"2":{"225":1}}],["异步任务",{"2":{"131":1}}],["异步提交",{"2":{"130":1,"131":1}}],["异步消费",{"2":{"126":1}}],["异步大任务",{"0":{"124":1}}],["异步状态管理",{"2":{"91":1}}],["异步请求",{"2":{"88":1}}],["异步获取详情数据",{"2":{"74":1}}],["异步获取列表数据",{"2":{"74":1}}],["诚实",{"2":{"246":1,"511":1}}],["∣",{"2":{"243":2}}],["∣keyof",{"2":{"242":2}}],["翻转",{"2":{"242":1}}],["翻译功能",{"2":{"515":1}}],["翻译成高质量的",{"2":{"444":1}}],["翻译脚本",{"2":{"403":1}}],["翻译官",{"2":{"367":1}}],["翻译",{"2":{"54":1,"515":2}}],["我也应用了",{"2":{"1002":1}}],["我经常与它们发起激烈的",{"2":{"1002":1}}],["我深度使用了",{"2":{"1002":1}}],["我深度投身于",{"2":{"1000":1}}],["我希望你看到的是一个工程师对",{"2":{"1002":1}}],["我不希望这里只是枯燥的代码片段或简单的技术分享与总结",{"2":{"1002":1}}],["我把它定义为",{"2":{"1002":1}}],["我相信未来的全栈不再是线性的技能堆叠",{"2":{"1001":1}}],["我意识到规则变了",{"2":{"1001":1}}],["我曾以为技术的广度",{"2":{"1001":1}}],["我曾尝试将几本书的内容讲给没时间阅读的朋友听",{"2":{"610":1}}],["我和大多数开发者一样",{"2":{"1001":1}}],["我的认知迭代",{"0":{"1001":1}}],["我的体会",{"2":{"358":1,"359":1,"360":1,"361":1}}],["我主要在折腾和实践以下几个方向",{"2":{"1000":1}}],["我是一名拥有全栈背景的开发者",{"2":{"1000":1}}],["我是谁",{"0":{"377":1,"1000":1},"2":{"408":1,"433":1}}],["我要做",{"2":{"982":1}}],["我要一匹更快的马",{"2":{"366":1}}],["我必须把他们的质疑解释清楚",{"2":{"610":1}}],["我原以为完全看懂的书",{"2":{"610":1}}],["我懂了",{"2":{"610":1}}],["我就是全栈",{"2":{"553":1}}],["我最关心的不仅是",{"2":{"525":1}}],["我最大的感触是",{"2":{"491":1}}],["我排除了单一的",{"2":{"502":1}}],["我转而使用更高阶的模型",{"2":{"499":1}}],["我决定创建一个",{"2":{"496":1}}],["我刚查到一个",{"2":{"494":1}}],["我刚才让你修改了哪个文件",{"2":{"486":1}}],["我正在尝试将这套理念融入我的博客内容工作流",{"2":{"491":1}}],["我设定了一个具体的研究课题进行测试",{"2":{"473":1}}],["我首先感到的是一种熟悉的兴奋",{"2":{"457":1}}],["我从哪获取知识",{"2":{"433":1}}],["我做过什么",{"2":{"408":1,"433":1}}],["我能为谁解决问题",{"0":{"377":1}}],["我能变成用户",{"2":{"366":1}}],["我赌这个按钮改为红色",{"2":{"369":1}}],["我饿得不行了",{"2":{"366":1}}],["我理解用户",{"2":{"366":1}}],["我尝试用理性的数学语言来重构感性的产品直觉",{"2":{"364":1}}],["我认为全栈的护城河在于",{"2":{"553":1}}],["我认为竞品推出这个功能是想解决留存问题",{"2":{"369":1}}],["我认为",{"2":{"363":1,"1002":1}}],["我需要一个同时有",{"2":{"240":1}}],["我们迈入社会后",{"2":{"1049":1}}],["我们又只能被动地任由社会教育",{"2":{"1042":1}}],["我们大多接触到一些具有数字化特性的",{"2":{"1041":1}}],["我们虽然在疫情期间熟悉了这种工作模式",{"2":{"1039":1}}],["我们并不需要像辩论赛那样争论",{"2":{"1030":1}}],["我们只有在日常注重预防保健",{"2":{"1022":1}}],["我们只有通过持续的思考和执行提升自己的能力",{"2":{"626":1}}],["我们只需要拆解并关注少部分核心要素",{"2":{"1015":1}}],["我们只需把少量比较大的系数对应的简单图像和对应的系数一起存起来",{"2":{"1015":1}}],["我们基本都能获得不错的效果",{"2":{"1011":1}}],["我们是否梳理总结过自己真正实践",{"2":{"1011":1}}],["我们很自然地产出长",{"2":{"1006":1}}],["我们很容易掉入的陷阱就是",{"2":{"526":1}}],["我们人类也从",{"2":{"1005":1}}],["我们沉淀出了三种走向成熟的混合架构范式",{"2":{"971":1}}],["我们会发现一个共通的实践智慧",{"2":{"965":1}}],["我们提出",{"2":{"965":1}}],["我们也将其纳入本次对比分析",{"2":{"965":1}}],["我们也可以显式指定类型参数",{"2":{"254":1}}],["我们每天都在与各种各样的系统交互",{"2":{"1007":1}}],["我们每天都在做取舍",{"2":{"528":1}}],["我们每天接收的输入往往带有严重的偏置",{"2":{"618":1}}],["我们为什么需要读书",{"0":{"606":1}}],["我们使用",{"2":{"572":1}}],["我们的时间变得越来越碎",{"2":{"1034":1}}],["我们的核心是",{"2":{"1016":1}}],["我们的核心竞争力不再是精通具体的语言特性或掌握庞杂的框架细节",{"2":{"558":1}}],["我们的改善并不需要一直猛踩油门",{"2":{"1007":1}}],["我们的角色是相互依赖的",{"2":{"1006":1}}],["我们的大脑才能修正权重",{"2":{"369":1}}],["我们构建的是一套解决复杂问题的思维模型",{"2":{"558":1}}],["我们掌握语言",{"2":{"553":1}}],["我们都在拼命地做加法",{"2":{"553":1}}],["我们试图用人力去掩盖技术栈之间的裂痕",{"2":{"553":1}}],["我们被迫成为",{"2":{"553":1}}],["我们还需要具备数据飞轮意识",{"2":{"541":1}}],["我们还不知道",{"2":{"254":1}}],["我们心里都明白这些任务有价值",{"2":{"528":1}}],["我们心里一定要装着一条",{"2":{"388":1}}],["我们可有关注他们在内部协作的增强回路呢",{"2":{"1008":1}}],["我们可基于拆解与关联的思路按照以下步骤进行",{"2":{"1007":1}}],["我们可能会陷入一种",{"2":{"530":1}}],["我们可能会得出",{"2":{"526":1}}],["我们可以继续结合生活中的例子来看下",{"2":{"1026":1}}],["我们可以结合身边的很多例子来反思下",{"2":{"1026":1}}],["我们可以发现",{"2":{"1017":1}}],["我们可以更好地看清为什么多样性特别重要",{"2":{"1014":1}}],["我们可以不断拿起两个可能有关系的变量",{"2":{"1007":1}}],["我们可以看出三个关键设计思想",{"2":{"570":1}}],["我们可以这样一步步来",{"2":{"494":1}}],["我们可以在入口文件中轻松启动交互式",{"2":{"490":1}}],["我们可以封装一个函数",{"2":{"489":1}}],["我们可以得出一个关键结论",{"2":{"476":1}}],["我们可以从两个维度来理解",{"2":{"441":1}}],["我们可以从功能属性和实现方式两个维度来理解",{"2":{"411":1}}],["我们可以精准限制每个子智能体的权限",{"2":{"415":1}}],["我们可以为不同的",{"2":{"415":1}}],["我们可以为每个接口定义精确的返回类型",{"2":{"256":1}}],["我们可以将其自动化程度分为三个档次",{"2":{"403":1}}],["我们可以将其封装成一个独立的工具模块",{"2":{"295":1}}],["我们可以遵循经验和规律按部就班地做事",{"2":{"382":1}}],["我们可以把这个黑盒子",{"2":{"382":1}}],["我们可以构建起一套坚不可摧的代码契约",{"2":{"326":1}}],["我们可以根据需要",{"2":{"295":1}}],["我们可以根据业务需求扩展",{"2":{"150":1}}],["我们可以横向对比多份生成结果",{"2":{"171":1}}],["我们可以先用",{"2":{"171":1}}],["我们可以通过以下三个步骤的",{"2":{"368":1}}],["我们可以通过以下策略压平组件层级",{"2":{"170":1}}],["我们可以通过前端构建工具",{"2":{"217":1}}],["我们可以通过简单的",{"2":{"160":1}}],["我们可以考虑以下混合思路",{"2":{"168":1}}],["我们可以自行解析这个数据流",{"2":{"141":1}}],["我们可以利用熟悉的后端生态",{"2":{"548":1}}],["我们可以利用其声明式和模块化设计",{"2":{"470":1}}],["我们可以利用",{"2":{"135":1,"487":1}}],["我们该如何设计一套人机协作的链路",{"2":{"525":1}}],["我们最终锁定了",{"2":{"493":1}}],["我们确定了",{"2":{"492":1}}],["我们确立了一些",{"2":{"441":1}}],["我们进行了一次关键的视角切换",{"2":{"492":1}}],["我们实际上是在为",{"2":{"491":1}}],["我们实际上是在构建一个高度自治",{"2":{"440":1}}],["我们仅需少量代码就能构建出具备自主执行能力的",{"2":{"491":1}}],["我们在遇到比较复杂的问题时",{"2":{"1015":1}}],["我们在日常工作生活中要试着平衡",{"2":{"1014":1}}],["我们在日常开发或产品设计中",{"2":{"382":1}}],["我们在接收九年义务教育时就开始学习这些",{"2":{"1013":1}}],["我们在找到自己的增强回路后也需要借助调节回路",{"2":{"1009":1}}],["我们在遵循着表象的规律做事",{"2":{"1007":1}}],["我们在不同中长期时间段需要针对自身拆解出几个重要因素",{"2":{"1006":1}}],["我们在评估各种眼花缭乱的方案时",{"2":{"971":1}}],["我们在做技术选型时",{"2":{"965":1}}],["我们在简历上堆砌的",{"2":{"558":1}}],["我们在选择时需要关注三个维度",{"2":{"514":1}}],["我们在",{"2":{"474":1}}],["我们探讨了多智能体系统",{"2":{"467":1}}],["我们重新讨论",{"2":{"457":1}}],["我们真的需要每个人都成为全知全能的",{"2":{"457":1}}],["我们便能真正以一个",{"2":{"440":1}}],["我们正在以前所未有的效率",{"2":{"440":1}}],["我们正在经历一场深刻的变革",{"2":{"420":1}}],["我们面对的不再是冷冰冰的代码或碎片化的对话框",{"2":{"440":1}}],["我们深度拆解了",{"2":{"433":1}}],["我们必须将思维从",{"2":{"967":1}}],["我们必须讨论另一种在处理高复杂度",{"2":{"428":1}}],["我们必须深入思考如何设计动态调整策略或引入人工干预节点",{"2":{"423":1}}],["我们对其角色",{"2":{"494":1}}],["我们对",{"2":{"403":1}}],["我们对比分析了多种通信技术",{"2":{"133":1}}],["我们常被日常现象的",{"2":{"390":1}}],["我们往往很容易一眼看到",{"2":{"383":1}}],["我们习惯了盯着这些看得见的结果找原因",{"2":{"382":1}}],["我们追求的是极简",{"2":{"380":1}}],["我们就实现了一个具备工具调用和会话记忆能力的终端",{"2":{"490":1}}],["我们就可以按照科学的节奏",{"2":{"379":1}}],["我们就应当承担那额外的",{"2":{"99":1}}],["我们能否为",{"2":{"367":1}}],["我们能写出更易理解",{"2":{"201":1}}],["我们更习惯于透过现象探寻底层的运行规律",{"2":{"364":1}}],["我们更倾向于直接调试",{"2":{"217":1}}],["我们不该用理想化的方法要求自己",{"2":{"1036":1}}],["我们不应该将自己局限在",{"2":{"552":1}}],["我们不应再纠结于单应仰望更高应仰望更高维度的景观",{"2":{"539":1}}],["我们不能以静态的视角审视现有工具",{"2":{"534":1}}],["我们不再只是跑得更快",{"2":{"528":1}}],["我们不再满足于单一的包管理",{"2":{"335":1}}],["我们不可能无限增加功能",{"2":{"394":1}}],["我们不仅要看到",{"2":{"537":1}}],["我们不仅要避免自己掉入沉没成本陷阱",{"2":{"393":1}}],["我们不仅为",{"2":{"456":1}}],["我们不仅可以极大地降低开发成本",{"2":{"378":1}}],["我们不必成为改变世界的庞然大物",{"2":{"381":1}}],["我们不需要做庞大的计划",{"2":{"361":1}}],["我们要关注的不是单选题",{"2":{"1030":1}}],["我们要构建的是一套",{"2":{"534":1}}],["我们要先理清逻辑",{"2":{"447":1}}],["我们要先划分层级结构",{"2":{"170":1}}],["我们要拆解系统里的",{"2":{"383":1}}],["我们要学着先做一个乐于助人的创作者",{"2":{"377":1}}],["我们要敢于像",{"2":{"360":1}}],["我们要敢于说",{"2":{"360":1}}],["我们要把",{"2":{"360":1}}],["我们将从底层到顶层",{"2":{"965":1}}],["我们将从编写原则",{"2":{"444":1}}],["我们将最佳实践外化为可靠的防错系统",{"2":{"602":1}}],["我们将探讨如何通过声明式架构实现多",{"2":{"467":1}}],["我们将通过细节解析与工程实践",{"2":{"441":1}}],["我们将逐一拆解这些核心组件",{"2":{"434":1}}],["我们将逐一拆解这五种重塑生产力的核心类别",{"2":{"413":1}}],["我们将其深化和系统化",{"2":{"397":1}}],["我们将永远在已知的舒适区内打转",{"2":{"360":1}}],["我们将四种规范进行横向对比",{"2":{"308":1}}],["我们从",{"2":{"337":1}}],["我们从概念辨析出发",{"2":{"155":1}}],["我们经常听到",{"2":{"1006":1}}],["我们经常面临两种规范交织的情况",{"2":{"333":1}}],["我们经常在文件夹根目录创建一个",{"2":{"312":1}}],["我们经常需要定义一些有通用约束的接口",{"2":{"256":1}}],["我们完全可以用",{"2":{"308":1}}],["我们已经推开了模块化编程的大门",{"2":{"303":1}}],["我们旨在理解不同模块化规范的特点与适用场景",{"2":{"293":1}}],["我们通过两个示例来演示其从",{"2":{"482":1}}],["我们通过系列文章详细介绍了模块化的基础概念",{"2":{"272":1}}],["我们通常以为自己没成事是因为缺少某个关键的",{"2":{"622":1}}],["我们通常会遇到以下三种常见的",{"2":{"452":1}}],["我们通常会结合经典的设计模式来组织模块的内部逻辑与对外接口",{"2":{"299":1}}],["我们通常需要处理大量文件",{"2":{"202":1}}],["我们通常采用",{"2":{"171":1,"205":1}}],["我们学会用泛型的思维方式去设计通用的数据结构",{"2":{"271":1}}],["我们应该继续尝试走进科学",{"2":{"1007":1}}],["我们应该追求做",{"2":{"396":1}}],["我们应该",{"2":{"250":1}}],["我们来看看不同项目场景下的实际应用",{"2":{"204":1}}],["我们定义组件边界",{"2":{"180":1}}],["我们或许能提炼出一个更普适的架构哲学",{"2":{"132":1}}],["我们需要继续思考是否能把结尾与开头也用一条线段连接起来形成一个增强回路",{"2":{"1007":1}}],["我们需要的不再是花哨的样式技巧",{"2":{"971":1}}],["我们需要对",{"2":{"605":1}}],["我们需要摆脱",{"2":{"603":1}}],["我们需要通过",{"2":{"600":1}}],["我们需要颠覆传统的创新范式",{"2":{"598":1}}],["我们需要具备极其敏锐的",{"2":{"541":1}}],["我们需要认清一个现实",{"2":{"538":1}}],["我们需要追踪的是",{"2":{"537":1}}],["我们需要一座桥梁",{"2":{"536":1}}],["我们需要比以前更清晰地告诉",{"2":{"532":1}}],["我们需要将",{"2":{"532":1}}],["我们需要重点捕获",{"2":{"488":1}}],["我们需要在休息",{"2":{"605":1}}],["我们需要在自然语言与",{"2":{"532":1}}],["我们需要在入口处显式加载",{"2":{"481":1}}],["我们需要在这一阶段找出驱动",{"2":{"173":1}}],["我们需要清醒地认识到",{"2":{"458":1}}],["我们需要保持敏锐",{"2":{"399":1}}],["我们需要执行一套完整的逆向工程循环",{"2":{"371":1}}],["我们需要判断哪些环节利用",{"2":{"367":1}}],["我们需要为它设计底盘和方向盘",{"2":{"367":1}}],["我们需要同时具备",{"2":{"367":1}}],["我们需要利用",{"2":{"358":1}}],["我们需要引入分层架构",{"2":{"336":1}}],["我们需要关注以下几个层面",{"2":{"226":1}}],["我们需要关注以下三个关键环节",{"2":{"171":1}}],["我们需要借助可配置化工具",{"2":{"219":1}}],["我们需要设计反向数据流",{"2":{"175":1}}],["我们需要掌握这些要点",{"2":{"150":1}}],["我们需要发送庞大的",{"2":{"131":1}}],["我们需要",{"2":{"96":1}}],["我们需要配置",{"2":{"94":1}}],["我们绝不会在组件里直接裸写",{"2":{"87":1}}],["我们一般使用",{"2":{"83":1}}],["行是知的完成",{"2":{"1042":1}}],["行是知的落实",{"2":{"1042":1}}],["行文至此",{"2":{"1010":1,"1018":1,"1042":1}}],["行文本构造器",{"2":{"790":1}}],["行文本构造",{"2":{"788":1,"789":1}}],["行文本",{"2":{"788":1}}],["行代码",{"2":{"902":1}}],["行调用的函数",{"2":{"899":1}}],["行缓冲",{"2":{"899":1}}],["行分割为独立dom元素",{"2":{"819":1}}],["行统计",{"2":{"805":1}}],["行游标",{"2":{"799":1}}],["行游标状态机",{"2":{"789":1}}],["行尾等属性配置",{"2":{"980":1}}],["行尾字符处理",{"2":{"797":1}}],["行尾禁则字符",{"2":{"795":1}}],["行适配容差",{"2":{"796":1,"805":1}}],["行首",{"2":{"795":1}}],["行级渲染引擎",{"2":{"790":1}}],["行级对比",{"2":{"790":1}}],["行走层",{"2":{"789":1}}],["行范围回调",{"2":{"797":1}}],["行范围输出",{"2":{"789":1,"790":1}}],["行范围",{"2":{"789":1}}],["行行走主循环",{"2":{"797":1}}],["行行走是布局的热路径核心",{"2":{"797":1}}],["行行走|",{"2":{"789":1}}],["行行走引擎",{"0":{"797":1},"2":{"788":1,"790":1}}],["行列索引到像素",{"2":{"706":1}}],["行操作",{"2":{"650":1,"654":1}}],["行数上限",{"2":{"594":1}}],["行必须作为最后一行",{"2":{"581":1}}],["行的配置不仅难以维护",{"2":{"575":1}}],["行以内",{"2":{"572":1}}],["行内生成",{"2":{"565":1}}],["行内生成与修改",{"2":{"564":1}}],["行内导出",{"2":{"310":1}}],["行动指南",{"0":{"623":1},"1":{"624":1,"625":1,"626":1}}],["行动建议",{"2":{"465":1}}],["行动执行后",{"2":{"427":1}}],["行动模块确保了",{"2":{"412":1}}],["行动模块会决定尝试不同的关键词或切换工具",{"2":{"412":1}}],["行动模块的核心在于完成以下三个层面的逻辑闭环",{"2":{"412":1}}],["行动并非死板的执行脚本",{"2":{"412":1}}],["行动则是先",{"2":{"412":1}}],["行动类",{"2":{"411":1}}],["行动",{"0":{"412":1},"2":{"408":1,"412":1,"414":3,"427":2}}],["行动小建议",{"2":{"385":1}}],["行为指令",{"2":{"994":1}}],["行为强制层",{"2":{"986":1}}],["行为定义",{"2":{"980":1}}],["行为约束",{"2":{"976":1}}],["行为不一致",{"2":{"973":1}}],["行为驱动的属性解析",{"2":{"946":1}}],["行为树遍历",{"2":{"946":1}}],["行为一致",{"2":{"939":1}}],["行为方式",{"2":{"614":1}}],["行为准则",{"2":{"408":1,"882":1}}],["行为等同于函数重载",{"2":{"238":1}}],["行业分享",{"2":{"625":1}}],["行业洞察报告",{"2":{"518":1}}],["行业洞察等场景",{"2":{"518":1}}],["行业",{"2":{"406":1}}],["行业环境",{"2":{"400":1}}],["行",{"2":{"329":1,"883":1,"947":1}}],["行情",{"2":{"111":1}}],["∩",{"2":{"236":1,"244":1}}],["裸参数",{"2":{"234":1}}],["底部构建环境",{"0":{"969":1},"2":{"965":1}}],["底座",{"2":{"551":1}}],["底类型",{"2":{"232":1}}],["底层类复用",{"2":{"965":1}}],["底层原理",{"2":{"963":1}}],["底层已经默认开启了支持",{"2":{"960":1}}],["底层就会自动通过",{"2":{"960":1}}],["底层流式文本生成",{"2":{"917":1}}],["底层差异",{"2":{"699":1}}],["底层依赖自研",{"2":{"699":1}}],["底层编译器",{"2":{"626":1}}],["底层操作系统",{"2":{"615":1}}],["底层模型大脑",{"2":{"544":1}}],["底层可插拔",{"2":{"344":1}}],["底层驱动",{"2":{"344":1}}],["底层通道",{"2":{"342":1}}],["底层封装",{"2":{"342":1}}],["底层的核心思想之一",{"2":{"302":1}}],["底层逻辑",{"2":{"198":1}}],["底层会自动重连",{"2":{"144":1}}],["底层会对数组进行确定性哈希",{"2":{"92":1}}],["底层传输机制",{"2":{"134":1}}],["底层",{"2":{"105":1,"114":1,"135":1,"342":1,"939":1}}],["收获最大的书",{"2":{"610":1}}],["收藏夹吃灰",{"2":{"515":1}}],["收集一些建议",{"2":{"1043":1}}],["收集大脑基于客观因素或主观思绪而产生的事务",{"2":{"1037":1}}],["收集依赖",{"2":{"770":1}}],["收集可渲染对象",{"2":{"765":1}}],["收集素材",{"2":{"631":1}}],["收集用户的交互与纠错数据",{"2":{"541":1}}],["收集调查成果",{"2":{"471":1}}],["收集量化数据",{"2":{"470":1}}],["收集",{"2":{"470":1}}],["收集环境反馈",{"2":{"427":1}}],["收敛能力",{"2":{"367":1}}],["收货地址",{"2":{"278":1}}],["收窄后",{"2":{"249":1}}],["收窄",{"2":{"231":4}}],["收到响应时调用",{"2":{"898":1}}],["收到请求后立刻查询状态并返回",{"2":{"159":1}}],["收到",{"2":{"144":1,"150":1,"159":1,"164":1}}],["收到指定类型消息",{"2":{"138":1}}],["收到通用消息",{"2":{"138":1}}],["收到消息时调用",{"2":{"898":1}}],["收到消息时的回调",{"2":{"141":1}}],["收到消息",{"2":{"138":1,"141":1,"144":1}}],["收到服务器发送的通用消息",{"2":{"138":1}}],["辨识",{"2":{"230":1}}],["辨识字段收窄",{"2":{"231":1}}],["辨识字段",{"2":{"230":4}}],["称为",{"2":{"230":1}}],["∪",{"2":{"229":1,"244":1}}],["∅",{"2":{"227":1}}],["含少部分主食",{"2":{"1047":1}}],["含端口检测与清理",{"2":{"980":1}}],["含延迟",{"2":{"834":1}}],["含前后空白",{"2":{"805":1}}],["含文本内容",{"2":{"805":1}}],["含行文本",{"2":{"786":1,"805":1}}],["含插值计算",{"2":{"749":1}}],["含表达式",{"2":{"735":1}}],["含表达式+滤镜",{"2":{"735":2}}],["含组件引用",{"2":{"661":1}}],["含糊的地方你会直接卡壳",{"2":{"610":1}}],["含国内模型",{"2":{"568":1}}],["含在线",{"2":{"565":1}}],["含数据库的完整",{"2":{"562":1}}],["含",{"2":{"227":1,"505":1,"706":1,"799":1,"805":1,"939":1}}],["集群上",{"2":{"551":1}}],["集中式全局状态",{"2":{"341":1}}],["集的交",{"2":{"250":1}}],["集的并",{"2":{"250":1}}],["集",{"2":{"229":2}}],["集合的视角",{"2":{"229":1}}],["集合交集",{"2":{"227":1}}],["集合并集",{"2":{"227":1}}],["集合含义",{"2":{"227":1}}],["集成测试",{"2":{"980":1}}],["集成到现有",{"2":{"956":1}}],["集成示例",{"2":{"939":1}}],["集成页面可见性",{"2":{"891":1}}],["集成了完备的指令说明",{"2":{"441":1}}],["集成了文件读写",{"2":{"411":1}}],["集成",{"0":{"16":1,"342":1},"2":{"851":2,"908":3,"909":1,"931":1,"939":3}}],["善用远程办公工具",{"2":{"1040":1}}],["善用居家办公的优势",{"2":{"1040":1}}],["善用指引",{"2":{"609":1}}],["善用",{"2":{"226":1,"578":1,"583":1}}],["共舞",{"2":{"1002":1}}],["共",{"2":{"986":1}}],["共用同一套",{"2":{"670":1}}],["共性难题",{"2":{"494":1}}],["共存策略",{"2":{"333":1}}],["共同构成这一翻译层的核心骨架",{"2":{"536":1}}],["共同完成一个特定的功能",{"2":{"328":1}}],["共同减少团队协作中的摩擦",{"2":{"226":1}}],["共享测试数据",{"2":{"939":1}}],["共享相同的提示词标准化",{"2":{"915":1}}],["共享工具",{"2":{"908":1,"931":1}}],["共享工具层",{"2":{"906":1,"907":1}}],["共享工具库",{"2":{"290":1}}],["共享主会话",{"2":{"590":2,"592":1}}],["共享的依赖应该保持向后兼容",{"2":{"291":1}}],["共享的事件总线",{"2":{"289":1}}],["共享类型定义",{"2":{"290":1}}],["共享",{"2":{"290":1}}],["共享资源",{"2":{"290":1,"939":1}}],["共享状态管理",{"2":{"289":1}}],["共享状态或自定义协议进行通信",{"2":{"286":1}}],["共享依赖管理",{"2":{"291":1}}],["共享依赖",{"2":{"288":1}}],["共享基础库",{"2":{"286":1}}],["共享基础设施",{"2":{"280":2,"821":1}}],["共享领域概念",{"2":{"280":2}}],["共享模块路径",{"2":{"573":1}}],["共享模块",{"2":{"280":2,"290":1}}],["共享库需要被其他项目引用",{"2":{"213":1}}],["共享库项目",{"0":{"213":1},"2":{"211":1}}],["共有",{"2":{"233":1}}],["合集",{"2":{"790":1}}],["合成与冲突处理",{"0":{"832":1}}],["合成输出",{"2":{"828":1}}],["合成模式",{"2":{"822":1,"834":1}}],["合成",{"2":{"819":1,"832":1}}],["合成系统通过",{"2":{"832":1}}],["合成系统",{"2":{"814":1}}],["合成对象代理",{"2":{"735":1}}],["合成元素",{"2":{"735":3}}],["合成元素基类",{"2":{"735":2}}],["合并为一个段",{"2":{"795":1}}],["合并",{"2":{"763":1,"979":1,"980":1}}],["合并后的数据",{"2":{"663":1}}],["合并所有声明文件为一个",{"2":{"203":1}}],["合同分析",{"2":{"522":1}}],["合规要求",{"2":{"565":1}}],["合规与部署",{"2":{"519":1}}],["合规性和部分定制化场景下更具优势",{"2":{"510":1}}],["合规审批流程",{"2":{"436":1}}],["合作开发",{"2":{"353":1}}],["合理的饮食",{"2":{"1034":1}}],["合理饮食",{"2":{"1025":1}}],["合理性",{"2":{"390":1}}],["合理配置共享依赖的加载时机",{"2":{"291":1}}],["合理划分子应用边界",{"2":{"291":1}}],["合理运用泛型",{"2":{"263":1}}],["合理规划",{"2":{"226":1}}],["^4",{"2":{"288":1,"880":2}}],["^18",{"2":{"288":6}}],["^",{"2":{"222":1,"762":3,"918":1,"948":1}}],["影响所有动画",{"2":{"826":1}}],["影响决策",{"2":{"519":1}}],["影响",{"2":{"217":1}}],["覆盖全面",{"2":{"939":1}}],["覆盖旧动画",{"2":{"832":1}}],["覆盖面窄",{"2":{"785":1}}],["覆盖了",{"2":{"746":1}}],["覆盖了从",{"2":{"60":1}}],["覆盖所有模块",{"2":{"677":1}}],["覆盖从底层数据钻取到高层洞察阅读的完整链路",{"2":{"634":1}}],["覆盖读书笔记",{"2":{"628":1}}],["覆盖概念解释",{"2":{"628":1}}],["覆盖范围最广",{"2":{"518":1}}],["覆盖写入",{"2":{"489":1}}],["覆盖",{"2":{"405":1,"658":1,"715":1,"964":1}}],["覆盖广度不仅仅是",{"2":{"365":1}}],["覆盖或扩展特定选项",{"2":{"209":1}}],["子agent实现",{"2":{"988":1}}],["子agent不应加载此技能",{"2":{"986":1}}],["子agent",{"2":{"983":1}}],["子agent测试技能的方法",{"2":{"980":1}}],["子agent驱动任务执行",{"2":{"980":1}}],["子agent驱动开发",{"0":{"988":1},"2":{"975":1}}],["子命令",{"2":{"851":1}}],["子动画按",{"2":{"831":1}}],["子动画",{"2":{"822":1}}],["子动画链表遍历渲染",{"2":{"819":1}}],["子节点链表尾",{"2":{"824":1,"834":1}}],["子节点链表头",{"2":{"824":1,"834":1}}],["子节点局部变换",{"2":{"769":1}}],["子节点变换",{"2":{"769":1}}],["子节点",{"2":{"766":2,"818":2}}],["子节点管理",{"2":{"677":1,"679":1}}],["子帧开关",{"2":{"737":1}}],["子类型",{"2":{"706":1}}],["子类实现具体变形逻辑",{"2":{"744":1}}],["子类实现具体绘制逻辑",{"2":{"680":1}}],["子类实现",{"2":{"683":4}}],["子组件的根节点会受到父组件作用域的影响",{"2":{"961":1}}],["子组件通过",{"2":{"653":1}}],["子组件",{"2":{"653":1}}],["子组件在适当时机触发契约",{"2":{"175":1}}],["子包数",{"2":{"643":1}}],["子目录中的",{"2":{"571":1}}],["子模型丰富",{"2":{"522":1}}],["子模型",{"2":{"512":1}}],["子智能体角色",{"2":{"570":2}}],["子智能体",{"2":{"471":3}}],["子应用可以使用不同的技术栈",{"2":{"292":1}}],["子应用加载失败时的降级策略",{"2":{"291":1}}],["子应用数量不宜过多",{"2":{"291":1}}],["子应用入口",{"2":{"290":1}}],["子应用目录",{"2":{"290":1}}],["子应用之间的错误隔离",{"2":{"291":1}}],["子应用之间的通信是微前端架构的关键问题",{"2":{"289":1}}],["子应用之间通过事件总线",{"2":{"286":1}}],["子应用组件实现",{"2":{"288":1}}],["子应用",{"2":{"288":2}}],["子应用管理内部路由",{"2":{"286":1}}],["子项目配置",{"2":{"216":1}}],["子项目可以在继承的基础上",{"2":{"209":1}}],["子项目通过",{"2":{"209":1}}],["复选框",{"2":{"939":1}}],["复制并设置默认请求头",{"2":{"891":1}}],["复制",{"2":{"851":1}}],["复制验证码居然不能自动跳转",{"2":{"370":1}}],["复古棕褐色",{"2":{"677":1}}],["复利",{"2":{"1011":1}}],["复利曲线",{"2":{"463":1}}],["复利效应",{"2":{"386":1}}],["复盘自身存在的问题",{"2":{"1026":1}}],["复盘总结的可选方式有很多种",{"2":{"1019":1}}],["复盘",{"2":{"369":1}}],["复合操作",{"2":{"851":1}}],["复合值",{"2":{"828":1}}],["复合属性自动拆分",{"2":{"685":1}}],["复合杠杆率",{"2":{"361":1}}],["复合指数增长",{"0":{"361":1}}],["复合型人才必须拥有极高的审美眼光与判别能力",{"2":{"359":1}}],["复合型人才生存手册",{"2":{"357":1}}],["复合项目",{"0":{"208":1}}],["复用的单位应该是",{"2":{"967":1}}],["复用困难",{"2":{"957":1}}],["复用登录会话",{"2":{"846":1}}],["复用时间管理逻辑",{"2":{"815":1}}],["复用基类",{"2":{"735":1}}],["复用",{"2":{"270":1,"768":1}}],["复用多次",{"2":{"252":1}}],["复杂逻辑的审计与验收",{"2":{"1001":1}}],["复杂组件库的",{"2":{"965":1}}],["复杂动画",{"2":{"965":1}}],["复杂动画等场景时又显得捉襟见肘",{"2":{"965":1}}],["复杂动画编排困难",{"2":{"812":1}}],["复杂多步任务自动执行",{"2":{"565":1}}],["复杂多步推理",{"2":{"511":1}}],["复杂代码审查与",{"2":{"521":1}}],["复杂任务规划",{"2":{"511":1,"521":1}}],["复杂推理等高要求场景",{"2":{"521":1}}],["复杂推理均居前列",{"2":{"519":1}}],["复杂推理",{"2":{"510":1,"521":1}}],["复杂的层级状态联动以及精细的交互动画",{"2":{"965":1}}],["复杂的图表交互",{"2":{"699":1}}],["复杂的任务给单智能体加再多",{"2":{"467":1}}],["复杂的数据清洗",{"2":{"378":1}}],["复杂建模",{"2":{"436":1}}],["复杂性",{"2":{"411":1}}],["复杂性的分解",{"2":{"180":1}}],["复杂技能拆解与进阶路径规划",{"2":{"406":1}}],["复杂领域驱动设计",{"2":{"344":1}}],["复杂交互型",{"2":{"342":1}}],["复杂度最高",{"2":{"763":1}}],["复杂度过高",{"2":{"757":1}}],["复杂度",{"2":{"525":1,"585":1}}],["复杂度控制",{"2":{"292":1}}],["复杂度问题",{"2":{"191":1}}],["复杂",{"2":{"274":1,"544":1,"702":1,"735":3}}],["复杂优先",{"2":{"199":1}}],["复杂猜想",{"2":{"198":1,"199":1}}],["复杂场景可两者结合",{"2":{"166":1}}],["复杂场景下的",{"2":{"98":1}}],["复杂查询参数",{"2":{"135":1}}],["复杂图形解析工具",{"2":{"101":1}}],["复杂应用的关键",{"2":{"293":1}}],["复杂应用",{"2":{"6":1}}],["继续积累常识",{"2":{"1048":1}}],["继续加大训练强度",{"2":{"1047":1,"1048":1}}],["继续生成",{"2":{"922":1}}],["继续调用",{"2":{"918":1}}],["继续累加",{"2":{"797":1}}],["继续对话迭代功能",{"2":{"561":1}}],["继续发送",{"2":{"127":1}}],["继承timer",{"2":{"819":5}}],["继承clock",{"2":{"819":2}}],["继承自",{"2":{"680":1,"682":1,"826":1,"898":1}}],["继承其属性和方法",{"2":{"270":1}}],["继承其他",{"2":{"203":1}}],["继承根配置",{"2":{"216":1}}],["继承根目录或父项目的通用配置",{"2":{"209":1}}],["继承根目录的基础配置",{"2":{"203":1}}],["继承",{"0":{"240":1},"2":{"205":1,"677":2,"769":3,"771":1,"818":2,"822":5,"825":2,"826":1,"958":1}}],["语料说明",{"2":{"790":1}}],["语料来源元数据",{"2":{"790":1}}],["语料面板",{"2":{"790":1}}],["语料状态指针",{"2":{"790":1}}],["语料状态",{"2":{"790":1}}],["语料扫频快照",{"2":{"790":2}}],["语料扫频",{"2":{"790":1}}],["语料",{"2":{"790":2}}],["语料诊断",{"2":{"790":1}}],["语料诊断逻辑",{"2":{"790":1}}],["语料诊断页",{"2":{"790":1}}],["语料库",{"2":{"360":1}}],["语音助手等场景",{"2":{"523":1}}],["语音生成等",{"2":{"902":1}}],["语音生成",{"2":{"522":1}}],["语音克隆与",{"2":{"522":1}}],["语音合成与视频生成能力强",{"2":{"522":1}}],["语音合成与克隆",{"2":{"512":1}}],["语音合成",{"2":{"522":1}}],["语音转录",{"2":{"515":1}}],["语音",{"2":{"410":1,"512":1,"522":2,"523":1,"908":1}}],["语义令牌",{"2":{"966":1}}],["语义化命名",{"2":{"962":1}}],["语义化",{"2":{"962":1}}],["语义化版本号更新",{"2":{"980":1}}],["语义化版本",{"2":{"331":1}}],["语义桶定义",{"2":{"790":1}}],["语义桶",{"2":{"790":1}}],["语义自洽",{"2":{"329":1}}],["语境场",{"2":{"367":1}}],["语境设计",{"2":{"367":1}}],["语境构建",{"0":{"367":1}}],["语境",{"2":{"330":1}}],["语句不同",{"2":{"313":1}}],["语句中缺少",{"2":{"203":1}}],["语法强大",{"2":{"965":1}}],["语法糖",{"2":{"763":1}}],["语法解析器",{"2":{"647":1,"655":2}}],["语法解析",{"2":{"646":1}}],["语法解析和表达式求值引擎",{"2":{"645":1}}],["语法的价值又还剩多少",{"2":{"553":1}}],["语法最显著的扩展是支持",{"2":{"318":1}}],["语法实践",{"2":{"310":1,"311":1}}],["语法",{"2":{"203":1,"308":1,"320":1,"553":1,"814":1,"819":1}}],["语法支持",{"2":{"203":1}}],["语言模型调用选项",{"2":{"925":1}}],["语言模型接口",{"2":{"925":1}}],["语言模型抽象",{"2":{"913":1}}],["语言与运行时",{"2":{"904":2}}],["语言的长文本语料测试",{"2":{"786":1}}],["语言支持",{"2":{"701":1}}],["语言精练紧凑",{"2":{"606":1}}],["语言也更为精练紧凑",{"2":{"606":1}}],["语言风格",{"2":{"494":1}}],["语言编写的",{"2":{"343":1}}],["语言",{"2":{"342":1,"553":1,"562":1,"699":1,"702":1,"706":2,"784":1,"815":1,"933":1}}],["语言标准",{"2":{"308":1}}],["语言和环境选项",{"2":{"203":1}}],["语言之上封装了一层",{"2":{"54":1}}],["语言环境",{"2":{"47":1}}],["互联网行业与科技",{"2":{"1031":1}}],["互联网信息",{"2":{"1031":4}}],["互联网公司的指数型增长",{"2":{"1008":1}}],["互动内容需要激发用户对诗歌创作的热情",{"2":{"506":1}}],["互不干扰",{"2":{"297":1,"342":1}}],["互不影响",{"2":{"285":1,"292":1}}],["互不阻塞",{"2":{"74":1}}],["互操作性",{"2":{"333":1}}],["互操作性与安全性",{"2":{"322":1}}],["互操作",{"2":{"203":1}}],["形如",{"2":{"1036":1}}],["形与神俱",{"2":{"1025":1}}],["形状过滤",{"2":{"851":1}}],["形状三角剖分",{"2":{"763":1}}],["形状层",{"2":{"738":1}}],["形状属性工厂",{"2":{"737":1}}],["形状属性",{"2":{"735":1}}],["形状属性变更到屏幕渲染的完整流程",{"0":{"689":1}}],["形状路径构建器",{"2":{"735":1}}],["形状路径",{"2":{"735":1}}],["形状路径接口代理",{"2":{"735":1}}],["形状集合",{"2":{"735":1}}],["形状集合池",{"2":{"735":1}}],["形状处理与变形修饰器",{"2":{"735":1}}],["形状对象池",{"2":{"735":1}}],["形状对象代理",{"2":{"735":1}}],["形状类型枚举",{"2":{"735":1}}],["形状变换管理器",{"2":{"735":1}}],["形状变形等核心能力",{"2":{"734":1}}],["形状变形修饰器管道",{"2":{"744":1}}],["形状变形修饰器系统",{"0":{"744":1}}],["形状变形修饰器",{"2":{"734":1}}],["形状变形系统",{"2":{"730":1}}],["形状组数据",{"2":{"735":1}}],["形状数据",{"2":{"735":2}}],["形状渲染辅助数据结构",{"2":{"735":1}}],["形状渲染基类",{"0":{"683":1}}],["形状元素基类",{"2":{"735":1}}],["形状元素辅助",{"2":{"735":1}}],["形状元素",{"2":{"735":3}}],["形状修饰器注册中心",{"2":{"749":1}}],["形状修饰器注册中心与基类",{"2":{"735":1}}],["形状修饰器契约",{"2":{"749":1}}],["形状修饰器",{"2":{"733":1,"737":1,"738":2,"749":1}}],["形状",{"2":{"693":1,"706":1,"715":1,"743":1,"763":1}}],["形状基类契约",{"2":{"692":1}}],["形状基类",{"2":{"679":1}}],["形状抽象基类",{"2":{"677":1}}],["形态运营的",{"2":{"523":1}}],["形式的复合",{"2":{"685":1}}],["形式的导入",{"2":{"203":1}}],["形式",{"2":{"504":1,"505":2,"506":2,"507":1,"508":1,"828":1}}],["形",{"2":{"296":1}}],["形成嵌套包装链",{"2":{"920":1}}],["形成与",{"2":{"653":1}}],["形成自己的观点",{"2":{"631":1}}],["形成有体系的永久笔记时",{"2":{"628":1}}],["形成",{"2":{"622":1,"766":1}}],["形成对真实世界的扭曲认知",{"2":{"614":1}}],["形成多层防护",{"2":{"588":1}}],["形成人机协同的质量把关",{"2":{"537":1}}],["形成团队知识流水线",{"2":{"515":1}}],["形成空间对比",{"2":{"507":1}}],["形成闭环交互",{"2":{"934":1}}],["形成闭环",{"2":{"408":1,"427":1}}],["形成了",{"2":{"387":1}}],["形成的自我强化闭环",{"2":{"386":1}}],["形成一个闭环",{"2":{"386":1}}],["形成质量闭环",{"2":{"177":1}}],["形成可对比",{"2":{"171":1}}],["禁则合并",{"2":{"795":1}}],["禁则",{"2":{"790":1,"792":1}}],["禁则处理",{"2":{"789":1}}],["禁用等",{"2":{"964":1}}],["禁用",{"2":{"203":2,"655":1}}],["禁止任何实现动作",{"2":{"987":1}}],["禁止在业务代码中",{"2":{"965":1}}],["禁止在模块顶层声明可变状态",{"2":{"174":1}}],["禁止读取敏感文件",{"2":{"595":1}}],["禁止删除操作",{"2":{"595":1}}],["禁止直接操作数据库",{"2":{"573":1}}],["禁止的操作",{"2":{"570":1}}],["禁止使用",{"2":{"448":1}}],["禁止",{"2":{"203":1,"641":1}}],["禁止隐式",{"2":{"203":1}}],["禁止缓存",{"2":{"152":1}}],["始终面朝相机",{"2":{"763":1}}],["始终是一盏指引方向的不灭灯塔",{"2":{"400":1}}],["始终寻求以最小代价获得最大收益",{"2":{"393":1}}],["始终被视为",{"2":{"333":2}}],["始终使用严格相等检查",{"2":{"203":1}}],["始终站在架构设计的高地",{"2":{"180":1}}],["隐私政策",{"2":{"851":1}}],["隐私模式",{"2":{"565":1}}],["隐性知识的显性化",{"2":{"628":1}}],["隐性知识",{"2":{"614":1}}],["隐性完美",{"2":{"556":1}}],["隐含多种解读的可能",{"2":{"506":1}}],["隐秘行业潜规则",{"2":{"375":1}}],["隐形成本或竞争格局角度给出惊人的补充",{"2":{"375":1}}],["隐式",{"2":{"203":1}}],["隐藏自动化特征",{"2":{"858":1}}],["隐藏加载动画",{"2":{"719":1}}],["隐藏了对象实例化的复杂逻辑",{"2":{"300":1}}],["隐藏类型信息",{"2":{"253":1}}],["隐藏内部细节",{"2":{"197":1}}],["隐藏所有内部细节",{"2":{"195":1}}],["隐藏的坑",{"0":{"107":1}}],["报告通道",{"2":{"790":1}}],["报告传输工具",{"2":{"790":1}}],["报告中提到的那个关键数字",{"2":{"526":1}}],["报告进行自动评审",{"2":{"476":1}}],["报告生成",{"2":{"472":1}}],["报告的技能",{"2":{"470":1}}],["报告撰写员",{"2":{"416":1,"471":1}}],["报告偏好",{"2":{"414":1}}],["报告可能与",{"2":{"203":1}}],["报告可达代码错误",{"2":{"203":1}}],["报告标记为",{"2":{"203":1}}],["报告",{"2":{"203":1,"416":1,"470":2,"471":4,"790":1}}],["报告隐式类型转换可能丢失数据的警告",{"2":{"203":1}}],["报告未使用的参数",{"2":{"203":1}}],["报告未使用的标签",{"2":{"203":2}}],["报错",{"2":{"203":1,"402":1}}],["报文规范",{"2":{"109":1}}],["启动使用橄榄油",{"2":{"1048":1}}],["启动脚本",{"2":{"987":1}}],["启动器",{"2":{"980":1}}],["启动浏览器会话",{"2":{"855":1}}],["启动构建监听",{"2":{"781":1}}],["启动动画循环",{"2":{"749":1}}],["启动整个渲染流程",{"2":{"649":1}}],["启动项目",{"2":{"631":1}}],["启动代码审查",{"2":{"588":1}}],["启动开发服务器",{"2":{"573":1,"666":1,"695":1,"808":1}}],["启动",{"2":{"568":1,"571":1}}],["启动双轨模式",{"2":{"171":1}}],["启发",{"2":{"344":2}}],["启用流式输出",{"2":{"490":1}}],["启用规则",{"2":{"216":1}}],["启用增量编译",{"2":{"203":1}}],["启用复合项目",{"2":{"203":1}}],["启用对",{"2":{"203":1}}],["启用装饰器元数据",{"2":{"203":1}}],["启用实验性装饰器支持",{"2":{"203":1}}],["启用所有",{"2":{"203":1}}],["启用所有严格类型检查选项",{"2":{"203":1}}],["启用后会将",{"2":{"203":1}}],["启用后",{"2":{"203":1,"208":1,"217":1}}],["兼顾多样性的方程组",{"2":{"1014":1}}],["兼顾碎片信息收集与深度创作",{"2":{"515":1}}],["兼顾安全性与灵活性",{"2":{"411":1}}],["兼顾价格便宜和交通便利在",{"2":{"394":1}}],["兼顾性能与更新能力",{"2":{"46":1}}],["兼容服务端静态构建",{"2":{"965":1}}],["兼容实现",{"2":{"763":1}}],["兼容层",{"2":{"762":1}}],["兼容性说明",{"2":{"980":1}}],["兼容性",{"2":{"757":1,"881":1,"965":1}}],["兼容性最佳",{"2":{"203":1}}],["兼容历史代码",{"2":{"642":1}}],["兼容格式",{"2":{"523":1}}],["兼容接口",{"2":{"523":1}}],["兼容接口可路由至",{"2":{"523":1}}],["兼容你喜欢的框架和",{"2":{"340":1}}],["兼容",{"2":{"203":2,"298":1,"308":1,"523":3,"874":1,"980":1}}],["目的是提升内容的连贯性",{"2":{"426":1}}],["目前只包括身体健康与居家这一个大类",{"2":{"1031":1}}],["目前不能给这个答案",{"2":{"1029":1}}],["目前尚属前沿领域",{"2":{"965":1}}],["目前已成为",{"2":{"960":1}}],["目前最受开发者欢迎的",{"2":{"523":1}}],["目前最受研究者和开发者青睐的",{"2":{"518":1}}],["目前国外模型",{"2":{"510":1}}],["目前的实践仍集中在文本",{"2":{"509":1}}],["目前系统在多轮迭代",{"2":{"476":1}}],["目前",{"2":{"413":1,"442":1,"491":1,"1000":1,"1031":1}}],["目前主流的微前端实现方案有以下几种",{"2":{"287":1}}],["目标拆解的细一点",{"2":{"1026":1}}],["目标之上还有原则",{"2":{"1006":1}}],["目标隧道",{"2":{"1005":1,"1006":1,"1009":1}}],["目标或许弊大于利",{"2":{"1005":1}}],["目标描述",{"2":{"994":1}}],["目标相关错误",{"2":{"851":1}}],["目标解析",{"2":{"851":1,"858":2}}],["目标数组",{"2":{"834":1,"835":1}}],["目标对象",{"2":{"834":1}}],["目标查找",{"2":{"819":1}}],["目标管理",{"2":{"819":1}}],["目标用户画像",{"2":{"933":1}}],["目标用户",{"2":{"700":1,"729":1,"757":1,"784":1,"843":1}}],["目标用户与使用场景",{"0":{"671":1,"700":1,"729":1,"813":1,"844":1,"902":1,"934":1,"974":1}}],["目标用户群",{"2":{"639":1}}],["目标场景与典型",{"0":{"640":1}}],["目标是深度理解与个人洞见",{"2":{"628":1}}],["目标是规模化的知识覆盖",{"2":{"628":1}}],["目标论",{"2":{"598":1}}],["目标模糊",{"2":{"363":1}}],["目标运行环境",{"2":{"322":1}}],["目标",{"2":{"203":1,"383":1,"880":1,"952":2,"1005":1,"1027":1}}],["目录选择优先级",{"2":{"948":1}}],["目录选择遵循三级优先级",{"2":{"948":1}}],["目录之间不是孤立的",{"2":{"631":1}}],["目录的设计思路可以归纳为",{"2":{"597":1}}],["目录级",{"2":{"571":1}}],["目录概览",{"0":{"570":1}}],["目录模块",{"2":{"334":1}}],["目录结构图",{"0":{"790":1}}],["目录结构本身就是一套知识加工流水线",{"2":{"630":1}}],["目录结构",{"0":{"647":1,"677":1,"706":1,"735":1,"763":1,"819":1,"939":1,"980":1},"2":{"572":1}}],["目录结构示意如下",{"2":{"211":1}}],["目录结构与路由关系示例",{"0":{"67":1}}],["目录结构就能理解整个应用拓扑",{"2":{"64":1}}],["目录高亮等客户端交互",{"2":{"54":1}}],["目录是一个完全自包含的静态站点",{"2":{"51":1}}],["目录下的单独模块",{"2":{"706":1}}],["目录下的一个",{"2":{"591":1}}],["目录下的",{"2":{"576":1}}],["目录下找到了以下输出结果",{"2":{"474":1}}],["目录下",{"2":{"50":1}}],["目录",{"2":{"31":1,"50":1,"53":1,"203":6,"334":1,"471":1,"570":2,"573":2,"629":1,"726":1,"931":1}}],["然后北上帝都",{"2":{"1043":1}}],["然后逼着自己变",{"2":{"1042":1}}],["然后把工作与生活中的事务填充进去",{"2":{"1039":2}}],["然后统计并调整午休",{"2":{"1038":1}}],["然后调整行动呢",{"2":{"1026":1}}],["然后再谈健康养生",{"2":{"1022":1}}],["然后再为每个子任务制订详细的执行计划",{"2":{"423":1}}],["然后尝试去改善",{"2":{"1008":1}}],["然后就更能理解新知识",{"2":{"1007":1}}],["然后结合实际情况降维打击具象世界",{"2":{"1007":1}}],["然后借助平衡思维制定合理的多目标去多方面推动",{"2":{"1006":1}}],["然后按技能定义的流程执行",{"2":{"982":1}}],["然后编译成浏览器可读的普通",{"2":{"958":1}}],["然后进入工具调用循环",{"2":{"922":1}}],["然后遍历其",{"2":{"827":1}}],["然后多次调用",{"2":{"801":1}}],["然后通过",{"2":{"649":1}}],["然后提醒用户你的",{"2":{"506":1}}],["然后使用欢快且俏皮的语句跟用户互动",{"2":{"506":1}}],["然后将其部署到了千帆提供的平台",{"2":{"494":1}}],["然后在禁则规则下重新合并",{"2":{"795":1}}],["然后在这个过程中",{"2":{"466":1}}],["然后在前沿地带敏锐地嗅到那些被主流忽视的空白",{"2":{"358":1}}],["然后迭代",{"2":{"465":1}}],["然后根据项目需求进行调整",{"2":{"202":1}}],["然而",{"2":{"57":1,"83":1,"156":2,"169":1,"292":1,"383":2,"525":1,"530":1}}],["密码强度",{"2":{"366":1}}],["密码加密",{"2":{"200":1}}],["密集型计算",{"2":{"344":2}}],["密钥的引用方式",{"2":{"570":1}}],["密钥或令牌的外部服务",{"2":{"439":1}}],["密钥",{"2":{"16":1}}],["效能防线",{"2":{"602":1}}],["效率源于专注地运用工具做正确的事",{"2":{"1040":1}}],["效率低下但可能偶然踩中机会",{"2":{"622":1}}],["效率越来越低",{"2":{"613":1}}],["效率与效能",{"0":{"602":1}}],["效率翻倍",{"2":{"515":1}}],["效率边界",{"2":{"491":1}}],["效率差异",{"2":{"199":1}}],["效应的显现都需要时间",{"2":{"388":1}}],["效果源于对重要业务或任务的识别",{"2":{"1040":1}}],["效果就会比单独",{"2":{"1008":1}}],["效果最优",{"2":{"759":1}}],["效果类型常量",{"2":{"735":1}}],["效果对象代理",{"2":{"735":1}}],["效果占位",{"2":{"735":1}}],["效果管理器入口",{"2":{"735":1}}],["效果管理器",{"2":{"735":1}}],["效果管理",{"2":{"735":1}}],["效果注册管理器",{"2":{"735":1}}],["效果好",{"2":{"731":1}}],["效果极佳",{"2":{"610":1}}],["效果远好于新开一次搜索",{"2":{"518":1}}],["效果",{"2":{"29":1,"106":1,"735":1,"755":1}}],["案例",{"0":{"199":1},"2":{"367":1,"372":1}}],["忽略文件",{"2":{"882":1}}],["忽略规则",{"2":{"735":1,"790":1,"980":1}}],["忽略范围",{"2":{"591":1}}],["忽略",{"2":{"198":1,"367":1}}],["剃除",{"2":{"197":1}}],["抽屉中也能继承",{"2":{"663":1}}],["抽屉",{"2":{"653":1}}],["抽象语法树",{"2":{"969":1}}],["抽象浏览器操作",{"2":{"845":1,"848":1}}],["抽象后端接口",{"2":{"768":1}}],["抽象基类",{"2":{"762":1}}],["抽象出",{"2":{"680":1}}],["抽象层的上移并不意味着底层知识的贬值",{"2":{"530":1}}],["抽象并封装数据持久化操作",{"2":{"275":1}}],["抽象",{"2":{"191":1,"525":1,"850":1}}],["抽离组件而非样式",{"2":{"967":1}}],["抽离逻辑",{"2":{"170":1}}],["抽离为独立组件",{"2":{"82":1}}],["抽离为独立的客户端组件",{"2":{"62":1}}],["领域最新的技术趋势与实践",{"2":{"1000":1}}],["领域常见需求缺乏前端友好的封装",{"2":{"901":1}}],["领域专家",{"2":{"625":1}}],["领域型能力",{"2":{"436":1}}],["领域尚无统一标准",{"2":{"413":1}}],["领域建模",{"2":{"282":1}}],["领域事件定义",{"2":{"281":1}}],["领域事件用于表达领域内发生的事情",{"2":{"281":1}}],["领域模型",{"2":{"279":1,"280":1}}],["领域服务",{"2":{"278":1,"279":1,"282":1}}],["领域",{"2":{"278":1,"402":1,"628":1}}],["领域层",{"2":{"189":1,"190":1,"277":1,"279":2,"280":1,"281":1}}],["领域驱动设计",{"0":{"276":1},"1":{"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1},"2":{"189":1,"276":1}}],["统协",{"2":{"734":1}}],["统计学与数学知识应用依旧存在短板",{"2":{"1038":1}}],["统计最宽行",{"2":{"803":1}}],["统计信息",{"2":{"763":1}}],["统计",{"2":{"712":1}}],["统计面板",{"2":{"98":1}}],["统一转化为浏览器能够安全",{"2":{"969":1}}],["统一导出",{"2":{"883":1}}],["统一导出公共",{"2":{"882":1}}],["统一实现",{"2":{"858":1}}],["统一缓动解析入口",{"2":{"819":1}}],["统一动画模型",{"2":{"814":1}}],["统一入口",{"2":{"763":1}}],["统一渲染接口",{"2":{"761":1}}],["统一数组",{"2":{"706":1}}],["统一数据接入层",{"2":{"548":1}}],["统一管控模型与",{"2":{"568":1}}],["统一管理依赖版本",{"2":{"291":1}}],["统一地读取外部",{"2":{"548":1}}],["统一错误提示的利器",{"2":{"342":1}}],["统一的数据模型和渲染层",{"2":{"699":1}}],["统一的事件处理与动作分派系统",{"2":{"654":1}}],["统一的",{"2":{"330":1,"342":1}}],["统一",{"2":{"291":2,"344":1,"523":1,"757":1,"814":1,"903":1,"910":1,"925":1}}],["统一技术规范",{"2":{"291":1}}],["统一语言减少开发与业务之间的误解",{"2":{"283":1}}],["统一语言",{"2":{"277":1}}],["统一异常处理与错误响应格式化",{"2":{"275":1}}],["统一在同一个字段中",{"2":{"230":1}}],["统一编译规则",{"2":{"210":1}}],["统一抽象",{"2":{"188":1}}],["逻辑组",{"2":{"763":1}}],["逻辑说明",{"0":{"854":1},"2":{"649":1,"679":1,"708":1,"737":1,"765":1,"792":1,"821":1,"912":1,"941":1,"982":1}}],["逻辑严密",{"2":{"606":1}}],["逻辑严谨",{"2":{"511":1}}],["逻辑顶尖",{"2":{"522":1}}],["逻辑推理",{"2":{"512":1,"522":1,"551":1}}],["逻辑疲劳",{"2":{"467":1}}],["逻辑编排",{"2":{"442":1}}],["逻辑性和专业度大幅提升",{"2":{"508":1}}],["逻辑性",{"2":{"426":1}}],["逻辑漏洞或错误",{"2":{"426":1}}],["逻辑链路透明",{"2":{"414":1}}],["逻辑",{"2":{"188":1,"410":1,"433":1,"790":1,"959":1}}],["属于渲染层",{"2":{"785":1}}],["属于多余逻辑",{"2":{"187":1}}],["属于",{"2":{"185":1,"197":1,"200":1}}],["属性时",{"2":{"961":1}}],["属性转换为响应式",{"2":{"951":1}}],["属性集合",{"2":{"942":1}}],["属性暴露",{"2":{"927":1}}],["属性插值单元",{"2":{"822":1}}],["属性动画实现",{"2":{"819":1}}],["属性和",{"2":{"812":1}}],["属性更新",{"2":{"768":1}}],["属性混合",{"2":{"763":1}}],["属性绑定",{"2":{"763":1,"772":1}}],["属性值不再来自关键帧插值",{"2":{"747":1}}],["属性类型",{"2":{"743":1}}],["属性类型常量",{"2":{"735":1}}],["属性对象代理",{"2":{"735":1}}],["属性组工厂",{"2":{"735":1}}],["属性存储",{"2":{"685":1}}],["属性存在性检查",{"2":{"231":1}}],["属性系统工厂",{"0":{"685":1}}],["属性系统",{"2":{"682":2,"749":1}}],["属性补间",{"2":{"680":1}}],["属性校验",{"2":{"679":1}}],["属性校验器",{"2":{"677":1}}],["属性缓动",{"2":{"677":1}}],["属性工厂",{"2":{"677":1,"679":1,"685":1,"733":1,"735":1,"737":1}}],["属性管理",{"2":{"673":1,"763":1}}],["属性面板渲染器",{"2":{"656":1}}],["属性面板",{"2":{"645":1,"763":1}}],["属性名标准化",{"2":{"819":1}}],["属性名",{"2":{"330":1,"834":1}}],["属性冲突的本质",{"0":{"237":1}}],["属性",{"2":{"141":1,"263":1,"266":1,"270":1,"699":1,"728":1,"734":1,"741":1,"763":2,"812":1,"824":1,"939":1,"959":1,"961":1,"965":1}}],["属性控制加载时机",{"2":{"72":1}}],["于是就将",{"2":{"1008":1}}],["于是疯狂地囤积资料",{"2":{"621":1}}],["于是我们快速使用千帆提供的",{"2":{"494":1}}],["于是你继续猛拧",{"2":{"388":1}}],["于是回路诞生了",{"2":{"386":1}}],["于是他们投入大量精力做",{"2":{"366":1}}],["于是",{"2":{"184":1,"305":1}}],["邮箱",{"2":{"184":1,"640":1,"668":1,"1004":1}}],["邮件",{"2":{"8":1}}],["拒绝盲目的过度设计",{"2":{"1001":1}}],["拒绝异化",{"2":{"615":1}}],["拒绝无效输入",{"2":{"576":1}}],["拒绝复杂",{"2":{"201":1}}],["拒绝",{"0":{"183":1,"189":1},"1":{"184":1,"185":1,"190":1,"191":1},"2":{"297":1,"624":1}}],["未预处理着色器材质",{"2":{"763":1}}],["未包装",{"2":{"661":1}}],["未提供社会价值则难致富",{"2":{"612":1}}],["未语含情凝远岫",{"2":{"508":1}}],["未拆分为小文件按需加载",{"2":{"445":1}}],["未定义的函数",{"2":{"219":1}}],["未使用的变量是错误",{"2":{"572":1}}],["未使用的代码更容易被剔除",{"2":{"311":1}}],["未使用的参数",{"2":{"186":1}}],["未使用的功能等",{"2":{"182":1}}],["未来拓展",{"2":{"965":1}}],["未来",{"2":{"539":1}}],["未来我们将探索如何引入一个",{"2":{"476":1}}],["未来已来",{"2":{"420":1}}],["未来的软件开发将是人与",{"2":{"538":1}}],["未来的落地范式绝非",{"2":{"535":1}}],["未来的高级工程师",{"2":{"533":1}}],["未来的局限与机会",{"2":{"509":1}}],["未来的核心竞争力将不再仅仅是编写了多少行代码",{"2":{"420":1}}],["未来的全栈工程师将不再是",{"2":{"376":1}}],["未来的想象空间在于",{"2":{"355":1}}],["未来演进",{"0":{"355":1}}],["未来需加",{"2":{"200":1}}],["未来需求留待未来迭代",{"2":{"183":1}}],["未来会增加字段",{"2":{"200":1}}],["未来扩展时再新增",{"2":{"185":1}}],["未来功能",{"2":{"185":1}}],["未来可能会借鉴",{"2":{"354":1}}],["未来可能用",{"2":{"184":3}}],["未来可能要加地址",{"2":{"184":1}}],["未完待续",{"2":{"104":1}}],["去尝试改变",{"2":{"1043":1}}],["去尝试摆脱",{"2":{"1040":1}}],["去改变",{"2":{"1019":1}}],["去卷",{"2":{"1005":1}}],["去换取前端资产的长期可维护性与业务交付的极速",{"2":{"971":1}}],["去重构生活秩序",{"2":{"1005":1}}],["去重检查",{"2":{"711":1}}],["去重",{"2":{"685":1}}],["去执行",{"2":{"592":1}}],["去做这件事",{"2":{"585":1}}],["去粘合一个支离破碎的系统",{"2":{"553":1}}],["去",{"2":{"542":1}}],["去处理模糊与非确定性",{"2":{"541":1}}],["去夺回对软件质量的掌控力",{"2":{"526":1}}],["去编排复杂的业务流",{"2":{"491":1}}],["去连接真实的外部数据",{"2":{"440":1}}],["去关注更具创造力的决策",{"2":{"420":1}}],["去中心化的技能与知识库",{"2":{"419":1}}],["去跑通闭环",{"2":{"378":1}}],["去贡献价值",{"2":{"377":1}}],["去深究为什么",{"2":{"369":1}}],["去撬动最大的业务价值",{"2":{"365":1}}],["去追寻那些让你兴奋不已",{"2":{"362":1}}],["去追问一个看似疯狂但属于",{"2":{"360":1}}],["去噪",{"2":{"348":1}}],["去除所有",{"2":{"186":1,"201":1}}],["去除冗余",{"2":{"181":1,"188":1}}],["去掉",{"2":{"141":1,"200":1}}],["≠",{"2":{"181":1,"517":1}}],["比较有规律的作息被列为头等大事",{"2":{"1034":1}}],["比较长远的事情要靠建立正向的增强回路",{"2":{"1008":1}}],["比较读取自动检测",{"2":{"796":1}}],["比较死板",{"2":{"135":1}}],["比例尺系统",{"2":{"706":1}}],["比记住具体的配置项更重要",{"2":{"597":1}}],["比非结构化",{"2":{"509":1}}],["比单纯追求大模型的参数规模更为重要",{"2":{"410":1}}],["比起用虚高的薪水去挖人",{"2":{"380":1}}],["比如阅读一些小说或自己觉得有趣的书",{"2":{"1030":1}}],["比如周",{"2":{"1006":1}}],["比如季度",{"2":{"1006":1}}],["比如年",{"2":{"1006":1}}],["比如传了",{"2":{"964":1}}],["比如两周后复盘效果",{"2":{"626":1}}],["比如本周验证什么",{"2":{"626":1}}],["比如是否适合自己",{"2":{"626":1}}],["比如增加可观测性的埋点",{"2":{"528":1}}],["比如用方框代表盒子",{"2":{"494":1}}],["比如文档模板",{"2":{"442":1}}],["比如网页改版或",{"2":{"402":1}}],["比如开源生态建设",{"2":{"386":1}}],["比如这几个人之间的利益与权责分配",{"2":{"383":1}}],["比如尝试写一篇",{"2":{"375":1}}],["比如初次使用",{"2":{"371":1}}],["比如显示预计时间",{"2":{"366":1}}],["比如不兼容的",{"2":{"331":1}}],["比如一个团队里有几个人",{"2":{"383":1}}],["比如一个自定义的",{"2":{"263":1}}],["比如一个小型工具类项目",{"2":{"189":1}}],["比如我们要获取一个对象的某个属性值",{"2":{"263":1}}],["比如我们定义了一个",{"2":{"255":1}}],["比如需要明确告诉其他开发者这个函数的返回类型",{"2":{"263":1}}],["比如定义一个",{"2":{"256":1}}],["比如调用",{"2":{"254":1}}],["比如",{"2":{"200":1,"263":1,"385":1,"442":1,"494":1,"571":1,"573":1,"1022":1,"1037":1,"1041":1}}],["比如设计登录功能",{"2":{"181":1}}],["比",{"2":{"181":1,"343":1,"556":1}}],["电话会议室一种重要的沟通协作方式",{"2":{"1040":1}}],["电子书",{"2":{"1031":1}}],["电子书在便携性",{"2":{"613":1}}],["电视画面一闪而过",{"2":{"606":1}}],["电池故障+系统休眠+充电器接触不良",{"2":{"181":1}}],["电池耗尽",{"2":{"181":1}}],["电商系统中的订单",{"2":{"278":1}}],["电商订单同步",{"2":{"120":1}}],["电商平台",{"2":{"80":1}}],["电商价格",{"2":{"47":1}}],["电商类站点尤为突出",{"2":{"47":1}}],["电商详情页",{"2":{"36":1}}],["电商网站",{"2":{"19":1}}],["电商",{"2":{"6":1,"344":1}}],["手工逐行布局",{"0":{"802":1}}],["手风琴逻辑",{"2":{"790":1}}],["手风琴",{"2":{"790":1}}],["手部跟踪",{"2":{"763":1}}],["手把手教到完全理解为止",{"2":{"619":1}}],["手头有参考网站想直接还原其界面",{"2":{"562":1}}],["手写大量样板代码",{"2":{"555":1}}],["手写杂乱的胶水代码",{"2":{"548":1}}],["手写实现并进行性能调优",{"2":{"531":1}}],["手感",{"2":{"457":1}}],["手中",{"2":{"415":1}}],["手",{"2":{"414":1}}],["手脚和专业领域的知识",{"2":{"544":1}}],["手脚",{"2":{"402":1,"408":1}}],["手机端快捷",{"2":{"518":1}}],["手机端日常问答",{"2":{"518":1}}],["手机电量",{"2":{"366":1}}],["手机号",{"2":{"184":1}}],["手机没电",{"2":{"181":1}}],["手动测试入口",{"2":{"677":1}}],["手动滤镜测试",{"2":{"677":1}}],["手动属性声明",{"2":{"673":1}}],["手动同步成本高",{"2":{"465":1}}],["手动引入或构建工具合并",{"2":{"320":1}}],["手动定义收窄逻辑",{"2":{"231":1}}],["手动修补会干扰",{"2":{"177":1}}],["手动触发",{"2":{"36":1}}],["满天飞",{"2":{"970":1}}],["满足不同性能",{"2":{"731":1}}],["满足",{"2":{"493":1,"731":1}}],["满足相同的需求时",{"2":{"181":1}}],["满载运算",{"2":{"124":1}}],["奥卡姆",{"2":{"181":1}}],["奥卡姆剃刀的价值愈发凸显",{"2":{"201":1}}],["奥卡姆剃刀的要求是",{"2":{"183":1,"189":1}}],["奥卡姆剃刀不仅是一种技术原则",{"2":{"201":1}}],["奥卡姆剃刀不是",{"2":{"200":1}}],["奥卡姆剃刀原则的本质",{"2":{"201":1}}],["奥卡姆剃刀原则的核心内涵",{"0":{"181":1}}],["奥卡姆剃刀要求",{"2":{"186":1,"192":1,"195":1,"198":1}}],["奥卡姆剃刀",{"2":{"181":1,"182":1}}],["世纪逻辑学家",{"2":{"181":1}}],["世界建模",{"2":{"762":1}}],["世界",{"2":{"136":1,"761":1}}],["勿增实体",{"2":{"181":1}}],["愿我们都能带着平常心去阅读",{"2":{"615":1}}],["愿这首小诗能带您重回洛水之畔",{"2":{"505":1}}],["愿这首小诗如清风拂过你的心湖",{"2":{"505":1}}],["愿你不仅能写出跑得通的模块",{"2":{"332":1}}],["愿你在这场技术演进中",{"2":{"180":1}}],["愿本文能帮助你在下一个项目中做出更清晰",{"2":{"55":1}}],["搬运工",{"2":{"180":1}}],["独占",{"2":{"976":1}}],["独一无二的烙印",{"2":{"961":1}}],["独自阅读常形成模糊的理解链条",{"2":{"610":1}}],["独角兽",{"2":{"601":1}}],["独角兽主导",{"2":{"551":1}}],["独坐听风清",{"2":{"507":2}}],["独断专行",{"2":{"363":1}}],["独有的",{"2":{"515":1}}],["独有",{"2":{"180":1}}],["独立是一个人值得信赖",{"2":{"1006":1}}],["独立本身并不是目的",{"2":{"1006":1}}],["独立与相互依赖这两个看似矛盾的点是我们需要学着平衡的",{"2":{"1006":1}}],["独立文件",{"2":{"965":1}}],["独立协议层而非直接使用",{"2":{"936":1}}],["独立的",{"2":{"906":1}}],["独立的词法分析",{"2":{"645":1}}],["独立运行",{"2":{"832":1}}],["独立包",{"2":{"763":1}}],["独立思考和将知识转化为实际价值的能力愈发珍贵",{"2":{"615":1}}],["独立隔离的上下文窗口",{"2":{"592":1}}],["独立隔离",{"2":{"590":1}}],["独立判断能力的角色",{"2":{"589":1}}],["独立上下文",{"2":{"589":1}}],["独立成文件",{"2":{"577":1}}],["独立",{"2":{"577":1,"672":1,"790":1,"904":1,"962":1}}],["独立执行的专职角色",{"0":{"589":1},"1":{"590":1,"591":1,"592":1}}],["独立执行单元",{"2":{"438":1}}],["独立执行渲染",{"2":{"40":1}}],["独立工作室",{"2":{"437":2}}],["独立开发完整产品",{"2":{"459":1}}],["独立开发者建站",{"2":{"344":1}}],["独立开发部署",{"2":{"285":1}}],["独立模块",{"2":{"286":1}}],["独立组件开发",{"2":{"178":1}}],["独立地向对端发送数据",{"2":{"115":1}}],["填鸭式的阅读",{"2":{"1030":1}}],["填鸭式阅读",{"2":{"1030":1}}],["填入表单等",{"2":{"934":1}}],["填平",{"0":{"357":1}}],["填充色",{"2":{"743":1}}],["填充滤镜",{"2":{"735":1}}],["填充样式数据",{"2":{"735":1}}],["填充样式处理",{"2":{"683":1}}],["填充唯一颜色",{"2":{"683":1}}],["填充",{"2":{"179":1,"677":1}}],["填写",{"2":{"17":1}}],["幻觉率",{"2":{"550":1}}],["幻觉率低",{"2":{"521":2}}],["幻觉",{"0":{"360":1},"2":{"179":1,"424":1,"425":1,"493":2,"518":1}}],["幻觉空间",{"2":{"179":1}}],["划定出专门的办公空间",{"2":{"1040":1}}],["划定了一个认知边界",{"2":{"179":1}}],["划分出四个",{"2":{"1031":1}}],["划分组件必须恪守单一职责",{"2":{"170":1}}],["划分具备分层结构的",{"0":{"170":1}}],["划分过少则退化为普通",{"2":{"47":1}}],["宪法",{"2":{"179":1}}],["杜绝大型",{"2":{"965":1}}],["杜绝污染",{"2":{"965":1}}],["杜绝拼写错误",{"2":{"964":1}}],["杜绝冗余与泄漏",{"2":{"178":1}}],["杜绝任何形式的隐式状态共享",{"2":{"170":1}}],["引号后处理",{"2":{"805":1}}],["引号后处理等",{"2":{"796":1}}],["引导技能",{"0":{"986":1}}],["引导系统",{"0":{"985":1},"2":{"985":1}}],["引导缓存",{"2":{"980":1}}],["引导缓存机制测试",{"2":{"980":1}}],["引导脚本",{"2":{"980":1}}],["引导注入层",{"2":{"978":1,"979":1}}],["引导机制",{"2":{"976":1}}],["引导",{"2":{"628":1}}],["引导其生成管理子任务的指令",{"2":{"425":1}}],["引导修正",{"2":{"177":1}}],["引擎来处理",{"2":{"967":1}}],["引擎特征",{"2":{"797":1}}],["引擎按流程",{"2":{"655":1}}],["引擎类型定义",{"2":{"647":1}}],["引擎",{"2":{"636":1,"656":1,"673":1,"789":3,"790":1,"796":1,"965":1,"967":1}}],["引擎vue3",{"2":{"344":1}}],["引擎的",{"2":{"338":1}}],["引擎会先扫描所有的",{"2":{"314":1}}],["引用一下笔者早年看过的小说作为结束",{"2":{"1042":1}}],["引用形成组件树",{"2":{"942":1}}],["引用模型而非直接引入",{"2":{"919":1}}],["引用同目录下的详细文档",{"2":{"586":1}}],["引用核查",{"2":{"518":1}}],["引用可溯源性",{"2":{"517":1}}],["引用名人名言并互动",{"2":{"504":1}}],["引用",{"2":{"205":1,"214":1,"215":1,"333":2,"935":1}}],["引用其他",{"2":{"203":1}}],["引用配置",{"2":{"203":1}}],["引入平时处理项目的经验来管理",{"2":{"1047":1}}],["引入新抽象层的学习成本换来真正的",{"2":{"936":1}}],["引入工程语义",{"2":{"532":1}}],["引入了",{"2":{"427":1}}],["引入多阶梯奖励系统",{"2":{"398":1}}],["引入更多心理经济学",{"2":{"397":1}}],["引入",{"2":{"342":1,"494":1,"506":1,"550":1,"967":1,"970":1}}],["引入的官方模块化规范",{"2":{"298":1}}],["引入的新特性",{"2":{"288":1}}],["引入扩展工具",{"0":{"218":1},"1":{"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1}}],["引入100个功能",{"2":{"194":1}}],["引入依赖前先问自己三个问题",{"2":{"194":1}}],["引入第三方库",{"2":{"192":1}}],["引言",{"0":{"21":1,"83":1,"102":1,"133":1,"156":1,"169":1,"272":1,"294":1,"317":1,"348":1,"357":1,"363":1,"421":1,"434":1,"441":1,"457":1,"467":1,"477":1,"525":1,"553":1,"569":1,"957":1},"1":{"134":1,"135":1,"136":1}}],["永远不要使用",{"2":{"571":1}}],["永远不要让",{"2":{"177":1}}],["永远不要在组件内部硬编码子组件",{"2":{"170":1}}],["恰好擅长处理信息流转",{"2":{"465":1}}],["恰恰就藏在这些看不见的连接之中",{"2":{"383":1}}],["恰恰体现在你敢于在",{"2":{"360":1}}],["恰当粒度",{"2":{"177":1}}],["恰当粒度的功能或独立模块",{"2":{"177":1}}],["恰到好处",{"2":{"54":1}}],["怎么突然又学起数学了",{"0":{"1011":1}}],["怎么办",{"2":{"494":1,"495":1}}],["怎么调用",{"2":{"411":1}}],["怎么做",{"2":{"179":1,"408":1,"438":1,"556":1,"583":1}}],["怎么写原生",{"2":{"961":1}}],["怎么写代码",{"2":{"555":1}}],["怎么写",{"2":{"176":1,"180":1}}],["怎么渲染",{"2":{"59":1}}],["借此进行",{"2":{"443":1}}],["借此维持自身的纯粹与解耦",{"2":{"175":1}}],["借鉴人类记忆分为感觉",{"2":{"410":1}}],["借鉴了学术论文的引用机制",{"2":{"349":1}}],["借助产品的数字化属性",{"2":{"1041":1}}],["借助烟火气来平衡下工作与生活",{"2":{"1026":1}}],["借助这些学习方法论",{"2":{"1017":1}}],["借助现代化的协同工具进行高效的异步沟通与知识沉淀",{"2":{"379":1}}],["借助现代浏览器的",{"2":{"105":1}}],["借助大语言模型等智能化工具的辅助",{"2":{"378":1}}],["借助",{"2":{"171":1,"362":1,"459":1,"461":1,"629":1,"971":1}}],["换行几何计算",{"2":{"790":1}}],["换行",{"2":{"677":1}}],["换平台只需改一行",{"2":{"523":1}}],["换到了",{"2":{"336":1}}],["换简洁",{"2":{"200":3}}],["换来的是数据流转的绝对清晰与可预测性",{"2":{"175":1}}],["换取了声明式",{"2":{"673":1}}],["换取极高的加载性能和服务器端的安全性",{"2":{"33":1}}],["换取首屏速度和",{"2":{"29":1}}],["换取首屏之后的流畅交互体验",{"2":{"25":1}}],["毫不犹豫地使用",{"2":{"968":1}}],["毫不犹豫地将其提升至它们最近的公共父节点",{"2":{"174":1}}],["毫无保留地分享自己踩过的坑与获得的真知灼见",{"2":{"380":1}}],["毫秒",{"2":{"144":1,"160":1,"879":1,"892":1,"898":2}}],["毫秒级同步",{"2":{"116":1}}],["之外",{"2":{"957":1}}],["之所以还记得",{"2":{"1042":1}}],["之所以重要",{"2":{"622":1}}],["之所以能保持简洁",{"2":{"54":1}}],["之间的通用数据交换格式",{"2":{"913":1}}],["之间真的成立",{"2":{"610":1}}],["之间",{"2":{"610":1}}],["之间需要反复复制同一套指令",{"2":{"437":1}}],["之间寻找到帕累托效率点",{"2":{"394":1}}],["之间寻找动态平衡",{"2":{"174":1}}],["之间找到平衡",{"2":{"363":1}}],["之后的大势所趋",{"2":{"1031":1}}],["之后的内容",{"2":{"581":1}}],["之后",{"2":{"174":1,"464":1}}],["之前很多同学和朋友甚至早已融入到社会之中",{"2":{"1049":1}}],["之前笔者因相信",{"2":{"1043":1}}],["之前",{"2":{"173":1,"337":1}}],["幂等渲染",{"2":{"171":1}}],["幂等性设计",{"2":{"121":1}}],["择优与人工代码融合",{"2":{"171":1}}],["择优验证后再整合到正式项目中",{"2":{"171":1}}],["横向对比",{"2":{"171":1}}],["人要怎么做才能既不失业",{"2":{"1038":1}}],["人要独立",{"2":{"1006":1}}],["人被技术圈和社会圈包裹了起来",{"2":{"1022":1}}],["人无作息规律地熬一天不累",{"2":{"1022":1}}],["人越有信用",{"2":{"1007":1}}],["人越是积累了知识",{"2":{"1007":1}}],["人",{"2":{"1006":1}}],["人按学习目标来记录",{"2":{"628":1}}],["人侧重",{"2":{"628":1}}],["人学习与总结为主",{"2":{"628":1}}],["人不主动修改",{"2":{"628":1}}],["人差",{"2":{"626":1}}],["人终归只能赚到自己系统架构支撑得起的那部分收益",{"2":{"622":1}}],["人的不可替代价值",{"2":{"628":1}}],["人的角色是引导方向",{"2":{"628":1}}],["人的核心竞争力永远是",{"2":{"622":1}}],["人的脑容量和认知带宽是有限的",{"2":{"621":1}}],["人的直觉也一样",{"2":{"369":1}}],["人本身的差距",{"2":{"616":1}}],["人才",{"2":{"612":1}}],["人文哲思调剂圈",{"2":{"1031":1}}],["人文思考的终极价值",{"2":{"604":1}}],["人文社科",{"0":{"604":1}}],["人生有限公司",{"2":{"603":1}}],["人生不是一场盲目的长跑",{"2":{"603":1}}],["人格",{"2":{"570":1}}],["人与自然之间的距离也就越来越远了",{"2":{"1022":1}}],["人与人之间均是如此",{"2":{"1007":1}}],["人与人之间的差距将被什么拉开",{"2":{"357":1}}],["人与物",{"2":{"1007":1}}],["人与事",{"2":{"1007":1}}],["人与单一窗口的对话",{"2":{"535":1}}],["人名等关键事实",{"2":{"518":1}}],["人为提升了核心指令的权重",{"2":{"509":1}}],["人神道殊",{"2":{"508":1}}],["人味",{"2":{"499":1}}],["人话",{"2":{"493":1}}],["人们已在疫情中适应了远程办公",{"2":{"1041":1}}],["人们选择了各种各样的方式",{"2":{"1029":1}}],["人们给增强回路导致的大起大落现象",{"2":{"1008":1}}],["人们给这种现象起了无数霸气的名字",{"2":{"386":1}}],["人们更容易陷入概念世界的迷障",{"2":{"1007":1}}],["人们最终能获得的价值",{"2":{"622":1}}],["人们经常陷入",{"2":{"616":1}}],["人们对一个",{"2":{"419":1}}],["人们往往无法客观地从未来的成本收益出发做决策",{"2":{"393":1}}],["人们在解决问题上表现出的原创性",{"2":{"358":1}}],["人性微妙之处",{"2":{"375":1}}],["人机协同",{"2":{"550":1}}],["人机辩论",{"2":{"375":1,"1002":1}}],["人机结对审查",{"2":{"171":1}}],["人类可读的设计意图说明",{"2":{"980":1}}],["人类可以清晰地看到",{"2":{"427":1}}],["人类用户",{"2":{"849":1}}],["人类主导",{"2":{"628":1}}],["人类在知识管理中的不可替代价值究竟是什么",{"2":{"628":1}}],["人类必须专注于",{"2":{"555":1}}],["人类偏好对齐",{"2":{"551":1}}],["人类的品位与责任感",{"2":{"539":1}}],["人类则专注于验收与精炼",{"2":{"527":1}}],["人类负责决策与审美",{"2":{"406":1}}],["人类负责制定规范",{"2":{"176":1}}],["人类转型为监督者和资源提供者",{"2":{"403":1}}],["人类现有共识",{"2":{"360":1}}],["人类聚焦于",{"2":{"179":1}}],["人工只做",{"2":{"568":1}}],["人工仅负责处理极端复杂的情感诉求",{"2":{"405":1}}],["人工智能等",{"2":{"346":1}}],["人工",{"2":{"177":2}}],["人工裁决",{"2":{"170":1}}],["令其批量生成符合",{"2":{"171":1}}],["令牌失效",{"2":{"147":1}}],["设定减肥目标",{"2":{"1026":1}}],["设定目标后它能自己想办法完成",{"2":{"402":1}}],["设备集成",{"2":{"763":1}}],["设备像素比",{"2":{"719":1}}],["设计详情",{"2":{"994":1}}],["设计规格",{"2":{"994":1}}],["设计规范与",{"0":{"966":1}}],["设计规范",{"2":{"576":1,"965":1}}],["设计获批",{"2":{"987":1}}],["设计未获批",{"2":{"987":1}}],["设计上采用",{"2":{"986":1}}],["设计→细粒度任务计划",{"2":{"980":1}}],["设计→任务",{"2":{"979":1}}],["设计预览框架",{"2":{"980":1}}],["设计文档与归档",{"2":{"979":1}}],["设计文件并生成前端组件与开发文档",{"2":{"448":1}}],["设计令牌",{"2":{"962":1}}],["设计和数据格式",{"2":{"901":1}}],["设计思维记录",{"2":{"790":1}}],["设计到开发的协作鸿沟",{"2":{"728":1}}],["设计工具开发者",{"2":{"671":1}}],["设计说明",{"2":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"711":1,"712":1,"713":1,"714":1,"715":1,"740":1,"741":1,"742":1,"743":1,"744":1,"768":1,"769":1,"770":1,"771":1,"772":1,"795":1,"796":1,"797":1,"798":1,"799":1,"824":1,"825":1,"826":1,"827":1,"828":1,"858":1,"859":1,"860":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"944":1,"945":1,"946":1,"947":1,"948":1,"985":1,"986":1,"987":1,"988":1,"989":1}}],["设计约定",{"2":{"575":1}}],["设计赋予应用专业深度",{"2":{"552":1}}],["设计并量化诸如事实一致性",{"2":{"550":1}}],["设计稳健的多",{"2":{"545":1}}],["设计模式上采用了发布",{"2":{"945":1}}],["设计模式包括策略模式",{"2":{"768":1}}],["设计模式与编排",{"2":{"545":1}}],["设计模式中",{"2":{"427":1}}],["设计与迭代能力",{"2":{"542":1}}],["设计出一个逻辑清晰",{"2":{"509":1}}],["设计出更具抽象性和复用性的组件",{"2":{"255":1}}],["设计就基本完成",{"2":{"494":1}}],["设计串联工作流",{"2":{"459":1}}],["设计师在",{"2":{"728":1}}],["设计师通过",{"2":{"728":1}}],["设计师",{"2":{"561":1,"729":1}}],["设计师绘制界面",{"2":{"457":1}}],["设计师乃至创业者经常被提及",{"2":{"363":1}}],["设计精良的",{"2":{"444":1}}],["设计优秀的记忆淘汰与检索算法",{"2":{"410":1}}],["设计隐性的思维路径",{"2":{"367":1}}],["设计功能交互",{"2":{"367":1}}],["设计外卖",{"2":{"366":1}}],["设计的成熟",{"2":{"340":1}}],["设计的组件库",{"2":{"340":1}}],["设计系统",{"2":{"340":1,"964":1}}],["设计对比",{"2":{"328":1}}],["设计原则",{"2":{"286":1,"570":1}}],["设计领域事件机制",{"2":{"282":1}}],["设计分层架构",{"2":{"282":1}}],["设计",{"0":{"545":1},"2":{"196":1,"341":1,"408":1,"494":2}}],["设计时若包含",{"2":{"195":1}}],["设计回调契约",{"2":{"180":1}}],["设计哲学的四个核心步骤",{"2":{"180":1}}],["设计是否足以表达所有的视觉状态差异",{"2":{"171":1}}],["设置主题参数",{"2":{"951":1}}],["设置页面可见性监听器",{"2":{"891":1}}],["设置属性",{"2":{"834":1}}],["设置动画渲染循环",{"2":{"778":1}}],["设置动画数据",{"2":{"749":1}}],["设置视口大小",{"2":{"777":1}}],["设置视觉编码",{"2":{"719":1}}],["设置渲染循环",{"2":{"777":1}}],["设置后端特定数据",{"2":{"777":1}}],["设置是否动画",{"2":{"749":1}}],["设置为父级",{"2":{"749":1}}],["设置层级",{"2":{"749":1}}],["设置数据和配置",{"2":{"724":1}}],["设置图表配置项",{"2":{"719":1}}],["设置表单值",{"2":{"663":1}}],["设置一个高价锚点",{"2":{"397":1}}],["设置最大值是为了避免等待时间变得不可接受",{"2":{"159":1}}],["设置内容类型",{"2":{"150":1}}],["设置",{"2":{"139":1}}],["奠定可靠基础",{"2":{"171":1}}],["确实有点小贵",{"2":{"1048":1}}],["确立了其作为",{"2":{"350":1}}],["确立工程基线",{"0":{"171":1}}],["确定核心技术栈",{"2":{"965":1}}],["确定竞争壁垒",{"2":{"396":1}}],["确定性网站",{"2":{"844":1}}],["确定性输出",{"2":{"843":1,"845":1}}],["确定性",{"0":{"433":1},"2":{"367":1}}],["确定上下文映射关系",{"2":{"282":1}}],["确定了产品方向后",{"2":{"494":1}}],["确定了",{"2":{"174":1}}],["确认所有测试通过",{"2":{"989":1}}],["确认测试因正确原因失败",{"2":{"989":1}}],["确认哪些文件已被",{"2":{"581":1}}],["确认差异后应用",{"2":{"564":1}}],["确认",{"2":{"564":1}}],["确认匹配后",{"2":{"443":1}}],["确认订单",{"2":{"281":1}}],["确认规范后",{"2":{"177":1}}],["确保能量",{"2":{"1025":1}}],["确保修复有效",{"2":{"980":1}}],["确保用户适配器目录存在",{"2":{"859":1}}],["确保用户在切换",{"2":{"85":1}}],["确保单例",{"2":{"859":1}}],["确保自己在任何领域都能快速获取高质量资源",{"2":{"603":1}}],["确保将核心精力倾注在真正产生长远复利的",{"2":{"602":1}}],["确保我们在投入开发前是在",{"2":{"600":1}}],["确保信息时效性与多样性",{"2":{"494":1}}],["确保报告格式专业",{"2":{"470":1}}],["确保从",{"2":{"451":1}}],["确保描述真正可",{"2":{"445":1}}],["确保agent",{"2":{"423":1}}],["确保细碎的中间任务不会",{"2":{"415":1}}],["确保在最差的网络环境下也能实现极低的延迟",{"2":{"353":1}}],["确保在使用泛型时只能传递符合特定条件的类型",{"2":{"264":1}}],["确保其能从一堆相关度不高的文档中",{"2":{"352":1}}],["确保每个文件都可以安全地独立转译",{"2":{"322":1}}],["确保相关代码仅存在于开发阶段",{"2":{"318":1}}],["确保不会引入冗余的运行时负载",{"2":{"318":1}}],["确保不会重复发送请求",{"2":{"69":1}}],["确保了性能",{"2":{"304":1}}],["确保一个模块",{"2":{"301":1}}],["确保只有一个",{"2":{"288":1}}],["确保沟通准确",{"2":{"277":1}}],["确保泛型参数是某个基类的子类",{"2":{"270":1}}],["确保泛型参数继承了基类的属性和方法",{"2":{"269":1}}],["确保访问的属性确实存在于对象中",{"2":{"270":1}}],["确保可以安全使用",{"2":{"270":1}}],["确保数据流的可预测性",{"2":{"274":1}}],["确保数据具有预期的属性和方法",{"2":{"270":1}}],["确保数据具有预期的形状",{"2":{"266":1}}],["确保数据的",{"2":{"107":1}}],["确保类型安全性",{"2":{"264":1}}],["确保键类型安全",{"2":{"262":1}}],["确保项目可以被其他项目安全引用",{"2":{"208":1}}],["确保代码质量",{"2":{"203":1}}],["确保代码符合项目规范",{"2":{"177":1}}],["确保方法确实重写了父类方法",{"2":{"203":1}}],["确保方案满足",{"2":{"201":1}}],["确保生成的组件是高内聚",{"2":{"179":1}}],["确保接口一致性",{"2":{"178":1}}],["确保行为的可预测性",{"2":{"177":1}}],["确保设计符合架构原则",{"2":{"177":1}}],["确保这份静态基线的绝对纯粹",{"2":{"171":1}}],["确保这套",{"2":{"170":1}}],["确保实时推送",{"2":{"152":1}}],["确保回调只执行一次",{"2":{"150":1}}],["确保",{"2":{"150":1,"436":1,"532":1,"597":1,"610":1,"939":1}}],["确保流读取器被释放",{"2":{"143":1}}],["确保消息不丢失",{"2":{"110":1}}],["确保同一渲染周期内多次调用只发起一次",{"2":{"69":1}}],["盲目写代码",{"2":{"170":1}}],["蓝图",{"2":{"170":1,"412":1}}],["调整后的效果需要时间来证明",{"2":{"1034":1}}],["调整表述逻辑",{"2":{"435":1}}],["调优到",{"2":{"1000":1}}],["调色板",{"2":{"706":1}}],["调度器核心接口",{"2":{"719":1}}],["调度器将所有注册的",{"2":{"712":1}}],["调度器是",{"2":{"712":1}}],["调度管道",{"0":{"712":1}}],["调度管道层",{"2":{"704":1,"705":1}}],["调度中心",{"2":{"170":1}}],["调研已有方案",{"2":{"631":1}}],["调研资料汇总",{"2":{"515":1}}],["调",{"2":{"507":1}}],["调包侠",{"2":{"491":1}}],["调查市场趋势",{"2":{"412":1}}],["调节回路有助于改善增强回路带来的问题",{"2":{"1007":1}}],["调节回路",{"0":{"387":1,"1009":1},"2":{"383":2,"387":3}}],["调试难度倒挂",{"2":{"1000":1}}],["调试直观",{"2":{"965":1}}],["调试习惯等",{"2":{"570":1}}],["调试",{"2":{"531":1}}],["调试困难",{"2":{"292":1}}],["调试和维护",{"2":{"292":1}}],["调试复杂",{"2":{"287":1}}],["调试体验",{"2":{"226":1}}],["调试能力和配套的质量保障工具",{"2":{"226":1}}],["调试的问题",{"2":{"217":1}}],["调试时出现冗余代码",{"2":{"217":1}}],["调试时",{"2":{"217":1}}],["调试代码",{"0":{"217":1}}],["调试与优化",{"0":{"198":1},"1":{"199":1}}],["调用具体",{"2":{"912":1}}],["调用到",{"2":{"902":1}}],["调用各种",{"2":{"844":1}}],["调用能力",{"2":{"843":1}}],["调用开始",{"2":{"658":1}}],["调用拓扑",{"0":{"855":1},"2":{"649":1,"679":1,"708":1,"737":1,"765":1,"792":1,"821":1,"912":1,"941":1,"982":1}}],["调用真的必要吗",{"2":{"590":1}}],["调用相关相关搜索工具查找素材后深度思考",{"2":{"506":1}}],["调用图像理解工具准确识别题目内容",{"2":{"494":1}}],["调用常规业务系统",{"2":{"439":1}}],["调用第三方",{"2":{"439":1}}],["调用工具",{"2":{"420":1}}],["调用高度自动化的原子能力",{"2":{"414":2}}],["调用在外部系统中产生影响",{"2":{"411":1}}],["调用或代码执行",{"2":{"408":1}}],["调用少量标准工具",{"2":{"403":1}}],["调用商品子应用的服务",{"2":{"288":1}}],["调用后端",{"2":{"281":1}}],["调用后会断开",{"2":{"150":1}}],["调用基类构造函数",{"2":{"269":1}}],["调用返回泛型响应",{"2":{"260":1}}],["调用方只需",{"2":{"312":1}}],["调用方式",{"2":{"258":3}}],["调用方一看就知道需要处理两种结果",{"2":{"246":1}}],["调用者无需关心id生成方式",{"2":{"196":1}}],["调用者可通过执行此函数主动断开连接",{"2":{"150":1}}],["调用结果状态",{"2":{"196":1}}],["调用标准",{"2":{"103":1}}],["调用数据接口",{"2":{"31":1}}],["调用",{"2":{"4":1,"47":1,"70":1,"80":1,"144":1,"342":1,"411":1,"489":1,"490":1,"523":1,"533":1,"640":1,"652":1,"734":1,"741":1,"765":3,"798":1,"818":1,"830":1,"912":2}}],["调用获取动态数据",{"2":{"2":1}}],["拆解目标",{"2":{"1047":1}}],["拆解地理环境如何冷酷而偶然地重塑全球版图",{"2":{"604":1}}],["拆解",{"2":{"494":1}}],["拆解问题",{"2":{"494":1}}],["拆解产品",{"2":{"400":1}}],["拆解为",{"2":{"408":1}}],["拆解为一组",{"2":{"367":1}}],["拆解为独立",{"2":{"169":1}}],["拆分",{"2":{"577":1}}],["拆分到",{"2":{"577":1}}],["拆分的大型指令文件",{"2":{"570":1}}],["拆分时机",{"2":{"329":1}}],["拆分为若干自治单元",{"2":{"170":1}}],["展现其顾盼生辉的绝代风华",{"2":{"505":1}}],["展现了极强的任务导向性",{"2":{"484":1}}],["展现出陡峭的指数级复利效应",{"2":{"464":1}}],["展平组件树",{"2":{"169":1}}],["展示用动图",{"2":{"735":1}}],["展示分类图标",{"2":{"647":1}}],["展示不同类型仓库的解读效果",{"2":{"637":1}}],["展示数据",{"2":{"279":1}}],["展示姓名",{"2":{"184":1}}],["展示组件",{"2":{"170":2}}],["展示了",{"2":{"155":1}}],["展示型为主的",{"2":{"100":1}}],["展示",{"2":{"74":1,"488":2}}],["展示评论",{"2":{"16":1}}],["展示所有博客文章列表",{"2":{"15":1}}],["减肥这件事情可大可小",{"2":{"1046":1}}],["减肥这件小事也被注入了一点点小情怀",{"2":{"1043":1}}],["减肥这件小事也就成了既充分也很有必要的事情",{"2":{"1043":1}}],["减肥这件小事阶段随笔汇总",{"2":{"1026":1}}],["减肥的原因有以下几点",{"2":{"1043":1}}],["减弱",{"2":{"385":1}}],["减小渲染开销",{"2":{"169":1}}],["减少服务器负载",{"2":{"874":1}}],["减少依赖数量",{"2":{"731":1}}],["减少渲染开销",{"2":{"713":1}}],["减少歧义",{"2":{"445":1}}],["减少了模型的注意力涣散",{"2":{"509":1}}],["减少了因信息过载导致的幻觉",{"2":{"430":1}}],["减少了频繁三次握手的开销",{"2":{"103":1}}],["减少幻觉需要从以下几个工程节点切入",{"2":{"352":1}}],["减少模块之间的相互影响",{"2":{"328":1}}],["减少模块之间的直接依赖",{"2":{"315":1}}],["减少运行时异常",{"2":{"270":1}}],["减少配置重复",{"2":{"210":1}}],["减少",{"0":{"192":1},"1":{"193":1,"194":1},"2":{"430":1}}],["减少无意义分层",{"2":{"191":1}}],["减少冗余",{"2":{"188":1,"625":1}}],["减少重复代码",{"2":{"188":1}}],["减少传统轮询中的无效请求",{"2":{"161":1}}],["扁平化原则",{"2":{"968":1}}],["扁平组件列表",{"2":{"935":1}}],["扁平",{"2":{"169":1}}],["元任务",{"2":{"982":1}}],["元技能",{"2":{"979":1,"980":1,"983":1}}],["元编程",{"2":{"673":1}}],["元能力",{"2":{"603":1}}],["元宝",{"2":{"512":1}}],["元框架",{"2":{"344":1}}],["元组包裹",{"2":{"234":1}}],["元素查找",{"2":{"851":1,"858":1}}],["元素系统",{"2":{"749":1}}],["元素创建工具",{"2":{"735":2}}],["元素渲染器",{"2":{"735":1}}],["元素辅助类",{"2":{"735":1}}],["元素基类",{"2":{"735":3}}],["元素层",{"2":{"733":1,"734":2}}],["元素对应一个实例",{"2":{"709":1}}],["元素元数据",{"2":{"706":1}}],["元素的生命周期",{"2":{"684":1}}],["元素的高级抽象",{"2":{"670":1}}],["元素并绑定到用户指定的",{"2":{"684":1}}],["元素并模拟点击",{"2":{"414":1}}],["元素管理",{"2":{"677":1}}],["元素",{"2":{"169":1,"203":1,"706":1,"735":1,"777":1,"942":1,"961":1}}],["元数据和技能内容中的",{"2":{"978":1}}],["元数据匹配",{"2":{"443":1}}],["元数据可以是实时",{"2":{"70":1}}],["元数据",{"0":{"70":1},"2":{"70":1,"442":1,"790":1,"792":1,"793":1,"994":1}}],["失去的时候却追悔莫及",{"2":{"1020":1}}],["失去了",{"2":{"970":1}}],["失控的状态蔓延",{"2":{"169":1}}],["失败后我们又不太容易原谅自己",{"2":{"1042":1}}],["失败分支",{"2":{"246":1}}],["失败或处理中",{"2":{"159":1}}],["失败",{"2":{"88":1,"96":1}}],["深层次原因",{"2":{"1043":2}}],["深层数组操作工具",{"2":{"647":1}}],["深厚的底层算法素养",{"2":{"551":1}}],["深入拆解",{"2":{"569":1}}],["深入理解其内部机制",{"2":{"569":1}}],["深入解读参考",{"2":{"518":1}}],["深入",{"2":{"518":2}}],["深入了解外部性管理策略",{"2":{"399":1}}],["深入研究了多款",{"2":{"477":1}}],["深入研究市场与竞争对手",{"2":{"400":1}}],["深入研究市场意味着寻找那些未被满足的有效需求",{"2":{"396":1}}],["深入研究广告",{"2":{"399":1}}],["深入市场洞察与价值发现",{"0":{"396":1}}],["深入挖掘业界热点",{"2":{"346":1}}],["深度覆写第三方库",{"2":{"968":1}}],["深度选择器",{"2":{"961":1}}],["深度测试等",{"2":{"771":1}}],["深度纹理",{"2":{"763":1}}],["深度缓冲区",{"2":{"763":1}}],["深度解读与洞见提炼",{"2":{"632":1}}],["深度解析",{"2":{"436":1}}],["深度反思",{"2":{"628":1}}],["深度与严谨",{"2":{"606":1}}],["深度索引百万行级代码库",{"2":{"568":1}}],["深度索引能力是",{"2":{"568":1}}],["深度理解整个代码库并串联多步骤任务",{"2":{"564":1}}],["深度改造的",{"2":{"564":1}}],["深度阅读",{"2":{"533":1}}],["深度推理",{"2":{"522":1}}],["深度整合",{"2":{"521":1}}],["深度集成",{"2":{"521":1}}],["深度专题报告",{"2":{"518":1}}],["深度学习与知识整合",{"2":{"515":1}}],["深度思考",{"2":{"502":2}}],["深度体验后",{"2":{"491":1}}],["深度优化的工具",{"2":{"478":1}}],["深度优先",{"2":{"314":1}}],["深度全景综述一文中",{"2":{"467":1}}],["深度全景综述",{"2":{"433":1}}],["深度耦合",{"2":{"427":1}}],["深度的知识推理",{"2":{"417":1}}],["深度调研系统",{"0":{"416":1}}],["深度行业调研",{"2":{"414":1}}],["深度洞察与研究设计",{"2":{"406":1}}],["深度研究能力",{"2":{"517":1}}],["深度研究报告",{"2":{"512":1,"518":2}}],["深度研究任务往往涉及很多信息整合",{"2":{"468":1}}],["深度研究并非单一的写作任务",{"2":{"468":1}}],["深度研究",{"2":{"406":1,"467":1,"518":2}}],["深度替代与变革型",{"0":{"405":1}}],["深度拆解发现",{"2":{"398":1}}],["深度拆解",{"2":{"392":1}}],["深度决策逻辑",{"0":{"131":1}}],["深嵌套的",{"2":{"169":1}}],["却依旧过不好这一生",{"2":{"1030":1}}],["却很少有人能自信地说",{"2":{"1020":1}}],["却绝不会有15岁的人事经理或法官",{"2":{"614":1}}],["却迟迟未能发家致富时",{"2":{"612":1}}],["却错过了思考方法本身",{"2":{"608":1}}],["却忽略前端模糊的报错提示",{"2":{"556":1}}],["却忽略了一个核心真相",{"2":{"382":1}}],["却如同慢性毒药",{"2":{"527":1}}],["却缺乏执行复杂任务的专业路径",{"2":{"441":1}}],["却缺乏打动人心的人性温度",{"2":{"366":1}}],["却极其容易忽略",{"2":{"383":1}}],["却往往习惯性忽略它们之间的连接关系",{"2":{"383":1}}],["却最常被忽略的一步",{"2":{"375":1}}],["却也难以量化的能力之一",{"2":{"363":1}}],["却无法拥有真正自发的好奇心",{"2":{"362":1}}],["却无法拆分",{"2":{"200":1}}],["却忘记在某个",{"2":{"232":1}}],["却引入整个commons",{"2":{"193":1}}],["却引入了完整的commons",{"2":{"193":1}}],["却在业务膨胀后陷入",{"2":{"169":1}}],["却显得力不从心",{"2":{"102":1}}],["清单是个好东西",{"2":{"1037":1}}],["清单革命",{"2":{"602":1}}],["清空日志",{"2":{"866":1}}],["清偿这些",{"2":{"527":1}}],["清冷",{"2":{"507":1}}],["清",{"2":{"507":1}}],["清晰",{"2":{"1009":1}}],["清晰明了",{"2":{"506":1}}],["清晰梳理解题思路",{"2":{"494":1}}],["清晰的知识树",{"2":{"609":1}}],["清晰的模块边界更是",{"2":{"332":1}}],["清晰的模块化思维更是构建可靠",{"2":{"309":1}}],["清晰的分层和模块划分",{"2":{"283":1}}],["清晰的问题规格",{"2":{"169":1}}],["清洗",{"2":{"465":1}}],["清楚知道何时加载它吗",{"2":{"450":1}}],["清除",{"2":{"777":1}}],["清除模块缓存",{"2":{"334":1}}],["清除缓存",{"2":{"334":1}}],["清理代码",{"2":{"989":1}}],["清理流程",{"2":{"980":1}}],["清理所有订阅",{"2":{"951":1}}],["清理所有编译产物",{"2":{"216":1}}],["清理",{"2":{"851":1,"860":1,"979":1,"980":1}}],["清理历史",{"2":{"451":1}}],["清理资源",{"2":{"139":1,"149":1,"154":1,"889":1}}],["经常吃早中饭或者午饭",{"2":{"1022":1}}],["经两阶段审查",{"2":{"975":1}}],["经由四阶段流水线处理",{"2":{"632":1}}],["经验池",{"2":{"464":1}}],["经验储备器",{"2":{"463":1}}],["经验",{"2":{"414":1}}],["经济与财经知识学习",{"2":{"1031":1}}],["经济环境瞬息万变",{"2":{"400":1}}],["经济学家口中的赢家通吃",{"2":{"1008":1}}],["经济学思维能让我们更理智地分配资源",{"2":{"400":1}}],["经济学思维做产品",{"2":{"400":1}}],["经济学启示",{"2":{"392":1,"393":1}}],["经济直觉",{"0":{"400":1},"2":{"400":1}}],["经典混合架构",{"2":{"965":1}}],["经典著作往往具有复杂性",{"2":{"608":1}}],["经典意象",{"2":{"505":1}}],["经典的例子",{"2":{"366":1}}],["经典模块打包",{"2":{"343":1}}],["经历沉淀下来了",{"2":{"1042":1}}],["经历疫情这三年后",{"2":{"1031":1}}],["经历了疫情这三年",{"2":{"1042":1}}],["经历了前两个阶段的改变",{"2":{"1038":1}}],["经历了一些之前未曾遇到过的事情",{"2":{"1019":1}}],["经历了漫长而曲折的演进过程",{"2":{"298":1}}],["经历完整的",{"2":{"991":1}}],["经历过若干轮后降级为退避轮询",{"2":{"168":1}}],["经过分析体重外的指标发现",{"2":{"1046":1}}],["经过长年累月地洗礼亮了一次小红灯",{"2":{"1043":1}}],["经过医生",{"2":{"1022":1}}],["经过环境初始化",{"2":{"658":1}}],["经过专业编辑反复修改校对",{"2":{"606":1}}],["经过两轮对话对齐了调性",{"2":{"499":1}}],["经过多层转换",{"2":{"143":1}}],["经过",{"2":{"50":1,"941":1,"992":1}}],["qq",{"2":{"1004":1}}],["qwen等",{"2":{"549":1}}],["qwen2",{"2":{"512":1}}],["qwen",{"2":{"512":5,"519":1,"522":7,"523":5}}],["qa",{"2":{"418":1}}],["qiankun",{"2":{"286":1,"287":1}}],["qps",{"2":{"166":1}}],["quickstart",{"2":{"956":1}}],["quint",{"2":{"819":1}}],["qunit",{"2":{"763":1}}],["quart",{"2":{"819":1}}],["quaternion",{"2":{"763":3,"769":2,"772":1,"777":4}}],["quality",{"2":{"750":1,"980":1,"988":2}}],["quantity",{"2":{"281":6,"289":1}}],["quadmesh",{"2":{"763":1}}],["quad",{"2":{"243":1,"819":1}}],["quad=",{"2":{"243":1}}],["questions",{"2":{"986":1}}],["question",{"2":{"986":1}}],["queue",{"2":{"117":1,"256":1}}],["queries",{"2":{"94":1,"98":1,"274":1}}],["queryselectorall",{"2":{"819":1}}],["queryoptions",{"2":{"489":3}}],["queryprovider",{"2":{"274":1}}],["queryclientprovider>",{"2":{"94":1}}],["queryclientprovider",{"2":{"94":2}}],["queryclient",{"0":{"94":1},"2":{"92":1,"94":6,"96":6,"98":1}}],["queryfn",{"2":{"91":2,"95":1}}],["querykey",{"2":{"91":2,"95":2,"96":2,"98":2}}],["query",{"0":{"90":2,"97":1,"101":1},"1":{"91":2,"92":2,"93":2,"94":2,"95":2,"96":2,"98":1,"99":1,"100":1,"101":1},"2":{"83":1,"91":6,"92":8,"94":3,"95":3,"96":2,"97":2,"98":4,"99":1,"101":2,"141":1,"153":1,"154":1,"274":2,"280":2,"301":1,"328":2,"342":9,"482":5,"483":3,"484":1,"486":2,"489":2,"662":1,"866":1,"878":1}}],["quotient",{"2":{"558":1}}],["quot",{"0":{"59":4,"127":2,"183":2,"186":2,"189":4,"192":2,"195":2,"198":2,"199":2,"228":2,"235":2,"419":2,"461":4,"527":4,"528":4,"536":2,"537":2,"538":4,"560":2,"607":2,"611":2},"1":{"184":2,"185":2,"187":2,"188":2,"190":4,"191":4,"193":2,"194":2,"196":2,"197":2,"199":2,"229":2,"230":2,"231":2,"232":2,"233":2,"234":2,"236":2,"237":2,"238":2,"239":2,"240":2,"561":2,"562":2,"608":2,"609":2,"610":2,"612":2,"613":2,"614":2},"2":{"21":6,"25":2,"26":2,"27":2,"29":2,"33":2,"34":2,"38":6,"40":2,"43":4,"45":10,"47":8,"53":2,"54":18,"55":2,"58":6,"59":6,"62":4,"69":2,"82":4,"103":4,"107":4,"112":2,"115":2,"117":8,"118":4,"119":6,"124":4,"127":2,"131":2,"132":12,"151":2,"155":4,"169":2,"170":10,"171":8,"175":2,"176":2,"177":2,"178":2,"179":18,"180":10,"181":38,"182":8,"183":6,"184":6,"185":6,"186":4,"188":12,"189":4,"190":2,"191":8,"192":2,"193":2,"194":2,"195":4,"196":6,"197":8,"198":6,"199":16,"200":40,"201":20,"209":2,"210":6,"227":8,"230":8,"231":2,"237":2,"246":2,"247":2,"250":6,"252":2,"254":2,"255":6,"263":2,"271":6,"297":2,"308":8,"333":4,"358":4,"361":2,"362":4,"363":2,"366":72,"377":2,"378":2,"386":2,"402":2,"403":6,"406":10,"408":8,"410":2,"411":8,"412":14,"414":14,"415":20,"417":18,"418":8,"419":4,"420":8,"424":2,"435":4,"437":2,"438":4,"439":2,"443":2,"457":10,"459":2,"460":2,"461":4,"462":2,"463":2,"464":4,"465":4,"466":4,"472":2,"473":2,"477":2,"478":2,"491":8,"515":4,"517":2,"518":2,"519":2,"523":2,"527":10,"528":8,"529":2,"532":2,"534":4,"535":8,"536":6,"537":6,"538":4,"550":2,"555":6,"556":10,"557":6,"559":4,"561":2,"564":4,"565":4,"567":6,"568":4,"569":4,"570":2,"571":4,"572":4,"576":4,"578":4,"583":8,"584":4,"585":4,"587":14,"589":2,"590":6,"592":4,"595":20,"597":2,"608":2,"610":12,"624":2,"625":4,"626":8,"639":2,"656":2,"670":4,"675":2,"680":2,"728":2,"733":2,"772":2,"795":6,"859":4,"901":2,"933":4,"934":2,"935":2,"936":2,"938":2,"942":2,"949":2,"959":2,"961":10,"962":6,"963":12,"965":4,"968":2,"970":2,"971":2,"973":4,"985":4,"986":4,"987":2,"988":2,"989":2,"991":2,"1000":8,"1001":22,"1002":8,"1003":2,"1006":2,"1016":6,"1018":2}}],["└─",{"2":{"166":5}}],["└─────┬─────┘",{"2":{"892":1}}],["└───────┬───────┘",{"2":{"858":1,"891":1,"892":3}}],["└────────┬─────────┘",{"2":{"849":2,"858":1,"891":1}}],["└──────────┘",{"2":{"889":4}}],["└───────────┘",{"2":{"859":1}}],["└───────────┼─────────────────────────┼───────────────────────────────────┘",{"2":{"849":1}}],["└────────────┘",{"2":{"858":1}}],["└────────────┬──────────────┘",{"2":{"849":1}}],["└─────────────┘",{"2":{"858":2,"859":1}}],["└─────────────┬─────────────┘",{"2":{"849":1}}],["└──────────────┬───────────────────┘",{"2":{"892":3}}],["└──────────────┬─────────────────────────┘",{"2":{"892":1}}],["└──────────────┼─────────────────────────┼───────────────────────────────────────┘",{"2":{"849":1}}],["└─────────────────┼─────────────────────┘",{"2":{"892":1}}],["└───────────────────┼───────────────────┘",{"2":{"891":1}}],["└───────────────────┘",{"2":{"849":2}}],["└─────────────────────┘",{"2":{"849":1}}],["└────────────────────────────┬────────────────────────────┘",{"2":{"891":1}}],["└────────────────────────────┬────────────────────────────────┘",{"2":{"889":2}}],["└───────────────────────────────────────┘",{"2":{"892":1}}],["└───────────────────────────────────────────────────────┘",{"2":{"889":2}}],["└─────────────────────────────────────────────────────────────────┘",{"2":{"892":1}}],["└─────────────────────────────────────────────────────────────────────┘│",{"2":{"858":1,"859":3,"860":4}}],["└───────────────────────────────────────────────────────────────────────────┘",{"2":{"859":1,"860":1}}],["└─────────────────────────────────────────────────────────────────────────────┘",{"2":{"45":1,"849":1}}],["└───────────────────────────────────────────────────────────────────────┘",{"2":{"849":1}}],["└──────────────────────────────────────────────────────────────────────┘",{"2":{"45":5}}],["└─────────────────────────────────────────────────────────────┘",{"2":{"889":2}}],["└─────────────────────────────────────────────────────────┘",{"2":{"471":1}}],["└─────────────────────────────────────────┘",{"2":{"279":1}}],["└──────────────────────────────────────┼──────────────────────────────────────┘",{"2":{"889":1}}],["└───────────────────────────────┘",{"2":{"860":1}}],["└─────────────────────────────┬─────────────────────────────────────────────┘",{"2":{"858":1,"859":1}}],["└─────────────────────────────┬───────────────────────────────────────────────┘",{"2":{"849":1}}],["└─────────────────────────┘",{"2":{"849":2,"889":3}}],["└─────────────────────────┘│",{"2":{"849":2}}],["└───────────────────────┘│",{"2":{"849":2}}],["└───────────────────┴───────────────────┘",{"2":{"849":1}}],["└───────────────┬───────────────────────┘",{"2":{"858":1}}],["└───────────────┬───────────────┘",{"2":{"849":1}}],["└──────────────┘",{"2":{"849":3}}],["└─────────┘",{"2":{"858":3,"859":1}}],["└─────────┬─────────┘",{"2":{"858":1}}],["└─────────┼───────────────────┼───────────────────┼───────────────────────────┘",{"2":{"849":1}}],["└──────┬───────┘",{"2":{"849":3,"891":3}}],["└───",{"2":{"855":2,"856":1}}],["└───>",{"2":{"855":8,"856":1}}],["└──",{"2":{"46":5,"62":2,"67":7,"190":5,"191":3,"211":5,"274":47,"275":21,"280":69,"290":23,"442":1,"470":2,"474":5,"570":10,"575":1,"586":2,"647":31,"677":7,"706":22,"735":31,"763":33,"790":19,"819":21,"821":1,"851":14,"882":5,"908":2,"939":72,"980":41}}],["├─",{"2":{"166":7}}],["├───────────┬───────────────────────┤",{"2":{"892":1}}],["├───────────┬───────────────────────────┤",{"2":{"892":1}}],["├─────────────────────────────────────────────────────────────────────┤│",{"2":{"859":1}}],["├───────────────────────────────────────────────────────────────────────┤",{"2":{"849":1}}],["├─────────────────────────────────────────────────────────────────────────────┤",{"2":{"45":1}}],["├─────────────────────────────────────────┤",{"2":{"279":3}}],["├───>",{"2":{"855":12,"856":1}}],["├───",{"2":{"855":6,"856":2}}],["├──",{"2":{"46":7,"62":2,"67":9,"190":3,"191":1,"211":7,"274":94,"275":29,"280":83,"290":42,"442":3,"470":7,"474":9,"570":17,"575":3,"586":1,"647":152,"677":85,"706":151,"735":209,"763":302,"790":126,"819":74,"821":5,"851":118,"882":21,"908":19,"939":200,"980":120}}],["好用",{"2":{"546":1,"550":1}}],["好的作者会先把他要回答的问题交代清楚",{"2":{"609":1}}],["好的创造绝非源于盲目的灵感",{"2":{"600":1}}],["好的",{"2":{"509":1}}],["好的诗歌创作需要能综合考虑多个因素",{"2":{"501":1}}],["好在哪里",{"2":{"503":1}}],["好看",{"2":{"460":1}}],["好烦",{"2":{"370":1}}],["好奇的问题吧",{"2":{"362":1}}],["好奇心",{"2":{"350":1,"355":2,"362":1}}],["好",{"2":{"166":1}}],["向一些有经验的人请教方法",{"2":{"1046":1}}],["向这几波人咨询更能习得比较正向的建议或小技巧",{"2":{"1024":1}}],["向有专业或有经验的人咨询",{"0":{"1024":1}}],["向书本上的健康标准和知识找",{"2":{"1023":1}}],["向专业或有经验的人咨询",{"2":{"1023":1}}],["向内思变",{"2":{"1005":1,"1019":1}}],["向内求索",{"0":{"626":1}}],["向下广播",{"2":{"945":1}}],["向下兼容的",{"2":{"331":1}}],["向下兼容",{"2":{"331":1}}],["向外部暴露统一的",{"2":{"734":1}}],["向上冒泡",{"2":{"945":1}}],["向上冒泡至",{"2":{"684":1}}],["向上查找数据",{"2":{"653":1}}],["向后兼容的旧版",{"2":{"706":1}}],["向后兼容",{"2":{"706":1}}],["向后兼容层",{"2":{"647":1}}],["向后端或",{"2":{"83":1}}],["向量",{"2":{"763":3}}],["向量识别",{"2":{"586":1}}],["向量化",{"2":{"546":1}}],["向量检索",{"2":{"410":1}}],["向用户建议保留方案",{"2":{"451":1}}],["向模型展示带有正面和负面反馈的历史输出",{"2":{"426":1}}],["向具备商业格局和深邃人性的",{"2":{"400":1}}],["向",{"2":{"309":1,"592":1}}],["向子组件下发契约",{"2":{"175":1}}],["向服务器发送请求",{"2":{"162":1}}],["立flag",{"2":{"1042":1}}],["立体效果",{"2":{"763":1}}],["立体渲染相机",{"2":{"763":1}}],["立方体贴图",{"2":{"763":1}}],["立方体",{"2":{"763":1}}],["立方体环境映射相机",{"2":{"763":1}}],["立法者",{"2":{"180":1}}],["立刻拆解成三个部分",{"2":{"626":1}}],["立刻重新发起请求",{"2":{"164":1}}],["立刻发起下一个循环重新挂起",{"2":{"164":1}}],["立刻发起下一次请求",{"2":{"164":1}}],["立刻发起下一次长轮询连接",{"2":{"162":1}}],["立刻返回给客户端",{"2":{"163":1}}],["立即生效",{"2":{"834":1}}],["立即完成",{"2":{"825":2}}],["立即模式",{"2":{"670":1,"673":1}}],["立即触发人工深度审查",{"2":{"537":1}}],["立即执行函数表达式",{"2":{"298":1}}],["立即通过对话纠正",{"2":{"171":1}}],["立即发起下一个新请求",{"2":{"162":1}}],["立即终止请求并触发",{"2":{"149":1}}],["立即使用新名称更新本地",{"2":{"88":1}}],["立即渲染并生成完整",{"2":{"40":1}}],["立即返回给浏览器",{"2":{"27":1}}],["旨在将特定领域的知识",{"2":{"547":1}}],["旨在为",{"2":{"437":1}}],["旨在简化开发流程",{"2":{"344":1}}],["旨在帮助开发者自动执行软件开发工作流",{"2":{"343":1}}],["旨在通过优化的机器代码和高度增量计算能力",{"2":{"343":1}}],["旨在无需定义专门",{"2":{"342":1}}],["旨在解决浏览器端模块加载的问题",{"2":{"305":1}}],["旨在以较低的架构成本",{"2":{"161":1}}],["旨在打破",{"2":{"113":1}}],["跳转到指定时间",{"2":{"825":1}}],["跳转并播放",{"2":{"749":1}}],["跳转并停止",{"2":{"749":1}}],["跳转方法",{"2":{"662":1}}],["跳转光标",{"2":{"564":1}}],["跳出循环",{"2":{"160":1}}],["跳过技能",{"2":{"979":1}}],["跳过设计",{"2":{"973":1}}],["跳过前一个",{"2":{"892":1}}],["跳过hit检测",{"2":{"679":1}}],["跳过库文件检查",{"2":{"212":1}}],["跳过所有",{"2":{"203":1}}],["跳过空数据消息和",{"2":{"150":1}}],["跳过空消息和",{"2":{"147":1}}],["跳过",{"2":{"143":2,"322":1,"464":1}}],["跳过重复计算",{"0":{"76":1}}],["挂起当前",{"2":{"163":1}}],["挂起连接",{"2":{"162":1}}],["挂起",{"2":{"162":1}}],["挂起机制来实现",{"2":{"160":1}}],["挂载了多个工具和复杂的推理模式后",{"2":{"509":1}}],["挂载",{"2":{"58":1}}],["第四阶段",{"0":{"1048":1},"2":{"282":1,"1048":1}}],["第二层",{"0":{"967":1},"2":{"965":1}}],["第二部分",{"0":{"888":1},"1":{"889":1,"890":1,"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1}}],["第二",{"0":{"609":1,"613":1}}],["第二曲线",{"2":{"603":1}}],["第二步",{"2":{"494":1}}],["第二轮",{"2":{"375":1}}],["第二阶段的时间也大概维持了一个月",{"2":{"1046":1}}],["第二阶段",{"0":{"1037":1,"1046":1},"2":{"282":1}}],["第二次等待",{"2":{"159":1}}],["第一性原理",{"2":{"1010":1}}],["第一层",{"0":{"966":1},"2":{"965":1}}],["第一个冒号",{"2":{"892":1}}],["第一部分",{"0":{"871":1},"1":{"872":1,"873":1,"874":1,"875":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1}}],["第一",{"0":{"608":1,"612":1}}],["第一步试",{"2":{"515":1}}],["第一步",{"2":{"494":1}}],["第一步永远是把自己沉浸到特定的人群中",{"2":{"377":1}}],["第一批种子用户会自然诞生",{"2":{"377":1}}],["第一轮",{"2":{"375":1}}],["第一阶段的时间大概维持了一个月",{"2":{"1045":1}}],["第一阶段最重要的准则是",{"2":{"1045":1}}],["第一阶段",{"0":{"1036":1,"1045":1},"2":{"282":1}}],["第一次等待",{"2":{"159":1}}],["第",{"2":{"159":1}}],["第三种最佳实践模式是前沿的组件化范式",{"2":{"971":1}}],["第三层",{"0":{"968":1},"2":{"965":1}}],["第三",{"0":{"610":1,"614":1}}],["第三个则扮演",{"2":{"535":1}}],["第三步",{"2":{"494":1}}],["第三阶段也是大概维持了一个月",{"2":{"1047":1}}],["第三阶段主要通过以下几个方面来继续把减肥这件小事执行下去",{"2":{"1047":1}}],["第三阶段",{"0":{"1038":1,"1047":1},"2":{"282":1}}],["第三次等待",{"2":{"159":1}}],["第三方库覆写",{"2":{"965":1}}],["第三方编辑器库",{"2":{"763":1}}],["第三方依赖",{"2":{"763":1}}],["第三方内联依赖库",{"2":{"735":1}}],["第三方服务",{"2":{"559":1}}],["第三方平台将多家主流模型聚合为统一",{"2":{"523":1}}],["第三方聚合平台",{"0":{"523":1}}],["第三方模块",{"2":{"334":1}}],["第三方集成",{"2":{"167":1}}],["第三方支持",{"2":{"98":1}}],["第三方脚本阻塞页面渲染",{"2":{"72":1}}],["第三方",{"2":{"8":1,"912":1}}],["初学者有时会遇到",{"2":{"961":1}}],["初创产品",{"2":{"523":1}}],["初中生数学学习问题与解决方法",{"2":{"474":1}}],["初中数学高效学习方法研究",{"2":{"474":1}}],["初中数学重点知识模块与学习策略",{"2":{"474":1}}],["初中数学学习资源研究笔记",{"2":{"474":1}}],["初中数学学习指南",{"2":{"474":2}}],["初中数学学习研究",{"0":{"473":1},"1":{"474":1,"475":1}}],["初心",{"2":{"430":1}}],["初级",{"2":{"405":1}}],["初衷是让",{"2":{"304":1}}],["初期阶段",{"2":{"387":1}}],["初期成本高",{"2":{"283":1}}],["初期的频繁查询注定是无效的",{"2":{"158":1}}],["初始状态",{"2":{"892":1}}],["初始版本发布",{"2":{"331":1}}],["初始构建快",{"2":{"45":1}}],["初始白屏",{"2":{"25":1}}],["初始化重试间隔",{"2":{"891":1}}],["初始化阶段",{"2":{"891":1}}],["初始化动画参数",{"2":{"825":1}}],["初始化节点",{"2":{"770":2}}],["初始化元素",{"2":{"749":1}}],["初始化与渲染完整流程",{"0":{"717":1}}],["初始化数据加载",{"2":{"663":1}}],["初始化环境上下文",{"2":{"649":1}}],["初始化",{"0":{"13":1},"2":{"649":1,"724":1,"741":1}}],["退化为预处理器",{"2":{"970":1}}],["退出",{"2":{"855":3}}],["退出循环",{"2":{"141":1}}],["退避",{"2":{"168":1}}],["退避轮询实现更简单",{"2":{"166":1}}],["退避轮询通过不断拉大两次请求之间的延迟时间",{"2":{"159":1}}],["退避轮询是一种在计算机网络和分布式系统中常用的网络请求或重试策略",{"2":{"157":1}}],["退避轮询",{"0":{"157":1},"1":{"158":1,"159":1,"160":1},"2":{"156":1,"166":3}}],["易腐烂",{"2":{"1000":1}}],["易学易用",{"2":{"965":1}}],["易储性",{"2":{"613":1}}],["易读",{"2":{"350":1}}],["易于逐组件生成和修正",{"2":{"935":1}}],["易于定位和扩展",{"2":{"283":1}}],["易于维护",{"2":{"283":1}}],["易于维护和扩展的软件系统",{"2":{"276":1}}],["易扩展",{"2":{"156":1}}],["易用性强",{"2":{"6":1}}],["再不控制下体重",{"2":{"1043":1}}],["再让大模型输出一段",{"2":{"971":1}}],["再调用",{"2":{"798":1}}],["再批判",{"2":{"609":1}}],["再展开论述",{"2":{"609":1}}],["再辅以勤恳的思考训练",{"2":{"608":1}}],["再切换到",{"2":{"559":1}}],["再验证",{"2":{"535":1}}],["再综合归纳成",{"2":{"517":1}}],["再变成可运行产品",{"2":{"461":1}}],["再慢慢向",{"2":{"459":1}}],["再按需加载完整说明",{"2":{"436":1}}],["再由另一只",{"2":{"414":1}}],["再",{"2":{"412":1}}],["再多的变量堆砌在一起",{"2":{"385":1}}],["再去社区或同行间交流",{"2":{"375":1}}],["再启动",{"2":{"343":1}}],["再在后台请求最新数据",{"2":{"342":1}}],["再通过标准接口灵活组合",{"2":{"294":1}}],["再从类型系统的高度审视二者的深层关系",{"2":{"227":1}}],["再检查",{"2":{"199":2}}],["再逐步复杂",{"2":{"198":1}}],["再根据明确需求添加",{"2":{"188":1}}],["再交由",{"2":{"178":1}}],["再写实现",{"2":{"177":1}}],["再实现逻辑",{"2":{"177":1}}],["再进入下一步的实质性编码",{"2":{"170":1}}],["再结合本文深入实践",{"2":{"156":1}}],["再到基于",{"2":{"1000":1}}],["再到对循环依赖的警惕",{"2":{"332":1}}],["再到如今的电子书",{"2":{"613":1}}],["再到如今能够独立思考",{"2":{"569":1}}],["再到如今",{"2":{"303":1}}],["再到",{"2":{"155":1,"597":1}}],["吗",{"2":{"155":1,"457":1,"965":2}}],["厘清了流式",{"2":{"155":1}}],["构筑起持久的领域知识上下文",{"2":{"440":1}}],["构成了",{"2":{"175":1,"270":1}}],["构造文本字符串",{"2":{"792":1}}],["构造函数并实例化",{"2":{"741":1}}],["构造函数接收",{"2":{"686":1}}],["构造",{"2":{"153":1,"484":1}}],["构建自己的心智模型",{"2":{"1029":1,"1032":1}}],["构建自主工作流",{"2":{"403":1}}],["构建切实可行的目标",{"2":{"1005":1}}],["构建原子层",{"2":{"969":1}}],["构建强类型的枚举接口",{"2":{"967":1}}],["构建输出",{"0":{"887":1}}],["构建输出目录",{"2":{"203":1}}],["构建生成",{"2":{"851":1}}],["构建与包结构",{"0":{"836":1}}],["构建与渲染",{"2":{"23":1}}],["构建静态",{"2":{"790":1}}],["构建文档",{"2":{"781":1}}],["构建树形场景图",{"2":{"769":1}}],["构建产物",{"2":{"763":1,"819":1}}],["构建产物目录",{"2":{"706":1,"735":1}}],["构建器",{"2":{"763":1}}],["构建所有包",{"2":{"930":1}}],["构建所有图层",{"2":{"741":1}}],["构建所有格式",{"2":{"726":1,"840":1}}],["构建后的播放器",{"2":{"735":1}}],["构建发布",{"0":{"726":1}}],["构建主脚本",{"2":{"706":1}}],["构建脚本等辅助设施",{"2":{"978":1}}],["构建脚本和配置",{"2":{"706":1}}],["构建脚本",{"2":{"677":1,"735":1}}],["构建验证",{"2":{"677":1}}],["构建了一个树形",{"2":{"653":1}}],["构建了一套无形的",{"2":{"319":1}}],["构建体系",{"2":{"615":1}}],["构建个人知识树而言是极大的助力",{"2":{"613":1}}],["构建知识树",{"0":{"609":1}}],["构建命令",{"0":{"697":1},"2":{"595":1,"851":1}}],["构建前端",{"2":{"553":1}}],["构建精美的",{"2":{"553":1}}],["构建测试集",{"2":{"549":1}}],["构建连接物理世界的数字中枢",{"0":{"544":1},"1":{"545":1,"546":1,"547":1,"548":1,"549":1,"550":1}}],["构建系统配置",{"2":{"939":1}}],["构建系统与产物矩阵",{"0":{"751":1}}],["构建系统",{"2":{"540":1}}],["构建确定性的工程基座",{"0":{"534":1},"1":{"535":1,"536":1,"537":1,"538":1}}],["构建新型",{"0":{"533":1}}],["构建流式交互",{"0":{"487":1},"1":{"488":1,"489":1,"490":1}}],["构建简单",{"2":{"477":1}}],["构建可查询的知识网络",{"2":{"628":1}}],["构建可复用底层系统",{"2":{"459":1}}],["构建可复用的底层系统",{"2":{"459":1}}],["构建可预测的秩序",{"0":{"332":1}}],["构建力与杠杆力在不同成熟度下的综合体现",{"2":{"459":1}}],["构建力",{"2":{"458":1}}],["构建过程或辅助工具的变动",{"2":{"451":2}}],["构建更完整的认知闭环",{"2":{"433":1}}],["构建锁定效应与对抗边际效用递减",{"0":{"398":1}}],["构建信息场域",{"2":{"367":1}}],["构建智能体工作流",{"2":{"367":1}}],["构建类似",{"2":{"355":1}}],["构建类型安全的属性访问工具函数",{"2":{"270":1}}],["构建高性能的网络应用程序",{"2":{"338":1}}],["构建稳固的类型防线",{"0":{"326":1}}],["构建配置",{"2":{"322":1,"647":2,"706":1,"735":1,"763":1,"790":1,"882":1}}],["构建模块图谱",{"2":{"314":1}}],["构建模块聚合层",{"0":{"312":1}}],["构建和部署脚本",{"2":{"290":1,"851":1}}],["构建之间共享代码",{"2":{"288":1}}],["构建清晰的配置层次结构",{"2":{"209":1}}],["构建出一套清晰",{"2":{"332":1}}],["构建出更健壮",{"2":{"293":1}}],["构建出更加类型安全",{"2":{"263":1}}],["构建出经得起时间考验的软件系统",{"2":{"180":1}}],["构建出的页面水合后具备完整的",{"2":{"54":1}}],["构建一个简易的命令行聊天工具",{"2":{"487":1}}],["构建一个",{"2":{"367":1}}],["构建一个剥离了所有动态行为的",{"2":{"171":1}}],["构建一个健壮的",{"2":{"150":1}}],["构建纯渲染的静态版本",{"0":{"171":1}}],["构建进度条",{"2":{"111":1}}],["构建于",{"2":{"103":1}}],["构建多",{"2":{"45":2}}],["构建较多",{"2":{"45":1}}],["构建少",{"2":{"45":2}}],["构建阶段生成所有页面的",{"2":{"31":1}}],["构建阶段",{"2":{"31":1,"53":1}}],["构建阶段的时机选择",{"2":{"21":1}}],["构建",{"0":{"536":1},"2":{"21":3,"45":1,"145":1,"343":1,"441":1,"467":1,"548":1,"572":1,"573":1,"583":1,"646":1,"647":1,"655":2,"667":1,"671":1,"677":1,"702":1,"735":1,"781":1,"790":1,"815":1,"933":1,"941":1,"965":1,"982":1,"1001":1}}],["构建时提取注入bundle头部",{"2":{"819":1}}],["构建时自动下载字体并内联为",{"2":{"72":1}}],["构建时机选择",{"2":{"55":1}}],["构建时由",{"2":{"53":1}}],["构建时渲染完成",{"2":{"51":1}}],["构建时穷举所有可能",{"2":{"54":1}}],["构建时穷举",{"0":{"50":1},"2":{"49":1}}],["构建时间随页面数量爆炸性增长",{"2":{"47":1}}],["构建时间影响",{"2":{"45":1}}],["构建时固化",{"2":{"45":1}}],["构建时",{"2":{"45":1,"63":2,"75":1}}],["构建时一次性生成",{"2":{"45":1}}],["构建时生成",{"2":{"15":1,"53":2}}],["构建时预获取所有文章",{"2":{"15":1}}],["构建时预渲染",{"2":{"3":1}}],["构建工具链",{"2":{"763":1}}],["构建工具与工作流",{"0":{"343":1}}],["构建工具的妙用",{"2":{"308":1}}],["构建工具的选择直接决定开发体验上限",{"2":{"54":1}}],["构建工具配置",{"2":{"216":1}}],["构建工具",{"2":{"5":1,"11":1,"216":1,"642":1,"759":1,"939":1}}],["构建的全栈项目",{"2":{"342":1}}],["构建的",{"2":{"4":1}}],["值得一提的是",{"2":{"965":1,"1002":1}}],["值得铭记的几条原则",{"2":{"55":1}}],["值的事件",{"2":{"898":1}}],["值类型",{"2":{"834":1}}],["值并写入目标",{"2":{"830":1}}],["值处理核心",{"2":{"828":1}}],["值处理系统",{"0":{"828":1},"2":{"817":1}}],["值修饰函数",{"2":{"822":1,"828":1,"834":1}}],["值解析与合成",{"2":{"828":1}}],["值解析与写入",{"2":{"819":1}}],["值解析",{"2":{"818":1}}],["值分解",{"2":{"818":1}}],["值系统",{"2":{"814":1,"819":1}}],["值对",{"2":{"772":1}}],["值对象是不可变的",{"2":{"281":1}}],["值对象",{"2":{"278":1,"279":1,"282":2}}],["值累积",{"2":{"763":1}}],["值变更检测",{"2":{"685":1}}],["值越低越优先命中",{"2":{"661":1}}],["值满足",{"2":{"250":1}}],["值必须同时满足",{"2":{"250":1}}],["值必须同时满足所有成员类型",{"2":{"236":1}}],["值必须同时包含",{"2":{"236":1}}],["值唯一的字面量字段",{"2":{"230":1}}],["值可以是",{"2":{"229":1}}],["值只要属于其中之一即可",{"2":{"227":1}}],["值",{"2":{"152":1,"699":1,"728":1,"805":1,"828":2}}],["增删改能力",{"2":{"680":1}}],["增亮",{"2":{"677":1}}],["增长率",{"2":{"472":1}}],["增长率等",{"2":{"470":1}}],["增长的全链路",{"2":{"457":1}}],["增强体育锻炼活动来实现体重的减少",{"2":{"1026":1}}],["增强构建",{"2":{"971":1}}],["增强的架构跃迁",{"0":{"971":1}}],["增强版",{"2":{"958":1}}],["增强代码的可读性和可维护性",{"2":{"957":1}}],["增强代码可读性",{"2":{"264":1}}],["增强型构建者",{"2":{"1001":1}}],["增强型",{"0":{"628":1}}],["增强动态美",{"2":{"505":1}}],["增强讲解效果",{"2":{"494":1}}],["增强与编排",{"0":{"455":1}}],["增强",{"2":{"385":1,"506":1,"677":1}}],["增强回路小例子",{"0":{"1008":1}}],["增强回路和调节回路这对孪生兄弟",{"2":{"387":1}}],["增强回路与调节回路",{"2":{"386":1}}],["增强回路",{"0":{"386":1},"2":{"383":2,"386":1,"387":2}}],["增加测试",{"2":{"451":1}}],["增加新的价值或收入流",{"2":{"399":1}}],["增加",{"2":{"366":1}}],["增加了一定的打包体积",{"2":{"342":1}}],["增加了配置的复杂性",{"2":{"216":1}}],["增加实体",{"2":{"188":1}}],["增加数据解析逻辑",{"2":{"150":1}}],["增加重试计数器",{"2":{"150":1}}],["增量补丁",{"2":{"934":1}}],["增量构建更快",{"2":{"904":1}}],["增量极速打包",{"2":{"343":1}}],["增量信息",{"2":{"208":1}}],["增量编译命令",{"2":{"216":1}}],["增量编译优化",{"2":{"210":1}}],["增量编译信息文件",{"2":{"208":1}}],["增量编译信息文件路径",{"2":{"203":1}}],["增量编译",{"2":{"203":1,"207":1,"212":1}}],["增量静态再生",{"2":{"34":1,"45":1}}],["增量渲染缓解",{"2":{"19":1}}],["增量更新算法",{"2":{"713":1}}],["增量更新",{"2":{"9":1,"706":1,"719":1}}],["抛出异常",{"2":{"898":1}}],["抛出错误阻止重试",{"2":{"150":1}}],["抛出",{"2":{"150":1}}],["抛出致命错误停止重试",{"2":{"150":1}}],["抛出致命错误",{"2":{"150":1}}],["标点→前词胶合",{"2":{"795":1}}],["标点胶合",{"2":{"795":1}}],["标量如不透明度",{"2":{"743":1}}],["标注",{"2":{"706":1}}],["标杆",{"2":{"567":1}}],["标题组件",{"2":{"706":1}}],["标题",{"2":{"472":1}}],["标志着大模型应用开发正在走向真正的",{"2":{"456":1}}],["标签阻止",{"2":{"987":1}}],["标签控制流转",{"2":{"978":1}}],["标签带有",{"2":{"961":1}}],["标签页",{"2":{"939":1}}],["标签页管理",{"2":{"851":1}}],["标签偏移",{"2":{"819":1,"831":1}}],["标签防重叠",{"2":{"706":1}}],["标签布局",{"2":{"706":1}}],["标签",{"2":{"448":1,"450":1,"647":1,"677":1,"959":1,"986":1}}],["标签引入文件的方式很难看清依赖先后顺序",{"2":{"297":1}}],["标识所描述事件类型的字符串",{"2":{"898":1}}],["标识",{"2":{"278":2,"706":1,"744":1}}],["标识在整个生命周期中保持不变",{"2":{"278":1}}],["标记任务完成",{"2":{"988":1}}],["标记解析器",{"2":{"735":1}}],["标记所有任务为",{"2":{"708":1}}],["标记",{"2":{"706":1,"719":1,"735":1}}],["标记脏",{"2":{"685":1}}],["标记语言",{"2":{"338":1}}],["标记重要版本",{"2":{"331":1}}],["标记类型",{"0":{"247":1}}],["标记并触发关闭回调",{"2":{"150":1}}],["标记流是否已正常结束",{"2":{"150":1}}],["标准格式",{"2":{"994":1}}],["标准测试数据集",{"2":{"939":1}}],["标准保证了跨框架兼容性",{"2":{"936":1}}],["标准penner缓动集",{"2":{"819":1}}],["标准材质",{"2":{"771":1,"778":1}}],["标准支持",{"2":{"763":1}}],["标准作业程序",{"2":{"454":1}}],["标准扩展",{"2":{"411":1}}],["标准会员",{"2":{"397":1}}],["标准答案",{"2":{"360":1}}],["标准导航",{"2":{"349":1}}],["标准前后端分离架构",{"2":{"342":1}}],["标准装饰器",{"2":{"324":1}}],["标准化模块组装",{"2":{"544":1}}],["标准化流程",{"2":{"436":1}}],["标准化客服",{"2":{"405":1}}],["标准化装饰器",{"0":{"324":1}}],["标准化",{"2":{"287":1,"592":1,"907":1,"915":1}}],["标准化的输入契约",{"2":{"925":1}}],["标准化的消息类型",{"2":{"913":1}}],["标准化的操作手册",{"0":{"442":1}}],["标准化的",{"2":{"87":1,"436":1}}],["标准",{"2":{"122":1,"129":1,"130":1,"134":1,"135":1,"342":1,"445":1,"763":1}}],["取决于自身的思考深度",{"2":{"622":1}}],["取决于日常习惯",{"2":{"605":1}}],["取决于所接模型",{"2":{"568":1}}],["取代的底层编码实践",{"2":{"531":1}}],["取得成就究竟有什么不可替代的秘诀",{"2":{"362":1}}],["取消标志",{"2":{"834":1}}],["取消",{"2":{"825":1}}],["取消动画",{"2":{"825":1}}],["取消并从引擎移除",{"2":{"825":1}}],["取消机制",{"2":{"682":1}}],["取消请求等功能",{"2":{"342":1}}],["取消订阅函数",{"2":{"150":1}}],["取全部",{"2":{"242":1,"250":1}}],["取共有",{"2":{"242":1,"250":1}}],["取",{"2":{"239":1}}],["取两家之长",{"2":{"135":1}}],["移除子动画",{"2":{"834":1}}],["移除对",{"2":{"308":1}}],["移除代码中的注释",{"2":{"203":1}}],["移除了所有非必要的包装",{"2":{"169":1}}],["移除末尾斜杠以避免拼接时出现双斜杠",{"2":{"150":1}}],["移动",{"2":{"656":1}}],["移动端开发者",{"2":{"933":1}}],["移动端体验佳",{"2":{"518":1}}],["移动端体验流畅",{"2":{"518":1}}],["移动端或低功耗设备使用退避轮询节省电量",{"2":{"168":1}}],["移动端弱网环境下的",{"0":{"127":1}}],["移动应用",{"2":{"102":1}}],["综合考量项目特点",{"2":{"965":1}}],["综合位置",{"2":{"672":1}}],["综合以上分析",{"2":{"597":1}}],["综合以上要点",{"2":{"150":1}}],["综合能力最强",{"2":{"519":1}}],["综合能力最全面",{"2":{"511":1,"521":1}}],["综上所述",{"2":{"128":1}}],["资深代码审查专家",{"2":{"591":1}}],["资深产品人也能在瞬间判断一个需求是",{"2":{"363":1}}],["资料整理",{"2":{"406":1}}],["资产特定",{"2":{"391":1}}],["资源管理",{"2":{"777":1}}],["资源管理器",{"2":{"735":1}}],["资源和",{"2":{"763":1}}],["资源描述符",{"2":{"763":1}}],["资源绑定",{"2":{"763":1}}],["资源加载框架",{"2":{"763":1}}],["资源加载覆盖",{"2":{"735":1}}],["资源加载器",{"2":{"735":1}}],["资源加载",{"2":{"734":1}}],["资源分布",{"2":{"474":1}}],["资源挂载",{"2":{"443":1}}],["资源层",{"2":{"443":1}}],["资源包",{"2":{"436":2,"442":1}}],["资源调度",{"2":{"414":1}}],["资源",{"2":{"383":1,"738":1}}],["资源受限的情况下",{"2":{"363":1}}],["资源浪费",{"2":{"158":1}}],["资源清理",{"0":{"149":1},"2":{"150":2}}],["资讯列表",{"2":{"36":1}}],["思变是要结合客观事实和自身诉求来落地的",{"2":{"1042":1}}],["思维模型和章法也是相当重要的",{"2":{"1017":1}}],["思维以极低成本进行真实数据验证",{"2":{"600":1}}],["思维寻找突破性创新的可能",{"2":{"598":1}}],["思维",{"2":{"556":1,"1001":1,"1024":1}}],["思维链",{"2":{"545":1}}],["思维导图",{"2":{"515":1}}],["思路",{"2":{"504":1,"506":1}}],["思想创造",{"2":{"406":1}}],["思想的进一步细化",{"2":{"41":1}}],["思考与总结",{"2":{"1020":1}}],["思考与总结来梳理",{"2":{"1020":1}}],["思考要点",{"2":{"626":1}}],["思考是为了对输入的信息进行校验和逻辑判断",{"2":{"622":1}}],["思考+不执行",{"2":{"622":1}}],["思考+执行",{"0":{"622":1,"626":1},"2":{"622":3}}],["思考过程",{"2":{"537":1}}],["思考规范",{"2":{"504":1}}],["思考",{"2":{"414":3,"417":1,"488":1,"622":1}}],["思考核心稀缺资源的配置效率",{"2":{"391":1}}],["思考它做对了哪三件事",{"2":{"373":1}}],["思考中",{"2":{"147":1}}],["何时触发",{"2":{"592":1}}],["何时用技能",{"0":{"588":1}}],["何时用命令",{"0":{"588":1}}],["何时该拆分到",{"0":{"577":1}}],["何时放弃",{"2":{"146":1}}],["何时获取数据",{"2":{"57":1}}],["指标与业余学习和交流后续希望以周为单位推进",{"2":{"1048":1}}],["指针事件区域大小",{"2":{"719":1}}],["指针事件系统",{"2":{"675":1,"677":1,"679":1}}],["指针",{"2":{"680":1}}],["指针类型映射",{"2":{"677":1}}],["指明知识门径",{"2":{"609":1}}],["指明方向的人",{"2":{"539":1}}],["指派审查任务",{"2":{"592":1}}],["指派一个独立的",{"2":{"592":1}}],["指派它执行",{"2":{"590":1}}],["指导家长如何一步步引导孩子理解题目本质",{"2":{"494":1}}],["指导",{"2":{"472":1}}],["指智能体接收外部输入",{"2":{"410":1}}],["指令优先级",{"2":{"986":1}}],["指令要具体",{"2":{"583":1}}],["指令和脚本打包封装成的标准化",{"2":{"547":1}}],["指令遵循精准",{"2":{"511":1,"521":2}}],["指令遵循度",{"2":{"509":1}}],["指令的信噪比变得至关重要",{"2":{"509":1}}],["指令说明",{"2":{"449":1}}],["指令数据",{"2":{"443":1}}],["指令层",{"2":{"443":1}}],["指令",{"2":{"408":1,"410":1,"418":1,"442":1,"504":1,"918":1}}],["指令即可",{"2":{"62":1}}],["指示器",{"2":{"366":1}}],["指出",{"2":{"361":1}}],["指数平方雾",{"2":{"763":1}}],["指数级倍增器",{"0":{"557":1},"2":{"1001":1}}],["指数级的交付速度",{"2":{"463":1}}],["指数级增长",{"2":{"386":1}}],["指数增长的问题在于曲线在开始时给人的感觉很平",{"2":{"361":1}}],["指数退避重试",{"2":{"150":1}}],["指数退避",{"0":{"146":1},"2":{"146":1}}],["指向共享类型目录",{"2":{"203":1}}],["指向",{"2":{"203":5}}],["指定字体名",{"2":{"785":1}}],["指定验收标准",{"2":{"568":1}}],["指定需要编译的指定文件",{"2":{"203":1}}],["指定需要编译的文件",{"2":{"203":1}}],["指定不需要编译的文件",{"2":{"203":1}}],["指定编译时使用的",{"2":{"203":1}}],["指定编译后代码使用的模块化方案",{"2":{"203":1}}],["指定编译后的",{"2":{"203":1}}],["指定输出格式",{"2":{"435":1}}],["指定输出字符集",{"2":{"203":1}}],["指定输出文件目录结构",{"2":{"203":1}}],["指定",{"2":{"203":1}}],["指定允许的库文件类型",{"2":{"203":1}}],["指",{"2":{"181":1}}],["理性的结构约束",{"2":{"496":1}}],["理性人假说认为人是绝对自私且理智的",{"2":{"393":1}}],["理想的商业化优化是在不降低核心用户体验的前提下",{"2":{"399":1}}],["理想状态下",{"2":{"170":1}}],["理智与情感的共舞",{"0":{"366":1}}],["理念",{"2":{"342":1,"967":1}}],["理论的适用条件只要稍有些变化",{"2":{"608":1}}],["理论上你只需要修改",{"2":{"336":1}}],["理论说完",{"2":{"145":1}}],["理解世界的方式了",{"2":{"612":1}}],["理解链",{"2":{"610":1}}],["理解你的项目结构",{"2":{"557":1}}],["理解商业模式与用户痛点",{"2":{"556":1}}],["理解了机制",{"2":{"444":1}}],["理解并转化海量非结构化数据",{"2":{"417":1}}],["理解业务领域",{"2":{"282":1}}],["理解泛型的工作原理",{"2":{"254":1}}],["理解这些设计思想",{"2":{"597":1}}],["理解这些规范不仅是为了应付面试或处理老旧代码",{"2":{"309":1}}],["理解这些关系",{"2":{"244":1}}],["理解这两种类型的本质及其交互规律",{"2":{"250":1}}],["理解它是如何从初始目标一步步逼近最终答案的",{"2":{"427":1}}],["理解它能帮助我们写出更精妙的工具类型",{"2":{"234":1}}],["理解它只需搞懂两个核心时间参数",{"2":{"92":1}}],["理解联合类型和交叉类型的关键在于建立一个核心心智模型",{"2":{"227":1}}],["理解",{"2":{"54":1,"60":1,"314":1,"382":1,"598":2,"1007":1}}],["停止脚本",{"2":{"987":1}}],["停止操作",{"2":{"879":1}}],["停止动画",{"2":{"749":1}}],["停止抱怨",{"2":{"626":1}}],["停止抱怨外界信息的真伪",{"2":{"624":1}}],["停止当前操作并列出冲突文件",{"2":{"451":1}}],["停止当前正在进行的相关查询请求",{"2":{"96":1}}],["停止重试",{"2":{"144":1,"146":1,"150":2}}],["除原生",{"2":{"957":1}}],["除非是不世出的罕见人才",{"2":{"1025":1}}],["除非我们知道什么是最好的",{"2":{"359":1}}],["除非你在处理非常老旧的项目",{"2":{"320":1}}],["除",{"2":{"144":1}}],["除了不用划定专门的办公空间",{"2":{"1040":1}}],["除了工作",{"2":{"1022":1}}],["除了要懂得",{"2":{"433":1}}],["除了读写文件",{"2":{"414":1}}],["除了偶尔的进度更新",{"2":{"124":1}}],["除了前面提到的这些显式组件",{"2":{"73":1}}],["除了增加服务器成本",{"2":{"54":1}}],["冒号后有一个空格",{"2":{"143":1}}],["浅拷贝",{"2":{"143":1}}],["连点成树",{"2":{"609":1}}],["连续型",{"2":{"706":1}}],["连续性",{"2":{"410":1}}],["连续两个换行",{"2":{"143":1}}],["连接与交流",{"0":{"1004":1}}],["连接管理",{"2":{"882":1,"883":1}}],["连接断开时浏览器自动重试但无法自定义重试逻辑",{"2":{"873":1}}],["连接断开后",{"2":{"127":1}}],["连接扩展",{"2":{"858":1}}],["连接任意提供商的任意模型",{"2":{"567":1}}],["连接被拒绝",{"2":{"449":1}}],["连接关系",{"0":{"383":1},"2":{"383":3,"1007":2}}],["连接关闭回调",{"2":{"150":1}}],["连接会保持打开状态一段较长时间",{"2":{"162":1}}],["连接成功时重置重试计数器",{"2":{"150":1}}],["连接状态追踪",{"0":{"148":1}}],["连接状态转换",{"2":{"114":1}}],["连接可能中断",{"2":{"146":1}}],["连接出错时的回调",{"2":{"144":1,"150":1}}],["连接出错",{"2":{"138":1}}],["连接出错或中断时触发",{"2":{"138":1}}],["连接错误",{"2":{"138":1}}],["连接已打开",{"2":{"138":1}}],["连接建立成功后的回调",{"2":{"144":1,"150":1}}],["连接建立成功",{"2":{"138":1,"144":1}}],["连接建立成功时触发",{"2":{"138":1}}],["连接建立后",{"2":{"115":1}}],["连接都有严格超时限制",{"2":{"125":1}}],["连接池枯竭与网关超时",{"0":{"125":1}}],["连接方向",{"2":{"122":1}}],["连接至机器",{"2":{"117":2}}],["连接维持一个持久的",{"2":{"117":1}}],["连接完成协议切换",{"2":{"114":1}}],["连接初始化阶段采用标准",{"2":{"114":1}}],["连接全程保持开放",{"2":{"113":1}}],["连接数水位线",{"2":{"112":1}}],["连接并不会立即关闭",{"2":{"105":1}}],["连接",{"0":{"877":1},"2":{"103":1,"125":1,"144":1,"150":2,"790":1,"849":1,"851":1,"858":1}}],["连接在逻辑上即告结束",{"2":{"103":1}}],["连接不断开",{"2":{"74":1}}],["产物体积变大",{"2":{"970":1}}],["产物体积爆炸",{"2":{"970":1}}],["产物体积始终保持极小",{"2":{"967":1}}],["产物体积极小",{"2":{"962":1}}],["产物",{"2":{"965":1}}],["产物通常能保持在",{"2":{"962":1}}],["产物文件",{"2":{"735":1,"751":1}}],["产物在",{"2":{"726":1}}],["产物是什么样子的",{"2":{"447":1}}],["产生本能的防御和抵触",{"2":{"618":1}}],["产生意外行为的风险",{"2":{"415":1}}],["产生的是一个同时支持两种参数类型的函数",{"2":{"238":1}}],["产生一个",{"2":{"238":1}}],["产生",{"2":{"179":1}}],["产出表述与写作训练阶段",{"2":{"1011":1}}],["产出新技能",{"2":{"983":1}}],["产出的代码具备了企业级的稳定性",{"2":{"971":1}}],["产出",{"2":{"941":2,"947":1}}],["产出更高质量的最终版本",{"2":{"426":1}}],["产出可维护的代码",{"2":{"177":1,"180":1}}],["产出后重置",{"2":{"143":1}}],["产出所有完整行",{"2":{"143":1}}],["产出每个字节块",{"2":{"143":1}}],["产品推动的思路是",{"2":{"1008":1}}],["产品思维与",{"2":{"1002":1}}],["产品型工程师",{"2":{"1001":1}}],["产品的",{"2":{"963":1}}],["产品的核心在模型与算法",{"2":{"963":1}}],["产品的诞生高度依赖科层制的分工",{"2":{"457":1}}],["产品构建交互式数据大屏",{"2":{"700":1}}],["产品与商业",{"0":{"599":1},"1":{"600":1,"601":1}}],["产品力作为工程力的方向盘",{"2":{"1001":1}}],["产品力是技术人员最容易忽视",{"2":{"556":1}}],["产品力",{"0":{"556":1},"2":{"1001":1}}],["产品力大会",{"2":{"457":1}}],["产品设计",{"2":{"553":1}}],["产品设计不仅是关乎前端的用户体验",{"2":{"391":1}}],["产品工程师",{"2":{"540":2}}],["产品应用层",{"0":{"540":1},"1":{"541":1,"542":1,"543":1},"2":{"552":1}}],["产品演示",{"2":{"515":1}}],["产品决策",{"2":{"462":1}}],["产品商业化与生态构建",{"0":{"399":1}}],["产品用户体验与留存",{"0":{"398":1}}],["产品定价策略",{"0":{"397":1}}],["产品定义与定位",{"0":{"396":1}}],["产品定位",{"2":{"366":1}}],["产品或个人的突破并不需要拼命猛踩油门",{"2":{"387":1}}],["产品或内部系统",{"2":{"342":1}}],["产品为王",{"2":{"387":2}}],["产品迭代还是商业设计",{"2":{"386":1}}],["产品化质感",{"2":{"473":1}}],["产品化",{"2":{"378":1}}],["产品敏锐度",{"2":{"376":1,"540":1}}],["产品让我欲罢不能",{"2":{"375":1}}],["产品验证报告",{"2":{"375":1}}],["产品容易变成",{"2":{"366":1}}],["产品容易沦为",{"2":{"366":1}}],["产品感",{"2":{"363":1}}],["产品经理定义需求",{"2":{"457":1}}],["产品经理觉得",{"2":{"366":1}}],["产品经理乃至独立开发者而言",{"2":{"363":1}}],["产品经理",{"2":{"361":1,"561":1}}],["产品交互重构",{"0":{"350":1}}],["产品上下文",{"2":{"280":2}}],["产品模块",{"2":{"275":1}}],["产品管理功能",{"2":{"274":1}}],["产品",{"0":{"541":1,"600":1},"2":{"80":1,"363":3,"365":1,"366":1,"367":1,"376":2,"377":1,"389":1,"457":1,"509":1,"540":1,"561":1,"562":1,"700":1,"963":1,"965":1,"1002":1}}],["产品信息",{"2":{"9":1}}],["转义",{"2":{"985":1}}],["转义后注入到",{"2":{"979":1}}],["转瞬即逝",{"2":{"614":1}}],["转发规则",{"2":{"553":1}}],["转移到了",{"2":{"492":1}}],["转移导出",{"0":{"312":1}}],["转而向人类求助",{"2":{"450":1}}],["转向",{"0":{"535":1},"2":{"403":1,"415":1,"438":1,"538":1}}],["转变为",{"2":{"367":1,"420":1,"967":1}}],["转化为产品创意",{"2":{"541":1}}],["转化为",{"2":{"454":1,"476":1,"532":1}}],["转化为物理世界或数字系统中的",{"2":{"412":1}}],["转化为严谨的",{"2":{"175":1}}],["转化或效率提升",{"2":{"365":1}}],["转型",{"2":{"308":1}}],["转换到",{"2":{"987":1}}],["转换工具",{"2":{"925":1}}],["转换等",{"2":{"906":1}}],["转换数据",{"2":{"342":1}}],["转换",{"2":{"282":1}}],["转换为浏览器安全代码",{"2":{"965":1}}],["转换为回调模式",{"2":{"899":1}}],["转换为具有逐帧插值能力的",{"2":{"743":1}}],["转换为图片",{"2":{"719":1}}],["转换为标准化的",{"2":{"654":1}}],["转换为前端领域模型",{"2":{"281":1}}],["转换为",{"2":{"202":1,"684":1,"719":1}}],["转换为字节块迭代器",{"2":{"143":1}}],["转为",{"2":{"203":1}}],["转译器",{"2":{"763":1}}],["转译配置",{"2":{"735":1}}],["转译",{"2":{"45":1}}],["转译源代码",{"2":{"45":1}}],["转译等构建步骤",{"2":{"21":1}}],["显示相关",{"2":{"763":1}}],["显示加载动画",{"2":{"719":1}}],["显示新的提示行",{"2":{"489":1}}],["显示时重连",{"2":{"142":1,"874":1}}],["显得心有余而力不足",{"2":{"342":1}}],["显著加快了复杂工作流的交付速度",{"2":{"415":1}}],["显著提升编译速度",{"2":{"203":1}}],["显著降低网络带宽占用与传输延迟",{"2":{"115":1}}],["显著降低了用户的首字感知延迟",{"2":{"106":1}}],["显式技能请求测试",{"2":{"980":1}}],["显式指派",{"2":{"592":1}}],["显式指定类型参数",{"2":{"258":1}}],["显式将",{"2":{"481":1}}],["显式声明依赖",{"2":{"305":1}}],["显式优于隐式",{"2":{"180":1}}],["显式通信",{"2":{"170":1}}],["匹配触发条件",{"2":{"994":1}}],["匹配级别",{"2":{"858":1}}],["匹配条件回调函数",{"2":{"259":1}}],["匹配的变成",{"2":{"244":1}}],["匹配",{"2":{"141":1,"322":1}}],["携带请求体",{"2":{"154":1}}],["携带",{"2":{"141":1}}],["流控制等核心编排逻辑",{"2":{"906":1}}],["流处理",{"2":{"906":1}}],["流转时序图",{"2":{"658":1,"659":1,"688":1,"689":1,"690":1,"717":1,"746":1,"747":1,"774":1,"775":1,"801":1,"802":1,"803":1,"830":1,"831":1,"832":1,"862":1,"863":1,"922":1,"923":1,"949":1,"991":1,"992":1}}],["流",{"2":{"647":2,"655":1}}],["流水线产物通过三种方式消费",{"2":{"634":1}}],["流水线",{"2":{"550":1}}],["流水线搭建与运维",{"2":{"542":1}}],["流量决定存量的增减",{"2":{"384":1}}],["流量",{"2":{"383":1,"384":1}}],["流程等比较热门的词语",{"2":{"1011":1}}],["流程图",{"2":{"994":1}}],["流程测试",{"2":{"980":1}}],["流程复杂",{"2":{"587":1}}],["流程梳理",{"2":{"515":1}}],["流程文档与表格自动化",{"2":{"515":1}}],["流程编排者",{"2":{"403":1}}],["流程",{"2":{"377":1,"378":1,"568":1,"991":1}}],["流程高度集成",{"2":{"345":1}}],["流程的基石",{"2":{"309":1}}],["流中包含两类消息",{"2":{"147":1}}],["流结束事件",{"2":{"150":1}}],["流结束",{"2":{"141":1,"147":1}}],["流式中间状态",{"2":{"947":1}}],["流式返回",{"2":{"915":1,"923":1}}],["流式文本生成",{"2":{"909":1,"926":1}}],["流式协议缺少业界统一方案",{"2":{"901":1}}],["流式处理",{"2":{"881":1}}],["流式解析器",{"0":{"947":1},"2":{"939":1}}],["流式解析器实现",{"2":{"939":2}}],["流式解析产出事件类型",{"2":{"939":1}}],["流式解析引擎支持逐组件产出",{"2":{"935":1}}],["流式解析",{"0":{"488":1}}],["流式传输来实现",{"2":{"135":1}}],["流式持续输出",{"2":{"124":1}}],["流式输出时",{"2":{"947":1}}],["流式输出与",{"2":{"523":1}}],["流式输出",{"0":{"124":1},"2":{"521":1}}],["流式响应的服务端",{"0":{"151":1},"1":{"152":1,"153":1,"154":1}}],["流式响应",{"2":{"80":1,"131":1,"155":1,"901":1}}],["流式注入",{"2":{"74":1}}],["流式渲染",{"2":{"543":1}}],["流式渲染的组件边界划分失衡",{"2":{"47":1}}],["流式渲染为手段",{"2":{"43":1}}],["流式",{"0":{"104":1},"1":{"105":1,"106":1,"107":1},"2":{"45":1,"102":1,"105":1,"108":1,"113":1,"123":1,"124":1,"130":1,"132":1,"133":1,"134":3,"135":1,"913":1,"918":1,"939":1,"947":1}}],["流式动态组件",{"2":{"41":1}}],["流式分块返回",{"2":{"40":1}}],["既然已经知晓自身问题且暂时止损了",{"2":{"1023":1}}],["既然是",{"2":{"492":1}}],["既锻炼下自己的写作能力",{"2":{"1019":1}}],["既要",{"2":{"965":1}}],["既当运动员又当裁判",{"2":{"592":1}}],["既得不到学校的认可",{"2":{"492":1}}],["既不是新增功能",{"2":{"451":1}}],["既定状态",{"2":{"394":1}}],["既保留了流式传输的实时性",{"2":{"140":1}}],["既能保证类型安全",{"2":{"249":1}}],["既能处理",{"2":{"238":1}}],["既能提升基线质量",{"2":{"171":1}}],["既能像调用普通接口一样携带请求体",{"2":{"155":1}}],["既能像调用普通接口一样编写业务逻辑",{"2":{"135":1}}],["既能突破",{"2":{"131":1}}],["探索项目上下文",{"2":{"987":1}}],["探索出了一条更灵活的路径",{"2":{"140":1}}],["探针诊断",{"2":{"790":1}}],["探针诊断逻辑",{"2":{"790":1}}],["探针诊断页",{"2":{"790":1}}],["探针生成",{"2":{"763":1}}],["探讨三个核心命题",{"2":{"525":1}}],["探讨它们在现代分布式架构中的选型策略与工程实践",{"2":{"102":1}}],["进度",{"2":{"834":1}}],["进度更新事件",{"2":{"150":1}}],["进度更新回调",{"2":{"150":1}}],["进度更新",{"2":{"138":1,"147":1,"875":1}}],["进一步强化把握最终目标",{"2":{"1047":1}}],["进一步采用",{"2":{"1025":1}}],["进一步闭环质量管理流程",{"2":{"476":1}}],["进一步将其推向了工业级高度",{"2":{"317":1}}],["进攻",{"2":{"426":1}}],["进化到了",{"2":{"553":1}}],["进化到规范驱动",{"0":{"532":1}}],["进化为真正的",{"2":{"558":1}}],["进化为能够自主洞察环境变化",{"2":{"477":1}}],["进化为",{"2":{"410":1,"534":1}}],["进化成为了一个真正的",{"2":{"337":1}}],["进阶之路",{"0":{"558":1}}],["进阶路径",{"0":{"464":1}}],["进阶的关键",{"2":{"414":1}}],["进阶",{"0":{"485":1},"1":{"486":1},"2":{"370":1,"459":1}}],["进而代码质量更高",{"2":{"386":1}}],["进而理解约束",{"2":{"271":1}}],["进而彻底崩溃",{"2":{"158":1}}],["进入人工智能时代后",{"2":{"1038":1}}],["进入周末日常清单的任务必须包含子任务和关键步骤",{"2":{"1037":1}}],["进入日常清单的任务必须有子任务或关键步骤",{"2":{"1037":1}}],["进入系统",{"2":{"792":1}}],["进入能做产品阶段",{"2":{"459":1}}],["进入下一环",{"2":{"429":1}}],["进入重规划环节",{"2":{"429":1}}],["进入静态版本构建阶段",{"2":{"171":1}}],["进入",{"2":{"169":1}}],["进行穿透定位",{"2":{"968":1}}],["进行渲染",{"2":{"826":1}}],["进行一次彻底的认知重构",{"2":{"605":1}}],["进行人工微调与对齐",{"2":{"550":1}}],["进行",{"2":{"546":1,"1047":1,"1048":1}}],["进行前端视图层",{"2":{"542":1}}],["进行自动化的对抗性测试与漏洞挖掘",{"2":{"535":1}}],["进行了两个方面的实践",{"2":{"1026":1}}],["进行了结构化输出",{"2":{"508":1}}],["进行了高度工程化封装",{"2":{"478":1}}],["进行交互",{"2":{"482":1}}],["进行合并",{"2":{"451":1}}],["进行敏捷的意图调度时",{"2":{"440":1}}],["进行即时的数据分析或内容解读",{"2":{"435":1}}],["进行内部行动",{"2":{"412":1}}],["进行多轮搜索验证",{"2":{"355":1}}],["进行复杂决策的知识工作者而言",{"2":{"348":1}}],["进行聚合与编排",{"2":{"342":1}}],["进行全局鉴权拦截",{"2":{"342":1}}],["进行测试",{"2":{"331":1}}],["进行模块的导入导出",{"2":{"298":1}}],["进行跨包路径别名配置",{"2":{"216":1}}],["进行性能优化",{"2":{"173":1}}],["进行结构划分与设计",{"2":{"170":1}}],["进行中",{"2":{"101":1}}],["进行失效处理",{"2":{"92":1}}],["进行比对",{"2":{"58":1}}],["规格合规",{"2":{"988":1}}],["规格合规审查子agent提示词",{"2":{"980":1}}],["规格自我审查",{"2":{"987":1}}],["规格",{"2":{"983":1}}],["规格文档自我审查提示词",{"2":{"980":1}}],["规格+质量",{"2":{"975":1}}],["规格驱动开发",{"2":{"179":1,"525":1}}],["规避",{"2":{"493":1}}],["规避后期可能出现的视觉返工",{"2":{"171":1}}],["规整工作台",{"2":{"437":1}}],["规划并执行复杂工程任务的",{"2":{"569":1}}],["规划产品功能",{"2":{"542":1}}],["规划决策和工具调用",{"2":{"478":1}}],["规划时机",{"2":{"432":1}}],["规划器首先介入",{"2":{"429":1}}],["规划器",{"2":{"429":1}}],["规划与执行分离",{"2":{"428":1}}],["规划与记忆",{"2":{"402":1}}],["规划模块赋予了",{"2":{"433":1}}],["规划模块的两大支柱",{"2":{"433":1}}],["规划模块中",{"2":{"426":1}}],["规划模块正是它的",{"2":{"421":1}}],["规划是",{"0":{"433":1},"2":{"412":1}}],["规划",{"0":{"409":1},"2":{"408":1,"422":1,"478":1,"542":1}}],["规划阶段",{"2":{"177":2}}],["规模效应与锚定效应",{"2":{"392":1}}],["规模量控制",{"2":{"329":1}}],["规律",{"2":{"242":1}}],["规范文档副本",{"2":{"939":1}}],["规范验证工具",{"2":{"939":1}}],["规范验证与处理脚本",{"2":{"939":1}}],["规范层",{"2":{"938":1}}],["规范定义层",{"2":{"938":1}}],["规范驱动",{"2":{"494":1}}],["规范驱动开发",{"0":{"176":1},"1":{"177":1,"178":1,"179":1},"2":{"176":1,"180":1,"1000":1}}],["规范说明",{"2":{"330":1}}],["规范对比与现代迁移指南",{"0":{"308":1}}],["规范",{"0":{"304":1,"305":1,"306":1,"494":1},"2":{"308":1,"342":1,"441":1,"442":1,"573":1,"916":1}}],["规范先行",{"2":{"177":1}}],["规范成为",{"2":{"177":1}}],["规范的声明文件以及现代的编译配置",{"2":{"326":1}}],["规范的质量直接决定了代码的质量",{"2":{"177":1}}],["规范的静态组件骨架",{"2":{"171":1}}],["规范是一份可执行的契约",{"2":{"177":1}}],["规范化后的文本",{"2":{"805":1}}],["规范化",{"2":{"150":1}}],["规范化的单向推送协议",{"0":{"108":1},"1":{"109":1,"110":1,"111":1,"112":1}}],["规则很简单",{"2":{"1016":1}}],["规则要具体",{"2":{"578":1}}],["规则文件的组织建议",{"0":{"578":1}}],["规则文件支持",{"2":{"576":1}}],["规则可能因技术演进而频繁变化",{"2":{"577":1}}],["规则需要团队协作维护",{"2":{"577":1}}],["规则与特定目录强相关",{"2":{"577":1}}],["规则",{"2":{"135":1,"250":1,"442":1,"790":2,"976":1,"986":1}}],["遵循设计→计划→实现→测试→审查流程",{"2":{"975":1}}],["遵循原子设计",{"2":{"274":1}}],["遵循",{"0":{"195":1},"1":{"196":1,"197":1},"2":{"177":1,"442":1}}],["遵循标准的",{"2":{"135":1}}],["遵循着严谨的单向驱动逻辑",{"2":{"103":1}}],["跨地域的阻碍因素在降低",{"2":{"1041":1}}],["跨地域地高效协作更容易被接受了",{"2":{"1041":1}}],["跨地域地沟通协作已经成为了常态",{"2":{"1041":1}}],["跨城市",{"2":{"1041":3}}],["跨",{"2":{"901":1,"939":1}}],["跨文本共享",{"2":{"796":1}}],["跨项空白折叠",{"2":{"789":1,"790":1,"799":2}}],["跨项目通用操作",{"2":{"580":1}}],["跨项目类型引用",{"2":{"210":1}}],["跨后端抽象层",{"2":{"763":1}}],["跨后端代码生成",{"2":{"762":1}}],["跨后端复用",{"2":{"759":1}}],["跨浏览器",{"2":{"757":1}}],["跨系列",{"2":{"712":1}}],["跨系统联动",{"2":{"455":1}}],["跨系统回调",{"2":{"131":1}}],["跨系统事件同步",{"2":{"122":1,"130":1}}],["跨系统的松耦合集成",{"0":{"120":1}}],["跨界联想",{"2":{"628":1}}],["跨生态与端侧集成",{"2":{"548":1}}],["跨领域能力的",{"0":{"529":1}}],["跨模态内容理解",{"2":{"511":1}}],["跨模态深度推理",{"2":{"418":1}}],["跨应用编排",{"2":{"414":1}}],["跨任务及外部知识积累",{"2":{"410":1}}],["跨越",{"2":{"400":1}}],["跨部门沟通成本剧增",{"2":{"387":1}}],["跨端框架技术",{"2":{"346":1}}],["跨平台工具名称映射",{"2":{"980":1}}],["跨平台工具映射指引",{"2":{"979":1}}],["跨平台兼容",{"2":{"976":1}}],["跨平台适配",{"2":{"975":1,"986":1}}],["跨平台软件开发方法论插件",{"2":{"973":1}}],["跨平台移动开发团队",{"2":{"729":1}}],["跨平台动画一致性",{"2":{"728":1}}],["跨平台一致性",{"2":{"699":1}}],["跨平台整合",{"2":{"465":1}}],["跨平台",{"2":{"308":1,"670":1,"672":1,"933":1,"936":1,"973":1,"980":1}}],["跨环境兼容方案",{"0":{"306":1}}],["跨子应用的调试和问题定位更加复杂",{"2":{"292":1}}],["跨域",{"2":{"135":1}}],["方括号",{"2":{"573":1}}],["方盒子就是帕累托改进",{"2":{"391":1}}],["方盒与圆瓶背后的成本战术",{"0":{"391":1}}],["方形容器能最大化冰柜的空间利用率",{"2":{"391":1}}],["方向类型",{"2":{"750":1}}],["方向的演进",{"2":{"592":1}}],["方向",{"2":{"366":1,"738":1,"827":1}}],["方式高性能原生播放",{"2":{"728":1}}],["方式导出",{"2":{"306":1}}],["方式注册",{"2":{"306":1}}],["方案分类",{"2":{"965":1}}],["方案在服务端渲染时可能面临样式闪烁",{"2":{"959":1}}],["方案对比与权衡",{"2":{"904":1}}],["方案",{"2":{"287":1,"702":1,"785":1,"1027":1}}],["方便异步逐块读取",{"2":{"143":1}}],["方便后续扩展动态功能",{"2":{"11":1}}],["方法添加子动画",{"2":{"831":1}}],["方法判断当前帧是否需要更新",{"2":{"824":1}}],["方法支持",{"2":{"814":1}}],["方法计算当前帧的值",{"2":{"743":1}}],["方法创建对应类型的合成元素",{"2":{"741":1}}],["方法动态为类添加属性的",{"2":{"685":1}}],["方法是所有动作的中央处理枢纽",{"2":{"654":1}}],["方法的",{"2":{"331":1}}],["方法名",{"2":{"330":2}}],["方法论提炼与职业修养",{"0":{"400":1}}],["方法论",{"2":{"274":1}}],["方法和自定义",{"2":{"141":2}}],["方法",{"2":{"135":2,"141":3,"142":1,"144":1,"150":1,"186":1,"188":1,"331":3,"737":1,"824":1,"825":1,"873":1,"987":1,"1008":1}}],["突出美人遗世独立之态",{"2":{"507":1}}],["突出美人超脱外表的灵韵",{"2":{"505":1}}],["突出洛神轻盈飘逸之态",{"2":{"505":1}}],["突然下降了",{"2":{"382":1}}],["突破信息壁垒",{"0":{"622":1}}],["突破",{"2":{"135":1}}],["突变处理",{"2":{"91":1}}],["便无所适从",{"2":{"608":1}}],["便是其配套的命令行工具",{"2":{"441":1}}],["便成了这个行业最后的稀缺品",{"2":{"539":1}}],["便成了新的护城河",{"2":{"376":1}}],["便成为了互联网运行的",{"2":{"103":1}}],["便于",{"2":{"577":1,"919":1}}],["便于前端做分支处理",{"2":{"576":1}}],["便于全局搜索成员的定义和引用",{"2":{"311":1}}],["便于构建工具进行优化",{"2":{"207":1}}],["便于客户端解析处理",{"2":{"134":1}}],["便捷性",{"2":{"175":1}}],["社群的方式加以体现",{"2":{"1041":1}}],["社会及自然环境适应良好",{"2":{"1025":1}}],["社会",{"2":{"1006":1}}],["社会太不公平",{"2":{"612":1}}],["社会性",{"2":{"402":1}}],["社媒内容分析",{"2":{"511":1}}],["社交",{"2":{"729":1}}],["社交网络",{"2":{"398":1}}],["社交账号",{"2":{"184":1}}],["社交提醒",{"2":{"111":1}}],["社区相关的技术分享与交流活动",{"2":{"1000":1}}],["社区行为准则",{"2":{"980":1}}],["社区与",{"2":{"980":1}}],["社区多年来不断探索",{"2":{"957":1}}],["社区可独立开发",{"2":{"904":1}}],["社区最大",{"2":{"642":1}}],["社区最流行的",{"2":{"142":1}}],["社区资源最丰富",{"2":{"565":1}}],["社区",{"2":{"377":1,"523":1}}],["社区先行",{"0":{"377":1}}],["社区生态",{"2":{"341":1}}],["社区出品",{"2":{"341":2}}],["社区基于",{"2":{"140":1}}],["社区盛行的底层逻辑",{"2":{"131":1,"135":1}}],["又不得不逼着自己想方设法找到解决办法",{"2":{"1034":1}}],["又称戴明环",{"2":{"1027":1}}],["又要",{"2":{"965":1}}],["又传了",{"2":{"964":1}}],["又增加了时间维度的复杂性",{"2":{"388":1}}],["又从",{"2":{"337":1}}],["又反向导入",{"2":{"315":1}}],["又能进行深度思考与逻辑组织",{"2":{"502":1}}],["又能提升商业变现或用户粘性的路径",{"2":{"394":1}}],["又能保持代码整洁",{"2":{"249":1}}],["又能处理",{"2":{"238":1}}],["又能确保代码质量",{"2":{"177":1}}],["又能享受流式传输的实时性",{"2":{"135":1,"155":1}}],["又拥有",{"2":{"140":1}}],["又避免了",{"2":{"131":1}}],["又足够完整地呈现了",{"2":{"48":1}}],["受限于浏览器",{"2":{"873":1}}],["受限于浏览器实现",{"2":{"131":1}}],["受服务器性能",{"2":{"3":1}}],["事先知道了这本书在学科谱系中的位置",{"2":{"609":1}}],["事务之上",{"2":{"602":1}}],["事务",{"2":{"553":1}}],["事务或流程环节时触发",{"2":{"447":1}}],["事实核查命令",{"2":{"470":1}}],["事实上",{"2":{"364":1,"434":1}}],["事实标准",{"2":{"131":1}}],["事件定义",{"2":{"985":1}}],["事件对象",{"2":{"947":1}}],["事件对象构建",{"2":{"677":1}}],["事件形式产出",{"2":{"947":1}}],["事件转换器",{"2":{"939":1}}],["事件数据",{"2":{"892":1,"898":1}}],["事件数据内容",{"2":{"153":1}}],["事件流解析模块",{"0":{"892":1}}],["事件流解析器",{"2":{"882":1,"889":1}}],["事件流可能因网络波动触发多次",{"2":{"148":1}}],["事件名称",{"2":{"750":1}}],["事件辅助",{"2":{"706":1}}],["事件代理和分发",{"2":{"706":1}}],["事件钩子",{"2":{"706":1}}],["事件回调执行的完整链路",{"2":{"688":1}}],["事件回调集合",{"2":{"150":1}}],["事件管道",{"2":{"684":1}}],["事件系统基类",{"2":{"735":1,"763":1}}],["事件系统",{"2":{"677":1,"682":2,"704":1,"706":1}}],["事件与交互层",{"2":{"675":1,"676":1}}],["事件携带数据和上下文在组件树中传递",{"2":{"654":1}}],["事件从下往上冒泡",{"2":{"653":1}}],["事件等",{"2":{"650":1}}],["事件行为定义",{"2":{"647":1}}],["事件分发",{"2":{"676":1,"679":1,"706":1,"762":1}}],["事件分发函数",{"2":{"661":1}}],["事件分布",{"2":{"632":1}}],["事件分类处理",{"0":{"147":1},"2":{"150":1}}],["事件机制可以作为循环依赖的解决方法",{"2":{"315":1}}],["事件一致性等技术问题",{"2":{"283":1}}],["事件通知",{"2":{"166":1}}],["事件消息格式",{"2":{"153":1}}],["事件处理器",{"2":{"281":1,"706":1}}],["事件处理",{"2":{"150":1,"650":1}}],["事件之间以空行",{"2":{"143":1}}],["事件之间以空行分隔",{"2":{"136":1,"152":1}}],["事件唯一标识",{"2":{"139":1,"153":1}}],["事件驱动返回",{"2":{"163":1}}],["事件驱动",{"2":{"130":1}}],["事件驱动的反向回调",{"0":{"118":1},"1":{"119":1,"120":1,"121":1,"122":1}}],["事件触发时执行的操作列表",{"2":{"994":1}}],["事件触发时",{"2":{"982":1}}],["事件触发到",{"2":{"688":1}}],["事件触发",{"2":{"119":1,"677":1}}],["事件注册",{"2":{"119":1}}],["事件类型",{"2":{"109":1,"139":1,"153":2,"892":1}}],["事件",{"2":{"96":1,"109":1,"153":1,"175":2,"679":1,"684":1,"817":1,"892":1,"941":1,"982":1}}],["监督微调",{"2":{"551":1}}],["监督力",{"2":{"531":1}}],["监督悖论",{"0":{"531":1},"2":{"525":1,"530":1}}],["监护",{"2":{"407":1}}],["监控链路执行过程",{"2":{"549":1}}],["监控",{"2":{"538":1,"549":1}}],["监控子应用的加载性能",{"2":{"291":1}}],["监控预警",{"2":{"131":1}}],["监听器",{"2":{"951":1}}],["监听输入",{"2":{"891":1}}],["监听文件变化",{"2":{"723":1}}],["监听所有原生",{"2":{"684":1}}],["监听请求关闭事件",{"2":{"154":1}}],["监听",{"2":{"139":1,"153":1,"840":1,"860":1}}],["监听指定类型的消息",{"2":{"138":1}}],["监听用户登录状态",{"2":{"16":1}}],["耗时长且需排队",{"2":{"130":1}}],["耗时极短",{"2":{"130":1}}],["耗时约",{"2":{"126":1}}],["握手与头部延迟",{"2":{"130":1}}],["握手完成协议升级后",{"2":{"113":1}}],["决定在第二阶段对清单进行改善",{"2":{"1037":1}}],["决定是否重试",{"2":{"891":1}}],["决定是否需要中转或国内聚合平台",{"2":{"519":1}}],["决定容差",{"2":{"797":1}}],["决定我们长期健康状态的",{"2":{"605":1}}],["决定做什么",{"2":{"540":1}}],["决定让",{"2":{"367":1}}],["决定解决哪些问题",{"2":{"358":1}}],["决定了你在这个时代的价值上限",{"2":{"530":1}}],["决定了你的应用以怎样的方式呈现给用户",{"2":{"59":1}}],["决定了你能",{"2":{"59":1}}],["决策点",{"2":{"673":1}}],["决策缺乏即时依据",{"2":{"465":1}}],["决策在跨部门协同中迟滞",{"2":{"457":1}}],["决策和社交表现",{"2":{"421":1}}],["决策依据与变通方案",{"2":{"130":1}}],["决策矩阵",{"0":{"130":1}}],["老朋友互相请教过",{"2":{"1043":1}}],["老师",{"2":{"610":1}}],["老师或导读无法代替你读书",{"2":{"609":1}}],["老",{"2":{"129":1}}],["虽不醉心于修真",{"2":{"1042":1}}],["虽不至于让系统立刻崩溃",{"2":{"527":1}}],["虽",{"2":{"129":1}}],["虽强",{"2":{"129":1}}],["虽然会呈现少部分波动",{"2":{"1047":1}}],["虽然笔者与萧鼎老师相差甚远",{"2":{"1042":1}}],["虽然雇佣关系在一定时期内仍然是主导",{"2":{"1041":1}}],["虽然互联网行业一直有弹性工作制",{"2":{"1039":1}}],["虽然体重变化存在小范围波动",{"2":{"1036":1}}],["虽然不少人觉得大模型会成为新的泡沫",{"2":{"1018":1}}],["虽然不是",{"2":{"78":1}}],["虽然在体重和效率两个方面有一定的正向效果",{"2":{"1005":1}}],["虽然在逻辑推理与工具调用方面取得了长足进步",{"2":{"419":1}}],["虽然可以通过组件化提取来缓解",{"2":{"962":1}}],["虽然可通过",{"2":{"19":1}}],["虽然对系统长期健康很重要",{"2":{"528":1}}],["虽然当前",{"2":{"496":1}}],["虽然拥有博杂的知识",{"2":{"441":1}}],["虽然博学",{"2":{"408":1}}],["虽然它增加了代码体积且逻辑复杂",{"2":{"306":1}}],["虽然有自己的类型检查机制",{"2":{"219":1}}],["虽然你可以直接在终端运行",{"2":{"202":1}}],["虽然",{"2":{"121":1,"315":1,"335":1,"971":1}}],["虽然流式传输在逻辑上很美好",{"2":{"107":1}}],["试着把日子过得顺畅",{"2":{"1040":1}}],["试着拿起两个看似相关的指标",{"2":{"385":1}}],["试想",{"2":{"590":1}}],["试想这样一个场景",{"2":{"127":1}}],["试图通过扩大信息摄入量来超越别人",{"2":{"621":1}}],["试图把自己打磨成一把无所不能的瑞士军刀",{"2":{"553":1}}],["试图解决",{"2":{"43":1}}],["绝对的组件封装",{"2":{"964":1}}],["绝对起始时间",{"2":{"834":1}}],["绝对",{"2":{"831":1}}],["绝对鲁棒性",{"0":{"127":1}}],["绝非新奇技术组件的无序堆砌",{"2":{"440":1}}],["绝大多数人虽然能轻松看清这些要素",{"2":{"383":1}}],["绝不向客户端暴露内部错误详情",{"2":{"576":1}}],["绝不是格局的局限",{"2":{"381":1}}],["绝不会触发后台",{"2":{"92":1}}],["消耗与步骤延迟",{"2":{"549":1}}],["消耗",{"2":{"523":1,"550":1}}],["消耗计费",{"2":{"523":1}}],["消耗成本",{"2":{"443":1}}],["消耗和认知过载",{"2":{"441":1}}],["消灭在摇篮里",{"2":{"255":1}}],["消费端验证",{"2":{"790":1}}],["消费方通过辨识字段自动收窄",{"2":{"246":1}}],["消费者模型中",{"2":{"126":1}}],["消除",{"2":{"169":1}}],["消息到对应的状态模型",{"2":{"951":1}}],["消息到客户端",{"2":{"938":1}}],["消息联合类型",{"2":{"951":1}}],["消息分发中枢",{"2":{"944":1}}],["消息数组",{"2":{"944":1}}],["消息接收",{"2":{"939":1}}],["消息处理核心",{"2":{"944":1}}],["消息处理引擎",{"2":{"939":1}}],["消息处理器核心接口",{"2":{"951":1}}],["消息处理器",{"0":{"944":1},"2":{"938":1}}],["消息转换器",{"2":{"939":1}}],["消息验证与分发中枢",{"2":{"939":1}}],["消息验证与分发",{"2":{"938":1}}],["消息流",{"2":{"941":1}}],["消息流架构",{"2":{"917":1}}],["消息流与框架集成",{"0":{"917":1}}],["消息格式遵循",{"2":{"917":1}}],["消息的转换",{"2":{"883":1}}],["消息文本",{"2":{"663":1}}],["消息通知方法",{"2":{"662":1}}],["消息通知",{"2":{"649":1}}],["消息",{"2":{"147":1,"150":1,"790":1,"938":2,"951":1}}],["消息时的回调",{"2":{"144":1,"150":1}}],["消息由",{"2":{"143":1}}],["消息回调",{"2":{"141":1}}],["消息推送集成",{"2":{"120":1}}],["消息对齐",{"2":{"117":1}}],["消息队列",{"2":{"117":1,"166":1,"167":1,"542":1}}],["消息边界",{"2":{"109":1}}],["队列中",{"2":{"126":1}}],["查看所有命令",{"2":{"869":1}}],["查看覆盖率",{"2":{"667":1}}],["查看",{"2":{"581":1,"631":1}}],["查看sql是否正确",{"2":{"199":1}}],["查找行尾",{"2":{"892":1}}],["查找表纹理生成",{"2":{"763":1}}],["查找对应的",{"2":{"741":1}}],["查找对应的渲染器组件",{"2":{"649":1}}],["查找文件",{"2":{"484":1}}],["查找",{"2":{"411":1,"652":1,"672":1,"677":1,"680":1,"706":1,"734":1}}],["查找数据",{"2":{"261":1}}],["查询处理",{"2":{"706":1}}],["查询处理器",{"2":{"282":1}}],["查询性能问题",{"2":{"342":1}}],["查询数据的",{"2":{"415":1}}],["查询数据",{"2":{"328":1}}],["查询",{"2":{"274":1}}],["查询select",{"2":{"199":1}}],["查询任务状态",{"2":{"126":1}}],["查询完毕立即释放连接",{"2":{"125":1}}],["查数据库",{"2":{"70":1}}],["至少包含",{"2":{"586":1}}],["至关重要",{"2":{"314":1,"548":1}}],["至",{"2":{"125":1,"1045":1,"1046":1}}],["至此",{"2":{"114":1,"303":1,"433":1,"494":1,"1038":1}}],["约束团队规范",{"2":{"965":1}}],["约束能够有效防止大模型在长文本生成中",{"2":{"509":1}}],["约束条件和少样本",{"2":{"367":1}}],["约束条件等",{"2":{"177":1}}],["约束与边界工程",{"2":{"367":1}}],["约束对象必须有",{"2":{"270":1}}],["约束类型",{"2":{"270":1}}],["约束示例",{"2":{"268":1}}],["约束结合了",{"2":{"268":1}}],["约束",{"0":{"268":1},"2":{"265":1,"266":1,"267":1,"268":1,"270":1}}],["约束越多",{"2":{"263":1}}],["约",{"2":{"124":1,"169":1,"728":1,"967":1}}],["约定",{"2":{"575":1}}],["约定优于配置",{"2":{"85":1}}],["约定大于配置",{"0":{"64":1},"1":{"65":1,"66":1,"67":1}}],["任意区域选择联动",{"2":{"706":1}}],["任意静态服务器",{"2":{"53":1}}],["任何人的经历都代表不了实力",{"2":{"1020":1}}],["任何人都会有认知盲点",{"2":{"1014":1}}],["任何时候",{"2":{"1020":1}}],["任何一个连续的周期信号",{"2":{"1015":1}}],["任何一个环节为零",{"2":{"458":1}}],["任何技术栈或商业模式",{"2":{"618":1}}],["任何已由",{"2":{"572":1}}],["任何改变都不可能使一人变好而又不使另一人变坏",{"2":{"394":1}}],["任何微小的改动都可能引发意想不到的连锁反应",{"2":{"327":1}}],["任何类型错误都要到运行时才能发现",{"2":{"255":1}}],["任何集合",{"2":{"244":2}}],["任务描述",{"2":{"994":1}}],["任务序号",{"2":{"994":1}}],["任务间代码审查请求",{"2":{"980":1}}],["任务间审查",{"2":{"979":1}}],["任务编排",{"2":{"908":1}}],["任务生成图案填充以备无障碍访问",{"2":{"715":1}}],["任务计算图例和数据的符号样式",{"2":{"715":1}}],["任务支持渐进式渲染",{"2":{"712":1}}],["任务链",{"2":{"712":1}}],["任务的",{"2":{"706":1}}],["任务的构成比例",{"2":{"526":1}}],["任务调度器",{"2":{"706":1}}],["任务拆解与路由",{"2":{"545":1}}],["任务拆解与路径规划",{"2":{"414":1}}],["任务优先级的重新洗牌",{"0":{"528":1}}],["任务重构",{"2":{"525":1}}],["任务类型",{"2":{"519":1}}],["任务深度联动",{"2":{"515":1}}],["任务和项目深度联动",{"2":{"515":1}}],["任务只能一件接一件地做",{"2":{"415":1}}],["任务历史等",{"2":{"408":1}}],["任务分解是指将一个复杂的目标或任务拆解为多个具体",{"2":{"422":1}}],["任务分解是将复杂目标拆解为易执行的子任务",{"2":{"409":1}}],["任务分解与自我反思",{"2":{"421":1,"433":1}}],["任务分解",{"0":{"422":1},"1":{"423":1,"424":1,"425":1},"2":{"408":1,"470":1,"471":1}}],["任务执行",{"2":{"567":1}}],["任务执行者",{"2":{"403":1}}],["任务执行期间",{"2":{"124":1}}],["任务初期使用长轮询追求实时性",{"2":{"168":1}}],["任务仍在处理",{"2":{"164":1}}],["任务处理中",{"2":{"160":1}}],["任务处理往往需要数十秒甚至数分钟",{"2":{"156":1}}],["任务进度推送",{"2":{"155":1}}],["任务完成时间方差较大",{"2":{"167":1}}],["任务完成时间是否通常在",{"2":{"166":1}}],["任务完成后可立即推送",{"2":{"166":1}}],["任务完成",{"2":{"160":1,"164":1}}],["任务完成事件",{"2":{"150":1}}],["任务完成回调",{"2":{"150":1}}],["任务",{"2":{"150":1,"160":1,"164":1,"715":1,"719":1,"918":2,"983":2}}],["任务流订阅客户端",{"0":{"150":1},"2":{"150":1}}],["任务耗时较长",{"2":{"167":1}}],["任务耗时特征",{"2":{"130":1}}],["任务耗时过长时",{"2":{"125":1}}],["任务特性的本质差异",{"0":{"124":1}}],["甚至需要花费两个月",{"2":{"1048":1}}],["甚至一周基本保持不变的情况",{"2":{"1046":1}}],["甚至把居家办公的经验适当地用在办公室工作中",{"2":{"1040":1}}],["甚至阴差阳错地给自己安排了更多的独处时间",{"2":{"1019":1}}],["甚至用",{"2":{"1002":1}}],["甚至支持外部传入",{"2":{"964":1}}],["甚至可以把需求方连成网络",{"2":{"1041":1}}],["甚至可以完全不需要了解前端技术",{"2":{"639":1}}],["甚至可以使用不同的技术栈",{"2":{"284":1}}],["甚至因此拒绝更高效的媒介",{"2":{"613":1}}],["甚至觉得",{"2":{"612":1}}],["甚至以把我",{"2":{"610":1}}],["甚至聊几个小时天的总和",{"2":{"606":1}}],["甚至提交",{"2":{"567":1}}],["甚至自动完成单元测试时",{"2":{"553":1}}],["甚至还补充了超市打折算百分比的生活趣味案例",{"2":{"495":1}}],["甚至让人眼前一亮",{"2":{"475":1}}],["甚至通过公开写作和分享去教授他人时",{"2":{"377":1}}],["甚至深入内核级别编写代码",{"2":{"353":1}}],["甚至第三方开发者",{"2":{"342":1}}],["甚至是智慧世界来抽象分析",{"2":{"1007":1}}],["甚至是",{"2":{"525":1}}],["甚至是自定义的对象类型",{"2":{"255":1}}],["甚至是后续的变量声明中",{"2":{"254":1}}],["甚至在高峰期需要排队数分钟",{"2":{"124":1}}],["甚至部分长视频生成应用中",{"2":{"123":1}}],["甚至同一页面的不同区域",{"2":{"63":1}}],["商业仪表盘",{"2":{"700":1}}],["商业模式及人际关系等海量的非书本知识",{"2":{"614":1}}],["商业的成功",{"2":{"601":1}}],["商业化",{"0":{"601":1}}],["商业化路径优化",{"2":{"399":1}}],["商业洞察",{"2":{"540":1}}],["商业",{"2":{"377":1,"614":1}}],["商业可行性",{"2":{"363":1}}],["商业逻辑",{"0":{"354":1}}],["商业逻辑与未来演进四个维度",{"2":{"348":1}}],["商业平台",{"2":{"123":1,"156":1}}],["商品子应用读取用户信息",{"2":{"289":1}}],["商品子应用发布事件",{"2":{"289":1}}],["商品子应用暴露商品列表和商品详情组件",{"2":{"288":1}}],["商品子应用配置",{"2":{"288":1}}],["商品子应用",{"2":{"288":2,"290":1}}],["商品",{"2":{"278":1,"291":1}}],["商品页",{"2":{"80":1}}],["商品页面预渲染",{"2":{"19":1}}],["商品详情",{"2":{"63":1}}],["商品详情页",{"2":{"55":1}}],["商品分类页",{"2":{"36":1}}],["觉得我们需要建立起概率的世界观",{"2":{"1016":1}}],["觉得这样效率高",{"2":{"608":1}}],["觉得",{"2":{"123":1}}],["关系图",{"2":{"706":1}}],["关联",{"2":{"822":1}}],["关联的设计文档路径",{"2":{"994":1}}],["关联的",{"2":{"661":1}}],["关联与协作",{"0":{"135":1}}],["关注并优化体重秤日常的",{"2":{"1048":1}}],["关注完整性和正确性",{"2":{"988":1}}],["关注功能的按时上线",{"2":{"556":1}}],["关注架构的健壮性",{"2":{"555":1}}],["关注具体的语言和语法细节",{"2":{"555":1}}],["关注点",{"2":{"553":1}}],["关注点分离",{"2":{"170":1,"180":1}}],["关注的是服务器负载",{"2":{"537":1}}],["关注的是如何让数据",{"2":{"134":1}}],["关注的是如何把数据",{"2":{"134":1}}],["关注外部环境与政策法规",{"2":{"400":1}}],["关注层面",{"2":{"226":1}}],["关闭连接",{"2":{"860":1}}],["关闭时",{"2":{"489":1}}],["关闭对话后上下文即刻失效",{"2":{"435":1}}],["关闭",{"2":{"152":1,"860":1,"866":1}}],["关于健身减肥方面的实践",{"2":{"1026":1}}],["关于本站",{"0":{"1002":1}}],["关于缓存",{"2":{"334":1}}],["关于",{"0":{"123":1},"1":{"124":1,"125":1,"126":1,"127":1,"128":1},"2":{"588":1}}],["关键点",{"2":{"1026":2}}],["关键点说明",{"0":{"514":1,"517":1,"561":1,"564":1,"567":1}}],["关键要点",{"2":{"963":1}}],["关键依赖",{"2":{"936":1}}],["关键文件数",{"2":{"931":1}}],["关键目录",{"0":{"931":1}}],["关键端点",{"2":{"866":1}}],["关键选型决策",{"2":{"846":1,"936":1}}],["关键技术点",{"2":{"858":1}}],["关键技术",{"2":{"818":1}}],["关键类型定义",{"2":{"778":1}}],["关键类",{"2":{"762":1}}],["关键帧轨道",{"2":{"772":1}}],["关键帧轨道基类",{"2":{"763":1}}],["关键帧动画系统",{"2":{"763":1,"772":1}}],["关键帧数据容器",{"2":{"763":1}}],["关键帧数据",{"2":{"749":1}}],["关键帧数据流",{"2":{"743":1}}],["关键帧",{"2":{"738":1,"749":1}}],["关键帧插值引擎",{"2":{"735":1}}],["关键帧插值",{"2":{"734":1}}],["关键设计模式",{"2":{"734":1}}],["关键视觉任务包括",{"2":{"715":1}}],["关键功能",{"2":{"700":1}}],["关键数据流程",{"0":{"657":1,"687":1,"716":1,"745":1,"773":1,"800":1,"829":1,"861":1,"921":1,"949":1,"990":1},"1":{"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"688":1,"689":1,"690":1,"717":1,"746":1,"747":1,"774":1,"775":1,"801":1,"802":1,"803":1,"830":1,"831":1,"832":1,"862":1,"863":1,"922":1,"923":1,"991":1,"992":1}}],["关键反哺机制",{"2":{"628":1}}],["关键的技术选型",{"2":{"572":1}}],["关键问题",{"2":{"519":1}}],["关键发现",{"2":{"472":1}}],["关键会议或拍板时缺乏动态数据支撑",{"2":{"465":1}}],["关键是找到你自己的交叉点",{"2":{"462":1}}],["关键词",{"2":{"459":3}}],["关键在于怎么读",{"2":{"606":1}}],["关键在于准确定义问题并剥离噪音",{"2":{"459":1}}],["关键在于一致性",{"2":{"361":1}}],["关键特性",{"2":{"304":1,"305":1,"307":1}}],["关键洞察",{"2":{"227":1}}],["关键字重命名导入",{"2":{"310":1}}],["关键字定义约束",{"2":{"264":1}}],["关键字添加约束",{"2":{"263":1}}],["关键字",{"2":{"203":1,"307":1}}],["关键逻辑",{"2":{"185":1,"191":1,"197":1}}],["关键前提",{"2":{"181":1}}],["关键实践",{"2":{"62":1}}],["关键",{"2":{"57":1}}],["关键差异点分析与实践选择指南",{"0":{"44":1},"1":{"45":1,"46":1,"47":1}}],["关键误区澄清",{"0":{"4":1}}],["长时间运行任务的进度追踪",{"2":{"875":1}}],["长寿时代",{"2":{"605":1}}],["长上下文模型",{"2":{"523":1}}],["长上下文",{"2":{"511":1,"512":1,"522":4}}],["长文总结过滤等自动化处理",{"2":{"545":1}}],["长文档精读",{"2":{"521":1}}],["长文档精读与摘要",{"2":{"511":1}}],["长文档理解最强",{"2":{"521":1}}],["长文档分析",{"2":{"519":1}}],["长文档阅读与结构化提炼",{"2":{"512":1,"522":1}}],["长文本断行对比",{"2":{"790":1}}],["长文本",{"2":{"504":1}}],["长文生成",{"2":{"130":1}}],["长度限制",{"2":{"873":1}}],["长度限制成为了瓶颈",{"2":{"131":1}}],["长度计算",{"2":{"819":1}}],["长度",{"2":{"677":1}}],["长度不超过",{"2":{"448":1}}],["长链路",{"2":{"428":1,"432":1}}],["长期熬夜",{"2":{"1022":1}}],["长期写作的产物",{"2":{"606":1}}],["长期依赖",{"2":{"531":1}}],["长期专属工作空间",{"0":{"437":1}}],["长期的项目背景",{"2":{"410":1}}],["长期三类",{"2":{"410":1}}],["长期记忆",{"2":{"408":1,"410":1,"546":1}}],["长尾覆盖",{"0":{"407":1}}],["长尾的任务流",{"2":{"403":1}}],["长久以来",{"2":{"386":1,"1008":1}}],["长轮询级联",{"2":{"168":1}}],["长轮询可发挥最佳性能",{"2":{"166":1}}],["长轮询的",{"2":{"164":1}}],["长轮询的客户端逻辑非常简单",{"2":{"164":1}}],["长轮询的复杂度主要在服务端",{"2":{"163":1}}],["长轮询应运而生",{"2":{"161":1}}],["长轮询",{"0":{"161":1},"1":{"162":1,"163":1,"164":1},"2":{"156":1,"166":3}}],["长视频生成等",{"2":{"156":1}}],["长江后浪推前浪",{"2":{"132":1}}],["长连接占用文件描述符和连接池",{"2":{"166":1}}],["长连接会持续占用服务端的连接池资源",{"2":{"164":1}}],["长连接",{"2":{"122":1,"156":1}}],["长远来看能省去大量由于手动维护复杂缓存而产生的隐性技术债",{"2":{"99":1}}],["签名",{"2":{"121":1}}],["因人因时因地地制定出一套健身运动的项目",{"2":{"1025":1}}],["因地制宜的隔离方案",{"2":{"968":1}}],["因减弱果",{"2":{"386":1}}],["因增强果",{"2":{"386":1}}],["因果并不是瞬间连接的",{"2":{"388":1}}],["因果不是瞬间连接",{"2":{"388":1}}],["因果链是线段",{"2":{"386":1}}],["因果链描述的是变量之间",{"2":{"385":1}}],["因果链",{"0":{"385":1},"2":{"383":2,"385":1}}],["因果关系只是单向线段",{"2":{"1007":1}}],["因果关系",{"2":{"366":1,"1007":1}}],["因此在经历两次",{"2":{"1022":1}}],["因此在处理复杂任务时",{"2":{"425":1}}],["因此本文不再对其展开详细分析",{"2":{"957":1}}],["因此可使用联网搜索能力",{"2":{"501":1}}],["因此同步加载不会造成明显阻塞",{"2":{"304":1}}],["因此不会让我们访问只有部分成员才有的属性",{"2":{"229":1}}],["因此",{"2":{"135":2,"140":1,"219":1,"237":1,"238":1,"272":1,"292":1,"366":1,"377":1,"382":1,"423":1,"435":1,"437":1,"492":1,"499":1,"965":1,"1005":2,"1007":3,"1009":1,"1011":1,"1014":1,"1015":1,"1019":2,"1029":2,"1031":1,"1034":1,"1038":1,"1039":1,"1043":5}}],["因此主流平台通常支持失败重试机制",{"2":{"121":1}}],["因为一次偶然的事情出现后",{"2":{"1046":1}}],["因为这种改变容易失败",{"2":{"1042":1}}],["因为这是一个标准流程",{"2":{"592":1}}],["因为笔者想延伸地是",{"2":{"1041":1}}],["因为笔者自己构建的心智模型还不够好",{"2":{"1029":1}}],["因为在疫情早期居家办公真的很累",{"2":{"1040":1}}],["因为在疫情出现之前",{"2":{"1039":1}}],["因为在执行时不是从大脑中提取",{"2":{"1037":1}}],["因为终于有机会在工作之外初级又粗糙地运用了统计学分析",{"2":{"1038":1}}],["因为改变说起来容易做起来难",{"2":{"1037":1}}],["因为纵使一个人满腹经纶",{"2":{"1030":1}}],["因为每种方式都有可能",{"2":{"1030":1}}],["因为有过比较正向的实践",{"2":{"1020":1}}],["因为特别容易忽略任务之间的关联",{"2":{"1017":1}}],["因为现实世界中的事物看似复杂",{"2":{"1015":1}}],["因为增强回路就是",{"2":{"1009":1}}],["因为我认为",{"2":{"1002":1}}],["因为它将",{"2":{"971":1}}],["因为它是对上述两种能力的全方位放大",{"2":{"557":1}}],["因为它不需要包含数据获取逻辑或服务端渲染逻辑",{"2":{"53":1}}],["因为过度处理细节而导致的逻辑发散",{"2":{"470":1}}],["因为工具的进化",{"2":{"466":1}}],["因为算法无法计算",{"2":{"376":1}}],["因为掌握了某个新技术",{"2":{"365":1}}],["因为所有由",{"2":{"359":1}}],["因为运行时类型错误往往难以定位和修复",{"2":{"255":1}}],["因为对于一个",{"2":{"233":1}}],["因为",{"2":{"217":1,"236":1,"539":1,"558":1,"610":1}}],["因为最后一行后面可能还没有换行符",{"2":{"141":1}}],["因为后台每次都要重新计算",{"2":{"77":1}}],["因为搜索引擎抓取时会同时读取",{"2":{"69":1}}],["因为文档站天然具备",{"2":{"54":1}}],["概括来讲",{"2":{"1019":1}}],["概率的世界观",{"0":{"1016":1}}],["概率论等基础知识的学习与理解",{"2":{"1011":1}}],["概率性",{"2":{"367":1}}],["概念地图",{"2":{"628":1}}],["概念解释",{"2":{"518":1}}],["概念火热",{"2":{"496":1}}],["概念较多",{"2":{"283":1}}],["概念",{"2":{"278":1}}],["概念层",{"2":{"155":1}}],["概念澄清",{"0":{"134":1}}],["概念简单",{"2":{"121":1}}],["概览",{"0":{"138":1},"2":{"98":1}}],["推拉模式",{"2":{"1008":1}}],["推断类型和需求",{"2":{"770":1}}],["推敲",{"2":{"606":1}}],["推出的全栈",{"2":{"561":1}}],["推出的智能助手",{"2":{"512":1}}],["推出的",{"2":{"511":1,"561":1,"901":1}}],["推出的持续集成和持续交付",{"2":{"343":1}}],["推理策略基类",{"2":{"939":1}}],["推理等放面的原理与流程",{"2":{"551":1}}],["推理速度可达普通",{"2":{"523":1}}],["推理能力逼近",{"2":{"522":1}}],["推理能力强",{"2":{"511":1}}],["推理后端",{"2":{"511":1,"521":1}}],["推理质量随任务推进而下降等挑战",{"2":{"468":1}}],["推理漂移",{"2":{"430":1}}],["推理",{"2":{"427":2,"502":2}}],["推动更好的设计",{"2":{"255":1}}],["推论",{"2":{"244":1}}],["推",{"2":{"164":1}}],["推送对象",{"2":{"122":1}}],["推送至自有的聊天机器人或客服系统",{"2":{"120":1}}],["推荐阅读我的两篇核心文章",{"2":{"1001":1}}],["推荐多读读物",{"2":{"400":1}}],["推荐多阅读读物",{"2":{"399":1}}],["推荐一些不错读物",{"2":{"400":1}}],["推荐方案",{"2":{"320":1}}],["推荐采用四层架构",{"2":{"279":1}}],["推荐做法",{"2":{"216":1}}],["推荐值",{"2":{"203":2}}],["推荐先阅读",{"2":{"156":1}}],["推荐使用",{"2":{"954":1}}],["推荐使用指数退避策略",{"2":{"146":1}}],["推荐使用数组作为",{"2":{"92":1}}],["推荐通信协议",{"2":{"130":1}}],["推荐配合本节阅读",{"2":{"75":1}}],["推荐内容等个性化组件划入流式动态组件",{"2":{"47":1}}],["推荐",{"2":{"13":1,"166":3,"203":2,"258":1,"263":1,"327":1,"328":1,"523":1,"810":1,"987":1}}],["断词模式",{"2":{"805":1}}],["断点规则",{"2":{"797":1}}],["断点续传",{"2":{"110":1}}],["断行策略",{"2":{"795":1}}],["断行追踪",{"2":{"790":1}}],["断行优化",{"2":{"790":1}}],["断行判定",{"2":{"789":1,"790":1,"792":1}}],["断行判定|",{"2":{"789":1}}],["断行边界处理粗糙",{"2":{"141":1}}],["断连恢复成本",{"2":{"166":1}}],["断连恢复成本极低的特性",{"2":{"156":1}}],["断线感知以及带退避策略的重连逻辑",{"2":{"117":1}}],["二",{"2":{"1048":1}}],["二阶段沉淀下来的时间分配情况",{"2":{"1038":1}}],["二战时曾将统计学应用于制造业",{"2":{"1027":1}}],["二进制",{"2":{"763":1}}],["二进制协议封装等多媒体场景中具有显著的性能优势",{"2":{"115":1}}],["二值化阈值",{"2":{"677":1}}],["二者形成的能力壁垒",{"2":{"622":1}}],["二者间的通信便无法直接完成",{"2":{"117":1}}],["二级价格歧视",{"2":{"397":1}}],["噩梦",{"2":{"117":1}}],["阅历一步步身兼",{"2":{"1042":1}}],["阅读与学习这个话题到此也基本漫谈完了",{"2":{"1032":1}}],["阅读与学习这件小事在疫情期间也变得比之前明晰起来",{"2":{"1032":1}}],["阅读准则表格",{"2":{"1031":1,"1032":1}}],["阅读就会变得像追踪一场精彩的辩论一样有趣",{"2":{"609":1}}],["阅读这些经典",{"2":{"603":1}}],["阅读内容",{"2":{"484":1}}],["阅读全文",{"2":{"15":1}}],["阅后即焚",{"2":{"117":1}}],["有助于使用者不断思考如何将日常任务做的更好",{"2":{"1037":1}}],["有过类似经历的人肯定能更明白其中的矛盾与酸楚",{"2":{"1034":1}}],["有些则以读书学习",{"2":{"1042":1}}],["有些侧重实践为主",{"2":{"1042":1}}],["有些改变需要依赖时间才能有效果",{"2":{"1034":1}}],["有些实践需要时间落地",{"2":{"1034":1}}],["有些人的总结未必适合自己",{"2":{"1034":1}}],["有些人会把读书当成一种习惯和爱好",{"2":{"1029":1}}],["有些人确实读了不少书",{"2":{"612":1}}],["有几个难题摆在了笔者面前",{"2":{"1034":1}}],["有几个关键问题需要考虑",{"2":{"145":1}}],["有依据的",{"2":{"1025":1}}],["有兴趣的朋友可去深入学习",{"2":{"1027":1}}],["有兴趣的小伙伴在以后的日子里可共同进步",{"2":{"1020":1}}],["有兴趣的可阅读一些更专业的书籍",{"2":{"1018":1}}],["有兴趣的可自己看原创视频",{"2":{"1007":1}}],["有两个方面的原因",{"2":{"1019":1}}],["有两层含义",{"2":{"1002":1}}],["有趣了",{"2":{"1018":1}}],["有点觉得自己的心态变得年轻",{"2":{"1018":1}}],["有一个比较共同的特点值得敬佩",{"2":{"1018":1}}],["有一定编程基础",{"2":{"564":1}}],["有自己的节奏感",{"2":{"1013":1}}],["有自己的模块解析机制",{"2":{"216":1}}],["有头有尾",{"2":{"1007":1}}],["有减弱关系吗",{"2":{"1007":1}}],["有四种核心消息类型",{"2":{"942":1}}],["有唯一的",{"2":{"942":1}}],["有新动画加入时自动启动",{"2":{"740":1}}],["有独立子类",{"2":{"738":1}}],["有独立身份的角色",{"2":{"592":1}}],["有着巨大的鸿沟",{"2":{"612":1}}],["有其独有的优势",{"2":{"606":1}}],["有特定的模式和反模式清单",{"2":{"587":1}}],["有明确",{"2":{"568":1}}],["有合规需求的国内团队",{"2":{"565":1}}],["有数据安全",{"2":{"565":1}}],["有开始暂停按钮",{"2":{"561":1}}],["有海外网络",{"2":{"523":1}}],["有保障",{"2":{"520":1}}],["有没有人能组织且管理好这种自由的远程协作团伙",{"2":{"1041":1}}],["有没有反面案例",{"2":{"518":1}}],["有没有更好的解决方案",{"2":{"366":1}}],["有没有更轻量的替代方案",{"2":{"194":1}}],["有个小朋友曾用这个算出了妈妈买奶茶省了多少钱",{"2":{"494":1}}],["有效区分起居空间与办公区间",{"2":{"1040":1}}],["有效使用",{"2":{"531":1}}],["有效突破了单智能体在复杂任务中的能力瓶颈",{"2":{"467":1,"468":1}}],["有效减少不必要的请求开销",{"2":{"128":1}}],["有能动性的实体",{"2":{"420":1}}],["有时不达标",{"2":{"1046":1}}],["有时觉得自己除了睡觉就一直在工作",{"2":{"1040":1}}],["有时只要松开刹车就好",{"2":{"1007":1}}],["有时会觉得很累",{"2":{"1005":1}}],["有时也能通过",{"2":{"392":1}}],["有时候",{"2":{"263":1}}],["有滞后效应",{"2":{"388":1}}],["有哪些商业考量或技术限制是我没看到的",{"2":{"375":1}}],["有直觉",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1}}],["有了更高层次的追求",{"2":{"1043":1}}],["有了知识树",{"2":{"609":1}}],["有了",{"2":{"361":1}}],["有了这个模型",{"2":{"227":1}}],["有意识地培养对自己领域工作的品味",{"2":{"359":1}}],["有表单处理",{"2":{"345":1}}],["有利于",{"2":{"318":1}}],["有机体组件",{"2":{"274":1}}],["有不同的属性约束",{"2":{"249":1}}],["有价值的复杂度",{"2":{"200":1}}],["有限理性的普遍胜利",{"0":{"393":1}}],["有限集",{"2":{"227":1}}],["有限",{"2":{"142":1}}],["有",{"2":{"134":1,"605":1}}],["有状态",{"2":{"117":1}}],["有多友好",{"2":{"59":1}}],["协商目录",{"2":{"951":1}}],["协商选择共同支持的组件集",{"2":{"948":1}}],["协商",{"2":{"939":2}}],["协调请求",{"2":{"891":1}}],["协调表达式求值和字体加载",{"2":{"741":1}}],["协调所有事件",{"2":{"680":1}}],["协调者",{"2":{"471":1}}],["协调调度",{"2":{"470":1}}],["协调研究",{"2":{"470":1}}],["协调员",{"2":{"416":1}}],["协调领域对象",{"2":{"279":1}}],["协调领域对象完成业务用例",{"2":{"278":1,"279":1}}],["协调复杂业务流程",{"2":{"275":1}}],["协作应用",{"2":{"875":1}}],["协作或复杂的",{"2":{"550":1}}],["协作与路由流",{"2":{"545":1}}],["协作与分发机制",{"2":{"545":1}}],["协作的过渡态",{"2":{"538":1}}],["协作水平的终极标准",{"2":{"526":1}}],["协作",{"2":{"525":1}}],["协作编程大显身手的时刻",{"2":{"176":1}}],["协作编辑",{"2":{"131":1}}],["协作时代",{"2":{"171":1}}],["协作时代后",{"2":{"169":1}}],["协作小洞察",{"2":{"170":1}}],["协同作战的",{"2":{"420":1}}],["协同",{"0":{"420":1}}],["协同文档状态同步",{"2":{"167":1}}],["协同办公",{"2":{"116":1}}],["协议测试",{"2":{"980":1}}],["协议集成示例",{"2":{"939":1}}],["协议版本切换上下文",{"2":{"939":1}}],["协议版本与",{"2":{"939":1}}],["协议消息",{"2":{"939":1,"942":1}}],["协议消息松耦合连接",{"2":{"938":1}}],["协议核心实现",{"2":{"939":2}}],["协议扩展",{"2":{"939":1}}],["协议桥接",{"2":{"939":1}}],["协议安全核心",{"2":{"939":1}}],["协议文档入口",{"2":{"939":4}}],["协议和库集合",{"2":{"933":1}}],["协议和高阶",{"2":{"552":1}}],["协议支持",{"2":{"908":1}}],["协议定义",{"2":{"851":1,"938":1}}],["协议契约",{"2":{"342":2}}],["协议直接引用",{"2":{"216":1}}],["协议错误",{"2":{"147":1}}],["协议层控制消息",{"2":{"147":1}}],["协议规定",{"2":{"143":1}}],["协议规范定义",{"2":{"939":1}}],["协议规范写入数据",{"2":{"152":1}}],["协议规范",{"2":{"134":1}}],["协议以换行符分隔字段",{"2":{"143":1}}],["协议解析逻辑",{"2":{"142":1}}],["协议解析",{"2":{"140":1,"141":1,"883":1}}],["协议字段",{"2":{"138":1}}],["协议字段的对应关系",{"2":{"138":1}}],["协议中的",{"2":{"138":2,"153":1}}],["协议中",{"2":{"138":1,"141":1}}],["协议格式持续写入响应流",{"2":{"151":1}}],["协议格式写入",{"2":{"139":1}}],["协议格式的响应即可",{"2":{"139":1}}],["协议格式",{"2":{"138":1}}],["协议对数据流格式有明确规定",{"2":{"136":1}}],["协议数据格式",{"0":{"136":1}}],["协议数百字节的首部开销",{"2":{"115":1}}],["协议的",{"2":{"153":3}}],["协议的数据格式规范",{"2":{"137":1}}],["协议的数据流底层必然依赖流式",{"2":{"135":1}}],["协议的全双工通信协议",{"2":{"113":1}}],["协议基础",{"2":{"122":1}}],["协议本身设计得极为精简",{"2":{"117":1}}],["协议原生支持文本",{"2":{"115":1}}],["协议开销",{"2":{"114":1}}],["协议后",{"2":{"114":1}}],["协议升级握手",{"2":{"114":1}}],["协议默认开启了",{"2":{"103":1}}],["协议之上",{"2":{"103":1}}],["协议",{"2":{"98":1,"115":1,"135":2,"155":1,"439":2,"903":1,"917":1}}],["微信读书这个产品在发展的过程中",{"2":{"1032":1}}],["微信阅读",{"2":{"1031":2}}],["微信",{"2":{"1004":1}}],["微信小程序",{"2":{"562":1}}],["微信网页版",{"2":{"116":1}}],["微观经济学家",{"2":{"400":1}}],["微观情绪标注",{"2":{"372":1}}],["微小不爽",{"2":{"370":1}}],["微服务",{"2":{"542":1}}],["微服务通信与编排",{"2":{"344":1}}],["微服务架构下",{"2":{"81":1}}],["微前端不是目的",{"2":{"292":1}}],["微前端架构才能发挥其最大的价值",{"2":{"292":1}}],["微前端架构则能够带来显著的收益",{"2":{"292":1}}],["微前端架构也带来了一些挑战",{"2":{"292":1}}],["微前端架构是前端模块化发展的必然产物",{"2":{"292":1}}],["微前端小结",{"0":{"292":1}}],["微前端最佳实践",{"0":{"291":1}}],["微前端项目目录结构",{"0":{"290":1}}],["微前端通信机制",{"0":{"289":1}}],["微前端实现方案对比",{"0":{"287":1}}],["微前端的模块化设计原则",{"0":{"286":1}}],["微前端的核心理念",{"0":{"285":1}}],["微前端借鉴了微服务的思想",{"2":{"285":1}}],["微前端是一种将前端应用拆分为多个独立",{"2":{"284":1}}],["微前端与模块化",{"0":{"284":1},"1":{"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1}}],["微调边界",{"2":{"170":1}}],["微软开源了",{"2":{"142":1}}],["那只能是被束缚得各种不适",{"2":{"1037":1}}],["那大家都不需要埋头精耕细作了",{"2":{"621":1}}],["那几本书成了我书架上理解最透彻",{"2":{"610":1}}],["那个时候",{"2":{"553":1}}],["那一刻",{"2":{"495":1}}],["那就直接做一个给学生用的解题机器人",{"2":{"492":1}}],["那就是伪需求",{"2":{"366":1}}],["那它就不是技能",{"2":{"445":1}}],["那它就是不可复制的黑盒",{"2":{"364":1}}],["那些综合表现好的人",{"2":{"1017":1}}],["那些薄弱",{"2":{"610":1}}],["那些曾经因为",{"2":{"528":1}}],["那些遗留的烂代码",{"2":{"527":1}}],["那些具备自我修复能力",{"2":{"419":1}}],["那些真实而具体的高价值痛点才会自然浮现",{"2":{"377":1}}],["那些看似玄妙的直觉判断",{"2":{"364":1}}],["那是全知视角的奢望",{"2":{"376":1}}],["那是",{"2":{"371":1}}],["那样去",{"2":{"961":1}}],["那样通过",{"2":{"154":1}}],["那样进行",{"2":{"115":1}}],["那么混合工作制就是基于物理空间和时间这两个维度来切割平面",{"2":{"1039":1}}],["那么问题来了",{"2":{"1005":1,"1011":1,"1019":1,"1041":1}}],["那么构建完善的评测体系",{"2":{"550":1}}],["那么软件工程范式就是承载它的底盘",{"2":{"534":1}}],["那么自我反思就是",{"2":{"426":1}}],["那么多智能体擅长流程协作",{"2":{"417":1}}],["那么记忆模块则赋予了它",{"2":{"410":1}}],["那么调节回路的存在",{"2":{"387":1,"1009":1}}],["那么将它们连接起来的线段就是",{"2":{"385":1}}],["那么模块化的",{"2":{"296":1}}],["那么交叉类型代表的就是",{"2":{"236":1}}],["那么",{"2":{"108":1,"118":1,"179":1,"402":1,"436":1,"439":1,"544":1,"553":2,"584":1,"964":1,"1014":1}}],["那么流式",{"2":{"104":1}}],["那么即使用",{"2":{"54":1}}],["带人工检查点的批量任务执行",{"2":{"980":1}}],["带哈希值的类名",{"2":{"959":1}}],["带工具调用的完整流程",{"0":{"922":1}}],["带认证和自定义请求",{"0":{"878":1}}],["带单位的数字",{"2":{"828":1}}],["带",{"2":{"799":1}}],["带引用的英文学术",{"2":{"518":1}}],["带引用的答案",{"2":{"517":1}}],["带着新问题回去再读",{"2":{"610":1}}],["带着亟待回答的问题去读书",{"2":{"609":1}}],["带着问题去读",{"0":{"609":1}}],["带着",{"2":{"375":1}}],["带来极佳的",{"2":{"342":1}}],["带来了语言层面的模块化方案",{"2":{"307":1}}],["带来的正向效果特别多",{"2":{"1013":1}}],["带来的语法噪音",{"2":{"968":1}}],["带来的最大变量",{"2":{"526":1}}],["带来的持续进化能力",{"2":{"419":1}}],["带来的活跃度下降",{"2":{"398":1}}],["带来的",{"2":{"85":1}}],["带掩码时最大",{"2":{"115":1}}],["平时注重多与同事",{"2":{"1046":1}}],["平衡思维下的多维度视角和互相依赖的社会特征会给我们一些启发来调整的",{"2":{"1006":1}}],["平衡思维是我们的必修课",{"2":{"1006":1}}],["平衡静态性能与实时性",{"2":{"20":1}}],["平行光",{"2":{"763":1}}],["平行坐标系",{"2":{"706":1}}],["平行坐标组件",{"2":{"706":1}}],["平行坐标图",{"2":{"706":1}}],["平行",{"2":{"701":1}}],["平移",{"2":{"699":1}}],["平庸与卓越的分水岭不再是做事的速度",{"2":{"602":1}}],["平庸的搬运工",{"2":{"558":1}}],["平庸化",{"0":{"530":1},"1":{"531":1,"532":1,"533":1}}],["平庸者可以利用",{"2":{"359":1}}],["平均数",{"0":{"359":1}}],["平台插件实现",{"2":{"980":1}}],["平台插件清单",{"2":{"980":3}}],["平台详细安装文档",{"2":{"980":1}}],["平台集成测试",{"2":{"980":2}}],["平台自适应",{"2":{"980":1}}],["平台自带的文本生成结果较为生硬",{"2":{"499":1}}],["平台自带的图片生成能力表现不错",{"2":{"499":1}}],["平台适配文档",{"2":{"980":1}}],["平台适配层",{"2":{"978":1,"979":1}}],["平台适配者",{"2":{"974":1}}],["平台的团队",{"2":{"933":1}}],["平台构建者",{"2":{"933":1}}],["平台上缺失的多行",{"2":{"784":1}}],["平台需要根据客户需求动态调整页面",{"2":{"640":1}}],["平台开发者",{"2":{"639":1}}],["平台搭建者",{"2":{"639":1}}],["平台选择",{"0":{"498":1}}],["平台与",{"0":{"497":1},"1":{"498":1,"499":1}}],["平台近期发布了新版本",{"2":{"496":1}}],["平台级产品",{"2":{"465":1}}],["平台型产品",{"2":{"399":1}}],["平台",{"0":{"520":1},"1":{"521":1,"522":1},"2":{"343":1,"345":1,"521":3,"522":4,"523":2,"567":1,"982":2}}],["平缓",{"2":{"341":2}}],["平级的应用层协议",{"2":{"113":1}}],["站在不同角度的人在一起讨论后达成的共识往往最接近真相",{"2":{"1014":1}}],["站在产品与应用工程师的角度看",{"2":{"525":1}}],["站林超所长视频中学到的总结",{"2":{"1007":1}}],["站点根页面",{"2":{"790":1}}],["站点",{"2":{"790":2}}],["站点达到数万级页面时",{"2":{"47":1}}],["站内信通知",{"2":{"111":1}}],["加大锻炼强度",{"2":{"1046":1}}],["加大运动量",{"2":{"1026":1}}],["加工和压缩",{"2":{"969":1}}],["加",{"2":{"965":1}}],["加法动画叠加",{"2":{"828":1}}],["加法动画",{"2":{"819":1}}],["加速的",{"2":{"757":1}}],["加速",{"2":{"672":1,"673":1}}],["加速团队协作",{"2":{"297":1}}],["加粗排版完全符合",{"2":{"507":1}}],["加持",{"2":{"361":1}}],["加快编译速度",{"2":{"322":1}}],["加入多余的变量和判断",{"2":{"187":1}}],["加密货币的实时波动",{"2":{"111":1}}],["加载工具",{"2":{"939":1}}],["加载用户适配器",{"2":{"854":1}}],["加载dom元素",{"2":{"819":1}}],["加载队列管理",{"2":{"763":1}}],["加载器基类",{"2":{"763":1}}],["加载器",{"2":{"757":1,"758":1}}],["加载并播放动画",{"2":{"746":1}}],["加载和播放动画",{"2":{"729":1}}],["加载动画",{"2":{"706":1,"729":1}}],["加载状态",{"2":{"663":1}}],["加载的数据自动合并到父级",{"2":{"653":1}}],["加载到",{"2":{"443":1}}],["加载目录下的",{"2":{"334":1}}],["加载方式",{"2":{"308":1,"320":1}}],["加载模块",{"2":{"305":1}}],["加载性能瓶颈",{"2":{"297":1}}],["加载子应用",{"2":{"287":1}}],["加载中",{"2":{"74":1,"85":1}}],["加载远程图片时",{"2":{"72":1}}],["加载",{"2":{"59":1,"74":1,"305":1,"737":1,"763":3,"939":1}}],["加载有多快",{"2":{"59":1}}],["加载完成后",{"2":{"27":1}}],["加载静态资源",{"2":{"2":1}}],["防治宜早",{"2":{"1025":1}}],["防戒不良生活习惯",{"2":{"1025":1}}],["防雷警告",{"2":{"965":1}}],["防护",{"2":{"662":1}}],["防守",{"2":{"426":1}}],["防范状态爆炸与泄漏",{"2":{"174":1}}],["防抖限制外",{"2":{"144":1}}],["防止嵌套注入",{"2":{"986":1}}],["防止样式污染全局",{"2":{"961":1}}],["防止网页直接调用",{"2":{"860":1}}],["防止阅读初衷的异化",{"2":{"612":1}}],["防止其重绘逻辑清除",{"2":{"489":1}}],["防止访问不存在的属性",{"2":{"268":1}}],["防止在泛型函数",{"2":{"264":1}}],["防止将",{"2":{"247":1}}],["防止混淆",{"2":{"247":1}}],["防止生成有问题的输出",{"2":{"203":1}}],["防止状态隐式穿透组件边界",{"2":{"174":1}}],["防止组件",{"2":{"169":1}}],["防止死循环狂刷请求",{"2":{"164":1}}],["防止无效消息干扰",{"2":{"150":1}}],["防止无限重试",{"2":{"150":1}}],["防止手机浏览器进入后台时断开",{"2":{"150":1}}],["防止",{"2":{"150":1,"860":1,"979":1}}],["防止重复触发",{"2":{"148":1}}],["防止重复回调",{"0":{"148":1}}],["防止对象被后续修改影响",{"2":{"143":1}}],["防止内存泄漏",{"2":{"143":1,"154":1}}],["防止旧数据覆盖我们即将做的乐观更新",{"2":{"96":1}}],["防火墙或负载均衡器默认开启了强缓冲",{"2":{"107":1}}],["单任务学习",{"2":{"1017":1}}],["单项触发测试",{"2":{"980":1}}],["单组件事件",{"2":{"947":1}}],["单节点渲染",{"2":{"939":1}}],["单词",{"2":{"819":1}}],["单动画",{"2":{"817":1}}],["单动画状态",{"2":{"735":1}}],["单行范围",{"2":{"797":1}}],["单行道",{"2":{"112":1}}],["单步迭代",{"2":{"797":1}}],["单语料单宽度",{"2":{"790":1}}],["单宽度精确断行",{"2":{"790":1}}],["单次迭代持续时间",{"2":{"834":1}}],["单次动画契约",{"2":{"834":1}}],["单次动画",{"2":{"822":1}}],["单次测量",{"2":{"785":1}}],["单次输入成本随",{"2":{"523":1}}],["单实例状态",{"2":{"734":1}}],["单体架构",{"2":{"702":1}}],["单轴坐标系",{"2":{"706":1}}],["单轴组件",{"2":{"706":1}}],["单轴",{"2":{"701":1}}],["单文件",{"2":{"597":1}}],["单点指令",{"0":{"535":1}}],["单点工具使用",{"2":{"459":1}}],["单价为国际顶尖模型的",{"2":{"522":1}}],["单打独斗",{"2":{"415":1,"438":1}}],["单个段的",{"2":{"793":1}}],["单个表达式的编译和执行",{"2":{"742":1}}],["单个",{"2":{"415":1,"585":1,"763":1}}],["单个模块建议保持在",{"2":{"329":1}}],["单兵作战",{"2":{"344":1}}],["单仓库极速交付",{"2":{"344":1}}],["单人作战团队",{"2":{"342":1}}],["单纯的模块拆分已不够",{"2":{"336":1}}],["单例封装",{"2":{"763":1}}],["单例",{"2":{"303":1,"677":1,"735":1,"740":1,"817":1,"818":1,"851":1}}],["单例模式的全局动画管理器",{"2":{"740":1}}],["单例模式",{"0":{"301":1},"2":{"288":1,"314":1,"734":1,"740":1}}],["单元测试",{"2":{"677":1,"706":1,"939":1}}],["单元",{"2":{"274":1}}],["单测框架",{"2":{"220":1}}],["单测工具",{"0":{"220":1},"1":{"221":1,"222":1,"223":1,"224":1,"225":1}}],["单模块",{"2":{"190":1}}],["单一引导脚本通过环境变量自适应",{"2":{"975":1}}],["单一方案往往独木难支",{"2":{"971":1}}],["单一方案往往无法兼顾效率与灵活性",{"2":{"965":1}}],["单一",{"2":{"731":1}}],["单一后端",{"2":{"673":1}}],["单一打包",{"2":{"673":1}}],["单一真实数据源",{"2":{"174":1}}],["单一职责的",{"2":{"962":1}}],["单一职责的体现",{"0":{"311":1}}],["单一职责原则",{"0":{"327":1}}],["单一职责",{"2":{"169":1,"180":1}}],["单位转换",{"2":{"819":1}}],["单位处理",{"2":{"819":1}}],["单位元",{"2":{"244":2}}],["单位",{"2":{"160":1,"834":1}}],["单位为秒",{"2":{"35":1}}],["单向通信",{"2":{"881":1}}],["单向数据流",{"2":{"341":1}}],["单向数据流是对变更轨迹的约束",{"2":{"180":1}}],["单向推送",{"2":{"131":1}}],["单向传输局限",{"2":{"107":1}}],["及时发现",{"2":{"1026":1}}],["及时了解相关变化",{"2":{"400":1}}],["及格",{"2":{"655":4}}],["及格线以上",{"2":{"359":1}}],["及相关资源文件",{"2":{"441":1}}],["及以上版本中",{"2":{"112":1}}],["及其子",{"2":{"684":1}}],["及其衍生品在双向交互下",{"2":{"131":1}}],["及其",{"2":{"105":1}}],["及少量用于替换",{"2":{"74":1}}],["依旧把自己的",{"2":{"1042":1}}],["依托",{"2":{"464":1}}],["依靠",{"2":{"315":1}}],["依然能保持航向的精准",{"2":{"431":1}}],["依然能快速判断",{"2":{"363":1}}],["依然可以通过重新定义产品边界和极致的工程打磨撕开缺口",{"2":{"356":1}}],["依然始于人类心智对数据流",{"2":{"169":1}}],["依然默默支撑着无数生图",{"2":{"132":1}}],["依然是软件工程中那道最坚固",{"2":{"539":1}}],["依然是",{"2":{"132":1,"961":1}}],["依次下发",{"2":{"105":1}}],["依赖策略",{"2":{"976":1}}],["依赖底层桥接",{"2":{"858":1}}],["依赖锁定文件",{"2":{"882":1}}],["依赖锁",{"2":{"790":1}}],["依赖核心api",{"2":{"762":1}}],["依赖关系",{"0":{"884":1},"1":{"885":1,"886":1}}],["依赖关系网络与领域知识建模",{"2":{"536":1}}],["依赖关系混乱",{"2":{"297":1}}],["依赖哪些工具能实现",{"2":{"447":1}}],["依赖项",{"2":{"447":1}}],["依赖下一轮",{"2":{"432":1}}],["依赖人类持续的指令输入",{"2":{"419":1}}],["依赖工程师文化和产品敏锐度",{"2":{"387":1}}],["依赖运行时加载器",{"2":{"320":1}}],["依赖注入",{"2":{"315":1,"344":1,"939":1}}],["依赖前置",{"2":{"305":1}}],["依赖混乱的深坑",{"2":{"303":1}}],["依赖类型推断",{"2":{"263":1}}],["依赖倒置",{"2":{"255":1}}],["依赖目录",{"2":{"203":1}}],["依赖管理",{"0":{"192":1},"1":{"193":1,"194":1},"2":{"207":1}}],["依赖查询与请求瀑布流",{"2":{"98":1}}],["依赖查询",{"2":{"95":1}}],["依赖与分页",{"0":{"95":1}}],["依赖请求",{"0":{"89":1}}],["依赖",{"2":{"45":1,"201":1,"287":1,"432":1,"525":1,"646":5,"656":2,"731":1,"734":1,"788":5,"789":1,"818":1,"975":1}}],["依赖后端服务器稳定性",{"2":{"3":1}}],["传销",{"2":{"1041":1}}],["传达科技",{"2":{"962":1}}],["传入数据",{"2":{"717":1}}],["传入用户输入和会话",{"2":{"489":1}}],["传入符合",{"2":{"266":1}}],["传入",{"2":{"265":1,"486":1,"490":1,"755":1}}],["传入复杂类型",{"2":{"258":1}}],["传入解析后的数据",{"2":{"141":1}}],["传给",{"2":{"232":1}}],["传了空字符串",{"2":{"199":1}}],["传递参数",{"0":{"582":1}}],["传递动力的",{"2":{"383":1}}],["传递必要信息",{"2":{"197":1}}],["传递",{"2":{"174":1}}],["传递子组件",{"2":{"169":1}}],["传输",{"2":{"938":1}}],["传输适配层",{"2":{"938":2}}],["传输协议",{"2":{"936":1}}],["传输协议发送到客户端",{"2":{"934":1,"941":1}}],["传输手段",{"2":{"134":1}}],["传输机制",{"2":{"105":1,"108":1,"155":1}}],["传感器数据采集",{"2":{"115":1}}],["传统方案",{"2":{"933":1}}],["传统方式需要手写大量",{"2":{"639":1}}],["传统爬虫易被反爬虫拦截",{"2":{"843":1}}],["传统兼容入口",{"2":{"763":1}}],["传统做法需要工程师手工重新编码实现",{"2":{"728":1}}],["传统模式下",{"2":{"457":1,"461":1}}],["传统商业逻辑往往是先构思一个宏大的点子",{"2":{"377":1}}],["传统搜索兜底",{"2":{"518":1}}],["传统搜索在用户点击链接后结束",{"2":{"350":1}}],["传统搜索引擎的本质是流量分发与链接导航",{"2":{"349":1}}],["传统通过",{"2":{"297":1}}],["传统的机器学习都是通过",{"2":{"1017":1}}],["传统的文本测量",{"2":{"784":1}}],["传统的线性人生模式正在失效",{"2":{"605":1}}],["传统的",{"2":{"427":1,"959":1}}],["传统的软件工程思路以人为中心",{"2":{"403":1}}],["传统的单体应用可能更加合适",{"2":{"292":1}}],["传统的固定频率轮询",{"2":{"156":1}}],["传统",{"0":{"103":1},"2":{"102":1,"103":2,"132":1,"537":1,"933":1,"959":1,"965":1,"971":1}}],["传统动态网站",{"2":{"3":1}}],["边距",{"2":{"962":1}}],["边线几何体",{"2":{"763":1}}],["边管理",{"2":{"706":1}}],["边框工具类",{"2":{"647":1}}],["边问边改",{"2":{"559":1}}],["边写边补全",{"2":{"559":1}}],["边",{"2":{"505":1}}],["边走边看",{"2":{"428":1,"431":1}}],["边分解边规划",{"0":{"424":1},"2":{"427":1}}],["边分解边规划及基于语言模型的分解三类方法",{"2":{"409":1}}],["边缘计算路由",{"2":{"344":1}}],["边做边验",{"2":{"171":1}}],["边收边处理",{"2":{"151":1}}],["边发边传",{"2":{"134":1}}],["边读边播",{"2":{"106":1}}],["边传输",{"2":{"104":1}}],["边界定制",{"2":{"965":1}}],["边界保持",{"2":{"677":1}}],["边界约束",{"2":{"677":1}}],["边界条件",{"2":{"591":1}}],["边界条件等底层细节的敏感度下降",{"2":{"531":1}}],["边界条件等",{"2":{"177":1}}],["边界认知",{"2":{"541":1}}],["边界明确的",{"2":{"509":1}}],["边界界定",{"2":{"365":1}}],["边界",{"2":{"200":1}}],["边界时",{"2":{"74":1}}],["边界清晰",{"2":{"62":1}}],["边界划分过多导致架构碎片化",{"2":{"47":1}}],["打鸡血",{"2":{"1042":1}}],["打工人太忙",{"2":{"1005":1}}],["打印补全脚本",{"2":{"855":1}}],["打印一条消息",{"2":{"489":1}}],["打包输出",{"2":{"819":1}}],["打包成不同体积的产物",{"2":{"737":1}}],["打包入口模块",{"2":{"735":1}}],["打包配置",{"2":{"677":1}}],["打包的单元测试入口",{"2":{"677":1}}],["打包",{"2":{"647":1,"731":1}}],["打包为独立的",{"2":{"82":1}}],["打发时间的消极手段",{"2":{"612":1}}],["打造在不确定时代下依然能保持稳定现金流的",{"2":{"601":1}}],["打造一个最小可行性产品",{"2":{"361":1}}],["打开项目",{"2":{"564":1}}],["打开网站",{"2":{"561":1}}],["打开",{"2":{"515":1}}],["打动人心的永远不是冷峻的技术指标",{"2":{"495":1}}],["打标签与总结转发上",{"2":{"465":1}}],["打破认知茧房本身就是一种巨大的信息差",{"2":{"618":1}}],["打破",{"0":{"616":1},"1":{"617":1,"618":1}}],["打破书本与现实的壁垒",{"2":{"615":1}}],["打破信息差",{"2":{"603":1}}],["打破信息孤岛",{"2":{"548":1}}],["打破盲目追求速度的迷思",{"2":{"602":1}}],["打破它需要巨大的替代成本和风险",{"2":{"392":1}}],["打破规则",{"0":{"360":1}}],["打破了传统样式与结构分离的开发模式",{"2":{"959":1}}],["打破了",{"2":{"104":1}}],["打通前后端数据流",{"2":{"342":1}}],["打字机",{"2":{"106":1,"130":1}}],["尽最大努力将重要且紧急的事务快速干掉",{"2":{"1036":1}}],["尽最大努力让这个话题起到抛砖引玉的作用",{"2":{"1020":1}}],["尽管现代版本已支持",{"2":{"342":1}}],["尽管原生",{"2":{"140":1}}],["尽管处于不同层次",{"2":{"135":1}}],["尽管",{"2":{"112":1}}],["尽管从",{"2":{"103":1}}],["尽量多用",{"2":{"82":1}}],["业余翻了翻",{"2":{"1046":1}}],["业余跟老伙计保持财商与减肥方面的学习沟通",{"2":{"1046":1}}],["业余对着电脑可以坐半天的固有模式了",{"2":{"1043":1}}],["业余跨地域协作",{"2":{"1041":1}}],["业余闲着没事操着治理国家的心呢",{"2":{"1041":1}}],["业余时间是没有清单管理的",{"2":{"1037":1}}],["业余也喜欢学点东西",{"2":{"1022":1}}],["业界也演化出了几种成熟框架",{"2":{"426":1}}],["业界形成了三类主流方法",{"2":{"422":1}}],["业界演化出了两种主流的实现范式",{"2":{"414":1}}],["业界对智能体的认知也发生了变化",{"2":{"414":1}}],["业界不推荐在",{"2":{"216":1}}],["业界推荐的",{"2":{"211":1}}],["业界通常会采用退避轮询策略",{"2":{"128":1}}],["业界发展出了多种实时",{"2":{"102":1}}],["业务边界和极端场景",{"2":{"968":1}}],["业务价值篇",{"0":{"871":1},"1":{"872":1,"873":1,"874":1,"875":1,"876":1,"877":1,"878":1,"879":1,"880":1,"881":1,"882":1,"883":1,"884":1,"885":1,"886":1,"887":1}}],["业务渲染器",{"2":{"645":1,"646":1,"647":1,"650":1}}],["业务渲染层",{"2":{"645":1,"646":1,"647":1}}],["业务",{"2":{"643":1}}],["业务定位",{"2":{"636":1}}],["业务闭环",{"2":{"556":1}}],["业务落地的核心枢纽",{"2":{"544":1}}],["业务流程的顶层设计",{"2":{"542":1}}],["业务细节并",{"2":{"410":1}}],["业务爆发",{"2":{"387":1}}],["业务实体关系高度复杂的系统",{"2":{"342":1}}],["业务导向",{"2":{"283":1}}],["业务方法",{"2":{"281":3}}],["业务模块",{"2":{"280":2,"647":24,"677":39,"706":51,"735":79,"763":34,"819":31,"851":14,"908":10,"939":30,"980":25}}],["业务模块目录",{"2":{"275":1}}],["业务相关的概念和规则",{"2":{"278":1}}],["业务功能模块",{"2":{"274":1}}],["业务逻辑和编码规范",{"2":{"557":1}}],["业务逻辑",{"2":{"275":1,"279":1,"462":1}}],["业务逻辑层",{"2":{"274":1}}],["业务逻辑是否过滤了数据",{"2":{"199":1}}],["业务错误事件",{"2":{"150":1}}],["业务层数据消息",{"2":{"147":1}}],["业务场景和团队基建三者之间反复权衡",{"2":{"965":1}}],["业务场景",{"2":{"130":1}}],["业务场景诊断",{"2":{"46":1}}],["业务数据",{"2":{"109":1}}],["响应端",{"2":{"982":1}}],["响应审查反馈的规范流程",{"2":{"980":1}}],["响应审查反馈",{"2":{"979":1}}],["响应结束时调用",{"2":{"898":1}}],["响应规范",{"2":{"576":1}}],["响应时间等机器指标",{"2":{"537":1}}],["响应速度极快",{"2":{"522":1}}],["响应速度业内领先",{"2":{"522":1}}],["响应速度快",{"2":{"512":1}}],["响应迅速",{"2":{"435":1}}],["响应转换及日志记录",{"2":{"275":1}}],["响应类型",{"2":{"274":1}}],["响应拦截器",{"2":{"274":1,"342":1}}],["响应的",{"2":{"898":1}}],["响应的通用格式",{"2":{"260":1}}],["响应的标准实现与",{"2":{"155":1}}],["响应处理",{"0":{"260":1},"2":{"275":1,"891":1}}],["响应数据的类型",{"2":{"260":1}}],["响应数据的类型化",{"2":{"256":1}}],["响应数据的结构往往是固定的",{"2":{"256":1}}],["响应装饰器",{"2":{"153":1}}],["响应头",{"2":{"152":1}}],["响应头设置",{"2":{"152":1}}],["响应头中声明",{"2":{"105":1}}],["响应不同",{"2":{"152":1}}],["响应",{"2":{"103":1,"113":1,"115":1,"152":1,"164":1,"279":1}}],["响应模式",{"2":{"102":1,"153":1}}],["响应式适配",{"2":{"965":1}}],["响应式系统自动传播到",{"2":{"941":1}}],["响应式系统封装",{"2":{"939":1}}],["响应式",{"2":{"939":1}}],["响应式状态管理",{"2":{"939":1,"945":1}}],["响应式数据树",{"2":{"939":1}}],["响应式数据模型接口",{"2":{"951":1}}],["响应式数据模型",{"0":{"945":1},"2":{"938":1}}],["响应式数据绑定",{"2":{"935":1}}],["响应式且支持主题自定义的",{"2":{"340":1}}],["响应式架构的最小内核",{"2":{"175":1}}],["响应式能力",{"2":{"54":1}}],["响应式设计",{"2":{"11":1}}],["严谨安全",{"2":{"965":1}}],["严谨的评测体系",{"2":{"544":1}}],["严谨的数据推理和专业的文档输出能力",{"2":{"467":1}}],["严禁虚构或误导",{"2":{"494":1}}],["严禁在不同组件内重复",{"2":{"174":1}}],["严格时间表",{"2":{"1036":1}}],["严格阶段",{"2":{"1026":1}}],["严格管控",{"2":{"904":1}}],["严格分层的",{"2":{"788":1}}],["严格输出",{"2":{"534":1}}],["严格遵循五律平仄",{"2":{"507":1}}],["严格遵循了五言律诗的平仄与对仗",{"2":{"507":1}}],["严格遵守",{"2":{"506":1}}],["严格顺序",{"2":{"472":1}}],["严格匹配",{"2":{"450":1}}],["严格的执行秩序",{"2":{"969":1}}],["严格的工程规范",{"2":{"442":1}}],["严格的文本契约",{"0":{"109":1}}],["严格控制上下文窗口的",{"2":{"441":1}}],["严格解耦",{"2":{"342":1}}],["严格模式已开启",{"2":{"572":1}}],["严格模式",{"2":{"204":2,"212":1}}],["严格模式下的函数类型检查",{"2":{"203":1}}],["严格",{"2":{"203":1}}],["严格属性初始化检查",{"2":{"203":1}}],["严格空值检查",{"2":{"203":1}}],["严密的状态机能更好地管理这些复杂的",{"2":{"101":1}}],["严重影响",{"2":{"47":1}}],["企业中后台",{"2":{"965":1}}],["企业后台管理系统快速搭建",{"2":{"640":1}}],["企业后台管理系统存在大量重复性工作",{"2":{"639":1}}],["企业私有化部署",{"2":{"568":1}}],["企业为主",{"2":{"568":1}}],["企业场景必看合规",{"2":{"523":1}}],["企业文档编写",{"2":{"515":1}}],["企业合规有保障",{"2":{"512":1}}],["企业微信客服",{"2":{"512":1}}],["企业微信",{"2":{"512":1}}],["企业知识库问答",{"2":{"522":1}}],["企业知识库问答与",{"2":{"512":1}}],["企业知识库",{"2":{"512":1}}],["企业知识库等多样业务场景",{"2":{"512":1}}],["企业知识库等多场景",{"2":{"512":1}}],["企业",{"2":{"512":1,"522":2,"700":1}}],["企业接入等场景",{"2":{"512":1}}],["企业是一栋你建造的",{"2":{"380":1}}],["企业网站等",{"2":{"345":1}}],["企业级后台系统需要统一的",{"2":{"639":1}}],["企业级",{"2":{"344":3,"523":1,"567":1,"700":1,"934":1}}],["企业级工作台",{"2":{"101":1}}],["企业官网还是中小型电商",{"2":{"20":1}}],["超越传统的",{"2":{"536":1}}],["超越模型内核的能力",{"2":{"411":1}}],["超出能力边界",{"2":{"525":1}}],["超高速推理",{"2":{"523":1}}],["超长资料理解",{"2":{"521":1}}],["超长文档理解",{"2":{"512":1,"522":1}}],["超长上下文业界领先",{"2":{"521":1}}],["超长上下文",{"2":{"511":1,"512":1,"521":1}}],["超脱",{"2":{"507":1}}],["超市里算打折优惠",{"2":{"494":1}}],["超市里的软饮料多放在便宜的开放式货架上",{"2":{"391":1}}],["超级个体",{"0":{"540":1},"1":{"541":1,"542":1,"543":1},"2":{"540":1,"557":1,"1001":1}}],["超级开发者",{"2":{"457":1}}],["超级解答机",{"2":{"358":1}}],["超时分层",{"2":{"915":1}}],["超时",{"2":{"162":1,"166":1}}],["超时控制等",{"2":{"135":1}}],["超文本传输协议",{"2":{"103":1}}],["超大型复杂应用",{"2":{"341":1}}],["超大型",{"2":{"101":1}}],["超过最大重试次数",{"2":{"150":1}}],["超过",{"2":{"35":1}}],["端消费品",{"2":{"1041":1}}],["端的",{"2":{"948":1}}],["端的核心流式解析引擎",{"2":{"947":1}}],["端维护支持的",{"2":{"948":1}}],["端渲染入口",{"2":{"706":1}}],["端到端测试",{"2":{"980":1}}],["端到端流程",{"2":{"934":1}}],["端到端渲染正确性测试",{"2":{"763":1}}],["端到端的全栈类型推导",{"2":{"342":1}}],["端到端类型安全",{"2":{"342":1}}],["端浏览器使用长轮询",{"2":{"168":1}}],["端",{"2":{"101":1,"728":2,"939":1,"948":1}}],["端产品",{"2":{"100":1,"344":1}}],["端点定义",{"2":{"274":1}}],["端点作为天然的",{"2":{"98":1}}],["端点的场景",{"2":{"71":1}}],["端点",{"2":{"66":1,"523":1,"790":1,"860":1}}],["应保持扁平化",{"2":{"970":1}}],["应对",{"2":{"858":1,"859":1}}],["应对多阶段人生挑战的最核心",{"2":{"605":1}}],["应",{"2":{"451":1}}],["应当像是一组排列整齐",{"2":{"337":1}}],["应当被彻底淘汰",{"2":{"123":1}}],["应运而生",{"2":{"305":1}}],["应该花些精力来学习了解下计算机技术",{"2":{"1031":1}}],["应该对每个输入行缓冲调用的函数",{"2":{"899":1}}],["应该对每个输入字节块调用的函数",{"2":{"899":1}}],["应该自己判断时机",{"2":{"588":1}}],["应该写的核心内容",{"2":{"572":1}}],["应该写什么",{"0":{"572":1}}],["应该写成",{"2":{"438":1}}],["应该是描述改动受影响的模块名",{"2":{"451":1}}],["应该只约束确实需要的特性",{"2":{"263":1}}],["应该已被穷尽所有可能",{"2":{"232":1}}],["应该毫不犹豫选择",{"0":{"100":1,"101":1}}],["应通过",{"2":{"197":1}}],["应通过局部",{"2":{"174":1}}],["应剃除",{"2":{"185":1,"191":1}}],["应优先排除",{"2":{"181":1}}],["应优先引导",{"2":{"177":1}}],["应立即抛出",{"2":{"146":1}}],["应用在减肥这件小事上",{"2":{"1047":1}}],["应用与变革的路才刚刚开始",{"2":{"1018":1}}],["应用到工作与生活中越好",{"2":{"1013":1}}],["应用了多少呢",{"2":{"1011":1}}],["应用产品都在拥抱",{"0":{"963":1}}],["应用内嵌入",{"2":{"939":1}}],["应用布局",{"2":{"939":1}}],["应用状态",{"2":{"939":1,"942":1}}],["应用根节点",{"2":{"939":1}}],["应用根组件",{"2":{"274":1}}],["应用开发工具包",{"2":{"901":1}}],["应用开发框架之一",{"2":{"344":1}}],["应用控制",{"2":{"844":1,"851":1}}],["应用自动化",{"2":{"843":1}}],["应用和本地工具转换为确定性命令行接口的",{"2":{"843":1}}],["应用全局",{"2":{"715":1}}],["应用级状态",{"2":{"647":1}}],["应用部署",{"2":{"583":1}}],["应用部署服务",{"2":{"345":1}}],["应用生成",{"2":{"562":1}}],["应用广场",{"2":{"561":1}}],["应用或微信小程序",{"2":{"561":1}}],["应用架构缺乏标准化",{"2":{"901":1}}],["应用架构",{"2":{"525":1}}],["应用修改",{"2":{"484":1}}],["应用发起调用",{"2":{"439":1}}],["应用中需适配场景选择存储检索方式",{"2":{"410":1}}],["应用中",{"2":{"367":1}}],["应用程序的静态模块打包工具",{"2":{"343":1}}],["应用程序提供支持",{"2":{"343":1}}],["应用复杂度的提升",{"2":{"298":1}}],["应用服务",{"2":{"278":1,"280":1,"282":2}}],["应用主模块",{"2":{"275":1}}],["应用入口",{"2":{"274":1,"275":1}}],["应用配置",{"2":{"274":1}}],["应用配置和入口",{"2":{"274":1}}],["应用常量",{"2":{"274":1}}],["应用项目",{"2":{"216":1}}],["应用项目也进入了更深层次的开发迭代阶段",{"2":{"176":1}}],["应用这一原则的核心步骤可概括为",{"2":{"201":1}}],["应用奥卡姆剃刀的三个关键注意事项",{"0":{"200":1}}],["应用层",{"2":{"189":1,"190":1,"274":1,"277":1,"279":2,"280":2,"761":1,"762":2}}],["应用层协议",{"2":{"134":1}}],["应用的体验与传统软件截然不同",{"2":{"543":1}}],["应用的必经之路",{"2":{"456":1}}],["应用的表单中",{"2":{"414":1}}],["应用的输出处理后",{"2":{"414":1}}],["应用的",{"2":{"344":1}}],["应用的方式",{"2":{"339":1}}],["应用的基础",{"2":{"338":1}}],["应用的性能优化",{"2":{"305":1}}],["应用的诞生",{"2":{"169":1}}],["应用的交互模式决定了通信协议的选型",{"2":{"124":1}}],["应用类型",{"2":{"124":1}}],["应用场景示例",{"2":{"417":1}}],["应用场景",{"0":{"106":1,"116":1,"404":1},"1":{"405":1,"406":1,"407":1},"2":{"256":1}}],["应用向",{"2":{"103":1}}],["应用往往涉及大量的中间态保存",{"2":{"101":1}}],["应用还需要解决",{"2":{"59":1}}],["应用",{"0":{"487":1},"1":{"488":1,"489":1,"490":1},"2":{"4":1,"80":1,"99":1,"156":1,"226":1,"344":1,"548":1,"561":1,"562":2,"650":1,"715":1,"796":1,"875":1,"939":2,"961":1}}],["允许开发者通过字符串",{"2":{"919":1}}],["允许开发者",{"2":{"825":1}}],["允许开发者在不改动原始模块文件的情况下",{"2":{"325":1}}],["允许调用者添加",{"2":{"799":1}}],["允许直接用",{"2":{"771":1}}],["允许后端开发者通过编写",{"2":{"639":1}}],["允许运行测试",{"2":{"595":1}}],["允许的工具和流式输出选项",{"2":{"490":1}}],["允许以默认导入方式引入",{"2":{"322":1}}],["允许定义类型参数化的组件",{"2":{"252":1}}],["允许在运行时通过",{"2":{"203":1}}],["允许在组件订阅前对底层数据进行高性能的派生和过滤",{"2":{"98":1}}],["允许导入",{"2":{"203":1}}],["允许",{"2":{"203":1}}],["允许从不严格的导出",{"2":{"203":1}}],["允许为模块路径设置别名",{"2":{"203":1}}],["允许编译的",{"2":{"203":1}}],["允许服务器直接从缓存中获取之前计算好的结果",{"2":{"76":1}}],["具备完整工程任务自主执行闭环",{"2":{"567":1}}],["具备",{"2":{"558":3,"1001":1}}],["具备同理心的全栈懂得计算体验",{"2":{"556":1}}],["具备系统级视野",{"2":{"555":1}}],["具备联网搜索与图像理解",{"2":{"512":1}}],["具备类",{"2":{"512":1}}],["具备企业级接入能力",{"2":{"512":1}}],["具备强大的中文语义理解",{"2":{"512":1}}],["具备强大的中文语言理解和推理能力",{"2":{"512":1}}],["具备强大的推理与搜索增强功能",{"2":{"511":1}}],["具备强大的语义理解能力",{"2":{"425":1}}],["具备了在复杂环境中",{"2":{"427":1}}],["具备高度自主权的智能体助手",{"2":{"419":1}}],["具备长短期记忆",{"2":{"403":1}}],["具备极高的稳健性与技术栈包容性",{"2":{"342":1}}],["具象化为清晰的",{"2":{"350":1}}],["具名导出",{"2":{"307":1}}],["具有丰富的想象力和对文字的独特驾驭能力",{"2":{"506":1}}],["具有较高的复杂度",{"2":{"468":1}}],["具有较好的灵活性和适应性",{"2":{"424":1}}],["具有强交叉外部性",{"2":{"399":1}}],["具有唯一标识的对象",{"2":{"278":1}}],["具有层级模糊匹配能力",{"2":{"98":1}}],["具体如下图",{"2":{"1038":1}}],["具体渲染单元",{"2":{"676":1}}],["具体体现在三个层面",{"2":{"616":1}}],["具体要求",{"2":{"542":1,"545":1,"550":1,"551":1}}],["具体路径为",{"2":{"467":1}}],["具体",{"2":{"449":1}}],["具体短语",{"2":{"448":1}}],["具体的使用场景与边界",{"2":{"447":1}}],["具体步骤到检查清单",{"2":{"444":1}}],["具体怎么做",{"2":{"437":1}}],["具体说明",{"2":{"435":1,"437":1,"438":1,"439":1}}],["具体措施",{"2":{"291":1}}],["具体数据类型",{"2":{"260":1}}],["具体是什么类型",{"2":{"254":1}}],["具体实施步骤",{"0":{"12":1},"1":{"13":1,"14":1,"15":1,"16":1,"17":1}}],["想必很多人已经知晓",{"2":{"1048":1}}],["想一想",{"2":{"1043":1}}],["想从读书中学到点东西",{"2":{"1029":1}}],["想不到再次写文章时疫情政策已经调整",{"2":{"1019":1}}],["想起了大学老师曾经在某节课堂上",{"2":{"1008":1}}],["想孵化一个工具产品",{"2":{"631":1}}],["想深入理解一个概念",{"2":{"631":1}}],["想写一篇技术文章",{"2":{"631":1}}],["想得太多",{"2":{"621":1}}],["想在线学编程或使用",{"2":{"562":1}}],["想法在传递中不可避免地衰减",{"2":{"457":1}}],["想象几个场景",{"2":{"583":1}}],["想象一个",{"2":{"418":1}}],["想象一家处于爆发期的小型科技公司",{"2":{"387":1}}],["想象你需要复盘一个复杂项目的进度",{"2":{"417":1}}],["想要学习成长倒是可以多读点书",{"2":{"1029":1}}],["想要提升一些技能",{"2":{"1022":1}}],["想要获得更多",{"2":{"622":2}}],["想要让这套生命系统长期平稳运行",{"2":{"605":1}}],["想要练出这种能力",{"2":{"383":1}}],["想要",{"2":{"366":1}}],["想要更快的马",{"2":{"363":1}}],["想更快到达目的地",{"2":{"363":1}}],["想刷新列表",{"2":{"98":1}}],["想直观理解这个过程",{"2":{"75":1}}],["配德育与智育",{"2":{"1025":1,"1043":1}}],["配套",{"2":{"561":1}}],["配套脚本",{"2":{"441":1}}],["配套脚本和资源文件的能力文件夹",{"2":{"436":1,"441":1}}],["配图与动效",{"2":{"515":1}}],["配上",{"2":{"250":1}}],["配合懒加载",{"2":{"755":1}}],["配合现代",{"2":{"319":1}}],["配合使用可以构建灵活的配置体系",{"2":{"209":1}}],["配合状态码",{"2":{"163":1}}],["配合",{"2":{"100":1,"106":1,"662":1,"964":1,"965":1,"967":1,"970":1,"971":1}}],["配合它的",{"2":{"98":1}}],["配置作为",{"2":{"964":1}}],["配置示意如下",{"2":{"962":1}}],["配置示例",{"2":{"203":1}}],["配置目录",{"2":{"882":1}}],["配置动画数据",{"2":{"749":1}}],["配置动画参数",{"2":{"749":1}}],["配置和测试用例",{"2":{"706":1}}],["配置中的文本替换方法",{"2":{"662":1}}],["配置控件",{"2":{"647":1}}],["配置描述",{"2":{"641":1}}],["配置即可改变页面",{"2":{"640":1}}],["配置即页面",{"2":{"639":1}}],["配置来生成页面",{"2":{"639":1}}],["配置就能自动生成各种后台管理页面",{"2":{"639":1}}],["配置结构",{"0":{"594":1}}],["配置环境",{"2":{"583":1}}],["配置自定义模型",{"2":{"568":1}}],["配置自动构建",{"2":{"17":1,"20":1}}],["配置云端服务或触发",{"2":{"414":1}}],["配置极简",{"2":{"342":1}}],["配置指南",{"0":{"322":1}}],["配置共享基础库",{"2":{"291":1}}],["配置复杂度可以根据项目需求逐步升级",{"2":{"597":1}}],["配置复杂",{"2":{"287":1}}],["配置复用和继承",{"2":{"210":1}}],["配置层",{"2":{"274":1}}],["配置常量",{"2":{"274":1}}],["配置管理",{"2":{"226":1}}],["配置类型",{"2":{"216":1}}],["配置略有不同",{"2":{"214":1}}],["配置方式",{"2":{"210":1,"595":1}}],["配置分层原则",{"2":{"216":1}}],["配置分层",{"2":{"209":1}}],["配置覆盖",{"2":{"209":1}}],["配置继承",{"0":{"209":1},"2":{"209":1}}],["配置机制",{"2":{"205":1}}],["配置组合",{"0":{"204":1}}],["配置位置",{"2":{"202":1}}],["配置文件管控的内容",{"2":{"572":1}}],["配置文件",{"2":{"202":1,"203":2,"222":1,"275":1}}],["配置错误",{"2":{"198":1}}],["配置项目的",{"2":{"177":1}}],["配置选项接口",{"2":{"898":1}}],["配置选项",{"2":{"141":1,"210":1,"898":1}}],["配置合理的默认行为至关重要",{"2":{"94":1}}],["配置通过环境变量和",{"2":{"916":1}}],["配置通过",{"2":{"35":1}}],["配置到项目中",{"2":{"14":1}}],["配置",{"0":{"14":1,"222":1,"432":1},"2":{"87":1,"203":3,"274":1,"290":1,"419":1,"553":1,"576":1,"639":1,"647":12,"650":1,"661":1,"663":1,"677":24,"706":23,"715":2,"735":21,"763":16,"790":27,"819":15,"826":1,"851":14,"882":1,"908":5,"939":43,"962":1,"980":45,"994":1}}],["配置简单",{"2":{"6":1}}],["前期准备",{"0":{"1044":1}}],["前期需要投入大量时间进行领域建模",{"2":{"283":1}}],["前段时间看了毛爷爷在青年时期写下的",{"2":{"1043":1}}],["前两种是",{"2":{"971":1}}],["前沿变体",{"2":{"965":1}}],["前沿",{"2":{"965":1}}],["前沿视角公式",{"0":{"367":1}}],["前者的洞察与后者的产出必然判若云泥",{"2":{"626":1}}],["前者能通过思考拆解落地路径",{"2":{"622":1}}],["前者保障代码规范",{"2":{"226":1}}],["前面有空行分隔",{"2":{"581":1}}],["前面的系列文章主要有",{"2":{"272":1}}],["前瞻",{"2":{"565":1}}],["前瞻规划",{"2":{"565":1}}],["前身为",{"2":{"478":1}}],["前身是",{"2":{"48":1}}],["前",{"2":{"451":3,"567":1}}],["前额叶",{"2":{"421":1}}],["前额叶皮层负责复杂的认知规划",{"2":{"421":1}}],["前后端",{"2":{"458":1}}],["前后端物理分离的标准化开发流水线",{"2":{"344":1}}],["前后端边界清晰",{"2":{"342":1}}],["前后端类型零成本共享",{"2":{"342":1}}],["前后端共享类型定义",{"2":{"280":1}}],["前后端接口约束极其清晰",{"2":{"98":1}}],["前端到复杂的跨平台小程序基础框架的架构升级",{"2":{"1000":1}}],["前端实时渲染",{"2":{"923":1}}],["前端使用",{"2":{"923":1}}],["前端流式对话",{"0":{"923":1}}],["前端集成",{"2":{"904":1}}],["前端应用开发者",{"2":{"784":1}}],["前端应用服务",{"2":{"281":1}}],["前端组件总数",{"2":{"643":1}}],["前端组件库开发",{"2":{"256":1}}],["前端开发者",{"2":{"639":1,"729":1,"757":1,"813":1}}],["前端人力资源瓶颈",{"2":{"639":1}}],["前端界面快速出图",{"2":{"562":1}}],["前端工程师",{"2":{"700":1}}],["前端工程师可以编写复杂的",{"2":{"557":1}}],["前端工程化中的模块化",{"2":{"272":1}}],["前端页面还原代码",{"2":{"562":1}}],["前端页面",{"2":{"553":1}}],["前端从进阶到入院",{"2":{"346":2}}],["前端大全",{"2":{"346":2}}],["前端之神",{"2":{"346":2}}],["前端之巅",{"2":{"346":1}}],["前端之间共享一套类型声明模块时",{"2":{"326":1}}],["前端早读课",{"2":{"346":1}}],["前端边缘托管",{"2":{"345":1}}],["前端主导的敏捷全栈小队",{"2":{"344":2}}],["前端通过",{"2":{"342":1}}],["前端框架",{"2":{"342":1,"642":1}}],["前端拥有极高的数据按需组合自由度",{"2":{"342":1}}],["前端生态历经十余年",{"2":{"303":1}}],["前端领域专业的微信公众号",{"2":{"346":3}}],["前端领域的模块化并非一蹴而就",{"2":{"298":1}}],["前端领域模型",{"2":{"281":1}}],["前端领域模型设计",{"2":{"281":1}}],["前端模块化的演进历程",{"0":{"298":1}}],["前端业务逻辑",{"2":{"281":3}}],["前端也需要领域模型",{"2":{"281":1}}],["前端简化版",{"2":{"280":1}}],["前端",{"2":{"280":1,"376":1,"562":2,"573":1,"671":1,"901":1,"923":1}}],["前端分层架构",{"0":{"274":1}}],["前端项目通用配置",{"2":{"216":1}}],["前端项目",{"0":{"214":1},"2":{"211":1,"280":1}}],["前端传错了用户id",{"2":{"199":1}}],["前端可以像接水管一样",{"2":{"105":1}}],["前置校验",{"2":{"451":1}}],["前置输入",{"2":{"450":1}}],["前置信息",{"2":{"443":2}}],["前置概念",{"0":{"227":1}}],["前置步骤",{"2":{"171":1}}],["前置对齐",{"2":{"171":1}}],["前缀防止用户直接调用",{"2":{"925":1}}],["前缀宽度策略",{"2":{"796":1,"805":1}}],["前缀提取消息内容",{"2":{"141":1}}],["前缀",{"2":{"141":1,"904":1}}],["前的数据快照",{"2":{"98":1}}],["路径中的文件",{"2":{"962":1}}],["路径中依赖",{"2":{"788":1}}],["路径寻址",{"2":{"945":1,"951":1}}],["路径寻址的响应式树形数据结构",{"2":{"942":1}}],["路径使用",{"2":{"790":1}}],["路径解析",{"2":{"763":1,"819":1,"939":1}}],["路径解析和渲染",{"2":{"677":1}}],["路径图",{"2":{"706":1}}],["路径匹配正则表达式",{"2":{"661":1}}],["路径匹配缓存",{"2":{"652":1}}],["路径过滤不仅能避免噪音",{"2":{"578":1}}],["路径过滤",{"0":{"576":1}}],["路径别名配置建议",{"2":{"216":1}}],["路径映射",{"2":{"203":1,"216":1}}],["路径",{"2":{"98":1,"790":1,"792":1,"814":1,"860":1,"952":1,"956":1}}],["路由逻辑",{"2":{"741":1}}],["路由与可观测性",{"0":{"549":1}}],["路由与状态管理",{"0":{"341":1}}],["路由懒加载",{"2":{"313":1}}],["路由等问题",{"2":{"292":1}}],["路由管理器",{"2":{"341":2}}],["路由管理",{"2":{"286":1}}],["路由端点",{"2":{"275":1}}],["路由守卫等功能",{"2":{"341":2}}],["路由守卫",{"2":{"274":1}}],["路由定义",{"2":{"274":1}}],["路由常量",{"2":{"274":1}}],["路由级别",{"2":{"274":1}}],["路由配置",{"2":{"274":2}}],["路由层",{"2":{"274":2,"443":1}}],["路由如何组织",{"2":{"59":1}}],["路由匹配",{"2":{"59":1}}],["路由",{"2":{"53":1,"59":2,"442":1,"445":1,"549":1,"650":1,"653":1}}],["天至少减重",{"2":{"1047":1,"1048":1}}],["天地不仁",{"2":{"1042":1}}],["天花板的突破需要我们根据实际情况来持续丰富",{"2":{"1009":1}}],["天花板",{"2":{"1009":1}}],["天气组件场景",{"2":{"939":1}}],["天空盒",{"2":{"763":1}}],["天空",{"2":{"763":2}}],["天",{"2":{"419":1,"505":1}}],["天赋",{"2":{"363":1}}],["天生与",{"2":{"561":1}}],["天生适合",{"2":{"561":1}}],["天生一对",{"0":{"179":1}}],["天生支持复杂组合查询与确定性哈希",{"2":{"98":1}}],["天生契合",{"2":{"98":1}}],["天然适合库打包",{"2":{"731":1}}],["天然适配浏览器",{"2":{"307":1}}],["天然融入现代",{"2":{"342":1}}],["天然细粒度更新",{"2":{"341":1}}],["天然隔离",{"2":{"287":1}}],["天然契合",{"2":{"98":1}}],["天然互补",{"2":{"78":1}}],["天然支持动态下发和实时修改",{"2":{"641":1}}],["天然支持",{"2":{"3":1}}],["~5",{"2":{"956":2}}],["~500kb",{"2":{"763":1}}],["~1",{"2":{"956":2}}],["~12",{"2":{"931":1}}],["~144",{"2":{"931":1}}],["~13",{"2":{"98":1}}],["~0",{"2":{"784":1}}],["~211",{"2":{"699":1,"931":1}}],["~201",{"2":{"931":1}}],["~20",{"2":{"677":1}}],["~26kb",{"2":{"672":1}}],["~670",{"2":{"643":1}}],["~37k行",{"2":{"819":1}}],["~3",{"2":{"643":1}}],["~",{"2":{"130":1,"131":1,"570":3,"571":1,"580":1,"583":1,"597":1,"854":1,"859":1}}],["~418",{"2":{"931":1}}],["~45",{"2":{"677":1}}],["~4",{"2":{"98":1}}],["大学之路",{"2":{"1032":1}}],["大学时代",{"2":{"1031":1}}],["大数定律",{"2":{"1016":2}}],["大数据量时可以在多个帧中分块渲染",{"2":{"712":1}}],["大数据量降采样",{"2":{"706":1}}],["大数据量用",{"2":{"701":1}}],["大部分应该都没有这么做",{"2":{"1026":1}}],["大部分游客基本都把仅剩的铜板留在了宋城",{"2":{"1016":1}}],["大部分项目的首选",{"2":{"341":1}}],["大概率是走出校园后看到了人外有人",{"2":{"1022":1}}],["大概率是能取得预期结果的",{"2":{"1005":1}}],["大概率找不到最好答案",{"2":{"1005":1}}],["大概有",{"2":{"163":1}}],["大段用",{"2":{"796":1}}],["大段解释理论的长篇文字",{"2":{"572":1}}],["大小限制",{"2":{"860":1}}],["大小",{"2":{"715":1,"964":1}}],["大家在紧锣密鼓地创造产品和服务的数字属性",{"2":{"1041":1}}],["大家都知道做技术输出",{"2":{"617":1}}],["大家可以并行负责不同模块的开发与单元测试",{"2":{"297":1}}],["大规模分布式系统经验",{"2":{"551":1}}],["大幅降低接入与切换成本",{"2":{"523":1}}],["大纲结构答案",{"2":{"518":1}}],["大纲即可自动生成精美",{"2":{"515":1}}],["大纲生成与头脑风暴",{"2":{"515":1}}],["大纲",{"2":{"514":1,"518":1}}],["大语言模型的表现越来越让人惊艳",{"2":{"1017":1}}],["大语言模型的流式响应输出",{"2":{"875":1}}],["大语言模型",{"2":{"402":1,"1005":1}}],["大脑内部的组织问题",{"2":{"439":1}}],["大脑",{"2":{"402":1,"408":1,"414":1}}],["大成就靠建立正向的",{"2":{"386":1}}],["大而全的异步状态接管",{"2":{"342":1}}],["大而全的异步状态机",{"2":{"98":1}}],["大大提高你的阅读效率和理解深度",{"2":{"609":1}}],["大大提高了开发效率和团队协作能力",{"2":{"292":1}}],["大大提升开发效率",{"2":{"342":1}}],["大杀器",{"0":{"313":1}}],["大型数据集",{"2":{"706":1}}],["大型代码库的类型安全",{"2":{"702":1}}],["大型企业存量代码库的日常开发",{"2":{"568":1}}],["大型企业级应用",{"2":{"287":1}}],["大型存量代码库",{"2":{"568":1}}],["大型项目中的模块化设计",{"2":{"272":1}}],["大型项目的模块化配置",{"0":{"205":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1}}],["大多数系统本质上是反应性的",{"2":{"419":1}}],["大多数情况下我们不需要显式指定类型参数",{"2":{"263":1}}],["大多数云厂商的负载均衡器",{"2":{"125":1}}],["大项目再逐步分层",{"2":{"189":1}}],["大量元素动画",{"2":{"755":1}}],["大量快照测试",{"2":{"647":1}}],["大量后端开发者需要做后台管理系统但不熟悉前端技术",{"2":{"639":1}}],["大量隐性知识存于现实社会",{"2":{"614":1}}],["大量客户端同时高频重试",{"2":{"158":1}}],["大量",{"2":{"155":1,"647":2}}],["大容量资源下发",{"2":{"106":1}}],["大模型兴起",{"2":{"1011":1}}],["大模型相当火爆",{"2":{"1008":1}}],["大模型的过程中",{"2":{"1005":1}}],["大模型的输出具有非确定性",{"2":{"550":1}}],["大模型的训练依靠",{"2":{"369":1}}],["大模型本质上是概率性的",{"2":{"534":1}}],["大模型助手",{"2":{"512":1}}],["大模型是基于",{"2":{"360":1}}],["大模型",{"2":{"106":1,"358":1,"511":1,"512":1}}],["大致经历以下四个阶段",{"2":{"21":1}}],["评分筛选",{"2":{"934":1}}],["评估执行脚本",{"2":{"939":1}}],["评估执行效果",{"2":{"427":1}}],["评估核心库",{"2":{"939":1}}],["评估框架测试",{"2":{"939":1}}],["评估框架",{"2":{"939":1}}],["评估驱动开发",{"0":{"550":1}}],["评估其质量",{"2":{"426":1}}],["评估",{"2":{"170":1,"426":1}}],["评估维度",{"2":{"98":1}}],["评论列表",{"2":{"40":1}}],["评论区",{"2":{"15":1}}],["评论",{"2":{"4":1,"55":1}}],["回到公司上班的时候就觉得特别爽",{"2":{"1040":1}}],["回到初始状态并取消",{"2":{"825":1}}],["回答澄清问题",{"2":{"999":1}}],["回溯找断点",{"2":{"797":1}}],["回退",{"2":{"825":1}}],["回退到",{"2":{"796":1}}],["回退之前的",{"2":{"451":1}}],["回流的性能诅咒",{"2":{"784":1}}],["回滚流程",{"2":{"583":1}}],["回滚策略",{"2":{"583":1}}],["回滚机制足够健壮",{"2":{"538":1}}],["回滚数据",{"2":{"96":1}}],["回雪",{"2":{"508":1}}],["回雪流风素月斜",{"2":{"508":1}}],["回复时按照以下格式",{"2":{"504":1}}],["回复规范",{"2":{"504":1}}],["回复",{"2":{"494":1}}],["回顾我们自己在某个领域或专题进行深度研究的经历",{"2":{"468":1}}],["回顾全文",{"2":{"155":1}}],["回路",{"2":{"431":1}}],["回路也不是瞬间闭合的",{"2":{"388":1}}],["回路也不是瞬间闭合",{"2":{"388":1}}],["回路分为两种",{"2":{"386":1}}],["回归阅读的本质",{"2":{"613":1}}],["回归",{"2":{"556":1}}],["回归日常的高痛点场景寻找切入点",{"2":{"465":1}}],["回归平衡",{"2":{"387":1}}],["回归标准",{"2":{"272":1}}],["回归问题的本质与初心",{"2":{"201":1}}],["回给客户端",{"2":{"164":1}}],["回望这场从",{"2":{"132":1}}],["回调系统",{"2":{"910":1}}],["回调等",{"2":{"898":1}}],["回调函数",{"2":{"825":1}}],["回调支持在",{"2":{"685":1}}],["回调地狱",{"2":{"175":1}}],["回调契约",{"2":{"175":1}}],["回调可以通过返回值控制重试间隔",{"2":{"146":1}}],["回调",{"2":{"120":1,"175":1,"818":1,"834":1,"944":1,"949":1}}],["回调的自动化",{"0":{"119":1}}],["回来时总是看到最新数据",{"2":{"85":1}}],["且容易影响膝盖",{"2":{"1048":1}}],["且主食为半份糙米饭",{"2":{"1047":1}}],["且基于再次分解的结论标出预估耗时",{"2":{"1037":2}}],["且由于",{"2":{"1032":1}}],["且感觉比较实用",{"2":{"1027":1}}],["且将下面这张图作为自己的日常饮食原则",{"2":{"1026":1}}],["且系统践行了此嗜好",{"2":{"1020":1}}],["且初步实现了开放",{"2":{"1019":1}}],["且消费一天后还剩余的零钱铜板去赌一把",{"2":{"1016":1}}],["且大大压缩了存储空间",{"2":{"1015":1}}],["且向一些大佬咨询请教后",{"2":{"1005":1}}],["且覆盖优先级极难控制",{"2":{"970":1}}],["且保证不污染全局环境",{"2":{"968":1}}],["且得益于",{"2":{"967":1}}],["且严重破坏",{"2":{"965":1}}],["且会导致类名冗长",{"2":{"957":1}}],["且会破坏现有的高利润广告位",{"2":{"354":1}}],["且模型完全开源支持本地部署",{"2":{"522":1}}],["且访问更为便捷",{"2":{"510":1}}],["且突出重点",{"2":{"506":1}}],["且要求解读内容优雅",{"2":{"506":1}}],["且可扩展",{"2":{"491":1}}],["且借助低利润将潜在进入者挡在门外",{"2":{"392":1}}],["且常年运行",{"2":{"391":1}}],["且需要自己住进去的房子",{"2":{"380":1}}],["且前后端团队规模较大",{"2":{"342":1}}],["且",{"2":{"236":1,"310":1,"367":1,"965":1,"1000":1}}],["且该参数是联合类型时",{"2":{"234":1}}],["且值唯一",{"2":{"230":1}}],["且完整",{"2":{"173":1}}],["且接收方是服务端而非浏览器",{"2":{"131":1}}],["且无法实现真正的全双工并发",{"2":{"131":1}}],["且服务器永远处于",{"2":{"103":1}}],["且数据格式必须遵循一套严密的",{"2":{"109":1}}],["且数据流向单一",{"2":{"100":1}}],["且数据相对动态的页面",{"2":{"45":1}}],["且多个组件使用此",{"2":{"95":1}}],["变体状态机",{"2":{"965":1}}],["变体驱动",{"2":{"971":1}}],["变体驱动架构",{"2":{"965":1}}],["变体驱动原子化",{"2":{"965":1,"967":1}}],["变体驱动原子化架构",{"2":{"965":1}}],["变体驱动的原子化",{"0":{"964":1},"2":{"965":1}}],["变体",{"2":{"964":1,"971":2}}],["变形",{"2":{"814":1}}],["变形目标等",{"2":{"763":1}}],["变换操作",{"2":{"777":1}}],["变换矩阵",{"2":{"763":1,"777":1}}],["变换矩阵运算库",{"2":{"735":1}}],["变换属性",{"2":{"735":1,"766":1}}],["变换对象代理",{"2":{"735":1}}],["变换数据",{"2":{"735":1}}],["变换元素",{"2":{"735":1}}],["变换效果",{"2":{"735":3,"737":1}}],["变换控件",{"2":{"677":1}}],["变换",{"2":{"677":1,"679":1,"743":1,"766":1}}],["变换层级",{"2":{"676":1}}],["变换系统",{"2":{"672":1,"682":2}}],["变现逻辑的隐藏环节",{"2":{"625":1}}],["变得",{"2":{"546":1}}],["变得无比重要",{"2":{"359":1}}],["变式题",{"2":{"495":1}}],["变化",{"2":{"840":1,"858":1}}],["变化持续时间",{"2":{"834":1}}],["变化因子",{"0":{"384":1}}],["变化会自动触发新的请求并拥有独立缓存",{"2":{"95":1}}],["变更日志",{"2":{"735":1,"790":1,"882":1}}],["变更回调",{"2":{"685":1}}],["变更原子化",{"2":{"451":1}}],["变更",{"2":{"331":1,"592":1,"951":1}}],["变成一个自动运行的卷动机",{"2":{"1008":1}}],["变成有一定质量与正向效果的",{"2":{"1008":1}}],["变成纯算术操作",{"2":{"784":1}}],["变成",{"2":{"564":1,"960":1,"961":1,"965":1}}],["变成我们得心应手的伙伴",{"2":{"509":1}}],["变成没人敢动的",{"2":{"327":1}}],["变成了可以快速完成的",{"2":{"528":1}}],["变成了",{"2":{"38":1,"527":1,"555":1}}],["变量中硬编码",{"2":{"970":1}}],["变量只存数字通道",{"2":{"966":1}}],["变量跨端共享",{"2":{"965":1}}],["变量和组件的",{"2":{"959":1}}],["变量系统",{"2":{"647":1}}],["变量识别",{"2":{"646":1}}],["变量解析与过滤",{"2":{"646":1}}],["变量是节点",{"2":{"386":1}}],["变量流入或流出的速率",{"2":{"384":1}}],["变量",{"0":{"384":1,"966":1},"2":{"274":1,"383":2,"384":1,"655":1,"959":1,"965":4,"966":1,"971":1}}],["变量名",{"2":{"217":1}}],["变通方案",{"2":{"131":1}}],["变异",{"2":{"104":1}}],["数量",{"2":{"647":1,"805":1}}],["数线性增长",{"2":{"523":1}}],["数十万开源模型",{"2":{"523":1}}],["数十秒到分钟级",{"2":{"167":1}}],["数学家的故事",{"2":{"1011":1}}],["数学方面的短板更是凸显",{"2":{"1011":1}}],["数学库等核心模块",{"2":{"765":1}}],["数学运算节点",{"2":{"763":1}}],["数学工具",{"2":{"763":1}}],["数学平面",{"2":{"763":1}}],["数学公式解析",{"2":{"647":1}}],["数学与线性代数",{"2":{"763":1}}],["数学与代码推理能力突出",{"2":{"522":1}}],["数学与代码推理突出",{"2":{"512":1,"522":1}}],["数学与逻辑如何重构这个世界",{"2":{"598":1}}],["数学与逻辑能力顶尖",{"2":{"512":1}}],["数学与逻辑推理",{"2":{"512":1}}],["数学小管家",{"2":{"494":1}}],["数学不仅仅是得出正确答案",{"2":{"493":1}}],["数学",{"0":{"493":1},"2":{"493":1,"512":2,"522":4,"655":1,"1010":1}}],["数字化是趋势",{"2":{"1041":1}}],["数字化",{"2":{"1031":1,"1041":1}}],["数字",{"2":{"828":1}}],["数字员工",{"0":{"419":1},"2":{"419":1,"420":1,"421":1,"433":1,"542":1}}],["数字团队",{"2":{"413":1}}],["数字工程师",{"2":{"411":1}}],["数字合伙人",{"2":{"410":1}}],["数值阶梯",{"2":{"962":1}}],["数值格式化",{"2":{"819":1}}],["数值工具",{"2":{"819":1}}],["数值计算",{"2":{"706":1}}],["数值",{"2":{"706":1}}],["数值+货币",{"2":{"278":1}}],["数值后",{"2":{"146":1}}],["数分钟",{"2":{"130":1,"131":1}}],["数组告诉",{"2":{"962":1}}],["数组纹理",{"2":{"763":1}}],["数组转换",{"2":{"763":1}}],["数组存储所有动画实例",{"2":{"740":1}}],["数组等",{"2":{"655":1}}],["数组符合",{"2":{"266":1}}],["数组元素的类型",{"2":{"259":1}}],["数组处理等",{"2":{"256":1}}],["数组",{"2":{"95":1,"98":1,"266":1,"680":1,"684":1,"835":1}}],["数据更新自动触发",{"2":{"942":1}}],["数据更新时的过渡动画",{"2":{"706":1}}],["数据上下文",{"2":{"938":1,"939":1}}],["数据形状推断",{"2":{"851":1}}],["数据中的修饰器通过短的",{"2":{"744":1}}],["数据中的表达式文本",{"2":{"742":1}}],["数据来源",{"2":{"743":1}}],["数据来源庞杂且分散的大型业务系统",{"2":{"342":1}}],["数据项数量",{"2":{"719":1}}],["数据映射和视觉编码存取",{"2":{"713":1}}],["数据映射转换",{"2":{"647":1}}],["数据差分",{"2":{"713":1}}],["数据差分器",{"2":{"706":1}}],["数据采样",{"2":{"706":1}}],["数据堆叠",{"2":{"706":1}}],["数据变换",{"2":{"706":1}}],["数据变更时只更新相关组件",{"2":{"935":1}}],["数据变更",{"2":{"342":1}}],["数据变更与乐观更新",{"2":{"98":1}}],["数据集",{"2":{"706":1}}],["数据缩放",{"2":{"706":1}}],["数据源抽象",{"2":{"706":1,"713":1}}],["数据维度信息",{"2":{"706":1}}],["数据恢复",{"2":{"706":1}}],["数据模型层",{"2":{"706":1}}],["数据模型",{"2":{"702":1}}],["数据模型类型",{"2":{"274":1}}],["数据点时支持分帧渲染",{"2":{"701":1}}],["数据报告",{"2":{"700":1}}],["数据服务契约",{"2":{"663":1}}],["数据域",{"2":{"663":1}}],["数据接收器",{"2":{"662":1}}],["数据从上往下流动",{"2":{"653":1}}],["数据管理器覆盖",{"2":{"735":1}}],["数据管理器",{"2":{"735":2}}],["数据管理系统",{"0":{"713":1},"2":{"706":1}}],["数据管理",{"2":{"650":1}}],["数据处理管道",{"2":{"717":1}}],["数据处理器等",{"2":{"711":1}}],["数据处理器",{"2":{"704":1,"706":1}}],["数据处理",{"2":{"647":1,"763":1}}],["数据绑定控件",{"2":{"647":1}}],["数据加载",{"2":{"647":1,"746":1}}],["数据加载时的即时",{"2":{"66":1}}],["数据作用域组件",{"2":{"647":1}}],["数据初始化",{"2":{"647":1}}],["数据与图表解耦",{"2":{"702":1}}],["数据与",{"2":{"641":1}}],["数据如何流动",{"0":{"631":1}}],["数据如何获取",{"2":{"59":1}}],["数据迁移时",{"2":{"592":1}}],["数据操作时",{"2":{"592":1}}],["数据安全",{"2":{"565":1}}],["数据安全优先",{"2":{"564":1}}],["数据能否出境",{"2":{"519":1}}],["数据驱动文档",{"2":{"515":1}}],["数据驱动型团队协作与知识管理场景",{"2":{"515":1}}],["数据可视化图表",{"2":{"671":1}}],["数据可视化的深度",{"0":{"475":1}}],["数据可视化等",{"2":{"46":1}}],["数据摘要和分析结果",{"2":{"471":1}}],["数据散落在多个平台",{"2":{"465":1}}],["数据仓库等",{"2":{"439":1}}],["数据在哪儿",{"2":{"439":2}}],["数据在部署前已渲染到",{"2":{"15":1}}],["数据清洗",{"2":{"462":1}}],["数据清洗规则",{"2":{"436":1}}],["数据清洗与报告框架搭建",{"2":{"406":1}}],["数据往往散落在物理文档",{"2":{"417":1}}],["数据分析等多场景",{"2":{"512":1}}],["数据分析摘要总结",{"2":{"474":1}}],["数据分析师",{"2":{"416":1,"471":1,"700":1}}],["数据分块连续传输",{"2":{"134":1}}],["数据类型",{"2":{"735":1}}],["数据类",{"2":{"411":1}}],["数据隐私法规对精细化广告的影响",{"2":{"400":1}}],["数据积累和品牌忠诚",{"2":{"393":1}}],["数据显示",{"2":{"366":1}}],["数据解读",{"2":{"366":1,"462":1}}],["数据看似完美",{"2":{"366":1}}],["数据过期更新和加载",{"2":{"342":1}}],["数据验证和格式转换",{"2":{"279":1}}],["数据填充",{"2":{"275":1}}],["数据传输对象",{"2":{"275":1}}],["数据请求和缓存",{"2":{"274":1}}],["数据请求逻辑",{"2":{"14":1}}],["数据缓存与同步策略",{"2":{"274":1}}],["数据访问",{"2":{"706":1}}],["数据访问层",{"2":{"274":1,"275":2}}],["数据访问更安全",{"2":{"60":1}}],["数据容器核心接口",{"2":{"719":1}}],["数据容器",{"0":{"261":1}}],["数据流动规则",{"2":{"653":1}}],["数据流",{"2":{"511":1,"744":1}}],["数据流职责",{"2":{"344":1}}],["数据流架构范式",{"2":{"342":1}}],["数据流的可追溯性",{"2":{"180":1}}],["数据流闭环",{"2":{"180":1}}],["数据流方向明确",{"2":{"177":1,"178":1}}],["数据的流动路径",{"2":{"179":1}}],["数据卡片",{"2":{"178":1}}],["数据结构往往是通用的",{"2":{"256":1}}],["数据结构",{"2":{"177":1}}],["数据占位符",{"2":{"171":1}}],["数据内容",{"2":{"153":1}}],["数据行以",{"2":{"141":1}}],["数据格式",{"2":{"152":1,"155":1,"846":1}}],["数据格式依然遵循",{"2":{"135":1,"155":1}}],["数据格式约定",{"2":{"134":1}}],["数据帧首部极为紧凑",{"2":{"115":1}}],["数据只能单向流动",{"2":{"103":1}}],["数据转换辅助函数",{"2":{"706":1}}],["数据转换函数",{"2":{"262":1}}],["数据转换器",{"2":{"98":1}}],["数据转换",{"0":{"95":1}}],["数据选择器发生错误时的统一处理边界",{"2":{"94":1}}],["数据并",{"2":{"92":1}}],["数据共享和分页加载等高级功能",{"2":{"91":1}}],["数据塞进",{"2":{"85":1}}],["数据绝对最新",{"2":{"63":1}}],["数据不会太旧",{"2":{"63":1}}],["数据获取与缓存",{"2":{"650":1}}],["数据获取与",{"0":{"342":1}}],["数据获取后",{"2":{"92":1}}],["数据获取摒弃",{"2":{"82":1}}],["数据获取逻辑放在服务端组件中",{"2":{"82":1}}],["数据获取的新范式",{"0":{"68":1},"1":{"69":1,"70":1,"71":1}}],["数据获取",{"2":{"59":1}}],["数据获取和渲染的额外耗时依然存在",{"2":{"54":1}}],["数据预取的编排",{"2":{"59":1}}],["数据实时性要求中等的数据看板",{"2":{"342":1}}],["数据实时性",{"2":{"45":1}}],["数据表",{"2":{"16":1}}],["数据库变更",{"2":{"587":1}}],["数据库类型",{"2":{"573":1}}],["数据库集成与一键部署",{"2":{"561":1}}],["数据库选型",{"2":{"542":1}}],["数据库或",{"2":{"411":1}}],["数据库或第三方",{"2":{"342":1}}],["数据库建模等子目标",{"2":{"408":1}}],["数据库连接或配置信息",{"2":{"301":1}}],["数据库访问",{"2":{"279":1}}],["数据库迁移",{"2":{"275":1,"583":1}}],["数据库配置",{"2":{"275":1}}],["数据库模型",{"2":{"275":1}}],["数据库操作",{"2":{"275":1}}],["数据库是否有该用户数据",{"2":{"199":1}}],["数据库查询逻辑错误",{"2":{"199":1}}],["数据库主键生成逻辑",{"2":{"196":1}}],["数据库",{"2":{"8":1,"11":1,"412":1,"515":2,"573":1}}],["数据层",{"2":{"6":1}}],["数据",{"2":{"6":1,"59":1,"135":2,"150":1,"274":1,"342":1,"643":1,"647":1,"650":1,"677":1,"728":1,"729":1,"766":1,"790":1,"939":1}}],["次优统计并调整周末时间的分配",{"2":{"1038":1}}],["次优先排日常起居",{"2":{"1037":1}}],["次进行数据聚焦查询",{"2":{"472":1}}],["次版本号",{"2":{"331":2}}],["次要或后台任务使用退避轮询",{"2":{"168":1}}],["次查询",{"2":{"160":1}}],["次等待",{"2":{"159":1}}],["次即可",{"2":{"94":1}}],["次通常太多",{"2":{"94":1}}],["你读书的目的是什么",{"2":{"1029":1}}],["你就能积累更多的信用",{"2":{"1007":1}}],["你就不再只是一个单纯的",{"2":{"303":1}}],["你使用的是",{"2":{"965":2}}],["你敲下",{"2":{"964":1}}],["你所看到的",{"2":{"620":1}}],["你们还没看到我刻苦读书的身姿吗",{"2":{"612":1}}],["你甚至可以把逻辑推理能力较强的",{"2":{"610":1}}],["你在本地可能需要更高的权限来做调试",{"2":{"596":1}}],["你在踩油门吗",{"2":{"389":1}}],["你调用",{"2":{"590":1}}],["你用",{"2":{"588":1}}],["你输入",{"2":{"585":1}}],["你从",{"2":{"555":1}}],["你为什么选这一个",{"2":{"533":1}}],["你也失去了监督",{"2":{"530":1}}],["你也可以用构造函数模式动态组合",{"2":{"248":1}}],["你才能更好地创作出优美的诗歌",{"2":{"506":1}}],["你将创作相应的诗歌",{"2":{"504":1}}],["你将积累起一个强大的",{"2":{"463":1}}],["你知道吗",{"2":{"494":1}}],["你是代码审查专家",{"2":{"591":1}}],["你是否有能力调试剩下那",{"2":{"555":1}}],["你是一位专业的诗人",{"2":{"504":1}}],["你是一位经验丰富的小学数学教师",{"2":{"494":1}}],["你是将自己视为被",{"2":{"466":1}}],["你不需要起任何复杂的类名",{"2":{"961":1}}],["你不需要告诉它什么时候上场",{"2":{"584":1}}],["你不需要一次性学会所有东西",{"2":{"466":1}}],["你不再需要为了迎合资本的审美而扭曲产品的初衷",{"2":{"379":1}}],["你现在在用",{"2":{"462":1}}],["你通过自然语言驱动",{"2":{"435":1}}],["你只得到了答案",{"2":{"608":1}}],["你只需给它一段手机屏幕录屏",{"2":{"418":1}}],["你只能访问两者共有的属性",{"2":{"242":1}}],["你只能访问所有成员都有的属性",{"2":{"233":1}}],["你只能安全访问",{"2":{"233":1}}],["你做得最好",{"2":{"396":1}}],["你觉得水冷",{"2":{"388":1}}],["你可能瞬间就顿悟了",{"2":{"387":1}}],["你可以用三个问题来定位自己的杠杆",{"2":{"462":1}}],["你可以重构哪些连接关系",{"2":{"389":1}}],["你可以轻松地在",{"2":{"335":1}}],["你可以轻松实现",{"2":{"92":1}}],["你可以通过拆分规则文件实现关注点分离",{"2":{"575":1}}],["你可以通过",{"2":{"202":1}}],["你贡献的优质代码越多",{"2":{"386":1}}],["你会怎么设计数据库",{"2":{"374":1}}],["你会发现",{"2":{"303":1,"375":1}}],["你已经从一个",{"2":{"337":1}}],["你拥有两者的全部属性",{"2":{"242":1}}],["你对",{"2":{"155":1,"530":1}}],["你好",{"2":{"136":1,"141":1,"144":1}}],["你需要以优雅",{"2":{"504":1}}],["你需要告知用户你仅专注于诗歌创作领域",{"2":{"504":1}}],["你需要礼貌地引导用户按照",{"2":{"504":1}}],["你需要有能力判断哪一个真正有效",{"2":{"460":1}}],["你需要",{"2":{"101":1}}],["你希望保持依赖树的纯净和",{"2":{"100":1}}],["你的后端技术",{"2":{"573":1}}],["你的前端技术",{"2":{"573":1}}],["你的项目文件",{"2":{"570":1}}],["你的角色",{"2":{"559":1}}],["你的任务是帮助用户通过诗歌表达情感",{"2":{"504":1}}],["你的核心目标是引导家长理解问题背后的思维逻辑",{"2":{"494":1}}],["你的判断力愈发精准",{"2":{"464":1}}],["你的判断力在哪里最强",{"2":{"462":1}}],["你的执行瓶颈",{"2":{"462":1}}],["你的优势",{"2":{"462":1}}],["你的洞察深度已经超越了",{"2":{"375":1}}],["你的成长曲线将在极短时间内迎来惊人的指数级跃升",{"2":{"361":1}}],["你的原创性",{"2":{"360":1}}],["你的利润率",{"0":{"354":1}}],["你的标准",{"2":{"95":1}}],["你的用户名",{"2":{"17":1}}],["旧版",{"2":{"706":1,"759":1}}],["旧版表格",{"2":{"647":1}}],["旧版表格渲染器",{"2":{"646":1,"647":1}}],["旧版叫",{"2":{"92":1}}],["旧习惯",{"2":{"613":1}}],["旧模式",{"2":{"555":1,"556":1,"557":1}}],["旧全栈",{"2":{"553":1}}],["旧的模式",{"2":{"68":1}}],["垃圾回收时间",{"2":{"92":1}}],["默认系统提示",{"2":{"986":1}}],["默认状态",{"2":{"964":1}}],["默认目录",{"2":{"948":1}}],["默认情况下",{"2":{"898":1}}],["默认验证",{"2":{"898":1}}],["默认子动画参数",{"2":{"834":1}}],["默认参数",{"2":{"834":2}}],["默认材质",{"2":{"759":1}}],["默认入口",{"2":{"706":1,"708":1}}],["默认加载动画效果",{"2":{"706":1}}],["默认不会主动扫描",{"2":{"481":1}}],["默认不会对此发出警告",{"2":{"232":1}}],["默认不抛出",{"2":{"342":1}}],["默认导入",{"2":{"311":1}}],["默认导出整个类",{"2":{"311":1}}],["默认导出与导入",{"0":{"311":1}}],["默认导出",{"2":{"307":1,"311":2}}],["默认排除",{"2":{"203":1}}],["默认包含所有",{"2":{"203":1}}],["默认为根路径",{"2":{"952":1}}],["默认为",{"2":{"203":1,"898":1}}],["默认配置下有时会导致意料之外的组件重渲染",{"2":{"342":1}}],["默认配置",{"2":{"125":1}}],["默认",{"2":{"94":1,"141":1,"203":1,"661":1,"836":1,"860":1,"891":1,"939":1}}],["默认值为",{"2":{"92":2}}],["默认重新拉取一次确保数据绝对同步",{"2":{"88":1}}],["新时代农民工也需要通过学习来了解国家发展方向",{"2":{"1043":1}}],["新的解决方案",{"2":{"1002":1}}],["新架构",{"2":{"939":2}}],["新架构中",{"2":{"771":1}}],["新字节块",{"2":{"892":1}}],["新年动画",{"2":{"735":1}}],["新版表格",{"2":{"647":1}}],["新版表格渲染器",{"2":{"646":1,"647":1}}],["新成员不知道如何正确初始化项目环境",{"2":{"583":1}}],["新成员也难以快速定位所需内容",{"2":{"575":1}}],["新手路线建议",{"2":{"559":1}}],["新手友好",{"2":{"559":1}}],["新手入门",{"2":{"518":1}}],["新模式",{"2":{"555":1,"556":1,"557":1}}],["新旧模式对比",{"2":{"555":1,"556":1}}],["新全栈",{"2":{"553":1}}],["新用户有较大免费",{"2":{"522":1}}],["新闻",{"2":{"518":2}}],["新一代",{"2":{"515":1}}],["新代码",{"2":{"509":1}}],["新项目脚手架初始化",{"2":{"454":1}}],["新项目应直接在",{"2":{"308":1}}],["新功能",{"2":{"451":1}}],["新功能开发",{"2":{"451":1}}],["新增组件只需定义",{"2":{"936":1}}],["新增",{"2":{"331":3,"768":1,"909":1}}],["新增功能",{"2":{"331":1}}],["新增业务功能时",{"2":{"283":1,"292":1}}],["新增了一个联合成员",{"2":{"232":1}}],["新增文章并发布后",{"2":{"17":1}}],["新鲜的",{"2":{"92":1}}],["多吃些蔬菜和水果",{"2":{"1047":1}}],["多少有点底气",{"2":{"1020":1}}],["多少次",{"2":{"314":1}}],["多样性已经是一个公认的优势",{"2":{"1014":1}}],["多样性红利",{"0":{"1014":1}}],["多强调产出",{"2":{"1008":1}}],["多写",{"2":{"1008":1}}],["多说",{"2":{"1008":1}}],["多思考",{"2":{"1008":1}}],["多读点书",{"2":{"1025":1}}],["多读",{"2":{"1008":1}}],["多读书",{"2":{"1008":1}}],["多听",{"2":{"1008":1}}],["多与别人沟通",{"2":{"1008":1}}],["多轮对话测试",{"2":{"980":1}}],["多轮对话与文档分析稳定",{"2":{"512":1}}],["多轮对话与代码能力",{"2":{"512":1}}],["多平台适配",{"2":{"994":1}}],["多平台运行",{"2":{"985":1}}],["多平台集成测试套件",{"2":{"980":1}}],["多平台",{"2":{"980":1}}],["多平台测试套件",{"2":{"979":1}}],["多租户一键换肤的绝对基石",{"2":{"966":1}}],["多",{"2":{"939":1}}],["多版本导出",{"2":{"939":1}}],["多框架实现",{"2":{"939":1}}],["多部分内容",{"2":{"915":1}}],["多提供商切换",{"2":{"901":1}}],["多层安全防御",{"2":{"845":1}}],["多动画时间编排",{"2":{"819":1}}],["多功能",{"2":{"812":1}}],["多字体语料对比",{"2":{"790":1}}],["多浏览器多宽度行级对比",{"2":{"790":1}}],["多阶段编译管道",{"2":{"770":1}}],["多视口相机",{"2":{"763":1}}],["多项式贝塞尔曲线计算",{"2":{"735":1}}],["多轴平行",{"2":{"706":1}}],["多种策略",{"2":{"845":1}}],["多种浏览器连接方式",{"2":{"845":1}}],["多种入口",{"2":{"765":1}}],["多种交互类型",{"2":{"706":1}}],["多种可能性",{"2":{"250":1}}],["多格式输出",{"2":{"702":1,"815":1}}],["多格式文件解析",{"2":{"512":1,"522":1}}],["多行",{"0":{"803":1},"2":{"677":1,"810":1}}],["多边形偏移",{"2":{"777":1}}],["多边形轴",{"2":{"706":1}}],["多边形",{"2":{"677":1,"706":1}}],["多文件读写全自动",{"2":{"568":1}}],["多文件重构",{"2":{"565":1}}],["多文件规划",{"2":{"565":1}}],["多文件上下文感知补全",{"2":{"565":1}}],["多文件",{"2":{"564":1}}],["多文件对比摘要等重度阅读场景",{"2":{"522":1}}],["多文件对比",{"2":{"512":1,"522":1}}],["多维如位置",{"2":{"743":1}}],["多维数据存储",{"2":{"706":1}}],["多维指标体系设计",{"2":{"550":1}}],["多维信源抓取",{"2":{"491":1}}],["多次复用",{"2":{"583":1}}],["多次修正或出现异常",{"2":{"537":1}}],["多次享用",{"2":{"45":1}}],["多智能体协作",{"2":{"592":1}}],["多智能体编排",{"0":{"535":1}}],["多智能体系统通过",{"2":{"415":1}}],["多智能体系统",{"0":{"415":1},"1":{"416":1},"2":{"415":1,"438":1}}],["多模型聚合路由",{"2":{"523":1}}],["多模型可选",{"2":{"515":1}}],["多模态应用",{"2":{"902":1}}],["多模态应用开发",{"2":{"512":1}}],["多模态覆盖广",{"2":{"523":1}}],["多模态视觉",{"2":{"522":1}}],["多模态分析",{"2":{"521":1}}],["多模态支持完善",{"2":{"519":1}}],["多模态图文生成",{"2":{"512":1}}],["多模态内容分析",{"2":{"511":1}}],["多模态能力",{"2":{"510":1}}],["多模态表达",{"2":{"494":1}}],["多模态",{"0":{"418":1},"2":{"418":1,"511":1,"512":3,"522":2,"523":2}}],["多模态感知",{"2":{"403":1}}],["多人协作时的实时状态同步",{"2":{"875":1}}],["多人协作",{"2":{"515":1}}],["多人协同开发时",{"2":{"297":1}}],["多源知识融合",{"2":{"515":1}}],["多源导入",{"2":{"515":1}}],["多源资料导入",{"2":{"515":1}}],["多语言长文本语料",{"2":{"790":1}}],["多语言文本布局的复杂性",{"2":{"784":1}}],["多语言完整项目",{"2":{"562":1}}],["多语言翻译与润色",{"2":{"515":1}}],["多语言沟通",{"2":{"510":1}}],["多数人可以从",{"2":{"459":1}}],["多端渲染",{"2":{"936":1}}],["多端动画一致性交付的团队",{"2":{"729":1}}],["多端一致渲染",{"2":{"728":1}}],["多端复用的",{"2":{"344":1}}],["多端复用型大中型产品",{"2":{"342":1}}],["多端数据聚合",{"2":{"342":1}}],["多稳的真正基石",{"2":{"303":1}}],["多个",{"2":{"438":1,"472":1}}],["多个实例并行出发",{"2":{"416":1}}],["多个研究员可以同时在不同领域搜集数据",{"2":{"415":1}}],["多个子智能体可以并行运行",{"2":{"415":1}}],["多个子应用的加载可能影响首屏性能",{"2":{"292":1}}],["多个组件共享一份基础缓存但各自",{"2":{"98":1}}],["多重泛型等高阶用法",{"2":{"271":1}}],["多重约束示例",{"2":{"267":1}}],["多重约束允许泛型参数同时满足多个约束条件",{"2":{"267":1}}],["多重约束",{"0":{"267":1},"2":{"267":1,"270":1}}],["多处复用",{"2":{"270":1}}],["多选一",{"2":{"263":1}}],["多团队协作",{"2":{"191":1}}],["多余判断",{"2":{"187":1}}],["多余变量",{"2":{"187":1}}],["多余的变量",{"2":{"186":1}}],["多余实体",{"2":{"185":1,"191":1,"197":1,"200":1}}],["多余依赖",{"2":{"182":1}}],["多长时间内被认为是",{"2":{"92":1}}],["维持架构的清爽",{"2":{"170":1}}],["维持长连接",{"2":{"131":1}}],["维护与发布自动化脚本",{"2":{"980":1}}],["维护性",{"2":{"881":1}}],["维护成本高",{"2":{"785":1}}],["维护成本升高",{"2":{"183":1}}],["维护一个",{"2":{"740":1}}],["维护一个缓冲区",{"2":{"141":1}}],["维护全局动画列表",{"2":{"686":1}}],["维护全局",{"2":{"684":1}}],["维护位置",{"2":{"680":1}}],["维护",{"2":{"677":1,"680":1,"682":1}}],["维护底层数据存储与服务稳定",{"2":{"553":1}}],["维护税复杂度不仅是",{"2":{"365":1}}],["维护了一个极其严密的状态机",{"2":{"92":1}}],["维度名称",{"2":{"706":1}}],["维度",{"2":{"45":1,"103":1,"122":1,"134":1,"166":1,"415":1,"432":1,"441":1,"519":1,"553":1,"556":1,"643":1,"759":1,"958":1,"959":1,"961":1,"962":1,"971":1,"976":1}}],["订单上下文中的",{"2":{"281":1}}],["订单上下文",{"2":{"280":2}}],["订单计算服务",{"2":{"278":1}}],["订单聚合中的",{"2":{"278":1}}],["订单聚合",{"2":{"278":1}}],["订单",{"2":{"278":1,"291":1}}],["订单模块",{"2":{"275":1}}],["订单同步",{"2":{"130":1}}],["订单状态变更通知",{"2":{"131":1}}],["订单状态变更",{"2":{"120":1}}],["订单完成",{"2":{"119":1}}],["订单管理",{"2":{"18":1}}],["订阅路径变更",{"2":{"951":1}}],["订阅特定路径的变更",{"2":{"945":1}}],["订阅管理",{"2":{"939":1}}],["订阅消息",{"2":{"917":1}}],["订阅+广告",{"2":{"354":1}}],["订阅制先行",{"2":{"354":1}}],["订阅模式",{"2":{"286":1,"945":1}}],["订阅任务流事件",{"2":{"150":1,"153":1}}],["订阅",{"2":{"92":1,"565":2,"568":1,"941":1,"951":3}}],["切忌混淆两者的定位",{"2":{"969":1}}],["切入公式",{"2":{"465":1}}],["切入场景",{"2":{"465":1}}],["切入点不应是盲目堆砌前沿技术栈",{"2":{"377":1}}],["切图仔",{"2":{"466":1}}],["切图",{"2":{"448":1}}],["切换播放方向",{"2":{"825":1}}],["切换到产品经理的上帝视角",{"2":{"373":1}}],["切换用户时使用缓存数据实现即时显示",{"2":{"78":1}}],["切勿立即重试",{"2":{"146":1}}],["切",{"2":{"100":1}}],["切断了这种深度学习的路径",{"2":{"531":1}}],["切断",{"2":{"92":1,"387":1}}],["窗口重新聚焦",{"2":{"91":1}}],["此流程覆盖了",{"2":{"949":1}}],["此回调会被所有事件调用",{"2":{"898":1}}],["此库进一步增强",{"2":{"881":1}}],["此诗以七言律诗重构",{"2":{"508":1}}],["此诗以五言律诗刻画美人风姿",{"2":{"505":1}}],["此部分需以",{"2":{"494":1}}],["此外",{"2":{"392":1,"468":1,"828":1}}],["此过程不需要过多的逻辑烧脑",{"2":{"171":1}}],["此时可以在",{"2":{"596":1}}],["此时才正式获取",{"2":{"443":1}}],["此时的核心策略是将重复性的工作外包或交给代码",{"2":{"378":1}}],["此时",{"2":{"176":1,"387":1,"429":1}}],["此时全自动化与半自动化两条线并行推进",{"2":{"171":1}}],["此时客户端不需要",{"2":{"164":1}}],["此时若强行使用",{"2":{"131":1}}],["此时后端必须引入",{"2":{"117":1}}],["此处的匿名函数会抛出错误或返回",{"2":{"89":1}}],["此后被社会打磨得多了",{"2":{"1007":1}}],["此后",{"2":{"17":1}}],["还需要进一步实验下去",{"2":{"1049":1}}],["还需要解决",{"2":{"433":1}}],["还有些以业余娱乐的方式观察发现来推动",{"2":{"1042":1}}],["还有很多发现正等待着被发现",{"2":{"362":1}}],["还想在为数不多的业余时间推动",{"2":{"1034":1}}],["还通过啃一些跨专业的书来学习",{"2":{"1020":1}}],["还已经成为目前顶级",{"2":{"971":1}}],["还增加了运行时的解析成本",{"2":{"970":1}}],["还实现了",{"2":{"825":1}}],["还伴随着传播过程中的信息失真",{"2":{"620":1}}],["还不提高我的收入吗",{"2":{"612":1}}],["还不承认我是个人才吗",{"2":{"612":1}}],["还原",{"2":{"609":1}}],["还懂得领导",{"2":{"542":1}}],["还被夸",{"2":{"494":1}}],["还可包含配套文档",{"2":{"586":1}}],["还可能瞬间激发消费者的损失厌恶心理",{"2":{"392":1}}],["还可以使用",{"2":{"310":1}}],["还得我手动切回去",{"2":{"370":1}}],["还要",{"2":{"965":1}}],["还要考虑数据如何回流",{"2":{"556":1}}],["还要等多久",{"2":{"366":1}}],["还要求大语言模型",{"2":{"349":1}}],["还支持",{"2":{"345":1}}],["还是客观环境不允许呢",{"2":{"1026":1}}],["还是交流产品心得",{"2":{"1004":1}}],["还是警惕",{"2":{"615":1}}],["还是深谙",{"2":{"552":1}}],["还是多模态理解",{"2":{"519":1}}],["还是以最终价值交付为导向",{"2":{"466":1}}],["还是真正嵌入工作流",{"2":{"462":1}}],["还是能独立拆解目标",{"2":{"421":1}}],["还是结合外部非知识工具",{"2":{"417":1}}],["还是坚持写技术博客",{"2":{"388":1}}],["还是因减弱果",{"2":{"385":1}}],["还是因为它在特定高并发场景下更稳健",{"2":{"533":1}}],["还是因为它的响应速度快得不可思议",{"2":{"372":1}}],["还是因为文案恰好击中了我的软肋",{"2":{"372":1}}],["还是单纯的互利机制",{"2":{"373":1}}],["还是帮你杀了时间",{"2":{"373":1}}],["还是顶层的自我实现",{"2":{"373":1}}],["还是低估了操作门槛",{"2":{"369":1}}],["还是低频痒点",{"2":{"365":1}}],["还是学习成本太高",{"2":{"366":1}}],["还是导航不清晰",{"2":{"366":1}}],["还是",{"2":{"363":1,"366":1,"555":1}}],["还是静态html",{"2":{"345":1}}],["还是日益兴起的",{"2":{"316":1}}],["还是长时间挂起请求的长轮询",{"2":{"103":1}}],["还为现代构建工具",{"2":{"307":1}}],["还能活的不错",{"2":{"1038":1}}],["还能将研发团队与设计团队的协作效率提升到一个新的水平",{"2":{"966":1}}],["还能作为",{"2":{"965":1}}],["还能在代码中直接引用变量",{"2":{"966":1}}],["还能在正确时机唤醒正确规则",{"2":{"578":1}}],["还能在浏览器全局作用域下使用",{"2":{"306":1}}],["还能避免不必要的失误",{"2":{"396":1}}],["还能算得过账",{"2":{"363":1}}],["还能获得同样的类型安全保障",{"2":{"263":1}}],["还提供了一些高级特性",{"2":{"225":1}}],["还在处理",{"2":{"163":1,"164":1}}],["还会造成并发连接数瓶颈",{"2":{"131":1}}],["还会使",{"2":{"126":1}}],["还没加载完",{"2":{"89":1}}],["还将",{"2":{"73":1}}],["来改善不足的地方",{"2":{"1043":1}}],["来管理事务",{"2":{"1036":1}}],["来定期分析自身数据",{"2":{"1026":1}}],["来帮助找出一些适合自己实践的答案",{"2":{"1006":1}}],["来辅助我创作",{"2":{"1002":1}}],["来打破思维盲区",{"2":{"1002":1}}],["来打破隔离机制",{"2":{"961":1}}],["来判断当前运行的平台",{"2":{"985":1}}],["来从物理层面切断样式污染",{"2":{"961":1}}],["来约束作用域",{"2":{"957":1}}],["来自预设的",{"2":{"962":1}}],["来自",{"2":{"785":1,"858":1}}],["来自动化检查代码是否符合规范",{"2":{"219":1}}],["来精确计算",{"2":{"784":1}}],["来过滤和吸收",{"2":{"618":1}}],["来发掘",{"2":{"612":1}}],["来尊敬",{"2":{"610":1}}],["来经营",{"2":{"603":1}}],["来放大自身产品价值的开发者",{"2":{"552":1}}],["来批量自动评测弱模型或",{"2":{"550":1}}],["来对抗",{"2":{"525":1}}],["来对生成的",{"2":{"476":1}}],["来分割",{"2":{"506":2}}],["来获取相关的背景信息",{"2":{"501":1}}],["来完成",{"2":{"499":1}}],["来划分群体",{"2":{"397":1}}],["来日之尚可期",{"2":{"393":1}}],["来都来了",{"0":{"393":1},"2":{"393":2}}],["来抵消额外的存储空间成本",{"2":{"391":1}}],["来收敛",{"2":{"369":1}}],["来训练这种算法",{"2":{"368":1}}],["来兜底",{"2":{"367":1}}],["来解决生成代码的可维护性难题",{"2":{"1000":1}}],["来解决",{"2":{"340":1}}],["来达成",{"2":{"179":1}}],["来监听任务完成事件",{"2":{"163":1}}],["来实现打字机效果",{"2":{"488":1}}],["来实现",{"2":{"137":1}}],["来排查状态污染",{"2":{"101":1}}],["来保证数据的一致性",{"2":{"101":1}}],["来优雅处理",{"2":{"89":1}}],["来源引用",{"2":{"518":1}}],["来源",{"2":{"63":1,"472":1,"994":3}}],["返回包含当前值和取消订阅方法的对象",{"2":{"951":1}}],["返回当前值",{"2":{"946":1}}],["返回当前帧属性值",{"2":{"743":1}}],["返回工具调用",{"2":{"922":1}}],["返回实现了",{"2":{"916":1}}],["返回结果",{"2":{"912":1}}],["返回惰性结果对象",{"2":{"903":1}}],["返回重试间隔",{"2":{"879":1}}],["返回插值结果",{"2":{"743":1}}],["返回计算结果",{"2":{"742":1}}],["返回计算结果作为属性值",{"2":{"742":1}}],["返回求值结果",{"2":{"655":1}}],["返回元信息",{"2":{"576":1}}],["返回不同的入口文件",{"2":{"335":1}}],["返回副本",{"2":{"261":1}}],["返回与输入相同类型的值",{"2":{"258":1}}],["返回值类型为",{"2":{"258":1}}],["返回值位置",{"2":{"254":1}}],["返回值包含",{"2":{"196":1}}],["返回值",{"2":{"195":1,"259":1}}],["返回值控制是否重试",{"2":{"144":1,"150":1}}],["返回响应",{"2":{"162":1}}],["返回取消订阅函数",{"2":{"150":1}}],["返回数字",{"2":{"150":1}}],["返回等待时间",{"2":{"144":1}}],["返回一个",{"2":{"141":1}}],["返回",{"2":{"114":1,"143":1,"153":1,"652":1,"792":5,"799":1,"824":1,"860":1,"934":1}}],["返回的不透明句柄",{"2":{"792":1}}],["返回的结构化状态实时渲染出最合适的交互组件",{"2":{"543":1}}],["返回的",{"2":{"96":1,"141":1}}],["返回的数据作为参数",{"2":{"89":1}}],["返回给浏览器",{"2":{"27":1}}],["常规业务系统",{"2":{"965":1}}],["常规短连接请求",{"2":{"166":1}}],["常陷入",{"2":{"965":1}}],["常常就藏在这些",{"2":{"1007":1}}],["常常面临全局污染",{"2":{"957":1}}],["常常被视为实时通信的银弹",{"2":{"156":1}}],["常量枚举",{"2":{"818":1}}],["常量定义",{"2":{"817":1,"851":1}}],["常量定义与配置管理",{"2":{"274":1}}],["常量",{"2":{"274":1,"330":2,"735":1,"939":1}}],["常量层",{"2":{"274":1}}],["常用图表",{"2":{"706":1}}],["常用文档模板",{"2":{"436":1}}],["常用插件完善",{"2":{"341":1}}],["常用于构建后台管理系统",{"2":{"340":2}}],["常用于数据库模型",{"2":{"270":1}}],["常用于瀑布流请求",{"2":{"89":1}}],["常用",{"0":{"204":1},"2":{"313":1}}],["常见测试错误清单",{"2":{"989":1}}],["常见的有",{"2":{"1008":1}}],["常见的命令场景",{"2":{"583":1}}],["常见的原子能力还包括",{"2":{"414":1}}],["常见误区",{"2":{"464":1}}],["常见失败模式",{"2":{"445":1}}],["常见原因",{"2":{"47":1}}],["常见落地陷阱与解决方案",{"0":{"47":1}}],["节省下来的时间也就多了",{"2":{"1032":1}}],["节省请求",{"2":{"88":1}}],["节流函数",{"2":{"706":1}}],["节奏设计‌",{"2":{"505":1}}],["节点自动注入一个全局唯一的自定义属性",{"2":{"961":1}}],["节点和",{"2":{"961":1}}],["节点标识",{"2":{"777":1}}],["节点类型",{"2":{"777":1,"939":1}}],["节点契约",{"2":{"777":1}}],["节点图",{"2":{"770":1}}],["节点之间通过引用形成有向无环图",{"2":{"770":1}}],["节点初始化",{"2":{"765":1}}],["节点核心",{"2":{"765":1}}],["节点系统",{"2":{"765":1}}],["节点系统统一入口",{"2":{"763":1}}],["节点管理器",{"2":{"763":1}}],["节点工具",{"2":{"763":1}}],["节点访问器",{"2":{"763":1}}],["节点着色器编译链",{"2":{"765":1}}],["节点着色系统",{"0":{"770":1},"2":{"763":1}}],["节点着色层",{"2":{"761":1,"762":2}}],["节点材质",{"2":{"763":1}}],["节点加载器",{"2":{"763":1}}],["节点库入口",{"2":{"763":1}}],["节点基类",{"2":{"762":1,"763":1}}],["节点基础契约",{"2":{"663":1}}],["节点支持变换层级继承",{"2":{"761":1}}],["节点开销",{"2":{"755":1}}],["节点变换与嵌套",{"2":{"670":1}}],["节点形成关联",{"2":{"629":1}}],["节点复盘",{"2":{"431":1}}],["节点与",{"2":{"131":1}}],["节点间的状态同步变得极为复杂",{"2":{"126":1}}],["节点从队列中取出任务",{"2":{"126":1}}],["节点解析重试",{"2":{"101":1}}],["节点",{"2":{"45":1,"130":1,"131":1,"649":1,"653":1,"655":1,"706":1}}],["成绩",{"2":{"655":2}}],["成长路径",{"2":{"464":1,"617":1}}],["成熟度最高",{"2":{"562":1}}],["成熟的",{"2":{"550":1}}],["成熟的系统往往采用混合模式",{"2":{"433":1}}],["成熟稳定",{"2":{"287":1}}],["成功验收标准",{"2":{"451":1}}],["成功构建了一个支持长效运行的基础设施",{"2":{"419":1}}],["成功的关键因素之一",{"2":{"304":1}}],["成功分支",{"2":{"246":1}}],["成功",{"2":{"160":1,"891":1}}],["成功后",{"2":{"88":1}}],["成为了笔者最终选择的组合工具",{"2":{"1031":1}}],["成为了",{"2":{"1011":1}}],["成为了低成本构建高可用",{"2":{"477":1}}],["成为了架构师经过深思熟虑后的首选方案",{"2":{"156":1}}],["成为解决长时运行",{"2":{"419":1}}],["成为可能",{"2":{"307":1,"557":1,"1001":1}}],["成为现代",{"2":{"298":1}}],["成为现代前端开发的标配",{"2":{"294":1}}],["成为构建现代应用的核心原则",{"2":{"293":1}}],["成为",{"2":{"128":1,"466":1}}],["成本越高",{"2":{"551":1}}],["成本敏感但有一定预算",{"2":{"523":1}}],["成本预算",{"2":{"519":1}}],["成本估算",{"2":{"374":1}}],["成本较高",{"2":{"81":1}}],["成本低",{"2":{"20":1}}],["成本高",{"2":{"3":1}}],["则下午吃轻食",{"2":{"1045":1}}],["则下午正常吃饭",{"2":{"1045":1}}],["则可以应用于多个不同的任务",{"2":{"1017":1}}],["则可以像调用普通接口一样自定义",{"2":{"135":1}}],["则全权负责产物加工与工程化转化",{"2":{"969":1}}],["则认为连接丢失",{"2":{"860":1}}],["则能以更轻松",{"2":{"613":1}}],["则难以在知识学问上有所成就",{"2":{"613":1}}],["则以生动的视角重塑了职场协作的责任逻辑",{"2":{"602":1}}],["则退出循环",{"2":{"489":1}}],["则需要具备洞察趋势的前瞻视野",{"2":{"459":1}}],["则需要考虑其他双向通信协议",{"2":{"107":1}}],["则会成为",{"2":{"444":1}}],["则通知用户任务完成",{"2":{"429":1}}],["则修改计划清单",{"2":{"429":1}}],["则更像一位经验丰富的",{"2":{"414":1}}],["则更像是一次",{"2":{"104":1}}],["则专注于解答需要跨信息源整合",{"2":{"349":1}}],["则专注于表现层的状态调度",{"2":{"342":1}}],["则目录下所有",{"2":{"333":1}}],["则直接挂载到全局对象",{"2":{"306":1}}],["则按",{"2":{"306":2}}],["则该属性无法被赋值",{"2":{"237":1}}],["则",{"2":{"203":1}}],["则必须引入复杂设计",{"2":{"181":1}}],["则在我们设定的框架内高效填充实现细节",{"2":{"180":1}}],["则在跨系统的服务端间编织出一张事件驱动的网络",{"2":{"132":1}}],["则触发此回调",{"2":{"138":1}}],["则避免了维护长连接和心跳保活的额外资源损耗",{"2":{"135":1}}],["则极为简洁",{"2":{"127":1}}],["则自动回滚缓存",{"2":{"88":1}}],["则是",{"2":{"584":1}}],["则是数学准确率的护城河",{"2":{"494":1}}],["则是一种将软件",{"2":{"296":1}}],["则是服务器",{"2":{"118":1}}],["则是基于此机制建立的一套标准化应用层协议",{"2":{"108":1}}],["则是在两者之间寻找平衡的艺术",{"2":{"55":1}}],["则是画蛇添足",{"2":{"55":1}}],["乐观地修改缓存中的数据",{"2":{"96":1}}],["乐观更新缓存",{"2":{"96":1}}],["乐观",{"0":{"88":1,"96":1}}],["供行行走引擎使用",{"2":{"796":1}}],["供用户便捷调用",{"2":{"511":1}}],["供",{"2":{"470":1}}],["供另一个更高级的",{"2":{"411":1}}],["供应",{"2":{"344":1}}],["供外部手动触发缓存更新",{"2":{"87":1}}],["供构建工具拉取数据",{"2":{"9":1}}],["暴露所有公共方法",{"2":{"734":1}}],["暴露给组件和图表使用",{"2":{"706":1}}],["暴露外部数据与能力",{"2":{"439":1}}],["暴露的模块",{"2":{"288":1}}],["暴露",{"2":{"87":1,"704":1,"789":2,"913":1,"939":1}}],["|data",{"2":{"944":1}}],["|delete",{"2":{"944":1}}],["|update",{"2":{"944":2}}],["|flutter|",{"2":{"938":1}}],["|formitem|",{"2":{"653":1}}],["|form",{"2":{"653":1}}],["|number",{"2":{"835":1}}],["|glslbuilder",{"2":{"762":1}}],["|componentsmodel",{"2":{"944":1}}],["|comps",{"2":{"944":1}}],["|combo",{"2":{"653":1}}],["|create",{"2":{"944":1}}],["|crud",{"2":{"653":1}}],["|subscribe",{"2":{"945":1}}],["|surface",{"2":{"944":2}}],["|store",{"2":{"653":5}}],["|service",{"2":{"653":1}}],["|",{"2":{"87":1,"154":1,"160":2,"163":1,"164":2,"227":3,"229":6,"230":2,"231":5,"233":4,"234":9,"238":2,"239":2,"242":5,"243":6,"244":14,"246":2,"248":2,"249":6,"250":6,"259":2,"261":2,"262":3,"263":1,"281":2,"289":1,"318":2,"451":30,"482":2,"486":1,"489":1,"646":341,"649":29,"650":41,"652":83,"653":47,"654":50,"655":61,"656":96,"661":5,"662":4,"663":2,"676":170,"679":38,"680":23,"682":110,"683":95,"684":105,"685":39,"686":99,"692":18,"693":1,"705":175,"708":43,"709":21,"711":62,"712":28,"713":65,"714":82,"715":9,"719":12,"734":351,"737":20,"738":19,"740":81,"741":138,"742":124,"743":118,"744":100,"749":16,"750":17,"762":406,"765":13,"766":19,"768":72,"769":51,"770":52,"771":60,"772":44,"777":9,"778":2,"789":114,"792":29,"793":17,"795":46,"796":30,"797":30,"798":38,"799":16,"805":14,"806":3,"818":352,"821":36,"822":15,"824":62,"825":124,"826":60,"827":65,"828":62,"834":20,"835":7,"836":4,"860":1,"865":18,"891":3,"898":3,"907":344,"912":11,"915":131,"916":86,"917":97,"918":86,"925":7,"938":164,"941":13,"942":17,"944":66,"945":66,"946":73,"947":64,"948":71,"951":9,"965":83,"979":304,"982":26,"983":8,"985":89,"986":134,"987":96,"988":132,"989":106,"994":5}}],["||",{"2":{"16":1,"141":2,"146":1,"147":1,"148":1,"150":2,"194":1,"281":2,"315":2,"484":1,"489":1,"825":10,"826":11}}],["kt",{"2":{"939":1}}],["ktx2",{"2":{"763":1}}],["kwargs",{"2":{"865":3}}],["knip",{"2":{"790":2,"808":1}}],["know",{"2":{"351":1}}],["kotlin",{"2":{"933":1,"936":2,"938":1,"939":6,"941":1}}],["ko",{"2":{"790":2}}],["konvajs",{"2":{"695":1}}],["konvaeventobject",{"2":{"692":2}}],["konvaeventlistener",{"2":{"692":1}}],["konva",{"2":{"670":2,"671":1,"675":2,"676":1,"677":3,"679":4,"680":1,"682":1,"684":1,"688":1,"693":3,"695":3,"696":5}}],["khmer",{"2":{"790":1}}],["km",{"2":{"790":1}}],["kumo",{"2":{"790":1}}],["kubernetes",{"2":{"573":1}}],["k线",{"2":{"701":1}}],["kaleidoscope",{"2":{"677":1,"679":1}}],["kafka",{"2":{"126":1}}],["k8s",{"2":{"555":1}}],["kv",{"2":{"551":1}}],["kitchen",{"2":{"939":1}}],["kit",{"2":{"939":1}}],["kinsokuend",{"2":{"795":1}}],["kinsokustart",{"2":{"795":1}}],["kindle",{"2":{"1031":1}}],["kinds",{"2":{"793":2,"795":1,"805":1}}],["kind",{"2":{"230":5,"231":1,"232":1}}],["kimi",{"2":{"510":2,"512":3,"519":1,"522":2,"523":1}}],["kpi",{"2":{"387":1,"632":1}}],["k",{"2":{"262":4,"263":4,"268":4,"270":1,"372":1,"706":1,"834":1}}],["k2",{"2":{"242":1}}],["k12",{"0":{"492":1},"2":{"492":3,"493":1}}],["k1",{"2":{"242":1}}],["kb",{"2":{"85":1,"98":2}}],["kebab",{"2":{"330":1,"442":1,"450":1}}],["kevin",{"2":{"304":1}}],["keep",{"2":{"103":1,"136":1,"138":2,"139":1,"152":1,"789":2,"790":3,"792":1,"795":2,"805":2}}],["keeps",{"2":{"85":1}}],["keys",{"2":{"939":1,"947":1}}],["key>",{"2":{"916":1}}],["keyframetrack",{"2":{"763":1,"772":2}}],["keyframes",{"2":{"749":1,"971":1}}],["keyof",{"0":{"233":1,"239":1,"242":1,"268":1},"2":{"233":2,"239":3,"242":20,"250":6,"262":1,"263":2,"268":5,"270":4,"271":1}}],["key",{"2":{"16":1,"60":1,"85":3,"87":1,"89":1,"91":1,"92":7,"98":5,"100":1,"233":1,"239":3,"242":2,"250":4,"262":1,"263":1,"268":3,"289":1,"414":1,"481":2,"520":1,"523":2,"568":1,"662":1,"683":1,"712":1,"719":2,"741":3,"749":2,"851":2,"858":2,"865":2,"916":1,"954":1,"955":1}}],["key=your",{"2":{"481":1}}],["key=你的anon密钥",{"2":{"16":1}}],["key=",{"2":{"15":1,"16":1,"288":1,"955":1}}],["轮询优化策略",{"2":{"156":1}}],["轮询因其无状态",{"2":{"156":1}}],["轮询在整个",{"2":{"156":1}}],["轮询在",{"2":{"132":1}}],["轮询查询是更合理的架构",{"2":{"131":1}}],["轮询的主场",{"2":{"131":1}}],["轮询的讨论",{"0":{"123":1},"1":{"124":1,"125":1,"126":1,"127":1,"128":1}}],["轮询凭借其无状态",{"2":{"128":1}}],["轮询不仅没有消失",{"2":{"123":1}}],["轮询是上古时代的落后技术",{"2":{"123":1}}],["轮询是一种最朴素的实时通信方案",{"2":{"123":1}}],["轮询",{"2":{"85":1,"102":1,"130":1,"156":1}}],["样式抽象为配置对象",{"2":{"965":1}}],["样式写在模板里",{"2":{"965":1}}],["样式逻辑和业务逻辑高度内聚在一个",{"2":{"964":1}}],["样式工具",{"2":{"963":1}}],["样式拆分为最小",{"2":{"962":1}}],["样式还是被父组件覆盖了",{"2":{"961":1}}],["样式仅作用于当前组件的",{"2":{"961":1}}],["样式直接写在",{"2":{"959":1}}],["样式直接编写在",{"2":{"959":1}}],["样式聚合导出",{"2":{"939":1}}],["样式处理",{"2":{"819":1}}],["样式数据基类",{"2":{"735":1}}],["样式配置",{"2":{"709":1}}],["样式等",{"2":{"706":1}}],["样式",{"2":{"647":2,"650":1,"939":1}}],["样式系统",{"2":{"645":1,"647":1,"939":1}}],["样式文件",{"2":{"643":1}}],["样式与逻辑解耦度",{"2":{"965":1}}],["样式与",{"0":{"340":1}}],["样式表",{"2":{"338":1}}],["样式隔离困难以及维护成本高等问题",{"2":{"959":1}}],["样式隔离策略",{"2":{"291":1}}],["样式隔离",{"2":{"286":1,"960":1}}],["样式层",{"2":{"274":1}}],["样式方案的选择本质上是对开发效率",{"2":{"965":1}}],["样式方案",{"2":{"11":1,"642":1}}],["样板代码很多",{"2":{"85":1}}],["臃肿的许愿池",{"2":{"366":1}}],["臃肿",{"2":{"85":1,"1000":1}}],["若不能提高基础概率",{"2":{"1016":1}}],["若洞察不了关联",{"2":{"1007":1}}],["若为",{"2":{"952":1}}],["若读书脱离获取信息的目的",{"2":{"613":1}}],["若因此怨天尤人",{"2":{"612":1}}],["若无",{"2":{"581":1}}],["若暂无订阅",{"2":{"559":1}}],["若你心中有更美的",{"2":{"505":1}}],["若采用单智能体架构",{"2":{"468":1}}],["若采用传统同步",{"2":{"124":1}}],["若任务属于特定专业领域",{"2":{"443":1}}],["若想将这种惊叹内化为自己的",{"2":{"371":1}}],["若滥用会导致",{"2":{"200":1}}],["若数据存在",{"2":{"199":1}}],["若参数正常",{"2":{"199":1}}],["若项目无此需求",{"2":{"191":1}}],["若需进一步了解详细的规划机制",{"2":{"409":1}}],["若需求明确",{"2":{"200":1}}],["若需类型校验",{"2":{"188":1}}],["若需校验",{"2":{"187":1}}],["若需将博客扩展为电商网站",{"2":{"18":1}}],["若简单方案无法覆盖需求",{"2":{"181":1}}],["若发现问题",{"2":{"177":1}}],["若状态仅在特定子树内部流转",{"2":{"174":1}}],["若多个兄弟组件需要共享同一状态",{"2":{"174":1}}],["若业务涉及跨服务的事件通知",{"2":{"131":1}}],["若业务场景仅需服务端向客户端单向高频推送",{"2":{"131":1}}],["若业务需要客户端与服务端互发高频消息",{"2":{"131":1}}],["若强行使用",{"2":{"126":1}}],["若用户输入",{"2":{"489":1}}],["若用户",{"2":{"117":1}}],["若请求失败再回滚",{"2":{"91":1}}],["若有变化则触发",{"2":{"85":1}}],["即现阶段",{"2":{"1048":1}}],["即围绕人和社会自身来改善多个影响因素",{"2":{"1042":1}}],["即紧急不重要和不紧急不重要的事务",{"2":{"1036":1}}],["即便读遍全天下关于时间的书",{"2":{"1034":1}}],["即便仓库内的数据发生了更新",{"2":{"103":1}}],["即是行为配置",{"2":{"946":1}}],["即开即用",{"2":{"636":1}}],["即所谓的",{"2":{"606":1}}],["即所有使用了该",{"2":{"92":1}}],["即插即用",{"2":{"547":1}}],["即上下文工程能力",{"2":{"546":1}}],["即当你失去了手动解决问题的能力时",{"2":{"530":1}}],["即不仅有欲望且具备支付能力的",{"2":{"396":1}}],["即恶性循环",{"2":{"386":1}}],["即",{"2":{"358":1,"1007":1,"1043":1}}],["即类型为",{"2":{"232":1}}],["即使看到了短期的效果",{"2":{"1034":1}}],["即使有很多人在评论区质疑他们描述的",{"2":{"1018":1}}],["即使进入了隧道",{"2":{"1006":1}}],["即使是同一个人",{"2":{"1030":1}}],["即使是",{"2":{"970":1}}],["即使在隔离环境中",{"2":{"968":1}}],["即使文档隐藏也保持请求打开",{"2":{"898":1}}],["即使",{"2":{"538":1}}],["即使模块没有默认导出",{"2":{"203":1}}],["即使页面隐藏也保持连接",{"2":{"150":1}}],["即状态到",{"2":{"179":1}}],["即从顶层容器开始",{"2":{"171":1}}],["即连续两个",{"2":{"152":1}}],["即冒号后两个字符",{"2":{"143":1}}],["即为",{"2":{"138":1}}],["即随着任务等待时间延长",{"2":{"128":1}}],["即时消息",{"2":{"875":1}}],["即时口头指令",{"2":{"435":1}}],["即时灵活的对话指令",{"0":{"435":1}}],["即时响应",{"2":{"119":1}}],["即时通讯未读数刷新",{"2":{"167":1}}],["即时通讯",{"2":{"116":1}}],["即先更新",{"2":{"91":1}}],["即先返回缓存数据",{"2":{"85":1}}],["即可体验完整的",{"2":{"955":1}}],["即可理解并使用这些自定义组件",{"2":{"948":1}}],["即可一键生成可部署的",{"2":{"561":1}}],["即可恢复上下文",{"2":{"486":1}}],["即可实现事件驱动推送",{"2":{"131":1}}],["即可获取结果",{"2":{"127":1}}],["即可生成",{"2":{"124":1}}],["即可提供服务",{"2":{"51":1}}],["即可",{"2":{"2":1,"250":1,"333":1,"1048":1}}],["简化为",{"2":{"1008":1}}],["简化",{"2":{"785":1}}],["简化入口",{"2":{"706":1}}],["简化类型",{"2":{"706":1}}],["简化后的流式处理逻辑",{"2":{"488":1}}],["简化外部调用者的导入路径",{"2":{"312":1}}],["简称",{"2":{"276":1}}],["简陋设计",{"2":{"200":1,"201":1}}],["简陋",{"2":{"181":1,"200":1}}],["简洁接口",{"0":{"197":1}}],["简洁架构",{"0":{"191":1}}],["简洁本质",{"2":{"188":1}}],["简洁代码",{"0":{"188":1}}],["简洁是",{"2":{"181":1}}],["简洁",{"2":{"181":1,"200":2,"341":2,"518":1}}],["简洁性",{"2":{"181":1}}],["简",{"2":{"181":2}}],["简而言之",{"2":{"134":1}}],["简单性",{"2":{"936":1}}],["简单列表",{"2":{"647":1}}],["简单对话",{"2":{"482":1}}],["简单",{"2":{"403":1}}],["简单数据",{"2":{"403":1}}],["简单来说",{"2":{"402":1}}],["简单高效",{"2":{"308":1}}],["简单集成第三方系统",{"2":{"287":1}}],["简单优先的排查流程可节省80",{"2":{"199":1}}],["简单优先",{"2":{"199":1}}],["简单原因",{"0":{"198":1},"1":{"199":1},"2":{"198":1}}],["简单架构",{"0":{"189":1},"1":{"190":1,"191":1}}],["简单示例",{"2":{"91":1,"939":1}}],["简单示例如下",{"2":{"85":1}}],["简单易用",{"2":{"85":1}}],["简单的任务单智能体就能搞定",{"2":{"467":1}}],["简单的挂起等待即可",{"2":{"130":1}}],["简单的",{"2":{"81":1,"166":1}}],["简介与核心流程说明",{"0":{"85":1,"91":1}}],["zwsp",{"2":{"805":1}}],["z",{"2":{"782":1}}],["zz",{"2":{"735":1,"737":1,"744":1}}],["zxp",{"2":{"735":1}}],["zigzagmodifier",{"2":{"735":1,"737":1,"744":1}}],["zigzag",{"2":{"730":1}}],["zr",{"2":{"705":1}}],["zrendertype",{"2":{"719":1}}],["zrender",{"2":{"699":2,"702":1,"704":3,"705":3,"706":2,"708":1,"709":1,"717":1,"719":1}}],["zoom",{"2":{"769":1}}],["zodarray",{"2":{"946":1}}],["zodobject",{"2":{"946":1}}],["zodunion",{"2":{"946":3}}],["zod",{"2":{"576":1,"904":5,"907":1,"925":1,"935":1,"936":2,"939":2,"942":1,"946":2}}],["zone",{"2":{"16":1}}],["zhufu",{"2":{"790":1}}],["zh",{"2":{"456":2,"790":2,"851":1}}],["zero",{"2":{"281":1,"797":2,"805":1}}],["zustand",{"2":{"83":1,"174":1,"341":2,"642":1}}],["放眼望去",{"2":{"1022":1}}],["放到工作中也是同理",{"2":{"383":1}}],["放置所有项目通用的配置选项",{"2":{"216":1}}],["放在第一位",{"2":{"1013":1}}],["放在项目根目录下",{"2":{"202":1}}],["放在哪",{"2":{"174":1}}],["放入",{"2":{"82":1}}],["放弃传统广告位",{"2":{"354":1}}],["放弃绝对实时性",{"2":{"38":1}}],["放弃实时渲染能力",{"2":{"33":1}}],["体重又获得了",{"2":{"1047":1}}],["体重维持不变后基本不晓得怎么搞了",{"2":{"1046":1}}],["体重再次获得了",{"2":{"1046":1}}],["体重也因为周末饮食不当陆续出现反弹",{"2":{"1045":1}}],["体重获得了",{"2":{"1045":1}}],["体重降下去对工作",{"2":{"1043":1}}],["体型",{"2":{"1044":1}}],["体脂秤一台",{"2":{"1044":1}}],["体脂秤具有称",{"2":{"1041":1}}],["体育一道",{"2":{"1025":1,"1043":1}}],["体育之研究",{"2":{"1025":1,"1043":1}}],["体者",{"2":{"1025":1,"1043":1}}],["体系",{"2":{"960":1}}],["体",{"2":{"889":1}}],["体纹理",{"2":{"763":1}}],["体现",{"2":{"270":1,"570":1}}],["体验下宋朝的赌场",{"2":{"1016":1}}],["体验特性",{"2":{"904":1}}],["体验最流畅",{"2":{"568":1}}],["体验最好",{"2":{"82":1}}],["体验页面",{"2":{"523":1}}],["体验但中文本地化更优",{"2":{"515":1}}],["体验设计师",{"2":{"400":1}}],["体验极差",{"2":{"124":1}}],["体验",{"2":{"98":1,"342":1,"530":1,"559":2}}],["体积与组件数量无关",{"2":{"963":1}}],["体积小",{"2":{"962":1}}],["体积相对较大",{"2":{"342":1}}],["体积和初期学习成本",{"2":{"99":1}}],["体积较大",{"2":{"98":1}}],["体积因此大幅减少",{"2":{"61":1}}],["体积更小",{"2":{"60":1,"751":1}}],["才有可能在这个社会上走的更远",{"2":{"1022":1}}],["才算真正理解",{"2":{"610":1}}],["才算真正拥有了",{"2":{"389":1}}],["才咏湘妃竹",{"2":{"507":2}}],["才是决定一个",{"2":{"496":1}}],["才是决定一个项目能走多远",{"2":{"303":1}}],["才是我们在未来应当持续修炼的内功",{"2":{"495":1}}],["才会读取",{"2":{"443":1}}],["才会读取该技能的完整指令正文",{"2":{"443":1}}],["才会发起网络请求",{"2":{"95":1}}],["才开始进入",{"2":{"378":1}}],["才真正从理想变成了现实",{"2":{"326":1}}],["才需要显式指定泛型参数",{"2":{"263":1}}],["才需要稍微等一下",{"2":{"164":1}}],["才用",{"2":{"181":1}}],["才使用",{"2":{"82":1}}],["才能找到当下最适合的最优解",{"2":{"965":1}}],["才能找准系统变化的源头",{"2":{"384":1}}],["才能条理清晰地理解世界",{"2":{"609":1}}],["才能真正形成自己的思想观念",{"2":{"609":1}}],["才能真正将思维方法内化",{"2":{"608":1}}],["才能在信息时代中获得价值",{"2":{"626":1}}],["才能在未知中偶遇奇迹",{"2":{"598":1}}],["才能在架构层面做出正确决策",{"2":{"73":1}}],["才能迎来真正的价值膨胀",{"2":{"552":1}}],["才能让",{"2":{"509":1}}],["才能进入下一阶段",{"2":{"464":1}}],["才能创造增量",{"2":{"462":1}}],["才能准确地将自然语言目标转换为子任务",{"2":{"425":1}}],["才能保持竞争力",{"2":{"400":1}}],["才能定位产品的核心功能和价值",{"2":{"396":1}}],["才能输出高质量代码",{"2":{"169":1}}],["才能触发它",{"2":{"98":1}}],["才能确保首屏内容完整",{"2":{"57":1}}],["足够的空间去创造和提效",{"2":{"534":1}}],["足够健壮",{"2":{"170":1}}],["足够轻巧",{"2":{"112":1}}],["足够多的流式数据再统一发给客户端",{"2":{"107":1}}],["足够",{"2":{"81":1}}],["学会接受并尝试别人的建议",{"2":{"1047":1}}],["学会如何向",{"2":{"557":1}}],["学着梳理出一些健康原则",{"2":{"1025":1}}],["学着向外体验了",{"2":{"1005":1}}],["学科中",{"2":{"493":1}}],["学生",{"2":{"492":1}}],["学生提供一个",{"2":{"492":1}}],["学生成绩查询工具",{"2":{"190":1}}],["学术场景压力测试用例",{"2":{"980":1}}],["学术模式",{"2":{"518":1}}],["学术调研",{"2":{"518":1}}],["学术研究",{"2":{"512":1,"522":1}}],["学术论文精读",{"2":{"522":1}}],["学术论文",{"2":{"512":1}}],["学术",{"2":{"406":1,"518":1}}],["学术级的严谨性",{"2":{"349":1}}],["学习健康标准和知识",{"0":{"1025":1}}],["学习和娱乐勤快点",{"2":{"1022":1}}],["学习和记忆类名需要一定时间html",{"2":{"962":1}}],["学习方法论",{"2":{"1017":1}}],["学习数学基础知识与思维",{"2":{"1005":1}}],["学习后自主调用",{"2":{"982":1}}],["学习后自主触发",{"2":{"979":1}}],["学习笔记",{"2":{"628":1}}],["学习参考与演示展示",{"2":{"561":1}}],["学习+创作",{"2":{"515":1}}],["学习与成长",{"0":{"603":1}}],["学习与创作智能体",{"2":{"515":2}}],["学习与内容创作工作站",{"0":{"513":1},"1":{"514":1,"515":1}}],["学习指南",{"2":{"515":2}}],["学习利器",{"2":{"515":1}}],["学习神器",{"2":{"515":1}}],["学习策略",{"2":{"474":1}}],["学习者将精力投入理解内化",{"2":{"406":1}}],["学习资源与社区",{"0":{"346":1}}],["学习成本高",{"2":{"287":1}}],["学习成本增加",{"2":{"192":1}}],["学习曲线较陡峭",{"2":{"342":1}}],["学习曲线陡峭",{"2":{"283":1}}],["学习曲线",{"2":{"98":1,"341":1,"964":1}}],["学习",{"2":{"81":1,"414":2,"514":1,"515":1}}],["学到的五件事",{"0":{"54":1}}],["反省自身的不足会有新的领悟境界",{"2":{"1049":1}}],["反合理化系统",{"2":{"975":1}}],["反转确保用户数组中第一个中间件成为最外层",{"2":{"920":1}}],["反检测脚本注入",{"2":{"851":1}}],["反爬虫检测",{"2":{"851":1}}],["反爬虫检测等",{"2":{"851":1}}],["反向标志",{"2":{"834":1}}],["反向播放",{"2":{"825":2}}],["反向数据流涉及组件间的通信契约",{"2":{"178":1}}],["反序列化",{"2":{"777":1,"918":1}}],["反射器等",{"2":{"763":1}}],["反色",{"2":{"677":1}}],["反者道之动",{"2":{"620":1}}],["反批判",{"2":{"609":1}}],["反复追问",{"2":{"590":1}}],["反复咀嚼那些关键词时",{"2":{"457":1}}],["反模式",{"2":{"445":1}}],["反思阶段",{"2":{"426":1}}],["反思机制也通常遵循一个",{"2":{"426":1}}],["反思的基本原理是通过模型的自我审查和自我反馈来改进初步生成的内容",{"2":{"426":1}}],["反思",{"2":{"409":1,"426":1}}],["反思与评价",{"2":{"408":1}}],["反馈结果",{"2":{"918":1}}],["反馈节点",{"2":{"626":1}}],["反馈周期实现了量级压缩",{"2":{"529":1}}],["反馈",{"2":{"412":1,"622":1,"628":1}}],["反馈和参与共建的开发者就越多",{"2":{"386":1}}],["反馈以维持用户注意力",{"2":{"130":1}}],["反面案例",{"2":{"366":1}}],["反直觉的",{"0":{"350":1}}],["反之默认为",{"2":{"333":1}}],["反例",{"0":{"184":1,"187":1,"190":1,"193":1,"196":1},"2":{"182":1}}],["反而能充分享受新知的乐趣",{"2":{"609":1}}],["反而降低指令遵循度",{"2":{"572":1}}],["反而意味着识别平庸的能力变得空前昂贵",{"2":{"530":1}}],["反而让它们的价值更加凸显",{"2":{"180":1}}],["反而在特定的复杂业务场景中大放异彩",{"2":{"156":1}}],["反而是架构师经过深思熟虑后的首选方案",{"2":{"123":1}}],["反而增加部署复杂度",{"2":{"81":1}}],["反过来理解",{"2":{"54":1}}],["保障极速迭代",{"2":{"965":1}}],["保障极其昂贵的算力资源不被浪费",{"2":{"551":1}}],["保障数据安全",{"2":{"568":1}}],["保障数据不出域",{"2":{"568":1}}],["保证每天步数在",{"2":{"1047":1,"1048":1}}],["保证每日步数在",{"2":{"1046":1}}],["保证每日步数在5000",{"2":{"1045":1}}],["保证异步消息处理的串行性",{"2":{"917":1}}],["保证全局单例",{"2":{"679":1}}],["保证可追踪",{"2":{"653":1}}],["保证了整个项目视觉上的一致性",{"2":{"962":1}}],["保证了所有页面风格统一",{"2":{"639":1}}],["保证了变式题和趣味延伸的素材新鲜度",{"2":{"494":1}}],["保证了输出内容的结构化与教育深度",{"2":{"494":1}}],["保证方向不偏",{"2":{"433":1}}],["保证",{"2":{"342":1,"963":1,"1045":1}}],["保证哪怕重试无数次",{"2":{"160":1}}],["保存网络请求用于后续分析",{"2":{"858":1}}],["保存请求供分析",{"2":{"851":1}}],["保存起来",{"2":{"489":1}}],["保存编译信息以加速后续编译",{"2":{"203":1}}],["保存变更前的快照",{"2":{"96":1}}],["保活",{"2":{"147":1}}],["保留高性能原生动画路径",{"2":{"815":1}}],["保留空格",{"2":{"805":1}}],["保留模式图形树",{"2":{"672":1}}],["保留模式",{"2":{"670":1,"673":1,"675":1}}],["保留蓝链兜底",{"2":{"518":1}}],["保留",{"2":{"203":2}}],["保留到下次处理",{"2":{"143":1}}],["保留最后一行",{"2":{"141":1}}],["保护网关不报",{"2":{"163":1}}],["保护网关的核心手段",{"2":{"130":1}}],["保护密钥",{"2":{"80":1}}],["保鲜期",{"2":{"92":1}}],["保持业余通过看书或文章",{"2":{"1048":1}}],["保持健康一点的形体",{"2":{"1025":1}}],["保持流水线的纯粹与高效",{"2":{"969":1}}],["保持接缝清晰",{"2":{"798":1}}],["保持接口不变",{"2":{"568":1}}],["保持接口兼容性",{"2":{"523":1}}],["保持一致",{"2":{"750":1}}],["保持主文件简洁",{"2":{"586":1}}],["保持主对话上下文的清晰与聚焦",{"2":{"438":1}}],["保持命令的通用性",{"2":{"583":1}}],["保持单一职责",{"2":{"578":1}}],["保持开发",{"2":{"564":1}}],["保持回复内容直接针对用户需求",{"2":{"504":1}}],["保持每个",{"2":{"451":1}}],["保持上下文窗口干净",{"2":{"445":1}}],["保持各个文件的简洁性",{"2":{"442":1}}],["保持对各种通讯频道的监听",{"2":{"419":1}}],["保持绝对的简效",{"2":{"416":1}}],["保持敏感度",{"2":{"400":1}}],["保持敏锐",{"2":{"376":1}}],["保持饥饿",{"2":{"376":1}}],["保持真诚与",{"0":{"360":1}}],["保持非共识的好奇心",{"2":{"357":1}}],["保持源码目录结构",{"2":{"203":1}}],["保持代码的简洁与优雅",{"2":{"201":1}}],["保持清醒的判断",{"2":{"201":1}}],["保持长连接",{"2":{"152":1}}],["保持良好的可解析性和通用性",{"2":{"135":1}}],["保持架构简洁",{"2":{"130":1}}],["保持界面与服务器同步",{"2":{"91":1}}],["保持",{"2":{"74":1,"159":1,"169":1,"170":1,"743":1,"815":1}}],["保持最小的运行时刻面",{"2":{"54":1}}],["厨师从冰箱取出昨天熬好的高汤",{"2":{"77":1}}],["稳健防御架构",{"2":{"965":1}}],["稳定版",{"2":{"939":1}}],["稳定版协议规范",{"2":{"939":1}}],["稳定可靠",{"2":{"642":1}}],["稳定地送达线上",{"2":{"555":1}}],["稳定输出的终极杠杆",{"2":{"509":1}}],["稳定输出高质量的内容",{"2":{"494":1}}],["稳定",{"2":{"332":1}}],["稳定性",{"2":{"33":1}}],["稳住顾客",{"2":{"77":1}}],["交替反向",{"2":{"825":1}}],["交错选项",{"2":{"835":1}}],["交错延迟",{"2":{"819":1}}],["交错属性访问器",{"2":{"763":1}}],["交错缓冲区",{"2":{"763":1}}],["交代语境",{"2":{"609":1}}],["交易模型等底层框架",{"2":{"600":1}}],["交付时间压力",{"2":{"965":1}}],["交付时机",{"2":{"77":1}}],["交付边界",{"2":{"553":1}}],["交付速度呈指数级上升",{"2":{"464":1}}],["交叉领域的数字花园",{"2":{"1002":1}}],["交叉的",{"2":{"250":1}}],["交叉",{"2":{"236":1,"242":1,"249":1}}],["交叉类型组合",{"2":{"248":1}}],["交叉类型和接口继承都能实现类型组合",{"2":{"240":1}}],["交叉类型的",{"2":{"239":1}}],["交叉类型更",{"2":{"237":1}}],["交叉类型使用",{"2":{"236":1}}],["交叉类型",{"0":{"235":1,"240":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1}}],["交给",{"2":{"169":1}}],["交互生命周期",{"2":{"949":1}}],["交互事件通过协议回传",{"2":{"934":1}}],["交互对象",{"2":{"763":1}}],["交互控制器",{"2":{"758":1,"763":1}}],["交互动画",{"2":{"755":1}}],["交互需求",{"2":{"731":1}}],["交互反馈",{"2":{"729":1}}],["交互组件",{"2":{"706":1}}],["交互的模块",{"2":{"684":1}}],["交互的主要函数",{"2":{"482":1}}],["交互页面",{"2":{"640":1}}],["交互看板",{"2":{"632":1}}],["交互方式",{"2":{"568":1}}],["交互逻辑转化为可预测的软件工程实践",{"2":{"491":1}}],["交互逻辑开发",{"2":{"178":1}}],["交互效果展示",{"0":{"490":1}}],["交互自然",{"2":{"414":1}}],["交互中",{"2":{"410":1}}],["交互才刚刚开始",{"2":{"350":1}}],["交互驱动加载",{"2":{"313":1}}],["交互后流畅",{"2":{"63":1}}],["交互层仍然可以是完整的客户端应用",{"2":{"54":1}}],["交互",{"2":{"45":1,"553":1,"818":1,"933":1,"934":1}}],["类任务",{"2":{"982":3}}],["类继承",{"2":{"818":1}}],["类工具",{"2":{"706":1}}],["类",{"2":{"515":1,"672":1,"805":1,"858":2,"962":2,"970":1}}],["类别",{"2":{"411":1}}],["类名组合",{"2":{"967":1}}],["类名过长",{"2":{"967":1}}],["类名机制",{"2":{"965":1}}],["类名冲突",{"2":{"964":1}}],["类名局部化",{"2":{"960":1}}],["类名",{"2":{"330":2,"965":2}}],["类等特性结合",{"2":{"270":1}}],["类约束示例",{"2":{"269":1}}],["类约束用于限制泛型参数必须是特定类或其子类",{"2":{"269":1}}],["类约束",{"0":{"269":1},"2":{"270":1}}],["类同时满足",{"2":{"267":1}}],["类中使用不支持的方法或属性",{"2":{"264":1}}],["类实例",{"2":{"231":1}}],["类属性必须在构造函数中初始化",{"2":{"203":1}}],["类的方法",{"2":{"195":1}}],["类的第三方集成应用",{"2":{"123":1,"156":1}}],["类型提示",{"2":{"964":1}}],["类型管理子组件列表",{"2":{"946":1}}],["类型生成可执行闭包函数",{"2":{"946":1}}],["类型自动订阅",{"2":{"946":1}}],["类型枚举",{"2":{"834":1}}],["类型信息",{"2":{"822":1}}],["类型化数组创建工具",{"2":{"735":1}}],["类型组合",{"2":{"706":1}}],["类型推导",{"2":{"770":1,"964":1}}],["类型推导正确性测试",{"2":{"677":1}}],["类型推断",{"2":{"253":1,"254":1,"258":1}}],["类型标识",{"2":{"663":1}}],["类型都遵循此基础接口",{"2":{"663":1}}],["类型声明生成配置",{"2":{"819":1}}],["类型声明",{"2":{"790":1}}],["类型声明补丁",{"2":{"647":1}}],["类型声明文件",{"2":{"203":1}}],["类型为",{"2":{"482":1}}],["类型名",{"2":{"330":1}}],["类型引用不触发实际的模块加载逻辑",{"2":{"318":1}}],["类型导入不会生成运行时代码",{"2":{"318":1}}],["类型导入",{"2":{"318":1}}],["类型导入在编译为",{"2":{"318":1}}],["类型导出",{"2":{"318":1,"647":1}}],["类型导出与导入",{"0":{"318":1}}],["类型定义文件",{"2":{"735":1}}],["类型定义",{"2":{"274":1,"275":1,"331":1,"647":2,"728":1,"789":2,"821":1,"887":1,"939":4}}],["类型定义等基础设施代码",{"2":{"178":1}}],["类型层",{"2":{"274":1}}],["类型不符合",{"2":{"265":1}}],["类型不同",{"2":{"237":1}}],["类型或其子类型",{"2":{"265":1}}],["类型参数名不仅仅是占位符",{"2":{"263":1}}],["类型参数",{"2":{"258":1}}],["类型参数化",{"2":{"254":1}}],["类型像是一个",{"2":{"255":1}}],["类型意味着彻底放弃类型检查",{"2":{"255":1}}],["类型牺牲类型安全",{"2":{"255":1}}],["类型擦除",{"2":{"254":1}}],["类型安全是最大的保障",{"2":{"255":1}}],["类型安全",{"2":{"253":1,"266":1,"268":1,"881":1}}],["类型相同",{"2":{"237":1}}],["类型系统有助于长期维护和重构",{"2":{"881":1}}],["类型系统与模块化的深度融合",{"0":{"319":1}}],["类型系统的魅力所在",{"2":{"271":1}}],["类型系统的高阶能力",{"2":{"270":1}}],["类型系统的一个独特机制",{"2":{"234":1}}],["类型系统中的几个核心问题",{"2":{"255":1}}],["类型系统",{"2":{"250":1,"904":2}}],["类型系统和构建工具链",{"2":{"71":1}}],["类型正是解决这一问题的利器",{"2":{"232":1}}],["类型收窄全解",{"0":{"231":1}}],["类型收窄就变得自然且安全",{"2":{"230":1}}],["类型的消息中返回一个唯一的",{"2":{"486":1}}],["类型的严格校验",{"2":{"263":1}}],["类型的参数调用只有特定类型才有的方法时",{"2":{"254":1}}],["类型的对比",{"0":{"253":1}}],["类型的联合和交叉遵循分配律",{"2":{"243":1}}],["类型的联合",{"2":{"242":1}}],["类型的值同时拥有",{"2":{"239":1}}],["类型的标识",{"2":{"230":1}}],["类型的结构",{"2":{"230":1}}],["类型的",{"0":{"228":1,"235":1},"1":{"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"236":1,"237":1,"238":1,"239":1,"240":1}}],["类型是值的集合",{"2":{"227":1}}],["类型即集合",{"0":{"227":1},"2":{"227":1}}],["类型共享",{"2":{"207":1}}],["类型检查选项",{"2":{"203":1}}],["类型检查",{"2":{"177":1,"203":1,"204":1,"254":1,"322":1,"723":1}}],["类型检查与测试套件",{"2":{"177":1}}],["类型",{"0":{"249":1},"2":{"141":1,"203":2,"227":1,"232":1,"248":1,"253":1,"255":1,"260":1,"265":1,"418":1,"436":1,"482":1,"647":2,"661":1,"693":1,"701":1,"706":2,"709":1,"735":1,"789":3,"790":1,"797":1,"815":1,"834":1,"887":1,"942":1,"965":1}}],["类似于",{"2":{"713":1}}],["类似于轻量级的",{"2":{"442":1}}],["类似轻量版",{"2":{"341":1}}],["类似但更严格",{"2":{"203":1}}],["类似",{"2":{"95":1,"144":1,"345":1,"647":1,"709":1,"958":1}}],["类比拓展",{"2":{"494":1}}],["类比",{"2":{"77":1,"494":1}}],["逐层拆解这套混合架构的设计思路",{"2":{"965":1}}],["逐层向叶子节点实现",{"2":{"171":1}}],["逐渐淘汰运行时",{"2":{"965":1}}],["逐级传播到所有活跃的",{"2":{"827":1}}],["逐项调用",{"2":{"799":1}}],["逐项落实",{"2":{"431":1}}],["逐段累加宽度",{"2":{"797":2}}],["逐行解析为",{"2":{"947":1}}],["逐行提取",{"2":{"802":1}}],["逐行遍历",{"2":{"799":1}}],["逐行构建文本",{"2":{"798":1}}],["逐行宽度累加",{"2":{"792":1}}],["逐行诊断",{"2":{"790":1}}],["逐字断行",{"2":{"784":1}}],["逐帧推进",{"2":{"749":1}}],["逐帧处理变形",{"2":{"744":1}}],["逐像素绘制",{"2":{"699":1}}],["逐梯跨越",{"2":{"403":1}}],["逐块解码而非等待全部接收",{"2":{"141":1}}],["逐步澄清需求",{"2":{"987":1}}],["逐步构建",{"2":{"935":1}}],["逐步迁移",{"2":{"642":1}}],["逐步引入",{"2":{"597":1}}],["逐步演变为企业和个人不可或缺的核心生产力基础设施",{"2":{"419":1}}],["逐步重命名为",{"2":{"308":1}}],["逐步降低查询频率",{"2":{"128":1}}],["逐步填入空洞",{"2":{"75":1}}],["逐步填充",{"2":{"74":1}}],["逐一完成编译",{"2":{"50":1}}],["真的蛮有压力的",{"2":{"1034":1}}],["真的需要",{"2":{"155":1}}],["真空",{"0":{"614":1}}],["真人验证",{"2":{"375":1}}],["真好用",{"2":{"371":1}}],["真痛点",{"2":{"363":1}}],["真正成功的却不多呢",{"2":{"1026":1}}],["真正成熟的架构师",{"2":{"132":1}}],["真正融入到代码编写",{"2":{"1000":1}}],["真正分野的永远是内在的认知深度与执行密度",{"2":{"626":1}}],["真正有价值的信息",{"2":{"622":1}}],["真正高价值的信号就无法进入",{"2":{"621":1}}],["真正高阶的解决方案",{"2":{"383":1}}],["真正造成人与人之间差距的",{"2":{"619":1}}],["真正以求知为目的的人",{"2":{"613":1}}],["真正从",{"2":{"509":1}}],["真正做到",{"2":{"494":1}}],["真正具备了",{"2":{"486":1}}],["真正的独立出现在行之有效的相互依赖之前",{"2":{"1006":1}}],["真正的原因",{"2":{"622":1}}],["真正的财富来源于你能否为别人提供有价值的商品或服务",{"2":{"612":1}}],["真正的理解有一个更高的标准",{"2":{"610":1}}],["真正的解法并不在医院的处方笺里",{"2":{"605":1}}],["真正的成长不再是知识的被动堆砌",{"2":{"603":1}}],["真正的效能源于对复杂性的科学驾驭",{"2":{"602":1}}],["真正的商业高手正在重新回归本质",{"2":{"601":1}}],["真正的分野在于",{"2":{"466":1}}],["真正的杠杆能力取决于",{"2":{"462":1}}],["真正的全栈",{"2":{"458":1,"553":1}}],["真正的全双工持久连接方案",{"2":{"113":1}}],["真正的挑战在于业务转化",{"2":{"444":1}}],["真正的",{"2":{"367":1,"414":1,"458":1,"564":1}}],["真正",{"2":{"360":1,"536":1}}],["真正驾驭",{"2":{"169":1}}],["真正好的框架",{"2":{"54":1}}],["真实的营销与价值观契合",{"0":{"380":1}}],["真实评价",{"2":{"366":1}}],["真实",{"2":{"74":1}}],["外半径+顶点数",{"2":{"677":1}}],["外层可传入",{"2":{"489":1}}],["外围资源",{"2":{"442":1}}],["外挂",{"2":{"408":1}}],["外脑",{"2":{"356":1}}],["外部通过",{"2":{"945":1}}],["外部依赖",{"0":{"885":1}}],["外部",{"2":{"849":1,"851":2,"855":1}}],["外部纹理",{"2":{"763":1}}],["外部桥梁与",{"2":{"439":1}}],["外部连接通用协议",{"0":{"439":1}}],["外部性管理",{"2":{"399":1}}],["外部服务适配器",{"2":{"282":1}}],["外部服务调用",{"2":{"279":1}}],["外部服务",{"2":{"279":1}}],["外部只能通过聚合根访问聚合内部对象",{"2":{"278":1}}],["外部的静态",{"2":{"74":1}}],["外壳瞬间推送到浏览器",{"2":{"75":1}}],["外壳先见",{"2":{"45":1}}],["外壳",{"2":{"40":1,"75":1}}],["控制方法",{"2":{"834":1}}],["控制最终渲染的视锥体范围",{"2":{"766":1}}],["控制动画",{"2":{"737":1}}],["控制",{"2":{"482":4,"594":1,"686":1,"734":1,"735":1}}],["控制反转",{"2":{"344":1,"711":1}}],["控制器基类",{"2":{"763":1}}],["控制器",{"2":{"275":2,"282":1,"761":1,"762":1}}],["控制认知复杂度",{"2":{"169":1}}],["控制它在内存中保留多久才被垃圾回收",{"2":{"92":1}}],["控制台中",{"2":{"17":1}}],["控制台的",{"2":{"16":1}}],["控件",{"2":{"74":1,"647":1,"709":1}}],["先治病救命",{"2":{"1022":1}}],["先写代码",{"2":{"989":1}}],["先写测试",{"2":{"177":1}}],["先标准化",{"2":{"922":1}}],["先遍历行范围",{"2":{"798":1}}],["先想清楚这几件事",{"0":{"519":1}}],["先用",{"2":{"518":1,"559":1}}],["先加载元信息",{"2":{"436":1}}],["先出方案",{"2":{"431":1}}],["先将复杂任务拆解为多个子任务",{"2":{"423":1}}],["先分解后规划的优势在于任务与原任务联系紧密",{"2":{"423":1}}],["先分解后规划",{"0":{"423":1}}],["先由一个",{"2":{"414":1}}],["先问",{"2":{"366":1}}],["先问自己三个关键问题",{"2":{"173":1}}],["先打包",{"2":{"343":1}}],["先返回缓存数据",{"2":{"342":1}}],["先检查",{"2":{"199":1}}],["先怀疑",{"2":{"199":1}}],["先验证",{"2":{"198":1}}],["先编写测试用例",{"2":{"177":1}}],["先做灵魂三问",{"2":{"173":1}}],["先让",{"2":{"171":1,"375":1}}],["先让用户看到内容",{"0":{"74":1}}],["先获取当前登录的用户信息",{"2":{"89":1}}],["先驱",{"2":{"7":1}}],["作息无规律",{"2":{"1022":1}}],["作者推出的第四代时间管理模式",{"2":{"1006":1}}],["作者",{"2":{"973":1}}],["作者云中江树关于",{"2":{"496":1}}],["作为大脑的缓冲池而存在",{"2":{"1037":1}}],["作为大模型的缔造者",{"2":{"525":1}}],["作为工作几年后的打工人",{"2":{"1018":1}}],["作为工程师",{"2":{"364":1}}],["作为补充材料",{"2":{"989":1}}],["作为项目级指引",{"2":{"982":1}}],["作为主品牌色",{"2":{"962":1}}],["作为主力渲染器",{"2":{"936":1}}],["作为全局状态管理器",{"2":{"944":1}}],["作为全局入口",{"2":{"821":1}}],["作为统一入口发现",{"2":{"844":1}}],["作为底层渲染机制",{"2":{"640":1}}],["作为底层的",{"2":{"440":1}}],["作为产品工程师",{"2":{"528":1}}],["作为角色",{"2":{"506":1}}],["作为数据摘要",{"2":{"472":1}}],["作为数据修改的单元",{"2":{"278":1}}],["作为系统级杠杆的",{"2":{"466":1}}],["作为快速上手指南",{"2":{"445":1}}],["作为中转站",{"2":{"429":1}}],["作为中间件层",{"2":{"342":1}}],["作为效率工具",{"2":{"406":1}}],["作为当前备受瞩目的",{"2":{"348":1}}],["作为更高级架构的底层引擎",{"2":{"342":1}}],["作为编译器将声明式组件转换为高效且能直接操作",{"2":{"339":1}}],["作为筛选标准",{"2":{"181":1}}],["作为明确的",{"2":{"171":1}}],["作为最朴素的实时通信方案",{"2":{"156":1}}],["作为一个长期习惯来贯彻下去",{"2":{"1026":1}}],["作为一种娱乐和爱好",{"2":{"1030":1}}],["作为一种基于命名约定来规避命名冲突的早期方案",{"2":{"957":1}}],["作为一种",{"2":{"117":1}}],["作为一种无状态",{"2":{"103":1}}],["作为一条独立消息的终点",{"2":{"109":1}}],["作为",{"2":{"85":1,"92":1,"307":1,"483":1,"489":2,"559":1,"965":1,"971":1}}],["作为性能机制内建于渲染引擎之中",{"2":{"73":1}}],["作用效果从头传到尾就结束了",{"2":{"1007":1}}],["作用域化样式",{"2":{"959":1}}],["作用域配置",{"2":{"835":1}}],["作用域内注册的动画",{"2":{"822":1}}],["作用域管理器",{"2":{"822":1}}],["作用域",{"2":{"817":1,"835":1}}],["作用范围",{"2":{"571":1,"580":1}}],["作用于交叉类型",{"2":{"239":1}}],["作用于联合类型",{"2":{"233":1}}],["作用对象",{"2":{"210":1}}],["作用",{"2":{"66":1,"152":1,"443":1}}],["出上述哪种方式好",{"2":{"1030":1}}],["出错时",{"2":{"898":1}}],["出错如何处理",{"2":{"57":1}}],["出缓动控制点",{"2":{"749":1}}],["出一个应用",{"0":{"560":1},"1":{"561":1,"562":1}}],["出品的",{"2":{"515":1,"564":1}}],["出品的客户端数据获取库",{"2":{"78":1}}],["出现",{"2":{"174":1}}],["出于安全考虑不会默认放行",{"2":{"72":1}}],["闪烁",{"2":{"72":1}}],["点半期间吃早饭",{"2":{"1045":1}}],["点到",{"2":{"1045":1}}],["点左右才吃早饭",{"2":{"1043":1}}],["点云",{"2":{"763":1}}],["点光源",{"2":{"763":1}}],["点坐标对象池",{"2":{"735":1}}],["点插值",{"2":{"677":1}}],["点击按钮",{"2":{"934":1}}],["点击等",{"2":{"763":1}}],["点击",{"2":{"654":1}}],["点击率会提升",{"2":{"369":1}}],["点击瞬间切换",{"2":{"72":1}}],["点赞并参考他人案例",{"2":{"561":1}}],["点赞互动的实时更新",{"2":{"111":1}}],["点赞数",{"2":{"47":1}}],["懒加载设计",{"2":{"859":1}}],["懒加载正文",{"2":{"443":1}}],["懒加载",{"2":{"72":1,"288":1}}],["让游戏时间延长一点",{"2":{"1016":1}}],["让自己变得简洁",{"2":{"1009":1}}],["让两者形成一个增强回路",{"2":{"1008":1}}],["让团队从",{"2":{"963":1}}],["让团队标准和个人自由可以共存",{"2":{"597":1}}],["让能力匹配目标",{"2":{"622":1}}],["让知识真正为你所用",{"2":{"615":1}}],["让书籍成为连接自我与现实的桥梁",{"0":{"615":1}}],["让它对你的观点进行提问和反驳",{"2":{"610":1}}],["让它焕发新生",{"2":{"132":1}}],["让对方也能听懂",{"2":{"610":1}}],["让同一个",{"2":{"590":1}}],["让我能将精力聚焦于内容的创作",{"2":{"1003":1}}],["让我来",{"2":{"585":1}}],["让我们在信息密度足够高的节点上",{"2":{"629":1}}],["让我们理解",{"2":{"598":1}}],["让我们可以将常用的工作流封装为斜杠命令",{"2":{"579":1}}],["让我们能够像编写后端服务一样",{"2":{"476":1}}],["让我们再从一个更全景的角度来分析",{"2":{"443":1}}],["让我们从单纯的",{"2":{"400":1}}],["让我们知晓可能性的边界",{"2":{"376":1}}],["让我们先通过一个简单的",{"2":{"295":1}}],["让规则精准生效",{"0":{"576":1}}],["让没有编程基础的人也能独立做出可上线的",{"2":{"561":1}}],["让大模型统一",{"2":{"548":1}}],["让大家都能用",{"2":{"438":1}}],["让每一次变更都可追溯",{"2":{"537":1}}],["让每个模块各司其职",{"2":{"294":1}}],["让用户按照",{"2":{"506":1}}],["让用户使用小精灵来创作更多",{"2":{"506":1}}],["让用户以",{"2":{"506":1}}],["让用户尽快看到页面结构",{"2":{"77":1}}],["让用户尽可能快地看到页面结构",{"2":{"75":1}}],["让人回归平衡",{"2":{"1009":1}}],["让人专注于深度",{"2":{"628":1}}],["让人感触颇深",{"2":{"496":1}}],["让人们都能通过简单的",{"2":{"419":1}}],["让前沿技术精准落地",{"2":{"440":1}}],["让推理与行动交替进行",{"2":{"424":1}}],["让主脑始终保持清醒的大局观",{"2":{"415":1}}],["让真正想卖的选项脱颖而出",{"2":{"397":1}}],["让中间价",{"2":{"397":1}}],["让系统回归平衡",{"0":{"387":1}}],["让企业的发展速度与个人的生活节奏达成一种健康的平衡",{"2":{"379":1}}],["让外包承接繁琐",{"2":{"378":1}}],["让机器替代重复",{"2":{"378":1}}],["让在生成的洪流中锁定航向",{"2":{"376":1}}],["让你",{"2":{"362":1}}],["让你无需关心底层细节",{"2":{"138":1}}],["让工作充满",{"2":{"340":1}}],["让美与智能并进",{"2":{"340":1}}],["让全栈代码同构变得轻而易举",{"2":{"316":1}}],["让全局状态管理库回归其本质",{"2":{"85":1}}],["让未来类似的问题也能复用",{"2":{"271":1}}],["让使用者明确存储值的类型",{"2":{"263":1}}],["让编译器自动推断不仅代码更简洁",{"2":{"263":1}}],["让编译器能在每个分支中确定地知道当前类型",{"2":{"230":1}}],["让后续维护者一眼就知道这个泛型代表什么数据类型",{"2":{"263":1}}],["让后端跳过重复计算",{"2":{"77":1}}],["让开发者像搭积木一样直接在组件中堆砌样式",{"2":{"963":1}}],["让开发者在浏览器中零插件创建",{"2":{"757":1}}],["让开发者专注于业务逻辑和智能体行为的设计",{"2":{"478":1}}],["让开发者能将核心精力聚焦于产品逻辑本身",{"2":{"342":1}}],["让开发者从繁琐的编码劳动中解放出来",{"2":{"180":1}}],["让开发者无需关注数据缓存",{"2":{"91":1}}],["让",{"0":{"537":1},"2":{"177":3,"367":1,"415":1,"418":1,"422":1,"427":1,"431":1,"441":1,"445":1,"457":1,"525":1,"547":1,"548":1,"557":1,"559":3,"564":1,"568":1,"597":1,"628":1,"933":3,"958":1,"1001":1}}],["让回调成为刚性契约",{"0":{"175":1}}],["让应用可控",{"2":{"173":1}}],["让应用在感官上具有",{"2":{"85":1}}],["让设计师和产品提前验收",{"2":{"171":1}}],["让代码意图一目了然",{"2":{"270":1}}],["让代码自描述性更强",{"2":{"255":1}}],["让代码本身成为直观的",{"2":{"170":1}}],["让代码库逐渐腐化",{"2":{"169":1}}],["让数据沿着从输入",{"2":{"169":1}}],["让客户端能够",{"2":{"151":1}}],["让客户端和网关之间维持一条长达数十秒的",{"2":{"124":1}}],["让客户端数据获取也具备了",{"2":{"78":1}}],["让性能在框架层解决",{"0":{"72":1}}],["让静态内容与动态内容各取所需",{"2":{"41":1}}],["尤其推荐代码生成与数学推理场景",{"2":{"522":1}}],["尤其在看过",{"2":{"1005":1}}],["尤其在",{"2":{"338":1}}],["尤其是自然语言理解方面",{"2":{"1017":1}}],["尤其是注重样式安全性的中大型项目",{"2":{"960":1}}],["尤其是数字",{"2":{"518":1}}],["尤其是代码解释器",{"2":{"493":1}}],["尤其是产品高度同质化时",{"2":{"392":1}}],["尤其是bertrand",{"2":{"392":1}}],["尤其是",{"2":{"317":1}}],["尤其适合小程序",{"2":{"562":1}}],["尤其适合页面数量庞大但又无法全部预构建的大型网站",{"2":{"34":1}}],["尤其适用于扩展第三方类型",{"2":{"250":1}}],["尤为友好",{"2":{"71":1}}],["精神",{"2":{"1006":1}}],["精致阴影",{"2":{"963":1}}],["精度数据",{"2":{"790":4}}],["精度检查",{"2":{"790":1}}],["精度检查逻辑",{"2":{"790":1}}],["精度检查页",{"2":{"790":1}}],["精度检查和基准面复用同一语料",{"2":{"790":1}}],["精度验证",{"2":{"790":1}}],["精度处理",{"2":{"706":1,"819":1}}],["精灵材质",{"2":{"763":1}}],["精灵动画",{"2":{"677":1}}],["精灵",{"2":{"671":1,"763":1}}],["精灵寄语",{"2":{"504":2,"505":2,"506":1,"507":1,"508":1,"509":1}}],["精简版入口",{"2":{"677":1,"679":1}}],["精简版",{"2":{"647":1,"679":1,"735":1}}],["精简实现方案",{"2":{"201":1}}],["精进自身",{"2":{"622":1}}],["精力和能量",{"2":{"621":1}}],["精明的消费者就会全部流向另一家",{"2":{"392":1}}],["精准捕捉用户的真实痛点",{"2":{"1001":1}}],["精准识别",{"2":{"556":1}}],["精准识别出隐藏的正确答案",{"2":{"352":1}}],["精准定位",{"2":{"550":1}}],["精准控制",{"2":{"546":1}}],["精准截取关键帧",{"2":{"418":1}}],["精准填充到",{"2":{"414":1}}],["精准与持续繁荣的起点",{"2":{"381":1}}],["精准获取",{"2":{"342":1}}],["精准的代码引用",{"0":{"310":1}}],["精细交互用",{"2":{"701":1}}],["精细化缓存控制的重型单页应用",{"2":{"342":1}}],["精细的离线修改回滚",{"2":{"342":1}}],["精雕细琢",{"2":{"113":1}}],["精确定位",{"2":{"799":1}}],["精确匹配浏览器行为",{"2":{"809":1}}],["精确匹配",{"2":{"652":1}}],["精确计算",{"2":{"411":1}}],["精确控制每帧",{"2":{"815":1}}],["精确控制摘录的颗粒度",{"2":{"352":1}}],["精确控制缓存策略",{"2":{"82":1}}],["精确的组件",{"0":{"249":1}}],["精确限定取值空间",{"2":{"229":1}}],["精确",{"2":{"70":1}}],["精选专题",{"0":{"0":1,"347":1,"401":1,"524":1}}],["篇文章",{"2":{"70":1}}],["结论",{"2":{"790":1,"965":3}}],["结束数值",{"2":{"834":1}}],["结束当前帧",{"2":{"777":1}}],["结束值",{"2":{"749":1}}],["结束语",{"0":{"440":1,"476":1,"491":1}}],["结句",{"2":{"508":1}}],["结尾时鼓励用户继续创作",{"2":{"504":1}}],["结尾不加句号",{"2":{"451":1}}],["结尾",{"0":{"1049":1},"2":{"152":1,"899":1}}],["结构与实现分离",{"2":{"933":1}}],["结构呈现",{"2":{"518":1}}],["结构清晰",{"2":{"511":1}}],["结构设计‌",{"2":{"507":1}}],["结构的极度扁平",{"2":{"170":1}}],["结构",{"2":{"170":1}}],["结构化输出",{"2":{"902":1}}],["结构化输出等",{"2":{"901":1}}],["结构化数据提取",{"2":{"902":1}}],["结构化技能",{"2":{"845":1}}],["结构化沉淀",{"2":{"628":1}}],["结构化知识",{"2":{"628":1}}],["结构化封装",{"2":{"547":1}}],["结构化填空",{"2":{"527":1}}],["结构化是",{"2":{"509":1}}],["结构化",{"0":{"506":1},"1":{"507":1,"508":1},"2":{"509":2}}],["结构化提示词",{"2":{"496":1}}],["结构化的",{"0":{"494":1},"2":{"509":1}}],["结构化歧义",{"2":{"367":1}}],["结构化消息",{"2":{"143":1}}],["结构化字段",{"2":{"109":1}}],["结构高度契合",{"2":{"100":1}}],["结构连同内部的",{"2":{"74":1}}],["结果类型",{"2":{"777":1}}],["结果是",{"2":{"610":1}}],["结果是所有",{"2":{"239":1}}],["结果几秒后直接被烫伤",{"2":{"388":1}}],["结果可能会出乎意料",{"2":{"237":1}}],["结果",{"2":{"95":1,"449":1}}],["结合实际情况总结经验",{"2":{"1044":1}}],["结合实际的研发场景",{"2":{"99":1}}],["结合自己的习惯和节奏也可以慢慢上轨",{"2":{"1049":1}}],["结合自己在第一阶段的问题",{"2":{"1037":1}}],["结合自身现状分析",{"2":{"1043":1}}],["结合自身遇到的问题通过阅读学习来找答案",{"2":{"1030":1}}],["结合沉淀下来的原则",{"2":{"1026":1}}],["结合框架原生的隔离机制来解决",{"2":{"968":1}}],["结合了",{"2":{"965":1}}],["结合我们在",{"2":{"525":1}}],["结合文字描述进行综合分析",{"2":{"494":1}}],["结合调查研究",{"2":{"471":1}}],["结合内部",{"2":{"410":1}}],["结合相关框架与模式优化执行结果",{"2":{"409":1}}],["结合使用",{"2":{"338":1,"958":1}}],["结合使用才能达到极致性能",{"2":{"77":1}}],["结合设计模式的模块化实践",{"0":{"299":1},"1":{"300":1,"301":1,"302":1}}],["结合联合类型",{"2":{"262":1}}],["结合",{"2":{"70":1,"131":1,"182":1,"262":1,"270":1,"353":1,"487":1,"494":1,"964":1,"965":1,"968":1,"971":1}}],["结语",{"0":{"55":1,"132":1,"155":1,"180":1,"201":1,"226":1,"271":1,"293":1,"303":1,"309":1,"316":1,"326":1,"332":1,"337":1,"376":1,"420":1,"433":1,"466":1,"539":1,"597":1,"971":1}}],["都不是",{"2":{"1041":1}}],["都可以通过不同频率的正弦波叠加得出",{"2":{"1015":1}}],["都可以被封装为独立的",{"2":{"547":1}}],["都非常欢迎你联系我~",{"2":{"1004":1}}],["都非常适合使用泛型",{"2":{"256":1}}],["都必须反复使用",{"2":{"961":1}}],["都实现这个",{"2":{"909":1}}],["都通过",{"2":{"654":1}}],["都需要博采众长",{"2":{"618":1}}],["都配备独立的聊天记录和高达",{"2":{"437":1}}],["都会在后续的每一次交互中被严格执行",{"2":{"571":1}}],["都会让一部分曾经引以为傲的手艺淡出舞台",{"2":{"525":1}}],["都会经历从旁观到创造的演进",{"2":{"464":1}}],["都会被当作一个有效的类型来使用",{"2":{"254":1}}],["都会产生大量冗余请求",{"2":{"103":1}}],["都能通过",{"2":{"226":1}}],["都调用了",{"2":{"85":1}}],["都调用",{"2":{"69":1}}],["都是构建知识密集型应用的关键",{"2":{"417":1}}],["都是",{"2":{"247":1}}],["都是不二之选",{"2":{"116":1}}],["都是典型的服务端渲染",{"2":{"26":1}}],["都是值得尝试的架构方案",{"2":{"20":1}}],["状态函数",{"2":{"971":1}}],["状态映射原子类",{"2":{"965":1}}],["状态变体类名",{"2":{"964":1}}],["状态变更通过",{"2":{"941":1}}],["状态变更只沿单向轨道流动",{"2":{"174":1}}],["状态模型",{"2":{"941":1}}],["状态面板指针",{"2":{"790":1}}],["状态面板生成",{"2":{"790":1}}],["状态机与类型安全",{"2":{"964":1}}],["状态机与时间控制",{"2":{"92":1}}],["状态机",{"2":{"763":1,"892":1,"939":1}}],["状态锚定在任务清单",{"2":{"432":1}}],["状态随交互实时变化",{"2":{"432":1}}],["状态调度",{"2":{"342":2}}],["状态定位",{"2":{"180":1}}],["状态是应用的核心骨架",{"2":{"178":1}}],["状态突变",{"2":{"175":1}}],["状态下沉",{"2":{"174":1}}],["状态提升",{"2":{"174":1}}],["状态管理上下文",{"2":{"939":1}}],["状态管理系统",{"0":{"653":1},"2":{"647":1}}],["状态管理库横向对比分析",{"2":{"341":1}}],["状态管理",{"2":{"341":3,"641":1,"642":1,"645":1,"706":1,"761":1,"938":1,"939":1}}],["状态管理层",{"2":{"274":2}}],["状态管理模块",{"2":{"178":1}}],["状态管理与业务逻辑",{"2":{"170":1}}],["状态管理进行整合",{"2":{"83":1}}],["状态时",{"2":{"159":1}}],["状态维护与内存开销",{"2":{"117":1}}],["状态监控",{"2":{"111":1}}],["状态追踪防止重复回调",{"2":{"150":1}}],["状态追踪",{"2":{"110":1,"150":1}}],["状态码拦截与静默错误上报",{"2":{"342":1}}],["状态码才视为成功",{"2":{"121":1}}],["状态码",{"2":{"114":1}}],["状态码后",{"2":{"105":1}}],["状态码并抛出规范化错误",{"2":{"87":1}}],["状态的管理",{"2":{"83":1}}],["状态可严格区分为",{"2":{"83":1}}],["状态",{"2":{"68":1,"83":1,"85":1,"89":1,"92":1,"103":1,"117":1,"173":1,"394":1,"581":1,"860":1,"866":2,"917":1,"939":1,"994":1}}],["布局动画",{"2":{"819":1}}],["布局行范围",{"2":{"805":1}}],["布局行",{"2":{"805":1}}],["布局结果",{"2":{"805":2}}],["布局游标",{"2":{"805":1}}],["布局阶段",{"2":{"788":1,"806":4}}],["布局辅助",{"2":{"706":1}}],["布局算法引擎",{"2":{"706":1}}],["布局算法",{"2":{"704":1,"711":1}}],["布局",{"2":{"656":1}}],["布局组件插件",{"2":{"647":1}}],["布局分类图标",{"2":{"647":1}}],["布局样式",{"2":{"647":1}}],["布局等",{"2":{"338":1}}],["布局偏移",{"2":{"72":1}}],["布局不会重新渲染",{"2":{"67":1}}],["布局页面",{"2":{"53":1}}],["页脚",{"2":{"67":1,"75":1}}],["页面美化",{"2":{"971":1}}],["页面隐藏时暂停",{"2":{"826":1,"834":1}}],["页面导航状态管理",{"2":{"790":1}}],["页面管理",{"2":{"790":1}}],["页面转场",{"2":{"729":1}}],["页面数据",{"2":{"653":1}}],["页面数量可穷举",{"2":{"54":1}}],["页面数量与更新频率如何",{"2":{"46":1}}],["页面数量大的内容站",{"2":{"45":1}}],["页面的完整",{"2":{"650":1}}],["页面的基础",{"2":{"338":1}}],["页面跳转",{"2":{"649":1}}],["页面跳转白屏",{"2":{"72":1}}],["页面构建器",{"2":{"647":1,"656":1}}],["页面根节点",{"2":{"650":1}}],["页面根",{"2":{"647":1,"650":1}}],["页面完全由",{"2":{"641":1}}],["页面完整呈现",{"2":{"40":1}}],["页面布局模板",{"2":{"274":1}}],["页面专属",{"2":{"274":1}}],["页面专属组件",{"2":{"274":1}}],["页面测试",{"2":{"274":1}}],["页面样式",{"2":{"274":1}}],["页面组件",{"2":{"274":2}}],["页面层",{"2":{"274":1}}],["页面切换或用户主动取消时",{"2":{"149":1}}],["页面切换时及时释放连接",{"2":{"150":1}}],["页面切换时",{"2":{"67":1}}],["页面切换时不重新渲染",{"2":{"66":1}}],["页面可见性变化流程",{"0":{"896":1}}],["页面可见性变化处理",{"2":{"889":1}}],["页面可见性监听",{"2":{"889":1}}],["页面可见性处理",{"2":{"883":1}}],["页面可见性集成",{"2":{"874":1}}],["页面可见性",{"2":{"142":1,"882":1}}],["页面可交互",{"2":{"27":1}}],["页面上同时存在十几个需要联动的数据板块",{"2":{"101":1}}],["页面重新聚焦时自动重新验证",{"2":{"78":1}}],["页面外壳虽然瞬间出现",{"2":{"77":1}}],["页面",{"2":{"66":1,"647":1,"662":2,"851":1}}],["页面加载慢",{"2":{"366":1}}],["页面加载的",{"2":{"61":1}}],["页面加载后",{"2":{"53":1}}],["页面如何渲染",{"2":{"59":1,"60":1}}],["页面类型",{"2":{"53":2}}],["页面进入可交互状态",{"2":{"53":1}}],["页面多",{"2":{"46":1}}],["页面少",{"2":{"46":1}}],["页面尚未生成静态版本",{"2":{"35":1}}],["页面在首次访问时自动生成静态版本",{"2":{"34":1}}],["页面才真正具备交互能力",{"2":{"27":1}}],["页面呈现",{"2":{"23":1}}],["页面内容的生成与渲染完全由客户端",{"2":{"22":1}}],["页面骨架已呈现",{"2":{"40":1}}],["页面骨架",{"2":{"4":1}}],["页面生成时机",{"2":{"3":1}}],["基",{"2":{"904":1}}],["基准面状态",{"2":{"790":1}}],["基准面检查",{"2":{"790":1}}],["基准面",{"2":{"790":3}}],["基准面逻辑",{"2":{"790":1}}],["基准面页",{"2":{"790":1}}],["基准测试集",{"2":{"550":1}}],["基类的",{"2":{"683":1}}],["基类",{"2":{"682":1,"706":2,"741":1,"744":2,"762":2,"765":1,"768":1,"770":1,"771":1,"817":1,"818":1}}],["基类节点",{"2":{"679":1}}],["基建决定上层建筑",{"2":{"509":1}}],["基线测试",{"0":{"504":1},"1":{"505":1,"507":1,"508":1}}],["基本不打游戏",{"2":{"1043":1}}],["基本可以看成有",{"2":{"1016":1}}],["基本到了最后一个专题",{"2":{"1010":1}}],["基本用法",{"0":{"839":1}}],["基本人设",{"0":{"497":1},"1":{"498":1,"499":1}}],["基本格式",{"2":{"451":1}}],["基本语言与环境",{"0":{"338":1}}],["基本函数的使用",{"2":{"271":1}}],["基本类型约束示例",{"2":{"265":1}}],["基本类型约束是泛型约束中最基础的形式",{"2":{"265":1}}],["基本类型约束",{"0":{"265":1},"2":{"270":1}}],["基本选项",{"2":{"203":1}}],["基于遇到的问题寻找解决方法",{"2":{"1042":1}}],["基于远程工具协作已经被运用",{"2":{"1041":1}}],["基于对重要业务和任务的识别",{"2":{"1040":1}}],["基于统计情况调整时间",{"2":{"1038":1}}],["基于事务的重要程度",{"2":{"1036":1}}],["基于事件总线的通信",{"2":{"289":1}}],["基于多方面遇到的问题",{"2":{"1011":1}}],["基于系统与模型思维构建洞察力模型",{"0":{"1007":1},"1":{"1008":1,"1009":1}}],["基于不同生态的特性",{"2":{"971":1}}],["基于上述多维度的综合考量",{"2":{"965":1}}],["基于帧率的节流",{"2":{"824":1}}],["基于缓存的段宽度计算行数",{"2":{"788":1}}],["基于浏览器的",{"2":{"763":1}}],["基于此数据创建可查询的",{"2":{"743":1}}],["基于视觉结果的二次布局",{"2":{"715":1}}],["基于纯",{"2":{"699":1}}],["基于图数据库或向量库",{"2":{"546":1}}],["基于自研",{"2":{"523":1}}],["基于glm系列大模型",{"2":{"512":1}}],["基于先进的",{"2":{"511":1}}],["基于零代码平台搭建的需求",{"2":{"498":1}}],["基于这个",{"2":{"492":1}}],["基于反思建议",{"2":{"426":1}}],["基于语言模型的自主分解",{"0":{"425":1}}],["基于思考结果",{"2":{"414":1}}],["基于价值的定价",{"2":{"397":1}}],["基于抽象的低耦合设计",{"2":{"328":1}}],["基于共享状态的通信",{"2":{"289":1}}],["基于路由的微前端框架",{"2":{"287":1}}],["基于泛型设计的接口和类",{"2":{"255":1}}],["基于规范实现完整的功能模块",{"2":{"177":1}}],["基于规划结果",{"2":{"177":1}}],["基于第一阶段评审通过的组件划分树与职责描述",{"2":{"171":1}}],["基于流式",{"2":{"135":1}}],["基于",{"0":{"427":1},"2":{"66":1,"103":1,"134":1,"135":1,"141":1,"287":1,"289":1,"341":1,"342":2,"343":2,"353":1,"354":1,"515":1,"536":1,"542":1,"545":1,"564":1,"641":1,"642":1,"653":1,"671":1,"677":1,"686":1,"749":1,"874":1,"935":1,"939":1,"945":2,"951":1,"965":1,"1026":1}}],["基础代谢率有时达到标准状态",{"2":{"1046":1}}],["基础代谢率",{"2":{"1044":1,"1048":2}}],["基础概率是核心",{"2":{"1016":1}}],["基础测试执行器",{"2":{"980":1}}],["基础令牌",{"2":{"966":1}}],["基础色彩等高频",{"2":{"965":1}}],["基础底层调色板与全局规范",{"2":{"965":2}}],["基础类与",{"2":{"968":1}}],["基础类名",{"2":{"964":1}}],["基础类型",{"2":{"231":1}}],["基础目录集成测试",{"2":{"939":1}}],["基础目录注册",{"2":{"939":1}}],["基础解析器",{"2":{"939":1}}],["基础实现",{"2":{"851":1}}],["基础上增加了对子节点的递归处理",{"2":{"827":1}}],["基础上额外暴露段文本和",{"2":{"793":1}}],["基础上引入",{"2":{"46":1}}],["基础颜色贴图",{"2":{"778":1}}],["基础颜色",{"2":{"778":1}}],["基础属性",{"2":{"777":1}}],["基础元素测试",{"2":{"939":1}}],["基础元素契约",{"2":{"749":1}}],["基础元素类",{"2":{"734":1}}],["基础功能演示",{"2":{"735":1}}],["基础图表",{"2":{"706":1}}],["基础渲染层",{"2":{"704":1,"705":1}}],["基础渲染器",{"2":{"647":1}}],["基础组件目录",{"2":{"939":3}}],["基础组件",{"2":{"649":1,"650":1,"706":1}}],["基础样式",{"2":{"647":1,"961":1,"964":1}}],["基础",{"0":{"877":1},"2":{"645":1,"647":2}}],["基础无状态对话",{"0":{"483":1}}],["基础产品审美",{"2":{"459":1}}],["基础答疑",{"2":{"405":1}}],["基础学习需求",{"2":{"405":1}}],["基础学习",{"2":{"405":1}}],["基础编程",{"2":{"405":1}}],["基础技术",{"2":{"346":1}}],["基础泛型函数",{"0":{"258":1}}],["基础语法与语义",{"0":{"229":1,"236":1}}],["基础配置",{"2":{"211":1}}],["基础架构已然确立",{"2":{"176":1}}],["基础设施层",{"0":{"551":1},"2":{"189":1,"190":1,"274":1,"277":1,"279":2,"280":1,"281":1,"734":2,"817":1,"818":2}}],["基础设施代码",{"2":{"178":1}}],["基础设施",{"2":{"131":1,"280":1,"963":1}}],["基础设施的残酷现实",{"0":{"125":1}}],["基础规则",{"0":{"65":1}}],["必填字段提取",{"2":{"939":1}}],["必然",{"2":{"1032":2}}],["必然有",{"2":{"387":1}}],["必然是对现有常识的颠覆与补充",{"2":{"360":1}}],["必要时显式指定",{"2":{"263":1}}],["必要时在",{"2":{"46":1}}],["必要实体",{"2":{"200":1}}],["必要的预判",{"2":{"200":1}}],["必要",{"2":{"196":3}}],["必用",{"2":{"184":3}}],["必须删除代码重来",{"2":{"989":1}}],["必须严格遵循",{"2":{"970":1}}],["必须确保工作流为",{"2":{"969":1}}],["必须通过",{"2":{"573":1}}],["必须遵守的规则",{"2":{"573":1}}],["必须遵循",{"2":{"451":1}}],["必须遵循以下前缀",{"2":{"451":1}}],["必须解决上下文遗忘和知识幻觉的问题",{"2":{"546":1}}],["必须是",{"2":{"860":1}}],["必须是对应的",{"2":{"451":1}}],["必须是字符串",{"2":{"153":1}}],["必须运行本地校验逻辑",{"2":{"451":1}}],["必须能经受住以下灵魂拷问",{"2":{"450":1}}],["必须包含",{"2":{"442":1}}],["必须产出完整的步骤清单",{"2":{"423":1}}],["必须向架构和复杂逻辑转型",{"2":{"405":1}}],["必须动态导入",{"2":{"333":1}}],["必须使用",{"2":{"333":1}}],["必须先下载并执行所有的依赖模块",{"2":{"305":1}}],["必须先转码为",{"2":{"112":1}}],["必须有",{"2":{"263":1}}],["必须启用",{"2":{"208":1,"213":2}}],["必须显式声明类型",{"2":{"203":1}}],["必须显式定义读写边界",{"2":{"174":1}}],["必须引入的",{"2":{"192":1}}],["必须果断将其裂变为更细粒度的子组件",{"2":{"170":1}}],["必须基于流式",{"2":{"135":1}}],["必须消除",{"2":{"130":1}}],["必须正视其局限性",{"2":{"112":1}}],["必须以双换行符",{"2":{"109":1}}],["必须在",{"2":{"72":1}}],["必需的响应头",{"2":{"139":1}}],["必需",{"2":{"66":1,"442":1}}],["该书在疫情前被笔者知晓后阅读",{"2":{"1027":1}}],["该脚本读取",{"2":{"982":1}}],["该",{"2":{"952":1}}],["该目录下的每个",{"2":{"575":1}}],["该模式通过一个显式的",{"2":{"429":1}}],["该业务模块也得重写",{"2":{"328":1}}],["该集合本身",{"2":{"244":1}}],["该服务端登场了",{"2":{"151":1}}],["该落地了",{"2":{"145":1}}],["该库解决的核心痛点",{"2":{"142":1}}],["该特性使其在实时音视频流传输",{"2":{"115":1}}],["该路由及其子路由的共享布局",{"2":{"66":1}}],["该路由的页面内容",{"2":{"66":1}}],["该阶段工作量占比",{"2":{"45":1}}],["各编码平台",{"2":{"978":1}}],["各编码平台缺乏统一工作流标准",{"2":{"973":1}}],["各段在规范化文本中的起始偏移",{"2":{"805":1}}],["各段断行类型",{"2":{"805":1}}],["各段是否为词类型",{"2":{"805":1}}],["各段文本",{"2":{"805":1}}],["各段宽度",{"2":{"792":1}}],["各种工具分散",{"2":{"843":1}}],["各种具体材质",{"2":{"771":1}}],["各种曲线",{"2":{"763":1}}],["各种设计模式",{"2":{"434":1}}],["各类型轨道",{"2":{"763":1}}],["各类动画",{"2":{"735":1}}],["各类图层元素",{"2":{"733":1}}],["各层通过标准化的",{"2":{"938":1}}],["各层之间通过注册器模式和接口契约解耦",{"2":{"733":1}}],["各层职责详解",{"2":{"279":1}}],["各包的",{"2":{"647":1}}],["各模块分值占比",{"2":{"474":1}}],["各个组件究竟是如何协同工作的",{"2":{"434":1}}],["各个组件到底是怎么协同工作的",{"2":{"434":1}}],["各",{"2":{"249":1,"910":1}}],["各自有不同的接口和控制方式",{"2":{"812":1}}],["各自实现",{"2":{"741":1}}],["各自处理特定的子任务",{"2":{"415":1}}],["各自独立流式注入",{"2":{"74":1}}],["各自管理加载状态",{"2":{"74":1}}],["各司其职",{"2":{"66":1}}],["各取所需",{"0":{"63":1}}],["特有光源",{"2":{"763":1}}],["特效实现",{"2":{"735":1}}],["特殊段处理",{"2":{"795":1}}],["特殊的",{"2":{"680":1}}],["特殊文件约定",{"0":{"66":1}}],["特定文件夹的规则",{"2":{"571":1}}],["特定的训练数据给某个单一模型",{"2":{"1017":1}}],["特定的研发工具或外部",{"2":{"548":1}}],["特定的笔记结构",{"2":{"436":1}}],["特定格式文档转换",{"2":{"443":1}}],["特定地区优惠",{"2":{"397":1}}],["特定领域",{"2":{"263":1}}],["特点",{"2":{"342":2}}],["特点与说明",{"2":{"298":1}}],["特别感谢很多师傅指导",{"2":{"1026":1}}],["特别感谢开源社区赋予我们如此强大的工具",{"2":{"1003":1}}],["特别适合练习理解题意",{"2":{"494":1}}],["特别适合以下场景",{"2":{"178":1}}],["特别是",{"2":{"971":1}}],["特别是当你需要从零搭建一套属于自己团队的",{"2":{"964":1}}],["特别是针对大型",{"2":{"305":1}}],["特别是那些涉及复杂中间态和高频交互的领域",{"2":{"99":1}}],["特性层",{"2":{"274":1}}],["特性意味着我们只需描述",{"2":{"179":1}}],["特性",{"2":{"3":1,"102":1,"105":1,"135":1,"210":1,"253":1,"263":1,"320":1,"341":1,"478":1,"585":1,"672":1,"814":1}}],["嵌入层级计算",{"2":{"789":1,"790":1,"792":1}}],["嵌入图表",{"2":{"471":1}}],["嵌入决策框架和自动化",{"2":{"462":1}}],["嵌入",{"2":{"410":1,"514":1,"518":1,"562":1,"933":1,"985":1}}],["嵌入的",{"2":{"50":1}}],["嵌套与复用",{"2":{"958":1}}],["嵌套包装",{"2":{"910":1}}],["嵌套模式",{"2":{"909":1}}],["嵌套标记树",{"2":{"799":1}}],["嵌套变换层级",{"2":{"677":1}}],["嵌套",{"2":{"169":1,"958":2}}],["嵌套路由",{"2":{"65":1,"341":2}}],["看一些比较正向的文章",{"2":{"1046":1}}],["看不见",{"2":{"969":1}}],["看不到确定性的回报",{"2":{"617":1}}],["看起来是集中精力做一件事",{"2":{"1017":1}}],["看起来干净",{"2":{"967":1}}],["看起来更具性价比",{"2":{"397":1}}],["看懂",{"2":{"610":2}}],["看懂变量的存量与流量",{"2":{"384":1}}],["看得多了",{"2":{"608":1}}],["看电视并无本质区别",{"2":{"606":1}}],["看板和文档协作",{"2":{"515":1}}],["看板",{"2":{"515":2}}],["看看如何把",{"2":{"1000":1}}],["看看它们是如何各司其职的",{"2":{"434":1}}],["看看系统到底卡在哪一个节点",{"2":{"389":1}}],["看规划闭环",{"0":{"427":1}}],["看完这昏昏欲睡的电影",{"2":{"393":1}}],["看真实数据或市场反馈",{"2":{"369":1}}],["看到标准后就能推导出符合实际的解法",{"2":{"1025":1}}],["看到某类任务时主动说",{"2":{"585":1}}],["看到冰山之下的成本收益权衡与竞争博弈",{"2":{"390":1}}],["看到",{"2":{"367":1}}],["看到用户",{"2":{"76":1}}],["看似是我们在评估它",{"2":{"617":1}}],["看似简单又粗暴的规则",{"2":{"1016":1}}],["看似简单的因果链",{"2":{"385":1}}],["看似简洁",{"2":{"200":1}}],["看似美好",{"2":{"365":1}}],["看待问题的角度会发生转变",{"2":{"271":1}}],["看",{"2":{"64":1,"418":1}}],["建个人",{"2":{"515":1}}],["建筑图纸制",{"2":{"423":1}}],["建造你想住的房子",{"0":{"380":1}}],["建议配置",{"2":{"481":1}}],["建议直接查阅官方示例仓库",{"2":{"467":1}}],["建议结合前文",{"2":{"433":1}}],["建议把它固化进你的思考框架中",{"2":{"389":1}}],["建议",{"2":{"291":1,"322":1,"577":1,"591":1}}],["建议遵循以下最佳实践",{"2":{"291":1}}],["建议遵循以下步骤",{"2":{"282":1}}],["建议在非核心页面验证后再应用于生产环境",{"2":{"43":1}}],["建立碎片清单",{"2":{"1037":1}}],["建立在浅表层的",{"2":{"616":1}}],["建立特定场景的",{"2":{"550":1}}],["建立分级信任机制",{"2":{"537":1}}],["建立一套严谨的语义层",{"2":{"532":1}}],["建立了一条通往专业领域的",{"2":{"456":1}}],["建立全局航向",{"2":{"429":1}}],["建立起知识间的逻辑联系",{"2":{"417":1}}],["建立起真正意义上的",{"2":{"113":1}}],["建立统一语言",{"2":{"282":1}}],["建立丰富的领域模型",{"2":{"276":1}}],["建立反向数据流",{"0":{"175":1}}],["建立",{"0":{"369":1},"2":{"144":1,"150":1,"626":1}}],["建文件即建路由",{"2":{"64":1}}],["选定的方案",{"2":{"994":1}}],["选中",{"2":{"706":1}}],["选模型前",{"0":{"519":1}}],["选用",{"2":{"507":1}}],["选项",{"2":{"965":2}}],["选项用于继承另一个",{"2":{"209":1}}],["选项用于声明当前项目依赖的其他",{"2":{"207":1}}],["选项文件",{"2":{"203":1}}],["选项发送",{"2":{"138":1}}],["选择方案",{"2":{"904":1}}],["选择理由",{"2":{"702":1,"731":1,"976":1}}],["选择框",{"2":{"677":1}}],["选择原因",{"2":{"642":1}}],["选择权",{"2":{"533":1}}],["选择建议",{"0":{"515":1,"518":1},"2":{"510":1,"515":1,"518":1,"565":1}}],["选择并执行具体的操作",{"2":{"427":1}}],["选择更趁手的圆瓶",{"2":{"391":1}}],["选择看什么",{"2":{"373":1}}],["选择冷门但具有极大潜力的",{"2":{"360":1}}],["选择器添加唯一哈希属性",{"2":{"961":1}}],["选择器同时打上",{"2":{"961":1}}],["选择器和数字引用",{"2":{"858":1}}],["选择器",{"2":{"274":1}}],["选择",{"2":{"192":1,"642":1,"654":1,"673":1,"962":2}}],["选择假设最少",{"2":{"181":1}}],["选择策略的核心思路",{"2":{"63":1}}],["选型决策分析",{"0":{"881":1}}],["选型决策树",{"0":{"46":1}}],["选型建议",{"2":{"568":1}}],["选型与整体设计",{"2":{"542":1}}],["选型评估",{"0":{"97":1},"1":{"98":1,"99":1,"100":1,"101":1}}],["选型",{"2":{"20":1,"335":1,"759":1}}],["略慢于",{"2":{"63":1}}],["个技能按工作流形成严格的有向无环图",{"2":{"978":1}}],["个编码平台",{"2":{"975":1}}],["个包",{"2":{"908":1}}],["个包的",{"2":{"904":1}}],["个示例项目",{"2":{"904":1}}],["个模块的子入口聚合导出",{"2":{"821":1}}],["个模型卡片",{"2":{"74":1}}],["个独立可导入子模块",{"2":{"814":1}}],["个文本块可导致每帧",{"2":{"784":1}}],["个核心节点类型",{"2":{"763":1}}],["个核心要点",{"2":{"383":1}}],["个访问器",{"2":{"763":1}}],["个基础模块入口",{"2":{"751":1}}],["个构建入口",{"2":{"730":1}}],["个子目录",{"2":{"728":1}}],["个子主题",{"2":{"471":2}}],["个组件",{"2":{"706":1}}],["个逻辑层",{"2":{"704":1}}],["个交互组件",{"2":{"701":1}}],["个图像滤镜",{"2":{"677":1}}],["个具体形状实现",{"2":{"677":1}}],["个具体数字",{"2":{"472":1}}],["个具体数据点",{"2":{"470":1}}],["个方案时",{"2":{"460":1}}],["个字符",{"2":{"448":1}}],["个阶段",{"2":{"443":1}}],["个任务的输出",{"2":{"430":1}}],["个任务的详细推理过程",{"2":{"430":1}}],["个任务时",{"2":{"430":1}}],["个硬核数据点",{"2":{"416":1}}],["个性化学习客户端",{"2":{"939":1}}],["个性化学习",{"2":{"939":1}}],["个性化",{"2":{"515":1}}],["个性化工作方式",{"2":{"436":1}}],["个性化教育",{"2":{"407":1}}],["个性化首页",{"2":{"63":1}}],["个关键步骤",{"2":{"389":1}}],["个让自己感到",{"2":{"370":1}}],["个功能入口",{"2":{"366":1}}],["个元素",{"2":{"227":1}}],["个",{"0":{"459":1},"2":{"112":1,"291":1,"472":1,"653":2,"677":2,"728":1,"860":1,"908":1,"1034":1}}],["个人能力补充圈",{"2":{"1031":1}}],["个人反思",{"2":{"628":1}}],["个人见解",{"2":{"628":1}}],["个人理解",{"2":{"628":1}}],["个人经验",{"2":{"614":1}}],["个人特殊需求",{"2":{"596":1}}],["个人习惯",{"2":{"580":1}}],["个人权限覆盖",{"0":{"596":1}}],["个人权限",{"2":{"570":1}}],["个人覆盖",{"2":{"570":1}}],["个人代理",{"2":{"570":1}}],["个人技能",{"2":{"570":1}}],["个人自定义斜杠命令",{"2":{"570":1}}],["个人或小团队的重构",{"2":{"568":1}}],["个人日常开发",{"2":{"565":1}}],["个人开发者",{"2":{"523":1}}],["个人开发者的",{"2":{"361":1}}],["个人笔记",{"2":{"515":1}}],["个人笔记与知识库",{"2":{"515":1}}],["个人知识库",{"2":{"515":2}}],["个人知识管理的得力助手",{"2":{"515":1}}],["个人偏好",{"2":{"436":1}}],["个人偏好沉淀与经验积累",{"2":{"414":1}}],["个人财务",{"2":{"407":1}}],["个人作品集",{"2":{"345":1}}],["个人",{"2":{"19":1,"568":1}}],["定规范",{"2":{"532":1}}],["定价极低",{"2":{"522":1}}],["定价业内极低",{"2":{"522":1}}],["定价往往是竞争博弈后的动态平衡",{"2":{"392":1}}],["定海神针",{"2":{"509":1}}],["定制化修改",{"2":{"731":1}}],["定制业务模型",{"2":{"512":1}}],["定制属于自己的",{"2":{"419":1}}],["定制性受限",{"2":{"287":1}}],["定位圆圈",{"2":{"1031":1}}],["定位当前帧所在关键帧区间",{"2":{"743":1}}],["定位",{"2":{"134":1,"198":1}}],["定期扫描那些与多个",{"2":{"629":1}}],["定期清理无效信息源",{"2":{"624":1}}],["定期轮询查询状态",{"2":{"131":1}}],["定期刷新",{"2":{"63":1}}],["定时查询状态",{"2":{"130":1}}],["定义的模板",{"2":{"994":1}}],["定义的接口与核心",{"2":{"912":1}}],["定义钩子触发规则",{"2":{"994":1}}],["定义严格的",{"2":{"989":1}}],["定义在",{"2":{"983":1}}],["定义目录",{"2":{"980":1}}],["定义技能的基本信息",{"2":{"994":1}}],["定义技能的基础属性",{"2":{"442":1}}],["定义技能优先级规则",{"2":{"979":1}}],["定义插件元数据和",{"2":{"978":1}}],["定义所有的变体状态",{"2":{"964":1}}],["定义所有模型类型的抽象接口",{"2":{"906":1}}],["定义变量",{"2":{"958":1}}],["定义客户端支持的组件类型集合",{"2":{"942":1}}],["定义协议格式",{"2":{"938":1}}],["定义模型可调用的工具及其输入",{"2":{"913":1}}],["定义模块",{"2":{"305":1}}],["定义统一页面操作抽象",{"2":{"858":1}}],["定义材质着色器而不依赖内置着色器库",{"2":{"771":1}}],["定义通用属性",{"2":{"771":1}}],["定义通用的键值对映射",{"2":{"262":1}}],["定义渲染流程骨架",{"2":{"768":1}}],["定义渲染器的公共接口",{"2":{"741":1}}],["定义观察者的视点和投影方式",{"2":{"766":1}}],["定义物体表面的光照响应",{"2":{"766":1}}],["定义矩形绘图区域",{"2":{"706":1}}],["定义命中检测绘制逻辑",{"2":{"683":1}}],["定义场景绘制逻辑",{"2":{"683":1}}],["定义页面",{"2":{"668":1}}],["定义其能力边界",{"2":{"591":1}}],["定义专注特定任务的",{"2":{"570":1}}],["定义专属的子智能体角色",{"2":{"570":1}}],["定义团队编码规范",{"2":{"570":1}}],["定义项目规范",{"2":{"570":1}}],["定义个人习惯的交互风格",{"2":{"570":1}}],["定义验收标准",{"2":{"532":1}}],["定义清晰的接口和职责",{"2":{"476":1}}],["定义清晰的仓储接口",{"2":{"281":1}}],["定义文件",{"2":{"445":1}}],["定义具体的执行逻辑",{"2":{"442":1}}],["定义具体数据类型",{"2":{"266":1}}],["定义问题",{"2":{"367":1}}],["定义问题的能力",{"2":{"367":1}}],["定义全域共用的常量与",{"2":{"336":1}}],["定义业务契约",{"2":{"319":1}}],["定义一个数学工具模块",{"2":{"295":1}}],["定义领域服务",{"2":{"282":1}}],["定义限界上下文",{"2":{"282":1}}],["定义实体",{"2":{"279":1}}],["定义数据实体结构与数据传输对象",{"2":{"275":1}}],["定义导航结构与路由守卫",{"2":{"274":1}}],["定义子类",{"2":{"269":1}}],["定义基类",{"2":{"269":1}}],["定义可序列化接口",{"2":{"267":1}}],["定义可比较接口",{"2":{"267":1}}],["定义约束接口",{"2":{"266":1}}],["定义函数类型",{"2":{"262":1}}],["定义职责约束",{"2":{"170":1}}],["定义退避策略阵列",{"2":{"160":1}}],["定义了技能之间的合法转换路径",{"2":{"995":1}}],["定义了前端与后端的标准通信协议",{"2":{"903":1}}],["定义了两个核心方法",{"2":{"903":1}}],["定义了一套完整的动作语义",{"2":{"654":1}}],["定义了一系列关键概念",{"2":{"278":1}}],["定义了",{"2":{"593":1,"963":1}}],["定义了标准化的数据格式",{"2":{"134":1}}],["定义了全局",{"2":{"67":1}}],["定义",{"2":{"14":1,"275":1,"278":1,"305":1,"451":1,"640":1,"680":1,"706":1,"765":1,"851":1,"856":1,"948":1,"978":1}}],["直至可以抛弃原来的专业",{"2":{"1020":1}}],["直达本质的洞察力成为必需",{"2":{"604":1}}],["直达性",{"2":{"107":1}}],["直线思考",{"2":{"492":1}}],["直观性",{"2":{"936":1}}],["直观性最强的模式",{"2":{"427":1}}],["直观地感受一下什么是模块化",{"2":{"295":1}}],["直觉理解",{"2":{"242":1}}],["直到模型返回纯文本或达到最大步数",{"2":{"922":1}}],["直到达到停止条件",{"2":{"918":1}}],["直到找到或到达根目录",{"2":{"334":1}}],["直到你尝试赋值时才暴露问题",{"2":{"237":1}}],["直到有新数据产生或超时才返回响应",{"2":{"161":1}}],["直到流结束",{"2":{"141":1,"143":1}}],["直到服务器发送一个长度为",{"2":{"105":1}}],["直连数据库",{"2":{"80":1}}],["直出的纯展示网页",{"2":{"344":1}}],["直出",{"2":{"63":1,"80":1}}],["直接原因",{"2":{"1019":1,"1043":2}}],["直接编写",{"2":{"965":1}}],["直接编译为",{"2":{"771":1}}],["直接提取",{"2":{"964":1}}],["直接复制",{"2":{"963":1}}],["直接创建一个自带样式的",{"2":{"959":1}}],["直接集成",{"2":{"904":1}}],["直接导出类型",{"2":{"886":1}}],["直接连接",{"2":{"858":1}}],["直接连接外部服务",{"2":{"411":1}}],["直接处理",{"2":{"854":1}}],["直接cdp连接",{"2":{"849":1}}],["直接控制",{"2":{"844":1}}],["直接调用",{"2":{"798":1}}],["直接解析",{"2":{"728":1}}],["直接匹配",{"2":{"649":1}}],["直接生成可运行的完整项目",{"2":{"559":1}}],["直接与本地或云端知识库联动",{"2":{"548":1}}],["直接给出答案",{"2":{"531":1}}],["直接面向心智尚未成熟的",{"2":{"492":1}}],["直接想成为",{"2":{"464":1}}],["直接关系到",{"2":{"448":1}}],["直接输出版本号",{"2":{"855":1}}],["直接输出",{"2":{"427":1}}],["直接通过",{"2":{"425":1}}],["直接喂饭",{"2":{"373":1}}],["直接",{"2":{"333":1,"845":1,"851":1,"858":1}}],["直接访问不安全",{"2":{"229":1}}],["直接实现核心功能",{"2":{"194":1}}],["直接实现核心逻辑",{"2":{"188":1}}],["直接终止",{"2":{"150":1}}],["直接把你以前用搜索引擎搜的问题原文粘进去",{"2":{"518":1}}],["直接把",{"2":{"100":1}}],["直接选用",{"2":{"99":1}}],["直接拿走",{"2":{"92":1}}],["直接使用链接指向的文件",{"2":{"203":1}}],["直接使用",{"2":{"85":1,"846":1}}],["直接在业务逻辑里初始化数据库",{"2":{"328":1}}],["直接在本地假定请求成功并更新",{"2":{"88":1}}],["直接在",{"2":{"82":1,"959":2,"962":1}}],["直接在组件顶层读取了",{"2":{"47":1}}],["直接查数据库",{"2":{"62":1}}],["直接查询数据库",{"2":{"61":1}}],["直接传给浏览器",{"2":{"61":1}}],["直接返回值",{"2":{"828":1}}],["直接返回缓存结果",{"2":{"304":1}}],["直接返回缓存的静态",{"2":{"35":1}}],["直接返回预编译好的",{"2":{"53":1}}],["直接返回预渲染文件",{"2":{"31":1}}],["直接返回",{"2":{"45":1}}],["直接返回现成的",{"2":{"30":1,"31":1}}],["直接点击",{"2":{"17":1}}],["直接获取数据",{"2":{"15":1}}],["直接托管预构建的静态文件",{"2":{"7":1}}],["直接从内存加载",{"2":{"334":1}}],["直接从",{"2":{"2":1}}],["秒哒",{"2":{"561":1,"562":2}}],["秒以内",{"2":{"166":1}}],["秒挂起时间到了",{"2":{"164":1}}],["秒才会有",{"2":{"164":1}}],["秒钟再查一次库",{"2":{"163":1}}],["秒内完成",{"2":{"163":1}}],["秒完成",{"2":{"160":1}}],["秒一次",{"2":{"128":1}}],["秒后重连",{"2":{"164":1}}],["秒后重试",{"2":{"144":1}}],["秒后改为每",{"2":{"128":1}}],["秒后过期",{"2":{"35":1}}],["秒查询一次",{"2":{"128":2}}],["秒每",{"2":{"128":1}}],["秒发起一个极轻量的",{"2":{"125":1}}],["秒的等待周期",{"2":{"160":1}}],["秒的网络中断",{"2":{"127":1}}],["秒的",{"2":{"125":1}}],["秒",{"2":{"94":1,"124":1,"159":4,"162":1,"879":1}}],["秒杀库存",{"2":{"76":1}}],["秒开",{"2":{"63":1}}],["灵光一现",{"2":{"364":1}}],["灵感经过学习与内化沉淀为笔记",{"2":{"631":1}}],["灵感碎片",{"2":{"541":1}}],["灵感捕捉",{"2":{"515":1}}],["灵感",{"2":{"340":1,"525":1}}],["灵魂的关键",{"2":{"496":1}}],["灵魂",{"2":{"63":1,"402":1,"410":1,"415":1}}],["灵活且跨模型通用",{"2":{"976":1}}],["灵活性",{"2":{"936":1}}],["灵活构建",{"2":{"730":1}}],["灵活调度国内外大模型",{"2":{"549":1}}],["灵活与可扩展性",{"2":{"509":1}}],["灵活的重试策略",{"2":{"874":1}}],["灵活的状态管理解决方案",{"2":{"341":1}}],["灵活的字段存储方式",{"2":{"200":1}}],["灵活应对复杂的数据结构和继承关系",{"2":{"270":1}}],["灵活组合",{"2":{"240":1}}],["灵活混用",{"0":{"63":1}}],["灵活度高",{"2":{"6":1}}],["←────────┐",{"2":{"891":1}}],["←",{"2":{"62":1,"244":1,"279":4,"442":4}}],["写的基本都是",{"2":{"1043":1}}],["写点代码",{"2":{"1022":1}}],["写这四个因素",{"2":{"1008":1}}],["写了代码再补测试",{"2":{"989":1}}],["写自定义",{"2":{"967":1}}],["写多了容易显得臃肿",{"2":{"961":1}}],["写入设计文档",{"2":{"987":1}}],["写入数据到指定路径",{"2":{"951":1}}],["写入目标",{"2":{"827":1}}],["写独立博客或做个人产品能带来长期的复利",{"2":{"617":1}}],["写其动态之美",{"2":{"508":1}}],["写其清冷风姿",{"2":{"507":1}}],["写好测试后提交",{"2":{"567":1}}],["写好代码只是及格线",{"2":{"495":1}}],["写好提示词",{"2":{"403":1}}],["写作者",{"2":{"555":1}}],["写作",{"2":{"515":1}}],["写作助手",{"2":{"512":1,"515":1}}],["写作与内容创作",{"2":{"511":1,"521":1}}],["写作等多种场景",{"2":{"511":1}}],["写作阶段",{"2":{"468":1}}],["写作业",{"2":{"462":1}}],["写特定语言的码农",{"2":{"466":1}}],["写一段代码",{"2":{"414":1}}],["写一篇",{"2":{"375":1}}],["写代码的机器",{"2":{"552":1}}],["写代码调用工具",{"2":{"439":1}}],["写代码",{"2":{"357":1,"559":1,"564":1}}],["写在前面",{"0":{"1005":1,"1019":1,"1043":1}}],["写在最后",{"0":{"356":1,"1018":1,"1042":1}}],["写在页面顶层",{"2":{"62":1}}],["写",{"2":{"337":1}}],["写什么",{"2":{"180":1}}],["写下你的评论",{"2":{"16":1}}],["内建",{"2":{"812":1,"825":1}}],["内建着色器资源",{"2":{"763":1}}],["内存缓存",{"2":{"763":1}}],["内存占用与长连接管理压力将呈几何级数增长",{"2":{"117":1}}],["内联目录",{"2":{"948":1}}],["内联发送给",{"2":{"948":1}}],["内联接口",{"2":{"904":1}}],["内联富文本",{"2":{"810":1}}],["内联富文本渲染",{"2":{"790":1}}],["内联格式化",{"2":{"799":1}}],["内联第三方依赖",{"2":{"731":1}}],["内联编辑",{"2":{"656":1}}],["内联编辑组件",{"2":{"647":1,"656":1}}],["内",{"2":{"677":1}}],["内心的潜台词变成了表演",{"2":{"612":1}}],["内心独白",{"2":{"427":1}}],["内涵",{"2":{"507":1}}],["内追求",{"2":{"201":1}}],["内嵌库",{"2":{"763":1}}],["内嵌",{"2":{"177":1,"979":1,"983":1}}],["内部设计文档",{"2":{"980":1}}],["内部样式时",{"2":{"968":1}}],["内部分离",{"2":{"965":1}}],["内部通过",{"2":{"945":1}}],["内部解析",{"0":{"899":1}}],["内部依赖",{"0":{"886":1}}],["内部存储",{"2":{"706":1}}],["内部调用接口",{"2":{"706":1}}],["内部事件",{"2":{"684":1}}],["内部结构图",{"2":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"711":1,"712":1,"713":1,"714":1,"715":1,"740":1,"741":1,"742":1,"743":1,"744":1,"768":1,"769":1,"770":1,"771":1,"772":1,"795":1,"796":1,"797":1,"798":1,"799":1,"824":1,"825":1,"826":1,"827":1,"828":1,"858":1,"859":1,"860":1,"915":1,"916":1,"917":1,"918":1,"944":1,"945":1,"946":1,"947":1,"948":1,"985":1,"986":1,"987":1,"988":1,"989":1}}],["内部能力不对称",{"2":{"622":1}}],["内部使用",{"2":{"535":1}}],["内部使用调用签名的合并",{"2":{"238":1}}],["内部自动管理多轮交互",{"2":{"478":1}}],["内部曾经历过激烈的争论",{"2":{"350":1}}],["内部的",{"2":{"342":1}}],["内部实现注册表",{"2":{"706":1}}],["内部实现细节",{"2":{"197":1}}],["内部实现了分块加载",{"2":{"74":1}}],["内部状态",{"2":{"197":1,"860":1}}],["内部状态码",{"2":{"196":2}}],["内部状态边界及副作用生命周期",{"2":{"178":1}}],["内部会自动设置正确的响应头",{"2":{"153":1}}],["内部会监听",{"2":{"149":1}}],["内部工具函数",{"2":{"763":1}}],["内部工具等也开始被自动化",{"2":{"527":1}}],["内部工具",{"2":{"80":1}}],["内部格式",{"2":{"61":1}}],["内置模块",{"2":{"980":1}}],["内置适配器发现",{"2":{"854":1}}],["内置管道步骤",{"2":{"851":1}}],["内置命令处理",{"2":{"855":1}}],["内置命令实现",{"2":{"851":1}}],["内置命令",{"2":{"849":1}}],["内置节点库",{"2":{"765":1}}],["内置着色器库",{"2":{"763":1}}],["内置几何体",{"2":{"763":1}}],["内置完整的",{"2":{"758":1}}],["内置函数和属性",{"2":{"742":1}}],["内置函数",{"2":{"730":1,"735":1}}],["内置主题",{"2":{"706":1}}],["内置缩放",{"2":{"699":1}}],["内置图层批量渲染",{"2":{"670":1}}],["内置公式函数",{"2":{"641":1,"655":1}}],["内置免费模型",{"2":{"567":1,"568":1}}],["内置隐私模式",{"2":{"564":1}}],["内置深度开发模式",{"2":{"561":1}}],["内置深度研究模式",{"2":{"522":1}}],["内置托管与分享功能",{"2":{"561":1}}],["内置浏览器插件可一键抓取网页",{"2":{"515":1}}],["内置联网检索与深度研究",{"2":{"512":1}}],["内置了一套完整的",{"2":{"639":1}}],["内置了依赖注入",{"2":{"344":2}}],["内置了屏幕聚焦",{"2":{"85":1}}],["内置",{"2":{"91":1,"515":3,"561":1,"642":1,"763":2,"765":1,"859":2}}],["内置的核心模块",{"2":{"334":1}}],["内置的",{"2":{"78":1,"561":1}}],["内置优化组件",{"0":{"72":1}}],["内置后端能力",{"0":{"71":1}}],["内容提取",{"2":{"851":1}}],["内容类应用动画表情",{"2":{"729":1}}],["内容类型等自定义头部",{"2":{"873":1}}],["内容类型不匹配或响应失败",{"2":{"150":1}}],["内容类型",{"2":{"141":1,"144":1}}],["内容可检索性",{"2":{"613":1}}],["内容归类",{"2":{"550":1}}],["内容摘要",{"2":{"522":1}}],["内容整理与二次创作",{"2":{"515":1}}],["内容自动化",{"2":{"515":2}}],["内容自动填写与总结",{"2":{"515":1}}],["内容创作等流程中去",{"2":{"1000":1}}],["内容创作辅助",{"2":{"515":1}}],["内容创作",{"2":{"512":1}}],["内容总结",{"2":{"512":1,"515":1}}],["内容健康",{"2":{"506":1}}],["内容简洁优雅",{"2":{"504":1}}],["内容准确性",{"2":{"494":1}}],["内容像",{"2":{"445":1}}],["内容站",{"2":{"344":1}}],["内容驱动型应用",{"2":{"342":1}}],["内容",{"2":{"138":1,"443":1,"470":1,"471":1,"757":1}}],["内容密集型网站",{"2":{"80":1}}],["内容每个用户",{"2":{"63":1}}],["内容常变但不是每秒都变",{"2":{"63":1}}],["内容对所有用户都一样",{"2":{"63":1}}],["内容需定期更新",{"2":{"63":1}}],["内容嵌入",{"2":{"54":1}}],["内容被编译为",{"2":{"53":1}}],["内容作弊",{"2":{"47":1}}],["内容不一致",{"2":{"47":1}}],["内容严重滞后",{"2":{"47":1}}],["内容定期更新",{"2":{"45":1}}],["内容固定不变",{"2":{"46":1}}],["内容固定",{"2":{"45":1,"54":1}}],["内容频繁更新的网站",{"2":{"19":1}}],["内容更新不频繁",{"2":{"19":1}}],["内容更新后自动部署",{"2":{"17":1}}],["内容模型",{"2":{"14":1,"18":1}}],["内容与代码分离",{"2":{"9":1}}],["内容管理",{"0":{"9":1,"14":1},"2":{"11":1,"18":1}}],["▼",{"2":{"61":3,"471":2,"849":1,"860":1,"889":6,"891":10,"892":8}}],["也尝试应用于工作",{"2":{"1047":1}}],["也想通了一些事情",{"2":{"1043":1}}],["也想在文章的最后说下",{"2":{"1042":1}}],["也想做一次复盘总结",{"2":{"1019":1}}],["也因为这样的折腾让我们顺利走向了工作岗位",{"2":{"1041":1}}],["也实现了向内思变",{"2":{"1040":1}}],["也容易被别人误解",{"2":{"1036":1}}],["也很难直接转变为海绵式阅读",{"2":{"1030":1}}],["也要避免接触一些没有用还容易内耗的人和事",{"2":{"1025":1}}],["也为后面的防治宜早",{"2":{"1024":1}}],["也延续了很多大学阶段养成的对健康不利的习惯",{"2":{"1022":1}}],["也都有属于自己独一份的经历",{"2":{"1019":1}}],["也基本梳理完成了",{"2":{"1018":1}}],["也随之确定",{"2":{"1009":1}}],["也在逐步思考怎么才能将自己获得的",{"2":{"1008":1}}],["也就需要考虑如何真真正正的进行尝试实践了",{"2":{"1043":1}}],["也就有了这篇减肥这件小事阶段随笔汇总",{"2":{"1043":1}}],["也就有了一次次地尝试改变自己来适应居家办公",{"2":{"1040":1}}],["也就开始琢磨系统运行原理",{"2":{"1007":1}}],["也就是说",{"2":{"1006":1}}],["也就是",{"2":{"375":1}}],["也包括个人智慧与经验等因素",{"2":{"1005":1}}],["也更从理论上明白了",{"2":{"1025":1}}],["也更愿意将自己定义为一个",{"2":{"1001":1}}],["也更便于浏览器集成",{"2":{"108":1}}],["也多次参加了国内",{"2":{"1000":1}}],["也时常能得到他人的赞许",{"2":{"612":1}}],["也可看下笔者毕业前留下的两篇相关文章",{"2":{"1032":1}}],["也可根据不同的场景",{"2":{"1030":1}}],["也可配置",{"2":{"567":1}}],["也可以帮助我们发现新的角度",{"2":{"1002":1}}],["也可以配合",{"2":{"960":1}}],["也可以与能力较强的",{"2":{"610":1}}],["也可以是比喻性的",{"2":{"506":1}}],["也可以是一个",{"2":{"483":1}}],["也可以是对生成结构的重新组织",{"2":{"426":1}}],["也可以被封装成工具",{"2":{"411":1}}],["也可以整体导入到一个命名空间对象中",{"2":{"310":1}}],["也可以处理",{"2":{"255":1}}],["也最能释放巨大商业价值的一层",{"2":{"540":1}}],["也最温暖的防御线",{"2":{"539":1}}],["也有三点比较核心的体会",{"2":{"509":1}}],["也会引发家长的担忧",{"2":{"492":1}}],["也会陷入",{"2":{"467":1}}],["也传入一些",{"2":{"489":1}}],["也标志着",{"2":{"477":1}}],["也只是一盘毫无生机的散沙",{"2":{"385":1}}],["也不知哪天突发奇想",{"2":{"1008":1}}],["也不知道昨天的天气",{"2":{"408":1}}],["也不会有大的损失和挫败",{"2":{"1006":1}}],["也不会为了一个未知的答案彻夜难眠",{"2":{"362":1}}],["也不是修改",{"2":{"451":1}}],["也不需要在没有想清楚商业模式的时候就去烧钱买流量",{"2":{"379":1}}],["也伴随着无限的发散",{"2":{"367":1}}],["也成了其在",{"2":{"354":1}}],["也清楚拿掉一块拼图后会产生的波纹",{"2":{"332":1}}],["也让复杂的依赖治理变得有迹可循",{"2":{"316":1}}],["也没有精准的",{"2":{"316":1}}],["也没有试图做",{"2":{"54":1}}],["也解释了为什么",{"2":{"243":1}}],["也是笔者在第三阶段的时间统计与调整准则",{"2":{"1038":1}}],["也是我践行上述理念的实验场之一",{"2":{"1002":1}}],["也是实现",{"2":{"544":1}}],["也是最值得放大的起点",{"2":{"462":1}}],["也是最值钱的部分",{"2":{"460":2}}],["也是有限理性",{"2":{"393":1}}],["也是洞察力的一部分",{"2":{"388":1}}],["也是你作为魔术师学徒拆解戏法的最佳时机",{"2":{"371":1}}],["也是前端开发的核心语言",{"2":{"338":1}}],["也是所有前端开发的起点",{"2":{"338":1}}],["也是",{"2":{"230":1,"338":1}}],["也是联合成员",{"2":{"229":1}}],["也是验证代码正确性的唯一标准",{"2":{"177":1}}],["也能借助开放平台或多或少收到一些反馈与建议",{"2":{"1019":1}}],["也能被牢牢限制在安全的边界之内",{"2":{"538":1}}],["也能加深开发者对架构的理解",{"2":{"171":1}}],["也能提前规避命名不当的问题",{"2":{"170":1}}],["也消耗了客户端的设备电量与性能",{"2":{"158":1}}],["也无需客户端持续轮询",{"2":{"119":1}}],["也给后端架构带来了沉重的复杂性",{"2":{"117":1}}],["也支持通过",{"2":{"82":1}}],["也支持",{"2":{"59":1}}],["把日常看的时间管理相关书籍",{"2":{"1047":1}}],["把事务丢进碎片清单的目的是要在其他合适的时间再去思考它",{"2":{"1037":1}}],["把避免冲突的脏活累活全权交给框架的编译器",{"2":{"961":1}}],["把精力放在自己能掌控的事情上",{"2":{"626":1}}],["把有限的算力留给最高优的任务",{"2":{"624":1}}],["把逻辑理清楚",{"2":{"610":1}}],["把书中的观点用自己的话讲给别人听",{"2":{"610":1}}],["把自己作为方法",{"2":{"604":1}}],["把自己的分析发给",{"2":{"375":1}}],["把那些原本需要花费大量时间的繁琐工作",{"2":{"528":1}}],["把笔记丢进",{"2":{"515":1}}],["把每一缕风",{"2":{"508":1}}],["把抽象问题变成看得见的画面",{"2":{"494":1}}],["把判断力",{"2":{"466":1}}],["把它跑通",{"2":{"465":1,"466":1}}],["把想法变成可交互原型",{"2":{"461":1}}],["把一个",{"2":{"439":1}}],["把高频方法变成可复用能力",{"0":{"436":1}}],["把100行逻辑写在1个方法里",{"2":{"200":1}}],["把状态隔离在局部子树时",{"2":{"174":1}}],["把",{"2":{"171":1,"357":1,"438":1,"515":1}}],["把组件画到屏幕上",{"2":{"59":1}}],["把整页当作一个整体进行增量更新",{"2":{"41":1}}],["架构交付",{"2":{"1001":1}}],["架构简述",{"2":{"994":1}}],["架构考虑",{"2":{"973":1}}],["架构思想",{"2":{"971":1}}],["架构分工",{"2":{"971":1}}],["架构红线",{"0":{"970":1}}],["架构根基",{"2":{"965":1}}],["架构复用浏览器登录状态",{"2":{"848":1}}],["架构复杂度",{"2":{"292":1}}],["架构复杂度应与项目规模匹配",{"2":{"189":1}}],["架构复杂度这四个维度之间做权衡取舍",{"2":{"55":1}}],["架构复杂度上升",{"2":{"19":1}}],["架构概述",{"0":{"645":1,"675":1,"704":1,"733":1,"761":1,"788":1,"817":1,"848":1,"906":1,"938":1,"978":1}}],["架构层",{"2":{"558":1}}],["架构决策变得昂贵",{"2":{"555":1}}],["架构决策",{"2":{"555":1,"572":1}}],["架构决策和历史演进的隐性认知",{"2":{"536":1}}],["架构文档乃至团队的代码评审偏好",{"2":{"536":1}}],["架构革新与传统工程设施的深度融合与协同演化",{"2":{"534":1}}],["架构难以企及的",{"2":{"475":1}}],["架构模式",{"0":{"468":1},"2":{"785":1,"904":1}}],["架构中解放",{"2":{"963":1}}],["架构中",{"2":{"415":1}}],["架构师",{"2":{"367":1,"491":1}}],["架构管理的纯",{"2":{"342":1}}],["架构机制",{"2":{"342":3}}],["架构的根基",{"0":{"966":1}}],["架构的",{"2":{"191":1}}],["架构设计篇",{"0":{"888":1},"1":{"889":1,"890":1,"891":1,"892":1,"893":1,"894":1,"895":1,"896":1,"897":1,"898":1,"899":1}}],["架构设计的核心理念是",{"2":{"848":1}}],["架构设计文档",{"2":{"453":1}}],["架构设计中",{"2":{"189":1}}],["架构设计",{"0":{"189":1},"1":{"190":1,"191":1},"2":{"282":1,"553":1}}],["架构",{"2":{"182":1,"226":1,"283":1,"337":1,"342":1,"573":1,"645":1,"702":1,"815":1,"845":1,"846":1}}],["架构助理",{"2":{"170":1}}],["架构目标是绘制出一张清晰的数据流拓扑图",{"2":{"174":1}}],["架构目标",{"2":{"169":1}}],["架构深度的绝佳场景",{"2":{"96":1}}],["架构级难点",{"0":{"96":1}}],["架构更简洁",{"2":{"60":1}}],["架构有多合理",{"2":{"59":1}}],["存档",{"2":{"583":1}}],["存放在",{"2":{"442":2}}],["存放某个产品发布的所有背景材料",{"2":{"437":1}}],["存放纯粹的业务逻辑",{"2":{"336":1}}],["存量是系统的",{"2":{"384":1}}],["存量",{"2":{"384":1}}],["存量与流量",{"2":{"384":1}}],["存量项目主流",{"2":{"308":1}}],["存扩展字段",{"2":{"200":1}}],["存在严重的安全风险和样式隔离问题",{"2":{"933":1}}],["存在",{"2":{"892":1}}],["存在以下限制",{"2":{"873":1}}],["存在着诸如谈话交流",{"2":{"614":1}}],["存在破坏性变更",{"2":{"331":1}}],["存在等待周期内的盲区",{"2":{"166":1}}],["存在时",{"2":{"95":1}}],["存在的意义",{"2":{"59":1}}],["存储客观的设计令牌",{"2":{"965":1}}],["存储关键帧数据",{"2":{"772":1}}],["存储关键帧数据并提供插值计算",{"2":{"738":1}}],["存储顶点位置",{"2":{"766":1}}],["存储纹理",{"2":{"763":1}}],["存储当前对话流",{"2":{"410":1}}],["存储当前的对话流",{"2":{"408":1}}],["存储的只是有限轮次的对话历史",{"2":{"410":1}}],["存储长期的知识库",{"2":{"408":1}}],["存储工具",{"2":{"274":1,"763":1}}],["存储复杂对象",{"2":{"261":1}}],["存储数字",{"2":{"261":1}}],["存储数据的数组",{"2":{"261":1}}],["存储字符串",{"2":{"261":1}}],["存储订单信息",{"2":{"18":1}}],["存储用户的个人偏好",{"2":{"410":1}}],["存储用户购物车",{"2":{"18":1}}],["存储用户评论",{"2":{"11":1}}],["存储购物车数据",{"2":{"18":1}}],["存储",{"2":{"8":2,"685":1,"828":1,"832":1}}],["所关注的焦点超越了如何对事务进行有效而机械的管理",{"2":{"1006":1}}],["所见即所得",{"2":{"728":1}}],["所束缚",{"2":{"393":1}}],["所迷惑",{"2":{"390":1}}],["所谓",{"2":{"609":1,"610":1,"1008":2,"1019":1}}],["所谓渐进式披露与动态发现",{"2":{"443":1}}],["所谓增强回路",{"2":{"386":1}}],["所谓锻炼洞察力",{"2":{"382":1}}],["所谓的",{"2":{"327":1}}],["所以适应混合工作制",{"2":{"1040":1}}],["所以读书与自我规划学习也是笔者的选择",{"2":{"1029":1}}],["所以笔者认为",{"2":{"1041":1}}],["所以笔者冒出了一个想法",{"2":{"1038":1}}],["所以笔者结合自身经历和健康知识",{"2":{"1025":1}}],["所以笔者这里也未必能分享出多么稀奇古怪的见解",{"2":{"1020":1}}],["所以在接近康复出院的时候就开始跟医生",{"2":{"1024":1}}],["所以标题也命名为",{"2":{"1019":1}}],["所以经常会固执坚守错误的认知",{"2":{"1007":1}}],["所以",{"2":{"610":1,"1013":1,"1019":1,"1030":1,"1042":1,"1045":1}}],["所以你当然可以访问所有这些属性",{"2":{"239":1}}],["所以结果是",{"2":{"227":1}}],["所以不能当作完整行处理",{"2":{"141":1}}],["所倡导的",{"2":{"179":1}}],["所有任务完成",{"2":{"999":1}}],["所有任务完成后",{"2":{"983":1,"995":1}}],["所有视图表现全量转化为纯文本类名",{"2":{"965":1}}],["所有按钮都有的属性",{"2":{"964":1}}],["所有版本的协议",{"2":{"939":1}}],["所有错误都被视为可重试",{"2":{"898":1}}],["所有参数必须编码在",{"2":{"873":1}}],["所有活跃的",{"2":{"826":1}}],["所有定时实体的父类",{"2":{"819":1}}],["所有实验",{"2":{"790":1}}],["所有实体仓储都实现这个接口",{"2":{"256":1}}],["所有下层模块",{"2":{"789":1}}],["所有入口都引用",{"2":{"765":1}}],["所有修饰器继承自",{"2":{"744":1}}],["所有渲染器+表达式+效果",{"2":{"735":1}}],["所有功能模块",{"2":{"711":1}}],["所有功能",{"2":{"704":1}}],["所有节点的抽象基类",{"0":{"682":1}}],["所有可定时实体的基础",{"2":{"822":1}}],["所有可渲染形状的基类",{"2":{"680":1}}],["所有可能字符串值",{"2":{"227":1}}],["所有图形对象的基类契约",{"2":{"692":1}}],["所有图形对象的抽象基类",{"2":{"677":1,"680":1}}],["所有图形对象以树形节点组织",{"2":{"675":1}}],["所有用户交互",{"2":{"654":1}}],["所有导出函数必须有",{"2":{"578":1}}],["所有处理函数返回",{"2":{"576":1}}],["所有函数必须有类型注解",{"2":{"573":1}}],["所有知识点",{"2":{"494":1}}],["所有提交信息均能通过",{"2":{"451":1}}],["所有引用处都会报错",{"2":{"311":1}}],["所有变量和函数都共享全局作用域",{"2":{"298":1}}],["所有",{"2":{"239":1,"254":1,"472":1,"662":1,"663":1,"712":1,"740":1,"909":1,"925":1,"939":1}}],["所有属性缺一不可",{"2":{"236":1}}],["所有数字的集合",{"2":{"227":1}}],["所有数字值的集合",{"2":{"227":1}}],["所有字符串值的集合",{"2":{"227":1}}],["所有子节点完成",{"2":{"827":1}}],["所有子页面自动继承这一结构",{"2":{"67":1}}],["所有子组件都被迫成为",{"2":{"62":1}}],["所有页面跳转均通过此方法",{"2":{"662":1}}],["所有页面都在构建时生成",{"2":{"53":1}}],["所有页面已通过构建工具",{"2":{"2":1}}],["所需的基础能力",{"2":{"59":1}}],["库来实现第三方样式覆盖和复杂逻辑的物理隔离",{"2":{"971":1}}],["库会带来一定的运行时性能开销",{"2":{"959":1}}],["库而非应用",{"2":{"731":1}}],["库构建",{"2":{"706":1}}],["库都能无缝集成到",{"2":{"321":1}}],["库作者面临一个尴尬的局面",{"2":{"306":1}}],["库开发",{"2":{"204":1}}],["库开发时不推荐开启",{"2":{"203":1}}],["库的功能是否与需求完全匹配",{"2":{"194":1}}],["库",{"0":{"59":1},"2":{"59":1,"142":1,"339":1,"340":1,"341":1,"346":11,"763":1,"765":1,"964":1,"971":1}}],["库存错误",{"2":{"47":1}}],["库存",{"2":{"18":1,"36":1}}],["树形",{"2":{"939":1}}],["树形结构",{"2":{"672":1,"706":1}}],["树形结构天然匹配组件树",{"2":{"642":1}}],["树生成",{"2":{"851":1}}],["树图",{"2":{"706":1}}],["树遍历",{"2":{"677":1}}],["树纯粹",{"2":{"169":1}}],["树",{"2":{"58":1,"61":1,"653":1,"941":1}}],["字符乱序切换动画",{"2":{"819":1}}],["字符",{"2":{"805":1,"873":1}}],["字符串需要用到",{"2":{"971":1}}],["字符串调用",{"2":{"786":1}}],["字符串字面量",{"2":{"655":1}}],["字符串",{"2":{"647":1,"655":1,"835":1,"910":1}}],["字符串等",{"2":{"270":1}}],["字符串路径",{"2":{"210":1}}],["字符串判空",{"2":{"193":1}}],["字符串后直接返回给浏览器",{"2":{"57":1}}],["字形间额外间距",{"2":{"805":1}}],["字形宽度测量",{"2":{"796":1}}],["字形宽度数组等",{"2":{"793":1}}],["字形拆分",{"2":{"795":1}}],["字形双级游标",{"2":{"793":1}}],["字形安全诊断工具",{"2":{"790":1}}],["字形级累积宽度",{"2":{"805":1}}],["字形级",{"2":{"796":1}}],["字形级再分段",{"2":{"795":1}}],["字形级分段",{"2":{"792":1}}],["字形级段拆分缓存",{"2":{"790":1}}],["字形级宽度计算策略",{"2":{"805":2}}],["字形级宽度数组",{"2":{"793":1,"797":1}}],["字形级宽度",{"2":{"790":1}}],["字形级宽度预计算",{"2":{"789":1,"796":1}}],["字形缓存",{"2":{"789":1}}],["字形分割缓存",{"2":{"789":1}}],["字母属性",{"2":{"735":1}}],["字体排版和基础色彩交给",{"2":{"967":1}}],["字体简写",{"2":{"805":1}}],["字体矩阵",{"2":{"790":1}}],["字体尺寸解析",{"2":{"789":1}}],["字体引擎作为",{"2":{"784":1}}],["字体文件",{"2":{"763":1}}],["字体属性获取",{"2":{"735":1}}],["字体管理器覆盖",{"2":{"735":1}}],["字体管理器",{"2":{"735":1}}],["字体管理",{"2":{"734":1}}],["字体",{"2":{"442":1,"738":1,"785":1,"962":1,"965":1,"971":1}}],["字面量",{"2":{"231":1}}],["字面量联合",{"2":{"229":1}}],["字节流",{"2":{"883":1}}],["字节跳动旗下豆包大模型开放平台",{"2":{"522":1}}],["字节跳动推出的新一代大模型",{"2":{"512":1}}],["字节跳动前端团队维护的专业微信公众号",{"2":{"346":1}}],["字节块",{"2":{"143":1}}],["字节读取",{"2":{"143":2}}],["字节",{"2":{"115":2}}],["字段调用的函数",{"2":{"899":2}}],["字段的事件",{"2":{"898":1}}],["字段的值",{"2":{"138":1}}],["字段是刻意设计的最小权限原则",{"2":{"591":1}}],["字段提供更精细的控制",{"2":{"335":1}}],["字段实际上不存在",{"2":{"247":1}}],["字段对应",{"2":{"153":1}}],["字段即为",{"2":{"153":1}}],["字段即可",{"2":{"139":1}}],["字段可能多行",{"2":{"143":1}}],["字段间以空行分隔",{"2":{"143":1}}],["字段或",{"2":{"138":1}}],["字段承载实际数据内容",{"2":{"136":1}}],["字段用于断线重连时的位置标记",{"2":{"136":1}}],["字段指定事件类型",{"2":{"136":1}}],["字段组成",{"2":{"136":1}}],["字段和必需的",{"2":{"136":1}}],["字段控制",{"2":{"35":1}}],["字段",{"2":{"14":1,"138":1,"139":3,"141":2,"143":1,"144":1,"230":1,"649":1}}],["要结合实际情况具体处理",{"2":{"1047":1}}],["要学会在不同的场景下切换到不同的阅读方式",{"2":{"1030":1}}],["要考虑打工人工作比较忙碌的客观现实",{"2":{"1026":1}}],["要有自己的想法",{"2":{"1006":1}}],["要事第一",{"0":{"1006":1},"2":{"1006":2}}],["要执行的命令",{"2":{"994":1}}],["要删除的",{"2":{"952":1}}],["要更新的数据值",{"2":{"952":1}}],["要设置到",{"2":{"898":1}}],["要找人讨论",{"2":{"610":1}}],["要找到新的想法",{"2":{"360":1}}],["要带着问题去读书",{"2":{"609":1}}],["要完整地读",{"2":{"608":1}}],["要完整实现",{"2":{"141":1}}],["要",{"0":{"608":1,"609":1,"610":1}}],["要做完整全栈",{"2":{"562":1}}],["要做好语言之间的桥梁",{"2":{"54":1}}],["要让",{"2":{"546":1}}],["要点项",{"2":{"472":1}}],["要不要成为全栈",{"2":{"466":1}}],["要极简",{"2":{"445":1}}],["要素的关联关系容易被忽略",{"2":{"1007":1}}],["要素是易识别",{"2":{"1007":1}}],["要素",{"0":{"383":1},"2":{"383":3,"1007":1}}],["要写下来",{"2":{"375":1}}],["要在",{"2":{"372":1}}],["要训练产品",{"2":{"370":1}}],["要主动做预测",{"2":{"369":1}}],["要正确应用奥卡姆剃刀",{"2":{"181":1}}],["要求寄语内容引用一些关于诗歌创作的名人名言",{"2":{"506":1}}],["要求思路内容说明细致",{"2":{"506":1}}],["要求与限制",{"2":{"494":1}}],["要求同时满足多个接口",{"2":{"270":1}}],["要求输入必须是",{"2":{"269":1}}],["要求输入数据必须有唯一标识",{"2":{"266":1}}],["要求泛型参数必须包含",{"2":{"266":1}}],["要求",{"2":{"170":1,"177":1,"722":1,"860":4,"866":1}}],["要理解",{"2":{"56":1}}],["更从理论上理解了身体是根本的道理",{"2":{"1043":1}}],["更贴近人们常说的",{"2":{"1010":1}}],["更不知道如何解决",{"2":{"1007":1}}],["更重视同别人进行有效的互动合作",{"2":{"1006":1}}],["更重要",{"2":{"556":1}}],["更重要的是推导过程",{"2":{"493":1}}],["更看重",{"2":{"1006":1}}],["更觉得目标是一把双刃剑",{"2":{"1005":1}}],["更准确地表达自己的思想",{"2":{"1002":1}}],["更成熟的企业级解法",{"2":{"965":1}}],["更具结构化",{"2":{"958":1}}],["更灵活的服务器推送事件接收能力",{"2":{"872":1}}],["更轻量",{"2":{"793":1,"805":1,"881":1}}],["更容易错过",{"2":{"1005":1}}],["更容易通过防火墙和代理",{"2":{"881":1}}],["更容易发现真正值得投入的问题",{"2":{"629":1}}],["更容易被检索",{"2":{"443":1}}],["更会以一小部分取代整体",{"2":{"614":1}}],["更高效率",{"2":{"613":1}}],["更低成本",{"2":{"613":1}}],["更需要一种",{"2":{"601":1}}],["更需要从后端运营链条出发",{"2":{"391":1}}],["更颠覆了传统的",{"2":{"598":1}}],["更远",{"2":{"528":1}}],["更在数学基础知识的基础上侧重补充了一些机器学习",{"2":{"1011":1}}],["更在处理那",{"2":{"525":1}}],["更在内部深度观测",{"2":{"525":1}}],["更在于其",{"2":{"509":1}}],["更在于其完善的编译体系",{"2":{"226":1}}],["更美好的诗歌作品",{"2":{"506":1}}],["更加强调自由开放和直率陈述与进行",{"2":{"506":1}}],["更加可复用的代码体系",{"2":{"263":1}}],["更取决于开发者构建的工程约束",{"2":{"476":1}}],["更通过模块化设计增强了系统的可解释性与可控性",{"2":{"468":1}}],["更通过模块化的设计增强了系统的可解释性与可控性",{"2":{"467":1}}],["更通过静态性为现代前端工程化铺平了道路",{"2":{"316":1}}],["更聪明",{"2":{"443":1}}],["更像是一个初步成形的",{"2":{"419":1}}],["更让",{"2":{"415":1,"438":1}}],["更聚焦策略洞察",{"2":{"406":1}}],["更深刻地洞察人性",{"2":{"400":1}}],["更精准地定价",{"2":{"400":1}}],["更积极地",{"2":{"398":1}}],["更要洞察",{"2":{"625":1}}],["更要理解",{"2":{"537":1}}],["更要通过数据分析了解客户的需求",{"2":{"396":1}}],["更要深入研究用户的沉没感",{"2":{"393":1}}],["更要看博弈对手的行动边界",{"2":{"392":1}}],["更别提去修复它了",{"2":{"382":1}}],["更赋予了产品快速迭代",{"2":{"378":1}}],["更因为当你按",{"2":{"372":1}}],["更快的节奏",{"2":{"466":1}}],["更快到达目的地",{"2":{"366":1}}],["更快地构建出干净",{"2":{"340":1}}],["更可维护",{"2":{"528":1}}],["更可维护的大型应用",{"2":{"293":1}}],["更可能是优化",{"2":{"366":1}}],["更包含未来的维护成本",{"2":{"365":1}}],["更死磕",{"2":{"353":1}}],["更严苛的原则",{"2":{"352":1}}],["更强大的替代方案",{"2":{"342":1}}],["更能",{"2":{"418":1}}],["更能看透要素之间错综复杂的连接关系",{"2":{"383":1}}],["更能将很多以往需要极高人力成本的环节直接交给自动化程序处理",{"2":{"378":1}}],["更能洞察他其实",{"2":{"363":1}}],["更能设计出经得起时间推敲的工程结构",{"2":{"332":1}}],["更能利用",{"2":{"95":1}}],["更现代",{"2":{"322":1}}],["更为团队沉淀了一笔可以版本控制",{"2":{"456":1}}],["更为系统运行的稳定性提供了坚实保障",{"2":{"434":1}}],["更为现代团队的高效协作铺设了最底层的基建",{"2":{"303":1}}],["更为可靠的人机协作实践模式",{"2":{"176":1}}],["更帮助你窥见了",{"2":{"271":1}}],["更好",{"2":{"246":1,"1008":1}}],["更多配置选项请参考",{"2":{"962":1}}],["更多",{"2":{"908":1}}],["更多分类",{"2":{"647":1}}],["更多是不愿改变旧有的阅读习惯",{"2":{"613":1}}],["更多控制",{"2":{"559":1}}],["更多了解可参考",{"2":{"478":1}}],["更多拓展阅读",{"2":{"456":1}}],["更多详细信息请可参考",{"2":{"225":1}}],["更多介绍与使用请参考",{"2":{"91":1}}],["更是成为影响力很大的公司",{"2":{"1008":1}}],["更是让个人能力产生爆炸式增长的",{"2":{"1001":1}}],["更是思维的松绑",{"2":{"604":1}}],["更是思维模型的重构",{"2":{"554":1}}],["更是能够最大化杠杆原有技能的沃土",{"2":{"552":1}}],["更是为了在算法与焦虑的夹击中",{"2":{"603":1}}],["更是为了探索",{"2":{"496":1}}],["更是为了让我们在面对复杂的全栈架构时",{"2":{"309":1}}],["更是人类创造力的解放",{"2":{"440":1}}],["更是",{"2":{"417":1,"464":1}}],["更是环境反馈的接收者",{"2":{"412":1}}],["更是商业模型更健康",{"2":{"400":1}}],["更是寻找价值创造的核心环节",{"2":{"397":1}}],["更是稀缺的",{"2":{"391":1}}],["更是关于成本与博弈",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1}}],["更是设计",{"2":{"367":1}}],["更是一场关于策略与创造力的刻意练习",{"2":{"600":1}}],["更是一场关于工作与生活方式的哲学探讨",{"2":{"381":1}}],["更是一个关于全链路治理的系统性命题",{"2":{"534":1}}],["更是一个能大幅降低信息噪音",{"2":{"356":1}}],["更是一套微型的教学法",{"2":{"494":1}}],["更是一份为",{"2":{"357":1}}],["更是一种抽象思维的体现",{"2":{"271":1}}],["更是一种思维方式",{"2":{"201":1}}],["更是同步与异步加载逻辑的博弈",{"2":{"333":1}}],["更是性能优化的关键",{"2":{"318":1}}],["更是代码文档的一部分",{"2":{"263":1}}],["更是对工程师素养的锤炼",{"2":{"201":1}}],["更少bug的代码",{"2":{"201":1}}],["更易于维护",{"2":{"509":1}}],["更易维护的泛型代码",{"2":{"263":1}}],["更易维护",{"2":{"201":1}}],["更易穿透防火墙与网关",{"2":{"130":1}}],["更简洁",{"2":{"181":1}}],["更关键的是",{"2":{"174":1}}],["更稳健的做法是将全自动化与半自动化并行推进",{"2":{"171":1}}],["更优雅的异步处理方式",{"2":{"881":1}}],["更优雅的解决方案",{"0":{"142":1}}],["更优雅",{"2":{"95":1}}],["更适合纯",{"2":{"81":1}}],["更代表了一种默认在服务端运行",{"2":{"59":1}}],["更笃定的技术决策",{"2":{"55":1}}],["更新数据模型",{"2":{"951":1}}],["更新组件列表",{"2":{"951":1}}],["更新搜索结果",{"2":{"949":1}}],["更新和工具调用交互",{"2":{"917":1}}],["更新检查",{"2":{"851":1}}],["更新持续时间",{"2":{"834":1}}],["更新回调",{"2":{"777":1}}],["更新类型",{"2":{"777":1}}],["更新标记",{"2":{"777":2}}],["更新所有活跃动画",{"2":{"772":1}}],["更新当前帧",{"2":{"749":1}}],["更新快照",{"2":{"667":1}}],["更新方法",{"2":{"662":1}}],["更新的完整流程",{"2":{"659":1}}],["更新依赖库",{"2":{"331":1}}],["更新用户浏览历史",{"2":{"289":1}}],["更新时间戳",{"2":{"269":1}}],["更新等底层逻辑",{"2":{"91":1}}],["更新",{"0":{"88":1,"96":1},"2":{"704":1,"941":2,"942":1,"946":1}}],["更新一篇文章时",{"2":{"36":1}}],["更新缓存",{"2":{"35":1}}],["更新静态页面",{"2":{"17":1}}],["很快又要回到一心一意敲键盘",{"2":{"1043":1}}],["很好地鼓励自己在统计学分析方面继续加大投入力度",{"2":{"1038":1}}],["很少吃早饭",{"2":{"1022":1}}],["很少有人会选择继续保持",{"2":{"1034":1}}],["很少有顾客能赢",{"2":{"1016":1}}],["很少有机会将其应用到实际工作中",{"2":{"1011":1}}],["很容易陷入",{"2":{"1009":1}}],["很容易进入",{"2":{"1005":1}}],["很难再有突破",{"2":{"1007":1}}],["很难进行层层递进的深入分析",{"2":{"606":1}}],["很低",{"2":{"965":1}}],["很划算",{"2":{"528":1}}],["很多基础设施已足够便捷",{"2":{"1041":1}}],["很多经验都是可以继续沿用的",{"2":{"1040":1}}],["很多看起来复杂的现象背后所包含的规律",{"2":{"1015":1}}],["很多抗拒电子书的人",{"2":{"613":1}}],["很多流传至今的名著",{"2":{"609":1}}],["很多工程改进任务",{"2":{"528":1}}],["很多方面的行为",{"2":{"482":1}}],["很多时候",{"2":{"387":1,"610":1,"1007":1}}],["很多时候我们对痛点视而不见",{"2":{"370":1}}],["很多人觉得时间管理",{"2":{"1034":1}}],["很多人把赚不到钱",{"2":{"621":1}}],["很多人容易沉溺于书籍带来的附加体验",{"2":{"613":1}}],["很多人不会反思自己是否创造了真正的社会价值",{"2":{"612":1}}],["很多人习惯直接看结论和观点",{"2":{"608":1}}],["很多人认为",{"2":{"368":1}}],["很多人被困在时髦的漩涡里",{"2":{"358":1}}],["很多人误以为",{"2":{"351":1}}],["很多人会以为两个函数类型的交叉会让参数类型变成联合类型",{"2":{"238":1}}],["很多人以为",{"2":{"54":1}}],["很多开发者容易将",{"2":{"134":1}}],["很可能会耗尽连接池",{"2":{"112":1}}],["很重要",{"2":{"69":1}}],["很酷",{"2":{"55":1}}],["组管理",{"2":{"939":1}}],["组",{"2":{"763":2}}],["组装积木开发者不再为组件编写专门的",{"2":{"962":1}}],["组装完整的",{"2":{"892":1}}],["组装完整消息",{"2":{"889":1,"892":1}}],["组装",{"2":{"737":1}}],["组装耗时和",{"2":{"550":1}}],["组织和其他形式的团体中获得成功都是至关重要的",{"2":{"1006":1}}],["组织容器",{"2":{"680":2}}],["组织结构",{"2":{"676":1}}],["组织下的",{"2":{"467":1}}],["组织级工作流",{"2":{"436":1}}],["组织",{"2":{"321":1}}],["组合逻辑",{"2":{"964":1}}],["组合成节点图后编译为着色器代码",{"2":{"766":1}}],["组合效果基类",{"2":{"735":1}}],["组合所有核心功能",{"2":{"706":1}}],["组合表单",{"2":{"647":1}}],["组合",{"2":{"523":1,"650":2,"677":1,"763":1,"771":1,"1011":1}}],["组合模式",{"0":{"248":1},"2":{"734":1}}],["组合优势",{"2":{"965":3}}],["组合优于嵌套",{"2":{"170":1}}],["组合优先",{"2":{"169":1}}],["组合使用才是真实战",{"2":{"55":1}}],["组件时",{"2":{"971":1}}],["组件时特别有用",{"2":{"249":1}}],["组件覆写",{"2":{"965":1}}],["组件渲染",{"2":{"964":1}}],["组件渲染策略各异的复杂页面",{"2":{"45":1}}],["组件内聚性消除",{"2":{"963":1}}],["组件列表",{"2":{"952":1}}],["组件定义",{"2":{"948":1}}],["组件定义与元数据",{"2":{"939":2}}],["组件通过",{"2":{"942":1}}],["组件通常需要处理各种类型的",{"2":{"256":1}}],["组件流式渲染场景",{"2":{"939":1}}],["组件递归渲染器",{"2":{"939":1}}],["组件注册表",{"2":{"939":4,"944":1}}],["组件聚合导出",{"2":{"939":1}}],["组件实例状态",{"2":{"939":1}}],["组件引用",{"2":{"939":1}}],["组件引用解析",{"2":{"706":1}}],["组件目录的唯一标识符",{"2":{"952":1}}],["组件目录注册与协商",{"2":{"948":1}}],["组件目录系统",{"0":{"948":1}}],["组件目录",{"2":{"939":1,"942":1}}],["组件目录与函数调用",{"2":{"939":1}}],["组件目录定义与",{"2":{"939":1}}],["组件目录规范",{"2":{"938":1}}],["组件上下文",{"2":{"938":1,"939":1}}],["组件封装了",{"2":{"917":1}}],["组件模块导出",{"2":{"720":1}}],["组件模型",{"2":{"709":1,"938":1}}],["组件提供连续",{"2":{"715":1}}],["组件视图",{"2":{"709":1}}],["组件辅助",{"2":{"706":1}}],["组件辅助函数",{"2":{"706":1}}],["组件基类",{"2":{"706":1,"939":1}}],["组件树的完整流程",{"2":{"658":1}}],["组件树一一对应的",{"2":{"653":1}}],["组件热重载插件",{"2":{"647":1}}],["组件编辑插件",{"2":{"647":1,"656":1}}],["组件样式",{"2":{"647":1}}],["组件插件",{"2":{"641":1,"647":1,"656":1}}],["组件生成",{"2":{"562":1}}],["组件生成工具",{"2":{"561":1}}],["组件嵌入现有项目",{"2":{"562":1}}],["组件代码片段",{"2":{"562":1}}],["组件代码",{"2":{"561":1}}],["组件文档",{"2":{"448":1}}],["组件所需的数据切片",{"2":{"342":1}}],["组件间状态共享",{"2":{"341":1}}],["组件间仅通过",{"2":{"170":1}}],["组件原语",{"2":{"340":1}}],["组件库时",{"2":{"964":1}}],["组件库和主题系统",{"2":{"639":1}}],["组件库和设计系统",{"2":{"291":1}}],["组件库",{"0":{"340":1},"2":{"286":1,"290":1,"340":3,"647":1,"961":1,"965":1,"967":1}}],["组件层",{"2":{"274":1,"645":1,"646":1}}],["组件层级树与职责描述",{"2":{"171":1}}],["组件等场景",{"2":{"269":1,"270":1}}],["组件开发",{"2":{"264":1}}],["组件可以保持对",{"2":{"263":1}}],["组件可直接查询数据库",{"2":{"60":1}}],["组件化是对",{"2":{"180":1}}],["组件划分",{"2":{"180":1}}],["组件的不同状态",{"2":{"964":1}}],["组件的集成测试",{"2":{"939":1}}],["组件的",{"2":{"170":1,"179":1,"939":1,"964":1}}],["组件是",{"2":{"170":1}}],["组件地狱",{"2":{"169":1}}],["组件重新挂载或请求",{"2":{"92":1}}],["组件只负责声明它需要什么数据",{"2":{"92":1}}],["组件负责",{"2":{"92":1}}],["组件计算虽然很快",{"2":{"77":1}}],["组件预取机制的基础",{"2":{"61":1}}],["组件默认就在服务端运行",{"2":{"61":1}}],["组件导入",{"2":{"53":1}}],["组件被渲染为",{"2":{"57":1}}],["组件被",{"2":{"50":1}}],["组件级",{"2":{"47":1}}],["组件级混合渲染",{"2":{"45":1,"46":1}}],["组件",{"0":{"170":1},"2":{"6":1,"27":1,"53":1,"72":1,"76":1,"181":1,"203":1,"274":1,"645":2,"647":2,"652":1,"661":2,"704":1,"708":2,"711":1,"851":1,"939":3,"941":1,"944":1,"959":1,"965":1,"967":1}}],["能不能拿出时间来捣鼓",{"2":{"1041":1}}],["能成为你知识体系中一块有价值的拼图",{"2":{"971":1}}],["能成为你升级认知操作系统的核心组件",{"2":{"389":1}}],["能完美兼容上层的所有开发模式",{"2":{"966":1}}],["能直接生成交互式",{"2":{"933":1}}],["能处理多种值类型的关键",{"2":{"828":1}}],["能快速触达核心信息与隐性经验",{"2":{"625":1}}],["能读取的文件数量和大小",{"2":{"594":1}}],["能深度索引企业级代码库",{"2":{"567":1}}],["能接收",{"2":{"567":1}}],["能前瞻",{"2":{"564":1}}],["能从需求描述自动生成完整项目",{"2":{"561":1}}],["能判断",{"2":{"556":1}}],["能写后端",{"2":{"553":1}}],["能写多快",{"2":{"525":1}}],["能用来梳理",{"2":{"1037":1}}],["能用",{"2":{"550":1}}],["能用于检测代码是否符合指定的编码规范",{"2":{"219":1}}],["能借助",{"2":{"542":1}}],["能展开说说",{"2":{"518":1}}],["能否使用海外服务",{"2":{"519":1}}],["能否接受海外结算与汇率风险",{"2":{"519":1}}],["能否检索今日新闻",{"2":{"517":1}}],["能否跨文档建立联系",{"2":{"514":1}}],["能否导入",{"2":{"514":1}}],["能否将一个模糊的业务痛点",{"2":{"367":1}}],["能做产品阶段",{"2":{"459":1}}],["能做什么",{"2":{"411":1}}],["能精准匹配技能",{"2":{"445":1}}],["能有效降低任务遗漏和幻觉风险",{"2":{"423":1}}],["能有效缓解某些复杂的循环引用问题",{"2":{"318":1}}],["能说",{"2":{"418":1}}],["能听",{"2":{"418":1}}],["能看",{"2":{"418":1}}],["能编排复杂",{"2":{"403":1}}],["能量传到末端就结束了",{"2":{"386":1}}],["能以最低的成本感知并修正",{"2":{"376":1}}],["能理解的精确指令和环境",{"2":{"367":1}}],["能把模糊的人类需求翻译成",{"2":{"367":1}}],["能解决什么痛点",{"2":{"342":1}}],["能帮助用户学习诗歌创作的窍门",{"2":{"506":1}}],["能帮助我们更深入地洞察类型系统的本质",{"2":{"244":1}}],["能帮助我们更深刻地理解",{"2":{"54":1}}],["能帮你生成",{"2":{"460":1}}],["能帮开发者用更少的代码",{"2":{"340":1}}],["能跑就行",{"2":{"337":1}}],["能极大地降低沟通成本",{"2":{"330":1}}],["能根治依赖混乱",{"2":{"315":1}}],["能提供精准的补全",{"2":{"310":1}}],["能提高效率",{"2":{"192":1}}],["能对代码的加载",{"2":{"309":1}}],["能为你未来的工程实践铺垫好最坚实的底色",{"2":{"303":1}}],["能为后续快照测试",{"2":{"171":1}}],["能显著优化大型应用的首页首屏加载速度",{"2":{"297":1}}],["能确定联合类型的具体分支时",{"2":{"231":1}}],["能确保回调命名语义清晰",{"2":{"178":1}}],["能确保状态设计遵循",{"2":{"178":1}}],["能自己用简单代码实现的",{"2":{"192":1}}],["能基于此状态集合进行确定性渲染",{"2":{"173":1}}],["能通过已有",{"2":{"173":1}}],["能够熟练地与",{"2":{"1002":1}}],["能够批量处理信息",{"2":{"628":1}}],["能够完成",{"2":{"567":1}}],["能够设计出高可用",{"2":{"558":1}}],["能够发现真实世界中值得解决的问题",{"2":{"558":1}}],["能够利用",{"2":{"548":1}}],["能够像搭积木一样",{"2":{"547":1}}],["能够像乐高积木一样无缝对接各种云端",{"2":{"411":1}}],["能够快速响应业务需求",{"2":{"542":1}}],["能够快速读懂",{"2":{"533":1}}],["能够单枪匹马或带领极小团队",{"2":{"540":1}}],["能够更灵活细致地抒情和叙事",{"2":{"506":1}}],["能够更高效地执行和管理",{"2":{"422":1}}],["能够按要求输出诗歌",{"2":{"505":2}}],["能够轻松回答诸如",{"2":{"486":1}}],["能够独立开发完整产品",{"2":{"459":1}}],["能够显著提升",{"2":{"444":1}}],["能够在实际项目中灵活应用",{"2":{"545":1}}],["能够在更复杂的场景下执行更专业的任务",{"2":{"441":1}}],["能够在提供类型安全的同时",{"2":{"256":1}}],["能够稳定",{"2":{"436":1}}],["能够聚焦于每一个细小的确定性步骤",{"2":{"422":1}}],["能够自主调度资源并交付结果的",{"2":{"420":1}}],["能够作为机器上的长久守护进程运行",{"2":{"419":1}}],["能够处理具备深度依赖关系的复杂工程",{"2":{"414":1}}],["能够解决开放式问题的智能系统",{"2":{"414":1}}],["能够",{"2":{"410":1,"933":1}}],["能够精准理解复杂指令",{"2":{"402":1}}],["能够区分",{"2":{"366":1}}],["能够识别用户未说出口的情绪",{"2":{"366":1}}],["能够切换到用户的真实使用场景",{"2":{"366":1}}],["能够准确理解并生成高质量代码的前提",{"2":{"332":1}}],["能够迅速建立",{"2":{"332":1}}],["能够迅速为我们铺好工程地基",{"2":{"171":1}}],["能够有效封装业务规则",{"2":{"281":1}}],["能够有效压缩",{"2":{"179":1}}],["能够让我们在保持代码简洁的同时",{"2":{"263":1}}],["能够帮助我们更高效地构建和维护高质量的",{"2":{"226":1}}],["能够以惊人的速度生成代码时",{"2":{"180":1}}],["能够极其精确地管理复杂筛选条件下的缓存簇",{"2":{"92":1}}],["能让每个分支都获得",{"2":{"243":1}}],["能让",{"2":{"170":1,"177":1,"180":1}}],["能突破",{"2":{"135":1}}],["能力检测",{"2":{"763":1}}],["能力维度",{"2":{"542":1,"545":1,"550":1,"551":1,"555":1,"557":1}}],["能力演进",{"2":{"534":1}}],["能力重塑",{"2":{"525":1}}],["能力与意识是程序员的底层",{"2":{"509":1}}],["能力并非一蹴而就",{"2":{"464":1}}],["能力拆解图",{"2":{"458":1}}],["能力文件夹",{"2":{"441":1}}],["能力编织成高吞吐量的工作流",{"2":{"440":1}}],["能力规模化",{"2":{"426":1}}],["能力边界的清晰认知",{"2":{"493":1}}],["能力边界",{"2":{"408":1}}],["能力建构",{"2":{"406":1}}],["能力的提升",{"2":{"527":1}}],["能力的",{"2":{"403":1}}],["能力模块",{"2":{"248":1}}],["能力最有力的背书",{"2":{"48":1}}],["能力",{"2":{"40":1,"434":1,"512":1,"518":1,"565":1,"902":1,"958":1}}],["小份轻食",{"2":{"1047":1}}],["小时用于处理重要不紧急的事",{"2":{"1036":1}}],["小时的无干扰时间",{"2":{"1036":1}}],["小时不间断工作的数字员工的愿景",{"2":{"419":1}}],["小事情推动靠聪明才智",{"2":{"1008":1}}],["小版本修正",{"2":{"939":1}}],["小项目",{"2":{"568":1}}],["小项目用简单架构",{"2":{"189":1}}],["小程序双端",{"2":{"562":1}}],["小团队",{"2":{"523":1}}],["小精灵已备好笔墨",{"2":{"507":1}}],["小圆点代表物品",{"2":{"494":1}}],["小故事或数据",{"2":{"494":1}}],["小步快跑",{"2":{"427":1}}],["小步快跑模式",{"2":{"414":1}}],["小脑",{"0":{"432":1},"2":{"402":1}}],["小成功靠聪明才智",{"2":{"386":1}}],["小",{"2":{"381":1}}],["小而美",{"2":{"381":1,"601":1,"1000":1,"1041":1}}],["小提示",{"2":{"174":1}}],["小数据包传输场景",{"2":{"115":1}}],["小部件",{"2":{"62":1,"82":1}}],["小结",{"0":{"128":1,"270":1,"431":1,"1032":1},"2":{"54":1}}],["小型持久不变测试",{"2":{"790":1}}],["小型项目可能不需要完整的",{"2":{"283":1}}],["小型项目直接用",{"2":{"191":1}}],["小型团队项目",{"2":{"19":1}}],["小型博客",{"2":{"6":1}}],["非代码",{"2":{"975":1}}],["非常实用的透明度修饰符",{"2":{"970":1}}],["非常适合以业务逻辑为主",{"2":{"961":1}}],["非常适合基于组件化开发的现代框架",{"2":{"960":1}}],["非常适合前端",{"2":{"561":1}}],["非常适合快速迭代的产品",{"2":{"342":1}}],["非常适合用于管理全局状态",{"2":{"301":1}}],["非常适合实现",{"2":{"153":1}}],["非常适合文档站",{"2":{"54":1}}],["非流式返回完整结果",{"2":{"915":1}}],["非流式",{"2":{"913":1}}],["非词",{"2":{"795":1}}],["非渲染场景节点",{"2":{"766":1}}],["非技术人员独立做出可上线产品",{"2":{"562":1}}],["非技术背景想独立做出有数据库的产品",{"2":{"562":1}}],["非结构化",{"0":{"504":1},"1":{"505":1,"507":1,"508":1}}],["非替代关系",{"2":{"349":1}}],["非必要环节",{"2":{"201":1}}],["非必要参数",{"2":{"195":1}}],["非但没有退出历史舞台",{"2":{"156":1}}],["非致命错误",{"2":{"150":1}}],["非",{"2":{"61":1,"81":1,"562":1}}],["非公开页面",{"2":{"46":1}}],["主给出的时间消耗建议",{"2":{"1038":1}}],["主列出的这个东西可能就是当下自己没有梳理过的时间分配准则",{"2":{"1038":1}}],["主在讲",{"2":{"1038":1}}],["主体",{"2":{"994":1}}],["主技能文件",{"2":{"980":1}}],["主工作流",{"2":{"979":1}}],["主品牌色",{"2":{"962":1}}],["主视图",{"2":{"942":1}}],["主编辑器页面",{"2":{"939":1}}],["主编综述",{"2":{"632":1}}],["主控制器模块",{"0":{"891":1}}],["主控器类型定义",{"2":{"706":1}}],["主配置",{"2":{"882":1}}],["主实现",{"2":{"882":1}}],["主循环驱动",{"2":{"826":1}}],["主循环",{"2":{"814":1,"818":1}}],["主状态面板",{"2":{"790":1}}],["主类",{"2":{"704":1,"706":1}}],["主页",{"2":{"699":1}}],["主包测试用例",{"2":{"647":1}}],["主会话中的项目上下文依然清晰",{"2":{"590":1}}],["主",{"2":{"590":1,"592":2,"647":1,"883":1,"891":1,"939":1}}],["主力实现",{"2":{"939":2}}],["主力",{"2":{"938":1,"939":2}}],["主力渲染器",{"2":{"936":1}}],["主力走质量优先的模型",{"2":{"523":1}}],["主力模型",{"2":{"523":1}}],["主打超长中文上下文",{"2":{"522":1}}],["主打轻量高效",{"2":{"512":1}}],["主搜索页",{"2":{"518":1}}],["主站全量上线",{"2":{"518":1}}],["主入口文件",{"2":{"490":1}}],["主文件",{"2":{"442":1}}],["主文件必须命名为",{"2":{"442":1}}],["主对话环境",{"2":{"415":1}}],["主智能体将课题分解为",{"2":{"474":1}}],["主智能体",{"2":{"415":1,"471":1}}],["主版本号",{"2":{"331":2}}],["主应用传递",{"2":{"289":1}}],["主应用中使用子应用组件",{"2":{"288":1}}],["主应用名称",{"2":{"288":1}}],["主应用",{"2":{"288":2,"290":1}}],["主应用负责加载子应用",{"2":{"288":1}}],["主应用负责路由分发",{"2":{"286":1}}],["主应用配置",{"2":{"288":1}}],["主题定义",{"2":{"948":1}}],["主题工具函数",{"2":{"939":1}}],["主题兼容层",{"2":{"939":1}}],["主题上下文",{"2":{"939":1}}],["主题河流图",{"2":{"706":1}}],["主题对象",{"2":{"662":1}}],["主题编辑器辅助工具",{"2":{"647":1}}],["主题编辑辅助",{"2":{"646":1}}],["主题样式",{"2":{"647":1}}],["主题组件",{"2":{"647":1}}],["主题系统",{"2":{"647":1,"939":1}}],["主题配置",{"2":{"274":1}}],["主题",{"2":{"274":1,"504":1,"505":2,"506":3,"507":1,"508":1,"645":1,"706":1}}],["主题切换",{"2":{"54":1}}],["主动适应远程办公工具等数字化",{"2":{"1041":1}}],["主动使用技能",{"2":{"986":1}}],["主动建立个人过滤机制",{"2":{"624":1}}],["主动观察",{"2":{"585":1}}],["主动召唤",{"2":{"584":1}}],["主动性",{"2":{"402":1,"585":1}}],["主动释放连接",{"2":{"163":1}}],["主动取消并抛出",{"2":{"144":1}}],["主动拉取最新数据",{"2":{"123":1}}],["主动推送给服务端",{"2":{"118":1}}],["主动推送给浏览器",{"2":{"118":1}}],["主要原因有以下三点",{"2":{"1041":1}}],["主要还是社会变化过快",{"2":{"1005":1}}],["主要配角",{"2":{"1002":1}}],["主要状态样式",{"2":{"961":1}}],["主要挑战是处理",{"2":{"947":1}}],["主要用户",{"2":{"902":1,"974":1}}],["主要用于",{"2":{"102":1}}],["主要公共",{"2":{"750":1}}],["主要分布",{"2":{"647":1}}],["主要模块的划分和组织方式",{"2":{"572":1}}],["主要由具备深厚算法背景和底层工程能力的顶级大厂或",{"2":{"551":1}}],["主要包括",{"2":{"443":1}}],["主要为一些包含静态资源的文件夹",{"2":{"442":1}}],["主要指上下文学习",{"2":{"410":1}}],["主要有先分解后规划",{"2":{"409":1}}],["主要内置于",{"2":{"343":1}}],["主要是想引出一些启发",{"2":{"1016":1}}],["主要是为了解决",{"2":{"342":1}}],["主要是因为它能解决传统开发模式下的诸多痛点",{"2":{"297":1}}],["主要环境",{"2":{"308":1}}],["主要代表是",{"2":{"298":1}}],["主要目的",{"2":{"210":1}}],["主要依赖",{"2":{"166":1}}],["主要流程可概括为",{"2":{"162":1}}],["主要使用字符串",{"2":{"92":1}}],["主导或参与了多个基于大模型的应用落地",{"2":{"1000":1}}],["主导开发",{"2":{"559":1}}],["主导",{"2":{"98":2,"647":1}}],["主流方案还包括预处理器",{"2":{"957":1}}],["主流",{"0":{"957":1},"2":{"545":1}}],["主流选择",{"2":{"9":1}}],["主流平台",{"2":{"7":1}}],["少量水饺",{"2":{"1047":1}}],["少量水饺使用青椒",{"2":{"1047":1}}],["少量水饺使用三文鱼",{"2":{"1047":1}}],["少量组件",{"2":{"706":1}}],["少量或不需要",{"2":{"45":1}}],["少年天才",{"2":{"614":1}}],["少即是多",{"2":{"378":1}}],["少",{"2":{"54":1}}],["就这样",{"2":{"1037":1,"1046":1}}],["就这样经过长年累月地洗礼",{"2":{"1022":1}}],["就越体会到挫败感",{"2":{"1036":1}}],["就越有人和你合作",{"2":{"1007":1}}],["就创建了一个",{"2":{"1031":1}}],["就很可能让最后训练出来的模型比单独训练出来的模型表现得更好",{"2":{"1017":1}}],["就可以恢复原始图像",{"2":{"1015":1}}],["就一个字",{"2":{"1007":1}}],["就开开心心地向前看",{"2":{"1005":1}}],["就开始返回数据",{"2":{"124":1}}],["就叫",{"2":{"961":1}}],["就怎么写",{"2":{"961":1}}],["就永远停留在",{"2":{"622":1}}],["就会想到在学校毕业季曾因锻炼不当锻炼后疼了很久",{"2":{"1046":1}}],["就会得到方程组",{"2":{"1014":1}}],["就会自动推导出必须输出",{"2":{"971":1}}],["就会完全错失这部分在数量上更为庞大的知识宝库",{"2":{"614":1}}],["就会彻底失去读书的平常心和客观理解力",{"2":{"612":1}}],["就会发现",{"2":{"326":1}}],["就失去了读书的平常心和客观理解力",{"2":{"612":1}}],["就该拆分出来",{"2":{"577":1}}],["就已经走在了正确的方向上",{"2":{"465":1}}],["就不可能知道问题出在哪里",{"2":{"1007":1}}],["就不可能知道问题到底出在哪一行",{"2":{"382":1}}],["就不再是客观接受信息",{"2":{"612":1}}],["就不会波及其他模块",{"2":{"297":1}}],["就要恢复对",{"2":{"370":1}}],["就强行创造一个需求",{"2":{"365":1}}],["就必须抓住不合理的迹象",{"2":{"360":1}}],["就必须确保这个对象有这个属性",{"2":{"263":1}}],["就没有如此高效的",{"2":{"316":1}}],["就形成了循环依赖",{"2":{"315":1}}],["就能组成输入与输出之间的增强回路",{"2":{"1008":1}}],["就能完成过去一支团队的交付量",{"2":{"553":1}}],["就能自行拆解问题",{"2":{"355":1}}],["就能安全地处理多种类型",{"2":{"255":1}}],["就能看到导航栏",{"2":{"74":1}}],["就证明所有可能的情况都已经被处理了",{"2":{"232":1}}],["就像我曾经以为的那样",{"2":{"553":1}}],["就像我们逐步缩小搜索范围一样",{"2":{"231":1}}],["就像一个调研项目",{"2":{"415":1}}],["就像一个",{"2":{"407":1}}],["就像洗澡时调水温",{"2":{"388":1}}],["就像没有",{"2":{"375":1}}],["就像资深程序员看到一段代码就能嗅出",{"2":{"363":1}}],["就像是一个",{"2":{"254":1}}],["就像每张身份证都有一个唯一的身份证号",{"2":{"230":1}}],["就满足类型要求",{"2":{"229":1}}],["就通过",{"2":{"174":1}}],["就是基于二维平面来安排好自己的工作与生活",{"2":{"1040":1}}],["就是白费功夫",{"2":{"1034":1}}],["就是强调",{"2":{"1008":1}}],["就是继续保持之前的习惯",{"2":{"1008":1}}],["就是收集更多的技术徽章",{"2":{"1001":1}}],["就是南辕北辙了",{"2":{"613":1}}],["就是解决从",{"2":{"550":1}}],["就是新的工程",{"2":{"533":1}}],["就是对比传统",{"2":{"503":1}}],["就是应用程序",{"2":{"439":1}}],["就是标准化的",{"2":{"436":1}}],["就是一个",{"2":{"402":1}}],["就是试图进行帕累托改进",{"2":{"394":1}}],["就是让这个世界回归平衡",{"2":{"387":1,"1009":1}}],["就是两条或多条因果链首尾相连",{"2":{"386":1}}],["就是它们之间的",{"2":{"383":1}}],["就是设计这个",{"2":{"367":1}}],["就是商业嗅觉的体现",{"2":{"363":1}}],["就是我的机会",{"0":{"354":1}}],["就是",{"2":{"231":1,"439":1,"964":1}}],["就是集合",{"2":{"229":1}}],["就是完美的",{"2":{"179":1}}],["就是更好的选择",{"2":{"99":1}}],["就是最优解",{"2":{"54":1}}],["就需要准确知道列表的",{"2":{"98":1}}],["就把整个项目拖回传统服务端渲染模式",{"2":{"63":1}}],["就足够了",{"2":{"55":1}}],["就少一分运行时复杂度",{"2":{"54":1}}],["就近加载",{"2":{"3":1}}],["层以上的选择器",{"2":{"970":1}}],["层采用观察者模式",{"2":{"917":1}}],["层的核心契约",{"2":{"925":1}}],["层的消息抽象",{"2":{"913":1}}],["层的完整范式",{"2":{"901":1}}],["层的业务代码纹丝不动",{"2":{"336":1}}],["层次",{"2":{"786":1,"818":1}}],["层次化场景图",{"2":{"769":1}}],["层次元素",{"2":{"735":1}}],["层生效",{"2":{"577":1}}],["层面",{"2":{"533":1,"622":1,"815":1}}],["层出不穷的框架让人眼花缭乱",{"2":{"496":1}}],["层级嵌套过深以及维护成本极高等问题",{"2":{"957":1}}],["层级计算",{"2":{"789":1}}],["层级分明",{"2":{"597":1}}],["层级",{"2":{"274":1,"279":1,"734":1,"762":1,"846":1,"936":1}}],["层级瞬间变薄",{"2":{"170":1}}],["层",{"2":{"54":1,"274":2,"336":5,"353":2,"645":1,"704":1,"705":1,"733":1,"734":2,"789":4,"849":2,"850":2,"906":1,"907":1,"968":1,"970":1}}],["两条线特征近似",{"2":{"1014":1}}],["两条轨道",{"2":{"628":1}}],["两级缓存",{"2":{"796":1}}],["两级体系",{"2":{"570":1}}],["两阶段审查",{"2":{"983":1,"999":1}}],["两阶段审查流程",{"2":{"980":1}}],["两阶段协调",{"2":{"789":2}}],["两阶段分离",{"2":{"786":1}}],["两阶段",{"2":{"785":1}}],["两套具体实现",{"2":{"761":1}}],["两大阶段",{"2":{"704":1}}],["两大核心能力",{"2":{"564":1}}],["两脚书橱",{"2":{"615":1}}],["两天前",{"2":{"457":1}}],["两家都不敢轻易涨价",{"2":{"392":1}}],["两层架构",{"2":{"191":1}}],["两种选择",{"2":{"673":1}}],["两种导入方式",{"2":{"672":1}}],["两种协作范式",{"2":{"628":1}}],["两种策略核心对比与选型建议",{"0":{"166":1}}],["两种技术",{"0":{"134":1}}],["两种语法树",{"2":{"54":1}}],["两者基本保持此消彼长的竞争状态",{"2":{"1046":1}}],["两者结合完美契合了",{"2":{"965":1}}],["两者都通过",{"2":{"679":1}}],["两者都会在特定场景下被触发",{"2":{"592":1}}],["两者都支持基于前一个请求的结果发起下一个请求",{"2":{"98":1}}],["两者往往配合使用",{"2":{"588":1}}],["两者的天作之合并非偶然",{"2":{"179":1}}],["两者在核心功能方面的对比分析",{"2":{"98":1}}],["两者各有侧重",{"2":{"97":1}}],["两者分别解决不同维度的问题",{"2":{"77":1}}],["两类",{"2":{"83":1,"1031":1}}],["两个方面来编排这四个因素",{"2":{"1008":1}}],["两个核心方法",{"2":{"913":1}}],["两个函数密切配合",{"2":{"827":1}}],["两个函数类型的交叉",{"2":{"238":2}}],["两个运算符的含义就一目了然",{"2":{"227":1}}],["两个层次",{"0":{"134":1}}],["两个",{"2":{"74":1}}],["两个阶段存在多种技术选择",{"2":{"21":1}}],["代表技术",{"2":{"958":1,"959":1,"960":1,"961":1,"962":1,"964":1,"965":1}}],["代表一个独立的",{"2":{"942":1,"951":1}}],["代表一个着色器计算单元",{"2":{"770":1}}],["代表一个不可能存在的值",{"2":{"232":1}}],["代表人耳",{"2":{"763":1}}],["代表着",{"2":{"592":1}}],["代表了那些如果没有",{"2":{"526":1}}],["代表工具",{"2":{"305":1}}],["代表任意类型",{"2":{"258":1}}],["代表框架",{"2":{"26":1,"30":1,"34":1}}],["代替",{"2":{"203":1}}],["代价",{"0":{"117":1}}],["代价是降低灵活性",{"2":{"815":1}}],["代价是服务器开销",{"2":{"55":1}}],["代价是放弃实时性",{"2":{"55":1}}],["代理示例",{"2":{"939":1}}],["代理属性的",{"2":{"742":1}}],["代理",{"2":{"570":1}}],["代理平台",{"2":{"523":1}}],["代理服务",{"2":{"107":1}}],["代理与缓冲",{"0":{"107":1}}],["代码设计与实现",{"2":{"1001":1}}],["代码补全工具",{"2":{"973":1}}],["代码容易变得非常长",{"2":{"962":1}}],["代码容易变得面条化",{"2":{"98":1}}],["代码分析规则",{"2":{"939":1}}],["代码分割加载",{"2":{"755":1}}],["代码编辑器",{"2":{"939":1}}],["代码编写与复杂推理任务",{"2":{"511":1}}],["代码编写者",{"2":{"303":1}}],["代码规范配置",{"2":{"735":1}}],["代码格式化",{"2":{"697":1}}],["代码格式检查",{"2":{"677":1}}],["代码提交前自动安全检查",{"2":{"592":1}}],["代码提测速度",{"2":{"385":1}}],["代码要写得好",{"2":{"578":1}}],["代码检查",{"2":{"573":1,"808":1,"904":1,"930":1}}],["代码发往云端",{"2":{"565":2}}],["代码默认存于本地",{"2":{"564":1}}],["代码工人",{"2":{"558":1}}],["代码审查器角色定义",{"2":{"980":1}}],["代码审查时提到",{"2":{"587":1}}],["代码审查",{"2":{"553":1,"583":1,"980":1}}],["代码审计与验收",{"2":{"555":1}}],["代码审计",{"2":{"415":1}}],["代码等多格式文件解析与深度研究模式",{"2":{"522":1}}],["代码等垂直搜索模式",{"2":{"518":1}}],["代码垂直搜索",{"2":{"518":1}}],["代码与逻辑推理能力已逼近",{"2":{"522":1}}],["代码与数学",{"2":{"512":1}}],["代码与数学推理",{"2":{"512":1}}],["代码与文档质量高",{"2":{"511":1,"521":1}}],["代码和多模态等方面表现出色",{"2":{"512":1}}],["代码创作",{"2":{"511":1}}],["代码助手",{"2":{"512":1}}],["代码助手等场景有更高要求的用户",{"2":{"510":1}}],["代码助手自动生成样板代码",{"2":{"405":1}}],["代码解释器",{"2":{"494":2}}],["代码示意如下",{"2":{"489":1}}],["代码示例",{"2":{"333":1,"962":1}}],["代码绘图",{"2":{"475":1}}],["代码库分析",{"2":{"628":1}}],["代码库",{"2":{"465":1}}],["代码重构等完整工程周期",{"2":{"567":1}}],["代码重构",{"2":{"451":1}}],["代码执行",{"2":{"439":1}}],["代码仓库",{"2":{"417":1}}],["代码异味",{"2":{"363":1}}],["代码风格配置",{"2":{"763":1}}],["代码风格规范",{"2":{"575":1}}],["代码风格倾向于",{"2":{"414":1}}],["代码风格",{"2":{"341":1,"436":1,"591":1}}],["代码之间",{"2":{"329":1}}],["代码演示",{"2":{"327":1}}],["代码契约",{"2":{"319":1}}],["代码引用",{"2":{"317":1}}],["代码怎么写",{"2":{"316":1}}],["代码量从几千行迅速增长到数万甚至数十万行",{"2":{"294":1}}],["代码共享",{"2":{"286":1}}],["代码更简洁",{"2":{"263":1}}],["代码意图更加清晰",{"2":{"255":1}}],["代码复用性的质变",{"2":{"255":1}}],["代码复用",{"2":{"253":1}}],["代码质量审查子agent提示词",{"2":{"980":1}}],["代码质量等",{"2":{"636":1}}],["代码质量要求",{"2":{"573":1}}],["代码质量",{"2":{"226":1,"904":1,"988":1}}],["代码无缝集成",{"2":{"220":1}}],["代码最终会被编译为",{"2":{"217":1}}],["代码生成准确率极高",{"2":{"965":1}}],["代码生成工具",{"2":{"763":1}}],["代码生成器",{"2":{"762":1}}],["代码生成等场景",{"2":{"512":1}}],["代码生成等多种能力",{"2":{"512":1}}],["代码生成与调试",{"2":{"511":1,"512":1,"521":1,"522":1}}],["代码生成的边际成本正在无限趋近于零",{"2":{"376":1}}],["代码生成",{"2":{"204":1,"512":2,"519":2,"521":1,"969":1}}],["代码生成选项",{"2":{"203":1}}],["代码的生产流程",{"2":{"525":1}}],["代码的物理边界终会在打包工具的运转下被抹平或重组",{"2":{"303":1}}],["代码的职责变得异常清晰",{"2":{"295":1}}],["代码的",{"2":{"203":1}}],["代码中的",{"2":{"186":1}}],["代码长度翻倍",{"2":{"184":1}}],["代码实现",{"0":{"186":1},"1":{"187":1,"188":1},"2":{"182":1,"462":1}}],["代码后置",{"2":{"177":1}}],["代码将极其干净",{"2":{"100":1}}],["代码",{"2":{"61":1,"201":1,"202":2,"203":2,"217":1,"338":1,"339":1,"382":1,"511":1,"512":3,"518":1,"521":1,"522":5,"553":1,"562":1,"565":1,"568":1,"770":2,"959":1,"962":1,"976":1}}],["代码拆分",{"2":{"59":1}}],["代码高亮",{"2":{"54":1}}],["替换或增强原有的关键帧插值逻辑",{"2":{"742":1}}],["替换为",{"2":{"308":3}}],["替换了",{"2":{"54":1}}],["替代盲目sleep",{"2":{"980":1}}],["替代品",{"2":{"515":1}}],["替代的元能力",{"0":{"460":1}}],["替代模糊的形容词",{"2":{"449":1}}],["替代",{"0":{"378":1},"2":{"460":2,"647":1,"904":1}}],["替代了",{"2":{"169":1}}],["替代传统动态网站的复杂架构",{"2":{"20":1}}],["替代方案及放弃原因",{"2":{"785":1}}],["替代方案",{"2":{"8":1,"642":1,"673":1,"702":1,"731":1,"759":1,"904":1,"976":1,"980":1}}],["替代自建后端",{"2":{"4":1}}],["根因追溯技术详解",{"2":{"980":1}}],["根因分析→修复设计→实施→验证",{"2":{"980":1}}],["根节点泄露",{"2":{"961":1}}],["根节点",{"2":{"766":1}}],["根容器",{"2":{"680":1,"684":1}}],["根渲染器",{"2":{"647":1}}],["根组件",{"2":{"647":1}}],["根",{"2":{"290":1,"653":1}}],["根目录",{"2":{"213":1}}],["根配置文件",{"2":{"647":1}}],["根配置应该只包含通用的",{"2":{"212":1}}],["根配置",{"0":{"212":1},"2":{"211":1,"216":1,"647":1,"908":1}}],["根布局",{"2":{"67":1}}],["根源不在于",{"2":{"54":1}}],["根据称重数据适当奖励自己",{"2":{"1046":1}}],["根据状态赋予不同的原子类",{"2":{"962":1}}],["根据属性动态拼接类名",{"2":{"960":1}}],["根据消息类型字段",{"2":{"944":1}}],["根据消息类型",{"2":{"941":1}}],["根据用户查询即时生成审批仪表盘或数据可视化界面",{"2":{"934":1}}],["根据用户的自我选择",{"2":{"397":1}}],["根据对话上下文动态生成定制化表单",{"2":{"934":1}}],["根据目标后端",{"2":{"770":1}}],["根据图层类型",{"2":{"741":1}}],["根据语言标识创建",{"2":{"706":1}}],["根据修改内容生成",{"2":{"581":1}}],["根据当前任务的上下文动态加载所需的",{"2":{"547":1}}],["根据当前状态评估形势",{"2":{"427":1}}],["根据需要灵活使用文字",{"2":{"494":1}}],["根据指令需求",{"2":{"443":1}}],["根据推理结果",{"2":{"427":1}}],["根据环境反馈调整分解策略",{"2":{"424":1}}],["根据环境的即时反馈调整下一步动作",{"2":{"414":1}}],["根据你的错题逻辑实时调整教学大纲",{"2":{"407":1}}],["根据文件路径加载模块",{"2":{"334":1}}],["根据业务变化调整限界上下文",{"2":{"282":1}}],["根据业务事件类型分发到对应回调",{"2":{"150":1}}],["根据限界上下文划分模块",{"2":{"282":1}}],["根据请求参数过滤数据",{"2":{"154":1}}],["根据字段名填充事件对象",{"2":{"143":1}}],["根据项目复杂度选择构建工具",{"2":{"20":1}}],["根据",{"2":{"14":1,"15":1,"154":1,"422":1,"543":1,"649":1,"741":2}}],["分阶段调整时间管理",{"0":{"1035":1},"1":{"1036":1,"1037":1,"1038":1}}],["分的家常菜了",{"2":{"1026":1}}],["分派代码质量审查者子agent",{"2":{"988":1}}],["分派规格审查者子agent",{"2":{"988":1}}],["分派实现者子agent",{"2":{"988":1}}],["分别定义了子agent的角色边界",{"2":{"988":1}}],["分别对应不同的文件路径",{"2":{"53":1}}],["分形项目测试用例",{"2":{"980":1}}],["分钟的无氧运动",{"2":{"1047":1,"1048":1}}],["分钟的器材锻炼",{"2":{"1046":1,"1048":1}}],["分钟到",{"2":{"1045":1}}],["分钟可完成",{"2":{"994":1}}],["分钟",{"2":{"956":4,"983":1}}],["分钟演示了从构建到请求的完整链路",{"2":{"75":1}}],["分解与渐进明细",{"2":{"1042":1}}],["分解与分类",{"0":{"1013":1},"2":{"1013":2}}],["分解",{"2":{"1025":1}}],["分解值类型",{"2":{"819":1}}],["分解边规划的策略能实时响应环境反馈",{"2":{"424":1}}],["分词",{"2":{"789":1,"790":1}}],["分类原始数据",{"2":{"790":1}}],["分类范围",{"2":{"790":1}}],["分类",{"2":{"789":1,"790":1,"792":1,"1011":1}}],["分类+",{"2":{"789":1}}],["分类规则",{"2":{"583":1}}],["分辨率不一致",{"2":{"785":1}}],["分离",{"2":{"785":1,"961":1}}],["分三阶段",{"2":{"775":1}}],["分",{"2":{"770":1}}],["分段呈现设计",{"2":{"987":1}}],["分段数据到视觉通道的映射",{"2":{"715":1}}],["分段型",{"2":{"706":1}}],["分为",{"2":{"704":1}}],["分组",{"2":{"679":1,"719":1}}],["分组容器",{"2":{"677":1}}],["分包",{"2":{"673":1}}],["分页",{"2":{"647":1,"650":2}}],["分页接口统一使用",{"2":{"576":1}}],["分割线",{"2":{"939":1}}],["分割",{"2":{"504":3,"506":1}}],["分割字段名和字段值",{"2":{"143":1}}],["分糖果",{"2":{"494":1,"495":1}}],["分支",{"2":{"965":2}}],["分支名符合前缀规范",{"2":{"451":1}}],["分支拉取最新代码并执行",{"2":{"451":1}}],["分支命名规范",{"2":{"451":1}}],["分支管理规范",{"2":{"451":1}}],["分支中",{"2":{"232":1}}],["分工明确",{"2":{"438":1,"597":1}}],["分工明确的专项助手",{"0":{"438":1}}],["分工细化",{"2":{"132":1}}],["分母",{"2":{"365":1}}],["分子",{"2":{"365":1}}],["分子组件",{"2":{"274":1}}],["分享一个从",{"2":{"477":1}}],["分享技术前沿",{"2":{"346":1}}],["分享最新的前端技术文章",{"2":{"346":6}}],["分散定义状态",{"2":{"341":1}}],["分而治之",{"2":{"296":1}}],["分配律验证",{"2":{"243":1}}],["分配律",{"0":{"243":1}}],["分布式条件类型",{"0":{"234":1}}],["分布式系统的挑战",{"2":{"117":1}}],["分层定义",{"2":{"966":1}}],["分层职责说明",{"0":{"850":1}}],["分层插件化架构",{"2":{"845":1}}],["分层继承架构",{"2":{"817":1}}],["分层继承",{"2":{"815":1}}],["分层模块化架构",{"2":{"788":1}}],["分层递进塑造形象",{"2":{"507":1}}],["分层设计与关注点分离",{"0":{"336":1}}],["分层架构图",{"2":{"762":1}}],["分层架构",{"2":{"277":1}}],["分层架构是大型项目中常用的模块化设计模式",{"2":{"273":1}}],["分层架构设计",{"0":{"273":1},"1":{"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1}}],["分层就是",{"2":{"191":1}}],["分层",{"2":{"191":1}}],["分析自己的时间利用是否符合预期",{"2":{"1037":1}}],["分析后才能清晰的问题和事务相较之前占比多了",{"2":{"1034":1}}],["分析流程",{"2":{"790":1}}],["分析层",{"2":{"789":1}}],["分析节点类型",{"2":{"765":1}}],["分析代码",{"2":{"564":1}}],["分析语句",{"2":{"557":1}}],["分析结构化",{"2":{"503":1}}],["分析当前项目的核心架构特征",{"2":{"483":1}}],["分析各种来源的信息",{"2":{"470":1}}],["分析阶段",{"2":{"468":1}}],["分析冲突产生的原因",{"2":{"451":1}}],["分析可能的行动方案",{"2":{"427":1}}],["分析竞争对手的产品",{"2":{"396":1}}],["分析用户情绪",{"2":{"367":1}}],["分析某项新技术的",{"2":{"355":1}}],["分析",{"2":{"348":1,"448":1,"549":1,"946":1}}],["分析业务场景",{"2":{"177":1}}],["分析说明",{"2":{"85":1}}],["分隔",{"2":{"143":1}}],["分块传输编码",{"2":{"105":1}}],["分块传输的艺术",{"0":{"105":1}}],["分发到不同的处理流程",{"2":{"944":1}}],["分发到对应的",{"2":{"941":1}}],["分发创建元素",{"2":{"741":1}}],["分发过程",{"2":{"234":1,"244":1}}],["分发给具体业务处理器",{"2":{"147":1}}],["分发",{"2":{"7":1}}],["相信会取得更好的效果",{"2":{"1027":1}}],["相信对大模型有一定了解的读者应该已经发现",{"2":{"1017":1}}],["相信熟悉",{"2":{"1016":1}}],["相信不少人已经比较熟悉",{"2":{"1013":1}}],["相信很多人都听说过分解",{"2":{"1011":1}}],["相邻项之间的边界空白折叠",{"2":{"799":1}}],["相机实体",{"2":{"766":1}}],["相机矩阵",{"2":{"763":1}}],["相机基类",{"2":{"763":1}}],["相机与投影",{"2":{"763":1}}],["相机",{"2":{"755":1,"762":1,"782":1}}],["相机元素",{"2":{"735":1}}],["相机支持",{"2":{"728":1}}],["相思无媒",{"2":{"508":1}}],["相同的声明式设计",{"2":{"470":1}}],["相辅相成",{"2":{"226":1}}],["相关的技术探索",{"2":{"1000":1}}],["相关的类型标注都会被擦除",{"2":{"254":1}}],["相关配置",{"2":{"594":1}}],["相关技术",{"2":{"573":1}}],["相关技术文章",{"2":{"346":2}}],["相关源代码已开源至",{"2":{"477":1}}],["相关性",{"2":{"366":1}}],["相关问题",{"2":{"350":1}}],["相关选项",{"2":{"203":1}}],["相关",{"2":{"203":1,"763":1}}],["相较于",{"2":{"115":1}}],["相反",{"2":{"99":1,"608":1}}],["相对",{"2":{"819":1,"831":1}}],["相对值叠加",{"2":{"819":1}}],["相对值",{"2":{"819":1,"828":2}}],["相对坐标计算",{"2":{"677":1}}],["相对冗长",{"2":{"341":1}}],["相对简单粗暴",{"2":{"98":1}}],["相对简陋",{"2":{"98":1}}],["相对的一种方案",{"2":{"26":1}}],["相比之前写出长文",{"2":{"1005":1}}],["相比之下",{"2":{"606":1}}],["相比于关注用户的停留时长",{"2":{"350":1}}],["相比原生",{"2":{"135":1}}],["相比",{"2":{"53":1,"130":1,"135":1}}],["已完成实现",{"2":{"1026":1}}],["已完成标志",{"2":{"834":1}}],["已从",{"2":{"963":1}}],["已发布",{"2":{"939":1}}],["已锁定",{"2":{"939":1}}],["已登录会话",{"2":{"849":1}}],["已开始标志",{"2":{"834":1}}],["已废弃",{"2":{"735":1}}],["已处理元素包装",{"2":{"735":1}}],["已包装",{"2":{"661":1}}],["已包装好",{"2":{"652":1}}],["已包含完整的页面内容",{"2":{"53":1}}],["已被",{"2":{"647":1}}],["已迁移到",{"2":{"647":1}}],["已知",{"2":{"622":1}}],["已加入",{"2":{"573":1,"596":1}}],["已是最好的",{"2":{"558":1}}],["已在",{"2":{"518":1}}],["已关闭",{"2":{"489":1}}],["已成为",{"2":{"335":1}}],["已淡出历史舞台",{"2":{"308":1}}],["已有深刻见解",{"2":{"391":1}}],["已有事件驱动基础设施",{"2":{"167":1}}],["已有成熟后端的大型企业项目",{"2":{"81":1}}],["已调用",{"2":{"150":1}}],["已经悄然完成了三次跃迁",{"2":{"569":1}}],["已经从",{"2":{"553":1}}],["已经逐渐超越了",{"2":{"540":1}}],["已经不可逆地将每个人推向了全栈的起跑线",{"2":{"466":1}}],["已经为这一未来铺平了道路",{"2":{"419":1}}],["已经能够闭环完成",{"2":{"405":1}}],["已经让个体有机会摆脱庞大组织的束缚",{"2":{"381":1}}],["已经实现了优雅的隔离",{"2":{"970":1}}],["已经实现了",{"2":{"140":1}}],["已经包含页面内容",{"2":{"26":1}}],["命中检测",{"2":{"670":1,"673":1,"675":1,"683":1}}],["命中缓存时直接从边缘返回",{"2":{"52":1}}],["命名必须带",{"2":{"960":1}}],["命名约定",{"2":{"573":1}}],["命名",{"2":{"450":1,"958":1}}],["命名类型",{"2":{"330":1}}],["命名规范来缓解",{"2":{"958":1}}],["命名规范",{"0":{"330":1},"2":{"572":1,"957":1}}],["命名空间初始化",{"2":{"677":1}}],["命名空间",{"2":{"320":1}}],["命名空间与模块",{"0":{"320":1}}],["命名导入",{"2":{"310":1}}],["命名导出",{"2":{"310":2}}],["命名导出与导入",{"0":{"310":1}}],["命名语义清晰",{"2":{"177":1}}],["命名与管理规范",{"2":{"98":1}}],["命令定义",{"2":{"865":1}}],["命令流转",{"2":{"860":1}}],["命令参数定义",{"2":{"856":1}}],["命令实现",{"2":{"851":1}}],["命令执行引擎",{"2":{"851":1}}],["命令注册中心",{"2":{"851":1}}],["命令注册与",{"2":{"851":1}}],["命令注册",{"2":{"850":1}}],["命令解析",{"2":{"850":1}}],["命令解析器",{"2":{"849":1}}],["命令面",{"2":{"790":1}}],["命令式",{"2":{"699":1}}],["命令是你告诉",{"2":{"585":1}}],["命令要原子化",{"2":{"583":1}}],["命令说明",{"2":{"581":1}}],["命令名称",{"2":{"581":1}}],["命令的价值",{"0":{"583":1}}],["命令的结构",{"0":{"581":1}}],["命令的存放位置",{"0":{"580":1}}],["命令和技能",{"2":{"570":1}}],["命令目录",{"2":{"470":1}}],["命令进行增量编译",{"2":{"216":1}}],["命令快速生成一个默认配置文件",{"2":{"202":1}}],["命令来编译单个文件",{"2":{"202":1}}],["命令",{"2":{"53":1,"282":1,"470":1,"567":2,"572":1,"573":1,"574":1,"583":1,"697":1,"843":1,"844":1,"851":1,"856":1,"860":1}}],["被各行各业的人们知晓后",{"2":{"1005":1}}],["被调用时",{"2":{"712":1}}],["被大量低质",{"2":{"621":1}}],["被埋没的人才",{"2":{"612":1}}],["被哀怨情绪控制",{"2":{"612":1}}],["被他们一通",{"2":{"610":1}}],["被动等待指令",{"2":{"585":1}}],["被动接收需求文档",{"2":{"556":1}}],["被动应答",{"2":{"103":1}}],["被严格限制为",{"2":{"470":1}}],["被无限放大了",{"2":{"361":1}}],["被称为",{"2":{"344":2}}],["被单位元法则消除",{"2":{"244":1}}],["被引用的项目类型可以被当前项目使用",{"2":{"207":1}}],["被视为不同的",{"2":{"964":1}}],["被视为一种玄学",{"2":{"363":1}}],["被视为",{"2":{"203":1}}],["被",{"0":{"357":1},"2":{"75":1,"788":4}}],["被一种更简洁的模式取代",{"2":{"68":1}}],["被编译为",{"2":{"53":1}}],["被加载占位符包裹的动态部分",{"2":{"40":1}}],["源于细节",{"2":{"509":1}}],["源代码行数",{"2":{"728":1}}],["源代码主目录",{"2":{"677":1,"706":1,"735":1,"819":1,"851":1,"882":1}}],["源代码总行数",{"2":{"643":1}}],["源代码",{"2":{"203":1,"217":1}}],["源代码编译",{"2":{"45":1}}],["源码到项目",{"2":{"963":1}}],["源码行数",{"2":{"699":1}}],["源码",{"2":{"60":1,"217":1,"939":2}}],["源站服务器完全不参与响应",{"2":{"52":1}}],["运维系统实时更新折线图和仪表盘",{"2":{"700":1}}],["运维成本",{"2":{"19":1}}],["运动则选择每周至少三次在午休或晚休时间走一定的路",{"2":{"1045":1}}],["运动",{"2":{"605":1,"1048":1}}],["运用多样性红利",{"2":{"1014":1}}],["运用和产生价值的任何一个环节都不会发生",{"2":{"622":1}}],["运用量化技术",{"2":{"551":1}}],["运用",{"2":{"466":1}}],["运营推向市场",{"2":{"457":1}}],["运营可靠性",{"2":{"419":1}}],["运营成本",{"2":{"391":1}}],["运营成本极低",{"2":{"391":1}}],["运营",{"2":{"361":1,"383":1}}],["运算符优先级处理",{"2":{"655":1}}],["运算符优先级",{"2":{"646":1}}],["运算符",{"2":{"229":1,"236":1,"646":1,"655":1}}],["运转的",{"2":{"173":1}}],["运行的原子化引擎",{"2":{"965":1}}],["运行在服务端",{"2":{"934":1}}],["运行在服务器端",{"2":{"304":1}}],["运行类型检查",{"2":{"808":1}}],["运行单元测试",{"2":{"723":1}}],["运行特定测试",{"2":{"667":1}}],["运行所有测试",{"2":{"667":1,"697":1,"930":1}}],["运行终端完成复杂任务",{"2":{"564":1}}],["运行终端命令或访问数据库外",{"2":{"414":1}}],["运行调试",{"2":{"561":1}}],["运行代码",{"2":{"443":1}}],["运行代码分析",{"2":{"436":1}}],["运行成功率的核心提示策略",{"2":{"426":1}}],["运行任务",{"2":{"343":1}}],["运行测试并提交",{"2":{"567":1}}],["运行测试",{"0":{"224":1},"2":{"567":1,"573":1,"583":1,"781":1,"808":1}}],["运行",{"2":{"217":1,"449":1,"567":1}}],["运行方式",{"2":{"82":1}}],["运行环境对象",{"2":{"661":1}}],["运行环境",{"2":{"82":1}}],["运行时解析开销大",{"2":{"965":1}}],["运行时来拼接字符串",{"2":{"964":1}}],["运行时调试工具",{"2":{"939":1}}],["运行时调试面板",{"2":{"763":1}}],["运行时检测",{"2":{"851":1}}],["运行时创建",{"2":{"650":1}}],["运行时开销极小",{"2":{"339":1}}],["运行时环境检测",{"2":{"851":1}}],["运行时环境契约",{"2":{"662":1}}],["运行时环境",{"2":{"338":1}}],["运行时测试",{"2":{"326":1}}],["运行时加载",{"2":{"304":1}}],["运行时组合",{"2":{"248":1}}],["运行时无任何服务端组件参与",{"2":{"53":1}}],["运行时",{"2":{"53":1,"54":1,"785":1,"846":1}}],["运行时零计算",{"2":{"51":1}}],["最快的成长是与优秀者同行",{"2":{"1004":1}}],["最快捷的方式是使用",{"2":{"574":1}}],["最低",{"2":{"986":1}}],["最低优先级",{"2":{"652":1,"826":1}}],["最多不超过",{"2":{"970":1}}],["最接近原生",{"2":{"965":1}}],["最深",{"2":{"962":1}}],["最浅",{"2":{"962":1}}],["最重要的文件",{"0":{"909":1}}],["最常用",{"2":{"763":1}}],["最常用的形式",{"2":{"310":1}}],["最易理解",{"2":{"976":1}}],["最易用的",{"2":{"757":1}}],["最易混淆的核心点",{"2":{"92":1}}],["最核心的公共",{"2":{"926":1}}],["最核心的模型规范",{"2":{"925":1}}],["最核心的功能",{"2":{"915":1}}],["最核心的接口定义",{"2":{"909":1}}],["最核心的数据流",{"2":{"830":1}}],["最核心的两个函数",{"2":{"827":1}}],["最核心的配置文件",{"0":{"571":1},"1":{"572":1,"573":1,"574":1}}],["最核心的逻辑在于固定成本",{"2":{"391":1}}],["最隐蔽的逻辑漏洞",{"2":{"555":1}}],["最令人抵触的单元测试编写和技术文档维护",{"2":{"527":1}}],["最高频的使用模式",{"2":{"801":1}}],["最高优先级",{"2":{"652":1,"826":1}}],["最高",{"2":{"522":1,"986":1}}],["最适场景",{"2":{"521":1,"522":1,"562":1,"565":1}}],["最容易陷入的思维陷阱就是",{"2":{"492":1}}],["最容易切入的高价值区域",{"2":{"465":1}}],["最显著的提升还是在于",{"2":{"475":1}}],["最难被",{"0":{"460":1}}],["最初只能看到技能的描述",{"2":{"443":1}}],["最硬核的落地载体",{"2":{"441":1}}],["最人工的",{"2":{"378":1}}],["最佳切入点",{"2":{"465":1}}],["最佳业务场景",{"2":{"344":1}}],["最佳实践",{"2":{"437":1,"445":1,"966":1,"967":1,"968":1,"969":1}}],["最佳实践与适用场景",{"2":{"342":1}}],["最佳实践清单",{"2":{"329":1}}],["最佳实践总结",{"0":{"216":1}}],["最强大的特性之一",{"2":{"263":1}}],["最怕的就是遗漏某些分支",{"2":{"232":1}}],["最少的组件",{"2":{"201":1}}],["最可能",{"2":{"198":1}}],["最小包",{"2":{"706":1}}],["最小操作集",{"2":{"706":1}}],["最小化入口注册",{"2":{"647":1}}],["最小化数据收集",{"2":{"564":1}}],["最小化服务端压力",{"2":{"166":1}}],["最小改动解",{"2":{"370":1}}],["最小复杂度",{"2":{"201":1}}],["最小接口原则",{"0":{"195":1},"1":{"196":1,"197":1}}],["最小状态是对数据冗余的剔除",{"2":{"180":1}}],["最小",{"2":{"173":1,"274":1,"647":1}}],["最大",{"2":{"763":1}}],["最大的痛点往往不是",{"2":{"492":1}}],["最大的陷阱往往是",{"2":{"365":1}}],["最大限度减少上下文消耗",{"2":{"439":1}}],["最大化收益与捕获用户剩余",{"0":{"397":1}}],["最大化性能和",{"2":{"82":1}}],["最大挂起时间",{"2":{"163":1}}],["最大间隔也不会超过数组最后一个值",{"2":{"160":1}}],["最大上限",{"2":{"159":1}}],["最大重试次数",{"2":{"150":1}}],["最后一人拿着剩余的铜板自由调度选择押大押小",{"2":{"1016":1}}],["最后一行可能是未完成的",{"2":{"143":1}}],["最后尝试",{"2":{"559":1}}],["最后以",{"2":{"508":1}}],["最后通过精灵寄语激发用户的诗歌创作热情",{"2":{"504":1}}],["最后通过",{"2":{"440":1}}],["最后是",{"2":{"439":1}}],["最后再砸钱去市场上寻找目标用户",{"2":{"377":1}}],["最后发现是",{"2":{"199":1}}],["最后",{"2":{"180":1,"412":1,"506":1,"1025":1,"1042":1}}],["最后所有产物写入",{"2":{"53":1}}],["最复杂文件",{"2":{"735":1}}],["最复杂",{"2":{"132":1,"763":1}}],["最新风格",{"2":{"203":1}}],["最新特性",{"2":{"203":1}}],["最新",{"2":{"132":1}}],["最合适",{"2":{"132":1}}],["最好的选择是不参与",{"2":{"1016":1}}],["最好的学习是公开分享",{"2":{"1004":1}}],["最好的架构不是用技术堆砌出来的",{"2":{"132":1}}],["最好",{"2":{"132":1}}],["最终总结出来的主要原因有",{"2":{"1034":1}}],["最终康复了",{"2":{"1022":1}}],["最终的答案就会有很大变化",{"2":{"1014":1}}],["最终的指向都是同一个",{"2":{"615":1}}],["最终用户",{"2":{"933":1,"938":1}}],["最终颜色",{"2":{"770":1}}],["最终都委托给",{"2":{"740":1}}],["最终都使相关缓存失效",{"2":{"96":1}}],["最终返回",{"2":{"658":1}}],["最终通过",{"2":{"737":1,"912":1}}],["最终通过项目孵化转化为内容与产品",{"2":{"631":1}}],["最终通过不断与环境互动",{"2":{"412":1}}],["最终选择了",{"2":{"502":1}}],["最终确定了满意的设定",{"2":{"499":1}}],["最终只会陷入平庸",{"2":{"458":1}}],["最终为你总结出",{"2":{"417":1}}],["最终调用工具生成一份专业的",{"2":{"416":1}}],["最终达成预设的行动目标",{"2":{"412":1}}],["最终打造出既符合用户价值又具有商业可持续性的产品",{"2":{"400":1}}],["最终价格趋向于接近零利润",{"2":{"392":1}}],["最终就构成了复杂的商业或技术系统",{"2":{"385":1}}],["最终带着提纯后的知识返回",{"2":{"355":1}}],["最终决定将核心位置让给",{"2":{"350":1}}],["最终",{"2":{"271":1,"463":1,"471":1}}],["最终产物中不存在任何泛型的痕迹",{"2":{"254":1}}],["最终产出独立的",{"2":{"50":1}}],["最终输出的",{"2":{"143":1}}],["最终输出结构化的洞察报告与交互式可视化看板",{"2":{"632":1}}],["最终输出结构化的",{"2":{"143":1}}],["最终重新验证以确保数据一致性",{"2":{"96":1}}],["最优秀的工程师或许不再是那个能手写极致算法的人",{"2":{"539":1}}],["最优",{"2":{"55":1}}],["最简示例",{"0":{"696":1}}],["最简洁的那个",{"2":{"181":1}}],["最简洁的思路",{"2":{"54":1}}],["最简单的架构",{"2":{"54":1}}],["最典型的渲染方式",{"2":{"22":1}}],["零依赖服务器",{"2":{"987":1}}],["零依赖头脑风暴可视化服务器",{"2":{"980":1}}],["零依赖",{"2":{"976":1}}],["零依赖设计",{"2":{"975":1}}],["零心智负担",{"2":{"965":1}}],["零心智负担的最优解",{"2":{"965":1}}],["零学习成本",{"2":{"961":1,"965":1}}],["零宽断行机会",{"2":{"805":1}}],["零宽断行机会等",{"2":{"786":1}}],["零宽空格",{"2":{"795":1}}],["零",{"2":{"786":1}}],["零代码全栈建站",{"2":{"562":1}}],["零本地环境要求",{"2":{"561":1}}],["零环境配置从描述到上线全链路打通",{"2":{"561":1}}],["零门槛出产品的感觉",{"2":{"559":1}}],["零广告",{"2":{"518":1}}],["零散组件化为可持续的工作流",{"2":{"441":1}}],["零成本区分语义不同的类型",{"2":{"227":1}}],["零延迟",{"2":{"113":1}}],["零布局偏移",{"2":{"72":1}}],["零配置支持全部特性",{"2":{"82":1}}],["零配置",{"2":{"59":1}}],["零动态渲染",{"2":{"53":1}}],["零服务端计算",{"2":{"53":1}}],["零运行时方案",{"2":{"959":1}}],["零运行时依赖",{"2":{"814":1,"819":1}}],["零运行时开销",{"2":{"318":1}}],["零运行时",{"0":{"51":1},"2":{"49":1}}],["零计算",{"2":{"46":1}}],["上午给自己预留",{"2":{"1036":1}}],["上渲染",{"2":{"935":1}}],["上的交互事件",{"2":{"951":1}}],["上的位置通过位置参数",{"2":{"831":1}}],["上的限制",{"2":{"106":1}}],["上次",{"2":{"824":1,"834":2}}],["上用一个唯一颜色绘制",{"2":{"683":1}}],["上构建交互式图形",{"2":{"670":1}}],["上线",{"2":{"587":1}}],["上传",{"2":{"583":1}}],["上传到任意静态文件服务器",{"2":{"51":1}}],["上层生成",{"2":{"938":1}}],["上层应用交互",{"2":{"544":1}}],["上层状态",{"2":{"342":1}}],["上手门槛",{"2":{"562":1}}],["上手指引",{"2":{"515":1,"518":1}}],["上手成本极低",{"2":{"144":1}}],["上帝视角的逻辑拆解",{"0":{"373":1}}],["上帝化",{"2":{"169":1}}],["上下文的额外内容",{"2":{"994":1}}],["上下文的精细隔离",{"2":{"415":1}}],["上下文单例",{"2":{"796":1}}],["上下文在首次测量时才创建",{"2":{"796":1}}],["上下文节点",{"2":{"763":1}}],["上下文中执行",{"2":{"742":1}}],["上下文组装",{"2":{"735":1}}],["上下文数据",{"2":{"663":1}}],["上下文取变量",{"2":{"655":1}}],["上下文注入",{"2":{"646":1}}],["上下文限制",{"2":{"594":1}}],["上下文感知精准",{"2":{"568":1}}],["上下文感知补全",{"2":{"564":1}}],["上下文工程",{"2":{"557":1}}],["上下文工程以及指令遵循机制",{"2":{"496":1}}],["上下文护城河",{"0":{"536":1}}],["上下文",{"2":{"478":1,"590":1,"592":1,"653":1,"979":1,"982":1}}],["上下文迷失",{"2":{"467":1}}],["上下文管理",{"2":{"438":1,"789":1}}],["上下文隔离",{"2":{"438":1}}],["上下文过长而产生",{"2":{"424":1}}],["上下文解耦",{"2":{"415":1,"430":1,"438":1}}],["上下文窗口",{"2":{"367":1}}],["上下文控制",{"2":{"352":1}}],["上做微小变异",{"2":{"359":1}}],["上存在",{"2":{"249":2}}],["上面的类型等价于一个有多个调用签名的函数",{"2":{"238":1}}],["上述延伸思考",{"2":{"1041":1}}],["上述代码使用",{"2":{"163":1}}],["上述流程中",{"2":{"21":1}}],["上限变得更难突破了",{"2":{"359":1}}],["上限",{"2":{"146":1,"150":1}}],["上",{"2":{"48":1,"58":1,"358":1,"382":1,"616":1,"774":1,"826":1}}],["正文",{"2":{"994":1}}],["正因如此",{"2":{"965":1}}],["正常工作时间处理重要且紧急的事",{"2":{"1036":1}}],["正常消息接收流程",{"0":{"894":1}}],["正常完成",{"2":{"891":1}}],["正常结束",{"2":{"827":1}}],["正交投影相机",{"2":{"763":1}}],["正多边形",{"2":{"677":1}}],["正则",{"2":{"652":1}}],["正让用户抓狂",{"2":{"556":1}}],["正逐渐演变为",{"2":{"527":1}}],["正巧大团队自研的零代码",{"2":{"496":1}}],["正在通过以下几种方式来将减肥这件小事继续",{"2":{"1048":1}}],["正在成为最高级的编程语言",{"2":{"530":1}}],["正在调用工具",{"2":{"484":1}}],["正在从根本上松动这套分工体系的根基",{"2":{"457":1}}],["正在批量生产海量的",{"2":{"359":1}}],["正在迅速贬值",{"2":{"357":1}}],["正如项飙所倡导的",{"2":{"604":1}}],["正如报告中所揭示的那样",{"2":{"539":1}}],["正如近期在实践中推崇的",{"2":{"532":1}}],["正如在背景中提到的",{"2":{"509":1}}],["正如综述中所描述的",{"2":{"438":1}}],["正如流程图所示",{"2":{"431":1}}],["正如保罗",{"2":{"362":1}}],["正如",{"2":{"354":1,"535":1}}],["正向或反向",{"2":{"827":1}}],["正向播放",{"2":{"825":1}}],["正向增强回路",{"2":{"386":1}}],["正向",{"2":{"308":1}}],["正式发布",{"2":{"307":1}}],["正例",{"0":{"185":1,"188":1,"191":1,"194":1,"197":1},"2":{"182":1}}],["正确决策应",{"2":{"393":1}}],["正确类别",{"2":{"360":1}}],["正确使用",{"2":{"265":1,"267":1,"268":1,"269":1}}],["正确思路",{"2":{"199":1}}],["正确的做法是在渲染期间动态计算它们",{"2":{"173":1}}],["正确",{"2":{"62":1,"532":1}}],["正确做法是抽离",{"2":{"970":1}}],["正确做法是",{"2":{"200":1}}],["正确做法",{"2":{"62":1}}],["正是基于客观考虑",{"2":{"1026":1}}],["正是当前最高效的独立开发或小团队敏捷开发范式",{"2":{"540":1}}],["正是模型面对团队私有知识时的",{"2":{"536":1}}],["正是我们将",{"2":{"476":1}}],["正是那把开启规模化个性化生产大门的钥匙",{"2":{"420":1}}],["正是这类复杂任务的典型代表",{"2":{"467":1}}],["正是这个黑盒子决定了事物发展的客观规律",{"2":{"382":1}}],["正是这样一个典型范例",{"2":{"48":1}}],["正是技术积累终于跨过了",{"2":{"363":1}}],["正是因为我们通过一个特殊字段来",{"2":{"230":1}}],["正是为解决这一问题而生",{"2":{"575":1}}],["正是为了解决上述问题",{"2":{"142":1}}],["正是为此类场景量身打造",{"2":{"124":1}}],["正是",{"2":{"135":1,"597":1}}],["正是由于这种关系",{"2":{"135":1}}],["正是通过流式",{"2":{"106":1}}],["正是本文开篇所提出的核心公式",{"2":{"55":1}}],["正解",{"2":{"4":3}}],["原有的生活习惯时不时进入大脑",{"2":{"1045":1}}],["原值返回",{"2":{"946":1}}],["原型扩展工具",{"2":{"735":1}}],["原型验证",{"2":{"561":1}}],["原型阶段",{"2":{"523":1}}],["原本需要数周协调的跨职能配合",{"2":{"529":1}}],["原",{"2":{"511":1}}],["原汁原味",{"2":{"392":1}}],["原理",{"2":{"369":1}}],["原文精髓",{"2":{"358":1,"359":1,"360":1,"361":1}}],["原子类",{"2":{"962":2,"964":1}}],["原子项保持完整",{"2":{"799":1}}],["原子项",{"2":{"799":1,"805":1}}],["原子项处理",{"2":{"789":1}}],["原子",{"2":{"790":1}}],["原子化并非万能",{"2":{"968":1}}],["原子化引擎",{"2":{"965":1}}],["原子化基石",{"2":{"965":1}}],["原子化",{"0":{"962":1},"1":{"963":1},"2":{"341":1,"957":1,"962":1}}],["原子概念容易理解",{"2":{"341":1}}],["原子组件组合",{"2":{"274":1}}],["原子组件",{"2":{"274":1}}],["原子设计",{"2":{"274":1}}],["原始值",{"2":{"828":1}}],["原始值字符串",{"2":{"828":1}}],["原始文本",{"2":{"805":1}}],["原始数据纹理",{"2":{"763":1}}],["原始着色器材质",{"2":{"763":1}}],["原始的动画数据转换为内部格式",{"2":{"743":1}}],["原始",{"2":{"661":2,"771":1}}],["原始素材经过",{"2":{"631":1}}],["原始字节流",{"2":{"143":1}}],["原始协议的局限",{"2":{"117":1}}],["原名",{"2":{"91":1,"320":1}}],["原因有三",{"2":{"311":1}}],["原因如下",{"2":{"216":1}}],["原因",{"2":{"81":1,"591":1,"965":1}}],["原则让我们尊重客观规律",{"2":{"1006":1}}],["原则",{"2":{"47":1,"178":1,"442":1,"564":1,"603":1,"1006":1,"1027":1}}],["原生偏好测试",{"2":{"980":1}}],["原生隔离",{"2":{"965":1}}],["原生内置支持",{"2":{"960":1}}],["原生图形",{"2":{"706":1}}],["原生事件→konva事件转换",{"2":{"677":1}}],["原生全栈",{"0":{"540":1},"1":{"541":1,"542":1,"543":1}}],["原生多模态",{"2":{"511":2,"521":3}}],["原生开发环境采纳",{"2":{"442":1}}],["原生操作系统",{"2":{"440":1}}],["原生时代的复合型人才",{"2":{"358":1}}],["原生时代量身定制的",{"2":{"357":1}}],["原生参数",{"2":{"144":1}}],["原生实现示例",{"2":{"139":1}}],["原生二进制支持",{"2":{"115":1}}],["原生的",{"2":{"112":1}}],["原生浏览器的",{"0":{"110":1},"2":{"873":1}}],["原生",{"0":{"137":1,"141":1},"1":{"138":1,"139":1},"2":{"6":1,"131":1,"135":2,"142":1,"342":1,"343":1,"564":3,"670":1,"757":2,"763":1,"812":1,"957":1}}],["原生支持文本",{"2":{"521":1}}],["原生支持",{"2":{"6":1,"287":1,"874":1,"881":1}}],["⑥",{"2":{"47":1}}],["时段",{"2":{"1047":1}}],["时不时会在虚拟社群中一起侃大山",{"2":{"1041":1}}],["时光荏苒",{"2":{"1005":1}}],["时强制注入的技能",{"2":{"986":1}}],["时注入技能引导",{"2":{"983":1}}],["时执行命令",{"2":{"983":1}}],["时自动注入技能系统",{"2":{"975":1}}],["时最容易犯的错",{"2":{"970":1}}],["时回溯找到合法的断点",{"2":{"797":1}}],["时复用预计算数据",{"2":{"785":1}}],["时的",{"2":{"706":1}}],["时的自动刷新机制",{"2":{"85":1}}],["时钟",{"2":{"602":1}}],["时刻待命",{"2":{"584":1}}],["时刻影响着产品的发展边界",{"2":{"400":1}}],["时事热点与舆情追踪",{"2":{"511":1}}],["时事感知最新",{"2":{"511":1}}],["时存在天然局限",{"2":{"411":1}}],["时间四象限",{"2":{"1036":1}}],["时间变得明显不够用",{"2":{"1034":1}}],["时间是我们在这个世界上最优质和公平的资产",{"2":{"1034":1}}],["时间不够用是老生长谈的话题",{"2":{"1034":1}}],["时间不够用问题",{"0":{"1034":1}}],["时间不够又只能继续写烂代码",{"2":{"386":1}}],["时间管理",{"2":{"1020":1}}],["时间管理和混合工作制几个方面的实践与理解",{"2":{"1005":1}}],["时间选择等场景需要多轮对话",{"2":{"933":1}}],["时间计算",{"2":{"824":1}}],["时间格式化转换",{"2":{"819":1}}],["时间工具",{"2":{"819":1}}],["时间基类契约",{"2":{"834":1}}],["时间基类",{"0":{"824":1},"2":{"819":1,"822":1,"824":1}}],["时间控制",{"2":{"818":1,"825":1}}],["时间系统",{"2":{"817":1,"818":1,"824":1}}],["时间测量",{"2":{"763":1}}],["时间处理",{"2":{"706":1}}],["时间序列切换",{"2":{"706":1}}],["时间窗口",{"2":{"700":1}}],["时间压缩",{"2":{"557":1,"1001":1}}],["时间",{"2":{"518":1,"706":1,"749":1,"772":1,"824":1,"827":1,"834":2,"956":1}}],["时间线编排契约",{"2":{"834":1}}],["时间线编排",{"0":{"831":1},"2":{"817":1,"818":1}}],["时间线",{"2":{"515":1,"822":1,"835":1}}],["时间线和思维导图",{"2":{"515":1}}],["时间还是隐私数据",{"2":{"396":1}}],["时间轴组件",{"2":{"706":1}}],["时间轴",{"2":{"388":1}}],["时间的迷雾",{"0":{"388":1}}],["时才被解析和加载",{"2":{"304":1}}],["时编译器会报类型错误",{"2":{"232":1}}],["时重复更新状态",{"2":{"148":1}}],["时流已结束",{"2":{"143":1}}],["时触发",{"2":{"138":1,"448":2,"830":1,"983":1}}],["时会受到限制",{"2":{"135":1}}],["时代全栈工程师的",{"2":{"1001":1}}],["时代眼泪",{"2":{"965":1}}],["时代趋势不可逆",{"2":{"613":1}}],["时代工作范式的实验室",{"2":{"525":1}}],["时代也就包含了新的特征",{"2":{"367":1}}],["时代浪潮",{"2":{"357":1}}],["时代开发者",{"2":{"335":1}}],["时代的全栈新公式",{"0":{"554":1},"1":{"555":1,"556":1,"557":1}}],["时代的机会在哪里",{"0":{"465":1}}],["时代的",{"2":{"463":1,"466":1,"551":1}}],["时代的数字化工作范式",{"2":{"419":1}}],["时代的稀缺资源不再是",{"2":{"367":1}}],["时代的复合型人才",{"2":{"361":1}}],["时代的维基百科",{"2":{"355":1}}],["时代的到来",{"2":{"180":1}}],["时代的大模型洪流中",{"2":{"132":1}}],["时代的主流选择",{"2":{"131":1}}],["时代的对话式应用",{"2":{"102":1}}],["时代",{"0":{"106":1},"2":{"155":1,"317":1,"358":1,"360":1,"376":1,"461":1,"466":1,"499":1,"509":1,"541":1,"555":1}}],["时数据瞬间出现",{"2":{"100":1}}],["时",{"2":{"50":1,"62":1,"112":1,"158":2,"174":1,"179":1,"184":1,"196":1,"227":1,"231":1,"254":2,"282":1,"305":1,"315":1,"342":1,"360":1,"366":1,"371":1,"429":1,"433":1,"451":1,"486":1,"495":1,"530":1,"547":1,"553":1,"582":1,"589":1,"741":1,"796":1,"964":1,"971":1}}],["时组件的",{"2":{"47":1}}],["时而空白",{"2":{"47":1}}],["时而完整",{"2":{"47":1}}],["⑤",{"2":{"47":1,"54":1}}],["混入",{"2":{"706":1,"958":1,"969":1}}],["混乱",{"2":{"415":1}}],["混合工作制最大的痛点是解决居家办公的苦恼",{"2":{"1040":1}}],["混合工作制是基于空间与时间两个维度来安排要处理的事务",{"2":{"1040":1}}],["混合工作制",{"2":{"1020":1,"1039":1}}],["混合",{"2":{"958":1,"965":1}}],["混合值",{"2":{"832":1}}],["混合应用文本",{"2":{"790":1}}],["混合和过渡",{"2":{"772":1}}],["混合架构",{"2":{"636":1}}],["混合模式处理",{"2":{"735":1}}],["混合模式",{"2":{"354":1,"763":1,"771":1}}],["混合策略建议",{"0":{"168":1}}],["混合渲染器",{"2":{"735":1}}],["混合渲染与预渲染极致的自动导入",{"2":{"344":1}}],["混合渲染",{"0":{"63":1},"2":{"6":1,"59":1,"80":1,"344":1}}],["混为一谈",{"2":{"134":1}}],["混用时的",{"2":{"47":1}}],["④",{"2":{"47":1,"54":1,"471":1}}],["过拟合",{"2":{"1014":1}}],["过卷",{"2":{"1014":1}}],["过深的嵌套也会导致",{"2":{"970":1}}],["过渡动画",{"2":{"962":1}}],["过渡动画控制器",{"2":{"822":1}}],["过渡",{"2":{"822":1}}],["过滤",{"2":{"712":1}}],["过滤方法",{"2":{"662":1}}],["过滤的完整管线",{"2":{"652":1}}],["过滤器链",{"2":{"652":1}}],["过滤器注册系统",{"2":{"647":1}}],["过滤器",{"2":{"112":1,"275":1,"910":1}}],["过于冗长的配置会大量消耗上下文窗口",{"2":{"572":1}}],["过于臃肿",{"2":{"570":1}}],["过于模糊",{"2":{"448":1}}],["过于具体",{"2":{"445":1}}],["过往的工作范式可能被颠覆",{"2":{"403":1}}],["过往的经验往往会瞬间失效",{"2":{"382":1}}],["过分",{"2":{"362":1}}],["过去的",{"2":{"558":1}}],["过去我们在翻阅文档",{"2":{"531":1}}],["过去我们常把",{"2":{"85":1}}],["过去可能要花一整天写的监控脚本",{"2":{"528":1}}],["过去",{"2":{"361":1,"528":1,"541":1,"616":1}}],["过细则会带来严重的认知负担和路径查找成本",{"2":{"329":1}}],["过粗会导致难以复用",{"2":{"329":1}}],["过度使用",{"2":{"989":1}}],["过度沉溺书籍细节与附属品会导致",{"2":{"613":1}}],["过度依赖",{"0":{"193":1}}],["过度预判需求",{"2":{"183":1}}],["过度抽象的架构",{"0":{"190":1}}],["过度抽象",{"0":{"189":1},"1":{"190":1,"191":1},"2":{"182":1}}],["过度设计风险",{"2":{"283":1}}],["过度设计",{"0":{"184":1},"2":{"181":1,"970":1}}],["过程中也可让",{"2":{"171":1}}],["过短",{"2":{"47":1}}],["过期后重新生成",{"2":{"45":1}}],["过期后",{"2":{"35":1}}],["③",{"0":{"52":1},"2":{"47":1,"53":1,"54":1,"471":1,"564":2}}],["发散",{"2":{"532":1}}],["发挥全栈工程师的技术优势",{"2":{"374":1}}],["发生任何错误时调用",{"2":{"898":1}}],["发生频率",{"2":{"465":1}}],["发生的时间节点",{"2":{"422":1}}],["发生的当下",{"2":{"372":1}}],["发生错误时不生成",{"2":{"203":1}}],["发现插件",{"2":{"854":1}}],["发现竟然还有那么多没吃透的地方",{"2":{"610":1}}],["发现自己还没搞懂的地方",{"2":{"610":1}}],["发现的问题按严重程度分为",{"2":{"591":1}}],["发现",{"2":{"484":1,"790":1}}],["发现阶段",{"2":{"443":1}}],["发现走不通时及时掉头",{"2":{"408":1}}],["发现问题",{"0":{"358":1},"2":{"552":1}}],["发现是空字符串",{"2":{"199":1}}],["发布版本说明",{"2":{"980":1}}],["发布忽略文件",{"2":{"882":1}}],["发布忽略规则",{"2":{"735":1}}],["发布模式",{"2":{"790":1}}],["发布为",{"2":{"790":1}}],["发布流程脚本",{"2":{"677":1}}],["发布与自动化脚本",{"2":{"647":1}}],["发布了一份具有里程碑意义的研究报告",{"2":{"525":1}}],["发布一些与前端相关的深度技术文章",{"2":{"346":3}}],["发布预发布版本",{"2":{"331":1}}],["发布订阅模式",{"0":{"302":1}}],["发布",{"2":{"203":1,"587":1,"735":1,"887":1}}],["发布节奏",{"2":{"47":1}}],["发起一个",{"2":{"898":1}}],["发起一场",{"2":{"375":1}}],["发起代码审查请求时",{"2":{"591":1}}],["发起声明式查询",{"2":{"342":1}}],["发起长连接请求",{"2":{"164":1}}],["发起第",{"2":{"160":1}}],["发起",{"2":{"141":1}}],["发起请求",{"2":{"21":1,"96":1,"141":2,"162":1,"891":1}}],["发送异步请求",{"2":{"663":1}}],["发送邮件",{"2":{"415":1}}],["发送通知",{"2":{"281":1}}],["发送通知等",{"2":{"119":1}}],["发送一个",{"2":{"119":1}}],["发送",{"2":{"83":1,"860":1}}],["发送给浏览器",{"2":{"61":1}}],["②",{"0":{"51":1},"2":{"47":1,"53":1,"54":1,"471":1,"564":3}}],["策略参数化",{"2":{"910":1}}],["策略归一化规则",{"2":{"859":1}}],["策略自动归一化",{"2":{"859":1}}],["策略管理",{"2":{"850":1}}],["策略枚举",{"2":{"849":1}}],["策略模式设计",{"2":{"858":1}}],["策略模式适配器",{"2":{"845":1}}],["策略模式",{"2":{"734":1,"738":1,"741":1,"946":1}}],["策略要点",{"2":{"291":1}}],["策略不一致",{"2":{"47":1}}],["策略",{"2":{"47":2,"63":1,"170":1,"342":1,"396":1,"427":1,"789":1,"795":1,"797":1,"856":1,"910":1,"962":1}}],["解绑事件处理器",{"2":{"719":1}}],["解读案例",{"0":{"637":1}}],["解读",{"2":{"504":2,"505":4,"506":1,"507":2,"508":1}}],["解释执行",{"2":{"655":1}}],["解释代码片段",{"2":{"582":1}}],["解释",{"2":{"493":1}}],["解释说明",{"2":{"124":1}}],["解题步骤及案例必须正确无误",{"2":{"494":1}}],["解题",{"2":{"493":1}}],["解剖",{"0":{"373":1},"2":{"371":1}}],["解构",{"0":{"371":1,"458":1},"1":{"372":1,"373":1,"374":1,"375":1,"459":1,"460":1,"461":1,"462":1}}],["解构产品",{"0":{"364":1},"1":{"365":1,"366":1,"367":1}}],["解法",{"2":{"370":1}}],["解答机",{"2":{"358":1}}],["解答问题",{"2":{"357":1}}],["解码当前块",{"2":{"143":1}}],["解码为字符串",{"2":{"143":1}}],["解码",{"2":{"141":1}}],["解耦",{"2":{"130":1,"912":1}}],["解耦与消息队列",{"0":{"126":1}}],["解决布局",{"2":{"965":1}}],["解决复杂的业务场景",{"2":{"545":1}}],["解决冲突或准备",{"2":{"451":1}}],["解决",{"2":{"408":4,"411":3,"439":1,"541":1}}],["解决它能为业务带来多大的增量",{"2":{"365":1}}],["解决问题的",{"2":{"615":1}}],["解决问题",{"0":{"358":1}}],["解决了家长",{"2":{"494":1}}],["解决了传统",{"2":{"344":1}}],["解决了以下核心问题",{"2":{"292":1}}],["解决浏览器阻塞问题",{"2":{"308":1}}],["解决的核心痛点",{"0":{"873":1},"2":{"639":1,"699":1,"728":1,"757":1,"784":1,"812":1,"901":1,"933":1,"973":1}}],["解决的就是",{"2":{"439":1}}],["解决的是",{"2":{"437":2}}],["解决的是交付时机问题",{"2":{"75":1}}],["解决的问题是计算成本",{"2":{"76":1}}],["解决的问题",{"2":{"72":1,"77":1}}],["解决思路",{"2":{"47":3}}],["解决方案可能是汽车",{"2":{"366":1}}],["解决方案不只是优化代码",{"2":{"366":1}}],["解决方案",{"2":{"47":2,"757":1}}],["解析结果以",{"2":{"947":1}}],["解析验证后",{"2":{"941":1}}],["解析与验证",{"2":{"939":1}}],["解析模型",{"2":{"922":1}}],["解析模块时的基础路径",{"2":{"203":1}}],["解析任意字节块为",{"2":{"899":1}}],["解析流水线",{"2":{"892":1}}],["解析流水线详解",{"0":{"143":1}}],["解析事件流",{"2":{"891":1}}],["解析行缓冲为",{"2":{"899":1}}],["解析行缓冲",{"2":{"889":1,"892":1}}],["解析命令",{"2":{"855":1}}],["解析命令并执行",{"2":{"854":1}}],["解析缓动函数",{"2":{"835":1}}],["解析属性路径如",{"2":{"772":1}}],["解析器需要缓存不完整的",{"2":{"947":1}}],["解析器常量",{"2":{"939":1}}],["解析器单元测试",{"2":{"882":2}}],["解析器",{"2":{"763":1,"882":1}}],["解析并持有整个",{"2":{"709":1}}],["解析并存储",{"2":{"704":1}}],["解析方法",{"2":{"662":1}}],["解析等",{"2":{"647":1}}],["解析渲染引擎",{"2":{"647":1}}],["解析引擎",{"2":{"641":1,"647":1,"939":1}}],["解析为",{"2":{"50":1,"203":1}}],["解析",{"2":{"15":1,"53":1,"141":1,"150":1,"583":1,"645":1,"647":1,"686":1,"706":1,"708":1,"717":1,"734":1,"743":1,"828":2,"892":1,"906":1,"915":1,"947":1}}],["①",{"0":{"50":1},"2":{"47":1,"53":1,"54":1,"471":1,"564":3}}],["视作组件的",{"2":{"971":1}}],["视作组件的状态函数",{"2":{"971":1}}],["视口渲染",{"2":{"763":1}}],["视口内的链接自动预取目标页面代码",{"2":{"72":1}}],["视锥体数组",{"2":{"763":1}}],["视锥体",{"2":{"763":2}}],["视图渲染",{"2":{"717":1}}],["视图层基类",{"2":{"706":1}}],["视图层",{"2":{"704":1,"705":1}}],["视图层渲染",{"2":{"344":2}}],["视图",{"2":{"647":34,"706":2,"790":35,"851":3,"939":44,"980":2}}],["视为数据",{"2":{"969":1}}],["视为搜索引擎的替代品或简单的代码补全工具",{"2":{"557":1}}],["视为模块",{"2":{"343":1}}],["视角或工作方式",{"2":{"437":1}}],["视角",{"2":{"333":2}}],["视觉标准化",{"2":{"963":1}}],["视觉属性",{"2":{"777":1}}],["视觉回归测试",{"2":{"735":1}}],["视觉辅助函数",{"2":{"706":1}}],["视觉映射",{"2":{"706":1,"715":1}}],["视觉编码管道",{"2":{"717":1}}],["视觉编码将数据属性映射为视觉通道",{"2":{"715":1}}],["视觉编码系统",{"0":{"715":1},"2":{"706":1}}],["视觉编码存取",{"2":{"706":1}}],["视觉编码",{"2":{"704":1,"711":1}}],["视觉",{"2":{"507":1}}],["视觉交互",{"2":{"414":1}}],["视觉稿截图",{"2":{"170":1}}],["视觉助手",{"2":{"130":1}}],["视频播放器",{"2":{"939":1}}],["视频纹理",{"2":{"763":1}}],["视频能力均处于国内前列",{"2":{"522":1}}],["视频多模态",{"2":{"522":1}}],["视频多模态输入",{"2":{"521":1}}],["视频多模态全覆盖",{"2":{"512":1}}],["视频生成的开发者",{"2":{"522":1}}],["视频生成等多模态",{"2":{"522":1}}],["视频生成",{"2":{"512":2}}],["视频流或实时语音",{"2":{"418":1}}],["视频等",{"2":{"418":1}}],["视频渲染任务状态",{"2":{"167":1}}],["视频",{"2":{"130":1,"511":2,"515":2,"521":3,"522":1,"851":1,"908":1}}],["视频会议",{"2":{"102":1}}],["视频处理",{"2":{"19":1}}],["视交互复杂度而定",{"2":{"46":1}}],["富于音乐美",{"2":{"506":1}}],["富应用",{"2":{"46":1}}],["富文本路径",{"2":{"806":4}}],["富文本句柄",{"2":{"793":1}}],["富文本笔记逻辑",{"2":{"790":1}}],["富文本笔记",{"2":{"790":1}}],["富文本层",{"2":{"789":1}}],["富文本内联游标",{"2":{"805":1}}],["富文本内联项",{"2":{"805":1}}],["富文本内联辅助契约",{"2":{"805":1}}],["富文本内联辅助",{"0":{"799":1}}],["富文本内联布局",{"2":{"790":1}}],["富文本内联",{"2":{"788":1,"806":1}}],["富文本辅助层",{"2":{"788":1}}],["富文本编辑器",{"2":{"784":1}}],["富文本渲染逻辑省略",{"2":{"15":1}}],["富文本",{"2":{"14":1}}],["否则容易导致适应性下降",{"2":{"1014":1}}],["否则",{"2":{"898":1}}],["否则我们并不知道自己在追求什么",{"2":{"359":1}}],["否则请坚持使用",{"2":{"320":1}}],["否则返回",{"2":{"259":1}}],["否则会造成瞬时并发压力",{"2":{"146":1}}],["否则构建阶段会直接报错",{"2":{"72":1}}],["否",{"2":{"46":4,"166":4,"571":1,"891":1,"892":2}}],["工友吃什么",{"2":{"1048":1}}],["工业标准",{"2":{"759":1}}],["工业巡检",{"2":{"418":1}}],["工业级编程语言",{"2":{"309":1}}],["工厂类",{"2":{"939":1}}],["工厂接口",{"2":{"907":1,"925":1}}],["工厂方法",{"2":{"743":1}}],["工厂按权重",{"2":{"652":1}}],["工厂系统是",{"2":{"652":1}}],["工厂模式",{"0":{"300":1},"2":{"734":1,"910":1}}],["工厂",{"2":{"278":1,"706":1}}],["工厂函数",{"2":{"203":2,"819":1}}],["工程力从",{"2":{"1001":1}}],["工程力不再止步于",{"2":{"555":1}}],["工程力的内核发生了迁移",{"2":{"555":1}}],["工程力",{"0":{"555":1},"2":{"1001":1}}],["工程时代",{"2":{"537":1}}],["工程语义翻译层",{"2":{"536":1}}],["工程确定性不源于单次生成的完美",{"2":{"535":1}}],["工程尊严",{"0":{"526":1},"1":{"527":1,"528":1,"529":1},"2":{"526":1}}],["工程",{"0":{"533":1},"2":{"525":1,"553":1}}],["工程债务",{"2":{"525":1}}],["工程腐化",{"2":{"491":1}}],["工程架构维度",{"2":{"441":1}}],["工程师如何构建",{"2":{"1001":1}}],["工程师能力",{"2":{"568":1}}],["工程师常沉迷于后端架构的完美重构",{"2":{"556":1}}],["工程师必须建立系统的评测与监控体系",{"2":{"550":1}}],["工程师必须掌握流式渲染",{"2":{"543":1}}],["工程师就是为这个大脑装上",{"2":{"544":1}}],["工程师往往是被动接收",{"2":{"541":1}}],["工程师的价值体现为架构决策的权衡",{"2":{"1001":1}}],["工程师的独特价值不再是实现细节",{"2":{"532":1}}],["工程师的角色边界正在变得愈发模糊",{"2":{"529":1}}],["工程师的不可替代性",{"0":{"180":1}}],["工程师可以更专注于业务逻辑的实现",{"2":{"527":1}}],["工程师定义意图与边界",{"2":{"527":1}}],["工程师根本不会去碰的任务",{"2":{"526":1}}],["工程师变快了",{"2":{"526":1}}],["工程师们不仅在提速",{"2":{"525":1}}],["工程师",{"2":{"525":1,"564":1}}],["工程师负责架构与代码",{"2":{"457":1}}],["工程师思维",{"2":{"431":1}}],["工程则是以",{"2":{"403":1}}],["工程化能力以及项目推动与团队合作的能力",{"2":{"1000":1}}],["工程化指南",{"2":{"971":1}}],["工程化早已超越了单纯的",{"2":{"971":1}}],["工程化局部兜底的混合架构",{"2":{"965":1}}],["工程化体系建设的整体决策思路如下",{"2":{"965":1}}],["工程化的最新演进方向",{"2":{"965":1}}],["工程化的体验",{"2":{"98":1}}],["工程化解决方案和工具繁多",{"2":{"970":1}}],["工程化解决方案",{"2":{"965":1}}],["工程化方案",{"2":{"957":1}}],["工程化方案有哪些",{"0":{"957":1}}],["工程化",{"2":{"346":1,"476":1,"1000":1}}],["工程外骨骼",{"2":{"337":1}}],["工程实践示例",{"2":{"319":1}}],["工程价值",{"2":{"297":1,"342":3}}],["工程闭环",{"2":{"177":1}}],["工程验证",{"2":{"177":2}}],["工程选型的五条金律",{"0":{"131":1}}],["工程考量",{"0":{"121":1}}],["工程落地的",{"0":{"117":1}}],["工程避坑指南",{"0":{"112":1}}],["工作制",{"2":{"1041":1}}],["工作与生活没有了界限",{"2":{"1040":1}}],["工作日继续多去不同的餐区吃饭",{"2":{"1048":1}}],["工作日午饭和晚饭最多吃两天主食",{"2":{"1047":1}}],["工作日每天午休和晚休走一定的路",{"2":{"1047":1,"1048":1}}],["工作日每天至少下一次楼梯",{"2":{"1047":1,"1048":1}}],["工作日每天早上在早饭前",{"2":{"1047":1,"1048":1}}],["工作日每天必须在午休和晚休时间走一定的路",{"2":{"1046":1}}],["工作日",{"2":{"1037":2,"1040":1}}],["工作日早上坚持做早饭",{"2":{"1026":1}}],["工作技能圈",{"2":{"1031":1}}],["工作线程",{"2":{"763":1}}],["工作表管理",{"2":{"647":1}}],["工作记忆",{"2":{"536":1}}],["工作模式设定",{"0":{"502":1}}],["工作模式与工具集配置",{"0":{"500":1},"1":{"501":1,"502":1}}],["工作空间隔离",{"2":{"437":1}}],["工作流的第一道",{"2":{"987":1}}],["工作流的成型",{"2":{"464":1}}],["工作流第3步",{"2":{"980":2}}],["工作流第2步",{"2":{"980":1}}],["工作流第1步",{"2":{"980":1}}],["工作流质量的工具开发者",{"2":{"974":1}}],["工作流引擎",{"2":{"908":1}}],["工作流编排",{"2":{"901":1}}],["工作流设计",{"0":{"471":1}}],["工作流自动化",{"0":{"454":1}}],["工作流",{"2":{"414":1,"447":1,"462":1,"494":1,"547":1,"735":1,"758":1,"882":1,"939":1}}],["工作流架构",{"2":{"367":1}}],["工作流交互",{"2":{"101":1}}],["工作量越大",{"2":{"45":1}}],["工具映射参考",{"2":{"986":1}}],["工具映射测试",{"2":{"980":1}}],["工具对照表",{"2":{"980":3}}],["工具与",{"2":{"980":3}}],["工具与数据源",{"2":{"439":1}}],["工具库在",{"2":{"968":1}}],["工具库",{"2":{"939":1}}],["工具库等",{"2":{"573":1}}],["工具给",{"2":{"939":1}}],["工具系统",{"0":{"927":1}}],["工具选择策略",{"2":{"915":1}}],["工具准备逻辑",{"2":{"915":1}}],["工具结果等",{"2":{"913":1}}],["工具循环",{"2":{"912":1}}],["工具执行完全在核心层处理",{"2":{"903":1}}],["工具统一管理",{"2":{"844":1}}],["工具碎片化",{"2":{"843":1}}],["工具栏",{"2":{"763":1}}],["工具箱",{"2":{"706":1}}],["工具集合",{"2":{"913":1}}],["工具集",{"2":{"647":24,"677":4,"706":31,"735":58,"763":11,"790":39,"819":11,"851":50,"908":2,"939":19,"980":37}}],["工具当作你的",{"2":{"610":1}}],["工具深度对话",{"2":{"610":1}}],["工具横向对比",{"0":{"568":1}}],["工具插件生态最丰富",{"2":{"511":1}}],["工具的有机结合",{"2":{"494":1}}],["工具能力",{"2":{"494":1}}],["工具查找与当前问题相似的典型例题或变式题",{"2":{"494":1}}],["工具委托任务",{"2":{"470":1}}],["工具生成",{"2":{"470":1}}],["工具协作断层",{"2":{"465":1}}],["工具栈也从单一走向前沿",{"2":{"464":1}}],["工具化阶段",{"2":{"459":1}}],["工具完成一个小闭环",{"2":{"459":1}}],["工具就是它的",{"2":{"408":1}}],["工具和趋势等",{"2":{"346":6}}],["工具和趋势",{"2":{"346":5}}],["工具链",{"2":{"522":1,"785":1}}],["工具链与图文多模态理解应用",{"2":{"522":1}}],["工具链开发",{"2":{"512":1}}],["工具链和限制条件进行了严格的定义",{"2":{"494":1}}],["工具链成熟",{"2":{"341":1}}],["工具链选型",{"0":{"5":1},"1":{"6":1,"7":1,"8":1,"9":1}}],["工具层",{"2":{"274":1}}],["工具类类似",{"2":{"642":1}}],["工具类",{"2":{"188":1,"647":2,"962":1}}],["工具会迭代",{"2":{"180":1}}],["工具函数和矩阵变换",{"2":{"679":1}}],["工具函数和组件接口",{"2":{"271":1}}],["工具函数和类库开发",{"2":{"256":1}}],["工具函数等场景",{"2":{"264":1}}],["工具函数",{"2":{"178":1,"274":1,"275":1,"280":2,"286":1,"647":2,"818":1}}],["工具调用循环完全",{"2":{"915":1}}],["工具调用循环采用策略模式处理不同的停止条件",{"2":{"915":1}}],["工具调用循环等编排逻辑",{"2":{"912":1}}],["工具调用循环在这里",{"2":{"909":1}}],["工具调用循环",{"2":{"906":1,"912":1,"915":1}}],["工具调用完善",{"2":{"522":1}}],["工具调用少",{"2":{"432":1}}],["工具调用的安全边界",{"2":{"415":1}}],["工具调用",{"2":{"101":1,"402":1,"502":4,"512":1,"901":1,"913":1,"994":1}}],["工具",{"0":{"402":1,"411":1,"501":1},"2":{"6":1,"342":1,"408":3,"470":2,"472":1,"494":1,"515":1,"518":1,"557":1,"559":1,"562":1,"565":1,"568":1,"693":1,"763":1,"817":1,"835":1,"915":1,"979":1,"982":1,"986":3}}],["■",{"2":{"45":2}}],["图2",{"2":{"1006":1,"1014":1,"1015":1}}],["图1",{"2":{"1006":1,"1014":1,"1015":1}}],["图绘制规范",{"2":{"980":1}}],["图案填充",{"2":{"706":1,"715":1}}],["图结构",{"2":{"706":1}}],["图层对象代理",{"2":{"735":1}}],["图层创建",{"2":{"735":1}}],["图层元素",{"2":{"738":1}}],["图层元素基类",{"2":{"735":1,"738":1}}],["图层元素系统",{"2":{"735":1}}],["图层契约",{"2":{"692":1}}],["图层",{"2":{"677":1,"679":1,"738":1}}],["图层系统",{"2":{"672":1}}],["图形工具",{"2":{"706":1}}],["图形元素",{"2":{"706":1,"709":1}}],["图形基类",{"2":{"704":1}}],["图形对象基类",{"2":{"682":1}}],["图形树管理层",{"2":{"675":1,"676":1}}],["图形编辑器",{"2":{"671":2}}],["图形编程",{"2":{"346":1}}],["图形一致性",{"2":{"670":1}}],["图形框架",{"2":{"670":1}}],["图形",{"2":{"647":1}}],["图标组件库",{"2":{"647":1}}],["图标",{"2":{"647":1}}],["图标库",{"2":{"645":1}}],["图标文件",{"2":{"643":1}}],["图标等资源",{"2":{"442":1}}],["图文多模态理解",{"2":{"512":1,"522":1}}],["图",{"2":{"511":2,"521":1,"636":1,"706":3}}],["图像处理",{"2":{"763":1}}],["图像层等",{"2":{"738":1}}],["图像元素",{"2":{"735":3}}],["图像理解",{"2":{"494":1}}],["图像内容理解",{"2":{"494":1}}],["图像",{"2":{"338":1,"410":1,"418":1,"511":1,"521":1,"523":2,"671":1,"677":1,"902":1,"908":1}}],["图片来自",{"2":{"1015":3}}],["图片预加载",{"2":{"738":1}}],["图片预加载覆盖",{"2":{"735":1}}],["图片预加载器",{"2":{"735":1}}],["图片加载",{"2":{"677":1,"763":1}}],["图片加载拖慢页面",{"2":{"72":1}}],["图片合成",{"2":{"671":1}}],["图片解析",{"2":{"518":1}}],["图片识别和网盘资源检索",{"2":{"518":1}}],["图片",{"2":{"343":1,"521":1,"719":1,"939":1}}],["图片等",{"2":{"18":1}}],["图表渲染成",{"2":{"980":1}}],["图表语言",{"2":{"976":1}}],["图表特定的视觉编码",{"2":{"715":1}}],["图表视图",{"2":{"709":1}}],["图表主实例",{"2":{"709":1}}],["图表辅助",{"2":{"706":1}}],["图表类型实现",{"2":{"706":1}}],["图表类型",{"2":{"704":1}}],["图表到",{"2":{"472":1}}],["图表生成",{"2":{"472":1,"939":1}}],["图表",{"2":{"62":1,"470":1,"471":1,"472":1,"639":1,"708":1,"711":1}}],["图例颜色",{"2":{"715":1}}],["图例切换",{"2":{"706":1}}],["图例切换等丰富的交互行为",{"2":{"699":1}}],["图例组件",{"2":{"706":1}}],["图例",{"2":{"45":1,"709":1}}],["⭐⭐",{"2":{"562":1}}],["⭐",{"2":{"45":2,"522":2,"562":5}}],["████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"45":1}}],["████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"45":1}}],["██████████████████████████████████████████████████████",{"2":{"45":3}}],["████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"45":2}}],["████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"45":2}}],["████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"45":4}}],["██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"45":2}}],["│◄──────────►│",{"2":{"849":1}}],["││",{"2":{"849":8,"858":3,"859":10,"860":17}}],["│",{"2":{"45":124,"46":54,"61":3,"67":7,"166":10,"190":3,"191":1,"211":13,"274":206,"275":72,"279":8,"280":613,"290":133,"470":14,"471":14,"474":18,"570":31,"647":443,"677":96,"706":273,"735":523,"763":632,"790":119,"819":179,"849":161,"851":177,"855":27,"856":8,"858":87,"859":53,"860":56,"882":6,"889":83,"891":43,"892":95,"908":15,"939":718,"980":217}}],["动效",{"2":{"755":1,"968":1}}],["动动嘴皮子就能生成完整项目",{"2":{"569":1}}],["动词",{"2":{"505":1}}],["动作与事件系统",{"0":{"654":1}}],["动作对象",{"2":{"650":1}}],["动作处理中枢",{"2":{"647":1}}],["动作系统",{"2":{"645":1,"647":1}}],["动作生成",{"2":{"412":1}}],["动作",{"2":{"412":1,"449":1}}],["动静分离",{"0":{"75":1}}],["动静混合",{"2":{"45":1,"46":1}}],["动画参数",{"2":{"835":1}}],["动画参数配置",{"2":{"835":1}}],["动画参数被解析为",{"2":{"830":1}}],["动画从创建到完成的生命周期",{"0":{"830":1}}],["动画完成",{"2":{"825":1}}],["动画时间基类契约",{"2":{"834":1}}],["动画时间基类",{"0":{"825":1},"2":{"825":1}}],["动画时间线",{"2":{"822":1}}],["动画时间控制器",{"2":{"822":1}}],["动画单元",{"2":{"822":1}}],["动画抽象层",{"2":{"817":1,"818":2}}],["动画调度器",{"2":{"772":1}}],["动画求解器",{"2":{"763":1}}],["动画对象组",{"2":{"763":1}}],["动画动作",{"2":{"763":1,"772":1}}],["动画片段",{"2":{"763":1,"772":1}}],["动画混合器",{"2":{"763":1}}],["动画管理系统",{"2":{"749":1}}],["动画管理层",{"2":{"733":1,"734":2}}],["动画的核心引擎",{"2":{"743":1}}],["动画循环控制",{"2":{"740":1}}],["动画注册中心",{"2":{"740":1}}],["动画生命周期管理",{"2":{"819":1}}],["动画生命周期管理器",{"0":{"740":1}}],["动画生命周期管理模块",{"2":{"735":1}}],["动画属性插值单元契约",{"2":{"834":1}}],["动画属性契约",{"2":{"749":1}}],["动画属性关键帧插值引擎",{"2":{"743":1}}],["动画属性与关键帧插值系统",{"0":{"743":1}}],["动画属性",{"2":{"738":2}}],["动画实例契约",{"2":{"749":1}}],["动画实例创建",{"2":{"746":1}}],["动画实例通过事件通知管理器状态变化",{"2":{"740":1}}],["动画实例",{"2":{"738":1}}],["动画实例核心",{"2":{"735":1}}],["动画演示页面",{"2":{"735":1}}],["动画无法正确渲染",{"2":{"731":1}}],["动画数据在浏览器中以",{"2":{"728":1}}],["动画解析与原生渲染引擎",{"2":{"728":1}}],["动画系统采用关键帧插值架构",{"2":{"772":1}}],["动画系统",{"0":{"772":1},"2":{"706":1}}],["动画引擎的核心时间抽象",{"2":{"819":1}}],["动画引擎库",{"2":{"812":1}}],["动画引擎契约",{"2":{"692":1}}],["动画引擎",{"0":{"686":1},"2":{"672":1,"677":1,"679":1,"686":1}}],["动画和交互的轻量级方案",{"2":{"671":1}}],["动画工具",{"2":{"647":1,"763":1}}],["动画",{"2":{"62":1,"693":1,"728":1,"729":2,"735":5,"757":1,"812":2,"818":1}}],["动态主题等长期演进需求",{"2":{"965":1}}],["动态路径",{"2":{"941":1}}],["动态路由",{"2":{"15":1,"65":1}}],["动态值订阅",{"2":{"939":1}}],["动态更新",{"2":{"934":1}}],["动态更新与实时同步",{"2":{"417":1}}],["动态布局文本数据",{"2":{"790":1}}],["动态布局逻辑",{"2":{"790":1}}],["动态布局",{"2":{"790":2}}],["动态属性容器",{"2":{"735":1}}],["动态数据收集",{"2":{"934":1}}],["动态数据",{"2":{"700":1}}],["动态数据通过",{"2":{"4":1}}],["动态表单与配置化后台",{"2":{"640":1}}],["动态挂载",{"2":{"547":1}}],["动态上下文注入",{"2":{"536":1}}],["动态发现与按需执行",{"2":{"441":1}}],["动态加载不同的技能",{"2":{"443":1}}],["动态加载",{"2":{"436":1,"859":1}}],["动态闭环的关键",{"2":{"429":1}}],["动态重判断",{"2":{"427":1}}],["动态响应模式",{"0":{"427":1}}],["动态记忆能力",{"2":{"426":1}}],["动态调整执行策略",{"2":{"477":1}}],["动态调整",{"2":{"412":1}}],["动态地为其他模块增加功能",{"2":{"325":1}}],["动态地组合各种功能模块",{"2":{"248":1}}],["动态导入",{"0":{"313":1}}],["动态导入子应用组件",{"2":{"288":1}}],["动态装配",{"2":{"248":1}}],["动态切换",{"2":{"166":1}}],["动态页面中的静态大模块",{"2":{"76":1}}],["动态洞",{"2":{"75":1}}],["动态的",{"2":{"70":1}}],["动态",{"0":{"70":1},"2":{"333":1,"549":1,"790":1}}],["动态例外",{"2":{"47":1}}],["动态后长",{"2":{"45":1}}],["动态按需",{"2":{"45":1}}],["动态内容后补",{"2":{"75":1}}],["动态内容",{"2":{"45":1}}],["动态内容必须等待构建",{"2":{"43":1}}],["动态部分走",{"2":{"45":1}}],["动态部分逐一填充",{"2":{"40":1}}],["动态部分通过流式加载逐步呈现",{"2":{"39":1}}],["动态组件在请求时渲染",{"2":{"45":1}}],["动态组件走流式",{"2":{"45":1}}],["动态组件取决于其刷新策略",{"2":{"45":1}}],["动态组件独立渲染",{"2":{"45":1}}],["动态组件独立缓存",{"2":{"45":1}}],["动态组件独立流式返回",{"2":{"45":1}}],["动态组件",{"2":{"40":1}}],["动态生成属性的",{"2":{"682":1}}],["动态生成",{"2":{"23":1,"682":1,"965":1}}],["动态功能通过",{"2":{"20":1}}],["动态功能",{"2":{"11":1}}],["强类型定义",{"2":{"971":2}}],["强力约束与",{"2":{"967":1}}],["强力推荐",{"2":{"515":1}}],["强隔离壁垒",{"2":{"965":1}}],["强",{"2":{"565":3}}],["强化了一种万变不离其宗",{"2":{"1047":1}}],["强化",{"0":{"626":1}}],["强化学习",{"2":{"551":1}}],["强化这个直觉",{"2":{"369":1}}],["强约束",{"2":{"542":1}}],["强迫自己把模糊的感觉结构化为文字",{"2":{"375":1}}],["强迫自己构思一个",{"2":{"370":1}}],["强调色",{"2":{"962":1}}],["强调的种种理由其实与",{"2":{"613":1}}],["强调关键思考节点",{"2":{"494":1}}],["强调",{"2":{"359":1,"505":1,"706":1}}],["强调易用性和高性能",{"2":{"339":1}}],["强依赖",{"2":{"432":1,"965":1}}],["强依赖任务时表现更稳健的范式",{"2":{"428":1}}],["强依赖首屏",{"2":{"344":1}}],["强依赖后端服务器",{"2":{"3":1}}],["强主张的模块化目录",{"2":{"344":1}}],["强绑定",{"2":{"342":1,"964":1}}],["强业务逻辑系统",{"2":{"342":1}}],["强可预测性需求",{"2":{"341":1}}],["强烈推荐开启",{"2":{"212":1}}],["强烈推荐",{"2":{"203":1,"515":1,"523":1,"564":1}}],["强烈建议将其沉淀为",{"2":{"435":1}}],["强烈建议开启所有",{"2":{"203":1}}],["强烈建议结合",{"2":{"163":1}}],["强制调用",{"2":{"986":1}}],["强制完整填写",{"2":{"980":1}}],["强制设计先行",{"2":{"980":1}}],["强制",{"2":{"975":1}}],["强制在段后断行",{"2":{"797":1}}],["强制推进",{"2":{"797":1}}],["强制断行",{"2":{"797":1}}],["强制重新编译所有项目",{"2":{"216":1}}],["强制使用",{"2":{"203":1,"790":1}}],["强制检验当前的",{"2":{"171":1}}],["强制后台拉取最新的真实状态",{"2":{"96":1}}],["强大的公式与流程引擎",{"2":{"515":1}}],["强大的公式引擎与自动化工作流引擎让内容真正",{"2":{"515":1}}],["强大的语义理解能力",{"2":{"425":1}}],["强大的标准化缓存",{"2":{"342":1}}],["强大的缓存生命周期管理",{"2":{"342":1}}],["强大的生命周期来控制这些复杂的异步交互流",{"2":{"101":1}}],["强大的",{"2":{"101":1}}],["强关联数据的复杂工程",{"2":{"99":1}}],["强交互",{"2":{"45":1,"46":1}}],["万物有规则可循的思维方式",{"2":{"1047":1}}],["万物皆数",{"2":{"1042":1}}],["万花筒效果",{"2":{"677":1}}],["万",{"2":{"511":1,"512":2,"522":2}}],["万级",{"2":{"166":1}}],["万级页面构建慢",{"2":{"45":1}}],["万个长连接",{"2":{"125":1}}],["万名用户同时排队等图片",{"2":{"125":1}}],["万能的",{"2":{"327":1}}],["万能法则",{"2":{"200":1}}],["万能",{"2":{"20":1}}],["随机工具",{"2":{"819":1}}],["随机性",{"2":{"532":1}}],["随机值生成",{"2":{"819":1}}],["随机值",{"2":{"47":1}}],["随用随付",{"2":{"523":1}}],["随叫随到的",{"2":{"435":1}}],["随时会丢失",{"2":{"375":1}}],["随时间推移保持不变",{"2":{"173":1}}],["随时可重新发起",{"2":{"166":1}}],["随着年龄与工作年限的增长",{"2":{"1043":1}}],["随着工作年限和阅历的增加",{"2":{"1034":1}}],["随着工作的深入",{"2":{"1022":1}}],["随着日本制造技术的逐渐发达",{"2":{"1027":1}}],["随着社会的发展",{"2":{"1022":1}}],["随着大模型被广泛熟知",{"2":{"1018":1}}],["随着训练数据的加大",{"2":{"1017":1}}],["随着对模型思维",{"2":{"1011":1}}],["随着时间的推移",{"2":{"1030":1}}],["随着时间的推移与项目经验的累积",{"2":{"464":1}}],["随着时间的流逝",{"2":{"1026":1}}],["随着时间的积累",{"2":{"1011":1}}],["随着阅读时间的累加",{"2":{"1008":1}}],["随着阅读的深入",{"2":{"613":1}}],["随着模型越大",{"2":{"551":1}}],["随着模型上下文窗口的扩大",{"2":{"509":1}}],["随着开源基座模型的强大",{"2":{"551":1}}],["随着项目复杂度的急剧提升",{"2":{"957":1}}],["随着项目进展自动同步最新的会议纪要或技术方案",{"2":{"417":1}}],["随着项目规模日益膨胀",{"2":{"294":1}}],["随着技术的演进",{"2":{"414":1}}],["随着长文本技术",{"2":{"410":1}}],["随着人员扩张",{"2":{"387":1}}],["随着后端逻辑变厚",{"2":{"336":1}}],["随着业务增长",{"2":{"327":1}}],["随着web技术的不断发展",{"2":{"293":1}}],["随着前四个阶段的稳步推进",{"2":{"176":1}}],["随着功能膨胀",{"2":{"170":1}}],["随着",{"2":{"103":1,"403":1,"419":1,"439":1,"441":1,"527":1,"548":1,"959":1}}],["随页面数量线性增长",{"2":{"45":1}}],["随后将干净的数据流入子组件",{"2":{"170":1}}],["随后持续",{"2":{"124":1}}],["随后手动将数据获取逻辑与前端业务逻辑及",{"2":{"83":1}}],["随后被其他框架逐步借鉴",{"2":{"41":1}}],["随后加载",{"2":{"27":1}}],["随后进行",{"2":{"26":1}}],["纯属",{"2":{"970":1}}],["纯预处理器的开发节奏太慢",{"2":{"965":1}}],["纯自研",{"2":{"965":1}}],["纯原子化",{"2":{"965":1}}],["纯数字",{"2":{"828":1}}],["纯数据驱动",{"2":{"789":1}}],["纯数据",{"2":{"650":1}}],["纯算术的行行走",{"2":{"788":1}}],["纯算术",{"2":{"786":1}}],["纯色层元素",{"2":{"735":3}}],["纯思考",{"2":{"622":1}}],["纯执行",{"2":{"622":1}}],["纯手工编码",{"2":{"553":1,"971":1}}],["纯手工敲击代码",{"2":{"540":1}}],["纯文本大模型在进行严谨的逻辑推演和数学计算时",{"2":{"493":1}}],["纯后端业务逻辑处理",{"2":{"344":1}}],["纯函数",{"2":{"170":1}}],["纯布局或纯逻辑",{"2":{"169":1}}],["纯无状态查询",{"2":{"166":1}}],["纯流式",{"2":{"135":1}}],["纯展示层",{"2":{"82":1}}],["纯客户端应用",{"2":{"81":1}}],["纯交互逻辑",{"2":{"63":1}}],["纯交互工具",{"2":{"63":1}}],["纯粹是本地构建工具的批量处理",{"2":{"50":1}}],["纯静态托管",{"2":{"345":1}}],["纯静态落地页",{"2":{"81":1}}],["纯静态分发",{"0":{"52":1},"2":{"49":1}}],["纯静态网站",{"2":{"4":1}}],["纯",{"2":{"45":1,"59":1,"344":1,"731":1,"759":1,"763":1,"765":1,"975":1}}],["完美合并类名并解决冲突",{"2":{"964":1}}],["完美的运行时动态能力",{"2":{"965":1}}],["完美的",{"2":{"964":1,"965":1}}],["完美的组件隔离",{"2":{"959":1}}],["完美的架构",{"2":{"363":1}}],["完美工程",{"2":{"530":1}}],["完美支持",{"2":{"322":1}}],["完善的",{"2":{"701":1}}],["完善的测试用例是类型检查之外的最后一道防线",{"2":{"226":1}}],["完善过的观点",{"2":{"375":1}}],["完善领域事件体系",{"2":{"282":1}}],["完成前验证",{"2":{"979":1,"980":1}}],["完成前显示骨架屏",{"2":{"74":1}}],["完成自动聚合",{"2":{"632":1}}],["完成后",{"2":{"712":1}}],["完成后有提示音",{"2":{"561":1}}],["完成后再通知组件渲染",{"2":{"92":1}}],["完成具体的模块实现",{"2":{"558":1}}],["完成一支团队的工作",{"2":{"553":1}}],["完成技术架构的调研",{"2":{"542":1}}],["完成日常辅助",{"2":{"459":1}}],["完成意图理解后",{"2":{"443":1}}],["完成规模化的个性化生产",{"2":{"403":1}}],["完成闭环",{"2":{"175":1}}],["完成付款后",{"2":{"120":1}}],["完成从",{"2":{"58":1,"406":1}}],["完成",{"2":{"53":1,"147":1,"159":1,"445":1,"471":1,"472":1,"825":1}}],["完整开发工作流",{"0":{"991":1}}],["完整消息体",{"2":{"947":1}}],["完整双向集成",{"2":{"939":1}}],["完整目录结构",{"0":{"908":1}}],["完整目录树",{"0":{"851":1}}],["完整路径",{"2":{"854":1,"855":1}}],["完整模拟",{"2":{"786":1}}],["完整模块组装器",{"2":{"677":1}}],["完整包",{"2":{"763":1}}],["完整光照",{"2":{"763":1}}],["完整入口",{"2":{"763":2,"765":2}}],["完整生命周期",{"0":{"746":1}}],["完整实现了",{"2":{"742":1}}],["完整构建",{"2":{"697":1}}],["完整版",{"2":{"679":1}}],["完整版入口",{"2":{"677":1,"679":1}}],["完整报告",{"2":{"632":1}}],["完整地读",{"0":{"608":1}}],["完整还原它的推理链条",{"2":{"537":1}}],["完整代码已开源至",{"2":{"467":1}}],["完整的技能定义",{"2":{"994":1}}],["完整的类型定义",{"2":{"874":1}}],["完整的",{"2":{"702":1,"730":1,"903":1}}],["完整的事件监听",{"2":{"682":1}}],["完整的渲染器配置",{"2":{"661":1}}],["完整的低代码编辑器",{"2":{"641":1}}],["完整的测试",{"2":{"177":1}}],["完整的模块有清晰的边界",{"2":{"177":1}}],["完整交付",{"2":{"177":1}}],["完整交付链路",{"2":{"59":1}}],["完整示例",{"0":{"150":1}}],["完整响应",{"2":{"102":1}}],["完整",{"2":{"45":3,"562":1,"647":1,"785":1,"956":1}}],["完全掌控连接断开时的重试逻辑",{"2":{"874":1}}],["完全被动接收信息",{"2":{"622":1}}],["完全禁止执行的命令或访问的文件",{"2":{"594":1}}],["完全开源",{"2":{"568":1}}],["完全开源的",{"2":{"567":1}}],["完全开源可本地部署",{"2":{"522":1}}],["完全兼容",{"2":{"523":1,"874":1}}],["完全免费",{"2":{"515":1}}],["完全达标",{"2":{"464":1}}],["完全不需要像",{"2":{"961":1}}],["完全不需要手写接口文档或",{"2":{"342":1}}],["完全不插手",{"2":{"57":1}}],["完全独立作用域",{"2":{"320":1}}],["完全失去类型检查",{"2":{"253":1}}],["完全符合集合代数的直觉",{"2":{"244":1}}],["完全交由",{"2":{"179":1}}],["完全由开发者声明式地定义",{"2":{"179":1}}],["完全消除字体请求的网络往返",{"2":{"72":1}}],["完全可以采用不同的渲染策略",{"2":{"55":1}}],["完全支持",{"2":{"45":1,"135":1,"142":1}}],["完全一致",{"2":{"35":1}}],["完全取决于",{"2":{"25":1}}],["快与慢只是表象",{"2":{"1049":1}}],["快刀斩乱麻",{"2":{"1036":1}}],["快结束时遇到了一个特别有意思的娱乐活动",{"2":{"1016":1}}],["快来和我一起",{"2":{"508":1}}],["快用你的灵感为世界添一首诗吧",{"2":{"507":1}}],["快乐工作五十年",{"2":{"1026":1}}],["快乐",{"2":{"340":1}}],["快捷方式",{"2":{"304":1}}],["快照生成",{"2":{"851":1}}],["快照格式化",{"2":{"851":1}}],["快照与提取",{"2":{"849":1}}],["快照",{"2":{"790":1,"951":1}}],["快照测试",{"2":{"225":1}}],["快照测试等",{"2":{"225":1}}],["快照渲染",{"2":{"98":1}}],["快速组建",{"2":{"965":1}}],["快速验证想法并上线",{"2":{"963":1}}],["快速补全",{"2":{"851":1}}],["快速高度测量",{"0":{"801":1}}],["快速路径检查",{"2":{"855":1}}],["快速路径优化",{"2":{"851":1}}],["快速路径使用",{"2":{"793":1}}],["快速路径",{"2":{"786":1,"797":1,"805":1,"806":2,"854":1}}],["快速图层",{"2":{"677":1,"679":1}}],["快速开始",{"0":{"664":1,"694":1,"721":1,"752":1,"779":1,"807":1,"837":1,"867":1,"928":1,"953":1,"996":1},"1":{"665":1,"666":1,"667":1,"668":1,"695":1,"696":1,"697":1,"722":1,"723":1,"724":1,"725":1,"726":1,"753":1,"754":1,"755":1,"780":1,"781":1,"782":1,"808":1,"809":1,"810":1,"838":1,"839":1,"840":1,"841":1,"868":1,"869":1,"870":1,"929":1,"930":1,"931":1,"954":1,"955":1,"956":1,"997":1,"998":1,"999":1}}],["快速开发",{"2":{"11":1}}],["快速入门与角色化阅读指南",{"2":{"636":1}}],["快速获取建站初始模板",{"2":{"562":1}}],["快速选择建议",{"2":{"562":1}}],["快速复现竞品界面",{"2":{"561":1}}],["快速迭代",{"2":{"561":1}}],["快速构建最小可行性产品",{"2":{"556":1}}],["快速事实核查",{"2":{"518":1}}],["快速对话",{"2":{"502":2}}],["快速上手",{"0":{"479":1},"1":{"480":1,"481":1}}],["快速生成可部署全栈",{"2":{"562":1}}],["快速生成摘要或建议",{"2":{"465":1}}],["快速生图",{"2":{"130":1}}],["快速通道",{"2":{"456":1}}],["快速进行文章总结",{"2":{"435":1}}],["快速结算",{"2":{"366":1}}],["快速跨越多个领域的知识盲区",{"2":{"358":1}}],["快速搭建微前端应用",{"2":{"287":1}}],["快速的测试编写和执行方式",{"2":{"220":1}}],["快速初始化项目结构与配置文件",{"2":{"171":1}}],["快速响应且数据保持更新",{"2":{"342":1}}],["快速响应",{"2":{"130":1}}],["快速",{"2":{"80":1,"350":1}}],["快部分先送达用户",{"2":{"74":1}}],["快",{"2":{"45":2,"343":2}}],["慢慢也就开悟了",{"2":{"1043":1}}],["慢慢注重这方面了",{"2":{"1026":1}}],["慢慢意识自身不足",{"2":{"1022":1}}],["慢公司",{"2":{"601":1}}],["慢思考推理链",{"2":{"512":1}}],["慢部分后台渲染后流式注入",{"2":{"74":1}}],["慢",{"2":{"45":1}}],["每月体重下降至少",{"2":{"1047":1,"1048":1}}],["每月减",{"2":{"1026":1}}],["每月调用量级",{"2":{"519":1}}],["每任务一个子agent",{"2":{"980":1}}],["每帧渲染时",{"2":{"828":1}}],["每帧动态计算",{"2":{"828":1}}],["每帧",{"2":{"826":1,"830":1}}],["每帧调用",{"2":{"772":1}}],["每行格式应为",{"2":{"899":1}}],["每行宽度可能不同",{"2":{"802":1}}],["每行回调",{"2":{"799":1}}],["每行范围",{"2":{"797":1}}],["每行触发回调",{"2":{"792":1}}],["每行以",{"2":{"152":1}}],["每种属性通过",{"2":{"743":1}}],["每种渲染类型",{"2":{"738":1}}],["每种图层类型在各渲染器下的具体实现",{"2":{"734":1}}],["每种图表类型布局在特定的坐标系上",{"2":{"714":1}}],["每当获得有价值的信息",{"2":{"626":1}}],["每盒",{"2":{"494":1}}],["每完成一个子任务",{"2":{"429":1}}],["每天锻炼一小时",{"2":{"1026":1}}],["每天耗费大量时间在多源信息的收集",{"2":{"465":1}}],["每天记录",{"2":{"370":1}}],["每天服务数百万次请求",{"2":{"48":1}}],["每日签到",{"2":{"366":1}}],["每周阅读1",{"2":{"1048":1}}],["每周两到三次使用小区或公司健身房器材进行",{"2":{"1048":1}}],["每周两次使用小区或公司健身房器材进行",{"2":{"1047":1}}],["每周早上至少有三次居家",{"2":{"1046":1}}],["每周或每个迭代",{"2":{"531":1}}],["每周五发布",{"2":{"346":1}}],["每周分享最新的",{"2":{"346":2}}],["每一本知识性书籍",{"2":{"609":1}}],["每一次抽象层的上移",{"2":{"525":1}}],["每一片云都写成跳动的诗行吧",{"2":{"508":1}}],["每一个阶段并不需要",{"2":{"464":1}}],["每一个表象背后都有一个黑盒子",{"2":{"1007":1}}],["每一个表象背后",{"2":{"382":1}}],["每一个模块都深藏功与名",{"2":{"337":1}}],["每一句话都必须带有准确的脚注来源",{"2":{"349":1}}],["每一项都需要开发者自行拼装",{"2":{"59":1}}],["每层职责明确",{"2":{"279":1}}],["每层负责特定的功能",{"2":{"273":1}}],["每条答案均附带来源链接",{"2":{"518":1}}],["每条",{"2":{"143":1}}],["每条消息由",{"2":{"109":1}}],["每秒发送一条消息",{"2":{"139":1}}],["每隔数秒轮询一次",{"2":{"126":1}}],["每位用户每",{"2":{"125":1}}],["每",{"2":{"74":1,"860":1,"1048":1}}],["每少一个功能",{"2":{"54":1}}],["每个人多少都有自己的答案",{"2":{"1043":1}}],["每个人遇到的问题和设定的目标不同",{"2":{"1034":1}}],["每个人都体验到了不同于之前的",{"2":{"1019":1}}],["每个人都能获得相同的规则",{"2":{"570":1}}],["每个人都有自己的原生优势象限",{"2":{"458":1}}],["每个人都将拥有一支属于自己的数字团队",{"2":{"420":1}}],["每个角色背后也都有一堆琐碎的事不断涌进来",{"2":{"1034":1}}],["每个任务的循环",{"2":{"988":1}}],["每个任务一个子agent",{"2":{"988":1}}],["每个任务分派给一个子agent",{"2":{"983":1}}],["每个任务分派给独立上下文的子agent",{"2":{"975":1}}],["每个消息只修改状态的一部分",{"2":{"944":1}}],["每个包实现接口规范层定义的抽象接口",{"2":{"906":1}}],["每个元素的延迟时间",{"2":{"835":1}}],["每个节点维护局部变换矩阵",{"2":{"769":1}}],["每个节点独立维护自身属性状态",{"2":{"675":1}}],["每个渲染器有自己的",{"2":{"741":1}}],["每个图表",{"2":{"720":1}}],["每个坐标系包含轴",{"2":{"714":1}}],["每个扩展函数接收此对象并调用需要的注册方法",{"2":{"711":1}}],["每个阶段遍历所有已注册的",{"2":{"708":1}}],["每个阶段都需要不同的专业能力",{"2":{"468":1}}],["每个含",{"2":{"706":2}}],["每个组件的",{"2":{"942":1}}],["每个组件可调用",{"2":{"654":1}}],["每个组件是否只做一件事",{"2":{"169":1}}],["每个页面组件对应一个",{"2":{"653":1}}],["每个文件夹代表知识生命周期的一个阶段",{"2":{"630":1}}],["每个问题说明",{"2":{"591":1}}],["每个技能独占一个子目录",{"2":{"586":1}}],["每个步骤做什么",{"2":{"583":1}}],["每个模块有自己的",{"2":{"821":1}}],["每个模块负责特定的功能",{"2":{"296":1}}],["每个模型有独立",{"2":{"523":1}}],["每个智能体都有自己的任务和职责",{"2":{"475":1}}],["每个研究笔记必须包含",{"2":{"472":1}}],["每个研究员专注一个子主题",{"2":{"470":1}}],["每个项目都在同时训练你的判断力",{"2":{"463":1}}],["每个专注于一个子主题",{"2":{"416":1}}],["每个团队负责一个或多个子应用",{"2":{"291":1}}],["每个子agent获得精确裁剪的上下文",{"2":{"988":1}}],["每个子动画在",{"2":{"831":1}}],["每个子智能体拥有独立的记忆空间",{"2":{"415":1}}],["每个子应用都是独立的模块",{"2":{"292":1}}],["每个子应用都是一个独立的模块",{"2":{"286":1}}],["每个子应用专注于特定的业务领域",{"2":{"292":1}}],["每个子应用的样式应该隔离",{"2":{"286":1}}],["每个子应用可以独立开发",{"2":{"284":1,"285":1}}],["每个子项目都有独立的",{"2":{"205":1}}],["每个子项目可以拥有独立的配置文件",{"2":{"202":1}}],["每个成员都有",{"2":{"230":1}}],["每个成员拥有一个共同的",{"2":{"230":1}}],["每个单元对外仅暴露",{"2":{"170":1}}],["每个",{"2":{"50":1,"53":1,"248":1,"437":1,"464":1,"579":1,"591":1,"672":1,"680":1,"683":1,"709":1,"712":1,"738":1,"770":1,"916":1,"927":1,"942":1,"944":1,"994":1}}],["每次想去健身房看看时",{"2":{"1046":1}}],["每次想修改组件库内部样式",{"2":{"961":1}}],["每次只问一个问题",{"2":{"987":1}}],["每次收到用户请求都会先检查是否有适用技能",{"2":{"982":1}}],["每次实现时触发",{"2":{"979":1}}],["每次部署都要确认环境",{"2":{"583":1}}],["每次代码审查都要重复说",{"2":{"583":1}}],["每次开发完成后必须运行完整验证",{"2":{"177":1}}],["每次开发应聚焦于一个完整",{"2":{"177":1}}],["每次让",{"2":{"177":1}}],["每次请求",{"2":{"63":1}}],["每次请求都必须携带完整的",{"2":{"103":1}}],["每次请求都不同",{"2":{"63":1}}],["每次请求都需渲染",{"2":{"45":1}}],["每次请求都重新生成",{"2":{"45":1}}],["每次请求时实时渲染",{"2":{"45":1}}],["每次访问都重新生成",{"2":{"45":1}}],["每分钟更新数百篇文章",{"2":{"19":1}}],["78个示例页面",{"2":{"819":1}}],["785行",{"2":{"647":1}}],["7个独立工具",{"2":{"819":1}}],["71kb",{"2":{"763":1}}],["76kb",{"2":{"763":1}}],["773行",{"2":{"735":1}}],["75",{"2":{"782":1,"1026":1}}],["752行",{"2":{"735":1}}],["75+",{"2":{"646":1,"647":1}}],["7+",{"2":{"665":1}}],["79kb",{"2":{"647":1,"763":1}}],["70+",{"2":{"647":1,"844":1,"845":1,"849":1,"850":1,"851":2}}],["7000",{"2":{"705":1,"715":1}}],["700",{"2":{"343":1,"962":2,"964":1}}],["70",{"2":{"169":2}}],["7",{"0":{"44":1,"45":1,"46":1,"47":1,"79":1,"80":1,"81":1,"82":1,"123":1,"124":1,"125":1,"126":1,"127":1,"128":1,"283":1,"291":1,"316":1,"323":1,"344":1,"388":1,"433":1,"440":1,"456":1,"491":1,"589":1,"590":1,"591":1,"592":1,"664":1,"665":1,"666":1,"667":1,"668":1,"694":1,"695":1,"696":1,"697":1,"751":1,"836":1,"867":1,"868":1,"869":1,"870":1,"927":1,"953":1,"954":1,"955":1,"956":1,"964":1,"996":1,"997":1,"998":1,"999":1},"1":{"45":1,"46":1,"47":1,"80":1,"81":1,"82":1,"124":1,"125":1,"126":1,"127":1,"128":1,"324":1,"325":1,"590":1,"591":1,"592":1,"665":1,"666":1,"667":1,"668":1,"695":1,"696":1,"697":1,"868":1,"869":1,"870":1,"954":1,"955":1,"956":1,"997":1,"998":1,"999":1},"2":{"419":2,"441":1,"643":1,"790":3,"975":1,"987":1,"988":1,"1019":1,"1036":3}}],["当初对身边人有点苛刻",{"2":{"1043":1}}],["当初那套粗放模式失效了",{"2":{"387":1}}],["当从居家办公切换到办公室工作环境中",{"2":{"1040":1}}],["当系统运转正常的时候",{"2":{"1007":1}}],["当系统运转正常时",{"2":{"382":1}}],["当疫情给世界按下暂停键",{"2":{"1005":1}}],["当多个动画同时修改同一目标的同一属性时",{"2":{"832":1}}],["当动画到达",{"2":{"830":1}}],["当单个字形超过行宽时",{"2":{"797":1}}],["当怨气占据大脑",{"2":{"612":1}}],["当看到身边不读书的人纷纷买车买房时",{"2":{"612":1}}],["当自诩为",{"2":{"612":1}}],["当主",{"2":{"591":1}}],["当任务的复杂度上升到需要",{"2":{"589":1}}],["当任务执行失败时",{"2":{"430":1}}],["当对话中出现相关内容时自动匹配",{"2":{"586":1}}],["当检测到以下关键词时自动触发",{"2":{"586":1}}],["当某个规范需要独立编辑",{"2":{"577":1}}],["当项目从个人项目成长为团队协作时",{"2":{"575":1}}],["当项目需要被其他项目引用时",{"2":{"208":1}}],["当满足特定条件时自动执行",{"2":{"570":1}}],["当写代码变得不再昂贵",{"2":{"539":1}}],["当编码平台的",{"2":{"982":1}}],["当编码成本趋于零时",{"2":{"525":1}}],["当编程的门槛降低到",{"2":{"530":1}}],["当每个人都有一个能写代码的",{"2":{"530":1}}],["当技术壁垒被削平",{"2":{"529":1}}],["当工程师拥有了像",{"2":{"525":1}}],["当代码生成变得廉价",{"2":{"555":1}}],["当代码未通过验证时",{"2":{"177":1}}],["当代家长在辅导孩子尤其是数学作业时",{"2":{"492":1}}],["当启动一个",{"2":{"486":1}}],["当嘉宾抛出",{"2":{"457":1}}],["当需要修改",{"2":{"968":1}}],["当需要进行",{"2":{"451":1}}],["当需要独立执行",{"2":{"438":1}}],["当需要以下能力时",{"2":{"437":1}}],["当需要携带较大",{"2":{"135":1}}],["当面对较复杂的工程任务时",{"2":{"415":1}}],["当生存不再受制于人",{"2":{"379":1}}],["当一个赛道人人都争先恐后时",{"2":{"620":1}}],["当一个模块开始出现",{"2":{"329":1}}],["当一个模块承担了太多不相关的业务逻辑时",{"2":{"327":1}}],["当一家企业赚的钱大于花的钱时",{"2":{"379":1}}],["当所有人都沉浸在某种热门技术或框架中时",{"2":{"360":1}}],["当推理成本进一步降低",{"2":{"355":1}}],["当年切入低利润率的云市场一样",{"2":{"354":1}}],["当你让",{"2":{"971":1}}],["当你下次在产品或代码中遇到棘手问题时",{"2":{"389":1}}],["当你下次在选型时犹豫不决",{"2":{"54":1}}],["当你坚守这种透明和真实",{"2":{"380":1}}],["当你开始思考这些问题时",{"2":{"337":1}}],["当你开始熟练地运用",{"2":{"303":1}}],["当你在",{"2":{"319":1}}],["当业务需要新增一种数据类型时",{"2":{"255":1}}],["当交叉类型中存在同名但类型不同的属性时",{"2":{"237":1}}],["当条件类型作用于裸类型参数",{"2":{"234":1}}],["当内置收窄不够用时",{"2":{"231":1}}],["当我们谈论",{"2":{"553":1}}],["当我们输入",{"2":{"495":1}}],["当我们用",{"2":{"440":1}}],["当我们成为社区中那个",{"2":{"377":1}}],["当我们试图构建智能化的知识管理工具",{"2":{"377":1}}],["当我们遇到一个让自己惊叹的产品",{"2":{"371":1}}],["当我们面对一个新项目时",{"2":{"597":1}}],["当我们面对",{"2":{"359":1}}],["当我们调用泛型函数时",{"2":{"254":1}}],["当我们定义一个泛型函数",{"2":{"254":1}}],["当我们处理联合类型时",{"2":{"232":1}}],["当我们说一个变量的类型是",{"2":{"227":1}}],["当我们回望",{"2":{"180":1}}],["当我们在",{"2":{"179":1,"326":1}}],["当底层展示组件需要向上级反馈用户行为时",{"2":{"175":1}}],["当客户端断开连接时",{"2":{"154":1}}],["当然",{"2":{"128":1,"171":1,"437":1,"1002":1,"1009":1,"1016":1,"1020":1,"1022":2,"1029":2,"1032":1,"1034":1}}],["当用户提供诗歌形式和主题时",{"2":{"504":1}}],["当用户提供诗歌形式和主题后",{"2":{"504":1}}],["当用户提交一个宏观任务",{"2":{"429":1}}],["当用户上传含题目的图片时",{"2":{"494":1}}],["当用户上传",{"2":{"448":1}}],["当用户说",{"2":{"448":1}}],["当用户在第三方支付平台",{"2":{"120":1}}],["当用户进行点赞或修改名称等操作时",{"2":{"88":1}}],["当并发量攀升至十万甚至百万级时",{"2":{"117":1}}],["当网络波动导致连接中断时",{"2":{"110":1}}],["当作工具去验证假设",{"2":{"360":1}}],["当作",{"2":{"100":1}}],["当开发者们还在争论",{"2":{"569":1}}],["当开发者尝试在浏览器端使用",{"2":{"305":1}}],["当开发者变更了某个项目",{"2":{"98":1}}],["当开发者需要",{"2":{"62":1}}],["当执行一个复杂变更时",{"2":{"96":1}}],["当没有任何组件订阅这个",{"2":{"92":1}}],["当组件挂载时",{"2":{"92":1}}],["当服务端任务未完成时",{"2":{"157":1}}],["当服务端发生指定事件时",{"2":{"119":1}}],["当服务端处理一个页面请求时",{"2":{"40":1}}],["当服务器处理动态部分时",{"2":{"76":1}}],["当数据查询完成",{"2":{"74":1}}],["当前目标",{"2":{"1048":1}}],["当前仅支持",{"2":{"994":1}}],["当前已解析的",{"2":{"951":1}}],["当前主力版本",{"2":{"939":1}}],["当前开发中的版本",{"2":{"939":1}}],["当前时间",{"2":{"834":2}}],["当前迭代内时间",{"2":{"834":1}}],["当前迭代索引",{"2":{"834":2}}],["当前绝对时间",{"2":{"824":1,"834":1}}],["当前和下一步",{"2":{"790":1}}],["当前值",{"2":{"749":1}}],["当前值的具体类型",{"2":{"230":1}}],["当前帧",{"2":{"738":1}}],["当前表单值",{"2":{"663":1}}],["当前层数据",{"2":{"663":1}}],["当前节点的路径",{"2":{"663":1}}],["当前节点的数据上下文",{"2":{"661":1}}],["当前节点的",{"2":{"661":1}}],["当前节点路径",{"2":{"661":1}}],["当前版本",{"2":{"643":1}}],["当前最大的工程化障碍",{"2":{"536":1}}],["当前最核心的矛盾在于",{"2":{"534":1}}],["当前效率",{"2":{"465":1}}],["当前边界",{"2":{"462":1}}],["当前",{"2":{"434":1,"477":1}}],["当前方案是否最优",{"2":{"414":1}}],["当前的",{"2":{"355":1}}],["当前未用",{"2":{"184":3}}],["当前明确需要",{"2":{"183":1}}],["当前重试次数计数器",{"2":{"150":1}}],["当前正在组装的事件对象",{"2":{"143":1}}],["当前事件的标识",{"2":{"138":1}}],["当前共",{"2":{"70":1}}],["当前生产级实现仍以",{"2":{"41":1}}],["当",{"0":{"357":1},"2":{"69":1,"125":1,"180":1,"231":1,"315":1,"357":1,"376":1,"427":1,"443":1,"457":1,"460":1,"489":1,"509":1,"527":1,"537":1,"553":1,"555":1,"590":2,"628":2,"712":1,"741":1,"747":1,"971":1,"1001":2}}],["整出了一个粗糙的时间统计",{"2":{"1038":1}}],["整洁度",{"2":{"964":1}}],["整本地读",{"0":{"608":1},"2":{"608":1}}],["整合场景图",{"2":{"757":1}}],["整合",{"2":{"523":1}}],["整合业务逻辑与数据访问",{"2":{"191":1}}],["整理规范",{"2":{"597":1}}],["整理",{"2":{"514":1}}],["整体保持第三阶段的执行",{"2":{"1048":1}}],["整体分层架构",{"2":{"734":1}}],["整体任务",{"2":{"712":1}}],["整体架构",{"2":{"938":1}}],["整体架构图",{"0":{"646":1,"676":1,"705":1,"734":1,"762":1,"789":1,"818":1,"849":1,"907":1,"979":1},"2":{"938":1}}],["整体架构设计",{"0":{"644":1,"674":1,"703":1,"732":1,"760":1,"787":1,"816":1,"847":1,"905":1,"937":1,"977":1},"1":{"645":1,"646":1,"647":1,"675":1,"676":1,"677":1,"704":1,"705":1,"706":1,"733":1,"734":1,"735":1,"761":1,"762":1,"763":1,"788":1,"789":1,"790":1,"817":1,"818":1,"819":1,"848":1,"849":1,"850":1,"851":1,"906":1,"907":1,"908":1,"909":1,"910":1,"938":1,"939":1,"978":1,"979":1,"980":1},"2":{"636":1}}],["整体上依然优于国内模型",{"2":{"510":1}}],["整体来讲",{"2":{"412":1}}],["整个时间统计采用了由局部到整体的方式",{"2":{"1038":1}}],["整个系统的入口是",{"2":{"982":1}}],["整个架构的发动机",{"2":{"965":1}}],["整个场景图的入口",{"2":{"684":1}}],["整个应用以树形结构组织",{"2":{"679":1}}],["整个链路基本是这样的",{"2":{"553":1}}],["整个",{"2":{"494":1}}],["整个流程容易陷入死循环或彻底失败",{"2":{"423":1}}],["整个结果都是零",{"2":{"366":1}}],["整个社区的",{"2":{"321":1}}],["整个过程完全基于标准",{"2":{"119":1}}],["整个过程用户感知到的是页面在",{"2":{"40":1}}],["整个页面退化为",{"2":{"62":1}}],["整个页面退化为传统",{"2":{"62":1}}],["整页按统一",{"2":{"36":1}}],["伴随动态组件的加载占位符一起返回",{"2":{"40":1}}],["同学和朋友交流等方式了解一些小常识",{"2":{"1048":1}}],["同学和朋友沟通",{"2":{"1046":1}}],["同上",{"2":{"971":1}}],["同上工程任务",{"2":{"568":1}}],["同心圆",{"2":{"677":1}}],["同样的信息",{"2":{"619":1}}],["同样的逻辑也适用于团队",{"2":{"380":1}}],["同事时",{"2":{"530":1}}],["同事",{"2":{"525":1}}],["同理心不是",{"2":{"366":1}}],["同理心",{"2":{"366":1,"556":1,"1001":1}}],["同理心让你感受到用户的挫败感",{"2":{"366":1}}],["同理心告诉你",{"2":{"366":2}}],["同理心提供",{"2":{"366":1}}],["同构元框架",{"2":{"344":1}}],["同等有效",{"2":{"181":1}}],["同步功能测试",{"2":{"980":1}}],["同步子动画",{"2":{"834":1}}],["同步求值器",{"2":{"655":1}}],["同步表达式求值器",{"2":{"647":1}}],["同步种子数据",{"2":{"583":1}}],["同步基准",{"2":{"451":1}}],["同步仓库",{"2":{"451":1}}],["同步加载会导致页面卡死",{"2":{"305":1}}],["同步加载",{"2":{"304":1}}],["同步至",{"2":{"120":1}}],["同步",{"2":{"91":1,"308":1,"646":1}}],["同步和更新",{"2":{"91":1,"342":1}}],["同时使我们自己为行之有效的相互依赖做好准备",{"2":{"1006":1}}],["同时改写",{"2":{"961":1}}],["同时记录第一个冒号位置",{"2":{"892":1}}],["同时兼容",{"2":{"887":1}}],["同时反向倒逼自身思考质量的提升",{"2":{"625":1}}],["同时写代码和审查代码",{"2":{"590":1}}],["同时释放出更宏大的创造力",{"2":{"525":1}}],["同时还能够举一反三",{"2":{"494":1}}],["同时生成",{"2":{"472":1}}],["同时运行",{"2":{"472":1}}],["同时具备高效的信息检索",{"2":{"467":1}}],["同时具备了流式传输的实时性",{"2":{"135":1}}],["同时处理不同维度的任务",{"2":{"438":1}}],["同时处理复杂的后台任务",{"2":{"419":1}}],["同时为知识工作者提供可落地的效率提升方法",{"2":{"348":1}}],["同时也支持纯",{"2":{"344":2}}],["同时也极其依赖官方",{"2":{"101":1}}],["同时导入值和类型",{"2":{"318":1}}],["同时导入默认成员和命名成员",{"2":{"311":1}}],["同时支持",{"2":{"306":1,"758":1}}],["同时支持灵活的身份验证方式",{"2":{"135":1}}],["同时获得完整的类型提示和安全保障",{"2":{"263":1}}],["同时不丧失通用性",{"2":{"263":1}}],["同时存在于",{"2":{"229":1}}],["同时提升开发效率",{"2":{"201":1}}],["同时提供了强大的功能",{"2":{"85":1}}],["同时保留原有搜索结果兜底",{"2":{"518":1}}],["同时保留了",{"2":{"142":1}}],["同时保持当下时间的专注",{"2":{"1037":1}}],["同时保持与浏览器行为的高度一致",{"2":{"784":1}}],["同时保持",{"2":{"256":1}}],["同时保持对内部元素类型的严格检查",{"2":{"256":1}}],["同时保持类型检查",{"2":{"252":1}}],["同时保证每个模块都是独立",{"2":{"171":1}}],["同时解释其职责划分与层级结构设计的思路",{"2":{"170":1}}],["同时规避了标准",{"2":{"106":1}}],["同时发送请求去更新缓存",{"2":{"85":1}}],["同时",{"2":{"53":1,"131":1,"164":1,"361":1,"392":1,"425":1,"967":1}}],["同时标记下次过期时间",{"2":{"35":1}}],["同一份",{"2":{"933":1,"935":1}}],["同一份动画数据可在",{"2":{"728":1}}],["同一业务实体在组件树中只能存在一份状态副本",{"2":{"174":1}}],["同一个事件可能被多次投递",{"2":{"121":1}}],["同一个",{"2":{"91":1}}],["同一个目录下可存在多个特殊文件",{"2":{"66":1}}],["同一个产品的不同页面",{"2":{"55":1}}],["同一个页面中不同组件可以采用不同的渲染策略",{"2":{"39":1}}],["同一",{"2":{"47":1}}],["部分处理",{"2":{"892":1}}],["部分免费",{"2":{"523":1}}],["部分模型免费",{"2":{"523":2}}],["部分模型开源",{"2":{"522":1}}],["部分模型推理能力已逼近国际顶尖",{"2":{"519":1}}],["部分吗",{"2":{"518":1}}],["部分开源",{"2":{"512":1,"522":1}}],["部分岗位可能被替代",{"2":{"405":1}}],["部分",{"2":{"123":1,"153":4}}],["部分成功",{"2":{"101":1}}],["部分个性化",{"2":{"46":1}}],["部分静态",{"2":{"46":1}}],["部分需要",{"2":{"45":1}}],["部分预渲染",{"2":{"39":1,"45":1}}],["部署方式",{"2":{"573":1}}],["部署环境能否稳定访问海外",{"2":{"519":1}}],["部署与托管",{"0":{"345":1}}],["部署首选",{"2":{"82":1}}],["部署架构",{"2":{"59":1}}],["部署后用户发起请求时",{"2":{"31":1}}],["部署时直接将这些静态文件分发到",{"2":{"30":1}}],["部署时仅需将这些静态文件托管到",{"2":{"2":1}}],["部署",{"2":{"20":1,"21":2,"59":2,"82":1,"284":1,"343":1,"345":1,"567":1,"570":1,"573":1,"587":1}}],["部署完成后",{"2":{"17":1}}],["部署到",{"0":{"17":1},"2":{"17":1,"31":1}}],["部署平台",{"0":{"7":1}}],["部署成本",{"2":{"3":1}}],["部署前完成",{"2":{"3":1}}],["它需要自己去寻找",{"2":{"1023":1}}],["它需要根据你的",{"2":{"971":1}}],["它出现某一个结果的频率就等于其概率",{"2":{"1016":1}}],["它既包括一些成长书中所谓的使命感",{"2":{"1005":1}}],["它既不过于复杂",{"2":{"48":1}}],["它具备无需起类名",{"2":{"962":1}}],["它具备以下四大核心特质",{"2":{"402":1}}],["它也是最早也是最基础的工程化方案",{"2":{"958":1}}],["它维护",{"2":{"944":1}}],["它接收",{"2":{"944":1}}],["它接收预计算的段数据",{"2":{"797":1}}],["它使用",{"2":{"826":1}}],["它使用标签来定义文档的不同部分",{"2":{"338":1}}],["它添加了完整的动画生命周期管理",{"2":{"825":1}}],["它封装了帧率控制",{"2":{"824":1}}],["它封装了完整的",{"2":{"142":1}}],["它本质上是一场对抗系统熵增的架构实践",{"2":{"971":1}}],["它本质上仍是单向通信",{"2":{"155":1}}],["它本质上仍是",{"2":{"107":1}}],["它本身不实现核心算法",{"2":{"798":1}}],["它管理多维数据",{"2":{"713":1}}],["它自动采集多个中英文优质信息数据源",{"2":{"632":1}}],["它回应了一个根本问题",{"2":{"628":1}}],["它必然无法记录下大量不稳定",{"2":{"614":1}}],["它引导我们完成从",{"2":{"602":1}}],["它教导我们如何拒绝低效的内卷与忙碌",{"2":{"601":1}}],["它教会我们在纷杂的需求和技术选项中",{"2":{"201":1}}],["它有独立的判断空间",{"2":{"592":1}}],["它没有任何",{"2":{"590":1}}],["它没有试图做",{"2":{"54":1}}],["它往往会为自己的代码辩护",{"2":{"590":1}}],["它执行",{"2":{"590":1}}],["它立即执行",{"2":{"585":1}}],["它做的第一件事就是读取",{"2":{"571":1}}],["它正在邀请我们",{"2":{"558":1}}],["它意味着你能利用",{"2":{"555":1}}],["它缺乏对特定代码规范",{"2":{"536":1}}],["它应当已在隔离的沙盒环境中",{"2":{"535":1}}],["它应该能存储任意类型",{"2":{"256":1}}],["它像一根杠杆",{"2":{"528":1}}],["它像是对个体能力边界的一次浪漫想象",{"2":{"457":1}}],["它起于汉族民间歌谣",{"2":{"506":1}}],["它解决了以下核心痛点",{"2":{"478":1}}],["它解决了前端开发中手动处理服务端数据的一系列痛点",{"2":{"91":1}}],["它包含精准的判断力",{"2":{"463":1}}],["它无法被",{"2":{"460":2}}],["它知道向用户或代码库索要什么依赖信息吗",{"2":{"450":1}}],["它分为",{"2":{"439":1}}],["它以文件夹的形式",{"2":{"437":1}}],["它采用渐进式加载机制",{"2":{"436":1}}],["它采用现代",{"2":{"344":2}}],["它随叫随到",{"2":{"435":1}}],["它并不试图创造新的语法",{"2":{"960":1}}],["它并不是在执行死板的脚本",{"2":{"431":1}}],["它并非为特定单一任务",{"2":{"414":1}}],["它并非玄学",{"2":{"363":1}}],["它并非",{"2":{"59":1}}],["它利用最强模型的逻辑能力",{"2":{"429":1}}],["它完美体现了前文提到的",{"2":{"427":1}}],["它完全依赖",{"2":{"964":1}}],["它完全基于标准",{"2":{"131":1}}],["它完全复用现有的",{"2":{"131":1}}],["它决定了",{"2":{"421":1}}],["它决定了我们能否从",{"2":{"358":1}}],["它证明了自主智能体的真正力量不在于模型有多大",{"2":{"419":1}}],["它可以极其方便地读取",{"2":{"959":1}}],["它可以直接接收图片",{"2":{"418":1}}],["它可以帮助开发者应对不断增长的应用复杂度",{"2":{"293":1}}],["它可以帮助开发者发现代码中的问题",{"2":{"219":1}}],["它从不亲自查资料",{"2":{"416":1}}],["它才真正具备了从",{"2":{"410":1}}],["它受限于",{"2":{"410":1}}],["它提醒我们",{"2":{"381":1}}],["它提供了一套精心设计",{"2":{"340":1}}],["它提供了简单",{"2":{"220":1}}],["它为了这个体验",{"2":{"374":1}}],["它极其大胆地",{"2":{"373":1}}],["它极其擅长顺着你给定的逻辑生成答案",{"2":{"358":1}}],["它满足了哪个层级的需求",{"2":{"373":1}}],["它要求系统在长上下文环境下",{"2":{"467":1}}],["它要求我们敏锐地发现那些",{"2":{"365":1}}],["它要求响应头强制设定为",{"2":{"109":1}}],["它似乎是乔布斯式的灵光一现",{"2":{"363":1}}],["它充当了用户的思考辅助工具",{"2":{"350":1}}],["它零配置",{"2":{"345":1}}],["它集成了",{"2":{"344":1}}],["它融合了",{"2":{"344":2}}],["它被设计为",{"2":{"343":1}}],["它摒弃了",{"2":{"343":1}}],["它直接消灭了",{"2":{"342":1}}],["它让我更加确信",{"2":{"495":1}}],["它让我们在追求创新的同时",{"2":{"201":1}}],["它让",{"2":{"491":1,"971":1}}],["它让专业的人做专业的事",{"2":{"457":1}}],["它让前端能像调用本地函数一样调用后端远程函数",{"2":{"342":1}}],["它专注于为",{"2":{"343":1}}],["它专注于处理异步数据的获取",{"2":{"342":1}}],["它专门为",{"2":{"108":1}}],["它基于记忆来决策",{"2":{"412":1}}],["它基于",{"2":{"342":1}}],["它支持拦截请求和响应",{"2":{"342":1}}],["它支持运行时按需加载",{"2":{"313":1}}],["它强调组件化开发",{"2":{"339":1}}],["它强调通过深入理解业务领域",{"2":{"276":1}}],["它在内部构建依赖图",{"2":{"343":1}}],["它在前端开发中得到广泛应用",{"2":{"338":1}}],["它在类型层面保留冲突结果",{"2":{"237":1}}],["它定义了文档的外观",{"2":{"338":1}}],["它定义了模型的边界",{"2":{"281":1}}],["它背后有一套精密的查找优先级逻辑",{"2":{"334":1}}],["它已成为",{"2":{"316":1}}],["它允许用户直接从",{"2":{"345":1}}],["它允许在代码仓库中直接定义自动化流程",{"2":{"343":1}}],["它允许页面在不重载的情况下从服务器获取数据",{"2":{"342":1}}],["它允许开发者利用",{"2":{"959":1}}],["它允许开发者用特殊语法编写样式",{"2":{"958":1}}],["它允许开发者设计简单的视图",{"2":{"339":1}}],["它允许开发者使用",{"2":{"338":1}}],["它允许我们在不修改源代码的情况下",{"2":{"321":1}}],["它允许一个模块暴露多个成员",{"2":{"310":1}}],["它允许多个",{"2":{"288":1}}],["它规定每个文件都是一个独立的模块",{"2":{"304":1}}],["它是实现",{"2":{"969":1}}],["它是实现暗黑模式",{"2":{"966":1}}],["它是有公式可循",{"2":{"383":1}}],["它是如何让你忍不住想分享给别人的",{"2":{"373":1}}],["它是帮你省了时间",{"2":{"373":1}}],["它是否承担了不该属于它的因果",{"2":{"337":1}}],["它是",{"2":{"304":1,"338":2,"971":1}}],["它是一种将",{"2":{"962":1}}],["它是一种提升",{"2":{"426":1}}],["它是一种基于",{"2":{"113":1,"118":1}}],["它是一个包含完整指令说明",{"2":{"441":1}}],["它是一个自包含的工作空间",{"2":{"437":1}}],["它是一个",{"2":{"141":1}}],["它更像是一种对抗软件生命周期中",{"2":{"303":1}}],["它通过",{"2":{"946":1,"1001":1}}],["它通过内置的服务器端渲染",{"2":{"344":1}}],["它通过类型导出导入",{"2":{"317":1}}],["它通过一个立即执行函数",{"2":{"306":1}}],["它通过构建明确的边界",{"2":{"296":1}}],["它通过将复杂系统拆分为多个相互依赖的小模块",{"2":{"296":1}}],["它通过将复杂系统拆分为独立可复用的模块",{"2":{"272":1}}],["它通过将大型前端应用拆分为多个独立的子应用",{"2":{"292":1}}],["它通过对响应机制的巧妙",{"2":{"104":1}}],["它就会呈现出两种截然不同的状态",{"2":{"384":1}}],["它就拥有了无限长的跑道",{"2":{"379":1}}],["它就属于这个交集",{"2":{"236":1}}],["它就绝对不是",{"2":{"173":1}}],["它把",{"2":{"230":1}}],["它与工程力是相加关系",{"2":{"556":1}}],["它与",{"2":{"178":1,"263":1}}],["它将我们在上面三层编写的所有代码",{"2":{"969":1}}],["它将动画属性值分解为四种基本类型",{"2":{"828":1}}],["它将高频使用的方法固化下来",{"2":{"436":1}}],["它将原本",{"2":{"417":1}}],["它将系统分为多个层次",{"2":{"273":1}}],["它将是后续引入状态与副作用时唯一可信的回滚锚点",{"2":{"171":1}}],["它将",{"2":{"170":1,"743":1}}],["它将构建时生成的静态页面从",{"2":{"38":1}}],["它介于纯轮询和持久长连接之间",{"2":{"161":1}}],["它只要看一眼你的",{"2":{"971":1}}],["它只负责按照清单逐一执行",{"2":{"429":1}}],["它只能处理单行",{"2":{"141":1}}],["它只是消灭了",{"2":{"558":1}}],["它只是在",{"2":{"54":1}}],["它只是把",{"2":{"54":1}}],["它负责解析",{"2":{"138":1}}],["它会导致",{"2":{"970":1}}],["它会根据上下文自行判断是否该出手",{"2":{"584":1}}],["它会优先生效",{"2":{"571":1}}],["它会先用大模型理解意图",{"2":{"517":1}}],["它会主动拆解目标并寻找路径",{"2":{"402":1}}],["它会主动向客户端注册的",{"2":{"119":1}}],["它会让原因和结果在时空上错位",{"2":{"388":1}}],["它会渗透到代码设计的方方面面",{"2":{"271":1}}],["它会自动",{"2":{"231":1}}],["它会被传递给",{"2":{"96":1}}],["它不处理块级布局",{"2":{"799":1}}],["它不是官方标准",{"2":{"960":1}}],["它不是一个冷冰冰的解题机",{"2":{"492":1}}],["它不是让我们",{"2":{"201":1}}],["它不会为一个微小的不合理现象而抓狂",{"2":{"362":1}}],["它不会等待内部的异步数据",{"2":{"74":1}}],["它不仅是值得探索的领域",{"2":{"971":1}}],["它不仅是一个",{"2":{"419":1}}],["它不仅是指令的输出者",{"2":{"412":1}}],["它不仅能界定机器智能的边界",{"2":{"598":1}}],["它不仅能",{"2":{"418":1}}],["它不仅提高了任务的完成上限",{"2":{"415":1}}],["它不仅提取相关网页段落",{"2":{"349":1}}],["它不仅仅是一个搜索工具",{"2":{"356":1}}],["它不仅仅是一个简单的搜索工具",{"2":{"417":1}}],["它不仅仅是一个简单的",{"2":{"113":1}}],["它不仅解决了",{"2":{"316":1}}],["它不仅统一了全栈开发的模块标准",{"2":{"307":1}}],["它不仅抹平了命名冲突",{"2":{"303":1}}],["它们构成一条知识加工流水线",{"2":{"631":1}}],["它们教导我们不再做时代的被动旁观者",{"2":{"604":1}}],["它们可以交叉进行",{"2":{"464":1}}],["它们是专攻特定细分任务的",{"2":{"438":1}}],["它们正以不同的进化路径渗透进各种复杂的生产场景",{"2":{"413":1}}],["它们之间存在一个时间差",{"2":{"388":1}}],["它们之间有个时间差",{"2":{"388":1}}],["它们之间是因增强果",{"2":{"385":1}}],["它们模糊了客户端和服务器的界限",{"2":{"344":1}}],["它们的定位已截然不同",{"2":{"320":1}}],["它们会试图",{"2":{"107":1}}],["它们层层递进",{"2":{"60":1}}],["它依然维持着半双工通信的本质",{"2":{"103":1}}],["它构筑了现代",{"2":{"103":1}}],["它内置了极其优雅的",{"2":{"98":1}}],["它进入",{"2":{"92":1}}],["它实际上是向这个",{"2":{"92":1}}],["它能做什么",{"2":{"448":1}}],["它能自动识别出",{"2":{"418":1}}],["它能结合图像细节与文本逻辑",{"2":{"418":1}}],["它能感知环境反馈",{"2":{"417":1}}],["它能跨越不同的文档格式与存储介质",{"2":{"417":1}}],["它能从交互中记住你的个人偏好",{"2":{"414":1}}],["它能像人一样",{"2":{"402":1}}],["它能实时调整策略",{"2":{"402":1}}],["它能处理复杂的开发需求",{"2":{"343":1}}],["它能完美模拟",{"2":{"106":1}}],["它能极大简化数据交互逻辑",{"2":{"91":1}}],["它能让你专注于产品本身",{"2":{"20":1}}],["它适用两类场景",{"2":{"76":1}}],["它的职责不是执行任何业务逻辑",{"2":{"986":1}}],["它的职责是将规划阶段生成的",{"2":{"412":1}}],["它的不足在于缺乏灵活性",{"2":{"423":1}}],["它的终点是",{"2":{"376":1}}],["它的前端可能用了什么技术栈",{"2":{"374":1}}],["它的复杂度会呈指数级上升",{"2":{"327":1}}],["它的核心价值在于将复杂的",{"2":{"478":1}}],["它的核心逻辑是直接将自然任务细化为子任务",{"2":{"425":1}}],["它的核心增长飞轮是什么",{"2":{"373":1}}],["它的核心优势在于将网站构建",{"2":{"345":1}}],["它的核心理念简洁而优雅",{"2":{"294":1}}],["它的核心思想是",{"2":{"85":1,"157":1,"230":1}}],["它的工程化上限更高",{"2":{"99":1}}],["它的工作方式分两步",{"2":{"75":1}}],["它的设计目标是简化数据获取和缓存的过程",{"2":{"85":1}}],["它的设计目标非常明确",{"2":{"48":1}}],["它的",{"2":{"85":1,"470":1}}],["它变成了流式渲染的边界标记",{"2":{"74":1}}],["它代表了一种趋势",{"2":{"43":1}}],["按平台输出不同",{"2":{"979":1}}],["按元素索引计算延迟",{"2":{"819":1}}],["按语言规则将文本切分为",{"2":{"795":1}}],["按功能组合",{"2":{"735":1}}],["按功能属性分类",{"2":{"411":1}}],["按渲染类型创建对应元素",{"2":{"734":1}}],["按场景选择",{"2":{"730":1}}],["按顺序执行",{"2":{"712":1}}],["按优先级排序后调用",{"2":{"826":1}}],["按优先级排序后组成",{"2":{"712":1}}],["按优先级排序后执行",{"2":{"708":1}}],["按优先级排序的",{"2":{"704":1}}],["按路径正则匹配",{"2":{"649":1}}],["按路由周期失效",{"2":{"36":1}}],["按概念",{"2":{"628":1}}],["按照这种方式",{"2":{"1006":1}}],["按照以下步骤执行",{"2":{"581":1}}],["按照固定格式组织",{"2":{"134":1}}],["按关注点命名",{"2":{"578":1}}],["按模型计费",{"2":{"568":1}}],["按量充值",{"2":{"523":1}}],["按量充值使用",{"2":{"523":1}}],["按量",{"2":{"523":1}}],["按量付费",{"2":{"523":1}}],["按量计费",{"2":{"523":1,"568":1}}],["按",{"2":{"523":7,"649":1,"652":1,"706":1,"715":1}}],["按项目符号列表输出",{"2":{"435":1}}],["按实现方式分类",{"2":{"411":1}}],["按钮点击",{"2":{"654":1,"729":1}}],["按钮分类图标",{"2":{"647":1}}],["按钮位置",{"2":{"418":1}}],["按钮背后的数据流向",{"2":{"383":1}}],["按钮",{"2":{"366":1,"677":1,"939":1,"962":1}}],["按下暂停键",{"2":{"360":1}}],["按团队职责划分",{"2":{"291":1}}],["按业务领域划分",{"2":{"291":1}}],["按业务分级",{"2":{"168":1}}],["按限界上下文组织",{"2":{"280":2}}],["按依赖顺序",{"2":{"216":1}}],["按职责拆分小方法",{"2":{"200":1}}],["按客户端分级",{"2":{"168":1}}],["按策略进入等待",{"2":{"159":1}}],["按事件组装",{"2":{"143":2}}],["按行分割",{"2":{"143":2}}],["按行分割数据",{"2":{"141":1}}],["按换行符分割提取完整行",{"2":{"143":1}}],["按换行符分割",{"2":{"141":1}}],["按设备宽度生成多尺寸",{"2":{"72":1}}],["按需编译",{"2":{"962":1}}],["按需消费不同类型的流",{"2":{"903":1}}],["按需导入",{"2":{"841":1}}],["按需字形拆分",{"2":{"792":1}}],["按需引入图表和组件",{"2":{"725":1}}],["按需引入",{"0":{"725":1},"2":{"762":1}}],["按需引入并使用这些功能",{"2":{"295":1}}],["按需调用",{"2":{"547":1}}],["按需调用文件夹内的辅助资源",{"2":{"443":1}}],["按需动态加载这些技能",{"2":{"547":1}}],["按需推理与",{"2":{"523":1}}],["按需读取",{"2":{"443":1}}],["按需加载功能",{"2":{"733":1}}],["按需加载减小体积",{"2":{"731":1}}],["按需加载",{"2":{"442":2,"701":1,"702":1}}],["按需验证的轻量级缓存",{"2":{"342":1}}],["按需验证缓存",{"2":{"342":1}}],["按需声明式查询",{"2":{"342":1}}],["按需声明交互边界",{"0":{"62":1}}],["按需装配能力",{"2":{"248":1}}],["按需依赖",{"0":{"194":1}}],["按需设计",{"0":{"185":1}}],["按需重新验证",{"2":{"85":1}}],["按需生成",{"2":{"47":1}}],["按需失效是",{"2":{"36":1}}],["按需失效",{"2":{"36":1}}],["按需失效机制",{"2":{"34":1}}],["按页面粒度混合不同",{"2":{"39":1}}],["下午拍篮球",{"2":{"1045":1}}],["下午和晚上等时间的分配",{"2":{"1038":1}}],["下午与晚上预留出阅读与学习时间",{"2":{"1036":1}}],["下层解析并渲染为原生",{"2":{"938":1}}],["下载",{"2":{"851":1}}],["下载进度显示",{"2":{"851":1}}],["下载模块入口",{"2":{"851":1}}],["下载功能",{"2":{"851":1}}],["下载步骤测试",{"2":{"851":1}}],["下载执行后才开始接收内容",{"2":{"45":1}}],["下标点后断行",{"2":{"805":1}}],["下保留空格和硬换行",{"2":{"795":1}}],["下将连续的空白折叠为单个空格",{"2":{"795":1}}],["下面是一个",{"2":{"573":1}}],["下面我们分别深入联合类型与交叉类型",{"2":{"227":1}}],["下表从工程实践角度对两者进行了对比总结",{"2":{"432":1}}],["下的文件按需注册渲染器和功能模块",{"2":{"737":1}}],["下的自动化工程",{"0":{"428":1},"1":{"429":1,"430":1,"431":1}}],["下的最佳配置实践",{"2":{"317":1}}],["下",{"2":{"392":1,"394":1,"805":2}}],["下限被拔高了",{"2":{"359":1}}],["下一次见面时",{"2":{"610":1}}],["下一个测试",{"2":{"989":1}}],["下一个",{"2":{"348":1}}],["下一位用户获得最新页面",{"2":{"35":1}}],["下游合并数据",{"2":{"663":1}}],["下游",{"2":{"173":1}}],["下发队列",{"2":{"126":1}}],["下次帧预定时间",{"2":{"824":1}}],["下次遇到需要实时数据推送的场景时",{"2":{"155":1}}],["下次退避时间从",{"2":{"150":1}}],["下次一定触发后台校验",{"2":{"92":1}}],["下次访问时用户获得最新页面",{"2":{"35":1}}],["极限压缩树结构",{"2":{"969":1}}],["极佳",{"2":{"965":1}}],["极佳的调试体验",{"2":{"961":1}}],["极好",{"2":{"965":3}}],["极好的开发调试工具",{"2":{"342":1}}],["极强的动态控制能力",{"2":{"959":1}}],["极坐标系",{"2":{"706":1}}],["极坐标组件",{"2":{"706":1}}],["极坐标",{"2":{"701":1}}],["极度精简的场景",{"2":{"964":1}}],["极度依赖从业者的社会经验和现实感",{"2":{"614":1}}],["极度追求开发效率和产品迭代速度的团队",{"2":{"342":1}}],["极少幻觉",{"2":{"511":1}}],["极少人工干预",{"2":{"403":1}}],["极易产生",{"2":{"493":1}}],["极易沦为应付作业的作弊工具",{"2":{"492":1}}],["极大简化了跨平台动画开发",{"2":{"728":1}}],["极大降低可视化开发门槛",{"2":{"699":1}}],["极大降低了",{"2":{"415":1,"443":1}}],["极大减少样板代码",{"2":{"673":1}}],["极大减少前端开发成本",{"2":{"639":1}}],["极大地降低了代码编写门槛的今天",{"2":{"540":1}}],["极大地误导我们的判断力",{"2":{"388":1}}],["极大地简化了开发和运维的复杂程度",{"2":{"345":1}}],["极大提升复用率和开发速度",{"2":{"971":1}}],["极大提升复杂状态机调试效率",{"2":{"94":1}}],["极大提升了智能体的实用性",{"2":{"441":1}}],["极大提升了研发效率",{"2":{"297":1}}],["极大提升用户体验的杀手锏",{"2":{"88":1}}],["极致压缩",{"2":{"965":1}}],["极致提效",{"2":{"559":1}}],["极致体验",{"2":{"365":1}}],["极致敏感",{"2":{"365":1}}],["极致的",{"2":{"964":1}}],["极致的心智负担",{"2":{"961":1}}],["极致的推理优化",{"2":{"551":1}}],["极致的性能压榨",{"2":{"551":1}}],["极致的性能优化",{"0":{"353":1}}],["极致的并行化效率",{"2":{"415":1}}],["极致的研发效能与结构安全性",{"2":{"342":1}}],["极致的轻量与简单",{"2":{"342":1}}],["极致的运行时优化",{"0":{"318":1}}],["极致性能",{"2":{"46":1}}],["极轻",{"2":{"159":1}}],["极速交付与零膨胀",{"2":{"967":1}}],["极速交付以及需要频繁进行业务重构的",{"2":{"342":1}}],["极速创新试错",{"2":{"965":1}}],["极速迭代",{"2":{"963":1}}],["极速的架构组装能力",{"2":{"540":1}}],["极速推理",{"2":{"523":1}}],["极速",{"2":{"343":1}}],["极速波动的量化交易终端",{"2":{"116":1}}],["极速加载",{"2":{"35":1}}],["极其完美",{"2":{"971":1}}],["极其稳健的企业级防御",{"2":{"965":1}}],["极其优雅的",{"2":{"964":1}}],["极其聪明但缺乏责任感的初级工程师",{"2":{"530":1}}],["极其复杂的跨服务分布式事务",{"2":{"344":2}}],["极其友好",{"2":{"342":1}}],["极其适合那些",{"2":{"111":1}}],["极其强大",{"2":{"98":1}}],["极其耗时的公共计算",{"2":{"76":1}}],["极简的",{"2":{"965":1}}],["极简",{"2":{"963":1}}],["极简流转",{"0":{"378":1}}],["极简杠杆公式",{"0":{"365":1}}],["极简场景",{"2":{"342":1}}],["极简接口",{"2":{"170":1}}],["极简主义创业者瞄准的是前一百个愿意付费的真实客户",{"2":{"379":1}}],["极简主义创业者不会立刻规划一个包罗万象的大型系统",{"2":{"378":1}}],["极简主义创业者绝不是在真空里写代码的人",{"2":{"377":1}}],["极简主义精神继承者",{"2":{"341":1}}],["极简主义",{"2":{"98":1,"342":1}}],["极简单的纯",{"2":{"76":1}}],["极小化",{"2":{"965":1}}],["极小产物",{"2":{"965":1}}],["极小",{"2":{"53":1}}],["极低价",{"2":{"522":2}}],["极低延迟",{"2":{"130":1}}],["极低",{"2":{"45":2,"74":1,"75":1,"98":1,"166":2,"465":1,"522":2,"965":2}}],["极快",{"2":{"45":1}}],["极高",{"2":{"3":2,"391":1,"965":3,"971":1}}],["速度提升",{"2":{"904":1}}],["速度幻觉",{"2":{"526":1}}],["速度是副产品",{"2":{"526":1}}],["速度",{"2":{"63":1}}],["速度与",{"2":{"35":1}}],["速度快",{"2":{"7":1}}],["导数",{"2":{"677":1}}],["导出公共",{"2":{"882":1}}],["导出和零运行时依赖的设计",{"2":{"812":1}}],["导出函数",{"2":{"790":1}}],["导出器",{"2":{"763":1}}],["导出器等扩展功能",{"2":{"762":1}}],["导出的",{"2":{"754":1}}],["导出的值是原始值的实时映射",{"2":{"314":1}}],["导出标准化的",{"2":{"728":1}}],["导出核心共享状态",{"2":{"737":1}}],["导出核心",{"2":{"708":1}}],["导出入口",{"2":{"647":1}}],["导出所有工具函数",{"2":{"819":1}}],["导出所有业务渲染器",{"2":{"647":1}}],["导出所有核心",{"2":{"647":1}}],["导出所有命名成员",{"2":{"312":1}}],["导出成员名",{"2":{"330":1}}],["导出绑定",{"2":{"315":1}}],["导出模块",{"2":{"304":1,"307":1}}],["导出",{"0":{"693":1},"2":{"304":1,"307":1,"647":1,"706":1,"735":1,"819":13,"939":1}}],["导出或",{"2":{"34":1}}],["导入类型",{"2":{"790":1}}],["导入约定",{"2":{"572":1}}],["导入你手头的",{"2":{"515":1}}],["导入默认成员",{"2":{"311":1}}],["导入默认导出",{"2":{"203":1}}],["导入指定成员",{"2":{"310":1}}],["导入方可以按需引入",{"2":{"310":1}}],["导入模块",{"2":{"304":1,"307":1}}],["导入子应用服务",{"2":{"288":1}}],["导入导出修饰符是否可见",{"2":{"203":1}}],["导入",{"2":{"144":1,"304":1,"307":1,"315":1,"677":2,"965":1}}],["导入上述仓库",{"2":{"17":1}}],["导航灯",{"2":{"494":1,"495":1}}],["导航栏",{"2":{"75":1}}],["导航",{"2":{"47":1,"366":1}}],["导致的样式碎片化",{"2":{"967":1}}],["导致的页面闪烁与重复渲染",{"2":{"47":1}}],["导致机会流失",{"2":{"622":1}}],["导致长期投入的决策被取消",{"2":{"617":1}}],["导致进程中途中断",{"2":{"617":1}}],["导致知识结构出现重大缺陷",{"2":{"614":1}}],["导致后续规划逐渐偏离初始目标",{"2":{"425":1}}],["导致后续的任务与规划偏离初始目标",{"2":{"424":1}}],["导致后续生成的代码一致性下降",{"2":{"177":1}}],["导致流失",{"2":{"392":1}}],["导致业绩和研发效率徘徊不前",{"2":{"387":1}}],["导致系统",{"2":{"386":1}}],["导致产品臃肿",{"2":{"366":1}}],["导致层级冗余",{"2":{"189":1}}],["导致代码臃肿",{"2":{"183":1}}],["导致服务器压力倍增",{"2":{"158":1}}],["导致页面其他请求完全阻塞",{"2":{"112":1}}],["导致页面闪烁",{"2":{"47":1}}],["导致",{"2":{"47":1,"85":1,"417":1}}],["这件小事",{"2":{"1034":1}}],["这件事我擅长",{"2":{"585":1}}],["这件事放到了构建阶段",{"2":{"54":1}}],["这本小说",{"2":{"1042":1}}],["这本书和查理芒格这个人给出比当前更深入和细化的答案",{"2":{"1029":1}}],["这本书给出现在的答案",{"2":{"1029":1}}],["这本书",{"2":{"1027":1,"1032":1}}],["这本身就是对",{"2":{"48":1}}],["这跟大语言模型的思路很像",{"2":{"1017":1}}],["这家公司名声大噪且",{"2":{"1005":1}}],["这三者也是目前顶级",{"2":{"964":1}}],["这三个层级并非割裂",{"2":{"459":1}}],["这两个函数内部协调",{"2":{"792":1}}],["这容易让人产生一种幻觉",{"2":{"612":1}}],["这段逻辑是合理的",{"2":{"590":1}}],["这让",{"2":{"557":1}}],["这属于",{"2":{"551":1}}],["这或许是传统前端",{"2":{"540":1}}],["这要求我们必须保持对新技术的",{"2":{"533":1}}],["这",{"2":{"526":1}}],["这份报告揭示了一组迷人且令人警醒的数据",{"2":{"525":1}}],["这样简单地把一天时间分为线段的作息日程表",{"2":{"1036":1}}],["这样的作品",{"2":{"1042":1}}],["这样的",{"2":{"971":1}}],["这样吸收进来的知识不再是无意义的堆积物",{"2":{"609":1}}],["这样一个渐进式的能力建设",{"2":{"597":1}}],["这样你只需关注",{"2":{"583":1}}],["这样具备自主能力的",{"2":{"525":1}}],["这样换模型",{"2":{"523":1}}],["这样真正通用的数据结构",{"2":{"256":1}}],["这次获奖是一次非常棒的验证",{"2":{"495":1}}],["这并非偶然",{"2":{"493":1}}],["这并不意味着你必须成为资深工程师",{"2":{"461":1}}],["这其实是很多孩子的",{"2":{"494":1}}],["这其实是一个典型的多阶段任务",{"2":{"468":1}}],["这其实与全栈工程师们追求的代码高可用性与系统稳定性",{"2":{"379":1}}],["这会彻底干掉",{"2":{"970":1}}],["这会因为缺乏判断力和手感而很难走远",{"2":{"464":1}}],["这会带来约",{"2":{"112":1}}],["这套单为我们开启了两扇窗",{"2":{"604":1}}],["这套书单为我们构建了一个从底层思维到人生经营的闭环",{"2":{"603":1}}],["这套书单为我们提供了一套从个人认知到组织协作的",{"2":{"602":1}}],["这套书单为我们揭示了一种更具韧性的商业路径",{"2":{"601":1}}],["这套书单从数学思维的底层逻辑出发",{"2":{"598":1}}],["这套语义标准如同工程契约",{"2":{"532":1}}],["这套流程在过去几十年被证明是高效的",{"2":{"457":1}}],["这套标准已被多个",{"2":{"442":1}}],["这套方案并非银弹",{"2":{"155":1}}],["这极大节省了上下文空间",{"2":{"430":1}}],["这表现为模型对当前",{"2":{"410":1}}],["这便是帕累托最优",{"2":{"394":1}}],["这几乎成了都市传说",{"2":{"392":1}}],["这时间差就是",{"2":{"388":1}}],["这时可以使用",{"2":{"263":1}}],["这才是最宝贵的时刻",{"2":{"369":1}}],["这篇万字长文",{"2":{"362":1}}],["这篇两万字的长文",{"2":{"357":1}}],["这里不是要展开争论",{"2":{"1039":1}}],["这里所谓的",{"2":{"1039":1}}],["这里直接贴出",{"2":{"1038":1}}],["这里再做一个大胆又狂妄地的论断",{"2":{"1030":1}}],["这里只留下笔者事后深刻反思的几个心得",{"2":{"1022":1}}],["这里引用了",{"2":{"962":1}}],["这里的",{"2":{"960":1,"1002":1,"1016":1}}],["这里的讲述不是单方面的课堂宣讲",{"2":{"610":1}}],["这里的核心",{"2":{"458":1}}],["这里的核心难点在于数据预取",{"2":{"57":1}}],["这里我们传入一个字符串",{"2":{"483":1}}],["这里是乘法关系而不是加法",{"2":{"366":1}}],["这里还有缺陷",{"2":{"360":1}}],["这也关系到疫情后要不要继续实践混合工作制",{"2":{"1041":1}}],["这也引出了一些好的学习方法论",{"2":{"1017":1}}],["这也带来了洞察力新的定义",{"2":{"383":1}}],["这也意味着如果只依赖",{"2":{"360":1}}],["这也是为什么世界上会有15岁的黑客",{"2":{"614":1}}],["这也是为什么许多现代项目",{"2":{"112":1}}],["这也是智能化博客运营过程中需要考虑的一个重要方面",{"2":{"476":1}}],["这也是一种资产特定性权衡",{"2":{"400":1}}],["这也是",{"2":{"61":1}}],["这也是本文要讨论的核心问题",{"2":{"21":1}}],["这就要求工程师深谙长期记忆",{"2":{"546":1}}],["这就要求具备极强的系统架构思维和对业务逻辑的深度拆解能力",{"2":{"532":1}}],["这就要求复合型人才必须具备极度的",{"2":{"360":1}}],["这就像飞行员必须定期进行手动起降练习一样",{"2":{"531":1}}],["这就已经是一次足够伟大的商业实践",{"2":{"381":1}}],["这就意味着",{"2":{"379":1}}],["这就是人性",{"2":{"1020":1}}],["这就是复利效应的来源",{"2":{"463":1}}],["这就是产品的比较优势",{"2":{"396":1}}],["这就是批判性思维带来的洞察",{"2":{"366":1}}],["这就是编译时的穷尽性检查",{"2":{"232":1}}],["这就使得",{"2":{"359":1}}],["这带来了两个极端的现象",{"2":{"359":1}}],["这座桥梁将自然语言需求转化为",{"2":{"536":1}}],["这座",{"2":{"358":1}}],["这句话被赋予了史无前例的现实意义",{"2":{"358":1}}],["这条调节回路",{"2":{"387":1}}],["这条演进之路的背后",{"2":{"303":1}}],["这条学习路径",{"2":{"271":1}}],["这条路上走到了极致",{"2":{"54":1}}],["这类外部归因",{"2":{"626":1}}],["这类沟通往往直击本质",{"2":{"625":1}}],["这类工具的本质是将",{"2":{"514":1}}],["这类依赖历史背景的问题",{"2":{"486":1}}],["这类系统通过任务分解",{"2":{"467":1}}],["这类函数需要处理各种不同的数据类型",{"2":{"256":1}}],["这类库在",{"2":{"131":1,"135":1}}],["这实现了零运行时成本的类型安全",{"2":{"247":1}}],["这不再是简单的信息检索",{"2":{"536":1}}],["这不只是技术层面的挑战",{"2":{"534":1}}],["这不仅能够确保设计的一致性",{"2":{"966":1}}],["这不仅带来了极度内卷的竞争",{"2":{"620":1}}],["这不仅仅是技能的组合",{"2":{"554":1}}],["这不仅仅是解答",{"2":{"494":1}}],["这不仅仅是写出一句完美的",{"2":{"367":1}}],["这不仅大幅提升了人机协作的效率",{"2":{"434":1}}],["这不仅是一个趣味实验",{"2":{"496":1}}],["这不仅是一份跨越领域的",{"2":{"357":1}}],["这不仅是技能的堆砌",{"2":{"464":1}}],["这不仅是机器能力的倍增",{"2":{"440":1}}],["这不仅是其利润来源",{"2":{"354":1}}],["这不仅是文件后缀的改变",{"2":{"333":1}}],["这不仅是语义上的清晰",{"2":{"318":1}}],["这不仅是对代码的要求",{"2":{"201":1}}],["这不仅浪费了服务器带宽",{"2":{"158":1}}],["这不是",{"2":{"188":1}}],["这与接口继承的行为不同",{"2":{"237":1}}],["这与直觉一致",{"2":{"233":1}}],["这与",{"2":{"179":1,"314":1}}],["这既能启发思路",{"2":{"170":1}}],["这需要一套复杂的重传与会话恢复机制",{"2":{"127":1}}],["这无疑增加了工程实现的复杂度",{"2":{"117":1}}],["这赋予了它许多开箱即用的高级特性",{"2":{"110":1}}],["这告诉客户端",{"2":{"105":1}}],["这五种主流技术",{"2":{"102":1}}],["这在一定程度上也表明了",{"2":{"1041":1}}],["这在一定程度上可以提升个人工作效率",{"2":{"1040":1}}],["这在信息爆炸的时代是得不偿失的",{"2":{"613":1}}],["这在模块化开发中常用于元数据注入",{"2":{"324":1}}],["这在语义上形成了一种",{"2":{"170":1}}],["这在复杂中后台应用中是杀手级功能",{"2":{"98":1}}],["这在处理依赖请求时非常有用",{"2":{"87":1}}],["这比在组件内使用",{"2":{"95":1}}],["这使得模型配置可集中管理",{"2":{"919":1}}],["这使得",{"2":{"92":1,"307":1}}],["这四者共同构成",{"2":{"73":1}}],["这对于快速定位关键信息",{"2":{"613":1}}],["这对于开发跨端的",{"2":{"548":1}}],["这对于大型项目尤为重要",{"2":{"255":1}}],["这对于实时",{"2":{"107":1}}],["这对",{"2":{"69":1}}],["这一次比较幸运",{"2":{"1046":1}}],["这一阶段",{"2":{"1047":1}}],["这一阶段积累了一些碎片化的健康意识",{"2":{"1024":1}}],["这一阶段的核心是明确",{"2":{"177":1}}],["这一核心能力的深度复盘",{"2":{"1002":1}}],["这一核心护城河",{"2":{"1001":1}}],["这一特性使得规则可以做到",{"2":{"576":1}}],["这一狭窄定义中",{"2":{"552":1}}],["这一层就是修路和提炼石油的",{"2":{"551":1}}],["这一层是整个工程提效的核心发动机",{"2":{"967":1}}],["这一层是",{"2":{"551":1}}],["这一层负责为",{"2":{"544":1}}],["这一闭环",{"2":{"540":1}}],["这一职业的底层逻辑",{"2":{"525":1}}],["这一功能将",{"2":{"441":1}}],["这一模式的精髓在于引入了重规划",{"2":{"431":1}}],["这一设计使得",{"2":{"419":1}}],["这一案例启示",{"2":{"391":1}}],["这一点显得尤为契合时宜",{"2":{"378":1}}],["这一逻辑尤为深刻",{"2":{"377":1}}],["这一秒",{"2":{"372":1}}],["这一无效耗时环节",{"2":{"342":1}}],["这一原则由",{"2":{"181":1}}],["这一命题的持续作答",{"2":{"303":1}}],["这一命题",{"2":{"180":1}}],["这一步是",{"2":{"429":1}}],["这一步是可选的",{"2":{"254":1}}],["这一步是后续全自动化与半自动化并行模式的基础",{"2":{"171":1}}],["这一步的工程价值不可估量",{"2":{"171":1}}],["这一软件工程经典原则的具象化落地",{"2":{"170":1}}],["这一比例依然坚如磐石",{"2":{"169":1}}],["这一限制已基本消除",{"2":{"112":1}}],["这一限制显得非常局促",{"2":{"112":1}}],["这一转变带来了三重收益",{"2":{"60":1}}],["这一判断的底层逻辑",{"2":{"55":1}}],["这背后体现了一种架构哲学的转变",{"2":{"59":1}}],["这些进步不局限于减肥这件小事上",{"2":{"1047":1}}],["这些年也在用实践推动着",{"2":{"1018":1}}],["这些正弦波前面的系数大部分为零",{"2":{"1015":1}}],["这些正是",{"2":{"462":1}}],["这些知识在大学阶段虽然也学过",{"2":{"1011":1}}],["这些规律将会失效",{"2":{"1007":1}}],["这些经历锻炼了我对系统复杂度的掌控力",{"2":{"1000":1}}],["这些经验能帮助我们写出更清晰",{"2":{"263":1}}],["这些工具通过",{"2":{"927":1}}],["这些工程问题",{"2":{"59":1}}],["这些著作不仅是知识的传递",{"2":{"604":1}}],["这些智者教导我们如何利用杠杆",{"2":{"603":1}}],["这些世界级案例证明了",{"2":{"601":1}}],["这些中间过程不会污染主会话",{"2":{"590":1}}],["这些决定了系统的上限",{"2":{"555":1}}],["这些",{"2":{"495":1,"527":1}}],["这些就是解题的",{"2":{"494":1}}],["这些图表并非简单的占位符",{"2":{"475":1}}],["这些场景的共同特点是",{"2":{"465":1}}],["这些修改建议可以是细节上的调整",{"2":{"426":1}}],["这些子智能体像是一群专注的专家",{"2":{"415":1}}],["这些都需要在",{"2":{"509":1}}],["这些都是构成手表的",{"2":{"383":1}}],["这些都会增加理解成本和bug风险",{"2":{"186":1}}],["这些曾经被视为专业技能的",{"2":{"357":1}}],["这些原则本质上都在做同一件事",{"2":{"332":1}}],["这些设计原则并非",{"2":{"180":1}}],["这些可通过计算得出的数据被称为",{"2":{"173":1}}],["这些重复的头部数据往往比有效载荷还要大",{"2":{"103":1}}],["这些问题的答案已被写进框架",{"2":{"59":1}}],["这些交互完全由客户端",{"2":{"54":1}}],["这意味着跳出技术自嗨",{"2":{"1001":1}}],["这意味着你告诉",{"2":{"571":1}}],["这意味着工程团队的核心能力要从",{"2":{"538":1}}],["这意味着什么",{"2":{"528":1}}],["这意味着我们可以让",{"2":{"493":1}}],["这意味着我们可以在复杂类型表达式中自由地重新排列组合顺序",{"2":{"243":1}}],["这意味着同一进程内多次引入同一文件",{"2":{"334":1}}],["这意味着如果你在浏览器中多开了几个监控标签页",{"2":{"112":1}}],["这意味着对象键值的顺序不影响缓存的命中",{"2":{"92":1}}],["这意味着浏览器不需要下载组件的",{"2":{"61":1}}],["这意味着",{"2":{"54":1,"70":1,"358":1,"361":1,"366":2}}],["这个时候也想过在健身房报个班",{"2":{"1046":1}}],["这个阶段更注重强化减肥这件小事的目标合理性",{"2":{"1046":1}}],["这个雷打不动的项目引入",{"2":{"1045":1}}],["这个方向实践下去",{"2":{"1032":1}}],["这个话题在疫情到来后被大家熟知",{"2":{"1020":1}}],["这个话题虽被大家熟知",{"2":{"1020":1}}],["这个世界是稀疏的",{"0":{"1015":1}}],["这个黑盒子也就是系统",{"2":{"1007":1}}],["这个项目的性质是什么",{"2":{"965":1}}],["这个公式告诉我们",{"2":{"554":1}}],["这个定义显得过时且狭隘",{"2":{"553":1}}],["这个流程是否多余",{"2":{"460":1}}],["这个概念时",{"2":{"457":1}}],["这个代价在商业上划算吗",{"2":{"374":1}}],["这个报错提示说",{"2":{"370":1}}],["这个问题痛不痛",{"2":{"365":1}}],["这个问题能否抽象成一个通用方案",{"2":{"271":1}}],["这个模块的边界清晰吗",{"2":{"337":1}}],["这个模块负责处理图片压缩",{"2":{"329":1}}],["这个模式之所以叫",{"2":{"230":1}}],["这个文件会迅速膨胀到数千行",{"2":{"327":1}}],["这个函数可能抛出什么",{"2":{"246":1}}],["这个无穷集合",{"2":{"227":1}}],["这个看似简单的隐喻",{"2":{"227":1}}],["这个",{"2":{"53":1,"227":1,"387":1,"491":1,"567":1,"590":1}}],["这个过程无需任何服务端参与",{"2":{"50":1}}],["这是不是类似刚入职的员工操着",{"2":{"1041":1}}],["这是笔者所在行业的惯用套路",{"2":{"1026":1}}],["这是笔者第一次在文章中大篇幅尝试引入数学相关的知识",{"2":{"1018":1}}],["这是唯一在",{"2":{"986":1}}],["这是整个",{"2":{"985":1}}],["这是整个样式架构",{"2":{"969":1}}],["这是新手转型",{"2":{"970":1}}],["这是心智负担最低的方案",{"2":{"968":1}}],["这是典型的适配器使用流程",{"2":{"863":1}}],["这是典型的",{"2":{"711":1}}],["这是知识从",{"2":{"628":1}}],["这是你不能交给",{"2":{"462":1}}],["这是编写",{"2":{"448":1}}],["这是闭环中最关键的一步",{"2":{"427":1}}],["这是思考环节",{"2":{"427":1}}],["这是多智能体最强悍的地方",{"2":{"415":1}}],["这是通用",{"2":{"414":1}}],["这是获取准确决策信息的前提",{"2":{"400":1}}],["这是最典型的使用场景",{"2":{"746":1}}],["这是最致命的一点",{"2":{"612":1}}],["这是最简单的交互模式",{"2":{"483":1}}],["这是最基础的阶段",{"2":{"410":1}}],["这是最关键",{"2":{"375":1}}],["这是最硬核的训练法",{"2":{"369":1}}],["这是最常见的坑",{"2":{"107":1}}],["这是其迈向",{"2":{"355":1}}],["这是衡量模块质量的终极金标准",{"2":{"328":1}}],["这是首选方案",{"2":{"315":1}}],["这是泛型的一个重要特性",{"2":{"254":1}}],["这是联合与交叉协作的典型场景",{"2":{"249":1}}],["这是联合与交叉最优雅的数学关系",{"2":{"242":1}}],["这是一种与传统",{"2":{"962":1}}],["这是一种元编程方法",{"2":{"946":1}}],["这是一种预防机制",{"2":{"593":1}}],["这是一种全新的开发范式",{"2":{"542":1}}],["这是一种更纯粹的模式",{"2":{"425":1}}],["这是一种在类型层面区分语义不同但结构相同的数据的技巧",{"2":{"247":1}}],["这是一个完整的",{"2":{"949":1}}],["这是一个零依赖的轻量级库",{"2":{"885":1}}],["这是一个极其危险的谬论",{"2":{"621":1}}],["这是一个什么项目",{"2":{"573":1}}],["这是一个正在爆发的新兴领域",{"2":{"544":1}}],["这是一个高频刚需",{"2":{"365":1}}],["这是一个容易被误解的特性",{"2":{"238":1}}],["这是一个容易被忽略但非常重要的细节",{"2":{"233":1}}],["这是函数式编程中",{"2":{"246":1}}],["这是元素为联合类型的数组",{"2":{"234":1}}],["这是因为",{"2":{"229":1}}],["这是实现复杂动画编排的核心机制",{"2":{"831":1}}],["这是实现路由懒加载和代码分割",{"2":{"313":1}}],["这是实现可辨识联合的关键",{"2":{"230":1}}],["这是实现",{"2":{"227":1}}],["这是实现配置复用的核心机制",{"2":{"209":1}}],["这是人类决策的关键环节",{"2":{"177":1}}],["这是解决组件树过深的最强武器",{"2":{"170":1}}],["这是目前的最优解",{"2":{"964":1}}],["这是目前",{"2":{"131":1}}],["这是当前最火热的应用",{"2":{"106":1}}],["这是展现",{"2":{"96":1}}],["这是状态同步的典范",{"2":{"92":1}}],["这是对过去十年",{"2":{"59":1}}],["这是判断",{"2":{"54":1}}],["这是现代前端框架最强大的设计哲学之一",{"2":{"54":1}}],["这是",{"2":{"53":1,"67":1,"88":1,"200":2,"230":1,"234":1,"281":1,"410":1,"774":1,"801":1,"830":1,"987":1}}],["这种特质在经济下行的大环境下可能更值得学习",{"2":{"1042":1}}],["这种习惯和爱好背后的本质原因和动力又是什么呢",{"2":{"1029":1}}],["这种视觉噪音极大的代码",{"2":{"970":1}}],["这种高度内聚在",{"2":{"967":1}}],["这种高度的封装性从物理层面隔绝了",{"2":{"179":1}}],["这种分离允许多个后端共享同一套渲染逻辑",{"2":{"768":1}}],["这种分工",{"2":{"180":1}}],["这种分工让开发者从繁琐的编码劳动中解放出来",{"2":{"176":1}}],["这种不够客观的环境",{"2":{"618":1}}],["这种低维度的信息差正在被迅速抹平",{"2":{"616":1}}],["这种对物理形态的偏好可以理解",{"2":{"613":1}}],["这种着急就会演变成气急败坏",{"2":{"612":1}}],["这种基于经验的",{"2":{"533":1}}],["这种转变催生了一个深刻的监督悖论",{"2":{"531":1}}],["这种转变带来了一种极其诱人的",{"2":{"530":1}}],["这种转变标志着真正的",{"2":{"491":1}}],["这种阶段化的专业分工",{"2":{"468":1}}],["这种机制比挂载庞大的全局上下文更轻量",{"2":{"443":1}}],["这种机制有效地对抗了",{"2":{"431":1}}],["这种机制彻底改变了传统",{"2":{"85":1}}],["这种能力的自然延伸并非意味着人人都成为通才",{"2":{"529":1}}],["这种能力无法通过算法习得",{"2":{"359":1}}],["这种能",{"2":{"418":1}}],["这种指令隔离避免了在同一个提示词",{"2":{"415":1}}],["这种将错就错的思维模式",{"2":{"393":1}}],["这种公开构建的模式",{"2":{"380":1}}],["这种自信",{"2":{"379":1}}],["这种极度的克制不仅带来了极低的试错成本",{"2":{"378":1}}],["这种反其道而行之的勇气",{"2":{"350":1}}],["这种组合完美契合了",{"2":{"342":1}}],["这种设计避免了为每个平台维护单独的引导脚本",{"2":{"985":1}}],["这种设计能有效防止",{"2":{"470":1}}],["这种设计允许执行器内部进行自循环",{"2":{"429":1}}],["这种设计降低了知识工作者二次核查信息的成本",{"2":{"349":1}}],["这种设计的精髓在于",{"2":{"336":1}}],["这种设计彻底解耦了",{"2":{"92":1}}],["这种增强不仅限于前端",{"2":{"326":1}}],["这种跨模块的类型推导提供了极佳的代码提示体验",{"2":{"319":1}}],["这种标准化都是构建大规模复杂系统应用的基础",{"2":{"316":1}}],["这种架构模式特别适合大型团队协作和复杂业务场景",{"2":{"284":1}}],["这种架构天然具备了极高的并发承载能力和极低的",{"2":{"52":1}}],["这种思维方式的价值远超泛型本身",{"2":{"271":1}}],["这种思考方式与面向对象设计模式中的",{"2":{"255":1}}],["这种约束常用于处理继承体系",{"2":{"269":1}}],["这种约束常用于安全的对象属性访问器",{"2":{"268":1}}],["这种约束适用于需要泛型参数具备多种能力的场景",{"2":{"267":1}}],["这种约束特别适合用于处理各种数据结构",{"2":{"266":1}}],["这种约束确保了在泛型函数内部可以安全地使用该类型的内置方法和属性",{"2":{"265":1}}],["这种约定使得数据获取的",{"2":{"85":1}}],["这种检查发生在编译阶段",{"2":{"254":1}}],["这种关系叫做",{"2":{"242":1}}],["这种粒度既能保证开发效率",{"2":{"177":1}}],["这种单向流动牺牲了双向绑定的",{"2":{"175":1}}],["这种策略能确保组件职责清晰",{"2":{"171":1}}],["这种策略能在保证及时获取结果的同时",{"2":{"128":1}}],["这种方式在国内还不会被大范围运用",{"2":{"1039":1}}],["这种方式解耦了",{"2":{"131":1}}],["这种方式虽能满足大多数场景",{"2":{"102":1}}],["这种双向并发通信机制彻底摆脱了",{"2":{"115":1}}],["这种在传统",{"2":{"113":1}}],["这种协议级的约定",{"2":{"109":1}}],["这种",{"2":{"106":1,"135":1,"171":1,"175":1,"372":1,"417":1,"419":1,"427":1,"475":1,"476":1}}],["这种模式虽然简单",{"2":{"425":1}}],["这种模式类似于",{"2":{"423":1,"424":1}}],["这种模式被称为",{"2":{"312":1}}],["这种模式在设计",{"2":{"249":1}}],["这种模式让我们能够像搭积木一样",{"2":{"248":1}}],["这种模式让我们在类型层面就能区分操作的成功与失败",{"2":{"246":1}}],["这种模式天然适合服务间的松耦合集成",{"2":{"131":1}}],["这种模式完美契合了绝大多数非即时性的资源获取场景",{"2":{"103":1}}],["这种模式兼具",{"2":{"34":1}}],["这正是经济学中双头垄断",{"2":{"392":1}}],["这正是我们作为人类最后的底牌",{"2":{"362":1}}],["这正是奥卡姆剃刀原则在技术领域的深远意义",{"2":{"201":1}}],["这正是奥卡姆剃刀在",{"2":{"199":1}}],["这正是声明式编程与规范驱动开发在哲学层面的深度契合",{"2":{"179":1}}],["这正是",{"2":{"51":1,"59":1,"131":1,"176":1,"236":1,"439":1}}],["后随笔",{"2":{"1032":1}}],["后敲字有聊",{"2":{"1032":1}}],["后来健身房也就成了几个已经找到工作的懒人的澡堂子啦",{"2":{"1046":1}}],["后来在日本传授质量控制",{"2":{"1027":1}}],["后来随着工作和生活阅历的增加",{"2":{"1026":1}}],["后来也在不少场合以经历回顾的方式传授给很多年轻人",{"2":{"1013":1}}],["后来笔者也观察到身边大部分人也是没能将这些理论应用到实际工作中",{"2":{"1011":1}}],["后来",{"2":{"1008":1}}],["后处理pass",{"2":{"763":1}}],["后处理用",{"2":{"763":1}}],["后处理框架",{"2":{"763":1}}],["后处理",{"2":{"762":1,"969":1}}],["后处理效果等",{"2":{"761":1}}],["后处理效果",{"2":{"758":1}}],["后处理等完整",{"2":{"757":1}}],["后将自身注册到全局动画列表",{"2":{"686":1}}],["后置处理",{"2":{"685":1}}],["后执行额外逻辑",{"2":{"685":1}}],["后缀",{"2":{"960":2}}],["后缀区分团队共享与个人私有配置",{"2":{"570":1}}],["后缀决定论",{"2":{"333":1}}],["后训练",{"2":{"551":2}}],["后工业时代",{"2":{"539":1}}],["后期阶段",{"2":{"387":1}}],["后会被完全抹除",{"2":{"318":1}}],["后序遍历",{"2":{"314":1}}],["后被",{"2":{"244":1}}],["后的代码",{"2":{"203":1}}],["后者仅停留在",{"2":{"622":1}}],["后者在复杂项目中能显著提升代码可读性",{"2":{"263":1}}],["后者统一代码风格",{"2":{"226":1}}],["后者牺牲了安全性",{"2":{"181":1}}],["后者多了两个无证据的",{"2":{"181":1}}],["后重试",{"2":{"160":1}}],["后又收到",{"2":{"148":1}}],["后面的",{"2":{"892":1}}],["后面的内容",{"2":{"141":1}}],["后面还有数据",{"2":{"141":1}}],["后",{"2":{"58":1,"123":1,"414":1,"432":1,"525":1,"610":1,"1006":1}}],["后台页面重复开发",{"2":{"639":1}}],["后台定时刷新",{"2":{"63":1}}],["后台管理系统强行套用",{"2":{"55":1}}],["后台系统",{"2":{"46":1}}],["后台静默重新渲染",{"2":{"35":1}}],["后台静默重新生成新版本",{"2":{"35":1}}],["后台触发",{"2":{"35":1}}],["后续的解析",{"2":{"915":1}}],["后续的",{"2":{"304":1,"792":1}}],["后续维护者能够快速理解数据的结构和流向",{"2":{"255":1}}],["后续通信采用",{"2":{"114":1}}],["后续增量更新",{"2":{"45":1}}],["后续按周期或按需更新",{"2":{"45":1}}],["后续用户在",{"2":{"35":1}}],["后续请求直接复用缓存",{"2":{"34":1}}],["后端调用",{"2":{"923":1}}],["后端初始化",{"2":{"777":1}}],["后端的完整渲染管线流程",{"2":{"774":1}}],["后端的类型变更会即刻反映为前端编译期的静态类型检查报错",{"2":{"342":1}}],["后端抽象接口",{"2":{"763":1}}],["后端实现层",{"2":{"761":1,"762":1}}],["后端工程师可以写出像素级完美的前端",{"2":{"557":1}}],["后端工程师借助",{"2":{"529":1}}],["后端接口",{"2":{"553":1}}],["后端核心数据流",{"2":{"542":1}}],["后端开发者",{"2":{"639":1}}],["后端开发者转型最顺滑",{"2":{"540":1}}],["后端开发成本极高",{"2":{"342":1}}],["后端是如何处理高并发的",{"2":{"374":1}}],["后端主导的中大型团队",{"2":{"344":1}}],["后端使用",{"2":{"342":1}}],["后端需要同时服务于",{"2":{"342":1}}],["后端架构",{"2":{"408":1}}],["后端架构守望者",{"2":{"337":1}}],["后端架构的天然要求",{"0":{"126":1}}],["后端模块化分层架构",{"0":{"275":1}}],["后端项目使用",{"2":{"215":1}}],["后端项目",{"0":{"215":1},"2":{"211":1,"280":1}}],["后端处理失败",{"2":{"164":1}}],["后端任务处理失败",{"2":{"160":1}}],["后端",{"2":{"126":1,"280":1,"376":1,"562":1,"573":1,"673":1,"677":2,"763":3,"771":3,"923":1,"963":1}}],["后端能力补充",{"0":{"8":1}}],["后端渲染",{"2":{"3":1}}],["而笔者个人觉得自己从",{"2":{"1049":1}}],["而疫情到来后我们更加主动拥抱",{"2":{"1041":1}}],["而选择的类似应试教育的方式",{"2":{"1030":1}}],["而德智皆寄于体",{"2":{"1025":1,"1043":1}}],["而终其天年",{"2":{"1025":1}}],["而调节回路",{"2":{"1009":1}}],["而更关注能构建出怎样的建筑",{"2":{"1001":1}}],["而滥用",{"2":{"967":1}}],["而纯",{"2":{"965":1}}],["而愿意接纳新媒介的阅读者",{"2":{"613":1}}],["而具体的规范则分散到对应的规则文件中",{"2":{"575":1}}],["而具体的实现细节",{"2":{"179":1}}],["而要关注你能构建出怎样的建筑",{"2":{"554":1}}],["而来自",{"2":{"535":1}}],["而需要动态地观察",{"2":{"534":1}}],["而工程交付要求的却是确定性的",{"2":{"534":1}}],["而工具赋予了",{"2":{"411":1}}],["而被忽视的任务",{"2":{"528":1}}],["而到达创造者阶段",{"2":{"459":1}}],["而创造者也在精密的分工缝隙中",{"2":{"457":1}}],["而这一切的前提是得有个健硕的身体",{"2":{"1043":1}}],["而这一能力最直接",{"2":{"441":1}}],["而这种能力恰恰源于那些正在被",{"2":{"531":1}}],["而这几百个零件是如何互相咬合",{"2":{"383":1}}],["而有些允许三个",{"2":{"400":1}}],["而牛奶需要低温储存",{"2":{"391":1}}],["而可乐却多装在圆瓶子里卖",{"2":{"391":1}}],["而经济学能帮我们拨开迷雾",{"2":{"390":1}}],["而90",{"2":{"383":1}}],["而应深挖特定圈层里的真实痛点",{"2":{"377":1}}],["而应是你的",{"2":{"337":1}}],["而本书提出了一个颠覆性的反向路径",{"2":{"377":1}}],["而那个皱眉的瞬间",{"2":{"376":1}}],["而真人的反馈则能补充",{"2":{"375":1}}],["而真正杰出的成就往往始于敏锐地注意到了知识边缘的",{"2":{"358":1}}],["而且国外的自由职业者是比国内多出很多的",{"2":{"1039":1}}],["而且在闲暇的时候觉得自己在阅读方面不够系统化",{"2":{"1031":1}}],["而且具备极强的说服力",{"2":{"475":1}}],["而且足够",{"2":{"359":1}}],["而且也导向更多的问题",{"2":{"358":1}}],["而言",{"2":{"354":1,"421":1}}],["而设计不当则可能成为负担",{"2":{"444":1}}],["而设计糟糕的",{"2":{"444":1}}],["而设计",{"2":{"344":1}}],["而默认导出在导入处重命名后容易脱离追踪",{"2":{"311":1}}],["而无需深入理解底层的分布式系统和计算架构",{"2":{"551":1}}],["而无需频繁发布",{"2":{"335":1}}],["而无需关心它们内部是如何实现的",{"2":{"295":1}}],["而无需改动接口定义本身",{"2":{"255":1}}],["而无需开发者手动处理流的切片逻辑",{"2":{"109":1}}],["而泛型",{"2":{"255":1}}],["而泛型在编译阶段就能捕获类型不匹配的问题",{"2":{"255":1}}],["而泛型让我们编写一套代码",{"2":{"255":1}}],["而一个模糊的需求描述",{"2":{"180":1}}],["而不惜牺牲信息流转和获取的效率",{"2":{"613":1}}],["而不必每次重复交代",{"2":{"583":1}}],["而不去有意识地重构自身的职业能力",{"2":{"530":1}}],["而不需要从头开始整个推理链条",{"2":{"430":1}}],["而不需要关心具体文件结构",{"2":{"312":1}}],["而不需要依赖运行时异常",{"2":{"246":1}}],["而不需要重新执行代码逻辑",{"2":{"76":1}}],["而不影响最终结果",{"2":{"243":1}}],["而不是把自己变成一个工具或发条去卷",{"2":{"1006":1}}],["而不是抽离",{"2":{"970":1}}],["而不是一团哈希乱码",{"2":{"961":1}}],["而不是为了把玩那一束装订起来的纸张",{"2":{"613":1}}],["而不是做学问的路径",{"2":{"608":1}}],["而不是模糊的",{"2":{"583":1}}],["而不是手动维护这些工具",{"2":{"527":1}}],["而不是预加载所有工具定义",{"2":{"439":1}}],["而不是写死在某个",{"2":{"438":1}}],["而不是只盯着存量结果干着急",{"2":{"384":1}}],["而不是虚无缥缈的广告创意上",{"2":{"379":1}}],["而不是成千上万个只索取不贡献的",{"2":{"379":1}}],["而不是胡乱幻觉",{"2":{"367":1}}],["而不是优化搜索算法",{"2":{"366":1}}],["而不是训练更快的马",{"2":{"366":1}}],["而不是避而不见",{"2":{"360":1}}],["而不是任由模型编造",{"2":{"352":1}}],["而不是直接导入",{"2":{"315":1}}],["而不是运行时",{"2":{"254":1}}],["而不是静默产生",{"2":{"237":1}}],["而不是将其塞入",{"2":{"173":1}}],["而此时客户端刚进入",{"2":{"160":1}}],["而使用轮询",{"2":{"125":1}}],["而生",{"2":{"108":1,"414":1}}],["而",{"2":{"92":1,"132":1,"134":2,"135":1,"181":1,"227":1,"336":1,"349":2,"350":1,"403":1,"415":1,"420":1,"427":1,"465":1,"971":1,"1017":1}}],["而在于其与物理环境",{"2":{"419":1}}],["而在于我们是否真正理解其背后的设计哲学",{"2":{"169":1}}],["而在于它正确地选择了只在构建阶段处理所有复杂计算",{"2":{"54":1}}],["而在",{"2":{"92":1,"415":1,"461":1,"537":1,"541":1}}],["而是想基于以上延伸思考引出一个新的业余尝试",{"2":{"1041":1}}],["而是想抛出问题",{"2":{"1039":1}}],["而是再次分解和渐进明细碎片清单",{"2":{"1037":1}}],["而是碎片清单的再次分解与渐进明细",{"2":{"1037":1}}],["而是从清单中读取",{"2":{"1037":1}}],["而是跳到另一个从概率上对自己有利的局里",{"2":{"1016":1}}],["而是重在强调数学思维真的又底层又有用",{"2":{"1010":1}}],["而是具备高度确定性的工程基建",{"2":{"971":1}}],["而是直接在",{"2":{"962":2}}],["而是致力于解决作用域问题",{"2":{"960":1}}],["而是现代化前端工程化中用于封装组件样式",{"2":{"960":1}}],["而是与其他方案",{"2":{"958":1}}],["而是协调",{"2":{"798":1}}],["而是由表达式引擎动态计算",{"2":{"747":1}}],["而是信息熵增与泛滥",{"2":{"620":1}}],["而是为了升级我们思考现实",{"2":{"615":1}}],["而是沦为了一种排解郁闷",{"2":{"612":1}}],["而是面对面的平等讨论",{"2":{"610":1}}],["而是面向接口编程的具象化",{"2":{"319":1}}],["而是沿着",{"2":{"609":1}}],["而是培养盲从信徒的方法",{"2":{"608":1}}],["而是隐藏在我们每天的日常选择中",{"2":{"605":1}}],["而是支撑我们跨越漫长生命周期",{"2":{"605":1}}],["而是学会在个人体验与宏观世界之间搭建桥梁",{"2":{"604":1}}],["而是认知系统的彻底迭代",{"2":{"603":1}}],["而是认知栈",{"2":{"553":1}}],["而是决策的精度与责任的边界",{"2":{"602":1}}],["而是建立在极致的风险验证与深刻的人性洞察之上",{"2":{"600":1}}],["而是演变为一个任务协调者",{"2":{"592":1}}],["而是创造一个拥有独立身份",{"2":{"589":1}}],["而是正在成为真正的",{"2":{"569":1}}],["而是转变为构建以下三层认知模型",{"2":{"558":1}}],["而是转向右侧的",{"2":{"443":1}}],["而是包含了",{"2":{"540":1}}],["而是那个能在随机生成的迷雾中",{"2":{"539":1}}],["而是给了你",{"2":{"539":1}}],["而是始终锚定于可预期的工程范式之内",{"2":{"532":1}}],["而是对约束条件的定义",{"2":{"532":1}}],["而是有能力把系统打磨得更健壮",{"2":{"528":1}}],["而是软件工程中长期被牺牲掉的",{"2":{"526":1}}],["而是软件工程几十年沉淀下来的智慧结晶",{"2":{"180":1}}],["而是改变了",{"2":{"526":1}}],["而是如何将这种碎片化的",{"2":{"525":1}}],["而是技术对真实人性的体察与关怀",{"2":{"495":1}}],["而是像一位耐心的老教师一样",{"2":{"495":1}}],["而是基于对大语言模型",{"2":{"493":1}}],["而是基于真实抓取的数据生成的专业资产",{"2":{"475":1}}],["而是基于业务领域封装成",{"2":{"87":1}}],["而是希望你用更低的成本",{"2":{"466":1}}],["而是知道什么是对的",{"2":{"460":1}}],["而是知识的生成与自主探索",{"2":{"355":1}}],["而是判断力",{"2":{"459":1}}],["而是可以沿着层级逐步演进",{"2":{"459":1}}],["而是乘数效应",{"0":{"458":1},"1":{"459":1,"460":1,"461":1,"462":1}}],["而是写",{"2":{"449":1}}],["而是规则或仓库约定",{"2":{"445":1}}],["而是规范的",{"2":{"180":1}}],["而是在实际场景中测试智能体工作流的边界",{"2":{"1000":1}}],["而是在",{"2":{"464":1}}],["而是在每一个关键步骤后都进行一次",{"2":{"431":1}}],["而是在运行时按需",{"2":{"34":1}}],["而是根据每一步的反馈动态调整",{"2":{"424":1}}],["而是能自主读取代码库",{"2":{"567":1}}],["而是能跑得更稳",{"2":{"528":1}}],["而是能够独立完成从想法到上线的闭环",{"2":{"461":1}}],["而是能够一人承担",{"2":{"361":1}}],["而是能否构建出深谙业务逻辑",{"2":{"420":1}}],["而是负责脏活累活",{"2":{"406":1}}],["而是被已经发生在过去的投入",{"2":{"393":1}}],["而是被遗漏的那个类型",{"2":{"232":1}}],["而是克制",{"2":{"381":1}}],["而是先用最原始",{"2":{"378":1}}],["而是看不见的",{"2":{"367":1}}],["而是因为它也讲述了一个资质普通又平凡的少年",{"2":{"1042":1}}],["而是因为技术底座的剧变",{"2":{"457":1}}],["而是因为",{"2":{"366":1}}],["而是站在雨夜路边",{"2":{"366":1}}],["而是",{"2":{"366":2,"367":1,"376":1,"492":1,"529":1,"986":1}}],["而是要建立辩证的",{"2":{"618":1}}],["而是要具备",{"2":{"461":1}}],["而是要将我们从繁琐的",{"2":{"420":1}}],["而是要量化思考",{"2":{"365":1}}],["而是要在混沌的业务逻辑之上",{"2":{"332":1}}],["而是倾向于将多个关联包放在一个仓库中",{"2":{"335":1}}],["而是进阶为了一名掌控全局的",{"2":{"303":1}}],["而是随着",{"2":{"298":1}}],["而是随着查询次数的增加而递增",{"2":{"157":1}}],["而是手段",{"2":{"292":1}}],["而是会思考",{"2":{"271":1}}],["而是让",{"2":{"536":1}}],["而是让你成为一名具备",{"2":{"400":1}}],["而是让我们",{"2":{"201":1}}],["而是让技术各归其位的顺势而为",{"2":{"132":1}}],["而是用",{"2":{"188":1}}],["而是优先用简单方案解决问题",{"2":{"181":1}}],["而是源于底层架构范式的深度契合",{"2":{"179":1}}],["而是纯粹的结构编码",{"2":{"171":1}}],["而是通过上下文说服",{"2":{"986":1}}],["而是通过给组件的",{"2":{"961":1}}],["而是通过撰写严谨的",{"2":{"542":1}}],["而是通过架构上的解耦",{"2":{"431":1}}],["而是通过",{"2":{"170":1,"380":1}}],["而是通过特定的协议头",{"2":{"105":1}}],["而是检查数据是否有更新",{"2":{"162":1}}],["而是将原因归咎于外界",{"2":{"612":1}}],["而是将自己定义为知识发现引擎",{"2":{"348":1}}],["而是将这个",{"2":{"162":1}}],["而是将关键架构决策内化为框架约定",{"2":{"59":1}}],["而是深入理解每种技术的边界与代价",{"2":{"132":1}}],["而是一场基于",{"2":{"603":1}}],["而是一场伴随模型能力进化的动态博弈",{"2":{"534":1}}],["而是一场关乎系统架构与产品思维的深刻重塑",{"2":{"440":1}}],["而是一位帮助家长掌握科学辅导方法的",{"2":{"492":1}}],["而是一组相互链接的要素",{"2":{"383":1}}],["而是一套可拆解",{"2":{"363":1}}],["而是一套经过高频训练后内化为本能的思维算法",{"2":{"363":1}}],["而是一套精巧的兼容性封装",{"2":{"306":1}}],["而是一种构建你自己的组件库的方法",{"2":{"340":1}}],["而是一种",{"2":{"132":1}}],["而是一个新的全栈价值公式",{"2":{"1001":1}}],["而是一个闭环的多智能体协作流水线",{"2":{"535":1}}],["而是一个多工种流水线",{"2":{"468":1}}],["而是一个务实的分布式控制平面",{"2":{"419":1}}],["而是一个能够深度理解私域知识并基于此进行复杂决策的智能实体",{"2":{"417":1}}],["而是一个拥有广泛能力边界",{"2":{"414":1}}],["而是一个自主的目标执行者",{"2":{"414":1}}],["而是一个独立的",{"2":{"113":1}}],["而是一个专门用于处理服务端数据状态的异步数据管理库",{"2":{"91":1}}],["而是一次彻底的",{"2":{"113":1}}],["而是立即将",{"2":{"74":1}}],["而保证这一一致性同样需要开发者自行负责",{"2":{"58":1}}],["而用",{"2":{"54":1}}],["而非重复造轮子",{"2":{"1003":1}}],["而非重复写simpledateformat代码",{"2":{"188":1}}],["而非业务功能命名",{"2":{"962":1}}],["而非手写绑定",{"2":{"936":1}}],["而非手动干预",{"2":{"177":1}}],["而非可执行代码",{"2":{"936":1}}],["而非目的",{"2":{"622":1}}],["而非陷入过度设计的泥潭",{"2":{"556":1}}],["而非盲目追求技术实现的",{"2":{"556":1}}],["而非死板的对话框",{"2":{"543":1}}],["而非死记硬背",{"2":{"407":1}}],["而非仅仅停留在",{"2":{"533":1}}],["而非单一速度",{"0":{"526":1},"1":{"527":1,"528":1,"529":1}}],["而非单方面的价值宣称",{"2":{"392":1}}],["而非顺序执行",{"2":{"472":1}}],["而非资料仓库",{"2":{"445":1}}],["而非资本的奴隶",{"0":{"379":1}}],["而非加载代码本身",{"2":{"443":1}}],["而非拷贝",{"2":{"314":1}}],["而非把泛型限制成某个具体类型",{"2":{"263":1}}],["而非参数和返回值的交叉",{"2":{"238":1}}],["而非编译后的",{"2":{"217":1}}],["而非通过命令式地操作",{"2":{"179":1}}],["而非直接手动修改",{"2":{"177":1}}],["而非零散的代码片段",{"2":{"177":1}}],["而非取代",{"2":{"169":1}}],["而非盯着白屏等待",{"2":{"75":1}}],["而非一刀切",{"2":{"47":1}}],["而非",{"2":{"40":1,"181":1,"200":1,"451":1,"846":1,"881":1}}],["而非基础设施的维护",{"2":{"20":1}}],["其收益不一定比一段时间强有力的无氧运动有效果",{"2":{"1048":1}}],["其作者萧鼎老师说过",{"2":{"1042":1}}],["其输入主要来自碎片清单",{"2":{"1037":1}}],["其输入主要来自碎片清单或临时加进来的重要且紧急事务",{"2":{"1037":1}}],["其团队中肯定有人读过这本书",{"2":{"1032":1}}],["其表现就相当差",{"2":{"1017":1}}],["其能力的",{"2":{"1009":1}}],["其背后的",{"2":{"1008":1}}],["其背后的设计思想",{"2":{"491":1}}],["其简约的设计理念与本站",{"2":{"1003":1}}],["其底层输出的完全就是这一套架构",{"2":{"971":1}}],["其底层逻辑无非是在做一道关于产品感的算术题",{"2":{"971":1}}],["其中大部分的讲解或许对很多人有帮助",{"2":{"1046":1}}],["其中",{"2":{"751":1}}],["其中最值得关注的是标准化装饰器和更灵活的模块扩展",{"2":{"323":1}}],["其余滤镜",{"2":{"693":1}}],["其余走",{"2":{"47":1}}],["其次",{"2":{"603":1}}],["其",{"2":{"511":1}}],["其架构采用",{"2":{"470":1}}],["其架构设计并非简单的",{"2":{"419":1}}],["其标准化的目录树如下",{"2":{"442":1}}],["其本质是通过优雅地整合",{"2":{"434":1}}],["其本质是降低问题的熵值",{"2":{"422":1}}],["其本质是将",{"2":{"175":1}}],["其最显著的特征是实现了控制逻辑",{"2":{"419":1}}],["其繁杂的搜索记录会被隔离在自己的上下文中",{"2":{"415":1}}],["其运作逻辑可以精炼为",{"2":{"414":1}}],["其实最主要的问题还是在于有没有共同的诉求",{"2":{"1041":1}}],["其实业余是可以协作的",{"2":{"1041":1}}],["其实",{"2":{"1026":1}}],["其实是",{"2":{"622":1}}],["其实是投入产出比",{"2":{"365":1}}],["其实都是别人精心设计好让你看到的",{"2":{"620":1}}],["其实都隐藏着一个运转复杂的",{"2":{"382":1}}],["其实就是在用",{"2":{"494":1}}],["其实恰恰相反",{"2":{"54":1}}],["其设计深受",{"2":{"344":2}}],["其生态包含官方路由",{"2":{"339":1}}],["其核心原理是利用",{"2":{"961":1}}],["其核心竞争力将体现在对品味与评判权的掌控上",{"2":{"533":1}}],["其核心精髓在于",{"2":{"441":1}}],["其核心逻辑是先将任务细化为子任务",{"2":{"423":1}}],["其核心价值在于其感知与推理的深度融合",{"2":{"418":1}}],["其核心特质就是成为一个高阶的",{"2":{"358":1}}],["其核心优势在于",{"2":{"310":1}}],["其核心思想可概括为",{"2":{"181":1}}],["其核心思想是",{"2":{"34":1,"39":1}}],["其他可渲染类型",{"2":{"766":1}}],["其他构建变体",{"2":{"763":1}}],["其他",{"2":{"656":1,"763":4,"849":1}}],["其他组件插件",{"2":{"647":1}}],["其他命令",{"2":{"573":1,"854":1}}],["其他更多选项",{"2":{"482":1}}],["其他未使用字段的方法",{"2":{"184":1}}],["其他错误",{"2":{"144":1}}],["其典型规则如下",{"2":{"159":1}}],["其解析流水线如下",{"2":{"143":1}}],["其特点是计算期间无持续数据流",{"2":{"131":1}}],["其原生的断线重连机制极大降低了前端的开发心智负担",{"2":{"131":1}}],["其所有子组件也会被迫成为客户端组件",{"2":{"62":1}}],["其优势在于",{"2":{"20":1}}],["9月份",{"2":{"1048":1}}],["9步工作流",{"2":{"980":1}}],["91",{"2":{"965":1}}],["932行",{"2":{"939":1}}],["939",{"2":{"643":1}}],["9kb",{"2":{"763":1}}],["9种",{"2":{"735":1}}],["920",{"2":{"705":1}}],["95+",{"2":{"645":1,"646":2,"647":1}}],["95",{"2":{"643":1}}],["953",{"2":{"643":1}}],["99kb",{"2":{"763":1}}],["99",{"2":{"605":1}}],["999",{"2":{"260":1}}],["900",{"2":{"705":1,"962":3,"964":1}}],["90",{"0":{"967":1},"2":{"375":1,"405":1,"965":2,"967":1,"971":2}}],["9",{"0":{"55":1,"132":1,"346":1,"597":1,"952":1,"971":1},"2":{"34":2,"163":1,"643":1,"730":1,"938":1,"939":24,"946":1,"947":1,"951":1,"952":7,"964":1,"987":2,"1043":1}}],["由戴明提出",{"2":{"1027":1}}],["由子agent独立完成",{"2":{"983":1}}],["由子类重写",{"2":{"777":1}}],["由其遍历所有注册的动画实例执行操作",{"2":{"740":1}}],["由主",{"2":{"592":1}}],["由系统自动管理",{"2":{"570":1}}],["由国内前端领域知名开发者创业打造",{"2":{"515":1}}],["由景入情",{"2":{"508":1}}],["由谁生成",{"2":{"471":1}}],["由两部分组成",{"2":{"442":1}}],["由客户端在本地执行",{"2":{"411":1}}],["由京东",{"2":{"346":1}}],["由工具链自动处理老旧环境的兼容",{"2":{"308":1}}],["由构建工具处理",{"2":{"203":1}}],["由协议层处理",{"2":{"150":1}}],["由发送方建立并维持连接",{"2":{"122":1}}],["由接收方预先暴露回调",{"2":{"131":1}}],["由接收方预先暴露",{"2":{"122":1}}],["由于周末没有做比较大的限制",{"2":{"1045":1}}],["由于笔者仍然保持着大学时代学会的",{"2":{"1024":1}}],["由于地域限制和传播介质的稀缺",{"2":{"616":1}}],["由于书籍要求书面化",{"2":{"614":1}}],["由于本项目基于",{"2":{"480":1}}],["由于它接收的是经过",{"2":{"475":1}}],["由于计划已固定",{"2":{"423":1}}],["由于网络环境的延迟",{"2":{"305":1}}],["由于",{"2":{"304":1,"333":1,"425":1,"626":1,"971":1}}],["由于全自动化产出速度极快",{"2":{"171":1}}],["由于数据可能被分割到多个",{"2":{"141":1}}],["由于重试机制的存在",{"2":{"121":1}}],["由于连接具有状态属性",{"2":{"117":1}}],["由于多路复用特性的存在",{"2":{"112":1}}],["由",{"2":{"34":1,"177":1,"203":1,"304":1,"305":1,"344":1,"518":1,"591":1,"790":1,"1003":1}}],["并强制每两天内必须在朋友圈至少打卡一次",{"2":{"1046":1}}],["并粗略了解",{"2":{"1044":1}}],["并做出一系列调整动作",{"2":{"1043":1}}],["并合理分配项目收益",{"2":{"1041":1}}],["并以文化",{"2":{"1041":1}}],["并以幽默生动",{"2":{"494":1}}],["并尽最大努力避免重要不紧急的事务演变为重要且紧急的事务",{"2":{"1036":1}}],["并达到人之天年",{"2":{"1025":1}}],["并刻意训练",{"2":{"1011":1}}],["并输出对应格式的",{"2":{"985":1}}],["并执行",{"2":{"965":1}}],["并管理",{"2":{"944":1}}],["并适配不同的行适配容差和行为策略",{"2":{"786":1}}],["并通过",{"2":{"717":1}}],["并注入所有",{"2":{"677":1}}],["并递归处理每个节点的",{"2":{"649":1}}],["并显示提交结果",{"2":{"581":1}}],["并显著提升了任务的成功率",{"2":{"443":1}}],["并直接上线",{"2":{"562":1}}],["并指挥",{"2":{"558":1}}],["并指定关注的事件类型",{"2":{"119":1}}],["并定义清楚需求的边界",{"2":{"558":1}}],["并为",{"2":{"539":1}}],["并附带",{"2":{"523":1}}],["并附上解读",{"2":{"504":1}}],["并与",{"2":{"515":1}}],["并使用加粗字体与换行格式",{"2":{"506":1}}],["并确保诗歌内容健康",{"2":{"504":1}}],["并确保幂等处理与签名验证",{"2":{"130":1}}],["并引导其重新输入",{"2":{"504":1}}],["并顺手推送了一道经典的",{"2":{"495":1}}],["并区分",{"2":{"488":1}}],["并修复",{"0":{"484":1}}],["并据此确定研究方向与重点",{"2":{"468":1}}],["并据此生成多维度的反馈",{"2":{"418":1}}],["并展示这种模式如何通过模块化设计显著提升研究报告的专业度",{"2":{"467":1}}],["并运用技术与分发实现价值的",{"2":{"459":1}}],["并设计串联工作流",{"2":{"459":1}}],["并借助",{"2":{"458":1}}],["并补充领域知识和错误处理机制",{"2":{"455":1}}],["并符合工程化流水线",{"2":{"451":1}}],["并明确触发条件",{"2":{"448":1}}],["并明确依赖关系",{"2":{"423":1}}],["并迅速在开发者社区引发热议",{"2":{"441":1}}],["并可配置项目级的全局自定义指令",{"2":{"437":1}}],["并主动调整策略",{"2":{"427":1}}],["并提出修改建议",{"2":{"426":1}}],["并提供极致性价比的算力支撑",{"2":{"551":1}}],["并提供确认链接",{"2":{"449":1}}],["并提供虚拟机环境",{"2":{"343":1}}],["并提供类似",{"2":{"343":1}}],["并提供公共依赖",{"2":{"288":1}}],["并建立了一个庞大的",{"2":{"419":1}}],["并自动在",{"2":{"418":1}}],["并生成对应的多媒体内容或执行具体的动作",{"2":{"418":1}}],["并生成研报",{"2":{"355":1}}],["并委派任务",{"2":{"416":1}}],["并行子agent协调调度",{"2":{"980":1}}],["并行开发与隔离",{"2":{"980":1}}],["并行agent调度",{"2":{"979":1}}],["并行工具执行",{"2":{"915":1}}],["并行启动",{"2":{"855":1}}],["并行执行",{"2":{"854":1}}],["并行委托",{"2":{"472":1}}],["并行生成",{"2":{"471":1}}],["并行网络搜索",{"2":{"470":1,"471":1}}],["并行处理",{"2":{"438":1}}],["并行推进",{"2":{"415":1,"438":1}}],["并行渲染",{"2":{"74":1}}],["并接收环境反馈",{"2":{"408":1}}],["并根据市场动态提供初步投资建议",{"2":{"407":1}}],["并根据数据变化高效更新渲染组件",{"2":{"339":1}}],["并加上这句",{"2":{"375":1}}],["并果断放弃那些",{"2":{"365":1}}],["并让用户愿意为之买单或停留",{"2":{"363":1}}],["并持续深耕",{"2":{"361":1}}],["并获取高信度知识是核心诉求",{"2":{"348":1}}],["并没有以此消灭全栈工程师",{"2":{"558":1}}],["并没有干巴巴地罗列知识点",{"2":{"495":1}}],["并没有绝对的优劣之分",{"2":{"433":1}}],["并没有试图成为",{"2":{"348":1}}],["并没有持续的数据流可供传输",{"2":{"124":1}}],["并完全支持它",{"2":{"344":2}}],["并完成水合",{"2":{"61":1}}],["并完成",{"2":{"27":1}}],["并最终打包成浏览器可直接运行的静态文件",{"2":{"343":1}}],["并利用用户模型",{"2":{"600":1}}],["并利用大模型组合出优雅的解决方案",{"2":{"495":1}}],["并利用",{"2":{"342":1}}],["并广泛应用于处理网络数据交互",{"2":{"342":1}}],["并探讨在现代工程",{"2":{"317":1}}],["并在生活实践中去尝试",{"2":{"1019":1}}],["并在生成失败时优雅地回滚",{"2":{"101":1}}],["并在文档再次可见时自动重新打开",{"2":{"898":1}}],["并在整个对话过程中时刻参照",{"2":{"571":1}}],["并在关键节点结合",{"2":{"550":1}}],["并在其中精准定位",{"2":{"533":1}}],["并在严格安全约束下执行高度自主任务的系统",{"2":{"419":1}}],["并在执行过程中不断反思",{"2":{"414":1}}],["并在异常时主动预警",{"2":{"407":1}}],["并在这个过程中保持盈利与内心的从容",{"2":{"381":1}}],["并在实践中不断演化",{"2":{"361":1}}],["并在过程中培养结构化产品分析思维",{"2":{"348":1}}],["并在",{"2":{"319":1}}],["并在回调函数中使用加载好的模块",{"2":{"305":1}}],["并带来巨大的工程价值",{"2":{"297":1}}],["并能够在前端和",{"2":{"293":1}}],["并将从",{"2":{"1001":1}}],["并将产品交付到用户手中",{"2":{"555":1}}],["并将返回的会话",{"2":{"489":1}}],["并将任务委派给子智能体",{"2":{"470":1}}],["并将结果回传给主代理",{"2":{"438":1}}],["并将结果作为下一轮推理的输入",{"2":{"427":1}}],["并将结果写入数据库",{"2":{"126":1}}],["并将其注入到",{"2":{"982":1}}],["并将其沉淀为",{"2":{"414":1}}],["并将其转化为实际行动",{"2":{"402":1}}],["并将工厂",{"2":{"303":1}}],["并将业务逻辑与技术实现紧密结合",{"2":{"276":1}}],["并非边缘工作",{"2":{"526":1}}],["并非为了盲目追捧个人英雄主义",{"2":{"457":1}}],["并非一个新概念",{"2":{"402":1}}],["并非一种全新的技术",{"2":{"306":1}}],["并非不可捉摸的黑魔法",{"2":{"363":1}}],["并非零和博弈",{"2":{"349":1}}],["并非否定复杂的可能性",{"2":{"181":1}}],["并非易事",{"2":{"169":1}}],["并未改变这些原则的内核",{"2":{"180":1}}],["并未内置自动重连",{"2":{"117":1}}],["并遵循单一职责原则为其命名",{"2":{"170":1}}],["并渲染视图",{"2":{"170":1}}],["并不断开放使用与",{"2":{"512":1}}],["并不是要求一个人在设计",{"2":{"458":1}}],["并不是简单的文件读取",{"2":{"334":1}}],["并不局限于二选一",{"2":{"168":1}}],["并不存在放之四海而皆准的",{"2":{"55":1}}],["并立即返回给客户端",{"2":{"126":1}}],["并发起过不少",{"2":{"1002":1}}],["并发agent调度模式",{"2":{"980":1}}],["并发问题",{"2":{"591":1}}],["并发模型",{"2":{"531":1}}],["并发量是否非常大",{"2":{"166":1}}],["并发连接数瓶颈",{"2":{"125":1}}],["并发发起所有数据请求",{"2":{"47":1}}],["并要求回调端点返回",{"2":{"121":1}}],["并返回一个",{"2":{"313":1}}],["并返回一个确认响应",{"2":{"119":1}}],["并返回给浏览器",{"2":{"26":1}}],["并且使信赖成为可能",{"2":{"1006":1}}],["并且要做到言之成理",{"2":{"610":1}}],["并且可能增加",{"2":{"959":1}}],["并且可无缝集成至",{"2":{"511":1}}],["并且可以与",{"2":{"220":1}}],["并且希望按角色分工完成任务时",{"2":{"438":1}}],["并且在数据格式层面依然遵循",{"2":{"135":1}}],["并且你推崇极简的架构代码",{"2":{"99":1}}],["并且由于",{"2":{"95":1}}],["并手动维护回滚",{"2":{"98":1}}],["并按特定字段排序",{"2":{"95":1}}],["并统一处理",{"2":{"87":1}}],["并重新渲染",{"2":{"47":1}}],["并写入缓存",{"2":{"35":1}}],["并存入缓存",{"2":{"35":1}}],["执行和调整之外",{"2":{"1005":1}}],["执行和构建有更深层的掌控力",{"2":{"309":1}}],["执行单一任务后经两阶段审查",{"2":{"988":1}}],["执行任务",{"2":{"979":1}}],["执行支撑层",{"2":{"978":1,"979":1}}],["执行工具",{"2":{"918":1,"922":1}}],["执行浏览器命令",{"2":{"860":1,"866":2}}],["执行策略枚举",{"2":{"856":1}}],["执行适配器",{"2":{"855":1}}],["执行引擎",{"2":{"849":1}}],["执行绘制命令",{"2":{"777":1}}],["执行gpu渲染",{"2":{"765":1}}],["执行底层",{"2":{"765":1}}],["执行缓动插值",{"2":{"743":1}}],["执行所有",{"2":{"719":1}}],["执行顺序",{"2":{"715":1}}],["执行调度管道",{"2":{"708":1}}],["执行批量绘制",{"2":{"680":1}}],["执行函数调用",{"2":{"655":1}}],["执行步骤",{"2":{"626":1}}],["执行是为了将假设放入真实环境中跑通测试",{"2":{"622":1}}],["执行+不思考",{"2":{"622":1}}],["执行断层",{"2":{"617":1}}],["执行以下工作",{"2":{"591":1}}],["执行方式",{"2":{"590":1}}],["执行的具体指令",{"2":{"581":1}}],["执行命令并逐步反馈",{"2":{"567":1}}],["执行之间",{"2":{"532":1}}],["执行摘要串联当日最重要变化与判断",{"2":{"632":1}}],["执行摘要",{"2":{"472":1}}],["执行流观察",{"0":{"474":1}}],["执行流",{"2":{"450":1}}],["执行前",{"2":{"450":1}}],["执行前进行全局拆解",{"2":{"432":1}}],["执行阶段",{"2":{"443":1}}],["执行过程中实时推理",{"2":{"432":1}}],["执行器并不关心最终目标有多宏观",{"2":{"429":1}}],["执行器",{"2":{"429":1}}],["执行力度",{"2":{"622":1}}],["执行力",{"2":{"411":1}}],["执行预定义的静态任务",{"2":{"403":1}}],["执行者身份",{"2":{"592":1}}],["执行者",{"2":{"402":1}}],["执行动作",{"2":{"357":1}}],["执行数据验证与类型转换",{"2":{"275":1}}],["执行机构",{"2":{"179":1}}],["执行计算着色器",{"2":{"777":1}}],["执行计算",{"2":{"126":1}}],["执行相应业务逻辑",{"2":{"119":1}}],["执行页面组件代码",{"2":{"31":1}}],["执行",{"0":{"357":1},"2":{"27":2,"31":1,"50":1,"422":1,"436":1,"472":2,"478":1,"559":1,"567":1,"581":1,"590":1,"622":1,"742":1,"860":1}}],["包的核心契约",{"2":{"925":1}}],["包提供更高级的工作流编排",{"2":{"918":1}}],["包实现",{"2":{"916":1}}],["包实现公共代码和组件的共享",{"2":{"286":1}}],["包通过",{"2":{"912":1}}],["包路径解析",{"2":{"851":1}}],["包元数据",{"2":{"790":1}}],["包冒烟测试",{"2":{"790":1}}],["包管理器依赖锁定",{"2":{"980":1}}],["包管理器配置",{"2":{"735":1}}],["包管理与构建",{"2":{"904":2}}],["包管理与模块化",{"0":{"335":1}}],["包定义",{"2":{"706":1,"763":1}}],["包定义导向",{"2":{"333":1}}],["包配置",{"2":{"677":1,"735":1,"939":5,"980":1}}],["包设计",{"2":{"673":1}}],["包入口",{"2":{"647":5,"939":2}}],["包目录",{"2":{"647":1,"908":1}}],["包装器",{"2":{"735":1}}],["包装了填充",{"2":{"683":1}}],["包装",{"2":{"652":1,"675":1}}],["包装物理属性",{"2":{"391":1}}],["包装为默认导出",{"2":{"333":1}}],["包围球加速裁剪",{"2":{"769":1}}],["包围球",{"2":{"763":1}}],["包围盒",{"2":{"763":3}}],["包围",{"2":{"382":1}}],["包",{"2":{"335":1,"904":1,"906":1,"910":1,"919":1,"976":1}}],["包引入额外的类型",{"2":{"203":1}}],["包时必须开启",{"2":{"203":1}}],["包体积增大",{"2":{"192":1}}],["包括哲思人生",{"2":{"1031":1}}],["包括统计与数学",{"2":{"1031":1}}],["包括编程技术学习",{"2":{"1031":1}}],["包括带有自定义",{"2":{"898":1}}],["包括阿拉伯语",{"2":{"786":1}}],["包括场景遍历",{"2":{"768":1}}],["包括高级加载器",{"2":{"761":1}}],["包括脏标记",{"2":{"689":1}}],["包括拖拽系统",{"2":{"645":1}}],["包括题目和诗句",{"2":{"506":1}}],["包括内部行动与外部工具调用",{"2":{"412":1}}],["包括字体",{"2":{"338":1}}],["包括工具函数",{"2":{"274":1}}],["包括参数个数和返回值类型",{"2":{"203":1}}],["包括冗余代码",{"2":{"182":1}}],["包括模块边界",{"2":{"177":1}}],["包括",{"2":{"103":1,"186":1,"274":1,"567":1,"654":1,"942":1}}],["包括电商网站",{"2":{"4":1}}],["包裹的动态部分则被挖空",{"2":{"75":1}}],["包裹的异步组件代码",{"2":{"74":1}}],["包裹耗时组件",{"2":{"74":1}}],["包裹了",{"2":{"67":1}}],["包裹浏览器",{"2":{"47":1}}],["包含测试反模式参考文档",{"2":{"989":1}}],["包含可视化伴侣",{"2":{"987":1}}],["包含完整",{"2":{"948":1}}],["包含起止值",{"2":{"822":1}}],["包含规范化文本",{"2":{"793":1}}],["包含宽度",{"2":{"793":1}}],["包含实际文本字符串",{"2":{"793":1}}],["包含着色器管理",{"2":{"761":1}}],["包含词法分析器",{"2":{"655":1}}],["包含类型",{"2":{"650":1}}],["包含类型定义",{"2":{"177":1}}],["包含审批和回滚",{"2":{"587":1}}],["包含所有标准",{"2":{"939":1}}],["包含所有布局热路径需要的预计算数据",{"2":{"793":1}}],["包含所有",{"2":{"583":1,"792":1}}],["包含所有可能的值",{"2":{"227":1}}],["包含个人偏好",{"2":{"570":1}}],["包含详细的执行规则",{"2":{"547":1}}],["包含真实触发短语",{"2":{"448":1}}],["包含主应用",{"2":{"288":1}}],["包含业务核心逻辑",{"2":{"279":1}}],["包含订单项",{"2":{"278":1}}],["包含组件与页面",{"2":{"274":1}}],["包含数百个工具类",{"2":{"193":1}}],["包含数据的完整",{"2":{"27":1}}],["包含了所有上层",{"2":{"663":1}}],["包含了",{"2":{"143":1,"203":1}}],["包含",{"2":{"53":1,"442":2,"472":1,"799":1,"944":1,"983":1,"989":1}}],["包含动态组件加载占位符",{"2":{"40":1}}],["为啥就不能为自己后青春的下半场基于现状弄一个身体",{"2":{"1043":1}}],["为自己预留一些挥霍的自由",{"2":{"1038":1}}],["为自己减压",{"2":{"1036":1}}],["为避免自己变成有强迫症的人",{"2":{"1038":1}}],["为短时间学习",{"2":{"1030":1}}],["为应对社会生活中的焦虑与迷茫",{"2":{"1029":1}}],["为应对各种网络异常与业务场景",{"2":{"150":1}}],["为保证自己在理论意识上更注重身体健康",{"2":{"1025":1}}],["为保障连接在生产环境中的鲁棒性",{"2":{"117":1}}],["为新编码平台适配",{"2":{"974":1}}],["为开发者提供一个安全",{"2":{"968":1}}],["为代表的变体驱动原子化方案",{"2":{"965":1}}],["为代价",{"2":{"25":1,"33":1,"38":1}}],["为便于指导日常的技术选型与工程实践",{"2":{"965":1}}],["为当前组件的所有",{"2":{"961":1}}],["为组件元素及",{"2":{"961":1}}],["为前端",{"2":{"901":1}}],["为前缀",{"2":{"494":1}}],["为浏览器提供了更强大",{"2":{"872":1}}],["为空文件",{"2":{"763":1}}],["为渲染引擎",{"2":{"677":1}}],["为默认渲染引擎",{"2":{"677":1}}],["为读者提供可视化洞察",{"2":{"632":1}}],["为读者提供快速概览",{"2":{"632":1}}],["为乐",{"2":{"610":1}}],["为大模型提供一套标准化的双向通信协议",{"2":{"548":1}}],["为后续的",{"2":{"541":1}}],["为后续增量引入状态",{"2":{"171":1}}],["为灵感",{"2":{"505":1,"508":1}}],["为确保",{"2":{"502":1}}],["为确保项目的可维护性与抗腐化能力",{"2":{"169":1}}],["为每一个分类配备对应的阅读工具与实践原则",{"2":{"1031":1}}],["为每一个长尾查询生成",{"2":{"354":1}}],["为每个组件生成唯一的",{"2":{"959":1}}],["为每个目标创建独立动画",{"2":{"835":1}}],["为每个属性创建",{"2":{"686":1}}],["为每个被补间的属性创建独立的",{"2":{"686":1}}],["为每个",{"2":{"476":1,"827":1}}],["为验证系统的实际效果",{"2":{"473":1}}],["为内部专属业务工具提供标准化的",{"2":{"439":1}}],["为特定的专项项目设置专属的语气",{"2":{"437":1}}],["为特定主题提供持久化的上下文存储",{"2":{"437":1}}],["为下一步决策提供依据",{"2":{"427":1}}],["为下一代",{"2":{"343":1}}],["为中心",{"2":{"403":1}}],["为何而做",{"0":{"376":1}}],["为第三方库定义模块化声明",{"2":{"321":1}}],["为纯",{"2":{"321":1}}],["为返回类型",{"2":{"262":1}}],["为输入类型",{"2":{"262":1}}],["为值类型",{"2":{"262":1}}],["为键类型",{"2":{"262":1}}],["为未使用字段生成getter",{"2":{"184":1}}],["为什么很多人读了很多的书",{"2":{"1030":1}}],["为什么那么多人喊着健身和减肥",{"2":{"1026":1}}],["为什么要继续写文章呢",{"2":{"1019":1}}],["为什么要大费周章地进行模块化拆分",{"2":{"297":1}}],["为什么伟大不能被计划",{"2":{"1005":1}}],["为什么重要",{"2":{"909":1}}],["为什么基于",{"2":{"881":1}}],["为什么用技能而非命令",{"2":{"587":1}}],["为什么值得使用",{"2":{"583":1}}],["为什么这样设计",{"2":{"555":1}}],["为什么这么改",{"2":{"537":1}}],["为什么选择",{"0":{"478":1,"493":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1},"2":{"881":1}}],["为什么深度研究需要",{"0":{"468":1}}],["为什么在复杂场景中这种模式更具优势",{"0":{"430":1}}],["为什么某些软件只允许你用一个设备",{"2":{"400":1}}],["为什么牛奶通常装在方盒子里卖",{"2":{"391":1}}],["为什么我觉得",{"2":{"372":1}}],["为什么不直接使用",{"2":{"881":1}}],["为什么不直接告诉我",{"2":{"370":1}}],["为什么不由我们自己去发现呢",{"2":{"362":1}}],["为什么想要",{"2":{"366":1}}],["为什么",{"0":{"179":1,"963":1},"2":{"179":1,"375":1,"557":1}}],["为什么需要独立身份",{"2":{"592":1}}],["为什么需要",{"0":{"590":1}}],["为什么需要退避轮询",{"0":{"158":1}}],["为什么需要一个框架",{"0":{"56":1},"1":{"57":1,"58":1,"59":1}}],["为正确地构建应用",{"2":{"173":1}}],["为可重试错误",{"2":{"144":1}}],["为致命错误",{"2":{"144":1}}],["为数据块",{"2":{"141":1}}],["为数据获取提供了更加简洁和高效的解决方案",{"2":{"83":1}}],["为真正的实时双向交互打开了大门",{"2":{"132":1}}],["为了解决这些痛点",{"2":{"957":1}}],["为了解决这一痛点",{"2":{"441":1}}],["为了坚持这种旧习惯",{"2":{"613":1}}],["为了对抗大模型的延迟与幻觉",{"2":{"543":1}}],["为了不让工程质量滑向",{"2":{"532":1}}],["为了亲测平台性能并实战演练结构化",{"2":{"496":1}}],["为了方便后续的调用",{"2":{"489":1}}],["为了提供更好的开发体验",{"2":{"487":1}}],["为了提高编译命令的复用性和可维护性",{"2":{"202":1}}],["为了确保",{"2":{"481":1}}],["为了保证",{"2":{"451":1}}],["为了应对不同复杂程度的任务",{"2":{"414":1}}],["为了更直观地衡量",{"2":{"403":1}}],["为了更直观地理解",{"2":{"308":1}}],["为了维持市场份额",{"2":{"392":1}}],["为了修",{"2":{"386":1}}],["为了赶进度写出烂代码",{"2":{"386":1}}],["为了实现这个丝滑体验",{"2":{"374":1}}],["为了技术而技术的自我感动",{"2":{"365":1}}],["为了让",{"2":{"494":1}}],["为了让这种",{"2":{"426":1}}],["为了让这个抽象概念变得可解构",{"2":{"364":1}}],["为了让模块更加健壮和灵活",{"2":{"299":1}}],["为了在浏览器中直接调试",{"2":{"217":1}}],["为了在保持各子项目独立性的同时",{"2":{"205":1}}],["为了抽象而抽象",{"2":{"189":1}}],["为了",{"2":{"183":1}}],["为了弥补退避轮询在实时性上的不足",{"2":{"161":1}}],["为了兼顾用户体验与服务器的稳定性",{"2":{"156":1}}],["为了兼顾体验和服务器压力",{"2":{"128":1}}],["为了防止恶意伪造回调",{"2":{"121":1}}],["为了模拟实时效果",{"2":{"103":1}}],["为解决这一问题",{"2":{"102":1}}],["为",{"2":{"87":1,"89":1,"141":1,"203":1,"254":1,"258":1,"340":1,"431":1,"843":1,"846":1,"881":1,"898":1,"965":1}}],["为文档站点提供极致的加载性能和极简的部署模型",{"2":{"48":1}}],["为不同数据新鲜度要求的模块设置不同的刷新周期",{"2":{"47":1}}],["为主",{"2":{"41":1,"759":1}}],["为例",{"0":{"473":1},"1":{"474":1,"475":1},"2":{"10":1,"72":1,"155":1,"567":1,"958":1}}],["本阶段主要吸收更多减肥方面的常识和习惯来调整减肥策略",{"2":{"1046":1}}],["本站的核心架构基于以下优秀项目构建",{"2":{"1003":1}}],["本站也是人机协作",{"2":{"1002":1}}],["本次漫谈笔者会结合自己的经验",{"2":{"1020":1}}],["本次继续新增一篇中短文",{"2":{"1005":1}}],["本次分析生成",{"2":{"706":1,"735":1}}],["本次实践的核心",{"2":{"503":1}}],["本次实践中最核心的目标",{"2":{"503":1}}],["本次实践选择在文心智能体平台上进行",{"2":{"498":1}}],["本项目是",{"2":{"699":1}}],["本项目基于",{"2":{"467":1}}],["本技能执行以下检查",{"2":{"586":1}}],["本技能旨在确保仓库的提交历史清晰",{"2":{"451":1}}],["本机状态",{"2":{"570":1}}],["本诗以五言律诗形式勾勒美人神韵",{"2":{"507":1}}],["本地运行",{"2":{"956":1}}],["本地守护进程",{"2":{"851":1}}],["本地目录无需额外配置",{"2":{"636":1}}],["本地模型",{"2":{"573":1}}],["本地个人偏好覆盖",{"2":{"570":1}}],["本地个性化设置",{"2":{"570":1}}],["本地私有配置",{"2":{"570":1}}],["本地优先数据安全",{"2":{"565":1}}],["本地优先",{"2":{"564":1,"565":1}}],["本地文件系统",{"2":{"548":1}}],["本地部署",{"2":{"523":1}}],["本地生活服务",{"2":{"518":1}}],["本地化",{"2":{"510":1}}],["本地",{"2":{"451":1,"849":1}}],["本地表单步骤",{"2":{"85":1}}],["本篇文章到此结束",{"2":{"433":1}}],["本身是一个优秀的规范",{"2":{"957":1}}],["本身就有重连机制",{"2":{"881":1}}],["本身就是一个伪命题",{"2":{"466":1}}],["本身就是一种极具穿透力的品牌资产",{"2":{"380":1}}],["本身就是基于",{"2":{"4":1}}],["本身不进行绘制",{"2":{"680":1}}],["本身不会直接让",{"2":{"443":1}}],["本身关系不大",{"2":{"613":1}}],["本身在处理实时信息",{"2":{"411":1}}],["本身",{"2":{"169":1}}],["本文对六大主流方案进行了系统梳理",{"2":{"965":1}}],["本文就从",{"2":{"569":1}}],["本文旨在通过对",{"2":{"348":1}}],["本文我们将聚焦于",{"2":{"317":1}}],["本文将深入剖析这六大主流方案的核心原理",{"2":{"965":1}}],["本文将深入探讨两种常用的",{"2":{"156":1}}],["本文将基于",{"2":{"477":1,"525":1}}],["本文将分享我基于",{"2":{"467":1}}],["本文将重点介绍大型项目中的模块化设计",{"2":{"272":1}}],["本文将围绕",{"2":{"102":1}}],["本文提到的代码示例",{"2":{"82":1}}],["本质",{"2":{"590":1}}],["本质是在多个能同等解释现象的理论中",{"2":{"181":1}}],["本质上取决于它对业务语境的理解深度",{"2":{"536":1}}],["本质上也是同理心与批判性思维的结合",{"2":{"366":1}}],["本质上都是在",{"2":{"359":1}}],["本质上都是在性能",{"2":{"55":1}}],["本质上与软件设计中",{"2":{"271":1}}],["本质上就是",{"2":{"437":1}}],["本质上就是为了",{"2":{"382":1}}],["本质上就是判断某个具体的值是否落在类型所对应的集合之中",{"2":{"227":1}}],["本质上就是一种显式契约",{"2":{"179":1}}],["本质上是理解数据",{"2":{"598":1}}],["本质上是为我们展现了一个软件工程的",{"2":{"539":1}}],["本质上是通过清晰的语法结构",{"2":{"509":1}}],["本质上是让",{"2":{"415":1,"438":1}}],["本质上是从",{"2":{"403":1}}],["本质上是一件极其消耗系统资源",{"2":{"621":1}}],["本质上是一部不断通过",{"2":{"525":1}}],["本质上是一种寻找",{"2":{"365":1}}],["本质上是一个超级",{"2":{"358":1}}],["本质上是将工程质量的保障从",{"2":{"326":1}}],["本质上是整个工程界对于",{"2":{"303":1}}],["本质上是对应用随时间变化产生的差异的建模",{"2":{"173":1}}],["本质上是在升级我们资深的",{"2":{"598":1}}],["本质上是在学习如何利用",{"2":{"491":1}}],["本质上是在掌握一种确定性",{"2":{"316":1}}],["本质上是在",{"2":{"54":1}}],["本质权衡",{"2":{"25":1,"29":1,"33":1,"38":1,"43":1}}],["本章将剖析",{"2":{"48":1}}],["通识教育是相当重要的",{"2":{"1017":1}}],["通道",{"2":{"790":1,"966":1}}],["通道调整",{"2":{"677":2}}],["通义等低成本模型的场景",{"2":{"568":1}}],["通义千问驱动",{"2":{"518":1}}],["通义千问",{"2":{"510":1,"512":2,"522":1,"559":1}}],["通勤路上听知识",{"2":{"515":1}}],["通俗易懂的方式呈现",{"2":{"494":1}}],["通讯软件",{"2":{"465":1}}],["通读",{"2":{"362":1}}],["通读保罗",{"2":{"357":1}}],["通用思路",{"2":{"962":1}}],["通用渲染指令",{"2":{"939":1}}],["通用路径",{"2":{"797":1}}],["通用对象池工厂",{"2":{"735":1}}],["通用对话",{"2":{"522":1}}],["通用入口",{"2":{"706":1}}],["通用逻辑",{"2":{"706":1}}],["通用工具集",{"2":{"819":1}}],["通用工具与核心引擎",{"2":{"735":1}}],["通用工具函数库",{"2":{"706":1}}],["通用工具函数",{"2":{"677":1,"851":1,"939":2}}],["通用工具",{"2":{"647":1,"819":1}}],["通用辅助函数",{"2":{"647":1}}],["通用接口",{"2":{"440":1}}],["通用接口和类的设计",{"2":{"256":1}}],["通用型",{"2":{"419":1}}],["通用",{"0":{"414":1},"2":{"414":1,"763":3}}],["通用模块定义",{"2":{"298":1}}],["通用类型",{"2":{"274":1}}],["通用的函数和组件",{"2":{"270":1}}],["通用的数据库操作函数",{"2":{"269":1}}],["通用的数据处理函数",{"2":{"266":1}}],["通用的配置对象类型",{"2":{"262":1}}],["通用场景",{"2":{"263":1}}],["通用数据绑定引擎接口",{"2":{"951":1}}],["通用数据绑定引擎",{"0":{"946":1}}],["通用数据绑定",{"2":{"938":1}}],["通用数据容器",{"2":{"261":1}}],["通用数据结构的实现",{"2":{"256":1}}],["通用语言",{"2":{"103":1}}],["通知视图更新",{"2":{"946":1}}],["通知订阅者",{"2":{"941":1}}],["通知用户",{"2":{"489":1}}],["通知客户端",{"2":{"163":1}}],["通知底层断开连接",{"2":{"149":1}}],["通知交易结果",{"2":{"120":1}}],["通信层",{"2":{"849":1,"850":1}}],["通信基建",{"2":{"342":2}}],["通信",{"2":{"292":1,"336":1,"858":1}}],["通信复杂",{"2":{"287":1}}],["通信机制",{"2":{"286":1}}],["通信协议体系中的定位尚不清晰",{"2":{"156":1}}],["通信协议全景",{"2":{"133":1,"156":1}}],["通信双方会进入全双工对等传输状态",{"2":{"115":1}}],["通信必须由客户端发起请求",{"2":{"103":1}}],["通信的稳固基石",{"2":{"103":1}}],["通信的基石",{"0":{"103":1}}],["通信方案",{"2":{"102":1}}],["通常内嵌在组件内",{"2":{"959":1}}],["通常运行在远程服务器上",{"2":{"933":1}}],["通常已加入",{"2":{"571":1}}],["通常会面临",{"2":{"468":1}}],["通常会设置一个最大等待时间",{"2":{"159":1}}],["通常利用外部向量数据库",{"2":{"410":1}}],["通常通过利用外部向量存储与快速检索来实现",{"2":{"408":1}}],["通常用于客户端从服务端加载数据",{"2":{"342":1}}],["通常用于模块只包含一个核心功能",{"2":{"311":1}}],["通常就是拆分的信号",{"2":{"329":1}}],["通常需要配合",{"2":{"958":1}}],["通常需要通过",{"2":{"320":1}}],["通常需要编写两个独立函数",{"2":{"255":1}}],["通常涉及多个领域对象",{"2":{"278":1}}],["通常不需要启用",{"2":{"216":1}}],["通常不是最优选择",{"2":{"25":1}}],["通常是针对某个特定的任务而言的",{"2":{"1017":1}}],["通常是稀疏的",{"2":{"1015":1}}],["通常是共享库",{"2":{"216":1}}],["通常是第三方应用",{"2":{"119":1}}],["通常配合",{"2":{"203":1}}],["通常将",{"2":{"202":1}}],["通常使用",{"2":{"163":1}}],["通常",{"2":{"131":1,"873":1}}],["通常只能发起",{"2":{"131":1}}],["通常只有",{"2":{"23":1}}],["通常为",{"2":{"125":1}}],["通常可借助",{"2":{"83":1}}],["通过构建稳健的心智模型来应对不稳定的大环境",{"2":{"1034":1}}],["通过构建黄金测试集",{"2":{"550":1}}],["通过控制饮食",{"2":{"1026":1}}],["通过病态方程组",{"2":{"1014":1}}],["通过环境变量判断使用哪种格式",{"2":{"994":1}}],["通过流程图",{"2":{"986":1}}],["通过流式日志",{"2":{"491":1}}],["通过检测环境变量",{"2":{"985":1}}],["通过检索工具",{"2":{"411":1}}],["通过语言约束",{"2":{"975":1}}],["通过可组合的技能",{"2":{"973":1}}],["通过引入",{"2":{"971":1}}],["通过引导用户在产品中积累数据",{"2":{"398":1}}],["通过类名强制约束团队遵循第一层定义的",{"2":{"967":1}}],["通过类名组合实现样式",{"2":{"340":1}}],["通过工具类",{"2":{"965":1}}],["通过配置对象来映射对应的",{"2":{"964":1}}],["通过组合这些",{"2":{"962":1}}],["通过增加选择器特异性在底层",{"2":{"961":1}}],["通过添加变量",{"2":{"958":1}}],["通过添加语义化类名",{"2":{"340":1}}],["通过严格的命名约定",{"2":{"957":1}}],["通过分析",{"2":{"935":1}}],["通过声明式",{"2":{"933":1}}],["通过系统提示词定义",{"2":{"918":1}}],["通过浏览器扩展",{"2":{"858":1}}],["通过命令行快速使用网站功能",{"2":{"843":1}}],["通过双向链表",{"2":{"826":1}}],["通过纯算术方式模拟浏览器的断行行为",{"2":{"797":1}}],["通过跳过",{"2":{"784":1}}],["通过遍历场景树进行射线检测",{"2":{"769":1}}],["通过节点图编译到",{"2":{"761":1}}],["通过树形结构组织",{"2":{"761":1}}],["通过树形节点结构提供对",{"2":{"670":1}}],["通过统一",{"2":{"758":1}}],["通过统一的适配器模式抹平差异",{"2":{"901":2}}],["通过统一的",{"2":{"711":1}}],["通过简单的",{"2":{"729":1}}],["通过比较新旧数据索引数组",{"2":{"713":1}}],["通过抽象渲染后端",{"2":{"670":1}}],["通过渲染器工厂",{"2":{"649":1}}],["通过执行验证可行性",{"2":{"622":1}}],["通过执行验证选择",{"2":{"622":1}}],["通过思考判断信息价值",{"2":{"622":1}}],["通过重建",{"2":{"604":1}}],["通过重构深化领域模型",{"2":{"282":1}}],["通过识别成长的",{"2":{"603":1}}],["通过批判性思维与深度阅读夯实",{"2":{"603":1}}],["通过关键词匹配自动激活",{"2":{"592":1}}],["通过实现和接入",{"2":{"548":1}}],["通过近期社区活动的互动",{"2":{"509":1}}],["通过本次",{"2":{"509":1}}],["通过明确的",{"2":{"506":1}}],["通过对比试验",{"2":{"503":1}}],["通过对比学习",{"2":{"426":1}}],["通过编写和执行代码来处理复杂的数学计算",{"2":{"493":1}}],["通过标准化的插件流水线对其进行转化",{"2":{"969":1}}],["通过标准化的接口将",{"2":{"848":1}}],["通过标准化的协议",{"2":{"411":1}}],["通过标准化",{"2":{"491":1}}],["通过封装",{"2":{"490":1}}],["通过会话",{"2":{"478":1,"491":1}}],["通过搜索",{"2":{"470":1}}],["通过数据图表",{"2":{"468":1}}],["通过交互式引导",{"2":{"454":1}}],["通过规范驱动",{"2":{"440":1}}],["通过自动生成唯一的哈希类名来防止",{"2":{"960":1}}],["通过自动委派或手动调用",{"2":{"438":1}}],["通过自定义工具",{"2":{"491":1}}],["通过自定义",{"2":{"274":1}}],["通过回顾过去的失败经验来优化当下的决策",{"2":{"426":1}}],["通过回调机制解决浏览器端网络延迟问题",{"2":{"305":1}}],["通过模块化",{"2":{"812":1}}],["通过模块联邦或",{"2":{"286":1}}],["通过模型的自我审查来改进初步成果",{"2":{"426":1}}],["通过将散落的",{"2":{"456":1}}],["通过将推理",{"2":{"427":1}}],["通过将网关控制平面",{"2":{"419":1}}],["通过将历史对话拼接在当前的",{"2":{"410":1}}],["通过屏幕截图识别",{"2":{"414":1}}],["通过采用固定形态的交互界面和预定义有限域的任务",{"2":{"403":1}}],["通过不断学习和实践",{"2":{"399":1}}],["通过不断重构深化对领域的理解",{"2":{"277":1}}],["通过推出免费版",{"2":{"397":1}}],["通过与",{"2":{"353":1}}],["通过在底部提供",{"2":{"350":1}}],["通过内置的高性能工具",{"2":{"343":1}}],["通过合理使用类型导入",{"2":{"326":1}}],["通过事件通信",{"2":{"315":1}}],["通过参数传递依赖",{"2":{"315":1}}],["通过闭包创建私有作用域",{"2":{"298":1}}],["通过梳理一系列模块化编程的核心概念和实践技巧",{"2":{"293":1}}],["通过属性值定义",{"2":{"278":1}}],["通过以下关键理念指导开发",{"2":{"277":1}}],["通过定义接口规范数据结构",{"2":{"270":1}}],["通过定义接口来规范泛型参数必须包含的属性和方法",{"2":{"266":1}}],["通过限制泛型参数的类型范围",{"2":{"270":1}}],["通过泛型",{"2":{"256":1,"263":2}}],["通过这个号码我们就能确定是哪个人",{"2":{"230":1}}],["通过这一原则",{"2":{"201":1}}],["通过该字段自动收窄类型",{"2":{"230":1}}],["通过项目引用",{"2":{"207":1}}],["通过后",{"2":{"177":1}}],["通过缓冲区处理跨块边界的行分割问题",{"2":{"141":1}}],["通过一份全局可见的任务清单",{"2":{"430":1}}],["通过一次",{"2":{"113":1}}],["通过一个真实框架来验证理解",{"2":{"48":1}}],["通过精确匹配",{"2":{"92":1}}],["通过判断",{"2":{"89":1}}],["通过页面级",{"2":{"47":1}}],["通过邮箱魔法链接",{"2":{"16":1}}],["通过",{"2":{"15":1,"18":2,"20":2,"34":1,"36":1,"40":1,"53":1,"72":1,"75":1,"82":1,"92":1,"131":1,"138":2,"141":3,"150":1,"154":2,"173":1,"209":1,"216":1,"249":1,"264":1,"267":1,"268":1,"270":1,"278":2,"304":1,"321":1,"343":1,"394":1,"410":1,"411":1,"438":1,"449":1,"470":1,"472":2,"476":1,"485":1,"491":2,"494":2,"508":1,"551":1,"570":2,"591":1,"601":1,"602":1,"604":1,"639":1,"641":1,"652":1,"655":1,"661":1,"682":1,"683":1,"684":1,"685":1,"686":1,"708":1,"728":1,"729":1,"738":1,"741":1,"742":1,"744":1,"770":1,"771":1,"786":1,"803":1,"824":1,"825":1,"830":1,"831":1,"844":1,"848":2,"903":1,"912":1,"917":1,"919":1,"933":1,"934":1,"941":2,"942":1,"944":1,"947":1,"963":1,"965":1,"968":1,"971":2,"978":1,"982":1,"987":2,"997":1}}],["空行触发消息回调",{"2":{"892":1}}],["空行表示一个事件结束",{"2":{"143":1}}],["空白折叠行为",{"2":{"799":1}}],["空白字符规范化",{"2":{"795":1}}],["空白规范化",{"2":{"789":1,"790":1,"792":1,"795":1}}],["空白处理模式",{"2":{"805":1}}],["空白处理",{"2":{"786":1}}],["空白入口",{"2":{"706":1}}],["空间计算",{"2":{"777":1}}],["空间变换",{"2":{"777":1}}],["空间中的基础实体",{"2":{"766":1}}],["空间衰减",{"2":{"763":1}}],["空间音频",{"2":{"763":1}}],["空间组织",{"2":{"679":1}}],["空对象元素",{"2":{"735":1}}],["空集与任何东西的交集是空集",{"2":{"244":1}}],["空集",{"2":{"227":2,"237":1}}],["空数据",{"0":{"199":1}}],["空",{"2":{"23":1}}],["↓",{"2":{"23":4,"27":4,"31":3,"35":6,"40":4,"143":4,"166":2}}],["例如预订特色餐厅时的偏好收集",{"2":{"934":1}}],["例如浮动图片绕排",{"2":{"802":1}}],["例如折线图在",{"2":{"714":1}}],["例如12小时进食窗口",{"2":{"605":1}}],["例如10",{"2":{"162":1}}],["例如专注于技术资讯处理的知识管理助手",{"2":{"547":1}}],["例如利用前端技术栈快速构建高价值的浏览器插件",{"2":{"542":1}}],["例如将诗词中的意象自动生成关系图谱或配图",{"2":{"509":1}}],["例如仅授予数据库的只读权限",{"2":{"438":1}}],["例如要求",{"2":{"435":1}}],["例如发送邮件",{"2":{"411":1}}],["例如精细化精算法投放广告",{"2":{"398":1}}],["例如月费",{"2":{"397":1}}],["例如高额的年费",{"2":{"397":1}}],["例如构建用户的网络效应",{"2":{"393":1}}],["例如涨价会被对方借低价抢占市场份额",{"2":{"392":1}}],["例如解释",{"2":{"181":1}}],["例如服务器发送",{"2":{"138":1}}],["例如前",{"2":{"128":1}}],["例如包含大量配置面板",{"2":{"99":1}}],["例如",{"2":{"23":1,"159":1,"162":1,"203":1,"254":2,"255":1,"366":4,"394":1,"400":2,"414":1,"415":2,"418":1,"437":2,"442":1,"451":1,"596":1,"927":1,"960":1,"962":1,"971":1}}],["驱动型自动化平台",{"2":{"843":1}}],["驱动所有子动画的",{"2":{"831":1}}],["驱动属性动画",{"2":{"822":1}}],["驱动主循环",{"2":{"822":1,"826":1}}],["驱动css过渡",{"2":{"819":1}}],["驱动动画的逐帧数值变化",{"2":{"738":1}}],["驱动渲染",{"2":{"641":1}}],["驱动编程",{"2":{"542":1}}],["驱动代码生成",{"2":{"540":1}}],["驱动的极速静态网站生成器",{"2":{"1003":1}}],["驱动的自动引导",{"2":{"975":1}}],["驱动的自我修正与质量收敛",{"2":{"535":1}}],["驱动的响应式数据绑定",{"2":{"946":1}}],["驱动的数据绑定引擎",{"2":{"939":1}}],["驱动的通用绑定",{"2":{"935":1}}],["驱动的应用获得更丰富交互体验的普通用户",{"2":{"933":1}}],["驱动的",{"2":{"784":1}}],["驱动的渲染引擎",{"2":{"645":1}}],["驱动的信息聚合与分析引擎",{"2":{"632":1}}],["驱动的团队研发流",{"2":{"568":1}}],["驱动的研发流",{"2":{"568":1}}],["驱动的新纪元里",{"2":{"420":1}}],["驱动的高性能构建工具",{"2":{"343":1}}],["驱动",{"2":{"22":1,"54":1,"518":2,"542":2,"770":1,"822":1,"936":1,"939":2,"978":1}}],["使命让我们按照自己的心意",{"2":{"1006":1}}],["使命和角色这三样东西",{"2":{"1006":1}}],["使命与角色示意树",{"2":{"1006":1}}],["使算法适配",{"2":{"796":1}}],["使设计稿",{"2":{"728":1}}],["使下一次决策更符合预期",{"2":{"414":1}}],["使",{"2":{"411":1}}],["使开发更高效",{"2":{"343":1}}],["使得在",{"2":{"670":1}}],["使得代码更加可靠和可维护",{"2":{"338":1}}],["使得网页设计更加灵活和可维护",{"2":{"338":1}}],["使得客户端能够精准地拆分出每一条业务事件",{"2":{"109":1}}],["使代码能够在多种类型上安全运行",{"2":{"252":1}}],["使该项目可被其他项目引用",{"2":{"213":1}}],["使其成为一个能够自主写代码的",{"2":{"411":1}}],["使其输出精准且可控",{"2":{"367":1}}],["使其在以下场景中无可替代",{"2":{"106":1}}],["使其可以通过网络访问",{"2":{"21":1}}],["使页面可交互",{"2":{"26":1}}],["使用鸡胸肉",{"2":{"1047":1}}],["使用比较清晰的清单和日程表来协助重要事务的推动",{"2":{"1040":1}}],["使用清单",{"2":{"1036":1}}],["使用量分析工具",{"2":{"980":1}}],["使用方式",{"2":{"962":1}}],["使用方必须实现此接口来集成",{"2":{"662":1}}],["使用变量统一管理设计令牌",{"2":{"958":1}}],["使用本地组件目录映射渲染为原生",{"2":{"934":1}}],["使用的",{"2":{"898":1}}],["使用的模型",{"2":{"482":1}}],["使用标准",{"2":{"881":1}}],["使用标签",{"2":{"331":1}}],["使用指南",{"2":{"851":2}}],["使用预置适配器",{"2":{"844":1,"870":1}}],["使用预计算的字形级",{"2":{"797":1}}],["使用内置技能快速操作网站",{"2":{"843":1}}],["使用迭代器式",{"2":{"802":1}}],["使用简化的老式行走器",{"2":{"797":1}}],["使用手册",{"2":{"763":1}}],["使用了元编程技术",{"2":{"685":1}}],["使用可验证的表述",{"2":{"578":1}}],["使用强模型",{"2":{"550":1}}],["使用优雅的诗词形式来介绍你自己",{"2":{"506":1}}],["使用默认",{"2":{"506":1,"879":1}}],["使用加粗字体与换行格式",{"2":{"506":2}}],["使用表格整理对比数据",{"2":{"472":1}}],["使用祈使句",{"2":{"451":1}}],["使用提供参数创建新项目",{"2":{"449":1}}],["使用结构化的",{"2":{"449":1}}],["使用习惯",{"2":{"391":2}}],["使用某功能的用户留存率更高",{"2":{"366":1}}],["使用语义化版本控制",{"2":{"331":1}}],["使用全大写和下划线",{"2":{"330":1}}],["使用帕斯卡命名",{"2":{"330":2}}],["使用驼峰命名",{"2":{"330":3}}],["使用小写字母和连字符",{"2":{"330":1}}],["使用import",{"2":{"318":1}}],["使用export",{"2":{"318":1}}],["使用事件机制",{"2":{"315":1}}],["使用as关键字重命名导出",{"2":{"310":1}}],["使用现代构建工具",{"2":{"308":1}}],["使用同步的",{"2":{"304":1}}],["使用数学工具模块",{"2":{"295":1}}],["使用懒加载和预加载策略",{"2":{"291":1}}],["使用命名空间前缀",{"2":{"291":1}}],["使用模块联邦的",{"2":{"291":1}}],["使用自定义元素封装子应用",{"2":{"287":1}}],["使用发布",{"2":{"286":1}}],["使用领域事件解耦",{"2":{"281":1}}],["使用值对象封装业务规则",{"2":{"281":1}}],["使用约束时",{"2":{"263":1}}],["使用有意义的名称能让代码自描述性更强",{"2":{"263":1}}],["使用有意义的类型参数名",{"2":{"263":1}}],["使用泛型容器存储不同类型的数据",{"2":{"261":1}}],["使用泛型接口处理响应",{"2":{"260":1}}],["使用泛型函数查找用户",{"2":{"259":1}}],["使用时的体验",{"2":{"964":1}}],["使用时",{"2":{"249":1,"959":1}}],["使用场景",{"2":{"210":1,"447":1}}],["使用更易读的格式",{"2":{"203":1}}],["使用计数器作为简单示例",{"2":{"153":1}}],["使用生成器函数",{"2":{"143":1}}],["使用示例",{"2":{"141":1,"203":1,"262":2,"266":1,"267":1,"268":1,"269":1}}],["使用轮询",{"2":{"127":1}}],["使用",{"2":{"18":1,"47":1,"53":1,"72":1,"88":1,"96":1,"125":1,"127":1,"131":1,"135":1,"141":1,"150":1,"153":1,"160":1,"163":1,"202":1,"203":5,"216":3,"225":1,"246":1,"255":1,"267":2,"286":3,"287":1,"291":2,"298":1,"305":2,"307":2,"308":1,"470":1,"472":3,"481":1,"504":3,"559":1,"573":1,"576":1,"582":1,"640":1,"653":1,"662":1,"686":1,"713":1,"729":1,"755":5,"799":1,"856":1,"859":1,"902":1,"919":1,"933":2,"942":1,"945":1,"958":1,"960":1,"964":2,"967":1,"968":1,"974":1,"994":1}}],["生理健康",{"2":{"1025":1}}],["生命周期测试",{"2":{"980":1}}],["生命周期钩子",{"2":{"851":1,"910":1}}],["生命周期状态",{"2":{"825":1}}],["生命周期",{"2":{"818":1}}],["生命周期管理",{"2":{"706":1,"819":1,"938":1}}],["生命周期回调",{"2":{"98":1,"777":1}}],["生活和减肥这件小事上",{"2":{"1047":1}}],["生活和一些出游都会呈现出是实实在在的益处",{"2":{"1043":1}}],["生活短板补充圈",{"2":{"1031":1}}],["生活中的数学思维",{"2":{"1015":3}}],["生活中的各项任务",{"2":{"515":1}}],["生活中有很多增强回路的示例",{"2":{"1007":1}}],["生活质量本质上取决于相互依赖",{"2":{"1006":1}}],["生活与垂直领域",{"0":{"407":1}}],["生活里的经济学洞察",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1}}],["生效的时刻",{"2":{"371":1}}],["生产力基石与标准协议",{"0":{"967":1},"2":{"965":1}}],["生产力主轴",{"2":{"965":1}}],["生产力工具",{"2":{"476":1}}],["生产构建",{"2":{"836":1}}],["生产环境可根据需要开启",{"2":{"203":1}}],["生产项目必备",{"2":{"203":1}}],["生产实践要点与完整示例",{"0":{"145":1},"1":{"146":1,"147":1,"148":1,"149":1,"150":1}}],["生日",{"2":{"184":1}}],["生视频应用的正常运行",{"2":{"132":1}}],["生视频等耗时较长",{"2":{"131":1}}],["生视频",{"2":{"124":1}}],["生图进度查询",{"2":{"167":1}}],["生图场景下更具性价比的通信方案",{"2":{"128":1}}],["生图平台的后端架构通常是彻底解耦的",{"2":{"126":1}}],["生图使用",{"2":{"125":1}}],["生图",{"2":{"123":1,"124":1,"131":1}}],["生成任务清单",{"2":{"999":1}}],["生成神器",{"2":{"971":1}}],["生成一个警告按钮",{"2":{"971":1}}],["生成与工程构建的底层基建",{"2":{"965":1}}],["生成餐厅搜索",{"2":{"949":1}}],["生成子组件列表",{"2":{"946":1}}],["生成质量评估",{"2":{"939":1}}],["生成逻辑",{"2":{"939":1}}],["生成纯",{"2":{"939":1}}],["生成层",{"2":{"938":2}}],["生成包含餐厅列表",{"2":{"934":1}}],["生成能力",{"2":{"933":1}}],["生成缺乏统一标准",{"2":{"933":1}}],["生成核心",{"0":{"915":1}}],["生成目标着色器代码",{"2":{"770":1}}],["生成着色器代码",{"2":{"765":1}}],["生成多达",{"2":{"751":1}}],["生成变形后的新形状路径",{"2":{"744":1}}],["生成引擎",{"2":{"685":1}}],["生成大量分析数据",{"2":{"592":1}}],["生成覆盖率",{"2":{"583":1}}],["生成更新日志",{"2":{"583":1}}],["生成式交互",{"2":{"543":1}}],["生成式",{"2":{"543":1}}],["生成单元测试",{"2":{"537":1}}],["生成代码并实时预览",{"2":{"561":1}}],["生成代码",{"2":{"531":1,"770":1,"1000":1}}],["生成初稿",{"2":{"528":1}}],["生成笔记与任务清单",{"2":{"515":1}}],["生成图表",{"2":{"471":1,"472":1}}],["生成图表和可视化",{"2":{"436":1}}],["生成阶段",{"2":{"426":1}}],["生成直观的图表",{"2":{"416":1}}],["生成摘要时",{"2":{"628":1}}],["生成摘要答案",{"2":{"518":1}}],["生成摘要的技能",{"2":{"470":1}}],["生成摘要",{"2":{"412":1}}],["生成分析报告初稿",{"2":{"406":1}}],["生成器",{"2":{"403":1}}],["生成答案的能力",{"2":{"367":1}}],["生成组件或数据结构的快照",{"2":{"225":1}}],["生成可执行闭包",{"2":{"946":1}}],["生成可视化图表",{"2":{"471":1}}],["生成可指导编程的实现规范",{"2":{"177":1}}],["生成可部署的产物",{"2":{"21":1}}],["生成规范",{"2":{"177":2}}],["生成完毕后",{"2":{"126":1}}],["生成完整带内容的",{"2":{"27":1}}],["生成完整",{"2":{"26":1}}],["生成唯一",{"2":{"126":1}}],["生成流水线",{"2":{"99":1}}],["生成",{"2":{"61":1,"203":5,"208":1,"409":1,"426":1,"453":1,"470":3,"471":4,"472":1,"499":1,"515":1,"535":1,"561":2,"730":1,"763":1,"766":1,"790":3,"851":1,"933":1,"938":1,"941":1,"965":1,"971":1}}],["生成的深度分析报告",{"2":{"637":1}}],["生成的大体量代码",{"2":{"533":1}}],["生成的代码不是随机",{"2":{"532":1}}],["生成的图表不仅准确",{"2":{"475":1}}],["生成的可视化图表",{"2":{"471":1}}],["生成的子任务是基于当前环境反馈的",{"2":{"425":1}}],["生成的东西",{"2":{"359":1}}],["生成的答案",{"2":{"350":1}}],["生成的模块使用",{"2":{"203":1}}],["生成的页面时",{"2":{"53":1}}],["生成的",{"0":{"359":1},"2":{"51":1,"499":1}}],["生成次数",{"2":{"45":1}}],["生成时机",{"2":{"45":1}}],["生成静态版本无疑是更为高效的方式",{"2":{"171":1}}],["生成静态",{"2":{"35":2}}],["生成静态页面",{"2":{"34":1}}],["生成所有页面的静态",{"2":{"31":1}}],["生态下更完美的实践模式",{"2":{"971":1}}],["生态和",{"2":{"971":1}}],["生态最优解",{"2":{"965":1}}],["生态最成熟",{"2":{"642":1}}],["生态最成熟的",{"2":{"565":1}}],["生态介绍",{"2":{"939":1}}],["生态友好",{"2":{"881":1}}],["生态无缝衔接",{"2":{"561":1}}],["生态成熟",{"2":{"522":2}}],["生态集成",{"2":{"521":1}}],["生态完善",{"2":{"512":1}}],["生态开放",{"2":{"512":1}}],["生态深度整合",{"2":{"511":1}}],["生态系统",{"2":{"398":1,"434":1}}],["生态重度依赖团队",{"2":{"344":1}}],["生态庞大",{"2":{"341":1}}],["生态活跃",{"2":{"341":1}}],["生态稳定",{"2":{"341":1}}],["生态的解法",{"2":{"965":2}}],["生态的通用标准",{"2":{"316":1}}],["生态的基石",{"0":{"304":1},"2":{"321":1}}],["生态极其丰富",{"2":{"308":1}}],["生态丰富",{"2":{"287":1}}],["生态不成熟",{"2":{"287":1}}],["生态中常用且成熟的实践模式",{"2":{"971":1}}],["生态中",{"2":{"97":1}}],["生态",{"2":{"6":2,"440":1,"441":1,"901":1,"968":2,"971":3}}],["×ai",{"2":{"554":2,"1001":2}}],["×",{"2":{"21":1,"55":1,"249":1,"365":1,"462":2,"769":1,"792":2,"793":1,"819":1,"1000":2}}],["一直到",{"2":{"1047":1}}],["一直有职员在玩",{"2":{"1016":1}}],["一方面来总结下前几个阶段的操作",{"2":{"1043":1}}],["一方面在后台精准计算",{"2":{"493":1}}],["一批又一批的大学生陆续走出校门进入社会大舞台",{"2":{"1043":1}}],["一群比较合得来的学生仅仅凭借几成勇气就在业余时间集中到一个物理空间内去捣鼓一些东西",{"2":{"1041":1}}],["一部分时间居家远程办公",{"2":{"1039":1}}],["一人只能押大",{"2":{"1016":1}}],["一天一个样",{"2":{"963":1}}],["一天内完成",{"2":{"461":2}}],["一致性测试用例",{"2":{"939":1}}],["一致性测试",{"2":{"939":1}}],["一致性难以保证",{"2":{"639":1}}],["一致",{"2":{"796":1}}],["一行文本的表示",{"2":{"793":1}}],["一维映射",{"2":{"706":1}}],["一维坐标轴",{"2":{"706":1}}],["一一对应",{"2":{"641":1}}],["一切信息不对称的表象之下",{"2":{"626":1}}],["一切行为都可以从数学本质上推导出来",{"2":{"250":1}}],["一无所知",{"2":{"609":1}}],["一扇望向万年文明的宏大坐标",{"2":{"604":1}}],["一起自动加载",{"2":{"575":1}}],["一起阅读",{"2":{"433":1}}],["一般都掌握了好的学习方法论",{"2":{"1017":1}}],["一般",{"2":{"565":2}}],["一般为",{"2":{"442":1}}],["一眼识破平庸与风险",{"2":{"539":1}}],["一百万匹马",{"2":{"539":1}}],["一体化",{"2":{"515":1}}],["一体化智能文档平台",{"2":{"515":1}}],["一步到位",{"2":{"515":1}}],["一笑倾人城",{"2":{"505":1}}],["一笑动山川",{"2":{"505":1}}],["一套逻辑",{"2":{"503":1}}],["一共",{"2":{"494":1,"495":1}}],["一开始就要做系统",{"2":{"459":1}}],["一开始往往是不受待见的",{"2":{"360":1}}],["一文中",{"2":{"441":1}}],["一些文章在撰写过程中",{"2":{"1002":1}}],["一些必须规避的反模式",{"0":{"970":1}}],["一些典型的应用场景",{"2":{"436":1}}],["一些旧版",{"2":{"107":1}}],["一段有逻辑的话",{"2":{"503":1}}],["一段段咬合起来",{"2":{"385":1}}],["一段时间下来",{"2":{"1016":1}}],["一段时间",{"2":{"162":1}}],["一周后",{"2":{"369":1}}],["一种描述请求数据方法的语法",{"2":{"342":1}}],["一种轻量的数据传输格式",{"2":{"61":1}}],["一目了然",{"2":{"297":1}}],["一组相关对象的集合",{"2":{"278":1}}],["一定是",{"2":{"268":1}}],["一份数据多种图表复用",{"2":{"702":1}}],["一份代码",{"2":{"308":1}}],["一份清晰的规范",{"2":{"177":1}}],["一份合格的状态必须",{"2":{"173":1}}],["一事一议",{"2":{"170":1}}],["一张高质量图片的生成可能需要",{"2":{"124":1}}],["一问一答",{"2":{"104":1}}],["一旦大环境发生变化",{"2":{"1042":1}}],["一旦转换为其他的表示方法后",{"2":{"1015":1}}],["一旦严格执行落地",{"2":{"1005":1}}],["一旦缓存",{"2":{"621":1}}],["一旦喧宾夺主",{"2":{"613":1}}],["一旦你了解了这些背景",{"2":{"609":1}}],["一旦你看懂了调节回路",{"2":{"387":1}}],["一旦发现",{"2":{"537":1}}],["一旦发现问题或异常情况",{"2":{"171":1}}],["一旦初始计划中的某一步在执行时受阻",{"2":{"423":1}}],["一旦形成博弈均衡",{"2":{"392":1}}],["一旦我们将变量放进时间轴里观察",{"2":{"384":1}}],["一旦找到那个令你产生深度兴趣的切入点",{"2":{"361":1}}],["一旦数据库驱动更换",{"2":{"328":1}}],["一旦数据传输完成",{"2":{"103":1}}],["一旦存在隐蔽缺陷",{"2":{"171":1}}],["一旦任务完成",{"2":{"164":1}}],["一旦有新数据",{"2":{"162":1}}],["一旦页面顶层被标记为客户端组件",{"2":{"62":1}}],["一句话概括",{"2":{"901":1}}],["一句话定位",{"2":{"639":1,"670":1,"757":1,"784":1,"843":1,"933":1,"973":1}}],["一句话提供的信息往往比你想象中要多",{"2":{"573":1}}],["一句话背景",{"2":{"573":1}}],["一句话做应用",{"2":{"561":1}}],["一句话描述",{"2":{"559":1}}],["一句话生成精美演示文稿",{"2":{"515":1}}],["一句话总结",{"2":{"75":1,"166":1,"526":1,"530":1,"534":1}}],["一句代码可以使所有以",{"2":{"98":1}}],["一并发送给浏览器",{"2":{"74":1}}],["一概不负责",{"2":{"59":1}}],["一半靠构建工具链的高效执行",{"2":{"54":1}}],["一半靠静态产物的缓存",{"2":{"54":1}}],["一次一个",{"2":{"987":1}}],["一次生成",{"2":{"936":1}}],["一次定义",{"2":{"583":1}}],["一次性昂贵的文本分析",{"2":{"788":1}}],["一次性分析+测量",{"2":{"786":1}}],["一次性的操作序列",{"2":{"585":1}}],["一次性需求",{"2":{"435":1}}],["一次性产物",{"2":{"38":1}}],["一次编写多处运行",{"2":{"759":1}}],["一次编写",{"2":{"270":1,"901":1,"985":1}}],["一次页面请求的完整流程",{"2":{"61":1}}],["一次构建",{"2":{"45":1}}],["一次",{"2":{"45":1}}],["一点点长出来",{"2":{"40":1}}],["一个包子",{"2":{"1045":1}}],["一个多月后惊奇地发现涨了",{"2":{"1043":1}}],["一个普通的打工人去延伸思考这些东西有什么用处呢",{"2":{"1041":1}}],["一个大学生在学好数学等基础学科的基础上",{"2":{"1031":1}}],["一个全面质量管理的思想基础和方法依据",{"2":{"1027":1}}],["一个被广为熟知的话题",{"2":{"1020":1}}],["一个专注于阅读体验的",{"2":{"1003":1}}],["一个探索全栈工程",{"2":{"1002":1}}],["一个应用可以同时存在多个",{"2":{"942":1}}],["一个人在学习时所使用的方式",{"2":{"1017":1}}],["一个人越早学会将",{"2":{"1013":1}}],["一个人一旦被哀怨情绪控制",{"2":{"612":1}}],["一个人就是一支队伍",{"2":{"557":1}}],["一个人就能打通创意",{"2":{"457":1}}],["一个直观的场景选择",{"2":{"592":1}}],["一个完整的包",{"2":{"585":1}}],["一个命令只做一件事",{"2":{"583":1}}],["一个命令文件由",{"2":{"581":1}}],["一个文件只讨论一个主题",{"2":{"578":1}}],["一个简单的判断标准",{"2":{"577":1,"588":1}}],["一个基于",{"2":{"573":1}}],["一个账号解决所有模型接入",{"2":{"523":1}}],["一个擅长创作诗歌",{"2":{"499":1}}],["一个聊天机器人",{"2":{"465":1}}],["一个浏览器插件",{"2":{"465":1}}],["一个想法到可用产品可能需要数周甚至数月",{"2":{"461":1}}],["一个具体的",{"0":{"451":1}}],["一个具备复合能力的人才或许只需一个周末就能完成原型的搭建与验证",{"2":{"361":1}}],["一个达到工程交付标准的",{"2":{"450":1}}],["一个强大的",{"2":{"440":1}}],["一个最核心的问题往往萦绕在开发者和用户的脑海中",{"2":{"434":1}}],["一个能在复杂业务中持久生存的智能体",{"2":{"433":1}}],["一个成熟的",{"2":{"408":1,"434":1}}],["一个成功的产品决策",{"2":{"363":1}}],["一个页面上有几个按钮",{"2":{"383":1}}],["一个好的新想法",{"2":{"360":1}}],["一个用于构建高效",{"2":{"344":1}}],["一个设计良好的",{"2":{"337":1,"444":1}}],["一个模块应当有且只有一个被改变的原因",{"2":{"327":1}}],["一个模块状态改变",{"2":{"302":1}}],["一个真正掌握了泛型的开发者",{"2":{"271":1}}],["一个真实的",{"2":{"59":1}}],["一个栈不应该只能存储",{"2":{"256":1}}],["一个新对象只要拥有所有要求的属性",{"2":{"236":1}}],["一个清晰的设计规范",{"2":{"180":1}}],["一个组件只负责渲染一块特定的视觉或封装一类特定的交互",{"2":{"170":1}}],["一个负责赋予交互",{"2":{"56":1}}],["一个负责产出",{"2":{"56":1}}],["一个典型的前端分层架构通常包含以下核心层次",{"2":{"274":1}}],["一个典型的",{"0":{"48":1},"1":{"49":1,"50":1,"51":1,"52":1,"53":1,"54":1}}],["一个",{"2":{"21":1,"190":1,"255":1,"358":1,"411":1,"535":1,"856":1,"983":1}}],["一键完成",{"2":{"583":1}}],["一键触发复杂的自动化操作",{"2":{"579":1}}],["一键心流",{"2":{"565":1}}],["一键补全代码",{"2":{"564":1}}],["一键生成精美演示文稿",{"2":{"515":1}}],["一键跳回",{"2":{"370":1}}],["一键上线",{"0":{"17":1}}],["一键部署至",{"2":{"59":1}}],["一键部署",{"2":{"7":1,"11":1,"561":1}}],["迭代内当前时间",{"2":{"834":1}}],["迭代进度",{"2":{"834":1}}],["迭代器模式",{"2":{"797":1,"806":1}}],["迭代器+无字符串分配",{"2":{"786":1}}],["迭代式错误收敛",{"2":{"535":1}}],["迭代",{"2":{"20":1,"827":1}}],["对做饭这件小事也起到了促进作用",{"2":{"1047":1}}],["对笔者来说取得了一些比较大的进步",{"2":{"1047":1}}],["对习惯的养成起到了一定的正向作用",{"2":{"1045":1}}],["对自然认知不断细化",{"2":{"1042":1}}],["对打工人来讲其实就是一部分时间在办公室工作",{"2":{"1039":1}}],["对这个话题或阅读工具感兴趣的朋友可以看下凯文凯利在几年前写的",{"2":{"1032":1}}],["对这部分答案感兴趣的读者",{"2":{"1006":1}}],["对亚健康状态及疾病坚持预防为主",{"2":{"1025":1}}],["对新手的综合要求较高",{"2":{"964":1}}],["对不完整部分尝试",{"2":{"947":1}}],["对不确定性",{"2":{"617":1}}],["对接具体的",{"2":{"906":1}}],["对接所有",{"2":{"901":1}}],["对接企业自研系统",{"2":{"439":1}}],["对接企业的",{"2":{"439":1}}],["对每条消息调用的函数",{"2":{"899":1}}],["对每个圆圈进一步分解",{"2":{"1031":1}}],["对每个新",{"2":{"899":1}}],["对每个新字节块调用的函数",{"2":{"899":1}}],["对每个功能假设都要问",{"2":{"366":1}}],["对每个",{"2":{"92":1,"686":1,"899":2}}],["对形状路径进行动态变形",{"2":{"738":1,"744":1}}],["对齐到时间线的不同位置",{"2":{"831":1}}],["对齐比较数据",{"2":{"790":1}}],["对齐比较模型",{"2":{"790":1}}],["对齐比较逻辑",{"2":{"790":1}}],["对齐比较",{"2":{"790":2}}],["对齐比较页",{"2":{"790":1}}],["对齐",{"0":{"750":1},"2":{"677":1}}],["对所有项目生效",{"2":{"571":1}}],["对标",{"2":{"565":1}}],["对标准化要求高的项目",{"2":{"287":1}}],["对工程团队的真正馈赠",{"2":{"526":1}}],["对质量要求高的核心场景",{"2":{"523":1}}],["对仗工稳",{"2":{"507":1}}],["对创作出来的诗歌进行解读",{"2":{"506":1}}],["对指令的遵循度",{"2":{"506":1}}],["对收集到的信息进行深度分析与归纳",{"2":{"468":1}}],["对别人有效的",{"2":{"462":1}}],["对照用户需求和客观约束",{"2":{"426":1}}],["对成本敏感的轻量级场景",{"2":{"414":1}}],["对广告商的正外部性",{"2":{"399":1}}],["对用户的负外部性",{"2":{"399":1}}],["对特定群体提供优惠",{"2":{"397":1}}],["对使用习惯",{"2":{"391":1}}],["对抗泛滥",{"0":{"620":1}}],["对抗边际效用递减",{"2":{"398":1}}],["对抗边际效用递减增加用户活跃度",{"2":{"398":1}}],["对抗",{"0":{"378":1,"530":1},"1":{"531":1,"532":1,"533":1}}],["对过度设计的迷恋",{"2":{"365":1}}],["对投入产出比产生动摇",{"2":{"617":1}}],["对投入产出比",{"2":{"365":1}}],["对文章核心观点的梳理与个人思考",{"2":{"357":1}}],["对比自动检测并修正",{"2":{"786":1}}],["对比",{"2":{"706":1}}],["对比度调整",{"2":{"677":1}}],["对比一下三种扩展机制",{"2":{"590":1}}],["对比一下答案质量与来源引用",{"2":{"518":1}}],["对比效果再决定是否升级",{"2":{"523":1}}],["对比多家模型的首选",{"2":{"523":1}}],["对比数据",{"2":{"472":1}}],["对比维度",{"2":{"344":1}}],["对比缓存",{"2":{"85":1}}],["对模块化的增强",{"2":{"326":1}}],["对模块化编程的增强",{"2":{"272":1}}],["对偶性",{"0":{"242":1},"2":{"242":1}}],["对调用者无意义",{"2":{"196":1}}],["对外公共",{"0":{"835":1}}],["对外暴露特定的公共",{"2":{"821":1}}],["对外暴露统一的数据结构",{"2":{"87":1}}],["对外",{"0":{"693":1,"750":1,"778":1,"952":1}}],["对外提供查询接口",{"2":{"191":1}}],["对项目上下文的理解",{"2":{"177":1}}],["对内通过",{"2":{"170":1}}],["对实时性要求不高",{"2":{"167":1}}],["对话框",{"2":{"564":1}}],["对话助手",{"2":{"512":1}}],["对话风格开放",{"2":{"511":1}}],["对话循环",{"0":{"489":1},"2":{"490":1}}],["对话玩具",{"2":{"476":1}}],["对话中的迭代优化",{"2":{"435":1}}],["对话工具",{"2":{"410":1}}],["对话",{"0":{"420":1},"2":{"155":1,"902":1}}],["对话是致命的",{"2":{"107":1}}],["对象设计更灵活",{"2":{"881":1}}],["对象动画",{"2":{"812":1}}],["对象的最后事件",{"2":{"898":1}}],["对象的基类",{"2":{"769":1}}],["对象的结构",{"2":{"150":1}}],["对象状态缓存",{"2":{"768":1}}],["对象基类",{"2":{"763":1}}],["对象层级管理",{"2":{"762":1}}],["对象模型",{"2":{"761":1}}],["对象模型提供",{"2":{"742":1}}],["对象模型接口",{"2":{"742":1}}],["对象模型和事件系统",{"2":{"702":1}}],["对象组装",{"2":{"734":1,"735":1}}],["对象池系统核心",{"2":{"735":1}}],["对象池系统",{"2":{"735":1}}],["对象池模式",{"2":{"734":1,"768":1}}],["对象池",{"2":{"734":1}}],["对象池等",{"2":{"733":1}}],["对象池优化",{"2":{"730":1}}],["对象树",{"2":{"709":1}}],["对象暴露成员",{"2":{"304":1}}],["对象类型",{"2":{"268":1}}],["对象数组",{"2":{"210":1}}],["对象包含",{"2":{"144":1}}],["对象自带",{"2":{"141":1}}],["对象",{"2":{"135":1,"153":2,"679":1,"706":2,"713":1,"734":1,"743":2,"755":1,"759":1,"763":2,"819":1,"892":1,"898":1}}],["对象上",{"2":{"87":1}}],["对服务器整体吞吐压力最小",{"2":{"160":1}}],["对服务器极不友好",{"2":{"156":1}}],["对服务器的资源调度能力提出严峻考验",{"2":{"117":1}}],["对服务器并发处理能力提出了严峻挑战",{"2":{"103":1}}],["对现代轻量级构建极为友好",{"2":{"98":1}}],["对后端",{"2":{"91":1}}],["对",{"2":{"85":1,"125":1,"170":1,"318":1,"322":1,"376":1,"407":1,"507":3,"539":1,"967":1,"971":2,"1002":1}}],["对独立开发者和敏捷团队快速交付",{"2":{"71":1}}],["对应一个",{"2":{"766":1}}],["对应规则才会激活",{"2":{"576":1}}],["对应示例项目为",{"2":{"477":1}}],["对应的设计是",{"2":{"200":1}}],["对应的",{"2":{"138":1}}],["对应",{"2":{"138":3,"153":1,"650":1}}],["对应路由",{"2":{"65":1}}],["对应用也适用",{"2":{"21":1}}],["对于想要产出一些创造力或超预期效果的人来讲",{"2":{"1005":1}}],["对于仅需服务器推送的场景",{"2":{"881":1}}],["对于每种类型",{"2":{"828":1}}],["对于每天需要处理海量信息",{"2":{"348":1}}],["对于纯普通文本",{"2":{"797":1}}],["对于可断行的长段",{"2":{"796":1}}],["对于开发者和内容创作者而言",{"2":{"618":1}}],["对于开发者而言",{"2":{"20":1,"410":1,"420":1,"478":1}}],["对于好书",{"2":{"608":1}}],["对于绝大多数有着丰富",{"2":{"552":1}}],["对于不符合诗歌创作要求的问题",{"2":{"504":1}}],["对于重复性工作或涉及深厚专业知识的任务",{"2":{"435":1}}],["对于一个",{"2":{"421":1}}],["对于没有养成良好习惯的人来说",{"2":{"1005":1}}],["对于没有",{"2":{"411":1}}],["对于软件系统开发人员而言",{"2":{"403":1}}],["对于致力于通过技术提效的开发者而言",{"2":{"377":1}}],["对于技术背景的开发者",{"2":{"365":1}}],["对于知识工作者而言",{"2":{"356":1}}],["对于专注于产品迭代与业务增长的",{"2":{"342":1}}],["对于需要跨项目复用的公共模块",{"2":{"331":1}}],["对于大型企业级应用",{"2":{"292":1}}],["对于中小型项目",{"2":{"292":1}}],["对于简单通用的类型",{"2":{"263":1}}],["对于交叉类型",{"2":{"242":1}}],["对于联合类型",{"2":{"242":1}}],["对于同名属性",{"2":{"237":1}}],["对于更复杂的项目结构",{"2":{"216":1}}],["对于高频",{"2":{"115":1}}],["对于实时性要求高",{"2":{"103":1}}],["对于",{"2":{"83":1,"131":1,"146":2,"202":1,"237":2,"354":1,"537":1,"982":1}}],["对于第三方回调",{"2":{"71":1}}],["对于任何面向用户",{"2":{"25":1}}],["对性能要求高",{"2":{"19":1}}],["重读数学的乐趣",{"0":{"1010":1},"1":{"1011":1,"1012":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1}}],["重读",{"0":{"1006":1}}],["重回第",{"2":{"988":2}}],["重置到初始状态",{"2":{"825":1}}],["重置",{"2":{"796":1,"798":1}}],["重置为默认值",{"2":{"143":1}}],["重做",{"2":{"763":1}}],["重视庞大的",{"2":{"614":1}}],["重塑内心的宁静与独立判断的勇气",{"2":{"603":1}}],["重塑工程质量",{"0":{"550":1}}],["重工业",{"2":{"551":2}}],["重获",{"0":{"526":1},"1":{"527":1,"528":1,"529":1}}],["重内容外链",{"2":{"445":1}}],["重规划",{"2":{"429":1}}],["重交互体验的",{"2":{"344":1}}],["重",{"2":{"344":1}}],["重度依赖",{"2":{"342":1}}],["重度依赖服务器端计算的应用",{"2":{"19":1}}],["重构与工程管理",{"2":{"568":1}}],["重构与流程优化",{"2":{"467":1}}],["重构从",{"2":{"527":1}}],["重构民主化",{"2":{"527":1}}],["重构一段底层代码",{"2":{"388":1}}],["重构",{"0":{"374":1},"2":{"371":1,"451":1,"568":1,"587":1}}],["重构时的代码安全性极高",{"2":{"342":1}}],["重构代码生产方式与编程范式的今天",{"2":{"1001":1}}],["重构代码",{"2":{"315":1}}],["重构更安全",{"2":{"311":1}}],["重载签名",{"0":{"238":1}}],["重渲染",{"2":{"175":1}}],["重复",{"2":{"738":1}}],["重复器",{"2":{"737":1,"744":1}}],["重复器修饰器",{"2":{"735":1}}],["重复资讯推送",{"2":{"624":1}}],["重复性信息处理",{"2":{"465":1}}],["重复性的数字劳作中解放出来",{"2":{"420":1}}],["重复造轮子",{"2":{"297":1}}],["重复的次数就是最好的利器",{"2":{"1016":1}}],["重复的判断条件",{"2":{"186":1}}],["重复的头部开销会吞噬大量带宽",{"2":{"131":1}}],["重复触发",{"2":{"150":2}}],["重试机制",{"2":{"915":1}}],["重试配置",{"2":{"915":1}}],["重试连接前等待的重连间隔",{"2":{"898":1}}],["重试连接的主循环",{"2":{"889":1}}],["重试流程",{"0":{"895":1}}],["重试间隔",{"2":{"892":1}}],["重试",{"2":{"882":1,"891":1,"898":1}}],["重试逻辑",{"2":{"148":1,"883":1}}],["重试次数超限",{"2":{"146":1}}],["重试策略控制",{"2":{"889":1}}],["重试策略不可控",{"2":{"873":1}}],["重试策略",{"0":{"146":1},"2":{"150":1}}],["重试等逻辑完全接管",{"2":{"85":1}}],["重连",{"2":{"889":1}}],["重连机制",{"2":{"135":1,"142":1}}],["重连时如何恢复先前的",{"2":{"127":1}}],["重连间隔",{"2":{"109":1}}],["重计算异步任务",{"2":{"124":1}}],["重装",{"0":{"117":1}}],["重前端轻交互的现代",{"2":{"99":1}}],["重状态流转",{"2":{"99":1}}],["重点关注",{"2":{"591":1}}],["重点模块",{"2":{"474":1}}],["重点",{"2":{"95":1,"171":1}}],["重建",{"2":{"61":1,"819":1}}],["重要操作提示",{"2":{"962":1}}],["重要非紧急",{"2":{"602":1}}],["重要",{"2":{"54":1}}],["重新调整周末时间",{"2":{"1036":1}}],["重新理解与应用",{"2":{"1036":1}}],["重新拥有健康的身体后",{"2":{"1034":2}}],["重新发现了有趣的数学思维",{"0":{"1012":1},"1":{"1013":1,"1014":1,"1015":1,"1016":1,"1017":1}}],["重新创建",{"2":{"967":1}}],["重新读取当前值",{"2":{"834":1}}],["重新加载",{"2":{"663":1}}],["重新组织结构或调整细节",{"2":{"426":1}}],["重新开始",{"2":{"150":1}}],["重新验证",{"2":{"88":1}}],["重新渲染并更新缓存",{"2":{"85":1}}],["重新构建项目",{"2":{"17":1}}],["重新获取评论",{"2":{"16":1}}],["但触底反弹",{"2":{"1049":1}}],["但基本能够控制住整体继续下降的趋势",{"2":{"1047":1}}],["但控制饮食",{"2":{"1047":1}}],["但长期看对身体可能存在某些不好的地方",{"2":{"1046":1}}],["但伟人的很多习惯和优点适合当代年轻人学习",{"2":{"1043":1}}],["但由于早上",{"2":{"1043":1}}],["但由于笔者在第一阶段还处于救火阶段",{"2":{"1036":1}}],["但真的凭借着坚韧",{"2":{"1042":1}}],["但真实世界的绝大多数领域",{"2":{"614":1}}],["但最终实践的时候其实都初窥门径地用到了一些通识且有点哲学味道的",{"2":{"1042":1}}],["但最终收尾的时候多少都还流露出想要搞些有点创造力或者正能量的事情",{"2":{"1041":1}}],["但自由协作关系会越来越多",{"2":{"1041":1}}],["但自定义",{"2":{"493":1}}],["但国内很少有企业让员工能持续几天甚至一个月居家办公",{"2":{"1039":1}}],["但随着疫情的多次反复",{"2":{"1040":1}}],["但随着健康与业余自我充电相关的投入加大",{"2":{"1037":1}}],["但随着技术的演进",{"2":{"616":1}}],["但健身减肥的胜利果实也被巩固住了",{"2":{"1036":1}}],["但逼着自己执行",{"2":{"1036":1}}],["但没有多少实际的用处",{"2":{"1034":1}}],["但有些采用自由式阅读的人真的在某些方面比采用海绵式阅读的人优秀",{"2":{"1030":1}}],["但方法不会凭空从天上掉下来的",{"2":{"1023":1}}],["但终究只是最后的止损方式",{"2":{"1022":1}}],["但同样会结合实操给出自己的思考与总结",{"2":{"1020":1}}],["但本次漫谈会梳理下笔者自己在实操方面的尝试",{"2":{"1020":1}}],["但本质问题在于",{"2":{"616":1}}],["但重新找回后却很容易再次不被珍惜",{"2":{"1020":1}}],["但写文章是笔者觉得挺适合自己的一种方式",{"2":{"1019":1}}],["但他们大多坚信自己能搞出来通用人工智能",{"2":{"1018":1}}],["但笔者真的有这种偏向",{"2":{"1043":1}}],["但笔者想继续问的是",{"2":{"1029":1}}],["但笔者在这方面是有一定自信的",{"2":{"1020":1}}],["但笔者在连续坚持落地拆解出来的目标过程中",{"2":{"1005":1}}],["但笔者曾阅读过",{"2":{"1018":1}}],["但聚焦于某一特定任务并不是最好的方式",{"2":{"1017":1}}],["但当我们让模型去完成一些别的任务时",{"2":{"1017":1}}],["但当泛型用于特定领域时",{"2":{"263":1}}],["但很少有人能用这些比较简单的数学思维管理自己的时间与事务",{"2":{"1013":1}}],["但很难将决策树",{"2":{"1011":1}}],["但毕业走向工作岗位后",{"2":{"1011":1}}],["但也坚信",{"2":{"1031":1}}],["但也有其局限性",{"2":{"1009":1}}],["但也正因如此",{"2":{"610":1}}],["但问题的解决方案",{"2":{"1007":1}}],["但或多或少能找出优于当前状态的路径或答案",{"2":{"1005":1}}],["但目前的主流代码模型已经能非常熟练地处理这种拼接范式",{"2":{"971":1}}],["但至关重要的基石",{"2":{"969":1}}],["但无论选择哪种路径",{"2":{"965":1}}],["但无法直连",{"2":{"523":1}}],["但无法检查代码是否符合规范",{"2":{"219":1}}],["但技术选型没有绝对的",{"2":{"965":1}}],["但通过",{"2":{"960":1}}],["但核心入口是",{"2":{"737":1}}],["但影响子节点的渲染状态",{"2":{"680":1}}],["但增加了构建配置复杂度",{"2":{"673":1}}],["但需要额外",{"2":{"673":1}}],["但需注意幂等性处理与签名验证以确保安全",{"2":{"131":1}}],["但关键在于",{"2":{"619":1}}],["但与既有认知冲突的客观观点时",{"2":{"618":1}}],["但为什么真正跑通全栈并沉淀下来的人凤毛麟角",{"2":{"617":1}}],["但必须有所节制",{"2":{"613":1}}],["但书这种媒介与其他信息媒介相比",{"2":{"606":1}}],["但性质不同",{"2":{"592":1}}],["但如果审查工作由独立的",{"2":{"590":1}}],["但每次都要你提醒",{"2":{"588":1}}],["但每个仓储操作的实体类型各不相同",{"2":{"256":1}}],["但执行逻辑复杂的工作",{"2":{"587":1}}],["但进阶才是解药",{"2":{"552":1}}],["但守住",{"0":{"538":1}}],["但因为做起来太费功夫",{"2":{"528":1}}],["但价格较高",{"2":{"519":1}}],["但考虑到体验自家近期更新的能力",{"2":{"498":1}}],["但回归本质我们就会发现",{"2":{"496":1}}],["但代价也显而易见",{"2":{"457":1}}],["但是需要",{"2":{"425":1}}],["但是",{"2":{"424":1}}],["但是任务还没完",{"2":{"164":1}}],["但理性的微观经济学原理",{"2":{"400":1}}],["但深入思考",{"2":{"391":1}}],["但却共同构建了最美妙的世界万物",{"2":{"387":1}}],["但线段总有尽头",{"2":{"386":1}}],["但我们可觉得自己能很好地处理这种模式呢",{"2":{"1039":1}}],["但我们可以按其业务深度与协作范式将其归纳为五大形态",{"2":{"413":1}}],["但我们确实生活在一个相互依赖的社会",{"2":{"1006":1}}],["但我们不建议直接采用全自动化构建作为最终方案",{"2":{"171":1}}],["但我坚信直觉是经验在潜意识里的压缩算法",{"2":{"368":1}}],["但究竟是",{"2":{"366":1}}],["但用户只想要一个",{"2":{"366":1}}],["但好的",{"2":{"365":1}}],["但实现较低",{"2":{"365":1}}],["但实际上",{"2":{"351":1,"612":1}}],["但实际情况并非如此",{"2":{"238":1}}],["但实际只有一次网络请求",{"2":{"69":1}}],["但对于笔者存在很多不可行之处",{"2":{"1046":1}}],["但对于大多数工程师",{"2":{"363":1}}],["但对产品人而言",{"2":{"393":1}}],["但对复杂性的驾驭能力永远是工程师的核心竞争力",{"2":{"180":1}}],["但不会一味按照别人的建议来",{"2":{"1047":1}}],["但不会算高难度数学",{"2":{"408":1}}],["但不是本文的重点",{"2":{"1022":1}}],["但不要停留在一些似是而非的概念世界里",{"2":{"1007":1}}],["但不包括默认导出",{"2":{"312":1}}],["但不关心父组件如何处理",{"2":{"175":1}}],["但留在你脑海中那道划分模块职责的逻辑边界",{"2":{"303":1}}],["但模块之间的依赖关系不明确",{"2":{"298":1}}],["但要注意约束不能过度",{"2":{"263":1}}],["但具体的数据类型可能不同",{"2":{"256":1}}],["但它不足以指导大部人去实践",{"2":{"1025":1}}],["但它不是",{"2":{"361":1}}],["但它高度依赖开发者的自觉性",{"2":{"957":1}}],["但它让信息更聚焦",{"2":{"443":1}}],["但它已经具备了类型的语义",{"2":{"254":1}}],["但它们有本质区别",{"2":{"240":1}}],["但它们并非完整的解决方案",{"2":{"59":1}}],["但失去类型信息",{"2":{"253":1}}],["但类型层面不可互换",{"2":{"247":1}}],["但强烈推荐用于配置复用",{"2":{"210":1}}],["但兼容性可能有问题",{"2":{"203":1}}],["但过多依赖会导致",{"2":{"192":1}}],["但开发者预判",{"2":{"184":1}}],["但单向数据流的铁律绝不能被破坏",{"2":{"175":1}}],["但单次数据包极小的场景",{"2":{"103":1}}],["但现在你应该已经掌握了一套完整的解决方案",{"2":{"155":1}}],["但现实是",{"2":{"123":1}}],["但多了",{"2":{"144":1}}],["但数据可能跨越多个读取块",{"2":{"143":1}}],["但这样做有一个根本缺陷",{"2":{"608":1}}],["但这并不意味着",{"2":{"606":1}}],["但这仅仅是一个",{"2":{"504":1}}],["但这仅仅是构建",{"2":{"433":1}}],["但这恰恰违背了产品的核心逻辑",{"2":{"492":1}}],["但这种",{"2":{"437":1}}],["但这个简化实现存在明显问题",{"2":{"141":1}}],["但这些",{"2":{"54":1}}],["但其兼容性无与伦比",{"2":{"306":1}}],["但其局限性",{"2":{"140":1}}],["但其核心机制",{"2":{"41":1}}],["但二者完全可以协同工作",{"2":{"135":1}}],["但并非银弹",{"2":{"129":1}}],["但会将数据切分成一个个逻辑块",{"2":{"105":1}}],["但在结果返回方式上不同",{"2":{"915":1}}],["但在团队配置中这些是高风险操作",{"2":{"596":1}}],["但在公式中权重极高的变量",{"2":{"556":1}}],["但在交付的最后一公里",{"2":{"534":1}}],["但在格式的严格遵循上略显生硬",{"2":{"505":2}}],["但在随后整理笔记",{"2":{"457":1}}],["但在现实中",{"2":{"393":1}}],["但在现代工作流中",{"2":{"335":1}}],["但在现代",{"2":{"320":1}}],["但在今天",{"2":{"361":1}}],["但在编译时它是一个不同的类型",{"2":{"247":1}}],["但在",{"2":{"131":1,"155":1,"360":1,"553":1,"1001":1}}],["但在大规模分布式系统中依然是最稳健的选择",{"2":{"129":1}}],["但在生产环境中需要关注几个关键问题",{"2":{"121":1}}],["但在实践中仍应极力避免",{"2":{"315":1}}],["但在实际工程落地中",{"2":{"467":1}}],["但在实际落地场景中仍面临显著限制",{"2":{"419":1}}],["但在实际项目中",{"2":{"202":1}}],["但在实际架构设计中",{"2":{"112":1}}],["但在实时性要求较高的领域",{"2":{"102":1}}],["但在工程落地时必须关注",{"2":{"107":1}}],["但在应用层层面",{"2":{"103":1}}],["但带来了开箱即用的完整生态",{"2":{"98":1}}],["但只挑选出活跃用户",{"2":{"95":1}}],["但整个页面要等所有组件拼接完毕才统一发送",{"2":{"77":1}}],["但",{"2":{"77":1,"78":1,"98":1,"180":1,"402":1,"526":1,"528":1,"673":1,"1030":1}}],["但简单页面用",{"2":{"55":1}}],["但可以帮你解释问题情境",{"2":{"609":1}}],["但可以在需要时再请求加载技能正文",{"2":{"443":1}}],["但可以适当简化",{"2":{"281":1}}],["但可能会导致用户反感",{"2":{"369":1}}],["但可能影响类型安全",{"2":{"203":1}}],["但可",{"2":{"45":1}}],["但鉴于其前沿性",{"2":{"43":1}}],["但更新频率不至于需要每次请求都实时渲染的场景",{"2":{"38":1}}],["但水合本身也是一次额外的性能开销",{"2":{"29":1}}],["但复杂度高于传统架构",{"2":{"19":1}}],["但后端仅提供",{"2":{"4":1}}],["弥补原子类的短板",{"2":{"965":1}}],["弥补人类在极端环境下的认知局限",{"2":{"602":1}}],["弥补",{"2":{"19":1,"968":1}}],["谨慎选择",{"2":{"19":1}}],["不吃主食",{"2":{"1047":1}}],["不吃主食这个事情笔者个人之前没有尝试过",{"2":{"1046":1}}],["不乘坐电梯",{"2":{"1047":1,"1048":1}}],["不追星",{"2":{"1043":1}}],["不追求复杂的理论",{"2":{"1000":1}}],["不知置身于其中的你是否感慨过自己在阅历上从",{"2":{"1043":1}}],["不知道细心的朋友有没有发现",{"2":{"1041":1}}],["不知道如何科学地给孩子讲解",{"2":{"492":1}}],["不知道答案",{"2":{"492":1}}],["不区分事务大小",{"2":{"1037":1}}],["不区分优先级",{"2":{"1037":1}}],["不推荐的严格时间表",{"2":{"1036":1}}],["不好的事情如果已经到来",{"2":{"1022":1}}],["不怎么锻炼身体",{"2":{"1022":1}}],["不难理解",{"2":{"1020":1}}],["不难发现",{"2":{"468":1}}],["不止一次反思过之前的生活方式和入世模式",{"2":{"1043":1}}],["不止于代码",{"2":{"1001":1}}],["不止是",{"2":{"417":1}}],["不继承父会话的状态",{"2":{"988":1}}],["不存色值格式",{"2":{"966":1}}],["不存在这样的值",{"2":{"227":1}}],["不管别人怎么看待",{"2":{"1043":1}}],["不管文章最终的水平怎么样",{"2":{"1042":1}}],["不管项目多大",{"2":{"962":1}}],["不管是金钱",{"2":{"396":1}}],["不管是人生规划",{"2":{"386":1}}],["不改变你写的类名",{"2":{"961":1}}],["不匹配等问题",{"2":{"959":1}}],["不匹配的成员保留原类型",{"2":{"244":1}}],["不进行适配器发现",{"2":{"854":1}}],["不负责渲染",{"2":{"824":1}}],["不依赖任何第三方库",{"2":{"814":1}}],["不依赖shaderchunk|",{"2":{"771":1}}],["不构建文本字符串地遍历所有行",{"2":{"803":1}}],["不构建字符串",{"2":{"798":1}}],["不暴露内部结构",{"2":{"793":1}}],["不透明句柄",{"2":{"793":1}}],["不透明度",{"2":{"738":1,"743":2}}],["不间断",{"2":{"797":2}}],["不间断空格",{"2":{"795":1}}],["不间断胶合",{"2":{"786":1,"805":1}}],["不间断工作的",{"2":{"419":1}}],["不在其位就不谋其政",{"2":{"1041":1}}],["不在任务间暂停询问用户",{"2":{"988":1}}],["不在布局层范围",{"2":{"785":1}}],["不在集合中",{"2":{"229":1}}],["不打包进核心库",{"2":{"762":1}}],["不实现",{"2":{"731":1}}],["不阻塞主线程",{"2":{"730":1}}],["不阻塞",{"2":{"701":1}}],["不含任何运行时逻辑",{"2":{"906":1}}],["不含特定渲染器",{"2":{"763":1}}],["不含",{"2":{"679":1}}],["不含形状和滤镜",{"2":{"677":1}}],["不维护",{"2":{"677":1,"680":1}}],["不直接支持",{"2":{"667":1}}],["不直接使用其他工具",{"2":{"472":1}}],["不及格",{"2":{"655":2}}],["不熟悉前端但需要做后台页面的后端开发者",{"2":{"639":1}}],["不执行",{"2":{"622":2}}],["不思考+不执行",{"2":{"622":1}}],["不思考",{"2":{"622":2}}],["不愿放弃读书以外的把玩乐趣",{"2":{"613":1}}],["不断深化理解",{"2":{"610":1}}],["不断学习和实践",{"2":{"400":1}}],["不连贯的",{"2":{"610":1}}],["不但解决了周末饮食的主要问题",{"2":{"1045":1}}],["不但不会觉得枯燥",{"2":{"609":1}}],["不但能单枪匹马或带领极小团队中的人",{"2":{"542":1}}],["不掌握方法的后果",{"2":{"608":1}}],["不提交",{"2":{"596":1}}],["不处理未",{"2":{"581":1}}],["不该写的",{"2":{"572":1}}],["不中断",{"2":{"564":1}}],["不如自己思变",{"2":{"1034":1}}],["不如躺平",{"2":{"1034":1}}],["不如说是",{"2":{"626":1}}],["不如",{"2":{"620":1}}],["不如确保最终结果可验证",{"2":{"538":1}}],["不如尽早且频繁地公开自己的价值观和工作流",{"2":{"380":1}}],["不确定性",{"0":{"538":1}}],["不确定的生成",{"2":{"534":1}}],["不确定的随机性",{"2":{"525":1}}],["不得不做",{"2":{"526":1}}],["不划算",{"0":{"528":1},"2":{"525":1}}],["不用重写代码",{"2":{"523":1}}],["不计较成本优先质量",{"2":{"523":1}}],["不过还是采用了一个策略去反抗了下",{"2":{"1016":1}}],["不过是在脑中形成了一条模糊",{"2":{"610":1}}],["不过",{"2":{"510":1}}],["不传播错误价值观",{"2":{"494":1}}],["不涉及任何敏感话题",{"2":{"494":1}}],["不涉及动态数据的组件",{"2":{"40":1}}],["不影响代码运行的变动",{"2":{"451":1}}],["不影响功能的改动",{"2":{"451":1}}],["不影响其他页面",{"2":{"66":1}}],["不读取脚本源码",{"2":{"443":1}}],["不加载具体指令",{"2":{"443":1}}],["不加任何延迟",{"2":{"162":1}}],["不具备持久性",{"2":{"435":1}}],["不预设固定的执行路径",{"2":{"424":1}}],["不预设用户很聪明",{"2":{"366":1}}],["不替代核心岗位",{"2":{"406":1}}],["不能继续增加",{"2":{"1048":1}}],["不能写成",{"2":{"442":1}}],["不能有其他变体",{"2":{"442":1}}],["不能无限降低价格",{"2":{"394":1}}],["不能赋值给",{"2":{"247":1}}],["不能赋值给其他类型",{"2":{"203":1}}],["不感情用事",{"2":{"393":1}}],["不设",{"2":{"387":1}}],["不设层级",{"2":{"387":1}}],["不设置则所有文件平铺在",{"2":{"203":1}}],["不至于在低价值的代码堆里荒废时光",{"2":{"376":1}}],["不至于在天马行空中失重",{"2":{"376":1}}],["不只是被动响应指令",{"2":{"402":1}}],["不只是抱怨",{"2":{"370":1}}],["不只是共有的",{"2":{"239":1}}],["不舒服",{"2":{"370":1}}],["不谋而合",{"2":{"361":1}}],["不",{"2":{"360":1}}],["不触及核心业务",{"2":{"336":1}}],["不关心底层数据库的具体连接细节",{"2":{"328":1}}],["不分发",{"2":{"234":1}}],["不包含业务规则",{"2":{"278":1}}],["不包含任何值",{"2":{"227":1}}],["不包含",{"2":{"216":1}}],["不包含具体文件",{"2":{"212":1}}],["不允许执行的工具列表",{"2":{"482":1}}],["不允许",{"2":{"203":1}}],["不允许像普通流那样随心所欲地传输字符",{"2":{"109":1}}],["不编译",{"2":{"203":1}}],["不解析符号链接",{"2":{"203":1}}],["不输出",{"2":{"203":1}}],["不主动制造复杂",{"2":{"201":1}}],["不属于任何实体或值对象的领域逻辑",{"2":{"278":1}}],["不属于",{"2":{"200":1}}],["不应进入主会话",{"2":{"592":1}}],["不应该",{"2":{"1014":1}}],["不应该能执行命令",{"2":{"591":1}}],["不应该能修改文件",{"2":{"591":1}}],["不应该让",{"2":{"170":1}}],["不应只是被动响应人类指令的",{"2":{"414":1}}],["不应剃除",{"2":{"200":1}}],["不牺牲生产环境的性能",{"2":{"226":1}}],["不牺牲",{"2":{"200":3}}],["不符合原则",{"2":{"181":1}}],["不可信任",{"2":{"936":1}}],["不可变",{"2":{"278":1}}],["不可剃除",{"2":{"200":1}}],["不可为了",{"2":{"181":1}}],["不可忽视的约束",{"0":{"112":1}}],["不希望引入长连接管理复杂度",{"2":{"167":1}}],["不希望引入过重的状态机",{"2":{"100":1}}],["不立即响应",{"2":{"162":1}}],["不立刻返回",{"2":{"162":1}}],["不占用网络请求",{"2":{"160":1}}],["不妨提笔一试",{"2":{"505":1}}],["不妨跳出宏大叙事",{"2":{"465":1}}],["不妨在脑海里跑一遍这",{"2":{"389":1}}],["不妨停顿一秒",{"2":{"337":1}}],["不妨把它想象成",{"2":{"227":1}}],["不妨先问自己",{"2":{"155":1}}],["不妨回想",{"2":{"54":1}}],["不支持表达式会导致大量",{"2":{"731":1}}],["不支持",{"2":{"135":2,"142":2,"785":1}}],["不受此约束",{"2":{"135":1}}],["不一定要遵循",{"2":{"135":1}}],["不一致时",{"2":{"47":1}}],["不买最贵的",{"0":{"129":1},"1":{"130":1,"131":1}}],["不少人在学习了",{"2":{"123":1}}],["不再执着于手里有多少把锤子",{"2":{"1001":1}}],["不再活跃开发",{"2":{"939":1}}],["不再接受修改",{"2":{"939":1}}],["不再只是工具",{"2":{"569":1}}],["不再只是",{"2":{"567":1}}],["不再需要为每一个数据源",{"2":{"548":1}}],["不再推荐",{"2":{"341":2}}],["不再仅仅是一个模块协议",{"2":{"316":1}}],["不再满足于",{"2":{"271":1}}],["不再是当年在实验室或研究所里拿着裸机装软件的年代了",{"2":{"1041":1}}],["不再是壁垒",{"2":{"1001":1}}],["不再是全能选手",{"2":{"592":1}}],["不再是不可逾越的壁垒",{"2":{"376":1}}],["不再是拥有单一深厚技能的螺丝钉",{"2":{"361":1}}],["不再是",{"2":{"232":1}}],["不再是简单的",{"2":{"74":1}}],["不再承载",{"2":{"114":1}}],["不仅剥夺了",{"2":{"970":1}}],["不仅把功能做出来",{"2":{"556":1}}],["不仅意象提炼精准",{"2":{"508":1}}],["不仅显著提升了任务处理的天花板",{"2":{"467":1}}],["不仅提高了任务的完成上限",{"2":{"438":1}}],["不仅要关注",{"2":{"625":1}}],["不仅要进行用户访谈",{"2":{"396":1}}],["不仅要看用户价值",{"2":{"392":1}}],["不仅仅是工具",{"2":{"1001":1}}],["不仅仅是能写诗",{"2":{"509":1}}],["不仅仅是一本商业指南",{"2":{"381":1}}],["不仅仅是为模块添加了类型标注",{"2":{"317":1}}],["不仅因为设计",{"2":{"372":1}}],["不仅能显著提升任务处理的上限",{"2":{"468":1}}],["不仅能制定竞争策略",{"2":{"396":1}}],["不仅能锁定用户",{"2":{"392":1}}],["不仅能看到系统的各个要素",{"2":{"383":1}}],["不仅能做出来",{"2":{"363":1}}],["不仅能拿数据",{"2":{"95":1}}],["不仅听懂用户说",{"2":{"363":1}}],["不仅看平均响应时间",{"2":{"353":1}}],["不仅是为了习得技能",{"2":{"603":1}}],["不仅是最具性价比的切入点",{"2":{"552":1}}],["不仅是根据供求",{"2":{"397":1}}],["不仅是",{"2":{"342":1}}],["不仅保留了",{"2":{"135":1}}],["不仅会遭遇网关超时限制",{"2":{"131":1}}],["不仅违背了解耦原则",{"2":{"126":1}}],["不仅解决了",{"2":{"59":1}}],["不会被拆分到多行",{"2":{"799":1}}],["不会淘汰开发者",{"2":{"552":1}}],["不会是非黑即白的完全自动化",{"2":{"538":1}}],["不会跨对话自动保留",{"2":{"435":1}}],["不会污染全局空间",{"2":{"304":1}}],["不会过早陷入局部细节",{"2":{"171":1}}],["不会执着于",{"2":{"132":1}}],["不会替代",{"2":{"91":1}}],["不会发出无效请求",{"2":{"89":1}}],["不是通过",{"2":{"986":1}}],["不是通用公式",{"2":{"462":1}}],["不是把某段指令封装起来",{"2":{"589":1}}],["不是取代你的收割机",{"2":{"539":1}}],["不是所有任务都需要人工逐一审核",{"2":{"537":1}}],["不是让既有任务变快了",{"2":{"526":1}}],["不是让你成为数学家",{"2":{"400":1}}],["不是要你成为一个无所不能的孤胆英雄",{"2":{"466":1}}],["不是要取代人类的智慧",{"2":{"420":1}}],["不是替代品",{"2":{"462":1}}],["不是简单加法",{"0":{"458":1},"1":{"459":1,"460":1,"461":1,"462":1}}],["不是因为价格或房源",{"2":{"366":1}}],["不是在办公室想象",{"2":{"366":1}}],["不是将代码拆得零散",{"2":{"332":1}}],["不是",{"2":{"173":2,"268":1,"459":1,"1016":1}}],["不是一个传统的组件库",{"2":{"340":1}}],["不是一个",{"2":{"91":1}}],["不是偷懒",{"2":{"54":1}}],["不等待后端响应",{"2":{"88":1}}],["不等于",{"2":{"54":1}}],["不适合纯",{"2":{"964":1}}],["不适合",{"0":{"81":1}}],["不适合的场景",{"2":{"76":1}}],["不适用场景",{"2":{"19":1}}],["不必急于扩充团队规模",{"2":{"378":1}}],["不必要的第三方库",{"0":{"192":1},"1":{"193":1,"194":1}}],["不必要的假设",{"2":{"181":1}}],["不必局限于",{"2":{"135":1}}],["不必重新熬制",{"2":{"77":1}}],["不必因为某个页面需要",{"2":{"63":1}}],["不必触发全站重新构建",{"2":{"36":1}}],["不要保留作",{"2":{"989":1}}],["不要害怕",{"2":{"967":1}}],["不要对非本领域的观点一味抛出异常",{"2":{"618":1}}],["不要玩物丧志",{"0":{"613":1},"2":{"613":1}}],["不要有哀怨心态",{"2":{"612":1}}],["不要怀揣哀怨心态",{"0":{"612":1}}],["不要",{"0":{"612":1,"613":1,"614":1},"2":{"989":1}}],["不要再执着于手里有多少把锤子",{"2":{"554":1}}],["不要在一个提交中混杂无关的代码改动",{"2":{"451":1}}],["不要写",{"2":{"449":1}}],["不要急着把观点发给同行",{"2":{"375":1}}],["不要只读书不知现实",{"0":{"614":1}}],["不要只捡结论",{"2":{"608":1}}],["不要只用一个模型",{"2":{"523":1}}],["不要只在脑子里想",{"2":{"375":1}}],["不要只是被动地看数据",{"2":{"369":1}}],["不要等回头再想",{"2":{"372":1}}],["不要把",{"2":{"62":1}}],["不要发明语言",{"2":{"54":1}}],["不重试",{"2":{"144":1}}],["不重新创建节点",{"2":{"58":1}}],["不重要",{"2":{"46":1}}],["不做过多要求",{"2":{"1045":1}}],["不做执行",{"2":{"470":1}}],["不做错的决定",{"2":{"376":1}}],["不做什么",{"2":{"363":1}}],["不做任何阻塞",{"2":{"159":1}}],["不做用户认证",{"2":{"54":1}}],["不做运行时数据获取",{"2":{"54":1}}],["不做",{"2":{"54":1}}],["不做服务端路由",{"2":{"54":1}}],["不友好",{"2":{"45":1,"287":1}}],["不需要害怕",{"2":{"1015":1}}],["不需要去猜应该用什么",{"2":{"971":1}}],["不需要浏览器",{"2":{"859":1}}],["不需要一开始就想做",{"2":{"465":1}}],["不需要关注第",{"2":{"430":1}}],["不需要继续",{"2":{"429":1}}],["不需要复杂拦截器的轻量级页面",{"2":{"342":1}}],["不需要修改原有代码就能支持新的数据类型",{"2":{"255":1}}],["不需要任何延迟",{"2":{"164":1}}],["不需要手写路由配置表",{"2":{"64":1}}],["不需要",{"2":{"63":2}}],["不需要为它增加服务端运行时",{"2":{"54":1}}],["不需要为所有页面在构建时一次性生成静态文件",{"2":{"34":1}}],["不需要实时数据",{"2":{"54":1}}],["不需要架构",{"2":{"54":1}}],["不需要调用",{"2":{"51":1}}],["不需要连接数据库",{"2":{"51":1}}],["不需要后端",{"2":{"4":1}}],["不同平台",{"2":{"933":1}}],["不同类型对应不同的光照模型",{"2":{"766":1}}],["不同类型的泛型约束适用于不同的场景",{"2":{"270":1}}],["不同构建版本",{"2":{"737":1}}],["不同模型在垂直能力上差距悬殊",{"2":{"519":1}}],["不同工作计划的上下文物理隔离",{"2":{"437":1}}],["不同",{"2":{"314":1,"898":1,"901":1}}],["不同团队可以独立开发和部署自己的子应用",{"2":{"292":1}}],["不同团队可以独立负责不同的子应用",{"2":{"285":1}}],["不同子应用可以使用不同的框架",{"2":{"285":1}}],["不同规范的深度解析",{"2":{"272":1}}],["不同于旧版的实验性装饰器",{"2":{"324":1}}],["不同于",{"2":{"113":1,"117":1}}],["不同的时间来切换到不同的阅读方式",{"2":{"1030":1}}],["不同的人能提炼出完全不同的价值",{"2":{"619":1}}],["不同的根源需要不同的解决方案",{"2":{"366":1}}],["不同的",{"2":{"249":1}}],["不同的视图",{"2":{"98":1}}],["不同的选择组合便构成了不同的渲染方案",{"2":{"21":1}}],["不同页面",{"2":{"63":1}}],["不同方案的本质差异",{"2":{"21":1}}],["优秀绵羊",{"2":{"603":1}}],["优秀设计",{"2":{"448":1}}],["优秀设设计",{"2":{"445":1}}],["优秀的产品设计就是在无数个",{"2":{"394":1}}],["优秀的人洞察系统",{"2":{"389":1}}],["优秀的模块化设计应当让开发者在进入代码库时",{"2":{"332":1}}],["优秀的业务模块或工具模块可以在不同页面甚至不同项目中跨端复用",{"2":{"297":1}}],["优雅处理大模型幻觉",{"2":{"543":1}}],["优雅地拆解并并行化复杂的业务逻辑",{"2":{"440":1}}],["优雅地结束规划",{"2":{"427":1}}],["优雅",{"2":{"359":1}}],["优雅的",{"2":{"342":1}}],["优雅治理",{"2":{"337":1}}],["优化节点图",{"2":{"770":1}}],["优化逐帧查询性能",{"2":{"743":1}}],["优化代码",{"2":{"587":1}}],["优化大模型响应的等待体验",{"2":{"543":1}}],["优化或模型微调提供高质量数据源",{"2":{"541":1}}],["优化自己或团队的工作流",{"2":{"436":1}}],["优化预算",{"2":{"407":1}}],["优化和开发人员体验",{"2":{"344":1}}],["优化差",{"2":{"344":1}}],["优化",{"2":{"331":1,"343":1,"551":1,"591":1}}],["优化首屏性能",{"2":{"313":1}}],["优化聚合边界和领域服务",{"2":{"282":1}}],["优化极致",{"2":{"6":1}}],["优惠券id",{"2":{"200":1}}],["优势是最新模型第一时间可用",{"2":{"520":1}}],["优势",{"2":{"283":1,"287":1,"414":1,"959":1,"960":1,"961":1,"962":1,"964":1}}],["优势分析",{"0":{"92":1}}],["优势点",{"2":{"85":1}}],["优势用不上",{"2":{"81":1}}],["优先统计工作日早上至午休这段时间的分配",{"2":{"1038":1}}],["优先对健康",{"2":{"1037":1}}],["优先级",{"2":{"790":1}}],["优先级排序",{"2":{"705":2}}],["优先级高于",{"2":{"203":1}}],["优先按",{"2":{"652":1}}],["优先与高信噪比人群深度交流",{"2":{"625":1}}],["优先解决阻碍用户达成目标的",{"2":{"556":1}}],["优先使用表达式计算值",{"2":{"742":1}}],["优先使用",{"2":{"523":1}}],["优先使用命名导出",{"2":{"311":1}}],["优先用",{"2":{"518":1}}],["优先收集量化数据",{"2":{"472":1}}],["优先加载",{"2":{"334":1}}],["优先排查",{"0":{"198":1},"1":{"199":1}}],["优先不引入依赖",{"2":{"192":1}}],["优先",{"0":{"189":1},"1":{"190":1,"191":1},"2":{"510":2,"518":1,"568":2,"796":1}}],["优先引导",{"2":{"177":1}}],["优先将布局组件",{"2":{"47":1}}],["优先选择支持私有化部署或数据不出境承诺的服务",{"2":{"523":1}}],["优先选择长轮询",{"2":{"167":1}}],["优先选择退避轮询",{"2":{"167":1}}],["优先选择",{"2":{"19":1,"437":1}}],["优缺点",{"0":{"24":1,"28":1,"32":1,"37":1,"42":1}}],["场景需谨慎",{"2":{"959":1}}],["场景遍历",{"2":{"768":1}}],["场景编辑器",{"2":{"763":1}}],["场景根节点",{"2":{"762":1,"763":1}}],["场景图操作",{"2":{"777":1}}],["场景图",{"2":{"777":1}}],["场景图系统",{"0":{"769":1}}],["场景图节点契约",{"2":{"777":1}}],["场景图节点",{"2":{"763":1}}],["场景图层",{"2":{"761":1,"762":2}}],["场景图的根节点",{"2":{"680":1}}],["场景说明",{"0":{"658":1,"659":1},"2":{"688":1,"689":1,"690":1,"717":1,"746":1,"747":1,"774":1,"775":1,"801":1,"802":1,"803":1,"830":1,"831":1,"832":1,"862":1,"863":1,"922":1,"923":1,"949":1,"991":1,"992":1}}],["场景三",{"0":{"690":1,"803":1,"832":1},"2":{"640":1,"934":1}}],["场景二",{"0":{"689":1,"747":1,"775":1,"802":1,"831":1,"992":1},"2":{"640":1,"659":1,"934":1}}],["场景一",{"0":{"688":1,"746":1,"774":1,"801":1,"830":1,"922":1,"991":1},"2":{"640":1,"658":1,"934":1}}],["场景匹配",{"2":{"518":1}}],["场景具体",{"2":{"448":1}}],["场景就走分支",{"2":{"329":2}}],["场景中",{"2":{"316":1}}],["场景示例",{"2":{"288":1}}],["场景6",{"0":{"198":1},"1":{"199":1}}],["场景5",{"0":{"195":1},"1":{"196":1,"197":1}}],["场景4",{"0":{"192":1},"1":{"193":1,"194":1}}],["场景3",{"0":{"189":1},"1":{"190":1,"191":1}}],["场景2",{"0":{"186":1},"1":{"187":1,"188":1}}],["场景1",{"0":{"183":1},"1":{"184":1,"185":1}}],["场景下",{"2":{"131":1,"391":1}}],["场景特征",{"2":{"124":1}}],["场景驱动选型",{"0":{"99":1},"1":{"100":1,"101":1}}],["场景边界与建议",{"0":{"79":1},"1":{"80":1,"81":1,"82":1}}],["场景",{"0":{"87":1,"88":1,"89":1,"94":1,"95":1,"96":1,"100":1,"101":1},"2":{"54":1,"80":1,"81":1,"95":1,"111":1,"116":1,"120":1,"178":1,"453":1,"454":1,"455":1,"553":1,"577":1,"595":1,"700":1,"763":1,"875":1,"939":1}}],["场景类型",{"2":{"19":1,"435":1,"437":1,"438":1,"439":1}}],["场景延伸",{"0":{"18":1}}],["表单填写",{"2":{"933":1}}],["表单重置",{"2":{"663":1}}],["表单校验",{"2":{"663":1}}],["表单错误信息",{"2":{"663":1}}],["表单插件",{"2":{"656":1}}],["表单提交等用户操作",{"2":{"659":1}}],["表单提交",{"2":{"654":1,"663":1}}],["表单状态",{"2":{"653":1}}],["表单状态管理契约",{"2":{"663":1}}],["表单状态管理",{"2":{"647":1}}],["表单组件插件",{"2":{"647":1}}],["表单分类图标",{"2":{"647":1}}],["表单渲染器",{"2":{"647":1}}],["表单项",{"2":{"647":1,"650":2}}],["表单项状态",{"2":{"647":1}}],["表单项渲染器",{"2":{"646":1}}],["表单",{"2":{"639":2,"650":2,"653":1}}],["表面是你在筛选信息",{"0":{"617":1}}],["表面积提供极致的",{"2":{"98":1}}],["表现稳定的标准化工作",{"2":{"537":1}}],["表现层",{"2":{"274":1,"279":1}}],["表格依旧采用了分解与渐进明细的思路",{"2":{"1031":1}}],["表格渲染",{"2":{"653":1}}],["表格视图组件",{"2":{"647":1}}],["表格",{"2":{"515":1,"639":1,"650":2,"979":1,"986":2}}],["表格分析",{"2":{"515":1}}],["表格示例",{"2":{"442":1}}],["表述简洁",{"2":{"506":1}}],["表冠",{"2":{"383":1}}],["表盘",{"2":{"383":1}}],["表象",{"2":{"382":2,"1007":1}}],["表象背后藏着决定一切的",{"0":{"382":1}}],["表达式在每个渲染帧被求值一次",{"2":{"747":1}}],["表达式在每一帧通过",{"2":{"742":1}}],["表达式失败则回退到关键帧插值",{"2":{"742":1}}],["表达式编译",{"2":{"742":1}}],["表达式模拟系统",{"2":{"742":1}}],["表达式支持",{"2":{"742":1}}],["表达式执行流程",{"2":{"742":1}}],["表达式入口",{"2":{"742":1}}],["表达式的解析",{"2":{"742":1}}],["表达式插件等",{"2":{"737":1}}],["表达式插件入口",{"2":{"735":1}}],["表达式",{"2":{"737":1}}],["表达式辅助函数",{"2":{"735":1,"742":1}}],["表达式值工厂",{"2":{"735":1}}],["表达式值封装",{"2":{"735":1}}],["表达式文字属性装饰器",{"2":{"735":1}}],["表达式属性装饰器",{"2":{"735":1}}],["表达式管理器契约",{"2":{"749":1}}],["表达式管理器",{"2":{"735":1}}],["表达式求值",{"2":{"734":1}}],["表达式工具",{"2":{"647":1}}],["表达式解析",{"2":{"647":1}}],["表达式引擎和全部滤镜效果",{"2":{"751":1}}],["表达式引擎契约",{"2":{"749":1}}],["表达式引擎求值流程",{"0":{"747":1}}],["表达式引擎层",{"2":{"645":1,"646":1}}],["表达式引擎",{"0":{"655":1,"742":1},"2":{"642":1,"647":1,"730":1,"733":1,"734":1,"735":1,"737":1,"738":1,"749":1}}],["表达清晰度或增强对用户需求的适应性",{"2":{"426":1}}],["表达业务规则",{"2":{"279":1}}],["表达",{"2":{"246":1}}],["表明协议升级意图",{"2":{"114":1}}],["表示事件流中的一条消息",{"2":{"898":1}}],["表示单个属性的插值",{"2":{"822":1}}],["表示场景图中的节点",{"2":{"766":1}}],["表示值属于任一成员类型",{"2":{"229":1}}],["表示每秒推送一次",{"2":{"153":1}}],["表示持续解码",{"2":{"143":1}}],["表示这是部分数据",{"2":{"141":1}}],["表示流已结束",{"2":{"141":1}}],["表示",{"2":{"35":1,"766":1}}],["表",{"2":{"18":1}}],["接下来就阐述下要漫谈的话题",{"2":{"1019":1}}],["接下来的重点就是",{"2":{"494":1}}],["接下来",{"2":{"413":1,"434":1,"441":1,"444":1,"965":2}}],["接管了样板代码",{"2":{"1001":1}}],["接管数据的缓存生命周期",{"2":{"342":1}}],["接管一切服务端状态",{"2":{"98":1}}],["接近",{"2":{"63":1}}],["接收任务规格",{"2":{"988":1}}],["接收任务后自动规划并执行全套代码工作流",{"2":{"559":1}}],["接收外部传来的",{"2":{"961":1}}],["接收消息",{"2":{"941":1}}],["接收用户操作",{"2":{"934":1}}],["接收到",{"2":{"934":1}}],["接收准备好的句柄",{"2":{"792":1}}],["接收输入形状",{"2":{"744":1}}],["接收注册器对象",{"2":{"720":1}}],["接收信息时",{"2":{"625":1}}],["接收流式响应",{"2":{"131":1}}],["接收方需预先暴露回调",{"2":{"130":1}}],["接收请求",{"2":{"45":1}}],["接收服务器返回的内容",{"2":{"21":1}}],["接入低成本模型平替",{"2":{"568":1}}],["接入身份验证中间件`",{"2":{"451":1}}],["接入方案",{"2":{"439":1}}],["接入",{"2":{"18":1,"568":2}}],["接口规范层",{"2":{"906":1,"907":1}}],["接口规范",{"2":{"904":1,"908":1,"931":1}}],["接口规范和数据格式",{"2":{"291":1}}],["接口抽象",{"2":{"849":1}}],["接口统一不同浏览器控制方式",{"2":{"848":1}}],["接口实现",{"2":{"762":1}}],["接口实现后端透明切换",{"2":{"758":1}}],["接口提供器",{"2":{"735":1}}],["接口代理",{"2":{"735":1}}],["接口定义",{"2":{"706":1,"971":2}}],["接口与契约规范",{"0":{"660":1,"691":1,"718":1,"748":1,"776":1,"804":1,"833":1,"864":1,"924":1,"950":1,"993":1},"1":{"661":1,"662":1,"663":1,"692":1,"693":1,"719":1,"720":1,"749":1,"750":1,"777":1,"778":1,"805":1,"806":1,"834":1,"835":1,"865":1,"866":1,"925":1,"926":1,"951":1,"952":1,"994":1,"995":1}}],["接口契约定义",{"0":{"897":1},"1":{"898":1,"899":1}}],["接口契约",{"2":{"636":1}}],["接口完全兼容",{"2":{"523":1}}],["接口格式",{"2":{"523":1}}],["接口联调",{"2":{"342":1}}],["接口文档和",{"2":{"342":1}}],["接口严密的精密齿轮",{"2":{"337":1}}],["接口约束示例",{"2":{"266":1}}],["接口约束是项目开发中最常用的泛型约束形式",{"2":{"266":1}}],["接口约束",{"0":{"266":1},"2":{"270":1}}],["接口或类",{"2":{"252":1}}],["接口返回",{"0":{"199":1}}],["接口的方式来管理积木",{"2":{"964":1}}],["接口的方法",{"2":{"267":2}}],["接口的权限变动",{"2":{"417":1}}],["接口的",{"2":{"197":1,"266":1}}],["接口只暴露",{"2":{"195":1}}],["接口设计",{"0":{"195":1},"1":{"196":1,"197":1}}],["接口+服务",{"2":{"191":1}}],["接口层",{"2":{"190":1,"191":1}}],["接口语义推敲",{"2":{"178":1}}],["接口签名",{"2":{"177":1}}],["接口调用",{"2":{"19":1}}],["接口",{"2":{"4":1,"182":1,"195":1,"255":1,"256":1,"267":2,"735":9,"768":1,"858":2,"901":1,"903":1,"912":1,"916":1,"939":1}}],["或多或少助力我们成长",{"2":{"1030":1}}],["或多个技能组合处理复杂流程",{"2":{"547":1}}],["或阅读学习的过程基于书中的阐述来结合实际提炼出可指导实践的",{"2":{"1030":1}}],["或许海绵式阅读是大多数人认可的方式",{"2":{"1030":1}}],["或许存在更通用的方法论",{"2":{"1005":1}}],["或许在阅读之前",{"2":{"155":1}}],["或复杂",{"2":{"964":1}}],["或对",{"2":{"964":1}}],["或通用",{"2":{"799":1}}],["或通过",{"2":{"9":1,"753":1}}],["或路径模式",{"2":{"661":1}}],["或路径正则匹配查找对应渲染器",{"2":{"652":1}}],["或推送至对外发布的知识库",{"2":{"629":1}}],["或ai",{"0":{"610":1}}],["或一组",{"2":{"609":1}}],["或可能由不同人负责时",{"2":{"577":1}}],["或自然语言任务",{"2":{"567":1}}],["或想要免费的国产方案",{"2":{"565":1}}],["或想快速验证想法的非专业开发者",{"2":{"561":1}}],["或需求交付周期",{"2":{"526":1}}],["或产生幻觉",{"2":{"509":1}}],["或纯",{"2":{"502":1}}],["或纯客户端库",{"2":{"62":1}}],["或检查本地端口占用情况",{"2":{"449":1}}],["或提到",{"2":{"448":1}}],["或执行",{"2":{"443":1}}],["或调用",{"2":{"443":1}}],["或各类云端数据库",{"2":{"439":1}}],["或出错",{"2":{"415":1}}],["或特定私域数据",{"2":{"411":1}}],["或人类进行协作",{"2":{"402":1}}],["或仅通过规模效应获得极低利润",{"2":{"392":1}}],["或是企业内部知识库",{"2":{"548":1}}],["或是其",{"2":{"491":1}}],["或是研发将非结构化数据自动化转换为标准代码的基建体系时",{"2":{"377":1}}],["或是张小龙式的",{"2":{"363":1}}],["或草稿纸上",{"2":{"374":1}}],["或追求",{"2":{"344":1}}],["或类",{"2":{"301":1}}],["或者说一个普通百姓",{"2":{"1041":1}}],["或者说",{"2":{"457":1}}],["或者",{"2":{"396":1,"1042":1}}],["或者观察竞品改版时",{"2":{"369":1}}],["或者在为一些没有模块系统的全局库",{"2":{"320":1}}],["或者需要明确表达类型意图时",{"2":{"263":1}}],["或者使用",{"2":{"255":1}}],["或性能问题时",{"2":{"198":1}}],["或状态管理工具来收敛",{"2":{"175":1}}],["或轻量级状态库",{"2":{"174":1}}],["或事件总线",{"2":{"163":1}}],["或达到设定的超时时间",{"2":{"162":1}}],["或网络错误",{"2":{"146":1}}],["或上下文历史",{"2":{"131":1}}],["或保持长达",{"2":{"125":1}}],["或专用网关等中间件",{"2":{"117":1}}],["或抛出异常",{"2":{"89":1}}],["或微前端方案",{"2":{"81":1}}],["或利用",{"2":{"47":1,"308":1}}],["或使用",{"2":{"47":1,"173":1,"304":1}}],["或启用懒水合",{"2":{"47":1}}],["或内容频繁更新",{"2":{"46":1}}],["或静态服务器",{"2":{"30":1,"31":1}}],["或",{"0":{"228":1},"1":{"229":1,"230":1,"231":1,"232":1,"233":1,"234":1},"2":{"18":1,"23":1,"46":1,"47":1,"51":1,"53":2,"71":1,"82":1,"83":2,"105":1,"116":1,"126":1,"131":1,"132":1,"138":1,"154":1,"163":1,"169":1,"170":1,"173":1,"202":2,"229":1,"230":1,"232":1,"236":1,"250":1,"286":3,"291":1,"304":1,"306":1,"307":1,"308":2,"334":2,"335":1,"342":1,"344":1,"375":1,"385":1,"415":1,"435":2,"438":1,"442":1,"451":1,"467":1,"515":1,"518":2,"523":3,"525":1,"540":1,"559":1,"571":1,"572":1,"576":1,"629":1,"636":1,"682":1,"728":1,"737":1,"792":2,"824":1,"826":1,"827":1,"855":1,"892":1,"898":1,"899":1,"934":1,"960":1,"962":1,"968":1,"997":1,"1008":1,"1041":1}}],["名称与描述",{"2":{"499":1}}],["名称",{"2":{"18":1,"451":1,"586":1,"728":1}}],["→",{"2":{"17":2,"21":3,"31":1,"45":5,"46":11,"47":4,"59":3,"62":1,"63":4,"122":2,"146":4,"150":3,"166":6,"177":4,"179":1,"199":3,"242":2,"377":4,"447":2,"461":1,"471":2,"472":2,"510":5,"515":8,"518":6,"523":5,"553":2,"559":2,"561":3,"562":7,"564":4,"565":3,"567":3,"568":10,"570":3,"583":3,"588":2,"591":2,"592":2,"631":9,"647":4,"649":1,"653":2,"655":2,"656":1,"672":3,"717":5,"737":1,"742":3,"762":2,"765":2,"766":1,"770":2,"785":6,"790":2,"808":1,"812":2,"817":1,"828":3,"830":1,"832":1,"835":1,"836":1,"855":12,"858":2,"859":8,"860":9,"883":2,"886":2,"906":4,"910":2,"912":5,"917":2,"918":3,"922":4,"923":4,"939":4,"986":6,"987":2,"988":3,"989":8,"991":5,"992":2,"998":2,"999":6}}],["添加动画到时间线",{"2":{"834":1}}],["添加到engine链表",{"2":{"825":1}}],["添加光照",{"2":{"782":1}}],["添加箭头头部计算",{"2":{"677":1}}],["添加边界条件",{"2":{"583":1}}],["添加一些相关的自定义",{"2":{"470":1}}],["添加了静态类型检查和其他高级功能",{"2":{"338":1}}],["添加订单项",{"2":{"281":1}}],["添加处理标记",{"2":{"266":1}}],["添加数据",{"2":{"261":1}}],["添加空集不改变原集合",{"2":{"244":1}}],["添加",{"2":{"17":1}}],["添加测试文章",{"2":{"14":1}}],["会关注国家大事",{"2":{"1043":1}}],["会比较狠",{"2":{"1036":1}}],["会时不时来敲门",{"2":{"1029":1}}],["会显示在帮助信息中",{"2":{"581":1}}],["会意外学到系统的运行机理",{"2":{"531":1}}],["会议用",{"2":{"515":1}}],["会议实时记录",{"2":{"515":1}}],["会议实时记录与培训内容归档",{"2":{"515":1}}],["会议知识总结",{"2":{"515":1}}],["会议知识总结与项目文档编写的首选工具",{"2":{"515":1}}],["会议纪要自动整理",{"2":{"515":1}}],["会议纪要智能整理",{"2":{"515":1}}],["会经历",{"2":{"484":1}}],["会经历一条清晰的复利曲线",{"2":{"463":1}}],["会话时",{"2":{"571":1}}],["会话管理和标准化的工具",{"2":{"491":1}}],["会话管理与持久化记忆",{"0":{"485":1},"1":{"486":1}}],["会话",{"0":{"486":1},"2":{"482":1,"489":1,"983":1}}],["会话状态",{"2":{"127":1}}],["会不会被调用到",{"2":{"448":1}}],["会面临一个关键判定",{"2":{"429":1}}],["会进行任务拆解与路径规划",{"2":{"414":1}}],["会根据项目结构和检测到的技术栈",{"2":{"574":1}}],["会根据工具返回的结果",{"2":{"412":1}}],["会根据传入的参数自动推断",{"2":{"254":1}}],["会员等商业化模式",{"2":{"399":1}}],["会员",{"2":{"397":1}}],["会导致知识结构存在重大缺陷",{"2":{"614":1}}],["会导致知识结构的严重扭曲",{"2":{"614":1}}],["会导致开发者对内存管理",{"2":{"531":1}}],["会导致商业不可持续",{"2":{"394":1}}],["会导致复杂度提升和体验牺牲",{"2":{"394":1}}],["会发生什么",{"2":{"386":1}}],["会发现它们共同指向一个本质命题",{"2":{"180":1}}],["会做出",{"2":{"366":2,"427":1}}],["会在文档隐藏时关闭请求",{"2":{"898":1}}],["会在路由决策层进行判断",{"2":{"443":1}}],["会在下一轮",{"2":{"427":1}}],["会在第一次加载模块后将其放入",{"2":{"334":1}}],["会在内部自动重试",{"2":{"146":1}}],["会缓存已加载的模块",{"2":{"334":1}}],["会沿目录树向上逐级查找",{"2":{"334":1}}],["会用",{"2":{"250":1}}],["会对属性类型执行交叉操作",{"2":{"237":1}}],["会",{"2":{"208":1}}],["会增加调用者的理解成本和误用风险",{"2":{"195":1}}],["会引发严重的灾难",{"2":{"158":1}}],["会触发",{"2":{"154":1}}],["会遇到严峻的基础设施挑战",{"2":{"125":1}}],["会产生一种",{"2":{"123":1}}],["会共享",{"2":{"95":1}}],["会被替换为",{"2":{"582":1}}],["会被视为同一个",{"2":{"92":1}}],["会被预取并缓存",{"2":{"61":1}}],["会捕获这个情况并处于",{"2":{"89":1}}],["会暂停请求",{"2":{"87":1}}],["会将",{"2":{"333":1}}],["会将它们合并为一个网络请求",{"2":{"85":1}}],["会将事件监听器",{"2":{"58":1}}],["会平滑地将骨架屏替换为真实内容",{"2":{"74":1}}],["会丢弃服务端",{"2":{"47":1}}],["会分两部分工作",{"2":{"40":1}}],["会自动提示你只有",{"2":{"964":1}}],["会自动",{"2":{"141":1}}],["会自动解析这些字段并触发相应回调",{"2":{"139":1}}],["会自动尝试重连",{"2":{"138":1}}],["会自动发起重连尝试",{"2":{"110":1}}],["会自动将缓存回滚到更新前的状态",{"2":{"88":1}}],["会自动触发",{"2":{"17":1,"588":1}}],["会自动识别",{"2":{"17":1}}],["会生成一个免费域名",{"2":{"17":1}}],["官方技能编写最佳实践",{"2":{"980":1}}],["官方技能库中的",{"2":{"453":1}}],["官方示例",{"2":{"819":1}}],["官方示例进行了",{"2":{"467":1}}],["官方直连",{"2":{"523":1}}],["官方开放平台",{"2":{"522":2}}],["官方平台即模型研发方直接开放的",{"2":{"520":1}}],["官方指南",{"2":{"488":1}}],["官方",{"0":{"520":1},"1":{"521":1,"522":1},"2":{"454":1,"521":3,"522":1}}],["官方深度集成了",{"2":{"342":1}}],["官方的路由管理器",{"2":{"341":2}}],["官方标准",{"2":{"307":1}}],["官方提供的编译工具",{"2":{"202":1}}],["官方内置",{"2":{"98":1}}],["官方调试神器",{"2":{"94":1}}],["官方文档",{"2":{"85":1,"91":2,"225":1,"597":2,"908":1,"931":1,"962":1}}],["官方文档本身正是跑在",{"2":{"48":1}}],["官方视频",{"2":{"75":1}}],["官方推出的命令行",{"2":{"567":1}}],["官方推出的开源框架",{"2":{"478":1}}],["官方推出的下一代文档框架",{"2":{"48":1}}],["官方推荐的状态管理库",{"2":{"341":1}}],["官方推荐",{"2":{"7":1}}],["官网",{"2":{"17":1}}],["访问需要",{"2":{"439":1}}],["访问需要认证的外部服务",{"2":{"439":1}}],["访问外部公共数据",{"2":{"439":1}}],["访问量波动大",{"2":{"54":1}}],["访问量大的公开页面",{"2":{"45":1}}],["访问即可看到预渲染的博客网站",{"2":{"17":1}}],["访问",{"2":{"17":1,"666":2,"763":1}}],["将总目标拆解为每",{"2":{"1047":1}}],["将清单分为",{"2":{"1037":1}}],["将时间周期拉的长一点",{"2":{"1026":1}}],["将是新一代工程师最核心的元能力",{"2":{"1002":1}}],["将绝大部分",{"2":{"967":1}}],["将语义变量映射给",{"2":{"966":1}}],["将变量分为",{"2":{"966":1}}],["将变成核心资产",{"2":{"525":1}}],["将设计规范抽象为",{"2":{"966":1}}],["将一切非标准语法转化为浏览器可识别的",{"2":{"965":1}}],["将一个灵感迅速转化为高可用产品",{"2":{"540":1}}],["将样式的",{"2":{"964":1}}],["将样式与逻辑写在同一个文件里",{"2":{"959":1}}],["将任务委托给远程专业",{"2":{"934":1}}],["将多轮文本对话压缩为一轮",{"2":{"933":1}}],["将多个子任务组合成一个更大的任务",{"2":{"411":1}}],["将结果反馈给",{"2":{"922":1}}],["将结果返回给客户端",{"2":{"162":1}}],["将滚动位置映射为动画时间",{"2":{"822":1}}],["将所有",{"2":{"821":1}}],["将所有逻辑塞进少数几个文件的做法早已难以为继",{"2":{"294":1}}],["将行范围转为完整文本",{"2":{"799":1}}],["将行流组装为完整事件",{"2":{"143":1}}],["将跟随的标点合并到前一个词段",{"2":{"795":1}}],["将昂贵工作集中在一次性",{"2":{"784":1}}],["将节点图转换为目标后端着色器代码",{"2":{"775":1}}],["将核心基建类注入",{"2":{"677":1}}],["将子",{"2":{"661":1}}],["将子组件作为参数注入",{"2":{"170":1}}],["将同样的文档和源码置于两人面前",{"2":{"626":1}}],["将相同的技术趋势",{"2":{"622":1}}],["将散乱的信息构建成清晰的知识树",{"2":{"609":1}}],["将他人的洞见转化为自己的血肉",{"2":{"603":1}}],["将利润置于规模之上",{"2":{"601":1}}],["将硬核的神经网络与概率统计转化为优化生活的决策工具",{"2":{"598":1}}],["将团队共识与个人偏好分离",{"2":{"596":1}}],["将可变部分作为参数传入",{"2":{"583":1}}],["将共性的",{"2":{"583":1}}],["将共同依赖的代码提取到一个新的模块中",{"2":{"315":1}}],["将庞大指令拆分为可复用的规则",{"2":{"570":1}}],["将庞大复杂的系统拆解为一个个独立",{"2":{"294":1}}],["将常用操作封装为",{"2":{"570":1}}],["将常见性能优化封装为内置组件",{"2":{"72":1}}],["将上述两层能力指数级放大",{"2":{"558":1}}],["将从",{"2":{"557":1}}],["将从开发者的玩具",{"2":{"419":1}}],["将代码安全",{"2":{"555":1}}],["将代码库",{"2":{"536":1}}],["将通用模型打磨成特定领域",{"2":{"551":1}}],["将评测无缝融入",{"2":{"550":1}}],["将评论",{"2":{"47":1}}],["将跨领域协作的摩擦成本大幅降低",{"2":{"529":1}}],["将自己打造成不可替代的稀缺资产",{"2":{"603":1}}],["将自己视作一家",{"2":{"603":1}}],["将自己变成了一个",{"2":{"525":1}}],["将自然语言抽象为类似面向对象的代码结构",{"2":{"509":1}}],["将自然语言目标转化为机器可理解的步骤树",{"2":{"425":1}}],["将离掩泪湿蒹葭",{"2":{"508":1}}],["将目标用户从",{"2":{"492":1}}],["将主题分解为",{"2":{"471":1}}],["将主题分解为若干子课题",{"2":{"416":1}}],["将用户请求分解为",{"2":{"471":1}}],["将用户的沉没投入转化为极高的替代成本",{"2":{"398":1}}],["将这些信息整合为带有可视化图表的深度研究报告",{"2":{"470":1}}],["将这部分",{"2":{"74":1}}],["将分析成果转化为结构化的文字内容",{"2":{"468":1}}],["将底层零散的工具",{"2":{"455":1}}],["将具体的逻辑编排",{"2":{"443":1}}],["将零散的需求转化为可获利的商业方案",{"2":{"600":1}}],["将零散的",{"2":{"440":1}}],["将专业工作交给专业的",{"2":{"592":1}}],["将专业且细碎的脏活累活下放给子代理",{"2":{"438":1}}],["将专家的工程规范与最佳实践固化为可执行脚本",{"2":{"440":1}}],["将特定",{"2":{"438":1}}],["将不同项目",{"2":{"437":1}}],["将原本零散的",{"2":{"434":1}}],["将原本死板的逻辑链路转化为了具有生命力的",{"2":{"427":1}}],["将推理与行动混合在每一轮循环中不同",{"2":{"429":1}}],["将思考转化为实际动作",{"2":{"427":1}}],["将最终定义",{"2":{"419":1}}],["将复杂任务拆解并委派给不同的",{"2":{"535":1}}],["将复杂目标拆解为完整的步骤列表",{"2":{"414":1}}],["将复杂的子目标转化为具体的步骤",{"2":{"412":1}}],["将复杂的单体应用拆分为多个简单的子应用",{"2":{"292":1}}],["将复杂的",{"2":{"169":1,"491":1}}],["将抽象的目标变为真实的结果",{"2":{"412":1}}],["将规划好的逻辑转化为具体的",{"2":{"408":1}}],["将经济学思维系统化地应用到产品全生命周期",{"0":{"395":1},"1":{"396":1,"397":1,"398":1,"399":1}}],["将模型的新功能融入产品",{"2":{"1008":1}}],["将模块注入全局",{"2":{"679":1}}],["将模块间的依赖关系从简单的",{"2":{"317":1}}],["将模糊的目标拆解为一系列结构化的",{"2":{"429":1}}],["将模糊需求结构化",{"2":{"367":1}}],["将能力寄托于",{"2":{"363":1}}],["将成为我们在",{"2":{"359":1}}],["将成功和失败编码为可辨识联合",{"2":{"246":1}}],["将交互起点后置",{"2":{"350":1}}],["将交叉映射为联合",{"2":{"242":1}}],["将网络请求的",{"2":{"342":1}}],["将默认导出重命名后导出",{"2":{"312":1}}],["将内部多个子模块聚合后统一对外暴露",{"2":{"312":1}}],["将前端应用按照业务领域或功能模块进行拆分",{"2":{"285":1}}],["将系统分为用户界面层",{"2":{"277":1}}],["将联合映射为交叉",{"2":{"242":1}}],["将工程中的代码规范配置到工具中",{"2":{"219":1}}],["将项目中的各种资源",{"2":{"343":1}}],["将项目划分为多个独立的子项目",{"2":{"205":1}}],["将项目推送到",{"2":{"17":1}}],["将伴随软件工程的始终",{"2":{"180":1}}],["将精力集中于真正创造价值的架构决策",{"2":{"180":1}}],["将其封装为声明式场景图",{"2":{"757":1}}],["将其流转至",{"2":{"629":1}}],["将其直接加载到系统提示词中",{"2":{"571":1}}],["将其转化为替代成本",{"2":{"393":1}}],["将其转化为结构化的文章发布",{"2":{"355":1}}],["将其提炼为以下三个核心公式",{"2":{"364":1}}],["将其隔离",{"2":{"174":1}}],["将其渲染为可视化页面",{"2":{"21":1}}],["将第一阶段确认好的",{"2":{"171":1}}],["将为后续迭代埋下隐患",{"2":{"171":1}}],["将字节块流转换为行迭代器",{"2":{"143":1}}],["将字节块转换为字符串",{"2":{"141":1}}],["将读取到的字节块解码为字符串",{"2":{"141":1}}],["将二者串联",{"2":{"126":1}}],["将图片上传至",{"2":{"126":1}}],["将消息平台的事件",{"2":{"120":1}}],["将事件详情封装在请求体中",{"2":{"119":1}}],["将响应数据实时推送到前端",{"2":{"106":1}}],["将数据操作抽象化",{"2":{"336":1}}],["将数据按照",{"2":{"151":1}}],["将数据化整为零",{"2":{"105":1}}],["将数据注入组件后再生成",{"2":{"57":1}}],["将快照返回",{"2":{"96":1}}],["将乐观更新的数据传递给实际的异步请求",{"2":{"88":1}}],["将后端返回的错误信息附加到",{"2":{"87":1}}],["将服务端状态的缓存",{"2":{"85":1}}],["将需要交互的",{"2":{"62":1}}],["将虚拟",{"2":{"58":1}}],["将页面结构抽象为",{"2":{"639":1}}],["将页面骨架",{"2":{"82":1}}],["将页面中的静态部分",{"2":{"75":1}}],["将页面分为两类",{"2":{"53":1}}],["将页面拆分为静态外壳和动态组件",{"2":{"39":1}}],["将",{"2":{"53":1,"59":1,"143":2,"169":1,"242":1,"255":1,"308":3,"408":1,"414":1,"455":1,"462":1,"490":1,"550":1,"557":1,"645":1,"743":1,"795":1,"899":1,"933":1,"951":1,"956":1,"959":1,"960":1,"965":1,"967":1,"968":1,"969":1,"970":1,"971":1,"973":1,"1026":1}}],["将渲染策略拆分到组件级别",{"2":{"41":1}}],["将渲染出的完整",{"2":{"30":1}}],["将渲染结果缓存",{"2":{"47":1}}],["将渲染结果",{"2":{"27":1}}],["将整个渲染过程放在浏览器端完成",{"2":{"22":1}}],["将构建产物部署到服务器",{"2":{"21":1}}],["将源代码经过编译",{"2":{"21":1}}],["将静态文件上传到阿里云",{"2":{"7":1}}],["5到8年后让个人发展",{"2":{"1043":1}}],["5个设计文档",{"2":{"980":1}}],["5个已实现功能",{"2":{"980":1}}],["5个接口以内",{"2":{"190":1}}],["5173",{"2":{"955":1}}],["51kb",{"2":{"763":1}}],["56",{"2":{"904":1,"908":1}}],["53",{"2":{"965":1,"966":1}}],["53个",{"2":{"763":1}}],["53kb",{"2":{"647":1}}],["54个",{"2":{"763":1}}],["546行",{"2":{"735":1}}],["543行",{"2":{"735":1}}],["521行",{"2":{"735":1}}],["55+",{"2":{"701":1,"706":2}}],["58kb",{"2":{"646":1,"647":1}}],["599",{"2":{"260":1}}],["5秒",{"2":{"160":1}}],["5秒内相同的请求会被去重",{"2":{"87":1}}],["5xx",{"2":{"144":1,"146":1}}],["503",{"2":{"866":1}}],["50+",{"2":{"758":1}}],["500",{"2":{"144":1,"329":1,"594":1,"636":1,"784":1,"879":1,"962":5,"964":2,"966":2,"970":1}}],["500ms",{"2":{"130":1}}],["5000",{"2":{"87":1,"160":2,"262":1,"595":1,"705":2,"715":1,"1046":1}}],["50ms",{"2":{"126":1}}],["504",{"2":{"125":1,"163":1}}],["50",{"2":{"124":1,"138":1,"139":1,"354":1,"696":3,"778":1,"904":1,"962":3,"964":1,"970":1,"1036":3}}],["5分钟级任务粒度",{"2":{"980":1}}],["5分钟",{"2":{"92":1}}],["5+",{"2":{"34":1,"203":2}}],["5",{"0":{"17":1,"20":1,"34":1,"68":1,"69":1,"70":1,"71":1,"77":1,"113":1,"114":1,"115":1,"116":1,"117":1,"128":1,"150":1,"151":1,"152":1,"153":1,"154":1,"176":1,"177":1,"178":1,"179":1,"195":1,"216":1,"225":1,"226":1,"233":1,"240":1,"245":1,"246":1,"247":1,"248":1,"249":1,"256":1,"262":1,"269":1,"271":1,"281":1,"289":1,"308":1,"314":1,"321":1,"323":1,"331":1,"337":1,"342":1,"354":1,"361":1,"381":1,"386":1,"413":1,"414":1,"415":1,"417":1,"418":1,"419":2,"428":1,"429":1,"430":1,"431":1,"438":1,"451":1,"465":1,"476":1,"485":1,"486":1,"509":1,"539":1,"549":1,"579":1,"580":1,"581":1,"582":1,"583":1,"604":1,"643":1,"657":1,"687":1,"716":1,"717":1,"726":1,"745":1,"773":1,"800":1,"829":1,"861":1,"862":1,"863":1,"910":1,"919":1,"921":1,"922":1,"923":1,"949":1,"961":1,"970":1,"990":1,"1018":1,"1048":1},"1":{"35":1,"36":1,"37":1,"38":1,"69":1,"70":1,"71":1,"114":1,"115":1,"116":1,"117":1,"152":1,"153":1,"154":1,"177":1,"178":1,"179":1,"196":1,"197":1,"246":1,"247":1,"248":1,"249":1,"324":1,"325":1,"414":1,"415":1,"416":2,"417":1,"418":1,"419":1,"429":1,"430":1,"431":1,"486":1,"580":1,"581":1,"582":1,"583":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"688":1,"689":1,"690":1,"717":1,"746":1,"747":1,"774":1,"775":1,"801":1,"802":1,"803":1,"830":1,"831":1,"832":1,"862":1,"863":1,"922":1,"923":1,"991":1,"992":1},"2":{"34":1,"88":1,"127":1,"128":1,"131":1,"141":1,"144":1,"159":1,"166":1,"223":2,"231":1,"258":1,"287":2,"288":1,"317":1,"323":1,"324":1,"369":1,"383":1,"389":1,"430":1,"451":1,"471":1,"472":1,"506":1,"512":1,"521":1,"523":1,"564":1,"577":1,"581":1,"631":2,"645":1,"724":1,"728":1,"747":1,"751":1,"782":1,"863":1,"870":1,"902":1,"904":2,"916":1,"919":3,"927":1,"947":1,"965":1,"970":1,"983":1,"987":1,"988":2,"994":1,"1026":2,"1036":2,"1045":1,"1046":1,"1047":2,"1048":1}}],["y2",{"2":{"835":2}}],["y1",{"2":{"835":2}}],["yoyo",{"2":{"672":1,"677":1,"686":1,"692":1}}],["you",{"2":{"790":1}}],["youtube",{"2":{"515":2}}],["youmind",{"2":{"515":5}}],["yourapp",{"2":{"94":1}}],["your",{"2":{"85":1,"448":1,"570":1,"955":1}}],["yellow",{"2":{"484":1,"488":1}}],["yagni",{"2":{"988":1}}],["yaxis",{"2":{"714":1,"724":1}}],["yamlopenapi",{"2":{"866":1}}],["yaml",{"0":{"448":1},"2":{"335":2,"442":1,"443":2,"576":2,"581":3,"582":1,"586":2,"591":2,"778":1,"846":1,"851":4,"859":1,"865":2,"939":4,"952":2,"976":1,"980":1,"994":2}}],["yarn",{"2":{"216":1,"335":1}}],["yml",{"2":{"290":1,"677":5,"790":1,"882":1}}],["yield",{"2":{"143":5}}],["y",{"2":{"16":1,"682":2,"683":1,"685":3,"692":1,"693":2,"696":1,"706":1,"749":2,"782":1,"818":1,"819":1,"865":1}}],["请教",{"2":{"1008":1}}],["请备注",{"2":{"1004":1}}],["请解释以下代码",{"2":{"582":1}}],["请帮我提交当前已经",{"2":{"581":1}}],["请务必在享受",{"2":{"539":1}}],["请严格遵循以下三步流程",{"2":{"494":1}}],["请严格遵守以下",{"2":{"451":1}}],["请使用",{"2":{"451":1}}],["请使用此技能",{"2":{"451":1}}],["请参考",{"2":{"451":1}}],["请将这些通用规则抽离出来",{"2":{"437":1}}],["请指出我分析中的漏洞",{"2":{"375":1}}],["请检查这三个文件的潜在安全问题",{"2":{"583":1}}],["请检查",{"2":{"370":1}}],["请记住",{"2":{"180":1}}],["请重新连",{"2":{"163":1}}],["请重新登录",{"2":{"147":1}}],["请介绍一下自己",{"2":{"144":1}}],["请求将在该间隔后自动重试",{"2":{"898":1}}],["请求头",{"2":{"898":1}}],["请求头对象",{"2":{"141":1}}],["请求是否可以取消",{"2":{"662":1}}],["请求通过此方法发送",{"2":{"662":1}}],["请求发送器",{"2":{"662":1}}],["请求取消",{"2":{"649":1}}],["请求封装",{"2":{"647":1}}],["请求库",{"2":{"342":2}}],["请求与响应",{"2":{"275":1}}],["请求逻辑的统一",{"2":{"256":1}}],["请求参数",{"2":{"199":1}}],["请求即响应",{"2":{"166":1}}],["请求扩展",{"2":{"155":1}}],["请求订阅任务流",{"2":{"154":1}}],["请求地址",{"2":{"141":1}}],["请求体等",{"2":{"874":1}}],["请求体数据",{"2":{"144":1}}],["请求体对象",{"2":{"141":2}}],["请求体",{"2":{"135":1,"141":1,"142":1}}],["请求限制",{"2":{"135":1}}],["请求方式受限",{"2":{"135":1}}],["请求的",{"0":{"154":1},"2":{"126":1}}],["请求可能因网络问题投递失败",{"2":{"121":1}}],["请求去重",{"2":{"85":1,"342":1}}],["请求并获取数据",{"2":{"85":1}}],["请求获取最新数据",{"2":{"85":1}}],["请求按组件树串行发起",{"2":{"47":1}}],["请求组合实现精细化控制",{"2":{"47":1}}],["请求处理",{"2":{"45":1,"576":1,"889":1}}],["请求时",{"2":{"75":1}}],["请求时获取",{"2":{"45":1}}],["请求时动态生成",{"2":{"3":1}}],["请求",{"2":{"21":2,"47":1,"69":1,"83":1,"89":1,"94":1,"102":1,"103":1,"112":1,"113":1,"114":1,"115":1,"119":1,"125":1,"126":1,"131":3,"135":1,"141":1,"155":1,"162":1,"163":1,"274":2,"275":2,"279":1,"342":3,"649":1,"860":1,"873":1,"898":3,"906":1}}],["请输入你的邮箱",{"2":{"16":1}}],["登录接口若为了",{"2":{"200":1}}],["登录后才能访问的内部系统",{"2":{"45":1}}],["登录后同步",{"2":{"18":1}}],["登录后评论",{"2":{"16":1}}],["登录",{"2":{"16":1,"17":1}}],["提到",{"2":{"587":2}}],["提到的一个常见的商业管理模式",{"2":{"1008":1}}],["提到的",{"2":{"359":1}}],["提任务",{"2":{"559":1}}],["提效的同时",{"2":{"539":1}}],["提效时",{"2":{"526":1}}],["提问",{"2":{"514":1}}],["提问力决定生产力",{"0":{"358":1}}],["提高对环境的适应能力",{"2":{"1025":1}}],["提高复杂图形的重绘性能",{"2":{"682":1}}],["提高规划的可行性和执行效率",{"2":{"422":1}}],["提高代码的可维护性和可复用性",{"2":{"296":1}}],["提高了代码的可维护性",{"2":{"292":1}}],["提高开发效率和代码质量",{"2":{"293":1}}],["提高开发效率",{"2":{"285":1,"569":1}}],["提高业务价值",{"2":{"283":1}}],["提案",{"2":{"203":1}}],["提前到了",{"2":{"326":1}}],["提前定义了大量未使用的字段和方法",{"2":{"184":1}}],["提前加入复杂逻辑",{"2":{"183":1}}],["提前设计未来功能",{"0":{"183":1},"1":{"184":1,"185":1}}],["提出一个新的开发需求",{"2":{"991":1}}],["提出并推动的一种开放式标准",{"2":{"547":1}}],["提出并实现",{"2":{"41":1}}],["提出正确问题的能力",{"2":{"367":1}}],["提出",{"2":{"181":1,"304":1,"987":1}}],["提升效率",{"2":{"1040":1}}],["提升自身身体素质",{"2":{"1026":1}}],["提升自身健康",{"2":{"1026":1}}],["提升开发体验",{"2":{"881":1}}],["提升性能",{"2":{"730":1}}],["提升思考深度和执行效率",{"2":{"626":1}}],["提升",{"2":{"578":1}}],["提升他们协助孩子分析与解决问题的能力",{"2":{"494":1}}],["提升信息传达效率",{"2":{"468":1}}],["提升信息处理转化率的",{"2":{"356":1}}],["提升你的实现速度",{"2":{"463":1}}],["提升整体吞吐量",{"2":{"438":1}}],["提升运行质量",{"2":{"409":1}}],["提升模型对深层语义的理解",{"2":{"352":1}}],["提升索引的新鲜度和全面性",{"2":{"352":1}}],["提升到了",{"2":{"317":1}}],["提升可维护性",{"2":{"297":1}}],["提升编译速度",{"2":{"212":1}}],["提升编译效率",{"2":{"207":1}}],["提升灵活性",{"2":{"169":1}}],["提升的是",{"2":{"169":1}}],["提升了系统吞吐量",{"2":{"106":1}}],["提取的元数据",{"2":{"994":1}}],["提取结构",{"2":{"828":1}}],["提取器",{"2":{"790":1}}],["提取指标",{"2":{"470":1}}],["提取关键洞察",{"2":{"468":1}}],["提取网页内容",{"2":{"412":1}}],["提取公共方法",{"2":{"188":1}}],["提取字段值",{"2":{"143":1}}],["提取字段名",{"2":{"143":1}}],["提取",{"2":{"141":1}}],["提取所有完整的行",{"2":{"141":1}}],["提交模板",{"2":{"980":2}}],["提交到",{"2":{"570":1,"571":1,"596":1}}],["提交历史中没有空的或重复的合并记录",{"2":{"451":1}}],["提交",{"2":{"451":1,"570":6,"650":1,"654":1,"988":1}}],["提交规范",{"2":{"451":1}}],["提交代码",{"2":{"451":1}}],["提交任务",{"2":{"126":1}}],["提交表单",{"2":{"103":1}}],["提交评论",{"2":{"16":3}}],["提示框等",{"2":{"709":1}}],["提示框组件",{"2":{"706":1}}],["提示框",{"2":{"699":1}}],["提示用户并拒绝执行提交",{"2":{"581":1}}],["提示用户检查",{"2":{"449":1}}],["提示词生成",{"2":{"939":1}}],["提示词标准化",{"2":{"912":1}}],["提示词工程",{"2":{"901":1}}],["提示词演进",{"2":{"503":1}}],["提示词",{"2":{"358":1}}],["提示信息",{"2":{"196":1}}],["提示",{"2":{"21":1,"320":1,"490":1,"988":1}}],["提供更丰富的交互体验",{"2":{"965":1}}],["提供更好的类型推断",{"2":{"264":1}}],["提供最符合直觉的物理隔离",{"2":{"965":1}}],["提供最关键的先验知识",{"2":{"367":1}}],["提供数据绑定和状态",{"2":{"938":1}}],["提供数据点到像素的映射能力",{"2":{"709":1}}],["提供三种钩子",{"2":{"920":1}}],["提供服务定位器模式",{"2":{"919":1}}],["提供指数退避重试包装器",{"2":{"915":1}}],["提供面向开发者的高层",{"2":{"906":1}}],["提供开箱即用的",{"2":{"901":1}}],["提供开箱即用的自动重试",{"2":{"91":1}}],["提供商",{"2":{"901":1}}],["提供商的",{"2":{"901":1}}],["提供完整的类型定义",{"2":{"881":1}}],["提供稳定的元素重识别机制",{"2":{"858":1}}],["提供结构化的技能和确定性的输出",{"2":{"848":1}}],["提供结构化工作流",{"2":{"846":1}}],["提供浏览器操作和",{"2":{"843":1}}],["提供窄范围的内联富文本布局",{"2":{"799":1}}],["提供迭代器式",{"2":{"798":1}}],["提供者",{"2":{"798":1}}],["提供声明式",{"2":{"770":1}}],["提供多个入口文件以适应不同使用场景",{"2":{"765":1}}],["提供多级",{"2":{"478":1}}],["提供属性插值",{"2":{"734":1}}],["提供所有可注册类型的入口",{"2":{"720":1}}],["提供所有可注册的类型入口",{"2":{"711":1}}],["提供坐标系变换的嵌套",{"2":{"680":1}}],["提供树的遍历",{"2":{"680":1}}],["提供事件监听系统",{"2":{"680":1}}],["提供创建",{"2":{"675":1}}],["提供兼容性",{"2":{"673":1}}],["提供可视化伴侣",{"2":{"987":1}}],["提供可视化的锚点控件",{"2":{"680":1}}],["提供可视化编辑功能",{"2":{"656":1}}],["提供可参考的同类问题",{"2":{"494":1}}],["提供编辑器基础设施",{"2":{"656":1}}],["提供沙箱安全的公式计算能力",{"2":{"645":1}}],["提供补充视角",{"2":{"628":1}}],["提供精准的上下文感知补全和",{"2":{"567":1}}],["提供个人免费版与企业版",{"2":{"564":1}}],["提供高质量的上下文",{"2":{"557":1}}],["提供统一",{"2":{"523":1,"812":1}}],["提供通用对话",{"2":{"512":1}}],["提供全面的教学辅助",{"2":{"493":1}}],["提供全球",{"2":{"7":1}}],["提供简洁而强大的",{"2":{"812":1}}],["提供简洁的",{"2":{"478":1}}],["提供简单",{"2":{"341":1}}],["提供底层工具链支持",{"2":{"442":1}}],["提供持续积累的知识与对话上下文",{"2":{"437":1}}],["提供的推理",{"2":{"523":1}}],["提供的声明式开发体验",{"2":{"476":1}}],["提供的",{"2":{"345":1,"491":1}}],["提供的是",{"2":{"143":1}}],["提供卓越的",{"2":{"344":1}}],["提供一致的渲染结果",{"2":{"757":1}}],["提供一致的状态更新和可预测的行为",{"2":{"341":1}}],["提供一个不如意但价格相近的选项",{"2":{"397":1}}],["提供一体化的开发体验",{"2":{"344":1}}],["提供比",{"2":{"343":1}}],["提供动态路由匹配",{"2":{"341":2}}],["提供丰富的组件和样式",{"2":{"340":2}}],["提供清晰的",{"2":{"331":1}}],["提供类似集合的接口来访问领域对象",{"2":{"278":1}}],["提供横切关注点支持",{"2":{"274":1}}],["提供需求描述或",{"2":{"170":1}}],["提供极度精细的生命周期控制和强大的底层",{"2":{"98":1}}],["提供了卓越的开发者体验",{"2":{"1003":1}}],["提供了封闭的枚举上下文",{"2":{"965":1}}],["提供了变量",{"2":{"958":1}}],["提供了类型安全和数据验证功能",{"2":{"904":1}}],["提供了从数据流到",{"2":{"901":1}}],["提供了两个入口",{"2":{"679":1}}],["提供了另一种抽象层次",{"2":{"589":1}}],["提供了一系列高度可组合",{"2":{"962":1}}],["提供了一个与",{"2":{"482":1}}],["提供了一个随时可回滚的基线",{"2":{"171":1}}],["提供了一种简单的方式来管理全局状态",{"2":{"341":1}}],["提供了高性能的网页渲染和交互功能",{"2":{"338":1}}],["提供了深度优化的可能",{"2":{"307":1}}],["提供了配置文件的方式来管理编译设置",{"2":{"202":1}}],["提供了专门的",{"2":{"98":1,"961":1}}],["提供了",{"2":{"59":1,"71":1,"92":1,"98":1,"153":1,"205":1,"784":1}}],["提供",{"2":{"9":1,"11":1,"518":1,"521":2,"522":4,"523":2,"670":1,"682":1,"704":1,"713":1,"731":1,"742":1,"891":1,"906":1}}],["在尝试去观察改善",{"2":{"1048":1}}],["在做饭花样和做饭花费时间上的把握更加精确",{"2":{"1047":1}}],["在吃极少量主食和加大运动量的坚持下",{"2":{"1047":1}}],["在查过一些资料文章后",{"2":{"1046":1}}],["在第二阶段快结束时遇到了体重基本不再下降",{"2":{"1046":1}}],["在下降",{"2":{"1045":1}}],["在下一次重构或开启新项目时",{"2":{"971":1}}],["在积累到一定数据量后",{"2":{"1044":1}}],["在读了伟人的文章后",{"2":{"1043":1}}],["在读了近一年多的文章和书以后",{"2":{"1043":1}}],["在操作的过程中也有跟老同学",{"2":{"1043":1}}],["在康复期间",{"2":{"1043":1}}],["在身体养护方面从",{"2":{"1043":1}}],["在经济快速发展的大背景下",{"2":{"1043":1}}],["在经过初步的研究对比分析后",{"2":{"477":1}}],["在居家办公的时候",{"2":{"1040":1}}],["在疫情中后期",{"2":{"1041":1}}],["在疫情到来之前",{"2":{"1041":1}}],["在疫情后我们要不要继续实践混合工作制呢",{"2":{"1039":1}}],["在疫情进入初步放开的新阶段",{"2":{"1019":1}}],["在升级清单管理前",{"2":{"1037":1}}],["在上述延伸思考下",{"2":{"1041":1}}],["在上述",{"2":{"1032":1}}],["在阅读工具的选择方面笔者经历了以下几个阶段",{"2":{"1031":1}}],["在毕业时也留下了两篇关于这方面的总结文章",{"2":{"1020":1}}],["在基础逻辑与行动指导",{"2":{"1011":1}}],["在得到休息的同时增添乐趣",{"2":{"1009":1}}],["在设计产品过程中与研究团队专注设计模型行为",{"2":{"1008":1}}],["在设计获批前编写任何代码",{"2":{"987":1}}],["在增强回路的成效越来越低时",{"2":{"1007":1}}],["在知识付费时代",{"2":{"1007":1}}],["在平衡思维与多维度视角的基础上",{"2":{"1006":1}}],["在平衡思维下",{"2":{"1006":1}}],["在一定程度上是可以避免进入",{"2":{"1006":1}}],["在重读",{"2":{"1006":1}}],["在重新思考技术演进的逻辑后",{"2":{"554":1}}],["在目标制定",{"2":{"1005":1}}],["在时间的累加效应加持下",{"2":{"1005":1}}],["在倒逼自己关注身体健康和时间管理后",{"2":{"1005":1}}],["在特定生命周期事件",{"2":{"983":1}}],["在每次会话启动时自动将",{"2":{"978":1}}],["在每一轮反思中",{"2":{"426":1}}],["在纯文本环境更稳定",{"2":{"976":1}}],["在将这些工具组合时",{"2":{"970":1}}],["在安全的局部作用域内进行逻辑封装与样式覆写",{"2":{"968":1}}],["在安全与效率之间取得了极佳平衡",{"2":{"478":1}}],["在日常工作与生活中",{"2":{"1007":1}}],["在日常业务开发中",{"2":{"967":1}}],["在日常复盘时",{"2":{"385":1}}],["在哪些文件中查找类名",{"2":{"962":1}}],["在所有选择器的末尾加上对应的属性选择器",{"2":{"961":1}}],["在浏览器中最终会被编译成类似",{"2":{"960":1}}],["在浏览器中直接生成并运行完整的",{"2":{"561":1}}],["在浏览器侧动态计算和注入",{"2":{"959":1}}],["在主聊天窗口中渲染",{"2":{"934":1}}],["在多",{"2":{"933":1}}],["在循环中调用",{"2":{"918":1}}],["在流关闭时",{"2":{"899":1}}],["在连接正常关闭时",{"2":{"898":1}}],["在新动画创建时查找冲突并决定行为",{"2":{"832":1}}],["在新的范式下",{"2":{"558":1}}],["在构造函数中通过",{"2":{"825":1}}],["在构建特定场景的",{"2":{"547":1}}],["在构建",{"2":{"101":1,"433":1}}],["在构建阶段",{"2":{"960":1}}],["在构建阶段自动将类名变成局部变量",{"2":{"960":1}}],["在构建阶段会生成一个轻量的客户端",{"2":{"53":1}}],["在构建阶段提前执行页面代码",{"2":{"30":1}}],["在系统中的角色",{"2":{"822":1}}],["在系统设计上是一笔不小的开销",{"2":{"124":1}}],["在段内字形边界断行",{"2":{"797":1}}],["在段前断行",{"2":{"797":1}}],["在行尾正确扣除最后一个字形的额外间距",{"2":{"797":1}}],["在字形边界做紧急断行",{"2":{"797":1}}],["在字号",{"2":{"796":1}}],["在宽度超过",{"2":{"797":1}}],["在核心引擎之上提供内联富文本的边界空白折叠和原子项处理",{"2":{"788":1}}],["在核心运作机制上",{"2":{"103":1}}],["在光照计算中为场景提供照明",{"2":{"766":1}}],["在隔离上下文中执行单一任务的独立",{"2":{"983":1}}],["在隔离上下文中",{"2":{"742":1}}],["在模型基本确定的情况下",{"2":{"1009":1}}],["在模拟的",{"2":{"742":1}}],["在模块化和性能上有了长足进步",{"2":{"323":1}}],["在模块运行前",{"2":{"305":1}}],["在播放器中对应一个",{"2":{"738":1}}],["在调度管道的",{"2":{"715":1}}],["在整个管道完成后执行",{"2":{"712":1}}],["在类的原型链上定义属性访问器",{"2":{"685":1}}],["在类型层面是可见的",{"2":{"246":1}}],["在弹窗",{"2":{"663":1}}],["在沙箱环境中求值",{"2":{"655":1}}],["在渲染时通过",{"2":{"828":1}}],["在渲染时",{"2":{"652":1}}],["在渲染过程中",{"2":{"649":1}}],["在网络推荐算法和同温层环境的双重作用下",{"2":{"618":1}}],["在书中观摩大师的智慧",{"2":{"615":1}}],["在获取信息门槛越来越低的今天",{"2":{"615":1}}],["在如今",{"2":{"610":1}}],["在他人的追问和质疑中",{"2":{"610":1}}],["在面临大概率活到100岁的",{"2":{"605":1}}],["在面对需要跨越数十个步骤的自动化工程任务时",{"2":{"431":1}}],["在面对海量并发和复杂的网关负载均衡时",{"2":{"156":1}}],["在喧嚣中找准自我的定位",{"2":{"604":1}}],["在梁晓声对各阶层生存困境的细腻描摹中",{"2":{"604":1}}],["在碎片化与不确定性并存的时代",{"2":{"604":1}}],["在宏观历史与微观现实间构建认知",{"2":{"604":1}}],["在巅峰时刻主动寻求突破",{"2":{"603":1}}],["在泛滥的信息中识别本质",{"2":{"603":1}}],["在信息时代",{"2":{"613":1}}],["在信息爆炸与快速变革的时代",{"2":{"603":1}}],["在信息过载与高压竞争的现代环境中",{"2":{"602":1}}],["在信息不完整",{"2":{"363":1}}],["在追逐",{"2":{"601":1}}],["在关键时刻自动介入",{"2":{"597":1}}],["在受控范围内执行操作",{"2":{"597":1}}],["在危险操作发生之前就将其拦截",{"2":{"593":1}}],["在独立窗口中审查数千行代码时",{"2":{"590":1}}],["在独立分支快速产出多份候选代码",{"2":{"171":1}}],["在独立分支中全自动化生成代码",{"2":{"171":1}}],["在正确的场景下自动出现",{"2":{"576":1}}],["在过去的两年里",{"2":{"569":1}}],["在终端中直接与代码库深度对话",{"2":{"567":1}}],["在输入框用自然语言描述需求",{"2":{"561":1}}],["在输入框描述你的应用",{"2":{"561":1}}],["在逐渐接管",{"2":{"555":1}}],["在技术通缩的时代",{"2":{"552":1}}],["在技术快速迭代的今天",{"2":{"201":1}}],["在万卡级别的",{"2":{"551":1}}],["在成本与性能之间取舍",{"2":{"549":1}}],["在前端生态中已成为主流",{"2":{"881":1}}],["在前端框架",{"2":{"543":1}}],["在前端领域",{"2":{"178":1}}],["在产品成功率不足",{"2":{"600":1}}],["在产品应用层",{"2":{"541":1}}],["在产品设计中",{"2":{"394":1}}],["在推理过程中反复纠结",{"2":{"537":1}}],["在推送",{"2":{"451":1}}],["在人类的模糊意图与机器的结构化理解之间",{"2":{"536":1}}],["在人类大脑中",{"2":{"421":1}}],["在随机性之上",{"0":{"534":1},"1":{"535":1,"536":1,"537":1,"538":1}}],["在自然语言编程时代重塑工程",{"0":{"530":1},"1":{"531":1,"532":1,"533":1}}],["在讨论",{"2":{"526":1}}],["在长文档分析",{"2":{"521":1}}],["在对比具体平台之前",{"2":{"519":1}}],["在搜索结果顶部嵌入的",{"2":{"518":1}}],["在线预览",{"2":{"641":1}}],["在线轻量版供快速体验",{"2":{"564":1}}],["在线学编程",{"2":{"562":1}}],["在线课程复习",{"2":{"515":1}}],["在线游戏状态同步",{"2":{"167":1}}],["在中文理解与生成",{"2":{"512":1}}],["在英文处理",{"2":{"510":1}}],["在指令中展现出清晰的结构化",{"2":{"509":1}}],["在完成",{"2":{"509":1}}],["在音节上",{"2":{"506":1}}],["在回调内重新抛出错误以停止整个操作",{"2":{"898":1}}],["在回答时",{"2":{"504":1}}],["在回应家长提问时",{"2":{"494":1}}],["在创作过程中",{"2":{"504":1}}],["在创作过程中既能调用工具",{"2":{"502":1}}],["在后续的扩展和微调上缺乏灵活性",{"2":{"504":1}}],["在后台发送",{"2":{"85":1}}],["在选题阶段",{"2":{"492":1}}],["在极限开发的时间压力下",{"2":{"492":1}}],["在真实业务场景中可能面临的",{"2":{"491":1}}],["在真正的生产环境中",{"2":{"163":1}}],["在测试阶段",{"2":{"481":1}}],["在研究完成后",{"2":{"474":1}}],["在工作与业余项目中",{"2":{"1000":1}}],["在工具化阶段",{"2":{"459":1}}],["在工程实践中",{"2":{"423":1}}],["在提交前",{"2":{"451":1}}],["在开始开发前",{"2":{"451":1}}],["在开发热更新工具时",{"2":{"334":1}}],["在需要专业判断时指派",{"2":{"597":1}}],["在需要时可查阅的其他文档",{"2":{"442":1}}],["在需要传递复杂查询参数",{"2":{"112":1}}],["在其旗舰模型",{"2":{"441":1}}],["在智能体生态里",{"2":{"434":1}}],["在具体的子任务执行中开启",{"2":{"433":1}}],["在大模型越来越被大家熟知后",{"2":{"1011":1}}],["在大模型发展日新月异的今天",{"2":{"598":1}}],["在大语言模型",{"2":{"441":1}}],["在大目标上使用",{"2":{"433":1}}],["在大型工程中",{"2":{"335":1}}],["在大型项目中",{"2":{"312":1}}],["在大型应用项目中",{"2":{"205":1,"211":1}}],["在理解了",{"2":{"432":1}}],["在执行",{"2":{"451":2}}],["在执行具体步骤时",{"2":{"443":1}}],["在执行第",{"2":{"430":1}}],["在执行过程中不断",{"2":{"408":1}}],["在分析完侧重",{"2":{"428":1}}],["在分解任务的同时进行规划",{"2":{"424":1}}],["在众多的",{"2":{"493":1}}],["在众多",{"2":{"427":1}}],["在处理复杂",{"2":{"968":1}}],["在处理复杂任务时",{"2":{"424":1}}],["在处理极端定制",{"2":{"965":1}}],["在处理现实事务时会暴露无遗",{"2":{"614":1}}],["在处理任务时按需发现",{"2":{"436":1}}],["在处理链式调用或复杂的并行变更时",{"2":{"98":1}}],["在动手期之前",{"2":{"447":1}}],["在动手之前",{"2":{"423":1}}],["在动手构建任何复杂的软件架构之前",{"2":{"377":1}}],["在复杂业务中的边界",{"2":{"1000":1}}],["在复杂的",{"2":{"547":1}}],["在复杂环境中寻找最优路径的",{"2":{"421":1}}],["在复制验证码的短信里加一个",{"2":{"370":1}}],["在单",{"2":{"415":1}}],["在单向推送场景轻量而优雅",{"2":{"132":1}}],["在数字化时代",{"2":{"1007":1}}],["在数学",{"2":{"614":1}}],["在数百万条记录中快速定位相关信息",{"2":{"410":1}}],["在数据过期",{"2":{"91":1}}],["在显著重构工作模式后",{"2":{"405":1}}],["在细微之处",{"2":{"397":1}}],["在方寸之间",{"2":{"397":1}}],["在约束条件下求最优解",{"0":{"394":1}}],["在竞争激烈的成熟市场",{"2":{"392":1}}],["在冰柜这个",{"2":{"391":1}}],["在试图洞察万事万物时",{"2":{"388":1}}],["在物理世界和现实系统中",{"2":{"388":1}}],["在现实世界中",{"2":{"1007":1}}],["在现实社会中",{"2":{"614":1}}],["在现实中创造真实的价值",{"2":{"615":1}}],["在现实中",{"2":{"383":1}}],["在现代前端开发中",{"2":{"957":1}}],["在现代前端工程中已基本不再使用",{"2":{"957":1}}],["在现代前端工程中",{"2":{"83":1}}],["在现代",{"2":{"156":1,"333":1}}],["在营销与团队构建层面",{"2":{"380":1}}],["在哲学层面是不谋而合的",{"2":{"379":1}}],["在笔者看来",{"2":{"379":1,"1029":1,"1030":1}}],["在笔记本上写下你的预测",{"2":{"369":1}}],["在找到真实需求后",{"2":{"378":1}}],["在错误发生时",{"2":{"376":1}}],["在脑海中",{"2":{"374":1}}],["在任何新功能上线前",{"2":{"369":1}}],["在你预设的",{"2":{"367":1}}],["在此基础上增加了",{"2":{"918":1}}],["在此模式下",{"2":{"484":1}}],["在此阶段只感知技能的存在与用途",{"2":{"443":1}}],["在此处体现为",{"2":{"367":1}}],["在此期间",{"2":{"92":1}}],["在购物车页面放置了",{"2":{"366":1}}],["在很长一段时间里",{"2":{"363":1,"553":1,"1001":1}}],["在很长一段时间内",{"2":{"306":1}}],["在机器面前保持好奇",{"0":{"362":1}}],["在算力面前保持敬畏",{"0":{"362":1}}],["在当下变得愈发不可承受",{"2":{"361":1}}],["在当前众多顶级的",{"2":{"156":1}}],["在当前很多顶级的",{"2":{"123":1}}],["在某种程度上正是我们洞察力与品味的直接映射",{"2":{"358":1}}],["在某些最新的服务端边缘计算环境中可能受限",{"2":{"342":1}}],["在某些场景",{"2":{"315":1}}],["在未来",{"2":{"358":1}}],["在文章的最后",{"2":{"1018":1,"1042":1}}],["在文章的构思与润色过程中",{"2":{"1002":1}}],["在文章中反复强调独立思考",{"2":{"360":1}}],["在文章中给出了答案",{"2":{"357":1}}],["在文学创作这种",{"2":{"496":1}}],["在文件顶部加",{"2":{"62":1}}],["在巨头林立的赛道中",{"2":{"356":1}}],["在互联网上自主穿梭",{"2":{"355":1}}],["在不同宽度下计算高度",{"2":{"801":1}}],["在不同时间返回的",{"2":{"47":1}}],["在不牺牲精度的前提下榨干每一滴",{"2":{"551":1}}],["在不牺牲答案真实性和用户体验的前提下探索商业化",{"2":{"354":1}}],["在不久的将来",{"2":{"419":1}}],["在不断实践中",{"2":{"400":1}}],["在性能优化上借鉴了",{"2":{"353":1}}],["在交互设计上做出了几个违背传统搜索常理的决策",{"2":{"350":1}}],["在交叉类型上的行为",{"0":{"239":1}}],["在生成简明答案时",{"2":{"349":1}}],["在保持第一",{"2":{"1048":1}}],["在保持第一和二阶段建立的习惯基础上",{"2":{"1047":1}}],["在保持第一阶段建立的习惯基础上",{"2":{"1046":1}}],["在保持源码可读性的同时",{"2":{"226":1}}],["在保留传统蓝链的同时提供综合答案",{"2":{"518":1}}],["在保留了完整的现代前端缓存调度能力的同时",{"2":{"342":1}}],["在团队协作中",{"2":{"330":1}}],["在团队工程中",{"2":{"311":1}}],["在全栈开发的语境下",{"2":{"326":1}}],["在全局只有一个实例",{"2":{"301":1}}],["在原生",{"2":{"317":1}}],["在函数",{"2":{"1011":1}}],["在函数内部使用动态导入",{"2":{"315":1}}],["在函数体内对",{"2":{"254":1}}],["在标准规范中寻求最优解",{"0":{"316":1}}],["在标准之上构建未来",{"0":{"309":1}}],["在标准化脚手架搭建上效率极高",{"2":{"171":1}}],["在代码合并入主分支之前",{"2":{"535":1}}],["在代码执行前",{"2":{"314":1}}],["在代码编译阶段就能确定依赖关系",{"2":{"307":1}}],["在代码提交",{"2":{"120":1}}],["在运行时侦测当前环境",{"2":{"306":1}}],["在运行时只是一个",{"2":{"247":1}}],["在它出现之前",{"2":{"304":1}}],["在秩序与复杂中寻找平衡",{"0":{"303":1}}],["在深入理论之前",{"2":{"295":1}}],["在这所更大的学校中",{"2":{"1049":1}}],["在这期间",{"2":{"1046":1}}],["在这方面尝试改善了下",{"2":{"1034":1}}],["在这场变革中",{"2":{"569":1}}],["在这一层",{"2":{"540":1}}],["在这一节",{"2":{"361":1}}],["在这种客观条件的倒逼下",{"2":{"1040":1}}],["在这种",{"2":{"1036":1}}],["在这种多智能体合作的场景下",{"2":{"475":1}}],["在这种背景下",{"2":{"414":1,"419":1}}],["在这类场景中",{"2":{"405":1}}],["在这里体现为",{"2":{"367":1}}],["在这个阶段",{"2":{"1037":1}}],["在这个博客",{"2":{"1001":1}}],["在这个从",{"2":{"971":1}}],["在这个时代",{"2":{"539":1,"613":1}}],["在这个案例中",{"2":{"473":1}}],["在这个过程中",{"2":{"464":1}}],["在这个范式下",{"2":{"440":1}}],["在这个生态里",{"2":{"434":1}}],["在这个",{"2":{"370":1,"420":1}}],["在这个技术天翻地覆的时代",{"2":{"362":1}}],["在这个信息大爆炸的时代",{"2":{"359":1}}],["在这个经典的生产者",{"2":{"126":1}}],["在这样的背景下",{"2":{"294":1}}],["在采用微前端架构之前",{"2":{"292":1}}],["在决定采用微前端架构时",{"2":{"292":1}}],["在微前端架构中",{"2":{"286":1}}],["在项目中的行为边界",{"2":{"593":1}}],["在项目中实施",{"2":{"282":1}}],["在项目根目录执行",{"2":{"567":1}}],["在项目初期确定统一的渲染策略",{"2":{"47":1}}],["在组件中作为对象导入",{"2":{"960":1}}],["在组件化开发中广泛应用",{"2":{"263":1}}],["在组件渲染前对数据进行转换",{"2":{"95":1}}],["在没有看到效果前大多数人都容易放弃",{"2":{"1034":1}}],["在没有任何动画播放时自动停止循环",{"2":{"740":1}}],["在没有",{"2":{"414":1}}],["在没有泛型的时代",{"2":{"255":1}}],["在没有规范的情况下直接写代码",{"2":{"177":1}}],["在参数位置",{"2":{"254":1}}],["在属性类型冲突时会直接编译报错",{"2":{"237":1}}],["在集合运算中对应交集操作",{"2":{"236":1}}],["在联合类型上的行为",{"0":{"233":1}}],["在进行类型收窄之前",{"2":{"229":1}}],["在非",{"2":{"216":1}}],["在引用项目时可能不生效",{"2":{"216":1}}],["在应对复杂业务的挑战时",{"2":{"971":1}}],["在应对复杂需求时",{"2":{"201":1}}],["在应用的入口",{"2":{"94":1}}],["在编码平台中启动会话",{"2":{"999":1}}],["在编码阶段",{"2":{"960":1}}],["在编译阶段",{"2":{"961":1}}],["在编辑器里引入",{"2":{"559":1}}],["在编写下一行",{"2":{"337":1}}],["在编写代码时",{"2":{"171":1,"254":1}}],["在编程与设计中",{"2":{"201":1}}],["在编程",{"2":{"182":1}}],["在规范中明确要求",{"2":{"177":1}}],["在定义",{"2":{"173":1}}],["在状态与交互介入之前",{"2":{"171":1}}],["在实践中打磨产品思维",{"2":{"1000":1}}],["在实践中",{"2":{"170":1,"250":1}}],["在实际应用",{"2":{"485":1}}],["在实际应用中",{"2":{"129":1}}],["在实际工程中",{"2":{"452":1}}],["在实际工程实践中",{"2":{"55":1}}],["在实际开发中",{"2":{"299":1}}],["在实际项目开发中",{"2":{"264":1}}],["在实际项目中应用微前端架构",{"2":{"291":1}}],["在实际项目中应用",{"2":{"281":1}}],["在实际项目中",{"2":{"226":1,"588":1}}],["在实际项目中使用",{"2":{"145":1}}],["在实际编程中有直接应用",{"2":{"244":1}}],["在实际生产环境中",{"2":{"168":1}}],["在实际业务中往往成为瓶颈",{"2":{"140":1}}],["在软件工程中",{"2":{"169":1}}],["在接收到",{"2":{"146":1}}],["在本文我们将重点探讨",{"2":{"133":1}}],["在web",{"2":{"133":1}}],["在业务场景的约束下做出最优雅的取舍",{"2":{"132":1}}],["在维持长连接",{"2":{"131":1}}],["在水平扩容场景下",{"2":{"117":1}}],["在带来极致性能的同时",{"2":{"117":1}}],["在逻辑上比纯粹的流式传输更具约束力",{"2":{"108":1}}],["在请求方式",{"2":{"106":1}}],["在同一时刻",{"2":{"103":1}}],["在同一个渲染周期内",{"2":{"85":1}}],["在企业级应用中",{"2":{"92":1,"417":1}}],["在企业级项目中",{"2":{"87":1}}],["在底层维护了一个全局的",{"2":{"92":1}}],["在传统开发模式下",{"2":{"527":1}}],["在传统搜索中",{"2":{"350":1}}],["在传统模式下",{"2":{"92":1}}],["在传统的数据获取流程中",{"2":{"83":1}}],["在缓存有效期内多次调用只会执行一次物理网络请求",{"2":{"91":1}}],["在配合",{"2":{"85":1}}],["在客户端中",{"2":{"160":1}}],["在客户端的标准方案",{"2":{"137":1}}],["在客户端渲染",{"2":{"63":1}}],["在客户端用",{"2":{"61":1}}],["在于如何将宏大叙事转化为个人的行动力量",{"2":{"604":1}}],["在于",{"2":{"63":1}}],["在服务器过载",{"2":{"158":1}}],["在服务器接收到请求时实时执行页面代码",{"2":{"26":1}}],["在服务端运行",{"2":{"70":1}}],["在服务端动态生成",{"2":{"70":1}}],["在服务端使用",{"2":{"47":1}}],["在",{"2":{"16":1,"17":3,"18":2,"34":1,"38":1,"57":1,"59":1,"61":1,"62":1,"68":2,"74":1,"96":1,"97":1,"103":2,"105":1,"112":2,"115":1,"170":1,"171":1,"179":1,"216":2,"217":1,"221":1,"224":1,"232":1,"244":1,"256":1,"309":1,"320":1,"322":1,"332":1,"333":1,"342":1,"348":1,"353":1,"357":1,"358":1,"360":1,"361":1,"363":1,"367":2,"376":1,"402":1,"410":1,"415":1,"426":1,"430":1,"437":1,"441":1,"466":1,"467":1,"495":2,"499":1,"508":1,"509":1,"523":1,"525":2,"532":1,"539":1,"540":1,"550":1,"555":1,"556":1,"581":1,"591":1,"610":1,"737":1,"771":2,"788":1,"793":1,"827":1,"902":1,"962":1,"966":1,"968":2,"969":1,"970":2,"1005":1,"1011":1,"1026":1,"1031":1}}],["在静态项目中直接编写",{"2":{"8":1}}],["和渐进明细的方式",{"2":{"1025":1}}],["和你的姓名",{"2":{"1004":1}}],["和极致的性能",{"2":{"1003":1}}],["和极致的工程优化",{"2":{"351":1}}],["和正文内容",{"2":{"983":1}}],["和引导指令",{"2":{"973":1}}],["和函数",{"2":{"965":1}}],["和函数等编程特性",{"2":{"958":1}}],["和各种",{"2":{"964":1}}],["和各类生成式工具",{"2":{"461":1}}],["和客户端渲染层",{"2":{"938":1}}],["和组件",{"2":{"906":1}}],["和浏览器",{"2":{"846":1}}],["和子节点链表管理",{"2":{"824":1}}],["和所有缓存",{"2":{"798":1}}],["和测量阶段",{"2":{"798":1}}],["和可选的",{"2":{"792":1}}],["和世界变换矩阵",{"2":{"769":1}}],["和源代码分析提取",{"2":{"749":1}}],["和区域",{"2":{"714":1}}],["和弦图",{"2":{"706":1}}],["和性能",{"2":{"673":1}}],["和性能损耗",{"2":{"47":1}}],["和内存开销",{"2":{"673":1}}],["和查找",{"2":{"661":1}}],["和异步求值器",{"2":{"655":1}}],["和规模扩张的狂热迷思之后",{"2":{"601":1}}],["和执行指令两部分组成",{"2":{"581":1}}],["和项目级配置",{"2":{"570":1}}],["和混合检索",{"2":{"546":1}}],["和学习指南",{"2":{"515":1}}],["和文心智能体等平台",{"2":{"498":1}}],["和网络资源",{"2":{"494":1}}],["和会话管理",{"2":{"491":1}}],["和自动重绘管理",{"2":{"673":1}}],["和自动化工具链去无缝填补短板",{"2":{"458":1}}],["和自定义模型参数生效",{"2":{"481":1}}],["和自定义",{"2":{"106":1}}],["和单元测试全部通过",{"2":{"451":1}}],["和单页应用",{"2":{"344":1}}],["和技能路由",{"2":{"443":1}}],["和向量搜索算法的不断演进",{"2":{"410":1}}],["和行动",{"2":{"408":1}}],["和数据流式传输的吞吐量",{"2":{"353":1}}],["和数据库密码永远不会暴露到浏览器",{"2":{"60":1}}],["和首屏加载慢的问题",{"2":{"344":1}}],["和增量静态再生成",{"2":{"344":1}}],["和参数拼接繁琐",{"2":{"342":1}}],["和状态管理库",{"2":{"339":1}}],["和状态变更",{"2":{"101":1}}],["和分层架构中习得了掌控复杂系统的能力",{"2":{"337":1}}],["和按需加载",{"2":{"297":1}}],["和用户子应用",{"2":{"288":1}}],["和服务实现",{"2":{"274":1}}],["和集合运算一样",{"2":{"243":1}}],["和集合",{"2":{"229":1}}],["和目标环境的类型定义",{"2":{"203":1}}],["和设计",{"2":{"182":1}}],["和循环",{"2":{"166":1}}],["和最大重试次数",{"2":{"159":1}}],["和强大的",{"2":{"92":1}}],["和错误",{"2":{"87":1}}],["和页面组件都需要同一份数据时",{"2":{"69":1}}],["和路由逻辑",{"2":{"53":1}}],["和",{"2":{"16":1,"21":1,"23":2,"43":1,"53":1,"55":1,"57":1,"59":1,"67":1,"69":2,"85":1,"91":2,"92":1,"109":1,"113":1,"123":1,"125":1,"135":1,"141":1,"156":1,"179":1,"203":4,"205":1,"225":1,"226":2,"227":1,"229":1,"230":1,"233":1,"236":1,"239":1,"240":1,"243":1,"247":1,"250":1,"255":1,"256":1,"263":1,"266":1,"267":2,"298":2,"303":1,"306":1,"309":1,"331":1,"343":2,"344":3,"345":1,"353":1,"363":1,"366":2,"367":1,"385":1,"410":1,"439":1,"442":1,"443":2,"451":1,"464":1,"470":1,"488":1,"491":1,"506":1,"540":1,"542":2,"544":1,"552":1,"555":2,"610":2,"655":1,"672":2,"677":1,"679":2,"680":2,"686":1,"704":1,"708":1,"709":1,"712":1,"728":2,"758":1,"761":1,"784":1,"788":3,"795":1,"796":1,"798":1,"809":1,"827":1,"828":1,"887":1,"913":1,"915":1,"925":1,"961":1,"962":1,"964":1,"966":1,"967":1,"971":1,"982":1,"1001":1,"1003":1,"1032":1}}],["wj",{"2":{"805":1}}],["wgslnodebuilder",{"2":{"762":1,"765":1,"770":1}}],["wgslbuilder",{"2":{"762":1}}],["wgsl",{"2":{"758":1,"759":2,"761":1,"762":2,"763":1,"768":1,"770":2,"771":1}}],["wget",{"2":{"594":1}}],["writing",{"2":{"979":2,"980":2,"982":2,"983":4,"987":2,"991":1,"994":2,"995":3,"999":1}}],["writer",{"2":{"416":1,"470":2,"471":3,"472":2}}],["write",{"2":{"139":3,"470":3,"478":1,"488":2,"489":1,"594":1}}],["writehead",{"2":{"139":1}}],["wrapstream",{"2":{"920":1}}],["wrapgenerate",{"2":{"920":1}}],["wraplanguagemodel",{"2":{"910":1}}],["wrap",{"2":{"790":4,"795":1,"805":2,"909":1}}],["wrapper",{"2":{"735":1,"971":1}}],["wysiwyg",{"2":{"641":1,"656":1}}],["weather",{"2":{"939":1}}],["weakmap存储target+property→tween映射",{"2":{"819":1}}],["weakmap",{"2":{"789":1,"832":1}}],["wedgeconfig>",{"2":{"693":1}}],["wedge",{"2":{"677":1,"679":1,"693":1}}],["weight",{"2":{"652":4,"661":1,"772":1}}],["weekly",{"2":{"346":2}}],["webxr",{"2":{"763":5}}],["webgpurenderer",{"2":{"763":1,"765":2,"778":1}}],["webgpubackend",{"2":{"762":1,"763":1,"765":1,"768":1}}],["webgpu",{"0":{"774":1},"2":{"757":2,"758":1,"761":1,"762":2,"763":14,"765":9,"768":2,"770":1,"771":2,"774":1,"778":1}}],["webglmaterials",{"2":{"763":1}}],["webgllights",{"2":{"763":1}}],["webgluniforms",{"2":{"763":1}}],["webgluniform|",{"2":{"762":1}}],["webgltextures",{"2":{"763":1}}],["webgltexture|",{"2":{"762":1}}],["webglcuberendertarget",{"2":{"763":1}}],["webglrendertarget",{"2":{"763":1}}],["webglrenderer",{"2":{"763":1,"765":1,"777":1,"782":1}}],["webglprograms",{"2":{"763":1}}],["webglprogram",{"2":{"762":1,"763":1}}],["webglprogram|",{"2":{"762":1}}],["webglbackend",{"2":{"762":1,"763":1,"765":1,"768":1}}],["webglshadowmap",{"2":{"763":1}}],["webglshadow",{"2":{"762":1}}],["webglstate",{"2":{"762":2,"763":1}}],["webgl",{"2":{"757":3,"758":1,"761":1,"762":5,"763":12,"765":5,"768":3,"770":1,"771":2,"778":1,"812":1}}],["webworker",{"2":{"735":1}}],["webfetch",{"2":{"490":1}}],["websearch",{"2":{"470":1,"472":1,"490":1,"927":3}}],["websocket",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1},"2":{"19":1,"102":1,"103":1,"113":1,"114":4,"115":3,"116":1,"117":4,"123":1,"125":2,"126":1,"127":1,"129":1,"130":1,"131":5,"132":2,"133":1,"135":1,"155":2,"156":3,"167":1,"662":1,"846":1,"849":1,"860":2,"881":1,"980":3,"987":2}}],["webkit",{"2":{"338":3}}],["webrtc",{"2":{"130":1}}],["webp",{"2":{"72":1}}],["webpack",{"2":{"54":1,"203":1,"216":2,"217":1,"287":2,"288":6,"290":4,"307":1,"308":1,"343":5,"344":1,"642":1,"702":1,"731":1,"759":1,"960":3}}],["web",{"0":{"103":1,"214":2},"2":{"21":1,"99":1,"102":3,"103":2,"126":2,"130":1,"131":1,"132":1,"156":3,"205":1,"211":2,"214":2,"216":4,"287":1,"298":1,"305":1,"335":1,"338":4,"339":1,"340":1,"342":4,"343":3,"344":3,"523":1,"552":1,"561":3,"562":5,"568":2,"670":1,"671":1,"699":1,"728":7,"729":1,"730":2,"733":1,"734":1,"735":6,"749":1,"750":1,"751":1,"753":1,"757":1,"763":1,"784":1,"812":1,"813":2,"819":1,"898":1,"916":1,"927":3,"933":1,"936":4,"938":2,"939":7,"961":1,"1000":1}}],["webhooks",{"0":{"118":1},"1":{"119":1,"120":1,"121":1,"122":1},"2":{"102":1,"118":1,"119":1,"120":1,"121":1,"122":1,"130":1,"131":2,"132":1}}],["webhook",{"2":{"17":1,"20":1,"71":1,"120":1}}],["waiting",{"2":{"980":2}}],["waitforcapture",{"2":{"865":1}}],["waitoptions",{"2":{"865":1}}],["waituntil",{"2":{"865":1}}],["wait",{"2":{"858":1,"865":1}}],["wake",{"2":{"818":1,"826":1,"834":1}}],["waapianimation",{"2":{"819":1}}],["waapi动画",{"2":{"819":1}}],["waapi",{"2":{"812":1,"815":1,"817":1,"818":3,"819":5,"821":2}}],["walkrichinlinelineranges",{"2":{"799":1,"806":1}}],["walkpreparedlinesraw",{"2":{"792":1,"797":2,"798":1}}],["walklineranges",{"0":{"803":1},"2":{"784":1,"789":1,"790":1,"792":1,"793":1,"798":1,"803":1,"806":1,"810":1}}],["warn",{"2":{"706":1}}],["warnings",{"2":{"918":1}}],["warning",{"2":{"662":1}}],["waze",{"2":{"601":1}}],["watcher",{"2":{"695":1}}],["watchdirectory",{"2":{"203":1}}],["watchfile",{"2":{"203":1}}],["watchoptions",{"2":{"203":1}}],["watch",{"2":{"203":2,"224":2,"697":1}}],["waf",{"2":{"131":1}}],["w3c",{"2":{"134":1}}],["wsobject",{"2":{"662":1}}],["wsfetcher",{"2":{"662":1}}],["ws",{"2":{"130":1,"662":1,"846":1,"860":3,"980":1}}],["wordbreak",{"2":{"805":1}}],["wordbreakmode",{"2":{"805":2}}],["word",{"2":{"436":1,"512":1,"522":2,"647":6,"792":1,"795":2,"798":1}}],["worktree",{"2":{"980":4}}],["worktrees",{"2":{"979":1,"980":1,"982":1,"995":1}}],["workflowagent",{"2":{"918":1}}],["workflows",{"2":{"677":5,"735":1,"790":1,"882":1,"939":1}}],["workflow>",{"2":{"506":1}}],["workflow",{"0":{"343":1,"451":1,"545":1,"918":1},"2":{"367":1,"403":1,"451":2,"506":2,"507":1,"509":3,"541":1,"544":1,"547":1,"552":1,"908":1,"918":2,"1000":2}}],["worker",{"2":{"126":1,"730":2,"735":16,"763":1}}],["workspaces",{"2":{"335":1,"642":1,"643":1,"647":1,"665":1,"667":1}}],["workspace",{"2":{"216":3,"335":1,"442":1,"467":1,"477":1,"511":1,"521":2,"667":1}}],["works",{"2":{"75":1}}],["worldtolocal",{"2":{"777":1}}],["world",{"2":{"65":1,"238":1}}],["who",{"2":{"939":1}}],["wheel",{"2":{"684":2}}],["where",{"2":{"199":1,"281":1,"328":2}}],["what",{"2":{"179":1,"555":1,"939":1,"1001":1}}],["why",{"2":{"75":1,"179":1,"555":1,"1001":1}}],["whisper",{"2":{"523":2}}],["while",{"2":{"35":1,"78":1,"85":1,"87":1,"98":1,"141":1,"143":1,"160":2,"163":3,"164":1,"166":1,"342":1,"892":1}}],["whitespace",{"2":{"805":1}}],["whitespacemode",{"2":{"805":2}}],["white",{"2":{"16":1,"795":1,"799":1,"805":1,"958":1,"959":1,"960":1,"961":1,"962":1,"964":2}}],["widget",{"2":{"939":4}}],["widgets",{"2":{"939":2}}],["widths",{"2":{"793":1}}],["width",{"2":{"230":2,"232":1,"692":3,"693":1,"696":2,"719":2,"777":1,"778":1,"792":1,"793":2,"796":1,"797":2,"805":4}}],["wiggle",{"2":{"730":1,"742":2,"747":1}}],["wind",{"2":{"646":1}}],["windsurf",{"2":{"564":3,"565":2}}],["windows",{"2":{"343":1,"728":1,"980":5,"997":1}}],["window",{"2":{"47":1,"91":1,"240":1,"306":1,"367":2,"410":1,"468":1,"546":1,"654":1,"696":2,"782":4,"898":1}}],["wiptasks",{"2":{"708":1,"712":1,"719":1}}],["wip",{"2":{"451":1}}],["wiki",{"0":{"628":1},"2":{"445":1,"515":4,"628":1,"629":1,"631":2}}],["willingness",{"2":{"397":1}}],["william",{"2":{"181":1}}],["wi",{"2":{"370":1}}],["without",{"2":{"989":1}}],["withstore",{"2":{"647":1}}],["withsoftdelete",{"2":{"248":2}}],["withtimestamp",{"2":{"240":3,"248":2}}],["withcredentials",{"2":{"138":2}}],["with",{"2":{"16":1,"85":2,"269":1,"948":2,"980":1}}],["w",{"2":{"15":1,"16":1,"798":4}}],["渲染区域",{"2":{"942":1,"951":1}}],["渲染编排",{"2":{"939":1}}],["渲染测试",{"2":{"939":1}}],["渲染指令",{"2":{"939":1}}],["渲染回调",{"2":{"834":1}}],["渲染自身",{"2":{"827":1}}],["渲染核心库",{"2":{"939":1}}],["渲染核心层",{"2":{"938":2}}],["渲染核心",{"0":{"827":1},"2":{"819":1,"936":1}}],["渲染循环",{"2":{"782":1,"817":1,"818":2}}],["渲染统计信息",{"2":{"778":1}}],["渲染输出目标",{"2":{"778":1}}],["渲染一帧",{"2":{"777":1,"778":1}}],["渲染状态机",{"2":{"790":1}}],["渲染状态",{"2":{"777":1}}],["渲染状态管理",{"2":{"768":1}}],["渲染状态管理等",{"2":{"768":1}}],["渲染帧的完整生命周期",{"0":{"774":1}}],["渲染后端契约",{"2":{"777":1}}],["渲染后端",{"2":{"766":1}}],["渲染流程调用链",{"2":{"765":1}}],["渲染流程编排",{"2":{"762":1,"768":1}}],["渲染管线",{"2":{"763":1}}],["渲染对象管理",{"2":{"768":1}}],["渲染对象",{"2":{"763":1,"766":1}}],["渲染队列构建",{"2":{"768":1,"774":1}}],["渲染队列",{"2":{"763":1,"766":1}}],["渲染队列管理",{"2":{"762":1}}],["渲染目标",{"2":{"763":2,"777":1}}],["渲染层",{"2":{"763":1}}],["渲染抽象层",{"2":{"761":1,"762":2,"939":1}}],["渲染库",{"2":{"757":1}}],["渲染当前帧",{"2":{"749":1}}],["渲染生命周期",{"2":{"735":1}}],["渲染元素实现",{"2":{"735":3}}],["渲染委托",{"2":{"734":1}}],["渲染基类",{"2":{"683":1}}],["渲染单元",{"2":{"680":2}}],["渲染图层",{"2":{"680":1}}],["渲染表面",{"2":{"680":1}}],["渲染上下文包装",{"2":{"677":1,"679":1}}],["渲染范式",{"2":{"673":1}}],["渲染到页面",{"2":{"668":1}}],["渲染引擎层",{"2":{"675":1,"676":1}}],["渲染引擎遍历树进行绘制",{"2":{"675":1}}],["渲染引擎实时呈现结果",{"2":{"656":1}}],["渲染引擎",{"2":{"647":1,"656":1,"699":1,"702":1,"938":1}}],["渲染器构建与发布脚本",{"2":{"939":1}}],["渲染器构造函数",{"2":{"749":1}}],["渲染器内部文档",{"2":{"939":1}}],["渲染器共享主题",{"2":{"939":1}}],["渲染器的共享基础设施",{"2":{"939":1}}],["渲染器契约",{"2":{"777":1}}],["渲染器在构造时创建",{"2":{"765":1}}],["渲染器配置",{"2":{"750":1}}],["渲染器实例契约",{"2":{"749":1}}],["渲染器初始化",{"2":{"746":1}}],["渲染器负责",{"2":{"741":1}}],["渲染器通过",{"2":{"741":1}}],["渲染器策略层",{"0":{"741":1}}],["渲染器覆盖",{"2":{"735":1}}],["渲染器基类",{"2":{"735":4,"738":1,"763":1}}],["渲染器基础配置契约",{"2":{"661":1}}],["渲染器系统",{"0":{"768":1},"2":{"735":1,"749":1,"763":1}}],["渲染器层",{"2":{"733":1,"734":2}}],["渲染器类型定义",{"2":{"939":1}}],["渲染器类型",{"2":{"719":1}}],["渲染器类型标识",{"2":{"661":1,"749":1}}],["渲染器安装函数",{"2":{"706":1}}],["渲染器安装",{"2":{"706":1}}],["渲染器绑定",{"2":{"704":1}}],["渲染器自定义查找方法",{"2":{"662":1}}],["渲染器组件接收的",{"2":{"661":1}}],["渲染器别名",{"2":{"652":1}}],["渲染器注册器契约",{"2":{"749":1}}],["渲染器注册管理",{"2":{"735":1}}],["渲染器注册契约",{"0":{"661":1}}],["渲染器注册",{"2":{"652":1,"734":1}}],["渲染器注册表",{"2":{"650":1}}],["渲染器注册与查找",{"2":{"650":1}}],["渲染器查找",{"2":{"649":1}}],["渲染器专用图标",{"2":{"647":1}}],["渲染器事件系统",{"2":{"647":1}}],["渲染器",{"2":{"647":2,"700":1,"706":1,"735":2,"737":1,"738":1,"755":4,"763":3,"765":2,"778":1,"782":1,"934":1,"936":3,"939":5}}],["渲染器工厂系统",{"0":{"652":1}}],["渲染器工厂",{"2":{"645":1,"647":1}}],["渲染器工厂模式",{"2":{"641":1,"645":1}}],["渲染为",{"2":{"709":1}}],["渲染为组件",{"2":{"661":1}}],["渲染为完整的",{"2":{"640":1}}],["渲染为静态",{"2":{"2":1}}],["渲染视图或返回",{"2":{"279":1}}],["渲染性能更佳",{"2":{"98":1}}],["渲染与网络通信",{"2":{"92":1}}],["渲染好后",{"2":{"74":1}}],["渲染策略",{"2":{"70":1}}],["渲染策略从页面级别下沉到组件级别",{"2":{"43":1}}],["渲染出错的错误边界",{"2":{"66":1}}],["渲染时机",{"2":{"63":1}}],["渲染模式",{"2":{"59":1}}],["渲染模式工作分布对比图",{"2":{"45":1}}],["渲染位置选择",{"2":{"55":1}}],["渲染方式",{"2":{"53":1}}],["渲染方案不是一成不变的",{"2":{"55":1}}],["渲染方案",{"0":{"22":1,"26":1,"30":1,"34":1,"39":1},"1":{"23":1,"24":1,"25":1,"27":1,"28":1,"29":1,"31":1,"32":1,"33":1,"35":1,"36":1,"37":1,"38":1,"40":1,"41":1,"42":1,"43":1},"2":{"55":2}}],["渲染工作量分布",{"2":{"45":1}}],["渲染页面",{"2":{"23":1}}],["渲染阶段的位置选择",{"2":{"21":1}}],["渲染",{"2":{"21":3,"45":1,"50":1,"54":1,"59":2,"85":1,"158":1,"274":1,"647":1,"734":2,"784":1,"815":1,"827":1,"902":1,"933":1,"939":2}}],["渲染富文本内容",{"2":{"15":1}}],["ur",{"2":{"790":1}}],["url=your",{"2":{"481":1}}],["url=你的项目url",{"2":{"16":1}}],["url",{"2":{"14":1,"16":1,"17":1,"21":1,"23":1,"27":1,"40":1,"47":1,"85":2,"87":2,"92":1,"98":1,"100":1,"119":2,"122":1,"124":1,"130":1,"131":2,"138":2,"141":3,"149":1,"481":1,"523":1,"561":1,"562":1,"568":1,"636":1,"654":4,"662":3,"668":1,"790":1,"796":1,"858":1,"865":4,"866":2,"873":2,"898":1,"916":1}}],["uv",{"2":{"766":1,"939":1,"954":1}}],["ux",{"2":{"729":1}}],["uba",{"2":{"785":1}}],["ubo",{"2":{"763":1}}],["ubuntu",{"2":{"343":1}}],["ubiquitous",{"2":{"277":1}}],["using",{"0":{"986":1},"2":{"898":1,"978":1,"979":3,"980":2,"982":4,"983":2,"986":2,"995":2}}],["us",{"2":{"898":1}}],["usage",{"2":{"851":1,"915":1,"918":1,"927":1,"980":1}}],["usdz",{"2":{"763":1}}],["usd",{"2":{"763":1}}],["usb",{"2":{"439":2}}],["usr",{"2":{"247":1}}],["useobject",{"2":{"917":1}}],["useorder",{"2":{"280":1}}],["usecompletion",{"2":{"917":1}}],["usecoarsepointer",{"2":{"719":1}}],["usechathelpers",{"2":{"926":1}}],["usechatoptions",{"2":{"926":1}}],["usechat",{"0":{"917":1,"923":1},"2":{"902":2,"907":3,"913":1,"917":3,"923":1,"926":1}}],["usecancel",{"2":{"662":1}}],["useenvcontext",{"2":{"647":1}}],["useeffect",{"2":{"16":3,"47":1,"59":1,"62":1,"68":1,"82":1,"83":1,"85":1,"288":1}}],["useb",{"2":{"315":2}}],["uselogin",{"2":{"274":1}}],["uselocalstorage",{"2":{"263":1,"274":1}}],["usea2uicomponent",{"2":{"939":2}}],["usea2ui",{"2":{"939":2}}],["usea",{"2":{"315":2}}],["useapi",{"2":{"274":3}}],["useauth",{"2":{"274":1}}],["useactiveusers",{"2":{"95":1}}],["usedirtyrect",{"2":{"719":1}}],["usedefaultmainloop",{"2":{"826":1,"834":1}}],["usedefineforclassfields",{"2":{"204":1}}],["usedebounce",{"2":{"274":1}}],["used",{"2":{"263":1}}],["usefsevents",{"2":{"203":2}}],["useupdatetodo",{"2":{"96":1}}],["useuser",{"2":{"85":1,"87":2,"88":1}}],["usemediaquery",{"2":{"274":1}}],["usememo",{"2":{"95":1,"173":1}}],["usemutation",{"2":{"92":1,"96":2,"98":1,"101":1}}],["usequeryclient",{"2":{"96":2}}],["usequery",{"2":{"91":2,"95":3}}],["usesyncexternalstore",{"2":{"909":1,"917":1}}],["useswr",{"2":{"78":1,"85":2,"87":3,"89":2}}],["usestate",{"2":{"16":4,"62":1,"83":1,"173":1,"174":1,"288":1,"289":1}}],["use",{"0":{"76":1},"2":{"16":1,"62":4,"76":2,"77":1,"78":1,"82":1,"101":1,"411":1,"706":1,"708":2,"711":1,"725":1,"790":1,"865":1,"909":1,"918":1}}],["usermessage",{"2":{"986":1}}],["usermodel",{"2":{"269":5}}],["usertype",{"2":{"318":1}}],["userpanel",{"2":{"313":2}}],["userprofile",{"2":{"91":1,"184":1,"185":1}}],["user=",{"2":{"289":1}}],["userapp",{"2":{"288":9}}],["userage",{"2":{"268":1}}],["userrepository",{"2":{"278":1,"328":1}}],["userqueries",{"2":{"274":1}}],["userinput",{"2":{"489":3}}],["userinterface",{"2":{"330":1}}],["userinfo",{"2":{"288":5,"290":1}}],["userinvalid",{"2":{"268":1}}],["userid=$",{"2":{"89":1}}],["userid",{"2":{"78":1,"88":4,"91":3,"196":1,"197":1,"247":10,"278":1}}],["username",{"2":{"268":1,"330":1}}],["user>",{"2":{"261":1,"263":2}}],["user>>",{"2":{"246":1}}],["usercontainer",{"2":{"261":2}}],["userstatus",{"2":{"318":1}}],["userselectors",{"2":{"274":1}}],["userservice",{"2":{"274":1,"288":4,"290":1,"328":1,"330":3}}],["userslice",{"2":{"274":1}}],["users",{"2":{"87":1,"88":1,"95":2,"246":1,"259":2,"261":1,"266":3,"328":2,"640":1}}],["user",{"2":{"16":10,"67":2,"78":1,"85":1,"87":1,"88":5,"89":6,"91":2,"95":2,"103":1,"199":1,"233":5,"239":4,"240":5,"246":3,"247":1,"259":4,"261":1,"263":1,"266":3,"268":6,"274":2,"275":10,"280":5,"289":8,"290":2,"318":5,"327":1,"330":3,"363":1,"365":2,"451":1,"489":1,"490":1,"855":1,"913":1,"915":1,"916":1,"933":1,"938":1}}],["u>",{"2":{"234":2,"244":1}}],["umd多格式输出",{"2":{"819":1}}],["umd",{"0":{"306":1},"2":{"203":1,"298":1,"306":4,"308":1,"702":1,"751":7,"815":1,"819":1,"836":4}}],["ut",{"2":{"706":1}}],["utilities",{"2":{"906":1,"907":1}}],["utility",{"0":{"962":1},"1":{"963":1},"2":{"340":1,"398":1,"962":1,"965":1,"967":1,"970":1}}],["util",{"2":{"275":2,"280":2,"647":3,"677":1,"679":1,"693":1,"706":1}}],["util工具类替代第三方库",{"2":{"194":1}}],["utils",{"2":{"87":1,"203":7,"274":2,"275":1,"280":2,"290":1,"318":1,"335":1,"484":1,"646":2,"647":3,"735":1,"737":5,"742":1,"743":1,"744":1,"763":5,"790":2,"818":1,"819":1,"821":1,"851":2,"906":2,"907":1,"908":1,"931":1,"939":4}}],["utf8",{"2":{"203":1}}],["utf",{"2":{"112":1,"115":1}}],["uptime",{"2":{"866":1}}],["upgrade",{"2":{"114":2}}],["updatecomponentsmessage",{"2":{"951":1}}],["updatecomponents",{"2":{"941":2,"942":1,"944":1,"947":1,"949":1,"952":3}}],["updatechildren",{"2":{"777":1}}],["updateafter",{"2":{"777":1}}],["updateaftertype",{"2":{"777":1}}],["updatebefore",{"2":{"777":1}}],["updatebeforetype",{"2":{"777":1}}],["updateparents",{"2":{"777":1}}],["updateworldmatrix",{"2":{"777":1}}],["updatematrixworld",{"2":{"769":1,"777":1}}],["updatematrix",{"2":{"769":1,"777":1}}],["updatetype",{"2":{"762":1,"770":1,"777":1}}],["updatelifecyclehandler",{"2":{"720":1}}],["updatelocation",{"2":{"662":1}}],["updateduration",{"2":{"834":1}}],["updatedocumentdata",{"2":{"750":1}}],["updated",{"2":{"713":1}}],["updatedatamodelmessage",{"2":{"951":1}}],["updatedatamodel",{"2":{"941":2,"942":1,"944":1,"947":1,"949":1,"952":3}}],["updatedata",{"2":{"705":1}}],["updatedat",{"2":{"240":1,"248":2,"269":3}}],["update",{"2":{"275":1,"667":1,"772":2,"777":1,"851":1}}],["updatesignal",{"2":{"945":1}}],["updatestyle",{"2":{"777":1}}],["updates",{"0":{"96":1},"2":{"91":1,"942":1}}],["updateusernameonserver",{"2":{"88":1}}],["up",{"2":{"85":1,"174":2,"583":1,"1038":3}}],["uimessage>",{"2":{"925":1,"926":1}}],["uimessagechunk>",{"2":{"917":1}}],["uimessage",{"2":{"913":2,"917":1,"926":1}}],["uimessagestream",{"2":{"903":1,"917":1,"918":2,"923":1}}],["uislice",{"2":{"274":1}}],["uint8array>",{"2":{"892":1,"899":1}}],["uint8array",{"2":{"141":1,"143":3,"899":4}}],["ui",{"0":{"88":2,"96":1,"339":1,"340":1,"350":1,"917":1},"2":{"59":1,"66":2,"74":1,"76":1,"83":4,"85":2,"88":2,"91":1,"92":2,"98":1,"101":1,"169":2,"170":4,"171":1,"173":2,"175":1,"179":2,"180":1,"249":1,"269":1,"270":1,"274":4,"280":3,"286":1,"290":2,"291":1,"340":4,"342":4,"349":1,"367":1,"408":1,"414":1,"418":2,"448":1,"451":1,"462":1,"543":5,"553":2,"561":7,"562":4,"639":3,"641":1,"643":1,"645":4,"646":2,"647":40,"649":1,"650":1,"653":1,"656":1,"659":1,"661":1,"701":1,"706":2,"709":1,"712":1,"729":3,"784":1,"785":1,"790":39,"845":1,"849":1,"851":4,"856":1,"859":2,"865":2,"901":2,"902":1,"903":1,"913":1,"917":4,"925":3,"926":3,"933":9,"934":5,"935":1,"936":2,"938":2,"939":51,"941":4,"942":5,"944":1,"949":2,"951":1,"952":2,"956":1,"961":1,"963":1,"964":4,"965":8,"967":3,"969":1,"971":5,"980":2,"987":2}}],["u",{"2":{"17":1,"234":3,"244":1,"261":2,"263":1}}],["unlink",{"2":{"819":1}}],["unmute",{"2":{"740":1,"750":1}}],["unfreeze",{"2":{"740":1,"750":1}}],["unfinished",{"2":{"712":1}}],["unpkg",{"2":{"696":1}}],["uncertainty",{"2":{"617":1}}],["unix",{"2":{"997":1}}],["unicode",{"2":{"784":1,"785":1,"789":2,"790":6,"792":1}}],["uniformnode",{"2":{"770":1}}],["uniforms",{"2":{"771":1}}],["uniformsutils",{"2":{"763":1}}],["uniformslib",{"2":{"763":1}}],["uniformsgroup",{"2":{"763":2}}],["uniform",{"2":{"763":9,"770":2}}],["units",{"2":{"818":1,"819":1}}],["unit",{"2":{"523":1,"677":2,"763":1,"814":1,"828":6,"834":3}}],["unittestspec",{"2":{"442":1}}],["universal",{"2":{"306":2}}],["union",{"0":{"230":1}}],["unknown>>",{"2":{"925":1}}],["unknown>",{"2":{"154":1,"865":6,"925":1,"945":1,"951":2}}],["unknown",{"2":{"150":2,"153":1,"227":1,"244":11,"250":2,"865":2,"925":3}}],["undefined>",{"2":{"865":1,"951":1}}],["undefined",{"2":{"89":1,"141":1,"154":1,"203":1,"259":4,"261":2,"263":1,"315":1,"486":1,"489":1,"663":1,"692":4,"749":1,"859":1,"865":2,"879":1,"891":1,"892":1,"898":2,"925":1,"926":2,"951":3}}],["underline",{"2":{"15":1,"16":1}}],["unsu",{"2":{"790":1}}],["unsubscribe",{"2":{"16":1,"951":1}}],["unsplash",{"2":{"72":2}}],["uuid",{"2":{"16":2,"777":3}}],["$style",{"2":{"970":1}}],["$schema",{"2":{"661":1}}],["$border",{"2":{"958":2}}],["$default",{"2":{"958":2}}],["$primary",{"2":{"958":2}}],["$path",{"2":{"661":1}}],["$ref",{"2":{"778":8,"952":2}}],["$arguments",{"0":{"582":1},"2":{"582":3,"583":1}}],["$$",{"2":{"260":1}}],["$",{"2":{"15":1,"70":1,"78":1,"87":1,"88":1,"91":1,"96":1,"150":2,"160":3,"164":1,"222":1,"231":1,"232":1,"267":1,"269":2,"300":4,"301":1,"311":2,"324":1,"328":2,"484":1,"655":4,"959":2,"960":1,"962":1,"994":1}}],["`type",{"2":{"581":1}}],["`agent",{"2":{"484":1}}],["`allowdangerouslyskippermissions`",{"2":{"482":1}}],["`api`",{"2":{"451":1}}],["`auth`",{"2":{"451":1}}],["`pnpm",{"2":{"451":2}}],["`meta",{"2":{"576":2}}],["`merge`",{"2":{"451":1}}],["`main`",{"2":{"451":1}}],["`rebase`",{"2":{"451":1}}],["`references",{"2":{"451":1}}],["`refactor",{"2":{"451":1}}],["`class=",{"2":{"960":1}}],["`co",{"2":{"581":1}}],["`commitlint`",{"2":{"451":1}}],["`changelog",{"2":{"451":1}}],["`chore",{"2":{"451":1}}],["`createuser`",{"2":{"331":2}}],["`docs",{"2":{"451":1}}],["`fix",{"2":{"451":2}}],["`feat",{"2":{"451":3}}],["`git",{"2":{"451":5,"581":2}}],["`getuser`",{"2":{"331":1}}],["`getuserbyid`",{"2":{"331":1}}],["`updateuser`",{"2":{"331":2}}],["`unhandled",{"2":{"232":1}}],["`styles",{"2":{"960":1}}],["`sidebar`",{"2":{"451":1}}],["`select",{"2":{"328":2}}],["`saved",{"2":{"269":1}}],["`executing",{"2":{"301":1,"324":1}}],["`¥$",{"2":{"281":1}}],["`http",{"2":{"231":1}}],["`https",{"2":{"78":1}}],["`$",{"2":{"150":1,"260":1,"267":1,"960":1,"962":1}}],["`浏览最新技术文章",{"2":{"70":1}}],["`",{"2":{"15":2,"70":1,"78":1,"87":2,"88":2,"89":2,"91":2,"95":2,"96":2,"160":5,"164":1,"231":1,"232":1,"260":1,"267":1,"269":1,"281":1,"300":4,"301":1,"311":2,"324":1,"328":2,"451":6,"482":10,"484":1,"573":6,"576":2,"959":1,"960":3,"962":1}}],["6斤的下降",{"2":{"1047":1}}],["6901",{"2":{"942":1,"945":1,"951":1}}],["65",{"2":{"839":1}}],["64",{"2":{"796":1}}],["6面",{"2":{"763":1}}],["676行",{"2":{"735":1}}],["61个js文件",{"2":{"819":1}}],["61个文件",{"2":{"763":1}}],["610行",{"2":{"735":1}}],["6158行",{"2":{"647":1}}],["639",{"2":{"699":1}}],["68kb",{"2":{"646":1,"647":1,"656":2}}],["60s",{"2":{"125":1}}],["60",{"2":{"35":2,"82":1,"655":1,"965":1}}],["6000",{"2":{"705":1,"715":1,"1045":1,"1046":1,"1047":1}}],["600",{"2":{"15":3,"16":3,"962":2,"964":2}}],["6",{"0":{"39":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":2,"118":1,"119":1,"120":1,"121":1,"122":1,"155":1,"180":1,"198":1,"234":1,"250":1,"270":1,"282":1,"290":1,"309":1,"315":1,"322":1,"332":1,"343":1,"355":1,"362":1,"387":1,"420":1,"432":1,"439":1,"452":1,"466":1,"487":1,"488":1,"489":1,"490":1,"550":1,"584":1,"585":1,"586":1,"587":1,"588":1,"605":1,"660":1,"661":1,"662":1,"663":1,"691":1,"692":1,"718":1,"719":1,"748":1,"749":1,"750":1,"776":1,"777":1,"804":1,"805":1,"806":1,"833":1,"834":1,"835":1,"864":1,"865":1,"866":1,"920":1,"924":1,"925":1,"926":1,"950":1,"951":1,"952":1,"962":1,"993":1,"994":1,"995":1},"1":{"40":1,"41":1,"42":1,"43":1,"74":1,"75":1,"76":1,"77":1,"78":1,"119":1,"120":1,"121":1,"122":1,"199":1,"453":1,"454":1,"455":1,"488":1,"489":1,"490":1,"585":1,"586":1,"587":1,"588":1,"661":1,"662":1,"663":1,"692":1,"693":1,"719":1,"720":1,"749":1,"750":1,"777":1,"778":1,"805":1,"806":1,"834":1,"835":1,"865":1,"866":1,"925":1,"926":1,"951":1,"952":1,"963":1,"994":1,"995":1},"2":{"15":2,"112":1,"141":1,"144":1,"265":1,"295":2,"298":1,"307":2,"521":1,"523":1,"550":1,"581":1,"631":2,"643":1,"699":2,"704":1,"730":2,"947":1,"965":1,"987":1,"988":1,"1016":1,"1047":1,"1048":1}}],[">+",{"2":{"988":1}}],[">特殊按钮",{"2":{"964":1}}],[">删除",{"2":{"964":1}}],[">>",{"2":{"865":1,"925":1}}],[">|",{"2":{"734":2,"915":3,"918":1,"979":2}}],[">=",{"2":{"144":1,"879":1}}],[">评论区",{"2":{"16":1}}],[">jamstack",{"2":{"15":1}}],[">",{"2":{"15":11,"16":11,"23":1,"62":3,"69":1,"74":7,"88":2,"89":1,"94":3,"146":1,"150":1,"163":1,"193":1,"227":1,"234":2,"244":4,"247":2,"248":1,"260":1,"263":1,"281":1,"288":11,"289":1,"628":2,"629":1,"631":1,"632":1,"636":1,"649":1,"650":17,"652":2,"655":2,"679":46,"680":21,"683":3,"684":1,"685":1,"686":9,"692":2,"696":2,"705":13,"708":26,"709":10,"711":1,"712":8,"713":4,"719":1,"734":3,"737":21,"738":10,"740":2,"741":5,"742":10,"743":9,"744":4,"750":2,"754":1,"765":26,"766":15,"769":3,"770":2,"792":28,"793":6,"796":4,"797":7,"821":40,"822":15,"824":2,"825":14,"827":3,"828":1,"860":1,"865":5,"912":13,"913":11,"916":10,"917":1,"918":2,"926":2,"939":1,"941":26,"942":5,"946":14,"948":5,"960":1,"961":1,"962":1,"964":1,"965":16,"979":1,"982":18,"983":12,"995":1}}],["83",{"2":{"965":1,"966":1}}],["836",{"2":{"699":1}}],["8a2d7145",{"2":{"961":2}}],["8px",{"2":{"958":1,"959":1,"960":1,"961":1}}],["8种缓动类型",{"2":{"819":1}}],["8个",{"2":{"763":1}}],["8888",{"2":{"666":2}}],["892",{"2":{"643":1}}],["820",{"2":{"643":1}}],["86+",{"2":{"641":1,"643":1,"646":1,"647":1,"656":2}}],["8000",{"2":{"1047":1,"1048":1}}],["800",{"2":{"705":1,"962":3}}],["80+",{"2":{"641":1,"655":1}}],["80",{"2":{"405":2,"555":1,"962":1}}],["8080",{"2":{"139":2}}],["8s",{"2":{"146":1,"150":1}}],["8kb",{"2":{"99":1,"647":1,"656":1}}],["8",{"0":{"48":1,"49":1,"53":1,"54":1,"129":1,"130":1,"131":1,"292":1,"326":1,"345":1,"389":1,"593":1,"594":1,"595":1,"596":1,"721":1,"722":1,"723":1,"724":1,"725":1,"726":1,"752":1,"753":1,"754":1,"755":1,"779":1,"780":1,"781":1,"782":1,"807":1,"808":1,"809":1,"810":1,"837":1,"838":1,"839":1,"840":1,"841":1,"928":1,"929":1,"930":1,"931":1,"965":1,"966":1,"967":1,"968":1,"969":1,"970":1},"1":{"49":1,"50":2,"51":2,"52":2,"53":1,"54":1,"130":1,"131":1,"594":1,"595":1,"596":1,"722":1,"723":1,"724":1,"725":1,"726":1,"753":1,"754":1,"755":1,"780":1,"781":1,"782":1,"808":1,"809":1,"810":1,"838":1,"839":1,"840":1,"841":1,"929":1,"930":1,"931":1,"966":1,"967":1,"968":1,"969":1,"970":1},"2":{"15":5,"16":3,"112":1,"115":1,"325":1,"701":1,"706":1,"730":1,"786":1,"805":1,"819":1,"904":2,"938":1,"939":16,"958":1,"959":1,"961":1,"964":2,"987":1,"1036":3,"1045":4,"1047":1}}],["dx",{"2":{"1003":1}}],["d2c",{"2":{"969":1}}],["d97706",{"2":{"962":1}}],["d属性形状变换",{"2":{"819":1}}],["dst",{"2":{"777":1}}],["dsl",{"2":{"54":2,"170":1,"763":2,"765":1,"770":2}}],["dfg",{"2":{"763":1}}],["d3",{"2":{"702":1}}],["durable",{"2":{"918":1}}],["duration",{"2":{"686":1,"692":1,"772":1,"819":1,"825":1,"830":1,"834":1,"839":1}}],["dual",{"2":{"882":1,"887":1}}],["duopoly",{"2":{"392":1}}],["dpr",{"2":{"750":1}}],["dpi",{"2":{"677":1}}],["dpo",{"2":{"551":1}}],["dd",{"2":{"676":1,"677":1,"680":1}}],["ddd",{"0":{"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1},"1":{"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1},"2":{"189":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":2,"282":1,"283":2,"344":1}}],["dnd",{"2":{"646":1,"647":1,"656":2}}],["django",{"2":{"573":1}}],["dynamicproperties",{"2":{"735":1}}],["dynamicpriority",{"2":{"203":1}}],["dynamic",{"0":{"313":1},"2":{"297":1,"412":1,"790":3,"946":4}}],["dtos",{"2":{"280":1}}],["dto",{"2":{"275":5,"280":3,"282":1}}],["dbrx",{"2":{"523":1}}],["db2",{"2":{"301":2}}],["db1",{"2":{"301":2}}],["db",{"2":{"246":1,"328":3,"410":1}}],["d",{"0":{"321":1,"750":1},"2":{"203":5,"208":1,"222":1,"274":2,"275":1,"320":1,"321":1,"325":1,"692":1,"728":1,"731":1,"735":2,"749":1,"750":1,"790":2,"815":1,"819":1,"836":1,"887":1}}],["dry",{"2":{"988":1}}],["droid",{"2":{"979":1,"997":1}}],["drop",{"2":{"647":1,"656":1}}],["dropbox",{"2":{"363":1}}],["draco",{"2":{"763":1}}],["draco等",{"2":{"763":1}}],["drawable",{"2":{"818":1,"819":2}}],["drawnframe",{"2":{"750":1}}],["drawscene",{"2":{"683":1,"692":2}}],["drawhitfromcache",{"2":{"683":1}}],["drawhit",{"2":{"683":1,"692":2}}],["draw",{"2":{"683":1,"686":1,"692":3,"696":1,"762":1,"765":1,"768":1,"777":1}}],["drawer",{"2":{"654":2}}],["drawerschema",{"2":{"653":1}}],["drawing",{"2":{"647":1,"676":1}}],["dragboundfunc",{"2":{"692":1}}],["dragdistance",{"2":{"692":1}}],["draggable类",{"2":{"819":1}}],["draggable",{"2":{"692":1,"696":1,"817":1,"818":2,"819":3,"821":2,"822":3,"825":1,"841":1}}],["draganddrop",{"2":{"676":1,"677":1,"679":1,"680":1}}],["drag",{"2":{"647":1,"656":1,"676":1}}],["draft",{"2":{"101":1,"938":1}}],["drive",{"2":{"439":1}}],["driven",{"0":{"964":1,"988":1,"989":1},"2":{"176":1,"276":1,"440":1,"532":1,"938":1,"946":1,"978":1,"979":2,"980":5,"982":3,"983":1,"988":2,"989":2,"991":1,"995":4,"999":1}}],["drilling",{"2":{"169":2}}],["daemonversion",{"2":{"866":1}}],["daemon",{"0":{"860":1,"866":1},"2":{"845":1,"846":1,"848":1,"849":2,"850":2,"851":5,"858":2,"860":6,"866":4}}],["damping",{"2":{"819":1,"835":1}}],["dag",{"2":{"766":1,"770":1,"978":1,"979":1}}],["dasharray",{"2":{"819":1}}],["dashproperty",{"2":{"735":1}}],["dashoffset",{"2":{"692":1,"743":1,"819":1}}],["dashenabled",{"2":{"692":1}}],["dash",{"2":{"692":1}}],["dashboardlayout",{"2":{"274":1}}],["dashboard",{"2":{"61":1,"65":2,"274":1,"790":5}}],["dart",{"2":{"936":1,"939":4}}],["darth",{"2":{"677":1}}],["dark",{"2":{"289":1,"706":2,"965":1}}],["daily",{"2":{"632":1}}],["daisy",{"2":{"340":1}}],["dall",{"2":{"523":1}}],["dau",{"2":{"382":1}}],["dao",{"2":{"336":1}}],["dangoor",{"2":{"304":1}}],["dangerously",{"2":{"482":1}}],["dangerous",{"2":{"482":1}}],["danger",{"2":{"249":3}}],["dangervariant",{"2":{"249":3}}],["datacontext",{"2":{"938":1,"939":1,"941":1}}],["datacontainer",{"2":{"261":4}}],["datamodel",{"0":{"945":1},"2":{"938":1,"939":2,"941":1,"942":2,"944":1,"945":3,"946":1,"951":2}}],["datamanagerworkeroverrides",{"2":{"735":1}}],["datamanager",{"2":{"734":1,"735":1,"743":2}}],["datamapping",{"2":{"646":1,"647":1}}],["data3dtexture",{"2":{"763":1}}],["dataarraytexture",{"2":{"763":1}}],["datautils",{"2":{"763":1}}],["dataurl",{"2":{"719":1}}],["dataindex",{"2":{"719":1}}],["datatexture",{"2":{"763":1}}],["datatopoint",{"2":{"714":1}}],["datatable",{"2":{"274":1}}],["dataframe",{"2":{"709":1,"713":1}}],["datadimensioninfo",{"2":{"706":1}}],["datadiffer",{"2":{"706":1,"713":3}}],["datasubscription",{"2":{"951":1}}],["datasub",{"2":{"945":1}}],["dataselect",{"2":{"706":1}}],["datasets",{"2":{"939":1}}],["dataset",{"2":{"550":2,"700":1,"702":1,"706":3,"708":1,"713":3}}],["datasample",{"2":{"706":1,"708":1}}],["datasymboltask",{"2":{"706":1,"708":1,"715":1}}],["datastyletask",{"2":{"706":1,"708":1,"715":2}}],["datastackstagehandler",{"2":{"706":1}}],["datastack",{"2":{"705":1,"706":1,"708":1}}],["dataprocessorfuncs",{"2":{"708":1}}],["dataprocessor",{"2":{"704":1,"705":1,"706":1,"708":2,"712":1}}],["datazoom",{"2":{"700":2,"701":1,"706":2,"708":1,"712":1}}],["databinding",{"2":{"939":1}}],["databindingcontrol",{"2":{"647":1,"656":1}}],["database",{"2":{"275":3,"280":2,"301":1,"328":2,"578":1,"592":1}}],["databasemodel>",{"2":{"269":1}}],["databasemodel",{"2":{"269":5}}],["databaseconfig",{"2":{"243":1}}],["dataview",{"2":{"629":1,"706":1}}],["data>",{"2":{"152":1}}],["data=",{"2":{"89":1}}],["data",{"0":{"173":1,"342":1,"713":1},"2":{"16":6,"69":1,"71":2,"78":1,"85":2,"87":3,"89":2,"91":2,"95":2,"109":1,"135":1,"136":4,"138":7,"139":3,"141":10,"143":8,"144":2,"147":6,"150":10,"152":1,"153":9,"154":1,"160":4,"164":4,"173":1,"175":1,"196":1,"197":1,"246":4,"260":4,"262":2,"266":2,"289":4,"302":4,"315":2,"342":1,"411":1,"416":1,"470":2,"471":5,"472":5,"474":2,"475":1,"576":1,"647":1,"652":1,"653":2,"654":1,"655":1,"661":3,"662":1,"663":2,"702":1,"705":1,"706":2,"713":1,"715":2,"724":2,"743":1,"744":2,"746":1,"749":6,"750":2,"790":7,"877":1,"878":1,"892":2,"898":1,"939":8,"942":1,"945":1,"947":1,"961":3}}],["dateformatoptions",{"2":{"318":1}}],["date",{"2":{"15":2,"16":1,"85":1,"188":1,"240":2,"248":8,"269":5,"274":1,"275":1,"280":1,"281":2,"994":1}}],["dict",{"2":{"947":2,"948":2}}],["diagnostic",{"2":{"790":1,"851":1}}],["dialogschema",{"2":{"653":1}}],["dialog",{"2":{"646":2,"650":1,"654":2,"659":1}}],["dim",{"2":{"713":1,"719":3}}],["dimensionindex",{"2":{"719":3}}],["dimensions",{"2":{"713":3}}],["dimension",{"2":{"709":1}}],["diminishing",{"2":{"398":1}}],["directives",{"2":{"939":2}}],["directionallight",{"2":{"763":1,"782":1}}],["direction",{"2":{"750":1,"865":1}}],["dir",{"2":{"859":1}}],["dirty",{"2":{"682":1,"685":1,"708":1,"719":1}}],["dirname",{"2":{"216":1}}],["dify",{"2":{"403":1,"498":1}}],["difference",{"2":{"223":1}}],["diff",{"2":{"179":1,"484":1,"581":1,"594":4,"713":1}}],["diffusion",{"2":{"123":1,"156":1,"523":1}}],["di",{"2":{"344":3}}],["discardtrailingnewline",{"2":{"892":1}}],["discoverplugins",{"2":{"855":1,"859":1}}],["discoverclis",{"2":{"855":2,"859":1}}],["discovery",{"0":{"859":1},"2":{"850":1,"851":1,"859":2}}],["discrete",{"2":{"763":1}}],["discrimination",{"2":{"397":1}}],["discriminated",{"0":{"230":1}}],["dispose",{"2":{"705":1,"706":1,"719":1,"777":2,"889":1,"951":3}}],["displayable",{"2":{"702":1,"704":1,"705":1}}],["display",{"2":{"647":1,"763":2}}],["dispatching",{"2":{"979":1,"980":1,"982":1}}],["dispatchaction",{"2":{"704":1,"705":1,"706":1,"708":1,"719":1,"946":1}}],["dispatchevent",{"2":{"646":1,"652":1,"654":2,"661":1,"769":1}}],["dispatch",{"2":{"289":1}}],["disablehitgraph",{"2":{"692":1}}],["disabled",{"2":{"249":1,"964":3}}],["disallowedtools",{"2":{"482":1}}],["dist",{"2":{"31":1,"50":1,"51":1,"53":1,"203":3,"204":4,"213":2,"214":2,"215":2,"322":1,"335":3,"706":1,"726":1,"790":1,"819":1,"836":6,"851":2}}],["divider",{"2":{"939":1}}],["divide",{"2":{"295":2,"304":1,"307":1}}],["div>hello",{"2":{"85":1}}],["div>loading",{"2":{"85":1,"89":1,"288":4}}],["div>failed",{"2":{"85":1}}],["div>",{"2":{"15":4,"16":3,"23":1,"85":3,"89":1,"91":2,"288":7,"696":1,"959":2}}],["div",{"2":{"15":4,"16":3,"23":1,"169":1,"288":3,"684":1,"696":1}}],["dot",{"2":{"976":2,"980":2,"986":2}}],["dotenv",{"2":{"481":1,"490":1}}],["do",{"2":{"925":1}}],["dostream",{"2":{"903":1,"912":1,"913":1,"925":2}}],["doubleside",{"2":{"771":1,"777":1}}],["doubao",{"2":{"512":2,"519":1,"522":3}}],["don",{"2":{"482":1}}],["dontask",{"2":{"478":1,"482":1}}],["done=true",{"2":{"143":1}}],["done",{"2":{"92":1,"141":4,"143":2}}],["doe",{"2":{"318":1}}],["dogen",{"2":{"915":2}}],["dogenerate",{"2":{"903":1,"912":2,"913":1,"925":2}}],["dog",{"2":{"231":8}}],["download",{"2":{"849":1,"851":5}}],["downstream",{"2":{"653":1,"663":1}}],["down",{"2":{"175":1,"583":1}}],["doctor",{"2":{"849":1,"851":2,"855":1,"869":1}}],["doc",{"2":{"646":3,"647":2,"677":1}}],["docx",{"2":{"453":1,"641":1}}],["dockerfile",{"2":{"290":2}}],["docker",{"2":{"59":1,"82":1,"290":3,"553":1,"555":1,"567":1,"568":1,"573":2,"849":1}}],["docs",{"2":{"50":1,"53":2,"116":1,"451":1,"456":2,"515":4,"581":1,"647":2,"735":1,"763":2,"781":1,"851":1,"898":1,"931":1,"939":3,"979":1,"980":1}}],["documentdata",{"2":{"750":1}}],["documentation",{"2":{"451":1}}],["document",{"2":{"47":1,"668":1,"724":1,"754":1,"782":1,"980":3}}],["docusaurus",{"2":{"30":1}}],["dom快照",{"2":{"858":1}}],["dom元素",{"2":{"835":1}}],["dom元素或js对象",{"2":{"822":1}}],["domelement",{"2":{"777":1,"778":1,"782":1}}],["domloaded",{"2":{"750":1}}],["dom绑定",{"2":{"679":1}}],["domainevent",{"2":{"281":1}}],["domain",{"2":{"190":1,"276":1,"280":9,"281":5,"859":2,"865":2}}],["dom",{"0":{"57":1,"58":1},"2":{"23":2,"47":2,"58":4,"59":2,"61":1,"74":1,"169":2,"170":2,"179":2,"203":3,"204":3,"214":2,"216":2,"286":1,"288":3,"291":1,"339":1,"672":1,"676":1,"677":1,"680":1,"684":5,"688":1,"705":1,"708":1,"709":1,"719":2,"734":1,"735":4,"755":1,"784":2,"785":2,"786":2,"796":4,"798":1,"812":1,"814":1,"827":1,"849":2,"850":1,"851":5,"858":2,"939":1,"961":3}}],["deeds",{"2":{"790":1}}],["deepsplice",{"2":{"647":1}}],["deepseek",{"2":{"510":2,"512":3,"519":1,"522":5,"523":9,"549":1,"559":1,"567":1,"568":2}}],["deepresearch",{"2":{"467":1,"470":3,"474":1}}],["deep",{"0":{"416":1},"2":{"370":1,"467":2,"476":1,"518":4,"961":2,"965":1,"968":1,"971":1}}],["dedicated",{"2":{"523":2}}],["dedupinginterval",{"2":{"87":1}}],["deduplication",{"2":{"85":1,"342":1}}],["deny",{"2":{"482":1,"594":2}}],["debate",{"2":{"375":1}}],["debugging",{"2":{"979":1,"980":1,"982":1,"992":1,"995":2}}],["debug",{"2":{"98":1,"509":1,"661":1,"763":1,"865":1}}],["defense",{"2":{"980":1}}],["defs",{"2":{"741":1}}],["definiton",{"2":{"367":1}}],["definition+context",{"2":{"367":2}}],["definition",{"2":{"305":2,"306":2,"367":1,"865":1}}],["defineprops",{"2":{"961":1}}],["defineproperty",{"2":{"685":1}}],["defines",{"2":{"942":1}}],["defined",{"2":{"927":2}}],["define",{"2":{"305":2,"306":4,"308":1}}],["defaultvariants",{"2":{"964":1}}],["defaultcatalog",{"2":{"939":1}}],["defaultformat",{"2":{"865":1}}],["defaultsparams",{"2":{"826":1,"834":1}}],["defaults",{"2":{"826":2,"834":3}}],["defaults默认参数",{"2":{"819":1}}],["defaults配置",{"2":{"818":1}}],["defaulter",{"2":{"720":1}}],["defaultlogger",{"2":{"311":1}}],["defaultoptions",{"2":{"94":1}}],["default",{"2":{"15":2,"16":3,"74":1,"203":1,"222":1,"232":2,"288":1,"289":1,"295":1,"307":2,"308":1,"311":2,"312":1,"481":4,"482":1,"647":1,"661":1,"677":1,"693":1,"706":1,"741":1,"778":6,"865":1,"948":1,"961":1,"962":1,"964":4}}],["detect",{"2":{"851":1}}],["detection",{"2":{"676":1,"985":1}}],["deterministic",{"2":{"92":1}}],["detailed",{"2":{"451":1,"586":2}}],["detail",{"2":{"288":1}}],["details",{"2":{"288":1}}],["decalvisualstagehandler",{"2":{"706":1}}],["decal",{"2":{"705":1,"706":1,"708":1,"715":3}}],["declare",{"2":{"229":1,"233":1,"321":1,"325":1,"482":1,"693":1,"834":4}}],["declarationmap",{"2":{"203":1,"204":2}}],["declarationdir",{"2":{"203":1,"204":1}}],["declaration",{"2":{"203":1,"204":2}}],["declarative",{"2":{"179":1}}],["decomposetweenvalue",{"2":{"828":1}}],["decomposetransform|",{"2":{"818":1}}],["decomposerawvalue",{"2":{"819":1,"828":1}}],["decomposevalue",{"2":{"818":1}}],["decoy",{"2":{"397":1}}],["decorator|",{"2":{"646":1}}],["decorators",{"0":{"324":1},"2":{"275":1}}],["decorator",{"2":{"203":1,"275":1,"324":2}}],["decode",{"2":{"141":1,"143":1}}],["decoder",{"2":{"141":2,"143":2,"636":1}}],["derivedbidiclass",{"2":{"790":1}}],["derived",{"0":{"173":1},"2":{"173":1}}],["destructive",{"2":{"964":2,"971":1}}],["destroy",{"2":{"692":1,"734":1,"740":2,"749":2,"750":2}}],["destroychildren",{"2":{"692":1}}],["destroy$",{"2":{"154":2}}],["descendant",{"2":{"945":1}}],["descendants",{"2":{"941":1}}],["descriptors",{"2":{"763":1}}],["description`",{"2":{"581":1}}],["description>`",{"2":{"451":1}}],["description",{"2":{"69":1,"70":1,"442":1,"443":2,"448":3,"451":1,"506":1,"581":2,"582":1,"586":1,"591":1,"628":1,"636":1,"750":1,"778":19,"865":1,"866":10,"952":12,"983":1,"994":2}}],["describes",{"2":{"865":1,"942":1,"980":1}}],["describe",{"2":{"223":1}}],["desktop",{"2":{"851":1,"938":1}}],["designsection",{"2":{"994":2}}],["designspec",{"2":{"994":1}}],["designdetails",{"2":{"994":1}}],["design",{"0":{"966":1},"2":{"274":1,"276":1,"340":1,"367":4,"448":2,"453":1,"939":2,"958":1,"962":3,"964":1,"965":5,"966":1,"967":1,"968":1}}],["deltatime",{"2":{"818":1,"834":1}}],["delta",{"2":{"488":9,"772":1}}],["delayms",{"2":{"865":1}}],["delayindex",{"2":{"160":2}}],["delay",{"2":{"146":3,"159":1,"164":1,"825":2,"839":1}}],["deletesurfacemessage",{"2":{"951":1}}],["deletesurface",{"2":{"941":3,"942":1,"944":1,"947":1,"952":3}}],["deletedat",{"2":{"248":3}}],["delete",{"2":{"91":1,"281":1,"334":2,"860":1,"866":1}}],["depth=1",{"2":{"780":1}}],["depth",{"2":{"777":1,"947":1,"980":1}}],["depthwrite",{"2":{"777":1}}],["depthtest",{"2":{"771":1,"777":1}}],["depthtexture",{"2":{"763":1}}],["depthmode",{"2":{"763":1}}],["deprecatelog",{"2":{"706":1}}],["deprecated",{"2":{"203":1,"865":1}}],["deps",{"2":{"666":1}}],["dep2",{"2":{"305":2}}],["dep1",{"2":{"305":2}}],["department",{"2":{"236":2}}],["dependences",{"2":{"705":1}}],["dependency2",{"2":{"305":1}}],["dependency1",{"2":{"305":1}}],["dependency>",{"2":{"193":2}}],["dependencies",{"2":{"216":1}}],["dependent",{"0":{"89":1},"2":{"98":1}}],["deployment",{"0":{"345":1}}],["deploy",{"2":{"17":3,"290":1,"570":4,"579":1,"583":2,"587":1}}],["developer",{"2":{"898":1}}],["development|",{"2":{"979":1}}],["development",{"0":{"988":1,"989":1},"2":{"176":1,"532":1,"790":1,"939":1,"980":5,"982":4,"983":2,"988":2,"989":2,"995":6,"999":1}}],["device",{"2":{"762":1}}],["devicepixelratio",{"2":{"719":1}}],["devin",{"2":{"567":2,"568":2}}],["devops",{"2":{"537":1,"542":1,"555":1}}],["devtools",{"2":{"94":2,"98":1,"101":1,"846":1,"858":1}}],["dev",{"2":{"82":1,"221":2,"559":1,"561":1,"562":2,"573":1,"583":2,"706":1,"723":1,"840":1,"939":2,"971":1,"979":2,"980":1,"991":1}}],["demos",{"2":{"467":1,"790":1}}],["demo",{"2":{"69":1,"71":1,"82":3,"495":1,"557":1,"562":1,"735":10,"790":14,"939":4,"954":1,"955":1,"956":1,"1000":1,"1001":1}}],["demand",{"2":{"36":1,"979":1}}],["x2",{"2":{"835":2}}],["x26",{"2":{"23":1,"144":6,"147":2,"150":2,"236":2,"237":3,"238":5,"239":1,"240":4,"242":2,"243":6,"244":4,"247":1,"248":5,"249":2,"267":1,"306":2,"484":2,"486":2,"488":4,"646":1,"647":1,"656":1,"676":1,"705":1,"805":1,"879":6,"958":3,"959":1,"965":2}}],["x1",{"2":{"835":2}}],["xrmanager",{"2":{"762":1,"763":1}}],["xr",{"2":{"757":1}}],["xaxis",{"2":{"714":1,"724":1}}],["xai",{"2":{"511":2}}],["xlsx",{"2":{"453":1,"641":1}}],["xhr",{"2":{"342":2}}],["xmlhttprequest",{"2":{"342":1,"881":1}}],["xml",{"2":{"193":1,"448":1,"450":1}}],["x",{"2":{"103":1,"107":1,"152":1,"203":2,"237":1,"375":1,"376":1,"417":1,"457":1,"511":3,"518":1,"682":2,"683":1,"685":9,"689":1,"692":1,"693":2,"696":1,"706":1,"749":2,"772":2,"782":1,"818":1,"819":1,"839":1,"851":1,"860":4,"865":1,"866":7,"982":1,"1007":1}}],["xxxx",{"2":{"961":1}}],["xxx",{"2":{"17":1,"138":2,"447":2,"474":1,"585":1,"971":1}}],["xsd",{"2":{"647":1}}],["xs",{"2":{"16":1}}],["xss",{"2":{"3":1,"586":1,"662":1}}],["x3c",{"2":{"15":23,"16":23,"23":2,"62":3,"69":1,"70":1,"74":8,"78":1,"85":6,"88":2,"89":3,"91":2,"94":4,"138":2,"144":1,"152":3,"153":4,"154":3,"160":1,"163":1,"164":1,"184":1,"193":9,"222":1,"234":4,"244":5,"246":3,"247":3,"248":3,"258":3,"259":2,"260":3,"261":5,"262":12,"263":5,"265":1,"266":1,"267":1,"268":1,"269":1,"281":11,"288":37,"289":1,"330":1,"451":3,"482":1,"483":1,"506":4,"581":1,"652":8,"654":2,"661":6,"662":3,"663":12,"667":1,"680":4,"684":2,"692":13,"693":22,"696":6,"719":6,"750":5,"754":2,"777":1,"792":2,"795":2,"796":2,"797":1,"834":9,"855":3,"859":1,"860":1,"865":40,"879":1,"891":2,"892":2,"898":4,"899":2,"916":3,"917":1,"918":2,"925":10,"926":19,"939":2,"941":1,"942":2,"944":5,"945":4,"946":2,"951":14,"959":6,"960":2,"961":10,"962":2,"964":7,"965":2,"985":1,"986":2,"987":1,"995":1}}],["hfutsqliang",{"2":{"1004":3}}],["h5",{"2":{"939":1}}],["h",{"2":{"749":1,"964":3}}],["hcameraelement",{"2":{"735":1}}],["hcompelement",{"2":{"734":1,"735":1,"741":1}}],["hbaseelement",{"2":{"735":1}}],["hsolidelement",{"2":{"734":1,"735":1}}],["hshapeelement",{"2":{"734":1,"735":1}}],["hsv",{"2":{"677":2,"679":1}}],["hsl",{"2":{"676":1,"677":2,"679":1,"818":1,"828":1,"962":1,"966":1}}],["href",{"2":{"750":1}}],["href=",{"2":{"15":1}}],["hr",{"2":{"640":1}}],["hugging",{"2":{"523":3}}],["hunyuan",{"2":{"512":3}}],["human",{"2":{"375":1,"550":1,"1002":1}}],["hi",{"2":{"790":1}}],["hierarchy",{"2":{"749":2}}],["hierarchyelement",{"2":{"734":1,"735":1}}],["history",{"2":{"735":1}}],["himageelement",{"2":{"734":1,"735":1}}],["hideontransparent",{"2":{"750":1}}],["hideloading",{"2":{"719":1}}],["hidden",{"2":{"684":1}}],["high",{"2":{"556":1}}],["hindsight",{"2":{"426":1}}],["hitgraphenabled",{"2":{"692":1}}],["hit双缓冲",{"2":{"679":1}}],["hitfunc",{"2":{"677":1,"680":2,"683":3,"692":1}}],["hitcontext",{"2":{"676":1,"677":1,"680":1}}],["hitcanvas",{"2":{"672":1,"673":1,"675":1,"676":1,"677":2,"680":4,"683":3,"684":2,"692":4}}],["hit检测",{"2":{"676":1,"677":1}}],["hitl",{"2":{"550":1}}],["hit",{"2":{"35":1,"670":1,"676":2}}],["hyphen",{"2":{"795":1,"797":2,"805":1}}],["hypertext",{"2":{"338":1}}],["hybridrendererbase",{"2":{"735":1,"741":1}}],["hybridrenderer",{"2":{"734":1,"735":1,"737":1,"741":2}}],["hybrid",{"2":{"546":1,"733":1,"755":1}}],["hydrateroot",{"2":{"58":1}}],["hydration",{"0":{"58":1},"2":{"26":1,"27":1,"45":1,"47":2,"53":1,"171":1,"959":1}}],["hmr",{"2":{"316":1}}],["hmac",{"2":{"121":1}}],["h3>",{"2":{"288":2}}],["harness",{"2":{"978":1,"979":1,"983":2}}],["hardcode",{"2":{"965":1,"966":1}}],["hard",{"2":{"797":2,"805":1,"975":1,"976":1,"978":1,"980":1,"987":2}}],["hatchling",{"2":{"939":1}}],["hackernews",{"2":{"851":2,"870":1}}],["happy",{"2":{"735":1}}],["happy2016",{"2":{"735":1}}],["haveintersection",{"2":{"693":1}}],["hailuo",{"2":{"512":1,"522":1}}],["haiku",{"2":{"481":2,"521":3,"523":1,"980":2}}],["hangul",{"2":{"795":1}}],["hanging",{"2":{"365":1}}],["handleaction",{"2":{"646":1,"654":2}}],["handleproductclick",{"2":{"288":2}}],["handle",{"2":{"281":1}}],["handler",{"2":{"280":2,"281":1,"708":1,"712":6,"719":2,"720":1,"951":2}}],["handlers",{"2":{"71":1,"280":1,"281":1,"576":2}}],["handleerror",{"2":{"231":1}}],["handlenameupdate",{"2":{"88":2}}],["handleselectmodel",{"2":{"74":1}}],["handlesubmit",{"2":{"16":2,"902":1}}],["handlelogin",{"2":{"16":2}}],["hallucination",{"0":{"352":1},"2":{"350":1,"543":1,"550":1}}],["haderror",{"2":{"148":2}}],["hastoolcall",{"2":{"915":2}}],["hasfeature",{"2":{"768":1,"777":1}}],["hasfill",{"2":{"692":1}}],["hasshadow",{"2":{"692":1}}],["hasstroke",{"2":{"692":1}}],["haschildren",{"2":{"663":1,"692":1,"826":1,"834":1}}],["hasid",{"2":{"270":1}}],["hasidentity>",{"2":{"266":1}}],["hasidentity",{"2":{"266":3}}],["hasname",{"2":{"270":2}}],["hash",{"2":{"92":1,"790":1,"965":4}}],["has",{"2":{"91":1,"942":1}}],["hex",{"2":{"970":1}}],["heron",{"2":{"790":1}}],["here",{"2":{"582":2}}],["he",{"2":{"790":1}}],["hemispherelight",{"2":{"763":1}}],["heffects",{"2":{"734":1,"735":1}}],["heal",{"2":{"947":1}}],["head",{"2":{"712":2,"818":2,"822":1,"824":2,"826":2,"834":2}}],["header>",{"2":{"288":2}}],["headers",{"2":{"135":1,"141":4,"144":3,"150":2,"878":1,"879":1,"891":1,"898":1,"916":1,"925":1}}],["header",{"2":{"62":1,"67":1,"85":1,"103":1,"106":1,"135":2,"140":1,"141":2,"142":1,"155":1,"274":1,"845":1,"849":1,"856":1,"859":2,"860":2,"865":2,"866":6}}],["heatmapview",{"2":{"706":1}}],["heatmapseries",{"2":{"706":1}}],["heatmap",{"2":{"706":1}}],["heavychartrender",{"2":{"313":2}}],["height→lineheight",{"2":{"819":1}}],["height",{"2":{"230":4,"232":1,"692":3,"693":1,"696":2,"719":2,"777":1,"778":1,"792":1,"793":2,"798":2,"805":1,"809":2}}],["hell",{"2":{"970":1}}],["hello",{"2":{"65":1,"229":1,"238":1,"258":1,"261":1,"263":2,"265":1,"300":1,"302":1,"306":2,"311":2,"795":1,"902":1}}],["help",{"2":{"865":1}}],["helper",{"2":{"448":1,"642":1,"646":3,"647":4,"706":5,"766":1,"980":1,"987":1}}],["helpers",{"2":{"16":1,"274":1,"734":1,"735":2,"763":1,"818":1,"819":2,"851":1,"980":1}}],["htextelement",{"2":{"734":1,"735":1}}],["http+ws",{"2":{"850":1,"851":1}}],["http",{"0":{"103":1,"104":2,"123":1,"866":1},"1":{"105":2,"106":2,"107":2,"124":1,"125":1,"126":1,"127":1,"128":1},"2":{"35":1,"40":1,"69":1,"74":1,"83":1,"85":1,"87":1,"91":1,"102":4,"103":6,"104":3,"105":2,"106":1,"108":1,"112":2,"113":4,"114":2,"115":2,"117":1,"118":1,"119":2,"121":1,"122":1,"123":4,"124":2,"125":2,"126":1,"129":1,"130":5,"131":4,"132":3,"133":3,"134":6,"135":7,"139":4,"141":2,"142":1,"144":2,"150":1,"152":1,"155":1,"156":5,"158":1,"162":1,"163":1,"275":3,"279":1,"288":2,"342":8,"666":2,"763":2,"781":1,"790":1,"808":1,"849":1,"860":5,"866":1,"873":1,"881":2,"906":2,"955":1}}],["httpstatus",{"2":{"163":3}}],["https",{"2":{"17":1,"69":1,"71":1,"72":1,"138":1,"163":1,"262":1,"456":2,"695":1,"696":1,"699":1,"728":1,"753":1,"780":1,"859":2,"862":1,"870":1,"898":1,"955":1,"998":1,"1004":1}}],["htmlbuttonelement>",{"2":{"964":1}}],["htmlelements",{"2":{"735":1}}],["html+css",{"2":{"734":1,"735":1}}],["htmlimageelement",{"2":{"692":1}}],["htmlcanvaselement",{"2":{"692":1,"777":1,"778":1}}],["htmldivelement",{"2":{"684":2,"692":4}}],["html5",{"2":{"670":1}}],["html",{"2":{"2":1,"6":1,"15":1,"22":1,"23":2,"26":2,"27":2,"30":2,"31":3,"35":4,"40":2,"45":5,"47":2,"50":2,"51":1,"52":1,"53":3,"56":1,"57":2,"58":1,"61":1,"63":1,"74":4,"75":1,"76":1,"81":1,"103":1,"338":4,"339":1,"344":1,"345":1,"474":1,"639":1,"662":1,"677":4,"680":1,"684":1,"696":1,"728":2,"730":1,"734":1,"735":16,"737":3,"738":1,"741":1,"749":1,"751":5,"754":1,"755":1,"763":2,"790":18,"819":1,"851":3,"933":1,"936":1,"961":1,"962":6,"964":1,"965":1,"967":3,"971":1,"980":2,"987":1}}],["hono",{"2":{"902":1}}],["honesty",{"2":{"360":1}}],["hot",{"2":{"851":1,"863":1,"870":2}}],["hold",{"2":{"743":1,"749":1}}],["hosting",{"0":{"345":1}}],["hostname",{"2":{"72":1}}],["hocstorefactory",{"2":{"652":1}}],["hoc",{"2":{"169":1,"646":2,"647":2,"652":1}}],["howler",{"2":{"734":1,"735":1}}],["how",{"2":{"75":1,"179":1,"351":1,"555":1,"939":1,"1001":1}}],["hookaction",{"2":{"994":2}}],["hookeventname",{"2":{"994":1}}],["hookevent",{"2":{"994":2}}],["hookconfig",{"2":{"994":1}}],["hookspecificoutput|",{"2":{"985":1}}],["hookspecificoutput",{"2":{"979":1,"994":1}}],["hooks",{"2":{"17":1,"83":1,"85":1,"87":1,"169":2,"170":1,"178":1,"203":4,"263":1,"274":10,"280":1,"342":1,"542":1,"646":1,"647":4,"851":1,"901":1,"906":2,"939":3,"979":3,"980":5,"982":2,"985":5,"994":6}}],["hook",{"0":{"87":1,"985":2},"2":{"17":1,"85":1,"87":2,"95":1,"98":1,"263":1,"909":1,"917":2,"926":1,"975":1,"976":1,"978":4,"979":1,"980":6,"983":3,"985":2,"994":2,"997":1}}],["hover",{"2":{"15":1,"16":1,"958":1,"959":1,"961":1,"962":1,"964":3}}],["homepage",{"2":{"274":2}}],["home",{"2":{"15":1,"274":1}}],["h2>",{"2":{"15":1,"16":1}}],["h2",{"2":{"15":1,"16":1}}],["h1>",{"2":{"15":2}}],["h1",{"2":{"15":2,"939":1}}],["首席科学家",{"2":{"1018":1}}],["首帧渲染",{"2":{"746":1}}],["首句仄起仄收",{"2":{"507":1}}],["首联以",{"2":{"508":1}}],["首联定基调",{"2":{"507":1}}],["首联",{"2":{"507":1}}],["首联写其发髻与衣饰的柔美",{"2":{"505":1}}],["首字母小写",{"2":{"451":1}}],["首选方案是",{"2":{"131":2}}],["首个",{"2":{"124":1}}],["首先需要写一个普通的",{"2":{"960":1}}],["首先需要引入核心包",{"2":{"480":1}}],["首先",{"2":{"602":1,"603":1}}],["首先确认形式和主题是否符合要求",{"2":{"504":1}}],["首先利用",{"2":{"171":1}}],["首先从本地缓存中返回数据",{"2":{"85":1}}],["首先要看清",{"2":{"56":1}}],["首先创建",{"2":{"13":1}}],["首次注入",{"2":{"983":1}}],["首次加载慢",{"2":{"63":1,"72":1}}],["首次生成后缓存",{"2":{"45":1}}],["首次访问时生成",{"2":{"45":1}}],["首次访问",{"2":{"35":1}}],["首次内容绘制",{"2":{"25":1}}],["首屏依赖",{"2":{"59":1}}],["首屏后交互流畅",{"2":{"46":1}}],["首屏极快",{"2":{"27":1}}],["首屏体验重要的场景",{"2":{"25":1}}],["首页",{"2":{"15":1,"55":1,"65":1,"67":1}}],["otel",{"2":{"908":1}}],["others",{"2":{"647":1,"656":1,"985":1}}],["other",{"2":{"267":3,"281":3,"941":1}}],["oxfmt",{"2":{"904":2}}],["oxlint",{"2":{"790":1,"808":1,"904":2}}],["oxlintrc",{"2":{"790":1}}],["oom",{"2":{"860":1}}],["oop",{"2":{"344":2}}],["o",{"2":{"521":1,"672":1,"749":1}}],["ollama",{"2":{"519":1}}],["oldidx",{"2":{"713":1}}],["old",{"2":{"96":2,"333":1,"706":1}}],["o3",{"2":{"511":1,"521":2}}],["o1",{"2":{"511":1,"512":1,"521":2,"522":2}}],["os",{"2":{"419":1}}],["oss",{"2":{"7":1,"126":1}}],["overflow",{"2":{"797":2}}],["overlay",{"2":{"647":1}}],["overloadedgettersetter",{"2":{"677":1,"685":1}}],["overloadedadd",{"2":{"238":2}}],["overload",{"2":{"238":1}}],["overallreset",{"2":{"712":1}}],["overalltask",{"2":{"712":2}}],["overall",{"0":{"644":1},"1":{"645":1,"646":1,"647":1}}],["overviews",{"2":{"518":2}}],["overview",{"2":{"456":1,"515":3,"518":1}}],["over",{"2":{"342":2,"865":1,"939":2}}],["override",{"2":{"203":1,"661":1,"735":1}}],["out",{"2":{"730":1,"819":1}}],["outline",{"2":{"249":1,"964":2}}],["outdir",{"2":{"203":2,"204":2,"213":1,"214":1,"215":1,"322":1}}],["output>>",{"2":{"926":2}}],["output>",{"2":{"925":1}}],["outputnode",{"2":{"770":1}}],["outputt",{"2":{"719":2}}],["outputt>",{"2":{"719":1}}],["outputformat",{"2":{"482":3}}],["output",{"2":{"82":1,"488":1,"489":2,"744":1,"770":1,"777":1,"850":1,"851":1,"855":1,"925":3,"926":8}}],["obra",{"2":{"973":1,"998":1}}],["obsidian",{"0":{"628":1},"2":{"629":1}}],["observability",{"2":{"550":1}}],["observable",{"2":{"153":4,"154":2}}],["observation",{"2":{"427":3,"429":1}}],["observer",{"0":{"302":1},"2":{"302":3,"818":1,"944":1,"946":1}}],["obj等",{"2":{"763":1}}],["obj",{"2":{"263":1,"268":3,"769":2,"819":1}}],["objectloader",{"2":{"763":1}}],["object3d",{"0":{"769":1},"2":{"762":2,"763":1,"766":3,"769":6,"777":9}}],["objects",{"2":{"280":4,"281":1,"763":2,"777":2}}],["objectresult",{"2":{"258":1}}],["object",{"2":{"200":1,"274":1,"306":1,"327":1,"482":1,"685":1,"692":4,"719":3,"720":2,"734":1,"762":1,"777":6,"778":4,"814":1,"827":2,"834":2,"866":3,"907":1,"925":2,"946":2,"952":11}}],["occupiedwidth",{"2":{"799":1}}],["occurredat",{"2":{"281":1}}],["occurred",{"2":{"87":1,"91":1}}],["ockham",{"2":{"181":1}}],["official",{"2":{"998":1}}],["office",{"2":{"641":1,"647":4}}],["offscreencanvas",{"2":{"777":1,"778":1,"796":1}}],["offscreen",{"2":{"763":1}}],["offsetheight",{"2":{"784":1}}],["offsettime",{"2":{"749":1}}],["offsetpathmodifier",{"2":{"735":1,"737":1}}],["offsetpath",{"2":{"730":1,"744":1}}],["offset",{"2":{"692":1,"825":1,"831":1,"834":1}}],["offsety",{"2":{"682":2,"692":1}}],["offsetx",{"2":{"682":2,"692":1}}],["off",{"2":{"289":1,"394":1,"682":1,"719":1}}],["of",{"2":{"141":1,"143":3,"181":1,"223":2,"259":1,"426":1,"482":2,"483":1,"484":1,"486":1,"488":1,"676":1,"790":1,"882":1,"980":1}}],["opaque",{"2":{"768":1}}],["opacity",{"2":{"692":1,"735":1,"771":1,"777":1,"958":1,"959":1,"961":2,"962":2,"964":1}}],["op",{"2":{"735":1,"737":1,"744":1}}],["opt",{"2":{"719":2}}],["opts",{"2":{"705":1,"708":1,"719":4,"798":2,"858":2,"859":1,"865":5}}],["optional",{"2":{"986":1}}],["optionpreprocessor",{"2":{"720":1}}],["optiondatavalue",{"2":{"719":2}}],["optionmanager",{"2":{"706":2,"708":1}}],["option",{"2":{"699":1,"702":1,"704":1,"705":3,"706":5,"708":2,"709":1,"717":1,"719":1}}],["options",{"2":{"141":11,"154":1,"482":5,"484":1,"486":1,"489":3,"647":1,"649":3,"662":1,"792":2,"806":2,"835":2,"860":1,"865":4,"916":5,"925":2,"926":4,"939":1,"951":1}}],["optimize",{"2":{"772":1}}],["optimization",{"2":{"518":1}}],["optimisticdata",{"2":{"88":1}}],["optimistic",{"0":{"88":1,"96":1},"2":{"91":1,"98":1,"342":1}}],["opus",{"2":{"481":1,"521":1}}],["operatornode",{"2":{"770":1}}],["operators",{"2":{"154":1}}],["operations",{"2":{"482":2}}],["operating",{"2":{"391":1}}],["opentelemetry",{"2":{"908":1}}],["opening",{"2":{"790":1}}],["openspec",{"0":{"778":1,"866":1},"2":{"952":1,"1000":1}}],["open",{"2":{"654":1,"840":1,"862":1,"870":1}}],["opendrawer",{"2":{"654":1}}],["opendialog",{"2":{"654":1}}],["opendevin",{"2":{"567":1}}],["openxml",{"2":{"641":1,"647":2}}],["openhands",{"2":{"567":1,"568":2}}],["opencli│",{"2":{"859":1}}],["opencli",{"2":{"843":1,"844":1,"848":1,"851":4,"854":2,"859":1,"860":5,"862":1,"863":1,"866":8,"868":1,"869":3,"870":6}}],["openclaw",{"0":{"419":1},"2":{"403":1,"419":5,"442":2,"477":1}}],["opencode",{"2":{"559":1,"567":1,"568":3,"979":1,"980":10,"983":1,"997":1}}],["openrouter",{"2":{"523":5}}],["openaitools",{"2":{"916":1,"927":1}}],["openaitranscriptionmodel",{"2":{"916":1}}],["openaiskills",{"2":{"916":1}}],["openaispeechmodel",{"2":{"916":1}}],["openaifiles",{"2":{"916":1}}],["openaiimagemodel",{"2":{"916":1}}],["openaiembeddingmodel",{"2":{"916":1}}],["openaicompletionlanguagemodel",{"2":{"916":1}}],["openaichatlanguagemodel",{"2":{"916":1}}],["openairesponseslanguagemodel",{"2":{"912":1,"916":1}}],["openaiprovidersettings",{"2":{"916":1}}],["openaiprovider",{"2":{"912":1,"916":1}}],["openai",{"2":{"511":1,"521":3,"522":1,"523":14,"573":1,"790":2,"901":1,"902":3,"906":1,"907":2,"908":2,"909":2,"912":2,"916":4,"919":3,"927":4,"931":2,"1005":2,"1008":2,"1018":1}}],["openapi",{"2":{"411":1}}],["openwhenhidden=false",{"2":{"891":1}}],["openwhenhidden",{"2":{"150":1,"891":1,"898":1}}],["opengraph",{"2":{"67":1}}],["okr",{"2":{"515":1}}],["ok",{"2":{"87":1,"105":1,"144":1,"150":1,"163":3,"237":1,"866":8,"879":1}}],["orchestrator",{"2":{"939":1}}],["orchestration",{"0":{"535":1},"2":{"342":1,"411":1,"978":1,"979":1}}],["or",{"2":{"865":2,"965":1,"1045":1}}],["orbit",{"2":{"763":1}}],["orbitcontrols",{"2":{"762":2}}],["orthographiccamera",{"2":{"763":1}}],["org>",{"2":{"916":1}}],["organization",{"2":{"916":2}}],["organisms",{"2":{"274":1}}],["org",{"2":{"699":1,"898":1,"939":1}}],["ormentity",{"2":{"281":5}}],["ormrepository",{"2":{"281":3}}],["orm",{"2":{"280":1,"573":1}}],["ordinal",{"2":{"706":1}}],["ordinalmeta",{"2":{"706":1}}],["ord",{"2":{"247":1}}],["orderdata",{"2":{"327":1}}],["orderdto",{"2":{"281":6}}],["orderdetail",{"2":{"280":1}}],["order>",{"2":{"281":1}}],["ordercreatedevent>",{"2":{"281":1}}],["ordercreatedeventhandler",{"2":{"281":1}}],["ordercreatedevent",{"2":{"281":3}}],["ordercannotbeconfirmederror",{"2":{"281":1}}],["ordercannotbemodifiederror",{"2":{"281":1}}],["ordercalculator",{"2":{"280":1}}],["ordermapper",{"2":{"281":2}}],["orderormentity>",{"2":{"281":1}}],["orderormentity",{"2":{"281":1}}],["orderitem",{"2":{"281":3}}],["orderitems",{"2":{"281":4}}],["orderid",{"2":{"247":8,"278":1,"281":7}}],["orderpage",{"2":{"280":1}}],["orderlist",{"2":{"280":1}}],["orderapi",{"2":{"280":1,"281":3}}],["orderapplicationservice",{"2":{"278":1,"280":1,"281":2}}],["orderfactory",{"2":{"278":1}}],["orderrepositoryimpl",{"2":{"281":1}}],["orderrepository",{"2":{"278":1,"280":1,"281":2}}],["orderstatus",{"2":{"280":1,"281":7}}],["orders",{"2":{"18":1}}],["order",{"2":{"14":1,"16":2,"275":1,"278":1,"280":31,"281":28}}],["origin",{"2":{"17":2,"860":2}}],["onretry",{"2":{"899":2}}],["onrender",{"2":{"827":2,"834":1}}],["onid",{"2":{"899":2}}],["onvisibilitychange",{"2":{"889":1}}],["onpause",{"2":{"825":1,"834":1}}],["onproductselect=",{"2":{"289":1}}],["onproductclick",{"2":{"288":3}}],["onproductclick=",{"2":{"288":1}}],["onprogress",{"2":{"150":2}}],["onupdated",{"2":{"941":1}}],["onupdate",{"2":{"818":1,"825":1,"827":1,"834":1}}],["onbegin",{"2":{"818":1,"825":1,"827":1,"834":1}}],["onbeforeupdate",{"2":{"825":1,"827":1,"834":1}}],["onbeforerender",{"2":{"771":1,"777":1}}],["onbeforecompile",{"2":{"771":1,"777":1}}],["onbroadcast",{"2":{"661":1}}],["onaction",{"2":{"708":1,"944":1}}],["onauthstatechange",{"2":{"16":1}}],["onfinish",{"2":{"686":1,"692":1,"910":1,"926":1}}],["oneventprops",{"2":{"661":1}}],["onerror",{"2":{"94":1,"96":2,"98":1,"138":3,"144":3,"146":3,"148":3,"149":1,"150":5,"662":1,"879":1,"889":1,"891":2,"898":2}}],["onglobalvarchanged",{"2":{"661":1}}],["onloop",{"2":{"818":1,"825":1,"827":2,"834":1}}],["onloginsuccess=",{"2":{"288":1}}],["online",{"2":{"806":2,"892":1,"899":2}}],["only",{"2":{"318":1,"785":1}}],["onxxx",{"2":{"175":1}}],["onopen",{"2":{"138":3,"144":3,"150":2,"879":1,"889":1,"891":2,"898":1}}],["onmessage│",{"2":{"889":1}}],["onmessage",{"2":{"138":3,"141":3,"144":3,"147":1,"150":2,"662":1,"877":1,"878":1,"891":1,"898":2,"899":2}}],["onmutate",{"2":{"96":3,"98":1}}],["onmounted",{"2":{"47":1}}],["onstepfinish",{"2":{"926":1}}],["onstepstart",{"2":{"926":1}}],["onstart",{"2":{"910":1,"926":1}}],["onsurfacedeleted",{"2":{"951":1}}],["onsurfacedeleted|",{"2":{"944":1}}],["onsurfacecreated",{"2":{"944":1,"951":1}}],["onsuccess",{"2":{"98":1}}],["onsubmit=",{"2":{"16":1}}],["onsettled",{"2":{"96":1,"98":1}}],["onselectmodel=",{"2":{"74":1}}],["on",{"2":{"36":1,"139":1,"289":2,"302":2,"315":3,"489":2,"682":1,"719":1,"979":1}}],["onchunk",{"2":{"899":2}}],["onchange",{"2":{"682":1,"951":1}}],["onchange=",{"2":{"16":1,"88":1}}],["once",{"2":{"772":1}}],["oncomplete",{"2":{"150":2,"818":1,"825":1,"827":2,"830":1,"834":1}}],["onclose",{"2":{"148":3,"150":4,"889":1,"891":1,"898":1}}],["onclick",{"2":{"62":1,"249":1,"313":1}}],["onclick=",{"2":{"16":1,"288":1}}],["与同事",{"2":{"1048":1}}],["与体脂秤对应的手机",{"2":{"1044":1}}],["与别人沟通交流的方式推动",{"2":{"1042":1}}],["与设计系统保持一致",{"2":{"965":3}}],["与现有技术栈和工具链的兼容性",{"2":{"965":1}}],["与长期维护成本",{"2":{"965":1}}],["与工作流",{"0":{"918":1}}],["与工具调用完善",{"2":{"522":1}}],["与默认",{"2":{"898":1}}],["与标准",{"2":{"874":1}}],["与浏览器行为高度一致的高性能文本测量与布局引擎库",{"2":{"784":1}}],["与浏览器",{"2":{"740":1}}],["与模块依赖拓扑",{"2":{"636":1}}],["与模块化",{"0":{"276":1},"1":{"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1}}],["与机会绝缘",{"2":{"622":1}}],["与让别人掏钱买你的服务之间",{"2":{"612":1}}],["与聊天",{"2":{"606":1}}],["与创造",{"0":{"600":1}}],["与数学思维",{"0":{"598":1}}],["与本地代码库深度结合",{"2":{"568":1}}],["与代码编辑器深度融合",{"0":{"563":1},"1":{"564":1,"565":1}}],["与交付",{"2":{"555":1}}],["与算力调度",{"2":{"551":1}}],["与其让问题与环境倒逼自己改变",{"2":{"1034":1}}],["与其这般努力",{"2":{"1034":1}}],["与其说世界上存在信息差",{"2":{"626":1}}],["与其追求每一步都人工可控",{"2":{"538":1}}],["与其他",{"2":{"402":1}}],["与能力的平庸化",{"0":{"531":1}}],["与字节跳动生态打通",{"2":{"522":1}}],["与阿里云",{"2":{"522":1}}],["与百度地图",{"2":{"518":1}}],["与百度搜索深度融合",{"2":{"512":1}}],["与飞书日历",{"2":{"515":2}}],["与私有化部署",{"2":{"512":1}}],["与抖音",{"2":{"512":1}}],["与钉钉",{"2":{"512":1}}],["与生态支持",{"2":{"512":1}}],["与用户的一次交互周期",{"2":{"983":1}}],["与用户的外部收益",{"2":{"399":1}}],["与用户对话",{"2":{"506":1}}],["与配置",{"0":{"481":1}}],["与人",{"0":{"610":1}}],["与人工对齐",{"2":{"550":1}}],["与人工协作",{"2":{"171":1}}],["与人类研究团队中的协作模式高度契合",{"2":{"468":1}}],["与杠杆力",{"2":{"458":1}}],["与行动",{"2":{"427":1}}],["与推理执行",{"2":{"419":1}}],["与上下文学习有关",{"2":{"408":1}}],["与沉没成本陷阱",{"0":{"393":1}}],["与运营成本",{"2":{"391":1}}],["与真诚",{"2":{"360":1}}],["与真实",{"2":{"58":1}}],["与平庸",{"0":{"360":1}}],["与碎片化接口治理问题",{"2":{"342":1}}],["与新兴技术深度融合",{"2":{"293":1}}],["与业务洞察",{"0":{"541":1}}],["与业务专家深入沟通",{"2":{"282":1}}],["与业务消息",{"2":{"150":1}}],["与后端接口交互时",{"2":{"256":1}}],["与后端接口自然对应",{"2":{"85":1}}],["与类型层级的代数关系",{"0":{"244":1}}],["与联合类型相反",{"2":{"239":1}}],["与副作用",{"2":{"171":1}}],["与回调通信",{"2":{"170":1}}],["与高内聚低耦合两条铁律",{"2":{"170":1}}],["与普通",{"2":{"152":1}}],["与主动取消",{"0":{"149":1}}],["与原生",{"2":{"143":1}}],["与流式",{"2":{"134":1}}],["与实时业务场景选型",{"0":{"130":1}}],["与状态下沉",{"2":{"174":1}}],["与状态同步",{"2":{"117":1}}],["与状态管理解耦",{"2":{"85":1}}],["与二进制数据帧",{"2":{"115":1}}],["与全局配置",{"0":{"87":1}}],["与此同时",{"2":{"74":1,"75":1,"171":1}}],["与页面共享同一套",{"2":{"71":1}}],["与构建阶段的渲染过程解耦",{"2":{"54":1}}],["与客户端首次渲染的",{"2":{"47":1}}],["与",{"0":{"41":1,"73":1,"122":1,"179":1,"205":1,"210":1,"235":1,"321":1,"333":1,"419":1,"750":1},"1":{"74":1,"75":1,"76":1,"77":1,"78":1,"206":1,"207":1,"208":1,"209":1,"210":1,"236":1,"237":1,"238":1,"239":1,"240":1},"2":{"14":1,"34":1,"39":1,"73":1,"74":1,"78":1,"83":1,"92":1,"97":1,"103":1,"113":1,"114":1,"133":1,"138":1,"155":1,"156":1,"170":1,"171":2,"182":1,"203":1,"209":1,"216":1,"226":1,"244":2,"303":1,"307":1,"313":1,"337":1,"338":1,"340":1,"342":1,"345":1,"349":1,"363":1,"365":1,"376":1,"422":1,"426":1,"429":1,"432":1,"480":1,"493":1,"511":1,"521":3,"522":1,"540":1,"541":1,"544":1,"550":1,"558":1,"561":1,"596":1,"704":1,"750":1,"939":3,"1000":1,"1001":1,"1008":2,"1029":1}}],["与传统动态网站对比",{"0":{"3":1}}],["编织成一条可持续",{"2":{"434":1}}],["编排的一线经验",{"2":{"1000":1}}],["编排器",{"2":{"934":1}}],["编排",{"2":{"544":1,"818":1,"934":1,"939":1}}],["编排类",{"2":{"411":1}}],["编排层",{"2":{"279":1}}],["编程磨合的实践",{"2":{"1000":1}}],["编程领域经历了剧烈的范式震荡",{"2":{"569":1}}],["编程代理",{"2":{"567":1}}],["编程",{"2":{"567":2,"958":1}}],["编程体验",{"2":{"565":1}}],["编程与应用",{"2":{"1004":1}}],["编程与",{"2":{"557":1}}],["编程与设计中应用奥卡姆剃刀的核心场景",{"0":{"182":1},"1":{"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1}}],["编程助手",{"2":{"542":1}}],["编程技能萎缩",{"2":{"525":1}}],["编程工具快速实现",{"2":{"552":1}}],["编程工具的助力下",{"2":{"361":1}}],["编程工具",{"2":{"171":1,"564":1}}],["编码平台适配器",{"2":{"983":1}}],["编码助手从",{"2":{"973":1}}],["编码规范",{"2":{"575":1,"939":1}}],["编码风格等",{"2":{"570":1}}],["编码",{"2":{"564":1,"973":2,"974":1}}],["编码工具",{"2":{"561":1}}],["编码实现了",{"2":{"494":1}}],["编码实现",{"2":{"282":1}}],["编码阶段的执行力",{"2":{"169":1}}],["编码转换",{"2":{"115":1}}],["编译管道",{"0":{"969":1},"2":{"965":1}}],["编译阶段",{"2":{"777":1}}],["编译引擎",{"2":{"763":1,"770":1}}],["编译到",{"2":{"758":1}}],["编译+打包+压缩",{"2":{"697":1}}],["编译配置",{"2":{"677":1,"706":1}}],["编译配置与",{"0":{"202":1},"1":{"203":1,"204":1}}],["编译速度快",{"2":{"642":1}}],["编译生成的中间环节",{"2":{"342":1}}],["编译期捕获类型错误",{"2":{"270":1}}],["编译报错",{"2":{"265":1,"268":1,"269":1}}],["编译为全局唯一的哈希字符串",{"2":{"960":1}}],["编译为可执行函数",{"2":{"742":1}}],["编译为",{"2":{"254":1,"771":1}}],["编译为带代码高亮的",{"2":{"76":1}}],["编译时类型隔离",{"2":{"904":1}}],["编译时类型推导",{"2":{"248":1}}],["编译时",{"2":{"339":1}}],["编译时检查",{"2":{"326":1}}],["编译时优化",{"2":{"317":1}}],["编译时进行类型检查",{"2":{"253":1}}],["编译器",{"2":{"642":1}}],["编译器可以根据约束提供更精确的类型信息",{"2":{"264":1}}],["编译器可推断具体类型",{"2":{"253":1}}],["编译器根据传入的参数自动推断",{"2":{"258":1}}],["编译器自动推断",{"2":{"254":1}}],["编译器会报错",{"2":{"254":1}}],["编译器会对泛型代码进行严格的类型检查",{"2":{"254":1}}],["编译器信任你的判断",{"2":{"231":1}}],["编译器也会逐步缩小可能的类型范围",{"2":{"231":1}}],["编译产物包含类型擦除和填充代码",{"2":{"217":1}}],["编译后会变成",{"2":{"254":1}}],["编译后",{"2":{"217":1}}],["编译后的产物依然是普通",{"2":{"958":1}}],["编译后的",{"2":{"203":1}}],["编译所有项目",{"2":{"216":1}}],["编译单元",{"2":{"210":1}}],["编译输出目录",{"2":{"203":1}}],["编译信息配置",{"2":{"203":1}}],["编译选项和输出路径等",{"2":{"202":1}}],["编译",{"2":{"45":1,"735":1,"742":1}}],["编辑引擎逻辑",{"2":{"790":1}}],["编辑引擎",{"2":{"790":1}}],["编辑命令",{"2":{"763":1}}],["编辑功能",{"2":{"647":1}}],["编辑器样式",{"2":{"763":1}}],["编辑器逻辑",{"2":{"763":1}}],["编辑器入口",{"2":{"763":1}}],["编辑器和图表变得简单高效",{"2":{"670":1}}],["编辑器核心逻辑",{"2":{"939":1}}],["编辑器核心",{"2":{"656":1,"763":1}}],["编辑器修改",{"2":{"656":1}}],["编辑器的工作原理是",{"2":{"656":1}}],["编辑器分为两层",{"2":{"656":1}}],["编辑器校验系统",{"2":{"647":1}}],["编辑器模板系统",{"2":{"647":1}}],["编辑器渲染器控件",{"2":{"647":1}}],["编辑器语言包",{"2":{"647":1}}],["编辑器功能图标",{"2":{"647":1}}],["编辑器主组件",{"2":{"647":1}}],["编辑器插件基础框架",{"2":{"647":1}}],["编辑器插件数",{"2":{"643":1}}],["编辑器国际化",{"2":{"647":1}}],["编辑器布局组件",{"2":{"647":1}}],["编辑器图标",{"2":{"647":1,"763":1}}],["编辑器基础组件",{"2":{"647":1}}],["编辑器工具函数",{"2":{"647":2}}],["编辑器",{"2":{"647":3,"656":1,"790":1,"939":1}}],["编辑器层",{"2":{"645":1}}],["编辑器中执行",{"2":{"16":1}}],["编辑",{"2":{"555":1}}],["编辑比较频繁的建议使用",{"2":{"341":1}}],["编辑者在",{"2":{"9":1}}],["编写最小代码使测试通过",{"2":{"989":1}}],["编写失败测试",{"2":{"989":1}}],["编写测试",{"2":{"988":1}}],["编写测试用例",{"0":{"223":1}}],["编写与测试新技能",{"2":{"980":1}}],["编写和测试新技能的完整方法论",{"2":{"979":1}}],["编写极其复杂的关键帧动画",{"2":{"971":1}}],["编写适配器将网站转为",{"2":{"843":1}}],["编写自定义着色器节点的完整编译流程",{"2":{"775":1}}],["编写命令的最佳实践",{"2":{"583":1}}],["编写后端业务api",{"2":{"553":1}}],["编写高并发",{"2":{"553":1}}],["编写了一个较为规范的",{"2":{"504":1}}],["编写具体动作",{"2":{"449":1}}],["编写执行指令",{"0":{"449":1}}],["编写元信息",{"0":{"448":1}}],["编写的高性能增量打包工具",{"2":{"343":1}}],["编写类型声明",{"2":{"320":1}}],["编写代码",{"2":{"308":1,"567":1}}],["编写一次",{"2":{"252":1}}],["编写支付回调函数",{"2":{"18":1}}],["编写评论组件",{"2":{"16":1}}],["编写",{"2":{"14":1,"344":2,"583":1,"982":1}}],["lc",{"2":{"798":1}}],["lh",{"2":{"798":3}}],["ldraw",{"2":{"763":1}}],["l",{"2":{"686":2}}],["l5",{"2":{"645":1,"646":1,"647":2}}],["l4",{"2":{"645":1,"646":1,"647":1}}],["lpu",{"2":{"523":2}}],["l3",{"2":{"403":1,"459":3,"645":1,"646":1,"647":1}}],["l2",{"2":{"403":1,"459":3,"645":1,"646":1,"647":1}}],["l1",{"2":{"403":1,"459":3,"645":1,"646":1,"647":1}}],["llama",{"2":{"353":1,"519":1,"523":4}}],["llmops",{"2":{"551":1}}],["llm",{"0":{"628":1},"2":{"80":1,"130":1,"131":1,"155":1,"349":1,"353":3,"358":1,"367":1,"402":3,"408":2,"410":2,"411":1,"412":1,"424":1,"425":3,"427":1,"431":1,"441":2,"443":1,"493":1,"523":2,"534":1,"541":1,"550":2,"558":1,"567":1,"568":2,"902":1,"918":3,"922":2,"935":2,"939":4,"941":3,"947":1,"948":2,"976":1,"1000":1,"1002":2,"1005":1}}],["less",{"2":{"958":1,"965":2}}],["lerp",{"2":{"818":1,"819":1,"827":1,"828":2}}],["lerna",{"2":{"335":1,"642":1,"904":1}}],["len",{"2":{"805":1}}],["length",{"2":{"70":1,"105":1,"160":1,"194":1,"263":3,"265":1,"270":1,"281":1,"735":2}}],["legend",{"2":{"701":1,"706":1,"709":1,"715":1}}],["legacy",{"2":{"333":2,"553":1,"666":1,"706":1,"763":1}}],["lexer",{"2":{"646":1,"647":2,"655":2}}],["leverage",{"0":{"462":1},"2":{"458":2}}],["level",{"0":{"459":1},"2":{"443":6,"654":1,"865":3,"866":1}}],["lead",{"2":{"415":1,"416":2,"470":4,"471":2,"472":2}}],["learn",{"2":{"414":1}}],["learning",{"0":{"346":1},"2":{"410":1,"939":2}}],["left",{"2":{"243":2}}],["letterspacing",{"2":{"793":1,"805":2}}],["letterprops",{"2":{"735":1}}],["letter",{"2":{"281":1,"790":4,"797":2}}],["let",{"2":{"141":1,"143":2,"150":1,"160":1,"163":1,"203":2,"229":1,"265":3,"301":1,"315":2,"330":1,"489":1}}],["lookup",{"2":{"941":1}}],["lookat",{"2":{"769":1}}],["loopdelay",{"2":{"825":1}}],["loopcomplete",{"2":{"750":1}}],["loopout",{"2":{"742":2}}],["loopin",{"2":{"730":1,"742":2}}],["loop",{"0":{"484":1},"2":{"429":1,"478":2,"491":1,"550":1,"676":1,"746":1,"749":1,"750":1,"754":1,"770":1,"772":1,"825":1,"839":1,"915":1,"918":2}}],["lod",{"2":{"763":1}}],["lodash",{"2":{"288":1,"306":1}}],["lot格式",{"2":{"735":1}}],["lot",{"2":{"734":1}}],["lottie等",{"2":{"763":1}}],["lottieplayer",{"2":{"750":1}}],["lottie",{"0":{"746":1},"2":{"728":5,"729":1,"733":2,"734":4,"735":3,"737":2,"738":1,"740":1,"746":1,"749":1,"750":1,"751":10,"753":1,"754":1}}],["lovable",{"2":{"561":1,"562":2}}],["locator",{"2":{"919":1}}],["locationhref",{"2":{"735":1}}],["location",{"2":{"653":1,"662":1}}],["localtoworld",{"2":{"777":1}}],["localeoption",{"2":{"719":1}}],["localeprops",{"2":{"661":1}}],["localeable",{"2":{"646":1}}],["locale",{"2":{"646":1,"647":6,"649":1,"706":2,"719":1,"789":1,"798":1,"806":1}}],["localhost",{"2":{"139":1,"288":2,"555":1,"808":1,"955":1,"1001":1}}],["localstorage",{"2":{"18":1,"62":1,"274":1,"280":1,"939":1}}],["local",{"0":{"596":1},"2":{"14":1,"16":1,"570":6,"571":1,"573":1,"596":3,"597":1,"865":2}}],["loc",{"2":{"526":1}}],["lock",{"2":{"392":1,"398":1,"790":1,"882":1,"980":1}}],["loss",{"2":{"369":1}}],["low",{"2":{"365":2,"461":1,"556":1}}],["logentry",{"2":{"860":1}}],["logbuffer",{"2":{"860":1}}],["logs",{"2":{"860":2,"866":1}}],["logo等",{"2":{"980":1}}],["logo",{"2":{"706":1,"729":1,"755":1,"819":1}}],["logic",{"2":{"558":1,"1000":1}}],["login",{"2":{"288":6,"290":1,"327":2}}],["loginform",{"2":{"274":1}}],["logging",{"2":{"275":1,"280":1}}],["logger",{"2":{"274":1,"275":1,"280":1,"300":2,"311":6,"312":1,"851":1}}],["loglength",{"2":{"263":1}}],["log",{"2":{"138":3,"139":1,"141":1,"144":1,"160":3,"164":3,"231":2,"246":1,"259":1,"260":1,"262":1,"263":1,"269":1,"288":2,"289":2,"295":5,"300":3,"301":3,"302":1,"304":2,"305":2,"307":2,"311":3,"314":4,"315":4,"324":2,"325":1,"483":1,"484":1,"489":1,"571":1,"583":1,"706":2,"877":1,"980":1}}],["longpolling",{"2":{"164":1}}],["longtaskcontroller",{"2":{"163":1}}],["long",{"2":{"103":1,"156":1,"163":1,"164":1,"166":1,"410":1,"419":1,"522":1}}],["loadoptionalsetting",{"2":{"916":2}}],["loadapikey",{"2":{"916":2}}],["loadapikey|",{"2":{"907":1}}],["loadanimation",{"0":{"746":1},"2":{"729":1,"734":1,"740":1,"746":1,"750":1,"754":1}}],["loaded",{"2":{"750":1}}],["loaders",{"2":{"763":2}}],["loader",{"2":{"343":1,"735":2,"763":1,"961":2}}],["load",{"2":{"85":1,"865":1,"948":1}}],["loadingmanager",{"2":{"763":1}}],["loadingeffectcreator",{"2":{"720":1}}],["loading",{"2":{"66":2,"68":1,"77":1,"78":1,"91":2,"229":2,"234":2,"663":1,"706":1,"980":1}}],["lttb",{"2":{"706":1}}],["lt",{"2":{"53":2,"61":1,"69":2,"72":4,"74":1,"75":1,"130":2,"135":1,"138":3,"169":3,"200":1,"250":3,"254":4,"255":3,"256":7,"263":11,"270":2,"271":1,"297":1,"320":1,"448":1,"570":1,"796":3,"856":1,"906":1,"917":1,"959":1,"961":3,"965":1,"966":1,"968":1,"970":1,"971":2,"978":1,"987":1}}],["law",{"2":{"989":2}}],["labs",{"2":{"936":1}}],["label",{"2":{"628":1,"636":1,"640":3,"668":2,"677":1,"679":1,"680":1,"693":1,"706":2}}],["launcher",{"2":{"851":1,"855":1}}],["lambert",{"2":{"759":1,"763":1}}],["large",{"2":{"712":1}}],["latency",{"0":{"353":1}}],["latest",{"2":{"13":1}}],["layerelement",{"2":{"741":1}}],["layered",{"2":{"336":1,"675":1,"906":1}}],["layerinterface",{"2":{"735":1,"742":2}}],["layerconfig",{"2":{"692":1}}],["layer>",{"2":{"692":1,"693":1}}],["layers",{"2":{"686":4,"692":3,"738":1,"749":1,"763":1,"777":2}}],["layer",{"2":{"672":2,"675":1,"676":2,"677":2,"679":1,"680":5,"684":1,"692":7,"693":2,"696":5,"705":2,"734":5,"735":1,"742":1,"749":1,"762":3,"770":1,"906":5,"907":4,"938":5,"978":4,"979":4}}],["layoutnextrichinlinelinerange",{"2":{"806":1}}],["layoutnextlinerange",{"0":{"802":1},"2":{"789":1,"790":1,"793":1,"798":1,"806":1,"810":1}}],["layoutnextline",{"2":{"789":1,"806":1}}],["layoutcursor",{"2":{"793":3,"805":5,"806":2}}],["layoutlinerange",{"2":{"793":4,"805":1,"806":3}}],["layoutline",{"2":{"792":1,"793":4,"805":2,"806":2}}],["layoutlinesresult",{"2":{"792":1,"793":1,"805":1,"806":1}}],["layoutresult",{"2":{"792":1,"793":1,"805":2,"806":1}}],["layoutwithlines",{"2":{"789":1,"792":2,"793":1,"798":2,"806":1,"810":1}}],["layoutinfo",{"2":{"714":1}}],["layoutpoints",{"2":{"706":1}}],["layouts",{"2":{"290":1}}],["layout",{"0":{"798":1,"801":1},"2":{"66":1,"67":4,"647":4,"656":1,"705":3,"706":2,"715":3,"784":1,"785":1,"786":1,"788":8,"789":5,"790":6,"792":3,"793":1,"798":4,"801":1,"805":1,"806":2,"809":2,"810":1,"818":2,"819":3,"821":1,"939":1}}],["lang=",{"2":{"965":1,"968":1}}],["langfuse",{"2":{"550":1}}],["langsmith",{"2":{"550":1}}],["langgpt",{"0":{"506":1},"1":{"507":1,"508":1},"2":{"496":1,"506":1}}],["langgraph",{"2":{"477":1}}],["langchain",{"2":{"477":1,"545":1}}],["languagemodel",{"2":{"907":3,"912":2,"913":1,"916":2,"925":1,"926":1}}],["languagemodelv4streamresult>",{"2":{"925":1}}],["languagemodelv4generateresult>",{"2":{"925":1}}],["languagemodelv4calloptions",{"2":{"925":3}}],["languagemodelv4",{"2":{"903":1,"906":2,"908":1,"910":1,"912":1,"913":4,"916":1,"925":2}}],["language>",{"2":{"506":1}}],["language",{"0":{"770":1},"2":{"277":1,"338":1,"506":1,"523":1,"770":1,"907":1,"909":3}}],["lang3",{"2":{"193":2}}],["lang3库",{"2":{"193":1}}],["laptop",{"2":{"260":1}}],["lastticktime",{"2":{"818":1,"824":1,"826":1,"834":2}}],["lasttime",{"2":{"692":1}}],["lastindex",{"2":{"743":1,"749":1}}],["lasteventid",{"2":{"138":1,"153":3,"154":1}}],["last",{"2":{"110":1,"819":1,"889":1}}],["lazyupdate",{"2":{"719":1}}],["lazycomponent",{"2":{"647":1}}],["lazyonload",{"2":{"72":1}}],["lazy",{"2":{"47":1,"288":5}}],["lg",{"2":{"15":1,"16":3,"249":1,"964":2}}],["littheme",{"2":{"939":1}}],["lit",{"2":{"933":1,"934":1,"935":1,"936":4,"938":1,"939":13,"941":1,"942":1,"955":1,"956":1}}],["litelement>",{"2":{"939":1}}],["litelement",{"2":{"939":1}}],["lite",{"2":{"522":1}}],["limit",{"2":{"863":1,"870":1}}],["lightprobe",{"2":{"763":1}}],["lightshadow",{"2":{"763":1}}],["lights",{"2":{"763":3}}],["lighting",{"2":{"762":2,"763":3}}],["light",{"2":{"735":3,"751":8,"762":2,"763":1,"766":2,"769":1,"782":3,"962":1}}],["lightning",{"2":{"343":1}}],["license",{"2":{"677":2,"706":1,"735":1,"763":1,"790":1,"819":1,"851":1,"882":1,"939":1,"980":1}}],["lion",{"2":{"677":1}}],["lifecycle",{"2":{"656":1,"706":1,"980":1}}],["lifting",{"2":{"174":2}}],["like",{"2":{"646":1,"706":1}}],["linter",{"2":{"572":1,"591":1,"904":1}}],["lint`",{"2":{"451":1}}],["lint",{"2":{"177":2,"451":1,"542":2,"572":1,"573":1}}],["linefitepsilon",{"2":{"796":1,"805":1}}],["lineheight",{"2":{"792":2,"806":2}}],["lineloop",{"2":{"763":1}}],["line3",{"2":{"763":1}}],["linedashedmaterial",{"2":{"763":1}}],["linebasicmaterial",{"2":{"763":1}}],["lineview",{"2":{"706":1}}],["linecount",{"2":{"792":1,"793":2,"797":2,"798":2,"805":2,"809":2}}],["lineconfig>",{"2":{"693":1}}],["linecap",{"2":{"692":3}}],["linejoin",{"2":{"692":3}}],["linear",{"2":{"372":1,"742":1,"743":1,"763":2,"772":1,"819":2,"821":2,"979":1}}],["line",{"0":{"797":1},"2":{"141":3,"143":7,"489":1,"677":2,"679":1,"680":1,"693":1,"705":1,"706":2,"763":1,"766":1,"788":3,"789":5,"790":2,"792":5,"798":5,"806":4,"892":1,"899":2}}],["linestart",{"2":{"892":2}}],["linestats",{"2":{"805":1,"806":1}}],["linestyle",{"2":{"706":1}}],["linesegments",{"2":{"763":1}}],["lineseries",{"2":{"706":1}}],["linesview",{"2":{"706":1}}],["linesseries",{"2":{"706":1}}],["linesiterable",{"2":{"143":2}}],["lines",{"2":{"135":1,"141":3,"143":3,"706":1,"763":1,"777":1,"792":1,"793":1,"798":1,"805":1}}],["linked",{"2":{"822":1}}],["linkedlist",{"2":{"256":1}}],["link>",{"2":{"15":1}}],["link",{"2":{"15":3,"61":1,"72":1,"370":1,"650":1,"654":2,"819":1,"859":1}}],["listcomponent",{"2":{"706":1}}],["liststore",{"2":{"646":1,"647":1,"650":3}}],["listening",{"2":{"692":1}}],["listener",{"2":{"946":1,"951":1}}],["listeneraction",{"2":{"646":1}}],["listeners",{"2":{"302":6,"315":5}}],["listen",{"2":{"139":1}}],["list",{"2":{"95":1,"184":1,"238":1,"256":1,"288":2,"414":1,"429":1,"647":2,"849":1,"855":1,"869":1,"870":1,"948":2,"991":1,"1036":1}}],["libs",{"2":{"734":1,"763":2}}],["libraries",{"0":{"340":1},"2":{"753":1}}],["library",{"0":{"628":1},"2":{"321":2,"628":3,"629":1,"631":2,"860":1}}],["lib",{"2":{"14":1,"15":2,"203":1,"204":3,"214":1,"215":1,"216":1,"288":1,"333":4,"706":3,"763":1,"887":3,"939":2}}],["媒体下载",{"2":{"851":1}}],["媒体",{"2":{"14":1}}],["用这么多空闲时间来专注地完成一件正确的事情是没有大问题的",{"2":{"1026":1}}],["用时髦的说法也叫",{"2":{"1019":1}}],["用架构引入的合理复杂度",{"2":{"971":1}}],["用写",{"2":{"964":1}}],["用拼积木的方式写",{"2":{"964":1}}],["用嵌套减少重复选择器",{"2":{"958":1}}],["用一套",{"2":{"901":1}}],["用一句话总结",{"2":{"585":1}}],["用途",{"2":{"880":1,"931":1}}],["用例",{"2":{"810":1}}],["用浏览器的",{"2":{"784":1}}],["用技能",{"2":{"588":1}}],["用命令",{"2":{"588":1}}],["用快捷键呼出",{"2":{"564":1}}],["用自然语言描述要改什么",{"2":{"564":1}}],["用自然语言描述界面",{"2":{"561":1}}],["用自然语言描述需求",{"2":{"559":1}}],["用自然语言",{"0":{"560":1},"1":{"561":1,"562":1}}],["用各种",{"2":{"553":1}}],["用标准化工具类拼装",{"2":{"967":1}}],["用标准的",{"2":{"552":1}}],["用标志位防止",{"2":{"150":1}}],["用优雅的工程设计兜底",{"2":{"543":1}}],["用量陷阱",{"2":{"523":1}}],["用免费额度把",{"2":{"523":1}}],["用来帮助开发者快速理解项目架构",{"2":{"636":1}}],["用来释放你的带宽",{"2":{"462":1}}],["用来区分结构相同但语义不同的类型",{"2":{"247":1}}],["用现成的",{"2":{"459":1}}],["用渐进式披露管理知识",{"2":{"439":1}}],["用脚本封装能力",{"2":{"439":1}}],["用因果链连接变量",{"2":{"385":1}}],["用精湛的手艺和智能化的工具为他们扫除障碍",{"2":{"381":1}}],["用最低的执行成本",{"2":{"605":1}}],["用最传统的工程理性进行最严苛的审判",{"2":{"534":1}}],["用最小的产品闭环解决具体人群的痛点",{"2":{"465":1}}],["用最简单的技术栈",{"2":{"365":1}}],["用最少的代码实现核心逻辑",{"2":{"186":1}}],["用不妥协的真诚去深入探索",{"2":{"362":1}}],["用有意义的名称",{"2":{"263":1}}],["用简短的单字母",{"2":{"263":1}}],["用交叉类型组合独立的能力",{"2":{"250":1}}],["用可辨识联合处理",{"2":{"250":1}}],["用1个功能",{"2":{"194":1}}],["用清晰的思维驾驭强大的工具",{"2":{"180":1}}],["用换行连接",{"2":{"143":1}}],["用极致的静态换极致的性能",{"2":{"54":1}}],["用了",{"2":{"54":1}}],["用",{"0":{"378":2},"2":{"20":1,"74":1,"75":1,"141":1,"201":1,"250":2,"438":2,"440":3,"462":1,"465":1,"466":1,"515":1,"523":1,"552":1,"568":1,"577":1,"592":1,"597":1,"701":1,"742":1}}],["用静态资源的高性能",{"2":{"20":1}}],["用于锻炼上半身",{"2":{"1044":1}}],["用于存储记录一些指标数据",{"2":{"1044":1}}],["用于测量体重",{"2":{"1044":1}}],["用于收集周末的日常事务",{"2":{"1037":1}}],["用于收集工作日的日常事务",{"2":{"1037":1}}],["用于指导自己的阅读实践",{"2":{"1031":1}}],["用于匹配用户意图",{"2":{"994":1}}],["用于技能流程图",{"2":{"980":1}}],["用于技能措辞设计",{"2":{"980":1}}],["用于与",{"2":{"951":1}}],["用于生成",{"2":{"939":1}}],["用于控制重试策略",{"2":{"898":1}}],["用于控制类型定义的来源",{"2":{"203":1}}],["用于手动行布局",{"2":{"793":1}}],["用于联动",{"2":{"719":1}}],["用于跨系列计算",{"2":{"712":1}}],["用于全局事件分发和资源管理",{"2":{"684":1}}],["用于选中和变换其他节点",{"2":{"680":1}}],["用于识别",{"2":{"661":1}}],["用于调用",{"2":{"581":1}}],["用于调试",{"2":{"203":1}}],["用于检索古诗词典故与创作灵感",{"2":{"501":1}}],["用于获取相关背景信息",{"2":{"501":1}}],["用于查找相似题型",{"2":{"494":1}}],["用于后续的",{"2":{"489":1}}],["用于恢复会话历史",{"2":{"489":1}}],["用于处理即时性的问答任务",{"2":{"483":1}}],["用于处理跨块边界的行分割",{"2":{"141":1}}],["用于加载指定会话的历史记录",{"2":{"482":1}}],["用于直接与",{"2":{"482":1}}],["用于构建具有工具使用能力的",{"2":{"478":1}}],["用于构建单页应用",{"2":{"341":2}}],["用于将人类的",{"2":{"454":1}}],["用于统一输出规范",{"2":{"453":1}}],["用于快速确认该技能是否能解决当前意图",{"2":{"443":1}}],["用于更优雅地扩展",{"2":{"441":1}}],["用于管理应用的全局状态",{"2":{"341":1}}],["用于渲染网页内容",{"2":{"338":1}}],["用于在准备好的文本中精确定位",{"2":{"793":1}}],["用于在浏览器中发起",{"2":{"342":1}}],["用于在服务器端执行",{"2":{"338":1}}],["用于在",{"2":{"338":1}}],["用于描述网页的结构和内容",{"2":{"338":1}}],["用于解耦模块间的通信",{"2":{"302":1}}],["用于浏览器端的异步加载规范",{"2":{"298":1}}],["用于确保泛型参数只能是另一个泛型参数的属性名",{"2":{"268":1}}],["用于限制泛型参数必须是特定的基本类型或其子类型",{"2":{"265":1}}],["用于限制泛型参数的类型范围",{"2":{"264":1}}],["用于配置",{"2":{"482":1}}],["用于配置该子项目的编译选项",{"2":{"205":1}}],["用于配合",{"2":{"203":1}}],["用于创建",{"2":{"203":2}}],["用于为库提供类型定义",{"2":{"203":1}}],["用于实际编码",{"2":{"169":1}}],["用于验证响应是否符合预期",{"2":{"898":1}}],["用于验证响应状态和",{"2":{"144":1}}],["用于验证服务端返回的",{"2":{"150":1}}],["用于订阅服务端的任务执行进度流事件",{"2":{"150":1}}],["用于主动取消请求",{"2":{"144":1,"150":2}}],["用于逐块读取响应数据",{"2":{"141":1}}],["用于断线重连",{"2":{"139":1}}],["用于缓存标识",{"2":{"91":1}}],["用于发送",{"2":{"85":1}}],["用于",{"2":{"14":1,"203":3,"661":1,"706":2,"858":1,"954":1,"962":1,"994":1}}],["用户报告一个",{"2":{"992":1}}],["用户向",{"2":{"991":1}}],["用户审查规格",{"2":{"987":1}}],["用户显式指令",{"2":{"986":1}}],["用户消息",{"2":{"982":1}}],["用户手动加载",{"2":{"976":1}}],["用户填写偏好后提交",{"2":{"949":1}}],["用户提出",{"2":{"949":1}}],["用户提供的定价点集中在价格歧视",{"2":{"397":1}}],["用户提供的素材中",{"2":{"391":1}}],["用户看到",{"2":{"935":1}}],["用户与",{"2":{"934":1}}],["用户发送消息",{"2":{"923":1}}],["用户发起一次带工具的文本生成请求",{"2":{"922":1}}],["用户回调函数",{"2":{"889":1}}],["用户执行",{"2":{"862":1,"863":1}}],["用户目录",{"2":{"859":2}}],["用户适配器兼容性检查",{"2":{"854":1}}],["用户创建",{"2":{"831":1}}],["用户需要在不知道宽度的情况下",{"2":{"803":1}}],["用户需要将文本精确分配到各行",{"2":{"802":1}}],["用户接口",{"2":{"770":1}}],["用户接口层",{"2":{"675":1}}],["用户按需引入",{"2":{"761":1}}],["用户拖拽一个形状从起点移动到终点",{"2":{"690":1}}],["用户拖拽组件到画布",{"2":{"656":1}}],["用户鼠标点击一个矩形",{"2":{"688":1}}],["用户点击一个",{"0":{"688":1}}],["用户通过",{"2":{"679":1,"708":1,"792":1}}],["用户通过浏览器输入",{"2":{"21":1}}],["用户行为埋点追踪",{"2":{"662":1}}],["用户交互触发动作",{"2":{"659":1}}],["用户请求渲染一个页面",{"2":{"658":1}}],["用户请求一个",{"2":{"53":1}}],["用户调用",{"2":{"649":1,"689":1,"746":1,"801":1,"830":1}}],["用户调研",{"2":{"366":1}}],["用户管理",{"2":{"640":1}}],["用户管理功能",{"2":{"274":1}}],["用户画像与技术选型对比",{"2":{"636":1}}],["用户运营",{"2":{"617":1}}],["用户如何增长",{"2":{"556":1}}],["用户感知",{"2":{"556":1}}],["用户输入研究主题",{"2":{"471":1}}],["用户情绪",{"2":{"465":1}}],["用户洞察",{"2":{"462":1}}],["用户越多",{"2":{"386":1}}],["用户下一秒的皱眉",{"2":{"376":1}}],["用户说",{"2":{"366":2,"447":1,"449":1}}],["用户可能根本看不懂那些颜色代表什么",{"2":{"366":1}}],["用户不签到的损失是什么",{"2":{"366":1}}],["用户不会像你一样熟悉产品",{"2":{"366":1}}],["用户不必等最慢的组件完成就能看到内容",{"2":{"74":1}}],["用户要什么就给什么",{"2":{"366":1}}],["用户要什么给什么",{"2":{"366":1}}],["用户抱怨",{"2":{"366":2}}],["用户想要什么功能",{"2":{"366":1}}],["用户想要什么",{"2":{"366":1}}],["用户很痛苦",{"2":{"366":1}}],["用户价值",{"2":{"365":1}}],["用户价值洞察",{"2":{"363":1}}],["用户只需抛出一个宏大的目标",{"2":{"355":1}}],["用户得到答案后",{"2":{"350":1}}],["用户升级需谨慎",{"2":{"331":1}}],["用户子应用",{"2":{"290":1}}],["用户子应用更新用户信息",{"2":{"289":1}}],["用户子应用订阅事件",{"2":{"289":1}}],["用户子应用暴露用户信息和登录组件",{"2":{"288":1}}],["用户子应用配置",{"2":{"288":1}}],["用户上下文",{"2":{"280":2}}],["用户界面",{"2":{"280":1}}],["用户界面层",{"2":{"279":2,"280":1}}],["用户模块",{"2":{"275":1}}],["用户状态未激活",{"2":{"199":1}}],["用户id",{"2":{"196":1}}],["用户个人资料页",{"2":{"184":1}}],["用户体验要求较高",{"2":{"167":1}}],["用户就要多等数秒才能看到结果",{"2":{"160":1}}],["用户在聊天界面中提出请求",{"2":{"934":1}}],["用户在页面上初始化一个折线图",{"2":{"717":1}}],["用户在哪里会困惑",{"2":{"460":1}}],["用户在地铁中使用手机生图",{"2":{"127":1}}],["用户在极短时间内",{"2":{"74":1}}],["用户将面对长达数秒的白屏等待",{"2":{"124":1}}],["用户注册接口",{"2":{"196":1}}],["用户注册等事件触发后",{"2":{"120":1}}],["用户注册",{"2":{"119":1,"201":1}}],["用户",{"2":{"117":1,"278":2,"291":1,"494":1,"704":1,"705":1,"706":1,"731":1,"843":1,"849":1,"917":1,"949":1}}],["用户的优质提问和搜索会话不仅对自己有价值",{"2":{"355":1}}],["用户的每一个",{"2":{"101":1}}],["用户的请求就近接入",{"2":{"52":1}}],["用户依然经历整页白屏",{"2":{"77":1}}],["用户立刻看到页面骨架",{"2":{"75":1}}],["用户会看到列表",{"2":{"74":1}}],["用户页专属布局",{"2":{"67":1}}],["用户仪表盘",{"2":{"63":1}}],["用户无需等待所有内容就绪就能看到完整页面结构",{"2":{"39":1}}],["用户访问任何一个页面",{"2":{"51":1}}],["用户访问直接返回缓存的静态",{"2":{"35":1}}],["用户访问",{"2":{"31":1}}],["用户访问时后端计算",{"2":{"3":1}}],["用户访问时",{"2":{"2":1,"30":1}}],["用户登录",{"2":{"16":1}}],["用户评论的博客网站",{"2":{"10":1}}],["用户认证",{"2":{"8":2}}],["账号+密码",{"2":{"181":1}}],["账号",{"2":{"14":1,"16":1,"17":1}}],["注水",{"2":{"959":1}}],["注释解析",{"2":{"735":1}}],["注释",{"2":{"578":1}}],["注重养身修身",{"2":{"1022":1}}],["注重内容",{"2":{"1003":1}}],["注重在应用层设计埋点",{"2":{"541":1}}],["注重阅读体验的博客站点",{"2":{"342":1}}],["注意事项",{"2":{"435":1,"572":1,"573":1}}],["注意力涣散",{"2":{"352":1}}],["注意",{"2":{"164":1,"234":1,"237":1,"239":1,"366":1,"489":1,"523":1,"559":1,"581":1,"898":1,"962":1}}],["注",{"2":{"41":1,"112":1,"510":1}}],["注册模型",{"2":{"919":1}}],["注册命令",{"2":{"859":1}}],["注册更新检查钩子",{"2":{"854":1}}],["注册到主循环",{"2":{"830":1}}],["注册到",{"2":{"826":1,"856":1}}],["注册的修饰器",{"2":{"744":1}}],["注册中心",{"2":{"744":1}}],["注册器",{"2":{"741":1}}],["注册器模式",{"2":{"734":2,"735":1}}],["注册形状修饰器",{"2":{"737":1}}],["注册视觉处理函数",{"2":{"715":1}}],["注册扩展到全局注册表",{"2":{"708":1}}],["注册机制",{"2":{"677":1}}],["注册名称",{"2":{"661":1}}],["注册表和",{"2":{"944":1}}],["注册表",{"2":{"652":1}}],["注册即可快速接入",{"2":{"523":1}}],["注册页面的",{"2":{"366":1}}],["注册接口返回值",{"2":{"196":1,"197":1}}],["注册",{"2":{"14":1,"16":1,"677":2,"737":2,"742":1,"744":1,"939":1}}],["注入到",{"2":{"994":1}}],["注入到属性系统中",{"2":{"742":1}}],["注入上下文",{"2":{"982":1}}],["注入工具",{"2":{"922":1}}],["注入各种反检测脚本",{"2":{"858":1}}],["注入表达式到属性",{"2":{"742":1}}],["注入表达式求值器到属性系统",{"2":{"742":1}}],["注入和",{"2":{"652":1}}],["注入风险检测",{"2":{"586":1}}],["注入了",{"2":{"431":1}}],["注入不同的",{"2":{"415":1}}],["注入规格",{"2":{"171":1}}],["注入",{"2":{"3":1,"647":1,"915":1,"939":1,"946":1,"976":1}}],["igenericbinder",{"2":{"951":1}}],["iglobaldata",{"2":{"749":3}}],["ijsanimation",{"2":{"834":1}}],["ibackend",{"2":{"777":1}}],["ibaseelement",{"2":{"749":18}}],["ibl",{"2":{"758":1,"763":1,"778":1}}],["iengine",{"2":{"834":1}}],["ies",{"2":{"763":1}}],["iexpressionmanager",{"2":{"749":1}}],["iexpressionplugin",{"2":{"749":1}}],["ieventhandler",{"2":{"281":1}}],["ikeyframe",{"2":{"749":2}}],["ipage",{"2":{"848":1,"849":1,"850":1,"851":2,"856":2,"858":2,"865":4}}],["iproperty",{"2":{"749":1}}],["iprojectinterface",{"2":{"749":1}}],["iphone",{"2":{"289":1}}],["ianimationconfig",{"2":{"749":1}}],["ianimationdata",{"2":{"749":2}}],["ianimationitem",{"2":{"749":3}}],["ilayerdata",{"2":{"749":4}}],["i18n",{"2":{"706":3}}],["iron",{"2":{"989":2}}],["ironclaw",{"2":{"419":1}}],["irregular",{"2":{"819":2,"821":2}}],["irenderer",{"2":{"749":5,"777":1}}],["irendererconfig",{"2":{"749":1}}],["irendererconstructor",{"2":{"749":3}}],["irendererregistry",{"2":{"749":1}}],["irect",{"2":{"677":1,"692":3,"693":3}}],["iirendererstore>",{"2":{"663":1}}],["iirendererstore",{"2":{"661":1,"663":2}}],["iife",{"2":{"298":1,"303":1,"306":1,"815":1}}],["i`",{"2":{"451":1}}],["iobject3d",{"2":{"777":1}}],["io",{"2":{"647":1}}],["ioc",{"2":{"344":1,"702":1,"711":1}}],["ios",{"2":{"342":2,"728":1,"729":1,"933":1}}],["i++",{"2":{"330":1}}],["i",{"2":{"330":3,"666":1,"749":1,"840":1,"988":1}}],["iclock",{"2":{"834":3}}],["icalculator",{"2":{"319":3}}],["icons",{"2":{"274":1,"646":1,"647":4}}],["icon",{"2":{"274":1,"499":2}}],["isprimary>主要按钮",{"2":{"959":1}}],["isprimary",{"2":{"959":3,"960":2,"961":3,"962":2,"964":1}}],["ispaused",{"2":{"749":1}}],["isurfacemodel",{"2":{"951":1}}],["isvalid",{"2":{"946":1}}],["isloopfinished",{"2":{"915":2,"918":1}}],["isloaded",{"2":{"749":1}}],["isloading",{"2":{"78":1,"85":2,"87":2,"91":3}}],["isbrowser",{"2":{"818":1}}],["iswordlike",{"2":{"805":1}}],["ishapemodifierconstructor",{"2":{"749":2}}],["ishapemodifierregistry",{"2":{"749":1}}],["ishapemodifiershape",{"2":{"749":2}}],["ishapemodifier",{"2":{"749":3}}],["issubframeenabled",{"2":{"749":1}}],["issue",{"2":{"567":1,"568":5,"570":1,"939":2,"980":2}}],["isssr",{"2":{"719":1}}],["istorenode",{"2":{"663":2}}],["istaskdone",{"2":{"163":2}}],["isframe",{"2":{"749":2}}],["isfrozen",{"2":{"740":1}}],["isformitem",{"2":{"661":1}}],["isfetching",{"2":{"91":1}}],["iscjk",{"2":{"789":1}}],["iscurrenturl",{"2":{"662":1}}],["iscancel",{"2":{"649":1,"653":1,"662":1}}],["iscopedcontext",{"2":{"646":1,"661":1}}],["isoverlapped",{"2":{"834":1}}],["isoverridden",{"2":{"834":1}}],["isolatescope",{"2":{"661":1}}],["isolatedmodules",{"2":{"204":1,"322":1}}],["isomorphic",{"2":{"344":2}}],["ismobile",{"2":{"313":1,"662":1}}],["isdisposed",{"2":{"719":1}}],["isdeleted",{"2":{"248":2}}],["isdog",{"2":{"231":2}}],["isenabled",{"2":{"749":1}}],["iservicestore",{"2":{"663":1}}],["iserror",{"2":{"87":1,"91":1}}],["isempty",{"2":{"194":1}}],["isinstance",{"2":{"187":2}}],["isactive",{"2":{"95":1}}],["is",{"2":{"85":1,"231":2,"261":1,"489":1,"947":1,"986":1,"1008":1}}],["isrunning",{"2":{"692":1}}],["isr",{"0":{"34":1,"36":1,"41":1},"1":{"35":1,"36":1,"37":1,"38":1},"2":{"6":1,"9":1,"19":1,"20":1,"21":1,"34":1,"35":1,"36":2,"38":1,"39":1,"41":2,"45":3,"46":2,"47":5,"54":1,"55":3,"59":1,"63":2,"67":1,"70":1,"80":2,"344":4}}],["imessageprocessor",{"2":{"951":1}}],["imaterial",{"2":{"777":1}}],["imagemodelv4",{"2":{"913":1,"925":1}}],["imagemodel",{"2":{"907":2,"913":1,"925":1}}],["imageloader",{"2":{"763":1}}],["imageutils",{"2":{"763":1}}],["imagepreloaderworkeroverride",{"2":{"735":1}}],["imagepreloader",{"2":{"735":1,"738":1}}],["imageelement",{"2":{"734":1,"735":1}}],["imageconfig>",{"2":{"693":1}}],["imagedata",{"2":{"677":1,"680":1,"693":4}}],["imagesmoothingenabled",{"2":{"692":1}}],["images",{"2":{"72":2,"274":1,"750":1,"763":1}}],["image",{"2":{"72":2,"163":1,"677":1,"679":1,"680":1,"693":1,"763":1,"907":1,"915":1,"916":1,"939":1}}],["immediate",{"2":{"673":1}}],["implementer",{"2":{"980":1,"988":2}}],["implementationplan",{"2":{"994":1}}],["implementation",{"2":{"319":1,"761":1,"907":1,"979":1}}],["implements",{"2":{"267":1,"281":3,"319":1,"916":1}}],["impl",{"2":{"280":1,"281":1,"706":1,"906":1}}],["important>",{"2":{"985":1,"986":1}}],["imports",{"2":{"344":1,"737":1}}],["import",{"0":{"313":1},"2":{"15":4,"16":2,"69":1,"85":1,"87":2,"94":3,"95":1,"144":1,"153":3,"154":2,"163":1,"203":4,"288":9,"289":6,"295":1,"297":2,"300":1,"301":1,"302":1,"303":1,"307":2,"308":1,"310":3,"311":2,"312":1,"313":5,"314":5,"315":12,"318":3,"319":1,"320":1,"324":1,"325":2,"333":6,"334":1,"335":2,"337":1,"481":1,"483":1,"490":2,"725":4,"818":1,"841":5,"902":3,"912":2,"959":1,"960":1,"964":2}}],["itimeline",{"2":{"834":1}}],["itimer",{"2":{"834":3}}],["itween",{"2":{"834":1}}],["ito",{"2":{"790":1}}],["iterationcurrenttime",{"2":{"834":1}}],["iterationcount",{"2":{"825":1,"834":1}}],["iterationprogress",{"2":{"834":1}}],["iterationtime",{"2":{"827":1,"831":1,"834":1}}],["iterationduration",{"2":{"825":1,"834":1}}],["iterable",{"2":{"203":1,"204":1,"214":1,"216":1}}],["itemindex",{"2":{"799":1,"805":1}}],["itemopts>",{"2":{"719":2}}],["item",{"2":{"14":3,"259":5,"261":3,"266":2,"267":2,"280":1,"281":9,"288":1,"647":1,"692":1}}],["itemstyle",{"2":{"706":1,"715":3}}],["items",{"2":{"14":4,"259":3,"261":5,"267":2,"281":7,"768":1,"799":1,"806":1,"952":3,"964":1}}],["it",{"2":{"50":1,"53":1,"75":1,"85":1}}],["iformstore",{"2":{"663":1}}],["iframe",{"2":{"287":2,"692":3,"933":1,"939":1}}],["if",{"2":{"15":1,"16":1,"85":2,"87":1,"88":1,"89":1,"91":2,"96":1,"141":2,"143":4,"144":3,"146":2,"147":3,"148":2,"150":4,"154":1,"160":2,"163":1,"164":2,"187":1,"231":5,"232":1,"238":2,"246":1,"249":2,"259":1,"260":1,"261":1,"262":1,"281":6,"289":3,"301":1,"302":2,"306":2,"313":1,"315":2,"330":1,"482":1,"483":2,"484":1,"486":1,"488":3,"489":1,"655":3,"685":2,"686":1,"770":1,"879":3}}],["inoutquint",{"2":{"839":1}}],["inout",{"2":{"819":1}}],["inode",{"2":{"777":1}}],["inertia惯性",{"2":{"819":1}}],["inertia",{"2":{"818":1}}],["inbrowser",{"2":{"750":1}}],["inbox",{"2":{"629":1,"631":2}}],["ind",{"2":{"749":1}}],["indices",{"2":{"713":1}}],["indexbuffer",{"2":{"766":1}}],["indexof",{"2":{"143":1}}],["index",{"0":{"750":1},"2":{"53":1,"203":1,"274":5,"290":3,"312":2,"334":1,"335":2,"481":1,"647":6,"649":1,"677":1,"679":1,"728":1,"735":3,"749":2,"750":2,"763":1,"790":3,"819":23,"821":18,"836":2,"851":3,"865":1,"882":2,"883":1,"887":3,"889":1,"912":1,"939":10,"962":1}}],["inner",{"2":{"939":1}}],["innerstore",{"2":{"706":1}}],["innerheight",{"2":{"696":1,"782":2}}],["innerwidth",{"2":{"696":1,"782":2}}],["inlinecatalog",{"2":{"948":1,"952":1}}],["inlinecatalogs",{"2":{"948":1,"952":1}}],["inlineedit",{"2":{"647":1,"656":2}}],["inline",{"0":{"799":1},"2":{"646":1,"788":3,"789":1,"790":3,"799":1,"805":1,"806":1,"810":1,"948":3,"964":1}}],["invokeskill",{"2":{"986":1}}],["invoker",{"2":{"939":1}}],["invert",{"2":{"676":1,"677":1,"679":1,"819":1}}],["inventoryservice",{"2":{"281":3}}],["invalidmoneyerror",{"2":{"281":2}}],["invalid",{"2":{"268":2}}],["invalidation",{"2":{"98":1}}],["invalidatequeries",{"2":{"92":1,"96":1,"98":1,"101":1}}],["injection",{"2":{"985":1}}],["injectrepository",{"2":{"281":1}}],["injectable",{"2":{"281":1}}],["inference",{"2":{"939":1}}],["infertoolsetcontext",{"2":{"926":2}}],["infercompleteoutput",{"2":{"926":2}}],["inframes",{"2":{"749":1}}],["infra",{"2":{"343":1}}],["infrastructure",{"2":{"190":1,"280":8,"281":1,"734":1,"817":1,"818":1}}],["info",{"2":{"87":1,"662":1,"762":1,"763":1,"777":3,"778":1,"866":1}}],["introduction",{"2":{"939":1}}],["int8array",{"2":{"793":1}}],["intl",{"2":{"785":1,"789":2,"790":1,"792":3,"795":2}}],["int4",{"2":{"551":1}}],["integration",{"2":{"980":1}}],["integration|",{"2":{"938":1}}],["integer",{"2":{"866":3}}],["intensity",{"2":{"769":1}}],["intellectual",{"2":{"360":1}}],["intercept",{"2":{"845":1,"849":1,"856":1,"859":1,"865":2}}],["interceptor",{"2":{"275":4,"851":1}}],["interceptors",{"2":{"274":1,"275":2}}],["inter",{"2":{"809":1}}],["intersection",{"2":{"777":1}}],["intersects",{"2":{"777":1}}],["interpolants",{"2":{"763":1}}],["interpolant",{"2":{"763":1,"772":1}}],["interpreter",{"2":{"493":1,"916":1,"927":2}}],["interleavedbufferattribute",{"2":{"763":1}}],["interleavedbuffer",{"2":{"763":1}}],["interop",{"2":{"333":3}}],["internalrender",{"2":{"827":1,"834":2}}],["internal",{"2":{"320":1,"429":1}}],["internalcode",{"2":{"196":2}}],["interactionmutex",{"2":{"706":1}}],["interaction",{"2":{"412":1,"676":1}}],["interactive",{"2":{"203":1,"763":1}}],["interact",{"2":{"231":1}}],["interval",{"2":{"139":2,"153":4,"154":1,"163":3,"706":1}}],["interfacesprovider",{"2":{"735":1,"742":2}}],["interfaces",{"0":{"719":1,"777":1},"2":{"153":1,"280":3}}],["interface",{"0":{"720":1},"2":{"16":1,"153":2,"160":1,"164":1,"179":1,"229":1,"230":3,"231":2,"233":1,"236":1,"237":2,"239":1,"240":3,"242":1,"243":2,"249":4,"259":1,"260":2,"262":2,"266":2,"267":2,"280":1,"281":2,"288":1,"289":1,"318":1,"319":1,"661":3,"662":1,"663":3,"692":8,"714":1,"719":4,"720":1,"742":1,"749":12,"777":10,"834":6,"865":5,"898":2,"925":5,"933":1,"951":4,"964":1,"994":13}}],["int",{"2":{"187":2,"947":1}}],["increasequantity",{"2":{"281":1}}],["incremental",{"2":{"34":1,"63":1,"203":2,"212":1}}],["includelayers",{"2":{"749":1}}],["includepartialmessages",{"2":{"490":1}}],["include",{"2":{"203":2,"204":3,"213":1,"214":1,"215":1,"216":1}}],["includestatic",{"2":{"865":1}}],["includes",{"2":{"150":1,"677":1}}],["inactive",{"2":{"92":1,"318":1}}],["inputs",{"2":{"964":2}}],["inputformat",{"2":{"925":1}}],["input",{"2":{"88":1,"262":1,"274":1,"312":3,"449":1,"489":3,"646":1,"662":1,"668":2,"744":1,"898":2,"902":1,"925":2}}],["initelement",{"2":{"749":1}}],["initexpressions",{"2":{"742":1,"749":1}}],["inititems",{"2":{"749":1}}],["initiate",{"2":{"375":1}}],["initialsegment",{"2":{"750":1}}],["initialstate",{"2":{"289":2}}],["initialization",{"2":{"506":1}}],["initialitems",{"2":{"261":3}}],["initialisopen=",{"2":{"94":1}}],["initial",{"2":{"17":1}}],["initmodifierproperties",{"2":{"744":1,"749":1}}],["initloading",{"2":{"663":1}}],["init",{"2":{"17":1,"202":1,"486":1,"574":1,"583":2,"704":1,"705":1,"708":2,"724":1,"777":1,"825":1,"834":1,"898":2,"939":4,"947":1}}],["instruction",{"2":{"986":1}}],["instructions",{"2":{"948":1}}],["instead",{"2":{"790":1}}],["instancedmesh",{"2":{"763":1,"766":1,"769":1}}],["instancedinterleavedbuffer",{"2":{"763":1}}],["instancedbufferattribute",{"2":{"763":1}}],["instancedbuffergeometry",{"2":{"763":1}}],["instances",{"2":{"683":1}}],["instance",{"2":{"301":4,"661":1,"705":1,"709":2,"942":1}}],["instanceof",{"2":{"144":1,"146":1,"148":1,"150":1,"231":2,"879":1}}],["installinterceptor",{"2":{"865":1}}],["installplugin",{"2":{"750":1}}],["installcanvasrenderer",{"2":{"706":1}}],["install",{"2":{"13":1,"221":2,"480":1,"567":1,"695":2,"706":24,"711":1,"720":1,"722":1,"753":1,"780":1,"808":1,"809":1,"838":1,"869":1,"930":1,"980":1,"998":3}}],["inspector",{"2":{"763":1,"939":3}}],["inside",{"2":{"706":1}}],["insight",{"0":{"540":1,"558":1},"1":{"541":1,"542":1,"543":1},"2":{"363":1,"540":1,"553":1,"558":1,"632":1,"636":1,"637":1,"1000":1,"1001":1,"1002":2,"1003":1,"1004":1}}],["inserttext",{"2":{"865":1}}],["insert",{"2":{"16":1}}],["in",{"0":{"959":1},"2":{"14":1,"85":1,"231":3,"262":1,"286":1,"291":1,"392":1,"398":1,"410":1,"484":1,"550":1,"642":1,"819":1,"865":1,"866":6,"939":4,"947":3,"957":1,"959":3,"965":2,"980":1,"994":1}}],["idatamodel",{"2":{"951":1}}],["idx",{"2":{"713":1,"719":2}}],["identifier",{"2":{"655":2}}],["identity",{"2":{"244":1,"254":4,"255":1,"258":4,"263":2,"851":1}}],["ide",{"0":{"563":1},"1":{"564":1,"565":1},"2":{"216":1,"310":1,"319":1,"559":1,"561":1,"564":4,"565":3,"568":1,"673":1,"964":1}}],["idea",{"2":{"203":2,"557":1,"1001":1}}],["idgeneratortype",{"2":{"196":2}}],["id>",{"2":{"152":1}}],["id=35",{"2":{"735":1}}],["id=23",{"2":{"735":1}}],["id=20",{"2":{"735":1}}],["id=22",{"2":{"735":1}}],["id=24",{"2":{"735":1}}],["id=28",{"2":{"735":1}}],["id=29",{"2":{"735":1}}],["id=21",{"2":{"735":1}}],["id=25",{"2":{"735":1}}],["id=",{"2":{"23":1,"696":1}}],["id=你的spaceid",{"2":{"14":1}}],["id",{"0":{"486":1},"2":{"14":6,"15":2,"16":8,"67":1,"74":1,"78":1,"87":4,"89":3,"96":4,"109":2,"110":2,"126":3,"127":2,"135":1,"136":4,"138":1,"139":3,"141":1,"143":7,"144":1,"150":2,"152":1,"153":7,"160":1,"163":2,"164":1,"199":1,"233":5,"236":2,"239":3,"240":1,"246":2,"247":1,"248":2,"259":7,"260":3,"261":1,"263":1,"266":5,"269":5,"281":10,"288":2,"289":3,"318":2,"327":2,"328":6,"330":1,"478":1,"482":1,"486":5,"489":3,"491":1,"640":2,"662":1,"663":4,"692":2,"719":3,"777":2,"834":2,"860":1,"866":2,"889":1,"892":3,"898":3,"899":2,"910":1,"915":1,"919":2,"925":1,"935":1,"939":1,"942":2,"946":1,"947":1,"948":2,"951":2,"952":1,"994":1}}],["安装指引",{"2":{"980":1}}],["安装后脚本",{"2":{"851":1}}],["安装与使用",{"0":{"809":1}}],["安装与运行",{"0":{"666":1,"695":1,"754":1,"781":1,"869":1,"930":1,"955":1}}],["安装所有图表",{"2":{"708":1}}],["安装所有",{"2":{"706":1}}],["安装",{"0":{"838":1,"998":1},"2":{"695":1,"753":1,"844":1}}],["安装项目依赖",{"2":{"666":1}}],["安装对应工具",{"2":{"564":1}}],["安装缺失的依赖包",{"2":{"414":1}}],["安装依赖",{"0":{"221":1,"480":1},"2":{"13":1,"561":1,"583":1,"722":1,"780":1,"808":1,"840":1,"930":1}}],["安排好日常的专注时间",{"2":{"379":1}}],["安全封装重度覆写逻辑与深层嵌套",{"2":{"965":1}}],["安全模型的基石",{"2":{"948":1}}],["安全架构的核心",{"2":{"860":1}}],["安全的会话复用",{"2":{"845":1,"848":1}}],["安全的登录状态复用",{"2":{"843":1}}],["安全的对象属性访问器",{"2":{"268":1}}],["安全策略",{"2":{"790":1}}],["安全政策",{"2":{"763":1,"882":1}}],["安全沙箱执行",{"2":{"641":1}}],["安全优先",{"2":{"597":1,"935":1}}],["安全审查",{"2":{"586":1}}],["安全审查技能",{"2":{"586":2}}],["安全审计等闭环工作",{"2":{"438":1}}],["安全相关要求",{"2":{"575":1}}],["安全要求",{"2":{"575":1}}],["安全地桥接",{"2":{"846":1}}],["安全地读取多源上下文",{"2":{"548":1}}],["安全地从联合中移除成员",{"2":{"244":1}}],["安全引用",{"2":{"208":1}}],["安全",{"2":{"201":1,"373":1,"548":1,"586":1,"587":1}}],["安全验证",{"2":{"121":1}}],["安全高效",{"2":{"59":1}}],["安全防护",{"2":{"3":1}}],["安全性是核心需求",{"2":{"200":1}}],["安全性",{"2":{"3":1,"200":1,"494":1,"591":1,"642":1,"936":1,"988":1}}],["e5e7eb",{"2":{"958":1,"959":1,"960":1,"961":1}}],["epsilon",{"2":{"792":1}}],["eun",{"2":{"790":1}}],["euler",{"2":{"763":1,"769":1,"777":1,"778":1}}],["eidgah",{"2":{"790":1}}],["either",{"0":{"246":1},"2":{"246":1}}],["e2e",{"2":{"763":1,"904":1}}],["etc",{"2":{"763":1,"851":1,"939":1,"942":1}}],["ecosystem",{"2":{"939":1}}],["ecoption",{"2":{"719":1}}],["ecbasicoption>",{"2":{"719":1}}],["eceventdefinition>",{"2":{"719":1}}],["eceventprocessor",{"2":{"706":1}}],["ecmodel",{"2":{"709":2,"712":3,"714":1,"719":1}}],["ecmascript",{"2":{"203":2,"298":1,"307":1,"324":1,"880":1}}],["ec",{"2":{"708":2,"720":1}}],["echartsextensioninstallregisters",{"2":{"720":2}}],["echartsextensioninstaller",{"2":{"720":1}}],["echartstype",{"2":{"719":1}}],["echartsinitopts",{"2":{"719":1}}],["echartsoption",{"2":{"706":1}}],["echarts",{"2":{"699":2,"704":2,"705":1,"706":7,"708":8,"709":2,"711":1,"712":1,"713":1,"714":1,"719":2,"724":4,"725":6}}],["each",{"2":{"798":2}}],["earcut三角剖分",{"2":{"763":1}}],["easefunction",{"2":{"834":1,"835":4}}],["eases",{"2":{"818":1,"819":1,"821":1}}],["easeout",{"2":{"742":1}}],["easein",{"2":{"742":1}}],["ease",{"2":{"742":1,"822":1,"827":1,"834":1,"835":2,"839":1}}],["easingfunction>",{"2":{"693":1}}],["easing",{"2":{"676":1,"686":3,"692":1,"743":1}}],["easings",{"2":{"676":1,"693":1,"817":1,"818":1,"819":1,"821":7,"841":1}}],["eager",{"2":{"288":1}}],["edd",{"0":{"550":1},"2":{"550":1}}],["editorial",{"2":{"790":2}}],["editor",{"0":{"656":1},"2":{"645":2,"646":4,"647":6,"656":7,"666":1,"763":2,"927":1,"939":3}}],["edit",{"2":{"470":1,"478":1,"482":1,"484":1,"594":1,"647":1}}],["edgesgeometry",{"2":{"763":1}}],["edge",{"2":{"342":1}}],["effort",{"2":{"556":2}}],["efficiency",{"2":{"394":1}}],["effectcomposer",{"2":{"762":1}}],["effecttypes",{"2":{"735":1}}],["effectinterface",{"2":{"735":1,"742":1}}],["effect",{"2":{"392":2,"397":2,"398":1,"735":1,"945":2}}],["effectsmanager",{"2":{"735":2}}],["effectsmanagerplaceholder",{"2":{"735":1}}],["effectscatterview",{"2":{"706":1}}],["effectscatterseries",{"2":{"706":1}}],["effectscatter",{"2":{"706":1}}],["effects",{"0":{"742":1},"2":{"171":1,"314":1,"728":2,"729":1,"735":4,"763":1}}],["esprima",{"2":{"763":1}}],["es6+",{"2":{"731":1}}],["esbuild",{"2":{"308":1,"322":1,"702":1,"706":1}}],["esm",{"2":{"272":1,"298":1,"307":3,"308":3,"309":1,"310":1,"314":2,"315":1,"316":4,"320":2,"322":1,"333":6,"337":1,"343":2,"702":1,"735":1,"751":7,"785":1,"812":1,"815":2,"819":3,"836":5,"882":2,"887":2}}],["esmoduleinterop",{"2":{"203":2,"204":2,"322":1}}],["es",{"0":{"307":1,"333":1},"2":{"203":1,"221":1,"272":2,"293":1,"298":1,"303":1,"306":1,"307":1,"308":4,"311":2,"318":1,"333":2,"735":1,"759":1,"763":2,"887":2}}],["es2017",{"2":{"880":1}}],["es2015",{"2":{"203":1,"677":1}}],["es2022",{"2":{"322":1}}],["es2020+",{"2":{"322":1}}],["es2020",{"2":{"203":4,"204":6,"214":1,"215":1}}],["esnext",{"2":{"203":4,"204":2,"677":1}}],["es5",{"2":{"203":1}}],["eslintrc",{"2":{"735":1}}],["eslint",{"0":{"219":1},"2":{"13":1,"219":1,"226":1,"735":1,"763":1,"904":2}}],["emotion",{"2":{"959":1,"965":1}}],["emojicount",{"2":{"805":1}}],["emoji",{"2":{"784":1,"786":2,"789":2,"790":4,"792":1,"793":1,"796":4,"805":2}}],["embedmany",{"2":{"907":1}}],["embed",{"2":{"907":1}}],["embeddingmodel",{"2":{"907":2,"913":1,"925":1}}],["embeddingmodelv4",{"2":{"906":1,"913":1,"925":1}}],["embedding",{"2":{"410":1,"546":1,"907":1,"916":1}}],["emboss",{"2":{"677":1,"679":1}}],["empathy",{"2":{"366":2,"556":1}}],["empty",{"2":{"261":2}}],["employeerecord",{"2":{"236":2}}],["employee",{"2":{"236":6}}],["emitted",{"2":{"798":1}}],["emitter",{"2":{"163":1,"302":3,"939":1,"944":1}}],["emit",{"2":{"289":2,"302":2,"315":3,"790":1}}],["emitdecoratormetadata",{"2":{"203":1,"204":1}}],["email",{"2":{"16":6,"184":1,"185":5,"233":3,"259":5,"266":3,"268":1,"269":4,"280":1,"318":2,"640":1,"654":2,"668":2}}],["elastic",{"2":{"819":1}}],["elapsedtime",{"2":{"163":3,"749":1}}],["ellipseconfig>",{"2":{"693":1}}],["ellipse",{"2":{"677":1,"679":1,"680":1,"693":1}}],["elon",{"2":{"511":1}}],["electron",{"2":{"843":2,"844":1,"851":2,"858":1}}],["elem",{"2":{"740":1,"743":1,"744":1,"749":4}}],["elements",{"2":{"734":4,"735":3,"737":2,"738":1,"749":1}}],["element",{"2":{"340":2,"661":1,"668":2,"734":1,"738":1,"741":1,"742":1,"749":5,"750":3,"939":2,"957":1,"961":1,"968":1,"971":1}}],["eleventy",{"2":{"6":1}}],["else",{"2":{"187":1,"231":1,"232":1,"246":1,"262":1,"281":1,"306":2,"879":2}}],["evolution",{"2":{"939":1}}],["evt",{"2":{"684":1,"692":3}}],["evaluateinframe",{"2":{"865":1}}],["evaluatewithargs",{"2":{"865":1}}],["evaluate",{"2":{"647":1,"856":1,"858":1,"865":1}}],["evaluator",{"2":{"646":2,"655":2}}],["evalutorforasync",{"2":{"647":1}}],["evalutor",{"2":{"647":1}}],["eval",{"2":{"549":1,"641":1,"642":1,"655":1,"742":2,"939":2}}],["even",{"2":{"154":1,"986":1}}],["eventdispatcher",{"2":{"763":1,"769":2}}],["eventcallback",{"2":{"719":2}}],["eventful",{"2":{"719":1}}],["eventtype",{"2":{"692":1}}],["eventtype>",{"2":{"692":3}}],["eventtrack",{"2":{"662":2}}],["eventname",{"2":{"684":1,"719":2,"994":1}}],["eventemitter",{"2":{"302":3,"682":1}}],["eventbus",{"2":{"289":10,"290":1,"315":7}}],["eventmessage",{"2":{"153":1}}],["eventstr",{"2":{"907":1}}],["eventstreamcontenttype",{"2":{"150":2,"898":1}}],["eventshandler",{"2":{"281":1}}],["eventsourcemessages",{"2":{"899":1}}],["eventsourcemessage",{"2":{"143":3,"891":1,"892":3,"898":2,"899":1}}],["eventsource",{"0":{"138":1},"2":{"110":2,"112":1,"122":1,"134":1,"135":2,"137":1,"138":9,"139":1,"140":1,"142":1,"143":1,"144":1,"155":2,"873":1,"898":2,"899":2}}],["events",{"0":{"108":1},"1":{"109":1,"110":1,"111":1,"112":1},"2":{"133":1,"156":1,"280":2,"281":1,"289":9,"676":1,"684":1,"817":1,"818":1,"819":2,"821":1,"872":1,"898":3,"939":1,"941":1,"964":1}}],["event",{"0":{"142":1,"488":1},"2":{"105":1,"106":1,"109":2,"110":1,"131":1,"134":1,"135":2,"136":5,"138":17,"139":4,"141":1,"142":2,"143":14,"144":3,"145":1,"146":1,"147":2,"149":1,"150":4,"152":4,"153":11,"155":1,"163":1,"280":6,"281":6,"289":11,"302":7,"315":9,"487":1,"488":9,"647":1,"682":1,"684":1,"692":1,"706":2,"872":1,"874":1,"877":1,"879":1,"882":1,"889":1,"891":1,"892":2,"898":5,"939":3,"942":1,"944":1,"946":1}}],["ev",{"2":{"141":2,"877":2,"891":1,"898":1}}],["ernie",{"2":{"512":3}}],["erp",{"2":{"120":1,"439":1}}],["err",{"2":{"96":1,"144":3,"146":3,"148":4,"150":4,"231":6,"313":1,"879":3,"891":1,"898":1}}],["errors",{"2":{"663":1,"851":3,"939":2}}],["errorboundary",{"2":{"647":1}}],["errorhandler",{"2":{"274":1}}],["errorresult",{"2":{"262":2}}],["error>",{"2":{"246":1}}],["error",{"2":{"66":1,"85":2,"87":9,"91":5,"94":4,"138":1,"147":3,"148":1,"150":4,"154":1,"160":4,"164":4,"229":2,"231":3,"232":1,"234":2,"238":1,"246":7,"262":3,"300":2,"313":1,"330":2,"576":1,"662":2,"663":1,"706":1,"750":1,"879":2,"925":3}}],["exec",{"2":{"915":1}}],["executing",{"2":{"979":1,"980":1,"995":2}}],["execution",{"2":{"482":1,"851":1,"855":1,"918":2,"978":1,"979":1}}],["executive",{"2":{"470":1}}],["executor",{"2":{"430":1,"849":1,"851":1}}],["executetoolcall",{"2":{"912":1,"915":1}}],["executecommand",{"2":{"855":1}}],["execute",{"0":{"428":1},"1":{"429":1,"430":1,"431":1},"2":{"414":2,"428":1,"430":1,"431":1,"432":2,"433":1,"545":1}}],["executed",{"2":{"314":8}}],["exact",{"2":{"858":1,"865":2}}],["examples",{"2":{"647":2,"666":1,"763":1,"819":1,"840":1,"908":1,"939":1,"948":1,"980":1}}],["example",{"2":{"138":1,"163":1,"259":4,"262":1,"266":2,"268":1,"269":1,"318":1,"477":1,"482":1,"862":1,"870":1,"939":2,"980":1}}],["existingaction",{"2":{"772":1}}],["existingitem",{"2":{"281":3}}],["exit",{"2":{"489":3}}],["ext",{"2":{"860":1}}],["extremely",{"2":{"986":1}}],["extrudegeometry",{"2":{"763":1}}],["extrawidth",{"2":{"790":1,"799":2,"805":1}}],["extras",{"2":{"763":1}}],["extract",{"2":{"227":1,"849":1,"851":2,"959":1}}],["external",{"2":{"851":2,"855":1}}],["externaltexture",{"2":{"763":1}}],["externaldatatransformspec",{"2":{"720":1}}],["externalities",{"2":{"399":1}}],["extended",{"2":{"980":1}}],["extend",{"2":{"962":1}}],["extendprototype",{"2":{"735":1}}],["extendsfilters",{"2":{"646":1}}],["extends",{"0":{"205":1,"209":1,"210":1,"240":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1},"2":{"203":1,"205":1,"209":3,"210":1,"213":1,"214":1,"215":1,"216":4,"226":1,"231":1,"234":4,"237":1,"240":2,"244":1,"247":1,"248":4,"262":1,"263":3,"264":1,"265":1,"266":1,"267":1,"268":1,"269":2,"270":3,"489":1,"661":2,"663":2,"692":12,"693":23,"719":2,"741":3,"750":2,"834":4,"879":2,"891":1,"898":1,"925":1,"926":5,"951":2,"964":1}}],["extensionversion",{"2":{"866":1}}],["extensionconnected",{"2":{"866":1}}],["extensionws",{"2":{"860":1}}],["extension模式",{"2":{"849":1}}],["extensionregisters",{"2":{"706":1,"711":2}}],["extensionapi",{"2":{"705":1,"706":1}}],["extensions",{"2":{"411":1,"711":1,"768":1,"817":1,"818":1,"998":1}}],["extension",{"0":{"711":1},"2":{"325":1,"706":2,"708":1,"735":1,"845":1,"846":1,"848":1,"849":2,"850":1,"851":1,"858":1,"860":4,"866":1,"939":2,"979":1,"980":1}}],["excel",{"2":{"436":2,"647":5}}],["exception",{"2":{"275":1}}],["exclude",{"2":{"203":1,"204":2,"213":1,"214":1,"215":1,"216":1,"227":1}}],["excalidraw",{"2":{"81":1}}],["explicit",{"2":{"980":1}}],["explicitresult",{"2":{"263":1}}],["explain",{"2":{"582":2}}],["exp",{"2":{"325":1}}],["expo",{"2":{"819":1}}],["exposes",{"2":{"288":2}}],["exporters",{"2":{"763":1}}],["exporting",{"0":{"312":1}}],["exports",{"2":{"203":1,"288":3,"298":1,"304":7,"306":6,"308":1,"310":1,"333":1,"335":2,"836":1}}],["export",{"2":{"14":2,"15":3,"16":1,"69":1,"70":1,"71":1,"74":1,"85":1,"87":2,"94":1,"95":1,"96":1,"153":1,"154":1,"163":1,"203":2,"222":1,"223":1,"281":8,"288":2,"289":2,"295":4,"297":1,"300":1,"301":1,"302":1,"303":1,"307":5,"308":2,"310":3,"311":2,"312":4,"314":3,"315":14,"318":3,"319":2,"320":2,"321":3,"324":2,"325":1,"327":6,"328":2,"330":1,"489":1,"661":3,"662":1,"663":3,"677":1,"692":18,"693":35,"706":1,"708":1,"719":2,"720":2,"749":13,"750":7,"790":1,"805":16,"819":1,"835":8,"865":4,"898":4,"899":3,"912":1,"925":5,"926":3,"927":1,"951":6,"955":1,"964":3,"994":14,"995":1}}],["expert",{"2":{"592":1}}],["experimental",{"2":{"904":1,"926":1}}],["experimentaldecorators",{"2":{"203":2,"204":1}}],["experience",{"2":{"518":1}}],["expect",{"2":{"223":4}}],["expired",{"2":{"147":1}}],["expressionhelpers",{"2":{"735":1}}],["expressionvaluefactory",{"2":{"735":1}}],["expressionvalue",{"2":{"735":1}}],["expressiontextpropertydecorator",{"2":{"735":1}}],["expressionpropertydecorator",{"2":{"735":1,"742":2}}],["expressionmanager",{"2":{"735":1,"742":3,"749":1}}],["expressions",{"2":{"735":2,"737":2,"742":3}}],["expressionengine",{"0":{"742":1},"2":{"734":1,"738":1}}],["expression",{"2":{"650":1,"742":2,"749":1}}],["express",{"2":{"71":1,"153":1,"163":1,"204":1,"275":1,"344":1,"573":1,"902":1}}],["enforcement",{"2":{"986":1}}],["ensureuseradapters",{"2":{"855":1,"859":1}}],["ensureuserclicompatshims",{"2":{"855":1}}],["enum",{"2":{"834":4,"865":1,"947":1,"952":4}}],["en",{"2":{"790":1,"898":1}}],["enhance",{"2":{"677":1,"679":1}}],["enhancedentity",{"2":{"248":1}}],["enhancedwindow",{"2":{"240":1}}],["enginecancelmethod",{"2":{"826":1}}],["enginetickmethod",{"2":{"826":1}}],["engine类",{"2":{"819":1}}],["engineprofile",{"2":{"805":1}}],["engine",{"0":{"826":1},"2":{"632":1,"650":1,"655":1,"676":1,"705":1,"742":2,"790":2,"817":2,"818":2,"819":3,"821":5,"822":3,"826":6,"827":2,"830":3,"834":1,"938":1,"946":1,"965":1,"986":1}}],["engineer",{"2":{"540":2,"564":1,"1001":1}}],["engineering+product",{"2":{"554":2,"1001":2}}],["engineering",{"0":{"542":1,"555":1,"566":1},"1":{"567":1,"568":1},"2":{"236":1,"554":1,"558":1,"559":1,"567":1,"569":1,"1000":1,"1001":3}}],["enterplanmode",{"2":{"986":1}}],["enterprise",{"2":{"437":1,"939":2}}],["enterframe",{"2":{"750":1}}],["entities",{"2":{"275":1,"280":2,"281":2}}],["entity",{"2":{"233":5,"248":3,"275":2,"280":3,"281":1}}],["entry",{"2":{"17":1}}],["enableclasscheck",{"2":{"706":1}}],["enablehitgraph",{"2":{"692":1}}],["enablejavascript",{"2":{"203":1}}],["enabled",{"2":{"95":1,"243":3}}],["end",{"2":{"139":1,"147":2,"148":1,"150":2,"768":1,"777":1,"792":1,"793":2,"805":2,"835":2,"938":1}}],["endpoints",{"2":{"274":2,"523":1}}],["endpoint",{"2":{"85":1}}],["encoding",{"0":{"715":1},"2":{"105":1,"134":1}}],["envmapintensity",{"2":{"778":1}}],["envmap",{"2":{"771":1,"778":1}}],["environments",{"2":{"763":1}}],["envoverwrite",{"2":{"649":1}}],["envnext",{"2":{"14":1,"16":1}}],["env",{"2":{"14":3,"16":1,"274":3,"481":4,"490":1,"573":1,"583":1,"594":1,"595":1,"647":1,"649":1,"654":3,"661":1,"916":2}}],["e",{"2":{"16":4,"88":2,"246":4,"263":1,"523":1,"654":1,"661":1,"749":1,"941":1}}],["equals",{"2":{"281":1}}],["eq",{"2":{"16":2}}],["txt",{"2":{"790":20,"939":1}}],["ty",{"2":{"741":2}}],["typographic",{"2":{"790":2}}],["typography",{"2":{"274":2,"647":1}}],["typicode",{"2":{"69":1,"71":1,"78":1}}],["typetext",{"2":{"856":1,"858":1,"865":1}}],["typedef类型",{"2":{"819":1}}],["typedarray",{"2":{"759":1}}],["type导入类型",{"2":{"318":1}}],["type显式导出类型",{"2":{"318":1}}],["typeorm",{"2":{"280":1,"281":1}}],["typeof",{"2":{"231":3,"238":4,"306":2,"720":7,"891":1,"898":1,"964":1}}],["types",{"2":{"203":6,"204":1,"221":2,"238":1,"274":8,"275":1,"280":6,"290":4,"318":2,"321":1,"336":1,"647":6,"677":1,"679":1,"706":2,"819":2,"821":1,"836":1,"849":1,"851":1,"858":1,"939":6}}],["typescriptclass",{"2":{"879":1}}],["typescriptconst",{"2":{"878":1}}],["typescript主配置",{"2":{"819":1}}],["typescriptlet",{"2":{"486":1}}],["typescriptfor",{"2":{"484":1}}],["typescriptfunction",{"2":{"230":1,"232":1,"482":1}}],["typescript模块化增强",{"2":{"272":1}}],["typescripttype",{"2":{"246":1}}],["typescriptinterface",{"2":{"229":1,"233":1,"236":1,"237":1,"239":1,"242":1,"243":1,"489":1,"891":1,"892":1}}],["typescriptimport",{"2":{"14":1,"150":1,"153":1,"154":1,"163":1,"222":1,"223":1,"483":1,"668":1,"724":1,"877":1,"964":1}}],["typescriptexport",{"2":{"223":1,"482":1}}],["typescript",{"0":{"202":1,"204":1,"323":1,"661":1,"662":1,"663":1,"692":1,"719":1,"720":1,"749":1,"750":1,"777":1,"834":1,"865":1,"925":1,"951":1,"994":1},"1":{"203":1,"204":1,"324":1,"325":1},"2":{"13":1,"69":1,"70":1,"71":2,"72":1,"74":1,"78":1,"144":1,"160":1,"164":1,"202":4,"203":2,"205":1,"207":2,"208":1,"210":1,"216":1,"217":4,"219":1,"220":2,"221":2,"223":1,"226":3,"227":1,"229":2,"230":4,"231":2,"232":2,"234":2,"236":1,"237":1,"238":2,"240":1,"244":3,"246":1,"247":1,"248":1,"249":1,"250":2,"252":1,"254":2,"258":2,"259":1,"260":1,"261":2,"262":1,"263":7,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":2,"271":2,"272":2,"274":2,"275":2,"280":1,"281":5,"288":2,"289":3,"317":2,"318":2,"319":1,"320":1,"321":1,"322":1,"324":1,"325":1,"326":1,"331":1,"336":1,"338":2,"342":3,"343":2,"344":3,"414":1,"467":2,"480":1,"481":1,"488":1,"490":1,"572":1,"576":1,"640":1,"643":1,"647":2,"661":1,"662":1,"663":1,"667":1,"677":4,"692":1,"693":1,"699":2,"701":1,"702":1,"706":2,"719":1,"720":1,"723":1,"725":1,"731":1,"735":1,"749":1,"750":1,"777":1,"784":1,"805":1,"806":1,"834":1,"835":1,"836":1,"851":1,"865":2,"874":1,"880":1,"881":2,"882":2,"885":1,"887":1,"898":1,"899":1,"901":1,"902":2,"904":4,"925":1,"926":1,"927":1,"936":2,"939":1,"951":1,"959":2,"960":1,"962":1,"964":4,"965":1,"967":1,"971":3,"980":1,"994":1,"995":1}}],["type>",{"2":{"138":1,"152":1,"153":1,"451":1}}],["type=",{"2":{"16":1}}],["type",{"0":{"247":1},"2":{"14":2,"105":1,"109":1,"136":1,"139":1,"141":1,"144":3,"147":2,"150":4,"152":1,"153":3,"154":1,"188":1,"222":1,"227":1,"229":1,"230":1,"233":1,"234":10,"236":1,"237":1,"238":1,"239":1,"240":2,"242":2,"243":2,"244":8,"247":3,"248":6,"249":1,"250":1,"262":6,"263":1,"289":2,"308":2,"318":6,"333":2,"451":2,"482":5,"483":2,"484":1,"486":1,"488":5,"581":1,"640":2,"646":1,"649":3,"652":4,"661":4,"662":1,"668":4,"692":5,"693":2,"719":2,"720":2,"724":1,"743":1,"744":1,"749":1,"750":8,"777":1,"778":15,"805":16,"828":1,"865":2,"866":23,"878":1,"879":1,"898":2,"925":4,"947":1,"951":2,"952":26,"961":1,"964":2,"994":2}}],["tm=trim",{"2":{"744":1}}],["tm",{"2":{"735":1,"737":1,"744":1}}],["tpl",{"2":{"646":1,"647":2}}],["tuning",{"2":{"512":2,"521":1,"523":3}}],["tuiprompt",{"2":{"489":4,"490":1}}],["tuichatoptions",{"2":{"489":2}}],["tuichat",{"0":{"489":1},"2":{"489":1,"490":3}}],["tui",{"0":{"487":1},"1":{"488":1,"489":1,"490":1},"2":{"489":3,"490":2,"851":1}}],["turns",{"2":{"482":1}}],["turborepo",{"2":{"572":1,"642":1,"904":3,"908":1}}],["turbopackreact",{"2":{"344":1}}],["turbopack",{"2":{"308":1,"343":2,"960":1}}],["turbo",{"2":{"130":1,"908":1}}],["t>",{"2":{"258":2,"259":2,"260":2,"261":2,"262":5,"263":1,"268":1,"750":3,"944":4,"946":2,"951":8}}],["tbase",{"2":{"248":4}}],["t4",{"2":{"244":1}}],["t3",{"2":{"244":1}}],["t2",{"2":{"244":1}}],["t1",{"2":{"244":1}}],["tts",{"2":{"522":1}}],["ttl",{"2":{"243":2}}],["ttft",{"2":{"106":1,"353":1}}],["ttfb",{"2":{"45":1,"47":1,"52":1,"74":1,"75":1}}],["twmerge",{"2":{"964":2}}],["tweentype",{"2":{"834":3}}],["tweentypes",{"2":{"818":1,"819":1}}],["tweenprogress",{"2":{"827":1}}],["tweens",{"2":{"827":1,"830":1}}],["tweens链表",{"2":{"818":1}}],["tween链表创建",{"2":{"819":1}}],["tween合成管理",{"2":{"819":1}}],["tween合成系统",{"2":{"819":1}}],["tween合成",{"2":{"818":1}}],["tweenconfig",{"2":{"692":2}}],["tweenengine",{"2":{"677":1,"680":1,"686":4}}],["tween",{"0":{"686":1,"832":1},"2":{"672":1,"675":1,"676":2,"677":1,"679":1,"680":1,"686":5,"692":2,"693":1,"814":1,"819":1,"822":4,"827":2,"828":1,"830":1,"832":2,"834":10}}],["two",{"2":{"223":2}}],["twitter",{"2":{"67":1,"511":2,"849":1,"851":2}}],["tc39",{"2":{"203":1}}],["tcp",{"2":{"103":2,"105":1,"113":1,"114":1}}],["teek",{"2":{"1003":2}}],["temperature",{"2":{"925":1,"926":1}}],["template>",{"2":{"961":2}}],["templatemanager",{"2":{"939":1}}],["template",{"2":{"939":2,"962":1,"971":1,"980":3,"987":1}}],["templateliteral",{"2":{"655":1}}],["templates",{"2":{"274":1}}],["telemetryoptions",{"2":{"926":1}}],["telemetry",{"2":{"907":1,"926":1}}],["teacher",{"2":{"790":2}}],["teammates",{"2":{"486":1}}],["team",{"2":{"437":1}}],["tern",{"2":{"763":1}}],["tessellation",{"2":{"763":1}}],["testhelper",{"2":{"706":1}}],["testfunc",{"2":{"661":1}}],["testing",{"2":{"570":1,"575":1,"578":1,"980":4,"989":2}}],["test`",{"2":{"451":1}}],["testmatch",{"2":{"222":1}}],["testenvironment",{"2":{"222":1}}],["test",{"0":{"989":1},"2":{"203":2,"223":3,"224":4,"269":1,"274":3,"451":1,"572":1,"573":1,"581":1,"583":1,"595":1,"649":1,"652":2,"661":1,"667":2,"677":4,"697":1,"706":1,"723":1,"735":1,"763":1,"781":1,"790":5,"808":1,"840":2,"851":1,"930":1,"939":10,"979":1,"980":26,"982":2,"983":1,"989":3,"995":2}}],["tests",{"2":{"203":4,"222":1,"647":2,"677":2,"819":1,"851":1,"939":4,"979":1,"980":3}}],["techstack",{"2":{"994":1}}],["tech",{"0":{"558":1},"2":{"553":1,"558":1,"1002":1}}],["technical",{"2":{"363":1}}],["tensorrt",{"2":{"353":1}}],["textfield",{"2":{"942":1}}],["text┌─────────────────────────────────────────────────────────────────────────┐",{"2":{"858":1,"859":1,"860":1}}],["text┌─────────────────────────────────────────────────────────────────────────────┐",{"2":{"849":1}}],["textmain",{"2":{"855":1}}],["textmodules",{"2":{"737":1}}],["textrollup",{"2":{"836":1}}],["text用户代码",{"2":{"792":1}}],["text用户交互",{"2":{"654":1}}],["text入口文件",{"2":{"765":1}}],["texture",{"2":{"763":1,"766":2,"777":2,"778":5}}],["textureloader",{"2":{"763":1}}],["textureutils",{"2":{"763":1}}],["texturesample",{"2":{"770":1}}],["textures",{"2":{"762":1,"763":4,"777":1}}],["textuse",{"2":{"711":1}}],["textdocumentdata",{"2":{"750":1}}],["textdecoder",{"2":{"141":3,"143":2}}],["textproperty",{"2":{"735":1}}],["textpathconfig>",{"2":{"693":1}}],["textpath",{"2":{"677":1,"679":1,"680":1,"693":1}}],["textsuperpowers",{"2":{"980":1}}],["textsrc",{"2":{"821":1}}],["texts",{"2":{"805":1}}],["textselector",{"2":{"743":1}}],["textselectorproperty",{"2":{"735":1}}],["textselectorpropertydecorator",{"2":{"735":1}}],["textscheduler",{"2":{"712":1}}],["textinterface",{"2":{"735":1,"742":1}}],["textindex",{"2":{"679":1}}],["textelement",{"2":{"735":1}}],["textecharts",{"2":{"708":1}}],["textvisual",{"2":{"715":1}}],["textconfig>",{"2":{"693":1}}],["text输入",{"2":{"655":1}}],["text+=====================================================================+",{"2":{"979":1}}],["text+====================================================================================+",{"2":{"789":1}}],["text+=====================================================================================+",{"2":{"734":1}}],["text+===============================================================================+",{"2":{"762":1}}],["text+===========================================================================+",{"2":{"646":1,"705":1,"907":1}}],["text+=======================================================================+",{"2":{"676":1,"682":1,"683":1,"684":1,"685":1,"686":1,"818":1,"938":1}}],["text+==================================================================+",{"2":{"825":1,"826":1,"827":1,"828":1}}],["text+===========================================================+",{"2":{"656":1,"798":1}}],["text+",{"2":{"652":1,"653":1,"713":1,"714":1,"740":1,"741":1,"742":1,"743":1,"744":1,"768":1,"769":1,"770":1,"771":1,"772":1,"795":1,"796":1,"797":1,"799":1,"824":1,"915":1,"916":1,"917":1,"918":1,"944":1,"945":1,"946":1,"947":1,"948":1,"985":1,"986":1,"987":1,"988":1,"989":1}}],["textagent",{"2":{"941":1}}],["textanalysis",{"2":{"792":1,"793":2,"795":2,"805":1}}],["textanimatorproperty",{"2":{"735":1}}],["textanimatordataproperty",{"2":{"735":1}}],["textamis",{"2":{"649":1}}],["textarea",{"2":{"16":1}}],["text✅",{"2":{"62":1}}],["text",{"0":{"915":1},"2":{"15":7,"16":10,"105":1,"109":1,"134":1,"136":3,"139":1,"144":1,"150":1,"152":1,"458":4,"483":2,"488":3,"522":1,"650":1,"668":1,"677":1,"679":1,"680":2,"693":1,"705":1,"709":1,"724":1,"735":2,"738":1,"766":1,"788":2,"789":3,"790":4,"792":4,"793":2,"795":1,"798":4,"805":3,"806":2,"817":1,"818":1,"819":2,"821":1,"822":1,"841":1,"856":1,"858":1,"865":3,"879":1,"891":2,"892":2,"898":2,"902":1,"907":3,"909":4,"912":1,"915":2,"918":1,"927":1,"939":2,"942":3,"962":5,"963":1,"964":4,"982":1,"983":1,"998":1}}],["tdd",{"0":{"989":1},"2":{"177":2,"542":2,"980":1,"989":1,"991":1,"992":1}}],["truth",{"2":{"784":1}}],["true",{"2":{"88":2,"94":1,"138":1,"141":4,"143":3,"148":2,"150":2,"160":1,"164":1,"203":40,"204":28,"208":1,"212":3,"213":1,"229":1,"231":1,"246":3,"260":1,"266":1,"288":7,"301":1,"322":4,"490":1,"594":5,"685":1,"696":1,"740":1,"741":1,"746":2,"754":2,"839":2,"859":6,"866":6,"898":1,"952":1,"964":1}}],["trends",{"2":{"470":1}}],["treeview",{"2":{"706":1}}],["treeseries",{"2":{"706":1}}],["treemapview",{"2":{"706":1}}],["treemapseries",{"2":{"706":1}}],["treemap",{"2":{"706":2}}],["tree",{"2":{"307":1,"308":1,"311":1,"316":1,"318":1,"641":1,"642":1,"645":1,"653":1,"672":1,"673":1,"701":1,"706":3,"731":1,"758":1,"759":2,"785":1,"814":1,"815":1,"841":1,"851":1,"946":1,"962":1,"963":1}}],["trpc",{"2":{"342":6}}],["traverseancestors",{"2":{"777":1}}],["traversevisible",{"2":{"777":1}}],["traverse",{"2":{"769":1,"777":1}}],["transcoder",{"2":{"939":1}}],["transcriptionmodelv4",{"2":{"925":1}}],["transcriptionmodel",{"2":{"925":1}}],["transcription",{"2":{"907":1,"916":1}}],["transcription|",{"2":{"907":1}}],["transitions",{"2":{"995":1}}],["transition",{"2":{"812":1,"961":1,"962":1,"964":1}}],["transports",{"2":{"939":1}}],["transport",{"2":{"938":2,"941":1}}],["transparent",{"2":{"768":1,"771":1,"777":1,"964":1}}],["transpiler",{"2":{"763":1}}],["transmission",{"2":{"763":1,"771":1}}],["transformparams",{"2":{"920":1}}],["transformproperty",{"2":{"735":1}}],["transform分解为独立属性",{"2":{"819":1}}],["transform处理",{"2":{"819":1}}],["transformstream",{"2":{"909":1,"910":1}}],["transforms",{"2":{"818":1,"819":1}}],["transforminterface",{"2":{"735":1}}],["transformation",{"2":{"734":1,"735":1,"737":1}}],["transformeffect",{"2":{"735":1}}],["transformelement",{"2":{"734":1,"735":1}}],["transformer",{"2":{"262":3,"677":1,"679":1,"680":2,"693":1}}],["transform",{"2":{"222":1,"275":1,"677":1,"679":1,"682":2,"706":1,"735":3,"834":2,"849":1}}],["transfer",{"2":{"105":1,"134":1}}],["trae",{"2":{"564":1,"565":2}}],["trackball",{"2":{"763":1}}],["tracks",{"2":{"763":1,"772":1}}],["tracker",{"2":{"662":1}}],["tracing",{"2":{"549":1,"550":2,"980":1}}],["trace",{"2":{"324":3}}],["trade",{"2":{"394":1}}],["training",{"2":{"353":1,"551":1}}],["triggering",{"2":{"980":1}}],["triggers",{"2":{"586":2,"942":1}}],["triangles",{"2":{"777":1}}],["triangle",{"2":{"230":5,"763":1}}],["trimmodifier",{"2":{"735":1,"737":1,"744":1}}],["trim",{"2":{"16":2,"194":1,"489":1,"730":1,"772":1}}],["try",{"2":{"143":1,"160":1,"164":1,"246":2,"313":1,"330":1}}],["th",{"2":{"790":2}}],["thumbnail",{"2":{"706":1}}],["three",{"0":{"770":1},"2":{"757":2,"761":1,"762":1,"763":10,"765":11,"770":2,"774":1,"778":1,"780":2,"782":9}}],["threshold",{"2":{"677":1,"679":1}}],["throttle",{"2":{"706":1}}],["throws",{"2":{"898":1}}],["throwonerror",{"2":{"94":1}}],["throw",{"2":{"87":1,"144":3,"146":2,"147":1,"148":1,"150":3,"160":1,"164":1,"232":1,"238":1,"281":5,"330":1,"879":3}}],["thoughts",{"2":{"790":2}}],["thought",{"2":{"427":1,"432":1}}],["thickness",{"2":{"771":1}}],["think",{"2":{"414":1}}],["thinking",{"2":{"147":1,"366":4,"488":3}}],["this>",{"2":{"834":8}}],["this",{"2":{"150":2,"154":1,"163":1,"184":1,"185":3,"203":3,"248":1,"261":4,"267":7,"269":5,"281":24,"289":8,"302":6,"306":1,"311":2,"315":4,"324":1,"685":5,"692":21,"777":6,"825":14,"834":22,"865":1,"951":1,"986":1}}],["theater",{"2":{"939":2,"956":1}}],["themecontext",{"2":{"939":1}}],["themeriverview",{"2":{"706":1}}],["themeriverseries",{"2":{"706":1}}],["themeriver",{"2":{"706":1}}],["themeprops",{"2":{"661":1}}],["themeprovider",{"2":{"67":2,"274":1}}],["themeable",{"2":{"646":1,"647":1}}],["themes",{"2":{"646":1,"647":2}}],["themeutils",{"2":{"312":1}}],["theme=",{"2":{"289":1}}],["theme",{"2":{"274":1,"646":2,"647":2,"662":1,"705":1,"706":2,"939":1,"948":1,"951":1,"952":1,"962":1,"1003":3}}],["the",{"2":{"87":1,"223":2,"482":1,"550":1,"564":1,"965":1,"989":2,"1008":2}}],["then",{"2":{"85":1,"91":1,"288":1,"668":1,"814":1,"818":1,"825":2,"834":1}}],["t",{"2":{"16":1,"175":1,"234":11,"244":3,"246":2,"247":2,"248":2,"254":13,"255":3,"256":7,"258":7,"259":6,"260":1,"261":6,"262":5,"263":15,"265":2,"266":3,"267":2,"268":6,"269":3,"270":3,"271":1,"482":1,"667":1,"692":2,"749":1,"750":3,"835":1,"951":8}}],["tickmode",{"2":{"827":1,"834":2}}],["tickmodes",{"2":{"818":1,"819":1,"824":3}}],["tickable",{"2":{"827":3,"834":2}}],["tickable|null",{"2":{"824":2}}],["tick",{"2":{"818":2,"819":1,"824":1,"826":1,"827":4,"830":1,"834":2}}],["tiktok",{"2":{"373":1}}],["timerparams",{"2":{"819":1}}],["timer链表管理",{"2":{"819":1}}],["timer类",{"2":{"819":1}}],["timer模块",{"2":{"819":1}}],["timer",{"0":{"825":1},"2":{"763":1,"812":1,"817":1,"818":2,"819":2,"821":6,"822":9,"825":5,"826":3,"827":1,"830":1,"834":2,"860":1}}],["timecompleted",{"2":{"749":1}}],["timelineparams",{"2":{"835":1}}],["timelineposition",{"2":{"834":2}}],["timeline类",{"2":{"819":1}}],["timeline模块",{"2":{"819":1}}],["timeline",{"0":{"831":1},"2":{"701":1,"706":2,"812":1,"817":1,"818":2,"819":3,"821":2,"822":3,"825":1,"827":2,"831":3,"834":3,"835":3,"841":1}}],["timediff",{"2":{"692":1}}],["timescale|",{"2":{"818":1}}],["timescale",{"2":{"772":2,"826":2}}],["times",{"2":{"366":1,"458":2,"554":1,"772":1,"865":1,"1001":1}}],["timestamped",{"2":{"248":3}}],["timestampeduser",{"2":{"240":1}}],["timestamp",{"2":{"16":1}}],["timeoutseconds",{"2":{"865":1}}],["timeout",{"2":{"125":1,"163":2,"243":2,"262":1,"865":1,"866":2}}],["time",{"2":{"16":1,"53":1,"692":1,"706":3,"730":1,"742":2,"770":2,"772":2,"777":1,"819":1,"824":3,"825":1,"826":1,"827":3,"834":3}}],["title",{"2":{"14":1,"15":2,"69":1,"70":1,"74":3,"96":1,"234":1,"640":1,"668":1,"706":1,"724":1,"750":1,"866":1,"994":3}}],["ta",{"2":{"1030":1}}],["tarball",{"2":{"790":1}}],["targetpath",{"2":{"945":1}}],["target等",{"2":{"819":1}}],["targetsparam",{"2":{"834":3,"835":2}}],["targetsarray",{"2":{"834":1}}],["targets",{"2":{"818":1,"819":1,"834":4,"835":4}}],["targetnode",{"2":{"684":1}}],["target",{"2":{"16":1,"88":1,"203":1,"204":3,"322":1,"324":2,"654":1,"677":1,"692":1,"769":1,"777":3,"819":1,"822":1,"832":1,"834":2,"851":2,"858":2,"865":2}}],["taxonomy",{"2":{"790":2}}],["talkie",{"2":{"512":1}}],["taste",{"0":{"460":1},"2":{"359":1,"458":2}}],["task2",{"2":{"712":1}}],["task1",{"2":{"712":1}}],["taskresponse",{"2":{"160":2,"164":2}}],["taskscontroller",{"2":{"153":1,"154":1}}],["tasks",{"2":{"150":1,"153":2,"154":2,"160":1,"163":1,"164":1,"419":1,"735":1,"986":1,"994":1}}],["taskstreamclient",{"2":{"150":1}}],["taskid",{"2":{"130":1,"131":1,"150":3,"153":4,"154":4,"160":3,"163":3,"164":3}}],["task",{"2":{"126":4,"127":3,"429":1,"470":3,"472":2,"706":2,"709":1,"712":3,"983":4}}],["tail",{"0":{"353":1},"2":{"646":1,"712":2,"818":1,"822":1,"824":2,"826":1,"834":2}}],["tailwindcss",{"2":{"969":1,"971":5}}],["tailwind",{"0":{"963":1,"964":1},"2":{"11":1,"13":1,"81":1,"340":4,"561":1,"562":1,"642":2,"647":1,"962":6,"963":4,"964":8,"965":15,"966":3,"967":2,"968":2,"969":1,"970":5,"971":4}}],["tagconfig>",{"2":{"693":1}}],["tag",{"2":{"230":1,"331":1,"677":1,"679":1,"693":1}}],["takeuntil",{"2":{"154":3}}],["tabs",{"2":{"646":1,"851":1,"858":1,"865":1,"939":1}}],["tab",{"2":{"85":1,"100":1,"564":2,"565":1,"797":2,"805":1}}],["tablestore2",{"2":{"647":1,"650":3}}],["tablestore",{"2":{"646":1,"647":1,"650":3,"653":1}}],["table2",{"2":{"646":1,"647":2}}],["table",{"2":{"16":1,"256":1,"645":2,"646":2,"647":3,"851":1,"865":1}}],["tanstack",{"0":{"90":1,"101":1},"1":{"91":1,"92":1,"93":1,"94":1,"95":1,"96":1},"2":{"83":1,"91":5,"92":1,"94":3,"95":3,"96":2,"97":1,"98":3,"99":1,"101":2,"342":1}}],["toml",{"2":{"939":1}}],["tonumber",{"2":{"827":1,"828":3,"834":1}}],["tojson",{"2":{"772":1,"777":1}}],["toimage",{"2":{"692":1}}],["tocanvas",{"2":{"692":1}}],["toblob",{"2":{"692":1}}],["tobe",{"2":{"223":4}}],["todataurl",{"2":{"692":1}}],["todomain",{"2":{"281":1}}],["todo",{"2":{"96":4,"414":1,"790":1,"980":2,"991":1}}],["todos",{"2":{"92":1,"96":6}}],["touch",{"2":{"684":2}}],["touched",{"2":{"663":1}}],["touppercase",{"2":{"231":1}}],["toast",{"2":{"654":2}}],["toarraynodistribute",{"2":{"234":3}}],["toarray",{"2":{"234":5}}],["together",{"2":{"523":2}}],["toorm",{"2":{"281":1}}],["toolchoice",{"2":{"925":2,"926":2}}],["toolcallid",{"2":{"925":1}}],["toolcalls",{"2":{"915":2}}],["toolcallpart",{"2":{"913":1}}],["tooltimeoutms",{"2":{"915":1}}],["tooltipcomponent",{"2":{"725":2}}],["tooltip",{"2":{"701":1,"706":1,"709":1,"724":1}}],["toolloopagentsettings",{"2":{"918":1}}],["toolloopagent",{"0":{"918":1},"2":{"918":3}}],["toolloop",{"2":{"907":1}}],["toolbar",{"2":{"763":1}}],["toolbox",{"2":{"706":1}}],["tools>",{"2":{"926":4}}],["tools>>>",{"2":{"926":2}}],["toolset",{"2":{"913":2,"925":1,"926":2,"939":2}}],["tools",{"0":{"343":1},"2":{"408":2,"455":1,"456":2,"482":1,"553":1,"591":2,"647":1,"907":2,"916":1,"918":1,"925":1,"926":6,"927":5,"939":1,"980":4}}],["toolkit",{"2":{"341":1}}],["tool",{"2":{"101":1,"913":1,"915":2,"918":3,"925":1,"927":1}}],["totaltimeoutms",{"2":{"915":1}}],["totalframes",{"2":{"749":1}}],["total`",{"2":{"576":1}}],["totalamount",{"2":{"281":4}}],["total",{"2":{"281":2}}],["tostring",{"2":{"231":1,"262":1,"265":1,"267":3}}],["tofixed",{"2":{"231":1,"270":1,"281":1}}],["top",{"2":{"175":1,"244":1,"683":3,"692":2,"870":1}}],["to",{"2":{"85":2,"107":1,"289":1,"301":1,"397":1,"448":1,"518":1,"662":2,"686":1,"790":1,"828":1,"926":1,"933":1,"939":4,"942":1,"979":1,"980":2}}],["tolocalestring",{"2":{"16":1}}],["tolocaledatestring",{"2":{"15":2}}],["tokens",{"2":{"439":1,"523":5,"958":1,"962":2,"965":1}}],["token123",{"2":{"141":1,"144":1,"878":1}}],["token=你的accesstoken",{"2":{"14":1}}],["token",{"0":{"966":1},"2":{"14":2,"124":1,"135":2,"147":1,"342":2,"439":1,"441":1,"443":1,"511":1,"512":2,"519":2,"522":5,"523":2,"549":1,"550":2,"646":1,"647":2,"655":3,"965":4,"966":1,"967":1,"980":2}}],["tsl",{"0":{"770":1,"775":1},"2":{"758":1,"759":1,"761":1,"762":1,"763":17,"765":10,"766":2,"770":4,"771":6,"775":1,"777":1}}],["tsbuildinfofile",{"2":{"203":1}}],["tsbuildinfo",{"2":{"203":2,"208":1}}],["tsc",{"2":{"202":3,"216":4,"808":1}}],["tsconfig",{"0":{"202":1,"203":1,"212":1,"213":1,"214":1,"215":1},"1":{"203":1,"204":1},"2":{"202":2,"203":3,"204":1,"205":1,"209":2,"210":1,"211":4,"213":1,"214":1,"215":1,"216":6,"226":1,"322":1,"677":2,"706":1,"790":2,"819":2,"836":1,"851":1,"882":2}}],["tsximport",{"2":{"15":1}}],["tsx",{"2":{"15":3,"16":2,"62":2,"65":4,"66":5,"67":9,"70":1,"74":1,"78":1,"94":1,"202":1,"203":5,"222":1,"274":16,"280":5,"288":2,"290":8,"643":2,"646":1,"647":18,"649":4,"939":13,"962":1,"964":1}}],["ts",{"0":{"321":2,"322":1,"750":1,"795":1,"796":1,"797":1,"798":1,"799":1,"859":2,"860":1,"891":1,"892":1},"2":{"14":1,"66":1,"67":2,"69":1,"71":1,"72":2,"87":2,"94":1,"202":1,"203":17,"204":1,"208":1,"216":1,"221":1,"222":8,"223":2,"274":53,"275":25,"280":60,"281":8,"289":2,"290":12,"317":3,"318":2,"319":4,"320":1,"321":3,"323":1,"324":4,"325":2,"481":1,"576":2,"583":1,"643":1,"646":11,"647":51,"677":64,"679":63,"692":7,"699":1,"706":61,"708":10,"728":1,"731":2,"735":2,"749":1,"750":1,"788":16,"789":20,"790":59,"792":11,"798":12,"799":1,"805":4,"806":2,"815":2,"819":1,"836":1,"849":8,"850":9,"851":79,"855":6,"858":8,"859":3,"860":1,"865":1,"882":8,"883":3,"886":4,"887":1,"889":3,"909":6,"912":1,"939":86,"962":1,"964":3,"965":3,"980":1}}],["bmi",{"2":{"1044":1}}],["bmapview",{"2":{"706":1}}],["bmapmodel",{"2":{"706":1}}],["bmapcoordsys",{"2":{"706":1}}],["bmap",{"2":{"706":1}}],["bc",{"2":{"763":1}}],["bsdf",{"2":{"762":1,"763":2}}],["by",{"2":{"581":2}}],["bypass",{"2":{"482":1}}],["bypasspermissions",{"2":{"482":2}}],["bytefe",{"2":{"346":1}}],["bytesiterable",{"2":{"143":2}}],["b`",{"2":{"451":1}}],["bff",{"2":{"342":2,"344":2}}],["btn`",{"2":{"960":2}}],["btn",{"2":{"340":1,"647":1,"958":2,"960":4,"961":7,"967":1,"970":1}}],["brainstormed",{"2":{"986":1}}],["brainstorm",{"2":{"980":1}}],["brainstorming",{"0":{"987":1},"2":{"979":1,"980":1,"982":1,"983":2,"987":2,"991":1,"994":1,"995":2,"999":1}}],["branching",{"2":{"451":1}}],["branch",{"2":{"451":1,"979":1,"980":1,"982":1,"983":1,"995":2}}],["brandname",{"2":{"247":2}}],["brand",{"2":{"247":7,"962":13}}],["branded",{"0":{"247":1},"2":{"227":1,"250":1}}],["brush",{"2":{"701":1,"705":1,"706":1,"715":2}}],["browsercookie",{"2":{"865":1}}],["browserbridge",{"2":{"845":1,"849":1,"850":1,"851":1,"856":1,"858":2}}],["browser",{"0":{"858":1},"2":{"677":1,"790":1,"840":1,"849":2,"850":1,"851":4,"855":1,"859":2,"862":1,"865":2,"868":1,"870":1,"938":1}}],["bridge",{"2":{"850":1,"851":2,"858":1,"868":1}}],["brighten",{"2":{"677":1,"679":1,"693":1}}],["brightness",{"2":{"676":1,"677":1,"679":1}}],["briefing",{"2":{"470":1}}],["breaking",{"2":{"904":1}}],["breakkeepallafterpunctuation",{"2":{"805":1}}],["breakablefitmode",{"2":{"805":3}}],["breakablefitadvances",{"2":{"793":1,"796":1,"797":1,"805":1}}],["break",{"0":{"797":1},"2":{"141":1,"143":4,"147":4,"150":4,"203":1,"788":1,"789":2,"790":1,"792":3,"797":4,"798":2,"799":1,"805":3,"892":1}}],["b=a∩b",{"2":{"227":1}}],["b=a∩ba",{"2":{"227":1}}],["bisect",{"2":{"980":1}}],["bilibili",{"2":{"849":1,"851":2,"863":1,"870":1}}],["bidi",{"2":{"785":2,"788":2,"789":5,"790":8,"792":4,"793":1,"798":2}}],["bi",{"2":{"700":2}}],["bin",{"2":{"939":1}}],["binyamin",{"2":{"790":1}}],["binds",{"2":{"942":1}}],["binding",{"2":{"939":1,"942":1,"946":1}}],["bindings",{"2":{"762":2,"763":1,"765":1}}],["binder",{"2":{"939":1}}],["bind",{"2":{"772":1}}],["bindgroup",{"2":{"762":1}}],["binaryop",{"2":{"655":1}}],["binstance",{"2":{"315":1}}],["bird",{"2":{"229":4}}],["birthday",{"2":{"184":1}}],["bigint",{"2":{"203":1,"231":2}}],["bem",{"2":{"957":3,"958":2}}],["began",{"2":{"818":1,"825":2,"834":1}}],["begin",{"2":{"768":1,"777":1}}],["benchmark",{"2":{"790":3}}],["benchmarks",{"2":{"763":1,"790":1}}],["bez",{"2":{"735":1}}],["beziereaser",{"2":{"735":1}}],["bezier",{"2":{"734":1,"735":1,"743":3,"763":1,"818":1,"819":1,"821":1}}],["bezierfunctions",{"2":{"677":1,"679":1}}],["bevel",{"2":{"692":1}}],["behaviortree",{"2":{"946":1}}],["behaviornode",{"2":{"941":1,"946":2}}],["behavior",{"2":{"482":1,"946":1,"986":1}}],["before",{"2":{"482":1,"979":1,"980":1,"982":1,"995":1}}],["beforeinteractive",{"2":{"72":1}}],["best",{"2":{"456":1,"980":1}}],["bertrand",{"2":{"392":2}}],["beta",{"2":{"331":1}}],["be",{"2":{"281":2}}],["bearer",{"2":{"135":1,"141":1,"144":1,"342":1,"878":1,"916":1}}],["b",{"0":{"101":1},"2":{"47":1,"76":1,"89":1,"92":2,"95":2,"101":1,"117":1,"187":3,"188":2,"223":4,"227":6,"229":2,"237":3,"238":9,"242":19,"243":4,"244":6,"250":10,"267":2,"295":8,"304":8,"307":8,"310":4,"314":3,"315":44,"319":4,"321":2,"324":2,"329":1,"345":1,"366":1,"394":1,"414":1,"417":1,"683":1,"692":1,"919":1,"965":1,"980":1,"1007":1}}],["bump",{"2":{"979":1,"980":2}}],["buflength",{"2":{"892":1}}],["buffer=undefined",{"2":{"892":1}}],["bufferattributenode",{"2":{"763":1}}],["bufferattribute",{"2":{"763":1,"766":1,"777":1}}],["buffergeometryloader",{"2":{"763":1}}],["buffergeometry",{"2":{"759":1,"762":1,"763":1,"766":2,"777":1}}],["buffer",{"2":{"141":5,"763":2,"766":1,"777":1,"892":7,"947":3}}],["buffering",{"2":{"107":2,"152":1}}],["bukhala",{"2":{"790":1}}],["bubbles",{"2":{"790":3}}],["bubbling",{"2":{"682":1,"684":1}}],["butt",{"2":{"692":1}}],["buttonhtmlattributes",{"2":{"964":1}}],["buttonvariants>",{"2":{"964":1}}],["buttonvariants",{"2":{"964":2}}],["buttonclass",{"2":{"960":2}}],["button`",{"2":{"959":1}}],["buttonprops",{"2":{"249":2,"964":2}}],["button>",{"2":{"16":2,"960":1,"961":1,"962":1,"964":2}}],["button",{"2":{"16":2,"203":2,"249":1,"274":5,"290":1,"291":1,"312":3,"313":1,"645":1,"646":1,"939":2,"942":1,"958":1,"959":2,"960":9,"961":1,"962":3,"964":4,"971":1}}],["bun",{"2":{"785":1,"790":5,"808":4}}],["bunny",{"2":{"677":1}}],["bunnies",{"2":{"677":1}}],["bundled",{"2":{"939":2}}],["bundles",{"2":{"819":1,"836":4}}],["bundler",{"2":{"203":2,"204":1}}],["bundle",{"2":{"22":1,"23":2,"25":1,"45":1,"53":1,"59":1,"85":1,"98":1,"100":1,"959":1}}],["business",{"2":{"363":1}}],["bus",{"2":{"280":1,"315":3}}],["bug",{"0":{"484":1,"992":1},"2":{"174":1,"198":1,"203":1,"254":1,"255":1,"331":2,"382":1,"386":2,"405":1,"418":1,"451":3,"455":2,"484":1,"531":1,"564":1,"567":3,"568":1,"982":1,"992":1,"1043":1}}],["builtin",{"2":{"855":1}}],["built",{"2":{"85":1,"865":1}}],["build=true",{"2":{"836":1}}],["buildtransformstring",{"2":{"819":1}}],["buildstring",{"2":{"818":1}}],["buildlinetextfromrange",{"2":{"792":1,"798":2}}],["buildelementparenting",{"2":{"741":1,"749":1}}],["builder",{"0":{"463":1,"464":1},"2":{"440":1,"457":2,"458":2,"459":3,"463":2,"464":3,"465":1,"466":2,"646":1,"647":2,"656":1,"770":3,"777":3,"1001":1}}],["builders",{"2":{"335":1}}],["buildallitems",{"2":{"741":1,"749":1}}],["builditem",{"2":{"741":1,"749":1}}],["build",{"0":{"343":1,"461":1},"2":{"31":2,"45":8,"47":1,"50":1,"53":1,"75":1,"203":1,"216":4,"290":1,"458":2,"572":1,"595":1,"667":1,"677":1,"697":1,"706":5,"728":1,"735":4,"762":1,"763":2,"765":1,"781":2,"790":2,"840":1,"851":1,"930":1,"939":1}}],["bg",{"2":{"16":1,"958":2,"962":4,"964":9,"965":1,"970":2}}],["blend",{"2":{"814":1,"819":1,"828":1,"832":1,"834":2}}],["blenddst",{"2":{"777":1}}],["blendsrc",{"2":{"777":1}}],["blendmode",{"2":{"763":1}}],["blendmodes",{"2":{"735":1}}],["blendingdstfactor",{"2":{"777":1}}],["blendingsrcfactor",{"2":{"777":1}}],["blending",{"2":{"763":1,"771":1,"777":2}}],["blank",{"2":{"706":1}}],["black",{"2":{"696":1}}],["blur",{"2":{"676":1,"677":2,"679":1,"693":1}}],["blue",{"2":{"15":1,"16":2,"483":1,"962":3,"964":3,"966":2,"970":1}}],["bloat",{"2":{"730":1,"744":1}}],["blob>",{"2":{"692":1}}],["blocked",{"2":{"988":1}}],["blockindex",{"2":{"712":1}}],["block",{"2":{"373":1,"488":3,"712":1,"957":1}}],["blogpage",{"2":{"69":1}}],["blogpost",{"2":{"14":3}}],["blog",{"2":{"13":2,"17":3,"65":2,"67":4,"69":1,"70":1,"71":1,"1003":1}}],["bounce",{"2":{"819":1}}],["boundingrect",{"2":{"714":1}}],["bounded",{"2":{"277":1,"393":1}}],["bone",{"2":{"763":1}}],["box3",{"2":{"763":1}}],["box2",{"2":{"763":1}}],["boxgeometry",{"2":{"763":1,"782":1}}],["boxplotview",{"2":{"706":1}}],["boxplotseries",{"2":{"706":1}}],["boxplot",{"2":{"706":1}}],["bower",{"2":{"735":2}}],["bolt",{"2":{"559":1,"561":1,"562":2}}],["bold",{"2":{"15":2}}],["bot",{"2":{"512":2}}],["bottom",{"2":{"244":1}}],["booking",{"2":{"939":1}}],["bool",{"2":{"769":2,"826":2,"947":1,"948":1}}],["boolean>",{"2":{"663":1,"865":1}}],["boolean",{"2":{"194":1,"229":1,"234":1,"243":3,"248":1,"249":2,"259":2,"260":1,"261":1,"281":1,"482":1,"661":7,"662":4,"663":4,"682":1,"692":31,"693":1,"719":8,"749":11,"750":11,"763":1,"777":22,"805":6,"825":5,"826":1,"834":17,"865":11,"866":3,"891":1,"898":1,"951":1,"952":1,"961":1,"994":2}}],["bootstrap",{"0":{"985":1},"2":{"290":2,"978":1,"979":1,"980":2}}],["bob",{"2":{"259":4,"266":2,"267":2}}],["bodymovin",{"2":{"728":2,"729":1,"735":2,"753":1}}],["body",{"0":{"449":1},"2":{"96":1,"135":3,"141":10,"144":2,"154":4,"640":1,"649":2,"661":2,"668":2,"782":1,"860":1,"878":1,"939":1,"994":1}}],["border",{"2":{"15":1,"16":3,"647":1,"799":1,"805":1,"958":2,"959":2,"960":1,"961":2,"962":1,"964":2}}],["batch",{"2":{"945":2}}],["batchedmesh",{"2":{"763":1,"769":1}}],["batchdraw",{"2":{"680":1,"682":1,"692":2}}],["banner",{"2":{"735":2}}],["babelrc",{"2":{"735":1}}],["babel",{"2":{"642":1,"735":1}}],["bad",{"2":{"550":1,"790":1,"866":1}}],["barchart",{"2":{"725":2}}],["bargrid",{"2":{"706":1}}],["barview",{"2":{"706":1}}],["barseries",{"2":{"706":1}}],["bar",{"2":{"333":1,"706":2,"724":1}}],["barrel",{"2":{"312":1}}],["bark",{"2":{"231":5}}],["backwards",{"2":{"827":1,"834":1}}],["backwardcompat",{"2":{"706":1}}],["back",{"2":{"819":1}}],["backside",{"2":{"771":1,"777":1}}],["backgroundcolor",{"2":{"719":1}}],["background",{"2":{"647":1,"762":1,"763":1,"851":2,"958":2,"959":1,"960":2,"961":2}}],["backend",{"2":{"280":1,"281":6,"342":1,"344":1,"670":2,"677":2,"758":1,"761":2,"762":3,"763":1,"765":3,"766":1,"768":5,"777":1}}],["backoffdelays",{"2":{"160":3}}],["backoffpolling",{"2":{"160":1}}],["backoff",{"2":{"156":1,"166":1}}],["baseclasses",{"2":{"962":3}}],["baseconfig",{"2":{"243":2}}],["basepath",{"2":{"946":1}}],["basepage",{"2":{"851":1}}],["baseprops",{"2":{"249":3}}],["baserenderer",{"2":{"735":1,"738":1,"741":2}}],["basetextelement",{"2":{"735":1}}],["baseevent",{"2":{"735":1}}],["baseelement",{"2":{"734":1,"735":1,"738":2}}],["baseentity",{"2":{"248":2}}],["based",{"2":{"397":1,"980":2}}],["baseapi",{"2":{"280":1}}],["base",{"0":{"212":1},"2":{"203":1,"211":1,"213":1,"214":1,"215":1,"216":4,"230":2,"243":7,"248":4,"280":1,"325":1,"481":2,"523":1,"646":1,"647":2,"734":3,"735":1,"741":2,"851":1,"916":1,"948":1}}],["baseurl",{"2":{"150":6,"203":3,"216":1,"916":2}}],["base64",{"2":{"72":1,"112":1,"115":1,"719":1}}],["basiccatalogprovider",{"2":{"939":1}}],["basic",{"2":{"67":2,"477":1,"939":3}}],["bashgemini",{"2":{"998":1}}],["bashgit",{"2":{"17":1,"955":1}}],["bashpnpm",{"2":{"480":1,"930":1}}],["bashnpm",{"2":{"224":1,"838":1,"840":1,"869":1}}],["bash",{"2":{"13":1,"216":1,"221":1,"411":1,"442":2,"470":3,"472":2,"478":1,"481":1,"591":1,"594":2,"595":2,"666":1,"667":1,"695":1,"753":1,"780":1,"781":1,"870":1,"927":1,"979":1,"982":1,"985":1,"997":1,"998":2}}],["baas",{"0":{"8":1},"2":{"4":1,"5":1,"20":1}}],["rd",{"2":{"735":1,"737":1,"744":1}}],["rp",{"2":{"735":1,"737":1,"744":1}}],["rpc",{"2":{"342":1,"344":1}}],["r2",{"2":{"693":1}}],["rgba",{"2":{"677":2,"679":1,"763":1}}],["rgb",{"2":{"677":2,"679":1,"818":1,"828":2,"966":1,"970":1}}],["rfc",{"2":{"942":1,"945":1,"951":1}}],["rf",{"2":{"594":1,"595":1}}],["rm",{"2":{"594":1,"595":1}}],["r1",{"2":{"512":1,"522":3,"693":1}}],["rlhf",{"2":{"551":1}}],["rl",{"2":{"419":1,"489":8,"551":1}}],["rules>",{"2":{"506":1}}],["rules",{"0":{"575":1,"577":1},"1":{"576":1,"577":1,"578":1},"2":{"506":2,"570":3,"575":2,"577":1,"597":2,"790":1}}],["rust",{"2":{"343":3,"558":1,"642":1,"904":2,"1001":1}}],["runcli",{"2":{"855":1}}],["runtest",{"2":{"706":1}}],["runtime",{"2":{"50":1,"53":2,"75":1,"203":1,"342":1,"419":1,"851":2}}],["running",{"2":{"153":1,"419":1}}],["run",{"2":{"31":2,"47":1,"82":1,"572":1,"573":3,"594":2,"595":2,"667":3,"697":2,"723":2,"726":1,"781":2,"808":1,"840":5,"955":1,"980":12,"985":1,"997":1}}],["rc",{"2":{"331":1}}],["r",{"2":{"262":2,"668":2,"683":1,"892":4,"899":2}}],["r>",{"2":{"262":2}}],["rizzcharts",{"2":{"939":1}}],["rimraf",{"2":{"885":1}}],["risalat",{"2":{"790":1}}],["ringconfig>",{"2":{"693":1}}],["ring",{"2":{"677":1,"679":1,"693":1,"964":1}}],["right=",{"2":{"628":1,"636":2}}],["rightarrow→",{"2":{"377":4,"553":2}}],["right",{"2":{"243":2}}],["richinlinestats",{"2":{"806":1}}],["richinlineline",{"2":{"806":1}}],["richinlinelinerange",{"2":{"799":1,"806":3}}],["richinlineitem",{"2":{"805":1,"806":1}}],["richinlinecursor",{"2":{"799":1,"805":1,"806":1}}],["rich",{"0":{"799":1},"2":{"15":1,"788":4,"789":1,"790":7,"792":1,"793":1,"798":1,"799":1,"805":1,"806":1,"810":1}}],["rspack",{"2":{"343":1}}],["rsbuild",{"2":{"217":1,"343":2}}],["rsc",{"0":{"61":1},"2":{"61":5,"62":1,"68":1,"81":1,"906":1,"907":1,"908":1,"965":1}}],["rashomon",{"2":{"790":1}}],["range",{"2":{"790":1}}],["randomint",{"2":{"819":1}}],["random",{"2":{"163":1,"818":1,"819":2,"821":1}}],["rapier",{"2":{"763":1}}],["raycast",{"2":{"777":1}}],["raycaster",{"2":{"763":1,"769":1,"777":2}}],["ray",{"2":{"763":1}}],["rawshadermaterial",{"2":{"763":1}}],["rawcount",{"2":{"713":1}}],["rawevent",{"2":{"661":1}}],["radiant",{"2":{"973":1}}],["radiusaxis",{"2":{"714":1}}],["radius",{"2":{"230":3,"232":1,"310":3,"714":1,"958":3,"959":1,"960":1,"961":1}}],["radarview",{"2":{"706":1}}],["radarseries",{"2":{"706":1}}],["radar",{"2":{"706":3,"714":2}}],["raf主循环",{"2":{"819":1}}],["raf管理",{"2":{"679":1}}],["raf",{"2":{"672":1,"676":1,"677":1,"686":2,"734":1,"740":1,"814":1,"815":1,"818":2,"826":1,"834":1}}],["rate",{"2":{"550":1}}],["rationality",{"2":{"393":1}}],["ragas",{"2":{"550":1}}],["rag",{"2":{"352":1,"512":2,"522":2,"536":1,"550":1,"558":1,"573":1}}],["rabbitmq",{"2":{"126":1}}],["rxjs",{"2":{"153":2,"154":2}}],["rq",{"2":{"92":6,"94":1,"98":3}}],["row",{"2":{"939":1}}],["rows=",{"2":{"16":1}}],["rotate",{"2":{"839":1}}],["rotationdeg",{"2":{"692":1}}],["rotation",{"2":{"682":2,"692":1,"766":2,"769":1,"777":1,"778":1,"782":2}}],["room",{"2":{"763":1}}],["rootrenderer",{"2":{"647":1,"649":3,"654":2}}],["root",{"2":{"280":1,"306":2,"647":2,"649":1,"668":1,"676":1,"939":1,"965":1,"970":1,"980":1,"985":4,"994":1}}],["rootstore",{"2":{"646":1,"647":1,"649":1,"650":3,"653":2}}],["roots",{"2":{"222":1}}],["rootdir>",{"2":{"222":1}}],["rootdirs",{"2":{"203":1}}],["rootdir",{"2":{"203":1,"204":2,"213":1,"214":1,"215":1}}],["roi",{"0":{"365":1},"2":{"355":1,"365":2,"556":2,"617":1,"971":1,"1001":1}}],["rollup构建配置",{"2":{"819":1}}],["rollup",{"2":{"642":1,"677":2,"702":1,"706":1,"731":2,"735":2,"737":1,"751":1,"759":1,"763":2,"815":1,"819":1}}],["rollback",{"2":{"98":1}}],["rollbackonerror",{"2":{"88":1}}],["role>",{"2":{"506":1}}],["roles",{"2":{"275":1}}],["role",{"2":{"233":3,"239":2,"240":1,"506":1}}],["role=$",{"2":{"95":1}}],["roleid",{"2":{"95":6}}],["robots",{"2":{"67":1}}],["roughnessmap",{"2":{"778":1}}],["roughness",{"2":{"758":1,"763":1,"771":1,"778":1}}],["roundcornersmodifier",{"2":{"735":1,"737":1}}],["roundcorners",{"2":{"730":1,"744":1}}],["round",{"2":{"281":1,"692":2}}],["rounded",{"2":{"15":1,"16":3,"962":1,"964":3,"970":1}}],["routes",{"0":{"71":1},"2":{"71":1,"80":2,"274":2}}],["route",{"2":{"66":1,"67":2,"71":3,"923":1}}],["router",{"0":{"64":1},"1":{"65":1,"66":1,"67":1},"2":{"13":1,"15":1,"16":1,"34":1,"59":1,"61":1,"74":1,"274":2,"290":1,"339":1,"341":3,"936":1,"939":2,"985":1}}],["reject",{"2":{"860":1,"891":1,"898":1}}],["reidentified",{"2":{"858":1,"865":2}}],["reuang",{"2":{"790":1}}],["rebase",{"2":{"451":3}}],["reload",{"2":{"650":1,"654":3,"659":1,"663":1}}],["release",{"2":{"677":2,"726":1,"980":1}}],["releaselock",{"2":{"143":1}}],["relevance",{"2":{"550":1}}],["relations",{"2":{"281":1}}],["repeat",{"2":{"772":1}}],["repeatermodifier",{"2":{"735":1,"737":1,"744":1}}],["repeater",{"2":{"730":1}}],["replit",{"2":{"561":2,"562":2}}],["replicate",{"2":{"523":2}}],["replan",{"2":{"431":1,"432":1}}],["replacedby",{"2":{"865":1}}],["replacetextignorekeys",{"2":{"662":1}}],["replacetext",{"2":{"662":1}}],["replace",{"2":{"150":1,"662":1,"814":1,"828":1,"832":1,"834":2}}],["repo",{"2":{"636":1,"637":1}}],["reports",{"2":{"471":3,"474":1,"647":1}}],["reportlab",{"2":{"470":2,"472":2}}],["report",{"2":{"416":1,"470":2,"471":3,"472":2,"474":1,"790":2}}],["repositories",{"2":{"275":1,"280":2,"281":1}}],["repository",{"2":{"256":1,"275":2,"280":2,"281":3,"336":2,"345":1}}],["receiving",{"2":{"979":1,"980":1,"982":1}}],["received",{"2":{"302":1,"315":2}}],["recipe",{"2":{"939":1}}],["rectarealight",{"2":{"763":1}}],["rectangle",{"2":{"230":5,"232":1}}],["rectconfig>",{"2":{"693":1}}],["rect",{"2":{"677":1,"679":1,"680":1,"689":1,"693":1,"696":3,"705":1,"714":1}}],["recursion",{"2":{"652":1}}],["recommended",{"2":{"994":1}}],["reconstruct",{"0":{"374":1}}],["recoil",{"2":{"341":1}}],["record",{"0":{"372":1},"2":{"154":1,"583":1,"662":1,"663":6,"693":1,"865":3,"891":1,"898":2,"925":4,"945":1,"951":2,"995":1}}],["ref",{"2":{"858":2,"865":3}}],["refresh",{"2":{"818":1,"819":1,"821":1,"834":2}}],["refinement",{"2":{"476":1}}],["refactor",{"2":{"451":1,"581":1,"587":1,"980":1,"989":3}}],["reflexion",{"2":{"426":1}}],["reflection",{"2":{"426":1}}],["reflect",{"2":{"203":1}}],["reference",{"2":{"939":2}}],["references",{"0":{"205":1,"207":1,"210":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1},"2":{"203":2,"204":1,"205":1,"207":1,"209":1,"210":1,"214":1,"215":1,"216":3,"226":1,"442":3,"443":3,"451":2,"851":1,"980":1,"986":1}}],["refetchonwindowfocus",{"2":{"94":1}}],["removefromparent",{"2":{"777":1}}],["removeeventlistener",{"2":{"769":1}}],["removed",{"2":{"713":1}}],["removechildren",{"2":{"692":1}}],["removecomments",{"2":{"203":1,"204":1}}],["removestore",{"2":{"653":1}}],["remove",{"2":{"244":5,"705":1,"769":1,"777":1,"819":1,"834":1}}],["remoteentry",{"2":{"288":4}}],["remotes",{"2":{"288":1}}],["remotepatterns",{"2":{"72":2}}],["remote",{"2":{"17":1}}],["regular",{"2":{"925":1}}],["regularpolygonconfig>",{"2":{"693":1}}],["regularpolygon",{"2":{"677":1,"679":1,"693":1}}],["registry",{"0":{"859":1,"919":1},"2":{"849":1,"850":1,"851":2,"856":2,"859":3,"910":1,"919":2,"939":2}}],["registerupdatenoticeonexit",{"2":{"855":1}}],["registerupdatelifecycle",{"2":{"711":1,"720":1}}],["registertargets",{"2":{"818":1,"819":1}}],["registertransform",{"2":{"711":1,"720":1}}],["registermodifier",{"2":{"744":2,"749":1}}],["registermap",{"2":{"711":1,"720":1}}],["registeranimation",{"2":{"740":1,"750":1}}],["registeraction",{"2":{"711":1,"720":1}}],["registeredanimations",{"2":{"740":2}}],["registersubtypedefaulter",{"2":{"720":1}}],["registerseriesmodel",{"2":{"711":1,"720":1}}],["registerloading",{"2":{"711":1,"720":1}}],["registerlayout",{"2":{"711":1,"720":1}}],["registervisual",{"2":{"711":1,"715":1,"720":1}}],["registerpostupdate",{"2":{"711":1,"720":1}}],["registerpostinit",{"2":{"711":1,"720":1}}],["registerprocessor",{"2":{"711":1,"720":1}}],["registerpreprocessor",{"2":{"711":1,"720":1}}],["registerplugin",{"2":{"656":1}}],["registercustomseries",{"2":{"720":1}}],["registercommand",{"2":{"859":1}}],["registercomponentview",{"2":{"711":1,"720":1}}],["registercomponentmodel",{"2":{"711":1,"720":1}}],["registercoordinatesystem",{"2":{"711":1,"720":1}}],["registerchartview",{"2":{"711":1,"720":1}}],["registernode",{"2":{"677":1}}],["register",{"2":{"647":1,"705":1,"711":2,"819":1,"825":1,"870":1}}],["registerfunc",{"2":{"646":1}}],["registerfilter",{"2":{"646":1}}],["registerform",{"2":{"274":1}}],["registerrenderer",{"2":{"646":1,"652":1,"741":1,"749":1}}],["region",{"2":{"661":1,"714":1}}],["regenerate",{"2":{"917":1,"925":1}}],["regeneration",{"2":{"34":1,"63":1}}],["regexp",{"2":{"661":1,"925":1}}],["reg",{"2":{"196":1}}],["reversed",{"2":{"825":2,"834":1}}],["reverse",{"2":{"672":1,"677":1,"686":2,"692":1,"818":1,"819":1,"825":1,"834":1,"903":1,"909":1,"920":1}}],["revertvalues",{"2":{"818":1,"819":1}}],["revert",{"2":{"451":1,"818":1,"819":1,"821":1,"825":2,"834":1}}],["reviewer",{"2":{"570":1,"590":1,"591":2,"592":2,"979":1,"980":6,"988":4}}],["review",{"2":{"171":1,"177":3,"219":1,"455":1,"565":1,"568":1,"570":4,"577":2,"579":1,"583":2,"586":2,"587":1,"588":2,"592":1,"628":1,"965":1,"979":2,"980":5,"982":3,"983":1,"991":1,"995":2}}],["revalidation",{"2":{"35":2,"85":1}}],["revalidateonreconnect",{"2":{"85":1}}],["revalidateonfocus",{"2":{"85":1,"87":1}}],["revalidatetag",{"2":{"34":1,"36":1}}],["revalidatepath",{"2":{"34":1,"36":1}}],["revalidate",{"2":{"34":2,"35":5,"36":1,"45":1,"47":2,"78":1,"82":1,"85":3,"88":1,"98":1,"342":1}}],["reqid",{"2":{"818":1,"826":1,"834":1}}],["req",{"2":{"139":2,"153":1}}],["requirements",{"2":{"939":1}}],["requiredenv",{"2":{"865":2}}],["required",{"2":{"865":1,"866":7,"952":10}}],["requiredversion",{"2":{"288":7}}],["requires",{"2":{"482":1}}],["requirejs",{"2":{"298":1,"305":2,"308":1}}],["require",{"2":{"139":1,"203":1,"288":1,"298":1,"304":4,"305":2,"308":1,"333":2,"334":5,"335":2}}],["requests",{"2":{"980":1}}],["requesting",{"2":{"979":1,"980":2,"982":2,"983":1,"995":2}}],["requestinfo",{"2":{"898":1}}],["requestinit",{"2":{"891":1,"898":2}}],["requestbody",{"2":{"866":1}}],["requesttick",{"2":{"818":1,"824":3,"826":1,"834":1}}],["requestanimation",{"2":{"734":1}}],["requestanimationframe",{"2":{"680":1,"686":2,"735":1,"740":2,"826":1}}],["request",{"2":{"71":2,"85":1,"103":1,"130":1,"153":1,"451":1,"866":2,"881":1,"898":1,"980":1}}],["red",{"2":{"962":1,"964":3,"975":1,"979":1,"980":1,"986":2,"989":3}}],["reddit",{"2":{"851":2,"870":1}}],["reduce+reverse",{"2":{"910":1}}],["reducer",{"2":{"341":1}}],["reduce",{"2":{"281":2,"903":1,"909":1,"920":1}}],["reduxprovider",{"2":{"274":1}}],["redux",{"2":{"85":1,"95":1,"274":4,"289":1,"341":6,"642":1}}],["redis",{"2":{"117":1,"163":1,"166":1,"167":1,"542":1}}],["real",{"2":{"564":1}}],["reason",{"2":{"427":1}}],["reasoning",{"2":{"427":2}}],["readnetworkcapture",{"2":{"865":1}}],["readability",{"2":{"851":1}}],["readablestream",{"0":{"140":1,"141":1},"1":{"141":1,"142":1,"143":1,"144":1},"2":{"105":1,"131":1,"135":4,"140":1,"141":4,"143":5,"155":1,"881":1,"892":1,"899":3}}],["readline",{"2":{"487":1,"489":3}}],["ready",{"2":{"315":4,"750":2,"925":1}}],["readme",{"2":{"290":1,"647":1,"677":1,"706":2,"735":3,"763":2,"790":2,"819":1,"851":4,"882":1,"939":5,"980":2}}],["readonly",{"2":{"247":1,"261":1,"281":11,"777":5,"834":1,"925":11,"951":7}}],["read",{"2":{"141":2,"143":2,"470":2,"478":1,"484":1,"591":1,"594":2,"595":1}}],["reader",{"2":{"141":2,"143":3}}],["reactive",{"2":{"946":1}}],["reactivecontroller",{"2":{"939":1}}],["reactivity",{"2":{"939":1}}],["reactchatstate",{"2":{"917":1}}],["reactdom",{"2":{"668":1}}],["reactquerydevtools",{"2":{"94":2}}],["react",{"0":{"56":1,"57":1,"58":1,"61":1,"90":1,"97":1,"179":1,"427":1},"1":{"57":1,"58":1,"59":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"98":1,"99":1,"100":1,"101":1},"2":{"6":3,"15":1,"16":2,"23":1,"26":1,"27":1,"47":2,"56":2,"57":2,"58":1,"59":7,"61":2,"62":1,"69":2,"74":1,"81":2,"85":5,"91":3,"94":3,"95":1,"96":1,"97":2,"169":5,"170":1,"171":1,"175":2,"178":1,"179":3,"180":3,"203":15,"204":2,"214":1,"216":1,"256":1,"263":1,"274":4,"280":2,"285":1,"288":14,"302":1,"313":1,"326":1,"338":1,"339":2,"341":4,"342":12,"344":4,"414":2,"427":2,"428":1,"429":1,"430":1,"432":2,"433":1,"543":1,"545":1,"553":1,"558":1,"561":2,"562":5,"573":1,"640":1,"642":1,"647":3,"652":1,"658":1,"661":8,"728":1,"813":1,"901":1,"902":1,"904":1,"906":2,"907":1,"908":3,"909":2,"917":5,"923":1,"926":1,"931":2,"933":1,"934":1,"935":1,"936":3,"938":1,"939":16,"941":1,"942":1,"959":2,"960":4,"962":1,"963":1,"964":2,"965":9,"967":2,"968":2,"970":1,"971":5,"991":1,"1001":1}}],["retained",{"2":{"673":1,"675":1}}],["retrieval",{"2":{"411":1}}],["retriableerror",{"2":{"144":1,"879":2}}],["retrycount++",{"2":{"146":1,"150":1}}],["retrycount",{"2":{"146":3,"150":4}}],["retry",{"2":{"94":1,"109":1,"146":1,"150":2,"330":5,"892":2,"898":1,"899":2}}],["returns",{"2":{"150":1,"835":8,"898":1,"899":3,"945":2}}],["return",{"2":{"14":2,"15":3,"16":3,"69":1,"70":1,"71":1,"74":1,"85":3,"87":2,"88":2,"89":2,"91":3,"94":1,"95":1,"96":3,"144":2,"146":1,"147":2,"148":1,"149":1,"150":4,"153":2,"154":4,"160":1,"163":3,"164":1,"184":1,"185":3,"187":2,"188":1,"194":1,"203":1,"223":2,"230":3,"231":5,"232":3,"238":2,"246":2,"248":3,"254":1,"258":1,"259":2,"260":1,"261":2,"263":1,"265":1,"266":1,"267":3,"268":1,"269":1,"281":11,"288":2,"289":4,"295":2,"300":1,"301":1,"305":1,"310":1,"315":4,"319":1,"324":3,"328":2,"330":1,"489":1,"685":2,"790":1,"798":3,"879":2,"959":1,"960":1,"962":1,"964":2}}],["re",{"0":{"312":1},"2":{"91":1,"819":1,"941":1}}],["resize",{"2":{"676":1,"677":1,"719":1,"740":1,"750":1,"785":1,"798":1}}],["resource",{"2":{"939":1}}],["resources",{"2":{"631":2,"677":1}}],["resolution",{"2":{"451":1,"790":1}}],["resolvedprops",{"2":{"941":1}}],["resolvedtimer>",{"2":{"834":1}}],["resolveandbind",{"2":{"941":1,"946":1}}],["resolvelanguagemodel",{"2":{"912":1,"915":1}}],["resolveplugin",{"2":{"656":1}}],["resolver│",{"2":{"858":1}}],["resolverenderer",{"2":{"646":1,"649":1,"652":2}}],["resolver",{"2":{"280":1,"342":1,"851":1,"858":1}}],["resolvers",{"2":{"280":1}}],["resolvejsonmodule",{"2":{"203":1,"204":2}}],["resolve",{"2":{"141":1,"160":4,"163":2,"164":2,"216":2,"330":2,"334":1,"647":1,"860":1,"891":1,"898":1,"899":1}}],["resume",{"2":{"482":1,"485":1,"486":1,"489":1,"740":1,"819":1,"821":1,"825":2,"826":1,"834":2}}],["result可直接返回",{"2":{"187":1}}],["result",{"0":{"246":1},"2":{"160":2,"163":3,"164":2,"187":2,"227":1,"234":4,"244":1,"246":10,"250":1,"262":6,"263":2,"305":2,"482":1,"483":2,"486":2,"488":1,"915":1,"918":1,"925":2,"927":1}}],["resettime",{"2":{"834":1}}],["reset",{"2":{"663":1,"686":2,"692":1,"712":1,"818":1,"825":3,"834":1,"939":1}}],["researcher",{"2":{"416":1,"470":2,"471":4,"472":2,"475":1}}],["research",{"0":{"416":1},"2":{"467":2,"471":2,"472":1,"474":1,"476":1,"512":1,"518":4,"790":2}}],["reservestock",{"2":{"281":1}}],["reselect",{"2":{"95":1,"341":1}}],["restaurant",{"2":{"939":3,"954":1,"955":1}}],["restart",{"2":{"818":1,"825":2,"834":1}}],["restoredata",{"2":{"708":2,"719":1}}],["restful",{"2":{"98":1,"100":1,"103":1,"342":2}}],["rest",{"2":{"83":1,"342":1}}],["res",{"2":{"69":2,"71":2,"85":2,"87":5,"91":2,"139":6,"163":5}}],["responsepart",{"2":{"939":1,"941":1,"947":3}}],["responsehandler",{"2":{"907":1}}],["responses",{"2":{"866":6,"912":1}}],["response",{"2":{"14":6,"103":1,"130":1,"141":5,"144":6,"150":3,"160":2,"163":2,"164":3,"255":1,"260":4,"280":2,"879":6,"881":1,"891":2,"898":2,"917":1,"939":1}}],["renderorder",{"2":{"777":1}}],["renderobject",{"2":{"763":1,"766":1,"768":1,"777":4}}],["renderobjects",{"2":{"762":1,"765":1,"768":1}}],["rendercontext",{"2":{"768":1,"777":2}}],["renderpipeline",{"2":{"763":1}}],["rendertarget3d",{"2":{"763":1}}],["rendertarget",{"2":{"763":1,"777":3}}],["rendertopipeablestream",{"2":{"57":1}}],["rendertostring",{"2":{"26":2,"27":1,"57":1}}],["renderlist",{"2":{"762":2,"763":1,"765":1,"766":1,"768":1}}],["renderframe",{"2":{"749":1}}],["renderable",{"2":{"762":1}}],["renderabledomelement",{"2":{"735":1}}],["renderableelement",{"2":{"734":1,"735":1}}],["renderitem",{"2":{"706":1,"720":1}}],["rendering",{"2":{"22":1,"26":1,"63":2,"676":2,"712":1,"938":1,"939":1}}],["renderedframe",{"2":{"749":1}}],["rendered",{"2":{"706":1}}],["renderertype",{"2":{"749":3,"750":2}}],["rendererclass",{"2":{"741":2,"749":1}}],["rendererconfig",{"2":{"652":4,"661":1,"662":1}}],["rendererresolver",{"2":{"662":1}}],["rendererprops",{"2":{"661":1}}],["rendererprops>",{"2":{"661":3}}],["rendererbasicconfig",{"2":{"661":2}}],["rendererevent>",{"2":{"661":1}}],["rendererevent",{"2":{"654":2,"661":1}}],["rendererenv",{"2":{"647":1,"661":1,"662":1}}],["renderersettingsfortype",{"2":{"750":1}}],["renderersettings",{"2":{"750":1}}],["renderersmanager",{"2":{"734":1,"735":1,"737":1,"741":2}}],["rendererstypemap",{"2":{"649":1,"652":2}}],["rendererstore",{"2":{"646":1,"649":1,"650":3,"653":1}}],["renderers",{"2":{"646":1,"647":3,"649":1,"650":1,"652":2,"725":1,"735":1,"737":4,"741":1,"763":2,"938":2,"939":3}}],["renderer",{"0":{"741":1,"768":1},"2":{"15":1,"641":1,"645":2,"646":2,"647":2,"649":1,"652":4,"656":1,"661":3,"705":2,"706":1,"719":1,"734":1,"738":2,"741":4,"746":1,"749":2,"750":2,"754":1,"761":2,"762":3,"763":2,"765":2,"766":1,"768":4,"774":1,"777":6,"782":5,"939":1,"941":1}}],["render",{"0":{"827":1},"2":{"23":1,"170":1,"640":2,"647":3,"649":3,"652":1,"658":1,"661":1,"668":3,"705":2,"706":2,"762":1,"765":2,"774":1,"777":2,"778":1,"782":1,"817":1,"818":2,"819":2,"827":7,"830":1,"831":1,"939":1,"941":1,"948":1,"980":1}}],["模态框",{"2":{"939":1}}],["模态框等",{"2":{"178":1}}],["模糊",{"2":{"677":1,"730":1,"988":1}}],["模糊的指令只会带来模糊的结果",{"2":{"532":1}}],["模糊的需求描述只会让",{"2":{"177":1}}],["模板中充斥着",{"2":{"970":1}}],["模板极其干净",{"2":{"965":1}}],["模板代码极其清爽",{"2":{"964":1}}],["模板生命周期管理",{"2":{"939":1}}],["模板生态丰富",{"2":{"515":1}}],["模板管理系统",{"2":{"939":1}}],["模板测试",{"2":{"777":1}}],["模板方法模式",{"2":{"734":1,"768":1}}],["模板方法",{"2":{"680":1,"910":1}}],["模板片段",{"2":{"677":1}}],["模板变量",{"2":{"655":1}}],["模板示例",{"2":{"573":1}}],["模板",{"2":{"442":1,"677":1,"939":2,"980":1}}],["模板组件",{"2":{"274":1}}],["模板引擎",{"2":{"6":1,"646":1,"647":1}}],["模块功能说明文档",{"2":{"980":3}}],["模块导入",{"2":{"960":1}}],["模块导出",{"2":{"851":1}}],["模块导出入口",{"2":{"851":1}}],["模块统一入口",{"2":{"939":1}}],["模块入口",{"2":{"883":1,"939":5}}],["模块入口文件",{"2":{"882":1}}],["模块内部通过",{"2":{"821":1}}],["模块内部的元素之间联系紧密",{"2":{"328":1}}],["模块输出",{"2":{"819":1}}],["模块之间的依赖是单向的",{"2":{"788":1}}],["模块之间的依赖关系尽可能简单",{"2":{"328":1}}],["模块格式",{"2":{"759":1}}],["模块进行坐标转换和命中检测",{"2":{"684":1}}],["模块五",{"0":{"656":1,"686":1,"715":1,"744":1,"772":1,"799":1,"828":1,"948":1,"989":1}}],["模块四",{"0":{"655":1,"685":1,"714":1,"743":1,"771":1,"798":1,"827":1,"947":1,"988":1}}],["模块三",{"0":{"654":1,"684":1,"713":1,"742":1,"770":1,"797":1,"826":1,"946":1,"987":1}}],["模块二",{"0":{"653":1,"683":1,"712":1,"741":1,"769":1,"796":1,"825":1,"945":1,"986":1}}],["模块一",{"0":{"652":1,"682":1,"711":1,"740":1,"768":1,"795":1,"824":1,"944":1,"985":1}}],["模块依赖与调用关系",{"0":{"648":1,"678":1,"707":1,"736":1,"764":1,"791":1,"820":1,"852":1,"911":1,"940":1,"981":1},"1":{"649":1,"650":1,"679":1,"680":1,"708":1,"709":1,"737":1,"738":1,"765":1,"766":1,"792":1,"793":1,"821":1,"822":1,"853":1,"854":1,"855":1,"856":1,"912":1,"913":1,"941":1,"942":1,"982":1,"983":1}}],["模块2",{"2":{"573":1}}],["模块1",{"2":{"573":1}}],["模块是",{"2":{"412":1}}],["模块版本管理",{"0":{"331":1}}],["模块名称",{"2":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"740":1,"741":1,"742":1,"743":1,"744":1,"768":1,"769":1,"770":1,"771":1,"772":1,"824":1,"825":1,"826":1,"827":1,"828":1,"944":1,"945":1,"946":1,"947":1,"948":1,"985":1,"986":1,"987":1,"988":1,"989":1}}],["模块名",{"2":{"330":1,"858":1,"859":1}}],["模块文件名",{"2":{"330":1}}],["模块文件存放在磁盘上",{"2":{"304":1}}],["模块不是拆得越细越好",{"2":{"329":1}}],["模块不应成为功能的",{"2":{"327":1}}],["模块粒度设计",{"0":{"329":1}}],["模块只关心",{"2":{"328":1}}],["模块扩展",{"0":{"325":1}}],["模块赋予类型能力",{"2":{"321":1}}],["模块实现它时",{"2":{"319":1}}],["模块代码只会在首次加载时执行一次",{"2":{"314":1}}],["模块执行逻辑",{"0":{"314":1}}],["模块加载机制",{"0":{"334":1}}],["模块加载失败",{"2":{"313":1}}],["模块加载完成后执行",{"2":{"305":1}}],["模块加载器",{"2":{"203":1}}],["模块在首次加载后会被缓存",{"2":{"304":1}}],["模块在代码执行到",{"2":{"304":1}}],["模块间边界清晰",{"2":{"297":1}}],["模块拥有独立的作用域",{"2":{"297":1}}],["模块与模块化的基础概念",{"0":{"296":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1}}],["模块联邦是",{"2":{"288":1}}],["模块联邦",{"0":{"288":1},"2":{"287":1}}],["模块定义一个接口",{"2":{"319":1}}],["模块定义",{"2":{"275":1}}],["模块化的技术",{"2":{"960":1}}],["模块化的标准",{"2":{"298":1}}],["模块化导入",{"0":{"841":1}}],["模块化导出装饰器",{"2":{"324":1}}],["模块化",{"2":{"570":1,"965":1}}],["模块化规则文件",{"2":{"570":1}}],["模块化规则",{"0":{"575":1},"1":{"576":1,"577":1,"578":1},"2":{"570":1}}],["模块化规范的演进本质上是",{"2":{"309":1}}],["模块化规范全景图",{"2":{"272":1,"298":1}}],["模块化资源包",{"2":{"547":1}}],["模块化和分层架构等强主张特性",{"2":{"344":2}}],["模块化不应是开发的负担",{"2":{"337":1}}],["模块化不再只是文件的拆分",{"2":{"319":1}}],["模块化架构",{"0":{"336":1},"2":{"814":1}}],["模块化新特性",{"0":{"323":1},"1":{"324":1,"325":1}}],["模块化声明文件",{"2":{"321":1}}],["模块化实现",{"2":{"319":1}}],["模块化解决了代码组织问题后",{"2":{"317":1}}],["模块化从来不仅仅是",{"2":{"303":1}}],["模块化通过",{"2":{"297":1}}],["模块化是一种将软件分解为独立",{"2":{"296":1}}],["模块化设计将继续演进",{"2":{"293":1}}],["模块化设计是构建大型",{"2":{"293":1}}],["模块化设计需要遵循以下原则",{"2":{"286":1}}],["模块化与代码维护以及未来发展趋势",{"2":{"272":1}}],["模块化编程的终点",{"2":{"332":1}}],["模块化编程初体验",{"0":{"295":1}}],["模块化编程应运而生",{"2":{"294":1}}],["模块化编程梳理与总结",{"2":{"272":1}}],["模块化编程原则梳理与总结",{"2":{"272":1}}],["模块化编程原则与最佳实践",{"2":{"272":1}}],["模块化编程编程初体验与基础介绍",{"2":{"272":1}}],["模块化编程是现代",{"2":{"272":1}}],["模块的功能应当能用一句话清晰描述",{"2":{"329":1}}],["模块的粒度应该适中",{"2":{"329":1}}],["模块的调用",{"2":{"203":1}}],["模块的根据点",{"2":{"203":1}}],["模块解析",{"2":{"204":3}}],["模块解析策略",{"2":{"203":1}}],["模块解析选项",{"2":{"203":1}}],["模块系统",{"2":{"203":1,"215":1}}],["模块",{"2":{"182":1,"203":1,"221":1,"275":1,"320":1,"322":1,"412":1,"506":1,"568":1,"763":1,"789":1,"883":1}}],["模拟浏览器的",{"2":{"799":1}}],["模拟数据库保存操作",{"2":{"269":1}}],["模拟函数",{"2":{"225":2}}],["模拟检查数据库状态",{"2":{"163":1}}],["模拟任务进度推送",{"2":{"153":1}}],["模拟",{"2":{"112":1,"163":1,"260":1,"738":1,"744":2,"962":1}}],["模型思维固然能帮助我们很好地实践",{"2":{"1009":1}}],["模型专用测试",{"2":{"980":1}}],["模型接口",{"2":{"951":1}}],["模型单元测试",{"2":{"939":1}}],["模型注册中心",{"0":{"919":1}}],["模型解析",{"2":{"912":2,"915":1}}],["模型实例查找",{"2":{"910":1}}],["模型打包",{"2":{"763":1}}],["模型资源",{"2":{"763":1}}],["模型变换矩阵",{"2":{"763":1}}],["模型工具",{"2":{"706":1}}],["模型精炼与对齐",{"2":{"551":1}}],["模型选型",{"0":{"549":1}}],["模型最全",{"2":{"523":1}}],["模型统一入口",{"2":{"523":1}}],["模型市场",{"2":{"523":2}}],["模型驱动",{"2":{"515":1}}],["模型在特定细分领域往往处于",{"2":{"441":1}}],["模型在极短时间内",{"2":{"124":1}}],["模型上下文协议",{"0":{"439":1},"2":{"439":1}}],["模型容易因为每一步都要思考而逐渐忘记",{"2":{"430":1}}],["模型会回顾生成的内容",{"2":{"426":1}}],["模型切换为",{"2":{"426":1}}],["模型产出初步的解决方案",{"2":{"426":1}}],["模型走一步看一步",{"2":{"414":1}}],["模型生成结构化指令",{"2":{"411":1}}],["模型本身是通用的引擎",{"2":{"367":1}}],["模型已经具备",{"2":{"367":1}}],["模型理解力",{"2":{"352":1}}],["模型层",{"2":{"275":1,"704":1,"705":1}}],["模型",{"2":{"81":1,"340":1,"353":1,"521":2,"522":1,"523":1,"901":1,"938":1}}],["模式配置解析",{"2":{"795":1}}],["模式检查",{"2":{"790":2}}],["模式可自动生成多章节专题报告",{"2":{"518":1}}],["模式二",{"0":{"484":1}}],["模式一",{"0":{"483":1}}],["模式则通过任务分解",{"2":{"468":1}}],["模式并非排斥",{"2":{"431":1}}],["模式后",{"2":{"428":1}}],["模式将错误提升为一等公民",{"2":{"246":1}}],["模式让错误处理进入类型系统",{"2":{"227":1,"250":1}}],["模式进行类型检查",{"2":{"203":1}}],["模式批量生成",{"2":{"178":1}}],["模式适用于多数应用的功能迭代开发阶段",{"2":{"178":1}}],["模式遵循一个五步闭环",{"2":{"177":1}}],["模式的",{"2":{"246":1}}],["模式的适用场景",{"0":{"178":1}}],["模式的实践要点可归纳为",{"2":{"177":1}}],["模式的核心流程与实践要点",{"0":{"177":1}}],["模式的应用层协议",{"2":{"103":1}}],["模式下的路由更新",{"2":{"662":1}}],["模式下",{"2":{"92":1,"179":1,"415":1,"430":1}}],["模式",{"0":{"13":1,"246":1,"452":1,"453":1,"454":1,"455":1},"1":{"453":1,"454":1,"455":1},"2":{"36":1,"117":1,"141":1,"177":1,"203":2,"452":1,"477":1,"512":1,"661":1,"682":1,"700":1,"702":1,"711":1,"719":1,"734":1,"882":1,"901":1,"910":1,"971":1}}],["功能开发计划",{"2":{"980":1}}],["功能测试执行器",{"2":{"980":1}}],["功能测试",{"2":{"980":1}}],["功能完结",{"2":{"980":1}}],["功能单一的",{"2":{"962":1}}],["功能单一且可复用的模块",{"2":{"294":1}}],["功能的脚本语言",{"2":{"958":1}}],["功能的全栈开发者和前端开发者",{"2":{"902":1}}],["功能的简单叠加",{"2":{"59":1}}],["功能路由",{"2":{"851":1}}],["功能扩展层",{"2":{"817":1,"818":2}}],["功能查询",{"2":{"777":1}}],["功能模块",{"2":{"636":1}}],["功能迭代",{"2":{"567":1}}],["功能可将任意资料转为两人播客式对话",{"2":{"515":1}}],["功能定位",{"2":{"411":1}}],["功能产品",{"0":{"367":1}}],["功能前",{"2":{"366":1}}],["功能带来留存",{"2":{"366":1}}],["功能很全",{"2":{"366":1}}],["功能设计",{"2":{"366":1}}],["功能更全面",{"2":{"345":1}}],["功能主义大而全",{"2":{"342":1}}],["功能",{"2":{"193":1,"207":1,"208":1,"209":1,"217":1,"383":1,"708":1,"790":1,"987":1}}],["功能实现评论登录",{"2":{"11":1}}],["功能全面",{"2":{"7":1}}],["友好几何体",{"2":{"763":1}}],["友好的增量更新",{"2":{"935":1}}],["友好的欢迎用户",{"2":{"506":1}}],["友好的",{"2":{"340":1}}],["友好度",{"2":{"45":1,"971":1}}],["友好",{"2":{"11":1,"45":4,"80":1,"311":1,"322":1,"701":1,"759":1,"814":1,"815":1,"841":1,"845":1,"848":1,"881":1,"967":1}}],["自身厨艺进一步获得了提升机会",{"2":{"1047":1}}],["自接触互联网后",{"2":{"1031":1}}],["自大学时代开始",{"2":{"1020":1}}],["自去年",{"2":{"1019":1}}],["自从再次深入学习",{"2":{"1018":1}}],["自由式阅读",{"2":{"1030":1}}],["自由",{"2":{"1005":1}}],["自由发挥",{"2":{"967":1}}],["自适应工作流",{"2":{"934":1}}],["自建",{"2":{"815":1}}],["自建分词器",{"2":{"785":1}}],["自建方案",{"2":{"7":1}}],["自实现",{"2":{"730":1}}],["自研的着色语言",{"2":{"770":1}}],["自研着色语言",{"2":{"761":1}}],["自研节点化着色语言",{"2":{"758":1}}],["自研表达式",{"2":{"655":1}}],["自研表达式引擎",{"2":{"641":1}}],["自研",{"2":{"641":1,"642":1,"702":1,"759":1}}],["自认是个",{"2":{"612":1}}],["自圆其说时",{"2":{"610":1}}],["自己做",{"2":{"1045":1}}],["自己写不出",{"2":{"1042":1}}],["自己可有花些时间来反思",{"2":{"1026":1}}],["自己能很好地管理时间",{"2":{"1020":1}}],["自己的思考沉淀到统一知识库",{"2":{"515":1}}],["自己实现简单的判空逻辑",{"2":{"194":1}}],["自我更新等多个方面",{"2":{"1006":1}}],["自我审查",{"2":{"988":1}}],["自我纠错",{"2":{"426":1}}],["自我反思",{"0":{"426":1}}],["自我反思则通过",{"2":{"409":1}}],["自我批评",{"2":{"408":1}}],["自主执行代码库任务",{"2":{"567":1}}],["自主",{"2":{"567":1}}],["自主浏览文档",{"2":{"567":1}}],["自主读取代码库",{"2":{"567":1}}],["自主处理的资深开发者或团队",{"2":{"567":1}}],["自主重构",{"2":{"564":1}}],["自主多文件重构",{"2":{"564":1}}],["自主完成工程任务",{"0":{"566":1},"1":{"567":1,"568":1},"2":{"559":1}}],["自主工程师",{"2":{"559":1,"567":1,"569":1}}],["自主工作流执行",{"2":{"408":1}}],["自主找",{"0":{"484":1}}],["自主任务处理",{"2":{"482":1}}],["自主规划与持久化状态管理等核心技术挑战的典型代表",{"2":{"419":1}}],["自主洞察环境变化",{"2":{"403":1}}],["自主进化者",{"2":{"403":1}}],["自主性",{"2":{"402":1}}],["自主决策并执行任务的智能实体",{"2":{"402":1}}],["自然要向前看",{"2":{"1043":1}}],["自然要启动一些改变尝试",{"2":{"1043":1}}],["自然要继续寻找更长远的解决方法",{"2":{"1023":1}}],["自然人也就发生了异化",{"2":{"1022":1}}],["自然",{"2":{"1009":1}}],["自然能渐渐窥见门道",{"2":{"608":1}}],["自然语言指令",{"2":{"976":1}}],["自然语言对话改代码",{"2":{"564":1}}],["自然语言",{"2":{"530":1}}],["自然也能尝试使用",{"2":{"1006":1}}],["自然也不离外",{"2":{"1005":1}}],["自然也不需要下载和执行这些代码",{"2":{"61":1}}],["自然也要用",{"2":{"499":1}}],["自然会吸引到那些愿意通过项目互助协作",{"2":{"380":1}}],["自带强类型的",{"2":{"342":1}}],["自下而上的原子化状态管理",{"2":{"341":1}}],["自下而上的原子化状态",{"2":{"341":1}}],["自上而下的全局状态管理",{"2":{"341":1}}],["自上而下的全局",{"2":{"341":1}}],["自行修正",{"2":{"177":2}}],["自行配置构建和部署流程",{"2":{"59":1}}],["自顶向下",{"2":{"171":1}}],["自治",{"0":{"170":1}}],["自",{"2":{"103":1,"1000":1,"1005":1}}],["自定义主题",{"2":{"1003":1}}],["自定义命令",{"2":{"978":1}}],["自定义命令和权限设置策略",{"2":{"570":1}}],["自定义插件",{"2":{"965":1}}],["自定义变量来定义品牌阶梯色的",{"2":{"962":1}}],["自定义钩子",{"2":{"939":1}}],["自定义组件客户端",{"2":{"939":1}}],["自定义组件目录示例",{"2":{"939":1}}],["自定义目录测试",{"2":{"939":1}}],["自定义指令",{"2":{"939":1}}],["自定义错误处理和重试",{"0":{"879":1}}],["自定义方法",{"2":{"874":1,"889":1}}],["自定义关键帧缓动",{"2":{"819":1}}],["自定义渲染",{"2":{"810":1}}],["自定义渲染器",{"2":{"650":1}}],["自定义布局引擎",{"2":{"784":1}}],["自定义表达式引擎",{"2":{"731":1}}],["自定义图表",{"2":{"706":1}}],["自定义实现",{"2":{"682":1}}],["自定义函数调用器",{"2":{"939":1}}],["自定义函数",{"2":{"642":1}}],["自定义斜杠命令",{"0":{"579":1},"1":{"580":1,"581":1,"582":1,"583":1},"2":{"570":1,"979":1,"980":1}}],["自定义装饰器",{"2":{"275":1}}],["自定义类型守卫",{"2":{"231":1}}],["自定义请求头",{"2":{"141":2,"144":1}}],["自定义",{"2":{"85":1,"135":2,"142":1,"155":1,"706":2,"860":1,"939":2,"980":1}}],["自定义字体导致",{"2":{"72":1}}],["自动执行",{"2":{"999":1}}],["自动推导出必须输出的组件",{"2":{"971":1}}],["自动推断为",{"2":{"260":1}}],["自动保留后者",{"2":{"964":1}}],["自动移除无用的",{"2":{"959":1}}],["自动通知订阅者",{"2":{"951":1}}],["自动适配组件属性",{"2":{"935":1}}],["自动断开",{"2":{"889":1}}],["自动修复格式问题",{"2":{"930":1}}],["自动修复技能",{"2":{"851":1}}],["自动修正",{"2":{"786":1}}],["自动提取",{"2":{"836":1}}],["自动提交等完整工程周期",{"2":{"568":1}}],["自动播放",{"2":{"834":1}}],["自动注册到当前作用域",{"2":{"825":1}}],["自动注入",{"2":{"652":1}}],["自动识别属性类型",{"2":{"946":1}}],["自动识别",{"2":{"814":1}}],["自动识别当前操作系统环境",{"2":{"414":1}}],["自动部署",{"2":{"790":1}}],["自动检测当前浏览器的断行特性",{"2":{"796":1}}],["自动检测引擎",{"2":{"786":1}}],["自动检测代码中的安全漏洞和潜在风险",{"2":{"586":1}}],["自动回退到",{"2":{"778":1}}],["自动递增",{"2":{"777":1}}],["自动启停循环",{"2":{"740":1}}],["自动排列算法",{"2":{"706":1}}],["自动排版与配图",{"2":{"515":1}}],["自动补全和类型检查",{"2":{"701":1}}],["自动绘制",{"2":{"689":1}}],["自动发布流程",{"2":{"677":1}}],["自动传递给",{"2":{"653":1}}],["自动将类名",{"2":{"960":1}}],["自动将函数调用转换为节点图",{"2":{"770":1}}],["自动将",{"2":{"640":1}}],["自动介入",{"2":{"588":1}}],["自动触发",{"2":{"999":1}}],["自动触发的工作流",{"0":{"584":1},"1":{"585":1,"586":1,"587":1,"588":1},"2":{"570":2}}],["自动触发项目列表和概览数据的后台刷新",{"2":{"92":1}}],["自动记忆和会话历史",{"2":{"570":1}}],["自动完成功能开发并提",{"2":{"568":1}}],["自动完成文献检索",{"2":{"406":1}}],["自动串联多步任务",{"2":{"565":2}}],["自动导入依赖",{"2":{"564":1}}],["自动规划",{"2":{"564":1}}],["自动还原其界面并生成对应前端代码",{"2":{"561":1}}],["自动切换",{"2":{"523":1}}],["自动降级",{"2":{"523":1}}],["自动多轮报告",{"2":{"518":1}}],["自动打标签建图谱",{"2":{"515":1}}],["自动摘要与知识点提取",{"2":{"515":1}}],["自动摘要与知识点抽取",{"2":{"515":1}}],["自动填写与内容总结",{"2":{"515":1}}],["自动整理与知识图谱",{"2":{"515":1}}],["自动整理生成知识卡片与图谱",{"2":{"515":1}}],["自动总结",{"2":{"515":1}}],["自动标签与归纳",{"2":{"514":1}}],["自动处理对话历史和工作状态",{"2":{"478":1}}],["自动分解为",{"2":{"685":1}}],["自动分析并修复",{"2":{"455":1}}],["自动分发",{"2":{"234":1}}],["自动进行代码审查",{"2":{"438":1}}],["自动申请",{"2":{"414":1}}],["自动追踪账单",{"2":{"407":1}}],["自动化处理浏览器兼容性",{"2":{"969":1}}],["自动化工作流等",{"2":{"902":1}}],["自动化研究相关",{"2":{"851":1}}],["自动化脚本",{"2":{"790":1}}],["自动化构建脚本",{"2":{"735":1}}],["自动化构建",{"2":{"735":1}}],["自动化评测驱动",{"2":{"550":1}}],["自动化三合一",{"2":{"515":1}}],["自动化测试",{"2":{"418":1,"763":1}}],["自动化等级",{"2":{"403":1}}],["自动化程度的阶梯式跨越",{"0":{"403":1}}],["自动化",{"0":{"378":1},"2":{"343":1,"418":1,"455":1,"570":1,"859":1,"976":1}}],["自动化开发",{"2":{"177":2}}],["自动收窄为",{"2":{"230":3}}],["自动生成数据",{"2":{"790":1}}],["自动生成符合规范的",{"2":{"581":1}}],["自动生成一个初始版本的",{"2":{"574":1}}],["自动生成摘要",{"2":{"515":1}}],["自动生成覆盖率报告",{"2":{"225":1}}],["自动生成",{"2":{"208":1,"685":1,"763":1}}],["自动包含",{"2":{"203":1}}],["自动运行验证",{"2":{"177":1}}],["自动取消订阅",{"2":{"154":1}}],["自动在页面隐藏时断开连接",{"2":{"874":1}}],["自动在页面隐藏时断开",{"2":{"142":1}}],["自动重订阅",{"2":{"946":1}}],["自动重连",{"2":{"110":1,"138":2,"881":1}}],["自动重新获取",{"2":{"91":1}}],["自动驾驶浪潮中把稳方向盘的核心资产",{"2":{"359":1}}],["自动驾驶",{"0":{"110":1}}],["自动缓存管理",{"2":{"91":1}}],["自动缓存请求结果",{"2":{"78":1}}],["自动转换",{"2":{"342":1}}],["自动转",{"2":{"72":1}}],["自动做了什么",{"2":{"72":1}}],["自动构建",{"2":{"11":1,"723":1}}],["自托管",{"2":{"59":1,"568":1}}],["搭建而成",{"2":{"1003":1}}],["搭建完善的评估体系",{"2":{"538":1}}],["搭建内部性能看板",{"2":{"528":1}}],["搭建一套专属的",{"2":{"491":1}}],["搭建一个支持内容管理",{"2":{"10":1}}],["搭建",{"2":{"462":1,"509":1,"971":1}}],["搭建系统的骨架",{"0":{"385":1}}],["搭建博客网站",{"0":{"10":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1}}],["以万物为刍狗",{"2":{"1042":1}}],["以人为本的模式对于在家庭",{"2":{"1006":1}}],["以全栈技术为手段",{"2":{"1000":1}}],["以全局规划见长",{"2":{"414":1}}],["以此类推",{"2":{"1038":1}}],["以此作为全项目的",{"2":{"966":1}}],["以此来迫使自己真正透彻地掌握知识",{"2":{"610":1}}],["以声明式数据格式替代可执行代码",{"2":{"933":1}}],["以并行数组方式存储段文本",{"2":{"795":1}}],["以为",{"2":{"622":1}}],["以目录形式组织",{"2":{"547":1}}],["以前需要专门排期的重构工作",{"2":{"528":1}}],["以安全",{"2":{"511":1}}],["以夸张手法强化空间疏离感",{"2":{"507":1}}],["以曹植",{"2":{"505":1,"508":1}}],["以供后续使用",{"2":{"486":1}}],["以平衡响应速度与成本",{"2":{"481":1}}],["以支持复杂的研究和决策任务",{"2":{"470":1}}],["以规避问题",{"2":{"423":1}}],["以便它能够正确生成所需的",{"2":{"962":1}}],["以便",{"2":{"422":1}}],["以便回滚",{"2":{"96":1}}],["以一个复杂的调研流程为例",{"2":{"416":1}}],["以极低的成本去解决一个具体的社会问题",{"2":{"381":1}}],["以极高的品味去甄别筛选",{"2":{"362":1}}],["以项目为单位的拖延",{"2":{"361":1}}],["以小见大的行动力",{"0":{"361":1}}],["以更少投入获得更大收益",{"2":{"342":1}}],["以领域为中心",{"2":{"277":1}}],["以减少人工",{"2":{"219":1}}],["以获得最佳类型安全",{"2":{"203":1}}],["以最纯粹的方式利用工具完成特定的子任务",{"2":{"429":1}}],["以最清晰的思路面对挑战",{"2":{"201":1}}],["以最简洁的方式解决问题",{"2":{"201":1}}],["以最小的",{"2":{"98":1}}],["以上仅仅是结合个人实践的记录",{"2":{"1049":1}}],["以上的工作",{"2":{"405":1}}],["以上",{"2":{"166":1}}],["以实现跨节点的",{"2":{"117":1}}],["以下",{"2":{"522":1}}],["以下三类问题场景",{"2":{"465":1}}],["以下简称",{"2":{"357":1}}],["以下五种收窄方式覆盖绝大多数场景",{"2":{"231":1}}],["以下从六个核心场景展开",{"2":{"182":1}}],["以下从多个维度进行对比分析",{"2":{"97":1}}],["以下为基于",{"2":{"163":1}}],["以下是实战中必须拉响警报的红线",{"2":{"970":1}}],["以下是通过",{"2":{"637":1}}],["以下是我们在比赛中使用的核心",{"2":{"494":1}}],["以下是我结合",{"2":{"357":1}}],["以下是推荐的模块化配置模板",{"2":{"322":1}}],["以下是几种常见的通信方案",{"2":{"289":1}}],["以下是几个最常见的场景",{"2":{"256":1}}],["以下是针对不同项目类型的推荐配置组合",{"2":{"204":1}}],["以下是针对常见项目类型的推荐配置组合",{"2":{"204":1}}],["以下是完整示例",{"2":{"153":1}}],["以下是一个完整的微前端项目目录结构示例",{"2":{"290":1}}],["以下是一个完整的示例",{"2":{"138":1}}],["以下是一个基于",{"2":{"274":1,"275":1,"280":1}}],["以下是一个生产环境常用的",{"2":{"203":1}}],["以下是一个简化后的任务流订阅客户端实现",{"2":{"150":1}}],["以下是核心实现",{"2":{"141":1}}],["以下是",{"2":{"139":1}}],["以下是主流工具选型推荐",{"2":{"5":1}}],["以完成数据处理并驱动界面更新",{"2":{"83":1}}],["以数据流",{"2":{"74":1}}],["以博客页面为例",{"2":{"70":1}}],["以什么顺序获取",{"2":{"57":1}}],["以组件级拆分",{"2":{"43":1}}],["以阅读为主的场景",{"2":{"33":1}}],["以服务器实时渲染为代价",{"2":{"29":1}}],["以及餐区大概都是做什么饭菜",{"2":{"1048":1}}],["以及其收益",{"2":{"1046":1}}],["以及正常体重应位于什么区间",{"2":{"1044":1}}],["以及戒掉不良生活习惯的注意点",{"2":{"1024":1}}],["以及自己的坚忍硬扛",{"2":{"1022":1}}],["以及一些研究员早年写的博客",{"2":{"1018":1}}],["以及它们之间的关联即可",{"2":{"1015":1}}],["以及上述提到的平衡思维来落地调节回路",{"2":{"1009":1}}],["以及个人在技术浪潮中的成长记录",{"2":{"1002":1}}],["以及构建从",{"2":{"1001":1}}],["以及处理",{"2":{"971":1}}],["以及未来对接智能化",{"2":{"969":1}}],["以及强类型组件封装",{"2":{"965":1}}],["以及响应式数据绑定的完整链路",{"2":{"949":1}}],["以及容错处理",{"2":{"947":1}}],["以及预计算的分块信息",{"2":{"793":1}}],["以及各",{"2":{"742":1}}],["以及基础设施层",{"2":{"733":1}}],["以及知识共享方面",{"2":{"613":1}}],["以及国内模型",{"2":{"567":1}}],["以及国内的",{"2":{"549":1}}],["以及建站初始模板快速搭建",{"2":{"561":1}}],["以及如何在大规模分布式系统上高效部署和运行这些模型",{"2":{"551":1}}],["以及精确到",{"2":{"550":1}}],["以及复杂文档的切块",{"2":{"546":1}}],["以及跨端",{"2":{"542":1}}],["以及对",{"2":{"539":1}}],["以及对接身份认证系统",{"2":{"150":1}}],["以及解读中展现的专业感",{"2":{"509":1}}],["以及从",{"2":{"509":1}}],["以及网络访问",{"2":{"478":1}}],["以及持续进化的前沿工具栈",{"2":{"463":1}}],["以及通过调用外部工具",{"2":{"412":1}}],["以及资产特定性",{"2":{"391":1}}],["以及是什么使它成为最好的",{"2":{"359":1}}],["以及拥有极高的品味",{"2":{"357":1}}],["以及乐观更新",{"2":{"342":1}}],["以及声明文件系统",{"2":{"317":1}}],["以及加载静态图片等",{"2":{"103":1}}],["以及频繁的与服务端的同步",{"2":{"101":1}}],["以及",{"2":{"21":1,"34":1,"102":1,"150":1,"367":1,"417":1,"419":1,"434":1,"525":1,"828":1,"964":1,"1011":1}}],["以",{"0":{"473":1},"1":{"474":1,"475":1},"2":{"10":1,"25":1,"33":1,"38":1,"72":1,"98":1,"155":1,"274":1,"275":1,"505":1,"523":1,"567":1,"899":1,"958":1,"965":1}}],["到生产级系统",{"2":{"1000":1}}],["到元素",{"2":{"738":1}}],["到移动端的全平台一致性展示",{"2":{"699":1}}],["到最终像素呈现在",{"2":{"774":1}}],["到最终屏幕更新",{"2":{"689":1}}],["到最终",{"2":{"659":1}}],["到纳瓦尔的财富与幸福逻辑",{"2":{"603":1}}],["到编辑器里那个如影随形的智能补全伙伴",{"2":{"569":1}}],["到知识图谱",{"0":{"536":1}}],["到哀婉",{"2":{"508":1}}],["到底比普通",{"2":{"503":1}}],["到底需要哪一个",{"0":{"99":1},"1":{"100":1,"101":1}}],["到结构化",{"0":{"503":1},"1":{"504":1,"505":1}}],["到你手里可能水土不服",{"2":{"462":1}}],["到如今能够独立思考",{"2":{"420":1}}],["到成群结队的",{"2":{"413":1}}],["到达领域前沿",{"2":{"358":1}}],["到高内聚低耦合的权衡",{"2":{"332":1}}],["到处运行",{"2":{"308":1}}],["到该分支类型",{"2":{"231":1}}],["到输出",{"2":{"169":1}}],["到后期甚至可以降至每",{"2":{"128":1}}],["到这份静态",{"2":{"58":1}}],["到",{"0":{"10":1,"56":1,"59":1,"349":1,"358":1,"367":1,"368":1,"377":1,"402":1,"420":1,"461":1,"527":1,"528":1,"555":1,"556":1,"558":1,"620":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"57":1,"58":1,"59":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1},"2":{"58":1,"60":1,"132":1,"133":1,"155":1,"156":1,"250":1,"272":1,"298":1,"303":1,"337":1,"367":1,"403":1,"406":2,"477":1,"482":1,"491":2,"503":1,"509":1,"550":2,"557":1,"597":1,"601":1,"602":1,"628":1,"712":1,"923":1,"947":1,"962":1,"1001":4,"1045":1,"1047":1}}],["09",{"0":{"1048":1}}],["0ea5e9",{"2":{"962":1}}],["0xffffff",{"2":{"782":1}}],["0x00ff00",{"2":{"782":1}}],["069",{"2":{"699":1}}],["005",{"2":{"796":1}}],["00d2ff",{"2":{"696":1}}],["0002ms",{"2":{"784":1}}],["000",{"2":{"439":2,"643":1}}],["001",{"2":{"196":1}}],["01",{"2":{"331":4,"782":2}}],["0+",{"0":{"323":1},"1":{"324":1,"325":1},"2":{"317":1,"323":1,"324":1}}],["0",{"0":{"10":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"14":3,"92":1,"105":1,"143":1,"146":1,"150":2,"154":1,"160":1,"163":2,"187":1,"193":1,"194":1,"223":1,"248":1,"258":1,"269":1,"281":2,"288":13,"330":1,"331":4,"477":1,"484":2,"489":1,"506":1,"509":1,"521":2,"523":1,"550":1,"643":2,"650":1,"652":1,"661":3,"666":4,"677":1,"685":1,"699":3,"706":2,"728":1,"757":2,"762":1,"768":1,"778":13,"782":3,"790":5,"796":2,"819":3,"822":1,"828":1,"834":6,"846":2,"860":2,"866":6,"868":2,"892":1,"939":3,"958":1,"959":1,"961":2,"973":1,"980":1}}],["从大佬口中得知他在减体重时尝试过不吃主食",{"2":{"1046":1}}],["从大文件到",{"0":{"106":1}}],["从微信读书上找了本书",{"2":{"1046":1}}],["从微观和宏观角度预判趋势",{"2":{"400":1}}],["从整体来讲",{"2":{"1043":1}}],["从时间维度来看",{"2":{"1030":1}}],["从实践效果来看",{"2":{"1030":1}}],["从笔者的实践来看",{"2":{"1005":1}}],["从基础的",{"2":{"1000":1}}],["从测试开始",{"2":{"989":1}}],["从模糊需求到明确设计",{"2":{"987":1}}],["从需求到合并",{"0":{"991":1}}],["从需求到合并的全流程缺乏自动化编排",{"2":{"973":1}}],["从需要频繁人工干预的",{"2":{"477":1}}],["从根本上消灭了全局样式冲突",{"2":{"960":1}}],["从流中读取字节块",{"2":{"892":1}}],["从engine移除",{"2":{"825":1}}],["从底层到顶层分为四个层次",{"2":{"817":1}}],["从用户调用",{"2":{"774":1}}],["从用户列表中查找特定",{"2":{"259":1}}],["从上到下分为五层",{"2":{"761":1}}],["从像素坐标转换为数据值",{"2":{"719":1}}],["从按钮点击",{"2":{"659":1}}],["从灵感捕获到深度内化",{"2":{"630":1}}],["从内化到输出",{"0":{"629":1}}],["从来都会积极拥抱新的传播工具",{"2":{"613":1}}],["从来不加载这个技能",{"2":{"445":1}}],["从丝绸",{"2":{"613":1}}],["从达利欧的系统化决策",{"2":{"603":1}}],["从皮克斯如何建立允许失败的创意土壤",{"2":{"601":1}}],["从机制拆解到生产实践指南",{"2":{"588":1}}],["从目录结构中",{"2":{"570":1}}],["从硬编码到标准协议与上下文连接",{"0":{"548":1}}],["从手工精雕到",{"0":{"971":1}}],["从手艺人到导演",{"0":{"533":1}}],["从手动内存管理到垃圾回收",{"2":{"525":1}}],["从汇编语言到高级语言",{"2":{"525":1}}],["从硅基流动起步",{"2":{"523":1}}],["从知识输出到视觉呈现",{"2":{"515":1}}],["从惊艳",{"2":{"508":1}}],["从惊叹到复刻的逆向工程",{"0":{"371":1},"1":{"372":1,"373":1,"374":1,"375":1}}],["从形",{"2":{"507":1}}],["从常规",{"0":{"503":1},"1":{"504":1,"505":1}}],["从研发思维到产品直觉",{"0":{"495":1}}],["从研究结果提取指标",{"2":{"471":1}}],["从受众角度来看",{"2":{"492":1}}],["从无状态交互到自主执行",{"0":{"482":1},"1":{"483":1,"484":1}}],["从理论层面看",{"2":{"467":1}}],["从零散指令到可持续工作流",{"0":{"456":1}}],["从零开发一个",{"2":{"429":1}}],["从本质上来讲",{"2":{"442":1}}],["从本文可以看到",{"2":{"271":1}}],["从最简单的",{"2":{"597":1}}],["从最初",{"2":{"569":1}}],["从最初只会吟诗作对的",{"2":{"420":1}}],["从最直观的代码抽离切入",{"2":{"303":1}}],["从一段文字描述到可运行的",{"2":{"561":1}}],["从一个小场景的一个小闭环开始",{"2":{"465":1}}],["从一个人的独角戏",{"2":{"415":1}}],["从一种",{"2":{"309":1}}],["从单兵作战的",{"2":{"413":1}}],["从单一职责的约束",{"2":{"332":1}}],["从搜索引擎",{"2":{"411":1}}],["从观察者到洞察者",{"0":{"389":1}}],["从被动响应到主动",{"0":{"355":1}}],["从团队专注的研究技术方向出发",{"2":{"346":1}}],["从加载机制中理解了性能的边界",{"2":{"337":1}}],["从早期",{"2":{"303":1}}],["从逻辑隔离到类型契约",{"2":{"272":1}}],["从特殊到一般",{"2":{"271":1}}],["从数组中查找第一个匹配项",{"2":{"259":1}}],["从联合中提取特定成员",{"2":{"234":1}}],["从联合中排除特定成员",{"2":{"234":1}}],["从集合的角度来看",{"2":{"229":1}}],["从执行者转变为立法者",{"0":{"176":1},"1":{"177":1,"178":1,"179":1}}],["从父级传入",{"2":{"173":1}}],["从而使自己更好地适应社会",{"2":{"1042":1}}],["从而基于虚拟网络提升服务市场的效率",{"2":{"1041":1}}],["从而划分出几个分类",{"2":{"1031":1}}],["从而真正从本质上解决问题",{"2":{"1007":1}}],["从而跨越",{"2":{"1000":1}}],["从而彻底避免了和其他组件的",{"2":{"960":1}}],["从而彻底消除服务端内部的定时等待",{"2":{"163":1}}],["从而有效解决",{"2":{"959":1}}],["从而向目标逼近",{"2":{"622":1}}],["从而理解",{"2":{"569":1}}],["从而生成生产级代码",{"2":{"557":1}}],["从而大幅提升",{"2":{"547":1}}],["从而在架构层面保证了结果的准确性",{"2":{"493":1}}],["从而在扩展能力的同时",{"2":{"441":1}}],["从而在根源上解决问题",{"2":{"382":1}}],["从而实现真正的混合工作",{"2":{"1040":1}}],["从而实现高度的可维护性和可扩展性",{"2":{"971":1}}],["从而实现极其强大的动态样式能力",{"2":{"959":1}}],["从而实现",{"2":{"959":1}}],["从而实现复杂任务的解耦与并行工作",{"2":{"438":1}}],["从而实现即时性较高的信息更新",{"2":{"161":1}}],["从而逐步解决问题",{"2":{"422":1}}],["从而带来了四个维度的核心优势",{"2":{"415":1}}],["从而吸引用户持续使用",{"2":{"398":1}}],["从而吸引气味相投的粉丝",{"2":{"380":1}}],["从而获得更精准的",{"2":{"369":1}}],["从而构建出稳定可靠的系统",{"2":{"367":1}}],["从而构建出能够准确反映业务需求",{"2":{"276":1}}],["从而降低系统的复杂性",{"2":{"296":1}}],["从而避免了许多潜在的",{"2":{"254":1}}],["从而提供完整的类型安全保障",{"2":{"230":1}}],["从原赋中选取",{"2":{"508":1}}],["从原生",{"2":{"155":1}}],["从原理",{"2":{"102":1}}],["从组件到用户",{"2":{"59":1}}],["从框架设计哲学到它给我们的选型启示",{"2":{"48":1}}],["从构建链路到运行时模型",{"2":{"48":1}}],["从未需要一台应用服务器",{"2":{"48":1}}],["从源代码到最终呈现在用户眼前",{"2":{"21":1}}],["从博客到电商",{"0":{"18":1}}],["从",{"0":{"10":1,"54":1,"56":1,"59":1,"349":1,"358":1,"367":1,"376":1,"377":1,"402":1,"420":1,"461":1,"527":1,"528":1,"532":1,"535":1,"536":1,"555":1,"556":1,"558":1,"620":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"57":1,"58":1,"59":1},"2":{"133":1,"156":1,"203":1,"234":1,"272":1,"298":1,"308":2,"309":1,"316":1,"367":1,"443":1,"476":1,"491":1,"503":1,"558":1,"630":1,"642":1,"655":1,"658":1,"684":1,"688":1,"751":1,"830":1,"836":1,"851":1,"902":1,"962":1,"991":1,"1000":1,"1001":2,"1008":1}}],["中关于运动健康方面的杂志文章",{"2":{"1048":1}}],["中午若正常吃饭",{"2":{"1045":1}}],["中午若吃轻食",{"2":{"1045":1}}],["中年油腻",{"2":{"1043":1}}],["中混写",{"2":{"971":1}}],["中无缝运行",{"2":{"971":1}}],["中嵌套了",{"2":{"970":1}}],["中嵌套层级过深",{"2":{"970":1}}],["中强行使用",{"2":{"970":1}}],["中将",{"2":{"968":1}}],["中拼装类名",{"2":{"962":1}}],["中组合这些原子类来构建样式",{"2":{"962":1}}],["中构建样式",{"2":{"962":1}}],["中包含表达式",{"2":{"747":1}}],["中多个效果器叠加的效果",{"2":{"744":1}}],["中形状图层的效果器",{"2":{"744":1}}],["中各种类型的动画属性",{"2":{"743":1}}],["中效果管理器占位",{"2":{"735":1}}],["中动画管理器覆盖",{"2":{"735":1}}],["中动画实例覆盖",{"2":{"735":1}}],["中解析数据",{"2":{"730":1}}],["中解放出来",{"2":{"406":1}}],["中制作的精美动画",{"2":{"728":1}}],["中数据空间到像素空间的映射器",{"2":{"714":1}}],["中数据获取的方式",{"2":{"68":1}}],["中自动触发",{"2":{"685":1}}],["中自动触发变更通知和脏标记",{"2":{"682":1}}],["中央处理枢纽",{"2":{"654":1}}],["中每个节点的",{"2":{"649":1}}],["中描述页面结构",{"2":{"640":1}}],["中查漏补缺",{"2":{"610":1}}],["中覆盖",{"2":{"596":1}}],["中即可",{"2":{"577":1}}],["中被",{"2":{"547":1}}],["中转",{"2":{"523":1}}],["中转与聚合平台",{"2":{"523":1}}],["中英双语实时语音转录",{"2":{"515":1}}],["中细致打磨",{"2":{"509":1}}],["中更是清晰地按点",{"2":{"508":1}}],["中二联对仗",{"2":{"507":1}}],["中二联严格对仗",{"2":{"505":1}}],["中文项目说明文档",{"2":{"735":1}}],["中文一句话出原型",{"2":{"562":1}}],["中文用户或目标平台是微信小程序",{"2":{"562":1}}],["中文体验佳",{"2":{"561":1}}],["中文即编程语言",{"2":{"525":1}}],["中文长文档理解能力国内领先",{"2":{"522":1}}],["中文长上下文最强",{"2":{"522":1}}],["中文长上下文",{"2":{"512":1}}],["中文理解与合规性优势突出",{"2":{"519":1}}],["中文无广告信息获取",{"2":{"518":1}}],["中文日常搜索",{"2":{"518":1}}],["中文资源覆盖最广",{"2":{"518":1}}],["中文学术调研",{"2":{"518":1}}],["中文内容协作",{"2":{"515":1}}],["中文内容创作",{"2":{"512":1,"522":1}}],["中文友好的",{"2":{"515":1}}],["中文轻量知识管理",{"2":{"515":1}}],["中文专业内容生成",{"2":{"512":1}}],["中文知识图谱积累深厚",{"2":{"512":1}}],["中文为主且需合规",{"2":{"523":1}}],["中文为主",{"2":{"510":1}}],["中文",{"2":{"506":1,"518":1,"530":1,"647":2,"786":1,"790":2,"851":1}}],["中文描述应简明扼要",{"2":{"451":1}}],["中频",{"2":{"465":1}}],["中度无奈",{"2":{"465":1}}],["中意识到错误",{"2":{"427":1}}],["中堆砌太多要求而导致的指令失效",{"2":{"415":1}}],["中实现",{"2":{"410":1}}],["中台",{"2":{"344":1}}],["中过度获取和获取不足的问题",{"2":{"342":1}}],["中大型应用全局状态",{"2":{"341":1}}],["中编写组件逻辑",{"2":{"339":1}}],["中引用",{"2":{"335":1}}],["中引用它们",{"2":{"62":1}}],["中指定的入口文件",{"2":{"334":1}}],["中设置",{"2":{"308":2,"333":1}}],["中最核心的数据流",{"2":{"774":1}}],["中最关键的部分",{"2":{"448":1}}],["中最重要的概念之一",{"2":{"281":1}}],["中最接近代数数据类型",{"2":{"230":1}}],["中间格式",{"2":{"728":1}}],["中间还要处理数据库的",{"2":{"553":1}}],["中间思考过程",{"2":{"410":1}}],["中间件数组通过",{"2":{"920":1}}],["中间件系统",{"0":{"920":1}}],["中间件包装",{"2":{"915":1}}],["中间件装饰器",{"2":{"909":1}}],["中间件",{"2":{"274":1,"275":1,"618":1}}],["中间层",{"2":{"60":1,"61":1}}],["中一种强大的类型系统特性",{"2":{"252":1}}],["中排除能赋值给",{"2":{"234":1}}],["中处理它",{"2":{"232":1}}],["中处理多态数据的推荐方式",{"2":{"230":1}}],["中配置路径别名",{"2":{"216":1}}],["中定义",{"2":{"962":1}}],["中定义好",{"2":{"179":1}}],["中定义的内容模型id一致",{"2":{"14":1}}],["中徒增同步烦恼",{"2":{"173":1}}],["中明确要求",{"2":{"170":1}}],["中低并发选长轮询",{"2":{"166":1}}],["中可以这样实现",{"2":{"154":1}}],["中区分处理",{"2":{"147":1}}],["中声明受信的图片域名",{"2":{"72":1}}],["中直接",{"2":{"68":1}}],["中发起",{"2":{"68":1}}],["中",{"2":{"61":1,"74":1,"103":1,"141":1,"156":1,"182":1,"203":1,"263":1,"342":1,"358":1,"367":1,"415":1,"443":1,"456":1,"485":1,"496":1,"508":1,"521":1,"543":1,"591":1,"735":2,"784":1,"873":1,"969":1,"1001":1,"1006":1}}],["中客户端",{"2":{"59":1}}],["中客户端组件标记",{"2":{"16":1}}],["中需要等待所有数据就绪才能看到任何内容",{"2":{"40":1}}],["中的标准",{"2":{"1025":1}}],["中的事件触发器",{"2":{"983":1}}],["中的范式",{"2":{"967":1}}],["中的纯函数",{"2":{"964":1}}],["中的关键帧数据来自",{"2":{"743":1}}],["中的形状效果器",{"2":{"738":1}}],["中的学习笔记逐渐成熟",{"2":{"628":1}}],["中的内容",{"2":{"628":1}}],["中的内容为提示",{"2":{"573":1}}],["中的触发条件描述",{"2":{"586":1}}],["中的一些实践",{"2":{"525":1}}],["中的那点灵动",{"2":{"509":1}}],["中的崩溃隐患并直接修复",{"2":{"484":1}}],["中的代码",{"2":{"443":1}}],["中的外链规范",{"2":{"443":1}}],["中的核心价值",{"2":{"199":1}}],["中的空格",{"2":{"143":1}}],["中的数据层",{"2":{"69":1}}],["中的",{"2":{"34":1,"71":1,"231":1,"232":1,"443":2,"455":1,"939":1,"961":2}}],["中创建",{"2":{"18":1}}],["中修改",{"2":{"17":1}}],["中修改内容后",{"2":{"9":1}}],["中生成",{"2":{"17":1}}],["中添加测试脚本",{"2":{"224":1}}],["中添加",{"2":{"16":1,"18":1}}],["中用",{"2":{"15":1}}],["中使用原生",{"2":{"82":1}}],["中使用",{"2":{"15":1,"216":1,"966":1,"968":3}}],["中等路径",{"2":{"786":1}}],["中等偏高",{"2":{"98":1}}],["中等",{"2":{"3":2,"45":2,"166":3,"965":2}}],["专用",{"2":{"939":1}}],["专人负责",{"2":{"589":1}}],["专家智能体",{"2":{"535":1}}],["专门来处理对话循环的逻辑",{"2":{"489":1}}],["专门用于将",{"2":{"439":1}}],["专精类任务",{"2":{"438":1}}],["专职打工人",{"2":{"438":2}}],["专业素养",{"2":{"1043":1}}],["专业感",{"2":{"962":1}}],["专业工具",{"2":{"544":1}}],["专业的语气创作诗歌",{"2":{"504":1}}],["专业任务能力",{"2":{"436":1}}],["专业执行",{"2":{"436":1}}],["专业地按照同一套标准",{"2":{"436":1}}],["专业指令的深度定制",{"2":{"415":1}}],["专业版",{"2":{"397":1}}],["专业公众号",{"2":{"346":8}}],["专为大型代码库设计的",{"2":{"567":1}}],["专为构建高性能的服务端渲染",{"2":{"344":1}}],["专为生产环境设计",{"2":{"344":1}}],["专为",{"2":{"343":1}}],["专为服务端向服务端单向推送而设计",{"2":{"118":1}}],["专心做业务逻辑的调度",{"2":{"295":1}}],["专心做计算",{"2":{"295":1}}],["专注重要的事",{"0":{"1036":1}}],["专注功能实现而非样式细节",{"2":{"963":1}}],["专注与反刍",{"2":{"606":1}}],["专注代码质量的审查者",{"2":{"570":1}}],["专注特定任务的",{"2":{"570":1}}],["专注前端界面",{"2":{"561":1}}],["专注开源大模型的高性能推理与微调平台",{"2":{"523":1}}],["专注智能问答",{"2":{"512":1}}],["专注原子操作",{"2":{"429":1}}],["专注子任务",{"2":{"415":1,"438":1}}],["专注当下",{"2":{"367":1}}],["专注",{"2":{"192":1,"523":1,"561":1}}],["专注于正确性和可维护性",{"2":{"591":1}}],["专注于需求理解与方案设计",{"2":{"535":1}}],["专注于中文理解与生成",{"2":{"512":1}}],["专注于帮助家长掌握科学的数学辅导方法",{"2":{"494":1}}],["专注于信息检索与收集",{"2":{"468":1}}],["专注于未来的增量成本和收益",{"2":{"393":1}}],["专注于打造可持续的订阅模式",{"2":{"354":1}}],["专注于为开发者提供便捷的静态网站和jamstack",{"2":{"345":1}}],["专注于基础通信层的治理",{"2":{"342":1}}],["专注于",{"2":{"342":1}}],["专注于真正创造价值的方案选择与设计决策",{"2":{"176":1}}],["专注于接收",{"2":{"170":1}}],["专注于处理数据更新",{"2":{"91":1}}],["专注于业务逻辑实现",{"2":{"91":1}}],["专注于在",{"2":{"91":1}}],["专注博客",{"2":{"9":1}}],["专属部署",{"2":{"523":1}}],["专属属性自动可用",{"2":{"249":1}}],["专属属性",{"2":{"249":1}}],["专属",{"2":{"8":1}}],["4+1",{"2":{"1041":1}}],["4阶段系统化调试方法论",{"2":{"980":1}}],["4px",{"2":{"958":1,"959":1,"960":1,"961":1}}],["4种消息类型",{"2":{"939":1}}],["47kb",{"2":{"763":1}}],["43个文件",{"2":{"763":1}}],["44个文件",{"2":{"763":1}}],["4×4",{"2":{"763":1}}],["4d",{"2":{"763":1}}],["489行",{"2":{"735":1}}],["4600",{"2":{"705":1,"715":1}}],["4v",{"2":{"512":1,"522":1}}],["4o",{"2":{"511":1,"521":2,"523":2}}],["4500",{"2":{"705":1,"715":1}}],["450ms",{"2":{"47":1}}],["45+",{"2":{"647":1,"656":1}}],["456",{"2":{"247":1,"265":1}}],["427行",{"2":{"980":1}}],["42",{"2":{"229":1,"254":2,"828":1}}],["429",{"2":{"144":2,"158":1,"879":1}}],["4s",{"2":{"146":1,"150":1}}],["4xx",{"2":{"144":1,"146":1}}],["408",{"2":{"866":1}}],["403",{"2":{"866":1}}],["40",{"2":{"763":1,"1047":1,"1048":1}}],["40+",{"2":{"647":1,"706":1,"901":1,"903":1,"906":1,"907":1}}],["40kb",{"2":{"647":1,"763":1}}],["404",{"2":{"66":1,"370":1}}],["4000",{"2":{"705":1,"715":1}}],["400",{"2":{"16":1,"144":1,"866":1,"879":1,"962":2}}],["4",{"0":{"9":1,"16":1,"19":1,"30":1,"47":1,"64":1,"65":1,"66":1,"67":1,"76":1,"108":1,"109":1,"110":1,"111":1,"112":2,"117":1,"122":1,"127":1,"144":1,"145":1,"146":1,"147":1,"148":1,"149":2,"150":1,"165":1,"166":1,"167":1,"168":1,"172":1,"173":1,"174":1,"175":1,"192":1,"201":1,"215":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":2,"225":1,"232":1,"239":1,"241":1,"242":1,"243":1,"244":1,"249":1,"255":1,"261":1,"264":1,"265":1,"266":1,"267":1,"268":2,"269":1,"270":1,"280":1,"284":1,"285":1,"286":1,"287":1,"288":2,"289":1,"290":1,"291":1,"292":1,"303":1,"307":1,"313":1,"320":1,"330":1,"336":1,"341":1,"351":1,"352":1,"353":1,"360":1,"375":1,"376":1,"380":1,"385":1,"394":1,"399":1,"408":1,"409":1,"410":1,"411":1,"412":2,"418":1,"427":1,"437":1,"444":1,"445":1,"446":1,"462":1,"464":1,"473":1,"474":1,"475":1,"482":1,"483":1,"484":1,"495":1,"534":1,"535":1,"536":1,"537":1,"538":2,"548":1,"552":1,"566":1,"567":1,"568":1,"575":1,"576":1,"577":1,"578":1,"583":1,"588":1,"603":1,"615":1,"623":1,"624":1,"625":1,"626":1,"642":1,"651":1,"668":1,"673":1,"681":1,"702":1,"710":1,"725":1,"731":1,"739":1,"767":1,"794":1,"815":1,"823":1,"841":1,"846":1,"851":1,"857":1,"858":1,"859":1,"860":1,"904":1,"909":1,"914":1,"915":1,"916":1,"917":1,"918":2,"919":1,"920":1,"936":1,"943":1,"960":1,"969":1,"976":1,"984":1,"1010":1,"1011":1,"1012":1,"1027":1,"1032":1,"1047":1},"1":{"31":1,"32":1,"33":1,"65":1,"66":1,"67":1,"109":1,"110":1,"111":1,"112":1,"146":1,"147":1,"148":1,"149":1,"150":1,"166":1,"167":1,"168":1,"173":1,"174":1,"193":1,"194":1,"219":1,"220":1,"221":2,"222":2,"223":2,"224":2,"225":2,"242":1,"243":1,"244":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"352":1,"353":1,"409":1,"410":1,"411":1,"412":1,"445":1,"446":1,"447":2,"448":2,"449":2,"450":2,"474":1,"475":1,"483":1,"484":1,"535":1,"536":1,"537":1,"538":1,"567":1,"568":1,"576":1,"577":1,"578":1,"624":1,"625":1,"626":1,"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"711":1,"712":1,"713":1,"714":1,"715":1,"740":1,"741":1,"742":1,"743":1,"744":1,"768":1,"769":1,"770":1,"771":1,"772":1,"795":1,"796":1,"797":1,"798":1,"799":1,"824":1,"825":1,"826":1,"827":1,"828":1,"858":1,"859":1,"860":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1,"944":1,"945":1,"946":1,"947":1,"948":1,"985":1,"986":1,"987":1,"988":1,"989":1,"1011":1,"1012":1,"1013":2,"1014":2,"1015":2,"1016":2,"1017":2},"2":{"15":3,"16":6,"21":1,"88":1,"92":1,"131":1,"141":1,"144":1,"169":1,"203":3,"231":1,"254":1,"261":1,"383":1,"430":1,"451":2,"471":1,"472":1,"494":1,"504":1,"506":1,"512":1,"521":1,"522":1,"523":1,"549":1,"550":1,"564":1,"581":2,"586":1,"631":2,"642":1,"652":1,"696":1,"789":1,"819":1,"834":1,"880":1,"891":1,"904":4,"947":1,"962":2,"963":1,"964":4,"965":2,"970":2,"979":1,"987":1,"988":1,"992":1}}],["等书",{"2":{"1037":1}}],["等第三方",{"2":{"971":1}}],["等高阶工程化链路的唯一底层载体",{"2":{"969":1}}],["等高性能推理框架",{"2":{"551":1}}],["等大模型辅助生成代码极度友好",{"2":{"967":1}}],["等大模型背后的计算机制",{"2":{"598":1}}],["等原子化",{"2":{"967":1}}],["等原生实时技术成熟前",{"2":{"103":1}}],["等重型库",{"2":{"965":1}}],["等直观类名即可拼凑出专业界面",{"2":{"963":1}}],["等构建工具的标配功能",{"2":{"960":1}}],["等组件化框架的兴起",{"2":{"959":1}}],["等组合异步状态",{"2":{"101":1}}],["等标准组件",{"2":{"939":1}}],["等标准化协议的成熟",{"2":{"548":1}}],["等其他",{"2":{"873":1}}],["等桌面应用",{"2":{"844":1}}],["等方法实现对时间的精确控制",{"2":{"825":1}}],["等方案的演进关系与适用边界",{"2":{"156":1}}],["等额外水平空间",{"2":{"799":1}}],["等数据操作",{"2":{"706":1}}],["等数百个模型",{"2":{"523":1}}],["等功能",{"2":{"706":1}}],["等顶层",{"2":{"704":1}}],["等设计编辑器",{"2":{"671":1}}],["等场景",{"2":{"653":1}}],["等嵌套属性",{"2":{"649":2}}],["等常用命令",{"2":{"572":1}}],["等快捷指令",{"2":{"570":1}}],["等名词",{"2":{"558":1}}],["等能够在一分钟内生成高质量的",{"2":{"553":1}}],["等后端架构",{"2":{"552":1}}],["等可观测性工具",{"2":{"550":1}}],["等可选文件",{"2":{"442":1}}],["等核心指标",{"2":{"550":1}}],["等核心组件",{"2":{"434":1}}],["等评估框架",{"2":{"550":1}}],["等熟悉的后端生态快速构建",{"2":{"548":1}}],["等主流模型",{"2":{"564":1}}],["等主流模型的统一",{"2":{"523":1}}],["等主流",{"2":{"545":1}}],["等智能体设计模式",{"2":{"545":1}}],["等技术工程的任务拆解与路由机制",{"2":{"545":1}}],["等技能",{"2":{"453":1}}],["等新一代交互模式",{"2":{"543":1}}],["等强约束机制",{"2":{"542":1}}],["等国际主流模型",{"2":{"523":1}}],["等专项子模型",{"2":{"522":1}}],["等系列模型",{"2":{"522":2}}],["等模型作为",{"2":{"1002":1}}],["等模型接口的实例",{"2":{"916":1}}],["等模型",{"2":{"522":1}}],["等模型生成的长文本",{"2":{"106":1}}],["等版本",{"2":{"521":1}}],["等多种格式",{"2":{"713":1}}],["等多种资料",{"2":{"515":1}}],["等多语言",{"2":{"562":1}}],["等多版本模型",{"2":{"521":1}}],["等经典意象",{"2":{"508":1}}],["等你共舞字句星河",{"2":{"507":1}}],["等动词精准传递神韵",{"2":{"507":1}}],["等意象",{"2":{"507":1}}],["等扩展",{"2":{"491":1}}],["等价于",{"2":{"482":1}}],["等代表性产品层出不穷",{"2":{"477":1}}],["等子任务",{"2":{"474":1}}],["等脚本语言",{"2":{"442":1}}],["等脚本",{"2":{"442":1}}],["等安全增强版本的成熟",{"2":{"419":1}}],["等一系列通用工具",{"2":{"411":1}}],["等非",{"2":{"342":1,"562":1}}],["等请求方法",{"2":{"342":1}}],["等包管理工具管理模块依赖",{"2":{"335":1}}],["等工具确立工程约束",{"2":{"1000":1}}],["等工具",{"2":{"558":1}}],["等工具生成高规范度代码",{"2":{"542":1}}],["等工具优化",{"2":{"341":1}}],["等工具进行平滑转译",{"2":{"308":1}}],["等工具让我们能够更自信地进行代码重构",{"2":{"226":1}}],["等内置方法",{"2":{"270":1}}],["等内部系统",{"2":{"120":1}}],["等单字母命名",{"2":{"263":1}}],["等思想不谋而合",{"2":{"255":1}}],["等声明方式",{"2":{"255":1}}],["等调试技术",{"2":{"226":1}}],["等调用者无需关心的信息",{"2":{"196":1}}],["等框架生态",{"2":{"965":1}}],["等框架中快速集成",{"2":{"902":1}}],["等框架中",{"2":{"256":1}}],["等框架中处理服务器状态的获取",{"2":{"91":1}}],["等框架",{"2":{"203":1,"286":1}}],["等打包工具",{"2":{"203":1}}],["等同于同时启用以下所有选项",{"2":{"203":1}}],["等反向代理的缓冲",{"2":{"152":1}}],["等凭证信息到服务器端",{"2":{"138":1}}],["等所有方法",{"2":{"135":1,"142":1}}],["等认证信息",{"2":{"135":1}}],["等字段约定",{"2":{"135":1}}],["等字段组成",{"2":{"109":1,"143":1}}],["等指令来禁用缓冲",{"2":{"107":1}}],["等库",{"2":{"106":1}}],["等库的出现",{"2":{"83":1}}],["等现代工具链",{"2":{"100":1}}],["等现代构建工具打包时",{"2":{"85":1}}],["等底层状态机逻辑",{"2":{"98":1}}],["等状态",{"2":{"91":1}}],["等状态管理库来实现",{"2":{"83":1}}],["等待下一块",{"2":{"892":1}}],["等待下次数据补充",{"2":{"141":1}}],["等待中的命令",{"2":{"860":1}}],["等待系统重构的新机会",{"2":{"620":1}}],["等待用户输入",{"2":{"489":1}}],["等待所有",{"2":{"471":1}}],["等待人工分析报告往往错失战机",{"2":{"465":1}}],["等待时的体验",{"2":{"366":1}}],["等待服务端响应",{"2":{"164":1}}],["等待更新",{"2":{"162":1}}],["等待一段时间后继续重试",{"2":{"160":1}}],["等待指定毫秒后重试",{"2":{"150":1}}],["等待",{"2":{"89":1,"102":1,"144":1,"160":1,"163":1,"164":1}}],["等全系模型",{"2":{"523":1}}],["等全系列模型调用",{"2":{"521":1}}],["等全局状态库中",{"2":{"85":1}}],["等全部内容才呈现",{"2":{"43":1}}],["等需要独立",{"2":{"71":1}}],["等浏览器对象",{"2":{"47":1}}],["等平台的",{"2":{"994":1}}],["等平台通过",{"2":{"120":1}}],["等平台",{"2":{"20":1}}],["等",{"2":{"8":1,"67":1,"83":1,"103":1,"119":1,"135":1,"144":1,"147":1,"170":1,"203":1,"205":1,"210":1,"256":1,"285":1,"341":1,"343":1,"442":1,"477":1,"478":1,"494":1,"505":1,"510":1,"519":2,"523":5,"557":1,"559":1,"567":1,"570":1,"581":1,"645":2,"647":2,"650":1,"654":1,"661":1,"677":3,"701":1,"706":6,"730":1,"735":1,"741":1,"742":3,"743":1,"744":1,"763":1,"771":1,"772":1,"792":1,"795":2,"813":1,"819":2,"856":1,"901":1,"906":2,"908":1,"910":1,"913":1,"927":1,"939":1,"942":1,"957":1,"960":1,"965":1,"968":1,"978":1}}],["等攻击",{"2":{"3":1}}],["谷歌地图",{"2":{"8":1}}],["支撑复杂的",{"2":{"965":1}}],["支撑层",{"2":{"279":1}}],["支付等",{"2":{"291":1}}],["支付信息",{"2":{"278":1}}],["支付平台会向商户服务器发送",{"2":{"120":1}}],["支付宝",{"2":{"120":1}}],["支付回调",{"2":{"120":1}}],["支付通过",{"2":{"19":1}}],["支付集成",{"2":{"18":1}}],["支付",{"2":{"8":1}}],["支持的编码平台之一",{"2":{"997":1}}],["支持环境变量替换如",{"2":{"994":1}}],["支持内联目录",{"2":{"948":1}}],["支持逐组件的渐进式渲染",{"2":{"947":1}}],["支持路径的",{"2":{"945":1}}],["支持动态注册",{"2":{"939":1}}],["支持动态交互",{"2":{"4":1}}],["支持客户端注册函数",{"2":{"939":1}}],["支持跨进程重启的长时间",{"2":{"918":1}}],["支持长时间运行的",{"2":{"918":1}}],["支持流式传输",{"2":{"944":1}}],["支持流式",{"2":{"917":1}}],["支持遥测",{"2":{"910":1}}],["支持注入自定义",{"2":{"874":1}}],["支持三种合成模式",{"2":{"832":1}}],["支持复杂编排",{"2":{"815":1}}],["支持复杂的长上下文理解",{"2":{"478":1}}],["支持复杂的类型关系",{"2":{"264":1}}],["支持可变行宽的手工布局",{"2":{"798":1}}],["支持所有",{"2":{"784":1}}],["支持所有现代浏览器",{"2":{"203":1}}],["支持嵌套路径",{"2":{"772":1}}],["支持事件驱动的对象生命周期管理",{"2":{"769":1}}],["支持事件触发",{"2":{"343":1}}],["支持变换的层级继承",{"2":{"769":1}}],["支持时只需实现",{"2":{"768":1}}],["支持父子层级",{"2":{"766":1}}],["支持在",{"2":{"730":1}}],["支持将",{"2":{"728":1}}],["支持将节点的渲染结果缓存到离屏",{"2":{"682":1}}],["支持数组",{"2":{"713":1}}],["支持维度定义和数据操作",{"2":{"709":1}}],["支持从",{"2":{"699":1}}],["支持颜色空间的平滑过渡",{"2":{"686":1}}],["支持components",{"2":{"685":1}}],["支持命名空间",{"2":{"682":1}}],["支持裁剪",{"2":{"680":1}}],["支持缓存和滤镜",{"2":{"680":1}}],["支持按",{"2":{"858":1}}],["支持按需加载和",{"2":{"673":1}}],["支持按量付费",{"2":{"523":1}}],["支持批量渲染和图层级性能优化",{"2":{"672":1}}],["支持异步加载",{"2":{"641":1}}],["支持异步加载模块",{"2":{"305":1}}],["支持深读与按需检索",{"2":{"632":1}}],["支持传递要解释的内容",{"2":{"582":1}}],["支持全局配置",{"2":{"570":1}}],["支持接入任意",{"2":{"568":1}}],["支持接入多种",{"2":{"567":1}}],["支持实时预览和多轮对话修改",{"2":{"561":1}}],["支持实时协作和嵌入式分享",{"2":{"515":1}}],["支持对缓存结果应用多个滤镜",{"2":{"682":1}}],["支持对接兼容",{"2":{"559":1}}],["支持对话问答",{"2":{"512":3}}],["支持国内直连无需科学上网",{"2":{"523":1}}],["支持免费额度与企业接入",{"2":{"522":1}}],["支持本地或私有化部署",{"2":{"519":1}}],["支持本地部署与企业级应用",{"2":{"512":1}}],["支持直接问答",{"2":{"518":1}}],["支持直接部署到",{"2":{"52":1}}],["支持简洁",{"2":{"518":1}}],["支持学术",{"2":{"518":1}}],["支持导入大纲或笔记一键转",{"2":{"515":1}}],["支持中英双语实时语音转录",{"2":{"515":1}}],["支持文档自动生成",{"2":{"515":2}}],["支持超长上下文和插件生态",{"2":{"512":1}}],["支持超长上下文对话",{"2":{"512":1}}],["支持自动修复截断的字符串值",{"2":{"947":1}}],["支持自动部署和预览",{"2":{"345":1}}],["支持自适应",{"2":{"939":1}}],["支持自定义修饰符",{"2":{"939":1}}],["支持自定义技能和命令",{"2":{"470":1}}],["支持上传背景资料",{"2":{"437":1}}],["支持更多的框架和静态站点生成器",{"2":{"345":1}}],["支持组件精准订阅状态",{"2":{"341":1}}],["支持服务器端渲染和客户端交互",{"2":{"339":2}}],["支持业务的快速扩展",{"2":{"292":1}}],["支持渐进式升级和技术迁移",{"2":{"292":1}}],["支持多部分内容",{"2":{"913":1}}],["支持多语言",{"2":{"786":1}}],["支持多种来源",{"2":{"859":1}}],["支持多种光照模型",{"2":{"766":1}}],["支持多种属性类型",{"2":{"743":1}}],["支持多种类型",{"2":{"253":1}}],["支持多种类型复用",{"2":{"253":1}}],["支持多",{"2":{"568":1}}],["支持多文件读写",{"2":{"567":1}}],["支持多维表格与看板",{"2":{"515":1}}],["支持多维表格",{"2":{"515":1}}],["支持多模型切换",{"2":{"515":1}}],["支持多轮对话迭代",{"2":{"561":1}}],["支持多轮对话",{"2":{"511":2}}],["支持多级继承",{"2":{"209":1}}],["支持被其他项目引用",{"2":{"203":1}}],["支持精确的子路径导出",{"2":{"203":1}}],["支持携带请求体",{"2":{"154":1}}],["支持高度自定义的重连策略",{"2":{"142":1}}],["支持高度自定义重连策略",{"2":{"135":1}}],["支持发送",{"2":{"135":1,"142":1}}],["支持乐观更新",{"2":{"91":1}}],["支持表单",{"2":{"7":1}}],["支持",{"0":{"154":1},"2":{"6":2,"8":1,"11":1,"45":2,"135":1,"141":3,"142":1,"144":1,"153":1,"203":2,"220":1,"225":1,"308":1,"324":1,"331":1,"342":1,"512":1,"521":2,"522":1,"523":4,"564":1,"641":2,"655":1,"672":3,"677":1,"686":1,"728":1,"730":2,"735":3,"740":1,"755":1,"758":1,"766":1,"812":1,"814":1,"818":1,"819":1,"825":2,"858":1,"859":1,"881":1,"887":1,"916":1,"939":1}}],["函数预先定义组件的",{"2":{"964":1}}],["函数和逻辑动态生成样式",{"2":{"959":1}}],["函数等功能",{"2":{"958":1}}],["函数值",{"2":{"828":1}}],["函数组合构建可跨后端编译的着色器",{"2":{"770":1}}],["函数管理全局扩展状态",{"2":{"711":1}}],["函数注册",{"2":{"711":1}}],["函数注册到全局注册表",{"2":{"708":1}}],["函数导出",{"2":{"706":1}}],["函数计算每帧的进度位置",{"2":{"686":1}}],["函数匹配",{"2":{"652":1}}],["函数文档",{"2":{"646":1}}],["函数语法",{"2":{"646":1}}],["函数调用",{"2":{"411":1,"655":1}}],["函数调用时",{"2":{"203":1}}],["函数响应式编程",{"2":{"344":2}}],["函数式编程",{"2":{"344":2}}],["函数加载模块",{"2":{"304":1}}],["函数既可以处理",{"2":{"255":1}}],["函数类型的交叉在",{"2":{"238":1}}],["函数类型的交叉",{"0":{"238":1}}],["函数名会被压缩混淆",{"2":{"217":1}}],["函数签名汇总",{"0":{"806":1}}],["函数签名",{"0":{"835":1},"2":{"177":1}}],["函数或后端服务",{"2":{"19":1}}],["函数",{"2":{"8":1,"85":1,"195":1,"231":1,"305":1,"342":1,"482":1,"489":1,"490":1,"640":1,"647":1,"706":1,"720":1,"763":1,"821":1,"835":1,"874":1,"882":1,"891":2,"898":1,"908":1}}],["ff0",{"2":{"828":1}}],["ff0000",{"2":{"828":1,"970":1}}],["fbx等",{"2":{"763":1}}],["fbx",{"2":{"763":1}}],["fbo",{"2":{"763":4}}],["fmt",{"2":{"697":1}}],["fps",{"2":{"818":1,"824":2,"825":1,"834":2}}],["fp8",{"2":{"551":1}}],["fp",{"2":{"344":2}}],["fs",{"2":{"334":1}}],["fc",{"2":{"288":1}}],["fcp",{"2":{"25":1}}],["few",{"2":{"367":1}}],["feat",{"2":{"451":1,"581":1}}],["feature",{"2":{"335":2,"365":1,"451":1,"904":1}}],["featuresupport",{"2":{"735":1}}],["features",{"2":{"274":1}}],["feasibility",{"2":{"363":1}}],["federation",{"0":{"288":1},"2":{"287":1}}],["fetchdata",{"2":{"663":1}}],["fetchproducts",{"2":{"260":2}}],["fetchuser",{"2":{"246":2,"263":1}}],["fetcheventsourceinit",{"2":{"891":1,"898":2}}],["fetcheventsource",{"2":{"144":5,"149":1,"150":2,"154":1,"877":2,"878":1,"879":1,"882":2,"889":1,"891":2,"898":2}}],["fetcherresult>",{"2":{"662":1}}],["fetcherconfig",{"2":{"662":1}}],["fetcher",{"2":{"78":1,"85":3,"87":7,"88":1,"89":2,"95":2,"96":1,"640":1,"649":1,"653":1,"661":1,"662":1,"668":1}}],["fetchsse",{"2":{"141":2}}],["fetching",{"0":{"89":1,"342":1},"2":{"87":1,"91":1,"342":2}}],["fetch",{"0":{"140":1,"141":1,"142":1,"891":1},"1":{"141":1,"142":1,"143":1,"144":1},"2":{"59":1,"68":1,"69":1,"71":1,"82":2,"83":1,"85":3,"87":1,"91":2,"92":4,"95":1,"105":1,"106":1,"112":1,"130":1,"131":2,"135":10,"140":2,"141":6,"142":3,"143":1,"144":2,"145":1,"146":1,"150":1,"155":3,"160":1,"164":2,"166":1,"342":5,"668":1,"849":1,"851":2,"872":2,"874":4,"877":1,"881":2,"882":2,"883":1,"886":1,"889":2,"891":3,"898":4,"907":1,"916":1}}],["fetchcomments",{"2":{"16":2}}],["f",{"2":{"227":2,"250":3}}],["fn",{"2":{"225":1,"720":7,"765":1,"770":1,"771":2}}],["flutter",{"2":{"933":2,"935":1,"936":1,"939":6,"941":1}}],["flight",{"2":{"939":1}}],["flip布局动画实现",{"2":{"819":1}}],["flicker",{"2":{"47":1}}],["flexbox",{"2":{"647":1,"784":1}}],["flex",{"2":{"647":1,"962":1,"963":1,"964":1,"965":1,"970":1}}],["flags",{"2":{"975":1,"979":1,"986":2}}],["flag",{"2":{"750":1,"904":1}}],["flash",{"2":{"521":1,"523":1}}],["flatten",{"2":{"203":1}}],["flow",{"2":{"939":1}}],["flowus",{"2":{"515":4}}],["floor",{"2":{"939":1}}],["float",{"2":{"187":2,"770":1,"777":1}}],["fly",{"2":{"229":3}}],["frustumculled",{"2":{"769":1,"777":1}}],["frustumarray",{"2":{"763":1}}],["frustum",{"2":{"763":1}}],["fruits",{"2":{"365":1}}],["freeze",{"2":{"740":2,"750":1}}],["free",{"2":{"531":1}}],["fresh",{"2":{"92":1}}],["frameindex",{"2":{"865":1}}],["frameid",{"2":{"749":1,"865":1}}],["frames",{"2":{"865":1}}],["frameduration",{"2":{"824":1,"834":1}}],["framebuffertexture",{"2":{"763":1,"777":2}}],["framemult",{"2":{"749":1}}],["framenum",{"2":{"743":2,"749":4}}],["frameelement",{"2":{"735":1}}],["framerate",{"2":{"692":1,"749":1}}],["frame",{"2":{"686":1,"692":2,"734":1,"777":3,"980":1,"987":1}}],["framework",{"2":{"344":4,"906":1,"907":1,"970":1}}],["fractals",{"2":{"980":1}}],["frac",{"2":{"365":1}}],["fragmentshadernode",{"2":{"771":1}}],["fragmentshader",{"2":{"771":1}}],["fragment",{"2":{"203":3}}],["frp",{"2":{"344":2}}],["frontside",{"2":{"771":1,"777":1}}],["frontend",{"2":{"216":2,"280":1,"281":2,"290":1,"342":1,"453":1}}],["frontmatter",{"0":{"448":1},"2":{"54":1,"442":1,"443":1,"576":1,"581":2,"586":1,"591":1,"978":1,"983":1,"994":2}}],["fromnumber",{"2":{"827":1,"828":3,"834":1}}],["from",{"2":{"14":1,"15":5,"16":5,"69":1,"85":2,"87":2,"88":1,"91":1,"94":3,"95":2,"96":1,"144":1,"150":1,"153":4,"154":3,"163":2,"199":1,"203":3,"222":1,"223":1,"281":3,"288":5,"289":6,"295":1,"300":1,"301":1,"302":1,"306":1,"307":1,"310":3,"311":2,"312":5,"314":3,"315":10,"318":2,"319":1,"324":1,"325":1,"328":2,"333":2,"483":2,"490":1,"668":1,"724":1,"725":4,"782":1,"809":1,"828":1,"835":2,"839":3,"841":5,"877":1,"902":3,"912":2,"959":1,"960":1,"964":3}}],["far",{"2":{"769":1,"778":1}}],["failing",{"2":{"989":1}}],["failed",{"2":{"160":2,"164":2,"750":1}}],["faithfulness",{"2":{"550":1}}],["faq",{"2":{"515":3}}],["facade",{"2":{"734":1}}],["face",{"2":{"523":3}}],["facebook",{"2":{"339":1}}],["fact",{"2":{"470":1}}],["factory",{"0":{"652":1,"685":1},"2":{"300":2,"306":4,"646":1,"647":2,"649":1,"650":1,"652":1,"673":1,"677":1,"679":1,"682":2,"685":3,"735":1,"744":1,"749":1,"939":1,"947":1,"979":1,"997":1}}],["factor",{"2":{"281":2,"916":1}}],["fatalerror",{"2":{"144":2,"146":3,"147":1,"148":1,"149":1,"150":4,"879":3}}],["fastlayer",{"2":{"676":1,"677":1,"679":1,"680":3,"693":1}}],["fastapi",{"2":{"573":2}}],["fast",{"2":{"85":1,"706":1,"851":1}}],["fastify",{"2":{"71":1,"344":1}}],["falsy",{"2":{"89":1}}],["false",{"2":{"16":2,"87":1,"88":2,"94":2,"148":2,"150":1,"203":3,"246":3,"288":1,"594":1,"712":1,"859":1,"961":1}}],["fallbackpolling",{"2":{"203":1}}],["fallback=",{"2":{"74":2,"288":4}}],["fallback",{"2":{"74":1,"523":2,"741":1,"762":1,"763":1,"946":1}}],["funnelview",{"2":{"706":1}}],["funnelseries",{"2":{"706":1}}],["funnel",{"2":{"706":1}}],["func",{"2":{"686":4,"692":2,"855":1,"856":1,"865":1}}],["functionextensions",{"2":{"735":1}}],["functiondocs",{"2":{"646":1}}],["function",{"2":{"14":2,"15":3,"16":1,"70":1,"71":1,"74":1,"87":1,"88":1,"91":1,"94":1,"95":1,"96":1,"141":1,"143":3,"160":1,"164":1,"229":1,"231":4,"232":1,"246":1,"247":1,"248":2,"249":1,"254":3,"258":1,"259":1,"260":1,"262":1,"263":3,"265":1,"266":1,"267":1,"268":1,"269":1,"288":1,"289":5,"295":2,"305":2,"306":3,"310":1,"315":4,"321":2,"324":2,"325":1,"369":1,"411":1,"489":1,"490":1,"512":1,"521":1,"522":2,"523":1,"641":1,"642":1,"646":1,"647":1,"655":1,"685":2,"693":4,"742":2,"749":4,"762":1,"778":1,"806":17,"835":8,"898":1,"899":3,"926":3,"939":1,"959":1,"960":1,"962":1,"964":2}}],["functions",{"2":{"8":3,"18":1,"223":1,"763":1,"948":1}}],["fullstream",{"2":{"918":1}}],["fullstack",{"2":{"458":1}}],["fullstack=taste×build×leverage",{"2":{"458":2}}],["fullname",{"2":{"859":1}}],["fullinternals",{"2":{"677":2,"679":1}}],["fullentity",{"2":{"248":1}}],["full",{"0":{"458":1,"463":1,"464":1},"1":{"459":1,"460":1,"461":1,"462":1},"2":{"16":1,"457":2,"458":2,"459":3,"463":2,"464":1,"465":1,"466":1,"467":1,"477":1,"553":2,"554":3,"672":1,"673":1,"735":2,"737":2,"751":4,"1001":3}}],["followskill",{"2":{"986":1}}],["fov",{"2":{"769":1,"778":1}}],["fogexp2",{"2":{"763":1}}],["fog",{"2":{"763":2}}],["footage",{"2":{"735":1}}],["footageinterface",{"2":{"735":1}}],["footageelement",{"2":{"735":1}}],["footerextra",{"2":{"865":1}}],["footer>",{"2":{"288":2}}],["footer",{"2":{"67":1}}],["foo",{"2":{"254":1,"333":1}}],["forbidden",{"2":{"866":1}}],["foreachchildren",{"2":{"819":1}}],["foreachchild",{"2":{"818":1}}],["foreach",{"2":{"260":1,"289":1,"302":1,"315":1,"483":1,"686":1}}],["forcelayout",{"2":{"706":1}}],["force",{"2":{"216":1,"777":1,"834":1,"1000":1}}],["for",{"2":{"141":1,"143":3,"259":1,"330":1,"342":1,"482":2,"483":1,"486":1,"488":1,"798":2,"942":1,"986":1}}],["formitem",{"2":{"647":1}}],["formitemstore",{"2":{"646":1,"647":1,"650":3}}],["formstore",{"2":{"646":1,"647":1,"650":3,"653":2,"661":1,"663":2}}],["formulacontrol",{"2":{"647":1,"656":1}}],["formula",{"0":{"655":1},"2":{"642":1,"645":1,"646":1,"647":6,"650":1,"655":2}}],["formfield",{"2":{"274":1}}],["formatter",{"2":{"572":1,"904":1}}],["formatting",{"2":{"274":1,"280":1,"290":1}}],["formatdate",{"2":{"318":1}}],["format",{"2":{"231":1,"706":2,"898":1,"939":2,"985":1}}],["form>",{"2":{"16":1}}],["form",{"2":{"16":1,"274":1,"645":2,"646":2,"647":5,"652":1,"656":1,"661":1,"668":1,"939":1}}],["formevent",{"2":{"16":1}}],["focusable",{"2":{"750":1}}],["focus",{"2":{"91":1,"964":2}}],["foit",{"2":{"72":1}}],["fouc",{"2":{"959":1}}],["fout",{"2":{"72":1}}],["founder",{"2":{"553":1}}],["founduser",{"2":{"259":2}}],["found",{"2":{"66":1,"261":1}}],["fontmanagerworkeroverride",{"2":{"735":1}}],["fontmanager",{"2":{"734":1,"735":1,"738":1,"741":1}}],["fontscontainer",{"2":{"749":1}}],["fonts",{"2":{"274":1,"763":1}}],["font",{"2":{"15":3,"16":1,"72":1,"790":2,"792":2,"796":2,"798":1,"805":1,"806":2,"962":1,"964":1}}],["fis",{"2":{"647":2}}],["fis3",{"2":{"642":2,"647":2}}],["fish",{"2":{"229":3}}],["fixer",{"2":{"939":1}}],["fixed",{"2":{"391":1}}],["fixtures",{"2":{"851":1,"939":1}}],["fixture",{"2":{"851":1}}],["fix",{"2":{"451":1,"570":1,"581":1,"930":1,"939":1}}],["fig",{"2":{"448":1}}],["figma",{"2":{"81":1,"116":1,"448":1}}],["fi",{"2":{"370":1}}],["finishing",{"2":{"979":1,"980":1,"982":1,"983":1,"991":1,"995":2,"999":1}}],["finish",{"2":{"692":1}}],["fine",{"2":{"512":2,"521":1,"523":3}}],["final",{"2":{"427":1}}],["finally",{"2":{"143":1}}],["finder",{"2":{"719":2,"939":3,"954":1}}],["findeventdispatcher",{"2":{"706":1}}],["findone",{"2":{"281":1,"692":1}}],["findbycustomerid",{"2":{"281":1}}],["findbyid",{"2":{"281":2,"328":2}}],["findfirst",{"2":{"259":2}}],["find",{"2":{"246":1,"261":3,"281":1,"692":1,"851":1,"858":1,"980":1}}],["fillstrokescene",{"2":{"692":1}}],["fillrule",{"2":{"692":1}}],["fillpriority",{"2":{"692":1}}],["fillenabled",{"2":{"692":1}}],["fill",{"2":{"686":1,"692":1,"696":1}}],["filepaths",{"2":{"994":1}}],["filepart",{"2":{"913":1}}],["fileloader",{"2":{"763":1}}],["file",{"2":{"482":1}}],["filename",{"2":{"288":2,"449":1}}],["filesv4",{"2":{"907":2,"925":1}}],["files",{"2":{"203":1,"216":1,"312":1,"471":5,"472":5,"474":2,"583":1,"646":1,"763":1,"865":1,"916":1,"925":1}}],["filterfunc",{"2":{"692":1}}],["filterhtml",{"2":{"662":1}}],["filtertarget",{"2":{"646":1}}],["filtersizeconfig",{"2":{"750":1}}],["filtersize",{"2":{"750":1}}],["filterschema",{"2":{"646":1}}],["filters",{"2":{"275":1,"676":1,"677":2,"679":2,"680":1,"682":1,"693":1,"735":1}}],["filtered",{"2":{"154":2}}],["filter",{"2":{"95":1,"154":5,"275":2,"289":1,"646":1,"647":3,"672":1,"676":1,"680":1,"682":2,"705":2,"706":1,"851":1}}],["fieldlength",{"2":{"892":4,"899":2}}],["fieldlength=",{"2":{"892":1}}],["field",{"2":{"143":4,"899":1}}],["fields",{"2":{"14":4}}],["firstonmulti",{"2":{"865":3}}],["firstframe",{"2":{"749":1}}],["first",{"0":{"60":1,"543":1,"962":1},"1":{"61":1,"62":1,"963":1},"2":{"98":1,"100":1,"263":1,"340":1,"740":1,"819":1,"948":1,"965":1,"967":1,"970":1,"989":1}}],["firefox",{"2":{"786":2,"790":2,"796":2}}],["fire",{"2":{"682":1,"684":1}}],["firestore",{"2":{"8":1}}],["firebase",{"2":{"4":1,"8":3}}],["mt",{"2":{"964":1,"970":1}}],["m3",{"2":{"903":1,"920":1}}],["m2",{"2":{"903":1,"920":1}}],["m1",{"2":{"903":1,"920":1}}],["mrdoob",{"2":{"780":1}}],["mkdocs",{"2":{"936":1,"939":4}}],["mktest",{"2":{"706":1}}],["mkfs",{"2":{"595":1}}],["mpc",{"2":{"439":1}}],["mcpapps",{"2":{"939":1}}],["mcp",{"0":{"439":1,"455":1},"2":{"434":1,"439":8,"440":1,"442":1,"449":2,"455":1,"491":1,"548":4,"552":1,"908":2,"936":1,"938":1,"939":15,"941":2}}],["mjs",{"2":{"308":2,"333":3,"335":1,"677":2,"763":1,"980":1}}],["mult",{"2":{"743":1}}],["multiturn",{"2":{"980":2}}],["multidimensional",{"2":{"743":2}}],["multi",{"0":{"415":1,"468":1,"535":1},"1":{"416":1},"2":{"415":1,"438":1,"467":1,"468":1}}],["multirepo",{"2":{"286":1}}],["multiply",{"2":{"281":1,"295":2,"304":1,"307":2}}],["mutual",{"2":{"948":1}}],["mutecallbacks",{"2":{"827":1,"834":2}}],["mute",{"2":{"740":1,"750":1}}],["mutationfn",{"2":{"96":2}}],["mutation",{"2":{"94":2,"96":1}}],["mutations",{"2":{"91":1,"94":1,"98":1,"342":1}}],["mutate",{"2":{"87":3,"88":3,"98":2}}],["must",{"2":{"281":1}}],["mst",{"0":{"653":1,"663":1},"2":{"641":1,"642":1,"645":2,"646":1,"647":2,"649":2,"650":1,"652":3,"653":3,"661":2,"663":1}}],["ms",{"2":{"160":1,"824":1}}],["msg",{"2":{"144":3,"147":6,"150":5,"483":3,"654":1,"662":1,"663":1,"878":1,"899":1}}],["mmo",{"2":{"116":1}}],["medium",{"2":{"962":1,"964":1}}],["media",{"2":{"706":1,"851":1}}],["mention",{"2":{"799":1,"805":1,"810":1}}],["menubar",{"2":{"763":1}}],["menu",{"2":{"646":1,"647":1}}],["measurerichinlinestats",{"2":{"806":1}}],["measurepreparedlinegeometry",{"2":{"797":2}}],["measurelinestats",{"2":{"789":1,"798":1,"806":1}}],["measurement",{"0":{"796":1},"2":{"788":1,"789":3,"790":1,"792":2,"798":2,"805":1}}],["measuretext",{"2":{"785":1,"792":1,"796":2}}],["measurenaturalwidth",{"2":{"784":1,"789":1,"806":1}}],["meshmatcapmaterial",{"2":{"763":1}}],["meshdistancematerial",{"2":{"763":1}}],["meshdepthmaterial",{"2":{"763":1}}],["meshnormalmaterial",{"2":{"763":1}}],["meshtoonmaterial",{"2":{"763":1}}],["meshlambertmaterial",{"2":{"763":1}}],["meshphongmaterial",{"2":{"763":1}}],["meshphysicalmaterial|",{"2":{"771":1}}],["meshphysicalmaterial",{"2":{"763":1}}],["mesh",{"2":{"762":2,"763":1,"766":2,"769":1,"782":1}}],["meshstandardmaterial|",{"2":{"771":1}}],["meshstandardmaterial",{"2":{"759":1,"763":1,"771":1,"778":1,"782":1}}],["messaging",{"2":{"280":2}}],["messagetype",{"2":{"947":1}}],["message|",{"2":{"947":1}}],["messageprocessor",{"0":{"944":1},"2":{"938":1,"939":1,"941":2,"944":3,"948":1}}],["message>",{"2":{"926":2}}],["messageid",{"2":{"925":1}}],["messages",{"2":{"902":1,"917":1,"918":1,"925":2,"926":1,"951":1}}],["messageevent",{"2":{"153":3,"154":1}}],["messageevent>",{"2":{"153":1,"154":1}}],["message",{"2":{"91":1,"117":1,"136":2,"138":2,"143":2,"144":1,"153":1,"196":1,"197":1,"231":1,"246":1,"260":1,"262":2,"300":4,"302":2,"311":2,"451":1,"483":4,"484":6,"486":4,"488":3,"581":3,"917":1,"925":3,"926":1,"939":2,"942":1}}],["mermaid",{"2":{"658":1,"659":1,"688":1,"689":1,"690":1,"746":1,"747":1,"774":1,"775":1,"801":1,"802":1,"803":1,"830":1,"831":1,"832":1,"862":1,"863":1,"923":1,"949":1,"976":1,"991":1,"992":1}}],["mergeobjects",{"2":{"819":1}}],["mergepunctuationintowords",{"2":{"795":1}}],["merge",{"2":{"451":1,"948":1,"964":3,"965":1}}],["memorymb",{"2":{"866":1}}],["memory",{"0":{"546":1},"2":{"408":2,"777":1}}],["meow",{"2":{"231":2}}],["metrics>|",{"2":{"796":1}}],["metrics>>",{"2":{"792":1}}],["metudela",{"2":{"790":1}}],["methods",{"2":{"778":1}}],["method",{"2":{"96":1,"141":4,"144":2,"150":1,"865":1,"878":1}}],["metalnessmap",{"2":{"778":1}}],["metalness",{"2":{"758":1,"763":1,"771":1,"778":1}}],["metaso",{"2":{"518":1}}],["meta",{"2":{"69":1,"344":3,"662":2,"777":1}}],["metadata>",{"2":{"70":1}}],["metadata",{"2":{"67":1,"203":1,"994":1}}],["mit开源协议",{"2":{"819":1}}],["miterlimit",{"2":{"692":1}}],["miter",{"2":{"692":1}}],["mit",{"2":{"677":2,"728":1,"735":1,"763":1,"790":1,"882":1,"973":1,"980":1}}],["migration",{"2":{"583":1,"587":1}}],["migrations",{"2":{"275":1}}],["miaoda",{"2":{"561":1,"562":2}}],["mixed",{"2":{"790":1}}],["mix",{"2":{"770":1}}],["mixtral",{"2":{"519":1,"523":2}}],["mixins",{"2":{"958":2}}],["mixin",{"0":{"248":1},"2":{"248":1,"706":2,"965":1}}],["mismatch",{"2":{"790":3}}],["mismatched",{"2":{"238":1}}],["misc",{"2":{"763":1}}],["miss",{"2":{"35":2}}],["middleware",{"2":{"274":1,"275":2,"907":1,"909":1,"910":1}}],["mid",{"2":{"227":1,"242":2,"243":2}}],["midjourney",{"2":{"123":1,"156":1}}],["min",{"2":{"146":1,"150":1,"160":2,"696":1,"751":7,"836":2}}],["minitems",{"2":{"952":1}}],["minimum",{"2":{"778":2}}],["minimax",{"2":{"512":3,"519":1,"522":4,"523":1,"549":1}}],["minimal",{"2":{"85":1,"647":1}}],["mininmax",{"2":{"523":1}}],["minified",{"2":{"98":2,"836":2}}],["microsoft",{"2":{"135":1,"142":1,"144":1,"150":1,"155":1,"872":1,"877":1}}],["mvp",{"2":{"71":1,"361":1,"365":1,"552":1,"556":2,"561":1,"1001":1}}],["mdx",{"2":{"908":1,"931":1}}],["mdc",{"2":{"790":1}}],["md`",{"2":{"451":2}}],["md",{"0":{"571":1,"574":1},"1":{"572":1,"573":1,"574":1},"2":{"50":1,"53":3,"249":1,"290":1,"442":6,"443":4,"445":1,"450":1,"451":3,"456":1,"470":3,"472":1,"474":5,"547":1,"570":17,"571":6,"572":1,"573":1,"574":1,"575":7,"577":2,"578":3,"586":6,"596":1,"597":2,"646":1,"647":2,"677":2,"706":3,"735":5,"763":2,"790":12,"819":3,"851":5,"882":5,"939":6,"964":3,"979":2,"980":58,"982":18,"985":1,"986":2,"987":1,"988":4,"989":3,"994":2}}],["more",{"2":{"926":1}}],["morphto",{"2":{"818":1,"819":2}}],["morphtarget",{"2":{"769":1}}],["mozilla",{"2":{"898":1}}],["mocha",{"2":{"819":1}}],["mock",{"2":{"203":1,"274":1,"647":3,"989":1}}],["mocks",{"2":{"203":1,"274":1}}],["motionpath",{"2":{"819":2}}],["motion",{"2":{"818":1}}],["mousemodifier",{"2":{"735":1}}],["mouse",{"2":{"684":2}}],["mouseevent",{"2":{"661":1}}],["mount",{"2":{"23":1}}],["moonshot",{"2":{"512":1,"522":1}}],["moment",{"2":{"372":1}}],["mobx",{"2":{"641":1,"642":1,"645":1,"653":1}}],["mobileui",{"2":{"661":1}}],["mobile",{"2":{"313":1,"938":1}}],["moba",{"2":{"116":1}}],["molecules",{"2":{"274":1}}],["modifierfunction",{"2":{"834":1}}],["modifier2",{"2":{"744":1}}],["modifier1",{"2":{"744":1}}],["modifier",{"2":{"744":1,"822":1,"828":1,"834":1,"939":1,"957":1}}],["modifiers修饰",{"2":{"819":1}}],["modifiers",{"2":{"744":2,"763":1,"818":1,"865":1,"939":1}}],["mode",{"2":{"482":1,"673":2,"675":1,"925":1}}],["modern",{"2":{"333":1}}],["modelid",{"2":{"925":7}}],["modelmessage",{"2":{"913":4,"925":1,"926":1}}],["modelv4",{"2":{"907":6}}],["modelnode",{"2":{"763":1}}],["modelfinder",{"2":{"719":2}}],["model",{"2":{"269":5,"439":1,"481":7,"482":1,"548":1,"591":1,"704":1,"705":2,"706":5,"719":1,"790":3,"902":1,"903":1,"909":3,"912":1,"915":1,"918":1,"919":1,"920":1,"926":1,"927":1,"939":6,"1008":1}}],["model=your",{"2":{"481":4}}],["model=",{"2":{"74":1}}],["modeldetail",{"2":{"74":2}}],["modeldetailskeleton",{"2":{"74":1}}],["modellist",{"2":{"74":3}}],["modellistskeleton",{"2":{"74":1}}],["models",{"2":{"67":2,"74":1,"274":1,"763":1}}],["mod2",{"2":{"305":2}}],["mod1",{"2":{"305":2}}],["modalstore",{"2":{"646":1,"647":1,"650":3}}],["modal",{"2":{"274":1,"290":1,"647":1,"939":1}}],["modulec",{"2":{"314":4}}],["moduleb",{"2":{"314":4}}],["modulea",{"2":{"314":4}}],["module2",{"2":{"305":1}}],["module1",{"2":{"305":1}}],["modulefederationplugin",{"2":{"288":5}}],["modulefileextensions",{"2":{"222":1}}],["modules",{"0":{"307":1,"333":1,"960":1},"2":{"203":2,"204":2,"213":1,"214":1,"215":1,"272":2,"275":1,"280":2,"281":8,"286":1,"291":1,"293":1,"298":1,"303":1,"306":1,"307":1,"308":4,"311":2,"318":1,"322":1,"334":1,"735":1,"737":6,"751":8,"790":1,"819":2,"836":2,"958":1,"960":2,"961":1,"965":6,"968":3,"970":4,"971":2}}],["moduleresolution",{"2":{"203":2,"204":3,"215":1,"322":1}}],["module",{"0":{"288":1,"325":1},"2":{"203":3,"204":3,"215":1,"275":3,"280":5,"287":1,"288":3,"298":1,"304":3,"305":2,"306":3,"308":3,"314":1,"315":4,"320":1,"321":1,"322":1,"325":1,"333":5,"334":3,"677":1,"734":1,"735":2,"737":3,"759":1,"763":3,"887":2,"957":1,"960":5,"968":2,"970":1,"971":2,"980":3}}],["money",{"2":{"280":2,"281":12}}],["monorepo",{"0":{"211":1},"1":{"212":1,"213":1,"214":1,"215":1,"216":1},"2":{"202":1,"203":1,"205":1,"211":1,"216":2,"226":1,"286":1,"335":1,"337":1,"342":2,"451":1,"572":1,"642":1,"643":1,"645":1,"647":2,"904":2,"908":1}}],["mongodb",{"2":{"8":1,"336":1,"573":1}}],["m",{"2":{"17":1}}],["mycustomtool",{"2":{"927":1}}],["mycli",{"2":{"870":1}}],["myfetcher",{"2":{"640":1}}],["mysql",{"2":{"336":1}}],["mylogger",{"2":{"311":2}}],["mylib",{"2":{"306":1}}],["myextract",{"2":{"234":2}}],["myexclude",{"2":{"234":2}}],["my",{"2":{"16":1,"442":2,"790":2}}],["mb",{"2":{"15":6,"16":4}}],["mx",{"2":{"15":2}}],["magictype",{"2":{"706":1}}],["mailto",{"2":{"654":1}}],["maintenance",{"2":{"965":1}}],["maintype",{"2":{"705":1,"706":2,"714":1}}],["main>",{"2":{"288":2}}],["mainapp",{"2":{"288":3,"289":1}}],["mainlayout",{"2":{"274":1}}],["main",{"2":{"17":1,"274":1,"275":1,"280":2,"290":2,"490":1,"724":1,"735":2,"737":3,"849":1,"850":1,"851":1,"939":1}}],["maketranslator",{"2":{"646":1}}],["make",{"2":{"572":1,"594":1}}],["maker",{"2":{"557":1}}],["manifest",{"2":{"851":9,"854":1,"855":1}}],["manual",{"2":{"677":2,"763":1}}],["manus",{"2":{"403":1,"477":1}}],["manager",{"2":{"646":2,"647":2,"705":1,"711":1,"938":1,"939":2}}],["management",{"0":{"546":1},"2":{"656":1,"734":1,"938":1}}],["matcher",{"2":{"985":1,"994":1}}],["matches",{"2":{"865":2}}],["match",{"2":{"865":2,"948":1}}],["matcap",{"2":{"763":1}}],["materializerichinlinelinerange",{"2":{"799":1,"806":1}}],["materializelinerange",{"0":{"802":1},"2":{"789":1,"793":1,"798":1,"806":1,"810":1}}],["materialx",{"2":{"763":2}}],["materialnode",{"2":{"763":1}}],["materials",{"2":{"763":2}}],["materialloader",{"2":{"763":1}}],["material",{"0":{"771":1},"2":{"762":1,"763":1,"766":3,"769":1,"771":3,"772":1,"777":2,"782":2,"936":1,"939":3}}],["mattetype",{"2":{"749":1}}],["matte3",{"2":{"735":1}}],["matrixautoupdate",{"2":{"777":1}}],["matrixworldneedsupdate",{"2":{"777":1}}],["matrixworld",{"2":{"769":2,"777":1}}],["matrixworldinverse",{"2":{"763":1}}],["matrix4",{"2":{"763":1,"769":2,"777":2}}],["matrix3",{"2":{"763":1}}],["matrix2",{"2":{"763":1}}],["matrix",{"2":{"682":1,"706":2,"734":1,"735":1,"737":1,"769":2,"777":1,"790":1}}],["matplotlib",{"2":{"470":1,"471":1,"472":1}}],["mathbf",{"2":{"365":3,"366":3,"367":3,"554":4,"1001":4}}],["mathutils",{"2":{"310":1,"763":1}}],["mathdefault",{"2":{"295":3,"307":2}}],["math",{"2":{"146":2,"150":2,"160":2,"163":1,"223":4,"230":1,"232":1,"281":1,"295":3,"304":4,"307":1,"310":4,"321":2,"325":3,"522":2,"647":1,"763":3}}],["mass",{"2":{"819":1,"835":1}}],["masaot",{"2":{"790":1}}],["masonry",{"2":{"784":1,"790":2}}],["maskinterface",{"2":{"735":1,"742":1}}],["mask",{"2":{"677":1,"679":1,"735":2}}],["mas",{"2":{"415":2,"467":1}}],["marginal",{"2":{"398":1}}],["markarea",{"2":{"706":1}}],["markline",{"2":{"706":1}}],["markpoint",{"2":{"706":1}}],["markerparser",{"2":{"735":1}}],["markers",{"2":{"735":1}}],["marker",{"2":{"706":1}}],["marketplace",{"2":{"980":2}}],["market",{"2":{"470":1}}],["markup",{"2":{"338":1}}],["markdown================================================================================",{"2":{"965":1}}],["markdownframework",{"2":{"906":1}}],["markdown项目根目录",{"2":{"570":1}}],["markdown全局",{"2":{"570":1}}],["markdown开发者代码",{"2":{"912":1}}],["markdown开发完成",{"2":{"31":1}}],["markdown开始评估",{"2":{"166":1}}],["markdownreadablestream",{"2":{"143":1}}],["markdowncontent",{"2":{"136":1}}],["markdown┌─────────────────────────────────────────────────────────────────────────────┐",{"2":{"45":1}}],["markdown用户请求",{"2":{"61":1}}],["markdown用户首次访问页面",{"2":{"35":1}}],["markdown用户访问",{"2":{"23":1,"27":1,"40":1}}],["markdown",{"0":{"449":1},"2":{"6":2,"50":4,"53":5,"54":2,"76":1,"331":1,"419":1,"442":1,"443":1,"449":1,"451":2,"471":1,"494":1,"504":1,"505":2,"506":1,"507":2,"508":1,"573":1,"575":1,"579":1,"585":1,"591":1,"632":1,"790":6,"846":1,"851":1,"889":1,"913":1,"938":1,"939":9,"965":1,"975":1,"976":1,"983":1,"994":1}}],["macos",{"2":{"343":1}}],["maxtokens",{"2":{"925":1,"926":1}}],["maxturns",{"2":{"482":1}}],["maxsteps",{"2":{"918":2,"926":1}}],["maxlinewidth",{"2":{"805":1}}],["maxlines",{"2":{"594":1}}],["maxlinesperfile",{"2":{"594":1,"595":1}}],["maxwidth",{"2":{"792":2,"797":4,"806":9}}],["maxfiles",{"2":{"594":1}}],["maximum",{"2":{"482":1,"778":2}}],["maxretries",{"2":{"262":1}}],["max",{"2":{"15":1,"146":1,"150":2,"159":1,"163":2,"330":5}}],["mapname",{"2":{"720":1}}],["maparray",{"2":{"713":1,"719":1}}],["mapdimension",{"2":{"713":1}}],["mapview",{"2":{"706":1}}],["mapseries",{"2":{"706":1}}],["mapper",{"2":{"280":1}}],["mappers",{"2":{"280":1}}],["map",{"2":{"14":1,"15":2,"16":1,"96":1,"153":3,"154":2,"203":1,"217":1,"226":1,"263":1,"266":1,"267":1,"281":1,"288":1,"706":1,"763":1,"778":1,"792":2,"796":4,"856":1,"859":2,"860":1,"885":1,"915":1,"939":1,"944":1,"945":1}}],["开好电话会议能更明确重点",{"2":{"1040":1}}],["开放的无限空间",{"2":{"971":1}}],["开放度高",{"2":{"512":1}}],["开放性话题讨论",{"2":{"511":1}}],["开放域交互",{"2":{"432":1}}],["开箱即用的原生技能",{"2":{"478":1}}],["开箱即用的模块化生态",{"2":{"344":1}}],["开箱即用地简化了",{"2":{"342":1}}],["开箱即用",{"2":{"287":1,"342":1,"845":1}}],["开闭原则",{"2":{"255":1}}],["开头",{"2":{"141":1}}],["开头的查询",{"2":{"98":1}}],["开始一个新帧",{"2":{"777":1}}],["开始一个新的校对任务",{"2":{"486":1}}],["开始递归渲染",{"2":{"649":1}}],["开始行动",{"2":{"466":1}}],["开始在",{"2":{"418":1}}],["开始",{"2":{"103":1,"459":1,"597":1,"825":1,"941":1,"991":1}}],["开启自动批准模式",{"2":{"484":1}}],["开启了",{"2":{"343":1}}],["开启所有严格类型检查",{"2":{"322":1}}],["开启后会生成",{"2":{"203":1}}],["开启后可以使用",{"2":{"203":1}}],["开启聚焦屏幕时自动刷新",{"2":{"94":1}}],["开启",{"2":{"13":1,"217":1}}],["开源协议",{"2":{"763":1}}],["开源的",{"2":{"728":1}}],["开源许可证",{"2":{"980":1}}],["开源许可",{"2":{"643":1}}],["开源免费",{"2":{"568":1}}],["开源自托管",{"2":{"568":1}}],["开源可自部署",{"2":{"567":1}}],["开源+微调",{"2":{"523":1}}],["开源生态标准入口",{"2":{"523":1}}],["开源生态",{"2":{"523":1}}],["开源模型市场",{"2":{"523":1}}],["开源模型推理",{"2":{"523":1}}],["开源模型",{"2":{"519":1,"523":2}}],["开源",{"2":{"8":1,"9":1,"567":2}}],["开发流程碎片化",{"2":{"973":1}}],["开发神速",{"2":{"965":1}}],["开发辅助工具链",{"2":{"939":1}}],["开发辅助脚本",{"2":{"735":1}}],["开发语言",{"2":{"880":1}}],["开发环境",{"0":{"840":1}}],["开发环境建议开启",{"2":{"203":1}}],["开发构建",{"2":{"836":1}}],["开发指南",{"2":{"790":1}}],["开发服务器",{"2":{"790":1}}],["开发时文本溢出验证",{"2":{"784":1}}],["开发用",{"2":{"763":1}}],["开发模式快速构建",{"2":{"706":1}}],["开发模式",{"0":{"723":1},"2":{"695":1,"697":1,"723":1,"781":1,"790":1,"840":1}}],["开发沙盒",{"2":{"677":1}}],["开发编辑器",{"2":{"666":1}}],["开发调试用",{"2":{"647":1}}],["开发体验同时提供完整类型",{"2":{"815":1}}],["开发体验快",{"2":{"642":1}}],["开发体验",{"2":{"565":1,"965":1}}],["开发平台",{"2":{"561":1}}],["开发经验",{"2":{"552":1}}],["开发正在摆脱杂乱的胶水代码",{"2":{"548":1}}],["开发层",{"0":{"544":1},"1":{"545":1,"546":1,"547":1,"548":1,"549":1,"550":1},"2":{"552":1}}],["开发场景中表现尤为突出",{"2":{"521":1}}],["开发成本",{"2":{"365":1}}],["开发元框架",{"2":{"344":1}}],["开发框架",{"2":{"342":1,"344":1,"477":1}}],["开发的新时代",{"2":{"343":1}}],["开发的一个基于",{"2":{"342":1}}],["开发的用于构建用户界面的声明式",{"2":{"339":1}}],["开发的基础",{"2":{"338":1}}],["开发的核心原则",{"2":{"272":1}}],["开发团队与业务专家使用相同的术语",{"2":{"277":1}}],["开发效率极高",{"2":{"962":1}}],["开发效率低",{"2":{"639":1}}],["开发效率低下",{"2":{"189":1}}],["开发效率高等优点",{"2":{"962":1}}],["开发效率高",{"2":{"20":1}}],["开发一个",{"2":{"184":1}}],["开发一个完整的功能模块",{"2":{"177":1}}],["开发中最常见的误区是",{"2":{"183":1}}],["开发中",{"2":{"156":1,"333":1,"550":1}}],["开发者几乎不需要写",{"2":{"962":1}}],["开发者依然正常写普通的类名",{"2":{"961":1}}],["开发者指南",{"2":{"939":1}}],["开发者使用时只需",{"2":{"912":1}}],["开发者只需声明数据和图表配置",{"2":{"699":1}}],["开发者只需定义",{"2":{"179":1}}],["开发者",{"2":{"671":2,"757":1,"813":1,"843":1,"933":1,"971":1}}],["开发者通过",{"2":{"652":1}}],["开发者通常被迫采用轮询",{"2":{"103":1}}],["开发者通常需要自行实现",{"2":{"83":1}}],["开发者做出最佳工作的地方",{"2":{"564":1}}],["开发者往往会面临一个尴尬的现实",{"2":{"467":1}}],["开发者经常面临一个共性挑战",{"2":{"441":1}}],["开发者面临的核心挑战是如何在实际业务中进行选型",{"2":{"432":1}}],["开发者可以直接在",{"2":{"339":1}}],["开发者可以专注于业务本身",{"2":{"59":1}}],["开发者无需逐一申请各厂商",{"2":{"523":1}}],["开发者无需再手写复杂的递归或循环逻辑",{"2":{"478":1}}],["开发者无需额外维护一套",{"2":{"85":1}}],["开发者无法从类型声明中得知这个值应该是什么类型",{"2":{"255":1}}],["开发者易陷入",{"2":{"198":1}}],["开发者常陷入",{"2":{"189":1}}],["开发者不再逐行手敲代码",{"2":{"542":1}}],["开发者不再是代码的",{"2":{"180":1}}],["开发者不需要手写优化代码",{"2":{"72":1}}],["开发者审核规范的合理性",{"2":{"177":1}}],["开发者则在主干分支逐步搭建",{"2":{"171":1}}],["开发者在正式分支中以半自动化方式逐步搭建",{"2":{"171":1}}],["开发者应将以下标准内化为肌肉记忆",{"2":{"169":1}}],["开发者必须先完成深度思考",{"2":{"169":1}}],["开发者必须在应用层自行实现",{"2":{"117":1}}],["开发者必须确保代理层配置了",{"2":{"107":1}}],["开发者需要",{"2":{"101":1}}],["开发者需要手动编写拦截逻辑",{"2":{"98":1}}],["开发者已较为熟悉",{"2":{"83":1}}],["开发",{"0":{"476":1},"2":{"3":1,"20":1,"343":1,"519":1,"699":1,"965":1}}],["a2a",{"2":{"934":1,"936":2,"938":1,"939":8,"941":2}}],["a2uimessagelistwrapper",{"2":{"951":1}}],["a2uimessage",{"2":{"951":2}}],["a2uimodal",{"2":{"939":1}}],["a2uirenderer",{"2":{"939":2}}],["a2uirow",{"2":{"939":1}}],["a2uiroot",{"2":{"939":1}}],["a2uiviewer",{"2":{"939":2}}],["a2uivideo",{"2":{"939":1}}],["a2uiprovider",{"2":{"939":2}}],["a2uilitelement",{"2":{"939":1}}],["a2uidivider",{"2":{"939":1}}],["a2uitabs",{"2":{"939":1}}],["a2uitext",{"2":{"939":1}}],["a2uiclientdatamodel",{"2":{"951":1}}],["a2uiclientcapabilities",{"2":{"948":1,"951":1}}],["a2uicontroller",{"2":{"939":1}}],["a2uicolumn",{"2":{"939":1}}],["a2uicheckbox",{"2":{"939":1}}],["a2uicard",{"2":{"939":1}}],["a2uicatalog",{"2":{"939":1,"948":3}}],["a2uiaudio",{"2":{"939":1}}],["a2uiimage",{"2":{"939":1}}],["a2uibutton",{"2":{"939":1}}],["a2uislider",{"2":{"939":1}}],["a2uisurface",{"2":{"939":4}}],["a2uischemamanager",{"2":{"939":1,"941":1,"948":1}}],["a2uistreamparserv09",{"2":{"941":1}}],["a2uistreamparserv08",{"2":{"941":1}}],["a2uistreamparser",{"0":{"947":1},"2":{"939":1,"941":1,"947":3}}],["a2ui",{"0":{"952":1},"2":{"933":6,"934":2,"935":1,"938":4,"939":34,"941":3,"942":1,"944":2,"945":1,"946":1,"948":1,"949":2,"951":5,"952":1,"955":3,"956":6}}],["ae",{"2":{"728":2,"730":2,"731":1,"734":1,"735":4,"737":1,"738":2,"742":7,"743":4,"744":3,"747":1,"754":1}}],["axeshelper",{"2":{"763":1}}],["axes",{"2":{"714":1}}],["axis2d",{"2":{"706":1}}],["axispointer",{"2":{"706":1}}],["axisbuilder",{"2":{"706":1}}],["axisview",{"2":{"706":1}}],["axismodel",{"2":{"706":1}}],["axis",{"2":{"705":1,"706":1,"709":1,"714":4}}],["axiosclient",{"2":{"274":1}}],["axios",{"2":{"83":1,"91":1,"95":1,"274":1,"342":5}}],["aha",{"2":{"372":1}}],["aop",{"2":{"344":1}}],["ajax",{"2":{"342":1,"646":1,"650":1,"654":2,"659":1}}],["abstractchat",{"2":{"913":2,"917":5,"925":1}}],["abstractions",{"2":{"817":1,"818":1}}],["abstraction",{"2":{"761":1,"762":1,"865":1}}],["abstract",{"2":{"692":1}}],["absolutestarttime",{"2":{"834":1}}],["absolute",{"2":{"334":1}}],["abortsignal",{"2":{"150":1,"891":1,"925":2}}],["aborted",{"2":{"146":1,"148":1,"149":1,"150":1}}],["abort",{"2":{"144":1,"146":1,"149":1,"150":3}}],["abortcontroller",{"0":{"149":1},"2":{"144":2,"149":1,"150":4,"878":1}}],["about",{"2":{"65":2,"67":2}}],["audit",{"2":{"586":2}}],["auditor",{"2":{"570":1,"590":1,"591":1,"592":1}}],["audioanalyser",{"2":{"763":1}}],["audiocontext",{"2":{"763":2}}],["audiocontroller",{"2":{"735":1,"738":1}}],["audiolistener",{"2":{"763":1}}],["audiofactory",{"2":{"750":2}}],["audioelement",{"2":{"735":2}}],["audio",{"2":{"515":3,"735":2,"763":3,"939":1}}],["augment",{"2":{"567":1,"568":2}}],["augmented",{"2":{"335":1,"440":1,"1001":1}}],["augmentation",{"0":{"325":1}}],["autoprefixer",{"2":{"965":1,"969":1}}],["autoplay",{"2":{"746":1,"749":1,"750":1,"754":1,"834":1}}],["autoscroll",{"2":{"865":1}}],["autostage",{"2":{"594":1}}],["autoresearch",{"2":{"851":1}}],["autofix",{"2":{"851":1}}],["automation",{"2":{"790":1}}],["autogen",{"2":{"545":1}}],["autonomy",{"2":{"402":1}}],["auto",{"2":{"15":2,"344":1,"482":1,"719":3,"824":1,"834":1,"947":1}}],["authority",{"2":{"964":2}}],["authorization",{"2":{"135":1,"141":1,"144":1,"878":1,"916":1}}],["authored",{"2":{"581":2}}],["author",{"2":{"506":1,"851":1}}],["auth`",{"2":{"451":1}}],["authguard",{"2":{"274":1}}],["authservice",{"2":{"274":1}}],["authslice",{"2":{"274":1}}],["authlayout",{"2":{"274":1}}],["authapi",{"2":{"274":1}}],["auth",{"2":{"8":1,"11":1,"16":6,"274":2,"275":2,"327":1,"568":1}}],["auth0",{"2":{"8":1}}],["academic",{"2":{"980":1}}],["accordion",{"2":{"790":2}}],["accuracy",{"2":{"790":4}}],["accent",{"2":{"962":3}}],["accepts",{"2":{"948":1}}],["accept",{"2":{"482":1,"891":1}}],["acceptedits",{"2":{"478":1,"482":1,"484":1}}],["accepted",{"2":{"163":1}}],["accel",{"2":{"107":1,"152":1}}],["accessors",{"2":{"763":1}}],["accesstoken",{"2":{"14":1}}],["access",{"2":{"14":3}}],["acid",{"2":{"553":1}}],["act",{"2":{"414":1}}],["activate",{"2":{"740":1,"986":1}}],["activemipmaplevel",{"2":{"777":1}}],["activecubeface",{"2":{"777":1}}],["active",{"2":{"318":2}}],["acting",{"2":{"427":2}}],["actionname",{"2":{"951":1}}],["actionlistener",{"2":{"951":1}}],["actionhandler",{"2":{"720":1}}],["actioninfo",{"2":{"720":2}}],["actiontype",{"2":{"654":2}}],["actionobject",{"2":{"650":1}}],["actions",{"2":{"343":2,"344":1,"414":1,"647":1,"677":1,"706":1,"735":1,"763":1,"851":1,"882":1,"939":1,"951":1}}],["action",{"0":{"654":1},"2":{"289":4,"341":1,"408":2,"411":1,"412":2,"427":2,"642":1,"646":2,"650":1,"653":1,"654":2,"662":1,"939":3,"942":1,"944":1,"946":4,"949":1}}],["ag",{"2":{"934":1,"936":1,"938":1,"941":2,"956":1}}],["agi",{"2":{"809":1,"1018":1}}],["aggregate",{"2":{"280":1,"706":1}}],["aggregates",{"2":{"280":1}}],["age",{"2":{"236":2,"267":7,"268":2,"655":3}}],["agentextension",{"2":{"939":1}}],["agentresult",{"2":{"918":1}}],["agentstepevent>",{"2":{"918":1}}],["agentstream",{"2":{"918":1}}],["agents",{"0":{"589":1,"590":1,"591":1,"592":1},"1":{"590":1,"591":1,"592":1},"2":{"456":2,"558":1,"570":4,"589":1,"590":2,"591":1,"592":3,"597":2,"790":1,"979":2,"980":3,"982":1}}],["agent的记忆是其核心模块",{"2":{"410":1}}],["agent的规划核心包含任务分解与自我反思两部分",{"2":{"409":1}}],["agent规划模块",{"2":{"409":1}}],["agent",{"0":{"355":1,"402":1,"408":1,"413":1,"414":1,"415":1,"417":1,"418":1,"432":1,"433":1,"441":1,"444":1,"451":1,"452":1,"468":1,"476":1,"478":1,"487":1,"494":1,"497":1,"535":1,"544":1,"547":1,"918":1},"1":{"409":1,"410":1,"411":1,"412":1,"414":1,"415":1,"416":2,"417":1,"418":1,"419":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"453":1,"454":1,"455":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":2,"489":2,"490":2,"491":1,"498":1,"499":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1},"2":{"103":1,"355":1,"402":6,"403":4,"406":3,"407":1,"408":2,"410":4,"411":8,"412":3,"413":1,"414":6,"415":4,"416":2,"417":6,"418":4,"419":3,"420":4,"421":3,"422":2,"424":1,"426":3,"427":8,"429":1,"431":2,"433":4,"434":1,"437":1,"438":1,"439":1,"441":7,"442":5,"443":11,"444":3,"445":2,"448":1,"450":1,"451":1,"452":1,"456":5,"467":9,"468":1,"470":11,"471":2,"472":2,"474":1,"475":1,"476":5,"477":10,"478":5,"480":1,"482":8,"483":1,"484":3,"485":2,"486":1,"488":3,"491":5,"492":1,"493":3,"494":3,"495":1,"496":4,"499":1,"502":1,"503":1,"506":1,"509":8,"511":1,"512":2,"521":2,"522":3,"534":1,"535":2,"544":1,"545":5,"546":1,"547":6,"548":1,"549":1,"550":5,"552":2,"559":1,"561":2,"562":2,"564":4,"565":1,"567":8,"568":1,"570":1,"588":2,"590":2,"591":2,"592":6,"843":3,"844":2,"845":1,"846":1,"848":1,"849":2,"851":1,"901":1,"902":1,"906":1,"907":1,"908":1,"910":1,"916":1,"918":6,"933":12,"934":9,"935":1,"936":4,"938":5,"939":13,"941":3,"942":1,"947":1,"948":6,"949":2,"951":2,"956":1,"967":1,"973":4,"974":2,"975":2,"978":2,"979":4,"980":1,"982":3,"983":2,"986":3,"987":2,"989":1,"991":2,"992":1,"994":1,"1004":1}}],["agentic",{"0":{"484":1,"542":1,"545":1,"566":1,"568":1},"1":{"567":1,"568":1},"2":{"101":1,"309":1,"367":1,"434":1,"440":1,"441":1,"541":1,"544":1,"552":1,"557":1,"559":1,"567":1,"568":1,"569":1,"1000":2}}],["a∣b",{"2":{"242":2,"243":2}}],["a∣b=a∪b",{"2":{"227":1}}],["a∣b=a∪ba",{"2":{"227":1}}],["afterupdate",{"2":{"706":1}}],["afterinit",{"2":{"706":1}}],["afterinteractive",{"2":{"72":1}}],["afterrender",{"2":{"705":1,"706":1}}],["afterfn",{"2":{"685":3}}],["after",{"0":{"742":1},"2":{"685":1,"728":2,"729":1,"735":1}}],["after=",{"2":{"234":1}}],["adk",{"2":{"934":1,"936":1,"938":1,"939":6,"941":2,"956":1}}],["adr",{"2":{"908":1}}],["adrock",{"2":{"735":2}}],["adobe",{"2":{"728":1}}],["adaptation",{"2":{"412":1}}],["adaptability",{"2":{"402":1}}],["adapter",{"2":{"280":2,"851":1,"865":1,"906":1,"939":2,"941":1}}],["adapters",{"2":{"280":1,"851":2,"865":1}}],["advancetime",{"2":{"749":1}}],["advancedcalculator",{"2":{"319":1}}],["advantage",{"2":{"396":1}}],["adminuser",{"2":{"240":2}}],["admin",{"2":{"233":5,"239":4}}],["adt",{"2":{"230":1}}],["addtoolapprovalresponse",{"2":{"917":1}}],["addtoolresult",{"2":{"917":1,"925":1}}],["addtocartbutton",{"2":{"62":1}}],["additional",{"2":{"979":1,"985":1,"994":1}}],["additionalcontext",{"2":{"979":1,"985":1,"994":2}}],["additive",{"2":{"819":2,"828":1}}],["additem",{"2":{"281":1}}],["addchild",{"2":{"818":1,"819":1}}],["addons",{"2":{"761":1,"762":1,"763":3}}],["addsurface",{"2":{"941":1}}],["addshapetomodifier",{"2":{"749":1}}],["addshape",{"2":{"744":1,"749":1}}],["addstore",{"2":{"649":1,"653":2}}],["addgettersetter",{"2":{"677":1,"682":1,"685":3}}],["added",{"2":{"581":2,"713":1}}],["addeventlistener",{"2":{"138":3,"139":1,"153":1,"769":1}}],["add`",{"2":{"451":1}}],["address",{"2":{"184":5,"280":2,"281":1}}],["add",{"2":{"17":2,"187":1,"188":1,"223":5,"238":4,"261":3,"281":2,"289":1,"295":3,"304":3,"307":3,"310":3,"319":2,"321":1,"324":1,"581":3,"692":1,"696":2,"769":1,"777":1,"782":2,"818":1,"819":2,"821":1,"831":1,"834":1,"998":1}}],["amber",{"2":{"962":1}}],["ambientlight",{"2":{"763":1}}],["amispagemeta",{"2":{"662":1}}],["amisschema",{"2":{"649":1}}],["amisr",{"2":{"647":1}}],["amis",{"0":{"655":1},"2":{"639":4,"640":3,"645":7,"646":7,"647":14,"649":6,"650":3,"652":1,"653":1,"654":1,"655":1,"656":7,"658":1,"662":4,"666":1,"667":1,"668":1}}],["amazon",{"2":{"354":1}}],["amount",{"2":{"281":9,"865":1}}],["amd",{"0":{"305":1},"2":{"203":1,"298":2,"303":1,"305":2,"306":5,"308":2}}],["amp",{"0":{"340":1,"342":1,"343":1,"345":1,"346":1},"2":{"82":2,"98":1,"227":4,"236":2,"238":1,"239":1,"242":7,"243":10,"247":1,"250":4,"267":1,"270":2,"547":1,"686":1,"744":1,"968":1,"1001":1,"1003":1}}],["a和b为数字时无需校验",{"2":{"187":1}}],["aws",{"2":{"125":1,"354":1}}],["await",{"2":{"14":2,"15":4,"16":5,"59":1,"68":1,"69":1,"70":1,"71":2,"87":2,"96":1,"141":2,"143":3,"160":4,"163":1,"164":3,"225":1,"246":2,"281":5,"288":1,"313":2,"315":2,"330":1,"333":2,"483":1,"484":1,"486":1,"488":1,"489":1,"490":1,"814":1,"825":2,"877":1,"902":1,"927":1}}],["are",{"2":{"986":1}}],["areastyle",{"2":{"706":1}}],["areaexhaustive",{"2":{"232":1}}],["area",{"2":{"230":1,"231":1,"714":1}}],["ar",{"2":{"790":2}}],["aria",{"2":{"705":1,"706":1,"715":2}}],["arcconfig>",{"2":{"693":1}}],["arc",{"2":{"677":1,"679":1,"680":1,"693":1}}],["architecting",{"2":{"553":1}}],["architecturespec",{"2":{"442":1}}],["architecture",{"0":{"644":1},"1":{"645":1,"646":1,"647":1},"2":{"336":1,"675":1,"906":1,"938":1,"994":1}}],["arrowconfig>",{"2":{"693":1}}],["arrow",{"2":{"677":1,"679":1,"680":1,"693":1}}],["arr",{"2":{"263":1,"892":2,"899":2}}],["arraycamera",{"2":{"763":1}}],["arrays",{"2":{"735":1}}],["array",{"2":{"98":1,"255":1,"274":1,"661":1,"662":1,"663":1,"692":1,"865":1,"946":2,"947":1,"952":3}}],["arg",{"2":{"254":4,"258":3,"263":3,"265":2,"856":1,"865":2}}],["args",{"2":{"248":1,"324":2,"856":1,"865":2}}],["artifactid>",{"2":{"193":1}}],["artifactid>commons",{"2":{"193":1}}],["article>",{"2":{"15":1}}],["article",{"2":{"15":1,"263":1,"851":2}}],["alternative",{"2":{"994":2}}],["alternatives",{"2":{"994":1}}],["alternate",{"2":{"818":1,"825":3,"834":1,"839":1}}],["al",{"2":{"790":2}}],["also",{"2":{"350":1}}],["alphatest",{"2":{"771":1,"777":1}}],["alpha",{"2":{"331":1,"777":1,"966":1,"970":1}}],["alice",{"2":{"236":2,"259":2,"266":2,"267":2,"268":3,"269":2}}],["aliases",{"2":{"865":1}}],["alias",{"2":{"216":1,"661":1}}],["alive",{"2":{"103":1,"136":1,"138":2,"139":1,"152":1}}],["alb",{"2":{"125":1}}],["always",{"2":{"85":1}}],["allkeys",{"2":{"239":1}}],["allowed",{"2":{"964":1}}],["allowedtools",{"2":{"470":1,"472":1,"482":1,"484":1,"490":1}}],["allowdangerouslyskippermissions",{"2":{"482":1}}],["allow",{"2":{"482":1,"594":1}}],["allowimportingtsextensions",{"2":{"204":1}}],["allowunreachablecode",{"2":{"203":1}}],["allowsyntheticdefaultimports",{"2":{"203":1,"204":1}}],["all",{"2":{"47":1,"290":2,"482":1,"706":1,"708":1,"789":2,"790":3,"792":1,"795":2,"805":2,"865":1,"915":1,"945":2,"980":2}}],["avif",{"2":{"72":1}}],["aisdkerror",{"2":{"907":1}}],["ai商",{"2":{"558":1}}],["airbnb",{"2":{"366":1,"728":2,"735":1}}],["ainstance",{"2":{"315":1}}],["aigc",{"2":{"156":1}}],["aimodelscontent",{"2":{"74":2}}],["ai",{"0":{"106":1,"130":1,"357":1,"359":1,"360":1,"367":1,"460":1,"465":1,"510":1,"513":1,"516":1,"537":1,"540":1,"543":1,"551":1,"554":1,"557":2,"563":1,"566":1,"598":1,"628":1,"963":1,"971":1,"1017":1},"1":{"511":1,"512":1,"514":1,"515":1,"517":1,"518":1,"541":1,"542":1,"543":1,"555":1,"556":1,"557":1,"564":1,"565":1,"567":1,"568":1},"2":{"67":2,"74":1,"80":1,"101":2,"102":1,"106":1,"107":1,"112":1,"123":1,"124":2,"125":2,"126":1,"128":1,"130":3,"131":4,"132":1,"135":1,"142":1,"155":1,"156":1,"158":1,"163":1,"167":1,"169":4,"170":5,"171":9,"176":2,"177":14,"178":1,"179":6,"180":5,"309":1,"316":1,"332":2,"335":2,"340":2,"348":3,"351":1,"354":2,"355":5,"357":4,"358":4,"359":5,"360":5,"361":3,"362":2,"367":10,"375":6,"376":1,"402":2,"403":2,"405":3,"406":1,"415":4,"419":1,"420":2,"426":1,"433":1,"434":1,"435":2,"436":1,"437":1,"438":3,"439":6,"440":4,"441":1,"442":2,"454":1,"456":1,"457":2,"458":1,"459":3,"460":3,"461":1,"462":8,"463":1,"464":1,"465":3,"466":5,"467":1,"476":1,"477":1,"478":1,"480":1,"483":1,"491":6,"495":1,"496":1,"499":2,"509":1,"511":5,"512":7,"514":2,"515":31,"517":2,"518":19,"521":2,"522":6,"523":8,"525":8,"526":5,"527":5,"528":2,"529":2,"530":3,"531":6,"532":3,"533":2,"534":2,"536":4,"537":6,"538":2,"539":3,"540":4,"541":2,"542":4,"543":3,"544":2,"547":1,"548":2,"551":3,"552":3,"553":5,"554":2,"555":3,"556":2,"557":7,"558":4,"559":9,"561":6,"564":7,"565":2,"567":9,"568":3,"569":3,"570":2,"573":2,"585":3,"588":2,"590":1,"597":1,"598":3,"610":2,"628":7,"630":1,"631":3,"632":2,"636":1,"843":3,"844":1,"845":1,"846":1,"848":2,"849":1,"851":1,"875":1,"901":12,"902":6,"904":1,"906":6,"907":11,"908":2,"909":3,"910":1,"912":7,"913":1,"915":1,"916":1,"917":2,"922":1,"926":1,"931":1,"933":1,"963":4,"965":2,"967":2,"971":9,"973":3,"974":1,"980":1,"1000":7,"1001":9,"1002":5,"1004":1,"1005":1,"1011":1,"1018":5}}],["a",{"0":{"100":1},"2":{"47":1,"76":1,"85":2,"89":1,"92":2,"95":2,"117":1,"187":3,"188":2,"223":4,"227":6,"229":2,"237":3,"238":11,"242":19,"243":4,"244":15,"250":14,"267":2,"281":1,"295":8,"304":8,"307":8,"310":4,"314":3,"315":43,"319":4,"321":2,"324":2,"329":1,"345":1,"366":1,"375":1,"394":1,"414":1,"417":1,"550":2,"865":1,"919":1,"965":1,"979":1,"980":2,"982":1,"983":1,"986":1,"989":1,"995":2}}],["aspect",{"2":{"778":1}}],["astc",{"2":{"763":1}}],["ast",{"2":{"646":1,"647":1,"655":4,"965":1,"969":1}}],["ascii",{"0":{"849":1},"2":{"636":1,"740":1,"741":1,"742":1,"743":1,"744":1,"790":4,"856":1,"858":1,"976":1}}],["ascending",{"2":{"16":2}}],["ask",{"2":{"350":1}}],["assign",{"2":{"679":1}}],["assistant",{"2":{"483":1,"484":1,"913":1,"915":1}}],["assetpath",{"2":{"750":1}}],["assetmanager",{"2":{"735":1}}],["assetloader",{"2":{"734":1,"738":1}}],["asset",{"2":{"391":1,"706":1,"735":2}}],["assetspath",{"2":{"749":1,"750":1}}],["assets",{"2":{"274":1,"442":3,"443":1,"677":1,"749":1,"790":1,"819":1,"939":1,"979":1,"980":1}}],["assertnever",{"2":{"232":3,"250":1}}],["assumechangesonlyaffectdirectdependencies",{"2":{"203":1}}],["as",{"2":{"16":2,"153":1,"154":1,"246":1,"247":2,"310":4,"312":1,"318":2,"550":2,"724":1,"725":1,"782":1,"948":1}}],["asyncdirective",{"2":{"939":1}}],["asyncevaluator",{"2":{"646":1,"655":1}}],["asynciterablestream",{"2":{"915":1}}],["asynciterable",{"2":{"482":1,"483":1,"917":1,"918":1}}],["asynchronous",{"2":{"305":2}}],["async",{"2":{"14":2,"15":4,"16":4,"59":1,"68":1,"69":1,"70":1,"71":1,"87":1,"88":1,"96":1,"141":1,"143":3,"144":1,"150":1,"160":1,"163":1,"164":1,"225":1,"246":1,"281":4,"288":1,"313":1,"315":2,"327":6,"330":1,"333":1,"489":2,"490":1,"879":1,"899":1,"926":1,"994":1}}],["annotations",{"2":{"980":6}}],["ancestor",{"2":{"945":1}}],["ancestors",{"2":{"941":1}}],["anchor",{"2":{"743":2}}],["anchoring",{"2":{"392":1,"397":1}}],["anaglyph",{"2":{"763":1}}],["analyzetext",{"2":{"792":1,"798":2}}],["analyze",{"2":{"762":1,"765":1,"770":4,"775":1,"777":1,"851":1,"980":1}}],["analysischunk",{"2":{"793":1,"805":1}}],["analysis",{"0":{"795":1},"2":{"470":1,"788":1,"789":5,"790":1,"792":2,"798":2,"805":1,"851":1,"939":1}}],["analyst",{"2":{"416":1,"470":2,"471":4,"472":2,"475":1}}],["angleaxis",{"2":{"714":1}}],["angular",{"2":{"91":1,"285":1,"344":2,"642":1,"904":1,"906":1,"933":1,"934":1,"935":1,"936":2,"938":1,"939":5,"941":1}}],["animejs",{"2":{"838":1,"839":1,"841":5}}],["anime",{"2":{"812":3,"817":1,"819":1,"827":1,"828":1,"830":1,"832":1,"836":4}}],["animdata",{"2":{"749":2}}],["animtype",{"2":{"741":1}}],["anim",{"2":{"686":3,"818":1}}],["animatable类",{"2":{"819":1}}],["animatable",{"2":{"819":3,"821":1,"822":2}}],["animatelayout",{"2":{"819":1,"821":1}}],["animatecomputedstyle",{"2":{"819":1,"821":1}}],["animate",{"2":{"818":2,"819":3,"821":2,"830":1,"835":1,"839":2,"841":1}}],["animationparams",{"2":{"819":1,"834":4,"835":2}}],["animation模块",{"2":{"819":1}}],["animationutils",{"2":{"763":1}}],["animationobjectgroup",{"2":{"763":1}}],["animationaction",{"2":{"763":1,"772":3}}],["animationclip",{"2":{"763":1,"772":3}}],["animationconfigwithdata",{"2":{"750":1}}],["animationconfigwithpath",{"2":{"750":1}}],["animationconfig",{"2":{"750":1}}],["animationmixer",{"2":{"763":1,"772":3}}],["animationmanagerworkeroverride",{"2":{"735":1}}],["animationmanager",{"0":{"740":1},"2":{"733":1,"734":1,"735":2,"737":1,"738":1,"740":4}}],["animationeventname",{"2":{"750":1}}],["animationdata",{"2":{"749":1,"750":2,"755":1}}],["animationdirection",{"2":{"749":1,"750":2}}],["animationid",{"2":{"749":1}}],["animationitemworkeroverride",{"2":{"735":1}}],["animationitem",{"2":{"734":1,"735":2,"738":2,"741":1,"749":2,"750":2}}],["animationframepolyfill",{"2":{"735":1}}],["animationfn",{"2":{"677":1,"692":3}}],["animationloop",{"2":{"686":2}}],["animationsegment",{"2":{"749":2,"750":2}}],["animations",{"2":{"677":1,"686":2,"735":1,"819":1}}],["animation",{"0":{"686":1,"772":1},"2":{"647":1,"675":1,"676":2,"677":1,"679":1,"680":1,"686":10,"692":2,"693":1,"706":1,"734":1,"735":1,"737":1,"740":2,"754":2,"763":2,"812":2,"817":2,"818":3,"819":3,"821":1,"822":2,"825":1}}],["animal",{"2":{"231":14}}],["answer",{"2":{"427":1,"550":1}}],["anti",{"2":{"980":1,"989":2}}],["antd",{"2":{"647":1,"965":1,"971":1}}],["anthropic",{"2":{"439":1,"441":2,"453":1,"467":1,"470":1,"478":2,"480":1,"481":7,"483":1,"511":1,"521":3,"525":4,"526":1,"527":1,"530":1,"531":1,"535":1,"539":1,"547":1,"567":2,"581":1,"901":1,"906":1,"907":2,"908":2,"927":1,"980":2}}],["ant",{"2":{"340":1,"968":1}}],["any|undef|",{"2":{"945":1}}],["any",{"0":{"253":1},"2":{"96":1,"203":3,"234":2,"238":1,"248":1,"253":1,"255":3,"289":2,"324":2,"661":8,"662":10,"663":3,"719":3,"749":7,"750":3,"777":6,"865":1,"891":1,"898":1,"945":1,"951":1}}],["any>>",{"2":{"945":1}}],["any>",{"2":{"16":1,"661":1,"663":7,"865":8,"951":1}}],["an",{"2":{"87":1,"91":1}}],["android",{"2":{"342":2,"728":1,"729":1,"933":1,"939":1}}],["and",{"0":{"428":1},"1":{"429":1,"430":1,"431":1},"2":{"75":1,"85":2,"187":1,"414":2,"428":1,"430":1,"431":1,"432":2,"433":1,"456":2,"545":1,"865":1}}],["anon",{"2":{"16":2}}],["atable|",{"2":{"818":1}}],["attribute",{"2":{"763":1,"770":1,"777":1,"827":2,"834":2}}],["attributes",{"2":{"762":1,"763":1}}],["attrs",{"2":{"682":1,"685":3}}],["attempt++",{"2":{"160":1}}],["attempt",{"2":{"160":3}}],["atoms",{"2":{"274":1}}],["atomic",{"0":{"962":1,"964":1},"1":{"963":1},"2":{"274":1,"962":1}}],["at",{"2":{"16":5}}],["atlas",{"2":{"8":1}}],["apollo",{"2":{"342":3}}],["apache",{"2":{"193":1,"643":1,"699":4,"706":1,"939":1}}],["app数据统计",{"2":{"1041":1}}],["approved",{"2":{"482":1}}],["appreducer",{"2":{"289":2}}],["appendchild",{"2":{"782":1}}],["appenddata",{"2":{"713":1,"719":1}}],["append",{"2":{"482":1}}],["appstore",{"2":{"646":1,"647":1,"650":2}}],["appstate",{"2":{"289":2}}],["apps",{"2":{"290":1,"335":2,"851":1,"939":6}}],["appconfig",{"2":{"262":1}}],["applykeepallpreprocessing",{"2":{"795":1}}],["applykinsoku",{"2":{"795":1}}],["apply",{"2":{"324":1,"967":1,"970":2}}],["applyfilter",{"2":{"154":2,"682":1}}],["applogger",{"2":{"312":1}}],["application",{"2":{"141":1,"144":1,"150":1,"190":1,"280":6,"281":2,"866":3,"878":1,"941":1}}],["app",{"0":{"64":1},"1":{"65":1,"66":1,"67":1},"2":{"13":2,"15":3,"16":1,"17":1,"23":1,"34":1,"61":1,"62":2,"64":1,"65":4,"70":1,"71":1,"74":2,"78":1,"94":2,"274":3,"275":2,"280":3,"288":4,"290":7,"291":1,"295":2,"300":2,"301":1,"302":1,"310":1,"311":3,"314":3,"315":1,"318":1,"324":1,"325":1,"366":3,"370":2,"408":1,"518":1,"561":1,"647":1,"790":1,"916":1,"936":1,"938":2,"939":5,"959":1,"960":1,"997":1,"1044":1,"1048":1}}],["apikey",{"2":{"916":2}}],["api桥接",{"2":{"819":1}}],["apiobject",{"2":{"663":1}}],["apicontrol",{"2":{"647":1,"656":1}}],["apiconfig",{"2":{"243":1}}],["api2d",{"2":{"523":3}}],["apiurl",{"2":{"262":1}}],["apiresponse",{"2":{"256":1,"260":2}}],["apierror",{"2":{"231":4}}],["apiendpoint",{"2":{"88":2}}],["api",{"0":{"8":1,"71":1,"137":1,"138":1,"215":2,"260":1,"342":2,"520":1,"693":2,"750":1,"778":2,"806":1,"835":1,"866":1,"898":1,"899":1,"926":1,"952":1},"1":{"138":1,"139":1,"521":1,"522":1},"2":{"2":1,"4":2,"5":1,"8":4,"9":1,"11":1,"18":2,"19":1,"20":2,"26":1,"45":1,"47":4,"51":1,"54":1,"57":1,"60":2,"61":1,"66":1,"67":4,"70":1,"71":4,"80":2,"83":1,"85":5,"87":1,"88":3,"89":2,"91":3,"94":1,"95":2,"96":1,"98":4,"100":1,"103":1,"105":1,"110":1,"113":1,"122":1,"126":4,"127":1,"131":1,"134":1,"135":4,"137":1,"138":2,"141":2,"144":1,"155":1,"160":1,"163":1,"164":2,"166":1,"167":1,"180":1,"190":1,"191":1,"195":1,"205":1,"211":2,"216":1,"256":2,"260":2,"262":1,"274":13,"275":1,"280":3,"281":1,"291":1,"327":1,"331":1,"336":2,"338":1,"341":2,"342":14,"344":4,"402":1,"408":1,"411":3,"412":1,"414":2,"419":1,"439":2,"465":1,"478":1,"481":4,"510":1,"512":5,"519":1,"520":1,"521":5,"522":15,"523":14,"548":2,"549":1,"553":1,"555":1,"559":1,"568":3,"570":2,"573":3,"575":3,"576":3,"577":2,"583":1,"590":1,"640":2,"646":1,"647":5,"649":1,"650":2,"653":1,"654":2,"662":1,"663":6,"668":2,"670":3,"673":1,"699":1,"704":3,"705":3,"706":5,"708":3,"712":2,"714":1,"729":1,"733":1,"734":3,"735":2,"737":2,"738":1,"750":2,"757":2,"761":1,"762":3,"763":1,"765":3,"768":3,"770":1,"778":1,"784":1,"786":1,"788":2,"789":4,"790":2,"792":1,"798":2,"802":1,"805":1,"806":2,"810":1,"812":4,"814":1,"817":1,"821":1,"835":5,"866":1,"872":1,"873":2,"874":2,"877":1,"878":1,"879":1,"881":4,"882":2,"883":1,"889":1,"891":2,"898":1,"901":4,"902":1,"906":2,"907":3,"910":1,"912":2,"916":1,"923":1,"926":1,"939":6,"954":1,"955":2,"964":1,"986":1}}],["适配封装",{"2":{"939":1}}],["适配",{"2":{"817":1}}],["适配层",{"2":{"763":1}}],["适配器模式",{"0":{"916":1},"2":{"904":1,"910":1,"948":1}}],["适配器认证",{"2":{"856":1}}],["适配器文档",{"2":{"851":1}}],["适配器编写技能",{"2":{"851":1}}],["适配器共享代码",{"2":{"851":1}}],["适配器验证+测试",{"2":{"851":1}}],["适配器验证",{"2":{"851":1}}],["适配器注册与发现模块",{"2":{"859":1}}],["适配器注册与发现",{"0":{"859":1}}],["适配器注册",{"2":{"851":1}}],["适配器层",{"2":{"849":1,"850":1}}],["适配器命令处理",{"2":{"855":1}}],["适配器命令",{"2":{"849":1}}],["适配器",{"2":{"647":1,"851":6,"939":1}}],["适量运动",{"2":{"1025":1}}],["适量运动等原则做了铺垫",{"2":{"1024":1}}],["适量",{"2":{"647":1}}],["适场景",{"2":{"568":1}}],["适应混合工作制",{"0":{"1040":1}}],["适应性",{"2":{"402":1}}],["适应不同的业务数据模型",{"2":{"256":1}}],["适用广度",{"2":{"432":1}}],["适用于搜索问答",{"2":{"512":1}}],["适用于解耦类与类之间的循环引用",{"2":{"315":1}}],["适用于某些必须双向通信的复杂业务",{"2":{"315":1}}],["适用于需要根据不同参数批量创建相似对象的场景",{"2":{"300":1}}],["适用于",{"2":{"203":1}}],["适用于服务端间的异步事件通知",{"2":{"130":1}}],["适用于不同的项目场景",{"2":{"97":1}}],["适用与不适用场景",{"0":{"25":1,"29":1,"33":1,"38":1,"43":1}}],["适用场景与最佳实践",{"2":{"965":1}}],["适用场景与不适用场景",{"0":{"19":1}}],["适用场景速查",{"0":{"167":1}}],["适用场景出发",{"2":{"102":1}}],["适用场景以及如何选型",{"2":{"21":1}}],["适用场景",{"0":{"875":1},"2":{"6":1,"19":1,"36":1,"45":1,"122":1,"166":1,"270":1,"287":1,"341":1,"342":3,"365":1,"366":1,"414":1,"435":1,"436":1,"437":1,"438":1,"439":1,"583":1,"585":1,"592":1,"958":1,"960":1,"961":1,"964":1}}],["适合底层",{"2":{"965":1}}],["适合库构建",{"2":{"759":1}}],["适合声明式框架",{"2":{"702":1}}],["适合不需要交互的纯展示图层",{"2":{"680":1}}],["适合中大型团队在已有复杂代码库上进行",{"2":{"567":1}}],["适合中文日常搜索需求",{"2":{"518":1}}],["适合关注数据主权的国内开发者与有合规要求的企业团队",{"2":{"564":1}}],["适合产品原型快速验证",{"2":{"561":1}}],["适合学习参考优秀设计",{"2":{"561":1}}],["适合学术调研",{"2":{"518":1}}],["适合快速原型和在线学习编程",{"2":{"561":1}}],["适合快速调用多模态开源模型做原型验证",{"2":{"523":1}}],["适合人群",{"2":{"561":1,"564":1,"567":1}}],["适合个人开发者快速调用海外模型",{"2":{"523":1}}],["适合个人知识库与团队项目管理中的内容整理与二次创作",{"2":{"515":1}}],["适合开源模型研发与企业私有化微调场景",{"2":{"523":1}}],["适合开发知识库问答",{"2":{"522":1}}],["适合需要多模态输出",{"2":{"522":1}}],["适合需要私有化部署的场景",{"2":{"7":1}}],["适合法律合同分析",{"2":{"522":1}}],["适合高并发轻量对话与内容摘要场景",{"2":{"522":1}}],["适合高并发轻量场景",{"2":{"521":1}}],["适合研究辅助与多模态应用开发",{"2":{"521":1}}],["适合写作",{"2":{"521":1}}],["适合对响应延迟极敏感的实时对话",{"2":{"523":1}}],["适合对数据隐私或成本极度敏感的场景",{"2":{"519":1}}],["适合对英文创作",{"2":{"510":1}}],["适合在线学习",{"2":{"515":1}}],["适合流程梳理",{"2":{"515":1}}],["适合内容创作",{"2":{"512":1}}],["适合内容相对固定",{"2":{"33":1}}],["适合多场景使用",{"2":{"512":1}}],["适合作为通用",{"2":{"512":1}}],["适合日常使用和本地需求",{"2":{"510":1}}],["适合家长理解并转述给孩子",{"2":{"494":1}}],["适合永远是双向的",{"2":{"380":1}}],["适合实验性场景",{"2":{"341":1}}],["适合用",{"2":{"178":1}}],["适合",{"0":{"80":1},"2":{"567":1,"798":1}}],["适合场景",{"2":{"63":1}}],["适合那些内容需要更新",{"2":{"38":1}}],["适合非技术人员维护内容",{"2":{"9":1}}],["适合小型项目",{"2":{"7":1}}],["pk",{"2":{"1030":1}}],["pdca",{"2":{"1027":1}}],["pdf",{"2":{"411":1,"414":1,"416":1,"436":2,"470":4,"471":4,"472":4,"474":1,"476":1,"512":1,"514":1,"515":2,"522":2,"671":1,"785":1}}],["p3",{"2":{"763":1}}],["pv",{"2":{"749":1}}],["pbr",{"2":{"758":2,"759":1,"763":3,"771":2,"778":1}}],["pb=pucker",{"2":{"744":1}}],["pb",{"2":{"735":1,"737":1,"744":1}}],["pmrem",{"2":{"763":2}}],["pmremgenerator",{"2":{"763":1,"765":1}}],["pm",{"2":{"457":1}}],["pmndrs",{"2":{"341":2}}],["ppt",{"2":{"515":2}}],["pptx",{"2":{"453":1}}],["ppr",{"0":{"39":1,"73":1,"75":1,"77":1},"1":{"40":1,"41":1,"42":1,"43":1,"74":1,"75":1,"76":1,"77":1,"78":1},"2":{"39":2,"40":1,"41":3,"43":1,"45":3,"46":1,"47":1,"54":1,"55":3,"73":1,"75":2,"77":3}}],["pg",{"2":{"357":2,"358":2,"359":2,"360":2,"361":2,"362":1}}],["p99",{"2":{"353":1}}],["p90",{"2":{"353":1}}],["peer",{"2":{"666":1}}],["peel",{"0":{"373":1}}],["pendingelements",{"2":{"749":1}}],["pending",{"2":{"281":3,"318":1,"719":1,"860":2,"866":1,"994":1}}],["people",{"2":{"267":2,"350":1}}],["performstagetask",{"2":{"712":1}}],["performance",{"2":{"592":1,"677":1}}],["perfectdrawenabled",{"2":{"692":1}}],["per",{"2":{"653":2,"712":1}}],["permissions",{"2":{"482":2}}],["permission",{"2":{"482":2,"586":1}}],["permissionmode",{"2":{"478":1,"482":2,"484":1}}],["perplexity",{"2":{"348":3,"349":4,"350":4,"352":1,"353":1,"354":1,"355":1,"356":1,"518":7}}],["persuasion",{"2":{"980":1}}],["perspectivecamera",{"2":{"763":1,"778":1,"782":1}}],["persistence",{"2":{"280":1,"281":1}}],["personalized",{"2":{"939":2}}],["person",{"2":{"236":6,"267":5}}],["percent",{"2":{"139":1}}],["pet",{"2":{"229":3}}],["pnpm",{"2":{"216":1,"335":3,"594":1,"642":1,"790":1,"904":2,"929":1,"930":4,"980":2}}],["png",{"2":{"163":1,"471":1,"472":1,"474":2,"677":2,"719":1,"939":1}}],["physics",{"2":{"763":1}}],["physicallightingmodel",{"2":{"763":1}}],["phong",{"2":{"759":1,"763":1}}],["phone",{"2":{"184":1,"185":5,"260":1,"280":1}}],["php",{"2":{"3":1}}],["pc",{"2":{"168":1,"699":1}}],["pid",{"2":{"866":1}}],["pictorialbarview",{"2":{"706":1}}],["pictorialbarseries",{"2":{"706":1}}],["pictorialbar",{"2":{"706":1}}],["piecewise",{"2":{"706":1}}],["pieview",{"2":{"706":1}}],["pieseries",{"2":{"706":1}}],["pie",{"2":{"706":2}}],["pixelratio",{"2":{"719":1}}],["pixelate",{"2":{"677":1,"679":1}}],["pixijs",{"2":{"702":1}}],["pinterface",{"2":{"749":1}}],["pinia",{"2":{"339":1,"341":1}}],["pingpong",{"2":{"772":1}}],["ping",{"2":{"117":1,"147":4,"150":4,"860":3,"866":2}}],["pi",{"2":{"230":1,"232":1,"295":3,"310":3,"321":1}}],["pipelinehandle",{"2":{"777":2}}],["pipelinelayout",{"2":{"768":1}}],["pipelines",{"2":{"762":2,"763":1,"765":1,"766":1,"768":1}}],["pipelineid",{"2":{"712":1,"719":1}}],["pipelinemap",{"2":{"712":1}}],["pipeline",{"0":{"712":1,"969":1},"2":{"454":1,"462":1,"676":1,"677":1,"680":1,"705":1,"706":1,"709":1,"712":3,"719":1,"762":1,"777":1,"849":1,"851":1,"855":1,"856":1,"865":2,"965":1}}],["pipes",{"2":{"275":1}}],["pipe",{"2":{"153":1,"154":1,"275":2}}],["port",{"2":{"866":1}}],["pool",{"2":{"735":6}}],["pooling",{"2":{"735":2}}],["pools",{"2":{"734":1}}],["pos",{"2":{"692":4}}],["position=0",{"2":{"892":1}}],["positional",{"2":{"865":1}}],["positionalaudio",{"2":{"763":1}}],["position",{"2":{"685":3,"743":1,"766":2,"769":1,"772":2,"777":1,"778":1,"782":2,"819":1,"834":2,"892":3}}],["postcss",{"0":{"969":1},"2":{"960":1,"965":2,"969":2}}],["posttoapi",{"2":{"907":1}}],["postprocessing",{"2":{"762":2,"763":2}}],["postpage",{"2":{"15":1}}],["postupdater",{"2":{"720":1}}],["postinstall",{"2":{"851":1}}],["postiniter",{"2":{"720":1}}],["postid",{"2":{"16":6}}],["postid=",{"2":{"15":1}}],["posterizetime",{"2":{"742":1}}],["posterize",{"2":{"677":1,"679":1}}],["post>",{"2":{"78":1}}],["post",{"0":{"154":1},"2":{"15":12,"16":5,"69":1,"78":1,"91":1,"92":1,"119":1,"122":1,"126":1,"131":2,"135":2,"141":5,"142":1,"144":2,"150":2,"153":1,"154":5,"155":1,"342":1,"353":1,"551":1,"705":1,"715":1,"790":2,"860":4,"866":3,"873":1,"878":1,"923":1}}],["posts",{"2":{"15":6,"69":1,"70":2,"71":1,"78":1}}],["postgresql",{"2":{"8":1,"11":1,"573":1}}],["pointlight",{"2":{"763":1}}],["pointtodata",{"2":{"714":1}}],["pointerlock等",{"2":{"763":1}}],["pointersize",{"2":{"719":1}}],["pointerid",{"2":{"692":1}}],["pointerup",{"2":{"684":1}}],["pointermove",{"2":{"684":1}}],["pointerdown",{"2":{"684":1}}],["pointer",{"2":{"684":2,"939":1,"942":1,"944":1,"945":2,"951":1,"952":1,"958":1,"959":1,"961":1,"964":1}}],["pointerevents",{"2":{"676":1,"677":1,"679":1,"680":1,"684":2}}],["point",{"2":{"683":1,"735":1,"939":1}}],["pointsmaterial",{"2":{"763":1}}],["points",{"2":{"628":2,"636":1,"706":1,"763":1,"766":1,"777":1}}],["polluter",{"2":{"980":1}}],["polling",{"2":{"103":2,"127":1,"156":3,"163":3,"166":2}}],["polyglot",{"2":{"980":1}}],["polygonoffsetunits",{"2":{"777":1}}],["polygonoffsetfactor",{"2":{"777":1}}],["polygonoffset",{"2":{"777":1}}],["polyfill",{"2":{"735":1}}],["polynomialbezier",{"2":{"735":1}}],["polar",{"2":{"706":2,"714":2}}],["polotno",{"2":{"671":1}}],["power",{"2":{"325":3}}],["pow",{"2":{"146":1,"150":1}}],["popup",{"2":{"851":4}}],["populatecache",{"2":{"88":1}}],["pop",{"2":{"141":1,"143":1}}],["pong",{"2":{"117":1,"860":1}}],["plus",{"2":{"340":2,"961":1,"968":1}}],["pluginmanager",{"2":{"656":2}}],["plugins",{"2":{"288":3,"656":1,"979":1,"980":1,"998":2}}],["plugin",{"2":{"53":1,"343":1,"646":2,"647":4,"656":1,"750":1,"851":3,"855":1,"865":1,"939":1,"979":6,"980":10,"985":4,"994":1,"998":3}}],["playwright",{"2":{"904":1}}],["playcount",{"2":{"749":1}}],["playdirection",{"2":{"749":1}}],["playspeed",{"2":{"749":1}}],["player",{"2":{"728":2,"735":3,"740":1,"741":1,"742":1,"743":1,"744":1}}],["play",{"2":{"672":1,"677":1,"686":2,"692":1,"734":1,"740":2,"749":1,"750":1,"772":1,"819":1,"825":1,"834":1}}],["playground",{"2":{"467":2,"477":2}}],["plain",{"2":{"706":1,"865":1}}],["plaintext",{"0":{"855":1},"2":{"649":1,"650":1,"652":1,"653":1,"654":1,"655":1,"656":1,"679":1,"680":1,"682":1,"683":1,"684":1,"709":1,"711":1,"712":1,"713":1,"714":1,"740":1,"741":1,"742":1,"743":1,"744":1,"765":1,"766":1,"771":1,"772":1,"792":1,"793":1,"795":1,"796":1,"797":1,"798":1,"799":1,"821":1,"822":1,"824":1,"825":1,"826":1,"827":1,"828":1,"938":1,"941":1,"942":1,"944":1,"945":1,"946":1,"947":1,"948":1,"982":1,"983":1,"985":1,"986":1,"987":1,"988":1,"989":1}}],["plainobject",{"2":{"269":2,"661":1}}],["placeholder",{"2":{"647":1}}],["placeholder=",{"2":{"16":1}}],["platform",{"2":{"456":2,"521":1,"649":1,"985":1}}],["plantask",{"2":{"994":2}}],["plans",{"2":{"979":2,"980":4,"982":1,"983":3,"987":2,"991":1,"994":2,"995":4,"999":1}}],["plane",{"2":{"419":1,"763":1,"777":1}}],["plan",{"0":{"428":1},"1":{"429":1,"430":1,"431":1},"2":{"414":2,"428":1,"430":1,"431":1,"432":2,"433":1,"482":1,"545":1,"712":1,"939":1,"980":1,"983":1}}],["planning",{"2":{"408":2,"482":1}}],["purple",{"2":{"964":1}}],["purge",{"2":{"962":1}}],["puppeteer",{"2":{"763":1,"846":1}}],["puckerandbloat",{"2":{"744":1}}],["puckerandbloatmodifier",{"2":{"735":1,"737":1}}],["pucker",{"2":{"730":1}}],["pull",{"2":{"451":1,"980":1,"1008":4}}],["pubspec",{"2":{"939":2}}],["pub",{"0":{"302":1},"2":{"117":1,"163":1,"167":1,"939":1}}],["publisher",{"2":{"280":1}}],["published",{"2":{"17":1}}],["publishdate",{"2":{"14":2,"15":2}}],["public",{"2":{"14":4,"16":2,"184":3,"185":6,"194":2,"203":1,"231":1,"281":9,"705":1,"734":1,"845":1,"849":1,"856":1,"859":1,"865":2}}],["put",{"2":{"91":1,"92":1,"96":1,"135":1,"142":1,"873":1}}],["push",{"2":{"17":1,"261":1,"281":1,"289":1,"302":1,"315":1,"451":2,"1008":5}}],["pt",{"2":{"16":1,"714":1,"962":1}}],["pruning",{"2":{"948":1}}],["prachum",{"2":{"790":1}}],["practices",{"2":{"456":1,"980":1}}],["prd",{"2":{"541":1}}],["principles",{"2":{"980":1}}],["prime",{"2":{"973":1}}],["primitive",{"2":{"966":1}}],["primaryvariant",{"2":{"249":3}}],["primary",{"2":{"16":1,"249":3,"958":1,"960":2,"961":2,"964":1,"965":3,"966":1,"970":2}}],["privacy",{"2":{"851":1}}],["private",{"2":{"150":1,"154":1,"163":1,"184":6,"185":3,"203":1,"261":1,"281":14,"289":1}}],["priority",{"2":{"715":1,"720":4,"825":1,"980":1,"986":1}}],["pricing",{"2":{"397":1}}],["price",{"2":{"260":4,"288":1,"397":1}}],["pr",{"2":{"120":1,"451":1,"453":1,"455":1,"567":2,"568":3,"592":1,"870":1,"979":1,"980":2}}],["pressure",{"2":{"980":3}}],["presskey",{"2":{"858":1,"865":1}}],["presetshape",{"2":{"647":1}}],["preset",{"2":{"222":1,"482":2,"647":1}}],["preservemodules",{"2":{"819":1,"836":1}}],["preserved",{"2":{"805":1}}],["preserveaspectratio",{"2":{"750":2}}],["preservesymlinks",{"2":{"203":1}}],["preserve",{"2":{"203":2}}],["presentational",{"2":{"170":1}}],["preflight",{"2":{"860":1}}],["preference",{"2":{"980":1}}],["preferearlysofthyphenbreak",{"2":{"805":1}}],["preferearlysofthyphen",{"2":{"796":1}}],["preferprefixwidthsforbreakableruns",{"2":{"805":1}}],["preferprefixwidths",{"2":{"796":1}}],["prefixes",{"2":{"805":1}}],["prefix",{"2":{"750":2,"796":1}}],["preng",{"2":{"790":1}}],["prepareretries",{"2":{"915":2}}],["preparerichinline",{"2":{"799":1,"806":1}}],["preparetoolchoice",{"2":{"915":1}}],["preparetools",{"2":{"912":1,"915":1}}],["preparelanguagemodelcalloptions",{"2":{"915":1}}],["preparestep",{"2":{"910":1,"918":1}}],["prepareoptions",{"2":{"793":1,"805":1,"806":2}}],["preparedrichinline",{"2":{"799":1,"806":5}}],["preparedlinebreakdata",{"2":{"797":1}}],["preparedcore",{"2":{"793":1}}],["prepared",{"2":{"792":2,"798":4,"806":12,"809":2}}],["preparedtextwithsegments",{"2":{"792":2,"793":2,"798":1,"806":8}}],["preparedtext",{"2":{"792":2,"793":3,"798":1,"806":2}}],["preparewithsegments",{"2":{"789":1,"792":1,"798":1,"799":1,"806":1,"810":3}}],["prepare",{"0":{"801":1},"2":{"784":1,"785":1,"786":1,"788":1,"789":1,"790":1,"792":2,"795":1,"796":1,"798":2,"801":1,"806":1,"809":2,"810":1}}],["preprocessor",{"2":{"706":1}}],["pretext",{"2":{"784":4,"788":1,"789":1,"790":2,"801":1,"809":2,"810":1}}],["prettier",{"2":{"226":1,"677":1,"697":1,"904":2,"939":1}}],["pretty",{"2":{"203":1}}],["pre",{"2":{"482":1,"790":3,"795":1,"805":2}}],["predicate",{"2":{"259":3,"261":2}}],["preact",{"2":{"203":2,"935":1,"936":1,"939":2,"942":1,"944":1,"945":3}}],["prev",{"2":{"826":1,"834":1}}],["previoustodos",{"2":{"96":4}}],["preview",{"2":{"53":1}}],["preventdefault",{"2":{"16":1,"692":1}}],["prerendering",{"0":{"75":1},"2":{"39":1,"75":1}}],["pros",{"2":{"994":1}}],["prose",{"2":{"15":1}}],["proxy",{"2":{"939":1}}],["probe",{"2":{"790":3}}],["problemstatement",{"2":{"994":1}}],["problem",{"2":{"367":2}}],["programs",{"2":{"777":1}}],["progressiveload",{"2":{"750":2}}],["progressiverender",{"2":{"712":1}}],["progressiveenabled",{"2":{"712":1}}],["progressive",{"2":{"705":1,"712":1,"715":1}}],["progress",{"2":{"138":2,"139":1,"147":2,"150":1,"153":2,"154":2,"828":1,"834":1,"851":1,"994":1}}],["procedural",{"2":{"763":1}}],["processmessages",{"2":{"939":1,"941":1,"951":1}}],["processkeys",{"2":{"744":1,"749":2}}],["processor",{"2":{"706":1,"708":2,"939":1}}],["processedelement",{"2":{"735":1}}],["processedusers",{"2":{"266":1}}],["processed",{"2":{"266":1}}],["processidentifieddata",{"2":{"266":2}}],["processing",{"2":{"160":1,"163":1,"164":2,"523":1,"680":1,"939":1}}],["processresult",{"2":{"262":1}}],["process",{"2":{"14":2,"488":2,"489":1,"941":1,"947":1,"979":1}}],["proactivity",{"2":{"402":1}}],["pro",{"2":{"354":1,"518":1,"521":1,"522":1,"559":1,"568":1,"1002":1}}],["provideroptions",{"2":{"925":1}}],["providerv4",{"2":{"907":1,"912":1,"913":4,"916":2,"925":1}}],["provider",{"0":{"916":1,"927":1},"2":{"274":4,"327":1,"903":4,"904":2,"906":8,"907":6,"908":8,"909":5,"910":2,"912":4,"913":1,"915":2,"916":4,"919":1,"925":3,"927":3,"931":5,"939":2}}],["providers",{"2":{"274":1,"280":1,"907":1}}],["prototype",{"2":{"685":1}}],["protocol|",{"2":{"938":1}}],["protocols",{"2":{"114":1}}],["protocol",{"2":{"72":1,"439":1,"548":1,"846":1,"851":1,"858":1,"938":2,"939":1,"980":1}}],["protected",{"2":{"203":1}}],["proptype",{"2":{"743":1,"749":1}}],["proptypes",{"2":{"735":1}}],["propfunc",{"2":{"686":1}}],["propertyname",{"2":{"946":1}}],["propertymixer",{"2":{"763":1}}],["propertybinding",{"2":{"763":1,"772":2}}],["propertyinterface",{"2":{"735":1,"742":1}}],["propertygroupfactory",{"2":{"735":1}}],["propertyfactory",{"0":{"743":1},"2":{"734":1,"735":1,"737":1,"743":5}}],["property",{"2":{"676":1,"735":1,"738":2,"742":1,"743":3,"832":1,"834":1}}],["properties",{"2":{"482":1,"778":3,"866":3,"952":10,"966":1}}],["propname",{"2":{"661":1,"662":1}}],["props",{"0":{"249":1},"2":{"169":2,"170":5,"171":1,"173":2,"174":1,"175":1,"178":1,"179":4,"249":5,"256":1,"263":1,"289":2,"649":3,"661":3,"662":1,"951":4,"959":5,"964":4}}],["prop",{"2":{"169":2,"652":2,"686":1}}],["projector",{"2":{"763":1}}],["projectionmatrix|",{"2":{"769":1}}],["projectionmatrix",{"2":{"763":1}}],["projectinterface",{"2":{"735":1}}],["project",{"2":{"290":1,"437":1,"570":4,"735":1,"916":1}}],["projectlist",{"2":{"89":1}}],["projects",{"0":{"437":1},"2":{"89":5,"98":2,"434":1,"435":1,"437":6,"440":1,"570":1,"629":1,"631":2,"735":1}}],["projectdashboard",{"2":{"89":1}}],["profiler",{"2":{"592":1}}],["profileform",{"2":{"88":1}}],["profile",{"2":{"85":2,"506":2,"509":1,"789":3,"790":1,"796":1}}],["promiselike",{"2":{"925":3}}],["promise支持",{"2":{"819":1}}],["promise",{"2":{"47":1,"69":1,"70":1,"141":1,"143":1,"160":3,"163":1,"164":2,"225":1,"246":1,"255":1,"263":2,"281":8,"313":1,"330":1,"342":3,"661":2,"662":1,"663":5,"692":1,"777":1,"814":1,"818":1,"825":3,"834":1,"865":36,"881":1,"891":1,"898":3,"899":2,"915":1,"926":2}}],["promptfoo",{"2":{"550":1}}],["prompts",{"0":{"435":1},"2":{"434":1,"435":2,"436":1,"440":1,"441":1,"482":1,"980":2}}],["prompt",{"0":{"494":1,"503":3,"504":1,"506":1,"536":1},"1":{"504":3,"505":4,"507":2,"508":2},"2":{"16":1,"101":1,"131":1,"170":1,"309":1,"350":1,"358":1,"367":1,"375":1,"403":1,"410":2,"415":1,"425":1,"443":1,"456":1,"467":1,"482":3,"483":3,"484":1,"486":1,"489":3,"494":2,"496":2,"503":5,"504":2,"509":6,"546":1,"550":1,"553":1,"902":1,"907":1,"912":2,"915":1,"922":1,"925":2,"926":2,"941":1,"980":5,"988":6,"1000":1}}],["production",{"2":{"989":1,"1001":1}}],["productid=",{"2":{"288":1}}],["productid",{"2":{"281":3,"288":3,"289":2}}],["products",{"2":{"288":2}}],["productservice",{"2":{"274":1,"288":8,"290":1}}],["productdetail",{"2":{"288":5,"290":1}}],["productapp",{"2":{"288":9,"289":1}}],["productqueries",{"2":{"274":1}}],["productlistprops>",{"2":{"288":1}}],["productlistprops",{"2":{"288":1}}],["productlist",{"2":{"62":1,"288":7,"289":3,"290":1}}],["product",{"0":{"556":1},"2":{"18":1,"260":6,"263":1,"274":1,"275":1,"280":3,"281":4,"288":12,"289":3,"290":3,"291":1,"365":4,"366":3,"367":7,"492":1,"540":2,"554":1,"558":1,"1000":2,"1001":4,"1008":1}}],["padding",{"2":{"799":1,"805":1,"958":1,"959":1,"960":1,"961":1}}],["patterns",{"2":{"980":1,"989":2}}],["pattern",{"2":{"769":1,"865":2,"918":1,"939":2,"944":1,"946":1,"985":1}}],["pathconfig>",{"2":{"693":1}}],["pathname",{"2":{"662":1}}],["pathprefix",{"2":{"649":1}}],["path",{"2":{"203":2,"204":1,"210":1,"214":1,"215":1,"216":2,"334":3,"649":2,"652":3,"662":1,"663":1,"677":1,"679":1,"680":1,"693":1,"744":1,"746":1,"749":2,"750":1,"754":1,"772":1,"819":1,"942":2,"945":6,"946":2,"951":4,"952":1}}],["paths",{"2":{"203":1,"216":3,"576":1,"577":1,"578":1,"851":1,"866":1,"945":2,"962":1}}],["packldrawmodel",{"2":{"763":1}}],["package",{"2":{"211":1,"216":1,"224":1,"280":2,"290":9,"308":2,"333":2,"334":1,"335":1,"451":1,"647":2,"677":1,"706":1,"735":1,"763":1,"790":2,"819":1,"836":1,"851":3,"882":3,"887":1,"908":1,"939":4,"979":1,"980":2}}],["packages",{"0":{"213":1,"214":1,"215":1},"2":{"82":1,"205":3,"211":1,"216":4,"335":3,"647":1,"649":4,"666":1,"750":1,"908":1,"909":6,"912":7,"931":5}}],["pair",{"2":{"796":1,"805":1}}],["painter",{"2":{"705":2}}],["paid",{"2":{"280":1}}],["panel",{"2":{"647":1}}],["pauseondocumenthidden",{"2":{"826":2,"834":1}}],["pause控制",{"2":{"819":1}}],["paused",{"2":{"772":1,"818":1,"825":2,"834":2}}],["pause",{"2":{"489":1,"672":1,"677":1,"686":2,"692":1,"740":2,"749":1,"750":1,"819":2,"821":1,"825":1,"826":1,"834":2}}],["pascalcase",{"2":{"330":2}}],["paginationstore",{"2":{"646":1,"647":1,"650":3}}],["pagination",{"2":{"280":1,"647":1}}],["pagemetaeffect",{"2":{"662":1}}],["page`",{"2":{"576":1}}],["pagedattention",{"2":{"551":1}}],["page",{"2":{"15":2,"62":2,"65":4,"66":1,"67":5,"70":1,"78":1,"92":1,"640":1,"652":1,"653":1,"661":2,"668":1,"850":1,"851":3,"858":3,"865":4,"939":1}}],["pages",{"2":{"7":2,"274":1,"280":1,"345":2,"355":1,"666":1,"790":4}}],["pay",{"2":{"397":1}}],["payment",{"2":{"280":1}}],["payload",{"2":{"61":4,"135":1,"142":1,"289":3,"705":1,"706":1,"708":1,"712":3,"719":4,"939":2,"951":1}}],["parts",{"2":{"939":1}}],["part",{"2":{"790":1,"939":4}}],["party",{"2":{"734":1,"735":1,"737":1}}],["partialline",{"2":{"143":6}}],["partial",{"0":{"75":1},"2":{"39":1,"75":1,"946":1,"947":1,"951":1}}],["parcel",{"2":{"677":1,"697":1}}],["parent",{"2":{"769":1,"777":1,"834":1}}],["parentelement",{"2":{"749":1}}],["parentname",{"2":{"749":1}}],["parentid",{"2":{"663":1}}],["parentstore",{"2":{"653":2}}],["pareto",{"2":{"394":1}}],["parallax",{"2":{"763":1}}],["parallelview",{"2":{"706":1}}],["parallelseries",{"2":{"706":1}}],["parallel",{"2":{"706":3,"714":2,"979":1,"980":1,"982":1}}],["paradox",{"2":{"530":1}}],["parameters",{"2":{"778":2,"835":10,"866":5}}],["parameter",{"2":{"234":1}}],["param",{"2":{"141":6,"150":2,"153":2,"154":1,"160":1,"163":2,"164":1,"835":11,"898":2,"899":6}}],["params",{"2":{"15":3,"653":1,"741":1,"749":1,"750":1,"834":2,"865":1}}],["parsejson",{"2":{"907":1}}],["parseease",{"2":{"819":1,"821":1,"835":1}}],["parsetimelineposition",{"2":{"819":1}}],["parsetargets",{"2":{"819":1}}],["parsedpath",{"2":{"772":1}}],["parseclasstype",{"2":{"706":1}}],["parselocation",{"2":{"662":1}}],["parsers",{"2":{"763":1}}],["parser",{"2":{"646":1,"647":1,"655":2,"819":1,"938":1,"939":4}}],["parseint",{"2":{"262":1}}],["parse",{"0":{"892":1},"2":{"147":1,"150":1,"647":2,"682":1,"818":1,"882":4,"883":1,"886":2,"889":1}}],["p>¥",{"2":{"288":1}}],["p>",{"2":{"15":2,"16":3,"288":1}}],["p",{"2":{"15":3,"16":5,"963":1,"964":2,"965":1,"970":1}}],["pypi",{"2":{"975":1,"976":1}}],["pyproject",{"2":{"939":1}}],["pyink",{"2":{"939":1}}],["python",{"2":{"342":1,"416":1,"442":2,"449":1,"467":1,"470":2,"471":1,"472":2,"553":1,"558":1,"562":2,"636":1,"933":1,"936":2,"938":1,"939":10,"941":1,"954":1,"1001":1}}],["pythondef",{"2":{"187":1,"188":1}}],["py",{"2":{"15":2,"16":1,"449":1,"484":1,"939":30,"962":1,"964":1,"970":1,"980":1}}],["px↔rem↔vh等",{"2":{"819":1}}],["px",{"2":{"15":2,"16":1,"805":1,"962":1,"964":3,"970":1}}],["项目指引",{"2":{"980":2}}],["项目指令",{"2":{"790":1}}],["项目静态资源",{"2":{"980":1}}],["项目特点",{"2":{"965":1}}],["项目主页文档",{"2":{"980":1}}],["项目主页",{"2":{"939":1}}],["项目定位",{"0":{"872":1}}],["项目定位与核心价值",{"0":{"639":1,"670":1,"699":1,"728":1,"757":1,"784":1,"812":1,"843":1,"901":1,"933":1,"973":1}}],["项目对象代理",{"2":{"735":1}}],["项目信息",{"2":{"728":1}}],["项目英文说明文档",{"2":{"706":1}}],["项目说明文档",{"2":{"882":1}}],["项目说明",{"2":{"647":1,"790":1}}],["项目分析报告",{"2":{"647":1}}],["项目文档与设计决策归档",{"2":{"980":1}}],["项目文档目录",{"2":{"735":1}}],["项目文档",{"2":{"647":1,"851":1}}],["项目文档或博客",{"2":{"345":1}}],["项目规模",{"0":{"643":1}}],["项目概览",{"0":{"638":1,"669":1,"698":1,"727":1,"756":1,"783":1,"811":1,"842":1,"900":1,"932":1,"972":1},"1":{"639":1,"640":1,"641":1,"642":1,"643":1,"670":1,"671":1,"672":1,"673":1,"699":1,"700":1,"701":1,"702":1,"728":1,"729":1,"730":1,"731":1,"757":1,"758":1,"759":1,"784":1,"785":1,"786":1,"812":1,"813":1,"814":1,"815":1,"843":1,"844":1,"845":1,"846":1,"901":1,"902":1,"903":1,"904":1,"933":1,"934":1,"935":1,"936":1,"973":1,"974":1,"975":1,"976":1}}],["项目时间线",{"0":{"635":1}}],["项目简介",{"0":{"632":1,"636":1}}],["项目机会放在两位开发者面前",{"2":{"622":1}}],["项目初始化",{"2":{"583":1}}],["项目名称",{"2":{"573":1}}],["项目根目录或",{"2":{"571":1}}],["项目根目录下的",{"2":{"570":1}}],["项目级脚本",{"2":{"939":1}}],["项目级",{"2":{"570":1,"571":1,"580":1}}],["项目管理",{"2":{"515":1}}],["项目汇报",{"2":{"515":1}}],["项目入口文件",{"2":{"481":1}}],["项目创建完成",{"2":{"449":1}}],["项目式",{"2":{"437":1}}],["项目延期的核心原因主要集中在",{"2":{"417":1}}],["项目经理",{"2":{"414":1}}],["项目提供开箱即用的开发体验",{"2":{"343":1}}],["项目通常使用",{"2":{"335":1}}],["项目通常需要开启",{"2":{"203":1}}],["项目目录结构",{"2":{"280":1}}],["项目目录结构示例",{"0":{"280":1}}],["项目开发中最常用的约束形式",{"2":{"270":1}}],["项目场景",{"0":{"259":1},"2":{"259":1,"260":1,"261":1,"262":2,"266":1,"269":1}}],["项目配置",{"2":{"216":1,"706":1,"790":1,"851":1,"882":1,"939":2}}],["项目配置实践",{"0":{"211":1},"1":{"212":1,"213":1,"214":1,"215":1,"216":1}}],["项目中的全局样式污染与冲突灾难",{"2":{"965":1}}],["项目中文说明文档",{"2":{"706":1}}],["项目中灵活应用模块化设计",{"2":{"293":1}}],["项目中使用",{"2":{"221":1,"813":1}}],["项目中",{"2":{"216":2,"217":1,"322":1,"338":1}}],["项目需要浏览器环境支持",{"2":{"214":1}}],["项目依赖和类型共享",{"2":{"210":1}}],["项目引用",{"0":{"207":1}}],["项目结构初览",{"0":{"882":1},"1":{"883":1}}],["项目结构",{"2":{"202":1}}],["项目地址",{"2":{"85":1,"91":2}}],["项目查看",{"2":{"82":1}}],["项目如何组织",{"2":{"60":1}}],["项目扩展",{"0":{"18":1}}],["项目设置",{"2":{"17":1}}],["项目的终极形态",{"2":{"964":1}}],["项目的绝对主力方案",{"2":{"961":1}}],["项目的",{"2":{"17":1,"570":1}}],["项目实践",{"0":{"10":1},"1":{"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1}}],["项目",{"0":{"13":1},"2":{"6":1,"13":1,"17":1,"203":2,"204":2,"207":1,"210":1,"214":1,"215":1,"470":1,"561":1,"562":1,"573":1,"583":1,"597":1}}],["全都要",{"2":{"1030":1}}],["全都要型",{"2":{"445":1}}],["全链路类型安全",{"2":{"965":1}}],["全链路无人值守",{"2":{"568":1}}],["全仓库格式化",{"2":{"939":1}}],["全组件展示场景",{"2":{"939":1}}],["全屏四边形",{"2":{"763":1}}],["全功能管理",{"2":{"763":1}}],["全功能构建入口",{"2":{"737":1}}],["全功能",{"2":{"735":1}}],["全功能版本入口",{"2":{"735":1}}],["全量触发场景测试",{"2":{"980":1}}],["全量多模型测试执行器",{"2":{"980":1}}],["全量技能测试执行器",{"2":{"980":1}}],["全量入口",{"2":{"706":1,"708":1}}],["全量类型定义",{"2":{"647":1}}],["全量权重开源可本地部署",{"2":{"512":1}}],["全方位深度解读报告",{"2":{"636":1}}],["全文",{"2":{"632":1}}],["全面迈向",{"2":{"971":1}}],["全面国际化",{"2":{"701":1}}],["全面审查",{"2":{"591":1}}],["全面对标",{"2":{"564":1}}],["全面拥抱",{"2":{"308":1,"967":1}}],["全程完成",{"2":{"568":1}}],["全程在浏览器内完成",{"2":{"561":1}}],["全程无服务器动态计算",{"2":{"31":1}}],["全流程开发伙伴",{"2":{"973":1}}],["全流程",{"2":{"514":1}}],["全诗押平声",{"2":{"507":1}}],["全诗对仗工整",{"2":{"505":1}}],["全篇由五字句构成的诗",{"2":{"506":1}}],["全篇每句七字或以七字句为主的诗体",{"2":{"506":1}}],["全感官输入与输出",{"2":{"418":1}}],["全知全能",{"2":{"367":1}}],["全能手",{"2":{"553":1}}],["全能助手",{"2":{"511":1}}],["全能的幻觉与稀缺的转移",{"0":{"457":1}}],["全能大脑",{"2":{"413":1}}],["全能型同构请求体",{"2":{"342":1}}],["全能请求库",{"2":{"342":1}}],["全集",{"2":{"227":1,"244":3}}],["全部完成时停止",{"2":{"988":1}}],["全部抽象为",{"2":{"964":1}}],["全部",{"2":{"910":1}}],["全部处理完",{"2":{"892":1}}],["全部可",{"2":{"758":1}}],["全部平铺",{"2":{"203":1}}],["全部自动在后台失效并重新获取",{"2":{"98":1}}],["全双工数据传输",{"2":{"115":1}}],["全双工通信",{"0":{"113":1},"1":{"114":1,"115":1,"116":1,"117":1}}],["全局作用域导致的命名冲突",{"2":{"960":1}}],["全局污染",{"2":{"959":1}}],["全局命令注册中心",{"2":{"856":1}}],["全局命名空间导出契约",{"2":{"693":1}}],["全局命名空间初始化",{"2":{"679":1}}],["全局引擎契约",{"2":{"834":1}}],["全局引擎配置",{"0":{"94":1}}],["全局时间控制",{"2":{"826":1}}],["全局时间缩放",{"2":{"826":1}}],["全局恢复",{"2":{"826":1}}],["全局暂停",{"2":{"826":1}}],["全局配置",{"2":{"826":1}}],["全局播放速率",{"2":{"826":1}}],["全局timescale",{"2":{"819":1}}],["全局单例",{"2":{"819":1,"821":1,"822":1,"826":1,"856":1}}],["全局入口",{"2":{"819":1,"821":1}}],["全局入口与核心路由",{"0":{"649":1,"679":1,"708":1,"737":1,"765":1,"792":1,"821":1,"853":1,"912":1,"941":1,"982":1},"1":{"854":1,"855":1}}],["全局共享",{"2":{"790":1}}],["全局常量",{"2":{"763":1,"819":1}}],["全局批处理方法",{"2":{"740":1}}],["全局方法",{"2":{"740":1}}],["全局冻结",{"2":{"740":1}}],["全局状态提供者",{"2":{"939":1}}],["全局状态",{"2":{"737":1,"818":1,"819":1}}],["全局状态管理",{"2":{"274":1}}],["全局核心状态",{"2":{"735":1}}],["全局动画引擎单例",{"2":{"822":1,"826":1}}],["全局动画引擎",{"0":{"826":1},"2":{"819":1}}],["全局动画循环共享一个",{"2":{"740":1}}],["全局动画管理器",{"2":{"735":1}}],["全局动画注册表",{"2":{"734":1}}],["全局动画列表",{"2":{"686":1}}],["全局选项模型",{"2":{"709":1}}],["全局默认值配置",{"2":{"706":1}}],["全局类型",{"2":{"679":1}}],["全局类型定义",{"2":{"677":1,"706":1}}],["全局对象并绑定所有公共",{"2":{"737":1}}],["全局对象",{"2":{"675":1,"676":1,"677":1,"733":1,"735":1,"737":1,"738":1}}],["全局事件广播回调",{"2":{"661":1}}],["全局事件绑定",{"2":{"646":1}}],["全局渲染器",{"2":{"650":1}}],["全局注册表",{"2":{"647":1,"706":1}}],["全局偏好",{"2":{"570":1}}],["全局理解与跨库关联",{"2":{"417":1}}],["全局范围内通过命名空间访问",{"2":{"320":1}}],["全局变量变化时的回调",{"2":{"661":1}}],["全局变量",{"2":{"653":1}}],["全局变量系统",{"2":{"647":1}}],["全局变量阶段",{"2":{"298":1}}],["全局变量污染与命名冲突",{"2":{"297":1}}],["全局错误捕获和上报",{"2":{"291":1}}],["全局管道",{"2":{"275":1}}],["全局拦截器",{"2":{"275":1}}],["全局守卫",{"2":{"275":1}}],["全局异常过滤器",{"2":{"275":1}}],["全局样式管理器",{"2":{"968":1}}],["全局样式编码",{"2":{"706":1}}],["全局样式",{"2":{"274":2}}],["全局自定义",{"2":{"274":1}}],["全局",{"2":{"98":1,"274":1,"570":1,"571":1,"580":1,"583":1,"653":1,"677":2,"734":1,"735":1,"817":1,"819":1,"826":1,"939":1}}],["全局导航栏",{"2":{"67":1}}],["全栈开发者接入",{"2":{"901":1}}],["全栈开发者提供统一的",{"2":{"901":1}}],["全栈开发者而言",{"2":{"342":1}}],["全栈应用生成器",{"2":{"561":1}}],["全栈就是线性的技能叠加与物理式的技术拼接",{"2":{"553":1}}],["全栈基础设施",{"2":{"542":1}}],["全栈基础设施的范畴也扩展到了跨端轻量化应用",{"2":{"542":1}}],["全栈化",{"2":{"529":1}}],["全栈视角的复刻推演",{"0":{"374":1}}],["全栈的智慧在于",{"2":{"365":1}}],["全栈工程师也正在进化为",{"2":{"540":1}}],["全栈工程师",{"2":{"361":1,"540":1,"553":1}}],["全栈框架",{"0":{"344":1},"2":{"344":2}}],["全栈项目",{"2":{"342":1}}],["全栈类型安全架构",{"2":{"342":1}}],["全栈类型安全的",{"2":{"342":1}}],["全栈一致性",{"2":{"326":1}}],["全栈一体",{"2":{"80":1}}],["全栈",{"0":{"280":1},"2":{"308":1,"553":2,"558":2,"1001":1}}],["全栈后台",{"2":{"80":1}}],["全球化",{"2":{"1031":1}}],["全球首个商用",{"2":{"567":1}}],["全球最大开源",{"2":{"523":1}}],["全球最受欢迎的笔记与协作平台内置",{"2":{"515":1}}],["全球",{"2":{"11":1}}],["全球分发",{"2":{"3":1,"20":1}}],["全场景",{"2":{"6":1}}],["v5",{"2":{"973":1,"980":1}}],["vr",{"2":{"757":1,"763":1}}],["v6",{"2":{"706":1}}],["v09viewer",{"2":{"939":1}}],["v09",{"2":{"939":2,"947":2}}],["v08",{"2":{"939":1,"947":2}}],["v0",{"0":{"952":1},"2":{"559":1,"561":1,"562":2,"790":1,"938":3,"939":43,"946":1,"947":1,"951":1,"952":7,"971":1}}],["v10",{"2":{"677":1}}],["v1",{"2":{"523":1}}],["v12+",{"2":{"307":1}}],["v3",{"2":{"522":1,"523":1,"936":1}}],["vllm",{"2":{"519":1,"551":1}}],["vl",{"2":{"512":1,"522":2}}],["velocity",{"2":{"835":1,"965":1}}],["vetal",{"2":{"790":2}}],["vec3",{"2":{"770":1,"777":1}}],["vector4",{"2":{"763":1}}],["vector3",{"2":{"763":1,"769":2,"777":10,"778":1}}],["vector2",{"2":{"763":1}}],["vector2d",{"2":{"677":1,"692":9,"693":1}}],["vector",{"2":{"410":1,"763":1,"777":2}}],["verification",{"2":{"979":1,"980":1,"982":1,"994":1,"995":1}}],["verifyclient",{"2":{"860":1}}],["verify",{"2":{"851":2,"939":1,"989":2}}],["vertexshadernode",{"2":{"771":1}}],["vertexshader",{"2":{"771":1}}],["vertex",{"2":{"521":1}}],["version",{"2":{"248":1,"258":1,"506":1,"722":1,"762":1,"770":1,"777":1,"780":1,"851":1,"854":1,"855":1,"866":1,"939":3,"947":1,"948":1,"952":8,"979":1,"980":2}}],["versioned",{"2":{"248":2}}],["version>",{"2":{"193":1,"916":1}}],["version>3",{"2":{"193":1}}],["vercel",{"0":{"17":1},"2":{"4":1,"7":1,"8":1,"10":1,"11":1,"17":8,"18":1,"20":1,"59":1,"75":1,"78":1,"82":1,"98":1,"342":1,"343":1,"344":1,"345":3,"561":3,"573":1,"901":1,"918":1}}],["v8",{"2":{"338":1}}],["volume",{"2":{"790":1}}],["vo",{"2":{"280":5,"281":1}}],["void>",{"2":{"154":1,"281":4,"663":2,"777":1,"865":15,"891":1,"898":2,"899":1,"945":1}}],["void",{"2":{"150":5,"175":1,"184":1,"185":3,"229":4,"231":2,"249":1,"261":1,"262":1,"281":2,"288":1,"661":1,"662":9,"663":2,"692":13,"693":2,"719":12,"720":19,"749":33,"750":21,"777":32,"806":4,"834":1,"865":2,"891":3,"898":3,"899":7,"925":4,"951":11}}],["v",{"2":{"262":2,"263":2,"646":1,"652":3,"653":6,"654":2,"655":3,"676":7,"682":4,"683":7,"684":5,"685":1,"705":7,"711":4,"713":2,"714":2,"715":9,"734":7,"740":3,"762":14,"768":8,"769":4,"770":4,"771":6,"772":4,"789":4,"792":1,"793":6,"795":6,"796":3,"797":2,"799":2,"818":7,"828":4,"907":10,"915":4,"916":2,"917":3,"918":1,"938":5,"942":6,"944":9,"945":6,"946":3,"947":5,"948":2,"961":3,"965":3,"979":9,"985":3,"986":4}}],["v>",{"2":{"262":2}}],["vanilla",{"2":{"813":1,"959":1}}],["var",{"2":{"834":2,"962":10,"966":1}}],["varying",{"2":{"770":1}}],["variance",{"2":{"964":2}}],["variantprops",{"2":{"964":2}}],["variant=",{"2":{"964":2,"971":1}}],["variants",{"0":{"964":1},"2":{"964":2,"971":2}}],["variant",{"2":{"249":8,"964":4}}],["variable",{"2":{"647":1,"790":2}}],["variables",{"2":{"274":1,"646":1,"958":1,"965":1}}],["vader",{"2":{"677":1}}],["valtio",{"2":{"939":1}}],["val",{"2":{"685":5,"714":1,"719":1,"750":1}}],["validators",{"2":{"677":1,"679":1}}],["validator",{"2":{"647":1,"656":1,"685":1,"939":1}}],["validateargs",{"2":{"865":1}}],["validate",{"2":{"449":1,"663":1,"851":1,"925":1,"939":1}}],["validationerrors",{"2":{"946":1}}],["validationresult",{"2":{"925":1}}],["validation",{"2":{"274":1,"275":1,"280":2,"290":1}}],["valuerequired",{"2":{"865":1}}],["valuetype",{"2":{"828":1,"834":3}}],["valuetypes",{"2":{"818":1,"819":1}}],["values",{"0":{"828":1},"2":{"663":2,"719":1,"772":1,"817":1,"818":1,"819":1,"828":3}}],["value​​",{"2":{"365":1}}],["valuecomplexity",{"2":{"365":1}}],["value",{"2":{"16":1,"88":1,"141":4,"143":7,"148":5,"150":2,"229":4,"231":9,"232":2,"237":7,"280":4,"281":1,"315":2,"363":1,"365":2,"397":1,"553":1,"662":1,"719":3,"730":1,"742":2,"749":2,"777":1,"828":1,"835":2,"899":1,"925":1,"945":1,"946":1,"951":2,"952":1,"966":1,"970":1}}],["value=",{"2":{"16":1,"88":1}}],["vincent",{"2":{"973":1}}],["via",{"2":{"942":1}}],["viability",{"2":{"363":1}}],["videomodelv4",{"2":{"925":1}}],["videomodel",{"2":{"907":1,"925":1}}],["video",{"2":{"763":1,"851":1,"907":1,"939":1}}],["videotexture",{"2":{"763":1}}],["viewport",{"2":{"763":1}}],["viewboxsize",{"2":{"750":1}}],["viewboxonly",{"2":{"750":1}}],["view",{"2":{"704":1,"705":1,"706":4}}],["viewertheme",{"2":{"939":1}}],["viewer",{"2":{"647":2}}],["visibilitychange",{"2":{"889":1}}],["visible",{"2":{"676":1,"692":1,"769":1,"777":2,"964":2}}],["visualmetainfo>",{"2":{"719":1}}],["visualmapcommon",{"2":{"706":1}}],["visualmap",{"2":{"700":1,"701":1,"706":2,"708":1,"715":2}}],["visualtype",{"2":{"712":1}}],["visualfuncs",{"2":{"708":1}}],["visual",{"0":{"715":1},"2":{"704":1,"705":1,"706":2,"708":5,"712":1,"715":2,"980":1,"987":1}}],["virtual",{"2":{"647":1}}],["vip",{"2":{"397":1}}],["vibe",{"0":{"532":1,"560":1},"1":{"561":1,"562":1},"2":{"176":1,"371":1,"461":1,"530":1,"559":2,"569":1,"1000":1}}],["vitest",{"2":{"846":1,"904":1}}],["vite",{"2":{"50":1,"53":2,"54":2,"85":1,"100":1,"203":1,"204":1,"216":3,"217":1,"274":2,"307":1,"308":2,"322":1,"343":4,"344":2,"642":1,"647":6,"759":1,"790":1,"960":4,"1003":1}}],["vitepress",{"0":{"48":1,"49":1,"54":1},"1":{"49":1,"50":2,"51":2,"52":2,"53":1,"54":1},"2":{"30":1,"48":4,"49":1,"50":2,"52":1,"53":5,"54":8,"846":1,"1003":5}}],["vscode",{"2":{"203":2}}],["vs",{"0":{"97":1,"124":1,"240":1,"592":1},"1":{"98":1,"99":1,"100":1,"101":1},"2":{"146":1,"397":2,"437":1,"438":1,"439":1,"564":1,"565":2,"583":1,"699":1,"786":1,"796":1,"915":1,"979":2}}],["v4",{"2":{"16":1,"817":1,"819":1,"909":2,"925":2}}],["vue3",{"2":{"965":1}}],["vuetify",{"2":{"340":1}}],["vuepress",{"2":{"48":1}}],["vue",{"2":{"6":3,"23":1,"26":1,"27":1,"47":2,"48":2,"50":2,"53":5,"54":1,"91":1,"256":1,"263":1,"285":1,"302":1,"313":1,"339":3,"340":2,"341":4,"342":2,"344":5,"345":1,"553":1,"558":1,"573":1,"642":1,"813":1,"901":1,"904":1,"906":2,"907":1,"908":2,"960":1,"961":5,"962":1,"963":1,"965":7,"967":1,"968":3,"970":2,"971":3,"1003":1}}],["nx",{"2":{"904":1}}],["nycrc",{"2":{"882":1}}],["nth",{"2":{"865":3}}],["ntype",{"2":{"234":2}}],["nnbsp",{"2":{"805":1}}],["nbsp",{"2":{"805":1}}],["nithan",{"2":{"790":2}}],["nitro",{"2":{"344":2}}],["nm",{"2":{"744":2}}],["n8n",{"2":{"403":1}}],["nvidia",{"2":{"353":1}}],["n+1",{"2":{"342":1}}],["ndata",{"2":{"138":1}}],["ndjson",{"2":{"135":1}}],["n",{"2":{"109":2,"139":4,"141":1,"143":2,"152":6,"159":1,"234":8,"238":2,"489":2,"650":8,"680":5,"708":2,"709":4,"738":4,"766":6,"772":2,"792":2,"793":1,"805":1,"822":9,"856":1,"865":2,"892":4,"899":2,"913":8,"942":3,"983":5,"1029":1}}],["nginx",{"2":{"107":1,"125":1,"152":1,"164":1,"166":1,"553":1}}],["naskh",{"2":{"790":1}}],["nastaliq",{"2":{"790":1}}],["nal",{"2":{"790":1}}],["navigatebefore",{"2":{"859":2,"865":1}}],["navigation",{"2":{"15":1,"790":1}}],["navidad",{"2":{"735":2}}],["naked",{"2":{"234":1}}],["nativekeypress",{"2":{"865":1}}],["nativetype",{"2":{"865":1}}],["nativeclick",{"2":{"865":1}}],["native",{"2":{"101":1,"203":2,"316":1,"491":1,"525":1,"551":1,"553":1,"728":1,"980":1}}],["namecoordmap",{"2":{"714":1}}],["name>",{"2":{"667":1}}],["namespace",{"2":{"320":3,"676":1,"680":1,"682":1,"693":3}}],["named",{"2":{"310":1}}],["name",{"2":{"85":1,"88":3,"91":1,"184":1,"185":5,"203":1,"231":2,"233":5,"236":2,"239":2,"240":1,"246":1,"248":2,"258":1,"259":5,"260":4,"266":5,"267":5,"268":3,"269":6,"270":1,"288":4,"289":4,"300":3,"311":4,"318":2,"324":1,"442":4,"443":2,"448":4,"451":1,"481":4,"484":2,"581":2,"582":1,"583":1,"586":1,"591":1,"640":4,"655":3,"661":1,"668":3,"692":1,"720":2,"724":1,"749":9,"750":10,"772":2,"777":3,"778":3,"856":2,"859":1,"865":4,"866":6,"916":1,"927":2,"960":1,"980":1,"983":1,"994":2}}],["name=",{"2":{"69":1}}],["noise",{"2":{"677":1,"679":1}}],["noimplicitoverride",{"2":{"203":1}}],["noimplicitreturns",{"2":{"203":1}}],["noimplicitthis",{"2":{"203":2}}],["noimplicitany",{"2":{"203":2}}],["normal",{"2":{"795":1,"799":1,"805":4}}],["normalizewhitespacenormal",{"2":{"792":1,"795":2}}],["normalized",{"2":{"342":1,"793":1,"795":1,"805":1}}],["normalmap",{"2":{"771":1,"778":1}}],["noreply",{"2":{"581":1}}],["nosql",{"2":{"555":1}}],["non",{"2":{"907":1}}],["nonloadingstatus",{"2":{"234":1}}],["none",{"2":{"15":1,"814":1,"819":3,"824":1,"828":1,"832":1,"834":3,"865":1,"958":1,"959":1,"961":1,"964":2}}],["nobitwise",{"2":{"203":1}}],["nouncheckedindexedaccess",{"2":{"203":1}}],["nounusedparameters",{"2":{"203":1,"204":1}}],["nounusedlocals",{"2":{"203":1,"204":1}}],["nofallthroughcasesinswitch",{"2":{"203":1,"204":1}}],["noemitonerror",{"2":{"203":1,"204":1}}],["noemit",{"2":{"203":1,"204":1,"790":1}}],["nooverride",{"2":{"203":1}}],["no",{"2":{"82":1,"107":1,"136":1,"139":1,"152":2,"482":1,"790":1,"989":1}}],["now",{"2":{"16":1,"818":1,"819":1}}],["notmerge",{"2":{"719":1}}],["notifies",{"2":{"942":1}}],["notificationservice",{"2":{"281":3}}],["notification",{"2":{"280":1}}],["notifysignals",{"2":{"945":1}}],["notify",{"2":{"649":1,"653":1,"654":1,"661":1,"662":1,"945":2,"946":1}}],["notion",{"2":{"373":1,"515":8,"548":1}}],["notebooklm",{"2":{"515":6}}],["notes",{"2":{"471":2,"472":1,"474":1,"631":2,"980":1}}],["note",{"2":{"365":1,"366":1,"367":1,"371":1,"557":1,"790":3,"1010":1,"1045":1}}],["not",{"2":{"16":3,"66":1,"482":1,"866":1,"964":1,"986":2}}],["notfound",{"2":{"15":2}}],["nodelist→array",{"2":{"819":1}}],["nodelist",{"2":{"819":1,"835":1}}],["nodelibrary",{"2":{"763":1}}],["nodeframe",{"2":{"777":3}}],["nodeupdatetype",{"2":{"777":3}}],["nodematerial",{"2":{"771":2}}],["nodematerials",{"2":{"765":1}}],["nodematerial系列",{"2":{"763":1}}],["nodemanager",{"2":{"763":1}}],["nodes",{"2":{"762":1,"763":7,"765":3}}],["nodebuilder",{"2":{"762":2,"763":1,"765":1,"766":1,"770":2,"775":1,"777":3}}],["nodetype",{"2":{"762":1,"770":1,"777":1}}],["nodeconfig",{"2":{"692":4}}],["nodeclass",{"2":{"685":3}}],["nodeparams",{"2":{"677":1}}],["nodenext",{"2":{"203":1,"322":2}}],["node16",{"2":{"203":2}}],["nodejs",{"2":{"139":1,"1000":1}}],["node",{"0":{"304":1,"334":1,"682":1},"2":{"8":1,"57":1,"82":1,"163":1,"203":9,"204":6,"213":1,"214":1,"215":4,"221":1,"222":2,"272":2,"280":2,"293":1,"298":1,"304":3,"306":1,"307":1,"308":1,"320":1,"322":3,"326":1,"333":2,"334":7,"335":1,"337":3,"338":2,"342":5,"344":8,"346":2,"480":1,"542":1,"548":2,"552":1,"553":1,"661":1,"665":1,"670":1,"671":1,"672":1,"673":1,"677":6,"679":1,"680":6,"682":3,"686":1,"692":18,"693":1,"706":1,"722":2,"761":1,"762":3,"763":1,"765":3,"766":3,"770":5,"772":1,"777":1,"780":2,"790":1,"818":1,"819":1,"826":1,"840":2,"846":1,"851":2,"860":1,"868":1,"882":2,"902":1,"904":2,"929":1,"939":1,"954":1,"980":1}}],["nurbs",{"2":{"763":1}}],["numlength3",{"2":{"265":1}}],["numlength2",{"2":{"265":1}}],["numlength1",{"2":{"265":1}}],["num",{"2":{"262":2}}],["number|unit|color|complex",{"2":{"827":1}}],["number||",{"2":{"825":1}}],["numbertostring",{"2":{"262":1}}],["numbercontainer",{"2":{"261":3}}],["numberresult",{"2":{"258":1}}],["numbers",{"2":{"223":2,"261":1,"828":1}}],["number>",{"2":{"153":1,"261":1,"262":2,"265":1}}],["number",{"2":{"138":1,"154":2,"223":6,"227":3,"229":4,"230":6,"231":4,"232":1,"233":2,"234":4,"236":2,"237":2,"238":14,"239":2,"240":1,"242":2,"243":4,"246":1,"248":2,"254":2,"255":2,"256":1,"258":2,"259":1,"260":3,"261":1,"262":2,"263":1,"265":4,"266":2,"267":4,"269":1,"274":1,"281":7,"289":1,"319":6,"321":7,"324":3,"325":3,"482":2,"661":1,"692":41,"693":6,"706":2,"714":2,"719":19,"720":2,"749":43,"750":9,"763":1,"777":24,"778":7,"793":4,"805":20,"806":14,"814":1,"819":1,"824":8,"825":6,"826":4,"828":4,"834":38,"835":8,"865":18,"866":3,"891":1,"892":1,"898":2,"899":3,"925":2,"926":3,"994":1}}],["nullelement",{"2":{"735":1}}],["null>",{"2":{"281":2,"865":1}}],["null",{"2":{"14":1,"16":4,"87":3,"89":2,"163":2,"194":1,"203":2,"248":4,"281":1,"289":3,"662":1,"663":1,"692":1,"749":4,"777":6,"778":1,"805":1,"806":3,"834":7,"860":1,"891":1,"898":1}}],["nuxt",{"2":{"6":1,"26":1,"53":1,"344":3,"965":1}}],["npm包配置",{"2":{"819":1}}],["npmignore",{"2":{"735":1,"882":1}}],["npm",{"2":{"13":1,"31":2,"47":1,"82":1,"203":1,"204":1,"221":2,"286":1,"335":2,"567":1,"572":1,"573":3,"594":1,"595":2,"642":1,"643":1,"647":1,"665":1,"666":2,"667":5,"677":1,"695":4,"697":4,"706":1,"722":1,"723":3,"726":1,"731":1,"735":2,"753":1,"763":1,"780":1,"781":4,"790":2,"840":5,"859":1,"882":3,"907":1,"955":1,"975":1,"976":1,"980":1}}],["npx",{"2":{"13":1}}],["negotiable",{"2":{"986":1}}],["negative",{"2":{"281":1}}],["needsupdate",{"2":{"771":1,"777":2}}],["near",{"2":{"769":1,"778":1}}],["nesting",{"2":{"958":1,"970":1}}],["nested",{"2":{"676":1}}],["nestjs",{"0":{"153":1,"163":1},"2":{"153":5,"154":3,"155":1,"163":2,"275":2,"280":2,"344":4,"429":1,"558":1,"1001":1}}],["networkrequests",{"2":{"858":1,"865":1}}],["network",{"2":{"849":1,"851":3,"858":1}}],["netflix",{"2":{"354":1}}],["netlify",{"2":{"4":1,"7":1,"8":1,"20":1,"345":2,"561":1}}],["never",{"0":{"232":1},"2":{"227":2,"232":7,"234":4,"237":5,"244":17,"250":2,"799":1,"805":2}}],["newtab",{"2":{"865":1}}],["newtodo",{"2":{"96":7}}],["newduration",{"2":{"834":1}}],["newdur",{"2":{"825":1}}],["newlayers",{"2":{"749":1}}],["newidx",{"2":{"713":1}}],["newname",{"2":{"88":4}}],["newcomment",{"2":{"16":4}}],["new",{"2":{"15":2,"16":1,"87":1,"94":1,"138":1,"141":1,"143":1,"144":3,"146":1,"147":1,"149":1,"150":4,"154":1,"160":3,"163":1,"164":2,"232":1,"238":1,"248":3,"261":3,"267":3,"269":4,"281":7,"288":3,"289":1,"302":1,"311":1,"328":1,"330":1,"559":1,"561":1,"562":2,"679":1,"696":3,"706":1,"708":2,"742":2,"744":1,"749":2,"782":7,"821":7,"878":1,"879":2,"912":1}}],["nextconfig",{"2":{"72":2}}],["nextresponse",{"2":{"71":1}}],["nextjs",{"2":{"16":1}}],["nextauth",{"2":{"8":1}}],["next",{"0":{"13":1,"56":1,"60":1,"80":1,"81":1},"1":{"57":1,"58":1,"59":1,"61":1,"62":1},"2":{"2":1,"6":1,"7":1,"8":1,"10":1,"11":1,"13":3,"14":3,"15":3,"16":2,"17":1,"20":1,"26":1,"30":1,"34":2,"35":1,"41":2,"53":1,"56":1,"59":5,"60":2,"63":1,"64":1,"68":1,"69":1,"71":2,"72":5,"73":2,"74":1,"78":2,"81":2,"82":4,"342":1,"343":1,"344":4,"543":1,"561":1,"562":1,"573":2,"826":1,"834":1,"902":1,"904":1,"936":1,"939":2,"960":1,"964":1,"965":2,"971":1,"989":1}}],["博客站点主要基于",{"2":{"1003":1}}],["博客列表",{"2":{"67":1}}],["博客首页",{"2":{"36":1}}],["博客",{"2":{"6":1,"15":1,"19":1,"63":1,"67":1,"70":1,"80":1}}],["gmail",{"2":{"1004":1}}],["gh",{"2":{"849":1,"870":1}}],["ghufran",{"2":{"790":1}}],["ghost",{"2":{"9":1}}],["gif",{"2":{"735":1,"819":1}}],["gifs",{"2":{"735":1}}],["gitattributes",{"2":{"980":1}}],["gitignore",{"2":{"570":2,"571":1,"573":1,"596":1,"735":1,"790":1,"882":1,"980":1}}],["gitlab",{"2":{"120":1}}],["git",{"0":{"451":1},"2":{"17":6,"130":1,"131":1,"436":1,"451":3,"567":1,"568":1,"570":2,"571":1,"581":3,"583":1,"596":1,"695":2,"735":1,"780":2,"790":1,"882":1,"955":1,"979":1,"980":5,"982":1,"995":1,"997":1}}],["github",{"2":{"7":1,"17":3,"120":1,"343":3,"345":4,"414":1,"439":1,"455":1,"467":1,"477":1,"567":1,"568":1,"636":2,"677":2,"695":1,"706":2,"728":1,"735":2,"763":2,"780":1,"790":3,"819":2,"851":2,"882":3,"939":3,"955":1,"973":1,"980":2,"998":1,"1004":2}}],["gc",{"2":{"730":1}}],["gctime",{"2":{"92":2,"98":1}}],["g",{"2":{"567":1,"683":1,"741":1,"869":1,"941":1}}],["glue",{"2":{"795":1,"797":2,"805":1}}],["glyph",{"2":{"790":1}}],["gltf",{"2":{"763":3}}],["gltfloader",{"2":{"762":2}}],["gl",{"2":{"763":5,"768":1}}],["glbufferattribute",{"2":{"763":1}}],["glsl或wgsl",{"2":{"766":1}}],["glslnodebuilder",{"2":{"762":1,"765":1,"770":1}}],["glsl",{"2":{"758":1,"759":2,"761":1,"762":3,"763":1,"768":1,"770":2,"771":2}}],["glm",{"2":{"512":3,"519":1,"522":4,"523":1,"549":1,"559":1}}],["glob",{"2":{"203":2,"470":2,"484":1,"591":1,"594":1}}],["globalthis",{"2":{"851":1,"856":1,"859":2}}],["globalversions版本数组",{"2":{"819":1}}],["globalvars",{"2":{"653":1}}],["globalvarclient",{"2":{"646":1}}],["globalvar",{"2":{"646":1,"647":1}}],["globals",{"2":{"818":2,"819":1,"826":1}}],["globaldata",{"2":{"749":3}}],["globaldefault",{"2":{"706":1}}],["globalmodel",{"2":{"704":1,"705":1,"706":1,"708":1,"709":2,"719":1}}],["global",{"2":{"94":1,"240":1,"274":1,"646":1,"677":1,"679":1,"680":1,"705":2,"706":1,"715":1,"961":1,"968":1}}],["gpgpu",{"2":{"763":3}}],["gpt5",{"2":{"553":1}}],["gpts",{"2":{"511":1}}],["gpt",{"2":{"375":1,"511":1,"521":4,"523":5,"549":1,"550":1,"564":1,"567":2,"902":1,"916":1,"919":3,"927":1}}],["gpubufferhandle",{"2":{"777":1}}],["gputexturehandle",{"2":{"777":1}}],["gpudevice",{"2":{"768":1}}],["gpu",{"2":{"124":1,"126":4,"130":1,"131":1,"523":3,"551":2,"672":1,"673":1,"757":1,"759":1,"762":2,"763":9,"766":4,"768":2,"769":1,"774":1,"777":2}}],["goal",{"2":{"994":1}}],["goto",{"2":{"856":1,"858":1,"865":1}}],["gotoandplay",{"2":{"749":1}}],["gotoandstop",{"2":{"740":1,"749":1}}],["gotchas",{"2":{"573":1}}],["golang",{"2":{"552":1}}],["golden",{"2":{"550":2}}],["goodbye",{"2":{"489":1}}],["google",{"2":{"116":1,"348":1,"349":2,"353":1,"354":2,"439":1,"511":3,"515":3,"518":5,"521":5,"901":1,"906":1,"907":2,"908":2,"934":1,"936":2,"939":3,"941":1,"955":1}}],["go",{"2":{"342":1,"553":1,"562":2,"980":2}}],["god",{"2":{"327":1}}],["guxiang",{"2":{"790":1}}],["gulp",{"2":{"677":1}}],["gulpfile",{"2":{"677":1}}],["guard",{"2":{"275":3}}],["guards",{"2":{"274":1,"275":2}}],["guides",{"2":{"939":1}}],["guide",{"2":{"53":1,"518":1,"586":3,"851":1,"939":1}}],["gzipped",{"2":{"98":2}}],["gt",{"2":{"53":2,"61":1,"69":2,"72":4,"74":1,"75":1,"85":1,"96":4,"102":2,"135":1,"138":3,"169":3,"173":3,"175":4,"200":1,"238":2,"250":3,"254":4,"255":3,"256":7,"263":11,"270":2,"271":1,"297":1,"320":1,"387":2,"448":1,"475":2,"484":4,"494":2,"503":1,"540":3,"553":2,"570":1,"622":3,"675":3,"685":3,"796":2,"846":1,"856":1,"868":1,"906":1,"915":2,"917":1,"936":3,"948":2,"959":1,"961":3,"965":1,"966":1,"968":1,"969":2,"970":1,"971":2,"978":1,"987":1,"1027":4,"1031":1,"1048":1}}],["genui",{"2":{"936":1,"939":2}}],["genai",{"2":{"936":1}}],["generic",{"2":{"939":1,"942":1}}],["genericbinder",{"0":{"946":1},"2":{"935":1,"936":1,"938":1,"939":3,"941":1,"946":3}}],["generics",{"2":{"252":1,"261":1}}],["general",{"2":{"414":1}}],["generative",{"2":{"518":1,"543":2}}],["generation",{"2":{"30":1,"63":1,"98":1,"412":1}}],["generates",{"2":{"941":1}}],["generatestaticparams",{"2":{"15":1,"30":1}}],["generatetextonfinishcallback",{"2":{"926":1}}],["generatetextonstepfinishcallback",{"2":{"926":1}}],["generatetextonstepstartcallback",{"2":{"926":1}}],["generatetextonstartcallback",{"2":{"926":1}}],["generatetextresult",{"2":{"912":1,"913":1,"915":1,"926":1}}],["generatetext",{"0":{"915":1,"922":1},"2":{"902":2,"906":2,"908":1,"910":1,"912":4,"913":3,"915":2,"918":1,"919":1,"926":2,"927":1}}],["generated",{"2":{"790":1}}],["generatedfglut",{"2":{"763":1}}],["generatemetadata",{"2":{"69":2,"70":2}}],["generate",{"2":{"16":1,"31":1,"126":1,"762":1,"765":1,"770":4,"775":1,"777":1,"790":2,"907":2,"909":3,"912":1,"941":1}}],["geometries",{"2":{"762":1,"763":2,"777":1}}],["geometry+material",{"2":{"763":1}}],["geometry",{"2":{"759":1,"763":1,"769":1,"777":1,"782":2,"790":1}}],["geojson",{"2":{"706":3,"720":1}}],["geo",{"2":{"706":2,"714":2}}],["gemma",{"2":{"523":1}}],["gemini3",{"2":{"515":1,"1002":1}}],["gemini",{"2":{"510":3,"511":4,"515":1,"518":2,"519":1,"521":5,"523":4,"549":1,"564":1,"567":1,"939":5,"941":1,"954":1,"955":2,"956":1,"979":1,"980":6,"982":1,"986":1,"997":1,"1002":1}}],["getwhitespaceprofile",{"2":{"795":1}}],["getworldscale",{"2":{"769":1,"777":1}}],["getworldquaternion",{"2":{"769":1,"777":1}}],["getworldposition",{"2":{"769":1,"777":1}}],["getwidth",{"2":{"705":1,"719":1}}],["getformstate",{"2":{"865":1}}],["getformat",{"2":{"762":1}}],["getformattedtotal",{"2":{"281":1}}],["getfontproperties",{"2":{"735":1}}],["getoption",{"2":{"719":1}}],["getzr",{"2":{"719":1}}],["getheaders",{"2":{"916":1}}],["getheight",{"2":{"719":1}}],["gethitfunc",{"2":{"692":1}}],["getvisual",{"2":{"713":1,"719":1}}],["getvalue",{"2":{"281":1,"742":2,"743":3,"749":2,"772":1}}],["getuid",{"2":{"706":1}}],["getuser",{"2":{"16":1,"247":3,"327":2,"330":4}}],["getduration",{"2":{"749":1}}],["getdimension",{"2":{"719":1}}],["getdataurl",{"2":{"719":1}}],["getdata",{"2":{"705":1}}],["getdatabaseconnection",{"2":{"301":4}}],["getdom",{"2":{"705":1}}],["getmeasurecontext",{"2":{"796":1}}],["getmethod",{"2":{"762":1}}],["getmessages",{"2":{"143":4,"889":1,"892":1,"899":1}}],["getmatte",{"2":{"749":1}}],["getmodifier",{"2":{"744":1,"749":1}}],["getmodel",{"2":{"705":1}}],["getrandomcolor",{"2":{"693":1}}],["getregistry",{"2":{"859":1}}],["getregisteredanimations",{"2":{"750":1}}],["getregisteredrenderer",{"2":{"741":1,"749":1}}],["getrelativevalue",{"2":{"819":1}}],["getrendertarget",{"2":{"777":1}}],["getrenderer",{"2":{"741":2,"749":1}}],["getrect",{"2":{"714":1}}],["getresult",{"2":{"305":3}}],["getreader",{"2":{"141":2,"143":1}}],["getinterceptedrequests",{"2":{"865":1}}],["getinterface",{"2":{"742":1}}],["getintersection",{"2":{"680":1,"683":2,"684":1,"692":2}}],["getitemmodel",{"2":{"719":1}}],["getitem",{"2":{"713":1}}],["getimpl",{"2":{"706":1}}],["getimagedata",{"2":{"683":1}}],["getsignal",{"2":{"951":1}}],["getsize",{"2":{"692":1}}],["getshapekey",{"2":{"692":1}}],["getsegmentmetrics",{"2":{"792":1,"796":1,"798":1}}],["getselfrect",{"2":{"692":1}}],["getset",{"2":{"677":1}}],["getstringvalidator",{"2":{"677":1}}],["getstate",{"2":{"289":1}}],["getstaticprops",{"2":{"15":1,"30":1,"34":1}}],["getclientdatamodel",{"2":{"951":1}}],["getclientcapabilities",{"2":{"948":1,"951":1}}],["getclientrect",{"2":{"692":2}}],["getcookies",{"2":{"865":1}}],["getcorrectedsegmentwidth",{"2":{"796":1}}],["getconnecteddataurl",{"2":{"719":1}}],["getcontext",{"2":{"683":1}}],["getcomponent",{"2":{"661":1}}],["getchildren",{"2":{"663":1,"692":1}}],["getchildbyid",{"2":{"663":1}}],["getcurrenturl",{"2":{"865":1}}],["getcurrentuser",{"2":{"16":3}}],["getcurrency",{"2":{"281":1}}],["getter",{"2":{"679":1,"682":2,"685":2}}],["gettersetter",{"2":{"677":1}}],["gettotalitemcount",{"2":{"281":1}}],["getting",{"2":{"53":1}}],["getnumbervalidator",{"2":{"677":1,"685":1}}],["getnumberlength",{"2":{"265":4}}],["getname",{"2":{"185":1}}],["getelementbypath",{"2":{"749":2}}],["getelementbyid",{"2":{"668":1,"724":1,"749":1,"754":1}}],["getecdata",{"2":{"706":1}}],["getengineprofile",{"2":{"796":1,"797":1}}],["getenv",{"2":{"649":1}}],["getentries",{"2":{"14":2}}],["getemail",{"2":{"185":1}}],["getperformargs",{"2":{"712":1}}],["getpet",{"2":{"229":2}}],["getpointerposition",{"2":{"692":1}}],["getposts",{"2":{"69":2,"70":1}}],["getpageid",{"2":{"662":1}}],["getprop",{"2":{"743":1}}],["getproperty",{"2":{"263":1,"268":4}}],["getproducts",{"2":{"288":1,"327":1}}],["getproductbyid",{"2":{"288":1}}],["getphone",{"2":{"185":1}}],["getactivepage",{"2":{"865":1}}],["getaxes",{"2":{"714":1}}],["getapi",{"2":{"663":1}}],["getamount",{"2":{"281":1}}],["getallintersections",{"2":{"692":1}}],["getall",{"2":{"261":3}}],["getallblogposts",{"2":{"14":1,"15":3}}],["getaddress",{"2":{"184":1}}],["getlongtaskstatus",{"2":{"163":1}}],["getlines",{"2":{"143":3,"889":1,"892":2,"899":1}}],["getboundingclientrect",{"2":{"784":1}}],["getbooleanvalidator",{"2":{"677":1}}],["getbytes",{"2":{"143":3,"889":1,"891":1,"892":1,"899":1}}],["getblogpostbyslug",{"2":{"14":1,"15":2}}],["getquerydata",{"2":{"96":1}}],["get",{"2":{"71":1,"106":1,"112":1,"125":1,"127":1,"131":3,"135":3,"140":1,"141":2,"142":1,"144":1,"150":1,"153":1,"163":2,"248":1,"342":1,"685":1,"705":1,"714":1,"719":1,"768":1,"777":1,"834":7,"854":1,"855":1,"860":5,"866":5,"873":1,"879":1,"945":1,"951":1}}],["gallery",{"2":{"939":2}}],["gaugeview",{"2":{"706":1}}],["gaugeseries",{"2":{"706":1}}],["gauge",{"2":{"706":1}}],["gamma",{"2":{"515":4}}],["gate>",{"2":{"987":1}}],["gate等",{"2":{"976":1}}],["gate",{"2":{"975":1,"978":1,"980":1,"986":1,"987":1}}],["gateway",{"2":{"125":1,"164":1,"166":1,"280":1}}],["gatin",{"2":{"735":2}}],["gatsby",{"2":{"2":1,"6":1,"30":1,"790":1}}],["gapbefore",{"2":{"799":1}}],["gap",{"2":{"15":1}}],["grunt",{"2":{"735":2}}],["ground",{"2":{"784":1}}],["grouping",{"2":{"676":1}}],["groupid>",{"2":{"193":1}}],["groupid>org",{"2":{"193":1}}],["group",{"2":{"672":1,"675":1,"676":2,"677":2,"679":1,"680":4,"692":1,"693":4,"705":1,"719":1,"763":1,"777":2,"939":1}}],["groq",{"2":{"523":3}}],["grok",{"2":{"510":1,"511":3}}],["green",{"2":{"489":1,"980":1,"989":3}}],["grep",{"2":{"470":1,"591":1,"594":1}}],["gradle",{"2":{"936":1,"939":2}}],["gradientproperty",{"2":{"735":1}}],["granularity",{"2":{"795":1}}],["graphs",{"2":{"980":1}}],["graphseries",{"2":{"706":1}}],["graphviz",{"2":{"976":1,"980":2}}],["graphview",{"2":{"706":1}}],["graphemes",{"2":{"805":1}}],["graphemeindex",{"2":{"799":1,"805":2}}],["grapheme",{"2":{"792":2}}],["graphic",{"2":{"706":3}}],["graph",{"0":{"769":1},"2":{"314":1,"536":1,"675":1,"676":2,"706":4,"761":1,"762":1,"770":2,"986":2}}],["graphql",{"2":{"6":1,"342":6}}],["grayscale",{"2":{"677":1,"679":1}}],["gray",{"2":{"15":2,"16":2,"488":1,"962":2,"964":3}}],["gridhelper",{"2":{"763":1}}],["gridcomponent",{"2":{"725":2}}],["gridrect",{"2":{"714":1}}],["gridsimple",{"2":{"706":1}}],["grid",{"2":{"15":1,"647":2,"706":2,"714":1}}],["是继",{"2":{"1031":1}}],["是大势所趋",{"2":{"1031":1}}],["是耐力不够",{"2":{"1026":1}}],["是达成目标的关键因素",{"2":{"1016":1}}],["是我的数字花园",{"2":{"1002":1}}],["是我们的罗盘",{"2":{"376":1}}],["是智能化",{"2":{"965":1}}],["是采用原子化为主",{"2":{"965":1}}],["是的",{"2":{"965":2}}],["是近年来最能深刻改变前端开发习惯的方案",{"2":{"962":1}}],["是客户端的消息分发中枢",{"2":{"944":1}}],["是轻量级",{"2":{"918":1}}],["是对",{"2":{"917":1}}],["是对原始输入数据的抽象层",{"2":{"713":1}}],["是框架无关的聊天状态管理器",{"2":{"917":1}}],["是核心",{"2":{"912":1}}],["是核心操作",{"2":{"334":1}}],["是微软开源的一个基于",{"2":{"872":1}}],["是微前端架构的理想选择",{"2":{"288":1}}],["是库的公共",{"2":{"798":1}}],["是独立的辅助模块",{"2":{"788":1}}],["是顶层",{"2":{"788":1}}],["是顶类型",{"2":{"244":1}}],["是可选辅助层",{"2":{"788":1}}],["是可执行代码",{"2":{"442":1}}],["是辅助层",{"2":{"788":1}}],["是中间层",{"2":{"788":1}}],["是播放调度核心",{"2":{"772":1}}],["是材质基类",{"2":{"771":1}}],["是抽象接口",{"2":{"768":1}}],["是渲染的基本数据单元",{"2":{"766":1}}],["是渲染的关键模块",{"2":{"683":1}}],["是世界上最流行",{"2":{"757":1}}],["是外部",{"2":{"738":1}}],["是唯一直接与",{"2":{"684":1}}],["是唯一选择",{"2":{"131":1}}],["是整个框架的基石",{"2":{"682":1}}],["是无状态的",{"2":{"670":1}}],["是解析和编译信息的能力",{"2":{"619":1}}],["是通过完整地阅读来观摩优秀的大师是如何思考的",{"2":{"608":1}}],["是通用对话",{"2":{"519":1}}],["是放置在",{"2":{"591":1}}],["是团队协作的核心载体",{"2":{"570":1}}],["是你",{"2":{"584":1}}],["是你的数字员工",{"2":{"557":1}}],["是你在一个领域里积累的隐性知识",{"2":{"460":1}}],["是选择单体还是微服务",{"2":{"555":1}}],["是那个能够让工程能力和产品思维产生指数级爆炸的乘数",{"2":{"554":1}}],["是连接",{"2":{"544":1}}],["是保持底层",{"2":{"531":1}}],["是保障",{"2":{"509":1}}],["是让个人产出这种线性增长变成指数增长的关键变量",{"2":{"557":1}}],["是让我们从繁琐的",{"2":{"526":1}}],["是让这个世界走向极端",{"2":{"387":1,"1009":1}}],["是需要在国内稳定使用",{"2":{"523":1}}],["是开源模型生态的事实标准入口",{"2":{"523":1}}],["是切换",{"2":{"523":1}}],["是性价比最突出的国产模型",{"2":{"522":1}}],["是性能的极限",{"2":{"55":1}}],["是替代传统搜索引擎的首选工具",{"2":{"518":1}}],["是企业",{"2":{"515":1}}],["是国内开发者使用第三方",{"2":{"523":1}}],["是国内开发者的性价比首选",{"2":{"519":1}}],["是国内日常使用场景下综合体验较好的",{"2":{"518":1}}],["是国内互联网资源覆盖最广的",{"2":{"518":1}}],["是国内技术领先的大模型平台",{"2":{"512":1}}],["是国内领先的",{"2":{"512":1}}],["是月之暗面",{"2":{"512":1}}],["是最贴近真实工程流程的终端",{"2":{"567":1}}],["是最知名的对话式",{"2":{"511":1}}],["是最主流的两个服务端状态管理方案",{"2":{"97":1}}],["是全局唯一的动画引擎实例",{"2":{"826":1}}],["是全局单例",{"2":{"821":1}}],["是全球领先的人工智能公司",{"2":{"511":1}}],["是全集",{"2":{"244":1}}],["是心灵的映现",{"2":{"506":1}}],["是单",{"2":{"475":1}}],["是单页应用",{"2":{"22":1}}],["是杠杆",{"2":{"462":1}}],["是建立判断力",{"2":{"458":1}}],["是能够敏锐识别自己的长板",{"2":{"458":1}}],["是提效利器",{"2":{"444":1}}],["是提供给",{"2":{"442":1}}],["是指当",{"2":{"961":1}}],["是指",{"2":{"443":1,"558":2}}],["是技能核心内容",{"2":{"442":1}}],["是操作系统",{"2":{"439":1}}],["是系统中的",{"2":{"438":1}}],["是系统中会随着时间发生变化的要素",{"2":{"384":1}}],["是面向特定工作主题的",{"2":{"437":1}}],["是随口交代的任务",{"2":{"436":1}}],["是生态中最基础的交互单元",{"2":{"435":1}}],["是关键的反馈吸收阶段",{"2":{"427":1}}],["是只会机械响应指令的",{"2":{"421":1}}],["是人性的弱点",{"2":{"393":1}}],["是人机协作的一套",{"2":{"179":1}}],["是不是子弹还要飞一会儿",{"2":{"389":1}}],["是训练洞察力的基本功",{"2":{"385":1}}],["是某一特定时刻",{"2":{"384":1}}],["是每个人都要像经营者一样主动思考并承担责任",{"2":{"380":1}}],["是结果导向",{"2":{"380":1}}],["是结构类型系统",{"2":{"236":1}}],["是坚守长期主义和价值创造的客观根基",{"2":{"379":1}}],["是利用了你的炫耀欲",{"2":{"373":1}}],["是底层",{"2":{"788":2}}],["是底层的生理",{"2":{"373":1}}],["是底类型",{"2":{"244":1}}],["是情绪的来源",{"2":{"372":1}}],["是因为对当时的",{"2":{"609":1}}],["是因为其开放式货架策略将存储成本降到了极低",{"2":{"391":1}}],["是因为那个丝滑的转场动画",{"2":{"372":1}}],["是因为我们习惯了",{"2":{"370":1}}],["是因为它们构成了反馈闭环",{"2":{"622":1}}],["是因为它的扩展性更好",{"2":{"533":1}}],["是因为它的设计者在架构层面做了大量克制",{"2":{"54":1}}],["是因为它解决了",{"2":{"255":1}}],["是高估了用户动力",{"2":{"369":1}}],["是天赋",{"2":{"368":1}}],["是功能太多",{"2":{"366":1}}],["是为了找出自己的优势和不足",{"2":{"396":1}}],["是为了在核心体验上以此换取",{"2":{"365":1}}],["是为了解决当时的痛点而生",{"2":{"609":1}}],["是为了解决",{"2":{"191":1}}],["是产品经理",{"2":{"363":1}}],["是危险的",{"2":{"363":1}}],["是驱动知识工作者留存的唯一动力",{"2":{"350":1}}],["是如何重塑信息获取工作流的",{"2":{"348":1}}],["是基于插件化理念设计的一款支持多语言",{"2":{"342":1}}],["是由于基准过旧还是多人同时修改同一逻辑",{"2":{"451":1}}],["是由",{"2":{"342":1,"343":1,"511":1,"547":1}}],["是前端开发中常用的",{"2":{"342":1}}],["是前提",{"2":{"181":1}}],["是用于描述网页样式和布局的样式表语言",{"2":{"338":1}}],["是用于创建网页的标准标记语言",{"2":{"338":1}}],["是异步加载的",{"2":{"333":1}}],["是维护者与使用者之间的契约",{"2":{"331":1}}],["是编写通用开源库",{"2":{"306":1}}],["是该规范最知名的实现",{"2":{"305":1}}],["是专门为浏览器环境设计的模块化规范",{"2":{"305":1}}],["是伴随",{"2":{"304":1}}],["是现代前端架构的第一铁律",{"2":{"966":1}}],["是现代前端框架",{"2":{"302":1}}],["是现代浏览器的标准",{"2":{"881":1}}],["是现代工程化开发不可或缺的基石",{"2":{"296":1}}],["是软件要解决的核心问题域",{"2":{"278":1}}],["是构建可靠",{"2":{"456":1}}],["是构建现代",{"2":{"338":1}}],["是构建",{"2":{"338":1}}],["是构建大型可靠应用的重要基础",{"2":{"270":1}}],["是构建类型安全工具函数的重要技术",{"2":{"268":1}}],["是构建类型安全",{"2":{"264":1}}],["是从",{"2":{"250":1}}],["是交叉的单位元",{"2":{"244":1,"250":1}}],["是交叉的零元",{"2":{"244":1}}],["是交叉的",{"2":{"244":1}}],["是交集",{"2":{"242":1}}],["是联合的零元",{"2":{"244":1}}],["是联合的单位元",{"2":{"244":1,"250":1}}],["是联合的",{"2":{"244":1}}],["是联合成员",{"2":{"229":1}}],["是空集",{"2":{"244":1}}],["是等价的类型",{"2":{"243":1}}],["是并集",{"2":{"242":1}}],["是数学中非常美妙的现象",{"2":{"242":1}}],["是所有时间相关实体的最底层基类",{"2":{"824":1}}],["是所有",{"2":{"769":1,"913":1}}],["是所有的",{"2":{"239":1}}],["是所有字符串",{"2":{"227":1}}],["是类型谓词",{"2":{"231":1}}],["是既属于字符串又属于数字的值的集合",{"2":{"227":1}}],["是在",{"2":{"201":1}}],["是在满足需求的前提下",{"2":{"54":1}}],["是模块间的交互契约",{"2":{"195":1}}],["是简陋",{"2":{"181":1}}],["是简洁",{"2":{"181":1}}],["是哲学与科学研究中经典的思维工具",{"2":{"181":1}}],["是典型的",{"2":{"178":1}}],["是什么",{"0":{"441":1},"2":{"174":1,"441":1}}],["是目前口碑最好的",{"2":{"564":1}}],["是目前应用最广",{"2":{"427":1}}],["是目前最受欢迎的",{"2":{"344":1}}],["是目前",{"2":{"142":1,"465":1}}],["是浏览器原生封装的",{"2":{"138":1}}],["是实现实时性的基础方案",{"2":{"123":1}}],["是实际的请求函数",{"2":{"91":1}}],["是服务器",{"2":{"118":1}}],["是严谨的",{"2":{"104":1}}],["是知道什么时候不该用它",{"2":{"55":1}}],["是灵活性的极限",{"2":{"55":1}}],["是自缚手脚",{"2":{"55":1}}],["是一款",{"2":{"632":1}}],["是一款速度极快的前端构建工具",{"2":{"343":1}}],["是一台拥有无限爆发力的引擎",{"2":{"534":1}}],["是一套面向编码",{"2":{"973":1}}],["是一套开源项目代码仓库深度分析的",{"2":{"636":1}}],["是一套开放标准的连接层协议",{"2":{"439":1}}],["是一套用于构建用户界面的渐进式框架",{"2":{"339":1}}],["是一段时间内",{"2":{"384":1}}],["是一场从",{"2":{"337":1}}],["是一个开源的",{"2":{"933":1}}],["是一个开源的浏览器引擎",{"2":{"338":1}}],["是一个将网站",{"2":{"843":1}}],["是一个快速",{"2":{"812":1}}],["是一个纯",{"2":{"784":1}}],["是一个面向",{"2":{"699":1}}],["是一个面向前端开发者的高性能",{"2":{"670":1}}],["是一个面向前端开发者和后端开发者的低代码前端框架",{"2":{"639":1}}],["是一个可选参数",{"2":{"482":1}}],["是一个包含完整指令说明",{"2":{"436":1}}],["是一个重要的概念",{"2":{"426":1}}],["是一个由",{"2":{"345":1}}],["是一个由字节跳动",{"2":{"343":1}}],["是一个现代前端项目的理想部署平台",{"2":{"345":1}}],["是一个现代",{"2":{"343":1}}],["是一个用于构建高效",{"2":{"344":1}}],["是一个用于",{"2":{"342":1}}],["是一个功能强大的",{"2":{"342":1}}],["是一个预测性的状态容器",{"2":{"341":1}}],["是一个函数式语法",{"2":{"313":1}}],["是一个独立的辅助模块",{"2":{"799":1}}],["是一个独立的",{"2":{"248":1}}],["是一个不可见的标记",{"2":{"247":1}}],["是一个有限集",{"2":{"229":1}}],["是一个流行的",{"2":{"220":1}}],["是一个自动化的静态代码检查工具",{"2":{"219":1}}],["是一个强大的开源前端异步状态管理库",{"2":{"91":1}}],["是一个基于云计算的网站部署和托管平台",{"2":{"345":1}}],["是一个基于",{"2":{"85":1,"338":1,"340":2,"342":2,"344":2}}],["是一个",{"2":{"54":1,"240":1,"402":1,"971":1}}],["是一种在构建阶段",{"2":{"960":1}}],["是一种将",{"2":{"959":1}}],["是一种依靠人力去填补技术鸿沟的",{"2":{"553":1}}],["是一种模块化的能力组件",{"2":{"441":1}}],["是一种能够处理多种模态数据",{"2":{"418":1}}],["是一种能够感知环境",{"2":{"402":1}}],["是一种全新的构建",{"2":{"339":1}}],["是一种动态",{"2":{"338":1}}],["是一种跨环境的模块化规范",{"2":{"306":1}}],["是一种以业务领域为核心的软件设计方法论",{"2":{"276":1}}],["是一种比",{"2":{"176":1}}],["是一种",{"2":{"134":2}}],["是一种底层的",{"2":{"108":1}}],["是一种基于文本的通信协议",{"2":{"102":1}}],["是一种与框架无关的渲染思想",{"2":{"41":1}}],["是一种流式混合渲染策略",{"2":{"39":1}}],["是精心设计的结果",{"2":{"54":1}}],["是任何需要服务端实时渲染的方案无法企及的性能基线",{"2":{"52":1}}],["是巩固知识的最佳方式",{"2":{"48":1}}],["是否异步执行",{"2":{"994":1}}],["是否支持模块化拆分",{"2":{"965":1}}],["是否支持多轮追问与自动报告生成",{"2":{"517":1}}],["是否使用默认主循环",{"2":{"834":1}}],["是否使用脏矩形优化",{"2":{"719":1}}],["是否被推荐",{"2":{"994":1}}],["是否被重叠",{"2":{"834":1}}],["是否被覆盖",{"2":{"834":1}}],["是否被这缕月光下的暗香触动",{"2":{"507":1}}],["是否反向",{"2":{"834":1}}],["是否含",{"2":{"793":1,"805":1}}],["是否",{"2":{"749":1}}],["是否已销毁",{"2":{"719":1}}],["是否已触摸",{"2":{"663":1}}],["是否已用",{"2":{"169":1}}],["是否正在提交",{"2":{"663":1}}],["是否有子节点",{"2":{"834":1}}],["是否有子",{"2":{"663":1}}],["是否有事件驱动基础设施",{"2":{"166":1}}],["是否启用移动端原生",{"2":{"661":1}}],["是否覆盖已注册的渲染器",{"2":{"661":1}}],["是否隔离数据作用域",{"2":{"661":1}}],["是否只是昙花一现时",{"2":{"569":1}}],["是否也想让洛神的衣袂在你的笔尖起舞",{"2":{"508":1}}],["是否想尝试为心中的神女再赋新篇",{"2":{"505":1}}],["是否允许渐进渲染",{"2":{"712":1}}],["是否允许",{"2":{"482":1}}],["是否可以取消",{"2":{"281":1}}],["是否必需",{"2":{"210":1}}],["是否传了有效的userid",{"2":{"199":1}}],["是否真正做到",{"2":{"171":1}}],["是否利用",{"2":{"169":1}}],["是否优先使用了",{"2":{"169":1}}],["是否为服务端渲染",{"2":{"719":1}}],["是否为移动端",{"2":{"662":1}}],["是否为表单项",{"2":{"661":1}}],["是否为",{"2":{"89":1,"150":1}}],["是否应该用",{"2":{"54":1}}],["是否需要继承上层数据域",{"2":{"661":1}}],["是否需要私有化部署",{"2":{"519":1}}],["是否需要调整",{"2":{"414":1}}],["是否需要登录后才可访问",{"2":{"46":1}}],["是否需要公开搜索引擎收录",{"2":{"46":1}}],["是否要求毫秒级实时数据",{"2":{"46":1}}],["是否重要",{"2":{"46":1}}],["是与",{"2":{"26":1}}],["是",{"2":{"6":1,"34":1,"46":4,"48":1,"57":1,"61":1,"78":1,"94":1,"137":1,"141":1,"166":4,"197":1,"202":1,"232":1,"236":1,"250":2,"252":1,"268":1,"269":1,"310":1,"338":1,"339":1,"341":3,"342":1,"343":1,"478":1,"511":2,"525":1,"555":1,"567":1,"571":2,"608":1,"713":1,"728":1,"765":2,"770":1,"798":1,"825":1,"827":1,"892":2,"901":1,"945":1,"946":1,"947":1,"948":1,"964":1,"1030":1}}],["负载",{"2":{"934":1}}],["负载均衡的超时限制",{"2":{"125":1}}],["负载均衡",{"2":{"3":1,"131":1}}],["负向增强回路",{"2":{"386":1}}],["负责覆写",{"2":{"971":1}}],["负责页面布局",{"2":{"971":1}}],["负责标准化的原子级布局",{"2":{"965":1}}],["负责接收",{"2":{"951":1}}],["负责创建各种模型实例",{"2":{"913":1}}],["负责创建复杂对象或聚合",{"2":{"278":1}}],["负责提示词处理",{"2":{"906":1}}],["负责计算单个",{"2":{"827":1}}],["负责驱动所有活跃的",{"2":{"821":1}}],["负责测量每个段的精确宽度",{"2":{"796":1}}],["负责高层次的渲染流程编排",{"2":{"768":1}}],["负责该图层的逐帧渲染",{"2":{"738":1}}],["负责管理图层",{"2":{"738":1}}],["负责渲染流程编排",{"2":{"765":1}}],["负责渲染",{"2":{"709":1}}],["负责组件绘制",{"2":{"704":1}}],["负责图表绘制",{"2":{"704":1}}],["负责打造和打磨基础模型",{"2":{"551":1}}],["负责填充实现细节",{"2":{"527":1}}],["负责排版",{"2":{"515":1}}],["负责搜集海量原始数据的",{"2":{"415":1}}],["负责逐一高效执行",{"2":{"414":1}}],["负责全局请求头注入",{"2":{"342":1}}],["负责与数据库或外部",{"2":{"336":1}}],["负责解析请求",{"2":{"336":1}}],["负责数据库交互",{"2":{"275":1}}],["负责数据获取",{"2":{"170":1}}],["负责处理",{"2":{"275":1}}],["负责将非标准",{"2":{"965":1}}],["负责将原始文本转化为结构化的段数组",{"2":{"795":1}}],["负责将动画数据绑定到具体对象属性",{"2":{"772":1}}],["负责将数据值转换为画布上的像素坐标",{"2":{"714":1}}],["负责将底层分散的微服务",{"2":{"342":1}}],["负责将",{"2":{"202":1,"709":1}}],["负责将源码",{"2":{"6":1}}],["负责",{"2":{"179":1,"274":1,"415":2,"416":1,"591":1}}],["负责实现代码",{"2":{"176":1}}],["负责去后台",{"2":{"92":1}}],["+|",{"2":{"825":4,"826":4}}],["+v",{"2":{"789":2}}],["+hybridrenderer",{"2":{"734":1}}],["+canvasrenderer",{"2":{"734":1}}],["+svgrendererbase|",{"2":{"734":1}}],["+==========+==================+==================+===========================+",{"2":{"907":1}}],["+===========+====================+=======================+===================+",{"2":{"705":1}}],["+=============+==============================================================+",{"2":{"705":1}}],["+==========================v=================================+",{"2":{"656":2}}],["+==========================+=================================+",{"2":{"656":1}}],["+==================================+==================================+",{"2":{"979":2}}],["+==================================+==========================================+",{"2":{"907":3}}],["+===================================+===============================================+",{"2":{"789":1}}],["+===================================+=======================================+",{"2":{"705":1}}],["+========================================+",{"2":{"944":2}}],["+===========================================================+",{"2":{"798":1}}],["+=====================================================================+",{"2":{"979":5}}],["+===============================================================================+",{"2":{"762":2}}],["+=====================================================================================+",{"2":{"734":2}}],["+=============================================================================+",{"2":{"646":1}}],["+===========================================================================+",{"2":{"705":6,"907":4}}],["+=======================================================================+",{"2":{"676":3,"682":2,"683":3,"684":2,"685":2,"686":2,"818":7,"938":1}}],["+==================================================================+",{"2":{"825":1,"826":1,"827":1,"828":1}}],["+============================================================+",{"2":{"656":2}}],["+===========================================+===============================+",{"2":{"705":2}}],["+=====================================+=================================+",{"2":{"676":4}}],["+=============================v=============================================+",{"2":{"646":4}}],["+=============================+=============================================+",{"2":{"646":4}}],["+=========+================+================+==================+=============+",{"2":{"907":1}}],["+=100",{"2":{"828":1}}],["+=",{"2":{"141":1,"143":2,"163":1,"782":2}}],["+",{"0":{"74":1,"77":1,"140":1,"141":1,"628":1,"686":1,"801":1,"802":2,"859":1,"923":1,"964":1},"1":{"141":1,"142":1,"143":1,"144":1},"2":{"5":3,"7":2,"8":2,"10":3,"13":1,"16":2,"19":1,"20":1,"41":1,"43":1,"45":1,"46":2,"47":3,"55":1,"59":3,"63":2,"67":2,"80":5,"81":2,"82":1,"85":1,"91":1,"98":2,"122":1,"130":1,"131":1,"135":4,"138":1,"140":1,"141":2,"143":2,"153":1,"155":2,"160":1,"166":1,"168":1,"187":1,"188":1,"204":2,"222":2,"223":1,"227":1,"238":2,"248":1,"274":1,"275":1,"280":3,"281":2,"295":1,"304":1,"305":1,"307":1,"310":1,"315":2,"319":1,"324":1,"342":4,"361":2,"365":1,"367":1,"376":1,"402":2,"408":3,"410":1,"416":1,"427":1,"436":2,"439":1,"442":1,"465":2,"470":2,"471":1,"472":1,"502":2,"515":6,"518":1,"523":7,"540":2,"544":2,"551":2,"553":1,"554":1,"561":2,"562":4,"564":3,"565":8,"568":1,"573":1,"622":4,"628":2,"636":1,"642":3,"643":2,"645":3,"646":85,"647":4,"649":19,"650":18,"652":33,"653":32,"654":9,"655":22,"656":26,"663":1,"672":2,"673":2,"675":1,"676":68,"677":3,"679":46,"680":9,"682":32,"683":3,"684":11,"686":9,"695":1,"697":1,"702":2,"705":60,"706":62,"708":29,"709":10,"711":24,"712":14,"713":23,"714":40,"733":1,"734":106,"737":21,"738":9,"740":28,"741":29,"742":25,"743":23,"744":37,"759":3,"762":121,"763":6,"765":35,"766":20,"768":49,"769":58,"770":29,"771":52,"772":54,"781":1,"785":1,"788":2,"789":28,"790":7,"792":28,"793":2,"795":43,"796":27,"797":25,"798":9,"799":13,"806":1,"808":3,"810":5,"814":2,"815":1,"818":112,"819":4,"821":17,"822":12,"824":11,"825":18,"826":16,"827":16,"828":12,"832":1,"836":4,"845":1,"846":1,"848":1,"849":2,"854":1,"858":3,"859":2,"904":11,"907":140,"908":1,"909":1,"912":13,"915":42,"916":16,"917":25,"918":15,"923":1,"935":1,"936":1,"938":77,"939":11,"941":22,"942":1,"944":45,"945":30,"946":28,"947":29,"948":26,"956":3,"962":1,"964":3,"965":46,"970":1,"971":7,"975":1,"976":1,"978":2,"979":116,"980":2,"982":27,"985":22,"986":31,"987":16,"988":25,"989":19,"1001":1,"1031":6,"1041":2,"1043":6,"1045":5,"1046":2,"1047":11}}],["的奇葩",{"2":{"1043":1}}],["的法则",{"2":{"1042":1}}],["的准则",{"2":{"1026":2}}],["的锻炼后",{"2":{"1022":1}}],["的发展",{"2":{"1018":1}}],["的范畴",{"2":{"1006":1}}],["的范式",{"2":{"986":1}}],["的范式革命",{"0":{"420":1}}],["的范式转变",{"2":{"406":1}}],["的社会生活状态",{"2":{"1005":1}}],["的初衷不谋而合",{"2":{"1003":1}}],["的初始化",{"2":{"917":1}}],["的周期从数周压缩至数小时",{"2":{"1001":1}}],["的独立作品",{"2":{"1000":1}}],["的痛点",{"2":{"1000":1}}],["的痛苦过程中",{"2":{"531":1}}],["的策略模式",{"2":{"988":1}}],["的策略解析依赖图",{"2":{"314":1}}],["的目标",{"2":{"985":1}}],["的插件清单",{"2":{"978":1}}],["的插件链完成编译",{"2":{"53":1}}],["的插件链会遍历所有",{"2":{"50":1}}],["的选择",{"2":{"976":1}}],["的软件开发者",{"2":{"974":1}}],["的零依赖",{"2":{"973":1}}],["的零配置或低配置体验",{"2":{"343":1}}],["的转折点上",{"2":{"971":1}}],["的转换规则",{"2":{"179":1}}],["的转换",{"2":{"58":1}}],["的友好度评估",{"2":{"971":1}}],["的规范",{"2":{"970":1}}],["的规划能力主要由两部分协同驱动",{"2":{"421":1}}],["的书写快感",{"2":{"970":1}}],["的反模式",{"2":{"967":1}}],["的反馈闭环",{"0":{"369":1}}],["的布局",{"2":{"967":1}}],["的主力构建层",{"0":{"967":1}}],["的主场",{"2":{"131":3}}],["的嵌套也不应超过",{"2":{"968":1}}],["的嵌套语法",{"2":{"968":1}}],["的嵌套",{"2":{"965":1}}],["的绝对安全",{"2":{"965":1}}],["的速度与",{"2":{"965":1}}],["的单文件组件",{"2":{"965":1}}],["的单向流",{"2":{"107":1}}],["的尽头",{"2":{"965":1}}],["的两难境地",{"2":{"965":1}}],["的两种模式",{"0":{"36":1}}],["的博弈",{"2":{"965":1}}],["的类名",{"2":{"964":1}}],["的类型推导",{"2":{"964":1}}],["的类型推断能力已经非常成熟",{"2":{"263":1}}],["的类型系统是一座宝库",{"2":{"271":1}}],["的类型关系",{"2":{"263":1}}],["的类型层级中",{"2":{"244":1}}],["的类型是",{"2":{"237":2}}],["的类型",{"2":{"234":1}}],["的类型检查中",{"2":{"321":1}}],["的类型检查",{"2":{"227":1}}],["的颜色系统采用",{"2":{"962":1}}],["的困惑",{"2":{"961":1}}],["的经典原生直觉",{"2":{"961":1}}],["的经典题",{"2":{"494":1}}],["的哈希字符串",{"2":{"960":1}}],["的体积",{"2":{"959":1}}],["的体积开销",{"2":{"112":1}}],["的聚合数据模型",{"2":{"951":1}}],["的细粒度响应式系统",{"2":{"935":1}}],["的前端",{"2":{"933":1}}],["的服务端开发",{"2":{"1000":1}}],["的服务端开发者",{"2":{"933":1}}],["的服务器运行时是额外开销",{"2":{"81":1}}],["的适配器",{"2":{"925":1}}],["的统一入口",{"2":{"912":1}}],["的参照标准",{"2":{"965":1}}],["的参考模板",{"2":{"909":1}}],["的参数",{"2":{"489":1}}],["的映射",{"2":{"832":1}}],["的映射关系",{"2":{"179":1}}],["的每帧调用",{"2":{"827":1}}],["的每一项规则",{"2":{"571":1}}],["的当前状态",{"2":{"827":1}}],["的项",{"2":{"799":1}}],["的项目",{"2":{"342":1}}],["的第二步",{"2":{"796":1}}],["的第一步",{"2":{"433":1,"795":1}}],["的第一性原理是直接提供具有事实支撑的答案",{"2":{"349":1}}],["的卡顿",{"2":{"784":1}}],["的并发播放",{"2":{"772":1}}],["的并集",{"2":{"229":1,"239":2}}],["的构建系统使用",{"2":{"751":1}}],["的构建顺序",{"2":{"171":1}}],["的注册器模式注册和查找",{"2":{"741":1}}],["的创建和生命周期",{"2":{"738":1}}],["的创新",{"2":{"360":1}}],["的配置中推导出来",{"2":{"964":1}}],["的配置",{"2":{"709":1}}],["的配置趋向于更严格",{"2":{"322":1}}],["的缩略图预览",{"2":{"706":1}}],["的语法",{"2":{"958":1}}],["的语法糖",{"2":{"303":1}}],["的语义",{"2":{"680":1}}],["的四层节点树",{"2":{"675":1}}],["的四个维度",{"0":{"352":1}}],["的入口流程设计为快速路径优先",{"2":{"854":1}}],["的入口",{"2":{"675":1,"765":1}}],["的树形节点抽象",{"2":{"670":1}}],["的树形状态管理系统",{"2":{"641":1}}],["的底层核心基石",{"2":{"964":1}}],["的底层复杂性",{"2":{"670":1}}],["的底层设计",{"2":{"496":1}}],["的心",{"2":{"1041":1}}],["的心脏",{"2":{"652":1}}],["的心智",{"2":{"350":1}}],["的升华路径",{"2":{"628":1}}],["的建设",{"2":{"628":1}}],["的建立遵循一个标准化的协议升级流程",{"2":{"114":1}}],["的差异",{"2":{"626":1,"796":1}}],["的诊断都错了",{"2":{"622":1}}],["的恐惧",{"2":{"617":1}}],["的认知偏差",{"2":{"616":1}}],["的认知还停留在",{"2":{"155":1}}],["的系统性错觉",{"0":{"616":1},"1":{"617":1,"618":1}}],["的幻觉",{"2":{"610":1,"612":1}}],["的小例子",{"2":{"1016":1}}],["的小世界",{"2":{"604":1}}],["的小型外包项目",{"2":{"344":1}}],["的傲慢",{"2":{"604":1}}],["的精密经营",{"2":{"603":1}}],["的精髓在于以组件化为核心",{"2":{"169":1}}],["的精髓在于它不再追求一次性交付",{"2":{"105":1}}],["的残酷市场中",{"2":{"600":1}}],["的白名单",{"2":{"597":1}}],["的详细规范和编写方法",{"2":{"588":1}}],["的详细指南",{"2":{"443":1}}],["的助手",{"2":{"584":1}}],["的响应准确性",{"2":{"578":1}}],["的响应模式",{"2":{"153":1}}],["的企业内部知识库问答系统",{"2":{"573":1}}],["的篇幅建议控制在",{"2":{"572":1}}],["的放置位置决定其作用范围",{"2":{"571":1}}],["的魔法时刻",{"2":{"569":1}}],["的行为模式",{"2":{"986":1}}],["的行为变得可观测",{"2":{"491":1}}],["的行业标杆",{"2":{"567":1}}],["的操作员",{"2":{"556":1}}],["的边界",{"0":{"968":1}}],["的边界就不再是技术栈",{"2":{"553":1}}],["的边界到底在哪里",{"2":{"553":1}}],["的专家",{"2":{"551":1,"584":1}}],["的专业技术工单",{"2":{"418":1}}],["的根因",{"2":{"550":1,"567":1}}],["的根本性颠覆",{"2":{"403":1}}],["的游击战",{"2":{"550":1}}],["的玄学转化为可量化的工程指标",{"2":{"550":1}}],["的泛化能力和开发效率",{"2":{"547":1}}],["的文化",{"2":{"601":1}}],["的文件",{"2":{"581":2}}],["的文件夹",{"2":{"547":1}}],["的文档内容以",{"2":{"50":1}}],["的无缝转变",{"2":{"547":1}}],["的洪流下",{"2":{"539":1}}],["的这份报告",{"2":{"539":1}}],["的这份深度观测",{"2":{"525":1}}],["的角色",{"2":{"535":1,"553":1}}],["的唯一标识符",{"2":{"952":3}}],["的唯一方式",{"2":{"531":1}}],["的唯一依据",{"2":{"185":1}}],["的刻意练习",{"2":{"531":1}}],["的丧失",{"2":{"531":1}}],["的报告中提到",{"2":{"531":1}}],["的资格",{"2":{"530":1}}],["的资料库变成了",{"2":{"417":1}}],["的研究实践告诉我们",{"2":{"598":1}}],["的研究揭示了一个冷酷的现实",{"2":{"530":1}}],["的研究给出了一个更具洞察力的视角",{"2":{"526":1}}],["的定义结构",{"0":{"591":1}}],["的定义被重新改写为",{"2":{"540":1}}],["的定义权",{"2":{"539":1}}],["的定义能力",{"2":{"530":1}}],["的定盘星",{"0":{"433":1}}],["的观察揭示了一个关键转折点",{"2":{"527":1}}],["的观点与",{"2":{"361":1}}],["的浅层结论",{"2":{"526":1}}],["的苦力活中抽身",{"2":{"526":1}}],["的产物",{"2":{"1002":1}}],["的产出从",{"2":{"525":1}}],["的产品人",{"2":{"400":1}}],["的产品",{"2":{"366":1}}],["的产品形态天然排斥传统的插入式链接广告",{"2":{"354":1}}],["的挑战",{"2":{"525":1}}],["的隐忧和",{"2":{"525":1}}],["的任务",{"2":{"525":1}}],["的碎片",{"2":{"515":1}}],["的总结",{"2":{"515":1}}],["的搭建",{"2":{"509":1}}],["的平声韵",{"2":{"508":1}}],["的平庸产品",{"2":{"366":1}}],["的章法",{"2":{"508":1}}],["的镜头式语言增强画面感",{"2":{"508":1}}],["的缥缈",{"2":{"508":1}}],["的千古遗憾",{"2":{"508":1}}],["的意象",{"2":{"508":1}}],["的怅惘",{"2":{"508":1}}],["的设定要求",{"2":{"507":1}}],["的设计意图说明",{"2":{"980":1}}],["的设计",{"2":{"946":1}}],["的设计目标",{"2":{"733":1}}],["的设计初衷",{"2":{"597":1}}],["的设计理念相同",{"2":{"596":1}}],["的设计方向",{"2":{"439":1}}],["的设计哲学",{"2":{"54":1,"296":1}}],["的沟通",{"2":{"506":1}}],["的结构化思路",{"2":{"506":1}}],["的结果已经足以回答问题时",{"2":{"427":1}}],["的结果报错",{"2":{"427":1}}],["的永恒价值",{"2":{"505":1}}],["的深渊",{"2":{"532":1}}],["的深意",{"2":{"505":1}}],["的深度积累",{"2":{"464":1}}],["的深度解耦",{"2":{"419":1}}],["的深度产品观察与分析",{"2":{"348":1}}],["的深度交流",{"2":{"104":1}}],["的格式输入",{"2":{"504":1}}],["的质量直接决定了",{"2":{"503":1}}],["的综合模式",{"2":{"502":1}}],["的高频交互需求",{"2":{"494":1}}],["的高性价比已成为消费者心理中的一个强锚定",{"2":{"392":1}}],["的高性能与",{"2":{"38":1}}],["的高性能和",{"2":{"34":1}}],["的双重需求",{"2":{"493":1}}],["的双重能力",{"2":{"367":1}}],["的探索感兴趣",{"2":{"491":1}}],["的探索到",{"2":{"309":1}}],["的开发者",{"2":{"974":1}}],["的开发者的常用选择",{"2":{"523":1}}],["的开发重心也正在转向",{"2":{"491":1}}],["的开源可自托管替代方案",{"2":{"567":1}}],["的开源平替",{"2":{"567":1}}],["的开源",{"2":{"344":1}}],["的流式响应包含多种事件类型",{"2":{"488":1}}],["的流式输出",{"2":{"487":1,"489":1}}],["的捕获与恢复",{"0":{"486":1}}],["的思考路径",{"2":{"484":1}}],["的思维跨越",{"2":{"602":1}}],["的思维",{"2":{"476":1,"601":1}}],["的思维负担",{"2":{"444":1}}],["的思维边界",{"2":{"303":1}}],["的思维高度一致",{"2":{"179":1}}],["的跨学科视野",{"2":{"604":1}}],["的跨越",{"2":{"482":1}}],["的跨环境规范",{"2":{"298":1}}],["的演进已进入一个崭新的阶段",{"2":{"477":1}}],["的演进正以前所未有的速度重塑着人类的劳动范式",{"2":{"420":1}}],["的必经之路",{"2":{"476":1}}],["的链路",{"2":{"475":1,"534":1}}],["的表现",{"2":{"475":1}}],["的表达方式",{"2":{"230":1}}],["的具体任务",{"2":{"470":1}}],["的具体类型",{"2":{"254":1}}],["的职责隔离",{"2":{"467":1}}],["的理解力",{"2":{"539":1}}],["的理论优势",{"2":{"467":1}}],["的理念应运而生",{"2":{"959":1}}],["的理念",{"2":{"344":2,"353":1}}],["的迷茫期",{"2":{"465":1}}],["的成本首次降到了可接受的阈值之下",{"2":{"527":1}}],["的成长路径",{"0":{"464":1}}],["的成功证明了",{"2":{"356":1}}],["的复利效应",{"0":{"463":1}}],["的复杂逻辑时",{"2":{"329":1}}],["的部分",{"2":{"462":1}}],["的交互哲学",{"0":{"543":1}}],["的交互深度将会再上一个台阶",{"2":{"509":1}}],["的交集",{"2":{"462":1}}],["的交叉",{"2":{"250":1}}],["的乘数模型",{"2":{"458":1}}],["的编写技巧",{"2":{"496":1}}],["的编写",{"2":{"456":1}}],["的编译器",{"2":{"54":1}}],["的错误日志获取工具与",{"2":{"455":1}}],["的改动是原子的",{"2":{"451":1}}],["的触发要求",{"2":{"451":1}}],["的面纱",{"2":{"441":1}}],["的共识",{"2":{"441":1}}],["的状态机",{"2":{"706":1}}],["的状态",{"2":{"441":1}}],["的状态变量",{"2":{"91":1}}],["的落地实践中",{"2":{"441":1}}],["的视角",{"2":{"440":1}}],["的视角将贯穿全文",{"2":{"227":1}}],["的方向发展",{"2":{"613":1}}],["的方式输入内容",{"2":{"506":1}}],["的方式指定诗歌形式",{"2":{"506":1}}],["的方法",{"2":{"439":1}}],["的方案",{"2":{"98":2,"132":1,"135":2}}],["的需求会大幅减少",{"2":{"439":1}}],["的普及",{"2":{"439":1}}],["的外部桥梁问题",{"2":{"439":1}}],["的通用方法论教给所有代理",{"2":{"438":1}}],["的通信",{"2":{"289":1}}],["的元认知检查",{"2":{"431":1}}],["的决策链路",{"2":{"537":1}}],["的决策过程透明可见",{"0":{"537":1}}],["的决策",{"2":{"427":1}}],["的决策权比",{"2":{"180":1}}],["的生产力工具",{"2":{"417":1}}],["的拥有细腻的品牌调性",{"2":{"415":1}}],["的拥有最严苛的安全规范",{"2":{"415":1}}],["的出现改变了这个算式",{"2":{"528":1}}],["的出现",{"2":{"415":1,"438":1,"456":1}}],["的闭环",{"2":{"414":1,"484":1,"622":1}}],["的分发",{"2":{"680":1}}],["的分享",{"2":{"496":1}}],["的分类与未来",{"0":{"413":1},"1":{"414":1,"415":1,"416":1,"417":1,"418":1,"419":1}}],["的分层模型",{"2":{"812":1}}],["的分层状态管理",{"2":{"653":1}}],["的分层结构",{"2":{"226":1}}],["的分层架构完美闭环",{"2":{"416":1}}],["的分层架构",{"0":{"279":1},"2":{"189":1,"978":1}}],["的内部流程被拆分为",{"2":{"798":1}}],["的内部机制",{"2":{"569":1}}],["的内存态",{"2":{"622":1}}],["的内心独白",{"2":{"488":1}}],["的内在能力",{"2":{"412":1}}],["的内容与代码",{"2":{"359":1}}],["的陈旧系统",{"2":{"411":1}}],["的素质",{"2":{"410":1}}],["的记忆将变得越来越深邃且精准",{"2":{"410":1}}],["的上下文窗口",{"2":{"410":1,"437":1,"978":1}}],["的上下文环境",{"2":{"367":1}}],["的原始解析",{"2":{"410":1}}],["的原因",{"2":{"112":1,"198":1}}],["的瞬时感知",{"2":{"410":1}}],["的售后咨询与查询",{"2":{"405":1}}],["的追求",{"2":{"403":1}}],["的海量知识储备让",{"2":{"402":1}}],["的事实标准",{"2":{"971":1}}],["的事",{"2":{"601":1}}],["的事情",{"2":{"396":1,"621":1}}],["的事件对象完全一致",{"2":{"143":1}}],["的事件流协议",{"2":{"134":1}}],["的事件触发机制",{"2":{"118":1}}],["的证明",{"2":{"393":1}}],["的营销锁定自身品牌策略",{"2":{"392":1}}],["的均衡状态",{"2":{"392":1}}],["的权衡",{"2":{"391":1}}],["的权利",{"2":{"373":1}}],["的增强回路",{"2":{"387":2}}],["的地方",{"2":{"387":1}}],["的可靠支柱时",{"2":{"377":1}}],["的可能",{"2":{"179":1}}],["的终点从来不是",{"2":{"376":1}}],["的终止信号",{"2":{"105":1}}],["的化学反应",{"2":{"376":1}}],["的焦虑中解放",{"0":{"376":1}}],["的代码后",{"2":{"555":1}}],["的代码索引",{"2":{"536":1}}],["的代码门槛急剧降低之后",{"2":{"457":1}}],["的代码审查工具结合",{"2":{"455":1}}],["的代码变动",{"2":{"451":1}}],["的代码",{"2":{"375":1,"581":2}}],["的代码使用情况",{"2":{"203":1}}],["的官网之所以让人惊叹",{"2":{"372":1}}],["的官方规范",{"2":{"307":1}}],["的时代",{"2":{"525":1,"532":1}}],["的时刻",{"2":{"370":1}}],["的时间编排",{"2":{"822":1}}],["的时间从数周压缩到数小时",{"2":{"557":1}}],["的时间",{"2":{"199":1,"365":1}}],["的时间应投入于架构设计",{"2":{"169":1}}],["的敏感度",{"2":{"370":1}}],["的过程",{"2":{"367":1,"429":1}}],["的不同状态完美映射为",{"2":{"967":1}}],["的不确定性",{"2":{"543":1}}],["的不一定是他们",{"2":{"366":1}}],["的不可替代场景",{"2":{"240":1}}],["的真实场景中思考",{"2":{"366":1}}],["的直接基类",{"2":{"825":1}}],["的直接耦合",{"2":{"92":1}}],["的直觉",{"2":{"365":1}}],["的伪需求",{"2":{"365":1}}],["的低垂机会",{"2":{"365":1}}],["的能力边界不仅取决于模型本身",{"2":{"476":1}}],["的能力增长并非线性",{"2":{"464":1}}],["的能力演进可归纳为三个递进的层级",{"2":{"459":1}}],["的能力封装为直观的",{"2":{"441":1}}],["的能力",{"2":{"365":1,"403":1,"427":1,"493":1}}],["的艺术",{"2":{"364":1,"367":1}}],["的临界点",{"2":{"363":1}}],["的爆发力",{"2":{"539":1}}],["的爆发赋予了它真正的",{"2":{"402":1}}],["的爆发",{"2":{"363":1}}],["的算力跨越执行的鸿沟",{"2":{"362":1}}],["的输出质量",{"2":{"550":1}}],["的输出带有一定随机性",{"2":{"538":1}}],["的输出下限与上限",{"2":{"503":1}}],["的输出",{"2":{"360":1}}],["的力量",{"2":{"360":1}}],["的勇气",{"0":{"360":1}}],["的门槛降到极低时",{"2":{"357":1}}],["的尾部延迟",{"2":{"353":1}}],["的继任者",{"2":{"343":1}}],["的强制性流程",{"2":{"494":1}}],["的强类型推导系统",{"2":{"342":1}}],["的强大之处在于它能跨模块追踪数据流",{"2":{"319":1}}],["的查询语言",{"2":{"342":1}}],["的更简洁",{"2":{"342":1}}],["的现代",{"2":{"342":1}}],["的现代化",{"2":{"341":1}}],["的现代项目目录结构示例",{"2":{"274":1,"275":1}}],["的热门开源ui组件库",{"2":{"340":1}}],["的人已经知道为什么了",{"2":{"1016":1}}],["的人",{"2":{"337":1,"375":1,"544":1}}],["的混战中学会了兼容的艺术",{"2":{"337":1}}],["的混合",{"2":{"45":1}}],["的混合粒度是组件级别",{"2":{"39":1}}],["的混合方案",{"2":{"34":1}}],["的进化史",{"2":{"525":1}}],["的进化",{"0":{"402":1},"2":{"337":1}}],["的进阶配置",{"2":{"335":1}}],["的进阶方案",{"2":{"155":1}}],["的模块化拆分",{"2":{"597":1}}],["的模块化实践",{"2":{"337":1}}],["的模块加载机制遵循以下规则",{"2":{"334":1}}],["的模式",{"2":{"171":1,"343":1}}],["的路径查找逻辑",{"2":{"322":1}}],["的路由系统遵循一个原则",{"2":{"64":1}}],["的首选",{"2":{"322":1,"335":1,"477":1,"523":1}}],["的导出与导入",{"2":{"318":1}}],["的执行效率和输出质量",{"2":{"444":1}}],["的执行机构",{"2":{"412":1}}],["的执行顺序对于排查复杂的副作用",{"2":{"314":1}}],["的执行力更为稀缺",{"2":{"180":1}}],["的大一统",{"2":{"309":1}}],["的依赖",{"2":{"308":1}}],["的运行时加载不同",{"2":{"307":1}}],["的运行时结构完全相同",{"2":{"247":1}}],["的标准审美",{"2":{"963":1}}],["的标准化也正式开启",{"2":{"441":1}}],["的标准姿势",{"2":{"306":1}}],["的标准格式需要通过",{"2":{"135":1}}],["的百家争鸣",{"2":{"303":1}}],["的暗夜摸索",{"2":{"303":1}}],["的封装",{"2":{"287":1}}],["的优势与挑战",{"0":{"283":1}}],["的全流程自动化",{"2":{"491":1}}],["的全栈",{"2":{"280":1,"344":1}}],["的全部能力",{"2":{"135":1,"140":1,"142":1}}],["的抽象能力培养路径一致",{"2":{"271":1}}],["的写法",{"2":{"271":1}}],["的子类",{"2":{"269":3,"680":1}}],["的有效属性",{"2":{"268":1}}],["的有效属性名",{"2":{"268":1}}],["的其他类型系统特性结合使用时能发挥更大威力",{"2":{"263":1}}],["的用户",{"2":{"259":1}}],["的联合",{"2":{"250":1}}],["的属性名类型",{"2":{"268":1}}],["的属性",{"2":{"243":1,"268":1,"486":1}}],["的东西",{"2":{"240":1}}],["的函数签名比抛出异常更",{"2":{"246":1}}],["的函数",{"2":{"238":1,"247":1}}],["的含义",{"2":{"236":1}}],["的所有",{"2":{"952":1}}],["的所有核心消息类型",{"2":{"949":1}}],["的所有特性",{"2":{"874":1}}],["的所有属性",{"2":{"236":1,"239":1}}],["的所有优势全部清零",{"2":{"62":1}}],["的所有优点",{"2":{"54":1}}],["的关系",{"2":{"236":1,"244":2,"385":1}}],["的关键特性",{"2":{"1001":1}}],["的关键概念",{"0":{"278":1}}],["的关键一步",{"2":{"250":1}}],["的关键在于把握一个根本性的心智模型转变",{"2":{"60":1}}],["的关键步骤是",{"2":{"20":1}}],["的值",{"2":{"233":1}}],["的妙用",{"0":{"232":1}}],["的集合",{"2":{"227":1}}],["的最终答复",{"2":{"488":1}}],["的最小闭环能力",{"2":{"461":1}}],["的最小完整集合",{"2":{"173":1}}],["的最高形态",{"2":{"389":1}}],["的最大解",{"0":{"365":1}}],["的最佳实践如下",{"2":{"216":1}}],["的区别",{"0":{"210":1}}],["的基类",{"2":{"822":1}}],["的基础上",{"2":{"1026":1}}],["的基础",{"2":{"227":1}}],["的基础要求",{"2":{"201":1}}],["的基石",{"2":{"132":1}}],["的判断",{"2":{"199":1}}],["的排查流程",{"0":{"199":1}}],["的库",{"2":{"192":1}}],["的误区",{"2":{"189":1}}],["的功能",{"2":{"183":2,"441":1,"494":1,"556":1,"569":1}}],["的约束范围内寻找局部最优解",{"2":{"179":1}}],["的声明式数据可视化图表库",{"2":{"699":1}}],["的声明式编程范式",{"2":{"179":1}}],["的声明式",{"2":{"179":1}}],["的声明式范式尤为契合",{"2":{"178":1}}],["的问题根源",{"2":{"383":1}}],["的问题",{"2":{"176":1,"316":1,"360":1,"433":1}}],["的循环",{"2":{"175":1,"426":1,"427":1}}],["的安置需要在状态提升",{"2":{"174":1}}],["的安放位置",{"0":{"174":1}}],["的自动补全",{"2":{"702":1}}],["的自动化交付体系",{"2":{"1001":1}}],["的自动化能力",{"2":{"597":1}}],["的自动化闭环",{"2":{"535":1}}],["的自动化生成",{"2":{"451":1}}],["的自动化产出后",{"2":{"171":1}}],["的自由",{"0":{"376":1}}],["的自然结果",{"2":{"132":1}}],["的纯渲染路径跑通",{"2":{"171":1}}],["的轨迹形成清晰",{"2":{"169":1}}],["的超时时间",{"2":{"164":1}}],["的常规响应后",{"2":{"164":1}}],["的概率稳赢",{"2":{"1016":1}}],["的概率在这",{"2":{"163":1}}],["的概念最早由",{"2":{"41":1}}],["的逻辑缺陷",{"2":{"533":1}}],["的逻辑推理",{"2":{"367":1}}],["的逻辑",{"2":{"159":1,"415":1,"438":1}}],["的组件",{"2":{"652":1}}],["的组件编排",{"2":{"440":1}}],["的组件都已卸载",{"2":{"92":1}}],["的组织方式在实际使用中尤为便捷直观",{"2":{"437":1}}],["的组合已经足够强大且优雅",{"2":{"155":1}}],["的工具挂载和技能制定后",{"2":{"509":1}}],["的工具箱",{"2":{"411":1}}],["的工程师而言",{"2":{"552":1}}],["的工程搭建",{"2":{"542":1}}],["的工程解法",{"2":{"493":1}}],["的工程博客提到",{"2":{"439":1}}],["的工程哲学",{"2":{"303":1,"342":1}}],["的工业级实现",{"2":{"155":1}}],["的工作原理",{"2":{"569":1}}],["的工作方式",{"2":{"525":1}}],["的工作流程",{"2":{"443":1}}],["的工作流压缩到了",{"2":{"439":1}}],["的工作模式从",{"2":{"415":1,"438":1}}],["的工作模式非常清晰",{"2":{"119":1}}],["的工作变得可预测",{"2":{"415":1,"438":1}}],["的工作量",{"2":{"219":1}}],["的工作机制基于",{"2":{"35":1}}],["的接口设计与原生",{"2":{"144":1}}],["的简化",{"2":{"141":1}}],["的简单替代",{"2":{"132":1}}],["的完成",{"2":{"138":1}}],["的完整软件开发方法论",{"2":{"973":1}}],["的完整事件流程",{"0":{"688":1}}],["的完整工程任务流",{"2":{"567":1}}],["的完整实践示例",{"2":{"74":1}}],["的完整链路",{"2":{"60":1,"689":1}}],["的完整交付链路封装为框架层的默认方案",{"2":{"59":1}}],["的一部分",{"2":{"964":1}}],["的一个超集",{"2":{"338":1}}],["的一统江湖",{"2":{"303":1}}],["的一些局限",{"2":{"135":1}}],["的一大优势在于其深度集成了浏览器原生的",{"2":{"110":1}}],["的一大杀器",{"2":{"94":1}}],["的实战场景",{"2":{"592":1}}],["的实际表现",{"2":{"503":1}}],["的实现示例",{"2":{"163":1}}],["的实现依赖流式服务端渲染",{"2":{"40":1}}],["的实现依赖",{"2":{"5":1}}],["的实践经验",{"2":{"477":1}}],["的实践过程",{"2":{"467":1}}],["的实践",{"2":{"133":1,"476":1}}],["的技术选型指南",{"2":{"156":1}}],["的技术选型指南中",{"2":{"133":1}}],["的技术",{"2":{"132":2}}],["的技术演进",{"2":{"132":1}}],["的技术问题",{"2":{"59":1}}],["的重要一步",{"2":{"355":1}}],["的重要能力",{"2":{"36":1}}],["的重计算任务",{"2":{"131":1}}],["的长度限制",{"2":{"131":1}}],["的长连接功能",{"2":{"106":1}}],["的轻量级数据请求库",{"2":{"342":1}}],["的轻量级库",{"2":{"85":1}}],["的轻量化",{"2":{"341":1}}],["的轻量优势",{"2":{"131":1}}],["的返回",{"2":{"124":1}}],["的协助下",{"2":{"1032":1}}],["的协议",{"2":{"117":1}}],["的协同",{"0":{"77":1}}],["的多人在同步编辑",{"2":{"116":1}}],["的串行约束",{"2":{"115":1}}],["的束缚",{"2":{"113":1}}],["的业务场景",{"2":{"111":1}}],["的灵活替代方案",{"2":{"106":1}}],["的灵活性之间取得平衡",{"2":{"38":1}}],["的灵活性",{"2":{"20":1,"34":1}}],["的特性",{"2":{"106":1,"418":1}}],["的物理限制",{"2":{"104":1}}],["的固有特性逐渐演变为开发的痛点",{"2":{"103":1}}],["的固有矛盾",{"2":{"43":1}}],["的极简经营",{"2":{"601":1}}],["的极简调度能用最低的性能开销换取最好的感官体验",{"2":{"100":1}}],["的极客团队",{"2":{"344":1}}],["的极限压缩",{"2":{"100":1}}],["的极致简单是精心设计的结果",{"2":{"54":1}}],["的情况下",{"2":{"342":1,"414":1,"531":1}}],["的情况",{"0":{"100":1,"101":1}}],["的数十倍",{"2":{"523":1}}],["的数学",{"2":{"522":1}}],["的数学之美",{"0":{"364":1},"1":{"365":1,"366":1,"367":1}}],["的数组",{"2":{"98":1}}],["的数据流从",{"2":{"941":1}}],["的数据流天然是自顶向下的",{"2":{"175":1}}],["的数据处理编排核心",{"2":{"712":1}}],["的数据变更通过",{"2":{"653":1}}],["的数据请求",{"2":{"91":1}}],["的数据",{"2":{"76":1,"92":1}}],["的压倒性优势",{"2":{"98":1}}],["的局限",{"2":{"98":1}}],["的缓存机制",{"2":{"95":1}}],["的缓存策略",{"2":{"78":1}}],["的网络层面错误",{"2":{"94":1}}],["的确定",{"2":{"92":1}}],["的请求结果进行缓存",{"2":{"91":1}}],["的影响微乎其微",{"2":{"85":1}}],["的阻塞式体验",{"2":{"85":1}}],["的旧习惯",{"2":{"82":1}}],["的场景",{"0":{"80":1,"81":1},"2":{"116":1,"155":1,"311":1}}],["的效果",{"2":{"74":1,"252":1}}],["的形式推送给浏览器",{"2":{"74":1}}],["的后台页面",{"2":{"63":1}}],["的架构裁决",{"2":{"169":1}}],["的架构内核",{"0":{"60":1},"1":{"61":1,"62":1}}],["的架构立场",{"2":{"59":1}}],["的鸿沟",{"0":{"59":1,"321":1},"2":{"1000":1}}],["的价值跃迁",{"2":{"406":1}}],["的价值不仅在于静态类型检查带来的代码提示和编译时错误发现",{"2":{"226":1}}],["的价值",{"2":{"56":1,"540":2}}],["的渲染结果会被序列化为",{"2":{"61":1}}],["的渲染链路",{"2":{"54":1}}],["的渲染架构",{"2":{"48":1}}],["的框架",{"2":{"54":1}}],["的性能优势",{"2":{"54":1}}],["的快速原型",{"2":{"561":1}}],["的快",{"2":{"54":1}}],["的典型特征",{"2":{"53":1}}],["的本质是",{"2":{"402":1}}],["的本质是减少",{"2":{"182":1}}],["的本质是将架构思维外化为可执行的契约",{"2":{"180":1}}],["的本质",{"2":{"54":1}}],["的本质特征",{"2":{"51":1}}],["的本质区别与协作关系",{"2":{"155":1}}],["的本质区别",{"0":{"41":1,"122":1}}],["的下载与执行速度",{"2":{"25":1}}],["的",{"0":{"360":1,"526":1,"540":1},"1":{"527":1,"528":1,"529":1,"541":1,"542":1,"543":1},"2":{"23":2,"26":2,"34":1,"35":1,"47":2,"49":1,"53":3,"54":1,"63":1,"72":1,"74":1,"77":1,"87":1,"95":2,"98":1,"101":1,"117":1,"131":1,"135":1,"146":1,"153":3,"179":1,"180":1,"203":1,"233":1,"334":1,"339":1,"342":1,"344":1,"354":1,"366":1,"412":1,"418":1,"427":1,"428":1,"431":1,"439":1,"442":1,"443":1,"455":1,"470":1,"472":1,"482":1,"499":1,"509":3,"511":1,"525":1,"532":1,"536":1,"537":1,"540":1,"550":2,"551":1,"561":1,"564":1,"567":1,"654":1,"661":2,"663":1,"685":1,"712":1,"757":1,"786":1,"796":1,"831":1,"872":1,"917":1,"927":2,"935":1,"941":1,"951":1,"964":1,"965":1,"971":3,"975":1,"994":1,"1006":1}}],["的动态功能",{"2":{"16":1}}],["的核心优势",{"2":{"970":1}}],["的核心创新模块",{"2":{"946":1}}],["的核心数据容器",{"2":{"713":1}}],["的核心设计模式是插件化扩展",{"2":{"711":1}}],["的核心壁垒",{"2":{"550":1}}],["的核心枢纽",{"2":{"544":1}}],["的核心定位",{"2":{"492":1}}],["的核心交互入口是",{"2":{"482":1}}],["的核心规则是",{"2":{"470":1}}],["的核心在于构建了一个不断自修正的逻辑闭环",{"2":{"427":1}}],["的核心在于将",{"2":{"143":1}}],["的核心诉求在于",{"2":{"417":1}}],["的核心使命则是",{"2":{"417":1}}],["的核心从",{"2":{"367":1}}],["的核心指标是让用户感到满意的查询次数",{"2":{"350":1}}],["的核心语法我们可以看到",{"2":{"316":1}}],["的核心语法和最佳实践",{"2":{"293":1}}],["的核心",{"2":{"313":1}}],["的核心思想是让软件设计回归业务本质",{"2":{"277":1}}],["的核心理念",{"0":{"277":1}}],["的核心原理",{"2":{"141":1}}],["的核心价值在于上下文隔离",{"2":{"590":1}}],["的核心价值在于",{"2":{"417":1,"583":1}}],["的核心价值",{"2":{"67":1}}],["的核心价值是",{"2":{"20":1}}],["的核心能力可以归纳为五个维度",{"2":{"60":1}}],["的核心逻辑",{"2":{"48":1}}],["的核心工具",{"2":{"6":1}}],["的核心是",{"2":{"2":1,"201":1,"586":1}}],["服务提供商的工厂接口",{"2":{"913":1}}],["服务定位器",{"2":{"910":1}}],["服务专有",{"2":{"910":1}}],["服务业等",{"2":{"614":1}}],["服务状态",{"2":{"449":1}}],["服务于前端的后端",{"2":{"342":1,"344":2}}],["服务层",{"2":{"191":1,"275":2}}],["服务员先端上免费面包",{"2":{"77":1}}],["服务多",{"2":{"45":2}}],["服务较多",{"2":{"45":1}}],["服务少",{"2":{"45":2}}],["服务端默认",{"2":{"948":1}}],["服务端→客户端消息定义",{"2":{"939":1}}],["服务端开发",{"2":{"346":1}}],["服务端引擎",{"2":{"344":1}}],["服务端框架",{"2":{"344":2}}],["服务端和",{"2":{"326":1}}],["服务端复杂度",{"2":{"166":1}}],["服务端资源占用",{"2":{"166":1}}],["服务端可以第一时间将结果",{"2":{"164":1}}],["服务端释放连接",{"2":{"164":1}}],["服务端将请求挂起",{"2":{"163":1}}],["服务端内部去查库的间隔",{"2":{"163":1}}],["服务端实现",{"0":{"163":1}}],["服务端实现示例",{"0":{"139":1}}],["服务端返回",{"2":{"162":1}}],["服务端立刻结束挂起",{"2":{"162":1}}],["服务端立即返回静态",{"2":{"40":1}}],["服务端完全无状态",{"2":{"160":1}}],["服务端在执行耗时任务",{"2":{"158":1}}],["服务端在后台获取动态数据",{"2":{"75":1}}],["服务端层",{"2":{"155":1}}],["服务端需要管理连接的挂起与超时释放",{"2":{"163":1}}],["服务端需要按照",{"2":{"152":1}}],["服务端需要在响应头和数据格式上遵循特定规范",{"2":{"152":1}}],["服务端要点",{"0":{"152":1}}],["服务端的核心任务只有一个",{"2":{"151":1}}],["服务端只需要按",{"2":{"139":1}}],["服务端只需返回符合",{"2":{"139":1}}],["服务端已启动",{"2":{"139":1}}],["服务端通常会在请求中加入签名",{"2":{"121":1}}],["服务端据此可以实现数据的",{"2":{"110":1}}],["服务端必须积攒全部结果才能返回",{"2":{"104":1}}],["服务端必须在渲染前完成数据获取",{"2":{"57":1}}],["服务端状态管理",{"2":{"342":1}}],["服务端状态管理库",{"2":{"342":1}}],["服务端状态的管理往往缺乏统一且高效的解决方案",{"2":{"83":1}}],["服务端状态",{"2":{"83":1}}],["服务端后台获取数据",{"2":{"74":1}}],["服务端组件不向浏览器发送",{"2":{"60":1}}],["服务端直接",{"2":{"59":1}}],["服务端与客户端状态同步",{"2":{"59":1}}],["服务端与客户端使用了不同的日期",{"2":{"47":1}}],["服务端",{"2":{"45":1,"122":3,"159":1,"316":1,"439":1,"902":1,"939":1}}],["服务端每次请求渲染静态外壳",{"2":{"45":1}}],["服务端流式推送动态组件渲染结果",{"2":{"40":1}}],["服务端渲染架构",{"2":{"965":1}}],["服务端渲染生成静态图表图片",{"2":{"700":1}}],["服务端渲染的底层运作方式",{"2":{"56":1}}],["服务端渲染出的",{"2":{"47":1}}],["服务端渲染需要时间",{"2":{"45":1}}],["服务端渲染",{"0":{"57":1},"2":{"26":1,"45":1,"61":1,"171":1,"671":1,"706":1}}],["服务端仅返回基础",{"2":{"23":1}}],["服务器功能单元测试",{"2":{"980":1}}],["服务器测试",{"2":{"980":1}}],["服务器停止与资源回收",{"2":{"980":1}}],["服务器启动",{"2":{"980":1}}],["服务器无需修改即可使用",{"2":{"881":1}}],["服务器无需任何计算",{"2":{"30":1}}],["服务器端应用程序的框架",{"2":{"344":2}}],["服务器端",{"2":{"338":1}}],["服务器连接池资源相对充裕",{"2":{"167":1}}],["服务器资源敏感",{"2":{"167":1}}],["服务器是否有充裕的连接池资源",{"2":{"166":1}}],["服务器立即返回响应",{"2":{"162":1}}],["服务器收到请求后",{"2":{"162":1}}],["服务器会保持连接挂起",{"2":{"161":1}}],["服务器错误",{"2":{"144":1}}],["服务器如果发现任务没做完",{"2":{"162":1}}],["服务器如何识别并继续向重连后的客户端推送结果",{"2":{"127":1}}],["服务器如同一个被动的仓库管理员",{"2":{"103":1}}],["服务器与",{"2":{"126":1}}],["服务器与真正执行计算的",{"2":{"126":1}}],["服务器将任务投入",{"2":{"126":1}}],["服务器的并发连接池是有限的",{"2":{"125":1}}],["服务器必须为每一个",{"2":{"117":1}}],["服务器确认支持",{"2":{"114":1}}],["服务器向客户端推送事件",{"2":{"108":1}}],["服务器目前尚不清楚响应的总长度",{"2":{"105":1}}],["服务器也无法将新信息触达用户",{"2":{"103":1}}],["服务器之间的数据传输",{"2":{"102":1}}],["服务器实时日志",{"2":{"131":1}}],["服务器实时生成",{"2":{"63":1}}],["服务器实时渲染",{"2":{"35":1}}],["服务器实时渲染一次",{"2":{"35":1}}],["服务器",{"2":{"53":1,"71":1,"763":1,"781":1,"980":1}}],["服务器只是从文件系统读取对应的",{"2":{"51":1}}],["服务器只返回一个近乎空的",{"2":{"22":1}}],["服务器在浏览器中实时渲染设计概念",{"2":{"987":1}}],["服务器在物理上彼此隔离",{"2":{"126":1}}],["服务器在处理完成后返回完整的响应",{"2":{"103":1}}],["服务器在后台继续执行被",{"2":{"74":1}}],["服务器在运行时不需要执行任何应用代码",{"2":{"51":1}}],["服务器在接收到请求时",{"2":{"27":1}}],["服务器打工",{"2":{"45":1}}],["服务器压力",{"2":{"45":1}}],["服务器接收请求",{"2":{"27":1}}],["服务器接收并处理该请求",{"2":{"21":1}}],["服务器返回的响应头和数据体需遵循以下规范",{"2":{"136":1}}],["服务器返回的",{"2":{"26":1}}],["服务器返回",{"2":{"23":1}}],["服务器依赖",{"2":{"3":1}}],["服务",{"0":{"8":1},"2":{"4":1,"8":1,"274":1,"338":1,"520":1,"548":1,"650":2,"849":1,"850":1,"851":1,"901":1,"906":1}}],["snake",{"2":{"994":1}}],["snap吸附",{"2":{"819":1}}],["snap",{"2":{"818":1}}],["snapshotoptions",{"2":{"865":1}}],["snapshot│",{"2":{"858":1}}],["snapshotformatter",{"2":{"851":1}}],["snapshot",{"2":{"667":1,"849":1,"851":1,"856":1,"858":2,"865":1,"951":1}}],["sync",{"2":{"819":1,"834":1,"979":1,"980":3}}],["symbolsize",{"2":{"715":1}}],["symbol",{"2":{"706":1,"708":1,"715":1,"790":3}}],["systematic",{"2":{"979":1,"980":1,"982":1,"992":1,"995":2}}],["systemtheme",{"2":{"647":1}}],["systemprompt",{"2":{"482":1}}],["systems",{"2":{"467":1}}],["systemjs",{"2":{"203":1}}],["system",{"0":{"415":1,"504":1,"506":1,"652":1,"654":1,"656":1,"711":1,"713":1,"714":1,"768":1,"771":1,"772":1,"948":1,"985":1},"1":{"416":1,"505":1,"507":2,"508":2},"2":{"131":1,"203":1,"415":1,"438":1,"443":1,"486":2,"496":1,"503":1,"509":1,"646":9,"650":2,"653":1,"654":1,"656":2,"705":1,"711":1,"714":1,"741":2,"744":1,"761":1,"762":1,"770":1,"785":1,"790":2,"913":1,"915":1,"918":1,"926":1,"938":1,"941":1,"948":2,"962":1,"964":1,"980":1}}],["sys",{"2":{"14":2}}],["square",{"2":{"692":1,"839":1}}],["sqliang",{"2":{"1004":1}}],["sqlcreate",{"2":{"16":1}}],["sql",{"2":{"3":1,"16":1,"301":2,"403":1,"555":1,"557":1,"586":1}}],["svg路径跟随运动",{"2":{"819":1}}],["svg工具",{"2":{"819":1}}],["svg描边动画",{"2":{"819":1}}],["svgns",{"2":{"735":1}}],["svgnostyledata",{"2":{"735":1}}],["svgprolevelsfilter",{"2":{"735":1}}],["svgmatte3effect",{"2":{"735":1}}],["svggaussianblureffect",{"2":{"735":1}}],["svggradientstrokestyledata",{"2":{"735":1}}],["svggradientfillstyledata",{"2":{"735":1}}],["svgfillfilter",{"2":{"735":1}}],["svgfillstyledata",{"2":{"735":1}}],["svgdropshadoweffect",{"2":{"735":1}}],["svgcomposableeffect",{"2":{"735":1}}],["svgcompelement",{"2":{"734":1,"735":1,"741":2}}],["svgbaseelement",{"2":{"735":1}}],["svgtritonefilter",{"2":{"735":1}}],["svgtransformeffect",{"2":{"735":1}}],["svgtransformdata",{"2":{"735":1}}],["svgtinteffect",{"2":{"735":1}}],["svgtextelement",{"2":{"734":1,"735":1}}],["svgelement",{"2":{"741":1}}],["svgelements",{"2":{"735":1,"737":1}}],["svgelementsrenderer",{"2":{"735":1}}],["svgeffectsplaceholder",{"2":{"735":1}}],["svgeffects",{"2":{"734":1,"735":1,"737":1}}],["svgstrokeeffect",{"2":{"735":1}}],["svgstrokestyledata",{"2":{"735":1}}],["svgstyledata",{"2":{"735":1}}],["svgshapeelement",{"2":{"735":1}}],["svgshapeelement|",{"2":{"734":1}}],["svgshapedata",{"2":{"735":1}}],["svgsolidelement|",{"2":{"734":1}}],["svgimageelement|",{"2":{"734":1}}],["svgrendererconfig",{"2":{"750":1}}],["svgrendererbase",{"2":{"735":1}}],["svgrenderer",{"2":{"734":1,"735":1,"737":1,"741":3}}],["svg",{"2":{"643":1,"677":2,"699":1,"700":1,"701":3,"704":1,"705":1,"706":1,"719":1,"728":2,"730":3,"731":1,"733":1,"734":2,"735":28,"737":4,"738":1,"741":1,"746":1,"749":1,"750":2,"751":5,"754":1,"755":2,"763":1,"784":1,"790":4,"812":2,"814":2,"817":1,"818":2,"819":3,"821":1,"939":1,"980":1}}],["svelte",{"2":{"91":1,"339":2,"345":1,"901":1,"904":1,"906":2,"907":1,"908":2,"961":3,"965":1,"980":2}}],["sveltekit",{"2":{"26":1}}],["sft",{"2":{"551":1}}],["sfc",{"2":{"53":1,"961":1,"965":2}}],["sge",{"2":{"518":1}}],["s",{"2":{"238":2,"749":1}}],["sky",{"2":{"962":1}}],["skewy",{"2":{"682":2}}],["skewx",{"2":{"682":2}}],["skeleton",{"2":{"88":1,"763":1}}],["skinnedmesh",{"2":{"763":1,"766":1,"769":1}}],["skia",{"2":{"670":1,"672":1,"673":2,"677":3}}],["skillmetadata",{"2":{"994":2}}],["skillfound",{"2":{"986":1}}],["skill3",{"2":{"506":1}}],["skill2",{"2":{"506":1}}],["skill1",{"2":{"506":1}}],["skill描述",{"2":{"442":1}}],["skill",{"0":{"444":1,"450":1,"451":1,"452":1,"547":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"453":1,"454":1,"455":1},"2":{"437":1,"438":1,"442":6,"443":6,"444":5,"445":1,"448":3,"450":2,"451":1,"452":1,"454":2,"456":1,"470":1,"472":1,"491":2,"547":3,"570":3,"586":2,"588":1,"592":1,"851":1,"978":1,"979":4,"980":17,"982":17,"983":11,"985":1,"986":5,"987":1,"988":1,"989":1,"994":6,"995":1}}],["skillsv4",{"2":{"907":2,"925":1}}],["skills",{"0":{"436":1,"441":1,"584":1,"592":1},"1":{"585":1,"586":1,"587":1,"588":1},"2":{"434":1,"435":1,"436":2,"437":2,"438":2,"439":4,"440":1,"441":6,"442":3,"456":4,"470":3,"506":1,"509":1,"547":1,"552":1,"570":5,"584":1,"585":1,"586":1,"588":1,"590":1,"592":1,"597":2,"846":1,"851":1,"916":1,"925":1,"973":1,"978":1,"979":3,"980":3,"982":3,"983":1,"986":1,"995":1}}],["skipstroke",{"2":{"692":1}}],["skipshadow",{"2":{"692":1}}],["skiptransform",{"2":{"692":2}}],["skip",{"2":{"482":1}}],["skiplibcheck",{"2":{"203":1,"204":1,"212":1,"322":1}}],["skipdefaultlibcheck",{"2":{"203":1}}],["shutdown",{"2":{"860":2,"866":1}}],["shnpm",{"2":{"809":1}}],["shrinkwrap",{"0":{"803":1},"2":{"784":1,"790":1,"798":1,"803":1,"810":1}}],["shower",{"2":{"790":1}}],["showloading",{"2":{"719":1}}],["shot",{"2":{"367":1}}],["should",{"2":{"223":2,"865":1,"988":1}}],["sheen",{"2":{"763":1,"771":1}}],["sheet",{"2":{"647":1}}],["sheets",{"2":{"338":1}}],["shellindex",{"2":{"886":1}}],["shellfetch",{"2":{"882":1}}],["shell>",{"2":{"855":1}}],["shellopencli",{"2":{"851":1}}],["shellpretext",{"2":{"790":1}}],["shellproject",{"2":{"280":1}}],["shellthree",{"2":{"763":1}}],["shelllottie",{"2":{"735":1}}],["shellecharts",{"2":{"706":1}}],["shella2ui",{"2":{"939":1}}],["shellai",{"2":{"908":1}}],["shellanime",{"2":{"819":1}}],["shellamis",{"2":{"647":1}}],["shellapp",{"2":{"67":1}}],["shellmicro",{"2":{"290":1}}],["shellmonorepo",{"2":{"211":1}}],["shellsrc",{"2":{"190":1,"191":1,"274":1,"275":1,"882":1}}],["shell",{"2":{"40":1,"553":1,"567":2,"568":1,"722":1,"723":1,"726":1,"851":1,"939":4,"975":1,"980":1}}],["sh",{"2":{"290":3,"677":1,"808":1,"939":1,"979":2,"980":29,"987":2}}],["shippingaddress",{"2":{"281":1}}],["shading",{"0":{"770":1},"2":{"770":1}}],["shadercode",{"2":{"766":1}}],["shaderchunk拼接",{"2":{"771":1}}],["shaderchunk",{"2":{"763":1,"765":1,"771":1}}],["shadernode",{"2":{"766":1}}],["shaderlib",{"2":{"763":1,"765":1,"771":1}}],["shaders",{"2":{"763":2,"768":2}}],["shadermaterial",{"2":{"763":1,"771":2}}],["shader",{"2":{"762":1,"763":1,"777":2}}],["shadcn",{"2":{"340":2,"561":1,"562":1,"963":1,"964":1}}],["shadowmaterial",{"2":{"763":1}}],["shadowforstrokeenabled",{"2":{"692":1}}],["shadowopacity",{"2":{"692":1}}],["shadowoffsety",{"2":{"692":1}}],["shadowoffsetx",{"2":{"692":1}}],["shadowoffset",{"2":{"692":1}}],["shadowenabled",{"2":{"692":1}}],["shadowblur",{"2":{"692":1}}],["shadowcolor",{"2":{"686":1,"692":1}}],["shadow",{"2":{"286":1,"291":1,"763":1,"768":1,"769":1}}],["shaking",{"2":{"307":1,"308":1,"311":1,"316":1,"318":1,"672":1,"673":1,"701":1,"731":1,"758":1,"759":2,"785":1,"814":1,"815":1,"841":1,"962":1,"963":1}}],["shapeutils",{"2":{"763":1}}],["shapedata",{"2":{"749":1}}],["shapemodifier",{"2":{"738":2,"744":2}}],["shapemodifiers",{"0":{"744":1},"2":{"734":1,"735":1,"737":1,"744":3}}],["shapeproperty",{"2":{"735":1,"737":1}}],["shapepathbuilder",{"2":{"735":1}}],["shapepath",{"2":{"735":1,"744":1}}],["shapepathinterface",{"2":{"735":1}}],["shapeparams",{"2":{"677":1}}],["shapecollection",{"2":{"735":2}}],["shapeconfighandler",{"2":{"692":2}}],["shapeconfig",{"2":{"692":3}}],["shapeenums",{"2":{"735":1}}],["shapeelement",{"2":{"734":1,"735":2}}],["shapeinterface",{"2":{"735":1,"742":2}}],["shapetransformmanager",{"2":{"735":1}}],["shapegroupdata",{"2":{"735":1}}],["shape>",{"2":{"692":3,"693":2}}],["shapes",{"2":{"677":2,"679":2,"735":3,"737":2,"744":2,"749":1,"763":1}}],["shape",{"0":{"683":1,"688":1},"2":{"230":12,"231":1,"232":10,"672":1,"675":2,"676":2,"677":3,"679":1,"680":8,"683":6,"688":1,"692":6,"693":17,"706":1,"735":2,"742":1,"743":1,"744":2,"851":2}}],["sharedstore",{"2":{"289":5}}],["shared",{"0":{"213":1},"2":{"203":2,"205":1,"210":1,"211":1,"214":2,"215":2,"216":7,"237":6,"242":4,"280":3,"288":3,"289":6,"290":2,"291":1,"315":9,"335":1,"790":2,"851":3,"939":1}}],["srgb",{"2":{"763":1}}],["src=",{"2":{"696":1,"754":1}}],["src",{"0":{"858":1,"859":1,"860":1},"2":{"203":12,"204":5,"211":3,"213":2,"214":2,"215":2,"216":2,"222":3,"223":2,"280":2,"281":8,"288":6,"290":7,"312":1,"576":4,"583":1,"647":9,"649":4,"677":1,"706":2,"713":1,"763":1,"777":1,"790":1,"819":1,"821":22,"836":2,"840":1,"849":1,"850":1,"851":5,"882":1,"889":3,"909":6,"912":5,"931":5,"939":6,"962":1}}],["srp",{"2":{"170":1}}],["slot>",{"2":{"961":1}}],["slot>默认按钮",{"2":{"961":1}}],["slotmanager",{"2":{"735":1,"741":1}}],["slidereffect",{"2":{"735":1}}],["slider",{"2":{"706":1,"939":1}}],["slices",{"2":{"274":2}}],["slice",{"2":{"141":1,"143":2}}],["sla",{"2":{"520":1}}],["slack",{"2":{"417":2,"439":1}}],["slug",{"2":{"14":5,"15":7,"65":1}}],["sphericalharmonics3",{"2":{"763":1}}],["spherical",{"2":{"763":1}}],["sphere",{"2":{"763":1}}],["spheregeometry",{"2":{"763":1}}],["spotlight",{"2":{"763":1}}],["spline等",{"2":{"763":1}}],["splittext",{"2":{"819":2,"821":1,"841":1}}],["splitting",{"2":{"313":1}}],["splitcjkgraphemes",{"2":{"795":1}}],["split",{"2":{"141":1,"143":1,"818":1,"819":1}}],["speechmodelv4",{"2":{"925":1}}],["speechmodel",{"2":{"907":1,"925":1}}],["speech",{"2":{"907":1,"916":1}}],["speed",{"2":{"750":1,"818":1,"824":2,"825":1,"826":2,"834":2}}],["specpath",{"2":{"994":1}}],["specversion",{"2":{"939":1}}],["specialareas",{"2":{"720":1}}],["specific",{"2":{"941":1}}],["specificity",{"2":{"391":1}}],["specificationversion",{"2":{"925":2}}],["specification",{"2":{"169":1,"171":1,"176":1,"177":1,"440":1,"532":1,"938":2,"939":2}}],["specs",{"2":{"448":1,"980":1}}],["spec|test",{"2":{"222":1}}],["spec",{"2":{"179":1,"203":2,"204":1,"451":4,"542":2,"667":1,"720":1,"882":2,"906":2,"907":1,"939":1,"980":2,"983":3,"988":2,"1000":1}}],["spritematerial",{"2":{"763":1}}],["spriteconfig>",{"2":{"693":1}}],["spritesheet",{"2":{"677":1}}],["sprite",{"2":{"677":1,"679":1,"680":1,"693":1,"763":1,"766":1}}],["springparams",{"2":{"835":1}}],["spring",{"2":{"344":2,"818":1,"819":2,"821":2,"835":1,"841":2}}],["span",{"2":{"790":1}}],["spatial",{"2":{"676":1}}],["spacing",{"2":{"274":1,"647":1,"790":4,"797":2}}],["space",{"2":{"14":5,"16":1,"795":2,"797":2,"799":1,"805":3}}],["spa",{"2":{"22":1,"59":1,"62":1,"72":1,"81":1,"286":1,"287":3,"341":2,"342":1,"344":1,"662":1}}],["s3",{"2":{"126":1}}],["sdf",{"2":{"763":1}}],["sdxl",{"2":{"130":1}}],["sdd",{"0":{"176":1,"177":1,"178":1,"179":1,"532":1},"1":{"177":1,"178":1,"179":1},"2":{"98":1,"176":1,"177":2,"178":4,"179":3,"180":1,"525":1,"532":1,"980":6}}],["sdks",{"2":{"938":1,"939":1}}],["sdkusermessage>",{"2":{"482":1,"483":1}}],["sdk",{"0":{"478":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1},"2":{"13":2,"467":2,"470":1,"476":1,"477":3,"478":4,"480":1,"481":1,"482":2,"483":1,"485":1,"487":1,"488":2,"491":3,"494":1,"523":3,"545":1,"671":1,"901":4,"902":2,"904":1,"906":7,"907":11,"908":1,"912":2,"915":1,"916":1,"917":1,"922":1,"926":1,"931":1,"933":1,"936":4,"938":3,"939":9,"941":1,"976":1,"985":1,"994":1}}],["scrapeschemabehavior",{"2":{"946":2}}],["scrambletext",{"2":{"819":2,"821":1}}],["scramble",{"2":{"818":1,"819":1}}],["screenshotoptions",{"2":{"865":1}}],["screenshot",{"2":{"865":1}}],["screenshots",{"2":{"763":1}}],["scrollto",{"2":{"865":1}}],["scrollobserver",{"2":{"819":1,"822":2,"834":1}}],["scroll",{"2":{"706":1,"818":1,"819":1,"865":1}}],["script>",{"2":{"696":3,"754":1,"961":1}}],["scripts",{"2":{"224":1,"290":1,"441":1,"442":3,"443":3,"449":1,"647":2,"790":1,"851":1,"939":4,"979":1,"980":2,"987":5}}],["script",{"2":{"53":1,"72":1,"297":1,"320":1,"696":1,"754":1,"851":1,"961":1}}],["scaffold",{"2":{"851":1}}],["scan",{"2":{"790":1}}],["scalar",{"2":{"743":2}}],["scaledatavalue",{"2":{"719":2}}],["scale",{"2":{"692":1,"706":2,"766":2,"769":1,"777":1}}],["scaley",{"2":{"682":2,"692":1}}],["scalex",{"2":{"682":2,"692":1}}],["scatterview",{"2":{"706":1}}],["scatterseries",{"2":{"706":1}}],["scatter",{"2":{"706":2}}],["scheduledtime",{"2":{"824":1,"834":1}}],["schedulercore",{"2":{"719":1}}],["scheduler",{"0":{"712":1},"2":{"704":1,"705":2,"706":1,"708":3,"709":1,"712":1}}],["schemamanager",{"2":{"941":1}}],["schemaminimal",{"2":{"646":1,"647":1}}],["schemas",{"2":{"778":9,"952":3}}],["schemanode",{"2":{"661":1}}],["schemaextend",{"2":{"647":1}}],["schemarenderer",{"2":{"646":1,"647":2,"649":3,"650":1,"652":1}}],["schemafull",{"2":{"646":1,"647":1}}],["schema",{"0":{"952":1},"2":{"274":1,"342":4,"374":1,"482":2,"587":1,"592":1,"640":3,"641":1,"645":3,"646":2,"647":13,"649":6,"650":2,"652":3,"656":2,"658":2,"661":4,"662":2,"668":3,"713":1,"735":1,"866":9,"906":2,"907":1,"913":1,"915":1,"922":1,"925":3,"935":2,"936":2,"938":2,"939":15,"942":3,"946":6,"948":4}}],["scenes",{"2":{"763":1}}],["scenefunc",{"2":{"677":1,"680":2,"683":4,"692":1}}],["scenecontext",{"2":{"676":1,"677":1,"680":1,"692":3}}],["scenecanvas+hitcanvas",{"2":{"677":1}}],["scenecanvas",{"2":{"675":1,"676":1,"677":1,"680":2,"683":1,"684":1,"692":3}}],["scene",{"0":{"769":1},"2":{"675":1,"676":2,"679":1,"761":1,"762":4,"763":1,"765":1,"766":1,"774":1,"777":4,"778":2,"782":5}}],["scss",{"2":{"642":1,"643":1,"645":1,"646":1,"647":3,"958":4,"964":1,"965":6,"968":5,"969":1,"970":1,"971":6}}],["scopeparams",{"2":{"835":1}}],["scope类",{"2":{"819":1}}],["scope管理",{"2":{"819":1}}],["scoped>",{"2":{"961":1,"965":1}}],["scopedrootrenderer",{"2":{"647":1,"649":2}}],["scoped",{"0":{"961":1},"2":{"646":2,"647":1,"652":1,"654":1,"661":1,"957":1,"961":5,"965":5,"968":1,"970":1,"971":4}}],["scope",{"2":{"451":3,"581":1,"652":2,"653":1,"661":1,"817":1,"818":3,"819":3,"821":4,"822":2,"825":1,"835":2}}],["scope>",{"2":{"451":1}}],["score>60",{"2":{"655":1}}],["score",{"2":{"95":2,"655":2}}],["socratic",{"2":{"987":1}}],["sociality",{"2":{"402":1}}],["socialaccounts",{"2":{"184":1}}],["softreset",{"2":{"834":1}}],["soft",{"2":{"795":1,"797":2,"805":1}}],["softdeletable",{"2":{"248":3}}],["sounds",{"2":{"763":1}}],["sources",{"2":{"790":1}}],["sourceformat",{"2":{"713":1}}],["sourcemanager",{"2":{"706":1,"713":1}}],["sourcemap",{"2":{"203":1,"204":2}}],["source",{"0":{"142":1},"2":{"106":1,"131":1,"135":1,"142":2,"143":1,"144":1,"145":1,"146":1,"149":1,"150":1,"155":1,"203":1,"217":1,"226":1,"636":1,"702":1,"706":1,"713":3,"763":1,"777":1,"865":1,"872":1,"877":1,"882":1,"885":1}}],["some",{"2":{"582":2}}],["somenamedexport",{"2":{"311":1}}],["solarize",{"2":{"677":1,"679":1}}],["solo",{"2":{"557":1,"564":1,"565":1}}],["solidelement",{"2":{"735":1}}],["solid",{"2":{"91":1}}],["sonagi",{"2":{"790":1}}],["sonar",{"2":{"353":1}}],["sonnet",{"2":{"481":2,"521":1,"523":1,"581":1,"591":1}}],["sop",{"2":{"454":1,"494":1}}],["sortedpeoplestr",{"2":{"267":1}}],["sortandserialize",{"2":{"267":2}}],["sort",{"2":{"95":1,"267":1,"706":1}}],["sweep",{"2":{"790":3}}],["swagger",{"2":{"275":1,"342":1}}],["swiftui",{"2":{"935":1}}],["swim",{"2":{"229":1}}],["switch",{"2":{"143":1,"147":1,"150":1,"203":1,"230":1,"231":1,"232":2,"289":1,"654":1,"741":1}}],["switching",{"2":{"114":1,"393":1}}],["swc",{"2":{"85":1,"100":1,"343":1,"642":1}}],["swr",{"0":{"78":1,"84":1,"97":1,"100":1},"1":{"85":1,"86":1,"87":1,"88":1,"89":1,"98":1,"99":1,"100":1,"101":1},"2":{"78":1,"83":1,"85":8,"87":4,"88":5,"89":2,"92":1,"97":1,"98":4,"99":1,"100":1,"342":5}}],["std",{"2":{"985":1}}],["stdout",{"2":{"488":2,"489":1}}],["stiffness",{"2":{"819":1,"835":1}}],["stealth",{"2":{"851":1,"858":1}}],["stencil",{"2":{"777":1}}],["stencilzpass",{"2":{"777":1}}],["stencilzfail",{"2":{"777":1}}],["stencilop",{"2":{"777":3}}],["stencilfail",{"2":{"777":1}}],["stencilfuncmask",{"2":{"777":1}}],["stencilfunc",{"2":{"777":2}}],["stencilref",{"2":{"777":1}}],["stencilwritemask",{"2":{"777":1}}],["stencilwrite",{"2":{"777":1}}],["stereo",{"2":{"763":1}}],["stereocamera",{"2":{"763":1}}],["steptimeoutms",{"2":{"915":1}}],["step",{"2":{"915":3,"918":2}}],["stepcount",{"2":{"915":2}}],["steppreparedlinegeometry",{"2":{"797":2}}],["step=10",{"2":{"790":3}}],["step3",{"2":{"494":1}}],["step2",{"2":{"494":1}}],["step10",{"2":{"790":2}}],["step1",{"2":{"494":1}}],["steps",{"2":{"451":1,"819":2,"821":2,"851":1,"865":1,"915":1,"918":1}}],["stop>",{"2":{"986":1}}],["stopcondition",{"2":{"926":1}}],["stopwhen",{"2":{"910":1,"918":2,"926":1}}],["stopallaction",{"2":{"772":1}}],["stopped",{"2":{"740":2}}],["stop",{"2":{"692":1,"734":1,"740":2,"749":1,"750":1,"772":1,"797":1,"915":1,"918":1,"925":1,"980":1,"987":1}}],["stopsequences",{"2":{"925":1}}],["stops",{"2":{"482":1}}],["story",{"2":{"790":2}}],["stories",{"2":{"790":1}}],["storagetexture",{"2":{"763":1}}],["storage",{"2":{"274":1,"280":1,"939":1}}],["storeextendsdata",{"2":{"661":1}}],["storetype",{"2":{"661":1,"663":1}}],["storenode",{"2":{"650":1}}],["store",{"0":{"653":1,"663":1},"2":{"82":1,"85":1,"92":3,"274":3,"289":3,"290":1,"341":1,"645":1,"646":2,"647":9,"649":5,"650":15,"652":4,"653":6,"654":3,"656":2,"658":1,"661":4,"663":9,"939":2}}],["stylus",{"2":{"958":1}}],["styling",{"0":{"340":1}}],["style>",{"2":{"961":1}}],["styledbutton>",{"2":{"959":2}}],["styledbutton>默认按钮",{"2":{"959":1}}],["styledbutton",{"2":{"959":2}}],["styled",{"2":{"959":4,"965":2}}],["style动画",{"2":{"819":1}}],["stylesheets",{"2":{"939":1}}],["styles",{"2":{"274":2,"313":1,"818":1,"819":1,"939":2,"960":4,"971":1}}],["style",{"2":{"53":1,"338":1,"451":1,"570":1,"572":1,"575":1,"581":1,"647":1,"706":1,"708":1,"715":1,"822":1,"827":2,"959":1,"961":4,"965":3,"968":1}}],["studentcontroller",{"2":{"190":1,"191":1}}],["studentrepository",{"2":{"190":1}}],["studentservice",{"2":{"190":1,"191":1}}],["student",{"2":{"190":1}}],["starconfig>",{"2":{"693":1}}],["star",{"2":{"677":1,"679":1,"693":1}}],["startup|clear|compact",{"2":{"994":1}}],["startup|clear",{"2":{"985":1}}],["startnetworkcapture",{"2":{"865":1}}],["starttime",{"2":{"824":1,"826":1,"834":2}}],["starts",{"2":{"793":1,"795":1,"805":1}}],["startswith",{"2":{"141":1}}],["start",{"2":{"290":1,"666":1,"686":2,"692":1,"695":1,"697":1,"781":1,"792":1,"793":2,"805":2,"806":3,"808":1,"835":2,"979":1,"980":2,"982":2,"985":2,"987":1}}],["started",{"2":{"53":1}}],["staggerfunction",{"2":{"835":3}}],["stagger",{"2":{"818":1,"819":3,"821":2,"835":1,"839":2}}],["staging",{"2":{"581":1,"583":1,"594":1}}],["stagehandler",{"2":{"709":1,"720":3}}],["stageconfig",{"2":{"692":1}}],["stages",{"2":{"684":1,"705":2}}],["staged",{"2":{"581":3}}],["stage",{"0":{"324":1,"684":1},"2":{"464":3,"672":1,"675":2,"676":2,"677":1,"679":2,"680":5,"684":4,"692":2,"693":1,"696":3,"704":1,"708":2,"715":1,"770":3}}],["standardsessionstartoutput",{"2":{"994":2}}],["standardizeprompt",{"2":{"912":1,"915":1}}],["standard",{"2":{"482":1}}],["standalone",{"2":{"82":1,"750":1,"936":1,"939":1}}],["stackblitz",{"2":{"561":1}}],["stack=",{"2":{"554":2,"1001":2}}],["stack",{"0":{"458":1,"463":1,"464":1,"540":1,"558":2},"1":{"459":1,"460":1,"461":1,"462":1,"541":1,"542":1,"543":1},"2":{"256":1,"457":2,"458":2,"459":3,"463":2,"464":1,"465":1,"466":1,"467":1,"477":1,"540":1,"553":4,"554":1,"558":2,"677":1,"1000":1,"1001":2,"1002":4,"1003":1,"1004":1}}],["stable",{"2":{"123":1,"156":1,"523":1,"858":1,"865":2,"938":1}}],["statistics",{"2":{"705":1}}],["static",{"2":{"30":1,"34":1,"40":1,"63":2,"194":1,"261":1,"281":1,"692":1,"946":3}}],["stats",{"2":{"705":1}}],["statuscontrol",{"2":{"656":1}}],["statuscode",{"2":{"231":2}}],["statusscopedprops",{"2":{"661":1}}],["statusscoped",{"2":{"646":1}}],["status`",{"2":{"160":1,"164":1}}],["status",{"2":{"87":2,"92":1,"144":3,"153":1,"160":3,"163":5,"164":4,"229":2,"234":2,"260":2,"280":1,"281":8,"318":5,"790":6,"860":2,"866":2,"879":3,"925":1,"939":1,"994":1}}],["states",{"2":{"706":1}}],["state",{"0":{"173":1,"174":1},"2":{"83":2,"170":1,"171":1,"173":8,"174":5,"179":1,"256":1,"263":1,"289":7,"641":1,"642":1,"645":1,"653":1,"656":1,"768":1,"790":1,"938":1,"939":1,"947":2}}],["staletime",{"2":{"92":1,"94":1,"98":1}}],["stale",{"2":{"35":3,"78":1,"85":3,"98":1,"342":1}}],["structural",{"2":{"946":4}}],["stretch",{"2":{"819":1,"825":2,"834":1}}],["streamparserv09",{"2":{"947":1}}],["streamparserv08",{"2":{"947":1}}],["streamparser",{"2":{"941":1}}],["streamui",{"2":{"907":1}}],["streamtextresult",{"2":{"926":1}}],["streamtext",{"0":{"915":1,"923":1},"2":{"903":1,"906":2,"908":1,"910":1,"915":1,"917":1,"918":1,"923":2,"926":1}}],["streamtaskpost",{"2":{"154":1}}],["streamtask",{"2":{"153":1}}],["stream`",{"2":{"150":1}}],["streamended",{"2":{"148":3,"150":2}}],["stream",{"0":{"488":1},"2":{"105":1,"109":1,"134":1,"135":1,"136":1,"139":1,"141":3,"143":2,"144":1,"147":2,"148":1,"150":3,"152":1,"153":2,"154":2,"487":1,"488":1,"874":1,"879":1,"891":1,"898":3,"899":2,"907":4,"909":1,"917":1,"938":1,"939":1,"941":1}}],["streamable",{"0":{"104":1},"1":{"105":1,"106":1,"107":1},"2":{"104":1,"131":1}}],["streamingparser",{"2":{"939":1}}],["streamingparser|",{"2":{"938":1}}],["streaming",{"0":{"73":1,"74":1},"1":{"74":1,"75":1,"76":1,"77":1,"78":1},"2":{"40":1,"73":1,"74":2,"75":1,"80":1,"133":1,"488":1,"543":2,"925":1,"939":3}}],["strokeenabled",{"2":{"692":1}}],["strokehitenabled",{"2":{"692":1}}],["strokescaleenabled",{"2":{"692":1}}],["strokewidth",{"2":{"692":1,"696":1}}],["stroke",{"2":{"686":1,"692":1,"696":1,"819":2}}],["str",{"2":{"194":3,"262":2,"947":4,"948":4}}],["strategy",{"2":{"72":1,"451":1,"856":3,"859":2,"865":3,"939":1,"985":1}}],["strapi",{"2":{"9":1}}],["stripinternal",{"2":{"203":1}}],["stripe",{"2":{"8":1,"18":1,"120":1}}],["strictequality",{"2":{"203":1}}],["strictcallapply",{"2":{"203":1}}],["strictpropertyinitialization",{"2":{"203":1,"204":1}}],["strictfunctiontypes",{"2":{"203":1}}],["strictnullchecks",{"2":{"203":1,"204":1}}],["strict",{"2":{"203":3,"204":3,"212":1,"322":1,"882":1}}],["stringtonumber",{"2":{"262":1}}],["strings",{"2":{"261":1,"828":1}}],["stringcontainer",{"2":{"261":3}}],["stringresult",{"2":{"258":1}}],["stringkeys",{"2":{"234":1}}],["stringutils",{"2":{"194":1}}],["string>",{"2":{"160":1,"164":1,"184":1,"234":1,"247":1,"258":1,"261":1,"262":1,"263":1,"661":1,"662":2,"663":1,"865":1,"891":1,"898":2,"925":1}}],["stringify",{"2":{"96":1,"141":2,"144":1,"153":2,"154":1,"232":1,"878":1}}],["string",{"2":{"14":1,"15":1,"16":6,"87":2,"88":1,"95":1,"96":2,"98":1,"150":3,"153":4,"154":5,"160":2,"163":3,"164":2,"184":7,"185":9,"194":1,"200":1,"203":1,"227":4,"229":4,"231":6,"233":4,"234":5,"236":2,"237":8,"238":14,"239":2,"240":3,"242":2,"244":6,"247":5,"248":1,"249":1,"255":2,"258":1,"259":2,"260":2,"261":2,"262":5,"263":1,"265":1,"266":3,"267":5,"269":4,"274":1,"275":1,"280":1,"281":6,"288":2,"289":7,"318":3,"324":1,"482":8,"486":1,"489":3,"661":8,"662":12,"663":14,"692":12,"693":2,"719":15,"720":6,"749":20,"750":24,"763":1,"777":10,"793":3,"805":5,"806":5,"834":3,"835":1,"859":1,"865":50,"866":11,"891":1,"892":3,"898":5,"899":1,"925":17,"926":1,"944":1,"945":5,"948":1,"951":10,"952":11,"994":26,"995":2}}],["similar",{"2":{"926":1}}],["simplify",{"2":{"763":1}}],["simple",{"2":{"666":1,"706":1,"986":1}}],["sink",{"2":{"939":1}}],["sine",{"2":{"819":1}}],["sin",{"2":{"770":1}}],["sing",{"2":{"229":4}}],["singleaxis",{"2":{"706":1}}],["singleton",{"2":{"288":7,"301":2}}],["single",{"2":{"85":1,"286":1,"287":3,"706":1}}],["silent",{"2":{"719":1}}],["siliconflow",{"2":{"523":1}}],["signals",{"2":{"935":1,"936":2,"939":3,"942":1,"944":1,"945":4}}],["signal",{"2":{"146":1,"148":1,"149":3,"150":3,"878":2,"941":2,"942":1,"945":5,"951":2}}],["signinwithotp",{"2":{"16":1}}],["size=",{"2":{"964":1}}],["size",{"2":{"85":1,"98":1,"249":3,"790":1,"964":4}}],["site",{"2":{"30":1,"790":2,"856":2,"859":1,"865":1}}],["sidebar",{"2":{"274":1,"763":1}}],["side",{"2":{"22":1,"26":1,"63":2,"314":1,"771":1,"777":1}}],["smart",{"2":{"851":1}}],["smoke",{"2":{"790":1}}],["smooth",{"2":{"743":1}}],["smell",{"2":{"363":1}}],["sm",{"2":{"16":1,"249":1,"964":2}}],["suites",{"2":{"819":1,"939":1}}],["sunburstview",{"2":{"706":1}}],["sunburstseries",{"2":{"706":1}}],["sunburst",{"2":{"706":2}}],["sunk",{"2":{"393":1}}],["surfaceid",{"2":{"951":1,"952":8}}],["surface>",{"2":{"944":1}}],["surfacesmap",{"2":{"944":1}}],["surfacegroupmodel",{"2":{"941":2,"944":2}}],["surfacemodel",{"2":{"938":1,"939":1,"941":3,"944":1,"951":1}}],["surface",{"2":{"676":1,"938":2,"939":16,"941":1,"942":3,"944":1,"951":9,"952":6}}],["supported",{"2":{"948":1}}],["supportedcatalogids",{"2":{"948":3,"952":2}}],["supportedurls",{"2":{"925":1}}],["supports3d",{"2":{"741":1}}],["support",{"2":{"682":1,"885":1,"978":1,"979":1}}],["superpowers",{"0":{"986":1},"2":{"973":2,"974":1,"976":1,"978":2,"979":2,"980":4,"982":3,"983":2,"985":1,"986":3,"987":1,"995":1,"998":4}}],["supervision",{"2":{"530":1}}],["super",{"2":{"231":1,"269":1}}],["supabase",{"0":{"16":1},"2":{"4":1,"8":1,"10":1,"11":1,"13":3,"15":1,"16":16,"18":2,"561":1,"562":1}}],["successresult",{"2":{"262":2}}],["success",{"2":{"196":1,"197":1,"229":2,"234":2,"246":7,"260":3,"262":3,"288":1,"451":1,"662":1}}],["summary",{"2":{"472":1,"474":1,"866":6}}],["sum",{"2":{"187":3,"223":1,"281":2,"310":3,"805":1}}],["suspense>",{"2":{"74":2,"288":4}}],["suspense",{"0":{"73":1,"74":1},"1":{"74":1,"75":1,"76":1,"77":1,"78":1},"2":{"66":1,"73":1,"74":7,"75":1,"77":1,"288":5}}],["subarray",{"2":{"892":1}}],["subagent的设计思路",{"2":{"470":1}}],["subagents",{"0":{"438":1},"2":{"434":1,"438":4,"440":1,"980":1}}],["subagent",{"0":{"988":1},"2":{"415":5,"416":1,"438":3,"978":1,"979":1,"980":6,"982":1,"983":4,"986":1,"988":2,"991":1,"995":2,"999":1}}],["subcmd>",{"2":{"855":2}}],["subpath",{"2":{"663":1}}],["subtypedefaulter",{"2":{"706":1,"720":1}}],["subtype",{"2":{"486":1,"705":1,"706":1}}],["subtract",{"2":{"223":5,"295":3,"304":3,"307":2,"310":3,"321":1}}],["subject",{"2":{"154":2,"451":1}}],["sub",{"0":{"302":1},"2":{"117":1,"163":1,"167":1,"939":1}}],["subscribedynamicvalue",{"2":{"946":2}}],["subscribe",{"2":{"92":1,"150":1,"941":1,"945":1,"946":1,"951":2}}],["subscriptions",{"2":{"945":1}}],["subscription",{"2":{"16":2,"951":2}}],["submitted",{"2":{"925":1}}],["submitting",{"2":{"663":1}}],["submit",{"2":{"16":1,"663":1,"668":1}}],["sass",{"2":{"958":1,"960":1,"965":1}}],["sample",{"2":{"939":2}}],["samples",{"2":{"939":1,"955":1}}],["same",{"2":{"561":1,"562":2}}],["safe",{"2":{"865":1}}],["safari",{"2":{"338":1,"786":1,"790":7,"796":4,"805":1}}],["sanitizepropertyname",{"2":{"819":1}}],["sanitizeprop",{"2":{"818":1}}],["sanity",{"2":{"9":1}}],["sankeyview",{"2":{"706":1}}],["sankeyseries",{"2":{"706":1}}],["sankey",{"2":{"706":2}}],["sandbox",{"2":{"677":1}}],["saveremote",{"2":{"654":1}}],["saveasimage",{"2":{"706":1}}],["saveas",{"2":{"654":3}}],["saveduser",{"2":{"269":1}}],["savetodatabase",{"2":{"269":3}}],["save",{"2":{"101":1,"221":2,"281":3}}],["saas",{"2":{"4":1,"6":1,"80":1,"342":2,"344":1,"439":1,"639":1,"640":1,"700":1,"965":1,"966":1}}],["seg",{"2":{"796":2,"798":1}}],["seglevels",{"2":{"793":1}}],["segmentindex",{"2":{"799":1,"805":2}}],["segmentmetriccaches",{"2":{"796":1}}],["segmentmetrics",{"2":{"793":1,"796":1,"805":1}}],["segmentbreakkind",{"2":{"793":2,"805":2}}],["segment",{"2":{"792":2,"796":1,"798":1,"805":1}}],["segmenter|",{"2":{"789":1}}],["segmenter",{"2":{"785":1,"789":1,"790":1,"792":3,"795":2,"798":1}}],["segmentpos",{"2":{"749":1}}],["segmentstart",{"2":{"750":1}}],["segments",{"2":{"735":1,"749":1,"793":2,"795":1}}],["seedrandom",{"2":{"735":1,"742":1}}],["seeds",{"2":{"275":1}}],["seek",{"2":{"692":1,"818":1,"819":1,"825":2,"834":1}}],["sepia",{"2":{"677":1,"679":1}}],["secrets",{"2":{"594":1,"595":1}}],["security",{"2":{"570":2,"575":1,"578":1,"583":1,"586":3,"587":1,"588":1,"590":1,"591":1,"592":2,"763":1,"790":1,"882":1}}],["secondary",{"2":{"249":2,"964":1}}],["secondaryvariant",{"2":{"249":2}}],["searchextracompositions",{"2":{"749":1}}],["searchanimations",{"2":{"740":1,"750":1}}],["search",{"2":{"511":1,"518":2,"521":1,"546":1,"851":2,"916":1,"927":3}}],["searchbar",{"2":{"274":1}}],["seaborn",{"2":{"472":1}}],["semantic",{"2":{"966":1}}],["semver",{"2":{"331":2}}],["semibold",{"2":{"15":1,"16":1}}],["sellkonva",{"2":{"677":1}}],["self",{"2":{"306":1}}],["selecttab",{"2":{"865":1}}],["selector",{"2":{"692":2,"865":1}}],["selectors",{"2":{"274":1}}],["selectedapproach",{"2":{"994":1}}],["selectedproduct",{"2":{"289":1}}],["selected",{"2":{"289":3}}],["selectedmodel",{"2":{"74":2}}],["selectedmodelid=",{"2":{"74":1}}],["select",{"2":{"16":2,"95":4,"98":2,"706":1,"948":1}}],["serialjobexecutor",{"2":{"917":1}}],["serializable>",{"2":{"267":1}}],["serializable",{"2":{"267":6}}],["seriestype",{"2":{"720":1}}],["seriestask2",{"2":{"712":1}}],["seriestask1",{"2":{"712":1}}],["seriesuid",{"2":{"719":2}}],["seriessymboltask",{"2":{"706":1,"708":1,"715":1}}],["seriesstyletask",{"2":{"706":1,"708":1,"715":2}}],["seriesdatacore",{"2":{"719":1}}],["seriesdata",{"2":{"706":1,"709":3,"712":1,"713":2,"719":1}}],["seriesmodelclass",{"2":{"720":1}}],["seriesmodel|",{"2":{"711":1}}],["seriesmodel",{"2":{"704":1,"705":1,"706":1,"709":4,"712":2,"720":2}}],["series",{"2":{"702":1,"705":2,"706":3,"712":1,"724":1}}],["serve",{"2":{"697":1}}],["servers",{"2":{"866":1}}],["server",{"0":{"57":1,"60":1,"61":1,"108":1},"1":{"61":1,"62":1,"109":1,"110":1,"111":1,"112":1},"2":{"26":1,"45":8,"59":1,"62":5,"63":1,"67":1,"68":1,"80":2,"82":2,"83":1,"107":1,"126":1,"133":1,"139":2,"156":1,"344":2,"548":2,"763":1,"790":1,"860":2,"872":1,"898":3,"907":1,"908":1,"939":3,"965":1,"980":5,"987":3}}],["serverless",{"2":{"8":1,"19":1,"523":2,"555":1}}],["servicestore",{"2":{"646":1,"647":1,"650":3,"653":2,"663":1}}],["services",{"2":{"203":4,"274":1,"275":1,"280":4,"281":1,"288":3,"290":2}}],["service",{"2":{"191":1,"275":2,"280":5,"327":1,"330":2,"336":2,"647":1,"919":1}}],["sessionstartoutput",{"2":{"994":1}}],["sessionstart时强制注入",{"2":{"980":1}}],["sessionstart",{"2":{"975":1,"976":1,"978":1,"979":1,"980":3,"982":2,"983":3,"985":1,"986":1,"991":1,"994":2}}],["sessionstorage",{"2":{"274":1}}],["sessionid",{"2":{"486":3,"489":3}}],["session",{"2":{"117":1,"486":2,"653":1,"979":1,"980":1,"982":2,"983":3,"985":2}}],["sense=problem",{"2":{"367":2}}],["sense=empathy×critical",{"2":{"366":2}}],["sense=​complexity​​user",{"2":{"365":1}}],["sense=user",{"2":{"365":1}}],["sense",{"0":{"364":1,"530":1,"533":1,"541":1,"600":1},"1":{"365":1,"366":1,"367":1,"531":1,"532":1,"533":1},"2":{"363":3,"364":1,"365":3,"366":2,"367":6,"368":1,"369":1,"370":1,"371":1,"376":2,"389":1,"400":1,"492":1,"509":1,"525":1,"533":1,"540":1,"552":1,"558":1,"1000":2,"1001":1,"1002":1}}],["senddatamodel",{"2":{"944":1,"951":2,"952":1}}],["send",{"2":{"939":1}}],["sendmessage",{"2":{"917":1,"925":1}}],["sendorderconfirmation",{"2":{"281":1}}],["sendgrid",{"2":{"8":1}}],["sentry",{"2":{"455":3}}],["sent",{"0":{"108":1},"1":{"109":1,"110":1,"111":1,"112":1},"2":{"133":1,"156":1,"872":1,"898":3}}],["seo",{"0":{"70":1},"2":{"29":1,"45":2,"46":3,"47":1,"54":1,"55":1,"59":1,"63":2,"69":1,"70":2,"80":1,"82":1,"287":1,"344":3}}],["setfileinput",{"2":{"865":1}}],["setclearcolor",{"2":{"777":1}}],["setcomments",{"2":{"16":3}}],["setrendertarget",{"2":{"777":1}}],["setimmediate",{"2":{"826":1,"834":1}}],["setidprefix",{"2":{"750":2}}],["setinterval",{"2":{"139":1}}],["setlocale",{"2":{"789":1,"798":1,"806":1}}],["setlocationhref",{"2":{"750":1}}],["setlayers",{"2":{"692":1}}],["setquality",{"2":{"750":1}}],["setquerydata",{"2":{"96":2}}],["sethierarchy",{"2":{"749":1}}],["setdata",{"2":{"749":1}}],["setdirection",{"2":{"740":1,"750":1}}],["setdirty",{"2":{"712":1}}],["setvalue",{"2":{"772":1}}],["setvalues",{"2":{"663":1}}],["setvolume",{"2":{"740":1,"750":1}}],["setvisual",{"2":{"713":1,"719":1}}],["setecdata",{"2":{"706":1}}],["setemail",{"2":{"185":1}}],["setoptionoption",{"2":{"719":1}}],["setoption",{"2":{"704":1,"705":1,"706":2,"708":4,"712":1,"717":1,"719":1,"724":1}}],["setactivepage",{"2":{"865":1}}],["setanimationloop",{"2":{"777":1,"778":1,"782":1}}],["setasanimated",{"2":{"749":1}}],["setasparent",{"2":{"749":1}}],["setattr",{"2":{"682":1}}],["setaddress",{"2":{"184":1}}],["setsubframerendering",{"2":{"750":1}}],["setspeed",{"2":{"734":1,"740":1,"750":1}}],["setsize",{"2":{"692":1,"777":1,"782":1}}],["setselectedproduct",{"2":{"289":2}}],["setstate",{"2":{"85":1,"92":1,"175":1}}],["set",{"2":{"289":2,"685":1,"768":1,"777":1,"782":1,"818":1,"819":1,"821":1,"834":8,"919":1,"941":1,"945":2,"951":1}}],["setprojectinterface",{"2":{"749":1}}],["setproducts",{"2":{"288":2}}],["setparams",{"2":{"741":1,"749":1}}],["setpointerspositions",{"2":{"692":1}}],["setposition",{"2":{"686":1}}],["setphone",{"2":{"185":1}}],["setup>",{"2":{"961":1}}],["setupglobaldata",{"2":{"741":1,"749":1}}],["setup",{"2":{"274":1,"583":1,"762":1,"765":1,"770":4,"775":1,"777":1,"939":2,"980":1}}],["setuser",{"2":{"16":2}}],["setname",{"2":{"185":1}}],["setnewcomment",{"2":{"16":3}}],["settheme",{"2":{"951":1}}],["settlems",{"2":{"865":1}}],["setter生成",{"2":{"679":1}}],["setter",{"2":{"184":1,"185":1,"682":3,"685":5}}],["settime",{"2":{"686":1}}],["settimeout",{"2":{"160":3,"163":1,"164":1,"166":1,"330":1}}],["settings",{"0":{"593":1,"596":1},"1":{"594":1,"595":1,"596":1},"2":{"65":2,"570":4,"593":1,"596":3,"597":1}}],["ssot",{"2":{"178":1}}],["sseevent",{"2":{"153":2}}],["sse",{"0":{"108":1,"122":1,"136":1,"137":1,"154":1,"877":1},"1":{"109":1,"110":1,"111":1,"112":1,"138":1,"139":1},"2":{"19":1,"102":1,"106":3,"108":1,"109":1,"110":1,"111":1,"112":3,"113":1,"115":1,"118":1,"122":1,"123":1,"124":1,"126":1,"130":1,"131":4,"132":1,"133":1,"134":4,"135":12,"136":1,"137":2,"138":10,"139":4,"140":1,"141":5,"142":2,"143":4,"144":3,"145":1,"146":1,"147":1,"148":1,"150":5,"151":1,"152":3,"153":15,"154":2,"155":5,"156":2,"167":1,"872":1,"874":1,"877":1,"878":1,"879":1,"881":4,"882":2,"883":1,"892":1,"898":2}}],["ssr",{"0":{"26":1,"56":1},"1":{"27":1,"28":1,"29":1,"57":1,"58":1,"59":1},"2":{"6":2,"21":1,"26":1,"29":1,"34":2,"38":1,"40":2,"43":1,"45":4,"46":3,"47":7,"53":1,"54":3,"55":4,"56":1,"59":3,"63":3,"80":1,"81":1,"171":1,"344":5,"700":1,"701":1,"705":1,"706":2,"719":2,"959":1,"965":1}}],["ssg",{"0":{"6":1,"13":1,"15":1,"30":1,"48":1,"49":1},"1":{"31":1,"32":1,"33":1,"49":1,"50":2,"51":2,"52":2,"53":1,"54":1},"2":{"6":2,"11":1,"13":1,"15":1,"20":1,"21":1,"30":1,"33":1,"34":2,"35":1,"38":1,"43":1,"45":5,"46":2,"47":1,"48":2,"49":1,"51":1,"53":3,"54":11,"55":5,"59":1,"63":4,"80":1,"81":1,"344":5}}],["可做",{"2":{"1043":1}}],["可如果我们慢慢固化了",{"2":{"1042":1}}],["可人躺久了也会不自觉地想要尝试突破一下局限",{"2":{"1034":1}}],["可它也能是让人在其面前最无奈",{"2":{"1034":1}}],["可广泛应用的迭代实践套路",{"2":{"1027":1}}],["可现实生活中时间不会多么充裕",{"2":{"1026":1}}],["可分阶段来",{"2":{"1026":1}}],["可终究没有改变最终的结果",{"2":{"1016":1}}],["可插拔的停止条件和步骤准备",{"2":{"910":1}}],["可组合的中间件系统",{"2":{"903":1}}],["可配置重试间隔",{"2":{"889":1}}],["可连接任意",{"2":{"846":1}}],["可折叠空格",{"2":{"805":1}}],["可断行",{"2":{"805":1}}],["可变行宽",{"0":{"802":1},"2":{"806":1}}],["可变排版",{"2":{"790":2}}],["可替换的",{"2":{"874":1}}],["可替换",{"2":{"768":1}}],["可对内部元素添加事件监听",{"2":{"755":1}}],["可渲染网格",{"2":{"766":1}}],["可渲染对象",{"2":{"762":1}}],["可渲染元素基类",{"2":{"735":1}}],["可渲染",{"2":{"735":1,"763":1}}],["可根据业务场景灵活选择渲染方式",{"2":{"728":1}}],["可根据业务特性全局开启或关闭",{"2":{"94":1}}],["可定制的商业图表方案",{"2":{"700":1}}],["可定制扩展",{"2":{"568":1}}],["可递归嵌套",{"2":{"680":1}}],["可绑定多个",{"2":{"661":1}}],["可见对象收集",{"2":{"768":1}}],["可见性与渲染",{"2":{"777":1}}],["可见性判断",{"2":{"768":1,"774":1}}],["可见性裁剪",{"2":{"762":1,"768":2}}],["可见性控制",{"2":{"646":1}}],["可见绘制",{"2":{"677":1,"683":1}}],["可见障碍",{"2":{"556":1}}],["可控的",{"2":{"968":1}}],["可控的闭环",{"2":{"169":1}}],["可控性",{"2":{"642":1}}],["可参考另一篇文章",{"2":{"588":1}}],["可包含多个文件",{"2":{"585":1}}],["可独立执行子任务",{"2":{"570":1}}],["可独立验证的行为",{"2":{"177":1}}],["可按主题拆分",{"2":{"570":1}}],["可按序执行",{"2":{"450":1}}],["可提交到",{"2":{"570":1}}],["可提前设计",{"2":{"200":1}}],["可执行",{"2":{"568":1}}],["可执行的",{"2":{"454":1}}],["可执行的描述",{"2":{"449":1}}],["可执行的精准意图",{"2":{"367":1}}],["可本地",{"2":{"567":1}}],["可浏览",{"2":{"561":1}}],["可重用与组合",{"2":{"547":1}}],["可重试错误",{"2":{"144":1}}],["可信赖",{"2":{"538":1}}],["可信基线",{"2":{"171":1}}],["可解释",{"2":{"537":1}}],["可观测性",{"0":{"537":1}}],["可精确解析的语义图谱",{"2":{"536":1}}],["可交付的代码",{"2":{"534":1}}],["可交付的工程化",{"2":{"525":1}}],["可交互",{"2":{"23":1,"58":1}}],["可一键部署到",{"2":{"561":1}}],["可一站访问",{"2":{"523":1}}],["可一旦系统出了问题",{"2":{"382":1,"1007":1}}],["可从以下四个维度梳理自身诉求",{"2":{"519":1}}],["可将资料转为播客式对话",{"2":{"515":1}}],["可导入",{"2":{"515":1}}],["可调用的工具",{"2":{"506":1}}],["可感与不可感之间",{"2":{"506":1}}],["可追溯",{"2":{"491":1}}],["可追踪的",{"2":{"246":1}}],["可使用的",{"2":{"470":2}}],["可使用第三方",{"2":{"4":1}}],["可视化伴侣",{"2":{"987":1}}],["可视化伴侣触发条件与行为规范",{"2":{"980":1}}],["可视化构建",{"2":{"956":1}}],["可视化辅助调试",{"2":{"763":1}}],["可视化测试",{"2":{"706":1}}],["可视化低代码编辑器",{"2":{"645":1}}],["可视化编辑器系统",{"0":{"656":1}}],["可视化编辑器",{"2":{"647":1}}],["可视化编辑器核心基础设施",{"2":{"647":1}}],["可视化编辑器层",{"2":{"646":1}}],["可视化编辑",{"2":{"641":1}}],["可视化工具",{"2":{"527":1,"936":1}}],["可视化与工具的自动化",{"2":{"527":1}}],["可视化数据分析产出的图表",{"2":{"474":1}}],["可视化",{"2":{"470":1,"939":1}}],["可视化阶段",{"2":{"468":1}}],["可视化时间旅行",{"2":{"98":1}}],["可预期",{"2":{"456":1}}],["可预测的秩序",{"2":{"332":1}}],["可持续跟进",{"2":{"568":1}}],["可持续工作流",{"2":{"441":1}}],["可持续运转的",{"2":{"440":1}}],["可持续更新的缓存资产",{"2":{"38":1}}],["可进化的工作流",{"2":{"427":1}}],["可操作的的子任务",{"2":{"422":1}}],["可管理",{"2":{"415":1,"438":1}}],["可打开",{"2":{"409":1}}],["可直接复制进项目",{"2":{"561":1}}],["可直接调用平台上数十万个开源模型",{"2":{"523":1}}],["可直接生成结构化笔记与任务清单",{"2":{"515":1}}],["可直接替代人工答疑",{"2":{"405":1}}],["可直接访问",{"2":{"230":1}}],["可乐是典型的薄利多销产品",{"2":{"392":1}}],["可乐好像一直没有涨价",{"2":{"392":1}}],["可乐的三十年价格迷局",{"0":{"392":1}}],["可乐不惜牺牲这一优势",{"2":{"391":1}}],["可乐高压圆柱均压",{"2":{"391":1}}],["可委托给智能代理自主完成",{"2":{"378":1}}],["可理解",{"2":{"367":1}}],["可迭代的思维模型",{"2":{"363":1}}],["可训练",{"2":{"363":1,"364":1}}],["可用函数",{"2":{"948":1}}],["可用函数和主题定义",{"2":{"942":1}}],["可用于",{"2":{"662":1}}],["可用于创作",{"2":{"511":1}}],["可用于验证计算过程或生成可视化图表辅助讲解",{"2":{"494":1}}],["可用于任何异步",{"2":{"342":1}}],["可用性阈值",{"2":{"363":1}}],["可运行在浏览器和",{"2":{"342":1}}],["可访问的组件和代码分发平台",{"2":{"340":1}}],["可被多个接口复用",{"2":{"336":1}}],["可自主规划",{"2":{"564":1}}],["可自动规划多轮检索并生成结构化报告",{"2":{"518":1}}],["可自动整理行业数据",{"2":{"406":1}}],["可自治的子应用的架构模式",{"2":{"284":1}}],["可自建",{"2":{"9":1}}],["可读",{"2":{"270":1}}],["可读性和可维护性",{"2":{"958":1}}],["可读性",{"2":{"253":1,"988":1}}],["可辨识",{"2":{"230":1}}],["可辨识联合是联合类型最重要的设计模式",{"2":{"230":1}}],["可辨识联合",{"0":{"230":1}}],["可扩展的技术方案",{"2":{"558":1}}],["可扩展的",{"2":{"344":2}}],["可扩展",{"2":{"201":1}}],["可扩展性强",{"2":{"283":1,"904":1}}],["可扩展性",{"2":{"181":1,"200":1,"881":1,"936":1}}],["可维护的组件的设计思想",{"2":{"296":1}}],["可维护",{"2":{"201":1}}],["可维护性和运行时性能之间找到完美平衡",{"2":{"965":1}}],["可维护性以及自动化交付体系",{"2":{"555":1}}],["可维护性",{"2":{"200":1,"292":1}}],["可验证的协作闭环",{"2":{"171":1}}],["可测试的数字资产",{"2":{"456":1}}],["可测试的",{"2":{"171":1}}],["可复用代码的关键技术",{"2":{"264":1}}],["可复用的类名的架构方法",{"2":{"962":1}}],["可复用的工具函数",{"2":{"906":1}}],["可复用的流程",{"2":{"592":1}}],["可复用的专属能力包",{"0":{"436":1}}],["可复用的独立组件",{"2":{"178":1}}],["可复用的自治单元",{"2":{"169":1}}],["可复用",{"2":{"167":1,"274":1,"296":1,"456":1}}],["可考虑",{"2":{"166":1}}],["可选项",{"2":{"1047":1}}],["可选的",{"2":{"952":1}}],["可选的独立模块",{"2":{"818":1}}],["可选的无头",{"2":{"5":1}}],["可选集成模块",{"2":{"815":1}}],["可选断行点",{"2":{"805":1}}],["可选择在段前",{"2":{"797":1}}],["可选继承",{"2":{"766":1}}],["可选素材附件",{"2":{"442":1}}],["可选初始数据",{"2":{"261":1}}],["可选",{"2":{"152":1,"210":1,"442":3,"498":1,"581":1,"737":3,"738":1,"835":1,"964":1}}],["可添加认证信息",{"2":{"144":1}}],["可携带请求体",{"2":{"144":1,"150":1}}],["可携带任意大小的",{"2":{"135":1}}],["可区分可重试错误与致命错误",{"2":{"142":1}}],["可多行",{"2":{"139":1}}],["可靠投递保障",{"2":{"121":1}}],["可靠投递与安全防护",{"0":{"121":1}}],["可靠性",{"2":{"3":1,"976":1}}],["可设为",{"2":{"88":1}}],["可关闭聚焦刷新",{"2":{"87":1}}],["可在多种框架上渲染",{"2":{"933":1}}],["可在任何",{"2":{"813":1}}],["可在项目根目录创建",{"2":{"571":1}}],["可在特定条件下自动触发",{"2":{"570":1}}],["可在",{"2":{"82":1,"935":1}}],["可以缓解体重上升而选择大早上吃很多早餐",{"2":{"1043":1}}],["可以经过短时间的学习就能较好地完成多个不同的任务",{"2":{"1017":1}}],["可以去多次重复",{"2":{"1016":1}}],["可以去阅读原著",{"2":{"1006":1}}],["可以尝试摸索",{"2":{"1007":1}}],["可以帮助我们更快",{"2":{"1002":1}}],["可以帮助我们更好地利用",{"2":{"569":1}}],["可以直接把大模型生成的",{"2":{"971":1}}],["可以直接从",{"2":{"964":1}}],["可以发送以下四种消息之一",{"2":{"951":1}}],["可以定义自己的内置工具",{"2":{"927":1}}],["可以定义灵活的数据结构",{"2":{"263":1}}],["可以返回一个间隔",{"2":{"898":1}}],["可以在这里抛出异常并通过",{"2":{"898":1}}],["可以在此处统一处理所有",{"2":{"94":1}}],["可以在此处覆盖全局",{"2":{"87":1}}],["可以包含多个",{"2":{"680":1}}],["可以有子节点",{"2":{"680":1}}],["可以反哺",{"2":{"628":1}}],["可以从时间维度上来了解体重走势",{"2":{"1044":1}}],["可以从",{"2":{"597":1}}],["可以得出以下结论",{"2":{"509":1}}],["可以得出两条选择结论",{"2":{"99":1}}],["可以调用相关插件生成与诗歌主题相符的图片",{"2":{"504":1}}],["可以并发处理双重任务",{"2":{"493":1}}],["可以是一个字符串",{"2":{"483":1}}],["可以是多行文本",{"2":{"136":1}}],["可以接管的环节",{"2":{"462":1}}],["可以根据需要自定义权限模式",{"2":{"482":1}}],["可以根据需要自定义输出格式",{"2":{"482":1}}],["可以根据需要自定义模型",{"2":{"482":1}}],["可以根据需要自定义最大轮数",{"2":{"482":1}}],["可以根据需要自定义系统提示",{"2":{"482":1}}],["可以根据需求生成多个独立的子智能体",{"2":{"415":1}}],["可以根据任务需求",{"2":{"443":1}}],["可以运行的可执行代码",{"2":{"442":1}}],["可以独立处理离散任务",{"2":{"438":1}}],["可以独立测试",{"2":{"292":1}}],["可以瞬间扫描过去三个月的所有项目会议纪要",{"2":{"417":1}}],["可以通过链接查阅的完整文档",{"2":{"572":1}}],["可以通过视觉识别和模拟鼠标键盘",{"2":{"411":1}}],["可以通过寻找非同质化体验",{"2":{"398":1}}],["可以通过寻找帕累托改进空间",{"2":{"398":1}}],["可以用体验优势",{"2":{"391":1}}],["可以计算概率",{"2":{"362":1}}],["可以生成代码",{"2":{"362":1}}],["可以模仿语气",{"2":{"362":1}}],["可以带着",{"2":{"355":1}}],["可以极大降低新知识创造的门槛",{"2":{"355":1}}],["可以针对不同的引入方式",{"2":{"335":1}}],["可以将",{"2":{"308":1}}],["可以自动放行",{"2":{"537":1}}],["可以自动通知其他监听该状态的模块",{"2":{"302":1}}],["可以自定义数据格式",{"2":{"135":1}}],["可以逐步升级或替换旧的子应用",{"2":{"285":1}}],["可以组合多个约束条件",{"2":{"264":1}}],["可以表达",{"2":{"263":1}}],["可以使用任意名称",{"2":{"311":1}}],["可以使用",{"2":{"263":1}}],["可以满足各种复杂的测试需求",{"2":{"225":1}}],["可以创建中间层配置",{"2":{"216":1}}],["可以智能地只编译发生变化的项目",{"2":{"207":1}}],["可以实现类型安全的对象属性访问",{"2":{"263":1}}],["可以实现",{"2":{"207":1}}],["可以引入",{"2":{"175":1}}],["可以像排查电路图一样用万用表逐点测量",{"2":{"174":1}}],["可以先让它充当",{"2":{"170":1}}],["可以承受一定数量的挂起连接",{"2":{"167":1}}],["可以承载搜索框",{"2":{"54":1}}],["可以重试",{"2":{"146":1}}],["可以执行任何异步操作",{"2":{"70":1}}],["可以各自选择不同的渲染策略",{"2":{"63":1}}],["可以看作是",{"2":{"41":1}}],["可能答案中多少会涵盖点",{"2":{"1029":1}}],["可能不完整的情况",{"2":{"947":1}}],["可能为其他项目配置或示例",{"2":{"735":1}}],["可能触发重新渲染",{"2":{"708":1}}],["可能有用的最简单的东西",{"2":{"361":1}}],["可能没有",{"2":{"233":2}}],["可能用得上",{"2":{"183":1}}],["可能几秒也可能几十秒",{"2":{"167":1}}],["可能会因为环境变化而产生",{"2":{"425":1}}],["可能会因为",{"2":{"424":1}}],["可能会在未来被新的框架取代",{"2":{"180":1}}],["可能会持续挂起",{"2":{"164":1}}],["可能会触发后端一系列的流式响应",{"2":{"101":1}}],["可能是不完整的",{"2":{"141":1}}],["可能导致用户",{"2":{"76":1}}],["可能被搜索引擎判定为",{"2":{"47":1}}],["可能耗时数小时",{"2":{"47":1}}],["可能影响性能",{"2":{"19":1}}],["可缓存",{"2":{"45":1}}],["可通过配置自定义模型服务",{"2":{"559":1}}],["可通过",{"2":{"19":1,"519":1,"796":1}}],["可覆盖绝大多数场景",{"2":{"4":1}}],["文学与小说",{"2":{"1031":1}}],["文字层",{"2":{"738":1}}],["文字选择器",{"2":{"743":1}}],["文字选择器属性",{"2":{"735":1}}],["文字选择器装饰器",{"2":{"735":1}}],["文字属性",{"2":{"735":1}}],["文字属性动画",{"2":{"735":1}}],["文字动画属性",{"2":{"735":1}}],["文字动画数据属性",{"2":{"735":1}}],["文字对象代理",{"2":{"735":1}}],["文字元素基类",{"2":{"735":1}}],["文字元素",{"2":{"735":4}}],["文字装饰",{"2":{"677":1}}],["文明优越论",{"2":{"604":1}}],["文库联动",{"2":{"518":1}}],["文心大模型",{"2":{"518":1}}],["文心一言",{"2":{"512":2}}],["文",{"2":{"511":1,"521":1}}],["文案润色",{"2":{"415":1}}],["文章下载",{"2":{"851":1}}],["文章提取",{"2":{"851":1}}],["文章",{"2":{"851":1}}],["文章解读",{"2":{"628":1}}],["文章和视频内容",{"2":{"515":1}}],["文章给出的最终答案是",{"2":{"362":1}}],["文章分享",{"2":{"346":1}}],["文章正文",{"2":{"55":1}}],["文章正文等固定内容划入静态外壳",{"2":{"47":1}}],["文章正文框架",{"2":{"40":1}}],["文章详情页",{"2":{"15":1}}],["文本交互效率低下",{"2":{"933":1}}],["文本生成",{"2":{"926":1}}],["文本生成是",{"2":{"915":1}}],["文本按字符",{"2":{"819":1}}],["文本动画特效",{"2":{"819":1}}],["文本特效",{"2":{"818":1}}],["文本中禁止词内断行",{"2":{"795":1}}],["文本模块类型声明",{"2":{"790":1}}],["文本模型",{"2":{"523":1}}],["文本层",{"2":{"789":1}}],["文本规范化",{"2":{"789":1}}],["文本分割",{"2":{"814":1}}],["文本分析阶段",{"2":{"798":1}}],["文本分析是",{"2":{"795":1}}],["文本分析产物",{"2":{"793":1,"805":1}}],["文本分析引擎契约",{"2":{"805":1}}],["文本分析引擎",{"0":{"795":1},"2":{"790":1}}],["文本分析",{"2":{"788":1,"789":1,"792":1}}],["文本分词",{"2":{"785":1}}],["文本测量",{"2":{"785":1}}],["文本虚拟化",{"2":{"784":1}}],["文本布局涉及",{"2":{"784":1}}],["文本布局与测量库",{"2":{"784":1}}],["文本格式化",{"2":{"706":1}}],["文本渲染",{"2":{"677":1}}],["文本替换时忽略的",{"2":{"662":1}}],["文本理解与推理能力优秀",{"2":{"512":1}}],["文本对话中最主流的",{"2":{"131":1}}],["文本对话",{"2":{"130":1}}],["文本大模型",{"2":{"124":1}}],["文本流",{"2":{"112":1}}],["文本编码限制",{"2":{"112":1}}],["文本",{"2":{"14":1,"410":1,"488":1,"512":1,"521":1,"522":2,"523":2,"784":1,"817":1,"908":1,"913":1,"939":1}}],["文档标题",{"2":{"994":1}}],["文档审查系统测试",{"2":{"980":1}}],["文档构建依赖",{"2":{"939":1}}],["文档预处理",{"2":{"939":1}}],["文档预览",{"2":{"641":1}}],["文档静态资源",{"2":{"939":1}}],["文档工具",{"2":{"846":1}}],["文档解析",{"2":{"647":1}}],["文档在线预览",{"2":{"647":1}}],["文档和生态最为成熟",{"2":{"521":1}}],["文档权威",{"2":{"520":1}}],["文档协作",{"2":{"515":1}}],["文档生成脚本",{"2":{"939":1}}],["文档生成资源",{"2":{"677":1}}],["文档生成",{"2":{"515":2,"677":1,"763":1}}],["文档处理",{"2":{"512":2}}],["文档分析",{"2":{"511":1,"512":1}}],["文档整理",{"2":{"462":1}}],["文档与资源生成",{"0":{"453":1}}],["文档变更",{"2":{"451":1}}],["文档中获取最新上下文",{"2":{"411":1}}],["文档完善",{"2":{"287":1,"522":2}}],["文档站点配置",{"2":{"939":1}}],["文档站点",{"2":{"936":1,"939":1}}],["文档站点盲目使用",{"2":{"55":1}}],["文档站是最纯粹的",{"2":{"54":1}}],["文档页面",{"2":{"53":1}}],["文档",{"2":{"6":1,"19":1,"63":1,"80":1,"342":1,"451":1,"478":1,"515":2,"646":1}}],["文档类网站",{"2":{"4":1}}],["文件定义的行为指令集",{"2":{"983":1}}],["文件引用模式",{"2":{"980":1}}],["文件间反复横跳的低效",{"2":{"967":1}}],["文件之间反复横跳",{"2":{"962":1}}],["文件还是普通的",{"2":{"960":1}}],["文件映射",{"2":{"939":1}}],["文件获取补全信息",{"2":{"854":1}}],["文件加载",{"2":{"763":1}}],["文件解包",{"2":{"647":1}}],["文件解析",{"2":{"518":1}}],["文件读取与渲染",{"2":{"647":1}}],["文件与主配置的分离设计",{"2":{"597":1}}],["文件中编写",{"2":{"959":1}}],["文件中的技术",{"2":{"959":1}}],["文件中的内容加载到环境变量中",{"2":{"481":1,"490":1}}],["文件中",{"2":{"591":1,"959":1,"964":1}}],["文件时生效",{"2":{"576":1}}],["文件会自动变成一个可调用的命令",{"2":{"579":1}}],["文件会与",{"2":{"575":1}}],["文件会放在此目录",{"2":{"203":1}}],["文件快速解析",{"2":{"518":1}}],["文件分析",{"2":{"512":1}}],["文件输入",{"2":{"511":1}}],["文件配置建议",{"2":{"481":1}}],["文件示意如下",{"2":{"451":2}}],["文件夹实现配置与扩展",{"2":{"570":1}}],["文件夹开始",{"2":{"569":1}}],["文件夹名称必须使用",{"2":{"442":1}}],["文件夹结构拆解",{"0":{"442":1}}],["文件优先的记忆系统与心跳触发的被动唤醒机制相结合",{"2":{"419":1}}],["文件模块",{"2":{"334":1}}],["文件级隔离",{"2":{"320":1}}],["文件和所有",{"2":{"203":1}}],["文件包含配置",{"2":{"203":1}}],["文件的具体修改内容",{"2":{"581":1}}],["文件的配置",{"2":{"209":1}}],["文件的类型检查",{"2":{"203":1}}],["文件的引用",{"2":{"203":1}}],["文件目录",{"2":{"203":1}}],["文件集中管理待编译文件路径",{"2":{"202":1}}],["文件上传",{"2":{"119":1}}],["文件名",{"2":{"66":1}}],["文件路径",{"2":{"65":1}}],["文件系统及人类现有通讯工具的深度集成程度",{"2":{"419":1}}],["文件系统即路由系统",{"0":{"64":1},"1":{"65":1,"66":1,"67":1}}],["文件系统路由",{"2":{"59":1,"80":1}}],["文件位置",{"2":{"53":1}}],["文件本质上是一个",{"2":{"53":1}}],["文件作为可读模块",{"2":{"203":1}}],["文件作为模块",{"2":{"203":1}}],["文件作为",{"2":{"53":1}}],["文件并返回",{"2":{"51":1}}],["文件并输出到",{"2":{"31":1}}],["文件写入",{"2":{"50":1}}],["文件对应一个路由页面",{"2":{"50":1}}],["文件形式存在于",{"2":{"50":1}}],["文件",{"2":{"2":1,"14":1,"30":1,"31":1,"50":1,"53":1,"203":6,"205":1,"223":1,"345":1,"448":1,"481":1,"518":1,"570":1,"581":1,"585":1,"636":1,"643":1,"647":2,"677":2,"699":1,"728":1,"735":1,"754":1,"851":1,"904":1,"909":1,"958":1,"960":1,"964":1,"965":1,"967":1,"971":1}}],["只想到了一些常用的",{"2":{"1008":1}}],["只存通道值",{"2":{"970":1}}],["只存在于",{"2":{"229":1}}],["只打包项目中真正用到的类名",{"2":{"962":1}}],["只暴露",{"2":{"925":1}}],["只生成工具调用",{"2":{"915":1}}],["只负责提供更爽的编写体验",{"2":{"969":1}}],["只负责生成工具调用",{"2":{"903":1}}],["只负责时间调度",{"2":{"824":1}}],["只接受",{"2":{"860":1}}],["只背诵结论不是传授学问的方法",{"2":{"608":1}}],["只知道观点",{"2":{"608":1}}],["只提交已",{"2":{"581":1}}],["只会引发严重的内耗",{"2":{"621":1}}],["只会把那几条观点反复背诵套用",{"2":{"608":1}}],["只会淘汰那些拒绝使用",{"2":{"552":1}}],["只会让自己变得更加焦虑",{"2":{"1036":1}}],["只会让",{"2":{"180":1}}],["只做管理",{"2":{"470":1}}],["只读书不仅会造成处理实际事务时能力低下",{"2":{"614":1}}],["只读书会导致知识结构缺陷",{"2":{"614":1}}],["只读",{"2":{"415":1,"834":1}}],["只读绑定",{"2":{"314":1}}],["只把最终提炼的结论汇报给主智能体",{"2":{"415":1}}],["只把代码拆分到不同文件里还不够",{"2":{"299":1}}],["只保留实际使用的",{"2":{"962":1}}],["只保留",{"2":{"373":1}}],["只保留普通的类型注释或完全没有任何类型信息",{"2":{"254":1}}],["只通过最精简的接口与外界对话",{"2":{"337":1}}],["只约束我们需要的特性",{"2":{"263":1}}],["只在办公时间或业余遇到紧急问题时才使用远程办公工具来协作",{"2":{"1041":1}}],["只在",{"2":{"249":2}}],["只在必要时才向客户端发送",{"2":{"59":1}}],["只包含那些同时满足两种结构的对象",{"2":{"236":1}}],["只取",{"2":{"233":1}}],["只能硬着头皮控制自己",{"2":{"1045":1}}],["只能是想尽一切办法",{"2":{"1022":1}}],["只能调用",{"2":{"987":1}}],["只能请求客户端预批准组件目录中的组件",{"2":{"938":1}}],["只能请求预批准组件",{"2":{"936":1}}],["只能请求渲染客户端预批准目录中的组件",{"2":{"935":1}}],["只能以纯文本与用户交互",{"2":{"933":1}}],["只能回去重读",{"2":{"610":1}}],["只能得到及格线",{"2":{"462":1}}],["只能安全访问所有成员共有的属性",{"2":{"229":1}}],["只能做静态展示",{"2":{"54":1}}],["只能做博客",{"2":{"4":1}}],["只覆盖自己需要的特定选项",{"2":{"216":1}}],["只定义",{"2":{"216":1}}],["只实现",{"2":{"183":1}}],["只选最对的",{"0":{"129":1},"1":{"130":1,"131":1}}],["只要能把握住规则的脉搏",{"2":{"1049":1}}],["只要能结合自身的优势",{"2":{"381":1}}],["只要保证消耗",{"2":{"1048":1}}],["只要解决了当前棘手的问题",{"2":{"1034":1}}],["只要不去行动",{"2":{"1034":1}}],["只要不立即访问未初始化的变量",{"2":{"315":1}}],["只要一件事情发生的次数足够多",{"2":{"1016":1}}],["只要肯花时间去学习领悟",{"2":{"1011":1}}],["只要识别到",{"2":{"960":1}}],["只要捧起书就一定有收获",{"2":{"606":1}}],["只要我能写前端",{"2":{"553":1}}],["只要你的测试",{"2":{"538":1}}],["只要会说话就能写代码",{"2":{"530":1}}],["只要松开脚下的刹车就好了",{"2":{"387":1}}],["只要对外暴露的接口不变",{"2":{"297":1}}],["只要值落在这两个集合中的任何一个里",{"2":{"229":1}}],["只要客户端不主动询问",{"2":{"103":1}}],["只要输入不变就不重新计算",{"2":{"76":1}}],["只处理纯粹的客户端",{"2":{"85":1}}],["只有少部分系数描述了曲线的核心特征",{"2":{"1015":1}}],["只有学习和总结",{"2":{"400":1}}],["只有你能做",{"2":{"396":1}}],["只有真正了解市场和客户",{"2":{"396":1}}],["只有通过不断的",{"2":{"369":1}}],["只有批判性思维但缺乏同理心",{"2":{"366":1}}],["只有同理心但缺乏批判性思维",{"2":{"366":1}}],["只有在碰到特别重要紧急的事情或者娱乐的事情才需要与同事当面沟通交流",{"2":{"1040":1}}],["只有在真正需要解决复杂度",{"2":{"292":1}}],["只有在推断结果不符合预期",{"2":{"263":1}}],["只有在遇到真实网络异常时",{"2":{"164":1}}],["只有需要被其他项目引用的项目才启用",{"2":{"216":1}}],["只有需要交互的",{"2":{"82":1}}],["只有当你必须用自己的语言向别人复述",{"2":{"610":1}}],["只有当我们花时间去倾听",{"2":{"377":1}}],["只有当",{"2":{"95":1,"410":1,"443":1,"576":1}}],["只有原始数据变化时才会重新执行",{"2":{"95":1}}],["只有",{"2":{"77":2,"132":1,"415":1}}],["只有理解它们各自的分工",{"2":{"73":1}}],["只有与业务场景高度契合的适配策略",{"2":{"55":1}}],["只有超过指定周期或收到特定触发时才重新生成",{"2":{"34":1}}],["只需不到",{"2":{"902":1}}],["只需保留项目概述和核心规则",{"2":{"575":1}}],["只需前端",{"2":{"562":1}}],["只需几步就可以将项目上线",{"2":{"345":1}}],["只需添加新的子应用",{"2":{"292":1}}],["只需要搜索和读取",{"2":{"591":1}}],["只需要读取代码",{"2":{"591":1}}],["只需要从一个小问题开始",{"2":{"466":1}}],["只需要关注第",{"2":{"430":1}}],["只需要做",{"2":{"361":1}}],["只需要传入新的类型参数即可",{"2":{"255":1}}],["只需要正确地",{"2":{"54":1}}],["只需在",{"2":{"179":1,"640":1}}],["只需声明性清理特定路径或缓存标签的缓存即可",{"2":{"36":1}}],["只预渲染高频访问页面",{"2":{"47":1}}],["只是浮于表面的搬运",{"2":{"617":1}}],["只是完成了从",{"2":{"550":1}}],["只是对话搜索",{"2":{"462":1}}],["只是辅助工具",{"2":{"403":1}}],["只是",{"2":{"4":1,"556":1}}],["实打实一个传奇",{"2":{"1043":1}}],["实则陷入技术泥潭",{"2":{"365":1}}],["实用优先",{"2":{"340":1,"967":1}}],["实用泛型函数",{"0":{"259":1}}],["实例核心接口",{"2":{"719":1}}],["实例初始化选项",{"2":{"719":1}}],["实例创建和配置加载",{"2":{"910":1}}],["实例创建",{"2":{"717":1}}],["实例化网格",{"2":{"766":1}}],["实例化渲染",{"2":{"763":1}}],["实例化属性",{"2":{"763":1}}],["实例化几何体",{"2":{"763":1}}],["实例化",{"2":{"706":1,"769":1}}],["实例在",{"2":{"683":1}}],["实例",{"2":{"288":1,"649":1,"661":1,"686":1,"708":1,"719":2,"738":1,"740":1,"741":1,"765":1,"821":1,"835":3,"846":1,"916":1,"983":1}}],["实例配置",{"2":{"274":1}}],["实施建议",{"0":{"282":1}}],["实战场景",{"2":{"971":1}}],["实战建议",{"2":{"523":1}}],["实战",{"0":{"288":1,"487":1},"1":{"488":1,"489":1,"490":1}}],["实战模式",{"0":{"245":1},"1":{"246":1,"247":1,"248":1,"249":1}}],["实战中",{"2":{"227":1}}],["实验性功能",{"2":{"204":1}}],["实体引用拓扑",{"2":{"650":1,"680":1,"709":1,"738":1,"766":1,"793":1,"822":1,"856":1,"913":1,"942":1,"983":1}}],["实体定义",{"2":{"650":1,"680":1,"709":1,"738":1,"766":1,"793":1,"822":1,"856":1,"913":1,"942":1,"983":1}}],["实体层",{"2":{"275":1}}],["实体",{"0":{"402":1},"2":{"181":2,"185":1,"278":2,"281":1,"282":1,"650":1,"680":1,"822":1,"856":1}}],["实际组件",{"2":{"649":1}}],["实际是信息在筛选人",{"0":{"617":1}}],["实际使用中要做好截断策略",{"2":{"523":1}}],["实际案例",{"2":{"366":1}}],["实际上连这个",{"2":{"622":1}}],["实际上是这些高门槛的路径在天然地筛选掉那些缺乏定力和长远产品嗅觉的人",{"2":{"617":1}}],["实际上是我们理解一切复杂类型操作的起点",{"2":{"227":1}}],["实际上是为",{"2":{"179":1}}],["实际上它们处于不同的技术层次",{"2":{"134":1}}],["实际项目中替换为真实任务观察",{"2":{"153":1}}],["实际项目中",{"2":{"150":1}}],["实际承载的数据内容",{"2":{"139":1}}],["实际退化为",{"2":{"47":1}}],["实践混合工作制",{"2":{"1041":1}}],["实践过程中借助体脂秤的指标和数据统计",{"2":{"1026":1}}],["实践细节可参考笔者之前写的一篇文章",{"2":{"1026":1}}],["实践小总结",{"0":{"509":1}}],["实践背景",{"0":{"496":1}}],["实践指南",{"0":{"444":1,"965":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"966":1,"967":1,"968":1,"969":1,"970":1}}],["实践指导",{"0":{"281":1}}],["实践探索与自主创新",{"2":{"406":1}}],["实践干货等",{"2":{"346":1}}],["实践中最有用的分布式条件类型",{"2":{"234":1}}],["实践选型指南",{"0":{"129":1},"1":{"130":1,"131":1}}],["实践可以概括为三个关键词",{"2":{"49":1}}],["实践案例",{"0":{"48":1,"473":1},"1":{"49":1,"50":1,"51":1,"52":1,"53":1,"54":1,"474":1,"475":1}}],["实践建议",{"2":{"47":1,"286":1}}],["实践",{"2":{"20":1,"622":1,"1000":1}}],["实时编译",{"2":{"969":1}}],["实时编织为",{"2":{"536":1}}],["实时日志查看和监控",{"2":{"875":1}}],["实时日志等",{"2":{"155":1}}],["实时新闻",{"2":{"875":1}}],["实时网站操作",{"2":{"844":1}}],["实时监控",{"2":{"700":1}}],["实时预览",{"2":{"656":1}}],["实时抓取多个网页",{"2":{"517":1}}],["实时转录",{"2":{"515":1}}],["实时接入",{"2":{"511":1}}],["实时信息检索",{"2":{"511":1}}],["实时优化子任务的执行顺序和策略",{"2":{"424":1}}],["实时调整策略",{"2":{"412":1}}],["实时应用程序和",{"2":{"338":1}}],["实时双向聊天",{"2":{"131":1}}],["实时语音",{"2":{"130":1}}],["实时同步玩家坐标与指令的",{"2":{"116":1}}],["实时读取并处理源源不断传来的数据块",{"2":{"105":1}}],["实时化",{"2":{"103":1}}],["实时性强",{"2":{"414":1}}],["实时性更高且减少了请求次数",{"2":{"164":1}}],["实时性略差",{"2":{"160":1}}],["实时性的",{"2":{"103":1}}],["实时性要求极高的数据流",{"2":{"76":1}}],["实时性",{"2":{"55":1,"85":1,"166":1,"517":1}}],["实时性极高的应用",{"2":{"19":1}}],["实时",{"2":{"45":2,"113":1}}],["实时执行页面组件代码",{"2":{"27":1}}],["实时数据推送",{"2":{"875":1}}],["实时数据大盘",{"2":{"63":1}}],["实时数据展示",{"2":{"4":1}}],["实时数据",{"2":{"2":1}}],["实现大家的共同诉求",{"2":{"1041":1}}],["实现代码",{"2":{"988":1}}],["实现者子agent的系统提示词",{"2":{"980":1}}],["实现一键换肤与暗黑模式",{"2":{"965":1}}],["实现完全的类型安全",{"2":{"964":1}}],["实现完全隔离",{"2":{"291":1}}],["实现隔离",{"2":{"961":1}}],["实现局部作用域",{"2":{"961":1}}],["实现样式隔离的常用工具",{"2":{"960":1}}],["实现细粒度响应式更新",{"2":{"945":1}}],["实现流式对话",{"2":{"923":1}}],["实现的响应式系统自动传播变更到订阅的",{"2":{"944":1}}],["实现的黄金标准",{"2":{"909":1}}],["实现的唯一依据",{"2":{"177":1}}],["实现层",{"2":{"906":1,"907":1}}],["实现装饰器嵌套",{"2":{"903":1}}],["实现子动画的顺序或反向渲染",{"2":{"827":1}}],["实现功能完备但按需加载的架构",{"2":{"812":1}}],["实现跨后端着色器复用",{"2":{"761":1}}],["实现跨项目的类型安全",{"2":{"207":1}}],["实现着色器跨后端复用",{"2":{"758":1}}],["实现抖动效果",{"2":{"747":1}}],["实现最小化的增删操作",{"2":{"713":1}}],["实现属性的缓动过渡",{"2":{"686":1}}],["实现低成本上手",{"2":{"559":1}}],["实现低延迟的实时数据交换",{"2":{"115":1}}],["实现资源负载均衡和容灾恢复",{"2":{"551":1}}],["实现业务流程自适应编排的智能化系统",{"2":{"477":1}}],["实现业务流程的自适应编排",{"2":{"403":1}}],["实现力被重新定义为",{"2":{"461":1}}],["实现力不再是",{"2":{"461":1}}],["实现力",{"0":{"461":1},"2":{"466":1}}],["实现维度",{"2":{"441":1}}],["实现多任务并行处理",{"2":{"438":1}}],["实现多智体协作",{"2":{"411":1}}],["实现特定领域的稳定",{"2":{"436":1}}],["实现方式",{"2":{"411":1}}],["实现方案",{"0":{"140":1},"1":{"141":1,"142":1,"143":1,"144":1}}],["实现规模化的生产方式",{"2":{"403":1}}],["实现从通用助手向特定任务专家",{"2":{"547":1}}],["实现从",{"2":{"403":1,"406":1,"491":1}}],["实现复杂度",{"2":{"365":1}}],["实现极快的构建速度",{"2":{"343":1}}],["实现前后端无缝",{"2":{"342":1}}],["实现原理",{"2":{"306":1}}],["实现简单",{"2":{"287":1}}],["实现以下目标",{"2":{"285":1}}],["实现用户界面层",{"2":{"282":1}}],["实现基础设施层",{"2":{"282":1}}],["实现应用层",{"2":{"282":1}}],["实现领域层",{"2":{"282":1}}],["实现模块间解耦",{"2":{"281":1}}],["实现在基础设施层",{"2":{"281":1}}],["实现仓储接口",{"2":{"279":1}}],["实现认证授权与权限控制",{"2":{"275":1}}],["实现了",{"2":{"985":1}}],["实现了真正的样式局部隔离",{"2":{"960":1}}],["实现了一个完整的表达式引擎",{"2":{"655":1}}],["实现了一个策略模式",{"2":{"652":1}}],["实现了决策与执行的解耦",{"2":{"429":1}}],["实现了数据消费端的高度自治",{"2":{"342":1}}],["实现了数据的边计算",{"2":{"104":1}}],["实现了网页的结构与样式的分离",{"2":{"338":1}}],["实现了类型安全与代码复用的平衡",{"2":{"270":1}}],["实现了两个接口的类",{"2":{"267":1}}],["实现配置的复用与独立定制",{"2":{"226":1}}],["实现配置复用和类型共享",{"2":{"205":1}}],["实现类型共享",{"2":{"214":1}}],["实现类型共享和增量编译",{"2":{"203":1}}],["实现项目特定的配置需求",{"2":{"209":1}}],["实现更精细的编译控制",{"2":{"202":1}}],["实现核心目标",{"2":{"201":1}}],["实现需求必须的信息",{"2":{"195":1}}],["实现具体渲染逻辑与交互细节",{"2":{"178":1}}],["实现逻辑与视图的物理隔离",{"2":{"169":1}}],["实现真正的复用",{"2":{"256":1}}],["实现真正的",{"2":{"163":1}}],["实现真正的全双工流式交互",{"2":{"130":1}}],["实现示例",{"0":{"153":1}}],["实现主动取消",{"2":{"150":1}}],["实现带错误回滚的乐观更新是一种标准的",{"2":{"98":1}}],["实现快速响应",{"2":{"85":1}}],["实现即时页面切换",{"2":{"61":1}}],["实现内容更新自动部署",{"2":{"20":1}}],["实现订单查询",{"2":{"18":1}}],["实现动态评论",{"0":{"16":1}}],["实现动态评论功能",{"2":{"15":1}}],["实现",{"0":{"141":1},"2":{"4":1,"16":1,"19":1,"20":1,"252":1,"267":2,"376":1,"410":1,"457":1,"515":1,"639":1,"714":1,"733":1,"742":1,"763":1,"851":1,"856":2,"874":1,"883":1,"904":1,"912":1,"918":1,"933":2,"939":3,"963":1,"1001":1}}],["预设基础类",{"2":{"962":1}}],["预设了成百上千个底层",{"2":{"962":1}}],["预设配置",{"2":{"647":1}}],["预订表单场景",{"2":{"939":1}}],["预订按钮等组件的",{"2":{"934":1}}],["预构建的流式渲染场景浏览",{"2":{"956":1}}],["预构建场景",{"2":{"939":1}}],["预构建静态资产",{"2":{"2":1}}],["预导航",{"2":{"859":1}}],["预定义",{"2":{"939":1}}],["预定义缓动函数集",{"2":{"821":1}}],["预定义缓动函数导出",{"2":{"819":1}}],["预定下次帧时间",{"2":{"834":1}}],["预计算文本数据",{"2":{"801":1}}],["预计算环境贴图",{"2":{"763":1}}],["预编译的段级数据",{"2":{"797":1}}],["预编排模式",{"0":{"428":1},"1":{"429":1,"430":1,"431":1}}],["预置网站适配器",{"2":{"845":1}}],["预置主题文件",{"2":{"706":1}}],["预置了经过",{"2":{"478":1}}],["预处理器从",{"2":{"968":1}}],["预处理器是一种扩展了",{"2":{"958":1}}],["预处理器",{"0":{"958":1},"2":{"965":2}}],["预处理",{"2":{"789":1,"792":1,"969":1}}],["预处理辅助",{"2":{"706":1}}],["预处理管道",{"2":{"706":1}}],["预览区主题配置",{"2":{"939":1}}],["预览组件",{"2":{"939":1}}],["预览渲染",{"2":{"656":1}}],["预览引擎",{"2":{"647":2}}],["预型",{"2":{"600":1}}],["预训练已不再是唯一解",{"2":{"551":1}}],["预算极有限",{"2":{"523":1}}],["预期效果",{"2":{"418":1}}],["预测失败",{"2":{"369":1}}],["预测",{"0":{"369":1}}],["预留库存",{"2":{"281":1}}],["预留占位空间防止布局抖动",{"2":{"72":1}}],["预先识别",{"2":{"975":1}}],["预先测量每个字形的累积宽度",{"2":{"796":1}}],["预先在服务端注册一个回调",{"2":{"119":1}}],["预先生成好",{"2":{"30":1}}],["预生成的静态文件",{"2":{"63":1}}],["预渲染为",{"2":{"75":1}}],["预渲染为静态",{"2":{"4":1,"6":1}}],["预渲染白名单",{"2":{"47":1}}],["预渲染所有可能的文章页面",{"2":{"15":1}}],["预渲染单篇文章",{"2":{"15":1}}],["预渲染静态页面",{"2":{"15":1,"20":1}}],["预渲染博客页面",{"0":{"15":1}}],["预渲染时使用",{"2":{"14":1}}],["预渲染模式",{"2":{"13":1}}],["预渲染",{"2":{"11":1}}],["✅",{"2":{"4":3,"45":4,"46":11,"229":3,"233":2,"236":1,"238":2,"247":1,"249":2,"253":5,"327":1,"328":1,"448":1,"501":2,"502":1,"515":21,"523":3,"965":2}}],["=keyof",{"2":{"242":4}}],["==",{"2":{"144":1,"194":2,"203":2,"248":1,"281":4,"289":1,"879":1}}],["==========",{"2":{"964":2}}],["===================================================================================",{"2":{"965":3}}],["================================================================================",{"2":{"965":5}}],["============================================================",{"2":{"692":14,"749":12,"777":10,"834":14,"835":10}}],["============================================",{"2":{"203":6,"805":8,"962":2}}],["===",{"2":{"96":1,"143":2,"144":1,"147":4,"150":1,"154":2,"160":2,"164":3,"203":1,"231":2,"238":4,"249":2,"259":1,"261":1,"262":1,"281":2,"301":1,"306":2,"330":1,"483":2,"484":1,"486":2,"488":5,"489":1,"685":1,"879":1,"946":1,"947":1}}],["=>",{"2":{"14":1,"15":2,"16":10,"69":1,"85":3,"87":1,"88":3,"89":1,"91":2,"94":1,"95":4,"96":6,"138":4,"139":4,"141":1,"149":1,"150":6,"153":1,"154":1,"160":2,"163":1,"164":1,"223":5,"238":3,"248":1,"249":1,"259":3,"260":1,"261":2,"262":3,"266":1,"267":2,"281":4,"288":11,"289":3,"295":2,"300":3,"301":3,"302":2,"304":4,"305":1,"306":1,"307":4,"310":2,"313":2,"315":5,"327":6,"328":2,"330":1,"333":1,"483":1,"489":2,"661":6,"662":18,"663":8,"668":2,"686":1,"692":9,"719":1,"720":1,"777":4,"782":1,"806":2,"835":1,"865":3,"891":4,"898":4,"899":7,"945":1,"946":1,"951":6,"959":2}}],["=",{"0":{"238":1},"2":{"4":1,"14":3,"15":3,"16":12,"21":1,"45":5,"47":1,"55":1,"69":2,"70":1,"71":2,"72":1,"78":1,"85":3,"87":6,"88":3,"89":2,"91":1,"94":1,"96":2,"138":5,"139":3,"141":9,"143":13,"144":1,"146":2,"147":1,"148":4,"149":1,"150":9,"153":1,"154":2,"160":6,"163":4,"164":2,"175":1,"184":1,"185":3,"187":1,"199":1,"203":2,"222":1,"223":2,"227":3,"229":5,"230":1,"233":1,"234":13,"236":2,"237":5,"238":6,"239":1,"240":2,"242":6,"243":4,"244":16,"246":4,"247":5,"248":13,"249":1,"250":7,"258":3,"259":2,"260":1,"261":9,"262":6,"263":2,"265":3,"266":2,"267":4,"268":4,"269":9,"281":6,"288":12,"289":9,"295":1,"300":2,"301":4,"302":3,"304":6,"305":1,"306":2,"307":2,"310":3,"311":2,"313":3,"314":3,"315":21,"318":3,"327":6,"328":5,"330":2,"333":3,"365":1,"366":1,"367":1,"383":1,"387":1,"408":1,"458":1,"465":1,"482":1,"483":1,"486":2,"488":1,"489":5,"554":1,"640":1,"668":2,"685":3,"692":7,"693":2,"696":3,"712":1,"720":1,"724":1,"740":1,"741":1,"749":1,"750":9,"762":1,"769":1,"782":8,"805":17,"809":2,"834":15,"846":1,"865":6,"868":1,"878":1,"892":8,"898":1,"902":2,"925":2,"926":5,"927":2,"951":3,"959":1,"960":1,"962":2,"964":1,"976":1,"994":1,"995":1,"1000":1,"1001":1,"1007":1,"1031":1,"1048":1}}],["❌",{"2":{"4":3,"45":1,"46":4,"62":1,"229":2,"233":2,"237":1,"238":1,"247":1,"253":3,"327":1,"328":1,"448":1,"502":3,"515":3,"523":4}}],["392行",{"2":{"980":1}}],["390",{"2":{"643":1}}],["3x8g9",{"2":{"960":1}}],["3xy12",{"2":{"960":1}}],["3xl",{"2":{"15":2}}],["3b82f6",{"2":{"958":1,"959":1,"960":1,"961":1}}],["320",{"2":{"809":1,"839":1}}],["32个",{"2":{"763":1}}],["32个文件",{"2":{"763":1}}],["321",{"2":{"643":1}}],["3×3",{"2":{"763":1}}],["31kb",{"2":{"763":3}}],["319",{"2":{"728":1}}],["34kb",{"2":{"763":1}}],["3rd",{"2":{"734":1,"735":1,"737":1}}],["3d支持",{"2":{"730":1}}],["3d",{"2":{"728":1,"734":1,"735":5,"741":1,"755":2,"757":5,"761":2,"762":1,"763":11,"766":2,"769":1}}],["3643+",{"2":{"904":1}}],["36",{"2":{"724":1}}],["38",{"2":{"647":1,"763":1}}],["3个月掌握某框架落地",{"2":{"624":1}}],["3~10",{"2":{"519":1}}],["3562行",{"2":{"706":1}}],["35",{"2":{"267":2}}],["3+2",{"2":{"1041":1}}],["3+",{"2":{"203":1}}],["3s",{"2":{"130":1}}],["30分钟的器材锻炼",{"2":{"1047":1}}],["30ms+",{"2":{"784":1}}],["30+",{"2":{"758":1,"908":1}}],["30kb",{"2":{"646":1,"647":1,"763":1}}],["302",{"2":{"523":3}}],["300",{"2":{"575":1,"962":2,"964":1}}],["300+",{"2":{"523":2}}],["3002",{"2":{"288":1}}],["3001",{"2":{"288":1}}],["3000",{"2":{"164":1,"705":1,"715":1,"808":1}}],["30000",{"2":{"146":1,"150":1}}],["30s~60s",{"2":{"131":1}}],["30s",{"2":{"125":1,"146":1,"150":1}}],["30",{"2":{"125":1,"128":2,"169":2,"236":1,"267":2,"268":2,"1026":1,"1036":1,"1045":1,"1047":1,"1048":2}}],["333",{"2":{"958":1,"959":1,"961":1}}],["33个文件",{"2":{"763":1}}],["33kb",{"2":{"647":1,"763":1}}],["33",{"2":{"112":1}}],["3",{"0":{"4":1,"8":1,"10":1,"11":1,"12":1,"15":1,"18":2,"26":1,"46":1,"54":1,"59":1,"63":1,"67":1,"71":1,"75":1,"82":1,"86":1,"89":1,"93":1,"96":1,"97":1,"98":1,"99":1,"104":1,"105":1,"106":1,"107":2,"111":1,"116":1,"121":1,"126":1,"136":1,"140":1,"141":1,"142":1,"143":2,"144":1,"148":1,"154":1,"160":1,"161":1,"162":1,"163":1,"164":2,"168":1,"171":1,"179":1,"189":1,"200":1,"209":1,"211":1,"212":1,"213":1,"214":2,"215":1,"216":1,"217":1,"223":1,"231":1,"235":1,"236":1,"237":1,"238":2,"239":1,"240":1,"244":1,"248":1,"254":1,"260":1,"263":1,"267":1,"276":1,"277":1,"278":1,"279":2,"280":1,"281":1,"282":1,"283":1,"287":1,"296":1,"297":1,"298":1,"299":2,"306":1,"312":1,"319":1,"324":1,"329":1,"335":1,"340":1,"350":1,"359":1,"367":1,"368":1,"369":1,"370":1,"371":2,"374":1,"379":1,"384":1,"393":1,"398":1,"400":1,"404":1,"405":1,"406":1,"407":2,"411":1,"417":1,"425":1,"426":1,"431":1,"436":1,"443":1,"449":1,"455":1,"459":1,"461":1,"463":1,"469":1,"470":1,"471":1,"472":2,"479":1,"480":1,"481":1,"490":1,"494":1,"500":1,"501":1,"502":1,"503":1,"504":1,"506":1,"516":1,"517":1,"518":1,"523":1,"529":1,"530":1,"531":1,"532":1,"533":2,"537":1,"543":1,"547":1,"551":1,"557":1,"558":1,"563":1,"564":1,"565":1,"571":1,"572":1,"573":1,"574":2,"578":1,"582":1,"587":1,"592":1,"596":1,"602":1,"611":1,"622":1,"626":1,"641":1,"647":1,"648":1,"649":1,"650":1,"663":1,"667":1,"672":1,"678":1,"679":1,"680":1,"697":1,"701":1,"706":1,"707":1,"708":1,"709":1,"724":1,"730":1,"735":1,"736":1,"737":1,"738":1,"755":1,"759":1,"763":1,"764":1,"765":1,"766":1,"782":1,"786":1,"790":1,"791":1,"792":1,"810":1,"814":1,"819":1,"820":1,"821":1,"822":1,"840":1,"845":1,"850":1,"852":1,"853":1,"856":1,"860":1,"870":1,"879":1,"903":1,"908":1,"911":1,"912":1,"913":1,"917":1,"931":1,"935":1,"940":1,"941":1,"942":1,"956":1,"959":1,"968":1,"975":1,"980":1,"981":1,"982":1,"983":1,"999":1,"1007":1,"1008":1,"1009":1,"1026":1,"1031":1,"1046":1},"1":{"11":1,"12":1,"13":2,"14":2,"15":2,"16":2,"17":2,"18":1,"27":1,"28":1,"29":1,"87":1,"88":1,"89":1,"94":1,"95":1,"96":1,"98":1,"99":1,"100":2,"101":2,"105":1,"106":1,"107":1,"141":1,"142":1,"143":1,"144":1,"162":1,"163":1,"164":1,"190":1,"191":1,"212":1,"213":1,"214":1,"215":1,"216":1,"236":1,"237":1,"238":1,"239":1,"240":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"297":1,"298":1,"299":1,"300":3,"301":3,"302":3,"369":1,"370":1,"371":1,"372":3,"373":3,"374":3,"375":3,"405":1,"406":1,"407":1,"470":1,"471":1,"472":1,"480":1,"481":1,"501":1,"502":1,"504":1,"505":2,"507":2,"508":2,"517":1,"518":1,"531":1,"532":1,"533":1,"564":1,"565":1,"572":1,"573":1,"574":1,"612":1,"613":1,"614":1,"649":1,"650":1,"679":1,"680":1,"708":1,"709":1,"737":1,"738":1,"765":1,"766":1,"792":1,"793":1,"821":1,"822":1,"853":1,"854":2,"855":2,"856":1,"912":1,"913":1,"941":1,"942":1,"982":1,"983":1,"1008":1,"1009":1},"2":{"16":1,"21":1,"50":1,"74":1,"75":1,"88":1,"92":1,"94":1,"96":1,"98":1,"125":1,"131":1,"141":1,"143":1,"144":1,"150":1,"164":1,"169":1,"171":1,"223":3,"231":1,"254":1,"258":1,"259":1,"261":1,"262":1,"265":1,"281":2,"291":1,"295":6,"304":2,"307":2,"310":1,"313":1,"325":1,"330":1,"340":2,"341":1,"342":1,"344":1,"353":1,"370":1,"441":1,"443":3,"451":3,"464":1,"471":1,"494":2,"504":1,"505":1,"506":3,"521":3,"523":4,"577":1,"581":1,"586":1,"591":1,"631":2,"640":1,"652":1,"677":1,"770":1,"834":2,"866":1,"880":1,"881":1,"891":1,"904":2,"915":1,"936":1,"939":1,"945":1,"947":1,"948":1,"954":1,"964":2,"965":4,"968":1,"970":1,"980":2,"986":1,"987":2,"988":2,"1007":1,"1034":1,"1036":1}}],["扩展注册清单",{"2":{"980":1}}],["扩展多轮对话测试",{"2":{"980":1}}],["扩展连接",{"2":{"860":1}}],["扩展依赖",{"2":{"851":1}}],["扩展通信",{"2":{"850":1,"851":1}}],["扩展生态",{"2":{"762":1}}],["扩展包",{"2":{"735":1}}],["扩展安装注册器",{"2":{"720":1}}],["扩展安装器类型",{"2":{"720":1}}],["扩展安装器契约",{"0":{"720":1}}],["扩展源码",{"2":{"706":1}}],["扩展系统",{"0":{"711":1},"2":{"706":1}}],["扩展工具与曲线系统",{"2":{"763":1}}],["扩展工具",{"2":{"647":1}}],["扩展和",{"2":{"509":1}}],["扩展你的工具栈",{"2":{"463":1}}],["扩展行动边界",{"2":{"412":1}}],["扩展名或在",{"2":{"308":1}}],["扩展",{"2":{"270":1,"342":1,"704":1,"706":1,"708":1,"763":2,"793":1,"845":1,"851":1,"868":1}}],["扩展第三方类型",{"2":{"240":1}}],["扩展性",{"2":{"3":1,"292":1}}],["扩容",{"2":{"3":1}}],["低脂牛奶燕麦",{"2":{"1047":2}}],["低脂牛奶燕麦玉米",{"2":{"1047":1}}],["低级路径",{"2":{"786":1}}],["低代码编辑器",{"2":{"656":1}}],["低代码平台的核心渲染引擎",{"2":{"640":1}}],["低价高质量",{"2":{"523":1}}],["低耦合",{"2":{"297":1,"303":1,"328":1}}],["低耦合的自治单元",{"2":{"179":1}}],["低实时要求",{"2":{"166":1}}],["低频状态同步",{"2":{"166":1}}],["低频上报",{"2":{"111":1}}],["低连接开销",{"2":{"128":1}}],["低延迟地传输数据",{"2":{"113":1}}],["低成本高价值",{"2":{"556":1,"1001":1}}],["低成本私有化部署",{"2":{"512":1}}],["低成本",{"2":{"3":1}}],["低",{"2":{"3":1,"45":1,"166":3,"465":2,"522":4,"965":1}}],["高棉语",{"2":{"786":1,"790":1}}],["高棉语字典分词",{"2":{"784":1}}],["高精度计时器",{"2":{"763":1}}],["高精生图",{"2":{"130":1}}],["高斯模糊滤镜",{"2":{"735":1}}],["高跟鞋",{"2":{"724":1}}],["高亮",{"2":{"706":1}}],["高价值",{"0":{"528":1}}],["高风险操作",{"2":{"527":1}}],["高并发轻量对话",{"2":{"522":1}}],["高并发选退避轮询",{"2":{"166":1}}],["高速低成本",{"2":{"521":1}}],["高阶杠杆",{"2":{"491":1}}],["高阶组件的设计中都有广泛应用",{"2":{"263":1}}],["高可用的工作流",{"2":{"434":1}}],["高效运行的最终产物",{"2":{"969":1}}],["高效的",{"2":{"702":1}}],["高效重试",{"2":{"430":1}}],["高效产出",{"2":{"387":1}}],["高留存用户恰好用了这个功能",{"2":{"366":1}}],["高杠杆解",{"2":{"365":1}}],["高度一致性",{"2":{"962":1}}],["高度",{"2":{"788":1}}],["高度自主",{"2":{"568":1}}],["高度焦虑",{"2":{"465":1}}],["高度烦躁",{"2":{"465":1}}],["高度依赖传统",{"2":{"342":1}}],["高度抽象",{"2":{"98":1}}],["高性能与代码量平衡",{"2":{"812":1}}],["高性能",{"2":{"730":1}}],["高性能渲染",{"2":{"729":1,"814":1}}],["高性能像素渲染",{"2":{"728":1}}],["高性能实时渲染",{"2":{"728":1}}],["高性能互动图形的工程化需求",{"2":{"670":1}}],["高性能构建",{"2":{"343":1}}],["高性能的",{"2":{"342":1}}],["高性能替代者",{"2":{"341":1}}],["高耦合设计",{"2":{"328":1}}],["高内聚",{"2":{"297":1,"303":1,"328":1}}],["高内聚低耦合",{"0":{"328":1},"2":{"283":1}}],["高级材质",{"2":{"763":1}}],["高级曲线",{"2":{"763":1}}],["高级数学",{"2":{"763":1}}],["高级3d对象",{"2":{"763":1}}],["高级着色器",{"2":{"763":1}}],["高级加载器",{"2":{"762":1,"763":1}}],["高级学习",{"2":{"406":1}}],["高级咨询",{"2":{"406":1}}],["高级特性",{"0":{"225":1}}],["高级查询",{"0":{"95":1}}],["高质量代码审查",{"2":{"511":1,"521":1}}],["高质量",{"2":{"169":1,"509":1}}],["高实时性体验",{"2":{"166":1}}],["高实时要求",{"2":{"166":1}}],["高吞吐量的特性",{"2":{"128":1}}],["高频组装引擎",{"2":{"965":1}}],["高频",{"2":{"465":4}}],["高频状态同步",{"2":{"166":1}}],["高频双向",{"2":{"131":1}}],["高频下发",{"2":{"111":1}}],["高频读取",{"2":{"99":1}}],["高互动的终极方案",{"0":{"116":1}}],["高互动",{"2":{"103":1}}],["高德",{"2":{"8":1}}],["高",{"2":{"3":2,"45":1,"166":1,"521":2,"965":1,"971":1}}],["需精通",{"2":{"965":1}}],["需",{"2":{"965":1}}],["需依赖命名规范",{"2":{"965":1}}],["需支持",{"2":{"665":1}}],["需团队共享的操作",{"2":{"580":1}}],["需科学上网",{"2":{"523":4}}],["需包含特定关键词以便",{"2":{"442":1}}],["需规避的反模式",{"2":{"344":1}}],["需编写大量",{"2":{"342":1}}],["需手动拦截",{"2":{"342":1}}],["需配合",{"2":{"341":1}}],["需配置服务器集群",{"2":{"3":1}}],["需定义",{"2":{"341":1}}],["需理解中间件",{"2":{"341":1}}],["需遵守三个边界",{"2":{"200":1}}],["需先理解其三个关键前提",{"2":{"181":1}}],["需先明确其",{"2":{"178":1}}],["需快速响应",{"2":{"166":1}}],["需重新建立长连接",{"2":{"166":1}}],["需注意配置网关超时",{"2":{"166":1}}],["需注意避免",{"2":{"29":1}}],["需管理挂起",{"2":{"166":1}}],["需特定配置",{"2":{"135":1}}],["需自行解析数据流",{"2":{"134":1}}],["需自行集成",{"2":{"59":1}}],["需提供",{"2":{"130":1}}],["需提前创建仓库",{"2":{"17":1}}],["需深刻理解",{"2":{"98":1}}],["需求澄清与设计生成",{"2":{"980":1}}],["需求→设计",{"2":{"979":1}}],["需求翻译机",{"0":{"556":1}}],["需求洞察",{"2":{"553":1}}],["需求挖掘",{"2":{"366":1}}],["需求分析",{"2":{"366":1}}],["需求的查询",{"2":{"349":1}}],["需求边界",{"2":{"201":1}}],["需求应明确说明",{"2":{"187":1}}],["需求是否必须用这个库",{"2":{"194":1}}],["需求是",{"2":{"185":1}}],["需求仅要求",{"2":{"184":1}}],["需求实现",{"0":{"183":1},"1":{"184":1,"185":1}}],["需求拆解与接口语义推敲",{"2":{"169":1}}],["需求",{"2":{"46":1,"193":1,"396":1}}],["需要学习一些知识套路尝试着实践",{"2":{"1042":1}}],["需要养成每天把碎片及时装进日常清单的习惯",{"2":{"1037":1}}],["需要依赖发现",{"2":{"1034":1}}],["需要先看看能不能提高基础概率",{"2":{"1016":1}}],["需要快速迭代的中后台系统或常规",{"2":{"961":1}}],["需要快速搭建后台管理系统的前端工程师",{"2":{"639":1}}],["需要额外的配置和优化成本",{"2":{"959":1}}],["需要统一",{"2":{"933":1}}],["需要不同的",{"2":{"933":1}}],["需要重试",{"2":{"891":1}}],["需要拦截网络",{"2":{"859":1}}],["需要自定义",{"2":{"859":1}}],["需要浏览器",{"2":{"859":1}}],["需要标准化接口",{"2":{"843":1}}],["需要复用已登录会话",{"2":{"843":1}}],["需要进行",{"2":{"832":1}}],["需要进一步验证",{"2":{"366":1}}],["需要制作高视觉效果的交互动画",{"2":{"813":1}}],["需要制作演示文稿",{"2":{"515":1}}],["需要时调用",{"2":{"792":1}}],["需要时间学习和实践",{"2":{"283":1}}],["需要数百行代码绘制一个三角形",{"2":{"757":1}}],["需要高性能",{"2":{"700":1}}],["需要高度并行的项目",{"2":{"342":1}}],["需要交互式探索数据",{"2":{"700":1}}],["需要集成低代码能力的",{"2":{"639":1}}],["需要专门的数据库上下文知识",{"2":{"592":1}}],["需要深入追问",{"2":{"592":1}}],["需要深度专题报告",{"2":{"518":1}}],["需要多人协作审查",{"2":{"592":1}}],["需要独立判断的复杂任务",{"2":{"592":1}}],["需要捍卫的代码",{"2":{"590":1}}],["需要校验和回滚方案",{"2":{"587":1}}],["需要配套文档",{"2":{"587":1}}],["需要配套文档的复杂工作流",{"2":{"585":1}}],["需要配合",{"2":{"203":2}}],["需要固定流程的操作封装起来",{"2":{"583":1}}],["需要替换为你的项目信息",{"2":{"573":1}}],["需要订阅官方模型服务",{"2":{"559":1}}],["需要极强的",{"2":{"531":1}}],["需要实时",{"2":{"518":1}}],["需要做汇报或分享时",{"2":{"515":1}}],["需要分析长文档",{"2":{"510":1}}],["需要联网实时信息",{"2":{"510":1}}],["需要记得前几步的操作结果",{"2":{"485":1}}],["需要包含真实的触发短语",{"2":{"448":1}}],["需要哪些多步骤流程",{"2":{"447":1}}],["需要遵循设计原则修改",{"2":{"445":1}}],["需要遵循以下实践原则",{"2":{"281":1}}],["需要让同一批背景知识持续作用于每一轮对话的长期任务",{"2":{"437":1}}],["需要继续",{"2":{"429":1}}],["需要长程推理的任务",{"2":{"414":1}}],["需要理论学习和大量实践",{"2":{"400":1}}],["需要平衡广告商的外部收益",{"2":{"399":1}}],["需要敏锐地判断哪个方案不仅可行",{"2":{"359":1}}],["需要同时掌握",{"2":{"964":1}}],["需要同时为多种不同客户端提供高灵活性",{"2":{"342":1}}],["需要同时支持",{"2":{"306":1}}],["需要精细化控制网络请求拦截器的中大型企业级项目",{"2":{"342":1}}],["需要精细化控制请求头",{"2":{"342":1}}],["需要权衡项目的规模",{"2":{"292":1}}],["需要处理大量表单提交",{"2":{"342":1}}],["需要处理子应用的加载",{"2":{"292":1}}],["需要处理聚合事务",{"2":{"283":1}}],["需要处理特定基本类型的场景",{"2":{"270":1}}],["需要团队具备较强的架构能力和协作能力",{"2":{"292":1}}],["需要团队成员对业务有深入理解",{"2":{"283":1}}],["需要团队自行建立严格的",{"2":{"98":1}}],["需要泛型参数具备多种能力的场景",{"2":{"270":1}}],["需要从四个方面来把握",{"2":{"254":1}}],["需要安装以下依赖",{"2":{"221":1}}],["需要严格的类型约束与变更追踪",{"2":{"178":1}}],["需要简洁的客户端实现",{"2":{"167":1}}],["需要特别注意并配置中间网关",{"2":{"164":1}}],["需要字符串",{"2":{"153":1}}],["需要主动断开连接",{"2":{"149":1}}],["需要用更具工程表达能力的预处理器",{"2":{"968":1}}],["需要用到哪些领域知识与规则",{"2":{"447":1}}],["需要用到请求",{"2":{"89":1}}],["需要用标志位防止重复触发",{"2":{"148":1}}],["需要在项目中快速添加复杂交互动画",{"2":{"813":1}}],["需要在产品中快速集成专业可视化图表",{"2":{"700":1}}],["需要在秒级获得任务完成反馈",{"2":{"167":1}}],["需要在",{"2":{"147":1}}],["需要按行读取并组装完整事件",{"2":{"143":1}}],["需要维护一个缓冲区",{"2":{"143":1}}],["需要维持",{"2":{"125":1}}],["需要持续读取直到流结束",{"2":{"143":1}}],["需要更精细的状态管理",{"2":{"141":1}}],["需要缓存不完整的行",{"2":{"141":1}}],["需要",{"2":{"45":3,"54":1,"203":1,"287":1,"366":1,"523":1,"729":1,"780":1,"859":1,"866":1}}],["需要后端",{"2":{"4":1}}],["需等",{"2":{"45":1}}],["需额外集成",{"2":{"19":1}}],["需用户介入",{"2":{"101":1}}],["需用",{"2":{"15":1}}],["需通过",{"2":{"8":1}}],["需服务器运维",{"2":{"3":1}}],["需防护",{"2":{"3":1}}],["需运行应用服务",{"2":{"3":1}}],["网格",{"2":{"763":2}}],["网盘资源查找",{"2":{"518":1}}],["网盘资源检索",{"2":{"518":1}}],["网页链接",{"2":{"515":1}}],["网页或文档",{"2":{"515":1}}],["网页",{"2":{"514":1,"515":2}}],["网页理解等多种能力",{"2":{"511":1}}],["网页浏览",{"2":{"414":1}}],["网关返回的错误响应",{"2":{"873":1}}],["网关兼容性",{"2":{"166":1}}],["网关会主动切断连接并返回",{"2":{"125":1}}],["网关",{"2":{"125":1,"131":1}}],["网络拦截",{"2":{"858":1}}],["网络拦截器",{"2":{"851":1}}],["网络缓存",{"2":{"851":1,"858":1}}],["网络工具",{"2":{"851":1}}],["网络环境",{"2":{"519":1}}],["网络关系",{"2":{"398":1}}],["网络错误",{"2":{"370":1}}],["网络博客",{"2":{"346":1}}],["网络恢复时重试",{"2":{"342":1}}],["网络恢复后",{"2":{"127":1}}],["网络异常",{"2":{"164":1}}],["网络或解析错误",{"2":{"160":1}}],["网络故障或由于短时间高频请求触发限流",{"2":{"158":1}}],["网络不稳定时",{"2":{"146":1}}],["网络机制",{"0":{"110":1,"115":1}}],["网络特征",{"2":{"103":1,"105":1}}],["网络请求步骤",{"2":{"851":1}}],["网络请求拦截",{"2":{"849":1}}],["网络请求",{"2":{"96":1,"851":1}}],["网络重连时自动更新数据",{"2":{"91":1}}],["网络重连",{"2":{"85":1}}],["网络延迟影响",{"2":{"3":1}}],["网站分析",{"2":{"851":2}}],["网站适配器执行流程",{"0":{"863":1}}],["网站适配器或内置命令",{"2":{"856":1}}],["网站适配器目录",{"2":{"851":1}}],["网站适配器",{"2":{"849":1,"850":1,"851":1}}],["网站适配器可以独立开发和注册",{"2":{"848":1}}],["网站适配器和",{"2":{"848":1}}],["网站自动化开发者",{"2":{"843":1}}],["网站操作自动化困难",{"2":{"843":1}}],["网站",{"2":{"21":1,"562":1,"844":1,"851":1}}],["网站部署前",{"2":{"2":1}}],["仅开发依赖",{"2":{"885":1}}],["仅计数",{"2":{"797":1}}],["仅被",{"2":{"788":1}}],["仅高度",{"2":{"786":1}}],["仅引入核心",{"2":{"725":1}}],["仅核心功能",{"2":{"706":1}}],["仅核心基建",{"2":{"679":1}}],["仅筛选与目标强相关的信息",{"2":{"624":1}}],["仅停留在",{"2":{"622":1}}],["仅靠抽象逻辑是无法解决复杂现实问题的",{"2":{"614":1}}],["仅靠手机号",{"2":{"181":1}}],["仅凭逻辑推演确实可以成就",{"2":{"614":1}}],["仅跨项目通用的操作放在",{"2":{"583":1}}],["仅包含游标范围",{"2":{"793":1}}],["仅包含",{"2":{"472":1}}],["仅使用",{"2":{"470":1,"472":1}}],["仅通过内嵌模板和检查表即可实现",{"2":{"453":1}}],["仅接收执行结果反馈",{"2":{"443":1}}],["仅检索",{"2":{"443":1}}],["仅将执行结果返回给",{"2":{"443":1}}],["仅将所有技能的",{"2":{"443":1}}],["仅负责读取研究笔记",{"2":{"416":1}}],["仅有",{"2":{"577":1}}],["仅有批判性思维",{"2":{"366":1}}],["仅有同理心",{"2":{"366":1}}],["仅仅看作是",{"2":{"364":1}}],["仅处理鉴权状态与逻辑",{"2":{"327":1}}],["仅处理用户数据的",{"2":{"327":1}}],["仅类型",{"2":{"318":1}}],["仅含",{"2":{"227":1}}],["仅用于类型检查",{"2":{"821":1}}],["仅用于维护旧代码或编写特定的全局",{"2":{"320":1}}],["仅用于",{"2":{"216":1}}],["仅用于等待最终一个图片",{"2":{"124":1}}],["仅做类型检查",{"2":{"203":1}}],["仅暴露调用者需使用的用户id",{"2":{"197":1}}],["仅暴露必要的输入",{"2":{"170":1}}],["仅保留必要信息",{"2":{"197":1}}],["仅保留当前需求的字段",{"2":{"185":1}}],["仅返回调用者需要的信息",{"2":{"197":1}}],["仅字符串判空",{"2":{"193":1}}],["仅1个本地文件存储",{"2":{"190":1}}],["仅1个查询服务",{"2":{"190":1}}],["仅1个student实体",{"2":{"190":1}}],["仅为必用字段提供getter",{"2":{"185":1}}],["仅当多个方案能实现相同的功能",{"2":{"181":1}}],["仅对真正需要的子孙暴露接口",{"2":{"174":1}}],["仅",{"2":{"142":1,"169":1,"790":1,"792":1,"793":1}}],["仅在",{"2":{"988":1}}],["仅在处理相关任务时动态激活这些能力",{"2":{"547":1}}],["仅在需要兼容老旧环境时使用",{"2":{"308":1}}],["仅在需要引用其他项目时使用",{"2":{"210":1}}],["仅在需要时通过",{"2":{"2":1}}],["仅在完成后返回结果",{"2":{"131":1}}],["仅支持",{"2":{"112":2,"135":1,"873":1,"898":1}}],["仅限",{"2":{"106":1,"135":1}}],["仅交互",{"2":{"62":1}}],["仅附加事件处理器和内部状态",{"2":{"58":1}}],["仅提供静态资源",{"2":{"45":1}}],["仅需极简",{"2":{"344":1}}],["仅需补充以下步骤",{"2":{"18":1}}],["仅需",{"2":{"3":1,"193":1}}],["无健康意识",{"2":{"1022":1}}],["无失败测试=无产品代码",{"2":{"980":1}}],["无痛穿透并覆写第三方组件",{"2":{"965":1}}],["无痛溢出",{"0":{"529":1}}],["无运行时开销",{"2":{"904":1}}],["无运行时依赖",{"2":{"885":1}}],["无缓动恒等函数",{"2":{"819":1}}],["无编译步骤",{"2":{"815":1}}],["无文本内容",{"2":{"805":1}}],["无字符串分配",{"2":{"805":1,"806":1}}],["无字符串操作",{"2":{"798":1}}],["无特殊段类型",{"2":{"797":1}}],["无渲染器依赖",{"2":{"765":1}}],["无几何体",{"2":{"763":1}}],["无表达式",{"2":{"735":3}}],["无样式数据",{"2":{"735":1}}],["无损缩放",{"2":{"728":1,"755":1}}],["无障碍标签",{"2":{"715":1}}],["无障碍",{"2":{"706":1}}],["无障碍访问",{"2":{"706":1}}],["无交互图层优化",{"2":{"677":1}}],["无用的噪音占满",{"2":{"621":1}}],["无形资产",{"2":{"605":1}}],["无形界面",{"2":{"367":1}}],["无形界面设计",{"2":{"367":1}}],["无身份的技能执行",{"2":{"592":1}}],["无关",{"2":{"915":1}}],["无关的工具调用循环",{"2":{"903":1}}],["无关紧要的偏好问题",{"2":{"591":1}}],["无关噪音时",{"2":{"410":1}}],["无疑是最具代表性的工具",{"2":{"569":1}}],["无官方订阅",{"2":{"568":1}}],["无订阅则用",{"2":{"568":1}}],["无代码应用搭建",{"2":{"562":1}}],["无代码全栈",{"2":{"561":1}}],["无数据出境风险",{"2":{"519":1}}],["无干扰信息获取",{"2":{"518":1}}],["无害为核心理念",{"2":{"511":1}}],["无须时刻盯着",{"2":{"402":1}}],["无管理的管理",{"2":{"387":1}}],["无差别的",{"2":{"359":1}}],["无缝联动",{"2":{"515":1}}],["无缝对接微信",{"2":{"512":1}}],["无缝集成",{"2":{"511":1}}],["无缝",{"2":{"344":1}}],["无限集",{"2":{"227":2}}],["无效信息是对算力的极大消耗",{"0":{"621":1}}],["无效的语法等",{"2":{"219":1}}],["无效行",{"2":{"143":1}}],["无多数据源",{"2":{"190":1}}],["无复杂流程",{"2":{"190":1}}],["无业务逻辑",{"2":{"190":1}}],["无作用的代码片段",{"2":{"186":1}}],["无明确需求的",{"2":{"185":1}}],["无价值的复杂性",{"2":{"182":1}}],["无验证",{"2":{"181":1}}],["无冗余无泄漏",{"2":{"177":1}}],["无泄漏下沉",{"2":{"174":1}}],["无副作用",{"2":{"171":1}}],["无严格实时要求",{"2":{"166":1}}],["无连接挂起",{"2":{"166":1}}],["无感知的物理隔离",{"2":{"961":1}}],["无感知",{"2":{"142":1}}],["无法从根本上解决全局命名冲突的问题",{"2":{"958":1}}],["无法执行任意代码",{"2":{"935":1}}],["无法直接操作客户端",{"2":{"933":1}}],["无法直接查看有意义的变量值和调用栈",{"2":{"217":1}}],["无法安全操控",{"2":{"933":1}}],["无法优雅处理",{"2":{"873":1}}],["无法发送请求体",{"2":{"873":1}}],["无法在",{"2":{"785":1}}],["无法在短期内看到正向反馈",{"2":{"617":1}}],["无法落盘",{"2":{"622":1}}],["无法触发",{"2":{"448":1}}],["无法触达的",{"2":{"375":1}}],["无法构成生生不息的系统",{"2":{"385":1}}],["无法学习",{"2":{"368":1}}],["无法使用",{"2":{"333":1,"873":1}}],["无法推断具体类型",{"2":{"253":1}}],["无法赋值",{"2":{"237":1}}],["无法确定当前值具体是哪个成员类型",{"2":{"229":1}}],["无法解析",{"2":{"141":1}}],["无法处理多行数据",{"2":{"141":1}}],["无法自定义请求头",{"2":{"873":1}}],["无法自定义",{"2":{"140":1}}],["无法传递认证令牌",{"2":{"873":1}}],["无法传",{"2":{"135":1}}],["无法灵活地在请求头中添加",{"2":{"135":1}}],["无法主动推送",{"2":{"103":1}}],["无标准格式约定",{"2":{"134":1}}],["无固定耗时",{"2":{"130":1}}],["无排队压力",{"2":{"130":1}}],["无状态的短连接模式让服务器能够承载更高的吞吐量",{"2":{"131":1}}],["无状态的短连接模式能让服务器吞吐量提升数个量级",{"2":{"125":1}}],["无状态特性带来了卓越的抗干扰能力",{"2":{"127":1}}],["无论项目多大",{"2":{"967":1}}],["无论上层使用什么技术栈",{"2":{"966":1}}],["无论选哪家",{"2":{"523":1}}],["无论你是用react",{"2":{"345":1}}],["无论被",{"2":{"314":1}}],["无论是探讨全栈",{"2":{"1004":1}}],["无论是坚持",{"2":{"615":1}}],["无论是精通前端交互",{"2":{"552":1}}],["无论是长文抓取",{"2":{"547":1}}],["无论是基于全局文档回答复杂问题",{"2":{"417":1}}],["无论是发布一个新功能",{"2":{"388":1}}],["无论是使用自家产品还是生活中的琐事",{"2":{"370":1}}],["无论是主动还是被动的",{"2":{"360":1}}],["无论是在浏览器端",{"2":{"316":1}}],["无论是单体项目还是",{"2":{"226":1}}],["无论是频繁发起连接的短轮询",{"2":{"103":1}}],["无论是个人博客",{"2":{"20":1}}],["无论成功还是失败",{"2":{"96":1}}],["无论成功失败",{"2":{"96":1}}],["无白屏",{"2":{"85":1,"100":1}}],["无影响",{"2":{"45":3}}],["无异",{"2":{"29":1}}],["无实际内容",{"2":{"23":1}}],["无头苍蝇式的忙碌",{"2":{"1040":1}}],["无头",{"0":{"9":1}}],["无自建后端",{"2":{"8":1}}],["无服务器计算",{"2":{"31":1}}],["无服务器函数等功能",{"2":{"345":1}}],["无服务器函数",{"2":{"7":1,"8":1}}],["无服务器端代码",{"2":{"3":1}}],["无页面渲染逻辑",{"2":{"4":1}}],["无动态交互",{"2":{"4":1}}],["无需解析",{"2":{"976":1}}],["无需任何",{"2":{"975":1}}],["无需用户手动操作",{"2":{"975":1}}],["无需用户确认即可自动执行的工具列表",{"2":{"482":1}}],["无需隔离",{"2":{"965":1}}],["无需为每个组件硬编码属性处理逻辑",{"2":{"946":1}}],["无需编写新的数据绑定代码",{"2":{"936":1}}],["无需编写自定义",{"2":{"340":1}}],["无需了解底层渲染细节",{"2":{"700":1}}],["无需重新发布",{"2":{"640":1}}],["无需太多社会经验的领域",{"2":{"614":1}}],["无需请求确认即可执行的命令或操作",{"2":{"594":1}}],["无需搭建开发环境",{"2":{"561":1}}],["无需搭建推理基础设施",{"2":{"523":1}}],["无需每次提示都包含所有技能",{"2":{"547":1}}],["无需管理多个",{"2":{"523":1}}],["无需切换产品的日常搜索",{"2":{"518":1}}],["无需切换产品即可体验",{"2":{"518":1}}],["无需人工确认修改",{"2":{"484":1}}],["无需外部工具",{"2":{"453":1}}],["无需再调用工具",{"2":{"427":1}}],["无需预设计划",{"2":{"425":1}}],["无需奢华的办公场地",{"2":{"378":1}}],["无需安装第三方包",{"2":{"342":1}}],["无需修改现有代码",{"2":{"292":1}}],["无需依赖",{"2":{"194":1}}],["无需求依据的默认值",{"2":{"187":1}}],["无需暂存",{"2":{"187":1}}],["无需费力猜测上下文",{"2":{"179":1}}],["无需引入长连接复杂度",{"2":{"130":1}}],["无需维护持久连接",{"2":{"119":1,"131":1}}],["无需像",{"2":{"115":1}}],["无需手写绑定逻辑",{"2":{"935":1}}],["无需手写骨架屏逻辑",{"2":{"66":1}}],["无需手动操作",{"2":{"699":1}}],["无需手动处理",{"2":{"146":1}}],["无需手动管理",{"2":{"91":1}}],["无需整页刷新",{"2":{"74":1}}],["无需额外组件",{"2":{"166":1}}],["无需额外声明",{"2":{"61":1}}],["无需额外的运行时支持",{"2":{"339":1}}],["无需额外的",{"2":{"60":1}}],["无需额外配置服务器即可快速部署个人主页",{"2":{"345":1}}],["无需额外配置",{"2":{"17":1,"131":1}}],["无需",{"2":{"45":1,"61":1,"167":1}}],["无需等待对方请求或确认",{"2":{"115":1}}],["无需等待动态数据",{"2":{"45":1}}],["无需等待",{"2":{"27":1}}],["无需关心后端运维",{"2":{"20":1}}],["无需后端渲染",{"2":{"19":1}}],["无需后端服务器动态生成页面",{"2":{"2":1}}],["无需部署独立",{"2":{"8":1}}],["无需自建服务器",{"2":{"7":1}}],["无需运维服务器",{"2":{"3":1}}],["无",{"2":{"3":1,"134":1,"138":3,"650":2,"789":2,"797":1,"798":2,"860":4,"866":1,"904":2,"965":1}}],["2篇专刊会",{"2":{"1048":1}}],["217",{"2":{"965":1}}],["21",{"2":{"846":1,"868":1}}],["21kb",{"2":{"763":4}}],["2公共",{"0":{"806":1}}],["2×2",{"2":{"763":1}}],["221",{"2":{"965":1,"966":1}}],["2211行",{"2":{"706":1}}],["22",{"2":{"904":1,"929":1}}],["22kb",{"2":{"763":2}}],["28kb",{"2":{"763":1}}],["289",{"2":{"728":1}}],["28",{"2":{"701":1,"706":2}}],["2d",{"2":{"670":2,"671":1,"683":1,"728":1,"734":1,"735":4,"763":3,"766":1,"796":1}}],["29kb",{"2":{"647":1}}],["23",{"2":{"701":1,"706":2,"728":1,"904":1,"908":1}}],["23kb",{"2":{"647":1}}],["237+",{"2":{"643":1}}],["27kb",{"2":{"646":1,"647":1,"763":2}}],["27",{"0":{"526":1},"1":{"527":1,"528":1,"529":1},"2":{"525":1,"526":2}}],["24px",{"2":{"796":1}}],["24kb",{"2":{"763":1}}],["24",{"2":{"419":2,"904":1,"929":1}}],["24h",{"2":{"407":1}}],["255",{"2":{"828":1}}],["25个文件",{"2":{"763":2}}],["25kb",{"2":{"646":1,"647":1,"763":2}}],["25",{"2":{"267":2,"728":1}}],["2秒",{"2":{"160":1}}],["2s",{"2":{"146":1,"150":1,"961":1}}],["2xx",{"2":{"121":1}}],["2xl",{"2":{"15":1,"16":1}}],["204",{"2":{"860":1}}],["20px",{"2":{"828":3}}],["20个",{"2":{"763":1}}],["20kb",{"2":{"763":2}}],["2016",{"2":{"735":1}}],["2015年启动",{"2":{"731":1}}],["2015",{"2":{"307":1}}],["20+",{"2":{"730":1,"735":1,"751":1,"786":1,"790":2}}],["2020",{"2":{"1049":1}}],["2021",{"0":{"1048":1},"2":{"1031":1}}],["2026",{"2":{"980":1}}],["20260328",{"2":{"474":1}}],["2025",{"2":{"441":1,"518":1,"525":1,"980":1}}],["2022年执行良好",{"2":{"1026":1}}],["2022",{"2":{"331":3,"1008":1,"1032":1}}],["2023",{"2":{"331":1,"1000":1,"1005":1,"1011":1,"1016":1,"1026":1}}],["202",{"2":{"163":1}}],["200k",{"2":{"437":1,"511":1}}],["2000",{"2":{"144":1,"160":1,"705":1,"715":1,"778":1,"873":1,"879":1}}],["200",{"2":{"105":1,"139":1,"163":1,"196":1,"197":1,"260":1,"572":1,"689":1,"819":1,"866":6,"962":3}}],["200ms",{"2":{"47":1,"74":1,"124":1}}],["20",{"2":{"94":2,"366":1,"555":1,"642":1,"672":1,"677":1,"724":2,"809":1,"902":1,"904":1,"929":1,"1036":2,"1046":1,"1047":1}}],["2",{"0":{"3":1,"5":1,"6":1,"7":2,"8":1,"9":1,"12":1,"14":1,"22":1,"53":1,"58":1,"60":1,"61":1,"62":2,"66":1,"70":1,"81":1,"88":1,"90":1,"91":1,"92":2,"93":1,"95":1,"99":1,"103":1,"106":1,"110":1,"115":1,"120":1,"125":1,"131":1,"135":1,"137":1,"138":1,"139":2,"142":1,"147":1,"153":1,"157":1,"158":1,"159":2,"160":1,"163":1,"167":1,"170":1,"174":1,"178":1,"182":1,"183":1,"186":2,"189":1,"192":1,"195":1,"198":1,"204":1,"205":1,"206":1,"208":1,"210":2,"213":1,"220":1,"221":1,"222":2,"223":1,"224":1,"225":1,"228":1,"229":1,"230":2,"231":1,"232":1,"233":1,"234":1,"237":1,"243":1,"247":1,"253":1,"257":1,"258":1,"259":2,"260":1,"261":1,"262":1,"266":1,"273":1,"274":1,"275":2,"276":1,"277":1,"278":2,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":2,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"295":1,"298":1,"305":1,"311":1,"318":1,"328":1,"334":1,"339":1,"349":1,"353":1,"358":1,"364":1,"365":1,"366":2,"367":1,"370":1,"373":1,"378":1,"383":1,"392":1,"395":1,"396":1,"397":2,"398":1,"399":1,"403":1,"406":1,"410":1,"415":1,"422":1,"423":1,"424":2,"425":1,"430":1,"435":1,"442":1,"446":1,"448":1,"454":1,"458":1,"459":1,"460":2,"461":1,"462":1,"468":1,"471":1,"475":1,"478":1,"481":1,"484":1,"489":1,"493":1,"497":1,"498":1,"499":2,"502":1,"506":1,"508":1,"512":1,"513":1,"514":1,"515":2,"518":1,"520":1,"521":1,"522":2,"526":1,"527":1,"528":2,"529":1,"532":1,"536":1,"542":1,"544":1,"545":1,"546":2,"547":1,"548":1,"549":1,"550":1,"554":1,"555":1,"556":2,"557":1,"560":1,"561":1,"562":2,"565":1,"568":1,"570":1,"573":1,"577":1,"581":1,"586":1,"591":1,"595":1,"599":1,"600":1,"601":2,"607":1,"618":1,"619":1,"620":1,"621":2,"625":1,"640":1,"644":1,"645":1,"646":2,"647":1,"650":1,"662":1,"666":1,"671":1,"674":1,"675":1,"680":1,"696":1,"700":1,"703":1,"704":1,"705":2,"706":1,"709":1,"723":1,"729":1,"732":1,"733":1,"734":2,"735":1,"738":1,"750":1,"754":1,"758":1,"760":1,"761":1,"762":2,"763":1,"766":1,"781":1,"785":1,"787":1,"788":1,"789":2,"790":1,"793":2,"809":1,"813":1,"816":1,"817":1,"818":2,"819":1,"822":1,"835":1,"839":1,"844":1,"847":1,"848":1,"849":2,"850":1,"851":1,"856":1,"859":1,"863":1,"866":1,"869":1,"878":1,"892":1,"902":1,"905":1,"906":1,"907":2,"908":1,"909":1,"910":1,"913":1,"916":1,"923":1,"926":1,"930":1,"934":1,"937":1,"938":1,"939":2,"942":1,"952":1,"955":1,"958":1,"967":1,"974":1,"977":1,"978":1,"979":2,"980":1,"983":1,"995":1,"998":1,"1006":1,"1009":1,"1012":1,"1025":1,"1030":1,"1035":1,"1041":1,"1045":1},"1":{"6":1,"7":1,"8":1,"9":1,"13":1,"14":1,"15":1,"16":1,"17":1,"23":1,"24":1,"25":1,"61":1,"62":1,"91":1,"92":1,"93":1,"94":2,"95":2,"96":2,"100":1,"101":1,"138":1,"139":1,"158":1,"159":1,"160":1,"183":1,"184":2,"185":2,"186":1,"187":3,"188":3,"189":1,"190":2,"191":2,"192":1,"193":2,"194":2,"195":1,"196":2,"197":2,"198":1,"199":2,"206":1,"207":2,"208":2,"209":2,"210":1,"221":1,"222":1,"223":1,"224":1,"225":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"258":1,"259":1,"260":1,"261":1,"262":1,"274":1,"275":1,"276":1,"277":2,"278":2,"279":2,"280":2,"281":2,"282":2,"283":2,"284":1,"285":2,"286":2,"287":2,"288":2,"289":2,"290":2,"291":2,"292":2,"365":1,"366":1,"367":1,"396":1,"397":1,"398":1,"399":1,"416":1,"423":1,"424":1,"425":1,"447":1,"448":1,"449":1,"450":1,"459":1,"460":1,"461":1,"462":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"498":1,"499":1,"507":1,"508":1,"514":1,"515":1,"521":1,"522":1,"527":1,"528":1,"529":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"555":1,"556":1,"557":1,"561":1,"562":1,"600":1,"601":1,"608":1,"609":1,"610":1,"620":1,"621":1,"645":1,"646":1,"647":1,"675":1,"676":1,"677":1,"704":1,"705":1,"706":1,"733":1,"734":1,"735":1,"761":1,"762":1,"763":1,"788":1,"789":1,"790":1,"817":1,"818":1,"819":1,"848":1,"849":1,"850":1,"851":1,"906":1,"907":1,"908":1,"909":1,"910":1,"938":1,"939":1,"978":1,"979":1,"980":1,"1013":1,"1014":1,"1015":1,"1016":1,"1017":1,"1036":1,"1037":1,"1038":1},"2":{"13":1,"15":2,"16":2,"21":1,"88":1,"89":1,"92":3,"94":1,"96":1,"99":1,"112":1,"115":1,"117":1,"128":1,"131":1,"136":1,"141":1,"143":2,"144":2,"146":1,"150":1,"154":1,"159":1,"169":1,"171":1,"223":3,"227":1,"230":2,"231":4,"232":1,"238":2,"254":1,"258":1,"259":3,"260":1,"261":1,"266":1,"281":1,"295":4,"304":2,"307":2,"313":1,"325":1,"329":1,"331":1,"342":1,"411":1,"439":1,"443":2,"449":1,"451":3,"464":1,"471":1,"472":1,"494":2,"504":1,"505":1,"506":6,"508":1,"581":1,"586":1,"591":1,"631":2,"640":1,"643":1,"646":1,"652":1,"699":2,"706":1,"757":1,"758":1,"761":1,"762":2,"763":4,"765":1,"768":1,"770":1,"778":1,"819":1,"827":1,"834":4,"860":1,"880":1,"881":1,"891":1,"904":1,"915":1,"939":1,"945":1,"947":1,"948":1,"958":1,"959":1,"962":1,"964":3,"965":5,"970":2,"980":3,"983":1,"986":1,"987":2,"988":1,"994":1,"1007":1,"1026":1,"1027":1,"1036":2}}],["cc",{"2":{"980":3}}],["ccdik",{"2":{"763":1}}],["cjk",{"2":{"784":1,"789":2,"792":1,"793":1,"795":4,"796":1,"805":2}}],["cjs+esm",{"2":{"882":1}}],["cjsdefault",{"2":{"333":1}}],["cjs",{"2":{"272":1,"298":1,"333":10,"335":1,"337":1,"702":1,"735":1,"751":7,"763":1,"785":1,"815":1,"819":2,"836":1,"851":2,"887":3,"980":1,"987":1}}],["cva",{"0":{"964":1},"2":{"964":9,"965":5,"967":2,"971":4}}],["cvtransformeffect",{"2":{"735":1}}],["cvtextelement",{"2":{"734":1,"735":1}}],["cvmaskelement",{"2":{"735":1}}],["cvcontextdata",{"2":{"735":1,"741":1}}],["cvcompbaseelement",{"2":{"735":1}}],["cvcompelement",{"2":{"734":1,"735":1,"741":1}}],["cvbaseelement",{"2":{"735":1}}],["cveffects",{"2":{"734":1,"735":1,"737":1}}],["cvshapedata",{"2":{"735":1}}],["cvshapeelement",{"2":{"734":1,"735":1}}],["cvsolidelement",{"2":{"734":1,"735":1}}],["cvimageelement",{"2":{"734":1,"735":1}}],["center",{"2":{"835":2,"839":1,"962":1,"963":1,"964":2}}],["cell",{"2":{"790":1}}],["cellheight",{"2":{"714":1}}],["cellwidth",{"2":{"714":1}}],["ceo",{"2":{"375":1,"1041":1}}],["cylindrical",{"2":{"763":1}}],["cylindergeometry",{"2":{"763":1}}],["cy",{"2":{"714":2}}],["cx",{"2":{"714":2}}],["cxd",{"2":{"647":1}}],["cta",{"2":{"962":1}}],["ctx",{"2":{"661":1,"662":1,"663":3,"692":1}}],["ctrl",{"2":{"144":2,"146":2,"148":1,"149":3,"150":5,"878":2}}],["cmd",{"2":{"859":2,"866":1,"980":1,"985":1,"997":1}}],["cmd+k",{"2":{"564":2,"565":1}}],["cms",{"0":{"9":1},"2":{"5":1,"9":1,"36":1}}],["cn",{"2":{"456":2,"706":1,"735":1,"851":1,"964":2}}],["cny",{"2":{"281":1}}],["cpu",{"2":{"344":2}}],["cb",{"2":{"289":2,"719":1,"798":1,"825":1}}],["c=",{"2":{"243":2}}],["cuttable",{"2":{"939":1,"947":2}}],["cunning",{"2":{"790":1}}],["cube",{"2":{"766":1,"782":4}}],["cubetexture",{"2":{"763":1}}],["cuberendertarget",{"2":{"763":1}}],["cubemap",{"2":{"763":2}}],["cubecamera",{"2":{"763":1}}],["cubicbezier",{"2":{"819":1,"821":1,"835":1}}],["cubic",{"2":{"763":1,"772":1,"818":1,"819":2,"821":1}}],["cullface",{"2":{"763":1}}],["curves",{"2":{"763":2}}],["curvepath",{"2":{"763":1}}],["curve",{"2":{"763":1}}],["curl",{"2":{"594":1}}],["cursorsessionstartoutput",{"2":{"994":2}}],["cursor",{"2":{"542":1,"553":1,"557":1,"559":1,"564":4,"565":3,"790":2,"793":2,"843":1,"844":1,"958":1,"959":1,"961":1,"964":1,"978":1,"979":2,"980":4,"983":1,"985":4,"994":2,"997":1}}],["currentprops",{"2":{"946":1,"951":1}}],["currentiteration",{"2":{"834":2}}],["currenttime",{"2":{"818":1,"824":1,"827":1,"834":3}}],["currenttarget",{"2":{"692":1}}],["currentrawframe",{"2":{"749":1}}],["currentframe",{"2":{"749":1}}],["current",{"2":{"289":1,"818":1,"825":1,"938":1}}],["currentdelay",{"2":{"160":3}}],["currencymismatcherror",{"2":{"281":1}}],["currency",{"2":{"281":11}}],["cup",{"2":{"227":1}}],["customextinstaller",{"2":{"711":1}}],["customerid",{"2":{"281":9}}],["customview",{"2":{"706":1}}],["customseriesrenderitem",{"2":{"720":1}}],["customseries",{"2":{"706":1}}],["custom",{"2":{"87":1,"169":1,"170":1,"178":1,"240":1,"481":6,"705":1,"706":1,"715":1,"939":3,"966":1}}],["choices",{"2":{"865":1}}],["chordview",{"2":{"706":1}}],["chordseries",{"2":{"706":1}}],["chord",{"2":{"706":1}}],["chore",{"2":{"451":1,"581":1}}],["chromium",{"2":{"849":1,"868":1}}],["chrome",{"2":{"338":2,"542":1,"673":1,"786":2,"790":9,"796":4,"805":2,"846":2,"849":1,"858":2,"860":2,"868":1}}],["chughd",{"2":{"790":1}}],["chunklist",{"2":{"713":1}}],["chunking",{"2":{"546":1}}],["chunked",{"2":{"105":1,"134":1}}],["chunks",{"2":{"74":1,"105":1,"793":1,"795":1,"805":1}}],["chunk",{"2":{"53":2,"54":1,"141":1,"143":2,"941":1,"947":4}}],["chip",{"2":{"790":1,"799":1,"805":1,"810":1}}],["childlist",{"2":{"939":1}}],["childtime",{"2":{"827":1}}],["childtype>",{"2":{"692":1}}],["childtype",{"2":{"692":3}}],["child",{"2":{"827":1}}],["childstore",{"2":{"653":2}}],["children",{"2":{"169":1,"170":1,"649":2,"676":3,"680":1,"692":3,"749":1,"769":1,"777":1,"818":1,"960":2,"962":2}}],["chenglou",{"2":{"790":2,"809":2,"810":1}}],["checkable",{"2":{"946":3}}],["checkbox",{"2":{"939":1}}],["checkforupdatebackground",{"2":{"855":1}}],["checklayers",{"2":{"741":2,"749":1}}],["checklist",{"0":{"450":1}}],["checktype",{"2":{"723":1}}],["checkskills",{"2":{"986":1}}],["checks",{"2":{"482":1,"946":1}}],["check",{"2":{"470":1,"790":8,"808":1,"851":1,"930":1,"986":1}}],["checkout",{"2":{"451":1}}],["check装饰器",{"2":{"188":1}}],["chance",{"2":{"986":1}}],["change",{"2":{"904":1}}],["changeduration",{"2":{"834":1}}],["changelog",{"2":{"331":3,"583":1,"588":1,"677":1,"735":1,"763":2,"790":1,"882":1}}],["changesets",{"2":{"904":1}}],["changes",{"2":{"101":1}}],["chai",{"2":{"819":1}}],["chainable",{"2":{"818":1,"819":1,"821":1}}],["chain",{"2":{"426":1}}],["chalk",{"2":{"483":3,"484":1,"488":2,"489":1,"490":2}}],["chart",{"2":{"705":3,"706":2,"715":3,"724":2}}],["chartviewclass",{"2":{"720":1}}],["chartview",{"2":{"704":1,"705":1,"706":1,"708":1,"709":2,"711":1,"720":3}}],["charts",{"2":{"313":1,"471":2,"472":2,"474":1,"725":1}}],["charlie",{"2":{"259":2,"267":2}}],["charset",{"2":{"203":1}}],["chatexample",{"2":{"489":2}}],["chat",{"0":{"917":1},"2":{"144":1,"489":2,"523":1,"790":4,"909":1,"916":1,"917":2}}],["chatgpt或沉迷于",{"2":{"371":1}}],["chatgpt",{"2":{"106":1,"124":1,"170":1,"363":1,"499":1,"510":2,"511":3,"519":1,"598":1,"844":1,"1011":1}}],["cause",{"2":{"980":1}}],["caf",{"2":{"826":1}}],["camerahelper",{"2":{"763":1}}],["cameras",{"2":{"763":1}}],["camera",{"2":{"762":3,"763":2,"765":1,"766":2,"769":1,"774":1,"777":4,"778":2,"782":3}}],["camelcase",{"2":{"330":3}}],["cairo",{"2":{"673":1}}],["casters|",{"2":{"768":1}}],["cascade",{"2":{"564":1,"565":1}}],["cascading",{"2":{"338":1}}],["case",{"0":{"505":1,"507":1,"508":1,"640":1,"876":1,"877":1,"878":1,"879":1},"1":{"877":1,"878":1,"879":1},"2":{"143":3,"147":4,"150":4,"203":1,"230":3,"232":3,"289":2,"330":1,"442":1,"450":1,"550":1,"640":1,"654":9,"741":1,"934":1,"994":1}}],["candlestickview",{"2":{"706":1}}],["candlestickseries",{"2":{"706":1}}],["candlestick",{"2":{"706":1}}],["can",{"2":{"683":3,"692":4}}],["canvastexture",{"2":{"763":1}}],["canvastarget",{"2":{"763":1}}],["canvas2dcontext",{"2":{"741":1}}],["canvaselements",{"2":{"735":1,"737":1}}],["canvasrendererconfig",{"2":{"750":1}}],["canvasrendererworkeroverride",{"2":{"735":1}}],["canvasrendererbase",{"2":{"735":1}}],["canvasrenderer",{"2":{"725":2,"734":1,"735":1,"737":1,"741":3}}],["canvasrenderingcontext2d",{"2":{"677":1,"680":2,"750":1}}],["canvasfillrule",{"2":{"692":1}}],["canvasgradient",{"2":{"692":2}}],["canvas>",{"2":{"684":2}}],["canvas绘制",{"2":{"679":1}}],["canvas双缓冲",{"2":{"675":1}}],["canvas",{"0":{"796":1},"2":{"670":6,"671":1,"672":2,"673":3,"677":6,"679":1,"682":1,"683":1,"684":2,"692":1,"699":3,"701":2,"704":1,"705":1,"706":2,"708":1,"719":2,"728":2,"729":1,"730":1,"733":1,"734":2,"735":21,"737":4,"738":1,"741":1,"749":1,"751":5,"755":1,"763":4,"774":1,"777":1,"784":2,"785":2,"786":2,"788":2,"789":3,"790":1,"792":2,"793":1,"796":7,"798":1,"805":3,"810":1,"812":1}}],["cancontinuekeepalltextrun",{"2":{"795":1}}],["cancancel",{"2":{"281":1}}],["cancelled",{"2":{"825":1,"834":1}}],["cancelbubble",{"2":{"692":1}}],["cancel",{"2":{"280":1,"825":2,"834":1}}],["cancelqueries",{"2":{"96":1}}],["cannot",{"2":{"281":1}}],["calendar",{"2":{"647":1,"706":2,"714":2}}],["calls",{"2":{"777":1}}],["callexpression",{"2":{"655":1}}],["call",{"2":{"512":1,"522":2,"523":1,"685":1,"918":2}}],["calling",{"2":{"411":1,"521":1}}],["callback",{"2":{"289":6,"302":4,"315":4,"769":1,"777":4,"778":1,"797":1,"834":9,"942":1,"945":2}}],["callbacks",{"2":{"148":1,"150":7}}],["calculator",{"2":{"324":1,"939":1}}],["calculatesubtotal",{"2":{"281":1}}],["calculatetotal",{"2":{"281":1}}],["calculation",{"2":{"280":1}}],["carrycjkafterclosingquote",{"2":{"805":1}}],["carrycjkafterclosingquote|",{"2":{"796":1}}],["cartesian2d",{"2":{"714":2}}],["cartesian",{"2":{"706":1,"714":1}}],["cart",{"2":{"289":5,"290":1}}],["cartitem",{"2":{"281":1}}],["cartslice",{"2":{"274":1}}],["card",{"2":{"67":1,"274":1,"340":1,"939":3,"942":1,"967":1,"970":1}}],["catalogid",{"2":{"952":2}}],["catalogs",{"2":{"939":2,"948":3}}],["catalogprovider",{"2":{"939":1}}],["catalog",{"0":{"948":1},"2":{"938":1,"939":13,"941":1,"942":2,"944":2,"947":2,"948":8,"951":2}}],["catmullrom",{"2":{"763":1}}],["catrim",{"2":{"735":2}}],["cat",{"2":{"231":4}}],["catch",{"2":{"160":1,"164":1,"246":2,"313":1,"330":1}}],["caption",{"2":{"939":1}}],["capabilityrouting",{"2":{"851":1}}],["capabilitiesoptions",{"2":{"951":1}}],["capabilities",{"2":{"763":1,"939":1,"948":1}}],["cap",{"2":{"227":1}}],["caching",{"2":{"85":1,"980":2}}],["cachedengineprofile",{"2":{"796":1}}],["cached`",{"2":{"581":1}}],["cachecanvas",{"2":{"682":1}}],["cachetime",{"2":{"92":1}}],["cache",{"0":{"73":1,"76":2,"77":1},"1":{"74":1,"75":1,"76":1,"77":1,"78":1},"2":{"69":3,"73":1,"76":2,"77":3,"82":1,"85":1,"92":3,"100":1,"136":2,"139":2,"152":2,"203":1,"243":5,"334":3,"342":1,"551":1,"621":1,"652":1,"682":1,"763":1,"798":1,"849":1,"851":1,"858":1}}],["cra",{"2":{"960":1}}],["crossfadefrom",{"2":{"772":1}}],["criteria",{"2":{"451":1}}],["critical",{"2":{"366":2}}],["crystallize",{"0":{"375":1}}],["creation",{"2":{"980":1}}],["creator",{"2":{"454":1,"464":1,"720":2}}],["createuimessagestream",{"2":{"917":1}}],["createopenai",{"2":{"910":1,"916":2}}],["createorder",{"2":{"281":2,"327":1}}],["createmotionpath",{"2":{"819":1,"821":1}}],["createmorphto",{"2":{"819":1,"821":1}}],["createreactcomponent",{"2":{"939":1}}],["createrenderpipeline",{"2":{"777":1}}],["createroot",{"2":{"23":1}}],["createtodo",{"2":{"986":1}}],["createtimeline",{"2":{"819":1,"821":1,"835":1,"841":1}}],["createtimer",{"2":{"819":1,"821":1}}],["createtexture",{"2":{"762":1,"777":1}}],["createtag",{"2":{"735":1}}],["createtask",{"2":{"706":1}}],["createproviderdefinedtoolfactory",{"2":{"927":2}}],["createproperty",{"2":{"743":1}}],["createpipeline",{"2":{"719":1,"762":1}}],["createcomputepipeline",{"2":{"777":1}}],["createcomp",{"2":{"741":4}}],["createclippathfromcoordsys",{"2":{"706":1}}],["createclientcomponentclient",{"2":{"16":2}}],["createclient",{"2":{"14":2}}],["createitem",{"2":{"741":2,"749":1}}],["createinterface",{"2":{"489":1}}],["createns",{"2":{"735":1}}],["createextensionapi",{"2":{"708":1}}],["createevent",{"2":{"684":1}}],["createelement",{"2":{"203":2}}],["createbuffer",{"2":{"762":1,"777":1}}],["createb",{"2":{"315":3}}],["createanimations",{"2":{"819":1,"821":1,"835":1}}],["createa",{"2":{"315":3}}],["createapp",{"2":{"23":1}}],["createlogger",{"2":{"300":3}}],["createsurfacemessage",{"2":{"951":1}}],["createsurface",{"2":{"941":2,"942":1,"944":1,"947":1,"949":1,"952":3}}],["createscrollobserver",{"2":{"819":1,"821":1}}],["createscope",{"2":{"819":1,"821":1,"835":1}}],["createsource",{"2":{"706":1}}],["createstore",{"2":{"289":2}}],["createserver",{"2":{"139":1,"860":1}}],["createdrawable",{"2":{"819":1,"821":1}}],["createdraggable",{"2":{"819":1,"821":1,"841":1}}],["createdimensions",{"2":{"706":1}}],["createdat",{"2":{"240":1,"248":2,"269":2,"281":1}}],["created",{"2":{"16":5,"280":1,"281":1}}],["create",{"2":{"13":1,"275":1,"280":3,"281":1,"649":1,"676":1,"714":1,"889":1,"891":2,"939":1,"960":1}}],["credentials",{"2":{"327":2,"594":1}}],["crm",{"2":{"120":1,"411":1,"439":1}}],["crudstore",{"2":{"646":1,"647":1,"650":3,"653":1,"661":1,"663":1}}],["crud2",{"2":{"646":1,"647":2,"656":2}}],["crud",{"2":{"67":1,"80":1,"327":1,"344":1,"541":1,"553":1,"639":1,"640":1,"645":1,"646":1,"647":1,"650":1,"652":1,"661":1,"706":1,"713":1,"945":1}}],["c",{"2":{"47":1,"100":1,"237":1,"243":7,"244":5,"314":3,"344":1,"692":1,"1041":1}}],["circ",{"2":{"819":1}}],["circleconfig>",{"2":{"693":1}}],["circlearea",{"2":{"310":2}}],["circle",{"2":{"230":5,"232":1,"677":1,"679":1,"680":1,"693":1}}],["ci",{"2":{"47":1,"111":1,"120":1,"130":1,"131":1,"343":2,"345":1,"451":1,"542":1,"550":1,"555":1,"677":3,"706":1,"735":1,"763":1,"790":1,"819":1,"851":1,"882":1,"939":1,"980":1}}],["csv",{"2":{"846":1,"851":1,"865":1}}],["csm",{"2":{"763":1}}],["csr",{"0":{"22":1},"1":{"23":1,"24":1,"25":1},"2":{"21":1,"22":1,"25":1,"26":1,"29":1,"45":3,"46":2,"47":1,"55":2,"59":2,"62":1,"63":2,"80":1}}],["cssnano",{"2":{"965":1,"969":1}}],["cssunocsswindi",{"2":{"962":1}}],["css+数字引用",{"2":{"851":1}}],["css选择器",{"2":{"835":1}}],["css贝塞尔缓动",{"2":{"819":1}}],["css3d",{"2":{"763":1}}],["css2d",{"2":{"763":1}}],["css2drenderer",{"2":{"762":1}}],["css",{"0":{"957":1,"958":1,"959":1,"960":1,"961":1,"962":2,"964":1,"966":1},"1":{"963":2},"2":{"2":1,"11":1,"23":1,"53":1,"274":2,"286":2,"291":2,"338":3,"340":4,"343":2,"345":1,"557":1,"561":1,"639":1,"642":2,"646":1,"647":1,"672":1,"682":2,"763":1,"784":2,"786":1,"799":1,"805":1,"812":2,"814":1,"818":1,"819":2,"822":1,"834":5,"858":1,"939":2,"957":8,"958":8,"959":9,"960":11,"961":10,"962":15,"963":3,"964":2,"965":29,"966":1,"967":6,"968":4,"969":1,"970":7,"971":7}}],["clicommand>",{"2":{"859":1}}],["clicommand",{"2":{"856":3,"865":1}}],["click",{"2":{"682":1,"856":1,"858":1,"865":1}}],["clis",{"2":{"850":1,"851":2,"854":1,"855":2,"859":2}}],["clipintersection",{"2":{"777":1}}],["clipshadows",{"2":{"777":1}}],["clipaction",{"2":{"772":1}}],["clippingplanes",{"2":{"777":1}}],["clippingcontext",{"2":{"763":1}}],["clippinggroup",{"2":{"763":1}}],["clipheight",{"2":{"692":1}}],["clipwidth",{"2":{"692":1}}],["clipy",{"2":{"692":1}}],["clipx",{"2":{"692":1}}],["clipfuncoutput",{"2":{"692":1}}],["clipfunc",{"2":{"692":1}}],["clip",{"2":{"677":1,"680":1}}],["cli",{"2":{"559":1,"567":2,"568":3,"843":3,"844":3,"846":2,"848":1,"849":3,"850":2,"851":6,"855":2,"856":1,"859":1,"860":2,"865":2,"870":1,"939":1,"980":6,"985":2,"986":2,"994":1,"997":2,"998":2}}],["clientcapabilities",{"2":{"952":1}}],["client=",{"2":{"94":1}}],["client",{"0":{"58":1,"62":1},"2":{"14":3,"16":1,"22":1,"45":8,"59":1,"62":7,"63":1,"74":1,"78":2,"82":1,"107":1,"126":2,"274":1,"342":2,"706":1,"851":1,"939":6,"941":1,"955":1}}],["clear",{"2":{"777":2}}],["clearcoat",{"2":{"763":1,"771":1}}],["clearcanvas",{"2":{"750":1}}],["clearcache",{"2":{"682":1,"789":1,"796":1,"806":1}}],["clearbeforedraw",{"2":{"692":2}}],["clearinterval",{"2":{"139":1}}],["clean",{"2":{"216":1,"851":1}}],["clock→timer→animation",{"2":{"815":1}}],["clock",{"0":{"824":1},"2":{"763":1,"817":1,"818":2,"819":2,"821":1,"822":4,"824":4,"825":2,"826":2,"834":1}}],["clone",{"2":{"695":1,"777":1,"780":1,"955":1}}],["closewindow",{"2":{"865":1}}],["closetab",{"2":{"865":1}}],["closed",{"2":{"489":1,"749":1}}],["close",{"2":{"139":1,"489":2,"662":1}}],["cloudflare",{"2":{"7":1}}],["cla",{"2":{"939":1}}],["clamp",{"2":{"818":1,"819":1}}],["clazz",{"2":{"706":1}}],["classname",{"2":{"964":3}}],["classname=",{"2":{"15":11,"16":11,"288":3,"960":1,"962":1,"964":2}}],["classvalue",{"2":{"964":2}}],["classes",{"2":{"962":1}}],["class=",{"2":{"961":3,"965":1,"970":1}}],["classifysegmentkinds",{"2":{"795":1}}],["classmethoddecoratorcontext",{"2":{"324":1}}],["class",{"2":{"150":1,"153":1,"154":1,"163":1,"184":1,"185":1,"194":1,"231":1,"248":3,"261":1,"267":1,"269":2,"281":7,"289":1,"302":1,"311":1,"319":1,"324":1,"330":1,"692":6,"693":25,"711":2,"879":1,"960":1,"964":2}}],["claudecodesessionstartoutput",{"2":{"994":2}}],["claude",{"0":{"478":1,"571":1,"574":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"572":1,"573":1,"574":1},"2":{"106":1,"170":1,"171":1,"375":1,"403":1,"411":1,"441":3,"442":2,"456":2,"467":2,"470":4,"476":1,"477":4,"478":3,"480":1,"482":3,"483":1,"485":1,"488":1,"491":1,"510":3,"511":3,"519":1,"521":3,"523":7,"525":1,"535":1,"542":2,"545":1,"549":1,"550":1,"553":1,"557":1,"559":3,"567":8,"568":4,"569":5,"570":16,"571":10,"572":1,"573":2,"574":2,"575":5,"576":1,"577":1,"578":1,"580":2,"581":2,"583":3,"586":1,"591":1,"592":1,"593":1,"594":3,"596":1,"597":7,"636":1,"790":3,"843":1,"849":1,"978":1,"979":1,"980":11,"982":2,"983":1,"985":3,"986":1,"994":1,"997":1,"998":2,"1002":2}}],["clsx",{"2":{"964":4,"968":1,"971":2}}],["cls",{"2":{"72":1}}],["cd配置",{"2":{"819":1}}],["cdpbridge",{"2":{"845":1,"849":1,"850":1,"851":1,"856":1,"858":2}}],["cdp",{"2":{"790":1,"845":1,"846":2,"850":1,"851":4,"858":2,"865":1}}],["cd",{"2":{"13":1,"47":1,"82":1,"111":1,"120":1,"130":1,"131":1,"343":2,"345":1,"451":1,"542":1,"550":1,"555":1,"677":1,"695":1,"706":1,"735":1,"763":1,"780":1,"790":1,"851":1,"939":1,"955":2}}],["cdnjs",{"2":{"753":1}}],["cdn边缘节点",{"2":{"52":1}}],["cdn",{"2":{"2":2,"3":3,"7":4,"11":1,"20":1,"30":1,"31":3,"45":4,"46":1,"51":1,"52":1,"54":1,"63":1,"80":1,"125":1,"163":1,"753":1}}],["coord",{"2":{"706":1}}],["coordinate",{"0":{"714":1},"2":{"705":1,"711":1,"714":1}}],["coordinatesystemcreator",{"2":{"720":1}}],["coordinatesystems",{"2":{"714":1}}],["coordinatesystemmanager",{"2":{"708":1,"714":2}}],["coordinatesystem",{"2":{"705":1,"706":2,"709":2,"714":1}}],["cookie",{"2":{"103":1,"138":1,"845":1,"849":1,"856":1,"859":1,"865":2}}],["copyframebuffertoframebuffer",{"2":{"777":1}}],["copyframebuffer",{"2":{"762":1,"768":1}}],["copy",{"2":{"654":3,"662":1,"777":1,"851":1}}],["copilotkit",{"2":{"956":1}}],["copilot",{"2":{"542":1,"553":1,"938":1,"980":2,"985":2,"986":1,"994":1}}],["co",{"2":{"553":1,"581":1}}],["cot",{"2":{"545":1}}],["corpora",{"2":{"790":2}}],["corpus",{"2":{"790":7}}],["coreinternals",{"2":{"677":2,"679":2}}],["core",{"2":{"451":1,"645":2,"646":2,"647":4,"649":4,"656":2,"672":1,"673":1,"677":2,"679":2,"705":1,"706":2,"708":2,"725":1,"763":5,"765":4,"817":1,"818":1,"819":1,"821":1,"865":1,"906":2,"907":1,"938":2,"939":3,"1003":1}}],["cors",{"2":{"135":2,"860":2}}],["coh",{"2":{"426":1}}],["coze",{"2":{"403":1,"498":1}}],["collaboration",{"2":{"1002":1}}],["collectcoveragefrom",{"2":{"222":1}}],["column",{"2":{"939":1}}],["columncontrol",{"2":{"647":1,"656":1}}],["columns",{"2":{"640":1,"649":2,"865":1}}],["colorclasses",{"2":{"962":3}}],["colormanagement",{"2":{"763":1}}],["colorattrs",{"2":{"686":1}}],["color",{"2":{"676":1,"706":1,"743":2,"763":2,"769":1,"771":1,"772":1,"777":6,"778":2,"782":1,"814":1,"828":3,"834":2,"958":6,"959":2,"960":3,"961":4,"962":10,"965":2,"966":1}}],["colors",{"2":{"274":1,"683":1,"818":1,"819":1,"939":1,"962":1,"964":1}}],["colocating",{"2":{"174":2}}],["colonindex",{"2":{"143":4}}],["coveragedirectory",{"2":{"222":1}}],["coverage",{"2":{"203":1,"222":1,"224":2,"667":1}}],["coverimage",{"2":{"14":1}}],["coda",{"2":{"515":3}}],["coding",{"0":{"532":1,"560":1},"1":{"561":1,"562":1},"2":{"176":1,"365":1,"371":1,"461":1,"530":1,"553":1,"559":2,"569":1,"967":1,"1000":1}}],["codeinterpreter",{"2":{"927":1}}],["codeium",{"2":{"564":1}}],["codemod",{"2":{"908":1}}],["codemirror",{"2":{"763":1}}],["coded",{"2":{"676":1}}],["codegeex",{"2":{"522":1}}],["coder",{"2":{"512":1,"522":2}}],["coders",{"2":{"405":1}}],["codespec",{"2":{"442":1,"443":1}}],["codex",{"2":{"171":1,"978":1,"979":2,"980":9,"983":1,"997":2}}],["code",{"2":{"171":1,"196":1,"197":1,"234":2,"281":1,"313":1,"363":1,"403":1,"411":1,"441":1,"442":1,"448":1,"455":1,"461":1,"470":2,"477":1,"478":1,"482":2,"493":1,"535":1,"542":2,"553":1,"557":1,"559":2,"564":1,"565":2,"567":6,"568":4,"569":4,"570":3,"571":1,"572":1,"575":1,"577":1,"582":2,"590":1,"591":3,"592":3,"593":1,"597":2,"744":1,"763":1,"790":1,"843":1,"849":1,"882":1,"916":1,"927":2,"965":1,"978":1,"979":3,"980":13,"982":4,"983":2,"985":1,"986":1,"988":2,"989":1,"991":1,"995":2,"997":1,"998":1}}],["countpreparedlines",{"2":{"792":1,"797":2,"798":2}}],["count",{"2":{"146":1,"150":2,"153":3,"154":8,"330":5,"713":1,"719":1}}],["combo",{"2":{"647":1}}],["combostore",{"2":{"646":1,"647":1,"650":3}}],["com>`",{"2":{"581":1}}],["compressedtexture",{"2":{"763":1}}],["computedeltatime",{"2":{"824":2,"834":1}}],["computed",{"2":{"819":1,"822":1}}],["computesegmentlevels",{"2":{"792":1,"798":1}}],["computepipeline",{"2":{"777":1}}],["computenode",{"2":{"777":3}}],["computenodes",{"2":{"777":1}}],["compute",{"2":{"762":1,"768":1,"777":1}}],["computer",{"2":{"411":1}}],["comp",{"2":{"735":1,"742":1,"749":1,"907":1}}],["compiledexpression",{"2":{"749":1}}],["compileexpression",{"2":{"742":1,"749":1}}],["compileroptions",{"2":{"203":1,"204":3,"209":1,"210":1,"212":2,"213":1,"214":1,"215":1,"216":4,"322":1}}],["compiler",{"2":{"202":1,"762":1,"965":1}}],["compinterface",{"2":{"735":1,"742":2,"749":1}}],["compelement",{"2":{"734":1,"735":1}}],["competitive",{"2":{"470":1}}],["competition",{"2":{"392":1}}],["companion",{"2":{"980":1,"987":1}}],["compatstyle",{"2":{"706":1}}],["compat",{"2":{"646":1,"647":1}}],["compare",{"2":{"939":1}}],["compareto",{"2":{"267":3}}],["comparison",{"2":{"790":6}}],["comparative",{"2":{"396":1}}],["comparable",{"2":{"267":7}}],["complex",{"2":{"814":1,"828":3,"834":2}}],["complexity",{"2":{"365":3}}],["completion",{"2":{"851":3,"854":1,"855":1,"916":1,"979":1,"980":1,"982":1,"995":1}}],["completions",{"2":{"523":1,"854":1,"855":1}}],["completelayers",{"2":{"749":1}}],["completed",{"2":{"160":2,"163":1,"164":2,"818":1,"825":2,"834":1,"994":1}}],["complete",{"2":{"147":2,"150":1,"154":1,"518":1,"750":1,"825":2,"834":1}}],["compound",{"2":{"851":1}}],["composable",{"2":{"978":1}}],["compositiontype",{"2":{"834":2}}],["compositiontypes",{"2":{"819":1}}],["composition",{"2":{"341":1,"819":2,"822":1,"828":1,"832":1,"834":1}}],["composite",{"0":{"208":1},"2":{"203":1,"208":1,"213":3,"216":2,"769":1}}],["composer",{"2":{"939":3,"956":1}}],["composevalue",{"2":{"827":1}}],["composetween",{"2":{"819":1}}],["composecomplexvalue",{"2":{"819":1,"828":1}}],["composecomplex",{"2":{"818":1}}],["composecolorvalue",{"2":{"819":1,"828":1}}],["composecolor",{"2":{"818":1}}],["compose",{"2":{"290":1}}],["componentid",{"2":{"946":1}}],["componentregistry",{"2":{"939":1}}],["componentnode",{"2":{"939":2}}],["componentapi>",{"2":{"951":2}}],["componentapi",{"2":{"939":1,"942":1}}],["componentcontext",{"2":{"938":1,"939":3,"946":1}}],["componentviewclass",{"2":{"720":1}}],["componentview",{"2":{"704":1,"705":1,"706":1,"708":1,"709":2,"720":3}}],["componentmodelclass",{"2":{"720":1}}],["componentmodel",{"2":{"704":1,"705":1,"706":1,"709":3,"720":2,"938":1,"939":1,"941":1}}],["componenttype",{"2":{"661":3,"720":1,"939":1}}],["component",{"0":{"340":1},"2":{"47":3,"62":3,"67":1,"68":1,"74":1,"78":1,"82":2,"647":3,"649":1,"652":3,"656":1,"661":3,"705":1,"706":4,"708":2,"713":2,"715":1,"939":6,"941":1,"942":5,"947":2,"952":1,"970":1}}],["componentsmodel",{"2":{"941":1,"951":2}}],["components",{"0":{"61":1,"62":1,"76":1},"2":{"15":1,"16":1,"67":1,"74":1,"80":2,"203":5,"274":5,"280":1,"287":1,"288":4,"290":3,"312":2,"313":1,"344":1,"646":2,"647":3,"705":1,"706":1,"725":1,"778":9,"908":1,"936":2,"939":9,"947":1,"948":1,"952":5,"959":2,"965":3}}],["com",{"2":{"17":1,"69":1,"71":1,"72":1,"78":1,"138":1,"163":1,"259":4,"262":1,"266":2,"268":1,"269":1,"318":1,"456":2,"564":1,"695":1,"696":1,"728":1,"753":1,"780":1,"862":1,"870":1,"939":1,"955":1,"998":1,"1004":3}}],["community",{"0":{"346":1},"2":{"939":2}}],["commandargs",{"2":{"865":3}}],["commanderadapter",{"2":{"851":1}}],["commander",{"2":{"846":1,"849":1,"851":2,"855":1}}],["commandencoder",{"2":{"768":1}}],["commandenc",{"2":{"762":1}}],["command",{"2":{"280":2,"860":2,"865":2,"866":2,"985":1,"994":3}}],["commands",{"0":{"579":1},"1":{"580":1,"581":1,"582":1,"583":1},"2":{"280":1,"470":3,"570":4,"579":1,"580":2,"583":4,"584":1,"585":1,"590":1,"597":2,"763":1,"851":2,"979":1,"980":2}}],["commontypes",{"2":{"280":1}}],["commonkeys",{"2":{"233":1}}],["commonjs",{"0":{"304":1,"333":1},"2":{"203":5,"204":1,"215":2,"298":2,"303":1,"304":1,"305":1,"306":3,"307":1,"308":2,"309":1,"314":1,"322":1,"735":1,"759":1,"763":1,"887":2}}],["commons",{"2":{"193":1}}],["common",{"2":{"153":1,"154":1,"163":1,"274":1,"275":1,"280":1,"647":1,"706":1,"735":1,"737":1,"763":1,"939":3}}],["commit`",{"2":{"451":1,"581":1}}],["commits",{"2":{"451":1}}],["commit",{"2":{"17":1,"101":1,"375":1,"451":8,"581":4,"988":1,"989":1}}],["comment",{"2":{"16":9}}],["comments",{"2":{"16":7}}],["commentsection",{"2":{"15":3,"16":2}}],["concepts",{"2":{"939":1}}],["concat",{"2":{"892":1}}],["concatenation",{"2":{"238":1}}],["conduct",{"2":{"882":1,"980":1}}],["conditions",{"2":{"915":1}}],["condition",{"2":{"647":1,"980":2}}],["converter",{"2":{"939":2}}],["converttolanguagemodelprompt",{"2":{"912":1}}],["converttopixel",{"2":{"719":1}}],["convertvalueunit",{"2":{"819":1}}],["convertunit",{"2":{"818":1}}],["convertfrompixel",{"2":{"719":1}}],["conversation",{"2":{"482":1}}],["conventions",{"2":{"570":1,"575":1,"577":1,"980":1}}],["conventional",{"2":{"451":1}}],["connected",{"2":{"301":1,"866":1}}],["connect",{"2":{"301":1,"328":1}}],["connection",{"2":{"103":1,"114":1,"136":1,"138":2,"139":1,"152":1}}],["conformance",{"2":{"939":1}}],["conf",{"2":{"647":2,"662":1,"677":1}}],["confirmed",{"2":{"281":2}}],["confirm",{"2":{"281":1}}],["confirmtext",{"2":{"249":3}}],["configanimation",{"2":{"749":1}}],["config>",{"2":{"692":2,"693":2}}],["configure",{"2":{"676":1}}],["configmap",{"2":{"262":2}}],["config",{"2":{"72":2,"203":2,"216":1,"222":5,"243":5,"274":4,"275":4,"288":3,"290":4,"481":1,"490":1,"647":1,"652":1,"661":1,"662":1,"668":3,"677":1,"686":2,"692":10,"706":1,"735":1,"749":1,"750":1,"763":1,"790":1,"819":1,"836":1,"962":2,"965":1,"966":1,"969":1}}],["conflict",{"2":{"237":3,"451":1}}],["cons",{"2":{"994":1}}],["consolemessages",{"2":{"865":1}}],["console",{"2":{"94":1,"138":4,"139":1,"141":1,"144":1,"160":4,"164":4,"231":2,"246":2,"259":1,"260":1,"262":2,"263":1,"269":1,"288":2,"289":2,"295":5,"300":2,"301":3,"302":1,"304":2,"305":2,"307":2,"311":1,"313":1,"314":4,"315":4,"324":1,"325":1,"483":1,"484":1,"489":1,"571":1,"877":1}}],["consistent",{"2":{"85":1}}],["consts",{"2":{"818":1,"819":1}}],["constraints",{"2":{"676":1}}],["constructor>",{"2":{"248":2}}],["constructor",{"2":{"150":1,"231":1,"248":1,"261":1,"267":1,"269":3,"281":7,"302":1,"311":1,"655":1,"692":2,"708":1,"720":2}}],["constants",{"2":{"274":1,"336":1,"763":1,"851":1,"939":3}}],["const",{"2":{"14":3,"15":3,"16":12,"69":2,"70":1,"71":2,"72":1,"78":1,"85":3,"87":4,"88":3,"89":2,"91":1,"94":1,"96":2,"138":1,"139":2,"141":7,"143":10,"144":1,"146":1,"147":1,"148":1,"150":5,"153":1,"154":2,"160":5,"163":3,"164":2,"203":1,"222":1,"223":2,"229":1,"233":1,"236":1,"237":1,"238":3,"246":2,"247":2,"248":1,"258":3,"259":3,"260":1,"261":6,"262":3,"263":2,"266":2,"267":2,"268":4,"269":3,"281":4,"288":9,"289":5,"295":1,"300":2,"301":3,"302":1,"304":3,"305":1,"307":2,"310":3,"311":1,"313":2,"314":3,"315":14,"318":2,"321":1,"327":6,"328":3,"330":1,"333":3,"483":2,"484":1,"486":2,"488":2,"489":3,"640":1,"668":2,"693":1,"696":3,"724":1,"782":7,"809":2,"834":4,"898":1,"902":2,"927":2,"959":1,"960":1,"962":2,"964":1,"995":1}}],["contact",{"2":{"939":1}}],["containscjk",{"2":{"805":1}}],["containerconfig",{"2":{"692":5}}],["containerparams",{"2":{"677":1}}],["container",{"2":{"15":2,"170":1,"261":1,"288":1,"676":1,"677":1,"679":1,"680":2,"684":1,"692":7,"693":3,"696":3,"743":1,"746":1,"750":1,"754":1}}],["continuous",{"2":{"706":1}}],["continue`",{"2":{"451":1}}],["continue",{"2":{"143":2,"988":1}}],["contributing",{"2":{"706":1,"819":1,"882":1,"908":1,"939":1}}],["contrast",{"2":{"676":1,"677":1,"679":1}}],["contract",{"2":{"98":1,"100":1,"179":1,"319":2}}],["controls",{"2":{"656":1,"763":2}}],["controllers",{"2":{"275":1,"280":1}}],["controller",{"2":{"153":2,"154":2,"163":2,"275":2,"280":2,"336":1,"939":3}}],["control",{"2":{"136":1,"139":1,"152":1,"419":1}}],["context|",{"2":{"985":1}}],["contexts",{"2":{"939":1}}],["contextnode",{"2":{"763":1}}],["context",{"2":{"96":4,"98":1,"131":1,"174":1,"175":1,"277":1,"324":2,"367":4,"410":3,"439":1,"468":1,"546":1,"548":1,"557":1,"594":2,"646":1,"653":1,"663":1,"675":1,"677":1,"679":1,"683":5,"692":2,"712":1,"719":1,"735":2,"750":1,"768":1,"796":1,"805":1,"936":1,"939":12,"946":1,"979":1,"994":1,"1001":1}}],["contents",{"2":{"662":1}}],["contenttype",{"2":{"150":2}}],["content>",{"2":{"138":1,"153":1}}],["content",{"2":{"14":3,"16":4,"74":3,"105":2,"109":1,"138":2,"139":1,"141":1,"144":3,"150":3,"152":1,"234":2,"483":1,"484":2,"488":3,"654":1,"684":2,"692":1,"866":3,"878":1,"879":1,"898":2,"908":1,"931":1,"962":5,"985":1,"994":1}}],["contentful",{"0":{"14":1},"2":{"9":1,"10":1,"11":1,"13":2,"14":10,"15":3,"17":2,"18":1}}],["cost",{"2":{"965":1}}],["costs",{"2":{"391":2,"393":2}}],["cos",{"2":{"7":1}}],["jit",{"2":{"965":1,"967":1,"969":1}}],["jira",{"2":{"418":1}}],["jvm",{"2":{"936":1,"939":1}}],["jpeg",{"2":{"719":1}}],["jpg",{"2":{"677":1}}],["just",{"2":{"986":1}}],["justify",{"2":{"964":1}}],["justification",{"2":{"790":6}}],["jump",{"2":{"677":1}}],["jumpto",{"2":{"649":1,"654":1,"661":1,"662":1}}],["judge",{"2":{"550":2}}],["j",{"2":{"372":1}}],["jesse",{"2":{"973":1}}],["jest",{"0":{"220":1,"222":1},"1":{"221":1,"222":1,"223":1,"224":1,"225":1},"2":{"220":2,"221":4,"222":5,"224":3,"225":3,"226":1,"667":1,"706":1}}],["jelly技术周刊",{"2":{"346":1}}],["jquery",{"2":{"306":1,"320":1}}],["joh",{"2":{"790":1}}],["john",{"2":{"289":2,"318":2}}],["join",{"2":{"267":1}}],["jotai",{"2":{"83":1,"174":1,"341":2}}],["jasmine",{"2":{"880":1,"882":2,"885":1}}],["jackwener",{"2":{"869":1}}],["ja",{"2":{"790":2}}],["jar",{"2":{"203":1}}],["javapublic",{"2":{"185":1}}],["javascriptexport",{"2":{"962":1}}],["javascriptimport",{"2":{"782":1,"839":1}}],["javascriptonmessage",{"2":{"147":1}}],["javascriptlet",{"2":{"146":1}}],["javascriptconst",{"2":{"138":1,"139":1,"148":1,"149":1}}],["javascript",{"2":{"4":1,"22":1,"59":1,"61":1,"141":1,"143":3,"202":1,"203":2,"216":1,"217":3,"220":1,"254":1,"255":1,"272":2,"288":3,"295":3,"298":3,"300":1,"301":1,"302":1,"304":3,"305":1,"306":1,"307":2,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":5,"316":1,"317":1,"321":1,"327":1,"328":1,"330":1,"333":1,"334":1,"338":6,"339":2,"342":1,"343":2,"344":2,"345":1,"346":2,"442":1,"699":1,"702":1,"731":1,"735":1,"757":1,"770":1,"784":1,"812":2,"815":1,"841":1,"902":1,"904":1,"959":3,"964":2}}],["java",{"2":{"3":1,"184":1,"190":4,"191":2,"194":1,"203":1,"342":1,"552":1}}],["jamstack",{"0":{"1":1,"5":1,"10":1,"18":1,"19":1},"1":{"2":1,"3":1,"4":1,"6":1,"7":1,"8":1,"9":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1},"2":{"2":1,"3":1,"4":5,"5":1,"6":1,"7":1,"8":1,"13":2,"17":3,"19":1,"20":3,"345":1}}],["jsdom",{"2":{"939":1}}],["jsdoc类型定义文件",{"2":{"819":1}}],["jsdoc",{"2":{"578":1,"677":3,"763":2,"815":1,"821":1}}],["js对象",{"2":{"835":1}}],["jsanimation类",{"2":{"819":1}}],["jsanimation",{"2":{"818":1,"821":3,"822":3,"834":1,"835":4}}],["jsm",{"2":{"763":1}}],["js中的模块化实践",{"2":{"272":1}}],["jsxraw",{"2":{"203":1}}],["jsxfragmentfactory",{"2":{"203":1}}],["jsxfactory",{"2":{"203":1}}],["jsxfunction",{"2":{"89":1}}],["jsx",{"2":{"87":1,"94":1,"202":1,"203":12,"204":3,"214":2,"216":2,"661":1,"959":1,"960":1,"962":3,"964":1,"965":3,"967":1,"968":1,"971":1}}],["jsximport",{"2":{"85":1,"88":1,"91":1,"95":1,"96":1}}],["json|",{"2":{"979":1}}],["jsonschemavalidator",{"2":{"941":1,"947":1}}],["jsonschema7",{"2":{"925":1}}],["jsonschema",{"2":{"925":1,"936":1}}],["json解析",{"2":{"735":1}}],["json",{"0":{"202":1,"203":1,"212":1,"213":1,"214":1,"215":1,"593":1,"596":1},"1":{"203":1,"204":1,"594":1,"595":1,"596":1},"2":{"69":1,"71":2,"85":1,"87":2,"91":1,"96":1,"112":1,"135":2,"141":4,"142":1,"144":2,"147":1,"150":3,"152":1,"153":2,"154":1,"160":1,"163":2,"164":1,"196":1,"197":1,"202":2,"203":5,"204":4,"205":1,"209":2,"210":1,"211":5,"212":1,"213":2,"214":2,"215":2,"216":10,"222":1,"224":2,"226":1,"232":1,"256":1,"279":1,"280":2,"290":9,"308":2,"322":2,"333":2,"334":1,"335":2,"342":2,"435":1,"482":1,"570":4,"593":1,"594":1,"596":3,"597":1,"639":3,"640":4,"641":1,"645":2,"647":6,"650":3,"656":1,"661":1,"662":1,"668":2,"677":4,"706":2,"728":3,"729":1,"734":1,"735":6,"742":1,"743":3,"746":2,"747":1,"754":2,"755":1,"763":4,"790":19,"819":3,"836":2,"846":1,"851":6,"865":1,"866":3,"878":2,"882":5,"903":1,"906":2,"907":1,"908":2,"915":1,"925":2,"933":3,"934":3,"935":1,"936":1,"938":5,"939":26,"941":2,"942":2,"944":2,"945":2,"947":3,"948":2,"951":2,"952":1,"956":1,"979":8,"980":10,"983":1,"985":5,"994":3}}],["jsonplaceholder",{"2":{"69":1,"71":1,"78":1}}],["js",{"0":{"13":1,"56":1,"60":1,"80":1,"81":1,"304":1,"321":1,"334":1,"770":1,"959":1},"1":{"57":1,"58":1,"59":1,"61":1,"62":1},"2":{"2":2,"6":3,"7":1,"8":3,"10":1,"11":1,"13":3,"15":1,"16":1,"17":1,"20":1,"22":1,"23":3,"25":1,"26":2,"27":3,"30":1,"34":2,"35":1,"41":2,"45":2,"53":4,"54":1,"56":1,"57":1,"59":6,"60":4,"61":1,"63":2,"64":1,"68":1,"71":1,"72":2,"73":2,"74":2,"78":2,"81":2,"82":1,"163":1,"202":1,"203":9,"204":1,"215":2,"222":1,"272":1,"280":2,"286":1,"288":7,"290":4,"291":1,"293":1,"295":5,"298":1,"300":3,"301":3,"302":3,"304":3,"306":1,"307":2,"308":2,"310":5,"311":4,"312":6,"313":3,"314":15,"315":31,"318":3,"319":1,"321":1,"322":2,"324":1,"325":3,"326":1,"327":3,"330":2,"333":4,"334":9,"335":2,"337":3,"338":2,"339":1,"341":2,"342":7,"343":2,"344":11,"346":1,"480":1,"542":1,"543":1,"548":2,"552":1,"561":1,"562":2,"573":2,"639":1,"642":2,"647":2,"665":1,"670":1,"671":1,"672":2,"673":1,"677":3,"682":1,"696":1,"702":1,"706":7,"722":1,"728":3,"734":1,"735":185,"737":11,"740":2,"741":1,"742":5,"743":3,"744":1,"751":23,"754":2,"757":2,"761":1,"762":1,"763":212,"765":11,"770":2,"774":1,"778":1,"780":3,"784":1,"785":1,"790":1,"812":3,"813":1,"814":1,"815":1,"817":1,"819":64,"821":18,"826":1,"827":2,"828":1,"830":1,"832":1,"836":7,"840":1,"846":2,"849":1,"851":10,"855":1,"858":1,"859":1,"860":1,"865":3,"868":1,"882":2,"887":2,"902":2,"904":3,"929":1,"933":1,"936":1,"939":3,"954":1,"957":1,"959":7,"960":2,"961":1,"962":3,"964":3,"965":13,"966":1,"969":1,"971":1,"979":1,"980":6,"987":1}}],["如此不断增强",{"2":{"1007":1}}],["如此无限死循环",{"2":{"386":1}}],["如涉及",{"2":{"987":1}}],["如需并行开发",{"2":{"982":1}}],["如需要",{"2":{"792":1,"796":1}}],["如嵌套",{"2":{"969":1}}],["如对话框",{"2":{"942":1}}],["如有必要",{"2":{"855":1}}],["如有多余的",{"2":{"451":1}}],["如line",{"2":{"819":1}}],["如加法",{"2":{"770":1}}],["如加载网页",{"2":{"103":1}}],["如触发重绘",{"2":{"685":1}}],["如资深开发者",{"2":{"625":1}}],["如技术的适用场景",{"2":{"625":1}}],["如技术文章",{"2":{"625":1}}],["如技术文章更新",{"2":{"617":1}}],["如低价值技术社群",{"2":{"624":1}}],["如法律",{"2":{"614":1}}],["如纸张的手感",{"2":{"613":1}}],["如自动",{"2":{"594":1}}],["如自动发邮件通知相关责任人",{"2":{"417":1}}],["如安全审查不应该每次都手动触发",{"2":{"588":1}}],["如安全性",{"2":{"181":1}}],["如只在",{"2":{"577":1}}],["如统一的",{"2":{"573":1}}],["如共享类型",{"2":{"573":1}}],["如专注安全的审计员",{"2":{"570":1}}],["如允许",{"2":{"570":1}}],["如允许的工具",{"2":{"482":1}}],["如喜欢的注释风格",{"2":{"570":1}}],["如会话历史和自动记忆",{"2":{"570":1}}],["如长文总结",{"2":{"550":1}}],["如在浏览器插件中打破沙盒限制",{"2":{"548":1}}],["如含",{"2":{"547":1}}],["如代码提交前自动安全检查",{"2":{"570":1}}],["如代码生成",{"2":{"551":1}}],["如代码审计",{"2":{"547":1}}],["如代码重构",{"2":{"443":1}}],["如信息爬取",{"2":{"545":1}}],["如调整样式",{"2":{"537":1}}],["如履薄冰的手动重构",{"2":{"527":1}}],["如但丁的",{"2":{"506":1}}],["如荷马的史诗",{"2":{"506":1}}],["如无关主题或形式错误",{"2":{"504":1}}],["如无必要",{"2":{"181":1}}],["如智能化审稿流",{"2":{"485":1}}],["如内容自动校对",{"2":{"477":1}}],["如内部文档工具",{"2":{"46":1}}],["如研究论文",{"2":{"468":1}}],["如上图所示",{"2":{"459":1}}],["如上所述",{"2":{"140":1,"1025":1,"1040":1}}],["如创建分支",{"2":{"451":1}}],["如同我们在日常对话中下达的即时指令",{"2":{"435":1}}],["如一键全文搜索",{"2":{"613":1}}],["如一段代码或一份大纲",{"2":{"426":1}}],["如一个类或一个大组件",{"2":{"311":1}}],["如文档",{"2":{"465":1}}],["如文本",{"2":{"418":1}}],["如文件不存在",{"2":{"583":1}}],["如文件系统操作",{"2":{"478":1}}],["如文件描述符",{"2":{"164":1}}],["如文件上传上下文",{"2":{"135":1}}],["如推理",{"2":{"412":1}}],["如操作本地文件或内网数据库",{"2":{"411":1}}],["如公司财务报表",{"2":{"411":1}}],["如高阶数学",{"2":{"411":1}}],["如广告平台",{"2":{"399":1}}],["如学生优惠",{"2":{"397":1}}],["如可口可乐和百事可乐",{"2":{"392":1}}],["如今的问题早已不是信息匮乏",{"2":{"620":1}}],["如今可在数小时内完成闭环验证",{"2":{"529":1}}],["如今在",{"2":{"527":1}}],["如今",{"2":{"361":1}}],["如天气",{"2":{"349":1,"411":1}}],["如提交代码",{"2":{"343":1}}],["如构建",{"2":{"343":1}}],["如前端使用",{"2":{"342":1}}],["如互相依赖的串行请求",{"2":{"342":1}}],["如服务器端渲染",{"2":{"338":1}}],["如标题",{"2":{"338":1}}],["如数字",{"2":{"270":1}}],["如数据库模型",{"2":{"269":1}}],["如数据库查询",{"2":{"74":1}}],["如数据库操作",{"2":{"8":1}}],["如既需要可比较又需要可序列化",{"2":{"267":1}}],["如函数输入输出的类型",{"2":{"263":1}}],["如深拷贝",{"2":{"256":1}}],["如异步测试",{"2":{"225":1}}],["如未使用的变量",{"2":{"219":1}}],["如电商订单",{"2":{"200":1}}],["如电商详情页中所有用户共享的商品图文介绍",{"2":{"76":1}}],["如是否有",{"2":{"199":1}}],["如参数传错",{"2":{"198":1}}],["如怀疑框架漏洞",{"2":{"198":1}}],["如id生成方式",{"2":{"197":1}}],["如用map",{"2":{"200":1}}],["如用jdk自带的java",{"2":{"194":1}}],["如用户个人信息",{"2":{"408":1}}],["如用户指令",{"2":{"408":1,"410":1}}],["如用户发送消息",{"2":{"120":1}}],["如用户头像",{"2":{"40":1}}],["如用户信息",{"2":{"2":1}}],["如工具类",{"2":{"192":1}}],["如大项目的模块解耦",{"2":{"191":1}}],["如多次使用的",{"2":{"188":1}}],["如多人竞技游戏",{"2":{"131":1}}],["如表单控件",{"2":{"178":1}}],["如根据商品列表计算出的库存总量",{"2":{"173":1}}],["如外部注入的数据",{"2":{"173":1}}],["如静态配置",{"2":{"173":1}}],["如某些古老的",{"2":{"320":1}}],["如某些",{"2":{"167":1}}],["如浏览器",{"2":{"162":1}}],["如几个小时",{"2":{"159":1}}],["如每秒请求一次",{"2":{"156":1}}],["如认证失效",{"2":{"146":1}}],["如仅支持",{"2":{"140":1}}],["如支付网关",{"2":{"439":1}}],["如支付平台回调",{"2":{"131":1}}],["如支付回调",{"2":{"130":1}}],["如股票行情大盘",{"2":{"131":1}}],["如更新本地数据",{"2":{"119":1}}],["如实时游戏状态同步",{"2":{"115":1}}],["如实时生成的缩略图",{"2":{"112":1}}],["如超长的",{"2":{"112":1}}],["如超大文件或视频流的段落化加载",{"2":{"106":1}}],["如传感器数值同步",{"2":{"103":1}}],["如游戏",{"2":{"102":1}}],["如列表",{"2":{"98":1}}],["如弹窗开关",{"2":{"85":1}}],["如查询数据库",{"2":{"74":1}}],["如何使用",{"2":{"979":1}}],["如何使用技能系统",{"2":{"978":1,"986":1}}],["如何构建可扩展的样式工程化体系",{"0":{"965":1},"1":{"966":1,"967":1,"968":1,"969":1,"970":1}}],["如何构建可靠的工程闭环",{"2":{"491":1}}],["如何分析和批判不同的观点",{"2":{"608":1}}],["如何编写一个高可用的",{"2":{"588":1}}],["如何创建",{"0":{"574":1}}],["如何上手",{"2":{"561":1,"564":1,"567":1}}],["如何重塑编程工作流",{"2":{"559":1}}],["如何利用",{"2":{"540":1,"1034":1}}],["如何让",{"2":{"534":1}}],["如何保持技术尖锐度并构建新的",{"2":{"525":1}}],["如何改变",{"2":{"525":1}}],["如何通过解决被忽视的痛点实现跨越式成长",{"2":{"601":1}}],["如何通过",{"2":{"496":1}}],["如何通过类型系统增强模块化编程",{"2":{"317":1}}],["如何用客观标准证明任务成功了",{"2":{"450":1}}],["如何将脑海中的研发规范或操作流程",{"2":{"444":1}}],["如何将数据同步到服务器",{"2":{"88":1}}],["如何写好一个",{"0":{"444":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1}}],["如何执行",{"2":{"443":1}}],["如何思考",{"2":{"433":1}}],["如何为你的",{"0":{"432":1}}],["如何实现",{"0":{"376":1}}],["如何从",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1}}],["如何在业余更大范围地尝试",{"2":{"1041":1}}],["如何在有限的上下文窗口",{"2":{"367":1}}],["如何在复杂性中建立秩序",{"2":{"180":2}}],["如何驾驭日益庞大的系统复杂度",{"2":{"303":1}}],["如何优化重渲染性能",{"2":{"179":1}}],["如何批量处理状态更新",{"2":{"179":1}}],["如何高效地",{"2":{"179":1,"348":1}}],["如何高效地解决",{"2":{"176":1}}],["如何拆分",{"2":{"59":1}}],["如何落地",{"0":{"49":1},"1":{"50":1,"51":1,"52":1}}],["如果出现反弹情况",{"2":{"1048":1}}],["如果还有体力",{"2":{"1045":1}}],["如果还能在工作和生活中尝试起来",{"2":{"1027":1}}],["如果还在处理中",{"2":{"160":1}}],["如果时间足够充裕",{"2":{"1026":1}}],["如果为",{"2":{"898":1}}],["如果错误是致命的",{"2":{"898":1}}],["如果不是有特别感兴趣的话题也基本不扯闲淡",{"2":{"1043":1}}],["如果不觉得笔者在做广告",{"2":{"1032":1}}],["如果不期望服务器关闭连接",{"2":{"898":1}}],["如果不做会怎样",{"2":{"366":1}}],["如果响应不符合预期",{"2":{"898":1}}],["如果未指定此回调或返回",{"2":{"898":1}}],["如果未提供",{"2":{"898":1}}],["如果未来能集成",{"2":{"509":1}}],["如果传达给一个没有执行力的人",{"2":{"622":1}}],["如果只读书而不参与社会实践",{"2":{"614":1}}],["如果对话者水平高",{"2":{"610":1}}],["如果单纯观察代码产出行数",{"2":{"526":1}}],["如果用户未明确形式或主题",{"2":{"504":1}}],["如果试图用肉身去对抗各领域的专业深度",{"2":{"458":1}}],["如果前两层是造车和开车的",{"2":{"551":1}}],["如果前面四个组件都在解决",{"2":{"439":1}}],["如果前端项目和后端代码没有在一个",{"2":{"342":1}}],["如果希望多个代理复用同一套安全审查流程",{"2":{"438":1}}],["如果目标已达成",{"2":{"429":1}}],["如果当前结果是中间产物",{"2":{"429":1}}],["如果当初迁移时选择了保留",{"2":{"54":1}}],["如果整个规划过程过长",{"2":{"424":1}}],["如果一个人单凭拼凑信息就能战胜市场",{"2":{"621":1}}],["如果一个人只是一味读书而极少参与社会实践",{"2":{"614":1}}],["如果一个人通过",{"2":{"553":1}}],["如果一个人就能通过",{"2":{"553":1}}],["如果一个技能适用于所有任务",{"2":{"445":1}}],["如果一次搜索没有找到答案",{"2":{"412":1}}],["如果一家涨价",{"2":{"392":1}}],["如果规划模块赋予了",{"2":{"410":1}}],["如果签到带来的价值不足以改变用户行为",{"2":{"366":1}}],["如果把产品",{"2":{"364":1}}],["如果要问",{"2":{"362":1}}],["如果检索到的文档信息不足",{"2":{"352":1}}],["如果既不是核心模块也不是路径",{"2":{"334":1}}],["如果都不存在",{"2":{"306":1}}],["如果存在",{"2":{"306":2}}],["如果我们宽泛地谈改变",{"2":{"1042":1}}],["如果我们把不同任务放在一起训练",{"2":{"1017":1}}],["如果我们的基础概率比竞争对手低",{"2":{"1016":1}}],["如果我们做成某件事的基础概率比较大",{"2":{"1016":1}}],["如果我们总是基于斜率非常接近的直线建立方程组",{"2":{"1014":1}}],["如果我们从多个角度观察",{"2":{"1014":1}}],["如果我们无法洞察表象背后的系统",{"2":{"1007":1}}],["如果我们无法破译表象背后的系统",{"2":{"382":1}}],["如果我们全盘接受这种便利",{"2":{"530":1}}],["如果我们能把结尾与开头也连接起来",{"2":{"386":1}}],["如果我们能确保某个值确实是",{"2":{"232":1}}],["如果我们想让一个函数同时支持",{"2":{"255":1}}],["如果无法推断",{"2":{"254":1}}],["如果交叉结果为",{"2":{"237":1}}],["如果遗漏了任何分支",{"2":{"232":1}}],["如果使用",{"2":{"221":1}}],["如果祖先节点已有",{"2":{"174":1}}],["如果满足以下任何一条",{"2":{"173":1}}],["如果返回",{"2":{"164":1}}],["如果在做的过程中还惧怕错了",{"2":{"1037":1}}],["如果在未来",{"2":{"1029":1}}],["如果在挂起期间任务完成了",{"2":{"163":1}}],["如果在这段时间内任务完成了",{"2":{"162":1}}],["如果没有曾经的一段经历",{"2":{"1042":1}}],["如果没有疫情这三年的经历和刻意的向内思变",{"2":{"1042":1}}],["如果没有疫情",{"2":{"1039":1}}],["如果没有这些链条",{"2":{"385":1}}],["如果没有更新",{"2":{"162":1}}],["如果没有或者已过期",{"2":{"92":1}}],["如果这时间到了任务依然未完成",{"2":{"162":1}}],["如果任务在第",{"2":{"160":1}}],["如果客户端仍以固定高频重试",{"2":{"158":1}}],["如果你真想创造价值",{"2":{"620":1}}],["如果你希望了解",{"2":{"467":1}}],["如果你能在其中任何一个场景里",{"2":{"465":1}}],["如果你正处于不知道",{"2":{"465":1}}],["如果你发现在多个",{"2":{"437":1}}],["如果你是这个产品的",{"2":{"375":1}}],["如果你来做",{"2":{"374":1}}],["如果你猜错了",{"2":{"369":1}}],["如果你猜对了",{"2":{"369":1}}],["如果你对这些思考感兴趣",{"2":{"1001":1}}],["如果你对",{"2":{"156":1,"491":1}}],["如果你的业务需要双向实时交互",{"2":{"155":1}}],["如果你的接口设计已经非常规范",{"2":{"100":1}}],["如果你的页面内容在构建时就已知且不变",{"2":{"54":1}}],["如果需要在项目中覆盖全局配置",{"2":{"571":1}}],["如果需要通过图像增强诗歌的意境表达",{"2":{"504":1}}],["如果需要像",{"2":{"154":1}}],["如果需要传输二进制文件",{"2":{"112":1}}],["如果是",{"2":{"329":2,"451":1,"982":3}}],["如果是对象需要",{"2":{"153":1}}],["如果是致命错误或用户主动取消",{"2":{"150":1}}],["如果有人问起",{"2":{"1029":1}}],["如果有子节点",{"2":{"827":1}}],["如果有",{"2":{"143":1}}],["如果决定使用轮询",{"2":{"128":1}}],["如果说时间管理其实就是对时间这一个维度进行切割",{"2":{"1039":1}}],["如果说普通的",{"2":{"964":1}}],["如果说开发",{"2":{"550":1}}],["如果说大模型是大脑",{"2":{"544":1}}],["如果说任务分解是",{"2":{"426":1}}],["如果说通用",{"2":{"417":1}}],["如果说增强回路的存在",{"2":{"387":1,"1009":1}}],["如果说变量是独立的节点",{"2":{"385":1}}],["如果说上述代码是模块化的",{"2":{"296":1}}],["如果说联合类型代表",{"2":{"236":1}}],["如果说",{"2":{"108":1,"118":1,"179":1,"436":1,"534":1,"584":1}}],["如果说传统的",{"2":{"402":1}}],["如果说传统",{"2":{"104":1}}],["如果业务需要客户端也实时回传数据",{"2":{"107":1}}],["如果项目是一个重展示",{"2":{"99":1}}],["如果项目是一个重操作",{"2":{"99":1}}],["如果更新了一个项目详情",{"2":{"98":1}}],["如果失败则回滚",{"2":{"96":1}}],["如果缓存里有",{"2":{"92":1}}],["如果后端请求失败",{"2":{"88":1}}],["如果",{"2":{"87":1,"88":1,"89":1,"96":1,"125":1,"427":1,"439":1,"445":1,"891":1,"989":1}}],["如果多个组件",{"2":{"85":1}}],["如果服务端和客户端的渲染结果不一致",{"2":{"58":1}}],["如果文档站不用",{"2":{"54":1}}],["如页面布局骨架",{"2":{"40":1}}],["如复杂数据分析",{"2":{"19":1}}],["如新闻网站",{"2":{"19":1}}],["如聊天软件",{"2":{"19":1}}],["如博客文章",{"2":{"9":1}}],["如登录",{"2":{"4":1}}],["如",{"2":{"2":1,"3":1,"4":2,"14":1,"17":1,"27":1,"47":1,"59":1,"76":1,"81":1,"85":1,"92":1,"112":1,"119":1,"120":1,"121":1,"123":1,"124":1,"125":1,"135":1,"143":1,"144":1,"155":1,"156":1,"158":2,"159":1,"164":1,"166":1,"170":1,"171":1,"188":1,"201":1,"203":7,"205":1,"209":1,"210":2,"217":1,"231":1,"263":3,"270":3,"291":1,"302":1,"306":2,"307":1,"308":1,"329":1,"330":7,"331":1,"334":2,"340":1,"342":3,"343":2,"354":1,"355":1,"367":1,"411":1,"412":1,"414":2,"429":1,"442":1,"443":1,"451":2,"474":1,"477":1,"478":1,"507":2,"510":1,"523":1,"542":2,"543":1,"548":2,"550":1,"551":2,"559":1,"561":1,"564":1,"567":1,"570":1,"572":3,"573":9,"578":2,"579":1,"581":1,"588":1,"624":1,"659":1,"661":3,"663":1,"682":1,"685":1,"709":1,"712":1,"714":1,"715":1,"742":1,"744":1,"747":1,"772":1,"777":1,"795":1,"796":1,"799":1,"819":1,"828":3,"934":3,"941":1,"942":1,"957":1,"958":1,"960":1,"961":6,"962":1,"965":2,"966":2,"968":1,"970":2,"983":2,"991":1,"994":1,"1041":1}}],["核心策略",{"2":{"966":1,"967":1,"968":1,"969":1}}],["核心武器",{"2":{"965":2}}],["核心隔离原理",{"2":{"965":1}}],["核心驱动力",{"2":{"963":1}}],["核心原因可归纳为以下四点",{"2":{"963":1}}],["核心原理",{"0":{"23":1,"27":1,"31":1,"35":1,"40":1,"53":1,"105":1,"109":1,"114":1,"119":1},"2":{"134":1}}],["核心消息类型",{"2":{"952":1}}],["核心消息",{"0":{"952":1}}],["核心函数",{"2":{"939":1}}],["核心文本生成引擎",{"2":{"909":1}}],["核心文件",{"2":{"442":1,"850":1}}],["核心控制器",{"2":{"889":1}}],["核心实现",{"2":{"882":1}}],["核心实践",{"0":{"482":1},"1":{"483":1,"484":1}}],["核心实践原则",{"0":{"82":1}}],["核心属性",{"2":{"856":1}}],["核心动画",{"2":{"835":1}}],["核心公共",{"2":{"805":1}}],["核心算法",{"2":{"797":1}}],["核心流程是",{"2":{"795":1}}],["核心流程如下",{"2":{"74":1}}],["核心聚合层",{"0":{"798":1}}],["核心聚合",{"2":{"789":1}}],["核心导出",{"2":{"765":2}}],["核心库源码",{"2":{"790":1}}],["核心库源代码",{"2":{"763":1}}],["核心库",{"2":{"788":1}}],["核心库单元测试",{"2":{"763":1}}],["核心渲染系统",{"2":{"827":1}}],["核心渲染逻辑",{"2":{"763":1}}],["核心渲染入口",{"2":{"649":1}}],["核心节点",{"2":{"763":1}}],["核心数据流转时序",{"0":{"893":1},"1":{"894":1,"895":1,"896":1}}],["核心数据结构",{"2":{"891":1}}],["核心数据模型与基础设施",{"2":{"763":1}}],["核心数据容器",{"2":{"706":1,"713":1}}],["核心调度器",{"2":{"763":1}}],["核心入口",{"2":{"763":1}}],["核心方法",{"2":{"743":1,"825":1,"826":1}}],["核心架构包括",{"2":{"742":1}}],["核心职责",{"2":{"734":1,"762":1,"818":1}}],["核心分为五个层次",{"2":{"733":1}}],["核心源码目录",{"2":{"728":1}}],["核心小巧",{"2":{"702":1}}],["核心类型定义",{"0":{"805":1},"2":{"851":1}}],["核心类",{"2":{"693":1}}],["核心内部模块契约定义",{"2":{"749":1}}],["核心内部模块契约",{"0":{"692":1,"719":1,"749":1,"777":1,"834":1,"865":1,"925":1,"951":1,"994":1}}],["核心基础组件",{"2":{"647":1}}],["核心基础设施层",{"2":{"645":1,"646":1,"647":1}}],["核心基建",{"2":{"647":81,"677":21,"706":62,"735":79,"763":14,"790":9,"819":35,"851":32,"908":4,"939":114,"980":26}}],["核心维护交给",{"2":{"628":2}}],["核心问题",{"2":{"609":1}}],["核心要点",{"2":{"555":1,"556":1,"557":1}}],["核心要素与关键技术",{"0":{"408":1},"1":{"409":1,"410":1,"411":1,"412":1}}],["核心壁垒",{"2":{"540":1,"544":1,"551":1}}],["核心设计特点是消息可以增量到达",{"2":{"944":1}}],["核心设计哲学是",{"2":{"938":1}}],["核心设计要点",{"2":{"796":1,"798":1}}],["核心设计将一个文本布局问题拆解为三个阶段",{"2":{"788":1}}],["核心设计模式速查表",{"0":{"910":1}}],["核心设计模式是节点图",{"2":{"770":1}}],["核心设计模式",{"2":{"740":1}}],["核心设计模式为",{"2":{"645":1}}],["核心设计理念是",{"2":{"675":1}}],["核心设计是安全沙箱",{"2":{"655":1}}],["核心设计",{"0":{"494":1}}],["核心设计与职责分配",{"0":{"470":1}}],["核心设计与功能对比分析",{"0":{"98":1}}],["核心在于建立基础的产品审美与单点工具使用能力",{"2":{"459":1}}],["核心工具函数",{"2":{"964":1}}],["核心工具函数库",{"2":{"647":1}}],["核心工作流",{"2":{"451":1}}],["核心工程特性",{"2":{"344":1}}],["核心编写原则",{"0":{"445":1}}],["核心编译选项的详细注释说明",{"2":{"203":1}}],["核心机制与流程",{"0":{"443":1}}],["核心机制与运行规则",{"0":{"159":1}}],["核心指令注入当前上下文",{"2":{"443":1}}],["核心指令",{"2":{"442":1}}],["核心辨析",{"2":{"437":1,"438":1,"439":1}}],["核心组件中的记忆模块的一种具体实现",{"2":{"437":1}}],["核心组件与工作机制层出不穷",{"2":{"434":1}}],["核心运行机制",{"0":{"429":1}}],["核心运作流也非常简洁",{"2":{"85":1}}],["核心能力一览",{"2":{"632":1,"636":1}}],["核心能力标签",{"2":{"511":1,"512":1,"515":1,"518":1}}],["核心能力矩阵与",{"0":{"459":1}}],["核心能力",{"2":{"411":1,"553":1}}],["核心功能",{"2":{"410":2,"414":1,"799":1}}],["核心特点",{"2":{"958":1,"959":1,"960":1,"961":1,"962":1,"964":1}}],["核心特色",{"2":{"565":1}}],["核心特征",{"2":{"403":1}}],["核心特性",{"0":{"3":1}}],["核心价值",{"0":{"403":1},"2":{"561":1,"564":1,"567":1}}],["核心目标不仅是体验更好",{"2":{"400":1}}],["核心挑战是",{"2":{"367":1}}],["核心洞察",{"2":{"367":1,"463":1}}],["核心关注首字生成时间",{"2":{"353":1}}],["核心模块设计",{"0":{"890":1,"914":1},"1":{"891":1,"892":1,"915":1,"916":1,"917":1,"918":1,"919":1,"920":1}}],["核心模块设计详解与关键数据流时序",{"2":{"636":1}}],["核心模块职责",{"0":{"883":1}}],["核心模块入口",{"2":{"735":1}}],["核心模块组装器",{"2":{"677":1}}],["核心模块详解",{"0":{"651":1,"681":1,"710":1,"739":1,"767":1,"794":1,"823":1,"857":1,"943":1,"984":1},"1":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"711":1,"712":1,"713":1,"714":1,"715":1,"740":1,"741":1,"742":1,"743":1,"744":1,"768":1,"769":1,"770":1,"771":1,"772":1,"795":1,"796":1,"797":1,"798":1,"799":1,"824":1,"825":1,"826":1,"827":1,"828":1,"858":1,"859":1,"860":1,"944":1,"945":1,"946":1,"947":1,"948":1,"985":1,"986":1,"987":1,"988":1,"989":1}}],["核心模块",{"2":{"334":1}}],["核心模块选项",{"2":{"322":1}}],["核心思想是通过扩展原生",{"2":{"958":1}}],["核心思想",{"2":{"327":1,"341":1,"958":1,"959":1,"960":1,"961":1,"962":1,"964":1}}],["核心思想与流程",{"0":{"162":1}}],["核心规则",{"2":{"314":1,"472":1}}],["核心规范与实践解析",{"2":{"272":1}}],["核心场景",{"2":{"313":1,"844":1,"902":1}}],["核心痛点解决",{"2":{"670":1,"843":1}}],["核心痛点",{"2":{"297":1}}],["核心建议",{"2":{"292":1}}],["核心任务",{"2":{"282":1}}],["核心层负责提示词标准化",{"2":{"912":1}}],["核心层",{"2":{"279":1}}],["核心语法与实践",{"2":{"272":1}}],["核心依赖",{"2":{"221":1,"699":1}}],["核心概念",{"2":{"939":1}}],["核心概念解析",{"0":{"206":1},"1":{"207":1,"208":1,"209":1}}],["核心概念与核心特性",{"0":{"1":1},"1":{"2":1,"3":1,"4":1}}],["核心配置梳理",{"0":{"203":1}}],["核心标准",{"2":{"169":1}}],["核心业务场景",{"2":{"700":1,"729":1,"934":1}}],["核心业务实体与关联",{"0":{"650":1,"680":1,"709":1,"738":1,"766":1,"793":1,"822":1,"856":1,"913":1,"942":1,"983":1}}],["核心业务流程使用长轮询",{"2":{"168":1}}],["核心业务数据默认保鲜",{"2":{"94":1}}],["核心逻辑",{"0":{"488":1},"2":{"131":1,"304":1,"305":1,"307":1,"365":1,"366":1,"402":1,"414":1,"586":1}}],["核心逻辑是客户端定时向服务器发起请求",{"2":{"123":1}}],["核心诉求是首屏快",{"2":{"100":1}}],["核心是围绕",{"2":{"98":1}}],["核心哲学",{"2":{"98":1}}],["核心引擎基础设施层",{"2":{"819":1}}],["核心引擎层",{"2":{"704":1,"705":1,"706":1,"817":1,"818":2}}],["核心引擎提供扩展注册机制和调度管道",{"2":{"704":1}}],["核心引擎与分身",{"2":{"553":1}}],["核心引擎",{"2":{"92":1,"647":1,"708":1}}],["核心定位与特征",{"2":{"342":1}}],["核心定位",{"0":{"349":1},"2":{"91":1,"523":1,"562":1}}],["核心定义",{"0":{"2":1,"252":1},"2":{"460":1,"461":1,"462":1}}],["核心技术亮点",{"0":{"641":1,"672":1,"701":1,"730":1,"758":1,"786":1,"814":1,"845":1,"903":1,"935":1,"975":1}}],["核心技术栈清单",{"2":{"904":1}}],["核心技术栈",{"0":{"5":1},"1":{"6":1,"7":1,"8":1,"9":1}}],["核心技巧",{"2":{"89":1}}],["核心应用场景解析",{"0":{"86":1,"93":1},"1":{"87":1,"88":1,"89":1,"94":1,"95":1,"96":1}}],["核心包非常小",{"2":{"85":1}}],["核心利用的能力",{"2":{"80":1}}],["核心",{"0":{"15":1,"339":1},"2":{"15":1,"88":1,"647":2,"706":1,"763":1,"806":1,"818":1,"906":1,"907":1,"908":1,"931":1,"939":1}}],["核心作用及触发时机",{"2":{"442":1}}],["核心作用与使用场景",{"2":{"91":1}}],["核心作用",{"2":{"9":1}}],["核心优势",{"2":{"6":1,"255":1,"308":1,"342":1,"521":1,"522":1,"568":1,"965":1}}],["核心构建工具",{"0":{"6":1}}],["1个小时",{"2":{"1045":2}}],["1个controller",{"2":{"190":1}}],["1gemini",{"2":{"998":1}}],["1cursor",{"2":{"998":1}}],["1codex",{"2":{"998":1}}],["1typescriptimport",{"2":{"809":1}}],["1javascriptlottie",{"2":{"754":1}}],["19825",{"2":{"860":1,"866":1}}],["19kb",{"2":{"763":1}}],["19",{"2":{"677":1,"904":1}}],["1991",{"2":{"103":1}}],["1688",{"2":{"851":2}}],["16px",{"2":{"809":1,"958":1,"959":1,"960":1,"961":1}}],["16kb",{"2":{"763":1}}],["1632行",{"2":{"706":1}}],["16",{"2":{"665":1}}],["16+",{"2":{"203":1}}],["1323行",{"2":{"939":1}}],["13kb",{"2":{"763":1}}],["13",{"2":{"643":1,"728":1,"763":1,"986":1}}],["13+",{"2":{"13":1}}],["1807",{"2":{"1015":1}}],["180",{"2":{"839":1}}],["18个子路径导出",{"2":{"819":1}}],["18kb",{"2":{"763":2}}],["18种",{"2":{"763":1}}],["185",{"2":{"728":1}}],["18+",{"2":{"722":1,"780":1,"904":1,"954":1}}],["18",{"2":{"642":1,"655":1,"665":1,"790":1,"904":1,"929":1}}],["1m",{"2":{"523":1}}],["17",{"2":{"288":1,"790":3}}],["17+",{"2":{"203":1}}],["1分钟验证",{"2":{"199":1}}],["1秒后重试",{"2":{"898":1}}],["1秒",{"2":{"163":1}}],["1115行",{"2":{"939":1}}],["1114行",{"2":{"939":1}}],["11个文件",{"2":{"819":1}}],["112个",{"2":{"763":1}}],["1100",{"2":{"705":1,"715":1}}],["11",{"2":{"160":1,"331":1,"964":1}}],["11ty",{"2":{"6":1,"20":1}}],["15s",{"2":{"860":1}}],["15种",{"2":{"763":1}}],["15种材质",{"2":{"763":1}}],["15kb",{"2":{"646":1,"647":1,"763":3}}],["15+",{"2":{"470":1,"472":1}}],["150",{"2":{"439":1}}],["15000",{"2":{"160":1,"163":1}}],["150ms",{"2":{"47":1}}],["15秒到了任务还没完成",{"2":{"163":1}}],["15秒",{"2":{"160":2,"162":1,"163":1}}],["15",{"2":{"159":1,"160":1,"164":2,"289":1,"331":1,"416":1,"904":1}}],["1s",{"2":{"146":1,"150":2}}],["1052行",{"2":{"939":1}}],["105+",{"2":{"646":1,"647":1}}],["10px",{"2":{"828":3}}],["108kb",{"2":{"763":1}}],["10kb",{"2":{"763":2,"962":1}}],["10+",{"2":{"758":1,"929":1,"936":1,"954":1}}],["1029行",{"2":{"735":1}}],["1024",{"2":{"448":1}}],["10万+",{"2":{"701":1}}],["10分钟高强度运动",{"2":{"605":1}}],["10x",{"0":{"462":1}}],["10~15",{"2":{"162":1}}],["10~30",{"2":{"124":1}}],["10秒",{"2":{"160":1}}],["10s",{"2":{"130":1,"131":1}}],["10",{"0":{"968":1},"2":{"124":1,"128":1,"159":1,"163":1,"258":1,"262":1,"291":1,"343":1,"350":1,"366":1,"416":1,"459":2,"460":1,"470":1,"472":2,"522":1,"564":1,"565":1,"600":1,"652":1,"696":1,"724":2,"747":1,"763":1,"790":1,"904":2,"938":1,"939":4,"964":1,"965":2,"968":1,"971":2,"1043":1}}],["101",{"2":{"114":1,"236":1}}],["100x",{"2":{"904":1}}],["100px",{"2":{"828":3}}],["100+",{"2":{"523":1,"906":1,"908":1}}],["100",{"2":{"153":1,"281":2,"329":1,"511":1,"512":2,"522":2,"550":1,"652":1,"696":1,"819":1,"874":1,"962":2,"964":1,"965":2}}],["1000ms",{"2":{"891":1}}],["10000",{"2":{"160":1,"594":1}}],["1000",{"2":{"94":1,"139":1,"146":1,"150":1,"153":2,"154":1,"163":1,"330":1,"594":1,"705":2,"715":1,"782":1,"819":1}}],["100ms",{"2":{"47":1}}],["14个可组合技能",{"2":{"980":1}}],["14个模块聚合",{"2":{"821":1}}],["14个模块的所有公共api",{"2":{"819":1}}],["14kb",{"2":{"763":2}}],["142+",{"2":{"645":1,"646":1,"647":1}}],["142",{"2":{"643":1}}],["14159",{"2":{"295":2,"310":1}}],["14",{"2":{"41":1,"115":1,"181":1,"193":1,"665":1,"814":1,"821":1,"936":1,"939":1,"978":1}}],["12+",{"2":{"975":1}}],["1250",{"2":{"839":1}}],["128",{"2":{"828":1}}],["128k~1m",{"2":{"522":1}}],["120个文件",{"2":{"819":1}}],["12kb",{"2":{"763":3}}],["127",{"2":{"666":2,"860":1,"866":1}}],["12解决循环依赖的方法",{"2":{"315":1}}],["12创建对应的测试文件",{"2":{"223":1}}],["123",{"2":{"247":1,"265":2,"288":1,"289":1,"318":1,"481":1,"567":1,"726":1,"869":1,"886":1,"906":1}}],["123注意",{"2":{"152":1}}],["1234skill",{"2":{"586":1}}],["1234通过",{"2":{"335":1}}],["1234",{"2":{"63":1,"314":1}}],["12345启动后访问",{"2":{"955":1}}],["12345完整目录树",{"2":{"882":1}}],["12345这样一来",{"2":{"575":1}}],["12345善于结合其他",{"2":{"263":1}}],["12345合理使用泛型约束",{"2":{"263":1}}],["12345优先使用类型推断",{"2":{"263":1}}],["12345swr",{"2":{"78":1}}],["12345",{"2":{"17":1,"191":1,"221":1,"442":1,"447":1,"722":1,"753":1,"809":1,"930":1}}],["123456行解析状态机",{"2":{"892":1}}],["123456项目级的",{"2":{"570":1}}],["123456用集合语言表述这一对偶性",{"2":{"242":1}}],["123456这种设计让模块化具备了极强的扩展性",{"2":{"321":1}}],["123456这是因为",{"2":{"239":1}}],["123456这意味着不需要额外搭建",{"2":{"71":1}}],["1234567options",{"2":{"482":1}}],["1234567monorepo",{"2":{"335":1}}],["1234567运行测试",{"2":{"224":1}}],["12345678调用",{"2":{"582":1}}],["12345678正如你所见",{"2":{"295":1}}],["12345678多级配置继承示例",{"2":{"216":1}}],["12345678",{"2":{"72":1,"187":1,"197":1,"216":1,"229":1,"310":1,"695":1,"723":1,"902":1}}],["12345678generatemetadata",{"2":{"70":1}}],["123456789关键函数流程",{"2":{"891":1}}],["123456789执行结果",{"2":{"315":1}}],["123456789应用场景",{"2":{"312":1}}],["123456789实践建议",{"2":{"311":1}}],["123456789各层职责详解",{"2":{"279":1}}],["123456789stage",{"2":{"143":1}}],["12345678910本质原因",{"2":{"237":1}}],["12345678910联合类型有一个核心约束需要特别注意",{"2":{"229":1}}],["12345678910",{"2":{"196":1,"325":1,"470":1}}],["12345678910fetch",{"2":{"149":1}}],["1234567891011然后",{"2":{"960":1}}],["1234567891011",{"2":{"781":1,"808":1,"839":1,"870":1}}],["1234567891011typescript",{"2":{"318":1}}],["1234567891011在",{"2":{"306":1}}],["123456789101112通过保存这个",{"2":{"486":1}}],["123456789101112javascript",{"2":{"311":1}}],["123456789101112理解分配律有助于简化复杂的类型表达式",{"2":{"243":1}}],["123456789101112",{"2":{"212":1,"240":1,"265":1,"300":1,"315":1,"504":1,"856":1,"960":1}}],["12345678910111213通过这种方式",{"2":{"319":1}}],["12345678910111213从集合角度理解",{"2":{"236":1}}],["12345678910111213为什么可辨识联合如此重要",{"2":{"230":1}}],["1234567891011121314最终效果如下",{"2":{"490":1}}],["1234567891011121314输出目录",{"2":{"471":1}}],["1234567891011121314javascript",{"2":{"310":1}}],["1234567891011121314原理",{"2":{"232":1}}],["1234567891011121314",{"2":{"184":1,"289":1,"305":1,"333":1,"484":1,"667":1,"913":1}}],["123456789101112131415核心优势",{"2":{"318":1}}],["123456789101112131415在另一个文件中",{"2":{"295":1}}],["123456789101112131415这些看似抽象的关系",{"2":{"244":1}}],["123456789101112131415",{"2":{"91":1,"505":2,"927":1}}],["12345678910111213141516其中",{"2":{"591":1}}],["12345678910111213141516上面这条规则只会在操作",{"2":{"576":1}}],["12345678910111213141516更多流式输出的细节可参考",{"2":{"488":1}}],["12345678910111213141516原理解释",{"2":{"247":1}}],["12345678910111213141516",{"2":{"89":1,"216":1,"222":1,"474":1,"483":1,"738":1}}],["1234567891011121314151617执行顺序",{"2":{"314":1}}],["1234567891011121314151617",{"2":{"166":1,"213":1,"258":1,"304":1,"313":1,"322":1,"448":1,"724":1}}],["1234567891011121314151617业务层面也需要追踪状态",{"2":{"148":1}}],["123456789101112131415161718tailwind",{"2":{"962":1}}],["12345678910111213141516171819核心数据结构",{"2":{"892":1}}],["12345678910111213141516171819",{"2":{"696":1,"709":1}}],["1234567891011121314151617181920",{"2":{"508":1,"586":1,"798":1,"912":1}}],["123456789101112131415161718192021",{"2":{"214":1,"268":1,"451":1,"879":1}}],["12345678910111213141516171819202122allow",{"2":{"594":1}}],["1234567891011121314151617181920212223文件作用说明",{"2":{"570":1}}],["1234567891011121314151617181920212223",{"2":{"249":1,"507":1,"826":1,"882":1,"942":1}}],["1234567891011121314151617181920212223242526设计巧思解析",{"2":{"494":1}}],["1234567891011121314151617181920212223242526",{"2":{"315":1,"712":1,"740":1,"771":1}}],["1234567891011121314151617181920212223242526272",{"2":{"204":1}}],["1234567891011121314151617181920212223242526272829",{"2":{"315":1,"650":1,"682":1,"686":1,"713":1,"828":1}}],["1234567891011121314151617181920212223242526272829302",{"2":{"288":1}}],["123456789101112131415161718192021222324252627282930",{"2":{"248":1,"259":1,"288":1,"656":1,"715":1,"743":1,"769":1,"796":1,"822":1}}],["1234567891011121314151617181920212223242526272829303132",{"2":{"573":1,"711":1,"742":1,"768":1,"770":1,"859":1,"917":1}}],["123456789101112131415161718192021222324252627282930313233",{"2":{"654":1,"680":1,"684":1,"744":1,"899":1,"944":1,"995":1}}],["1234567891011121314151617181920212223242526272829303132335",{"2":{"281":1}}],["12345678910111213141516171819202122232425262728293031323334关键设计细节",{"2":{"915":1}}],["12345678910111213141516171819202122232425262728293031323334",{"2":{"649":1,"916":1}}],["123456789101112131415161718192021222324252627282930313233344",{"2":{"281":1}}],["1234567891011121314151617181920212223242526272829303132333435",{"2":{"720":1,"985":1,"989":1}}],["1234567891011121314151617181920212223242526272829303132333435经过这三层处理",{"2":{"143":1}}],["123456789101112131415161718192021222324252627282930313233343536关键端点",{"2":{"860":1}}],["1234567891011121314151617181920212223242526272829303132333435362",{"2":{"289":1}}],["12345678910111213141516171819202122232425262728293031323334353637",{"2":{"94":1,"766":1,"945":1,"988":1}}],["123456789101112131415161718192021222324252627282930313233343536373839",{"2":{"825":1,"947":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940",{"2":{"708":1,"741":1,"855":1,"926":1}}],["123456789101112131415161718192021222324252627282930313233343536373839403",{"2":{"289":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041分层职责说明",{"2":{"789":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142",{"2":{"506":1,"683":1,"948":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243",{"2":{"482":1,"858":1,"889":1,"891":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344",{"2":{"269":1,"795":1,"986":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546",{"2":{"652":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445462",{"2":{"281":1,"451":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748",{"2":{"489":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647485",{"2":{"288":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849这份决策树不仅可以指导技术选型",{"2":{"965":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849clicommand",{"2":{"865":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950",{"2":{"231":1,"267":1,"892":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152",{"2":{"946":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556",{"2":{"964":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162",{"2":{"705":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667",{"2":{"849":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970",{"2":{"938":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071分层职责说明",{"2":{"734":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576",{"2":{"925":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677",{"2":{"907":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677分层职责说明",{"2":{"818":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788",{"2":{"778":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697",{"2":{"951":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798",{"2":{"835":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102",{"2":{"952":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115",{"2":{"819":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118",{"2":{"719":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130",{"2":{"866":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136",{"2":{"994":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146",{"2":{"790":1,"851":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155",{"2":{"280":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162",{"2":{"980":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174",{"2":{"706":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208",{"2":{"749":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283",{"2":{"939":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336",{"2":{"763":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311",{"2":{"203":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251",{"2":{"834":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249",{"2":{"777":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241",{"2":{"735":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217",{"2":{"692":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194",{"2":{"647":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157",{"2":{"274":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133",{"2":{"805":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128这个示例涵盖了前文所述的核心要点",{"2":{"150":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899",{"2":{"16":1,"979":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293",{"2":{"677":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485分层职责说明",{"2":{"762":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283",{"2":{"750":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081",{"2":{"646":1,"898":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475",{"2":{"290":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273这段代码演示了",{"2":{"141":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768",{"2":{"663":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566",{"2":{"676":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465",{"2":{"661":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859",{"2":{"662":1,"965":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859关键点说明",{"2":{"153":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354",{"2":{"281":1,"693":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051",{"2":{"275":1,"679":1,"821":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051可以看到",{"2":{"144":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849优点",{"2":{"160":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647",{"2":{"154":1,"261":1,"962":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445",{"2":{"45":1,"262":1,"792":1,"865":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142优点",{"2":{"164":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142注",{"2":{"163":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041",{"2":{"96":1,"655":1,"765":1,"961":1}}],["1234567891011121314151617181920212223242526272829303132333435363738393",{"2":{"281":1}}],["1234567891011121314151617181920212223242526272829303132333435363738",{"2":{"87":1,"653":1,"772":1,"982":1}}],["123456789101112131415161718192021222324252627282930313233343536",{"2":{"88":1,"260":1,"806":1}}],["12345678910111213141516171819202122232425262728293031",{"2":{"266":1,"793":1,"918":1,"941":1,"987":1}}],["1234567891011121314151617181920212223242526272829303",{"2":{"204":1}}],["123456789101112131415161718192021222324252627282930可以看到",{"2":{"139":1}}],["12345678910111213141516171819202122232425262728",{"2":{"46":1,"782":1,"959":1}}],["123456789101112131415161718192021222324252627stage",{"2":{"143":1}}],["123456789101112131415161718192021222324252627",{"2":{"14":1,"204":1,"737":1,"797":1,"958":1}}],["123456789101112131415161718192021222324254",{"2":{"288":1}}],["123456789101112131415161718192021222324253",{"2":{"288":1}}],["12345678910111213141516171819202122232425api",{"2":{"138":1}}],["12345678910111213141516171819202122232425",{"2":{"15":1,"302":1,"315":1,"714":1,"827":1}}],["123456789101112131415161718192021222324",{"2":{"15":1,"449":1}}],["12345678910111213141516171819202122为什么比",{"2":{"246":1}}],["12345678910111213141516171819202122",{"2":{"147":1,"215":1,"330":1,"668":1,"685":1,"799":1,"824":1,"908":1,"983":1}}],["123456789101112131415161718192021stage",{"2":{"143":1}}],["12345678910111213141516171819原理",{"2":{"238":1}}],["12345678910111213141516171819有了辨识字段",{"2":{"230":1}}],["123456789101112131415161718何时重试",{"2":{"146":1}}],["123456789101112131415161718",{"2":{"95":1,"301":1,"324":1,"328":1,"331":1,"581":1,"640":1}}],["123456789101112131415161718优势分析",{"2":{"85":1}}],["1234567891011121314151617modellist",{"2":{"74":1}}],["1234567891011121314151617根布局",{"2":{"67":1}}],["12345678910111213",{"2":{"35":1,"185":1,"211":1,"223":1,"233":1,"307":1,"327":1,"836":1,"878":1}}],["1234567891011每个事件由可选的",{"2":{"136":1}}],["12345678910在后续导航中",{"2":{"61":1}}],["123456789",{"2":{"23":1,"27":1,"40":1,"62":1,"190":1,"234":1,"244":1,"666":1,"725":1,"780":1}}],["1234567cache",{"2":{"69":1}}],["1234567",{"2":{"16":1,"31":1,"481":1,"754":1,"877":1}}],["123456",{"2":{"13":1,"193":1,"194":1,"196":1,"197":1,"216":2,"840":1,"841":1}}],["12",{"2":{"14":1,"16":1,"188":1,"331":2,"334":1,"441":1,"665":1,"916":1,"986":1}}],["1",{"0":{"1":1,"2":2,"3":1,"4":1,"6":1,"10":1,"11":1,"13":1,"21":1,"45":1,"49":1,"56":1,"57":2,"58":1,"59":1,"61":1,"65":1,"69":1,"74":1,"80":1,"83":1,"84":1,"85":2,"86":1,"87":1,"91":1,"94":1,"98":1,"102":1,"105":1,"109":1,"114":1,"119":1,"124":1,"130":1,"133":1,"134":2,"135":1,"136":1,"138":1,"141":1,"146":1,"152":1,"156":1,"158":1,"162":1,"166":1,"169":1,"173":1,"177":1,"181":1,"183":1,"202":1,"203":2,"204":1,"206":1,"207":1,"212":1,"219":1,"221":1,"227":1,"229":1,"236":1,"242":1,"246":1,"251":1,"252":2,"253":1,"254":1,"255":1,"256":1,"258":1,"265":1,"272":1,"274":1,"277":1,"285":1,"294":1,"297":1,"304":1,"310":1,"317":1,"327":1,"333":1,"338":1,"348":1,"352":1,"357":1,"363":1,"365":1,"369":1,"372":1,"377":1,"382":1,"390":1,"391":2,"392":1,"393":1,"394":1,"396":1,"402":1,"405":1,"409":1,"414":1,"421":1,"423":1,"429":1,"434":1,"441":1,"445":1,"447":1,"453":1,"457":1,"459":1,"467":1,"470":1,"474":1,"477":1,"480":1,"483":1,"486":1,"488":1,"492":1,"496":1,"498":1,"501":1,"504":1,"510":1,"511":2,"512":1,"514":1,"517":1,"519":1,"521":1,"525":1,"527":1,"531":1,"535":1,"540":1,"541":2,"542":1,"543":1,"545":1,"553":1,"555":1,"559":1,"561":1,"564":1,"567":1,"569":1,"572":1,"576":1,"580":1,"585":1,"590":1,"594":1,"598":1,"600":1,"606":1,"616":1,"617":2,"618":1,"620":1,"624":1,"638":1,"639":2,"640":1,"641":1,"642":1,"643":1,"645":1,"649":1,"661":1,"665":1,"669":1,"670":2,"671":1,"672":1,"673":1,"675":1,"679":1,"692":1,"695":1,"698":1,"699":2,"700":1,"701":1,"702":1,"704":1,"708":1,"717":1,"719":1,"722":1,"727":1,"728":2,"729":1,"730":1,"731":1,"733":1,"737":1,"749":1,"753":1,"756":1,"757":2,"758":1,"759":1,"761":1,"765":1,"777":1,"780":1,"783":1,"784":2,"785":1,"786":1,"788":1,"792":1,"805":1,"808":1,"811":1,"812":2,"813":1,"814":1,"815":1,"817":1,"821":1,"834":1,"838":1,"842":1,"843":2,"844":1,"845":1,"846":1,"848":1,"853":1,"858":1,"862":1,"865":1,"868":1,"877":1,"891":1,"900":1,"901":2,"902":1,"903":1,"904":1,"906":1,"912":1,"915":1,"922":1,"925":1,"929":1,"932":1,"933":2,"934":1,"935":1,"936":1,"938":1,"941":1,"951":1,"954":1,"957":1,"966":1,"972":1,"973":2,"974":1,"975":1,"976":1,"978":1,"982":1,"994":1,"997":1,"1005":1,"1008":1,"1011":1,"1024":1,"1029":1,"1034":1,"1040":1,"1044":1},"1":{"2":1,"3":1,"4":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"50":1,"51":1,"52":1,"57":1,"58":1,"59":1,"85":1,"86":1,"87":2,"88":2,"89":2,"134":1,"135":1,"136":1,"184":1,"185":1,"203":1,"204":1,"207":1,"208":1,"209":1,"252":1,"253":1,"254":1,"255":1,"256":1,"391":1,"392":1,"393":1,"394":1,"505":1,"507":1,"508":1,"511":1,"512":1,"541":1,"542":1,"543":1,"617":1,"618":1,"639":1,"640":1,"641":1,"642":1,"643":1,"670":1,"671":1,"672":1,"673":1,"699":1,"700":1,"701":1,"702":1,"728":1,"729":1,"730":1,"731":1,"757":1,"758":1,"759":1,"784":1,"785":1,"786":1,"812":1,"813":1,"814":1,"815":1,"843":1,"844":1,"845":1,"846":1,"854":1,"855":1,"901":1,"902":1,"903":1,"904":1,"933":1,"934":1,"935":1,"936":1,"973":1,"974":1,"975":1,"976":1},"2":{"13":1,"21":1,"47":1,"67":1,"88":1,"89":1,"92":4,"94":2,"96":1,"99":1,"103":3,"112":2,"117":1,"125":2,"131":1,"136":1,"139":1,"141":1,"143":2,"144":1,"146":1,"150":1,"154":1,"160":2,"163":2,"169":1,"171":1,"204":1,"223":3,"224":1,"231":1,"238":2,"246":1,"254":1,"258":1,"259":1,"260":1,"261":2,"266":1,"269":1,"281":1,"288":1,"289":3,"295":2,"304":2,"307":1,"313":1,"329":1,"330":1,"331":7,"342":1,"383":1,"407":2,"411":1,"430":1,"443":2,"449":2,"451":4,"464":1,"477":1,"480":1,"494":2,"504":1,"505":1,"506":7,"507":3,"509":1,"522":1,"550":2,"581":1,"586":1,"591":1,"631":2,"640":1,"643":1,"647":1,"650":14,"652":1,"653":2,"666":2,"672":1,"680":7,"683":2,"699":2,"706":1,"708":2,"709":16,"738":16,"750":2,"757":1,"766":24,"770":1,"772":6,"778":7,"782":8,"790":3,"793":4,"796":1,"819":2,"822":21,"827":1,"834":6,"838":1,"856":3,"860":1,"866":2,"879":1,"880":1,"881":1,"891":1,"892":3,"904":1,"913":14,"915":1,"918":1,"939":3,"942":3,"945":1,"947":1,"948":1,"952":1,"958":1,"959":1,"964":1,"965":5,"973":1,"980":3,"983":19,"986":2,"987":1,"988":1,"998":1,"1007":1,"1016":1,"1026":2,"1027":1,"1036":2,"1047":1,"1048":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/@localSearchIndexroot.x1hrxyuH.js b/assets/chunks/@localSearchIndexroot.x1hrxyuH.js deleted file mode 100644 index f5cce62..0000000 --- a/assets/chunks/@localSearchIndexroot.x1hrxyuH.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":966,"nextId":966,"documentIds":{"0":"/fullstack/overview#精选专题","1":"/fullstack/react-design-philosophy-ai-augmented#_1-引言","2":"/fullstack/react-design-philosophy-ai-augmented#_2-划分具备分层结构的-自治-组件","3":"/fullstack/react-design-philosophy-ai-augmented#_3-构建纯渲染的静态版本-确立工程基线","4":"/fullstack/react-design-philosophy-ai-augmented#_4-寻找状态的最简表示-敲定拓扑位置","5":"/fullstack/react-design-philosophy-ai-augmented#_4-1-什么是-state-什么是-derived-data-派生数据","6":"/fullstack/react-design-philosophy-ai-augmented#_4-2-敲定-state-的安放位置","7":"/fullstack/react-design-philosophy-ai-augmented#_4-建立反向数据流-让回调成为刚性契约","8":"/fullstack/react-design-philosophy-ai-augmented#_5-规范驱动开发-sdd-从执行者转变为立法者","9":"/fullstack/react-design-philosophy-ai-augmented#_5-1-sdd-模式的核心流程与实践要点","10":"/fullstack/react-design-philosophy-ai-augmented#_5-2-sdd-模式的适用场景","11":"/fullstack/react-design-philosophy-ai-augmented#_5-3-为什么-react-与-sdd-天生一对","12":"/fullstack/react-design-philosophy-ai-augmented#_6-结语-工程师的不可替代性","13":"/fullstack/jamstack#_1-jamstack-核心概念与核心特性","14":"/fullstack/jamstack#_1-1-核心定义","15":"/fullstack/jamstack#_1-2-核心特性-与传统动态网站对比","16":"/fullstack/jamstack#_1-3-关键误区澄清","17":"/fullstack/jamstack#_2-jamstack-核心技术栈-工具链选型","18":"/fullstack/jamstack#_2-1-核心构建工具-静态站点生成器-ssg","19":"/fullstack/jamstack#_2-2-静态资源托管-部署平台","20":"/fullstack/jamstack#_2-3-api-baas-服务-后端能力补充","21":"/fullstack/jamstack#_2-4-无头-cms-内容管理","22":"/fullstack/jamstack#_3-jamstack-项目实践-从-0-到-1-搭建博客网站","23":"/fullstack/jamstack#_3-1-技术栈选型","24":"/fullstack/jamstack#_3-2-具体实施步骤","25":"/fullstack/jamstack#步骤-1-初始化-next-js-项目-ssg-模式","26":"/fullstack/jamstack#步骤-2-配置-contentful-内容管理","27":"/fullstack/jamstack#步骤-3-预渲染博客页面-ssg-核心","28":"/fullstack/jamstack#步骤-4-集成-supabase-实现动态评论","29":"/fullstack/jamstack#步骤-5-部署到-vercel-一键上线","30":"/fullstack/jamstack#_3-3-项目扩展-从博客到电商-jamstack-场景延伸","31":"/fullstack/jamstack#_4-jamstack-适用场景与不适用场景","32":"/fullstack/jamstack#_5-总结","33":"/fullstack/frontend-rendering-scheme#_1-引言","34":"/fullstack/frontend-rendering-scheme#_2-csr-渲染方案","35":"/fullstack/frontend-rendering-scheme#核心原理","36":"/fullstack/frontend-rendering-scheme#优缺点","37":"/fullstack/frontend-rendering-scheme#适用与不适用场景","38":"/fullstack/frontend-rendering-scheme#_3-ssr-渲染方案","39":"/fullstack/frontend-rendering-scheme#核心原理-1","40":"/fullstack/frontend-rendering-scheme#优缺点-1","41":"/fullstack/frontend-rendering-scheme#适用与不适用场景-1","42":"/fullstack/frontend-rendering-scheme#_4-ssg-渲染方案","43":"/fullstack/frontend-rendering-scheme#核心原理-2","44":"/fullstack/frontend-rendering-scheme#优缺点-2","45":"/fullstack/frontend-rendering-scheme#适用与不适用场景-2","46":"/fullstack/frontend-rendering-scheme#_5-isr-渲染方案","47":"/fullstack/frontend-rendering-scheme#核心原理-3","48":"/fullstack/frontend-rendering-scheme#isr-的两种模式","49":"/fullstack/frontend-rendering-scheme#优缺点-3","50":"/fullstack/frontend-rendering-scheme#适用与不适用场景-3","51":"/fullstack/frontend-rendering-scheme#_6-ppr-渲染方案","52":"/fullstack/frontend-rendering-scheme#核心原理-4","53":"/fullstack/frontend-rendering-scheme#与-isr-的本质区别","54":"/fullstack/frontend-rendering-scheme#优缺点-4","55":"/fullstack/frontend-rendering-scheme#适用与不适用场景-4","56":"/fullstack/frontend-rendering-scheme#_7-关键差异点分析与实践选择指南","57":"/fullstack/frontend-rendering-scheme#_7-1-五种方案综合对比","58":"/fullstack/frontend-rendering-scheme#_7-3-选型决策树","59":"/fullstack/frontend-rendering-scheme#_7-4-常见落地陷阱与解决方案","60":"/fullstack/frontend-rendering-scheme#_8-vitepress-一个典型的-ssg-实践案例","61":"/fullstack/frontend-rendering-scheme#_8-1-vitepress-如何落地-ssg","62":"/fullstack/frontend-rendering-scheme#_1-构建时穷举","63":"/fullstack/frontend-rendering-scheme#_2-零运行时","64":"/fullstack/frontend-rendering-scheme#_3-纯静态分发","65":"/fullstack/frontend-rendering-scheme#_8-2-核心原理","66":"/fullstack/frontend-rendering-scheme#_8-3-从-vitepress-学到的五件事","67":"/fullstack/frontend-rendering-scheme#_9-结语","68":"/fullstack/next-deep-dive#_1-从-react-ssr-到-next-js-为什么需要一个框架","69":"/fullstack/next-deep-dive#_1-1-react-dom-server-—-服务端渲染","70":"/fullstack/next-deep-dive#_1-2-react-dom-client-—-客户端水合-hydration","71":"/fullstack/next-deep-dive#_1-3-从-库-到-框架-的鸿沟","72":"/fullstack/next-deep-dive#_2-server-first-next-js-的架构内核","73":"/fullstack/next-deep-dive#_2-1-react-server-components-rsc","74":"/fullstack/next-deep-dive#_2-2-client-components-按需声明交互边界","75":"/fullstack/next-deep-dive#_3-混合渲染-四种策略-各取所需-灵活混用","76":"/fullstack/next-deep-dive#_4-app-router-文件系统即路由系统-约定大于配置","77":"/fullstack/next-deep-dive#_4-1-基础规则","78":"/fullstack/next-deep-dive#_4-2-特殊文件约定","79":"/fullstack/next-deep-dive#_4-3-目录结构与路由关系示例","80":"/fullstack/next-deep-dive#_5-数据获取的新范式","81":"/fullstack/next-deep-dive#_5-1-记忆化请求去重","82":"/fullstack/next-deep-dive#_5-2-动态-seo-元数据","83":"/fullstack/next-deep-dive#_5-3-api-routes-内置后端能力","84":"/fullstack/next-deep-dive#_6-内置优化组件-让性能在框架层解决","85":"/fullstack/next-deep-dive#_6-性能进阶-streaming、suspense、ppr-与-cache","86":"/fullstack/next-deep-dive#_6-1-streaming-suspense-先让用户看到内容","87":"/fullstack/next-deep-dive#_6-3-ppr-partial-prerendering-动静分离","88":"/fullstack/next-deep-dive#_6-4-cache-components-use-cache-跳过重复计算","89":"/fullstack/next-deep-dive#_6-5-ppr-cache-的协同","90":"/fullstack/next-deep-dive#_6-6-客户端缓存-swr","91":"/fullstack/next-deep-dive#_7-场景边界与建议","92":"/fullstack/next-deep-dive#_7-1-适合-next-js-的场景","93":"/fullstack/next-deep-dive#_7-2-不适合-next-js-的场景","94":"/fullstack/next-deep-dive#_7-3-核心实践原则","95":"/fullstack/server-state-management#_1-引言","96":"/fullstack/server-state-management#_1-swr","97":"/fullstack/server-state-management#_1-1-简介与核心流程说明","98":"/fullstack/server-state-management#_1-3-核心应用场景解析","99":"/fullstack/server-state-management#场景-1-封装领域-hook-与全局配置","100":"/fullstack/server-state-management#场景-2-乐观-ui-更新-optimistic-ui","101":"/fullstack/server-state-management#场景-3-依赖请求-dependent-fetching","102":"/fullstack/server-state-management#_2-tanstack-query-react-query","103":"/fullstack/server-state-management#_2-1-简介与核心流程说明","104":"/fullstack/server-state-management#_2-2-优势分析","105":"/fullstack/server-state-management#_2-3-核心应用场景解析","106":"/fullstack/server-state-management#场景-1-全局引擎配置-queryclient","107":"/fullstack/server-state-management#场景-2-高级查询-数据转换、依赖与分页","108":"/fullstack/server-state-management#场景-3-架构级难点-——-乐观-ui-更新-optimistic-updates","109":"/fullstack/server-state-management#_3-选型评估-swr-vs-react-query","110":"/fullstack/server-state-management#_3-1-核心设计与功能对比分析","111":"/fullstack/server-state-management#_3-2-场景驱动选型-到底需要哪一个","112":"/fullstack/server-state-management#场景-a-应该毫不犹豫选择-swr-的情况","113":"/fullstack/server-state-management#场景-b-应该毫不犹豫选择-tanstack-query-的情况","114":"/fullstack/networking-protocol-selection-guide#_1-引言","115":"/fullstack/networking-protocol-selection-guide#_2-传统-http——web-通信的基石","116":"/fullstack/networking-protocol-selection-guide#_3-流式-http-streamable-http","117":"/fullstack/networking-protocol-selection-guide#_3-1-核心原理-分块传输的艺术","118":"/fullstack/networking-protocol-selection-guide#_3-2-应用场景-从大文件到-ai-时代","119":"/fullstack/networking-protocol-selection-guide#_3-3-隐藏的坑-代理与缓冲","120":"/fullstack/networking-protocol-selection-guide#_4-sse-server-sent-events-规范化的单向推送协议","121":"/fullstack/networking-protocol-selection-guide#_4-1-核心原理-严格的文本契约","122":"/fullstack/networking-protocol-selection-guide#_4-2-网络机制-原生浏览器的-自动驾驶","123":"/fullstack/networking-protocol-selection-guide#_4-3-典型场景-轻量级的实时感知","124":"/fullstack/networking-protocol-selection-guide#_4-4-工程避坑指南-不可忽视的约束","125":"/fullstack/networking-protocol-selection-guide#_5-websocket-全双工通信","126":"/fullstack/networking-protocol-selection-guide#_5-1-核心原理","127":"/fullstack/networking-protocol-selection-guide#_5-2-网络机制","128":"/fullstack/networking-protocol-selection-guide#_5-3-应用场景-高互动的终极方案","129":"/fullstack/networking-protocol-selection-guide#_5-4-工程落地的-重装-代价","130":"/fullstack/networking-protocol-selection-guide#_6-webhooks-事件驱动的反向回调","131":"/fullstack/networking-protocol-selection-guide#_6-1-核心原理-回调的自动化","132":"/fullstack/networking-protocol-selection-guide#_6-2-典型场景-跨系统的松耦合集成","133":"/fullstack/networking-protocol-selection-guide#_6-3-工程考量-可靠投递与安全防护","134":"/fullstack/networking-protocol-selection-guide#_6-4-与-sse-的本质区别","135":"/fullstack/networking-protocol-selection-guide#_7-关于-http-轮询的讨论","136":"/fullstack/networking-protocol-selection-guide#_7-1-任务特性的本质差异-流式输出-vs-异步大任务","137":"/fullstack/networking-protocol-selection-guide#_7-2-基础设施的残酷现实-连接池枯竭与网关超时","138":"/fullstack/networking-protocol-selection-guide#_7-3-后端架构的天然要求-解耦与消息队列","139":"/fullstack/networking-protocol-selection-guide#_7-4-移动端弱网环境下的-绝对鲁棒性","140":"/fullstack/networking-protocol-selection-guide#_7-5-小结","141":"/fullstack/networking-protocol-selection-guide#_8-实践选型指南-不买最贵的-只选最对的","142":"/fullstack/networking-protocol-selection-guide#_8-1-决策矩阵-ai-与实时业务场景选型","143":"/fullstack/networking-protocol-selection-guide#_8-2-深度决策逻辑-工程选型的五条金律","144":"/fullstack/networking-protocol-selection-guide#_9-结语","145":"/fullstack/networking-polling-optimization#_1-引言","146":"/fullstack/networking-polling-optimization#_2-退避轮询","147":"/fullstack/networking-polling-optimization#_2-1-为什么需要退避轮询","148":"/fullstack/networking-polling-optimization#_2-2-核心机制与运行规则","149":"/fullstack/networking-polling-optimization#_2-3-客户端实现示例","150":"/fullstack/networking-polling-optimization#_3-长轮询","151":"/fullstack/networking-polling-optimization#_3-1-核心思想与流程","152":"/fullstack/networking-polling-optimization#_3-2-服务端实现-nestjs-示例","153":"/fullstack/networking-polling-optimization#_3-3-客户端实现示例","154":"/fullstack/networking-polling-optimization#_4-总结与选型建议","155":"/fullstack/networking-polling-optimization#_4-1-两种策略核心对比与选型建议","156":"/fullstack/networking-polling-optimization#_4-2-适用场景速查","157":"/fullstack/networking-polling-optimization#_4-3-混合策略建议","158":"/fullstack/networking-sse-practice#_1-引言","159":"/fullstack/networking-sse-practice#_1-1-概念澄清-两种技术-两个层次","160":"/fullstack/networking-sse-practice#_1-2-关联与协作","161":"/fullstack/networking-sse-practice#_1-3-sse-协议数据格式","162":"/fullstack/networking-sse-practice#_2-原生-sse-客户端-api","163":"/fullstack/networking-sse-practice#_2-1-eventsource-api-概览","164":"/fullstack/networking-sse-practice#_2-2-服务端实现示例","165":"/fullstack/networking-sse-practice#_3-fetch-readablestream-实现方案","166":"/fullstack/networking-sse-practice#_3-1-原生-fetch-readablestream-实现","167":"/fullstack/networking-sse-practice#_3-2-fetch-event-source-更优雅的解决方案","168":"/fullstack/networking-sse-practice#_3-3-解析流水线详解","169":"/fullstack/networking-sse-practice#_3-4-典型使用示例","170":"/fullstack/networking-sse-practice#_4-生产实践要点与完整示例","171":"/fullstack/networking-sse-practice#_4-1-重试策略-指数退避","172":"/fullstack/networking-sse-practice#_4-2-事件分类处理-区分业务事件与协议控制事件","173":"/fullstack/networking-sse-practice#_4-3-连接状态追踪-防止重复回调","174":"/fullstack/networking-sse-practice#_4-4-资源清理-abortcontroller-与主动取消","175":"/fullstack/networking-sse-practice#_4-5-完整示例-任务流订阅客户端","176":"/fullstack/networking-sse-practice#_5-流式响应的服务端","177":"/fullstack/networking-sse-practice#_5-1-服务端要点","178":"/fullstack/networking-sse-practice#_5-2-nestjs-实现示例","179":"/fullstack/networking-sse-practice#_5-3-支持-post-请求的-sse","180":"/fullstack/networking-sse-practice#_6-结语","181":"/fullstack/occams-razor-software-design#_1-奥卡姆剃刀原则的核心内涵","182":"/fullstack/occams-razor-software-design#_2-编程与设计中应用奥卡姆剃刀的核心场景","183":"/fullstack/occams-razor-software-design#_2-1-场景1-需求实现-拒绝-提前设计未来功能","184":"/fullstack/occams-razor-software-design#反例-过度设计","185":"/fullstack/occams-razor-software-design#正例-按需设计","186":"/fullstack/occams-razor-software-design#_2-2-场景2-代码实现-避免-冗余逻辑与重复代码","187":"/fullstack/occams-razor-software-design#反例-冗余代码","188":"/fullstack/occams-razor-software-design#正例-简洁代码","189":"/fullstack/occams-razor-software-design#_2-3-场景3-架构设计-优先-简单架构-拒绝-过度抽象","190":"/fullstack/occams-razor-software-design#反例-过度抽象的架构","191":"/fullstack/occams-razor-software-design#正例-简洁架构","192":"/fullstack/occams-razor-software-design#_2-4-场景4-依赖管理-减少-不必要的第三方库","193":"/fullstack/occams-razor-software-design#反例-过度依赖","194":"/fullstack/occams-razor-software-design#正例-按需依赖","195":"/fullstack/occams-razor-software-design#_2-5-场景5-接口设计-遵循-最小接口原则","196":"/fullstack/occams-razor-software-design#反例-冗余接口","197":"/fullstack/occams-razor-software-design#正例-简洁接口","198":"/fullstack/occams-razor-software-design#_2-6-场景6-调试与优化-优先排查-简单原因","199":"/fullstack/occams-razor-software-design#案例-接口返回-空数据-的排查流程","200":"/fullstack/occams-razor-software-design#_3-应用奥卡姆剃刀的三个关键注意事项","201":"/fullstack/occams-razor-software-design#_4-结语","202":"/fullstack/typescript-compilation-debugging-guide#_1-typescript-编译配置与-tsconfig-json","203":"/fullstack/typescript-compilation-debugging-guide#_1-1-tsconfig-json-核心配置梳理","204":"/fullstack/typescript-compilation-debugging-guide#_1-2-常用-typescript-配置组合","205":"/fullstack/typescript-compilation-debugging-guide#_2-大型项目的模块化配置-extends-与-references","206":"/fullstack/typescript-compilation-debugging-guide#_2-1-核心概念解析","207":"/fullstack/typescript-compilation-debugging-guide#_1、references-项目引用","208":"/fullstack/typescript-compilation-debugging-guide#_2、composite-复合项目","209":"/fullstack/typescript-compilation-debugging-guide#_3、extends-配置继承","210":"/fullstack/typescript-compilation-debugging-guide#_2-2-extends-与-references-的区别","211":"/fullstack/typescript-compilation-debugging-guide#_3-monorepo-项目配置实践","212":"/fullstack/typescript-compilation-debugging-guide#_3-1-根配置-tsconfig-base-json","213":"/fullstack/typescript-compilation-debugging-guide#_3-2-共享库项目-packages-shared-tsconfig-json","214":"/fullstack/typescript-compilation-debugging-guide#_3-3-web-前端项目-packages-web-tsconfig-json","215":"/fullstack/typescript-compilation-debugging-guide#_3-4-api-后端项目-packages-api-tsconfig-json","216":"/fullstack/typescript-compilation-debugging-guide#_3-5-最佳实践总结","217":"/fullstack/typescript-compilation-debugging-guide#_3-调试代码","218":"/fullstack/typescript-compilation-debugging-guide#_4-引入扩展工具","219":"/fullstack/typescript-compilation-debugging-guide#_4-1-静态检查工具-eslint","220":"/fullstack/typescript-compilation-debugging-guide#_4-2-单测工具-jest","221":"/fullstack/typescript-compilation-debugging-guide#_4-2-1-安装依赖","222":"/fullstack/typescript-compilation-debugging-guide#_4-2-2-配置-jest","223":"/fullstack/typescript-compilation-debugging-guide#_4-2-3-编写测试用例","224":"/fullstack/typescript-compilation-debugging-guide#_4-2-4-运行测试","225":"/fullstack/typescript-compilation-debugging-guide#_4-2-5-高级特性","226":"/fullstack/typescript-compilation-debugging-guide#_5-结语","227":"/fullstack/union-types-vs-intersection-types#_1-前置概念-类型即集合","228":"/fullstack/union-types-vs-intersection-types#_2-联合类型-类型的-或","229":"/fullstack/union-types-vs-intersection-types#_2-1-基础语法与语义","230":"/fullstack/union-types-vs-intersection-types#_2-2-可辨识联合-discriminated-union","231":"/fullstack/union-types-vs-intersection-types#_2-3-类型收窄全解","232":"/fullstack/union-types-vs-intersection-types#_2-4-穷尽性检查-never-的妙用","233":"/fullstack/union-types-vs-intersection-types#_2-5-keyof-在联合类型上的行为","234":"/fullstack/union-types-vs-intersection-types#_2-6-分布式条件类型","235":"/fullstack/union-types-vs-intersection-types#_3-交叉类型-类型的-与","236":"/fullstack/union-types-vs-intersection-types#_3-1-基础语法与语义","237":"/fullstack/union-types-vs-intersection-types#_3-2-属性冲突的本质","238":"/fullstack/union-types-vs-intersection-types#_3-3-函数类型的交叉-重载签名","239":"/fullstack/union-types-vs-intersection-types#_3-4-keyof-在交叉类型上的行为","240":"/fullstack/union-types-vs-intersection-types#_3-5-交叉类型-vs-extends-继承","241":"/fullstack/union-types-vs-intersection-types#_4-联合与交叉的深层关系","242":"/fullstack/union-types-vs-intersection-types#_4-1-keyof-对偶性","243":"/fullstack/union-types-vs-intersection-types#_4-2-分配律","244":"/fullstack/union-types-vs-intersection-types#_4-3-与类型层级的代数关系","245":"/fullstack/union-types-vs-intersection-types#_5-实战模式","246":"/fullstack/union-types-vs-intersection-types#_5-1-result-either-模式","247":"/fullstack/union-types-vs-intersection-types#_5-2-branded-type-标记类型","248":"/fullstack/union-types-vs-intersection-types#_5-3-mixin-组合模式","249":"/fullstack/union-types-vs-intersection-types#_5-4-精确的组件-props-类型","250":"/fullstack/union-types-vs-intersection-types#_6-总结","251":"/fullstack/typescript-generic-types#_1-泛型的基本概念和作用","252":"/fullstack/typescript-generic-types#_1-1-核心定义","253":"/fullstack/typescript-generic-types#_1-2-泛型与-any-类型的对比","254":"/fullstack/typescript-generic-types#_1-3-泛型的工作原理","255":"/fullstack/typescript-generic-types#_1-4-泛型的核心优势","256":"/fullstack/typescript-generic-types#_1-5-泛型的应用场景","257":"/fullstack/typescript-generic-types#_2-泛型代码示例","258":"/fullstack/typescript-generic-types#_2-1-基础泛型函数","259":"/fullstack/typescript-generic-types#_2-2-实用泛型函数-项目场景","260":"/fullstack/typescript-generic-types#_2-3-泛型接口-api-响应处理","261":"/fullstack/typescript-generic-types#_2-4-泛型类-数据容器","262":"/fullstack/typescript-generic-types#_2-5-泛型类型别名与高级应用","263":"/fullstack/typescript-generic-types#_3-泛型最佳实践总结","264":"/fullstack/typescript-generic-types#_4-泛型约束","265":"/fullstack/typescript-generic-types#_4-1-基本类型约束","266":"/fullstack/typescript-generic-types#_4-2-接口约束","267":"/fullstack/typescript-generic-types#_4-3-多重约束","268":"/fullstack/typescript-generic-types#_4-4-keyof-约束","269":"/fullstack/typescript-generic-types#_4-5-类约束","270":"/fullstack/typescript-generic-types#_4-6-小结","271":"/fullstack/typescript-generic-types#_5-结语","272":"/fullstack/module-programming-practice-guide#_1-引言","273":"/fullstack/module-programming-practice-guide#_2-分层架构设计","274":"/fullstack/module-programming-practice-guide#_2-1-前端分层架构","275":"/fullstack/module-programming-practice-guide#_2-2-后端模块化分层架构","276":"/fullstack/module-programming-practice-guide#_2-3-领域驱动设计-ddd-与模块化","277":"/fullstack/module-programming-practice-guide#_2-3-1-ddd-的核心理念","278":"/fullstack/module-programming-practice-guide#_2-3-2-ddd-的关键概念","279":"/fullstack/module-programming-practice-guide#_2-3-3-ddd-的分层架构","280":"/fullstack/module-programming-practice-guide#_2-3-4-全栈-ddd-项目目录结构示例","281":"/fullstack/module-programming-practice-guide#_2-3-5-ddd-实践指导","282":"/fullstack/module-programming-practice-guide#_2-3-6-ddd-实施建议","283":"/fullstack/module-programming-practice-guide#_2-3-7-ddd-的优势与挑战","284":"/fullstack/module-programming-practice-guide#_2-4-微前端与模块化","285":"/fullstack/module-programming-practice-guide#_2-4-1-微前端的核心理念","286":"/fullstack/module-programming-practice-guide#_2-4-2-微前端的模块化设计原则","287":"/fullstack/module-programming-practice-guide#_2-4-3-微前端实现方案对比","288":"/fullstack/module-programming-practice-guide#_2-4-4-模块联邦-module-federation-实战","289":"/fullstack/module-programming-practice-guide#_2-4-5-微前端通信机制","290":"/fullstack/module-programming-practice-guide#_2-4-6-微前端项目目录结构","291":"/fullstack/module-programming-practice-guide#_2-4-7-微前端最佳实践","292":"/fullstack/module-programming-practice-guide#_2-4-8-微前端小结","293":"/fullstack/module-programming-practice-guide#结语","294":"/fullstack/frontend-module-programming-basic#_1-引言","295":"/fullstack/frontend-module-programming-basic#_2-模块化编程初体验","296":"/fullstack/frontend-module-programming-basic#_3-模块与模块化的基础概念","297":"/fullstack/frontend-module-programming-basic#_3-1-痛点解决与工程价值","298":"/fullstack/frontend-module-programming-basic#_3-2-前端模块化的演进历程","299":"/fullstack/frontend-module-programming-basic#_3-3-结合设计模式的模块化实践","300":"/fullstack/frontend-module-programming-basic#工厂模式","301":"/fullstack/frontend-module-programming-basic#单例模式","302":"/fullstack/frontend-module-programming-basic#观察者模式观察者模式-发布订阅模式-observer-pub-sub","303":"/fullstack/frontend-module-programming-basic#_4-结语-在秩序与复杂中寻找平衡","304":"/fullstack/different-module-programming-specifications#_1-commonjs-规范-node-js-生态的基石","305":"/fullstack/different-module-programming-specifications#_2-amd-规范-浏览器异步加载方案","306":"/fullstack/different-module-programming-specifications#_3-umd-规范-跨环境兼容方案","307":"/fullstack/different-module-programming-specifications#_4-es-modules-现代开发的终极标准","308":"/fullstack/different-module-programming-specifications#_5-规范对比与现代迁移指南","309":"/fullstack/different-module-programming-specifications#_6-结语-在标准之上构建未来","310":"/fullstack/decode-es-modules#_1-命名导出与导入-精准的代码引用","311":"/fullstack/decode-es-modules#_2-默认导出与导入-单一职责的体现","312":"/fullstack/decode-es-modules#_3-转移导出-re-exporting-构建模块聚合层","313":"/fullstack/decode-es-modules#_4-动态导入-dynamic-import-性能优化的-大杀器","314":"/fullstack/decode-es-modules#_5-模块执行逻辑-静态解析与单例","315":"/fullstack/decode-es-modules#_6-循环依赖-挑战与生存指南","316":"/fullstack/decode-es-modules#_7-结语-在标准规范中寻求最优解","317":"/fullstack/typescript-module-programming-enhancement#_1-引言","318":"/fullstack/typescript-module-programming-enhancement#_2-类型导出与导入-极致的运行时优化","319":"/fullstack/typescript-module-programming-enhancement#_3-类型系统与模块化的深度融合","320":"/fullstack/typescript-module-programming-enhancement#_4-命名空间与模块-历史的交棒","321":"/fullstack/typescript-module-programming-enhancement#_5-声明文件-d-ts-抹平-js-与-ts-的鸿沟","322":"/fullstack/typescript-module-programming-enhancement#_6-现代模块化项目的-ts-配置指南","323":"/fullstack/typescript-module-programming-enhancement#_7-typescript-5-0-模块化新特性","324":"/fullstack/typescript-module-programming-enhancement#标准化装饰器-stage-3-decorators","325":"/fullstack/typescript-module-programming-enhancement#模块扩展-module-augmentation","326":"/fullstack/typescript-module-programming-enhancement#_8-结语-构建稳固的类型防线","327":"/fullstack/module-programming-principles-best-practices#_1-单一职责原则","328":"/fullstack/module-programming-principles-best-practices#_2-高内聚低耦合","329":"/fullstack/module-programming-principles-best-practices#_3-模块粒度设计","330":"/fullstack/module-programming-principles-best-practices#_4-命名规范","331":"/fullstack/module-programming-principles-best-practices#_5-模块版本管理","332":"/fullstack/module-programming-principles-best-practices#_6-结语-构建可预测的秩序","333":"/fullstack/nodejs-module-programming-summary#_1-commonjs-与-es-modules-双模共存","334":"/fullstack/nodejs-module-programming-summary#_2-node-js-模块加载机制","335":"/fullstack/nodejs-module-programming-summary#_3-包管理与模块化","336":"/fullstack/nodejs-module-programming-summary#_4-模块化架构-分层设计与关注点分离","337":"/fullstack/nodejs-module-programming-summary#_5-结语","338":"/fullstack/full-stack-resources#_1-基本语言与环境","339":"/fullstack/full-stack-resources#_2-核心-ui-框架","340":"/fullstack/full-stack-resources#_3-样式与-ui-组件库-styling-component-libraries","341":"/fullstack/full-stack-resources#_4-路由与状态管理","342":"/fullstack/full-stack-resources#_5-数据获取与-api-集成-data-fetching-api","343":"/fullstack/full-stack-resources#_6-构建工具与工作流-build-tools-workflow","344":"/fullstack/full-stack-resources#_7-全栈框架","345":"/fullstack/full-stack-resources#_8-部署与托管-deployment-hosting","346":"/fullstack/full-stack-resources#_9-学习资源与社区-learning-community","347":"/product-sense/overview#精选专题","348":"/product-sense/perplexity-knowledge-worker#_1-引言","349":"/product-sense/perplexity-knowledge-worker#_2-核心定位-从-链接导航-到-知识发现","350":"/product-sense/perplexity-knowledge-worker#_3-产品交互重构-反直觉的-ui-创新","351":"/product-sense/perplexity-knowledge-worker#_4-技术护城河-搜索是一项工程与模型的交响","352":"/product-sense/perplexity-knowledge-worker#_4-1-驯服幻觉-hallucination-的四个维度","353":"/product-sense/perplexity-knowledge-worker#_4-2-极致的性能优化-追踪尾部延迟-tail-latency","354":"/product-sense/perplexity-knowledge-worker#_5-商业逻辑-你的利润率-就是我的机会","355":"/product-sense/perplexity-knowledge-worker#_6-未来演进-从被动响应到主动-agent","356":"/product-sense/perplexity-knowledge-worker#写在最后","357":"/product-sense/ai-native-composite-talents#_1-引言-当-执行-被-ai-填平-什么才是核心壁垒","358":"/product-sense/ai-native-composite-talents#_2-从-解决问题-到-发现问题-提问力决定生产力","359":"/product-sense/ai-native-composite-talents#_3-培养非共识的-品味-逃离-ai-生成的-平均数","360":"/product-sense/ai-native-composite-talents#_4-保持真诚与-打破规则-的勇气-抵抗-ai-的-幻觉-与平庸","361":"/product-sense/ai-native-composite-talents#_5-复合指数增长-以小见大的行动力","362":"/product-sense/ai-native-composite-talents#_6-在算力面前保持敬畏-在机器面前保持好奇","363":"/product-sense/engineer-build-product-sense#_1-引言","364":"/product-sense/engineer-build-product-sense#_2-解构产品-sense-的数学之美","365":"/product-sense/engineer-build-product-sense#_2-1-极简杠杆公式-寻找-roi-的最大解","366":"/product-sense/engineer-build-product-sense#_2-2-洞察力公式-理智与情感的共舞","367":"/product-sense/engineer-build-product-sense#_2-3-ai-前沿视角公式-从-功能产品-到-语境构建","368":"/product-sense/engineer-build-product-sense#_3-刻意练习-如何从-凭感觉-到-有直觉","369":"/product-sense/engineer-build-product-sense#_3-1-建立-预测-验证-的反馈闭环","370":"/product-sense/engineer-build-product-sense#_3-2-培养-摩擦力日记","371":"/product-sense/engineer-build-product-sense#_3-3-解构-魔法-从惊叹到复刻的逆向工程","372":"/product-sense/engineer-build-product-sense#_1-记录-record-捕捉情绪颗粒度","373":"/product-sense/engineer-build-product-sense#_2-解剖-peel-上帝视角的逻辑拆解","374":"/product-sense/engineer-build-product-sense#_3-重构-reconstruct-全栈视角的复刻推演","375":"/product-sense/engineer-build-product-sense#_4-沉淀-crystallize-输出倒逼内化","376":"/product-sense/engineer-build-product-sense#_4-结语-从-如何实现-的焦虑中解放-拥抱-为何而做-的自由","377":"/product-sense/small-rule-learn#_1-社区先行-从-我是谁-到-我能为谁解决问题","378":"/product-sense/small-rule-learn#_2-极简流转-用-克制-对抗-熵增-用-自动化-替代-堆人力","379":"/product-sense/small-rule-learn#_3-盈利自信-做时间的朋友-而非资本的奴隶","380":"/product-sense/small-rule-learn#_4-建造你想住的房子-真实的营销与价值观契合","381":"/product-sense/small-rule-learn#_5-总结与反思","382":"/product-sense/insight-model#_1-表象背后藏着决定一切的-系统黑盒","383":"/product-sense/insight-model#_2-系统的核心-要素-连接关系","384":"/product-sense/insight-model#_3-变量-系统里的-变化因子","385":"/product-sense/insight-model#_4-因果链-搭建系统的骨架","386":"/product-sense/insight-model#_5-增强回路-造就指数级增长","387":"/product-sense/insight-model#_6-调节回路-让系统回归平衡","388":"/product-sense/insight-model#_7-滞后效应-时间的迷雾","389":"/product-sense/insight-model#_8-总结-从观察者到洞察者","390":"/product-sense/using-economics-thinking#_1-生活里的经济学洞察——洞察不仅是关于需求-更是关于成本与博弈","391":"/product-sense/using-economics-thinking#_1-1-容器的形状-方盒与圆瓶背后的成本战术","392":"/product-sense/using-economics-thinking#_1-2-可乐的三十年价格迷局-双头垄断下的博弈均衡","393":"/product-sense/using-economics-thinking#_1-3-来都来了-与沉没成本陷阱-有限理性的普遍胜利","394":"/product-sense/using-economics-thinking#_1-4-帕累托优化与最优体验-在约束条件下求最优解","395":"/product-sense/using-economics-thinking#_2-系统化方法论——将经济学思维系统化地应用到产品全生命周期","396":"/product-sense/using-economics-thinking#_2-1-产品定义与定位-深入市场洞察与价值发现","397":"/product-sense/using-economics-thinking#_2-2-产品定价策略-最大化收益与捕获用户剩余","398":"/product-sense/using-economics-thinking#_2-3-产品用户体验与留存-构建锁定效应与对抗边际效用递减","399":"/product-sense/using-economics-thinking#_2-4-产品商业化与生态构建-追求帕累托改进与管理外部性","400":"/product-sense/using-economics-thinking#_3-总结-方法论提炼与职业修养——培养-经济直觉","401":"/ai/overview#精选专题","402":"/ai/agent/overview#_1-什么是-agent-——从-工具-到-实体-的进化","403":"/ai/agent/overview#_2-核心价值-自动化程度的阶梯式跨越","404":"/ai/agent/overview#_3-应用场景-谁会被替代-谁会被增强","405":"/ai/agent/overview#_3-1-深度替代与变革型","406":"/ai/agent/overview#_3-2-辅助增强型-升级工作价值","407":"/ai/agent/overview#_3-3-生活与垂直领域-长尾覆盖","408":"/ai/agent/overview#_4-技术拆解-agent-核心要素与关键技术","409":"/ai/agent/overview#_4-1-规划","410":"/ai/agent/overview#_4-2-记忆","411":"/ai/agent/overview#_4-3-工具","412":"/ai/agent/overview#_4-4-行动","413":"/ai/agent/overview#_5-agent-的分类与未来","414":"/ai/agent/overview#_5-1-通用-agent","415":"/ai/agent/overview#_5-2-多智能体系统-multi-agent-system","416":"/ai/agent/overview#典型案例-deep-research-深度调研系统","417":"/ai/agent/overview#_5-3-知识型-agent","418":"/ai/agent/overview#_5-4-多模态-agent","419":"/ai/agent/overview#_5-5-迈向高度自主-openclaw-与-数字员工","420":"/ai/agent/overview#_6-结语-从-对话-到-协同-的范式革命","421":"/ai/agent/planning-module#_1-引言","422":"/ai/agent/planning-module#_2-任务分解-化繁为简的策略","423":"/ai/agent/planning-module#_2-1-先分解后规划","424":"/ai/agent/planning-module#_2-2-边分解边规划","425":"/ai/agent/planning-module#_2-3-基于语言模型的自主分解","426":"/ai/agent/planning-module#_3-自我反思-闭环控制的艺术","427":"/ai/agent/planning-module#_4-动态响应模式-基于-react-看规划闭环","428":"/ai/agent/planning-module#_5-预编排模式-plan-and-execute-下的自动化工程","429":"/ai/agent/planning-module#_5-1-核心运行机制","430":"/ai/agent/planning-module#_5-2-为什么在复杂场景中这种模式更具优势","431":"/ai/agent/planning-module#_5-3-小结","432":"/ai/agent/planning-module#_6-范式选择-如何为你的-agent-配置-小脑","433":"/ai/agent/planning-module#_7-结语-规划是-agent-迈向-确定性-的定盘星","434":"/ai/agent/composition-ai-components#_1-引言","435":"/ai/agent/composition-ai-components#_2-prompts-即时灵活的对话指令","436":"/ai/agent/composition-ai-components#_3-skills-可复用的专属能力包-把高频方法变成可复用能力","437":"/ai/agent/composition-ai-components#_4-projects-长期专属工作空间","438":"/ai/agent/composition-ai-components#_5-subagents-分工明确的专项助手","439":"/ai/agent/composition-ai-components#_6-mcp-模型上下文协议-外部连接通用协议","440":"/ai/agent/composition-ai-components#_7-结束语","441":"/ai/agent/skills-practice-summary#_1-引言-agent-skills-是什么","442":"/ai/agent/skills-practice-summary#_2-文件夹结构拆解-标准化的操作手册","443":"/ai/agent/skills-practice-summary#_3-核心机制与流程-渐进式披露的艺术","444":"/ai/agent/skills-practice-summary#_4-实践指南-如何写好一个-agent-skill","445":"/ai/agent/skills-practice-summary#_4-1-核心编写原则","446":"/ai/agent/skills-practice-summary#_4-2-四步法","447":"/ai/agent/skills-practice-summary#步骤-1-明确使用场景与边界","448":"/ai/agent/skills-practice-summary#步骤-2-编写元信息-yaml-frontmatter","449":"/ai/agent/skills-practice-summary#步骤-3-编写执行指令-markdown-body","450":"/ai/agent/skills-practice-summary#步骤4-skill-质量检查清单-checklist","451":"/ai/agent/skills-practice-summary#_5-一个具体的-agent-skill-示例-git-workflow","452":"/ai/agent/skills-practice-summary#_6-三类常见-agent-skill-模式","453":"/ai/agent/skills-practice-summary#模式-1-文档与资源生成","454":"/ai/agent/skills-practice-summary#模式-2-工作流自动化","455":"/ai/agent/skills-practice-summary#模式-3-mcp-增强与编排","456":"/ai/agent/skills-practice-summary#_7-总结-从零散指令到可持续工作流","457":"/ai/full-stack-builder#_1-引言-全能的幻觉与稀缺的转移","458":"/ai/full-stack-builder#_2-解构-full-stack-不是简单加法-而是乘数效应","459":"/ai/full-stack-builder#_2-1-核心能力矩阵与-3-个-level","460":"/ai/full-stack-builder#_2-2-判断力-taste-最难被-ai-替代的元能力","461":"/ai/full-stack-builder#_2-3-实现力-build-从-敲代码-到-系统编排","462":"/ai/full-stack-builder#_2-4-杠杆力-leverage-寻找你的-10x-乘数","463":"/ai/full-stack-builder#_3-full-stack-builder-的复利效应","464":"/ai/full-stack-builder#_4-进阶路径-full-stack-builder-的成长路径","465":"/ai/full-stack-builder#_5-ai-时代的机会在哪里","466":"/ai/full-stack-builder#_6-结语","467":"/ai/agent/deepresearch-agent#_1-引言","468":"/ai/agent/deepresearch-agent#_2-为什么深度研究需要-multi-agent-架构模式","469":"/ai/agent/deepresearch-agent#_3-系统架构","470":"/ai/agent/deepresearch-agent#_3-1-核心设计与职责分配","471":"/ai/agent/deepresearch-agent#_3-2-工作流设计","472":"/ai/agent/deepresearch-agent#_3-3-技术要点说明","473":"/ai/agent/deepresearch-agent#_4-实践案例-以-初中数学学习研究-为例","474":"/ai/agent/deepresearch-agent#_4-1-执行流观察","475":"/ai/agent/deepresearch-agent#_4-2-数据可视化的深度","476":"/ai/agent/deepresearch-agent#_5-结束语-迈向更可控的-agent-开发","477":"/ai/agent/claude-agent-sdk-basic-build#_1-引言","478":"/ai/agent/claude-agent-sdk-basic-build#_2-为什么选择-claude-agent-sdk","479":"/ai/agent/claude-agent-sdk-basic-build#_3-快速上手-环境配置与初始化","480":"/ai/agent/claude-agent-sdk-basic-build#_3-1-安装依赖","481":"/ai/agent/claude-agent-sdk-basic-build#_3-2-环境变量的-陷阱-与配置","482":"/ai/agent/claude-agent-sdk-basic-build#_4-核心实践-从无状态交互到自主执行","483":"/ai/agent/claude-agent-sdk-basic-build#_4-1-模式一-基础无状态对话","484":"/ai/agent/claude-agent-sdk-basic-build#_4-2-模式二-自主找-bug-并修复-agentic-loop","485":"/ai/agent/claude-agent-sdk-basic-build#_5-进阶-会话管理与持久化记忆","486":"/ai/agent/claude-agent-sdk-basic-build#_5-1-会话-id-的捕获与恢复","487":"/ai/agent/claude-agent-sdk-basic-build#_6-实战-tui-应用-构建流式交互-agent-终端","488":"/ai/agent/claude-agent-sdk-basic-build#_6-1-核心逻辑-流式解析-stream-event","489":"/ai/agent/claude-agent-sdk-basic-build#_6-2-封装-tuichat-对话循环","490":"/ai/agent/claude-agent-sdk-basic-build#_6-3-交互效果展示","491":"/ai/agent/claude-agent-sdk-basic-build#_7-结束语","492":"/ai/agent/math-bot#_1-破局点-面对-k12-赛道-谁才是真正的用户","493":"/ai/agent/math-bot#_2-为什么选择-数学-——-技术边界与场景的完美契合","494":"/ai/agent/math-bot#_3-agent-核心设计-结构化的-prompt-规范","495":"/ai/agent/math-bot#_4-总结-从研发思维到产品直觉","496":"/ai/agent/poetry-bot#_1-实践背景","497":"/ai/agent/poetry-bot#_2-平台与-agent-基本人设","498":"/ai/agent/poetry-bot#_2-1-平台选择","499":"/ai/agent/poetry-bot#_2-2-角色设定与物料生成","500":"/ai/agent/poetry-bot#_3-工作模式与工具集配置","501":"/ai/agent/poetry-bot#_3-1-工具-插件配置","502":"/ai/agent/poetry-bot#_3-2-工作模式设定","503":"/ai/agent/poetry-bot#_3-prompt-演进-从常规-prompt-到结构化-prompt","504":"/ai/agent/poetry-bot#_3-1-阶段一-非结构化-system-prompt-基线测试","505":"/ai/agent/poetry-bot#测试-case","506":"/ai/agent/poetry-bot#_3-2-阶段二-结构化-system-prompt-langgpt-范式","507":"/ai/agent/poetry-bot#测试-case-1","508":"/ai/agent/poetry-bot#测试-case-2","509":"/ai/agent/poetry-bot#_5-实践小总结","510":"/ai/tools-assistant#_1-ai-助手","511":"/ai/tools-assistant#_1-1-国外","512":"/ai/tools-assistant#_1-2-国内","513":"/ai/tools-assistant#_2-ai-学习与内容创作工作站","514":"/ai/tools-assistant#_2-1-关键点说明","515":"/ai/tools-assistant#_2-2-选择建议","516":"/ai/tools-assistant#_3-ai-搜索","517":"/ai/tools-assistant#_3-1-关键点说明","518":"/ai/tools-assistant#_3-2-选择建议","519":"/ai/llm-api-resources#_1-选模型前-先想清楚这几件事","520":"/ai/llm-api-resources#_2-官方-api-平台","521":"/ai/llm-api-resources#_2-1-国际顶尖模型","522":"/ai/llm-api-resources#_2-2-国内优秀模型","523":"/ai/llm-api-resources#_3-第三方聚合平台","524":"/ai-coding/overview#精选专题","525":"/ai-coding/ai-change-work-workflow#_1-引言","526":"/ai-coding/ai-change-work-workflow#_2-盯准任务构成-而非单一速度-重获-工程尊严-的-27","527":"/ai-coding/ai-change-work-workflow#_2-1-从-技术债务-到-系统韧性","528":"/ai-coding/ai-change-work-workflow#_2-2-从-不划算-到-高价值-任务优先级的重新洗牌","529":"/ai-coding/ai-change-work-workflow#_2-3-跨领域能力的-无痛溢出","530":"/ai-coding/ai-change-work-workflow#_3-对抗-平庸化-——-在自然语言编程时代重塑工程-sense","531":"/ai-coding/ai-change-work-workflow#_3-1-警惕-监督悖论-与能力的平庸化","532":"/ai-coding/ai-change-work-workflow#_3-2-从-vibe-coding-进化到规范驱动-sdd","533":"/ai-coding/ai-change-work-workflow#_3-3-构建新型-工程-sense-从手艺人到导演","534":"/ai-coding/ai-change-work-workflow#_4-范式落地——在随机性之上-构建确定性的工程基座","535":"/ai-coding/ai-change-work-workflow#_4-1-从-单点指令-转向-多智能体编排-multi-agent-orchestration","536":"/ai-coding/ai-change-work-workflow#_4-2-构建-上下文护城河-从-prompt-到知识图谱","537":"/ai-coding/ai-change-work-workflow#_4-3-可观测性-让-ai-的决策过程透明可见","538":"/ai-coding/ai-change-work-workflow#_4-4-拥抱-不确定性-但守住-质量底线","539":"/ai-coding/ai-change-work-workflow#_5-结语","540":"/ai-coding/ai-engineer-capability#_1-产品应用层-insight-stack-走向-超级个体-的-ai-原生全栈","541":"/ai-coding/ai-engineer-capability#_1-1-产品-sense-与业务洞察","542":"/ai-coding/ai-engineer-capability#_1-2-agentic-engineering-智能体工程","543":"/ai-coding/ai-engineer-capability#_1-3-ai-first-的交互哲学","544":"/ai-coding/ai-engineer-capability#_2-agent-开发层-构建连接物理世界的数字中枢","545":"/ai-coding/ai-engineer-capability#_2-1-agentic-workflow-设计","546":"/ai-coding/ai-engineer-capability#_2-2-记忆机制-memory-management","547":"/ai-coding/ai-engineer-capability#_2-3-技能的插件化-agent-skill","548":"/ai-coding/ai-engineer-capability#_2-4-从硬编码到标准协议与上下文连接","549":"/ai-coding/ai-engineer-capability#_2-5-模型选型、路由与可观测性","550":"/ai-coding/ai-engineer-capability#_2-6-edd-评估驱动开发-重塑工程质量","551":"/ai-coding/ai-engineer-capability#_3-ai-基础设施层-算力与模型的重工业底座","552":"/ai-coding/ai-engineer-capability#_4-找准自己的生态位","553":"/ai-coding/ai-native#_1-引言","554":"/ai-coding/ai-native#_2-ai-时代的全栈新公式","555":"/ai-coding/ai-native#_2-1-engineering-工程力-从-困于实现-到-敢于设计","556":"/ai-coding/ai-native#_2-2-product-产品力-从-需求翻译机-到-价值定义者","557":"/ai-coding/ai-native#_2-3-ai-ai-杠杆-指数级倍增器","558":"/ai-coding/ai-native#_3-从-tech-stack-到-insight-stack-进阶之路","559":"/ai-coding/resources#_1-三种编程范式速览","560":"/ai-coding/resources#_2-vibe-coding-—-用自然语言-说-出一个应用","561":"/ai-coding/resources#_2-1-关键点说明","562":"/ai-coding/resources#_2-2-六款工具横向对比","563":"/ai-coding/resources#_3-ai-ide-—-与代码编辑器深度融合","564":"/ai-coding/resources#_3-1-关键点说明","565":"/ai-coding/resources#_3-2-三款工具横向对比","566":"/ai-coding/resources#_4-agentic-engineering-—-ai-自主完成工程任务","567":"/ai-coding/resources#_4-1-关键点说明","568":"/ai-coding/resources#_4-2-五款-agentic-工具横向对比","569":"/ai-coding/claude-code-deep-dive#_1-引言","570":"/ai-coding/claude-code-deep-dive#_2-目录概览","571":"/ai-coding/claude-code-deep-dive#_3-claude-md-最核心的配置文件","572":"/ai-coding/claude-code-deep-dive#_3-1-应该写什么","573":"/ai-coding/claude-code-deep-dive#_3-2-示例","574":"/ai-coding/claude-code-deep-dive#_3-3-如何创建-claude-md","575":"/ai-coding/claude-code-deep-dive#_4-rules-模块化规则","576":"/ai-coding/claude-code-deep-dive#_4-1-路径过滤-让规则精准生效","577":"/ai-coding/claude-code-deep-dive#_4-2-何时该拆分到-rules","578":"/ai-coding/claude-code-deep-dive#_4-3-规则文件的组织建议","579":"/ai-coding/claude-code-deep-dive#_5-commands-自定义斜杠命令","580":"/ai-coding/claude-code-deep-dive#_5-1-命令的存放位置","581":"/ai-coding/claude-code-deep-dive#_5-2-命令的结构","582":"/ai-coding/claude-code-deep-dive#_5-3-传递参数-arguments","583":"/ai-coding/claude-code-deep-dive#_5-4-命令的价值","584":"/ai-coding/claude-code-deep-dive#_6-skills-自动触发的工作流","585":"/ai-coding/claude-code-deep-dive#_6-1-技能与命令的根本区别","586":"/ai-coding/claude-code-deep-dive#_6-2-技能的结构","587":"/ai-coding/claude-code-deep-dive#_6-3-技能的使用场景","588":"/ai-coding/claude-code-deep-dive#_6-4-何时用命令-何时用技能","589":"/ai-coding/claude-code-deep-dive#_7-agents-独立执行的专职角色","590":"/ai-coding/claude-code-deep-dive#_7-1-为什么需要-agents","591":"/ai-coding/claude-code-deep-dive#_7-2-agents-的定义结构","592":"/ai-coding/claude-code-deep-dive#_7-3-agents-vs-skills-谁是更好的选择","593":"/ai-coding/claude-code-deep-dive#_8-settings-json-权限与项目配置","594":"/ai-coding/claude-code-deep-dive#_8-1-配置结构","595":"/ai-coding/claude-code-deep-dive#_8-2-典型场景","596":"/ai-coding/claude-code-deep-dive#_8-3-settings-local-json-个人权限覆盖","597":"/ai-coding/claude-code-deep-dive#_9-结语","598":"/growth/books#_1-ai-与数学思维","599":"/growth/books#_2-产品与商业","600":"/growth/books#_2-1-产品-sense-与创造","601":"/growth/books#_2-2-商业化","602":"/growth/books#_3-效率与效能","603":"/growth/books#_4-学习与成长","604":"/growth/books#_5-人文社科","605":"/growth/books#_6-健康生活","606":"/growth/reading-tips#_1-我们为什么需要读书","607":"/growth/reading-tips#_2-读书-三要","608":"/growth/reading-tips#第一-要-完整地读-整本地读","609":"/growth/reading-tips#第二-要-带着问题去读-构建知识树","610":"/growth/reading-tips#第三-要-与人-或ai-讨论-检验理解的试金石","611":"/growth/reading-tips#_3-读书-三不要","612":"/growth/reading-tips#第一-不要-不要怀揣哀怨心态-避免读书目的被异化","613":"/growth/reading-tips#第二-不要-不要玩物丧志-陷入对物理媒介的过度迷恋","614":"/growth/reading-tips#第三-不要-不要只读书不知现实-避免知识结构陷入-真空","615":"/growth/reading-tips#_4-让书籍成为连接自我与现实的桥梁","616":"/growth/distinguish-useful-information#_1-打破-信息差-的系统性错觉","617":"/growth/distinguish-useful-information#_1-1-表面是你在筛选信息-实际是信息在筛选人","618":"/growth/distinguish-useful-information#_1-2-警惕算法构建的-信息茧房","619":"/growth/distinguish-useful-information#_2-信息泛滥与脑力带宽的消耗","620":"/growth/distinguish-useful-information#_2-1-从-追求差-到-对抗泛滥","621":"/growth/distinguish-useful-information#_2-2-无效信息是对算力的极大消耗","622":"/growth/distinguish-useful-information#_3-价值创造的核心-思考-执行-突破信息壁垒","623":"/growth/distinguish-useful-information#_4-行动指南","624":"/growth/distinguish-useful-information#_4-1-信息筛选-果断做减法-锚定核心目标","625":"/growth/distinguish-useful-information#_4-2-信息解读-穿透表象-洞察未言之意","626":"/growth/distinguish-useful-information#_4-3-差异破局-向内求索-强化-思考-执行","627":"/insight-labs/overview#卡片盒笔记法","628":"/insight-labs/overview#ai-增强型-obsidian-卡片盒-llm-wiki-library-双轨制","629":"/insight-labs/overview#输出驱动-从内化到输出","630":"/insight-labs/overview#知识仓库目录划分与设计","631":"/insight-labs/overview#数据如何流动","632":"/insight-labs/ai-insight-engine#项目简介","633":"/insight-labs/ai-insight-engine#四阶段流水线","634":"/insight-labs/ai-insight-engine#三种消费模式","635":"/insight-labs/ai-insight-engine#项目时间线","636":"/insight-labs/repo-insight/overview#项目简介","637":"/insight-labs/repo-insight/overview#解读案例","638":"/insight-labs/repo-insight/amis#_1-项目概览","639":"/insight-labs/repo-insight/amis#_1-1-项目定位与核心价值","640":"/insight-labs/repo-insight/amis#_1-2-目标场景与典型-case","641":"/insight-labs/repo-insight/amis#_1-3-核心技术亮点","642":"/insight-labs/repo-insight/amis#_1-4-技术栈与选型对比","643":"/insight-labs/repo-insight/amis#_1-5-项目规模","644":"/insight-labs/repo-insight/amis#_2-整体架构设计-overall-architecture","645":"/insight-labs/repo-insight/amis#_2-1-架构概述","646":"/insight-labs/repo-insight/amis#_2-2-整体架构图","647":"/insight-labs/repo-insight/amis#_2-3-目录结构","648":"/insight-labs/repo-insight/amis#_3-模块依赖与调用关系","649":"/insight-labs/repo-insight/amis#_3-1-全局入口与核心路由","650":"/insight-labs/repo-insight/amis#_3-2-核心业务实体与关联","651":"/insight-labs/repo-insight/amis#_4-核心模块详解","652":"/insight-labs/repo-insight/amis#模块一-渲染器工厂系统-factory-system","653":"/insight-labs/repo-insight/amis#模块二-mst-store-状态管理系统","654":"/insight-labs/repo-insight/amis#模块三-动作与事件系统-action-system","655":"/insight-labs/repo-insight/amis#模块四-表达式引擎-amis-formula","656":"/insight-labs/repo-insight/amis#模块五-可视化编辑器系统-editor-system","657":"/insight-labs/repo-insight/amis#_5-关键数据流程","658":"/insight-labs/repo-insight/amis#场景说明","659":"/insight-labs/repo-insight/amis#场景说明-1","660":"/insight-labs/repo-insight/amis#_6-接口与契约规范","661":"/insight-labs/repo-insight/amis#_6-1-渲染器注册契约-typescript","662":"/insight-labs/repo-insight/amis#_6-2-环境接口契约-typescript","663":"/insight-labs/repo-insight/amis#_6-3-mst-store-契约-typescript","664":"/insight-labs/repo-insight/amis#_7-快速开始","665":"/insight-labs/repo-insight/amis#_7-1-环境要求","666":"/insight-labs/repo-insight/amis#_7-2-安装与运行","667":"/insight-labs/repo-insight/amis#_7-3-测试","668":"/insight-labs/repo-insight/amis#_7-4-典型用例","669":"/insight-labs/repo-insight/konva#_1-项目概览","670":"/insight-labs/repo-insight/konva#_1-1-项目定位与核心价值","671":"/insight-labs/repo-insight/konva#_1-2-目标用户与使用场景","672":"/insight-labs/repo-insight/konva#_1-3-核心技术亮点","673":"/insight-labs/repo-insight/konva#_1-4-技术栈与选型对比","674":"/insight-labs/repo-insight/konva#_2-整体架构设计","675":"/insight-labs/repo-insight/konva#_2-1-架构概述","676":"/insight-labs/repo-insight/konva#整体架构图","677":"/insight-labs/repo-insight/konva#目录结构","678":"/insight-labs/repo-insight/konva#_3-模块依赖与调用关系","679":"/insight-labs/repo-insight/konva#_3-1-全局入口与核心路由","680":"/insight-labs/repo-insight/konva#_3-2-核心业务实体与关联","681":"/insight-labs/repo-insight/konva#_4-核心模块详解","682":"/insight-labs/repo-insight/konva#模块一-node-所有节点的抽象基类","683":"/insight-labs/repo-insight/konva#模块二-shape-形状渲染基类","684":"/insight-labs/repo-insight/konva#模块三-stage-舞台根节点与事件中枢","685":"/insight-labs/repo-insight/konva#模块四-factory-属性系统工厂","686":"/insight-labs/repo-insight/konva#模块五-animation-tween-动画引擎","687":"/insight-labs/repo-insight/konva#_5-关键数据流程","688":"/insight-labs/repo-insight/konva#场景一-用户点击一个-shape-的完整事件流程","689":"/insight-labs/repo-insight/konva#场景二-形状属性变更到屏幕渲染的完整流程","690":"/insight-labs/repo-insight/konva#场景三-拖拽操作的完整事件链","691":"/insight-labs/repo-insight/konva#_6-接口与契约规范","692":"/insight-labs/repo-insight/konva#_6-1-核心内部模块契约-typescript","693":"/insight-labs/repo-insight/konva#对外-api-契约-公共-api-导出","694":"/insight-labs/repo-insight/konva#_7-快速开始","695":"/insight-labs/repo-insight/konva#_7-1-安装与运行","696":"/insight-labs/repo-insight/konva#_7-2-最简示例","697":"/insight-labs/repo-insight/konva#_7-3-构建命令","698":"/insight-labs/repo-insight/echarts#_1-项目概览","699":"/insight-labs/repo-insight/echarts#_1-1-项目定位与核心价值","700":"/insight-labs/repo-insight/echarts#_1-2-目标用户与使用场景","701":"/insight-labs/repo-insight/echarts#_1-3-核心技术亮点","702":"/insight-labs/repo-insight/echarts#_1-4-技术栈与选型对比","703":"/insight-labs/repo-insight/echarts#_2-整体架构设计","704":"/insight-labs/repo-insight/echarts#_2-1-架构概述","705":"/insight-labs/repo-insight/echarts#_2-2-整体架构图","706":"/insight-labs/repo-insight/echarts#_2-3-目录结构","707":"/insight-labs/repo-insight/echarts#_3-模块依赖与调用关系","708":"/insight-labs/repo-insight/echarts#_3-1-全局入口与核心路由","709":"/insight-labs/repo-insight/echarts#_3-2-核心业务实体与关联","710":"/insight-labs/repo-insight/echarts#_4-核心模块详解","711":"/insight-labs/repo-insight/echarts#模块一-扩展系统-extension-system","712":"/insight-labs/repo-insight/echarts#模块二-调度管道-scheduler-pipeline","713":"/insight-labs/repo-insight/echarts#模块三-数据管理系统-data-system","714":"/insight-labs/repo-insight/echarts#模块四-坐标系系统-coordinate-system","715":"/insight-labs/repo-insight/echarts#模块五-视觉编码系统-visual-encoding","716":"/insight-labs/repo-insight/echarts#_5-关键数据流程","717":"/insight-labs/repo-insight/echarts#_5-1-初始化与渲染完整流程","718":"/insight-labs/repo-insight/echarts#_6-接口与契约规范","719":"/insight-labs/repo-insight/echarts#_6-1-核心内部模块契约-typescript-interfaces","720":"/insight-labs/repo-insight/echarts#扩展安装器契约-typescript-interface","721":"/insight-labs/repo-insight/echarts#_8-快速开始","722":"/insight-labs/repo-insight/echarts#_8-1-环境配置","723":"/insight-labs/repo-insight/echarts#_8-2-开发模式","724":"/insight-labs/repo-insight/echarts#_8-3-典型用例","725":"/insight-labs/repo-insight/echarts#_8-4-按需引入","726":"/insight-labs/repo-insight/echarts#_8-5-构建发布","727":"/insight-labs/repo-insight/three-js#_1-项目概览","728":"/insight-labs/repo-insight/three-js#_1-1-项目定位与核心价值","729":"/insight-labs/repo-insight/three-js#_1-2-核心技术亮点","730":"/insight-labs/repo-insight/three-js#_1-3-技术栈与选型对比","731":"/insight-labs/repo-insight/three-js#_2-整体架构设计","732":"/insight-labs/repo-insight/three-js#_2-1-架构概述","733":"/insight-labs/repo-insight/three-js#_2-2-整体架构图","734":"/insight-labs/repo-insight/three-js#_2-3-目录结构","735":"/insight-labs/repo-insight/three-js#_3-模块依赖与调用关系","736":"/insight-labs/repo-insight/three-js#_3-1-全局入口与核心路由","737":"/insight-labs/repo-insight/three-js#_3-2-核心业务实体与关联","738":"/insight-labs/repo-insight/three-js#_4-核心模块详解","739":"/insight-labs/repo-insight/three-js#模块一-渲染器系统-renderer-system","740":"/insight-labs/repo-insight/three-js#模块二-场景图系统-scene-graph-object3d","741":"/insight-labs/repo-insight/three-js#模块三-tsl-节点着色系统-three-js-shading-language","742":"/insight-labs/repo-insight/three-js#模块四-材质系统-material-system","743":"/insight-labs/repo-insight/three-js#模块五-动画系统-animation-system","744":"/insight-labs/repo-insight/three-js#_5-关键数据流程","745":"/insight-labs/repo-insight/three-js#场景一-webgpu-渲染帧的完整生命周期","746":"/insight-labs/repo-insight/three-js#场景二-tsl-着色器编译流程","747":"/insight-labs/repo-insight/three-js#_6-接口与契约规范","748":"/insight-labs/repo-insight/three-js#_6-1-核心内部模块契约-typescript-interfaces","749":"/insight-labs/repo-insight/three-js#对外-api-契约-openspec-格式-—-公共类-api","750":"/insight-labs/repo-insight/three-js#_8-快速开始","751":"/insight-labs/repo-insight/three-js#_8-1-环境配置","752":"/insight-labs/repo-insight/three-js#_8-2-安装与运行","753":"/insight-labs/repo-insight/three-js#_8-3-典型用例","754":"/insight-labs/repo-insight/lottie-web#_1-项目概览","755":"/insight-labs/repo-insight/lottie-web#_1-1-项目定位与核心价值","756":"/insight-labs/repo-insight/lottie-web#_1-2-目标用户与使用场景","757":"/insight-labs/repo-insight/lottie-web#_1-3-核心技术亮点","758":"/insight-labs/repo-insight/lottie-web#_1-4-技术栈与选型对比","759":"/insight-labs/repo-insight/lottie-web#_2-整体架构设计","760":"/insight-labs/repo-insight/lottie-web#_2-1-架构概述","761":"/insight-labs/repo-insight/lottie-web#_2-2-整体架构图","762":"/insight-labs/repo-insight/lottie-web#_2-3-目录结构","763":"/insight-labs/repo-insight/lottie-web#_3-模块依赖与调用关系","764":"/insight-labs/repo-insight/lottie-web#_3-1-全局入口与核心路由","765":"/insight-labs/repo-insight/lottie-web#_3-2-核心业务实体与关联","766":"/insight-labs/repo-insight/lottie-web#_4-核心模块详解","767":"/insight-labs/repo-insight/lottie-web#模块一-animationmanager-动画生命周期管理器","768":"/insight-labs/repo-insight/lottie-web#模块二-renderer-系统-渲染器策略层","769":"/insight-labs/repo-insight/lottie-web#模块三-expressionengine-after-effects-表达式引擎","770":"/insight-labs/repo-insight/lottie-web#模块四-propertyfactory-动画属性与关键帧插值系统","771":"/insight-labs/repo-insight/lottie-web#模块五-shapemodifiers-形状变形修饰器系统","772":"/insight-labs/repo-insight/lottie-web#_5-关键数据流程","773":"/insight-labs/repo-insight/lottie-web#场景一-lottie-loadanimation-完整生命周期","774":"/insight-labs/repo-insight/lottie-web#场景二-表达式引擎求值流程","775":"/insight-labs/repo-insight/lottie-web#_6-接口与契约规范","776":"/insight-labs/repo-insight/lottie-web#_6-1-核心内部模块契约-typescript","777":"/insight-labs/repo-insight/lottie-web#_6-2-对外-api-契约-typescript-与-index-d-ts-对齐","778":"/insight-labs/repo-insight/lottie-web#_7-构建系统与产物矩阵","779":"/insight-labs/repo-insight/lottie-web#_8-快速开始","780":"/insight-labs/repo-insight/lottie-web#_8-1-环境配置","781":"/insight-labs/repo-insight/lottie-web#_8-2-安装与运行","782":"/insight-labs/repo-insight/lottie-web#_8-3-典型用例","783":"/insight-labs/repo-insight/open-cli#_1-项目概览","784":"/insight-labs/repo-insight/open-cli#_1-1-项目定位与核心价值","785":"/insight-labs/repo-insight/open-cli#_1-2-目标用户与使用场景","786":"/insight-labs/repo-insight/open-cli#_1-3-核心技术亮点","787":"/insight-labs/repo-insight/open-cli#_1-4-技术栈与选型对比","788":"/insight-labs/repo-insight/open-cli#_2-整体架构设计","789":"/insight-labs/repo-insight/open-cli#_2-1-架构概述","790":"/insight-labs/repo-insight/open-cli#_2-2-整体架构图-ascii","791":"/insight-labs/repo-insight/open-cli#_2-3-分层职责说明","792":"/insight-labs/repo-insight/open-cli#_2-4-完整目录树","793":"/insight-labs/repo-insight/open-cli#_3-模块依赖与调用关系","794":"/insight-labs/repo-insight/open-cli#_3-1-全局入口与核心路由","795":"/insight-labs/repo-insight/open-cli#逻辑说明","796":"/insight-labs/repo-insight/open-cli#调用拓扑-plaintext","797":"/insight-labs/repo-insight/open-cli#_3-2-核心业务实体与关联","798":"/insight-labs/repo-insight/open-cli#_4-核心模块详解","799":"/insight-labs/repo-insight/open-cli#_4-1-浏览器控制模块-src-browser","800":"/insight-labs/repo-insight/open-cli#_4-2-适配器注册与发现-src-registry-ts-discovery-ts","801":"/insight-labs/repo-insight/open-cli#_4-3-守护进程-src-daemon-ts","802":"/insight-labs/repo-insight/open-cli#_5-关键数据流程","803":"/insight-labs/repo-insight/open-cli#_5-1-浏览器命令执行流程","804":"/insight-labs/repo-insight/open-cli#_5-2-网站适配器执行流程","805":"/insight-labs/repo-insight/open-cli#_6-接口与契约规范","806":"/insight-labs/repo-insight/open-cli#_6-1-核心内部模块契约-typescript","807":"/insight-labs/repo-insight/open-cli#_6-2-daemon-http-api-openspec-格式","808":"/insight-labs/repo-insight/open-cli#_7-快速开始","809":"/insight-labs/repo-insight/open-cli#_7-1-环境配置","810":"/insight-labs/repo-insight/open-cli#_7-2-安装与运行","811":"/insight-labs/repo-insight/open-cli#_7-3-典型用例","812":"/insight-labs/repo-insight/fetch-event-source#第一部分-业务价值篇","813":"/insight-labs/repo-insight/fetch-event-source#项目定位","814":"/insight-labs/repo-insight/fetch-event-source#解决的核心痛点","815":"/insight-labs/repo-insight/fetch-event-source#技术亮点","816":"/insight-labs/repo-insight/fetch-event-source#适用场景","817":"/insight-labs/repo-insight/fetch-event-source#典型使用-case","818":"/insight-labs/repo-insight/fetch-event-source#case-1-基础-sse-连接","819":"/insight-labs/repo-insight/fetch-event-source#case-2-带认证和自定义请求","820":"/insight-labs/repo-insight/fetch-event-source#case-3-自定义错误处理和重试","821":"/insight-labs/repo-insight/fetch-event-source#技术栈分析","822":"/insight-labs/repo-insight/fetch-event-source#选型决策分析","823":"/insight-labs/repo-insight/fetch-event-source#项目结构初览","824":"/insight-labs/repo-insight/fetch-event-source#核心模块职责","825":"/insight-labs/repo-insight/fetch-event-source#依赖关系","826":"/insight-labs/repo-insight/fetch-event-source#外部依赖","827":"/insight-labs/repo-insight/fetch-event-source#内部依赖","828":"/insight-labs/repo-insight/fetch-event-source#构建输出","829":"/insight-labs/repo-insight/fetch-event-source#第二部分-架构设计篇","830":"/insight-labs/repo-insight/fetch-event-source#系统整体架构","831":"/insight-labs/repo-insight/fetch-event-source#核心模块设计","832":"/insight-labs/repo-insight/fetch-event-source#_1-fetch-ts-主控制器模块","833":"/insight-labs/repo-insight/fetch-event-source#_2-parse-ts-事件流解析模块","834":"/insight-labs/repo-insight/fetch-event-source#核心数据流转时序","835":"/insight-labs/repo-insight/fetch-event-source#正常消息接收流程","836":"/insight-labs/repo-insight/fetch-event-source#重试流程","837":"/insight-labs/repo-insight/fetch-event-source#页面可见性变化流程","838":"/insight-labs/repo-insight/fetch-event-source#接口契约定义","839":"/insight-labs/repo-insight/fetch-event-source#公共-api","840":"/insight-labs/repo-insight/fetch-event-source#内部解析-api","841":"/insight-labs/repo-insight/vercel-ai-sdk#_1-项目概览","842":"/insight-labs/repo-insight/vercel-ai-sdk#_1-1-项目定位与核心价值","843":"/insight-labs/repo-insight/vercel-ai-sdk#_1-2-目标用户与使用场景","844":"/insight-labs/repo-insight/vercel-ai-sdk#_1-3-核心技术亮点","845":"/insight-labs/repo-insight/vercel-ai-sdk#_1-4-技术栈与选型对比","846":"/insight-labs/repo-insight/vercel-ai-sdk#_2-整体架构设计","847":"/insight-labs/repo-insight/vercel-ai-sdk#_2-1-架构概述","848":"/insight-labs/repo-insight/vercel-ai-sdk#_2-2-整体架构图","849":"/insight-labs/repo-insight/vercel-ai-sdk#_2-3-完整目录结构","850":"/insight-labs/repo-insight/vercel-ai-sdk#_2-4-最重要的文件","851":"/insight-labs/repo-insight/vercel-ai-sdk#_2-5-核心设计模式速查表","852":"/insight-labs/repo-insight/vercel-ai-sdk#_3-模块依赖与调用关系","853":"/insight-labs/repo-insight/vercel-ai-sdk#_3-1-全局入口与核心路由","854":"/insight-labs/repo-insight/vercel-ai-sdk#_3-2-核心业务实体与关联","855":"/insight-labs/repo-insight/vercel-ai-sdk#_4-核心模块设计","856":"/insight-labs/repo-insight/vercel-ai-sdk#_4-1-text-生成核心-generatetext-streamtext","857":"/insight-labs/repo-insight/vercel-ai-sdk#_4-2-provider-适配器模式","858":"/insight-labs/repo-insight/vercel-ai-sdk#_4-3-ui-消息流与框架集成-usechat-chat","859":"/insight-labs/repo-insight/vercel-ai-sdk#_4-4-agent-与工作流-toolloopagent-workflow","860":"/insight-labs/repo-insight/vercel-ai-sdk#_4-5-模型注册中心-registry","861":"/insight-labs/repo-insight/vercel-ai-sdk#_4-6-中间件系统","862":"/insight-labs/repo-insight/vercel-ai-sdk#_5-关键数据流程","863":"/insight-labs/repo-insight/vercel-ai-sdk#_5-1-场景一-generatetext-带工具调用的完整流程","864":"/insight-labs/repo-insight/vercel-ai-sdk#_5-2-streamtext-usechat-前端流式对话","865":"/insight-labs/repo-insight/vercel-ai-sdk#_6-接口与契约规范","866":"/insight-labs/repo-insight/vercel-ai-sdk#_6-1-核心内部模块契约-typescript","867":"/insight-labs/repo-insight/vercel-ai-sdk#_6-2-公共-api-契约","868":"/insight-labs/repo-insight/vercel-ai-sdk#_7-provider-工具系统","869":"/insight-labs/repo-insight/vercel-ai-sdk#_8-快速开始","870":"/insight-labs/repo-insight/vercel-ai-sdk#_8-1-环境要求","871":"/insight-labs/repo-insight/vercel-ai-sdk#_8-2-安装与运行","872":"/insight-labs/repo-insight/vercel-ai-sdk#_8-3-关键目录","873":"/insight-labs/repo-insight/superpowers#_1-项目概览","874":"/insight-labs/repo-insight/superpowers#_1-1-项目定位与核心价值","875":"/insight-labs/repo-insight/superpowers#_1-2-目标用户与使用场景","876":"/insight-labs/repo-insight/superpowers#_1-3-核心技术亮点","877":"/insight-labs/repo-insight/superpowers#_1-4-技术栈与选型对比","878":"/insight-labs/repo-insight/superpowers#_2-整体架构设计","879":"/insight-labs/repo-insight/superpowers#_2-1-架构概述","880":"/insight-labs/repo-insight/superpowers#_2-2-整体架构图","881":"/insight-labs/repo-insight/superpowers#_2-3-目录结构","882":"/insight-labs/repo-insight/superpowers#_3-模块依赖与调用关系","883":"/insight-labs/repo-insight/superpowers#_3-1-全局入口与核心路由","884":"/insight-labs/repo-insight/superpowers#_3-2-核心业务实体与关联","885":"/insight-labs/repo-insight/superpowers#_4-核心模块详解","886":"/insight-labs/repo-insight/superpowers#模块一-hook-引导系统-hook-bootstrap-system","887":"/insight-labs/repo-insight/superpowers#模块二-using-superpowers-引导技能","888":"/insight-labs/repo-insight/superpowers#模块三-brainstorming-头脑风暴技能","889":"/insight-labs/repo-insight/superpowers#模块四-subagent-driven-development-子agent驱动开发","890":"/insight-labs/repo-insight/superpowers#模块五-test-driven-development-tdd-技能","891":"/insight-labs/repo-insight/superpowers#_5-关键数据流程","892":"/insight-labs/repo-insight/superpowers#场景一-完整开发工作流-从需求到合并","893":"/insight-labs/repo-insight/superpowers#场景二-bug-修复调试流程","894":"/insight-labs/repo-insight/superpowers#_6-接口与契约规范","895":"/insight-labs/repo-insight/superpowers#_6-1-核心内部模块契约-typescript","896":"/insight-labs/repo-insight/superpowers#_6-2-技能间调用契约","897":"/insight-labs/repo-insight/superpowers#_7-快速开始","898":"/insight-labs/repo-insight/superpowers#_7-1-环境要求","899":"/insight-labs/repo-insight/superpowers#_7-2-安装","900":"/insight-labs/repo-insight/superpowers#_7-3-典型工作流","901":"/about/me#我是谁","902":"/about/me#我的认知迭代","903":"/about/me#关于本站","904":"/about/me#❤️-致谢","905":"/about/me#连接与交流","906":"/about/growth/outer-experience#_1-写在前面","907":"/about/growth/outer-experience#_2-重读《要事第一》","908":"/about/growth/outer-experience#_3-基于系统与模型思维构建洞察力模型","909":"/about/growth/outer-experience#_3-1-增强回路小例子-🌰","910":"/about/growth/outer-experience#_3-2-调节回路","911":"/about/growth/outer-experience#_4-重读数学的乐趣","912":"/about/growth/outer-experience#_4-1-怎么突然又学起数学了","913":"/about/growth/outer-experience#_4-2-重新发现了有趣的数学思维","914":"/about/growth/outer-experience#分解与分类、排列与组合","915":"/about/growth/outer-experience#多样性红利","916":"/about/growth/outer-experience#这个世界是稀疏的","917":"/about/growth/outer-experience#概率的世界观","918":"/about/growth/outer-experience#ai-教会了我们哪些","919":"/about/growth/outer-experience#_5-写在最后","920":"/fullstack/css-engineering#_1-引言-主流-css-工程化方案有哪些","921":"/fullstack/css-engineering#_2-css-预处理器","922":"/fullstack/css-engineering#_3-css-in-js","923":"/fullstack/css-engineering#_4-css-modules","924":"/fullstack/css-engineering#_5-scoped-css","925":"/fullstack/css-engineering#_6-原子化-css-utility-first-atomic-css","926":"/fullstack/css-engineering#为什么-ai-应用产品都在拥抱-tailwind","927":"/fullstack/css-engineering#_7-变体驱动的原子化-variants-driven-atomic-css-cva-tailwind","928":"/fullstack/css-engineering#_8-实践指南-如何构建可扩展的样式工程化体系","929":"/fullstack/css-engineering#_8-1-第一层-架构的根基-——-css-变量、设计规范与-design-token","930":"/fullstack/css-engineering#_8-2-第二层-生产力基石与标准协议-——-占比-90-的主力构建层","931":"/fullstack/css-engineering#_8-3-第三层-兜底封装与高级逻辑-——-占比-10-的边界-逃生舱","932":"/fullstack/css-engineering#_8-4-底部构建环境-postcss-编译管道-pipeline","933":"/fullstack/css-engineering#_8-5-架构红线-——-一些必须规避的反模式","934":"/fullstack/css-engineering#_9-结语-从手工精雕到-ai-增强的架构跃迁","935":"/about/growth/inner-experience#写在前面","936":"/about/growth/inner-experience#漫谈话题","937":"/about/growth/inner-experience#漫谈健康","938":"/about/growth/inner-experience#健康危机","939":"/about/growth/inner-experience#健康知识学习","940":"/about/growth/inner-experience#_1、向有专业或有经验的人咨询","941":"/about/growth/inner-experience#_2、学习健康标准和知识","942":"/about/growth/inner-experience#_3、健康实践","943":"/about/growth/inner-experience#_4、健康小结","944":"/about/growth/inner-experience#漫谈读书与学习","945":"/about/growth/inner-experience#_1、读书的目的","946":"/about/growth/inner-experience#_2、读书的方式","947":"/about/growth/inner-experience#_3、读书工具选择与实践","948":"/about/growth/inner-experience#_4、小结","949":"/about/growth/inner-experience#漫谈时间管理","950":"/about/growth/inner-experience#_1、时间不够用问题","951":"/about/growth/inner-experience#_2、分阶段调整时间管理","952":"/about/growth/inner-experience#第一阶段-疯狂做减法-专注重要的事","953":"/about/growth/inner-experience#第二阶段-升级清单管理","954":"/about/growth/inner-experience#第三阶段-刻意统计并调整时间","955":"/about/growth/inner-experience#漫谈混合工作制","956":"/about/growth/inner-experience#_1、适应混合工作制","957":"/about/growth/inner-experience#_2、延伸思考混合工作制","958":"/about/growth/inner-experience#写在最后","959":"/about/growth/weight-loss#写在前面","960":"/about/growth/weight-loss#_1、前期准备","961":"/about/growth/weight-loss#_2、第一阶段","962":"/about/growth/weight-loss#_3、第二阶段","963":"/about/growth/weight-loss#_4、第三阶段","964":"/about/growth/weight-loss#_5、第四阶段-2021-09","965":"/about/growth/weight-loss#结尾"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,1],"1":[2,1,99],"2":[4,1,109],"3":[3,1,116],"4":[3,1,1],"5":[8,3,46],"6":[5,3,47],"7":[3,1,45],"8":[4,1,25],"9":[4,4,105],"10":[4,4,44],"11":[8,4,81],"12":[3,1,69],"13":[3,1,1],"14":[2,3,27],"15":[5,3,55],"16":[3,3,47],"17":[5,1,11],"18":[6,5,51],"19":[4,5,33],"20":[7,5,47],"21":[6,5,24],"22":[8,1,12],"23":[3,8,32],"24":[3,8,1],"25":[9,10,37],"26":[6,10,88],"27":[6,10,130],"28":[5,10,196],"29":[6,10,70],"30":[6,8,37],"31":[3,1,51],"32":[2,1,50],"33":[2,1,48],"34":[3,1,18],"35":[1,3,41],"36":[1,3,1],"37":[1,3,17],"38":[3,1,32],"39":[1,3,33],"40":[1,3,1],"41":[1,3,15],"42":[3,1,25],"43":[1,3,30],"44":[1,3,1],"45":[1,3,11],"46":[3,1,46],"47":[1,3,53],"48":[2,3,28],"49":[1,3,1],"50":[1,3,18],"51":[3,1,16],"52":[1,3,44],"53":[3,3,22],"54":[1,3,1],"55":[1,3,18],"56":[2,1,1],"57":[3,2,181],"58":[3,2,52],"59":[3,2,132],"60":[5,1,27],"61":[5,5,8],"62":[2,7,36],"63":[2,7,21],"64":[2,7,13],"65":[3,5,100],"66":[5,5,131],"67":[2,1,52],"68":[8,1,13],"69":[5,8,24],"70":[8,8,27],"71":[8,8,99],"72":[6,1,26],"73":[7,6,51],"74":[4,6,58],"75":[5,1,70],"76":[5,1,9],"77":[3,5,16],"78":[3,5,31],"79":[3,5,55],"80":[2,1,21],"81":[3,2,56],"82":[5,2,46],"83":[5,2,52],"84":[3,1,69],"85":[7,1,15],"86":[6,7,113],"87":[6,7,50],"88":[7,7,31],"89":[6,7,30],"90":[3,7,50],"91":[2,1,1],"92":[6,2,42],"93":[6,2,33],"94":[3,2,58],"95":[2,1,43],"96":[2,1,1],"97":[2,2,170],"98":[3,2,1],"99":[5,4,84],"100":[7,4,77],"101":[6,4,52],"102":[5,1,1],"103":[3,5,113],"104":[2,5,109],"105":[3,5,1],"106":[5,6,72],"107":[6,6,70],"108":[9,6,87],"109":[6,1,13],"110":[3,6,144],"111":[5,6,29],"112":[5,10,34],"113":[6,10,47],"114":[2,1,39],"115":[5,1,102],"116":[5,1,17],"117":[4,5,44],"118":[6,5,38],"119":[3,5,36],"120":[6,1,14],"121":[4,6,30],"122":[6,6,19],"123":[4,6,20],"124":[3,6,58],"125":[3,1,34],"126":[3,3,29],"127":[3,3,43],"128":[4,3,24],"129":[5,3,56],"130":[3,1,14],"131":[4,3,32],"132":[4,3,35],"133":[4,3,26],"134":[5,3,23],"135":[4,1,31],"136":[6,4,47],"137":[4,4,51],"138":[4,4,56],"139":[6,4,26],"140":[3,4,26],"141":[4,1,11],"142":[5,4,77],"143":[4,4,127],"144":[2,1,47],"145":[2,1,60],"146":[2,1,6],"147":[4,2,21],"148":[2,2,38],"149":[3,2,112],"150":[2,1,10],"151":[3,2,43],"152":[6,2,125],"153":[2,2,103],"154":[2,1,1],"155":[3,2,83],"156":[3,2,37],"157":[3,2,17],"158":[2,1,18],"159":[4,2,43],"160":[3,2,124],"161":[4,2,31],"162":[5,1,9],"163":[5,5,91],"164":[2,5,72],"165":[5,1,22],"166":[7,5,181],"167":[6,5,48],"168":[2,5,150],"169":[3,5,129],"170":[2,1,11],"171":[4,2,69],"172":[4,2,51],"173":[4,2,36],"174":[4,2,25],"175":[4,2,217],"176":[2,1,10],"177":[3,2,50],"178":[4,2,107],"179":[6,2,90],"180":[2,1,69],"181":[2,1,68],"182":[2,1,22],"183":[8,2,14],"184":[3,9,44],"185":[3,9,35],"186":[7,2,14],"187":[3,8,29],"188":[3,8,35],"189":[10,2,20],"190":[3,11,32],"191":[3,11,32],"192":[8,2,18],"193":[3,9,27],"194":[3,9,33],"195":[8,2,15],"196":[3,9,32],"197":[3,9,29],"198":[8,2,20],"199":[5,9,41],"200":[2,1,53],"201":[2,1,56],"202":[5,1,40],"203":[4,5,412],"204":[5,5,76],"205":[5,1,27],"206":[3,5,1],"207":[4,7,18],"208":[4,7,20],"209":[4,7,27],"210":[5,5,32],"211":[3,1,26],"212":[7,3,15],"213":[8,3,22],"214":[8,3,32],"215":[9,3,31],"216":[3,3,101],"217":[2,1,35],"218":[2,1,1],"219":[4,2,18],"220":[4,2,11],"221":[4,5,21],"222":[4,5,38],"223":[4,5,40],"224":[3,5,13],"225":[4,5,23],"226":[2,1,45],"227":[3,1,80],"228":[6,1,1],"229":[3,6,66],"230":[5,6,68],"231":[3,6,84],"232":[5,6,61],"233":[4,6,35],"234":[3,6,58],"235":[6,1,1],"236":[3,6,48],"237":[3,6,45],"238":[4,6,56],"239":[4,6,33],"240":[6,6,34],"241":[2,1,1],"242":[4,2,45],"243":[3,2,41],"244":[3,2,69],"245":[2,1,1],"246":[5,2,66],"247":[6,2,51],"248":[4,2,63],"249":[5,2,58],"250":[2,1,59],"251":[2,1,1],"252":[2,2,16],"253":[5,2,20],"254":[3,2,62],"255":[3,2,66],"256":[3,2,63],"257":[2,1,1],"258":[3,2,41],"259":[4,2,58],"260":[6,2,54],"261":[5,2,76],"262":[3,2,80],"263":[2,1,140],"264":[2,1,25],"265":[3,2,37],"266":[3,2,57],"267":[3,2,69],"268":[3,2,53],"269":[3,2,65],"270":[3,2,73],"271":[2,1,37],"272":[2,1,37],"273":[2,1,4],"274":[3,2,250],"275":[2,2,130],"276":[5,2,13],"277":[5,6,25],"278":[4,6,65],"279":[4,6,49],"280":[6,6,146],"281":[5,6,229],"282":[5,6,49],"283":[5,6,30],"284":[3,2,8],"285":[4,4,20],"286":[3,4,44],"287":[4,4,51],"288":[6,4,155],"289":[4,4,109],"290":[4,4,75],"291":[4,4,56],"292":[4,4,55],"293":[1,1,23],"294":[2,1,13],"295":[2,1,48],"296":[2,1,18],"297":[3,2,44],"298":[3,2,51],"299":[2,2,5],"300":[1,3,26],"301":[1,3,38],"302":[6,3,41],"303":[3,1,50],"304":[6,1,71],"305":[4,1,65],"306":[4,1,66],"307":[4,1,75],"308":[2,1,82],"309":[3,1,26],"310":[3,1,49],"311":[3,1,58],"312":[5,1,32],"313":[7,1,47],"314":[3,1,49],"315":[3,1,82],"316":[3,1,30],"317":[2,1,23],"318":[3,1,72],"319":[2,1,39],"320":[3,1,46],"321":[9,1,35],"322":[4,1,51],"323":[5,1,6],"324":[5,5,43],"325":[4,5,27],"326":[3,1,21],"327":[2,1,45],"328":[2,1,44],"329":[2,1,26],"330":[2,1,67],"331":[2,1,61],"332":[3,1,24],"333":[6,1,61],"334":[4,1,49],"335":[2,1,54],"336":[3,1,34],"337":[2,1,39],"338":[2,1,79],"339":[4,1,36],"340":[9,1,61],"341":[2,1,89],"342":[8,1,330],"343":[7,1,96],"344":[2,1,165],"345":[6,1,57],"346":[6,1,52],"347":[1,1,1],"348":[2,1,28],"349":[7,1,25],"350":[5,1,40],"351":[3,1,10],"352":[5,3,21],"353":[7,3,34],"354":[4,1,36],"355":[4,1,31],"356":[1,1,10],"357":[9,1,33],"358":[6,1,47],"359":[8,1,39],"360":[9,1,52],"361":[3,1,48],"362":[3,1,31],"363":[2,1,73],"364":[4,1,16],"365":[6,4,79],"366":[3,4,165],"367":[9,4,111],"368":[7,1,9],"369":[6,7,35],"370":[5,7,36],"371":[4,7,22],"372":[5,9,30],"373":[5,9,28],"374":[5,9,16],"375":[5,9,57],"376":[8,1,45],"377":[7,1,35],"378":[10,1,34],"379":[4,1,23],"380":[3,1,27],"381":[2,1,18],"382":[4,1,34],"383":[4,1,57],"384":[5,1,19],"385":[3,1,28],"386":[3,1,49],"387":[3,1,51],"388":[3,1,30],"389":[3,1,26],"390":[4,1,6],"391":[3,4,46],"392":[4,4,52],"393":[5,4,33],"394":[4,4,27],"395":[3,1,1],"396":[4,3,29],"397":[3,3,50],"398":[4,3,28],"399":[4,3,21],"400":[6,1,52],"401":[1,1,1],"402":[8,1,55],"403":[3,1,66],"404":[5,1,1],"405":[3,5,30],"406":[5,5,40],"407":[4,5,18],"408":[4,1,65],"409":[3,4,14],"410":[3,4,86],"411":[3,4,86],"412":[2,4,61],"413":[3,1,12],"414":[4,3,120],"415":[7,3,89],"416":[4,8,37],"417":[4,3,52],"418":[4,3,56],"419":[7,3,76],"420":[7,1,31],"421":[2,1,17],"422":[3,1,17],"423":[3,3,20],"424":[2,3,22],"425":[3,3,22],"426":[3,1,61],"427":[5,1,74],"428":[6,1,13],"429":[3,6,48],"430":[4,6,30],"431":[3,6,30],"432":[7,1,32],"433":[7,1,36],"434":[2,1,36],"435":[3,1,41],"436":[5,1,61],"437":[3,1,67],"438":[3,1,75],"439":[5,1,92],"440":[2,1,44],"441":[6,1,76],"442":[3,1,110],"443":[3,1,105],"444":[6,1,20],"445":[3,6,41],"446":[3,6,1],"447":[3,7,25],"448":[6,7,52],"449":[6,7,41],"450":[5,7,29],"451":[7,1,195],"452":[5,1,6],"453":[3,5,20],"454":[3,5,19],"455":[4,5,25],"456":[3,1,40],"457":[3,1,50],"458":[6,1,35],"459":[6,6,53],"460":[6,6,23],"461":[10,6,28],"462":[7,6,47],"463":[5,1,21],"464":[6,1,40],"465":[4,1,66],"466":[2,1,36],"467":[2,1,66],"468":[6,1,43],"469":[2,1,1],"470":[3,2,115],"471":[3,2,68],"472":[2,2,83],"473":[5,1,7],"474":[3,5,43],"475":[3,5,24],"476":[5,1,35],"477":[2,1,53],"478":[6,1,56],"479":[3,6,1],"480":[3,8,15],"481":[5,8,46],"482":[3,6,128],"483":[4,8,43],"484":[9,8,57],"485":[3,6,11],"486":[5,8,44],"487":[7,6,10],"488":[6,11,49],"489":[5,11,91],"490":[3,11,36],"491":[2,6,62],"492":[7,1,38],"493":[4,1,38],"494":[6,1,145],"495":[3,1,32],"496":[2,1,33],"497":[4,1,1],"498":[3,4,8],"499":[2,4,29],"500":[2,1,1],"501":[4,2,11],"502":[3,2,16],"503":[5,1,21],"504":[8,5,64],"505":[2,11,114],"506":[9,1,118],"507":[2,13,99],"508":[4,13,102],"509":[2,1,79],"510":[3,1,36],"511":[2,3,107],"512":[3,3,203],"513":[3,1,1],"514":[3,3,22],"515":[2,3,243],"516":[3,1,1],"517":[3,3,19],"518":[3,3,171],"519":[3,1,68],"520":[4,1,11],"521":[3,4,100],"522":[2,4,151],"523":[2,1,267],"524":[1,1,1],"525":[2,1,91],"526":[8,1,37],"527":[8,8,42],"528":[7,8,42],"529":[5,8,17],"530":[5,1,38],"531":[5,5,36],"532":[8,5,36],"533":[5,5,25],"534":[4,1,32],"535":[10,4,35],"536":[8,4,35],"537":[7,4,35],"538":[7,4,20],"539":[2,1,39],"540":[9,1,46],"541":[4,9,28],"542":[6,9,62],"543":[5,9,28],"544":[4,1,30],"545":[5,4,34],"546":[5,4,27],"547":[6,4,48],"548":[3,4,41],"549":[4,4,24],"550":[5,4,102],"551":[4,1,70],"552":[2,1,44],"553":[2,1,124],"554":[3,1,21],"555":[9,3,63],"556":[8,3,55],"557":[5,3,51],"558":[7,1,57],"559":[2,1,69],"560":[7,1,1],"561":[3,7,119],"562":[2,7,80],"563":[4,1,1],"564":[3,4,105],"565":[3,4,70],"566":[5,1,1],"567":[3,5,116],"568":[5,5,117],"569":[2,1,36],"570":[2,1,141],"571":[4,1,44],"572":[3,4,47],"573":[3,4,93],"574":[4,4,9],"575":[3,1,36],"576":[4,3,47],"577":[5,3,35],"578":[3,3,24],"579":[3,1,10],"580":[3,3,13],"581":[3,3,81],"582":[4,3,17],"583":[3,3,101],"584":[3,1,14],"585":[3,3,32],"586":[3,3,57],"587":[3,3,30],"588":[4,3,31],"589":[3,1,11],"590":[4,3,48],"591":[4,3,75],"592":[6,3,72],"593":[4,1,12],"594":[3,4,45],"595":[3,4,23],"596":[6,4,21],"597":[2,1,57],"598":[3,1,25],"599":[2,1,1],"600":[5,2,16],"601":[2,2,30],"602":[2,1,26],"603":[2,1,38],"604":[2,1,30],"605":[2,1,29],"606":[3,1,40],"607":[5,1,1],"608":[4,5,33],"609":[4,5,47],"610":[6,5,78],"611":[5,1,1],"612":[4,5,51],"613":[4,5,61],"614":[6,5,48],"615":[2,1,25],"616":[4,1,16],"617":[3,4,28],"618":[5,4,16],"619":[2,1,10],"620":[7,2,20],"621":[2,2,23],"622":[4,1,76],"623":[2,1,1],"624":[5,2,15],"625":[5,2,20],"626":[7,2,31],"627":[1,1,1],"628":[9,1,75],"629":[2,1,22],"630":[1,1,8],"631":[1,1,40],"632":[1,1,32],"633":[1,1,1],"634":[1,1,3],"635":[1,1,1],"636":[1,1,43],"637":[1,1,6],"638":[2,1,1],"639":[2,2,49],"640":[4,2,62],"641":[3,2,44],"642":[3,2,68],"643":[3,2,46],"644":[5,1,1],"645":[3,5,64],"646":[2,5,166],"647":[3,5,443],"648":[2,1,1],"649":[3,2,91],"650":[3,2,100],"651":[2,1,1],"652":[5,2,97],"653":[4,2,90],"654":[5,2,69],"655":[5,2,88],"656":[5,2,84],"657":[2,1,1],"658":[1,2,19],"659":[1,2,15],"660":[2,2,1],"661":[5,4,142],"662":[5,4,113],"663":[7,4,103],"664":[2,2,1],"665":[3,4,11],"666":[3,4,24],"667":[3,4,25],"668":[3,4,41],"669":[2,1,1],"670":[2,2,40],"671":[3,2,26],"672":[3,2,64],"673":[3,2,56],"674":[2,1,1],"675":[3,2,41],"676":[1,2,81],"677":[1,2,368],"678":[2,1,1],"679":[3,2,126],"680":[3,2,121],"681":[2,1,1],"682":[4,2,87],"683":[4,2,67],"684":[4,2,69],"685":[4,2,66],"686":[6,2,73],"687":[2,1,1],"688":[4,2,11],"689":[2,2,13],"690":[2,2,5],"691":[2,1,1],"692":[5,2,219],"693":[6,2,93],"694":[2,1,1],"695":[3,2,21],"696":[3,2,48],"697":[3,2,19],"698":[2,1,1],"699":[2,2,64],"700":[3,2,37],"701":[3,2,54],"702":[3,2,46],"703":[2,1,1],"704":[3,2,66],"705":[2,2,119],"706":[3,2,659],"707":[2,1,1],"708":[3,2,90],"709":[3,2,66],"710":[2,1,1],"711":[5,2,58],"712":[5,2,85],"713":[5,2,64],"714":[5,2,71],"715":[5,2,78],"716":[2,1,1],"717":[3,2,17],"718":[2,1,1],"719":[6,2,173],"720":[4,2,78],"721":[2,1,1],"722":[3,2,12],"723":[3,2,14],"724":[3,2,39],"725":[3,2,18],"726":[3,2,10],"727":[2,1,1],"728":[2,2,48],"729":[3,2,37],"730":[3,2,44],"731":[2,1,1],"732":[3,2,49],"733":[2,2,138],"734":[3,2,868],"735":[2,1,1],"736":[3,2,89],"737":[3,2,103],"738":[2,1,1],"739":[5,2,81],"740":[6,2,85],"741":[8,2,92],"742":[5,2,82],"743":[5,2,79],"744":[2,1,1],"745":[3,2,25],"746":[3,2,13],"747":[2,1,1],"748":[6,2,277],"749":[7,2,92],"750":[2,1,1],"751":[3,2,22],"752":[3,2,17],"753":[3,2,58],"754":[2,1,1],"755":[2,2,96],"756":[3,2,39],"757":[3,2,55],"758":[3,2,42],"759":[2,1,1],"760":[3,2,29],"761":[2,2,151],"762":[3,2,604],"763":[2,1,1],"764":[3,2,101],"765":[3,2,82],"766":[2,1,1],"767":[3,2,69],"768":[4,2,99],"769":[5,2,97],"770":[3,2,92],"771":[3,2,85],"772":[2,1,1],"773":[4,2,25],"774":[2,2,17],"775":[2,1,1],"776":[5,2,222],"777":[12,2,124],"778":[2,1,30],"779":[2,1,1],"780":[3,2,15],"781":[3,2,27],"782":[3,2,26],"783":[2,1,1],"784":[2,2,39],"785":[3,2,24],"786":[3,2,31],"787":[3,2,48],"788":[2,1,1],"789":[3,2,24],"790":[4,2,114],"791":[3,2,39],"792":[3,2,321],"793":[2,1,1],"794":[3,2,1],"795":[1,4,27],"796":[3,4,64],"797":[3,2,60],"798":[2,1,1],"799":[6,2,109],"800":[9,2,99],"801":[7,2,113],"802":[2,1,1],"803":[3,2,11],"804":[3,2,11],"805":[2,1,1],"806":[5,2,187],"807":[8,2,89],"808":[2,1,1],"809":[3,2,14],"810":[3,2,11],"811":[3,2,25],"812":[2,1,1],"813":[1,2,16],"814":[1,2,33],"815":[1,2,33],"816":[1,2,16],"817":[2,2,1],"818":[5,4,17],"819":[3,4,29],"820":[3,4,47],"821":[1,2,16],"822":[1,3,47],"823":[1,2,91],"824":[1,3,21],"825":[1,2,1],"826":[1,3,10],"827":[1,3,9],"828":[1,2,23],"829":[2,1,1],"830":[1,2,59],"831":[1,2,1],"832":[4,3,96],"833":[4,3,98],"834":[1,2,1],"835":[1,3,1],"836":[1,3,1],"837":[1,3,1],"838":[1,2,1],"839":[2,3,143],"840":[2,3,60],"841":[2,1,1],"842":[2,2,57],"843":[3,2,60],"844":[3,2,32],"845":[3,2,98],"846":[2,1,1],"847":[3,2,70],"848":[2,2,89],"849":[3,2,79],"850":[3,2,43],"851":[3,2,51],"852":[2,1,1],"853":[3,2,64],"854":[3,2,54],"855":[2,1,1],"856":[7,2,90],"857":[4,2,91],"858":[7,2,63],"859":[6,2,77],"860":[5,2,26],"861":[3,2,19],"862":[2,1,1],"863":[5,2,19],"864":[6,2,22],"865":[2,1,1],"866":[5,2,119],"867":[5,2,75],"868":[3,1,43],"869":[2,1,1],"870":[3,2,9],"871":[3,2,14],"872":[3,2,28],"873":[2,1,1],"874":[2,2,44],"875":[3,2,14],"876":[3,2,38],"877":[3,2,44],"878":[2,1,1],"879":[3,2,57],"880":[2,2,137],"881":[3,2,433],"882":[2,1,1],"883":[3,2,86],"884":[3,2,86],"885":[2,1,1],"886":[6,2,72],"887":[4,2,114],"888":[3,2,88],"889":[5,2,77],"890":[6,2,68],"891":[2,1,1],"892":[4,2,29],"893":[3,2,18],"894":[2,1,1],"895":[5,2,148],"896":[3,2,40],"897":[2,1,1],"898":[3,2,21],"899":[3,2,27],"900":[3,2,21],"901":[1,1,82],"902":[1,1,108],"903":[1,1,58],"904":[2,1,31],"905":[1,1,28],"906":[2,1,72],"907":[4,1,68],"908":[2,1,92],"909":[4,2,73],"910":[3,2,30],"911":[2,1,10],"912":[4,2,49],"913":[3,2,1],"914":[2,4,24],"915":[1,4,29],"916":[1,4,29],"917":[1,4,63],"918":[3,4,34],"919":[2,1,34],"920":[6,1,37],"921":[3,1,95],"922":[4,1,129],"923":[3,1,121],"924":[3,1,149],"925":[7,1,206],"926":[5,7,58],"927":[9,1,235],"928":[4,1,392],"929":[9,4,60],"930":[7,4,85],"931":[9,4,78],"932":[7,4,54],"933":[4,4,101],"934":[5,1,167],"935":[1,1,44],"936":[1,1,36],"937":[1,1,1],"938":[1,1,55],"939":[1,1,8],"940":[2,2,18],"941":[2,2,60],"942":[2,2,81],"943":[2,2,32],"944":[1,1,1],"945":[2,1,39],"946":[2,1,45],"947":[2,1,59],"948":[2,1,28],"949":[1,1,1],"950":[2,1,63],"951":[2,1,1],"952":[3,3,63],"953":[2,3,63],"954":[2,3,38],"955":[1,1,26],"956":[2,1,46],"957":[2,1,85],"958":[1,1,71],"959":[1,1,116],"960":[2,1,23],"961":[2,1,60],"962":[2,1,65],"963":[2,1,103],"964":[5,1,82],"965":[1,1,18]},"averageFieldLength":[3.6387163561076585,2.6801242236024834,52.15631469979292],"storedFields":{"0":{"title":"精选专题","titles":[]},"1":{"title":"1. 引言","titles":[]},"2":{"title":"2. 划分具备分层结构的“自治”组件","titles":[]},"3":{"title":"3. 构建纯渲染的静态版本:确立工程基线","titles":[]},"4":{"title":"4. 寻找状态的最简表示,敲定拓扑位置","titles":[]},"5":{"title":"4.1 什么是 State?什么是 Derived Data(派生数据)?","titles":["4. 寻找状态的最简表示,敲定拓扑位置"]},"6":{"title":"4.2 敲定 State 的安放位置","titles":["4. 寻找状态的最简表示,敲定拓扑位置"]},"7":{"title":"4. 建立反向数据流:让回调成为刚性契约","titles":[]},"8":{"title":"5. 规范驱动开发(SDD):从执行者转变为立法者","titles":[]},"9":{"title":"5.1 SDD 模式的核心流程与实践要点","titles":["5. 规范驱动开发(SDD):从执行者转变为立法者"]},"10":{"title":"5.2 SDD 模式的适用场景","titles":["5. 规范驱动开发(SDD):从执行者转变为立法者"]},"11":{"title":"5.3 为什么 React 与 SDD 天生一对?","titles":["5. 规范驱动开发(SDD):从执行者转变为立法者"]},"12":{"title":"6.结语:工程师的不可替代性","titles":[]},"13":{"title":"1. JAMStack 核心概念与核心特性","titles":[]},"14":{"title":"1.1 核心定义","titles":["1. JAMStack 核心概念与核心特性"]},"15":{"title":"1.2 核心特性(与传统动态网站对比)","titles":["1. JAMStack 核心概念与核心特性"]},"16":{"title":"1.3 关键误区澄清","titles":["1. JAMStack 核心概念与核心特性"]},"17":{"title":"2. JAMStack 核心技术栈(工具链选型)","titles":[]},"18":{"title":"2.1 核心构建工具(静态站点生成器 SSG)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"19":{"title":"2.2 静态资源托管(部署平台)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"20":{"title":"2.3 API/BaaS 服务(后端能力补充)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"21":{"title":"2.4 无头 CMS(内容管理)","titles":["2. JAMStack 核心技术栈(工具链选型)"]},"22":{"title":"3. JAMStack 项目实践:从 0 到 1 搭建博客网站","titles":[]},"23":{"title":"3.1 技术栈选型","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站"]},"24":{"title":"3.2 具体实施步骤","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站"]},"25":{"title":"步骤 1:初始化 Next.js 项目(SSG 模式)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"26":{"title":"步骤 2:配置 Contentful(内容管理)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"27":{"title":"步骤 3:预渲染博客页面(SSG 核心)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"28":{"title":"步骤 4:集成 Supabase 实现动态评论","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"29":{"title":"步骤 5:部署到 Vercel(一键上线)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站","3.2 具体实施步骤"]},"30":{"title":"3.3 项目扩展:从博客到电商(JAMStack 场景延伸)","titles":["3. JAMStack 项目实践:从 0 到 1 搭建博客网站"]},"31":{"title":"4. JAMStack 适用场景与不适用场景","titles":[]},"32":{"title":"5. 总结","titles":[]},"33":{"title":"1. 引言","titles":[]},"34":{"title":"2. CSR 渲染方案","titles":[]},"35":{"title":"核心原理","titles":["2. CSR 渲染方案"]},"36":{"title":"优缺点","titles":["2. CSR 渲染方案"]},"37":{"title":"适用与不适用场景","titles":["2. CSR 渲染方案"]},"38":{"title":"3. SSR 渲染方案","titles":[]},"39":{"title":"核心原理","titles":["3. SSR 渲染方案"]},"40":{"title":"优缺点","titles":["3. SSR 渲染方案"]},"41":{"title":"适用与不适用场景","titles":["3. SSR 渲染方案"]},"42":{"title":"4. SSG 渲染方案","titles":[]},"43":{"title":"核心原理","titles":["4. SSG 渲染方案"]},"44":{"title":"优缺点","titles":["4. SSG 渲染方案"]},"45":{"title":"适用与不适用场景","titles":["4. SSG 渲染方案"]},"46":{"title":"5. ISR 渲染方案","titles":[]},"47":{"title":"核心原理","titles":["5. ISR 渲染方案"]},"48":{"title":"ISR 的两种模式","titles":["5. ISR 渲染方案"]},"49":{"title":"优缺点","titles":["5. ISR 渲染方案"]},"50":{"title":"适用与不适用场景","titles":["5. ISR 渲染方案"]},"51":{"title":"6. PPR 渲染方案","titles":[]},"52":{"title":"核心原理","titles":["6. PPR 渲染方案"]},"53":{"title":"与 ISR 的本质区别","titles":["6. PPR 渲染方案"]},"54":{"title":"优缺点","titles":["6. PPR 渲染方案"]},"55":{"title":"适用与不适用场景","titles":["6. PPR 渲染方案"]},"56":{"title":"7. 关键差异点分析与实践选择指南","titles":[]},"57":{"title":"7.1 五种方案综合对比","titles":["7. 关键差异点分析与实践选择指南"]},"58":{"title":"7.3 选型决策树","titles":["7. 关键差异点分析与实践选择指南"]},"59":{"title":"7.4 常见落地陷阱与解决方案","titles":["7. 关键差异点分析与实践选择指南"]},"60":{"title":"8. VitePress:一个典型的 SSG 实践案例","titles":[]},"61":{"title":"8.1 VitePress 如何落地 SSG","titles":["8. VitePress:一个典型的 SSG 实践案例"]},"62":{"title":"① 构建时穷举","titles":["8. VitePress:一个典型的 SSG 实践案例","8.1 VitePress 如何落地 SSG"]},"63":{"title":"② 零运行时","titles":["8. VitePress:一个典型的 SSG 实践案例","8.1 VitePress 如何落地 SSG"]},"64":{"title":"③ 纯静态分发","titles":["8. VitePress:一个典型的 SSG 实践案例","8.1 VitePress 如何落地 SSG"]},"65":{"title":"8.2 核心原理","titles":["8. VitePress:一个典型的 SSG 实践案例"]},"66":{"title":"8.3 从 VitePress 学到的五件事","titles":["8. VitePress:一个典型的 SSG 实践案例"]},"67":{"title":"9. 结语","titles":[]},"68":{"title":"1. 从 React SSR 到 Next.js:为什么需要一个框架","titles":[]},"69":{"title":"1.1 react-dom/server — 服务端渲染","titles":["1. 从 React SSR 到 Next.js:为什么需要一个框架"]},"70":{"title":"1.2 react-dom/client — 客户端水合(Hydration)","titles":["1. 从 React SSR 到 Next.js:为什么需要一个框架"]},"71":{"title":"1.3 从"库"到"框架"的鸿沟","titles":["1. 从 React SSR 到 Next.js:为什么需要一个框架"]},"72":{"title":"2. Server First:Next.js 的架构内核","titles":[]},"73":{"title":"2.1 React Server Components (RSC)","titles":["2. Server First:Next.js 的架构内核"]},"74":{"title":"2.2 Client Components:按需声明交互边界","titles":["2. Server First:Next.js 的架构内核"]},"75":{"title":"3. 混合渲染:四种策略,各取所需,灵活混用","titles":[]},"76":{"title":"4. App Router:文件系统即路由系统,约定大于配置","titles":[]},"77":{"title":"4.1 基础规则","titles":["4. App Router:文件系统即路由系统,约定大于配置"]},"78":{"title":"4.2 特殊文件约定","titles":["4. App Router:文件系统即路由系统,约定大于配置"]},"79":{"title":"4.3 目录结构与路由关系示例","titles":["4. App Router:文件系统即路由系统,约定大于配置"]},"80":{"title":"5. 数据获取的新范式","titles":[]},"81":{"title":"5.1 记忆化请求去重","titles":["5. 数据获取的新范式"]},"82":{"title":"5.2 动态 SEO 元数据","titles":["5. 数据获取的新范式"]},"83":{"title":"5.3 API Routes:内置后端能力","titles":["5. 数据获取的新范式"]},"84":{"title":"6. 内置优化组件:让性能在框架层解决","titles":[]},"85":{"title":"6. 性能进阶:Streaming、Suspense、PPR 与 Cache","titles":[]},"86":{"title":"6.1 Streaming + Suspense:先让用户看到内容","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"87":{"title":"6.3 PPR(Partial Prerendering):动静分离","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"88":{"title":"6.4 Cache Components(\'use cache\'):跳过重复计算","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"89":{"title":"6.5 PPR + Cache 的协同","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"90":{"title":"6.6 客户端缓存:SWR","titles":["6. 性能进阶:Streaming、Suspense、PPR 与 Cache"]},"91":{"title":"7. 场景边界与建议","titles":[]},"92":{"title":"7.1 适合 Next.js 的场景","titles":["7. 场景边界与建议"]},"93":{"title":"7.2 不适合 Next.js 的场景","titles":["7. 场景边界与建议"]},"94":{"title":"7.3 核心实践原则","titles":["7. 场景边界与建议"]},"95":{"title":"1. 引言","titles":[]},"96":{"title":"1. SWR","titles":[]},"97":{"title":"1.1 简介与核心流程说明","titles":["1. SWR"]},"98":{"title":"1.3 核心应用场景解析","titles":["1. SWR"]},"99":{"title":"场景 1:封装领域 Hook 与全局配置","titles":["1. SWR","1.3 核心应用场景解析"]},"100":{"title":"场景 2:乐观 UI 更新 (Optimistic UI)","titles":["1. SWR","1.3 核心应用场景解析"]},"101":{"title":"场景 3:依赖请求 (Dependent Fetching)","titles":["1. SWR","1.3 核心应用场景解析"]},"102":{"title":"2. TanStack Query(React Query)","titles":[]},"103":{"title":"2.1 简介与核心流程说明","titles":["2. TanStack Query(React Query)"]},"104":{"title":"2.2 优势分析","titles":["2. TanStack Query(React Query)"]},"105":{"title":"2.3 核心应用场景解析","titles":["2. TanStack Query(React Query)"]},"106":{"title":"场景 1:全局引擎配置(QueryClient)","titles":["2. TanStack Query(React Query)","2.3 核心应用场景解析"]},"107":{"title":"场景 2:高级查询(数据转换、依赖与分页)","titles":["2. TanStack Query(React Query)","2.3 核心应用场景解析"]},"108":{"title":"场景 3:架构级难点 —— 乐观 UI 更新(Optimistic Updates)","titles":["2. TanStack Query(React Query)","2.3 核心应用场景解析"]},"109":{"title":"3. 选型评估:SWR vs React Query","titles":[]},"110":{"title":"3.1 核心设计与功能对比分析","titles":["3. 选型评估:SWR vs React Query"]},"111":{"title":"3.2 场景驱动选型:到底需要哪一个?","titles":["3. 选型评估:SWR vs React Query"]},"112":{"title":"场景 A:应该毫不犹豫选择 SWR 的情况","titles":["3. 选型评估:SWR vs React Query","3.2 场景驱动选型:到底需要哪一个?"]},"113":{"title":"场景 B:应该毫不犹豫选择 TanStack Query 的情况","titles":["3. 选型评估:SWR vs React Query","3.2 场景驱动选型:到底需要哪一个?"]},"114":{"title":"1. 引言","titles":[]},"115":{"title":"2. 传统 HTTP——Web 通信的基石","titles":[]},"116":{"title":"3. 流式 HTTP(Streamable HTTP)","titles":[]},"117":{"title":"3.1 核心原理:分块传输的艺术","titles":["3. 流式 HTTP(Streamable HTTP)"]},"118":{"title":"3.2 应用场景:从大文件到 AI 时代","titles":["3. 流式 HTTP(Streamable HTTP)"]},"119":{"title":"3.3 隐藏的坑:代理与缓冲","titles":["3. 流式 HTTP(Streamable HTTP)"]},"120":{"title":"4. SSE (Server-Sent Events):规范化的单向推送协议","titles":[]},"121":{"title":"4.1 核心原理:严格的文本契约","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"122":{"title":"4.2 网络机制:原生浏览器的“自动驾驶”","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"123":{"title":"4.3 典型场景:轻量级的实时感知","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"124":{"title":"4.4 工程避坑指南:不可忽视的约束","titles":["4. SSE (Server-Sent Events):规范化的单向推送协议"]},"125":{"title":"5. WebSocket:全双工通信","titles":[]},"126":{"title":"5.1 核心原理","titles":["5. WebSocket:全双工通信"]},"127":{"title":"5.2 网络机制","titles":["5. WebSocket:全双工通信"]},"128":{"title":"5.3 应用场景:高互动的终极方案","titles":["5. WebSocket:全双工通信"]},"129":{"title":"5.4 工程落地的“重装”代价","titles":["5. WebSocket:全双工通信"]},"130":{"title":"6. Webhooks:事件驱动的反向回调","titles":[]},"131":{"title":"6.1 核心原理:回调的自动化","titles":["6. Webhooks:事件驱动的反向回调"]},"132":{"title":"6.2 典型场景:跨系统的松耦合集成","titles":["6. Webhooks:事件驱动的反向回调"]},"133":{"title":"6.3 工程考量:可靠投递与安全防护","titles":["6. Webhooks:事件驱动的反向回调"]},"134":{"title":"6.4 与 SSE 的本质区别","titles":["6. Webhooks:事件驱动的反向回调"]},"135":{"title":"7. 关于 HTTP 轮询的讨论","titles":[]},"136":{"title":"7.1 任务特性的本质差异:流式输出 vs 异步大任务","titles":["7. 关于 HTTP 轮询的讨论"]},"137":{"title":"7.2 基础设施的残酷现实:连接池枯竭与网关超时","titles":["7. 关于 HTTP 轮询的讨论"]},"138":{"title":"7.3 后端架构的天然要求:解耦与消息队列","titles":["7. 关于 HTTP 轮询的讨论"]},"139":{"title":"7.4 移动端弱网环境下的"绝对鲁棒性"","titles":["7. 关于 HTTP 轮询的讨论"]},"140":{"title":"7.5 小结","titles":["7. 关于 HTTP 轮询的讨论"]},"141":{"title":"8. 实践选型指南:不买最贵的,只选最对的","titles":[]},"142":{"title":"8.1 决策矩阵:AI 与实时业务场景选型","titles":["8. 实践选型指南:不买最贵的,只选最对的"]},"143":{"title":"8.2 深度决策逻辑:工程选型的五条金律","titles":["8. 实践选型指南:不买最贵的,只选最对的"]},"144":{"title":"9. 结语","titles":[]},"145":{"title":"1. 引言","titles":[]},"146":{"title":"2. 退避轮询","titles":[]},"147":{"title":"2.1 为什么需要退避轮询?","titles":["2. 退避轮询"]},"148":{"title":"2.2 核心机制与运行规则","titles":["2. 退避轮询"]},"149":{"title":"2.3 客户端实现示例","titles":["2. 退避轮询"]},"150":{"title":"3. 长轮询","titles":[]},"151":{"title":"3.1 核心思想与流程","titles":["3. 长轮询"]},"152":{"title":"3.2 服务端实现(NestJS 示例)","titles":["3. 长轮询"]},"153":{"title":"3.3. 客户端实现示例","titles":["3. 长轮询"]},"154":{"title":"4. 总结与选型建议","titles":[]},"155":{"title":"4.1 两种策略核心对比与选型建议","titles":["4. 总结与选型建议"]},"156":{"title":"4.2 适用场景速查","titles":["4. 总结与选型建议"]},"157":{"title":"4.3 混合策略建议","titles":["4. 总结与选型建议"]},"158":{"title":"1. 引言","titles":[]},"159":{"title":"1.1 概念澄清:两种技术,两个层次","titles":["1. 引言"]},"160":{"title":"1.2 关联与协作","titles":["1. 引言"]},"161":{"title":"1.3 SSE 协议数据格式","titles":["1. 引言"]},"162":{"title":"2. 原生 SSE 客户端 API","titles":[]},"163":{"title":"2.1 EventSource API 概览","titles":["2. 原生 SSE 客户端 API"]},"164":{"title":"2.2 服务端实现示例","titles":["2. 原生 SSE 客户端 API"]},"165":{"title":"3. Fetch + ReadableStream 实现方案","titles":[]},"166":{"title":"3.1 原生 Fetch + ReadableStream 实现","titles":["3. Fetch + ReadableStream 实现方案"]},"167":{"title":"3.2 fetch-event-source:更优雅的解决方案","titles":["3. Fetch + ReadableStream 实现方案"]},"168":{"title":"3.3 解析流水线详解","titles":["3. Fetch + ReadableStream 实现方案"]},"169":{"title":"3.4 典型使用示例","titles":["3. Fetch + ReadableStream 实现方案"]},"170":{"title":"4. 生产实践要点与完整示例","titles":[]},"171":{"title":"4.1 重试策略:指数退避","titles":["4. 生产实践要点与完整示例"]},"172":{"title":"4.2 事件分类处理:区分业务事件与协议控制事件","titles":["4. 生产实践要点与完整示例"]},"173":{"title":"4.3 连接状态追踪:防止重复回调","titles":["4. 生产实践要点与完整示例"]},"174":{"title":"4.4 资源清理:AbortController 与主动取消","titles":["4. 生产实践要点与完整示例"]},"175":{"title":"4.5 完整示例:任务流订阅客户端","titles":["4. 生产实践要点与完整示例"]},"176":{"title":"5. 流式响应的服务端","titles":[]},"177":{"title":"5.1 服务端要点","titles":["5. 流式响应的服务端"]},"178":{"title":"5.2 NestJS 实现示例","titles":["5. 流式响应的服务端"]},"179":{"title":"5.3 支持 POST 请求的 SSE","titles":["5. 流式响应的服务端"]},"180":{"title":"6. 结语","titles":[]},"181":{"title":"1. 奥卡姆剃刀原则的核心内涵","titles":[]},"182":{"title":"2. 编程与设计中应用奥卡姆剃刀的核心场景","titles":[]},"183":{"title":"2.1 场景1:需求实现,拒绝"提前设计未来功能"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"184":{"title":"反例(过度设计)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.1 场景1:需求实现,拒绝"提前设计未来功能""]},"185":{"title":"正例(按需设计)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.1 场景1:需求实现,拒绝"提前设计未来功能""]},"186":{"title":"2.2 场景2:代码实现,避免"冗余逻辑与重复代码"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"187":{"title":"反例(冗余代码)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.2 场景2:代码实现,避免"冗余逻辑与重复代码""]},"188":{"title":"正例(简洁代码)","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.2 场景2:代码实现,避免"冗余逻辑与重复代码""]},"189":{"title":"2.3 场景3:架构设计,优先"简单架构",拒绝"过度抽象"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"190":{"title":"反例(过度抽象的架构):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.3 场景3:架构设计,优先"简单架构",拒绝"过度抽象""]},"191":{"title":"正例(简洁架构):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.3 场景3:架构设计,优先"简单架构",拒绝"过度抽象""]},"192":{"title":"2.4 场景4:依赖管理,减少"不必要的第三方库"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"193":{"title":"反例(过度依赖):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.4 场景4:依赖管理,减少"不必要的第三方库""]},"194":{"title":"正例(按需依赖):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.4 场景4:依赖管理,减少"不必要的第三方库""]},"195":{"title":"2.5 场景5:接口设计,遵循"最小接口原则"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"196":{"title":"反例(冗余接口):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.5 场景5:接口设计,遵循"最小接口原则""]},"197":{"title":"正例(简洁接口):","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.5 场景5:接口设计,遵循"最小接口原则""]},"198":{"title":"2.6 场景6:调试与优化,优先排查"简单原因"","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景"]},"199":{"title":"案例:接口返回"空数据"的排查流程","titles":["2. 编程与设计中应用奥卡姆剃刀的核心场景","2.6 场景6:调试与优化,优先排查"简单原因""]},"200":{"title":"3. 应用奥卡姆剃刀的三个关键注意事项","titles":[]},"201":{"title":"4. 结语","titles":[]},"202":{"title":"1. TypeScript 编译配置与 tsconfig.json","titles":[]},"203":{"title":"1.1 tsconfig.json 核心配置梳理","titles":["1. TypeScript 编译配置与 tsconfig.json"]},"204":{"title":"1.2 常用 TypeScript 配置组合","titles":["1. TypeScript 编译配置与 tsconfig.json"]},"205":{"title":"2. 大型项目的模块化配置:extends 与 references","titles":[]},"206":{"title":"2.1 核心概念解析","titles":["2. 大型项目的模块化配置:extends 与 references"]},"207":{"title":"1、references(项目引用)","titles":["2. 大型项目的模块化配置:extends 与 references","2.1 核心概念解析"]},"208":{"title":"2、composite(复合项目)","titles":["2. 大型项目的模块化配置:extends 与 references","2.1 核心概念解析"]},"209":{"title":"3、extends(配置继承)","titles":["2. 大型项目的模块化配置:extends 与 references","2.1 核心概念解析"]},"210":{"title":"2.2 extends 与 references 的区别","titles":["2. 大型项目的模块化配置:extends 与 references"]},"211":{"title":"3. Monorepo 项目配置实践","titles":[]},"212":{"title":"3.1 根配置(tsconfig.base.json)","titles":["3. Monorepo 项目配置实践"]},"213":{"title":"3.2 共享库项目(packages/shared/tsconfig.json)","titles":["3. Monorepo 项目配置实践"]},"214":{"title":"3.3 Web 前端项目(packages/web/tsconfig.json)","titles":["3. Monorepo 项目配置实践"]},"215":{"title":"3.4 API 后端项目(packages/api/tsconfig.json)","titles":["3. Monorepo 项目配置实践"]},"216":{"title":"3.5 最佳实践总结","titles":["3. Monorepo 项目配置实践"]},"217":{"title":"3. 调试代码","titles":[]},"218":{"title":"4. 引入扩展工具","titles":[]},"219":{"title":"4.1. 静态检查工具 ESLint","titles":["4. 引入扩展工具"]},"220":{"title":"4.2. 单测工具 Jest","titles":["4. 引入扩展工具"]},"221":{"title":"4.2.1 安装依赖","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"222":{"title":"4.2.2 配置 Jest","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"223":{"title":"4.2.3 编写测试用例","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"224":{"title":"4.2.4 运行测试","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"225":{"title":"4.2.5 高级特性","titles":["4. 引入扩展工具","4.2. 单测工具 Jest"]},"226":{"title":"5. 结语","titles":[]},"227":{"title":"1. 前置概念:类型即集合","titles":[]},"228":{"title":"2. 联合类型:类型的"或"","titles":[]},"229":{"title":"2.1 基础语法与语义","titles":["2. 联合类型:类型的"或""]},"230":{"title":"2.2 可辨识联合(Discriminated Union)","titles":["2. 联合类型:类型的"或""]},"231":{"title":"2.3 类型收窄全解","titles":["2. 联合类型:类型的"或""]},"232":{"title":"2.4 穷尽性检查:never 的妙用","titles":["2. 联合类型:类型的"或""]},"233":{"title":"2.5 keyof 在联合类型上的行为","titles":["2. 联合类型:类型的"或""]},"234":{"title":"2.6 分布式条件类型","titles":["2. 联合类型:类型的"或""]},"235":{"title":"3. 交叉类型:类型的"与"","titles":[]},"236":{"title":"3.1 基础语法与语义","titles":["3. 交叉类型:类型的"与""]},"237":{"title":"3.2 属性冲突的本质","titles":["3. 交叉类型:类型的"与""]},"238":{"title":"3.3 函数类型的交叉 = 重载签名","titles":["3. 交叉类型:类型的"与""]},"239":{"title":"3.4 keyof 在交叉类型上的行为","titles":["3. 交叉类型:类型的"与""]},"240":{"title":"3.5 交叉类型 vs extends 继承","titles":["3. 交叉类型:类型的"与""]},"241":{"title":"4. 联合与交叉的深层关系","titles":[]},"242":{"title":"4.1 keyof 对偶性","titles":["4. 联合与交叉的深层关系"]},"243":{"title":"4.2 分配律","titles":["4. 联合与交叉的深层关系"]},"244":{"title":"4.3 与类型层级的代数关系","titles":["4. 联合与交叉的深层关系"]},"245":{"title":"5. 实战模式","titles":[]},"246":{"title":"5.1 Result / Either 模式","titles":["5. 实战模式"]},"247":{"title":"5.2 Branded Type(标记类型)","titles":["5. 实战模式"]},"248":{"title":"5.3 Mixin 组合模式","titles":["5. 实战模式"]},"249":{"title":"5.4 精确的组件 Props 类型","titles":["5. 实战模式"]},"250":{"title":"6. 总结","titles":[]},"251":{"title":"1. 泛型的基本概念和作用","titles":[]},"252":{"title":"1.1 核心定义","titles":["1. 泛型的基本概念和作用"]},"253":{"title":"1.2 泛型与 any 类型的对比","titles":["1. 泛型的基本概念和作用"]},"254":{"title":"1.3 泛型的工作原理","titles":["1. 泛型的基本概念和作用"]},"255":{"title":"1.4 泛型的核心优势","titles":["1. 泛型的基本概念和作用"]},"256":{"title":"1.5 泛型的应用场景","titles":["1. 泛型的基本概念和作用"]},"257":{"title":"2. 泛型代码示例","titles":[]},"258":{"title":"2.1 基础泛型函数","titles":["2. 泛型代码示例"]},"259":{"title":"2.2 实用泛型函数(项目场景)","titles":["2. 泛型代码示例"]},"260":{"title":"2.3 泛型接口(API 响应处理)","titles":["2. 泛型代码示例"]},"261":{"title":"2.4 泛型类(数据容器)","titles":["2. 泛型代码示例"]},"262":{"title":"2.5 泛型类型别名与高级应用","titles":["2. 泛型代码示例"]},"263":{"title":"3. 泛型最佳实践总结","titles":[]},"264":{"title":"4. 泛型约束","titles":[]},"265":{"title":"4.1 基本类型约束","titles":["4. 泛型约束"]},"266":{"title":"4.2 接口约束","titles":["4. 泛型约束"]},"267":{"title":"4.3 多重约束","titles":["4. 泛型约束"]},"268":{"title":"4.4 Keyof 约束","titles":["4. 泛型约束"]},"269":{"title":"4.5 类约束","titles":["4. 泛型约束"]},"270":{"title":"4.6 小结","titles":["4. 泛型约束"]},"271":{"title":"5. 结语","titles":[]},"272":{"title":"1. 引言","titles":[]},"273":{"title":"2.分层架构设计","titles":[]},"274":{"title":"2.1 前端分层架构","titles":["2.分层架构设计"]},"275":{"title":"2.2 后端模块化分层架构","titles":["2.分层架构设计"]},"276":{"title":"2.3 领域驱动设计(DDD)与模块化","titles":["2.分层架构设计"]},"277":{"title":"2.3.1 DDD 的核心理念","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"278":{"title":"2.3.2 DDD 的关键概念","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"279":{"title":"2.3.3 DDD 的分层架构","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"280":{"title":"2.3.4 全栈 DDD 项目目录结构示例","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"281":{"title":"2.3.5 DDD 实践指导","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"282":{"title":"2.3.6 DDD 实施建议","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"283":{"title":"2.3.7 DDD 的优势与挑战","titles":["2.分层架构设计","2.3 领域驱动设计(DDD)与模块化"]},"284":{"title":"2.4 微前端与模块化","titles":["2.分层架构设计"]},"285":{"title":"2.4.1 微前端的核心理念","titles":["2.分层架构设计","2.4 微前端与模块化"]},"286":{"title":"2.4.2 微前端的模块化设计原则","titles":["2.分层架构设计","2.4 微前端与模块化"]},"287":{"title":"2.4.3 微前端实现方案对比","titles":["2.分层架构设计","2.4 微前端与模块化"]},"288":{"title":"2.4.4 模块联邦(Module Federation)实战","titles":["2.分层架构设计","2.4 微前端与模块化"]},"289":{"title":"2.4.5 微前端通信机制","titles":["2.分层架构设计","2.4 微前端与模块化"]},"290":{"title":"2.4.6 微前端项目目录结构","titles":["2.分层架构设计","2.4 微前端与模块化"]},"291":{"title":"2.4.7 微前端最佳实践","titles":["2.分层架构设计","2.4 微前端与模块化"]},"292":{"title":"2.4.8 微前端小结","titles":["2.分层架构设计","2.4 微前端与模块化"]},"293":{"title":"结语","titles":[]},"294":{"title":"1. 引言","titles":[]},"295":{"title":"2. 模块化编程初体验","titles":[]},"296":{"title":"3. 模块与模块化的基础概念","titles":[]},"297":{"title":"3.1 痛点解决与工程价值","titles":["3. 模块与模块化的基础概念"]},"298":{"title":"3.2 前端模块化的演进历程","titles":["3. 模块与模块化的基础概念"]},"299":{"title":"3.3 结合设计模式的模块化实践","titles":["3. 模块与模块化的基础概念"]},"300":{"title":"工厂模式","titles":["3. 模块与模块化的基础概念","3.3 结合设计模式的模块化实践"]},"301":{"title":"单例模式","titles":["3. 模块与模块化的基础概念","3.3 结合设计模式的模块化实践"]},"302":{"title":"观察者模式观察者模式 / 发布订阅模式(Observer / Pub-Sub)","titles":["3. 模块与模块化的基础概念","3.3 结合设计模式的模块化实践"]},"303":{"title":"4. 结语:在秩序与复杂中寻找平衡","titles":[]},"304":{"title":"1. CommonJS 规范:Node.js 生态的基石","titles":[]},"305":{"title":"2. AMD 规范:浏览器异步加载方案","titles":[]},"306":{"title":"3. UMD 规范:跨环境兼容方案","titles":[]},"307":{"title":"4. ES Modules:现代开发的终极标准","titles":[]},"308":{"title":"5. 规范对比与现代迁移指南","titles":[]},"309":{"title":"6. 结语:在标准之上构建未来","titles":[]},"310":{"title":"1. 命名导出与导入:精准的代码引用","titles":[]},"311":{"title":"2. 默认导出与导入:单一职责的体现","titles":[]},"312":{"title":"3. 转移导出(Re-exporting):构建模块聚合层","titles":[]},"313":{"title":"4. 动态导入(Dynamic Import):性能优化的“大杀器”","titles":[]},"314":{"title":"5. 模块执行逻辑:静态解析与单例","titles":[]},"315":{"title":"6. 循环依赖:挑战与生存指南","titles":[]},"316":{"title":"7. 结语:在标准规范中寻求最优解","titles":[]},"317":{"title":"1. 引言","titles":[]},"318":{"title":"2. 类型导出与导入:极致的运行时优化","titles":[]},"319":{"title":"3. 类型系统与模块化的深度融合","titles":[]},"320":{"title":"4. 命名空间与模块:历史的交棒","titles":[]},"321":{"title":"5. 声明文件(.d.ts):抹平 JS 与 TS 的鸿沟","titles":[]},"322":{"title":"6. 现代模块化项目的 TS 配置指南","titles":[]},"323":{"title":"7. TypeScript 5.0+ 模块化新特性","titles":[]},"324":{"title":"标准化装饰器(Stage 3 Decorators)","titles":["7. TypeScript 5.0+ 模块化新特性"]},"325":{"title":"模块扩展(Module Augmentation)","titles":["7. TypeScript 5.0+ 模块化新特性"]},"326":{"title":"8. 结语:构建稳固的类型防线","titles":[]},"327":{"title":"1. 单一职责原则","titles":[]},"328":{"title":"2. 高内聚低耦合","titles":[]},"329":{"title":"3. 模块粒度设计","titles":[]},"330":{"title":"4. 命名规范","titles":[]},"331":{"title":"5. 模块版本管理","titles":[]},"332":{"title":"6. 结语:构建可预测的秩序","titles":[]},"333":{"title":"1. CommonJS 与 ES Modules 双模共存","titles":[]},"334":{"title":"2. Node.js 模块加载机制","titles":[]},"335":{"title":"3. 包管理与模块化","titles":[]},"336":{"title":"4. 模块化架构:分层设计与关注点分离","titles":[]},"337":{"title":"5. 结语","titles":[]},"338":{"title":"1. 基本语言与环境","titles":[]},"339":{"title":"2. 核心 UI 框架","titles":[]},"340":{"title":"3. 样式与 UI 组件库 (Styling & Component Libraries)","titles":[]},"341":{"title":"4. 路由与状态管理","titles":[]},"342":{"title":"5. 数据获取与 API 集成 (Data Fetching & API)","titles":[]},"343":{"title":"6. 构建工具与工作流 (Build Tools & Workflow)","titles":[]},"344":{"title":"7. 全栈框架","titles":[]},"345":{"title":"8. 部署与托管 (Deployment & Hosting)","titles":[]},"346":{"title":"9. 学习资源与社区 (Learning & Community)","titles":[]},"347":{"title":"精选专题","titles":[]},"348":{"title":"1. 引言","titles":[]},"349":{"title":"2. 核心定位:从“链接导航”到“知识发现”","titles":[]},"350":{"title":"3. 产品交互重构:反直觉的 UI 创新","titles":[]},"351":{"title":"4. 技术护城河:搜索是一项工程与模型的交响","titles":[]},"352":{"title":"4.1 驯服幻觉(Hallucination)的四个维度","titles":["4. 技术护城河:搜索是一项工程与模型的交响"]},"353":{"title":"4.2 极致的性能优化:追踪尾部延迟(Tail Latency)","titles":["4. 技术护城河:搜索是一项工程与模型的交响"]},"354":{"title":"5. 商业逻辑:你的利润率,就是我的机会","titles":[]},"355":{"title":"6. 未来演进:从被动响应到主动 Agent","titles":[]},"356":{"title":"写在最后","titles":[]},"357":{"title":"1. 引言:当“执行”被 AI 填平,什么才是核心壁垒?","titles":[]},"358":{"title":"2. 从“解决问题”到“发现问题”:提问力决定生产力","titles":[]},"359":{"title":"3. 培养非共识的“品味”:逃离 AI 生成的“平均数”","titles":[]},"360":{"title":"4. 保持真诚与“打破规则”的勇气:抵抗 AI 的“幻觉”与平庸","titles":[]},"361":{"title":"5. 复合指数增长:以小见大的行动力","titles":[]},"362":{"title":"6. 在算力面前保持敬畏,在机器面前保持好奇","titles":[]},"363":{"title":"1. 引言","titles":[]},"364":{"title":"2. 解构产品 Sense 的数学之美","titles":[]},"365":{"title":"2.1. 极简杠杆公式:寻找 ROI 的最大解","titles":["2. 解构产品 Sense 的数学之美"]},"366":{"title":"2.2. 洞察力公式:理智与情感的共舞","titles":["2. 解构产品 Sense 的数学之美"]},"367":{"title":"2.3. AI 前沿视角公式:从“功能产品”到“语境构建”","titles":["2. 解构产品 Sense 的数学之美"]},"368":{"title":"3. 刻意练习:如何从“凭感觉”到“有直觉”?","titles":[]},"369":{"title":"3.1. 建立“预测-验证”的反馈闭环","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?"]},"370":{"title":"3.2. 培养“摩擦力日记”","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?"]},"371":{"title":"3.3. 解构“魔法”:从惊叹到复刻的逆向工程","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?"]},"372":{"title":"(1)记录 (Record):捕捉情绪颗粒度","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"373":{"title":"(2)解剖 (Peel):上帝视角的逻辑拆解","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"374":{"title":"(3)重构 (Reconstruct):全栈视角的复刻推演","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"375":{"title":"(4)沉淀 (Crystallize):输出倒逼内化","titles":["3. 刻意练习:如何从“凭感觉”到“有直觉”?","3.3. 解构“魔法”:从惊叹到复刻的逆向工程"]},"376":{"title":"4. 结语:从“如何实现”的焦虑中解放,拥抱“为何而做”的自由","titles":[]},"377":{"title":"1. 社区先行:从“我是谁”到“我能为谁解决问题”","titles":[]},"378":{"title":"2. 极简流转:用“克制”对抗“熵增”,用“自动化”替代“堆人力”","titles":[]},"379":{"title":"3. 盈利自信:做时间的朋友,而非资本的奴隶","titles":[]},"380":{"title":"4. 建造你想住的房子:真实的营销与价值观契合","titles":[]},"381":{"title":"5. 总结与反思","titles":[]},"382":{"title":"1. 表象背后藏着决定一切的“系统黑盒”","titles":[]},"383":{"title":"2. 系统的核心:要素 * 连接关系","titles":[]},"384":{"title":"3. 变量:系统里的“变化因子”","titles":[]},"385":{"title":"4. 因果链:搭建系统的骨架","titles":[]},"386":{"title":"5. 增强回路:造就指数级增长","titles":[]},"387":{"title":"6. 调节回路:让系统回归平衡","titles":[]},"388":{"title":"7. 滞后效应:时间的迷雾","titles":[]},"389":{"title":"8. 总结:从观察者到洞察者","titles":[]},"390":{"title":"1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈","titles":[]},"391":{"title":"1.1 容器的形状:方盒与圆瓶背后的成本战术","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"392":{"title":"1.2 可乐的三十年价格迷局:双头垄断下的博弈均衡","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"393":{"title":"1.3 “来都来了”与沉没成本陷阱:有限理性的普遍胜利","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"394":{"title":"1.4 帕累托优化与最优体验:在约束条件下求最优解","titles":["1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈"]},"395":{"title":"2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期","titles":[]},"396":{"title":"2.1 产品定义与定位:深入市场洞察与价值发现","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"397":{"title":"2.2 产品定价策略:最大化收益与捕获用户剩余","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"398":{"title":"2.3 产品用户体验与留存:构建锁定效应与对抗边际效用递减","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"399":{"title":"2.4 产品商业化与生态构建:追求帕累托改进与管理外部性","titles":["2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期"]},"400":{"title":"3. 总结:方法论提炼与职业修养——培养“经济直觉”","titles":[]},"401":{"title":"精选专题","titles":[]},"402":{"title":"1. 什么是 Agent?——从“工具”到“实体”的进化","titles":[]},"403":{"title":"2. 核心价值:自动化程度的阶梯式跨越","titles":[]},"404":{"title":"3. 应用场景:谁会被替代,谁会被增强?","titles":[]},"405":{"title":"3.1 深度替代与变革型","titles":["3. 应用场景:谁会被替代,谁会被增强?"]},"406":{"title":"3.2 辅助增强型(升级工作价值)","titles":["3. 应用场景:谁会被替代,谁会被增强?"]},"407":{"title":"3.3 生活与垂直领域(长尾覆盖)","titles":["3. 应用场景:谁会被替代,谁会被增强?"]},"408":{"title":"4. 技术拆解:Agent 核心要素与关键技术","titles":[]},"409":{"title":"4.1 规划","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"410":{"title":"4.2 记忆","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"411":{"title":"4.3 工具","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"412":{"title":"4.4 行动","titles":["4. 技术拆解:Agent 核心要素与关键技术"]},"413":{"title":"5. Agent 的分类与未来","titles":[]},"414":{"title":"5.1 通用 Agent","titles":["5. Agent 的分类与未来"]},"415":{"title":"5.2 多智能体系统 (Multi-Agent System)","titles":["5. Agent 的分类与未来"]},"416":{"title":"典型案例:Deep Research 深度调研系统","titles":["5. Agent 的分类与未来","5.2 多智能体系统 (Multi-Agent System)"]},"417":{"title":"5.3 知识型 Agent","titles":["5. Agent 的分类与未来"]},"418":{"title":"5.4 多模态 Agent","titles":["5. Agent 的分类与未来"]},"419":{"title":"5.5 迈向高度自主:OpenClaw 与"数字员工"","titles":["5. Agent 的分类与未来"]},"420":{"title":"6. 结语:从“对话”到“协同”的范式革命","titles":[]},"421":{"title":"1. 引言","titles":[]},"422":{"title":"2. 任务分解:化繁为简的策略","titles":[]},"423":{"title":"2.1 先分解后规划","titles":["2. 任务分解:化繁为简的策略"]},"424":{"title":"2.2 边分解边规划","titles":["2. 任务分解:化繁为简的策略"]},"425":{"title":"2.3 基于语言模型的自主分解","titles":["2. 任务分解:化繁为简的策略"]},"426":{"title":"3. 自我反思:闭环控制的艺术","titles":[]},"427":{"title":"4. 动态响应模式:基于 ReAct 看规划闭环","titles":[]},"428":{"title":"5. 预编排模式:Plan-and-Execute 下的自动化工程","titles":[]},"429":{"title":"5.1 核心运行机制","titles":["5. 预编排模式:Plan-and-Execute 下的自动化工程"]},"430":{"title":"5.2 为什么在复杂场景中这种模式更具优势?","titles":["5. 预编排模式:Plan-and-Execute 下的自动化工程"]},"431":{"title":"5.3 小结","titles":["5. 预编排模式:Plan-and-Execute 下的自动化工程"]},"432":{"title":"6. 范式选择:如何为你的 Agent 配置“小脑”?","titles":[]},"433":{"title":"7. 结语:规划是 Agent 迈向“确定性”的定盘星","titles":[]},"434":{"title":"1. 引言","titles":[]},"435":{"title":"2. Prompts:即时灵活的对话指令","titles":[]},"436":{"title":"3. Skills:可复用的专属能力包(把高频方法变成可复用能力)","titles":[]},"437":{"title":"4. Projects:长期专属工作空间","titles":[]},"438":{"title":"5. Subagents:分工明确的专项助手","titles":[]},"439":{"title":"6. MCP:模型上下文协议(外部连接通用协议)","titles":[]},"440":{"title":"7. 结束语","titles":[]},"441":{"title":"1. 引言:Agent Skills 是什么?","titles":[]},"442":{"title":"2. 文件夹结构拆解:标准化的操作手册","titles":[]},"443":{"title":"3. 核心机制与流程:渐进式披露的艺术","titles":[]},"444":{"title":"4. 实践指南:如何写好一个 Agent Skill?","titles":[]},"445":{"title":"4.1 核心编写原则","titles":["4. 实践指南:如何写好一个 Agent Skill?"]},"446":{"title":"4.2 四步法","titles":["4. 实践指南:如何写好一个 Agent Skill?"]},"447":{"title":"步骤 1:明确使用场景与边界","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"448":{"title":"步骤 2:编写元信息(YAML Frontmatter)","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"449":{"title":"步骤 3:编写执行指令 (Markdown Body)","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"450":{"title":"步骤4:Skill 质量检查清单 (Checklist)","titles":["4. 实践指南:如何写好一个 Agent Skill?","4.2 四步法"]},"451":{"title":"5. 一个具体的 Agent skill 示例:git-workflow","titles":[]},"452":{"title":"6. 三类常见 Agent Skill 模式","titles":[]},"453":{"title":"模式 1:文档与资源生成","titles":["6. 三类常见 Agent Skill 模式"]},"454":{"title":"模式 2:工作流自动化","titles":["6. 三类常见 Agent Skill 模式"]},"455":{"title":"模式 3:MCP 增强与编排","titles":["6. 三类常见 Agent Skill 模式"]},"456":{"title":"7. 总结:从零散指令到可持续工作流","titles":[]},"457":{"title":"1. 引言:全能的幻觉与稀缺的转移","titles":[]},"458":{"title":"2. 解构 Full Stack:不是简单加法,而是乘数效应","titles":[]},"459":{"title":"2.1 核心能力矩阵与 3 个 Level","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"460":{"title":"2.2 判断力(Taste):最难被 AI 替代的元能力","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"461":{"title":"2.3 实现力(Build):从"敲代码"到"系统编排"","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"462":{"title":"2.4 杠杆力(Leverage):寻找你的 10x 乘数","titles":["2. 解构 Full Stack:不是简单加法,而是乘数效应"]},"463":{"title":"3. Full Stack Builder 的复利效应","titles":[]},"464":{"title":"4. 进阶路径:Full Stack Builder 的成长路径","titles":[]},"465":{"title":"5. AI 时代的机会在哪里?","titles":[]},"466":{"title":"6. 结语","titles":[]},"467":{"title":"1. 引言","titles":[]},"468":{"title":"2. 为什么深度研究需要 Multi-Agent 架构模式?","titles":[]},"469":{"title":"3. 系统架构","titles":[]},"470":{"title":"3.1 核心设计与职责分配","titles":["3. 系统架构"]},"471":{"title":"3.2 工作流设计","titles":["3. 系统架构"]},"472":{"title":"3.3 技术要点说明","titles":["3. 系统架构"]},"473":{"title":"4. 实践案例:以“初中数学学习研究”为例","titles":[]},"474":{"title":"4.1 执行流观察","titles":["4. 实践案例:以“初中数学学习研究”为例"]},"475":{"title":"4.2 数据可视化的深度","titles":["4. 实践案例:以“初中数学学习研究”为例"]},"476":{"title":"5. 结束语:迈向更可控的 Agent 开发","titles":[]},"477":{"title":"1. 引言","titles":[]},"478":{"title":"2. 为什么选择 Claude Agent SDK?","titles":[]},"479":{"title":"3.快速上手:环境配置与初始化","titles":["2. 为什么选择 Claude Agent SDK?"]},"480":{"title":"3.1 安装依赖","titles":["2. 为什么选择 Claude Agent SDK?","3.快速上手:环境配置与初始化"]},"481":{"title":"3.2 环境变量的“陷阱”与配置","titles":["2. 为什么选择 Claude Agent SDK?","3.快速上手:环境配置与初始化"]},"482":{"title":"4. 核心实践:从无状态交互到自主执行","titles":["2. 为什么选择 Claude Agent SDK?"]},"483":{"title":"4.1 模式一:基础无状态对话","titles":["2. 为什么选择 Claude Agent SDK?","4. 核心实践:从无状态交互到自主执行"]},"484":{"title":"4.2 模式二:自主找 Bug 并修复(Agentic Loop)","titles":["2. 为什么选择 Claude Agent SDK?","4. 核心实践:从无状态交互到自主执行"]},"485":{"title":"5. 进阶:会话管理与持久化记忆","titles":["2. 为什么选择 Claude Agent SDK?"]},"486":{"title":"5.1 会话 ID 的捕获与恢复","titles":["2. 为什么选择 Claude Agent SDK?","5. 进阶:会话管理与持久化记忆"]},"487":{"title":"6. 实战 TUI 应用:构建流式交互 Agent 终端","titles":["2. 为什么选择 Claude Agent SDK?"]},"488":{"title":"6.1 核心逻辑:流式解析 stream_event","titles":["2. 为什么选择 Claude Agent SDK?","6. 实战 TUI 应用:构建流式交互 Agent 终端"]},"489":{"title":"6.2 封装 tuiChat 对话循环","titles":["2. 为什么选择 Claude Agent SDK?","6. 实战 TUI 应用:构建流式交互 Agent 终端"]},"490":{"title":"6.3 交互效果展示","titles":["2. 为什么选择 Claude Agent SDK?","6. 实战 TUI 应用:构建流式交互 Agent 终端"]},"491":{"title":"7. 结束语","titles":["2. 为什么选择 Claude Agent SDK?"]},"492":{"title":"1. 破局点:面对 K12 赛道,谁才是真正的用户?","titles":[]},"493":{"title":"2. 为什么选择“数学”?—— 技术边界与场景的完美契合","titles":[]},"494":{"title":"3. Agent 核心设计:结构化的 Prompt 规范","titles":[]},"495":{"title":"4. 总结:从研发思维到产品直觉","titles":[]},"496":{"title":"1. 实践背景","titles":[]},"497":{"title":"2. 平台与 Agent 基本人设","titles":[]},"498":{"title":"2.1 平台选择","titles":["2. 平台与 Agent 基本人设"]},"499":{"title":"2.2 角色设定与物料生成","titles":["2. 平台与 Agent 基本人设"]},"500":{"title":"3. 工作模式与工具集配置","titles":[]},"501":{"title":"3.1 工具/插件配置","titles":["3. 工作模式与工具集配置"]},"502":{"title":"3.2 工作模式设定","titles":["3. 工作模式与工具集配置"]},"503":{"title":"3. Prompt 演进:从常规 Prompt 到结构化 Prompt","titles":[]},"504":{"title":"3.1 阶段一:非结构化 System Prompt(基线测试)","titles":["3. Prompt 演进:从常规 Prompt 到结构化 Prompt"]},"505":{"title":"测试 Case","titles":["3. Prompt 演进:从常规 Prompt 到结构化 Prompt","3.1 阶段一:非结构化 System Prompt(基线测试)"]},"506":{"title":"3.2 阶段二:结构化 System Prompt(LangGPT 范式)","titles":[]},"507":{"title":"测试 Case","titles":["3.2 阶段二:结构化 System Prompt(LangGPT 范式)","3.1 阶段一:非结构化 System Prompt(基线测试)"]},"508":{"title":"测试 Case 2:","titles":["3.2 阶段二:结构化 System Prompt(LangGPT 范式)","3.1 阶段一:非结构化 System Prompt(基线测试)"]},"509":{"title":"5. 实践小总结","titles":[]},"510":{"title":"1. AI 助手","titles":[]},"511":{"title":"1.1. 国外","titles":["1. AI 助手"]},"512":{"title":"1.2. 国内","titles":["1. AI 助手"]},"513":{"title":"2. AI 学习与内容创作工作站","titles":[]},"514":{"title":"2.1 关键点说明","titles":["2. AI 学习与内容创作工作站"]},"515":{"title":"2.2 选择建议","titles":["2. AI 学习与内容创作工作站"]},"516":{"title":"3. AI 搜索","titles":[]},"517":{"title":"3.1 关键点说明","titles":["3. AI 搜索"]},"518":{"title":"3.2 选择建议","titles":["3. AI 搜索"]},"519":{"title":"1. 选模型前,先想清楚这几件事","titles":[]},"520":{"title":"2. 官方 API 平台","titles":[]},"521":{"title":"2.1 国际顶尖模型","titles":["2. 官方 API 平台"]},"522":{"title":"2.2 国内优秀模型","titles":["2. 官方 API 平台"]},"523":{"title":"3. 第三方聚合平台","titles":[]},"524":{"title":"精选专题","titles":[]},"525":{"title":"1. 引言","titles":[]},"526":{"title":"2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%","titles":[]},"527":{"title":"2.1 从"技术债务"到"系统韧性"","titles":["2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%"]},"528":{"title":"2.2 从"不划算"到"高价值":任务优先级的重新洗牌","titles":["2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%"]},"529":{"title":"2.3 跨领域能力的“无痛溢出”","titles":["2. 盯准任务构成,而非单一速度,重获“工程尊严”的 27%"]},"530":{"title":"3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense","titles":[]},"531":{"title":"3.1 警惕“监督悖论”与能力的平庸化","titles":["3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense"]},"532":{"title":"3.2 从 Vibe Coding 进化到规范驱动(SDD)","titles":["3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense"]},"533":{"title":"3.3. 构建新型“工程 Sense”:从手艺人到导演","titles":["3. 对抗“平庸化” —— 在自然语言编程时代重塑工程 Sense"]},"534":{"title":"4. 范式落地——在随机性之上,构建确定性的工程基座","titles":[]},"535":{"title":"4.1 从“单点指令”转向“多智能体编排(Multi-Agent Orchestration)”","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"536":{"title":"4.2 构建"上下文护城河":从 Prompt 到知识图谱","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"537":{"title":"4.3 "可观测性":让 AI 的决策过程透明可见","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"538":{"title":"4.4 拥抱"不确定性",但守住"质量底线"","titles":["4. 范式落地——在随机性之上,构建确定性的工程基座"]},"539":{"title":"5. 结语","titles":[]},"540":{"title":"1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈","titles":[]},"541":{"title":"1.1 产品 Sense 与业务洞察","titles":["1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈"]},"542":{"title":"1.2 Agentic Engineering(智能体工程)","titles":["1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈"]},"543":{"title":"1.3 AI-First 的交互哲学","titles":["1. 产品应用层(Insight Stack):走向“超级个体”的 AI 原生全栈"]},"544":{"title":"2. Agent 开发层:构建连接物理世界的数字中枢","titles":[]},"545":{"title":"2.1 Agentic Workflow 设计","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"546":{"title":"2.2 记忆机制(Memory Management)","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"547":{"title":"2.3 技能的插件化(Agent Skill)","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"548":{"title":"2.4 从硬编码到标准协议与上下文连接","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"549":{"title":"2.5 模型选型、路由与可观测性","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"550":{"title":"2.6 EDD(评估驱动开发)重塑工程质量","titles":["2. Agent 开发层:构建连接物理世界的数字中枢"]},"551":{"title":"3. AI 基础设施层:算力与模型的重工业底座","titles":[]},"552":{"title":"4. 找准自己的生态位","titles":[]},"553":{"title":"1. 引言","titles":[]},"554":{"title":"2. AI 时代的全栈新公式","titles":[]},"555":{"title":"2.1. Engineering (工程力):从“困于实现”到“敢于设计”","titles":["2. AI 时代的全栈新公式"]},"556":{"title":"2.2. Product (产品力):从“需求翻译机”到“价值定义者”","titles":["2. AI 时代的全栈新公式"]},"557":{"title":"2.3. AI (AI 杠杆):指数级倍增器","titles":["2. AI 时代的全栈新公式"]},"558":{"title":"3. 从 Tech Stack 到 Insight Stack:进阶之路","titles":[]},"559":{"title":"1. 三种编程范式速览","titles":[]},"560":{"title":"2. Vibe Coding — 用自然语言"说"出一个应用","titles":[]},"561":{"title":"2.1 关键点说明","titles":["2. Vibe Coding — 用自然语言"说"出一个应用"]},"562":{"title":"2.2 六款工具横向对比","titles":["2. Vibe Coding — 用自然语言"说"出一个应用"]},"563":{"title":"3. AI IDE — 与代码编辑器深度融合","titles":[]},"564":{"title":"3.1 关键点说明","titles":["3. AI IDE — 与代码编辑器深度融合"]},"565":{"title":"3.2 三款工具横向对比","titles":["3. AI IDE — 与代码编辑器深度融合"]},"566":{"title":"4. Agentic Engineering — AI 自主完成工程任务","titles":[]},"567":{"title":"4.1 关键点说明","titles":["4. Agentic Engineering — AI 自主完成工程任务"]},"568":{"title":"4.2 五款 Agentic 工具横向对比","titles":["4. Agentic Engineering — AI 自主完成工程任务"]},"569":{"title":"1. 引言","titles":[]},"570":{"title":"2. 目录概览","titles":[]},"571":{"title":"3. CLAUDE.md:最核心的配置文件","titles":[]},"572":{"title":"3.1 应该写什么","titles":["3. CLAUDE.md:最核心的配置文件"]},"573":{"title":"3.2 示例","titles":["3. CLAUDE.md:最核心的配置文件"]},"574":{"title":"3.3 如何创建 CLAUDE.md","titles":["3. CLAUDE.md:最核心的配置文件"]},"575":{"title":"4. rules/:模块化规则","titles":[]},"576":{"title":"4.1 路径过滤:让规则精准生效","titles":["4. rules/:模块化规则"]},"577":{"title":"4.2 何时该拆分到 rules/","titles":["4. rules/:模块化规则"]},"578":{"title":"4.3 规则文件的组织建议","titles":["4. rules/:模块化规则"]},"579":{"title":"5. commands/:自定义斜杠命令","titles":[]},"580":{"title":"5.1 命令的存放位置","titles":["5. commands/:自定义斜杠命令"]},"581":{"title":"5.2 命令的结构","titles":["5. commands/:自定义斜杠命令"]},"582":{"title":"5.3 传递参数:$ARGUMENTS","titles":["5. commands/:自定义斜杠命令"]},"583":{"title":"5.4 命令的价值","titles":["5. commands/:自定义斜杠命令"]},"584":{"title":"6. skills/:自动触发的工作流","titles":[]},"585":{"title":"6.1 技能与命令的根本区别","titles":["6. skills/:自动触发的工作流"]},"586":{"title":"6.2 技能的结构","titles":["6. skills/:自动触发的工作流"]},"587":{"title":"6.3 技能的使用场景","titles":["6. skills/:自动触发的工作流"]},"588":{"title":"6.4 何时用命令,何时用技能","titles":["6. skills/:自动触发的工作流"]},"589":{"title":"7. agents/:独立执行的专职角色","titles":[]},"590":{"title":"7.1 为什么需要 agents","titles":["7. agents/:独立执行的专职角色"]},"591":{"title":"7.2 agents 的定义结构","titles":["7. agents/:独立执行的专职角色"]},"592":{"title":"7.3 agents vs skills:谁是更好的选择","titles":["7. agents/:独立执行的专职角色"]},"593":{"title":"8. settings.json:权限与项目配置","titles":[]},"594":{"title":"8.1 配置结构","titles":["8. settings.json:权限与项目配置"]},"595":{"title":"8.2 典型场景","titles":["8. settings.json:权限与项目配置"]},"596":{"title":"8.3 settings.local.json:个人权限覆盖","titles":["8. settings.json:权限与项目配置"]},"597":{"title":"9. 结语","titles":[]},"598":{"title":"1. AI 与数学思维","titles":[]},"599":{"title":"2. 产品与商业","titles":[]},"600":{"title":"2.1 产品 Sense 与创造","titles":["2. 产品与商业"]},"601":{"title":"2.2 商业化","titles":["2. 产品与商业"]},"602":{"title":"3. 效率与效能","titles":[]},"603":{"title":"4. 学习与成长","titles":[]},"604":{"title":"5. 人文社科","titles":[]},"605":{"title":"6. 健康生活","titles":[]},"606":{"title":"1. 我们为什么需要读书?","titles":[]},"607":{"title":"2. 读书"三要"","titles":[]},"608":{"title":"第一“要”:完整地读,整本地读","titles":["2. 读书"三要""]},"609":{"title":"第二“要”:带着问题去读,构建知识树","titles":["2. 读书"三要""]},"610":{"title":"第三“要”:与人(或AI)讨论,检验理解的试金石","titles":["2. 读书"三要""]},"611":{"title":"3. 读书"三不要"","titles":[]},"612":{"title":"第一“不要”:不要怀揣哀怨心态,避免读书目的被异化","titles":["3. 读书"三不要""]},"613":{"title":"第二“不要”:不要玩物丧志,陷入对物理媒介的过度迷恋","titles":["3. 读书"三不要""]},"614":{"title":"第三“不要”:不要只读书不知现实,避免知识结构陷入“真空”","titles":["3. 读书"三不要""]},"615":{"title":"4. 让书籍成为连接自我与现实的桥梁","titles":[]},"616":{"title":"1. 打破“信息差”的系统性错觉","titles":[]},"617":{"title":"1.1 表面是你在筛选信息,实际是信息在筛选人","titles":["1. 打破“信息差”的系统性错觉"]},"618":{"title":"1.2 警惕算法构建的“信息茧房”","titles":["1. 打破“信息差”的系统性错觉"]},"619":{"title":"2. 信息泛滥与脑力带宽的消耗","titles":[]},"620":{"title":"2.1 从“追求差”到“对抗泛滥”","titles":["2. 信息泛滥与脑力带宽的消耗"]},"621":{"title":"2.2 无效信息是对算力的极大消耗","titles":["2. 信息泛滥与脑力带宽的消耗"]},"622":{"title":"3. 价值创造的核心:思考+执行,突破信息壁垒","titles":[]},"623":{"title":"4. 行动指南","titles":[]},"624":{"title":"4.1 信息筛选:果断做减法,锚定核心目标","titles":["4. 行动指南"]},"625":{"title":"4.2 信息解读:穿透表象,洞察未言之意","titles":["4. 行动指南"]},"626":{"title":"4.3 差异破局:向内求索,强化“思考+执行”","titles":["4. 行动指南"]},"627":{"title":"卡片盒笔记法","titles":[]},"628":{"title":"AI 增强型 Obsidian 卡片盒:LLM Wiki + Library 双轨制","titles":[]},"629":{"title":"输出驱动:从内化到输出","titles":[]},"630":{"title":"知识仓库目录划分与设计","titles":[]},"631":{"title":"数据如何流动","titles":[]},"632":{"title":"项目简介","titles":[]},"633":{"title":"四阶段流水线","titles":[]},"634":{"title":"三种消费模式","titles":[]},"635":{"title":"项目时间线","titles":[]},"636":{"title":"项目简介","titles":[]},"637":{"title":"解读案例","titles":[]},"638":{"title":"1. 项目概览","titles":[]},"639":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"640":{"title":"1.2 目标场景与典型 Case","titles":["1. 项目概览"]},"641":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"642":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"643":{"title":"1.5 项目规模","titles":["1. 项目概览"]},"644":{"title":"2. 整体架构设计 (Overall Architecture)","titles":[]},"645":{"title":"2.1 架构概述","titles":["2. 整体架构设计 (Overall Architecture)"]},"646":{"title":"2.2 整体架构图","titles":["2. 整体架构设计 (Overall Architecture)"]},"647":{"title":"2.3 目录结构","titles":["2. 整体架构设计 (Overall Architecture)"]},"648":{"title":"3. 模块依赖与调用关系","titles":[]},"649":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"650":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"651":{"title":"4. 核心模块详解","titles":[]},"652":{"title":"模块一:渲染器工厂系统 (Factory System)","titles":["4. 核心模块详解"]},"653":{"title":"模块二:MST Store 状态管理系统","titles":["4. 核心模块详解"]},"654":{"title":"模块三:动作与事件系统 (Action System)","titles":["4. 核心模块详解"]},"655":{"title":"模块四:表达式引擎 (amis-formula)","titles":["4. 核心模块详解"]},"656":{"title":"模块五:可视化编辑器系统 (Editor System)","titles":["4. 核心模块详解"]},"657":{"title":"5. 关键数据流程","titles":[]},"658":{"title":"场景说明","titles":["5. 关键数据流程"]},"659":{"title":"场景说明","titles":["5. 关键数据流程"]},"660":{"title":"6. 接口与契约规范","titles":["5. 关键数据流程"]},"661":{"title":"6.1 渲染器注册契约 (TypeScript)","titles":["5. 关键数据流程","6. 接口与契约规范"]},"662":{"title":"6.2 环境接口契约 (TypeScript)","titles":["5. 关键数据流程","6. 接口与契约规范"]},"663":{"title":"6.3 MST Store 契约 (TypeScript)","titles":["5. 关键数据流程","6. 接口与契约规范"]},"664":{"title":"7. 快速开始","titles":["5. 关键数据流程"]},"665":{"title":"7.1 环境要求","titles":["5. 关键数据流程","7. 快速开始"]},"666":{"title":"7.2 安装与运行","titles":["5. 关键数据流程","7. 快速开始"]},"667":{"title":"7.3 测试","titles":["5. 关键数据流程","7. 快速开始"]},"668":{"title":"7.4 典型用例","titles":["5. 关键数据流程","7. 快速开始"]},"669":{"title":"1. 项目概览","titles":[]},"670":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"671":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"672":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"673":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"674":{"title":"2. 整体架构设计","titles":[]},"675":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"676":{"title":"整体架构图","titles":["2. 整体架构设计"]},"677":{"title":"目录结构","titles":["2. 整体架构设计"]},"678":{"title":"3. 模块依赖与调用关系","titles":[]},"679":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"680":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"681":{"title":"4. 核心模块详解","titles":[]},"682":{"title":"模块一:Node(所有节点的抽象基类)","titles":["4. 核心模块详解"]},"683":{"title":"模块二:Shape(形状渲染基类)","titles":["4. 核心模块详解"]},"684":{"title":"模块三:Stage(舞台根节点与事件中枢)","titles":["4. 核心模块详解"]},"685":{"title":"模块四:Factory(属性系统工厂)","titles":["4. 核心模块详解"]},"686":{"title":"模块五:Animation + Tween(动画引擎)","titles":["4. 核心模块详解"]},"687":{"title":"5. 关键数据流程","titles":[]},"688":{"title":"场景一:用户点击一个 Shape 的完整事件流程","titles":["5. 关键数据流程"]},"689":{"title":"场景二:形状属性变更到屏幕渲染的完整流程","titles":["5. 关键数据流程"]},"690":{"title":"场景三:拖拽操作的完整事件链","titles":["5. 关键数据流程"]},"691":{"title":"6. 接口与契约规范","titles":[]},"692":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"693":{"title":"对外 API 契约(公共 API 导出)","titles":["6. 接口与契约规范"]},"694":{"title":"7. 快速开始","titles":[]},"695":{"title":"7.1 安装与运行","titles":["7. 快速开始"]},"696":{"title":"7.2 最简示例","titles":["7. 快速开始"]},"697":{"title":"7.3 构建命令","titles":["7. 快速开始"]},"698":{"title":"1. 项目概览","titles":[]},"699":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"700":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"701":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"702":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"703":{"title":"2. 整体架构设计","titles":[]},"704":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"705":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"706":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"707":{"title":"3. 模块依赖与调用关系","titles":[]},"708":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"709":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"710":{"title":"4. 核心模块详解","titles":[]},"711":{"title":"模块一:扩展系统 (Extension System)","titles":["4. 核心模块详解"]},"712":{"title":"模块二:调度管道 (Scheduler Pipeline)","titles":["4. 核心模块详解"]},"713":{"title":"模块三:数据管理系统 (Data System)","titles":["4. 核心模块详解"]},"714":{"title":"模块四:坐标系系统 (Coordinate System)","titles":["4. 核心模块详解"]},"715":{"title":"模块五:视觉编码系统 (Visual Encoding)","titles":["4. 核心模块详解"]},"716":{"title":"5. 关键数据流程","titles":[]},"717":{"title":"5.1 初始化与渲染完整流程","titles":["5. 关键数据流程"]},"718":{"title":"6. 接口与契约规范","titles":[]},"719":{"title":"6.1 核心内部模块契约 (TypeScript Interfaces)","titles":["6. 接口与契约规范"]},"720":{"title":"扩展安装器契约 (TypeScript Interface)","titles":["6. 接口与契约规范"]},"721":{"title":"8. 快速开始","titles":[]},"722":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"723":{"title":"8.2 开发模式","titles":["8. 快速开始"]},"724":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"725":{"title":"8.4 按需引入","titles":["8. 快速开始"]},"726":{"title":"8.5 构建发布","titles":["8. 快速开始"]},"727":{"title":"1. 项目概览","titles":[]},"728":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"729":{"title":"1.2 核心技术亮点","titles":["1. 项目概览"]},"730":{"title":"1.3 技术栈与选型对比","titles":["1. 项目概览"]},"731":{"title":"2. 整体架构设计","titles":[]},"732":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"733":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"734":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"735":{"title":"3. 模块依赖与调用关系","titles":[]},"736":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"737":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"738":{"title":"4. 核心模块详解","titles":[]},"739":{"title":"模块一:渲染器系统 (Renderer System)","titles":["4. 核心模块详解"]},"740":{"title":"模块二:场景图系统 (Scene Graph / Object3D)","titles":["4. 核心模块详解"]},"741":{"title":"模块三:TSL 节点着色系统 (Three.js Shading Language)","titles":["4. 核心模块详解"]},"742":{"title":"模块四:材质系统 (Material System)","titles":["4. 核心模块详解"]},"743":{"title":"模块五:动画系统 (Animation System)","titles":["4. 核心模块详解"]},"744":{"title":"5. 关键数据流程","titles":[]},"745":{"title":"场景一:WebGPU 渲染帧的完整生命周期","titles":["5. 关键数据流程"]},"746":{"title":"场景二:TSL 着色器编译流程","titles":["5. 关键数据流程"]},"747":{"title":"6. 接口与契约规范","titles":[]},"748":{"title":"6.1 核心内部模块契约 (TypeScript Interfaces)","titles":["6. 接口与契约规范"]},"749":{"title":"对外 API 契约 (OpenSpec 格式 — 公共类 API)","titles":["6. 接口与契约规范"]},"750":{"title":"8. 快速开始","titles":[]},"751":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"752":{"title":"8.2 安装与运行","titles":["8. 快速开始"]},"753":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"754":{"title":"1. 项目概览","titles":[]},"755":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"756":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"757":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"758":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"759":{"title":"2. 整体架构设计","titles":[]},"760":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"761":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"762":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"763":{"title":"3. 模块依赖与调用关系","titles":[]},"764":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"765":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"766":{"title":"4. 核心模块详解","titles":[]},"767":{"title":"模块一:AnimationManager - 动画生命周期管理器","titles":["4. 核心模块详解"]},"768":{"title":"模块二:Renderer 系统 - 渲染器策略层","titles":["4. 核心模块详解"]},"769":{"title":"模块三:ExpressionEngine - After Effects 表达式引擎","titles":["4. 核心模块详解"]},"770":{"title":"模块四:PropertyFactory - 动画属性与关键帧插值系统","titles":["4. 核心模块详解"]},"771":{"title":"模块五:ShapeModifiers - 形状变形修饰器系统","titles":["4. 核心模块详解"]},"772":{"title":"5. 关键数据流程","titles":[]},"773":{"title":"场景一:lottie.loadAnimation() 完整生命周期","titles":["5. 关键数据流程"]},"774":{"title":"场景二:表达式引擎求值流程","titles":["5. 关键数据流程"]},"775":{"title":"6. 接口与契约规范","titles":[]},"776":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"777":{"title":"6.2 对外 API 契约 (TypeScript - 与 index.d.ts 对齐)","titles":["6. 接口与契约规范"]},"778":{"title":"7. 构建系统与产物矩阵","titles":[]},"779":{"title":"8. 快速开始","titles":[]},"780":{"title":"8.1 环境配置","titles":["8. 快速开始"]},"781":{"title":"8.2 安装与运行","titles":["8. 快速开始"]},"782":{"title":"8.3 典型用例","titles":["8. 快速开始"]},"783":{"title":"1. 项目概览","titles":[]},"784":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"785":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"786":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"787":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"788":{"title":"2. 整体架构设计","titles":[]},"789":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"790":{"title":"2.2 整体架构图 (ASCII)","titles":["2. 整体架构设计"]},"791":{"title":"2.3 分层职责说明","titles":["2. 整体架构设计"]},"792":{"title":"2.4 完整目录树","titles":["2. 整体架构设计"]},"793":{"title":"3. 模块依赖与调用关系","titles":[]},"794":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"795":{"title":"逻辑说明","titles":["3. 模块依赖与调用关系","3.1 全局入口与核心路由"]},"796":{"title":"调用拓扑 (plainText)","titles":["3. 模块依赖与调用关系","3.1 全局入口与核心路由"]},"797":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"798":{"title":"4. 核心模块详解","titles":[]},"799":{"title":"4.1 浏览器控制模块 (src/browser/)","titles":["4. 核心模块详解"]},"800":{"title":"4.2 适配器注册与发现 (src/registry.ts + discovery.ts)","titles":["4. 核心模块详解"]},"801":{"title":"4.3 守护进程 (src/daemon.ts)","titles":["4. 核心模块详解"]},"802":{"title":"5. 关键数据流程","titles":[]},"803":{"title":"5.1 浏览器命令执行流程","titles":["5. 关键数据流程"]},"804":{"title":"5.2 网站适配器执行流程","titles":["5. 关键数据流程"]},"805":{"title":"6. 接口与契约规范","titles":[]},"806":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"807":{"title":"6.2 Daemon HTTP API (OpenSpec 格式)","titles":["6. 接口与契约规范"]},"808":{"title":"7. 快速开始","titles":[]},"809":{"title":"7.1 环境配置","titles":["7. 快速开始"]},"810":{"title":"7.2 安装与运行","titles":["7. 快速开始"]},"811":{"title":"7.3 典型用例","titles":["7. 快速开始"]},"812":{"title":"第一部分: 业务价值篇","titles":[]},"813":{"title":"项目定位","titles":["第一部分: 业务价值篇"]},"814":{"title":"解决的核心痛点","titles":["第一部分: 业务价值篇"]},"815":{"title":"技术亮点","titles":["第一部分: 业务价值篇"]},"816":{"title":"适用场景","titles":["第一部分: 业务价值篇"]},"817":{"title":"典型使用 Case","titles":["第一部分: 业务价值篇"]},"818":{"title":"Case 1: 基础 SSE 连接","titles":["第一部分: 业务价值篇","典型使用 Case"]},"819":{"title":"Case 2: 带认证和自定义请求","titles":["第一部分: 业务价值篇","典型使用 Case"]},"820":{"title":"Case 3: 自定义错误处理和重试","titles":["第一部分: 业务价值篇","典型使用 Case"]},"821":{"title":"技术栈分析","titles":["第一部分: 业务价值篇"]},"822":{"title":"选型决策分析","titles":["第一部分: 业务价值篇","技术栈分析"]},"823":{"title":"项目结构初览","titles":["第一部分: 业务价值篇"]},"824":{"title":"核心模块职责","titles":["第一部分: 业务价值篇","项目结构初览"]},"825":{"title":"依赖关系","titles":["第一部分: 业务价值篇"]},"826":{"title":"外部依赖","titles":["第一部分: 业务价值篇","依赖关系"]},"827":{"title":"内部依赖","titles":["第一部分: 业务价值篇","依赖关系"]},"828":{"title":"构建输出","titles":["第一部分: 业务价值篇"]},"829":{"title":"第二部分: 架构设计篇","titles":[]},"830":{"title":"系统整体架构","titles":["第二部分: 架构设计篇"]},"831":{"title":"核心模块设计","titles":["第二部分: 架构设计篇"]},"832":{"title":"1. fetch.ts - 主控制器模块","titles":["第二部分: 架构设计篇","核心模块设计"]},"833":{"title":"2. parse.ts - 事件流解析模块","titles":["第二部分: 架构设计篇","核心模块设计"]},"834":{"title":"核心数据流转时序","titles":["第二部分: 架构设计篇"]},"835":{"title":"正常消息接收流程","titles":["第二部分: 架构设计篇","核心数据流转时序"]},"836":{"title":"重试流程","titles":["第二部分: 架构设计篇","核心数据流转时序"]},"837":{"title":"页面可见性变化流程","titles":["第二部分: 架构设计篇","核心数据流转时序"]},"838":{"title":"接口契约定义","titles":["第二部分: 架构设计篇"]},"839":{"title":"公共 API","titles":["第二部分: 架构设计篇","接口契约定义"]},"840":{"title":"内部解析 API","titles":["第二部分: 架构设计篇","接口契约定义"]},"841":{"title":"1. 项目概览","titles":[]},"842":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"843":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"844":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"845":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"846":{"title":"2. 整体架构设计","titles":[]},"847":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"848":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"849":{"title":"2.3 完整目录结构","titles":["2. 整体架构设计"]},"850":{"title":"2.4 最重要的文件","titles":["2. 整体架构设计"]},"851":{"title":"2.5 核心设计模式速查表","titles":["2. 整体架构设计"]},"852":{"title":"3. 模块依赖与调用关系","titles":[]},"853":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"854":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"855":{"title":"4. 核心模块设计","titles":[]},"856":{"title":"4.1 text 生成核心 (generateText / streamText)","titles":["4. 核心模块设计"]},"857":{"title":"4.2 Provider 适配器模式","titles":["4. 核心模块设计"]},"858":{"title":"4.3 UI 消息流与框架集成(useChat / Chat)","titles":["4. 核心模块设计"]},"859":{"title":"4.4 Agent 与工作流(ToolLoopAgent / Workflow)","titles":["4. 核心模块设计"]},"860":{"title":"4.5 模型注册中心(Registry)","titles":["4. 核心模块设计"]},"861":{"title":"4.6 中间件系统","titles":["4. 核心模块设计"]},"862":{"title":"5. 关键数据流程","titles":[]},"863":{"title":"5.1 场景一:generateText 带工具调用的完整流程","titles":["5. 关键数据流程"]},"864":{"title":"5.2 streamText + useChat 前端流式对话","titles":["5. 关键数据流程"]},"865":{"title":"6. 接口与契约规范","titles":[]},"866":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"867":{"title":"6.2 公共 API 契约","titles":["6. 接口与契约规范"]},"868":{"title":"7. Provider 工具系统","titles":[]},"869":{"title":"8. 快速开始","titles":[]},"870":{"title":"8.1 环境要求","titles":["8. 快速开始"]},"871":{"title":"8.2 安装与运行","titles":["8. 快速开始"]},"872":{"title":"8.3 关键目录","titles":["8. 快速开始"]},"873":{"title":"1. 项目概览","titles":[]},"874":{"title":"1.1 项目定位与核心价值","titles":["1. 项目概览"]},"875":{"title":"1.2 目标用户与使用场景","titles":["1. 项目概览"]},"876":{"title":"1.3 核心技术亮点","titles":["1. 项目概览"]},"877":{"title":"1.4 技术栈与选型对比","titles":["1. 项目概览"]},"878":{"title":"2. 整体架构设计","titles":[]},"879":{"title":"2.1 架构概述","titles":["2. 整体架构设计"]},"880":{"title":"2.2 整体架构图","titles":["2. 整体架构设计"]},"881":{"title":"2.3 目录结构","titles":["2. 整体架构设计"]},"882":{"title":"3. 模块依赖与调用关系","titles":[]},"883":{"title":"3.1 全局入口与核心路由","titles":["3. 模块依赖与调用关系"]},"884":{"title":"3.2 核心业务实体与关联","titles":["3. 模块依赖与调用关系"]},"885":{"title":"4. 核心模块详解","titles":[]},"886":{"title":"模块一:Hook 引导系统 (Hook Bootstrap System)","titles":["4. 核心模块详解"]},"887":{"title":"模块二:using-superpowers 引导技能","titles":["4. 核心模块详解"]},"888":{"title":"模块三:brainstorming 头脑风暴技能","titles":["4. 核心模块详解"]},"889":{"title":"模块四:subagent-driven-development 子Agent驱动开发","titles":["4. 核心模块详解"]},"890":{"title":"模块五:test-driven-development TDD 技能","titles":["4. 核心模块详解"]},"891":{"title":"5. 关键数据流程","titles":[]},"892":{"title":"场景一:完整开发工作流 (从需求到合并)","titles":["5. 关键数据流程"]},"893":{"title":"场景二:Bug 修复调试流程","titles":["5. 关键数据流程"]},"894":{"title":"6. 接口与契约规范","titles":[]},"895":{"title":"6.1 核心内部模块契约 (TypeScript)","titles":["6. 接口与契约规范"]},"896":{"title":"6.2 技能间调用契约","titles":["6. 接口与契约规范"]},"897":{"title":"7. 快速开始","titles":[]},"898":{"title":"7.1 环境要求","titles":["7. 快速开始"]},"899":{"title":"7.2 安装","titles":["7. 快速开始"]},"900":{"title":"7.3 典型工作流","titles":["7. 快速开始"]},"901":{"title":"我是谁","titles":[]},"902":{"title":"我的认知迭代","titles":[]},"903":{"title":"关于本站","titles":[]},"904":{"title":"❤️ 致谢","titles":[]},"905":{"title":"连接与交流","titles":[]},"906":{"title":"1. 写在前面","titles":[]},"907":{"title":"2. 重读《要事第一》","titles":[]},"908":{"title":"3. 基于系统与模型思维构建洞察力模型","titles":[]},"909":{"title":"3.1. 增强回路小例子 🌰","titles":["3. 基于系统与模型思维构建洞察力模型"]},"910":{"title":"3.2. 调节回路","titles":["3. 基于系统与模型思维构建洞察力模型"]},"911":{"title":"4. 重读数学的乐趣","titles":[]},"912":{"title":"4.1. 怎么突然又学起数学了?","titles":["4. 重读数学的乐趣"]},"913":{"title":"4.2. 重新发现了有趣的数学思维","titles":["4. 重读数学的乐趣"]},"914":{"title":"分解与分类、排列与组合","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"915":{"title":"多样性红利","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"916":{"title":"这个世界是稀疏的","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"917":{"title":"概率的世界观","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"918":{"title":"AI 教会了我们哪些?","titles":["4. 重读数学的乐趣","4.2. 重新发现了有趣的数学思维"]},"919":{"title":"5. 写在最后","titles":[]},"920":{"title":"1. 引言:主流 CSS 工程化方案有哪些?","titles":[]},"921":{"title":"2. CSS 预处理器","titles":[]},"922":{"title":"3. CSS-in-JS","titles":[]},"923":{"title":"4. CSS Modules","titles":[]},"924":{"title":"5. Scoped CSS","titles":[]},"925":{"title":"6. 原子化 CSS(Utility-First / Atomic CSS)","titles":[]},"926":{"title":"为什么 AI 应用产品都在拥抱 Tailwind ?","titles":["6. 原子化 CSS(Utility-First / Atomic CSS)"]},"927":{"title":"7. 变体驱动的原子化 (Variants-Driven Atomic CSS):CVA + Tailwind","titles":[]},"928":{"title":"8. 实践指南:如何构建可扩展的样式工程化体系?","titles":[]},"929":{"title":"8.1 第一层:架构的根基 —— CSS 变量、设计规范与 Design Token","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"930":{"title":"8.2 第二层:生产力基石与标准协议 —— 占比 90% 的主力构建层","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"931":{"title":"8.3 第三层:兜底封装与高级逻辑 —— 占比 10% 的边界“逃生舱”","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"932":{"title":"8.4 底部构建环境:PostCSS 编译管道 (Pipeline)","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"933":{"title":"8.5 架构红线 —— 一些必须规避的反模式","titles":["8. 实践指南:如何构建可扩展的样式工程化体系?"]},"934":{"title":"9. 结语:从手工精雕到 AI 增强的架构跃迁","titles":[]},"935":{"title":"写在前面","titles":[]},"936":{"title":"漫谈话题","titles":[]},"937":{"title":"漫谈健康","titles":[]},"938":{"title":"健康危机","titles":["漫谈健康"]},"939":{"title":"健康知识学习","titles":["漫谈健康"]},"940":{"title":"1、向有专业或有经验的人咨询","titles":["漫谈健康","健康知识学习"]},"941":{"title":"2、学习健康标准和知识","titles":["漫谈健康","健康知识学习"]},"942":{"title":"3、健康实践","titles":["漫谈健康","健康知识学习"]},"943":{"title":"4、健康小结","titles":["漫谈健康","健康知识学习"]},"944":{"title":"漫谈读书与学习","titles":[]},"945":{"title":"1、读书的目的","titles":["漫谈读书与学习"]},"946":{"title":"2、读书的方式","titles":["漫谈读书与学习"]},"947":{"title":"3、读书工具选择与实践","titles":["漫谈读书与学习"]},"948":{"title":"4、小结","titles":["漫谈读书与学习"]},"949":{"title":"漫谈时间管理","titles":[]},"950":{"title":"1、时间不够用问题","titles":["漫谈时间管理"]},"951":{"title":"2、分阶段调整时间管理","titles":["漫谈时间管理"]},"952":{"title":"第一阶段:疯狂做减法,专注重要的事","titles":["漫谈时间管理","2、分阶段调整时间管理"]},"953":{"title":"第二阶段:升级清单管理","titles":["漫谈时间管理","2、分阶段调整时间管理"]},"954":{"title":"第三阶段:刻意统计并调整时间","titles":["漫谈时间管理","2、分阶段调整时间管理"]},"955":{"title":"漫谈混合工作制","titles":[]},"956":{"title":"1、适应混合工作制","titles":["漫谈混合工作制"]},"957":{"title":"2、延伸思考混合工作制","titles":["漫谈混合工作制"]},"958":{"title":"写在最后","titles":[]},"959":{"title":"写在前面","titles":[]},"960":{"title":"1、前期准备","titles":[]},"961":{"title":"2、第一阶段","titles":[]},"962":{"title":"3、第二阶段","titles":[]},"963":{"title":"4、第三阶段","titles":[]},"964":{"title":"5、第四阶段(2021.09)","titles":[]},"965":{"title":"结尾","titles":[]}},"dirtCount":0,"index":[["估计未必适合每一个人",{"2":{"965":1}}],["卖一部分基金还是可以消费橄榄油的",{"2":{"964":1}}],["橄榄油的具体效用这里不做介绍",{"2":{"964":1}}],["摄入量",{"2":{"964":1}}],["木耳",{"2":{"963":1}}],["木偶",{"2":{"421":1}}],["黄瓜",{"2":{"963":1}}],["青菜",{"2":{"963":1}}],["虾仁等食材做一道菜或汤",{"2":{"963":1}}],["巴沙鱼片",{"2":{"963":1}}],["胡萝卜",{"2":{"963":1}}],["胡搅蛮缠",{"2":{"610":1}}],["扇贝肉",{"2":{"963":1}}],["扇形",{"2":{"677":1}}],["鱼",{"2":{"963":1}}],["豆腐",{"2":{"963":1}}],["豆包",{"2":{"512":3,"522":1}}],["🥗",{"2":{"963":1}}],["饥饿时转移注意力",{"2":{"962":1}}],["米饭改为减半",{"2":{"962":1}}],["玉米等食材搭配做一道简版轻食",{"2":{"963":1}}],["玉米",{"2":{"962":1,"963":2}}],["玉骨",{"2":{"507":1}}],["玉骨冰肌澈",{"2":{"507":2}}],["骑行",{"2":{"961":1}}],["遛弯1个小时",{"2":{"961":1}}],["期间最大的困难是新习惯的建立比较难",{"2":{"961":1}}],["期间虽然经历了比疫情放开后大部人转阳痛苦且印象深刻多倍的事情",{"2":{"938":1}}],["居家健身器材锻炼每周一到两次",{"2":{"961":1}}],["居家办公时要强调效果和效率",{"2":{"956":1}}],["晚饭尝试",{"2":{"963":1}}],["晚饭正常吃",{"2":{"959":1}}],["晚餐",{"2":{"961":1,"963":1}}],["荤菜",{"2":{"961":1}}],["午餐和晚餐不做大改变",{"2":{"962":1}}],["午餐",{"2":{"961":1,"963":1}}],["午饭少吃点",{"2":{"959":1}}],["燕麦",{"2":{"961":1,"962":1,"963":3}}],["鸡蛋等食材做一到两道家常菜",{"2":{"963":1}}],["鸡蛋羹",{"2":{"963":2}}],["鸡蛋",{"2":{"961":1,"962":1,"963":1}}],["俯卧撑支架",{"2":{"960":1}}],["哑铃",{"2":{"960":1}}],["瑜伽垫",{"2":{"960":1}}],["蛋白质等指标",{"2":{"960":1}}],["肌肉占比",{"2":{"964":1}}],["肌肉与脂肪指标数据不稳",{"2":{"962":1}}],["肌肉",{"2":{"960":1,"964":1}}],["肌肉记忆",{"2":{"531":1}}],["脂肪",{"2":{"960":1}}],["沁园春",{"2":{"959":1}}],["毛爷爷的思想和韬略真的足够学",{"2":{"959":1}}],["榜样的影响都有了",{"2":{"959":1}}],["榜样的影响",{"2":{"959":1}}],["齐家达到某种程度的尝试",{"2":{"959":1}}],["遇事火急火燎的自己逐渐得到了改善",{"2":{"959":1}}],["遇到复杂的业务定制样式",{"2":{"934":1}}],["遇到问题",{"2":{"908":1}}],["遇到疑问或不同意见就会随时打断",{"2":{"610":1}}],["遇到困难时又如何转换视角",{"2":{"608":1}}],["遇到需要写报告或做调研的场景",{"2":{"518":1}}],["遇到冲突时",{"2":{"451":1}}],["遇到这种情况该怎么办",{"2":{"387":1}}],["遇到网络波动等错误也可以复用退避等待逻辑",{"2":{"149":1}}],["遇到极其耗时的计算或查库操作",{"2":{"88":1}}],["走路只是维持正常的有氧运动",{"2":{"964":1}}],["走出校门进入社会后",{"2":{"959":1}}],["走向工作岗位后",{"2":{"957":1}}],["走向了",{"2":{"906":1}}],["走向",{"0":{"540":1},"1":{"541":1,"542":1,"543":1},"2":{"525":1}}],["佛道魔",{"2":{"958":1}}],["倒不是因为小说阐述了",{"2":{"958":1}}],["诛仙",{"2":{"958":2}}],["西蓝花",{"2":{"963":1}}],["西方还原论的部分应用",{"2":{"958":1}}],["西西弗斯式",{"2":{"553":1}}],["挺内耗的",{"2":{"958":1}}],["吐槽一下自己的改变",{"2":{"957":1}}],["吐字",{"2":{"136":1}}],["聊聊工作与生活",{"2":{"957":1}}],["聊天状态管理",{"2":{"866":1}}],["聊天助手",{"2":{"843":1}}],["聊天机器人",{"2":{"420":1}}],["聊天记录或关系型数据库中",{"2":{"417":1}}],["聊天插件",{"2":{"414":1}}],["聊天应用的提示词",{"2":{"489":1}}],["聊天应用",{"2":{"124":1,"490":1}}],["聊天",{"2":{"114":1,"850":1,"867":1}}],["遥想当年学生时代",{"2":{"957":1}}],["废话不多说",{"2":{"954":1}}],["废弃",{"2":{"647":2,"706":1,"734":1}}],["购物等事务",{"2":{"953":1}}],["购物车子应用",{"2":{"290":1}}],["购物车",{"2":{"30":1,"31":1,"92":1}}],["哈佛时间管理课",{"2":{"953":1}}],["捉急状态",{"2":{"952":1}}],["丢弃不靠谱的严格时间表",{"2":{"952":1}}],["吃早饭",{"2":{"952":1}}],["锻炼身体",{"2":{"952":1}}],["锻炼自己的洞察力了",{"2":{"908":1}}],["洗漱",{"2":{"952":1}}],["疯狂做减法",{"0":{"952":1}}],["躺平和摆烂是一种方式",{"2":{"950":1}}],["刚好还有个小爱好",{"2":{"959":1}}],["刚好在疫情这三年",{"2":{"950":1}}],["刚提交任务便遭遇了",{"2":{"139":1}}],["遍访了全天下有相关经验的人",{"2":{"950":1}}],["遍历关键帧数组",{"2":{"770":1}}],["遍历节点图",{"2":{"741":1}}],["遍历",{"2":{"655":1,"686":1,"748":1}}],["遍历所有字节块",{"2":{"168":1}}],["遍历所有完整行",{"2":{"166":1}}],["遍历已有的",{"2":{"70":1}}],["职业发展学习",{"2":{"947":1}}],["职责定位",{"2":{"928":3}}],["职责隔离与并行协作机制",{"2":{"467":1,"468":1}}],["职责拆分明确",{"2":{"327":1}}],["职责说明",{"2":{"279":1}}],["职责清晰",{"2":{"277":1}}],["职责",{"2":{"197":1,"470":1,"739":1,"791":1,"824":1,"832":1,"833":1,"928":1}}],["职责边界",{"2":{"71":1}}],["蜗牛读书等",{"2":{"947":1}}],["纸质书",{"2":{"947":4}}],["穷查理宝典",{"2":{"945":1}}],["穷尽性检查",{"0":{"232":1}}],["纳瓦尔宝典",{"2":{"945":1}}],["迷茫",{"2":{"945":1}}],["吧",{"2":{"945":1}}],["戴明也成为了比较著名的人物",{"2":{"943":1}}],["据说他十分热爱统计学",{"2":{"943":1}}],["跟老朋友们也强烈推荐过",{"2":{"943":1}}],["跟随鼠标显示数值",{"2":{"706":1}}],["套路",{"2":{"946":1,"958":1}}],["套路来自",{"2":{"943":1}}],["套壳",{"2":{"351":1}}],["践行",{"2":{"943":1}}],["纠正实操过程中的问题",{"2":{"942":1}}],["侧重",{"2":{"942":1}}],["侧边栏折叠",{"2":{"97":1}}],["侧边栏",{"2":{"87":1,"97":1}}],["侧边栏和骨架屏",{"2":{"86":1}}],["巩固阶段",{"2":{"942":1}}],["斤下降",{"2":{"962":1}}],["斤之间跳跃",{"2":{"961":1}}],["斤左右的下降",{"2":{"961":1}}],["斤",{"2":{"942":2,"959":1,"961":1,"963":2,"964":2}}],["迈开腿",{"2":{"942":2,"961":1}}],["迈向更复杂的业务编排",{"2":{"491":1}}],["迈向更可控的",{"0":{"476":1}}],["迈向",{"0":{"433":1}}],["迈向高度自主",{"0":{"419":1}}],["迈向高度自主的关键",{"2":{"410":1}}],["载知识之车而寓道德之舍也",{"2":{"941":1,"959":1}}],["宁可不合群",{"2":{"941":1}}],["宁愿使用",{"2":{"124":1}}],["循序渐进",{"2":{"941":1}}],["循环式品质管理",{"2":{"943":1}}],["循环播放的完整流程",{"2":{"773":1}}],["循环模式等",{"2":{"765":1}}],["循环驱动",{"2":{"761":1}}],["循环每帧调用",{"2":{"686":1}}],["循环依赖",{"0":{"315":1}}],["循环读取",{"2":{"168":1}}],["循环读取流数据",{"2":{"166":1}}],["循环进行内部检查",{"2":{"152":1}}],["循环持续检查",{"2":{"152":1}}],["循环",{"2":{"151":1,"409":1,"478":1,"672":1,"677":1,"680":1,"686":1,"761":1,"881":1,"890":2}}],["循环和",{"2":{"149":1}}],["道德良好",{"2":{"941":1}}],["皇帝内经",{"2":{"941":1}}],["康复训练小技巧",{"2":{"940":1}}],["医生是经常传授病人一些健康知识的专业人员",{"2":{"940":1}}],["医护是长年累月协助病人康复训练的专业人员",{"2":{"940":1}}],["医护",{"2":{"940":1}}],["医疗等数据时",{"2":{"523":1}}],["医疗场景必须考虑",{"2":{"519":1}}],["休养康复",{"2":{"938":1}}],["懊悔等悲观情绪都没有任何用处",{"2":{"938":1}}],["熬几年也就要坏事了",{"2":{"938":1}}],["熬十天就累了",{"2":{"938":1}}],["仗着无知挥霍身体",{"2":{"938":1}}],["毕业季让即将出国的女神写了一幅字",{"2":{"959":1}}],["毕业时选择的工作自然而然地成为了大学兴趣的延续",{"2":{"938":1}}],["毕竟",{"2":{"144":1}}],["毕竟静态版本是整个项目的工程基线",{"2":{"3":1}}],["间接原因",{"2":{"935":1}}],["间距工具类",{"2":{"647":1}}],["间距",{"2":{"338":1,"928":1,"930":1,"934":1}}],["幸亏当初学习培养财商",{"2":{"964":1}}],["幸亏当时没有在课上睡觉",{"2":{"909":1}}],["幸运的是从中也学到了一些东西",{"2":{"935":1}}],["诸如",{"2":{"934":1}}],["封闭的枚举上下文",{"2":{"934":1}}],["封装所有公共方法",{"2":{"761":1}}],["封装具体",{"2":{"739":1}}],["封装底层",{"2":{"732":1}}],["封装重复操作",{"2":{"597":1}}],["封装一套流程",{"2":{"590":1}}],["封装一段指令",{"2":{"590":1}}],["封装为",{"2":{"583":3}}],["封装为format",{"2":{"188":1}}],["封装可复用的工作流",{"2":{"570":1}}],["封装成一个",{"2":{"437":1}}],["封装创建逻辑",{"2":{"278":1}}],["封装数据访问逻辑",{"2":{"278":1}}],["封装核心业务逻辑",{"2":{"275":1}}],["封装业务规则与流程",{"2":{"274":1}}],["封装的内容",{"2":{"583":1}}],["封装的",{"2":{"178":1}}],["封装",{"0":{"489":1},"2":{"107":1,"197":1,"419":1,"677":1,"733":1,"734":1,"737":1,"792":1,"851":1,"858":1}}],["封装领域",{"0":{"99":1},"2":{"99":1}}],["史诗级增强",{"2":{"934":1}}],["片段丢进",{"2":{"934":1}}],["片段类型",{"2":{"777":1}}],["滥用",{"2":{"933":1}}],["症状",{"2":{"933":1}}],["稍有不慎就会导致项目变得比原来更难维护",{"2":{"933":1}}],["稍微发生变化就带来较大误差",{"2":{"915":1}}],["兜底类优雅拼装",{"2":{"931":1}}],["兜底封装与高级逻辑",{"0":{"931":1},"2":{"928":1}}],["逃生舱",{"0":{"931":1},"2":{"931":1,"934":1}}],["逃离",{"0":{"359":1}}],["免去了在",{"2":{"930":1}}],["免费可用",{"2":{"564":1}}],["免费模型",{"2":{"523":1}}],["免费套餐慷慨",{"2":{"523":1}}],["免费套餐额度慷慨",{"2":{"521":1}}],["免费额度",{"2":{"523":2,"565":2,"568":1}}],["免费额度大",{"2":{"521":1}}],["免费额度慷慨",{"2":{"521":1}}],["免费额度更大",{"2":{"345":1}}],["免费的静态网站托管服务",{"2":{"345":1}}],["免费的",{"2":{"344":1}}],["免费托管方案丰富",{"2":{"32":1}}],["免费版足够个人博客使用",{"2":{"23":1}}],["免费无广告",{"2":{"19":1}}],["免费",{"2":{"19":1,"523":1,"565":1,"940":1}}],["免费入门",{"2":{"19":1}}],["哲学",{"2":{"928":1}}],["局部增强利器",{"2":{"931":1}}],["局部逃生舱",{"2":{"928":1}}],["局限性",{"2":{"921":1,"922":1,"924":1,"925":1,"927":1}}],["局限性与妥协",{"2":{"342":1}}],["局限",{"2":{"119":1,"124":1}}],["承担",{"2":{"928":2}}],["承载动画的所有状态",{"2":{"765":1}}],["承载高并发",{"2":{"344":2}}],["🏆",{"2":{"928":3}}],["🌰",{"0":{"909":1}}],["徒增模板语法噪音",{"2":{"928":1}}],["银弹",{"2":{"928":1}}],["良好",{"2":{"928":2}}],["良好的命名是最好的文档",{"2":{"330":1}}],["干掉紧急不重要的事务有点过于暴力",{"2":{"952":1}}],["干净得不可思议",{"2":{"927":1}}],["干扰调试流程",{"2":{"217":1}}],["契合",{"2":{"926":1}}],["契约交互",{"2":{"317":1}}],["契约验证",{"2":{"3":1}}],["契约应绝对最小化",{"2":{"2":1}}],["契约",{"0":{"663":1,"693":1,"749":1,"777":1,"867":1},"2":{"2":1,"10":1,"11":1,"110":1,"336":1,"661":1,"762":1,"777":1}}],["僵尸样式",{"2":{"926":1}}],["僵尸粉",{"2":{"379":1}}],["暖色调形成与品牌色的视觉对比",{"2":{"925":1}}],["左右",{"2":{"925":1}}],["左手用",{"2":{"553":1}}],["绞尽脑汁起类名的烦恼",{"2":{"925":1}}],["穿透麻烦",{"2":{"924":1}}],["穿透表象",{"0":{"625":1},"2":{"604":1}}],["偷偷",{"2":{"924":1}}],["\\t",{"2":{"923":1}}],["肯定存在不足之处",{"2":{"919":1}}],["顺便聊一聊思变",{"2":{"958":1}}],["顺便交代下",{"2":{"919":1}}],["顺应媒介演进的效率趋势",{"2":{"613":1}}],["赢的概率远远比庄家少",{"2":{"917":1}}],["赢家通吃",{"2":{"386":1}}],["玩得次数相对少太多",{"2":{"917":1}}],["玩物丧志",{"2":{"613":1}}],["宋城这个大庄家是活动举办方",{"2":{"917":1}}],["庄家赢了就直接赢走下注的铜板",{"2":{"917":1}}],["拿来借鉴也未必能起到多少效果",{"2":{"950":1}}],["拿着手里的铜板选择押大或押小",{"2":{"917":1}}],["拿到最新数据后",{"2":{"97":1}}],["碰碰运气",{"2":{"917":1}}],["碰到新环境就会各种不适应",{"2":{"915":1}}],["赌钱",{"2":{"917":3}}],["游刃有余",{"2":{"959":1}}],["游玩了一下",{"2":{"917":1}}],["游戏开发者",{"2":{"671":1,"728":1}}],["游戏",{"2":{"128":1,"756":1}}],["杭州宋城",{"2":{"917":1}}],["稀疏无处不在",{"2":{"916":1}}],["稀缺的是提出绝佳问题的能力",{"2":{"358":1}}],["阐述了一个结论",{"2":{"916":1}}],["傅立叶在",{"2":{"916":1}}],["病友是那些与自身有着相同失误的人",{"2":{"940":1}}],["病友等以聊天的方式咨询",{"2":{"940":1}}],["病态方程组",{"2":{"915":1}}],["病菌与钢铁",{"2":{"604":1}}],["求解方程组的过程就是整合多个角度的观察结果",{"2":{"915":1}}],["求值和上下文模拟系统",{"2":{"769":1}}],["求值",{"2":{"762":1,"769":1}}],["求值器",{"2":{"646":1,"655":1}}],["他当年在武汉大学读书时真的将这些应用得淋漓尽致",{"2":{"914":1}}],["他们之间有增强关系吗",{"2":{"908":1}}],["他们的关注点会从书本内容彻底转移到别人的眼光上",{"2":{"612":1}}],["他们的核心思路是让",{"2":{"439":1}}],["他们可不会把我当",{"2":{"610":1}}],["他们如何一步步推导出结论",{"2":{"608":1}}],["他们不仅向外输出模型",{"2":{"525":1}}],["他们用",{"2":{"439":1}}],["他们把资金花在维护老客户和提升产品体验上",{"2":{"379":1}}],["他们首先是某个社区的深度参与者和",{"2":{"377":1}}],["他们会在你意想不到的地方卡住",{"2":{"366":1}}],["刨除后来的光环不讲",{"2":{"914":1}}],["雷军",{"2":{"914":1}}],["雷达坐标系",{"2":{"706":1}}],["雷达坐标系组件",{"2":{"706":1}}],["雷达图",{"2":{"706":1}}],["雷达",{"2":{"701":1}}],["式事务管理",{"2":{"914":1}}],["式的操作下",{"2":{"952":1}}],["式的被动驱动",{"2":{"603":1}}],["式的认知防护",{"2":{"602":1}}],["见识启蒙",{"2":{"959":1}}],["见缝插针",{"2":{"914":1}}],["见天地",{"2":{"397":1}}],["靠前一批的注册者",{"2":{"912":1}}],["量化分析等兴趣的加强",{"2":{"912":1}}],["量化提取",{"2":{"475":1}}],["贝叶斯等概率理论应用到日常工作与生活中",{"2":{"912":1}}],["贝塞尔",{"2":{"770":1}}],["贝塞尔缓动",{"2":{"770":1}}],["贝塞尔缓动函数计算",{"2":{"762":1}}],["贝塞尔工具函数",{"2":{"762":1}}],["贝塞尔曲线长度池",{"2":{"762":1}}],["贝塞尔曲线",{"2":{"677":1,"679":1}}],["贝塞尔曲线计算",{"2":{"677":1}}],["狂卷",{"2":{"910":1}}],["乱",{"2":{"908":1}}],["疫情结束后也可能会继续尝试下去",{"2":{"957":1}}],["疫情总会过去的",{"2":{"955":1}}],["疫情只是更显象化了这种方式",{"2":{"955":1}}],["疫情后又翻了下",{"2":{"943":1}}],["疫情后的第一年向外体验",{"2":{"919":1}}],["疫情期间",{"2":{"935":1}}],["疫情期间从",{"2":{"908":1}}],["疫情这三年向内思变的复盘总结基本梳理完成了",{"2":{"958":1}}],["疫情这三年",{"2":{"935":1}}],["疫情已经由放开状态继续演变为过去式状态",{"2":{"906":1}}],["鉴于笔者统计分析的意识已经建立起来",{"2":{"954":1}}],["鉴于笔者看了一些时间管理相关的书",{"2":{"953":1}}],["鉴于笔者在大学阶段自由学习与探索的勇气可嘉",{"2":{"938":1}}],["鉴于笔者没有过多思考要总结哪些东西",{"2":{"935":1}}],["鉴于笔者个人的视角也有一定的局限性",{"2":{"907":1}}],["鉴于数学功底有限",{"2":{"919":1}}],["鉴于许多人对数学有着又爱又恨的恐惧心理",{"2":{"911":1}}],["鉴权逻辑",{"2":{"143":1}}],["漫谈混合工作制",{"0":{"955":1},"1":{"956":1,"957":1}}],["漫谈时间管理",{"0":{"949":1},"1":{"950":1,"951":1,"952":1,"953":1,"954":1}}],["漫谈读书与学习",{"0":{"944":1},"1":{"945":1,"946":1,"947":1,"948":1}}],["漫谈健康",{"0":{"937":1},"1":{"938":1,"939":1,"940":1,"941":1,"942":1,"943":1}}],["漫谈话题",{"0":{"936":1}}],["漫谈疫情这三年向内思变",{"2":{"935":1}}],["漫谈一下疫情后的向外体验",{"2":{"906":1}}],["漫反射",{"2":{"734":1}}],["❤️",{"0":{"904":1}}],["辩论",{"2":{"903":1}}],["软性的思维模型与产品洞察",{"2":{"903":1}}],["软件基金会的顶级开源项目",{"2":{"699":1}}],["软件工程师平台",{"2":{"567":1}}],["软件工程师",{"2":{"567":1}}],["软件工程正经历一场权力的交接",{"2":{"530":1}}],["软件工程的历史",{"2":{"525":1}}],["软件工程的正式到来",{"2":{"491":1}}],["软件或项目管理平台",{"2":{"439":1}}],["软件的形态正在从",{"2":{"420":1}}],["软件的核心是业务领域",{"2":{"277":1}}],["软件开发",{"2":{"414":1}}],["软件设计紧密围绕业务需求",{"2":{"283":1}}],["扎实的工程化能力就是护城河",{"2":{"902":1}}],["扎根现实",{"2":{"615":1}}],["摸索",{"2":{"901":1}}],["摸着石头过河",{"2":{"424":1}}],["浪潮涌现以来",{"2":{"901":1}}],["浪潮下",{"2":{"348":1}}],["呈现合并选项",{"2":{"900":1}}],["删除长时间没有被迁移且渐进明细到日常清单的事务",{"2":{"953":1}}],["删除意味着删除",{"2":{"890":1}}],["删除",{"2":{"890":1}}],["删减了用户",{"2":{"373":1}}],["删减",{"2":{"373":1}}],["违规惩罚",{"2":{"890":1}}],["澄清问题",{"2":{"888":1}}],["苏格拉底式提问",{"2":{"888":1}}],["塑造",{"2":{"887":1}}],["钩子",{"2":{"884":1}}],["钩子触发",{"2":{"142":1}}],["纵然中间有一些偏差或挫折",{"2":{"965":1}}],["纵观前文",{"2":{"934":1}}],["纵观历史",{"2":{"613":1}}],["纵深防御修复策略",{"2":{"881":1}}],["铁律",{"2":{"881":1,"890":1}}],["纪律",{"2":{"881":1,"890":1}}],["纪伯伦",{"2":{"505":2}}],["拦截流式调用",{"2":{"861":1}}],["拦截非流式调用",{"2":{"861":1}}],["拦截器",{"2":{"275":2}}],["惰性执行",{"2":{"850":1}}],["惰性流式执行",{"2":{"844":1}}],["贡献者行为守则",{"2":{"881":1}}],["贡献者",{"2":{"875":1}}],["贡献者指南",{"2":{"849":1}}],["贡献指南",{"2":{"706":1,"823":1}}],["↘",{"2":{"827":1}}],["错开大众上班高峰时间",{"2":{"952":1}}],["错过",{"2":{"801":1}}],["错误纠正",{"2":{"959":2}}],["错误变更",{"2":{"858":1}}],["错误基类",{"2":{"848":1}}],["错误分类处理",{"2":{"830":1}}],["错误定义",{"2":{"792":1}}],["错误定义与处理",{"2":{"792":1}}],["错误信息",{"2":{"663":1}}],["错误响应必须包含机器可读的错误码",{"2":{"576":1}}],["错误状态码",{"2":{"342":1}}],["错误状态管理",{"2":{"342":1}}],["错误路径和成功路径一样",{"2":{"246":1}}],["错误思路",{"2":{"199":1}}],["错误回调",{"2":{"175":1}}],["错误回滚",{"2":{"100":1}}],["错误处理能力有限",{"2":{"814":1}}],["错误处理风格",{"2":{"572":1}}],["错误处理",{"2":{"167":1,"274":1,"291":1,"432":1,"591":1,"832":1}}],["错误",{"2":{"74":1,"147":1,"449":1}}],["攻击",{"2":{"801":1}}],["攻击面极小",{"2":{"15":1}}],["守护进程是",{"2":{"801":1}}],["守护进程",{"0":{"801":1}}],["守卫",{"2":{"275":2}}],["扫描所有",{"2":{"925":1}}],["扫描已安装插件",{"2":{"800":1}}],["扫描目录下的适配器",{"2":{"800":1}}],["扫描字符流",{"2":{"655":1}}],["归一化后注册",{"2":{"800":1}}],["归档",{"2":{"515":1}}],["┌─────▼─────────────────────────────────┐",{"2":{"833":1}}],["┌─────▼─────┐",{"2":{"800":1}}],["┌──────▼──────┐",{"2":{"799":1,"800":1}}],["┌───────▼───────┐",{"2":{"799":1}}],["┌────────▼─────────┐",{"2":{"799":1}}],["┌─────────▼──────────┐",{"2":{"799":1}}],["┌─────────▼─────────┐",{"2":{"790":1}}],["┌───────────┐",{"2":{"833":1}}],["┌────────────▼─────────────┐",{"2":{"790":1}}],["┌─────────────┐",{"2":{"799":2}}],["┌─────────────▼─────────────┐",{"2":{"790":1}}],["┌──────────────▼───────────────────┐",{"2":{"833":2}}],["┌──────────────▼─────────────────────────┐",{"2":{"833":1}}],["┌──────────────▼─────────────────────────▼───────────────────────────────────┐",{"2":{"790":1}}],["┌───────────────┐",{"2":{"832":1,"833":3}}],["┌─────────────────▼─────────────────────┐",{"2":{"833":1}}],["┌───────────────────┼───────────────────┐",{"2":{"832":1}}],["┌────────────────────┼────────────────────┐",{"2":{"800":1}}],["┌─────────────────────────┐",{"2":{"790":2,"830":3}}],["┌─────────────────────────┐│",{"2":{"790":2}}],["┌──────────────────────────────────┐",{"2":{"833":1}}],["┌──────────────────────────────────────┼──────────────────────────────────────┐",{"2":{"830":1}}],["┌───────────────────────────────────────────────────────┐",{"2":{"830":2}}],["┌─────────────────────────────────────────────────────────────────┐",{"2":{"833":1}}],["┌─────────────────────────────────────────────────────────────────────┐│",{"2":{"799":1,"800":3,"801":4}}],["┌───────────────────────────────────────────────────────────────────────┐",{"2":{"790":2}}],["┌──────────────────────────────────────────────────────────────────────┐",{"2":{"57":5}}],["┌─────────────────────────────────────────────────────────────┐",{"2":{"830":4}}],["┌─────────────────────────────────────────────────────────┐",{"2":{"471":1,"832":1}}],["┌─────────────────────────────────────────┐",{"2":{"279":1}}],["┌───────────────────────────────┐",{"2":{"801":1}}],["┌─────────────────────────────▼─────────────────────────────────────────────┐",{"2":{"800":1}}],["┌─────────────────────────────▼───────────────────────────────────────────────┐",{"2":{"790":2}}],["┌───────────────────────┐│",{"2":{"790":2}}],["┌───────────────────┴───────────────────┐",{"2":{"799":1}}],["┌───────────────────┐",{"2":{"790":1}}],["┌──────────────────┐",{"2":{"790":2,"832":1}}],["┌────────────────┼────────────────┐",{"2":{"799":1}}],["┌───────────────┴───────────────┐",{"2":{"790":1}}],["┌──────────────┐",{"2":{"790":6,"832":3}}],["┌──────────┴──────────┐",{"2":{"832":1}}],["┌──────────┐",{"2":{"830":4}}],["┌──────────▼──────────┐",{"2":{"790":1}}],["┌────▼────┐",{"2":{"799":3,"800":1}}],["暂停动画",{"2":{"776":1}}],["待处理的形状数据",{"2":{"771":1}}],["待分析",{"2":{"762":1}}],["锚点",{"2":{"770":2}}],["锚定核心目标",{"0":{"624":1}}],["锚定了长期目标",{"2":{"430":1}}],["锚定效应",{"2":{"397":1}}],["锯齿变形",{"2":{"771":1}}],["锯齿变形修饰器",{"2":{"762":1}}],["锯齿",{"2":{"764":1}}],["膨胀收缩",{"2":{"764":1,"771":1}}],["膨胀收缩修饰器",{"2":{"762":1}}],["遮罩系统",{"2":{"762":1}}],["遮罩对象代理",{"2":{"762":1}}],["遮罩元素",{"2":{"762":1}}],["镜头元素",{"2":{"762":1}}],["素菜",{"2":{"961":1,"963":2}}],["素材",{"2":{"762":1}}],["素月斜",{"2":{"508":1}}],["栈式状态",{"2":{"762":1}}],["滑块控制效果",{"2":{"762":1}}],["圣诞节动画",{"2":{"762":1}}],["圣方济各会修士威廉",{"2":{"181":1}}],["享元模式",{"2":{"761":1,"767":1}}],["享受纯粹而充实的悦读时光",{"2":{"615":1}}],["享受不中断的",{"2":{"565":1}}],["压力也随之上升",{"2":{"950":1}}],["压力测试用例",{"2":{"881":3}}],["压力",{"2":{"757":1}}],["压缩等多种格式",{"2":{"737":1}}],["压缩纹理",{"2":{"734":1}}],["压缩后仅几",{"2":{"97":1}}],["投喂",{"2":{"918":1}}],["投喂需求与视觉规格",{"2":{"2":1}}],["投影滤镜",{"2":{"762":1}}],["投影",{"2":{"757":1}}],["矢量无损",{"2":{"757":1}}],["矢量渲染",{"2":{"755":1}}],["费时费力且效果容易走样",{"2":{"755":1}}],["费用",{"2":{"565":1,"568":1}}],["度百岁乃去",{"2":{"941":1}}],["度",{"2":{"749":1}}],["垂直视野角度",{"2":{"749":1}}],["垂直域工程",{"2":{"432":1}}],["拼接",{"2":{"934":1}}],["拼装着色器代码",{"2":{"742":1}}],["拼命地订阅各种干货",{"2":{"621":1}}],["顶点属性",{"2":{"737":1}}],["顶层声明污染全树",{"2":{"74":1}}],["撤销",{"2":{"734":1}}],["菜单栏",{"2":{"734":1}}],["菜单组件",{"2":{"647":1}}],["↔",{"2":{"734":1}}],["卷腹等健身器材",{"2":{"960":1}}],["卷",{"2":{"906":1}}],["卷云",{"2":{"734":1}}],["卷价格的",{"2":{"620":1}}],["凸包等",{"2":{"734":1}}],["八叉树",{"2":{"734":1}}],["宽高比",{"2":{"749":1}}],["宽线条渲染",{"2":{"734":1}}],["宽容输入",{"2":{"534":1}}],["宽容",{"2":{"237":1}}],["海绵式阅读",{"2":{"946":1}}],["海洋",{"2":{"734":1}}],["海量并发场景",{"2":{"156":1}}],["雾",{"2":{"734":1}}],["雾效",{"2":{"734":1}}],["距离切换",{"2":{"734":1}}],["距离场",{"2":{"734":1}}],["细粒度任务列表",{"2":{"895":1}}],["细粒度更新",{"2":{"341":1}}],["细节层次",{"2":{"734":1}}],["粒子",{"2":{"734":1}}],["粒子系统材质",{"2":{"734":1}}],["骨骼集合",{"2":{"734":1}}],["骨骼节点",{"2":{"734":1}}],["骨骼动画网格",{"2":{"734":1}}],["骨架屏的布局与实际组件一致",{"2":{"86":1}}],["骨架",{"2":{"2":1,"35":1,"734":1}}],["蒙皮动画",{"2":{"740":1}}],["蒙皮动画网格",{"2":{"737":1}}],["蒙皮",{"2":{"734":1}}],["蒙版",{"2":{"677":1}}],["程序级约束",{"2":{"877":1}}],["程序缓存",{"2":{"734":1}}],["程序化纹理",{"2":{"734":1}}],["程序员成长指北",{"2":{"346":1}}],["粗糙度贴图",{"2":{"749":1}}],["粗糙度",{"2":{"749":1}}],["粗糙度工作流",{"2":{"749":1}}],["粗糙度等",{"2":{"734":1}}],["粗指针模式",{"2":{"719":1}}],["钳制等",{"2":{"734":1}}],["插槽管理器",{"2":{"762":1}}],["插值器",{"2":{"743":1}}],["插值器基类",{"2":{"734":1}}],["插值实现",{"2":{"734":1}}],["插值",{"2":{"734":1}}],["插件顺序决定了编译结果",{"2":{"932":1}}],["插件链",{"2":{"928":1}}],["插件进行处理",{"2":{"923":1}}],["插件主入口",{"2":{"881":1}}],["插件运行时代码",{"2":{"881":1}}],["插件注册元数据",{"2":{"881":3}}],["插件注册入口",{"2":{"769":1}}],["插件同步机制测试",{"2":{"881":1}}],["插件加载机制测试",{"2":{"881":1}}],["插件脚手架生成",{"2":{"792":1}}],["插件系统",{"2":{"792":1}}],["插件系统和实时预览",{"2":{"645":1}}],["插件发现与加载",{"2":{"792":1}}],["插件的",{"2":{"762":1}}],["插件导出",{"2":{"756":1}}],["插件导出的",{"2":{"755":1}}],["插件化适配器",{"2":{"786":1,"789":1}}],["插件化管道",{"2":{"702":1}}],["插件化架构",{"2":{"701":1}}],["插件类型定义",{"2":{"647":1}}],["插件管理器",{"2":{"647":1,"656":1}}],["插件和快捷键习惯均可无缝迁移",{"2":{"565":1}}],["插件市场与风格定制",{"2":{"561":1}}],["插件生态",{"2":{"542":1}}],["插件生态和",{"2":{"510":1}}],["插件生态丰富",{"2":{"18":1}}],["插件配置",{"0":{"501":1}}],["插件",{"2":{"320":1,"340":1,"568":1,"629":1,"647":2,"792":1,"800":2,"881":1}}],["插件实现",{"2":{"160":1}}],["柱坐标",{"2":{"734":1}}],["柱状",{"2":{"701":1}}],["柱状图网格布局",{"2":{"706":1}}],["柱状图",{"2":{"700":1,"706":1}}],["欧拉角",{"2":{"734":1}}],["烘焙光照",{"2":{"734":1}}],["烘托洛神出场之朦胧",{"2":{"508":1}}],["烘托其仪态",{"2":{"505":1}}],["卡通渲染",{"2":{"734":1}}],["卡片",{"2":{"629":1}}],["卡片盒",{"0":{"628":1}}],["卡片盒笔记法",{"0":{"627":1}}],["球坐标",{"2":{"734":1}}],["球谐函数",{"2":{"734":1}}],["球谐",{"2":{"734":1}}],["球体",{"2":{"734":1}}],["拉伸体",{"2":{"734":1}}],["拉文吉亚倡导",{"2":{"380":1}}],["圆角等",{"2":{"765":1}}],["圆角",{"2":{"764":1,"771":1,"925":1}}],["圆角修饰器",{"2":{"762":1}}],["圆柱体",{"2":{"734":1}}],["圆形",{"2":{"677":1}}],["曲线核心",{"2":{"734":1}}],["棋盘格等",{"2":{"734":1}}],["位掩码",{"2":{"734":1}}],["位置音频",{"2":{"734":1}}],["位置追踪",{"2":{"677":1}}],["位置",{"2":{"571":1,"580":1,"591":1,"682":1,"734":1,"765":1,"770":1,"851":1}}],["位置的占位符",{"2":{"254":1}}],["射线",{"2":{"734":2}}],["射线检测",{"2":{"734":1,"748":1}}],["警告等",{"2":{"734":1}}],["警惕算法构建的",{"0":{"618":1}}],["警惕脱离现实的",{"2":{"614":1}}],["警惕被",{"2":{"613":1}}],["警惕心态失衡与怨天尤人",{"2":{"612":1}}],["警惕",{"0":{"531":1},"2":{"612":1}}],["遗留兼容",{"2":{"734":1}}],["遗憾的是",{"2":{"232":1}}],["缓动类型",{"2":{"770":1}}],["缓冲区管理",{"2":{"733":1}}],["缓存系统",{"2":{"682":2}}],["缓存处理",{"2":{"342":1}}],["缓存机制难以直接利用",{"2":{"342":1}}],["缓存机制",{"2":{"304":1}}],["缓存等技术实现",{"2":{"279":1}}],["缓存不完整的行",{"2":{"168":1}}],["缓存失效与精细化刷新",{"2":{"110":1}}],["缓存审查器",{"2":{"110":1}}],["缓存标识",{"2":{"110":1}}],["缓存自动清理",{"2":{"103":1}}],["缓存读取的网络开销可能比直接渲染更大",{"2":{"88":1}}],["缓存形同虚设",{"2":{"59":1}}],["缓存能力",{"2":{"57":1}}],["缓存命中时",{"2":{"683":1}}],["缓存命中时无服务端计算",{"2":{"57":1}}],["缓存命中时等同",{"2":{"57":1}}],["缓存",{"2":{"47":2,"57":1,"66":1,"75":1,"100":1,"103":1,"342":1,"489":1,"677":1,"679":1,"739":1,"770":1}}],["缓存无缝切换",{"2":{"47":1}}],["缓存期内",{"2":{"47":1}}],["缓存策略",{"2":{"47":1,"71":1,"342":1}}],["纹理采样",{"2":{"741":1}}],["纹理贴图",{"2":{"737":1}}],["纹理数据实体",{"2":{"737":1}}],["纹理数据源",{"2":{"734":1}}],["纹理等视觉属性",{"2":{"737":1}}],["纹理资源",{"2":{"734":1,"737":1}}],["纹理基类",{"2":{"734":1}}],["纹理体系",{"2":{"734":1}}],["纹理管理",{"2":{"734":1}}],["纹理管理等",{"2":{"732":1}}],["纹理加载",{"2":{"734":1}}],["纹理生成",{"2":{"734":2}}],["纹理",{"2":{"733":1,"734":2,"748":1}}],["着色节点",{"2":{"737":1}}],["着色器",{"2":{"742":2}}],["着色器绑定",{"2":{"739":1}}],["着色器管线缓存",{"2":{"737":1}}],["着色器中的一个计算节点",{"2":{"737":1}}],["着色器节点实体",{"2":{"737":1}}],["着色器节点图构建与编译",{"2":{"733":1}}],["着色器库",{"2":{"736":1}}],["着色器代码片段",{"2":{"734":1}}],["着色器代码生成",{"2":{"733":1}}],["着色器程序",{"2":{"734":1}}],["着色器编译流程",{"0":{"746":1}}],["着色器编译",{"2":{"733":1,"745":1}}],["着色语言入口",{"2":{"734":1}}],["着色语言",{"2":{"729":1,"730":1,"736":1}}],["委托给",{"2":{"859":1}}],["委托",{"2":{"733":1}}],["丰富的扩展生态",{"2":{"729":1,"732":1}}],["丰富性等方面",{"2":{"510":1}}],["光源实体",{"2":{"737":1}}],["光源数据访问",{"2":{"734":1}}],["光源基类",{"2":{"734":1}}],["光源系统",{"2":{"734":1}}],["光照扩展",{"2":{"734":1}}],["光照工具",{"2":{"734":1}}],["光照状态",{"2":{"734":1}}],["光照管理器",{"2":{"734":1}}],["光照计算",{"2":{"734":1,"741":1}}],["光照模型",{"2":{"734":2}}],["光照探针",{"2":{"734":2}}],["光照",{"2":{"728":1,"733":1}}],["光鲜的数据背后",{"2":{"525":1}}],["材质契约",{"2":{"748":1}}],["材质被编译为着色器程序",{"2":{"742":1}}],["材质描述实体",{"2":{"737":1}}],["材质编译",{"2":{"734":1}}],["材质属性被转换为节点图",{"2":{"742":1}}],["材质属性",{"2":{"734":1}}],["材质基类",{"2":{"734":1}}],["材质体系",{"2":{"734":1}}],["材质系统",{"0":{"742":1},"2":{"729":1}}],["材质",{"2":{"728":1,"734":1,"736":1,"737":1,"742":1}}],["销量",{"2":{"724":1}}],["销毁元素",{"2":{"776":1}}],["销毁动画",{"2":{"776":1}}],["销毁实例",{"2":{"719":1}}],["销毁",{"2":{"704":1}}],["袜子",{"2":{"724":1}}],["裤子",{"2":{"724":1}}],["羊毛衫",{"2":{"724":1}}],["衬衫",{"2":{"724":1}}],["衬托神女超凡脱俗",{"2":{"505":1}}],["派发行为",{"2":{"719":1}}],["派生数据",{"0":{"5":1},"2":{"5":1}}],["级多主题策略",{"2":{"928":1}}],["级联阴影",{"2":{"734":1}}],["级别的",{"2":{"715":1}}],["级的链路追踪",{"2":{"550":1}}],["盒模型布局计算",{"2":{"706":1}}],["渐渐演变为",{"2":{"959":1}}],["渐变属性",{"2":{"762":1}}],["渐变描边样式数据",{"2":{"762":1}}],["渐变填充样式数据",{"2":{"762":1}}],["渐变",{"2":{"706":1}}],["渐进扩展",{"2":{"597":1}}],["渐进披露",{"2":{"547":1}}],["渐进式渲染",{"2":{"701":1}}],["渐进式权限控制",{"2":{"478":1}}],["渐进式加载模块",{"2":{"443":1}}],["渐进式披露的艺术",{"0":{"443":1}}],["渐进式披露",{"2":{"441":1,"445":1}}],["渐进式升级",{"2":{"285":1}}],["渐进式增强",{"2":{"110":1}}],["渐进式",{"2":{"46":1,"339":1}}],["淡化",{"2":{"706":1}}],["堆叠图表",{"2":{"706":1}}],["堆人力",{"0":{"378":1}}],["力导向布局",{"2":{"706":1}}],["力导向图",{"2":{"706":1}}],["符号引用父选择器",{"2":{"921":1}}],["符号编码",{"2":{"706":1}}],["符合律诗",{"2":{"507":1,"508":1}}],["符合预期",{"2":{"499":1}}],["符合奥卡姆剃刀的",{"2":{"188":1}}],["符合极简与高效的技术审美",{"2":{"97":1}}],["轴",{"2":{"706":1}}],["角度轴",{"2":{"706":2}}],["角色多元化的社会",{"2":{"950":1}}],["角色让我们关注身体",{"2":{"907":1}}],["角色动画",{"2":{"762":1}}],["角色专业化分工",{"2":{"535":1}}],["角色对话出海竞争力强",{"2":{"512":1}}],["角色规范",{"2":{"504":1,"506":1}}],["角色设定与物料生成",{"0":{"499":1}}],["角色任务",{"2":{"494":1}}],["角色扮演",{"2":{"437":1,"512":1,"522":1}}],["角色定位",{"2":{"435":1,"436":1,"437":1,"438":1,"439":1}}],["角色",{"2":{"426":1,"859":1}}],["角色的超级个体",{"2":{"361":1}}],["角色界定",{"2":{"2":1}}],["屏幕阅读器支持",{"2":{"706":1}}],["屏蔽",{"2":{"699":1}}],["悬停数据提示",{"2":{"706":1}}],["滚动",{"2":{"706":1}}],["坐标轴",{"2":{"734":1}}],["坐标轴指示器",{"2":{"706":1}}],["坐标轴组件",{"2":{"706":1}}],["坐标系是",{"2":{"714":1}}],["坐标系系统",{"0":{"714":1}}],["坐标系接口",{"2":{"706":1}}],["坐标系抽象层",{"2":{"706":1}}],["坐标系绑定",{"2":{"706":1}}],["坐标系统绑定",{"2":{"706":1}}],["坐标系管理器",{"2":{"706":1}}],["坐标系",{"2":{"704":1,"709":1,"711":1}}],["象形柱图",{"2":{"706":1}}],["涟漪散点图",{"2":{"706":1}}],["旭日图",{"2":{"706":1}}],["旭日等",{"2":{"701":1}}],["仪表盘",{"2":{"706":1}}],["仪表盘等",{"2":{"639":1}}],["漏斗图",{"2":{"706":1}}],["漏洞",{"2":{"586":1,"587":1}}],["漏洞分类",{"2":{"586":1}}],["箱线图",{"2":{"706":1}}],["气泡图",{"2":{"706":1}}],["气质",{"2":{"507":1}}],["序数元数据",{"2":{"706":1}}],["序列化",{"2":{"256":1,"748":1,"859":1}}],["序列化后的渲染结果",{"2":{"73":1}}],["索引缓冲",{"2":{"737":1}}],["索引等",{"2":{"737":1}}],["索引管理",{"2":{"706":1}}],["索引所有坐标系实例",{"2":{"706":1}}],["笛卡尔坐标映射",{"2":{"706":1}}],["笛卡尔坐标系",{"2":{"706":1}}],["笛卡尔",{"2":{"701":1}}],["桑基图",{"2":{"706":1}}],["桑基",{"2":{"701":1}}],["散点布局",{"2":{"706":1}}],["散点图",{"2":{"706":1}}],["散点",{"2":{"701":1}}],["饼图无坐标系",{"2":{"714":1}}],["饼图",{"2":{"700":1,"701":1,"706":1}}],["框选高亮",{"2":{"715":1}}],["框选组件",{"2":{"706":1}}],["框选",{"2":{"699":1}}],["框架层面的组件",{"2":{"933":1}}],["框架自带的",{"2":{"933":1}}],["框架自动渲染",{"2":{"640":1}}],["框架规范",{"2":{"928":1}}],["框架级",{"2":{"928":1}}],["框架无关状态管理",{"2":{"858":1}}],["框架无关状态管理核心",{"2":{"858":1}}],["框架集成层",{"2":{"847":1,"848":1}}],["框架的核心机制",{"2":{"545":1}}],["框架的核心机制与实战落地",{"2":{"545":1}}],["框架的本质是",{"2":{"66":1}}],["框架与模板",{"2":{"504":1}}],["框架与结构化",{"2":{"503":1}}],["框架定位",{"2":{"344":1}}],["框架下的",{"2":{"125":1}}],["框架",{"0":{"71":1,"339":1},"2":{"71":1,"192":1,"340":1,"344":3,"353":1,"419":1,"553":1,"787":1,"888":1}}],["框架作者不需要从零实现一个编程语言",{"2":{"66":1}}],["框架和一份",{"2":{"34":1}}],["采样像素颜色来定位命中的节点",{"2":{"683":1}}],["采用的处理方式自然也不同",{"2":{"950":1}}],["采用的模块化规范",{"2":{"298":1}}],["采用装饰器模式",{"2":{"861":1}}],["采用工具循环模式",{"2":{"859":1}}],["采用工厂模式",{"2":{"857":1}}],["采用多层防御设计",{"2":{"801":1}}],["采用注册中心模式",{"2":{"800":1}}],["采用桥接模式",{"2":{"799":1}}],["采用缓存策略",{"2":{"770":1}}],["采用策略模式",{"2":{"768":1}}],["采用组合模式",{"2":{"740":1}}],["采用组件化架构",{"2":{"339":2}}],["采用插件化分层管道架构",{"2":{"704":1}}],["采用模板方法模式",{"2":{"683":1,"856":1}}],["采用分层适配器架构",{"2":{"847":1}}],["采用分层+插件化架构",{"2":{"760":1}}],["采用分层插件化架构",{"2":{"732":1,"789":1}}],["采用分层图形树架构",{"2":{"675":1}}],["采用分层",{"2":{"645":1}}],["采用了与",{"2":{"470":1}}],["采用智能的三级系统",{"2":{"443":1}}],["采用动态人机交互界面和无预制有限域的任务",{"2":{"403":1}}],["采用自研的",{"2":{"353":1}}],["采用指数退避避免瞬时并发压力",{"2":{"175":1}}],["采用同步的请求",{"2":{"114":1}}],["采用",{"2":{"59":1,"160":1,"314":1,"342":2,"387":1,"414":1,"879":1,"888":1,"889":1,"928":3}}],["脏标记系统",{"2":{"682":1}}],["阴影贴图",{"2":{"734":1}}],["阴影接收",{"2":{"734":1}}],["阴影基础",{"2":{"734":1}}],["阴影处理",{"2":{"683":1}}],["阴影等样式处理",{"2":{"683":1}}],["阴影等样式",{"2":{"680":1}}],["阴影样式",{"2":{"677":1}}],["触屏优化",{"2":{"719":1}}],["触摸",{"2":{"680":1}}],["触发测试提示词",{"2":{"881":1}}],["触发系统",{"2":{"881":1}}],["触发规则",{"2":{"879":1}}],["触发代码生成",{"2":{"736":1}}],["触发图表交互",{"2":{"719":1}}],["触发调度管道依次执行",{"2":{"708":1}}],["触发",{"2":{"682":2,"880":1,"881":2,"893":1}}],["触发动作",{"2":{"659":1}}],["触发后自动执行",{"2":{"590":1}}],["触发场景",{"2":{"587":1}}],["触发关键词列表",{"2":{"586":1}}],["触发方式",{"2":{"585":1,"592":1}}],["触发条件",{"2":{"447":1,"450":1,"586":1}}],["触发回调",{"2":{"166":1}}],["触发的时机",{"2":{"163":1}}],["触发之前执行",{"2":{"108":1}}],["触发乐观更新",{"2":{"100":1}}],["触发事件选择",{"2":{"29":1}}],["触发构建工具重新预渲染静态页面",{"2":{"21":1}}],["触发自顶向下的重新渲染",{"2":{"7":1}}],["鼠标交互修饰器",{"2":{"762":1}}],["鼠标",{"2":{"680":1}}],["舞台契约",{"2":{"692":1}}],["舞台",{"2":{"679":1}}],["舞台根节点与事件中枢",{"0":{"684":1}}],["舞台根节点",{"2":{"677":1}}],["许可证",{"2":{"677":1,"699":1,"706":1,"755":1,"762":1,"792":1,"823":1,"874":1}}],["许多经典在当年都是锋芒毕露",{"2":{"609":1}}],["许多团队在项目初期享受着组件化带来的快感",{"2":{"1":1}}],["曝光过度",{"2":{"677":1}}],["色调滤镜",{"2":{"762":1}}],["色调等",{"2":{"757":1}}],["色调分离",{"2":{"677":1}}],["色阶滤镜",{"2":{"762":1}}],["色阶",{"2":{"734":1,"757":1,"925":1}}],["色彩空间",{"2":{"734":1}}],["色彩空间转换",{"2":{"734":1}}],["色彩空间调整",{"2":{"677":2}}],["色彩对比‌",{"2":{"505":1}}],["噪声信息越来越多",{"2":{"908":1}}],["噪点",{"2":{"677":1}}],["噪音",{"2":{"576":1}}],["灰度化",{"2":{"677":1}}],["亮度调整",{"2":{"677":1}}],["楔形",{"2":{"677":1}}],["沿路径排列文本",{"2":{"677":1}}],["星形",{"2":{"677":1}}],["环形图",{"2":{"706":1}}],["环形",{"2":{"677":1}}],["环境贴图",{"2":{"749":1}}],["环境贴图生成",{"2":{"736":1}}],["环境生成",{"2":{"734":1}}],["环境光",{"2":{"734":1}}],["环境光照",{"2":{"729":1}}],["环境要求",{"0":{"665":1,"870":1,"898":1}}],["环境接口契约",{"0":{"662":1}}],["环境覆盖",{"2":{"649":1}}],["环境定义",{"2":{"647":1}}],["环境确认",{"2":{"583":1}}],["环境未就绪",{"2":{"583":1}}],["环境探测",{"2":{"414":1}}],["环境交互",{"2":{"412":1}}],["环境变量注入",{"2":{"649":1}}],["环境变量的",{"0":{"481":1}}],["环境变量类型",{"2":{"274":1}}],["环境变了",{"2":{"402":1}}],["环境适配",{"2":{"313":1}}],["环境和浏览器环境",{"2":{"306":1}}],["环境类型",{"2":{"274":1}}],["环境配置注意点",{"2":{"573":1}}],["环境配置与初始化",{"0":{"479":1},"1":{"480":1,"481":1}}],["环境配置",{"0":{"722":1,"751":1,"780":1,"809":1},"2":{"214":1,"215":1,"881":1}}],["环境",{"2":{"156":1,"418":1,"734":1,"736":1}}],["环境下共享知识库与对话历史",{"2":{"437":1}}],["环境下表现最佳",{"2":{"342":1}}],["环境下",{"2":{"124":1,"320":1}}],["环境中",{"2":{"69":1,"342":1}}],["六边形等",{"2":{"677":1}}],["六款工具横向对比",{"0":{"562":1}}],["矩阵运算",{"2":{"761":1,"764":1}}],["矩阵坐标系",{"2":{"706":1}}],["矩阵热力图坐标",{"2":{"706":1}}],["矩阵组件",{"2":{"706":1}}],["矩阵",{"2":{"682":1,"701":1,"734":2}}],["矩阵类",{"2":{"677":1}}],["矩形区域光",{"2":{"734":1}}],["矩形树图",{"2":{"706":1}}],["矩形",{"2":{"677":1,"706":1}}],["折线图",{"2":{"706":1}}],["折线",{"2":{"677":1,"700":1}}],["折扣",{"2":{"278":1}}],["椭圆",{"2":{"677":1}}],["箭头",{"2":{"677":1}}],["弧形路径",{"2":{"677":1}}],["帧",{"2":{"776":1}}],["帧元素辅助",{"2":{"762":1}}],["帧缓冲拷贝",{"2":{"748":1}}],["帧缓冲纹理",{"2":{"734":1}}],["帧循环与补间动画",{"2":{"686":1}}],["帧播放",{"2":{"677":1}}],["帧计时",{"2":{"677":1}}],["帧格式进行数据传输",{"2":{"126":1}}],["裁剪上下文",{"2":{"734":1}}],["裁剪组",{"2":{"734":1}}],["裁剪路径修饰器",{"2":{"762":1}}],["裁剪路径",{"2":{"706":1,"764":1,"771":1}}],["裁剪",{"2":{"676":1,"677":2,"748":1,"765":1}}],["绑定驱动动画循环",{"2":{"767":1}}],["绑定事件处理器",{"2":{"719":1}}],["绑定层",{"2":{"684":1}}],["绑定",{"2":{"676":1,"680":1,"704":1,"705":1,"762":1,"858":2}}],["绑架",{"2":{"613":1}}],["牺牲了一定底层灵活性",{"2":{"673":1}}],["偏移路径",{"2":{"764":1,"771":1}}],["偏移路径修饰器",{"2":{"762":1}}],["偏移",{"2":{"682":1}}],["偏移的仿射变换矩阵",{"2":{"672":1}}],["偏好轻量方案",{"2":{"341":1}}],["倾向于使用视觉效果命名",{"2":{"925":1}}],["倾斜",{"2":{"672":1,"680":1,"682":1}}],["倾城非有意",{"2":{"505":1}}],["缩略图组件",{"2":{"706":1}}],["缩略图生成",{"2":{"671":1}}],["缩放手柄",{"2":{"677":1}}],["缩放",{"2":{"672":1,"680":2,"682":1,"765":1,"770":1}}],["旋转锚点",{"2":{"677":1}}],["旋转",{"2":{"672":1,"680":2,"682":1,"734":1,"765":1}}],["滤镜等",{"2":{"764":1}}],["滤镜工具",{"2":{"762":1}}],["滤镜效果注册管理器",{"2":{"762":1}}],["滤镜效果实现",{"2":{"762":1}}],["滤镜效果",{"2":{"757":1,"764":1}}],["滤镜系统",{"2":{"757":1}}],["滤镜",{"2":{"693":1,"762":1}}],["滤镜函数",{"2":{"682":1}}],["滤镜函数双模式",{"2":{"672":1}}],["滤镜管线",{"2":{"675":1,"676":1}}],["滤镜管道",{"2":{"672":1,"677":1,"682":2}}],["离散跳变",{"2":{"770":1}}],["离屏渲染",{"2":{"734":1}}],["离屏缓存",{"2":{"676":1}}],["离屏",{"2":{"670":1}}],["离开提示行并暂停",{"2":{"489":1}}],["父子组件嵌套时",{"2":{"924":1}}],["父节点变换",{"2":{"740":1}}],["父",{"2":{"663":1}}],["父组件",{"2":{"653":1}}],["父组件在回调中执行",{"2":{"7":1}}],["父组件通过",{"2":{"7":1}}],["剪贴板复制方法",{"2":{"662":1}}],["剪映生态打通",{"2":{"512":1}}],["张三",{"2":{"655":1}}],["张鑫旭的个人博客",{"2":{"346":1}}],["张鑫旭",{"2":{"346":1}}],["岁",{"2":{"655":2}}],["今年",{"2":{"655":2}}],["今天",{"2":{"457":1}}],["权衡理由",{"2":{"845":1}}],["权衡",{"2":{"673":1,"730":1}}],["权重",{"2":{"661":1}}],["权重排序插入",{"2":{"652":1}}],["权限与项目配置",{"0":{"593":1},"1":{"594":1,"595":1,"596":1}}],["权限校验缺失提醒",{"2":{"586":1}}],["权限+配置",{"2":{"570":1}}],["权限模式",{"2":{"482":1}}],["权限模式等",{"2":{"482":1}}],["权限隔离",{"2":{"438":1,"570":1}}],["权限被严格限制在特定的",{"2":{"415":1}}],["权限",{"2":{"415":1,"583":1,"592":1}}],["权限控制",{"2":{"275":1,"279":1}}],["叶子节点",{"2":{"649":1}}],["弹窗",{"2":{"650":3,"653":1}}],["弹窗状态",{"2":{"647":1}}],["弹性扩容",{"2":{"15":1}}],["递归扫描子目录",{"2":{"800":1}}],["递归渲染函数",{"2":{"661":1}}],["递归渲染",{"2":{"658":1}}],["递归下降解析",{"2":{"655":1}}],["递归处理",{"2":{"649":1}}],["递归",{"2":{"647":1,"737":1}}],["递归解析引擎",{"2":{"646":1,"650":1}}],["化繁为简",{"2":{"914":1}}],["化繁为简的策略",{"0":{"422":1},"1":{"423":1,"424":1,"425":1}}],["化输入字符串",{"2":{"655":1}}],["化",{"2":{"646":1}}],["词法→语法→求值",{"2":{"647":1}}],["词法",{"2":{"646":1}}],["词法分析器",{"2":{"647":1,"655":1}}],["词法分析",{"2":{"646":1}}],["映射类名与透明度",{"2":{"928":1}}],["映射类",{"2":{"928":1}}],["映射为强类型的枚举接口",{"2":{"928":1}}],["映射数据到数组",{"2":{"719":1}}],["映射",{"2":{"712":1}}],["映射到",{"2":{"645":1}}],["映射规则",{"2":{"97":1}}],["映射规格",{"2":{"11":1}}],["沙箱安全执行",{"2":{"646":1}}],["沙箱",{"2":{"642":1,"655":1}}],["拖拽操作的完整事件链",{"0":{"690":1}}],["拖拽位置计算",{"2":{"680":1}}],["拖拽引擎",{"2":{"675":1,"677":1,"679":1}}],["拖拽系统",{"2":{"647":1,"656":1}}],["拖拽构建页面",{"2":{"641":1}}],["拖拽保存的工具型产品",{"2":{"111":1}}],["姓名",{"2":{"640":1,"668":1}}],["爱速搭",{"2":{"640":1}}],["财务",{"2":{"640":1}}],["科技媒体及社区讨论四大领域",{"2":{"632":1}}],["致谢",{"0":{"904":1}}],["致力于解决信息过载难题",{"2":{"632":1}}],["致命错误",{"2":{"169":1}}],["梳理的概念网络",{"2":{"631":1}}],["梳理调用链并生成文档",{"2":{"568":1}}],["萃取到项目孵化",{"2":{"630":1}}],["孵化流程",{"2":{"629":1}}],["论文阅读",{"2":{"628":1}}],["论文解读四类内容",{"2":{"628":1}}],["论文精读",{"2":{"515":1}}],["潜在坑点",{"2":{"625":1}}],["潜在的性能瓶颈",{"2":{"591":1}}],["果断做减法",{"0":{"624":1}}],["果又减弱因",{"2":{"386":1}}],["果又增强因",{"2":{"386":1}}],["差异",{"2":{"728":1}}],["差异破局",{"0":{"626":1}}],["差距便由此产生",{"2":{"622":1}}],["差着十万八千里",{"2":{"610":1}}],["劣币驱逐良币",{"2":{"620":1}}],["劣势",{"2":{"287":1}}],["仔细扒开源码就会发现",{"2":{"620":1}}],["阻塞点位置",{"2":{"712":1}}],["阻碍多数人的原因通常有三个",{"2":{"617":1}}],["阻断",{"2":{"591":1}}],["举个最常见的例子",{"2":{"617":1}}],["举个经典的机械手表例子",{"2":{"383":1}}],["抓不住机会是因为缺少信息差",{"2":{"616":1}}],["赚钱",{"2":{"617":1}}],["赚钱或成功的模式往往是粗放的",{"2":{"616":1}}],["赚不到钱",{"2":{"616":1}}],["扭曲认知",{"2":{"614":1}}],["故不可脱离现实",{"2":{"614":1}}],["故障排查",{"2":{"449":1}}],["愉快的方式",{"2":{"613":1}}],["竹简到纸张",{"2":{"613":1}}],["油墨的香气",{"2":{"613":1}}],["汲取知识",{"2":{"613":1}}],["陷入对物理媒介的过度迷恋",{"0":{"613":1}}],["陷阱",{"0":{"481":1}}],["鄙夷与哀怨",{"2":{"612":1}}],["伯乐",{"2":{"612":1}}],["静养心神",{"2":{"941":1}}],["静观其变",{"2":{"620":1}}],["静等着",{"2":{"612":1}}],["静态图片等等",{"2":{"442":1}}],["静态类型",{"2":{"338":1}}],["静态加载",{"2":{"314":1}}],["静态解析与单例",{"0":{"314":1}}],["静态分析更简单",{"2":{"311":1}}],["静态分析",{"2":{"307":1,"730":1}}],["静态成员不能使用泛型参数",{"2":{"261":1}}],["静态检查工具",{"0":{"219":1}}],["静态站点不等于",{"2":{"66":1}}],["静态站点生成",{"2":{"42":1,"57":1,"344":2}}],["静态站点生成器",{"0":{"18":1}}],["静态优先",{"2":{"57":1}}],["静态文件",{"2":{"57":1,"734":1}}],["静态文档",{"2":{"18":1}}],["静态",{"2":{"57":1,"70":1,"308":1}}],["静态外壳先到",{"2":{"87":1}}],["静态外壳可缓存",{"2":{"57":1}}],["静态外壳无需或少量水合",{"2":{"57":1}}],["静态外壳每次需渲染",{"2":{"57":1}}],["静态外壳每次请求新渲染",{"2":{"57":1}}],["静态外壳包含完整页面结构",{"2":{"57":1}}],["静态外壳立即返回",{"2":{"57":1}}],["静态外壳实时",{"2":{"57":1}}],["静态外壳",{"2":{"52":1,"53":1}}],["静态部分在服务端预渲染并立即返回",{"2":{"51":1}}],["静态页面可缓存",{"2":{"57":1}}],["静态页面水合",{"2":{"57":1}}],["静态页面",{"2":{"31":1}}],["静态场景",{"2":{"30":1}}],["静态资源",{"2":{"706":1,"880":1}}],["静态资源层",{"2":{"274":1}}],["静态资源托管",{"0":{"19":1}}],["静态资源无单点故障",{"2":{"15":1}}],["静态托管",{"2":{"17":1}}],["静态托管免费",{"2":{"15":1}}],["静态基线",{"2":{"12":1}}],["静态产物",{"2":{"3":1}}],["静态版本是对渲染行为的锚定",{"2":{"12":1}}],["静态版本应保证组件无副作用",{"2":{"3":1}}],["静态版本",{"2":{"3":1}}],["刁难",{"2":{"610":1}}],["讲述的过程会倒逼你",{"2":{"610":1}}],["讲述故事",{"2":{"506":1}}],["讲清楚",{"2":{"610":1}}],["师傅领进门",{"2":{"609":1}}],["针锋相对的论辩性作品",{"2":{"609":1}}],["针对原子类难以描述的复杂场景",{"2":{"931":1}}],["针对具体任务",{"2":{"550":1}}],["针对不同的业务场景",{"2":{"545":1}}],["针对不同复杂度的工作流设计稳健的多",{"2":{"545":1}}],["针对不需要频繁变动的用户数据",{"2":{"99":1}}],["针对用户给定的主题",{"2":{"506":1}}],["针对",{"2":{"470":1,"901":1,"928":1,"930":1}}],["针对这个具体问题写这段具体代码",{"2":{"271":1}}],["针对功能内聚",{"2":{"10":1}}],["刻舟求剑",{"2":{"608":1}}],["刻意统计与调整阶段的阶段也漫谈完了",{"2":{"954":1}}],["刻意统计并调整时间",{"0":{"954":1}}],["刻意忽略不重要的事",{"2":{"952":1}}],["刻意保持你的技术尖锐度",{"2":{"539":1}}],["刻意练习",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1},"2":{"368":1}}],["刷几小时短视频",{"2":{"606":1}}],["书生意气",{"2":{"959":1}}],["书生误国也是这个道理",{"2":{"946":1}}],["书接上文",{"2":{"906":1,"955":1}}],["书本知识只是认识世界的一小部分",{"2":{"614":1}}],["书籍所承载的仅仅是世界知识总量中极小的一部分",{"2":{"614":1}}],["书籍仅承载极少知识",{"2":{"614":1}}],["书籍往往是创作者多年思考",{"2":{"606":1}}],["书面语",{"2":{"606":1}}],["书中的信息因此往往条理清晰",{"2":{"606":1}}],["书中提出了一个极具穿透力的概念",{"2":{"379":1}}],["书中另一个贯穿始终的理念是",{"2":{"378":1}}],["置换身心状态的巨大回报",{"2":{"605":1}}],["睡前屏蔽数字通知等",{"2":{"605":1}}],["睡眠这四个高频生活维度中",{"2":{"605":1}}],["植入微小但杠杆率极高的改变",{"2":{"605":1}}],["饮食微调",{"2":{"964":1}}],["饮食表",{"2":{"963":1}}],["饮食调整基本正常执行",{"2":{"964":1}}],["饮食调整",{"2":{"962":1,"963":1}}],["饮食限制时间和饭量",{"2":{"961":1}}],["饮食",{"2":{"605":1}}],["健康的身体",{"2":{"950":1}}],["健康这个话题聊的差不多了",{"2":{"943":1}}],["健康小结",{"0":{"943":1}}],["健康实践",{"0":{"942":1}}],["健康有序",{"2":{"941":1}}],["健康标准简单且易懂",{"2":{"941":1}}],["健康其实是有标准",{"2":{"941":1}}],["健康知识学习",{"0":{"939":1},"1":{"940":1,"941":1,"942":1,"943":1}}],["健康也在疫情到来的第一年亮起了小红灯",{"2":{"938":1}}],["健康危机",{"0":{"938":1}}],["健康检查",{"2":{"801":2,"807":2}}],["健康不再仅仅是",{"2":{"605":1}}],["健康",{"2":{"605":1,"936":1,"952":1}}],["健康生活",{"0":{"605":1}}],["健康医护",{"2":{"407":1}}],["附近",{"2":{"604":1}}],["附带学习",{"2":{"531":1}}],["枪炮",{"2":{"604":1}}],["释放战略思考的精力",{"2":{"602":1}}],["释放进一步增长的潜力",{"2":{"387":1}}],["猴子管理法",{"2":{"602":1}}],["冷静",{"2":{"601":1}}],["冷启动",{"2":{"536":1}}],["卓越的组织不仅需要极简的流程与高效的分布式协作",{"2":{"601":1}}],["卓越的产品力不仅关乎功能设计",{"2":{"600":1}}],["卓越的产品嗅觉",{"2":{"365":1}}],["难免会看到社会用各种属性来评判一个人",{"2":{"965":1}}],["难",{"2":{"935":1}}],["难而正确",{"2":{"601":1}}],["难以描述的极端伪元素逻辑",{"2":{"934":1}}],["难以管理",{"2":{"920":1}}],["难以应对实务",{"2":{"614":1}}],["难以替代的",{"2":{"568":1}}],["难以在没有人工干预的情况下独立完成跨越数日的长时运行任务",{"2":{"419":1}}],["难以修改",{"2":{"200":1}}],["难以精细控制",{"2":{"160":1,"167":1}}],["难以缓存",{"2":{"57":1}}],["难以追踪的副作用",{"2":{"1":1}}],["盈利才是企业的核心护城河",{"2":{"601":1}}],["盈利自信",{"0":{"379":1},"2":{"379":1}}],["寻宝者思维",{"2":{"598":1}}],["寻找增强回路",{"2":{"908":1}}],["寻找因果关系",{"2":{"908":1}}],["寻找高质量的对话",{"2":{"610":1}}],["寻找你的",{"0":{"462":1}}],["寻找有效需求",{"2":{"396":1}}],["寻找",{"0":{"365":1}}],["寻找答案的能力将不再稀缺",{"2":{"358":1}}],["寻找状态的最简表示",{"0":{"4":1},"1":{"5":1,"6":1}}],["踏脚石",{"2":{"598":1}}],["倡导在不确定性中通过",{"2":{"598":1}}],["危险命令",{"2":{"595":1}}],["白名单",{"2":{"594":1}}],["伺机而动",{"2":{"585":1}}],["繁琐的",{"2":{"583":1}}],["占比",{"0":{"930":1,"931":1},"2":{"928":2}}],["占位符接收命令后的额外输入",{"2":{"582":1}}],["占用了新功能开发时间",{"2":{"386":1}}],["坑点",{"2":{"573":1}}],["列出来清单后能降低甚至避免焦虑",{"2":{"953":1}}],["列出常用命令及说明",{"2":{"573":1}}],["列",{"2":{"650":1}}],["列配置控件",{"2":{"647":1}}],["列表信息",{"2":{"881":1}}],["列表操作",{"2":{"653":1}}],["列表",{"2":{"650":4,"653":1}}],["列表增删改查",{"2":{"647":1}}],["列表页",{"2":{"639":1}}],["列表无限滚动",{"2":{"342":1}}],["⚡自动",{"2":{"570":1}}],["敏锐地识别并实现那些",{"2":{"902":1}}],["敏感信息硬编码检查",{"2":{"586":1}}],["敏感信息不上传",{"2":{"570":1}}],["敏捷开发",{"2":{"361":1}}],["敏捷迭代的",{"2":{"344":1}}],["敏捷全栈",{"2":{"342":1}}],["圈选模块",{"2":{"568":1}}],["圈可能转很久",{"2":{"89":1}}],["付费",{"2":{"568":1}}],["付出了多大的工程代价",{"2":{"374":1}}],["粘贴",{"2":{"568":1}}],["补全共享逻辑",{"2":{"792":1}}],["补全生成",{"2":{"792":1}}],["补间管理器",{"2":{"686":1}}],["补间动画契约",{"2":{"692":1}}],["补间动画引擎",{"2":{"679":1}}],["补间动画",{"2":{"672":1,"677":1}}],["补充在底部",{"2":{"934":1}}],["补充阅读",{"2":{"631":1}}],["补充上下文",{"2":{"628":1}}],["补充领域知识",{"2":{"437":1}}],["补齐单测后提交",{"2":{"568":1}}],["私有部署",{"2":{"568":1}}],["私有化",{"2":{"523":1}}],["私有化部署",{"2":{"522":1}}],["浏览网站",{"2":{"811":1}}],["浏览网页",{"2":{"606":1}}],["浏览网页查阅文档",{"2":{"567":1}}],["浏览器辅助",{"2":{"888":1}}],["浏览器命令执行流程",{"0":{"803":1}}],["浏览器无法跨域发送",{"2":{"801":1}}],["浏览器页面抽象",{"2":{"797":1,"806":2}}],["浏览器页面的抽象接口",{"2":{"797":1}}],["浏览器操作参考",{"2":{"792":1}}],["浏览器操作步骤",{"2":{"792":1}}],["浏览器扩展",{"2":{"792":1}}],["浏览器工具函数",{"2":{"792":1}}],["浏览器控制模块",{"0":{"799":1},"2":{"792":1,"799":1}}],["浏览器控制层",{"2":{"790":1,"791":1}}],["浏览器自动化",{"2":{"789":1}}],["浏览器通信",{"2":{"787":1}}],["浏览器会话启动器",{"2":{"792":1}}],["浏览器会话",{"2":{"784":1}}],["浏览器特性检测",{"2":{"762":1}}],["浏览器和",{"2":{"670":1}}],["浏览器插件",{"2":{"515":1}}],["浏览器插件一键抓取",{"2":{"515":1}}],["浏览器引擎",{"2":{"338":1}}],["浏览器的开发者工具中保留了原本清晰的类名",{"2":{"924":1}}],["浏览器的一部分",{"2":{"338":1}}],["浏览器的引擎",{"2":{"338":1}}],["浏览器中实现交互性和动态内容",{"2":{"338":1}}],["浏览器全局",{"2":{"306":1}}],["浏览器异步加载方案",{"0":{"305":1}}],["浏览器兼容性",{"2":{"287":1}}],["浏览器调试器会直接显示原始的",{"2":{"217":1}}],["浏览器原生标准协议",{"2":{"342":1}}],["浏览器原生的",{"2":{"180":1}}],["浏览器原生提供了",{"2":{"162":1}}],["浏览器原生",{"2":{"160":1}}],["浏览器原生支持",{"2":{"159":1,"287":1}}],["浏览器内置",{"2":{"160":1,"167":1}}],["浏览器对同一域名的并发长连接限制通常只有",{"2":{"124":1}}],["浏览器收到数据流后",{"2":{"86":1}}],["浏览器端渲染辅助脚本",{"2":{"881":1}}],["浏览器端实时更新",{"2":{"134":1}}],["浏览器端",{"2":{"75":1,"677":1}}],["浏览器拿到服务端返回的",{"2":{"70":1}}],["浏览器接收到的",{"2":{"65":1}}],["浏览器解析",{"2":{"57":1}}],["浏览器显示页面框架",{"2":{"52":1}}],["浏览器逐步消费并替换对应的占位内容",{"2":{"52":1}}],["浏览器立即呈现页面框架",{"2":{"52":1}}],["浏览器直接显示页面内容",{"2":{"39":1}}],["浏览器直接显示内容",{"2":{"39":1}}],["浏览器可以直接呈现",{"2":{"38":1}}],["浏览器执行",{"2":{"35":1,"57":1}}],["浏览器下载",{"2":{"35":1}}],["浏览器",{"2":{"33":1,"114":1,"124":1,"134":1,"308":1,"320":1,"672":1,"809":1}}],["副驾驶",{"2":{"567":1}}],["副作用的完美闭环",{"2":{"104":1}}],["副作用边界与可组合性的透彻推演",{"2":{"1":1}}],["喜欢",{"2":{"565":1}}],["汇聚了所有子模块的公共",{"2":{"853":1}}],["汇聚社区作品",{"2":{"561":1}}],["汇总所有研究成果",{"2":{"416":1}}],["口号",{"2":{"561":1,"564":1}}],["克隆仓库",{"2":{"751":1}}],["克隆",{"2":{"561":1,"562":1,"734":1}}],["克隆任意网站",{"2":{"561":1}}],["克制",{"0":{"378":1}}],["处于乘数的位置",{"2":{"557":1}}],["处理它",{"2":{"953":1}}],["处理所有标准化",{"2":{"934":1}}],["处理兼容前缀",{"2":{"932":1}}],["处理高度定制的第三方",{"2":{"928":1}}],["处理极端定制",{"2":{"928":1}}],["处理字符串",{"2":{"856":1}}],["处理剩余",{"2":{"833":1}}],["处理多字段",{"2":{"833":1}}],["处理分块传输编码",{"2":{"833":1}}],["处理重试逻辑",{"2":{"832":1}}],["处理消息",{"2":{"819":1,"839":1}}],["处理图层父子层级",{"2":{"768":1}}],["处理图层父子层级关系",{"2":{"768":1}}],["处理进入灵感池",{"2":{"631":1}}],["处理广度",{"2":{"628":1}}],["处理团队共识",{"2":{"597":1}}],["处理个人偏好",{"2":{"597":1}}],["处理节点故障",{"2":{"551":1}}],["处理日益复杂的任务",{"2":{"535":1}}],["处理正式输出",{"2":{"488":1}}],["处理思考过程",{"2":{"488":1}}],["处理复杂规划",{"2":{"481":1}}],["处理复杂文件上传的传统全栈或中后台系统",{"2":{"342":1}}],["处理简单逻辑",{"2":{"481":1}}],["处理单一模态",{"2":{"403":1}}],["处理与乐观更新",{"2":{"342":1}}],["处理与后端的通信",{"2":{"274":1}}],["处理全局",{"2":{"342":1}}],["处理模块加载",{"2":{"308":1}}],["处理用例",{"2":{"279":1}}],["处理用户交互",{"2":{"279":1}}],["处理下单流程",{"2":{"278":1}}],["处理请求",{"2":{"275":1}}],["处理权限控制与代码分割",{"2":{"274":1}}],["处理继承体系的场景",{"2":{"270":1}}],["处理操作结果",{"2":{"262":1}}],["处理令牌失效等致命错误",{"2":{"172":1}}],["处理最后一行",{"2":{"168":1}}],["处理跨块边界的行分割问题",{"2":{"168":1}}],["处理中",{"2":{"148":1,"151":1}}],["处理心跳保活方面的额外资源损耗",{"2":{"143":1}}],["处理",{"2":{"92":1,"99":1,"138":1,"203":1,"275":1,"279":1,"342":1,"405":1,"436":1,"447":1,"762":1,"792":1,"796":1,"833":2}}],["处理竞态条件",{"2":{"80":1}}],["处理数据",{"2":{"57":1}}],["处理后端逻辑",{"2":{"20":1}}],["乃至",{"2":{"555":1}}],["困于实现",{"0":{"555":1}}],["困境",{"2":{"536":1}}],["爬虫",{"2":{"553":1}}],["爬虫抓不到内容",{"2":{"57":1}}],["偶尔还能写点",{"2":{"553":1}}],["物理材质",{"2":{"742":1}}],["物理集成",{"2":{"734":1}}],["物理",{"2":{"734":1}}],["物理渲染",{"2":{"729":1}}],["物理式的拼接",{"2":{"553":1}}],["物流单号",{"2":{"200":1}}],["右手用",{"2":{"553":1}}],["努力提高自身的基础概率",{"2":{"917":1}}],["努力",{"2":{"553":1}}],["脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单",{"2":{"553":1}}],["脑力拆解",{"2":{"416":1}}],["焦虑感",{"2":{"952":1}}],["焦虑",{"2":{"945":1}}],["焦虑是本能",{"2":{"552":1}}],["焦点聚焦时自动刷新",{"2":{"342":1}}],["算法工程师无需精通",{"2":{"926":1}}],["算法",{"2":{"677":1,"706":1}}],["算法和营销上都达到专家的标准",{"2":{"458":1}}],["算力",{"2":{"551":1}}],["算力与模型的重工业底座",{"0":{"551":1}}],["肉眼看效果",{"2":{"550":1}}],["摒弃",{"2":{"550":1}}],["敢于设计",{"0":{"555":1}}],["敢于在非核心功能上使用",{"2":{"365":1}}],["敢用",{"2":{"550":1}}],["截然不同的思路",{"2":{"925":1}}],["截断与摘要",{"2":{"546":1}}],["截屏比对",{"2":{"706":1}}],["截屏",{"2":{"372":1}}],["熟悉数据压缩的读者应该知道这个原理",{"2":{"916":1}}],["熟悉并掌握如",{"2":{"545":1}}],["熟练运用",{"2":{"558":1}}],["熟练工",{"2":{"558":1}}],["熟练记忆",{"2":{"555":1}}],["熟练使用",{"2":{"550":1}}],["熟练引入",{"2":{"550":1}}],["熟练应用",{"2":{"545":1}}],["熟练掌握传统架构体系",{"2":{"542":1}}],["熟练掌握",{"2":{"293":1,"551":1}}],["机械落地但缺乏方向",{"2":{"622":1}}],["机器执行",{"2":{"539":1}}],["机制上仍有提升空间",{"2":{"476":1}}],["机制重修清单",{"2":{"432":1}}],["机制对循环依赖有更好的容忍度",{"2":{"315":1}}],["机制以复用底层",{"2":{"115":1}}],["机制",{"2":{"89":1,"119":1,"122":1,"427":1,"590":1}}],["改变下生活方式",{"2":{"959":1}}],["改变之前需要多思考",{"2":{"958":1}}],["改变也就很可能夭折",{"2":{"953":1}}],["改变图表尺寸",{"2":{"719":1}}],["改写选择器",{"2":{"928":1}}],["改写类名",{"2":{"928":1}}],["改编",{"2":{"890":1}}],["改进",{"2":{"875":1}}],["改进错误处理",{"2":{"331":1}}],["改",{"2":{"640":1}}],["改造",{"2":{"565":1}}],["改了什么",{"2":{"537":1}}],["融入",{"2":{"536":1}}],["融合通义千问大模型",{"2":{"518":1}}],["融合",{"2":{"515":1}}],["融合腾讯搜索与知识图谱",{"2":{"512":1}}],["融合智能问答",{"2":{"511":1}}],["融合古典美人元素",{"2":{"505":1}}],["诊断工具",{"2":{"792":1}}],["诊断知识盲区",{"2":{"628":1}}],["诊断",{"2":{"535":1,"933":1,"943":1}}],["诊断和报告选项",{"2":{"203":1}}],["习惯和爱好不是凭空来的",{"2":{"945":1}}],["习惯",{"2":{"533":1}}],["聪明但危险",{"2":{"533":1}}],["逆向工程能力",{"2":{"533":1}}],["尝试把一些别的领域或事务的经验迁移",{"2":{"963":1}}],["尝试实践",{"2":{"959":1}}],["尝试拆解分析出影响事物的本质原因",{"2":{"958":1}}],["尝试改变生活方式",{"2":{"941":1}}],["尝试向内探索",{"2":{"935":1}}],["尝试去寻找答案",{"2":{"906":1}}],["尝试将书中的一些知识用到工作和生活中",{"2":{"941":1}}],["尝试将自己的想法转化为",{"2":{"901":1}}],["尝试将sdd",{"2":{"901":1}}],["尝试用产品",{"2":{"552":1}}],["尝试在完全不求助",{"2":{"531":1}}],["尝试重建它",{"2":{"374":1}}],["挑选一个核心逻辑块",{"2":{"531":1}}],["挑战与生存指南",{"0":{"315":1}}],["挑战",{"2":{"137":1,"283":1}}],["趋势下能得到缓解",{"2":{"957":1}}],["趋势与机会",{"2":{"632":1}}],["趋势日益明显",{"2":{"529":1}}],["趋利避害",{"2":{"426":1}}],["太阳光",{"2":{"734":1}}],["太麻烦",{"2":{"528":1}}],["太低",{"2":{"528":1}}],["太复杂",{"2":{"366":1}}],["介入后",{"2":{"527":1}}],["介绍完五种渲染方案",{"2":{"60":1}}],["疏于维护的内部工具",{"2":{"527":1}}],["盯准任务构成",{"0":{"526":1},"1":{"527":1,"528":1,"529":1}}],["英语即编程语言",{"2":{"532":1}}],["英语",{"2":{"525":1,"530":1}}],["英文项目说明文档",{"2":{"677":1,"762":1}}],["英文处理",{"2":{"519":1}}],["英文",{"2":{"518":1,"734":1,"792":1,"823":1}}],["英文技术文档检索",{"2":{"518":1}}],["英文为主",{"2":{"510":1,"523":1}}],["曾经需要资深工程师耗费数小时",{"2":{"527":1}}],["曾经",{"2":{"525":1}}],["曾是标配",{"2":{"335":1}}],["曾是组织代码的主力",{"2":{"320":1}}],["究竟发生了怎样的质变",{"2":{"525":1}}],["备选方案及其权衡",{"2":{"895":1}}],["备用走低成本模型",{"2":{"523":1}}],["备注说明",{"2":{"472":1}}],["跑起来",{"2":{"523":1}}],["跑",{"2":{"523":1}}],["跑偏",{"2":{"509":1}}],["充分利用任务之间的关系",{"2":{"918":1}}],["充分利用",{"2":{"815":1}}],["充值按量消耗",{"2":{"523":1}}],["充当你的",{"2":{"375":1}}],["充当",{"2":{"2":2}}],["硅基流动上配置",{"2":{"523":1}}],["硅基流动",{"2":{"523":4}}],["硅基流动等部署或调用",{"2":{"519":1}}],["训练完成后模型能够完成一些特定的任务",{"2":{"918":1}}],["训练时长",{"2":{"523":1}}],["训练能力",{"2":{"523":1}}],["训练出来的产物",{"2":{"360":1}}],["芯片的超高速推理平台",{"2":{"523":1}}],["额外属性注入",{"2":{"692":1}}],["额外说明",{"2":{"494":2}}],["额度",{"2":{"522":1}}],["涵盖了场景图更新",{"2":{"745":1}}],["涵盖折线",{"2":{"701":1}}],["涵盖学术论文",{"2":{"632":1}}],["涵盖",{"2":{"522":1}}],["涵盖文本",{"2":{"512":1}}],["摘要提取还是打标签",{"2":{"547":1}}],["摘要",{"2":{"521":1}}],["摘要区域",{"2":{"518":1}}],["眼花缭乱后随便选一个",{"2":{"519":1}}],["养成点击答案中的来源链接核实关键数据的习惯",{"2":{"518":1}}],["风口",{"2":{"620":1}}],["风险信号",{"2":{"632":1}}],["风险",{"2":{"518":1}}],["风格和交互规范",{"2":{"639":1}}],["风格化润色",{"2":{"491":1}}],["风格",{"2":{"203":1,"573":1}}],["风格解析",{"2":{"203":1}}],["阿里生态联动",{"2":{"518":1}}],["阿里旗下夸克浏览器内置的",{"2":{"518":1}}],["阿里云百炼",{"2":{"523":2}}],["阿里云场景",{"2":{"522":1}}],["阿里云",{"2":{"522":1}}],["阿里云生态集成",{"2":{"512":1,"522":1}}],["阿里云工具链深度集成",{"2":{"512":1}}],["阿里云推出的通义千问大模型",{"2":{"512":1}}],["秘塔",{"2":{"518":1}}],["秘塔深度研究",{"2":{"518":2}}],["秘塔搜索",{"2":{"518":4}}],["夸克",{"2":{"518":4}}],["告别长串的嵌套三元运算符",{"2":{"927":1}}],["告别",{"2":{"515":1}}],["告诉编译器返回",{"2":{"231":1}}],["告诉",{"2":{"100":1}}],["帖子一键保存",{"2":{"515":1}}],["装好",{"2":{"515":1}}],["装饰器模式",{"2":{"761":1}}],["装饰器模式的组件注册与分发机制",{"2":{"652":1}}],["装饰器调用",{"2":{"652":1}}],["装饰器注册渲染器时的配置接口",{"2":{"661":1}}],["装饰器注册渲染器",{"2":{"652":1}}],["装饰器注册自定义渲染器",{"2":{"641":1}}],["装饰器",{"2":{"178":1,"769":1,"851":1}}],["装饰器期望返回",{"2":{"178":1}}],["装饰器和",{"2":{"178":1}}],["碎片清单是另外两个清单的主要输入",{"2":{"953":1}}],["碎片清单",{"2":{"953":2,"956":1}}],["碎片化",{"2":{"842":1}}],["碎片化或难以用语言明确表达的知识",{"2":{"614":1}}],["碎片知识收集",{"2":{"515":1}}],["碎片信息收集",{"2":{"515":1}}],["别的方面比较懒",{"2":{"938":1}}],["别人越愿意和你合作",{"2":{"908":2}}],["别名列表",{"2":{"661":1}}],["别名注册",{"2":{"652":1}}],["别让信息躺在那里吃灰",{"2":{"626":1}}],["别忘了点",{"2":{"515":1}}],["别急",{"2":{"494":1}}],["培训内容归档",{"2":{"515":1}}],["培养健康意识",{"2":{"938":1}}],["培养经济直觉",{"2":{"400":1}}],["培养",{"0":{"370":1,"400":1}}],["培养非共识的",{"0":{"359":1}}],["润色",{"2":{"515":1}}],["播放速度",{"2":{"765":1}}],["播放器核心源代码目录",{"2":{"762":1}}],["播放控制",{"2":{"734":1}}],["播放动画",{"2":{"366":1}}],["播客式",{"2":{"515":1}}],["播客式复习",{"2":{"515":1}}],["播客转文字",{"2":{"515":1}}],["课程笔记",{"2":{"515":1,"628":1}}],["课程复习",{"2":{"515":1}}],["笔记反哺",{"2":{"631":1}}],["笔记内嵌",{"2":{"515":1}}],["笔记+协作",{"2":{"515":1}}],["笔者感觉自己属于转变比较慢的一批人",{"2":{"965":1}}],["笔者知道自己不可能达到那种高度",{"2":{"959":1}}],["笔者业余也算是读了一定的书",{"2":{"959":1}}],["笔者业余时间没少在由几个老伙计组成的社群中",{"2":{"957":1}}],["笔者的答案是",{"2":{"959":1}}],["笔者个人认为",{"2":{"957":1}}],["笔者觉得有以下几个要点需要注意",{"2":{"956":1}}],["笔者觉得两个原因都有",{"2":{"942":1}}],["笔者不敢说自己在疫情期间很好地适应了混合工作制",{"2":{"956":1}}],["笔者不但想在工作方面多做些正确的事",{"2":{"950":1}}],["笔者认为思变不能只",{"2":{"958":1}}],["笔者认为",{"2":{"955":1}}],["笔者认为微信读书推出的年度报告产品已不足以总结自己在阅读方面的全貌",{"2":{"947":1}}],["笔者要漫谈的最后一个话题就是混合工作制",{"2":{"955":1}}],["笔者结合准则和自己在第一",{"2":{"954":1}}],["笔者只有一个主要用来管理工作相关事务的清单",{"2":{"953":1}}],["笔者相信",{"2":{"950":1}}],["笔者有机会基于遇到的问题",{"2":{"950":1}}],["笔者曾试图分析过这个现象",{"2":{"950":1}}],["笔者坚信",{"2":{"948":1}}],["笔者希望能继续向着",{"2":{"948":1}}],["笔者希望自己可以结合",{"2":{"945":1}}],["笔者再次坚信",{"2":{"947":1}}],["笔者依旧会买一些纸质书来看",{"2":{"947":1}}],["笔者会结合读过的",{"2":{"945":1}}],["笔者之前在大学时看过一些毛爷爷的相关书和电视剧后很膜拜",{"2":{"959":1}}],["笔者之前在这方面做的也特别少",{"2":{"942":1}}],["笔者之前主动跟人交流的动力不大",{"2":{"945":1}}],["笔者才调整了实践思路",{"2":{"942":1}}],["笔者现在也能自己做出",{"2":{"942":1}}],["笔者花费了",{"2":{"942":1}}],["笔者还是决定在第三阶段试试一段时间",{"2":{"962":1}}],["笔者还拜读了毛教员在青年时期写下的",{"2":{"941":1}}],["笔者还真的刻意梳理过",{"2":{"912":1}}],["笔者寻找方法的主要途径是",{"2":{"939":1}}],["笔者肯定也不例外",{"2":{"936":1}}],["笔者基本没有怎么出过远门",{"2":{"935":1}}],["笔者决定借助开放平台来继续完成一篇复盘总结文章",{"2":{"935":1}}],["笔者这三年也在疫情影响的基础上",{"2":{"935":1}}],["笔者这里不去谈国家或公司会不会在疫情后落地混合工作制",{"2":{"957":1}}],["笔者这里依旧沿用了时间管理中提到的三个清单",{"2":{"956":1}}],["笔者这里依旧把",{"2":{"914":1}}],["笔者这里给出统计与调整示意如下",{"2":{"954":1}}],["笔者这里只阐述下主要实践思路",{"2":{"942":1}}],["笔者这里只提一个人",{"2":{"914":1}}],["笔者这里也不好说看法是否对",{"2":{"919":1}}],["笔者这里就不做过多赘述",{"2":{"910":1}}],["笔者就没有继续写软文了",{"2":{"935":1}}],["笔者就重新学起了数学",{"2":{"912":1}}],["笔者也写不出一篇将多个话题串联起来的长文",{"2":{"958":1}}],["笔者也慢慢变得敢于决断",{"2":{"953":1}}],["笔者也会努力继续深入学习",{"2":{"919":1}}],["笔者也认为",{"2":{"914":1}}],["笔者阐述这个",{"2":{"917":1}}],["笔者和朋友也不例外",{"2":{"917":1}}],["笔者逐渐发现自己在底层原理方面的抽象理解能力不是一般的薄弱",{"2":{"912":1}}],["笔者是一个比较喜欢阅读的人",{"2":{"909":1}}],["笔者貌似找到了一部分答案",{"2":{"907":1}}],["笔者开始质疑起了",{"2":{"906":1}}],["笔者又是近一年没有向外输出软文了",{"2":{"906":1}}],["笔者作为社会中的普通一员",{"2":{"906":1}}],["笔者思考出了一个更具现代感的全栈价值公式",{"2":{"554":1}}],["笔者在第二阶段时还属于身体管理小白",{"2":{"962":1}}],["笔者在落地上述几个话题的改变时",{"2":{"958":1}}],["笔者在娱乐的时候刚好看到有个",{"2":{"954":1}}],["笔者在读书方面体验了以下三种方式",{"2":{"946":1}}],["笔者在这一阶段还挺觉得有成就感的",{"2":{"954":1}}],["笔者在这个话题的最后简单分享两个自己学到的",{"2":{"943":1}}],["笔者在这方面有一定的嗜好",{"2":{"936":1}}],["笔者在这里保证不会引入一些复杂的公式",{"2":{"911":1}}],["笔者在",{"2":{"917":1}}],["笔者在年轻时也不晓得这个道理",{"2":{"908":1}}],["笔者在看书",{"2":{"906":1}}],["笔者在为个人博客引入智能化运营能力",{"2":{"477":1}}],["笔者在杭州良渚参加了一场",{"2":{"457":1}}],["笔者最大的感受是",{"2":{"357":1}}],["笔者将从产品交互",{"2":{"348":1}}],["头部",{"2":{"815":1,"830":2}}],["头部开销沉重",{"2":{"115":1}}],["头脑风暴技能",{"0":{"888":1}}],["头脑风暴",{"2":{"881":1}}],["头脑风暴与大纲生成",{"2":{"515":1}}],["头脑风暴和自动分类归档",{"2":{"515":1}}],["堪称当下最强的个人学习与知识整合工具",{"2":{"515":1}}],["堪称负载均衡器的",{"2":{"129":1}}],["听起来在一定时间内或许不会有问题",{"2":{"962":1}}],["听",{"2":{"909":1}}],["听播客",{"2":{"606":1}}],["听着学",{"2":{"515":1}}],["听风",{"2":{"507":1}}],["办公协作场景",{"2":{"512":1}}],["办公场景",{"2":{"511":1}}],["抖音场景集成",{"2":{"512":1}}],["钉钉生态深度集成",{"2":{"522":1}}],["钉钉",{"2":{"512":1,"522":1}}],["法线贴图",{"2":{"749":1}}],["法线贴图等",{"2":{"734":1}}],["法线",{"2":{"737":1}}],["法线可视化",{"2":{"734":1}}],["法律文件分析",{"2":{"547":1}}],["法律",{"2":{"522":1}}],["法律合同分析",{"2":{"512":1}}],["法规检索",{"2":{"518":1}}],["法规",{"2":{"400":1}}],["陪伴",{"2":{"512":1,"522":1}}],["陪练",{"2":{"375":1}}],["腾讯生态集成",{"2":{"512":1}}],["腾讯文档",{"2":{"512":1}}],["腾讯元宝",{"2":{"512":1}}],["腾讯推出的元宝",{"2":{"512":1}}],["腾讯云",{"2":{"19":1}}],["研发活跃",{"2":{"512":1}}],["研究还揭示了一个引人注目的现象",{"2":{"529":1}}],["研究三档",{"2":{"518":1}}],["研究三种检索深度",{"2":{"518":1}}],["研究辅助",{"2":{"511":1,"521":1}}],["研究笔记",{"2":{"475":1}}],["研究笔记产出",{"2":{"474":1}}],["研究报告产出",{"2":{"474":1}}],["研究员写的",{"2":{"906":1}}],["研究员也能独立搭建用于实验的内部管理后台",{"2":{"529":1}}],["研究员们并行深入互联网寻找具体数字",{"2":{"474":1}}],["研究员的数据优先策略",{"2":{"472":1}}],["研究员收集的量化数据",{"2":{"471":1}}],["研究员",{"2":{"416":1,"471":1}}],["研究性",{"2":{"406":1}}],["研究者得以专注于核心创新结论",{"2":{"406":1}}],["🛑",{"2":{"928":2}}],["🔗",{"2":{"905":1}}],["📮",{"2":{"905":1}}],["💬",{"2":{"905":1}}],["💬隔离",{"2":{"570":1}}],["🟢",{"2":{"591":1}}],["🟡",{"2":{"591":1}}],["🔴",{"2":{"591":1}}],["📌",{"2":{"515":1,"518":1,"523":1}}],["💡",{"2":{"511":1,"512":1,"562":1,"565":1,"928":3}}],["🔑",{"2":{"511":1,"512":1}}],["📖",{"2":{"145":1}}],["幽默对话风格和强大知识推理能力",{"2":{"511":1}}],["答疑",{"2":{"511":1}}],["答案相关性",{"2":{"550":1}}],["答案引用透明",{"2":{"518":1}}],["答案以",{"2":{"518":1}}],["答案生成器",{"2":{"492":1}}],["答案是否附有来源链接",{"2":{"517":1}}],["答案是",{"2":{"387":1}}],["答案",{"2":{"354":1}}],["答案的算力成本极高",{"2":{"354":1}}],["国家都能基于现状做出追赶发达国家到哪种程度的规划",{"2":{"959":1}}],["国际化语言标识",{"2":{"719":1}}],["国际化语言包",{"2":{"647":1}}],["国际化文件发布目录",{"2":{"706":1}}],["国际化构建脚本",{"2":{"706":1}}],["国际化源文件",{"2":{"706":1}}],["国际化",{"2":{"647":1,"706":1}}],["国际化系统",{"2":{"647":1}}],["国际化基础设施",{"2":{"645":1}}],["国际开发者首选",{"2":{"523":1}}],["国际顶尖模型",{"0":{"521":1},"2":{"519":1}}],["国产免费",{"2":{"565":1}}],["国产优秀模型",{"2":{"519":1}}],["国产模型",{"2":{"519":1}}],["国内阅读app",{"2":{"947":1}}],["国内自主支持",{"2":{"564":1}}],["国内出品的",{"2":{"564":1}}],["国内开发者强烈建议先注册",{"2":{"523":1}}],["国内开发者首选硅基流动",{"2":{"523":1}}],["国内聚合推理",{"2":{"523":1}}],["国内可用",{"2":{"523":1}}],["国内直连",{"2":{"523":1}}],["国内直连海外模型中转",{"2":{"523":1}}],["国内直连访问稳定",{"2":{"523":1}}],["国内直连稳定",{"2":{"523":1}}],["国内中转",{"2":{"523":1}}],["国内知名的",{"2":{"523":1}}],["国内知识库",{"2":{"515":1}}],["国内首选",{"2":{"523":1}}],["国内最受开发者欢迎的",{"2":{"523":1}}],["国内优秀模型",{"0":{"522":1}}],["国内访问需要特殊网络",{"2":{"519":1}}],["国内政策法规",{"2":{"518":1}}],["国内新一代知识管理与协作平台",{"2":{"515":1}}],["国内领先",{"2":{"512":1}}],["国内",{"0":{"512":1},"2":{"512":6,"518":4,"522":2}}],["国内模型在中文理解",{"2":{"510":1}}],["国外真的有公司在实践",{"2":{"955":1}}],["国外",{"0":{"511":1},"2":{"518":2,"521":3}}],["落地",{"2":{"905":1}}],["落地路径的真实探索",{"2":{"903":1}}],["落地型创业者",{"2":{"625":1}}],["落地运营",{"2":{"553":1}}],["落地执行",{"2":{"408":1}}],["落在心田便开花",{"2":{"508":1}}],["尾部添加一行",{"2":{"581":1}}],["尾字虚实交替",{"2":{"508":1}}],["尾联直抒",{"2":{"508":1}}],["尾联显境界",{"2":{"507":1}}],["尾联以",{"2":{"507":1}}],["尾联",{"2":{"507":1}}],["尾联化用",{"2":{"505":1}}],["尾联点明其倾城之姿浑然天成",{"2":{"505":1}}],["华",{"2":{"508":1}}],["葭",{"2":{"508":1}}],["斜",{"2":{"508":1}}],["纱",{"2":{"508":1}}],["霞",{"2":{"508":1}}],["押",{"2":{"508":1}}],["押韵基本准确",{"2":{"505":2}}],["梦华",{"2":{"508":1}}],["浮雕效果",{"2":{"677":1}}],["浮光碎",{"2":{"508":1}}],["浮士德",{"2":{"506":1}}],["托微情于微波",{"2":{"508":1}}],["托管数千个开源图像",{"2":{"523":1}}],["托管在我与几个好友共同创建的组织",{"2":{"477":1}}],["托管在我与几位好友共同创建的",{"2":{"467":1}}],["托管以及持续集成",{"2":{"345":1}}],["托管到",{"2":{"32":1}}],["托管平台",{"2":{"23":1}}],["托管静态资源",{"2":{"15":1}}],["呼应赋中",{"2":{"508":1}}],["入缓动控制点",{"2":{"776":1}}],["入门示例",{"2":{"724":1}}],["入梦华",{"2":{"508":1}}],["入口还包括",{"2":{"883":1}}],["入口文件",{"2":{"755":1}}],["入口组件",{"2":{"649":1}}],["入口函数创建",{"2":{"649":1}}],["入口模块",{"2":{"314":1,"778":1}}],["入口",{"2":{"79":1,"523":1,"734":1,"736":1,"762":1,"792":1,"796":1,"823":1,"830":1,"832":1}}],["洲滴泪暗喻阻隔",{"2":{"508":1}}],["婉若游龙",{"2":{"508":1}}],["翩若惊鸿",{"2":{"508":1}}],["仰联化用",{"2":{"508":1}}],["仰联展动态",{"2":{"507":1}}],["轻食一份",{"2":{"961":1,"963":1}}],["轻松涉足复杂的数据可视化前端开发",{"2":{"529":1}}],["轻纱",{"2":{"508":1}}],["轻量版入口",{"2":{"762":3}}],["轻量核心",{"2":{"760":1}}],["轻量快速",{"2":{"636":1}}],["轻量化形态",{"2":{"542":1}}],["轻量级任务",{"2":{"528":1}}],["轻量级聚合",{"2":{"344":2}}],["轻量级帧结构",{"2":{"127":1}}],["轻量级的实时感知",{"0":{"123":1}}],["轻量级",{"2":{"97":1,"112":1}}],["轻量得多",{"2":{"65":1}}],["轻量",{"2":{"32":1,"192":1,"957":1}}],["轻量无依赖",{"2":{"18":1}}],["夕霞",{"2":{"508":1}}],["恨无良媒通神意",{"2":{"508":1}}],["琼琚摇曳步轻纱",{"2":{"508":1}}],["洛水微波映夕霞",{"2":{"508":1}}],["洛神赋",{"2":{"505":5,"508":4}}],["绘图网格",{"2":{"706":1}}],["绘图解析",{"2":{"647":1}}],["绘制等关键步骤",{"2":{"745":1}}],["绘制的全过程",{"2":{"717":1}}],["绘制管线",{"2":{"683":1}}],["绘制核心",{"2":{"683":1}}],["绘制领域模型图",{"2":{"282":1}}],["绘洛水女神之翩跹",{"2":{"508":1}}],["音视频等多种资料",{"2":{"514":1}}],["音视频建议等方式",{"2":{"494":1}}],["音频元素",{"2":{"762":1}}],["音频控制",{"2":{"765":1}}],["音频控制器",{"2":{"762":1}}],["音频控制模块",{"2":{"762":1}}],["音频图层元素",{"2":{"762":1}}],["音频播放库",{"2":{"762":1}}],["音频资源",{"2":{"734":1}}],["音频监听器",{"2":{"734":1}}],["音频源",{"2":{"734":1}}],["音频分析",{"2":{"521":1}}],["音频概述",{"2":{"515":3}}],["音频",{"2":{"511":1,"515":2,"521":2,"523":2}}],["音",{"2":{"511":1,"521":1}}],["音韵设计‌",{"2":{"508":1}}],["音韵设计",{"2":{"508":1}}],["亲自写代码",{"2":{"538":1}}],["亲爱的旅人",{"2":{"508":1}}],["亲爱的诗友",{"2":{"507":1}}],["亲切自然",{"2":{"494":1}}],["✨",{"2":{"507":1,"508":1}}],["雪",{"2":{"959":1}}],["雪纺衫",{"2":{"724":1}}],["雪莱曾说",{"2":{"507":1,"508":1}}],["雪花算法",{"2":{"196":1}}],["澈",{"2":{"507":1}}],["炼字技巧‌",{"2":{"507":1}}],["仄仄平平仄",{"2":{"507":1}}],["嗅觉",{"2":{"507":1}}],["春水",{"2":{"507":2}}],["声",{"2":{"507":1}}],["声明",{"2":{"887":1}}],["声明对其他项目的依赖",{"2":{"216":1}}],["声明文件发布目录",{"2":{"706":1}}],["声明文件是",{"2":{"321":1}}],["声明文件输出目录",{"2":{"203":1}}],["声明文件",{"0":{"321":1},"2":{"203":1,"208":2}}],["声明这是",{"2":{"177":1}}],["声明式着色语言",{"2":{"734":1}}],["声明式数据源管理",{"2":{"706":1}}],["声明式的图谱查询",{"2":{"342":1}}],["声明式",{"2":{"2":1,"339":1,"699":1,"732":1,"733":1}}],["萦",{"2":{"507":2}}],["韵",{"2":{"507":2}}],["韵脚清雅",{"2":{"505":1}}],["庚青",{"2":{"507":1}}],["颈联转写离别之悲",{"2":{"508":1}}],["颈联赋才情",{"2":{"507":1}}],["颈联",{"2":{"507":1,"508":1}}],["颈联以",{"2":{"505":1}}],["颔联",{"2":{"507":1,"508":1}}],["颔联描摹眉眼与朱唇的灵动",{"2":{"505":1}}],["红薯",{"2":{"963":3}}],["红线四",{"2":{"933":1}}],["红线三",{"2":{"933":1}}],["红线二",{"2":{"933":1}}],["红线一",{"2":{"933":1}}],["红线",{"2":{"933":1}}],["红尘",{"2":{"507":1}}],["红尘千丈外",{"2":{"507":2}}],["红队审查者",{"2":{"535":1}}],["红队",{"2":{"375":1}}],["闲调绿绮声",{"2":{"507":2}}],["闲置长连接",{"2":{"136":1}}],["寄语",{"2":{"507":1}}],["袖引暗香萦",{"2":{"507":2}}],["袖引",{"2":{"507":2}}],["眸含春水漾",{"2":{"507":2}}],["眸含",{"2":{"507":2}}],["眸含秋水澈",{"2":{"505":1}}],["奇偶相配",{"2":{"506":1}}],["歌德的",{"2":{"506":1}}],["水分三个指标优化至稳步停留在标准范围内",{"2":{"964":1}}],["水分等指标",{"2":{"964":1}}],["水映天",{"2":{"505":1}}],["水合就会失败",{"2":{"70":1}}],["水合开销大",{"2":{"57":1}}],["水合延迟",{"2":{"41":1}}],["水合过程完成后用户体验与",{"2":{"41":1}}],["水合",{"2":{"38":1,"39":2,"57":1,"59":1,"65":1}}],["凌波",{"2":{"505":1}}],["凌波微步洛川边",{"2":{"505":1}}],["末句将个人惊艳升华为文化共鸣",{"2":{"505":1}}],["末句点出赋文跨越时空的艺术魅力",{"2":{"505":1}}],["末尾可能缺少换行符",{"2":{"168":1}}],["顾客赢了就给同样的下注铜板",{"2":{"917":1}}],["顾盼流辉惊落雁",{"2":{"505":1}}],["顾名思义",{"2":{"384":1}}],["罗盘",{"2":{"602":1}}],["罗袜",{"2":{"505":1}}],["罗袜生尘水映天",{"2":{"505":1}}],["罗衣",{"2":{"505":1}}],["罗衣拂柳烟",{"2":{"505":1}}],["弦",{"2":{"505":1}}],["雁",{"2":{"505":1}}],["典故",{"2":{"505":1}}],["典型工作流",{"0":{"900":1}}],["典型代码量",{"2":{"843":1}}],["典型代表",{"2":{"403":1}}],["典型任务示例",{"2":{"568":1}}],["典型使用",{"0":{"817":1},"1":{"818":1,"819":1,"820":1},"2":{"640":1}}],["典型使用场景",{"2":{"511":1,"512":1,"515":1,"518":1}}],["典型使用示例",{"0":{"169":1}}],["典型痛点描述",{"2":{"465":1}}],["典型案例",{"0":{"416":1},"2":{"411":1}}],["典型的就是",{"2":{"386":1}}],["典型的后端模块化分层架构包含以下核心组件",{"2":{"275":1}}],["典型场景",{"0":{"123":1,"132":1,"595":1}}],["典型应用场景",{"2":{"418":1}}],["典型应用",{"2":{"115":1,"128":1}}],["典型用例",{"0":{"668":1,"724":1,"753":1,"782":1,"811":1}}],["典型用途",{"2":{"580":1}}],["典型用法的示例如下",{"2":{"90":1}}],["典型用户感知",{"2":{"75":1}}],["升级后的三个清单进一步优化了笔者的时间",{"2":{"953":1}}],["升级清单管理的主要思路依旧运用了分解与渐进明细",{"2":{"953":1}}],["升级清单管理有了一定的必要条件",{"2":{"953":1}}],["升级清单管理",{"0":{"953":1}}],["升级自己的心智模型",{"2":{"910":1}}],["升级为能自主遵循工程纪律的",{"2":{"874":1}}],["升级工作价值",{"0":{"406":1},"2":{"406":1}}],["升华其超然境界",{"2":{"507":1}}],["升华主题‌",{"2":{"505":1}}],["绽",{"2":{"505":1}}],["拂",{"2":{"505":1}}],["绾",{"2":{"505":1}}],["营养",{"2":{"941":1}}],["营造澄澈空灵的背景",{"2":{"505":1}}],["营造画面感",{"2":{"505":1}}],["营销不是为了制造博人眼球的头条新闻",{"2":{"380":1}}],["营销页面",{"2":{"75":1}}],["营销网站",{"2":{"18":1,"31":1}}],["山川",{"2":{"505":1}}],["鸿影",{"2":{"505":1}}],["柳烟",{"2":{"505":1}}],["樱唇",{"2":{"505":1}}],["秋水",{"2":{"505":1}}],["暗色主题",{"2":{"706":1}}],["暗香",{"2":{"507":2}}],["暗喻才情雅趣",{"2":{"507":1}}],["暗含",{"2":{"505":1}}],["暗号型",{"2":{"445":1}}],["拈花",{"2":{"505":1}}],["拈花落玉钿",{"2":{"505":1}}],["步数尽量不要超过10000",{"2":{"964":1}}],["步工作流",{"2":{"888":1}}],["步",{"2":{"565":1,"889":2,"961":1,"962":1,"963":1}}],["步以上",{"2":{"564":1,"964":1}}],["步月",{"2":{"505":1}}],["步月惊鸿影",{"2":{"505":1}}],["步骤编排",{"2":{"859":1}}],["步骤类型",{"2":{"790":1}}],["步骤固定",{"2":{"588":1}}],["步骤4",{"0":{"450":1}}],["步骤2",{"2":{"447":1}}],["步骤1",{"2":{"447":1}}],["步骤与约束",{"2":{"442":1}}],["步骤",{"0":{"25":1,"26":1,"27":1,"28":1,"29":1,"447":1,"448":1,"449":1},"2":{"449":1,"583":1}}],["步骤如下",{"2":{"22":1}}],["唇绽绛樱鲜",{"2":{"505":1}}],["云服务已经发展得足够简单",{"2":{"957":1}}],["云端多语言全栈",{"2":{"562":1}}],["云端全栈",{"2":{"561":1}}],["云端在线",{"2":{"561":1}}],["云环鬟",{"2":{"507":1}}],["云鬟映月明",{"2":{"507":2}}],["云鬓",{"2":{"505":1}}],["云鬓绾春色",{"2":{"505":1}}],["云盘",{"2":{"398":1}}],["‌情感递进‌",{"2":{"508":1}}],["‌诗句‌",{"2":{"508":1}}],["‌题记‌",{"2":{"508":1}}],["‌3",{"2":{"505":1,"508":1}}],["‌2",{"2":{"505":1}}],["‌1",{"2":{"505":1,"508":1}}],["‌",{"2":{"505":8,"507":4,"508":4}}],["川",{"2":{"505":2}}],["钿",{"2":{"505":2}}],["鲜活",{"2":{"507":1}}],["鲜",{"2":{"505":2}}],["烟",{"2":{"505":2}}],["美丽的西子姑娘直接掷骰子",{"2":{"917":1}}],["美人",{"2":{"505":1}}],["美人吟",{"2":{"505":2,"507":2}}],["美而不自知",{"2":{"505":1}}],["美观",{"2":{"340":1}}],["五层结构从下到上",{"2":{"847":1}}],["五边形",{"2":{"677":1}}],["五款",{"0":{"568":1}}],["五言律诗",{"2":{"505":1,"507":1}}],["五种方案",{"2":{"67":1}}],["五种方案综合对比",{"0":{"57":1}}],["描边色",{"2":{"770":1}}],["描边宽度等",{"2":{"770":1}}],["描边效果",{"2":{"762":1}}],["描边样式数据",{"2":{"762":1}}],["描边样式处理",{"2":{"683":1}}],["描边",{"2":{"677":1,"680":1,"683":1}}],["描摹灵动气韵",{"2":{"507":1}}],["描绘景象",{"2":{"506":1}}],["描绘景象或讲述故事",{"2":{"504":1}}],["描绘洛神凌波而来的仙姿",{"2":{"505":1}}],["描述要做的事情",{"2":{"900":1}}],["描述测试",{"2":{"881":1}}],["描述开发者使用",{"2":{"746":1}}],["描述基于",{"2":{"745":1}}],["描述光照模型参数",{"2":{"742":1}}],["描述一个操作",{"2":{"650":1}}],["描述项目的核心功能和特点",{"2":{"573":1}}],["描述需求",{"2":{"559":1}}],["描述人物或故事",{"2":{"506":1}}],["描述必须做到两点",{"2":{"448":1}}],["描述即实现",{"2":{"11":1}}],["描述",{"2":{"9":1,"450":1,"451":1,"453":1,"468":1,"499":1,"564":1,"650":2,"680":1,"700":1}}],["七绝",{"2":{"505":1}}],["七言咏怀",{"2":{"508":1}}],["七言体是古代诗歌体裁",{"2":{"506":1}}],["七言绝句",{"2":{"505":1}}],["七言律诗",{"2":{"508":1}}],["七言律诗或五言诗",{"2":{"504":1}}],["七言律诗和五言诗要押韵",{"2":{"504":1,"506":1}}],["七言律诗和五言诗",{"2":{"504":1}}],["七步之内",{"2":{"387":1}}],["围绕市面上常用的",{"2":{"504":1}}],["围绕两个核心包展开",{"2":{"68":1}}],["联系方式",{"2":{"905":1}}],["联网实时性强",{"2":{"512":1}}],["联网搜索",{"2":{"506":1}}],["联网搜索能力",{"2":{"501":1}}],["联合生态伙伴正式开源",{"2":{"441":1}}],["联合的",{"2":{"250":1}}],["联合",{"2":{"249":1}}],["联合与交叉的零等律",{"2":{"244":1}}],["联合与交叉的深层关系",{"0":{"241":1},"1":{"242":1,"243":1,"244":1}}],["联合和交叉与这两个特殊类型的交互",{"2":{"244":1}}],["联合类型和交叉类型本质上对应集合的并与交",{"2":{"250":1}}],["联合类型使用",{"2":{"229":1}}],["联合类型",{"0":{"228":1},"1":{"229":1,"230":1,"231":1,"232":1,"233":1,"234":1}}],["诗是乘着风的种子",{"2":{"508":1}}],["诗是生命在形象中的呼吸",{"2":{"507":1}}],["诗是迷醉心怀的智慧",{"2":{"505":2}}],["诗词搜索",{"2":{"506":1}}],["诗词搜索能力",{"2":{"501":1}}],["诗词搜索能力等工具",{"2":{"501":1}}],["诗人创作的作品可以是纪事性的",{"2":{"506":1}}],["诗人是创作诗歌的艺术家",{"2":{"506":1}}],["诗人",{"2":{"506":1}}],["诗歌题目和诗句",{"2":{"504":1}}],["诗歌小精灵",{"2":{"496":1,"499":1,"506":1,"509":1}}],["俏皮又灵动的小精灵",{"2":{"499":1}}],["门槛高",{"2":{"842":1}}],["门槛极高",{"2":{"551":1}}],["门面",{"2":{"499":1}}],["门户",{"2":{"92":1}}],["达到更高的输出上限",{"2":{"496":1}}],["达到什么样的具体目标",{"2":{"447":1}}],["周日不做要求",{"2":{"962":1,"963":1}}],["周日上午随意",{"2":{"952":1}}],["周六和周日侧重进行分组的无氧运动来加强锻炼",{"2":{"964":1}}],["周六拍篮球的场地和时间不再继续做限制",{"2":{"964":1}}],["周六锻炼继续保持",{"2":{"962":1,"963":1}}],["周六加了一个项目",{"2":{"961":1}}],["周六下午预留健身时间",{"2":{"952":1}}],["周六上午预留网上冲浪和阅读文章充电时间",{"2":{"952":1}}],["周六无重要事不约不逛",{"2":{"952":1}}],["周末做饭",{"2":{"964":1}}],["周末不做限制",{"2":{"964":1}}],["周末午餐",{"2":{"963":1}}],["周末早饭",{"2":{"963":1}}],["周末饮食保持正常",{"2":{"961":1}}],["周末调整没有工作日拆解的细",{"2":{"954":1}}],["周末",{"2":{"953":2,"956":1}}],["周末培养一些做饭的技能",{"2":{"942":1}}],["周末也倒逼自己按照比较严格的作息推动业余实践",{"2":{"935":1}}],["周末在社区活动中再次听到了",{"2":{"496":1}}],["周报",{"2":{"515":1}}],["周期过长",{"2":{"59":1}}],["周期设置两极化",{"2":{"59":1}}],["周期",{"2":{"57":1}}],["周期更新",{"2":{"48":1}}],["周期后",{"2":{"47":1}}],["周期内访问",{"2":{"47":1}}],["台下的反响印证了我们最初的判断",{"2":{"495":1}}],["拍照问答",{"2":{"494":1}}],["呢~",{"2":{"494":1}}],["孩子做应用题总是读不懂题意",{"2":{"494":1,"495":1}}],["示意如下",{"2":{"921":1}}],["示意图",{"2":{"494":1}}],["示例项目",{"2":{"849":1}}],["示例截图",{"2":{"734":1}}],["示例页面",{"2":{"668":1}}],["示例等",{"2":{"442":1}}],["示例场景",{"2":{"315":1}}],["示例代码和演示页面",{"2":{"647":1}}],["示例代码",{"2":{"304":1,"305":1,"306":1,"307":1,"312":1,"318":1,"881":1}}],["示例",{"0":{"152":1,"451":1,"573":1},"2":{"79":1,"156":2,"179":1,"278":1,"281":2,"295":1,"314":1,"321":1,"330":1,"331":1,"412":1,"436":1,"449":1,"451":1,"494":1,"734":1,"922":1,"923":1}}],["挖掘该知识点在真实生活或工作中的趣味应用案例",{"2":{"494":1}}],["挖掘出真正有价值的答案",{"2":{"358":1}}],["趣味延伸",{"2":{"494":1}}],["授人以渔",{"2":{"494":1,"597":1}}],["众所周知",{"2":{"493":1,"908":1,"940":1}}],["幕后导师",{"2":{"492":1}}],["家人等多方的协力帮助",{"2":{"938":1}}],["家长和老师",{"2":{"492":1}}],["家底",{"2":{"384":1}}],["教导而非编程",{"2":{"887":1}}],["教会了我们哪些",{"0":{"918":1}}],["教会agent查找",{"2":{"884":1}}],["教会agent如何使用技能系统",{"2":{"881":1}}],["教会",{"2":{"879":1,"880":1,"887":1}}],["教我们通过有效授权拒绝无谓的干扰",{"2":{"602":1}}],["教家长如何圈出",{"2":{"495":1}}],["教育与科研人员",{"2":{"728":1}}],["教育",{"2":{"492":1}}],["教学课件",{"2":{"515":1}}],["教学案例或生活应用场景",{"2":{"494":1}}],["教学",{"2":{"380":1}}],["谁是更好的选择",{"0":{"592":1}}],["谁才是真正的用户",{"0":{"492":1}}],["谁会被增强",{"0":{"404":1},"1":{"405":1,"406":1,"407":1}}],["谁会被替代",{"0":{"404":1},"1":{"405":1,"406":1,"407":1}}],["赛道",{"0":{"492":1},"2":{"926":1}}],["破局点",{"0":{"492":1}}],["欢迎持续关注本系列的后续更新",{"2":{"491":1}}],["恢复数据状态",{"2":{"708":1,"719":1}}],["恢复",{"2":{"489":1}}],["旗下的旗舰级",{"2":{"511":1}}],["旗下的",{"2":{"477":1}}],["审批",{"2":{"856":1}}],["审查代码质量",{"2":{"889":1}}],["审查代码是否匹配规格",{"2":{"889":1}}],["审查代码",{"2":{"883":1}}],["审查反馈的接收与响应",{"2":{"881":1}}],["审查请求流程与模板",{"2":{"881":1}}],["审查结论会更客观",{"2":{"590":1}}],["审查过程中如果涉及到安全问题",{"2":{"588":1}}],["审查重点",{"2":{"583":1}}],["审查",{"2":{"568":1,"570":1,"881":1}}],["审查后确认提交",{"2":{"567":1}}],["审结果",{"2":{"559":1}}],["审稿与发布",{"2":{"477":1}}],["审计员",{"2":{"426":1,"555":1}}],["近小半年后笔者发现自己在工作方面不那么像四处灭火的",{"2":{"952":1}}],["近裁剪面距离",{"2":{"749":1}}],["近期",{"2":{"477":1}}],["近实时",{"2":{"57":1}}],["半份糙米饭",{"2":{"963":1}}],["半份米饭",{"2":{"961":1}}],["半小时用于健身",{"2":{"952":1}}],["半年减",{"2":{"942":1}}],["半年实现副业变现",{"2":{"624":1}}],["半球光",{"2":{"734":1}}],["半径轴",{"2":{"706":1}}],["半径轴管理",{"2":{"706":1}}],["半自动",{"2":{"477":1}}],["半天即可全团队推行",{"2":{"110":1}}],["校园互联网小作坊",{"2":{"938":1}}],["校对",{"2":{"476":1}}],["校验器执行",{"2":{"685":1}}],["校验请求体",{"2":{"576":1}}],["校验",{"2":{"97":1,"451":1,"583":1,"650":2,"652":1,"685":1}}],["筛选后的量化笔记",{"2":{"475":1}}],["起床",{"2":{"952":1}}],["起居有常",{"2":{"940":1,"941":1}}],["起点",{"2":{"928":1}}],["起初会看一些数学发展史",{"2":{"912":1}}],["起初",{"2":{"909":1}}],["起初我们学习",{"2":{"271":1}}],["起了无数的名字",{"2":{"909":1}}],["起始值",{"2":{"776":1}}],["起草博客文章",{"2":{"631":1}}],["起辅助作用",{"2":{"628":1}}],["起来",{"2":{"515":1}}],["起承转合",{"2":{"507":1,"508":1}}],["起源于",{"2":{"470":1}}],["须找到",{"2":{"470":1}}],["积累新知识的能力越强",{"2":{"908":1}}],["积累新知识的能力就越强",{"2":{"908":1}}],["积累了从",{"2":{"901":1}}],["积累下一次能做得更好的判断力",{"2":{"466":1}}],["积极拥抱新媒介的红利",{"2":{"613":1}}],["积极向上",{"2":{"504":1,"506":1}}],["积攒",{"2":{"119":1}}],["挤压生存空间的",{"2":{"466":1}}],["讨论搭子",{"2":{"610":1}}],["讨论深入",{"2":{"610":1}}],["讨论是检验理解的试金石",{"2":{"610":1}}],["讨论",{"0":{"610":1},"2":{"466":1}}],["讨论记录和技术文档",{"2":{"417":1}}],["衔接缺乏",{"2":{"465":1}}],["杠杆层",{"2":{"558":1}}],["杠杆",{"0":{"557":1},"2":{"902":1}}],["杠杆能力组合成一个属于自己的飞轮",{"2":{"466":1}}],["杠杆能力没有一刀切的答案",{"2":{"462":1}}],["杠杆力",{"0":{"462":1}}],["乘数",{"0":{"462":1},"2":{"902":1}}],["懂一点代码",{"2":{"461":1}}],["懂得等待",{"2":{"388":1}}],["敲代码",{"0":{"461":1}}],["敲定状态拓扑",{"2":{"12":1}}],["敲定",{"0":{"6":1}}],["敲定拓扑位置",{"0":{"4":1},"1":{"5":1,"6":1}}],["▲",{"2":{"458":1,"459":1,"463":1,"464":1}}],["丧失了对产品全貌的掌控感与",{"2":{"457":1}}],["杂项",{"2":{"734":1}}],["杂乱的脚本和抽象的领域规范统一封装到",{"2":{"456":1}}],["杂货铺",{"2":{"327":1}}],["串联成高可靠性的业务流",{"2":{"455":1}}],["串行陷阱",{"2":{"59":1}}],["范围计算",{"2":{"706":1}}],["范围",{"2":{"451":1}}],["范式注入到生成流",{"2":{"901":1}}],["范式的沉淀或许仍需时间",{"2":{"539":1}}],["范式的落地不是一蹴而就的规则设定",{"2":{"534":1}}],["范式的根本性反思",{"2":{"71":1}}],["范式落地",{"0":{"534":1},"1":{"535":1,"536":1,"537":1,"538":1},"2":{"525":1}}],["范式",{"0":{"506":1},"1":{"507":1,"508":1},"2":{"559":1}}],["范式选择",{"0":{"432":1}}],["范式类型",{"2":{"414":1}}],["范式革命",{"2":{"125":1}}],["范式转移",{"2":{"104":1}}],["获得技能使用能力后",{"2":{"883":1}}],["获得的知识与思考深度",{"2":{"606":1}}],["获得确认后再执行",{"2":{"451":1}}],["获取日志",{"2":{"807":1}}],["获取全局",{"2":{"800":1}}],["获取适配器",{"2":{"792":1}}],["获取指定帧的值",{"2":{"776":1}}],["获取指定维度名称",{"2":{"719":1}}],["获取自身矩阵",{"2":{"776":1}}],["获取动画时长",{"2":{"776":1}}],["获取动态能力",{"2":{"20":1}}],["获取当前帧的实时属性值",{"2":{"774":1}}],["获取当前缓存中的数据快照",{"2":{"108":1}}],["获取后端特定数据",{"2":{"748":1}}],["获取场景图",{"2":{"736":1}}],["获取完整的数据项模型",{"2":{"719":1}}],["获取数据项的视觉编码",{"2":{"719":1}}],["获取数据值",{"2":{"719":1}}],["获取连接的",{"2":{"719":1}}],["获取选项",{"2":{"719":1}}],["获取平台特定实现",{"2":{"706":1}}],["获取命中节点",{"2":{"684":1}}],["获取子元素",{"2":{"776":1}}],["获取子",{"2":{"663":1}}],["获取方法",{"2":{"662":1}}],["获取和处理信息",{"2":{"621":1}}],["获取最丰沛的知识",{"2":{"613":1}}],["获取现有项目",{"2":{"449":1}}],["获取所有子",{"2":{"663":1}}],["获取所有数据",{"2":{"261":1}}],["获取所有博客文章",{"2":{"26":1}}],["获取装饰器元数据",{"2":{"203":1}}],["获取流的读取器",{"2":{"168":1}}],["获取流读取器",{"2":{"166":1}}],["获取响应体的流读取器",{"2":{"166":1}}],["获取到结果",{"2":{"149":1}}],["获取结果",{"2":{"138":1}}],["获取用户信息",{"2":{"115":1,"330":1}}],["获取用户列表",{"2":{"107":1}}],["获取该用户的项目列表",{"2":{"101":1}}],["获取该文章的所有评论",{"2":{"28":1}}],["获取项目",{"2":{"28":1}}],["获取单篇文章",{"2":{"26":1}}],["获取",{"2":{"26":1,"345":1,"472":1,"663":1,"719":3,"807":1}}],["冲突",{"2":{"923":1}}],["冲突处理",{"2":{"451":1}}],["冲突的位运算",{"2":{"203":1}}],["熔断机制",{"2":{"450":1}}],["糟糕设计",{"2":{"448":1}}],["验收标准",{"2":{"447":1}}],["验证步骤",{"2":{"895":1}}],["验证的完整流程",{"2":{"893":1}}],["验证清单与检查流程",{"2":{"881":1}}],["验证响应",{"2":{"832":1}}],["验证夹具",{"2":{"792":1}}],["验证质量",{"2":{"628":1}}],["验证假设",{"2":{"556":1}}],["验证机制",{"2":{"450":1}}],["验证数据",{"2":{"449":1}}],["验证",{"0":{"369":1},"2":{"461":1,"535":1}}],["验证工具",{"2":{"274":1}}],["验证基础要求",{"2":{"201":1}}],["验证码",{"2":{"200":1}}],["验证通过",{"2":{"169":1}}],["验证通过后再进入下一个模块的开发",{"2":{"9":1}}],["搞清楚",{"2":{"447":1}}],["硬核的技术积累与工程实践",{"2":{"903":1}}],["硬链接节省磁盘",{"2":{"845":1}}],["硬编码细节过多",{"2":{"445":1}}],["硬套多层架构",{"2":{"190":1}}],["硬套",{"2":{"189":1}}],["脆弱型",{"2":{"445":1}}],["百万行级别",{"2":{"567":1}}],["百炼",{"2":{"522":1}}],["百科全书",{"2":{"558":1}}],["百科全书型",{"2":{"445":1}}],["百科知识查询",{"2":{"518":1}}],["百科",{"2":{"518":1}}],["百度地图扩展",{"2":{"706":1}}],["百度的低代码平台",{"2":{"640":1}}],["百度出品的无代码应用搭建平台",{"2":{"561":1}}],["百度千帆",{"2":{"523":2}}],["百度文库深度联动",{"2":{"518":1}}],["百度百科",{"2":{"518":1}}],["百度在传统搜索基础上接入文心大模型",{"2":{"518":1}}],["百度",{"2":{"518":2}}],["百度推出的文心一言",{"2":{"512":1}}],["百度搜索",{"2":{"494":3}}],["百分数",{"2":{"494":1}}],["百分比",{"2":{"470":1,"472":1}}],["百级以下",{"2":{"58":1}}],["激起层层涟漪",{"2":{"505":1}}],["激发孩子对数学的兴趣",{"2":{"494":1}}],["激活阶段",{"2":{"443":1}}],["激励",{"2":{"380":1}}],["意识",{"2":{"556":1}}],["意涵丰富",{"2":{"506":1}}],["意象提炼‌",{"2":{"508":1}}],["意象提炼",{"2":{"508":1}}],["意象经营‌",{"2":{"507":1}}],["意象经营重于修辞运用",{"2":{"506":1}}],["意象空灵",{"2":{"507":1}}],["意象",{"2":{"505":1}}],["意象选择‌",{"2":{"505":2}}],["意图识别",{"2":{"443":1}}],["意味着任何一个为零",{"2":{"366":1}}],["意味着服务端的",{"2":{"153":1}}],["意味着获取即过期",{"2":{"104":1}}],["意味着同时学习",{"2":{"93":1}}],["参考文档",{"2":{"734":1,"792":1}}],["参考竞品设计",{"2":{"562":1}}],["参考",{"2":{"453":1,"454":1,"455":1,"890":1}}],["参考规范文件",{"2":{"451":1}}],["参考指南",{"2":{"442":1}}],["参考资源",{"2":{"442":1}}],["参数双层加载",{"2":{"857":1}}],["参数处理",{"2":{"791":1}}],["参数直观",{"2":{"730":1}}],["参数实现了完美的会话恢复",{"2":{"485":1}}],["参数校验",{"2":{"336":1}}],["参数类型为",{"2":{"258":1}}],["参数过滤数据",{"2":{"179":1}}],["参数为",{"2":{"166":1}}],["参数做高性能的衍生数据计算",{"2":{"107":1}}],["参数",{"2":{"46":1,"482":1,"768":1}}],["揭开",{"2":{"441":1}}],["月底",{"2":{"963":1}}],["月份迁移几篇旧文后",{"2":{"935":1}}],["月之暗面官方",{"2":{"522":1}}],["月",{"2":{"441":1}}],["系列数据存储",{"2":{"709":1}}],["系列基类",{"2":{"706":1}}],["系列",{"2":{"523":1}}],["系列国内稳定代理",{"2":{"523":1}}],["系列模型",{"2":{"709":1}}],["系列模型国内中转的",{"2":{"523":1}}],["系列模型官方",{"2":{"522":1}}],["系列有深度推理链",{"2":{"521":1}}],["系列具备深度推理链能力",{"2":{"521":1}}],["系列深度推理链",{"2":{"511":1}}],["系列中正式推出了",{"2":{"441":1}}],["系统论",{"2":{"958":1}}],["系统级皮肤容器",{"2":{"928":1}}],["系统是一组相互关联的要素",{"2":{"908":1}}],["系统自举",{"2":{"887":1}}],["系统自顶向下分为",{"2":{"704":1}}],["系统引导技能",{"2":{"881":1}}],["系统由四层组成",{"2":{"879":1}}],["系统整体架构",{"0":{"830":1}}],["系统有多个构建入口文件",{"2":{"764":1}}],["系统完整经历了",{"2":{"717":1}}],["系统通过",{"2":{"715":1}}],["系统通常由规划",{"2":{"408":1}}],["系统分为四个层次",{"2":{"675":1}}],["系统管理数据加载",{"2":{"653":1}}],["系统支持同步",{"2":{"652":1}}],["系统主题定义",{"2":{"647":1}}],["系统从下到上分为",{"2":{"645":1}}],["系统且连贯",{"2":{"614":1}}],["系统为何而存在",{"2":{"539":1}}],["系统韧性",{"0":{"527":1}}],["系统化能力",{"2":{"509":1}}],["系统化方法论",{"0":{"395":1},"1":{"396":1,"397":1,"398":1,"399":1}}],["系统提示词",{"2":{"570":1}}],["系统提示",{"2":{"482":1}}],["系统架构",{"0":{"469":1},"1":{"470":1,"471":1,"472":1}}],["系统编排",{"0":{"461":1}}],["系统性地探讨如何写好一个",{"2":{"444":1}}],["系统将不再仅依赖通用模型能力",{"2":{"443":1}}],["系统熵值",{"2":{"432":1}}],["系统熵增以及用户认知的负担",{"2":{"365":1}}],["系统只需要定位到清单中的特定索引进行重试或局部修正",{"2":{"430":1}}],["系统会在",{"2":{"486":1}}],["系统会带着执行结果",{"2":{"429":1}}],["系统会通过",{"2":{"416":1}}],["系统中提交一个包含",{"2":{"418":1}}],["系统中积累的变量总和",{"2":{"384":1}}],["系统响应",{"2":{"410":1}}],["系统响应等",{"2":{"408":1,"410":1}}],["系统洞察力",{"2":{"389":1}}],["系统里的",{"0":{"384":1}}],["系统并不是一团乱麻",{"2":{"383":1}}],["系统的",{"2":{"886":1}}],["系统的输出展现出了令人惊喜的",{"2":{"473":1}}],["系统的核心",{"0":{"383":1}}],["系统的灵魂",{"2":{"336":1}}],["系统黑盒",{"0":{"382":1}}],["系统必须直接拒绝回答",{"2":{"352":1}}],["系统构建者",{"2":{"303":1}}],["系统",{"0":{"768":1},"2":{"132":1,"344":1,"382":2,"383":1,"420":1,"439":1,"645":1,"647":1,"653":1,"787":1,"908":2}}],["系统资源占用大盘",{"2":{"123":1}}],["赋能的开发流中",{"2":{"495":1}}],["赋能构建者",{"2":{"440":1}}],["赋予其透明度计算能力",{"2":{"929":1}}],["赋予其",{"2":{"921":1}}],["赋予记忆",{"2":{"544":1}}],["赋予",{"2":{"355":1,"426":1,"484":1}}],["桥接",{"2":{"439":1,"647":1,"929":1}}],["里绑定变量",{"2":{"924":1}}],["里写",{"2":{"922":1}}],["里",{"2":{"438":1,"908":1}}],["里精准舞蹈",{"2":{"367":1}}],["助力你在不同项目需求下做出精准的技术选型",{"2":{"928":1}}],["助手平台",{"2":{"512":1}}],["助手无缝接入各类外部系统",{"2":{"439":1}}],["助手",{"0":{"510":1},"1":{"511":1,"512":1},"2":{"438":1,"511":4,"512":1,"515":2}}],["助教",{"2":{"407":1}}],["持之以恒地坚持下去",{"2":{"941":1}}],["持有实际的二维数据表",{"2":{"709":1}}],["持久化存储用户画像与历史交互状态",{"2":{"546":1}}],["持久化此",{"2":{"486":1}}],["持久上下文",{"2":{"437":1}}],["持续几个月后",{"2":{"953":1}}],["持续阶段",{"2":{"942":1}}],["持续执行原则",{"2":{"889":1}}],["持续侵蚀团队的认知资源与开发效率",{"2":{"527":1}}],["持续为产品与业务创造不可替代的价值",{"2":{"440":1}}],["持续创新与改进",{"2":{"400":1}}],["持续部署",{"2":{"345":1}}],["持续演进",{"2":{"282":1}}],["持续重构",{"2":{"277":1}}],["持续读取流中的数据块",{"2":{"166":1}}],["持续累积到",{"2":{"166":1}}],["持续文本流",{"2":{"142":1}}],["持续迭代新功能来刺激用户",{"2":{"398":1}}],["持续迭代",{"2":{"9":1}}],["背景",{"2":{"734":1}}],["背景渲染",{"2":{"734":1}}],["背景工具类",{"2":{"647":1}}],["背景上下文",{"2":{"437":1}}],["背后都有一个",{"2":{"609":1}}],["背后的",{"2":{"382":1,"908":1}}],["背后的需求是",{"2":{"366":1}}],["背后的情绪可能是",{"2":{"366":1}}],["固守传统媒介的人获取知识的成本会越来越高",{"2":{"613":1}}],["固化个人的工作习惯",{"2":{"436":1}}],["固化企业内部的统一规范",{"2":{"436":1}}],["固定执行流程",{"2":{"851":1}}],["固定成本",{"2":{"391":1}}],["固定部分仅",{"2":{"127":1}}],["固定优先",{"2":{"59":1}}],["临时数据处理",{"2":{"435":1}}],["临时修改文案语气",{"2":{"435":1}}],["短",{"2":{"907":1}}],["短视频内容策划",{"2":{"512":1,"522":1}}],["短句翻译等",{"2":{"435":1}}],["短期可完成的项目是可以协作完成的",{"2":{"957":1}}],["短期",{"2":{"410":1}}],["短期记忆的协同管理",{"2":{"546":1}}],["短期记忆",{"2":{"408":1,"410":1,"546":1}}],["⚠️",{"2":{"435":1,"762":1,"922":1}}],["瞬时记忆遗忘",{"2":{"431":1}}],["瞬间看起来像个专家",{"2":{"359":1}}],["瞬间响应",{"2":{"100":1,"342":1}}],["判断是否为",{"2":{"719":1}}],["判断当前路由是否活跃",{"2":{"662":1}}],["判断当前任务匹配时自动触发",{"2":{"585":1}}],["判断",{"2":{"622":1}}],["判断维度",{"2":{"592":1}}],["判断一款",{"2":{"517":1}}],["判断力的本质",{"2":{"460":1}}],["判断力不只是",{"2":{"460":1}}],["判断力",{"0":{"460":1}}],["判断为",{"2":{"174":1}}],["判定某技能匹配当前任务时",{"2":{"443":1}}],["判定是否继续",{"2":{"431":1}}],["谋定",{"2":{"429":1}}],["计划标题",{"2":{"895":1}}],["计划中的单个执行单元",{"2":{"884":1}}],["计划",{"2":{"884":1,"895":1}}],["计划文档审查提示词",{"2":{"881":1}}],["计划编写规范",{"2":{"881":1}}],["计划阶段",{"2":{"712":1}}],["计划清单",{"2":{"429":1}}],["计费方式",{"2":{"523":1}}],["计算体验",{"2":{"902":1}}],["计算",{"2":{"734":1}}],["计算着色器",{"2":{"734":1}}],["计算增量步长",{"2":{"712":1}}],["计算机或棋类等高度抽象",{"2":{"614":1}}],["计算机使用",{"2":{"411":1}}],["计算秒数",{"2":{"523":1}}],["计算秒数计费",{"2":{"523":1}}],["计算订单项数量",{"2":{"281":1}}],["计算订单总价",{"2":{"278":1}}],["计算总价",{"2":{"281":1}}],["计算两个数的和",{"2":{"187":1}}],["计算指数退避延迟时间",{"2":{"175":1}}],["计算下一次需要等待的时间",{"2":{"149":1}}],["计算节点与",{"2":{"142":1}}],["计算成本",{"2":{"89":1}}],["计算得出",{"2":{"5":1}}],["鼓励模型在当前任务中",{"2":{"426":1}}],["闭关",{"2":{"906":1,"935":1,"958":1}}],["闭合线条",{"2":{"734":1}}],["闭环",{"2":{"568":1}}],["闭环控制的艺术",{"0":{"426":1}}],["闭门造车打磨产品",{"2":{"377":1}}],["另提供",{"2":{"564":1}}],["另一方面也想借助网络平台",{"2":{"959":1}}],["另一方面在前台用自然语言将解题思路拆解为通俗易懂的",{"2":{"493":1}}],["另一人只能押小",{"2":{"917":1}}],["另一扇则照向当下社会的真实肌理",{"2":{"604":1}}],["另一个关键点",{"2":{"590":1}}],["另一个负责代码实现",{"2":{"535":1}}],["另一个常用模式",{"2":{"234":1}}],["另一种辩证的思考逐渐浮现",{"2":{"457":1}}],["另外",{"2":{"419":1,"509":1,"959":1,"963":1}}],["催生了对基础架构的重新审视",{"2":{"419":1}}],["操作类型",{"2":{"895":1}}],["操作用户已登录的浏览器",{"2":{"785":1}}],["操作的直接对象",{"2":{"765":1}}],["操作的文件匹配指定路径时",{"2":{"576":1}}],["操作封装",{"2":{"762":1}}],["操作体验",{"2":{"672":1}}],["操作系统",{"2":{"491":1}}],["操作",{"2":{"436":1,"443":1,"449":1,"451":1,"567":1,"656":1,"677":1,"705":1,"712":1,"713":1,"762":1,"791":1}}],["操作手册",{"2":{"436":2,"442":1}}],["操作步骤是否无歧义",{"2":{"450":1}}],["操作步骤",{"2":{"418":1}}],["操作符实现",{"2":{"270":1}}],["操作符组合多个约束条件",{"2":{"270":1}}],["操作符将多个类型或接口组合在一起",{"2":{"267":1}}],["操作符结合",{"2":{"263":1}}],["操作符",{"2":{"262":1,"268":1}}],["读过教员鞭辟入里的文章后",{"2":{"941":1}}],["读完一本书",{"2":{"610":1}}],["读起来必须动脑筋",{"2":{"608":1}}],["读者可以随时停下翻回反复琢磨",{"2":{"606":1}}],["读书工具选择与实践",{"0":{"947":1}}],["读书不等于学习",{"2":{"945":1}}],["读书的方式",{"0":{"946":1}}],["读书的目的",{"0":{"945":1}}],["读书的核心目的是为了获取信息",{"2":{"613":1}}],["读书与学习相关的事务",{"2":{"953":1}}],["读书与学习两方面的习惯得以保住",{"2":{"952":1}}],["读书与学习自然也成为了一种常用的方式",{"2":{"945":1}}],["读书与学习是两码事",{"2":{"945":1}}],["读书与学习的区别是什么呢",{"2":{"945":1}}],["读书与学习",{"2":{"906":1,"936":1,"950":1}}],["读书从来不是为了把自己变成一个装满各类观点的",{"2":{"615":1}}],["读书对于这类人来说",{"2":{"612":1}}],["读书将异化为排解情绪与博取关注的工具",{"2":{"612":1}}],["读书多不等于人才",{"2":{"612":2}}],["读书",{"0":{"607":1,"611":1},"1":{"608":1,"609":1,"610":1,"612":1,"613":1,"614":1},"2":{"613":1}}],["读书允许读者专注其中",{"2":{"606":1}}],["读书是从外界接受信息的一种方式",{"2":{"606":1}}],["读懂大时代变革背后隐秘的结构性逻辑与阶层焦虑",{"2":{"604":1}}],["读懂整个代码库→制定方案→逐步执行",{"2":{"567":1}}],["读写多文件",{"2":{"564":1}}],["读写本地文件",{"2":{"436":1}}],["读来如涟漪荡漾",{"2":{"508":1}}],["读",{"2":{"418":1,"909":1,"948":2}}],["读取传入的",{"2":{"922":1}}],["读取字节流",{"2":{"830":1}}],["读取缓存的",{"2":{"795":1}}],["读取",{"2":{"472":1,"792":1,"796":1,"880":1,"886":1,"928":1}}],["读取研究笔记和图表",{"2":{"470":1}}],["读取研究笔记",{"2":{"470":1}}],["读取规范文档",{"2":{"443":1}}],["读取速度极快",{"2":{"304":1}}],["读取文件系统",{"2":{"82":1}}],["活动是游客拿着在宋城钱庄里兑换的",{"2":{"917":1}}],["活动给定的命题是",{"2":{"492":1}}],["活得不糊里糊涂",{"2":{"914":1}}],["活",{"2":{"417":1,"515":1}}],["死循环",{"2":{"620":1}}],["死板的工具",{"2":{"420":1}}],["死",{"2":{"417":1}}],["搜到初步答案后",{"2":{"518":1}}],["搜集至少",{"2":{"416":1}}],["搜索资料",{"2":{"567":1}}],["搜索会有",{"2":{"518":1}}],["搜索支持多轮对话",{"2":{"518":1}}],["搜索入口",{"2":{"518":1}}],["搜索体验最佳之一",{"2":{"518":1}}],["搜索引擎",{"2":{"518":1}}],["搜索引擎的范式正在发生转移",{"2":{"348":1}}],["搜索工具的关键维度",{"2":{"517":1}}],["搜索增强实时问答",{"2":{"512":1}}],["搜索",{"0":{"516":1},"1":{"517":1,"518":1},"2":{"512":1,"517":1,"518":7,"792":1,"899":1}}],["搜索与编辑文件的权力",{"2":{"484":1}}],["搜索阶段",{"2":{"468":1}}],["搜索关键词",{"2":{"412":1}}],["搜索的终局不仅仅是回答问题",{"2":{"355":1}}],["搜索转型时的历史包袱",{"2":{"354":1}}],["搜索只是大模型的",{"2":{"351":1}}],["搜索是一项工程与模型的交响",{"0":{"351":1},"1":{"352":1,"353":1}}],["搜索产品的设计逻辑与用户体验优化路径",{"2":{"348":1}}],["搜索产品",{"2":{"348":1}}],["搜索结果",{"2":{"92":1}}],["污染",{"2":{"415":1,"576":1}}],["演变为",{"2":{"926":1,"959":1}}],["演变成了指挥若定的交响乐",{"2":{"415":1}}],["演示",{"2":{"515":1}}],["演示文稿与内容创作平台",{"2":{"515":1}}],["演示文稿的实用性",{"2":{"514":1}}],["演示环节",{"2":{"495":1}}],["演进历程",{"2":{"272":1}}],["演进",{"0":{"503":1},"1":{"504":1,"505":1},"2":{"115":1}}],["较多",{"2":{"647":2}}],["较高",{"2":{"432":1,"928":2}}],["较为简单的任务",{"2":{"414":1}}],["较低",{"2":{"15":1,"155":1,"432":1}}],["观测",{"2":{"414":1,"427":2}}],["观察同事们",{"2":{"964":1}}],["观察",{"2":{"478":1,"484":1}}],["观察生活",{"2":{"400":1}}],["观察者",{"2":{"851":1}}],["观察者模式",{"2":{"734":1,"761":1,"767":1}}],["观察者模式观察者模式",{"0":{"302":1}}],["观察者等经典设计模式自然地融入日常开发时",{"2":{"303":1}}],["擅长的",{"2":{"527":1}}],["擅长代码生成",{"2":{"512":1}}],["擅长长文本理解",{"2":{"511":1}}],["擅长写五言诗",{"2":{"506":1}}],["擅长写七言律诗",{"2":{"506":1}}],["擅长写现代诗",{"2":{"506":1}}],["擅长通过诗歌来表达情感",{"2":{"506":1}}],["擅长创作现代诗",{"2":{"504":1}}],["擅长逻辑推理",{"2":{"417":1}}],["擅长随机应变",{"2":{"414":1}}],["擅长处理具有确定性",{"2":{"349":1}}],["脱颖而出",{"2":{"414":1,"419":1}}],["脱离现实的纯粹阅读",{"2":{"614":1}}],["脱离",{"2":{"556":1}}],["脱离浏览器也能构建复杂的系统应用",{"2":{"304":1}}],["脱离业务场景谈协议与通信方案的优劣是毫无意义的",{"2":{"141":1}}],["脱离具体业务场景谈技术选型毫无意义",{"2":{"67":1}}],["言行一致",{"2":{"412":1}}],["忘记",{"2":{"410":1}}],["感兴趣的可在网上搜一些更详细的资料",{"2":{"914":1}}],["感知",{"2":{"677":1}}],["感知上下文多文件",{"2":{"564":1}}],["感知用户真实感受的能力",{"2":{"366":1}}],["感觉不错",{"2":{"550":1}}],["感受那份穿越千年的心动",{"2":{"505":1}}],["感性领域",{"2":{"496":1}}],["感官记忆",{"2":{"410":1}}],["涉及的文件路径",{"2":{"895":1}}],["涉及认证",{"2":{"592":1}}],["涉及用户隐私",{"2":{"523":1}}],["涉及用户私人状态的组件",{"2":{"88":1}}],["涉及政务",{"2":{"519":1}}],["涉及关键词",{"2":{"451":1}}],["涉及哪些领域知识或工具",{"2":{"447":1}}],["涉及信息的长时间保留和在需要时的精准检索",{"2":{"410":1}}],["涉及信息的长时间保留和检索",{"2":{"408":1}}],["帮你找到开发效率与架构韧性之间的最佳杠杆",{"2":{"934":1}}],["帮你写完",{"2":{"555":1}}],["帮孩子圈出关键词",{"2":{"494":1}}],["帮我做一个",{"2":{"892":1}}],["帮我处理",{"2":{"583":1}}],["帮我找出",{"2":{"567":1}}],["帮我调研并搭建一个技术博客",{"2":{"414":1}}],["帮我写一个电商",{"2":{"408":1}}],["帮助团队在日常协作中保持样式代码的一致性与可维护性",{"2":{"928":1}}],["帮助函数",{"2":{"792":1}}],["帮助梳理逻辑",{"2":{"628":1}}],["帮助想法从描述直达成品",{"2":{"561":1}}],["帮助家长举一反三",{"2":{"494":1}}],["帮助建立对该领域的初步认知",{"2":{"468":1}}],["帮助用户一步步构建新的",{"2":{"454":1}}],["帮助处理前端开发项目",{"2":{"448":1}}],["帮助不擅长提问的用户将模糊的",{"2":{"350":1}}],["帮助读者理解",{"2":{"348":1}}],["帮助开发者构建清晰的领域模型",{"2":{"278":1}}],["帮助我们根据项目需求做出合适的技术选型",{"2":{"109":1}}],["​",{"2":{"408":5}}],["客户管理等内部系统",{"2":{"640":1}}],["客户沟通等高价值环节",{"2":{"406":1}}],["客户端执行全部在核心层",{"2":{"856":1}}],["客户端库",{"2":{"813":1}}],["客户端配置",{"2":{"274":1}}],["客户端解析零成本",{"2":{"180":1}}],["客户端解析毫无额外成本",{"2":{"160":1}}],["客户端层",{"2":{"180":1}}],["客户端可用于断线重连",{"2":{"178":1}}],["客户端说完",{"2":{"176":1}}],["客户端时",{"2":{"170":1}}],["客户端错误",{"2":{"169":1,"171":1}}],["客户端方案",{"2":{"167":1}}],["客户端的",{"2":{"164":1}}],["客户端通过",{"2":{"164":1,"178":1}}],["客户端通过验证签名来确认请求的真实性",{"2":{"133":1}}],["客户端复杂度",{"2":{"155":1}}],["客户端长轮询实现",{"2":{"153":1}}],["客户端处理完响应后",{"2":{"151":1}}],["客户端收到响应后",{"2":{"151":1}}],["客户端收到回调后",{"2":{"131":1}}],["客户端发请求后",{"2":{"151":1}}],["客户端发出请求后",{"2":{"150":1}}],["客户端实现",{"2":{"163":1}}],["客户端实现简单",{"2":{"149":1}}],["客户端实现示例",{"0":{"149":1,"153":1}}],["客户端挂起等待",{"2":{"149":1}}],["客户端退避轮询实现",{"2":{"149":1}}],["客户端下一次查询的等待时间并非固定",{"2":{"146":1}}],["客户端提交任务后获得",{"2":{"143":1}}],["客户端持",{"2":{"142":1}}],["客户端持有",{"2":{"138":1,"139":1}}],["客户端应当具备幂等处理能力",{"2":{"133":1}}],["客户端与服务器可随时",{"2":{"127":1}}],["客户端与服务器可双向",{"2":{"125":1}}],["客户端在请求头中声明",{"2":{"126":1}}],["客户端在重连时会自动携带最后一次收到的",{"2":{"122":1}}],["客户端在接收到",{"2":{"117":1}}],["客户端缓存",{"0":{"90":1}}],["客户端无缝替换",{"2":{"86":1}}],["客户端动态详情",{"2":{"79":1}}],["客户端交互组件",{"2":{"79":1}}],["客户端水合",{"0":{"70":1},"2":{"58":1}}],["客户端躺平",{"2":{"57":1}}],["客户端累死服务器清闲",{"2":{"57":1}}],["客户端全包",{"2":{"57":1}}],["客户端获取",{"2":{"57":1}}],["客户端运行时",{"2":{"57":1}}],["客户端完成",{"2":{"35":1}}],["客户端渲染",{"2":{"34":1,"57":1}}],["客户端",{"0":{"162":1},"1":{"163":1,"164":1},"2":{"33":1,"57":1,"72":1,"103":1,"131":1,"138":1,"148":1,"149":4,"151":1,"153":4,"166":1,"175":1,"439":1,"706":1,"792":1,"843":1}}],["咨询师从",{"2":{"406":1}}],["辅以自然意象",{"2":{"505":1}}],["辅导",{"2":{"405":1}}],["辅助脚本",{"2":{"881":1}}],["辅助技能",{"2":{"880":1}}],["辅助技术方案",{"2":{"540":1}}],["辅助诊断与改善",{"2":{"628":1}}],["辅助开发",{"2":{"567":1}}],["辅助工具类",{"2":{"647":1}}],["辅助工具",{"2":{"553":1,"647":1}}],["辅助工具使用",{"2":{"512":1}}],["辅助",{"2":{"526":1,"559":1}}],["辅助下几分钟即可完成初稿并通过基础验证",{"2":{"527":1}}],["辅助下",{"2":{"525":1,"556":1}}],["辅助润色与二次加工",{"2":{"515":1}}],["辅助写作",{"2":{"515":2}}],["辅助完成知识体系搭建",{"2":{"406":1}}],["辅助增强型",{"0":{"406":1}}],["辅助编程日益普及的今天",{"2":{"332":1}}],["辅助编程普及的今天",{"2":{"309":1}}],["辅助函数",{"2":{"274":1,"647":1,"762":1}}],["辅助分析并输出组件层级树",{"2":{"2":1}}],["题库刷题",{"2":{"405":1}}],["技能补全",{"2":{"902":1}}],["技能自动激活",{"2":{"900":1}}],["技能自动触发机制测试",{"2":{"881":1}}],["技能间转换规则",{"2":{"896":1}}],["技能间调用契约",{"0":{"896":1}}],["技能描述",{"2":{"895":1}}],["技能唯一标识",{"2":{"895":1}}],["技能引擎",{"2":{"887":1}}],["技能优先级规则等内容",{"2":{"887":1}}],["技能优先级测试",{"2":{"881":1}}],["技能输出的设计文档",{"2":{"884":1}}],["技能输出的细粒度任务列表",{"2":{"884":1}}],["技能文件同步到",{"2":{"881":1}}],["技能加载与注册",{"2":{"881":1}}],["技能编写参考示例",{"2":{"881":1}}],["技能编排层",{"2":{"879":1,"880":1}}],["技能开发方法论与测试框架",{"2":{"881":1}}],["技能创建过程的技术日志",{"2":{"881":1}}],["技能设计注解",{"2":{"881":5}}],["技能内容注入",{"2":{"879":1}}],["技能组合",{"2":{"879":1}}],["技能组合在一起",{"2":{"789":1}}],["技能载体",{"2":{"877":1}}],["技能主文件",{"2":{"792":1}}],["技能介入",{"2":{"588":1}}],["技能特别适合那些触发条件明确",{"2":{"587":1}}],["技能定义库",{"2":{"881":1}}],["技能定义",{"2":{"586":1}}],["技能是",{"2":{"585":1}}],["技能与命令的根本区别",{"0":{"585":1}}],["技能树的补全",{"2":{"557":1}}],["技能分身",{"2":{"557":1}}],["技能的使用场景",{"0":{"587":1}}],["技能的结构",{"0":{"586":1}}],["技能的物理叠加",{"2":{"553":1}}],["技能的插件化",{"0":{"547":1}}],["技能可多次重复使用",{"2":{"547":1}}],["技能萎缩的风险",{"2":{"531":1}}],["技能目录",{"2":{"470":1}}],["技能名称",{"2":{"449":1}}],["技能",{"0":{"890":1},"2":{"405":1,"406":1,"454":1,"455":1,"587":1,"792":1,"884":1,"887":2,"893":1,"918":1}}],["技术适配",{"2":{"928":2}}],["技术底色源于工作几年后积累了较为扎实的工程化实践",{"2":{"901":1}}],["技术决策",{"2":{"845":1}}],["技术亮点",{"0":{"815":1},"2":{"815":1}}],["技术选择",{"2":{"758":1}}],["技术选型",{"2":{"702":1,"787":1}}],["技术选型决策",{"2":{"365":1}}],["技术选型决策树",{"2":{"155":1}}],["技术选型的成熟标志",{"2":{"67":1}}],["技术博客",{"2":{"632":1}}],["技术自嗨",{"2":{"556":1}}],["技术门槛的降低意味着工程师可以随时将生活和工作中的",{"2":{"541":1}}],["技术视野",{"2":{"540":1}}],["技术文档",{"2":{"518":1}}],["技术检索",{"2":{"518":1}}],["技术边界与场景的完美契合",{"0":{"493":1}}],["技术正在快速走向成熟与普及",{"2":{"477":1}}],["技术要点说明",{"0":{"472":1}}],["技术报告等",{"2":{"468":1}}],["技术发展迅猛",{"2":{"434":1}}],["技术拆解",{"0":{"408":1},"1":{"409":1,"410":1,"411":1,"412":1}}],["技术方法迭代日新月异",{"2":{"400":1}}],["技术方法在不断更新",{"2":{"400":1}}],["技术债务",{"0":{"527":1},"2":{"527":2}}],["技术债",{"2":{"386":1}}],["技术的进步与工具的完善",{"2":{"381":1}}],["技术的演进从来不是",{"2":{"144":1}}],["技术是我们的压舱石",{"2":{"376":1}}],["技术理解力",{"2":{"376":1}}],["技术推演",{"2":{"374":1}}],["技术上完美但用户不买账",{"2":{"366":1}}],["技术可实现性",{"2":{"363":1}}],["技术护城河",{"0":{"351":1},"1":{"352":1,"353":1}}],["技术工程背景的工程师可暂时只关注于模型预备训练",{"2":{"551":1}}],["技术工程",{"2":{"348":1}}],["技术周刊内容分类主要包括如下",{"2":{"346":1}}],["技术周刊",{"2":{"346":4}}],["技术团队的全栈转型",{"2":{"344":1}}],["技术演进",{"2":{"292":1}}],["技术复杂度",{"2":{"283":1}}],["技术实现",{"2":{"279":1,"287":1,"410":2}}],["技术实现应服务于业务需求",{"2":{"277":1}}],["技术洁癖",{"2":{"135":1}}],["技术",{"2":{"115":1,"342":1,"344":1,"457":1,"546":1,"642":1,"821":1}}],["技术栈构建",{"2":{"843":1}}],["技术栈分析",{"0":{"821":1},"1":{"822":1}}],["技术栈与选型对比",{"0":{"642":1,"673":1,"702":1,"730":1,"758":1,"787":1,"845":1,"877":1}}],["技术栈说明",{"2":{"575":1}}],["技术栈约束",{"2":{"570":1}}],["技术栈原型",{"2":{"562":1}}],["技术栈不再仅仅是前端框架和数据库",{"2":{"540":1}}],["技术栈",{"2":{"342":1,"558":1,"562":1,"573":1,"895":1}}],["技术栈无关",{"2":{"285":1}}],["技术栈为例",{"2":{"274":1,"275":1}}],["技术栈团队",{"2":{"93":1}}],["技术栈选型",{"0":{"23":1}}],["技术栈依赖",{"2":{"18":1}}],["技术会过时",{"2":{"12":1}}],["政策",{"2":{"400":1,"518":1}}],["宏观经济日新月异",{"2":{"400":1}}],["帕累托改进",{"2":{"399":1}}],["帕累托优化与最优体验",{"0":{"394":1}}],["诱饵效应",{"2":{"397":1}}],["群体化定价",{"2":{"397":1}}],["三阶段建立的习惯基础上",{"2":{"964":1}}],["三阶段编译",{"2":{"741":1}}],["三餐慢慢靠向合理均衡",{"2":{"942":1}}],["三个人约定分工",{"2":{"917":1}}],["三个方面的方向或目标",{"2":{"907":1}}],["三个提示词文件",{"2":{"889":1}}],["三个具体渲染器",{"2":{"768":1}}],["三个层次",{"2":{"380":1}}],["三色调滤镜",{"2":{"762":1}}],["三角形",{"2":{"677":1,"734":2}}],["三种功法",{"2":{"958":1}}],["三种渲染器并存",{"2":{"757":1,"758":1}}],["三种渲染模式",{"2":{"755":1}}],["三种消费模式",{"0":{"634":1}}],["三种编程范式速览",{"0":{"559":1}}],["三不要",{"0":{"611":1},"1":{"612":1,"613":1,"614":1},"2":{"615":1}}],["三要",{"0":{"607":1},"1":{"608":1,"609":1,"610":1},"2":{"615":1}}],["三款均基于",{"2":{"565":1}}],["三款工具横向对比",{"0":{"565":1}}],["三大核心能力",{"2":{"564":2}}],["三步感受",{"2":{"559":1}}],["三步走工作流",{"2":{"494":1}}],["三类",{"2":{"947":2}}],["三类模型服务的核心差异",{"2":{"519":1}}],["三类常见",{"0":{"452":1},"1":{"453":1,"454":1,"455":1}}],["三级能力矩阵",{"2":{"459":1}}],["三级价格歧视",{"2":{"397":1}}],["促使用户转化和付费",{"2":{"397":1}}],["察人性",{"2":{"397":1}}],["租房案例中",{"2":{"394":1}}],["沉没成本描述的是已经发生且与当前决策无关的费用",{"2":{"393":1}}],["沉没成本",{"2":{"393":1}}],["沉淀出了多种主流的",{"2":{"920":1}}],["沉淀理解",{"2":{"631":1}}],["沉淀在书中的信息",{"2":{"606":1}}],["沉淀为一套稳定的工程范式",{"2":{"525":1}}],["沉淀团队的代码评审流程",{"2":{"437":1}}],["沉淀持久上下文的",{"2":{"437":1}}],["沉淀特定领域的操作最佳实践",{"2":{"436":1}}],["沉淀",{"0":{"375":1},"2":{"371":1,"628":1}}],["沉淀复用资产",{"2":{"297":1}}],["逛遍景点再说",{"2":{"393":1}}],["锁定效应",{"2":{"392":1}}],["涨价不仅面临博弈风险",{"2":{"392":1}}],["肥宅快乐水",{"2":{"392":1}}],["竞品速览",{"2":{"518":1}}],["竞品分析",{"2":{"518":1}}],["竞争分析命令",{"2":{"470":1}}],["竞争",{"2":{"392":1}}],["竞争博弈的经典案例",{"2":{"392":1}}],["竞技游戏",{"2":{"128":1}}],["昂贵资产",{"2":{"391":1}}],["冰柜里的存储空间不仅是资源",{"2":{"391":1}}],["冰柜不仅昂贵",{"2":{"391":1}}],["冰冷的逻辑机器",{"2":{"366":1}}],["利润通过极致的规模化获得",{"2":{"392":1}}],["利乐纸易塑形",{"2":{"391":1}}],["利用包围盒",{"2":{"740":1}}],["利用工具来施展",{"2":{"412":1}}],["利用边际效用递减",{"2":{"398":1}}],["利用替代成本构建锁定效应",{"2":{"398":1}}],["利用沉没成本",{"2":{"398":2}}],["利用比较优势寻找产品核心竞争优势",{"2":{"396":1}}],["利用供求关系发现市场蓝海",{"2":{"396":1}}],["利用索引友好",{"2":{"311":1}}],["利用构建工具的代码分割功能实现按需加载",{"2":{"308":1}}],["利用交叉类型组合多个独立的能力",{"2":{"248":1}}],["利用交叉类型创建名义上不同的类型",{"2":{"247":1}}],["利用",{"2":{"2":1,"122":1,"188":1,"244":1,"308":1,"412":1,"416":1,"425":1,"542":1,"557":1,"603":1,"901":1,"903":1,"928":3}}],["考虑滞后效应",{"2":{"389":1}}],["考量点",{"2":{"133":1}}],["没说什么",{"2":{"625":1}}],["没反应",{"2":{"388":1}}],["没有清晰的认清问题本质",{"2":{"946":1}}],["没有自由式",{"2":{"946":1}}],["没有失败测试就没有产品代码",{"2":{"890":1}}],["没有人有义务把复杂的底层逻辑拆解成现成的方法论",{"2":{"619":1}}],["没有沉下心来对技术或业务进行深度解析与架构思考",{"2":{"617":1}}],["没有疾病",{"2":{"605":1}}],["没有产品力的工程师",{"2":{"556":1}}],["没有输出的思考",{"2":{"375":1}}],["没有模块化机制",{"2":{"298":1}}],["没有唯一标识的对象",{"2":{"278":1}}],["没有匹配的重载签名",{"2":{"238":1}}],["没有任何值能满足",{"2":{"237":1}}],["没有任何实际收益",{"2":{"66":1}}],["没有",{"2":{"89":2,"144":1,"316":1,"450":1,"934":1}}],["没有交互",{"2":{"66":1}}],["往复",{"2":{"686":1}}],["往日之不可追",{"2":{"393":1}}],["往热水方向拧了一点",{"2":{"388":1}}],["往往难以在开发效率",{"2":{"928":1}}],["往往都是稀疏且简单的",{"2":{"916":1}}],["往往比看一部电视剧或漫无目的地浏览网页能获得更多知识",{"2":{"606":1}}],["往往比获取数据更复杂",{"2":{"104":1}}],["往往超过看几部剧",{"2":{"606":1}}],["往往逻辑性强",{"2":{"606":1}}],["往往源于敢于挑战",{"2":{"601":1}}],["往往会逐渐膨胀",{"2":{"575":1}}],["往往会因为任务链信息量太大而信息量太大而陷入",{"2":{"415":1}}],["往往表现得像一个",{"2":{"530":1}}],["往往被无限期搁置",{"2":{"528":1}}],["往往就藏在那些看不见的连接关系里",{"2":{"383":1}}],["往往就是下一款好产品的起点",{"2":{"376":1}}],["往往能从你忽略的历史背景",{"2":{"375":1}}],["往往不是屏幕上的像素",{"2":{"367":1}}],["往往是思考的深度和执行的颗粒度不到位",{"2":{"622":1}}],["往往是为了解答",{"2":{"609":1}}],["往往是潜意识在极短时间内完成的高维计算",{"2":{"364":1}}],["往往是正确答案",{"2":{"66":1}}],["往往发生在三个维度的交汇点",{"2":{"363":1}}],["往往需要数周时间",{"2":{"361":1}}],["性味平衡",{"2":{"941":1}}],["性价比",{"2":{"528":1}}],["性价比高",{"2":{"512":1}}],["性格迥然不同",{"2":{"387":1}}],["性能指标要求",{"2":{"928":1}}],["性能与工程",{"2":{"926":1}}],["性能与网络优化",{"2":{"97":1}}],["性能基准测试",{"2":{"734":1}}],["性能测试",{"2":{"677":1}}],["性能问题排查时",{"2":{"592":1}}],["性能开销",{"2":{"292":1}}],["性能优先",{"2":{"730":1}}],["性能优化的",{"0":{"313":1}}],["性能优化",{"2":{"291":1,"341":1,"680":1,"761":1,"762":1}}],["性能优秀",{"2":{"287":1}}],["性能差",{"2":{"287":1}}],["性能更好",{"2":{"203":1}}],["性能体系的核心支柱",{"2":{"85":1}}],["性能进阶",{"0":{"85":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1}}],["性能极致",{"2":{"32":1}}],["性能",{"2":{"15":1,"331":1,"889":1}}],["撞上了",{"2":{"387":1}}],["凡是有",{"2":{"387":1}}],["凡是需要",{"2":{"128":1}}],["频谱分析",{"2":{"734":1}}],["频发",{"2":{"386":1}}],["频繁触发重新构建",{"2":{"31":1}}],["马太效应",{"2":{"386":1,"909":1}}],["吸取医生的建议",{"2":{"941":1}}],["吸引的用户就越多",{"2":{"386":1}}],["吸收",{"2":{"244":1,"622":1}}],["造就指数级增长",{"0":{"386":1}}],["造成了带宽的极大浪费",{"2":{"115":1}}],["种方案",{"2":{"888":1}}],["种常见借口",{"2":{"887":1}}],["种常见借口并逐条反制",{"2":{"876":1}}],["种不同组合的产物文件",{"2":{"778":1}}],["种不同体积的产物",{"2":{"757":1}}],["种产物组合",{"2":{"762":1}}],["种对象池减少",{"2":{"757":1}}],["种",{"2":{"757":1}}],["种形状修饰器",{"2":{"757":1}}],["种辅助器",{"2":{"734":1}}],["种几何体",{"2":{"734":1}}],["种组件",{"2":{"706":1}}],["种实现",{"2":{"706":1}}],["种图表",{"2":{"706":2}}],["种图表类型",{"2":{"701":1}}],["种坐标系",{"2":{"701":1}}],["种内置滤镜",{"2":{"672":1}}],["种连接关系",{"2":{"383":1}}],["种要素",{"2":{"383":1}}],["滞后效应让原本在空间维度上就很复杂的系统",{"2":{"388":1}}],["滞后效应",{"0":{"388":1},"2":{"383":2,"388":1}}],["岗位",{"2":{"383":1}}],["几乎所有项目",{"2":{"921":1}}],["几乎每个角色实际上都至少通过另外某一个人发生人际关系",{"2":{"907":1}}],["几何数据",{"2":{"737":1}}],["几何数据容器",{"2":{"737":1}}],["几何节点",{"2":{"734":1}}],["几何体修改器",{"2":{"734":1}}],["几何体管理",{"2":{"734":1}}],["几何体",{"2":{"730":1,"734":1}}],["几何碰撞计算",{"2":{"673":1}}],["几秒钟即可获得",{"2":{"515":1}}],["几秒~几十秒",{"2":{"142":1}}],["几百个微小的齿轮和游丝",{"2":{"383":1}}],["叫做",{"2":{"382":1}}],["黑白灰",{"2":{"926":1}}],["黑名单机制",{"2":{"597":1}}],["黑名单",{"2":{"594":1}}],["黑盒",{"2":{"509":1}}],["黑盒子才是规律产生的原因",{"2":{"908":1}}],["黑盒子",{"2":{"382":1,"908":1}}],["黑箱",{"2":{"255":1}}],["线条",{"2":{"734":1}}],["线条材质",{"2":{"734":1}}],["线图",{"2":{"706":1}}],["线段长度池",{"2":{"762":1}}],["线段",{"2":{"677":1,"734":2}}],["线索生长出来的",{"2":{"609":1}}],["线性",{"2":{"770":1}}],["线性雾",{"2":{"734":1}}],["线性的技能叠加",{"2":{"553":1}}],["线性累加",{"2":{"59":1}}],["线上问题频发",{"2":{"387":1}}],["线上故障率",{"2":{"385":1}}],["线上出现了一个偶现的",{"2":{"382":1}}],["找准自己的生态位",{"0":{"552":1}}],["找准一个社区",{"2":{"381":1}}],["找一道类似的题试试看",{"2":{"494":1}}],["找出初步结果中的不足",{"2":{"426":1}}],["找到最接近真相的答案",{"2":{"915":1}}],["找到行尾",{"2":{"833":1}}],["找到一种既不伤害核心用户体验",{"2":{"394":1}}],["找到调节回路",{"2":{"389":1}}],["找到增强回路",{"2":{"389":1}}],["找到关键因果链",{"2":{"389":1}}],["找到核心存量",{"2":{"389":1}}],["找到正确的问题",{"2":{"357":1}}],["找到返回匹配项",{"2":{"259":1}}],["找到冒号位置",{"2":{"168":1}}],["娱乐",{"2":{"380":1}}],["早餐",{"2":{"961":1,"962":1,"963":1}}],["早饭吃得好",{"2":{"959":1}}],["早防早治",{"2":{"941":1}}],["早在几年前",{"2":{"918":1}}],["早早交付的敏捷性",{"2":{"378":1}}],["早期信息被稀释",{"2":{"468":1}}],["早期删减了复杂的格式兼容",{"2":{"373":1}}],["早期发现用户不愿预订",{"2":{"366":1}}],["早期利用病毒式裂变降低获客成本",{"2":{"363":1}}],["早期",{"2":{"298":1,"320":1}}],["雇佣软件而不是雇佣人力",{"2":{"378":1}}],["亦能通过技术手段实现无缝流转",{"2":{"378":1}}],["譬如",{"2":{"378":1}}],["身为新时代的打工人",{"2":{"959":1}}],["身体康复了",{"2":{"959":1}}],["身体却因原本在大学时没有怎么在意",{"2":{"959":1}}],["身材无敌",{"2":{"959":1}}],["身边充斥着讲这个方面的人和书",{"2":{"950":1}}],["身边充满着太多类似笔者这种不够注重自身健康的人",{"2":{"938":1}}],["身处时间碎片化",{"2":{"950":1}}],["身处一个知识迭代速度和生活节奏都在加快的时代",{"2":{"945":1}}],["身处当下的技术变革期",{"2":{"378":1}}],["身份验证",{"2":{"792":1}}],["身份验证不便",{"2":{"160":1}}],["唯有在框架生态",{"2":{"928":1}}],["唯有能用自己的语言让别人听懂",{"2":{"610":1}}],["唯有拥抱",{"2":{"598":1}}],["唯有洞察力和对业务流的把控力",{"2":{"552":1}}],["唯有当用户为这个人工流程付费后",{"2":{"378":1}}],["唯寄相思入梦华",{"2":{"508":1}}],["唯一真理来源",{"2":{"929":1}}],["唯一合法出口",{"2":{"896":1}}],["唯一",{"2":{"663":1}}],["唯一的路径是重构和精进自己",{"2":{"622":1}}],["唯一的重点是",{"2":{"153":1}}],["唯一路径是",{"2":{"622":1}}],["唯一标识",{"2":{"26":1,"442":1,"748":1}}],["总体重需要呈现下降确实",{"2":{"964":1}}],["总体重",{"2":{"964":1}}],["总文件数",{"2":{"699":1,"755":1}}],["总有效源文件",{"2":{"643":1}}],["总是使用自定义日志模块",{"2":{"571":1}}],["总是在实现之前编写测试",{"2":{"571":1}}],["总是被各种",{"2":{"382":1}}],["总而言之",{"2":{"509":1}}],["总产出就是零",{"2":{"458":1}}],["总的来说",{"2":{"431":1}}],["总能用技术手段帮大家搞定繁琐工作",{"2":{"377":1}}],["总结与反思",{"0":{"381":1}}],["总结与选型建议",{"0":{"154":1},"1":{"155":1,"156":1,"157":1}}],["总结的复杂问题",{"2":{"349":1}}],["总结",{"0":{"32":1,"250":1,"389":1,"400":1,"456":1,"495":1},"2":{"412":1,"514":1,"515":6,"628":1}}],["心理健康",{"2":{"941":1}}],["心智负担",{"2":{"928":1}}],["心中有数",{"2":{"916":3}}],["心脏起搏器",{"2":{"886":1}}],["心流",{"2":{"564":1,"565":2}}],["心存敬畏",{"2":{"376":1}}],["心跳与重连机制",{"2":{"801":1}}],["心跳检测",{"2":{"129":1}}],["心跳保活或消息确认等机制",{"2":{"129":1}}],["品牌色",{"2":{"925":1}}],["品牌动效",{"2":{"756":1}}],["品牌使用指南",{"2":{"436":1}}],["品牌忠诚",{"2":{"398":1}}],["品位",{"2":{"376":1}}],["品味",{"0":{"359":1},"2":{"359":2}}],["洞察力模型就是",{"2":{"908":1}}],["洞察力公式",{"0":{"366":1}}],["洞察更优路径的时机",{"2":{"906":1}}],["洞察未言之意",{"0":{"625":1}}],["洞察层",{"2":{"558":1}}],["洞察趋势前瞻",{"2":{"459":1}}],["洞察不仅是关于需求",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1}}],["洞察",{"2":{"376":1}}],["假想敌",{"2":{"375":1}}],["假设一个方程代表从一个角度观察得到的结果",{"2":{"915":1}}],["假设两家公司生产同质化产品",{"2":{"392":1}}],["假设挑战",{"2":{"366":1}}],["假设我们需要处理一些数学运算",{"2":{"295":1}}],["假设我们有一个电商平台",{"2":{"288":1}}],["假设最少",{"2":{"198":1}}],["假设",{"2":{"137":1}}],["了",{"2":{"528":1,"952":1}}],["了什么",{"2":{"373":1}}],["了解一些常识",{"2":{"964":1}}],["了解某个技能或东西",{"2":{"946":1}}],["了解了",{"2":{"901":1}}],["了解了上述核心配置选项后",{"2":{"204":1}}],["了解",{"2":{"622":1}}],["了解轮询与短连接",{"2":{"145":1}}],["虚线偏移",{"2":{"770":1}}],["虚线属性",{"2":{"762":1}}],["虚线材质",{"2":{"734":1}}],["虚荣",{"2":{"373":1}}],["虚拟化产品了",{"2":{"957":1}}],["虚拟社区",{"2":{"957":1}}],["虚拟列表",{"2":{"647":1}}],["虚拟健康助手基于可穿戴设备数据提供",{"2":{"407":1}}],["虚拟",{"2":{"11":1}}],["掌控感",{"2":{"372":1}}],["掌握高维信息的人确实拥有更强的资源调配能力",{"2":{"619":1}}],["掌握方法",{"2":{"615":1}}],["掌握思考方法的唯一途径",{"2":{"608":1}}],["掌握逆风而行的主动权",{"2":{"603":1}}],["掌握编程语言的数量",{"2":{"553":1}}],["掌握了这套生态的协同机制",{"2":{"440":1}}],["掌握",{"2":{"316":1,"456":1}}],["掌握一些模块化设计的原则和实践技巧",{"2":{"293":1}}],["掌握泛型意味着站在了类型系统的高阶入口",{"2":{"263":1}}],["掌握泛型需要遵循一些业界总结的最佳实践",{"2":{"263":1}}],["掌握这类",{"2":{"491":1}}],["掌握这个模型",{"2":{"250":1}}],["掌握这些编译与调试的核心技能",{"2":{"226":1}}],["键时的毫秒级响应",{"2":{"372":1}}],["爽",{"2":{"372":1}}],["录屏",{"2":{"372":1}}],["惊鸿",{"2":{"508":1}}],["惊鸿照影浮光碎",{"2":{"508":1}}],["惊叹",{"2":{"372":1}}],["惊群效应",{"2":{"147":1}}],["捕捉情绪颗粒度",{"0":{"372":1}}],["捕获异常",{"2":{"110":1}}],["千帆平台支持",{"2":{"512":1}}],["千丈外",{"2":{"507":1}}],["千秋一赋动心弦",{"2":{"505":1}}],["千万不要只停留在消费者的视角感叹",{"2":{"371":1}}],["千级以上",{"2":{"58":1}}],["四处看一看后",{"2":{"959":1}}],["四平八稳",{"2":{"959":1}}],["四象限",{"2":{"912":1}}],["四个维度圈示意图",{"2":{"907":1}}],["四元数",{"2":{"734":1}}],["四阶段流水线",{"0":{"633":1}}],["四肢",{"2":{"544":1}}],["四步法",{"0":{"446":1},"1":{"447":1,"448":1,"449":1,"450":1}}],["四步闭环",{"2":{"371":1}}],["四大核心模块构成",{"2":{"408":1}}],["四种策略",{"0":{"75":1}}],["四种方案各自的原理",{"2":{"33":1}}],["魔法",{"0":{"371":1},"1":{"372":1,"373":1,"374":1,"375":1},"2":{"371":1}}],["魔力指标",{"2":{"350":1}}],["摩擦力日记",{"0":{"370":1}}],["损失函数",{"2":{"369":1}}],["练习方法",{"2":{"369":1,"370":1}}],["喂数据",{"2":{"367":1}}],["喂给",{"2":{"3":1}}],["哪里没有时间",{"2":{"953":1}}],["哪里有刹车",{"2":{"389":1}}],["哪种方式不好",{"2":{"946":1}}],["哪些完全禁止",{"2":{"593":1}}],["哪些需要确认",{"2":{"593":1}}],["哪些操作可以直接执行",{"2":{"593":1}}],["哪些必须交由",{"2":{"541":1}}],["哪些只能往后放",{"2":{"528":1}}],["哪些任务值得投入时间",{"2":{"528":1}}],["哪些被长期忽视的",{"2":{"525":1}}],["哪些执行环节最消耗你的时间",{"2":{"462":1}}],["哪些环节必须由传统代码",{"2":{"367":1}}],["哪怕决断错了也要干",{"2":{"953":1}}],["哪怕只是一个自动化脚本",{"2":{"465":1}}],["哪怕只涨一点点",{"2":{"392":1}}],["哪怕早期模型偶尔会出现幻觉",{"2":{"350":1}}],["哪怕你从",{"2":{"336":1}}],["照片认证",{"2":{"366":1}}],["房东验证",{"2":{"366":1}}],["信任陌生房东",{"2":{"366":1}}],["信息化",{"2":{"947":1}}],["信息熵越来越大",{"2":{"908":1}}],["信息统计",{"2":{"748":1}}],["信息更新回调",{"2":{"662":1}}],["信息密度已趋于饱和的",{"2":{"629":1}}],["信息落地清单",{"2":{"626":1}}],["信息不真实",{"2":{"626":1}}],["信息不对称的根源",{"2":{"622":1}}],["信息不对称",{"2":{"616":1}}],["信息解读",{"0":{"625":1}}],["信息焦虑",{"2":{"624":1}}],["信息筛选",{"0":{"624":1}}],["信息无法转化为任何价值",{"2":{"622":1}}],["信息本质是工具",{"2":{"622":1}}],["信息积累不够",{"2":{"621":1}}],["信息即权力",{"2":{"619":1}}],["信息泛滥与脑力带宽的消耗",{"0":{"619":1},"1":{"620":1,"621":1}}],["信息茧房",{"0":{"618":1}}],["信息媒介的演进始终朝着",{"2":{"613":1}}],["信息检索",{"2":{"512":1}}],["信息图等形式直观呈现分析结果",{"2":{"468":1}}],["信息层级是否清晰",{"2":{"460":1}}],["信息调研流程",{"2":{"436":1}}],["信息差",{"0":{"616":1},"1":{"617":1,"618":1},"2":{"411":1,"622":1}}],["信息收集",{"2":{"406":1}}],["信息",{"2":{"115":1,"622":1}}],["飞线",{"2":{"706":1}}],["飞书旗下会议智能转录与总结服务",{"2":{"515":1}}],["飞书妙记",{"2":{"515":4}}],["飞书智能创作生成纪要",{"2":{"515":1}}],["飞书智能创作",{"2":{"515":3}}],["飞书",{"2":{"512":2,"515":3}}],["飞书聊天",{"2":{"128":1}}],["飞机",{"2":{"366":1}}],["火车",{"2":{"366":1}}],["质疑一切",{"2":{"366":1}}],["质量门",{"2":{"888":1}}],["质量保证",{"2":{"647":2,"677":6,"706":4,"792":1,"881":29}}],["质量底线",{"0":{"538":1}}],["质量的密度才是衡量",{"2":{"526":1}}],["质量检查清单",{"0":{"450":1}}],["质量",{"2":{"270":1,"358":1}}],["透彻",{"2":{"910":1}}],["透视投影相机",{"2":{"734":1,"749":1}}],["透明度",{"2":{"742":1}}],["透明度等",{"2":{"715":1}}],["透明度等变换属性",{"2":{"680":1}}],["透明性",{"2":{"427":1}}],["透过表象",{"2":{"383":1}}],["透过表皮看骨架",{"2":{"373":1}}],["透过现象看本质的能力",{"2":{"366":1}}],["透传到外部工具",{"2":{"796":1}}],["透传错误信息",{"2":{"175":1}}],["透传机制",{"2":{"110":1}}],["某天",{"2":{"954":1}}],["某条直线只要稍微变化一点",{"2":{"915":1}}],["某次",{"2":{"592":1}}],["某电商",{"2":{"366":1}}],["某个功能的转化率不及预期",{"2":{"382":1}}],["某个",{"2":{"104":1}}],["情感",{"2":{"907":1}}],["情感递进",{"2":{"508":1}}],["情感升华‌",{"2":{"505":1}}],["情绪消耗大",{"2":{"465":2}}],["情绪捕捉",{"2":{"366":1}}],["情境代入",{"2":{"366":1}}],["痛苦的根源是什么",{"2":{"366":1}}],["痛点捕获",{"2":{"541":1}}],["痛点和期望",{"2":{"396":1}}],["痛点烈度",{"2":{"365":1}}],["痛点解决与工程价值",{"0":{"297":1}}],["痛点",{"2":{"115":1,"143":1,"167":1,"376":1}}],["批准执行",{"2":{"900":1}}],["批准设计",{"2":{"900":1}}],["批判",{"2":{"609":1}}],["批判性思考",{"2":{"628":1}}],["批判性思维不是",{"2":{"366":1}}],["批判性思维",{"2":{"366":1}}],["批判性思维让你追问",{"2":{"366":1}}],["批判性思维告诉你",{"2":{"366":2}}],["批判性思维提供",{"2":{"366":1}}],["批判性审美",{"2":{"533":1}}],["批驳或赞同某个特定的观点",{"2":{"609":1}}],["批量执行",{"2":{"881":1}}],["批量执行替代方案",{"2":{"880":1}}],["批量合并渲染",{"2":{"734":1,"740":1}}],["批量控制",{"2":{"734":1}}],["批量渲染",{"2":{"679":1}}],["批量绘制",{"2":{"676":1,"677":1}}],["批量分配修复任务",{"2":{"568":1}}],["批量",{"2":{"568":1}}],["批量导出",{"2":{"310":1}}],["批量数据导出进度",{"2":{"156":1}}],["笨办法",{"2":{"365":1}}],["留在",{"2":{"577":1}}],["留白",{"2":{"508":1}}],["留存",{"2":{"365":1}}],["留出",{"2":{"87":1}}],["排版与色彩",{"2":{"928":1}}],["排版工具类",{"2":{"647":1}}],["排列与组合",{"0":{"914":1},"2":{"914":2}}],["排列组合方面也尚可",{"2":{"912":1}}],["排列",{"2":{"912":1}}],["排序",{"2":{"656":1,"715":1}}],["排序存储",{"2":{"652":1}}],["排不上优先级",{"2":{"528":1}}],["排名",{"2":{"472":1}}],["排查问题非常直观",{"2":{"924":1}}],["排查问题时",{"2":{"198":1}}],["排查",{"2":{"405":1}}],["排期优先级",{"2":{"365":1}}],["明明写了",{"2":{"924":1}}],["明",{"2":{"507":1}}],["明天就能上线",{"2":{"363":1}}],["明确自己当前的定位",{"2":{"947":1}}],["明确自身阶段目标",{"2":{"624":1}}],["明确告诉",{"2":{"583":1}}],["明确告诉世界",{"2":{"380":1}}],["明确知道哪些场景适合用传统的",{"2":{"541":1}}],["明确使用场景与边界",{"0":{"447":1}}],["明确定义",{"2":{"445":1}}],["明确行动的范围",{"2":{"412":1}}],["明确了谁依赖谁",{"2":{"297":1}}],["明确各层职责",{"2":{"282":1}}],["明确实体",{"2":{"282":1}}],["明确领域的边界",{"2":{"277":1}}],["明确的",{"2":{"585":1}}],["明确的类型约束",{"2":{"270":1}}],["明确的层级关系",{"2":{"240":1}}],["明确泛型参数的预期类型范围",{"2":{"264":1}}],["明确类型意图",{"2":{"253":1}}],["明确项目间的依赖关系",{"2":{"207":1}}],["明确核心目标",{"2":{"201":1}}],["伪元素组合以及第三方黑盒组件时的短板",{"2":{"931":1}}],["伪随机数种子生成器",{"2":{"762":1}}],["伪代码",{"2":{"640":1}}],["伪需求",{"2":{"363":1}}],["伪实现",{"2":{"115":1}}],["剩下",{"2":{"494":1,"495":1}}],["剩下的",{"2":{"362":1,"931":1}}],["剩余分支自动推断",{"2":{"231":1}}],["杰出成就的累积效应是被严重低估的",{"2":{"361":1}}],["伟大的突破往往无法被预设",{"2":{"598":1}}],["伟大的产品往往由它不做什么来定义",{"2":{"373":1}}],["伟大",{"2":{"360":1}}],["伟大成就指南",{"2":{"357":1}}],["智力",{"2":{"907":1}}],["智力诚实",{"2":{"360":2}}],["智谱",{"2":{"522":3}}],["智谱清言是由智谱ai推出的国产大模型应用平台",{"2":{"512":1}}],["智谱清言",{"2":{"512":2}}],["智能手表具有手表+数据收集与分析",{"2":{"957":1}}],["智能时代",{"2":{"948":1}}],["智能解决",{"2":{"927":1}}],["智能搜索",{"2":{"792":1}}],["智能提交已",{"2":{"581":1}}],["智能提示依赖类型导出",{"2":{"673":1}}],["智能提示",{"2":{"216":1}}],["智能补全与对话式改代码",{"2":{"564":1}}],["智能补全",{"2":{"564":1}}],["智能化解决工作",{"2":{"515":1}}],["智能助理",{"2":{"512":1}}],["智能创作",{"2":{"512":1}}],["智能问答",{"2":{"512":1}}],["智能家居等现实交互场景中大放异彩",{"2":{"418":1}}],["智能体工程",{"0":{"542":1}}],["智能体工作流",{"2":{"367":1}}],["智能体名称",{"2":{"499":1}}],["智能体的竞争焦点将从单纯的推理速度转向",{"2":{"419":1}}],["智能体操作系统",{"2":{"419":1}}],["智能体接收到模糊目标",{"2":{"414":1}}],["智能体",{"2":{"402":1,"434":1,"441":1,"470":1,"471":1}}],["智能体应用时",{"2":{"113":1}}],["抵抗",{"0":{"360":1}}],["说服心理学原则",{"2":{"881":1}}],["说了什么",{"2":{"625":1}}],["说起话来头头是道",{"2":{"612":1}}],["说",{"0":{"560":1},"1":{"561":1,"562":1},"2":{"909":1}}],["说的那样",{"2":{"360":1}}],["说的",{"2":{"358":1}}],["说明什么情况下命令应该拒绝执行或提示用户",{"2":{"583":1}}],["说明这个目录的作用",{"2":{"573":2}}],["说明细致清晰",{"2":{"504":1}}],["说明技能功能",{"2":{"448":1}}],["说明描述太抽象",{"2":{"445":1}}],["说明实践方法",{"2":{"182":1}}],["说明",{"2":{"2":1,"31":1,"48":1,"115":2,"119":1,"123":1,"124":1,"132":1,"133":1,"137":1,"181":1,"200":1,"207":1,"208":1,"209":1,"216":1,"226":1,"227":1,"250":1,"255":1,"256":1,"270":1,"274":1,"275":1,"286":1,"297":2,"304":1,"305":1,"307":1,"410":1,"411":1,"412":1,"436":1,"441":1,"451":1,"467":1,"471":2,"478":1,"570":2,"672":1,"697":1,"800":1,"814":1,"815":1,"816":1,"851":1,"921":1,"922":1,"924":1,"925":1,"934":1}}],["远裁剪面距离",{"2":{"749":1}}],["远高于单纯的信息壁垒",{"2":{"622":1}}],["远超在",{"2":{"358":1}}],["远程办公",{"2":{"601":1}}],["远程入口文件",{"2":{"288":1}}],["远程子应用配置",{"2":{"288":1}}],["撰写基础文案甚至简单的数据分析",{"2":{"357":1}}],["画布高度",{"2":{"719":1}}],["画布宽度",{"2":{"719":1}}],["画布抽象",{"2":{"677":1,"679":1}}],["画布应用",{"2":{"671":1}}],["画个简单的图示",{"2":{"494":1}}],["画图",{"2":{"357":1}}],["画出什么",{"2":{"71":1}}],["爆发的当下",{"2":{"357":1}}],["格雷厄姆所说",{"2":{"362":1}}],["格雷厄姆",{"2":{"357":1}}],["格式的字节流",{"2":{"833":1}}],["格式解析流水线",{"2":{"823":1}}],["格式解析",{"2":{"823":1}}],["格式产物",{"2":{"762":2}}],["格式转换",{"2":{"706":1,"734":1}}],["格式为",{"2":{"581":1}}],["格式分割",{"2":{"507":1}}],["格式规范",{"2":{"450":1,"583":1}}],["格式化",{"2":{"706":2}}],["格式化显示",{"2":{"281":1}}],["格式化工具",{"2":{"274":1}}],["格式化输出",{"2":{"203":1,"796":1}}],["格式数据",{"2":{"178":1}}],["格式",{"0":{"749":1,"807":1},"2":{"166":1,"168":1,"169":1,"175":1,"414":1,"435":1,"451":2,"576":1,"734":2,"762":1,"778":1,"800":1,"815":2,"828":2,"839":1,"880":1,"933":1}}],["什么才算得上是真正的稀缺",{"2":{"457":1}}],["什么才是核心壁垒",{"0":{"357":1}}],["什么情况下它应该停止尝试",{"2":{"450":1}}],["什么",{"2":{"367":2}}],["什么是好代码",{"2":{"539":1}}],["什么是噪音",{"2":{"460":1}}],["什么是核心",{"2":{"460":1}}],["什么是",{"0":{"5":2,"402":1},"2":{"532":1}}],["仍是被动响应的",{"2":{"355":1}}],["仍是更合适的选择",{"2":{"180":1}}],["档服务",{"2":{"354":1}}],["巧妙地利用了这一点",{"2":{"354":1}}],["巧妙地实现了请求分流",{"2":{"148":1}}],["广大游客来宋城的目的是游玩",{"2":{"917":1}}],["广告竞价",{"2":{"354":1}}],["广泛用于开源项目",{"2":{"345":1}}],["追加数据",{"2":{"719":1}}],["追踪",{"2":{"642":1}}],["追踪尾部延迟",{"0":{"353":1}}],["追问",{"2":{"518":1,"928":1}}],["追问技巧",{"2":{"518":1}}],["追问为什么",{"2":{"366":1}}],["追求差",{"0":{"620":1}}],["追求",{"2":{"565":1}}],["追求口碑最佳",{"2":{"565":1}}],["追求研发效率的开发者",{"2":{"564":1}}],["追求低成本开源部署",{"2":{"510":1}}],["追求帕累托改进与外部性管理",{"2":{"399":1}}],["追求帕累托改进与管理外部性",{"0":{"399":1}}],["追求极速与零产物膨胀",{"2":{"928":1}}],["追求极端",{"2":{"387":1,"910":1}}],["追求极致的现代前端审美",{"2":{"112":1}}],["追求长期成长的优秀同路人",{"2":{"380":1}}],["追求敏捷开发",{"2":{"342":1}}],["检测环境→呈现选项→执行清理",{"2":{"881":1}}],["检验真知",{"2":{"615":1}}],["检验理解的试金石",{"0":{"610":1}}],["检索完整响应",{"2":{"799":1}}],["检索力",{"2":{"603":1}}],["检索",{"2":{"417":1}}],["检索质量",{"2":{"352":1}}],["检索增强生成",{"2":{"352":1,"536":1}}],["检查是否遗漏需求",{"2":{"889":1}}],["检查是否",{"2":{"887":1}}],["检查适用技能",{"2":{"883":1}}],["检查安装",{"2":{"810":1}}],["检查并创建到期图层",{"2":{"768":1}}],["检查逻辑错误",{"2":{"591":1}}],["检查漏洞",{"2":{"586":1}}],["检查清单等",{"2":{"895":1}}],["检查清单长",{"2":{"587":1}}],["检查清单",{"2":{"586":1}}],["检查范围",{"2":{"583":1}}],["检查",{"2":{"484":1,"542":1,"581":1,"801":2}}],["检查mybatis映射文件",{"2":{"199":1}}],["检查响应是否成功且内容类型匹配",{"2":{"175":1}}],["检查响应是否成功且内容类型为",{"2":{"169":1}}],["检查项",{"2":{"1":1}}],["坚决避开在",{"2":{"931":1}}],["坚决抵制为了",{"2":{"930":1}}],["坚决消灭硬编码",{"2":{"929":1}}],["坚决弃用",{"2":{"928":1}}],["坚决不能作为",{"2":{"5":1}}],["坚守",{"2":{"924":1}}],["坚实的基石",{"2":{"902":1}}],["坚持执行拆解后的目标",{"2":{"964":1}}],["坚持长期主义",{"2":{"603":1}}],["坚持",{"2":{"564":1}}],["坚持比标准",{"2":{"352":1}}],["驯服幻觉",{"0":{"352":1}}],["准确输出了七言律诗",{"2":{"508":1}}],["准确的信噪比分离能力",{"2":{"460":1}}],["准确定义问题",{"2":{"459":1}}],["准确率极高",{"2":{"414":1}}],["准确",{"2":{"350":1}}],["认清书籍的局限性",{"2":{"614":1}}],["认真读一本好书",{"2":{"606":1}}],["认真读完一本好书",{"2":{"606":1}}],["认知三层塔",{"2":{"902":1}}],["认知框架与执行系统",{"2":{"626":1}}],["认知高度",{"2":{"622":1}}],["认知操作系统",{"2":{"598":1}}],["认知栈",{"2":{"558":1}}],["认知对齐",{"2":{"366":1}}],["认为",{"2":{"350":1,"358":1,"902":1}}],["认证模块",{"2":{"275":1,"429":1}}],["认证相关类型",{"2":{"274":1}}],["认证相关状态",{"2":{"274":1}}],["认证相关",{"2":{"274":2}}],["认证相关组件",{"2":{"274":1}}],["认证功能",{"2":{"274":1}}],["认证令牌",{"2":{"166":1,"169":1}}],["认证",{"2":{"20":1}}],["问倒",{"2":{"610":1}}],["问答机",{"2":{"402":1}}],["问答引擎",{"2":{"350":1}}],["问问自己",{"2":{"385":1}}],["问自己",{"2":{"372":1,"908":1}}],["问题陈述",{"2":{"895":1}}],["问题情境",{"2":{"609":2}}],["问题发现",{"2":{"540":1}}],["问题发现者",{"2":{"358":1}}],["问题到验证",{"2":{"461":1}}],["问题空间",{"2":{"360":1}}],["问题不仅导向答案",{"2":{"358":1}}],["问题解决",{"2":{"199":1}}],["问题",{"2":{"41":1,"119":1,"377":1,"434":1,"437":2,"461":1,"491":1,"553":1,"943":1}}],["问题的根源往往不在于",{"2":{"1":1}}],["条反制规则",{"2":{"887":1}}],["条形图",{"2":{"706":1}}],["条件等待",{"2":{"881":1}}],["条件等待技术",{"2":{"881":1}}],["条件构建器",{"2":{"647":1}}],["条件类型对裸类型参数分发",{"2":{"250":1}}],["条件类型会分发到每个成员",{"2":{"234":1}}],["条规则",{"2":{"577":1}}],["条蓝色链接是绝对的主角",{"2":{"350":1}}],["降级为",{"2":{"931":1}}],["降级备用",{"2":{"523":1}}],["降级链接的视觉权重",{"2":{"350":1}}],["降低门槛",{"2":{"926":1}}],["降低前端门槛",{"2":{"639":1}}],["降低主文件变动频率",{"2":{"577":1}}],["降低用户的挫败感",{"2":{"543":1}}],["降低每单位体积的存储成本",{"2":{"391":1}}],["降低心智负担",{"2":{"332":1}}],["降低了系统的整体复杂度",{"2":{"292":1,"296":1}}],["降低了心智负担",{"2":{"97":1}}],["降低技术债务",{"2":{"285":1}}],["降低维护成本",{"2":{"283":1}}],["降低系统复杂性并提高可维护性与可复用性",{"2":{"272":1}}],["降低开发",{"2":{"31":1}}],["降低开发成本",{"2":{"16":1}}],["创造一个角色",{"2":{"590":1}}],["创造者阶段",{"2":{"459":1}}],["创业者",{"2":{"561":1}}],["创业不过是水到渠成之事",{"2":{"377":1}}],["创意落地与小产品开发",{"2":{"901":1}}],["创意技术专家",{"2":{"728":1}}],["创意沉淀",{"2":{"540":1}}],["创意写作辅助",{"2":{"512":1}}],["创作",{"2":{"514":1}}],["创作诗歌",{"2":{"506":1}}],["创作思路和精灵寄语",{"2":{"505":2}}],["创作思路和灵感说明",{"2":{"504":1}}],["创作思路",{"2":{"504":2,"505":2,"506":1,"507":2,"508":2}}],["创作灵感等",{"2":{"501":1}}],["创作者",{"2":{"377":1}}],["创新",{"0":{"350":1}}],["创建的项目",{"2":{"923":1}}],["创建日期",{"2":{"895":1}}],["创建具体模型实例",{"2":{"857":1}}],["创建对应的",{"2":{"768":1}}],["创建图层",{"2":{"761":1}}],["创建立方体",{"2":{"753":1}}],["创建场景",{"2":{"753":1}}],["创建计算管线",{"2":{"748":1}}],["创建渲染管线",{"2":{"748":1}}],["创建渲染器",{"2":{"708":1}}],["创建内部",{"2":{"708":1}}],["创建器",{"2":{"706":1}}],["创建元素",{"2":{"677":1}}],["创建根节点后",{"2":{"679":1}}],["创建根",{"2":{"649":1}}],["创建迁移文件",{"2":{"583":1}}],["创建一个笔记本",{"2":{"515":1}}],["创建一个",{"2":{"499":1}}],["创建一个简单的",{"2":{"223":1}}],["创建新项目",{"2":{"449":1}}],["创建订单及其订单项",{"2":{"278":1}}],["创建不同类型的配置映射",{"2":{"262":1}}],["创建模拟函数",{"2":{"225":1}}],["创建账号+返回id",{"2":{"201":1}}],["创建文本解码器",{"2":{"166":1}}],["创建时通知外部",{"2":{"132":1}}],["创建",{"2":{"26":1,"28":1,"169":1,"222":1,"654":1,"658":1,"680":1,"684":1,"686":1,"704":2,"705":1,"706":1,"708":1,"719":1,"741":1,"748":2,"762":2,"764":1,"830":1,"857":1,"881":1,"883":1}}],["创建空间",{"2":{"26":1}}],["创建项目",{"2":{"25":1,"28":1}}],["股价",{"2":{"349":1}}],["股票行情",{"2":{"816":1}}],["股票价格",{"2":{"123":1}}],["股票",{"2":{"88":1}}],["股票交易平台",{"2":{"31":1}}],["知是行的开始",{"2":{"958":1}}],["知是行的头脑",{"2":{"958":1}}],["知行合一",{"2":{"958":1}}],["知道",{"2":{"622":1}}],["知道每一块拼图的位置",{"2":{"332":1}}],["知而不行",{"2":{"441":1}}],["知识后",{"2":{"919":1}}],["知识的世界",{"2":{"908":1}}],["知识仓库的目录不是按主题或媒体类型划分的",{"2":{"630":1}}],["知识仓库目录划分与设计",{"0":{"630":1}}],["知识内化的价值最终通过输出来兑现",{"2":{"629":1}}],["知识萃取",{"2":{"628":1,"631":1}}],["知识以各种方式存在于社会的各个角落",{"2":{"614":1}}],["知识性书籍的诞生",{"2":{"609":1}}],["知识含量远超日常碎片化信息",{"2":{"606":1}}],["知识密度高",{"2":{"606":1}}],["知识密度远高于日常谈话或碎片内容",{"2":{"606":1}}],["知识输出与分享",{"2":{"515":1}}],["知识体系搭建",{"2":{"515":1}}],["知识分享",{"2":{"515":1}}],["知识卡片管理",{"2":{"515":1}}],["知识关联",{"2":{"514":1}}],["知识检索等服务",{"2":{"512":1}}],["知识检索等丰富场景",{"2":{"512":1}}],["知识检索",{"2":{"512":1}}],["知识问答",{"2":{"511":1}}],["知识可视化",{"2":{"509":1}}],["知识库",{"2":{"494":1}}],["知识型",{"0":{"417":1},"2":{"417":4}}],["知识获取",{"2":{"406":1}}],["知识点维度组织信息",{"2":{"628":1}}],["知识点检索",{"2":{"405":1}}],["知识点",{"2":{"405":1}}],["知识工作者对效率极其敏感",{"2":{"353":1}}],["知识发现引擎",{"2":{"355":1}}],["知识发现",{"0":{"349":1}}],["淘宝前端团队",{"2":{"346":1}}],["淘系前端团队",{"2":{"346":1}}],["鑫生活",{"2":{"346":1}}],["鑫空间",{"2":{"346":1}}],["桌面应用命令",{"2":{"792":1}}],["桌面应用缺乏自动化接口",{"2":{"784":1}}],["桌面应用等客户端和",{"2":{"114":1}}],["桌面开发",{"2":{"346":1}}],["蒲公英",{"2":{"346":1}}],["凹凸实验室维护整理的技术周刊",{"2":{"346":1}}],["凹凸实验室",{"2":{"346":1}}],["阮一峰的网络日志",{"2":{"346":1}}],["阮一峰网络日志",{"2":{"346":1}}],["庞大的微服务集群",{"2":{"344":1}}],["版较低",{"2":{"521":1}}],["版价格较低",{"2":{"521":1}}],["版提供",{"2":{"518":1}}],["版",{"2":{"467":1,"565":1}}],["版的",{"2":{"344":2}}],["版本管理",{"2":{"845":1}}],["版本信息",{"2":{"792":1}}],["版本包含所有三种渲染器",{"2":{"778":1}}],["版本不包含表达式引擎",{"2":{"778":1}}],["版本入口",{"2":{"762":4}}],["版本号管理工具配置",{"2":{"881":1}}],["版本号",{"2":{"748":1}}],["版本变更日志",{"2":{"677":1}}],["版本的考究",{"2":{"613":1}}],["版本的实现",{"2":{"467":1}}],["版本或依赖的特殊要求",{"2":{"573":1}}],["版本发布引导",{"2":{"454":1}}],["版本化定价",{"2":{"397":1}}],["版本",{"2":{"203":2,"699":1,"755":1,"821":2,"874":1}}],["版本冲突风险升高",{"2":{"192":1}}],["版本控制系统",{"2":{"132":1}}],["版本引入",{"2":{"46":1}}],["倍价值放大",{"2":{"459":1}}],["倍放大",{"2":{"459":1}}],["倍的本地开发体验",{"2":{"343":1}}],["倍",{"2":{"343":1,"519":1,"642":1}}],["威力大打折扣",{"2":{"342":1}}],["越来越觉得",{"2":{"959":1}}],["越是努力地执行严格的时间表",{"2":{"952":1}}],["越轻越好",{"2":{"342":1}}],["越多",{"2":{"57":1}}],["陡峭",{"2":{"341":1}}],["贴近react思维",{"2":{"341":1}}],["界面零广告",{"2":{"518":1}}],["界面简洁功能丰富",{"2":{"512":1}}],["界面简洁易用",{"2":{"512":1}}],["界面清爽体验友好",{"2":{"512":1}}],["界面友好",{"2":{"512":1}}],["界面体验优秀",{"2":{"512":1}}],["界面上导致崩溃的",{"2":{"418":1}}],["界面",{"2":{"340":1,"568":1}}],["界面应当呈现何种输出",{"2":{"11":1}}],["冗长的代码问题",{"2":{"340":1}}],["冗余信息",{"2":{"196":1}}],["冗余接口",{"0":{"196":1}}],["冗余代码",{"0":{"187":1}}],["冗余",{"2":{"186":1,"196":2}}],["冗余逻辑与重复代码",{"0":{"186":1},"1":{"187":1,"188":1}}],["弱类型的脚本语言",{"2":{"338":1}}],["颜色排布",{"2":{"934":1}}],["颜色属性",{"2":{"770":1}}],["颜色等",{"2":{"765":1}}],["颜色处理",{"2":{"706":1}}],["颜色→形状映射",{"2":{"683":1}}],["颜色解析",{"2":{"677":1}}],["颜色编码的命中检测",{"2":{"683":1}}],["颜色编码命中",{"2":{"677":1}}],["颜色编码",{"2":{"672":1,"673":1,"683":1}}],["颜色",{"2":{"338":1,"715":1,"734":3,"737":1,"742":1,"770":1,"927":1,"934":1}}],["链式处理",{"2":{"851":1}}],["链路",{"2":{"550":1}}],["链路追踪与归因",{"2":{"550":1}}],["链路通畅",{"2":{"119":1}}],["链接导航",{"0":{"349":1}}],["链接等",{"2":{"338":1}}],["段落",{"2":{"338":1,"488":1}}],["凭借深厚的底层功底",{"2":{"539":1}}],["凭借其极速的硬链接机制和简洁的配置",{"2":{"335":1}}],["凭感觉编程",{"2":{"530":1}}],["凭感觉",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1},"2":{"532":1}}],["凭证",{"2":{"26":1}}],["得到别人的口头赞许",{"2":{"612":1}}],["得到的是同一个单例对象",{"2":{"334":1}}],["得益于静态产物的极低访问成本",{"2":{"64":1}}],["均实现此接口",{"2":{"844":1}}],["均匀照明",{"2":{"734":1}}],["均以插件形式注册",{"2":{"704":1}}],["均继承",{"2":{"677":1}}],["均视为",{"2":{"333":1}}],["均已原生支持",{"2":{"307":1}}],["双版本兼容",{"2":{"845":2}}],["双层材质体系",{"2":{"742":1}}],["双核心架构",{"2":{"739":1}}],["双阶段管道",{"2":{"706":1}}],["双渲染后端",{"2":{"704":1}}],["双渲染",{"2":{"701":1}}],["双后端架构",{"2":{"729":1}}],["双后端",{"2":{"672":1,"673":1}}],["双轨制是这套知识系统的核心设计",{"2":{"628":1}}],["双轨制",{"0":{"628":1}}],["双保险",{"2":{"523":1}}],["双头垄断下的博弈均衡",{"0":{"392":1}}],["双模共存",{"0":{"333":1}}],["双向散射分布函数",{"2":{"734":1}}],["双向高频互动",{"2":{"142":1}}],["双向通道",{"2":{"125":1}}],["记住",{"2":{"410":1}}],["记录了我对技术角色的重新思考",{"2":{"902":1}}],["记录痛点",{"2":{"631":1}}],["记录问题",{"2":{"631":1}}],["记录每一次工具调用",{"2":{"550":1}}],["记录或提交订单",{"2":{"411":1}}],["记录最近几轮的交互历史",{"2":{"410":1}}],["记录最近的交互历史",{"2":{"408":1}}],["记录下那个让你嘴角上扬或瞳孔放大的瞬间",{"2":{"372":1}}],["记录",{"0":{"372":1},"2":{"371":1,"537":1}}],["记录版本变更",{"2":{"331":1}}],["记忆机制",{"0":{"546":1}}],["记忆曲线数据",{"2":{"474":1}}],["记忆的实现方式不止这一种",{"2":{"437":1}}],["记忆类型",{"2":{"410":1}}],["记忆",{"0":{"410":1},"2":{"408":2,"478":1,"544":1}}],["记忆化请求去重",{"0":{"81":1}}],["记忆口诀",{"2":{"57":1}}],["修身",{"2":{"959":1}}],["修饰器之间可以链式串联",{"2":{"771":1}}],["修饰器在每一帧处理前序形状数据",{"2":{"771":1}}],["修行在个人",{"2":{"609":1}}],["修补",{"2":{"451":1}}],["修正阶段",{"2":{"426":1}}],["修正",{"2":{"426":2,"432":1}}],["修复调试流程",{"0":{"893":1}}],["修复质量问题",{"2":{"889":1}}],["修复规格差异",{"2":{"889":1}}],["修复后",{"2":{"883":1}}],["修复建议",{"2":{"586":1,"591":1}}],["修复问题",{"2":{"570":1}}],["修复移动端导航栏遮挡问题`",{"2":{"451":1}}],["修复",{"2":{"331":1,"451":1,"455":1,"535":1,"564":1,"567":2,"568":1,"883":1,"893":1}}],["修复或性能优化",{"2":{"331":1}}],["修订号",{"2":{"331":2}}],["修改修饰符状态",{"2":{"921":1}}],["修改技能时",{"2":{"883":1}}],["修改参数",{"2":{"861":1}}],["修改属性",{"2":{"689":1}}],["修改代码时",{"2":{"537":1}}],["修改",{"2":{"411":1,"587":1}}],["修改变量名时",{"2":{"311":1}}],["修改或重构某个模块时",{"2":{"297":1}}],["修改某条项目详情后",{"2":{"104":1}}],["修改数据库",{"2":{"415":1}}],["修改数据",{"2":{"104":1}}],["屎山",{"2":{"327":1}}],["避开",{"2":{"782":1}}],["避坑",{"2":{"327":1,"328":1}}],["避免选择器权重过高导致后期的维护灾难",{"2":{"931":1}}],["避免供应链风险",{"2":{"877":1}}],["避免为简单命令付出完整启动成本",{"2":{"795":1}}],["避免为了微前端而微前端",{"2":{"292":1}}],["避免编译步骤",{"2":{"758":1}}],["避免阻塞",{"2":{"712":1}}],["避免阻塞浏览器主线程",{"2":{"305":1}}],["避免开发者重复造轮子",{"2":{"699":1}}],["避免知识结构陷入",{"0":{"614":1}}],["避免读书目的被异化",{"0":{"612":1}}],["避免利益冲突",{"2":{"590":1}}],["避免将多个操作强行合并",{"2":{"583":1}}],["避免模糊描述",{"2":{"578":1}}],["避免模型混淆",{"2":{"277":1}}],["避免单个",{"2":{"570":1}}],["避免账单超出预期",{"2":{"523":1}}],["避免偏离主题",{"2":{"504":1}}],["避免学术化术语",{"2":{"494":1}}],["避免大模型自由发挥导致的格式混乱",{"2":{"453":1}}],["避免信息混淆",{"2":{"437":1}}],["避免一次性将海量文档全部丢给模型导致",{"2":{"352":1}}],["避免提取过时或冲突的信息",{"2":{"352":1}}],["避免不必要重渲染",{"2":{"341":1}}],["避免循环依赖陷阱",{"2":{"318":1}}],["避免全局变量污染",{"2":{"298":1}}],["避免了规则的",{"2":{"576":1}}],["避免了技术债务的积累",{"2":{"292":1}}],["避免了内存爆仓",{"2":{"118":1}}],["避免版本冲突",{"2":{"291":1,"758":1}}],["避免过度拆分",{"2":{"291":1}}],["避免过度工程化",{"2":{"67":1}}],["避免样式冲突",{"2":{"286":1}}],["避免直接依赖",{"2":{"286":1}}],["避免外部修改",{"2":{"261":1}}],["避免重复注册",{"2":{"711":1}}],["避免重复加载",{"2":{"334":1}}],["避免重复定义相同的编译选项",{"2":{"209":1}}],["避免重复业务操作",{"2":{"133":1}}],["避免类型不明确导致的",{"2":{"203":1}}],["避免沦为",{"2":{"201":1}}],["避免引入多余依赖",{"2":{"194":1}}],["避免",{"0":{"186":1},"1":{"187":1,"188":1},"2":{"194":1,"519":1,"592":1,"889":1,"930":1}}],["避免无意义的",{"2":{"181":1,"199":1}}],["避免在多个地方重复定义相同的颜色值",{"2":{"929":1}}],["避免在",{"2":{"173":1}}],["避免在容器中混杂复杂的",{"2":{"2":1}}],["避免长时间占用连接资源",{"2":{"157":1}}],["避免等待过久导致体验断层",{"2":{"148":1}}],["避免组件来回切换引发大量",{"2":{"106":1}}],["避免频繁的毫无意义的重试",{"2":{"106":1}}],["避免内容注入时发生布局跳动",{"2":{"86":1}}],["避免同一页面混合使用多种渲染模式",{"2":{"59":1}}],["避免前端暴露支付密钥",{"2":{"30":1}}],["避免手动修补",{"2":{"9":1}}],["避免碎片化",{"2":{"9":1}}],["避免污染全局",{"2":{"6":1}}],["抹平了前后端的技术门槛",{"2":{"902":1}}],["抹平了技术栈之间的专业门槛",{"2":{"557":1}}],["抹平",{"0":{"321":1}}],["隔离上下文的任务执行",{"2":{"889":1}}],["隔离上下文不干扰主任务",{"2":{"592":1}}],["隔离工作区管理",{"2":{"880":1}}],["隔离后端差异",{"2":{"732":1}}],["隔离数据作用域",{"2":{"652":1}}],["隔离",{"2":{"652":1}}],["隔离与限制",{"2":{"438":1}}],["隔离性",{"2":{"320":1}}],["隔离错误",{"2":{"78":1}}],["历经多轮",{"2":{"535":1}}],["历经客户端到服务端的完整技术链条",{"2":{"180":1}}],["历史读物",{"2":{"947":1}}],["历史开发计划",{"2":{"881":1}}],["历史版本详细记录",{"2":{"762":1}}],["历史原因",{"2":{"758":1}}],["历史任务的成功经验或失败教训",{"2":{"410":1}}],["历史数据的平均值",{"2":{"359":1}}],["历史的交棒",{"0":{"320":1}}],["热门组件库",{"2":{"926":1}}],["热门",{"2":{"792":1}}],["热门文档可能被大量并发访问",{"2":{"66":1}}],["热力图",{"2":{"706":1}}],["热更新",{"2":{"316":1}}],["延迟极低",{"2":{"523":1}}],["延迟导入",{"2":{"315":1}}],["延伸思考混合工作制",{"0":{"957":1}}],["延伸",{"2":{"494":1}}],["延伸实践",{"2":{"188":1,"194":1}}],["延伸阅读",{"2":{"94":1,"597":1}}],["桶文件",{"2":{"312":1}}],["蜕变的过程",{"2":{"309":1}}],["脚本返回的",{"2":{"895":1}}],["脚本采用策略模式",{"2":{"886":1}}],["脚本",{"2":{"442":1,"472":1,"553":1,"636":1,"792":1,"799":1,"883":2}}],["脚本语言",{"2":{"309":1,"338":1}}],["脚手架生成",{"2":{"3":1}}],["迁移和复用成本极低",{"2":{"927":1}}],["迁移至",{"2":{"902":1}}],["迁移工具",{"2":{"849":1}}],["迁移到",{"2":{"308":2}}],["迁移策略建议",{"2":{"308":1}}],["现阶段也需要维持一个月",{"2":{"964":1}}],["现阶段它通常不作为独立的解决方案",{"2":{"921":1}}],["现有",{"2":{"565":1,"822":1}}],["现有工具未解决",{"2":{"465":1}}],["现有工具没有很好解决",{"2":{"465":1}}],["现已迁至独立域名",{"2":{"564":1}}],["现在的我",{"2":{"902":1}}],["现在的",{"2":{"558":1}}],["现在突然变得",{"2":{"528":1}}],["现在可以随手完成",{"2":{"528":1}}],["现在几分钟就能让",{"2":{"528":1}}],["现实是",{"2":{"458":1}}],["现场协调员",{"2":{"414":1}}],["现更名为",{"2":{"342":1}}],["现状",{"2":{"308":1,"320":1}}],["现代的健康标准",{"2":{"941":1}}],["现代医疗虽能救死扶伤",{"2":{"938":1}}],["现代框架",{"2":{"926":1}}],["现代项目极其依赖第三方",{"2":{"924":1}}],["现代标准",{"2":{"822":1}}],["现代人之所以读不进去",{"2":{"609":1}}],["现代化的自动化部署",{"2":{"542":1}}],["现代化前端项目",{"2":{"287":1}}],["现代诗形式自由",{"2":{"506":1}}],["现代诗",{"2":{"504":1}}],["现代全栈开发倾向于使用",{"2":{"344":1}}],["现代前端极致形态",{"2":{"928":1}}],["现代前端首选的实用优先",{"2":{"340":1}}],["现代前端框架如",{"2":{"263":1}}],["现代包通过",{"2":{"335":1}}],["现代",{"2":{"322":1,"342":1,"402":1,"927":1,"928":1}}],["现代模块化项目的",{"0":{"322":1}}],["现代模块化方案支持动态引入",{"2":{"297":1}}],["现代开发的唯一推荐标准",{"2":{"308":1}}],["现代开发的终极标准",{"0":{"307":1}}],["现代浏览器及",{"2":{"307":1}}],["现代浏览器支持",{"2":{"203":2}}],["现代高并发",{"2":{"138":1}}],["剔除未使用的代码",{"2":{"307":1}}],["剔除可推导字段",{"2":{"5":1}}],["终究还是适应了",{"2":{"956":1}}],["终端执行",{"2":{"565":1}}],["终端",{"0":{"487":1},"1":{"488":1,"489":1,"490":1},"2":{"568":2,"792":1}}],["终端命令执行",{"2":{"478":1}}],["终止",{"2":{"832":1}}],["终止判断",{"2":{"427":1}}],["终止重试",{"2":{"171":1}}],["终于彻底结束了长达十年的规范之争",{"2":{"307":1}}],["年才转变为社会人",{"2":{"965":1}}],["年龄成迷",{"2":{"959":1}}],["年频繁居家",{"2":{"948":1}}],["年后有人再问起这个问题",{"2":{"945":1}}],["年及以后的日子里可以继续做到",{"2":{"942":1}}],["年的时间",{"2":{"942":1}}],["年五一假期去",{"2":{"917":1}}],["年提交了一篇论文",{"2":{"916":1}}],["年更是启动了数学通识基础知识",{"2":{"912":1}}],["年末",{"2":{"909":1}}],["年初洋洋洒洒写了一篇在健康",{"2":{"906":1}}],["年底到2023",{"2":{"909":1}}],["年底",{"2":{"525":1,"947":1}}],["年最伟大的商业模式",{"2":{"354":1}}],["年",{"2":{"307":1,"441":1,"901":1}}],["年诞生以来",{"2":{"115":1}}],["普通人勤奋些是对的",{"2":{"952":1}}],["普通人观察表象",{"2":{"389":1}}],["普通命令",{"2":{"796":1}}],["普通用户",{"2":{"784":1}}],["普通搜索",{"2":{"517":1}}],["普通对象不是",{"2":{"269":1}}],["普及之前",{"2":{"306":1}}],["缺少一站式",{"2":{"728":1}}],["缺少请求取消机制",{"2":{"342":1}}],["缺失的环节才会立刻暴露出来",{"2":{"610":1}}],["缺失的测试覆盖",{"2":{"527":1}}],["缺乏工程纪律",{"2":{"874":1}}],["缺乏统一发现和调用机制",{"2":{"784":1}}],["缺乏可靠的网站操作能力",{"2":{"784":1}}],["缺乏深度计算",{"2":{"617":1}}],["缺乏持续输出的执行力",{"2":{"617":1}}],["缺乏持久化机制",{"2":{"617":1}}],["缺乏",{"2":{"499":1}}],["缺乏在服务器端运行所需的组织结构",{"2":{"304":1}}],["缺口",{"2":{"358":1}}],["缺点是需要逐一注册账号",{"2":{"520":1}}],["缺点",{"2":{"149":1,"153":1}}],["诞生的规范",{"2":{"304":1}}],["希望其中的一些操作能对需要的人有一定的帮助",{"2":{"959":1}}],["希望",{"2":{"942":1}}],["希望更多的人能主动思变",{"2":{"919":1}}],["希望接入",{"2":{"568":1}}],["希望将完整工程任务交给",{"2":{"567":1}}],["希望完成什么目标",{"2":{"447":1}}],["希望这份",{"2":{"934":1}}],["希望这套模型",{"2":{"389":1}}],["希望这篇梳理能为你夯实全栈基础",{"2":{"309":1}}],["希望这次的模块化初体验",{"2":{"303":1}}],["希望本系列文章能够帮助读者理解模块化编程的重要性",{"2":{"293":1}}],["希望本文不仅帮助你掌握了泛型",{"2":{"271":1}}],["希望本文能为你的项目实践提供一些参考和帮助",{"2":{"226":1}}],["熵增",{"0":{"378":1},"2":{"303":1}}],["详细技术设计规格",{"2":{"881":1}}],["详细检查清单参见",{"2":{"586":1}}],["详细指南",{"2":{"586":1}}],["详细提交规范",{"2":{"451":1}}],["详细说明",{"2":{"414":1,"415":1}}],["详细的规范可参考下一篇系列文章",{"2":{"298":1}}],["详细地址",{"2":{"278":1}}],["容错与兜底机制",{"2":{"543":1}}],["容错性",{"2":{"427":1}}],["容错率高",{"2":{"424":1}}],["容易出现幻觉",{"2":{"934":1}}],["容易导致我们在遇到真正有价值",{"2":{"618":1}}],["容易导致命名冲突和代码污染",{"2":{"298":1}}],["容易踩坑的地方",{"2":{"573":1}}],["容易被忽略的坑点",{"2":{"572":1}}],["容易在长路径任务中迷失方向",{"2":{"427":1}}],["容易产生",{"2":{"342":1,"610":1}}],["容器高度",{"2":{"719":1}}],["容器宽度",{"2":{"719":1}}],["容器契约",{"2":{"692":1}}],["容器",{"2":{"680":1,"684":1}}],["容器抽象",{"2":{"679":1}}],["容器抽象类",{"2":{"677":1}}],["容器绑定",{"2":{"677":1}}],["容器的形状",{"0":{"391":1}}],["容器中存储的数据类型",{"2":{"261":1}}],["容器组件",{"2":{"2":2}}],["彻底抛弃外部",{"2":{"930":1}}],["彻底抛弃传统的",{"2":{"927":1}}],["彻底干掉",{"2":{"928":1,"934":1}}],["彻底颠覆",{"2":{"604":1}}],["彻底重构代码生产方式的今天",{"2":{"553":1}}],["彻底打破数据孤岛",{"2":{"439":1}}],["彻底走出了纯文字的温室",{"2":{"418":1}}],["彻底免去了手动维护",{"2":{"342":1}}],["彻底解决起名困难",{"2":{"928":1}}],["彻底解决了全局污染问题",{"2":{"922":1}}],["彻底解决多端设备",{"2":{"342":1}}],["彻底解决",{"2":{"342":1}}],["彻底移除未使用的模块",{"2":{"318":1}}],["彻底告别了多个脚本文件中变量名相互覆盖的噩梦",{"2":{"297":1}}],["彻底改变了",{"2":{"80":1}}],["神经网络等模型与算法依赖的数学知识",{"2":{"912":1}}],["神曲",{"2":{"506":1}}],["神",{"2":{"296":1,"507":1}}],["神器",{"2":{"110":1}}],["像素化",{"2":{"677":1}}],["像素级精度",{"2":{"673":1}}],["像素级命中检测",{"2":{"672":1}}],["像素级",{"2":{"3":1}}],["像是一个反应敏捷的",{"2":{"414":1}}],["像人类一样直接操作软件界面",{"2":{"411":1}}],["像捕捉蝴蝶一样捕捉你的情绪",{"2":{"372":1}}],["像",{"2":{"363":1}}],["像搭积木一样",{"2":{"294":1}}],["务必评估项目的实际需求",{"2":{"292":1}}],["制作动画",{"2":{"756":1}}],["制定有效的价格策略",{"2":{"397":1}}],["制定统一的编码规范和目录结构",{"2":{"291":1}}],["制造更多技术债务",{"2":{"12":1}}],["制造技术债务",{"2":{"9":1}}],["给自己的生活做减法",{"2":{"941":1}}],["给大模型提供了一个",{"2":{"934":1}}],["给",{"2":{"534":1}}],["给出三个方案",{"2":{"533":1}}],["给出你创作诗歌时的详细思路与灵感说明",{"2":{"506":1}}],["给出",{"2":{"360":1}}],["给出看似完美的常规解答时",{"2":{"360":1}}],["给出的多个解决方案时",{"2":{"359":1}}],["给子应用",{"2":{"289":1}}],["给定特定的状态输入",{"2":{"11":1}}],["拥挤的赛道最终必然走向卷利润",{"2":{"620":1}}],["拥有的时候经常不会被珍惜",{"2":{"936":1}}],["拥有互不兼容的",{"2":{"842":1}}],["拥有",{"2":{"737":1}}],["拥有纸质书无法比拟的优势",{"2":{"613":1}}],["拥有丰富的",{"2":{"512":1}}],["拥有多模态大模型能力",{"2":{"512":1}}],["拥有实时联网",{"2":{"511":1}}],["拥有对业务痛点的敏锐嗅觉",{"2":{"495":1}}],["拥有调用外部工具",{"2":{"493":1}}],["拥有独立的",{"2":{"680":1}}],["拥有独立的上下文窗口和严格限定的工具权限",{"2":{"438":1}}],["拥有独立的代码仓库和构建流程",{"2":{"286":1}}],["拥有比别人更短的纠错半径",{"2":{"376":1}}],["拥有无限的潜力",{"2":{"367":1}}],["拥有过去",{"2":{"354":1}}],["拥有全球加速节点",{"2":{"345":1}}],["拥有私有的作用域",{"2":{"304":1}}],["拥抱混合工作制",{"2":{"956":1}}],["拥抱长类名",{"2":{"930":1}}],["拥抱高效",{"2":{"615":1}}],["拥抱原生",{"2":{"272":1}}],["拥抱",{"0":{"376":1,"538":1},"2":{"1":1,"919":1,"929":1}}],["团队不应在构建管道中添加过多臃肿的自定义插件",{"2":{"932":1}}],["团队不再只是追求开发速度",{"2":{"528":1}}],["团队或复杂自研",{"2":{"930":1}}],["团队成员对各样式方案的学习成本与上手难度",{"2":{"928":1}}],["团队能力",{"2":{"928":1}}],["团队能力与未来拓展等因素",{"2":{"928":1}}],["团队规模大小",{"2":{"928":1}}],["团队使用同一套",{"2":{"925":1}}],["团队熟悉度",{"2":{"642":1}}],["团队特定流程放在",{"2":{"583":1}}],["团队标准化流程",{"2":{"580":1}}],["团队统一的编码规范",{"2":{"573":1}}],["团队统一的权限策略",{"2":{"570":2,"596":1}}],["团队技能",{"2":{"570":1}}],["团队斜杠命令",{"2":{"570":1}}],["团队指令",{"2":{"570":1}}],["团队配置",{"2":{"570":1}}],["团队共享上下文",{"2":{"571":1}}],["团队共享",{"2":{"568":1}}],["团队",{"2":{"568":1}}],["团队的工程文化",{"2":{"536":1}}],["团队的协作边界",{"2":{"525":1}}],["团队的规模和技术能力",{"2":{"292":1}}],["团队知识管理",{"2":{"515":1}}],["团队知识库",{"2":{"515":1}}],["团队头脑风暴",{"2":{"515":1}}],["团队项目管理",{"2":{"515":1}}],["团队内容协作",{"2":{"515":1}}],["团队办公协作",{"2":{"515":1}}],["团队打造的旗舰",{"2":{"511":1}}],["团队在第二周的人力缺口",{"2":{"417":1}}],["团队开源",{"2":{"343":1}}],["团队提出",{"2":{"305":1}}],["团队要求",{"2":{"292":1}}],["团队要求高",{"2":{"283":1}}],["团队协作场景",{"2":{"515":1}}],["团队协作模型",{"2":{"344":1}}],["团队协作和技术演进问题时",{"2":{"292":1}}],["团队协作",{"2":{"292":1,"415":1,"437":1,"438":1,"515":1,"597":1}}],["团队自治",{"2":{"285":1}}],["沟通效率高",{"2":{"283":1}}],["识别字段名位置",{"2":{"833":1}}],["识别",{"2":{"655":1}}],["识别出复杂的对象关联或异常状态",{"2":{"418":1}}],["识别核心业务概念",{"2":{"282":1}}],["识别限界上下文",{"2":{"281":1}}],["识别当前需求的本质",{"2":{"201":1}}],["仓储实现",{"2":{"281":1,"282":1}}],["仓储接口",{"2":{"281":1,"282":1}}],["仓储接口应定义在领域层",{"2":{"281":1}}],["仓储",{"2":{"278":1}}],["仓库规模",{"2":{"845":1}}],["仓库中",{"2":{"467":1,"477":1}}],["仓库一变就失效",{"2":{"445":1}}],["仓库结构",{"2":{"205":1}}],["仓库事件触发",{"2":{"143":1}}],["仓库",{"2":{"29":1,"345":1,"451":1,"570":1,"755":1}}],["聚光灯",{"2":{"734":1}}],["聚焦自然语言理解与智能创作",{"2":{"512":1}}],["聚焦",{"2":{"350":1,"505":1}}],["聚焦技术动态",{"2":{"346":1}}],["聚焦于问题的本质",{"2":{"201":1}}],["聚合与推理加速平台",{"2":{"523":1}}],["聚合平台",{"2":{"523":1}}],["聚合导出",{"2":{"312":1}}],["聚合和限界上下文确保模块独立性",{"2":{"283":1}}],["聚合的根实体",{"2":{"278":1}}],["聚合根",{"2":{"278":1}}],["聚合",{"2":{"278":1,"282":1}}],["金属度贴图",{"2":{"749":1}}],["金属度",{"2":{"749":1}}],["金属",{"2":{"749":1}}],["金额值对象",{"2":{"281":1}}],["金额",{"2":{"278":1}}],["金融学中的复利效应",{"2":{"909":1}}],["金融博弈",{"2":{"128":1}}],["金融",{"2":{"123":1,"519":1,"523":1}}],["市面上很多被大肆宣扬的",{"2":{"620":1}}],["市场趋势分析命令",{"2":{"470":1}}],["市场规模",{"2":{"470":1,"472":1}}],["市场是不断变化的",{"2":{"400":1}}],["市场份额",{"2":{"396":1}}],["市",{"2":{"278":1}}],["省去起名和文件切换时间",{"2":{"926":1}}],["省去了在",{"2":{"925":1}}],["省去你逐条点链接的过程",{"2":{"517":1}}],["省去排版烦恼",{"2":{"515":1}}],["省",{"2":{"278":1}}],["省略必要环节",{"2":{"181":1}}],["地域化的问题在",{"2":{"957":1}}],["地呈现在",{"2":{"755":1}}],["地面",{"2":{"734":1}}],["地理坐标系",{"2":{"706":1}}],["地理坐标系组件",{"2":{"706":1}}],["地理",{"2":{"701":1}}],["地址",{"2":{"278":1}}],["地图注册与解析",{"2":{"706":1}}],["地图感",{"2":{"332":1}}],["地图",{"2":{"20":1,"518":1,"700":1,"701":1,"706":1}}],["限界上下文",{"2":{"277":1}}],["限制大文件处理",{"2":{"595":1}}],["限制工具就是限制风险",{"2":{"591":1}}],["限制少",{"2":{"511":1}}],["限制在更安全的边界内",{"2":{"438":1}}],["限制隔离的",{"2":{"438":1}}],["限制泛型参数必须是",{"2":{"265":1}}],["限制",{"2":{"124":1,"468":1,"577":1,"814":1}}],["管住嘴",{"2":{"942":2,"961":1}}],["管线状态切换",{"2":{"739":1}}],["管线状态管理",{"2":{"739":1}}],["管线创建",{"2":{"739":1}}],["管线管理",{"2":{"734":1}}],["管线",{"2":{"728":1}}],["管道步骤注册",{"2":{"792":1}}],["管道执行器",{"2":{"792":1}}],["管道执行引擎",{"2":{"792":1}}],["管道执行层",{"2":{"790":1}}],["管道",{"2":{"275":1,"704":1,"850":1,"851":2}}],["管理自己的时间也成为了每个人的必修课",{"2":{"950":1}}],["管理自身行为",{"2":{"2":1}}],["管理连接生命周期",{"2":{"832":1}}],["管理连接状态",{"2":{"163":1}}],["管理外部",{"2":{"811":1}}],["管理元素生命周期",{"2":{"768":1}}],["管理父子层级关系",{"2":{"762":1}}],["管理图层到元素的映射",{"2":{"761":1}}],["管理单一属性随时间的变化曲线",{"2":{"743":1}}],["管理单个组件",{"2":{"709":1}}],["管理单个系列的数据",{"2":{"709":1}}],["管理单个表单项的值",{"2":{"650":1}}],["管理资源绑定",{"2":{"736":1}}],["管理着色器管线",{"2":{"736":1}}],["管理渲染对象状态",{"2":{"736":1}}],["管理渲染流程",{"2":{"732":1}}],["管理所有已注册的坐标系创建器",{"2":{"714":1}}],["管理所有",{"2":{"709":1}}],["管理所有子",{"2":{"650":1}}],["管理整个图表生命周期",{"2":{"709":1}}],["管理序数轴的类别映射",{"2":{"706":1}}],["管理各自配置与状态",{"2":{"704":1}}],["管理实例生命周期",{"2":{"704":1}}],["管理填充",{"2":{"680":1}}],["管理应用级设置",{"2":{"650":1}}],["管理分页状态",{"2":{"650":1}}],["管理分页列表数据增删改查",{"2":{"650":1}}],["管理多层级嵌套表单组合",{"2":{"650":1}}],["管理多个动画实例的生命周期",{"2":{"761":1}}],["管理多个",{"2":{"520":1,"713":1,"743":2}}],["管理全局弹窗状态",{"2":{"650":1}}],["管理全局与局部状态",{"2":{"274":1}}],["管理简单列表数据",{"2":{"650":1}}],["管理表格数据",{"2":{"650":1}}],["管理表单数据",{"2":{"650":1}}],["管理页面级数据",{"2":{"650":1}}],["管理器",{"2":{"647":1}}],["管理复杂度",{"2":{"387":2}}],["管理复杂实体关系",{"2":{"342":1}}],["管理子应用",{"2":{"286":1}}],["管理事务边界",{"2":{"279":1}}],["管理",{"2":{"80":1,"342":1,"478":1,"542":2,"572":1,"647":1,"650":1,"677":1,"684":1,"686":2,"706":3,"714":1,"734":1,"762":1,"765":1,"845":1,"881":1}}],["管理后台",{"2":{"16":1,"18":1,"31":1}}],["区域映射",{"2":{"706":1}}],["区",{"2":{"278":1}}],["区块",{"2":{"274":1}}],["区分预处理与后处理的边界",{"2":{"932":1}}],["区分大小写",{"2":{"442":1}}],["区分结构相同但语义不同的类型",{"2":{"250":1}}],["区分协议控制消息",{"2":{"175":1}}],["区分可重试错误与致命错误",{"2":{"175":1}}],["区分业务事件与协议控制事件",{"0":{"172":1}}],["区分",{"2":{"2":1}}],["价值的指引",{"2":{"902":1}}],["价值的化学闭环",{"2":{"553":1}}],["价值创造的核心",{"0":{"622":1}}],["价值创造者",{"2":{"558":1}}],["价值转化",{"2":{"612":1}}],["价值定义者",{"0":{"556":1}}],["价值",{"2":{"553":1,"929":1,"930":1,"931":1,"932":1}}],["价值低又很难做",{"2":{"365":1}}],["价值极高",{"2":{"365":1}}],["价值维度",{"2":{"270":1}}],["价格业内极低",{"2":{"523":1}}],["价格最低",{"2":{"522":1,"523":1}}],["价格档位",{"2":{"521":1,"522":1}}],["价格极低",{"2":{"522":1}}],["价格极低性价比高",{"2":{"512":1}}],["价格极具竞争力",{"2":{"519":1,"523":1}}],["价格通常低",{"2":{"519":1}}],["价格友好",{"2":{"512":1}}],["价格心理学应用",{"2":{"397":1}}],["价格歧视",{"2":{"397":1}}],["价格变化时主动更新",{"2":{"48":1}}],["价格",{"2":{"30":1}}],["输入信息",{"2":{"909":1}}],["输入设计",{"2":{"884":1}}],["输入格式",{"2":{"706":1}}],["输入即开始分析",{"2":{"636":1}}],["输入任务",{"2":{"567":1}}],["输入目标网站",{"2":{"561":1}}],["输入产品想法生成前后端完整应用",{"2":{"561":1}}],["输入一句话主题即可自动生成带引用的多章节报告",{"2":{"518":1}}],["输入一句话主题或导入笔记",{"2":{"515":1}}],["输入一段临时上下文",{"2":{"435":1}}],["输入能力",{"2":{"514":1}}],["输入",{"2":{"505":2,"507":2,"508":2,"840":1,"857":1,"909":1}}],["输入数组",{"2":{"259":1}}],["输出细粒度任务",{"2":{"884":1}}],["输出任务列表",{"2":{"884":1}}],["输出补全",{"2":{"796":1}}],["输出目标",{"2":{"734":1}}],["输出目录",{"2":{"203":1,"213":1,"214":1,"215":1}}],["输出驱动",{"0":{"629":1}}],["输出形态",{"2":{"562":1}}],["输出的数据结构",{"2":{"895":2}}],["输出的质量",{"2":{"536":1}}],["输出的结构",{"2":{"2":1}}],["输出结构清晰",{"2":{"521":2}}],["输出质量",{"2":{"514":1}}],["输出逻辑严谨",{"2":{"511":1}}],["输出表现",{"2":{"505":2,"507":1,"508":1}}],["输出格式化",{"2":{"791":1,"792":1}}],["输出格式要求等",{"2":{"570":1}}],["输出格式",{"2":{"482":1,"583":1,"591":1}}],["输出文件目录",{"2":{"474":1}}],["输出为",{"2":{"435":1}}],["输出倒逼内化",{"0":{"375":1}}],["输出",{"2":{"204":1,"295":5,"301":1,"304":2,"307":2,"311":1,"325":1,"471":1,"472":1,"655":1,"854":1,"857":1,"859":1,"895":1,"909":4}}],["输出控制选项",{"2":{"203":1}}],["输出设计文档",{"2":{"9":1,"884":1}}],["日历坐标系",{"2":{"706":2}}],["日历",{"2":{"701":1}}],["日历组件",{"2":{"647":1}}],["日常任务清单",{"2":{"956":2}}],["日常清单收集事务依旧不能照搬碎片清单",{"2":{"953":1}}],["日常清单收集事务不能照搬碎片清单",{"2":{"953":1}}],["日常清单三类",{"2":{"953":1}}],["日常清单",{"2":{"953":3}}],["日常饮食注重杂食多样",{"2":{"941":1}}],["日常工作与生活中常用的数学知识",{"2":{"912":1}}],["日常功能开发",{"2":{"565":1}}],["日常习惯",{"2":{"527":1}}],["日常中文搜索想要直接答案",{"2":{"518":1}}],["日常刷到好文章",{"2":{"515":1}}],["日常问答与内容摘要",{"2":{"512":1}}],["日常体验流畅",{"2":{"512":1}}],["日常辅助",{"2":{"459":1}}],["日常的内容分发与用户服务",{"2":{"378":1}}],["日常开发中的工具函数",{"2":{"256":1}}],["日志流",{"2":{"816":1}}],["日志环形缓冲区",{"2":{"801":1}}],["日志工具",{"2":{"706":1,"792":1}}],["日志",{"2":{"279":1,"734":1,"851":1}}],["日期解析",{"2":{"706":1}}],["日期单元格",{"2":{"706":1}}],["日期网格布局",{"2":{"706":1}}],["日期格式化",{"2":{"188":1}}],["日期",{"2":{"26":1,"655":1}}],["面积图",{"2":{"706":1}}],["面临的过度获取",{"2":{"342":1}}],["面对很多件抢占时间资源的事务",{"2":{"950":1}}],["面对前端生态中百花齐放的",{"2":{"928":1}}],["面对这些公开的",{"2":{"617":1}}],["面对这股重塑整个行业的洪流",{"2":{"552":1}}],["面对多",{"2":{"550":1}}],["面对",{"0":{"492":1}}],["面对繁杂的智能体生态",{"2":{"434":1}}],["面对极其复杂的异步状态流转",{"2":{"342":1}}],["面对跨层级通信时",{"2":{"7":1}}],["面向",{"2":{"874":1}}],["面向中小型仓库",{"2":{"636":1}}],["面向非技术用户的",{"2":{"561":1}}],["面向工作流编排",{"2":{"456":1}}],["面向目标",{"2":{"403":1}}],["面向过程",{"2":{"403":1}}],["面向切面编程",{"2":{"344":1}}],["面向对象编程",{"2":{"344":2}}],["面向对象编程中",{"2":{"256":1}}],["面向未来的扩展性",{"2":{"255":1}}],["泛型只是其中的一个子集",{"2":{"271":1}}],["泛型不仅仅是一种语法特性",{"2":{"271":1}}],["泛型不是孤立的",{"2":{"263":1}}],["泛型系统中的核心机制",{"2":{"270":1}}],["泛型系统中的重要机制",{"2":{"264":1}}],["泛型参数必须同时满足",{"2":{"267":1}}],["泛型参数需要具备某些特性才能在函数体内正常使用",{"2":{"263":1}}],["泛型约束与接口",{"2":{"270":1}}],["泛型约束的核心价值在于平衡类型安全与代码通用性",{"2":{"270":1}}],["泛型约束广泛应用于数据处理",{"2":{"264":1}}],["泛型约束可以",{"2":{"264":1}}],["泛型约束是",{"2":{"264":1,"270":1}}],["泛型约束",{"0":{"264":1},"1":{"265":1,"266":1,"267":1,"268":1,"269":1,"270":1}}],["泛型是",{"2":{"263":1}}],["泛型在组件",{"2":{"263":1}}],["泛型在实际开发中的应用非常广泛",{"2":{"256":1}}],["泛型最佳实践总结",{"0":{"263":1}}],["泛型方法",{"2":{"261":3}}],["泛型构造函数",{"2":{"261":1}}],["泛型实例成员",{"2":{"261":1}}],["泛型类型别名",{"2":{"262":3}}],["泛型类型别名与高级应用",{"0":{"262":1}}],["泛型类型信息只存在于编译阶段",{"2":{"254":1}}],["泛型类",{"0":{"261":1},"2":{"261":1}}],["泛型接口",{"0":{"260":1},"2":{"260":1}}],["泛型函数",{"2":{"259":1,"268":1}}],["泛型标识函数",{"2":{"258":1}}],["泛型代码示例",{"0":{"257":1},"1":{"258":1,"259":1,"260":1,"261":1,"262":1}}],["泛型让这种设计成为可能",{"2":{"256":1}}],["泛型让我们能够定义如",{"2":{"256":1}}],["泛型组件如",{"2":{"256":1}}],["泛型能够在保持类型安全的同时",{"2":{"256":1}}],["泛型鼓励开发者从一开始就从通用的角度思考问题",{"2":{"255":1}}],["泛型之所以重要",{"2":{"255":1}}],["泛型与联合类型结合",{"2":{"263":1}}],["泛型与接口结合",{"2":{"263":1}}],["泛型与",{"0":{"253":1},"2":{"263":1}}],["泛型的学习曲线实际上是从具体到抽象的过程",{"2":{"271":1}}],["泛型的通用性就越低",{"2":{"263":1}}],["泛型的应用场景",{"0":{"256":1}}],["泛型的核心优势",{"0":{"255":1}}],["泛型的核心思想是将类型作为参数传递给函数",{"2":{"252":1}}],["泛型的工作原理",{"0":{"254":1}}],["泛型的基本概念和作用",{"0":{"251":1},"1":{"252":1,"253":1,"254":1,"255":1,"256":1}}],["泛型",{"2":{"252":1,"253":1,"677":1}}],["驾驭",{"2":{"250":1}}],["做限制的原因",{"2":{"964":1}}],["做一些适合的无氧运动",{"2":{"960":1}}],["做一个番茄钟",{"2":{"561":1}}],["做不到学以致用与知行合一",{"2":{"946":1}}],["做不成事归结于",{"2":{"621":1}}],["做到",{"2":{"842":1}}],["做到这些",{"2":{"389":1}}],["做技术调研",{"2":{"631":1}}],["做学习笔记",{"2":{"631":1}}],["做得太少",{"2":{"621":1}}],["做好信息的甄别与筛选",{"2":{"618":1}}],["做好搜索需要深厚的领域",{"2":{"351":1}}],["做更少但创造更多价值",{"2":{"601":1}}],["做对产品",{"2":{"600":1}}],["做日常编码提效",{"2":{"559":1}}],["做副驾驶",{"2":{"559":1}}],["做创造",{"2":{"459":1}}],["做事",{"2":{"436":1}}],["做出准确决策",{"2":{"400":1}}],["做团队的要素是成员",{"2":{"383":1}}],["做产品的要素是用户",{"2":{"383":1}}],["做最真实的自己",{"2":{"380":1}}],["做时间的朋友",{"0":{"379":1}}],["做穷尽性检查",{"2":{"250":1}}],["做什么系统",{"2":{"555":1}}],["做什么",{"2":{"9":1,"11":1,"363":1,"462":1,"465":1,"556":1,"583":1}}],["公开",{"2":{"777":1}}],["公开导出层",{"2":{"706":1}}],["公开但无",{"2":{"58":1}}],["公式解析与求值引擎",{"2":{"655":1}}],["公式计算",{"2":{"647":1}}],["公式编辑器控件",{"2":{"647":1}}],["公式编辑器组件",{"2":{"647":1}}],["公式文档",{"2":{"647":1}}],["公式函数文档词典",{"2":{"647":1}}],["公式函数注册系统",{"2":{"647":1}}],["公式",{"2":{"646":1}}],["公司代码库或长期客户信息",{"2":{"437":1}}],["公司维护",{"2":{"344":1}}],["公共常量和工具函数",{"2":{"762":1}}],["公共接口定义",{"2":{"762":1}}],["公共类",{"0":{"749":1}}],["公共",{"0":{"693":1,"839":1,"867":1},"2":{"749":1,"760":1,"761":2,"762":2,"764":1}}],["公共模块",{"2":{"275":1}}],["公共属性",{"2":{"249":1}}],["误传给期望",{"2":{"247":1}}],["误区3",{"2":{"16":1}}],["误区2",{"2":{"16":1}}],["误区1",{"2":{"16":1}}],["异常处理",{"2":{"832":1}}],["异常清晰",{"2":{"507":1}}],["异常截图",{"2":{"418":1}}],["异常诊断与迭代优化",{"2":{"378":1}}],["异常会中断控制流且类型系统中无法追踪",{"2":{"246":1}}],["异构系统",{"2":{"342":1}}],["异步渲染器加载",{"2":{"652":1}}],["异步表达式求值器",{"2":{"647":1}}],["异步",{"2":{"308":1,"646":1}}],["异步加载渲染器的工厂函数",{"2":{"661":1}}],["异步加载支持",{"2":{"307":1}}],["异步加载",{"2":{"305":1,"652":1}}],["异步加载模块",{"2":{"305":1}}],["异步模块定义",{"2":{"298":1}}],["异步测试",{"2":{"225":1}}],["异步任务",{"2":{"143":1}}],["异步提交",{"2":{"142":1,"143":1}}],["异步消费",{"2":{"138":1}}],["异步大任务",{"0":{"136":1}}],["异步状态管理",{"2":{"103":1}}],["异步请求",{"2":{"100":1}}],["异步获取详情数据",{"2":{"86":1}}],["异步获取列表数据",{"2":{"86":1}}],["诚实",{"2":{"246":1,"511":1}}],["∣",{"2":{"243":2}}],["∣keyof",{"2":{"242":2}}],["翻转",{"2":{"242":1}}],["翻译功能",{"2":{"515":1}}],["翻译成高质量的",{"2":{"444":1}}],["翻译脚本",{"2":{"403":1}}],["翻译官",{"2":{"367":1}}],["翻译",{"2":{"66":1,"515":2}}],["我也应用了",{"2":{"903":1}}],["我经常与它们发起激烈的",{"2":{"903":1}}],["我深度使用了",{"2":{"903":1}}],["我深度投身于",{"2":{"901":1}}],["我希望你看到的是一个工程师对",{"2":{"903":1}}],["我不希望这里只是枯燥的代码片段或简单的技术分享与总结",{"2":{"903":1}}],["我把它定义为",{"2":{"903":1}}],["我相信未来的全栈不再是线性的技能堆叠",{"2":{"902":1}}],["我意识到规则变了",{"2":{"902":1}}],["我曾以为技术的广度",{"2":{"902":1}}],["我曾尝试将几本书的内容讲给没时间阅读的朋友听",{"2":{"610":1}}],["我和大多数开发者一样",{"2":{"902":1}}],["我的认知迭代",{"0":{"902":1}}],["我的体会",{"2":{"358":1,"359":1,"360":1,"361":1}}],["我主要在折腾和实践以下几个方向",{"2":{"901":1}}],["我是一名拥有全栈背景的开发者",{"2":{"901":1}}],["我是谁",{"0":{"377":1,"901":1},"2":{"408":1,"433":1}}],["我要做",{"2":{"883":1}}],["我要一匹更快的马",{"2":{"366":1}}],["我必须把他们的质疑解释清楚",{"2":{"610":1}}],["我原以为完全看懂的书",{"2":{"610":1}}],["我懂了",{"2":{"610":1}}],["我就是全栈",{"2":{"553":1}}],["我最关心的不仅是",{"2":{"525":1}}],["我最大的感触是",{"2":{"491":1}}],["我排除了单一的",{"2":{"502":1}}],["我转而使用更高阶的模型",{"2":{"499":1}}],["我决定创建一个",{"2":{"496":1}}],["我刚查到一个",{"2":{"494":1}}],["我刚才让你修改了哪个文件",{"2":{"486":1}}],["我正在尝试将这套理念融入我的博客内容工作流",{"2":{"491":1}}],["我设定了一个具体的研究课题进行测试",{"2":{"473":1}}],["我首先感到的是一种熟悉的兴奋",{"2":{"457":1}}],["我从哪获取知识",{"2":{"433":1}}],["我做过什么",{"2":{"408":1,"433":1}}],["我能为谁解决问题",{"0":{"377":1}}],["我能变成用户",{"2":{"366":1}}],["我赌这个按钮改为红色",{"2":{"369":1}}],["我饿得不行了",{"2":{"366":1}}],["我理解用户",{"2":{"366":1}}],["我尝试用理性的数学语言来重构感性的产品直觉",{"2":{"364":1}}],["我认为全栈的护城河在于",{"2":{"553":1}}],["我认为竞品推出这个功能是想解决留存问题",{"2":{"369":1}}],["我认为",{"2":{"363":1,"903":1}}],["我需要一个同时有",{"2":{"240":1}}],["我们迈入社会后",{"2":{"965":1}}],["我们又只能被动地任由社会教育",{"2":{"958":1}}],["我们大多接触到一些具有数字化特性的",{"2":{"957":1}}],["我们虽然在疫情期间熟悉了这种工作模式",{"2":{"955":1}}],["我们并不需要像辩论赛那样争论",{"2":{"946":1}}],["我们沉淀出了三种走向成熟的混合架构范式",{"2":{"934":1}}],["我们会发现一个共通的实践智慧",{"2":{"928":1}}],["我们提出",{"2":{"928":1}}],["我们也将其纳入本次对比分析",{"2":{"928":1}}],["我们也可以显式指定类型参数",{"2":{"254":1}}],["我们只有在日常注重预防保健",{"2":{"938":1}}],["我们只有通过持续的思考和执行提升自己的能力",{"2":{"626":1}}],["我们只需要拆解并关注少部分核心要素",{"2":{"916":1}}],["我们只需把少量比较大的系数对应的简单图像和对应的系数一起存起来",{"2":{"916":1}}],["我们基本都能获得不错的效果",{"2":{"912":1}}],["我们是否梳理总结过自己真正实践",{"2":{"912":1}}],["我们很自然地产出长",{"2":{"907":1}}],["我们很容易掉入的陷阱就是",{"2":{"526":1}}],["我们人类也从",{"2":{"906":1}}],["我们每天都在与各种各样的系统交互",{"2":{"908":1}}],["我们每天都在做取舍",{"2":{"528":1}}],["我们每天接收的输入往往带有严重的偏置",{"2":{"618":1}}],["我们为什么需要读书",{"0":{"606":1}}],["我们使用",{"2":{"572":1}}],["我们的时间变得越来越碎",{"2":{"950":1}}],["我们的核心是",{"2":{"917":1}}],["我们的核心竞争力不再是精通具体的语言特性或掌握庞杂的框架细节",{"2":{"558":1}}],["我们的改善并不需要一直猛踩油门",{"2":{"908":1}}],["我们的角色是相互依赖的",{"2":{"907":1}}],["我们的大脑才能修正权重",{"2":{"369":1}}],["我们构建的是一套解决复杂问题的思维模型",{"2":{"558":1}}],["我们掌握语言",{"2":{"553":1}}],["我们都在拼命地做加法",{"2":{"553":1}}],["我们试图用人力去掩盖技术栈之间的裂痕",{"2":{"553":1}}],["我们被迫成为",{"2":{"553":1}}],["我们还需要具备数据飞轮意识",{"2":{"541":1}}],["我们还不知道",{"2":{"254":1}}],["我们心里都明白这些任务有价值",{"2":{"528":1}}],["我们心里一定要装着一条",{"2":{"388":1}}],["我们可有关注他们在内部协作的增强回路呢",{"2":{"909":1}}],["我们可基于拆解与关联的思路按照以下步骤进行",{"2":{"908":1}}],["我们可能会陷入一种",{"2":{"530":1}}],["我们可能会得出",{"2":{"526":1}}],["我们可以继续结合生活中的例子来看下",{"2":{"942":1}}],["我们可以结合身边的很多例子来反思下",{"2":{"942":1}}],["我们可以发现",{"2":{"918":1}}],["我们可以更好地看清为什么多样性特别重要",{"2":{"915":1}}],["我们可以不断拿起两个可能有关系的变量",{"2":{"908":1}}],["我们可以看出三个关键设计思想",{"2":{"570":1}}],["我们可以这样一步步来",{"2":{"494":1}}],["我们可以在入口文件中轻松启动交互式",{"2":{"490":1}}],["我们可以封装一个函数",{"2":{"489":1}}],["我们可以得出一个关键结论",{"2":{"476":1}}],["我们可以从两个维度来理解",{"2":{"441":1}}],["我们可以从功能属性和实现方式两个维度来理解",{"2":{"411":1}}],["我们可以精准限制每个子智能体的权限",{"2":{"415":1}}],["我们可以为不同的",{"2":{"415":1}}],["我们可以为每个接口定义精确的返回类型",{"2":{"256":1}}],["我们可以将其自动化程度分为三个档次",{"2":{"403":1}}],["我们可以将其封装成一个独立的工具模块",{"2":{"295":1}}],["我们可以遵循经验和规律按部就班地做事",{"2":{"382":1}}],["我们可以把这个黑盒子",{"2":{"382":1}}],["我们可以构建起一套坚不可摧的代码契约",{"2":{"326":1}}],["我们可以根据需要",{"2":{"295":1}}],["我们可以根据业务需求扩展",{"2":{"175":1}}],["我们可以自行解析这个数据流",{"2":{"166":1}}],["我们可以利用熟悉的后端生态",{"2":{"548":1}}],["我们可以利用其声明式和模块化设计",{"2":{"470":1}}],["我们可以利用",{"2":{"160":1,"487":1}}],["我们可以考虑以下混合思路",{"2":{"157":1}}],["我们可以通过以下三个步骤的",{"2":{"368":1}}],["我们可以通过以下策略压平组件层级",{"2":{"2":1}}],["我们可以通过前端构建工具",{"2":{"217":1}}],["我们可以通过简单的",{"2":{"149":1}}],["我们可以横向对比多份生成结果",{"2":{"3":1}}],["我们可以先用",{"2":{"3":1}}],["我们该如何设计一套人机协作的链路",{"2":{"525":1}}],["我们最终锁定了",{"2":{"493":1}}],["我们确定了",{"2":{"492":1}}],["我们确立了一些",{"2":{"441":1}}],["我们进行了一次关键的视角切换",{"2":{"492":1}}],["我们实际上是在为",{"2":{"491":1}}],["我们实际上是在构建一个高度自治",{"2":{"440":1}}],["我们仅需少量代码就能构建出具备自主执行能力的",{"2":{"491":1}}],["我们在评估各种眼花缭乱的方案时",{"2":{"934":1}}],["我们在做技术选型时",{"2":{"928":1}}],["我们在遇到比较复杂的问题时",{"2":{"916":1}}],["我们在日常工作生活中要试着平衡",{"2":{"915":1}}],["我们在日常开发或产品设计中",{"2":{"382":1}}],["我们在接收九年义务教育时就开始学习这些",{"2":{"914":1}}],["我们在找到自己的增强回路后也需要借助调节回路",{"2":{"910":1}}],["我们在遵循着表象的规律做事",{"2":{"908":1}}],["我们在不同中长期时间段需要针对自身拆解出几个重要因素",{"2":{"907":1}}],["我们在简历上堆砌的",{"2":{"558":1}}],["我们在选择时需要关注三个维度",{"2":{"514":1}}],["我们在",{"2":{"474":1}}],["我们探讨了多智能体系统",{"2":{"467":1}}],["我们重新讨论",{"2":{"457":1}}],["我们真的需要每个人都成为全知全能的",{"2":{"457":1}}],["我们便能真正以一个",{"2":{"440":1}}],["我们正在以前所未有的效率",{"2":{"440":1}}],["我们正在经历一场深刻的变革",{"2":{"420":1}}],["我们面对的不再是冷冰冰的代码或碎片化的对话框",{"2":{"440":1}}],["我们深度拆解了",{"2":{"433":1}}],["我们必须将思维从",{"2":{"930":1}}],["我们必须讨论另一种在处理高复杂度",{"2":{"428":1}}],["我们必须深入思考如何设计动态调整策略或引入人工干预节点",{"2":{"423":1}}],["我们对其角色",{"2":{"494":1}}],["我们对",{"2":{"403":1}}],["我们对比分析了多种通信技术",{"2":{"158":1}}],["我们常被日常现象的",{"2":{"390":1}}],["我们往往很容易一眼看到",{"2":{"383":1}}],["我们习惯了盯着这些看得见的结果找原因",{"2":{"382":1}}],["我们追求的是极简",{"2":{"380":1}}],["我们就实现了一个具备工具调用和会话记忆能力的终端",{"2":{"490":1}}],["我们就可以按照科学的节奏",{"2":{"379":1}}],["我们就应当承担那额外的",{"2":{"111":1}}],["我们能否为",{"2":{"367":1}}],["我们能写出更易理解",{"2":{"201":1}}],["我们更习惯于透过现象探寻底层的运行规律",{"2":{"364":1}}],["我们更倾向于直接调试",{"2":{"217":1}}],["我们不该用理想化的方法要求自己",{"2":{"952":1}}],["我们不应该将自己局限在",{"2":{"552":1}}],["我们不应再纠结于单应仰望更高应仰望更高维度的景观",{"2":{"539":1}}],["我们不能以静态的视角审视现有工具",{"2":{"534":1}}],["我们不再只是跑得更快",{"2":{"528":1}}],["我们不再满足于单一的包管理",{"2":{"335":1}}],["我们不可能无限增加功能",{"2":{"394":1}}],["我们不仅要看到",{"2":{"537":1}}],["我们不仅要避免自己掉入沉没成本陷阱",{"2":{"393":1}}],["我们不仅为",{"2":{"456":1}}],["我们不仅可以极大地降低开发成本",{"2":{"378":1}}],["我们不必成为改变世界的庞然大物",{"2":{"381":1}}],["我们不需要做庞大的计划",{"2":{"361":1}}],["我们要关注的不是单选题",{"2":{"946":1}}],["我们要构建的是一套",{"2":{"534":1}}],["我们要先理清逻辑",{"2":{"447":1}}],["我们要先划分层级结构",{"2":{"2":1}}],["我们要拆解系统里的",{"2":{"383":1}}],["我们要学着先做一个乐于助人的创作者",{"2":{"377":1}}],["我们要敢于像",{"2":{"360":1}}],["我们要敢于说",{"2":{"360":1}}],["我们要把",{"2":{"360":1}}],["我们将从底层到顶层",{"2":{"928":1}}],["我们将从编写原则",{"2":{"444":1}}],["我们将最佳实践外化为可靠的防错系统",{"2":{"602":1}}],["我们将探讨如何通过声明式架构实现多",{"2":{"467":1}}],["我们将通过细节解析与工程实践",{"2":{"441":1}}],["我们将逐一拆解这些核心组件",{"2":{"434":1}}],["我们将逐一拆解这五种重塑生产力的核心类别",{"2":{"413":1}}],["我们将其深化和系统化",{"2":{"397":1}}],["我们将永远在已知的舒适区内打转",{"2":{"360":1}}],["我们将四种规范进行横向对比",{"2":{"308":1}}],["我们从",{"2":{"337":1}}],["我们从概念辨析出发",{"2":{"180":1}}],["我们经常听到",{"2":{"907":1}}],["我们经常面临两种规范交织的情况",{"2":{"333":1}}],["我们经常在文件夹根目录创建一个",{"2":{"312":1}}],["我们经常需要定义一些有通用约束的接口",{"2":{"256":1}}],["我们完全可以用",{"2":{"308":1}}],["我们已经推开了模块化编程的大门",{"2":{"303":1}}],["我们旨在理解不同模块化规范的特点与适用场景",{"2":{"293":1}}],["我们通过两个示例来演示其从",{"2":{"482":1}}],["我们通过系列文章详细介绍了模块化的基础概念",{"2":{"272":1}}],["我们通常以为自己没成事是因为缺少某个关键的",{"2":{"622":1}}],["我们通常会遇到以下三种常见的",{"2":{"452":1}}],["我们通常会结合经典的设计模式来组织模块的内部逻辑与对外接口",{"2":{"299":1}}],["我们通常需要处理大量文件",{"2":{"202":1}}],["我们通常采用",{"2":{"3":1,"205":1}}],["我们学会用泛型的思维方式去设计通用的数据结构",{"2":{"271":1}}],["我们应该继续尝试走进科学",{"2":{"908":1}}],["我们应该追求做",{"2":{"396":1}}],["我们应该",{"2":{"250":1}}],["我们来看看不同项目场景下的实际应用",{"2":{"204":1}}],["我们或许能提炼出一个更普适的架构哲学",{"2":{"144":1}}],["我们绝不会在组件里直接裸写",{"2":{"99":1}}],["我们一般使用",{"2":{"95":1}}],["我们定义组件边界",{"2":{"12":1}}],["我们需要的不再是花哨的样式技巧",{"2":{"934":1}}],["我们需要继续思考是否能把结尾与开头也用一条线段连接起来形成一个增强回路",{"2":{"908":1}}],["我们需要对",{"2":{"605":1}}],["我们需要摆脱",{"2":{"603":1}}],["我们需要通过",{"2":{"600":1}}],["我们需要颠覆传统的创新范式",{"2":{"598":1}}],["我们需要具备极其敏锐的",{"2":{"541":1}}],["我们需要认清一个现实",{"2":{"538":1}}],["我们需要追踪的是",{"2":{"537":1}}],["我们需要一座桥梁",{"2":{"536":1}}],["我们需要比以前更清晰地告诉",{"2":{"532":1}}],["我们需要将",{"2":{"532":1}}],["我们需要重点捕获",{"2":{"488":1}}],["我们需要在休息",{"2":{"605":1}}],["我们需要在自然语言与",{"2":{"532":1}}],["我们需要在入口处显式加载",{"2":{"481":1}}],["我们需要在这一阶段找出驱动",{"2":{"5":1}}],["我们需要清醒地认识到",{"2":{"458":1}}],["我们需要保持敏锐",{"2":{"399":1}}],["我们需要执行一套完整的逆向工程循环",{"2":{"371":1}}],["我们需要判断哪些环节利用",{"2":{"367":1}}],["我们需要为它设计底盘和方向盘",{"2":{"367":1}}],["我们需要同时具备",{"2":{"367":1}}],["我们需要利用",{"2":{"358":1}}],["我们需要引入分层架构",{"2":{"336":1}}],["我们需要关注以下几个层面",{"2":{"226":1}}],["我们需要关注以下三个关键环节",{"2":{"3":1}}],["我们需要借助可配置化工具",{"2":{"219":1}}],["我们需要掌握这些要点",{"2":{"175":1}}],["我们需要发送庞大的",{"2":{"143":1}}],["我们需要",{"2":{"108":1}}],["我们需要配置",{"2":{"106":1}}],["我们需要设计反向数据流",{"2":{"7":1}}],["行是知的完成",{"2":{"958":1}}],["行是知的落实",{"2":{"958":1}}],["行文至此",{"2":{"911":1,"919":1,"958":1}}],["行尾等属性配置",{"2":{"881":1}}],["行代码",{"2":{"843":1}}],["行调用的函数",{"2":{"840":1}}],["行缓冲",{"2":{"840":1}}],["行列索引到像素",{"2":{"706":1}}],["行操作",{"2":{"650":1,"654":1}}],["行数上限",{"2":{"594":1}}],["行必须作为最后一行",{"2":{"581":1}}],["行的配置不仅难以维护",{"2":{"575":1}}],["行以内",{"2":{"572":1}}],["行内生成",{"2":{"565":1}}],["行内生成与修改",{"2":{"564":1}}],["行内导出",{"2":{"310":1}}],["行动指南",{"0":{"623":1},"1":{"624":1,"625":1,"626":1}}],["行动建议",{"2":{"465":1}}],["行动执行后",{"2":{"427":1}}],["行动模块确保了",{"2":{"412":1}}],["行动模块会决定尝试不同的关键词或切换工具",{"2":{"412":1}}],["行动模块的核心在于完成以下三个层面的逻辑闭环",{"2":{"412":1}}],["行动并非死板的执行脚本",{"2":{"412":1}}],["行动则是先",{"2":{"412":1}}],["行动类",{"2":{"411":1}}],["行动",{"0":{"412":1},"2":{"408":1,"412":1,"414":3,"427":2}}],["行动小建议",{"2":{"385":1}}],["行为指令",{"2":{"895":1}}],["行为强制层",{"2":{"887":1}}],["行为定义",{"2":{"881":1}}],["行为约束",{"2":{"877":1}}],["行为不一致",{"2":{"874":1}}],["行为方式",{"2":{"614":1}}],["行为准则",{"2":{"408":1,"823":1}}],["行为等同于函数重载",{"2":{"238":1}}],["行业分享",{"2":{"625":1}}],["行业洞察报告",{"2":{"518":1}}],["行业洞察等场景",{"2":{"518":1}}],["行业",{"2":{"406":1}}],["行业环境",{"2":{"400":1}}],["行",{"2":{"329":1,"824":1}}],["行情",{"2":{"123":1}}],["∩",{"2":{"236":1,"244":1}}],["裸参数",{"2":{"234":1}}],["底部构建环境",{"0":{"932":1},"2":{"928":1}}],["底座",{"2":{"551":1}}],["底类型",{"2":{"232":1}}],["底层类复用",{"2":{"928":1}}],["底层原理",{"2":{"926":1}}],["底层已经默认开启了支持",{"2":{"923":1}}],["底层就会自动通过",{"2":{"923":1}}],["底层流式文本生成",{"2":{"858":1}}],["底层差异",{"2":{"699":1}}],["底层依赖自研",{"2":{"699":1}}],["底层编译器",{"2":{"626":1}}],["底层操作系统",{"2":{"615":1}}],["底层模型大脑",{"2":{"544":1}}],["底层可插拔",{"2":{"344":1}}],["底层驱动",{"2":{"344":1}}],["底层通道",{"2":{"342":1}}],["底层封装",{"2":{"342":1}}],["底层的核心思想之一",{"2":{"302":1}}],["底层逻辑",{"2":{"198":1}}],["底层会自动重连",{"2":{"169":1}}],["底层会对数组进行确定性哈希",{"2":{"104":1}}],["底层传输机制",{"2":{"159":1}}],["底层",{"2":{"117":1,"126":1,"160":1,"342":1}}],["收获最大的书",{"2":{"610":1}}],["收藏夹吃灰",{"2":{"515":1}}],["收集一些建议",{"2":{"959":1}}],["收集大脑基于客观因素或主观思绪而产生的事务",{"2":{"953":1}}],["收集依赖",{"2":{"741":1}}],["收集可渲染对象",{"2":{"736":1}}],["收集素材",{"2":{"631":1}}],["收集用户的交互与纠错数据",{"2":{"541":1}}],["收集调查成果",{"2":{"471":1}}],["收集量化数据",{"2":{"470":1}}],["收集",{"2":{"470":1}}],["收集环境反馈",{"2":{"427":1}}],["收敛能力",{"2":{"367":1}}],["收货地址",{"2":{"278":1}}],["收窄后",{"2":{"249":1}}],["收窄",{"2":{"231":4}}],["收到响应时调用",{"2":{"839":1}}],["收到指定类型消息",{"2":{"163":1}}],["收到通用消息",{"2":{"163":1}}],["收到消息时调用",{"2":{"839":1}}],["收到消息时的回调",{"2":{"166":1}}],["收到消息",{"2":{"163":1,"166":1,"169":1}}],["收到服务器发送的通用消息",{"2":{"163":1}}],["收到",{"2":{"148":1,"153":1,"169":1,"175":1}}],["收到请求后立刻查询状态并返回",{"2":{"148":1}}],["辨识",{"2":{"230":1}}],["辨识字段收窄",{"2":{"231":1}}],["辨识字段",{"2":{"230":4}}],["称为",{"2":{"230":1}}],["∪",{"2":{"229":1,"244":1}}],["∅",{"2":{"227":1}}],["含少部分主食",{"2":{"963":1}}],["含端口检测与清理",{"2":{"881":1}}],["含插值计算",{"2":{"776":1}}],["含表达式",{"2":{"762":1}}],["含表达式+滤镜",{"2":{"762":2}}],["含组件引用",{"2":{"661":1}}],["含糊的地方你会直接卡壳",{"2":{"610":1}}],["含国内模型",{"2":{"568":1}}],["含在线",{"2":{"565":1}}],["含数据库的完整",{"2":{"562":1}}],["含",{"2":{"227":1,"505":1,"706":1}}],["集群上",{"2":{"551":1}}],["集中式全局状态",{"2":{"341":1}}],["集的交",{"2":{"250":1}}],["集的并",{"2":{"250":1}}],["集",{"2":{"229":2}}],["集合的视角",{"2":{"229":1}}],["集合交集",{"2":{"227":1}}],["集合并集",{"2":{"227":1}}],["集合含义",{"2":{"227":1}}],["集成测试",{"2":{"881":1}}],["集成页面可见性",{"2":{"832":1}}],["集成了完备的指令说明",{"2":{"441":1}}],["集成了文件读写",{"2":{"411":1}}],["集成",{"0":{"28":1,"342":1},"2":{"792":2,"849":3,"850":1,"872":1}}],["善用远程办公工具",{"2":{"956":1}}],["善用居家办公的优势",{"2":{"956":1}}],["善用指引",{"2":{"609":1}}],["善用",{"2":{"226":1,"578":1,"583":1}}],["共舞",{"2":{"903":1}}],["共",{"2":{"887":1}}],["共用同一套",{"2":{"670":1}}],["共性难题",{"2":{"494":1}}],["共存策略",{"2":{"333":1}}],["共同构成这一翻译层的核心骨架",{"2":{"536":1}}],["共同完成一个特定的功能",{"2":{"328":1}}],["共同减少团队协作中的摩擦",{"2":{"226":1}}],["共享相同的提示词标准化",{"2":{"856":1}}],["共享工具",{"2":{"849":1,"872":1}}],["共享工具层",{"2":{"847":1,"848":1}}],["共享工具库",{"2":{"290":1}}],["共享主会话",{"2":{"590":2,"592":1}}],["共享的依赖应该保持向后兼容",{"2":{"291":1}}],["共享的事件总线",{"2":{"289":1}}],["共享类型定义",{"2":{"290":1}}],["共享",{"2":{"290":1}}],["共享资源",{"2":{"290":1}}],["共享状态管理",{"2":{"289":1}}],["共享状态或自定义协议进行通信",{"2":{"286":1}}],["共享依赖管理",{"2":{"291":1}}],["共享依赖",{"2":{"288":1}}],["共享基础库",{"2":{"286":1}}],["共享基础设施",{"2":{"280":2}}],["共享领域概念",{"2":{"280":2}}],["共享模块路径",{"2":{"573":1}}],["共享模块",{"2":{"280":2,"290":1}}],["共享库需要被其他项目引用",{"2":{"213":1}}],["共享库项目",{"0":{"213":1},"2":{"211":1}}],["共有",{"2":{"233":1}}],["合成对象代理",{"2":{"762":1}}],["合成元素",{"2":{"762":3}}],["合成元素基类",{"2":{"762":2}}],["合并",{"2":{"734":1,"880":1,"881":1}}],["合并后的数据",{"2":{"663":1}}],["合并所有声明文件为一个",{"2":{"203":1}}],["合同分析",{"2":{"522":1}}],["合规要求",{"2":{"565":1}}],["合规与部署",{"2":{"519":1}}],["合规性和部分定制化场景下更具优势",{"2":{"510":1}}],["合规审批流程",{"2":{"436":1}}],["合作开发",{"2":{"353":1}}],["合理的饮食",{"2":{"950":1}}],["合理饮食",{"2":{"941":1}}],["合理性",{"2":{"390":1}}],["合理配置共享依赖的加载时机",{"2":{"291":1}}],["合理划分子应用边界",{"2":{"291":1}}],["合理运用泛型",{"2":{"263":1}}],["合理规划",{"2":{"226":1}}],["^4",{"2":{"288":1,"821":2}}],["^18",{"2":{"288":6}}],["^",{"2":{"222":1,"733":3,"859":1}}],["影响决策",{"2":{"519":1}}],["影响",{"2":{"217":1}}],["覆盖了",{"2":{"773":1}}],["覆盖了从",{"2":{"72":1}}],["覆盖所有模块",{"2":{"677":1}}],["覆盖从底层数据钻取到高层洞察阅读的完整链路",{"2":{"634":1}}],["覆盖读书笔记",{"2":{"628":1}}],["覆盖概念解释",{"2":{"628":1}}],["覆盖范围最广",{"2":{"518":1}}],["覆盖写入",{"2":{"489":1}}],["覆盖",{"2":{"405":1,"658":1,"715":1,"927":1}}],["覆盖广度不仅仅是",{"2":{"365":1}}],["覆盖或扩展特定选项",{"2":{"209":1}}],["子agent实现",{"2":{"889":1}}],["子agent不应加载此技能",{"2":{"887":1}}],["子agent",{"2":{"884":1}}],["子agent测试技能的方法",{"2":{"881":1}}],["子agent驱动任务执行",{"2":{"881":1}}],["子agent驱动开发",{"0":{"889":1},"2":{"876":1}}],["子命令",{"2":{"792":1}}],["子帧开关",{"2":{"764":1}}],["子节点局部变换",{"2":{"740":1}}],["子节点变换",{"2":{"740":1}}],["子节点",{"2":{"737":2}}],["子节点管理",{"2":{"677":1,"679":1}}],["子类型",{"2":{"706":1}}],["子类实现具体变形逻辑",{"2":{"771":1}}],["子类实现具体绘制逻辑",{"2":{"680":1}}],["子类实现",{"2":{"683":4}}],["子组件的根节点会受到父组件作用域的影响",{"2":{"924":1}}],["子组件通过",{"2":{"653":1}}],["子组件",{"2":{"653":1}}],["子组件在适当时机触发契约",{"2":{"7":1}}],["子包数",{"2":{"643":1}}],["子目录中的",{"2":{"571":1}}],["子模型丰富",{"2":{"522":1}}],["子模型",{"2":{"512":1}}],["子智能体角色",{"2":{"570":2}}],["子智能体",{"2":{"471":3}}],["子应用可以使用不同的技术栈",{"2":{"292":1}}],["子应用加载失败时的降级策略",{"2":{"291":1}}],["子应用数量不宜过多",{"2":{"291":1}}],["子应用入口",{"2":{"290":1}}],["子应用目录",{"2":{"290":1}}],["子应用之间的错误隔离",{"2":{"291":1}}],["子应用之间的通信是微前端架构的关键问题",{"2":{"289":1}}],["子应用之间通过事件总线",{"2":{"286":1}}],["子应用组件实现",{"2":{"288":1}}],["子应用",{"2":{"288":2}}],["子应用管理内部路由",{"2":{"286":1}}],["子项目配置",{"2":{"216":1}}],["子项目可以在继承的基础上",{"2":{"209":1}}],["子项目通过",{"2":{"209":1}}],["复制并设置默认请求头",{"2":{"832":1}}],["复制",{"2":{"792":1}}],["复制验证码居然不能自动跳转",{"2":{"370":1}}],["复古棕褐色",{"2":{"677":1}}],["复利",{"2":{"912":1}}],["复利曲线",{"2":{"463":1}}],["复利效应",{"2":{"386":1}}],["复盘自身存在的问题",{"2":{"942":1}}],["复盘总结的可选方式有很多种",{"2":{"935":1}}],["复盘",{"2":{"369":1}}],["复合操作",{"2":{"792":1}}],["复合属性自动拆分",{"2":{"685":1}}],["复合杠杆率",{"2":{"361":1}}],["复合指数增长",{"0":{"361":1}}],["复合型人才必须拥有极高的审美眼光与判别能力",{"2":{"359":1}}],["复合型人才生存手册",{"2":{"357":1}}],["复合项目",{"0":{"208":1}}],["复用的单位应该是",{"2":{"930":1}}],["复用困难",{"2":{"920":1}}],["复用登录会话",{"2":{"787":1}}],["复用基类",{"2":{"762":1}}],["复用",{"2":{"270":1,"739":1}}],["复用多次",{"2":{"252":1}}],["复杂组件库的",{"2":{"928":1}}],["复杂动画",{"2":{"928":1}}],["复杂动画等场景时又显得捉襟见肘",{"2":{"928":1}}],["复杂逻辑的审计与验收",{"2":{"902":1}}],["复杂多步任务自动执行",{"2":{"565":1}}],["复杂多步推理",{"2":{"511":1}}],["复杂代码审查与",{"2":{"521":1}}],["复杂任务规划",{"2":{"511":1,"521":1}}],["复杂推理等高要求场景",{"2":{"521":1}}],["复杂推理均居前列",{"2":{"519":1}}],["复杂推理",{"2":{"510":1,"521":1}}],["复杂的层级状态联动以及精细的交互动画",{"2":{"928":1}}],["复杂的图表交互",{"2":{"699":1}}],["复杂的任务给单智能体加再多",{"2":{"467":1}}],["复杂的数据清洗",{"2":{"378":1}}],["复杂建模",{"2":{"436":1}}],["复杂性",{"2":{"411":1}}],["复杂性的分解",{"2":{"12":1}}],["复杂技能拆解与进阶路径规划",{"2":{"406":1}}],["复杂领域驱动设计",{"2":{"344":1}}],["复杂交互型",{"2":{"342":1}}],["复杂度最高",{"2":{"734":1}}],["复杂度过高",{"2":{"728":1}}],["复杂度",{"2":{"525":1,"585":1}}],["复杂度控制",{"2":{"292":1}}],["复杂度问题",{"2":{"191":1}}],["复杂",{"2":{"274":1,"544":1,"702":1,"762":3}}],["复杂优先",{"2":{"199":1}}],["复杂猜想",{"2":{"198":1,"199":1}}],["复杂查询参数",{"2":{"160":1}}],["复杂场景可两者结合",{"2":{"155":1}}],["复杂场景下的",{"2":{"110":1}}],["复杂图形解析工具",{"2":{"113":1}}],["复杂应用的关键",{"2":{"293":1}}],["复杂应用",{"2":{"18":1}}],["继续积累常识",{"2":{"964":1}}],["继续加大训练强度",{"2":{"963":1,"964":1}}],["继续生成",{"2":{"863":1}}],["继续调用",{"2":{"859":1}}],["继续对话迭代功能",{"2":{"561":1}}],["继续发送",{"2":{"139":1}}],["继承自",{"2":{"680":1,"682":1,"839":1}}],["继承其属性和方法",{"2":{"270":1}}],["继承其他",{"2":{"203":1}}],["继承根配置",{"2":{"216":1}}],["继承根目录或父项目的通用配置",{"2":{"209":1}}],["继承根目录的基础配置",{"2":{"203":1}}],["继承",{"0":{"240":1},"2":{"205":1,"677":2,"740":3,"742":1,"921":1}}],["语音助手等场景",{"2":{"523":1}}],["语音生成等",{"2":{"843":1}}],["语音生成",{"2":{"522":1}}],["语音克隆与",{"2":{"522":1}}],["语音合成与视频生成能力强",{"2":{"522":1}}],["语音合成与克隆",{"2":{"512":1}}],["语音合成",{"2":{"522":1}}],["语音转录",{"2":{"515":1}}],["语音",{"2":{"410":1,"512":1,"522":2,"523":1,"849":1}}],["语料库",{"2":{"360":1}}],["语义令牌",{"2":{"929":1}}],["语义化命名",{"2":{"925":1}}],["语义化",{"2":{"925":1}}],["语义化版本号更新",{"2":{"881":1}}],["语义化版本",{"2":{"331":1}}],["语义自洽",{"2":{"329":1}}],["语境场",{"2":{"367":1}}],["语境设计",{"2":{"367":1}}],["语境构建",{"0":{"367":1}}],["语境",{"2":{"330":1}}],["语句不同",{"2":{"313":1}}],["语句中缺少",{"2":{"203":1}}],["语法强大",{"2":{"928":1}}],["语法糖",{"2":{"734":1}}],["语法解析器",{"2":{"647":1,"655":2}}],["语法解析",{"2":{"646":1}}],["语法解析和表达式求值引擎",{"2":{"645":1}}],["语法的价值又还剩多少",{"2":{"553":1}}],["语法最显著的扩展是支持",{"2":{"318":1}}],["语法实践",{"2":{"310":1,"311":1}}],["语法",{"2":{"203":1,"308":1,"320":1,"553":1}}],["语法支持",{"2":{"203":1}}],["语言模型调用选项",{"2":{"866":1}}],["语言模型接口",{"2":{"866":1}}],["语言模型抽象",{"2":{"854":1}}],["语言与运行时",{"2":{"845":2}}],["语言支持",{"2":{"701":1}}],["语言精练紧凑",{"2":{"606":1}}],["语言也更为精练紧凑",{"2":{"606":1}}],["语言风格",{"2":{"494":1}}],["语言编写的",{"2":{"343":1}}],["语言",{"2":{"342":1,"553":1,"562":1,"699":1,"702":1,"706":2}}],["语言标准",{"2":{"308":1}}],["语言和环境选项",{"2":{"203":1}}],["语言之上封装了一层",{"2":{"66":1}}],["语言环境",{"2":{"59":1}}],["互联网行业与科技",{"2":{"947":1}}],["互联网信息",{"2":{"947":4}}],["互联网公司的指数型增长",{"2":{"909":1}}],["互动内容需要激发用户对诗歌创作的热情",{"2":{"506":1}}],["互不干扰",{"2":{"297":1,"342":1}}],["互不影响",{"2":{"285":1,"292":1}}],["互不阻塞",{"2":{"86":1}}],["互操作性",{"2":{"333":1}}],["互操作性与安全性",{"2":{"322":1}}],["互操作",{"2":{"203":1}}],["形如",{"2":{"952":1}}],["形与神俱",{"2":{"941":1}}],["形状过滤",{"2":{"792":1}}],["形状层",{"2":{"765":1}}],["形状属性工厂",{"2":{"764":1}}],["形状属性",{"2":{"762":1}}],["形状属性变更到屏幕渲染的完整流程",{"0":{"689":1}}],["形状路径构建器",{"2":{"762":1}}],["形状路径",{"2":{"762":1}}],["形状路径接口代理",{"2":{"762":1}}],["形状集合",{"2":{"762":1}}],["形状集合池",{"2":{"762":1}}],["形状处理与变形修饰器",{"2":{"762":1}}],["形状对象池",{"2":{"762":1}}],["形状对象代理",{"2":{"762":1}}],["形状类型枚举",{"2":{"762":1}}],["形状变换管理器",{"2":{"762":1}}],["形状变形等核心能力",{"2":{"761":1}}],["形状变形修饰器管道",{"2":{"771":1}}],["形状变形修饰器系统",{"0":{"771":1}}],["形状变形修饰器",{"2":{"761":1}}],["形状变形系统",{"2":{"757":1}}],["形状组数据",{"2":{"762":1}}],["形状数据",{"2":{"762":2}}],["形状渲染辅助数据结构",{"2":{"762":1}}],["形状渲染基类",{"0":{"683":1}}],["形状元素基类",{"2":{"762":1}}],["形状元素辅助",{"2":{"762":1}}],["形状元素",{"2":{"762":3}}],["形状修饰器注册中心",{"2":{"776":1}}],["形状修饰器注册中心与基类",{"2":{"762":1}}],["形状修饰器契约",{"2":{"776":1}}],["形状修饰器",{"2":{"760":1,"764":1,"765":2,"776":1}}],["形状三角剖分",{"2":{"734":1}}],["形状",{"2":{"693":1,"706":1,"715":1,"734":1,"770":1}}],["形状基类契约",{"2":{"692":1}}],["形状基类",{"2":{"679":1}}],["形状抽象基类",{"2":{"677":1}}],["形态运营的",{"2":{"523":1}}],["形式的复合",{"2":{"685":1}}],["形式的导入",{"2":{"203":1}}],["形式",{"2":{"504":1,"505":2,"506":2,"507":1,"508":1}}],["形",{"2":{"296":1}}],["形成嵌套包装链",{"2":{"861":1}}],["形成与",{"2":{"653":1}}],["形成自己的观点",{"2":{"631":1}}],["形成有体系的永久笔记时",{"2":{"628":1}}],["形成",{"2":{"622":1,"737":1}}],["形成对真实世界的扭曲认知",{"2":{"614":1}}],["形成多层防护",{"2":{"588":1}}],["形成人机协同的质量把关",{"2":{"537":1}}],["形成团队知识流水线",{"2":{"515":1}}],["形成空间对比",{"2":{"507":1}}],["形成闭环",{"2":{"408":1,"427":1}}],["形成了",{"2":{"387":1}}],["形成的自我强化闭环",{"2":{"386":1}}],["形成一个闭环",{"2":{"386":1}}],["形成质量闭环",{"2":{"9":1}}],["形成可对比",{"2":{"3":1}}],["禁用等",{"2":{"927":1}}],["禁用",{"2":{"203":2,"655":1}}],["禁止在业务代码中",{"2":{"928":1}}],["禁止在模块顶层声明可变状态",{"2":{"6":1}}],["禁止任何实现动作",{"2":{"888":1}}],["禁止读取敏感文件",{"2":{"595":1}}],["禁止删除操作",{"2":{"595":1}}],["禁止直接操作数据库",{"2":{"573":1}}],["禁止的操作",{"2":{"570":1}}],["禁止使用",{"2":{"448":1}}],["禁止",{"2":{"203":1,"641":1}}],["禁止隐式",{"2":{"203":1}}],["禁止缓存",{"2":{"177":1}}],["始终面朝相机",{"2":{"734":1}}],["始终是一盏指引方向的不灭灯塔",{"2":{"400":1}}],["始终寻求以最小代价获得最大收益",{"2":{"393":1}}],["始终被视为",{"2":{"333":2}}],["始终使用严格相等检查",{"2":{"203":1}}],["始终站在架构设计的高地",{"2":{"12":1}}],["隐私政策",{"2":{"792":1}}],["隐私模式",{"2":{"565":1}}],["隐性知识的显性化",{"2":{"628":1}}],["隐性知识",{"2":{"614":1}}],["隐性完美",{"2":{"556":1}}],["隐含多种解读的可能",{"2":{"506":1}}],["隐秘行业潜规则",{"2":{"375":1}}],["隐形成本或竞争格局角度给出惊人的补充",{"2":{"375":1}}],["隐式",{"2":{"203":1}}],["隐藏自动化特征",{"2":{"799":1}}],["隐藏加载动画",{"2":{"719":1}}],["隐藏了对象实例化的复杂逻辑",{"2":{"300":1}}],["隐藏类型信息",{"2":{"253":1}}],["隐藏内部细节",{"2":{"197":1}}],["隐藏所有内部细节",{"2":{"195":1}}],["隐藏的坑",{"0":{"119":1}}],["报告中提到的那个关键数字",{"2":{"526":1}}],["报告进行自动评审",{"2":{"476":1}}],["报告生成",{"2":{"472":1}}],["报告的技能",{"2":{"470":1}}],["报告撰写员",{"2":{"416":1,"471":1}}],["报告偏好",{"2":{"414":1}}],["报告可能与",{"2":{"203":1}}],["报告可达代码错误",{"2":{"203":1}}],["报告标记为",{"2":{"203":1}}],["报告",{"2":{"203":1,"416":1,"470":2,"471":4}}],["报告隐式类型转换可能丢失数据的警告",{"2":{"203":1}}],["报告未使用的参数",{"2":{"203":1}}],["报告未使用的标签",{"2":{"203":2}}],["报错",{"2":{"203":1,"402":1}}],["报文规范",{"2":{"121":1}}],["启动使用橄榄油",{"2":{"964":1}}],["启动脚本",{"2":{"888":1}}],["启动器",{"2":{"881":1}}],["启动浏览器会话",{"2":{"796":1}}],["启动动画循环",{"2":{"776":1}}],["启动构建监听",{"2":{"752":1}}],["启动整个渲染流程",{"2":{"649":1}}],["启动项目",{"2":{"631":1}}],["启动代码审查",{"2":{"588":1}}],["启动开发服务器",{"2":{"573":1,"666":1,"695":1}}],["启动",{"2":{"568":1,"571":1}}],["启动双轨模式",{"2":{"3":1}}],["启发",{"2":{"344":2}}],["启用流式输出",{"2":{"490":1}}],["启用规则",{"2":{"216":1}}],["启用增量编译",{"2":{"203":1}}],["启用复合项目",{"2":{"203":1}}],["启用对",{"2":{"203":1}}],["启用装饰器元数据",{"2":{"203":1}}],["启用实验性装饰器支持",{"2":{"203":1}}],["启用所有",{"2":{"203":1}}],["启用所有严格类型检查选项",{"2":{"203":1}}],["启用后会将",{"2":{"203":1}}],["启用后",{"2":{"203":1,"208":1,"217":1}}],["兼顾多样性的方程组",{"2":{"915":1}}],["兼顾碎片信息收集与深度创作",{"2":{"515":1}}],["兼顾安全性与灵活性",{"2":{"411":1}}],["兼顾价格便宜和交通便利在",{"2":{"394":1}}],["兼顾性能与更新能力",{"2":{"58":1}}],["兼容服务端静态构建",{"2":{"928":1}}],["兼容实现",{"2":{"734":1}}],["兼容层",{"2":{"733":1}}],["兼容性说明",{"2":{"881":1}}],["兼容性",{"2":{"728":1,"822":1,"928":1}}],["兼容性最佳",{"2":{"203":1}}],["兼容历史代码",{"2":{"642":1}}],["兼容格式",{"2":{"523":1}}],["兼容接口",{"2":{"523":1}}],["兼容接口可路由至",{"2":{"523":1}}],["兼容你喜欢的框架和",{"2":{"340":1}}],["兼容",{"2":{"203":2,"298":1,"308":1,"523":3,"815":1,"881":1}}],["目的是提升内容的连贯性",{"2":{"426":1}}],["目前只包括身体健康与居家这一个大类",{"2":{"947":1}}],["目前不能给这个答案",{"2":{"945":1}}],["目前尚属前沿领域",{"2":{"928":1}}],["目前已成为",{"2":{"923":1}}],["目前最受开发者欢迎的",{"2":{"523":1}}],["目前最受研究者和开发者青睐的",{"2":{"518":1}}],["目前国外模型",{"2":{"510":1}}],["目前的实践仍集中在文本",{"2":{"509":1}}],["目前系统在多轮迭代",{"2":{"476":1}}],["目前",{"2":{"413":1,"442":1,"491":1,"901":1,"947":1}}],["目前主流的微前端实现方案有以下几种",{"2":{"287":1}}],["目标拆解的细一点",{"2":{"942":1}}],["目标之上还有原则",{"2":{"907":1}}],["目标隧道",{"2":{"906":1,"907":1,"910":1}}],["目标或许弊大于利",{"2":{"906":1}}],["目标描述",{"2":{"895":1}}],["目标相关错误",{"2":{"792":1}}],["目标解析",{"2":{"792":1,"799":2}}],["目标用户",{"2":{"700":1,"728":1,"756":1,"784":1}}],["目标用户与使用场景",{"0":{"671":1,"700":1,"756":1,"785":1,"843":1,"875":1}}],["目标用户群",{"2":{"639":1}}],["目标场景与典型",{"0":{"640":1}}],["目标是深度理解与个人洞见",{"2":{"628":1}}],["目标是规模化的知识覆盖",{"2":{"628":1}}],["目标论",{"2":{"598":1}}],["目标模糊",{"2":{"363":1}}],["目标运行环境",{"2":{"322":1}}],["目标",{"2":{"203":1,"383":1,"821":1,"906":1,"943":1}}],["目录之间不是孤立的",{"2":{"631":1}}],["目录的设计思路可以归纳为",{"2":{"597":1}}],["目录级",{"2":{"571":1}}],["目录概览",{"0":{"570":1}}],["目录模块",{"2":{"334":1}}],["目录结构本身就是一套知识加工流水线",{"2":{"630":1}}],["目录结构",{"0":{"647":1,"677":1,"706":1,"734":1,"762":1,"881":1},"2":{"572":1}}],["目录结构示意如下",{"2":{"211":1}}],["目录结构与路由关系示例",{"0":{"79":1}}],["目录结构就能理解整个应用拓扑",{"2":{"76":1}}],["目录高亮等客户端交互",{"2":{"66":1}}],["目录是一个完全自包含的静态站点",{"2":{"63":1}}],["目录下的单独模块",{"2":{"706":1}}],["目录下的一个",{"2":{"591":1}}],["目录下的",{"2":{"576":1}}],["目录下找到了以下输出结果",{"2":{"474":1}}],["目录下",{"2":{"62":1}}],["目录",{"2":{"43":1,"62":1,"65":1,"203":6,"334":1,"471":1,"570":2,"573":2,"629":1,"726":1,"872":1}}],["然后北上帝都",{"2":{"959":1}}],["然后逼着自己变",{"2":{"958":1}}],["然后把工作与生活中的事务填充进去",{"2":{"955":2}}],["然后统计并调整午休",{"2":{"954":1}}],["然后调整行动呢",{"2":{"942":1}}],["然后再谈健康养生",{"2":{"938":1}}],["然后再为每个子任务制订详细的执行计划",{"2":{"423":1}}],["然后编译成浏览器可读的普通",{"2":{"921":1}}],["然后尝试去改善",{"2":{"909":1}}],["然后就更能理解新知识",{"2":{"908":1}}],["然后结合实际情况降维打击具象世界",{"2":{"908":1}}],["然后借助平衡思维制定合理的多目标去多方面推动",{"2":{"907":1}}],["然后按技能定义的流程执行",{"2":{"883":1}}],["然后进入工具调用循环",{"2":{"863":1}}],["然后通过",{"2":{"649":1}}],["然后提醒用户你的",{"2":{"506":1}}],["然后使用欢快且俏皮的语句跟用户互动",{"2":{"506":1}}],["然后将其部署到了千帆提供的平台",{"2":{"494":1}}],["然后在这个过程中",{"2":{"466":1}}],["然后在前沿地带敏锐地嗅到那些被主流忽视的空白",{"2":{"358":1}}],["然后迭代",{"2":{"465":1}}],["然后根据项目需求进行调整",{"2":{"202":1}}],["然而",{"2":{"1":1,"69":1,"95":1,"145":2,"292":1,"383":2,"525":1,"530":1}}],["密码强度",{"2":{"366":1}}],["密码加密",{"2":{"200":1}}],["密集型计算",{"2":{"344":2}}],["密钥的引用方式",{"2":{"570":1}}],["密钥或令牌的外部服务",{"2":{"439":1}}],["密钥",{"2":{"28":1}}],["效能防线",{"2":{"602":1}}],["效率源于专注地运用工具做正确的事",{"2":{"956":1}}],["效率低下但可能偶然踩中机会",{"2":{"622":1}}],["效率越来越低",{"2":{"613":1}}],["效率与效能",{"0":{"602":1}}],["效率翻倍",{"2":{"515":1}}],["效率边界",{"2":{"491":1}}],["效率差异",{"2":{"199":1}}],["效应的显现都需要时间",{"2":{"388":1}}],["效果源于对重要业务或任务的识别",{"2":{"956":1}}],["效果就会比单独",{"2":{"909":1}}],["效果类型常量",{"2":{"762":1}}],["效果对象代理",{"2":{"762":1}}],["效果占位",{"2":{"762":1}}],["效果管理器入口",{"2":{"762":1}}],["效果管理器",{"2":{"762":1}}],["效果管理",{"2":{"762":1}}],["效果注册管理器",{"2":{"762":1}}],["效果好",{"2":{"758":1}}],["效果最优",{"2":{"730":1}}],["效果极佳",{"2":{"610":1}}],["效果远好于新开一次搜索",{"2":{"518":1}}],["效果",{"2":{"41":1,"118":1,"762":1,"782":1}}],["案例",{"0":{"199":1},"2":{"367":1,"372":1}}],["忽略文件",{"2":{"823":1}}],["忽略规则",{"2":{"762":1,"881":1}}],["忽略范围",{"2":{"591":1}}],["忽略",{"2":{"198":1,"367":1}}],["剃除",{"2":{"197":1}}],["抽屉中也能继承",{"2":{"663":1}}],["抽屉",{"2":{"653":1}}],["抽象语法树",{"2":{"932":1}}],["抽象浏览器操作",{"2":{"786":1,"789":1}}],["抽象后端接口",{"2":{"739":1}}],["抽象基类",{"2":{"733":1}}],["抽象出",{"2":{"680":1}}],["抽象层的上移并不意味着底层知识的贬值",{"2":{"530":1}}],["抽象并封装数据持久化操作",{"2":{"275":1}}],["抽象",{"2":{"191":1,"525":1,"791":1}}],["抽离组件而非样式",{"2":{"930":1}}],["抽离为独立组件",{"2":{"94":1}}],["抽离为独立的客户端组件",{"2":{"74":1}}],["抽离逻辑",{"2":{"2":1}}],["领域最新的技术趋势与实践",{"2":{"901":1}}],["领域常见需求缺乏前端友好的封装",{"2":{"842":1}}],["领域专家",{"2":{"625":1}}],["领域型能力",{"2":{"436":1}}],["领域尚无统一标准",{"2":{"413":1}}],["领域建模",{"2":{"282":1}}],["领域事件定义",{"2":{"281":1}}],["领域事件用于表达领域内发生的事情",{"2":{"281":1}}],["领域模型",{"2":{"279":1,"280":1}}],["领域服务",{"2":{"278":1,"279":1,"282":1}}],["领域",{"2":{"278":1,"402":1,"628":1}}],["领域层",{"2":{"189":1,"190":1,"277":1,"279":2,"280":1,"281":1}}],["领域驱动设计",{"0":{"276":1},"1":{"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1},"2":{"189":1,"276":1}}],["统协",{"2":{"761":1}}],["统计学与数学知识应用依旧存在短板",{"2":{"954":1}}],["统计信息",{"2":{"734":1}}],["统计",{"2":{"712":1}}],["统计面板",{"2":{"110":1}}],["统一转化为浏览器能够安全",{"2":{"932":1}}],["统一导出",{"2":{"824":1}}],["统一导出公共",{"2":{"823":1}}],["统一实现",{"2":{"799":1}}],["统一入口",{"2":{"734":1}}],["统一渲染接口",{"2":{"732":1}}],["统一数组",{"2":{"706":1}}],["统一数据接入层",{"2":{"548":1}}],["统一管控模型与",{"2":{"568":1}}],["统一管理依赖版本",{"2":{"291":1}}],["统一地读取外部",{"2":{"548":1}}],["统一错误提示的利器",{"2":{"342":1}}],["统一的数据模型和渲染层",{"2":{"699":1}}],["统一的事件处理与动作分派系统",{"2":{"654":1}}],["统一的",{"2":{"330":1,"342":1}}],["统一",{"2":{"291":2,"344":1,"523":1,"728":1,"844":1,"851":1,"866":1}}],["统一技术规范",{"2":{"291":1}}],["统一语言减少开发与业务之间的误解",{"2":{"283":1}}],["统一语言",{"2":{"277":1}}],["统一异常处理与错误响应格式化",{"2":{"275":1}}],["统一在同一个字段中",{"2":{"230":1}}],["统一编译规则",{"2":{"210":1}}],["统一抽象",{"2":{"188":1}}],["逻辑组",{"2":{"734":1}}],["逻辑说明",{"0":{"795":1},"2":{"649":1,"679":1,"708":1,"736":1,"764":1,"853":1,"883":1}}],["逻辑严密",{"2":{"606":1}}],["逻辑严谨",{"2":{"511":1}}],["逻辑顶尖",{"2":{"522":1}}],["逻辑推理",{"2":{"512":1,"522":1,"551":1}}],["逻辑疲劳",{"2":{"467":1}}],["逻辑编排",{"2":{"442":1}}],["逻辑性和专业度大幅提升",{"2":{"508":1}}],["逻辑性",{"2":{"426":1}}],["逻辑漏洞或错误",{"2":{"426":1}}],["逻辑链路透明",{"2":{"414":1}}],["逻辑",{"2":{"188":1,"410":1,"433":1,"922":1}}],["属于多余逻辑",{"2":{"187":1}}],["属于",{"2":{"185":1,"197":1,"200":1}}],["属性时",{"2":{"924":1}}],["属性暴露",{"2":{"868":1}}],["属性值不再来自关键帧插值",{"2":{"774":1}}],["属性类型",{"2":{"770":1}}],["属性类型常量",{"2":{"762":1}}],["属性对象代理",{"2":{"762":1}}],["属性组工厂",{"2":{"762":1}}],["属性更新",{"2":{"739":1}}],["属性混合",{"2":{"734":1}}],["属性绑定",{"2":{"734":1,"743":1}}],["属性存储",{"2":{"685":1}}],["属性存在性检查",{"2":{"231":1}}],["属性系统工厂",{"0":{"685":1}}],["属性系统",{"2":{"682":2,"776":1}}],["属性补间",{"2":{"680":1}}],["属性校验",{"2":{"679":1}}],["属性校验器",{"2":{"677":1}}],["属性缓动",{"2":{"677":1}}],["属性工厂",{"2":{"677":1,"679":1,"685":1,"760":1,"762":1,"764":1}}],["属性管理",{"2":{"673":1,"734":1}}],["属性面板渲染器",{"2":{"656":1}}],["属性面板",{"2":{"645":1,"734":1}}],["属性名",{"2":{"330":1}}],["属性冲突的本质",{"0":{"237":1}}],["属性",{"2":{"166":1,"263":1,"266":1,"270":1,"699":1,"734":2,"755":1,"761":1,"768":1,"922":1,"924":1,"928":1}}],["属性控制加载时机",{"2":{"84":1}}],["于是就将",{"2":{"909":1}}],["于是疯狂地囤积资料",{"2":{"621":1}}],["于是我们快速使用千帆提供的",{"2":{"494":1}}],["于是你继续猛拧",{"2":{"388":1}}],["于是回路诞生了",{"2":{"386":1}}],["于是他们投入大量精力做",{"2":{"366":1}}],["于是",{"2":{"184":1,"305":1}}],["邮箱",{"2":{"184":1,"640":1,"668":1,"905":1}}],["邮件",{"2":{"20":1}}],["拒绝盲目的过度设计",{"2":{"902":1}}],["拒绝异化",{"2":{"615":1}}],["拒绝无效输入",{"2":{"576":1}}],["拒绝复杂",{"2":{"201":1}}],["拒绝",{"0":{"183":1,"189":1},"1":{"184":1,"185":1,"190":1,"191":1},"2":{"297":1,"624":1}}],["未预处理着色器材质",{"2":{"734":1}}],["未包装",{"2":{"661":1}}],["未提供社会价值则难致富",{"2":{"612":1}}],["未语含情凝远岫",{"2":{"508":1}}],["未拆分为小文件按需加载",{"2":{"445":1}}],["未定义的函数",{"2":{"219":1}}],["未使用的变量是错误",{"2":{"572":1}}],["未使用的代码更容易被剔除",{"2":{"311":1}}],["未使用的参数",{"2":{"186":1}}],["未使用的功能等",{"2":{"182":1}}],["未来拓展",{"2":{"928":1}}],["未来",{"2":{"539":1}}],["未来我们将探索如何引入一个",{"2":{"476":1}}],["未来已来",{"2":{"420":1}}],["未来的软件开发将是人与",{"2":{"538":1}}],["未来的落地范式绝非",{"2":{"535":1}}],["未来的高级工程师",{"2":{"533":1}}],["未来的局限与机会",{"2":{"509":1}}],["未来的核心竞争力将不再仅仅是编写了多少行代码",{"2":{"420":1}}],["未来的全栈工程师将不再是",{"2":{"376":1}}],["未来的想象空间在于",{"2":{"355":1}}],["未来演进",{"0":{"355":1}}],["未来需加",{"2":{"200":1}}],["未来需求留待未来迭代",{"2":{"183":1}}],["未来会增加字段",{"2":{"200":1}}],["未来扩展时再新增",{"2":{"185":1}}],["未来功能",{"2":{"185":1}}],["未来可能会借鉴",{"2":{"354":1}}],["未来可能用",{"2":{"184":3}}],["未来可能要加地址",{"2":{"184":1}}],["未完待续",{"2":{"116":1}}],["去尝试改变",{"2":{"959":1}}],["去尝试摆脱",{"2":{"956":1}}],["去改变",{"2":{"935":1}}],["去换取前端资产的长期可维护性与业务交付的极速",{"2":{"934":1}}],["去卷",{"2":{"906":1}}],["去重构生活秩序",{"2":{"906":1}}],["去重检查",{"2":{"711":1}}],["去重",{"2":{"685":1}}],["去执行",{"2":{"592":1}}],["去做这件事",{"2":{"585":1}}],["去粘合一个支离破碎的系统",{"2":{"553":1}}],["去",{"2":{"542":1}}],["去处理模糊与非确定性",{"2":{"541":1}}],["去夺回对软件质量的掌控力",{"2":{"526":1}}],["去编排复杂的业务流",{"2":{"491":1}}],["去连接真实的外部数据",{"2":{"440":1}}],["去关注更具创造力的决策",{"2":{"420":1}}],["去中心化的技能与知识库",{"2":{"419":1}}],["去跑通闭环",{"2":{"378":1}}],["去贡献价值",{"2":{"377":1}}],["去深究为什么",{"2":{"369":1}}],["去撬动最大的业务价值",{"2":{"365":1}}],["去追寻那些让你兴奋不已",{"2":{"362":1}}],["去追问一个看似疯狂但属于",{"2":{"360":1}}],["去噪",{"2":{"348":1}}],["去除所有",{"2":{"186":1,"201":1}}],["去除冗余",{"2":{"181":1,"188":1}}],["去掉",{"2":{"166":1,"200":1}}],["≠",{"2":{"181":1,"517":1}}],["比较有规律的作息被列为头等大事",{"2":{"950":1}}],["比较长远的事情要靠建立正向的增强回路",{"2":{"909":1}}],["比较死板",{"2":{"160":1}}],["比例尺系统",{"2":{"706":1}}],["比记住具体的配置项更重要",{"2":{"597":1}}],["比非结构化",{"2":{"509":1}}],["比单纯追求大模型的参数规模更为重要",{"2":{"410":1}}],["比起用虚高的薪水去挖人",{"2":{"380":1}}],["比如阅读一些小说或自己觉得有趣的书",{"2":{"946":1}}],["比如传了",{"2":{"927":1}}],["比如周",{"2":{"907":1}}],["比如季度",{"2":{"907":1}}],["比如年",{"2":{"907":1}}],["比如两周后复盘效果",{"2":{"626":1}}],["比如本周验证什么",{"2":{"626":1}}],["比如是否适合自己",{"2":{"626":1}}],["比如增加可观测性的埋点",{"2":{"528":1}}],["比如用方框代表盒子",{"2":{"494":1}}],["比如文档模板",{"2":{"442":1}}],["比如网页改版或",{"2":{"402":1}}],["比如开源生态建设",{"2":{"386":1}}],["比如这几个人之间的利益与权责分配",{"2":{"383":1}}],["比如尝试写一篇",{"2":{"375":1}}],["比如初次使用",{"2":{"371":1}}],["比如显示预计时间",{"2":{"366":1}}],["比如不兼容的",{"2":{"331":1}}],["比如一个团队里有几个人",{"2":{"383":1}}],["比如一个自定义的",{"2":{"263":1}}],["比如一个小型工具类项目",{"2":{"189":1}}],["比如我们要获取一个对象的某个属性值",{"2":{"263":1}}],["比如我们定义了一个",{"2":{"255":1}}],["比如需要明确告诉其他开发者这个函数的返回类型",{"2":{"263":1}}],["比如定义一个",{"2":{"256":1}}],["比如调用",{"2":{"254":1}}],["比如",{"2":{"200":1,"263":1,"385":1,"442":1,"494":1,"571":1,"573":1,"938":1,"953":1,"957":1}}],["比如设计登录功能",{"2":{"181":1}}],["比",{"2":{"181":1,"343":1,"556":1}}],["电话会议室一种重要的沟通协作方式",{"2":{"956":1}}],["电子书",{"2":{"947":1}}],["电子书在便携性",{"2":{"613":1}}],["电视画面一闪而过",{"2":{"606":1}}],["电池故障+系统休眠+充电器接触不良",{"2":{"181":1}}],["电池耗尽",{"2":{"181":1}}],["电商系统中的订单",{"2":{"278":1}}],["电商订单同步",{"2":{"132":1}}],["电商平台",{"2":{"92":1}}],["电商价格",{"2":{"59":1}}],["电商类站点尤为突出",{"2":{"59":1}}],["电商详情页",{"2":{"48":1}}],["电商网站",{"2":{"31":1}}],["电商",{"2":{"18":1,"344":1}}],["手部跟踪",{"2":{"734":1}}],["手把手教到完全理解为止",{"2":{"619":1}}],["手头有参考网站想直接还原其界面",{"2":{"562":1}}],["手写大量样板代码",{"2":{"555":1}}],["手写杂乱的胶水代码",{"2":{"548":1}}],["手写实现并进行性能调优",{"2":{"531":1}}],["手感",{"2":{"457":1}}],["手中",{"2":{"415":1}}],["手",{"2":{"414":1}}],["手脚和专业领域的知识",{"2":{"544":1}}],["手脚",{"2":{"402":1,"408":1}}],["手机端快捷",{"2":{"518":1}}],["手机端日常问答",{"2":{"518":1}}],["手机电量",{"2":{"366":1}}],["手机号",{"2":{"184":1}}],["手机没电",{"2":{"181":1}}],["手动测试入口",{"2":{"677":1}}],["手动滤镜测试",{"2":{"677":1}}],["手动属性声明",{"2":{"673":1}}],["手动同步成本高",{"2":{"465":1}}],["手动引入或构建工具合并",{"2":{"320":1}}],["手动定义收窄逻辑",{"2":{"231":1}}],["手动触发",{"2":{"48":1}}],["手动修补会干扰",{"2":{"9":1}}],["满天飞",{"2":{"933":1}}],["满足不同性能",{"2":{"758":1}}],["满足",{"2":{"493":1,"758":1}}],["满足相同的需求时",{"2":{"181":1}}],["满载运算",{"2":{"136":1}}],["奥卡姆",{"2":{"181":1}}],["奥卡姆剃刀的价值愈发凸显",{"2":{"201":1}}],["奥卡姆剃刀的要求是",{"2":{"183":1,"189":1}}],["奥卡姆剃刀不仅是一种技术原则",{"2":{"201":1}}],["奥卡姆剃刀不是",{"2":{"200":1}}],["奥卡姆剃刀原则的本质",{"2":{"201":1}}],["奥卡姆剃刀原则的核心内涵",{"0":{"181":1}}],["奥卡姆剃刀要求",{"2":{"186":1,"192":1,"195":1,"198":1}}],["奥卡姆剃刀",{"2":{"181":1,"182":1}}],["世纪逻辑学家",{"2":{"181":1}}],["世界建模",{"2":{"733":1}}],["世界",{"2":{"161":1,"732":1}}],["勿增实体",{"2":{"181":1}}],["吗",{"2":{"180":1,"457":1,"928":2}}],["厘清了流式",{"2":{"180":1}}],["值得一提的是",{"2":{"903":1,"928":1}}],["值得铭记的几条原则",{"2":{"67":1}}],["值的事件",{"2":{"839":1}}],["值对",{"2":{"743":1}}],["值对象是不可变的",{"2":{"281":1}}],["值对象",{"2":{"278":1,"279":1,"282":2}}],["值累积",{"2":{"734":1}}],["值变更检测",{"2":{"685":1}}],["值越低越优先命中",{"2":{"661":1}}],["值满足",{"2":{"250":1}}],["值必须同时满足",{"2":{"250":1}}],["值必须同时满足所有成员类型",{"2":{"236":1}}],["值必须同时包含",{"2":{"236":1}}],["值唯一的字面量字段",{"2":{"230":1}}],["值可以是",{"2":{"229":1}}],["值只要属于其中之一即可",{"2":{"227":1}}],["值",{"2":{"177":1,"699":1,"755":1}}],["增删改能力",{"2":{"680":1}}],["增亮",{"2":{"677":1}}],["增长率",{"2":{"472":1}}],["增长率等",{"2":{"470":1}}],["增长的全链路",{"2":{"457":1}}],["增强体育锻炼活动来实现体重的减少",{"2":{"942":1}}],["增强构建",{"2":{"934":1}}],["增强的架构跃迁",{"0":{"934":1}}],["增强版",{"2":{"921":1}}],["增强代码的可读性和可维护性",{"2":{"920":1}}],["增强代码可读性",{"2":{"264":1}}],["增强型构建者",{"2":{"902":1}}],["增强型",{"0":{"628":1}}],["增强动态美",{"2":{"505":1}}],["增强讲解效果",{"2":{"494":1}}],["增强与编排",{"0":{"455":1}}],["增强",{"2":{"385":1,"506":1,"677":1}}],["增强回路小例子",{"0":{"909":1}}],["增强回路和调节回路这对孪生兄弟",{"2":{"387":1}}],["增强回路与调节回路",{"2":{"386":1}}],["增强回路",{"0":{"386":1},"2":{"383":2,"386":1,"387":2}}],["增加测试",{"2":{"451":1}}],["增加新的价值或收入流",{"2":{"399":1}}],["增加",{"2":{"366":1}}],["增加了一定的打包体积",{"2":{"342":1}}],["增加了配置的复杂性",{"2":{"216":1}}],["增加实体",{"2":{"188":1}}],["增加数据解析逻辑",{"2":{"175":1}}],["增加重试计数器",{"2":{"175":1}}],["增量构建更快",{"2":{"845":1}}],["增量极速打包",{"2":{"343":1}}],["增量信息",{"2":{"208":1}}],["增量编译命令",{"2":{"216":1}}],["增量编译优化",{"2":{"210":1}}],["增量编译信息文件",{"2":{"208":1}}],["增量编译信息文件路径",{"2":{"203":1}}],["增量编译",{"2":{"203":1,"207":1,"212":1}}],["增量静态再生",{"2":{"46":1,"57":1}}],["增量渲染缓解",{"2":{"31":1}}],["增量更新算法",{"2":{"713":1}}],["增量更新",{"2":{"21":1,"706":1,"719":1}}],["抛出异常",{"2":{"839":1}}],["抛出错误阻止重试",{"2":{"175":1}}],["抛出",{"2":{"175":1}}],["抛出致命错误停止重试",{"2":{"175":1}}],["抛出致命错误",{"2":{"175":1}}],["标量如不透明度",{"2":{"770":1}}],["标注",{"2":{"706":1}}],["标杆",{"2":{"567":1}}],["标题组件",{"2":{"706":1}}],["标题",{"2":{"472":1}}],["标志着大模型应用开发正在走向真正的",{"2":{"456":1}}],["标签带有",{"2":{"924":1}}],["标签阻止",{"2":{"888":1}}],["标签控制流转",{"2":{"879":1}}],["标签页管理",{"2":{"792":1}}],["标签防重叠",{"2":{"706":1}}],["标签布局",{"2":{"706":1}}],["标签",{"2":{"448":1,"450":1,"647":1,"677":1,"887":1,"922":1}}],["标签引入文件的方式很难看清依赖先后顺序",{"2":{"297":1}}],["标识所描述事件类型的字符串",{"2":{"839":1}}],["标识",{"2":{"278":2,"706":1,"771":1}}],["标识在整个生命周期中保持不变",{"2":{"278":1}}],["标记任务完成",{"2":{"889":1}}],["标记解析器",{"2":{"762":1}}],["标记所有任务为",{"2":{"708":1}}],["标记",{"2":{"706":1,"719":1,"762":1}}],["标记脏",{"2":{"685":1}}],["标记语言",{"2":{"338":1}}],["标记重要版本",{"2":{"331":1}}],["标记类型",{"0":{"247":1}}],["标记并触发关闭回调",{"2":{"175":1}}],["标记流是否已正常结束",{"2":{"175":1}}],["标准格式",{"2":{"895":1}}],["标准材质",{"2":{"742":1,"749":1}}],["标准支持",{"2":{"734":1}}],["标准作业程序",{"2":{"454":1}}],["标准扩展",{"2":{"411":1}}],["标准会员",{"2":{"397":1}}],["标准答案",{"2":{"360":1}}],["标准导航",{"2":{"349":1}}],["标准前后端分离架构",{"2":{"342":1}}],["标准装饰器",{"2":{"324":1}}],["标准化模块组装",{"2":{"544":1}}],["标准化流程",{"2":{"436":1}}],["标准化客服",{"2":{"405":1}}],["标准化装饰器",{"0":{"324":1}}],["标准化",{"2":{"287":1,"592":1,"848":1,"856":1}}],["标准化的输入契约",{"2":{"866":1}}],["标准化的消息类型",{"2":{"854":1}}],["标准化的操作手册",{"0":{"442":1}}],["标准化的",{"2":{"99":1,"436":1}}],["标准",{"2":{"134":1,"141":1,"142":1,"159":1,"160":1,"342":1,"445":1,"734":1}}],["取决于自身的思考深度",{"2":{"622":1}}],["取决于日常习惯",{"2":{"605":1}}],["取决于所接模型",{"2":{"568":1}}],["取代的底层编码实践",{"2":{"531":1}}],["取得成就究竟有什么不可替代的秘诀",{"2":{"362":1}}],["取消机制",{"2":{"682":1}}],["取消请求等功能",{"2":{"342":1}}],["取消订阅函数",{"2":{"175":1}}],["取全部",{"2":{"242":1,"250":1}}],["取共有",{"2":{"242":1,"250":1}}],["取",{"2":{"239":1}}],["取两家之长",{"2":{"160":1}}],["综合考量项目特点",{"2":{"928":1}}],["综合位置",{"2":{"672":1}}],["综合以上分析",{"2":{"597":1}}],["综合以上要点",{"2":{"175":1}}],["综合能力最强",{"2":{"519":1}}],["综合能力最全面",{"2":{"511":1,"521":1}}],["综上所述",{"2":{"140":1}}],["令牌失效",{"2":{"172":1}}],["令其批量生成符合",{"2":{"3":1}}],["思变是要结合客观事实和自身诉求来落地的",{"2":{"958":1}}],["思维模型和章法也是相当重要的",{"2":{"918":1}}],["思维以极低成本进行真实数据验证",{"2":{"600":1}}],["思维寻找突破性创新的可能",{"2":{"598":1}}],["思维",{"2":{"556":1,"902":1,"940":1}}],["思维链",{"2":{"545":1}}],["思维导图",{"2":{"515":1}}],["思路",{"2":{"504":1,"506":1}}],["思想创造",{"2":{"406":1}}],["思想的进一步细化",{"2":{"53":1}}],["思考与总结",{"2":{"936":1}}],["思考与总结来梳理",{"2":{"936":1}}],["思考要点",{"2":{"626":1}}],["思考是为了对输入的信息进行校验和逻辑判断",{"2":{"622":1}}],["思考+不执行",{"2":{"622":1}}],["思考+执行",{"0":{"622":1,"626":1},"2":{"622":3}}],["思考过程",{"2":{"537":1}}],["思考规范",{"2":{"504":1}}],["思考",{"2":{"414":3,"417":1,"488":1,"622":1}}],["思考核心稀缺资源的配置效率",{"2":{"391":1}}],["思考它做对了哪三件事",{"2":{"373":1}}],["思考中",{"2":{"172":1}}],["何时触发",{"2":{"592":1}}],["何时用技能",{"0":{"588":1}}],["何时用命令",{"0":{"588":1}}],["何时该拆分到",{"0":{"577":1}}],["何时放弃",{"2":{"171":1}}],["何时获取数据",{"2":{"69":1}}],["指标与业余学习和交流后续希望以周为单位推进",{"2":{"964":1}}],["指针事件区域大小",{"2":{"719":1}}],["指针事件系统",{"2":{"675":1,"677":1,"679":1}}],["指针",{"2":{"680":1}}],["指针类型映射",{"2":{"677":1}}],["指明知识门径",{"2":{"609":1}}],["指明方向的人",{"2":{"539":1}}],["指派审查任务",{"2":{"592":1}}],["指派一个独立的",{"2":{"592":1}}],["指派它执行",{"2":{"590":1}}],["指导家长如何一步步引导孩子理解题目本质",{"2":{"494":1}}],["指导",{"2":{"472":1}}],["指智能体接收外部输入",{"2":{"410":1}}],["指令优先级",{"2":{"887":1}}],["指令要具体",{"2":{"583":1}}],["指令和脚本打包封装成的标准化",{"2":{"547":1}}],["指令遵循精准",{"2":{"511":1,"521":2}}],["指令遵循度",{"2":{"509":1}}],["指令的信噪比变得至关重要",{"2":{"509":1}}],["指令说明",{"2":{"449":1}}],["指令数据",{"2":{"443":1}}],["指令层",{"2":{"443":1}}],["指令",{"2":{"408":1,"410":1,"418":1,"442":1,"504":1,"859":1}}],["指令即可",{"2":{"74":1}}],["指示器",{"2":{"366":1}}],["指出",{"2":{"361":1}}],["指数平方雾",{"2":{"734":1}}],["指数级倍增器",{"0":{"557":1},"2":{"902":1}}],["指数级的交付速度",{"2":{"463":1}}],["指数级增长",{"2":{"386":1}}],["指数增长的问题在于曲线在开始时给人的感觉很平",{"2":{"361":1}}],["指数退避重试",{"2":{"175":1}}],["指数退避",{"0":{"171":1},"2":{"171":1}}],["指向共享类型目录",{"2":{"203":1}}],["指向",{"2":{"203":5}}],["指定验收标准",{"2":{"568":1}}],["指定需要编译的指定文件",{"2":{"203":1}}],["指定需要编译的文件",{"2":{"203":1}}],["指定不需要编译的文件",{"2":{"203":1}}],["指定编译时使用的",{"2":{"203":1}}],["指定编译后代码使用的模块化方案",{"2":{"203":1}}],["指定编译后的",{"2":{"203":1}}],["指定输出格式",{"2":{"435":1}}],["指定输出字符集",{"2":{"203":1}}],["指定输出文件目录结构",{"2":{"203":1}}],["指定",{"2":{"203":1}}],["指定允许的库文件类型",{"2":{"203":1}}],["指",{"2":{"181":1}}],["停止脚本",{"2":{"888":1}}],["停止操作",{"2":{"820":1}}],["停止动画",{"2":{"776":1}}],["停止抱怨",{"2":{"626":1}}],["停止抱怨外界信息的真伪",{"2":{"624":1}}],["停止当前操作并列出冲突文件",{"2":{"451":1}}],["停止当前正在进行的相关查询请求",{"2":{"108":1}}],["停止重试",{"2":{"169":1,"171":1,"175":2}}],["除原生",{"2":{"920":1}}],["除非是不世出的罕见人才",{"2":{"941":1}}],["除非我们知道什么是最好的",{"2":{"359":1}}],["除非你在处理非常老旧的项目",{"2":{"320":1}}],["除",{"2":{"169":1}}],["除了不用划定专门的办公空间",{"2":{"956":1}}],["除了工作",{"2":{"938":1}}],["除了要懂得",{"2":{"433":1}}],["除了读写文件",{"2":{"414":1}}],["除了偶尔的进度更新",{"2":{"136":1}}],["除了前面提到的这些显式组件",{"2":{"85":1}}],["除了增加服务器成本",{"2":{"66":1}}],["冒号后有一个空格",{"2":{"168":1}}],["浅拷贝",{"2":{"168":1}}],["连点成树",{"2":{"609":1}}],["连续型",{"2":{"706":1}}],["连续性",{"2":{"410":1}}],["连续两个换行",{"2":{"168":1}}],["连接与交流",{"0":{"905":1}}],["连接管理",{"2":{"823":1,"824":1}}],["连接断开时浏览器自动重试但无法自定义重试逻辑",{"2":{"814":1}}],["连接断开后",{"2":{"139":1}}],["连接扩展",{"2":{"799":1}}],["连接任意提供商的任意模型",{"2":{"567":1}}],["连接被拒绝",{"2":{"449":1}}],["连接关系",{"0":{"383":1},"2":{"383":3,"908":2}}],["连接关闭回调",{"2":{"175":1}}],["连接成功时重置重试计数器",{"2":{"175":1}}],["连接状态追踪",{"0":{"173":1}}],["连接状态转换",{"2":{"126":1}}],["连接可能中断",{"2":{"171":1}}],["连接出错时的回调",{"2":{"169":1,"175":1}}],["连接出错",{"2":{"163":1}}],["连接出错或中断时触发",{"2":{"163":1}}],["连接错误",{"2":{"163":1}}],["连接已打开",{"2":{"163":1}}],["连接建立成功后的回调",{"2":{"169":1,"175":1}}],["连接建立成功",{"2":{"163":1,"169":1}}],["连接建立成功时触发",{"2":{"163":1}}],["连接建立后",{"2":{"127":1}}],["连接会保持打开状态一段较长时间",{"2":{"151":1}}],["连接都有严格超时限制",{"2":{"137":1}}],["连接池枯竭与网关超时",{"0":{"137":1}}],["连接方向",{"2":{"134":1}}],["连接至机器",{"2":{"129":2}}],["连接维持一个持久的",{"2":{"129":1}}],["连接完成协议切换",{"2":{"126":1}}],["连接初始化阶段采用标准",{"2":{"126":1}}],["连接全程保持开放",{"2":{"125":1}}],["连接数水位线",{"2":{"124":1}}],["连接并不会立即关闭",{"2":{"117":1}}],["连接",{"0":{"818":1},"2":{"115":1,"137":1,"169":1,"175":2,"790":1,"792":1,"799":1}}],["连接在逻辑上即告结束",{"2":{"115":1}}],["连接不断开",{"2":{"86":1}}],["匹配触发条件",{"2":{"895":1}}],["匹配级别",{"2":{"799":1}}],["匹配条件回调函数",{"2":{"259":1}}],["匹配的变成",{"2":{"244":1}}],["匹配",{"2":{"166":1,"322":1}}],["携带请求体",{"2":{"179":1}}],["携带",{"2":{"166":1}}],["退化为预处理器",{"2":{"933":1}}],["退出",{"2":{"796":3}}],["退出循环",{"2":{"166":1}}],["退避",{"2":{"157":1}}],["退避轮询实现更简单",{"2":{"155":1}}],["退避轮询通过不断拉大两次请求之间的延迟时间",{"2":{"148":1}}],["退避轮询是一种在计算机网络和分布式系统中常用的网络请求或重试策略",{"2":{"146":1}}],["退避轮询",{"0":{"146":1},"1":{"147":1,"148":1,"149":1},"2":{"145":1,"155":3}}],["流控制等核心编排逻辑",{"2":{"847":1}}],["流处理",{"2":{"847":1}}],["流转时序图",{"2":{"658":1,"659":1,"688":1,"689":1,"690":1,"717":1,"745":1,"746":1,"773":1,"774":1,"803":1,"804":1,"863":1,"864":1,"892":1,"893":1}}],["流",{"2":{"647":2,"655":1}}],["流水线产物通过三种方式消费",{"2":{"634":1}}],["流水线",{"2":{"550":1}}],["流水线搭建与运维",{"2":{"542":1}}],["流量决定存量的增减",{"2":{"384":1}}],["流量",{"2":{"383":1,"384":1}}],["流程等比较热门的词语",{"2":{"912":1}}],["流程图",{"2":{"895":1}}],["流程测试",{"2":{"881":1}}],["流程复杂",{"2":{"587":1}}],["流程梳理",{"2":{"515":1}}],["流程文档与表格自动化",{"2":{"515":1}}],["流程编排者",{"2":{"403":1}}],["流程",{"2":{"377":1,"378":1,"568":1,"892":1}}],["流程高度集成",{"2":{"345":1}}],["流程的基石",{"2":{"309":1}}],["流中包含两类消息",{"2":{"172":1}}],["流结束事件",{"2":{"175":1}}],["流结束",{"2":{"166":1,"172":1}}],["流式返回",{"2":{"856":1,"864":1}}],["流式文本生成",{"2":{"850":1,"867":1}}],["流式协议缺少业界统一方案",{"2":{"842":1}}],["流式处理",{"2":{"822":1}}],["流式解析",{"0":{"488":1}}],["流式传输来实现",{"2":{"160":1}}],["流式持续输出",{"2":{"136":1}}],["流式输出与",{"2":{"523":1}}],["流式输出",{"0":{"136":1},"2":{"521":1}}],["流式响应的服务端",{"0":{"176":1},"1":{"177":1,"178":1,"179":1}}],["流式响应",{"2":{"92":1,"143":1,"180":1,"842":1}}],["流式注入",{"2":{"86":1}}],["流式渲染",{"2":{"543":1}}],["流式渲染的组件边界划分失衡",{"2":{"59":1}}],["流式渲染为手段",{"2":{"55":1}}],["流式",{"0":{"116":1},"1":{"117":1,"118":1,"119":1},"2":{"57":1,"114":1,"117":1,"120":1,"125":1,"135":1,"136":1,"142":1,"144":1,"158":1,"159":3,"160":1,"854":1,"859":1}}],["流式动态组件",{"2":{"53":1}}],["流式分块返回",{"2":{"52":1}}],["既然已经知晓自身问题且暂时止损了",{"2":{"939":1}}],["既然是",{"2":{"492":1}}],["既锻炼下自己的写作能力",{"2":{"935":1}}],["既要",{"2":{"928":1}}],["既当运动员又当裁判",{"2":{"592":1}}],["既得不到学校的认可",{"2":{"492":1}}],["既不是新增功能",{"2":{"451":1}}],["既定状态",{"2":{"394":1}}],["既保留了流式传输的实时性",{"2":{"165":1}}],["既能保证类型安全",{"2":{"249":1}}],["既能处理",{"2":{"238":1}}],["既能像调用普通接口一样携带请求体",{"2":{"180":1}}],["既能像调用普通接口一样编写业务逻辑",{"2":{"160":1}}],["既能突破",{"2":{"143":1}}],["既能提升基线质量",{"2":{"3":1}}],["探索项目上下文",{"2":{"888":1}}],["探索出了一条更灵活的路径",{"2":{"165":1}}],["探针生成",{"2":{"734":1}}],["探讨三个核心命题",{"2":{"525":1}}],["探讨它们在现代分布式架构中的选型策略与工程实践",{"2":{"114":1}}],["清单是个好东西",{"2":{"953":1}}],["清单革命",{"2":{"602":1}}],["清空日志",{"2":{"807":1}}],["清偿这些",{"2":{"527":1}}],["清冷",{"2":{"507":1}}],["清",{"2":{"507":1}}],["清晰",{"2":{"910":1}}],["清晰明了",{"2":{"506":1}}],["清晰梳理解题思路",{"2":{"494":1}}],["清晰的知识树",{"2":{"609":1}}],["清晰的模块边界更是",{"2":{"332":1}}],["清晰的模块化思维更是构建可靠",{"2":{"309":1}}],["清晰的分层和模块划分",{"2":{"283":1}}],["清晰的问题规格",{"2":{"1":1}}],["清洗",{"2":{"465":1}}],["清楚知道何时加载它吗",{"2":{"450":1}}],["清除",{"2":{"748":1}}],["清除模块缓存",{"2":{"334":1}}],["清除缓存",{"2":{"334":1}}],["清理代码",{"2":{"890":1}}],["清理流程",{"2":{"881":1}}],["清理",{"2":{"792":1,"801":1,"880":1,"881":1}}],["清理历史",{"2":{"451":1}}],["清理所有编译产物",{"2":{"216":1}}],["清理资源",{"2":{"164":1,"174":1,"179":1,"830":1}}],["跨地域的阻碍因素在降低",{"2":{"957":1}}],["跨地域地高效协作更容易被接受了",{"2":{"957":1}}],["跨地域地沟通协作已经成为了常态",{"2":{"957":1}}],["跨城市",{"2":{"957":3}}],["跨",{"2":{"842":1}}],["跨后端抽象层",{"2":{"734":1}}],["跨后端代码生成",{"2":{"733":1}}],["跨后端复用",{"2":{"730":1}}],["跨浏览器",{"2":{"728":1}}],["跨系列",{"2":{"712":1}}],["跨系统联动",{"2":{"455":1}}],["跨系统回调",{"2":{"143":1}}],["跨系统事件同步",{"2":{"134":1,"142":1}}],["跨系统的松耦合集成",{"0":{"132":1}}],["跨界联想",{"2":{"628":1}}],["跨项目通用操作",{"2":{"580":1}}],["跨项目类型引用",{"2":{"210":1}}],["跨生态与端侧集成",{"2":{"548":1}}],["跨领域能力的",{"0":{"529":1}}],["跨模态内容理解",{"2":{"511":1}}],["跨模态深度推理",{"2":{"418":1}}],["跨应用编排",{"2":{"414":1}}],["跨任务及外部知识积累",{"2":{"410":1}}],["跨越",{"2":{"400":1}}],["跨部门沟通成本剧增",{"2":{"387":1}}],["跨端框架技术",{"2":{"346":1}}],["跨平台工具名称映射",{"2":{"881":1}}],["跨平台工具映射指引",{"2":{"880":1}}],["跨平台兼容",{"2":{"877":1}}],["跨平台适配",{"2":{"876":1,"887":1}}],["跨平台软件开发方法论插件",{"2":{"874":1}}],["跨平台移动开发团队",{"2":{"756":1}}],["跨平台动画一致性",{"2":{"755":1}}],["跨平台一致性",{"2":{"699":1}}],["跨平台整合",{"2":{"465":1}}],["跨平台",{"2":{"308":1,"670":1,"672":1,"874":1,"881":1}}],["跨环境兼容方案",{"0":{"306":1}}],["跨子应用的调试和问题定位更加复杂",{"2":{"292":1}}],["跨域",{"2":{"160":1}}],["方括号",{"2":{"573":1}}],["方盒子就是帕累托改进",{"2":{"391":1}}],["方盒与圆瓶背后的成本战术",{"0":{"391":1}}],["方形容器能最大化冰柜的空间利用率",{"2":{"391":1}}],["方向类型",{"2":{"777":1}}],["方向的演进",{"2":{"592":1}}],["方向",{"2":{"366":1,"765":1}}],["方式高性能原生播放",{"2":{"755":1}}],["方式导出",{"2":{"306":1}}],["方式注册",{"2":{"306":1}}],["方案分类",{"2":{"928":1}}],["方案在服务端渲染时可能面临样式闪烁",{"2":{"922":1}}],["方案对比与权衡",{"2":{"845":1}}],["方案",{"2":{"287":1,"702":1,"943":1}}],["方便异步逐块读取",{"2":{"168":1}}],["方便后续扩展动态功能",{"2":{"23":1}}],["方法计算当前帧的值",{"2":{"770":1}}],["方法创建对应类型的合成元素",{"2":{"768":1}}],["方法动态为类添加属性的",{"2":{"685":1}}],["方法是所有动作的中央处理枢纽",{"2":{"654":1}}],["方法的",{"2":{"331":1}}],["方法名",{"2":{"330":2}}],["方法论提炼与职业修养",{"0":{"400":1}}],["方法论",{"2":{"274":1}}],["方法和自定义",{"2":{"166":2}}],["方法",{"2":{"160":2,"166":3,"167":1,"169":1,"175":1,"186":1,"188":1,"331":3,"764":1,"814":1,"888":1,"909":1}}],["突出美人遗世独立之态",{"2":{"507":1}}],["突出美人超脱外表的灵韵",{"2":{"505":1}}],["突出洛神轻盈飘逸之态",{"2":{"505":1}}],["突然下降了",{"2":{"382":1}}],["突破信息壁垒",{"0":{"622":1}}],["突破",{"2":{"160":1}}],["突变处理",{"2":{"103":1}}],["经常吃早中饭或者午饭",{"2":{"938":1}}],["经两阶段审查",{"2":{"876":1}}],["经由四阶段流水线处理",{"2":{"632":1}}],["经验池",{"2":{"464":1}}],["经验储备器",{"2":{"463":1}}],["经验",{"2":{"414":1}}],["经济与财经知识学习",{"2":{"947":1}}],["经济环境瞬息万变",{"2":{"400":1}}],["经济学家口中的赢家通吃",{"2":{"909":1}}],["经济学思维能让我们更理智地分配资源",{"2":{"400":1}}],["经济学思维做产品",{"2":{"400":1}}],["经济学启示",{"2":{"392":1,"393":1}}],["经济直觉",{"0":{"400":1},"2":{"400":1}}],["经典混合架构",{"2":{"928":1}}],["经典著作往往具有复杂性",{"2":{"608":1}}],["经典意象",{"2":{"505":1}}],["经典的例子",{"2":{"366":1}}],["经典模块打包",{"2":{"343":1}}],["经历沉淀下来了",{"2":{"958":1}}],["经历疫情这三年后",{"2":{"947":1}}],["经历了疫情这三年",{"2":{"958":1}}],["经历了前两个阶段的改变",{"2":{"954":1}}],["经历了一些之前未曾遇到过的事情",{"2":{"935":1}}],["经历了漫长而曲折的演进过程",{"2":{"298":1}}],["经历完整的",{"2":{"892":1}}],["经历过若干轮后降级为退避轮询",{"2":{"157":1}}],["经过分析体重外的指标发现",{"2":{"962":1}}],["经过长年累月地洗礼亮了一次小红灯",{"2":{"959":1}}],["经过医生",{"2":{"938":1}}],["经过环境初始化",{"2":{"658":1}}],["经过专业编辑反复修改校对",{"2":{"606":1}}],["经过两轮对话对齐了调性",{"2":{"499":1}}],["经过多层转换",{"2":{"168":1}}],["经过",{"2":{"62":1,"893":1}}],["qq",{"2":{"905":1}}],["qwen等",{"2":{"549":1}}],["qwen2",{"2":{"512":1}}],["qwen",{"2":{"512":5,"519":1,"522":7,"523":5}}],["qa",{"2":{"418":1}}],["qiankun",{"2":{"286":1,"287":1}}],["qps",{"2":{"155":1}}],["qunit",{"2":{"734":1}}],["quality",{"2":{"777":1,"881":1,"889":2}}],["quaternion",{"2":{"734":3,"740":2,"743":1,"748":4}}],["quantity",{"2":{"281":6,"289":1}}],["quadmesh",{"2":{"734":1}}],["quad",{"2":{"243":1}}],["quad=",{"2":{"243":1}}],["questions",{"2":{"887":1}}],["question",{"2":{"887":1}}],["queue",{"2":{"129":1,"256":1}}],["queries",{"2":{"106":1,"110":1,"274":1}}],["queryoptions",{"2":{"489":3}}],["queryprovider",{"2":{"274":1}}],["queryclientprovider>",{"2":{"106":1}}],["queryclientprovider",{"2":{"106":2}}],["queryclient",{"0":{"106":1},"2":{"104":1,"106":6,"108":6,"110":1}}],["queryfn",{"2":{"103":2,"107":1}}],["querykey",{"2":{"103":2,"107":2,"108":2,"110":2}}],["query",{"0":{"102":2,"109":1,"113":1},"1":{"103":2,"104":2,"105":2,"106":2,"107":2,"108":2,"110":1,"111":1,"112":1,"113":1},"2":{"95":1,"103":6,"104":8,"106":3,"107":3,"108":2,"109":2,"110":4,"111":1,"113":2,"166":1,"178":1,"179":1,"274":2,"280":2,"301":1,"328":2,"342":9,"482":5,"483":3,"484":1,"486":2,"489":2,"662":1,"807":1,"819":1}}],["quotient",{"2":{"558":1}}],["quot",{"0":{"71":4,"139":2,"183":2,"186":2,"189":4,"192":2,"195":2,"198":2,"199":2,"228":2,"235":2,"419":2,"461":4,"527":4,"528":4,"536":2,"537":2,"538":4,"560":2,"607":2,"611":2},"1":{"184":2,"185":2,"187":2,"188":2,"190":4,"191":4,"193":2,"194":2,"196":2,"197":2,"199":2,"229":2,"230":2,"231":2,"232":2,"233":2,"234":2,"236":2,"237":2,"238":2,"239":2,"240":2,"561":2,"562":2,"608":2,"609":2,"610":2,"612":2,"613":2,"614":2},"2":{"1":2,"2":10,"3":8,"7":2,"8":2,"9":2,"10":2,"11":18,"12":10,"33":6,"37":2,"38":2,"39":2,"41":2,"45":2,"46":2,"50":6,"52":2,"55":4,"57":10,"59":8,"65":2,"66":18,"67":2,"70":6,"71":6,"74":4,"81":2,"94":4,"115":4,"119":4,"124":2,"127":2,"129":8,"130":4,"131":6,"136":4,"139":2,"143":2,"144":12,"176":2,"180":4,"181":38,"182":8,"183":6,"184":6,"185":6,"186":4,"188":12,"189":4,"190":2,"191":8,"192":2,"193":2,"194":2,"195":4,"196":6,"197":8,"198":6,"199":16,"200":40,"201":20,"209":2,"210":6,"227":8,"230":8,"231":2,"237":2,"246":2,"247":2,"250":6,"252":2,"254":2,"255":6,"263":2,"271":6,"297":2,"308":8,"333":4,"358":4,"361":2,"362":4,"363":2,"366":72,"377":2,"378":2,"386":2,"402":2,"403":6,"406":10,"408":8,"410":2,"411":8,"412":14,"414":14,"415":20,"417":18,"418":8,"419":4,"420":8,"424":2,"435":4,"437":2,"438":4,"439":2,"443":2,"457":10,"459":2,"460":2,"461":4,"462":2,"463":2,"464":4,"465":4,"466":4,"472":2,"473":2,"477":2,"478":2,"491":8,"515":4,"517":2,"518":2,"519":2,"523":2,"527":10,"528":8,"529":2,"532":2,"534":4,"535":8,"536":6,"537":6,"538":4,"550":2,"555":6,"556":10,"557":6,"559":4,"561":2,"564":4,"565":4,"567":6,"568":4,"569":4,"570":2,"571":4,"572":4,"576":4,"578":4,"583":8,"584":4,"585":4,"587":14,"589":2,"590":6,"592":4,"595":20,"597":2,"608":2,"610":12,"624":2,"625":4,"626":8,"639":2,"656":2,"670":4,"675":2,"680":2,"743":2,"755":2,"760":2,"800":4,"842":2,"874":4,"886":4,"887":4,"888":2,"889":2,"890":2,"892":2,"901":8,"902":22,"903":8,"904":2,"907":2,"917":6,"919":2,"922":2,"924":10,"925":6,"926":12,"928":4,"931":2,"933":2,"934":2}}],["└─",{"2":{"155":5}}],["└─────┬─────┘",{"2":{"833":1}}],["└───────┬───────┘",{"2":{"799":1,"832":1,"833":3}}],["└────────┬─────────┘",{"2":{"790":2,"799":1,"832":1}}],["└──────────┘",{"2":{"830":4}}],["└───────────┘",{"2":{"800":1}}],["└───────────┼─────────────────────────┼───────────────────────────────────┘",{"2":{"790":1}}],["└────────────┘",{"2":{"799":1}}],["└────────────┬──────────────┘",{"2":{"790":1}}],["└─────────────┘",{"2":{"799":2,"800":1}}],["└─────────────┬─────────────┘",{"2":{"790":1}}],["└──────────────┬───────────────────┘",{"2":{"833":3}}],["└──────────────┬─────────────────────────┘",{"2":{"833":1}}],["└──────────────┼─────────────────────────┼───────────────────────────────────────┘",{"2":{"790":1}}],["└─────────────────┼─────────────────────┘",{"2":{"833":1}}],["└───────────────────┼───────────────────┘",{"2":{"832":1}}],["└───────────────────┘",{"2":{"790":2}}],["└─────────────────────┘",{"2":{"790":1}}],["└────────────────────────────┬────────────────────────────┘",{"2":{"832":1}}],["└────────────────────────────┬────────────────────────────────┘",{"2":{"830":2}}],["└───────────────────────────────────────┘",{"2":{"833":1}}],["└───────────────────────────────────────────────────────┘",{"2":{"830":2}}],["└─────────────────────────────────────────────────────────────────┘",{"2":{"833":1}}],["└─────────────────────────────────────────────────────────────────────┘│",{"2":{"799":1,"800":3,"801":4}}],["└───────────────────────────────────────────────────────────────────────────┘",{"2":{"800":1,"801":1}}],["└─────────────────────────────────────────────────────────────────────────────┘",{"2":{"57":1,"790":1}}],["└───────────────────────────────────────────────────────────────────────┘",{"2":{"790":1}}],["└──────────────────────────────────────────────────────────────────────┘",{"2":{"57":5}}],["└─────────────────────────────────────────────────────────────┘",{"2":{"830":2}}],["└─────────────────────────────────────────────────────────┘",{"2":{"471":1}}],["└─────────────────────────────────────────┘",{"2":{"279":1}}],["└──────────────────────────────────────┼──────────────────────────────────────┘",{"2":{"830":1}}],["└───────────────────────────────┘",{"2":{"801":1}}],["└─────────────────────────────┬─────────────────────────────────────────────┘",{"2":{"799":1,"800":1}}],["└─────────────────────────────┬───────────────────────────────────────────────┘",{"2":{"790":1}}],["└─────────────────────────┘",{"2":{"790":2,"830":3}}],["└─────────────────────────┘│",{"2":{"790":2}}],["└───────────────────────┘│",{"2":{"790":2}}],["└───────────────────┴───────────────────┘",{"2":{"790":1}}],["└───────────────┬───────────────────────┘",{"2":{"799":1}}],["└───────────────┬───────────────┘",{"2":{"790":1}}],["└──────────────┘",{"2":{"790":3}}],["└─────────┘",{"2":{"799":3,"800":1}}],["└─────────┬─────────┘",{"2":{"799":1}}],["└─────────┼───────────────────┼───────────────────┼───────────────────────────┘",{"2":{"790":1}}],["└──────┬───────┘",{"2":{"790":3,"832":3}}],["└───",{"2":{"796":2,"797":1}}],["└───>",{"2":{"796":8,"797":1}}],["└──",{"2":{"58":5,"74":2,"79":7,"190":5,"191":3,"211":5,"274":47,"275":21,"280":69,"290":23,"442":1,"470":2,"474":5,"570":10,"575":1,"586":2,"647":31,"677":7,"706":22,"734":33,"762":31,"792":14,"823":5,"849":2,"881":41}}],["├─",{"2":{"155":7}}],["├───────────┬───────────────────────┤",{"2":{"833":1}}],["├───────────┬───────────────────────────┤",{"2":{"833":1}}],["├─────────────────────────────────────────────────────────────────────┤│",{"2":{"800":1}}],["├───────────────────────────────────────────────────────────────────────┤",{"2":{"790":1}}],["├─────────────────────────────────────────────────────────────────────────────┤",{"2":{"57":1}}],["├─────────────────────────────────────────┤",{"2":{"279":3}}],["├───>",{"2":{"796":12,"797":1}}],["├───",{"2":{"796":6,"797":2}}],["├──",{"2":{"58":7,"74":2,"79":9,"190":3,"191":1,"211":7,"274":94,"275":29,"280":83,"290":42,"442":3,"470":7,"474":9,"570":17,"575":3,"586":1,"647":152,"677":85,"706":151,"734":302,"762":209,"792":118,"823":21,"849":19,"881":120}}],["好用",{"2":{"546":1,"550":1}}],["好的作者会先把他要回答的问题交代清楚",{"2":{"609":1}}],["好的创造绝非源于盲目的灵感",{"2":{"600":1}}],["好的",{"2":{"509":1}}],["好的诗歌创作需要能综合考虑多个因素",{"2":{"501":1}}],["好在哪里",{"2":{"503":1}}],["好看",{"2":{"460":1}}],["好烦",{"2":{"370":1}}],["好奇的问题吧",{"2":{"362":1}}],["好奇心",{"2":{"350":1,"355":2,"362":1}}],["好",{"2":{"155":1}}],["旨在将特定领域的知识",{"2":{"547":1}}],["旨在为",{"2":{"437":1}}],["旨在简化开发流程",{"2":{"344":1}}],["旨在帮助开发者自动执行软件开发工作流",{"2":{"343":1}}],["旨在通过优化的机器代码和高度增量计算能力",{"2":{"343":1}}],["旨在无需定义专门",{"2":{"342":1}}],["旨在解决浏览器端模块加载的问题",{"2":{"305":1}}],["旨在以较低的架构成本",{"2":{"150":1}}],["旨在打破",{"2":{"125":1}}],["跳转并播放",{"2":{"776":1}}],["跳转并停止",{"2":{"776":1}}],["跳转方法",{"2":{"662":1}}],["跳转光标",{"2":{"564":1}}],["跳过技能",{"2":{"880":1}}],["跳过设计",{"2":{"874":1}}],["跳过前一个",{"2":{"833":1}}],["跳过hit检测",{"2":{"679":1}}],["跳过库文件检查",{"2":{"212":1}}],["跳过所有",{"2":{"203":1}}],["跳过空数据消息和",{"2":{"175":1}}],["跳过空消息和",{"2":{"172":1}}],["跳过",{"2":{"168":2,"322":1,"464":1}}],["跳过重复计算",{"0":{"88":1}}],["跳出循环",{"2":{"149":1}}],["挂起当前",{"2":{"152":1}}],["挂起连接",{"2":{"151":1}}],["挂起",{"2":{"151":1}}],["挂起机制来实现",{"2":{"149":1}}],["挂载了多个工具和复杂的推理模式后",{"2":{"509":1}}],["挂载",{"2":{"70":1}}],["设定减肥目标",{"2":{"942":1}}],["设定目标后它能自己想办法完成",{"2":{"402":1}}],["设备集成",{"2":{"734":1}}],["设备像素比",{"2":{"719":1}}],["设置页面可见性监听器",{"2":{"832":1}}],["设置是否动画",{"2":{"776":1}}],["设置为父级",{"2":{"776":1}}],["设置层级",{"2":{"776":1}}],["设置动画数据",{"2":{"776":1}}],["设置动画渲染循环",{"2":{"749":1}}],["设置视口大小",{"2":{"748":1}}],["设置视觉编码",{"2":{"719":1}}],["设置渲染循环",{"2":{"748":1}}],["设置后端特定数据",{"2":{"748":1}}],["设置数据和配置",{"2":{"724":1}}],["设置图表配置项",{"2":{"719":1}}],["设置表单值",{"2":{"663":1}}],["设置一个高价锚点",{"2":{"397":1}}],["设置内容类型",{"2":{"175":1}}],["设置",{"2":{"164":1}}],["设置最大值是为了避免等待时间变得不可接受",{"2":{"148":1}}],["设计令牌",{"2":{"925":1}}],["设计详情",{"2":{"895":1}}],["设计规格",{"2":{"895":1}}],["设计规范与",{"0":{"929":1}}],["设计规范",{"2":{"576":1,"928":1}}],["设计获批",{"2":{"888":1}}],["设计未获批",{"2":{"888":1}}],["设计上采用",{"2":{"887":1}}],["设计→细粒度任务计划",{"2":{"881":1}}],["设计→任务",{"2":{"880":1}}],["设计预览框架",{"2":{"881":1}}],["设计文档与归档",{"2":{"880":1}}],["设计文件并生成前端组件与开发文档",{"2":{"448":1}}],["设计和数据格式",{"2":{"842":1}}],["设计到开发的协作鸿沟",{"2":{"755":1}}],["设计工具开发者",{"2":{"671":1}}],["设计说明",{"2":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"711":1,"712":1,"713":1,"714":1,"715":1,"739":1,"740":1,"741":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"799":1,"800":1,"801":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"886":1,"887":1,"888":1,"889":1,"890":1}}],["设计约定",{"2":{"575":1}}],["设计赋予应用专业深度",{"2":{"552":1}}],["设计并量化诸如事实一致性",{"2":{"550":1}}],["设计稳健的多",{"2":{"545":1}}],["设计模式包括策略模式",{"2":{"739":1}}],["设计模式与编排",{"2":{"545":1}}],["设计模式中",{"2":{"427":1}}],["设计与迭代能力",{"2":{"542":1}}],["设计出一个逻辑清晰",{"2":{"509":1}}],["设计出更具抽象性和复用性的组件",{"2":{"255":1}}],["设计就基本完成",{"2":{"494":1}}],["设计串联工作流",{"2":{"459":1}}],["设计师在",{"2":{"755":1}}],["设计师通过",{"2":{"755":1}}],["设计师",{"2":{"561":1,"756":1}}],["设计师绘制界面",{"2":{"457":1}}],["设计师乃至创业者经常被提及",{"2":{"363":1}}],["设计精良的",{"2":{"444":1}}],["设计优秀的记忆淘汰与检索算法",{"2":{"410":1}}],["设计隐性的思维路径",{"2":{"367":1}}],["设计功能交互",{"2":{"367":1}}],["设计外卖",{"2":{"366":1}}],["设计的成熟",{"2":{"340":1}}],["设计的组件库",{"2":{"340":1}}],["设计系统",{"2":{"340":1,"927":1}}],["设计对比",{"2":{"328":1}}],["设计原则",{"2":{"286":1,"570":1}}],["设计领域事件机制",{"2":{"282":1}}],["设计分层架构",{"2":{"282":1}}],["设计",{"0":{"545":1},"2":{"196":1,"341":1,"408":1,"494":2}}],["设计时若包含",{"2":{"195":1}}],["设计回调契约",{"2":{"12":1}}],["设计哲学的四个核心步骤",{"2":{"12":1}}],["设计是否足以表达所有的视觉状态差异",{"2":{"3":1}}],["第四阶段",{"0":{"964":1},"2":{"282":1,"964":1}}],["第二层",{"0":{"930":1},"2":{"928":1}}],["第二部分",{"0":{"829":1},"1":{"830":1,"831":1,"832":1,"833":1,"834":1,"835":1,"836":1,"837":1,"838":1,"839":1,"840":1}}],["第二",{"0":{"609":1,"613":1}}],["第二曲线",{"2":{"603":1}}],["第二步",{"2":{"494":1}}],["第二轮",{"2":{"375":1}}],["第二阶段的时间也大概维持了一个月",{"2":{"962":1}}],["第二阶段",{"0":{"953":1,"962":1},"2":{"282":1}}],["第二次等待",{"2":{"148":1}}],["第一层",{"0":{"929":1},"2":{"928":1}}],["第一性原理",{"2":{"911":1}}],["第一个冒号",{"2":{"833":1}}],["第一部分",{"0":{"812":1},"1":{"813":1,"814":1,"815":1,"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1}}],["第一",{"0":{"608":1,"612":1}}],["第一步试",{"2":{"515":1}}],["第一步",{"2":{"494":1}}],["第一步永远是把自己沉浸到特定的人群中",{"2":{"377":1}}],["第一批种子用户会自然诞生",{"2":{"377":1}}],["第一轮",{"2":{"375":1}}],["第一阶段的时间大概维持了一个月",{"2":{"961":1}}],["第一阶段最重要的准则是",{"2":{"961":1}}],["第一阶段",{"0":{"952":1,"961":1},"2":{"282":1}}],["第一次等待",{"2":{"148":1}}],["第",{"2":{"148":1}}],["第三种最佳实践模式是前沿的组件化范式",{"2":{"934":1}}],["第三层",{"0":{"931":1},"2":{"928":1}}],["第三",{"0":{"610":1,"614":1}}],["第三个则扮演",{"2":{"535":1}}],["第三步",{"2":{"494":1}}],["第三阶段也是大概维持了一个月",{"2":{"963":1}}],["第三阶段主要通过以下几个方面来继续把减肥这件小事执行下去",{"2":{"963":1}}],["第三阶段",{"0":{"954":1,"963":1},"2":{"282":1}}],["第三次等待",{"2":{"148":1}}],["第三方库覆写",{"2":{"928":1}}],["第三方内联依赖库",{"2":{"762":1}}],["第三方编辑器库",{"2":{"734":1}}],["第三方依赖",{"2":{"734":1}}],["第三方服务",{"2":{"559":1}}],["第三方平台将多家主流模型聚合为统一",{"2":{"523":1}}],["第三方聚合平台",{"0":{"523":1}}],["第三方模块",{"2":{"334":1}}],["第三方集成",{"2":{"156":1}}],["第三方支持",{"2":{"110":1}}],["第三方脚本阻塞页面渲染",{"2":{"84":1}}],["第三方",{"2":{"20":1,"853":1}}],["初学者有时会遇到",{"2":{"924":1}}],["初创产品",{"2":{"523":1}}],["初中生数学学习问题与解决方法",{"2":{"474":1}}],["初中数学高效学习方法研究",{"2":{"474":1}}],["初中数学重点知识模块与学习策略",{"2":{"474":1}}],["初中数学学习资源研究笔记",{"2":{"474":1}}],["初中数学学习指南",{"2":{"474":2}}],["初中数学学习研究",{"0":{"473":1},"1":{"474":1,"475":1}}],["初心",{"2":{"430":1}}],["初级",{"2":{"405":1}}],["初衷是让",{"2":{"304":1}}],["初期阶段",{"2":{"387":1}}],["初期成本高",{"2":{"283":1}}],["初期的频繁查询注定是无效的",{"2":{"147":1}}],["初始状态",{"2":{"833":1}}],["初始版本发布",{"2":{"331":1}}],["初始构建快",{"2":{"57":1}}],["初始白屏",{"2":{"37":1}}],["初始化重试间隔",{"2":{"832":1}}],["初始化阶段",{"2":{"832":1}}],["初始化元素",{"2":{"776":1}}],["初始化节点",{"2":{"741":2}}],["初始化与渲染完整流程",{"0":{"717":1}}],["初始化数据加载",{"2":{"663":1}}],["初始化环境上下文",{"2":{"649":1}}],["初始化",{"0":{"25":1},"2":{"649":1,"724":1,"768":1}}],["资深代码审查专家",{"2":{"591":1}}],["资深产品人也能在瞬间判断一个需求是",{"2":{"363":1}}],["资料整理",{"2":{"406":1}}],["资产特定",{"2":{"391":1}}],["资源加载覆盖",{"2":{"762":1}}],["资源加载器",{"2":{"762":1}}],["资源加载",{"2":{"761":1}}],["资源加载框架",{"2":{"734":1}}],["资源管理器",{"2":{"762":1}}],["资源管理",{"2":{"748":1}}],["资源和",{"2":{"734":1}}],["资源描述符",{"2":{"734":1}}],["资源绑定",{"2":{"734":1}}],["资源分布",{"2":{"474":1}}],["资源挂载",{"2":{"443":1}}],["资源层",{"2":{"443":1}}],["资源包",{"2":{"436":2,"442":1}}],["资源调度",{"2":{"414":1}}],["资源",{"2":{"383":1,"765":1}}],["资源受限的情况下",{"2":{"363":1}}],["资源清理",{"0":{"174":1},"2":{"175":2}}],["资源浪费",{"2":{"147":1}}],["资讯列表",{"2":{"48":1}}],["易学易用",{"2":{"928":1}}],["易腐烂",{"2":{"901":1}}],["易储性",{"2":{"613":1}}],["易读",{"2":{"350":1}}],["易于定位和扩展",{"2":{"283":1}}],["易于维护",{"2":{"283":1}}],["易于维护和扩展的软件系统",{"2":{"276":1}}],["易扩展",{"2":{"145":1}}],["易用性强",{"2":{"18":1}}],["社群的方式加以体现",{"2":{"957":1}}],["社会及自然环境适应良好",{"2":{"941":1}}],["社会",{"2":{"907":1}}],["社会太不公平",{"2":{"612":1}}],["社会性",{"2":{"402":1}}],["社媒内容分析",{"2":{"511":1}}],["社交",{"2":{"756":1}}],["社交网络",{"2":{"398":1}}],["社交账号",{"2":{"184":1}}],["社交提醒",{"2":{"123":1}}],["社区多年来不断探索",{"2":{"920":1}}],["社区相关的技术分享与交流活动",{"2":{"901":1}}],["社区行为准则",{"2":{"881":1}}],["社区与",{"2":{"881":1}}],["社区可独立开发",{"2":{"845":1}}],["社区最大",{"2":{"642":1}}],["社区最流行的",{"2":{"167":1}}],["社区资源最丰富",{"2":{"565":1}}],["社区",{"2":{"377":1,"523":1}}],["社区先行",{"0":{"377":1}}],["社区生态",{"2":{"341":1}}],["社区出品",{"2":{"341":2}}],["社区基于",{"2":{"165":1}}],["社区盛行的底层逻辑",{"2":{"143":1,"160":1}}],["受限于浏览器",{"2":{"814":1}}],["受限于浏览器实现",{"2":{"143":1}}],["受服务器性能",{"2":{"15":1}}],["事先知道了这本书在学科谱系中的位置",{"2":{"609":1}}],["事务之上",{"2":{"602":1}}],["事务",{"2":{"553":1}}],["事务或流程环节时触发",{"2":{"447":1}}],["事实核查命令",{"2":{"470":1}}],["事实上",{"2":{"364":1,"434":1}}],["事实标准",{"2":{"143":1}}],["事件定义",{"2":{"886":1}}],["事件数据",{"2":{"833":1,"839":1}}],["事件数据内容",{"2":{"178":1}}],["事件流解析模块",{"0":{"833":1}}],["事件流解析器",{"2":{"823":1,"830":1}}],["事件流可能因网络波动触发多次",{"2":{"173":1}}],["事件名称",{"2":{"777":1}}],["事件辅助",{"2":{"706":1}}],["事件代理和分发",{"2":{"706":1}}],["事件钩子",{"2":{"706":1}}],["事件回调执行的完整链路",{"2":{"688":1}}],["事件回调集合",{"2":{"175":1}}],["事件管道",{"2":{"684":1}}],["事件对象构建",{"2":{"677":1}}],["事件系统基类",{"2":{"734":1,"762":1}}],["事件系统",{"2":{"677":1,"682":2,"704":1,"706":1}}],["事件与交互层",{"2":{"675":1,"676":1}}],["事件携带数据和上下文在组件树中传递",{"2":{"654":1}}],["事件从下往上冒泡",{"2":{"653":1}}],["事件等",{"2":{"650":1}}],["事件行为定义",{"2":{"647":1}}],["事件分发",{"2":{"676":1,"679":1,"706":1,"733":1}}],["事件分发函数",{"2":{"661":1}}],["事件分布",{"2":{"632":1}}],["事件分类处理",{"0":{"172":1},"2":{"175":1}}],["事件机制可以作为循环依赖的解决方法",{"2":{"315":1}}],["事件一致性等技术问题",{"2":{"283":1}}],["事件消息格式",{"2":{"178":1}}],["事件处理器",{"2":{"281":1,"706":1}}],["事件处理",{"2":{"175":1,"650":1}}],["事件之间以空行",{"2":{"168":1}}],["事件之间以空行分隔",{"2":{"161":1,"177":1}}],["事件唯一标识",{"2":{"164":1,"178":1}}],["事件通知",{"2":{"155":1}}],["事件驱动返回",{"2":{"152":1}}],["事件驱动",{"2":{"142":1}}],["事件驱动的反向回调",{"0":{"130":1},"1":{"131":1,"132":1,"133":1,"134":1}}],["事件触发时执行的操作列表",{"2":{"895":1}}],["事件触发时",{"2":{"883":1}}],["事件触发到",{"2":{"688":1}}],["事件触发",{"2":{"131":1,"677":1}}],["事件注册",{"2":{"131":1}}],["事件类型",{"2":{"121":1,"164":1,"178":2,"833":1}}],["事件",{"2":{"7":2,"108":1,"121":1,"178":1,"679":1,"684":1,"833":1,"883":1}}],["监督微调",{"2":{"551":1}}],["监督力",{"2":{"531":1}}],["监督悖论",{"0":{"531":1},"2":{"525":1,"530":1}}],["监护",{"2":{"407":1}}],["监控链路执行过程",{"2":{"549":1}}],["监控",{"2":{"538":1,"549":1}}],["监控子应用的加载性能",{"2":{"291":1}}],["监控预警",{"2":{"143":1}}],["监听输入",{"2":{"832":1}}],["监听文件变化",{"2":{"723":1}}],["监听所有原生",{"2":{"684":1}}],["监听请求关闭事件",{"2":{"179":1}}],["监听",{"2":{"164":1,"178":1,"801":1}}],["监听指定类型的消息",{"2":{"163":1}}],["监听用户登录状态",{"2":{"28":1}}],["深层次原因",{"2":{"959":2}}],["深层数组操作工具",{"2":{"647":1}}],["深厚的底层算法素养",{"2":{"551":1}}],["深入拆解",{"2":{"569":1}}],["深入理解其内部机制",{"2":{"569":1}}],["深入解读参考",{"2":{"518":1}}],["深入",{"2":{"518":2}}],["深入了解外部性管理策略",{"2":{"399":1}}],["深入研究了多款",{"2":{"477":1}}],["深入研究市场与竞争对手",{"2":{"400":1}}],["深入研究市场意味着寻找那些未被满足的有效需求",{"2":{"396":1}}],["深入研究广告",{"2":{"399":1}}],["深入市场洞察与价值发现",{"0":{"396":1}}],["深入挖掘业界热点",{"2":{"346":1}}],["深度覆写第三方库",{"2":{"931":1}}],["深度选择器",{"2":{"924":1}}],["深度测试等",{"2":{"742":1}}],["深度纹理",{"2":{"734":1}}],["深度缓冲区",{"2":{"734":1}}],["深度解读与洞见提炼",{"2":{"632":1}}],["深度解析",{"2":{"436":1}}],["深度反思",{"2":{"628":1}}],["深度与严谨",{"2":{"606":1}}],["深度索引百万行级代码库",{"2":{"568":1}}],["深度索引能力是",{"2":{"568":1}}],["深度理解整个代码库并串联多步骤任务",{"2":{"564":1}}],["深度改造的",{"2":{"564":1}}],["深度阅读",{"2":{"533":1}}],["深度推理",{"2":{"522":1}}],["深度整合",{"2":{"521":1}}],["深度集成",{"2":{"521":1}}],["深度专题报告",{"2":{"518":1}}],["深度学习与知识整合",{"2":{"515":1}}],["深度思考",{"2":{"502":2}}],["深度体验后",{"2":{"491":1}}],["深度优化的工具",{"2":{"478":1}}],["深度优先",{"2":{"314":1}}],["深度全景综述一文中",{"2":{"467":1}}],["深度全景综述",{"2":{"433":1}}],["深度耦合",{"2":{"427":1}}],["深度的知识推理",{"2":{"417":1}}],["深度调研系统",{"0":{"416":1}}],["深度行业调研",{"2":{"414":1}}],["深度洞察与研究设计",{"2":{"406":1}}],["深度研究能力",{"2":{"517":1}}],["深度研究报告",{"2":{"512":1,"518":2}}],["深度研究任务往往涉及很多信息整合",{"2":{"468":1}}],["深度研究并非单一的写作任务",{"2":{"468":1}}],["深度研究",{"2":{"406":1,"467":1,"518":2}}],["深度替代与变革型",{"0":{"405":1}}],["深度拆解发现",{"2":{"398":1}}],["深度拆解",{"2":{"392":1}}],["深度决策逻辑",{"0":{"143":1}}],["深嵌套的",{"2":{"1":1}}],["耗时长且需排队",{"2":{"142":1}}],["耗时极短",{"2":{"142":1}}],["耗时约",{"2":{"138":1}}],["握手与头部延迟",{"2":{"142":1}}],["握手完成协议升级后",{"2":{"125":1}}],["决定在第二阶段对清单进行改善",{"2":{"953":1}}],["决定是否重试",{"2":{"832":1}}],["决定是否需要中转或国内聚合平台",{"2":{"519":1}}],["决定我们长期健康状态的",{"2":{"605":1}}],["决定做什么",{"2":{"540":1}}],["决定让",{"2":{"367":1}}],["决定解决哪些问题",{"2":{"358":1}}],["决定了你在这个时代的价值上限",{"2":{"530":1}}],["决定了你的应用以怎样的方式呈现给用户",{"2":{"71":1}}],["决定了你能",{"2":{"71":1}}],["决策点",{"2":{"673":1}}],["决策缺乏即时依据",{"2":{"465":1}}],["决策在跨部门协同中迟滞",{"2":{"457":1}}],["决策和社交表现",{"2":{"421":1}}],["决策依据与变通方案",{"2":{"142":1}}],["决策矩阵",{"0":{"142":1}}],["老朋友互相请教过",{"2":{"959":1}}],["老师",{"2":{"610":1}}],["老师或导读无法代替你读书",{"2":{"609":1}}],["老",{"2":{"141":1}}],["虽不醉心于修真",{"2":{"958":1}}],["虽不至于让系统立刻崩溃",{"2":{"527":1}}],["虽",{"2":{"141":1}}],["虽强",{"2":{"141":1}}],["虽然会呈现少部分波动",{"2":{"963":1}}],["虽然笔者与萧鼎老师相差甚远",{"2":{"958":1}}],["虽然雇佣关系在一定时期内仍然是主导",{"2":{"957":1}}],["虽然互联网行业一直有弹性工作制",{"2":{"955":1}}],["虽然体重变化存在小范围波动",{"2":{"952":1}}],["虽然可以通过组件化提取来缓解",{"2":{"925":1}}],["虽然可通过",{"2":{"31":1}}],["虽然不少人觉得大模型会成为新的泡沫",{"2":{"919":1}}],["虽然不是",{"2":{"90":1}}],["虽然在体重和效率两个方面有一定的正向效果",{"2":{"906":1}}],["虽然在逻辑推理与工具调用方面取得了长足进步",{"2":{"419":1}}],["虽然对系统长期健康很重要",{"2":{"528":1}}],["虽然当前",{"2":{"496":1}}],["虽然拥有博杂的知识",{"2":{"441":1}}],["虽然博学",{"2":{"408":1}}],["虽然它增加了代码体积且逻辑复杂",{"2":{"306":1}}],["虽然有自己的类型检查机制",{"2":{"219":1}}],["虽然你可以直接在终端运行",{"2":{"202":1}}],["虽然",{"2":{"133":1,"315":1,"335":1,"934":1}}],["虽然流式传输在逻辑上很美好",{"2":{"119":1}}],["试着把日子过得顺畅",{"2":{"956":1}}],["试着拿起两个看似相关的指标",{"2":{"385":1}}],["试想",{"2":{"590":1}}],["试想这样一个场景",{"2":{"139":1}}],["试图通过扩大信息摄入量来超越别人",{"2":{"621":1}}],["试图把自己打磨成一把无所不能的瑞士军刀",{"2":{"553":1}}],["试图解决",{"2":{"55":1}}],["绝对的组件封装",{"2":{"927":1}}],["绝对鲁棒性",{"0":{"139":1}}],["绝非新奇技术组件的无序堆砌",{"2":{"440":1}}],["绝大多数人虽然能轻松看清这些要素",{"2":{"383":1}}],["绝不向客户端暴露内部错误详情",{"2":{"576":1}}],["绝不是格局的局限",{"2":{"381":1}}],["绝不会触发后台",{"2":{"104":1}}],["队列中",{"2":{"138":1}}],["查看所有命令",{"2":{"810":1}}],["查看覆盖率",{"2":{"667":1}}],["查看",{"2":{"581":1,"631":1}}],["查看sql是否正确",{"2":{"199":1}}],["查找行尾",{"2":{"833":1}}],["查找对应的",{"2":{"768":1}}],["查找对应的渲染器组件",{"2":{"649":1}}],["查找表纹理生成",{"2":{"734":1}}],["查找文件",{"2":{"484":1}}],["查找",{"2":{"411":1,"652":1,"672":1,"677":1,"680":1,"706":1,"761":1}}],["查找数据",{"2":{"261":1}}],["查询处理",{"2":{"706":1}}],["查询处理器",{"2":{"282":1}}],["查询性能问题",{"2":{"342":1}}],["查询数据的",{"2":{"415":1}}],["查询数据",{"2":{"328":1}}],["查询",{"2":{"274":1}}],["查询select",{"2":{"199":1}}],["查询任务状态",{"2":{"138":1}}],["查询完毕立即释放连接",{"2":{"137":1}}],["查数据库",{"2":{"82":1}}],["至少包含",{"2":{"586":1}}],["至关重要",{"2":{"314":1,"548":1}}],["至",{"2":{"137":1,"961":1,"962":1}}],["至此",{"2":{"126":1,"303":1,"433":1,"494":1,"954":1}}],["任意区域选择联动",{"2":{"706":1}}],["任意静态服务器",{"2":{"65":1}}],["任何人的经历都代表不了实力",{"2":{"936":1}}],["任何人都会有认知盲点",{"2":{"915":1}}],["任何时候",{"2":{"936":1}}],["任何一个连续的周期信号",{"2":{"916":1}}],["任何一个环节为零",{"2":{"458":1}}],["任何技术栈或商业模式",{"2":{"618":1}}],["任何已由",{"2":{"572":1}}],["任何改变都不可能使一人变好而又不使另一人变坏",{"2":{"394":1}}],["任何微小的改动都可能引发意想不到的连锁反应",{"2":{"327":1}}],["任何类型错误都要到运行时才能发现",{"2":{"255":1}}],["任何集合",{"2":{"244":2}}],["任务描述",{"2":{"895":1}}],["任务序号",{"2":{"895":1}}],["任务间代码审查请求",{"2":{"881":1}}],["任务间审查",{"2":{"880":1}}],["任务编排",{"2":{"849":1}}],["任务生成图案填充以备无障碍访问",{"2":{"715":1}}],["任务计算图例和数据的符号样式",{"2":{"715":1}}],["任务支持渐进式渲染",{"2":{"712":1}}],["任务链",{"2":{"712":1}}],["任务的",{"2":{"706":1}}],["任务的构成比例",{"2":{"526":1}}],["任务调度器",{"2":{"706":1}}],["任务拆解与路由",{"2":{"545":1}}],["任务拆解与路径规划",{"2":{"414":1}}],["任务优先级的重新洗牌",{"0":{"528":1}}],["任务重构",{"2":{"525":1}}],["任务类型",{"2":{"519":1}}],["任务深度联动",{"2":{"515":1}}],["任务和项目深度联动",{"2":{"515":1}}],["任务只能一件接一件地做",{"2":{"415":1}}],["任务历史等",{"2":{"408":1}}],["任务分解是指将一个复杂的目标或任务拆解为多个具体",{"2":{"422":1}}],["任务分解是将复杂目标拆解为易执行的子任务",{"2":{"409":1}}],["任务分解与自我反思",{"2":{"421":1,"433":1}}],["任务分解",{"0":{"422":1},"1":{"423":1,"424":1,"425":1},"2":{"408":1,"470":1,"471":1}}],["任务执行",{"2":{"567":1}}],["任务执行者",{"2":{"403":1}}],["任务执行期间",{"2":{"136":1}}],["任务进度推送",{"2":{"180":1}}],["任务流订阅客户端",{"0":{"175":1},"2":{"175":1}}],["任务初期使用长轮询追求实时性",{"2":{"157":1}}],["任务仍在处理",{"2":{"153":1}}],["任务处理中",{"2":{"149":1}}],["任务处理往往需要数十秒甚至数分钟",{"2":{"145":1}}],["任务完成事件",{"2":{"175":1}}],["任务完成回调",{"2":{"175":1}}],["任务完成时间方差较大",{"2":{"156":1}}],["任务完成时间是否通常在",{"2":{"155":1}}],["任务完成后可立即推送",{"2":{"155":1}}],["任务完成",{"2":{"149":1,"153":1}}],["任务",{"2":{"149":1,"153":1,"175":1,"715":1,"719":1,"859":2,"884":2}}],["任务耗时较长",{"2":{"156":1}}],["任务耗时特征",{"2":{"142":1}}],["任务耗时过长时",{"2":{"137":1}}],["任务特性的本质差异",{"0":{"136":1}}],["甚至需要花费两个月",{"2":{"964":1}}],["甚至一周基本保持不变的情况",{"2":{"962":1}}],["甚至把居家办公的经验适当地用在办公室工作中",{"2":{"956":1}}],["甚至阴差阳错地给自己安排了更多的独处时间",{"2":{"935":1}}],["甚至支持外部传入",{"2":{"927":1}}],["甚至用",{"2":{"903":1}}],["甚至可以把需求方连成网络",{"2":{"957":1}}],["甚至可以完全不需要了解前端技术",{"2":{"639":1}}],["甚至可以使用不同的技术栈",{"2":{"284":1}}],["甚至因此拒绝更高效的媒介",{"2":{"613":1}}],["甚至觉得",{"2":{"612":1}}],["甚至以把我",{"2":{"610":1}}],["甚至聊几个小时天的总和",{"2":{"606":1}}],["甚至提交",{"2":{"567":1}}],["甚至自动完成单元测试时",{"2":{"553":1}}],["甚至还补充了超市打折算百分比的生活趣味案例",{"2":{"495":1}}],["甚至让人眼前一亮",{"2":{"475":1}}],["甚至通过公开写作和分享去教授他人时",{"2":{"377":1}}],["甚至深入内核级别编写代码",{"2":{"353":1}}],["甚至第三方开发者",{"2":{"342":1}}],["甚至是智慧世界来抽象分析",{"2":{"908":1}}],["甚至是",{"2":{"525":1}}],["甚至是自定义的对象类型",{"2":{"255":1}}],["甚至是后续的变量声明中",{"2":{"254":1}}],["甚至在高峰期需要排队数分钟",{"2":{"136":1}}],["甚至部分长视频生成应用中",{"2":{"135":1}}],["甚至同一页面的不同区域",{"2":{"75":1}}],["商业仪表盘",{"2":{"700":1}}],["商业模式及人际关系等海量的非书本知识",{"2":{"614":1}}],["商业的成功",{"2":{"601":1}}],["商业化",{"0":{"601":1}}],["商业化路径优化",{"2":{"399":1}}],["商业洞察",{"2":{"540":1}}],["商业",{"2":{"377":1,"614":1}}],["商业可行性",{"2":{"363":1}}],["商业逻辑",{"0":{"354":1}}],["商业逻辑与未来演进四个维度",{"2":{"348":1}}],["商业平台",{"2":{"135":1,"145":1}}],["商品子应用读取用户信息",{"2":{"289":1}}],["商品子应用发布事件",{"2":{"289":1}}],["商品子应用暴露商品列表和商品详情组件",{"2":{"288":1}}],["商品子应用配置",{"2":{"288":1}}],["商品子应用",{"2":{"288":2,"290":1}}],["商品",{"2":{"278":1,"291":1}}],["商品页",{"2":{"92":1}}],["商品页面预渲染",{"2":{"31":1}}],["商品详情",{"2":{"75":1}}],["商品详情页",{"2":{"67":1}}],["商品分类页",{"2":{"48":1}}],["觉得我们需要建立起概率的世界观",{"2":{"917":1}}],["觉得这样效率高",{"2":{"608":1}}],["觉得",{"2":{"135":1}}],["长时间运行任务的进度追踪",{"2":{"816":1}}],["长寿时代",{"2":{"605":1}}],["长上下文模型",{"2":{"523":1}}],["长上下文",{"2":{"511":1,"512":1,"522":4}}],["长文总结过滤等自动化处理",{"2":{"545":1}}],["长文档精读",{"2":{"521":1}}],["长文档精读与摘要",{"2":{"511":1}}],["长文档理解最强",{"2":{"521":1}}],["长文档分析",{"2":{"519":1}}],["长文档阅读与结构化提炼",{"2":{"512":1,"522":1}}],["长文本",{"2":{"504":1}}],["长文生成",{"2":{"142":1}}],["长度限制",{"2":{"814":1}}],["长度限制成为了瓶颈",{"2":{"143":1}}],["长度",{"2":{"677":1}}],["长度不超过",{"2":{"448":1}}],["长链路",{"2":{"428":1,"432":1}}],["长期熬夜",{"2":{"938":1}}],["长期写作的产物",{"2":{"606":1}}],["长期依赖",{"2":{"531":1}}],["长期专属工作空间",{"0":{"437":1}}],["长期的项目背景",{"2":{"410":1}}],["长期三类",{"2":{"410":1}}],["长期记忆",{"2":{"408":1,"410":1,"546":1}}],["长尾覆盖",{"0":{"407":1}}],["长尾的任务流",{"2":{"403":1}}],["长久以来",{"2":{"386":1,"909":1}}],["长轮询级联",{"2":{"157":1}}],["长轮询可发挥最佳性能",{"2":{"155":1}}],["长轮询的",{"2":{"153":1}}],["长轮询的客户端逻辑非常简单",{"2":{"153":1}}],["长轮询的复杂度主要在服务端",{"2":{"152":1}}],["长轮询应运而生",{"2":{"150":1}}],["长轮询",{"0":{"150":1},"1":{"151":1,"152":1,"153":1},"2":{"145":1,"155":3}}],["长视频生成等",{"2":{"145":1}}],["长江后浪推前浪",{"2":{"144":1}}],["长连接占用文件描述符和连接池",{"2":{"155":1}}],["长连接会持续占用服务端的连接池资源",{"2":{"153":1}}],["长连接",{"2":{"134":1,"145":1}}],["长远来看能省去大量由于手动维护复杂缓存而产生的隐性技术债",{"2":{"111":1}}],["签名",{"2":{"133":1}}],["幂等性设计",{"2":{"133":1}}],["幂等渲染",{"2":{"3":1}}],["因人因时因地地制定出一套健身运动的项目",{"2":{"941":1}}],["因地制宜的隔离方案",{"2":{"931":1}}],["因减弱果",{"2":{"386":1}}],["因增强果",{"2":{"386":1}}],["因果并不是瞬间连接的",{"2":{"388":1}}],["因果不是瞬间连接",{"2":{"388":1}}],["因果链是线段",{"2":{"386":1}}],["因果链描述的是变量之间",{"2":{"385":1}}],["因果链",{"0":{"385":1},"2":{"383":2,"385":1}}],["因果关系只是单向线段",{"2":{"908":1}}],["因果关系",{"2":{"366":1,"908":1}}],["因此在经历两次",{"2":{"938":1}}],["因此在处理复杂任务时",{"2":{"425":1}}],["因此本文不再对其展开详细分析",{"2":{"920":1}}],["因此可使用联网搜索能力",{"2":{"501":1}}],["因此同步加载不会造成明显阻塞",{"2":{"304":1}}],["因此不会让我们访问只有部分成员才有的属性",{"2":{"229":1}}],["因此",{"2":{"160":2,"165":1,"219":1,"237":1,"238":1,"272":1,"292":1,"366":1,"377":1,"382":1,"423":1,"435":1,"437":1,"492":1,"499":1,"906":2,"908":3,"910":1,"912":1,"915":1,"916":1,"928":1,"935":2,"945":2,"947":1,"950":1,"954":1,"955":1,"959":5}}],["因此主流平台通常支持失败重试机制",{"2":{"133":1}}],["因为一次偶然的事情出现后",{"2":{"962":1}}],["因为这种改变容易失败",{"2":{"958":1}}],["因为这是一个标准流程",{"2":{"592":1}}],["因为笔者想延伸地是",{"2":{"957":1}}],["因为笔者自己构建的心智模型还不够好",{"2":{"945":1}}],["因为在疫情早期居家办公真的很累",{"2":{"956":1}}],["因为在疫情出现之前",{"2":{"955":1}}],["因为在执行时不是从大脑中提取",{"2":{"953":1}}],["因为终于有机会在工作之外初级又粗糙地运用了统计学分析",{"2":{"954":1}}],["因为改变说起来容易做起来难",{"2":{"953":1}}],["因为纵使一个人满腹经纶",{"2":{"946":1}}],["因为每种方式都有可能",{"2":{"946":1}}],["因为有过比较正向的实践",{"2":{"936":1}}],["因为特别容易忽略任务之间的关联",{"2":{"918":1}}],["因为现实世界中的事物看似复杂",{"2":{"916":1}}],["因为增强回路就是",{"2":{"910":1}}],["因为我认为",{"2":{"903":1}}],["因为它将",{"2":{"934":1}}],["因为它是对上述两种能力的全方位放大",{"2":{"557":1}}],["因为它不需要包含数据获取逻辑或服务端渲染逻辑",{"2":{"65":1}}],["因为过度处理细节而导致的逻辑发散",{"2":{"470":1}}],["因为工具的进化",{"2":{"466":1}}],["因为算法无法计算",{"2":{"376":1}}],["因为掌握了某个新技术",{"2":{"365":1}}],["因为所有由",{"2":{"359":1}}],["因为运行时类型错误往往难以定位和修复",{"2":{"255":1}}],["因为对于一个",{"2":{"233":1}}],["因为",{"2":{"217":1,"236":1,"539":1,"558":1,"610":1}}],["因为最后一行后面可能还没有换行符",{"2":{"166":1}}],["因为后台每次都要重新计算",{"2":{"89":1}}],["因为搜索引擎抓取时会同时读取",{"2":{"81":1}}],["因为文档站天然具备",{"2":{"66":1}}],["概括来讲",{"2":{"935":1}}],["概率的世界观",{"0":{"917":1}}],["概率论等基础知识的学习与理解",{"2":{"912":1}}],["概率性",{"2":{"367":1}}],["概念地图",{"2":{"628":1}}],["概念解释",{"2":{"518":1}}],["概念火热",{"2":{"496":1}}],["概念较多",{"2":{"283":1}}],["概念",{"2":{"278":1}}],["概念层",{"2":{"180":1}}],["概念澄清",{"0":{"159":1}}],["概念简单",{"2":{"133":1}}],["概览",{"0":{"163":1},"2":{"110":1}}],["推拉模式",{"2":{"909":1}}],["推断类型和需求",{"2":{"741":1}}],["推敲",{"2":{"606":1}}],["推出的全栈",{"2":{"561":1}}],["推出的智能助手",{"2":{"512":1}}],["推出的",{"2":{"511":1,"561":1,"842":1}}],["推出的持续集成和持续交付",{"2":{"343":1}}],["推理等放面的原理与流程",{"2":{"551":1}}],["推理速度可达普通",{"2":{"523":1}}],["推理能力逼近",{"2":{"522":1}}],["推理能力强",{"2":{"511":1}}],["推理后端",{"2":{"511":1,"521":1}}],["推理质量随任务推进而下降等挑战",{"2":{"468":1}}],["推理漂移",{"2":{"430":1}}],["推理",{"2":{"427":2,"502":2}}],["推动更好的设计",{"2":{"255":1}}],["推论",{"2":{"244":1}}],["推",{"2":{"153":1}}],["推送对象",{"2":{"134":1}}],["推送至自有的聊天机器人或客服系统",{"2":{"132":1}}],["推荐阅读我的两篇核心文章",{"2":{"902":1}}],["推荐多读读物",{"2":{"400":1}}],["推荐多阅读读物",{"2":{"399":1}}],["推荐一些不错读物",{"2":{"400":1}}],["推荐方案",{"2":{"320":1}}],["推荐采用四层架构",{"2":{"279":1}}],["推荐做法",{"2":{"216":1}}],["推荐值",{"2":{"203":2}}],["推荐使用指数退避策略",{"2":{"171":1}}],["推荐使用数组作为",{"2":{"104":1}}],["推荐先阅读",{"2":{"145":1}}],["推荐通信协议",{"2":{"142":1}}],["推荐配合本节阅读",{"2":{"87":1}}],["推荐内容等个性化组件划入流式动态组件",{"2":{"59":1}}],["推荐",{"2":{"25":1,"155":3,"203":2,"258":1,"263":1,"327":1,"328":1,"523":1,"888":1}}],["断行边界处理粗糙",{"2":{"166":1}}],["断连恢复成本",{"2":{"155":1}}],["断连恢复成本极低的特性",{"2":{"145":1}}],["断线感知以及带退避策略的重连逻辑",{"2":{"129":1}}],["断点续传",{"2":{"122":1}}],["二",{"2":{"964":1}}],["二阶段沉淀下来的时间分配情况",{"2":{"954":1}}],["二战时曾将统计学应用于制造业",{"2":{"943":1}}],["二进制",{"2":{"734":1}}],["二进制协议封装等多媒体场景中具有显著的性能优势",{"2":{"127":1}}],["二值化阈值",{"2":{"677":1}}],["二者形成的能力壁垒",{"2":{"622":1}}],["二者间的通信便无法直接完成",{"2":{"129":1}}],["二级价格歧视",{"2":{"397":1}}],["噩梦",{"2":{"129":1}}],["阅历一步步身兼",{"2":{"958":1}}],["阅读与学习这个话题到此也基本漫谈完了",{"2":{"948":1}}],["阅读与学习这件小事在疫情期间也变得比之前明晰起来",{"2":{"948":1}}],["阅读准则表格",{"2":{"947":1,"948":1}}],["阅读就会变得像追踪一场精彩的辩论一样有趣",{"2":{"609":1}}],["阅读这些经典",{"2":{"603":1}}],["阅读内容",{"2":{"484":1}}],["阅读全文",{"2":{"27":1}}],["阅后即焚",{"2":{"129":1}}],["有助于使用者不断思考如何将日常任务做的更好",{"2":{"953":1}}],["有过类似经历的人肯定能更明白其中的矛盾与酸楚",{"2":{"950":1}}],["有些则以读书学习",{"2":{"958":1}}],["有些侧重实践为主",{"2":{"958":1}}],["有些改变需要依赖时间才能有效果",{"2":{"950":1}}],["有些实践需要时间落地",{"2":{"950":1}}],["有些人的总结未必适合自己",{"2":{"950":1}}],["有些人会把读书当成一种习惯和爱好",{"2":{"945":1}}],["有些人确实读了不少书",{"2":{"612":1}}],["有几个难题摆在了笔者面前",{"2":{"950":1}}],["有几个关键问题需要考虑",{"2":{"170":1}}],["有依据的",{"2":{"941":1}}],["有兴趣的朋友可去深入学习",{"2":{"943":1}}],["有兴趣的小伙伴在以后的日子里可共同进步",{"2":{"936":1}}],["有兴趣的可阅读一些更专业的书籍",{"2":{"919":1}}],["有兴趣的可自己看原创视频",{"2":{"908":1}}],["有两个方面的原因",{"2":{"935":1}}],["有两层含义",{"2":{"903":1}}],["有趣了",{"2":{"919":1}}],["有点觉得自己的心态变得年轻",{"2":{"919":1}}],["有一个比较共同的特点值得敬佩",{"2":{"919":1}}],["有一定编程基础",{"2":{"564":1}}],["有自己的节奏感",{"2":{"914":1}}],["有自己的模块解析机制",{"2":{"216":1}}],["有头有尾",{"2":{"908":1}}],["有减弱关系吗",{"2":{"908":1}}],["有新动画加入时自动启动",{"2":{"767":1}}],["有独立子类",{"2":{"765":1}}],["有独立身份的角色",{"2":{"592":1}}],["有着巨大的鸿沟",{"2":{"612":1}}],["有其独有的优势",{"2":{"606":1}}],["有特定的模式和反模式清单",{"2":{"587":1}}],["有明确",{"2":{"568":1}}],["有合规需求的国内团队",{"2":{"565":1}}],["有数据安全",{"2":{"565":1}}],["有开始暂停按钮",{"2":{"561":1}}],["有海外网络",{"2":{"523":1}}],["有保障",{"2":{"520":1}}],["有没有人能组织且管理好这种自由的远程协作团伙",{"2":{"957":1}}],["有没有反面案例",{"2":{"518":1}}],["有没有更好的解决方案",{"2":{"366":1}}],["有没有更轻量的替代方案",{"2":{"194":1}}],["有个小朋友曾用这个算出了妈妈买奶茶省了多少钱",{"2":{"494":1}}],["有效区分起居空间与办公区间",{"2":{"956":1}}],["有效使用",{"2":{"531":1}}],["有效突破了单智能体在复杂任务中的能力瓶颈",{"2":{"467":1,"468":1}}],["有效减少不必要的请求开销",{"2":{"140":1}}],["有能动性的实体",{"2":{"420":1}}],["有时不达标",{"2":{"962":1}}],["有时觉得自己除了睡觉就一直在工作",{"2":{"956":1}}],["有时只要松开刹车就好",{"2":{"908":1}}],["有时会觉得很累",{"2":{"906":1}}],["有时也能通过",{"2":{"392":1}}],["有时候",{"2":{"263":1}}],["有滞后效应",{"2":{"388":1}}],["有哪些商业考量或技术限制是我没看到的",{"2":{"375":1}}],["有直觉",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1}}],["有了更高层次的追求",{"2":{"959":1}}],["有了知识树",{"2":{"609":1}}],["有了",{"2":{"361":1}}],["有了这个模型",{"2":{"227":1}}],["有意识地培养对自己领域工作的品味",{"2":{"359":1}}],["有表单处理",{"2":{"345":1}}],["有利于",{"2":{"318":1}}],["有机体组件",{"2":{"274":1}}],["有不同的属性约束",{"2":{"249":1}}],["有价值的复杂度",{"2":{"200":1}}],["有限理性的普遍胜利",{"0":{"393":1}}],["有限集",{"2":{"227":1}}],["有限",{"2":{"167":1}}],["有",{"2":{"159":1,"605":1}}],["有状态",{"2":{"129":1}}],["有多友好",{"2":{"71":1}}],["毫不犹豫地使用",{"2":{"931":1}}],["毫不犹豫地将其提升至它们最近的公共父节点",{"2":{"6":1}}],["毫无保留地分享自己踩过的坑与获得的真知灼见",{"2":{"380":1}}],["毫秒",{"2":{"149":1,"169":1,"820":1,"833":1,"839":2}}],["毫秒级同步",{"2":{"128":1}}],["那只能是被束缚得各种不适",{"2":{"953":1}}],["那大家都不需要埋头精耕细作了",{"2":{"621":1}}],["那几本书成了我书架上理解最透彻",{"2":{"610":1}}],["那个时候",{"2":{"553":1}}],["那一刻",{"2":{"495":1}}],["那就直接做一个给学生用的解题机器人",{"2":{"492":1}}],["那就是伪需求",{"2":{"366":1}}],["那它就不是技能",{"2":{"445":1}}],["那它就是不可复制的黑盒",{"2":{"364":1}}],["那些综合表现好的人",{"2":{"918":1}}],["那些薄弱",{"2":{"610":1}}],["那些曾经因为",{"2":{"528":1}}],["那些遗留的烂代码",{"2":{"527":1}}],["那些具备自我修复能力",{"2":{"419":1}}],["那些真实而具体的高价值痛点才会自然浮现",{"2":{"377":1}}],["那些看似玄妙的直觉判断",{"2":{"364":1}}],["那是全知视角的奢望",{"2":{"376":1}}],["那是",{"2":{"371":1}}],["那样去",{"2":{"924":1}}],["那样通过",{"2":{"179":1}}],["那样进行",{"2":{"127":1}}],["那么混合工作制就是基于物理空间和时间这两个维度来切割平面",{"2":{"955":1}}],["那么问题来了",{"2":{"906":1,"912":1,"935":1,"957":1}}],["那么构建完善的评测体系",{"2":{"550":1}}],["那么软件工程范式就是承载它的底盘",{"2":{"534":1}}],["那么自我反思就是",{"2":{"426":1}}],["那么多智能体擅长流程协作",{"2":{"417":1}}],["那么记忆模块则赋予了它",{"2":{"410":1}}],["那么调节回路的存在",{"2":{"387":1,"910":1}}],["那么将它们连接起来的线段就是",{"2":{"385":1}}],["那么模块化的",{"2":{"296":1}}],["那么交叉类型代表的就是",{"2":{"236":1}}],["那么流式",{"2":{"116":1}}],["那么即使用",{"2":{"66":1}}],["那么",{"2":{"11":1,"120":1,"130":1,"402":1,"436":1,"439":1,"544":1,"553":2,"584":1,"915":1,"927":1}}],["带哈希值的类名",{"2":{"922":1}}],["带人工检查点的批量任务执行",{"2":{"881":1}}],["带工具调用的完整流程",{"0":{"863":1}}],["带认证和自定义请求",{"0":{"819":1}}],["带引用的英文学术",{"2":{"518":1}}],["带引用的答案",{"2":{"517":1}}],["带着新问题回去再读",{"2":{"610":1}}],["带着亟待回答的问题去读书",{"2":{"609":1}}],["带着问题去读",{"0":{"609":1}}],["带着",{"2":{"375":1}}],["带来极佳的",{"2":{"342":1}}],["带来了语言层面的模块化方案",{"2":{"307":1}}],["带来的语法噪音",{"2":{"931":1}}],["带来的正向效果特别多",{"2":{"914":1}}],["带来的最大变量",{"2":{"526":1}}],["带来的持续进化能力",{"2":{"419":1}}],["带来的活跃度下降",{"2":{"398":1}}],["带来的",{"2":{"97":1}}],["带掩码时最大",{"2":{"127":1}}],["平时注重多与同事",{"2":{"962":1}}],["平衡思维下的多维度视角和互相依赖的社会特征会给我们一些启发来调整的",{"2":{"907":1}}],["平衡思维是我们的必修课",{"2":{"907":1}}],["平衡静态性能与实时性",{"2":{"32":1}}],["平行光",{"2":{"734":1}}],["平行坐标系",{"2":{"706":1}}],["平行坐标组件",{"2":{"706":1}}],["平行坐标图",{"2":{"706":1}}],["平行",{"2":{"701":1}}],["平移",{"2":{"699":1}}],["平庸与卓越的分水岭不再是做事的速度",{"2":{"602":1}}],["平庸的搬运工",{"2":{"558":1}}],["平庸化",{"0":{"530":1},"1":{"531":1,"532":1,"533":1}}],["平庸者可以利用",{"2":{"359":1}}],["平均数",{"0":{"359":1}}],["平台插件实现",{"2":{"881":1}}],["平台插件清单",{"2":{"881":3}}],["平台详细安装文档",{"2":{"881":1}}],["平台集成测试",{"2":{"881":2}}],["平台自适应",{"2":{"881":1}}],["平台自带的文本生成结果较为生硬",{"2":{"499":1}}],["平台自带的图片生成能力表现不错",{"2":{"499":1}}],["平台适配文档",{"2":{"881":1}}],["平台适配层",{"2":{"879":1,"880":1}}],["平台适配者",{"2":{"875":1}}],["平台需要根据客户需求动态调整页面",{"2":{"640":1}}],["平台开发者",{"2":{"639":1}}],["平台搭建者",{"2":{"639":1}}],["平台选择",{"0":{"498":1}}],["平台与",{"0":{"497":1},"1":{"498":1,"499":1}}],["平台近期发布了新版本",{"2":{"496":1}}],["平台级产品",{"2":{"465":1}}],["平台型产品",{"2":{"399":1}}],["平台",{"0":{"520":1},"1":{"521":1,"522":1},"2":{"343":1,"345":1,"521":3,"522":4,"523":2,"567":1,"883":2}}],["平缓",{"2":{"341":2}}],["平级的应用层协议",{"2":{"125":1}}],["站在不同角度的人在一起讨论后达成的共识往往最接近真相",{"2":{"915":1}}],["站在产品与应用工程师的角度看",{"2":{"525":1}}],["站林超所长视频中学到的总结",{"2":{"908":1}}],["站内信通知",{"2":{"123":1}}],["站点达到数万级页面时",{"2":{"59":1}}],["加大锻炼强度",{"2":{"962":1}}],["加大运动量",{"2":{"942":1}}],["加工和压缩",{"2":{"932":1}}],["加",{"2":{"928":1}}],["加速的",{"2":{"728":1}}],["加速",{"2":{"672":1,"673":1}}],["加速团队协作",{"2":{"297":1}}],["加粗排版完全符合",{"2":{"507":1}}],["加持",{"2":{"361":1}}],["加快编译速度",{"2":{"322":1}}],["加入多余的变量和判断",{"2":{"187":1}}],["加密货币的实时波动",{"2":{"123":1}}],["加载用户适配器",{"2":{"795":1}}],["加载并播放动画",{"2":{"773":1}}],["加载和播放动画",{"2":{"756":1}}],["加载队列管理",{"2":{"734":1}}],["加载器基类",{"2":{"734":1}}],["加载器",{"2":{"728":1,"729":1}}],["加载动画",{"2":{"706":1,"756":1}}],["加载状态",{"2":{"663":1}}],["加载的数据自动合并到父级",{"2":{"653":1}}],["加载到",{"2":{"443":1}}],["加载目录下的",{"2":{"334":1}}],["加载方式",{"2":{"308":1,"320":1}}],["加载模块",{"2":{"305":1}}],["加载性能瓶颈",{"2":{"297":1}}],["加载子应用",{"2":{"287":1}}],["加载中",{"2":{"86":1,"97":1}}],["加载远程图片时",{"2":{"84":1}}],["加载",{"2":{"71":1,"86":1,"305":1,"734":3,"764":1}}],["加载有多快",{"2":{"71":1}}],["加载完成后",{"2":{"39":1}}],["加载静态资源",{"2":{"14":1}}],["消耗与步骤延迟",{"2":{"549":1}}],["消耗",{"2":{"523":1,"550":1}}],["消耗计费",{"2":{"523":1}}],["消耗成本",{"2":{"443":1}}],["消耗和认知过载",{"2":{"441":1}}],["消灭在摇篮里",{"2":{"255":1}}],["消费方通过辨识字段自动收窄",{"2":{"246":1}}],["消费者模型中",{"2":{"138":1}}],["消息流架构",{"2":{"858":1}}],["消息流与框架集成",{"0":{"858":1}}],["消息格式遵循",{"2":{"858":1}}],["消息的转换",{"2":{"824":1}}],["消息文本",{"2":{"663":1}}],["消息通知方法",{"2":{"662":1}}],["消息通知",{"2":{"649":1}}],["消息",{"2":{"172":1,"175":1}}],["消息时的回调",{"2":{"169":1,"175":1}}],["消息由",{"2":{"168":1}}],["消息回调",{"2":{"166":1}}],["消息推送集成",{"2":{"132":1}}],["消息对齐",{"2":{"129":1}}],["消息队列",{"2":{"129":1,"155":1,"156":1,"542":1}}],["消息边界",{"2":{"121":1}}],["消除",{"2":{"1":1}}],["显示相关",{"2":{"734":1}}],["显示加载动画",{"2":{"719":1}}],["显示新的提示行",{"2":{"489":1}}],["显示时重连",{"2":{"167":1,"815":1}}],["显得心有余而力不足",{"2":{"342":1}}],["显著加快了复杂工作流的交付速度",{"2":{"415":1}}],["显著提升编译速度",{"2":{"203":1}}],["显著降低网络带宽占用与传输延迟",{"2":{"127":1}}],["显著降低了用户的首字感知延迟",{"2":{"118":1}}],["显式技能请求测试",{"2":{"881":1}}],["显式指派",{"2":{"592":1}}],["显式指定类型参数",{"2":{"258":1}}],["显式将",{"2":{"481":1}}],["显式声明依赖",{"2":{"305":1}}],["显式优于隐式",{"2":{"12":1}}],["显式通信",{"2":{"2":1}}],["及时发现",{"2":{"942":1}}],["及时了解相关变化",{"2":{"400":1}}],["及格",{"2":{"655":4}}],["及格线以上",{"2":{"359":1}}],["及相关资源文件",{"2":{"441":1}}],["及以上版本中",{"2":{"124":1}}],["及其子",{"2":{"684":1}}],["及其衍生品在双向交互下",{"2":{"143":1}}],["及其",{"2":{"117":1}}],["及少量用于替换",{"2":{"86":1}}],["打鸡血",{"2":{"958":1}}],["打工人太忙",{"2":{"906":1}}],["打印补全脚本",{"2":{"796":1}}],["打印一条消息",{"2":{"489":1}}],["打包成不同体积的产物",{"2":{"764":1}}],["打包入口模块",{"2":{"762":1}}],["打包配置",{"2":{"677":1}}],["打包的单元测试入口",{"2":{"677":1}}],["打包",{"2":{"647":1,"758":1}}],["打包为独立的",{"2":{"94":1}}],["打发时间的消极手段",{"2":{"612":1}}],["打造在不确定时代下依然能保持稳定现金流的",{"2":{"601":1}}],["打造一个最小可行性产品",{"2":{"361":1}}],["打开项目",{"2":{"564":1}}],["打开网站",{"2":{"561":1}}],["打开",{"2":{"515":1}}],["打动人心的永远不是冷峻的技术指标",{"2":{"495":1}}],["打标签与总结转发上",{"2":{"465":1}}],["打破认知茧房本身就是一种巨大的信息差",{"2":{"618":1}}],["打破",{"0":{"616":1},"1":{"617":1,"618":1}}],["打破书本与现实的壁垒",{"2":{"615":1}}],["打破信息差",{"2":{"603":1}}],["打破信息孤岛",{"2":{"548":1}}],["打破盲目追求速度的迷思",{"2":{"602":1}}],["打破它需要巨大的替代成本和风险",{"2":{"392":1}}],["打破规则",{"0":{"360":1}}],["打破了传统样式与结构分离的开发模式",{"2":{"922":1}}],["打破了",{"2":{"116":1}}],["打通前后端数据流",{"2":{"342":1}}],["打字机",{"2":{"118":1,"142":1}}],["减肥这件事情可大可小",{"2":{"962":1}}],["减肥这件小事也被注入了一点点小情怀",{"2":{"959":1}}],["减肥这件小事也就成了既充分也很有必要的事情",{"2":{"959":1}}],["减肥这件小事阶段随笔汇总",{"2":{"942":1}}],["减肥的原因有以下几点",{"2":{"959":1}}],["减弱",{"2":{"385":1}}],["减少服务器负载",{"2":{"815":1}}],["减少依赖数量",{"2":{"758":1}}],["减少渲染开销",{"2":{"713":1}}],["减少歧义",{"2":{"445":1}}],["减少了模型的注意力涣散",{"2":{"509":1}}],["减少了因信息过载导致的幻觉",{"2":{"430":1}}],["减少了频繁三次握手的开销",{"2":{"115":1}}],["减少幻觉需要从以下几个工程节点切入",{"2":{"352":1}}],["减少模块之间的相互影响",{"2":{"328":1}}],["减少模块之间的直接依赖",{"2":{"315":1}}],["减少运行时异常",{"2":{"270":1}}],["减少配置重复",{"2":{"210":1}}],["减少",{"0":{"192":1},"1":{"193":1,"194":1},"2":{"430":1}}],["减少无意义分层",{"2":{"191":1}}],["减少冗余",{"2":{"188":1,"625":1}}],["减少重复代码",{"2":{"188":1}}],["减少传统轮询中的无效请求",{"2":{"150":1}}],["减小渲染开销",{"2":{"1":1}}],["尽最大努力将重要且紧急的事务快速干掉",{"2":{"952":1}}],["尽最大努力让这个话题起到抛砖引玉的作用",{"2":{"936":1}}],["尽管现代版本已支持",{"2":{"342":1}}],["尽管原生",{"2":{"165":1}}],["尽管处于不同层次",{"2":{"160":1}}],["尽管",{"2":{"124":1}}],["尽管从",{"2":{"115":1}}],["尽量多用",{"2":{"94":1}}],["便无所适从",{"2":{"608":1}}],["便是其配套的命令行工具",{"2":{"441":1}}],["便成了这个行业最后的稀缺品",{"2":{"539":1}}],["便成了新的护城河",{"2":{"376":1}}],["便成为了互联网运行的",{"2":{"115":1}}],["便于",{"2":{"577":1,"860":1}}],["便于前端做分支处理",{"2":{"576":1}}],["便于全局搜索成员的定义和引用",{"2":{"311":1}}],["便于构建工具进行优化",{"2":{"207":1}}],["便于客户端解析处理",{"2":{"159":1}}],["便捷性",{"2":{"7":1}}],["业余翻了翻",{"2":{"962":1}}],["业余跟老伙计保持财商与减肥方面的学习沟通",{"2":{"962":1}}],["业余对着电脑可以坐半天的固有模式了",{"2":{"959":1}}],["业余跨地域协作",{"2":{"957":1}}],["业余闲着没事操着治理国家的心呢",{"2":{"957":1}}],["业余时间是没有清单管理的",{"2":{"953":1}}],["业余也喜欢学点东西",{"2":{"938":1}}],["业界也演化出了几种成熟框架",{"2":{"426":1}}],["业界形成了三类主流方法",{"2":{"422":1}}],["业界演化出了两种主流的实现范式",{"2":{"414":1}}],["业界对智能体的认知也发生了变化",{"2":{"414":1}}],["业界不推荐在",{"2":{"216":1}}],["业界推荐的",{"2":{"211":1}}],["业界通常会采用退避轮询策略",{"2":{"140":1}}],["业界发展出了多种实时",{"2":{"114":1}}],["业务边界和极端场景",{"2":{"931":1}}],["业务价值篇",{"0":{"812":1},"1":{"813":1,"814":1,"815":1,"816":1,"817":1,"818":1,"819":1,"820":1,"821":1,"822":1,"823":1,"824":1,"825":1,"826":1,"827":1,"828":1}}],["业务渲染器",{"2":{"645":1,"646":1,"647":1,"650":1}}],["业务渲染层",{"2":{"645":1,"646":1,"647":1}}],["业务",{"2":{"643":1}}],["业务定位",{"2":{"636":1}}],["业务闭环",{"2":{"556":1}}],["业务落地的核心枢纽",{"2":{"544":1}}],["业务流程的顶层设计",{"2":{"542":1}}],["业务细节并",{"2":{"410":1}}],["业务爆发",{"2":{"387":1}}],["业务实体关系高度复杂的系统",{"2":{"342":1}}],["业务导向",{"2":{"283":1}}],["业务方法",{"2":{"281":3}}],["业务模块",{"2":{"280":2,"647":24,"677":39,"706":51,"734":34,"762":79,"792":14,"849":10,"881":25}}],["业务模块目录",{"2":{"275":1}}],["业务相关的概念和规则",{"2":{"278":1}}],["业务功能模块",{"2":{"274":1}}],["业务逻辑和编码规范",{"2":{"557":1}}],["业务逻辑",{"2":{"275":1,"279":1,"462":1}}],["业务逻辑层",{"2":{"274":1}}],["业务逻辑是否过滤了数据",{"2":{"199":1}}],["业务错误事件",{"2":{"175":1}}],["业务层数据消息",{"2":{"172":1}}],["业务场景和团队基建三者之间反复权衡",{"2":{"928":1}}],["业务场景",{"2":{"142":1}}],["业务场景诊断",{"2":{"58":1}}],["业务数据",{"2":{"121":1}}],["却依旧过不好这一生",{"2":{"946":1}}],["却很少有人能自信地说",{"2":{"936":1}}],["却绝不会有15岁的人事经理或法官",{"2":{"614":1}}],["却迟迟未能发家致富时",{"2":{"612":1}}],["却错过了思考方法本身",{"2":{"608":1}}],["却忽略前端模糊的报错提示",{"2":{"556":1}}],["却忽略了一个核心真相",{"2":{"382":1}}],["却如同慢性毒药",{"2":{"527":1}}],["却缺乏执行复杂任务的专业路径",{"2":{"441":1}}],["却缺乏打动人心的人性温度",{"2":{"366":1}}],["却极其容易忽略",{"2":{"383":1}}],["却往往习惯性忽略它们之间的连接关系",{"2":{"383":1}}],["却最常被忽略的一步",{"2":{"375":1}}],["却也难以量化的能力之一",{"2":{"363":1}}],["却无法拥有真正自发的好奇心",{"2":{"362":1}}],["却无法拆分",{"2":{"200":1}}],["却忘记在某个",{"2":{"232":1}}],["却引入整个commons",{"2":{"193":1}}],["却引入了完整的commons",{"2":{"193":1}}],["却显得力不从心",{"2":{"114":1}}],["却在业务膨胀后陷入",{"2":{"1":1}}],["响应端",{"2":{"883":1}}],["响应审查反馈的规范流程",{"2":{"881":1}}],["响应审查反馈",{"2":{"880":1}}],["响应结束时调用",{"2":{"839":1}}],["响应规范",{"2":{"576":1}}],["响应时间等机器指标",{"2":{"537":1}}],["响应速度极快",{"2":{"522":1}}],["响应速度业内领先",{"2":{"522":1}}],["响应速度快",{"2":{"512":1}}],["响应迅速",{"2":{"435":1}}],["响应转换及日志记录",{"2":{"275":1}}],["响应类型",{"2":{"274":1}}],["响应拦截器",{"2":{"274":1,"342":1}}],["响应的",{"2":{"839":1}}],["响应的通用格式",{"2":{"260":1}}],["响应的标准实现与",{"2":{"180":1}}],["响应处理",{"0":{"260":1},"2":{"275":1,"832":1}}],["响应数据的类型",{"2":{"260":1}}],["响应数据的类型化",{"2":{"256":1}}],["响应数据的结构往往是固定的",{"2":{"256":1}}],["响应装饰器",{"2":{"178":1}}],["响应头",{"2":{"177":1}}],["响应头设置",{"2":{"177":1}}],["响应头中声明",{"2":{"117":1}}],["响应不同",{"2":{"177":1}}],["响应",{"2":{"115":1,"125":1,"127":1,"153":1,"177":1,"279":1}}],["响应模式",{"2":{"114":1,"178":1}}],["响应式适配",{"2":{"928":1}}],["响应式且支持主题自定义的",{"2":{"340":1}}],["响应式能力",{"2":{"66":1}}],["响应式设计",{"2":{"23":1}}],["响应式架构的最小内核",{"2":{"7":1}}],["移除对",{"2":{"308":1}}],["移除代码中的注释",{"2":{"203":1}}],["移除末尾斜杠以避免拼接时出现双斜杠",{"2":{"175":1}}],["移除了所有非必要的包装",{"2":{"1":1}}],["移动",{"2":{"656":1}}],["移动端体验佳",{"2":{"518":1}}],["移动端体验流畅",{"2":{"518":1}}],["移动端或低功耗设备使用退避轮询节省电量",{"2":{"157":1}}],["移动端弱网环境下的",{"0":{"139":1}}],["移动应用",{"2":{"114":1}}],["企业中后台",{"2":{"928":1}}],["企业后台管理系统快速搭建",{"2":{"640":1}}],["企业后台管理系统存在大量重复性工作",{"2":{"639":1}}],["企业私有化部署",{"2":{"568":1}}],["企业为主",{"2":{"568":1}}],["企业场景必看合规",{"2":{"523":1}}],["企业文档编写",{"2":{"515":1}}],["企业合规有保障",{"2":{"512":1}}],["企业微信客服",{"2":{"512":1}}],["企业微信",{"2":{"512":1}}],["企业知识库问答",{"2":{"522":1}}],["企业知识库问答与",{"2":{"512":1}}],["企业知识库",{"2":{"512":1}}],["企业知识库等多样业务场景",{"2":{"512":1}}],["企业知识库等多场景",{"2":{"512":1}}],["企业",{"2":{"512":1,"522":2,"700":1}}],["企业接入等场景",{"2":{"512":1}}],["企业是一栋你建造的",{"2":{"380":1}}],["企业网站等",{"2":{"345":1}}],["企业级后台系统需要统一的",{"2":{"639":1}}],["企业级",{"2":{"344":3,"523":1,"567":1,"700":1}}],["企业级工作台",{"2":{"113":1}}],["企业官网还是中小型电商",{"2":{"32":1}}],["超越传统的",{"2":{"536":1}}],["超越模型内核的能力",{"2":{"411":1}}],["超出能力边界",{"2":{"525":1}}],["超高速推理",{"2":{"523":1}}],["超长资料理解",{"2":{"521":1}}],["超长文档理解",{"2":{"512":1,"522":1}}],["超长上下文业界领先",{"2":{"521":1}}],["超长上下文",{"2":{"511":1,"512":1,"521":1}}],["超脱",{"2":{"507":1}}],["超市里算打折优惠",{"2":{"494":1}}],["超市里的软饮料多放在便宜的开放式货架上",{"2":{"391":1}}],["超级个体",{"0":{"540":1},"1":{"541":1,"542":1,"543":1},"2":{"540":1,"557":1,"902":1}}],["超级开发者",{"2":{"457":1}}],["超级解答机",{"2":{"358":1}}],["超时分层",{"2":{"856":1}}],["超时控制等",{"2":{"160":1}}],["超时",{"2":{"151":1,"155":1}}],["超文本传输协议",{"2":{"115":1}}],["超大型复杂应用",{"2":{"341":1}}],["超大型",{"2":{"113":1}}],["超过最大重试次数",{"2":{"175":1}}],["超过",{"2":{"47":1}}],["端消费品",{"2":{"957":1}}],["端渲染入口",{"2":{"706":1}}],["端到端测试",{"2":{"881":1}}],["端到端渲染正确性测试",{"2":{"734":1}}],["端到端的全栈类型推导",{"2":{"342":1}}],["端到端类型安全",{"2":{"342":1}}],["端浏览器使用长轮询",{"2":{"157":1}}],["端",{"2":{"113":1,"755":2}}],["端产品",{"2":{"112":1,"344":1}}],["端点定义",{"2":{"274":1}}],["端点作为天然的",{"2":{"110":1}}],["端点的场景",{"2":{"83":1}}],["端点",{"2":{"78":1,"523":1,"801":1}}],["允许开发者通过字符串",{"2":{"860":1}}],["允许开发者在不改动原始模块文件的情况下",{"2":{"325":1}}],["允许直接用",{"2":{"742":1}}],["允许后端开发者通过编写",{"2":{"639":1}}],["允许运行测试",{"2":{"595":1}}],["允许的工具和流式输出选项",{"2":{"490":1}}],["允许以默认导入方式引入",{"2":{"322":1}}],["允许定义类型参数化的组件",{"2":{"252":1}}],["允许在运行时通过",{"2":{"203":1}}],["允许在组件订阅前对底层数据进行高性能的派生和过滤",{"2":{"110":1}}],["允许导入",{"2":{"203":1}}],["允许",{"2":{"203":1}}],["允许从不严格的导出",{"2":{"203":1}}],["允许为模块路径设置别名",{"2":{"203":1}}],["允许编译的",{"2":{"203":1}}],["允许服务器直接从缓存中获取之前计算好的结果",{"2":{"88":1}}],["具备完整工程任务自主执行闭环",{"2":{"567":1}}],["具备",{"2":{"558":3,"902":1}}],["具备同理心的全栈懂得计算体验",{"2":{"556":1}}],["具备系统级视野",{"2":{"555":1}}],["具备联网搜索与图像理解",{"2":{"512":1}}],["具备类",{"2":{"512":1}}],["具备企业级接入能力",{"2":{"512":1}}],["具备强大的中文语义理解",{"2":{"512":1}}],["具备强大的中文语言理解和推理能力",{"2":{"512":1}}],["具备强大的推理与搜索增强功能",{"2":{"511":1}}],["具备强大的语义理解能力",{"2":{"425":1}}],["具备了在复杂环境中",{"2":{"427":1}}],["具备高度自主权的智能体助手",{"2":{"419":1}}],["具备长短期记忆",{"2":{"403":1}}],["具备极高的稳健性与技术栈包容性",{"2":{"342":1}}],["具象化为清晰的",{"2":{"350":1}}],["具名导出",{"2":{"307":1}}],["具有丰富的想象力和对文字的独特驾驭能力",{"2":{"506":1}}],["具有较高的复杂度",{"2":{"468":1}}],["具有较好的灵活性和适应性",{"2":{"424":1}}],["具有强交叉外部性",{"2":{"399":1}}],["具有唯一标识的对象",{"2":{"278":1}}],["具有层级模糊匹配能力",{"2":{"110":1}}],["具体如下图",{"2":{"954":1}}],["具体渲染单元",{"2":{"676":1}}],["具体体现在三个层面",{"2":{"616":1}}],["具体要求",{"2":{"542":1,"545":1,"550":1,"551":1}}],["具体路径为",{"2":{"467":1}}],["具体",{"2":{"449":1}}],["具体短语",{"2":{"448":1}}],["具体的使用场景与边界",{"2":{"447":1}}],["具体步骤到检查清单",{"2":{"444":1}}],["具体怎么做",{"2":{"437":1}}],["具体说明",{"2":{"435":1,"437":1,"438":1,"439":1}}],["具体措施",{"2":{"291":1}}],["具体数据类型",{"2":{"260":1}}],["具体是什么类型",{"2":{"254":1}}],["具体实施步骤",{"0":{"24":1},"1":{"25":1,"26":1,"27":1,"28":1,"29":1}}],["想必很多人已经知晓",{"2":{"964":1}}],["想一想",{"2":{"959":1}}],["想从读书中学到点东西",{"2":{"945":1}}],["想不到再次写文章时疫情政策已经调整",{"2":{"935":1}}],["想起了大学老师曾经在某节课堂上",{"2":{"909":1}}],["想孵化一个工具产品",{"2":{"631":1}}],["想深入理解一个概念",{"2":{"631":1}}],["想写一篇技术文章",{"2":{"631":1}}],["想得太多",{"2":{"621":1}}],["想在线学编程或使用",{"2":{"562":1}}],["想法在传递中不可避免地衰减",{"2":{"457":1}}],["想象几个场景",{"2":{"583":1}}],["想象一个",{"2":{"418":1}}],["想象一家处于爆发期的小型科技公司",{"2":{"387":1}}],["想象你需要复盘一个复杂项目的进度",{"2":{"417":1}}],["想要学习成长倒是可以多读点书",{"2":{"945":1}}],["想要提升一些技能",{"2":{"938":1}}],["想要获得更多",{"2":{"622":2}}],["想要让这套生命系统长期平稳运行",{"2":{"605":1}}],["想要练出这种能力",{"2":{"383":1}}],["想要",{"2":{"366":1}}],["想要更快的马",{"2":{"363":1}}],["想更快到达目的地",{"2":{"363":1}}],["想刷新列表",{"2":{"110":1}}],["想直观理解这个过程",{"2":{"87":1}}],["配德育与智育",{"2":{"941":1,"959":1}}],["配套",{"2":{"561":1}}],["配套脚本",{"2":{"441":1}}],["配套脚本和资源文件的能力文件夹",{"2":{"436":1,"441":1}}],["配图与动效",{"2":{"515":1}}],["配上",{"2":{"250":1}}],["配合懒加载",{"2":{"782":1}}],["配合现代",{"2":{"319":1}}],["配合使用可以构建灵活的配置体系",{"2":{"209":1}}],["配合状态码",{"2":{"152":1}}],["配合",{"2":{"112":1,"118":1,"662":1,"927":1,"928":1,"930":1,"933":1,"934":1}}],["配合它的",{"2":{"110":1}}],["配置作为",{"2":{"927":1}}],["配置示意如下",{"2":{"925":1}}],["配置示例",{"2":{"203":1}}],["配置目录",{"2":{"823":1}}],["配置动画数据",{"2":{"776":1}}],["配置动画参数",{"2":{"776":1}}],["配置和测试用例",{"2":{"706":1}}],["配置中的文本替换方法",{"2":{"662":1}}],["配置控件",{"2":{"647":1}}],["配置描述",{"2":{"641":1}}],["配置即可改变页面",{"2":{"640":1}}],["配置即页面",{"2":{"639":1}}],["配置来生成页面",{"2":{"639":1}}],["配置就能自动生成各种后台管理页面",{"2":{"639":1}}],["配置结构",{"0":{"594":1}}],["配置环境",{"2":{"583":1}}],["配置自定义模型",{"2":{"568":1}}],["配置自动构建",{"2":{"29":1,"32":1}}],["配置云端服务或触发",{"2":{"414":1}}],["配置极简",{"2":{"342":1}}],["配置指南",{"0":{"322":1}}],["配置共享基础库",{"2":{"291":1}}],["配置复杂度可以根据项目需求逐步升级",{"2":{"597":1}}],["配置复杂",{"2":{"287":1}}],["配置复用和继承",{"2":{"210":1}}],["配置层",{"2":{"274":1}}],["配置常量",{"2":{"274":1}}],["配置管理",{"2":{"226":1}}],["配置类型",{"2":{"216":1}}],["配置略有不同",{"2":{"214":1}}],["配置方式",{"2":{"210":1,"595":1}}],["配置分层原则",{"2":{"216":1}}],["配置分层",{"2":{"209":1}}],["配置覆盖",{"2":{"209":1}}],["配置继承",{"0":{"209":1},"2":{"209":1}}],["配置机制",{"2":{"205":1}}],["配置组合",{"0":{"204":1}}],["配置位置",{"2":{"202":1}}],["配置文件管控的内容",{"2":{"572":1}}],["配置文件",{"2":{"202":1,"203":2,"222":1,"275":1}}],["配置错误",{"2":{"198":1}}],["配置选项接口",{"2":{"839":1}}],["配置选项",{"2":{"166":1,"210":1,"839":1}}],["配置合理的默认行为至关重要",{"2":{"106":1}}],["配置通过环境变量和",{"2":{"857":1}}],["配置通过",{"2":{"47":1}}],["配置到项目中",{"2":{"26":1}}],["配置",{"0":{"26":1,"222":1,"432":1},"2":{"99":1,"203":3,"274":1,"290":1,"419":1,"553":1,"576":1,"639":1,"647":12,"650":1,"661":1,"663":1,"677":24,"706":23,"715":2,"734":16,"762":21,"792":14,"823":1,"849":5,"881":45,"895":1,"925":1}}],["配置简单",{"2":{"18":1}}],["配置项目的",{"2":{"9":1}}],["路径中的文件",{"2":{"925":1}}],["路径解析",{"2":{"734":1}}],["路径解析和渲染",{"2":{"677":1}}],["路径图",{"2":{"706":1}}],["路径匹配正则表达式",{"2":{"661":1}}],["路径匹配缓存",{"2":{"652":1}}],["路径过滤不仅能避免噪音",{"2":{"578":1}}],["路径过滤",{"0":{"576":1}}],["路径别名配置建议",{"2":{"216":1}}],["路径映射",{"2":{"203":1,"216":1}}],["路径",{"2":{"110":1,"801":1}}],["路由逻辑",{"2":{"768":1}}],["路由与可观测性",{"0":{"549":1}}],["路由与状态管理",{"0":{"341":1}}],["路由懒加载",{"2":{"313":1}}],["路由等问题",{"2":{"292":1}}],["路由管理器",{"2":{"341":2}}],["路由管理",{"2":{"286":1}}],["路由端点",{"2":{"275":1}}],["路由守卫等功能",{"2":{"341":2}}],["路由守卫",{"2":{"274":1}}],["路由定义",{"2":{"274":1}}],["路由常量",{"2":{"274":1}}],["路由级别",{"2":{"274":1}}],["路由配置",{"2":{"274":2}}],["路由层",{"2":{"274":2,"443":1}}],["路由如何组织",{"2":{"71":1}}],["路由匹配",{"2":{"71":1}}],["路由",{"2":{"65":1,"71":2,"442":1,"445":1,"549":1,"650":1,"653":1}}],["~12",{"2":{"872":1}}],["~144",{"2":{"872":1}}],["~13",{"2":{"110":1}}],["~500kb",{"2":{"734":1}}],["~211",{"2":{"699":1,"872":1}}],["~201",{"2":{"872":1}}],["~20",{"2":{"677":1}}],["~26kb",{"2":{"672":1}}],["~670",{"2":{"643":1}}],["~3",{"2":{"643":1}}],["~",{"2":{"142":1,"143":1,"570":3,"571":1,"580":1,"583":1,"597":1,"795":1,"800":1}}],["~418",{"2":{"872":1}}],["~45",{"2":{"677":1}}],["~4",{"2":{"110":1}}],["大学之路",{"2":{"948":1}}],["大学时代",{"2":{"947":1}}],["大数定律",{"2":{"917":2}}],["大数据量时可以在多个帧中分块渲染",{"2":{"712":1}}],["大数据量降采样",{"2":{"706":1}}],["大数据量用",{"2":{"701":1}}],["大部分应该都没有这么做",{"2":{"942":1}}],["大部分游客基本都把仅剩的铜板留在了宋城",{"2":{"917":1}}],["大部分项目的首选",{"2":{"341":1}}],["大概率是走出校园后看到了人外有人",{"2":{"938":1}}],["大概率是能取得预期结果的",{"2":{"906":1}}],["大概率找不到最好答案",{"2":{"906":1}}],["大概有",{"2":{"152":1}}],["大小限制",{"2":{"801":1}}],["大小",{"2":{"715":1,"927":1}}],["大家在紧锣密鼓地创造产品和服务的数字属性",{"2":{"957":1}}],["大家都知道做技术输出",{"2":{"617":1}}],["大家可以并行负责不同模块的开发与单元测试",{"2":{"297":1}}],["大段解释理论的长篇文字",{"2":{"572":1}}],["大规模分布式系统经验",{"2":{"551":1}}],["大幅降低接入与切换成本",{"2":{"523":1}}],["大纲结构答案",{"2":{"518":1}}],["大纲即可自动生成精美",{"2":{"515":1}}],["大纲生成与头脑风暴",{"2":{"515":1}}],["大纲",{"2":{"514":1,"518":1}}],["大语言模型的表现越来越让人惊艳",{"2":{"918":1}}],["大语言模型的流式响应输出",{"2":{"816":1}}],["大语言模型",{"2":{"402":1,"906":1}}],["大脑内部的组织问题",{"2":{"439":1}}],["大脑",{"2":{"402":1,"408":1,"414":1}}],["大成就靠建立正向的",{"2":{"386":1}}],["大而全的异步状态接管",{"2":{"342":1}}],["大而全的异步状态机",{"2":{"110":1}}],["大大提高你的阅读效率和理解深度",{"2":{"609":1}}],["大大提高了开发效率和团队协作能力",{"2":{"292":1}}],["大大提升开发效率",{"2":{"342":1}}],["大杀器",{"0":{"313":1}}],["大型数据集",{"2":{"706":1}}],["大型代码库的类型安全",{"2":{"702":1}}],["大型企业存量代码库的日常开发",{"2":{"568":1}}],["大型企业级应用",{"2":{"287":1}}],["大型存量代码库",{"2":{"568":1}}],["大型项目中的模块化设计",{"2":{"272":1}}],["大型项目的模块化配置",{"0":{"205":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1}}],["大多数系统本质上是反应性的",{"2":{"419":1}}],["大多数情况下我们不需要显式指定类型参数",{"2":{"263":1}}],["大多数云厂商的负载均衡器",{"2":{"137":1}}],["大项目再逐步分层",{"2":{"189":1}}],["大量元素动画",{"2":{"782":1}}],["大量快照测试",{"2":{"647":1}}],["大量后端开发者需要做后台管理系统但不熟悉前端技术",{"2":{"639":1}}],["大量隐性知识存于现实社会",{"2":{"614":1}}],["大量",{"2":{"180":1,"647":2}}],["大量客户端同时高频重试",{"2":{"147":1}}],["大容量资源下发",{"2":{"118":1}}],["大模型兴起",{"2":{"912":1}}],["大模型相当火爆",{"2":{"909":1}}],["大模型的过程中",{"2":{"906":1}}],["大模型的输出具有非确定性",{"2":{"550":1}}],["大模型的训练依靠",{"2":{"369":1}}],["大模型本质上是概率性的",{"2":{"534":1}}],["大模型助手",{"2":{"512":1}}],["大模型是基于",{"2":{"360":1}}],["大模型",{"2":{"118":1,"358":1,"511":1,"512":1}}],["大致经历以下四个阶段",{"2":{"33":1}}],["协调请求",{"2":{"832":1}}],["协调表达式求值和字体加载",{"2":{"768":1}}],["协调所有事件",{"2":{"680":1}}],["协调者",{"2":{"471":1}}],["协调调度",{"2":{"470":1}}],["协调研究",{"2":{"470":1}}],["协调员",{"2":{"416":1}}],["协调领域对象",{"2":{"279":1}}],["协调领域对象完成业务用例",{"2":{"278":1,"279":1}}],["协调复杂业务流程",{"2":{"275":1}}],["协同作战的",{"2":{"420":1}}],["协同",{"0":{"420":1}}],["协同文档状态同步",{"2":{"156":1}}],["协同办公",{"2":{"128":1}}],["协议测试",{"2":{"881":1}}],["协议支持",{"2":{"849":1}}],["协议定义",{"2":{"792":1}}],["协议和高阶",{"2":{"552":1}}],["协议契约",{"2":{"342":2}}],["协议直接引用",{"2":{"216":1}}],["协议错误",{"2":{"172":1}}],["协议层控制消息",{"2":{"172":1}}],["协议规定",{"2":{"168":1}}],["协议规范写入数据",{"2":{"177":1}}],["协议规范",{"2":{"159":1}}],["协议以换行符分隔字段",{"2":{"168":1}}],["协议解析逻辑",{"2":{"167":1}}],["协议解析",{"2":{"165":1,"166":1,"824":1}}],["协议字段",{"2":{"163":1}}],["协议字段的对应关系",{"2":{"163":1}}],["协议中的",{"2":{"163":2,"178":1}}],["协议中",{"2":{"163":1,"166":1}}],["协议格式持续写入响应流",{"2":{"176":1}}],["协议格式写入",{"2":{"164":1}}],["协议格式的响应即可",{"2":{"164":1}}],["协议格式",{"2":{"163":1}}],["协议对数据流格式有明确规定",{"2":{"161":1}}],["协议数据格式",{"0":{"161":1}}],["协议数百字节的首部开销",{"2":{"127":1}}],["协议的",{"2":{"178":3}}],["协议的数据格式规范",{"2":{"162":1}}],["协议的数据流底层必然依赖流式",{"2":{"160":1}}],["协议的全双工通信协议",{"2":{"125":1}}],["协议基础",{"2":{"134":1}}],["协议本身设计得极为精简",{"2":{"129":1}}],["协议原生支持文本",{"2":{"127":1}}],["协议开销",{"2":{"126":1}}],["协议后",{"2":{"126":1}}],["协议升级握手",{"2":{"126":1}}],["协议默认开启了",{"2":{"115":1}}],["协议之上",{"2":{"115":1}}],["协议",{"2":{"110":1,"127":1,"160":2,"180":1,"439":2,"844":1,"858":1}}],["协作应用",{"2":{"816":1}}],["协作或复杂的",{"2":{"550":1}}],["协作与路由流",{"2":{"545":1}}],["协作与分发机制",{"2":{"545":1}}],["协作的过渡态",{"2":{"538":1}}],["协作水平的终极标准",{"2":{"526":1}}],["协作",{"2":{"525":1}}],["协作编辑",{"2":{"143":1}}],["协作编程大显身手的时刻",{"2":{"8":1}}],["协作时代",{"2":{"3":1}}],["协作时代后",{"2":{"1":1}}],["协作小洞察",{"2":{"2":1}}],["变体状态机",{"2":{"928":1}}],["变体驱动",{"2":{"934":1}}],["变体驱动架构",{"2":{"928":1}}],["变体驱动原子化",{"2":{"928":1,"930":1}}],["变体驱动原子化架构",{"2":{"928":1}}],["变体驱动的原子化",{"0":{"927":1},"2":{"928":1}}],["变体",{"2":{"927":1,"934":2}}],["变形目标等",{"2":{"734":1}}],["变换对象代理",{"2":{"762":1}}],["变换数据",{"2":{"762":1}}],["变换元素",{"2":{"762":1}}],["变换效果",{"2":{"762":3,"764":1}}],["变换操作",{"2":{"748":1}}],["变换属性",{"2":{"737":1,"762":1}}],["变换矩阵运算库",{"2":{"762":1}}],["变换矩阵",{"2":{"734":1,"748":1}}],["变换控件",{"2":{"677":1}}],["变换",{"2":{"677":1,"679":1,"737":1,"770":1}}],["变换层级",{"2":{"676":1}}],["变换系统",{"2":{"672":1,"682":2}}],["变现逻辑的隐藏环节",{"2":{"625":1}}],["变得",{"2":{"546":1}}],["变得无比重要",{"2":{"359":1}}],["变式题",{"2":{"495":1}}],["变化",{"2":{"799":1}}],["变化因子",{"0":{"384":1}}],["变化会自动触发新的请求并拥有独立缓存",{"2":{"107":1}}],["变更日志",{"2":{"762":1,"823":1}}],["变更回调",{"2":{"685":1}}],["变更原子化",{"2":{"451":1}}],["变更",{"2":{"331":1,"592":1}}],["变成一个自动运行的卷动机",{"2":{"909":1}}],["变成有一定质量与正向效果的",{"2":{"909":1}}],["变成",{"2":{"564":1,"923":1,"924":1,"928":1}}],["变成我们得心应手的伙伴",{"2":{"509":1}}],["变成没人敢动的",{"2":{"327":1}}],["变成了可以快速完成的",{"2":{"528":1}}],["变成了",{"2":{"50":1,"527":1,"555":1}}],["变量中硬编码",{"2":{"933":1}}],["变量只存数字通道",{"2":{"929":1}}],["变量跨端共享",{"2":{"928":1}}],["变量和组件的",{"2":{"922":1}}],["变量系统",{"2":{"647":1}}],["变量识别",{"2":{"646":1}}],["变量解析与过滤",{"2":{"646":1}}],["变量是节点",{"2":{"386":1}}],["变量流入或流出的速率",{"2":{"384":1}}],["变量",{"0":{"384":1,"929":1},"2":{"274":1,"383":2,"384":1,"655":1,"922":1,"928":4,"929":1,"934":1}}],["变量名",{"2":{"217":1}}],["变通方案",{"2":{"143":1}}],["变异",{"2":{"116":1}}],["数量",{"2":{"647":1}}],["数线性增长",{"2":{"523":1}}],["数十万开源模型",{"2":{"523":1}}],["数十秒到分钟级",{"2":{"156":1}}],["数学家的故事",{"2":{"912":1}}],["数学方面的短板更是凸显",{"2":{"912":1}}],["数学库等核心模块",{"2":{"736":1}}],["数学运算节点",{"2":{"734":1}}],["数学工具",{"2":{"734":1}}],["数学平面",{"2":{"734":1}}],["数学公式解析",{"2":{"647":1}}],["数学与线性代数",{"2":{"734":1}}],["数学与代码推理能力突出",{"2":{"522":1}}],["数学与代码推理突出",{"2":{"512":1,"522":1}}],["数学与逻辑如何重构这个世界",{"2":{"598":1}}],["数学与逻辑能力顶尖",{"2":{"512":1}}],["数学与逻辑推理",{"2":{"512":1}}],["数学小管家",{"2":{"494":1}}],["数学不仅仅是得出正确答案",{"2":{"493":1}}],["数学",{"0":{"493":1},"2":{"493":1,"512":2,"522":4,"655":1,"911":1}}],["数字化是趋势",{"2":{"957":1}}],["数字化",{"2":{"947":1,"957":1}}],["数字员工",{"0":{"419":1},"2":{"419":1,"420":1,"421":1,"433":1,"542":1}}],["数字团队",{"2":{"413":1}}],["数字工程师",{"2":{"411":1}}],["数字合伙人",{"2":{"410":1}}],["数值阶梯",{"2":{"925":1}}],["数值计算",{"2":{"706":1}}],["数值",{"2":{"706":1}}],["数值+货币",{"2":{"278":1}}],["数值后",{"2":{"171":1}}],["数分钟",{"2":{"142":1,"143":1}}],["数组告诉",{"2":{"925":1}}],["数组存储所有动画实例",{"2":{"767":1}}],["数组纹理",{"2":{"734":1}}],["数组转换",{"2":{"734":1}}],["数组等",{"2":{"655":1}}],["数组符合",{"2":{"266":1}}],["数组元素的类型",{"2":{"259":1}}],["数组处理等",{"2":{"256":1}}],["数组",{"2":{"107":1,"110":1,"266":1,"680":1,"684":1}}],["数据形状推断",{"2":{"792":1}}],["数据中的修饰器通过短的",{"2":{"771":1}}],["数据中的表达式文本",{"2":{"769":1}}],["数据来源",{"2":{"770":1}}],["数据来源庞杂且分散的大型业务系统",{"2":{"342":1}}],["数据项数量",{"2":{"719":1}}],["数据映射和视觉编码存取",{"2":{"713":1}}],["数据映射转换",{"2":{"647":1}}],["数据差分",{"2":{"713":1}}],["数据差分器",{"2":{"706":1}}],["数据采样",{"2":{"706":1}}],["数据堆叠",{"2":{"706":1}}],["数据更新时的过渡动画",{"2":{"706":1}}],["数据变换",{"2":{"706":1}}],["数据变更",{"2":{"342":1}}],["数据变更与乐观更新",{"2":{"110":1}}],["数据集",{"2":{"706":1}}],["数据缩放",{"2":{"706":1}}],["数据源抽象",{"2":{"706":1,"713":1}}],["数据维度信息",{"2":{"706":1}}],["数据恢复",{"2":{"706":1}}],["数据模型层",{"2":{"706":1}}],["数据模型",{"2":{"702":1}}],["数据模型类型",{"2":{"274":1}}],["数据点时支持分帧渲染",{"2":{"701":1}}],["数据报告",{"2":{"700":1}}],["数据服务契约",{"2":{"663":1}}],["数据域",{"2":{"663":1}}],["数据接收器",{"2":{"662":1}}],["数据从上往下流动",{"2":{"653":1}}],["数据管理器覆盖",{"2":{"762":1}}],["数据管理器",{"2":{"762":2}}],["数据管理系统",{"0":{"713":1},"2":{"706":1}}],["数据管理",{"2":{"650":1}}],["数据处理管道",{"2":{"717":1}}],["数据处理器等",{"2":{"711":1}}],["数据处理器",{"2":{"704":1,"706":1}}],["数据处理",{"2":{"647":1,"734":1}}],["数据绑定控件",{"2":{"647":1}}],["数据加载",{"2":{"647":1,"773":1}}],["数据加载时的即时",{"2":{"78":1}}],["数据作用域组件",{"2":{"647":1}}],["数据初始化",{"2":{"647":1}}],["数据与图表解耦",{"2":{"702":1}}],["数据与",{"2":{"641":1}}],["数据如何流动",{"0":{"631":1}}],["数据如何获取",{"2":{"71":1}}],["数据迁移时",{"2":{"592":1}}],["数据操作时",{"2":{"592":1}}],["数据安全",{"2":{"565":1}}],["数据安全优先",{"2":{"564":1}}],["数据能否出境",{"2":{"519":1}}],["数据驱动文档",{"2":{"515":1}}],["数据驱动型团队协作与知识管理场景",{"2":{"515":1}}],["数据可视化图表",{"2":{"671":1}}],["数据可视化的深度",{"0":{"475":1}}],["数据可视化等",{"2":{"58":1}}],["数据摘要和分析结果",{"2":{"471":1}}],["数据散落在多个平台",{"2":{"465":1}}],["数据仓库等",{"2":{"439":1}}],["数据在哪儿",{"2":{"439":2}}],["数据在部署前已渲染到",{"2":{"27":1}}],["数据清洗",{"2":{"462":1}}],["数据清洗规则",{"2":{"436":1}}],["数据清洗与报告框架搭建",{"2":{"406":1}}],["数据往往散落在物理文档",{"2":{"417":1}}],["数据分析等多场景",{"2":{"512":1}}],["数据分析摘要总结",{"2":{"474":1}}],["数据分析师",{"2":{"416":1,"471":1,"700":1}}],["数据分块连续传输",{"2":{"159":1}}],["数据类型",{"2":{"762":1}}],["数据类",{"2":{"411":1}}],["数据隐私法规对精细化广告的影响",{"2":{"400":1}}],["数据积累和品牌忠诚",{"2":{"393":1}}],["数据显示",{"2":{"366":1}}],["数据解读",{"2":{"366":1,"462":1}}],["数据看似完美",{"2":{"366":1}}],["数据过期更新和加载",{"2":{"342":1}}],["数据验证和格式转换",{"2":{"279":1}}],["数据填充",{"2":{"275":1}}],["数据传输对象",{"2":{"275":1}}],["数据请求和缓存",{"2":{"274":1}}],["数据请求逻辑",{"2":{"26":1}}],["数据缓存与同步策略",{"2":{"274":1}}],["数据访问",{"2":{"706":1}}],["数据访问层",{"2":{"274":1,"275":2}}],["数据访问更安全",{"2":{"72":1}}],["数据容器核心接口",{"2":{"719":1}}],["数据容器",{"0":{"261":1}}],["数据内容",{"2":{"178":1}}],["数据行以",{"2":{"166":1}}],["数据格式",{"2":{"177":1,"180":1,"787":1}}],["数据格式依然遵循",{"2":{"160":1,"180":1}}],["数据格式约定",{"2":{"159":1}}],["数据帧首部极为紧凑",{"2":{"127":1}}],["数据只能单向流动",{"2":{"115":1}}],["数据转换辅助函数",{"2":{"706":1}}],["数据转换函数",{"2":{"262":1}}],["数据转换器",{"2":{"110":1}}],["数据转换",{"0":{"107":1}}],["数据选择器发生错误时的统一处理边界",{"2":{"106":1}}],["数据并",{"2":{"104":1}}],["数据共享和分页加载等高级功能",{"2":{"103":1}}],["数据塞进",{"2":{"97":1}}],["数据绝对最新",{"2":{"75":1}}],["数据不会太旧",{"2":{"75":1}}],["数据获取与缓存",{"2":{"650":1}}],["数据获取与",{"0":{"342":1}}],["数据获取后",{"2":{"104":1}}],["数据获取摒弃",{"2":{"94":1}}],["数据获取逻辑放在服务端组件中",{"2":{"94":1}}],["数据获取的新范式",{"0":{"80":1},"1":{"81":1,"82":1,"83":1}}],["数据获取",{"2":{"71":1}}],["数据获取和渲染的额外耗时依然存在",{"2":{"66":1}}],["数据预取的编排",{"2":{"71":1}}],["数据实时性要求中等的数据看板",{"2":{"342":1}}],["数据实时性",{"2":{"57":1}}],["数据表",{"2":{"28":1}}],["数据库变更",{"2":{"587":1}}],["数据库类型",{"2":{"573":1}}],["数据库集成与一键部署",{"2":{"561":1}}],["数据库选型",{"2":{"542":1}}],["数据库或",{"2":{"411":1}}],["数据库或第三方",{"2":{"342":1}}],["数据库建模等子目标",{"2":{"408":1}}],["数据库连接或配置信息",{"2":{"301":1}}],["数据库访问",{"2":{"279":1}}],["数据库迁移",{"2":{"275":1,"583":1}}],["数据库配置",{"2":{"275":1}}],["数据库模型",{"2":{"275":1}}],["数据库操作",{"2":{"275":1}}],["数据库是否有该用户数据",{"2":{"199":1}}],["数据库查询逻辑错误",{"2":{"199":1}}],["数据库主键生成逻辑",{"2":{"196":1}}],["数据库",{"2":{"20":1,"23":1,"412":1,"515":2,"573":1}}],["数据层",{"2":{"18":1}}],["数据",{"2":{"18":1,"71":1,"160":2,"175":1,"274":1,"342":1,"643":1,"647":1,"650":1,"677":1,"737":1,"755":1,"756":1}}],["数据流动规则",{"2":{"653":1}}],["数据流",{"2":{"511":1,"771":1}}],["数据流职责",{"2":{"344":1}}],["数据流架构范式",{"2":{"342":1}}],["数据流的可追溯性",{"2":{"12":1}}],["数据流闭环",{"2":{"12":1}}],["数据流方向明确",{"2":{"9":1,"10":1}}],["数据的流动路径",{"2":{"11":1}}],["数据卡片",{"2":{"10":1}}],["数据结构往往是通用的",{"2":{"256":1}}],["数据结构",{"2":{"9":1}}],["数据占位符",{"2":{"3":1}}],["次优统计并调整周末时间的分配",{"2":{"954":1}}],["次优先排日常起居",{"2":{"953":1}}],["次进行数据聚焦查询",{"2":{"472":1}}],["次版本号",{"2":{"331":2}}],["次要或后台任务使用退避轮询",{"2":{"157":1}}],["次查询",{"2":{"149":1}}],["次等待",{"2":{"148":1}}],["次即可",{"2":{"106":1}}],["次通常太多",{"2":{"106":1}}],["你读书的目的是什么",{"2":{"945":1}}],["你使用的是",{"2":{"928":2}}],["你敲下",{"2":{"927":1}}],["你就能积累更多的信用",{"2":{"908":1}}],["你就不再只是一个单纯的",{"2":{"303":1}}],["你所看到的",{"2":{"620":1}}],["你们还没看到我刻苦读书的身姿吗",{"2":{"612":1}}],["你甚至可以把逻辑推理能力较强的",{"2":{"610":1}}],["你在本地可能需要更高的权限来做调试",{"2":{"596":1}}],["你在踩油门吗",{"2":{"389":1}}],["你调用",{"2":{"590":1}}],["你用",{"2":{"588":1}}],["你输入",{"2":{"585":1}}],["你从",{"2":{"555":1}}],["你为什么选这一个",{"2":{"533":1}}],["你也失去了监督",{"2":{"530":1}}],["你也可以用构造函数模式动态组合",{"2":{"248":1}}],["你才能更好地创作出优美的诗歌",{"2":{"506":1}}],["你将创作相应的诗歌",{"2":{"504":1}}],["你将积累起一个强大的",{"2":{"463":1}}],["你知道吗",{"2":{"494":1}}],["你是代码审查专家",{"2":{"591":1}}],["你是否有能力调试剩下那",{"2":{"555":1}}],["你是一位专业的诗人",{"2":{"504":1}}],["你是一位经验丰富的小学数学教师",{"2":{"494":1}}],["你是将自己视为被",{"2":{"466":1}}],["你不需要起任何复杂的类名",{"2":{"924":1}}],["你不需要告诉它什么时候上场",{"2":{"584":1}}],["你不需要一次性学会所有东西",{"2":{"466":1}}],["你不再需要为了迎合资本的审美而扭曲产品的初衷",{"2":{"379":1}}],["你现在在用",{"2":{"462":1}}],["你通过自然语言驱动",{"2":{"435":1}}],["你只得到了答案",{"2":{"608":1}}],["你只需给它一段手机屏幕录屏",{"2":{"418":1}}],["你只能访问两者共有的属性",{"2":{"242":1}}],["你只能访问所有成员都有的属性",{"2":{"233":1}}],["你只能安全访问",{"2":{"233":1}}],["你做得最好",{"2":{"396":1}}],["你觉得水冷",{"2":{"388":1}}],["你可能瞬间就顿悟了",{"2":{"387":1}}],["你可以用三个问题来定位自己的杠杆",{"2":{"462":1}}],["你可以重构哪些连接关系",{"2":{"389":1}}],["你可以轻松地在",{"2":{"335":1}}],["你可以轻松实现",{"2":{"104":1}}],["你可以通过拆分规则文件实现关注点分离",{"2":{"575":1}}],["你可以通过",{"2":{"202":1}}],["你贡献的优质代码越多",{"2":{"386":1}}],["你会怎么设计数据库",{"2":{"374":1}}],["你会发现",{"2":{"303":1,"375":1}}],["你已经从一个",{"2":{"337":1}}],["你拥有两者的全部属性",{"2":{"242":1}}],["你对",{"2":{"180":1,"530":1}}],["你好",{"2":{"161":1,"166":1,"169":1}}],["你需要以优雅",{"2":{"504":1}}],["你需要告知用户你仅专注于诗歌创作领域",{"2":{"504":1}}],["你需要礼貌地引导用户按照",{"2":{"504":1}}],["你需要有能力判断哪一个真正有效",{"2":{"460":1}}],["你需要",{"2":{"113":1}}],["你希望保持依赖树的纯净和",{"2":{"112":1}}],["你的后端技术",{"2":{"573":1}}],["你的前端技术",{"2":{"573":1}}],["你的项目文件",{"2":{"570":1}}],["你的角色",{"2":{"559":1}}],["你的任务是帮助用户通过诗歌表达情感",{"2":{"504":1}}],["你的核心目标是引导家长理解问题背后的思维逻辑",{"2":{"494":1}}],["你的判断力愈发精准",{"2":{"464":1}}],["你的判断力在哪里最强",{"2":{"462":1}}],["你的执行瓶颈",{"2":{"462":1}}],["你的优势",{"2":{"462":1}}],["你的洞察深度已经超越了",{"2":{"375":1}}],["你的成长曲线将在极短时间内迎来惊人的指数级跃升",{"2":{"361":1}}],["你的原创性",{"2":{"360":1}}],["你的利润率",{"0":{"354":1}}],["你的标准",{"2":{"107":1}}],["你的用户名",{"2":{"29":1}}],["旧版",{"2":{"706":1,"730":1}}],["旧版表格",{"2":{"647":1}}],["旧版表格渲染器",{"2":{"646":1,"647":1}}],["旧版叫",{"2":{"104":1}}],["旧习惯",{"2":{"613":1}}],["旧模式",{"2":{"555":1,"556":1,"557":1}}],["旧全栈",{"2":{"553":1}}],["旧的模式",{"2":{"80":1}}],["垃圾回收时间",{"2":{"104":1}}],["默认状态",{"2":{"927":1}}],["默认系统提示",{"2":{"887":1}}],["默认情况下",{"2":{"839":1}}],["默认验证",{"2":{"839":1}}],["默认材质",{"2":{"730":1}}],["默认入口",{"2":{"706":1,"708":1}}],["默认加载动画效果",{"2":{"706":1}}],["默认不会主动扫描",{"2":{"481":1}}],["默认不会对此发出警告",{"2":{"232":1}}],["默认不抛出",{"2":{"342":1}}],["默认导入",{"2":{"311":1}}],["默认导出整个类",{"2":{"311":1}}],["默认导出与导入",{"0":{"311":1}}],["默认导出",{"2":{"307":1,"311":2}}],["默认排除",{"2":{"203":1}}],["默认包含所有",{"2":{"203":1}}],["默认为",{"2":{"203":1,"839":1}}],["默认配置下有时会导致意料之外的组件重渲染",{"2":{"342":1}}],["默认配置",{"2":{"137":1}}],["默认",{"2":{"106":1,"166":1,"203":1,"661":1,"801":1,"832":1}}],["默认值为",{"2":{"104":2}}],["默认重新拉取一次确保数据绝对同步",{"2":{"100":1}}],["新时代农民工也需要通过学习来了解国家发展方向",{"2":{"959":1}}],["新的解决方案",{"2":{"903":1}}],["新字节块",{"2":{"833":1}}],["新年动画",{"2":{"762":1}}],["新架构中",{"2":{"742":1}}],["新版表格",{"2":{"647":1}}],["新版表格渲染器",{"2":{"646":1,"647":1}}],["新成员不知道如何正确初始化项目环境",{"2":{"583":1}}],["新成员也难以快速定位所需内容",{"2":{"575":1}}],["新手路线建议",{"2":{"559":1}}],["新手友好",{"2":{"559":1}}],["新手入门",{"2":{"518":1}}],["新模式",{"2":{"555":1,"556":1,"557":1}}],["新旧模式对比",{"2":{"555":1,"556":1}}],["新全栈",{"2":{"553":1}}],["新用户有较大免费",{"2":{"522":1}}],["新闻",{"2":{"518":2}}],["新一代",{"2":{"515":1}}],["新代码",{"2":{"509":1}}],["新项目脚手架初始化",{"2":{"454":1}}],["新项目应直接在",{"2":{"308":1}}],["新功能",{"2":{"451":1}}],["新功能开发",{"2":{"451":1}}],["新增",{"2":{"331":3,"739":1,"850":1}}],["新增功能",{"2":{"331":1}}],["新增业务功能时",{"2":{"283":1,"292":1}}],["新增了一个联合成员",{"2":{"232":1}}],["新增文章并发布后",{"2":{"29":1}}],["新鲜的",{"2":{"104":1}}],["多吃些蔬菜和水果",{"2":{"963":1}}],["多少有点底气",{"2":{"936":1}}],["多少次",{"2":{"314":1}}],["多租户一键换肤的绝对基石",{"2":{"929":1}}],["多样性已经是一个公认的优势",{"2":{"915":1}}],["多样性红利",{"0":{"915":1}}],["多强调产出",{"2":{"909":1}}],["多写",{"2":{"909":1}}],["多说",{"2":{"909":1}}],["多思考",{"2":{"909":1}}],["多读点书",{"2":{"941":1}}],["多读",{"2":{"909":1}}],["多读书",{"2":{"909":1}}],["多听",{"2":{"909":1}}],["多与别人沟通",{"2":{"909":1}}],["多轮对话测试",{"2":{"881":1}}],["多轮对话与文档分析稳定",{"2":{"512":1}}],["多轮对话与代码能力",{"2":{"512":1}}],["多平台适配",{"2":{"895":1}}],["多平台运行",{"2":{"886":1}}],["多平台集成测试套件",{"2":{"881":1}}],["多平台",{"2":{"881":1}}],["多平台测试套件",{"2":{"880":1}}],["多部分内容",{"2":{"856":1}}],["多提供商切换",{"2":{"842":1}}],["多层安全防御",{"2":{"786":1}}],["多项式贝塞尔曲线计算",{"2":{"762":1}}],["多阶段编译管道",{"2":{"741":1}}],["多视口相机",{"2":{"734":1}}],["多轴平行",{"2":{"706":1}}],["多种策略",{"2":{"786":1}}],["多种浏览器连接方式",{"2":{"786":1}}],["多种入口",{"2":{"736":1}}],["多种交互类型",{"2":{"706":1}}],["多种可能性",{"2":{"250":1}}],["多格式输出",{"2":{"702":1}}],["多格式文件解析",{"2":{"512":1,"522":1}}],["多行",{"2":{"677":1}}],["多边形偏移",{"2":{"748":1}}],["多边形轴",{"2":{"706":1}}],["多边形",{"2":{"677":1,"706":1}}],["多文件读写全自动",{"2":{"568":1}}],["多文件重构",{"2":{"565":1}}],["多文件规划",{"2":{"565":1}}],["多文件上下文感知补全",{"2":{"565":1}}],["多文件",{"2":{"564":1}}],["多文件对比摘要等重度阅读场景",{"2":{"522":1}}],["多文件对比",{"2":{"512":1,"522":1}}],["多维如位置",{"2":{"770":1}}],["多维数据存储",{"2":{"706":1}}],["多维指标体系设计",{"2":{"550":1}}],["多维信源抓取",{"2":{"491":1}}],["多次复用",{"2":{"583":1}}],["多次修正或出现异常",{"2":{"537":1}}],["多次享用",{"2":{"57":1}}],["多智能体协作",{"2":{"592":1}}],["多智能体编排",{"0":{"535":1}}],["多智能体系统通过",{"2":{"415":1}}],["多智能体系统",{"0":{"415":1},"1":{"416":1},"2":{"415":1,"438":1}}],["多模型聚合路由",{"2":{"523":1}}],["多模型可选",{"2":{"515":1}}],["多模态应用",{"2":{"843":1}}],["多模态应用开发",{"2":{"512":1}}],["多模态覆盖广",{"2":{"523":1}}],["多模态视觉",{"2":{"522":1}}],["多模态分析",{"2":{"521":1}}],["多模态支持完善",{"2":{"519":1}}],["多模态图文生成",{"2":{"512":1}}],["多模态内容分析",{"2":{"511":1}}],["多模态能力",{"2":{"510":1}}],["多模态表达",{"2":{"494":1}}],["多模态",{"0":{"418":1},"2":{"418":1,"511":1,"512":3,"522":2,"523":2}}],["多模态感知",{"2":{"403":1}}],["多人协作时的实时状态同步",{"2":{"816":1}}],["多人协作",{"2":{"515":1}}],["多人协同开发时",{"2":{"297":1}}],["多源知识融合",{"2":{"515":1}}],["多源导入",{"2":{"515":1}}],["多源资料导入",{"2":{"515":1}}],["多语言完整项目",{"2":{"562":1}}],["多语言翻译与润色",{"2":{"515":1}}],["多语言沟通",{"2":{"510":1}}],["多数人可以从",{"2":{"459":1}}],["多端动画一致性交付的团队",{"2":{"756":1}}],["多端一致渲染",{"2":{"755":1}}],["多端复用的",{"2":{"344":1}}],["多端复用型大中型产品",{"2":{"342":1}}],["多端数据聚合",{"2":{"342":1}}],["多稳的真正基石",{"2":{"303":1}}],["多个",{"2":{"438":1,"472":1}}],["多个实例并行出发",{"2":{"416":1}}],["多个研究员可以同时在不同领域搜集数据",{"2":{"415":1}}],["多个子智能体可以并行运行",{"2":{"415":1}}],["多个子应用的加载可能影响首屏性能",{"2":{"292":1}}],["多个组件共享一份基础缓存但各自",{"2":{"110":1}}],["多重泛型等高阶用法",{"2":{"271":1}}],["多重约束示例",{"2":{"267":1}}],["多重约束允许泛型参数同时满足多个约束条件",{"2":{"267":1}}],["多重约束",{"0":{"267":1},"2":{"267":1,"270":1}}],["多处复用",{"2":{"270":1}}],["多选一",{"2":{"263":1}}],["多团队协作",{"2":{"191":1}}],["多余判断",{"2":{"187":1}}],["多余变量",{"2":{"187":1}}],["多余的变量",{"2":{"186":1}}],["多余实体",{"2":{"185":1,"191":1,"197":1,"200":1}}],["多余依赖",{"2":{"182":1}}],["多长时间内被认为是",{"2":{"104":1}}],["订单上下文中的",{"2":{"281":1}}],["订单上下文",{"2":{"280":2}}],["订单计算服务",{"2":{"278":1}}],["订单聚合中的",{"2":{"278":1}}],["订单聚合",{"2":{"278":1}}],["订单",{"2":{"278":1,"291":1}}],["订单模块",{"2":{"275":1}}],["订单同步",{"2":{"142":1}}],["订单状态变更通知",{"2":{"143":1}}],["订单状态变更",{"2":{"132":1}}],["订单完成",{"2":{"131":1}}],["订单管理",{"2":{"30":1}}],["订阅消息",{"2":{"858":1}}],["订阅+广告",{"2":{"354":1}}],["订阅制先行",{"2":{"354":1}}],["订阅模式",{"2":{"286":1}}],["订阅任务流事件",{"2":{"175":1,"178":1}}],["订阅",{"2":{"104":1,"565":2,"568":1}}],["切忌混淆两者的定位",{"2":{"932":1}}],["切入公式",{"2":{"465":1}}],["切入场景",{"2":{"465":1}}],["切入点不应是盲目堆砌前沿技术栈",{"2":{"377":1}}],["切图仔",{"2":{"466":1}}],["切图",{"2":{"448":1}}],["切换到产品经理的上帝视角",{"2":{"373":1}}],["切换用户时使用缓存数据实现即时显示",{"2":{"90":1}}],["切勿立即重试",{"2":{"171":1}}],["切",{"2":{"112":1}}],["切断了这种深度学习的路径",{"2":{"531":1}}],["切断",{"2":{"104":1,"387":1}}],["窗口重新聚焦",{"2":{"103":1}}],["还需要进一步实验下去",{"2":{"965":1}}],["还需要解决",{"2":{"433":1}}],["还有些以业余娱乐的方式观察发现来推动",{"2":{"958":1}}],["还有很多发现正等待着被发现",{"2":{"362":1}}],["还想在为数不多的业余时间推动",{"2":{"950":1}}],["还通过啃一些跨专业的书来学习",{"2":{"936":1}}],["还已经成为目前顶级",{"2":{"934":1}}],["还增加了运行时的解析成本",{"2":{"933":1}}],["还伴随着传播过程中的信息失真",{"2":{"620":1}}],["还不提高我的收入吗",{"2":{"612":1}}],["还不承认我是个人才吗",{"2":{"612":1}}],["还原",{"2":{"609":1}}],["还懂得领导",{"2":{"542":1}}],["还被夸",{"2":{"494":1}}],["还可包含配套文档",{"2":{"586":1}}],["还可能瞬间激发消费者的损失厌恶心理",{"2":{"392":1}}],["还可以使用",{"2":{"310":1}}],["还得我手动切回去",{"2":{"370":1}}],["还要",{"2":{"928":1}}],["还要考虑数据如何回流",{"2":{"556":1}}],["还要等多久",{"2":{"366":1}}],["还要求大语言模型",{"2":{"349":1}}],["还支持",{"2":{"345":1}}],["还是客观环境不允许呢",{"2":{"942":1}}],["还是交流产品心得",{"2":{"905":1}}],["还是警惕",{"2":{"615":1}}],["还是深谙",{"2":{"552":1}}],["还是多模态理解",{"2":{"519":1}}],["还是以最终价值交付为导向",{"2":{"466":1}}],["还是真正嵌入工作流",{"2":{"462":1}}],["还是能独立拆解目标",{"2":{"421":1}}],["还是结合外部非知识工具",{"2":{"417":1}}],["还是坚持写技术博客",{"2":{"388":1}}],["还是因减弱果",{"2":{"385":1}}],["还是因为它在特定高并发场景下更稳健",{"2":{"533":1}}],["还是因为它的响应速度快得不可思议",{"2":{"372":1}}],["还是因为文案恰好击中了我的软肋",{"2":{"372":1}}],["还是单纯的互利机制",{"2":{"373":1}}],["还是帮你杀了时间",{"2":{"373":1}}],["还是顶层的自我实现",{"2":{"373":1}}],["还是低估了操作门槛",{"2":{"369":1}}],["还是低频痒点",{"2":{"365":1}}],["还是学习成本太高",{"2":{"366":1}}],["还是导航不清晰",{"2":{"366":1}}],["还是",{"2":{"363":1,"366":1,"555":1}}],["还是静态html",{"2":{"345":1}}],["还是日益兴起的",{"2":{"316":1}}],["还是长时间挂起请求的长轮询",{"2":{"115":1}}],["还为现代构建工具",{"2":{"307":1}}],["还能活的不错",{"2":{"954":1}}],["还能将研发团队与设计团队的协作效率提升到一个新的水平",{"2":{"929":1}}],["还能作为",{"2":{"928":1}}],["还能在代码中直接引用变量",{"2":{"929":1}}],["还能在正确时机唤醒正确规则",{"2":{"578":1}}],["还能在浏览器全局作用域下使用",{"2":{"306":1}}],["还能避免不必要的失误",{"2":{"396":1}}],["还能算得过账",{"2":{"363":1}}],["还能获得同样的类型安全保障",{"2":{"263":1}}],["还提供了一些高级特性",{"2":{"225":1}}],["还在处理",{"2":{"152":1,"153":1}}],["还会造成并发连接数瓶颈",{"2":{"143":1}}],["还会使",{"2":{"138":1}}],["还没加载完",{"2":{"101":1}}],["还将",{"2":{"85":1}}],["返回工具调用",{"2":{"863":1}}],["返回实现了",{"2":{"857":1}}],["返回结果",{"2":{"853":1}}],["返回惰性结果对象",{"2":{"844":1}}],["返回重试间隔",{"2":{"820":1}}],["返回插值结果",{"2":{"770":1}}],["返回当前帧属性值",{"2":{"770":1}}],["返回计算结果",{"2":{"769":1}}],["返回计算结果作为属性值",{"2":{"769":1}}],["返回求值结果",{"2":{"655":1}}],["返回元信息",{"2":{"576":1}}],["返回不同的入口文件",{"2":{"335":1}}],["返回副本",{"2":{"261":1}}],["返回与输入相同类型的值",{"2":{"258":1}}],["返回值类型为",{"2":{"258":1}}],["返回值位置",{"2":{"254":1}}],["返回值包含",{"2":{"196":1}}],["返回值",{"2":{"195":1,"259":1}}],["返回值控制是否重试",{"2":{"169":1,"175":1}}],["返回取消订阅函数",{"2":{"175":1}}],["返回数字",{"2":{"175":1}}],["返回等待时间",{"2":{"169":1}}],["返回一个",{"2":{"166":1}}],["返回响应",{"2":{"151":1}}],["返回",{"2":{"126":1,"168":1,"178":1,"652":1,"801":1}}],["返回的结构化状态实时渲染出最合适的交互组件",{"2":{"543":1}}],["返回的",{"2":{"108":1,"166":1}}],["返回的数据作为参数",{"2":{"101":1}}],["返回给浏览器",{"2":{"39":1}}],["常规业务系统",{"2":{"928":1}}],["常规短连接请求",{"2":{"155":1}}],["常陷入",{"2":{"928":1}}],["常常面临全局污染",{"2":{"920":1}}],["常常就藏在这些",{"2":{"908":1}}],["常常被视为实时通信的银弹",{"2":{"145":1}}],["常量定义",{"2":{"792":1}}],["常量定义与配置管理",{"2":{"274":1}}],["常量",{"2":{"274":1,"330":2,"762":1}}],["常量层",{"2":{"274":1}}],["常用图表",{"2":{"706":1}}],["常用文档模板",{"2":{"436":1}}],["常用插件完善",{"2":{"341":1}}],["常用于构建后台管理系统",{"2":{"340":2}}],["常用于数据库模型",{"2":{"270":1}}],["常用于瀑布流请求",{"2":{"101":1}}],["常用",{"0":{"204":1},"2":{"313":1}}],["常见测试错误清单",{"2":{"890":1}}],["常见的有",{"2":{"909":1}}],["常见的命令场景",{"2":{"583":1}}],["常见的原子能力还包括",{"2":{"414":1}}],["常见误区",{"2":{"464":1}}],["常见失败模式",{"2":{"445":1}}],["常见原因",{"2":{"59":1}}],["常见落地陷阱与解决方案",{"0":{"59":1}}],["节省下来的时间也就多了",{"2":{"948":1}}],["节省请求",{"2":{"100":1}}],["节流函数",{"2":{"706":1}}],["节奏设计‌",{"2":{"505":1}}],["节点自动注入一个全局唯一的自定义属性",{"2":{"924":1}}],["节点和",{"2":{"924":1}}],["节点开销",{"2":{"782":1}}],["节点标识",{"2":{"748":1}}],["节点类型",{"2":{"748":1}}],["节点契约",{"2":{"748":1}}],["节点图",{"2":{"741":1}}],["节点之间通过引用形成有向无环图",{"2":{"741":1}}],["节点初始化",{"2":{"736":1}}],["节点核心",{"2":{"736":1}}],["节点系统",{"2":{"736":1}}],["节点系统统一入口",{"2":{"734":1}}],["节点管理器",{"2":{"734":1}}],["节点工具",{"2":{"734":1}}],["节点访问器",{"2":{"734":1}}],["节点着色器编译链",{"2":{"736":1}}],["节点着色系统",{"0":{"741":1},"2":{"734":1}}],["节点着色层",{"2":{"732":1,"733":2}}],["节点材质",{"2":{"734":1}}],["节点加载器",{"2":{"734":1}}],["节点库入口",{"2":{"734":1}}],["节点基类",{"2":{"733":1,"734":1}}],["节点基础契约",{"2":{"663":1}}],["节点支持变换层级继承",{"2":{"732":1}}],["节点变换与嵌套",{"2":{"670":1}}],["节点形成关联",{"2":{"629":1}}],["节点复盘",{"2":{"431":1}}],["节点与",{"2":{"143":1}}],["节点间的状态同步变得极为复杂",{"2":{"138":1}}],["节点从队列中取出任务",{"2":{"138":1}}],["节点解析重试",{"2":{"113":1}}],["节点",{"2":{"57":1,"142":1,"143":1,"649":1,"653":1,"655":1,"706":1}}],["成绩",{"2":{"655":2}}],["成长路径",{"2":{"464":1,"617":1}}],["成熟度最高",{"2":{"562":1}}],["成熟的",{"2":{"550":1}}],["成熟的系统往往采用混合模式",{"2":{"433":1}}],["成熟稳定",{"2":{"287":1}}],["成功验收标准",{"2":{"451":1}}],["成功构建了一个支持长效运行的基础设施",{"2":{"419":1}}],["成功的关键因素之一",{"2":{"304":1}}],["成功分支",{"2":{"246":1}}],["成功",{"2":{"149":1,"832":1}}],["成功后",{"2":{"100":1}}],["成为了笔者最终选择的组合工具",{"2":{"947":1}}],["成为了",{"2":{"912":1}}],["成为了低成本构建高可用",{"2":{"477":1}}],["成为了架构师经过深思熟虑后的首选方案",{"2":{"145":1}}],["成为解决长时运行",{"2":{"419":1}}],["成为可能",{"2":{"307":1,"557":1,"902":1}}],["成为现代",{"2":{"298":1}}],["成为现代前端开发的标配",{"2":{"294":1}}],["成为构建现代应用的核心原则",{"2":{"293":1}}],["成为",{"2":{"140":1,"466":1}}],["成本越高",{"2":{"551":1}}],["成本敏感但有一定预算",{"2":{"523":1}}],["成本预算",{"2":{"519":1}}],["成本估算",{"2":{"374":1}}],["成本较高",{"2":{"93":1}}],["成本低",{"2":{"32":1}}],["成本高",{"2":{"15":1}}],["失去的时候却追悔莫及",{"2":{"936":1}}],["失去了",{"2":{"933":1}}],["失败后我们又不太容易原谅自己",{"2":{"958":1}}],["失败分支",{"2":{"246":1}}],["失败或处理中",{"2":{"148":1}}],["失败",{"2":{"100":1,"108":1}}],["失控的状态蔓延",{"2":{"1":1}}],["乐观地修改缓存中的数据",{"2":{"108":1}}],["乐观更新缓存",{"2":{"108":1}}],["乐观",{"0":{"100":1,"108":1}}],["供用户便捷调用",{"2":{"511":1}}],["供",{"2":{"470":1}}],["供另一个更高级的",{"2":{"411":1}}],["供应",{"2":{"344":1}}],["供外部手动触发缓存更新",{"2":{"99":1}}],["供构建工具拉取数据",{"2":{"21":1}}],["暴露所有公共方法",{"2":{"761":1}}],["暴露给组件和图表使用",{"2":{"706":1}}],["暴露外部数据与能力",{"2":{"439":1}}],["暴露的模块",{"2":{"288":1}}],["暴露",{"2":{"99":1,"704":1,"854":1}}],["|glslbuilder",{"2":{"733":1}}],["|combo",{"2":{"653":1}}],["|crud",{"2":{"653":1}}],["|store",{"2":{"653":5}}],["|service",{"2":{"653":1}}],["|formitem|",{"2":{"653":1}}],["|form",{"2":{"653":1}}],["|",{"2":{"99":1,"149":2,"152":1,"153":2,"179":1,"227":3,"229":6,"230":2,"231":5,"233":4,"234":9,"238":2,"239":2,"242":5,"243":6,"244":14,"246":2,"248":2,"249":6,"250":6,"259":2,"261":2,"262":3,"263":1,"281":2,"289":1,"318":2,"451":30,"482":2,"486":1,"489":1,"646":341,"649":29,"650":41,"652":83,"653":47,"654":50,"655":61,"656":96,"661":5,"662":4,"663":2,"676":170,"679":38,"680":23,"682":110,"683":95,"684":105,"685":39,"686":99,"692":18,"693":1,"705":175,"708":43,"709":21,"711":62,"712":28,"713":65,"714":82,"715":9,"719":12,"733":406,"736":13,"737":19,"739":72,"740":51,"741":52,"742":60,"743":44,"748":9,"749":2,"761":351,"764":20,"765":19,"767":81,"768":138,"769":124,"770":118,"771":100,"776":16,"777":17,"801":1,"806":18,"832":3,"839":3,"848":344,"853":11,"856":131,"857":86,"858":97,"859":86,"866":7,"880":304,"883":26,"884":8,"886":89,"887":134,"888":96,"889":132,"890":106,"895":5,"928":83}}],["||",{"2":{"28":1,"166":2,"171":1,"172":1,"173":1,"175":2,"194":1,"281":2,"315":2,"484":1,"489":1}}],["kwargs",{"2":{"806":3}}],["ktx2",{"2":{"734":1}}],["k线",{"2":{"701":1}}],["kaleidoscope",{"2":{"677":1,"679":1}}],["kafka",{"2":{"138":1}}],["konvajs",{"2":{"695":1}}],["konvaeventobject",{"2":{"692":2}}],["konvaeventlistener",{"2":{"692":1}}],["konva",{"2":{"670":2,"671":1,"675":2,"676":1,"677":3,"679":4,"680":1,"682":1,"684":1,"688":1,"693":3,"695":3,"696":5}}],["kubernetes",{"2":{"573":1}}],["k8s",{"2":{"555":1}}],["kv",{"2":{"551":1}}],["kimi",{"2":{"510":2,"512":3,"519":1,"522":2,"523":1}}],["kindle",{"2":{"947":1}}],["kind",{"2":{"230":5,"231":1,"232":1}}],["kpi",{"2":{"387":1,"632":1}}],["know",{"2":{"351":1}}],["k",{"2":{"262":4,"263":4,"268":4,"270":1,"372":1,"706":1}}],["k2",{"2":{"242":1}}],["k12",{"0":{"492":1},"2":{"492":3,"493":1}}],["k1",{"2":{"242":1}}],["kb",{"2":{"97":1,"110":2}}],["kebab",{"2":{"330":1,"442":1,"450":1}}],["kevin",{"2":{"304":1}}],["keep",{"2":{"115":1,"161":1,"163":2,"164":1,"177":1}}],["keeps",{"2":{"97":1}}],["key>",{"2":{"857":1}}],["keyframes",{"2":{"776":1,"934":1}}],["keyframetrack",{"2":{"734":1,"743":2}}],["keyof",{"0":{"233":1,"239":1,"242":1,"268":1},"2":{"233":2,"239":3,"242":20,"250":6,"262":1,"263":2,"268":5,"270":4,"271":1}}],["key",{"2":{"28":1,"72":1,"97":3,"99":1,"101":1,"103":1,"104":7,"110":5,"112":1,"233":1,"239":3,"242":2,"250":4,"262":1,"263":1,"268":3,"289":1,"414":1,"481":2,"520":1,"523":2,"568":1,"662":1,"683":1,"712":1,"719":2,"768":3,"776":2,"792":2,"799":2,"806":2,"857":1}}],["key=your",{"2":{"481":1}}],["key=你的anon密钥",{"2":{"28":1}}],["key=",{"2":{"27":1,"28":1,"288":1}}],["回到公司上班的时候就觉得特别爽",{"2":{"956":1}}],["回答澄清问题",{"2":{"900":1}}],["回滚流程",{"2":{"583":1}}],["回滚策略",{"2":{"583":1}}],["回滚机制足够健壮",{"2":{"538":1}}],["回滚数据",{"2":{"108":1}}],["回雪",{"2":{"508":1}}],["回雪流风素月斜",{"2":{"508":1}}],["回复时按照以下格式",{"2":{"504":1}}],["回复规范",{"2":{"504":1}}],["回复",{"2":{"494":1}}],["回顾我们自己在某个领域或专题进行深度研究的经历",{"2":{"468":1}}],["回顾全文",{"2":{"180":1}}],["回退之前的",{"2":{"451":1}}],["回路",{"2":{"431":1}}],["回路也不是瞬间闭合的",{"2":{"388":1}}],["回路也不是瞬间闭合",{"2":{"388":1}}],["回路分为两种",{"2":{"386":1}}],["回归阅读的本质",{"2":{"613":1}}],["回归",{"2":{"556":1}}],["回归日常的高痛点场景寻找切入点",{"2":{"465":1}}],["回归平衡",{"2":{"387":1}}],["回归标准",{"2":{"272":1}}],["回归问题的本质与初心",{"2":{"201":1}}],["回给客户端",{"2":{"153":1}}],["回望这场从",{"2":{"144":1}}],["回来时总是看到最新数据",{"2":{"97":1}}],["回调系统",{"2":{"851":1}}],["回调等",{"2":{"839":1}}],["回调支持在",{"2":{"685":1}}],["回调可以通过返回值控制重试间隔",{"2":{"171":1}}],["回调的自动化",{"0":{"131":1}}],["回调地狱",{"2":{"7":1}}],["回调",{"2":{"7":1,"132":1}}],["回调契约",{"2":{"7":1}}],["轮询优化策略",{"2":{"145":1}}],["轮询因其无状态",{"2":{"145":1}}],["轮询在整个",{"2":{"145":1}}],["轮询在",{"2":{"144":1}}],["轮询查询是更合理的架构",{"2":{"143":1}}],["轮询的主场",{"2":{"143":1}}],["轮询的讨论",{"0":{"135":1},"1":{"136":1,"137":1,"138":1,"139":1,"140":1}}],["轮询凭借其无状态",{"2":{"140":1}}],["轮询不仅没有消失",{"2":{"135":1}}],["轮询是上古时代的落后技术",{"2":{"135":1}}],["轮询是一种最朴素的实时通信方案",{"2":{"135":1}}],["轮询",{"2":{"97":1,"114":1,"142":1,"145":1}}],["样式抽象为配置对象",{"2":{"928":1}}],["样式写在模板里",{"2":{"928":1}}],["样式逻辑和业务逻辑高度内聚在一个",{"2":{"927":1}}],["样式工具",{"2":{"926":1}}],["样式拆分为最小",{"2":{"925":1}}],["样式还是被父组件覆盖了",{"2":{"924":1}}],["样式仅作用于当前组件的",{"2":{"924":1}}],["样式直接写在",{"2":{"922":1}}],["样式直接编写在",{"2":{"922":1}}],["样式数据基类",{"2":{"762":1}}],["样式配置",{"2":{"709":1}}],["样式等",{"2":{"706":1}}],["样式",{"2":{"647":2,"650":1}}],["样式系统",{"2":{"645":1,"647":1}}],["样式文件",{"2":{"643":1}}],["样式与逻辑解耦度",{"2":{"928":1}}],["样式与",{"0":{"340":1}}],["样式表",{"2":{"338":1}}],["样式隔离困难以及维护成本高等问题",{"2":{"922":1}}],["样式隔离策略",{"2":{"291":1}}],["样式隔离",{"2":{"286":1,"923":1}}],["样式层",{"2":{"274":1}}],["样式方案的选择本质上是对开发效率",{"2":{"928":1}}],["样式方案",{"2":{"23":1,"642":1}}],["样板代码很多",{"2":{"97":1}}],["臃肿的许愿池",{"2":{"366":1}}],["臃肿",{"2":{"97":1,"901":1}}],["简化为",{"2":{"909":1}}],["简化入口",{"2":{"706":1}}],["简化类型",{"2":{"706":1}}],["简化后的流式处理逻辑",{"2":{"488":1}}],["简化外部调用者的导入路径",{"2":{"312":1}}],["简称",{"2":{"276":1}}],["简陋设计",{"2":{"200":1,"201":1}}],["简陋",{"2":{"181":1,"200":1}}],["简洁接口",{"0":{"197":1}}],["简洁架构",{"0":{"191":1}}],["简洁本质",{"2":{"188":1}}],["简洁代码",{"0":{"188":1}}],["简洁是",{"2":{"181":1}}],["简洁",{"2":{"181":1,"200":2,"341":2,"518":1}}],["简洁性",{"2":{"181":1}}],["简",{"2":{"181":2}}],["简而言之",{"2":{"159":1}}],["简单列表",{"2":{"647":1}}],["简单对话",{"2":{"482":1}}],["简单",{"2":{"403":1}}],["简单数据",{"2":{"403":1}}],["简单来说",{"2":{"402":1}}],["简单高效",{"2":{"308":1}}],["简单集成第三方系统",{"2":{"287":1}}],["简单优先的排查流程可节省80",{"2":{"199":1}}],["简单优先",{"2":{"199":1}}],["简单原因",{"0":{"198":1},"1":{"199":1},"2":{"198":1}}],["简单架构",{"0":{"189":1},"1":{"190":1,"191":1}}],["简单示例",{"2":{"103":1}}],["简单示例如下",{"2":{"97":1}}],["简单易用",{"2":{"97":1}}],["简单的任务单智能体就能搞定",{"2":{"467":1}}],["简单的挂起等待即可",{"2":{"142":1}}],["简单的",{"2":{"93":1,"155":1}}],["简介与核心流程说明",{"0":{"97":1,"103":1}}],["向一些有经验的人请教方法",{"2":{"962":1}}],["向这几波人咨询更能习得比较正向的建议或小技巧",{"2":{"940":1}}],["向有专业或有经验的人咨询",{"0":{"940":1}}],["向书本上的健康标准和知识找",{"2":{"939":1}}],["向专业或有经验的人咨询",{"2":{"939":1}}],["向内思变",{"2":{"906":1,"935":1}}],["向内求索",{"0":{"626":1}}],["向外部暴露统一的",{"2":{"761":1}}],["向上冒泡至",{"2":{"684":1}}],["向上查找数据",{"2":{"653":1}}],["向后兼容的旧版",{"2":{"706":1}}],["向后兼容",{"2":{"706":1}}],["向后兼容层",{"2":{"647":1}}],["向后端或",{"2":{"95":1}}],["向量",{"2":{"734":3}}],["向量识别",{"2":{"586":1}}],["向量化",{"2":{"546":1}}],["向量检索",{"2":{"410":1}}],["向用户建议保留方案",{"2":{"451":1}}],["向模型展示带有正面和负面反馈的历史输出",{"2":{"426":1}}],["向具备商业格局和深邃人性的",{"2":{"400":1}}],["向下兼容的",{"2":{"331":1}}],["向下兼容",{"2":{"331":1}}],["向",{"2":{"309":1,"592":1}}],["向服务器发送请求",{"2":{"151":1}}],["向子组件下发契约",{"2":{"7":1}}],["体重又获得了",{"2":{"963":1}}],["体重维持不变后基本不晓得怎么搞了",{"2":{"962":1}}],["体重再次获得了",{"2":{"962":1}}],["体重也因为周末饮食不当陆续出现反弹",{"2":{"961":1}}],["体重获得了",{"2":{"961":1}}],["体重降下去对工作",{"2":{"959":1}}],["体型",{"2":{"960":1}}],["体脂秤一台",{"2":{"960":1}}],["体脂秤具有称",{"2":{"957":1}}],["体育一道",{"2":{"941":1,"959":1}}],["体育之研究",{"2":{"941":1,"959":1}}],["体者",{"2":{"941":1,"959":1}}],["体系",{"2":{"923":1}}],["体",{"2":{"830":1}}],["体纹理",{"2":{"734":1}}],["体现",{"2":{"270":1,"570":1}}],["体验下宋朝的赌场",{"2":{"917":1}}],["体验特性",{"2":{"845":1}}],["体验最流畅",{"2":{"568":1}}],["体验最好",{"2":{"94":1}}],["体验页面",{"2":{"523":1}}],["体验但中文本地化更优",{"2":{"515":1}}],["体验设计师",{"2":{"400":1}}],["体验极差",{"2":{"136":1}}],["体验",{"2":{"110":1,"342":1,"530":1,"559":2}}],["体积与组件数量无关",{"2":{"926":1}}],["体积小",{"2":{"925":1}}],["体积相对较大",{"2":{"342":1}}],["体积和初期学习成本",{"2":{"111":1}}],["体积较大",{"2":{"110":1}}],["体积因此大幅减少",{"2":{"73":1}}],["体积更小",{"2":{"72":1,"778":1}}],["才有可能在这个社会上走的更远",{"2":{"938":1}}],["才算真正理解",{"2":{"610":1}}],["才算真正拥有了",{"2":{"389":1}}],["才咏湘妃竹",{"2":{"507":2}}],["才是决定一个",{"2":{"496":1}}],["才是决定一个项目能走多远",{"2":{"303":1}}],["才是我们在未来应当持续修炼的内功",{"2":{"495":1}}],["才会读取",{"2":{"443":1}}],["才会读取该技能的完整指令正文",{"2":{"443":1}}],["才会发起网络请求",{"2":{"107":1}}],["才开始进入",{"2":{"378":1}}],["才真正从理想变成了现实",{"2":{"326":1}}],["才需要显式指定泛型参数",{"2":{"263":1}}],["才需要稍微等一下",{"2":{"153":1}}],["才用",{"2":{"181":1}}],["才使用",{"2":{"94":1}}],["才能找到当下最适合的最优解",{"2":{"928":1}}],["才能找准系统变化的源头",{"2":{"384":1}}],["才能条理清晰地理解世界",{"2":{"609":1}}],["才能真正形成自己的思想观念",{"2":{"609":1}}],["才能真正将思维方法内化",{"2":{"608":1}}],["才能在信息时代中获得价值",{"2":{"626":1}}],["才能在未知中偶遇奇迹",{"2":{"598":1}}],["才能在架构层面做出正确决策",{"2":{"85":1}}],["才能迎来真正的价值膨胀",{"2":{"552":1}}],["才能让",{"2":{"509":1}}],["才能进入下一阶段",{"2":{"464":1}}],["才能创造增量",{"2":{"462":1}}],["才能准确地将自然语言目标转换为子任务",{"2":{"425":1}}],["才能保持竞争力",{"2":{"400":1}}],["才能定位产品的核心功能和价值",{"2":{"396":1}}],["才能触发它",{"2":{"110":1}}],["才能确保首屏内容完整",{"2":{"69":1}}],["才能输出高质量代码",{"2":{"1":1}}],["足够的空间去创造和提效",{"2":{"534":1}}],["足够轻巧",{"2":{"124":1}}],["足够多的流式数据再统一发给客户端",{"2":{"119":1}}],["足够",{"2":{"93":1}}],["足够健壮",{"2":{"2":1}}],["学会接受并尝试别人的建议",{"2":{"963":1}}],["学会如何向",{"2":{"557":1}}],["学着梳理出一些健康原则",{"2":{"941":1}}],["学着向外体验了",{"2":{"906":1}}],["学科中",{"2":{"493":1}}],["学生",{"2":{"492":1}}],["学生提供一个",{"2":{"492":1}}],["学生成绩查询工具",{"2":{"190":1}}],["学术场景压力测试用例",{"2":{"881":1}}],["学术模式",{"2":{"518":1}}],["学术调研",{"2":{"518":1}}],["学术研究",{"2":{"512":1,"522":1}}],["学术论文精读",{"2":{"522":1}}],["学术论文",{"2":{"512":1}}],["学术",{"2":{"406":1,"518":1}}],["学术级的严谨性",{"2":{"349":1}}],["学习健康标准和知识",{"0":{"941":1}}],["学习和娱乐勤快点",{"2":{"938":1}}],["学习和记忆类名需要一定时间html",{"2":{"925":1}}],["学习方法论",{"2":{"918":1}}],["学习数学基础知识与思维",{"2":{"906":1}}],["学习后自主调用",{"2":{"883":1}}],["学习后自主触发",{"2":{"880":1}}],["学习笔记",{"2":{"628":1}}],["学习参考与演示展示",{"2":{"561":1}}],["学习+创作",{"2":{"515":1}}],["学习与成长",{"0":{"603":1}}],["学习与创作智能体",{"2":{"515":2}}],["学习与内容创作工作站",{"0":{"513":1},"1":{"514":1,"515":1}}],["学习指南",{"2":{"515":2}}],["学习利器",{"2":{"515":1}}],["学习神器",{"2":{"515":1}}],["学习策略",{"2":{"474":1}}],["学习者将精力投入理解内化",{"2":{"406":1}}],["学习资源与社区",{"0":{"346":1}}],["学习成本高",{"2":{"287":1}}],["学习成本增加",{"2":{"192":1}}],["学习曲线较陡峭",{"2":{"342":1}}],["学习曲线陡峭",{"2":{"283":1}}],["学习曲线",{"2":{"110":1,"341":1,"927":1}}],["学习",{"2":{"93":1,"414":2,"514":1,"515":1}}],["学到的五件事",{"0":{"66":1}}],["微信读书这个产品在发展的过程中",{"2":{"948":1}}],["微信阅读",{"2":{"947":2}}],["微信",{"2":{"905":1}}],["微信小程序",{"2":{"562":1}}],["微信网页版",{"2":{"128":1}}],["微观经济学家",{"2":{"400":1}}],["微观情绪标注",{"2":{"372":1}}],["微小不爽",{"2":{"370":1}}],["微服务",{"2":{"542":1}}],["微服务通信与编排",{"2":{"344":1}}],["微服务架构下",{"2":{"93":1}}],["微前端不是目的",{"2":{"292":1}}],["微前端架构才能发挥其最大的价值",{"2":{"292":1}}],["微前端架构则能够带来显著的收益",{"2":{"292":1}}],["微前端架构也带来了一些挑战",{"2":{"292":1}}],["微前端架构是前端模块化发展的必然产物",{"2":{"292":1}}],["微前端小结",{"0":{"292":1}}],["微前端最佳实践",{"0":{"291":1}}],["微前端项目目录结构",{"0":{"290":1}}],["微前端通信机制",{"0":{"289":1}}],["微前端实现方案对比",{"0":{"287":1}}],["微前端的模块化设计原则",{"0":{"286":1}}],["微前端的核心理念",{"0":{"285":1}}],["微前端借鉴了微服务的思想",{"2":{"285":1}}],["微前端是一种将前端应用拆分为多个独立",{"2":{"284":1}}],["微前端与模块化",{"0":{"284":1},"1":{"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1}}],["微软开源了",{"2":{"167":1}}],["微调边界",{"2":{"2":1}}],["保障极速迭代",{"2":{"928":1}}],["保障极其昂贵的算力资源不被浪费",{"2":{"551":1}}],["保障数据安全",{"2":{"568":1}}],["保障数据不出域",{"2":{"568":1}}],["保证每天步数在",{"2":{"963":1,"964":1}}],["保证每日步数在",{"2":{"962":1}}],["保证每日步数在5000",{"2":{"961":1}}],["保证异步消息处理的串行性",{"2":{"858":1}}],["保证全局单例",{"2":{"679":1}}],["保证可追踪",{"2":{"653":1}}],["保证了整个项目视觉上的一致性",{"2":{"925":1}}],["保证了所有页面风格统一",{"2":{"639":1}}],["保证了变式题和趣味延伸的素材新鲜度",{"2":{"494":1}}],["保证了输出内容的结构化与教育深度",{"2":{"494":1}}],["保证方向不偏",{"2":{"433":1}}],["保证",{"2":{"342":1,"926":1,"961":1}}],["保证哪怕重试无数次",{"2":{"149":1}}],["保存网络请求用于后续分析",{"2":{"799":1}}],["保存请求供分析",{"2":{"792":1}}],["保存起来",{"2":{"489":1}}],["保存编译信息以加速后续编译",{"2":{"203":1}}],["保存变更前的快照",{"2":{"108":1}}],["保活",{"2":{"172":1}}],["保留模式图形树",{"2":{"672":1}}],["保留模式",{"2":{"670":1,"673":1,"675":1}}],["保留蓝链兜底",{"2":{"518":1}}],["保留",{"2":{"203":2}}],["保留到下次处理",{"2":{"168":1}}],["保留最后一行",{"2":{"166":1}}],["保护网关不报",{"2":{"152":1}}],["保护网关的核心手段",{"2":{"142":1}}],["保护密钥",{"2":{"92":1}}],["保鲜期",{"2":{"104":1}}],["保持业余通过看书或文章",{"2":{"964":1}}],["保持健康一点的形体",{"2":{"941":1}}],["保持流水线的纯粹与高效",{"2":{"932":1}}],["保持一致",{"2":{"777":1}}],["保持主文件简洁",{"2":{"586":1}}],["保持主对话上下文的清晰与聚焦",{"2":{"438":1}}],["保持命令的通用性",{"2":{"583":1}}],["保持单一职责",{"2":{"578":1}}],["保持接口不变",{"2":{"568":1}}],["保持接口兼容性",{"2":{"523":1}}],["保持开发",{"2":{"564":1}}],["保持回复内容直接针对用户需求",{"2":{"504":1}}],["保持每个",{"2":{"451":1}}],["保持上下文窗口干净",{"2":{"445":1}}],["保持各个文件的简洁性",{"2":{"442":1}}],["保持对各种通讯频道的监听",{"2":{"419":1}}],["保持绝对的简效",{"2":{"416":1}}],["保持敏感度",{"2":{"400":1}}],["保持敏锐",{"2":{"376":1}}],["保持饥饿",{"2":{"376":1}}],["保持真诚与",{"0":{"360":1}}],["保持非共识的好奇心",{"2":{"357":1}}],["保持源码目录结构",{"2":{"203":1}}],["保持代码的简洁与优雅",{"2":{"201":1}}],["保持清醒的判断",{"2":{"201":1}}],["保持长连接",{"2":{"177":1}}],["保持良好的可解析性和通用性",{"2":{"160":1}}],["保持架构简洁",{"2":{"142":1}}],["保持界面与服务器同步",{"2":{"103":1}}],["保持最小的运行时刻面",{"2":{"66":1}}],["保持",{"2":{"1":1,"2":1,"86":1,"148":1,"770":1}}],["厨师从冰箱取出昨天熬好的高汤",{"2":{"89":1}}],["稳健防御架构",{"2":{"928":1}}],["稳定可靠",{"2":{"642":1}}],["稳定地送达线上",{"2":{"555":1}}],["稳定输出的终极杠杆",{"2":{"509":1}}],["稳定输出高质量的内容",{"2":{"494":1}}],["稳定",{"2":{"332":1}}],["稳定性",{"2":{"45":1}}],["稳住顾客",{"2":{"89":1}}],["类任务",{"2":{"883":3}}],["类工具",{"2":{"706":1}}],["类",{"2":{"515":1,"672":1,"799":2,"925":2,"933":1}}],["类别",{"2":{"411":1}}],["类名组合",{"2":{"930":1}}],["类名过长",{"2":{"930":1}}],["类名机制",{"2":{"928":1}}],["类名冲突",{"2":{"927":1}}],["类名局部化",{"2":{"923":1}}],["类名",{"2":{"330":2,"928":2}}],["类等特性结合",{"2":{"270":1}}],["类约束示例",{"2":{"269":1}}],["类约束用于限制泛型参数必须是特定类或其子类",{"2":{"269":1}}],["类约束",{"0":{"269":1},"2":{"270":1}}],["类同时满足",{"2":{"267":1}}],["类中使用不支持的方法或属性",{"2":{"264":1}}],["类实例",{"2":{"231":1}}],["类属性必须在构造函数中初始化",{"2":{"203":1}}],["类的方法",{"2":{"195":1}}],["类的第三方集成应用",{"2":{"135":1,"145":1}}],["类似于",{"2":{"713":1}}],["类似于轻量级的",{"2":{"442":1}}],["类似轻量版",{"2":{"341":1}}],["类似但更严格",{"2":{"203":1}}],["类似",{"2":{"107":1,"169":1,"345":1,"647":1,"709":1,"921":1}}],["类比拓展",{"2":{"494":1}}],["类比",{"2":{"89":1,"494":1}}],["类型提示",{"2":{"927":1}}],["类型化数组创建工具",{"2":{"762":1}}],["类型组合",{"2":{"706":1}}],["类型推导",{"2":{"741":1,"927":1}}],["类型推导正确性测试",{"2":{"677":1}}],["类型推断",{"2":{"253":1,"254":1,"258":1}}],["类型标识",{"2":{"663":1}}],["类型都遵循此基础接口",{"2":{"663":1}}],["类型声明补丁",{"2":{"647":1}}],["类型声明文件",{"2":{"203":1}}],["类型为",{"2":{"482":1}}],["类型名",{"2":{"330":1}}],["类型引用不触发实际的模块加载逻辑",{"2":{"318":1}}],["类型导入不会生成运行时代码",{"2":{"318":1}}],["类型导入",{"2":{"318":1}}],["类型导入在编译为",{"2":{"318":1}}],["类型导出",{"2":{"318":1,"647":1}}],["类型导出与导入",{"0":{"318":1}}],["类型定义文件",{"2":{"762":1}}],["类型定义",{"2":{"274":1,"275":1,"331":1,"647":2,"755":1,"828":1}}],["类型定义等基础设施代码",{"2":{"10":1}}],["类型层",{"2":{"274":1}}],["类型不符合",{"2":{"265":1}}],["类型不同",{"2":{"237":1}}],["类型或其子类型",{"2":{"265":1}}],["类型参数名不仅仅是占位符",{"2":{"263":1}}],["类型参数",{"2":{"258":1}}],["类型参数化",{"2":{"254":1}}],["类型像是一个",{"2":{"255":1}}],["类型意味着彻底放弃类型检查",{"2":{"255":1}}],["类型牺牲类型安全",{"2":{"255":1}}],["类型擦除",{"2":{"254":1}}],["类型安全是最大的保障",{"2":{"255":1}}],["类型安全",{"2":{"253":1,"266":1,"268":1,"822":1}}],["类型相同",{"2":{"237":1}}],["类型系统有助于长期维护和重构",{"2":{"822":1}}],["类型系统与模块化的深度融合",{"0":{"319":1}}],["类型系统的魅力所在",{"2":{"271":1}}],["类型系统的高阶能力",{"2":{"270":1}}],["类型系统的一个独特机制",{"2":{"234":1}}],["类型系统中的几个核心问题",{"2":{"255":1}}],["类型系统",{"2":{"250":1,"845":2}}],["类型系统和构建工具链",{"2":{"83":1}}],["类型正是解决这一问题的利器",{"2":{"232":1}}],["类型收窄全解",{"0":{"231":1}}],["类型收窄就变得自然且安全",{"2":{"230":1}}],["类型的消息中返回一个唯一的",{"2":{"486":1}}],["类型的严格校验",{"2":{"263":1}}],["类型的参数调用只有特定类型才有的方法时",{"2":{"254":1}}],["类型的对比",{"0":{"253":1}}],["类型的联合和交叉遵循分配律",{"2":{"243":1}}],["类型的联合",{"2":{"242":1}}],["类型的值同时拥有",{"2":{"239":1}}],["类型的标识",{"2":{"230":1}}],["类型的结构",{"2":{"230":1}}],["类型的",{"0":{"228":1,"235":1},"1":{"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"236":1,"237":1,"238":1,"239":1,"240":1}}],["类型是值的集合",{"2":{"227":1}}],["类型即集合",{"0":{"227":1},"2":{"227":1}}],["类型共享",{"2":{"207":1}}],["类型",{"0":{"249":1},"2":{"166":1,"203":2,"227":1,"232":1,"248":1,"253":1,"255":1,"260":1,"265":1,"418":1,"436":1,"482":1,"647":2,"661":1,"693":1,"701":1,"706":2,"709":1,"762":1,"828":1,"928":1}}],["类型检查选项",{"2":{"203":1}}],["类型检查",{"2":{"9":1,"203":1,"204":1,"254":1,"322":1,"723":1}}],["类型检查与测试套件",{"2":{"9":1}}],["真的蛮有压力的",{"2":{"950":1}}],["真的需要",{"2":{"180":1}}],["真空",{"0":{"614":1}}],["真人验证",{"2":{"375":1}}],["真好用",{"2":{"371":1}}],["真痛点",{"2":{"363":1}}],["真实的营销与价值观契合",{"0":{"380":1}}],["真实评价",{"2":{"366":1}}],["真实",{"2":{"86":1}}],["真正成功的却不多呢",{"2":{"942":1}}],["真正成熟的架构师",{"2":{"144":1}}],["真正融入到代码编写",{"2":{"901":1}}],["真正分野的永远是内在的认知深度与执行密度",{"2":{"626":1}}],["真正有价值的信息",{"2":{"622":1}}],["真正高价值的信号就无法进入",{"2":{"621":1}}],["真正高阶的解决方案",{"2":{"383":1}}],["真正造成人与人之间差距的",{"2":{"619":1}}],["真正以求知为目的的人",{"2":{"613":1}}],["真正从",{"2":{"509":1}}],["真正做到",{"2":{"494":1}}],["真正具备了",{"2":{"486":1}}],["真正的独立出现在行之有效的相互依赖之前",{"2":{"907":1}}],["真正的原因",{"2":{"622":1}}],["真正的财富来源于你能否为别人提供有价值的商品或服务",{"2":{"612":1}}],["真正的理解有一个更高的标准",{"2":{"610":1}}],["真正的解法并不在医院的处方笺里",{"2":{"605":1}}],["真正的成长不再是知识的被动堆砌",{"2":{"603":1}}],["真正的效能源于对复杂性的科学驾驭",{"2":{"602":1}}],["真正的商业高手正在重新回归本质",{"2":{"601":1}}],["真正的分野在于",{"2":{"466":1}}],["真正的杠杆能力取决于",{"2":{"462":1}}],["真正的全栈",{"2":{"458":1,"553":1}}],["真正的全双工持久连接方案",{"2":{"125":1}}],["真正的挑战在于业务转化",{"2":{"444":1}}],["真正的",{"2":{"367":1,"414":1,"458":1,"564":1}}],["真正",{"2":{"360":1,"536":1}}],["真正好的框架",{"2":{"66":1}}],["真正驾驭",{"2":{"1":1}}],["外半径+顶点数",{"2":{"677":1}}],["外层可传入",{"2":{"489":1}}],["外围资源",{"2":{"442":1}}],["外挂",{"2":{"408":1}}],["外脑",{"2":{"356":1}}],["外部依赖",{"0":{"826":1}}],["外部",{"2":{"790":1,"792":2,"796":1}}],["外部纹理",{"2":{"734":1}}],["外部桥梁与",{"2":{"439":1}}],["外部连接通用协议",{"0":{"439":1}}],["外部性管理",{"2":{"399":1}}],["外部服务适配器",{"2":{"282":1}}],["外部服务调用",{"2":{"279":1}}],["外部服务",{"2":{"279":1}}],["外部只能通过聚合根访问聚合内部对象",{"2":{"278":1}}],["外部的静态",{"2":{"86":1}}],["外壳瞬间推送到浏览器",{"2":{"87":1}}],["外壳先见",{"2":{"57":1}}],["外壳",{"2":{"52":1,"87":1}}],["控件",{"2":{"86":1,"647":1,"709":1}}],["控制动画",{"2":{"764":1}}],["控制最终渲染的视锥体范围",{"2":{"737":1}}],["控制",{"2":{"482":4,"594":1,"686":1,"761":1,"762":1}}],["控制反转",{"2":{"344":1,"711":1}}],["控制器基类",{"2":{"734":1}}],["控制器",{"2":{"275":2,"282":1,"732":1,"733":1}}],["控制它在内存中保留多久才被垃圾回收",{"2":{"104":1}}],["控制台中",{"2":{"29":1}}],["控制台的",{"2":{"28":1}}],["控制认知复杂度",{"2":{"1":1}}],["闪烁",{"2":{"84":1}}],["点半期间吃早饭",{"2":{"961":1}}],["点到",{"2":{"961":1}}],["点左右才吃早饭",{"2":{"959":1}}],["点坐标对象池",{"2":{"762":1}}],["点云",{"2":{"734":1}}],["点光源",{"2":{"734":1}}],["点插值",{"2":{"677":1}}],["点击等",{"2":{"734":1}}],["点击",{"2":{"654":1}}],["点击率会提升",{"2":{"369":1}}],["点击瞬间切换",{"2":{"84":1}}],["点赞并参考他人案例",{"2":{"561":1}}],["点赞互动的实时更新",{"2":{"123":1}}],["点赞数",{"2":{"59":1}}],["懒加载设计",{"2":{"800":1}}],["懒加载正文",{"2":{"443":1}}],["懒加载",{"2":{"84":1,"288":1}}],["尤其推荐代码生成与数学推理场景",{"2":{"522":1}}],["尤其在看过",{"2":{"906":1}}],["尤其在",{"2":{"338":1}}],["尤其是注重样式安全性的中大型项目",{"2":{"923":1}}],["尤其是自然语言理解方面",{"2":{"918":1}}],["尤其是数字",{"2":{"518":1}}],["尤其是代码解释器",{"2":{"493":1}}],["尤其是产品高度同质化时",{"2":{"392":1}}],["尤其是bertrand",{"2":{"392":1}}],["尤其是",{"2":{"317":1}}],["尤其适合小程序",{"2":{"562":1}}],["尤其适合页面数量庞大但又无法全部预构建的大型网站",{"2":{"46":1}}],["尤其适用于扩展第三方类型",{"2":{"250":1}}],["尤为友好",{"2":{"83":1}}],["精致阴影",{"2":{"926":1}}],["精神",{"2":{"907":1}}],["精度处理",{"2":{"706":1}}],["精灵材质",{"2":{"734":1}}],["精灵动画",{"2":{"677":1}}],["精灵",{"2":{"671":1,"734":1}}],["精灵寄语",{"2":{"504":2,"505":2,"506":1,"507":1,"508":1,"509":1}}],["精简版入口",{"2":{"677":1,"679":1}}],["精简版",{"2":{"647":1,"679":1,"762":1}}],["精简实现方案",{"2":{"201":1}}],["精进自身",{"2":{"622":1}}],["精力和能量",{"2":{"621":1}}],["精明的消费者就会全部流向另一家",{"2":{"392":1}}],["精准捕捉用户的真实痛点",{"2":{"902":1}}],["精准识别",{"2":{"556":1}}],["精准识别出隐藏的正确答案",{"2":{"352":1}}],["精准定位",{"2":{"550":1}}],["精准控制",{"2":{"546":1}}],["精准截取关键帧",{"2":{"418":1}}],["精准填充到",{"2":{"414":1}}],["精准与持续繁荣的起点",{"2":{"381":1}}],["精准获取",{"2":{"342":1}}],["精准的代码引用",{"0":{"310":1}}],["精细交互用",{"2":{"701":1}}],["精细化缓存控制的重型单页应用",{"2":{"342":1}}],["精细的离线修改回滚",{"2":{"342":1}}],["精雕细琢",{"2":{"125":1}}],["精确匹配",{"2":{"652":1}}],["精确计算",{"2":{"411":1}}],["精确控制摘录的颗粒度",{"2":{"352":1}}],["精确控制缓存策略",{"2":{"94":1}}],["精确的组件",{"0":{"249":1}}],["精确限定取值空间",{"2":{"229":1}}],["精确",{"2":{"82":1}}],["精选专题",{"0":{"0":1,"347":1,"401":1,"524":1}}],["篇文章",{"2":{"82":1}}],["元任务",{"2":{"883":1}}],["元技能",{"2":{"880":1,"881":1,"884":1}}],["元编程",{"2":{"673":1}}],["元能力",{"2":{"603":1}}],["元宝",{"2":{"512":1}}],["元框架",{"2":{"344":1}}],["元组包裹",{"2":{"234":1}}],["元数据和技能内容中的",{"2":{"879":1}}],["元数据匹配",{"2":{"443":1}}],["元数据可以是实时",{"2":{"82":1}}],["元数据",{"0":{"82":1},"2":{"82":1,"442":1,"895":1}}],["元素查找",{"2":{"792":1,"799":1}}],["元素系统",{"2":{"776":1}}],["元素创建工具",{"2":{"762":2}}],["元素渲染器",{"2":{"762":1}}],["元素辅助类",{"2":{"762":1}}],["元素基类",{"2":{"762":3}}],["元素层",{"2":{"760":1,"761":2}}],["元素对应一个实例",{"2":{"709":1}}],["元素元数据",{"2":{"706":1}}],["元素的生命周期",{"2":{"684":1}}],["元素的高级抽象",{"2":{"670":1}}],["元素并绑定到用户指定的",{"2":{"684":1}}],["元素并模拟点击",{"2":{"414":1}}],["元素管理",{"2":{"677":1}}],["元素",{"2":{"1":1,"203":1,"706":1,"748":1,"762":1,"924":1}}],["都不是",{"2":{"957":1}}],["都必须反复使用",{"2":{"924":1}}],["都可以通过不同频率的正弦波叠加得出",{"2":{"916":1}}],["都可以被封装为独立的",{"2":{"547":1}}],["都非常欢迎你联系我~",{"2":{"905":1}}],["都非常适合使用泛型",{"2":{"256":1}}],["都实现这个",{"2":{"850":1}}],["都通过",{"2":{"654":1}}],["都需要博采众长",{"2":{"618":1}}],["都配备独立的聊天记录和高达",{"2":{"437":1}}],["都会在后续的每一次交互中被严格执行",{"2":{"571":1}}],["都会让一部分曾经引以为傲的手艺淡出舞台",{"2":{"525":1}}],["都会经历从旁观到创造的演进",{"2":{"464":1}}],["都会被当作一个有效的类型来使用",{"2":{"254":1}}],["都会产生大量冗余请求",{"2":{"115":1}}],["都能通过",{"2":{"226":1}}],["都调用了",{"2":{"97":1}}],["都调用",{"2":{"81":1}}],["都是构建知识密集型应用的关键",{"2":{"417":1}}],["都是",{"2":{"247":1}}],["都是不二之选",{"2":{"128":1}}],["都是典型的服务端渲染",{"2":{"38":1}}],["都是值得尝试的架构方案",{"2":{"32":1}}],["布局辅助",{"2":{"706":1}}],["布局算法引擎",{"2":{"706":1}}],["布局算法",{"2":{"704":1,"711":1}}],["布局",{"2":{"656":1}}],["布局组件插件",{"2":{"647":1}}],["布局分类图标",{"2":{"647":1}}],["布局样式",{"2":{"647":1}}],["布局等",{"2":{"338":1}}],["布局偏移",{"2":{"84":1}}],["布局不会重新渲染",{"2":{"79":1}}],["布局页面",{"2":{"65":1}}],["页脚",{"2":{"79":1,"87":1}}],["页面美化",{"2":{"934":1}}],["页面转场",{"2":{"756":1}}],["页面数据",{"2":{"653":1}}],["页面数量可穷举",{"2":{"66":1}}],["页面数量与更新频率如何",{"2":{"58":1}}],["页面数量大的内容站",{"2":{"57":1}}],["页面的完整",{"2":{"650":1}}],["页面的基础",{"2":{"338":1}}],["页面跳转",{"2":{"649":1}}],["页面跳转白屏",{"2":{"84":1}}],["页面构建器",{"2":{"647":1,"656":1}}],["页面根节点",{"2":{"650":1}}],["页面根",{"2":{"647":1,"650":1}}],["页面完全由",{"2":{"641":1}}],["页面完整呈现",{"2":{"52":1}}],["页面布局模板",{"2":{"274":1}}],["页面专属",{"2":{"274":1}}],["页面专属组件",{"2":{"274":1}}],["页面测试",{"2":{"274":1}}],["页面样式",{"2":{"274":1}}],["页面组件",{"2":{"274":2}}],["页面层",{"2":{"274":1}}],["页面切换或用户主动取消时",{"2":{"174":1}}],["页面切换时及时释放连接",{"2":{"175":1}}],["页面切换时",{"2":{"79":1}}],["页面切换时不重新渲染",{"2":{"78":1}}],["页面可见性变化流程",{"0":{"837":1}}],["页面可见性变化处理",{"2":{"830":1}}],["页面可见性监听",{"2":{"830":1}}],["页面可见性处理",{"2":{"824":1}}],["页面可见性集成",{"2":{"815":1}}],["页面可见性",{"2":{"167":1,"823":1}}],["页面可交互",{"2":{"39":1}}],["页面上同时存在十几个需要联动的数据板块",{"2":{"113":1}}],["页面重新聚焦时自动重新验证",{"2":{"90":1}}],["页面外壳虽然瞬间出现",{"2":{"89":1}}],["页面",{"2":{"78":1,"647":1,"662":2,"792":1}}],["页面加载慢",{"2":{"366":1}}],["页面加载的",{"2":{"73":1}}],["页面加载后",{"2":{"65":1}}],["页面如何渲染",{"2":{"71":1,"72":1}}],["页面类型",{"2":{"65":2}}],["页面进入可交互状态",{"2":{"65":1}}],["页面多",{"2":{"58":1}}],["页面少",{"2":{"58":1}}],["页面尚未生成静态版本",{"2":{"47":1}}],["页面在首次访问时自动生成静态版本",{"2":{"46":1}}],["页面才真正具备交互能力",{"2":{"39":1}}],["页面呈现",{"2":{"35":1}}],["页面内容的生成与渲染完全由客户端",{"2":{"34":1}}],["页面骨架已呈现",{"2":{"52":1}}],["页面骨架",{"2":{"16":1}}],["页面生成时机",{"2":{"15":1}}],["该书在疫情前被笔者知晓后阅读",{"2":{"943":1}}],["该脚本读取",{"2":{"883":1}}],["该目录下的每个",{"2":{"575":1}}],["该模式通过一个显式的",{"2":{"429":1}}],["该业务模块也得重写",{"2":{"328":1}}],["该集合本身",{"2":{"244":1}}],["该服务端登场了",{"2":{"176":1}}],["该落地了",{"2":{"170":1}}],["该库解决的核心痛点",{"2":{"167":1}}],["该特性使其在实时音视频流传输",{"2":{"127":1}}],["该路由及其子路由的共享布局",{"2":{"78":1}}],["该路由的页面内容",{"2":{"78":1}}],["该阶段工作量占比",{"2":{"57":1}}],["作息无规律",{"2":{"938":1}}],["作者推出的第四代时间管理模式",{"2":{"907":1}}],["作者",{"2":{"874":1}}],["作者云中江树关于",{"2":{"496":1}}],["作为大脑的缓冲池而存在",{"2":{"953":1}}],["作为大模型的缔造者",{"2":{"525":1}}],["作为主品牌色",{"2":{"925":1}}],["作为工作几年后的打工人",{"2":{"919":1}}],["作为工程师",{"2":{"364":1}}],["作为补充材料",{"2":{"890":1}}],["作为项目级指引",{"2":{"883":1}}],["作为统一入口发现",{"2":{"785":1}}],["作为底层渲染机制",{"2":{"640":1}}],["作为底层的",{"2":{"440":1}}],["作为产品工程师",{"2":{"528":1}}],["作为角色",{"2":{"506":1}}],["作为数据摘要",{"2":{"472":1}}],["作为数据修改的单元",{"2":{"278":1}}],["作为系统级杠杆的",{"2":{"466":1}}],["作为快速上手指南",{"2":{"445":1}}],["作为中转站",{"2":{"429":1}}],["作为中间件层",{"2":{"342":1}}],["作为效率工具",{"2":{"406":1}}],["作为当前备受瞩目的",{"2":{"348":1}}],["作为更高级架构的底层引擎",{"2":{"342":1}}],["作为编译器将声明式组件转换为高效且能直接操作",{"2":{"339":1}}],["作为筛选标准",{"2":{"181":1}}],["作为最朴素的实时通信方案",{"2":{"145":1}}],["作为一个长期习惯来贯彻下去",{"2":{"942":1}}],["作为一种娱乐和爱好",{"2":{"946":1}}],["作为一种基于命名约定来规避命名冲突的早期方案",{"2":{"920":1}}],["作为一种",{"2":{"129":1}}],["作为一种无状态",{"2":{"115":1}}],["作为一条独立消息的终点",{"2":{"121":1}}],["作为",{"2":{"97":1,"104":1,"307":1,"483":1,"489":2,"559":1,"928":1,"934":1}}],["作为性能机制内建于渲染引擎之中",{"2":{"85":1}}],["作为明确的",{"2":{"3":1}}],["作用域化样式",{"2":{"922":1}}],["作用效果从头传到尾就结束了",{"2":{"908":1}}],["作用范围",{"2":{"571":1,"580":1}}],["作用于交叉类型",{"2":{"239":1}}],["作用于联合类型",{"2":{"233":1}}],["作用对象",{"2":{"210":1}}],["作用",{"2":{"78":1,"177":1,"443":1}}],["各编码平台",{"2":{"879":1}}],["各编码平台缺乏统一工作流标准",{"2":{"874":1}}],["各层之间通过注册器模式和接口契约解耦",{"2":{"760":1}}],["各层职责详解",{"2":{"279":1}}],["各类动画",{"2":{"762":1}}],["各类图层元素",{"2":{"760":1}}],["各类型轨道",{"2":{"734":1}}],["各种工具分散",{"2":{"784":1}}],["各种具体材质",{"2":{"742":1}}],["各种曲线",{"2":{"734":1}}],["各种设计模式",{"2":{"434":1}}],["各包的",{"2":{"647":1}}],["各模块分值占比",{"2":{"474":1}}],["各个组件究竟是如何协同工作的",{"2":{"434":1}}],["各个组件到底是怎么协同工作的",{"2":{"434":1}}],["各",{"2":{"249":1,"851":1}}],["各自实现",{"2":{"768":1}}],["各自处理特定的子任务",{"2":{"415":1}}],["各自独立流式注入",{"2":{"86":1}}],["各自管理加载状态",{"2":{"86":1}}],["各司其职",{"2":{"78":1}}],["各取所需",{"0":{"75":1}}],["看一些比较正向的文章",{"2":{"962":1}}],["看不见",{"2":{"932":1}}],["看不到确定性的回报",{"2":{"617":1}}],["看起来干净",{"2":{"930":1}}],["看起来是集中精力做一件事",{"2":{"918":1}}],["看起来更具性价比",{"2":{"397":1}}],["看懂",{"2":{"610":2}}],["看懂变量的存量与流量",{"2":{"384":1}}],["看得多了",{"2":{"608":1}}],["看电视并无本质区别",{"2":{"606":1}}],["看板和文档协作",{"2":{"515":1}}],["看板",{"2":{"515":2}}],["看看如何把",{"2":{"901":1}}],["看看它们是如何各司其职的",{"2":{"434":1}}],["看看系统到底卡在哪一个节点",{"2":{"389":1}}],["看规划闭环",{"0":{"427":1}}],["看完这昏昏欲睡的电影",{"2":{"393":1}}],["看真实数据或市场反馈",{"2":{"369":1}}],["看到标准后就能推导出符合实际的解法",{"2":{"941":1}}],["看到某类任务时主动说",{"2":{"585":1}}],["看到冰山之下的成本收益权衡与竞争博弈",{"2":{"390":1}}],["看到",{"2":{"367":1}}],["看到用户",{"2":{"88":1}}],["看似是我们在评估它",{"2":{"617":1}}],["看似简单又粗暴的规则",{"2":{"917":1}}],["看似简单的因果链",{"2":{"385":1}}],["看似简洁",{"2":{"200":1}}],["看似美好",{"2":{"365":1}}],["看待问题的角度会发生转变",{"2":{"271":1}}],["看",{"2":{"76":1,"418":1}}],["选定的方案",{"2":{"895":1}}],["选中",{"2":{"706":1}}],["选模型前",{"0":{"519":1}}],["选用",{"2":{"507":1}}],["选项",{"2":{"928":2}}],["选项用于继承另一个",{"2":{"209":1}}],["选项用于声明当前项目依赖的其他",{"2":{"207":1}}],["选项文件",{"2":{"203":1}}],["选项发送",{"2":{"163":1}}],["选择方案",{"2":{"845":1}}],["选择理由",{"2":{"702":1,"758":1,"877":1}}],["选择框",{"2":{"677":1}}],["选择原因",{"2":{"642":1}}],["选择权",{"2":{"533":1}}],["选择建议",{"0":{"515":1,"518":1},"2":{"510":1,"515":1,"518":1,"565":1}}],["选择并执行具体的操作",{"2":{"427":1}}],["选择更趁手的圆瓶",{"2":{"391":1}}],["选择看什么",{"2":{"373":1}}],["选择冷门但具有极大潜力的",{"2":{"360":1}}],["选择器添加唯一哈希属性",{"2":{"924":1}}],["选择器同时打上",{"2":{"924":1}}],["选择器和数字引用",{"2":{"799":1}}],["选择器",{"2":{"274":1}}],["选择",{"2":{"192":1,"642":1,"654":1,"673":1,"925":2}}],["选择假设最少",{"2":{"181":1}}],["选择策略的核心思路",{"2":{"75":1}}],["选型决策分析",{"0":{"822":1}}],["选型决策树",{"0":{"58":1}}],["选型建议",{"2":{"568":1}}],["选型与整体设计",{"2":{"542":1}}],["选型评估",{"0":{"109":1},"1":{"110":1,"111":1,"112":1,"113":1}}],["选型",{"2":{"32":1,"335":1,"730":1}}],["略慢于",{"2":{"75":1}}],["个技能按工作流形成严格的有向无环图",{"2":{"879":1}}],["个编码平台",{"2":{"876":1}}],["个包",{"2":{"849":1}}],["个包的",{"2":{"845":1}}],["个示例项目",{"2":{"845":1}}],["个基础模块入口",{"2":{"778":1}}],["个构建入口",{"2":{"757":1}}],["个子目录",{"2":{"755":1}}],["个子主题",{"2":{"471":2}}],["个核心节点类型",{"2":{"734":1}}],["个核心要点",{"2":{"383":1}}],["个访问器",{"2":{"734":1}}],["个组件",{"2":{"706":1}}],["个逻辑层",{"2":{"704":1}}],["个交互组件",{"2":{"701":1}}],["个图像滤镜",{"2":{"677":1}}],["个具体形状实现",{"2":{"677":1}}],["个具体数字",{"2":{"472":1}}],["个具体数据点",{"2":{"470":1}}],["个方案时",{"2":{"460":1}}],["个字符",{"2":{"448":1}}],["个阶段",{"2":{"443":1}}],["个任务的输出",{"2":{"430":1}}],["个任务的详细推理过程",{"2":{"430":1}}],["个任务时",{"2":{"430":1}}],["个硬核数据点",{"2":{"416":1}}],["个性化",{"2":{"515":1}}],["个性化工作方式",{"2":{"436":1}}],["个性化教育",{"2":{"407":1}}],["个性化首页",{"2":{"75":1}}],["个关键步骤",{"2":{"389":1}}],["个让自己感到",{"2":{"370":1}}],["个功能入口",{"2":{"366":1}}],["个元素",{"2":{"227":1}}],["个",{"0":{"459":1},"2":{"124":1,"291":1,"472":1,"653":2,"677":2,"755":1,"801":1,"849":1,"950":1}}],["个模型卡片",{"2":{"86":1}}],["个人能力补充圈",{"2":{"947":1}}],["个人反思",{"2":{"628":1}}],["个人见解",{"2":{"628":1}}],["个人理解",{"2":{"628":1}}],["个人经验",{"2":{"614":1}}],["个人特殊需求",{"2":{"596":1}}],["个人习惯",{"2":{"580":1}}],["个人权限覆盖",{"0":{"596":1}}],["个人权限",{"2":{"570":1}}],["个人覆盖",{"2":{"570":1}}],["个人代理",{"2":{"570":1}}],["个人技能",{"2":{"570":1}}],["个人自定义斜杠命令",{"2":{"570":1}}],["个人或小团队的重构",{"2":{"568":1}}],["个人日常开发",{"2":{"565":1}}],["个人开发者",{"2":{"523":1}}],["个人开发者的",{"2":{"361":1}}],["个人笔记",{"2":{"515":1}}],["个人笔记与知识库",{"2":{"515":1}}],["个人知识库",{"2":{"515":2}}],["个人知识管理的得力助手",{"2":{"515":1}}],["个人偏好",{"2":{"436":1}}],["个人偏好沉淀与经验积累",{"2":{"414":1}}],["个人财务",{"2":{"407":1}}],["个人作品集",{"2":{"345":1}}],["个人",{"2":{"31":1,"568":1}}],["定规范",{"2":{"532":1}}],["定价极低",{"2":{"522":1}}],["定价业内极低",{"2":{"522":1}}],["定价往往是竞争博弈后的动态平衡",{"2":{"392":1}}],["定海神针",{"2":{"509":1}}],["定制化修改",{"2":{"758":1}}],["定制业务模型",{"2":{"512":1}}],["定制属于自己的",{"2":{"419":1}}],["定制性受限",{"2":{"287":1}}],["定位圆圈",{"2":{"947":1}}],["定位当前帧所在关键帧区间",{"2":{"770":1}}],["定位",{"2":{"159":1,"198":1}}],["定期扫描那些与多个",{"2":{"629":1}}],["定期清理无效信息源",{"2":{"624":1}}],["定期轮询查询状态",{"2":{"143":1}}],["定期刷新",{"2":{"75":1}}],["定时查询状态",{"2":{"142":1}}],["定义所有的变体状态",{"2":{"927":1}}],["定义所有模型类型的抽象接口",{"2":{"847":1}}],["定义变量",{"2":{"921":1}}],["定义的模板",{"2":{"895":1}}],["定义的接口与核心",{"2":{"853":1}}],["定义钩子触发规则",{"2":{"895":1}}],["定义严格的",{"2":{"890":1}}],["定义在",{"2":{"884":1}}],["定义目录",{"2":{"881":1}}],["定义技能的基本信息",{"2":{"895":1}}],["定义技能的基础属性",{"2":{"442":1}}],["定义技能优先级规则",{"2":{"880":1}}],["定义插件元数据和",{"2":{"879":1}}],["定义模型可调用的工具及其输入",{"2":{"854":1}}],["定义模块",{"2":{"305":1}}],["定义统一页面操作抽象",{"2":{"799":1}}],["定义渲染器的公共接口",{"2":{"768":1}}],["定义渲染流程骨架",{"2":{"739":1}}],["定义材质着色器而不依赖内置着色器库",{"2":{"742":1}}],["定义通用属性",{"2":{"742":1}}],["定义通用的键值对映射",{"2":{"262":1}}],["定义观察者的视点和投影方式",{"2":{"737":1}}],["定义物体表面的光照响应",{"2":{"737":1}}],["定义矩形绘图区域",{"2":{"706":1}}],["定义命中检测绘制逻辑",{"2":{"683":1}}],["定义场景绘制逻辑",{"2":{"683":1}}],["定义页面",{"2":{"668":1}}],["定义其能力边界",{"2":{"591":1}}],["定义专注特定任务的",{"2":{"570":1}}],["定义专属的子智能体角色",{"2":{"570":1}}],["定义团队编码规范",{"2":{"570":1}}],["定义项目规范",{"2":{"570":1}}],["定义个人习惯的交互风格",{"2":{"570":1}}],["定义验收标准",{"2":{"532":1}}],["定义清晰的接口和职责",{"2":{"476":1}}],["定义清晰的仓储接口",{"2":{"281":1}}],["定义文件",{"2":{"445":1}}],["定义具体的执行逻辑",{"2":{"442":1}}],["定义具体数据类型",{"2":{"266":1}}],["定义问题",{"2":{"367":1}}],["定义问题的能力",{"2":{"367":1}}],["定义全域共用的常量与",{"2":{"336":1}}],["定义业务契约",{"2":{"319":1}}],["定义一个数学工具模块",{"2":{"295":1}}],["定义领域服务",{"2":{"282":1}}],["定义限界上下文",{"2":{"282":1}}],["定义实体",{"2":{"279":1}}],["定义数据实体结构与数据传输对象",{"2":{"275":1}}],["定义导航结构与路由守卫",{"2":{"274":1}}],["定义子类",{"2":{"269":1}}],["定义基类",{"2":{"269":1}}],["定义可序列化接口",{"2":{"267":1}}],["定义可比较接口",{"2":{"267":1}}],["定义约束接口",{"2":{"266":1}}],["定义函数类型",{"2":{"262":1}}],["定义了技能之间的合法转换路径",{"2":{"896":1}}],["定义了前端与后端的标准通信协议",{"2":{"844":1}}],["定义了两个核心方法",{"2":{"844":1}}],["定义了一套完整的动作语义",{"2":{"654":1}}],["定义了一系列关键概念",{"2":{"278":1}}],["定义了",{"2":{"593":1,"926":1}}],["定义了标准化的数据格式",{"2":{"159":1}}],["定义了全局",{"2":{"79":1}}],["定义退避策略阵列",{"2":{"149":1}}],["定义",{"2":{"26":1,"275":1,"278":1,"305":1,"451":1,"640":1,"680":1,"706":1,"736":1,"792":1,"797":1,"879":1}}],["定义职责约束",{"2":{"2":1}}],["直至可以抛弃原来的专业",{"2":{"936":1}}],["直达本质的洞察力成为必需",{"2":{"604":1}}],["直达性",{"2":{"119":1}}],["直线思考",{"2":{"492":1}}],["直观性最强的模式",{"2":{"427":1}}],["直观地感受一下什么是模块化",{"2":{"295":1}}],["直觉理解",{"2":{"242":1}}],["直到模型返回纯文本或达到最大步数",{"2":{"863":1}}],["直到达到停止条件",{"2":{"859":1}}],["直到找到或到达根目录",{"2":{"334":1}}],["直到你尝试赋值时才暴露问题",{"2":{"237":1}}],["直到流结束",{"2":{"166":1,"168":1}}],["直到有新数据产生或超时才返回响应",{"2":{"150":1}}],["直到服务器发送一个长度为",{"2":{"117":1}}],["直连数据库",{"2":{"92":1}}],["直出的纯展示网页",{"2":{"344":1}}],["直出",{"2":{"75":1,"92":1}}],["直接原因",{"2":{"935":1,"959":2}}],["直接编写",{"2":{"928":1}}],["直接编译为",{"2":{"742":1}}],["直接提取",{"2":{"927":1}}],["直接复制",{"2":{"926":1}}],["直接创建一个自带样式的",{"2":{"922":1}}],["直接集成",{"2":{"845":1}}],["直接导出类型",{"2":{"827":1}}],["直接连接",{"2":{"799":1}}],["直接连接外部服务",{"2":{"411":1}}],["直接处理",{"2":{"795":1}}],["直接cdp连接",{"2":{"790":1}}],["直接控制",{"2":{"785":1}}],["直接解析",{"2":{"755":1}}],["直接匹配",{"2":{"649":1}}],["直接生成可运行的完整项目",{"2":{"559":1}}],["直接与本地或云端知识库联动",{"2":{"548":1}}],["直接给出答案",{"2":{"531":1}}],["直接面向心智尚未成熟的",{"2":{"492":1}}],["直接想成为",{"2":{"464":1}}],["直接关系到",{"2":{"448":1}}],["直接输出版本号",{"2":{"796":1}}],["直接输出",{"2":{"427":1}}],["直接通过",{"2":{"425":1}}],["直接喂饭",{"2":{"373":1}}],["直接",{"2":{"333":1,"786":1,"792":1,"799":1}}],["直接访问不安全",{"2":{"229":1}}],["直接实现核心功能",{"2":{"194":1}}],["直接实现核心逻辑",{"2":{"188":1}}],["直接终止",{"2":{"175":1}}],["直接把你以前用搜索引擎搜的问题原文粘进去",{"2":{"518":1}}],["直接把",{"2":{"112":1}}],["直接选用",{"2":{"111":1}}],["直接拿走",{"2":{"104":1}}],["直接使用链接指向的文件",{"2":{"203":1}}],["直接使用",{"2":{"97":1,"787":1}}],["直接在业务逻辑里初始化数据库",{"2":{"328":1}}],["直接在本地假定请求成功并更新",{"2":{"100":1}}],["直接在",{"2":{"94":1,"922":2,"925":1}}],["直接在组件顶层读取了",{"2":{"59":1}}],["直接查数据库",{"2":{"74":1}}],["直接查询数据库",{"2":{"73":1}}],["直接传给浏览器",{"2":{"73":1}}],["直接返回缓存结果",{"2":{"304":1}}],["直接返回缓存的静态",{"2":{"47":1}}],["直接返回预编译好的",{"2":{"65":1}}],["直接返回预渲染文件",{"2":{"43":1}}],["直接返回",{"2":{"57":1}}],["直接返回现成的",{"2":{"42":1,"43":1}}],["直接点击",{"2":{"29":1}}],["直接获取数据",{"2":{"27":1}}],["直接托管预构建的静态文件",{"2":{"19":1}}],["直接从内存加载",{"2":{"334":1}}],["直接从",{"2":{"14":1}}],["秒哒",{"2":{"561":1,"562":2}}],["秒以内",{"2":{"155":1}}],["秒挂起时间到了",{"2":{"153":1}}],["秒才会有",{"2":{"153":1}}],["秒钟再查一次库",{"2":{"152":1}}],["秒内完成",{"2":{"152":1}}],["秒完成",{"2":{"149":1}}],["秒一次",{"2":{"140":1}}],["秒后重试",{"2":{"169":1}}],["秒后重连",{"2":{"153":1}}],["秒后改为每",{"2":{"140":1}}],["秒后过期",{"2":{"47":1}}],["秒查询一次",{"2":{"140":2}}],["秒每",{"2":{"140":1}}],["秒发起一个极轻量的",{"2":{"137":1}}],["秒的等待周期",{"2":{"149":1}}],["秒的网络中断",{"2":{"139":1}}],["秒的",{"2":{"137":1}}],["秒",{"2":{"106":1,"136":1,"148":4,"151":1,"820":1}}],["秒杀库存",{"2":{"88":1}}],["秒开",{"2":{"75":1}}],["来改善不足的地方",{"2":{"959":1}}],["来管理事务",{"2":{"952":1}}],["来定期分析自身数据",{"2":{"942":1}}],["来打破隔离机制",{"2":{"924":1}}],["来打破思维盲区",{"2":{"903":1}}],["来从物理层面切断样式污染",{"2":{"924":1}}],["来约束作用域",{"2":{"920":1}}],["来帮助找出一些适合自己实践的答案",{"2":{"907":1}}],["来辅助我创作",{"2":{"903":1}}],["来判断当前运行的平台",{"2":{"886":1}}],["来自预设的",{"2":{"925":1}}],["来自",{"2":{"799":1}}],["来自动化检查代码是否符合规范",{"2":{"219":1}}],["来过滤和吸收",{"2":{"618":1}}],["来发掘",{"2":{"612":1}}],["来尊敬",{"2":{"610":1}}],["来经营",{"2":{"603":1}}],["来放大自身产品价值的开发者",{"2":{"552":1}}],["来批量自动评测弱模型或",{"2":{"550":1}}],["来对抗",{"2":{"525":1}}],["来对生成的",{"2":{"476":1}}],["来分割",{"2":{"506":2}}],["来获取相关的背景信息",{"2":{"501":1}}],["来完成",{"2":{"499":1}}],["来划分群体",{"2":{"397":1}}],["来日之尚可期",{"2":{"393":1}}],["来都来了",{"0":{"393":1},"2":{"393":2}}],["来抵消额外的存储空间成本",{"2":{"391":1}}],["来收敛",{"2":{"369":1}}],["来训练这种算法",{"2":{"368":1}}],["来兜底",{"2":{"367":1}}],["来解决生成代码的可维护性难题",{"2":{"901":1}}],["来解决",{"2":{"340":1}}],["来实现打字机效果",{"2":{"488":1}}],["来实现",{"2":{"162":1}}],["来监听任务完成事件",{"2":{"152":1}}],["来排查状态污染",{"2":{"113":1}}],["来保证数据的一致性",{"2":{"113":1}}],["来优雅处理",{"2":{"101":1}}],["来源引用",{"2":{"518":1}}],["来源",{"2":{"75":1,"472":1,"895":3}}],["来达成",{"2":{"11":1}}],["灵光一现",{"2":{"364":1}}],["灵感经过学习与内化沉淀为笔记",{"2":{"631":1}}],["灵感碎片",{"2":{"541":1}}],["灵感捕捉",{"2":{"515":1}}],["灵感",{"2":{"340":1,"525":1}}],["灵魂的关键",{"2":{"496":1}}],["灵魂",{"2":{"75":1,"402":1,"410":1,"415":1}}],["灵活且跨模型通用",{"2":{"877":1}}],["灵活构建",{"2":{"757":1}}],["灵活调度国内外大模型",{"2":{"549":1}}],["灵活与可扩展性",{"2":{"509":1}}],["灵活的重试策略",{"2":{"815":1}}],["灵活的状态管理解决方案",{"2":{"341":1}}],["灵活的字段存储方式",{"2":{"200":1}}],["灵活应对复杂的数据结构和继承关系",{"2":{"270":1}}],["灵活组合",{"2":{"240":1}}],["灵活混用",{"0":{"75":1}}],["灵活度高",{"2":{"18":1}}],["←────────┐",{"2":{"832":1}}],["←",{"2":{"74":1,"244":1,"279":4,"442":4}}],["──是──→",{"2":{"832":1}}],["──┘",{"2":{"801":2}}],["──┐",{"2":{"801":2}}],["──>",{"2":{"797":2}}],["────",{"2":{"73":3}}],["──►",{"2":{"57":1}}],["▼",{"2":{"73":3,"471":2,"790":1,"801":1,"830":6,"832":10,"833":8}}],["存档",{"2":{"583":1}}],["存放在",{"2":{"442":2}}],["存放某个产品发布的所有背景材料",{"2":{"437":1}}],["存放纯粹的业务逻辑",{"2":{"336":1}}],["存量是系统的",{"2":{"384":1}}],["存量",{"2":{"384":1}}],["存量与流量",{"2":{"384":1}}],["存量项目主流",{"2":{"308":1}}],["存扩展字段",{"2":{"200":1}}],["存在",{"2":{"833":1}}],["存在以下限制",{"2":{"814":1}}],["存在着诸如谈话交流",{"2":{"614":1}}],["存在破坏性变更",{"2":{"331":1}}],["存在等待周期内的盲区",{"2":{"155":1}}],["存在时",{"2":{"107":1}}],["存在的意义",{"2":{"71":1}}],["存储客观的设计令牌",{"2":{"928":1}}],["存储关键帧数据并提供插值计算",{"2":{"765":1}}],["存储关键帧数据",{"2":{"743":1}}],["存储顶点位置",{"2":{"737":1}}],["存储纹理",{"2":{"734":1}}],["存储当前对话流",{"2":{"410":1}}],["存储当前的对话流",{"2":{"408":1}}],["存储的只是有限轮次的对话历史",{"2":{"410":1}}],["存储长期的知识库",{"2":{"408":1}}],["存储工具",{"2":{"274":1,"734":1}}],["存储复杂对象",{"2":{"261":1}}],["存储数字",{"2":{"261":1}}],["存储数据的数组",{"2":{"261":1}}],["存储字符串",{"2":{"261":1}}],["存储订单信息",{"2":{"30":1}}],["存储用户的个人偏好",{"2":{"410":1}}],["存储用户购物车",{"2":{"30":1}}],["存储用户评论",{"2":{"23":1}}],["存储购物车数据",{"2":{"30":1}}],["存储",{"2":{"20":2,"685":1}}],["库来实现第三方样式覆盖和复杂逻辑的物理隔离",{"2":{"934":1}}],["库会带来一定的运行时性能开销",{"2":{"922":1}}],["库而非应用",{"2":{"758":1}}],["库构建",{"2":{"706":1}}],["库都能无缝集成到",{"2":{"321":1}}],["库作者面临一个尴尬的局面",{"2":{"306":1}}],["库开发",{"2":{"204":1}}],["库开发时不推荐开启",{"2":{"203":1}}],["库的功能是否与需求完全匹配",{"2":{"194":1}}],["库",{"0":{"71":1},"2":{"71":1,"167":1,"339":1,"340":1,"341":1,"346":11,"734":1,"736":1,"927":1,"934":1}}],["库存错误",{"2":{"59":1}}],["库存",{"2":{"30":1,"48":1}}],["树生成",{"2":{"792":1}}],["树图",{"2":{"706":1}}],["树遍历",{"2":{"677":1}}],["树形结构",{"2":{"672":1,"706":1}}],["树形结构天然匹配组件树",{"2":{"642":1}}],["树",{"2":{"70":1,"73":1,"653":1}}],["树纯粹",{"2":{"1":1}}],["出上述哪种方式好",{"2":{"946":1}}],["出错时",{"2":{"839":1}}],["出错如何处理",{"2":{"69":1}}],["出缓动控制点",{"2":{"776":1}}],["出一个应用",{"0":{"560":1},"1":{"561":1,"562":1}}],["出品的",{"2":{"515":1,"564":1}}],["出品的客户端数据获取库",{"2":{"90":1}}],["出于安全考虑不会默认放行",{"2":{"84":1}}],["出现",{"2":{"6":1}}],["字符",{"2":{"814":1}}],["字符串需要用到",{"2":{"934":1}}],["字符串字面量",{"2":{"655":1}}],["字符串",{"2":{"647":1,"655":1,"851":1}}],["字符串等",{"2":{"270":1}}],["字符串路径",{"2":{"210":1}}],["字符串判空",{"2":{"193":1}}],["字符串后直接返回给浏览器",{"2":{"69":1}}],["字母属性",{"2":{"762":1}}],["字体排版和基础色彩交给",{"2":{"930":1}}],["字体属性获取",{"2":{"762":1}}],["字体管理器覆盖",{"2":{"762":1}}],["字体管理器",{"2":{"762":1}}],["字体管理",{"2":{"761":1}}],["字体文件",{"2":{"734":1}}],["字体",{"2":{"442":1,"765":1,"925":1,"928":1,"934":1}}],["字面量",{"2":{"231":1}}],["字面量联合",{"2":{"229":1}}],["字节流",{"2":{"824":1}}],["字节跳动旗下豆包大模型开放平台",{"2":{"522":1}}],["字节跳动推出的新一代大模型",{"2":{"512":1}}],["字节跳动前端团队维护的专业微信公众号",{"2":{"346":1}}],["字节块",{"2":{"168":1}}],["字节读取",{"2":{"168":2}}],["字节",{"2":{"127":2}}],["字段调用的函数",{"2":{"840":2}}],["字段的事件",{"2":{"839":1}}],["字段的值",{"2":{"163":1}}],["字段是刻意设计的最小权限原则",{"2":{"591":1}}],["字段提供更精细的控制",{"2":{"335":1}}],["字段实际上不存在",{"2":{"247":1}}],["字段对应",{"2":{"178":1}}],["字段即为",{"2":{"178":1}}],["字段即可",{"2":{"164":1}}],["字段可能多行",{"2":{"168":1}}],["字段间以空行分隔",{"2":{"168":1}}],["字段或",{"2":{"163":1}}],["字段承载实际数据内容",{"2":{"161":1}}],["字段用于断线重连时的位置标记",{"2":{"161":1}}],["字段指定事件类型",{"2":{"161":1}}],["字段组成",{"2":{"161":1}}],["字段和必需的",{"2":{"161":1}}],["字段控制",{"2":{"47":1}}],["字段",{"2":{"26":1,"163":1,"164":3,"166":2,"168":1,"169":1,"230":1,"649":1}}],["愿我们都能带着平常心去阅读",{"2":{"615":1}}],["愿这首小诗能带您重回洛水之畔",{"2":{"505":1}}],["愿这首小诗如清风拂过你的心湖",{"2":{"505":1}}],["愿你不仅能写出跑得通的模块",{"2":{"332":1}}],["愿你在这场技术演进中",{"2":{"12":1}}],["愿本文能帮助你在下一个项目中做出更清晰",{"2":{"67":1}}],["很快又要回到一心一意敲键盘",{"2":{"959":1}}],["很好地鼓励自己在统计学分析方面继续加大投入力度",{"2":{"954":1}}],["很少吃早饭",{"2":{"938":1}}],["很少有人会选择继续保持",{"2":{"950":1}}],["很少有顾客能赢",{"2":{"917":1}}],["很少有机会将其应用到实际工作中",{"2":{"912":1}}],["很低",{"2":{"928":1}}],["很容易陷入",{"2":{"910":1}}],["很容易进入",{"2":{"906":1}}],["很难再有突破",{"2":{"908":1}}],["很难进行层层递进的深入分析",{"2":{"606":1}}],["很划算",{"2":{"528":1}}],["很多基础设施已足够便捷",{"2":{"957":1}}],["很多经验都是可以继续沿用的",{"2":{"956":1}}],["很多看起来复杂的现象背后所包含的规律",{"2":{"916":1}}],["很多抗拒电子书的人",{"2":{"613":1}}],["很多流传至今的名著",{"2":{"609":1}}],["很多工程改进任务",{"2":{"528":1}}],["很多方面的行为",{"2":{"482":1}}],["很多时候",{"2":{"387":1,"610":1,"908":1}}],["很多时候我们对痛点视而不见",{"2":{"370":1}}],["很多人觉得时间管理",{"2":{"950":1}}],["很多人把赚不到钱",{"2":{"621":1}}],["很多人容易沉溺于书籍带来的附加体验",{"2":{"613":1}}],["很多人不会反思自己是否创造了真正的社会价值",{"2":{"612":1}}],["很多人习惯直接看结论和观点",{"2":{"608":1}}],["很多人认为",{"2":{"368":1}}],["很多人被困在时髦的漩涡里",{"2":{"358":1}}],["很多人误以为",{"2":{"351":1}}],["很多人会以为两个函数类型的交叉会让参数类型变成联合类型",{"2":{"238":1}}],["很多人以为",{"2":{"66":1}}],["很多开发者容易将",{"2":{"159":1}}],["很可能会耗尽连接池",{"2":{"124":1}}],["很重要",{"2":{"81":1}}],["很酷",{"2":{"67":1}}],["则下午吃轻食",{"2":{"961":1}}],["则下午正常吃饭",{"2":{"961":1}}],["则全权负责产物加工与工程化转化",{"2":{"932":1}}],["则可以应用于多个不同的任务",{"2":{"918":1}}],["则可以像调用普通接口一样自定义",{"2":{"160":1}}],["则认为连接丢失",{"2":{"801":1}}],["则能以更轻松",{"2":{"613":1}}],["则难以在知识学问上有所成就",{"2":{"613":1}}],["则以生动的视角重塑了职场协作的责任逻辑",{"2":{"602":1}}],["则退出循环",{"2":{"489":1}}],["则需要具备洞察趋势的前瞻视野",{"2":{"459":1}}],["则需要考虑其他双向通信协议",{"2":{"119":1}}],["则会成为",{"2":{"444":1}}],["则通知用户任务完成",{"2":{"429":1}}],["则修改计划清单",{"2":{"429":1}}],["则更像一位经验丰富的",{"2":{"414":1}}],["则更像是一次",{"2":{"116":1}}],["则专注于解答需要跨信息源整合",{"2":{"349":1}}],["则专注于表现层的状态调度",{"2":{"342":1}}],["则目录下所有",{"2":{"333":1}}],["则直接挂载到全局对象",{"2":{"306":1}}],["则按",{"2":{"306":2}}],["则该属性无法被赋值",{"2":{"237":1}}],["则",{"2":{"203":1}}],["则必须引入复杂设计",{"2":{"181":1}}],["则触发此回调",{"2":{"163":1}}],["则避免了维护长连接和心跳保活的额外资源损耗",{"2":{"160":1}}],["则在跨系统的服务端间编织出一张事件驱动的网络",{"2":{"144":1}}],["则在我们设定的框架内高效填充实现细节",{"2":{"12":1}}],["则极为简洁",{"2":{"139":1}}],["则自动回滚缓存",{"2":{"100":1}}],["则是",{"2":{"584":1}}],["则是数学准确率的护城河",{"2":{"494":1}}],["则是一种将软件",{"2":{"296":1}}],["则是服务器",{"2":{"130":1}}],["则是基于此机制建立的一套标准化应用层协议",{"2":{"120":1}}],["则是在两者之间寻找平衡的艺术",{"2":{"67":1}}],["则是画蛇添足",{"2":{"67":1}}],["理性的结构约束",{"2":{"496":1}}],["理性人假说认为人是绝对自私且理智的",{"2":{"393":1}}],["理想的商业化优化是在不降低核心用户体验的前提下",{"2":{"399":1}}],["理想状态下",{"2":{"2":1}}],["理智与情感的共舞",{"0":{"366":1}}],["理念",{"2":{"342":1,"930":1}}],["理论的适用条件只要稍有些变化",{"2":{"608":1}}],["理论上你只需要修改",{"2":{"336":1}}],["理论说完",{"2":{"170":1}}],["理解世界的方式了",{"2":{"612":1}}],["理解链",{"2":{"610":1}}],["理解你的项目结构",{"2":{"557":1}}],["理解商业模式与用户痛点",{"2":{"556":1}}],["理解了机制",{"2":{"444":1}}],["理解并转化海量非结构化数据",{"2":{"417":1}}],["理解业务领域",{"2":{"282":1}}],["理解泛型的工作原理",{"2":{"254":1}}],["理解这些设计思想",{"2":{"597":1}}],["理解这些规范不仅是为了应付面试或处理老旧代码",{"2":{"309":1}}],["理解这些关系",{"2":{"244":1}}],["理解这两种类型的本质及其交互规律",{"2":{"250":1}}],["理解它是如何从初始目标一步步逼近最终答案的",{"2":{"427":1}}],["理解它能帮助我们写出更精妙的工具类型",{"2":{"234":1}}],["理解它只需搞懂两个核心时间参数",{"2":{"104":1}}],["理解联合类型和交叉类型的关键在于建立一个核心心智模型",{"2":{"227":1}}],["理解",{"2":{"66":1,"72":1,"314":1,"382":1,"598":2,"908":1}}],["恰好擅长处理信息流转",{"2":{"465":1}}],["恰恰就藏在这些看不见的连接之中",{"2":{"383":1}}],["恰恰体现在你敢于在",{"2":{"360":1}}],["恰到好处",{"2":{"66":1}}],["恰当粒度",{"2":{"9":1}}],["恰当粒度的功能或独立模块",{"2":{"9":1}}],["非常实用的透明度修饰符",{"2":{"933":1}}],["非常适合以业务逻辑为主",{"2":{"924":1}}],["非常适合基于组件化开发的现代框架",{"2":{"923":1}}],["非常适合前端",{"2":{"561":1}}],["非常适合快速迭代的产品",{"2":{"342":1}}],["非常适合用于管理全局状态",{"2":{"301":1}}],["非常适合实现",{"2":{"178":1}}],["非常适合文档站",{"2":{"66":1}}],["非代码",{"2":{"876":1}}],["非流式返回完整结果",{"2":{"856":1}}],["非流式",{"2":{"854":1}}],["非渲染场景节点",{"2":{"737":1}}],["非技术人员独立做出可上线产品",{"2":{"562":1}}],["非技术背景想独立做出有数据库的产品",{"2":{"562":1}}],["非结构化",{"0":{"504":1},"1":{"505":1,"507":1,"508":1}}],["非替代关系",{"2":{"349":1}}],["非必要环节",{"2":{"201":1}}],["非必要参数",{"2":{"195":1}}],["非致命错误",{"2":{"175":1}}],["非但没有退出历史舞台",{"2":{"145":1}}],["非",{"2":{"73":1,"93":1,"562":1}}],["非公开页面",{"2":{"58":1}}],["主给出的时间消耗建议",{"2":{"954":1}}],["主列出的这个东西可能就是当下自己没有梳理过的时间分配准则",{"2":{"954":1}}],["主在讲",{"2":{"954":1}}],["主品牌色",{"2":{"925":1}}],["主体",{"2":{"895":1}}],["主技能文件",{"2":{"881":1}}],["主工作流",{"2":{"880":1}}],["主控制器模块",{"0":{"832":1}}],["主控器类型定义",{"2":{"706":1}}],["主配置",{"2":{"823":1}}],["主实现",{"2":{"823":1}}],["主类",{"2":{"704":1,"706":1}}],["主页",{"2":{"699":1}}],["主包测试用例",{"2":{"647":1}}],["主编综述",{"2":{"632":1}}],["主会话中的项目上下文依然清晰",{"2":{"590":1}}],["主",{"2":{"590":1,"592":2,"647":1,"824":1,"832":1}}],["主力走质量优先的模型",{"2":{"523":1}}],["主力模型",{"2":{"523":1}}],["主打超长中文上下文",{"2":{"522":1}}],["主打轻量高效",{"2":{"512":1}}],["主搜索页",{"2":{"518":1}}],["主站全量上线",{"2":{"518":1}}],["主入口文件",{"2":{"490":1}}],["主文件",{"2":{"442":1}}],["主文件必须命名为",{"2":{"442":1}}],["主对话环境",{"2":{"415":1}}],["主智能体将课题分解为",{"2":{"474":1}}],["主智能体",{"2":{"415":1,"471":1}}],["主版本号",{"2":{"331":2}}],["主应用传递",{"2":{"289":1}}],["主应用中使用子应用组件",{"2":{"288":1}}],["主应用名称",{"2":{"288":1}}],["主应用",{"2":{"288":2,"290":1}}],["主应用负责加载子应用",{"2":{"288":1}}],["主应用负责路由分发",{"2":{"286":1}}],["主应用配置",{"2":{"288":1}}],["主题河流图",{"2":{"706":1}}],["主题对象",{"2":{"662":1}}],["主题编辑器辅助工具",{"2":{"647":1}}],["主题编辑辅助",{"2":{"646":1}}],["主题样式",{"2":{"647":1}}],["主题组件",{"2":{"647":1}}],["主题系统",{"2":{"647":1}}],["主题配置",{"2":{"274":1}}],["主题",{"2":{"274":1,"504":1,"505":2,"506":3,"507":1,"508":1,"645":1,"706":1}}],["主题切换",{"2":{"66":1}}],["主动适应远程办公工具等数字化",{"2":{"957":1}}],["主动使用技能",{"2":{"887":1}}],["主动建立个人过滤机制",{"2":{"624":1}}],["主动观察",{"2":{"585":1}}],["主动召唤",{"2":{"584":1}}],["主动性",{"2":{"402":1,"585":1}}],["主动取消并抛出",{"2":{"169":1}}],["主动释放连接",{"2":{"152":1}}],["主动拉取最新数据",{"2":{"135":1}}],["主动推送给服务端",{"2":{"130":1}}],["主动推送给浏览器",{"2":{"130":1}}],["主要原因有以下三点",{"2":{"957":1}}],["主要状态样式",{"2":{"924":1}}],["主要还是社会变化过快",{"2":{"906":1}}],["主要配角",{"2":{"903":1}}],["主要用户",{"2":{"843":1,"875":1}}],["主要用于",{"2":{"114":1}}],["主要公共",{"2":{"777":1}}],["主要分布",{"2":{"647":1}}],["主要模块的划分和组织方式",{"2":{"572":1}}],["主要由具备深厚算法背景和底层工程能力的顶级大厂或",{"2":{"551":1}}],["主要包括",{"2":{"443":1}}],["主要为一些包含静态资源的文件夹",{"2":{"442":1}}],["主要指上下文学习",{"2":{"410":1}}],["主要有先分解后规划",{"2":{"409":1}}],["主要内置于",{"2":{"343":1}}],["主要是想引出一些启发",{"2":{"917":1}}],["主要是为了解决",{"2":{"342":1}}],["主要是因为它能解决传统开发模式下的诸多痛点",{"2":{"297":1}}],["主要环境",{"2":{"308":1}}],["主要代表是",{"2":{"298":1}}],["主要目的",{"2":{"210":1}}],["主要依赖",{"2":{"155":1}}],["主要流程可概括为",{"2":{"151":1}}],["主要使用字符串",{"2":{"104":1}}],["主导或参与了多个基于大模型的应用落地",{"2":{"901":1}}],["主导开发",{"2":{"559":1}}],["主导",{"2":{"110":2,"647":1}}],["主流方案还包括预处理器",{"2":{"920":1}}],["主流",{"0":{"920":1},"2":{"545":1}}],["主流选择",{"2":{"21":1}}],["主流平台",{"2":{"19":1}}],["少量水饺",{"2":{"963":1}}],["少量水饺使用青椒",{"2":{"963":1}}],["少量水饺使用三文鱼",{"2":{"963":1}}],["少量组件",{"2":{"706":1}}],["少量或不需要",{"2":{"57":1}}],["少年天才",{"2":{"614":1}}],["少即是多",{"2":{"378":1}}],["少",{"2":{"66":1}}],["层以上的选择器",{"2":{"933":1}}],["层采用观察者模式",{"2":{"858":1}}],["层的核心契约",{"2":{"866":1}}],["层的消息抽象",{"2":{"854":1}}],["层的完整范式",{"2":{"842":1}}],["层的业务代码纹丝不动",{"2":{"336":1}}],["层次元素",{"2":{"762":1}}],["层次化场景图",{"2":{"740":1}}],["层生效",{"2":{"577":1}}],["层面",{"2":{"533":1,"622":1}}],["层出不穷的框架让人眼花缭乱",{"2":{"496":1}}],["层级嵌套过深以及维护成本极高等问题",{"2":{"920":1}}],["层级分明",{"2":{"597":1}}],["层级",{"2":{"274":1,"279":1,"733":1,"761":1,"787":1}}],["层级瞬间变薄",{"2":{"2":1}}],["层",{"2":{"66":1,"274":2,"336":5,"353":2,"645":1,"704":1,"705":1,"760":1,"761":2,"790":2,"791":2,"847":1,"848":1,"931":1,"933":1}}],["要结合实际情况具体处理",{"2":{"963":1}}],["要学会在不同的场景下切换到不同的阅读方式",{"2":{"946":1}}],["要考虑打工人工作比较忙碌的客观现实",{"2":{"942":1}}],["要有自己的想法",{"2":{"907":1}}],["要事第一",{"0":{"907":1},"2":{"907":2}}],["要执行的命令",{"2":{"895":1}}],["要设置到",{"2":{"839":1}}],["要找人讨论",{"2":{"610":1}}],["要找到新的想法",{"2":{"360":1}}],["要带着问题去读书",{"2":{"609":1}}],["要完整地读",{"2":{"608":1}}],["要完整实现",{"2":{"166":1}}],["要",{"0":{"608":1,"609":1,"610":1}}],["要做完整全栈",{"2":{"562":1}}],["要做好语言之间的桥梁",{"2":{"66":1}}],["要让",{"2":{"546":1}}],["要点项",{"2":{"472":1}}],["要不要成为全栈",{"2":{"466":1}}],["要极简",{"2":{"445":1}}],["要素的关联关系容易被忽略",{"2":{"908":1}}],["要素是易识别",{"2":{"908":1}}],["要素",{"0":{"383":1},"2":{"383":3,"908":1}}],["要写下来",{"2":{"375":1}}],["要在",{"2":{"372":1}}],["要训练产品",{"2":{"370":1}}],["要主动做预测",{"2":{"369":1}}],["要正确应用奥卡姆剃刀",{"2":{"181":1}}],["要理解",{"2":{"68":1}}],["要求寄语内容引用一些关于诗歌创作的名人名言",{"2":{"506":1}}],["要求思路内容说明细致",{"2":{"506":1}}],["要求与限制",{"2":{"494":1}}],["要求同时满足多个接口",{"2":{"270":1}}],["要求输入必须是",{"2":{"269":1}}],["要求输入数据必须有唯一标识",{"2":{"266":1}}],["要求泛型参数必须包含",{"2":{"266":1}}],["要求",{"2":{"2":1,"9":1,"722":1,"801":4,"807":1}}],["拓展机制",{"2":{"66":1}}],["替换或增强原有的关键帧插值逻辑",{"2":{"769":1}}],["替换为",{"2":{"308":3}}],["替换了",{"2":{"66":1}}],["替代盲目sleep",{"2":{"881":1}}],["替代品",{"2":{"515":1}}],["替代的元能力",{"0":{"460":1}}],["替代模糊的形容词",{"2":{"449":1}}],["替代",{"0":{"378":1},"2":{"460":2,"647":1,"845":1}}],["替代传统动态网站的复杂架构",{"2":{"32":1}}],["替代方案",{"2":{"20":1,"642":1,"673":1,"702":1,"730":1,"758":1,"845":1,"877":1,"881":1}}],["替代自建后端",{"2":{"16":1}}],["替代了",{"2":{"1":1}}],["根因追溯技术详解",{"2":{"881":1}}],["根因分析→修复设计→实施→验证",{"2":{"881":1}}],["根节点泄露",{"2":{"924":1}}],["根节点",{"2":{"737":1}}],["根容器",{"2":{"680":1,"684":1}}],["根渲染器",{"2":{"647":1}}],["根组件",{"2":{"647":1}}],["根",{"2":{"290":1,"653":1}}],["根目录",{"2":{"213":1}}],["根配置文件",{"2":{"647":1}}],["根配置应该只包含通用的",{"2":{"212":1}}],["根配置",{"0":{"212":1},"2":{"211":1,"216":1,"647":1,"849":1}}],["根布局",{"2":{"79":1}}],["根源不在于",{"2":{"66":1}}],["根据称重数据适当奖励自己",{"2":{"962":1}}],["根据状态赋予不同的原子类",{"2":{"925":1}}],["根据属性动态拼接类名",{"2":{"923":1}}],["根据图层类型",{"2":{"768":1}}],["根据目标后端",{"2":{"741":1}}],["根据语言标识创建",{"2":{"706":1}}],["根据修改内容生成",{"2":{"581":1}}],["根据当前任务的上下文动态加载所需的",{"2":{"547":1}}],["根据当前状态评估形势",{"2":{"427":1}}],["根据需要灵活使用文字",{"2":{"494":1}}],["根据指令需求",{"2":{"443":1}}],["根据推理结果",{"2":{"427":1}}],["根据环境反馈调整分解策略",{"2":{"424":1}}],["根据环境的即时反馈调整下一步动作",{"2":{"414":1}}],["根据你的错题逻辑实时调整教学大纲",{"2":{"407":1}}],["根据用户的自我选择",{"2":{"397":1}}],["根据文件路径加载模块",{"2":{"334":1}}],["根据业务变化调整限界上下文",{"2":{"282":1}}],["根据业务事件类型分发到对应回调",{"2":{"175":1}}],["根据限界上下文划分模块",{"2":{"282":1}}],["根据请求参数过滤数据",{"2":{"179":1}}],["根据字段名填充事件对象",{"2":{"168":1}}],["根据项目复杂度选择构建工具",{"2":{"32":1}}],["根据",{"2":{"26":1,"27":1,"179":1,"422":1,"543":1,"649":1,"768":2}}],["相信会取得更好的效果",{"2":{"943":1}}],["相信对大模型有一定了解的读者应该已经发现",{"2":{"918":1}}],["相信熟悉",{"2":{"917":1}}],["相信不少人已经比较熟悉",{"2":{"914":1}}],["相信很多人都听说过分解",{"2":{"912":1}}],["相机元素",{"2":{"762":1}}],["相机支持",{"2":{"755":1}}],["相机实体",{"2":{"737":1}}],["相机矩阵",{"2":{"734":1}}],["相机基类",{"2":{"734":1}}],["相机与投影",{"2":{"734":1}}],["相机",{"2":{"733":1,"753":1,"782":1}}],["相思无媒",{"2":{"508":1}}],["相同的声明式设计",{"2":{"470":1}}],["相辅相成",{"2":{"226":1}}],["相关的技术探索",{"2":{"901":1}}],["相关的类型标注都会被擦除",{"2":{"254":1}}],["相关配置",{"2":{"594":1}}],["相关技术",{"2":{"573":1}}],["相关技术文章",{"2":{"346":2}}],["相关源代码已开源至",{"2":{"477":1}}],["相关性",{"2":{"366":1}}],["相关问题",{"2":{"350":1}}],["相关选项",{"2":{"203":1}}],["相关",{"2":{"203":1,"734":1}}],["相较于",{"2":{"127":1}}],["相反",{"2":{"111":1,"608":1}}],["相对坐标计算",{"2":{"677":1}}],["相对冗长",{"2":{"341":1}}],["相对简单粗暴",{"2":{"110":1}}],["相对简陋",{"2":{"110":1}}],["相对的一种方案",{"2":{"38":1}}],["相比之前写出长文",{"2":{"906":1}}],["相比之下",{"2":{"606":1}}],["相比于关注用户的停留时长",{"2":{"350":1}}],["相比原生",{"2":{"160":1}}],["相比",{"2":{"65":1,"142":1,"160":1}}],["已完成实现",{"2":{"942":1}}],["已从",{"2":{"926":1}}],["已登录会话",{"2":{"790":1}}],["已废弃",{"2":{"762":1}}],["已处理元素包装",{"2":{"762":1}}],["已包装",{"2":{"661":1}}],["已包装好",{"2":{"652":1}}],["已包含完整的页面内容",{"2":{"65":1}}],["已被",{"2":{"647":1}}],["已迁移到",{"2":{"647":1}}],["已知",{"2":{"622":1}}],["已加入",{"2":{"573":1,"596":1}}],["已是最好的",{"2":{"558":1}}],["已在",{"2":{"518":1}}],["已关闭",{"2":{"489":1}}],["已成为",{"2":{"335":1}}],["已淡出历史舞台",{"2":{"308":1}}],["已调用",{"2":{"175":1}}],["已经悄然完成了三次跃迁",{"2":{"569":1}}],["已经从",{"2":{"553":1}}],["已经逐渐超越了",{"2":{"540":1}}],["已经不可逆地将每个人推向了全栈的起跑线",{"2":{"466":1}}],["已经为这一未来铺平了道路",{"2":{"419":1}}],["已经能够闭环完成",{"2":{"405":1}}],["已经让个体有机会摆脱庞大组织的束缚",{"2":{"381":1}}],["已经实现了优雅的隔离",{"2":{"933":1}}],["已经实现了",{"2":{"165":1}}],["已经包含页面内容",{"2":{"38":1}}],["已有深刻见解",{"2":{"391":1}}],["已有事件驱动基础设施",{"2":{"156":1}}],["已有成熟后端的大型企业项目",{"2":{"93":1}}],["被各行各业的人们知晓后",{"2":{"906":1}}],["被调用时",{"2":{"712":1}}],["被大量低质",{"2":{"621":1}}],["被埋没的人才",{"2":{"612":1}}],["被哀怨情绪控制",{"2":{"612":1}}],["被他们一通",{"2":{"610":1}}],["被动等待指令",{"2":{"585":1}}],["被动接收需求文档",{"2":{"556":1}}],["被动应答",{"2":{"115":1}}],["被严格限制为",{"2":{"470":1}}],["被无限放大了",{"2":{"361":1}}],["被称为",{"2":{"344":2}}],["被单位元法则消除",{"2":{"244":1}}],["被引用的项目类型可以被当前项目使用",{"2":{"207":1}}],["被视为不同的",{"2":{"927":1}}],["被视为一种玄学",{"2":{"363":1}}],["被视为",{"2":{"203":1}}],["被",{"0":{"357":1},"2":{"87":1}}],["被一种更简洁的模式取代",{"2":{"80":1}}],["被编译为",{"2":{"65":1}}],["被加载占位符包裹的动态部分",{"2":{"52":1}}],["源于细节",{"2":{"509":1}}],["源代码行数",{"2":{"755":1}}],["源代码主目录",{"2":{"677":1,"706":1,"762":1,"792":1,"823":1}}],["源代码总行数",{"2":{"643":1}}],["源代码",{"2":{"203":1,"217":1}}],["源代码编译",{"2":{"57":1}}],["源码到项目",{"2":{"926":1}}],["源码行数",{"2":{"699":1}}],["源码",{"2":{"72":1,"217":1}}],["源站服务器完全不参与响应",{"2":{"64":1}}],["命中检测",{"2":{"670":1,"673":1,"675":1,"683":1}}],["命中缓存时直接从边缘返回",{"2":{"64":1}}],["命名必须带",{"2":{"923":1}}],["命名约定",{"2":{"573":1}}],["命名",{"2":{"450":1,"921":1}}],["命名类型",{"2":{"330":1}}],["命名规范来缓解",{"2":{"921":1}}],["命名规范",{"0":{"330":1},"2":{"572":1,"920":1}}],["命名空间初始化",{"2":{"677":1}}],["命名空间",{"2":{"320":1}}],["命名空间与模块",{"0":{"320":1}}],["命名导入",{"2":{"310":1}}],["命名导出",{"2":{"310":2}}],["命名导出与导入",{"0":{"310":1}}],["命名与管理规范",{"2":{"110":1}}],["命名语义清晰",{"2":{"9":1}}],["命令定义",{"2":{"806":1}}],["命令流转",{"2":{"801":1}}],["命令参数定义",{"2":{"797":1}}],["命令实现",{"2":{"792":1}}],["命令执行引擎",{"2":{"792":1}}],["命令注册中心",{"2":{"792":1}}],["命令注册与",{"2":{"792":1}}],["命令注册",{"2":{"791":1}}],["命令解析",{"2":{"791":1}}],["命令解析器",{"2":{"790":1}}],["命令式",{"2":{"699":1}}],["命令是你告诉",{"2":{"585":1}}],["命令要原子化",{"2":{"583":1}}],["命令说明",{"2":{"581":1}}],["命令名称",{"2":{"581":1}}],["命令的价值",{"0":{"583":1}}],["命令的结构",{"0":{"581":1}}],["命令的存放位置",{"0":{"580":1}}],["命令和技能",{"2":{"570":1}}],["命令目录",{"2":{"470":1}}],["命令进行增量编译",{"2":{"216":1}}],["命令快速生成一个默认配置文件",{"2":{"202":1}}],["命令来编译单个文件",{"2":{"202":1}}],["命令",{"2":{"65":1,"282":1,"470":1,"567":2,"572":1,"573":1,"574":1,"583":1,"697":1,"784":1,"785":1,"792":1,"797":1,"801":1}}],["嵌入图表",{"2":{"471":1}}],["嵌入决策框架和自动化",{"2":{"462":1}}],["嵌入",{"2":{"410":1,"514":1,"518":1,"562":1,"886":1}}],["嵌入的",{"2":{"62":1}}],["嵌套与复用",{"2":{"921":1}}],["嵌套包装",{"2":{"851":1}}],["嵌套模式",{"2":{"850":1}}],["嵌套变换层级",{"2":{"677":1}}],["嵌套路由",{"2":{"77":1,"341":2}}],["嵌套",{"2":{"1":1,"921":2}}],["逐层拆解这套混合架构的设计思路",{"2":{"928":1}}],["逐层向叶子节点实现",{"2":{"3":1}}],["逐渐淘汰运行时",{"2":{"928":1}}],["逐帧推进",{"2":{"776":1}}],["逐帧处理变形",{"2":{"771":1}}],["逐像素绘制",{"2":{"699":1}}],["逐项落实",{"2":{"431":1}}],["逐梯跨越",{"2":{"403":1}}],["逐块解码而非等待全部接收",{"2":{"166":1}}],["逐步澄清需求",{"2":{"888":1}}],["逐步迁移",{"2":{"642":1}}],["逐步引入",{"2":{"597":1}}],["逐步演变为企业和个人不可或缺的核心生产力基础设施",{"2":{"419":1}}],["逐步重命名为",{"2":{"308":1}}],["逐步降低查询频率",{"2":{"140":1}}],["逐步填入空洞",{"2":{"87":1}}],["逐步填充",{"2":{"86":1}}],["逐一完成编译",{"2":{"62":1}}],["零心智负担",{"2":{"928":1}}],["零心智负担的最优解",{"2":{"928":1}}],["零学习成本",{"2":{"924":1,"928":1}}],["零依赖服务器",{"2":{"888":1}}],["零依赖头脑风暴可视化服务器",{"2":{"881":1}}],["零依赖",{"2":{"877":1}}],["零依赖设计",{"2":{"876":1}}],["零代码全栈建站",{"2":{"562":1}}],["零本地环境要求",{"2":{"561":1}}],["零环境配置从描述到上线全链路打通",{"2":{"561":1}}],["零门槛出产品的感觉",{"2":{"559":1}}],["零广告",{"2":{"518":1}}],["零散组件化为可持续的工作流",{"2":{"441":1}}],["零成本区分语义不同的类型",{"2":{"227":1}}],["零延迟",{"2":{"125":1}}],["零布局偏移",{"2":{"84":1}}],["零配置支持全部特性",{"2":{"94":1}}],["零配置",{"2":{"71":1}}],["零动态渲染",{"2":{"65":1}}],["零服务端计算",{"2":{"65":1}}],["零运行时方案",{"2":{"922":1}}],["零运行时开销",{"2":{"318":1}}],["零运行时",{"0":{"63":1},"2":{"61":1}}],["零计算",{"2":{"58":1}}],["前期准备",{"0":{"960":1}}],["前期需要投入大量时间进行领域建模",{"2":{"283":1}}],["前段时间看了毛爷爷在青年时期写下的",{"2":{"959":1}}],["前两种是",{"2":{"934":1}}],["前沿变体",{"2":{"928":1}}],["前沿",{"2":{"928":1}}],["前沿视角公式",{"0":{"367":1}}],["前者的洞察与后者的产出必然判若云泥",{"2":{"626":1}}],["前者能通过思考拆解落地路径",{"2":{"622":1}}],["前者保障代码规范",{"2":{"226":1}}],["前面有空行分隔",{"2":{"581":1}}],["前面的系列文章主要有",{"2":{"272":1}}],["前瞻",{"2":{"565":1}}],["前瞻规划",{"2":{"565":1}}],["前身为",{"2":{"478":1}}],["前身是",{"2":{"60":1}}],["前",{"2":{"451":3,"567":1}}],["前额叶",{"2":{"421":1}}],["前额叶皮层负责复杂的认知规划",{"2":{"421":1}}],["前后端",{"2":{"458":1}}],["前后端物理分离的标准化开发流水线",{"2":{"344":1}}],["前后端边界清晰",{"2":{"342":1}}],["前后端类型零成本共享",{"2":{"342":1}}],["前后端共享类型定义",{"2":{"280":1}}],["前后端接口约束极其清晰",{"2":{"110":1}}],["前端到复杂的跨平台小程序基础框架的架构升级",{"2":{"901":1}}],["前端实时渲染",{"2":{"864":1}}],["前端使用",{"2":{"864":1}}],["前端流式对话",{"0":{"864":1}}],["前端集成",{"2":{"845":1}}],["前端组件总数",{"2":{"643":1}}],["前端组件库开发",{"2":{"256":1}}],["前端开发者",{"2":{"639":1,"728":1,"756":1}}],["前端人力资源瓶颈",{"2":{"639":1}}],["前端界面快速出图",{"2":{"562":1}}],["前端工程师",{"2":{"700":1}}],["前端工程师可以编写复杂的",{"2":{"557":1}}],["前端工程化中的模块化",{"2":{"272":1}}],["前端页面还原代码",{"2":{"562":1}}],["前端页面",{"2":{"553":1}}],["前端从进阶到入院",{"2":{"346":2}}],["前端大全",{"2":{"346":2}}],["前端之神",{"2":{"346":2}}],["前端之巅",{"2":{"346":1}}],["前端之间共享一套类型声明模块时",{"2":{"326":1}}],["前端早读课",{"2":{"346":1}}],["前端边缘托管",{"2":{"345":1}}],["前端主导的敏捷全栈小队",{"2":{"344":2}}],["前端通过",{"2":{"342":1}}],["前端框架",{"2":{"342":1,"642":1}}],["前端拥有极高的数据按需组合自由度",{"2":{"342":1}}],["前端生态历经十余年",{"2":{"303":1}}],["前端领域专业的微信公众号",{"2":{"346":3}}],["前端领域的模块化并非一蹴而就",{"2":{"298":1}}],["前端领域模型",{"2":{"281":1}}],["前端领域模型设计",{"2":{"281":1}}],["前端模块化的演进历程",{"0":{"298":1}}],["前端应用服务",{"2":{"281":1}}],["前端业务逻辑",{"2":{"281":3}}],["前端也需要领域模型",{"2":{"281":1}}],["前端简化版",{"2":{"280":1}}],["前端",{"2":{"280":1,"376":1,"562":2,"573":1,"671":1,"842":1,"864":1}}],["前端分层架构",{"0":{"274":1}}],["前端项目通用配置",{"2":{"216":1}}],["前端项目",{"0":{"214":1},"2":{"211":1,"280":1}}],["前端传错了用户id",{"2":{"199":1}}],["前端可以像接水管一样",{"2":{"117":1}}],["前缀防止用户直接调用",{"2":{"866":1}}],["前缀提取消息内容",{"2":{"166":1}}],["前缀",{"2":{"166":1,"845":1}}],["前的数据快照",{"2":{"110":1}}],["前置校验",{"2":{"451":1}}],["前置输入",{"2":{"450":1}}],["前置信息",{"2":{"443":2}}],["前置概念",{"0":{"227":1}}],["前置步骤",{"2":{"3":1}}],["前置对齐",{"2":{"3":1}}],["又不得不逼着自己想方设法找到解决办法",{"2":{"950":1}}],["又称戴明环",{"2":{"943":1}}],["又要",{"2":{"928":1}}],["又传了",{"2":{"927":1}}],["又增加了时间维度的复杂性",{"2":{"388":1}}],["又从",{"2":{"337":1}}],["又反向导入",{"2":{"315":1}}],["又拥有",{"2":{"165":1}}],["又能进行深度思考与逻辑组织",{"2":{"502":1}}],["又能提升商业变现或用户粘性的路径",{"2":{"394":1}}],["又能保持代码整洁",{"2":{"249":1}}],["又能处理",{"2":{"238":1}}],["又能享受流式传输的实时性",{"2":{"160":1,"180":1}}],["又能确保代码质量",{"2":{"9":1}}],["又避免了",{"2":{"143":1}}],["又足够完整地呈现了",{"2":{"60":1}}],["⑥",{"2":{"59":1}}],["⑤",{"2":{"59":1,"66":1}}],["混入",{"2":{"706":1,"921":1,"932":1}}],["混乱",{"2":{"415":1}}],["混为一谈",{"2":{"159":1}}],["混合工作制最大的痛点是解决居家办公的苦恼",{"2":{"956":1}}],["混合工作制是基于空间与时间两个维度来安排要处理的事务",{"2":{"956":1}}],["混合工作制",{"2":{"936":1,"955":1}}],["混合",{"2":{"921":1,"928":1}}],["混合和过渡",{"2":{"743":1}}],["混合架构",{"2":{"636":1}}],["混合模式处理",{"2":{"762":1}}],["混合模式",{"2":{"354":1,"734":1,"742":1}}],["混合策略建议",{"0":{"157":1}}],["混合渲染器",{"2":{"762":1}}],["混合渲染与预渲染极致的自动导入",{"2":{"344":1}}],["混合渲染",{"0":{"75":1},"2":{"18":1,"71":1,"92":1,"344":1}}],["混用时的",{"2":{"59":1}}],["④",{"2":{"59":1,"66":1,"471":1}}],["③",{"0":{"64":1},"2":{"59":1,"65":1,"66":1,"471":1,"564":2}}],["发散",{"2":{"532":1}}],["发挥全栈工程师的技术优势",{"2":{"374":1}}],["发生任何错误时调用",{"2":{"839":1}}],["发生频率",{"2":{"465":1}}],["发生的时间节点",{"2":{"422":1}}],["发生的当下",{"2":{"372":1}}],["发生错误时不生成",{"2":{"203":1}}],["发现插件",{"2":{"795":1}}],["发现竟然还有那么多没吃透的地方",{"2":{"610":1}}],["发现自己还没搞懂的地方",{"2":{"610":1}}],["发现的问题按严重程度分为",{"2":{"591":1}}],["发现",{"2":{"484":1}}],["发现阶段",{"2":{"443":1}}],["发现走不通时及时掉头",{"2":{"408":1}}],["发现问题",{"0":{"358":1},"2":{"552":1}}],["发现是空字符串",{"2":{"199":1}}],["发布版本说明",{"2":{"881":1}}],["发布忽略文件",{"2":{"823":1}}],["发布忽略规则",{"2":{"762":1}}],["发布流程脚本",{"2":{"677":1}}],["发布与自动化脚本",{"2":{"647":1}}],["发布了一份具有里程碑意义的研究报告",{"2":{"525":1}}],["发布一些与前端相关的深度技术文章",{"2":{"346":3}}],["发布预发布版本",{"2":{"331":1}}],["发布订阅模式",{"0":{"302":1}}],["发布",{"2":{"203":1,"587":1,"762":1,"828":1}}],["发布节奏",{"2":{"59":1}}],["发起一个",{"2":{"839":1}}],["发起一场",{"2":{"375":1}}],["发起代码审查请求时",{"2":{"591":1}}],["发起声明式查询",{"2":{"342":1}}],["发起",{"2":{"166":1}}],["发起长连接请求",{"2":{"153":1}}],["发起第",{"2":{"149":1}}],["发起请求",{"2":{"33":1,"108":1,"151":1,"166":2,"832":1}}],["发送异步请求",{"2":{"663":1}}],["发送邮件",{"2":{"415":1}}],["发送通知",{"2":{"281":1}}],["发送通知等",{"2":{"131":1}}],["发送一个",{"2":{"131":1}}],["发送",{"2":{"95":1,"801":1}}],["发送给浏览器",{"2":{"73":1}}],["严谨安全",{"2":{"928":1}}],["严谨的评测体系",{"2":{"544":1}}],["严谨的数据推理和专业的文档输出能力",{"2":{"467":1}}],["严禁虚构或误导",{"2":{"494":1}}],["严禁在不同组件内重复",{"2":{"6":1}}],["严格时间表",{"2":{"952":1}}],["严格阶段",{"2":{"942":1}}],["严格管控",{"2":{"845":1}}],["严格输出",{"2":{"534":1}}],["严格遵循五律平仄",{"2":{"507":1}}],["严格遵循了五言律诗的平仄与对仗",{"2":{"507":1}}],["严格遵守",{"2":{"506":1}}],["严格顺序",{"2":{"472":1}}],["严格匹配",{"2":{"450":1}}],["严格的执行秩序",{"2":{"932":1}}],["严格的工程规范",{"2":{"442":1}}],["严格的文本契约",{"0":{"121":1}}],["严格控制上下文窗口的",{"2":{"441":1}}],["严格解耦",{"2":{"342":1}}],["严格模式已开启",{"2":{"572":1}}],["严格模式",{"2":{"204":2,"212":1}}],["严格模式下的函数类型检查",{"2":{"203":1}}],["严格",{"2":{"203":1}}],["严格属性初始化检查",{"2":{"203":1}}],["严格空值检查",{"2":{"203":1}}],["严密的状态机能更好地管理这些复杂的",{"2":{"113":1}}],["严重影响",{"2":{"59":1}}],["②",{"0":{"63":1},"2":{"59":1,"65":1,"66":1,"471":1,"564":3}}],["解绑事件处理器",{"2":{"719":1}}],["解读案例",{"0":{"637":1}}],["解读",{"2":{"504":2,"505":4,"506":1,"507":2,"508":1}}],["解释执行",{"2":{"655":1}}],["解释代码片段",{"2":{"582":1}}],["解释",{"2":{"493":1}}],["解释说明",{"2":{"136":1}}],["解题步骤及案例必须正确无误",{"2":{"494":1}}],["解题",{"2":{"493":1}}],["解剖",{"0":{"373":1},"2":{"371":1}}],["解构",{"0":{"371":1,"458":1},"1":{"372":1,"373":1,"374":1,"375":1,"459":1,"460":1,"461":1,"462":1}}],["解构产品",{"0":{"364":1},"1":{"365":1,"366":1,"367":1}}],["解法",{"2":{"370":1}}],["解答机",{"2":{"358":1}}],["解答问题",{"2":{"357":1}}],["解码当前块",{"2":{"168":1}}],["解码为字符串",{"2":{"168":1}}],["解码",{"2":{"166":1}}],["解耦",{"2":{"142":1,"853":1}}],["解耦与消息队列",{"0":{"138":1}}],["解决布局",{"2":{"928":1}}],["解决复杂的业务场景",{"2":{"545":1}}],["解决冲突或准备",{"2":{"451":1}}],["解决",{"2":{"408":4,"411":3,"439":1,"541":1}}],["解决它能为业务带来多大的增量",{"2":{"365":1}}],["解决问题的",{"2":{"615":1}}],["解决问题",{"0":{"358":1}}],["解决了家长",{"2":{"494":1}}],["解决了传统",{"2":{"344":1}}],["解决了以下核心问题",{"2":{"292":1}}],["解决浏览器阻塞问题",{"2":{"308":1}}],["解决的核心痛点",{"0":{"814":1},"2":{"639":1,"699":1,"728":1,"755":1,"842":1,"874":1}}],["解决的就是",{"2":{"439":1}}],["解决的是",{"2":{"437":2}}],["解决的是交付时机问题",{"2":{"87":1}}],["解决的问题是计算成本",{"2":{"88":1}}],["解决的问题",{"2":{"84":1,"89":1}}],["解决思路",{"2":{"59":3}}],["解决方案可能是汽车",{"2":{"366":1}}],["解决方案不只是优化代码",{"2":{"366":1}}],["解决方案",{"2":{"59":2,"728":1}}],["解析模型",{"2":{"863":1}}],["解析模块时的基础路径",{"2":{"203":1}}],["解析任意字节块为",{"2":{"840":1}}],["解析流水线",{"2":{"833":1}}],["解析流水线详解",{"0":{"168":1}}],["解析事件流",{"2":{"832":1}}],["解析行缓冲为",{"2":{"840":1}}],["解析行缓冲",{"2":{"830":1,"833":1}}],["解析命令",{"2":{"796":1}}],["解析命令并执行",{"2":{"795":1}}],["解析属性路径如",{"2":{"743":1}}],["解析器单元测试",{"2":{"823":2}}],["解析器",{"2":{"734":1,"823":1}}],["解析并持有整个",{"2":{"709":1}}],["解析并存储",{"2":{"704":1}}],["解析方法",{"2":{"662":1}}],["解析等",{"2":{"647":1}}],["解析渲染引擎",{"2":{"647":1}}],["解析引擎",{"2":{"641":1,"647":1}}],["解析为",{"2":{"62":1,"203":1}}],["解析",{"2":{"27":1,"65":1,"166":1,"175":1,"583":1,"645":1,"647":1,"686":1,"706":1,"708":1,"717":1,"761":1,"770":1,"833":1,"847":1,"856":1}}],["①",{"0":{"62":1},"2":{"59":1,"65":1,"66":1,"471":1,"564":3}}],["富于音乐美",{"2":{"506":1}}],["富应用",{"2":{"58":1}}],["富文本渲染逻辑省略",{"2":{"27":1}}],["富文本",{"2":{"26":1}}],["否则容易导致适应性下降",{"2":{"915":1}}],["否则",{"2":{"839":1}}],["否则我们并不知道自己在追求什么",{"2":{"359":1}}],["否则请坚持使用",{"2":{"320":1}}],["否则返回",{"2":{"259":1}}],["否则会造成瞬时并发压力",{"2":{"171":1}}],["否则构建阶段会直接报错",{"2":{"84":1}}],["否",{"2":{"58":4,"155":4,"571":1,"832":1,"833":2}}],["必然",{"2":{"948":2}}],["必然有",{"2":{"387":1}}],["必然是对现有常识的颠覆与补充",{"2":{"360":1}}],["必要时显式指定",{"2":{"263":1}}],["必要时在",{"2":{"58":1}}],["必要实体",{"2":{"200":1}}],["必要的预判",{"2":{"200":1}}],["必要",{"2":{"196":3}}],["必用",{"2":{"184":3}}],["必需的响应头",{"2":{"164":1}}],["必需",{"2":{"78":1,"442":1}}],["必须严格遵循",{"2":{"933":1}}],["必须确保工作流为",{"2":{"932":1}}],["必须删除代码重来",{"2":{"890":1}}],["必须通过",{"2":{"573":1}}],["必须遵守的规则",{"2":{"573":1}}],["必须遵循",{"2":{"451":1}}],["必须遵循以下前缀",{"2":{"451":1}}],["必须解决上下文遗忘和知识幻觉的问题",{"2":{"546":1}}],["必须是",{"2":{"801":1}}],["必须是对应的",{"2":{"451":1}}],["必须是字符串",{"2":{"178":1}}],["必须运行本地校验逻辑",{"2":{"451":1}}],["必须能经受住以下灵魂拷问",{"2":{"450":1}}],["必须包含",{"2":{"442":1}}],["必须产出完整的步骤清单",{"2":{"423":1}}],["必须向架构和复杂逻辑转型",{"2":{"405":1}}],["必须动态导入",{"2":{"333":1}}],["必须使用",{"2":{"333":1}}],["必须先下载并执行所有的依赖模块",{"2":{"305":1}}],["必须先转码为",{"2":{"124":1}}],["必须有",{"2":{"263":1}}],["必须启用",{"2":{"208":1,"213":2}}],["必须显式声明类型",{"2":{"203":1}}],["必须显式定义读写边界",{"2":{"6":1}}],["必须引入的",{"2":{"192":1}}],["必须基于流式",{"2":{"160":1}}],["必须消除",{"2":{"142":1}}],["必须正视其局限性",{"2":{"124":1}}],["必须以双换行符",{"2":{"121":1}}],["必须在",{"2":{"84":1}}],["必须果断将其裂变为更细粒度的子组件",{"2":{"2":1}}],["■",{"2":{"57":2}}],["图2",{"2":{"907":1,"915":1,"916":1}}],["图1",{"2":{"907":1,"915":1,"916":1}}],["图绘制规范",{"2":{"881":1}}],["图案填充",{"2":{"706":1,"715":1}}],["图结构",{"2":{"706":1}}],["图层对象代理",{"2":{"762":1}}],["图层创建",{"2":{"762":1}}],["图层元素",{"2":{"765":1}}],["图层元素基类",{"2":{"762":1,"765":1}}],["图层元素系统",{"2":{"762":1}}],["图层契约",{"2":{"692":1}}],["图层",{"2":{"677":1,"679":1,"765":1}}],["图层系统",{"2":{"672":1}}],["图形工具",{"2":{"706":1}}],["图形元素",{"2":{"706":1,"709":1}}],["图形基类",{"2":{"704":1}}],["图形对象基类",{"2":{"682":1}}],["图形树管理层",{"2":{"675":1,"676":1}}],["图形编辑器",{"2":{"671":2}}],["图形编程",{"2":{"346":1}}],["图形一致性",{"2":{"670":1}}],["图形框架",{"2":{"670":1}}],["图形",{"2":{"647":1}}],["图标组件库",{"2":{"647":1}}],["图标",{"2":{"647":1}}],["图标库",{"2":{"645":1}}],["图标文件",{"2":{"643":1}}],["图标等资源",{"2":{"442":1}}],["图文多模态理解",{"2":{"512":1,"522":1}}],["图",{"2":{"511":2,"521":1,"636":1,"706":3}}],["图像层等",{"2":{"765":1}}],["图像元素",{"2":{"762":3}}],["图像处理",{"2":{"734":1}}],["图像理解",{"2":{"494":1}}],["图像内容理解",{"2":{"494":1}}],["图像",{"2":{"338":1,"410":1,"418":1,"511":1,"521":1,"523":2,"671":1,"677":1,"843":1,"849":1}}],["图片来自",{"2":{"916":3}}],["图片预加载",{"2":{"765":1}}],["图片预加载覆盖",{"2":{"762":1}}],["图片预加载器",{"2":{"762":1}}],["图片加载",{"2":{"677":1,"734":1}}],["图片加载拖慢页面",{"2":{"84":1}}],["图片合成",{"2":{"671":1}}],["图片解析",{"2":{"518":1}}],["图片识别和网盘资源检索",{"2":{"518":1}}],["图片",{"2":{"343":1,"521":1,"719":1}}],["图片等",{"2":{"30":1}}],["图表渲染成",{"2":{"881":1}}],["图表语言",{"2":{"877":1}}],["图表特定的视觉编码",{"2":{"715":1}}],["图表视图",{"2":{"709":1}}],["图表主实例",{"2":{"709":1}}],["图表辅助",{"2":{"706":1}}],["图表类型实现",{"2":{"706":1}}],["图表类型",{"2":{"704":1}}],["图表到",{"2":{"472":1}}],["图表生成",{"2":{"472":1}}],["图表",{"2":{"74":1,"470":1,"471":1,"472":1,"639":1,"708":1,"711":1}}],["图例颜色",{"2":{"715":1}}],["图例切换",{"2":{"706":1}}],["图例切换等丰富的交互行为",{"2":{"699":1}}],["图例组件",{"2":{"706":1}}],["图例",{"2":{"57":1,"709":1}}],["⭐⭐",{"2":{"562":1}}],["⭐",{"2":{"57":2,"522":2,"562":5}}],["████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"57":1}}],["████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"57":1}}],["██████████████████████████████████████████████████████",{"2":{"57":3}}],["████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"57":2}}],["████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"57":2}}],["████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"57":4}}],["██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░",{"2":{"57":2}}],["│◄──────────►│",{"2":{"790":1}}],["││",{"2":{"790":8,"799":3,"800":10,"801":17}}],["│",{"2":{"57":124,"58":54,"73":3,"79":7,"155":10,"190":3,"191":1,"211":13,"274":206,"275":72,"279":8,"280":613,"290":133,"470":14,"471":14,"474":18,"570":31,"647":443,"677":96,"706":273,"734":632,"762":523,"790":161,"792":177,"796":27,"797":8,"799":87,"800":53,"801":56,"823":6,"830":83,"832":43,"833":95,"849":15,"881":217}}],["动效",{"2":{"782":1,"931":1}}],["动动嘴皮子就能生成完整项目",{"2":{"569":1}}],["动词",{"2":{"505":1}}],["动作与事件系统",{"0":{"654":1}}],["动作对象",{"2":{"650":1}}],["动作处理中枢",{"2":{"647":1}}],["动作系统",{"2":{"645":1,"647":1}}],["动作生成",{"2":{"412":1}}],["动作",{"2":{"412":1,"449":1}}],["动静分离",{"0":{"87":1}}],["动静混合",{"2":{"57":1,"58":1}}],["动画管理系统",{"2":{"776":1}}],["动画管理层",{"2":{"760":1,"761":2}}],["动画的核心引擎",{"2":{"770":1}}],["动画循环控制",{"2":{"767":1}}],["动画注册中心",{"2":{"767":1}}],["动画生命周期管理器",{"0":{"767":1}}],["动画生命周期管理模块",{"2":{"762":1}}],["动画属性契约",{"2":{"776":1}}],["动画属性关键帧插值引擎",{"2":{"770":1}}],["动画属性与关键帧插值系统",{"0":{"770":1}}],["动画属性",{"2":{"765":2}}],["动画实例契约",{"2":{"776":1}}],["动画实例创建",{"2":{"773":1}}],["动画实例通过事件通知管理器状态变化",{"2":{"767":1}}],["动画实例",{"2":{"765":1}}],["动画实例核心",{"2":{"762":1}}],["动画演示页面",{"2":{"762":1}}],["动画无法正确渲染",{"2":{"758":1}}],["动画数据在浏览器中以",{"2":{"755":1}}],["动画解析与原生渲染引擎",{"2":{"755":1}}],["动画调度器",{"2":{"743":1}}],["动画求解器",{"2":{"734":1}}],["动画对象组",{"2":{"734":1}}],["动画动作",{"2":{"734":1,"743":1}}],["动画片段",{"2":{"734":1,"743":1}}],["动画混合器",{"2":{"734":1}}],["动画系统采用关键帧插值架构",{"2":{"743":1}}],["动画系统",{"0":{"743":1},"2":{"706":1}}],["动画引擎契约",{"2":{"692":1}}],["动画引擎",{"0":{"686":1},"2":{"672":1,"677":1,"679":1,"686":1}}],["动画和交互的轻量级方案",{"2":{"671":1}}],["动画工具",{"2":{"647":1,"734":1}}],["动画",{"2":{"74":1,"693":1,"728":1,"755":1,"756":2,"762":5}}],["动态主题等长期演进需求",{"2":{"928":1}}],["动态属性容器",{"2":{"762":1}}],["动态数据",{"2":{"700":1}}],["动态数据通过",{"2":{"16":1}}],["动态表单与配置化后台",{"2":{"640":1}}],["动态挂载",{"2":{"547":1}}],["动态上下文注入",{"2":{"536":1}}],["动态发现与按需执行",{"2":{"441":1}}],["动态加载不同的技能",{"2":{"443":1}}],["动态加载",{"2":{"436":1,"800":1}}],["动态闭环的关键",{"2":{"429":1}}],["动态重判断",{"2":{"427":1}}],["动态响应模式",{"0":{"427":1}}],["动态记忆能力",{"2":{"426":1}}],["动态更新与实时同步",{"2":{"417":1}}],["动态调整执行策略",{"2":{"477":1}}],["动态调整",{"2":{"412":1}}],["动态地为其他模块增加功能",{"2":{"325":1}}],["动态地组合各种功能模块",{"2":{"248":1}}],["动态导入",{"0":{"313":1}}],["动态导入子应用组件",{"2":{"288":1}}],["动态装配",{"2":{"248":1}}],["动态切换",{"2":{"155":1}}],["动态页面中的静态大模块",{"2":{"88":1}}],["动态洞",{"2":{"87":1}}],["动态的",{"2":{"82":1}}],["动态",{"0":{"82":1},"2":{"333":1,"549":1}}],["动态例外",{"2":{"59":1}}],["动态后长",{"2":{"57":1}}],["动态按需",{"2":{"57":1}}],["动态内容后补",{"2":{"87":1}}],["动态内容",{"2":{"57":1}}],["动态内容必须等待构建",{"2":{"55":1}}],["动态部分走",{"2":{"57":1}}],["动态部分逐一填充",{"2":{"52":1}}],["动态部分通过流式加载逐步呈现",{"2":{"51":1}}],["动态组件在请求时渲染",{"2":{"57":1}}],["动态组件走流式",{"2":{"57":1}}],["动态组件取决于其刷新策略",{"2":{"57":1}}],["动态组件独立渲染",{"2":{"57":1}}],["动态组件独立缓存",{"2":{"57":1}}],["动态组件独立流式返回",{"2":{"57":1}}],["动态组件",{"2":{"52":1}}],["动态生成属性的",{"2":{"682":1}}],["动态生成",{"2":{"35":1,"682":1,"928":1}}],["动态路由",{"2":{"27":1,"77":1}}],["动态功能通过",{"2":{"32":1}}],["动态功能",{"2":{"23":1}}],["且容易影响膝盖",{"2":{"964":1}}],["且主食为半份糙米饭",{"2":{"963":1}}],["且基于再次分解的结论标出预估耗时",{"2":{"953":2}}],["且由于",{"2":{"948":1}}],["且感觉比较实用",{"2":{"943":1}}],["且将下面这张图作为自己的日常饮食原则",{"2":{"942":1}}],["且系统践行了此嗜好",{"2":{"936":1}}],["且初步实现了开放",{"2":{"935":1}}],["且覆盖优先级极难控制",{"2":{"933":1}}],["且保证不污染全局环境",{"2":{"931":1}}],["且得益于",{"2":{"930":1}}],["且严重破坏",{"2":{"928":1}}],["且会导致类名冗长",{"2":{"920":1}}],["且会破坏现有的高利润广告位",{"2":{"354":1}}],["且消费一天后还剩余的零钱铜板去赌一把",{"2":{"917":1}}],["且大大压缩了存储空间",{"2":{"916":1}}],["且向一些大佬咨询请教后",{"2":{"906":1}}],["且模型完全开源支持本地部署",{"2":{"522":1}}],["且访问更为便捷",{"2":{"510":1}}],["且突出重点",{"2":{"506":1}}],["且要求解读内容优雅",{"2":{"506":1}}],["且可扩展",{"2":{"491":1}}],["且借助低利润将潜在进入者挡在门外",{"2":{"392":1}}],["且常年运行",{"2":{"391":1}}],["且需要自己住进去的房子",{"2":{"380":1}}],["且前后端团队规模较大",{"2":{"342":1}}],["且",{"2":{"236":1,"310":1,"367":1,"901":1,"928":1}}],["且该参数是联合类型时",{"2":{"234":1}}],["且值唯一",{"2":{"230":1}}],["且接收方是服务端而非浏览器",{"2":{"143":1}}],["且无法实现真正的全双工并发",{"2":{"143":1}}],["且服务器永远处于",{"2":{"115":1}}],["且数据格式必须遵循一套严密的",{"2":{"121":1}}],["且数据流向单一",{"2":{"112":1}}],["且数据相对动态的页面",{"2":{"57":1}}],["且多个组件使用此",{"2":{"107":1}}],["且完整",{"2":{"5":1}}],["万物有规则可循的思维方式",{"2":{"963":1}}],["万物皆数",{"2":{"958":1}}],["万花筒效果",{"2":{"677":1}}],["万",{"2":{"511":1,"512":2,"522":2}}],["万级",{"2":{"155":1}}],["万级页面构建慢",{"2":{"57":1}}],["万个长连接",{"2":{"137":1}}],["万名用户同时排队等图片",{"2":{"137":1}}],["万能的",{"2":{"327":1}}],["万能法则",{"2":{"200":1}}],["万能",{"2":{"32":1}}],["快与慢只是表象",{"2":{"965":1}}],["快刀斩乱麻",{"2":{"952":1}}],["快结束时遇到了一个特别有意思的娱乐活动",{"2":{"917":1}}],["快来和我一起",{"2":{"508":1}}],["快用你的灵感为世界添一首诗吧",{"2":{"507":1}}],["快乐工作五十年",{"2":{"942":1}}],["快乐",{"2":{"340":1}}],["快捷方式",{"2":{"304":1}}],["快照生成",{"2":{"792":1}}],["快照格式化",{"2":{"792":1}}],["快照与提取",{"2":{"790":1}}],["快照测试",{"2":{"225":1}}],["快照测试等",{"2":{"225":1}}],["快照渲染",{"2":{"110":1}}],["快部分先送达用户",{"2":{"86":1}}],["快",{"2":{"57":2,"343":2}}],["快速组建",{"2":{"928":1}}],["快速验证想法并上线",{"2":{"926":1}}],["快速路径检查",{"2":{"796":1}}],["快速路径",{"2":{"795":1}}],["快速路径优化",{"2":{"792":1}}],["快速补全",{"2":{"792":1}}],["快速图层",{"2":{"677":1,"679":1}}],["快速开始",{"0":{"664":1,"694":1,"721":1,"750":1,"779":1,"808":1,"869":1,"897":1},"1":{"665":1,"666":1,"667":1,"668":1,"695":1,"696":1,"697":1,"722":1,"723":1,"724":1,"725":1,"726":1,"751":1,"752":1,"753":1,"780":1,"781":1,"782":1,"809":1,"810":1,"811":1,"870":1,"871":1,"872":1,"898":1,"899":1,"900":1}}],["快速开发",{"2":{"23":1}}],["快速入门与角色化阅读指南",{"2":{"636":1}}],["快速获取建站初始模板",{"2":{"562":1}}],["快速选择建议",{"2":{"562":1}}],["快速复现竞品界面",{"2":{"561":1}}],["快速迭代",{"2":{"561":1}}],["快速构建最小可行性产品",{"2":{"556":1}}],["快速事实核查",{"2":{"518":1}}],["快速对话",{"2":{"502":2}}],["快速上手",{"0":{"479":1},"1":{"480":1,"481":1}}],["快速生成可部署全栈",{"2":{"562":1}}],["快速生成摘要或建议",{"2":{"465":1}}],["快速生图",{"2":{"142":1}}],["快速通道",{"2":{"456":1}}],["快速进行文章总结",{"2":{"435":1}}],["快速结算",{"2":{"366":1}}],["快速跨越多个领域的知识盲区",{"2":{"358":1}}],["快速搭建微前端应用",{"2":{"287":1}}],["快速的测试编写和执行方式",{"2":{"220":1}}],["快速响应且数据保持更新",{"2":{"342":1}}],["快速响应",{"2":{"142":1}}],["快速",{"2":{"92":1,"350":1}}],["快速初始化项目结构与配置文件",{"2":{"3":1}}],["慢慢也就开悟了",{"2":{"959":1}}],["慢慢注重这方面了",{"2":{"942":1}}],["慢慢意识自身不足",{"2":{"938":1}}],["慢公司",{"2":{"601":1}}],["慢思考推理链",{"2":{"512":1}}],["慢部分后台渲染后流式注入",{"2":{"86":1}}],["慢",{"2":{"57":1}}],["维护与发布自动化脚本",{"2":{"881":1}}],["维护性",{"2":{"822":1}}],["维护一个",{"2":{"767":1}}],["维护一个缓冲区",{"2":{"166":1}}],["维护全局动画列表",{"2":{"686":1}}],["维护全局",{"2":{"684":1}}],["维护位置",{"2":{"680":1}}],["维护",{"2":{"677":1,"680":1,"682":1}}],["维护底层数据存储与服务稳定",{"2":{"553":1}}],["维护税复杂度不仅是",{"2":{"365":1}}],["维护成本升高",{"2":{"183":1}}],["维护了一个极其严密的状态机",{"2":{"104":1}}],["维持长连接",{"2":{"143":1}}],["维持架构的清爽",{"2":{"2":1}}],["维度名称",{"2":{"706":1}}],["维度",{"2":{"57":1,"115":1,"134":1,"155":1,"159":1,"415":1,"432":1,"441":1,"519":1,"553":1,"556":1,"643":1,"730":1,"877":1,"921":1,"922":1,"924":1,"925":1,"934":1}}],["773行",{"2":{"762":1}}],["752行",{"2":{"762":1}}],["75",{"2":{"753":1,"942":1}}],["75+",{"2":{"646":1,"647":1}}],["71kb",{"2":{"734":1}}],["76kb",{"2":{"734":1}}],["7+",{"2":{"665":1}}],["785行",{"2":{"647":1}}],["79kb",{"2":{"647":1,"734":1}}],["7",{"0":{"56":1,"57":1,"58":1,"59":1,"91":1,"92":1,"93":1,"94":1,"135":1,"136":1,"137":1,"138":1,"139":1,"140":1,"283":1,"291":1,"316":1,"323":1,"344":1,"388":1,"433":1,"440":1,"456":1,"491":1,"589":1,"590":1,"591":1,"592":1,"664":1,"665":1,"666":1,"667":1,"668":1,"694":1,"695":1,"696":1,"697":1,"778":1,"808":1,"809":1,"810":1,"811":1,"868":1,"897":1,"898":1,"899":1,"900":1,"927":1},"1":{"57":1,"58":1,"59":1,"92":1,"93":1,"94":1,"136":1,"137":1,"138":1,"139":1,"140":1,"324":1,"325":1,"590":1,"591":1,"592":1,"665":1,"666":1,"667":1,"668":1,"695":1,"696":1,"697":1,"809":1,"810":1,"811":1,"898":1,"899":1,"900":1},"2":{"419":2,"441":1,"643":1,"876":1,"888":1,"889":1,"935":1,"952":3}}],["70+",{"2":{"647":1,"785":1,"786":1,"790":1,"791":1,"792":2}}],["7000",{"2":{"705":1,"715":1}}],["700",{"2":{"343":1,"925":2,"927":1}}],["70",{"2":{"1":2}}],["建个人",{"2":{"515":1}}],["建筑图纸制",{"2":{"423":1}}],["建造你想住的房子",{"0":{"380":1}}],["建议配置",{"2":{"481":1}}],["建议直接查阅官方示例仓库",{"2":{"467":1}}],["建议结合前文",{"2":{"433":1}}],["建议把它固化进你的思考框架中",{"2":{"389":1}}],["建议",{"2":{"291":1,"322":1,"577":1,"591":1}}],["建议遵循以下最佳实践",{"2":{"291":1}}],["建议遵循以下步骤",{"2":{"282":1}}],["建议在非核心页面验证后再应用于生产环境",{"2":{"55":1}}],["建立碎片清单",{"2":{"953":1}}],["建立在浅表层的",{"2":{"616":1}}],["建立特定场景的",{"2":{"550":1}}],["建立分级信任机制",{"2":{"537":1}}],["建立一套严谨的语义层",{"2":{"532":1}}],["建立了一条通往专业领域的",{"2":{"456":1}}],["建立全局航向",{"2":{"429":1}}],["建立起知识间的逻辑联系",{"2":{"417":1}}],["建立起真正意义上的",{"2":{"125":1}}],["建立统一语言",{"2":{"282":1}}],["建立丰富的领域模型",{"2":{"276":1}}],["建立",{"0":{"369":1},"2":{"169":1,"175":1,"626":1}}],["建立反向数据流",{"0":{"7":1}}],["建文件即建路由",{"2":{"76":1}}],["整出了一个粗糙的时间统计",{"2":{"954":1}}],["整洁度",{"2":{"927":1}}],["整本地读",{"0":{"608":1},"2":{"608":1}}],["整合场景图",{"2":{"728":1}}],["整合",{"2":{"523":1}}],["整合业务逻辑与数据访问",{"2":{"191":1}}],["整理规范",{"2":{"597":1}}],["整理",{"2":{"514":1}}],["整体保持第三阶段的执行",{"2":{"964":1}}],["整体分层架构",{"2":{"761":1}}],["整体任务",{"2":{"712":1}}],["整体架构图",{"0":{"646":1,"676":1,"705":1,"733":1,"761":1,"790":1,"848":1,"880":1}}],["整体架构设计",{"0":{"644":1,"674":1,"703":1,"731":1,"759":1,"788":1,"846":1,"878":1},"1":{"645":1,"646":1,"647":1,"675":1,"676":1,"677":1,"704":1,"705":1,"706":1,"732":1,"733":1,"734":1,"760":1,"761":1,"762":1,"789":1,"790":1,"791":1,"792":1,"847":1,"848":1,"849":1,"850":1,"851":1,"879":1,"880":1,"881":1},"2":{"636":1}}],["整体上依然优于国内模型",{"2":{"510":1}}],["整体来讲",{"2":{"412":1}}],["整个时间统计采用了由局部到整体的方式",{"2":{"954":1}}],["整个架构的发动机",{"2":{"928":1}}],["整个系统的入口是",{"2":{"883":1}}],["整个场景图的入口",{"2":{"684":1}}],["整个应用以树形结构组织",{"2":{"679":1}}],["整个链路基本是这样的",{"2":{"553":1}}],["整个",{"2":{"494":1}}],["整个流程容易陷入死循环或彻底失败",{"2":{"423":1}}],["整个结果都是零",{"2":{"366":1}}],["整个社区的",{"2":{"321":1}}],["整个过程完全基于标准",{"2":{"131":1}}],["整个过程用户感知到的是页面在",{"2":{"52":1}}],["整个页面退化为",{"2":{"74":1}}],["整个页面退化为传统",{"2":{"74":1}}],["整页按统一",{"2":{"48":1}}],["伴随动态组件的加载占位符一起返回",{"2":{"52":1}}],["部分处理",{"2":{"833":1}}],["部分免费",{"2":{"523":1}}],["部分模型免费",{"2":{"523":2}}],["部分模型开源",{"2":{"522":1}}],["部分模型推理能力已逼近国际顶尖",{"2":{"519":1}}],["部分吗",{"2":{"518":1}}],["部分开源",{"2":{"512":1,"522":1}}],["部分岗位可能被替代",{"2":{"405":1}}],["部分",{"2":{"135":1,"178":4}}],["部分成功",{"2":{"113":1}}],["部分个性化",{"2":{"58":1}}],["部分静态",{"2":{"58":1}}],["部分需要",{"2":{"57":1}}],["部分预渲染",{"2":{"51":1,"57":1}}],["部署方式",{"2":{"573":1}}],["部署环境能否稳定访问海外",{"2":{"519":1}}],["部署与托管",{"0":{"345":1}}],["部署首选",{"2":{"94":1}}],["部署架构",{"2":{"71":1}}],["部署后用户发起请求时",{"2":{"43":1}}],["部署时直接将这些静态文件分发到",{"2":{"42":1}}],["部署时仅需将这些静态文件托管到",{"2":{"14":1}}],["部署",{"2":{"32":1,"33":2,"71":2,"94":1,"284":1,"343":1,"345":1,"567":1,"570":1,"573":1,"587":1}}],["部署完成后",{"2":{"29":1}}],["部署到",{"0":{"29":1},"2":{"29":1,"43":1}}],["部署平台",{"0":{"19":1}}],["部署成本",{"2":{"15":1}}],["部署前完成",{"2":{"15":1}}],["按平台输出不同",{"2":{"880":1}}],["按功能组合",{"2":{"762":1}}],["按功能属性分类",{"2":{"411":1}}],["按渲染类型创建对应元素",{"2":{"761":1}}],["按场景选择",{"2":{"757":1}}],["按顺序执行",{"2":{"712":1}}],["按优先级排序后组成",{"2":{"712":1}}],["按优先级排序后执行",{"2":{"708":1}}],["按优先级排序的",{"2":{"704":1}}],["按路径正则匹配",{"2":{"649":1}}],["按路由周期失效",{"2":{"48":1}}],["按概念",{"2":{"628":1}}],["按照这种方式",{"2":{"907":1}}],["按照以下步骤执行",{"2":{"581":1}}],["按照固定格式组织",{"2":{"159":1}}],["按关注点命名",{"2":{"578":1}}],["按模型计费",{"2":{"568":1}}],["按量充值",{"2":{"523":1}}],["按量充值使用",{"2":{"523":1}}],["按量",{"2":{"523":1}}],["按量付费",{"2":{"523":1}}],["按量计费",{"2":{"523":1,"568":1}}],["按",{"2":{"523":7,"649":1,"652":1,"706":1,"715":1}}],["按项目符号列表输出",{"2":{"435":1}}],["按实现方式分类",{"2":{"411":1}}],["按钮点击",{"2":{"654":1,"756":1}}],["按钮分类图标",{"2":{"647":1}}],["按钮位置",{"2":{"418":1}}],["按钮背后的数据流向",{"2":{"383":1}}],["按钮",{"2":{"366":1,"677":1,"925":1}}],["按下暂停键",{"2":{"360":1}}],["按团队职责划分",{"2":{"291":1}}],["按业务领域划分",{"2":{"291":1}}],["按业务分级",{"2":{"157":1}}],["按限界上下文组织",{"2":{"280":2}}],["按依赖顺序",{"2":{"216":1}}],["按职责拆分小方法",{"2":{"200":1}}],["按事件组装",{"2":{"168":2}}],["按行分割",{"2":{"168":2}}],["按行分割数据",{"2":{"166":1}}],["按换行符分割提取完整行",{"2":{"168":1}}],["按换行符分割",{"2":{"166":1}}],["按客户端分级",{"2":{"157":1}}],["按策略进入等待",{"2":{"148":1}}],["按设备宽度生成多尺寸",{"2":{"84":1}}],["按需编译",{"2":{"925":1}}],["按需消费不同类型的流",{"2":{"844":1}}],["按需引入图表和组件",{"2":{"725":1}}],["按需引入",{"0":{"725":1},"2":{"733":1}}],["按需引入并使用这些功能",{"2":{"295":1}}],["按需调用",{"2":{"547":1}}],["按需调用文件夹内的辅助资源",{"2":{"443":1}}],["按需动态加载这些技能",{"2":{"547":1}}],["按需推理与",{"2":{"523":1}}],["按需读取",{"2":{"443":1}}],["按需加载功能",{"2":{"760":1}}],["按需加载减小体积",{"2":{"758":1}}],["按需加载",{"2":{"442":2,"701":1,"702":1}}],["按需验证的轻量级缓存",{"2":{"342":1}}],["按需验证缓存",{"2":{"342":1}}],["按需声明式查询",{"2":{"342":1}}],["按需声明交互边界",{"0":{"74":1}}],["按需装配能力",{"2":{"248":1}}],["按需依赖",{"0":{"194":1}}],["按需设计",{"0":{"185":1}}],["按需重新验证",{"2":{"97":1}}],["按需生成",{"2":{"59":1}}],["按需失效是",{"2":{"48":1}}],["按需失效",{"2":{"48":1}}],["按需失效机制",{"2":{"46":1}}],["按页面粒度混合不同",{"2":{"51":1}}],["下午拍篮球",{"2":{"961":1}}],["下午和晚上等时间的分配",{"2":{"954":1}}],["下午与晚上预留出阅读与学习时间",{"2":{"952":1}}],["下载",{"2":{"792":1}}],["下载进度显示",{"2":{"792":1}}],["下载模块入口",{"2":{"792":1}}],["下载功能",{"2":{"792":1}}],["下载步骤测试",{"2":{"792":1}}],["下载执行后才开始接收内容",{"2":{"57":1}}],["下面是一个",{"2":{"573":1}}],["下面我们分别深入联合类型与交叉类型",{"2":{"227":1}}],["下表从工程实践角度对两者进行了对比总结",{"2":{"432":1}}],["下的文件按需注册渲染器和功能模块",{"2":{"764":1}}],["下的自动化工程",{"0":{"428":1},"1":{"429":1,"430":1,"431":1}}],["下的最佳配置实践",{"2":{"317":1}}],["下",{"2":{"392":1,"394":1}}],["下限被拔高了",{"2":{"359":1}}],["下一次见面时",{"2":{"610":1}}],["下一个测试",{"2":{"890":1}}],["下一个",{"2":{"348":1}}],["下一位用户获得最新页面",{"2":{"47":1}}],["下发队列",{"2":{"138":1}}],["下次遇到需要实时数据推送的场景时",{"2":{"180":1}}],["下次退避时间从",{"2":{"175":1}}],["下次一定触发后台校验",{"2":{"104":1}}],["下次访问时用户获得最新页面",{"2":{"47":1}}],["下游合并数据",{"2":{"663":1}}],["下游",{"2":{"5":1}}],["过深的嵌套也会导致",{"2":{"933":1}}],["过渡动画",{"2":{"925":1}}],["过拟合",{"2":{"915":1}}],["过卷",{"2":{"915":1}}],["过滤",{"2":{"712":1}}],["过滤方法",{"2":{"662":1}}],["过滤的完整管线",{"2":{"652":1}}],["过滤器链",{"2":{"652":1}}],["过滤器注册系统",{"2":{"647":1}}],["过滤器",{"2":{"124":1,"275":1,"851":1}}],["过于冗长的配置会大量消耗上下文窗口",{"2":{"572":1}}],["过于臃肿",{"2":{"570":1}}],["过于模糊",{"2":{"448":1}}],["过于具体",{"2":{"445":1}}],["过往的工作范式可能被颠覆",{"2":{"403":1}}],["过往的经验往往会瞬间失效",{"2":{"382":1}}],["过分",{"2":{"362":1}}],["过去的",{"2":{"558":1}}],["过去我们在翻阅文档",{"2":{"531":1}}],["过去我们常把",{"2":{"97":1}}],["过去可能要花一整天写的监控脚本",{"2":{"528":1}}],["过去",{"2":{"361":1,"528":1,"541":1,"616":1}}],["过细则会带来严重的认知负担和路径查找成本",{"2":{"329":1}}],["过粗会导致难以复用",{"2":{"329":1}}],["过度使用",{"2":{"890":1}}],["过度沉溺书籍细节与附属品会导致",{"2":{"613":1}}],["过度依赖",{"0":{"193":1}}],["过度预判需求",{"2":{"183":1}}],["过度抽象的架构",{"0":{"190":1}}],["过度抽象",{"0":{"189":1},"1":{"190":1,"191":1},"2":{"182":1}}],["过度设计风险",{"2":{"283":1}}],["过度设计",{"0":{"184":1},"2":{"181":1,"933":1}}],["过短",{"2":{"59":1}}],["过期后重新生成",{"2":{"57":1}}],["过期后",{"2":{"47":1}}],["过程中也可让",{"2":{"3":1}}],["速度提升",{"2":{"845":1}}],["速度幻觉",{"2":{"526":1}}],["速度是副产品",{"2":{"526":1}}],["速度",{"2":{"75":1}}],["速度与",{"2":{"47":1}}],["速度快",{"2":{"19":1}}],["后随笔",{"2":{"948":1}}],["后敲字有聊",{"2":{"948":1}}],["后来健身房也就成了几个已经找到工作的懒人的澡堂子啦",{"2":{"962":1}}],["后来在日本传授质量控制",{"2":{"943":1}}],["后来随着工作和生活阅历的增加",{"2":{"942":1}}],["后来也在不少场合以经历回顾的方式传授给很多年轻人",{"2":{"914":1}}],["后来笔者也观察到身边大部分人也是没能将这些理论应用到实际工作中",{"2":{"912":1}}],["后来",{"2":{"909":1}}],["后处理pass",{"2":{"734":1}}],["后处理用",{"2":{"734":1}}],["后处理框架",{"2":{"734":1}}],["后处理",{"2":{"733":1,"932":1}}],["后处理效果等",{"2":{"732":1}}],["后处理效果",{"2":{"729":1}}],["后处理等完整",{"2":{"728":1}}],["后将自身注册到全局动画列表",{"2":{"686":1}}],["后置处理",{"2":{"685":1}}],["后执行额外逻辑",{"2":{"685":1}}],["后缀",{"2":{"923":2}}],["后缀区分团队共享与个人私有配置",{"2":{"570":1}}],["后缀决定论",{"2":{"333":1}}],["后训练",{"2":{"551":2}}],["后工业时代",{"2":{"539":1}}],["后期阶段",{"2":{"387":1}}],["后会被完全抹除",{"2":{"318":1}}],["后序遍历",{"2":{"314":1}}],["后被",{"2":{"244":1}}],["后的代码",{"2":{"203":1}}],["后者仅停留在",{"2":{"622":1}}],["后者在复杂项目中能显著提升代码可读性",{"2":{"263":1}}],["后者统一代码风格",{"2":{"226":1}}],["后者牺牲了安全性",{"2":{"181":1}}],["后者多了两个无证据的",{"2":{"181":1}}],["后又收到",{"2":{"173":1}}],["后面的",{"2":{"833":1}}],["后面的内容",{"2":{"166":1}}],["后面还有数据",{"2":{"166":1}}],["后重试",{"2":{"149":1}}],["后",{"2":{"70":1,"135":1,"414":1,"432":1,"525":1,"610":1,"907":1}}],["后台页面重复开发",{"2":{"639":1}}],["后台定时刷新",{"2":{"75":1}}],["后台管理系统强行套用",{"2":{"67":1}}],["后台系统",{"2":{"58":1}}],["后台静默重新渲染",{"2":{"47":1}}],["后台静默重新生成新版本",{"2":{"47":1}}],["后台触发",{"2":{"47":1}}],["后续的解析",{"2":{"856":1}}],["后续的",{"2":{"304":1}}],["后续维护者能够快速理解数据的结构和流向",{"2":{"255":1}}],["后续通信采用",{"2":{"126":1}}],["后续增量更新",{"2":{"57":1}}],["后续按周期或按需更新",{"2":{"57":1}}],["后续用户在",{"2":{"47":1}}],["后续请求直接复用缓存",{"2":{"46":1}}],["后端调用",{"2":{"864":1}}],["后端初始化",{"2":{"748":1}}],["后端的完整渲染管线流程",{"2":{"745":1}}],["后端的类型变更会即刻反映为前端编译期的静态类型检查报错",{"2":{"342":1}}],["后端抽象接口",{"2":{"734":1}}],["后端实现层",{"2":{"732":1,"733":1}}],["后端工程师可以写出像素级完美的前端",{"2":{"557":1}}],["后端工程师借助",{"2":{"529":1}}],["后端接口",{"2":{"553":1}}],["后端核心数据流",{"2":{"542":1}}],["后端开发者",{"2":{"639":1}}],["后端开发者转型最顺滑",{"2":{"540":1}}],["后端开发成本极高",{"2":{"342":1}}],["后端是如何处理高并发的",{"2":{"374":1}}],["后端主导的中大型团队",{"2":{"344":1}}],["后端使用",{"2":{"342":1}}],["后端需要同时服务于",{"2":{"342":1}}],["后端架构",{"2":{"408":1}}],["后端架构守望者",{"2":{"337":1}}],["后端架构的天然要求",{"0":{"138":1}}],["后端模块化分层架构",{"0":{"275":1}}],["后端项目使用",{"2":{"215":1}}],["后端项目",{"0":{"215":1},"2":{"211":1,"280":1}}],["后端处理失败",{"2":{"153":1}}],["后端任务处理失败",{"2":{"149":1}}],["后端",{"2":{"138":1,"280":1,"376":1,"562":1,"573":1,"673":1,"677":2,"734":3,"742":3,"864":1,"926":1}}],["后端能力补充",{"0":{"20":1}}],["后端渲染",{"2":{"15":1}}],["9月份",{"2":{"964":1}}],["91",{"2":{"928":1}}],["9步工作流",{"2":{"881":1}}],["9种",{"2":{"762":1}}],["9kb",{"2":{"734":1}}],["920",{"2":{"705":1}}],["95+",{"2":{"645":1,"646":2,"647":1}}],["95",{"2":{"643":1}}],["953",{"2":{"643":1}}],["939",{"2":{"643":1}}],["99kb",{"2":{"734":1}}],["99",{"2":{"605":1}}],["999",{"2":{"260":1}}],["900",{"2":{"705":1,"925":3,"927":1}}],["90",{"0":{"930":1},"2":{"375":1,"405":1,"928":2,"930":1,"934":2}}],["9",{"0":{"67":1,"144":1,"346":1,"597":1,"934":1},"2":{"46":2,"152":1,"643":1,"757":1,"888":2,"927":1,"959":1}}],["放眼望去",{"2":{"938":1}}],["放到工作中也是同理",{"2":{"383":1}}],["放置所有项目通用的配置选项",{"2":{"216":1}}],["放在第一位",{"2":{"914":1}}],["放在项目根目录下",{"2":{"202":1}}],["放在哪",{"2":{"6":1}}],["放入",{"2":{"94":1}}],["放弃传统广告位",{"2":{"354":1}}],["放弃绝对实时性",{"2":{"50":1}}],["放弃实时渲染能力",{"2":{"45":1}}],["执行和调整之外",{"2":{"906":1}}],["执行和构建有更深层的掌控力",{"2":{"309":1}}],["执行单一任务后经两阶段审查",{"2":{"889":1}}],["执行任务",{"2":{"880":1}}],["执行支撑层",{"2":{"879":1,"880":1}}],["执行工具",{"2":{"859":1,"863":1}}],["执行浏览器命令",{"2":{"801":1,"807":2}}],["执行策略枚举",{"2":{"797":1}}],["执行适配器",{"2":{"796":1}}],["执行引擎",{"2":{"790":1}}],["执行缓动插值",{"2":{"770":1}}],["执行绘制命令",{"2":{"748":1}}],["执行gpu渲染",{"2":{"736":1}}],["执行底层",{"2":{"736":1}}],["执行所有",{"2":{"719":1}}],["执行顺序",{"2":{"715":1}}],["执行调度管道",{"2":{"708":1}}],["执行批量绘制",{"2":{"680":1}}],["执行函数调用",{"2":{"655":1}}],["执行步骤",{"2":{"626":1}}],["执行是为了将假设放入真实环境中跑通测试",{"2":{"622":1}}],["执行+不思考",{"2":{"622":1}}],["执行断层",{"2":{"617":1}}],["执行以下工作",{"2":{"591":1}}],["执行方式",{"2":{"590":1}}],["执行的具体指令",{"2":{"581":1}}],["执行命令并逐步反馈",{"2":{"567":1}}],["执行之间",{"2":{"532":1}}],["执行摘要串联当日最重要变化与判断",{"2":{"632":1}}],["执行摘要",{"2":{"472":1}}],["执行流观察",{"0":{"474":1}}],["执行流",{"2":{"450":1}}],["执行前",{"2":{"450":1}}],["执行前进行全局拆解",{"2":{"432":1}}],["执行阶段",{"2":{"443":1}}],["执行过程中实时推理",{"2":{"432":1}}],["执行器并不关心最终目标有多宏观",{"2":{"429":1}}],["执行器",{"2":{"429":1}}],["执行力度",{"2":{"622":1}}],["执行力",{"2":{"411":1}}],["执行预定义的静态任务",{"2":{"403":1}}],["执行者身份",{"2":{"592":1}}],["执行者",{"2":{"402":1}}],["执行动作",{"2":{"357":1}}],["执行数据验证与类型转换",{"2":{"275":1}}],["执行计算着色器",{"2":{"748":1}}],["执行计算",{"2":{"138":1}}],["执行相应业务逻辑",{"2":{"131":1}}],["执行页面组件代码",{"2":{"43":1}}],["执行",{"0":{"357":1},"2":{"39":2,"43":1,"62":1,"422":1,"436":1,"472":2,"478":1,"559":1,"567":1,"581":1,"590":1,"622":1,"769":1,"801":1}}],["执行机构",{"2":{"11":1}}],["代表技术",{"2":{"921":1,"922":1,"923":1,"924":1,"925":1,"927":1,"928":1}}],["代表一个着色器计算单元",{"2":{"741":1}}],["代表一个不可能存在的值",{"2":{"232":1}}],["代表人耳",{"2":{"734":1}}],["代表着",{"2":{"592":1}}],["代表了那些如果没有",{"2":{"526":1}}],["代表工具",{"2":{"305":1}}],["代表任意类型",{"2":{"258":1}}],["代表框架",{"2":{"38":1,"42":1,"46":1}}],["代替",{"2":{"203":1}}],["代价",{"0":{"129":1}}],["代价是服务器开销",{"2":{"67":1}}],["代价是放弃实时性",{"2":{"67":1}}],["代理属性的",{"2":{"769":1}}],["代理",{"2":{"570":1}}],["代理平台",{"2":{"523":1}}],["代理服务",{"2":{"119":1}}],["代理与缓冲",{"0":{"119":1}}],["代码容易变得非常长",{"2":{"925":1}}],["代码容易变得面条化",{"2":{"110":1}}],["代码设计与实现",{"2":{"902":1}}],["代码补全工具",{"2":{"874":1}}],["代码分割加载",{"2":{"782":1}}],["代码规范配置",{"2":{"762":1}}],["代码格式化",{"2":{"697":1}}],["代码格式检查",{"2":{"677":1}}],["代码提交前自动安全检查",{"2":{"592":1}}],["代码提测速度",{"2":{"385":1}}],["代码要写得好",{"2":{"578":1}}],["代码检查",{"2":{"573":1,"845":1,"871":1}}],["代码发往云端",{"2":{"565":2}}],["代码默认存于本地",{"2":{"564":1}}],["代码工人",{"2":{"558":1}}],["代码审查器角色定义",{"2":{"881":1}}],["代码审查时提到",{"2":{"587":1}}],["代码审查",{"2":{"553":1,"583":1,"881":1}}],["代码审计与验收",{"2":{"555":1}}],["代码审计",{"2":{"415":1}}],["代码等多格式文件解析与深度研究模式",{"2":{"522":1}}],["代码等垂直搜索模式",{"2":{"518":1}}],["代码垂直搜索",{"2":{"518":1}}],["代码与逻辑推理能力已逼近",{"2":{"522":1}}],["代码与数学",{"2":{"512":1}}],["代码与数学推理",{"2":{"512":1}}],["代码与文档质量高",{"2":{"511":1,"521":1}}],["代码和多模态等方面表现出色",{"2":{"512":1}}],["代码编写与复杂推理任务",{"2":{"511":1}}],["代码编写者",{"2":{"303":1}}],["代码创作",{"2":{"511":1}}],["代码助手",{"2":{"512":1}}],["代码助手等场景有更高要求的用户",{"2":{"510":1}}],["代码助手自动生成样板代码",{"2":{"405":1}}],["代码解释器",{"2":{"494":2}}],["代码示意如下",{"2":{"489":1}}],["代码示例",{"2":{"333":1,"925":1}}],["代码绘图",{"2":{"475":1}}],["代码库分析",{"2":{"628":1}}],["代码库",{"2":{"465":1}}],["代码重构等完整工程周期",{"2":{"567":1}}],["代码重构",{"2":{"451":1}}],["代码执行",{"2":{"439":1}}],["代码仓库",{"2":{"417":1}}],["代码异味",{"2":{"363":1}}],["代码风格配置",{"2":{"734":1}}],["代码风格规范",{"2":{"575":1}}],["代码风格倾向于",{"2":{"414":1}}],["代码风格",{"2":{"341":1,"436":1,"591":1}}],["代码之间",{"2":{"329":1}}],["代码演示",{"2":{"327":1}}],["代码契约",{"2":{"319":1}}],["代码引用",{"2":{"317":1}}],["代码怎么写",{"2":{"316":1}}],["代码量从几千行迅速增长到数万甚至数十万行",{"2":{"294":1}}],["代码共享",{"2":{"286":1}}],["代码更简洁",{"2":{"263":1}}],["代码意图更加清晰",{"2":{"255":1}}],["代码复用性的质变",{"2":{"255":1}}],["代码复用",{"2":{"253":1}}],["代码质量审查子agent提示词",{"2":{"881":1}}],["代码质量等",{"2":{"636":1}}],["代码质量要求",{"2":{"573":1}}],["代码质量",{"2":{"226":1,"845":1,"889":1}}],["代码无缝集成",{"2":{"220":1}}],["代码最终会被编译为",{"2":{"217":1}}],["代码生成准确率极高",{"2":{"928":1}}],["代码生成工具",{"2":{"734":1}}],["代码生成器",{"2":{"733":1}}],["代码生成等场景",{"2":{"512":1}}],["代码生成等多种能力",{"2":{"512":1}}],["代码生成与调试",{"2":{"511":1,"512":1,"521":1,"522":1}}],["代码生成的边际成本正在无限趋近于零",{"2":{"376":1}}],["代码生成",{"2":{"204":1,"512":2,"519":2,"521":1,"932":1}}],["代码生成选项",{"2":{"203":1}}],["代码的生产流程",{"2":{"525":1}}],["代码的物理边界终会在打包工具的运转下被抹平或重组",{"2":{"303":1}}],["代码的职责变得异常清晰",{"2":{"295":1}}],["代码的",{"2":{"203":1}}],["代码中的",{"2":{"186":1}}],["代码长度翻倍",{"2":{"184":1}}],["代码实现",{"0":{"186":1},"1":{"187":1,"188":1},"2":{"182":1,"462":1}}],["代码将极其干净",{"2":{"112":1}}],["代码",{"2":{"73":1,"201":1,"202":2,"203":2,"217":1,"338":1,"339":1,"382":1,"511":1,"512":3,"518":1,"521":1,"522":5,"553":1,"562":1,"565":1,"568":1,"741":2,"877":1,"922":1,"925":1}}],["代码拆分",{"2":{"71":1}}],["代码高亮",{"2":{"66":1}}],["代码后置",{"2":{"9":1}}],["换行",{"2":{"677":1}}],["换平台只需改一行",{"2":{"523":1}}],["换到了",{"2":{"336":1}}],["换简洁",{"2":{"200":3}}],["换取了声明式",{"2":{"673":1}}],["换取极高的加载性能和服务器端的安全性",{"2":{"45":1}}],["换取首屏速度和",{"2":{"41":1}}],["换取首屏之后的流畅交互体验",{"2":{"37":1}}],["换来的是数据流转的绝对清晰与可预测性",{"2":{"7":1}}],["通道",{"2":{"929":1}}],["通道调整",{"2":{"677":2}}],["通识教育是相当重要的",{"2":{"918":1}}],["通义等低成本模型的场景",{"2":{"568":1}}],["通义千问驱动",{"2":{"518":1}}],["通义千问",{"2":{"510":1,"512":2,"522":1,"559":1}}],["通勤路上听知识",{"2":{"515":1}}],["通俗易懂的方式呈现",{"2":{"494":1}}],["通讯软件",{"2":{"465":1}}],["通读",{"2":{"362":1}}],["通读保罗",{"2":{"357":1}}],["通用思路",{"2":{"925":1}}],["通用对象池工厂",{"2":{"762":1}}],["通用对话",{"2":{"522":1}}],["通用入口",{"2":{"706":1}}],["通用逻辑",{"2":{"706":1}}],["通用工具与核心引擎",{"2":{"762":1}}],["通用工具函数库",{"2":{"706":1}}],["通用工具函数",{"2":{"677":1,"792":1}}],["通用工具",{"2":{"647":1}}],["通用辅助函数",{"2":{"647":1}}],["通用接口",{"2":{"440":1}}],["通用接口和类的设计",{"2":{"256":1}}],["通用型",{"2":{"419":1}}],["通用",{"0":{"414":1},"2":{"414":1,"734":3}}],["通用模块定义",{"2":{"298":1}}],["通用类型",{"2":{"274":1}}],["通用的函数和组件",{"2":{"270":1}}],["通用的数据库操作函数",{"2":{"269":1}}],["通用的数据处理函数",{"2":{"266":1}}],["通用的配置对象类型",{"2":{"262":1}}],["通用场景",{"2":{"263":1}}],["通用数据容器",{"2":{"261":1}}],["通用数据结构的实现",{"2":{"256":1}}],["通用语言",{"2":{"115":1}}],["通知用户",{"2":{"489":1}}],["通知底层断开连接",{"2":{"174":1}}],["通知客户端",{"2":{"152":1}}],["通知交易结果",{"2":{"132":1}}],["通信层",{"2":{"790":1,"791":1}}],["通信基建",{"2":{"342":2}}],["通信",{"2":{"292":1,"336":1,"799":1}}],["通信复杂",{"2":{"287":1}}],["通信机制",{"2":{"286":1}}],["通信协议全景",{"2":{"145":1,"158":1}}],["通信协议体系中的定位尚不清晰",{"2":{"145":1}}],["通信双方会进入全双工对等传输状态",{"2":{"127":1}}],["通信必须由客户端发起请求",{"2":{"115":1}}],["通信的稳固基石",{"2":{"115":1}}],["通信的基石",{"0":{"115":1}}],["通信方案",{"2":{"114":1}}],["通常内嵌在组件内",{"2":{"922":1}}],["通常已加入",{"2":{"571":1}}],["通常会面临",{"2":{"468":1}}],["通常会设置一个最大等待时间",{"2":{"148":1}}],["通常利用外部向量数据库",{"2":{"410":1}}],["通常通过利用外部向量存储与快速检索来实现",{"2":{"408":1}}],["通常用于客户端从服务端加载数据",{"2":{"342":1}}],["通常用于模块只包含一个核心功能",{"2":{"311":1}}],["通常就是拆分的信号",{"2":{"329":1}}],["通常需要配合",{"2":{"921":1}}],["通常需要通过",{"2":{"320":1}}],["通常需要编写两个独立函数",{"2":{"255":1}}],["通常涉及多个领域对象",{"2":{"278":1}}],["通常不需要启用",{"2":{"216":1}}],["通常不是最优选择",{"2":{"37":1}}],["通常是针对某个特定的任务而言的",{"2":{"918":1}}],["通常是稀疏的",{"2":{"916":1}}],["通常是共享库",{"2":{"216":1}}],["通常是第三方应用",{"2":{"131":1}}],["通常配合",{"2":{"203":1}}],["通常将",{"2":{"202":1}}],["通常使用",{"2":{"152":1}}],["通常",{"2":{"143":1,"814":1}}],["通常只能发起",{"2":{"143":1}}],["通常只有",{"2":{"35":1}}],["通常为",{"2":{"137":1}}],["通常可借助",{"2":{"95":1}}],["通过构建稳健的心智模型来应对不稳定的大环境",{"2":{"950":1}}],["通过构建黄金测试集",{"2":{"550":1}}],["通过控制饮食",{"2":{"942":1}}],["通过引入",{"2":{"934":1}}],["通过引导用户在产品中积累数据",{"2":{"398":1}}],["通过类名强制约束团队遵循第一层定义的",{"2":{"930":1}}],["通过类名组合实现样式",{"2":{"340":1}}],["通过工具类",{"2":{"928":1}}],["通过配置对象来映射对应的",{"2":{"927":1}}],["通过组合这些",{"2":{"925":1}}],["通过增加选择器特异性在底层",{"2":{"924":1}}],["通过添加变量",{"2":{"921":1}}],["通过添加语义化类名",{"2":{"340":1}}],["通过严格的命名约定",{"2":{"920":1}}],["通过病态方程组",{"2":{"915":1}}],["通过环境变量判断使用哪种格式",{"2":{"895":1}}],["通过流程图",{"2":{"887":1}}],["通过流式日志",{"2":{"491":1}}],["通过检测环境变量",{"2":{"886":1}}],["通过检索工具",{"2":{"411":1}}],["通过语言约束",{"2":{"876":1}}],["通过可组合的技能",{"2":{"874":1}}],["通过系统提示词定义",{"2":{"859":1}}],["通过浏览器扩展",{"2":{"799":1}}],["通过命令行快速使用网站功能",{"2":{"784":1}}],["通过简单的",{"2":{"756":1}}],["通过遍历场景树进行射线检测",{"2":{"740":1}}],["通过节点图编译到",{"2":{"732":1}}],["通过树形结构组织",{"2":{"732":1}}],["通过树形节点结构提供对",{"2":{"670":1}}],["通过统一",{"2":{"729":1}}],["通过统一的适配器模式抹平差异",{"2":{"842":2}}],["通过统一的",{"2":{"711":1}}],["通过比较新旧数据索引数组",{"2":{"713":1}}],["通过抽象渲染后端",{"2":{"670":1}}],["通过渲染器工厂",{"2":{"649":1}}],["通过执行验证可行性",{"2":{"622":1}}],["通过执行验证选择",{"2":{"622":1}}],["通过思考判断信息价值",{"2":{"622":1}}],["通过重建",{"2":{"604":1}}],["通过重构深化领域模型",{"2":{"282":1}}],["通过识别成长的",{"2":{"603":1}}],["通过批判性思维与深度阅读夯实",{"2":{"603":1}}],["通过关键词匹配自动激活",{"2":{"592":1}}],["通过实现和接入",{"2":{"548":1}}],["通过近期社区活动的互动",{"2":{"509":1}}],["通过本次",{"2":{"509":1}}],["通过明确的",{"2":{"506":1}}],["通过对比试验",{"2":{"503":1}}],["通过对比学习",{"2":{"426":1}}],["通过编写和执行代码来处理复杂的数学计算",{"2":{"493":1}}],["通过标准化的插件流水线对其进行转化",{"2":{"932":1}}],["通过标准化的接口将",{"2":{"789":1}}],["通过标准化的协议",{"2":{"411":1}}],["通过标准化",{"2":{"491":1}}],["通过封装",{"2":{"490":1}}],["通过会话",{"2":{"478":1,"491":1}}],["通过搜索",{"2":{"470":1}}],["通过数据图表",{"2":{"468":1}}],["通过交互式引导",{"2":{"454":1}}],["通过规范驱动",{"2":{"440":1}}],["通过自动生成唯一的哈希类名来防止",{"2":{"923":1}}],["通过自动委派或手动调用",{"2":{"438":1}}],["通过自定义工具",{"2":{"491":1}}],["通过自定义",{"2":{"274":1}}],["通过回顾过去的失败经验来优化当下的决策",{"2":{"426":1}}],["通过回调机制解决浏览器端网络延迟问题",{"2":{"305":1}}],["通过模型的自我审查来改进初步成果",{"2":{"426":1}}],["通过模块联邦或",{"2":{"286":1}}],["通过将散落的",{"2":{"456":1}}],["通过将推理",{"2":{"427":1}}],["通过将网关控制平面",{"2":{"419":1}}],["通过将历史对话拼接在当前的",{"2":{"410":1}}],["通过屏幕截图识别",{"2":{"414":1}}],["通过采用固定形态的交互界面和预定义有限域的任务",{"2":{"403":1}}],["通过不断学习和实践",{"2":{"399":1}}],["通过不断重构深化对领域的理解",{"2":{"277":1}}],["通过推出免费版",{"2":{"397":1}}],["通过与",{"2":{"353":1}}],["通过在底部提供",{"2":{"350":1}}],["通过内置的高性能工具",{"2":{"343":1}}],["通过合理使用类型导入",{"2":{"326":1}}],["通过事件通信",{"2":{"315":1}}],["通过参数传递依赖",{"2":{"315":1}}],["通过闭包创建私有作用域",{"2":{"298":1}}],["通过梳理一系列模块化编程的核心概念和实践技巧",{"2":{"293":1}}],["通过属性值定义",{"2":{"278":1}}],["通过以下关键理念指导开发",{"2":{"277":1}}],["通过定义接口规范数据结构",{"2":{"270":1}}],["通过定义接口来规范泛型参数必须包含的属性和方法",{"2":{"266":1}}],["通过限制泛型参数的类型范围",{"2":{"270":1}}],["通过泛型",{"2":{"256":1,"263":2}}],["通过这个号码我们就能确定是哪个人",{"2":{"230":1}}],["通过这一原则",{"2":{"201":1}}],["通过该字段自动收窄类型",{"2":{"230":1}}],["通过项目引用",{"2":{"207":1}}],["通过缓冲区处理跨块边界的行分割问题",{"2":{"166":1}}],["通过一份全局可见的任务清单",{"2":{"430":1}}],["通过一次",{"2":{"125":1}}],["通过一个真实框架来验证理解",{"2":{"60":1}}],["通过精确匹配",{"2":{"104":1}}],["通过判断",{"2":{"101":1}}],["通过页面级",{"2":{"59":1}}],["通过邮箱魔法链接",{"2":{"28":1}}],["通过后",{"2":{"9":1}}],["通过",{"2":{"5":1,"27":1,"30":2,"32":2,"46":1,"48":1,"52":1,"65":1,"84":1,"87":1,"94":1,"104":1,"143":1,"163":2,"166":3,"175":1,"179":2,"209":1,"216":1,"249":1,"264":1,"267":1,"268":1,"270":1,"278":2,"304":1,"321":1,"343":1,"394":1,"410":1,"411":1,"438":1,"449":1,"470":1,"472":2,"476":1,"485":1,"491":2,"494":2,"508":1,"551":1,"570":2,"591":1,"601":1,"602":1,"604":1,"639":1,"641":1,"652":1,"655":1,"661":1,"682":1,"683":1,"684":1,"685":1,"686":1,"708":1,"741":1,"742":1,"755":1,"756":1,"765":1,"768":1,"769":1,"771":1,"785":1,"789":2,"844":1,"853":1,"858":1,"860":1,"879":1,"883":1,"888":2,"898":1,"926":1,"928":1,"931":1,"934":2}}],["空行触发消息回调",{"2":{"833":1}}],["空行表示一个事件结束",{"2":{"168":1}}],["空对象元素",{"2":{"762":1}}],["空间计算",{"2":{"748":1}}],["空间变换",{"2":{"748":1}}],["空间中的基础实体",{"2":{"737":1}}],["空间衰减",{"2":{"734":1}}],["空间音频",{"2":{"734":1}}],["空间组织",{"2":{"679":1}}],["空白入口",{"2":{"706":1}}],["空集与任何东西的交集是空集",{"2":{"244":1}}],["空集",{"2":{"227":2,"237":1}}],["空数据",{"0":{"199":1}}],["空",{"2":{"35":1}}],["↓",{"2":{"35":4,"39":4,"43":3,"47":6,"52":4,"155":2,"168":4}}],["例如折线图在",{"2":{"714":1}}],["例如12小时进食窗口",{"2":{"605":1}}],["例如10",{"2":{"151":1}}],["例如专注于技术资讯处理的知识管理助手",{"2":{"547":1}}],["例如利用前端技术栈快速构建高价值的浏览器插件",{"2":{"542":1}}],["例如将诗词中的意象自动生成关系图谱或配图",{"2":{"509":1}}],["例如仅授予数据库的只读权限",{"2":{"438":1}}],["例如要求",{"2":{"435":1}}],["例如发送邮件",{"2":{"411":1}}],["例如精细化精算法投放广告",{"2":{"398":1}}],["例如月费",{"2":{"397":1}}],["例如高额的年费",{"2":{"397":1}}],["例如构建用户的网络效应",{"2":{"393":1}}],["例如涨价会被对方借低价抢占市场份额",{"2":{"392":1}}],["例如解释",{"2":{"181":1}}],["例如服务器发送",{"2":{"163":1}}],["例如前",{"2":{"140":1}}],["例如包含大量配置面板",{"2":{"111":1}}],["例如",{"2":{"35":1,"148":1,"151":1,"203":1,"254":2,"255":1,"366":4,"394":1,"400":2,"414":1,"415":2,"418":1,"437":2,"442":1,"451":1,"596":1,"868":1,"923":1,"925":1,"934":1}}],["驱动型自动化平台",{"2":{"784":1}}],["驱动动画的逐帧数值变化",{"2":{"765":1}}],["驱动渲染",{"2":{"641":1}}],["驱动编程",{"2":{"542":1}}],["驱动代码生成",{"2":{"540":1}}],["驱动的极速静态网站生成器",{"2":{"904":1}}],["驱动的自动引导",{"2":{"876":1}}],["驱动的自我修正与质量收敛",{"2":{"535":1}}],["驱动的渲染引擎",{"2":{"645":1}}],["驱动的信息聚合与分析引擎",{"2":{"632":1}}],["驱动的团队研发流",{"2":{"568":1}}],["驱动的研发流",{"2":{"568":1}}],["驱动的新纪元里",{"2":{"420":1}}],["驱动的高性能构建工具",{"2":{"343":1}}],["驱动",{"2":{"34":1,"66":1,"518":2,"542":2,"741":1,"879":1}}],["两条线特征近似",{"2":{"915":1}}],["两条轨道",{"2":{"628":1}}],["两阶段审查",{"2":{"884":1,"900":1}}],["两阶段审查流程",{"2":{"881":1}}],["两套具体实现",{"2":{"732":1}}],["两大阶段",{"2":{"704":1}}],["两大核心能力",{"2":{"564":1}}],["两脚书橱",{"2":{"615":1}}],["两级体系",{"2":{"570":1}}],["两天前",{"2":{"457":1}}],["两家都不敢轻易涨价",{"2":{"392":1}}],["两层架构",{"2":{"191":1}}],["两种选择",{"2":{"673":1}}],["两种导入方式",{"2":{"672":1}}],["两种协作范式",{"2":{"628":1}}],["两种技术",{"0":{"159":1}}],["两种策略核心对比与选型建议",{"0":{"155":1}}],["两种语法树",{"2":{"66":1}}],["两类",{"2":{"95":1,"947":1}}],["两者基本保持此消彼长的竞争状态",{"2":{"962":1}}],["两者结合完美契合了",{"2":{"928":1}}],["两者都通过",{"2":{"679":1}}],["两者都会在特定场景下被触发",{"2":{"592":1}}],["两者都支持基于前一个请求的结果发起下一个请求",{"2":{"110":1}}],["两者往往配合使用",{"2":{"588":1}}],["两者在核心功能方面的对比分析",{"2":{"110":1}}],["两者各有侧重",{"2":{"109":1}}],["两者分别解决不同维度的问题",{"2":{"89":1}}],["两者的天作之合并非偶然",{"2":{"11":1}}],["两个方面来编排这四个因素",{"2":{"909":1}}],["两个核心方法",{"2":{"854":1}}],["两个函数类型的交叉",{"2":{"238":2}}],["两个运算符的含义就一目了然",{"2":{"227":1}}],["两个层次",{"0":{"159":1}}],["两个",{"2":{"86":1}}],["两个阶段存在多种技术选择",{"2":{"33":1}}],["上午给自己预留",{"2":{"952":1}}],["上用一个唯一颜色绘制",{"2":{"683":1}}],["上构建交互式图形",{"2":{"670":1}}],["上线",{"2":{"587":1}}],["上传",{"2":{"583":1}}],["上传到任意静态文件服务器",{"2":{"63":1}}],["上层应用交互",{"2":{"544":1}}],["上层状态",{"2":{"342":1}}],["上手门槛",{"2":{"562":1}}],["上手指引",{"2":{"515":1,"518":1}}],["上手成本极低",{"2":{"169":1}}],["上帝视角的逻辑拆解",{"0":{"373":1}}],["上帝化",{"2":{"1":1}}],["上下文的额外内容",{"2":{"895":1}}],["上下文的精细隔离",{"2":{"415":1}}],["上下文中执行",{"2":{"769":1}}],["上下文组装",{"2":{"762":1}}],["上下文节点",{"2":{"734":1}}],["上下文数据",{"2":{"663":1}}],["上下文取变量",{"2":{"655":1}}],["上下文注入",{"2":{"646":1}}],["上下文限制",{"2":{"594":1}}],["上下文感知精准",{"2":{"568":1}}],["上下文感知补全",{"2":{"564":1}}],["上下文工程",{"2":{"557":1}}],["上下文工程以及指令遵循机制",{"2":{"496":1}}],["上下文护城河",{"0":{"536":1}}],["上下文",{"2":{"478":1,"590":1,"592":1,"653":1,"880":1,"883":1}}],["上下文迷失",{"2":{"467":1}}],["上下文管理",{"2":{"438":1}}],["上下文隔离",{"2":{"438":1}}],["上下文过长而产生",{"2":{"424":1}}],["上下文解耦",{"2":{"415":1,"430":1,"438":1}}],["上下文窗口",{"2":{"367":1}}],["上下文控制",{"2":{"352":1}}],["上做微小变异",{"2":{"359":1}}],["上存在",{"2":{"249":2}}],["上面的类型等价于一个有多个调用签名的函数",{"2":{"238":1}}],["上限变得更难突破了",{"2":{"359":1}}],["上限",{"2":{"171":1,"175":1}}],["上述延伸思考",{"2":{"957":1}}],["上述代码使用",{"2":{"152":1}}],["上述流程中",{"2":{"33":1}}],["上的限制",{"2":{"118":1}}],["上",{"2":{"60":1,"70":1,"358":1,"382":1,"616":1,"745":1}}],["使命让我们按照自己的心意",{"2":{"907":1}}],["使命和角色这三样东西",{"2":{"907":1}}],["使命与角色示意树",{"2":{"907":1}}],["使设计稿",{"2":{"755":1}}],["使下一次决策更符合预期",{"2":{"414":1}}],["使",{"2":{"411":1}}],["使开发更高效",{"2":{"343":1}}],["使得在",{"2":{"670":1}}],["使得代码更加可靠和可维护",{"2":{"338":1}}],["使得网页设计更加灵活和可维护",{"2":{"338":1}}],["使得客户端能够精准地拆分出每一条业务事件",{"2":{"121":1}}],["使代码能够在多种类型上安全运行",{"2":{"252":1}}],["使该项目可被其他项目引用",{"2":{"213":1}}],["使其成为一个能够自主写代码的",{"2":{"411":1}}],["使其输出精准且可控",{"2":{"367":1}}],["使其在以下场景中无可替代",{"2":{"118":1}}],["使其可以通过网络访问",{"2":{"33":1}}],["使页面可交互",{"2":{"38":1}}],["使用鸡胸肉",{"2":{"963":1}}],["使用比较清晰的清单和日程表来协助重要事务的推动",{"2":{"956":1}}],["使用清单",{"2":{"952":1}}],["使用方式",{"2":{"925":1}}],["使用方必须实现此接口来集成",{"2":{"662":1}}],["使用变量统一管理设计令牌",{"2":{"921":1}}],["使用量分析工具",{"2":{"881":1}}],["使用的",{"2":{"839":1}}],["使用的模型",{"2":{"482":1}}],["使用标准",{"2":{"822":1}}],["使用标签",{"2":{"331":1}}],["使用指南",{"2":{"792":2}}],["使用预置适配器",{"2":{"785":1,"811":1}}],["使用内置技能快速操作网站",{"2":{"784":1}}],["使用手册",{"2":{"734":1}}],["使用了元编程技术",{"2":{"685":1}}],["使用可验证的表述",{"2":{"578":1}}],["使用强模型",{"2":{"550":1}}],["使用优雅的诗词形式来介绍你自己",{"2":{"506":1}}],["使用默认",{"2":{"506":1,"820":1}}],["使用加粗字体与换行格式",{"2":{"506":2}}],["使用表格整理对比数据",{"2":{"472":1}}],["使用祈使句",{"2":{"451":1}}],["使用提供参数创建新项目",{"2":{"449":1}}],["使用结构化的",{"2":{"449":1}}],["使用习惯",{"2":{"391":2}}],["使用某功能的用户留存率更高",{"2":{"366":1}}],["使用语义化版本控制",{"2":{"331":1}}],["使用全大写和下划线",{"2":{"330":1}}],["使用帕斯卡命名",{"2":{"330":2}}],["使用驼峰命名",{"2":{"330":3}}],["使用小写字母和连字符",{"2":{"330":1}}],["使用import",{"2":{"318":1}}],["使用export",{"2":{"318":1}}],["使用事件机制",{"2":{"315":1}}],["使用as关键字重命名导出",{"2":{"310":1}}],["使用现代构建工具",{"2":{"308":1}}],["使用同步的",{"2":{"304":1}}],["使用数学工具模块",{"2":{"295":1}}],["使用懒加载和预加载策略",{"2":{"291":1}}],["使用命名空间前缀",{"2":{"291":1}}],["使用模块联邦的",{"2":{"291":1}}],["使用自定义元素封装子应用",{"2":{"287":1}}],["使用发布",{"2":{"286":1}}],["使用领域事件解耦",{"2":{"281":1}}],["使用值对象封装业务规则",{"2":{"281":1}}],["使用约束时",{"2":{"263":1}}],["使用有意义的名称能让代码自描述性更强",{"2":{"263":1}}],["使用有意义的类型参数名",{"2":{"263":1}}],["使用泛型容器存储不同类型的数据",{"2":{"261":1}}],["使用泛型接口处理响应",{"2":{"260":1}}],["使用泛型函数查找用户",{"2":{"259":1}}],["使用时的体验",{"2":{"927":1}}],["使用时",{"2":{"249":1,"922":1}}],["使用场景",{"2":{"210":1,"447":1}}],["使用更易读的格式",{"2":{"203":1}}],["使用计数器作为简单示例",{"2":{"178":1}}],["使用生成器函数",{"2":{"168":1}}],["使用示例",{"2":{"166":1,"203":1,"262":2,"266":1,"267":1,"268":1,"269":1}}],["使用轮询",{"2":{"139":1}}],["使用",{"2":{"30":1,"59":1,"65":1,"84":1,"100":1,"108":1,"137":1,"139":1,"143":1,"149":1,"152":1,"160":1,"166":1,"175":1,"178":1,"202":1,"203":5,"216":3,"225":1,"246":1,"255":1,"267":2,"286":3,"287":1,"291":2,"298":1,"305":2,"307":2,"308":1,"470":1,"472":3,"481":1,"504":3,"559":1,"573":1,"576":1,"582":1,"640":1,"653":1,"662":1,"686":1,"713":1,"756":1,"782":5,"797":1,"800":1,"843":1,"860":1,"875":1,"895":1,"921":1,"923":1,"927":2,"930":1,"931":1}}],["转义",{"2":{"886":1}}],["转义后注入到",{"2":{"880":1}}],["转瞬即逝",{"2":{"614":1}}],["转发规则",{"2":{"553":1}}],["转移到了",{"2":{"492":1}}],["转移导出",{"0":{"312":1}}],["转而向人类求助",{"2":{"450":1}}],["转向",{"0":{"535":1},"2":{"403":1,"415":1,"438":1,"538":1}}],["转变为",{"2":{"367":1,"420":1,"930":1}}],["转化为产品创意",{"2":{"541":1}}],["转化为",{"2":{"454":1,"476":1,"532":1}}],["转化为物理世界或数字系统中的",{"2":{"412":1}}],["转化为严谨的",{"2":{"7":1}}],["转化或效率提升",{"2":{"365":1}}],["转型",{"2":{"308":1}}],["转换到",{"2":{"888":1}}],["转换工具",{"2":{"866":1}}],["转换等",{"2":{"847":1}}],["转换数据",{"2":{"342":1}}],["转换",{"2":{"282":1}}],["转换为浏览器安全代码",{"2":{"928":1}}],["转换为回调模式",{"2":{"840":1}}],["转换为具有逐帧插值能力的",{"2":{"770":1}}],["转换为图片",{"2":{"719":1}}],["转换为标准化的",{"2":{"654":1}}],["转换为前端领域模型",{"2":{"281":1}}],["转换为",{"2":{"202":1,"684":1,"719":1}}],["转换为字节块迭代器",{"2":{"168":1}}],["转为",{"2":{"203":1}}],["转译配置",{"2":{"762":1}}],["转译器",{"2":{"734":1}}],["转译",{"2":{"57":1}}],["转译源代码",{"2":{"57":1}}],["转译等构建步骤",{"2":{"33":1}}],["×ai",{"2":{"554":2,"902":2}}],["×",{"2":{"33":1,"67":1,"249":1,"365":1,"462":2,"740":1,"901":2}}],["迭代式错误收敛",{"2":{"535":1}}],["迭代",{"2":{"32":1}}],["其收益不一定比一段时间强有力的无氧运动有效果",{"2":{"964":1}}],["其作者萧鼎老师说过",{"2":{"958":1}}],["其输入主要来自碎片清单",{"2":{"953":1}}],["其输入主要来自碎片清单或临时加进来的重要且紧急事务",{"2":{"953":1}}],["其团队中肯定有人读过这本书",{"2":{"948":1}}],["其底层输出的完全就是这一套架构",{"2":{"934":1}}],["其底层逻辑无非是在做一道关于产品感的算术题",{"2":{"934":1}}],["其表现就相当差",{"2":{"918":1}}],["其能力的",{"2":{"910":1}}],["其背后的",{"2":{"909":1}}],["其背后的设计思想",{"2":{"491":1}}],["其简约的设计理念与本站",{"2":{"904":1}}],["其中大部分的讲解或许对很多人有帮助",{"2":{"962":1}}],["其中",{"2":{"778":1}}],["其中最值得关注的是标准化装饰器和更灵活的模块扩展",{"2":{"323":1}}],["其余滤镜",{"2":{"693":1}}],["其余走",{"2":{"59":1}}],["其次",{"2":{"603":1}}],["其",{"2":{"511":1}}],["其架构采用",{"2":{"470":1}}],["其架构设计并非简单的",{"2":{"419":1}}],["其标准化的目录树如下",{"2":{"442":1}}],["其本质是通过优雅地整合",{"2":{"434":1}}],["其本质是降低问题的熵值",{"2":{"422":1}}],["其本质是将",{"2":{"7":1}}],["其最显著的特征是实现了控制逻辑",{"2":{"419":1}}],["其繁杂的搜索记录会被隔离在自己的上下文中",{"2":{"415":1}}],["其运作逻辑可以精炼为",{"2":{"414":1}}],["其实最主要的问题还是在于有没有共同的诉求",{"2":{"957":1}}],["其实业余是可以协作的",{"2":{"957":1}}],["其实",{"2":{"942":1}}],["其实是",{"2":{"622":1}}],["其实是投入产出比",{"2":{"365":1}}],["其实都是别人精心设计好让你看到的",{"2":{"620":1}}],["其实都隐藏着一个运转复杂的",{"2":{"382":1}}],["其实就是在用",{"2":{"494":1}}],["其实恰恰相反",{"2":{"66":1}}],["其设计深受",{"2":{"344":2}}],["其生态包含官方路由",{"2":{"339":1}}],["其核心原理是利用",{"2":{"924":1}}],["其核心竞争力将体现在对品味与评判权的掌控上",{"2":{"533":1}}],["其核心精髓在于",{"2":{"441":1}}],["其核心逻辑是先将任务细化为子任务",{"2":{"423":1}}],["其核心价值在于其感知与推理的深度融合",{"2":{"418":1}}],["其核心特质就是成为一个高阶的",{"2":{"358":1}}],["其核心优势在于",{"2":{"310":1}}],["其核心思想可概括为",{"2":{"181":1}}],["其核心思想是",{"2":{"46":1,"51":1}}],["其他可渲染类型",{"2":{"737":1}}],["其他构建变体",{"2":{"734":1}}],["其他",{"2":{"656":1,"734":4,"790":1}}],["其他组件插件",{"2":{"647":1}}],["其他命令",{"2":{"573":1,"795":1}}],["其他更多选项",{"2":{"482":1}}],["其他未使用字段的方法",{"2":{"184":1}}],["其他错误",{"2":{"169":1}}],["其解析流水线如下",{"2":{"168":1}}],["其典型规则如下",{"2":{"148":1}}],["其特点是计算期间无持续数据流",{"2":{"143":1}}],["其原生的断线重连机制极大降低了前端的开发心智负担",{"2":{"143":1}}],["其所有子组件也会被迫成为客户端组件",{"2":{"74":1}}],["其优势在于",{"2":{"32":1}}],["视作组件的",{"2":{"934":1}}],["视作组件的状态函数",{"2":{"934":1}}],["视口渲染",{"2":{"734":1}}],["视口内的链接自动预取目标页面代码",{"2":{"84":1}}],["视锥体数组",{"2":{"734":1}}],["视锥体",{"2":{"734":2}}],["视图渲染",{"2":{"717":1}}],["视图层基类",{"2":{"706":1}}],["视图层",{"2":{"704":1,"705":1}}],["视图层渲染",{"2":{"344":2}}],["视图",{"2":{"647":34,"706":2,"792":3,"881":2}}],["视为数据",{"2":{"932":1}}],["视为搜索引擎的替代品或简单的代码补全工具",{"2":{"557":1}}],["视为模块",{"2":{"343":1}}],["视角或工作方式",{"2":{"437":1}}],["视角",{"2":{"333":2}}],["视觉标准化",{"2":{"926":1}}],["视觉回归测试",{"2":{"762":1}}],["视觉属性",{"2":{"748":1}}],["视觉辅助函数",{"2":{"706":1}}],["视觉映射",{"2":{"706":1,"715":1}}],["视觉编码管道",{"2":{"717":1}}],["视觉编码将数据属性映射为视觉通道",{"2":{"715":1}}],["视觉编码系统",{"0":{"715":1},"2":{"706":1}}],["视觉编码存取",{"2":{"706":1}}],["视觉编码",{"2":{"704":1,"711":1}}],["视觉",{"2":{"507":1}}],["视觉交互",{"2":{"414":1}}],["视觉助手",{"2":{"142":1}}],["视觉稿截图",{"2":{"2":1}}],["视频纹理",{"2":{"734":1}}],["视频能力均处于国内前列",{"2":{"522":1}}],["视频多模态",{"2":{"522":1}}],["视频多模态输入",{"2":{"521":1}}],["视频多模态全覆盖",{"2":{"512":1}}],["视频生成的开发者",{"2":{"522":1}}],["视频生成等多模态",{"2":{"522":1}}],["视频生成",{"2":{"512":2}}],["视频流或实时语音",{"2":{"418":1}}],["视频等",{"2":{"418":1}}],["视频渲染任务状态",{"2":{"156":1}}],["视频",{"2":{"142":1,"511":2,"515":2,"521":3,"522":1,"792":1,"849":1}}],["视频会议",{"2":{"114":1}}],["视频处理",{"2":{"31":1}}],["视交互复杂度而定",{"2":{"58":1}}],["弥补原子类的短板",{"2":{"928":1}}],["弥补人类在极端环境下的认知局限",{"2":{"602":1}}],["弥补",{"2":{"31":1,"931":1}}],["谨慎选择",{"2":{"31":1}}],["运维系统实时更新折线图和仪表盘",{"2":{"700":1}}],["运维成本",{"2":{"31":1}}],["运动则选择每周至少三次在午休或晚休时间走一定的路",{"2":{"961":1}}],["运动",{"2":{"605":1,"964":1}}],["运用多样性红利",{"2":{"915":1}}],["运用和产生价值的任何一个环节都不会发生",{"2":{"622":1}}],["运用量化技术",{"2":{"551":1}}],["运用",{"2":{"466":1}}],["运营推向市场",{"2":{"457":1}}],["运营可靠性",{"2":{"419":1}}],["运营成本",{"2":{"391":1}}],["运营成本极低",{"2":{"391":1}}],["运营",{"2":{"361":1,"383":1}}],["运算符优先级处理",{"2":{"655":1}}],["运算符优先级",{"2":{"646":1}}],["运算符",{"2":{"229":1,"236":1,"646":1,"655":1}}],["运行的原子化引擎",{"2":{"928":1}}],["运行单元测试",{"2":{"723":1}}],["运行特定测试",{"2":{"667":1}}],["运行所有测试",{"2":{"667":1,"697":1,"871":1}}],["运行终端完成复杂任务",{"2":{"564":1}}],["运行终端命令或访问数据库外",{"2":{"414":1}}],["运行调试",{"2":{"561":1}}],["运行代码",{"2":{"443":1}}],["运行代码分析",{"2":{"436":1}}],["运行成功率的核心提示策略",{"2":{"426":1}}],["运行任务",{"2":{"343":1}}],["运行在服务器端",{"2":{"304":1}}],["运行测试并提交",{"2":{"567":1}}],["运行测试",{"0":{"224":1},"2":{"567":1,"573":1,"583":1,"752":1}}],["运行",{"2":{"217":1,"449":1,"567":1}}],["运行方式",{"2":{"94":1}}],["运行环境对象",{"2":{"661":1}}],["运行环境",{"2":{"94":1}}],["运行时解析开销大",{"2":{"928":1}}],["运行时来拼接字符串",{"2":{"927":1}}],["运行时检测",{"2":{"792":1}}],["运行时调试面板",{"2":{"734":1}}],["运行时创建",{"2":{"650":1}}],["运行时开销极小",{"2":{"339":1}}],["运行时环境检测",{"2":{"792":1}}],["运行时环境契约",{"2":{"662":1}}],["运行时环境",{"2":{"338":1}}],["运行时测试",{"2":{"326":1}}],["运行时加载",{"2":{"304":1}}],["运行时组合",{"2":{"248":1}}],["运行时无任何服务端组件参与",{"2":{"65":1}}],["运行时",{"2":{"65":1,"66":1,"787":1}}],["运行时零计算",{"2":{"63":1}}],["运转的",{"2":{"5":1}}],["表单重置",{"2":{"663":1}}],["表单校验",{"2":{"663":1}}],["表单错误信息",{"2":{"663":1}}],["表单插件",{"2":{"656":1}}],["表单提交等用户操作",{"2":{"659":1}}],["表单提交",{"2":{"654":1,"663":1}}],["表单状态",{"2":{"653":1}}],["表单状态管理契约",{"2":{"663":1}}],["表单状态管理",{"2":{"647":1}}],["表单组件插件",{"2":{"647":1}}],["表单分类图标",{"2":{"647":1}}],["表单渲染器",{"2":{"647":1}}],["表单项",{"2":{"647":1,"650":2}}],["表单项状态",{"2":{"647":1}}],["表单项渲染器",{"2":{"646":1}}],["表单",{"2":{"639":2,"650":2,"653":1}}],["表面是你在筛选信息",{"0":{"617":1}}],["表面积提供极致的",{"2":{"110":1}}],["表现稳定的标准化工作",{"2":{"537":1}}],["表现层",{"2":{"274":1,"279":1}}],["表格依旧采用了分解与渐进明细的思路",{"2":{"947":1}}],["表格渲染",{"2":{"653":1}}],["表格视图组件",{"2":{"647":1}}],["表格",{"2":{"515":1,"639":1,"650":2,"880":1,"887":2}}],["表格分析",{"2":{"515":1}}],["表格示例",{"2":{"442":1}}],["表述简洁",{"2":{"506":1}}],["表冠",{"2":{"383":1}}],["表盘",{"2":{"383":1}}],["表象",{"2":{"382":2,"908":1}}],["表象背后藏着决定一切的",{"0":{"382":1}}],["表达式在每个渲染帧被求值一次",{"2":{"774":1}}],["表达式在每一帧通过",{"2":{"769":1}}],["表达式失败则回退到关键帧插值",{"2":{"769":1}}],["表达式编译",{"2":{"769":1}}],["表达式模拟系统",{"2":{"769":1}}],["表达式支持",{"2":{"769":1}}],["表达式执行流程",{"2":{"769":1}}],["表达式入口",{"2":{"769":1}}],["表达式的解析",{"2":{"769":1}}],["表达式插件等",{"2":{"764":1}}],["表达式插件入口",{"2":{"762":1}}],["表达式",{"2":{"764":1}}],["表达式辅助函数",{"2":{"762":1,"769":1}}],["表达式值工厂",{"2":{"762":1}}],["表达式值封装",{"2":{"762":1}}],["表达式文字属性装饰器",{"2":{"762":1}}],["表达式属性装饰器",{"2":{"762":1}}],["表达式管理器契约",{"2":{"776":1}}],["表达式管理器",{"2":{"762":1}}],["表达式求值",{"2":{"761":1}}],["表达式工具",{"2":{"647":1}}],["表达式解析",{"2":{"647":1}}],["表达式引擎和全部滤镜效果",{"2":{"778":1}}],["表达式引擎契约",{"2":{"776":1}}],["表达式引擎求值流程",{"0":{"774":1}}],["表达式引擎层",{"2":{"645":1,"646":1}}],["表达式引擎",{"0":{"655":1,"769":1},"2":{"642":1,"647":1,"757":1,"760":1,"761":1,"762":1,"764":1,"765":1,"776":1}}],["表达清晰度或增强对用户需求的适应性",{"2":{"426":1}}],["表达业务规则",{"2":{"279":1}}],["表达",{"2":{"246":1}}],["表明协议升级意图",{"2":{"126":1}}],["表示事件流中的一条消息",{"2":{"839":1}}],["表示场景图中的节点",{"2":{"737":1}}],["表示值属于任一成员类型",{"2":{"229":1}}],["表示每秒推送一次",{"2":{"178":1}}],["表示持续解码",{"2":{"168":1}}],["表示这是部分数据",{"2":{"166":1}}],["表示流已结束",{"2":{"166":1}}],["表示",{"2":{"47":1,"737":1}}],["表",{"2":{"30":1}}],["接下来就阐述下要漫谈的话题",{"2":{"935":1}}],["接下来的重点就是",{"2":{"494":1}}],["接下来",{"2":{"413":1,"434":1,"441":1,"444":1,"928":2}}],["接管了样板代码",{"2":{"902":1}}],["接管数据的缓存生命周期",{"2":{"342":1}}],["接管一切服务端状态",{"2":{"110":1}}],["接近",{"2":{"75":1}}],["接收外部传来的",{"2":{"924":1}}],["接收任务规格",{"2":{"889":1}}],["接收任务后自动规划并执行全套代码工作流",{"2":{"559":1}}],["接收输入形状",{"2":{"771":1}}],["接收注册器对象",{"2":{"720":1}}],["接收信息时",{"2":{"625":1}}],["接收流式响应",{"2":{"143":1}}],["接收方需预先暴露回调",{"2":{"142":1}}],["接收请求",{"2":{"57":1}}],["接收服务器返回的内容",{"2":{"33":1}}],["接入低成本模型平替",{"2":{"568":1}}],["接入身份验证中间件`",{"2":{"451":1}}],["接入方案",{"2":{"439":1}}],["接入",{"2":{"30":1,"568":2}}],["接口规范层",{"2":{"847":1,"848":1}}],["接口规范",{"2":{"845":1,"849":1,"872":1}}],["接口规范和数据格式",{"2":{"291":1}}],["接口抽象",{"2":{"790":1}}],["接口统一不同浏览器控制方式",{"2":{"789":1}}],["接口提供器",{"2":{"762":1}}],["接口代理",{"2":{"762":1}}],["接口实现",{"2":{"733":1}}],["接口实现后端透明切换",{"2":{"729":1}}],["接口定义",{"2":{"706":1,"934":2}}],["接口与契约规范",{"0":{"660":1,"691":1,"718":1,"747":1,"775":1,"805":1,"865":1,"894":1},"1":{"661":1,"662":1,"663":1,"692":1,"693":1,"719":1,"720":1,"748":1,"749":1,"776":1,"777":1,"806":1,"807":1,"866":1,"867":1,"895":1,"896":1}}],["接口契约定义",{"0":{"838":1},"1":{"839":1,"840":1}}],["接口契约",{"2":{"636":1}}],["接口完全兼容",{"2":{"523":1}}],["接口格式",{"2":{"523":1}}],["接口联调",{"2":{"342":1}}],["接口文档和",{"2":{"342":1}}],["接口严密的精密齿轮",{"2":{"337":1}}],["接口约束示例",{"2":{"266":1}}],["接口约束是项目开发中最常用的泛型约束形式",{"2":{"266":1}}],["接口约束",{"0":{"266":1},"2":{"270":1}}],["接口或类",{"2":{"252":1}}],["接口返回",{"0":{"199":1}}],["接口的方式来管理积木",{"2":{"927":1}}],["接口的方法",{"2":{"267":2}}],["接口的权限变动",{"2":{"417":1}}],["接口的",{"2":{"197":1,"266":1}}],["接口只暴露",{"2":{"195":1}}],["接口设计",{"0":{"195":1},"1":{"196":1,"197":1}}],["接口+服务",{"2":{"191":1}}],["接口层",{"2":{"190":1,"191":1}}],["接口调用",{"2":{"31":1}}],["接口",{"2":{"16":1,"182":1,"195":1,"255":1,"256":1,"267":2,"739":1,"762":9,"799":2,"842":1,"844":1,"853":1,"857":1}}],["接口语义推敲",{"2":{"10":1}}],["接口签名",{"2":{"9":1}}],["名称与描述",{"2":{"499":1}}],["名称",{"2":{"30":1,"451":1,"586":1,"755":1}}],["填鸭式的阅读",{"2":{"946":1}}],["填鸭式阅读",{"2":{"946":1}}],["填平",{"0":{"357":1}}],["填写",{"2":{"29":1}}],["填充色",{"2":{"770":1}}],["填充滤镜",{"2":{"762":1}}],["填充样式数据",{"2":{"762":1}}],["填充样式处理",{"2":{"683":1}}],["填充唯一颜色",{"2":{"683":1}}],["填充",{"2":{"11":1,"677":1}}],["添加光照",{"2":{"753":1}}],["添加箭头头部计算",{"2":{"677":1}}],["添加边界条件",{"2":{"583":1}}],["添加一些相关的自定义",{"2":{"470":1}}],["添加了静态类型检查和其他高级功能",{"2":{"338":1}}],["添加订单项",{"2":{"281":1}}],["添加处理标记",{"2":{"266":1}}],["添加数据",{"2":{"261":1}}],["添加空集不改变原集合",{"2":{"244":1}}],["添加",{"2":{"29":1}}],["添加测试文章",{"2":{"26":1}}],["会关注国家大事",{"2":{"959":1}}],["会比较狠",{"2":{"952":1}}],["会时不时来敲门",{"2":{"945":1}}],["会显示在帮助信息中",{"2":{"581":1}}],["会意外学到系统的运行机理",{"2":{"531":1}}],["会议用",{"2":{"515":1}}],["会议实时记录",{"2":{"515":1}}],["会议实时记录与培训内容归档",{"2":{"515":1}}],["会议知识总结",{"2":{"515":1}}],["会议知识总结与项目文档编写的首选工具",{"2":{"515":1}}],["会议纪要自动整理",{"2":{"515":1}}],["会议纪要智能整理",{"2":{"515":1}}],["会经历",{"2":{"484":1}}],["会经历一条清晰的复利曲线",{"2":{"463":1}}],["会话时",{"2":{"571":1}}],["会话管理和标准化的工具",{"2":{"491":1}}],["会话管理与持久化记忆",{"0":{"485":1},"1":{"486":1}}],["会话",{"0":{"486":1},"2":{"482":1,"489":1,"884":1}}],["会话状态",{"2":{"139":1}}],["会不会被调用到",{"2":{"448":1}}],["会面临一个关键判定",{"2":{"429":1}}],["会进行任务拆解与路径规划",{"2":{"414":1}}],["会根据项目结构和检测到的技术栈",{"2":{"574":1}}],["会根据工具返回的结果",{"2":{"412":1}}],["会根据传入的参数自动推断",{"2":{"254":1}}],["会员等商业化模式",{"2":{"399":1}}],["会员",{"2":{"397":1}}],["会导致知识结构存在重大缺陷",{"2":{"614":1}}],["会导致知识结构的严重扭曲",{"2":{"614":1}}],["会导致开发者对内存管理",{"2":{"531":1}}],["会导致商业不可持续",{"2":{"394":1}}],["会导致复杂度提升和体验牺牲",{"2":{"394":1}}],["会发生什么",{"2":{"386":1}}],["会发现它们共同指向一个本质命题",{"2":{"12":1}}],["会做出",{"2":{"366":2,"427":1}}],["会在文档隐藏时关闭请求",{"2":{"839":1}}],["会在路由决策层进行判断",{"2":{"443":1}}],["会在下一轮",{"2":{"427":1}}],["会在第一次加载模块后将其放入",{"2":{"334":1}}],["会在内部自动重试",{"2":{"171":1}}],["会缓存已加载的模块",{"2":{"334":1}}],["会沿目录树向上逐级查找",{"2":{"334":1}}],["会用",{"2":{"250":1}}],["会对属性类型执行交叉操作",{"2":{"237":1}}],["会",{"2":{"208":1}}],["会增加调用者的理解成本和误用风险",{"2":{"195":1}}],["会触发",{"2":{"179":1}}],["会引发严重的灾难",{"2":{"147":1}}],["会遇到严峻的基础设施挑战",{"2":{"137":1}}],["会产生一种",{"2":{"135":1}}],["会共享",{"2":{"107":1}}],["会被替换为",{"2":{"582":1}}],["会被视为同一个",{"2":{"104":1}}],["会被预取并缓存",{"2":{"73":1}}],["会捕获这个情况并处于",{"2":{"101":1}}],["会暂停请求",{"2":{"99":1}}],["会将",{"2":{"333":1}}],["会将它们合并为一个网络请求",{"2":{"97":1}}],["会将事件监听器",{"2":{"70":1}}],["会平滑地将骨架屏替换为真实内容",{"2":{"86":1}}],["会丢弃服务端",{"2":{"59":1}}],["会分两部分工作",{"2":{"52":1}}],["会自动提示你只有",{"2":{"927":1}}],["会自动",{"2":{"166":1}}],["会自动解析这些字段并触发相应回调",{"2":{"164":1}}],["会自动尝试重连",{"2":{"163":1}}],["会自动发起重连尝试",{"2":{"122":1}}],["会自动将缓存回滚到更新前的状态",{"2":{"100":1}}],["会自动触发",{"2":{"29":1,"588":1}}],["会自动识别",{"2":{"29":1}}],["会生成一个免费域名",{"2":{"29":1}}],["导数",{"2":{"677":1}}],["导出公共",{"2":{"823":1}}],["导出的",{"2":{"781":1}}],["导出的值是原始值的实时映射",{"2":{"314":1}}],["导出标准化的",{"2":{"755":1}}],["导出器",{"2":{"734":1}}],["导出器等扩展功能",{"2":{"733":1}}],["导出核心共享状态",{"2":{"764":1}}],["导出核心",{"2":{"708":1}}],["导出入口",{"2":{"647":1}}],["导出所有业务渲染器",{"2":{"647":1}}],["导出所有核心",{"2":{"647":1}}],["导出所有命名成员",{"2":{"312":1}}],["导出成员名",{"2":{"330":1}}],["导出绑定",{"2":{"315":1}}],["导出模块",{"2":{"304":1,"307":1}}],["导出",{"0":{"693":1},"2":{"304":1,"307":1,"647":1,"706":1,"762":1}}],["导出或",{"2":{"46":1}}],["导入约定",{"2":{"572":1}}],["导入你手头的",{"2":{"515":1}}],["导入默认成员",{"2":{"311":1}}],["导入默认导出",{"2":{"203":1}}],["导入指定成员",{"2":{"310":1}}],["导入方可以按需引入",{"2":{"310":1}}],["导入模块",{"2":{"304":1,"307":1}}],["导入子应用服务",{"2":{"288":1}}],["导入导出修饰符是否可见",{"2":{"203":1}}],["导入",{"2":{"169":1,"304":1,"307":1,"315":1,"677":2,"928":1}}],["导入上述仓库",{"2":{"29":1}}],["导航灯",{"2":{"494":1,"495":1}}],["导航栏",{"2":{"87":1}}],["导航",{"2":{"59":1,"366":1}}],["导致的样式碎片化",{"2":{"930":1}}],["导致的页面闪烁与重复渲染",{"2":{"59":1}}],["导致机会流失",{"2":{"622":1}}],["导致长期投入的决策被取消",{"2":{"617":1}}],["导致进程中途中断",{"2":{"617":1}}],["导致知识结构出现重大缺陷",{"2":{"614":1}}],["导致后续规划逐渐偏离初始目标",{"2":{"425":1}}],["导致后续的任务与规划偏离初始目标",{"2":{"424":1}}],["导致后续生成的代码一致性下降",{"2":{"9":1}}],["导致流失",{"2":{"392":1}}],["导致业绩和研发效率徘徊不前",{"2":{"387":1}}],["导致系统",{"2":{"386":1}}],["导致产品臃肿",{"2":{"366":1}}],["导致层级冗余",{"2":{"189":1}}],["导致代码臃肿",{"2":{"183":1}}],["导致服务器压力倍增",{"2":{"147":1}}],["导致页面其他请求完全阻塞",{"2":{"124":1}}],["导致页面闪烁",{"2":{"59":1}}],["导致",{"2":{"59":1,"97":1,"417":1}}],["官方技能编写最佳实践",{"2":{"881":1}}],["官方技能库中的",{"2":{"453":1}}],["官方直连",{"2":{"523":1}}],["官方开放平台",{"2":{"522":2}}],["官方平台即模型研发方直接开放的",{"2":{"520":1}}],["官方指南",{"2":{"488":1}}],["官方示例进行了",{"2":{"467":1}}],["官方",{"0":{"520":1},"1":{"521":1,"522":1},"2":{"454":1,"521":3,"522":1}}],["官方深度集成了",{"2":{"342":1}}],["官方的路由管理器",{"2":{"341":2}}],["官方标准",{"2":{"307":1}}],["官方提供的编译工具",{"2":{"202":1}}],["官方内置",{"2":{"110":1}}],["官方调试神器",{"2":{"106":1}}],["官方文档",{"2":{"97":1,"103":2,"225":1,"597":2,"849":1,"872":1,"925":1}}],["官方文档本身正是跑在",{"2":{"60":1}}],["官方视频",{"2":{"87":1}}],["官方推出的命令行",{"2":{"567":1}}],["官方推出的开源框架",{"2":{"478":1}}],["官方推出的下一代文档框架",{"2":{"60":1}}],["官方推荐的状态管理库",{"2":{"341":1}}],["官方推荐",{"2":{"19":1}}],["官网",{"2":{"29":1}}],["访问需要",{"2":{"439":1}}],["访问需要认证的外部服务",{"2":{"439":1}}],["访问外部公共数据",{"2":{"439":1}}],["访问量波动大",{"2":{"66":1}}],["访问量大的公开页面",{"2":{"57":1}}],["访问即可看到预渲染的博客网站",{"2":{"29":1}}],["访问",{"2":{"29":1,"666":2,"734":1}}],["yoyo",{"2":{"672":1,"677":1,"686":1,"692":1}}],["youtube",{"2":{"515":2}}],["youmind",{"2":{"515":5}}],["yourapp",{"2":{"106":1}}],["your",{"2":{"97":1,"448":1,"570":1}}],["yellow",{"2":{"484":1,"488":1}}],["yagni",{"2":{"889":1}}],["yaxis",{"2":{"714":1,"724":1}}],["yamlopenapi",{"2":{"807":1}}],["yaml",{"0":{"448":1},"2":{"335":2,"442":1,"443":2,"576":2,"581":3,"582":1,"586":2,"591":2,"749":1,"787":1,"792":4,"800":1,"806":2,"877":1,"881":1,"895":2}}],["yarn",{"2":{"216":1,"335":1}}],["yml",{"2":{"290":1,"677":5,"823":1}}],["yield",{"2":{"168":5}}],["y",{"2":{"28":1,"682":2,"683":1,"685":3,"692":1,"693":2,"696":1,"706":1,"753":1,"776":2,"806":1}}],["写的基本都是",{"2":{"959":1}}],["写点代码",{"2":{"938":1}}],["写自定义",{"2":{"930":1}}],["写多了容易显得臃肿",{"2":{"924":1}}],["写这四个因素",{"2":{"909":1}}],["写了代码再补测试",{"2":{"890":1}}],["写入设计文档",{"2":{"888":1}}],["写独立博客或做个人产品能带来长期的复利",{"2":{"617":1}}],["写其动态之美",{"2":{"508":1}}],["写其清冷风姿",{"2":{"507":1}}],["写好测试后提交",{"2":{"567":1}}],["写好代码只是及格线",{"2":{"495":1}}],["写好提示词",{"2":{"403":1}}],["写作者",{"2":{"555":1}}],["写作",{"2":{"515":1}}],["写作助手",{"2":{"512":1,"515":1}}],["写作与内容创作",{"2":{"511":1,"521":1}}],["写作等多种场景",{"2":{"511":1}}],["写作阶段",{"2":{"468":1}}],["写作业",{"2":{"462":1}}],["写特定语言的码农",{"2":{"466":1}}],["写一段代码",{"2":{"414":1}}],["写一篇",{"2":{"375":1}}],["写代码的机器",{"2":{"552":1}}],["写代码调用工具",{"2":{"439":1}}],["写代码",{"2":{"357":1,"559":1,"564":1}}],["写在前面",{"0":{"906":1,"935":1,"959":1}}],["写在最后",{"0":{"356":1,"919":1,"958":1}}],["写在页面顶层",{"2":{"74":1}}],["写",{"2":{"337":1}}],["写下你的评论",{"2":{"28":1}}],["写什么",{"2":{"12":1}}],["登录接口若为了",{"2":{"200":1}}],["登录后才能访问的内部系统",{"2":{"57":1}}],["登录后同步",{"2":{"30":1}}],["登录后评论",{"2":{"28":1}}],["登录",{"2":{"28":1,"29":1}}],["zz",{"2":{"762":1,"764":1,"771":1}}],["zxp",{"2":{"762":1}}],["zigzagmodifier",{"2":{"762":1,"764":1,"771":1}}],["zigzag",{"2":{"757":1}}],["z",{"2":{"753":1}}],["zr",{"2":{"705":1}}],["zrendertype",{"2":{"719":1}}],["zrender",{"2":{"699":2,"702":1,"704":3,"705":3,"706":2,"708":1,"709":1,"717":1,"719":1}}],["zoom",{"2":{"740":1}}],["zod",{"2":{"576":1,"845":5,"848":1,"866":1}}],["zone",{"2":{"28":1}}],["zh",{"2":{"456":2,"792":1}}],["zero",{"2":{"281":1}}],["zustand",{"2":{"6":1,"95":1,"341":2,"642":1}}],["writing",{"2":{"880":2,"881":2,"883":2,"884":4,"888":2,"892":1,"895":2,"896":3,"900":1}}],["writer",{"2":{"416":1,"470":2,"471":3,"472":2}}],["write",{"2":{"164":3,"470":3,"478":1,"488":2,"489":1,"594":1}}],["writehead",{"2":{"164":1}}],["wrapstream",{"2":{"861":1}}],["wrapgenerate",{"2":{"861":1}}],["wraplanguagemodel",{"2":{"851":1}}],["wrap",{"2":{"850":1}}],["wrapper",{"2":{"762":1,"934":1}}],["wgslnodebuilder",{"2":{"733":1,"736":1,"741":1}}],["wgslbuilder",{"2":{"733":1}}],["wgsl",{"2":{"729":1,"730":2,"732":1,"733":2,"734":1,"739":1,"741":2,"742":1}}],["wget",{"2":{"594":1}}],["wysiwyg",{"2":{"641":1,"656":1}}],["wedgeconfig>",{"2":{"693":1}}],["wedge",{"2":{"677":1,"679":1,"693":1}}],["weight",{"2":{"652":4,"661":1,"743":1}}],["weekly",{"2":{"346":2}}],["webworker",{"2":{"762":1}}],["webxr",{"2":{"734":5}}],["webgpurenderer",{"2":{"734":1,"736":2,"749":1}}],["webgpubackend",{"2":{"733":1,"734":1,"736":1,"739":1}}],["webgpu",{"0":{"745":1},"2":{"728":2,"729":1,"732":1,"733":2,"734":14,"736":9,"739":2,"741":1,"742":2,"745":1,"749":1}}],["webglmaterials",{"2":{"734":1}}],["webgllights",{"2":{"734":1}}],["webgluniforms",{"2":{"734":1}}],["webgluniform|",{"2":{"733":1}}],["webgltextures",{"2":{"734":1}}],["webgltexture|",{"2":{"733":1}}],["webglcuberendertarget",{"2":{"734":1}}],["webglrendertarget",{"2":{"734":1}}],["webglrenderer",{"2":{"734":1,"736":1,"748":1,"753":1}}],["webglprograms",{"2":{"734":1}}],["webglprogram",{"2":{"733":1,"734":1}}],["webglprogram|",{"2":{"733":1}}],["webglbackend",{"2":{"733":1,"734":1,"736":1,"739":1}}],["webglshadowmap",{"2":{"734":1}}],["webglshadow",{"2":{"733":1}}],["webglstate",{"2":{"733":2,"734":1}}],["webgl",{"2":{"728":3,"729":1,"732":1,"733":5,"734":12,"736":5,"739":3,"741":1,"742":2,"749":1}}],["webfetch",{"2":{"490":1}}],["websearch",{"2":{"470":1,"472":1,"490":1,"868":3}}],["websocket",{"0":{"125":1},"1":{"126":1,"127":1,"128":1,"129":1},"2":{"31":1,"114":1,"115":1,"125":1,"126":4,"127":3,"128":1,"129":4,"135":1,"137":2,"138":1,"139":1,"141":1,"142":1,"143":5,"144":2,"145":3,"156":1,"158":1,"160":1,"180":2,"662":1,"787":1,"790":1,"801":2,"822":1,"881":3,"888":2}}],["webkit",{"2":{"338":3}}],["webrtc",{"2":{"142":1}}],["webp",{"2":{"84":1}}],["webpack",{"2":{"66":1,"203":1,"216":2,"217":1,"287":2,"288":6,"290":4,"307":1,"308":1,"343":5,"344":1,"642":1,"702":1,"730":1,"758":1,"923":3}}],["web",{"0":{"115":1,"214":2},"2":{"33":1,"111":1,"114":3,"115":2,"138":2,"142":1,"143":1,"144":1,"145":3,"205":1,"211":2,"214":2,"216":4,"287":1,"298":1,"305":1,"335":1,"338":4,"339":1,"340":1,"342":4,"343":3,"344":3,"523":1,"552":1,"561":3,"562":5,"568":2,"670":1,"671":1,"699":1,"728":1,"734":1,"755":7,"756":1,"757":2,"760":1,"761":1,"762":6,"776":1,"777":1,"778":1,"780":1,"839":1,"857":1,"868":3,"901":1,"924":1}}],["webhooks",{"0":{"130":1},"1":{"131":1,"132":1,"133":1,"134":1},"2":{"114":1,"130":1,"131":1,"132":1,"133":1,"134":1,"142":1,"143":2,"144":1}}],["webhook",{"2":{"29":1,"32":1,"83":1,"132":1}}],["waiting",{"2":{"881":2}}],["waitforcapture",{"2":{"806":1}}],["waitoptions",{"2":{"806":1}}],["waituntil",{"2":{"806":1}}],["wait",{"2":{"799":1,"806":1}}],["warn",{"2":{"706":1}}],["warnings",{"2":{"859":1}}],["warning",{"2":{"662":1}}],["waze",{"2":{"601":1}}],["watcher",{"2":{"695":1}}],["watchdirectory",{"2":{"203":1}}],["watchfile",{"2":{"203":1}}],["watchoptions",{"2":{"203":1}}],["watch",{"2":{"203":2,"224":2,"697":1}}],["waf",{"2":{"143":1}}],["w3c",{"2":{"159":1}}],["wsobject",{"2":{"662":1}}],["wsfetcher",{"2":{"662":1}}],["ws",{"2":{"142":1,"662":1,"787":1,"801":3,"881":1}}],["word",{"2":{"436":1,"512":1,"522":2,"647":6}}],["worktree",{"2":{"881":4}}],["worktrees",{"2":{"880":1,"881":1,"883":1,"896":1}}],["workflowagent",{"2":{"859":1}}],["workflows",{"2":{"677":5,"762":1,"823":1}}],["workflow>",{"2":{"506":1}}],["workflow",{"0":{"343":1,"451":1,"545":1,"859":1},"2":{"367":1,"403":1,"451":2,"506":2,"507":1,"509":3,"541":1,"544":1,"547":1,"552":1,"849":1,"859":2,"901":2}}],["worker",{"2":{"138":1,"734":1,"757":2,"762":16}}],["workspaces",{"2":{"335":1,"642":1,"643":1,"647":1,"665":1,"667":1}}],["workspace",{"2":{"216":3,"335":1,"442":1,"467":1,"477":1,"511":1,"521":2,"667":1}}],["works",{"2":{"87":1}}],["worldtolocal",{"2":{"748":1}}],["world",{"2":{"77":1,"238":1}}],["wiggle",{"2":{"757":1,"769":2,"774":1}}],["wind",{"2":{"646":1}}],["windsurf",{"2":{"564":3,"565":2}}],["windows",{"2":{"343":1,"755":1,"881":5,"898":1}}],["window",{"2":{"59":1,"103":1,"240":1,"306":1,"367":2,"410":1,"468":1,"546":1,"654":1,"696":2,"753":4,"839":1}}],["wiptasks",{"2":{"708":1,"712":1,"719":1}}],["wip",{"2":{"451":1}}],["wiki",{"0":{"628":1},"2":{"445":1,"515":4,"628":1,"629":1,"631":2}}],["willingness",{"2":{"397":1}}],["william",{"2":{"181":1}}],["wi",{"2":{"370":1}}],["width",{"2":{"230":2,"232":1,"692":3,"693":1,"696":2,"719":2,"748":1,"749":1}}],["without",{"2":{"890":1}}],["withstore",{"2":{"647":1}}],["withsoftdelete",{"2":{"248":2}}],["withtimestamp",{"2":{"240":3,"248":2}}],["withcredentials",{"2":{"163":2}}],["with",{"2":{"28":1,"97":2,"269":1,"881":1}}],["w",{"2":{"27":1,"28":1}}],["wheel",{"2":{"684":2}}],["where",{"2":{"199":1,"281":1,"328":2}}],["whisper",{"2":{"523":2}}],["while",{"2":{"47":1,"90":1,"97":1,"99":1,"110":1,"149":2,"152":3,"153":1,"155":1,"166":1,"168":1,"342":1,"833":1}}],["white",{"2":{"28":1,"921":1,"922":1,"923":1,"924":1,"925":1,"927":2}}],["why",{"2":{"11":1,"87":1,"555":1,"902":1}}],["what",{"2":{"11":1,"555":1,"902":1}}],["渲染当前帧",{"2":{"776":1}}],["渲染生命周期",{"2":{"762":1}}],["渲染元素实现",{"2":{"762":3}}],["渲染委托",{"2":{"761":1}}],["渲染循环",{"2":{"753":1}}],["渲染统计信息",{"2":{"749":1}}],["渲染输出目标",{"2":{"749":1}}],["渲染一帧",{"2":{"748":1,"749":1}}],["渲染状态",{"2":{"748":1}}],["渲染状态管理",{"2":{"739":1}}],["渲染状态管理等",{"2":{"739":1}}],["渲染帧的完整生命周期",{"0":{"745":1}}],["渲染后端契约",{"2":{"748":1}}],["渲染后端",{"2":{"737":1}}],["渲染流程调用链",{"2":{"736":1}}],["渲染流程编排",{"2":{"733":1,"739":1}}],["渲染管线",{"2":{"734":1}}],["渲染对象管理",{"2":{"739":1}}],["渲染对象",{"2":{"734":1,"737":1}}],["渲染队列构建",{"2":{"739":1,"745":1}}],["渲染队列",{"2":{"734":1,"737":1}}],["渲染队列管理",{"2":{"733":1}}],["渲染目标",{"2":{"734":2,"748":1}}],["渲染层",{"2":{"734":1}}],["渲染抽象层",{"2":{"732":1,"733":2}}],["渲染库",{"2":{"728":1}}],["渲染基类",{"2":{"683":1}}],["渲染单元",{"2":{"680":2}}],["渲染图层",{"2":{"680":1}}],["渲染表面",{"2":{"680":1}}],["渲染上下文包装",{"2":{"677":1,"679":1}}],["渲染范式",{"2":{"673":1}}],["渲染到页面",{"2":{"668":1}}],["渲染引擎层",{"2":{"675":1,"676":1}}],["渲染引擎遍历树进行绘制",{"2":{"675":1}}],["渲染引擎实时呈现结果",{"2":{"656":1}}],["渲染引擎",{"2":{"647":1,"656":1,"699":1,"702":1}}],["渲染器配置",{"2":{"777":1}}],["渲染器实例契约",{"2":{"776":1}}],["渲染器构造函数",{"2":{"776":1}}],["渲染器初始化",{"2":{"773":1}}],["渲染器负责",{"2":{"768":1}}],["渲染器通过",{"2":{"768":1}}],["渲染器策略层",{"0":{"768":1}}],["渲染器覆盖",{"2":{"762":1}}],["渲染器层",{"2":{"760":1,"761":2}}],["渲染器契约",{"2":{"748":1}}],["渲染器在构造时创建",{"2":{"736":1}}],["渲染器基类",{"2":{"734":1,"762":4,"765":1}}],["渲染器基础配置契约",{"2":{"661":1}}],["渲染器系统",{"0":{"739":1},"2":{"734":1,"762":1,"776":1}}],["渲染器类型",{"2":{"719":1}}],["渲染器类型标识",{"2":{"661":1,"776":1}}],["渲染器安装函数",{"2":{"706":1}}],["渲染器安装",{"2":{"706":1}}],["渲染器绑定",{"2":{"704":1}}],["渲染器自定义查找方法",{"2":{"662":1}}],["渲染器组件接收的",{"2":{"661":1}}],["渲染器别名",{"2":{"652":1}}],["渲染器注册器契约",{"2":{"776":1}}],["渲染器注册管理",{"2":{"762":1}}],["渲染器注册契约",{"0":{"661":1}}],["渲染器注册",{"2":{"652":1,"761":1}}],["渲染器注册表",{"2":{"650":1}}],["渲染器注册与查找",{"2":{"650":1}}],["渲染器查找",{"2":{"649":1}}],["渲染器专用图标",{"2":{"647":1}}],["渲染器事件系统",{"2":{"647":1}}],["渲染器",{"2":{"647":2,"700":1,"706":1,"734":3,"736":2,"749":1,"753":1,"762":2,"764":1,"765":1,"782":4}}],["渲染器工厂系统",{"0":{"652":1}}],["渲染器工厂",{"2":{"645":1,"647":1}}],["渲染器工厂模式",{"2":{"641":1,"645":1}}],["渲染为",{"2":{"709":1}}],["渲染为组件",{"2":{"661":1}}],["渲染为完整的",{"2":{"640":1}}],["渲染为静态",{"2":{"14":1}}],["渲染视图或返回",{"2":{"279":1}}],["渲染性能更佳",{"2":{"110":1}}],["渲染与网络通信",{"2":{"104":1}}],["渲染好后",{"2":{"86":1}}],["渲染策略",{"2":{"82":1}}],["渲染策略从页面级别下沉到组件级别",{"2":{"55":1}}],["渲染出错的错误边界",{"2":{"78":1}}],["渲染时机",{"2":{"75":1}}],["渲染模式",{"2":{"71":1}}],["渲染模式工作分布对比图",{"2":{"57":1}}],["渲染位置选择",{"2":{"67":1}}],["渲染方式",{"2":{"65":1}}],["渲染方案不是一成不变的",{"2":{"67":1}}],["渲染方案",{"0":{"34":1,"38":1,"42":1,"46":1,"51":1},"1":{"35":1,"36":1,"37":1,"39":1,"40":1,"41":1,"43":1,"44":1,"45":1,"47":1,"48":1,"49":1,"50":1,"52":1,"53":1,"54":1,"55":1},"2":{"67":2}}],["渲染工作量分布",{"2":{"57":1}}],["渲染页面",{"2":{"35":1}}],["渲染阶段的位置选择",{"2":{"33":1}}],["渲染",{"2":{"33":3,"57":1,"62":1,"66":1,"71":2,"97":1,"147":1,"274":1,"647":1,"761":2,"843":1}}],["渲染富文本内容",{"2":{"27":1}}],["$style",{"2":{"933":1}}],["$schema",{"2":{"661":1}}],["$border",{"2":{"921":2}}],["$default",{"2":{"921":2}}],["$primary",{"2":{"921":2}}],["$path",{"2":{"661":1}}],["$ref",{"2":{"749":8}}],["$arguments",{"0":{"582":1},"2":{"582":3,"583":1}}],["$$",{"2":{"260":1}}],["$",{"2":{"27":1,"82":1,"90":1,"99":1,"100":1,"103":1,"108":1,"149":3,"153":1,"175":2,"222":1,"231":1,"232":1,"267":1,"269":2,"300":4,"301":1,"311":2,"324":1,"328":2,"484":1,"655":4,"895":1,"922":2,"923":1,"925":1}}],["`type",{"2":{"581":1}}],["`agent",{"2":{"484":1}}],["`allowdangerouslyskippermissions`",{"2":{"482":1}}],["`api`",{"2":{"451":1}}],["`auth`",{"2":{"451":1}}],["`pnpm",{"2":{"451":2}}],["`meta",{"2":{"576":2}}],["`merge`",{"2":{"451":1}}],["`main`",{"2":{"451":1}}],["`rebase`",{"2":{"451":1}}],["`references",{"2":{"451":1}}],["`refactor",{"2":{"451":1}}],["`class=",{"2":{"923":1}}],["`co",{"2":{"581":1}}],["`commitlint`",{"2":{"451":1}}],["`changelog",{"2":{"451":1}}],["`chore",{"2":{"451":1}}],["`createuser`",{"2":{"331":2}}],["`docs",{"2":{"451":1}}],["`fix",{"2":{"451":2}}],["`feat",{"2":{"451":3}}],["`git",{"2":{"451":5,"581":2}}],["`getuser`",{"2":{"331":1}}],["`getuserbyid`",{"2":{"331":1}}],["`updateuser`",{"2":{"331":2}}],["`unhandled",{"2":{"232":1}}],["`styles",{"2":{"923":1}}],["`sidebar`",{"2":{"451":1}}],["`select",{"2":{"328":2}}],["`saved",{"2":{"269":1}}],["`executing",{"2":{"301":1,"324":1}}],["`¥$",{"2":{"281":1}}],["`http",{"2":{"231":1}}],["`https",{"2":{"90":1}}],["`$",{"2":{"175":1,"260":1,"267":1,"923":1,"925":1}}],["`浏览最新技术文章",{"2":{"82":1}}],["`",{"2":{"27":2,"82":1,"90":1,"99":2,"100":2,"101":2,"103":2,"107":2,"108":2,"149":5,"153":1,"231":1,"232":1,"260":1,"267":1,"269":1,"281":1,"300":4,"301":1,"311":2,"324":1,"328":2,"451":6,"482":10,"484":1,"573":6,"576":2,"922":1,"923":3,"925":1}}],[">特殊按钮",{"2":{"927":1}}],[">删除",{"2":{"927":1}}],[">+",{"2":{"889":1}}],[">>",{"2":{"806":1,"866":1}}],[">|",{"2":{"761":2,"856":3,"859":1,"880":2}}],[">=",{"2":{"169":1,"820":1}}],[">评论区",{"2":{"28":1}}],[">jamstack",{"2":{"27":1}}],[">",{"2":{"27":11,"28":11,"35":1,"74":3,"81":1,"86":7,"100":2,"101":1,"106":3,"152":1,"171":1,"175":1,"193":1,"227":1,"234":2,"244":4,"247":2,"248":1,"260":1,"263":1,"281":1,"288":11,"289":1,"628":2,"629":1,"631":1,"632":1,"636":1,"649":1,"650":17,"652":2,"655":2,"679":46,"680":21,"683":3,"684":1,"685":1,"686":9,"692":2,"696":2,"705":13,"708":26,"709":10,"711":1,"712":8,"713":4,"719":1,"736":26,"737":15,"740":3,"741":2,"761":3,"764":21,"765":10,"767":2,"768":5,"769":10,"770":9,"771":4,"777":2,"781":1,"801":1,"806":5,"853":13,"854":11,"857":10,"858":1,"859":2,"867":2,"880":1,"883":18,"884":12,"896":1,"923":1,"924":1,"925":1,"927":1,"928":16}}],["83",{"2":{"928":1,"929":1}}],["836",{"2":{"699":1}}],["8a2d7145",{"2":{"924":2}}],["8px",{"2":{"921":1,"922":1,"923":1,"924":1}}],["8个",{"2":{"734":1}}],["8888",{"2":{"666":2}}],["892",{"2":{"643":1}}],["820",{"2":{"643":1}}],["86+",{"2":{"641":1,"643":1,"646":1,"647":1,"656":2}}],["8000",{"2":{"963":1,"964":1}}],["800",{"2":{"705":1,"925":3}}],["80+",{"2":{"641":1,"655":1}}],["80",{"2":{"405":2,"555":1,"925":1}}],["8080",{"2":{"164":2}}],["8s",{"2":{"171":1,"175":1}}],["8kb",{"2":{"111":1,"647":1,"656":1}}],["8",{"0":{"60":1,"61":1,"65":1,"66":1,"141":1,"142":1,"143":1,"292":1,"326":1,"345":1,"389":1,"593":1,"594":1,"595":1,"596":1,"721":1,"722":1,"723":1,"724":1,"725":1,"726":1,"750":1,"751":1,"752":1,"753":1,"779":1,"780":1,"781":1,"782":1,"869":1,"870":1,"871":1,"872":1,"928":1,"929":1,"930":1,"931":1,"932":1,"933":1},"1":{"61":1,"62":2,"63":2,"64":2,"65":1,"66":1,"142":1,"143":1,"594":1,"595":1,"596":1,"722":1,"723":1,"724":1,"725":1,"726":1,"751":1,"752":1,"753":1,"780":1,"781":1,"782":1,"870":1,"871":1,"872":1,"929":1,"930":1,"931":1,"932":1,"933":1},"2":{"27":5,"28":3,"124":1,"127":1,"325":1,"701":1,"706":1,"757":1,"845":2,"888":1,"921":1,"922":1,"924":1,"927":2,"952":3,"961":4,"963":1}}],["xrmanager",{"2":{"733":1,"734":1}}],["xr",{"2":{"728":1}}],["xaxis",{"2":{"714":1,"724":1}}],["xai",{"2":{"511":2}}],["xlsx",{"2":{"453":1,"641":1}}],["xhr",{"2":{"342":2}}],["xmlhttprequest",{"2":{"342":1,"822":1}}],["xml",{"2":{"193":1,"448":1,"450":1}}],["x",{"2":{"115":1,"119":1,"177":1,"203":2,"237":1,"375":1,"376":1,"417":1,"457":1,"511":3,"518":1,"682":2,"683":1,"685":9,"689":1,"692":1,"693":2,"696":1,"706":1,"743":2,"753":1,"776":2,"792":1,"801":4,"806":1,"807":7,"883":1,"908":1}}],["x26",{"2":{"35":1,"169":6,"172":2,"175":2,"236":2,"237":3,"238":5,"239":1,"240":4,"242":2,"243":6,"244":4,"247":1,"248":5,"249":2,"267":1,"306":2,"484":2,"486":2,"488":4,"646":1,"647":1,"656":1,"676":1,"705":1,"820":6,"921":3,"922":1,"928":2}}],["xxxx",{"2":{"924":1}}],["xxx",{"2":{"29":1,"163":2,"447":2,"474":1,"585":1,"934":1}}],["xsd",{"2":{"647":1}}],["xs",{"2":{"28":1}}],["xss",{"2":{"15":1,"586":1,"662":1}}],["x3c",{"2":{"27":23,"28":23,"35":2,"74":3,"81":1,"82":1,"86":8,"90":1,"97":6,"100":2,"101":3,"103":2,"106":4,"149":1,"152":1,"153":1,"163":2,"169":1,"177":3,"178":4,"179":3,"184":1,"193":9,"222":1,"234":4,"244":5,"246":3,"247":3,"248":3,"258":3,"259":2,"260":3,"261":5,"262":12,"263":5,"265":1,"266":1,"267":1,"268":1,"269":1,"281":11,"288":37,"289":1,"330":1,"451":3,"482":1,"483":1,"506":4,"581":1,"652":8,"654":2,"661":6,"662":3,"663":12,"667":1,"680":4,"684":2,"692":13,"693":22,"696":6,"719":6,"748":1,"777":5,"781":2,"796":3,"800":1,"801":1,"806":40,"820":1,"832":2,"833":2,"839":4,"840":2,"857":3,"858":1,"859":2,"866":10,"867":19,"886":1,"887":2,"888":1,"896":1,"922":6,"923":2,"924":10,"925":2,"927":7,"928":2}}],["首席科学家",{"2":{"919":1}}],["首帧渲染",{"2":{"773":1}}],["首句仄起仄收",{"2":{"507":1}}],["首联以",{"2":{"508":1}}],["首联定基调",{"2":{"507":1}}],["首联",{"2":{"507":1}}],["首联写其发髻与衣饰的柔美",{"2":{"505":1}}],["首字母小写",{"2":{"451":1}}],["首选方案是",{"2":{"143":2}}],["首个",{"2":{"136":1}}],["首次注入",{"2":{"884":1}}],["首次加载慢",{"2":{"75":1,"84":1}}],["首次生成后缓存",{"2":{"57":1}}],["首次访问时生成",{"2":{"57":1}}],["首次访问",{"2":{"47":1}}],["首次内容绘制",{"2":{"37":1}}],["首屏依赖",{"2":{"71":1}}],["首屏后交互流畅",{"2":{"58":1}}],["首屏极快",{"2":{"39":1}}],["首屏体验重要的场景",{"2":{"37":1}}],["首页",{"2":{"27":1,"67":1,"77":1,"79":1}}],["首先需要写一个普通的",{"2":{"923":1}}],["首先需要引入核心包",{"2":{"480":1}}],["首先",{"2":{"602":1,"603":1}}],["首先确认形式和主题是否符合要求",{"2":{"504":1}}],["首先从本地缓存中返回数据",{"2":{"97":1}}],["首先要看清",{"2":{"68":1}}],["首先创建",{"2":{"25":1}}],["首先利用",{"2":{"3":1}}],["媒体下载",{"2":{"792":1}}],["媒体",{"2":{"26":1}}],["账号+密码",{"2":{"181":1}}],["账号",{"2":{"26":1,"28":1,"29":1}}],["注水",{"2":{"922":1}}],["注释解析",{"2":{"762":1}}],["注释",{"2":{"578":1}}],["注重养身修身",{"2":{"938":1}}],["注重内容",{"2":{"904":1}}],["注重在应用层设计埋点",{"2":{"541":1}}],["注重阅读体验的博客站点",{"2":{"342":1}}],["注意事项",{"2":{"435":1,"572":1,"573":1}}],["注意力涣散",{"2":{"352":1}}],["注意",{"2":{"153":1,"234":1,"237":1,"239":1,"366":1,"489":1,"523":1,"559":1,"581":1,"839":1,"925":1}}],["注",{"2":{"53":1,"124":1,"510":1}}],["注册模型",{"2":{"860":1}}],["注册命令",{"2":{"800":1}}],["注册到",{"2":{"797":1}}],["注册更新检查钩子",{"2":{"795":1}}],["注册的修饰器",{"2":{"771":1}}],["注册中心",{"2":{"771":1}}],["注册器",{"2":{"768":1}}],["注册器模式",{"2":{"761":2,"762":1}}],["注册形状修饰器",{"2":{"764":1}}],["注册视觉处理函数",{"2":{"715":1}}],["注册扩展到全局注册表",{"2":{"708":1}}],["注册机制",{"2":{"677":1}}],["注册名称",{"2":{"661":1}}],["注册表",{"2":{"652":1}}],["注册即可快速接入",{"2":{"523":1}}],["注册页面的",{"2":{"366":1}}],["注册接口返回值",{"2":{"196":1,"197":1}}],["注册",{"2":{"26":1,"28":1,"677":2,"764":2,"769":1,"771":1}}],["注入到",{"2":{"895":1}}],["注入到属性系统中",{"2":{"769":1}}],["注入上下文",{"2":{"883":1}}],["注入工具",{"2":{"863":1}}],["注入各种反检测脚本",{"2":{"799":1}}],["注入表达式到属性",{"2":{"769":1}}],["注入表达式求值器到属性系统",{"2":{"769":1}}],["注入和",{"2":{"652":1}}],["注入风险检测",{"2":{"586":1}}],["注入了",{"2":{"431":1}}],["注入不同的",{"2":{"415":1}}],["注入",{"2":{"15":1,"647":1,"856":1,"877":1}}],["注入规格",{"2":{"3":1}}],["安装指引",{"2":{"881":1}}],["安装后脚本",{"2":{"792":1}}],["安装所有图表",{"2":{"708":1}}],["安装所有",{"2":{"706":1}}],["安装",{"0":{"899":1},"2":{"695":1,"780":1,"785":1}}],["安装项目依赖",{"2":{"666":1}}],["安装与运行",{"0":{"666":1,"695":1,"752":1,"781":1,"810":1,"871":1}}],["安装对应工具",{"2":{"564":1}}],["安装缺失的依赖包",{"2":{"414":1}}],["安装依赖",{"0":{"221":1,"480":1},"2":{"25":1,"561":1,"583":1,"722":1,"751":1,"871":1}}],["安排好日常的专注时间",{"2":{"379":1}}],["安全封装重度覆写逻辑与深层嵌套",{"2":{"928":1}}],["安全架构的核心",{"2":{"801":1}}],["安全的会话复用",{"2":{"786":1,"789":1}}],["安全的登录状态复用",{"2":{"784":1}}],["安全的对象属性访问器",{"2":{"268":1}}],["安全政策",{"2":{"734":1,"823":1}}],["安全沙箱执行",{"2":{"641":1}}],["安全优先",{"2":{"597":1}}],["安全审查",{"2":{"586":1}}],["安全审查技能",{"2":{"586":2}}],["安全审计等闭环工作",{"2":{"438":1}}],["安全相关要求",{"2":{"575":1}}],["安全要求",{"2":{"575":1}}],["安全地桥接",{"2":{"787":1}}],["安全地读取多源上下文",{"2":{"548":1}}],["安全地从联合中移除成员",{"2":{"244":1}}],["安全引用",{"2":{"208":1}}],["安全",{"2":{"201":1,"373":1,"548":1,"586":1,"587":1}}],["安全验证",{"2":{"133":1}}],["安全高效",{"2":{"71":1}}],["安全防护",{"2":{"15":1}}],["安全性是核心需求",{"2":{"200":1}}],["安全性",{"2":{"15":1,"200":1,"494":1,"591":1,"642":1,"889":1}}],["rd",{"2":{"762":1,"764":1,"771":1}}],["rp",{"2":{"762":1,"764":1,"771":1}}],["rpc",{"2":{"342":1,"344":1}}],["r2",{"2":{"693":1}}],["rgba",{"2":{"677":2,"679":1,"734":1}}],["rgb",{"2":{"677":2,"679":1,"929":1,"933":1}}],["rf",{"2":{"594":1,"595":1}}],["rm",{"2":{"594":1,"595":1}}],["r1",{"2":{"512":1,"522":3,"693":1}}],["rlhf",{"2":{"551":1}}],["rl",{"2":{"419":1,"489":8,"551":1}}],["rules>",{"2":{"506":1}}],["rules",{"0":{"575":1,"577":1},"1":{"576":1,"577":1,"578":1},"2":{"506":2,"570":3,"575":2,"577":1,"597":2}}],["rust",{"2":{"343":3,"558":1,"642":1,"845":2,"902":1}}],["runcli",{"2":{"796":1}}],["runtest",{"2":{"706":1}}],["runtime",{"2":{"62":1,"65":2,"87":1,"203":1,"342":1,"419":1,"792":2}}],["running",{"2":{"178":1,"419":1}}],["run",{"2":{"43":2,"59":1,"94":1,"572":1,"573":3,"594":2,"595":2,"667":3,"697":2,"723":2,"726":1,"752":2,"881":12,"886":1,"898":1}}],["rc",{"2":{"331":1}}],["r",{"2":{"262":2,"668":2,"683":1,"833":4,"840":2}}],["r>",{"2":{"262":2}}],["rimraf",{"2":{"826":1}}],["ringconfig>",{"2":{"693":1}}],["ring",{"2":{"677":1,"679":1,"693":1,"927":1}}],["right=",{"2":{"628":1,"636":2}}],["rightarrow→",{"2":{"377":4,"553":2}}],["right",{"2":{"243":2}}],["rich",{"2":{"27":1}}],["rspack",{"2":{"343":1}}],["rsbuild",{"2":{"217":1,"343":2}}],["rsc",{"0":{"73":1},"2":{"73":5,"74":1,"80":1,"93":1,"847":1,"848":1,"849":1,"928":1}}],["rxjs",{"2":{"178":2,"179":2}}],["rapier",{"2":{"734":1}}],["raycast",{"2":{"748":1}}],["raycaster",{"2":{"734":1,"740":1,"748":2}}],["ray",{"2":{"734":1}}],["rawshadermaterial",{"2":{"734":1}}],["rawcount",{"2":{"713":1}}],["rawevent",{"2":{"661":1}}],["radiant",{"2":{"874":1}}],["radiusaxis",{"2":{"714":1}}],["radius",{"2":{"230":3,"232":1,"310":3,"714":1,"921":3,"922":1,"923":1,"924":1}}],["radarview",{"2":{"706":1}}],["radarseries",{"2":{"706":1}}],["radar",{"2":{"706":3,"714":2}}],["raf管理",{"2":{"679":1}}],["raf",{"2":{"672":1,"676":1,"677":1,"686":2,"761":1,"767":1}}],["rate",{"2":{"550":1}}],["rationality",{"2":{"393":1}}],["ragas",{"2":{"550":1}}],["rag",{"2":{"352":1,"512":2,"522":2,"536":1,"550":1,"558":1,"573":1}}],["random",{"2":{"152":1}}],["rabbitmq",{"2":{"138":1}}],["rq",{"2":{"104":6,"106":1,"110":3}}],["room",{"2":{"734":1}}],["rootrenderer",{"2":{"647":1,"649":3,"654":2}}],["root",{"2":{"280":1,"306":2,"647":2,"649":1,"668":1,"676":1,"881":1,"886":4,"895":1,"928":1,"933":1}}],["rootstore",{"2":{"646":1,"647":1,"649":1,"650":3,"653":2}}],["roots",{"2":{"222":1}}],["rootdir>",{"2":{"222":1}}],["rootdirs",{"2":{"203":1}}],["rootdir",{"2":{"203":1,"204":2,"213":1,"214":1,"215":1}}],["rotationdeg",{"2":{"692":1}}],["rotation",{"2":{"682":2,"692":1,"737":2,"740":1,"748":1,"749":1,"753":2}}],["roi",{"0":{"365":1},"2":{"355":1,"365":2,"556":2,"617":1,"902":1,"934":1}}],["rollup",{"2":{"642":1,"677":2,"702":1,"706":1,"730":1,"734":2,"758":2,"762":2,"764":1,"778":1}}],["rollback",{"2":{"110":1}}],["rollbackonerror",{"2":{"100":1}}],["role>",{"2":{"506":1}}],["roles",{"2":{"275":1}}],["role",{"2":{"233":3,"239":2,"240":1,"506":1}}],["role=$",{"2":{"107":1}}],["roleid",{"2":{"107":6}}],["robots",{"2":{"79":1}}],["rows=",{"2":{"28":1}}],["roughnessmap",{"2":{"749":1}}],["roughness",{"2":{"729":1,"734":1,"742":1,"749":1}}],["roundcornersmodifier",{"2":{"762":1,"764":1}}],["roundcorners",{"2":{"757":1,"771":1}}],["round",{"2":{"281":1,"692":2}}],["rounded",{"2":{"27":1,"28":3,"925":1,"927":3,"933":1}}],["routes",{"0":{"83":1},"2":{"83":1,"92":2,"274":2}}],["route",{"2":{"78":1,"79":2,"83":3,"864":1}}],["router",{"0":{"76":1},"1":{"77":1,"78":1,"79":1},"2":{"25":1,"27":1,"28":1,"46":1,"71":1,"73":1,"86":1,"274":2,"290":1,"339":1,"341":3,"886":1}}],["reject",{"2":{"801":1,"832":1,"839":1}}],["reidentified",{"2":{"799":1,"806":2}}],["rebase",{"2":{"451":3}}],["reload",{"2":{"650":1,"654":3,"659":1,"663":1}}],["release",{"2":{"677":2,"726":1,"881":1}}],["releaselock",{"2":{"168":1}}],["relevance",{"2":{"550":1}}],["relations",{"2":{"281":1}}],["repeatermodifier",{"2":{"762":1,"764":1,"771":1}}],["repeater",{"2":{"757":1}}],["repeat",{"2":{"743":1}}],["replit",{"2":{"561":2,"562":2}}],["replicate",{"2":{"523":2}}],["replan",{"2":{"431":1,"432":1}}],["replacedby",{"2":{"806":1}}],["replacetextignorekeys",{"2":{"662":1}}],["replacetext",{"2":{"662":1}}],["replace",{"2":{"175":1,"662":1}}],["repo",{"2":{"636":1,"637":1}}],["reports",{"2":{"471":3,"474":1,"647":1}}],["reportlab",{"2":{"470":2,"472":2}}],["report",{"2":{"416":1,"470":2,"471":3,"472":2,"474":1}}],["repositories",{"2":{"275":1,"280":2,"281":1}}],["repository",{"2":{"256":1,"275":2,"280":2,"281":3,"336":2,"345":1}}],["receiving",{"2":{"880":1,"881":1,"883":1}}],["received",{"2":{"302":1,"315":2}}],["rectarealight",{"2":{"734":1}}],["rectangle",{"2":{"230":5,"232":1}}],["rectconfig>",{"2":{"693":1}}],["rect",{"2":{"677":1,"679":1,"680":1,"689":1,"693":1,"696":3,"705":1,"714":1}}],["recursion",{"2":{"652":1}}],["recommended",{"2":{"895":1}}],["reconstruct",{"0":{"374":1}}],["recoil",{"2":{"341":1}}],["record",{"0":{"372":1},"2":{"179":1,"583":1,"662":1,"663":6,"693":1,"806":3,"832":1,"839":2,"866":4,"896":1}}],["ref",{"2":{"799":2,"806":3}}],["refinement",{"2":{"476":1}}],["refactor",{"2":{"451":1,"581":1,"587":1,"881":1,"890":3}}],["reflexion",{"2":{"426":1}}],["reflection",{"2":{"426":1}}],["reflect",{"2":{"203":1}}],["references",{"0":{"205":1,"207":1,"210":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1},"2":{"203":2,"204":1,"205":1,"207":1,"209":1,"210":1,"214":1,"215":1,"216":3,"226":1,"442":3,"443":3,"451":2,"792":1,"881":1,"887":1}}],["refetchonwindowfocus",{"2":{"106":1}}],["removefromparent",{"2":{"748":1}}],["removeeventlistener",{"2":{"740":1}}],["removed",{"2":{"713":1}}],["removechildren",{"2":{"692":1}}],["removecomments",{"2":{"203":1,"204":1}}],["removestore",{"2":{"653":1}}],["remove",{"2":{"244":5,"705":1,"740":1,"748":1}}],["remoteentry",{"2":{"288":4}}],["remotes",{"2":{"288":1}}],["remotepatterns",{"2":{"84":2}}],["remote",{"2":{"29":1}}],["regular",{"2":{"866":1}}],["regularpolygonconfig>",{"2":{"693":1}}],["regularpolygon",{"2":{"677":1,"679":1,"693":1}}],["registry",{"0":{"800":1,"860":1},"2":{"790":1,"791":1,"792":2,"797":2,"800":3,"851":1,"860":2}}],["registerupdatenoticeonexit",{"2":{"796":1}}],["registerupdatelifecycle",{"2":{"711":1,"720":1}}],["registermodifier",{"2":{"771":2,"776":1}}],["registermap",{"2":{"711":1,"720":1}}],["registeranimation",{"2":{"767":1,"777":1}}],["registeraction",{"2":{"711":1,"720":1}}],["registeredanimations",{"2":{"767":2}}],["registersubtypedefaulter",{"2":{"720":1}}],["registerseriesmodel",{"2":{"711":1,"720":1}}],["registerloading",{"2":{"711":1,"720":1}}],["registerlayout",{"2":{"711":1,"720":1}}],["registertransform",{"2":{"711":1,"720":1}}],["registervisual",{"2":{"711":1,"715":1,"720":1}}],["registerpostupdate",{"2":{"711":1,"720":1}}],["registerpostinit",{"2":{"711":1,"720":1}}],["registerprocessor",{"2":{"711":1,"720":1}}],["registerpreprocessor",{"2":{"711":1,"720":1}}],["registerplugin",{"2":{"656":1}}],["registercustomseries",{"2":{"720":1}}],["registercommand",{"2":{"800":1}}],["registercomponentview",{"2":{"711":1,"720":1}}],["registercomponentmodel",{"2":{"711":1,"720":1}}],["registercoordinatesystem",{"2":{"711":1,"720":1}}],["registerchartview",{"2":{"711":1,"720":1}}],["registernode",{"2":{"677":1}}],["register",{"2":{"647":1,"705":1,"711":2,"811":1}}],["registerfunc",{"2":{"646":1}}],["registerfilter",{"2":{"646":1}}],["registerform",{"2":{"274":1}}],["registerrenderer",{"2":{"646":1,"652":1,"768":1,"776":1}}],["region",{"2":{"661":1,"714":1}}],["regenerate",{"2":{"858":1,"866":1}}],["regeneration",{"2":{"46":1,"75":1}}],["regexp",{"2":{"661":1,"866":1}}],["reg",{"2":{"196":1}}],["req",{"2":{"164":2,"178":1}}],["requiredenv",{"2":{"806":2}}],["required",{"2":{"806":1,"807":7}}],["requiredversion",{"2":{"288":7}}],["requires",{"2":{"482":1}}],["requirejs",{"2":{"298":1,"305":2,"308":1}}],["require",{"2":{"164":1,"203":1,"288":1,"298":1,"304":4,"305":2,"308":1,"333":2,"334":5,"335":2}}],["requests",{"2":{"881":1}}],["requesting",{"2":{"880":1,"881":2,"883":2,"884":1,"896":2}}],["requestinfo",{"2":{"839":1}}],["requestinit",{"2":{"832":1,"839":2}}],["requestbody",{"2":{"807":1}}],["requestanimation",{"2":{"761":1}}],["requestanimationframe",{"2":{"680":1,"686":2,"762":1,"767":2}}],["request",{"2":{"83":2,"97":1,"115":1,"142":1,"178":1,"451":1,"807":2,"822":1,"839":1,"881":1}}],["red",{"2":{"876":1,"880":1,"881":1,"887":2,"890":3,"925":1,"927":3}}],["reddit",{"2":{"792":2,"811":1}}],["reduce+reverse",{"2":{"851":1}}],["reducer",{"2":{"341":1}}],["reduce",{"2":{"281":2,"844":1,"850":1,"861":1}}],["reduxprovider",{"2":{"274":1}}],["redux",{"2":{"97":1,"107":1,"274":4,"289":1,"341":6,"642":1}}],["redis",{"2":{"129":1,"152":1,"155":1,"156":1,"542":1}}],["real",{"2":{"564":1}}],["reason",{"2":{"427":1}}],["reasoning",{"2":{"427":2}}],["readnetworkcapture",{"2":{"806":1}}],["readability",{"2":{"792":1}}],["readablestream",{"0":{"165":1,"166":1},"1":{"166":1,"167":1,"168":1,"169":1},"2":{"117":1,"143":1,"160":4,"165":1,"166":4,"168":5,"180":1,"822":1,"833":1,"840":3}}],["readline",{"2":{"487":1,"489":3}}],["ready",{"2":{"315":4,"777":2,"866":1}}],["readme",{"2":{"290":1,"647":1,"677":1,"706":2,"734":2,"762":3,"792":4,"823":1,"881":2}}],["readonly",{"2":{"247":1,"261":1,"281":11,"748":5,"866":11}}],["read",{"2":{"166":2,"168":2,"470":2,"478":1,"484":1,"591":1,"594":2,"595":1}}],["reader",{"2":{"166":2,"168":3}}],["reactchatstate",{"2":{"858":1}}],["reactdom",{"2":{"668":1}}],["reactquerydevtools",{"2":{"106":2}}],["react",{"0":{"11":1,"68":1,"69":1,"70":1,"73":1,"102":1,"109":1,"427":1},"1":{"69":1,"70":1,"71":1,"103":1,"104":1,"105":1,"106":1,"107":1,"108":1,"110":1,"111":1,"112":1,"113":1},"2":{"1":5,"2":1,"3":1,"7":2,"10":1,"11":3,"12":3,"18":3,"27":1,"28":2,"35":1,"38":1,"39":1,"59":2,"68":2,"69":2,"70":1,"71":7,"73":2,"74":1,"81":2,"86":1,"93":2,"97":5,"103":3,"106":3,"107":1,"108":1,"109":2,"203":15,"204":2,"214":1,"216":1,"256":1,"263":1,"274":4,"280":2,"285":1,"288":14,"302":1,"313":1,"326":1,"338":1,"339":2,"341":4,"342":12,"344":4,"414":2,"427":2,"428":1,"429":1,"430":1,"432":2,"433":1,"543":1,"545":1,"553":1,"558":1,"561":2,"562":5,"573":1,"640":1,"642":1,"647":3,"652":1,"658":1,"661":8,"755":1,"842":1,"843":1,"845":1,"847":2,"848":1,"849":3,"850":2,"858":5,"864":1,"867":1,"872":2,"892":1,"902":1,"922":2,"923":4,"925":1,"926":1,"927":2,"928":9,"930":2,"931":2,"933":1,"934":5}}],["retained",{"2":{"673":1,"675":1}}],["retrieval",{"2":{"411":1}}],["retriableerror",{"2":{"169":1,"820":2}}],["retrycount++",{"2":{"171":1,"175":1}}],["retrycount",{"2":{"171":3,"175":4}}],["retry",{"2":{"106":1,"121":1,"171":1,"175":2,"330":5,"833":2,"839":1,"840":2}}],["returns",{"2":{"175":1,"839":1,"840":3}}],["return",{"2":{"26":2,"27":3,"28":3,"81":1,"82":1,"83":1,"86":1,"97":3,"99":2,"100":2,"101":2,"103":3,"106":1,"107":1,"108":3,"149":1,"152":3,"153":1,"169":2,"171":1,"172":2,"173":1,"174":1,"175":4,"178":2,"179":4,"184":1,"185":3,"187":2,"188":1,"194":1,"203":1,"223":2,"230":3,"231":5,"232":3,"238":2,"246":2,"248":3,"254":1,"258":1,"259":2,"260":1,"261":2,"263":1,"265":1,"266":1,"267":3,"268":1,"269":1,"281":11,"288":2,"289":4,"295":2,"300":1,"301":1,"305":1,"310":1,"315":4,"319":1,"324":3,"328":2,"330":1,"489":1,"685":2,"820":2,"922":1,"923":1,"925":1,"927":2}}],["re",{"0":{"312":1},"2":{"103":1}}],["resize",{"2":{"676":1,"677":1,"719":1,"767":1,"777":1}}],["resources",{"2":{"631":2,"677":1}}],["resolution",{"2":{"451":1}}],["resolvelanguagemodel",{"2":{"853":1,"856":1}}],["resolveplugin",{"2":{"656":1}}],["resolver│",{"2":{"799":1}}],["resolverenderer",{"2":{"646":1,"649":1,"652":2}}],["resolver",{"2":{"280":1,"342":1,"792":1,"799":1}}],["resolvers",{"2":{"280":1}}],["resolvejsonmodule",{"2":{"203":1,"204":2}}],["resolve",{"2":{"149":4,"152":2,"153":2,"166":1,"216":2,"330":2,"334":1,"647":1,"801":1,"832":1,"839":1,"840":1}}],["resume",{"2":{"482":1,"485":1,"486":1,"489":1,"767":1}}],["result可直接返回",{"2":{"187":1}}],["result",{"0":{"246":1},"2":{"149":2,"152":3,"153":2,"187":2,"227":1,"234":4,"244":1,"246":10,"250":1,"262":6,"263":2,"305":2,"482":1,"483":2,"486":2,"488":1,"856":1,"859":1,"866":2,"868":1}}],["reset",{"2":{"663":1,"686":2,"692":1,"712":1}}],["researcher",{"2":{"416":1,"470":2,"471":4,"472":2,"475":1}}],["research",{"0":{"416":1},"2":{"467":2,"471":2,"472":1,"474":1,"476":1,"512":1,"518":4}}],["reservestock",{"2":{"281":1}}],["reselect",{"2":{"107":1,"341":1}}],["restoredata",{"2":{"708":2,"719":1}}],["restful",{"2":{"110":1,"112":1,"115":1,"342":2}}],["rest",{"2":{"95":1,"342":1}}],["res",{"2":{"81":2,"83":2,"97":2,"99":5,"103":2,"152":5,"164":6}}],["responsehandler",{"2":{"848":1}}],["responses",{"2":{"807":6,"853":1}}],["response",{"2":{"26":6,"115":1,"142":1,"149":2,"152":2,"153":3,"166":5,"169":6,"175":3,"255":1,"260":4,"280":2,"820":6,"822":1,"832":2,"839":2,"858":1}}],["reverse",{"2":{"672":1,"677":1,"686":2,"692":1,"844":1,"850":1,"861":1}}],["revert",{"2":{"451":1}}],["revalidation",{"2":{"47":2,"97":1}}],["revalidateonreconnect",{"2":{"97":1}}],["revalidateonfocus",{"2":{"97":1,"99":1}}],["revalidatetag",{"2":{"46":1,"48":1}}],["revalidatepath",{"2":{"46":1,"48":1}}],["revalidate",{"2":{"46":2,"47":5,"48":1,"57":1,"59":2,"90":1,"94":1,"97":3,"100":1,"110":1,"342":1}}],["reviewer",{"2":{"570":1,"590":1,"591":2,"592":2,"880":1,"881":6,"889":4}}],["review",{"2":{"3":1,"9":3,"219":1,"455":1,"565":1,"568":1,"570":4,"577":2,"579":1,"583":2,"586":2,"587":1,"588":2,"592":1,"628":1,"880":2,"881":5,"883":3,"884":1,"892":1,"896":2,"928":1}}],["renderframe",{"2":{"776":1}}],["renderorder",{"2":{"748":1}}],["renderobject",{"2":{"734":1,"737":1,"739":1,"748":4}}],["renderobjects",{"2":{"733":1,"736":1,"739":1}}],["rendercontext",{"2":{"739":1,"748":2}}],["renderpipeline",{"2":{"734":1}}],["rendertarget3d",{"2":{"734":1}}],["rendertarget",{"2":{"734":1,"748":3}}],["rendertopipeablestream",{"2":{"69":1}}],["rendertostring",{"2":{"38":2,"39":1,"69":1}}],["renderlist",{"2":{"733":2,"734":1,"736":1,"737":1,"739":1}}],["renderabledomelement",{"2":{"762":1}}],["renderableelement",{"2":{"761":1,"762":1}}],["renderable",{"2":{"733":1}}],["renderitem",{"2":{"706":1,"720":1}}],["rendering",{"2":{"34":1,"38":1,"75":2,"676":2,"712":1}}],["renderedframe",{"2":{"776":1}}],["rendered",{"2":{"706":1}}],["renderertype",{"2":{"776":3,"777":2}}],["rendererclass",{"2":{"768":2,"776":1}}],["rendererconfig",{"2":{"652":4,"661":1,"662":1}}],["rendererresolver",{"2":{"662":1}}],["rendererprops",{"2":{"661":1}}],["rendererprops>",{"2":{"661":3}}],["rendererbasicconfig",{"2":{"661":2}}],["rendererevent>",{"2":{"661":1}}],["rendererevent",{"2":{"654":2,"661":1}}],["rendererenv",{"2":{"647":1,"661":1,"662":1}}],["renderersettingsfortype",{"2":{"777":1}}],["renderersettings",{"2":{"777":1}}],["renderersmanager",{"2":{"761":1,"762":1,"764":1,"768":2}}],["rendererstypemap",{"2":{"649":1,"652":2}}],["rendererstore",{"2":{"646":1,"649":1,"650":3,"653":1}}],["renderers",{"2":{"646":1,"647":3,"649":1,"650":1,"652":2,"725":1,"734":2,"762":1,"764":4,"768":1}}],["renderer",{"0":{"739":1,"768":1},"2":{"27":1,"641":1,"645":2,"646":2,"647":2,"649":1,"652":4,"656":1,"661":3,"705":2,"706":1,"719":1,"732":2,"733":3,"734":2,"736":2,"737":1,"739":4,"745":1,"748":6,"753":5,"761":1,"765":2,"768":4,"773":1,"776":2,"777":2,"781":1}}],["render",{"2":{"2":1,"35":1,"640":2,"647":3,"649":3,"652":1,"658":1,"661":1,"668":3,"705":2,"706":2,"733":1,"736":2,"745":1,"748":2,"749":1,"753":1,"881":1}}],["功能单一的",{"2":{"925":1}}],["功能单一且可复用的模块",{"2":{"294":1}}],["功能开发计划",{"2":{"881":1}}],["功能测试执行器",{"2":{"881":1}}],["功能测试",{"2":{"881":1}}],["功能完结",{"2":{"881":1}}],["功能的脚本语言",{"2":{"921":1}}],["功能的全栈开发者和前端开发者",{"2":{"843":1}}],["功能的简单叠加",{"2":{"71":1}}],["功能路由",{"2":{"792":1}}],["功能查询",{"2":{"748":1}}],["功能模块",{"2":{"636":1}}],["功能迭代",{"2":{"567":1}}],["功能可将任意资料转为两人播客式对话",{"2":{"515":1}}],["功能定位",{"2":{"411":1}}],["功能产品",{"0":{"367":1}}],["功能前",{"2":{"366":1}}],["功能带来留存",{"2":{"366":1}}],["功能很全",{"2":{"366":1}}],["功能设计",{"2":{"366":1}}],["功能更全面",{"2":{"345":1}}],["功能主义大而全",{"2":{"342":1}}],["功能",{"2":{"193":1,"207":1,"208":1,"209":1,"217":1,"383":1,"708":1,"888":1}}],["功能实现评论登录",{"2":{"23":1}}],["功能全面",{"2":{"19":1}}],["友好几何体",{"2":{"734":1}}],["友好的欢迎用户",{"2":{"506":1}}],["友好的",{"2":{"340":1}}],["友好度",{"2":{"57":1,"934":1}}],["友好",{"2":{"23":1,"57":4,"92":1,"311":1,"322":1,"701":1,"730":1,"786":1,"789":1,"822":1,"930":1}}],["搭建而成",{"2":{"904":1}}],["搭建完善的评估体系",{"2":{"538":1}}],["搭建内部性能看板",{"2":{"528":1}}],["搭建一套专属的",{"2":{"491":1}}],["搭建一个支持内容管理",{"2":{"22":1}}],["搭建",{"2":{"462":1,"509":1,"934":1}}],["搭建系统的骨架",{"0":{"385":1}}],["搭建博客网站",{"0":{"22":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1}}],["以万物为刍狗",{"2":{"958":1}}],["以此类推",{"2":{"954":1}}],["以此作为全项目的",{"2":{"929":1}}],["以此来迫使自己真正透彻地掌握知识",{"2":{"610":1}}],["以人为本的模式对于在家庭",{"2":{"907":1}}],["以全栈技术为手段",{"2":{"901":1}}],["以全局规划见长",{"2":{"414":1}}],["以为",{"2":{"622":1}}],["以目录形式组织",{"2":{"547":1}}],["以前需要专门排期的重构工作",{"2":{"528":1}}],["以安全",{"2":{"511":1}}],["以夸张手法强化空间疏离感",{"2":{"507":1}}],["以曹植",{"2":{"505":1,"508":1}}],["以供后续使用",{"2":{"486":1}}],["以平衡响应速度与成本",{"2":{"481":1}}],["以支持复杂的研究和决策任务",{"2":{"470":1}}],["以规避问题",{"2":{"423":1}}],["以便它能够正确生成所需的",{"2":{"925":1}}],["以便",{"2":{"422":1}}],["以便回滚",{"2":{"108":1}}],["以一个复杂的调研流程为例",{"2":{"416":1}}],["以极低的成本去解决一个具体的社会问题",{"2":{"381":1}}],["以极高的品味去甄别筛选",{"2":{"362":1}}],["以项目为单位的拖延",{"2":{"361":1}}],["以小见大的行动力",{"0":{"361":1}}],["以更少投入获得更大收益",{"2":{"342":1}}],["以领域为中心",{"2":{"277":1}}],["以减少人工",{"2":{"219":1}}],["以获得最佳类型安全",{"2":{"203":1}}],["以最纯粹的方式利用工具完成特定的子任务",{"2":{"429":1}}],["以最清晰的思路面对挑战",{"2":{"201":1}}],["以最简洁的方式解决问题",{"2":{"201":1}}],["以最小的",{"2":{"110":1}}],["以上仅仅是结合个人实践的记录",{"2":{"965":1}}],["以上的工作",{"2":{"405":1}}],["以上",{"2":{"155":1}}],["以实现跨节点的",{"2":{"129":1}}],["以下",{"2":{"522":1}}],["以下三类问题场景",{"2":{"465":1}}],["以下简称",{"2":{"357":1}}],["以下五种收窄方式覆盖绝大多数场景",{"2":{"231":1}}],["以下从六个核心场景展开",{"2":{"182":1}}],["以下从多个维度进行对比分析",{"2":{"109":1}}],["以下是实战中必须拉响警报的红线",{"2":{"933":1}}],["以下是通过",{"2":{"637":1}}],["以下是我们在比赛中使用的核心",{"2":{"494":1}}],["以下是我结合",{"2":{"357":1}}],["以下是推荐的模块化配置模板",{"2":{"322":1}}],["以下是几种常见的通信方案",{"2":{"289":1}}],["以下是几个最常见的场景",{"2":{"256":1}}],["以下是针对不同项目类型的推荐配置组合",{"2":{"204":1}}],["以下是针对常见项目类型的推荐配置组合",{"2":{"204":1}}],["以下是完整示例",{"2":{"178":1}}],["以下是一个完整的微前端项目目录结构示例",{"2":{"290":1}}],["以下是一个完整的示例",{"2":{"163":1}}],["以下是一个基于",{"2":{"274":1,"275":1,"280":1}}],["以下是一个生产环境常用的",{"2":{"203":1}}],["以下是一个简化后的任务流订阅客户端实现",{"2":{"175":1}}],["以下是核心实现",{"2":{"166":1}}],["以下是",{"2":{"164":1}}],["以下是主流工具选型推荐",{"2":{"17":1}}],["以下为基于",{"2":{"152":1}}],["以完成数据处理并驱动界面更新",{"2":{"95":1}}],["以数据流",{"2":{"86":1}}],["以博客页面为例",{"2":{"82":1}}],["以什么顺序获取",{"2":{"69":1}}],["以组件级拆分",{"2":{"55":1}}],["以阅读为主的场景",{"2":{"45":1}}],["以服务器实时渲染为代价",{"2":{"41":1}}],["以及餐区大概都是做什么饭菜",{"2":{"964":1}}],["以及其收益",{"2":{"962":1}}],["以及正常体重应位于什么区间",{"2":{"960":1}}],["以及戒掉不良生活习惯的注意点",{"2":{"940":1}}],["以及自己的坚忍硬扛",{"2":{"938":1}}],["以及处理",{"2":{"934":1}}],["以及未来对接智能化",{"2":{"932":1}}],["以及强类型组件封装",{"2":{"928":1}}],["以及一些研究员早年写的博客",{"2":{"919":1}}],["以及它们之间的关联即可",{"2":{"916":1}}],["以及上述提到的平衡思维来落地调节回路",{"2":{"910":1}}],["以及个人在技术浪潮中的成长记录",{"2":{"903":1}}],["以及构建从",{"2":{"902":1}}],["以及各",{"2":{"769":1}}],["以及基础设施层",{"2":{"760":1}}],["以及知识共享方面",{"2":{"613":1}}],["以及国内模型",{"2":{"567":1}}],["以及国内的",{"2":{"549":1}}],["以及建站初始模板快速搭建",{"2":{"561":1}}],["以及如何在大规模分布式系统上高效部署和运行这些模型",{"2":{"551":1}}],["以及精确到",{"2":{"550":1}}],["以及复杂文档的切块",{"2":{"546":1}}],["以及跨端",{"2":{"542":1}}],["以及对",{"2":{"539":1}}],["以及对接身份认证系统",{"2":{"175":1}}],["以及解读中展现的专业感",{"2":{"509":1}}],["以及从",{"2":{"509":1}}],["以及网络访问",{"2":{"478":1}}],["以及持续进化的前沿工具栈",{"2":{"463":1}}],["以及通过调用外部工具",{"2":{"412":1}}],["以及资产特定性",{"2":{"391":1}}],["以及是什么使它成为最好的",{"2":{"359":1}}],["以及拥有极高的品味",{"2":{"357":1}}],["以及乐观更新",{"2":{"342":1}}],["以及声明文件系统",{"2":{"317":1}}],["以及加载静态图片等",{"2":{"115":1}}],["以及频繁的与服务端的同步",{"2":{"113":1}}],["以及",{"2":{"33":1,"46":1,"114":1,"175":1,"367":1,"417":1,"419":1,"434":1,"525":1,"912":1,"927":1}}],["以",{"0":{"473":1},"1":{"474":1,"475":1},"2":{"22":1,"37":1,"45":1,"50":1,"84":1,"110":1,"180":1,"274":1,"275":1,"505":1,"523":1,"567":1,"840":1,"921":1,"928":1}}],["到生产级系统",{"2":{"901":1}}],["到元素",{"2":{"765":1}}],["到移动端的全平台一致性展示",{"2":{"699":1}}],["到最终像素呈现在",{"2":{"745":1}}],["到最终屏幕更新",{"2":{"689":1}}],["到最终",{"2":{"659":1}}],["到纳瓦尔的财富与幸福逻辑",{"2":{"603":1}}],["到编辑器里那个如影随形的智能补全伙伴",{"2":{"569":1}}],["到知识图谱",{"0":{"536":1}}],["到哀婉",{"2":{"508":1}}],["到底比普通",{"2":{"503":1}}],["到底需要哪一个",{"0":{"111":1},"1":{"112":1,"113":1}}],["到结构化",{"0":{"503":1},"1":{"504":1,"505":1}}],["到你手里可能水土不服",{"2":{"462":1}}],["到如今能够独立思考",{"2":{"420":1}}],["到成群结队的",{"2":{"413":1}}],["到达领域前沿",{"2":{"358":1}}],["到高内聚低耦合的权衡",{"2":{"332":1}}],["到处运行",{"2":{"308":1}}],["到该分支类型",{"2":{"231":1}}],["到后期甚至可以降至每",{"2":{"140":1}}],["到这份静态",{"2":{"70":1}}],["到",{"0":{"22":1,"68":1,"71":1,"349":1,"358":1,"367":1,"368":1,"377":1,"402":1,"420":1,"461":1,"527":1,"528":1,"555":1,"556":1,"558":1,"620":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"69":1,"70":1,"71":1,"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1},"2":{"70":1,"72":1,"144":1,"145":1,"158":1,"180":1,"250":1,"272":1,"298":1,"303":1,"337":1,"367":1,"403":1,"406":2,"477":1,"482":1,"491":2,"503":1,"509":1,"550":2,"557":1,"597":1,"601":1,"602":1,"628":1,"712":1,"864":1,"902":4,"925":1,"961":1,"963":1}}],["到输出",{"2":{"1":1}}],["09",{"0":{"964":1}}],["0ea5e9",{"2":{"925":1}}],["0xffffff",{"2":{"753":1}}],["0x00ff00",{"2":{"753":1}}],["069",{"2":{"699":1}}],["00d2ff",{"2":{"696":1}}],["000",{"2":{"439":2,"643":1}}],["001",{"2":{"196":1}}],["01",{"2":{"331":4,"753":2}}],["0+",{"0":{"323":1},"1":{"324":1,"325":1},"2":{"317":1,"323":1,"324":1}}],["0",{"0":{"22":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1},"2":{"26":3,"104":1,"117":1,"149":1,"152":2,"168":1,"171":1,"175":2,"179":1,"187":1,"193":1,"194":1,"223":1,"248":1,"258":1,"269":1,"281":2,"288":13,"330":1,"331":4,"477":1,"484":2,"489":1,"506":1,"509":1,"521":2,"523":1,"550":1,"643":2,"650":1,"652":1,"661":3,"666":4,"677":1,"685":1,"699":3,"706":2,"728":2,"733":1,"739":1,"749":13,"753":3,"755":1,"787":2,"801":2,"807":6,"809":2,"833":1,"874":1,"881":1,"921":1,"922":1,"924":2}}],["谷歌地图",{"2":{"20":1}}],["支撑复杂的",{"2":{"928":1}}],["支撑层",{"2":{"279":1}}],["支付等",{"2":{"291":1}}],["支付信息",{"2":{"278":1}}],["支付平台会向商户服务器发送",{"2":{"132":1}}],["支付宝",{"2":{"132":1}}],["支付回调",{"2":{"132":1}}],["支付通过",{"2":{"31":1}}],["支付集成",{"2":{"30":1}}],["支付",{"2":{"20":1}}],["支持的编码平台之一",{"2":{"898":1}}],["支持环境变量替换如",{"2":{"895":1}}],["支持跨进程重启的长时间",{"2":{"859":1}}],["支持长时间运行的",{"2":{"859":1}}],["支持流式",{"2":{"858":1}}],["支持遥测",{"2":{"851":1}}],["支持注入自定义",{"2":{"815":1}}],["支持在",{"2":{"757":1}}],["支持将",{"2":{"755":1}}],["支持将节点的渲染结果缓存到离屏",{"2":{"682":1}}],["支持嵌套路径",{"2":{"743":1}}],["支持事件驱动的对象生命周期管理",{"2":{"740":1}}],["支持事件触发",{"2":{"343":1}}],["支持变换的层级继承",{"2":{"740":1}}],["支持时只需实现",{"2":{"739":1}}],["支持父子层级",{"2":{"737":1}}],["支持数组",{"2":{"713":1}}],["支持维度定义和数据操作",{"2":{"709":1}}],["支持从",{"2":{"699":1}}],["支持颜色空间的平滑过渡",{"2":{"686":1}}],["支持components",{"2":{"685":1}}],["支持命名空间",{"2":{"682":1}}],["支持裁剪",{"2":{"680":1}}],["支持缓存和滤镜",{"2":{"680":1}}],["支持按",{"2":{"799":1}}],["支持按需加载和",{"2":{"673":1}}],["支持按量付费",{"2":{"523":1}}],["支持批量渲染和图层级性能优化",{"2":{"672":1}}],["支持异步加载",{"2":{"641":1}}],["支持异步加载模块",{"2":{"305":1}}],["支持深读与按需检索",{"2":{"632":1}}],["支持传递要解释的内容",{"2":{"582":1}}],["支持全局配置",{"2":{"570":1}}],["支持接入任意",{"2":{"568":1}}],["支持接入多种",{"2":{"567":1}}],["支持实时预览和多轮对话修改",{"2":{"561":1}}],["支持实时协作和嵌入式分享",{"2":{"515":1}}],["支持对缓存结果应用多个滤镜",{"2":{"682":1}}],["支持对接兼容",{"2":{"559":1}}],["支持对话问答",{"2":{"512":3}}],["支持国内直连无需科学上网",{"2":{"523":1}}],["支持免费额度与企业接入",{"2":{"522":1}}],["支持本地或私有化部署",{"2":{"519":1}}],["支持本地部署与企业级应用",{"2":{"512":1}}],["支持直接问答",{"2":{"518":1}}],["支持直接部署到",{"2":{"64":1}}],["支持简洁",{"2":{"518":1}}],["支持学术",{"2":{"518":1}}],["支持导入大纲或笔记一键转",{"2":{"515":1}}],["支持中英双语实时语音转录",{"2":{"515":1}}],["支持文档自动生成",{"2":{"515":2}}],["支持超长上下文和插件生态",{"2":{"512":1}}],["支持超长上下文对话",{"2":{"512":1}}],["支持复杂的长上下文理解",{"2":{"478":1}}],["支持复杂的类型关系",{"2":{"264":1}}],["支持自定义技能和命令",{"2":{"470":1}}],["支持自动部署和预览",{"2":{"345":1}}],["支持上传背景资料",{"2":{"437":1}}],["支持更多的框架和静态站点生成器",{"2":{"345":1}}],["支持组件精准订阅状态",{"2":{"341":1}}],["支持服务器端渲染和客户端交互",{"2":{"339":2}}],["支持业务的快速扩展",{"2":{"292":1}}],["支持渐进式升级和技术迁移",{"2":{"292":1}}],["支持多部分内容",{"2":{"854":1}}],["支持多种来源",{"2":{"800":1}}],["支持多种属性类型",{"2":{"770":1}}],["支持多种光照模型",{"2":{"737":1}}],["支持多种类型",{"2":{"253":1}}],["支持多种类型复用",{"2":{"253":1}}],["支持多",{"2":{"568":1}}],["支持多文件读写",{"2":{"567":1}}],["支持多维表格与看板",{"2":{"515":1}}],["支持多维表格",{"2":{"515":1}}],["支持多模型切换",{"2":{"515":1}}],["支持多轮对话迭代",{"2":{"561":1}}],["支持多轮对话",{"2":{"511":2}}],["支持多级继承",{"2":{"209":1}}],["支持被其他项目引用",{"2":{"203":1}}],["支持精确的子路径导出",{"2":{"203":1}}],["支持所有现代浏览器",{"2":{"203":1}}],["支持携带请求体",{"2":{"179":1}}],["支持高度自定义的重连策略",{"2":{"167":1}}],["支持高度自定义重连策略",{"2":{"160":1}}],["支持发送",{"2":{"160":1,"167":1}}],["支持乐观更新",{"2":{"103":1}}],["支持表单",{"2":{"19":1}}],["支持",{"0":{"179":1},"2":{"18":2,"20":1,"23":1,"57":2,"160":1,"166":3,"167":1,"169":1,"178":1,"203":2,"220":1,"225":1,"308":1,"324":1,"331":1,"342":1,"512":1,"521":2,"522":1,"523":4,"564":1,"641":2,"655":1,"672":3,"677":1,"686":1,"729":1,"737":1,"755":1,"757":2,"762":3,"767":1,"782":1,"799":1,"800":1,"822":1,"828":1,"857":1}}],["支持动态交互",{"2":{"16":1}}],["函数预先定义组件的",{"2":{"927":1}}],["函数和逻辑动态生成样式",{"2":{"922":1}}],["函数等功能",{"2":{"921":1}}],["函数组合构建可跨后端编译的着色器",{"2":{"741":1}}],["函数管理全局扩展状态",{"2":{"711":1}}],["函数注册",{"2":{"711":1}}],["函数注册到全局注册表",{"2":{"708":1}}],["函数导出",{"2":{"706":1}}],["函数计算每帧的进度位置",{"2":{"686":1}}],["函数匹配",{"2":{"652":1}}],["函数文档",{"2":{"646":1}}],["函数语法",{"2":{"646":1}}],["函数调用",{"2":{"411":1,"655":1}}],["函数调用时",{"2":{"203":1}}],["函数响应式编程",{"2":{"344":2}}],["函数式编程",{"2":{"344":2}}],["函数加载模块",{"2":{"304":1}}],["函数既可以处理",{"2":{"255":1}}],["函数类型的交叉在",{"2":{"238":1}}],["函数类型的交叉",{"0":{"238":1}}],["函数名会被压缩混淆",{"2":{"217":1}}],["函数或后端服务",{"2":{"31":1}}],["函数",{"2":{"20":1,"97":1,"195":1,"231":1,"305":1,"342":1,"482":1,"489":1,"490":1,"640":1,"647":1,"706":1,"720":1,"734":1,"815":1,"823":1,"832":2,"839":1,"849":1}}],["函数签名",{"2":{"9":1}}],["ff0000",{"2":{"933":1}}],["fbx等",{"2":{"734":1}}],["fbx",{"2":{"734":1}}],["fbo",{"2":{"734":4}}],["fmt",{"2":{"697":1}}],["fp8",{"2":{"551":1}}],["fp",{"2":{"344":2}}],["fs",{"2":{"334":1}}],["fc",{"2":{"288":1}}],["fcp",{"2":{"37":1}}],["few",{"2":{"367":1}}],["feat",{"2":{"451":1,"581":1}}],["feature",{"2":{"335":2,"365":1,"451":1,"845":1}}],["featuresupport",{"2":{"762":1}}],["features",{"2":{"274":1}}],["feasibility",{"2":{"363":1}}],["federation",{"0":{"288":1},"2":{"287":1}}],["fetchdata",{"2":{"663":1}}],["fetchproducts",{"2":{"260":2}}],["fetchuser",{"2":{"246":2,"263":1}}],["fetcheventsourceinit",{"2":{"832":1,"839":2}}],["fetcheventsource",{"2":{"169":5,"174":1,"175":2,"179":1,"818":2,"819":1,"820":1,"823":2,"830":1,"832":2,"839":2}}],["fetcherresult>",{"2":{"662":1}}],["fetcherconfig",{"2":{"662":1}}],["fetcher",{"2":{"90":1,"97":3,"99":7,"100":1,"101":2,"107":2,"108":1,"640":1,"649":1,"653":1,"661":1,"662":1,"668":1}}],["fetchsse",{"2":{"166":2}}],["fetching",{"0":{"101":1,"342":1},"2":{"99":1,"103":1,"342":2}}],["fetch",{"0":{"165":1,"166":1,"167":1,"832":1},"1":{"166":1,"167":1,"168":1,"169":1},"2":{"71":1,"80":1,"81":1,"83":1,"94":2,"95":1,"97":3,"99":1,"103":2,"104":4,"107":1,"117":1,"118":1,"124":1,"142":1,"143":2,"149":1,"153":2,"155":1,"160":10,"165":2,"166":6,"167":3,"168":1,"169":2,"170":1,"171":1,"175":1,"180":3,"342":5,"668":1,"790":1,"792":2,"813":2,"815":4,"818":1,"822":2,"823":2,"824":1,"827":1,"830":2,"832":3,"839":4,"848":1,"857":1}}],["fetchcomments",{"2":{"28":2}}],["f",{"2":{"227":2,"250":3}}],["fn",{"2":{"225":1,"720":7,"736":1,"741":1,"742":2}}],["flexbox",{"2":{"647":1}}],["flex",{"2":{"647":1,"925":1,"926":1,"927":1,"928":1,"933":1}}],["flags",{"2":{"876":1,"880":1,"887":2}}],["flag",{"2":{"777":1,"845":1}}],["flash",{"2":{"521":1,"523":1}}],["flatten",{"2":{"203":1}}],["flowus",{"2":{"515":4}}],["float",{"2":{"187":2,"741":1,"748":1}}],["fly",{"2":{"229":3}}],["flicker",{"2":{"59":1}}],["frustumculled",{"2":{"740":1,"748":1}}],["frustumarray",{"2":{"734":1}}],["frustum",{"2":{"734":1}}],["fruits",{"2":{"365":1}}],["freeze",{"2":{"767":2,"777":1}}],["free",{"2":{"531":1}}],["fresh",{"2":{"104":1}}],["frameindex",{"2":{"806":1}}],["frameid",{"2":{"776":1,"806":1}}],["frames",{"2":{"806":1}}],["framemult",{"2":{"776":1}}],["framenum",{"2":{"770":2,"776":4}}],["frameelement",{"2":{"762":1}}],["framebuffertexture",{"2":{"734":1,"748":2}}],["framerate",{"2":{"692":1,"776":1}}],["frame",{"2":{"686":1,"692":2,"748":3,"761":1,"881":1,"888":1}}],["framework",{"2":{"344":4,"847":1,"848":1,"933":1}}],["fractals",{"2":{"881":1}}],["frac",{"2":{"365":1}}],["fragmentshadernode",{"2":{"742":1}}],["fragmentshader",{"2":{"742":1}}],["fragment",{"2":{"203":3}}],["frp",{"2":{"344":2}}],["frontside",{"2":{"742":1,"748":1}}],["frontend",{"2":{"216":2,"280":1,"281":2,"290":1,"342":1,"453":1}}],["frontmatter",{"0":{"448":1},"2":{"66":1,"442":1,"443":1,"576":1,"581":2,"586":1,"591":1,"879":1,"884":1,"895":2}}],["from",{"2":{"26":1,"27":5,"28":5,"81":1,"97":2,"99":2,"100":1,"103":1,"106":3,"107":2,"108":1,"152":2,"169":1,"175":1,"178":4,"179":3,"199":1,"203":3,"222":1,"223":1,"281":3,"288":5,"289":6,"295":1,"300":1,"301":1,"302":1,"306":1,"307":1,"310":3,"311":2,"312":5,"314":3,"315":10,"318":2,"319":1,"324":1,"325":1,"328":2,"333":2,"483":2,"490":1,"668":1,"724":1,"725":4,"753":1,"818":1,"843":3,"853":2,"922":1,"923":1,"927":3}}],["far",{"2":{"740":1,"749":1}}],["failing",{"2":{"890":1}}],["failed",{"2":{"149":2,"153":2,"777":1}}],["faithfulness",{"2":{"550":1}}],["faq",{"2":{"515":3}}],["facade",{"2":{"761":1}}],["face",{"2":{"523":3}}],["facebook",{"2":{"339":1}}],["fact",{"2":{"470":1}}],["factory",{"0":{"652":1,"685":1},"2":{"300":2,"306":4,"646":1,"647":2,"649":1,"650":1,"652":1,"673":1,"677":1,"679":1,"682":2,"685":3,"762":1,"771":1,"776":1,"880":1,"898":1}}],["factor",{"2":{"281":2,"857":1}}],["fatalerror",{"2":{"169":2,"171":3,"172":1,"173":1,"174":1,"175":4,"820":3}}],["fastlayer",{"2":{"676":1,"677":1,"679":1,"680":3,"693":1}}],["fastapi",{"2":{"573":2}}],["fast",{"2":{"97":1,"706":1,"792":1}}],["fastify",{"2":{"83":1,"344":1}}],["falsy",{"2":{"101":1}}],["false",{"2":{"28":2,"99":1,"100":2,"106":2,"173":2,"175":1,"203":3,"246":3,"288":1,"594":1,"712":1,"800":1,"924":1}}],["fallbackpolling",{"2":{"203":1}}],["fallback=",{"2":{"86":2,"288":4}}],["fallback",{"2":{"86":1,"523":2,"733":1,"734":1,"768":1}}],["funnelview",{"2":{"706":1}}],["funnelseries",{"2":{"706":1}}],["funnel",{"2":{"706":1}}],["func",{"2":{"686":4,"692":2,"796":1,"797":1,"806":1}}],["functionextensions",{"2":{"762":1}}],["functiondocs",{"2":{"646":1}}],["function",{"2":{"26":2,"27":3,"28":1,"82":1,"83":1,"86":1,"99":1,"100":1,"103":1,"106":1,"107":1,"108":1,"149":1,"153":1,"166":1,"168":3,"229":1,"231":4,"232":1,"246":1,"247":1,"248":2,"249":1,"254":3,"258":1,"259":1,"260":1,"262":1,"263":3,"265":1,"266":1,"267":1,"268":1,"269":1,"288":1,"289":5,"295":2,"305":2,"306":3,"310":1,"315":4,"321":2,"324":2,"325":1,"369":1,"411":1,"489":1,"490":1,"512":1,"521":1,"522":2,"523":1,"641":1,"642":1,"646":1,"647":1,"655":1,"685":2,"693":4,"733":1,"749":1,"769":2,"776":4,"839":1,"840":3,"867":3,"922":1,"923":1,"925":1,"927":2}}],["functions",{"2":{"20":3,"30":1,"223":1,"734":1}}],["fullstream",{"2":{"859":1}}],["fullstack",{"2":{"458":1}}],["fullstack=taste×build×leverage",{"2":{"458":2}}],["fullname",{"2":{"800":1}}],["fullinternals",{"2":{"677":2,"679":1}}],["fullentity",{"2":{"248":1}}],["full",{"0":{"458":1,"463":1,"464":1},"1":{"459":1,"460":1,"461":1,"462":1},"2":{"28":1,"457":2,"458":2,"459":3,"463":2,"464":1,"465":1,"466":1,"467":1,"477":1,"553":2,"554":3,"672":1,"673":1,"762":2,"764":2,"778":4,"902":3}}],["followskill",{"2":{"887":1}}],["fov",{"2":{"740":1,"749":1}}],["fogexp2",{"2":{"734":1}}],["fog",{"2":{"734":2}}],["footage",{"2":{"762":1}}],["footageinterface",{"2":{"762":1}}],["footageelement",{"2":{"762":1}}],["footerextra",{"2":{"806":1}}],["footer>",{"2":{"288":2}}],["footer",{"2":{"79":1}}],["foo",{"2":{"254":1,"333":1}}],["forbidden",{"2":{"807":1}}],["foreach",{"2":{"260":1,"289":1,"302":1,"315":1,"483":1,"686":1}}],["forcelayout",{"2":{"706":1}}],["force",{"2":{"216":1,"748":1,"901":1}}],["for",{"2":{"166":1,"168":3,"259":1,"330":1,"342":1,"482":2,"483":1,"486":1,"488":1,"887":1}}],["formitem",{"2":{"647":1}}],["formitemstore",{"2":{"646":1,"647":1,"650":3}}],["formstore",{"2":{"646":1,"647":1,"650":3,"653":2,"661":1,"663":2}}],["formulacontrol",{"2":{"647":1,"656":1}}],["formula",{"0":{"655":1},"2":{"642":1,"645":1,"646":1,"647":6,"650":1,"655":2}}],["formfield",{"2":{"274":1}}],["formatter",{"2":{"572":1,"845":1}}],["formatting",{"2":{"274":1,"280":1,"290":1}}],["formatdate",{"2":{"318":1}}],["format",{"2":{"231":1,"706":2,"839":1,"886":1}}],["form>",{"2":{"28":1}}],["form",{"2":{"28":1,"274":1,"645":2,"646":2,"647":5,"652":1,"656":1,"661":1,"668":1}}],["formevent",{"2":{"28":1}}],["focusable",{"2":{"777":1}}],["focus",{"2":{"103":1,"927":2}}],["foit",{"2":{"84":1}}],["fouc",{"2":{"922":1}}],["fout",{"2":{"84":1}}],["founder",{"2":{"553":1}}],["founduser",{"2":{"259":2}}],["found",{"2":{"78":1,"261":1}}],["fontmanagerworkeroverride",{"2":{"762":1}}],["fontmanager",{"2":{"761":1,"762":1,"765":1,"768":1}}],["fontscontainer",{"2":{"776":1}}],["fonts",{"2":{"274":1,"734":1}}],["font",{"2":{"27":3,"28":1,"84":1,"925":1,"927":1}}],["fis",{"2":{"647":2}}],["fis3",{"2":{"642":2,"647":2}}],["fish",{"2":{"229":3}}],["fixtures",{"2":{"792":1}}],["fixture",{"2":{"792":1}}],["fix",{"2":{"451":1,"570":1,"581":1,"871":1}}],["fixed",{"2":{"391":1}}],["fig",{"2":{"448":1}}],["figma",{"2":{"93":1,"128":1,"448":1}}],["fi",{"2":{"370":1}}],["finishing",{"2":{"880":1,"881":1,"883":1,"884":1,"892":1,"896":2,"900":1}}],["finish",{"2":{"692":1}}],["fine",{"2":{"512":2,"521":1,"523":3}}],["final",{"2":{"427":1}}],["finally",{"2":{"168":1}}],["finder",{"2":{"719":2}}],["findeventdispatcher",{"2":{"706":1}}],["findone",{"2":{"281":1,"692":1}}],["findbycustomerid",{"2":{"281":1}}],["findbyid",{"2":{"281":2,"328":2}}],["findfirst",{"2":{"259":2}}],["find",{"2":{"246":1,"261":3,"281":1,"692":1,"792":1,"799":1,"881":1}}],["fillstrokescene",{"2":{"692":1}}],["fillrule",{"2":{"692":1}}],["fillpriority",{"2":{"692":1}}],["fillenabled",{"2":{"692":1}}],["fill",{"2":{"686":1,"692":1,"696":1}}],["filepaths",{"2":{"895":1}}],["filepart",{"2":{"854":1}}],["fileloader",{"2":{"734":1}}],["file",{"2":{"482":1}}],["filename",{"2":{"288":2,"449":1}}],["filesv4",{"2":{"848":2,"866":1}}],["files",{"2":{"203":1,"216":1,"312":1,"471":5,"472":5,"474":2,"583":1,"646":1,"734":1,"806":1,"857":1,"866":1}}],["filterfunc",{"2":{"692":1}}],["filterhtml",{"2":{"662":1}}],["filtertarget",{"2":{"646":1}}],["filtersizeconfig",{"2":{"777":1}}],["filtersize",{"2":{"777":1}}],["filterschema",{"2":{"646":1}}],["filters",{"2":{"275":1,"676":1,"677":2,"679":2,"680":1,"682":1,"693":1,"762":1}}],["filtered",{"2":{"179":2}}],["filter",{"2":{"107":1,"179":5,"275":2,"289":1,"646":1,"647":3,"672":1,"676":1,"680":1,"682":2,"705":2,"706":1,"792":1}}],["fieldlength",{"2":{"833":4,"840":2}}],["fieldlength=",{"2":{"833":1}}],["field",{"2":{"168":4,"840":1}}],["fields",{"2":{"26":4}}],["firstonmulti",{"2":{"806":3}}],["firstframe",{"2":{"776":1}}],["first",{"0":{"72":1,"543":1,"925":1},"1":{"73":1,"74":1,"926":1},"2":{"110":1,"112":1,"263":1,"340":1,"767":1,"890":1,"928":1,"930":1,"933":1}}],["fire",{"2":{"682":1,"684":1}}],["firestore",{"2":{"20":1}}],["firebase",{"2":{"16":1,"20":3}}],["mt",{"2":{"927":1,"933":1}}],["m3",{"2":{"844":1,"861":1}}],["m2",{"2":{"844":1,"861":1}}],["m1",{"2":{"844":1,"861":1}}],["mrdoob",{"2":{"751":1}}],["mktest",{"2":{"706":1}}],["mkfs",{"2":{"595":1}}],["mpc",{"2":{"439":1}}],["mcp",{"0":{"439":1,"455":1},"2":{"434":1,"439":8,"440":1,"442":1,"449":2,"455":1,"491":1,"548":4,"552":1,"849":2}}],["mjs",{"2":{"308":2,"333":3,"335":1,"677":2,"734":1,"881":1}}],["mult",{"2":{"770":1}}],["multiturn",{"2":{"881":2}}],["multidimensional",{"2":{"770":2}}],["multi",{"0":{"415":1,"468":1,"535":1},"1":{"416":1},"2":{"415":1,"438":1,"467":1,"468":1}}],["multirepo",{"2":{"286":1}}],["multiply",{"2":{"281":1,"295":2,"304":1,"307":2}}],["mute",{"2":{"767":1,"777":1}}],["mutationfn",{"2":{"108":2}}],["mutation",{"2":{"106":2,"108":1}}],["mutations",{"2":{"103":1,"106":1,"110":1,"342":1}}],["mutate",{"2":{"99":3,"100":3,"110":2}}],["must",{"2":{"281":1}}],["mst",{"0":{"653":1,"663":1},"2":{"641":1,"642":1,"645":2,"646":1,"647":2,"649":2,"650":1,"652":3,"653":3,"661":2,"663":1}}],["msg",{"2":{"169":3,"172":6,"175":5,"483":3,"654":1,"662":1,"663":1,"819":1,"840":1}}],["ms",{"2":{"149":1}}],["mmo",{"2":{"128":1}}],["medium",{"2":{"925":1,"927":1}}],["media",{"2":{"706":1,"792":1}}],["meshmatcapmaterial",{"2":{"734":1}}],["meshdistancematerial",{"2":{"734":1}}],["meshdepthmaterial",{"2":{"734":1}}],["meshnormalmaterial",{"2":{"734":1}}],["meshtoonmaterial",{"2":{"734":1}}],["meshlambertmaterial",{"2":{"734":1}}],["meshphongmaterial",{"2":{"734":1}}],["meshphysicalmaterial|",{"2":{"742":1}}],["meshphysicalmaterial",{"2":{"734":1}}],["mesh",{"2":{"733":2,"734":1,"737":2,"740":1,"753":1}}],["meshstandardmaterial|",{"2":{"742":1}}],["meshstandardmaterial",{"2":{"730":1,"734":1,"742":1,"749":1,"753":1}}],["messaging",{"2":{"280":2}}],["message>",{"2":{"867":2}}],["messageid",{"2":{"866":1}}],["messages",{"2":{"843":1,"858":1,"859":1,"866":2,"867":1}}],["messageevent",{"2":{"178":3,"179":1}}],["messageevent>",{"2":{"178":1,"179":1}}],["message",{"2":{"103":1,"129":1,"161":2,"163":2,"168":2,"169":1,"178":1,"196":1,"197":1,"231":1,"246":1,"260":1,"262":2,"300":4,"302":2,"311":2,"451":1,"483":4,"484":6,"486":4,"488":3,"581":3,"858":1,"866":3,"867":1}}],["mermaid",{"2":{"658":1,"659":1,"688":1,"689":1,"690":1,"745":1,"746":1,"773":1,"774":1,"803":1,"804":1,"864":1,"877":1,"892":1,"893":1}}],["merge",{"2":{"451":1,"927":3,"928":1}}],["menubar",{"2":{"734":1}}],["menu",{"2":{"646":1,"647":1}}],["memorymb",{"2":{"807":1}}],["memory",{"0":{"546":1},"2":{"408":2,"748":1}}],["meow",{"2":{"231":2}}],["methods",{"2":{"749":1}}],["method",{"2":{"108":1,"166":4,"169":2,"175":1,"806":1,"819":1}}],["metalnessmap",{"2":{"749":1}}],["metalness",{"2":{"729":1,"734":1,"742":1,"749":1}}],["metaso",{"2":{"518":1}}],["meta",{"2":{"81":1,"344":3,"662":2,"748":1}}],["metadata>",{"2":{"82":1}}],["metadata",{"2":{"79":1,"203":1,"895":1}}],["miterlimit",{"2":{"692":1}}],["miter",{"2":{"692":1}}],["mit",{"2":{"677":2,"734":1,"755":1,"762":1,"823":1,"874":1,"881":1}}],["migration",{"2":{"583":1,"587":1}}],["migrations",{"2":{"275":1}}],["miaoda",{"2":{"561":1,"562":2}}],["mix",{"2":{"741":1}}],["mixtral",{"2":{"519":1,"523":2}}],["mixins",{"2":{"921":2}}],["mixin",{"0":{"248":1},"2":{"248":1,"706":2,"928":1}}],["misc",{"2":{"734":1}}],["mismatched",{"2":{"238":1}}],["miss",{"2":{"47":2}}],["middleware",{"2":{"274":1,"275":2,"848":1,"850":1,"851":1}}],["mid",{"2":{"227":1,"242":2,"243":2}}],["midjourney",{"2":{"135":1,"145":1}}],["microsoft",{"2":{"160":1,"167":1,"169":1,"175":1,"180":1,"813":1,"818":1}}],["min",{"2":{"149":2,"171":1,"175":1,"696":1,"778":7}}],["minimum",{"2":{"749":2}}],["minimax",{"2":{"512":3,"519":1,"522":4,"523":1,"549":1}}],["minimal",{"2":{"97":1,"647":1}}],["mininmax",{"2":{"523":1}}],["minified",{"2":{"110":2}}],["mvp",{"2":{"83":1,"361":1,"365":1,"552":1,"556":2,"561":1,"902":1}}],["mdx",{"2":{"849":1,"872":1}}],["md`",{"2":{"451":2}}],["md",{"0":{"571":1,"574":1},"1":{"572":1,"573":1,"574":1},"2":{"62":1,"65":3,"249":1,"290":1,"442":6,"443":4,"445":1,"450":1,"451":3,"456":1,"470":3,"472":1,"474":5,"547":1,"570":17,"571":6,"572":1,"573":1,"574":1,"575":7,"577":2,"578":3,"586":6,"596":1,"597":2,"646":1,"647":2,"677":2,"706":3,"734":2,"762":5,"792":5,"823":5,"880":2,"881":58,"883":18,"886":1,"887":2,"888":1,"889":4,"890":3,"895":2,"927":3}}],["more",{"2":{"867":1}}],["morphtarget",{"2":{"740":1}}],["mozilla",{"2":{"839":1}}],["mousemodifier",{"2":{"762":1}}],["mouse",{"2":{"684":2}}],["mouseevent",{"2":{"661":1}}],["mount",{"2":{"35":1}}],["moonshot",{"2":{"512":1,"522":1}}],["moment",{"2":{"372":1}}],["mobx",{"2":{"641":1,"642":1,"645":1,"653":1}}],["mobileui",{"2":{"661":1}}],["mobile",{"2":{"313":1}}],["moba",{"2":{"128":1}}],["molecules",{"2":{"274":1}}],["mock",{"2":{"203":1,"274":1,"647":3,"890":1}}],["mocks",{"2":{"203":1,"274":1}}],["modifier2",{"2":{"771":1}}],["modifier1",{"2":{"771":1}}],["modifier",{"2":{"771":1,"920":1}}],["modifiers",{"2":{"734":1,"771":2,"806":1}}],["mode",{"2":{"482":1,"673":2,"675":1,"866":1}}],["modern",{"2":{"333":1}}],["modelid",{"2":{"866":7}}],["modelmessage",{"2":{"854":4,"866":1,"867":1}}],["modelv4",{"2":{"848":6}}],["modelnode",{"2":{"734":1}}],["modelfinder",{"2":{"719":2}}],["model",{"2":{"269":5,"439":1,"481":7,"482":1,"548":1,"591":1,"704":1,"705":2,"706":5,"719":1,"843":1,"844":1,"850":3,"853":1,"856":1,"859":1,"860":1,"861":1,"867":1,"868":1,"909":1}}],["model=your",{"2":{"481":4}}],["model=",{"2":{"86":1}}],["modeldetail",{"2":{"86":2}}],["modeldetailskeleton",{"2":{"86":1}}],["modellist",{"2":{"86":3}}],["modellistskeleton",{"2":{"86":1}}],["models",{"2":{"79":2,"86":1,"274":1,"734":1}}],["mod2",{"2":{"305":2}}],["mod1",{"2":{"305":2}}],["modalstore",{"2":{"646":1,"647":1,"650":3}}],["modal",{"2":{"274":1,"290":1,"647":1}}],["modulec",{"2":{"314":4}}],["moduleb",{"2":{"314":4}}],["modulea",{"2":{"314":4}}],["module2",{"2":{"305":1}}],["module1",{"2":{"305":1}}],["modulefederationplugin",{"2":{"288":5}}],["modulefileextensions",{"2":{"222":1}}],["modules",{"0":{"307":1,"333":1,"923":1},"2":{"203":2,"204":2,"213":1,"214":1,"215":1,"272":2,"275":1,"280":2,"281":8,"286":1,"291":1,"293":1,"298":1,"303":1,"306":1,"307":1,"308":4,"311":2,"318":1,"322":1,"334":1,"762":1,"764":6,"778":8,"921":1,"923":2,"924":1,"928":6,"931":3,"933":4,"934":2}}],["moduleresolution",{"2":{"203":2,"204":3,"215":1,"322":1}}],["module",{"0":{"288":1,"325":1},"2":{"203":3,"204":3,"215":1,"275":3,"280":5,"287":1,"288":3,"298":1,"304":3,"305":2,"306":3,"308":3,"314":1,"315":4,"320":1,"321":1,"322":1,"325":1,"333":5,"334":3,"677":1,"730":1,"734":3,"761":1,"762":2,"764":3,"828":2,"881":3,"920":1,"923":5,"931":2,"933":1,"934":2}}],["money",{"2":{"280":2,"281":12}}],["monorepo",{"0":{"211":1},"1":{"212":1,"213":1,"214":1,"215":1,"216":1},"2":{"202":1,"203":1,"205":1,"211":1,"216":2,"226":1,"286":1,"335":1,"337":1,"342":2,"451":1,"572":1,"642":1,"643":1,"645":1,"647":2,"845":2,"849":1}}],["mongodb",{"2":{"20":1,"336":1,"573":1}}],["m",{"2":{"29":1}}],["mycustomtool",{"2":{"868":1}}],["mycli",{"2":{"811":1}}],["myfetcher",{"2":{"640":1}}],["mysql",{"2":{"336":1}}],["mylogger",{"2":{"311":2}}],["mylib",{"2":{"306":1}}],["myextract",{"2":{"234":2}}],["myexclude",{"2":{"234":2}}],["my",{"2":{"28":1,"442":2}}],["mb",{"2":{"27":6,"28":4}}],["mx",{"2":{"27":2}}],["magictype",{"2":{"706":1}}],["mailto",{"2":{"654":1}}],["maintenance",{"2":{"928":1}}],["maintype",{"2":{"705":1,"706":2,"714":1}}],["main>",{"2":{"288":2}}],["mainapp",{"2":{"288":3,"289":1}}],["mainlayout",{"2":{"274":1}}],["main",{"2":{"29":1,"274":1,"275":1,"280":2,"290":2,"490":1,"724":1,"762":2,"764":3,"790":1,"791":1,"792":1}}],["maketranslator",{"2":{"646":1}}],["make",{"2":{"572":1,"594":1}}],["maker",{"2":{"557":1}}],["manifest",{"2":{"792":9,"795":1,"796":1}}],["manual",{"2":{"677":2,"734":1}}],["manus",{"2":{"403":1,"477":1}}],["manager",{"2":{"646":2,"647":2,"705":1,"711":1}}],["management",{"0":{"546":1},"2":{"656":1,"761":1}}],["matcher",{"2":{"886":1,"895":1}}],["matches",{"2":{"806":2}}],["match",{"2":{"806":2}}],["matcap",{"2":{"734":1}}],["mattetype",{"2":{"776":1}}],["matte3",{"2":{"762":1}}],["materialx",{"2":{"734":2}}],["materialnode",{"2":{"734":1}}],["materials",{"2":{"734":2}}],["materialloader",{"2":{"734":1}}],["material",{"0":{"742":1},"2":{"733":1,"734":1,"737":3,"740":1,"742":3,"743":1,"748":2,"753":2}}],["matrixautoupdate",{"2":{"748":1}}],["matrixworldneedsupdate",{"2":{"748":1}}],["matrixworld",{"2":{"740":2,"748":1}}],["matrixworldinverse",{"2":{"734":1}}],["matrix4",{"2":{"734":1,"740":2,"748":2}}],["matrix3",{"2":{"734":1}}],["matrix2",{"2":{"734":1}}],["matrix",{"2":{"682":1,"706":2,"740":2,"748":1,"761":1,"762":1,"764":1}}],["matplotlib",{"2":{"470":1,"471":1,"472":1}}],["mathbf",{"2":{"365":3,"366":3,"367":3,"554":4,"902":4}}],["mathutils",{"2":{"310":1,"734":1}}],["mathdefault",{"2":{"295":3,"307":2}}],["math",{"2":{"149":2,"152":1,"171":2,"175":2,"223":4,"230":1,"232":1,"281":1,"295":3,"304":4,"307":1,"310":4,"321":2,"325":3,"522":2,"647":1,"734":3}}],["maskinterface",{"2":{"762":1,"769":1}}],["mask",{"2":{"677":1,"679":1,"762":2}}],["mas",{"2":{"415":2,"467":1}}],["marginal",{"2":{"398":1}}],["markarea",{"2":{"706":1}}],["markline",{"2":{"706":1}}],["markpoint",{"2":{"706":1}}],["markerparser",{"2":{"762":1}}],["markers",{"2":{"762":1}}],["marker",{"2":{"706":1}}],["marketplace",{"2":{"881":2}}],["market",{"2":{"470":1}}],["markup",{"2":{"338":1}}],["markdown================================================================================",{"2":{"928":1}}],["markdownframework",{"2":{"847":1}}],["markdown项目根目录",{"2":{"570":1}}],["markdown全局",{"2":{"570":1}}],["markdownreadablestream",{"2":{"168":1}}],["markdowncontent",{"2":{"161":1}}],["markdown开发者代码",{"2":{"853":1}}],["markdown开发完成",{"2":{"43":1}}],["markdown开始评估",{"2":{"155":1}}],["markdown┌─────────────────────────────────────────────────────────────────────────────┐",{"2":{"57":1}}],["markdown用户请求",{"2":{"73":1}}],["markdown用户首次访问页面",{"2":{"47":1}}],["markdown用户访问",{"2":{"35":1,"39":1,"52":1}}],["markdown",{"0":{"449":1},"2":{"18":2,"62":4,"65":5,"66":2,"88":1,"331":1,"419":1,"442":1,"443":1,"449":1,"451":2,"471":1,"494":1,"504":1,"505":2,"506":1,"507":2,"508":1,"573":1,"575":1,"579":1,"585":1,"591":1,"632":1,"787":1,"792":1,"830":1,"854":1,"876":1,"877":1,"884":1,"895":1,"928":1}}],["macos",{"2":{"343":1}}],["maxtokens",{"2":{"866":1,"867":1}}],["maxturns",{"2":{"482":1}}],["maxsteps",{"2":{"859":2,"867":1}}],["maxlines",{"2":{"594":1}}],["maxlinesperfile",{"2":{"594":1,"595":1}}],["maxfiles",{"2":{"594":1}}],["maximum",{"2":{"482":1,"749":2}}],["maxretries",{"2":{"262":1}}],["max",{"2":{"27":1,"148":1,"152":2,"171":1,"175":2,"330":5}}],["mapname",{"2":{"720":1}}],["maparray",{"2":{"713":1,"719":1}}],["mapdimension",{"2":{"713":1}}],["mapview",{"2":{"706":1}}],["mapseries",{"2":{"706":1}}],["mapper",{"2":{"280":1}}],["mappers",{"2":{"280":1}}],["map",{"2":{"26":1,"27":2,"28":1,"108":1,"178":3,"179":2,"203":1,"217":1,"226":1,"263":1,"266":1,"267":1,"281":1,"288":1,"706":1,"734":1,"749":1,"797":1,"800":2,"801":1,"826":1,"856":1}}],["开好电话会议能更明确重点",{"2":{"956":1}}],["开放的无限空间",{"2":{"934":1}}],["开放度高",{"2":{"512":1}}],["开放性话题讨论",{"2":{"511":1}}],["开放域交互",{"2":{"432":1}}],["开箱即用的原生技能",{"2":{"478":1}}],["开箱即用的模块化生态",{"2":{"344":1}}],["开箱即用地简化了",{"2":{"342":1}}],["开箱即用",{"2":{"287":1,"342":1,"786":1}}],["开闭原则",{"2":{"255":1}}],["开头",{"2":{"166":1}}],["开头的查询",{"2":{"110":1}}],["开始一个新帧",{"2":{"748":1}}],["开始一个新的校对任务",{"2":{"486":1}}],["开始递归渲染",{"2":{"649":1}}],["开始行动",{"2":{"466":1}}],["开始在",{"2":{"418":1}}],["开始",{"2":{"115":1,"459":1,"597":1,"892":1}}],["开启自动批准模式",{"2":{"484":1}}],["开启了",{"2":{"343":1}}],["开启所有严格类型检查",{"2":{"322":1}}],["开启后会生成",{"2":{"203":1}}],["开启后可以使用",{"2":{"203":1}}],["开启聚焦屏幕时自动刷新",{"2":{"106":1}}],["开启",{"2":{"25":1,"217":1}}],["开源的",{"2":{"755":1}}],["开源协议",{"2":{"734":1}}],["开源许可证",{"2":{"881":1}}],["开源许可",{"2":{"643":1}}],["开源免费",{"2":{"568":1}}],["开源自托管",{"2":{"568":1}}],["开源可自部署",{"2":{"567":1}}],["开源+微调",{"2":{"523":1}}],["开源生态标准入口",{"2":{"523":1}}],["开源生态",{"2":{"523":1}}],["开源模型市场",{"2":{"523":1}}],["开源模型推理",{"2":{"523":1}}],["开源模型",{"2":{"519":1,"523":2}}],["开源",{"2":{"20":1,"21":1,"567":2}}],["开发神速",{"2":{"928":1}}],["开发流程碎片化",{"2":{"874":1}}],["开发语言",{"2":{"821":1}}],["开发辅助脚本",{"2":{"762":1}}],["开发用",{"2":{"734":1}}],["开发模式快速构建",{"2":{"706":1}}],["开发模式",{"0":{"723":1},"2":{"695":1,"697":1,"723":1,"752":1}}],["开发沙盒",{"2":{"677":1}}],["开发编辑器",{"2":{"666":1}}],["开发调试用",{"2":{"647":1}}],["开发体验快",{"2":{"642":1}}],["开发体验",{"2":{"565":1,"928":1}}],["开发平台",{"2":{"561":1}}],["开发经验",{"2":{"552":1}}],["开发正在摆脱杂乱的胶水代码",{"2":{"548":1}}],["开发层",{"0":{"544":1},"1":{"545":1,"546":1,"547":1,"548":1,"549":1,"550":1},"2":{"552":1}}],["开发场景中表现尤为突出",{"2":{"521":1}}],["开发成本",{"2":{"365":1}}],["开发元框架",{"2":{"344":1}}],["开发框架",{"2":{"342":1,"344":1,"477":1}}],["开发的新时代",{"2":{"343":1}}],["开发的一个基于",{"2":{"342":1}}],["开发的用于构建用户界面的声明式",{"2":{"339":1}}],["开发的基础",{"2":{"338":1}}],["开发的核心原则",{"2":{"272":1}}],["开发团队与业务专家使用相同的术语",{"2":{"277":1}}],["开发环境建议开启",{"2":{"203":1}}],["开发效率极高",{"2":{"925":1}}],["开发效率低",{"2":{"639":1}}],["开发效率低下",{"2":{"189":1}}],["开发效率高等优点",{"2":{"925":1}}],["开发效率高",{"2":{"32":1}}],["开发一个",{"2":{"184":1}}],["开发一个完整的功能模块",{"2":{"9":1}}],["开发中最常见的误区是",{"2":{"183":1}}],["开发中",{"2":{"145":1,"333":1,"550":1}}],["开发",{"0":{"476":1},"2":{"15":1,"32":1,"343":1,"519":1,"699":1,"928":1}}],["开发者几乎不需要写",{"2":{"925":1}}],["开发者依然正常写普通的类名",{"2":{"924":1}}],["开发者使用时只需",{"2":{"853":1}}],["开发者只需声明数据和图表配置",{"2":{"699":1}}],["开发者只需定义",{"2":{"11":1}}],["开发者",{"2":{"671":2,"728":1,"784":1,"934":1}}],["开发者通过",{"2":{"652":1}}],["开发者通常被迫采用轮询",{"2":{"115":1}}],["开发者通常需要自行实现",{"2":{"95":1}}],["开发者做出最佳工作的地方",{"2":{"564":1}}],["开发者往往会面临一个尴尬的现实",{"2":{"467":1}}],["开发者经常面临一个共性挑战",{"2":{"441":1}}],["开发者面临的核心挑战是如何在实际业务中进行选型",{"2":{"432":1}}],["开发者可以直接在",{"2":{"339":1}}],["开发者可以专注于业务本身",{"2":{"71":1}}],["开发者无需逐一申请各厂商",{"2":{"523":1}}],["开发者无需再手写复杂的递归或循环逻辑",{"2":{"478":1}}],["开发者无需额外维护一套",{"2":{"97":1}}],["开发者无法从类型声明中得知这个值应该是什么类型",{"2":{"255":1}}],["开发者易陷入",{"2":{"198":1}}],["开发者常陷入",{"2":{"189":1}}],["开发者必须在应用层自行实现",{"2":{"129":1}}],["开发者必须确保代理层配置了",{"2":{"119":1}}],["开发者必须先完成深度思考",{"2":{"1":1}}],["开发者需要",{"2":{"113":1}}],["开发者需要手动编写拦截逻辑",{"2":{"110":1}}],["开发者已较为熟悉",{"2":{"95":1}}],["开发者不再逐行手敲代码",{"2":{"542":1}}],["开发者不再是代码的",{"2":{"12":1}}],["开发者不需要手写优化代码",{"2":{"84":1}}],["开发者审核规范的合理性",{"2":{"9":1}}],["开发者则在主干分支逐步搭建",{"2":{"3":1}}],["开发者在正式分支中以半自动化方式逐步搭建",{"2":{"3":1}}],["开发者应将以下标准内化为肌肉记忆",{"2":{"1":1}}],["专人负责",{"2":{"589":1}}],["专家智能体",{"2":{"535":1}}],["专门来处理对话循环的逻辑",{"2":{"489":1}}],["专门用于将",{"2":{"439":1}}],["专精类任务",{"2":{"438":1}}],["专职打工人",{"2":{"438":2}}],["专业素养",{"2":{"959":1}}],["专业感",{"2":{"925":1}}],["专业工具",{"2":{"544":1}}],["专业的语气创作诗歌",{"2":{"504":1}}],["专业任务能力",{"2":{"436":1}}],["专业执行",{"2":{"436":1}}],["专业地按照同一套标准",{"2":{"436":1}}],["专业指令的深度定制",{"2":{"415":1}}],["专业版",{"2":{"397":1}}],["专业公众号",{"2":{"346":8}}],["专为大型代码库设计的",{"2":{"567":1}}],["专为构建高性能的服务端渲染",{"2":{"344":1}}],["专为生产环境设计",{"2":{"344":1}}],["专为",{"2":{"343":1}}],["专为服务端向服务端单向推送而设计",{"2":{"130":1}}],["专心做业务逻辑的调度",{"2":{"295":1}}],["专心做计算",{"2":{"295":1}}],["专注重要的事",{"0":{"952":1}}],["专注功能实现而非样式细节",{"2":{"926":1}}],["专注与反刍",{"2":{"606":1}}],["专注代码质量的审查者",{"2":{"570":1}}],["专注特定任务的",{"2":{"570":1}}],["专注前端界面",{"2":{"561":1}}],["专注开源大模型的高性能推理与微调平台",{"2":{"523":1}}],["专注智能问答",{"2":{"512":1}}],["专注原子操作",{"2":{"429":1}}],["专注子任务",{"2":{"415":1,"438":1}}],["专注当下",{"2":{"367":1}}],["专注",{"2":{"192":1,"523":1,"561":1}}],["专注博客",{"2":{"21":1}}],["专注于正确性和可维护性",{"2":{"591":1}}],["专注于需求理解与方案设计",{"2":{"535":1}}],["专注于中文理解与生成",{"2":{"512":1}}],["专注于帮助家长掌握科学的数学辅导方法",{"2":{"494":1}}],["专注于信息检索与收集",{"2":{"468":1}}],["专注于未来的增量成本和收益",{"2":{"393":1}}],["专注于打造可持续的订阅模式",{"2":{"354":1}}],["专注于为开发者提供便捷的静态网站和jamstack",{"2":{"345":1}}],["专注于基础通信层的治理",{"2":{"342":1}}],["专注于",{"2":{"342":1}}],["专注于处理数据更新",{"2":{"103":1}}],["专注于业务逻辑实现",{"2":{"103":1}}],["专注于在",{"2":{"103":1}}],["专注于真正创造价值的方案选择与设计决策",{"2":{"8":1}}],["专注于接收",{"2":{"2":1}}],["专属部署",{"2":{"523":1}}],["专属属性自动可用",{"2":{"249":1}}],["专属属性",{"2":{"249":1}}],["专属",{"2":{"20":1}}],["otel",{"2":{"849":1}}],["others",{"2":{"647":1,"656":1,"886":1}}],["other",{"2":{"267":3,"281":3}}],["oxfmt",{"2":{"845":2}}],["oxlint",{"2":{"845":2}}],["oom",{"2":{"801":1}}],["oop",{"2":{"344":2}}],["o",{"2":{"521":1,"672":1,"776":1}}],["ollama",{"2":{"519":1}}],["oldidx",{"2":{"713":1}}],["old",{"2":{"108":2,"333":1,"706":1}}],["o3",{"2":{"511":1,"521":2}}],["o1",{"2":{"511":1,"512":1,"521":2,"522":2}}],["os",{"2":{"419":1}}],["oss",{"2":{"19":1,"138":1}}],["overlay",{"2":{"647":1}}],["overloadedgettersetter",{"2":{"677":1,"685":1}}],["overloadedadd",{"2":{"238":2}}],["overload",{"2":{"238":1}}],["overallreset",{"2":{"712":1}}],["overalltask",{"2":{"712":2}}],["overall",{"0":{"644":1},"1":{"645":1,"646":1,"647":1}}],["overviews",{"2":{"518":2}}],["overview",{"2":{"456":1,"515":3,"518":1}}],["over",{"2":{"342":2,"806":1}}],["override",{"2":{"203":1,"661":1,"762":1}}],["out",{"2":{"757":1}}],["outline",{"2":{"249":1,"927":2}}],["outdir",{"2":{"203":2,"204":2,"213":1,"214":1,"215":1,"322":1}}],["output>>",{"2":{"867":2}}],["output>",{"2":{"866":1}}],["outputnode",{"2":{"741":1}}],["outputt",{"2":{"719":2}}],["outputt>",{"2":{"719":1}}],["outputformat",{"2":{"482":3}}],["output",{"2":{"94":1,"488":1,"489":2,"741":1,"748":1,"771":1,"791":1,"792":1,"796":1,"866":3,"867":8}}],["obra",{"2":{"874":1,"899":1}}],["obsidian",{"0":{"628":1},"2":{"629":1}}],["observability",{"2":{"550":1}}],["observable",{"2":{"178":4,"179":2}}],["observation",{"2":{"427":3,"429":1}}],["observer",{"0":{"302":1},"2":{"302":3}}],["obj等",{"2":{"734":1}}],["obj",{"2":{"263":1,"268":3,"740":2}}],["objectloader",{"2":{"734":1}}],["object3d",{"0":{"740":1},"2":{"733":2,"734":1,"737":3,"740":6,"748":9}}],["objects",{"2":{"280":4,"281":1,"734":2,"748":2}}],["objectresult",{"2":{"258":1}}],["object",{"2":{"200":1,"274":1,"306":1,"327":1,"482":1,"685":1,"692":4,"719":3,"720":2,"733":1,"748":6,"749":4,"761":1,"807":3,"848":1,"866":2}}],["ockham",{"2":{"181":1}}],["occurredat",{"2":{"281":1}}],["occurred",{"2":{"99":1,"103":1}}],["official",{"2":{"899":1}}],["office",{"2":{"641":1,"647":4}}],["offscreencanvas",{"2":{"748":1,"749":1}}],["offscreen",{"2":{"734":1}}],["offsettime",{"2":{"776":1}}],["offsetpathmodifier",{"2":{"762":1,"764":1}}],["offsetpath",{"2":{"757":1,"771":1}}],["offset",{"2":{"692":1}}],["offsety",{"2":{"682":2,"692":1}}],["offsetx",{"2":{"682":2,"692":1}}],["off",{"2":{"289":1,"394":1,"682":1,"719":1}}],["of",{"2":{"166":1,"168":3,"181":1,"223":2,"259":1,"426":1,"482":2,"483":1,"484":1,"486":1,"488":1,"676":1,"823":1,"881":1}}],["op",{"2":{"762":1,"764":1,"771":1}}],["opaque",{"2":{"739":1}}],["opacity",{"2":{"692":1,"742":1,"748":1,"762":1,"921":1,"922":1,"924":2,"925":2,"927":1}}],["opt",{"2":{"719":2}}],["opts",{"2":{"705":1,"708":1,"719":4,"799":2,"800":1,"806":5}}],["optional",{"2":{"887":1}}],["optionpreprocessor",{"2":{"720":1}}],["optiondatavalue",{"2":{"719":2}}],["optionmanager",{"2":{"706":2,"708":1}}],["option",{"2":{"699":1,"702":1,"704":1,"705":3,"706":5,"708":2,"709":1,"717":1,"719":1}}],["options",{"2":{"166":11,"179":1,"482":5,"484":1,"486":1,"489":3,"647":1,"649":3,"662":1,"801":1,"806":4,"857":5,"866":2,"867":4}}],["optimize",{"2":{"743":1}}],["optimization",{"2":{"518":1}}],["optimisticdata",{"2":{"100":1}}],["optimistic",{"0":{"100":1,"108":1},"2":{"103":1,"110":1,"342":1}}],["opus",{"2":{"481":1,"521":1}}],["operatornode",{"2":{"741":1}}],["operators",{"2":{"179":1}}],["operations",{"2":{"482":2}}],["operating",{"2":{"391":1}}],["opentelemetry",{"2":{"849":1}}],["openspec",{"0":{"749":1,"807":1},"2":{"901":1}}],["open",{"2":{"654":1,"803":1,"811":1}}],["opendrawer",{"2":{"654":1}}],["opendialog",{"2":{"654":1}}],["opendevin",{"2":{"567":1}}],["openxml",{"2":{"641":1,"647":2}}],["openhands",{"2":{"567":1,"568":2}}],["opencli│",{"2":{"800":1}}],["opencli",{"2":{"784":1,"785":1,"789":1,"792":4,"795":2,"800":1,"801":5,"803":1,"804":1,"807":8,"809":1,"810":3,"811":6}}],["openclaw",{"0":{"419":1},"2":{"403":1,"419":5,"442":2,"477":1}}],["opencode",{"2":{"559":1,"567":1,"568":3,"880":1,"881":10,"884":1,"898":1}}],["openrouter",{"2":{"523":5}}],["openaitools",{"2":{"857":1,"868":1}}],["openaitranscriptionmodel",{"2":{"857":1}}],["openaiskills",{"2":{"857":1}}],["openaispeechmodel",{"2":{"857":1}}],["openaifiles",{"2":{"857":1}}],["openaiimagemodel",{"2":{"857":1}}],["openaiembeddingmodel",{"2":{"857":1}}],["openaicompletionlanguagemodel",{"2":{"857":1}}],["openaichatlanguagemodel",{"2":{"857":1}}],["openairesponseslanguagemodel",{"2":{"853":1,"857":1}}],["openaiprovidersettings",{"2":{"857":1}}],["openaiprovider",{"2":{"853":1,"857":1}}],["openai",{"2":{"511":1,"521":3,"522":1,"523":14,"573":1,"842":1,"843":3,"847":1,"848":2,"849":2,"850":2,"853":2,"857":4,"860":3,"868":4,"872":2,"906":2,"909":2,"919":1}}],["openapi",{"2":{"411":1}}],["openwhenhidden=false",{"2":{"832":1}}],["openwhenhidden",{"2":{"175":1,"832":1,"839":1}}],["opengraph",{"2":{"79":1}}],["okr",{"2":{"515":1}}],["ok",{"2":{"99":1,"117":1,"152":3,"169":1,"175":1,"237":1,"807":8,"820":1}}],["or",{"2":{"806":2,"928":1,"961":1}}],["orbit",{"2":{"734":1}}],["orbitcontrols",{"2":{"733":2}}],["orthographiccamera",{"2":{"734":1}}],["org>",{"2":{"857":1}}],["organization",{"2":{"857":2}}],["organisms",{"2":{"274":1}}],["org",{"2":{"699":1,"839":1}}],["orchestration",{"0":{"535":1},"2":{"342":1,"411":1,"879":1,"880":1}}],["ormentity",{"2":{"281":5}}],["ormrepository",{"2":{"281":3}}],["orm",{"2":{"280":1,"573":1}}],["ordinal",{"2":{"706":1}}],["ordinalmeta",{"2":{"706":1}}],["ord",{"2":{"247":1}}],["orderdata",{"2":{"327":1}}],["orderdto",{"2":{"281":6}}],["orderdetail",{"2":{"280":1}}],["order>",{"2":{"281":1}}],["ordercreatedevent>",{"2":{"281":1}}],["ordercreatedeventhandler",{"2":{"281":1}}],["ordercreatedevent",{"2":{"281":3}}],["ordercannotbeconfirmederror",{"2":{"281":1}}],["ordercannotbemodifiederror",{"2":{"281":1}}],["ordercalculator",{"2":{"280":1}}],["ordermapper",{"2":{"281":2}}],["orderormentity>",{"2":{"281":1}}],["orderormentity",{"2":{"281":1}}],["orderitem",{"2":{"281":3}}],["orderitems",{"2":{"281":4}}],["orderid",{"2":{"247":8,"278":1,"281":7}}],["orderpage",{"2":{"280":1}}],["orderlist",{"2":{"280":1}}],["orderapi",{"2":{"280":1,"281":3}}],["orderapplicationservice",{"2":{"278":1,"280":1,"281":2}}],["orderfactory",{"2":{"278":1}}],["orderrepositoryimpl",{"2":{"281":1}}],["orderrepository",{"2":{"278":1,"280":1,"281":2}}],["orderstatus",{"2":{"280":1,"281":7}}],["orders",{"2":{"30":1}}],["order",{"2":{"26":1,"28":2,"275":1,"278":1,"280":31,"281":28}}],["origin",{"2":{"29":2,"801":2}}],["onretry",{"2":{"840":2}}],["onid",{"2":{"840":2}}],["onvisibilitychange",{"2":{"830":1}}],["onbeforerender",{"2":{"742":1,"748":1}}],["onbeforecompile",{"2":{"742":1,"748":1}}],["onbroadcast",{"2":{"661":1}}],["onaction",{"2":{"708":1}}],["onauthstatechange",{"2":{"28":1}}],["onfinish",{"2":{"686":1,"692":1,"851":1,"867":1}}],["oneventprops",{"2":{"661":1}}],["onerror",{"2":{"106":1,"108":2,"110":1,"163":3,"169":3,"171":3,"173":3,"174":1,"175":5,"662":1,"820":1,"830":1,"832":2,"839":2}}],["onglobalvarchanged",{"2":{"661":1}}],["online",{"2":{"833":1,"840":2}}],["only",{"2":{"318":1}}],["onloginsuccess=",{"2":{"288":1}}],["onproductselect=",{"2":{"289":1}}],["onproductclick",{"2":{"288":3}}],["onproductclick=",{"2":{"288":1}}],["onprogress",{"2":{"175":2}}],["onopen",{"2":{"163":3,"169":3,"175":2,"820":1,"830":1,"832":2,"839":1}}],["onmessage│",{"2":{"830":1}}],["onmessage",{"2":{"163":3,"166":3,"169":3,"172":1,"175":2,"662":1,"818":1,"819":1,"832":1,"839":2,"840":2}}],["onmutate",{"2":{"108":3,"110":1}}],["onmounted",{"2":{"59":1}}],["onstepfinish",{"2":{"867":1}}],["onstepstart",{"2":{"867":1}}],["onstart",{"2":{"851":1,"867":1}}],["onsuccess",{"2":{"110":1}}],["onsubmit=",{"2":{"28":1}}],["onsettled",{"2":{"108":1,"110":1}}],["onselectmodel=",{"2":{"86":1}}],["on",{"2":{"48":1,"164":1,"289":2,"302":2,"315":3,"489":2,"682":1,"719":1,"880":1}}],["onchunk",{"2":{"840":2}}],["onchange",{"2":{"682":1}}],["onchange=",{"2":{"28":1,"100":1}}],["once",{"2":{"743":1}}],["oncomplete",{"2":{"175":2}}],["onclose",{"2":{"173":3,"175":4,"830":1,"832":1,"839":1}}],["onclick",{"2":{"74":1,"249":1,"313":1}}],["onclick=",{"2":{"28":1,"288":1}}],["onxxx",{"2":{"7":1}}],["分阶段调整时间管理",{"0":{"951":1},"1":{"952":1,"953":1,"954":1}}],["分的家常菜了",{"2":{"942":1}}],["分离",{"2":{"924":1}}],["分解与渐进明细",{"2":{"958":1}}],["分解与分类",{"0":{"914":1},"2":{"914":2}}],["分解",{"2":{"941":1}}],["分解边规划的策略能实时响应环境反馈",{"2":{"424":1}}],["分类",{"2":{"912":1}}],["分类规则",{"2":{"583":1}}],["分派代码质量审查者子agent",{"2":{"889":1}}],["分派规格审查者子agent",{"2":{"889":1}}],["分派实现者子agent",{"2":{"889":1}}],["分别定义了子agent的角色边界",{"2":{"889":1}}],["分别对应不同的文件路径",{"2":{"65":1}}],["分钟的无氧运动",{"2":{"963":1,"964":1}}],["分钟的器材锻炼",{"2":{"962":1,"964":1}}],["分钟到",{"2":{"961":1}}],["分钟可完成",{"2":{"895":1}}],["分钟",{"2":{"884":1}}],["分钟演示了从构建到请求的完整链路",{"2":{"87":1}}],["分形项目测试用例",{"2":{"881":1}}],["分三阶段",{"2":{"746":1}}],["分",{"2":{"741":1}}],["分段呈现设计",{"2":{"888":1}}],["分段数据到视觉通道的映射",{"2":{"715":1}}],["分段型",{"2":{"706":1}}],["分为",{"2":{"704":1}}],["分组",{"2":{"679":1,"719":1}}],["分组容器",{"2":{"677":1}}],["分包",{"2":{"673":1}}],["分页",{"2":{"647":1,"650":2}}],["分页接口统一使用",{"2":{"576":1}}],["分割",{"2":{"504":3,"506":1}}],["分割字段名和字段值",{"2":{"168":1}}],["分糖果",{"2":{"494":1,"495":1}}],["分支",{"2":{"928":2}}],["分支名符合前缀规范",{"2":{"451":1}}],["分支拉取最新代码并执行",{"2":{"451":1}}],["分支命名规范",{"2":{"451":1}}],["分支管理规范",{"2":{"451":1}}],["分支中",{"2":{"232":1}}],["分工明确",{"2":{"438":1,"597":1}}],["分工明确的专项助手",{"0":{"438":1}}],["分工细化",{"2":{"144":1}}],["分母",{"2":{"365":1}}],["分子",{"2":{"365":1}}],["分子组件",{"2":{"274":1}}],["分享一个从",{"2":{"477":1}}],["分享技术前沿",{"2":{"346":1}}],["分享最新的前端技术文章",{"2":{"346":6}}],["分散定义状态",{"2":{"341":1}}],["分而治之",{"2":{"296":1}}],["分配律验证",{"2":{"243":1}}],["分配律",{"0":{"243":1}}],["分布式条件类型",{"0":{"234":1}}],["分布式系统的挑战",{"2":{"129":1}}],["分层定义",{"2":{"929":1}}],["分层职责说明",{"0":{"791":1}}],["分层插件化架构",{"2":{"786":1}}],["分层递进塑造形象",{"2":{"507":1}}],["分层设计与关注点分离",{"0":{"336":1}}],["分层架构图",{"2":{"733":1}}],["分层架构",{"2":{"277":1}}],["分层架构是大型项目中常用的模块化设计模式",{"2":{"273":1}}],["分层架构设计",{"0":{"273":1},"1":{"274":1,"275":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1}}],["分层就是",{"2":{"191":1}}],["分层",{"2":{"191":1}}],["分隔",{"2":{"168":1}}],["分块传输编码",{"2":{"117":1}}],["分块传输的艺术",{"0":{"117":1}}],["分析自己的时间利用是否符合预期",{"2":{"953":1}}],["分析后才能清晰的问题和事务相较之前占比多了",{"2":{"950":1}}],["分析节点类型",{"2":{"736":1}}],["分析代码",{"2":{"564":1}}],["分析语句",{"2":{"557":1}}],["分析结构化",{"2":{"503":1}}],["分析当前项目的核心架构特征",{"2":{"483":1}}],["分析各种来源的信息",{"2":{"470":1}}],["分析阶段",{"2":{"468":1}}],["分析冲突产生的原因",{"2":{"451":1}}],["分析可能的行动方案",{"2":{"427":1}}],["分析竞争对手的产品",{"2":{"396":1}}],["分析用户情绪",{"2":{"367":1}}],["分析某项新技术的",{"2":{"355":1}}],["分析",{"2":{"348":1,"448":1,"549":1}}],["分析说明",{"2":{"97":1}}],["分析业务场景",{"2":{"9":1}}],["分发创建元素",{"2":{"768":1}}],["分发过程",{"2":{"234":1,"244":1}}],["分发给具体业务处理器",{"2":{"172":1}}],["分发",{"2":{"19":1}}],["小份轻食",{"2":{"963":1}}],["小时用于处理重要不紧急的事",{"2":{"952":1}}],["小时的无干扰时间",{"2":{"952":1}}],["小时不间断工作的数字员工的愿景",{"2":{"419":1}}],["小事情推动靠聪明才智",{"2":{"909":1}}],["小项目",{"2":{"568":1}}],["小项目用简单架构",{"2":{"189":1}}],["小程序双端",{"2":{"562":1}}],["小团队",{"2":{"523":1}}],["小精灵已备好笔墨",{"2":{"507":1}}],["小圆点代表物品",{"2":{"494":1}}],["小故事或数据",{"2":{"494":1}}],["小步快跑",{"2":{"427":1}}],["小步快跑模式",{"2":{"414":1}}],["小脑",{"0":{"432":1},"2":{"402":1}}],["小成功靠聪明才智",{"2":{"386":1}}],["小",{"2":{"381":1}}],["小而美",{"2":{"381":1,"601":1,"901":1,"957":1}}],["小数据包传输场景",{"2":{"127":1}}],["小部件",{"2":{"74":1,"94":1}}],["小结",{"0":{"140":1,"270":1,"431":1,"948":1},"2":{"66":1}}],["小型项目可能不需要完整的",{"2":{"283":1}}],["小型项目直接用",{"2":{"191":1}}],["小型团队项目",{"2":{"31":1}}],["小型博客",{"2":{"18":1}}],["小提示",{"2":{"6":1}}],["原有的生活习惯时不时进入大脑",{"2":{"961":1}}],["原型扩展工具",{"2":{"762":1}}],["原型验证",{"2":{"561":1}}],["原型阶段",{"2":{"523":1}}],["原本需要数周协调的跨职能配合",{"2":{"529":1}}],["原",{"2":{"511":1}}],["原汁原味",{"2":{"392":1}}],["原理",{"2":{"369":1}}],["原文精髓",{"2":{"358":1,"359":1,"360":1,"361":1}}],["原子类",{"2":{"925":2,"927":1}}],["原子化并非万能",{"2":{"931":1}}],["原子化引擎",{"2":{"928":1}}],["原子化基石",{"2":{"928":1}}],["原子化",{"0":{"925":1},"1":{"926":1},"2":{"341":1,"920":1,"925":1}}],["原子概念容易理解",{"2":{"341":1}}],["原子组件组合",{"2":{"274":1}}],["原子组件",{"2":{"274":1}}],["原子设计",{"2":{"274":1}}],["原始的动画数据转换为内部格式",{"2":{"770":1}}],["原始数据纹理",{"2":{"734":1}}],["原始着色器材质",{"2":{"734":1}}],["原始",{"2":{"661":2,"742":1}}],["原始素材经过",{"2":{"631":1}}],["原始字节流",{"2":{"168":1}}],["原始协议的局限",{"2":{"129":1}}],["原名",{"2":{"103":1,"320":1}}],["原因有三",{"2":{"311":1}}],["原因如下",{"2":{"216":1}}],["原因",{"2":{"93":1,"591":1,"928":1}}],["原生隔离",{"2":{"928":1}}],["原生内置支持",{"2":{"923":1}}],["原生偏好测试",{"2":{"881":1}}],["原生图形",{"2":{"706":1}}],["原生事件→konva事件转换",{"2":{"677":1}}],["原生全栈",{"0":{"540":1},"1":{"541":1,"542":1,"543":1}}],["原生多模态",{"2":{"511":2,"521":3}}],["原生开发环境采纳",{"2":{"442":1}}],["原生操作系统",{"2":{"440":1}}],["原生时代的复合型人才",{"2":{"358":1}}],["原生时代量身定制的",{"2":{"357":1}}],["原生参数",{"2":{"169":1}}],["原生实现示例",{"2":{"164":1}}],["原生二进制支持",{"2":{"127":1}}],["原生的",{"2":{"124":1}}],["原生浏览器的",{"0":{"122":1},"2":{"814":1}}],["原生",{"0":{"162":1,"166":1},"1":{"163":1,"164":1},"2":{"18":1,"143":1,"160":2,"167":1,"342":1,"343":1,"564":3,"670":1,"728":2,"734":1,"920":1}}],["原生支持文本",{"2":{"521":1}}],["原生支持",{"2":{"18":1,"287":1,"815":1,"822":1}}],["原则让我们尊重客观规律",{"2":{"907":1}}],["原则",{"2":{"10":1,"59":1,"442":1,"564":1,"603":1,"907":1,"943":1}}],["e5e7eb",{"2":{"921":1,"922":1,"923":1,"924":1}}],["e2e",{"2":{"734":1,"845":1}}],["etc",{"2":{"734":1,"792":1}}],["euler",{"2":{"734":1,"740":1,"748":1,"749":1}}],["ecoption",{"2":{"719":1}}],["ecbasicoption>",{"2":{"719":1}}],["eceventdefinition>",{"2":{"719":1}}],["eceventprocessor",{"2":{"706":1}}],["ecmodel",{"2":{"709":2,"712":3,"714":1,"719":1}}],["ecmascript",{"2":{"203":2,"298":1,"307":1,"324":1,"821":1}}],["ec",{"2":{"708":2,"720":1}}],["echartsextensioninstallregisters",{"2":{"720":2}}],["echartsextensioninstaller",{"2":{"720":1}}],["echartstype",{"2":{"719":1}}],["echartsinitopts",{"2":{"719":1}}],["echartsoption",{"2":{"706":1}}],["echarts",{"2":{"699":2,"704":2,"705":1,"706":7,"708":8,"709":2,"711":1,"712":1,"713":1,"714":1,"719":2,"724":4,"725":6}}],["easeout",{"2":{"769":1}}],["easein",{"2":{"769":1}}],["ease",{"2":{"769":1}}],["easingfunction>",{"2":{"693":1}}],["easing",{"2":{"676":1,"686":3,"692":1,"770":1}}],["easings",{"2":{"676":1,"693":1}}],["earcut三角剖分",{"2":{"734":1}}],["eager",{"2":{"288":1}}],["edd",{"0":{"550":1},"2":{"550":1}}],["editor",{"0":{"656":1},"2":{"645":2,"646":4,"647":6,"656":7,"666":1,"734":2,"868":1}}],["edit",{"2":{"470":1,"478":1,"482":1,"484":1,"594":1,"647":1}}],["edgesgeometry",{"2":{"734":1}}],["edge",{"2":{"342":1}}],["effort",{"2":{"556":2}}],["efficiency",{"2":{"394":1}}],["effecttypes",{"2":{"762":1}}],["effectinterface",{"2":{"762":1,"769":1}}],["effectcomposer",{"2":{"733":1}}],["effect",{"2":{"392":2,"397":2,"398":1,"762":1}}],["effectsmanager",{"2":{"762":2}}],["effectsmanagerplaceholder",{"2":{"762":1}}],["effectscatterview",{"2":{"706":1}}],["effectscatterseries",{"2":{"706":1}}],["effectscatter",{"2":{"706":1}}],["effects",{"0":{"769":1},"2":{"3":1,"314":1,"734":1,"755":2,"756":1,"762":4}}],["either",{"0":{"246":1},"2":{"246":1}}],["es6+",{"2":{"758":1}}],["esprima",{"2":{"734":1}}],["esbuild",{"2":{"308":1,"322":1,"702":1,"706":1}}],["esm",{"2":{"272":1,"298":1,"307":3,"308":3,"309":1,"310":1,"314":2,"315":1,"316":4,"320":2,"322":1,"333":6,"337":1,"343":2,"702":1,"762":1,"778":7,"823":2,"828":2}}],["esmoduleinterop",{"2":{"203":2,"204":2,"322":1}}],["es",{"0":{"307":1,"333":1},"2":{"203":1,"221":1,"272":2,"293":1,"298":1,"303":1,"306":1,"307":1,"308":4,"311":2,"318":1,"333":2,"730":1,"734":2,"762":1,"828":2}}],["es2017",{"2":{"821":1}}],["es2015",{"2":{"203":1,"677":1}}],["es2022",{"2":{"322":1}}],["es2020+",{"2":{"322":1}}],["es2020",{"2":{"203":4,"204":6,"214":1,"215":1}}],["esnext",{"2":{"203":4,"204":2,"677":1}}],["es5",{"2":{"203":1}}],["eslintrc",{"2":{"762":1}}],["eslint",{"0":{"219":1},"2":{"25":1,"219":1,"226":1,"734":1,"762":1,"845":2}}],["evt",{"2":{"684":1,"692":3}}],["evaluateinframe",{"2":{"806":1}}],["evaluatewithargs",{"2":{"806":1}}],["evaluate",{"2":{"647":1,"797":1,"799":1,"806":1}}],["evaluator",{"2":{"646":2,"655":2}}],["evalutorforasync",{"2":{"647":1}}],["evalutor",{"2":{"647":1}}],["eval",{"2":{"549":1,"641":1,"642":1,"655":1,"769":2}}],["even",{"2":{"179":1,"887":1}}],["eventdispatcher",{"2":{"734":1,"740":2}}],["eventcallback",{"2":{"719":2}}],["eventful",{"2":{"719":1}}],["eventtype",{"2":{"692":1}}],["eventtype>",{"2":{"692":3}}],["eventtrack",{"2":{"662":2}}],["eventname",{"2":{"684":1,"719":2,"895":1}}],["eventemitter",{"2":{"302":3,"682":1}}],["eventbus",{"2":{"289":10,"290":1,"315":7}}],["eventmessage",{"2":{"178":1}}],["eventstr",{"2":{"848":1}}],["eventstreamcontenttype",{"2":{"175":2,"839":1}}],["eventshandler",{"2":{"281":1}}],["eventsourcemessages",{"2":{"840":1}}],["eventsourcemessage",{"2":{"168":3,"832":1,"833":3,"839":2,"840":1}}],["eventsource",{"0":{"163":1},"2":{"122":2,"124":1,"134":1,"159":1,"160":2,"162":1,"163":9,"164":1,"165":1,"167":1,"168":1,"169":1,"180":2,"814":1,"839":2,"840":2}}],["events",{"0":{"120":1},"1":{"121":1,"122":1,"123":1,"124":1},"2":{"145":1,"158":1,"280":2,"281":1,"289":9,"676":1,"684":1,"813":1,"839":3,"927":1}}],["event",{"0":{"167":1,"488":1},"2":{"117":1,"118":1,"121":2,"122":1,"143":1,"152":1,"159":1,"160":2,"161":5,"163":17,"164":4,"166":1,"167":2,"168":14,"169":3,"170":1,"171":1,"172":2,"174":1,"175":4,"177":4,"178":11,"180":1,"280":6,"281":6,"289":11,"302":7,"315":9,"487":1,"488":9,"647":1,"682":1,"684":1,"692":1,"706":2,"813":1,"815":1,"818":1,"820":1,"823":1,"830":1,"832":1,"833":2,"839":5}}],["ev",{"2":{"166":2,"818":2,"832":1,"839":1}}],["emotion",{"2":{"922":1,"928":1}}],["embedmany",{"2":{"848":1}}],["embed",{"2":{"848":1}}],["embeddingmodel",{"2":{"848":2,"854":1,"866":1}}],["embeddingmodelv4",{"2":{"847":1,"854":1,"866":1}}],["embedding",{"2":{"410":1,"546":1,"848":1,"857":1}}],["emboss",{"2":{"677":1,"679":1}}],["empathy",{"2":{"366":2,"556":1}}],["empty",{"2":{"261":2}}],["employeerecord",{"2":{"236":2}}],["employee",{"2":{"236":6}}],["emit",{"2":{"289":2,"302":2,"315":3}}],["emitdecoratormetadata",{"2":{"203":1,"204":1}}],["emitter",{"2":{"152":1,"302":3}}],["email",{"2":{"28":6,"184":1,"185":5,"233":3,"259":5,"266":3,"268":1,"269":4,"280":1,"318":2,"640":1,"654":2,"668":2}}],["ellipseconfig>",{"2":{"693":1}}],["ellipse",{"2":{"677":1,"679":1,"680":1,"693":1}}],["elon",{"2":{"511":1}}],["electron",{"2":{"784":2,"785":1,"792":2,"799":1}}],["elem",{"2":{"767":1,"770":1,"771":1,"776":4}}],["elements",{"2":{"761":4,"762":3,"764":2,"765":1,"776":1}}],["element",{"2":{"340":2,"661":1,"668":2,"761":1,"765":1,"768":1,"769":1,"776":5,"777":3,"920":1,"924":1,"931":1,"934":1}}],["eleventy",{"2":{"18":1}}],["else",{"2":{"187":1,"231":1,"232":1,"246":1,"262":1,"281":1,"306":2,"820":2}}],["elapsedtime",{"2":{"152":3,"776":1}}],["ernie",{"2":{"512":3}}],["erp",{"2":{"132":1,"439":1}}],["err",{"2":{"108":1,"169":3,"171":3,"173":4,"175":4,"231":6,"313":1,"820":3,"832":1,"839":1}}],["errors",{"2":{"663":1,"792":3}}],["errorboundary",{"2":{"647":1}}],["errorhandler",{"2":{"274":1}}],["errorresult",{"2":{"262":2}}],["error>",{"2":{"246":1}}],["error",{"2":{"78":1,"97":2,"99":9,"103":5,"106":4,"149":4,"153":4,"163":1,"172":3,"173":1,"175":4,"179":1,"229":2,"231":3,"232":1,"234":2,"238":1,"246":7,"262":3,"300":2,"313":1,"330":2,"576":1,"662":2,"663":1,"706":1,"777":1,"820":2,"866":3}}],["exec",{"2":{"856":1}}],["executing",{"2":{"880":1,"881":1,"896":2}}],["execution",{"2":{"482":1,"792":1,"796":1,"859":2,"879":1,"880":1}}],["executive",{"2":{"470":1}}],["executor",{"2":{"430":1,"790":1,"792":1}}],["executetoolcall",{"2":{"853":1,"856":1}}],["executecommand",{"2":{"796":1}}],["execute",{"0":{"428":1},"1":{"429":1,"430":1,"431":1},"2":{"414":2,"428":1,"430":1,"431":1,"432":2,"433":1,"545":1}}],["executed",{"2":{"314":8}}],["exact",{"2":{"799":1,"806":2}}],["examples",{"2":{"647":2,"666":1,"734":1,"849":1,"881":1}}],["example",{"2":{"152":1,"163":1,"259":4,"262":1,"266":2,"268":1,"269":1,"318":1,"477":1,"482":1,"803":1,"811":1,"881":1}}],["existingaction",{"2":{"743":1}}],["existingitem",{"2":{"281":3}}],["exit",{"2":{"489":3}}],["ext",{"2":{"801":1}}],["extremely",{"2":{"887":1}}],["extrudegeometry",{"2":{"734":1}}],["extras",{"2":{"734":1}}],["extract",{"2":{"227":1,"790":1,"792":2,"922":1}}],["external",{"2":{"792":2,"796":1}}],["externaltexture",{"2":{"734":1}}],["externaldatatransformspec",{"2":{"720":1}}],["externalities",{"2":{"399":1}}],["extend",{"2":{"925":1}}],["extended",{"2":{"881":1}}],["extendprototype",{"2":{"762":1}}],["extendsfilters",{"2":{"646":1}}],["extends",{"0":{"205":1,"209":1,"210":1,"240":1},"1":{"206":1,"207":1,"208":1,"209":1,"210":1},"2":{"203":1,"205":1,"209":3,"210":1,"213":1,"214":1,"215":1,"216":4,"226":1,"231":1,"234":4,"237":1,"240":2,"244":1,"247":1,"248":4,"262":1,"263":3,"264":1,"265":1,"266":1,"267":1,"268":1,"269":2,"270":3,"489":1,"661":2,"663":2,"692":12,"693":23,"719":2,"768":3,"777":2,"820":2,"832":1,"839":1,"866":1,"867":5,"927":1}}],["extensionversion",{"2":{"807":1}}],["extensionconnected",{"2":{"807":1}}],["extensionws",{"2":{"801":1}}],["extension模式",{"2":{"790":1}}],["extensionregisters",{"2":{"706":1,"711":2}}],["extensionapi",{"2":{"705":1,"706":1}}],["extensions",{"2":{"411":1,"711":1,"739":1,"899":1}}],["extension",{"0":{"711":1},"2":{"325":1,"706":2,"708":1,"762":1,"786":1,"787":1,"789":1,"790":2,"791":1,"792":1,"799":1,"801":4,"807":1,"880":1,"881":1}}],["excel",{"2":{"436":2,"647":5}}],["exception",{"2":{"275":1}}],["exclude",{"2":{"203":1,"204":2,"213":1,"214":1,"215":1,"216":1,"227":1}}],["excalidraw",{"2":{"93":1}}],["explicit",{"2":{"881":1}}],["explicitresult",{"2":{"263":1}}],["explain",{"2":{"582":2}}],["exp",{"2":{"325":1}}],["exposes",{"2":{"288":2}}],["exporters",{"2":{"734":1}}],["exporting",{"0":{"312":1}}],["exports",{"2":{"203":1,"288":3,"298":1,"304":7,"306":6,"308":1,"310":1,"333":1,"335":2}}],["export",{"2":{"26":2,"27":3,"28":1,"81":1,"82":1,"83":1,"86":1,"97":1,"99":2,"106":1,"107":1,"108":1,"152":1,"178":1,"179":1,"203":2,"222":1,"223":1,"281":8,"288":2,"289":2,"295":4,"297":1,"300":1,"301":1,"302":1,"303":1,"307":5,"308":2,"310":3,"311":2,"312":4,"314":3,"315":14,"318":3,"319":2,"320":2,"321":3,"324":2,"325":1,"327":6,"328":2,"330":1,"489":1,"661":3,"662":1,"663":3,"677":1,"692":18,"693":35,"706":1,"708":1,"719":2,"720":2,"776":13,"777":7,"806":4,"839":4,"840":3,"853":1,"866":5,"867":3,"868":1,"895":14,"896":1,"927":3}}],["expert",{"2":{"592":1}}],["experimental",{"2":{"845":1,"867":1}}],["experimentaldecorators",{"2":{"203":2,"204":1}}],["experience",{"2":{"518":1}}],["expect",{"2":{"223":4}}],["expired",{"2":{"172":1}}],["expressionhelpers",{"2":{"762":1}}],["expressionvaluefactory",{"2":{"762":1}}],["expressionvalue",{"2":{"762":1}}],["expressiontextpropertydecorator",{"2":{"762":1}}],["expressionpropertydecorator",{"2":{"762":1,"769":2}}],["expressionmanager",{"2":{"762":1,"769":3,"776":1}}],["expressions",{"2":{"762":2,"764":2,"769":3}}],["expressionengine",{"0":{"769":1},"2":{"761":1,"765":1}}],["expression",{"2":{"650":1,"769":2,"776":1}}],["express",{"2":{"83":1,"152":1,"178":1,"204":1,"275":1,"344":1,"573":1,"843":1}}],["enforcement",{"2":{"887":1}}],["en",{"2":{"839":1}}],["enum",{"2":{"806":1}}],["ensureuseradapters",{"2":{"796":1,"800":1}}],["ensureuserclicompatshims",{"2":{"796":1}}],["enhance",{"2":{"677":1,"679":1}}],["enhancedentity",{"2":{"248":1}}],["enhancedwindow",{"2":{"240":1}}],["engine",{"2":{"632":1,"650":1,"655":1,"676":1,"705":1,"769":2,"887":1,"928":1}}],["engineer",{"2":{"540":2,"564":1,"902":1}}],["engineering+product",{"2":{"554":2,"902":2}}],["engineering",{"0":{"542":1,"555":1,"566":1},"1":{"567":1,"568":1},"2":{"236":1,"554":1,"558":1,"559":1,"567":1,"569":1,"901":1,"902":3}}],["enterplanmode",{"2":{"887":1}}],["enterprise",{"2":{"437":1}}],["enterframe",{"2":{"777":1}}],["entities",{"2":{"275":1,"280":2,"281":2}}],["entity",{"2":{"233":5,"248":3,"275":2,"280":3,"281":1}}],["entry",{"2":{"29":1}}],["enableclasscheck",{"2":{"706":1}}],["enablehitgraph",{"2":{"692":1}}],["enablejavascript",{"2":{"203":1}}],["enabled",{"2":{"107":1,"243":3}}],["end",{"2":{"164":1,"172":2,"173":1,"175":2,"739":1,"748":1}}],["endpoints",{"2":{"274":2,"523":1}}],["endpoint",{"2":{"97":1}}],["encoding",{"0":{"715":1},"2":{"117":1,"159":1}}],["envmapintensity",{"2":{"749":1}}],["envmap",{"2":{"742":1,"749":1}}],["environments",{"2":{"734":1}}],["envoverwrite",{"2":{"649":1}}],["envnext",{"2":{"26":1,"28":1}}],["env",{"2":{"26":3,"28":1,"274":3,"481":4,"490":1,"573":1,"583":1,"594":1,"595":1,"647":1,"649":1,"654":3,"661":1,"857":2}}],["e",{"2":{"28":4,"100":2,"246":4,"263":1,"523":1,"654":1,"661":1,"776":1}}],["equals",{"2":{"281":1}}],["eq",{"2":{"28":2}}],["项目特点",{"2":{"928":1}}],["项目主页文档",{"2":{"881":1}}],["项目指引",{"2":{"881":2}}],["项目静态资源",{"2":{"881":1}}],["项目定位",{"0":{"813":1}}],["项目定位与核心价值",{"0":{"639":1,"670":1,"699":1,"728":1,"755":1,"784":1,"842":1,"874":1}}],["项目对象代理",{"2":{"762":1}}],["项目信息",{"2":{"755":1}}],["项目英文说明文档",{"2":{"706":1}}],["项目说明文档",{"2":{"823":1}}],["项目说明",{"2":{"647":1}}],["项目分析报告",{"2":{"647":1}}],["项目文档与设计决策归档",{"2":{"881":1}}],["项目文档目录",{"2":{"762":1}}],["项目文档",{"2":{"647":1,"792":1}}],["项目文档或博客",{"2":{"345":1}}],["项目规模",{"0":{"643":1}}],["项目概览",{"0":{"638":1,"669":1,"698":1,"727":1,"754":1,"783":1,"841":1,"873":1},"1":{"639":1,"640":1,"641":1,"642":1,"643":1,"670":1,"671":1,"672":1,"673":1,"699":1,"700":1,"701":1,"702":1,"728":1,"729":1,"730":1,"755":1,"756":1,"757":1,"758":1,"784":1,"785":1,"786":1,"787":1,"842":1,"843":1,"844":1,"845":1,"874":1,"875":1,"876":1,"877":1}}],["项目时间线",{"0":{"635":1}}],["项目简介",{"0":{"632":1,"636":1}}],["项目机会放在两位开发者面前",{"2":{"622":1}}],["项目初始化",{"2":{"583":1}}],["项目名称",{"2":{"573":1}}],["项目根目录或",{"2":{"571":1}}],["项目根目录下的",{"2":{"570":1}}],["项目级",{"2":{"570":1,"571":1,"580":1}}],["项目管理",{"2":{"515":1}}],["项目汇报",{"2":{"515":1}}],["项目入口文件",{"2":{"481":1}}],["项目创建完成",{"2":{"449":1}}],["项目式",{"2":{"437":1}}],["项目延期的核心原因主要集中在",{"2":{"417":1}}],["项目经理",{"2":{"414":1}}],["项目提供开箱即用的开发体验",{"2":{"343":1}}],["项目通常使用",{"2":{"335":1}}],["项目通常需要开启",{"2":{"203":1}}],["项目目录结构",{"2":{"280":1}}],["项目目录结构示例",{"0":{"280":1}}],["项目开发中最常用的约束形式",{"2":{"270":1}}],["项目场景",{"0":{"259":1},"2":{"259":1,"260":1,"261":1,"262":2,"266":1,"269":1}}],["项目配置",{"2":{"216":1,"706":1,"792":1,"823":1}}],["项目配置实践",{"0":{"211":1},"1":{"212":1,"213":1,"214":1,"215":1,"216":1}}],["项目中的全局样式污染与冲突灾难",{"2":{"928":1}}],["项目中文说明文档",{"2":{"706":1}}],["项目中灵活应用模块化设计",{"2":{"293":1}}],["项目中使用",{"2":{"221":1}}],["项目中",{"2":{"216":2,"217":1,"322":1,"338":1}}],["项目需要浏览器环境支持",{"2":{"214":1}}],["项目依赖和类型共享",{"2":{"210":1}}],["项目引用",{"0":{"207":1}}],["项目结构初览",{"0":{"823":1},"1":{"824":1}}],["项目结构",{"2":{"202":1}}],["项目地址",{"2":{"97":1,"103":2}}],["项目查看",{"2":{"94":1}}],["项目如何组织",{"2":{"72":1}}],["项目扩展",{"0":{"30":1}}],["项目设置",{"2":{"29":1}}],["项目的终极形态",{"2":{"927":1}}],["项目的绝对主力方案",{"2":{"924":1}}],["项目的",{"2":{"29":1,"570":1}}],["项目实践",{"0":{"22":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1}}],["项目",{"0":{"25":1},"2":{"18":1,"25":1,"29":1,"203":2,"204":2,"207":1,"210":1,"214":1,"215":1,"470":1,"561":1,"562":1,"573":1,"583":1,"597":1}}],["全都要",{"2":{"946":1}}],["全都要型",{"2":{"445":1}}],["全链路类型安全",{"2":{"928":1}}],["全链路无人值守",{"2":{"568":1}}],["全功能构建入口",{"2":{"764":1}}],["全功能",{"2":{"762":1}}],["全功能版本入口",{"2":{"762":1}}],["全功能管理",{"2":{"734":1}}],["全屏四边形",{"2":{"734":1}}],["全量触发场景测试",{"2":{"881":1}}],["全量多模型测试执行器",{"2":{"881":1}}],["全量技能测试执行器",{"2":{"881":1}}],["全量入口",{"2":{"706":1,"708":1}}],["全量类型定义",{"2":{"647":1}}],["全量权重开源可本地部署",{"2":{"512":1}}],["全方位深度解读报告",{"2":{"636":1}}],["全文",{"2":{"632":1}}],["全面迈向",{"2":{"934":1}}],["全面国际化",{"2":{"701":1}}],["全面审查",{"2":{"591":1}}],["全面对标",{"2":{"564":1}}],["全面拥抱",{"2":{"308":1,"930":1}}],["全程完成",{"2":{"568":1}}],["全程在浏览器内完成",{"2":{"561":1}}],["全程无服务器动态计算",{"2":{"43":1}}],["全流程开发伙伴",{"2":{"874":1}}],["全流程",{"2":{"514":1}}],["全诗押平声",{"2":{"507":1}}],["全诗对仗工整",{"2":{"505":1}}],["全篇由五字句构成的诗",{"2":{"506":1}}],["全篇每句七字或以七字句为主的诗体",{"2":{"506":1}}],["全感官输入与输出",{"2":{"418":1}}],["全知全能",{"2":{"367":1}}],["全能手",{"2":{"553":1}}],["全能助手",{"2":{"511":1}}],["全能的幻觉与稀缺的转移",{"0":{"457":1}}],["全能大脑",{"2":{"413":1}}],["全能型同构请求体",{"2":{"342":1}}],["全能请求库",{"2":{"342":1}}],["全集",{"2":{"227":1,"244":3}}],["全部抽象为",{"2":{"927":1}}],["全部完成时停止",{"2":{"889":1}}],["全部",{"2":{"851":1}}],["全部处理完",{"2":{"833":1}}],["全部可",{"2":{"729":1}}],["全部平铺",{"2":{"203":1}}],["全部自动在后台失效并重新获取",{"2":{"110":1}}],["全双工数据传输",{"2":{"127":1}}],["全双工通信",{"0":{"125":1},"1":{"126":1,"127":1,"128":1,"129":1}}],["全局作用域导致的命名冲突",{"2":{"923":1}}],["全局污染",{"2":{"922":1}}],["全局单例",{"2":{"797":1}}],["全局命令注册中心",{"2":{"797":1}}],["全局命名空间导出契约",{"2":{"693":1}}],["全局命名空间初始化",{"2":{"679":1}}],["全局批处理方法",{"2":{"767":1}}],["全局方法",{"2":{"767":1}}],["全局冻结",{"2":{"767":1}}],["全局状态",{"2":{"764":1}}],["全局状态管理",{"2":{"274":1}}],["全局核心状态",{"2":{"762":1}}],["全局动画循环共享一个",{"2":{"767":1}}],["全局动画管理器",{"2":{"762":1}}],["全局动画注册表",{"2":{"761":1}}],["全局动画列表",{"2":{"686":1}}],["全局常量",{"2":{"734":1}}],["全局选项模型",{"2":{"709":1}}],["全局默认值配置",{"2":{"706":1}}],["全局类型",{"2":{"679":1}}],["全局类型定义",{"2":{"677":1,"706":1}}],["全局对象并绑定所有公共",{"2":{"764":1}}],["全局对象",{"2":{"675":1,"676":1,"677":1,"760":1,"762":1,"764":1,"765":1}}],["全局事件广播回调",{"2":{"661":1}}],["全局事件绑定",{"2":{"646":1}}],["全局渲染器",{"2":{"650":1}}],["全局入口与核心路由",{"0":{"649":1,"679":1,"708":1,"736":1,"764":1,"794":1,"853":1,"883":1},"1":{"795":1,"796":1}}],["全局注册表",{"2":{"647":1,"706":1}}],["全局偏好",{"2":{"570":1}}],["全局理解与跨库关联",{"2":{"417":1}}],["全局范围内通过命名空间访问",{"2":{"320":1}}],["全局变量变化时的回调",{"2":{"661":1}}],["全局变量",{"2":{"653":1}}],["全局变量系统",{"2":{"647":1}}],["全局变量阶段",{"2":{"298":1}}],["全局变量污染与命名冲突",{"2":{"297":1}}],["全局错误捕获和上报",{"2":{"291":1}}],["全局管道",{"2":{"275":1}}],["全局拦截器",{"2":{"275":1}}],["全局守卫",{"2":{"275":1}}],["全局异常过滤器",{"2":{"275":1}}],["全局样式管理器",{"2":{"931":1}}],["全局样式编码",{"2":{"706":1}}],["全局样式",{"2":{"274":2}}],["全局自定义",{"2":{"274":1}}],["全局",{"2":{"110":1,"274":1,"570":1,"571":1,"580":1,"583":1,"653":1,"677":2,"761":1,"762":1}}],["全局引擎配置",{"0":{"106":1}}],["全局导航栏",{"2":{"79":1}}],["全栈开发者接入",{"2":{"842":1}}],["全栈开发者提供统一的",{"2":{"842":1}}],["全栈开发者而言",{"2":{"342":1}}],["全栈应用生成器",{"2":{"561":1}}],["全栈就是线性的技能叠加与物理式的技术拼接",{"2":{"553":1}}],["全栈基础设施",{"2":{"542":1}}],["全栈基础设施的范畴也扩展到了跨端轻量化应用",{"2":{"542":1}}],["全栈化",{"2":{"529":1}}],["全栈视角的复刻推演",{"0":{"374":1}}],["全栈的智慧在于",{"2":{"365":1}}],["全栈工程师也正在进化为",{"2":{"540":1}}],["全栈工程师",{"2":{"361":1,"540":1,"553":1}}],["全栈框架",{"0":{"344":1},"2":{"344":2}}],["全栈项目",{"2":{"342":1}}],["全栈类型安全架构",{"2":{"342":1}}],["全栈类型安全的",{"2":{"342":1}}],["全栈一致性",{"2":{"326":1}}],["全栈一体",{"2":{"92":1}}],["全栈",{"0":{"280":1},"2":{"308":1,"553":2,"558":2,"902":1}}],["全栈后台",{"2":{"92":1}}],["全球化",{"2":{"947":1}}],["全球首个商用",{"2":{"567":1}}],["全球最大开源",{"2":{"523":1}}],["全球最受欢迎的笔记与协作平台内置",{"2":{"515":1}}],["全球",{"2":{"23":1}}],["全球分发",{"2":{"15":1,"32":1}}],["全场景",{"2":{"18":1}}],["nx",{"2":{"845":1}}],["nycrc",{"2":{"823":1}}],["nth",{"2":{"806":3}}],["ntype",{"2":{"234":2}}],["nm",{"2":{"771":2}}],["n8n",{"2":{"403":1}}],["nvidia",{"2":{"353":1}}],["nitro",{"2":{"344":2}}],["n+1",{"2":{"342":1}}],["ndata",{"2":{"163":1}}],["ndjson",{"2":{"160":1}}],["n",{"2":{"121":2,"148":1,"164":4,"166":1,"168":2,"177":6,"234":8,"238":2,"489":2,"650":8,"680":5,"708":2,"709":4,"737":6,"743":2,"765":4,"797":1,"806":2,"833":4,"840":2,"854":8,"884":5,"945":1}}],["nginx",{"2":{"119":1,"137":1,"153":1,"155":1,"177":1,"553":1}}],["navigatebefore",{"2":{"800":2,"806":1}}],["navigation",{"2":{"27":1}}],["navidad",{"2":{"762":2}}],["naked",{"2":{"234":1}}],["nativekeypress",{"2":{"806":1}}],["nativetype",{"2":{"806":1}}],["nativeclick",{"2":{"806":1}}],["native",{"2":{"113":1,"203":2,"316":1,"491":1,"525":1,"551":1,"553":1,"755":1,"881":1}}],["namecoordmap",{"2":{"714":1}}],["name>",{"2":{"667":1}}],["namespace",{"2":{"320":3,"676":1,"680":1,"682":1,"693":3}}],["named",{"2":{"310":1}}],["name",{"2":{"97":1,"100":3,"103":1,"184":1,"185":5,"203":1,"231":2,"233":5,"236":2,"239":2,"240":1,"246":1,"248":2,"258":1,"259":5,"260":4,"266":5,"267":5,"268":3,"269":6,"270":1,"288":4,"289":4,"300":3,"311":4,"318":2,"324":1,"442":4,"443":2,"448":4,"451":1,"481":4,"484":2,"581":2,"582":1,"583":1,"586":1,"591":1,"640":4,"655":3,"661":1,"668":3,"692":1,"720":2,"724":1,"743":2,"748":3,"749":3,"776":9,"777":10,"797":2,"800":1,"806":4,"807":6,"857":1,"868":2,"881":1,"884":1,"895":2,"923":1}}],["name=",{"2":{"81":1}}],["noise",{"2":{"677":1,"679":1}}],["noimplicitoverride",{"2":{"203":1}}],["noimplicitreturns",{"2":{"203":1}}],["noimplicitthis",{"2":{"203":2}}],["noimplicitany",{"2":{"203":2}}],["normalmap",{"2":{"742":1,"749":1}}],["normalized",{"2":{"342":1}}],["noreply",{"2":{"581":1}}],["nosql",{"2":{"555":1}}],["non",{"2":{"848":1}}],["nonloadingstatus",{"2":{"234":1}}],["none",{"2":{"27":1,"806":1,"921":1,"922":1,"924":1,"927":2}}],["nobitwise",{"2":{"203":1}}],["nouncheckedindexedaccess",{"2":{"203":1}}],["nounusedparameters",{"2":{"203":1,"204":1}}],["nounusedlocals",{"2":{"203":1,"204":1}}],["nofallthroughcasesinswitch",{"2":{"203":1,"204":1}}],["noemitonerror",{"2":{"203":1,"204":1}}],["noemit",{"2":{"203":1,"204":1}}],["nooverride",{"2":{"203":1}}],["no",{"2":{"94":1,"119":1,"161":1,"164":1,"177":2,"482":1,"890":1}}],["now",{"2":{"28":1}}],["notmerge",{"2":{"719":1}}],["notify",{"2":{"649":1,"653":1,"654":1,"661":1,"662":1}}],["notificationservice",{"2":{"281":3}}],["notification",{"2":{"280":1}}],["notion",{"2":{"373":1,"515":8,"548":1}}],["notebooklm",{"2":{"515":6}}],["notes",{"2":{"471":2,"472":1,"474":1,"631":2,"881":1}}],["note",{"2":{"365":1,"366":1,"367":1,"371":1,"557":1,"911":1,"961":1}}],["not",{"2":{"28":3,"78":1,"482":1,"807":1,"887":2,"927":1}}],["notfound",{"2":{"27":2}}],["nodeframe",{"2":{"748":3}}],["nodeupdatetype",{"2":{"748":3}}],["nodelibrary",{"2":{"734":1}}],["nodematerial",{"2":{"742":2}}],["nodematerials",{"2":{"736":1}}],["nodematerial系列",{"2":{"734":1}}],["nodemanager",{"2":{"734":1}}],["nodes",{"2":{"733":1,"734":7,"736":3}}],["nodebuilder",{"2":{"733":2,"734":1,"736":1,"737":1,"741":2,"746":1,"748":3}}],["nodetype",{"2":{"733":1,"741":1,"748":1}}],["nodeconfig",{"2":{"692":4}}],["nodeclass",{"2":{"685":3}}],["nodeparams",{"2":{"677":1}}],["nodenext",{"2":{"203":1,"322":2}}],["node16",{"2":{"203":2}}],["nodejs",{"2":{"164":1,"901":1}}],["node",{"0":{"304":1,"334":1,"682":1},"2":{"20":1,"69":1,"94":1,"152":1,"203":9,"204":6,"213":1,"214":1,"215":4,"221":1,"222":2,"272":2,"280":2,"293":1,"298":1,"304":3,"306":1,"307":1,"308":1,"320":1,"322":3,"326":1,"333":2,"334":7,"335":1,"337":3,"338":2,"342":5,"344":8,"346":2,"480":1,"542":1,"548":2,"552":1,"553":1,"661":1,"665":1,"670":1,"671":1,"672":1,"673":1,"677":6,"679":1,"680":6,"682":3,"686":1,"692":18,"693":1,"706":1,"722":2,"732":1,"733":3,"734":1,"736":3,"737":3,"741":5,"743":1,"748":1,"751":2,"787":1,"792":2,"801":1,"809":1,"823":2,"843":1,"845":2,"870":1,"881":1}}],["nurbs",{"2":{"734":1}}],["numlength3",{"2":{"265":1}}],["numlength2",{"2":{"265":1}}],["numlength1",{"2":{"265":1}}],["num",{"2":{"262":2}}],["numbertostring",{"2":{"262":1}}],["numbercontainer",{"2":{"261":3}}],["numberresult",{"2":{"258":1}}],["numbers",{"2":{"223":2,"261":1}}],["number>",{"2":{"178":1,"261":1,"262":2,"265":1}}],["number",{"2":{"163":1,"179":2,"223":6,"227":3,"229":4,"230":6,"231":4,"232":1,"233":2,"234":4,"236":2,"237":2,"238":14,"239":2,"240":1,"242":2,"243":4,"246":1,"248":2,"254":2,"255":2,"256":1,"258":2,"259":1,"260":3,"261":1,"262":2,"263":1,"265":4,"266":2,"267":4,"269":1,"274":1,"281":7,"289":1,"319":6,"321":7,"324":3,"325":3,"482":2,"661":1,"692":41,"693":6,"706":2,"714":2,"719":19,"720":2,"734":1,"748":24,"749":7,"776":43,"777":9,"806":18,"807":3,"832":1,"833":1,"839":2,"840":3,"866":2,"867":3,"895":1}}],["nullelement",{"2":{"762":1}}],["null>",{"2":{"281":2,"806":1}}],["null",{"2":{"26":1,"28":4,"99":3,"101":2,"152":2,"194":1,"203":2,"248":4,"281":1,"289":3,"662":1,"663":1,"692":1,"748":6,"749":1,"776":4,"801":1,"832":1,"839":1}}],["nuxt",{"2":{"18":1,"38":1,"65":1,"344":3,"928":1}}],["npmignore",{"2":{"762":1,"823":1}}],["npm",{"2":{"25":1,"43":2,"59":1,"94":1,"203":1,"204":1,"221":2,"286":1,"335":2,"567":1,"572":1,"573":3,"594":1,"595":2,"642":1,"643":1,"647":1,"665":1,"666":2,"667":5,"677":1,"695":4,"697":4,"706":1,"722":1,"723":3,"726":1,"734":1,"751":1,"752":4,"758":1,"762":2,"780":1,"800":1,"823":3,"848":1,"876":1,"877":1,"881":1}}],["npx",{"2":{"25":1}}],["negotiable",{"2":{"887":1}}],["negative",{"2":{"281":1}}],["needsupdate",{"2":{"742":1,"748":2}}],["near",{"2":{"740":1,"749":1}}],["nesting",{"2":{"921":1,"933":1}}],["nested",{"2":{"676":1}}],["nestjs",{"0":{"152":1,"178":1},"2":{"152":2,"178":5,"179":3,"180":1,"275":2,"280":2,"344":4,"429":1,"558":1,"902":1}}],["networkrequests",{"2":{"799":1,"806":1}}],["network",{"2":{"790":1,"792":3,"799":1}}],["netflix",{"2":{"354":1}}],["netlify",{"2":{"16":1,"19":1,"20":1,"32":1,"345":2,"561":1}}],["never",{"0":{"232":1},"2":{"227":2,"232":7,"234":4,"237":5,"244":17,"250":2}}],["newtab",{"2":{"806":1}}],["newtodo",{"2":{"108":7}}],["newlayers",{"2":{"776":1}}],["newidx",{"2":{"713":1}}],["newname",{"2":{"100":4}}],["newcomment",{"2":{"28":4}}],["new",{"2":{"27":2,"28":1,"99":1,"106":1,"149":3,"152":1,"153":2,"163":1,"166":1,"168":1,"169":3,"171":1,"172":1,"174":1,"175":4,"179":1,"232":1,"238":1,"248":3,"261":3,"267":3,"269":4,"281":7,"288":3,"289":1,"302":1,"311":1,"328":1,"330":1,"559":1,"561":1,"562":2,"679":1,"696":3,"706":1,"708":2,"753":7,"769":2,"771":1,"776":2,"819":1,"820":2,"853":1}}],["nextconfig",{"2":{"84":2}}],["nextresponse",{"2":{"83":1}}],["nextjs",{"2":{"28":1}}],["nextauth",{"2":{"20":1}}],["next",{"0":{"25":1,"68":1,"72":1,"92":1,"93":1},"1":{"69":1,"70":1,"71":1,"73":1,"74":1},"2":{"14":1,"18":1,"19":1,"20":1,"22":1,"23":1,"25":3,"26":3,"27":3,"28":2,"29":1,"32":1,"38":1,"42":1,"46":2,"47":1,"53":2,"65":1,"68":1,"71":5,"72":2,"75":1,"76":1,"80":1,"81":1,"83":2,"84":5,"85":2,"86":1,"90":2,"93":2,"94":4,"342":1,"343":1,"344":4,"543":1,"561":1,"562":1,"573":2,"843":1,"845":1,"890":1,"923":1,"927":1,"928":2,"934":1}}],["博客站点主要基于",{"2":{"904":1}}],["博客列表",{"2":{"79":1}}],["博客首页",{"2":{"48":1}}],["博客",{"2":{"18":1,"27":1,"31":1,"75":1,"79":1,"82":1,"92":1}}],["优秀绵羊",{"2":{"603":1}}],["优秀设计",{"2":{"448":1}}],["优秀设设计",{"2":{"445":1}}],["优秀的产品设计就是在无数个",{"2":{"394":1}}],["优秀的人洞察系统",{"2":{"389":1}}],["优秀的模块化设计应当让开发者在进入代码库时",{"2":{"332":1}}],["优秀的业务模块或工具模块可以在不同页面甚至不同项目中跨端复用",{"2":{"297":1}}],["优雅处理大模型幻觉",{"2":{"543":1}}],["优雅地拆解并并行化复杂的业务逻辑",{"2":{"440":1}}],["优雅地结束规划",{"2":{"427":1}}],["优雅",{"2":{"359":1}}],["优雅的",{"2":{"342":1}}],["优雅治理",{"2":{"337":1}}],["优化逐帧查询性能",{"2":{"770":1}}],["优化节点图",{"2":{"741":1}}],["优化代码",{"2":{"587":1}}],["优化大模型响应的等待体验",{"2":{"543":1}}],["优化或模型微调提供高质量数据源",{"2":{"541":1}}],["优化自己或团队的工作流",{"2":{"436":1}}],["优化预算",{"2":{"407":1}}],["优化和开发人员体验",{"2":{"344":1}}],["优化差",{"2":{"344":1}}],["优化",{"2":{"331":1,"343":1,"551":1,"591":1}}],["优化首屏性能",{"2":{"313":1}}],["优化聚合边界和领域服务",{"2":{"282":1}}],["优化极致",{"2":{"18":1}}],["优惠券id",{"2":{"200":1}}],["优势是最新模型第一时间可用",{"2":{"520":1}}],["优势",{"2":{"283":1,"287":1,"414":1,"922":1,"923":1,"924":1,"925":1,"927":1}}],["优势分析",{"0":{"104":1}}],["优势点",{"2":{"97":1}}],["优势用不上",{"2":{"93":1}}],["优缺点",{"0":{"36":1,"40":1,"44":1,"49":1,"54":1}}],["优先统计工作日早上至午休这段时间的分配",{"2":{"954":1}}],["优先对健康",{"2":{"953":1}}],["优先级排序",{"2":{"705":2}}],["优先级高于",{"2":{"203":1}}],["优先按",{"2":{"652":1}}],["优先与高信噪比人群深度交流",{"2":{"625":1}}],["优先解决阻碍用户达成目标的",{"2":{"556":1}}],["优先使用表达式计算值",{"2":{"769":1}}],["优先使用",{"2":{"523":1}}],["优先使用命名导出",{"2":{"311":1}}],["优先用",{"2":{"518":1}}],["优先收集量化数据",{"2":{"472":1}}],["优先加载",{"2":{"334":1}}],["优先排查",{"0":{"198":1},"1":{"199":1}}],["优先不引入依赖",{"2":{"192":1}}],["优先",{"0":{"189":1},"1":{"190":1,"191":1},"2":{"510":2,"518":1,"568":2}}],["优先将布局组件",{"2":{"59":1}}],["优先选择支持私有化部署或数据不出境承诺的服务",{"2":{"523":1}}],["优先选择长轮询",{"2":{"156":1}}],["优先选择退避轮询",{"2":{"156":1}}],["优先选择",{"2":{"31":1,"437":1}}],["优先引导",{"2":{"9":1}}],["生理健康",{"2":{"941":1}}],["生命周期测试",{"2":{"881":1}}],["生命周期钩子",{"2":{"792":1,"851":1}}],["生命周期管理",{"2":{"706":1}}],["生命周期回调",{"2":{"110":1,"748":1}}],["生活和减肥这件小事上",{"2":{"963":1}}],["生活和一些出游都会呈现出是实实在在的益处",{"2":{"959":1}}],["生活短板补充圈",{"2":{"947":1}}],["生活中的数学思维",{"2":{"916":3}}],["生活中的各项任务",{"2":{"515":1}}],["生活中有很多增强回路的示例",{"2":{"908":1}}],["生活质量本质上取决于相互依赖",{"2":{"907":1}}],["生活与垂直领域",{"0":{"407":1}}],["生活里的经济学洞察",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1}}],["生效的时刻",{"2":{"371":1}}],["生产力基石与标准协议",{"0":{"930":1},"2":{"928":1}}],["生产力主轴",{"2":{"928":1}}],["生产力工具",{"2":{"476":1}}],["生产环境可根据需要开启",{"2":{"203":1}}],["生产项目必备",{"2":{"203":1}}],["生产实践要点与完整示例",{"0":{"170":1},"1":{"171":1,"172":1,"173":1,"174":1,"175":1}}],["生日",{"2":{"184":1}}],["生视频应用的正常运行",{"2":{"144":1}}],["生视频等耗时较长",{"2":{"143":1}}],["生视频",{"2":{"136":1}}],["生图进度查询",{"2":{"156":1}}],["生图场景下更具性价比的通信方案",{"2":{"140":1}}],["生图平台的后端架构通常是彻底解耦的",{"2":{"138":1}}],["生图使用",{"2":{"137":1}}],["生图",{"2":{"135":1,"136":1,"143":1}}],["生态下更完美的实践模式",{"2":{"934":1}}],["生态和",{"2":{"934":1}}],["生态最优解",{"2":{"928":1}}],["生态最成熟",{"2":{"642":1}}],["生态最成熟的",{"2":{"565":1}}],["生态友好",{"2":{"822":1}}],["生态无缝衔接",{"2":{"561":1}}],["生态成熟",{"2":{"522":2}}],["生态集成",{"2":{"521":1}}],["生态完善",{"2":{"512":1}}],["生态开放",{"2":{"512":1}}],["生态深度整合",{"2":{"511":1}}],["生态系统",{"2":{"398":1,"434":1}}],["生态重度依赖团队",{"2":{"344":1}}],["生态庞大",{"2":{"341":1}}],["生态活跃",{"2":{"341":1}}],["生态稳定",{"2":{"341":1}}],["生态的解法",{"2":{"928":2}}],["生态的通用标准",{"2":{"316":1}}],["生态的基石",{"0":{"304":1},"2":{"321":1}}],["生态极其丰富",{"2":{"308":1}}],["生态丰富",{"2":{"287":1}}],["生态不成熟",{"2":{"287":1}}],["生态中常用且成熟的实践模式",{"2":{"934":1}}],["生态中",{"2":{"109":1}}],["生态",{"2":{"18":2,"440":1,"441":1,"842":1,"931":2,"934":3}}],["生成神器",{"2":{"934":1}}],["生成一个警告按钮",{"2":{"934":1}}],["生成与工程构建的底层基建",{"2":{"928":1}}],["生成任务清单",{"2":{"900":1}}],["生成核心",{"0":{"856":1}}],["生成多达",{"2":{"778":1}}],["生成变形后的新形状路径",{"2":{"771":1}}],["生成目标着色器代码",{"2":{"741":1}}],["生成着色器代码",{"2":{"736":1}}],["生成引擎",{"2":{"685":1}}],["生成大量分析数据",{"2":{"592":1}}],["生成覆盖率",{"2":{"583":1}}],["生成更新日志",{"2":{"583":1}}],["生成式交互",{"2":{"543":1}}],["生成式",{"2":{"543":1}}],["生成单元测试",{"2":{"537":1}}],["生成代码并实时预览",{"2":{"561":1}}],["生成代码",{"2":{"531":1,"741":1,"901":1}}],["生成初稿",{"2":{"528":1}}],["生成笔记与任务清单",{"2":{"515":1}}],["生成图表",{"2":{"471":1,"472":1}}],["生成图表和可视化",{"2":{"436":1}}],["生成阶段",{"2":{"426":1}}],["生成直观的图表",{"2":{"416":1}}],["生成摘要时",{"2":{"628":1}}],["生成摘要答案",{"2":{"518":1}}],["生成摘要的技能",{"2":{"470":1}}],["生成摘要",{"2":{"412":1}}],["生成分析报告初稿",{"2":{"406":1}}],["生成器",{"2":{"403":1}}],["生成答案的能力",{"2":{"367":1}}],["生成组件或数据结构的快照",{"2":{"225":1}}],["生成完毕后",{"2":{"138":1}}],["生成完整带内容的",{"2":{"39":1}}],["生成完整",{"2":{"38":1}}],["生成唯一",{"2":{"138":1}}],["生成流水线",{"2":{"111":1}}],["生成",{"2":{"73":1,"203":5,"208":1,"409":1,"426":1,"453":1,"470":3,"471":4,"472":1,"499":1,"515":1,"535":1,"561":2,"734":1,"737":1,"757":1,"792":1,"928":1,"934":1}}],["生成的深度分析报告",{"2":{"637":1}}],["生成的大体量代码",{"2":{"533":1}}],["生成的代码不是随机",{"2":{"532":1}}],["生成的图表不仅准确",{"2":{"475":1}}],["生成的可视化图表",{"2":{"471":1}}],["生成的子任务是基于当前环境反馈的",{"2":{"425":1}}],["生成的东西",{"2":{"359":1}}],["生成的答案",{"2":{"350":1}}],["生成的模块使用",{"2":{"203":1}}],["生成的页面时",{"2":{"65":1}}],["生成的",{"0":{"359":1},"2":{"63":1,"499":1}}],["生成次数",{"2":{"57":1}}],["生成时机",{"2":{"57":1}}],["生成静态",{"2":{"47":2}}],["生成静态页面",{"2":{"46":1}}],["生成静态版本无疑是更为高效的方式",{"2":{"3":1}}],["生成所有页面的静态",{"2":{"43":1}}],["生成可视化图表",{"2":{"471":1}}],["生成可部署的产物",{"2":{"33":1}}],["生成可指导编程的实现规范",{"2":{"9":1}}],["生成规范",{"2":{"9":2}}],["ikeyframe",{"2":{"776":2}}],["ipage",{"2":{"789":1,"790":1,"791":1,"792":2,"797":2,"799":2,"806":4}}],["iproperty",{"2":{"776":1}}],["iprojectinterface",{"2":{"776":1}}],["iphone",{"2":{"289":1}}],["ianimationconfig",{"2":{"776":1}}],["ianimationdata",{"2":{"776":2}}],["ianimationitem",{"2":{"776":3}}],["ilayerdata",{"2":{"776":4}}],["iglobaldata",{"2":{"776":3}}],["ibaseelement",{"2":{"776":18}}],["ibackend",{"2":{"748":1}}],["ibl",{"2":{"729":1,"734":1,"749":1}}],["iexpressionmanager",{"2":{"776":1}}],["iexpressionplugin",{"2":{"776":1}}],["ies",{"2":{"734":1}}],["ieventhandler",{"2":{"281":1}}],["i18n",{"2":{"706":3}}],["iron",{"2":{"890":2}}],["ironclaw",{"2":{"419":1}}],["irendererconfig",{"2":{"776":1}}],["irendererconstructor",{"2":{"776":3}}],["irendererregistry",{"2":{"776":1}}],["irenderer",{"2":{"748":1,"776":5}}],["irect",{"2":{"677":1,"692":3,"693":3}}],["iirendererstore>",{"2":{"663":1}}],["iirendererstore",{"2":{"661":1,"663":2}}],["iife",{"2":{"298":1,"303":1,"306":1}}],["i`",{"2":{"451":1}}],["iobject3d",{"2":{"748":1}}],["io",{"2":{"647":1}}],["ioc",{"2":{"344":1,"702":1,"711":1}}],["ios",{"2":{"342":2,"755":1,"756":1}}],["i++",{"2":{"330":1}}],["i",{"2":{"330":3,"666":1,"776":1,"889":1}}],["icalculator",{"2":{"319":3}}],["icons",{"2":{"274":1,"646":1,"647":4}}],["icon",{"2":{"274":1,"499":2}}],["isprimary>主要按钮",{"2":{"922":1}}],["isprimary",{"2":{"922":3,"923":2,"924":3,"925":2,"927":1}}],["ispaused",{"2":{"776":1}}],["isloopfinished",{"2":{"856":2,"859":1}}],["isloaded",{"2":{"776":1}}],["isloading",{"2":{"90":1,"97":2,"99":2,"103":3}}],["ishapemodifierconstructor",{"2":{"776":2}}],["ishapemodifierregistry",{"2":{"776":1}}],["ishapemodifiershape",{"2":{"776":2}}],["ishapemodifier",{"2":{"776":3}}],["issubframeenabled",{"2":{"776":1}}],["issue",{"2":{"567":1,"568":5,"570":1,"881":2}}],["isssr",{"2":{"719":1}}],["istorenode",{"2":{"663":2}}],["istaskdone",{"2":{"152":2}}],["isframe",{"2":{"776":2}}],["isfrozen",{"2":{"767":1}}],["isformitem",{"2":{"661":1}}],["isfetching",{"2":{"103":1}}],["iscurrenturl",{"2":{"662":1}}],["iscancel",{"2":{"649":1,"653":1,"662":1}}],["iscopedcontext",{"2":{"646":1,"661":1}}],["isolatescope",{"2":{"661":1}}],["isolatedmodules",{"2":{"204":1,"322":1}}],["isomorphic",{"2":{"344":2}}],["ismobile",{"2":{"313":1,"662":1}}],["isdisposed",{"2":{"719":1}}],["isdeleted",{"2":{"248":2}}],["isdog",{"2":{"231":2}}],["isenabled",{"2":{"776":1}}],["iservicestore",{"2":{"663":1}}],["iserror",{"2":{"99":1,"103":1}}],["isempty",{"2":{"194":1}}],["isinstance",{"2":{"187":2}}],["isactive",{"2":{"107":1}}],["is",{"2":{"97":1,"231":2,"261":1,"489":1,"887":1,"909":1}}],["isrunning",{"2":{"692":1}}],["isr",{"0":{"46":1,"48":1,"53":1},"1":{"47":1,"48":1,"49":1,"50":1},"2":{"18":1,"21":1,"31":1,"32":1,"33":1,"46":1,"47":1,"48":2,"50":1,"51":1,"53":2,"57":3,"58":2,"59":5,"66":1,"67":3,"71":1,"75":2,"79":1,"82":1,"92":2,"344":4}}],["imaterial",{"2":{"748":1}}],["imagemodelv4",{"2":{"854":1,"866":1}}],["imagemodel",{"2":{"848":2,"854":1,"866":1}}],["imagepreloaderworkeroverride",{"2":{"762":1}}],["imagepreloader",{"2":{"762":1,"765":1}}],["imageelement",{"2":{"761":1,"762":1}}],["imageloader",{"2":{"734":1}}],["imageutils",{"2":{"734":1}}],["imageconfig>",{"2":{"693":1}}],["imagedata",{"2":{"677":1,"680":1,"693":4}}],["imagesmoothingenabled",{"2":{"692":1}}],["images",{"2":{"84":2,"274":1,"734":1,"777":1}}],["image",{"2":{"84":2,"152":1,"677":1,"679":1,"680":1,"693":1,"734":1,"848":1,"856":1,"857":1}}],["immediate",{"2":{"673":1}}],["implementer",{"2":{"881":1,"889":2}}],["implementationplan",{"2":{"895":1}}],["implementation",{"2":{"319":1,"732":1,"848":1,"880":1}}],["implements",{"2":{"267":1,"281":3,"319":1,"857":1}}],["impl",{"2":{"280":1,"281":1,"706":1,"847":1}}],["important>",{"2":{"886":1,"887":1}}],["imports",{"2":{"344":1,"764":1}}],["import",{"0":{"313":1},"2":{"27":4,"28":2,"81":1,"97":1,"99":2,"106":3,"107":1,"152":1,"169":1,"178":3,"179":2,"203":4,"288":9,"289":6,"295":1,"297":2,"300":1,"301":1,"302":1,"303":1,"307":2,"308":1,"310":3,"311":2,"312":1,"313":5,"314":5,"315":12,"318":3,"319":1,"320":1,"324":1,"325":2,"333":6,"334":1,"335":2,"337":1,"481":1,"483":1,"490":2,"725":4,"843":3,"853":2,"922":1,"923":1,"927":2}}],["iterable",{"2":{"203":1,"204":1,"214":1,"216":1}}],["itemopts>",{"2":{"719":2}}],["item",{"2":{"26":3,"259":5,"261":3,"266":2,"267":2,"280":1,"281":9,"288":1,"647":1,"692":1}}],["itemstyle",{"2":{"706":1,"715":3}}],["items",{"2":{"26":4,"259":3,"261":5,"267":2,"281":7,"739":1,"927":1}}],["it",{"2":{"62":1,"65":1,"87":1,"97":1}}],["iformstore",{"2":{"663":1}}],["iframe",{"2":{"287":2,"692":3}}],["if",{"2":{"27":1,"28":1,"97":2,"99":1,"100":1,"101":1,"103":2,"108":1,"149":2,"152":1,"153":2,"166":2,"168":4,"169":3,"171":2,"172":3,"173":2,"175":4,"179":1,"187":1,"231":5,"232":1,"238":2,"246":1,"249":2,"259":1,"260":1,"261":1,"262":1,"281":6,"289":3,"301":1,"302":2,"306":2,"313":1,"315":2,"330":1,"482":1,"483":2,"484":1,"486":1,"488":3,"489":1,"655":3,"685":2,"686":1,"741":1,"820":3}}],["idx",{"2":{"713":1,"719":2}}],["identifier",{"2":{"655":2}}],["identity",{"2":{"244":1,"254":4,"255":1,"258":4,"263":2,"792":1}}],["ide",{"0":{"563":1},"1":{"564":1,"565":1},"2":{"216":1,"310":1,"319":1,"559":1,"561":1,"564":4,"565":3,"568":1,"673":1,"927":1}}],["idea",{"2":{"203":2,"557":1,"902":1}}],["idgeneratortype",{"2":{"196":2}}],["id>",{"2":{"177":1}}],["id=35",{"2":{"762":1}}],["id=23",{"2":{"762":1}}],["id=20",{"2":{"762":1}}],["id=22",{"2":{"762":1}}],["id=24",{"2":{"762":1}}],["id=28",{"2":{"762":1}}],["id=29",{"2":{"762":1}}],["id=21",{"2":{"762":1}}],["id=25",{"2":{"762":1}}],["id=",{"2":{"35":1,"696":1}}],["id=你的spaceid",{"2":{"26":1}}],["id",{"0":{"486":1},"2":{"26":6,"27":2,"28":8,"79":1,"86":1,"90":1,"99":4,"101":3,"108":4,"121":2,"122":2,"138":3,"139":2,"149":1,"152":2,"153":1,"160":1,"161":4,"163":1,"164":3,"166":1,"168":7,"169":1,"175":2,"177":1,"178":7,"199":1,"233":5,"236":2,"239":3,"240":1,"246":2,"247":1,"248":2,"259":7,"260":3,"261":1,"263":1,"266":5,"269":5,"281":10,"288":2,"289":3,"318":2,"327":2,"328":6,"330":1,"478":1,"482":1,"486":5,"489":3,"491":1,"640":2,"662":1,"663":4,"692":2,"719":3,"748":2,"801":1,"807":2,"830":1,"833":3,"839":3,"840":2,"851":1,"856":1,"860":2,"866":1,"895":1}}],["inbrowser",{"2":{"777":1}}],["inbox",{"2":{"629":1,"631":2}}],["inode",{"2":{"748":1}}],["ind",{"2":{"776":1}}],["indices",{"2":{"713":1}}],["indexbuffer",{"2":{"737":1}}],["indexof",{"2":{"168":1}}],["index",{"0":{"777":1},"2":{"65":1,"203":1,"274":5,"290":3,"312":2,"334":1,"335":2,"481":1,"647":6,"649":1,"677":1,"679":1,"734":1,"755":1,"762":3,"776":2,"777":2,"792":3,"806":1,"823":2,"824":1,"828":3,"830":1,"853":1,"925":1}}],["innerstore",{"2":{"706":1}}],["innerheight",{"2":{"696":1,"753":2}}],["innerwidth",{"2":{"696":1,"753":2}}],["inlineedit",{"2":{"647":1,"656":2}}],["inline",{"2":{"646":1,"927":1}}],["invokeskill",{"2":{"887":1}}],["invert",{"2":{"676":1,"677":1,"679":1}}],["inventoryservice",{"2":{"281":3}}],["invalidmoneyerror",{"2":{"281":2}}],["invalid",{"2":{"268":2}}],["invalidation",{"2":{"110":1}}],["invalidatequeries",{"2":{"104":1,"108":1,"110":1,"113":1}}],["injection",{"2":{"886":1}}],["injectrepository",{"2":{"281":1}}],["injectable",{"2":{"281":1}}],["infertoolsetcontext",{"2":{"867":2}}],["infercompleteoutput",{"2":{"867":2}}],["inframes",{"2":{"776":1}}],["infra",{"2":{"343":1}}],["infrastructure",{"2":{"190":1,"280":8,"281":1,"761":1}}],["info",{"2":{"99":1,"662":1,"733":1,"734":1,"748":3,"749":1,"807":1}}],["int4",{"2":{"551":1}}],["integration",{"2":{"881":1}}],["integer",{"2":{"807":3}}],["intensity",{"2":{"740":1}}],["intellectual",{"2":{"360":1}}],["intercept",{"2":{"786":1,"790":1,"797":1,"800":1,"806":2}}],["interceptor",{"2":{"275":4,"792":1}}],["interceptors",{"2":{"274":1,"275":2}}],["intersection",{"2":{"748":1}}],["intersects",{"2":{"748":1}}],["interpolants",{"2":{"734":1}}],["interpolant",{"2":{"734":1,"743":1}}],["interpreter",{"2":{"493":1,"857":1,"868":2}}],["interleavedbufferattribute",{"2":{"734":1}}],["interleavedbuffer",{"2":{"734":1}}],["interop",{"2":{"333":3}}],["internal",{"2":{"320":1,"429":1}}],["internalcode",{"2":{"196":2}}],["interactionmutex",{"2":{"706":1}}],["interaction",{"2":{"412":1,"676":1}}],["interactive",{"2":{"203":1,"734":1}}],["interact",{"2":{"231":1}}],["interval",{"2":{"152":3,"164":2,"178":4,"179":1,"706":1}}],["interfacesprovider",{"2":{"762":1,"769":2}}],["interfaces",{"0":{"719":1,"748":1},"2":{"178":1,"280":3}}],["interface",{"0":{"720":1},"2":{"11":1,"28":1,"149":1,"153":1,"178":2,"229":1,"230":3,"231":2,"233":1,"236":1,"237":2,"239":1,"240":3,"242":1,"243":2,"249":4,"259":1,"260":2,"262":2,"266":2,"267":2,"280":1,"281":2,"288":1,"289":1,"318":1,"319":1,"661":3,"662":1,"663":3,"692":8,"714":1,"719":4,"720":1,"748":10,"769":1,"776":12,"806":5,"839":2,"866":5,"895":13,"927":1}}],["int",{"2":{"187":2}}],["increasequantity",{"2":{"281":1}}],["incremental",{"2":{"46":1,"75":1,"203":2,"212":1}}],["includelayers",{"2":{"776":1}}],["includepartialmessages",{"2":{"490":1}}],["include",{"2":{"203":2,"204":3,"213":1,"214":1,"215":1,"216":1}}],["includestatic",{"2":{"806":1}}],["includes",{"2":{"175":1,"677":1}}],["inactive",{"2":{"104":1,"318":1}}],["inputs",{"2":{"927":2}}],["inputformat",{"2":{"866":1}}],["input",{"2":{"100":1,"262":1,"274":1,"312":3,"449":1,"489":3,"646":1,"662":1,"668":2,"771":1,"839":2,"843":1,"866":2}}],["initelement",{"2":{"776":1}}],["initexpressions",{"2":{"769":1,"776":1}}],["inititems",{"2":{"776":1}}],["initiate",{"2":{"375":1}}],["initialsegment",{"2":{"777":1}}],["initialstate",{"2":{"289":2}}],["initialization",{"2":{"506":1}}],["initialitems",{"2":{"261":3}}],["initialisopen=",{"2":{"106":1}}],["initial",{"2":{"29":1}}],["initmodifierproperties",{"2":{"771":1,"776":1}}],["initloading",{"2":{"663":1}}],["init",{"2":{"29":1,"202":1,"486":1,"574":1,"583":2,"704":1,"705":1,"708":2,"724":1,"748":1,"839":2}}],["instruction",{"2":{"887":1}}],["instancedmesh",{"2":{"734":1,"737":1,"740":1}}],["instancedinterleavedbuffer",{"2":{"734":1}}],["instancedbufferattribute",{"2":{"734":1}}],["instancedbuffergeometry",{"2":{"734":1}}],["instances",{"2":{"683":1}}],["instance",{"2":{"301":4,"661":1,"705":1,"709":2}}],["instanceof",{"2":{"169":1,"171":1,"173":1,"175":1,"231":2,"820":1}}],["installinterceptor",{"2":{"806":1}}],["installplugin",{"2":{"777":1}}],["installcanvasrenderer",{"2":{"706":1}}],["install",{"2":{"25":1,"221":2,"480":1,"567":1,"695":2,"706":24,"711":1,"720":1,"722":1,"751":1,"780":1,"810":1,"871":1,"881":1,"899":3}}],["inspector",{"2":{"734":1}}],["inside",{"2":{"706":1}}],["insight",{"0":{"540":1,"558":1},"1":{"541":1,"542":1,"543":1},"2":{"363":1,"540":1,"553":1,"558":1,"632":1,"636":1,"637":1,"901":1,"902":1,"903":2,"904":1,"905":1}}],["inserttext",{"2":{"806":1}}],["insert",{"2":{"28":1}}],["in",{"0":{"922":1},"2":{"26":1,"97":1,"231":3,"262":1,"286":1,"291":1,"392":1,"398":1,"410":1,"484":1,"550":1,"642":1,"806":1,"807":6,"881":1,"895":1,"920":1,"922":3,"928":2}}],["适配层",{"2":{"734":1}}],["适配器模式",{"0":{"857":1},"2":{"845":1,"851":1}}],["适配器认证",{"2":{"797":1}}],["适配器文档",{"2":{"792":1}}],["适配器编写技能",{"2":{"792":1}}],["适配器共享代码",{"2":{"792":1}}],["适配器验证+测试",{"2":{"792":1}}],["适配器验证",{"2":{"792":1}}],["适配器注册与发现模块",{"2":{"800":1}}],["适配器注册与发现",{"0":{"800":1}}],["适配器注册",{"2":{"792":1}}],["适配器层",{"2":{"790":1,"791":1}}],["适配器命令处理",{"2":{"796":1}}],["适配器命令",{"2":{"790":1}}],["适配器",{"2":{"647":1,"792":6}}],["适量运动",{"2":{"941":1}}],["适量运动等原则做了铺垫",{"2":{"940":1}}],["适量",{"2":{"647":1}}],["适场景",{"2":{"568":1}}],["适应混合工作制",{"0":{"956":1}}],["适应性",{"2":{"402":1}}],["适应不同的业务数据模型",{"2":{"256":1}}],["适用广度",{"2":{"432":1}}],["适用于搜索问答",{"2":{"512":1}}],["适用于解耦类与类之间的循环引用",{"2":{"315":1}}],["适用于某些必须双向通信的复杂业务",{"2":{"315":1}}],["适用于需要根据不同参数批量创建相似对象的场景",{"2":{"300":1}}],["适用于",{"2":{"203":1}}],["适用于服务端间的异步事件通知",{"2":{"142":1}}],["适用于不同的项目场景",{"2":{"109":1}}],["适用与不适用场景",{"0":{"37":1,"41":1,"45":1,"50":1,"55":1}}],["适用场景与最佳实践",{"2":{"928":1}}],["适用场景与不适用场景",{"0":{"31":1}}],["适用场景速查",{"0":{"156":1}}],["适用场景出发",{"2":{"114":1}}],["适用场景以及如何选型",{"2":{"33":1}}],["适用场景",{"0":{"816":1},"2":{"18":1,"31":1,"48":1,"57":1,"134":1,"155":1,"270":1,"287":1,"341":1,"342":3,"365":1,"366":1,"414":1,"435":1,"436":1,"437":1,"438":1,"439":1,"583":1,"585":1,"592":1,"921":1,"923":1,"924":1,"927":1}}],["适合底层",{"2":{"928":1}}],["适合库构建",{"2":{"730":1}}],["适合声明式框架",{"2":{"702":1}}],["适合不需要交互的纯展示图层",{"2":{"680":1}}],["适合中大型团队在已有复杂代码库上进行",{"2":{"567":1}}],["适合中文日常搜索需求",{"2":{"518":1}}],["适合关注数据主权的国内开发者与有合规要求的企业团队",{"2":{"564":1}}],["适合产品原型快速验证",{"2":{"561":1}}],["适合学习参考优秀设计",{"2":{"561":1}}],["适合学术调研",{"2":{"518":1}}],["适合快速原型和在线学习编程",{"2":{"561":1}}],["适合快速调用多模态开源模型做原型验证",{"2":{"523":1}}],["适合人群",{"2":{"561":1,"564":1,"567":1}}],["适合个人开发者快速调用海外模型",{"2":{"523":1}}],["适合个人知识库与团队项目管理中的内容整理与二次创作",{"2":{"515":1}}],["适合开源模型研发与企业私有化微调场景",{"2":{"523":1}}],["适合开发知识库问答",{"2":{"522":1}}],["适合需要多模态输出",{"2":{"522":1}}],["适合需要私有化部署的场景",{"2":{"19":1}}],["适合法律合同分析",{"2":{"522":1}}],["适合高并发轻量对话与内容摘要场景",{"2":{"522":1}}],["适合高并发轻量场景",{"2":{"521":1}}],["适合研究辅助与多模态应用开发",{"2":{"521":1}}],["适合写作",{"2":{"521":1}}],["适合对响应延迟极敏感的实时对话",{"2":{"523":1}}],["适合对数据隐私或成本极度敏感的场景",{"2":{"519":1}}],["适合对英文创作",{"2":{"510":1}}],["适合在线学习",{"2":{"515":1}}],["适合流程梳理",{"2":{"515":1}}],["适合内容创作",{"2":{"512":1}}],["适合内容相对固定",{"2":{"45":1}}],["适合多场景使用",{"2":{"512":1}}],["适合作为通用",{"2":{"512":1}}],["适合日常使用和本地需求",{"2":{"510":1}}],["适合家长理解并转述给孩子",{"2":{"494":1}}],["适合永远是双向的",{"2":{"380":1}}],["适合实验性场景",{"2":{"341":1}}],["适合",{"0":{"92":1},"2":{"567":1}}],["适合场景",{"2":{"75":1}}],["适合那些内容需要更新",{"2":{"50":1}}],["适合非技术人员维护内容",{"2":{"21":1}}],["适合小型项目",{"2":{"19":1}}],["适合用",{"2":{"10":1}}],["+hybridrenderer",{"2":{"761":1}}],["+canvasrenderer",{"2":{"761":1}}],["+svgrendererbase|",{"2":{"761":1}}],["+==========+==================+==================+===========================+",{"2":{"848":1}}],["+===========+====================+=======================+===================+",{"2":{"705":1}}],["+=============+==============================================================+",{"2":{"705":1}}],["+==========================v=================================+",{"2":{"656":2}}],["+==========================+=================================+",{"2":{"656":1}}],["+==================================+==================================+",{"2":{"880":2}}],["+==================================+==========================================+",{"2":{"848":3}}],["+===================================+=======================================+",{"2":{"705":1}}],["+===========================================+===============================+",{"2":{"705":2}}],["+=====================================================================+",{"2":{"880":5}}],["+=====================================================================================+",{"2":{"761":2}}],["+===============================================================================+",{"2":{"733":2}}],["+=============================================================================+",{"2":{"646":1}}],["+===========================================================================+",{"2":{"705":6,"848":4}}],["+=======================================================================+",{"2":{"676":3,"682":2,"683":3,"684":2,"685":2,"686":2}}],["+============================================================+",{"2":{"656":2}}],["+=====================================+=================================+",{"2":{"676":4}}],["+=============================v=============================================+",{"2":{"646":4}}],["+=============================+=============================================+",{"2":{"646":4}}],["+=========+================+================+==================+=============+",{"2":{"848":1}}],["+=",{"2":{"152":1,"166":1,"168":2,"753":2}}],["+",{"0":{"86":1,"89":1,"165":1,"166":1,"628":1,"686":1,"800":1,"864":1,"927":1},"1":{"166":1,"167":1,"168":1,"169":1},"2":{"17":3,"19":2,"20":2,"22":3,"25":1,"28":2,"31":1,"32":1,"53":1,"55":1,"57":1,"58":2,"59":3,"67":1,"71":3,"75":2,"79":2,"92":5,"93":2,"94":1,"97":1,"103":1,"110":2,"134":1,"142":1,"143":1,"149":1,"155":1,"157":1,"160":4,"163":1,"165":1,"166":2,"168":2,"178":1,"180":2,"187":1,"188":1,"204":2,"222":2,"223":1,"227":1,"238":2,"248":1,"274":1,"275":1,"280":3,"281":2,"295":1,"304":1,"305":1,"307":1,"310":1,"315":2,"319":1,"324":1,"342":4,"361":2,"365":1,"367":1,"376":1,"402":2,"408":3,"410":1,"416":1,"427":1,"436":2,"439":1,"442":1,"465":2,"470":2,"471":1,"472":1,"502":2,"515":6,"518":1,"523":7,"540":2,"544":2,"551":2,"553":1,"554":1,"561":2,"562":4,"564":3,"565":8,"568":1,"573":1,"622":4,"628":2,"636":1,"642":3,"643":2,"645":3,"646":85,"647":4,"649":19,"650":18,"652":33,"653":32,"654":9,"655":22,"656":26,"663":1,"672":2,"673":2,"675":1,"676":68,"677":3,"679":46,"680":9,"682":32,"683":3,"684":11,"686":9,"695":1,"697":1,"702":2,"705":60,"706":62,"708":29,"709":10,"711":24,"712":14,"713":23,"714":40,"730":3,"733":121,"734":6,"736":35,"737":20,"739":49,"740":58,"741":29,"742":52,"743":54,"752":1,"760":1,"761":106,"764":21,"765":9,"767":28,"768":29,"769":25,"770":23,"771":37,"786":1,"787":1,"789":1,"790":2,"795":1,"799":3,"800":2,"845":11,"848":140,"849":1,"850":1,"853":13,"856":42,"857":16,"858":25,"859":15,"864":1,"876":1,"877":1,"879":2,"880":116,"881":2,"883":27,"886":22,"887":31,"888":16,"889":25,"890":19,"902":1,"925":1,"927":3,"928":46,"933":1,"934":7,"947":6,"957":2,"959":6,"961":5,"962":2,"963":11}}],["bmi",{"2":{"960":1}}],["bmapview",{"2":{"706":1}}],["bmapmodel",{"2":{"706":1}}],["bmapcoordsys",{"2":{"706":1}}],["bmap",{"2":{"706":1}}],["bc",{"2":{"734":1}}],["bsdf",{"2":{"733":1,"734":2}}],["by",{"2":{"581":2}}],["bypass",{"2":{"482":1}}],["bypasspermissions",{"2":{"482":2}}],["bytefe",{"2":{"346":1}}],["bytesiterable",{"2":{"168":2}}],["b`",{"2":{"451":1}}],["bff",{"2":{"342":2,"344":2}}],["btn`",{"2":{"923":2}}],["btn",{"2":{"340":1,"647":1,"921":2,"923":4,"924":7,"930":1,"933":1}}],["brainstormed",{"2":{"887":1}}],["brainstorm",{"2":{"881":1}}],["brainstorming",{"0":{"888":1},"2":{"880":1,"881":1,"883":1,"884":2,"888":2,"892":1,"895":1,"896":2,"900":1}}],["branching",{"2":{"451":1}}],["branch",{"2":{"451":1,"880":1,"881":1,"883":1,"884":1,"896":2}}],["brandname",{"2":{"247":2}}],["brand",{"2":{"247":7,"925":13}}],["branded",{"0":{"247":1},"2":{"227":1,"250":1}}],["brush",{"2":{"701":1,"705":1,"706":1,"715":2}}],["browsercookie",{"2":{"806":1}}],["browserbridge",{"2":{"786":1,"790":1,"791":1,"792":1,"797":1,"799":2}}],["browser",{"0":{"799":1},"2":{"677":1,"790":2,"791":1,"792":4,"796":1,"800":2,"803":1,"806":2,"809":1,"811":1}}],["bridge",{"2":{"791":1,"792":2,"799":1,"809":1}}],["brighten",{"2":{"677":1,"679":1,"693":1}}],["brightness",{"2":{"676":1,"677":1,"679":1}}],["briefing",{"2":{"470":1}}],["breaking",{"2":{"845":1}}],["break",{"2":{"166":1,"168":4,"172":4,"175":4,"203":1,"833":1}}],["b=a∩b",{"2":{"227":1}}],["b=a∩ba",{"2":{"227":1}}],["bisect",{"2":{"881":1}}],["bilibili",{"2":{"790":1,"792":2,"804":1,"811":1}}],["bi",{"2":{"700":2}}],["bind",{"2":{"743":1}}],["bindgroup",{"2":{"733":1}}],["bindings",{"2":{"733":2,"734":1,"736":1}}],["binaryop",{"2":{"655":1}}],["binstance",{"2":{"315":1}}],["bird",{"2":{"229":4}}],["birthday",{"2":{"184":1}}],["bigint",{"2":{"203":1,"231":2}}],["bem",{"2":{"920":3,"921":2}}],["bez",{"2":{"762":1}}],["beziereaser",{"2":{"762":1}}],["bezier",{"2":{"734":1,"761":1,"762":1,"770":3}}],["bezierfunctions",{"2":{"677":1,"679":1}}],["begin",{"2":{"739":1,"748":1}}],["benchmarks",{"2":{"734":1}}],["bevel",{"2":{"692":1}}],["behavior",{"2":{"482":1,"887":1}}],["before",{"2":{"482":1,"880":1,"881":1,"883":1,"896":1}}],["beforeinteractive",{"2":{"84":1}}],["best",{"2":{"456":1,"881":1}}],["bertrand",{"2":{"392":2}}],["beta",{"2":{"331":1}}],["be",{"2":{"281":2}}],["bearer",{"2":{"160":1,"166":1,"169":1,"342":1,"819":1,"857":1}}],["b",{"0":{"113":1},"2":{"59":1,"88":1,"101":1,"104":2,"107":2,"113":1,"129":1,"187":3,"188":2,"223":4,"227":6,"229":2,"237":3,"238":9,"242":19,"243":4,"244":6,"250":10,"267":2,"295":8,"304":8,"307":8,"310":4,"314":3,"315":44,"319":4,"321":2,"324":2,"329":1,"345":1,"366":1,"394":1,"414":1,"417":1,"683":1,"692":1,"860":1,"881":1,"908":1,"928":1}}],["bg",{"2":{"28":1,"921":2,"925":4,"927":9,"928":1,"933":2}}],["bump",{"2":{"880":1,"881":2}}],["buflength",{"2":{"833":1}}],["buffer=undefined",{"2":{"833":1}}],["bufferattributenode",{"2":{"734":1}}],["bufferattribute",{"2":{"734":1,"737":1,"748":1}}],["buffergeometryloader",{"2":{"734":1}}],["buffergeometry",{"2":{"730":1,"733":1,"734":1,"737":2,"748":1}}],["buffer",{"2":{"166":5,"734":2,"737":1,"748":1,"833":7}}],["buffering",{"2":{"119":2,"177":1}}],["butt",{"2":{"692":1}}],["buttonhtmlattributes",{"2":{"927":1}}],["buttonvariants>",{"2":{"927":1}}],["buttonvariants",{"2":{"927":2}}],["buttonclass",{"2":{"923":2}}],["button`",{"2":{"922":1}}],["buttonprops",{"2":{"249":2,"927":2}}],["button>",{"2":{"28":2,"923":1,"924":1,"925":1,"927":2}}],["button",{"2":{"28":2,"203":2,"249":1,"274":5,"290":1,"291":1,"312":3,"313":1,"645":1,"646":1,"921":1,"922":2,"923":9,"924":1,"925":3,"927":4,"934":1}}],["bubbling",{"2":{"682":1,"684":1}}],["bunny",{"2":{"677":1}}],["bunnies",{"2":{"677":1}}],["bundler",{"2":{"203":2,"204":1}}],["bundle",{"2":{"34":1,"35":2,"37":1,"57":1,"65":1,"71":1,"97":1,"110":1,"112":1,"922":1}}],["business",{"2":{"363":1}}],["bus",{"2":{"280":1,"315":3}}],["builtin",{"2":{"796":1}}],["built",{"2":{"97":1,"806":1}}],["buildelementparenting",{"2":{"768":1,"776":1}}],["builder",{"0":{"463":1,"464":1},"2":{"440":1,"457":2,"458":2,"459":3,"463":2,"464":3,"465":1,"466":2,"646":1,"647":2,"656":1,"741":3,"748":3,"902":1}}],["builders",{"2":{"335":1}}],["buildallitems",{"2":{"768":1,"776":1}}],["builditem",{"2":{"768":1,"776":1}}],["build",{"0":{"343":1,"461":1},"2":{"43":2,"57":8,"59":1,"62":1,"65":1,"87":1,"203":1,"216":4,"290":1,"458":2,"572":1,"595":1,"667":1,"677":1,"697":1,"706":5,"733":1,"734":2,"736":1,"752":2,"755":1,"762":4,"792":1,"871":1}}],["bug",{"0":{"484":1,"893":1},"2":{"6":1,"198":1,"203":1,"254":1,"255":1,"331":2,"382":1,"386":2,"405":1,"418":1,"451":3,"455":2,"484":1,"531":1,"564":1,"567":3,"568":1,"883":1,"893":1,"959":1}}],["blenddst",{"2":{"748":1}}],["blendsrc",{"2":{"748":1}}],["blendmodes",{"2":{"762":1}}],["blendmode",{"2":{"734":1}}],["blendingdstfactor",{"2":{"748":1}}],["blendingsrcfactor",{"2":{"748":1}}],["blending",{"2":{"734":1,"742":1,"748":2}}],["blank",{"2":{"706":1}}],["black",{"2":{"696":1}}],["blur",{"2":{"676":1,"677":2,"679":1,"693":1}}],["blue",{"2":{"27":1,"28":2,"483":1,"925":3,"927":3,"929":2,"933":1}}],["bloat",{"2":{"757":1,"771":1}}],["blob>",{"2":{"692":1}}],["blocked",{"2":{"889":1}}],["blockindex",{"2":{"712":1}}],["block",{"2":{"373":1,"488":3,"712":1,"920":1}}],["blogpage",{"2":{"81":1}}],["blogpost",{"2":{"26":3}}],["blog",{"2":{"25":2,"29":3,"77":2,"79":4,"81":1,"82":1,"83":1,"904":1}}],["bower",{"2":{"762":2}}],["bone",{"2":{"734":1}}],["box3",{"2":{"734":1}}],["box2",{"2":{"734":1}}],["boxgeometry",{"2":{"734":1,"753":1}}],["boxplotview",{"2":{"706":1}}],["boxplotseries",{"2":{"706":1}}],["boxplot",{"2":{"706":1}}],["boundingrect",{"2":{"714":1}}],["bounded",{"2":{"277":1,"393":1}}],["bolt",{"2":{"559":1,"561":1,"562":2}}],["bold",{"2":{"27":2}}],["bot",{"2":{"512":2}}],["bottom",{"2":{"244":1}}],["bool",{"2":{"740":2}}],["boolean>",{"2":{"663":1,"806":1}}],["boolean",{"2":{"194":1,"229":1,"234":1,"243":3,"248":1,"249":2,"259":2,"260":1,"261":1,"281":1,"482":1,"661":7,"662":4,"663":4,"682":1,"692":31,"693":1,"719":8,"734":1,"748":22,"776":11,"777":11,"806":11,"807":3,"832":1,"839":1,"895":2,"924":1}}],["bootstrap",{"0":{"886":1},"2":{"290":2,"879":1,"880":1,"881":2}}],["bob",{"2":{"259":4,"266":2,"267":2}}],["bodymovin",{"2":{"755":2,"756":1,"762":2,"780":1}}],["body",{"0":{"449":1},"2":{"108":1,"160":3,"166":10,"169":2,"179":4,"640":1,"649":2,"661":2,"668":2,"753":1,"801":1,"819":1,"895":1}}],["border",{"2":{"27":1,"28":3,"647":1,"921":2,"922":2,"923":1,"924":2,"925":1,"927":2}}],["banner",{"2":{"762":2}}],["batchedmesh",{"2":{"734":1,"740":1}}],["batchdraw",{"2":{"680":1,"682":1,"692":2}}],["babelrc",{"2":{"762":1}}],["babel",{"2":{"642":1,"762":1}}],["bad",{"2":{"550":1,"807":1}}],["barchart",{"2":{"725":2}}],["bargrid",{"2":{"706":1}}],["barview",{"2":{"706":1}}],["barseries",{"2":{"706":1}}],["bar",{"2":{"333":1,"706":2,"724":1}}],["barrel",{"2":{"312":1}}],["bark",{"2":{"231":5}}],["backside",{"2":{"742":1,"748":1}}],["backwardcompat",{"2":{"706":1}}],["backgroundcolor",{"2":{"719":1}}],["background",{"2":{"647":1,"733":1,"734":1,"792":2,"921":2,"922":1,"923":2,"924":2}}],["backend",{"2":{"280":1,"281":6,"342":1,"344":1,"670":2,"677":2,"729":1,"732":2,"733":3,"734":1,"736":3,"737":1,"739":5,"748":1}}],["backoffdelays",{"2":{"149":3}}],["backoffpolling",{"2":{"149":1}}],["backoff",{"2":{"145":1,"155":1}}],["baseclasses",{"2":{"925":3}}],["baseconfig",{"2":{"243":2}}],["basepage",{"2":{"792":1}}],["baseprops",{"2":{"249":3}}],["baserenderer",{"2":{"762":1,"765":1,"768":2}}],["basetextelement",{"2":{"762":1}}],["baseevent",{"2":{"762":1}}],["baseelement",{"2":{"761":1,"762":1,"765":2}}],["baseentity",{"2":{"248":2}}],["based",{"2":{"397":1,"881":2}}],["baseapi",{"2":{"280":1}}],["base",{"0":{"212":1},"2":{"203":1,"211":1,"213":1,"214":1,"215":1,"216":4,"230":2,"243":7,"248":4,"280":1,"325":1,"481":2,"523":1,"646":1,"647":2,"761":3,"762":1,"768":2,"792":1,"857":1}}],["baseurl",{"2":{"175":6,"203":3,"216":1,"857":2}}],["base64",{"2":{"84":1,"124":1,"127":1,"719":1}}],["basic",{"2":{"79":2,"477":1}}],["bashgemini",{"2":{"899":1}}],["bashgit",{"2":{"29":1}}],["bashpnpm",{"2":{"480":1,"871":1}}],["bashnpm",{"2":{"224":1,"810":1}}],["bash",{"2":{"25":1,"216":1,"221":1,"411":1,"442":2,"470":3,"472":2,"478":1,"481":1,"591":1,"594":2,"595":2,"666":1,"667":1,"695":1,"751":1,"752":1,"780":1,"811":1,"868":1,"880":1,"883":1,"886":1,"898":1,"899":2}}],["baas",{"0":{"20":1},"2":{"16":1,"17":1,"32":1}}],["文学与小说",{"2":{"947":1}}],["文字层",{"2":{"765":1}}],["文字选择器",{"2":{"770":1}}],["文字选择器属性",{"2":{"762":1}}],["文字选择器装饰器",{"2":{"762":1}}],["文字属性",{"2":{"762":1}}],["文字属性动画",{"2":{"762":1}}],["文字动画属性",{"2":{"762":1}}],["文字动画数据属性",{"2":{"762":1}}],["文字对象代理",{"2":{"762":1}}],["文字元素基类",{"2":{"762":1}}],["文字元素",{"2":{"762":4}}],["文字装饰",{"2":{"677":1}}],["文明优越论",{"2":{"604":1}}],["文库联动",{"2":{"518":1}}],["文心大模型",{"2":{"518":1}}],["文心一言",{"2":{"512":2}}],["文",{"2":{"511":1,"521":1}}],["文案润色",{"2":{"415":1}}],["文章下载",{"2":{"792":1}}],["文章提取",{"2":{"792":1}}],["文章",{"2":{"792":1}}],["文章解读",{"2":{"628":1}}],["文章和视频内容",{"2":{"515":1}}],["文章给出的最终答案是",{"2":{"362":1}}],["文章分享",{"2":{"346":1}}],["文章正文",{"2":{"67":1}}],["文章正文等固定内容划入静态外壳",{"2":{"59":1}}],["文章正文框架",{"2":{"52":1}}],["文章详情页",{"2":{"27":1}}],["文本生成",{"2":{"867":1}}],["文本生成是",{"2":{"856":1}}],["文本格式化",{"2":{"706":1}}],["文本渲染",{"2":{"677":1}}],["文本替换时忽略的",{"2":{"662":1}}],["文本模型",{"2":{"523":1}}],["文本理解与推理能力优秀",{"2":{"512":1}}],["文本对话中最主流的",{"2":{"143":1}}],["文本对话",{"2":{"142":1}}],["文本大模型",{"2":{"136":1}}],["文本流",{"2":{"124":1}}],["文本编码限制",{"2":{"124":1}}],["文本",{"2":{"26":1,"410":1,"488":1,"512":1,"521":1,"522":2,"523":2,"849":1,"854":1}}],["文档标题",{"2":{"895":1}}],["文档审查系统测试",{"2":{"881":1}}],["文档工具",{"2":{"787":1}}],["文档解析",{"2":{"647":1}}],["文档在线预览",{"2":{"647":1}}],["文档预览",{"2":{"641":1}}],["文档和生态最为成熟",{"2":{"521":1}}],["文档权威",{"2":{"520":1}}],["文档协作",{"2":{"515":1}}],["文档生成资源",{"2":{"677":1}}],["文档生成",{"2":{"515":2,"677":1,"734":1}}],["文档处理",{"2":{"512":2}}],["文档分析",{"2":{"511":1,"512":1}}],["文档整理",{"2":{"462":1}}],["文档与资源生成",{"0":{"453":1}}],["文档变更",{"2":{"451":1}}],["文档中获取最新上下文",{"2":{"411":1}}],["文档完善",{"2":{"287":1,"522":2}}],["文档站点盲目使用",{"2":{"67":1}}],["文档站是最纯粹的",{"2":{"66":1}}],["文档页面",{"2":{"65":1}}],["文档",{"2":{"18":1,"31":1,"75":1,"92":1,"342":1,"451":1,"478":1,"515":2,"646":1}}],["文档类网站",{"2":{"16":1}}],["文件间反复横跳的低效",{"2":{"930":1}}],["文件之间反复横跳",{"2":{"925":1}}],["文件还是普通的",{"2":{"923":1}}],["文件定义的行为指令集",{"2":{"884":1}}],["文件引用模式",{"2":{"881":1}}],["文件获取补全信息",{"2":{"795":1}}],["文件加载",{"2":{"734":1}}],["文件解包",{"2":{"647":1}}],["文件解析",{"2":{"518":1}}],["文件读取与渲染",{"2":{"647":1}}],["文件与主配置的分离设计",{"2":{"597":1}}],["文件中编写",{"2":{"922":1}}],["文件中的技术",{"2":{"922":1}}],["文件中的内容加载到环境变量中",{"2":{"481":1,"490":1}}],["文件中",{"2":{"591":1,"922":1,"927":1}}],["文件时生效",{"2":{"576":1}}],["文件会自动变成一个可调用的命令",{"2":{"579":1}}],["文件会与",{"2":{"575":1}}],["文件会放在此目录",{"2":{"203":1}}],["文件快速解析",{"2":{"518":1}}],["文件分析",{"2":{"512":1}}],["文件输入",{"2":{"511":1}}],["文件配置建议",{"2":{"481":1}}],["文件示意如下",{"2":{"451":2}}],["文件夹实现配置与扩展",{"2":{"570":1}}],["文件夹开始",{"2":{"569":1}}],["文件夹名称必须使用",{"2":{"442":1}}],["文件夹结构拆解",{"0":{"442":1}}],["文件优先的记忆系统与心跳触发的被动唤醒机制相结合",{"2":{"419":1}}],["文件模块",{"2":{"334":1}}],["文件级隔离",{"2":{"320":1}}],["文件和所有",{"2":{"203":1}}],["文件包含配置",{"2":{"203":1}}],["文件的具体修改内容",{"2":{"581":1}}],["文件的配置",{"2":{"209":1}}],["文件的类型检查",{"2":{"203":1}}],["文件的引用",{"2":{"203":1}}],["文件目录",{"2":{"203":1}}],["文件集中管理待编译文件路径",{"2":{"202":1}}],["文件上传",{"2":{"131":1}}],["文件名",{"2":{"78":1}}],["文件路径",{"2":{"77":1}}],["文件系统及人类现有通讯工具的深度集成程度",{"2":{"419":1}}],["文件系统即路由系统",{"0":{"76":1},"1":{"77":1,"78":1,"79":1}}],["文件系统路由",{"2":{"71":1,"92":1}}],["文件位置",{"2":{"65":1}}],["文件本质上是一个",{"2":{"65":1}}],["文件作为可读模块",{"2":{"203":1}}],["文件作为模块",{"2":{"203":1}}],["文件作为",{"2":{"65":1}}],["文件并返回",{"2":{"63":1}}],["文件并输出到",{"2":{"43":1}}],["文件写入",{"2":{"62":1}}],["文件对应一个路由页面",{"2":{"62":1}}],["文件形式存在于",{"2":{"62":1}}],["文件",{"2":{"14":1,"26":1,"42":1,"43":1,"62":1,"65":1,"203":6,"205":1,"223":1,"345":1,"448":1,"481":1,"518":1,"570":1,"581":1,"585":1,"636":1,"643":1,"647":2,"677":2,"699":1,"755":1,"762":1,"781":1,"792":1,"845":1,"850":1,"921":1,"923":1,"927":1,"928":1,"930":1,"934":1}}],["评论列表",{"2":{"52":1}}],["评论区",{"2":{"27":1}}],["评论",{"2":{"16":1,"67":1}}],["评估驱动开发",{"0":{"550":1}}],["评估执行效果",{"2":{"427":1}}],["评估其质量",{"2":{"426":1}}],["评估维度",{"2":{"110":1}}],["评估",{"2":{"2":1,"426":1}}],["预设基础类",{"2":{"925":1}}],["预设了成百上千个底层",{"2":{"925":1}}],["预设配置",{"2":{"647":1}}],["预导航",{"2":{"800":1}}],["预计算环境贴图",{"2":{"734":1}}],["预置网站适配器",{"2":{"786":1}}],["预置主题文件",{"2":{"706":1}}],["预置了经过",{"2":{"478":1}}],["预处理",{"2":{"932":1}}],["预处理器从",{"2":{"931":1}}],["预处理器是一种扩展了",{"2":{"921":1}}],["预处理器",{"0":{"921":1},"2":{"928":2}}],["预处理辅助",{"2":{"706":1}}],["预处理管道",{"2":{"706":1}}],["预览渲染",{"2":{"656":1}}],["预览引擎",{"2":{"647":2}}],["预型",{"2":{"600":1}}],["预训练已不再是唯一解",{"2":{"551":1}}],["预算极有限",{"2":{"523":1}}],["预编排模式",{"0":{"428":1},"1":{"429":1,"430":1,"431":1}}],["预期效果",{"2":{"418":1}}],["预测失败",{"2":{"369":1}}],["预测",{"0":{"369":1}}],["预留库存",{"2":{"281":1}}],["预留占位空间防止布局抖动",{"2":{"84":1}}],["预先识别",{"2":{"876":1}}],["预先在服务端注册一个回调",{"2":{"131":1}}],["预先生成好",{"2":{"42":1}}],["预生成的静态文件",{"2":{"75":1}}],["预渲染为",{"2":{"87":1}}],["预渲染为静态",{"2":{"16":1,"18":1}}],["预渲染白名单",{"2":{"59":1}}],["预渲染所有可能的文章页面",{"2":{"27":1}}],["预渲染单篇文章",{"2":{"27":1}}],["预渲染静态页面",{"2":{"27":1,"32":1}}],["预渲染博客页面",{"0":{"27":1}}],["预渲染时使用",{"2":{"26":1}}],["预渲染模式",{"2":{"25":1}}],["预渲染",{"2":{"23":1}}],["预构建静态资产",{"2":{"14":1}}],["正因如此",{"2":{"928":1}}],["正文",{"2":{"895":1}}],["正常工作时间处理重要且紧急的事",{"2":{"952":1}}],["正常消息接收流程",{"0":{"835":1}}],["正常完成",{"2":{"832":1}}],["正交投影相机",{"2":{"734":1}}],["正多边形",{"2":{"677":1}}],["正则",{"2":{"652":1}}],["正让用户抓狂",{"2":{"556":1}}],["正逐渐演变为",{"2":{"527":1}}],["正巧大团队自研的零代码",{"2":{"496":1}}],["正在通过以下几种方式来将减肥这件小事继续",{"2":{"964":1}}],["正在成为最高级的编程语言",{"2":{"530":1}}],["正在调用工具",{"2":{"484":1}}],["正在从根本上松动这套分工体系的根基",{"2":{"457":1}}],["正在批量生产海量的",{"2":{"359":1}}],["正在迅速贬值",{"2":{"357":1}}],["正如项飙所倡导的",{"2":{"604":1}}],["正如报告中所揭示的那样",{"2":{"539":1}}],["正如近期在实践中推崇的",{"2":{"532":1}}],["正如在背景中提到的",{"2":{"509":1}}],["正如综述中所描述的",{"2":{"438":1}}],["正如流程图所示",{"2":{"431":1}}],["正如保罗",{"2":{"362":1}}],["正如",{"2":{"354":1,"535":1}}],["正向增强回路",{"2":{"386":1}}],["正向",{"2":{"308":1}}],["正式发布",{"2":{"307":1}}],["正例",{"0":{"185":1,"188":1,"191":1,"194":1,"197":1},"2":{"182":1}}],["正确决策应",{"2":{"393":1}}],["正确类别",{"2":{"360":1}}],["正确使用",{"2":{"265":1,"267":1,"268":1,"269":1}}],["正确思路",{"2":{"199":1}}],["正确",{"2":{"74":1,"532":1}}],["正确做法是抽离",{"2":{"933":1}}],["正确做法是",{"2":{"200":1}}],["正确做法",{"2":{"74":1}}],["正确的做法是在渲染期间动态计算它们",{"2":{"5":1}}],["正是基于客观考虑",{"2":{"942":1}}],["正是当前最高效的独立开发或小团队敏捷开发范式",{"2":{"540":1}}],["正是模型面对团队私有知识时的",{"2":{"536":1}}],["正是我们将",{"2":{"476":1}}],["正是那把开启规模化个性化生产大门的钥匙",{"2":{"420":1}}],["正是这类复杂任务的典型代表",{"2":{"467":1}}],["正是这个黑盒子决定了事物发展的客观规律",{"2":{"382":1}}],["正是这样一个典型范例",{"2":{"60":1}}],["正是技术积累终于跨过了",{"2":{"363":1}}],["正是因为我们通过一个特殊字段来",{"2":{"230":1}}],["正是为解决这一问题而生",{"2":{"575":1}}],["正是为了解决上述问题",{"2":{"167":1}}],["正是为此类场景量身打造",{"2":{"136":1}}],["正是",{"2":{"160":1,"597":1}}],["正是由于这种关系",{"2":{"160":1}}],["正是通过流式",{"2":{"118":1}}],["正是本文开篇所提出的核心公式",{"2":{"67":1}}],["正解",{"2":{"16":3}}],["✅",{"2":{"16":3,"57":4,"58":11,"229":3,"233":2,"236":1,"238":2,"247":1,"249":2,"253":5,"327":1,"328":1,"448":1,"501":2,"502":1,"515":21,"523":3,"928":2}}],["❌",{"2":{"16":3,"57":1,"58":4,"74":1,"229":2,"233":2,"237":1,"238":1,"247":1,"253":3,"327":1,"328":1,"448":1,"502":3,"515":3,"523":4}}],["关系图",{"2":{"706":1}}],["关联的设计文档路径",{"2":{"895":1}}],["关联的",{"2":{"661":1}}],["关联与协作",{"0":{"160":1}}],["关闭连接",{"2":{"801":1}}],["关闭时",{"2":{"489":1}}],["关闭对话后上下文即刻失效",{"2":{"435":1}}],["关闭",{"2":{"177":1,"801":1,"807":1}}],["关注并优化体重秤日常的",{"2":{"964":1}}],["关注完整性和正确性",{"2":{"889":1}}],["关注功能的按时上线",{"2":{"556":1}}],["关注架构的健壮性",{"2":{"555":1}}],["关注具体的语言和语法细节",{"2":{"555":1}}],["关注点",{"2":{"553":1}}],["关注点分离",{"2":{"2":1,"12":1}}],["关注的是服务器负载",{"2":{"537":1}}],["关注的是如何让数据",{"2":{"159":1}}],["关注的是如何把数据",{"2":{"159":1}}],["关注外部环境与政策法规",{"2":{"400":1}}],["关注层面",{"2":{"226":1}}],["关于健身减肥方面的实践",{"2":{"942":1}}],["关于本站",{"0":{"903":1}}],["关于缓存",{"2":{"334":1}}],["关于",{"0":{"135":1},"1":{"136":1,"137":1,"138":1,"139":1,"140":1},"2":{"588":1}}],["关键点",{"2":{"942":2}}],["关键点说明",{"0":{"514":1,"517":1,"561":1,"564":1,"567":1}}],["关键要点",{"2":{"926":1}}],["关键文件数",{"2":{"872":1}}],["关键目录",{"0":{"872":1}}],["关键端点",{"2":{"807":1}}],["关键技术点",{"2":{"799":1}}],["关键选型决策",{"2":{"787":1}}],["关键设计模式",{"2":{"761":1}}],["关键帧数据",{"2":{"776":1}}],["关键帧数据流",{"2":{"770":1}}],["关键帧数据容器",{"2":{"734":1}}],["关键帧",{"2":{"765":1,"776":1}}],["关键帧插值引擎",{"2":{"762":1}}],["关键帧插值",{"2":{"761":1}}],["关键帧轨道",{"2":{"743":1}}],["关键帧轨道基类",{"2":{"734":1}}],["关键帧动画系统",{"2":{"734":1,"743":1}}],["关键类型定义",{"2":{"749":1}}],["关键类",{"2":{"733":1}}],["关键视觉任务包括",{"2":{"715":1}}],["关键功能",{"2":{"700":1}}],["关键数据流程",{"0":{"657":1,"687":1,"716":1,"744":1,"772":1,"802":1,"862":1,"891":1},"1":{"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"688":1,"689":1,"690":1,"717":1,"745":1,"746":1,"773":1,"774":1,"803":1,"804":1,"863":1,"864":1,"892":1,"893":1}}],["关键反哺机制",{"2":{"628":1}}],["关键的技术选型",{"2":{"572":1}}],["关键问题",{"2":{"519":1}}],["关键发现",{"2":{"472":1}}],["关键会议或拍板时缺乏动态数据支撑",{"2":{"465":1}}],["关键是找到你自己的交叉点",{"2":{"462":1}}],["关键词",{"2":{"459":3}}],["关键在于怎么读",{"2":{"606":1}}],["关键在于准确定义问题并剥离噪音",{"2":{"459":1}}],["关键在于一致性",{"2":{"361":1}}],["关键特性",{"2":{"304":1,"305":1,"307":1}}],["关键洞察",{"2":{"227":1}}],["关键字重命名导入",{"2":{"310":1}}],["关键字定义约束",{"2":{"264":1}}],["关键字添加约束",{"2":{"263":1}}],["关键字",{"2":{"203":1,"307":1}}],["关键逻辑",{"2":{"185":1,"191":1,"197":1}}],["关键前提",{"2":{"181":1}}],["关键实践",{"2":{"74":1}}],["关键",{"2":{"69":1}}],["关键差异点分析与实践选择指南",{"0":{"56":1},"1":{"57":1,"58":1,"59":1}}],["关键误区澄清",{"0":{"16":1}}],["扩展注册清单",{"2":{"881":1}}],["扩展多轮对话测试",{"2":{"881":1}}],["扩展连接",{"2":{"801":1}}],["扩展依赖",{"2":{"792":1}}],["扩展通信",{"2":{"791":1,"792":1}}],["扩展包",{"2":{"762":1}}],["扩展生态",{"2":{"733":1}}],["扩展安装注册器",{"2":{"720":1}}],["扩展安装器类型",{"2":{"720":1}}],["扩展安装器契约",{"0":{"720":1}}],["扩展源码",{"2":{"706":1}}],["扩展系统",{"0":{"711":1},"2":{"706":1}}],["扩展工具与曲线系统",{"2":{"734":1}}],["扩展工具",{"2":{"647":1}}],["扩展和",{"2":{"509":1}}],["扩展你的工具栈",{"2":{"463":1}}],["扩展行动边界",{"2":{"412":1}}],["扩展名或在",{"2":{"308":1}}],["扩展",{"2":{"270":1,"342":1,"704":1,"706":1,"708":1,"734":2,"786":1,"792":1,"809":1}}],["扩展第三方类型",{"2":{"240":1}}],["扩展性",{"2":{"15":1,"292":1}}],["扩容",{"2":{"15":1}}],["低脂牛奶燕麦",{"2":{"963":2}}],["低脂牛奶燕麦玉米",{"2":{"963":1}}],["低代码编辑器",{"2":{"656":1}}],["低代码平台的核心渲染引擎",{"2":{"640":1}}],["低价高质量",{"2":{"523":1}}],["低耦合",{"2":{"297":1,"303":1,"328":1}}],["低耦合的自治单元",{"2":{"11":1}}],["低实时要求",{"2":{"155":1}}],["低频状态同步",{"2":{"155":1}}],["低频上报",{"2":{"123":1}}],["低连接开销",{"2":{"140":1}}],["低延迟地传输数据",{"2":{"125":1}}],["低成本高价值",{"2":{"556":1,"902":1}}],["低成本私有化部署",{"2":{"512":1}}],["低成本",{"2":{"15":1}}],["低",{"2":{"15":1,"57":1,"155":3,"465":2,"522":4,"928":1}}],["高斯模糊滤镜",{"2":{"762":1}}],["高精度计时器",{"2":{"734":1}}],["高精生图",{"2":{"142":1}}],["高跟鞋",{"2":{"724":1}}],["高亮",{"2":{"706":1}}],["高价值",{"0":{"528":1}}],["高风险操作",{"2":{"527":1}}],["高并发轻量对话",{"2":{"522":1}}],["高并发选退避轮询",{"2":{"155":1}}],["高速低成本",{"2":{"521":1}}],["高阶杠杆",{"2":{"491":1}}],["高阶组件的设计中都有广泛应用",{"2":{"263":1}}],["高可用的工作流",{"2":{"434":1}}],["高效运行的最终产物",{"2":{"932":1}}],["高效的",{"2":{"702":1}}],["高效重试",{"2":{"430":1}}],["高效产出",{"2":{"387":1}}],["高留存用户恰好用了这个功能",{"2":{"366":1}}],["高杠杆解",{"2":{"365":1}}],["高度一致性",{"2":{"925":1}}],["高度自主",{"2":{"568":1}}],["高度焦虑",{"2":{"465":1}}],["高度烦躁",{"2":{"465":1}}],["高度依赖传统",{"2":{"342":1}}],["高度抽象",{"2":{"110":1}}],["高性能",{"2":{"757":1}}],["高性能渲染",{"2":{"756":1}}],["高性能像素渲染",{"2":{"755":1}}],["高性能实时渲染",{"2":{"755":1}}],["高性能互动图形的工程化需求",{"2":{"670":1}}],["高性能构建",{"2":{"343":1}}],["高性能的",{"2":{"342":1}}],["高性能替代者",{"2":{"341":1}}],["高耦合设计",{"2":{"328":1}}],["高内聚",{"2":{"297":1,"303":1,"328":1}}],["高内聚低耦合",{"0":{"328":1},"2":{"283":1}}],["高级材质",{"2":{"734":1}}],["高级曲线",{"2":{"734":1}}],["高级数学",{"2":{"734":1}}],["高级3d对象",{"2":{"734":1}}],["高级着色器",{"2":{"734":1}}],["高级加载器",{"2":{"733":1,"734":1}}],["高级学习",{"2":{"406":1}}],["高级咨询",{"2":{"406":1}}],["高级特性",{"0":{"225":1}}],["高级查询",{"0":{"107":1}}],["高实时性体验",{"2":{"155":1}}],["高实时要求",{"2":{"155":1}}],["高吞吐量的特性",{"2":{"140":1}}],["高频组装引擎",{"2":{"928":1}}],["高频",{"2":{"465":4}}],["高频状态同步",{"2":{"155":1}}],["高频双向",{"2":{"143":1}}],["高频下发",{"2":{"123":1}}],["高频读取",{"2":{"111":1}}],["高互动的终极方案",{"0":{"128":1}}],["高互动",{"2":{"115":1}}],["高德",{"2":{"20":1}}],["高",{"2":{"15":2,"57":1,"155":1,"521":2,"928":1,"934":1}}],["高质量代码审查",{"2":{"511":1,"521":1}}],["高质量",{"2":{"1":1,"509":1}}],["负向增强回路",{"2":{"386":1}}],["负载均衡的超时限制",{"2":{"137":1}}],["负载均衡",{"2":{"15":1,"143":1}}],["负责覆写",{"2":{"934":1}}],["负责页面布局",{"2":{"934":1}}],["负责标准化的原子级布局",{"2":{"928":1}}],["负责创建各种模型实例",{"2":{"854":1}}],["负责创建复杂对象或聚合",{"2":{"278":1}}],["负责提示词处理",{"2":{"847":1}}],["负责该图层的逐帧渲染",{"2":{"765":1}}],["负责管理图层",{"2":{"765":1}}],["负责高层次的渲染流程编排",{"2":{"739":1}}],["负责渲染流程编排",{"2":{"736":1}}],["负责渲染",{"2":{"709":1}}],["负责组件绘制",{"2":{"704":1}}],["负责图表绘制",{"2":{"704":1}}],["负责打造和打磨基础模型",{"2":{"551":1}}],["负责填充实现细节",{"2":{"527":1}}],["负责排版",{"2":{"515":1}}],["负责搜集海量原始数据的",{"2":{"415":1}}],["负责逐一高效执行",{"2":{"414":1}}],["负责全局请求头注入",{"2":{"342":1}}],["负责与数据库或外部",{"2":{"336":1}}],["负责解析请求",{"2":{"336":1}}],["负责数据库交互",{"2":{"275":1}}],["负责数据获取",{"2":{"2":1}}],["负责处理",{"2":{"275":1}}],["负责将非标准",{"2":{"928":1}}],["负责将动画数据绑定到具体对象属性",{"2":{"743":1}}],["负责将数据值转换为画布上的像素坐标",{"2":{"714":1}}],["负责将底层分散的微服务",{"2":{"342":1}}],["负责将",{"2":{"202":1,"709":1}}],["负责将源码",{"2":{"18":1}}],["负责去后台",{"2":{"104":1}}],["负责",{"2":{"11":1,"274":1,"415":2,"416":1,"591":1}}],["负责实现代码",{"2":{"8":1}}],["天至少减重",{"2":{"963":1,"964":1}}],["天地不仁",{"2":{"958":1}}],["天花板的突破需要我们根据实际情况来持续丰富",{"2":{"910":1}}],["天花板",{"2":{"910":1}}],["天空盒",{"2":{"734":1}}],["天空",{"2":{"734":2}}],["天",{"2":{"419":1,"505":1}}],["天赋",{"2":{"363":1}}],["天生与",{"2":{"561":1}}],["天生适合",{"2":{"561":1}}],["天生支持复杂组合查询与确定性哈希",{"2":{"110":1}}],["天生契合",{"2":{"110":1}}],["天生一对",{"0":{"11":1}}],["天然适合库打包",{"2":{"758":1}}],["天然适配浏览器",{"2":{"307":1}}],["天然融入现代",{"2":{"342":1}}],["天然细粒度更新",{"2":{"341":1}}],["天然隔离",{"2":{"287":1}}],["天然契合",{"2":{"110":1}}],["天然互补",{"2":{"90":1}}],["天然支持动态下发和实时修改",{"2":{"641":1}}],["天然支持",{"2":{"15":1}}],["依旧把自己的",{"2":{"958":1}}],["依托",{"2":{"464":1}}],["依靠",{"2":{"315":1}}],["依然能保持航向的精准",{"2":{"431":1}}],["依然能快速判断",{"2":{"363":1}}],["依然可以通过重新定义产品边界和极致的工程打磨撕开缺口",{"2":{"356":1}}],["依然默默支撑着无数生图",{"2":{"144":1}}],["依然是软件工程中那道最坚固",{"2":{"539":1}}],["依然是",{"2":{"144":1,"924":1}}],["依然始于人类心智对数据流",{"2":{"1":1}}],["依次下发",{"2":{"117":1}}],["依赖策略",{"2":{"877":1}}],["依赖锁定文件",{"2":{"823":1}}],["依赖底层桥接",{"2":{"799":1}}],["依赖核心api",{"2":{"733":1}}],["依赖关系",{"0":{"825":1},"1":{"826":1,"827":1}}],["依赖关系网络与领域知识建模",{"2":{"536":1}}],["依赖关系混乱",{"2":{"297":1}}],["依赖哪些工具能实现",{"2":{"447":1}}],["依赖项",{"2":{"447":1}}],["依赖下一轮",{"2":{"432":1}}],["依赖人类持续的指令输入",{"2":{"419":1}}],["依赖工程师文化和产品敏锐度",{"2":{"387":1}}],["依赖运行时加载器",{"2":{"320":1}}],["依赖注入",{"2":{"315":1,"344":1}}],["依赖前置",{"2":{"305":1}}],["依赖混乱的深坑",{"2":{"303":1}}],["依赖类型推断",{"2":{"263":1}}],["依赖倒置",{"2":{"255":1}}],["依赖目录",{"2":{"203":1}}],["依赖管理",{"0":{"192":1},"1":{"193":1,"194":1},"2":{"207":1}}],["依赖查询与请求瀑布流",{"2":{"110":1}}],["依赖查询",{"2":{"107":1}}],["依赖与分页",{"0":{"107":1}}],["依赖请求",{"0":{"101":1}}],["依赖",{"2":{"57":1,"201":1,"287":1,"432":1,"525":1,"646":5,"656":2,"758":1,"761":1,"876":1}}],["依赖后端服务器稳定性",{"2":{"15":1}}],["网格",{"2":{"734":2}}],["网盘资源查找",{"2":{"518":1}}],["网盘资源检索",{"2":{"518":1}}],["网页链接",{"2":{"515":1}}],["网页或文档",{"2":{"515":1}}],["网页",{"2":{"514":1,"515":2}}],["网页理解等多种能力",{"2":{"511":1}}],["网页浏览",{"2":{"414":1}}],["网关返回的错误响应",{"2":{"814":1}}],["网关兼容性",{"2":{"155":1}}],["网关会主动切断连接并返回",{"2":{"137":1}}],["网关",{"2":{"137":1,"143":1}}],["网络拦截",{"2":{"799":1}}],["网络拦截器",{"2":{"792":1}}],["网络缓存",{"2":{"792":1,"799":1}}],["网络工具",{"2":{"792":1}}],["网络环境",{"2":{"519":1}}],["网络关系",{"2":{"398":1}}],["网络错误",{"2":{"370":1}}],["网络博客",{"2":{"346":1}}],["网络恢复时重试",{"2":{"342":1}}],["网络恢复后",{"2":{"139":1}}],["网络不稳定时",{"2":{"171":1}}],["网络异常",{"2":{"153":1}}],["网络或解析错误",{"2":{"149":1}}],["网络故障或由于短时间高频请求触发限流",{"2":{"147":1}}],["网络机制",{"0":{"122":1,"127":1}}],["网络特征",{"2":{"115":1,"117":1}}],["网络请求步骤",{"2":{"792":1}}],["网络请求拦截",{"2":{"790":1}}],["网络请求",{"2":{"108":1,"792":1}}],["网络重连时自动更新数据",{"2":{"103":1}}],["网络重连",{"2":{"97":1}}],["网络延迟影响",{"2":{"15":1}}],["网站分析",{"2":{"792":2}}],["网站适配器执行流程",{"0":{"804":1}}],["网站适配器或内置命令",{"2":{"797":1}}],["网站适配器目录",{"2":{"792":1}}],["网站适配器",{"2":{"790":1,"791":1,"792":1}}],["网站适配器可以独立开发和注册",{"2":{"789":1}}],["网站适配器和",{"2":{"789":1}}],["网站自动化开发者",{"2":{"784":1}}],["网站操作自动化困难",{"2":{"784":1}}],["网站",{"2":{"33":1,"562":1,"785":1,"792":1}}],["网站部署前",{"2":{"14":1}}],["极限压缩树结构",{"2":{"932":1}}],["极佳",{"2":{"928":1}}],["极佳的调试体验",{"2":{"924":1}}],["极好",{"2":{"928":3}}],["极好的开发调试工具",{"2":{"342":1}}],["极强的动态控制能力",{"2":{"922":1}}],["极坐标系",{"2":{"706":1}}],["极坐标组件",{"2":{"706":1}}],["极坐标",{"2":{"701":1}}],["极度精简的场景",{"2":{"927":1}}],["极度依赖从业者的社会经验和现实感",{"2":{"614":1}}],["极度追求开发效率和产品迭代速度的团队",{"2":{"342":1}}],["极少幻觉",{"2":{"511":1}}],["极少人工干预",{"2":{"403":1}}],["极易产生",{"2":{"493":1}}],["极易沦为应付作业的作弊工具",{"2":{"492":1}}],["极大简化了跨平台动画开发",{"2":{"755":1}}],["极大降低可视化开发门槛",{"2":{"699":1}}],["极大降低了",{"2":{"415":1,"443":1}}],["极大减少样板代码",{"2":{"673":1}}],["极大减少前端开发成本",{"2":{"639":1}}],["极大地降低了代码编写门槛的今天",{"2":{"540":1}}],["极大地误导我们的判断力",{"2":{"388":1}}],["极大地简化了开发和运维的复杂程度",{"2":{"345":1}}],["极大提升复用率和开发速度",{"2":{"934":1}}],["极大提升复杂状态机调试效率",{"2":{"106":1}}],["极大提升了智能体的实用性",{"2":{"441":1}}],["极大提升了研发效率",{"2":{"297":1}}],["极大提升用户体验的杀手锏",{"2":{"100":1}}],["极致压缩",{"2":{"928":1}}],["极致提效",{"2":{"559":1}}],["极致体验",{"2":{"365":1}}],["极致敏感",{"2":{"365":1}}],["极致的",{"2":{"927":1}}],["极致的心智负担",{"2":{"924":1}}],["极致的推理优化",{"2":{"551":1}}],["极致的性能压榨",{"2":{"551":1}}],["极致的性能优化",{"0":{"353":1}}],["极致的并行化效率",{"2":{"415":1}}],["极致的研发效能与结构安全性",{"2":{"342":1}}],["极致的轻量与简单",{"2":{"342":1}}],["极致的运行时优化",{"0":{"318":1}}],["极致性能",{"2":{"58":1}}],["极轻",{"2":{"148":1}}],["极速交付与零膨胀",{"2":{"930":1}}],["极速交付以及需要频繁进行业务重构的",{"2":{"342":1}}],["极速创新试错",{"2":{"928":1}}],["极速迭代",{"2":{"926":1}}],["极速的架构组装能力",{"2":{"540":1}}],["极速推理",{"2":{"523":1}}],["极速",{"2":{"343":1}}],["极速波动的量化交易终端",{"2":{"128":1}}],["极速加载",{"2":{"47":1}}],["极其完美",{"2":{"934":1}}],["极其稳健的企业级防御",{"2":{"928":1}}],["极其优雅的",{"2":{"927":1}}],["极其聪明但缺乏责任感的初级工程师",{"2":{"530":1}}],["极其复杂的跨服务分布式事务",{"2":{"344":2}}],["极其友好",{"2":{"342":1}}],["极其适合那些",{"2":{"123":1}}],["极其强大",{"2":{"110":1}}],["极其耗时的公共计算",{"2":{"88":1}}],["极简的",{"2":{"928":1}}],["极简",{"2":{"926":1}}],["极简流转",{"0":{"378":1}}],["极简杠杆公式",{"0":{"365":1}}],["极简场景",{"2":{"342":1}}],["极简主义创业者瞄准的是前一百个愿意付费的真实客户",{"2":{"379":1}}],["极简主义创业者不会立刻规划一个包罗万象的大型系统",{"2":{"378":1}}],["极简主义创业者绝不是在真空里写代码的人",{"2":{"377":1}}],["极简主义精神继承者",{"2":{"341":1}}],["极简主义",{"2":{"110":1,"342":1}}],["极简单的纯",{"2":{"88":1}}],["极简接口",{"2":{"2":1}}],["极小化",{"2":{"928":1}}],["极小产物",{"2":{"928":1}}],["极小",{"2":{"65":1}}],["极低价",{"2":{"522":2}}],["极低延迟",{"2":{"142":1}}],["极低",{"2":{"57":2,"86":1,"87":1,"110":1,"155":2,"465":1,"522":2,"928":2}}],["极快",{"2":{"57":1}}],["极高",{"2":{"15":2,"391":1,"928":3,"934":1}}],["强类型定义",{"2":{"934":2}}],["强力约束与",{"2":{"930":1}}],["强力推荐",{"2":{"515":1}}],["强隔离壁垒",{"2":{"928":1}}],["强",{"2":{"565":3}}],["强化了一种万变不离其宗",{"2":{"963":1}}],["强化",{"0":{"626":1}}],["强化学习",{"2":{"551":1}}],["强化这个直觉",{"2":{"369":1}}],["强约束",{"2":{"542":1}}],["强迫自己把模糊的感觉结构化为文字",{"2":{"375":1}}],["强迫自己构思一个",{"2":{"370":1}}],["强调色",{"2":{"925":1}}],["强调的种种理由其实与",{"2":{"613":1}}],["强调关键思考节点",{"2":{"494":1}}],["强调",{"2":{"359":1,"505":1,"706":1}}],["强调易用性和高性能",{"2":{"339":1}}],["强依赖",{"2":{"432":1,"928":1}}],["强依赖任务时表现更稳健的范式",{"2":{"428":1}}],["强依赖首屏",{"2":{"344":1}}],["强依赖后端服务器",{"2":{"15":1}}],["强主张的模块化目录",{"2":{"344":1}}],["强绑定",{"2":{"342":1,"927":1}}],["强业务逻辑系统",{"2":{"342":1}}],["强可预测性需求",{"2":{"341":1}}],["强烈推荐开启",{"2":{"212":1}}],["强烈推荐",{"2":{"203":1,"515":1,"523":1,"564":1}}],["强烈建议将其沉淀为",{"2":{"435":1}}],["强烈建议开启所有",{"2":{"203":1}}],["强烈建议结合",{"2":{"152":1}}],["强大的公式与流程引擎",{"2":{"515":1}}],["强大的公式引擎与自动化工作流引擎让内容真正",{"2":{"515":1}}],["强大的语义理解能力",{"2":{"425":1}}],["强大的标准化缓存",{"2":{"342":1}}],["强大的缓存生命周期管理",{"2":{"342":1}}],["强大的生命周期来控制这些复杂的异步交互流",{"2":{"113":1}}],["强大的",{"2":{"113":1}}],["强关联数据的复杂工程",{"2":{"111":1}}],["强制调用",{"2":{"887":1}}],["强制完整填写",{"2":{"881":1}}],["强制设计先行",{"2":{"881":1}}],["强制",{"2":{"876":1}}],["强制重新编译所有项目",{"2":{"216":1}}],["强制使用",{"2":{"203":1}}],["强制后台拉取最新的真实状态",{"2":{"108":1}}],["强制检验当前的",{"2":{"3":1}}],["强交互",{"2":{"57":1,"58":1}}],["服务提供商的工厂接口",{"2":{"854":1}}],["服务定位器",{"2":{"851":1}}],["服务专有",{"2":{"851":1}}],["服务业等",{"2":{"614":1}}],["服务状态",{"2":{"449":1}}],["服务于前端的后端",{"2":{"342":1,"344":2}}],["服务层",{"2":{"191":1,"275":2}}],["服务员先端上免费面包",{"2":{"89":1}}],["服务多",{"2":{"57":2}}],["服务较多",{"2":{"57":1}}],["服务少",{"2":{"57":2}}],["服务端开发",{"2":{"346":1}}],["服务端引擎",{"2":{"344":1}}],["服务端框架",{"2":{"344":2}}],["服务端和",{"2":{"326":1}}],["服务端层",{"2":{"180":1}}],["服务端需要按照",{"2":{"177":1}}],["服务端需要在响应头和数据格式上遵循特定规范",{"2":{"177":1}}],["服务端需要管理连接的挂起与超时释放",{"2":{"152":1}}],["服务端要点",{"0":{"177":1}}],["服务端的核心任务只有一个",{"2":{"176":1}}],["服务端只需要按",{"2":{"164":1}}],["服务端只需返回符合",{"2":{"164":1}}],["服务端已启动",{"2":{"164":1}}],["服务端复杂度",{"2":{"155":1}}],["服务端资源占用",{"2":{"155":1}}],["服务端可以第一时间将结果",{"2":{"153":1}}],["服务端释放连接",{"2":{"153":1}}],["服务端将请求挂起",{"2":{"152":1}}],["服务端内部去查库的间隔",{"2":{"152":1}}],["服务端实现示例",{"0":{"164":1}}],["服务端实现",{"0":{"152":1}}],["服务端返回",{"2":{"151":1}}],["服务端立刻结束挂起",{"2":{"151":1}}],["服务端立即返回静态",{"2":{"52":1}}],["服务端完全无状态",{"2":{"149":1}}],["服务端在执行耗时任务",{"2":{"147":1}}],["服务端在后台获取动态数据",{"2":{"87":1}}],["服务端通常会在请求中加入签名",{"2":{"133":1}}],["服务端据此可以实现数据的",{"2":{"122":1}}],["服务端必须积攒全部结果才能返回",{"2":{"116":1}}],["服务端必须在渲染前完成数据获取",{"2":{"69":1}}],["服务端状态管理",{"2":{"342":1}}],["服务端状态管理库",{"2":{"342":1}}],["服务端状态的管理往往缺乏统一且高效的解决方案",{"2":{"95":1}}],["服务端状态",{"2":{"95":1}}],["服务端后台获取数据",{"2":{"86":1}}],["服务端组件不向浏览器发送",{"2":{"72":1}}],["服务端直接",{"2":{"71":1}}],["服务端与客户端状态同步",{"2":{"71":1}}],["服务端与客户端使用了不同的日期",{"2":{"59":1}}],["服务端",{"2":{"57":1,"134":3,"148":1,"316":1,"439":1,"843":1}}],["服务端每次请求渲染静态外壳",{"2":{"57":1}}],["服务端流式推送动态组件渲染结果",{"2":{"52":1}}],["服务端仅返回基础",{"2":{"35":1}}],["服务端渲染架构",{"2":{"928":1}}],["服务端渲染生成静态图表图片",{"2":{"700":1}}],["服务端渲染的底层运作方式",{"2":{"68":1}}],["服务端渲染出的",{"2":{"59":1}}],["服务端渲染需要时间",{"2":{"57":1}}],["服务端渲染",{"0":{"69":1},"2":{"3":1,"38":1,"57":1,"73":1,"671":1,"706":1}}],["服务器功能单元测试",{"2":{"881":1}}],["服务器测试",{"2":{"881":1}}],["服务器停止与资源回收",{"2":{"881":1}}],["服务器启动",{"2":{"881":1}}],["服务器无需修改即可使用",{"2":{"822":1}}],["服务器无需任何计算",{"2":{"42":1}}],["服务器端应用程序的框架",{"2":{"344":2}}],["服务器端",{"2":{"338":1}}],["服务器错误",{"2":{"169":1}}],["服务器连接池资源相对充裕",{"2":{"156":1}}],["服务器资源敏感",{"2":{"156":1}}],["服务器是否有充裕的连接池资源",{"2":{"155":1}}],["服务器立即返回响应",{"2":{"151":1}}],["服务器收到请求后",{"2":{"151":1}}],["服务器会保持连接挂起",{"2":{"150":1}}],["服务器如果发现任务没做完",{"2":{"151":1}}],["服务器如何识别并继续向重连后的客户端推送结果",{"2":{"139":1}}],["服务器如同一个被动的仓库管理员",{"2":{"115":1}}],["服务器与",{"2":{"138":1}}],["服务器与真正执行计算的",{"2":{"138":1}}],["服务器将任务投入",{"2":{"138":1}}],["服务器的并发连接池是有限的",{"2":{"137":1}}],["服务器必须为每一个",{"2":{"129":1}}],["服务器确认支持",{"2":{"126":1}}],["服务器向客户端推送事件",{"2":{"120":1}}],["服务器目前尚不清楚响应的总长度",{"2":{"117":1}}],["服务器也无法将新信息触达用户",{"2":{"115":1}}],["服务器之间的数据传输",{"2":{"114":1}}],["服务器实时日志",{"2":{"143":1}}],["服务器实时生成",{"2":{"75":1}}],["服务器实时渲染",{"2":{"47":1}}],["服务器实时渲染一次",{"2":{"47":1}}],["服务器",{"2":{"65":1,"83":1,"734":1,"752":1,"881":1}}],["服务器只是从文件系统读取对应的",{"2":{"63":1}}],["服务器只返回一个近乎空的",{"2":{"34":1}}],["服务器在浏览器中实时渲染设计概念",{"2":{"888":1}}],["服务器在物理上彼此隔离",{"2":{"138":1}}],["服务器在处理完成后返回完整的响应",{"2":{"115":1}}],["服务器在后台继续执行被",{"2":{"86":1}}],["服务器在运行时不需要执行任何应用代码",{"2":{"63":1}}],["服务器在接收到请求时",{"2":{"39":1}}],["服务器打工",{"2":{"57":1}}],["服务器压力",{"2":{"57":1}}],["服务器接收请求",{"2":{"39":1}}],["服务器接收并处理该请求",{"2":{"33":1}}],["服务器返回的响应头和数据体需遵循以下规范",{"2":{"161":1}}],["服务器返回的",{"2":{"38":1}}],["服务器返回",{"2":{"35":1}}],["服务器依赖",{"2":{"15":1}}],["服务",{"0":{"20":1},"2":{"16":1,"20":1,"274":1,"338":1,"520":1,"548":1,"650":2,"790":1,"791":1,"792":1,"842":1,"847":1}}],["请教",{"2":{"909":1}}],["请备注",{"2":{"905":1}}],["请解释以下代码",{"2":{"582":1}}],["请帮我提交当前已经",{"2":{"581":1}}],["请务必在享受",{"2":{"539":1}}],["请严格遵循以下三步流程",{"2":{"494":1}}],["请严格遵守以下",{"2":{"451":1}}],["请使用",{"2":{"451":1}}],["请使用此技能",{"2":{"451":1}}],["请参考",{"2":{"451":1}}],["请将这些通用规则抽离出来",{"2":{"437":1}}],["请指出我分析中的漏洞",{"2":{"375":1}}],["请检查这三个文件的潜在安全问题",{"2":{"583":1}}],["请检查",{"2":{"370":1}}],["请重新登录",{"2":{"172":1}}],["请重新连",{"2":{"152":1}}],["请介绍一下自己",{"2":{"169":1}}],["请求将在该间隔后自动重试",{"2":{"839":1}}],["请求头",{"2":{"839":1}}],["请求头对象",{"2":{"166":1}}],["请求是否可以取消",{"2":{"662":1}}],["请求通过此方法发送",{"2":{"662":1}}],["请求发送器",{"2":{"662":1}}],["请求取消",{"2":{"649":1}}],["请求封装",{"2":{"647":1}}],["请求库",{"2":{"342":2}}],["请求与响应",{"2":{"275":1}}],["请求逻辑的统一",{"2":{"256":1}}],["请求参数",{"2":{"199":1}}],["请求扩展",{"2":{"180":1}}],["请求订阅任务流",{"2":{"179":1}}],["请求地址",{"2":{"166":1}}],["请求体等",{"2":{"815":1}}],["请求体数据",{"2":{"169":1}}],["请求体对象",{"2":{"166":2}}],["请求体",{"2":{"160":1,"166":1,"167":1}}],["请求限制",{"2":{"160":1}}],["请求方式受限",{"2":{"160":1}}],["请求即响应",{"2":{"155":1}}],["请求的",{"0":{"179":1},"2":{"138":1}}],["请求可能因网络问题投递失败",{"2":{"133":1}}],["请求去重",{"2":{"97":1,"342":1}}],["请求并获取数据",{"2":{"97":1}}],["请求获取最新数据",{"2":{"97":1}}],["请求按组件树串行发起",{"2":{"59":1}}],["请求组合实现精细化控制",{"2":{"59":1}}],["请求处理",{"2":{"57":1,"576":1,"830":1}}],["请求时",{"2":{"87":1}}],["请求时获取",{"2":{"57":1}}],["请求时动态生成",{"2":{"15":1}}],["请求",{"2":{"33":2,"59":1,"81":1,"95":1,"101":1,"106":1,"114":1,"115":1,"124":1,"125":1,"126":1,"127":1,"131":1,"137":1,"138":1,"143":3,"151":1,"152":1,"160":1,"166":1,"180":1,"274":2,"275":2,"279":1,"342":3,"649":1,"801":1,"814":1,"839":3,"847":1}}],["请输入你的邮箱",{"2":{"28":1}}],["请记住",{"2":{"12":1}}],["pk",{"2":{"946":1}}],["pdca",{"2":{"943":1}}],["pdf",{"2":{"411":1,"414":1,"416":1,"436":2,"470":4,"471":4,"472":4,"474":1,"476":1,"512":1,"514":1,"515":2,"522":2,"671":1}}],["pv",{"2":{"776":1}}],["pb=pucker",{"2":{"771":1}}],["pb",{"2":{"762":1,"764":1,"771":1}}],["pbr",{"2":{"729":2,"730":1,"734":3,"742":2,"749":1}}],["p3",{"2":{"734":1}}],["pmrem",{"2":{"734":2}}],["pmremgenerator",{"2":{"734":1,"736":1}}],["pm",{"2":{"457":1}}],["pmndrs",{"2":{"341":2}}],["ppt",{"2":{"515":2}}],["pptx",{"2":{"453":1}}],["ppr",{"0":{"51":1,"85":1,"87":1,"89":1},"1":{"52":1,"53":1,"54":1,"55":1,"86":1,"87":1,"88":1,"89":1,"90":1},"2":{"51":2,"52":1,"53":3,"55":1,"57":3,"58":1,"59":1,"66":1,"67":3,"85":1,"87":2,"89":3}}],["pg",{"2":{"357":2,"358":2,"359":2,"360":2,"361":2,"362":1}}],["p99",{"2":{"353":1}}],["p90",{"2":{"353":1}}],["peer",{"2":{"666":1}}],["peel",{"0":{"373":1}}],["pendingelements",{"2":{"776":1}}],["pending",{"2":{"281":3,"318":1,"719":1,"801":2,"807":1,"895":1}}],["people",{"2":{"267":2,"350":1}}],["performstagetask",{"2":{"712":1}}],["performance",{"2":{"592":1,"677":1}}],["perfectdrawenabled",{"2":{"692":1}}],["per",{"2":{"653":2,"712":1}}],["permissions",{"2":{"482":2}}],["permission",{"2":{"482":2,"586":1}}],["permissionmode",{"2":{"478":1,"482":2,"484":1}}],["perplexity",{"2":{"348":3,"349":4,"350":4,"352":1,"353":1,"354":1,"355":1,"356":1,"518":7}}],["persuasion",{"2":{"881":1}}],["perspectivecamera",{"2":{"734":1,"749":1,"753":1}}],["persistence",{"2":{"280":1,"281":1}}],["person",{"2":{"236":6,"267":5}}],["percent",{"2":{"164":1}}],["pet",{"2":{"229":3}}],["pnpm",{"2":{"216":1,"335":3,"594":1,"642":1,"845":2,"870":1,"871":4,"881":2}}],["png",{"2":{"152":1,"471":1,"472":1,"474":2,"677":2,"719":1}}],["physics",{"2":{"734":1}}],["physicallightingmodel",{"2":{"734":1}}],["phong",{"2":{"730":1,"734":1}}],["phone",{"2":{"184":1,"185":5,"260":1,"280":1}}],["php",{"2":{"15":1}}],["pid",{"2":{"807":1}}],["pictorialbarview",{"2":{"706":1}}],["pictorialbarseries",{"2":{"706":1}}],["pictorialbar",{"2":{"706":1}}],["piecewise",{"2":{"706":1}}],["pieview",{"2":{"706":1}}],["pieseries",{"2":{"706":1}}],["pie",{"2":{"706":2}}],["pixelratio",{"2":{"719":1}}],["pixelate",{"2":{"677":1,"679":1}}],["pixijs",{"2":{"702":1}}],["pinterface",{"2":{"776":1}}],["pinia",{"2":{"339":1,"341":1}}],["pingpong",{"2":{"743":1}}],["ping",{"2":{"129":1,"172":4,"175":4,"801":3,"807":2}}],["pi",{"2":{"230":1,"232":1,"295":3,"310":3,"321":1}}],["pipelinehandle",{"2":{"748":2}}],["pipelinelayout",{"2":{"739":1}}],["pipelines",{"2":{"733":2,"734":1,"736":1,"737":1,"739":1}}],["pipelineid",{"2":{"712":1,"719":1}}],["pipelinemap",{"2":{"712":1}}],["pipeline",{"0":{"712":1,"932":1},"2":{"454":1,"462":1,"676":1,"677":1,"680":1,"705":1,"706":1,"709":1,"712":3,"719":1,"733":1,"748":1,"790":1,"792":1,"796":1,"797":1,"806":2,"928":1}}],["pipes",{"2":{"275":1}}],["pipe",{"2":{"178":1,"179":1,"275":2}}],["pc",{"2":{"157":1,"699":1}}],["port",{"2":{"807":1}}],["pool",{"2":{"762":6}}],["pooling",{"2":{"762":2}}],["pools",{"2":{"761":1}}],["pos",{"2":{"692":4}}],["position=0",{"2":{"833":1}}],["positional",{"2":{"806":1}}],["positionalaudio",{"2":{"734":1}}],["position",{"2":{"685":3,"737":2,"740":1,"743":2,"748":1,"749":1,"753":2,"770":1,"833":3}}],["postcss",{"0":{"932":1},"2":{"923":1,"928":2,"932":2}}],["posttoapi",{"2":{"848":1}}],["postprocessing",{"2":{"733":2,"734":2}}],["postpage",{"2":{"27":1}}],["postupdater",{"2":{"720":1}}],["postinstall",{"2":{"792":1}}],["postiniter",{"2":{"720":1}}],["postid",{"2":{"28":6}}],["postid=",{"2":{"27":1}}],["posterizetime",{"2":{"769":1}}],["posterize",{"2":{"677":1,"679":1}}],["post>",{"2":{"90":1}}],["post",{"0":{"179":1},"2":{"27":12,"28":5,"81":1,"90":1,"103":1,"104":1,"131":1,"134":1,"138":1,"143":2,"160":2,"166":5,"167":1,"169":2,"175":2,"178":1,"179":5,"180":1,"342":1,"353":1,"551":1,"705":1,"715":1,"801":4,"807":3,"814":1,"819":1,"864":1}}],["posts",{"2":{"27":6,"81":1,"82":2,"83":1,"90":1}}],["postgresql",{"2":{"20":1,"23":1,"573":1}}],["pointlight",{"2":{"734":1}}],["pointtodata",{"2":{"714":1}}],["pointerlock等",{"2":{"734":1}}],["pointersize",{"2":{"719":1}}],["pointerid",{"2":{"692":1}}],["pointerup",{"2":{"684":1}}],["pointermove",{"2":{"684":1}}],["pointerdown",{"2":{"684":1}}],["pointer",{"2":{"684":2,"921":1,"922":1,"924":1,"927":1}}],["pointerevents",{"2":{"676":1,"677":1,"679":1,"680":1,"684":2}}],["point",{"2":{"683":1,"762":1}}],["pointsmaterial",{"2":{"734":1}}],["points",{"2":{"628":2,"636":1,"706":1,"734":1,"737":1,"748":1}}],["polluter",{"2":{"881":1}}],["polling",{"2":{"115":2,"139":1,"145":3,"152":3,"155":2}}],["polyglot",{"2":{"881":1}}],["polygonoffsetunits",{"2":{"748":1}}],["polygonoffsetfactor",{"2":{"748":1}}],["polygonoffset",{"2":{"748":1}}],["polyfill",{"2":{"762":1}}],["polynomialbezier",{"2":{"762":1}}],["polar",{"2":{"706":2,"714":2}}],["polotno",{"2":{"671":1}}],["power",{"2":{"325":3}}],["pow",{"2":{"171":1,"175":1}}],["popup",{"2":{"792":4}}],["populatecache",{"2":{"100":1}}],["pop",{"2":{"166":1,"168":1}}],["pong",{"2":{"129":1,"801":1}}],["plus",{"2":{"340":2,"924":1,"931":1}}],["pluginmanager",{"2":{"656":2}}],["plugins",{"2":{"288":3,"656":1,"880":1,"881":1,"899":2}}],["plugin",{"2":{"65":1,"343":1,"646":2,"647":4,"656":1,"777":1,"792":3,"796":1,"806":1,"880":6,"881":10,"886":4,"895":1,"899":3}}],["playwright",{"2":{"845":1}}],["playcount",{"2":{"776":1}}],["playdirection",{"2":{"776":1}}],["playspeed",{"2":{"776":1}}],["player",{"2":{"755":2,"762":3,"767":1,"768":1,"769":1,"770":1,"771":1}}],["play",{"2":{"672":1,"677":1,"686":2,"692":1,"743":1,"761":1,"767":2,"776":1,"777":1}}],["playground",{"2":{"467":2,"477":2}}],["plain",{"2":{"706":1,"806":1}}],["plaintext",{"0":{"796":1},"2":{"649":1,"650":1,"652":1,"653":1,"654":1,"655":1,"656":1,"679":1,"680":1,"682":1,"683":1,"684":1,"709":1,"711":1,"712":1,"713":1,"714":1,"736":1,"737":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"883":1,"884":1,"886":1,"887":1,"888":1,"889":1,"890":1}}],["plainobject",{"2":{"269":2,"661":1}}],["placeholder",{"2":{"647":1}}],["placeholder=",{"2":{"28":1}}],["platform",{"2":{"456":2,"521":1,"649":1,"886":1}}],["plantask",{"2":{"895":2}}],["plans",{"2":{"880":2,"881":4,"883":1,"884":3,"888":2,"892":1,"895":2,"896":4,"900":1}}],["plane",{"2":{"419":1,"734":1,"748":1}}],["plan",{"0":{"428":1},"1":{"429":1,"430":1,"431":1},"2":{"414":2,"428":1,"430":1,"431":1,"432":2,"433":1,"482":1,"545":1,"712":1,"881":1,"884":1}}],["planning",{"2":{"408":2,"482":1}}],["purple",{"2":{"927":1}}],["purge",{"2":{"925":1}}],["puckerandbloat",{"2":{"771":1}}],["puckerandbloatmodifier",{"2":{"762":1,"764":1}}],["pucker",{"2":{"757":1}}],["puppeteer",{"2":{"734":1,"787":1}}],["pull",{"2":{"451":1,"881":1,"909":4}}],["pub",{"0":{"302":1},"2":{"129":1,"152":1,"156":1}}],["publisher",{"2":{"280":1}}],["published",{"2":{"29":1}}],["publishdate",{"2":{"26":2,"27":2}}],["public",{"2":{"26":4,"28":2,"184":3,"185":6,"194":2,"203":1,"231":1,"281":9,"705":1,"761":1,"786":1,"790":1,"797":1,"800":1,"806":2}}],["put",{"2":{"103":1,"104":1,"108":1,"160":1,"167":1,"814":1}}],["push",{"2":{"29":1,"261":1,"281":1,"289":1,"302":1,"315":1,"451":2,"909":5}}],["pt",{"2":{"28":1,"714":1,"925":1}}],["padding",{"2":{"921":1,"922":1,"923":1,"924":1}}],["patterns",{"2":{"881":1,"890":2}}],["pattern",{"2":{"740":1,"806":2,"859":1,"886":1}}],["pathconfig>",{"2":{"693":1}}],["pathname",{"2":{"662":1}}],["pathprefix",{"2":{"649":1}}],["path",{"2":{"203":2,"204":1,"210":1,"214":1,"215":1,"216":2,"334":3,"649":2,"652":3,"662":1,"663":1,"677":1,"679":1,"680":1,"693":1,"743":1,"771":1,"773":1,"776":2,"777":1,"781":1}}],["paths",{"2":{"203":1,"216":3,"576":1,"577":1,"578":1,"792":1,"807":1,"925":1}}],["packldrawmodel",{"2":{"734":1}}],["package",{"2":{"211":1,"216":1,"224":1,"280":2,"290":9,"308":2,"333":2,"334":1,"335":1,"451":1,"647":2,"677":1,"706":1,"734":1,"762":1,"792":3,"823":3,"828":1,"849":1,"880":1,"881":2}}],["packages",{"0":{"213":1,"214":1,"215":1},"2":{"94":1,"205":3,"211":1,"216":4,"335":3,"647":1,"649":4,"666":1,"777":1,"849":1,"850":6,"853":7,"872":5}}],["painter",{"2":{"705":2}}],["paid",{"2":{"280":1}}],["panel",{"2":{"647":1}}],["paused",{"2":{"743":1}}],["pause",{"2":{"489":1,"672":1,"677":1,"686":2,"692":1,"767":2,"776":1,"777":1}}],["pascalcase",{"2":{"330":2}}],["paginationstore",{"2":{"646":1,"647":1,"650":3}}],["pagination",{"2":{"280":1,"647":1}}],["pagemetaeffect",{"2":{"662":1}}],["page`",{"2":{"576":1}}],["pagedattention",{"2":{"551":1}}],["page",{"2":{"27":2,"74":2,"77":4,"78":1,"79":5,"82":1,"90":1,"104":1,"640":1,"652":1,"653":1,"661":2,"668":1,"791":1,"792":3,"799":3,"806":4}}],["pages",{"2":{"19":2,"274":1,"280":1,"345":2,"355":1,"666":1}}],["pay",{"2":{"397":1}}],["payment",{"2":{"280":1}}],["payload",{"2":{"73":4,"160":1,"167":1,"289":3,"705":1,"706":1,"708":1,"712":3,"719":4}}],["party",{"2":{"761":1,"762":1,"764":1}}],["partialline",{"2":{"168":6}}],["partial",{"0":{"87":1},"2":{"51":1,"87":1}}],["parcel",{"2":{"677":1,"697":1}}],["parentelement",{"2":{"776":1}}],["parentname",{"2":{"776":1}}],["parent",{"2":{"740":1,"748":1}}],["parentid",{"2":{"663":1}}],["parentstore",{"2":{"653":2}}],["pareto",{"2":{"394":1}}],["parallax",{"2":{"734":1}}],["parallelview",{"2":{"706":1}}],["parallelseries",{"2":{"706":1}}],["parallel",{"2":{"706":3,"714":2,"880":1,"881":1,"883":1}}],["paradox",{"2":{"530":1}}],["parameters",{"2":{"749":2,"807":5}}],["parameter",{"2":{"234":1}}],["param",{"2":{"149":1,"152":2,"153":1,"166":6,"175":2,"178":2,"179":1,"839":2,"840":6}}],["params",{"2":{"27":3,"653":1,"768":1,"776":1,"777":1,"806":1}}],["parsejson",{"2":{"848":1}}],["parsedpath",{"2":{"743":1}}],["parseclasstype",{"2":{"706":1}}],["parselocation",{"2":{"662":1}}],["parsers",{"2":{"734":1}}],["parser",{"2":{"646":1,"647":1,"655":2}}],["parseint",{"2":{"262":1}}],["parse",{"0":{"833":1},"2":{"172":1,"175":1,"647":2,"682":1,"823":4,"824":1,"827":2,"830":1}}],["p>¥",{"2":{"288":1}}],["p>",{"2":{"27":2,"28":3,"288":1}}],["p",{"2":{"27":3,"28":5,"926":1,"927":2,"928":1,"933":1}}],["pypi",{"2":{"876":1,"877":1}}],["python",{"2":{"342":1,"416":1,"442":2,"449":1,"467":1,"470":2,"471":1,"472":2,"553":1,"558":1,"562":2,"636":1,"902":1}}],["pythondef",{"2":{"187":1,"188":1}}],["py",{"2":{"27":2,"28":1,"449":1,"484":1,"881":1,"925":1,"927":1,"933":1}}],["px",{"2":{"27":2,"28":1,"925":1,"927":3,"933":1}}],["prd",{"2":{"541":1}}],["practices",{"2":{"456":1,"881":1}}],["principles",{"2":{"881":1}}],["primitive",{"2":{"929":1}}],["prime",{"2":{"874":1}}],["primaryvariant",{"2":{"249":3}}],["primary",{"2":{"28":1,"249":3,"921":1,"923":2,"924":2,"927":1,"928":3,"929":1,"933":2}}],["privacy",{"2":{"792":1}}],["private",{"2":{"152":1,"175":1,"179":1,"184":6,"185":3,"203":1,"261":1,"281":14,"289":1}}],["priority",{"2":{"715":1,"720":4,"881":1,"887":1}}],["pricing",{"2":{"397":1}}],["price",{"2":{"260":4,"288":1,"397":1}}],["pr",{"2":{"132":1,"451":1,"453":1,"455":1,"567":2,"568":3,"592":1,"811":1,"880":1,"881":2}}],["prepareretries",{"2":{"856":2}}],["preparetoolchoice",{"2":{"856":1}}],["preparetools",{"2":{"853":1,"856":1}}],["preparelanguagemodelcalloptions",{"2":{"856":1}}],["preparestep",{"2":{"851":1,"859":1}}],["preprocessor",{"2":{"706":1}}],["preference",{"2":{"881":1}}],["preflight",{"2":{"801":1}}],["prefix",{"2":{"777":2}}],["pressure",{"2":{"881":3}}],["presskey",{"2":{"799":1,"806":1}}],["presetshape",{"2":{"647":1}}],["preset",{"2":{"222":1,"482":2,"647":1}}],["preserveaspectratio",{"2":{"777":2}}],["preservesymlinks",{"2":{"203":1}}],["preserve",{"2":{"203":2}}],["presentational",{"2":{"2":1}}],["pre",{"2":{"482":1}}],["predicate",{"2":{"259":3,"261":2}}],["prettier",{"2":{"226":1,"677":1,"697":1,"845":2}}],["pretty",{"2":{"203":1}}],["preact",{"2":{"203":2}}],["previoustodos",{"2":{"108":4}}],["preview",{"2":{"65":1}}],["preventdefault",{"2":{"28":1,"692":1}}],["prerendering",{"0":{"87":1},"2":{"51":1,"87":1}}],["pros",{"2":{"895":1}}],["prose",{"2":{"27":1}}],["programs",{"2":{"748":1}}],["progressiveload",{"2":{"777":2}}],["progressiverender",{"2":{"712":1}}],["progressiveenabled",{"2":{"712":1}}],["progressive",{"2":{"705":1,"712":1,"715":1}}],["progress",{"2":{"163":2,"164":1,"172":2,"175":1,"178":2,"179":2,"792":1,"895":1}}],["procedural",{"2":{"734":1}}],["processkeys",{"2":{"771":1,"776":2}}],["processor",{"2":{"706":1,"708":2}}],["processedelement",{"2":{"762":1}}],["processedusers",{"2":{"266":1}}],["processed",{"2":{"266":1}}],["processidentifieddata",{"2":{"266":2}}],["processing",{"2":{"149":1,"152":1,"153":2,"523":1,"680":1}}],["processresult",{"2":{"262":1}}],["process",{"2":{"26":2,"488":2,"489":1,"880":1}}],["proactivity",{"2":{"402":1}}],["problemstatement",{"2":{"895":1}}],["problem",{"2":{"367":2}}],["pro",{"2":{"354":1,"518":1,"521":1,"522":1,"559":1,"568":1,"903":1}}],["provideroptions",{"2":{"866":1}}],["providerv4",{"2":{"848":1,"853":1,"854":4,"857":2,"866":1}}],["provider",{"0":{"857":1,"868":1},"2":{"274":4,"327":1,"844":4,"845":2,"847":8,"848":6,"849":8,"850":5,"851":2,"853":4,"854":1,"856":2,"857":4,"860":1,"866":3,"868":3,"872":5}}],["providers",{"2":{"274":1,"280":1,"848":1}}],["prototype",{"2":{"685":1}}],["protocols",{"2":{"126":1}}],["protocol",{"2":{"84":1,"439":1,"548":1,"787":1,"792":1,"799":1,"881":1}}],["protected",{"2":{"203":1}}],["projectinterface",{"2":{"762":1}}],["projectionmatrix|",{"2":{"740":1}}],["projectionmatrix",{"2":{"734":1}}],["projector",{"2":{"734":1}}],["project",{"2":{"290":1,"437":1,"570":4,"762":1,"857":1}}],["projectlist",{"2":{"101":1}}],["projects",{"0":{"437":1},"2":{"101":5,"110":2,"434":1,"435":1,"437":6,"440":1,"570":1,"629":1,"631":2,"762":1}}],["projectdashboard",{"2":{"101":1}}],["profiler",{"2":{"592":1}}],["profileform",{"2":{"100":1}}],["profile",{"2":{"97":2,"506":2,"509":1}}],["promiselike",{"2":{"866":3}}],["promise",{"2":{"59":1,"81":1,"82":1,"149":3,"152":1,"153":2,"166":1,"168":1,"225":1,"246":1,"255":1,"263":2,"281":8,"313":1,"330":1,"342":3,"661":2,"662":1,"663":5,"692":1,"748":1,"806":36,"822":1,"832":1,"839":3,"840":2,"856":1,"867":2}}],["promptfoo",{"2":{"550":1}}],["prompts",{"0":{"435":1},"2":{"434":1,"435":2,"436":1,"440":1,"441":1,"482":1,"881":2}}],["prompt",{"0":{"494":1,"503":3,"504":1,"506":1,"536":1},"1":{"504":3,"505":4,"507":2,"508":2},"2":{"2":1,"28":1,"113":1,"143":1,"309":1,"350":1,"358":1,"367":1,"375":1,"403":1,"410":2,"415":1,"425":1,"443":1,"456":1,"467":1,"482":3,"483":3,"484":1,"486":1,"489":3,"494":2,"496":2,"503":5,"504":2,"509":6,"546":1,"550":1,"553":1,"843":1,"848":1,"853":2,"856":1,"863":1,"866":2,"867":2,"881":5,"889":6,"901":1}}],["production",{"2":{"890":1,"902":1}}],["productid=",{"2":{"288":1}}],["productid",{"2":{"281":3,"288":3,"289":2}}],["products",{"2":{"288":2}}],["productservice",{"2":{"274":1,"288":8,"290":1}}],["productdetail",{"2":{"288":5,"290":1}}],["productapp",{"2":{"288":9,"289":1}}],["productqueries",{"2":{"274":1}}],["productlistprops>",{"2":{"288":1}}],["productlistprops",{"2":{"288":1}}],["productlist",{"2":{"74":1,"288":7,"289":3,"290":1}}],["product",{"0":{"556":1},"2":{"30":1,"260":6,"263":1,"274":1,"275":1,"280":3,"281":4,"288":12,"289":3,"290":3,"291":1,"365":4,"366":3,"367":7,"492":1,"540":2,"554":1,"558":1,"901":2,"902":4,"909":1}}],["proptype",{"2":{"770":1,"776":1}}],["proptypes",{"2":{"762":1}}],["propfunc",{"2":{"686":1}}],["propertyinterface",{"2":{"762":1,"769":1}}],["propertygroupfactory",{"2":{"762":1}}],["propertyfactory",{"0":{"770":1},"2":{"761":1,"762":1,"764":1,"770":5}}],["propertymixer",{"2":{"734":1}}],["propertybinding",{"2":{"734":1,"743":2}}],["property",{"2":{"676":1,"762":1,"765":2,"769":1,"770":3}}],["properties",{"2":{"482":1,"749":3,"807":3,"929":1}}],["propname",{"2":{"661":1,"662":1}}],["props",{"0":{"249":1},"2":{"1":2,"2":5,"3":1,"5":2,"6":1,"7":1,"10":1,"11":4,"249":5,"256":1,"263":1,"289":2,"649":3,"661":3,"662":1,"922":5,"927":4}}],["prop",{"2":{"1":2,"652":2,"686":1}}],["传销",{"2":{"957":1}}],["传达科技",{"2":{"925":1}}],["传入数据",{"2":{"717":1}}],["传入用户输入和会话",{"2":{"489":1}}],["传入符合",{"2":{"266":1}}],["传入",{"2":{"265":1,"486":1,"490":1,"782":1}}],["传入复杂类型",{"2":{"258":1}}],["传入解析后的数据",{"2":{"166":1}}],["传给",{"2":{"232":1}}],["传了空字符串",{"2":{"199":1}}],["传输手段",{"2":{"159":1}}],["传输机制",{"2":{"117":1,"120":1,"180":1}}],["传感器数据采集",{"2":{"127":1}}],["传统爬虫易被反爬虫拦截",{"2":{"784":1}}],["传统做法需要工程师手工重新编码实现",{"2":{"755":1}}],["传统兼容入口",{"2":{"734":1}}],["传统方式需要手写大量",{"2":{"639":1}}],["传统模式下",{"2":{"457":1,"461":1}}],["传统商业逻辑往往是先构思一个宏大的点子",{"2":{"377":1}}],["传统搜索兜底",{"2":{"518":1}}],["传统搜索在用户点击链接后结束",{"2":{"350":1}}],["传统搜索引擎的本质是流量分发与链接导航",{"2":{"349":1}}],["传统通过",{"2":{"297":1}}],["传统的机器学习都是通过",{"2":{"918":1}}],["传统的线性人生模式正在失效",{"2":{"605":1}}],["传统的",{"2":{"427":1,"922":1}}],["传统的软件工程思路以人为中心",{"2":{"403":1}}],["传统的单体应用可能更加合适",{"2":{"292":1}}],["传统的固定频率轮询",{"2":{"145":1}}],["传统",{"0":{"115":1},"2":{"114":1,"115":2,"144":1,"537":1,"922":1,"928":1,"934":1}}],["传统动态网站",{"2":{"15":1}}],["传递参数",{"0":{"582":1}}],["传递动力的",{"2":{"383":1}}],["传递必要信息",{"2":{"197":1}}],["传递",{"2":{"6":1}}],["传递子组件",{"2":{"1":1}}],["调整后的效果需要时间来证明",{"2":{"950":1}}],["调整表述逻辑",{"2":{"435":1}}],["调优到",{"2":{"901":1}}],["调色板",{"2":{"706":1}}],["调度器核心接口",{"2":{"719":1}}],["调度器将所有注册的",{"2":{"712":1}}],["调度器是",{"2":{"712":1}}],["调度管道",{"0":{"712":1}}],["调度管道层",{"2":{"704":1,"705":1}}],["调度中心",{"2":{"2":1}}],["调研已有方案",{"2":{"631":1}}],["调研资料汇总",{"2":{"515":1}}],["调",{"2":{"507":1}}],["调包侠",{"2":{"491":1}}],["调查市场趋势",{"2":{"412":1}}],["调节回路有助于改善增强回路带来的问题",{"2":{"908":1}}],["调节回路",{"0":{"387":1,"910":1},"2":{"383":2,"387":3}}],["调试直观",{"2":{"928":1}}],["调试难度倒挂",{"2":{"901":1}}],["调试习惯等",{"2":{"570":1}}],["调试",{"2":{"531":1}}],["调试困难",{"2":{"292":1}}],["调试和维护",{"2":{"292":1}}],["调试复杂",{"2":{"287":1}}],["调试体验",{"2":{"226":1}}],["调试能力和配套的质量保障工具",{"2":{"226":1}}],["调试的问题",{"2":{"217":1}}],["调试时出现冗余代码",{"2":{"217":1}}],["调试时",{"2":{"217":1}}],["调试代码",{"0":{"217":1}}],["调试与优化",{"0":{"198":1},"1":{"199":1}}],["调用具体",{"2":{"853":1}}],["调用到",{"2":{"843":1}}],["调用各种",{"2":{"785":1}}],["调用能力",{"2":{"784":1}}],["调用开始",{"2":{"658":1}}],["调用拓扑",{"0":{"796":1},"2":{"649":1,"679":1,"708":1,"736":1,"764":1,"853":1,"883":1}}],["调用真的必要吗",{"2":{"590":1}}],["调用相关相关搜索工具查找素材后深度思考",{"2":{"506":1}}],["调用图像理解工具准确识别题目内容",{"2":{"494":1}}],["调用常规业务系统",{"2":{"439":1}}],["调用第三方",{"2":{"439":1}}],["调用工具",{"2":{"420":1}}],["调用高度自动化的原子能力",{"2":{"414":2}}],["调用在外部系统中产生影响",{"2":{"411":1}}],["调用或代码执行",{"2":{"408":1}}],["调用少量标准工具",{"2":{"403":1}}],["调用商品子应用的服务",{"2":{"288":1}}],["调用后端",{"2":{"281":1}}],["调用后会断开",{"2":{"175":1}}],["调用基类构造函数",{"2":{"269":1}}],["调用返回泛型响应",{"2":{"260":1}}],["调用方只需",{"2":{"312":1}}],["调用方式",{"2":{"258":3}}],["调用方一看就知道需要处理两种结果",{"2":{"246":1}}],["调用者无需关心id生成方式",{"2":{"196":1}}],["调用者可通过执行此函数主动断开连接",{"2":{"175":1}}],["调用结果状态",{"2":{"196":1}}],["调用标准",{"2":{"115":1}}],["调用数据接口",{"2":{"43":1}}],["调用",{"2":{"16":1,"59":1,"82":1,"92":1,"169":1,"342":1,"411":1,"489":1,"490":1,"523":1,"533":1,"640":1,"652":1,"736":3,"761":1,"768":1,"853":2}}],["调用获取动态数据",{"2":{"14":1}}],["gmail",{"2":{"905":1}}],["gh",{"2":{"790":1,"811":1}}],["ghost",{"2":{"21":1}}],["gif",{"2":{"762":1}}],["gifs",{"2":{"762":1}}],["gitattributes",{"2":{"881":1}}],["gitignore",{"2":{"570":2,"571":1,"573":1,"596":1,"762":1,"823":1,"881":1}}],["gitlab",{"2":{"132":1}}],["git",{"0":{"451":1},"2":{"29":6,"142":1,"143":1,"436":1,"451":3,"567":1,"568":1,"570":2,"571":1,"581":3,"583":1,"596":1,"695":2,"751":2,"762":1,"823":1,"880":1,"881":5,"883":1,"896":1,"898":1}}],["github",{"2":{"19":1,"29":3,"132":1,"343":3,"345":4,"414":1,"439":1,"455":1,"467":1,"477":1,"567":1,"568":1,"636":2,"677":2,"695":1,"706":2,"734":2,"751":1,"755":1,"762":2,"792":2,"823":3,"874":1,"881":2,"899":1,"905":2}}],["gc",{"2":{"757":1}}],["gctime",{"2":{"104":2,"110":1}}],["g",{"2":{"567":1,"683":1,"768":1,"810":1}}],["gltf",{"2":{"734":3}}],["gltfloader",{"2":{"733":2}}],["gl",{"2":{"734":5,"739":1}}],["glbufferattribute",{"2":{"734":1}}],["glsl或wgsl",{"2":{"737":1}}],["glslnodebuilder",{"2":{"733":1,"736":1,"741":1}}],["glsl",{"2":{"729":1,"730":2,"732":1,"733":3,"734":1,"739":1,"741":2,"742":2}}],["glm",{"2":{"512":3,"519":1,"522":4,"523":1,"549":1,"559":1}}],["glob",{"2":{"203":2,"470":2,"484":1,"591":1,"594":1}}],["globalthis",{"2":{"792":1,"797":1,"800":2}}],["globaldata",{"2":{"776":3}}],["globaldefault",{"2":{"706":1}}],["globalmodel",{"2":{"704":1,"705":1,"706":1,"708":1,"709":2,"719":1}}],["globalvars",{"2":{"653":1}}],["globalvarclient",{"2":{"646":1}}],["globalvar",{"2":{"646":1,"647":1}}],["global",{"2":{"106":1,"240":1,"274":1,"646":1,"677":1,"679":1,"680":1,"705":2,"706":1,"715":1,"924":1,"931":1}}],["gpgpu",{"2":{"734":3}}],["gpt5",{"2":{"553":1}}],["gpts",{"2":{"511":1}}],["gpt",{"2":{"375":1,"511":1,"521":4,"523":5,"549":1,"550":1,"564":1,"567":2,"843":1,"857":1,"860":3,"868":1}}],["gpubufferhandle",{"2":{"748":1}}],["gputexturehandle",{"2":{"748":1}}],["gpudevice",{"2":{"739":1}}],["gpu",{"2":{"136":1,"138":4,"142":1,"143":1,"523":3,"551":2,"672":1,"673":1,"728":1,"730":1,"733":2,"734":9,"737":4,"739":2,"740":1,"745":1,"748":2}}],["goal",{"2":{"895":1}}],["goto",{"2":{"797":1,"799":1,"806":1}}],["gotoandplay",{"2":{"776":1}}],["gotoandstop",{"2":{"767":1,"776":1}}],["gotchas",{"2":{"573":1}}],["golang",{"2":{"552":1}}],["golden",{"2":{"550":2}}],["goodbye",{"2":{"489":1}}],["google",{"2":{"128":1,"348":1,"349":2,"353":1,"354":2,"439":1,"511":3,"515":3,"518":5,"521":5,"842":1,"847":1,"848":2,"849":2}}],["go",{"2":{"342":1,"553":1,"562":2,"881":2}}],["god",{"2":{"327":1}}],["gulp",{"2":{"677":1}}],["gulpfile",{"2":{"677":1}}],["guard",{"2":{"275":3}}],["guards",{"2":{"274":1,"275":2}}],["guide",{"2":{"65":1,"518":1,"586":3,"792":1}}],["gzipped",{"2":{"110":2}}],["geometries",{"2":{"733":1,"734":2,"748":1}}],["geometry+material",{"2":{"734":1}}],["geometry",{"2":{"730":1,"734":1,"740":1,"748":1,"753":2}}],["geojson",{"2":{"706":3,"720":1}}],["geo",{"2":{"706":2,"714":2}}],["gemma",{"2":{"523":1}}],["gemini3",{"2":{"515":1,"903":1}}],["gemini",{"2":{"510":3,"511":4,"515":1,"518":2,"519":1,"521":5,"523":4,"549":1,"564":1,"567":1,"880":1,"881":6,"883":1,"887":1,"898":1,"903":1}}],["general",{"2":{"414":1}}],["generative",{"2":{"518":1,"543":2}}],["generation",{"2":{"42":1,"75":1,"110":1,"412":1}}],["generatetextonfinishcallback",{"2":{"867":1}}],["generatetextonstepfinishcallback",{"2":{"867":1}}],["generatetextonstepstartcallback",{"2":{"867":1}}],["generatetextonstartcallback",{"2":{"867":1}}],["generatetextresult",{"2":{"853":1,"854":1,"856":1,"867":1}}],["generatetext",{"0":{"856":1,"863":1},"2":{"843":2,"847":2,"849":1,"851":1,"853":4,"854":3,"856":2,"859":1,"860":1,"867":2,"868":1}}],["generatedfglut",{"2":{"734":1}}],["generatemetadata",{"2":{"81":2,"82":2}}],["generate",{"2":{"28":1,"43":1,"138":1,"733":1,"736":1,"741":4,"746":1,"748":1,"848":2,"850":3,"853":1}}],["generatestaticparams",{"2":{"27":1,"42":1}}],["generics",{"2":{"252":1,"261":1}}],["getformstate",{"2":{"806":1}}],["getformat",{"2":{"733":1}}],["getformattedtotal",{"2":{"281":1}}],["getfontproperties",{"2":{"762":1}}],["getworldscale",{"2":{"740":1,"748":1}}],["getworldquaternion",{"2":{"740":1,"748":1}}],["getworldposition",{"2":{"740":1,"748":1}}],["getwidth",{"2":{"705":1,"719":1}}],["getoption",{"2":{"719":1}}],["getzr",{"2":{"719":1}}],["getheaders",{"2":{"857":1}}],["getheight",{"2":{"719":1}}],["gethitfunc",{"2":{"692":1}}],["getvisual",{"2":{"713":1,"719":1}}],["getvalue",{"2":{"281":1,"743":1,"769":2,"770":3,"776":2}}],["getuid",{"2":{"706":1}}],["getuser",{"2":{"28":1,"247":3,"327":2,"330":4}}],["getduration",{"2":{"776":1}}],["getdimension",{"2":{"719":1}}],["getdataurl",{"2":{"719":1}}],["getdata",{"2":{"705":1}}],["getdatabaseconnection",{"2":{"301":4}}],["getdom",{"2":{"705":1}}],["getmatte",{"2":{"776":1}}],["getmodifier",{"2":{"771":1,"776":1}}],["getmodel",{"2":{"705":1}}],["getmethod",{"2":{"733":1}}],["getmessages",{"2":{"168":4,"830":1,"833":1,"840":1}}],["getrandomcolor",{"2":{"693":1}}],["getregistry",{"2":{"800":1}}],["getregisteredanimations",{"2":{"777":1}}],["getregisteredrenderer",{"2":{"768":1,"776":1}}],["getrenderer",{"2":{"768":2,"776":1}}],["getrendertarget",{"2":{"748":1}}],["getrect",{"2":{"714":1}}],["getresult",{"2":{"305":3}}],["getreader",{"2":{"166":2,"168":1}}],["getinterceptedrequests",{"2":{"806":1}}],["getinterface",{"2":{"769":1}}],["getintersection",{"2":{"680":1,"683":2,"684":1,"692":2}}],["getitemmodel",{"2":{"719":1}}],["getitem",{"2":{"713":1}}],["getimpl",{"2":{"706":1}}],["getimagedata",{"2":{"683":1}}],["getshapekey",{"2":{"692":1}}],["getselfrect",{"2":{"692":1}}],["getset",{"2":{"677":1}}],["getsize",{"2":{"692":1}}],["getstringvalidator",{"2":{"677":1}}],["getstate",{"2":{"289":1}}],["getstaticprops",{"2":{"27":1,"42":1,"46":1}}],["getclientrect",{"2":{"692":2}}],["getcookies",{"2":{"806":1}}],["getconnecteddataurl",{"2":{"719":1}}],["getcontext",{"2":{"683":1}}],["getcomponent",{"2":{"661":1}}],["getchildren",{"2":{"663":1,"692":1}}],["getchildbyid",{"2":{"663":1}}],["getcurrenturl",{"2":{"806":1}}],["getcurrentuser",{"2":{"28":3}}],["getcurrency",{"2":{"281":1}}],["getter",{"2":{"679":1,"682":2,"685":2}}],["gettersetter",{"2":{"677":1}}],["gettotalitemcount",{"2":{"281":1}}],["getting",{"2":{"65":1}}],["getnumbervalidator",{"2":{"677":1,"685":1}}],["getnumberlength",{"2":{"265":4}}],["getname",{"2":{"185":1}}],["getelementbypath",{"2":{"776":2}}],["getelementbyid",{"2":{"668":1,"724":1,"776":1,"781":1}}],["getecdata",{"2":{"706":1}}],["getenv",{"2":{"649":1}}],["getentries",{"2":{"26":2}}],["getemail",{"2":{"185":1}}],["getperformargs",{"2":{"712":1}}],["getpet",{"2":{"229":2}}],["getpointerposition",{"2":{"692":1}}],["getposts",{"2":{"81":2,"82":1}}],["getpageid",{"2":{"662":1}}],["getprop",{"2":{"770":1}}],["getproperty",{"2":{"263":1,"268":4}}],["getproducts",{"2":{"288":1,"327":1}}],["getproductbyid",{"2":{"288":1}}],["getphone",{"2":{"185":1}}],["getactivepage",{"2":{"806":1}}],["getaxes",{"2":{"714":1}}],["getapi",{"2":{"663":1}}],["getamount",{"2":{"281":1}}],["getallintersections",{"2":{"692":1}}],["getall",{"2":{"261":3}}],["getallblogposts",{"2":{"26":1,"27":3}}],["getaddress",{"2":{"184":1}}],["getlines",{"2":{"168":3,"830":1,"833":2,"840":1}}],["getlongtaskstatus",{"2":{"152":1}}],["getbooleanvalidator",{"2":{"677":1}}],["getbytes",{"2":{"168":3,"830":1,"832":1,"833":1,"840":1}}],["getblogpostbyslug",{"2":{"26":1,"27":2}}],["getquerydata",{"2":{"108":1}}],["get",{"2":{"83":1,"118":1,"124":1,"137":1,"139":1,"143":3,"152":2,"160":3,"165":1,"166":2,"167":1,"169":1,"175":1,"178":1,"248":1,"342":1,"685":1,"705":1,"714":1,"719":1,"739":1,"748":1,"795":1,"796":1,"801":5,"807":5,"814":1,"820":1}}],["gaugeview",{"2":{"706":1}}],["gaugeseries",{"2":{"706":1}}],["gauge",{"2":{"706":1}}],["gamma",{"2":{"515":4}}],["gate>",{"2":{"888":1}}],["gate等",{"2":{"877":1}}],["gate",{"2":{"876":1,"879":1,"881":1,"887":1,"888":1}}],["gateway",{"2":{"137":1,"153":1,"155":1,"280":1}}],["gatin",{"2":{"762":2}}],["gatsby",{"2":{"14":1,"18":1,"42":1}}],["gap",{"2":{"27":1}}],["grunt",{"2":{"762":2}}],["grouping",{"2":{"676":1}}],["groupid>",{"2":{"193":1}}],["groupid>org",{"2":{"193":1}}],["group",{"2":{"672":1,"675":1,"676":2,"677":2,"679":1,"680":4,"692":1,"693":4,"705":1,"719":1,"734":1,"748":2}}],["groq",{"2":{"523":3}}],["grok",{"2":{"510":1,"511":3}}],["green",{"2":{"489":1,"881":1,"890":3}}],["grep",{"2":{"470":1,"591":1,"594":1}}],["gradientproperty",{"2":{"762":1}}],["graphs",{"2":{"881":1}}],["graphseries",{"2":{"706":1}}],["graphviz",{"2":{"877":1,"881":2}}],["graphview",{"2":{"706":1}}],["graphic",{"2":{"706":3}}],["graph",{"0":{"740":1},"2":{"314":1,"536":1,"675":1,"676":2,"706":4,"732":1,"733":1,"741":2,"887":2}}],["graphql",{"2":{"18":1,"342":6}}],["grayscale",{"2":{"677":1,"679":1}}],["gray",{"2":{"27":2,"28":2,"488":1,"925":2,"927":3}}],["gridhelper",{"2":{"734":1}}],["gridcomponent",{"2":{"725":2}}],["gridrect",{"2":{"714":1}}],["gridsimple",{"2":{"706":1}}],["grid",{"2":{"27":1,"647":2,"706":2,"714":1}}],["gt",{"2":{"1":3,"5":3,"7":4,"65":2,"73":1,"81":2,"84":4,"86":1,"87":1,"97":1,"108":4,"114":2,"160":1,"163":3,"200":1,"238":2,"250":3,"254":4,"255":3,"256":7,"263":11,"270":2,"271":1,"297":1,"320":1,"387":2,"448":1,"475":2,"484":4,"494":2,"503":1,"540":3,"553":2,"570":1,"622":3,"675":3,"685":3,"787":1,"797":1,"809":1,"847":1,"856":2,"858":1,"879":1,"888":1,"922":1,"924":3,"928":1,"929":1,"931":1,"932":2,"933":1,"934":2,"943":4,"947":1,"964":1}}],["所关注的焦点超越了如何对事务进行有效而机械的管理",{"2":{"907":1}}],["所见即所得",{"2":{"755":1}}],["所束缚",{"2":{"393":1}}],["所迷惑",{"2":{"390":1}}],["所谓",{"2":{"609":1,"610":1,"909":2,"935":1}}],["所谓渐进式披露与动态发现",{"2":{"443":1}}],["所谓增强回路",{"2":{"386":1}}],["所谓锻炼洞察力",{"2":{"382":1}}],["所谓的",{"2":{"327":1}}],["所以适应混合工作制",{"2":{"956":1}}],["所以读书与自我规划学习也是笔者的选择",{"2":{"945":1}}],["所以笔者认为",{"2":{"957":1}}],["所以笔者冒出了一个想法",{"2":{"954":1}}],["所以笔者结合自身经历和健康知识",{"2":{"941":1}}],["所以笔者这里也未必能分享出多么稀奇古怪的见解",{"2":{"936":1}}],["所以在接近康复出院的时候就开始跟医生",{"2":{"940":1}}],["所以标题也命名为",{"2":{"935":1}}],["所以经常会固执坚守错误的认知",{"2":{"908":1}}],["所以",{"2":{"610":1,"914":1,"935":1,"946":1,"958":1,"961":1}}],["所以你当然可以访问所有这些属性",{"2":{"239":1}}],["所以结果是",{"2":{"227":1}}],["所以不能当作完整行处理",{"2":{"166":1}}],["所有视图表现全量转化为纯文本类名",{"2":{"928":1}}],["所有按钮都有的属性",{"2":{"927":1}}],["所有任务完成",{"2":{"900":1}}],["所有任务完成后",{"2":{"884":1,"896":1}}],["所有错误都被视为可重试",{"2":{"839":1}}],["所有参数必须编码在",{"2":{"814":1}}],["所有修饰器继承自",{"2":{"771":1}}],["所有渲染器+表达式+效果",{"2":{"762":1}}],["所有入口都引用",{"2":{"736":1}}],["所有功能模块",{"2":{"711":1}}],["所有功能",{"2":{"704":1}}],["所有节点的抽象基类",{"0":{"682":1}}],["所有可渲染形状的基类",{"2":{"680":1}}],["所有可能字符串值",{"2":{"227":1}}],["所有图形对象的基类契约",{"2":{"692":1}}],["所有图形对象的抽象基类",{"2":{"677":1,"680":1}}],["所有图形对象以树形节点组织",{"2":{"675":1}}],["所有用户交互",{"2":{"654":1}}],["所有导出函数必须有",{"2":{"578":1}}],["所有处理函数返回",{"2":{"576":1}}],["所有函数必须有类型注解",{"2":{"573":1}}],["所有知识点",{"2":{"494":1}}],["所有提交信息均能通过",{"2":{"451":1}}],["所有引用处都会报错",{"2":{"311":1}}],["所有变量和函数都共享全局作用域",{"2":{"298":1}}],["所有实体仓储都实现这个接口",{"2":{"256":1}}],["所有",{"2":{"239":1,"254":1,"472":1,"662":1,"663":1,"712":1,"767":1,"850":1,"866":1}}],["所有属性缺一不可",{"2":{"236":1}}],["所有数字的集合",{"2":{"227":1}}],["所有数字值的集合",{"2":{"227":1}}],["所有字符串值的集合",{"2":{"227":1}}],["所有子页面自动继承这一结构",{"2":{"79":1}}],["所有子组件都被迫成为",{"2":{"74":1}}],["所有页面跳转均通过此方法",{"2":{"662":1}}],["所有页面都在构建时生成",{"2":{"65":1}}],["所有页面已通过构建工具",{"2":{"14":1}}],["所需的基础能力",{"2":{"71":1}}],["所倡导的",{"2":{"11":1}}],["核心策略",{"2":{"929":1,"930":1,"931":1,"932":1}}],["核心武器",{"2":{"928":2}}],["核心隔离原理",{"2":{"928":1}}],["核心驱动力",{"2":{"926":1}}],["核心原因可归纳为以下四点",{"2":{"926":1}}],["核心原理",{"0":{"35":1,"39":1,"43":1,"47":1,"52":1,"65":1,"117":1,"121":1,"126":1,"131":1},"2":{"159":1}}],["核心文本生成引擎",{"2":{"850":1}}],["核心文件",{"2":{"442":1,"791":1}}],["核心控制器",{"2":{"830":1}}],["核心实现",{"2":{"823":1}}],["核心实践",{"0":{"482":1},"1":{"483":1,"484":1}}],["核心实践原则",{"0":{"94":1}}],["核心属性",{"2":{"797":1}}],["核心方法",{"2":{"770":1}}],["核心架构包括",{"2":{"769":1}}],["核心分为五个层次",{"2":{"760":1}}],["核心源码目录",{"2":{"755":1}}],["核心导出",{"2":{"736":2}}],["核心库单元测试",{"2":{"734":1}}],["核心库源代码",{"2":{"734":1}}],["核心渲染逻辑",{"2":{"734":1}}],["核心渲染入口",{"2":{"649":1}}],["核心节点",{"2":{"734":1}}],["核心数据流转时序",{"0":{"834":1},"1":{"835":1,"836":1,"837":1}}],["核心数据结构",{"2":{"832":1}}],["核心数据模型与基础设施",{"2":{"734":1}}],["核心数据容器",{"2":{"706":1,"713":1}}],["核心调度器",{"2":{"734":1}}],["核心入口",{"2":{"734":1}}],["核心职责",{"2":{"733":1,"761":1}}],["核心小巧",{"2":{"702":1}}],["核心类型定义",{"2":{"792":1}}],["核心类",{"2":{"693":1}}],["核心内部模块契约定义",{"2":{"776":1}}],["核心内部模块契约",{"0":{"692":1,"719":1,"748":1,"776":1,"806":1,"866":1,"895":1}}],["核心基础组件",{"2":{"647":1}}],["核心基础设施层",{"2":{"645":1,"646":1,"647":1}}],["核心基建",{"2":{"647":81,"677":21,"706":62,"734":14,"762":79,"792":32,"849":4,"881":26}}],["核心维护交给",{"2":{"628":2}}],["核心问题",{"2":{"609":1}}],["核心要点",{"2":{"555":1,"556":1,"557":1}}],["核心要素与关键技术",{"0":{"408":1},"1":{"409":1,"410":1,"411":1,"412":1}}],["核心壁垒",{"2":{"540":1,"544":1,"551":1}}],["核心设计模式速查表",{"0":{"851":1}}],["核心设计模式",{"2":{"767":1}}],["核心设计模式是节点图",{"2":{"741":1}}],["核心设计模式为",{"2":{"645":1}}],["核心设计理念是",{"2":{"675":1}}],["核心设计是安全沙箱",{"2":{"655":1}}],["核心设计",{"0":{"494":1}}],["核心设计与职责分配",{"0":{"470":1}}],["核心设计与功能对比分析",{"0":{"110":1}}],["核心在于建立基础的产品审美与单点工具使用能力",{"2":{"459":1}}],["核心工具函数",{"2":{"927":1}}],["核心工具函数库",{"2":{"647":1}}],["核心工作流",{"2":{"451":1}}],["核心工程特性",{"2":{"344":1}}],["核心编写原则",{"0":{"445":1}}],["核心编译选项的详细注释说明",{"2":{"203":1}}],["核心机制与流程",{"0":{"443":1}}],["核心机制与运行规则",{"0":{"148":1}}],["核心指令注入当前上下文",{"2":{"443":1}}],["核心指令",{"2":{"442":1}}],["核心辨析",{"2":{"437":1,"438":1,"439":1}}],["核心组件中的记忆模块的一种具体实现",{"2":{"437":1}}],["核心组件与工作机制层出不穷",{"2":{"434":1}}],["核心运行机制",{"0":{"429":1}}],["核心运作流也非常简洁",{"2":{"97":1}}],["核心能力一览",{"2":{"632":1,"636":1}}],["核心能力标签",{"2":{"511":1,"512":1,"515":1,"518":1}}],["核心能力矩阵与",{"0":{"459":1}}],["核心能力",{"2":{"411":1,"553":1}}],["核心功能",{"2":{"410":2,"414":1}}],["核心特点",{"2":{"921":1,"922":1,"923":1,"924":1,"925":1,"927":1}}],["核心特色",{"2":{"565":1}}],["核心特征",{"2":{"403":1}}],["核心特性",{"0":{"15":1}}],["核心价值",{"0":{"403":1},"2":{"561":1,"564":1,"567":1}}],["核心目标不仅是体验更好",{"2":{"400":1}}],["核心挑战是",{"2":{"367":1}}],["核心洞察",{"2":{"367":1,"463":1}}],["核心关注首字生成时间",{"2":{"353":1}}],["核心模块设计",{"0":{"831":1,"855":1},"1":{"832":1,"833":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1}}],["核心模块设计详解与关键数据流时序",{"2":{"636":1}}],["核心模块职责",{"0":{"824":1}}],["核心模块入口",{"2":{"762":1}}],["核心模块组装器",{"2":{"677":1}}],["核心模块详解",{"0":{"651":1,"681":1,"710":1,"738":1,"766":1,"798":1,"885":1},"1":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"711":1,"712":1,"713":1,"714":1,"715":1,"739":1,"740":1,"741":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"799":1,"800":1,"801":1,"886":1,"887":1,"888":1,"889":1,"890":1}}],["核心模块",{"2":{"334":1}}],["核心模块选项",{"2":{"322":1}}],["核心思想是通过扩展原生",{"2":{"921":1}}],["核心思想",{"2":{"327":1,"341":1,"921":1,"922":1,"923":1,"924":1,"925":1,"927":1}}],["核心思想与流程",{"0":{"151":1}}],["核心规则",{"2":{"314":1,"472":1}}],["核心规范与实践解析",{"2":{"272":1}}],["核心场景",{"2":{"313":1,"785":1,"843":1}}],["核心痛点解决",{"2":{"670":1,"784":1}}],["核心痛点",{"2":{"297":1}}],["核心建议",{"2":{"292":1}}],["核心任务",{"2":{"282":1}}],["核心层负责提示词标准化",{"2":{"853":1}}],["核心层",{"2":{"279":1}}],["核心语法与实践",{"2":{"272":1}}],["核心依赖",{"2":{"221":1,"699":1}}],["核心概念解析",{"0":{"206":1},"1":{"207":1,"208":1,"209":1}}],["核心概念与核心特性",{"0":{"13":1},"1":{"14":1,"15":1,"16":1}}],["核心配置梳理",{"0":{"203":1}}],["核心业务场景",{"2":{"700":1,"756":1}}],["核心业务实体与关联",{"0":{"650":1,"680":1,"709":1,"737":1,"765":1,"797":1,"854":1,"884":1}}],["核心业务流程使用长轮询",{"2":{"157":1}}],["核心业务数据默认保鲜",{"2":{"106":1}}],["核心逻辑",{"0":{"488":1},"2":{"143":1,"304":1,"305":1,"307":1,"365":1,"366":1,"402":1,"414":1,"586":1}}],["核心逻辑是客户端定时向服务器发起请求",{"2":{"135":1}}],["核心诉求是首屏快",{"2":{"112":1}}],["核心是围绕",{"2":{"110":1}}],["核心哲学",{"2":{"110":1}}],["核心引擎层",{"2":{"704":1,"705":1,"706":1}}],["核心引擎提供扩展注册机制和调度管道",{"2":{"704":1}}],["核心引擎与分身",{"2":{"553":1}}],["核心引擎",{"2":{"104":1,"647":1,"708":1}}],["核心定位与特征",{"2":{"342":1}}],["核心定位",{"0":{"349":1},"2":{"103":1,"523":1,"562":1}}],["核心定义",{"0":{"14":1,"252":1},"2":{"460":1,"461":1,"462":1}}],["核心技术亮点",{"0":{"641":1,"672":1,"701":1,"729":1,"757":1,"786":1,"844":1,"876":1}}],["核心技术栈清单",{"2":{"845":1}}],["核心技术栈",{"0":{"17":1},"1":{"18":1,"19":1,"20":1,"21":1}}],["核心技巧",{"2":{"101":1}}],["核心应用场景解析",{"0":{"98":1,"105":1},"1":{"99":1,"100":1,"101":1,"106":1,"107":1,"108":1}}],["核心包非常小",{"2":{"97":1}}],["核心利用的能力",{"2":{"92":1}}],["核心流程如下",{"2":{"86":1}}],["核心",{"0":{"27":1,"339":1},"2":{"27":1,"100":1,"647":2,"706":1,"734":1,"847":1,"848":1,"849":1,"872":1}}],["核心作用及触发时机",{"2":{"442":1}}],["核心作用与使用场景",{"2":{"103":1}}],["核心作用",{"2":{"21":1}}],["核心优势",{"2":{"18":1,"255":1,"308":1,"342":1,"521":1,"522":1,"568":1,"928":1}}],["核心构建工具",{"0":{"18":1}}],["核心标准",{"2":{"1":1}}],["jit",{"2":{"928":1,"930":1,"932":1}}],["jira",{"2":{"418":1}}],["jpeg",{"2":{"719":1}}],["jpg",{"2":{"677":1}}],["justify",{"2":{"927":1}}],["just",{"2":{"887":1}}],["jump",{"2":{"677":1}}],["jumpto",{"2":{"649":1,"654":1,"661":1,"662":1}}],["judge",{"2":{"550":2}}],["j",{"2":{"372":1}}],["jesse",{"2":{"874":1}}],["jest",{"0":{"220":1,"222":1},"1":{"221":1,"222":1,"223":1,"224":1,"225":1},"2":{"220":2,"221":4,"222":5,"224":3,"225":3,"226":1,"667":1,"706":1}}],["jelly技术周刊",{"2":{"346":1}}],["jquery",{"2":{"306":1,"320":1}}],["john",{"2":{"289":2,"318":2}}],["join",{"2":{"267":1}}],["jotai",{"2":{"6":1,"95":1,"341":2}}],["jasmine",{"2":{"821":1,"823":2,"826":1}}],["jackwener",{"2":{"810":1}}],["jar",{"2":{"203":1}}],["javapublic",{"2":{"185":1}}],["javascriptexport",{"2":{"925":1}}],["javascriptimport",{"2":{"753":1}}],["javascriptonmessage",{"2":{"172":1}}],["javascriptlet",{"2":{"171":1}}],["javascriptconst",{"2":{"163":1,"164":1,"173":1,"174":1}}],["javascript",{"2":{"16":1,"34":1,"71":1,"73":1,"166":1,"168":3,"202":1,"203":2,"216":1,"217":3,"220":1,"254":1,"255":1,"272":2,"288":3,"295":3,"298":3,"300":1,"301":1,"302":1,"304":3,"305":1,"306":1,"307":2,"309":1,"310":1,"311":1,"312":1,"313":1,"314":1,"315":5,"316":1,"317":1,"321":1,"327":1,"328":1,"330":1,"333":1,"334":1,"338":6,"339":2,"342":1,"343":2,"344":2,"345":1,"346":2,"442":1,"699":1,"702":1,"728":1,"741":1,"758":1,"762":1,"843":1,"845":1,"922":3,"927":2}}],["java",{"2":{"15":1,"184":1,"190":4,"191":2,"194":1,"203":1,"342":1,"552":1}}],["jamstack",{"0":{"13":1,"17":1,"22":1,"30":1,"31":1},"1":{"14":1,"15":1,"16":1,"18":1,"19":1,"20":1,"21":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1},"2":{"14":1,"15":1,"16":5,"17":1,"18":1,"19":1,"20":1,"25":2,"29":3,"31":1,"32":3,"345":1}}],["jsm",{"2":{"734":1}}],["jsdoc",{"2":{"578":1,"677":3,"734":2}}],["js中的模块化实践",{"2":{"272":1}}],["jsxraw",{"2":{"203":1}}],["jsxfragmentfactory",{"2":{"203":1}}],["jsxfactory",{"2":{"203":1}}],["jsxfunction",{"2":{"101":1}}],["jsx",{"2":{"99":1,"106":1,"202":1,"203":12,"204":3,"214":2,"216":2,"661":1,"922":1,"923":1,"925":3,"927":1,"928":3,"930":1,"931":1,"934":1}}],["jsximport",{"2":{"97":1,"100":1,"103":1,"107":1,"108":1}}],["json|",{"2":{"880":1}}],["jsonschema7",{"2":{"866":1}}],["jsonschema",{"2":{"866":1}}],["json解析",{"2":{"762":1}}],["json",{"0":{"202":1,"203":1,"212":1,"213":1,"214":1,"215":1,"593":1,"596":1},"1":{"203":1,"204":1,"594":1,"595":1,"596":1},"2":{"81":1,"83":2,"97":1,"99":2,"103":1,"108":1,"124":1,"149":1,"152":2,"153":1,"160":2,"166":4,"167":1,"169":2,"172":1,"175":3,"177":1,"178":2,"179":1,"196":1,"197":1,"202":2,"203":5,"204":4,"205":1,"209":2,"210":1,"211":5,"212":1,"213":2,"214":2,"215":2,"216":10,"222":1,"224":2,"226":1,"232":1,"256":1,"279":1,"280":2,"290":9,"308":2,"322":2,"333":2,"334":1,"335":2,"342":2,"435":1,"482":1,"570":4,"593":1,"594":1,"596":3,"597":1,"639":3,"640":4,"641":1,"645":2,"647":6,"650":3,"656":1,"661":1,"662":1,"668":2,"677":4,"706":2,"734":4,"755":3,"756":1,"761":1,"762":6,"769":1,"770":3,"773":2,"774":1,"781":2,"782":1,"787":1,"792":6,"806":1,"807":3,"819":2,"823":5,"844":1,"847":2,"848":1,"849":2,"856":1,"866":2,"880":8,"881":10,"884":1,"886":5,"895":3}}],["jsonplaceholder",{"2":{"81":1,"83":1,"90":1}}],["js",{"0":{"25":1,"68":1,"72":1,"92":1,"93":1,"304":1,"321":1,"334":1,"741":1,"922":1},"1":{"69":1,"70":1,"71":1,"73":1,"74":1},"2":{"14":2,"18":3,"19":1,"20":3,"22":1,"23":1,"25":3,"27":1,"28":1,"29":1,"32":1,"34":1,"35":3,"37":1,"38":2,"39":3,"42":1,"46":2,"47":1,"53":2,"57":2,"65":4,"66":1,"68":1,"69":1,"71":6,"72":4,"73":1,"75":2,"76":1,"80":1,"83":1,"84":2,"85":2,"86":2,"90":2,"93":2,"94":1,"152":1,"202":1,"203":9,"204":1,"215":2,"222":1,"272":1,"280":2,"286":1,"288":7,"290":4,"291":1,"293":1,"295":5,"298":1,"300":3,"301":3,"302":3,"304":3,"306":1,"307":2,"308":2,"310":5,"311":4,"312":6,"313":3,"314":15,"315":31,"318":3,"319":1,"321":1,"322":2,"324":1,"325":3,"326":1,"327":3,"330":2,"333":4,"334":9,"335":2,"337":3,"338":2,"339":1,"341":2,"342":7,"343":2,"344":11,"346":1,"480":1,"542":1,"543":1,"548":2,"552":1,"561":1,"562":2,"573":2,"639":1,"642":2,"647":2,"665":1,"670":1,"671":1,"672":2,"673":1,"677":3,"682":1,"696":1,"702":1,"706":7,"722":1,"728":2,"732":1,"733":1,"734":212,"736":11,"741":2,"745":1,"749":1,"751":3,"755":3,"761":1,"762":185,"764":11,"767":2,"768":1,"769":5,"770":3,"771":1,"778":23,"781":2,"787":2,"790":1,"792":10,"796":1,"799":1,"800":1,"801":1,"806":3,"809":1,"823":2,"828":2,"843":2,"845":3,"870":1,"880":1,"881":6,"888":1,"920":1,"922":7,"923":2,"924":1,"925":3,"927":3,"928":13,"929":1,"932":1,"934":1}}],["用这么多空闲时间来专注地完成一件正确的事情是没有大问题的",{"2":{"942":1}}],["用时髦的说法也叫",{"2":{"935":1}}],["用架构引入的合理复杂度",{"2":{"934":1}}],["用写",{"2":{"927":1}}],["用拼积木的方式写",{"2":{"927":1}}],["用嵌套减少重复选择器",{"2":{"921":1}}],["用一套",{"2":{"842":1}}],["用一句话总结",{"2":{"585":1}}],["用途",{"2":{"821":1,"872":1}}],["用技能",{"2":{"588":1}}],["用命令",{"2":{"588":1}}],["用快捷键呼出",{"2":{"564":1}}],["用自然语言描述要改什么",{"2":{"564":1}}],["用自然语言描述界面",{"2":{"561":1}}],["用自然语言描述需求",{"2":{"559":1}}],["用自然语言",{"0":{"560":1},"1":{"561":1,"562":1}}],["用各种",{"2":{"553":1}}],["用标准化工具类拼装",{"2":{"930":1}}],["用标准的",{"2":{"552":1}}],["用标志位防止",{"2":{"175":1}}],["用优雅的工程设计兜底",{"2":{"543":1}}],["用量陷阱",{"2":{"523":1}}],["用免费额度把",{"2":{"523":1}}],["用来帮助开发者快速理解项目架构",{"2":{"636":1}}],["用来释放你的带宽",{"2":{"462":1}}],["用来区分结构相同但语义不同的类型",{"2":{"247":1}}],["用现成的",{"2":{"459":1}}],["用渐进式披露管理知识",{"2":{"439":1}}],["用脚本封装能力",{"2":{"439":1}}],["用因果链连接变量",{"2":{"385":1}}],["用精湛的手艺和智能化的工具为他们扫除障碍",{"2":{"381":1}}],["用最低的执行成本",{"2":{"605":1}}],["用最传统的工程理性进行最严苛的审判",{"2":{"534":1}}],["用最小的产品闭环解决具体人群的痛点",{"2":{"465":1}}],["用最简单的技术栈",{"2":{"365":1}}],["用最少的代码实现核心逻辑",{"2":{"186":1}}],["用不妥协的真诚去深入探索",{"2":{"362":1}}],["用有意义的名称",{"2":{"263":1}}],["用简短的单字母",{"2":{"263":1}}],["用交叉类型组合独立的能力",{"2":{"250":1}}],["用可辨识联合处理",{"2":{"250":1}}],["用1个功能",{"2":{"194":1}}],["用换行连接",{"2":{"168":1}}],["用极致的静态换极致的性能",{"2":{"66":1}}],["用了",{"2":{"66":1}}],["用",{"0":{"378":2},"2":{"32":1,"86":1,"87":1,"166":1,"201":1,"250":2,"438":2,"440":3,"462":1,"465":1,"466":1,"515":1,"523":1,"552":1,"568":1,"577":1,"592":1,"597":1,"701":1,"769":1}}],["用静态资源的高性能",{"2":{"32":1}}],["用于锻炼上半身",{"2":{"960":1}}],["用于存储记录一些指标数据",{"2":{"960":1}}],["用于测量体重",{"2":{"960":1}}],["用于收集周末的日常事务",{"2":{"953":1}}],["用于收集工作日的日常事务",{"2":{"953":1}}],["用于指导自己的阅读实践",{"2":{"947":1}}],["用于匹配用户意图",{"2":{"895":1}}],["用于技能流程图",{"2":{"881":1}}],["用于技能措辞设计",{"2":{"881":1}}],["用于控制重试策略",{"2":{"839":1}}],["用于控制类型定义的来源",{"2":{"203":1}}],["用于联动",{"2":{"719":1}}],["用于跨系列计算",{"2":{"712":1}}],["用于全局事件分发和资源管理",{"2":{"684":1}}],["用于选中和变换其他节点",{"2":{"680":1}}],["用于识别",{"2":{"661":1}}],["用于调用",{"2":{"581":1}}],["用于调试",{"2":{"203":1}}],["用于检索古诗词典故与创作灵感",{"2":{"501":1}}],["用于获取相关背景信息",{"2":{"501":1}}],["用于查找相似题型",{"2":{"494":1}}],["用于后续的",{"2":{"489":1}}],["用于恢复会话历史",{"2":{"489":1}}],["用于处理即时性的问答任务",{"2":{"483":1}}],["用于处理跨块边界的行分割",{"2":{"166":1}}],["用于加载指定会话的历史记录",{"2":{"482":1}}],["用于直接与",{"2":{"482":1}}],["用于构建具有工具使用能力的",{"2":{"478":1}}],["用于构建单页应用",{"2":{"341":2}}],["用于将人类的",{"2":{"454":1}}],["用于统一输出规范",{"2":{"453":1}}],["用于快速确认该技能是否能解决当前意图",{"2":{"443":1}}],["用于更优雅地扩展",{"2":{"441":1}}],["用于管理应用的全局状态",{"2":{"341":1}}],["用于渲染网页内容",{"2":{"338":1}}],["用于在浏览器中发起",{"2":{"342":1}}],["用于在服务器端执行",{"2":{"338":1}}],["用于在",{"2":{"338":1}}],["用于描述网页的结构和内容",{"2":{"338":1}}],["用于解耦模块间的通信",{"2":{"302":1}}],["用于浏览器端的异步加载规范",{"2":{"298":1}}],["用于确保泛型参数只能是另一个泛型参数的属性名",{"2":{"268":1}}],["用于限制泛型参数必须是特定的基本类型或其子类型",{"2":{"265":1}}],["用于限制泛型参数的类型范围",{"2":{"264":1}}],["用于配置",{"2":{"482":1}}],["用于配置该子项目的编译选项",{"2":{"205":1}}],["用于配合",{"2":{"203":1}}],["用于创建",{"2":{"203":2}}],["用于为库提供类型定义",{"2":{"203":1}}],["用于验证响应是否符合预期",{"2":{"839":1}}],["用于验证响应状态和",{"2":{"169":1}}],["用于验证服务端返回的",{"2":{"175":1}}],["用于订阅服务端的任务执行进度流事件",{"2":{"175":1}}],["用于主动取消请求",{"2":{"169":1,"175":2}}],["用于逐块读取响应数据",{"2":{"166":1}}],["用于断线重连",{"2":{"164":1}}],["用于缓存标识",{"2":{"103":1}}],["用于发送",{"2":{"97":1}}],["用于",{"2":{"26":1,"203":3,"661":1,"706":2,"799":1,"895":1,"925":1}}],["用于实际编码",{"2":{"1":1}}],["用户报告一个",{"2":{"893":1}}],["用户向",{"2":{"892":1}}],["用户审查规格",{"2":{"888":1}}],["用户显式指令",{"2":{"887":1}}],["用户消息",{"2":{"883":1}}],["用户手动加载",{"2":{"877":1}}],["用户发送消息",{"2":{"864":1}}],["用户发起一次带工具的文本生成请求",{"2":{"863":1}}],["用户回调函数",{"2":{"830":1}}],["用户执行",{"2":{"803":1,"804":1}}],["用户目录",{"2":{"800":2}}],["用户适配器兼容性检查",{"2":{"795":1}}],["用户接口",{"2":{"741":1}}],["用户接口层",{"2":{"675":1}}],["用户按需引入",{"2":{"732":1}}],["用户拖拽一个形状从起点移动到终点",{"2":{"690":1}}],["用户拖拽组件到画布",{"2":{"656":1}}],["用户鼠标点击一个矩形",{"2":{"688":1}}],["用户点击一个",{"0":{"688":1}}],["用户通过",{"2":{"679":1,"708":1}}],["用户通过浏览器输入",{"2":{"33":1}}],["用户行为埋点追踪",{"2":{"662":1}}],["用户交互触发动作",{"2":{"659":1}}],["用户请求渲染一个页面",{"2":{"658":1}}],["用户请求一个",{"2":{"65":1}}],["用户调用",{"2":{"649":1,"689":1,"773":1}}],["用户调研",{"2":{"366":1}}],["用户管理",{"2":{"640":1}}],["用户管理功能",{"2":{"274":1}}],["用户画像与技术选型对比",{"2":{"636":1}}],["用户运营",{"2":{"617":1}}],["用户如何增长",{"2":{"556":1}}],["用户感知",{"2":{"556":1}}],["用户输入研究主题",{"2":{"471":1}}],["用户情绪",{"2":{"465":1}}],["用户洞察",{"2":{"462":1}}],["用户提供的定价点集中在价格歧视",{"2":{"397":1}}],["用户提供的素材中",{"2":{"391":1}}],["用户越多",{"2":{"386":1}}],["用户下一秒的皱眉",{"2":{"376":1}}],["用户说",{"2":{"366":2,"447":1,"449":1}}],["用户可能根本看不懂那些颜色代表什么",{"2":{"366":1}}],["用户不签到的损失是什么",{"2":{"366":1}}],["用户不会像你一样熟悉产品",{"2":{"366":1}}],["用户不必等最慢的组件完成就能看到内容",{"2":{"86":1}}],["用户要什么就给什么",{"2":{"366":1}}],["用户要什么给什么",{"2":{"366":1}}],["用户抱怨",{"2":{"366":2}}],["用户想要什么功能",{"2":{"366":1}}],["用户想要什么",{"2":{"366":1}}],["用户很痛苦",{"2":{"366":1}}],["用户价值",{"2":{"365":1}}],["用户价值洞察",{"2":{"363":1}}],["用户只需抛出一个宏大的目标",{"2":{"355":1}}],["用户得到答案后",{"2":{"350":1}}],["用户升级需谨慎",{"2":{"331":1}}],["用户子应用",{"2":{"290":1}}],["用户子应用更新用户信息",{"2":{"289":1}}],["用户子应用订阅事件",{"2":{"289":1}}],["用户子应用暴露用户信息和登录组件",{"2":{"288":1}}],["用户子应用配置",{"2":{"288":1}}],["用户上下文",{"2":{"280":2}}],["用户界面",{"2":{"280":1}}],["用户界面层",{"2":{"279":2,"280":1}}],["用户模块",{"2":{"275":1}}],["用户状态未激活",{"2":{"199":1}}],["用户id",{"2":{"196":1}}],["用户个人资料页",{"2":{"184":1}}],["用户体验要求较高",{"2":{"156":1}}],["用户就要多等数秒才能看到结果",{"2":{"149":1}}],["用户在页面上初始化一个折线图",{"2":{"717":1}}],["用户在哪里会困惑",{"2":{"460":1}}],["用户在地铁中使用手机生图",{"2":{"139":1}}],["用户在极短时间内",{"2":{"86":1}}],["用户将面对长达数秒的白屏等待",{"2":{"136":1}}],["用户注册接口",{"2":{"196":1}}],["用户注册等事件触发后",{"2":{"132":1}}],["用户注册",{"2":{"131":1,"201":1}}],["用户",{"2":{"129":1,"278":2,"291":1,"494":1,"704":1,"705":1,"706":1,"758":1,"784":1,"790":1,"858":1}}],["用户的优质提问和搜索会话不仅对自己有价值",{"2":{"355":1}}],["用户的每一个",{"2":{"113":1}}],["用户的请求就近接入",{"2":{"64":1}}],["用户依然经历整页白屏",{"2":{"89":1}}],["用户立刻看到页面骨架",{"2":{"87":1}}],["用户会看到列表",{"2":{"86":1}}],["用户页专属布局",{"2":{"79":1}}],["用户仪表盘",{"2":{"75":1}}],["用户无需等待所有内容就绪就能看到完整页面结构",{"2":{"51":1}}],["用户访问任何一个页面",{"2":{"63":1}}],["用户访问直接返回缓存的静态",{"2":{"47":1}}],["用户访问",{"2":{"43":1}}],["用户访问时后端计算",{"2":{"15":1}}],["用户访问时",{"2":{"14":1,"42":1}}],["用户登录",{"2":{"28":1}}],["用户评论的博客网站",{"2":{"22":1}}],["用户认证",{"2":{"20":2}}],["用清晰的思维驾驭强大的工具",{"2":{"12":1}}],["ae",{"2":{"755":2,"757":2,"758":1,"761":1,"762":4,"764":1,"765":2,"769":7,"770":4,"771":3,"774":1,"781":1}}],["axeshelper",{"2":{"734":1}}],["axes",{"2":{"714":1}}],["axis2d",{"2":{"706":1}}],["axispointer",{"2":{"706":1}}],["axisbuilder",{"2":{"706":1}}],["axisview",{"2":{"706":1}}],["axismodel",{"2":{"706":1}}],["axis",{"2":{"705":1,"706":1,"709":1,"714":4}}],["axiosclient",{"2":{"274":1}}],["axios",{"2":{"95":1,"103":1,"107":1,"274":1,"342":5}}],["aha",{"2":{"372":1}}],["aop",{"2":{"344":1}}],["ajax",{"2":{"342":1,"646":1,"650":1,"654":2,"659":1}}],["abstractchat",{"2":{"854":2,"858":5,"866":1}}],["abstraction",{"2":{"732":1,"733":1,"806":1}}],["abstract",{"2":{"692":1}}],["absolute",{"2":{"334":1}}],["abortsignal",{"2":{"175":1,"832":1,"866":2}}],["aborted",{"2":{"171":1,"173":1,"174":1,"175":1}}],["abort",{"2":{"169":1,"171":1,"174":1,"175":3}}],["abortcontroller",{"0":{"174":1},"2":{"169":2,"174":1,"175":4,"819":1}}],["about",{"2":{"77":2,"79":2}}],["audit",{"2":{"586":2}}],["auditor",{"2":{"570":1,"590":1,"591":1,"592":1}}],["audiofactory",{"2":{"777":2}}],["audiocontroller",{"2":{"762":1,"765":1}}],["audiocontext",{"2":{"734":2}}],["audioelement",{"2":{"762":2}}],["audioanalyser",{"2":{"734":1}}],["audiolistener",{"2":{"734":1}}],["audio",{"2":{"515":3,"734":3,"762":2}}],["augment",{"2":{"567":1,"568":2}}],["augmented",{"2":{"335":1,"440":1,"902":1}}],["augmentation",{"0":{"325":1}}],["autoprefixer",{"2":{"928":1,"932":1}}],["autoplay",{"2":{"773":1,"776":1,"777":1,"781":1}}],["autoscroll",{"2":{"806":1}}],["autostage",{"2":{"594":1}}],["autoresearch",{"2":{"792":1}}],["autofix",{"2":{"792":1}}],["autogen",{"2":{"545":1}}],["autonomy",{"2":{"402":1}}],["auto",{"2":{"27":2,"344":1,"482":1,"719":3}}],["authority",{"2":{"927":2}}],["authorization",{"2":{"160":1,"166":1,"169":1,"819":1,"857":1}}],["authored",{"2":{"581":2}}],["author",{"2":{"506":1,"792":1}}],["auth`",{"2":{"451":1}}],["authguard",{"2":{"274":1}}],["authservice",{"2":{"274":1}}],["authslice",{"2":{"274":1}}],["authlayout",{"2":{"274":1}}],["authapi",{"2":{"274":1}}],["auth",{"2":{"20":1,"23":1,"28":6,"274":2,"275":2,"327":1,"568":1}}],["auth0",{"2":{"20":1}}],["academic",{"2":{"881":1}}],["acid",{"2":{"553":1}}],["act",{"2":{"414":1}}],["activate",{"2":{"767":1,"887":1}}],["activemipmaplevel",{"2":{"748":1}}],["activecubeface",{"2":{"748":1}}],["active",{"2":{"318":2}}],["acting",{"2":{"427":2}}],["actionhandler",{"2":{"720":1}}],["actioninfo",{"2":{"720":2}}],["actiontype",{"2":{"654":2}}],["actionobject",{"2":{"650":1}}],["actions",{"2":{"343":2,"344":1,"414":1,"647":1,"677":1,"706":1,"734":1,"762":1,"792":1,"823":1}}],["action",{"0":{"654":1},"2":{"289":4,"341":1,"408":2,"411":1,"412":2,"427":2,"642":1,"646":2,"650":1,"653":1,"654":2,"662":1}}],["accent",{"2":{"925":3}}],["accept",{"2":{"482":1,"832":1}}],["acceptedits",{"2":{"478":1,"482":1,"484":1}}],["accepted",{"2":{"152":1}}],["accel",{"2":{"119":1,"177":1}}],["accessors",{"2":{"734":1}}],["accesstoken",{"2":{"26":1}}],["access",{"2":{"26":3}}],["agi",{"2":{"919":1}}],["aggregate",{"2":{"280":1,"706":1}}],["aggregates",{"2":{"280":1}}],["age",{"2":{"236":2,"267":7,"268":2,"655":3}}],["agentresult",{"2":{"859":1}}],["agentstepevent>",{"2":{"859":1}}],["agentstream",{"2":{"859":1}}],["agents",{"0":{"589":1,"590":1,"591":1,"592":1},"1":{"590":1,"591":1,"592":1},"2":{"456":2,"558":1,"570":4,"589":1,"590":2,"591":1,"592":3,"597":2,"880":2,"881":3,"883":1}}],["agent的记忆是其核心模块",{"2":{"410":1}}],["agent的规划核心包含任务分解与自我反思两部分",{"2":{"409":1}}],["agent规划模块",{"2":{"409":1}}],["agent",{"0":{"355":1,"402":1,"408":1,"413":1,"414":1,"415":1,"417":1,"418":1,"432":1,"433":1,"441":1,"444":1,"451":1,"452":1,"468":1,"476":1,"478":1,"487":1,"494":1,"497":1,"535":1,"544":1,"547":1,"859":1},"1":{"409":1,"410":1,"411":1,"412":1,"414":1,"415":1,"416":2,"417":1,"418":1,"419":1,"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"453":1,"454":1,"455":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":2,"489":2,"490":2,"491":1,"498":1,"499":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1},"2":{"115":1,"355":1,"402":6,"403":4,"406":3,"407":1,"408":2,"410":4,"411":8,"412":3,"413":1,"414":6,"415":4,"416":2,"417":6,"418":4,"419":3,"420":4,"421":3,"422":2,"424":1,"426":3,"427":8,"429":1,"431":2,"433":4,"434":1,"437":1,"438":1,"439":1,"441":7,"442":5,"443":11,"444":3,"445":2,"448":1,"450":1,"451":1,"452":1,"456":5,"467":9,"468":1,"470":11,"471":2,"472":2,"474":1,"475":1,"476":5,"477":10,"478":5,"480":1,"482":8,"483":1,"484":3,"485":2,"486":1,"488":3,"491":5,"492":1,"493":3,"494":3,"495":1,"496":4,"499":1,"502":1,"503":1,"506":1,"509":8,"511":1,"512":2,"521":2,"522":3,"534":1,"535":2,"544":1,"545":5,"546":1,"547":6,"548":1,"549":1,"550":5,"552":2,"559":1,"561":2,"562":2,"564":4,"565":1,"567":8,"568":1,"570":1,"588":2,"590":2,"591":2,"592":6,"784":3,"785":2,"786":1,"787":1,"789":1,"790":2,"792":1,"842":1,"843":1,"847":1,"848":1,"849":1,"851":1,"857":1,"859":6,"874":4,"875":2,"876":2,"879":2,"880":4,"881":1,"883":3,"884":2,"887":3,"888":2,"890":1,"892":2,"893":1,"895":1,"905":1,"930":1}}],["agentic",{"0":{"484":1,"542":1,"545":1,"566":1,"568":1},"1":{"567":1,"568":1},"2":{"113":1,"309":1,"367":1,"434":1,"440":1,"441":1,"541":1,"544":1,"552":1,"557":1,"559":1,"567":1,"568":1,"569":1,"901":2}}],["a∣b",{"2":{"242":2,"243":2}}],["a∣b=a∪b",{"2":{"227":1}}],["a∣b=a∪ba",{"2":{"227":1}}],["afterupdate",{"2":{"706":1}}],["afterinit",{"2":{"706":1}}],["afterinteractive",{"2":{"84":1}}],["afterrender",{"2":{"705":1,"706":1}}],["afterfn",{"2":{"685":3}}],["after",{"0":{"769":1},"2":{"685":1,"755":2,"756":1,"762":1}}],["after=",{"2":{"234":1}}],["adr",{"2":{"849":1}}],["adrock",{"2":{"762":2}}],["adobe",{"2":{"755":1}}],["adaptation",{"2":{"412":1}}],["adaptability",{"2":{"402":1}}],["adapter",{"2":{"280":2,"792":1,"806":1,"847":1}}],["adapters",{"2":{"280":1,"792":2,"806":1}}],["advancetime",{"2":{"776":1}}],["advancedcalculator",{"2":{"319":1}}],["advantage",{"2":{"396":1}}],["adminuser",{"2":{"240":2}}],["admin",{"2":{"233":5,"239":4}}],["adt",{"2":{"230":1}}],["additional",{"2":{"880":1,"886":1,"895":1}}],["additionalcontext",{"2":{"880":1,"886":1,"895":2}}],["additem",{"2":{"281":1}}],["addtoolapprovalresponse",{"2":{"858":1}}],["addtoolresult",{"2":{"858":1,"866":1}}],["addtocartbutton",{"2":{"74":1}}],["addshapetomodifier",{"2":{"776":1}}],["addshape",{"2":{"771":1,"776":1}}],["addstore",{"2":{"649":1,"653":2}}],["addons",{"2":{"732":1,"733":1,"734":3}}],["addgettersetter",{"2":{"677":1,"682":1,"685":3}}],["added",{"2":{"581":2,"713":1}}],["addeventlistener",{"2":{"163":3,"164":1,"178":1,"740":1}}],["add`",{"2":{"451":1}}],["address",{"2":{"184":5,"280":2,"281":1}}],["add",{"2":{"29":2,"187":1,"188":1,"223":5,"238":4,"261":3,"281":2,"289":1,"295":3,"304":3,"307":3,"310":3,"319":2,"321":1,"324":1,"581":3,"692":1,"696":2,"740":1,"748":1,"753":2,"899":1}}],["amber",{"2":{"925":1}}],["ambientlight",{"2":{"734":1}}],["amispagemeta",{"2":{"662":1}}],["amisschema",{"2":{"649":1}}],["amisr",{"2":{"647":1}}],["amis",{"0":{"655":1},"2":{"639":4,"640":3,"645":7,"646":7,"647":14,"649":6,"650":3,"652":1,"653":1,"654":1,"655":1,"656":7,"658":1,"662":4,"666":1,"667":1,"668":1}}],["amazon",{"2":{"354":1}}],["amount",{"2":{"281":9,"806":1}}],["amd",{"0":{"305":1},"2":{"203":1,"298":2,"303":1,"305":2,"306":5,"308":2}}],["amp",{"0":{"340":1,"342":1,"343":1,"345":1,"346":1},"2":{"94":2,"110":1,"227":4,"236":2,"238":1,"239":1,"242":7,"243":10,"247":1,"250":4,"267":1,"270":2,"547":1,"686":1,"771":1,"902":1,"904":1,"931":1}}],["a和b为数字时无需校验",{"2":{"187":1}}],["aws",{"2":{"137":1,"354":1}}],["await",{"2":{"26":2,"27":4,"28":5,"71":1,"80":1,"81":1,"82":1,"83":2,"99":2,"108":1,"149":4,"152":1,"153":3,"166":2,"168":3,"225":1,"246":2,"281":5,"288":1,"313":2,"315":2,"330":1,"333":2,"483":1,"484":1,"486":1,"488":1,"489":1,"490":1,"818":1,"843":1,"868":1}}],["are",{"2":{"887":1}}],["areastyle",{"2":{"706":1}}],["areaexhaustive",{"2":{"232":1}}],["area",{"2":{"230":1,"231":1,"714":1}}],["aria",{"2":{"705":1,"706":1,"715":2}}],["arcconfig>",{"2":{"693":1}}],["arc",{"2":{"677":1,"679":1,"680":1,"693":1}}],["architecting",{"2":{"553":1}}],["architecturespec",{"2":{"442":1}}],["architecture",{"0":{"644":1},"1":{"645":1,"646":1,"647":1},"2":{"336":1,"675":1,"847":1,"895":1}}],["arrowconfig>",{"2":{"693":1}}],["arrow",{"2":{"677":1,"679":1,"680":1,"693":1}}],["arr",{"2":{"263":1,"833":2,"840":2}}],["arrays",{"2":{"762":1}}],["arraycamera",{"2":{"734":1}}],["array",{"2":{"110":1,"255":1,"274":1,"661":1,"662":1,"663":1,"692":1,"806":1}}],["arg",{"2":{"254":4,"258":3,"263":3,"265":2,"797":1,"806":2}}],["args",{"2":{"248":1,"324":2,"797":1,"806":2}}],["artifactid>",{"2":{"193":1}}],["artifactid>commons",{"2":{"193":1}}],["article>",{"2":{"27":1}}],["article",{"2":{"27":1,"263":1,"792":2}}],["alternative",{"2":{"895":2}}],["alternatives",{"2":{"895":1}}],["also",{"2":{"350":1}}],["alphatest",{"2":{"742":1,"748":1}}],["alpha",{"2":{"331":1,"748":1,"929":1,"933":1}}],["alice",{"2":{"236":2,"259":2,"266":2,"267":2,"268":3,"269":2}}],["aliases",{"2":{"806":1}}],["alias",{"2":{"216":1,"661":1}}],["alive",{"2":{"115":1,"161":1,"163":2,"164":1,"177":1}}],["alb",{"2":{"137":1}}],["always",{"2":{"97":1}}],["allkeys",{"2":{"239":1}}],["allowed",{"2":{"927":1}}],["allowedtools",{"2":{"470":1,"472":1,"482":1,"484":1,"490":1}}],["allowdangerouslyskippermissions",{"2":{"482":1}}],["allow",{"2":{"482":1,"594":1}}],["allowimportingtsextensions",{"2":{"204":1}}],["allowunreachablecode",{"2":{"203":1}}],["allowsyntheticdefaultimports",{"2":{"203":1,"204":1}}],["all",{"2":{"59":1,"290":2,"482":1,"706":1,"708":1,"806":1,"856":1,"881":2}}],["avif",{"2":{"84":1}}],["a",{"0":{"112":1},"2":{"59":1,"88":1,"97":2,"101":1,"104":2,"107":2,"129":1,"187":3,"188":2,"223":4,"227":6,"229":2,"237":3,"238":11,"242":19,"243":4,"244":15,"250":14,"267":2,"281":1,"295":8,"304":8,"307":8,"310":4,"314":3,"315":43,"319":4,"321":2,"324":2,"329":1,"345":1,"366":1,"375":1,"394":1,"414":1,"417":1,"550":2,"806":1,"860":1,"880":1,"881":2,"883":1,"884":1,"887":1,"890":1,"896":2,"928":1}}],["aspect",{"2":{"749":1}}],["astc",{"2":{"734":1}}],["ast",{"2":{"646":1,"647":1,"655":4,"928":1,"932":1}}],["ascii",{"0":{"790":1},"2":{"636":1,"767":1,"768":1,"769":1,"770":1,"771":1,"797":1,"799":1,"877":1}}],["ascending",{"2":{"28":2}}],["ask",{"2":{"350":1}}],["assign",{"2":{"679":1}}],["assistant",{"2":{"483":1,"484":1,"854":1,"856":1}}],["assetpath",{"2":{"777":1}}],["assetmanager",{"2":{"762":1}}],["assetloader",{"2":{"761":1,"765":1}}],["asset",{"2":{"391":1,"706":1,"762":2}}],["assetspath",{"2":{"776":1,"777":1}}],["assets",{"2":{"274":1,"442":3,"443":1,"677":1,"776":1,"880":1,"881":1}}],["assertnever",{"2":{"232":3,"250":1}}],["assumechangesonlyaffectdirectdependencies",{"2":{"203":1}}],["as",{"2":{"28":2,"178":1,"179":1,"246":1,"247":2,"310":4,"312":1,"318":2,"550":2,"724":1,"725":1,"753":1}}],["asyncevaluator",{"2":{"646":1,"655":1}}],["asynciterablestream",{"2":{"856":1}}],["asynciterable",{"2":{"482":1,"483":1,"858":1,"859":1}}],["asynchronous",{"2":{"305":2}}],["async",{"2":{"26":2,"27":4,"28":4,"71":1,"80":1,"81":1,"82":1,"83":1,"99":1,"100":1,"108":1,"149":1,"152":1,"153":1,"166":1,"168":3,"169":1,"175":1,"225":1,"246":1,"281":4,"288":1,"313":1,"315":2,"327":6,"330":1,"333":1,"489":2,"490":1,"820":1,"840":1,"867":1,"895":1}}],["annotations",{"2":{"881":6}}],["anchor",{"2":{"770":2}}],["anchoring",{"2":{"392":1,"397":1}}],["anaglyph",{"2":{"734":1}}],["analyze",{"2":{"733":1,"736":1,"741":4,"746":1,"748":1,"792":1,"881":1}}],["analysis",{"2":{"470":1,"792":1}}],["analyst",{"2":{"416":1,"470":2,"471":4,"472":2,"475":1}}],["angleaxis",{"2":{"714":1}}],["angular",{"2":{"103":1,"285":1,"344":2,"642":1,"845":1,"847":1}}],["animdata",{"2":{"776":2}}],["animtype",{"2":{"768":1}}],["anim",{"2":{"686":3}}],["animationconfigwithdata",{"2":{"777":1}}],["animationconfigwithpath",{"2":{"777":1}}],["animationconfig",{"2":{"777":1}}],["animationclip",{"2":{"734":1,"743":3}}],["animationeventname",{"2":{"777":1}}],["animationdata",{"2":{"776":1,"777":2,"782":1}}],["animationdirection",{"2":{"776":1,"777":2}}],["animationid",{"2":{"776":1}}],["animationitemworkeroverride",{"2":{"762":1}}],["animationitem",{"2":{"761":1,"762":2,"765":2,"768":1,"776":2,"777":2}}],["animationframepolyfill",{"2":{"762":1}}],["animationfn",{"2":{"677":1,"692":3}}],["animationmanagerworkeroverride",{"2":{"762":1}}],["animationmanager",{"0":{"767":1},"2":{"760":1,"761":1,"762":2,"764":1,"765":1,"767":4}}],["animationmixer",{"2":{"734":1,"743":3}}],["animationutils",{"2":{"734":1}}],["animationobjectgroup",{"2":{"734":1}}],["animationaction",{"2":{"734":1,"743":3}}],["animationloop",{"2":{"686":2}}],["animationsegment",{"2":{"776":2,"777":2}}],["animations",{"2":{"677":1,"686":2,"762":1}}],["animation",{"0":{"686":1,"743":1},"2":{"647":1,"675":1,"676":2,"677":1,"679":1,"680":1,"686":10,"692":2,"693":1,"706":1,"734":2,"761":1,"762":1,"764":1,"767":2,"781":2}}],["animal",{"2":{"231":14}}],["answer",{"2":{"427":1,"550":1}}],["anti",{"2":{"881":1,"890":2}}],["antd",{"2":{"647":1,"928":1,"934":1}}],["anthropic",{"2":{"439":1,"441":2,"453":1,"467":1,"470":1,"478":2,"480":1,"481":7,"483":1,"511":1,"521":3,"525":4,"526":1,"527":1,"530":1,"531":1,"535":1,"539":1,"547":1,"567":2,"581":1,"842":1,"847":1,"848":2,"849":2,"868":1,"881":2}}],["ant",{"2":{"340":1,"931":1}}],["any",{"0":{"253":1},"2":{"108":1,"203":3,"234":2,"238":1,"248":1,"253":1,"255":3,"289":2,"324":2,"661":8,"662":10,"663":3,"719":3,"748":6,"776":7,"777":3,"806":1,"832":1,"839":1}}],["any>",{"2":{"28":1,"661":1,"663":7,"806":8}}],["an",{"2":{"99":1,"103":1}}],["android",{"2":{"342":2,"755":1,"756":1}}],["and",{"0":{"428":1},"1":{"429":1,"430":1,"431":1},"2":{"87":1,"97":2,"187":1,"414":2,"428":1,"430":1,"431":1,"432":2,"433":1,"456":2,"545":1,"806":1}}],["anon",{"2":{"28":2}}],["attribute",{"2":{"734":1,"741":1,"748":1}}],["attributes",{"2":{"733":1,"734":1}}],["attrs",{"2":{"682":1,"685":3}}],["attempt++",{"2":{"149":1}}],["attempt",{"2":{"149":3}}],["atoms",{"2":{"274":1}}],["atomic",{"0":{"925":1,"927":1},"1":{"926":1},"2":{"274":1,"925":1}}],["at",{"2":{"28":5}}],["atlas",{"2":{"20":1}}],["apollo",{"2":{"342":3}}],["apache",{"2":{"193":1,"643":1,"699":4,"706":1}}],["app数据统计",{"2":{"957":1}}],["approved",{"2":{"482":1}}],["appreducer",{"2":{"289":2}}],["appendchild",{"2":{"753":1}}],["appenddata",{"2":{"713":1,"719":1}}],["append",{"2":{"482":1}}],["appstore",{"2":{"646":1,"647":1,"650":2}}],["appstate",{"2":{"289":2}}],["apps",{"2":{"290":1,"335":2,"792":1}}],["appconfig",{"2":{"262":1}}],["apply",{"2":{"324":1,"930":1,"933":2}}],["applyfilter",{"2":{"179":2,"682":1}}],["applogger",{"2":{"312":1}}],["application",{"2":{"166":1,"169":1,"175":1,"190":1,"280":6,"281":2,"807":3,"819":1}}],["app",{"0":{"76":1},"1":{"77":1,"78":1,"79":1},"2":{"25":2,"27":3,"28":1,"29":1,"35":1,"46":1,"73":1,"74":2,"76":1,"77":4,"82":1,"83":1,"86":2,"90":1,"106":2,"274":3,"275":2,"280":3,"288":4,"290":7,"291":1,"295":2,"300":2,"301":1,"302":1,"310":1,"311":3,"314":3,"315":1,"318":1,"324":1,"325":1,"366":3,"370":2,"408":1,"518":1,"561":1,"647":1,"857":1,"898":1,"922":1,"923":1,"960":1,"964":1}}],["apikey",{"2":{"857":2}}],["apiobject",{"2":{"663":1}}],["apicontrol",{"2":{"647":1,"656":1}}],["apiconfig",{"2":{"243":1}}],["api2d",{"2":{"523":3}}],["apiurl",{"2":{"262":1}}],["apiresponse",{"2":{"256":1,"260":2}}],["apierror",{"2":{"231":4}}],["apiendpoint",{"2":{"100":2}}],["api",{"0":{"20":1,"83":1,"162":1,"163":1,"215":2,"260":1,"342":2,"520":1,"693":2,"749":2,"777":1,"807":1,"839":1,"840":1,"867":1},"1":{"163":1,"164":1,"521":1,"522":1},"2":{"12":1,"14":1,"16":2,"17":1,"20":4,"21":1,"23":1,"30":2,"31":1,"32":2,"38":1,"57":1,"59":4,"63":1,"66":1,"69":1,"72":2,"73":1,"78":1,"79":4,"82":1,"83":4,"92":2,"95":1,"97":5,"99":1,"100":3,"101":2,"103":3,"106":1,"107":2,"108":1,"110":4,"112":1,"115":1,"117":1,"122":1,"125":1,"134":1,"138":4,"139":1,"143":1,"149":1,"152":1,"153":2,"155":1,"156":1,"159":1,"160":4,"162":1,"163":2,"166":2,"169":1,"180":1,"190":1,"191":1,"195":1,"205":1,"211":2,"216":1,"256":2,"260":2,"262":1,"274":13,"275":1,"280":3,"281":1,"291":1,"327":1,"331":1,"336":2,"338":1,"341":2,"342":14,"344":4,"402":1,"408":1,"411":3,"412":1,"414":2,"419":1,"439":2,"465":1,"478":1,"481":4,"510":1,"512":5,"519":1,"520":1,"521":5,"522":15,"523":14,"548":2,"549":1,"553":1,"555":1,"559":1,"568":3,"570":2,"573":3,"575":3,"576":3,"577":2,"583":1,"590":1,"640":2,"646":1,"647":5,"649":1,"650":2,"653":1,"654":2,"662":1,"663":6,"668":2,"670":3,"673":1,"699":1,"704":3,"705":3,"706":5,"708":3,"712":2,"714":1,"728":2,"732":1,"733":3,"734":1,"736":3,"739":3,"741":1,"749":1,"756":1,"760":1,"761":3,"762":2,"764":2,"765":1,"777":2,"807":1,"813":1,"814":2,"815":2,"818":1,"819":1,"820":1,"822":4,"823":2,"824":1,"830":1,"832":2,"839":1,"842":4,"843":1,"847":2,"848":3,"851":1,"853":2,"857":1,"864":1,"867":1,"887":1,"927":1}}],["aisdkerror",{"2":{"848":1}}],["ai商",{"2":{"558":1}}],["airbnb",{"2":{"366":1,"755":2,"762":1}}],["ainstance",{"2":{"315":1}}],["aigc",{"2":{"145":1}}],["aimodelscontent",{"2":{"86":2}}],["ai",{"0":{"118":1,"142":1,"357":1,"359":1,"360":1,"367":1,"460":1,"465":1,"510":1,"513":1,"516":1,"537":1,"540":1,"543":1,"551":1,"554":1,"557":2,"563":1,"566":1,"598":1,"628":1,"918":1,"926":1,"934":1},"1":{"511":1,"512":1,"514":1,"515":1,"517":1,"518":1,"541":1,"542":1,"543":1,"555":1,"556":1,"557":1,"564":1,"565":1,"567":1,"568":1},"2":{"1":4,"2":5,"3":9,"8":2,"9":14,"10":1,"11":6,"12":5,"79":2,"86":1,"92":1,"113":2,"114":1,"118":1,"119":1,"124":1,"135":1,"136":2,"137":2,"138":1,"140":1,"142":3,"143":4,"144":1,"145":1,"147":1,"152":1,"156":1,"160":1,"167":1,"180":1,"309":1,"316":1,"332":2,"335":2,"340":2,"348":3,"351":1,"354":2,"355":5,"357":4,"358":4,"359":5,"360":5,"361":3,"362":2,"367":10,"375":6,"376":1,"402":2,"403":2,"405":3,"406":1,"415":4,"419":1,"420":2,"426":1,"433":1,"434":1,"435":2,"436":1,"437":1,"438":3,"439":6,"440":4,"441":1,"442":2,"454":1,"456":1,"457":2,"458":1,"459":3,"460":3,"461":1,"462":8,"463":1,"464":1,"465":3,"466":5,"467":1,"476":1,"477":1,"478":1,"480":1,"483":1,"491":6,"495":1,"496":1,"499":2,"509":1,"511":5,"512":7,"514":2,"515":31,"517":2,"518":19,"521":2,"522":6,"523":8,"525":8,"526":5,"527":5,"528":2,"529":2,"530":3,"531":6,"532":3,"533":2,"534":2,"536":4,"537":6,"538":2,"539":3,"540":4,"541":2,"542":4,"543":3,"544":2,"547":1,"548":2,"551":3,"552":3,"553":5,"554":2,"555":3,"556":2,"557":7,"558":4,"559":9,"561":6,"564":7,"565":2,"567":9,"568":3,"569":3,"570":2,"573":2,"585":3,"588":2,"590":1,"597":1,"598":3,"610":2,"628":7,"630":1,"631":3,"632":2,"636":1,"784":3,"785":1,"786":1,"787":1,"789":2,"790":1,"792":1,"816":1,"842":12,"843":6,"845":1,"847":6,"848":11,"849":2,"850":3,"851":1,"853":7,"854":1,"856":1,"857":1,"858":2,"863":1,"867":1,"872":1,"874":3,"875":1,"881":1,"901":7,"902":9,"903":5,"905":1,"906":1,"912":1,"919":5,"926":4,"928":2,"930":2,"934":9}}],["最多不超过",{"2":{"933":1}}],["最接近原生",{"2":{"928":1}}],["最深",{"2":{"925":1}}],["最浅",{"2":{"925":1}}],["最快的成长是与优秀者同行",{"2":{"905":1}}],["最快捷的方式是使用",{"2":{"574":1}}],["最低",{"2":{"887":1}}],["最低优先级",{"2":{"652":1}}],["最重要的文件",{"0":{"850":1}}],["最常用",{"2":{"734":1}}],["最常用的形式",{"2":{"310":1}}],["最易理解",{"2":{"877":1}}],["最易用的",{"2":{"728":1}}],["最易混淆的核心点",{"2":{"104":1}}],["最核心的公共",{"2":{"867":1}}],["最核心的模型规范",{"2":{"866":1}}],["最核心的功能",{"2":{"856":1}}],["最核心的接口定义",{"2":{"850":1}}],["最核心的配置文件",{"0":{"571":1},"1":{"572":1,"573":1,"574":1}}],["最核心的逻辑在于固定成本",{"2":{"391":1}}],["最隐蔽的逻辑漏洞",{"2":{"555":1}}],["最令人抵触的单元测试编写和技术文档维护",{"2":{"527":1}}],["最高优先级",{"2":{"652":1}}],["最高",{"2":{"522":1,"887":1}}],["最适场景",{"2":{"521":1,"522":1,"562":1,"565":1}}],["最容易陷入的思维陷阱就是",{"2":{"492":1}}],["最容易切入的高价值区域",{"2":{"465":1}}],["最显著的提升还是在于",{"2":{"475":1}}],["最难被",{"0":{"460":1}}],["最初只能看到技能的描述",{"2":{"443":1}}],["最硬核的落地载体",{"2":{"441":1}}],["最人工的",{"2":{"378":1}}],["最佳切入点",{"2":{"465":1}}],["最佳业务场景",{"2":{"344":1}}],["最佳实践",{"2":{"437":1,"445":1,"929":1,"930":1,"931":1,"932":1}}],["最佳实践与适用场景",{"2":{"342":1}}],["最佳实践清单",{"2":{"329":1}}],["最佳实践总结",{"0":{"216":1}}],["最强大的特性之一",{"2":{"263":1}}],["最怕的就是遗漏某些分支",{"2":{"232":1}}],["最少的组件",{"2":{"201":1}}],["最可能",{"2":{"198":1}}],["最大",{"2":{"734":1}}],["最大的痛点往往不是",{"2":{"492":1}}],["最大的陷阱往往是",{"2":{"365":1}}],["最大限度减少上下文消耗",{"2":{"439":1}}],["最大化收益与捕获用户剩余",{"0":{"397":1}}],["最大化性能和",{"2":{"94":1}}],["最大重试次数",{"2":{"175":1}}],["最大挂起时间",{"2":{"152":1}}],["最大间隔也不会超过数组最后一个值",{"2":{"149":1}}],["最大上限",{"2":{"148":1}}],["最复杂文件",{"2":{"762":1}}],["最复杂",{"2":{"144":1,"734":1}}],["最新风格",{"2":{"203":1}}],["最新特性",{"2":{"203":1}}],["最新",{"2":{"144":1}}],["最合适",{"2":{"144":1}}],["最好的选择是不参与",{"2":{"917":1}}],["最好的学习是公开分享",{"2":{"905":1}}],["最好的架构不是用技术堆砌出来的",{"2":{"144":1}}],["最好",{"2":{"144":1}}],["最终总结出来的主要原因有",{"2":{"950":1}}],["最终康复了",{"2":{"938":1}}],["最终的答案就会有很大变化",{"2":{"915":1}}],["最终的指向都是同一个",{"2":{"615":1}}],["最终都委托给",{"2":{"767":1}}],["最终都使相关缓存失效",{"2":{"108":1}}],["最终颜色",{"2":{"741":1}}],["最终返回",{"2":{"658":1}}],["最终通过",{"2":{"764":1,"853":1}}],["最终通过项目孵化转化为内容与产品",{"2":{"631":1}}],["最终通过不断与环境互动",{"2":{"412":1}}],["最终选择了",{"2":{"502":1}}],["最终确定了满意的设定",{"2":{"499":1}}],["最终只会陷入平庸",{"2":{"458":1}}],["最终为你总结出",{"2":{"417":1}}],["最终调用工具生成一份专业的",{"2":{"416":1}}],["最终达成预设的行动目标",{"2":{"412":1}}],["最终打造出既符合用户价值又具有商业可持续性的产品",{"2":{"400":1}}],["最终价格趋向于接近零利润",{"2":{"392":1}}],["最终就构成了复杂的商业或技术系统",{"2":{"385":1}}],["最终带着提纯后的知识返回",{"2":{"355":1}}],["最终决定将核心位置让给",{"2":{"350":1}}],["最终",{"2":{"271":1,"463":1,"471":1}}],["最终产物中不存在任何泛型的痕迹",{"2":{"254":1}}],["最终产出独立的",{"2":{"62":1}}],["最终输出的",{"2":{"168":1}}],["最终输出结构化的洞察报告与交互式可视化看板",{"2":{"632":1}}],["最终输出结构化的",{"2":{"168":1}}],["最终重新验证以确保数据一致性",{"2":{"108":1}}],["最优秀的工程师或许不再是那个能手写极致算法的人",{"2":{"539":1}}],["最优",{"2":{"67":1}}],["最简示例",{"0":{"696":1}}],["最简洁的那个",{"2":{"181":1}}],["最简洁的思路",{"2":{"66":1}}],["最简单的架构",{"2":{"66":1}}],["最典型的渲染方式",{"2":{"34":1}}],["最后一人拿着剩余的铜板自由调度选择押大押小",{"2":{"917":1}}],["最后一行可能是未完成的",{"2":{"168":1}}],["最后尝试",{"2":{"559":1}}],["最后以",{"2":{"508":1}}],["最后通过精灵寄语激发用户的诗歌创作热情",{"2":{"504":1}}],["最后通过",{"2":{"440":1}}],["最后是",{"2":{"439":1}}],["最后再砸钱去市场上寻找目标用户",{"2":{"377":1}}],["最后发现是",{"2":{"199":1}}],["最后所有产物写入",{"2":{"65":1}}],["最后",{"2":{"12":1,"412":1,"506":1,"941":1,"958":1}}],["最小包",{"2":{"706":1}}],["最小操作集",{"2":{"706":1}}],["最小化入口注册",{"2":{"647":1}}],["最小化数据收集",{"2":{"564":1}}],["最小化服务端压力",{"2":{"155":1}}],["最小改动解",{"2":{"370":1}}],["最小复杂度",{"2":{"201":1}}],["最小接口原则",{"0":{"195":1},"1":{"196":1,"197":1}}],["最小状态是对数据冗余的剔除",{"2":{"12":1}}],["最小",{"2":{"5":1,"274":1,"647":1}}],["立flag",{"2":{"958":1}}],["立体效果",{"2":{"734":1}}],["立体渲染相机",{"2":{"734":1}}],["立方体贴图",{"2":{"734":1}}],["立方体",{"2":{"734":1}}],["立方体环境映射相机",{"2":{"734":1}}],["立刻拆解成三个部分",{"2":{"626":1}}],["立刻重新发起请求",{"2":{"153":1}}],["立刻发起下一个循环重新挂起",{"2":{"153":1}}],["立刻发起下一次请求",{"2":{"153":1}}],["立刻发起下一次长轮询连接",{"2":{"151":1}}],["立刻返回给客户端",{"2":{"152":1}}],["立即模式",{"2":{"670":1,"673":1}}],["立即触发人工深度审查",{"2":{"537":1}}],["立即执行函数表达式",{"2":{"298":1}}],["立即终止请求并触发",{"2":{"174":1}}],["立即发起下一个新请求",{"2":{"151":1}}],["立即使用新名称更新本地",{"2":{"100":1}}],["立即渲染并生成完整",{"2":{"52":1}}],["立即返回给浏览器",{"2":{"39":1}}],["立即通过对话纠正",{"2":{"3":1}}],["立法者",{"2":{"12":1}}],["搬运工",{"2":{"12":1}}],["只存通道值",{"2":{"933":1}}],["只存在于",{"2":{"229":1}}],["只负责提供更爽的编写体验",{"2":{"932":1}}],["只负责生成工具调用",{"2":{"844":1}}],["只打包项目中真正用到的类名",{"2":{"925":1}}],["只想到了一些常用的",{"2":{"909":1}}],["只暴露",{"2":{"866":1}}],["只生成工具调用",{"2":{"856":1}}],["只接受",{"2":{"801":1}}],["只背诵结论不是传授学问的方法",{"2":{"608":1}}],["只知道观点",{"2":{"608":1}}],["只提交已",{"2":{"581":1}}],["只会引发严重的内耗",{"2":{"621":1}}],["只会把那几条观点反复背诵套用",{"2":{"608":1}}],["只会淘汰那些拒绝使用",{"2":{"552":1}}],["只会让自己变得更加焦虑",{"2":{"952":1}}],["只会让",{"2":{"12":1}}],["只做管理",{"2":{"470":1}}],["只读书不仅会造成处理实际事务时能力低下",{"2":{"614":1}}],["只读书会导致知识结构缺陷",{"2":{"614":1}}],["只读",{"2":{"415":1}}],["只读绑定",{"2":{"314":1}}],["只把最终提炼的结论汇报给主智能体",{"2":{"415":1}}],["只把代码拆分到不同文件里还不够",{"2":{"299":1}}],["只保留实际使用的",{"2":{"925":1}}],["只保留",{"2":{"373":1}}],["只保留普通的类型注释或完全没有任何类型信息",{"2":{"254":1}}],["只通过最精简的接口与外界对话",{"2":{"337":1}}],["只约束我们需要的特性",{"2":{"263":1}}],["只在办公时间或业余遇到紧急问题时才使用远程办公工具来协作",{"2":{"957":1}}],["只在",{"2":{"249":2}}],["只在必要时才向客户端发送",{"2":{"71":1}}],["只包含那些同时满足两种结构的对象",{"2":{"236":1}}],["只取",{"2":{"233":1}}],["只能硬着头皮控制自己",{"2":{"961":1}}],["只能是想尽一切办法",{"2":{"938":1}}],["只能调用",{"2":{"888":1}}],["只能回去重读",{"2":{"610":1}}],["只能得到及格线",{"2":{"462":1}}],["只能安全访问所有成员共有的属性",{"2":{"229":1}}],["只能做静态展示",{"2":{"66":1}}],["只能做博客",{"2":{"16":1}}],["只覆盖自己需要的特定选项",{"2":{"216":1}}],["只定义",{"2":{"216":1}}],["只实现",{"2":{"183":1}}],["只选最对的",{"0":{"141":1},"1":{"142":1,"143":1}}],["只要能把握住规则的脉搏",{"2":{"965":1}}],["只要能结合自身的优势",{"2":{"381":1}}],["只要保证消耗",{"2":{"964":1}}],["只要解决了当前棘手的问题",{"2":{"950":1}}],["只要不去行动",{"2":{"950":1}}],["只要不立即访问未初始化的变量",{"2":{"315":1}}],["只要识别到",{"2":{"923":1}}],["只要一件事情发生的次数足够多",{"2":{"917":1}}],["只要肯花时间去学习领悟",{"2":{"912":1}}],["只要捧起书就一定有收获",{"2":{"606":1}}],["只要我能写前端",{"2":{"553":1}}],["只要你的测试",{"2":{"538":1}}],["只要会说话就能写代码",{"2":{"530":1}}],["只要松开脚下的刹车就好了",{"2":{"387":1}}],["只要对外暴露的接口不变",{"2":{"297":1}}],["只要值落在这两个集合中的任何一个里",{"2":{"229":1}}],["只要客户端不主动询问",{"2":{"115":1}}],["只要输入不变就不重新计算",{"2":{"88":1}}],["只处理纯粹的客户端",{"2":{"97":1}}],["只有少部分系数描述了曲线的核心特征",{"2":{"916":1}}],["只有学习和总结",{"2":{"400":1}}],["只有你能做",{"2":{"396":1}}],["只有真正了解市场和客户",{"2":{"396":1}}],["只有通过不断的",{"2":{"369":1}}],["只有批判性思维但缺乏同理心",{"2":{"366":1}}],["只有同理心但缺乏批判性思维",{"2":{"366":1}}],["只有在碰到特别重要紧急的事情或者娱乐的事情才需要与同事当面沟通交流",{"2":{"956":1}}],["只有在真正需要解决复杂度",{"2":{"292":1}}],["只有在推断结果不符合预期",{"2":{"263":1}}],["只有在遇到真实网络异常时",{"2":{"153":1}}],["只有需要被其他项目引用的项目才启用",{"2":{"216":1}}],["只有需要交互的",{"2":{"94":1}}],["只有当你必须用自己的语言向别人复述",{"2":{"610":1}}],["只有当我们花时间去倾听",{"2":{"377":1}}],["只有当",{"2":{"107":1,"410":1,"443":1,"576":1}}],["只有原始数据变化时才会重新执行",{"2":{"107":1}}],["只有",{"2":{"89":2,"144":1,"415":1}}],["只有理解它们各自的分工",{"2":{"85":1}}],["只有与业务场景高度契合的适配策略",{"2":{"67":1}}],["只有超过指定周期或收到特定触发时才重新生成",{"2":{"46":1}}],["只预渲染高频访问页面",{"2":{"59":1}}],["只需不到",{"2":{"843":1}}],["只需保留项目概述和核心规则",{"2":{"575":1}}],["只需前端",{"2":{"562":1}}],["只需几步就可以将项目上线",{"2":{"345":1}}],["只需添加新的子应用",{"2":{"292":1}}],["只需要搜索和读取",{"2":{"591":1}}],["只需要读取代码",{"2":{"591":1}}],["只需要从一个小问题开始",{"2":{"466":1}}],["只需要关注第",{"2":{"430":1}}],["只需要做",{"2":{"361":1}}],["只需要传入新的类型参数即可",{"2":{"255":1}}],["只需要正确地",{"2":{"66":1}}],["只需声明性清理特定路径或缓存标签的缓存即可",{"2":{"48":1}}],["只需在",{"2":{"11":1,"640":1}}],["只是浮于表面的搬运",{"2":{"617":1}}],["只是完成了从",{"2":{"550":1}}],["只是对话搜索",{"2":{"462":1}}],["只是辅助工具",{"2":{"403":1}}],["只是",{"2":{"16":1,"556":1}}],["反省自身的不足会有新的领悟境界",{"2":{"965":1}}],["反合理化系统",{"2":{"876":1}}],["反转确保用户数组中第一个中间件成为最外层",{"2":{"861":1}}],["反检测脚本注入",{"2":{"792":1}}],["反爬虫检测",{"2":{"792":1}}],["反爬虫检测等",{"2":{"792":1}}],["反序列化",{"2":{"748":1,"859":1}}],["反射器等",{"2":{"734":1}}],["反色",{"2":{"677":1}}],["反者道之动",{"2":{"620":1}}],["反批判",{"2":{"609":1}}],["反复追问",{"2":{"590":1}}],["反复咀嚼那些关键词时",{"2":{"457":1}}],["反模式",{"2":{"445":1}}],["反思阶段",{"2":{"426":1}}],["反思机制也通常遵循一个",{"2":{"426":1}}],["反思的基本原理是通过模型的自我审查和自我反馈来改进初步生成的内容",{"2":{"426":1}}],["反思",{"2":{"409":1,"426":1}}],["反思与评价",{"2":{"408":1}}],["反馈结果",{"2":{"859":1}}],["反馈节点",{"2":{"626":1}}],["反馈周期实现了量级压缩",{"2":{"529":1}}],["反馈",{"2":{"412":1,"622":1,"628":1}}],["反馈和参与共建的开发者就越多",{"2":{"386":1}}],["反馈以维持用户注意力",{"2":{"142":1}}],["反面案例",{"2":{"366":1}}],["反直觉的",{"0":{"350":1}}],["反之默认为",{"2":{"333":1}}],["反例",{"0":{"184":1,"187":1,"190":1,"193":1,"196":1},"2":{"182":1}}],["反而能充分享受新知的乐趣",{"2":{"609":1}}],["反而降低指令遵循度",{"2":{"572":1}}],["反而意味着识别平庸的能力变得空前昂贵",{"2":{"530":1}}],["反而在特定的复杂业务场景中大放异彩",{"2":{"145":1}}],["反而是架构师经过深思熟虑后的首选方案",{"2":{"135":1}}],["反而增加部署复杂度",{"2":{"93":1}}],["反而让它们的价值更加凸显",{"2":{"12":1}}],["反过来理解",{"2":{"66":1}}],["反向数据流涉及组件间的通信契约",{"2":{"10":1}}],["独一无二的烙印",{"2":{"924":1}}],["独占",{"2":{"877":1}}],["独自阅读常形成模糊的理解链条",{"2":{"610":1}}],["独角兽",{"2":{"601":1}}],["独角兽主导",{"2":{"551":1}}],["独坐听风清",{"2":{"507":2}}],["独断专行",{"2":{"363":1}}],["独立文件",{"2":{"928":1}}],["独立是一个人值得信赖",{"2":{"907":1}}],["独立本身并不是目的",{"2":{"907":1}}],["独立与相互依赖这两个看似矛盾的点是我们需要学着平衡的",{"2":{"907":1}}],["独立的",{"2":{"847":1}}],["独立的词法分析",{"2":{"645":1}}],["独立包",{"2":{"734":1}}],["独立思考和将知识转化为实际价值的能力愈发珍贵",{"2":{"615":1}}],["独立隔离的上下文窗口",{"2":{"592":1}}],["独立隔离",{"2":{"590":1}}],["独立判断能力的角色",{"2":{"589":1}}],["独立上下文",{"2":{"589":1}}],["独立成文件",{"2":{"577":1}}],["独立",{"2":{"577":1,"672":1,"845":1,"925":1}}],["独立执行的专职角色",{"0":{"589":1},"1":{"590":1,"591":1,"592":1}}],["独立执行单元",{"2":{"438":1}}],["独立执行渲染",{"2":{"52":1}}],["独立工作室",{"2":{"437":2}}],["独立开发完整产品",{"2":{"459":1}}],["独立开发者建站",{"2":{"344":1}}],["独立开发部署",{"2":{"285":1}}],["独立模块",{"2":{"286":1}}],["独立地向对端发送数据",{"2":{"127":1}}],["独立组件开发",{"2":{"10":1}}],["独有的",{"2":{"515":1}}],["独有",{"2":{"12":1}}],["单任务学习",{"2":{"918":1}}],["单项触发测试",{"2":{"881":1}}],["单动画状态",{"2":{"762":1}}],["单实例状态",{"2":{"761":1}}],["单体架构",{"2":{"702":1}}],["单轴坐标系",{"2":{"706":1}}],["单轴组件",{"2":{"706":1}}],["单轴",{"2":{"701":1}}],["单文件",{"2":{"597":1}}],["单点指令",{"0":{"535":1}}],["单点工具使用",{"2":{"459":1}}],["单次输入成本随",{"2":{"523":1}}],["单价为国际顶尖模型的",{"2":{"522":1}}],["单打独斗",{"2":{"415":1,"438":1}}],["单个表达式的编译和执行",{"2":{"769":1}}],["单个",{"2":{"415":1,"585":1,"734":1}}],["单个模块建议保持在",{"2":{"329":1}}],["单兵作战",{"2":{"344":1}}],["单仓库极速交付",{"2":{"344":1}}],["单人作战团队",{"2":{"342":1}}],["单纯的模块拆分已不够",{"2":{"336":1}}],["单例封装",{"2":{"734":1}}],["单例",{"2":{"303":1,"677":1,"762":1,"767":1,"792":1}}],["单例模式的全局动画管理器",{"2":{"767":1}}],["单例模式",{"0":{"301":1},"2":{"288":1,"314":1,"761":1,"767":1}}],["单元测试",{"2":{"677":1,"706":1}}],["单元",{"2":{"274":1}}],["单测框架",{"2":{"220":1}}],["单测工具",{"0":{"220":1},"1":{"221":1,"222":1,"223":1,"224":1,"225":1}}],["单模块",{"2":{"190":1}}],["单位元",{"2":{"244":2}}],["单位",{"2":{"149":1}}],["单位为秒",{"2":{"47":1}}],["单行道",{"2":{"124":1}}],["单向通信",{"2":{"822":1}}],["单向数据流",{"2":{"341":1}}],["单向数据流是对变更轨迹的约束",{"2":{"12":1}}],["单向推送",{"2":{"143":1}}],["单向传输局限",{"2":{"119":1}}],["单一方案往往独木难支",{"2":{"934":1}}],["单一方案往往无法兼顾效率与灵活性",{"2":{"928":1}}],["单一引导脚本通过环境变量自适应",{"2":{"876":1}}],["单一",{"2":{"758":1}}],["单一后端",{"2":{"673":1}}],["单一打包",{"2":{"673":1}}],["单一真实数据源",{"2":{"6":1}}],["单一职责的",{"2":{"925":1}}],["单一职责的体现",{"0":{"311":1}}],["单一职责原则",{"0":{"327":1}}],["单一职责",{"2":{"1":1,"12":1}}],["结论",{"2":{"928":3}}],["结束值",{"2":{"776":1}}],["结束当前帧",{"2":{"748":1}}],["结束语",{"0":{"440":1,"476":1,"491":1}}],["结句",{"2":{"508":1}}],["结尾时鼓励用户继续创作",{"2":{"504":1}}],["结尾不加句号",{"2":{"451":1}}],["结尾",{"0":{"965":1},"2":{"177":1,"840":1}}],["结果类型",{"2":{"748":1}}],["结果是",{"2":{"610":1}}],["结果是所有",{"2":{"239":1}}],["结果几秒后直接被烫伤",{"2":{"388":1}}],["结果可能会出乎意料",{"2":{"237":1}}],["结果",{"2":{"107":1,"449":1}}],["结合实际情况总结经验",{"2":{"960":1}}],["结合实际的研发场景",{"2":{"111":1}}],["结合自己的习惯和节奏也可以慢慢上轨",{"2":{"965":1}}],["结合自己在第一阶段的问题",{"2":{"953":1}}],["结合自身现状分析",{"2":{"959":1}}],["结合自身遇到的问题通过阅读学习来找答案",{"2":{"946":1}}],["结合沉淀下来的原则",{"2":{"942":1}}],["结合框架原生的隔离机制来解决",{"2":{"931":1}}],["结合了",{"2":{"928":1}}],["结合我们在",{"2":{"525":1}}],["结合文字描述进行综合分析",{"2":{"494":1}}],["结合调查研究",{"2":{"471":1}}],["结合内部",{"2":{"410":1}}],["结合相关框架与模式优化执行结果",{"2":{"409":1}}],["结合使用",{"2":{"338":1,"921":1}}],["结合使用才能达到极致性能",{"2":{"89":1}}],["结合设计模式的模块化实践",{"0":{"299":1},"1":{"300":1,"301":1,"302":1}}],["结合联合类型",{"2":{"262":1}}],["结合",{"2":{"82":1,"143":1,"182":1,"262":1,"270":1,"353":1,"487":1,"494":1,"927":1,"928":1,"931":1,"934":1}}],["结语",{"0":{"12":1,"67":1,"144":1,"180":1,"201":1,"226":1,"271":1,"293":1,"303":1,"309":1,"316":1,"326":1,"332":1,"337":1,"376":1,"420":1,"433":1,"466":1,"539":1,"597":1,"934":1}}],["结构呈现",{"2":{"518":1}}],["结构清晰",{"2":{"511":1}}],["结构设计‌",{"2":{"507":1}}],["结构化输出",{"2":{"843":1}}],["结构化输出等",{"2":{"842":1}}],["结构化数据提取",{"2":{"843":1}}],["结构化技能",{"2":{"786":1}}],["结构化沉淀",{"2":{"628":1}}],["结构化知识",{"2":{"628":1}}],["结构化封装",{"2":{"547":1}}],["结构化填空",{"2":{"527":1}}],["结构化是",{"2":{"509":1}}],["结构化",{"0":{"506":1},"1":{"507":1,"508":1},"2":{"509":2}}],["结构化提示词",{"2":{"496":1}}],["结构化的",{"0":{"494":1},"2":{"509":1}}],["结构化歧义",{"2":{"367":1}}],["结构化消息",{"2":{"168":1}}],["结构化字段",{"2":{"121":1}}],["结构高度契合",{"2":{"112":1}}],["结构连同内部的",{"2":{"86":1}}],["结构的极度扁平",{"2":{"2":1}}],["结构",{"2":{"2":1}}],["6斤的下降",{"2":{"963":1}}],["676行",{"2":{"762":1}}],["610行",{"2":{"762":1}}],["61个文件",{"2":{"734":1}}],["6158行",{"2":{"647":1}}],["6面",{"2":{"734":1}}],["639",{"2":{"699":1}}],["68kb",{"2":{"646":1,"647":1,"656":2}}],["60s",{"2":{"137":1}}],["60",{"2":{"47":2,"94":1,"655":1,"928":1}}],["6000",{"2":{"705":1,"715":1,"961":1,"962":1,"963":1}}],["600",{"2":{"27":3,"28":3,"925":2,"927":2}}],["6",{"0":{"12":1,"51":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":2,"130":1,"131":1,"132":1,"133":1,"134":1,"180":1,"198":1,"234":1,"250":1,"270":1,"282":1,"290":1,"309":1,"315":1,"322":1,"332":1,"343":1,"355":1,"362":1,"387":1,"420":1,"432":1,"439":1,"452":1,"466":1,"487":1,"488":1,"489":1,"490":1,"550":1,"584":1,"585":1,"586":1,"587":1,"588":1,"605":1,"660":1,"661":1,"662":1,"663":1,"691":1,"692":1,"718":1,"719":1,"747":1,"748":1,"775":1,"776":1,"777":1,"805":1,"806":1,"807":1,"861":1,"865":1,"866":1,"867":1,"894":1,"895":1,"896":1,"925":1},"1":{"52":1,"53":1,"54":1,"55":1,"86":1,"87":1,"88":1,"89":1,"90":1,"131":1,"132":1,"133":1,"134":1,"199":1,"453":1,"454":1,"455":1,"488":1,"489":1,"490":1,"585":1,"586":1,"587":1,"588":1,"661":1,"662":1,"663":1,"692":1,"693":1,"719":1,"720":1,"748":1,"749":1,"776":1,"777":1,"806":1,"807":1,"866":1,"867":1,"895":1,"896":1,"926":1},"2":{"27":2,"124":1,"166":1,"169":1,"265":1,"295":2,"298":1,"307":2,"521":1,"523":1,"550":1,"581":1,"631":2,"643":1,"699":2,"704":1,"757":2,"888":1,"889":1,"917":1,"928":1,"963":1,"964":1}}],["怎么突然又学起数学了",{"0":{"912":1}}],["怎么办",{"2":{"494":1,"495":1}}],["怎么调用",{"2":{"411":1}}],["怎么渲染",{"2":{"71":1}}],["怎么做",{"2":{"11":1,"408":1,"438":1,"556":1,"583":1}}],["怎么写原生",{"2":{"924":1}}],["怎么写代码",{"2":{"555":1}}],["怎么写",{"2":{"8":1,"12":1}}],["和渐进明细的方式",{"2":{"941":1}}],["和函数",{"2":{"928":1}}],["和函数等编程特性",{"2":{"921":1}}],["和各种",{"2":{"927":1}}],["和各类生成式工具",{"2":{"461":1}}],["和你的姓名",{"2":{"905":1}}],["和极致的性能",{"2":{"904":1}}],["和极致的工程优化",{"2":{"351":1}}],["和正文内容",{"2":{"884":1}}],["和引导指令",{"2":{"874":1}}],["和组件",{"2":{"847":1}}],["和浏览器",{"2":{"787":1}}],["和源代码分析提取",{"2":{"776":1}}],["和世界变换矩阵",{"2":{"740":1}}],["和区域",{"2":{"714":1}}],["和弦图",{"2":{"706":1}}],["和性能",{"2":{"673":1}}],["和性能损耗",{"2":{"59":1}}],["和内存开销",{"2":{"673":1}}],["和查找",{"2":{"661":1}}],["和异步求值器",{"2":{"655":1}}],["和规模扩张的狂热迷思之后",{"2":{"601":1}}],["和执行指令两部分组成",{"2":{"581":1}}],["和项目级配置",{"2":{"570":1}}],["和混合检索",{"2":{"546":1}}],["和学习指南",{"2":{"515":1}}],["和文心智能体等平台",{"2":{"498":1}}],["和网络资源",{"2":{"494":1}}],["和会话管理",{"2":{"491":1}}],["和自动重绘管理",{"2":{"673":1}}],["和自动化工具链去无缝填补短板",{"2":{"458":1}}],["和自定义模型参数生效",{"2":{"481":1}}],["和自定义",{"2":{"118":1}}],["和单元测试全部通过",{"2":{"451":1}}],["和单页应用",{"2":{"344":1}}],["和技能路由",{"2":{"443":1}}],["和向量搜索算法的不断演进",{"2":{"410":1}}],["和行动",{"2":{"408":1}}],["和数据流式传输的吞吐量",{"2":{"353":1}}],["和数据库密码永远不会暴露到浏览器",{"2":{"72":1}}],["和首屏加载慢的问题",{"2":{"344":1}}],["和增量静态再生成",{"2":{"344":1}}],["和参数拼接繁琐",{"2":{"342":1}}],["和状态管理库",{"2":{"339":1}}],["和状态变更",{"2":{"113":1}}],["和分层架构中习得了掌控复杂系统的能力",{"2":{"337":1}}],["和按需加载",{"2":{"297":1}}],["和用户子应用",{"2":{"288":1}}],["和服务实现",{"2":{"274":1}}],["和集合运算一样",{"2":{"243":1}}],["和集合",{"2":{"229":1}}],["和目标环境的类型定义",{"2":{"203":1}}],["和设计",{"2":{"182":1}}],["和循环",{"2":{"155":1}}],["和最大重试次数",{"2":{"148":1}}],["和强大的",{"2":{"104":1}}],["和错误",{"2":{"99":1}}],["和页面组件都需要同一份数据时",{"2":{"81":1}}],["和路由逻辑",{"2":{"65":1}}],["和",{"2":{"11":1,"28":1,"33":1,"35":2,"55":1,"65":1,"67":1,"69":1,"71":1,"79":1,"81":2,"97":1,"103":2,"104":1,"121":1,"125":1,"135":1,"137":1,"145":1,"160":1,"166":1,"203":4,"205":1,"225":1,"226":2,"227":1,"229":1,"230":1,"233":1,"236":1,"239":1,"240":1,"243":1,"247":1,"250":1,"255":1,"256":1,"263":1,"266":1,"267":2,"298":2,"303":1,"306":1,"309":1,"331":1,"343":2,"344":3,"345":1,"353":1,"363":1,"366":2,"367":1,"385":1,"410":1,"439":1,"442":1,"443":2,"451":1,"464":1,"470":1,"488":1,"491":1,"506":1,"540":1,"542":2,"544":1,"552":1,"555":2,"610":2,"655":1,"672":2,"677":1,"679":2,"680":2,"686":1,"704":1,"708":1,"709":1,"712":1,"729":1,"732":1,"755":2,"828":1,"854":1,"856":1,"866":1,"883":1,"902":1,"904":1,"924":1,"925":1,"927":1,"929":1,"930":1,"934":1,"948":1}}],["即现阶段",{"2":{"964":1}}],["即围绕人和社会自身来改善多个影响因素",{"2":{"958":1}}],["即紧急不重要和不紧急不重要的事务",{"2":{"952":1}}],["即便读遍全天下关于时间的书",{"2":{"950":1}}],["即便仓库内的数据发生了更新",{"2":{"115":1}}],["即开即用",{"2":{"636":1}}],["即所谓的",{"2":{"606":1}}],["即所有使用了该",{"2":{"104":1}}],["即插即用",{"2":{"547":1}}],["即上下文工程能力",{"2":{"546":1}}],["即当你失去了手动解决问题的能力时",{"2":{"530":1}}],["即不仅有欲望且具备支付能力的",{"2":{"396":1}}],["即恶性循环",{"2":{"386":1}}],["即",{"2":{"358":1,"908":1,"959":1}}],["即类型为",{"2":{"232":1}}],["即使看到了短期的效果",{"2":{"950":1}}],["即使是同一个人",{"2":{"946":1}}],["即使是",{"2":{"933":1}}],["即使在隔离环境中",{"2":{"931":1}}],["即使有很多人在评论区质疑他们描述的",{"2":{"919":1}}],["即使进入了隧道",{"2":{"907":1}}],["即使文档隐藏也保持请求打开",{"2":{"839":1}}],["即使",{"2":{"538":1}}],["即使模块没有默认导出",{"2":{"203":1}}],["即使页面隐藏也保持连接",{"2":{"175":1}}],["即连续两个",{"2":{"177":1}}],["即冒号后两个字符",{"2":{"168":1}}],["即为",{"2":{"163":1}}],["即随着任务等待时间延长",{"2":{"140":1}}],["即时消息",{"2":{"816":1}}],["即时口头指令",{"2":{"435":1}}],["即时灵活的对话指令",{"0":{"435":1}}],["即时响应",{"2":{"131":1}}],["即时通讯未读数刷新",{"2":{"156":1}}],["即时通讯",{"2":{"128":1}}],["即先更新",{"2":{"103":1}}],["即先返回缓存数据",{"2":{"97":1}}],["即可一键生成可部署的",{"2":{"561":1}}],["即可恢复上下文",{"2":{"486":1}}],["即可实现事件驱动推送",{"2":{"143":1}}],["即可获取结果",{"2":{"139":1}}],["即可生成",{"2":{"136":1}}],["即可提供服务",{"2":{"63":1}}],["即可",{"2":{"14":1,"250":1,"333":1,"964":1}}],["即状态到",{"2":{"11":1}}],["即从顶层容器开始",{"2":{"3":1}}],["幻觉率",{"2":{"550":1}}],["幻觉率低",{"2":{"521":2}}],["幻觉",{"0":{"360":1},"2":{"11":1,"424":1,"425":1,"493":2,"518":1}}],["幻觉空间",{"2":{"11":1}}],["产物体积变大",{"2":{"933":1}}],["产物体积爆炸",{"2":{"933":1}}],["产物体积始终保持极小",{"2":{"930":1}}],["产物体积极小",{"2":{"925":1}}],["产物",{"2":{"928":1}}],["产物通常能保持在",{"2":{"925":1}}],["产物文件",{"2":{"762":1,"778":1}}],["产物在",{"2":{"726":1}}],["产物是什么样子的",{"2":{"447":1}}],["产出的代码具备了企业级的稳定性",{"2":{"934":1}}],["产出表述与写作训练阶段",{"2":{"912":1}}],["产出新技能",{"2":{"884":1}}],["产出更高质量的最终版本",{"2":{"426":1}}],["产出后重置",{"2":{"168":1}}],["产出所有完整行",{"2":{"168":1}}],["产出每个字节块",{"2":{"168":1}}],["产出可维护的代码",{"2":{"9":1,"12":1}}],["产品的",{"2":{"926":1}}],["产品的核心在模型与算法",{"2":{"926":1}}],["产品的诞生高度依赖科层制的分工",{"2":{"457":1}}],["产品推动的思路是",{"2":{"909":1}}],["产品思维与",{"2":{"903":1}}],["产品型工程师",{"2":{"902":1}}],["产品构建交互式数据大屏",{"2":{"700":1}}],["产品与商业",{"0":{"599":1},"1":{"600":1,"601":1}}],["产品力作为工程力的方向盘",{"2":{"902":1}}],["产品力是技术人员最容易忽视",{"2":{"556":1}}],["产品力",{"0":{"556":1},"2":{"902":1}}],["产品力大会",{"2":{"457":1}}],["产品设计",{"2":{"553":1}}],["产品设计不仅是关乎前端的用户体验",{"2":{"391":1}}],["产品工程师",{"2":{"540":2}}],["产品应用层",{"0":{"540":1},"1":{"541":1,"542":1,"543":1},"2":{"552":1}}],["产品演示",{"2":{"515":1}}],["产品决策",{"2":{"462":1}}],["产品商业化与生态构建",{"0":{"399":1}}],["产品用户体验与留存",{"0":{"398":1}}],["产品定价策略",{"0":{"397":1}}],["产品定义与定位",{"0":{"396":1}}],["产品定位",{"2":{"366":1}}],["产品或个人的突破并不需要拼命猛踩油门",{"2":{"387":1}}],["产品或内部系统",{"2":{"342":1}}],["产品为王",{"2":{"387":2}}],["产品迭代还是商业设计",{"2":{"386":1}}],["产品化质感",{"2":{"473":1}}],["产品化",{"2":{"378":1}}],["产品敏锐度",{"2":{"376":1,"540":1}}],["产品让我欲罢不能",{"2":{"375":1}}],["产品验证报告",{"2":{"375":1}}],["产品容易变成",{"2":{"366":1}}],["产品容易沦为",{"2":{"366":1}}],["产品感",{"2":{"363":1}}],["产品经理定义需求",{"2":{"457":1}}],["产品经理觉得",{"2":{"366":1}}],["产品经理乃至独立开发者而言",{"2":{"363":1}}],["产品经理",{"2":{"361":1,"561":1}}],["产品交互重构",{"0":{"350":1}}],["产品上下文",{"2":{"280":2}}],["产品模块",{"2":{"275":1}}],["产品管理功能",{"2":{"274":1}}],["产品",{"0":{"541":1,"600":1},"2":{"92":1,"363":3,"365":1,"366":1,"367":1,"376":2,"377":1,"389":1,"457":1,"509":1,"540":1,"561":1,"562":1,"700":1,"903":1,"926":1,"928":1}}],["产品信息",{"2":{"21":1}}],["产生本能的防御和抵触",{"2":{"618":1}}],["产生意外行为的风险",{"2":{"415":1}}],["产生的是一个同时支持两种参数类型的函数",{"2":{"238":1}}],["产生一个",{"2":{"238":1}}],["产生",{"2":{"11":1}}],["划定出专门的办公空间",{"2":{"956":1}}],["划定了一个认知边界",{"2":{"11":1}}],["划分出四个",{"2":{"947":1}}],["划分过少则退化为普通",{"2":{"59":1}}],["划分组件必须恪守单一职责",{"2":{"2":1}}],["划分具备分层结构的",{"0":{"2":1}}],["实打实一个传奇",{"2":{"959":1}}],["实则陷入技术泥潭",{"2":{"365":1}}],["实用优先",{"2":{"340":1,"930":1}}],["实用泛型函数",{"0":{"259":1}}],["实例核心接口",{"2":{"719":1}}],["实例初始化选项",{"2":{"719":1}}],["实例创建和配置加载",{"2":{"851":1}}],["实例创建",{"2":{"717":1}}],["实例化网格",{"2":{"737":1}}],["实例化渲染",{"2":{"734":1}}],["实例化属性",{"2":{"734":1}}],["实例化几何体",{"2":{"734":1}}],["实例化",{"2":{"706":1,"740":1}}],["实例在",{"2":{"683":1}}],["实例",{"2":{"288":1,"649":1,"661":1,"686":1,"708":1,"719":2,"736":1,"765":1,"767":1,"768":1,"787":1,"857":1,"884":1}}],["实例配置",{"2":{"274":1}}],["实施建议",{"0":{"282":1}}],["实战场景",{"2":{"934":1}}],["实战建议",{"2":{"523":1}}],["实战",{"0":{"288":1,"487":1},"1":{"488":1,"489":1,"490":1}}],["实战模式",{"0":{"245":1},"1":{"246":1,"247":1,"248":1,"249":1}}],["实战中",{"2":{"227":1}}],["实验性功能",{"2":{"204":1}}],["实体引用拓扑",{"2":{"650":1,"680":1,"709":1,"737":1,"765":1,"797":1,"854":1,"884":1}}],["实体定义",{"2":{"650":1,"680":1,"709":1,"737":1,"765":1,"797":1,"854":1,"884":1}}],["实体层",{"2":{"275":1}}],["实体",{"0":{"402":1},"2":{"181":2,"185":1,"278":2,"281":1,"282":1,"650":1,"680":1,"797":1}}],["实际组件",{"2":{"649":1}}],["实际是信息在筛选人",{"0":{"617":1}}],["实际使用中要做好截断策略",{"2":{"523":1}}],["实际案例",{"2":{"366":1}}],["实际项目中替换为真实任务观察",{"2":{"178":1}}],["实际项目中",{"2":{"175":1}}],["实际承载的数据内容",{"2":{"164":1}}],["实际上连这个",{"2":{"622":1}}],["实际上是这些高门槛的路径在天然地筛选掉那些缺乏定力和长远产品嗅觉的人",{"2":{"617":1}}],["实际上是我们理解一切复杂类型操作的起点",{"2":{"227":1}}],["实际上是为",{"2":{"11":1}}],["实际上它们处于不同的技术层次",{"2":{"159":1}}],["实际退化为",{"2":{"59":1}}],["实践混合工作制",{"2":{"957":1}}],["实践过程中借助体脂秤的指标和数据统计",{"2":{"942":1}}],["实践细节可参考笔者之前写的一篇文章",{"2":{"942":1}}],["实践小总结",{"0":{"509":1}}],["实践背景",{"0":{"496":1}}],["实践指南",{"0":{"444":1,"928":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"929":1,"930":1,"931":1,"932":1,"933":1}}],["实践指导",{"0":{"281":1}}],["实践探索与自主创新",{"2":{"406":1}}],["实践干货等",{"2":{"346":1}}],["实践中最有用的分布式条件类型",{"2":{"234":1}}],["实践选型指南",{"0":{"141":1},"1":{"142":1,"143":1}}],["实践可以概括为三个关键词",{"2":{"61":1}}],["实践案例",{"0":{"60":1,"473":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"474":1,"475":1}}],["实践建议",{"2":{"59":1,"286":1}}],["实践",{"2":{"32":1,"622":1,"901":1}}],["实时编译",{"2":{"932":1}}],["实时编织为",{"2":{"536":1}}],["实时日志查看和监控",{"2":{"816":1}}],["实时日志等",{"2":{"180":1}}],["实时新闻",{"2":{"816":1}}],["实时网站操作",{"2":{"785":1}}],["实时监控",{"2":{"700":1}}],["实时预览",{"2":{"656":1}}],["实时抓取多个网页",{"2":{"517":1}}],["实时转录",{"2":{"515":1}}],["实时接入",{"2":{"511":1}}],["实时信息检索",{"2":{"511":1}}],["实时优化子任务的执行顺序和策略",{"2":{"424":1}}],["实时调整策略",{"2":{"412":1}}],["实时应用程序和",{"2":{"338":1}}],["实时双向聊天",{"2":{"143":1}}],["实时语音",{"2":{"142":1}}],["实时同步玩家坐标与指令的",{"2":{"128":1}}],["实时读取并处理源源不断传来的数据块",{"2":{"117":1}}],["实时化",{"2":{"115":1}}],["实时性强",{"2":{"414":1}}],["实时性更高且减少了请求次数",{"2":{"153":1}}],["实时性略差",{"2":{"149":1}}],["实时性的",{"2":{"115":1}}],["实时性要求极高的数据流",{"2":{"88":1}}],["实时性",{"2":{"67":1,"97":1,"155":1,"517":1}}],["实时性极高的应用",{"2":{"31":1}}],["实时",{"2":{"57":2,"125":1}}],["实时执行页面组件代码",{"2":{"39":1}}],["实时数据推送",{"2":{"816":1}}],["实时数据大盘",{"2":{"75":1}}],["实时数据展示",{"2":{"16":1}}],["实时数据",{"2":{"14":1}}],["实现大家的共同诉求",{"2":{"957":1}}],["实现一键换肤与暗黑模式",{"2":{"928":1}}],["实现完全的类型安全",{"2":{"927":1}}],["实现完全隔离",{"2":{"291":1}}],["实现隔离",{"2":{"924":1}}],["实现局部作用域",{"2":{"924":1}}],["实现样式隔离的常用工具",{"2":{"923":1}}],["实现代码",{"2":{"889":1}}],["实现者子agent的系统提示词",{"2":{"881":1}}],["实现流式对话",{"2":{"864":1}}],["实现的黄金标准",{"2":{"850":1}}],["实现的唯一依据",{"2":{"9":1}}],["实现层",{"2":{"847":1,"848":1}}],["实现装饰器嵌套",{"2":{"844":1}}],["实现抖动效果",{"2":{"774":1}}],["实现跨后端着色器复用",{"2":{"732":1}}],["实现跨项目的类型安全",{"2":{"207":1}}],["实现着色器跨后端复用",{"2":{"729":1}}],["实现最小化的增删操作",{"2":{"713":1}}],["实现属性的缓动过渡",{"2":{"686":1}}],["实现低成本上手",{"2":{"559":1}}],["实现低延迟的实时数据交换",{"2":{"127":1}}],["实现资源负载均衡和容灾恢复",{"2":{"551":1}}],["实现业务流程自适应编排的智能化系统",{"2":{"477":1}}],["实现业务流程的自适应编排",{"2":{"403":1}}],["实现力被重新定义为",{"2":{"461":1}}],["实现力不再是",{"2":{"461":1}}],["实现力",{"0":{"461":1},"2":{"466":1}}],["实现维度",{"2":{"441":1}}],["实现多任务并行处理",{"2":{"438":1}}],["实现多智体协作",{"2":{"411":1}}],["实现特定领域的稳定",{"2":{"436":1}}],["实现方式",{"2":{"411":1}}],["实现方案",{"0":{"165":1},"1":{"166":1,"167":1,"168":1,"169":1}}],["实现规模化的生产方式",{"2":{"403":1}}],["实现从通用助手向特定任务专家",{"2":{"547":1}}],["实现从",{"2":{"403":1,"406":1,"491":1}}],["实现复杂度",{"2":{"365":1}}],["实现极快的构建速度",{"2":{"343":1}}],["实现前后端无缝",{"2":{"342":1}}],["实现原理",{"2":{"306":1}}],["实现简单",{"2":{"287":1}}],["实现以下目标",{"2":{"285":1}}],["实现用户界面层",{"2":{"282":1}}],["实现基础设施层",{"2":{"282":1}}],["实现应用层",{"2":{"282":1}}],["实现领域层",{"2":{"282":1}}],["实现模块间解耦",{"2":{"281":1}}],["实现在基础设施层",{"2":{"281":1}}],["实现仓储接口",{"2":{"279":1}}],["实现认证授权与权限控制",{"2":{"275":1}}],["实现了真正的样式局部隔离",{"2":{"923":1}}],["实现了",{"2":{"886":1}}],["实现了一个完整的表达式引擎",{"2":{"655":1}}],["实现了一个策略模式",{"2":{"652":1}}],["实现了决策与执行的解耦",{"2":{"429":1}}],["实现了数据消费端的高度自治",{"2":{"342":1}}],["实现了数据的边计算",{"2":{"116":1}}],["实现了网页的结构与样式的分离",{"2":{"338":1}}],["实现了类型安全与代码复用的平衡",{"2":{"270":1}}],["实现了两个接口的类",{"2":{"267":1}}],["实现配置的复用与独立定制",{"2":{"226":1}}],["实现配置复用和类型共享",{"2":{"205":1}}],["实现类型共享",{"2":{"214":1}}],["实现类型共享和增量编译",{"2":{"203":1}}],["实现项目特定的配置需求",{"2":{"209":1}}],["实现更精细的编译控制",{"2":{"202":1}}],["实现核心目标",{"2":{"201":1}}],["实现需求必须的信息",{"2":{"195":1}}],["实现示例",{"0":{"178":1}}],["实现主动取消",{"2":{"175":1}}],["实现真正的复用",{"2":{"256":1}}],["实现真正的",{"2":{"152":1}}],["实现真正的全双工流式交互",{"2":{"142":1}}],["实现带错误回滚的乐观更新是一种标准的",{"2":{"110":1}}],["实现快速响应",{"2":{"97":1}}],["实现即时页面切换",{"2":{"73":1}}],["实现内容更新自动部署",{"2":{"32":1}}],["实现订单查询",{"2":{"30":1}}],["实现动态评论",{"0":{"28":1}}],["实现动态评论功能",{"2":{"27":1}}],["实现",{"0":{"166":1},"2":{"16":1,"28":1,"31":1,"32":1,"252":1,"267":2,"376":1,"410":1,"457":1,"515":1,"639":1,"714":1,"734":1,"760":1,"769":1,"792":1,"797":2,"815":1,"824":1,"845":1,"853":1,"859":1,"902":1,"926":1}}],["实现具体渲染逻辑与交互细节",{"2":{"10":1}}],["实现逻辑与视图的物理隔离",{"2":{"1":1}}],["就这样",{"2":{"953":1,"962":1}}],["就这样经过长年累月地洗礼",{"2":{"938":1}}],["就越体会到挫败感",{"2":{"952":1}}],["就越有人和你合作",{"2":{"908":1}}],["就创建了一个",{"2":{"947":1}}],["就叫",{"2":{"924":1}}],["就怎么写",{"2":{"924":1}}],["就很可能让最后训练出来的模型比单独训练出来的模型表现得更好",{"2":{"918":1}}],["就可以恢复原始图像",{"2":{"916":1}}],["就一个字",{"2":{"908":1}}],["就开开心心地向前看",{"2":{"906":1}}],["就开始返回数据",{"2":{"136":1}}],["就永远停留在",{"2":{"622":1}}],["就会想到在学校毕业季曾因锻炼不当锻炼后疼了很久",{"2":{"962":1}}],["就会自动推导出必须输出",{"2":{"934":1}}],["就会得到方程组",{"2":{"915":1}}],["就会完全错失这部分在数量上更为庞大的知识宝库",{"2":{"614":1}}],["就会彻底失去读书的平常心和客观理解力",{"2":{"612":1}}],["就会发现",{"2":{"326":1}}],["就失去了读书的平常心和客观理解力",{"2":{"612":1}}],["就该拆分出来",{"2":{"577":1}}],["就已经走在了正确的方向上",{"2":{"465":1}}],["就不可能知道问题出在哪里",{"2":{"908":1}}],["就不可能知道问题到底出在哪一行",{"2":{"382":1}}],["就不再是客观接受信息",{"2":{"612":1}}],["就不会波及其他模块",{"2":{"297":1}}],["就要恢复对",{"2":{"370":1}}],["就强行创造一个需求",{"2":{"365":1}}],["就必须抓住不合理的迹象",{"2":{"360":1}}],["就必须确保这个对象有这个属性",{"2":{"263":1}}],["就没有如此高效的",{"2":{"316":1}}],["就形成了循环依赖",{"2":{"315":1}}],["就能组成输入与输出之间的增强回路",{"2":{"909":1}}],["就能完成过去一支团队的交付量",{"2":{"553":1}}],["就能自行拆解问题",{"2":{"355":1}}],["就能安全地处理多种类型",{"2":{"255":1}}],["就能看到导航栏",{"2":{"86":1}}],["就证明所有可能的情况都已经被处理了",{"2":{"232":1}}],["就像我曾经以为的那样",{"2":{"553":1}}],["就像我们逐步缩小搜索范围一样",{"2":{"231":1}}],["就像一个调研项目",{"2":{"415":1}}],["就像一个",{"2":{"407":1}}],["就像洗澡时调水温",{"2":{"388":1}}],["就像没有",{"2":{"375":1}}],["就像资深程序员看到一段代码就能嗅出",{"2":{"363":1}}],["就像是一个",{"2":{"254":1}}],["就像每张身份证都有一个唯一的身份证号",{"2":{"230":1}}],["就满足类型要求",{"2":{"229":1}}],["就需要准确知道列表的",{"2":{"110":1}}],["就把整个项目拖回传统服务端渲染模式",{"2":{"75":1}}],["就足够了",{"2":{"67":1}}],["就是基于二维平面来安排好自己的工作与生活",{"2":{"956":1}}],["就是白费功夫",{"2":{"950":1}}],["就是强调",{"2":{"909":1}}],["就是继续保持之前的习惯",{"2":{"909":1}}],["就是收集更多的技术徽章",{"2":{"902":1}}],["就是南辕北辙了",{"2":{"613":1}}],["就是解决从",{"2":{"550":1}}],["就是新的工程",{"2":{"533":1}}],["就是对比传统",{"2":{"503":1}}],["就是应用程序",{"2":{"439":1}}],["就是标准化的",{"2":{"436":1}}],["就是一个",{"2":{"402":1}}],["就是试图进行帕累托改进",{"2":{"394":1}}],["就是让这个世界回归平衡",{"2":{"387":1,"910":1}}],["就是两条或多条因果链首尾相连",{"2":{"386":1}}],["就是它们之间的",{"2":{"383":1}}],["就是设计这个",{"2":{"367":1}}],["就是商业嗅觉的体现",{"2":{"363":1}}],["就是我的机会",{"0":{"354":1}}],["就是",{"2":{"231":1,"439":1,"927":1}}],["就是集合",{"2":{"229":1}}],["就是更好的选择",{"2":{"111":1}}],["就是最优解",{"2":{"66":1}}],["就是完美的",{"2":{"11":1}}],["就少一分运行时复杂度",{"2":{"66":1}}],["就近加载",{"2":{"15":1}}],["就通过",{"2":{"6":1}}],["宪法",{"2":{"11":1}}],["特效实现",{"2":{"762":1}}],["特有光源",{"2":{"734":1}}],["特殊的",{"2":{"680":1}}],["特殊文件约定",{"0":{"78":1}}],["特定文件夹的规则",{"2":{"571":1}}],["特定的训练数据给某个单一模型",{"2":{"918":1}}],["特定的研发工具或外部",{"2":{"548":1}}],["特定的笔记结构",{"2":{"436":1}}],["特定格式文档转换",{"2":{"443":1}}],["特定地区优惠",{"2":{"397":1}}],["特定领域",{"2":{"263":1}}],["特点",{"2":{"342":2}}],["特点与说明",{"2":{"298":1}}],["特别感谢很多师傅指导",{"2":{"942":1}}],["特别感谢开源社区赋予我们如此强大的工具",{"2":{"904":1}}],["特别适合练习理解题意",{"2":{"494":1}}],["特别适合以下场景",{"2":{"10":1}}],["特别是",{"2":{"934":1}}],["特别是当你需要从零搭建一套属于自己团队的",{"2":{"927":1}}],["特别是针对大型",{"2":{"305":1}}],["特别是那些涉及复杂中间态和高频交互的领域",{"2":{"111":1}}],["特性层",{"2":{"274":1}}],["特性",{"2":{"15":1,"114":1,"117":1,"160":1,"210":1,"253":1,"263":1,"320":1,"341":1,"478":1,"585":1,"672":1}}],["特性意味着我们只需描述",{"2":{"11":1}}],["工友吃什么",{"2":{"964":1}}],["工业标准",{"2":{"730":1}}],["工业巡检",{"2":{"418":1}}],["工业级编程语言",{"2":{"309":1}}],["工厂接口",{"2":{"848":1,"866":1}}],["工厂方法",{"2":{"770":1}}],["工厂按权重",{"2":{"652":1}}],["工厂系统是",{"2":{"652":1}}],["工厂模式",{"0":{"300":1},"2":{"761":1,"851":1}}],["工厂",{"2":{"278":1,"706":1}}],["工厂函数",{"2":{"203":2}}],["工作制",{"2":{"957":1}}],["工作与生活没有了界限",{"2":{"956":1}}],["工作日继续多去不同的餐区吃饭",{"2":{"964":1}}],["工作日午饭和晚饭最多吃两天主食",{"2":{"963":1}}],["工作日每天午休和晚休走一定的路",{"2":{"963":1,"964":1}}],["工作日每天至少下一次楼梯",{"2":{"963":1,"964":1}}],["工作日每天早上在早饭前",{"2":{"963":1,"964":1}}],["工作日每天必须在午休和晚休时间走一定的路",{"2":{"962":1}}],["工作日",{"2":{"953":2,"956":1}}],["工作日早上坚持做早饭",{"2":{"942":1}}],["工作技能圈",{"2":{"947":1}}],["工作线程",{"2":{"734":1}}],["工作表管理",{"2":{"647":1}}],["工作记忆",{"2":{"536":1}}],["工作模式设定",{"0":{"502":1}}],["工作模式与工具集配置",{"0":{"500":1},"1":{"501":1,"502":1}}],["工作空间隔离",{"2":{"437":1}}],["工作流的第一道",{"2":{"888":1}}],["工作流的成型",{"2":{"464":1}}],["工作流第3步",{"2":{"881":2}}],["工作流第2步",{"2":{"881":1}}],["工作流第1步",{"2":{"881":1}}],["工作流质量的工具开发者",{"2":{"875":1}}],["工作流引擎",{"2":{"849":1}}],["工作流编排",{"2":{"842":1}}],["工作流设计",{"0":{"471":1}}],["工作流自动化",{"0":{"454":1}}],["工作流",{"2":{"414":1,"447":1,"462":1,"494":1,"547":1,"729":1,"762":1,"823":1}}],["工作流架构",{"2":{"367":1}}],["工作流交互",{"2":{"113":1}}],["工作量越大",{"2":{"57":1}}],["工具库在",{"2":{"931":1}}],["工具库等",{"2":{"573":1}}],["工具映射参考",{"2":{"887":1}}],["工具映射测试",{"2":{"881":1}}],["工具对照表",{"2":{"881":3}}],["工具与",{"2":{"881":3}}],["工具与数据源",{"2":{"439":1}}],["工具系统",{"0":{"868":1}}],["工具选择策略",{"2":{"856":1}}],["工具准备逻辑",{"2":{"856":1}}],["工具结果等",{"2":{"854":1}}],["工具循环",{"2":{"853":1}}],["工具执行完全在核心层处理",{"2":{"844":1}}],["工具统一管理",{"2":{"785":1}}],["工具碎片化",{"2":{"784":1}}],["工具栏",{"2":{"734":1}}],["工具箱",{"2":{"706":1}}],["工具集合",{"2":{"854":1}}],["工具集",{"2":{"647":24,"677":4,"706":31,"734":11,"762":58,"792":50,"849":2,"881":37}}],["工具当作你的",{"2":{"610":1}}],["工具深度对话",{"2":{"610":1}}],["工具横向对比",{"0":{"568":1}}],["工具插件生态最丰富",{"2":{"511":1}}],["工具的有机结合",{"2":{"494":1}}],["工具能力",{"2":{"494":1}}],["工具查找与当前问题相似的典型例题或变式题",{"2":{"494":1}}],["工具委托任务",{"2":{"470":1}}],["工具生成",{"2":{"470":1}}],["工具协作断层",{"2":{"465":1}}],["工具栈也从单一走向前沿",{"2":{"464":1}}],["工具化阶段",{"2":{"459":1}}],["工具完成一个小闭环",{"2":{"459":1}}],["工具就是它的",{"2":{"408":1}}],["工具和趋势等",{"2":{"346":6}}],["工具和趋势",{"2":{"346":5}}],["工具链",{"2":{"522":1}}],["工具链与图文多模态理解应用",{"2":{"522":1}}],["工具链开发",{"2":{"512":1}}],["工具链和限制条件进行了严格的定义",{"2":{"494":1}}],["工具链成熟",{"2":{"341":1}}],["工具链选型",{"0":{"17":1},"1":{"18":1,"19":1,"20":1,"21":1}}],["工具层",{"2":{"274":1}}],["工具类类似",{"2":{"642":1}}],["工具类",{"2":{"188":1,"647":2,"925":1}}],["工具调用循环完全",{"2":{"856":1}}],["工具调用循环采用策略模式处理不同的停止条件",{"2":{"856":1}}],["工具调用循环等编排逻辑",{"2":{"853":1}}],["工具调用循环在这里",{"2":{"850":1}}],["工具调用循环",{"2":{"847":1,"853":1,"856":1}}],["工具调用完善",{"2":{"522":1}}],["工具调用少",{"2":{"432":1}}],["工具调用的安全边界",{"2":{"415":1}}],["工具调用",{"2":{"113":1,"402":1,"502":4,"512":1,"842":1,"854":1,"895":1}}],["工具",{"0":{"402":1,"411":1,"501":1},"2":{"18":1,"342":1,"408":3,"470":2,"472":1,"494":1,"515":1,"518":1,"557":1,"559":1,"562":1,"565":1,"568":1,"693":1,"734":1,"856":1,"880":1,"883":1,"887":3}}],["工具会迭代",{"2":{"12":1}}],["工具函数和矩阵变换",{"2":{"679":1}}],["工具函数和组件接口",{"2":{"271":1}}],["工具函数和类库开发",{"2":{"256":1}}],["工具函数等场景",{"2":{"264":1}}],["工具函数",{"2":{"10":1,"274":1,"275":1,"280":2,"286":1,"647":2}}],["工程力从",{"2":{"902":1}}],["工程力不再止步于",{"2":{"555":1}}],["工程力的内核发生了迁移",{"2":{"555":1}}],["工程力",{"0":{"555":1},"2":{"902":1}}],["工程时代",{"2":{"537":1}}],["工程语义翻译层",{"2":{"536":1}}],["工程确定性不源于单次生成的完美",{"2":{"535":1}}],["工程尊严",{"0":{"526":1},"1":{"527":1,"528":1,"529":1},"2":{"526":1}}],["工程",{"0":{"533":1},"2":{"525":1,"553":1}}],["工程债务",{"2":{"525":1}}],["工程腐化",{"2":{"491":1}}],["工程架构维度",{"2":{"441":1}}],["工程师如何构建",{"2":{"902":1}}],["工程师能力",{"2":{"568":1}}],["工程师常沉迷于后端架构的完美重构",{"2":{"556":1}}],["工程师必须建立系统的评测与监控体系",{"2":{"550":1}}],["工程师必须掌握流式渲染",{"2":{"543":1}}],["工程师就是为这个大脑装上",{"2":{"544":1}}],["工程师往往是被动接收",{"2":{"541":1}}],["工程师的价值体现为架构决策的权衡",{"2":{"902":1}}],["工程师的独特价值不再是实现细节",{"2":{"532":1}}],["工程师的角色边界正在变得愈发模糊",{"2":{"529":1}}],["工程师的不可替代性",{"0":{"12":1}}],["工程师可以更专注于业务逻辑的实现",{"2":{"527":1}}],["工程师定义意图与边界",{"2":{"527":1}}],["工程师根本不会去碰的任务",{"2":{"526":1}}],["工程师变快了",{"2":{"526":1}}],["工程师们不仅在提速",{"2":{"525":1}}],["工程师",{"2":{"525":1,"564":1}}],["工程师负责架构与代码",{"2":{"457":1}}],["工程师思维",{"2":{"431":1}}],["工程则是以",{"2":{"403":1}}],["工程化指南",{"2":{"934":1}}],["工程化早已超越了单纯的",{"2":{"934":1}}],["工程化局部兜底的混合架构",{"2":{"928":1}}],["工程化体系建设的整体决策思路如下",{"2":{"928":1}}],["工程化的最新演进方向",{"2":{"928":1}}],["工程化的体验",{"2":{"110":1}}],["工程化解决方案和工具繁多",{"2":{"933":1}}],["工程化解决方案",{"2":{"928":1}}],["工程化方案",{"2":{"920":1}}],["工程化方案有哪些",{"0":{"920":1}}],["工程化能力以及项目推动与团队合作的能力",{"2":{"901":1}}],["工程化",{"2":{"346":1,"476":1,"901":1}}],["工程外骨骼",{"2":{"337":1}}],["工程实践示例",{"2":{"319":1}}],["工程价值",{"2":{"297":1,"342":3}}],["工程选型的五条金律",{"0":{"143":1}}],["工程考量",{"0":{"133":1}}],["工程落地的",{"0":{"129":1}}],["工程避坑指南",{"0":{"124":1}}],["工程闭环",{"2":{"9":1}}],["工程验证",{"2":{"9":2}}],["内联接口",{"2":{"845":1}}],["内联第三方依赖",{"2":{"758":1}}],["内联编辑",{"2":{"656":1}}],["内联编辑组件",{"2":{"647":1,"656":1}}],["内建着色器资源",{"2":{"734":1}}],["内存缓存",{"2":{"734":1}}],["内存占用与长连接管理压力将呈几何级数增长",{"2":{"129":1}}],["内",{"2":{"677":1}}],["内心的潜台词变成了表演",{"2":{"612":1}}],["内心独白",{"2":{"427":1}}],["内涵",{"2":{"507":1}}],["内追求",{"2":{"201":1}}],["内置模块",{"2":{"881":1}}],["内置适配器发现",{"2":{"795":1}}],["内置管道步骤",{"2":{"792":1}}],["内置命令处理",{"2":{"796":1}}],["内置命令实现",{"2":{"792":1}}],["内置命令",{"2":{"790":1}}],["内置函数和属性",{"2":{"769":1}}],["内置函数",{"2":{"757":1,"762":1}}],["内置节点库",{"2":{"736":1}}],["内置着色器库",{"2":{"734":1}}],["内置几何体",{"2":{"734":1}}],["内置完整的",{"2":{"729":1}}],["内置主题",{"2":{"706":1}}],["内置缩放",{"2":{"699":1}}],["内置图层批量渲染",{"2":{"670":1}}],["内置公式函数",{"2":{"641":1,"655":1}}],["内置免费模型",{"2":{"567":1,"568":1}}],["内置隐私模式",{"2":{"564":1}}],["内置深度开发模式",{"2":{"561":1}}],["内置深度研究模式",{"2":{"522":1}}],["内置托管与分享功能",{"2":{"561":1}}],["内置浏览器插件可一键抓取网页",{"2":{"515":1}}],["内置联网检索与深度研究",{"2":{"512":1}}],["内置了一套完整的",{"2":{"639":1}}],["内置了依赖注入",{"2":{"344":2}}],["内置了屏幕聚焦",{"2":{"97":1}}],["内置",{"2":{"103":1,"515":3,"561":1,"642":1,"734":2,"736":1,"800":2}}],["内置的核心模块",{"2":{"334":1}}],["内置的",{"2":{"90":1,"561":1}}],["内置优化组件",{"0":{"84":1}}],["内置后端能力",{"0":{"83":1}}],["内部样式时",{"2":{"931":1}}],["内部分离",{"2":{"928":1}}],["内部设计文档",{"2":{"881":1}}],["内部解析",{"0":{"840":1}}],["内部依赖",{"0":{"827":1}}],["内部存储",{"2":{"706":1}}],["内部调用接口",{"2":{"706":1}}],["内部事件",{"2":{"684":1}}],["内部结构图",{"2":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"711":1,"712":1,"713":1,"714":1,"715":1,"739":1,"740":1,"741":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"799":1,"800":1,"801":1,"856":1,"857":1,"858":1,"859":1,"886":1,"887":1,"888":1,"889":1,"890":1}}],["内部能力不对称",{"2":{"622":1}}],["内部使用",{"2":{"535":1}}],["内部使用调用签名的合并",{"2":{"238":1}}],["内部自动管理多轮交互",{"2":{"478":1}}],["内部曾经历过激烈的争论",{"2":{"350":1}}],["内部的",{"2":{"342":1}}],["内部实现注册表",{"2":{"706":1}}],["内部实现细节",{"2":{"197":1}}],["内部实现了分块加载",{"2":{"86":1}}],["内部状态",{"2":{"197":1,"801":1}}],["内部状态码",{"2":{"196":2}}],["内部状态边界及副作用生命周期",{"2":{"10":1}}],["内部会自动设置正确的响应头",{"2":{"178":1}}],["内部会监听",{"2":{"174":1}}],["内部工具函数",{"2":{"734":1}}],["内部工具等也开始被自动化",{"2":{"527":1}}],["内部工具",{"2":{"92":1}}],["内部格式",{"2":{"73":1}}],["内容提取",{"2":{"792":1}}],["内容类应用动画表情",{"2":{"756":1}}],["内容类型等自定义头部",{"2":{"814":1}}],["内容类型不匹配或响应失败",{"2":{"175":1}}],["内容类型",{"2":{"166":1,"169":1}}],["内容可检索性",{"2":{"613":1}}],["内容归类",{"2":{"550":1}}],["内容摘要",{"2":{"522":1}}],["内容整理与二次创作",{"2":{"515":1}}],["内容自动化",{"2":{"515":2}}],["内容自动填写与总结",{"2":{"515":1}}],["内容创作等流程中去",{"2":{"901":1}}],["内容创作辅助",{"2":{"515":1}}],["内容创作",{"2":{"512":1}}],["内容总结",{"2":{"512":1,"515":1}}],["内容健康",{"2":{"506":1}}],["内容简洁优雅",{"2":{"504":1}}],["内容准确性",{"2":{"494":1}}],["内容像",{"2":{"445":1}}],["内容站",{"2":{"344":1}}],["内容驱动型应用",{"2":{"342":1}}],["内容",{"2":{"163":1,"443":1,"470":1,"471":1,"728":1}}],["内容密集型网站",{"2":{"92":1}}],["内容每个用户",{"2":{"75":1}}],["内容常变但不是每秒都变",{"2":{"75":1}}],["内容对所有用户都一样",{"2":{"75":1}}],["内容需定期更新",{"2":{"75":1}}],["内容嵌入",{"2":{"66":1}}],["内容被编译为",{"2":{"65":1}}],["内容作弊",{"2":{"59":1}}],["内容不一致",{"2":{"59":1}}],["内容严重滞后",{"2":{"59":1}}],["内容定期更新",{"2":{"57":1}}],["内容固定不变",{"2":{"58":1}}],["内容固定",{"2":{"57":1,"66":1}}],["内容频繁更新的网站",{"2":{"31":1}}],["内容更新不频繁",{"2":{"31":1}}],["内容更新后自动部署",{"2":{"29":1}}],["内容模型",{"2":{"26":1,"30":1}}],["内容与代码分离",{"2":{"21":1}}],["内容管理",{"0":{"21":1,"26":1},"2":{"23":1,"30":1}}],["内嵌库",{"2":{"734":1}}],["内嵌",{"2":{"9":1,"880":1,"884":1}}],["场景需谨慎",{"2":{"922":1}}],["场景遍历",{"2":{"739":1}}],["场景编辑器",{"2":{"734":1}}],["场景根节点",{"2":{"733":1,"734":1}}],["场景图操作",{"2":{"748":1}}],["场景图",{"2":{"748":1}}],["场景图系统",{"0":{"740":1}}],["场景图节点契约",{"2":{"748":1}}],["场景图节点",{"2":{"734":1}}],["场景图层",{"2":{"732":1,"733":2}}],["场景图的根节点",{"2":{"680":1}}],["场景说明",{"0":{"658":1,"659":1},"2":{"688":1,"689":1,"690":1,"717":1,"745":1,"746":1,"773":1,"774":1,"803":1,"804":1,"863":1,"864":1,"892":1,"893":1}}],["场景三",{"0":{"690":1},"2":{"640":1}}],["场景二",{"0":{"689":1,"746":1,"774":1,"893":1},"2":{"640":1,"659":1}}],["场景一",{"0":{"688":1,"745":1,"773":1,"863":1,"892":1},"2":{"640":1,"658":1}}],["场景匹配",{"2":{"518":1}}],["场景具体",{"2":{"448":1}}],["场景就走分支",{"2":{"329":2}}],["场景中",{"2":{"316":1}}],["场景示例",{"2":{"288":1}}],["场景6",{"0":{"198":1},"1":{"199":1}}],["场景5",{"0":{"195":1},"1":{"196":1,"197":1}}],["场景4",{"0":{"192":1},"1":{"193":1,"194":1}}],["场景3",{"0":{"189":1},"1":{"190":1,"191":1}}],["场景2",{"0":{"186":1},"1":{"187":1,"188":1}}],["场景1",{"0":{"183":1},"1":{"184":1,"185":1}}],["场景下",{"2":{"143":1,"391":1}}],["场景特征",{"2":{"136":1}}],["场景驱动选型",{"0":{"111":1},"1":{"112":1,"113":1}}],["场景边界与建议",{"0":{"91":1},"1":{"92":1,"93":1,"94":1}}],["场景类型",{"2":{"31":1,"435":1,"437":1,"438":1,"439":1}}],["场景延伸",{"0":{"30":1}}],["场景",{"0":{"99":1,"100":1,"101":1,"106":1,"107":1,"108":1,"112":1,"113":1},"2":{"10":1,"66":1,"92":1,"93":1,"107":1,"123":1,"128":1,"132":1,"453":1,"454":1,"455":1,"553":1,"577":1,"595":1,"700":1,"734":1,"816":1}}],["交错属性访问器",{"2":{"734":1}}],["交错缓冲区",{"2":{"734":1}}],["交代语境",{"2":{"609":1}}],["交易模型等底层框架",{"2":{"600":1}}],["交付时间压力",{"2":{"928":1}}],["交付时机",{"2":{"89":1}}],["交付边界",{"2":{"553":1}}],["交付速度呈指数级上升",{"2":{"464":1}}],["交叉领域的数字花园",{"2":{"903":1}}],["交叉的",{"2":{"250":1}}],["交叉",{"2":{"236":1,"242":1,"249":1}}],["交叉类型组合",{"2":{"248":1}}],["交叉类型和接口继承都能实现类型组合",{"2":{"240":1}}],["交叉类型的",{"2":{"239":1}}],["交叉类型更",{"2":{"237":1}}],["交叉类型使用",{"2":{"236":1}}],["交叉类型",{"0":{"235":1,"240":1},"1":{"236":1,"237":1,"238":1,"239":1,"240":1}}],["交互动画",{"2":{"782":1}}],["交互需求",{"2":{"758":1}}],["交互反馈",{"2":{"756":1}}],["交互对象",{"2":{"734":1}}],["交互控制器",{"2":{"729":1,"734":1}}],["交互组件",{"2":{"706":1}}],["交互的模块",{"2":{"684":1}}],["交互的主要函数",{"2":{"482":1}}],["交互页面",{"2":{"640":1}}],["交互看板",{"2":{"632":1}}],["交互方式",{"2":{"568":1}}],["交互逻辑转化为可预测的软件工程实践",{"2":{"491":1}}],["交互逻辑开发",{"2":{"10":1}}],["交互效果展示",{"0":{"490":1}}],["交互自然",{"2":{"414":1}}],["交互中",{"2":{"410":1}}],["交互才刚刚开始",{"2":{"350":1}}],["交互驱动加载",{"2":{"313":1}}],["交互后流畅",{"2":{"75":1}}],["交互层仍然可以是完整的客户端应用",{"2":{"66":1}}],["交互",{"2":{"57":1,"553":1}}],["交给",{"2":{"1":1}}],["杜绝大型",{"2":{"928":1}}],["杜绝污染",{"2":{"928":1}}],["杜绝拼写错误",{"2":{"927":1}}],["杜绝冗余与泄漏",{"2":{"10":1}}],["杜绝任何形式的隐式状态共享",{"2":{"2":1}}],["需精通",{"2":{"928":1}}],["需",{"2":{"928":1}}],["需依赖命名规范",{"2":{"928":1}}],["需支持",{"2":{"665":1}}],["需团队共享的操作",{"2":{"580":1}}],["需科学上网",{"2":{"523":4}}],["需包含特定关键词以便",{"2":{"442":1}}],["需规避的反模式",{"2":{"344":1}}],["需编写大量",{"2":{"342":1}}],["需手动拦截",{"2":{"342":1}}],["需配合",{"2":{"341":1}}],["需配置服务器集群",{"2":{"15":1}}],["需定义",{"2":{"341":1}}],["需理解中间件",{"2":{"341":1}}],["需遵守三个边界",{"2":{"200":1}}],["需先理解其三个关键前提",{"2":{"181":1}}],["需先明确其",{"2":{"10":1}}],["需特定配置",{"2":{"160":1}}],["需自行解析数据流",{"2":{"159":1}}],["需自行集成",{"2":{"71":1}}],["需快速响应",{"2":{"155":1}}],["需重新建立长连接",{"2":{"155":1}}],["需注意配置网关超时",{"2":{"155":1}}],["需注意避免",{"2":{"41":1}}],["需管理挂起",{"2":{"155":1}}],["需提供",{"2":{"142":1}}],["需提前创建仓库",{"2":{"29":1}}],["需深刻理解",{"2":{"110":1}}],["需求澄清与设计生成",{"2":{"881":1}}],["需求→设计",{"2":{"880":1}}],["需求翻译机",{"0":{"556":1}}],["需求洞察",{"2":{"553":1}}],["需求挖掘",{"2":{"366":1}}],["需求分析",{"2":{"366":1}}],["需求的查询",{"2":{"349":1}}],["需求边界",{"2":{"201":1}}],["需求应明确说明",{"2":{"187":1}}],["需求是否必须用这个库",{"2":{"194":1}}],["需求是",{"2":{"185":1}}],["需求仅要求",{"2":{"184":1}}],["需求实现",{"0":{"183":1},"1":{"184":1,"185":1}}],["需求",{"2":{"58":1,"193":1,"396":1}}],["需求拆解与接口语义推敲",{"2":{"1":1}}],["需等",{"2":{"57":1}}],["需额外集成",{"2":{"31":1}}],["需用户介入",{"2":{"113":1}}],["需用",{"2":{"27":1}}],["需通过",{"2":{"20":1}}],["需要学习一些知识套路尝试着实践",{"2":{"958":1}}],["需要养成每天把碎片及时装进日常清单的习惯",{"2":{"953":1}}],["需要依赖发现",{"2":{"950":1}}],["需要快速迭代的中后台系统或常规",{"2":{"924":1}}],["需要快速搭建后台管理系统的前端工程师",{"2":{"639":1}}],["需要额外的配置和优化成本",{"2":{"922":1}}],["需要先看看能不能提高基础概率",{"2":{"917":1}}],["需要重试",{"2":{"832":1}}],["需要拦截网络",{"2":{"800":1}}],["需要自定义",{"2":{"800":1}}],["需要浏览器",{"2":{"800":1}}],["需要标准化接口",{"2":{"784":1}}],["需要复用已登录会话",{"2":{"784":1}}],["需要数百行代码绘制一个三角形",{"2":{"728":1}}],["需要高性能",{"2":{"700":1}}],["需要高度并行的项目",{"2":{"342":1}}],["需要交互式探索数据",{"2":{"700":1}}],["需要集成低代码能力的",{"2":{"639":1}}],["需要专门的数据库上下文知识",{"2":{"592":1}}],["需要深入追问",{"2":{"592":1}}],["需要深度专题报告",{"2":{"518":1}}],["需要多人协作审查",{"2":{"592":1}}],["需要独立判断的复杂任务",{"2":{"592":1}}],["需要捍卫的代码",{"2":{"590":1}}],["需要校验和回滚方案",{"2":{"587":1}}],["需要配套文档",{"2":{"587":1}}],["需要配套文档的复杂工作流",{"2":{"585":1}}],["需要配合",{"2":{"203":2}}],["需要固定流程的操作封装起来",{"2":{"583":1}}],["需要替换为你的项目信息",{"2":{"573":1}}],["需要订阅官方模型服务",{"2":{"559":1}}],["需要极强的",{"2":{"531":1}}],["需要实时",{"2":{"518":1}}],["需要做汇报或分享时",{"2":{"515":1}}],["需要制作演示文稿",{"2":{"515":1}}],["需要分析长文档",{"2":{"510":1}}],["需要联网实时信息",{"2":{"510":1}}],["需要记得前几步的操作结果",{"2":{"485":1}}],["需要包含真实的触发短语",{"2":{"448":1}}],["需要哪些多步骤流程",{"2":{"447":1}}],["需要遵循设计原则修改",{"2":{"445":1}}],["需要遵循以下实践原则",{"2":{"281":1}}],["需要让同一批背景知识持续作用于每一轮对话的长期任务",{"2":{"437":1}}],["需要继续",{"2":{"429":1}}],["需要长程推理的任务",{"2":{"414":1}}],["需要理论学习和大量实践",{"2":{"400":1}}],["需要平衡广告商的外部收益",{"2":{"399":1}}],["需要进一步验证",{"2":{"366":1}}],["需要敏锐地判断哪个方案不仅可行",{"2":{"359":1}}],["需要同时掌握",{"2":{"927":1}}],["需要同时为多种不同客户端提供高灵活性",{"2":{"342":1}}],["需要同时支持",{"2":{"306":1}}],["需要精细化控制网络请求拦截器的中大型企业级项目",{"2":{"342":1}}],["需要精细化控制请求头",{"2":{"342":1}}],["需要权衡项目的规模",{"2":{"292":1}}],["需要处理大量表单提交",{"2":{"342":1}}],["需要处理子应用的加载",{"2":{"292":1}}],["需要处理聚合事务",{"2":{"283":1}}],["需要处理特定基本类型的场景",{"2":{"270":1}}],["需要团队具备较强的架构能力和协作能力",{"2":{"292":1}}],["需要团队成员对业务有深入理解",{"2":{"283":1}}],["需要团队自行建立严格的",{"2":{"110":1}}],["需要时间学习和实践",{"2":{"283":1}}],["需要泛型参数具备多种能力的场景",{"2":{"270":1}}],["需要从四个方面来把握",{"2":{"254":1}}],["需要安装以下依赖",{"2":{"221":1}}],["需要字符串",{"2":{"178":1}}],["需要主动断开连接",{"2":{"174":1}}],["需要用更具工程表达能力的预处理器",{"2":{"931":1}}],["需要用到哪些领域知识与规则",{"2":{"447":1}}],["需要用到请求",{"2":{"101":1}}],["需要用标志位防止重复触发",{"2":{"173":1}}],["需要在产品中快速集成专业可视化图表",{"2":{"700":1}}],["需要在",{"2":{"172":1}}],["需要在秒级获得任务完成反馈",{"2":{"156":1}}],["需要按行读取并组装完整事件",{"2":{"168":1}}],["需要维护一个缓冲区",{"2":{"168":1}}],["需要维持",{"2":{"137":1}}],["需要持续读取直到流结束",{"2":{"168":1}}],["需要更精细的状态管理",{"2":{"166":1}}],["需要缓存不完整的行",{"2":{"166":1}}],["需要简洁的客户端实现",{"2":{"156":1}}],["需要特别注意并配置中间网关",{"2":{"153":1}}],["需要",{"2":{"57":3,"66":1,"203":1,"287":1,"366":1,"523":1,"751":1,"756":1,"800":1,"807":1}}],["需要后端",{"2":{"16":1}}],["需要严格的类型约束与变更追踪",{"2":{"10":1}}],["需服务器运维",{"2":{"15":1}}],["需防护",{"2":{"15":1}}],["需运行应用服务",{"2":{"15":1}}],["引导技能",{"0":{"887":1}}],["引导系统",{"0":{"886":1},"2":{"886":1}}],["引导缓存",{"2":{"881":1}}],["引导缓存机制测试",{"2":{"881":1}}],["引导脚本",{"2":{"881":1}}],["引导注入层",{"2":{"879":1,"880":1}}],["引导机制",{"2":{"877":1}}],["引导",{"2":{"628":1}}],["引导其生成管理子任务的指令",{"2":{"425":1}}],["引导修正",{"2":{"9":1}}],["引擎来处理",{"2":{"930":1}}],["引擎按流程",{"2":{"655":1}}],["引擎类型定义",{"2":{"647":1}}],["引擎",{"2":{"636":1,"656":1,"673":1,"928":1,"930":1}}],["引擎vue3",{"2":{"344":1}}],["引擎的",{"2":{"338":1}}],["引擎会先扫描所有的",{"2":{"314":1}}],["引用一下笔者早年看过的小说作为结束",{"2":{"958":1}}],["引用模型而非直接引入",{"2":{"860":1}}],["引用同目录下的详细文档",{"2":{"586":1}}],["引用核查",{"2":{"518":1}}],["引用可溯源性",{"2":{"517":1}}],["引用名人名言并互动",{"2":{"504":1}}],["引用",{"2":{"205":1,"214":1,"215":1,"333":2}}],["引用其他",{"2":{"203":1}}],["引用配置",{"2":{"203":1}}],["引入平时处理项目的经验来管理",{"2":{"963":1}}],["引入工程语义",{"2":{"532":1}}],["引入了",{"2":{"427":1}}],["引入多阶梯奖励系统",{"2":{"398":1}}],["引入更多心理经济学",{"2":{"397":1}}],["引入",{"2":{"342":1,"494":1,"506":1,"550":1,"930":1,"933":1}}],["引入的官方模块化规范",{"2":{"298":1}}],["引入的新特性",{"2":{"288":1}}],["引入扩展工具",{"0":{"218":1},"1":{"219":1,"220":1,"221":1,"222":1,"223":1,"224":1,"225":1}}],["引入100个功能",{"2":{"194":1}}],["引入依赖前先问自己三个问题",{"2":{"194":1}}],["引入第三方库",{"2":{"192":1}}],["引言",{"0":{"1":1,"33":1,"95":1,"114":1,"145":1,"158":1,"272":1,"294":1,"317":1,"348":1,"357":1,"363":1,"421":1,"434":1,"441":1,"457":1,"467":1,"477":1,"525":1,"553":1,"569":1,"920":1},"1":{"159":1,"160":1,"161":1}}],["也尝试应用于工作",{"2":{"963":1}}],["也想通了一些事情",{"2":{"959":1}}],["也想在文章的最后说下",{"2":{"958":1}}],["也想做一次复盘总结",{"2":{"935":1}}],["也因为这样的折腾让我们顺利走向了工作岗位",{"2":{"957":1}}],["也实现了向内思变",{"2":{"956":1}}],["也容易被别人误解",{"2":{"952":1}}],["也很难直接转变为海绵式阅读",{"2":{"946":1}}],["也要避免接触一些没有用还容易内耗的人和事",{"2":{"941":1}}],["也为后面的防治宜早",{"2":{"940":1}}],["也延续了很多大学阶段养成的对健康不利的习惯",{"2":{"938":1}}],["也都有属于自己独一份的经历",{"2":{"935":1}}],["也基本梳理完成了",{"2":{"919":1}}],["也随之确定",{"2":{"910":1}}],["也在逐步思考怎么才能将自己获得的",{"2":{"909":1}}],["也就需要考虑如何真真正正的进行尝试实践了",{"2":{"959":1}}],["也就有了这篇减肥这件小事阶段随笔汇总",{"2":{"959":1}}],["也就有了一次次地尝试改变自己来适应居家办公",{"2":{"956":1}}],["也就开始琢磨系统运行原理",{"2":{"908":1}}],["也就是说",{"2":{"907":1}}],["也就是",{"2":{"375":1}}],["也包括个人智慧与经验等因素",{"2":{"906":1}}],["也更从理论上明白了",{"2":{"941":1}}],["也更愿意将自己定义为一个",{"2":{"902":1}}],["也更便于浏览器集成",{"2":{"120":1}}],["也多次参加了国内",{"2":{"901":1}}],["也时常能得到他人的赞许",{"2":{"612":1}}],["也可看下笔者毕业前留下的两篇相关文章",{"2":{"948":1}}],["也可根据不同的场景",{"2":{"946":1}}],["也可配置",{"2":{"567":1}}],["也可以配合",{"2":{"923":1}}],["也可以帮助我们发现新的角度",{"2":{"903":1}}],["也可以与能力较强的",{"2":{"610":1}}],["也可以是比喻性的",{"2":{"506":1}}],["也可以是一个",{"2":{"483":1}}],["也可以是对生成结构的重新组织",{"2":{"426":1}}],["也可以被封装成工具",{"2":{"411":1}}],["也可以整体导入到一个命名空间对象中",{"2":{"310":1}}],["也可以处理",{"2":{"255":1}}],["也最能释放巨大商业价值的一层",{"2":{"540":1}}],["也最温暖的防御线",{"2":{"539":1}}],["也有三点比较核心的体会",{"2":{"509":1}}],["也会引发家长的担忧",{"2":{"492":1}}],["也会陷入",{"2":{"467":1}}],["也传入一些",{"2":{"489":1}}],["也标志着",{"2":{"477":1}}],["也只是一盘毫无生机的散沙",{"2":{"385":1}}],["也不知哪天突发奇想",{"2":{"909":1}}],["也不知道昨天的天气",{"2":{"408":1}}],["也不会有大的损失和挫败",{"2":{"907":1}}],["也不会为了一个未知的答案彻夜难眠",{"2":{"362":1}}],["也不是修改",{"2":{"451":1}}],["也不需要在没有想清楚商业模式的时候就去烧钱买流量",{"2":{"379":1}}],["也伴随着无限的发散",{"2":{"367":1}}],["也成了其在",{"2":{"354":1}}],["也清楚拿掉一块拼图后会产生的波纹",{"2":{"332":1}}],["也让复杂的依赖治理变得有迹可循",{"2":{"316":1}}],["也没有精准的",{"2":{"316":1}}],["也没有试图做",{"2":{"66":1}}],["也解释了为什么",{"2":{"243":1}}],["也是笔者在第三阶段的时间统计与调整准则",{"2":{"954":1}}],["也是我践行上述理念的实验场之一",{"2":{"903":1}}],["也是实现",{"2":{"544":1}}],["也是最值得放大的起点",{"2":{"462":1}}],["也是最值钱的部分",{"2":{"460":2}}],["也是有限理性",{"2":{"393":1}}],["也是洞察力的一部分",{"2":{"388":1}}],["也是你作为魔术师学徒拆解戏法的最佳时机",{"2":{"371":1}}],["也是前端开发的核心语言",{"2":{"338":1}}],["也是所有前端开发的起点",{"2":{"338":1}}],["也是",{"2":{"230":1,"338":1}}],["也是联合成员",{"2":{"229":1}}],["也是验证代码正确性的唯一标准",{"2":{"9":1}}],["也消耗了客户端的设备电量与性能",{"2":{"147":1}}],["也无需客户端持续轮询",{"2":{"131":1}}],["也给后端架构带来了沉重的复杂性",{"2":{"129":1}}],["也支持通过",{"2":{"94":1}}],["也支持",{"2":{"71":1}}],["也能借助开放平台或多或少收到一些反馈与建议",{"2":{"935":1}}],["也能被牢牢限制在安全的边界之内",{"2":{"538":1}}],["也能加深开发者对架构的理解",{"2":{"3":1}}],["也能提前规避命名不当的问题",{"2":{"2":1}}],["测试实现细节而非行为",{"2":{"890":1}}],["测试策略与方法指南",{"2":{"881":1}}],["测试策略示例",{"2":{"881":1}}],["测试执行器",{"2":{"881":1}}],["测试提示词集合",{"2":{"881":1}}],["测试通用辅助函数库",{"2":{"881":1}}],["测试依赖配置",{"2":{"881":1}}],["测试反模式参考手册",{"2":{"881":1}}],["测试套件",{"2":{"879":1}}],["测试套件是质量的三道防线",{"2":{"9":1}}],["测试夹具",{"2":{"792":1}}],["测试框架配置",{"2":{"823":1}}],["测试框架",{"2":{"787":1,"821":1,"845":1}}],["测试入口",{"2":{"762":1}}],["测试工作流",{"2":{"762":1}}],["测试工具",{"2":{"274":1}}],["测试构建工具",{"2":{"706":1}}],["测试辅助库",{"2":{"706":1}}],["测试数据",{"2":{"706":1}}],["测试服务器",{"2":{"706":1}}],["测试用的",{"2":{"762":1}}],["测试用",{"2":{"677":1}}],["测试用例等",{"2":{"453":1}}],["测试用例生成",{"2":{"438":1,"706":1}}],["测试用例是规范的具象化表达",{"2":{"9":1}}],["测试用例",{"2":{"9":1,"881":1}}],["测试资源",{"2":{"677":1}}],["测试与报告",{"2":{"583":1}}],["测试与文档的范式转移",{"2":{"527":1}}],["测试相关规范",{"2":{"575":1}}],["测试需要先启动",{"2":{"573":1}}],["测试寻找更优解",{"2":{"394":1}}],["测试方案设计",{"2":{"366":1}}],["测试和模型切换",{"2":{"860":1}}],["测试和分析",{"2":{"345":1}}],["测试和部署",{"2":{"285":1}}],["测试",{"0":{"505":1,"507":1,"508":1,"667":1},"2":{"284":1,"343":1,"418":1,"572":1,"677":2,"695":1,"823":1,"874":1,"881":1}}],["测试配置和工具",{"2":{"274":1}}],["测试层",{"2":{"274":1}}],["测试覆盖",{"2":{"226":1}}],["测试覆盖率配置",{"2":{"823":1}}],["测试覆盖率",{"2":{"225":1}}],["测试覆盖率报告",{"2":{"203":1}}],["测试目录",{"2":{"203":1,"706":1,"792":1}}],["测试文件目录",{"2":{"677":1}}],["测试文件",{"2":{"203":4}}],["测试组件",{"2":{"203":1}}],["测试代码",{"2":{"203":1}}],["测试驱动开发",{"2":{"542":1}}],["测试驱动",{"2":{"9":1}}],["完美合并类名并解决冲突",{"2":{"927":1}}],["完美的运行时动态能力",{"2":{"928":1}}],["完美的",{"2":{"927":1,"928":1}}],["完美的组件隔离",{"2":{"922":1}}],["完美的架构",{"2":{"363":1}}],["完美工程",{"2":{"530":1}}],["完美支持",{"2":{"322":1}}],["完善的",{"2":{"701":1}}],["完善的测试用例是类型检查之外的最后一道防线",{"2":{"226":1}}],["完善过的观点",{"2":{"375":1}}],["完善领域事件体系",{"2":{"282":1}}],["完成前验证",{"2":{"880":1,"881":1}}],["完成前显示骨架屏",{"2":{"86":1}}],["完成自动聚合",{"2":{"632":1}}],["完成后",{"2":{"712":1}}],["完成后有提示音",{"2":{"561":1}}],["完成后再通知组件渲染",{"2":{"104":1}}],["完成具体的模块实现",{"2":{"558":1}}],["完成一支团队的工作",{"2":{"553":1}}],["完成技术架构的调研",{"2":{"542":1}}],["完成日常辅助",{"2":{"459":1}}],["完成意图理解后",{"2":{"443":1}}],["完成规模化的个性化生产",{"2":{"403":1}}],["完成付款后",{"2":{"132":1}}],["完成从",{"2":{"70":1,"406":1}}],["完成",{"2":{"65":1,"148":1,"172":1,"445":1,"471":1,"472":1}}],["完成闭环",{"2":{"7":1}}],["完全掌控连接断开时的重试逻辑",{"2":{"815":1}}],["完全被动接收信息",{"2":{"622":1}}],["完全禁止执行的命令或访问的文件",{"2":{"594":1}}],["完全开源",{"2":{"568":1}}],["完全开源的",{"2":{"567":1}}],["完全开源可本地部署",{"2":{"522":1}}],["完全兼容",{"2":{"523":1,"815":1}}],["完全免费",{"2":{"515":1}}],["完全达标",{"2":{"464":1}}],["完全不需要像",{"2":{"924":1}}],["完全不需要手写接口文档或",{"2":{"342":1}}],["完全不插手",{"2":{"69":1}}],["完全独立作用域",{"2":{"320":1}}],["完全失去类型检查",{"2":{"253":1}}],["完全符合集合代数的直觉",{"2":{"244":1}}],["完全消除字体请求的网络往返",{"2":{"84":1}}],["完全可以采用不同的渲染策略",{"2":{"67":1}}],["完全支持",{"2":{"57":1,"160":1,"167":1}}],["完全一致",{"2":{"47":1}}],["完全取决于",{"2":{"37":1}}],["完全交由",{"2":{"11":1}}],["完全由开发者声明式地定义",{"2":{"11":1}}],["完整开发工作流",{"0":{"892":1}}],["完整目录结构",{"0":{"849":1}}],["完整目录树",{"0":{"792":1}}],["完整路径",{"2":{"795":1,"796":1}}],["完整生命周期",{"0":{"773":1}}],["完整实现了",{"2":{"769":1}}],["完整包",{"2":{"734":1}}],["完整光照",{"2":{"734":1}}],["完整入口",{"2":{"734":2,"736":2}}],["完整构建",{"2":{"697":1}}],["完整版",{"2":{"679":1}}],["完整版入口",{"2":{"677":1,"679":1}}],["完整模块组装器",{"2":{"677":1}}],["完整报告",{"2":{"632":1}}],["完整地读",{"0":{"608":1}}],["完整还原它的推理链条",{"2":{"537":1}}],["完整代码已开源至",{"2":{"467":1}}],["完整示例",{"0":{"175":1}}],["完整响应",{"2":{"114":1}}],["完整",{"2":{"57":3,"562":1,"647":1}}],["完整的技能定义",{"2":{"895":1}}],["完整的类型定义",{"2":{"815":1}}],["完整的",{"2":{"702":1,"757":1,"844":1}}],["完整的事件监听",{"2":{"682":1}}],["完整的渲染器配置",{"2":{"661":1}}],["完整的低代码编辑器",{"2":{"641":1}}],["完整的测试",{"2":{"9":1}}],["完整的模块有清晰的边界",{"2":{"9":1}}],["完整交付链路",{"2":{"71":1}}],["完整交付",{"2":{"9":1}}],["模糊",{"2":{"677":1,"757":1,"889":1}}],["模糊的指令只会带来模糊的结果",{"2":{"532":1}}],["模糊的需求描述只会让",{"2":{"9":1}}],["模板中充斥着",{"2":{"933":1}}],["模板极其干净",{"2":{"928":1}}],["模板代码极其清爽",{"2":{"927":1}}],["模板测试",{"2":{"748":1}}],["模板方法模式",{"2":{"739":1,"761":1}}],["模板方法",{"2":{"680":1,"851":1}}],["模板片段",{"2":{"677":1}}],["模板变量",{"2":{"655":1}}],["模板示例",{"2":{"573":1}}],["模板生态丰富",{"2":{"515":1}}],["模板",{"2":{"442":1,"677":1,"881":1}}],["模板组件",{"2":{"274":1}}],["模板引擎",{"2":{"18":1,"646":1,"647":1}}],["模块导入",{"2":{"923":1}}],["模块导出",{"2":{"792":1}}],["模块导出入口",{"2":{"792":1}}],["模块功能说明文档",{"2":{"881":3}}],["模块入口",{"2":{"824":1}}],["模块入口文件",{"2":{"823":1}}],["模块格式",{"2":{"730":1}}],["模块进行坐标转换和命中检测",{"2":{"684":1}}],["模块五",{"0":{"656":1,"686":1,"715":1,"743":1,"771":1,"890":1}}],["模块四",{"0":{"655":1,"685":1,"714":1,"742":1,"770":1,"889":1}}],["模块三",{"0":{"654":1,"684":1,"713":1,"741":1,"769":1,"888":1}}],["模块二",{"0":{"653":1,"683":1,"712":1,"740":1,"768":1,"887":1}}],["模块一",{"0":{"652":1,"682":1,"711":1,"739":1,"767":1,"886":1}}],["模块依赖与调用关系",{"0":{"648":1,"678":1,"707":1,"735":1,"763":1,"793":1,"852":1,"882":1},"1":{"649":1,"650":1,"679":1,"680":1,"708":1,"709":1,"736":1,"737":1,"764":1,"765":1,"794":1,"795":1,"796":1,"797":1,"853":1,"854":1,"883":1,"884":1}}],["模块2",{"2":{"573":1}}],["模块1",{"2":{"573":1}}],["模块是",{"2":{"412":1}}],["模块版本管理",{"0":{"331":1}}],["模块名称",{"2":{"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"739":1,"740":1,"741":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"886":1,"887":1,"888":1,"889":1,"890":1}}],["模块名",{"2":{"330":1,"799":1,"800":1}}],["模块文件名",{"2":{"330":1}}],["模块文件存放在磁盘上",{"2":{"304":1}}],["模块不是拆得越细越好",{"2":{"329":1}}],["模块不应成为功能的",{"2":{"327":1}}],["模块粒度设计",{"0":{"329":1}}],["模块只关心",{"2":{"328":1}}],["模块之间的依赖关系尽可能简单",{"2":{"328":1}}],["模块内部的元素之间联系紧密",{"2":{"328":1}}],["模块扩展",{"0":{"325":1}}],["模块赋予类型能力",{"2":{"321":1}}],["模块实现它时",{"2":{"319":1}}],["模块代码只会在首次加载时执行一次",{"2":{"314":1}}],["模块执行逻辑",{"0":{"314":1}}],["模块加载机制",{"0":{"334":1}}],["模块加载失败",{"2":{"313":1}}],["模块加载完成后执行",{"2":{"305":1}}],["模块加载器",{"2":{"203":1}}],["模块在首次加载后会被缓存",{"2":{"304":1}}],["模块在代码执行到",{"2":{"304":1}}],["模块间边界清晰",{"2":{"297":1}}],["模块拥有独立的作用域",{"2":{"297":1}}],["模块与模块化的基础概念",{"0":{"296":1},"1":{"297":1,"298":1,"299":1,"300":1,"301":1,"302":1}}],["模块联邦是",{"2":{"288":1}}],["模块联邦",{"0":{"288":1},"2":{"287":1}}],["模块定义一个接口",{"2":{"319":1}}],["模块定义",{"2":{"275":1}}],["模块化的技术",{"2":{"923":1}}],["模块化的标准",{"2":{"298":1}}],["模块化",{"2":{"570":1,"928":1}}],["模块化规则文件",{"2":{"570":1}}],["模块化规则",{"0":{"575":1},"1":{"576":1,"577":1,"578":1},"2":{"570":1}}],["模块化规范的演进本质上是",{"2":{"309":1}}],["模块化规范全景图",{"2":{"272":1,"298":1}}],["模块化资源包",{"2":{"547":1}}],["模块化和分层架构等强主张特性",{"2":{"344":2}}],["模块化不应是开发的负担",{"2":{"337":1}}],["模块化不再只是文件的拆分",{"2":{"319":1}}],["模块化架构",{"0":{"336":1}}],["模块化导出装饰器",{"2":{"324":1}}],["模块化新特性",{"0":{"323":1},"1":{"324":1,"325":1}}],["模块化声明文件",{"2":{"321":1}}],["模块化实现",{"2":{"319":1}}],["模块化解决了代码组织问题后",{"2":{"317":1}}],["模块化从来不仅仅是",{"2":{"303":1}}],["模块化通过",{"2":{"297":1}}],["模块化是一种将软件分解为独立",{"2":{"296":1}}],["模块化设计将继续演进",{"2":{"293":1}}],["模块化设计是构建大型",{"2":{"293":1}}],["模块化设计需要遵循以下原则",{"2":{"286":1}}],["模块化与代码维护以及未来发展趋势",{"2":{"272":1}}],["模块化编程的终点",{"2":{"332":1}}],["模块化编程初体验",{"0":{"295":1}}],["模块化编程应运而生",{"2":{"294":1}}],["模块化编程梳理与总结",{"2":{"272":1}}],["模块化编程原则梳理与总结",{"2":{"272":1}}],["模块化编程原则与最佳实践",{"2":{"272":1}}],["模块化编程编程初体验与基础介绍",{"2":{"272":1}}],["模块化编程是现代",{"2":{"272":1}}],["模块的功能应当能用一句话清晰描述",{"2":{"329":1}}],["模块的粒度应该适中",{"2":{"329":1}}],["模块的调用",{"2":{"203":1}}],["模块的根据点",{"2":{"203":1}}],["模块解析",{"2":{"204":3}}],["模块解析策略",{"2":{"203":1}}],["模块解析选项",{"2":{"203":1}}],["模块系统",{"2":{"203":1,"215":1}}],["模块",{"2":{"182":1,"203":1,"221":1,"275":1,"320":1,"322":1,"412":1,"506":1,"568":1,"734":1,"824":1}}],["模拟数据库保存操作",{"2":{"269":1}}],["模拟函数",{"2":{"225":2}}],["模拟任务进度推送",{"2":{"178":1}}],["模拟检查数据库状态",{"2":{"152":1}}],["模拟",{"2":{"124":1,"152":1,"260":1,"765":1,"771":2,"925":1}}],["模型思维固然能帮助我们很好地实践",{"2":{"910":1}}],["模型专用测试",{"2":{"881":1}}],["模型注册中心",{"0":{"860":1}}],["模型解析",{"2":{"853":2,"856":1}}],["模型实例查找",{"2":{"851":1}}],["模型打包",{"2":{"734":1}}],["模型资源",{"2":{"734":1}}],["模型变换矩阵",{"2":{"734":1}}],["模型工具",{"2":{"706":1}}],["模型精炼与对齐",{"2":{"551":1}}],["模型选型",{"0":{"549":1}}],["模型最全",{"2":{"523":1}}],["模型统一入口",{"2":{"523":1}}],["模型市场",{"2":{"523":2}}],["模型驱动",{"2":{"515":1}}],["模型在特定细分领域往往处于",{"2":{"441":1}}],["模型在极短时间内",{"2":{"136":1}}],["模型上下文协议",{"0":{"439":1},"2":{"439":1}}],["模型容易因为每一步都要思考而逐渐忘记",{"2":{"430":1}}],["模型会回顾生成的内容",{"2":{"426":1}}],["模型切换为",{"2":{"426":1}}],["模型产出初步的解决方案",{"2":{"426":1}}],["模型走一步看一步",{"2":{"414":1}}],["模型生成结构化指令",{"2":{"411":1}}],["模型本身是通用的引擎",{"2":{"367":1}}],["模型已经具备",{"2":{"367":1}}],["模型理解力",{"2":{"352":1}}],["模型层",{"2":{"275":1,"704":1,"705":1}}],["模型",{"2":{"93":1,"340":1,"353":1,"521":2,"522":1,"523":1,"842":1}}],["模态框等",{"2":{"10":1}}],["模式可自动生成多章节专题报告",{"2":{"518":1}}],["模式二",{"0":{"484":1}}],["模式一",{"0":{"483":1}}],["模式则通过任务分解",{"2":{"468":1}}],["模式并非排斥",{"2":{"431":1}}],["模式后",{"2":{"428":1}}],["模式将错误提升为一等公民",{"2":{"246":1}}],["模式让错误处理进入类型系统",{"2":{"227":1,"250":1}}],["模式进行类型检查",{"2":{"203":1}}],["模式下的路由更新",{"2":{"662":1}}],["模式下",{"2":{"11":1,"104":1,"415":1,"430":1}}],["模式批量生成",{"2":{"10":1}}],["模式适用于多数应用的功能迭代开发阶段",{"2":{"10":1}}],["模式的",{"2":{"246":1}}],["模式的应用层协议",{"2":{"115":1}}],["模式的适用场景",{"0":{"10":1}}],["模式的实践要点可归纳为",{"2":{"9":1}}],["模式的核心流程与实践要点",{"0":{"9":1}}],["模式",{"0":{"25":1,"246":1,"452":1,"453":1,"454":1,"455":1},"1":{"453":1,"454":1,"455":1},"2":{"9":1,"48":1,"129":1,"166":1,"203":2,"452":1,"477":1,"512":1,"661":1,"682":1,"700":1,"702":1,"711":1,"719":1,"761":1,"823":1,"842":1,"851":1,"934":1}}],["模式遵循一个五步闭环",{"2":{"9":1}}],["永远不要使用",{"2":{"571":1}}],["永远不要让",{"2":{"9":1}}],["永远不要在组件内部硬编码子组件",{"2":{"2":1}}],["由戴明提出",{"2":{"943":1}}],["由子agent独立完成",{"2":{"884":1}}],["由子类重写",{"2":{"748":1}}],["由其遍历所有注册的动画实例执行操作",{"2":{"767":1}}],["由主",{"2":{"592":1}}],["由系统自动管理",{"2":{"570":1}}],["由国内前端领域知名开发者创业打造",{"2":{"515":1}}],["由景入情",{"2":{"508":1}}],["由谁生成",{"2":{"471":1}}],["由两部分组成",{"2":{"442":1}}],["由客户端在本地执行",{"2":{"411":1}}],["由京东",{"2":{"346":1}}],["由工具链自动处理老旧环境的兼容",{"2":{"308":1}}],["由构建工具处理",{"2":{"203":1}}],["由协议层处理",{"2":{"175":1}}],["由发送方建立并维持连接",{"2":{"134":1}}],["由接收方预先暴露回调",{"2":{"143":1}}],["由接收方预先暴露",{"2":{"134":1}}],["由于周末没有做比较大的限制",{"2":{"961":1}}],["由于笔者仍然保持着大学时代学会的",{"2":{"940":1}}],["由于地域限制和传播介质的稀缺",{"2":{"616":1}}],["由于书籍要求书面化",{"2":{"614":1}}],["由于本项目基于",{"2":{"480":1}}],["由于它接收的是经过",{"2":{"475":1}}],["由于计划已固定",{"2":{"423":1}}],["由于网络环境的延迟",{"2":{"305":1}}],["由于",{"2":{"304":1,"333":1,"425":1,"626":1,"934":1}}],["由于数据可能被分割到多个",{"2":{"166":1}}],["由于重试机制的存在",{"2":{"133":1}}],["由于连接具有状态属性",{"2":{"129":1}}],["由于多路复用特性的存在",{"2":{"124":1}}],["由于全自动化产出速度极快",{"2":{"3":1}}],["由",{"2":{"9":1,"46":1,"203":1,"304":1,"305":1,"344":1,"518":1,"591":1,"904":1}}],["每月体重下降至少",{"2":{"963":1,"964":1}}],["每月减",{"2":{"942":1}}],["每月调用量级",{"2":{"519":1}}],["每任务一个子agent",{"2":{"881":1}}],["每行格式应为",{"2":{"840":1}}],["每行以",{"2":{"177":1}}],["每种属性通过",{"2":{"770":1}}],["每种渲染类型",{"2":{"765":1}}],["每种图层类型在各渲染器下的具体实现",{"2":{"761":1}}],["每种图表类型布局在特定的坐标系上",{"2":{"714":1}}],["每帧调用",{"2":{"743":1}}],["每当获得有价值的信息",{"2":{"626":1}}],["每盒",{"2":{"494":1}}],["每完成一个子任务",{"2":{"429":1}}],["每天锻炼一小时",{"2":{"942":1}}],["每天耗费大量时间在多源信息的收集",{"2":{"465":1}}],["每天记录",{"2":{"370":1}}],["每天服务数百万次请求",{"2":{"60":1}}],["每日签到",{"2":{"366":1}}],["每周阅读1",{"2":{"964":1}}],["每周两到三次使用小区或公司健身房器材进行",{"2":{"964":1}}],["每周两次使用小区或公司健身房器材进行",{"2":{"963":1}}],["每周早上至少有三次居家",{"2":{"962":1}}],["每周或每个迭代",{"2":{"531":1}}],["每周五发布",{"2":{"346":1}}],["每周分享最新的",{"2":{"346":2}}],["每一本知识性书籍",{"2":{"609":1}}],["每一次抽象层的上移",{"2":{"525":1}}],["每一片云都写成跳动的诗行吧",{"2":{"508":1}}],["每一个阶段并不需要",{"2":{"464":1}}],["每一个表象背后都有一个黑盒子",{"2":{"908":1}}],["每一个表象背后",{"2":{"382":1}}],["每一个模块都深藏功与名",{"2":{"337":1}}],["每一句话都必须带有准确的脚注来源",{"2":{"349":1}}],["每一项都需要开发者自行拼装",{"2":{"71":1}}],["每层职责明确",{"2":{"279":1}}],["每层负责特定的功能",{"2":{"273":1}}],["每条答案均附带来源链接",{"2":{"518":1}}],["每条",{"2":{"168":1}}],["每条消息由",{"2":{"121":1}}],["每秒发送一条消息",{"2":{"164":1}}],["每隔数秒轮询一次",{"2":{"138":1}}],["每位用户每",{"2":{"137":1}}],["每",{"2":{"86":1,"801":1,"964":1}}],["每少一个功能",{"2":{"66":1}}],["每分钟更新数百篇文章",{"2":{"31":1}}],["每次想去健身房看看时",{"2":{"962":1}}],["每次想修改组件库内部样式",{"2":{"924":1}}],["每次只问一个问题",{"2":{"888":1}}],["每次收到用户请求都会先检查是否有适用技能",{"2":{"883":1}}],["每次实现时触发",{"2":{"880":1}}],["每次部署都要确认环境",{"2":{"583":1}}],["每次代码审查都要重复说",{"2":{"583":1}}],["每次请求",{"2":{"75":1}}],["每次请求都必须携带完整的",{"2":{"115":1}}],["每次请求都不同",{"2":{"75":1}}],["每次请求都需渲染",{"2":{"57":1}}],["每次请求都重新生成",{"2":{"57":1}}],["每次请求时实时渲染",{"2":{"57":1}}],["每次访问都重新生成",{"2":{"57":1}}],["每次开发完成后必须运行完整验证",{"2":{"9":1}}],["每次开发应聚焦于一个完整",{"2":{"9":1}}],["每次让",{"2":{"9":1}}],["每个人多少都有自己的答案",{"2":{"959":1}}],["每个人遇到的问题和设定的目标不同",{"2":{"950":1}}],["每个人都体验到了不同于之前的",{"2":{"935":1}}],["每个人都能获得相同的规则",{"2":{"570":1}}],["每个人都有自己的原生优势象限",{"2":{"458":1}}],["每个人都将拥有一支属于自己的数字团队",{"2":{"420":1}}],["每个角色背后也都有一堆琐碎的事不断涌进来",{"2":{"950":1}}],["每个任务的循环",{"2":{"889":1}}],["每个任务一个子agent",{"2":{"889":1}}],["每个任务分派给一个子agent",{"2":{"884":1}}],["每个任务分派给独立上下文的子agent",{"2":{"876":1}}],["每个包实现接口规范层定义的抽象接口",{"2":{"847":1}}],["每个渲染器有自己的",{"2":{"768":1}}],["每个节点维护局部变换矩阵",{"2":{"740":1}}],["每个节点独立维护自身属性状态",{"2":{"675":1}}],["每个图表",{"2":{"720":1}}],["每个坐标系包含轴",{"2":{"714":1}}],["每个扩展函数接收此对象并调用需要的注册方法",{"2":{"711":1}}],["每个阶段遍历所有已注册的",{"2":{"708":1}}],["每个阶段都需要不同的专业能力",{"2":{"468":1}}],["每个含",{"2":{"706":2}}],["每个组件可调用",{"2":{"654":1}}],["每个组件是否只做一件事",{"2":{"1":1}}],["每个页面组件对应一个",{"2":{"653":1}}],["每个文件夹代表知识生命周期的一个阶段",{"2":{"630":1}}],["每个问题说明",{"2":{"591":1}}],["每个技能独占一个子目录",{"2":{"586":1}}],["每个步骤做什么",{"2":{"583":1}}],["每个模型有独立",{"2":{"523":1}}],["每个模块负责特定的功能",{"2":{"296":1}}],["每个智能体都有自己的任务和职责",{"2":{"475":1}}],["每个研究笔记必须包含",{"2":{"472":1}}],["每个研究员专注一个子主题",{"2":{"470":1}}],["每个项目都在同时训练你的判断力",{"2":{"463":1}}],["每个专注于一个子主题",{"2":{"416":1}}],["每个团队负责一个或多个子应用",{"2":{"291":1}}],["每个子agent获得精确裁剪的上下文",{"2":{"889":1}}],["每个子智能体拥有独立的记忆空间",{"2":{"415":1}}],["每个子应用都是独立的模块",{"2":{"292":1}}],["每个子应用都是一个独立的模块",{"2":{"286":1}}],["每个子应用专注于特定的业务领域",{"2":{"292":1}}],["每个子应用的样式应该隔离",{"2":{"286":1}}],["每个子应用可以独立开发",{"2":{"284":1,"285":1}}],["每个子项目都有独立的",{"2":{"205":1}}],["每个子项目可以拥有独立的配置文件",{"2":{"202":1}}],["每个成员都有",{"2":{"230":1}}],["每个成员拥有一个共同的",{"2":{"230":1}}],["每个",{"2":{"62":1,"65":1,"248":1,"437":1,"464":1,"579":1,"591":1,"672":1,"680":1,"683":1,"709":1,"712":1,"741":1,"765":1,"857":1,"868":1,"895":1}}],["每个单元对外仅暴露",{"2":{"2":1}}],["再不控制下体重",{"2":{"959":1}}],["再让大模型输出一段",{"2":{"934":1}}],["再批判",{"2":{"609":1}}],["再展开论述",{"2":{"609":1}}],["再辅以勤恳的思考训练",{"2":{"608":1}}],["再切换到",{"2":{"559":1}}],["再验证",{"2":{"535":1}}],["再综合归纳成",{"2":{"517":1}}],["再变成可运行产品",{"2":{"461":1}}],["再慢慢向",{"2":{"459":1}}],["再按需加载完整说明",{"2":{"436":1}}],["再由另一只",{"2":{"414":1}}],["再",{"2":{"412":1}}],["再多的变量堆砌在一起",{"2":{"385":1}}],["再去社区或同行间交流",{"2":{"375":1}}],["再启动",{"2":{"343":1}}],["再在后台请求最新数据",{"2":{"342":1}}],["再通过标准接口灵活组合",{"2":{"294":1}}],["再从类型系统的高度审视二者的深层关系",{"2":{"227":1}}],["再检查",{"2":{"199":2}}],["再逐步复杂",{"2":{"198":1}}],["再根据明确需求添加",{"2":{"188":1}}],["再到基于",{"2":{"901":1}}],["再到对循环依赖的警惕",{"2":{"332":1}}],["再到如今的电子书",{"2":{"613":1}}],["再到如今能够独立思考",{"2":{"569":1}}],["再到如今",{"2":{"303":1}}],["再到",{"2":{"180":1,"597":1}}],["再结合本文深入实践",{"2":{"145":1}}],["再交由",{"2":{"10":1}}],["再写实现",{"2":{"9":1}}],["再实现逻辑",{"2":{"9":1}}],["再进入下一步的实质性编码",{"2":{"2":1}}],["遵循设计→计划→实现→测试→审查流程",{"2":{"876":1}}],["遵循原子设计",{"2":{"274":1}}],["遵循标准的",{"2":{"160":1}}],["遵循着严谨的单向驱动逻辑",{"2":{"115":1}}],["遵循",{"0":{"195":1},"1":{"196":1,"197":1},"2":{"9":1,"442":1}}],["边距",{"2":{"925":1}}],["边线几何体",{"2":{"734":1}}],["边管理",{"2":{"706":1}}],["边框工具类",{"2":{"647":1}}],["边问边改",{"2":{"559":1}}],["边写边补全",{"2":{"559":1}}],["边",{"2":{"505":1}}],["边走边看",{"2":{"428":1,"431":1}}],["边分解边规划",{"0":{"424":1},"2":{"427":1}}],["边分解边规划及基于语言模型的分解三类方法",{"2":{"409":1}}],["边缘计算路由",{"2":{"344":1}}],["边收边处理",{"2":{"176":1}}],["边发边传",{"2":{"159":1}}],["边读边播",{"2":{"118":1}}],["边传输",{"2":{"116":1}}],["边界定制",{"2":{"928":1}}],["边界保持",{"2":{"677":1}}],["边界约束",{"2":{"677":1}}],["边界条件",{"2":{"591":1}}],["边界条件等底层细节的敏感度下降",{"2":{"531":1}}],["边界条件等",{"2":{"9":1}}],["边界认知",{"2":{"541":1}}],["边界明确的",{"2":{"509":1}}],["边界界定",{"2":{"365":1}}],["边界",{"2":{"200":1}}],["边界时",{"2":{"86":1}}],["边界清晰",{"2":{"74":1}}],["边界划分过多导致架构碎片化",{"2":{"59":1}}],["边做边验",{"2":{"3":1}}],["包的核心契约",{"2":{"866":1}}],["包提供更高级的工作流编排",{"2":{"859":1}}],["包实现",{"2":{"857":1}}],["包实现公共代码和组件的共享",{"2":{"286":1}}],["包通过",{"2":{"853":1}}],["包路径解析",{"2":{"792":1}}],["包管理器依赖锁定",{"2":{"881":1}}],["包管理器配置",{"2":{"762":1}}],["包管理与构建",{"2":{"845":2}}],["包管理与模块化",{"0":{"335":1}}],["包定义",{"2":{"706":1,"734":1}}],["包定义导向",{"2":{"333":1}}],["包配置",{"2":{"677":1,"762":1,"881":1}}],["包设计",{"2":{"673":1}}],["包入口",{"2":{"647":5}}],["包目录",{"2":{"647":1,"849":1}}],["包装器",{"2":{"762":1}}],["包装了填充",{"2":{"683":1}}],["包装",{"2":{"652":1,"675":1}}],["包装物理属性",{"2":{"391":1}}],["包装为默认导出",{"2":{"333":1}}],["包围球加速裁剪",{"2":{"740":1}}],["包围球",{"2":{"734":1}}],["包围盒",{"2":{"734":3}}],["包围",{"2":{"382":1}}],["包",{"2":{"335":1,"845":1,"847":1,"851":1,"860":1,"877":1}}],["包引入额外的类型",{"2":{"203":1}}],["包时必须开启",{"2":{"203":1}}],["包体积增大",{"2":{"192":1}}],["包裹的动态部分则被挖空",{"2":{"87":1}}],["包裹的异步组件代码",{"2":{"86":1}}],["包裹耗时组件",{"2":{"86":1}}],["包裹了",{"2":{"79":1}}],["包裹浏览器",{"2":{"59":1}}],["包含测试反模式参考文档",{"2":{"890":1}}],["包含可视化伴侣",{"2":{"888":1}}],["包含着色器管理",{"2":{"732":1}}],["包含词法分析器",{"2":{"655":1}}],["包含类型",{"2":{"650":1}}],["包含类型定义",{"2":{"9":1}}],["包含审批和回滚",{"2":{"587":1}}],["包含所有",{"2":{"583":1}}],["包含所有可能的值",{"2":{"227":1}}],["包含个人偏好",{"2":{"570":1}}],["包含详细的执行规则",{"2":{"547":1}}],["包含真实触发短语",{"2":{"448":1}}],["包含主应用",{"2":{"288":1}}],["包含业务核心逻辑",{"2":{"279":1}}],["包含订单项",{"2":{"278":1}}],["包含组件与页面",{"2":{"274":1}}],["包含数百个工具类",{"2":{"193":1}}],["包含数据的完整",{"2":{"39":1}}],["包含了所有上层",{"2":{"663":1}}],["包含了",{"2":{"168":1,"203":1}}],["包含",{"2":{"65":1,"442":2,"472":1,"884":1,"890":1}}],["包含动态组件加载占位符",{"2":{"52":1}}],["包括哲思人生",{"2":{"947":1}}],["包括统计与数学",{"2":{"947":1}}],["包括编程技术学习",{"2":{"947":1}}],["包括带有自定义",{"2":{"839":1}}],["包括场景遍历",{"2":{"739":1}}],["包括高级加载器",{"2":{"732":1}}],["包括脏标记",{"2":{"689":1}}],["包括拖拽系统",{"2":{"645":1}}],["包括题目和诗句",{"2":{"506":1}}],["包括内部行动与外部工具调用",{"2":{"412":1}}],["包括字体",{"2":{"338":1}}],["包括工具函数",{"2":{"274":1}}],["包括参数个数和返回值类型",{"2":{"203":1}}],["包括冗余代码",{"2":{"182":1}}],["包括",{"2":{"115":1,"186":1,"274":1,"567":1,"654":1}}],["包括电商网站",{"2":{"16":1}}],["包括模块边界",{"2":{"9":1}}],["阶段根因分析",{"2":{"880":1,"893":1}}],["阶段门",{"2":{"876":1}}],["阶段执行",{"2":{"715":1}}],["阶段的变得至关重要",{"2":{"551":1}}],["阶段二",{"0":{"506":1},"1":{"507":1,"508":1}}],["阶段一",{"0":{"504":1},"1":{"505":1,"507":1,"508":1}}],["阶段",{"2":{"9":1,"282":1,"298":1,"378":1,"414":1,"443":1,"468":1,"622":1,"708":1}}],["→",{"2":{"9":4,"11":1,"29":2,"33":3,"43":1,"57":5,"58":11,"59":4,"71":3,"74":1,"75":4,"134":2,"155":6,"171":4,"175":3,"199":3,"242":2,"377":4,"447":2,"461":1,"471":2,"472":2,"510":5,"515":8,"518":6,"523":5,"553":2,"559":2,"561":3,"562":7,"564":4,"565":3,"567":3,"568":10,"570":3,"583":3,"588":2,"591":2,"592":2,"631":9,"647":4,"649":1,"653":2,"655":2,"656":1,"672":3,"717":5,"733":2,"736":2,"737":1,"741":2,"764":1,"769":3,"796":12,"799":2,"800":8,"801":9,"824":2,"827":2,"847":4,"851":2,"853":5,"858":2,"859":3,"863":4,"864":4,"887":6,"888":2,"889":3,"890":8,"892":5,"893":2,"899":2,"900":6}}],["v5",{"2":{"874":1,"881":1}}],["vr",{"2":{"728":1,"734":1}}],["v6",{"2":{"706":1}}],["v0",{"2":{"559":1,"561":1,"562":2,"934":1}}],["v10",{"2":{"677":1}}],["v1",{"2":{"523":1}}],["v12+",{"2":{"307":1}}],["v3",{"2":{"522":1,"523":1}}],["vllm",{"2":{"519":1,"551":1}}],["vl",{"2":{"512":1,"522":2}}],["velocity",{"2":{"928":1}}],["vec3",{"2":{"741":1,"748":1}}],["vector4",{"2":{"734":1}}],["vector3",{"2":{"734":1,"740":2,"748":10,"749":1}}],["vector2",{"2":{"734":1}}],["vector2d",{"2":{"677":1,"692":9,"693":1}}],["vector",{"2":{"410":1,"734":1,"748":2}}],["verification",{"2":{"880":1,"881":1,"883":1,"895":1,"896":1}}],["verifyclient",{"2":{"801":1}}],["verify",{"2":{"792":2,"890":2}}],["vertexshadernode",{"2":{"742":1}}],["vertexshader",{"2":{"742":1}}],["vertex",{"2":{"521":1}}],["version",{"2":{"248":1,"258":1,"506":1,"722":1,"733":1,"741":1,"748":1,"751":1,"792":1,"795":1,"796":1,"807":1,"880":1,"881":2}}],["versioned",{"2":{"248":2}}],["version>",{"2":{"193":1,"857":1}}],["version>3",{"2":{"193":1}}],["vercel",{"0":{"29":1},"2":{"16":1,"19":1,"20":1,"22":1,"23":1,"29":8,"30":1,"32":1,"71":1,"87":1,"90":1,"94":1,"110":1,"342":1,"343":1,"344":1,"345":3,"561":3,"573":1,"842":1,"859":1}}],["v8",{"2":{"338":1}}],["vo",{"2":{"280":5,"281":1}}],["void>",{"2":{"179":1,"281":4,"663":2,"748":1,"806":15,"832":1,"839":2,"840":1}}],["void",{"2":{"7":1,"175":5,"184":1,"185":3,"229":4,"231":2,"249":1,"261":1,"262":1,"281":2,"288":1,"661":1,"662":9,"663":2,"692":13,"693":2,"719":12,"720":19,"748":32,"776":33,"777":21,"806":2,"832":3,"839":3,"840":7,"866":4}}],["v",{"2":{"262":2,"263":2,"646":1,"652":3,"653":6,"654":2,"655":3,"676":7,"682":4,"683":7,"684":5,"685":1,"705":7,"711":4,"713":2,"714":2,"715":9,"733":14,"739":8,"740":4,"741":4,"742":6,"743":4,"761":7,"767":3,"848":10,"856":4,"857":2,"858":3,"859":1,"880":9,"886":3,"887":4,"924":3,"928":3}}],["v>",{"2":{"262":2}}],["vanilla",{"2":{"922":1}}],["var",{"2":{"925":10,"929":1}}],["varying",{"2":{"741":1}}],["variance",{"2":{"927":2}}],["variantprops",{"2":{"927":2}}],["variant=",{"2":{"927":2,"934":1}}],["variants",{"0":{"927":1},"2":{"927":2,"934":2}}],["variant",{"2":{"249":8,"927":4}}],["variable",{"2":{"647":1}}],["variables",{"2":{"274":1,"646":1,"921":1,"928":1}}],["vader",{"2":{"677":1}}],["val",{"2":{"685":5,"714":1,"719":1,"777":1}}],["validators",{"2":{"677":1,"679":1}}],["validator",{"2":{"647":1,"656":1,"685":1}}],["validateargs",{"2":{"806":1}}],["validate",{"2":{"449":1,"663":1,"792":1,"866":1}}],["validationresult",{"2":{"866":1}}],["validation",{"2":{"274":1,"275":1,"280":2,"290":1}}],["valuerequired",{"2":{"806":1}}],["values",{"2":{"663":2,"719":1,"743":1}}],["value​​",{"2":{"365":1}}],["valuecomplexity",{"2":{"365":1}}],["value",{"2":{"28":1,"100":1,"166":4,"168":7,"173":5,"175":2,"229":4,"231":9,"232":2,"237":7,"280":4,"281":1,"315":2,"363":1,"365":2,"397":1,"553":1,"662":1,"719":3,"748":1,"757":1,"769":2,"776":2,"840":1,"866":1,"929":1,"933":1}}],["value=",{"2":{"28":1,"100":1}}],["vscode",{"2":{"203":2}}],["vs",{"0":{"109":1,"136":1,"240":1,"592":1},"1":{"110":1,"111":1,"112":1,"113":1},"2":{"171":1,"397":2,"437":1,"438":1,"439":1,"564":1,"565":2,"583":1,"699":1,"856":1,"880":2}}],["vincent",{"2":{"874":1}}],["videomodelv4",{"2":{"866":1}}],["videomodel",{"2":{"848":1,"866":1}}],["video",{"2":{"734":1,"792":1,"848":1}}],["videotexture",{"2":{"734":1}}],["viewboxsize",{"2":{"777":1}}],["viewboxonly",{"2":{"777":1}}],["viewport",{"2":{"734":1}}],["view",{"2":{"704":1,"705":1,"706":4}}],["viewer",{"2":{"647":2}}],["visibilitychange",{"2":{"830":1}}],["visible",{"2":{"676":1,"692":1,"740":1,"748":2,"927":2}}],["visualmetainfo>",{"2":{"719":1}}],["visualmapcommon",{"2":{"706":1}}],["visualmap",{"2":{"700":1,"701":1,"706":2,"708":1,"715":2}}],["visualtype",{"2":{"712":1}}],["visualfuncs",{"2":{"708":1}}],["visual",{"0":{"715":1},"2":{"704":1,"705":1,"706":2,"708":5,"712":1,"715":2,"881":1,"888":1}}],["virtual",{"2":{"647":1}}],["vip",{"2":{"397":1}}],["viability",{"2":{"363":1}}],["vitest",{"2":{"787":1,"845":1}}],["vite",{"2":{"62":1,"65":2,"66":2,"97":1,"112":1,"203":1,"204":1,"216":3,"217":1,"274":2,"307":1,"308":2,"322":1,"343":4,"344":2,"642":1,"647":6,"730":1,"904":1,"923":4}}],["vitepress",{"0":{"60":1,"61":1,"66":1},"1":{"61":1,"62":2,"63":2,"64":2,"65":1,"66":1},"2":{"42":1,"60":4,"61":1,"62":2,"64":1,"65":5,"66":8,"787":1,"904":5}}],["vibe",{"0":{"532":1,"560":1},"1":{"561":1,"562":1},"2":{"8":1,"371":1,"461":1,"530":1,"559":2,"569":1,"901":1}}],["v4",{"2":{"28":1,"850":2,"866":2}}],["vue3",{"2":{"928":1}}],["vuetify",{"2":{"340":1}}],["vuepress",{"2":{"60":1}}],["vue",{"2":{"18":3,"35":1,"38":1,"39":1,"59":2,"60":2,"62":2,"65":5,"66":1,"103":1,"256":1,"263":1,"285":1,"302":1,"313":1,"339":3,"340":2,"341":4,"342":2,"344":5,"345":1,"553":1,"558":1,"573":1,"642":1,"842":1,"845":1,"847":2,"848":1,"849":2,"904":1,"923":1,"924":5,"925":1,"926":1,"928":7,"930":1,"931":3,"933":2,"934":3}}],["基",{"2":{"845":1}}],["基类的",{"2":{"683":1}}],["基类",{"2":{"682":1,"706":2,"733":2,"736":1,"739":1,"741":1,"742":1,"768":1,"771":2}}],["基类节点",{"2":{"679":1}}],["基准测试集",{"2":{"550":1}}],["基建决定上层建筑",{"2":{"509":1}}],["基线测试",{"0":{"504":1},"1":{"505":1,"507":1,"508":1}}],["基本不打游戏",{"2":{"959":1}}],["基本可以看成有",{"2":{"917":1}}],["基本到了最后一个专题",{"2":{"911":1}}],["基本人设",{"0":{"497":1},"1":{"498":1,"499":1}}],["基本格式",{"2":{"451":1}}],["基本语言与环境",{"0":{"338":1}}],["基本函数的使用",{"2":{"271":1}}],["基本类型约束示例",{"2":{"265":1}}],["基本类型约束是泛型约束中最基础的形式",{"2":{"265":1}}],["基本类型约束",{"0":{"265":1},"2":{"270":1}}],["基本选项",{"2":{"203":1}}],["基础代谢率有时达到标准状态",{"2":{"962":1}}],["基础代谢率",{"2":{"960":1,"964":2}}],["基础令牌",{"2":{"929":1}}],["基础色彩等高频",{"2":{"928":1}}],["基础底层调色板与全局规范",{"2":{"928":2}}],["基础类与",{"2":{"931":1}}],["基础类名",{"2":{"927":1}}],["基础类型",{"2":{"231":1}}],["基础概率是核心",{"2":{"917":1}}],["基础测试执行器",{"2":{"881":1}}],["基础实现",{"2":{"792":1}}],["基础元素契约",{"2":{"776":1}}],["基础元素类",{"2":{"761":1}}],["基础功能演示",{"2":{"762":1}}],["基础颜色贴图",{"2":{"749":1}}],["基础颜色",{"2":{"749":1}}],["基础属性",{"2":{"748":1}}],["基础图表",{"2":{"706":1}}],["基础渲染层",{"2":{"704":1,"705":1}}],["基础渲染器",{"2":{"647":1}}],["基础组件",{"2":{"649":1,"650":1,"706":1}}],["基础样式",{"2":{"647":1,"924":1,"927":1}}],["基础",{"0":{"818":1},"2":{"645":1,"647":2}}],["基础无状态对话",{"0":{"483":1}}],["基础产品审美",{"2":{"459":1}}],["基础答疑",{"2":{"405":1}}],["基础学习需求",{"2":{"405":1}}],["基础学习",{"2":{"405":1}}],["基础编程",{"2":{"405":1}}],["基础技术",{"2":{"346":1}}],["基础泛型函数",{"0":{"258":1}}],["基础语法与语义",{"0":{"229":1,"236":1}}],["基础配置",{"2":{"211":1}}],["基础设施层",{"0":{"551":1},"2":{"189":1,"190":1,"274":1,"277":1,"279":2,"280":1,"281":1,"761":2}}],["基础设施",{"2":{"143":1,"280":1,"926":1}}],["基础设施的残酷现实",{"0":{"137":1}}],["基础设施代码",{"2":{"10":1}}],["基础规则",{"0":{"77":1}}],["基础上引入",{"2":{"58":1}}],["基础架构已然确立",{"2":{"8":1}}],["基于遇到的问题寻找解决方法",{"2":{"958":1}}],["基于远程工具协作已经被运用",{"2":{"957":1}}],["基于对重要业务和任务的识别",{"2":{"956":1}}],["基于统计情况调整时间",{"2":{"954":1}}],["基于事务的重要程度",{"2":{"952":1}}],["基于事件总线的通信",{"2":{"289":1}}],["基于不同生态的特性",{"2":{"934":1}}],["基于上述多维度的综合考量",{"2":{"928":1}}],["基于多方面遇到的问题",{"2":{"912":1}}],["基于系统与模型思维构建洞察力模型",{"0":{"908":1},"1":{"909":1,"910":1}}],["基于此数据创建可查询的",{"2":{"770":1}}],["基于浏览器的",{"2":{"734":1}}],["基于视觉结果的二次布局",{"2":{"715":1}}],["基于纯",{"2":{"699":1}}],["基于图数据库或向量库",{"2":{"546":1}}],["基于自研",{"2":{"523":1}}],["基于glm系列大模型",{"2":{"512":1}}],["基于先进的",{"2":{"511":1}}],["基于零代码平台搭建的需求",{"2":{"498":1}}],["基于这个",{"2":{"492":1}}],["基于反思建议",{"2":{"426":1}}],["基于语言模型的自主分解",{"0":{"425":1}}],["基于思考结果",{"2":{"414":1}}],["基于价值的定价",{"2":{"397":1}}],["基于抽象的低耦合设计",{"2":{"328":1}}],["基于共享状态的通信",{"2":{"289":1}}],["基于路由的微前端框架",{"2":{"287":1}}],["基于泛型设计的接口和类",{"2":{"255":1}}],["基于流式",{"2":{"160":1}}],["基于",{"0":{"427":1},"2":{"78":1,"115":1,"159":1,"160":1,"166":1,"287":1,"289":1,"341":1,"342":2,"343":2,"353":1,"354":1,"515":1,"536":1,"542":1,"545":1,"564":1,"641":1,"642":1,"653":1,"671":1,"677":1,"686":1,"776":1,"815":1,"928":1,"942":1}}],["基于规范实现完整的功能模块",{"2":{"9":1}}],["基于规划结果",{"2":{"9":1}}],["基于第一阶段评审通过的组件划分树与职责描述",{"2":{"3":1}}],["从大佬口中得知他在减体重时尝试过不吃主食",{"2":{"962":1}}],["从大文件到",{"0":{"118":1}}],["从微信读书上找了本书",{"2":{"962":1}}],["从微观和宏观角度预判趋势",{"2":{"400":1}}],["从整体来讲",{"2":{"959":1}}],["从时间维度来看",{"2":{"946":1}}],["从实践效果来看",{"2":{"946":1}}],["从根本上消灭了全局样式冲突",{"2":{"923":1}}],["从笔者的实践来看",{"2":{"906":1}}],["从基础的",{"2":{"901":1}}],["从测试开始",{"2":{"890":1}}],["从模糊需求到明确设计",{"2":{"888":1}}],["从需求到合并",{"0":{"892":1}}],["从需求到合并的全流程缺乏自动化编排",{"2":{"874":1}}],["从需要频繁人工干预的",{"2":{"477":1}}],["从流中读取字节块",{"2":{"833":1}}],["从用户调用",{"2":{"745":1}}],["从用户列表中查找特定",{"2":{"259":1}}],["从上到下分为五层",{"2":{"732":1}}],["从像素坐标转换为数据值",{"2":{"719":1}}],["从按钮点击",{"2":{"659":1}}],["从灵感捕获到深度内化",{"2":{"630":1}}],["从内化到输出",{"0":{"629":1}}],["从来都会积极拥抱新的传播工具",{"2":{"613":1}}],["从来不加载这个技能",{"2":{"445":1}}],["从丝绸",{"2":{"613":1}}],["从达利欧的系统化决策",{"2":{"603":1}}],["从皮克斯如何建立允许失败的创意土壤",{"2":{"601":1}}],["从机制拆解到生产实践指南",{"2":{"588":1}}],["从目录结构中",{"2":{"570":1}}],["从硬编码到标准协议与上下文连接",{"0":{"548":1}}],["从手工精雕到",{"0":{"934":1}}],["从手艺人到导演",{"0":{"533":1}}],["从手动内存管理到垃圾回收",{"2":{"525":1}}],["从汇编语言到高级语言",{"2":{"525":1}}],["从硅基流动起步",{"2":{"523":1}}],["从知识输出到视觉呈现",{"2":{"515":1}}],["从惊艳",{"2":{"508":1}}],["从惊叹到复刻的逆向工程",{"0":{"371":1},"1":{"372":1,"373":1,"374":1,"375":1}}],["从形",{"2":{"507":1}}],["从常规",{"0":{"503":1},"1":{"504":1,"505":1}}],["从研发思维到产品直觉",{"0":{"495":1}}],["从研究结果提取指标",{"2":{"471":1}}],["从受众角度来看",{"2":{"492":1}}],["从无状态交互到自主执行",{"0":{"482":1},"1":{"483":1,"484":1}}],["从理论层面看",{"2":{"467":1}}],["从零散指令到可持续工作流",{"0":{"456":1}}],["从零开发一个",{"2":{"429":1}}],["从本质上来讲",{"2":{"442":1}}],["从本文可以看到",{"2":{"271":1}}],["从最简单的",{"2":{"597":1}}],["从最初",{"2":{"569":1}}],["从最初只会吟诗作对的",{"2":{"420":1}}],["从最直观的代码抽离切入",{"2":{"303":1}}],["从一段文字描述到可运行的",{"2":{"561":1}}],["从一个小场景的一个小闭环开始",{"2":{"465":1}}],["从一个人的独角戏",{"2":{"415":1}}],["从一种",{"2":{"309":1}}],["从单兵作战的",{"2":{"413":1}}],["从单一职责的约束",{"2":{"332":1}}],["从搜索引擎",{"2":{"411":1}}],["从观察者到洞察者",{"0":{"389":1}}],["从被动响应到主动",{"0":{"355":1}}],["从团队专注的研究技术方向出发",{"2":{"346":1}}],["从加载机制中理解了性能的边界",{"2":{"337":1}}],["从早期",{"2":{"303":1}}],["从逻辑隔离到类型契约",{"2":{"272":1}}],["从特殊到一般",{"2":{"271":1}}],["从数组中查找第一个匹配项",{"2":{"259":1}}],["从联合中提取特定成员",{"2":{"234":1}}],["从联合中排除特定成员",{"2":{"234":1}}],["从集合的角度来看",{"2":{"229":1}}],["从原赋中选取",{"2":{"508":1}}],["从原生",{"2":{"180":1}}],["从原理",{"2":{"114":1}}],["从而使自己更好地适应社会",{"2":{"958":1}}],["从而基于虚拟网络提升服务市场的效率",{"2":{"957":1}}],["从而划分出几个分类",{"2":{"947":1}}],["从而彻底避免了和其他组件的",{"2":{"923":1}}],["从而彻底消除服务端内部的定时等待",{"2":{"152":1}}],["从而有效解决",{"2":{"922":1}}],["从而真正从本质上解决问题",{"2":{"908":1}}],["从而跨越",{"2":{"901":1}}],["从而向目标逼近",{"2":{"622":1}}],["从而理解",{"2":{"569":1}}],["从而生成生产级代码",{"2":{"557":1}}],["从而大幅提升",{"2":{"547":1}}],["从而在架构层面保证了结果的准确性",{"2":{"493":1}}],["从而在扩展能力的同时",{"2":{"441":1}}],["从而在根源上解决问题",{"2":{"382":1}}],["从而实现真正的混合工作",{"2":{"956":1}}],["从而实现高度的可维护性和可扩展性",{"2":{"934":1}}],["从而实现极其强大的动态样式能力",{"2":{"922":1}}],["从而实现",{"2":{"922":1}}],["从而实现复杂任务的解耦与并行工作",{"2":{"438":1}}],["从而实现即时性较高的信息更新",{"2":{"150":1}}],["从而逐步解决问题",{"2":{"422":1}}],["从而带来了四个维度的核心优势",{"2":{"415":1}}],["从而吸引用户持续使用",{"2":{"398":1}}],["从而吸引气味相投的粉丝",{"2":{"380":1}}],["从而获得更精准的",{"2":{"369":1}}],["从而构建出稳定可靠的系统",{"2":{"367":1}}],["从而构建出能够准确反映业务需求",{"2":{"276":1}}],["从而降低系统的复杂性",{"2":{"296":1}}],["从而避免了许多潜在的",{"2":{"254":1}}],["从而提供完整的类型安全保障",{"2":{"230":1}}],["从组件到用户",{"2":{"71":1}}],["从框架设计哲学到它给我们的选型启示",{"2":{"60":1}}],["从构建链路到运行时模型",{"2":{"60":1}}],["从未需要一台应用服务器",{"2":{"60":1}}],["从源代码到最终呈现在用户眼前",{"2":{"33":1}}],["从博客到电商",{"0":{"30":1}}],["从",{"0":{"22":1,"66":1,"68":1,"71":1,"349":1,"358":1,"367":1,"376":1,"377":1,"402":1,"420":1,"461":1,"527":1,"528":1,"532":1,"535":1,"536":1,"555":1,"556":1,"558":1,"620":1},"1":{"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"69":1,"70":1,"71":1},"2":{"145":1,"158":1,"203":1,"234":1,"272":1,"298":1,"308":2,"309":1,"316":1,"367":1,"443":1,"476":1,"491":1,"503":1,"558":1,"630":1,"642":1,"655":1,"658":1,"684":1,"688":1,"778":1,"792":1,"843":1,"892":1,"901":1,"902":2,"909":1,"925":1}}],["从执行者转变为立法者",{"0":{"8":1},"1":{"9":1,"10":1,"11":1}}],["从父级传入",{"2":{"5":1}}],["5到8年后让个人发展",{"2":{"959":1}}],["5个设计文档",{"2":{"881":1}}],["5个已实现功能",{"2":{"881":1}}],["5个接口以内",{"2":{"190":1}}],["56",{"2":{"845":1,"849":1}}],["546行",{"2":{"762":1}}],["543行",{"2":{"762":1}}],["54个",{"2":{"734":1}}],["521行",{"2":{"762":1}}],["53",{"2":{"928":1,"929":1}}],["53个",{"2":{"734":1}}],["53kb",{"2":{"647":1}}],["51kb",{"2":{"734":1}}],["55+",{"2":{"701":1,"706":2}}],["58kb",{"2":{"646":1,"647":1}}],["599",{"2":{"260":1}}],["5xx",{"2":{"169":1,"171":1}}],["5秒",{"2":{"149":1}}],["5秒内相同的请求会被去重",{"2":{"99":1}}],["503",{"2":{"807":1}}],["50+",{"2":{"729":1}}],["500",{"2":{"169":1,"329":1,"594":1,"636":1,"820":1,"925":5,"927":2,"929":2,"933":1}}],["500ms",{"2":{"142":1}}],["5000",{"2":{"99":1,"149":2,"262":1,"595":1,"705":2,"715":1,"962":1}}],["50ms",{"2":{"138":1}}],["504",{"2":{"137":1,"152":1}}],["50",{"2":{"136":1,"163":1,"164":1,"354":1,"696":3,"749":1,"845":1,"925":3,"927":1,"933":1,"952":3}}],["5分钟级任务粒度",{"2":{"881":1}}],["5分钟",{"2":{"104":1}}],["5+",{"2":{"46":1,"203":2}}],["5",{"0":{"8":1,"9":1,"10":1,"11":1,"29":1,"32":1,"46":1,"80":1,"81":1,"82":1,"83":1,"89":1,"125":1,"126":1,"127":1,"128":1,"129":1,"140":1,"175":1,"176":1,"177":1,"178":1,"179":1,"195":1,"216":1,"225":1,"226":1,"233":1,"240":1,"245":1,"246":1,"247":1,"248":1,"249":1,"256":1,"262":1,"269":1,"271":1,"281":1,"289":1,"308":1,"314":1,"321":1,"323":1,"331":1,"337":1,"342":1,"354":1,"361":1,"381":1,"386":1,"413":1,"414":1,"415":1,"417":1,"418":1,"419":2,"428":1,"429":1,"430":1,"431":1,"438":1,"451":1,"465":1,"476":1,"485":1,"486":1,"509":1,"539":1,"549":1,"579":1,"580":1,"581":1,"582":1,"583":1,"604":1,"643":1,"657":1,"687":1,"716":1,"717":1,"726":1,"744":1,"772":1,"802":1,"803":1,"804":1,"851":1,"860":1,"862":1,"863":1,"864":1,"891":1,"919":1,"924":1,"933":1,"964":1},"1":{"9":1,"10":1,"11":1,"47":1,"48":1,"49":1,"50":1,"81":1,"82":1,"83":1,"126":1,"127":1,"128":1,"129":1,"177":1,"178":1,"179":1,"196":1,"197":1,"246":1,"247":1,"248":1,"249":1,"324":1,"325":1,"414":1,"415":1,"416":2,"417":1,"418":1,"419":1,"429":1,"430":1,"431":1,"486":1,"580":1,"581":1,"582":1,"583":1,"658":1,"659":1,"660":1,"661":1,"662":1,"663":1,"664":1,"665":1,"666":1,"667":1,"668":1,"688":1,"689":1,"690":1,"717":1,"745":1,"746":1,"773":1,"774":1,"803":1,"804":1,"863":1,"864":1,"892":1,"893":1},"2":{"46":1,"100":1,"139":1,"140":1,"143":1,"148":1,"155":1,"166":1,"169":1,"223":2,"231":1,"258":1,"287":2,"288":1,"317":1,"323":1,"324":1,"369":1,"383":1,"389":1,"430":1,"451":1,"471":1,"472":1,"506":1,"512":1,"521":1,"523":1,"564":1,"577":1,"581":1,"631":2,"645":1,"724":1,"753":1,"755":1,"774":1,"778":1,"804":1,"811":1,"843":1,"845":2,"857":1,"860":3,"868":1,"884":1,"888":1,"889":2,"895":1,"928":1,"933":1,"942":2,"952":2,"961":1,"962":1,"963":2,"964":1}}],["构筑起持久的领域知识上下文",{"2":{"440":1}}],["构造函数并实例化",{"2":{"768":1}}],["构造函数接收",{"2":{"686":1}}],["构造",{"2":{"178":1,"484":1}}],["构成了",{"2":{"7":1,"270":1}}],["构建自己的心智模型",{"2":{"945":1,"948":1}}],["构建自主工作流",{"2":{"403":1}}],["构建原子层",{"2":{"932":1}}],["构建强类型的枚举接口",{"2":{"930":1}}],["构建切实可行的目标",{"2":{"906":1}}],["构建输出",{"0":{"828":1}}],["构建输出目录",{"2":{"203":1}}],["构建生成",{"2":{"792":1}}],["构建所有包",{"2":{"871":1}}],["构建所有图层",{"2":{"768":1}}],["构建所有格式",{"2":{"726":1}}],["构建后的播放器",{"2":{"762":1}}],["构建文档",{"2":{"752":1}}],["构建树形场景图",{"2":{"740":1}}],["构建产物",{"2":{"734":1}}],["构建产物目录",{"2":{"706":1,"762":1}}],["构建器",{"2":{"734":1}}],["构建发布",{"0":{"726":1}}],["构建主脚本",{"2":{"706":1}}],["构建脚本等辅助设施",{"2":{"879":1}}],["构建脚本和配置",{"2":{"706":1}}],["构建脚本",{"2":{"677":1,"762":1}}],["构建验证",{"2":{"677":1}}],["构建了一个树形",{"2":{"653":1}}],["构建了一套无形的",{"2":{"319":1}}],["构建体系",{"2":{"615":1}}],["构建个人知识树而言是极大的助力",{"2":{"613":1}}],["构建知识树",{"0":{"609":1}}],["构建命令",{"0":{"697":1},"2":{"595":1,"792":1}}],["构建前端",{"2":{"553":1}}],["构建精美的",{"2":{"553":1}}],["构建测试集",{"2":{"549":1}}],["构建连接物理世界的数字中枢",{"0":{"544":1},"1":{"545":1,"546":1,"547":1,"548":1,"549":1,"550":1}}],["构建系统与产物矩阵",{"0":{"778":1}}],["构建系统",{"2":{"540":1}}],["构建确定性的工程基座",{"0":{"534":1},"1":{"535":1,"536":1,"537":1,"538":1}}],["构建新型",{"0":{"533":1}}],["构建流式交互",{"0":{"487":1},"1":{"488":1,"489":1,"490":1}}],["构建简单",{"2":{"477":1}}],["构建可查询的知识网络",{"2":{"628":1}}],["构建可复用底层系统",{"2":{"459":1}}],["构建可复用的底层系统",{"2":{"459":1}}],["构建可预测的秩序",{"0":{"332":1}}],["构建力与杠杆力在不同成熟度下的综合体现",{"2":{"459":1}}],["构建力",{"2":{"458":1}}],["构建过程或辅助工具的变动",{"2":{"451":2}}],["构建更完整的认知闭环",{"2":{"433":1}}],["构建锁定效应与对抗边际效用递减",{"0":{"398":1}}],["构建信息场域",{"2":{"367":1}}],["构建智能体工作流",{"2":{"367":1}}],["构建类似",{"2":{"355":1}}],["构建类型安全的属性访问工具函数",{"2":{"270":1}}],["构建高性能的网络应用程序",{"2":{"338":1}}],["构建稳固的类型防线",{"0":{"326":1}}],["构建配置",{"2":{"322":1,"647":2,"706":1,"734":1,"762":1,"823":1}}],["构建模块图谱",{"2":{"314":1}}],["构建模块聚合层",{"0":{"312":1}}],["构建和部署脚本",{"2":{"290":1,"792":1}}],["构建之间共享代码",{"2":{"288":1}}],["构建清晰的配置层次结构",{"2":{"209":1}}],["构建一个简易的命令行聊天工具",{"2":{"487":1}}],["构建一个",{"2":{"367":1}}],["构建一个健壮的",{"2":{"175":1}}],["构建一个剥离了所有动态行为的",{"2":{"3":1}}],["构建进度条",{"2":{"123":1}}],["构建于",{"2":{"115":1}}],["构建出一套清晰",{"2":{"332":1}}],["构建出更健壮",{"2":{"293":1}}],["构建出更加类型安全",{"2":{"263":1}}],["构建出的页面水合后具备完整的",{"2":{"66":1}}],["构建出经得起时间考验的软件系统",{"2":{"12":1}}],["构建多",{"2":{"57":2}}],["构建较多",{"2":{"57":1}}],["构建少",{"2":{"57":2}}],["构建阶段生成所有页面的",{"2":{"43":1}}],["构建阶段",{"2":{"43":1,"65":1}}],["构建阶段的时机选择",{"2":{"33":1}}],["构建与渲染",{"2":{"35":1}}],["构建",{"0":{"536":1},"2":{"33":3,"57":1,"170":1,"343":1,"441":1,"467":1,"548":1,"572":1,"573":1,"583":1,"646":1,"647":1,"655":2,"667":1,"671":1,"677":1,"702":1,"752":1,"762":1,"883":1,"902":1,"928":1}}],["构建时自动下载字体并内联为",{"2":{"84":1}}],["构建时机选择",{"2":{"67":1}}],["构建时由",{"2":{"65":1}}],["构建时渲染完成",{"2":{"63":1}}],["构建时穷举所有可能",{"2":{"66":1}}],["构建时穷举",{"0":{"62":1},"2":{"61":1}}],["构建时间随页面数量爆炸性增长",{"2":{"59":1}}],["构建时间影响",{"2":{"57":1}}],["构建时固化",{"2":{"57":1}}],["构建时",{"2":{"57":1,"75":2,"87":1}}],["构建时一次性生成",{"2":{"57":1}}],["构建时生成",{"2":{"27":1,"65":2}}],["构建时预获取所有文章",{"2":{"27":1}}],["构建时预渲染",{"2":{"15":1}}],["构建工具链",{"2":{"734":1}}],["构建工具与工作流",{"0":{"343":1}}],["构建工具的妙用",{"2":{"308":1}}],["构建工具的选择直接决定开发体验上限",{"2":{"66":1}}],["构建工具配置",{"2":{"216":1}}],["构建工具",{"2":{"17":1,"23":1,"216":1,"642":1,"730":1}}],["构建的全栈项目",{"2":{"342":1}}],["构建的",{"2":{"16":1}}],["构建纯渲染的静态版本",{"0":{"3":1}}],["重读数学的乐趣",{"0":{"911":1},"1":{"912":1,"913":1,"914":1,"915":1,"916":1,"917":1,"918":1}}],["重读",{"0":{"907":1}}],["重回第",{"2":{"889":2}}],["重做",{"2":{"734":1}}],["重视庞大的",{"2":{"614":1}}],["重塑内心的宁静与独立判断的勇气",{"2":{"603":1}}],["重塑工程质量",{"0":{"550":1}}],["重工业",{"2":{"551":2}}],["重获",{"0":{"526":1},"1":{"527":1,"528":1,"529":1}}],["重内容外链",{"2":{"445":1}}],["重规划",{"2":{"429":1}}],["重交互体验的",{"2":{"344":1}}],["重",{"2":{"344":1}}],["重度依赖",{"2":{"342":1}}],["重度依赖服务器端计算的应用",{"2":{"31":1}}],["重构与工程管理",{"2":{"568":1}}],["重构与流程优化",{"2":{"467":1}}],["重构从",{"2":{"527":1}}],["重构民主化",{"2":{"527":1}}],["重构一段底层代码",{"2":{"388":1}}],["重构",{"0":{"374":1},"2":{"371":1,"451":1,"568":1,"587":1}}],["重构时的代码安全性极高",{"2":{"342":1}}],["重构代码生产方式与编程范式的今天",{"2":{"902":1}}],["重构代码",{"2":{"315":1}}],["重构更安全",{"2":{"311":1}}],["重载签名",{"0":{"238":1}}],["重复",{"2":{"765":1}}],["重复器",{"2":{"764":1,"771":1}}],["重复器修饰器",{"2":{"762":1}}],["重复资讯推送",{"2":{"624":1}}],["重复性信息处理",{"2":{"465":1}}],["重复性的数字劳作中解放出来",{"2":{"420":1}}],["重复造轮子",{"2":{"297":1}}],["重复的次数就是最好的利器",{"2":{"917":1}}],["重复的判断条件",{"2":{"186":1}}],["重复的头部开销会吞噬大量带宽",{"2":{"143":1}}],["重复触发",{"2":{"175":2}}],["重试机制",{"2":{"856":1}}],["重试配置",{"2":{"856":1}}],["重试连接前等待的重连间隔",{"2":{"839":1}}],["重试连接的主循环",{"2":{"830":1}}],["重试流程",{"0":{"836":1}}],["重试间隔",{"2":{"833":1}}],["重试",{"2":{"823":1,"832":1,"839":1}}],["重试逻辑",{"2":{"173":1,"824":1}}],["重试次数超限",{"2":{"171":1}}],["重试策略控制",{"2":{"830":1}}],["重试策略不可控",{"2":{"814":1}}],["重试策略",{"0":{"171":1},"2":{"175":1}}],["重试等逻辑完全接管",{"2":{"97":1}}],["重置为默认值",{"2":{"168":1}}],["重连",{"2":{"830":1}}],["重连机制",{"2":{"160":1,"167":1}}],["重连时如何恢复先前的",{"2":{"139":1}}],["重连间隔",{"2":{"121":1}}],["重计算异步任务",{"2":{"136":1}}],["重装",{"0":{"129":1}}],["重前端轻交互的现代",{"2":{"111":1}}],["重状态流转",{"2":{"111":1}}],["重建",{"2":{"73":1}}],["重要操作提示",{"2":{"925":1}}],["重要非紧急",{"2":{"602":1}}],["重要",{"2":{"66":1}}],["重新调整周末时间",{"2":{"952":1}}],["重新理解与应用",{"2":{"952":1}}],["重新拥有健康的身体后",{"2":{"950":2}}],["重新创建",{"2":{"930":1}}],["重新发现了有趣的数学思维",{"0":{"913":1},"1":{"914":1,"915":1,"916":1,"917":1,"918":1}}],["重新加载",{"2":{"663":1}}],["重新组织结构或调整细节",{"2":{"426":1}}],["重新开始",{"2":{"175":1}}],["重新验证",{"2":{"100":1}}],["重新渲染并更新缓存",{"2":{"97":1}}],["重新构建项目",{"2":{"29":1}}],["重新获取评论",{"2":{"28":1}}],["重渲染",{"2":{"7":1}}],["重点关注",{"2":{"591":1}}],["重点模块",{"2":{"474":1}}],["重点",{"2":{"3":1,"107":1}}],["借此进行",{"2":{"443":1}}],["借此维持自身的纯粹与解耦",{"2":{"7":1}}],["借鉴人类记忆分为感觉",{"2":{"410":1}}],["借鉴了学术论文的引用机制",{"2":{"349":1}}],["借助产品的数字化属性",{"2":{"957":1}}],["借助烟火气来平衡下工作与生活",{"2":{"942":1}}],["借助这些学习方法论",{"2":{"918":1}}],["借助现代化的协同工具进行高效的异步沟通与知识沉淀",{"2":{"379":1}}],["借助现代浏览器的",{"2":{"117":1}}],["借助大语言模型等智能化工具的辅助",{"2":{"378":1}}],["借助",{"2":{"3":1,"362":1,"459":1,"461":1,"629":1,"934":1}}],["但触底反弹",{"2":{"965":1}}],["但基本能够控制住整体继续下降的趋势",{"2":{"963":1}}],["但控制饮食",{"2":{"963":1}}],["但长期看对身体可能存在某些不好的地方",{"2":{"962":1}}],["但伟人的很多习惯和优点适合当代年轻人学习",{"2":{"959":1}}],["但由于早上",{"2":{"959":1}}],["但由于笔者在第一阶段还处于救火阶段",{"2":{"952":1}}],["但真的凭借着坚韧",{"2":{"958":1}}],["但真实世界的绝大多数领域",{"2":{"614":1}}],["但最终实践的时候其实都初窥门径地用到了一些通识且有点哲学味道的",{"2":{"958":1}}],["但最终收尾的时候多少都还流露出想要搞些有点创造力或者正能量的事情",{"2":{"957":1}}],["但自由协作关系会越来越多",{"2":{"957":1}}],["但自定义",{"2":{"493":1}}],["但国内很少有企业让员工能持续几天甚至一个月居家办公",{"2":{"955":1}}],["但随着疫情的多次反复",{"2":{"956":1}}],["但随着健康与业余自我充电相关的投入加大",{"2":{"953":1}}],["但随着技术的演进",{"2":{"616":1}}],["但健身减肥的胜利果实也被巩固住了",{"2":{"952":1}}],["但逼着自己执行",{"2":{"952":1}}],["但没有多少实际的用处",{"2":{"950":1}}],["但有些采用自由式阅读的人真的在某些方面比采用海绵式阅读的人优秀",{"2":{"946":1}}],["但方法不会凭空从天上掉下来的",{"2":{"939":1}}],["但终究只是最后的止损方式",{"2":{"938":1}}],["但同样会结合实操给出自己的思考与总结",{"2":{"936":1}}],["但本次漫谈会梳理下笔者自己在实操方面的尝试",{"2":{"936":1}}],["但本质问题在于",{"2":{"616":1}}],["但重新找回后却很容易再次不被珍惜",{"2":{"936":1}}],["但写文章是笔者觉得挺适合自己的一种方式",{"2":{"935":1}}],["但目前的主流代码模型已经能非常熟练地处理这种拼接范式",{"2":{"934":1}}],["但至关重要的基石",{"2":{"932":1}}],["但无论选择哪种路径",{"2":{"928":1}}],["但无法直连",{"2":{"523":1}}],["但无法检查代码是否符合规范",{"2":{"219":1}}],["但技术选型没有绝对的",{"2":{"928":1}}],["但通过",{"2":{"923":1}}],["但他们大多坚信自己能搞出来通用人工智能",{"2":{"919":1}}],["但笔者真的有这种偏向",{"2":{"959":1}}],["但笔者想继续问的是",{"2":{"945":1}}],["但笔者在这方面是有一定自信的",{"2":{"936":1}}],["但笔者在连续坚持落地拆解出来的目标过程中",{"2":{"906":1}}],["但笔者曾阅读过",{"2":{"919":1}}],["但聚焦于某一特定任务并不是最好的方式",{"2":{"918":1}}],["但当我们让模型去完成一些别的任务时",{"2":{"918":1}}],["但当泛型用于特定领域时",{"2":{"263":1}}],["但很少有人能用这些比较简单的数学思维管理自己的时间与事务",{"2":{"914":1}}],["但很难将决策树",{"2":{"912":1}}],["但毕业走向工作岗位后",{"2":{"912":1}}],["但也坚信",{"2":{"947":1}}],["但也有其局限性",{"2":{"910":1}}],["但也正因如此",{"2":{"610":1}}],["但问题的解决方案",{"2":{"908":1}}],["但或多或少能找出优于当前状态的路径或答案",{"2":{"906":1}}],["但核心入口是",{"2":{"764":1}}],["但影响子节点的渲染状态",{"2":{"680":1}}],["但增加了构建配置复杂度",{"2":{"673":1}}],["但需要额外",{"2":{"673":1}}],["但需注意幂等性处理与签名验证以确保安全",{"2":{"143":1}}],["但关键在于",{"2":{"619":1}}],["但与既有认知冲突的客观观点时",{"2":{"618":1}}],["但为什么真正跑通全栈并沉淀下来的人凤毛麟角",{"2":{"617":1}}],["但必须有所节制",{"2":{"613":1}}],["但书这种媒介与其他信息媒介相比",{"2":{"606":1}}],["但性质不同",{"2":{"592":1}}],["但如果审查工作由独立的",{"2":{"590":1}}],["但每次都要你提醒",{"2":{"588":1}}],["但每个仓储操作的实体类型各不相同",{"2":{"256":1}}],["但执行逻辑复杂的工作",{"2":{"587":1}}],["但进阶才是解药",{"2":{"552":1}}],["但守住",{"0":{"538":1}}],["但因为做起来太费功夫",{"2":{"528":1}}],["但价格较高",{"2":{"519":1}}],["但考虑到体验自家近期更新的能力",{"2":{"498":1}}],["但回归本质我们就会发现",{"2":{"496":1}}],["但代价也显而易见",{"2":{"457":1}}],["但是需要",{"2":{"425":1}}],["但是",{"2":{"424":1}}],["但是任务还没完",{"2":{"153":1}}],["但理性的微观经济学原理",{"2":{"400":1}}],["但深入思考",{"2":{"391":1}}],["但却共同构建了最美妙的世界万物",{"2":{"387":1}}],["但线段总有尽头",{"2":{"386":1}}],["但我们可觉得自己能很好地处理这种模式呢",{"2":{"955":1}}],["但我们可以按其业务深度与协作范式将其归纳为五大形态",{"2":{"413":1}}],["但我们确实生活在一个相互依赖的社会",{"2":{"907":1}}],["但我们不建议直接采用全自动化构建作为最终方案",{"2":{"3":1}}],["但我坚信直觉是经验在潜意识里的压缩算法",{"2":{"368":1}}],["但究竟是",{"2":{"366":1}}],["但用户只想要一个",{"2":{"366":1}}],["但好的",{"2":{"365":1}}],["但实现较低",{"2":{"365":1}}],["但实际上",{"2":{"351":1,"612":1}}],["但实际情况并非如此",{"2":{"238":1}}],["但实际只有一次网络请求",{"2":{"81":1}}],["但对于笔者存在很多不可行之处",{"2":{"962":1}}],["但对于大多数工程师",{"2":{"363":1}}],["但对产品人而言",{"2":{"393":1}}],["但对复杂性的驾驭能力永远是工程师的核心竞争力",{"2":{"12":1}}],["但不会一味按照别人的建议来",{"2":{"963":1}}],["但不会算高难度数学",{"2":{"408":1}}],["但不是本文的重点",{"2":{"938":1}}],["但不要停留在一些似是而非的概念世界里",{"2":{"908":1}}],["但不包括默认导出",{"2":{"312":1}}],["但不关心父组件如何处理",{"2":{"7":1}}],["但留在你脑海中那道划分模块职责的逻辑边界",{"2":{"303":1}}],["但模块之间的依赖关系不明确",{"2":{"298":1}}],["但要注意约束不能过度",{"2":{"263":1}}],["但具体的数据类型可能不同",{"2":{"256":1}}],["但它不足以指导大部人去实践",{"2":{"941":1}}],["但它不是",{"2":{"361":1}}],["但它高度依赖开发者的自觉性",{"2":{"920":1}}],["但它让信息更聚焦",{"2":{"443":1}}],["但它已经具备了类型的语义",{"2":{"254":1}}],["但它们有本质区别",{"2":{"240":1}}],["但它们并非完整的解决方案",{"2":{"71":1}}],["但失去类型信息",{"2":{"253":1}}],["但类型层面不可互换",{"2":{"247":1}}],["但强烈推荐用于配置复用",{"2":{"210":1}}],["但兼容性可能有问题",{"2":{"203":1}}],["但过多依赖会导致",{"2":{"192":1}}],["但开发者预判",{"2":{"184":1}}],["但现在你应该已经掌握了一套完整的解决方案",{"2":{"180":1}}],["但现实是",{"2":{"135":1}}],["但多了",{"2":{"169":1}}],["但数据可能跨越多个读取块",{"2":{"168":1}}],["但这样做有一个根本缺陷",{"2":{"608":1}}],["但这并不意味着",{"2":{"606":1}}],["但这仅仅是一个",{"2":{"504":1}}],["但这仅仅是构建",{"2":{"433":1}}],["但这恰恰违背了产品的核心逻辑",{"2":{"492":1}}],["但这种",{"2":{"437":1}}],["但这个简化实现存在明显问题",{"2":{"166":1}}],["但这些",{"2":{"66":1}}],["但其兼容性无与伦比",{"2":{"306":1}}],["但其局限性",{"2":{"165":1}}],["但其核心机制",{"2":{"53":1}}],["但二者完全可以协同工作",{"2":{"160":1}}],["但并非银弹",{"2":{"141":1}}],["但会将数据切分成一个个逻辑块",{"2":{"117":1}}],["但单次数据包极小的场景",{"2":{"115":1}}],["但单向数据流的铁律绝不能被破坏",{"2":{"7":1}}],["但在结果返回方式上不同",{"2":{"856":1}}],["但在团队配置中这些是高风险操作",{"2":{"596":1}}],["但在公式中权重极高的变量",{"2":{"556":1}}],["但在交付的最后一公里",{"2":{"534":1}}],["但在格式的严格遵循上略显生硬",{"2":{"505":2}}],["但在随后整理笔记",{"2":{"457":1}}],["但在现实中",{"2":{"393":1}}],["但在现代工作流中",{"2":{"335":1}}],["但在现代",{"2":{"320":1}}],["但在今天",{"2":{"361":1}}],["但在编译时它是一个不同的类型",{"2":{"247":1}}],["但在",{"2":{"143":1,"180":1,"360":1,"553":1,"902":1}}],["但在大规模分布式系统中依然是最稳健的选择",{"2":{"141":1}}],["但在生产环境中需要关注几个关键问题",{"2":{"133":1}}],["但在实践中仍应极力避免",{"2":{"315":1}}],["但在实际工程落地中",{"2":{"467":1}}],["但在实际落地场景中仍面临显著限制",{"2":{"419":1}}],["但在实际项目中",{"2":{"202":1}}],["但在实际架构设计中",{"2":{"124":1}}],["但在实时性要求较高的领域",{"2":{"114":1}}],["但在工程落地时必须关注",{"2":{"119":1}}],["但在应用层层面",{"2":{"115":1}}],["但带来了开箱即用的完整生态",{"2":{"110":1}}],["但只挑选出活跃用户",{"2":{"107":1}}],["但整个页面要等所有组件拼接完毕才统一发送",{"2":{"89":1}}],["但简单页面用",{"2":{"67":1}}],["但可以帮你解释问题情境",{"2":{"609":1}}],["但可以在需要时再请求加载技能正文",{"2":{"443":1}}],["但可以适当简化",{"2":{"281":1}}],["但可能会导致用户反感",{"2":{"369":1}}],["但可能影响类型安全",{"2":{"203":1}}],["但可",{"2":{"57":1}}],["但鉴于其前沿性",{"2":{"55":1}}],["但更新频率不至于需要每次请求都实时渲染的场景",{"2":{"50":1}}],["但水合本身也是一次额外的性能开销",{"2":{"41":1}}],["但复杂度高于传统架构",{"2":{"31":1}}],["但后端仅提供",{"2":{"16":1}}],["但",{"2":{"12":1,"89":1,"90":1,"110":1,"402":1,"526":1,"528":1,"673":1,"946":1}}],["=keyof",{"2":{"242":4}}],["==",{"2":{"169":1,"194":2,"203":2,"248":1,"281":4,"289":1,"820":1}}],["==========",{"2":{"927":2}}],["===================================================================================",{"2":{"928":3}}],["================================================================================",{"2":{"928":5}}],["============================================================",{"2":{"692":14,"748":10,"776":12}}],["============================================",{"2":{"203":6,"925":2}}],["===",{"2":{"108":1,"149":2,"153":3,"168":2,"169":1,"172":4,"175":1,"179":2,"203":1,"231":2,"238":4,"249":2,"259":1,"261":1,"262":1,"281":2,"301":1,"306":2,"330":1,"483":2,"484":1,"486":2,"488":5,"489":1,"685":1,"820":1}}],["=>",{"2":{"26":1,"27":2,"28":10,"81":1,"97":3,"99":1,"100":3,"101":1,"103":2,"106":1,"107":4,"108":6,"149":2,"152":1,"153":1,"163":4,"164":4,"166":1,"174":1,"175":6,"178":1,"179":1,"223":5,"238":3,"248":1,"249":1,"259":3,"260":1,"261":2,"262":3,"266":1,"267":2,"281":4,"288":11,"289":3,"295":2,"300":3,"301":3,"302":2,"304":4,"305":1,"306":1,"307":4,"310":2,"313":2,"315":5,"327":6,"328":2,"330":1,"333":1,"483":1,"489":2,"661":6,"662":18,"663":8,"668":2,"686":1,"692":9,"719":1,"720":1,"748":4,"753":1,"806":3,"832":4,"839":4,"840":7,"922":2}}],["=",{"0":{"238":1},"2":{"7":1,"16":1,"26":3,"27":3,"28":12,"33":1,"57":5,"59":1,"67":1,"81":2,"82":1,"83":2,"84":1,"90":1,"97":3,"99":6,"100":3,"101":2,"103":1,"106":1,"108":2,"149":6,"152":4,"153":2,"163":5,"164":3,"166":9,"168":13,"169":1,"171":2,"172":1,"173":4,"174":1,"175":9,"178":1,"179":2,"184":1,"185":3,"187":1,"199":1,"203":2,"222":1,"223":2,"227":3,"229":5,"230":1,"233":1,"234":13,"236":2,"237":5,"238":6,"239":1,"240":2,"242":6,"243":4,"244":16,"246":4,"247":5,"248":13,"249":1,"250":7,"258":3,"259":2,"260":1,"261":9,"262":6,"263":2,"265":3,"266":2,"267":4,"268":4,"269":9,"281":6,"288":12,"289":9,"295":1,"300":2,"301":4,"302":3,"304":6,"305":1,"306":2,"307":2,"310":3,"311":2,"313":3,"314":3,"315":21,"318":3,"327":6,"328":5,"330":2,"333":3,"365":1,"366":1,"367":1,"383":1,"387":1,"408":1,"458":1,"465":1,"482":1,"483":1,"486":2,"488":1,"489":5,"554":1,"640":1,"668":2,"685":3,"692":7,"693":2,"696":3,"712":1,"720":1,"724":1,"733":1,"740":1,"753":8,"767":1,"768":1,"776":1,"777":9,"787":1,"806":6,"809":1,"819":1,"833":8,"839":1,"843":2,"866":2,"867":5,"868":2,"877":1,"895":1,"896":1,"901":1,"902":1,"908":1,"922":1,"923":1,"925":2,"927":1,"947":1,"964":1}}],["ty",{"2":{"768":2}}],["typography",{"2":{"274":2,"647":1}}],["typicode",{"2":{"81":1,"83":1,"90":1}}],["typetext",{"2":{"797":1,"799":1,"806":1}}],["typedarray",{"2":{"730":1}}],["type导入类型",{"2":{"318":1}}],["type显式导出类型",{"2":{"318":1}}],["typeorm",{"2":{"280":1,"281":1}}],["typeof",{"2":{"231":3,"238":4,"306":2,"720":7,"832":1,"839":1,"927":1}}],["types",{"2":{"203":6,"204":1,"221":2,"238":1,"274":8,"275":1,"280":6,"290":4,"318":2,"321":1,"336":1,"647":6,"677":1,"679":1,"706":2,"790":1,"792":1,"799":1}}],["typescriptclass",{"2":{"820":1}}],["typescriptconst",{"2":{"819":1}}],["typescriptlet",{"2":{"486":1}}],["typescriptfor",{"2":{"484":1}}],["typescriptfunction",{"2":{"230":1,"232":1,"482":1}}],["typescript模块化增强",{"2":{"272":1}}],["typescripttype",{"2":{"246":1}}],["typescriptinterface",{"2":{"229":1,"233":1,"236":1,"237":1,"239":1,"242":1,"243":1,"489":1,"832":1,"833":1}}],["typescriptimport",{"2":{"26":1,"152":1,"175":1,"178":1,"179":1,"222":1,"223":1,"483":1,"668":1,"724":1,"818":1,"927":1}}],["typescriptexport",{"2":{"223":1,"482":1}}],["typescript",{"0":{"202":1,"204":1,"323":1,"661":1,"662":1,"663":1,"692":1,"719":1,"720":1,"748":1,"776":1,"777":1,"806":1,"866":1,"895":1},"1":{"203":1,"204":1,"324":1,"325":1},"2":{"25":1,"81":1,"82":1,"83":2,"84":1,"86":1,"90":1,"149":1,"153":1,"169":1,"202":4,"203":2,"205":1,"207":2,"208":1,"210":1,"216":1,"217":4,"219":1,"220":2,"221":2,"223":1,"226":3,"227":1,"229":2,"230":4,"231":2,"232":2,"234":2,"236":1,"237":1,"238":2,"240":1,"244":3,"246":1,"247":1,"248":1,"249":1,"250":2,"252":1,"254":2,"258":2,"259":1,"260":1,"261":2,"262":1,"263":7,"264":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":2,"271":2,"272":2,"274":2,"275":2,"280":1,"281":5,"288":2,"289":3,"317":2,"318":2,"319":1,"320":1,"321":1,"322":1,"324":1,"325":1,"326":1,"331":1,"336":1,"338":2,"342":3,"343":2,"344":3,"414":1,"467":2,"480":1,"481":1,"488":1,"490":1,"572":1,"576":1,"640":1,"643":1,"647":2,"661":1,"662":1,"663":1,"667":1,"677":4,"692":1,"693":1,"699":2,"701":1,"702":1,"706":2,"719":1,"720":1,"723":1,"725":1,"748":1,"758":1,"762":1,"776":1,"777":1,"792":1,"806":2,"815":1,"821":1,"822":2,"823":2,"826":1,"828":1,"839":1,"840":1,"842":1,"843":2,"845":4,"866":1,"867":1,"868":1,"881":1,"895":1,"896":1,"922":2,"923":1,"925":1,"927":4,"928":1,"930":1,"934":3}}],["type>",{"2":{"163":1,"177":1,"178":1,"451":1}}],["type=",{"2":{"28":1}}],["type",{"0":{"247":1},"2":{"26":2,"117":1,"121":1,"161":1,"164":1,"166":1,"169":3,"172":2,"175":4,"177":1,"178":3,"179":1,"188":1,"222":1,"227":1,"229":1,"230":1,"233":1,"234":10,"236":1,"237":1,"238":1,"239":1,"240":2,"242":2,"243":2,"244":8,"247":3,"248":6,"249":1,"250":1,"262":6,"263":1,"289":2,"308":2,"318":6,"333":2,"451":2,"482":5,"483":2,"484":1,"486":1,"488":5,"581":1,"640":2,"646":1,"649":3,"652":4,"661":4,"662":1,"668":4,"692":5,"693":2,"719":2,"720":2,"724":1,"748":1,"749":15,"770":1,"771":1,"776":1,"777":8,"806":2,"807":23,"819":1,"820":1,"839":2,"866":4,"895":2,"924":1,"927":2}}],["tm=trim",{"2":{"771":1}}],["tm",{"2":{"762":1,"764":1,"771":1}}],["tpl",{"2":{"646":1,"647":2}}],["tuning",{"2":{"512":2,"521":1,"523":3}}],["tuiprompt",{"2":{"489":4,"490":1}}],["tuichatoptions",{"2":{"489":2}}],["tuichat",{"0":{"489":1},"2":{"489":1,"490":3}}],["tui",{"0":{"487":1},"1":{"488":1,"489":1,"490":1},"2":{"489":3,"490":2,"792":1}}],["turns",{"2":{"482":1}}],["turborepo",{"2":{"572":1,"642":1,"845":3,"849":1}}],["turbopackreact",{"2":{"344":1}}],["turbopack",{"2":{"308":1,"343":2,"923":1}}],["turbo",{"2":{"142":1,"849":1}}],["t>",{"2":{"258":2,"259":2,"260":2,"261":2,"262":5,"263":1,"268":1,"777":3}}],["tbase",{"2":{"248":4}}],["t4",{"2":{"244":1}}],["t3",{"2":{"244":1}}],["t2",{"2":{"244":1}}],["t1",{"2":{"244":1}}],["tts",{"2":{"522":1}}],["ttl",{"2":{"243":2}}],["ttft",{"2":{"118":1,"353":1}}],["ttfb",{"2":{"57":1,"59":1,"64":1,"86":1,"87":1}}],["twmerge",{"2":{"927":2}}],["tweenconfig",{"2":{"692":2}}],["tweenengine",{"2":{"677":1,"680":1,"686":4}}],["tween",{"0":{"686":1},"2":{"672":1,"675":1,"676":2,"677":1,"679":1,"680":1,"686":5,"692":2,"693":1}}],["two",{"2":{"223":2}}],["twitter",{"2":{"79":1,"511":2,"790":1,"792":2}}],["tc39",{"2":{"203":1}}],["tcp",{"2":{"115":2,"117":1,"125":1,"126":1}}],["teek",{"2":{"904":2}}],["temperature",{"2":{"866":1,"867":1}}],["template>",{"2":{"924":2}}],["template",{"2":{"881":3,"888":1,"925":1,"934":1}}],["templateliteral",{"2":{"655":1}}],["templates",{"2":{"274":1}}],["telemetryoptions",{"2":{"867":1}}],["telemetry",{"2":{"848":1,"867":1}}],["tern",{"2":{"734":1}}],["tessellation",{"2":{"734":1}}],["testhelper",{"2":{"706":1}}],["testfunc",{"2":{"661":1}}],["testing",{"2":{"570":1,"575":1,"578":1,"881":4,"890":2}}],["test`",{"2":{"451":1}}],["testmatch",{"2":{"222":1}}],["testenvironment",{"2":{"222":1}}],["test",{"0":{"890":1},"2":{"203":2,"223":3,"224":4,"269":1,"274":3,"451":1,"572":1,"573":1,"581":1,"583":1,"595":1,"649":1,"652":2,"661":1,"667":2,"677":4,"697":1,"706":1,"723":1,"734":1,"752":1,"762":1,"792":1,"871":1,"880":1,"881":26,"883":2,"884":1,"890":3,"896":2}}],["tests",{"2":{"203":4,"222":1,"647":2,"677":2,"792":1,"880":1,"881":3}}],["techstack",{"2":{"895":1}}],["tech",{"0":{"558":1},"2":{"553":1,"558":1,"903":1}}],["technical",{"2":{"363":1}}],["teammates",{"2":{"486":1}}],["team",{"2":{"437":1}}],["tensorrt",{"2":{"353":1}}],["text┌─────────────────────────────────────────────────────────────────────────┐",{"2":{"799":1,"800":1,"801":1}}],["text┌─────────────────────────────────────────────────────────────────────────────┐",{"2":{"790":1}}],["textmain",{"2":{"796":1}}],["textmodules",{"2":{"764":1}}],["textdocumentdata",{"2":{"777":1}}],["textdecoder",{"2":{"166":3,"168":2}}],["textproperty",{"2":{"762":1}}],["textpathconfig>",{"2":{"693":1}}],["textpath",{"2":{"677":1,"679":1,"680":1,"693":1}}],["textsuperpowers",{"2":{"881":1}}],["textselector",{"2":{"770":1}}],["textselectorproperty",{"2":{"762":1}}],["textselectorpropertydecorator",{"2":{"762":1}}],["textscheduler",{"2":{"712":1}}],["textinterface",{"2":{"762":1,"769":1}}],["textindex",{"2":{"679":1}}],["textelement",{"2":{"762":1}}],["textecharts",{"2":{"708":1}}],["text入口文件",{"2":{"736":1}}],["texture",{"2":{"734":1,"737":2,"748":2,"749":5}}],["textureloader",{"2":{"734":1}}],["textureutils",{"2":{"734":1}}],["texturesample",{"2":{"741":1}}],["textures",{"2":{"733":1,"734":4,"748":1}}],["textuse",{"2":{"711":1}}],["textvisual",{"2":{"715":1}}],["textconfig>",{"2":{"693":1}}],["text输入",{"2":{"655":1}}],["text用户交互",{"2":{"654":1}}],["text+=====================================================================+",{"2":{"880":1}}],["text+=====================================================================================+",{"2":{"761":1}}],["text+===============================================================================+",{"2":{"733":1}}],["text+===========================================================================+",{"2":{"646":1,"705":1,"848":1}}],["text+=======================================================================+",{"2":{"676":1,"682":1,"683":1,"684":1,"685":1,"686":1}}],["text+===========================================================+",{"2":{"656":1}}],["text+",{"2":{"652":1,"653":1,"713":1,"714":1,"739":1,"740":1,"741":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"856":1,"857":1,"858":1,"859":1,"886":1,"887":1,"888":1,"889":1,"890":1}}],["textanimatorproperty",{"2":{"762":1}}],["textanimatordataproperty",{"2":{"762":1}}],["textamis",{"2":{"649":1}}],["textarea",{"2":{"28":1}}],["text✅",{"2":{"74":1}}],["text",{"0":{"856":1},"2":{"27":7,"28":10,"117":1,"121":1,"159":1,"161":3,"164":1,"169":1,"175":1,"177":1,"458":4,"483":2,"488":3,"522":1,"650":1,"668":1,"677":1,"679":1,"680":2,"693":1,"705":1,"709":1,"724":1,"737":1,"762":2,"765":1,"797":1,"799":1,"806":3,"820":1,"832":2,"833":2,"839":2,"843":1,"848":3,"850":4,"853":1,"856":2,"859":1,"868":1,"883":1,"884":1,"899":1,"925":5,"926":1,"927":4}}],["trends",{"2":{"470":1}}],["treeview",{"2":{"706":1}}],["treeseries",{"2":{"706":1}}],["treemapview",{"2":{"706":1}}],["treemapseries",{"2":{"706":1}}],["treemap",{"2":{"706":2}}],["tree",{"2":{"307":1,"308":1,"311":1,"316":1,"318":1,"641":1,"642":1,"645":1,"653":1,"672":1,"673":1,"701":1,"706":3,"729":1,"730":2,"758":1,"792":1,"925":1,"926":1}}],["trpc",{"2":{"342":6}}],["traverseancestors",{"2":{"748":1}}],["traversevisible",{"2":{"748":1}}],["traverse",{"2":{"740":1,"748":1}}],["transition",{"2":{"924":1,"925":1,"927":1}}],["transitions",{"2":{"896":1}}],["transcriptionmodelv4",{"2":{"866":1}}],["transcriptionmodel",{"2":{"866":1}}],["transcription",{"2":{"848":1,"857":1}}],["transcription|",{"2":{"848":1}}],["transparent",{"2":{"739":1,"742":1,"748":1,"927":1}}],["transpiler",{"2":{"734":1}}],["transmission",{"2":{"734":1,"742":1}}],["transformparams",{"2":{"861":1}}],["transformproperty",{"2":{"762":1}}],["transformstream",{"2":{"850":1,"851":1}}],["transforminterface",{"2":{"762":1}}],["transformation",{"2":{"761":1,"762":1,"764":1}}],["transformeffect",{"2":{"762":1}}],["transformelement",{"2":{"761":1,"762":1}}],["transformer",{"2":{"262":3,"677":1,"679":1,"680":2,"693":1}}],["transform",{"2":{"222":1,"275":1,"677":1,"679":1,"682":2,"706":1,"762":3,"790":1}}],["transfer",{"2":{"117":1,"159":1}}],["trae",{"2":{"564":1,"565":2}}],["trackball",{"2":{"734":1}}],["tracks",{"2":{"734":1,"743":1}}],["tracker",{"2":{"662":1}}],["tracing",{"2":{"549":1,"550":2,"881":1}}],["trace",{"2":{"324":3}}],["trade",{"2":{"394":1}}],["training",{"2":{"353":1,"551":1}}],["triggering",{"2":{"881":1}}],["triggers",{"2":{"586":2}}],["triangles",{"2":{"748":1}}],["triangle",{"2":{"230":5,"734":1}}],["trimmodifier",{"2":{"762":1,"764":1,"771":1}}],["trim",{"2":{"28":2,"194":1,"489":1,"743":1,"757":1}}],["try",{"2":{"149":1,"153":1,"168":1,"246":2,"313":1,"330":1}}],["true",{"2":{"100":2,"106":1,"149":1,"153":1,"163":1,"166":4,"168":3,"173":2,"175":2,"203":40,"204":28,"208":1,"212":3,"213":1,"229":1,"231":1,"246":3,"260":1,"266":1,"288":7,"301":1,"322":4,"490":1,"594":5,"685":1,"696":1,"767":1,"768":1,"773":2,"781":2,"800":6,"807":6,"839":1,"927":1}}],["thumbnail",{"2":{"706":1}}],["three",{"0":{"741":1},"2":{"728":2,"732":1,"733":1,"734":10,"736":11,"741":2,"745":1,"749":1,"751":2,"753":9}}],["threshold",{"2":{"677":1,"679":1}}],["throttle",{"2":{"706":1}}],["throws",{"2":{"839":1}}],["throwonerror",{"2":{"106":1}}],["throw",{"2":{"99":1,"149":1,"153":1,"169":3,"171":2,"172":1,"173":1,"175":3,"232":1,"238":1,"281":5,"330":1,"820":3}}],["thought",{"2":{"427":1,"432":1}}],["thickness",{"2":{"742":1}}],["think",{"2":{"414":1}}],["thinking",{"2":{"172":1,"366":4,"488":3}}],["this",{"2":{"152":1,"175":2,"179":1,"184":1,"185":3,"203":3,"248":1,"261":4,"267":7,"269":5,"281":24,"289":8,"302":6,"306":1,"311":2,"315":4,"324":1,"685":5,"692":21,"748":6,"806":1,"887":1}}],["themeriverview",{"2":{"706":1}}],["themeriverseries",{"2":{"706":1}}],["themeriver",{"2":{"706":1}}],["themeprops",{"2":{"661":1}}],["themeprovider",{"2":{"79":2,"274":1}}],["themeable",{"2":{"646":1,"647":1}}],["themes",{"2":{"646":1,"647":2}}],["themeutils",{"2":{"312":1}}],["theme=",{"2":{"289":1}}],["theme",{"2":{"274":1,"646":2,"647":2,"662":1,"705":1,"706":2,"904":3,"925":1}}],["the",{"2":{"99":1,"223":2,"482":1,"550":1,"564":1,"890":2,"909":2,"928":1}}],["then",{"2":{"97":1,"103":1,"288":1,"668":1}}],["tiktok",{"2":{"373":1}}],["timecompleted",{"2":{"776":1}}],["timer",{"2":{"734":1,"801":1}}],["timeline",{"2":{"701":1,"706":2}}],["timediff",{"2":{"692":1}}],["timescale",{"2":{"743":2}}],["times",{"2":{"366":1,"458":2,"554":1,"743":1,"806":1,"902":1}}],["timestamped",{"2":{"248":3}}],["timestampeduser",{"2":{"240":1}}],["timestamp",{"2":{"28":1}}],["timeoutseconds",{"2":{"806":1}}],["timeout",{"2":{"137":1,"152":2,"243":2,"262":1,"806":1,"807":2}}],["time",{"2":{"28":1,"65":1,"692":1,"706":3,"741":2,"743":2,"748":1,"757":1,"769":2}}],["title",{"2":{"26":1,"27":2,"81":1,"82":1,"86":3,"108":1,"234":1,"640":1,"668":1,"706":1,"724":1,"777":1,"807":1,"895":3}}],["ta",{"2":{"946":1}}],["talkie",{"2":{"512":1}}],["taste",{"0":{"460":1},"2":{"359":1,"458":2}}],["task2",{"2":{"712":1}}],["task1",{"2":{"712":1}}],["taskscontroller",{"2":{"178":1,"179":1}}],["taskstreamclient",{"2":{"175":1}}],["tasks",{"2":{"149":1,"152":1,"153":1,"175":1,"178":2,"179":2,"419":1,"762":1,"887":1,"895":1}}],["taskresponse",{"2":{"149":2,"153":2}}],["taskid",{"2":{"142":1,"143":1,"149":3,"152":3,"153":3,"175":3,"178":4,"179":4}}],["task",{"2":{"138":4,"139":3,"429":1,"470":3,"472":2,"706":2,"709":1,"712":3,"884":4}}],["tail",{"0":{"353":1},"2":{"646":1,"712":2}}],["tailwindcss",{"2":{"932":1,"934":5}}],["tailwind",{"0":{"926":1,"927":1},"2":{"23":1,"25":1,"93":1,"340":4,"561":1,"562":1,"642":2,"647":1,"925":6,"926":4,"927":8,"928":15,"929":3,"930":2,"931":2,"932":1,"933":5,"934":4}}],["tagconfig>",{"2":{"693":1}}],["tag",{"2":{"230":1,"331":1,"677":1,"679":1,"693":1}}],["takeuntil",{"2":{"179":3}}],["tabs",{"2":{"646":1,"792":1,"799":1,"806":1}}],["tab",{"2":{"97":1,"112":1,"564":2,"565":1}}],["tablestore2",{"2":{"647":1,"650":3}}],["tablestore",{"2":{"646":1,"647":1,"650":3,"653":1}}],["table2",{"2":{"646":1,"647":2}}],["table",{"2":{"28":1,"256":1,"645":2,"646":2,"647":3,"792":1,"806":1}}],["tanstack",{"0":{"102":1,"113":1},"1":{"103":1,"104":1,"105":1,"106":1,"107":1,"108":1},"2":{"95":1,"103":5,"104":1,"106":3,"107":3,"108":2,"109":1,"110":3,"111":1,"113":2,"342":1}}],["targetnode",{"2":{"684":1}}],["target",{"2":{"28":1,"100":1,"203":1,"204":3,"322":1,"324":2,"654":1,"677":1,"692":1,"740":1,"748":3,"792":2,"799":2,"806":2}}],["tsl",{"0":{"741":1,"746":1},"2":{"729":1,"730":1,"732":1,"733":1,"734":17,"736":10,"737":2,"741":4,"742":6,"746":1,"748":1}}],["tsbuildinfofile",{"2":{"203":1}}],["tsbuildinfo",{"2":{"203":2,"208":1}}],["tsc",{"2":{"202":3,"216":4}}],["tsconfig",{"0":{"202":1,"203":1,"212":1,"213":1,"214":1,"215":1},"1":{"203":1,"204":1},"2":{"202":2,"203":3,"204":1,"205":1,"209":2,"210":1,"211":4,"213":1,"214":1,"215":1,"216":6,"226":1,"322":1,"677":2,"706":1,"792":1,"823":2}}],["tsximport",{"2":{"27":1}}],["tsx",{"2":{"27":3,"28":2,"74":2,"77":4,"78":5,"79":9,"82":1,"86":1,"90":1,"106":1,"202":1,"203":5,"222":1,"274":16,"280":5,"288":2,"290":8,"643":2,"646":1,"647":18,"649":4,"925":1,"927":1}}],["ts",{"0":{"321":2,"322":1,"777":1,"800":2,"801":1,"832":1,"833":1},"2":{"26":1,"78":1,"79":2,"81":1,"83":1,"84":2,"99":2,"106":1,"202":1,"203":17,"204":1,"208":1,"216":1,"221":1,"222":8,"223":2,"274":53,"275":25,"280":60,"281":8,"289":2,"290":12,"317":3,"318":2,"319":4,"320":1,"321":3,"323":1,"324":4,"325":2,"481":1,"576":2,"583":1,"643":1,"646":11,"647":51,"677":64,"679":63,"692":7,"699":1,"706":61,"708":10,"755":1,"758":2,"762":2,"776":1,"777":1,"790":8,"791":9,"792":79,"796":6,"799":8,"800":3,"801":1,"806":1,"823":8,"824":3,"827":4,"828":1,"830":3,"850":6,"853":1,"881":1,"925":1,"927":3,"928":3}}],["tojson",{"2":{"743":1,"748":1}}],["toimage",{"2":{"692":1}}],["tocanvas",{"2":{"692":1}}],["toblob",{"2":{"692":1}}],["tobe",{"2":{"223":4}}],["todataurl",{"2":{"692":1}}],["todomain",{"2":{"281":1}}],["todo",{"2":{"108":4,"414":1,"881":2,"892":1}}],["todos",{"2":{"104":1,"108":6}}],["touch",{"2":{"684":2}}],["touched",{"2":{"663":1}}],["touppercase",{"2":{"231":1}}],["toast",{"2":{"654":2}}],["toarraynodistribute",{"2":{"234":3}}],["toarray",{"2":{"234":5}}],["together",{"2":{"523":2}}],["toorm",{"2":{"281":1}}],["toolchoice",{"2":{"866":2,"867":2}}],["toolcallid",{"2":{"866":1}}],["toolcalls",{"2":{"856":2}}],["toolcallpart",{"2":{"854":1}}],["tooltimeoutms",{"2":{"856":1}}],["tooltipcomponent",{"2":{"725":2}}],["tooltip",{"2":{"701":1,"706":1,"709":1,"724":1}}],["toolloopagentsettings",{"2":{"859":1}}],["toolloopagent",{"0":{"859":1},"2":{"859":3}}],["toolloop",{"2":{"848":1}}],["toolbar",{"2":{"734":1}}],["toolbox",{"2":{"706":1}}],["tools>",{"2":{"867":4}}],["tools>>>",{"2":{"867":2}}],["toolset",{"2":{"854":2,"866":1,"867":2}}],["tools",{"0":{"343":1},"2":{"408":2,"455":1,"456":2,"482":1,"553":1,"591":2,"647":1,"848":2,"857":1,"859":1,"866":1,"867":6,"868":5,"881":4}}],["toolkit",{"2":{"341":1}}],["tool",{"2":{"113":1,"854":1,"856":2,"859":3,"866":1,"868":1}}],["totaltimeoutms",{"2":{"856":1}}],["totalframes",{"2":{"776":1}}],["total`",{"2":{"576":1}}],["totalamount",{"2":{"281":4}}],["total",{"2":{"281":2}}],["tostring",{"2":{"231":1,"262":1,"265":1,"267":3}}],["tofixed",{"2":{"231":1,"270":1,"281":1}}],["to",{"2":{"97":2,"119":1,"289":1,"301":1,"397":1,"448":1,"518":1,"662":2,"686":1,"867":1,"880":1,"881":2}}],["tolocalestring",{"2":{"28":1}}],["tolocaledatestring",{"2":{"27":2}}],["tokens",{"2":{"439":1,"523":5,"921":1,"925":2,"928":1}}],["token123",{"2":{"166":1,"169":1,"819":1}}],["token=你的accesstoken",{"2":{"26":1}}],["token",{"0":{"929":1},"2":{"26":2,"136":1,"160":2,"172":1,"342":2,"439":1,"441":1,"443":1,"511":1,"512":2,"519":2,"522":5,"523":2,"549":1,"550":2,"646":1,"647":2,"655":3,"881":2,"928":4,"929":1,"930":1}}],["top",{"2":{"7":1,"244":1,"683":3,"692":2,"811":1}}],["tdd",{"0":{"890":1},"2":{"9":2,"542":2,"881":1,"890":1,"892":1,"893":1}}],["t",{"2":{"7":1,"28":1,"234":11,"244":3,"246":2,"247":2,"248":2,"254":13,"255":3,"256":7,"258":7,"259":6,"260":1,"261":6,"262":5,"263":15,"265":2,"266":3,"267":2,"268":6,"269":3,"270":3,"271":1,"482":1,"667":1,"692":2,"776":1,"777":3}}],["当初对身边人有点苛刻",{"2":{"959":1}}],["当初那套粗放模式失效了",{"2":{"387":1}}],["当从居家办公切换到办公室工作环境中",{"2":{"956":1}}],["当系统运转正常的时候",{"2":{"908":1}}],["当系统运转正常时",{"2":{"382":1}}],["当疫情给世界按下暂停键",{"2":{"906":1}}],["当怨气占据大脑",{"2":{"612":1}}],["当看到身边不读书的人纷纷买车买房时",{"2":{"612":1}}],["当自诩为",{"2":{"612":1}}],["当主",{"2":{"591":1}}],["当任务的复杂度上升到需要",{"2":{"589":1}}],["当任务执行失败时",{"2":{"430":1}}],["当对话中出现相关内容时自动匹配",{"2":{"586":1}}],["当检测到以下关键词时自动触发",{"2":{"586":1}}],["当某个规范需要独立编辑",{"2":{"577":1}}],["当项目从个人项目成长为团队协作时",{"2":{"575":1}}],["当项目需要被其他项目引用时",{"2":{"208":1}}],["当满足特定条件时自动执行",{"2":{"570":1}}],["当写代码变得不再昂贵",{"2":{"539":1}}],["当编码平台的",{"2":{"883":1}}],["当编码成本趋于零时",{"2":{"525":1}}],["当编程的门槛降低到",{"2":{"530":1}}],["当每个人都有一个能写代码的",{"2":{"530":1}}],["当技术壁垒被削平",{"2":{"529":1}}],["当工程师拥有了像",{"2":{"525":1}}],["当代码生成变得廉价",{"2":{"555":1}}],["当代码未通过验证时",{"2":{"9":1}}],["当代家长在辅导孩子尤其是数学作业时",{"2":{"492":1}}],["当启动一个",{"2":{"486":1}}],["当嘉宾抛出",{"2":{"457":1}}],["当需要修改",{"2":{"931":1}}],["当需要进行",{"2":{"451":1}}],["当需要独立执行",{"2":{"438":1}}],["当需要以下能力时",{"2":{"437":1}}],["当需要携带较大",{"2":{"160":1}}],["当面对较复杂的工程任务时",{"2":{"415":1}}],["当生存不再受制于人",{"2":{"379":1}}],["当一个赛道人人都争先恐后时",{"2":{"620":1}}],["当一个模块开始出现",{"2":{"329":1}}],["当一个模块承担了太多不相关的业务逻辑时",{"2":{"327":1}}],["当一家企业赚的钱大于花的钱时",{"2":{"379":1}}],["当所有人都沉浸在某种热门技术或框架中时",{"2":{"360":1}}],["当推理成本进一步降低",{"2":{"355":1}}],["当年切入低利润率的云市场一样",{"2":{"354":1}}],["当你让",{"2":{"934":1}}],["当你下次在产品或代码中遇到棘手问题时",{"2":{"389":1}}],["当你下次在选型时犹豫不决",{"2":{"66":1}}],["当你坚守这种透明和真实",{"2":{"380":1}}],["当你开始思考这些问题时",{"2":{"337":1}}],["当你开始熟练地运用",{"2":{"303":1}}],["当你在",{"2":{"319":1}}],["当业务需要新增一种数据类型时",{"2":{"255":1}}],["当交叉类型中存在同名但类型不同的属性时",{"2":{"237":1}}],["当条件类型作用于裸类型参数",{"2":{"234":1}}],["当内置收窄不够用时",{"2":{"231":1}}],["当客户端断开连接时",{"2":{"179":1}}],["当用户提供诗歌形式和主题时",{"2":{"504":1}}],["当用户提供诗歌形式和主题后",{"2":{"504":1}}],["当用户提交一个宏观任务",{"2":{"429":1}}],["当用户上传含题目的图片时",{"2":{"494":1}}],["当用户上传",{"2":{"448":1}}],["当用户说",{"2":{"448":1}}],["当用户在第三方支付平台",{"2":{"132":1}}],["当用户进行点赞或修改名称等操作时",{"2":{"100":1}}],["当并发量攀升至十万甚至百万级时",{"2":{"129":1}}],["当网络波动导致连接中断时",{"2":{"122":1}}],["当作工具去验证假设",{"2":{"360":1}}],["当作",{"2":{"112":1}}],["当开发者们还在争论",{"2":{"569":1}}],["当开发者尝试在浏览器端使用",{"2":{"305":1}}],["当开发者变更了某个项目",{"2":{"110":1}}],["当开发者需要",{"2":{"74":1}}],["当执行一个复杂变更时",{"2":{"108":1}}],["当没有任何组件订阅这个",{"2":{"104":1}}],["当组件挂载时",{"2":{"104":1}}],["当服务端任务未完成时",{"2":{"146":1}}],["当服务端发生指定事件时",{"2":{"131":1}}],["当服务端处理一个页面请求时",{"2":{"52":1}}],["当服务器处理动态部分时",{"2":{"88":1}}],["当数据查询完成",{"2":{"86":1}}],["当前目标",{"2":{"964":1}}],["当前仅支持",{"2":{"895":1}}],["当前值",{"2":{"776":1}}],["当前值的具体类型",{"2":{"230":1}}],["当前帧",{"2":{"765":1}}],["当前表单值",{"2":{"663":1}}],["当前层数据",{"2":{"663":1}}],["当前节点的路径",{"2":{"663":1}}],["当前节点的数据上下文",{"2":{"661":1}}],["当前节点的",{"2":{"661":1}}],["当前节点路径",{"2":{"661":1}}],["当前版本",{"2":{"643":1}}],["当前最大的工程化障碍",{"2":{"536":1}}],["当前最核心的矛盾在于",{"2":{"534":1}}],["当前效率",{"2":{"465":1}}],["当前边界",{"2":{"462":1}}],["当前",{"2":{"434":1,"477":1}}],["当前方案是否最优",{"2":{"414":1}}],["当前的",{"2":{"355":1}}],["当前未用",{"2":{"184":3}}],["当前明确需要",{"2":{"183":1}}],["当前重试次数计数器",{"2":{"175":1}}],["当前正在组装的事件对象",{"2":{"168":1}}],["当前事件的标识",{"2":{"163":1}}],["当前共",{"2":{"82":1}}],["当前生产级实现仍以",{"2":{"53":1}}],["当",{"0":{"357":1},"2":{"12":1,"81":1,"137":1,"231":1,"315":1,"357":1,"376":1,"427":1,"443":1,"457":1,"460":1,"489":1,"509":1,"527":1,"537":1,"553":1,"555":1,"590":2,"628":2,"712":1,"768":1,"774":1,"902":2,"934":1}}],["当我们谈论",{"2":{"553":1}}],["当我们输入",{"2":{"495":1}}],["当我们用",{"2":{"440":1}}],["当我们成为社区中那个",{"2":{"377":1}}],["当我们试图构建智能化的知识管理工具",{"2":{"377":1}}],["当我们遇到一个让自己惊叹的产品",{"2":{"371":1}}],["当我们面对一个新项目时",{"2":{"597":1}}],["当我们面对",{"2":{"359":1}}],["当我们调用泛型函数时",{"2":{"254":1}}],["当我们定义一个泛型函数",{"2":{"254":1}}],["当我们处理联合类型时",{"2":{"232":1}}],["当我们说一个变量的类型是",{"2":{"227":1}}],["当我们回望",{"2":{"12":1}}],["当我们在",{"2":{"11":1,"326":1}}],["当底层展示组件需要向上级反馈用户行为时",{"2":{"7":1}}],["当然",{"2":{"3":1,"140":1,"437":1,"903":1,"910":1,"917":1,"936":1,"938":2,"945":2,"948":1,"950":1}}],["时段",{"2":{"963":1}}],["时不时会在虚拟社群中一起侃大山",{"2":{"957":1}}],["时最容易犯的错",{"2":{"933":1}}],["时光荏苒",{"2":{"906":1}}],["时强制注入的技能",{"2":{"887":1}}],["时注入技能引导",{"2":{"884":1}}],["时执行命令",{"2":{"884":1}}],["时自动注入技能系统",{"2":{"876":1}}],["时的",{"2":{"706":1}}],["时的自动刷新机制",{"2":{"97":1}}],["时钟",{"2":{"602":1}}],["时刻待命",{"2":{"584":1}}],["时刻影响着产品的发展边界",{"2":{"400":1}}],["时事热点与舆情追踪",{"2":{"511":1}}],["时事感知最新",{"2":{"511":1}}],["时存在天然局限",{"2":{"411":1}}],["时间四象限",{"2":{"952":1}}],["时间变得明显不够用",{"2":{"950":1}}],["时间是我们在这个世界上最优质和公平的资产",{"2":{"950":1}}],["时间不够用是老生长谈的话题",{"2":{"950":1}}],["时间不够用问题",{"0":{"950":1}}],["时间不够又只能继续写烂代码",{"2":{"386":1}}],["时间管理",{"2":{"936":1}}],["时间管理和混合工作制几个方面的实践与理解",{"2":{"906":1}}],["时间测量",{"2":{"734":1}}],["时间处理",{"2":{"706":1}}],["时间序列切换",{"2":{"706":1}}],["时间窗口",{"2":{"700":1}}],["时间压缩",{"2":{"557":1,"902":1}}],["时间",{"2":{"518":1,"706":1,"743":1,"776":1}}],["时间线",{"2":{"515":1}}],["时间线和思维导图",{"2":{"515":1}}],["时间还是隐私数据",{"2":{"396":1}}],["时间轴组件",{"2":{"706":1}}],["时间轴",{"2":{"388":1}}],["时间的迷雾",{"0":{"388":1}}],["时才被解析和加载",{"2":{"304":1}}],["时编译器会报类型错误",{"2":{"232":1}}],["时重复更新状态",{"2":{"173":1}}],["时流已结束",{"2":{"168":1}}],["时触发",{"2":{"163":1,"448":2,"884":1}}],["时会受到限制",{"2":{"160":1}}],["时代眼泪",{"2":{"928":1}}],["时代全栈工程师的",{"2":{"902":1}}],["时代趋势不可逆",{"2":{"613":1}}],["时代工作范式的实验室",{"2":{"525":1}}],["时代也就包含了新的特征",{"2":{"367":1}}],["时代浪潮",{"2":{"357":1}}],["时代开发者",{"2":{"335":1}}],["时代",{"0":{"118":1},"2":{"180":1,"317":1,"358":1,"360":1,"376":1,"461":1,"466":1,"499":1,"509":1,"541":1,"555":1}}],["时代的全栈新公式",{"0":{"554":1},"1":{"555":1,"556":1,"557":1}}],["时代的机会在哪里",{"0":{"465":1}}],["时代的",{"2":{"463":1,"466":1,"551":1}}],["时代的数字化工作范式",{"2":{"419":1}}],["时代的稀缺资源不再是",{"2":{"367":1}}],["时代的复合型人才",{"2":{"361":1}}],["时代的维基百科",{"2":{"355":1}}],["时代的大模型洪流中",{"2":{"144":1}}],["时代的主流选择",{"2":{"143":1}}],["时代的对话式应用",{"2":{"114":1}}],["时代的到来",{"2":{"12":1}}],["时数据瞬间出现",{"2":{"112":1}}],["时组件的",{"2":{"59":1}}],["时而空白",{"2":{"59":1}}],["时而完整",{"2":{"59":1}}],["时",{"2":{"6":1,"11":1,"62":1,"74":1,"124":1,"147":2,"184":1,"196":1,"227":1,"231":1,"254":2,"282":1,"305":1,"315":1,"342":1,"360":1,"366":1,"371":1,"429":1,"433":1,"451":1,"486":1,"495":1,"530":1,"547":1,"553":1,"582":1,"589":1,"768":1,"927":1,"934":1}}],["应保持扁平化",{"2":{"933":1}}],["应对",{"2":{"799":1,"800":1}}],["应对多阶段人生挑战的最核心",{"2":{"605":1}}],["应",{"2":{"451":1}}],["应当像是一组排列整齐",{"2":{"337":1}}],["应当被彻底淘汰",{"2":{"135":1}}],["应运而生",{"2":{"305":1}}],["应该花些精力来学习了解下计算机技术",{"2":{"947":1}}],["应该对每个输入行缓冲调用的函数",{"2":{"840":1}}],["应该对每个输入字节块调用的函数",{"2":{"840":1}}],["应该自己判断时机",{"2":{"588":1}}],["应该写的核心内容",{"2":{"572":1}}],["应该写什么",{"0":{"572":1}}],["应该写成",{"2":{"438":1}}],["应该是描述改动受影响的模块名",{"2":{"451":1}}],["应该只约束确实需要的特性",{"2":{"263":1}}],["应该已被穷尽所有可能",{"2":{"232":1}}],["应该毫不犹豫选择",{"0":{"112":1,"113":1}}],["应通过",{"2":{"197":1}}],["应通过局部",{"2":{"6":1}}],["应剃除",{"2":{"185":1,"191":1}}],["应优先排除",{"2":{"181":1}}],["应优先引导",{"2":{"9":1}}],["应立即抛出",{"2":{"171":1}}],["应用在减肥这件小事上",{"2":{"963":1}}],["应用产品都在拥抱",{"0":{"926":1}}],["应用与变革的路才刚刚开始",{"2":{"919":1}}],["应用到工作与生活中越好",{"2":{"914":1}}],["应用了多少呢",{"2":{"912":1}}],["应用开发工具包",{"2":{"842":1}}],["应用开发框架之一",{"2":{"344":1}}],["应用控制",{"2":{"785":1,"792":1}}],["应用自动化",{"2":{"784":1}}],["应用和本地工具转换为确定性命令行接口的",{"2":{"784":1}}],["应用全局",{"2":{"715":1}}],["应用级状态",{"2":{"647":1}}],["应用部署",{"2":{"583":1}}],["应用部署服务",{"2":{"345":1}}],["应用生成",{"2":{"562":1}}],["应用广场",{"2":{"561":1}}],["应用或微信小程序",{"2":{"561":1}}],["应用架构缺乏标准化",{"2":{"842":1}}],["应用架构",{"2":{"525":1}}],["应用修改",{"2":{"484":1}}],["应用发起调用",{"2":{"439":1}}],["应用中需适配场景选择存储检索方式",{"2":{"410":1}}],["应用中",{"2":{"367":1}}],["应用程序的静态模块打包工具",{"2":{"343":1}}],["应用程序提供支持",{"2":{"343":1}}],["应用复杂度的提升",{"2":{"298":1}}],["应用服务",{"2":{"278":1,"280":1,"282":2}}],["应用主模块",{"2":{"275":1}}],["应用入口",{"2":{"274":1,"275":1}}],["应用配置",{"2":{"274":1}}],["应用配置和入口",{"2":{"274":1}}],["应用常量",{"2":{"274":1}}],["应用根组件",{"2":{"274":1}}],["应用项目",{"2":{"216":1}}],["应用项目也进入了更深层次的开发迭代阶段",{"2":{"8":1}}],["应用这一原则的核心步骤可概括为",{"2":{"201":1}}],["应用奥卡姆剃刀的三个关键注意事项",{"0":{"200":1}}],["应用层",{"2":{"189":1,"190":1,"274":1,"277":1,"279":2,"280":2,"732":1,"733":2}}],["应用层协议",{"2":{"159":1}}],["应用类型",{"2":{"136":1}}],["应用的体验与传统软件截然不同",{"2":{"543":1}}],["应用的必经之路",{"2":{"456":1}}],["应用的表单中",{"2":{"414":1}}],["应用的输出处理后",{"2":{"414":1}}],["应用的",{"2":{"344":1}}],["应用的方式",{"2":{"339":1}}],["应用的基础",{"2":{"338":1}}],["应用的性能优化",{"2":{"305":1}}],["应用的交互模式决定了通信协议的选型",{"2":{"136":1}}],["应用的诞生",{"2":{"1":1}}],["应用场景示例",{"2":{"417":1}}],["应用场景",{"0":{"118":1,"128":1,"404":1},"1":{"405":1,"406":1,"407":1},"2":{"256":1}}],["应用向",{"2":{"115":1}}],["应用往往涉及大量的中间态保存",{"2":{"113":1}}],["应用还需要解决",{"2":{"71":1}}],["应用",{"0":{"487":1},"1":{"488":1,"489":1,"490":1},"2":{"16":1,"92":1,"111":1,"145":1,"226":1,"344":1,"548":1,"561":1,"562":2,"650":1,"715":1,"816":1,"924":1}}],["若不能提高基础概率",{"2":{"917":1}}],["若洞察不了关联",{"2":{"908":1}}],["若读书脱离获取信息的目的",{"2":{"613":1}}],["若因此怨天尤人",{"2":{"612":1}}],["若无",{"2":{"581":1}}],["若暂无订阅",{"2":{"559":1}}],["若你心中有更美的",{"2":{"505":1}}],["若采用单智能体架构",{"2":{"468":1}}],["若采用传统同步",{"2":{"136":1}}],["若任务属于特定专业领域",{"2":{"443":1}}],["若想将这种惊叹内化为自己的",{"2":{"371":1}}],["若滥用会导致",{"2":{"200":1}}],["若数据存在",{"2":{"199":1}}],["若参数正常",{"2":{"199":1}}],["若项目无此需求",{"2":{"191":1}}],["若需进一步了解详细的规划机制",{"2":{"409":1}}],["若需求明确",{"2":{"200":1}}],["若需类型校验",{"2":{"188":1}}],["若需校验",{"2":{"187":1}}],["若需将博客扩展为电商网站",{"2":{"30":1}}],["若简单方案无法覆盖需求",{"2":{"181":1}}],["若业务涉及跨服务的事件通知",{"2":{"143":1}}],["若业务场景仅需服务端向客户端单向高频推送",{"2":{"143":1}}],["若业务需要客户端与服务端互发高频消息",{"2":{"143":1}}],["若强行使用",{"2":{"138":1}}],["若用户输入",{"2":{"489":1}}],["若用户",{"2":{"129":1}}],["若请求失败再回滚",{"2":{"103":1}}],["若有变化则触发",{"2":{"97":1}}],["若发现问题",{"2":{"9":1}}],["若状态仅在特定子树内部流转",{"2":{"6":1}}],["若多个兄弟组件需要共享同一状态",{"2":{"6":1}}],["ldraw",{"2":{"734":1}}],["l",{"2":{"686":2}}],["l5",{"2":{"645":1,"646":1,"647":2}}],["l4",{"2":{"645":1,"646":1,"647":1}}],["lpu",{"2":{"523":2}}],["l3",{"2":{"403":1,"459":3,"645":1,"646":1,"647":1}}],["l2",{"2":{"403":1,"459":3,"645":1,"646":1,"647":1}}],["l1",{"2":{"403":1,"459":3,"645":1,"646":1,"647":1}}],["llama",{"2":{"353":1,"519":1,"523":4}}],["llmops",{"2":{"551":1}}],["llm",{"0":{"628":1},"2":{"92":1,"142":1,"143":1,"180":1,"349":1,"353":3,"358":1,"367":1,"402":3,"408":2,"410":2,"411":1,"412":1,"424":1,"425":3,"427":1,"431":1,"441":2,"443":1,"493":1,"523":2,"534":1,"541":1,"550":2,"558":1,"567":1,"568":2,"843":1,"859":3,"863":2,"877":1,"901":1,"903":2,"906":1}}],["less",{"2":{"921":1,"928":2}}],["legend",{"2":{"701":1,"706":1,"709":1,"715":1}}],["legacy",{"2":{"333":2,"553":1,"666":1,"706":1,"734":1}}],["lexer",{"2":{"646":1,"647":2,"655":2}}],["leverage",{"0":{"462":1},"2":{"458":2}}],["level",{"0":{"459":1},"2":{"443":6,"654":1,"806":3,"807":1}}],["lead",{"2":{"415":1,"416":2,"470":4,"471":2,"472":2}}],["learn",{"2":{"414":1}}],["learning",{"0":{"346":1},"2":{"410":1}}],["lerna",{"2":{"335":1,"642":1,"845":1}}],["left",{"2":{"243":2}}],["letterprops",{"2":{"762":1}}],["letter",{"2":{"281":1}}],["let",{"2":{"149":1,"152":1,"166":1,"168":2,"175":1,"203":2,"229":1,"265":3,"301":1,"315":2,"330":1,"489":1}}],["length",{"2":{"82":1,"117":1,"149":1,"194":1,"263":3,"265":1,"270":1,"281":1,"762":2}}],["lot格式",{"2":{"762":1}}],["lot",{"2":{"761":1}}],["lottieplayer",{"2":{"777":1}}],["lottie",{"0":{"773":1},"2":{"755":5,"756":1,"760":2,"761":4,"762":3,"764":2,"765":1,"767":1,"773":1,"776":1,"777":1,"778":10,"780":1,"781":1}}],["lottie等",{"2":{"734":1}}],["lookat",{"2":{"740":1}}],["loopcomplete",{"2":{"777":1}}],["loopout",{"2":{"769":2}}],["loopin",{"2":{"757":1,"769":2}}],["loop",{"0":{"484":1},"2":{"429":1,"478":2,"491":1,"550":1,"676":1,"741":1,"743":1,"773":1,"776":1,"777":1,"781":1,"856":1,"859":2}}],["lod",{"2":{"734":1}}],["lodash",{"2":{"288":1,"306":1}}],["lovable",{"2":{"561":1,"562":2}}],["locator",{"2":{"860":1}}],["locationhref",{"2":{"762":1}}],["location",{"2":{"653":1,"662":1}}],["localtoworld",{"2":{"748":1}}],["localeoption",{"2":{"719":1}}],["localeprops",{"2":{"661":1}}],["localeable",{"2":{"646":1}}],["locale",{"2":{"646":1,"647":6,"649":1,"706":2,"719":1}}],["localhost",{"2":{"164":1,"288":2,"555":1,"902":1}}],["localstorage",{"2":{"30":1,"74":1,"274":1,"280":1}}],["local",{"0":{"596":1},"2":{"26":1,"28":1,"570":6,"571":1,"573":1,"596":3,"597":1,"806":2}}],["loc",{"2":{"526":1}}],["lock",{"2":{"392":1,"398":1,"823":1,"881":1}}],["loss",{"2":{"369":1}}],["low",{"2":{"365":2,"461":1,"556":1}}],["logentry",{"2":{"801":1}}],["logbuffer",{"2":{"801":1}}],["logs",{"2":{"801":2,"807":1}}],["logo等",{"2":{"881":1}}],["logo",{"2":{"706":1,"756":1,"782":1}}],["logic",{"2":{"558":1,"901":1}}],["login",{"2":{"288":6,"290":1,"327":2}}],["loginform",{"2":{"274":1}}],["logging",{"2":{"275":1,"280":1}}],["logger",{"2":{"274":1,"275":1,"280":1,"300":2,"311":6,"312":1,"792":1}}],["loglength",{"2":{"263":1}}],["log",{"2":{"149":3,"153":3,"163":3,"164":1,"166":1,"169":1,"231":2,"246":1,"259":1,"260":1,"262":1,"263":1,"269":1,"288":2,"289":2,"295":5,"300":3,"301":3,"302":1,"304":2,"305":2,"307":2,"311":3,"314":4,"315":4,"324":2,"325":1,"483":1,"484":1,"489":1,"571":1,"583":1,"706":2,"818":1,"881":1}}],["longpolling",{"2":{"153":1}}],["longtaskcontroller",{"2":{"152":1}}],["long",{"2":{"115":1,"145":1,"152":1,"153":1,"155":1,"410":1,"419":1,"522":1}}],["loadoptionalsetting",{"2":{"857":2}}],["loadapikey",{"2":{"857":2}}],["loadapikey|",{"2":{"848":1}}],["loadanimation",{"0":{"773":1},"2":{"756":1,"761":1,"767":1,"773":1,"777":1,"781":1}}],["loaded",{"2":{"777":1}}],["loaders",{"2":{"734":2}}],["loader",{"2":{"343":1,"734":1,"762":2,"924":2}}],["load",{"2":{"97":1,"806":1}}],["loadingmanager",{"2":{"734":1}}],["loadingeffectcreator",{"2":{"720":1}}],["loading",{"2":{"78":2,"80":1,"89":1,"90":1,"103":2,"229":2,"234":2,"663":1,"706":1,"881":1}}],["law",{"2":{"890":2}}],["launcher",{"2":{"792":1,"796":1}}],["lambert",{"2":{"730":1,"734":1}}],["large",{"2":{"712":1}}],["label",{"2":{"628":1,"636":1,"640":3,"668":2,"677":1,"679":1,"680":1,"693":1,"706":2}}],["latency",{"0":{"353":1}}],["latest",{"2":{"25":1}}],["layerelement",{"2":{"768":1}}],["layered",{"2":{"336":1,"675":1,"847":1}}],["layerinterface",{"2":{"762":1,"769":2}}],["layerconfig",{"2":{"692":1}}],["layer>",{"2":{"692":1,"693":1}}],["layers",{"2":{"686":4,"692":3,"734":1,"748":2,"765":1,"776":1}}],["layer",{"2":{"672":2,"675":1,"676":2,"677":2,"679":1,"680":5,"684":1,"692":7,"693":2,"696":5,"705":2,"733":3,"741":1,"761":5,"762":1,"769":1,"776":1,"847":5,"848":4,"879":4,"880":4}}],["layoutinfo",{"2":{"714":1}}],["layoutpoints",{"2":{"706":1}}],["layouts",{"2":{"290":1}}],["layout",{"2":{"78":1,"79":4,"647":4,"656":1,"705":3,"706":2,"715":3}}],["lang=",{"2":{"928":1,"931":1}}],["langfuse",{"2":{"550":1}}],["langsmith",{"2":{"550":1}}],["langgpt",{"0":{"506":1},"1":{"507":1,"508":1},"2":{"496":1,"506":1}}],["langgraph",{"2":{"477":1}}],["langchain",{"2":{"477":1,"545":1}}],["languagemodel",{"2":{"848":3,"853":2,"854":1,"857":2,"866":1,"867":1}}],["languagemodelv4streamresult>",{"2":{"866":1}}],["languagemodelv4generateresult>",{"2":{"866":1}}],["languagemodelv4calloptions",{"2":{"866":3}}],["languagemodelv4",{"2":{"844":1,"847":2,"849":1,"851":1,"853":1,"854":4,"857":1,"866":2}}],["language>",{"2":{"506":1}}],["language",{"0":{"741":1},"2":{"277":1,"338":1,"506":1,"523":1,"741":1,"848":1,"850":3}}],["lang3",{"2":{"193":2}}],["lang3库",{"2":{"193":1}}],["laptop",{"2":{"260":1}}],["lastindex",{"2":{"770":1,"776":1}}],["lasttime",{"2":{"692":1}}],["lasteventid",{"2":{"163":1,"178":3,"179":1}}],["last",{"2":{"122":1,"830":1}}],["lazyupdate",{"2":{"719":1}}],["lazycomponent",{"2":{"647":1}}],["lazyonload",{"2":{"84":1}}],["lazy",{"2":{"59":1,"288":5}}],["lg",{"2":{"27":1,"28":3,"249":1,"927":2}}],["limit",{"2":{"804":1,"811":1}}],["lightprobe",{"2":{"734":1}}],["lightshadow",{"2":{"734":1}}],["lights",{"2":{"734":3}}],["lighting",{"2":{"733":2,"734":3}}],["light",{"2":{"733":2,"734":1,"737":2,"740":1,"753":3,"762":3,"778":8,"925":1}}],["lightning",{"2":{"343":1}}],["license",{"2":{"677":2,"706":1,"734":1,"762":1,"792":1,"823":1,"881":1}}],["lion",{"2":{"677":1}}],["lifecycle",{"2":{"656":1,"706":1,"881":1}}],["lifting",{"2":{"6":2}}],["like",{"2":{"646":1,"706":1}}],["lite",{"2":{"522":1}}],["listcomponent",{"2":{"706":1}}],["liststore",{"2":{"646":1,"647":1,"650":3}}],["listening",{"2":{"692":1}}],["listeneraction",{"2":{"646":1}}],["listeners",{"2":{"302":6,"315":5}}],["listen",{"2":{"164":1}}],["list",{"2":{"107":1,"184":1,"238":1,"256":1,"288":2,"414":1,"429":1,"647":2,"790":1,"796":1,"810":1,"811":1,"892":1,"952":1}}],["lineloop",{"2":{"734":1}}],["line3",{"2":{"734":1}}],["linedashedmaterial",{"2":{"734":1}}],["linebasicmaterial",{"2":{"734":1}}],["lineview",{"2":{"706":1}}],["lineconfig>",{"2":{"693":1}}],["linecap",{"2":{"692":3}}],["linejoin",{"2":{"692":3}}],["linear",{"2":{"372":1,"734":2,"743":1,"769":1,"770":1,"880":1}}],["line",{"2":{"166":3,"168":7,"489":1,"677":2,"679":1,"680":1,"693":1,"705":1,"706":2,"734":1,"737":1,"833":1,"840":2}}],["linestart",{"2":{"833":2}}],["linestyle",{"2":{"706":1}}],["linesegments",{"2":{"734":1}}],["lineseries",{"2":{"706":1}}],["linesview",{"2":{"706":1}}],["linesseries",{"2":{"706":1}}],["linesiterable",{"2":{"168":2}}],["lines",{"2":{"160":1,"166":3,"168":3,"706":1,"734":1,"748":1}}],["linkedlist",{"2":{"256":1}}],["link>",{"2":{"27":1}}],["link",{"2":{"27":3,"73":1,"84":1,"370":1,"650":1,"654":2,"800":1}}],["linter",{"2":{"572":1,"591":1,"845":1}}],["lint`",{"2":{"451":1}}],["lint",{"2":{"9":2,"451":1,"542":2,"572":1,"573":1}}],["libs",{"2":{"734":2,"761":1}}],["libraries",{"0":{"340":1},"2":{"780":1}}],["library",{"0":{"628":1},"2":{"321":2,"628":3,"629":1,"631":2,"801":1}}],["lib",{"2":{"26":1,"27":2,"203":1,"204":3,"214":1,"215":1,"216":1,"288":1,"333":4,"706":3,"734":1,"828":3}}],["lttb",{"2":{"706":1}}],["lt",{"2":{"1":3,"65":2,"73":1,"81":2,"84":4,"86":1,"87":1,"142":2,"160":1,"163":3,"200":1,"250":3,"254":4,"255":3,"256":7,"263":11,"270":2,"271":1,"297":1,"320":1,"448":1,"570":1,"797":1,"847":1,"858":1,"879":1,"888":1,"922":1,"924":3,"928":1,"929":1,"931":1,"933":1,"934":2}}],["更从理论上理解了身体是根本的道理",{"2":{"959":1}}],["更成熟的企业级解法",{"2":{"928":1}}],["更具结构化",{"2":{"921":1}}],["更贴近人们常说的",{"2":{"911":1}}],["更不知道如何解决",{"2":{"908":1}}],["更重视同别人进行有效的互动合作",{"2":{"907":1}}],["更重要",{"2":{"556":1}}],["更重要的是推导过程",{"2":{"493":1}}],["更看重",{"2":{"907":1}}],["更觉得目标是一把双刃剑",{"2":{"906":1}}],["更准确地表达自己的思想",{"2":{"903":1}}],["更轻量",{"2":{"822":1}}],["更灵活的服务器推送事件接收能力",{"2":{"813":1}}],["更容易错过",{"2":{"906":1}}],["更容易通过防火墙和代理",{"2":{"822":1}}],["更容易发现真正值得投入的问题",{"2":{"629":1}}],["更容易被检索",{"2":{"443":1}}],["更会以一小部分取代整体",{"2":{"614":1}}],["更高效率",{"2":{"613":1}}],["更低成本",{"2":{"613":1}}],["更需要一种",{"2":{"601":1}}],["更需要从后端运营链条出发",{"2":{"391":1}}],["更颠覆了传统的",{"2":{"598":1}}],["更远",{"2":{"528":1}}],["更在数学基础知识的基础上侧重补充了一些机器学习",{"2":{"912":1}}],["更在处理那",{"2":{"525":1}}],["更在内部深度观测",{"2":{"525":1}}],["更在于其",{"2":{"509":1}}],["更在于其完善的编译体系",{"2":{"226":1}}],["更美好的诗歌作品",{"2":{"506":1}}],["更加强调自由开放和直率陈述与进行",{"2":{"506":1}}],["更加可复用的代码体系",{"2":{"263":1}}],["更取决于开发者构建的工程约束",{"2":{"476":1}}],["更通过模块化设计增强了系统的可解释性与可控性",{"2":{"468":1}}],["更通过模块化的设计增强了系统的可解释性与可控性",{"2":{"467":1}}],["更通过静态性为现代前端工程化铺平了道路",{"2":{"316":1}}],["更聪明",{"2":{"443":1}}],["更像是一个初步成形的",{"2":{"419":1}}],["更让",{"2":{"415":1,"438":1}}],["更聚焦策略洞察",{"2":{"406":1}}],["更深刻地洞察人性",{"2":{"400":1}}],["更精准地定价",{"2":{"400":1}}],["更积极地",{"2":{"398":1}}],["更要洞察",{"2":{"625":1}}],["更要理解",{"2":{"537":1}}],["更要通过数据分析了解客户的需求",{"2":{"396":1}}],["更要深入研究用户的沉没感",{"2":{"393":1}}],["更要看博弈对手的行动边界",{"2":{"392":1}}],["更别提去修复它了",{"2":{"382":1}}],["更赋予了产品快速迭代",{"2":{"378":1}}],["更因为当你按",{"2":{"372":1}}],["更快的节奏",{"2":{"466":1}}],["更快到达目的地",{"2":{"366":1}}],["更快地构建出干净",{"2":{"340":1}}],["更可维护",{"2":{"528":1}}],["更可维护的大型应用",{"2":{"293":1}}],["更可能是优化",{"2":{"366":1}}],["更包含未来的维护成本",{"2":{"365":1}}],["更死磕",{"2":{"353":1}}],["更严苛的原则",{"2":{"352":1}}],["更强大的替代方案",{"2":{"342":1}}],["更能",{"2":{"418":1}}],["更能看透要素之间错综复杂的连接关系",{"2":{"383":1}}],["更能将很多以往需要极高人力成本的环节直接交给自动化程序处理",{"2":{"378":1}}],["更能洞察他其实",{"2":{"363":1}}],["更能设计出经得起时间推敲的工程结构",{"2":{"332":1}}],["更能利用",{"2":{"107":1}}],["更现代",{"2":{"322":1}}],["更为团队沉淀了一笔可以版本控制",{"2":{"456":1}}],["更为系统运行的稳定性提供了坚实保障",{"2":{"434":1}}],["更为现代团队的高效协作铺设了最底层的基建",{"2":{"303":1}}],["更为可靠的人机协作实践模式",{"2":{"8":1}}],["更帮助你窥见了",{"2":{"271":1}}],["更好",{"2":{"246":1,"909":1}}],["更多配置选项请参考",{"2":{"925":1}}],["更多",{"2":{"849":1}}],["更多分类",{"2":{"647":1}}],["更多是不愿改变旧有的阅读习惯",{"2":{"613":1}}],["更多控制",{"2":{"559":1}}],["更多了解可参考",{"2":{"478":1}}],["更多拓展阅读",{"2":{"456":1}}],["更多详细信息请可参考",{"2":{"225":1}}],["更多介绍与使用请参考",{"2":{"103":1}}],["更是成为影响力很大的公司",{"2":{"909":1}}],["更是让个人能力产生爆炸式增长的",{"2":{"902":1}}],["更是思维的松绑",{"2":{"604":1}}],["更是思维模型的重构",{"2":{"554":1}}],["更是能够最大化杠杆原有技能的沃土",{"2":{"552":1}}],["更是为了在算法与焦虑的夹击中",{"2":{"603":1}}],["更是为了探索",{"2":{"496":1}}],["更是为了让我们在面对复杂的全栈架构时",{"2":{"309":1}}],["更是人类创造力的解放",{"2":{"440":1}}],["更是",{"2":{"417":1,"464":1}}],["更是环境反馈的接收者",{"2":{"412":1}}],["更是商业模型更健康",{"2":{"400":1}}],["更是寻找价值创造的核心环节",{"2":{"397":1}}],["更是稀缺的",{"2":{"391":1}}],["更是关于成本与博弈",{"0":{"390":1},"1":{"391":1,"392":1,"393":1,"394":1}}],["更是设计",{"2":{"367":1}}],["更是一场关于策略与创造力的刻意练习",{"2":{"600":1}}],["更是一场关于工作与生活方式的哲学探讨",{"2":{"381":1}}],["更是一个关于全链路治理的系统性命题",{"2":{"534":1}}],["更是一个能大幅降低信息噪音",{"2":{"356":1}}],["更是一套微型的教学法",{"2":{"494":1}}],["更是一份为",{"2":{"357":1}}],["更是一种抽象思维的体现",{"2":{"271":1}}],["更是一种思维方式",{"2":{"201":1}}],["更是同步与异步加载逻辑的博弈",{"2":{"333":1}}],["更是性能优化的关键",{"2":{"318":1}}],["更是代码文档的一部分",{"2":{"263":1}}],["更是对工程师素养的锤炼",{"2":{"201":1}}],["更少bug的代码",{"2":{"201":1}}],["更易于维护",{"2":{"509":1}}],["更易维护的泛型代码",{"2":{"263":1}}],["更易维护",{"2":{"201":1}}],["更易穿透防火墙与网关",{"2":{"142":1}}],["更简洁",{"2":{"181":1}}],["更优雅的异步处理方式",{"2":{"822":1}}],["更优雅的解决方案",{"0":{"167":1}}],["更优雅",{"2":{"107":1}}],["更适合纯",{"2":{"93":1}}],["更代表了一种默认在服务端运行",{"2":{"71":1}}],["更笃定的技术决策",{"2":{"67":1}}],["更新和工具调用交互",{"2":{"858":1}}],["更新检查",{"2":{"792":1}}],["更新当前帧",{"2":{"776":1}}],["更新回调",{"2":{"748":1}}],["更新类型",{"2":{"748":1}}],["更新标记",{"2":{"748":2}}],["更新所有活跃动画",{"2":{"743":1}}],["更新快照",{"2":{"667":1}}],["更新方法",{"2":{"662":1}}],["更新的完整流程",{"2":{"659":1}}],["更新依赖库",{"2":{"331":1}}],["更新用户浏览历史",{"2":{"289":1}}],["更新时间戳",{"2":{"269":1}}],["更新等底层逻辑",{"2":{"103":1}}],["更新",{"0":{"100":1,"108":1},"2":{"704":1}}],["更新一篇文章时",{"2":{"48":1}}],["更新缓存",{"2":{"47":1}}],["更新静态页面",{"2":{"29":1}}],["更关键的是",{"2":{"6":1}}],["更稳健的做法是将全自动化与半自动化并行推进",{"2":{"3":1}}],["之外",{"2":{"920":1}}],["之所以还记得",{"2":{"958":1}}],["之所以重要",{"2":{"622":1}}],["之所以能保持简洁",{"2":{"66":1}}],["之间的通用数据交换格式",{"2":{"854":1}}],["之间真的成立",{"2":{"610":1}}],["之间",{"2":{"610":1}}],["之间需要反复复制同一套指令",{"2":{"437":1}}],["之间寻找到帕累托效率点",{"2":{"394":1}}],["之间寻找动态平衡",{"2":{"6":1}}],["之间找到平衡",{"2":{"363":1}}],["之后的大势所趋",{"2":{"947":1}}],["之后的内容",{"2":{"581":1}}],["之后",{"2":{"6":1,"464":1}}],["之前很多同学和朋友甚至早已融入到社会之中",{"2":{"965":1}}],["之前笔者因相信",{"2":{"959":1}}],["之前",{"2":{"5":1,"337":1}}],["是继",{"2":{"947":1}}],["是大势所趋",{"2":{"947":1}}],["是耐力不够",{"2":{"942":1}}],["是智能化",{"2":{"928":1}}],["是采用原子化为主",{"2":{"928":1}}],["是的",{"2":{"928":2}}],["是近年来最能深刻改变前端开发习惯的方案",{"2":{"925":1}}],["是达成目标的关键因素",{"2":{"917":1}}],["是我的数字花园",{"2":{"903":1}}],["是我们的罗盘",{"2":{"376":1}}],["是轻量级",{"2":{"859":1}}],["是对",{"2":{"858":1}}],["是对原始输入数据的抽象层",{"2":{"713":1}}],["是框架无关的聊天状态管理器",{"2":{"858":1}}],["是核心",{"2":{"853":1}}],["是核心操作",{"2":{"334":1}}],["是微软开源的一个基于",{"2":{"813":1}}],["是微前端架构的理想选择",{"2":{"288":1}}],["是外部",{"2":{"765":1}}],["是播放调度核心",{"2":{"743":1}}],["是材质基类",{"2":{"742":1}}],["是抽象接口",{"2":{"739":1}}],["是渲染的基本数据单元",{"2":{"737":1}}],["是渲染的关键模块",{"2":{"683":1}}],["是世界上最流行",{"2":{"728":1}}],["是唯一直接与",{"2":{"684":1}}],["是唯一选择",{"2":{"143":1}}],["是整个框架的基石",{"2":{"682":1}}],["是无状态的",{"2":{"670":1}}],["是解析和编译信息的能力",{"2":{"619":1}}],["是通过完整地阅读来观摩优秀的大师是如何思考的",{"2":{"608":1}}],["是通用对话",{"2":{"519":1}}],["是放置在",{"2":{"591":1}}],["是团队协作的核心载体",{"2":{"570":1}}],["是你",{"2":{"584":1}}],["是你的数字员工",{"2":{"557":1}}],["是你在一个领域里积累的隐性知识",{"2":{"460":1}}],["是选择单体还是微服务",{"2":{"555":1}}],["是那个能够让工程能力和产品思维产生指数级爆炸的乘数",{"2":{"554":1}}],["是连接",{"2":{"544":1}}],["是保持底层",{"2":{"531":1}}],["是保障",{"2":{"509":1}}],["是让个人产出这种线性增长变成指数增长的关键变量",{"2":{"557":1}}],["是让我们从繁琐的",{"2":{"526":1}}],["是让这个世界走向极端",{"2":{"387":1,"910":1}}],["是需要在国内稳定使用",{"2":{"523":1}}],["是开源模型生态的事实标准入口",{"2":{"523":1}}],["是切换",{"2":{"523":1}}],["是性价比最突出的国产模型",{"2":{"522":1}}],["是性能的极限",{"2":{"67":1}}],["是替代传统搜索引擎的首选工具",{"2":{"518":1}}],["是企业",{"2":{"515":1}}],["是国内开发者使用第三方",{"2":{"523":1}}],["是国内开发者的性价比首选",{"2":{"519":1}}],["是国内日常使用场景下综合体验较好的",{"2":{"518":1}}],["是国内互联网资源覆盖最广的",{"2":{"518":1}}],["是国内技术领先的大模型平台",{"2":{"512":1}}],["是国内领先的",{"2":{"512":1}}],["是月之暗面",{"2":{"512":1}}],["是最贴近真实工程流程的终端",{"2":{"567":1}}],["是最知名的对话式",{"2":{"511":1}}],["是最主流的两个服务端状态管理方案",{"2":{"109":1}}],["是全球领先的人工智能公司",{"2":{"511":1}}],["是全集",{"2":{"244":1}}],["是心灵的映现",{"2":{"506":1}}],["是单",{"2":{"475":1}}],["是单页应用",{"2":{"34":1}}],["是杠杆",{"2":{"462":1}}],["是建立判断力",{"2":{"458":1}}],["是能够敏锐识别自己的长板",{"2":{"458":1}}],["是提效利器",{"2":{"444":1}}],["是提供给",{"2":{"442":1}}],["是指当",{"2":{"924":1}}],["是指",{"2":{"443":1,"558":2}}],["是可执行代码",{"2":{"442":1}}],["是技能核心内容",{"2":{"442":1}}],["是操作系统",{"2":{"439":1}}],["是系统中的",{"2":{"438":1}}],["是系统中会随着时间发生变化的要素",{"2":{"384":1}}],["是面向特定工作主题的",{"2":{"437":1}}],["是随口交代的任务",{"2":{"436":1}}],["是生态中最基础的交互单元",{"2":{"435":1}}],["是关键的反馈吸收阶段",{"2":{"427":1}}],["是只会机械响应指令的",{"2":{"421":1}}],["是人性的弱点",{"2":{"393":1}}],["是人机协作的一套",{"2":{"11":1}}],["是不是子弹还要飞一会儿",{"2":{"389":1}}],["是训练洞察力的基本功",{"2":{"385":1}}],["是某一特定时刻",{"2":{"384":1}}],["是每个人都要像经营者一样主动思考并承担责任",{"2":{"380":1}}],["是结果导向",{"2":{"380":1}}],["是结构类型系统",{"2":{"236":1}}],["是坚守长期主义和价值创造的客观根基",{"2":{"379":1}}],["是利用了你的炫耀欲",{"2":{"373":1}}],["是底层的生理",{"2":{"373":1}}],["是底类型",{"2":{"244":1}}],["是情绪的来源",{"2":{"372":1}}],["是因为对当时的",{"2":{"609":1}}],["是因为其开放式货架策略将存储成本降到了极低",{"2":{"391":1}}],["是因为那个丝滑的转场动画",{"2":{"372":1}}],["是因为我们习惯了",{"2":{"370":1}}],["是因为它们构成了反馈闭环",{"2":{"622":1}}],["是因为它的扩展性更好",{"2":{"533":1}}],["是因为它的设计者在架构层面做了大量克制",{"2":{"66":1}}],["是因为它解决了",{"2":{"255":1}}],["是高估了用户动力",{"2":{"369":1}}],["是天赋",{"2":{"368":1}}],["是功能太多",{"2":{"366":1}}],["是为了找出自己的优势和不足",{"2":{"396":1}}],["是为了在核心体验上以此换取",{"2":{"365":1}}],["是为了解决当时的痛点而生",{"2":{"609":1}}],["是为了解决",{"2":{"191":1}}],["是产品经理",{"2":{"363":1}}],["是危险的",{"2":{"363":1}}],["是驱动知识工作者留存的唯一动力",{"2":{"350":1}}],["是如何重塑信息获取工作流的",{"2":{"348":1}}],["是基于插件化理念设计的一款支持多语言",{"2":{"342":1}}],["是由于基准过旧还是多人同时修改同一逻辑",{"2":{"451":1}}],["是由",{"2":{"342":1,"343":1,"511":1,"547":1}}],["是前端开发中常用的",{"2":{"342":1}}],["是前提",{"2":{"181":1}}],["是用于描述网页样式和布局的样式表语言",{"2":{"338":1}}],["是用于创建网页的标准标记语言",{"2":{"338":1}}],["是异步加载的",{"2":{"333":1}}],["是维护者与使用者之间的契约",{"2":{"331":1}}],["是编写通用开源库",{"2":{"306":1}}],["是该规范最知名的实现",{"2":{"305":1}}],["是专门为浏览器环境设计的模块化规范",{"2":{"305":1}}],["是伴随",{"2":{"304":1}}],["是现代前端架构的第一铁律",{"2":{"929":1}}],["是现代前端框架",{"2":{"302":1}}],["是现代浏览器的标准",{"2":{"822":1}}],["是现代工程化开发不可或缺的基石",{"2":{"296":1}}],["是软件要解决的核心问题域",{"2":{"278":1}}],["是构建可靠",{"2":{"456":1}}],["是构建现代",{"2":{"338":1}}],["是构建",{"2":{"338":1}}],["是构建大型可靠应用的重要基础",{"2":{"270":1}}],["是构建类型安全工具函数的重要技术",{"2":{"268":1}}],["是构建类型安全",{"2":{"264":1}}],["是从",{"2":{"250":1}}],["是交叉的单位元",{"2":{"244":1,"250":1}}],["是交叉的零元",{"2":{"244":1}}],["是交叉的",{"2":{"244":1}}],["是交集",{"2":{"242":1}}],["是联合的零元",{"2":{"244":1}}],["是联合的单位元",{"2":{"244":1,"250":1}}],["是联合的",{"2":{"244":1}}],["是联合成员",{"2":{"229":1}}],["是空集",{"2":{"244":1}}],["是顶类型",{"2":{"244":1}}],["是等价的类型",{"2":{"243":1}}],["是并集",{"2":{"242":1}}],["是数学中非常美妙的现象",{"2":{"242":1}}],["是所有",{"2":{"740":1,"854":1}}],["是所有的",{"2":{"239":1}}],["是所有字符串",{"2":{"227":1}}],["是类型谓词",{"2":{"231":1}}],["是既属于字符串又属于数字的值的集合",{"2":{"227":1}}],["是在",{"2":{"201":1}}],["是在满足需求的前提下",{"2":{"66":1}}],["是模块间的交互契约",{"2":{"195":1}}],["是简陋",{"2":{"181":1}}],["是简洁",{"2":{"181":1}}],["是哲学与科学研究中经典的思维工具",{"2":{"181":1}}],["是目前口碑最好的",{"2":{"564":1}}],["是目前应用最广",{"2":{"427":1}}],["是目前最受欢迎的",{"2":{"344":1}}],["是目前",{"2":{"167":1,"465":1}}],["是浏览器原生封装的",{"2":{"163":1}}],["是实现实时性的基础方案",{"2":{"135":1}}],["是实际的请求函数",{"2":{"103":1}}],["是服务器",{"2":{"130":1}}],["是严谨的",{"2":{"116":1}}],["是知道什么时候不该用它",{"2":{"67":1}}],["是灵活性的极限",{"2":{"67":1}}],["是自缚手脚",{"2":{"67":1}}],["是一款",{"2":{"632":1}}],["是一款速度极快的前端构建工具",{"2":{"343":1}}],["是一台拥有无限爆发力的引擎",{"2":{"534":1}}],["是一套面向编码",{"2":{"874":1}}],["是一套开源项目代码仓库深度分析的",{"2":{"636":1}}],["是一套开放标准的连接层协议",{"2":{"439":1}}],["是一套用于构建用户界面的渐进式框架",{"2":{"339":1}}],["是一段时间内",{"2":{"384":1}}],["是一场从",{"2":{"337":1}}],["是一个将网站",{"2":{"784":1}}],["是一个面向",{"2":{"699":1}}],["是一个面向前端开发者的高性能",{"2":{"670":1}}],["是一个面向前端开发者和后端开发者的低代码前端框架",{"2":{"639":1}}],["是一个可选参数",{"2":{"482":1}}],["是一个包含完整指令说明",{"2":{"436":1}}],["是一个重要的概念",{"2":{"426":1}}],["是一个由",{"2":{"345":1}}],["是一个由字节跳动",{"2":{"343":1}}],["是一个现代前端项目的理想部署平台",{"2":{"345":1}}],["是一个现代",{"2":{"343":1}}],["是一个用于构建高效",{"2":{"344":1}}],["是一个用于",{"2":{"342":1}}],["是一个功能强大的",{"2":{"342":1}}],["是一个预测性的状态容器",{"2":{"341":1}}],["是一个开源的浏览器引擎",{"2":{"338":1}}],["是一个函数式语法",{"2":{"313":1}}],["是一个独立的",{"2":{"248":1}}],["是一个不可见的标记",{"2":{"247":1}}],["是一个有限集",{"2":{"229":1}}],["是一个流行的",{"2":{"220":1}}],["是一个自动化的静态代码检查工具",{"2":{"219":1}}],["是一个强大的开源前端异步状态管理库",{"2":{"103":1}}],["是一个基于云计算的网站部署和托管平台",{"2":{"345":1}}],["是一个基于",{"2":{"97":1,"338":1,"340":2,"342":2,"344":2}}],["是一个",{"2":{"66":1,"240":1,"402":1,"934":1}}],["是一种在构建阶段",{"2":{"923":1}}],["是一种将",{"2":{"922":1}}],["是一种依靠人力去填补技术鸿沟的",{"2":{"553":1}}],["是一种模块化的能力组件",{"2":{"441":1}}],["是一种能够处理多种模态数据",{"2":{"418":1}}],["是一种能够感知环境",{"2":{"402":1}}],["是一种全新的构建",{"2":{"339":1}}],["是一种动态",{"2":{"338":1}}],["是一种跨环境的模块化规范",{"2":{"306":1}}],["是一种以业务领域为核心的软件设计方法论",{"2":{"276":1}}],["是一种",{"2":{"159":2}}],["是一种底层的",{"2":{"120":1}}],["是一种基于文本的通信协议",{"2":{"114":1}}],["是一种与框架无关的渲染思想",{"2":{"53":1}}],["是一种流式混合渲染策略",{"2":{"51":1}}],["是一种比",{"2":{"8":1}}],["是精心设计的结果",{"2":{"66":1}}],["是任何需要服务端实时渲染的方案无法企及的性能基线",{"2":{"64":1}}],["是巩固知识的最佳方式",{"2":{"60":1}}],["是与",{"2":{"38":1}}],["是",{"2":{"18":1,"46":1,"58":4,"60":1,"69":1,"73":1,"90":1,"106":1,"155":4,"162":1,"166":1,"197":1,"202":1,"232":1,"236":1,"250":2,"252":1,"268":1,"269":1,"310":1,"338":1,"339":1,"341":3,"342":1,"343":1,"478":1,"511":2,"525":1,"555":1,"567":1,"571":2,"608":1,"713":1,"736":2,"741":1,"755":1,"833":2,"842":1,"927":1,"946":1}}],["是典型的",{"2":{"10":1}}],["是什么",{"0":{"441":1},"2":{"6":1,"441":1}}],["是否支持模块化拆分",{"2":{"928":1}}],["是否支持多轮追问与自动报告生成",{"2":{"517":1}}],["是否被推荐",{"2":{"895":1}}],["是否被这缕月光下的暗香触动",{"2":{"507":1}}],["是否异步执行",{"2":{"895":1}}],["是否",{"2":{"776":1}}],["是否使用脏矩形优化",{"2":{"719":1}}],["是否已销毁",{"2":{"719":1}}],["是否已触摸",{"2":{"663":1}}],["是否已用",{"2":{"1":1}}],["是否正在提交",{"2":{"663":1}}],["是否有子",{"2":{"663":1}}],["是否有事件驱动基础设施",{"2":{"155":1}}],["是否启用移动端原生",{"2":{"661":1}}],["是否覆盖已注册的渲染器",{"2":{"661":1}}],["是否隔离数据作用域",{"2":{"661":1}}],["是否只是昙花一现时",{"2":{"569":1}}],["是否也想让洛神的衣袂在你的笔尖起舞",{"2":{"508":1}}],["是否想尝试为心中的神女再赋新篇",{"2":{"505":1}}],["是否允许渐进渲染",{"2":{"712":1}}],["是否允许",{"2":{"482":1}}],["是否可以取消",{"2":{"281":1}}],["是否必需",{"2":{"210":1}}],["是否传了有效的userid",{"2":{"199":1}}],["是否为服务端渲染",{"2":{"719":1}}],["是否为移动端",{"2":{"662":1}}],["是否为表单项",{"2":{"661":1}}],["是否为",{"2":{"101":1,"175":1}}],["是否应该用",{"2":{"66":1}}],["是否需要继承上层数据域",{"2":{"661":1}}],["是否需要私有化部署",{"2":{"519":1}}],["是否需要调整",{"2":{"414":1}}],["是否需要登录后才可访问",{"2":{"58":1}}],["是否需要公开搜索引擎收录",{"2":{"58":1}}],["是否要求毫秒级实时数据",{"2":{"58":1}}],["是否重要",{"2":{"58":1}}],["是否真正做到",{"2":{"3":1}}],["是否利用",{"2":{"1":1}}],["是否优先使用了",{"2":{"1":1}}],["无健康意识",{"2":{"938":1}}],["无痛穿透并覆写第三方组件",{"2":{"928":1}}],["无痛溢出",{"0":{"529":1}}],["无失败测试=无产品代码",{"2":{"881":1}}],["无运行时开销",{"2":{"845":1}}],["无运行时依赖",{"2":{"826":1}}],["无表达式",{"2":{"762":3}}],["无样式数据",{"2":{"762":1}}],["无损缩放",{"2":{"755":1,"782":1}}],["无渲染器依赖",{"2":{"736":1}}],["无几何体",{"2":{"734":1}}],["无障碍标签",{"2":{"715":1}}],["无障碍",{"2":{"706":1}}],["无障碍访问",{"2":{"706":1}}],["无交互图层优化",{"2":{"677":1}}],["无用的噪音占满",{"2":{"621":1}}],["无形资产",{"2":{"605":1}}],["无形界面",{"2":{"367":1}}],["无形界面设计",{"2":{"367":1}}],["无身份的技能执行",{"2":{"592":1}}],["无关",{"2":{"856":1}}],["无关的工具调用循环",{"2":{"844":1}}],["无关紧要的偏好问题",{"2":{"591":1}}],["无关噪音时",{"2":{"410":1}}],["无疑是最具代表性的工具",{"2":{"569":1}}],["无官方订阅",{"2":{"568":1}}],["无订阅则用",{"2":{"568":1}}],["无代码应用搭建",{"2":{"562":1}}],["无代码全栈",{"2":{"561":1}}],["无数据出境风险",{"2":{"519":1}}],["无干扰信息获取",{"2":{"518":1}}],["无害为核心理念",{"2":{"511":1}}],["无须时刻盯着",{"2":{"402":1}}],["无管理的管理",{"2":{"387":1}}],["无差别的",{"2":{"359":1}}],["无缝联动",{"2":{"515":1}}],["无缝对接微信",{"2":{"512":1}}],["无缝集成",{"2":{"511":1}}],["无缝",{"2":{"344":1}}],["无限集",{"2":{"227":2}}],["无效信息是对算力的极大消耗",{"0":{"621":1}}],["无效的语法等",{"2":{"219":1}}],["无效行",{"2":{"168":1}}],["无多数据源",{"2":{"190":1}}],["无复杂流程",{"2":{"190":1}}],["无业务逻辑",{"2":{"190":1}}],["无作用的代码片段",{"2":{"186":1}}],["无明确需求的",{"2":{"185":1}}],["无价值的复杂性",{"2":{"182":1}}],["无验证",{"2":{"181":1}}],["无感知的物理隔离",{"2":{"924":1}}],["无感知",{"2":{"167":1}}],["无法从根本上解决全局命名冲突的问题",{"2":{"921":1}}],["无法优雅处理",{"2":{"814":1}}],["无法发送请求体",{"2":{"814":1}}],["无法落盘",{"2":{"622":1}}],["无法在短期内看到正向反馈",{"2":{"617":1}}],["无法触发",{"2":{"448":1}}],["无法触达的",{"2":{"375":1}}],["无法构成生生不息的系统",{"2":{"385":1}}],["无法学习",{"2":{"368":1}}],["无法使用",{"2":{"333":1,"814":1}}],["无法推断具体类型",{"2":{"253":1}}],["无法赋值",{"2":{"237":1}}],["无法确定当前值具体是哪个成员类型",{"2":{"229":1}}],["无法直接查看有意义的变量值和调用栈",{"2":{"217":1}}],["无法解析",{"2":{"166":1}}],["无法处理多行数据",{"2":{"166":1}}],["无法自定义请求头",{"2":{"814":1}}],["无法自定义",{"2":{"165":1}}],["无法传递认证令牌",{"2":{"814":1}}],["无法传",{"2":{"160":1}}],["无法灵活地在请求头中添加",{"2":{"160":1}}],["无法主动推送",{"2":{"115":1}}],["无标准格式约定",{"2":{"159":1}}],["无严格实时要求",{"2":{"155":1}}],["无连接挂起",{"2":{"155":1}}],["无固定耗时",{"2":{"142":1}}],["无排队压力",{"2":{"142":1}}],["无状态的短连接模式让服务器能够承载更高的吞吐量",{"2":{"143":1}}],["无状态的短连接模式能让服务器吞吐量提升数个量级",{"2":{"137":1}}],["无状态特性带来了卓越的抗干扰能力",{"2":{"139":1}}],["无论项目多大",{"2":{"930":1}}],["无论上层使用什么技术栈",{"2":{"929":1}}],["无论选哪家",{"2":{"523":1}}],["无论你是用react",{"2":{"345":1}}],["无论被",{"2":{"314":1}}],["无论是探讨全栈",{"2":{"905":1}}],["无论是坚持",{"2":{"615":1}}],["无论是精通前端交互",{"2":{"552":1}}],["无论是长文抓取",{"2":{"547":1}}],["无论是基于全局文档回答复杂问题",{"2":{"417":1}}],["无论是发布一个新功能",{"2":{"388":1}}],["无论是使用自家产品还是生活中的琐事",{"2":{"370":1}}],["无论是主动还是被动的",{"2":{"360":1}}],["无论是在浏览器端",{"2":{"316":1}}],["无论是单体项目还是",{"2":{"226":1}}],["无论是频繁发起连接的短轮询",{"2":{"115":1}}],["无论是个人博客",{"2":{"32":1}}],["无论成功还是失败",{"2":{"108":1}}],["无论成功失败",{"2":{"108":1}}],["无白屏",{"2":{"97":1,"112":1}}],["无影响",{"2":{"57":3}}],["无异",{"2":{"41":1}}],["无实际内容",{"2":{"35":1}}],["无头苍蝇式的忙碌",{"2":{"956":1}}],["无头",{"0":{"21":1}}],["无自建后端",{"2":{"20":1}}],["无服务器计算",{"2":{"43":1}}],["无服务器函数等功能",{"2":{"345":1}}],["无服务器函数",{"2":{"19":1,"20":1}}],["无服务器端代码",{"2":{"15":1}}],["无页面渲染逻辑",{"2":{"16":1}}],["无动态交互",{"2":{"16":1}}],["无",{"2":{"15":1,"159":1,"163":3,"650":2,"801":4,"807":1,"845":2,"928":1}}],["无需隔离",{"2":{"928":1}}],["无需解析",{"2":{"877":1}}],["无需任何",{"2":{"876":1}}],["无需用户手动操作",{"2":{"876":1}}],["无需用户确认即可自动执行的工具列表",{"2":{"482":1}}],["无需了解底层渲染细节",{"2":{"700":1}}],["无需重新发布",{"2":{"640":1}}],["无需太多社会经验的领域",{"2":{"614":1}}],["无需请求确认即可执行的命令或操作",{"2":{"594":1}}],["无需搭建开发环境",{"2":{"561":1}}],["无需搭建推理基础设施",{"2":{"523":1}}],["无需每次提示都包含所有技能",{"2":{"547":1}}],["无需管理多个",{"2":{"523":1}}],["无需切换产品的日常搜索",{"2":{"518":1}}],["无需切换产品即可体验",{"2":{"518":1}}],["无需人工确认修改",{"2":{"484":1}}],["无需外部工具",{"2":{"453":1}}],["无需再调用工具",{"2":{"427":1}}],["无需预设计划",{"2":{"425":1}}],["无需奢华的办公场地",{"2":{"378":1}}],["无需安装第三方包",{"2":{"342":1}}],["无需编写自定义",{"2":{"340":1}}],["无需修改现有代码",{"2":{"292":1}}],["无需依赖",{"2":{"194":1}}],["无需求依据的默认值",{"2":{"187":1}}],["无需暂存",{"2":{"187":1}}],["无需引入长连接复杂度",{"2":{"142":1}}],["无需维护持久连接",{"2":{"131":1,"143":1}}],["无需像",{"2":{"127":1}}],["无需手动操作",{"2":{"699":1}}],["无需手动处理",{"2":{"171":1}}],["无需手动管理",{"2":{"103":1}}],["无需手写骨架屏逻辑",{"2":{"78":1}}],["无需整页刷新",{"2":{"86":1}}],["无需额外组件",{"2":{"155":1}}],["无需额外声明",{"2":{"73":1}}],["无需额外的运行时支持",{"2":{"339":1}}],["无需额外的",{"2":{"72":1}}],["无需额外配置服务器即可快速部署个人主页",{"2":{"345":1}}],["无需额外配置",{"2":{"29":1,"143":1}}],["无需",{"2":{"57":1,"73":1,"156":1}}],["无需等待对方请求或确认",{"2":{"127":1}}],["无需等待动态数据",{"2":{"57":1}}],["无需等待",{"2":{"39":1}}],["无需关心后端运维",{"2":{"32":1}}],["无需后端渲染",{"2":{"31":1}}],["无需后端服务器动态生成页面",{"2":{"14":1}}],["无需部署独立",{"2":{"20":1}}],["无需自建服务器",{"2":{"19":1}}],["无需运维服务器",{"2":{"15":1}}],["无需费力猜测上下文",{"2":{"11":1}}],["无冗余无泄漏",{"2":{"9":1}}],["无泄漏下沉",{"2":{"6":1}}],["无副作用",{"2":{"3":1}}],["同学和朋友交流等方式了解一些小常识",{"2":{"964":1}}],["同学和朋友沟通",{"2":{"962":1}}],["同上",{"2":{"934":1}}],["同上工程任务",{"2":{"568":1}}],["同心圆",{"2":{"677":1}}],["同样的信息",{"2":{"619":1}}],["同样的逻辑也适用于团队",{"2":{"380":1}}],["同事时",{"2":{"530":1}}],["同事",{"2":{"525":1}}],["同理心不是",{"2":{"366":1}}],["同理心",{"2":{"366":1,"556":1,"902":1}}],["同理心让你感受到用户的挫败感",{"2":{"366":1}}],["同理心告诉你",{"2":{"366":2}}],["同理心提供",{"2":{"366":1}}],["同构元框架",{"2":{"344":1}}],["同等有效",{"2":{"181":1}}],["同步功能测试",{"2":{"881":1}}],["同步求值器",{"2":{"655":1}}],["同步表达式求值器",{"2":{"647":1}}],["同步种子数据",{"2":{"583":1}}],["同步基准",{"2":{"451":1}}],["同步仓库",{"2":{"451":1}}],["同步加载会导致页面卡死",{"2":{"305":1}}],["同步加载",{"2":{"304":1}}],["同步至",{"2":{"132":1}}],["同步",{"2":{"103":1,"308":1,"646":1}}],["同步和更新",{"2":{"103":1,"342":1}}],["同一份动画数据可在",{"2":{"755":1}}],["同一个事件可能被多次投递",{"2":{"133":1}}],["同一个",{"2":{"103":1}}],["同一个目录下可存在多个特殊文件",{"2":{"78":1}}],["同一个产品的不同页面",{"2":{"67":1}}],["同一个页面中不同组件可以采用不同的渲染策略",{"2":{"51":1}}],["同一",{"2":{"59":1}}],["同一业务实体在组件树中只能存在一份状态副本",{"2":{"6":1}}],["同时改写",{"2":{"924":1}}],["同时使我们自己为行之有效的相互依赖做好准备",{"2":{"907":1}}],["同时记录第一个冒号位置",{"2":{"833":1}}],["同时兼容",{"2":{"828":1}}],["同时反向倒逼自身思考质量的提升",{"2":{"625":1}}],["同时写代码和审查代码",{"2":{"590":1}}],["同时释放出更宏大的创造力",{"2":{"525":1}}],["同时还能够举一反三",{"2":{"494":1}}],["同时生成",{"2":{"472":1}}],["同时运行",{"2":{"472":1}}],["同时具备高效的信息检索",{"2":{"467":1}}],["同时具备了流式传输的实时性",{"2":{"160":1}}],["同时处理不同维度的任务",{"2":{"438":1}}],["同时处理复杂的后台任务",{"2":{"419":1}}],["同时为知识工作者提供可落地的效率提升方法",{"2":{"348":1}}],["同时也支持纯",{"2":{"344":2}}],["同时也极其依赖官方",{"2":{"113":1}}],["同时导入值和类型",{"2":{"318":1}}],["同时导入默认成员和命名成员",{"2":{"311":1}}],["同时支持",{"2":{"306":1,"729":1}}],["同时支持灵活的身份验证方式",{"2":{"160":1}}],["同时获得完整的类型提示和安全保障",{"2":{"263":1}}],["同时不丧失通用性",{"2":{"263":1}}],["同时存在于",{"2":{"229":1}}],["同时提升开发效率",{"2":{"201":1}}],["同时提供了强大的功能",{"2":{"97":1}}],["同时保留原有搜索结果兜底",{"2":{"518":1}}],["同时保留了",{"2":{"167":1}}],["同时保持当下时间的专注",{"2":{"953":1}}],["同时保持",{"2":{"256":1}}],["同时保持对内部元素类型的严格检查",{"2":{"256":1}}],["同时保持类型检查",{"2":{"252":1}}],["同时保证每个模块都是独立",{"2":{"3":1}}],["同时规避了标准",{"2":{"118":1}}],["同时发送请求去更新缓存",{"2":{"97":1}}],["同时",{"2":{"65":1,"143":1,"153":1,"361":1,"392":1,"425":1,"930":1}}],["同时标记下次过期时间",{"2":{"47":1}}],["同时解释其职责划分与层级结构设计的思路",{"2":{"2":1}}],["防治宜早",{"2":{"941":1}}],["防戒不良生活习惯",{"2":{"941":1}}],["防雷警告",{"2":{"928":1}}],["防护",{"2":{"662":1}}],["防守",{"2":{"426":1}}],["防抖限制外",{"2":{"169":1}}],["防火墙或负载均衡器默认开启了强缓冲",{"2":{"119":1}}],["防止样式污染全局",{"2":{"924":1}}],["防止嵌套注入",{"2":{"887":1}}],["防止网页直接调用",{"2":{"801":1}}],["防止阅读初衷的异化",{"2":{"612":1}}],["防止其重绘逻辑清除",{"2":{"489":1}}],["防止访问不存在的属性",{"2":{"268":1}}],["防止在泛型函数",{"2":{"264":1}}],["防止将",{"2":{"247":1}}],["防止混淆",{"2":{"247":1}}],["防止生成有问题的输出",{"2":{"203":1}}],["防止无效消息干扰",{"2":{"175":1}}],["防止无限重试",{"2":{"175":1}}],["防止手机浏览器进入后台时断开",{"2":{"175":1}}],["防止",{"2":{"175":1,"801":1,"880":1}}],["防止重复触发",{"2":{"173":1}}],["防止重复回调",{"0":{"173":1}}],["防止对象被后续修改影响",{"2":{"168":1}}],["防止内存泄漏",{"2":{"168":1,"179":1}}],["防止死循环狂刷请求",{"2":{"153":1}}],["防止旧数据覆盖我们即将做的乐观更新",{"2":{"108":1}}],["防止状态隐式穿透组件边界",{"2":{"6":1}}],["防止组件",{"2":{"1":1}}],["防范状态爆炸与泄漏",{"2":{"6":1}}],["中关于运动健康方面的杂志文章",{"2":{"964":1}}],["中午若正常吃饭",{"2":{"961":1}}],["中午若吃轻食",{"2":{"961":1}}],["中年油腻",{"2":{"959":1}}],["中混写",{"2":{"934":1}}],["中无缝运行",{"2":{"934":1}}],["中嵌套了",{"2":{"933":1}}],["中嵌套层级过深",{"2":{"933":1}}],["中强行使用",{"2":{"933":1}}],["中将",{"2":{"931":1}}],["中拼装类名",{"2":{"925":1}}],["中组合这些原子类来构建样式",{"2":{"925":1}}],["中构建样式",{"2":{"925":1}}],["中包含表达式",{"2":{"774":1}}],["中多个效果器叠加的效果",{"2":{"771":1}}],["中形状图层的效果器",{"2":{"771":1}}],["中各种类型的动画属性",{"2":{"770":1}}],["中效果管理器占位",{"2":{"762":1}}],["中动画管理器覆盖",{"2":{"762":1}}],["中动画实例覆盖",{"2":{"762":1}}],["中解析数据",{"2":{"757":1}}],["中解放出来",{"2":{"406":1}}],["中制作的精美动画",{"2":{"755":1}}],["中数据空间到像素空间的映射器",{"2":{"714":1}}],["中数据获取的方式",{"2":{"80":1}}],["中自动触发",{"2":{"685":1}}],["中自动触发变更通知和脏标记",{"2":{"682":1}}],["中央处理枢纽",{"2":{"654":1}}],["中每个节点的",{"2":{"649":1}}],["中描述页面结构",{"2":{"640":1}}],["中查漏补缺",{"2":{"610":1}}],["中覆盖",{"2":{"596":1}}],["中即可",{"2":{"577":1}}],["中被",{"2":{"547":1}}],["中转",{"2":{"523":1}}],["中转与聚合平台",{"2":{"523":1}}],["中英双语实时语音转录",{"2":{"515":1}}],["中细致打磨",{"2":{"509":1}}],["中更是清晰地按点",{"2":{"508":1}}],["中二联对仗",{"2":{"507":1}}],["中二联严格对仗",{"2":{"505":1}}],["中文项目说明文档",{"2":{"762":1}}],["中文一句话出原型",{"2":{"562":1}}],["中文用户或目标平台是微信小程序",{"2":{"562":1}}],["中文体验佳",{"2":{"561":1}}],["中文即编程语言",{"2":{"525":1}}],["中文长文档理解能力国内领先",{"2":{"522":1}}],["中文长上下文最强",{"2":{"522":1}}],["中文长上下文",{"2":{"512":1}}],["中文理解与合规性优势突出",{"2":{"519":1}}],["中文无广告信息获取",{"2":{"518":1}}],["中文日常搜索",{"2":{"518":1}}],["中文资源覆盖最广",{"2":{"518":1}}],["中文学术调研",{"2":{"518":1}}],["中文内容协作",{"2":{"515":1}}],["中文内容创作",{"2":{"512":1,"522":1}}],["中文友好的",{"2":{"515":1}}],["中文轻量知识管理",{"2":{"515":1}}],["中文专业内容生成",{"2":{"512":1}}],["中文知识图谱积累深厚",{"2":{"512":1}}],["中文为主且需合规",{"2":{"523":1}}],["中文为主",{"2":{"510":1}}],["中文",{"2":{"506":1,"518":1,"530":1,"647":2,"792":1}}],["中文描述应简明扼要",{"2":{"451":1}}],["中频",{"2":{"465":1}}],["中度无奈",{"2":{"465":1}}],["中意识到错误",{"2":{"427":1}}],["中堆砌太多要求而导致的指令失效",{"2":{"415":1}}],["中实现",{"2":{"410":1}}],["中台",{"2":{"344":1}}],["中过度获取和获取不足的问题",{"2":{"342":1}}],["中大型应用全局状态",{"2":{"341":1}}],["中编写组件逻辑",{"2":{"339":1}}],["中引用",{"2":{"335":1}}],["中引用它们",{"2":{"74":1}}],["中指定的入口文件",{"2":{"334":1}}],["中设置",{"2":{"308":2,"333":1}}],["中最核心的数据流",{"2":{"745":1}}],["中最关键的部分",{"2":{"448":1}}],["中最重要的概念之一",{"2":{"281":1}}],["中最接近代数数据类型",{"2":{"230":1}}],["中间格式",{"2":{"755":1}}],["中间还要处理数据库的",{"2":{"553":1}}],["中间思考过程",{"2":{"410":1}}],["中间件数组通过",{"2":{"861":1}}],["中间件系统",{"0":{"861":1}}],["中间件包装",{"2":{"856":1}}],["中间件装饰器",{"2":{"850":1}}],["中间件",{"2":{"274":1,"275":1,"618":1}}],["中间层",{"2":{"72":1,"73":1}}],["中一种强大的类型系统特性",{"2":{"252":1}}],["中排除能赋值给",{"2":{"234":1}}],["中处理它",{"2":{"232":1}}],["中处理多态数据的推荐方式",{"2":{"230":1}}],["中配置路径别名",{"2":{"216":1}}],["中可以这样实现",{"2":{"179":1}}],["中区分处理",{"2":{"172":1}}],["中低并发选长轮询",{"2":{"155":1}}],["中声明受信的图片域名",{"2":{"84":1}}],["中直接",{"2":{"80":1}}],["中发起",{"2":{"80":1}}],["中",{"2":{"73":1,"86":1,"115":1,"145":1,"166":1,"182":1,"203":1,"263":1,"342":1,"358":1,"367":1,"415":1,"443":1,"456":1,"485":1,"496":1,"508":1,"521":1,"543":1,"591":1,"762":2,"814":1,"902":1,"907":1,"932":1}}],["中客户端",{"2":{"71":1}}],["中客户端组件标记",{"2":{"28":1}}],["中需要等待所有数据就绪才能看到任何内容",{"2":{"52":1}}],["中的标准",{"2":{"941":1}}],["中的范式",{"2":{"930":1}}],["中的纯函数",{"2":{"927":1}}],["中的事件触发器",{"2":{"884":1}}],["中的关键帧数据来自",{"2":{"770":1}}],["中的形状效果器",{"2":{"765":1}}],["中的学习笔记逐渐成熟",{"2":{"628":1}}],["中的内容",{"2":{"628":1}}],["中的内容为提示",{"2":{"573":1}}],["中的触发条件描述",{"2":{"586":1}}],["中的一些实践",{"2":{"525":1}}],["中的那点灵动",{"2":{"509":1}}],["中的崩溃隐患并直接修复",{"2":{"484":1}}],["中的代码",{"2":{"443":1}}],["中的外链规范",{"2":{"443":1}}],["中的核心价值",{"2":{"199":1}}],["中的空格",{"2":{"168":1}}],["中的数据层",{"2":{"81":1}}],["中的",{"2":{"46":1,"83":1,"231":1,"232":1,"443":2,"455":1,"924":2}}],["中创建",{"2":{"30":1}}],["中修改",{"2":{"29":1}}],["中修改内容后",{"2":{"21":1}}],["中生成",{"2":{"29":1}}],["中添加测试脚本",{"2":{"224":1}}],["中添加",{"2":{"28":1,"30":1}}],["中用",{"2":{"27":1}}],["中使用原生",{"2":{"94":1}}],["中使用",{"2":{"27":1,"216":1,"929":1,"931":3}}],["中定义",{"2":{"925":1}}],["中定义的内容模型id一致",{"2":{"26":1}}],["中定义好",{"2":{"11":1}}],["中等偏高",{"2":{"110":1}}],["中等",{"2":{"15":2,"57":2,"155":3,"928":2}}],["中徒增同步烦恼",{"2":{"5":1}}],["中明确要求",{"2":{"2":1}}],["ux",{"2":{"756":1}}],["uv",{"2":{"737":1}}],["ubo",{"2":{"734":1}}],["ubuntu",{"2":{"343":1}}],["ubiquitous",{"2":{"277":1}}],["using",{"0":{"887":1},"2":{"839":1,"879":1,"880":3,"881":2,"883":4,"884":2,"887":2,"896":2}}],["us",{"2":{"839":1}}],["usage",{"2":{"792":1,"856":1,"859":1,"868":1,"881":1}}],["usdz",{"2":{"734":1}}],["usd",{"2":{"734":1}}],["usb",{"2":{"439":2}}],["usr",{"2":{"247":1}}],["useobject",{"2":{"858":1}}],["useorder",{"2":{"280":1}}],["usecompletion",{"2":{"858":1}}],["usecoarsepointer",{"2":{"719":1}}],["usechathelpers",{"2":{"867":1}}],["usechatoptions",{"2":{"867":1}}],["usechat",{"0":{"858":1,"864":1},"2":{"843":2,"848":3,"854":1,"858":3,"864":1,"867":1}}],["usecancel",{"2":{"662":1}}],["useenvcontext",{"2":{"647":1}}],["useeffect",{"2":{"28":3,"59":1,"71":1,"74":1,"80":1,"94":1,"95":1,"97":1,"288":1}}],["useb",{"2":{"315":2}}],["uselogin",{"2":{"274":1}}],["uselocalstorage",{"2":{"263":1,"274":1}}],["usea",{"2":{"315":2}}],["useapi",{"2":{"274":3}}],["useauth",{"2":{"274":1}}],["useactiveusers",{"2":{"107":1}}],["usedirtyrect",{"2":{"719":1}}],["usedebounce",{"2":{"274":1}}],["usedefineforclassfields",{"2":{"204":1}}],["used",{"2":{"263":1}}],["usefsevents",{"2":{"203":2}}],["useupdatetodo",{"2":{"108":1}}],["useuser",{"2":{"97":1,"99":2,"100":1}}],["usemediaquery",{"2":{"274":1}}],["usememo",{"2":{"5":1,"107":1}}],["usemutation",{"2":{"104":1,"108":2,"110":1,"113":1}}],["usequeryclient",{"2":{"108":2}}],["usequery",{"2":{"103":2,"107":3}}],["usesyncexternalstore",{"2":{"850":1,"858":1}}],["useswr",{"2":{"90":1,"97":2,"99":3,"101":2}}],["usestate",{"2":{"5":1,"6":1,"28":4,"74":1,"95":1,"288":1,"289":1}}],["use",{"0":{"88":1},"2":{"28":1,"74":4,"88":2,"89":1,"90":1,"94":1,"113":1,"411":1,"706":1,"708":2,"711":1,"725":1,"806":1,"850":1,"859":1}}],["usermessage",{"2":{"887":1}}],["usermodel",{"2":{"269":5}}],["usertype",{"2":{"318":1}}],["userpanel",{"2":{"313":2}}],["userprofile",{"2":{"103":1,"184":1,"185":1}}],["user=",{"2":{"289":1}}],["userapp",{"2":{"288":9}}],["userage",{"2":{"268":1}}],["userrepository",{"2":{"278":1,"328":1}}],["userqueries",{"2":{"274":1}}],["userinput",{"2":{"489":3}}],["userinterface",{"2":{"330":1}}],["userinfo",{"2":{"288":5,"290":1}}],["userinvalid",{"2":{"268":1}}],["userid=$",{"2":{"101":1}}],["userid",{"2":{"90":1,"100":4,"103":3,"196":1,"197":1,"247":10,"278":1}}],["username",{"2":{"268":1,"330":1}}],["user>",{"2":{"261":1,"263":2}}],["user>>",{"2":{"246":1}}],["usercontainer",{"2":{"261":2}}],["userstatus",{"2":{"318":1}}],["userselectors",{"2":{"274":1}}],["userservice",{"2":{"274":1,"288":4,"290":1,"328":1,"330":3}}],["userslice",{"2":{"274":1}}],["users",{"2":{"99":1,"100":1,"107":2,"246":1,"259":2,"261":1,"266":3,"328":2,"640":1}}],["user",{"2":{"28":10,"79":2,"90":1,"97":1,"99":1,"100":5,"101":6,"103":2,"107":2,"115":1,"199":1,"233":5,"239":4,"240":5,"246":3,"247":1,"259":4,"261":1,"263":1,"266":3,"268":6,"274":2,"275":10,"280":5,"289":8,"290":2,"318":5,"327":1,"330":3,"363":1,"365":2,"451":1,"489":1,"490":1,"796":1,"854":1,"856":1,"857":1}}],["u>",{"2":{"234":2,"244":1}}],["umd",{"0":{"306":1},"2":{"203":1,"298":1,"306":4,"308":1,"702":1,"778":7}}],["ut",{"2":{"706":1}}],["utilities",{"2":{"847":1,"848":1}}],["utility",{"0":{"925":1},"1":{"926":1},"2":{"340":1,"398":1,"925":1,"928":1,"930":1,"933":1}}],["util",{"2":{"275":2,"280":2,"647":3,"677":1,"679":1,"693":1,"706":1}}],["util工具类替代第三方库",{"2":{"194":1}}],["utils",{"2":{"99":1,"203":7,"274":2,"275":1,"280":2,"290":1,"318":1,"335":1,"484":1,"646":2,"647":3,"734":5,"762":1,"764":5,"769":1,"770":1,"771":1,"792":2,"847":2,"848":1,"849":1,"872":1}}],["utf8",{"2":{"203":1}}],["utf",{"2":{"124":1,"127":1}}],["u",{"2":{"29":1,"234":3,"244":1,"261":2,"263":1}}],["unmute",{"2":{"767":1,"777":1}}],["unfreeze",{"2":{"767":1,"777":1}}],["unfinished",{"2":{"712":1}}],["unpkg",{"2":{"696":1}}],["uncertainty",{"2":{"617":1}}],["unix",{"2":{"898":1}}],["uniformnode",{"2":{"741":1}}],["uniforms",{"2":{"742":1}}],["uniformsutils",{"2":{"734":1}}],["uniformslib",{"2":{"734":1}}],["uniformsgroup",{"2":{"734":2}}],["uniform",{"2":{"734":9,"741":2}}],["unit",{"2":{"523":1,"677":2,"734":1}}],["unittestspec",{"2":{"442":1}}],["universal",{"2":{"306":2}}],["union",{"0":{"230":1}}],["unknown>>",{"2":{"866":1}}],["unknown>",{"2":{"179":1,"806":6,"866":1}}],["unknown",{"2":{"175":2,"178":1,"227":1,"244":11,"250":2,"806":2,"866":3}}],["undefined>",{"2":{"806":1}}],["undefined",{"2":{"101":1,"166":1,"179":1,"203":1,"259":4,"261":2,"263":1,"315":1,"486":1,"489":1,"663":1,"692":4,"776":1,"800":1,"806":2,"820":1,"832":1,"833":1,"839":2,"866":1,"867":2}}],["underline",{"2":{"27":1,"28":1}}],["unsplash",{"2":{"84":2}}],["unsubscribe",{"2":{"28":1}}],["uuid",{"2":{"28":2,"748":3}}],["url=your",{"2":{"481":1}}],["url=你的项目url",{"2":{"28":1}}],["url",{"2":{"26":1,"28":1,"29":1,"33":1,"35":1,"39":1,"52":1,"59":1,"97":2,"99":2,"104":1,"110":1,"112":1,"131":2,"134":1,"136":1,"142":1,"143":2,"163":2,"166":3,"174":1,"481":1,"523":1,"561":1,"562":1,"568":1,"636":1,"654":4,"662":3,"668":1,"799":1,"806":4,"807":2,"814":2,"839":1,"857":1}}],["uptime",{"2":{"807":1}}],["upgrade",{"2":{"126":2}}],["updateafter",{"2":{"748":1}}],["updateaftertype",{"2":{"748":1}}],["updatebefore",{"2":{"748":1}}],["updatebeforetype",{"2":{"748":1}}],["updatechildren",{"2":{"748":1}}],["updateparents",{"2":{"748":1}}],["updateworldmatrix",{"2":{"748":1}}],["updatematrixworld",{"2":{"740":1,"748":1}}],["updatematrix",{"2":{"740":1,"748":1}}],["updatetype",{"2":{"733":1,"741":1,"748":1}}],["updatelifecyclehandler",{"2":{"720":1}}],["updatelocation",{"2":{"662":1}}],["updatedocumentdata",{"2":{"777":1}}],["updated",{"2":{"713":1}}],["updatedata",{"2":{"705":1}}],["updatedat",{"2":{"240":1,"248":2,"269":3}}],["update",{"2":{"275":1,"667":1,"743":2,"748":1,"792":1}}],["updatestyle",{"2":{"748":1}}],["updates",{"0":{"108":1},"2":{"103":1}}],["updateusernameonserver",{"2":{"100":1}}],["up",{"2":{"6":2,"97":1,"583":1,"954":3}}],["uimessage>",{"2":{"866":1,"867":1}}],["uimessagechunk>",{"2":{"858":1}}],["uimessage",{"2":{"854":2,"858":1,"867":1}}],["uimessagestream",{"2":{"844":1,"858":1,"859":2,"864":1}}],["uislice",{"2":{"274":1}}],["uint8array>",{"2":{"833":1,"840":1}}],["uint8array",{"2":{"166":1,"168":3,"840":4}}],["ui",{"0":{"100":2,"108":1,"339":1,"340":1,"350":1,"858":1},"2":{"1":2,"2":4,"3":1,"5":2,"7":1,"11":2,"12":1,"71":1,"78":2,"86":1,"88":1,"95":4,"97":2,"100":2,"103":1,"104":2,"110":1,"113":1,"249":1,"269":1,"270":1,"274":4,"280":3,"286":1,"290":2,"291":1,"340":4,"342":4,"349":1,"367":1,"408":1,"414":1,"418":2,"448":1,"451":1,"462":1,"543":5,"553":2,"561":7,"562":4,"639":3,"641":1,"643":1,"645":4,"646":2,"647":40,"649":1,"650":1,"653":1,"656":1,"659":1,"661":1,"701":1,"706":2,"709":1,"712":1,"756":3,"786":1,"790":1,"792":4,"797":1,"800":2,"806":2,"842":2,"843":1,"844":1,"854":1,"858":4,"866":3,"867":3,"881":2,"888":2,"924":1,"926":1,"927":4,"928":8,"930":3,"932":1,"934":5}}],["它需要自己去寻找",{"2":{"939":1}}],["它需要根据你的",{"2":{"934":1}}],["它本质上是一场对抗系统熵增的架构实践",{"2":{"934":1}}],["它本质上仍是单向通信",{"2":{"180":1}}],["它本质上仍是",{"2":{"119":1}}],["它具备无需起类名",{"2":{"925":1}}],["它具备以下四大核心特质",{"2":{"402":1}}],["它也是最早也是最基础的工程化方案",{"2":{"921":1}}],["它出现某一个结果的频率就等于其概率",{"2":{"917":1}}],["它既包括一些成长书中所谓的使命感",{"2":{"906":1}}],["它既不过于复杂",{"2":{"60":1}}],["它管理多维数据",{"2":{"713":1}}],["它自动采集多个中英文优质信息数据源",{"2":{"632":1}}],["它回应了一个根本问题",{"2":{"628":1}}],["它必然无法记录下大量不稳定",{"2":{"614":1}}],["它引导我们完成从",{"2":{"602":1}}],["它教导我们如何拒绝低效的内卷与忙碌",{"2":{"601":1}}],["它教会我们在纷杂的需求和技术选项中",{"2":{"201":1}}],["它有独立的判断空间",{"2":{"592":1}}],["它没有任何",{"2":{"590":1}}],["它没有试图做",{"2":{"66":1}}],["它往往会为自己的代码辩护",{"2":{"590":1}}],["它执行",{"2":{"590":1}}],["它立即执行",{"2":{"585":1}}],["它做的第一件事就是读取",{"2":{"571":1}}],["它正在邀请我们",{"2":{"558":1}}],["它意味着你能利用",{"2":{"555":1}}],["它缺乏对特定代码规范",{"2":{"536":1}}],["它应当已在隔离的沙盒环境中",{"2":{"535":1}}],["它应该能存储任意类型",{"2":{"256":1}}],["它像一根杠杆",{"2":{"528":1}}],["它像是对个体能力边界的一次浪漫想象",{"2":{"457":1}}],["它起于汉族民间歌谣",{"2":{"506":1}}],["它解决了以下核心痛点",{"2":{"478":1}}],["它解决了前端开发中手动处理服务端数据的一系列痛点",{"2":{"103":1}}],["它包含精准的判断力",{"2":{"463":1}}],["它无法被",{"2":{"460":2}}],["它知道向用户或代码库索要什么依赖信息吗",{"2":{"450":1}}],["它分为",{"2":{"439":1}}],["它以文件夹的形式",{"2":{"437":1}}],["它采用渐进式加载机制",{"2":{"436":1}}],["它采用现代",{"2":{"344":2}}],["它随叫随到",{"2":{"435":1}}],["它并不试图创造新的语法",{"2":{"923":1}}],["它并不是在执行死板的脚本",{"2":{"431":1}}],["它并非为特定单一任务",{"2":{"414":1}}],["它并非玄学",{"2":{"363":1}}],["它并非",{"2":{"71":1}}],["它利用最强模型的逻辑能力",{"2":{"429":1}}],["它完美体现了前文提到的",{"2":{"427":1}}],["它完全依赖",{"2":{"927":1}}],["它完全基于标准",{"2":{"143":1}}],["它完全复用现有的",{"2":{"143":1}}],["它决定了",{"2":{"421":1}}],["它决定了我们能否从",{"2":{"358":1}}],["它证明了自主智能体的真正力量不在于模型有多大",{"2":{"419":1}}],["它可以极其方便地读取",{"2":{"922":1}}],["它可以直接接收图片",{"2":{"418":1}}],["它可以帮助开发者应对不断增长的应用复杂度",{"2":{"293":1}}],["它可以帮助开发者发现代码中的问题",{"2":{"219":1}}],["它从不亲自查资料",{"2":{"416":1}}],["它才真正具备了从",{"2":{"410":1}}],["它受限于",{"2":{"410":1}}],["它提醒我们",{"2":{"381":1}}],["它提供了一套精心设计",{"2":{"340":1}}],["它提供了简单",{"2":{"220":1}}],["它为了这个体验",{"2":{"374":1}}],["它极其大胆地",{"2":{"373":1}}],["它极其擅长顺着你给定的逻辑生成答案",{"2":{"358":1}}],["它满足了哪个层级的需求",{"2":{"373":1}}],["它要求系统在长上下文环境下",{"2":{"467":1}}],["它要求我们敏锐地发现那些",{"2":{"365":1}}],["它要求响应头强制设定为",{"2":{"121":1}}],["它似乎是乔布斯式的灵光一现",{"2":{"363":1}}],["它充当了用户的思考辅助工具",{"2":{"350":1}}],["它零配置",{"2":{"345":1}}],["它集成了",{"2":{"344":1}}],["它融合了",{"2":{"344":2}}],["它被设计为",{"2":{"343":1}}],["它摒弃了",{"2":{"343":1}}],["它直接消灭了",{"2":{"342":1}}],["它让我更加确信",{"2":{"495":1}}],["它让我们在追求创新的同时",{"2":{"201":1}}],["它让",{"2":{"491":1,"934":1}}],["它让专业的人做专业的事",{"2":{"457":1}}],["它让前端能像调用本地函数一样调用后端远程函数",{"2":{"342":1}}],["它专注于为",{"2":{"343":1}}],["它专注于处理异步数据的获取",{"2":{"342":1}}],["它专门为",{"2":{"120":1}}],["它基于记忆来决策",{"2":{"412":1}}],["它基于",{"2":{"342":1}}],["它支持拦截请求和响应",{"2":{"342":1}}],["它支持运行时按需加载",{"2":{"313":1}}],["它强调组件化开发",{"2":{"339":1}}],["它强调通过深入理解业务领域",{"2":{"276":1}}],["它在内部构建依赖图",{"2":{"343":1}}],["它在前端开发中得到广泛应用",{"2":{"338":1}}],["它在类型层面保留冲突结果",{"2":{"237":1}}],["它定义了文档的外观",{"2":{"338":1}}],["它定义了模型的边界",{"2":{"281":1}}],["它使用标签来定义文档的不同部分",{"2":{"338":1}}],["它背后有一套精密的查找优先级逻辑",{"2":{"334":1}}],["它已成为",{"2":{"316":1}}],["它允许用户直接从",{"2":{"345":1}}],["它允许在代码仓库中直接定义自动化流程",{"2":{"343":1}}],["它允许页面在不重载的情况下从服务器获取数据",{"2":{"342":1}}],["它允许开发者利用",{"2":{"922":1}}],["它允许开发者用特殊语法编写样式",{"2":{"921":1}}],["它允许开发者设计简单的视图",{"2":{"339":1}}],["它允许开发者使用",{"2":{"338":1}}],["它允许我们在不修改源代码的情况下",{"2":{"321":1}}],["它允许一个模块暴露多个成员",{"2":{"310":1}}],["它允许多个",{"2":{"288":1}}],["它规定每个文件都是一个独立的模块",{"2":{"304":1}}],["它是实现",{"2":{"932":1}}],["它是实现暗黑模式",{"2":{"929":1}}],["它是有公式可循",{"2":{"383":1}}],["它是如何让你忍不住想分享给别人的",{"2":{"373":1}}],["它是帮你省了时间",{"2":{"373":1}}],["它是否承担了不该属于它的因果",{"2":{"337":1}}],["它是",{"2":{"304":1,"338":2,"934":1}}],["它是一种将",{"2":{"925":1}}],["它是一种提升",{"2":{"426":1}}],["它是一种基于",{"2":{"125":1,"130":1}}],["它是一个包含完整指令说明",{"2":{"441":1}}],["它是一个自包含的工作空间",{"2":{"437":1}}],["它是一个",{"2":{"166":1}}],["它更像是一种对抗软件生命周期中",{"2":{"303":1}}],["它通过",{"2":{"902":1}}],["它通过内置的服务器端渲染",{"2":{"344":1}}],["它通过类型导出导入",{"2":{"317":1}}],["它通过一个立即执行函数",{"2":{"306":1}}],["它通过构建明确的边界",{"2":{"296":1}}],["它通过将复杂系统拆分为多个相互依赖的小模块",{"2":{"296":1}}],["它通过将复杂系统拆分为独立可复用的模块",{"2":{"272":1}}],["它通过将大型前端应用拆分为多个独立的子应用",{"2":{"292":1}}],["它通过对响应机制的巧妙",{"2":{"116":1}}],["它就会呈现出两种截然不同的状态",{"2":{"384":1}}],["它就拥有了无限长的跑道",{"2":{"379":1}}],["它就属于这个交集",{"2":{"236":1}}],["它就绝对不是",{"2":{"5":1}}],["它把",{"2":{"230":1}}],["它封装了完整的",{"2":{"167":1}}],["它只要看一眼你的",{"2":{"934":1}}],["它只负责按照清单逐一执行",{"2":{"429":1}}],["它只能处理单行",{"2":{"166":1}}],["它只是消灭了",{"2":{"558":1}}],["它只是在",{"2":{"66":1}}],["它只是把",{"2":{"66":1}}],["它负责解析",{"2":{"163":1}}],["它介于纯轮询和持久长连接之间",{"2":{"150":1}}],["它会导致",{"2":{"933":1}}],["它会根据上下文自行判断是否该出手",{"2":{"584":1}}],["它会优先生效",{"2":{"571":1}}],["它会先用大模型理解意图",{"2":{"517":1}}],["它会主动拆解目标并寻找路径",{"2":{"402":1}}],["它会主动向客户端注册的",{"2":{"131":1}}],["它会让原因和结果在时空上错位",{"2":{"388":1}}],["它会渗透到代码设计的方方面面",{"2":{"271":1}}],["它会自动",{"2":{"231":1}}],["它会被传递给",{"2":{"108":1}}],["它不是官方标准",{"2":{"923":1}}],["它不是一个冷冰冰的解题机",{"2":{"492":1}}],["它不是让我们",{"2":{"201":1}}],["它不会为一个微小的不合理现象而抓狂",{"2":{"362":1}}],["它不会等待内部的异步数据",{"2":{"86":1}}],["它不仅是值得探索的领域",{"2":{"934":1}}],["它不仅是一个",{"2":{"419":1}}],["它不仅是指令的输出者",{"2":{"412":1}}],["它不仅能界定机器智能的边界",{"2":{"598":1}}],["它不仅能",{"2":{"418":1}}],["它不仅提高了任务的完成上限",{"2":{"415":1}}],["它不仅提取相关网页段落",{"2":{"349":1}}],["它不仅仅是一个搜索工具",{"2":{"356":1}}],["它不仅仅是一个简单的搜索工具",{"2":{"417":1}}],["它不仅仅是一个简单的",{"2":{"125":1}}],["它不仅解决了",{"2":{"316":1}}],["它不仅统一了全栈开发的模块标准",{"2":{"307":1}}],["它不仅抹平了命名冲突",{"2":{"303":1}}],["它们构成一条知识加工流水线",{"2":{"631":1}}],["它们教导我们不再做时代的被动旁观者",{"2":{"604":1}}],["它们可以交叉进行",{"2":{"464":1}}],["它们是专攻特定细分任务的",{"2":{"438":1}}],["它们正以不同的进化路径渗透进各种复杂的生产场景",{"2":{"413":1}}],["它们之间存在一个时间差",{"2":{"388":1}}],["它们之间有个时间差",{"2":{"388":1}}],["它们之间是因增强果",{"2":{"385":1}}],["它们模糊了客户端和服务器的界限",{"2":{"344":1}}],["它们的定位已截然不同",{"2":{"320":1}}],["它们会试图",{"2":{"119":1}}],["它们层层递进",{"2":{"72":1}}],["它依然维持着半双工通信的本质",{"2":{"115":1}}],["它构筑了现代",{"2":{"115":1}}],["它内置了极其优雅的",{"2":{"110":1}}],["它进入",{"2":{"104":1}}],["它实际上是向这个",{"2":{"104":1}}],["它能做什么",{"2":{"448":1}}],["它能自动识别出",{"2":{"418":1}}],["它能结合图像细节与文本逻辑",{"2":{"418":1}}],["它能感知环境反馈",{"2":{"417":1}}],["它能跨越不同的文档格式与存储介质",{"2":{"417":1}}],["它能从交互中记住你的个人偏好",{"2":{"414":1}}],["它能像人一样",{"2":{"402":1}}],["它能实时调整策略",{"2":{"402":1}}],["它能处理复杂的开发需求",{"2":{"343":1}}],["它能完美模拟",{"2":{"118":1}}],["它能极大简化数据交互逻辑",{"2":{"103":1}}],["它能让你专注于产品本身",{"2":{"32":1}}],["它适用两类场景",{"2":{"88":1}}],["它的职责不是执行任何业务逻辑",{"2":{"887":1}}],["它的职责是将规划阶段生成的",{"2":{"412":1}}],["它的不足在于缺乏灵活性",{"2":{"423":1}}],["它的终点是",{"2":{"376":1}}],["它的前端可能用了什么技术栈",{"2":{"374":1}}],["它的复杂度会呈指数级上升",{"2":{"327":1}}],["它的核心价值在于将复杂的",{"2":{"478":1}}],["它的核心逻辑是直接将自然任务细化为子任务",{"2":{"425":1}}],["它的核心增长飞轮是什么",{"2":{"373":1}}],["它的核心优势在于将网站构建",{"2":{"345":1}}],["它的核心理念简洁而优雅",{"2":{"294":1}}],["它的核心思想是",{"2":{"97":1,"146":1,"230":1}}],["它的工程化上限更高",{"2":{"111":1}}],["它的工作方式分两步",{"2":{"87":1}}],["它的设计目标是简化数据获取和缓存的过程",{"2":{"97":1}}],["它的设计目标非常明确",{"2":{"60":1}}],["它的",{"2":{"97":1,"470":1}}],["它变成了流式渲染的边界标记",{"2":{"86":1}}],["它代表了一种趋势",{"2":{"55":1}}],["它与工程力是相加关系",{"2":{"556":1}}],["它与",{"2":{"10":1,"263":1}}],["它将我们在上面三层编写的所有代码",{"2":{"932":1}}],["它将高频使用的方法固化下来",{"2":{"436":1}}],["它将原本",{"2":{"417":1}}],["它将系统分为多个层次",{"2":{"273":1}}],["它将构建时生成的静态页面从",{"2":{"50":1}}],["它将是后续引入状态与副作用时唯一可信的回滚锚点",{"2":{"3":1}}],["它将",{"2":{"2":1,"770":1}}],["先治病救命",{"2":{"938":1}}],["先写代码",{"2":{"890":1}}],["先写测试",{"2":{"9":1}}],["先标准化",{"2":{"863":1}}],["先想清楚这几件事",{"0":{"519":1}}],["先用",{"2":{"518":1,"559":1}}],["先加载元信息",{"2":{"436":1}}],["先出方案",{"2":{"431":1}}],["先将复杂任务拆解为多个子任务",{"2":{"423":1}}],["先分解后规划的优势在于任务与原任务联系紧密",{"2":{"423":1}}],["先分解后规划",{"0":{"423":1}}],["先由一个",{"2":{"414":1}}],["先问",{"2":{"366":1}}],["先问自己三个关键问题",{"2":{"5":1}}],["先打包",{"2":{"343":1}}],["先返回缓存数据",{"2":{"342":1}}],["先检查",{"2":{"199":1}}],["先怀疑",{"2":{"199":1}}],["先验证",{"2":{"198":1}}],["先获取当前登录的用户信息",{"2":{"101":1}}],["先驱",{"2":{"19":1}}],["先编写测试用例",{"2":{"9":1}}],["先做灵魂三问",{"2":{"5":1}}],["先让用户看到内容",{"0":{"86":1}}],["先让",{"2":{"3":1,"375":1}}],["状态函数",{"2":{"934":1}}],["状态映射原子类",{"2":{"928":1}}],["状态变体类名",{"2":{"927":1}}],["状态变更只沿单向轨道流动",{"2":{"6":1}}],["状态机与类型安全",{"2":{"927":1}}],["状态机与时间控制",{"2":{"104":1}}],["状态机",{"2":{"734":1,"833":1}}],["状态锚定在任务清单",{"2":{"432":1}}],["状态随交互实时变化",{"2":{"432":1}}],["状态调度",{"2":{"342":2}}],["状态时",{"2":{"148":1}}],["状态维护与内存开销",{"2":{"129":1}}],["状态监控",{"2":{"123":1}}],["状态追踪防止重复回调",{"2":{"175":1}}],["状态追踪",{"2":{"122":1,"175":1}}],["状态码拦截与静默错误上报",{"2":{"342":1}}],["状态码才视为成功",{"2":{"133":1}}],["状态码",{"2":{"126":1}}],["状态码后",{"2":{"117":1}}],["状态码并抛出规范化错误",{"2":{"99":1}}],["状态的管理",{"2":{"95":1}}],["状态可严格区分为",{"2":{"95":1}}],["状态定位",{"2":{"12":1}}],["状态是应用的核心骨架",{"2":{"10":1}}],["状态管理系统",{"0":{"653":1},"2":{"647":1}}],["状态管理库横向对比分析",{"2":{"341":1}}],["状态管理",{"2":{"341":3,"641":1,"642":1,"645":1,"706":1,"732":1}}],["状态管理层",{"2":{"274":2}}],["状态管理进行整合",{"2":{"95":1}}],["状态管理模块",{"2":{"10":1}}],["状态管理与业务逻辑",{"2":{"2":1}}],["状态突变",{"2":{"7":1}}],["状态下沉",{"2":{"6":1}}],["状态提升",{"2":{"6":1}}],["状态",{"2":{"5":1,"80":1,"95":1,"97":1,"101":1,"104":1,"115":1,"129":1,"394":1,"581":1,"801":1,"807":2,"858":1,"895":1}}],["本阶段主要吸收更多减肥方面的常识和习惯来调整减肥策略",{"2":{"962":1}}],["本站的核心架构基于以下优秀项目构建",{"2":{"904":1}}],["本站也是人机协作",{"2":{"903":1}}],["本次漫谈笔者会结合自己的经验",{"2":{"936":1}}],["本次继续新增一篇中短文",{"2":{"906":1}}],["本次分析生成",{"2":{"706":1,"762":1}}],["本次实践的核心",{"2":{"503":1}}],["本次实践中最核心的目标",{"2":{"503":1}}],["本次实践选择在文心智能体平台上进行",{"2":{"498":1}}],["本项目是",{"2":{"699":1}}],["本项目基于",{"2":{"467":1}}],["本技能执行以下检查",{"2":{"586":1}}],["本技能旨在确保仓库的提交历史清晰",{"2":{"451":1}}],["本机状态",{"2":{"570":1}}],["本诗以五言律诗形式勾勒美人神韵",{"2":{"507":1}}],["本地守护进程",{"2":{"792":1}}],["本地目录无需额外配置",{"2":{"636":1}}],["本地模型",{"2":{"573":1}}],["本地个人偏好覆盖",{"2":{"570":1}}],["本地个性化设置",{"2":{"570":1}}],["本地私有配置",{"2":{"570":1}}],["本地优先数据安全",{"2":{"565":1}}],["本地优先",{"2":{"564":1,"565":1}}],["本地文件系统",{"2":{"548":1}}],["本地部署",{"2":{"523":1}}],["本地生活服务",{"2":{"518":1}}],["本地化",{"2":{"510":1}}],["本地",{"2":{"451":1,"790":1}}],["本地表单步骤",{"2":{"97":1}}],["本篇文章到此结束",{"2":{"433":1}}],["本文对六大主流方案进行了系统梳理",{"2":{"928":1}}],["本文就从",{"2":{"569":1}}],["本文旨在通过对",{"2":{"348":1}}],["本文我们将聚焦于",{"2":{"317":1}}],["本文将深入剖析这六大主流方案的核心原理",{"2":{"928":1}}],["本文将深入探讨两种常用的",{"2":{"145":1}}],["本文将基于",{"2":{"477":1,"525":1}}],["本文将分享我基于",{"2":{"467":1}}],["本文将重点介绍大型项目中的模块化设计",{"2":{"272":1}}],["本文将围绕",{"2":{"114":1}}],["本文提到的代码示例",{"2":{"94":1}}],["本章将剖析",{"2":{"60":1}}],["本质",{"2":{"590":1}}],["本质是在多个能同等解释现象的理论中",{"2":{"181":1}}],["本质权衡",{"2":{"37":1,"41":1,"45":1,"50":1,"55":1}}],["本质上取决于它对业务语境的理解深度",{"2":{"536":1}}],["本质上也是同理心与批判性思维的结合",{"2":{"366":1}}],["本质上都是在",{"2":{"359":1}}],["本质上都是在性能",{"2":{"67":1}}],["本质上与软件设计中",{"2":{"271":1}}],["本质上就是",{"2":{"437":1}}],["本质上就是为了",{"2":{"382":1}}],["本质上就是判断某个具体的值是否落在类型所对应的集合之中",{"2":{"227":1}}],["本质上就是一种显式契约",{"2":{"11":1}}],["本质上是理解数据",{"2":{"598":1}}],["本质上是为我们展现了一个软件工程的",{"2":{"539":1}}],["本质上是通过清晰的语法结构",{"2":{"509":1}}],["本质上是让",{"2":{"415":1,"438":1}}],["本质上是从",{"2":{"403":1}}],["本质上是一件极其消耗系统资源",{"2":{"621":1}}],["本质上是一部不断通过",{"2":{"525":1}}],["本质上是一种寻找",{"2":{"365":1}}],["本质上是一个超级",{"2":{"358":1}}],["本质上是将工程质量的保障从",{"2":{"326":1}}],["本质上是整个工程界对于",{"2":{"303":1}}],["本质上是在升级我们资深的",{"2":{"598":1}}],["本质上是在学习如何利用",{"2":{"491":1}}],["本质上是在掌握一种确定性",{"2":{"316":1}}],["本质上是在",{"2":{"66":1}}],["本质上是对应用随时间变化产生的差异的建模",{"2":{"5":1}}],["本身是一个优秀的规范",{"2":{"920":1}}],["本身就有重连机制",{"2":{"822":1}}],["本身就是一个伪命题",{"2":{"466":1}}],["本身就是一种极具穿透力的品牌资产",{"2":{"380":1}}],["本身就是基于",{"2":{"16":1}}],["本身不进行绘制",{"2":{"680":1}}],["本身不会直接让",{"2":{"443":1}}],["本身关系不大",{"2":{"613":1}}],["本身在处理实时信息",{"2":{"411":1}}],["本身",{"2":{"1":1}}],["择优与人工代码融合",{"2":{"3":1}}],["择优验证后再整合到正式项目中",{"2":{"3":1}}],["横向对比",{"2":{"3":1}}],["人要怎么做才能既不失业",{"2":{"954":1}}],["人要独立",{"2":{"907":1}}],["人被技术圈和社会圈包裹了起来",{"2":{"938":1}}],["人无作息规律地熬一天不累",{"2":{"938":1}}],["人越有信用",{"2":{"908":1}}],["人越是积累了知识",{"2":{"908":1}}],["人",{"2":{"907":1}}],["人按学习目标来记录",{"2":{"628":1}}],["人侧重",{"2":{"628":1}}],["人学习与总结为主",{"2":{"628":1}}],["人不主动修改",{"2":{"628":1}}],["人差",{"2":{"626":1}}],["人终归只能赚到自己系统架构支撑得起的那部分收益",{"2":{"622":1}}],["人的不可替代价值",{"2":{"628":1}}],["人的角色是引导方向",{"2":{"628":1}}],["人的核心竞争力永远是",{"2":{"622":1}}],["人的脑容量和认知带宽是有限的",{"2":{"621":1}}],["人的直觉也一样",{"2":{"369":1}}],["人本身的差距",{"2":{"616":1}}],["人才",{"2":{"612":1}}],["人文哲思调剂圈",{"2":{"947":1}}],["人文思考的终极价值",{"2":{"604":1}}],["人文社科",{"0":{"604":1}}],["人生有限公司",{"2":{"603":1}}],["人生不是一场盲目的长跑",{"2":{"603":1}}],["人格",{"2":{"570":1}}],["人与自然之间的距离也就越来越远了",{"2":{"938":1}}],["人与人之间均是如此",{"2":{"908":1}}],["人与人之间的差距将被什么拉开",{"2":{"357":1}}],["人与物",{"2":{"908":1}}],["人与事",{"2":{"908":1}}],["人与单一窗口的对话",{"2":{"535":1}}],["人名等关键事实",{"2":{"518":1}}],["人为提升了核心指令的权重",{"2":{"509":1}}],["人神道殊",{"2":{"508":1}}],["人味",{"2":{"499":1}}],["人话",{"2":{"493":1}}],["人们已在疫情中适应了远程办公",{"2":{"957":1}}],["人们选择了各种各样的方式",{"2":{"945":1}}],["人们给增强回路导致的大起大落现象",{"2":{"909":1}}],["人们给这种现象起了无数霸气的名字",{"2":{"386":1}}],["人们更容易陷入概念世界的迷障",{"2":{"908":1}}],["人们最终能获得的价值",{"2":{"622":1}}],["人们经常陷入",{"2":{"616":1}}],["人们对一个",{"2":{"419":1}}],["人们往往无法客观地从未来的成本收益出发做决策",{"2":{"393":1}}],["人们在解决问题上表现出的原创性",{"2":{"358":1}}],["人性微妙之处",{"2":{"375":1}}],["人机协同",{"2":{"550":1}}],["人机辩论",{"2":{"375":1,"903":1}}],["人机结对审查",{"2":{"3":1}}],["人类可读的设计意图说明",{"2":{"881":1}}],["人类可以清晰地看到",{"2":{"427":1}}],["人类用户",{"2":{"790":1}}],["人类主导",{"2":{"628":1}}],["人类在知识管理中的不可替代价值究竟是什么",{"2":{"628":1}}],["人类必须专注于",{"2":{"555":1}}],["人类偏好对齐",{"2":{"551":1}}],["人类的品位与责任感",{"2":{"539":1}}],["人类则专注于验收与精炼",{"2":{"527":1}}],["人类负责决策与审美",{"2":{"406":1}}],["人类负责制定规范",{"2":{"8":1}}],["人类转型为监督者和资源提供者",{"2":{"403":1}}],["人类现有共识",{"2":{"360":1}}],["人类聚焦于",{"2":{"11":1}}],["人工只做",{"2":{"568":1}}],["人工仅负责处理极端复杂的情感诉求",{"2":{"405":1}}],["人工智能等",{"2":{"346":1}}],["人工",{"2":{"9":2}}],["人工裁决",{"2":{"2":1}}],["此回调会被所有事件调用",{"2":{"839":1}}],["此库进一步增强",{"2":{"822":1}}],["此诗以七言律诗重构",{"2":{"508":1}}],["此诗以五言律诗刻画美人风姿",{"2":{"505":1}}],["此部分需以",{"2":{"494":1}}],["此外",{"2":{"392":1,"468":1}}],["此处的匿名函数会抛出错误或返回",{"2":{"101":1}}],["此后被社会打磨得多了",{"2":{"908":1}}],["此后",{"2":{"29":1}}],["此时可以在",{"2":{"596":1}}],["此时才正式获取",{"2":{"443":1}}],["此时的核心策略是将重复性的工作外包或交给代码",{"2":{"378":1}}],["此时客户端不需要",{"2":{"153":1}}],["此时若强行使用",{"2":{"143":1}}],["此时后端必须引入",{"2":{"129":1}}],["此时",{"2":{"8":1,"387":1,"429":1}}],["此时全自动化与半自动化两条线并行推进",{"2":{"3":1}}],["此过程不需要过多的逻辑烧脑",{"2":{"3":1}}],["规格合规",{"2":{"889":1}}],["规格合规审查子agent提示词",{"2":{"881":1}}],["规格自我审查",{"2":{"888":1}}],["规格",{"2":{"884":1}}],["规格文档自我审查提示词",{"2":{"881":1}}],["规格+质量",{"2":{"876":1}}],["规格驱动开发",{"2":{"11":1,"525":1}}],["规避",{"2":{"493":1}}],["规避后期可能出现的视觉返工",{"2":{"3":1}}],["规整工作台",{"2":{"437":1}}],["规划并执行复杂工程任务的",{"2":{"569":1}}],["规划产品功能",{"2":{"542":1}}],["规划决策和工具调用",{"2":{"478":1}}],["规划时机",{"2":{"432":1}}],["规划器首先介入",{"2":{"429":1}}],["规划器",{"2":{"429":1}}],["规划与执行分离",{"2":{"428":1}}],["规划与记忆",{"2":{"402":1}}],["规划模块赋予了",{"2":{"433":1}}],["规划模块的两大支柱",{"2":{"433":1}}],["规划模块中",{"2":{"426":1}}],["规划模块正是它的",{"2":{"421":1}}],["规划是",{"0":{"433":1},"2":{"412":1}}],["规划",{"0":{"409":1},"2":{"408":1,"422":1,"478":1,"542":1}}],["规划阶段",{"2":{"9":2}}],["规模效应与锚定效应",{"2":{"392":1}}],["规模量控制",{"2":{"329":1}}],["规律",{"2":{"242":1}}],["规则很简单",{"2":{"917":1}}],["规则要具体",{"2":{"578":1}}],["规则文件的组织建议",{"0":{"578":1}}],["规则文件支持",{"2":{"576":1}}],["规则可能因技术演进而频繁变化",{"2":{"577":1}}],["规则需要团队协作维护",{"2":{"577":1}}],["规则与特定目录强相关",{"2":{"577":1}}],["规则",{"2":{"160":1,"250":1,"442":1,"877":1,"887":1}}],["规范驱动",{"2":{"494":1}}],["规范驱动开发",{"0":{"8":1},"1":{"9":1,"10":1,"11":1},"2":{"8":1,"12":1,"901":1}}],["规范说明",{"2":{"330":1}}],["规范对比与现代迁移指南",{"0":{"308":1}}],["规范",{"0":{"304":1,"305":1,"306":1,"494":1},"2":{"308":1,"342":1,"441":1,"442":1,"573":1,"857":1}}],["规范化",{"2":{"175":1}}],["规范化的单向推送协议",{"0":{"120":1},"1":{"121":1,"122":1,"123":1,"124":1}}],["规范先行",{"2":{"9":1}}],["规范成为",{"2":{"9":1}}],["规范的声明文件以及现代的编译配置",{"2":{"326":1}}],["规范的质量直接决定了代码的质量",{"2":{"9":1}}],["规范的静态组件骨架",{"2":{"3":1}}],["规范是一份可执行的契约",{"2":{"9":1}}],["编织成一条可持续",{"2":{"434":1}}],["编排的一线经验",{"2":{"901":1}}],["编排",{"2":{"544":1}}],["编排类",{"2":{"411":1}}],["编排层",{"2":{"279":1}}],["编程磨合的实践",{"2":{"901":1}}],["编程领域经历了剧烈的范式震荡",{"2":{"569":1}}],["编程代理",{"2":{"567":1}}],["编程",{"2":{"567":2,"921":1}}],["编程体验",{"2":{"565":1}}],["编程与应用",{"2":{"905":1}}],["编程与",{"2":{"557":1}}],["编程与设计中应用奥卡姆剃刀的核心场景",{"0":{"182":1},"1":{"183":1,"184":1,"185":1,"186":1,"187":1,"188":1,"189":1,"190":1,"191":1,"192":1,"193":1,"194":1,"195":1,"196":1,"197":1,"198":1,"199":1}}],["编程助手",{"2":{"542":1}}],["编程技能萎缩",{"2":{"525":1}}],["编程工具快速实现",{"2":{"552":1}}],["编程工具的助力下",{"2":{"361":1}}],["编程工具",{"2":{"3":1,"564":1}}],["编码平台适配器",{"2":{"884":1}}],["编码助手从",{"2":{"874":1}}],["编码规范",{"2":{"575":1}}],["编码风格等",{"2":{"570":1}}],["编码",{"2":{"564":1,"874":2,"875":1}}],["编码工具",{"2":{"561":1}}],["编码实现了",{"2":{"494":1}}],["编码实现",{"2":{"282":1}}],["编码转换",{"2":{"127":1}}],["编码阶段的执行力",{"2":{"1":1}}],["编译管道",{"0":{"932":1},"2":{"928":1}}],["编译阶段",{"2":{"748":1}}],["编译引擎",{"2":{"734":1,"741":1}}],["编译到",{"2":{"729":1}}],["编译+打包+压缩",{"2":{"697":1}}],["编译配置",{"2":{"677":1,"706":1}}],["编译配置与",{"0":{"202":1},"1":{"203":1,"204":1}}],["编译速度快",{"2":{"642":1}}],["编译生成的中间环节",{"2":{"342":1}}],["编译期捕获类型错误",{"2":{"270":1}}],["编译报错",{"2":{"265":1,"268":1,"269":1}}],["编译为全局唯一的哈希字符串",{"2":{"923":1}}],["编译为可执行函数",{"2":{"769":1}}],["编译为",{"2":{"254":1,"742":1}}],["编译为带代码高亮的",{"2":{"88":1}}],["编译时类型隔离",{"2":{"845":1}}],["编译时类型推导",{"2":{"248":1}}],["编译时",{"2":{"339":1}}],["编译时检查",{"2":{"326":1}}],["编译时优化",{"2":{"317":1}}],["编译时进行类型检查",{"2":{"253":1}}],["编译器",{"2":{"642":1}}],["编译器可以根据约束提供更精确的类型信息",{"2":{"264":1}}],["编译器可推断具体类型",{"2":{"253":1}}],["编译器根据传入的参数自动推断",{"2":{"258":1}}],["编译器自动推断",{"2":{"254":1}}],["编译器会报错",{"2":{"254":1}}],["编译器会对泛型代码进行严格的类型检查",{"2":{"254":1}}],["编译器信任你的判断",{"2":{"231":1}}],["编译器也会逐步缩小可能的类型范围",{"2":{"231":1}}],["编译产物包含类型擦除和填充代码",{"2":{"217":1}}],["编译后会变成",{"2":{"254":1}}],["编译后",{"2":{"217":1}}],["编译后的产物依然是普通",{"2":{"921":1}}],["编译后的",{"2":{"203":1}}],["编译所有项目",{"2":{"216":1}}],["编译单元",{"2":{"210":1}}],["编译输出目录",{"2":{"203":1}}],["编译信息配置",{"2":{"203":1}}],["编译选项和输出路径等",{"2":{"202":1}}],["编译",{"2":{"57":1,"762":1,"769":1}}],["编辑命令",{"2":{"734":1}}],["编辑功能",{"2":{"647":1}}],["编辑器样式",{"2":{"734":1}}],["编辑器逻辑",{"2":{"734":1}}],["编辑器入口",{"2":{"734":1}}],["编辑器和图表变得简单高效",{"2":{"670":1}}],["编辑器核心",{"2":{"656":1,"734":1}}],["编辑器修改",{"2":{"656":1}}],["编辑器的工作原理是",{"2":{"656":1}}],["编辑器分为两层",{"2":{"656":1}}],["编辑器校验系统",{"2":{"647":1}}],["编辑器模板系统",{"2":{"647":1}}],["编辑器渲染器控件",{"2":{"647":1}}],["编辑器语言包",{"2":{"647":1}}],["编辑器功能图标",{"2":{"647":1}}],["编辑器主组件",{"2":{"647":1}}],["编辑器插件基础框架",{"2":{"647":1}}],["编辑器插件数",{"2":{"643":1}}],["编辑器国际化",{"2":{"647":1}}],["编辑器布局组件",{"2":{"647":1}}],["编辑器图标",{"2":{"647":1,"734":1}}],["编辑器基础组件",{"2":{"647":1}}],["编辑器工具函数",{"2":{"647":2}}],["编辑器",{"2":{"647":3,"656":1}}],["编辑器层",{"2":{"645":1}}],["编辑器中执行",{"2":{"28":1}}],["编辑",{"2":{"555":1}}],["编辑比较频繁的建议使用",{"2":{"341":1}}],["编辑者在",{"2":{"21":1}}],["编写极其复杂的关键帧动画",{"2":{"934":1}}],["编写最小代码使测试通过",{"2":{"890":1}}],["编写失败测试",{"2":{"890":1}}],["编写测试",{"2":{"889":1}}],["编写测试用例",{"0":{"223":1}}],["编写与测试新技能",{"2":{"881":1}}],["编写和测试新技能的完整方法论",{"2":{"880":1}}],["编写适配器将网站转为",{"2":{"784":1}}],["编写自定义着色器节点的完整编译流程",{"2":{"746":1}}],["编写命令的最佳实践",{"2":{"583":1}}],["编写后端业务api",{"2":{"553":1}}],["编写高并发",{"2":{"553":1}}],["编写了一个较为规范的",{"2":{"504":1}}],["编写具体动作",{"2":{"449":1}}],["编写执行指令",{"0":{"449":1}}],["编写元信息",{"0":{"448":1}}],["编写的高性能增量打包工具",{"2":{"343":1}}],["编写类型声明",{"2":{"320":1}}],["编写代码",{"2":{"308":1,"567":1}}],["编写一次",{"2":{"252":1}}],["编写支付回调函数",{"2":{"30":1}}],["编写评论组件",{"2":{"28":1}}],["编写",{"2":{"26":1,"344":2,"583":1,"883":1}}],["不吃主食",{"2":{"963":1}}],["不吃主食这个事情笔者个人之前没有尝试过",{"2":{"962":1}}],["不乘坐电梯",{"2":{"963":1,"964":1}}],["不追星",{"2":{"959":1}}],["不追求复杂的理论",{"2":{"901":1}}],["不知置身于其中的你是否感慨过自己在阅历上从",{"2":{"959":1}}],["不知道细心的朋友有没有发现",{"2":{"957":1}}],["不知道如何科学地给孩子讲解",{"2":{"492":1}}],["不知道答案",{"2":{"492":1}}],["不区分事务大小",{"2":{"953":1}}],["不区分优先级",{"2":{"953":1}}],["不推荐的严格时间表",{"2":{"952":1}}],["不好的事情如果已经到来",{"2":{"938":1}}],["不怎么锻炼身体",{"2":{"938":1}}],["不难理解",{"2":{"936":1}}],["不难发现",{"2":{"468":1}}],["不存色值格式",{"2":{"929":1}}],["不存在这样的值",{"2":{"227":1}}],["不管别人怎么看待",{"2":{"959":1}}],["不管文章最终的水平怎么样",{"2":{"958":1}}],["不管项目多大",{"2":{"925":1}}],["不管是金钱",{"2":{"396":1}}],["不管是人生规划",{"2":{"386":1}}],["不改变你写的类名",{"2":{"924":1}}],["不匹配等问题",{"2":{"922":1}}],["不匹配的成员保留原类型",{"2":{"244":1}}],["不止一次反思过之前的生活方式和入世模式",{"2":{"959":1}}],["不止于代码",{"2":{"902":1}}],["不止是",{"2":{"417":1}}],["不在其位就不谋其政",{"2":{"957":1}}],["不在任务间暂停询问用户",{"2":{"889":1}}],["不在集合中",{"2":{"229":1}}],["不继承父会话的状态",{"2":{"889":1}}],["不进行适配器发现",{"2":{"795":1}}],["不透明度",{"2":{"765":1,"770":2}}],["不实现",{"2":{"758":1}}],["不依赖shaderchunk|",{"2":{"742":1}}],["不打包进核心库",{"2":{"733":1}}],["不阻塞主线程",{"2":{"757":1}}],["不阻塞",{"2":{"701":1}}],["不含任何运行时逻辑",{"2":{"847":1}}],["不含特定渲染器",{"2":{"734":1}}],["不含",{"2":{"679":1}}],["不含形状和滤镜",{"2":{"677":1}}],["不维护",{"2":{"677":1,"680":1}}],["不直接支持",{"2":{"667":1}}],["不直接使用其他工具",{"2":{"472":1}}],["不及格",{"2":{"655":2}}],["不熟悉前端但需要做后台页面的后端开发者",{"2":{"639":1}}],["不执行",{"2":{"622":2}}],["不思考+不执行",{"2":{"622":1}}],["不思考",{"2":{"622":2}}],["不愿放弃读书以外的把玩乐趣",{"2":{"613":1}}],["不断深化理解",{"2":{"610":1}}],["不断学习和实践",{"2":{"400":1}}],["不连贯的",{"2":{"610":1}}],["不但解决了周末饮食的主要问题",{"2":{"961":1}}],["不但不会觉得枯燥",{"2":{"609":1}}],["不但能单枪匹马或带领极小团队中的人",{"2":{"542":1}}],["不掌握方法的后果",{"2":{"608":1}}],["不提交",{"2":{"596":1}}],["不处理未",{"2":{"581":1}}],["不该写的",{"2":{"572":1}}],["不中断",{"2":{"564":1}}],["不如自己思变",{"2":{"950":1}}],["不如躺平",{"2":{"950":1}}],["不如说是",{"2":{"626":1}}],["不如",{"2":{"620":1}}],["不如确保最终结果可验证",{"2":{"538":1}}],["不如尽早且频繁地公开自己的价值观和工作流",{"2":{"380":1}}],["不确定性",{"0":{"538":1}}],["不确定的生成",{"2":{"534":1}}],["不确定的随机性",{"2":{"525":1}}],["不得不做",{"2":{"526":1}}],["不划算",{"0":{"528":1},"2":{"525":1}}],["不用重写代码",{"2":{"523":1}}],["不计较成本优先质量",{"2":{"523":1}}],["不过还是采用了一个策略去反抗了下",{"2":{"917":1}}],["不过是在脑中形成了一条模糊",{"2":{"610":1}}],["不过",{"2":{"510":1}}],["不传播错误价值观",{"2":{"494":1}}],["不涉及任何敏感话题",{"2":{"494":1}}],["不涉及动态数据的组件",{"2":{"52":1}}],["不影响代码运行的变动",{"2":{"451":1}}],["不影响功能的改动",{"2":{"451":1}}],["不影响其他页面",{"2":{"78":1}}],["不读取脚本源码",{"2":{"443":1}}],["不加载具体指令",{"2":{"443":1}}],["不加任何延迟",{"2":{"151":1}}],["不具备持久性",{"2":{"435":1}}],["不预设固定的执行路径",{"2":{"424":1}}],["不预设用户很聪明",{"2":{"366":1}}],["不间断工作的",{"2":{"419":1}}],["不替代核心岗位",{"2":{"406":1}}],["不能继续增加",{"2":{"964":1}}],["不能写成",{"2":{"442":1}}],["不能有其他变体",{"2":{"442":1}}],["不能无限降低价格",{"2":{"394":1}}],["不能赋值给",{"2":{"247":1}}],["不能赋值给其他类型",{"2":{"203":1}}],["不感情用事",{"2":{"393":1}}],["不设",{"2":{"387":1}}],["不设层级",{"2":{"387":1}}],["不设置则所有文件平铺在",{"2":{"203":1}}],["不至于在低价值的代码堆里荒废时光",{"2":{"376":1}}],["不至于在天马行空中失重",{"2":{"376":1}}],["不只是被动响应指令",{"2":{"402":1}}],["不只是抱怨",{"2":{"370":1}}],["不只是共有的",{"2":{"239":1}}],["不舒服",{"2":{"370":1}}],["不谋而合",{"2":{"361":1}}],["不",{"2":{"360":1}}],["不触及核心业务",{"2":{"336":1}}],["不关心底层数据库的具体连接细节",{"2":{"328":1}}],["不分发",{"2":{"234":1}}],["不包含业务规则",{"2":{"278":1}}],["不包含任何值",{"2":{"227":1}}],["不包含",{"2":{"216":1}}],["不包含具体文件",{"2":{"212":1}}],["不允许执行的工具列表",{"2":{"482":1}}],["不允许",{"2":{"203":1}}],["不允许像普通流那样随心所欲地传输字符",{"2":{"121":1}}],["不编译",{"2":{"203":1}}],["不解析符号链接",{"2":{"203":1}}],["不输出",{"2":{"203":1}}],["不主动制造复杂",{"2":{"201":1}}],["不属于任何实体或值对象的领域逻辑",{"2":{"278":1}}],["不属于",{"2":{"200":1}}],["不应进入主会话",{"2":{"592":1}}],["不应该",{"2":{"915":1}}],["不应该能执行命令",{"2":{"591":1}}],["不应该能修改文件",{"2":{"591":1}}],["不应该让",{"2":{"2":1}}],["不应只是被动响应人类指令的",{"2":{"414":1}}],["不应剃除",{"2":{"200":1}}],["不牺牲生产环境的性能",{"2":{"226":1}}],["不牺牲",{"2":{"200":3}}],["不符合原则",{"2":{"181":1}}],["不可变",{"2":{"278":1}}],["不可剃除",{"2":{"200":1}}],["不可为了",{"2":{"181":1}}],["不可忽视的约束",{"0":{"124":1}}],["不妨提笔一试",{"2":{"505":1}}],["不妨跳出宏大叙事",{"2":{"465":1}}],["不妨在脑海里跑一遍这",{"2":{"389":1}}],["不妨停顿一秒",{"2":{"337":1}}],["不妨把它想象成",{"2":{"227":1}}],["不妨先问自己",{"2":{"180":1}}],["不妨回想",{"2":{"66":1}}],["不支持表达式会导致大量",{"2":{"758":1}}],["不支持",{"2":{"160":2,"167":2}}],["不受此约束",{"2":{"160":1}}],["不一定要遵循",{"2":{"160":1}}],["不一致时",{"2":{"59":1}}],["不希望引入长连接管理复杂度",{"2":{"156":1}}],["不希望引入过重的状态机",{"2":{"112":1}}],["不立即响应",{"2":{"151":1}}],["不立刻返回",{"2":{"151":1}}],["不占用网络请求",{"2":{"149":1}}],["不买最贵的",{"0":{"141":1},"1":{"142":1,"143":1}}],["不少人在学习了",{"2":{"135":1}}],["不再执着于手里有多少把锤子",{"2":{"902":1}}],["不再只是工具",{"2":{"569":1}}],["不再只是",{"2":{"567":1}}],["不再需要为每一个数据源",{"2":{"548":1}}],["不再推荐",{"2":{"341":2}}],["不再仅仅是一个模块协议",{"2":{"316":1}}],["不再满足于",{"2":{"271":1}}],["不再是当年在实验室或研究所里拿着裸机装软件的年代了",{"2":{"957":1}}],["不再是壁垒",{"2":{"902":1}}],["不再是全能选手",{"2":{"592":1}}],["不再是不可逾越的壁垒",{"2":{"376":1}}],["不再是拥有单一深厚技能的螺丝钉",{"2":{"361":1}}],["不再是",{"2":{"232":1}}],["不再是简单的",{"2":{"86":1}}],["不再承载",{"2":{"126":1}}],["不仅剥夺了",{"2":{"933":1}}],["不仅把功能做出来",{"2":{"556":1}}],["不仅意象提炼精准",{"2":{"508":1}}],["不仅显著提升了任务处理的天花板",{"2":{"467":1}}],["不仅提高了任务的完成上限",{"2":{"438":1}}],["不仅要关注",{"2":{"625":1}}],["不仅要进行用户访谈",{"2":{"396":1}}],["不仅要看用户价值",{"2":{"392":1}}],["不仅仅是工具",{"2":{"902":1}}],["不仅仅是能写诗",{"2":{"509":1}}],["不仅仅是一本商业指南",{"2":{"381":1}}],["不仅仅是为模块添加了类型标注",{"2":{"317":1}}],["不仅因为设计",{"2":{"372":1}}],["不仅能显著提升任务处理的上限",{"2":{"468":1}}],["不仅能制定竞争策略",{"2":{"396":1}}],["不仅能锁定用户",{"2":{"392":1}}],["不仅能看到系统的各个要素",{"2":{"383":1}}],["不仅能做出来",{"2":{"363":1}}],["不仅能拿数据",{"2":{"107":1}}],["不仅听懂用户说",{"2":{"363":1}}],["不仅看平均响应时间",{"2":{"353":1}}],["不仅是为了习得技能",{"2":{"603":1}}],["不仅是最具性价比的切入点",{"2":{"552":1}}],["不仅是根据供求",{"2":{"397":1}}],["不仅是",{"2":{"342":1}}],["不仅保留了",{"2":{"160":1}}],["不仅会遭遇网关超时限制",{"2":{"143":1}}],["不仅违背了解耦原则",{"2":{"138":1}}],["不仅解决了",{"2":{"71":1}}],["不会淘汰开发者",{"2":{"552":1}}],["不会是非黑即白的完全自动化",{"2":{"538":1}}],["不会跨对话自动保留",{"2":{"435":1}}],["不会污染全局空间",{"2":{"304":1}}],["不会执着于",{"2":{"144":1}}],["不会替代",{"2":{"103":1}}],["不会发出无效请求",{"2":{"101":1}}],["不会过早陷入局部细节",{"2":{"3":1}}],["不等待后端响应",{"2":{"100":1}}],["不等于",{"2":{"66":1}}],["不适合纯",{"2":{"927":1}}],["不适合",{"0":{"93":1}}],["不适合的场景",{"2":{"88":1}}],["不适用场景",{"2":{"31":1}}],["不必急于扩充团队规模",{"2":{"378":1}}],["不必要的第三方库",{"0":{"192":1},"1":{"193":1,"194":1}}],["不必要的假设",{"2":{"181":1}}],["不必局限于",{"2":{"160":1}}],["不必重新熬制",{"2":{"89":1}}],["不必因为某个页面需要",{"2":{"75":1}}],["不必触发全站重新构建",{"2":{"48":1}}],["不要害怕",{"2":{"930":1}}],["不要保留作",{"2":{"890":1}}],["不要对非本领域的观点一味抛出异常",{"2":{"618":1}}],["不要玩物丧志",{"0":{"613":1},"2":{"613":1}}],["不要有哀怨心态",{"2":{"612":1}}],["不要怀揣哀怨心态",{"0":{"612":1}}],["不要",{"0":{"612":1,"613":1,"614":1},"2":{"890":1}}],["不要再执着于手里有多少把锤子",{"2":{"554":1}}],["不要在一个提交中混杂无关的代码改动",{"2":{"451":1}}],["不要写",{"2":{"449":1}}],["不要急着把观点发给同行",{"2":{"375":1}}],["不要只读书不知现实",{"0":{"614":1}}],["不要只捡结论",{"2":{"608":1}}],["不要只用一个模型",{"2":{"523":1}}],["不要只在脑子里想",{"2":{"375":1}}],["不要只是被动地看数据",{"2":{"369":1}}],["不要等回头再想",{"2":{"372":1}}],["不要把",{"2":{"74":1}}],["不要发明语言",{"2":{"66":1}}],["不重试",{"2":{"169":1}}],["不重新创建节点",{"2":{"70":1}}],["不重要",{"2":{"58":1}}],["不做过多要求",{"2":{"961":1}}],["不做执行",{"2":{"470":1}}],["不做错的决定",{"2":{"376":1}}],["不做什么",{"2":{"363":1}}],["不做任何阻塞",{"2":{"148":1}}],["不做用户认证",{"2":{"66":1}}],["不做运行时数据获取",{"2":{"66":1}}],["不做",{"2":{"66":1}}],["不做服务端路由",{"2":{"66":1}}],["不友好",{"2":{"57":1,"287":1}}],["不需要去猜应该用什么",{"2":{"934":1}}],["不需要害怕",{"2":{"916":1}}],["不需要浏览器",{"2":{"800":1}}],["不需要一开始就想做",{"2":{"465":1}}],["不需要关注第",{"2":{"430":1}}],["不需要继续",{"2":{"429":1}}],["不需要复杂拦截器的轻量级页面",{"2":{"342":1}}],["不需要修改原有代码就能支持新的数据类型",{"2":{"255":1}}],["不需要任何延迟",{"2":{"153":1}}],["不需要手写路由配置表",{"2":{"76":1}}],["不需要",{"2":{"75":2}}],["不需要为它增加服务端运行时",{"2":{"66":1}}],["不需要为所有页面在构建时一次性生成静态文件",{"2":{"46":1}}],["不需要实时数据",{"2":{"66":1}}],["不需要架构",{"2":{"66":1}}],["不需要调用",{"2":{"63":1}}],["不需要连接数据库",{"2":{"63":1}}],["不需要后端",{"2":{"16":1}}],["不同构建版本",{"2":{"764":1}}],["不同类型对应不同的光照模型",{"2":{"737":1}}],["不同类型的泛型约束适用于不同的场景",{"2":{"270":1}}],["不同模型在垂直能力上差距悬殊",{"2":{"519":1}}],["不同工作计划的上下文物理隔离",{"2":{"437":1}}],["不同",{"2":{"314":1,"839":1,"842":1}}],["不同团队可以独立开发和部署自己的子应用",{"2":{"292":1}}],["不同团队可以独立负责不同的子应用",{"2":{"285":1}}],["不同子应用可以使用不同的框架",{"2":{"285":1}}],["不同规范的深度解析",{"2":{"272":1}}],["不同于旧版的实验性装饰器",{"2":{"324":1}}],["不同于",{"2":{"125":1,"129":1}}],["不同的时间来切换到不同的阅读方式",{"2":{"946":1}}],["不同的人能提炼出完全不同的价值",{"2":{"619":1}}],["不同的根源需要不同的解决方案",{"2":{"366":1}}],["不同的",{"2":{"249":1}}],["不同的视图",{"2":{"110":1}}],["不同的选择组合便构成了不同的渲染方案",{"2":{"33":1}}],["不同页面",{"2":{"75":1}}],["不同方案的本质差异",{"2":{"33":1}}],["不是通过",{"2":{"887":1}}],["不是通用公式",{"2":{"462":1}}],["不是把某段指令封装起来",{"2":{"589":1}}],["不是取代你的收割机",{"2":{"539":1}}],["不是所有任务都需要人工逐一审核",{"2":{"537":1}}],["不是让既有任务变快了",{"2":{"526":1}}],["不是让你成为数学家",{"2":{"400":1}}],["不是要你成为一个无所不能的孤胆英雄",{"2":{"466":1}}],["不是要取代人类的智慧",{"2":{"420":1}}],["不是替代品",{"2":{"462":1}}],["不是简单加法",{"0":{"458":1},"1":{"459":1,"460":1,"461":1,"462":1}}],["不是因为价格或房源",{"2":{"366":1}}],["不是在办公室想象",{"2":{"366":1}}],["不是将代码拆得零散",{"2":{"332":1}}],["不是一个传统的组件库",{"2":{"340":1}}],["不是一个",{"2":{"103":1}}],["不是偷懒",{"2":{"66":1}}],["不是",{"2":{"5":2,"268":1,"459":1,"917":1}}],["自身厨艺进一步获得了提升机会",{"2":{"963":1}}],["自接触互联网后",{"2":{"947":1}}],["自大学时代开始",{"2":{"936":1}}],["自去年",{"2":{"935":1}}],["自从再次深入学习",{"2":{"919":1}}],["自由式阅读",{"2":{"946":1}}],["自由发挥",{"2":{"930":1}}],["自由",{"2":{"906":1}}],["自实现",{"2":{"757":1}}],["自研的着色语言",{"2":{"741":1}}],["自研着色语言",{"2":{"732":1}}],["自研节点化着色语言",{"2":{"729":1}}],["自研表达式",{"2":{"655":1}}],["自研表达式引擎",{"2":{"641":1}}],["自研",{"2":{"641":1,"642":1,"702":1,"730":1}}],["自认是个",{"2":{"612":1}}],["自圆其说时",{"2":{"610":1}}],["自己做",{"2":{"961":1}}],["自己写不出",{"2":{"958":1}}],["自己可有花些时间来反思",{"2":{"942":1}}],["自己能很好地管理时间",{"2":{"936":1}}],["自己的思考沉淀到统一知识库",{"2":{"515":1}}],["自己实现简单的判空逻辑",{"2":{"194":1}}],["自我更新等多个方面",{"2":{"907":1}}],["自我审查",{"2":{"889":1}}],["自我纠错",{"2":{"426":1}}],["自我反思",{"0":{"426":1}}],["自我反思则通过",{"2":{"409":1}}],["自我批评",{"2":{"408":1}}],["自主执行代码库任务",{"2":{"567":1}}],["自主",{"2":{"567":1}}],["自主浏览文档",{"2":{"567":1}}],["自主读取代码库",{"2":{"567":1}}],["自主处理的资深开发者或团队",{"2":{"567":1}}],["自主重构",{"2":{"564":1}}],["自主多文件重构",{"2":{"564":1}}],["自主完成工程任务",{"0":{"566":1},"1":{"567":1,"568":1},"2":{"559":1}}],["自主工程师",{"2":{"559":1,"567":1,"569":1}}],["自主工作流执行",{"2":{"408":1}}],["自主找",{"0":{"484":1}}],["自主任务处理",{"2":{"482":1}}],["自主规划与持久化状态管理等核心技术挑战的典型代表",{"2":{"419":1}}],["自主洞察环境变化",{"2":{"403":1}}],["自主进化者",{"2":{"403":1}}],["自主性",{"2":{"402":1}}],["自主决策并执行任务的智能实体",{"2":{"402":1}}],["自然要向前看",{"2":{"959":1}}],["自然要启动一些改变尝试",{"2":{"959":1}}],["自然要继续寻找更长远的解决方法",{"2":{"939":1}}],["自然人也就发生了异化",{"2":{"938":1}}],["自然",{"2":{"910":1}}],["自然能渐渐窥见门道",{"2":{"608":1}}],["自然语言指令",{"2":{"877":1}}],["自然语言对话改代码",{"2":{"564":1}}],["自然语言",{"2":{"530":1}}],["自然也能尝试使用",{"2":{"907":1}}],["自然也不离外",{"2":{"906":1}}],["自然也不需要下载和执行这些代码",{"2":{"73":1}}],["自然也要用",{"2":{"499":1}}],["自然会吸引到那些愿意通过项目互助协作",{"2":{"380":1}}],["自带强类型的",{"2":{"342":1}}],["自下而上的原子化状态管理",{"2":{"341":1}}],["自下而上的原子化状态",{"2":{"341":1}}],["自上而下的全局状态管理",{"2":{"341":1}}],["自上而下的全局",{"2":{"341":1}}],["自",{"2":{"115":1,"901":1,"906":1}}],["自定义插件",{"2":{"928":1}}],["自定义变量来定义品牌阶梯色的",{"2":{"925":1}}],["自定义主题",{"2":{"904":1}}],["自定义命令",{"2":{"879":1}}],["自定义命令和权限设置策略",{"2":{"570":1}}],["自定义错误处理和重试",{"0":{"820":1}}],["自定义方法",{"2":{"815":1,"830":1}}],["自定义表达式引擎",{"2":{"758":1}}],["自定义图表",{"2":{"706":1}}],["自定义实现",{"2":{"682":1}}],["自定义渲染器",{"2":{"650":1}}],["自定义函数",{"2":{"642":1}}],["自定义斜杠命令",{"0":{"579":1},"1":{"580":1,"581":1,"582":1,"583":1},"2":{"570":1,"880":1,"881":1}}],["自定义装饰器",{"2":{"275":1}}],["自定义类型守卫",{"2":{"231":1}}],["自定义请求头",{"2":{"166":2,"169":1}}],["自定义",{"2":{"97":1,"160":2,"167":1,"180":1,"706":2,"801":1,"881":1}}],["自定义字体导致",{"2":{"84":1}}],["自托管",{"2":{"71":1,"568":1}}],["自行配置构建和部署流程",{"2":{"71":1}}],["自行修正",{"2":{"9":2}}],["自建方案",{"2":{"19":1}}],["自动推导出必须输出的组件",{"2":{"934":1}}],["自动推断为",{"2":{"260":1}}],["自动保留后者",{"2":{"927":1}}],["自动移除无用的",{"2":{"922":1}}],["自动执行",{"2":{"900":1}}],["自动修复格式问题",{"2":{"871":1}}],["自动修复技能",{"2":{"792":1}}],["自动断开",{"2":{"830":1}}],["自动启停循环",{"2":{"767":1}}],["自动回退到",{"2":{"749":1}}],["自动递增",{"2":{"748":1}}],["自动排列算法",{"2":{"706":1}}],["自动排版与配图",{"2":{"515":1}}],["自动补全和类型检查",{"2":{"701":1}}],["自动绘制",{"2":{"689":1}}],["自动发布流程",{"2":{"677":1}}],["自动传递给",{"2":{"653":1}}],["自动注入",{"2":{"652":1}}],["自动将类名",{"2":{"923":1}}],["自动将函数调用转换为节点图",{"2":{"741":1}}],["自动将",{"2":{"640":1}}],["自动介入",{"2":{"588":1}}],["自动检测代码中的安全漏洞和潜在风险",{"2":{"586":1}}],["自动触发",{"2":{"900":1}}],["自动触发的工作流",{"0":{"584":1},"1":{"585":1,"586":1,"587":1,"588":1},"2":{"570":2}}],["自动触发项目列表和概览数据的后台刷新",{"2":{"104":1}}],["自动记忆和会话历史",{"2":{"570":1}}],["自动完成功能开发并提",{"2":{"568":1}}],["自动完成文献检索",{"2":{"406":1}}],["自动提交等完整工程周期",{"2":{"568":1}}],["自动串联多步任务",{"2":{"565":2}}],["自动导入依赖",{"2":{"564":1}}],["自动规划",{"2":{"564":1}}],["自动还原其界面并生成对应前端代码",{"2":{"561":1}}],["自动切换",{"2":{"523":1}}],["自动降级",{"2":{"523":1}}],["自动多轮报告",{"2":{"518":1}}],["自动打标签建图谱",{"2":{"515":1}}],["自动摘要与知识点提取",{"2":{"515":1}}],["自动摘要与知识点抽取",{"2":{"515":1}}],["自动填写与内容总结",{"2":{"515":1}}],["自动整理与知识图谱",{"2":{"515":1}}],["自动整理生成知识卡片与图谱",{"2":{"515":1}}],["自动总结",{"2":{"515":1}}],["自动标签与归纳",{"2":{"514":1}}],["自动处理对话历史和工作状态",{"2":{"478":1}}],["自动分解为",{"2":{"685":1}}],["自动分析并修复",{"2":{"455":1}}],["自动分发",{"2":{"234":1}}],["自动进行代码审查",{"2":{"438":1}}],["自动申请",{"2":{"414":1}}],["自动识别当前操作系统环境",{"2":{"414":1}}],["自动追踪账单",{"2":{"407":1}}],["自动化处理浏览器兼容性",{"2":{"932":1}}],["自动化工作流等",{"2":{"843":1}}],["自动化研究相关",{"2":{"792":1}}],["自动化构建脚本",{"2":{"762":1}}],["自动化构建",{"2":{"762":1}}],["自动化评测驱动",{"2":{"550":1}}],["自动化三合一",{"2":{"515":1}}],["自动化测试",{"2":{"418":1,"734":1}}],["自动化等级",{"2":{"403":1}}],["自动化程度的阶梯式跨越",{"0":{"403":1}}],["自动化",{"0":{"378":1},"2":{"343":1,"418":1,"455":1,"570":1,"800":1,"877":1}}],["自动化开发",{"2":{"9":2}}],["自动收窄为",{"2":{"230":3}}],["自动生成符合规范的",{"2":{"581":1}}],["自动生成一个初始版本的",{"2":{"574":1}}],["自动生成摘要",{"2":{"515":1}}],["自动生成覆盖率报告",{"2":{"225":1}}],["自动生成",{"2":{"208":1,"685":1,"734":1}}],["自动包含",{"2":{"203":1}}],["自动取消订阅",{"2":{"179":1}}],["自动在页面隐藏时断开连接",{"2":{"815":1}}],["自动在页面隐藏时断开",{"2":{"167":1}}],["自动重连",{"2":{"122":1,"163":2,"822":1}}],["自动重新获取",{"2":{"103":1}}],["自动驾驶浪潮中把稳方向盘的核心资产",{"2":{"359":1}}],["自动驾驶",{"0":{"122":1}}],["自动缓存管理",{"2":{"103":1}}],["自动缓存请求结果",{"2":{"90":1}}],["自动转换",{"2":{"342":1}}],["自动转",{"2":{"84":1}}],["自动做了什么",{"2":{"84":1}}],["自动构建",{"2":{"23":1,"723":1}}],["自动运行验证",{"2":{"9":1}}],["自顶向下",{"2":{"3":1}}],["自治",{"0":{"2":1}}],["为啥就不能为自己后青春的下半场基于现状弄一个身体",{"2":{"959":1}}],["为自己预留一些挥霍的自由",{"2":{"954":1}}],["为自己减压",{"2":{"952":1}}],["为避免自己变成有强迫症的人",{"2":{"954":1}}],["为短时间学习",{"2":{"946":1}}],["为应对社会生活中的焦虑与迷茫",{"2":{"945":1}}],["为应对各种网络异常与业务场景",{"2":{"175":1}}],["为保证自己在理论意识上更注重身体健康",{"2":{"941":1}}],["为保障连接在生产环境中的鲁棒性",{"2":{"129":1}}],["为开发者提供一个安全",{"2":{"931":1}}],["为代表的变体驱动原子化方案",{"2":{"928":1}}],["为代价",{"2":{"37":1,"45":1,"50":1}}],["为便于指导日常的技术选型与工程实践",{"2":{"928":1}}],["为当前组件的所有",{"2":{"924":1}}],["为组件元素及",{"2":{"924":1}}],["为新编码平台适配",{"2":{"875":1}}],["为前端",{"2":{"842":1}}],["为前缀",{"2":{"494":1}}],["为浏览器提供了更强大",{"2":{"813":1}}],["为空文件",{"2":{"734":1}}],["为渲染引擎",{"2":{"677":1}}],["为默认渲染引擎",{"2":{"677":1}}],["为读者提供可视化洞察",{"2":{"632":1}}],["为读者提供快速概览",{"2":{"632":1}}],["为乐",{"2":{"610":1}}],["为大模型提供一套标准化的双向通信协议",{"2":{"548":1}}],["为后续的",{"2":{"541":1}}],["为后续增量引入状态",{"2":{"3":1}}],["为灵感",{"2":{"505":1,"508":1}}],["为确保",{"2":{"502":1}}],["为确保项目的可维护性与抗腐化能力",{"2":{"1":1}}],["为每一个分类配备对应的阅读工具与实践原则",{"2":{"947":1}}],["为每一个长尾查询生成",{"2":{"354":1}}],["为每个组件生成唯一的",{"2":{"922":1}}],["为每个属性创建",{"2":{"686":1}}],["为每个被补间的属性创建独立的",{"2":{"686":1}}],["为每个",{"2":{"476":1}}],["为验证系统的实际效果",{"2":{"473":1}}],["为内部专属业务工具提供标准化的",{"2":{"439":1}}],["为特定的专项项目设置专属的语气",{"2":{"437":1}}],["为特定主题提供持久化的上下文存储",{"2":{"437":1}}],["为下一步决策提供依据",{"2":{"427":1}}],["为下一代",{"2":{"343":1}}],["为中心",{"2":{"403":1}}],["为何而做",{"0":{"376":1}}],["为第三方库定义模块化声明",{"2":{"321":1}}],["为纯",{"2":{"321":1}}],["为返回类型",{"2":{"262":1}}],["为输入类型",{"2":{"262":1}}],["为值类型",{"2":{"262":1}}],["为键类型",{"2":{"262":1}}],["为未使用字段生成getter",{"2":{"184":1}}],["为可重试错误",{"2":{"169":1}}],["为致命错误",{"2":{"169":1}}],["为数据块",{"2":{"166":1}}],["为数据获取提供了更加简洁和高效的解决方案",{"2":{"95":1}}],["为真正的实时双向交互打开了大门",{"2":{"144":1}}],["为了解决这些痛点",{"2":{"920":1}}],["为了解决这一痛点",{"2":{"441":1}}],["为了坚持这种旧习惯",{"2":{"613":1}}],["为了对抗大模型的延迟与幻觉",{"2":{"543":1}}],["为了不让工程质量滑向",{"2":{"532":1}}],["为了亲测平台性能并实战演练结构化",{"2":{"496":1}}],["为了方便后续的调用",{"2":{"489":1}}],["为了提供更好的开发体验",{"2":{"487":1}}],["为了提高编译命令的复用性和可维护性",{"2":{"202":1}}],["为了确保",{"2":{"481":1}}],["为了保证",{"2":{"451":1}}],["为了应对不同复杂程度的任务",{"2":{"414":1}}],["为了更直观地衡量",{"2":{"403":1}}],["为了更直观地理解",{"2":{"308":1}}],["为了维持市场份额",{"2":{"392":1}}],["为了修",{"2":{"386":1}}],["为了赶进度写出烂代码",{"2":{"386":1}}],["为了实现这个丝滑体验",{"2":{"374":1}}],["为了技术而技术的自我感动",{"2":{"365":1}}],["为了让",{"2":{"494":1}}],["为了让这种",{"2":{"426":1}}],["为了让这个抽象概念变得可解构",{"2":{"364":1}}],["为了让模块更加健壮和灵活",{"2":{"299":1}}],["为了在浏览器中直接调试",{"2":{"217":1}}],["为了在保持各子项目独立性的同时",{"2":{"205":1}}],["为了抽象而抽象",{"2":{"189":1}}],["为了",{"2":{"183":1}}],["为了弥补退避轮询在实时性上的不足",{"2":{"150":1}}],["为了兼顾用户体验与服务器的稳定性",{"2":{"145":1}}],["为了兼顾体验和服务器压力",{"2":{"140":1}}],["为了防止恶意伪造回调",{"2":{"133":1}}],["为了模拟实时效果",{"2":{"115":1}}],["为解决这一问题",{"2":{"114":1}}],["为",{"2":{"99":1,"101":1,"166":1,"203":1,"254":1,"258":1,"340":1,"431":1,"784":1,"787":1,"822":1,"839":1,"928":1}}],["为文档站点提供极致的加载性能和极简的部署模型",{"2":{"60":1}}],["为不同数据新鲜度要求的模块设置不同的刷新周期",{"2":{"59":1}}],["为主",{"2":{"53":1,"730":1}}],["为例",{"0":{"473":1},"1":{"474":1,"475":1},"2":{"22":1,"84":1,"180":1,"567":1,"921":1}}],["为什么很多人读了很多的书",{"2":{"946":1}}],["为什么那么多人喊着健身和减肥",{"2":{"942":1}}],["为什么要继续写文章呢",{"2":{"935":1}}],["为什么要大费周章地进行模块化拆分",{"2":{"297":1}}],["为什么伟大不能被计划",{"2":{"906":1}}],["为什么重要",{"2":{"850":1}}],["为什么基于",{"2":{"822":1}}],["为什么用技能而非命令",{"2":{"587":1}}],["为什么值得使用",{"2":{"583":1}}],["为什么这样设计",{"2":{"555":1}}],["为什么这么改",{"2":{"537":1}}],["为什么选择",{"0":{"478":1,"493":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1},"2":{"822":1}}],["为什么深度研究需要",{"0":{"468":1}}],["为什么在复杂场景中这种模式更具优势",{"0":{"430":1}}],["为什么某些软件只允许你用一个设备",{"2":{"400":1}}],["为什么牛奶通常装在方盒子里卖",{"2":{"391":1}}],["为什么我觉得",{"2":{"372":1}}],["为什么不直接使用",{"2":{"822":1}}],["为什么不直接告诉我",{"2":{"370":1}}],["为什么不由我们自己去发现呢",{"2":{"362":1}}],["为什么想要",{"2":{"366":1}}],["为什么需要独立身份",{"2":{"592":1}}],["为什么需要",{"0":{"590":1}}],["为什么需要退避轮询",{"0":{"147":1}}],["为什么需要一个框架",{"0":{"68":1},"1":{"69":1,"70":1,"71":1}}],["为什么",{"0":{"11":1,"926":1},"2":{"11":1,"375":1,"557":1}}],["为正确地构建应用",{"2":{"5":1}}],["奠定可靠基础",{"2":{"3":1}}],["hfutsqliang",{"2":{"905":3}}],["h",{"2":{"776":1,"927":3}}],["hcameraelement",{"2":{"762":1}}],["hcompelement",{"2":{"761":1,"762":1,"768":1}}],["hbaseelement",{"2":{"762":1}}],["hsolidelement",{"2":{"761":1,"762":1}}],["hshapeelement",{"2":{"761":1,"762":1}}],["hsv",{"2":{"677":2,"679":1}}],["hsl",{"2":{"676":1,"677":2,"679":1,"925":1,"929":1}}],["href",{"2":{"777":1}}],["href=",{"2":{"27":1}}],["hr",{"2":{"640":1}}],["hugging",{"2":{"523":3}}],["hunyuan",{"2":{"512":3}}],["human",{"2":{"375":1,"550":1,"903":1}}],["hierarchy",{"2":{"776":2}}],["hierarchyelement",{"2":{"761":1,"762":1}}],["history",{"2":{"762":1}}],["himageelement",{"2":{"761":1,"762":1}}],["hideontransparent",{"2":{"777":1}}],["hideloading",{"2":{"719":1}}],["hidden",{"2":{"684":1}}],["high",{"2":{"556":1}}],["hindsight",{"2":{"426":1}}],["hitgraphenabled",{"2":{"692":1}}],["hit双缓冲",{"2":{"679":1}}],["hitfunc",{"2":{"677":1,"680":2,"683":3,"692":1}}],["hitcontext",{"2":{"676":1,"677":1,"680":1}}],["hitcanvas",{"2":{"672":1,"673":1,"675":1,"676":1,"677":2,"680":4,"683":3,"684":2,"692":4}}],["hit检测",{"2":{"676":1,"677":1}}],["hitl",{"2":{"550":1}}],["hit",{"2":{"47":1,"670":1,"676":2}}],["hybridrendererbase",{"2":{"762":1,"768":1}}],["hybridrenderer",{"2":{"761":1,"762":1,"764":1,"768":2}}],["hybrid",{"2":{"546":1,"760":1,"782":1}}],["hypertext",{"2":{"338":1}}],["hydrateroot",{"2":{"70":1}}],["hydration",{"0":{"70":1},"2":{"3":1,"38":1,"39":1,"57":1,"59":2,"65":1,"922":1}}],["hmr",{"2":{"316":1}}],["hmac",{"2":{"133":1}}],["h3>",{"2":{"288":2}}],["harness",{"2":{"879":1,"880":1,"884":2}}],["hardcode",{"2":{"928":1,"929":1}}],["hard",{"2":{"876":1,"877":1,"879":1,"881":1,"888":2}}],["hackernews",{"2":{"792":2,"811":1}}],["happy",{"2":{"762":1}}],["happy2016",{"2":{"762":1}}],["haveintersection",{"2":{"693":1}}],["hailuo",{"2":{"512":1,"522":1}}],["haiku",{"2":{"481":2,"521":3,"523":1,"881":2}}],["hanging",{"2":{"365":1}}],["handleaction",{"2":{"646":1,"654":2}}],["handleproductclick",{"2":{"288":2}}],["handle",{"2":{"281":1}}],["handler",{"2":{"280":2,"281":1,"708":1,"712":6,"719":2,"720":1}}],["handlers",{"2":{"83":1,"280":1,"281":1,"576":2}}],["handleerror",{"2":{"231":1}}],["handlenameupdate",{"2":{"100":2}}],["handleselectmodel",{"2":{"86":1}}],["handlesubmit",{"2":{"28":2,"843":1}}],["handlelogin",{"2":{"28":2}}],["hallucination",{"0":{"352":1},"2":{"350":1,"543":1,"550":1}}],["haderror",{"2":{"173":2}}],["hastoolcall",{"2":{"856":2}}],["hasfeature",{"2":{"739":1,"748":1}}],["hasfill",{"2":{"692":1}}],["hasshadow",{"2":{"692":1}}],["hasstroke",{"2":{"692":1}}],["haschildren",{"2":{"663":1,"692":1}}],["hasid",{"2":{"270":1}}],["hasidentity>",{"2":{"266":1}}],["hasidentity",{"2":{"266":3}}],["hasname",{"2":{"270":2}}],["hash",{"2":{"104":1,"928":4}}],["has",{"2":{"103":1}}],["hex",{"2":{"933":1}}],["heffects",{"2":{"761":1,"762":1}}],["hemispherelight",{"2":{"734":1}}],["here",{"2":{"582":2}}],["head",{"2":{"712":2}}],["header>",{"2":{"288":2}}],["headers",{"2":{"160":1,"166":4,"169":3,"175":2,"819":1,"820":1,"832":1,"839":1,"857":1,"866":1}}],["header",{"2":{"74":1,"79":1,"97":1,"115":1,"118":1,"160":2,"165":1,"166":2,"167":1,"180":1,"274":1,"786":1,"790":1,"797":1,"800":2,"801":2,"806":2,"807":6}}],["heatmapview",{"2":{"706":1}}],["heatmapseries",{"2":{"706":1}}],["heatmap",{"2":{"706":1}}],["heavychartrender",{"2":{"313":2}}],["height",{"2":{"230":4,"232":1,"692":3,"693":1,"696":2,"719":2,"748":1,"749":1}}],["hell",{"2":{"933":1}}],["hello",{"2":{"77":1,"229":1,"238":1,"258":1,"261":1,"263":2,"265":1,"300":1,"302":1,"306":2,"311":2,"843":1}}],["help",{"2":{"806":1}}],["helper",{"2":{"448":1,"642":1,"646":3,"647":4,"706":5,"737":1,"881":1,"888":1}}],["helpers",{"2":{"28":1,"274":1,"734":1,"761":1,"762":2,"792":1,"881":1}}],["htextelement",{"2":{"761":1,"762":1}}],["http+ws",{"2":{"791":1,"792":1}}],["http",{"0":{"115":1,"116":2,"135":1,"807":1},"1":{"117":2,"118":2,"119":2,"136":1,"137":1,"138":1,"139":1,"140":1},"2":{"47":1,"52":1,"81":1,"86":1,"95":1,"97":1,"99":1,"103":1,"114":4,"115":6,"116":3,"117":2,"118":1,"120":1,"124":2,"125":4,"126":2,"127":2,"129":1,"130":1,"131":2,"133":1,"134":1,"135":4,"136":2,"137":2,"138":1,"141":1,"142":5,"143":4,"144":3,"145":5,"147":1,"151":1,"152":1,"158":3,"159":6,"160":7,"164":4,"166":2,"167":1,"169":2,"175":1,"177":1,"180":1,"275":3,"279":1,"288":2,"342":8,"666":2,"734":2,"752":1,"790":1,"801":5,"807":1,"814":1,"822":2,"847":2}}],["httpstatus",{"2":{"152":3}}],["https",{"2":{"29":1,"81":1,"83":1,"84":1,"152":1,"163":1,"262":1,"456":2,"695":1,"696":1,"699":1,"751":1,"755":1,"780":1,"800":2,"803":1,"811":1,"839":1,"899":1,"905":1}}],["htmlbuttonelement>",{"2":{"927":1}}],["htmlelements",{"2":{"762":1}}],["html+css",{"2":{"761":1,"762":1}}],["htmlimageelement",{"2":{"692":1}}],["htmlcanvaselement",{"2":{"692":1,"748":1,"749":1}}],["htmldivelement",{"2":{"684":2,"692":4}}],["html5",{"2":{"670":1}}],["html",{"2":{"14":1,"18":1,"27":1,"34":1,"35":2,"38":2,"39":2,"42":2,"43":3,"47":4,"52":2,"57":5,"59":2,"62":2,"63":1,"64":1,"65":3,"68":1,"69":2,"70":1,"73":1,"75":1,"86":4,"87":1,"88":1,"93":1,"115":1,"338":4,"339":1,"344":1,"345":1,"474":1,"639":1,"662":1,"677":4,"680":1,"684":1,"696":1,"734":2,"755":2,"757":1,"761":1,"762":16,"764":3,"765":1,"768":1,"776":1,"778":5,"781":1,"782":1,"792":3,"881":2,"888":1,"924":1,"925":6,"927":1,"928":1,"930":3,"934":1}}],["h2>",{"2":{"27":1,"28":1}}],["h2",{"2":{"27":1,"28":1}}],["h1>",{"2":{"27":2}}],["h1",{"2":{"27":2}}],["hono",{"2":{"843":1}}],["honesty",{"2":{"360":1}}],["hot",{"2":{"792":1,"804":1,"811":2}}],["hold",{"2":{"770":1,"776":1}}],["hosting",{"0":{"345":1}}],["hostname",{"2":{"84":1}}],["hookaction",{"2":{"895":2}}],["hookeventname",{"2":{"895":1}}],["hookevent",{"2":{"895":2}}],["hookconfig",{"2":{"895":1}}],["hook",{"0":{"99":1,"886":2},"2":{"29":1,"97":1,"99":2,"107":1,"110":1,"263":1,"850":1,"858":2,"867":1,"876":1,"877":1,"879":4,"880":1,"881":6,"884":3,"886":2,"895":2,"898":1}}],["hookspecificoutput|",{"2":{"886":1}}],["hookspecificoutput",{"2":{"880":1,"895":1}}],["hooks",{"2":{"1":2,"2":1,"10":1,"29":1,"95":1,"97":1,"99":1,"203":4,"263":1,"274":10,"280":1,"342":1,"542":1,"646":1,"647":4,"792":1,"842":1,"847":2,"880":3,"881":5,"883":2,"886":5,"895":6}}],["hover",{"2":{"27":1,"28":1,"921":1,"922":1,"924":1,"925":1,"927":3}}],["homepage",{"2":{"274":2}}],["home",{"2":{"27":1,"274":1}}],["howler",{"2":{"761":1,"762":1}}],["how",{"2":{"11":1,"87":1,"351":1,"555":1,"902":1}}],["hocstorefactory",{"2":{"652":1}}],["hoc",{"2":{"1":1,"646":2,"647":2,"652":1}}],["能不能拿出时间来捣鼓",{"2":{"957":1}}],["能成为你知识体系中一块有价值的拼图",{"2":{"934":1}}],["能成为你升级认知操作系统的核心组件",{"2":{"389":1}}],["能完美兼容上层的所有开发模式",{"2":{"929":1}}],["能快速触达核心信息与隐性经验",{"2":{"625":1}}],["能读取的文件数量和大小",{"2":{"594":1}}],["能深度索引企业级代码库",{"2":{"567":1}}],["能接收",{"2":{"567":1}}],["能前瞻",{"2":{"564":1}}],["能从需求描述自动生成完整项目",{"2":{"561":1}}],["能判断",{"2":{"556":1}}],["能写后端",{"2":{"553":1}}],["能写多快",{"2":{"525":1}}],["能用来梳理",{"2":{"953":1}}],["能用",{"2":{"550":1}}],["能用于检测代码是否符合指定的编码规范",{"2":{"219":1}}],["能借助",{"2":{"542":1}}],["能展开说说",{"2":{"518":1}}],["能否使用海外服务",{"2":{"519":1}}],["能否接受海外结算与汇率风险",{"2":{"519":1}}],["能否检索今日新闻",{"2":{"517":1}}],["能否跨文档建立联系",{"2":{"514":1}}],["能否导入",{"2":{"514":1}}],["能否将一个模糊的业务痛点",{"2":{"367":1}}],["能做产品阶段",{"2":{"459":1}}],["能做什么",{"2":{"411":1}}],["能精准匹配技能",{"2":{"445":1}}],["能有效降低任务遗漏和幻觉风险",{"2":{"423":1}}],["能有效缓解某些复杂的循环引用问题",{"2":{"318":1}}],["能说",{"2":{"418":1}}],["能听",{"2":{"418":1}}],["能看",{"2":{"418":1}}],["能编排复杂",{"2":{"403":1}}],["能量传到末端就结束了",{"2":{"386":1}}],["能以最低的成本感知并修正",{"2":{"376":1}}],["能理解的精确指令和环境",{"2":{"367":1}}],["能把模糊的人类需求翻译成",{"2":{"367":1}}],["能解决什么痛点",{"2":{"342":1}}],["能帮助用户学习诗歌创作的窍门",{"2":{"506":1}}],["能帮助我们更深入地洞察类型系统的本质",{"2":{"244":1}}],["能帮助我们更深刻地理解",{"2":{"66":1}}],["能帮你生成",{"2":{"460":1}}],["能帮开发者用更少的代码",{"2":{"340":1}}],["能跑就行",{"2":{"337":1}}],["能极大地降低沟通成本",{"2":{"330":1}}],["能根治依赖混乱",{"2":{"315":1}}],["能提供精准的补全",{"2":{"310":1}}],["能提高效率",{"2":{"192":1}}],["能对代码的加载",{"2":{"309":1}}],["能为你未来的工程实践铺垫好最坚实的底色",{"2":{"303":1}}],["能为后续快照测试",{"2":{"3":1}}],["能显著优化大型应用的首页首屏加载速度",{"2":{"297":1}}],["能确定联合类型的具体分支时",{"2":{"231":1}}],["能确保回调命名语义清晰",{"2":{"10":1}}],["能确保状态设计遵循",{"2":{"10":1}}],["能自己用简单代码实现的",{"2":{"192":1}}],["能突破",{"2":{"160":1}}],["能力检测",{"2":{"734":1}}],["能力维度",{"2":{"542":1,"545":1,"550":1,"551":1,"555":1,"557":1}}],["能力演进",{"2":{"534":1}}],["能力重塑",{"2":{"525":1}}],["能力与意识是程序员的底层",{"2":{"509":1}}],["能力并非一蹴而就",{"2":{"464":1}}],["能力拆解图",{"2":{"458":1}}],["能力文件夹",{"2":{"441":1}}],["能力编织成高吞吐量的工作流",{"2":{"440":1}}],["能力规模化",{"2":{"426":1}}],["能力边界的清晰认知",{"2":{"493":1}}],["能力边界",{"2":{"408":1}}],["能力建构",{"2":{"406":1}}],["能力的提升",{"2":{"527":1}}],["能力的",{"2":{"403":1}}],["能力模块",{"2":{"248":1}}],["能力最有力的背书",{"2":{"60":1}}],["能力",{"2":{"52":1,"434":1,"512":1,"518":1,"565":1,"843":1,"921":1}}],["能够熟练地与",{"2":{"903":1}}],["能够批量处理信息",{"2":{"628":1}}],["能够完成",{"2":{"567":1}}],["能够设计出高可用",{"2":{"558":1}}],["能够发现真实世界中值得解决的问题",{"2":{"558":1}}],["能够利用",{"2":{"548":1}}],["能够像搭积木一样",{"2":{"547":1}}],["能够像乐高积木一样无缝对接各种云端",{"2":{"411":1}}],["能够快速响应业务需求",{"2":{"542":1}}],["能够快速读懂",{"2":{"533":1}}],["能够单枪匹马或带领极小团队",{"2":{"540":1}}],["能够更灵活细致地抒情和叙事",{"2":{"506":1}}],["能够更高效地执行和管理",{"2":{"422":1}}],["能够按要求输出诗歌",{"2":{"505":2}}],["能够轻松回答诸如",{"2":{"486":1}}],["能够独立开发完整产品",{"2":{"459":1}}],["能够显著提升",{"2":{"444":1}}],["能够在实际项目中灵活应用",{"2":{"545":1}}],["能够在更复杂的场景下执行更专业的任务",{"2":{"441":1}}],["能够在提供类型安全的同时",{"2":{"256":1}}],["能够稳定",{"2":{"436":1}}],["能够聚焦于每一个细小的确定性步骤",{"2":{"422":1}}],["能够自主调度资源并交付结果的",{"2":{"420":1}}],["能够作为机器上的长久守护进程运行",{"2":{"419":1}}],["能够处理具备深度依赖关系的复杂工程",{"2":{"414":1}}],["能够解决开放式问题的智能系统",{"2":{"414":1}}],["能够",{"2":{"410":1}}],["能够精准理解复杂指令",{"2":{"402":1}}],["能够区分",{"2":{"366":1}}],["能够识别用户未说出口的情绪",{"2":{"366":1}}],["能够切换到用户的真实使用场景",{"2":{"366":1}}],["能够准确理解并生成高质量代码的前提",{"2":{"332":1}}],["能够迅速建立",{"2":{"332":1}}],["能够迅速为我们铺好工程地基",{"2":{"3":1}}],["能够有效封装业务规则",{"2":{"281":1}}],["能够有效压缩",{"2":{"11":1}}],["能够让我们在保持代码简洁的同时",{"2":{"263":1}}],["能够帮助我们更高效地构建和维护高质量的",{"2":{"226":1}}],["能够极其精确地管理复杂筛选条件下的缓存簇",{"2":{"104":1}}],["能够以惊人的速度生成代码时",{"2":{"12":1}}],["能基于此状态集合进行确定性渲染",{"2":{"5":1}}],["能通过已有",{"2":{"5":1}}],["能让每个分支都获得",{"2":{"243":1}}],["能让",{"2":{"2":1,"9":1,"12":1}}],["把日常看的时间管理相关书籍",{"2":{"963":1}}],["把事务丢进碎片清单的目的是要在其他合适的时间再去思考它",{"2":{"953":1}}],["把避免冲突的脏活累活全权交给框架的编译器",{"2":{"924":1}}],["把精力放在自己能掌控的事情上",{"2":{"626":1}}],["把有限的算力留给最高优的任务",{"2":{"624":1}}],["把逻辑理清楚",{"2":{"610":1}}],["把书中的观点用自己的话讲给别人听",{"2":{"610":1}}],["把自己作为方法",{"2":{"604":1}}],["把自己的分析发给",{"2":{"375":1}}],["把那些原本需要花费大量时间的繁琐工作",{"2":{"528":1}}],["把笔记丢进",{"2":{"515":1}}],["把每一缕风",{"2":{"508":1}}],["把抽象问题变成看得见的画面",{"2":{"494":1}}],["把判断力",{"2":{"466":1}}],["把它跑通",{"2":{"465":1,"466":1}}],["把想法变成可交互原型",{"2":{"461":1}}],["把一个",{"2":{"439":1}}],["把高频方法变成可复用能力",{"0":{"436":1}}],["把100行逻辑写在1个方法里",{"2":{"200":1}}],["把组件画到屏幕上",{"2":{"71":1}}],["把整页当作一个整体进行增量更新",{"2":{"53":1}}],["把状态隔离在局部子树时",{"2":{"6":1}}],["把",{"2":{"3":1,"357":1,"438":1,"515":1}}],["确实有点小贵",{"2":{"964":1}}],["确立了其作为",{"2":{"350":1}}],["确立工程基线",{"0":{"3":1}}],["确定核心技术栈",{"2":{"928":1}}],["确定竞争壁垒",{"2":{"396":1}}],["确定性网站",{"2":{"785":1}}],["确定性输出",{"2":{"784":1,"786":1}}],["确定性",{"0":{"433":1},"2":{"367":1}}],["确定上下文映射关系",{"2":{"282":1}}],["确定了产品方向后",{"2":{"494":1}}],["确定了",{"2":{"6":1}}],["确认所有测试通过",{"2":{"890":1}}],["确认测试因正确原因失败",{"2":{"890":1}}],["确认哪些文件已被",{"2":{"581":1}}],["确认差异后应用",{"2":{"564":1}}],["确认",{"2":{"564":1}}],["确认匹配后",{"2":{"443":1}}],["确认订单",{"2":{"281":1}}],["确认规范后",{"2":{"9":1}}],["确保能量",{"2":{"941":1}}],["确保修复有效",{"2":{"881":1}}],["确保用户适配器目录存在",{"2":{"800":1}}],["确保用户在切换",{"2":{"97":1}}],["确保单例",{"2":{"800":1}}],["确保自己在任何领域都能快速获取高质量资源",{"2":{"603":1}}],["确保将核心精力倾注在真正产生长远复利的",{"2":{"602":1}}],["确保我们在投入开发前是在",{"2":{"600":1}}],["确保信息时效性与多样性",{"2":{"494":1}}],["确保报告格式专业",{"2":{"470":1}}],["确保从",{"2":{"451":1}}],["确保描述真正可",{"2":{"445":1}}],["确保agent",{"2":{"423":1}}],["确保细碎的中间任务不会",{"2":{"415":1}}],["确保在最差的网络环境下也能实现极低的延迟",{"2":{"353":1}}],["确保在使用泛型时只能传递符合特定条件的类型",{"2":{"264":1}}],["确保其能从一堆相关度不高的文档中",{"2":{"352":1}}],["确保每个文件都可以安全地独立转译",{"2":{"322":1}}],["确保相关代码仅存在于开发阶段",{"2":{"318":1}}],["确保不会引入冗余的运行时负载",{"2":{"318":1}}],["确保不会重复发送请求",{"2":{"81":1}}],["确保了性能",{"2":{"304":1}}],["确保一个模块",{"2":{"301":1}}],["确保只有一个",{"2":{"288":1}}],["确保沟通准确",{"2":{"277":1}}],["确保泛型参数是某个基类的子类",{"2":{"270":1}}],["确保泛型参数继承了基类的属性和方法",{"2":{"269":1}}],["确保访问的属性确实存在于对象中",{"2":{"270":1}}],["确保可以安全使用",{"2":{"270":1}}],["确保数据流的可预测性",{"2":{"274":1}}],["确保数据具有预期的属性和方法",{"2":{"270":1}}],["确保数据具有预期的形状",{"2":{"266":1}}],["确保数据的",{"2":{"119":1}}],["确保类型安全性",{"2":{"264":1}}],["确保键类型安全",{"2":{"262":1}}],["确保项目可以被其他项目安全引用",{"2":{"208":1}}],["确保代码质量",{"2":{"203":1}}],["确保代码符合项目规范",{"2":{"9":1}}],["确保方法确实重写了父类方法",{"2":{"203":1}}],["确保方案满足",{"2":{"201":1}}],["确保实时推送",{"2":{"177":1}}],["确保回调只执行一次",{"2":{"175":1}}],["确保",{"2":{"175":1,"436":1,"532":1,"597":1,"610":1}}],["确保流读取器被释放",{"2":{"168":1}}],["确保消息不丢失",{"2":{"122":1}}],["确保同一渲染周期内多次调用只发起一次",{"2":{"81":1}}],["确保生成的组件是高内聚",{"2":{"11":1}}],["确保接口一致性",{"2":{"10":1}}],["确保行为的可预测性",{"2":{"9":1}}],["确保设计符合架构原则",{"2":{"9":1}}],["确保这份静态基线的绝对纯粹",{"2":{"3":1}}],["确保这套",{"2":{"2":1}}],["等书",{"2":{"953":1}}],["等第三方",{"2":{"934":1}}],["等高阶工程化链路的唯一底层载体",{"2":{"932":1}}],["等高性能推理框架",{"2":{"551":1}}],["等大模型辅助生成代码极度友好",{"2":{"930":1}}],["等大模型背后的计算机制",{"2":{"598":1}}],["等原子化",{"2":{"930":1}}],["等原生实时技术成熟前",{"2":{"115":1}}],["等重型库",{"2":{"928":1}}],["等直观类名即可拼凑出专业界面",{"2":{"926":1}}],["等构建工具的标配功能",{"2":{"923":1}}],["等组件化框架的兴起",{"2":{"922":1}}],["等组合异步状态",{"2":{"113":1}}],["等其他",{"2":{"814":1}}],["等桌面应用",{"2":{"785":1}}],["等数据操作",{"2":{"706":1}}],["等数百个模型",{"2":{"523":1}}],["等功能",{"2":{"706":1}}],["等顶层",{"2":{"704":1}}],["等设计编辑器",{"2":{"671":1}}],["等场景",{"2":{"653":1}}],["等嵌套属性",{"2":{"649":2}}],["等常用命令",{"2":{"572":1}}],["等快捷指令",{"2":{"570":1}}],["等名词",{"2":{"558":1}}],["等能够在一分钟内生成高质量的",{"2":{"553":1}}],["等后端架构",{"2":{"552":1}}],["等可观测性工具",{"2":{"550":1}}],["等可选文件",{"2":{"442":1}}],["等核心指标",{"2":{"550":1}}],["等核心组件",{"2":{"434":1}}],["等评估框架",{"2":{"550":1}}],["等熟悉的后端生态快速构建",{"2":{"548":1}}],["等标准化协议的成熟",{"2":{"548":1}}],["等主流模型",{"2":{"564":1}}],["等主流模型的统一",{"2":{"523":1}}],["等主流",{"2":{"545":1}}],["等智能体设计模式",{"2":{"545":1}}],["等技术工程的任务拆解与路由机制",{"2":{"545":1}}],["等技能",{"2":{"453":1}}],["等新一代交互模式",{"2":{"543":1}}],["等强约束机制",{"2":{"542":1}}],["等国际主流模型",{"2":{"523":1}}],["等专项子模型",{"2":{"522":1}}],["等系列模型",{"2":{"522":2}}],["等模型作为",{"2":{"903":1}}],["等模型接口的实例",{"2":{"857":1}}],["等模型",{"2":{"522":1}}],["等模型生成的长文本",{"2":{"118":1}}],["等版本",{"2":{"521":1}}],["等多种格式",{"2":{"713":1}}],["等多种资料",{"2":{"515":1}}],["等多语言",{"2":{"562":1}}],["等多版本模型",{"2":{"521":1}}],["等经典意象",{"2":{"508":1}}],["等你共舞字句星河",{"2":{"507":1}}],["等动词精准传递神韵",{"2":{"507":1}}],["等意象",{"2":{"507":1}}],["等扩展",{"2":{"491":1}}],["等价于",{"2":{"482":1}}],["等代表性产品层出不穷",{"2":{"477":1}}],["等子任务",{"2":{"474":1}}],["等脚本语言",{"2":{"442":1}}],["等脚本",{"2":{"442":1}}],["等安全增强版本的成熟",{"2":{"419":1}}],["等一系列通用工具",{"2":{"411":1}}],["等非",{"2":{"342":1,"562":1}}],["等请求方法",{"2":{"342":1}}],["等包管理工具管理模块依赖",{"2":{"335":1}}],["等工具确立工程约束",{"2":{"901":1}}],["等工具",{"2":{"558":1}}],["等工具生成高规范度代码",{"2":{"542":1}}],["等工具优化",{"2":{"341":1}}],["等工具进行平滑转译",{"2":{"308":1}}],["等工具让我们能够更自信地进行代码重构",{"2":{"226":1}}],["等内置方法",{"2":{"270":1}}],["等内部系统",{"2":{"132":1}}],["等单字母命名",{"2":{"263":1}}],["等思想不谋而合",{"2":{"255":1}}],["等声明方式",{"2":{"255":1}}],["等调试技术",{"2":{"226":1}}],["等调用者无需关心的信息",{"2":{"196":1}}],["等框架生态",{"2":{"928":1}}],["等框架中快速集成",{"2":{"843":1}}],["等框架中",{"2":{"256":1}}],["等框架中处理服务器状态的获取",{"2":{"103":1}}],["等框架",{"2":{"203":1,"286":1}}],["等打包工具",{"2":{"203":1}}],["等同于同时启用以下所有选项",{"2":{"203":1}}],["等反向代理的缓冲",{"2":{"177":1}}],["等凭证信息到服务器端",{"2":{"163":1}}],["等所有方法",{"2":{"160":1,"167":1}}],["等认证信息",{"2":{"160":1}}],["等字段约定",{"2":{"160":1}}],["等字段组成",{"2":{"121":1,"168":1}}],["等方案的演进关系与适用边界",{"2":{"145":1}}],["等指令来禁用缓冲",{"2":{"119":1}}],["等库",{"2":{"118":1}}],["等库的出现",{"2":{"95":1}}],["等现代工具链",{"2":{"112":1}}],["等现代构建工具打包时",{"2":{"97":1}}],["等底层状态机逻辑",{"2":{"110":1}}],["等状态",{"2":{"103":1}}],["等状态管理库来实现",{"2":{"95":1}}],["等待下一块",{"2":{"833":1}}],["等待下次数据补充",{"2":{"166":1}}],["等待中的命令",{"2":{"801":1}}],["等待系统重构的新机会",{"2":{"620":1}}],["等待用户输入",{"2":{"489":1}}],["等待所有",{"2":{"471":1}}],["等待人工分析报告往往错失战机",{"2":{"465":1}}],["等待时的体验",{"2":{"366":1}}],["等待指定毫秒后重试",{"2":{"175":1}}],["等待服务端响应",{"2":{"153":1}}],["等待更新",{"2":{"151":1}}],["等待一段时间后继续重试",{"2":{"149":1}}],["等待",{"2":{"101":1,"114":1,"149":1,"152":1,"153":1,"169":1}}],["等全系模型",{"2":{"523":1}}],["等全系列模型调用",{"2":{"521":1}}],["等全局状态库中",{"2":{"97":1}}],["等全部内容才呈现",{"2":{"55":1}}],["等需要独立",{"2":{"83":1}}],["等浏览器对象",{"2":{"59":1}}],["等平台的",{"2":{"895":1}}],["等平台通过",{"2":{"132":1}}],["等平台",{"2":{"32":1}}],["等攻击",{"2":{"15":1}}],["等",{"2":{"2":1,"20":1,"79":1,"95":1,"115":1,"131":1,"160":1,"169":1,"172":1,"203":1,"205":1,"210":1,"256":1,"285":1,"341":1,"343":1,"442":1,"477":1,"478":1,"494":1,"505":1,"510":1,"519":2,"523":5,"557":1,"559":1,"567":1,"570":1,"581":1,"645":2,"647":2,"650":1,"654":1,"661":1,"677":3,"701":1,"706":6,"734":1,"742":1,"743":1,"757":1,"762":1,"768":1,"769":3,"770":1,"771":1,"797":1,"842":1,"847":2,"849":1,"851":1,"854":1,"868":1,"879":1,"920":1,"923":1,"928":1,"931":1}}],["如嵌套",{"2":{"932":1}}],["如此不断增强",{"2":{"908":1}}],["如此无限死循环",{"2":{"386":1}}],["如涉及",{"2":{"888":1}}],["如需并行开发",{"2":{"883":1}}],["如有必要",{"2":{"796":1}}],["如有多余的",{"2":{"451":1}}],["如加法",{"2":{"741":1}}],["如加载网页",{"2":{"115":1}}],["如触发重绘",{"2":{"685":1}}],["如资深开发者",{"2":{"625":1}}],["如技术的适用场景",{"2":{"625":1}}],["如技术文章",{"2":{"625":1}}],["如技术文章更新",{"2":{"617":1}}],["如低价值技术社群",{"2":{"624":1}}],["如法律",{"2":{"614":1}}],["如纸张的手感",{"2":{"613":1}}],["如自动",{"2":{"594":1}}],["如自动发邮件通知相关责任人",{"2":{"417":1}}],["如安全审查不应该每次都手动触发",{"2":{"588":1}}],["如安全性",{"2":{"181":1}}],["如只在",{"2":{"577":1}}],["如统一的",{"2":{"573":1}}],["如共享类型",{"2":{"573":1}}],["如专注安全的审计员",{"2":{"570":1}}],["如允许",{"2":{"570":1}}],["如允许的工具",{"2":{"482":1}}],["如喜欢的注释风格",{"2":{"570":1}}],["如会话历史和自动记忆",{"2":{"570":1}}],["如长文总结",{"2":{"550":1}}],["如在浏览器插件中打破沙盒限制",{"2":{"548":1}}],["如含",{"2":{"547":1}}],["如代码提交前自动安全检查",{"2":{"570":1}}],["如代码生成",{"2":{"551":1}}],["如代码审计",{"2":{"547":1}}],["如代码重构",{"2":{"443":1}}],["如信息爬取",{"2":{"545":1}}],["如调整样式",{"2":{"537":1}}],["如履薄冰的手动重构",{"2":{"527":1}}],["如但丁的",{"2":{"506":1}}],["如荷马的史诗",{"2":{"506":1}}],["如无关主题或形式错误",{"2":{"504":1}}],["如无必要",{"2":{"181":1}}],["如智能化审稿流",{"2":{"485":1}}],["如内容自动校对",{"2":{"477":1}}],["如内部文档工具",{"2":{"58":1}}],["如研究论文",{"2":{"468":1}}],["如上图所示",{"2":{"459":1}}],["如上所述",{"2":{"165":1,"941":1,"956":1}}],["如创建分支",{"2":{"451":1}}],["如同我们在日常对话中下达的即时指令",{"2":{"435":1}}],["如一键全文搜索",{"2":{"613":1}}],["如一段代码或一份大纲",{"2":{"426":1}}],["如一个类或一个大组件",{"2":{"311":1}}],["如文档",{"2":{"465":1}}],["如文本",{"2":{"418":1}}],["如文件不存在",{"2":{"583":1}}],["如文件系统操作",{"2":{"478":1}}],["如文件上传上下文",{"2":{"160":1}}],["如文件描述符",{"2":{"153":1}}],["如推理",{"2":{"412":1}}],["如操作本地文件或内网数据库",{"2":{"411":1}}],["如公司财务报表",{"2":{"411":1}}],["如高阶数学",{"2":{"411":1}}],["如广告平台",{"2":{"399":1}}],["如学生优惠",{"2":{"397":1}}],["如可口可乐和百事可乐",{"2":{"392":1}}],["如今的问题早已不是信息匮乏",{"2":{"620":1}}],["如今可在数小时内完成闭环验证",{"2":{"529":1}}],["如今在",{"2":{"527":1}}],["如今",{"2":{"361":1}}],["如天气",{"2":{"349":1,"411":1}}],["如提交代码",{"2":{"343":1}}],["如构建",{"2":{"343":1}}],["如前端使用",{"2":{"342":1}}],["如互相依赖的串行请求",{"2":{"342":1}}],["如服务器端渲染",{"2":{"338":1}}],["如标题",{"2":{"338":1}}],["如数字",{"2":{"270":1}}],["如数据库模型",{"2":{"269":1}}],["如数据库查询",{"2":{"86":1}}],["如数据库操作",{"2":{"20":1}}],["如既需要可比较又需要可序列化",{"2":{"267":1}}],["如函数输入输出的类型",{"2":{"263":1}}],["如深拷贝",{"2":{"256":1}}],["如异步测试",{"2":{"225":1}}],["如未使用的变量",{"2":{"219":1}}],["如电商订单",{"2":{"200":1}}],["如电商详情页中所有用户共享的商品图文介绍",{"2":{"88":1}}],["如是否有",{"2":{"199":1}}],["如参数传错",{"2":{"198":1}}],["如怀疑框架漏洞",{"2":{"198":1}}],["如id生成方式",{"2":{"197":1}}],["如用map",{"2":{"200":1}}],["如用jdk自带的java",{"2":{"194":1}}],["如用户个人信息",{"2":{"408":1}}],["如用户指令",{"2":{"408":1,"410":1}}],["如用户发送消息",{"2":{"132":1}}],["如用户头像",{"2":{"52":1}}],["如用户信息",{"2":{"14":1}}],["如工具类",{"2":{"192":1}}],["如大项目的模块解耦",{"2":{"191":1}}],["如多次使用的",{"2":{"188":1}}],["如多人竞技游戏",{"2":{"143":1}}],["如认证失效",{"2":{"171":1}}],["如仅支持",{"2":{"165":1}}],["如某些古老的",{"2":{"320":1}}],["如某些",{"2":{"156":1}}],["如浏览器",{"2":{"151":1}}],["如几个小时",{"2":{"148":1}}],["如每秒请求一次",{"2":{"145":1}}],["如支付网关",{"2":{"439":1}}],["如支付平台回调",{"2":{"143":1}}],["如支付回调",{"2":{"142":1}}],["如股票行情大盘",{"2":{"143":1}}],["如更新本地数据",{"2":{"131":1}}],["如实时游戏状态同步",{"2":{"127":1}}],["如实时生成的缩略图",{"2":{"124":1}}],["如超长的",{"2":{"124":1}}],["如超大文件或视频流的段落化加载",{"2":{"118":1}}],["如传感器数值同步",{"2":{"115":1}}],["如游戏",{"2":{"114":1}}],["如列表",{"2":{"110":1}}],["如弹窗开关",{"2":{"97":1}}],["如查询数据库",{"2":{"86":1}}],["如页面布局骨架",{"2":{"52":1}}],["如复杂数据分析",{"2":{"31":1}}],["如新闻网站",{"2":{"31":1}}],["如聊天软件",{"2":{"31":1}}],["如博客文章",{"2":{"21":1}}],["如登录",{"2":{"16":1}}],["如何构建可扩展的样式工程化体系",{"0":{"928":1},"1":{"929":1,"930":1,"931":1,"932":1,"933":1}}],["如何构建可靠的工程闭环",{"2":{"491":1}}],["如何使用",{"2":{"880":1}}],["如何使用技能系统",{"2":{"879":1,"887":1}}],["如何分析和批判不同的观点",{"2":{"608":1}}],["如何编写一个高可用的",{"2":{"588":1}}],["如何创建",{"0":{"574":1}}],["如何上手",{"2":{"561":1,"564":1,"567":1}}],["如何重塑编程工作流",{"2":{"559":1}}],["如何利用",{"2":{"540":1,"950":1}}],["如何让",{"2":{"534":1}}],["如何保持技术尖锐度并构建新的",{"2":{"525":1}}],["如何改变",{"2":{"525":1}}],["如何通过解决被忽视的痛点实现跨越式成长",{"2":{"601":1}}],["如何通过",{"2":{"496":1}}],["如何通过类型系统增强模块化编程",{"2":{"317":1}}],["如何用客观标准证明任务成功了",{"2":{"450":1}}],["如何将脑海中的研发规范或操作流程",{"2":{"444":1}}],["如何将数据同步到服务器",{"2":{"100":1}}],["如何写好一个",{"0":{"444":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1}}],["如何执行",{"2":{"443":1}}],["如何思考",{"2":{"433":1}}],["如何为你的",{"0":{"432":1}}],["如何实现",{"0":{"376":1}}],["如何从",{"0":{"368":1},"1":{"369":1,"370":1,"371":1,"372":1,"373":1,"374":1,"375":1}}],["如何在业余更大范围地尝试",{"2":{"957":1}}],["如何在有限的上下文窗口",{"2":{"367":1}}],["如何在复杂性中建立秩序",{"2":{"12":2}}],["如何驾驭日益庞大的系统复杂度",{"2":{"303":1}}],["如何拆分",{"2":{"71":1}}],["如何落地",{"0":{"61":1},"1":{"62":1,"63":1,"64":1}}],["如何优化重渲染性能",{"2":{"11":1}}],["如何批量处理状态更新",{"2":{"11":1}}],["如何高效地",{"2":{"11":1,"348":1}}],["如何高效地解决",{"2":{"8":1}}],["如表单控件",{"2":{"10":1}}],["如果出现反弹情况",{"2":{"964":1}}],["如果还有体力",{"2":{"961":1}}],["如果还能在工作和生活中尝试起来",{"2":{"943":1}}],["如果还在处理中",{"2":{"149":1}}],["如果时间足够充裕",{"2":{"942":1}}],["如果为",{"2":{"839":1}}],["如果错误是致命的",{"2":{"839":1}}],["如果不是有特别感兴趣的话题也基本不扯闲淡",{"2":{"959":1}}],["如果不觉得笔者在做广告",{"2":{"948":1}}],["如果不期望服务器关闭连接",{"2":{"839":1}}],["如果不做会怎样",{"2":{"366":1}}],["如果响应不符合预期",{"2":{"839":1}}],["如果未指定此回调或返回",{"2":{"839":1}}],["如果未提供",{"2":{"839":1}}],["如果未来能集成",{"2":{"509":1}}],["如果传达给一个没有执行力的人",{"2":{"622":1}}],["如果只读书而不参与社会实践",{"2":{"614":1}}],["如果对话者水平高",{"2":{"610":1}}],["如果单纯观察代码产出行数",{"2":{"526":1}}],["如果用户未明确形式或主题",{"2":{"504":1}}],["如果试图用肉身去对抗各领域的专业深度",{"2":{"458":1}}],["如果前两层是造车和开车的",{"2":{"551":1}}],["如果前面四个组件都在解决",{"2":{"439":1}}],["如果前端项目和后端代码没有在一个",{"2":{"342":1}}],["如果希望多个代理复用同一套安全审查流程",{"2":{"438":1}}],["如果目标已达成",{"2":{"429":1}}],["如果当前结果是中间产物",{"2":{"429":1}}],["如果当初迁移时选择了保留",{"2":{"66":1}}],["如果整个规划过程过长",{"2":{"424":1}}],["如果一个人单凭拼凑信息就能战胜市场",{"2":{"621":1}}],["如果一个人只是一味读书而极少参与社会实践",{"2":{"614":1}}],["如果一个人通过",{"2":{"553":1}}],["如果一个人就能通过",{"2":{"553":1}}],["如果一个技能适用于所有任务",{"2":{"445":1}}],["如果一次搜索没有找到答案",{"2":{"412":1}}],["如果一家涨价",{"2":{"392":1}}],["如果规划模块赋予了",{"2":{"410":1}}],["如果签到带来的价值不足以改变用户行为",{"2":{"366":1}}],["如果把产品",{"2":{"364":1}}],["如果要问",{"2":{"362":1}}],["如果检索到的文档信息不足",{"2":{"352":1}}],["如果既不是核心模块也不是路径",{"2":{"334":1}}],["如果都不存在",{"2":{"306":1}}],["如果存在",{"2":{"306":2}}],["如果我们宽泛地谈改变",{"2":{"958":1}}],["如果我们把不同任务放在一起训练",{"2":{"918":1}}],["如果我们的基础概率比竞争对手低",{"2":{"917":1}}],["如果我们做成某件事的基础概率比较大",{"2":{"917":1}}],["如果我们总是基于斜率非常接近的直线建立方程组",{"2":{"915":1}}],["如果我们从多个角度观察",{"2":{"915":1}}],["如果我们无法洞察表象背后的系统",{"2":{"908":1}}],["如果我们无法破译表象背后的系统",{"2":{"382":1}}],["如果我们全盘接受这种便利",{"2":{"530":1}}],["如果我们能把结尾与开头也连接起来",{"2":{"386":1}}],["如果我们能确保某个值确实是",{"2":{"232":1}}],["如果我们想让一个函数同时支持",{"2":{"255":1}}],["如果无法推断",{"2":{"254":1}}],["如果交叉结果为",{"2":{"237":1}}],["如果遗漏了任何分支",{"2":{"232":1}}],["如果使用",{"2":{"221":1}}],["如果需要在项目中覆盖全局配置",{"2":{"571":1}}],["如果需要通过图像增强诗歌的意境表达",{"2":{"504":1}}],["如果需要像",{"2":{"179":1}}],["如果需要传输二进制文件",{"2":{"124":1}}],["如果是",{"2":{"329":2,"451":1,"883":3}}],["如果是对象需要",{"2":{"178":1}}],["如果是致命错误或用户主动取消",{"2":{"175":1}}],["如果有人问起",{"2":{"945":1}}],["如果有",{"2":{"168":1}}],["如果返回",{"2":{"153":1}}],["如果在做的过程中还惧怕错了",{"2":{"953":1}}],["如果在未来",{"2":{"945":1}}],["如果在挂起期间任务完成了",{"2":{"152":1}}],["如果在这段时间内任务完成了",{"2":{"151":1}}],["如果没有曾经的一段经历",{"2":{"958":1}}],["如果没有疫情这三年的经历和刻意的向内思变",{"2":{"958":1}}],["如果没有疫情",{"2":{"955":1}}],["如果没有这些链条",{"2":{"385":1}}],["如果没有更新",{"2":{"151":1}}],["如果没有或者已过期",{"2":{"104":1}}],["如果这时间到了任务依然未完成",{"2":{"151":1}}],["如果任务在第",{"2":{"149":1}}],["如果客户端仍以固定高频重试",{"2":{"147":1}}],["如果你真想创造价值",{"2":{"620":1}}],["如果你希望了解",{"2":{"467":1}}],["如果你能在其中任何一个场景里",{"2":{"465":1}}],["如果你正处于不知道",{"2":{"465":1}}],["如果你发现在多个",{"2":{"437":1}}],["如果你是这个产品的",{"2":{"375":1}}],["如果你来做",{"2":{"374":1}}],["如果你猜错了",{"2":{"369":1}}],["如果你猜对了",{"2":{"369":1}}],["如果你对这些思考感兴趣",{"2":{"902":1}}],["如果你对",{"2":{"145":1,"491":1}}],["如果你的业务需要双向实时交互",{"2":{"180":1}}],["如果你的接口设计已经非常规范",{"2":{"112":1}}],["如果你的页面内容在构建时就已知且不变",{"2":{"66":1}}],["如果决定使用轮询",{"2":{"140":1}}],["如果业务需要客户端也实时回传数据",{"2":{"119":1}}],["如果项目是一个重展示",{"2":{"111":1}}],["如果项目是一个重操作",{"2":{"111":1}}],["如果更新了一个项目详情",{"2":{"110":1}}],["如果失败则回滚",{"2":{"108":1}}],["如果缓存里有",{"2":{"104":1}}],["如果后端请求失败",{"2":{"100":1}}],["如果",{"2":{"99":1,"100":1,"101":1,"108":1,"137":1,"427":1,"439":1,"445":1,"832":1,"890":1}}],["如果多个组件",{"2":{"97":1}}],["如果服务端和客户端的渲染结果不一致",{"2":{"70":1}}],["如果文档站不用",{"2":{"66":1}}],["如果说时间管理其实就是对时间这一个维度进行切割",{"2":{"955":1}}],["如果说普通的",{"2":{"927":1}}],["如果说开发",{"2":{"550":1}}],["如果说大模型是大脑",{"2":{"544":1}}],["如果说任务分解是",{"2":{"426":1}}],["如果说通用",{"2":{"417":1}}],["如果说增强回路的存在",{"2":{"387":1,"910":1}}],["如果说变量是独立的节点",{"2":{"385":1}}],["如果说上述代码是模块化的",{"2":{"296":1}}],["如果说联合类型代表",{"2":{"236":1}}],["如果说传统的",{"2":{"402":1}}],["如果说传统",{"2":{"116":1}}],["如果说",{"2":{"11":1,"120":1,"130":1,"436":1,"534":1,"584":1}}],["如果祖先节点已有",{"2":{"6":1}}],["如果满足以下任何一条",{"2":{"5":1}}],["如根据商品列表计算出的库存总量",{"2":{"5":1}}],["如外部注入的数据",{"2":{"5":1}}],["如静态配置",{"2":{"5":1}}],["如",{"2":{"2":1,"3":1,"14":1,"15":1,"16":2,"26":1,"29":1,"39":1,"59":1,"71":1,"88":1,"93":1,"97":1,"104":1,"124":1,"131":1,"132":1,"133":1,"135":1,"136":1,"137":1,"145":1,"147":2,"148":1,"153":1,"155":1,"160":1,"168":1,"169":1,"180":1,"188":1,"201":1,"203":7,"205":1,"209":1,"210":2,"217":1,"231":1,"263":3,"270":3,"291":1,"302":1,"306":2,"307":1,"308":1,"329":1,"330":7,"331":1,"334":2,"340":1,"342":3,"343":2,"354":1,"355":1,"367":1,"411":1,"412":1,"414":2,"429":1,"442":1,"443":1,"451":2,"474":1,"477":1,"478":1,"507":2,"510":1,"523":1,"542":2,"543":1,"548":2,"550":1,"551":2,"559":1,"561":1,"564":1,"567":1,"570":1,"572":3,"573":9,"578":2,"579":1,"581":1,"588":1,"624":1,"659":1,"661":3,"663":1,"682":1,"685":1,"709":1,"712":1,"714":1,"715":1,"743":1,"748":1,"769":1,"771":1,"774":1,"884":2,"892":1,"895":1,"920":1,"921":1,"923":1,"924":6,"925":1,"928":2,"929":2,"931":1,"933":2,"957":1}}],["提到",{"2":{"587":2}}],["提到的一个常见的商业管理模式",{"2":{"909":1}}],["提到的",{"2":{"359":1}}],["提任务",{"2":{"559":1}}],["提效的同时",{"2":{"539":1}}],["提效时",{"2":{"526":1}}],["提问",{"2":{"514":1}}],["提问力决定生产力",{"0":{"358":1}}],["提高对环境的适应能力",{"2":{"941":1}}],["提高复杂图形的重绘性能",{"2":{"682":1}}],["提高规划的可行性和执行效率",{"2":{"422":1}}],["提高代码的可维护性和可复用性",{"2":{"296":1}}],["提高了代码的可维护性",{"2":{"292":1}}],["提高开发效率和代码质量",{"2":{"293":1}}],["提高开发效率",{"2":{"285":1,"569":1}}],["提高业务价值",{"2":{"283":1}}],["提案",{"2":{"203":1}}],["提前到了",{"2":{"326":1}}],["提前定义了大量未使用的字段和方法",{"2":{"184":1}}],["提前加入复杂逻辑",{"2":{"183":1}}],["提前设计未来功能",{"0":{"183":1},"1":{"184":1,"185":1}}],["提出一个新的开发需求",{"2":{"892":1}}],["提出并推动的一种开放式标准",{"2":{"547":1}}],["提出并实现",{"2":{"53":1}}],["提出正确问题的能力",{"2":{"367":1}}],["提出",{"2":{"181":1,"304":1,"888":1}}],["提取的元数据",{"2":{"895":1}}],["提取指标",{"2":{"470":1}}],["提取关键洞察",{"2":{"468":1}}],["提取网页内容",{"2":{"412":1}}],["提取公共方法",{"2":{"188":1}}],["提取字段值",{"2":{"168":1}}],["提取字段名",{"2":{"168":1}}],["提取",{"2":{"166":1}}],["提取所有完整的行",{"2":{"166":1}}],["提交模板",{"2":{"881":2}}],["提交到",{"2":{"570":1,"571":1,"596":1}}],["提交历史中没有空的或重复的合并记录",{"2":{"451":1}}],["提交",{"2":{"451":1,"570":6,"650":1,"654":1,"889":1}}],["提交规范",{"2":{"451":1}}],["提交代码",{"2":{"451":1}}],["提交任务",{"2":{"138":1}}],["提交表单",{"2":{"115":1}}],["提交评论",{"2":{"28":3}}],["提示框等",{"2":{"709":1}}],["提示框组件",{"2":{"706":1}}],["提示框",{"2":{"699":1}}],["提示用户并拒绝执行提交",{"2":{"581":1}}],["提示用户检查",{"2":{"449":1}}],["提示词标准化",{"2":{"853":1}}],["提示词工程",{"2":{"842":1}}],["提示词演进",{"2":{"503":1}}],["提示词",{"2":{"358":1}}],["提示信息",{"2":{"196":1}}],["提示",{"2":{"33":1,"320":1,"490":1,"889":1}}],["提供更丰富的交互体验",{"2":{"928":1}}],["提供更好的类型推断",{"2":{"264":1}}],["提供最符合直觉的物理隔离",{"2":{"928":1}}],["提供最关键的先验知识",{"2":{"367":1}}],["提供三种钩子",{"2":{"861":1}}],["提供服务定位器模式",{"2":{"860":1}}],["提供指数退避重试包装器",{"2":{"856":1}}],["提供面向开发者的高层",{"2":{"847":1}}],["提供开箱即用的",{"2":{"842":1}}],["提供开箱即用的自动重试",{"2":{"103":1}}],["提供商",{"2":{"842":1}}],["提供商的",{"2":{"842":1}}],["提供完整的类型定义",{"2":{"822":1}}],["提供稳定的元素重识别机制",{"2":{"799":1}}],["提供结构化的技能和确定性的输出",{"2":{"789":1}}],["提供结构化工作流",{"2":{"787":1}}],["提供浏览器操作和",{"2":{"784":1}}],["提供属性插值",{"2":{"761":1}}],["提供声明式",{"2":{"741":1}}],["提供多个入口文件以适应不同使用场景",{"2":{"736":1}}],["提供多级",{"2":{"478":1}}],["提供所有可注册类型的入口",{"2":{"720":1}}],["提供所有可注册的类型入口",{"2":{"711":1}}],["提供数据点到像素的映射能力",{"2":{"709":1}}],["提供坐标系变换的嵌套",{"2":{"680":1}}],["提供树的遍历",{"2":{"680":1}}],["提供事件监听系统",{"2":{"680":1}}],["提供创建",{"2":{"675":1}}],["提供兼容性",{"2":{"673":1}}],["提供可视化伴侣",{"2":{"888":1}}],["提供可视化的锚点控件",{"2":{"680":1}}],["提供可视化编辑功能",{"2":{"656":1}}],["提供可参考的同类问题",{"2":{"494":1}}],["提供编辑器基础设施",{"2":{"656":1}}],["提供沙箱安全的公式计算能力",{"2":{"645":1}}],["提供补充视角",{"2":{"628":1}}],["提供精准的上下文感知补全和",{"2":{"567":1}}],["提供个人免费版与企业版",{"2":{"564":1}}],["提供高质量的上下文",{"2":{"557":1}}],["提供统一",{"2":{"523":1}}],["提供通用对话",{"2":{"512":1}}],["提供全面的教学辅助",{"2":{"493":1}}],["提供全球",{"2":{"19":1}}],["提供简洁的",{"2":{"478":1}}],["提供简单",{"2":{"341":1}}],["提供底层工具链支持",{"2":{"442":1}}],["提供持续积累的知识与对话上下文",{"2":{"437":1}}],["提供的推理",{"2":{"523":1}}],["提供的声明式开发体验",{"2":{"476":1}}],["提供的",{"2":{"345":1,"491":1}}],["提供的是",{"2":{"168":1}}],["提供卓越的",{"2":{"344":1}}],["提供一致的渲染结果",{"2":{"728":1}}],["提供一致的状态更新和可预测的行为",{"2":{"341":1}}],["提供一个不如意但价格相近的选项",{"2":{"397":1}}],["提供一体化的开发体验",{"2":{"344":1}}],["提供比",{"2":{"343":1}}],["提供动态路由匹配",{"2":{"341":2}}],["提供丰富的组件和样式",{"2":{"340":2}}],["提供清晰的",{"2":{"331":1}}],["提供类似集合的接口来访问领域对象",{"2":{"278":1}}],["提供横切关注点支持",{"2":{"274":1}}],["提供极度精细的生命周期控制和强大的底层",{"2":{"110":1}}],["提供了封闭的枚举上下文",{"2":{"928":1}}],["提供了变量",{"2":{"921":1}}],["提供了卓越的开发者体验",{"2":{"904":1}}],["提供了类型安全和数据验证功能",{"2":{"845":1}}],["提供了从数据流到",{"2":{"842":1}}],["提供了两个入口",{"2":{"679":1}}],["提供了另一种抽象层次",{"2":{"589":1}}],["提供了一系列高度可组合",{"2":{"925":1}}],["提供了一个与",{"2":{"482":1}}],["提供了一个随时可回滚的基线",{"2":{"3":1}}],["提供了一种简单的方式来管理全局状态",{"2":{"341":1}}],["提供了高性能的网页渲染和交互功能",{"2":{"338":1}}],["提供了深度优化的可能",{"2":{"307":1}}],["提供了配置文件的方式来管理编译设置",{"2":{"202":1}}],["提供了专门的",{"2":{"110":1,"924":1}}],["提供了",{"2":{"71":1,"83":1,"104":1,"110":1,"178":1,"205":1}}],["提供",{"2":{"21":1,"23":1,"518":1,"521":2,"522":4,"523":2,"670":1,"682":1,"704":1,"713":1,"758":1,"769":1,"832":1,"847":1}}],["提供需求描述或",{"2":{"2":1}}],["提升效率",{"2":{"956":1}}],["提升自身身体素质",{"2":{"942":1}}],["提升自身健康",{"2":{"942":1}}],["提升开发体验",{"2":{"822":1}}],["提升性能",{"2":{"757":1}}],["提升思考深度和执行效率",{"2":{"626":1}}],["提升",{"2":{"578":1}}],["提升他们协助孩子分析与解决问题的能力",{"2":{"494":1}}],["提升信息传达效率",{"2":{"468":1}}],["提升信息处理转化率的",{"2":{"356":1}}],["提升你的实现速度",{"2":{"463":1}}],["提升整体吞吐量",{"2":{"438":1}}],["提升运行质量",{"2":{"409":1}}],["提升模型对深层语义的理解",{"2":{"352":1}}],["提升索引的新鲜度和全面性",{"2":{"352":1}}],["提升到了",{"2":{"317":1}}],["提升可维护性",{"2":{"297":1}}],["提升编译速度",{"2":{"212":1}}],["提升编译效率",{"2":{"207":1}}],["提升了系统吞吐量",{"2":{"118":1}}],["提升灵活性",{"2":{"1":1}}],["提升的是",{"2":{"1":1}}],["进一步强化把握最终目标",{"2":{"963":1}}],["进一步采用",{"2":{"941":1}}],["进一步闭环质量管理流程",{"2":{"476":1}}],["进一步将其推向了工业级高度",{"2":{"317":1}}],["进攻",{"2":{"426":1}}],["进化到了",{"2":{"553":1}}],["进化到规范驱动",{"0":{"532":1}}],["进化为真正的",{"2":{"558":1}}],["进化为能够自主洞察环境变化",{"2":{"477":1}}],["进化为",{"2":{"410":1,"534":1}}],["进化成为了一个真正的",{"2":{"337":1}}],["进阶之路",{"0":{"558":1}}],["进阶路径",{"0":{"464":1}}],["进阶的关键",{"2":{"414":1}}],["进阶",{"0":{"485":1},"1":{"486":1},"2":{"370":1,"459":1}}],["进而代码质量更高",{"2":{"386":1}}],["进而理解约束",{"2":{"271":1}}],["进而彻底崩溃",{"2":{"147":1}}],["进度更新事件",{"2":{"175":1}}],["进度更新回调",{"2":{"175":1}}],["进度更新",{"2":{"163":1,"172":1,"816":1}}],["进行穿透定位",{"2":{"931":1}}],["进行一次彻底的认知重构",{"2":{"605":1}}],["进行人工微调与对齐",{"2":{"550":1}}],["进行",{"2":{"546":1,"963":1,"964":1}}],["进行前端视图层",{"2":{"542":1}}],["进行自动化的对抗性测试与漏洞挖掘",{"2":{"535":1}}],["进行了两个方面的实践",{"2":{"942":1}}],["进行了结构化输出",{"2":{"508":1}}],["进行了高度工程化封装",{"2":{"478":1}}],["进行交互",{"2":{"482":1}}],["进行合并",{"2":{"451":1}}],["进行敏捷的意图调度时",{"2":{"440":1}}],["进行即时的数据分析或内容解读",{"2":{"435":1}}],["进行内部行动",{"2":{"412":1}}],["进行多轮搜索验证",{"2":{"355":1}}],["进行复杂决策的知识工作者而言",{"2":{"348":1}}],["进行聚合与编排",{"2":{"342":1}}],["进行全局鉴权拦截",{"2":{"342":1}}],["进行测试",{"2":{"331":1}}],["进行模块的导入导出",{"2":{"298":1}}],["进行跨包路径别名配置",{"2":{"216":1}}],["进行中",{"2":{"113":1}}],["进行失效处理",{"2":{"104":1}}],["进行比对",{"2":{"70":1}}],["进行性能优化",{"2":{"5":1}}],["进行结构划分与设计",{"2":{"2":1}}],["进入人工智能时代后",{"2":{"954":1}}],["进入周末日常清单的任务必须包含子任务和关键步骤",{"2":{"953":1}}],["进入日常清单的任务必须有子任务或关键步骤",{"2":{"953":1}}],["进入能做产品阶段",{"2":{"459":1}}],["进入下一环",{"2":{"429":1}}],["进入重规划环节",{"2":{"429":1}}],["进入静态版本构建阶段",{"2":{"3":1}}],["进入",{"2":{"1":1}}],["架构思想",{"2":{"934":1}}],["架构分工",{"2":{"934":1}}],["架构红线",{"0":{"933":1}}],["架构根基",{"2":{"928":1}}],["架构交付",{"2":{"902":1}}],["架构简述",{"2":{"895":1}}],["架构考虑",{"2":{"874":1}}],["架构复用浏览器登录状态",{"2":{"789":1}}],["架构复杂度",{"2":{"292":1}}],["架构复杂度应与项目规模匹配",{"2":{"189":1}}],["架构复杂度这四个维度之间做权衡取舍",{"2":{"67":1}}],["架构复杂度上升",{"2":{"31":1}}],["架构概述",{"0":{"645":1,"675":1,"704":1,"732":1,"760":1,"789":1,"847":1,"879":1}}],["架构层",{"2":{"558":1}}],["架构决策变得昂贵",{"2":{"555":1}}],["架构决策",{"2":{"555":1,"572":1}}],["架构决策和历史演进的隐性认知",{"2":{"536":1}}],["架构文档乃至团队的代码评审偏好",{"2":{"536":1}}],["架构革新与传统工程设施的深度融合与协同演化",{"2":{"534":1}}],["架构难以企及的",{"2":{"475":1}}],["架构模式",{"0":{"468":1},"2":{"845":1}}],["架构中解放",{"2":{"926":1}}],["架构中",{"2":{"415":1}}],["架构师",{"2":{"367":1,"491":1}}],["架构管理的纯",{"2":{"342":1}}],["架构机制",{"2":{"342":3}}],["架构的根基",{"0":{"929":1}}],["架构的",{"2":{"191":1}}],["架构设计篇",{"0":{"829":1},"1":{"830":1,"831":1,"832":1,"833":1,"834":1,"835":1,"836":1,"837":1,"838":1,"839":1,"840":1}}],["架构设计的核心理念是",{"2":{"789":1}}],["架构设计文档",{"2":{"453":1}}],["架构设计中",{"2":{"189":1}}],["架构设计",{"0":{"189":1},"1":{"190":1,"191":1},"2":{"282":1,"553":1}}],["架构",{"2":{"182":1,"226":1,"283":1,"337":1,"342":1,"573":1,"645":1,"702":1,"786":1,"787":1}}],["架构深度的绝佳场景",{"2":{"108":1}}],["架构级难点",{"0":{"108":1}}],["架构更简洁",{"2":{"72":1}}],["架构有多合理",{"2":{"71":1}}],["架构助理",{"2":{"2":1}}],["架构目标是绘制出一张清晰的数据流拓扑图",{"2":{"6":1}}],["架构目标",{"2":{"1":1}}],["盲目写代码",{"2":{"2":1}}],["蓝图",{"2":{"2":1,"412":1}}],["这件小事",{"2":{"950":1}}],["这件事我擅长",{"2":{"585":1}}],["这件事放到了构建阶段",{"2":{"66":1}}],["这本小说",{"2":{"958":1}}],["这本书和查理芒格这个人给出比当前更深入和细化的答案",{"2":{"945":1}}],["这本书给出现在的答案",{"2":{"945":1}}],["这本书",{"2":{"943":1,"948":1}}],["这本身就是对",{"2":{"60":1}}],["这三者也是目前顶级",{"2":{"927":1}}],["这三个层级并非割裂",{"2":{"459":1}}],["这跟大语言模型的思路很像",{"2":{"918":1}}],["这家公司名声大噪且",{"2":{"906":1}}],["这容易让人产生一种幻觉",{"2":{"612":1}}],["这段逻辑是合理的",{"2":{"590":1}}],["这让",{"2":{"557":1}}],["这属于",{"2":{"551":1}}],["这或许是传统前端",{"2":{"540":1}}],["这要求我们必须保持对新技术的",{"2":{"533":1}}],["这",{"2":{"526":1}}],["这份报告揭示了一组迷人且令人警醒的数据",{"2":{"525":1}}],["这样简单地把一天时间分为线段的作息日程表",{"2":{"952":1}}],["这样的作品",{"2":{"958":1}}],["这样的",{"2":{"934":1}}],["这样吸收进来的知识不再是无意义的堆积物",{"2":{"609":1}}],["这样一个渐进式的能力建设",{"2":{"597":1}}],["这样你只需关注",{"2":{"583":1}}],["这样具备自主能力的",{"2":{"525":1}}],["这样换模型",{"2":{"523":1}}],["这样真正通用的数据结构",{"2":{"256":1}}],["这次获奖是一次非常棒的验证",{"2":{"495":1}}],["这并非偶然",{"2":{"493":1}}],["这并不意味着你必须成为资深工程师",{"2":{"461":1}}],["这其实是很多孩子的",{"2":{"494":1}}],["这其实是一个典型的多阶段任务",{"2":{"468":1}}],["这其实与全栈工程师们追求的代码高可用性与系统稳定性",{"2":{"379":1}}],["这会彻底干掉",{"2":{"933":1}}],["这会因为缺乏判断力和手感而很难走远",{"2":{"464":1}}],["这会带来约",{"2":{"124":1}}],["这套单为我们开启了两扇窗",{"2":{"604":1}}],["这套书单为我们构建了一个从底层思维到人生经营的闭环",{"2":{"603":1}}],["这套书单为我们提供了一套从个人认知到组织协作的",{"2":{"602":1}}],["这套书单为我们揭示了一种更具韧性的商业路径",{"2":{"601":1}}],["这套书单从数学思维的底层逻辑出发",{"2":{"598":1}}],["这套语义标准如同工程契约",{"2":{"532":1}}],["这套流程在过去几十年被证明是高效的",{"2":{"457":1}}],["这套标准已被多个",{"2":{"442":1}}],["这套方案并非银弹",{"2":{"180":1}}],["这极大节省了上下文空间",{"2":{"430":1}}],["这表现为模型对当前",{"2":{"410":1}}],["这便是帕累托最优",{"2":{"394":1}}],["这几乎成了都市传说",{"2":{"392":1}}],["这时间差就是",{"2":{"388":1}}],["这时可以使用",{"2":{"263":1}}],["这才是最宝贵的时刻",{"2":{"369":1}}],["这篇万字长文",{"2":{"362":1}}],["这篇两万字的长文",{"2":{"357":1}}],["这里不是要展开争论",{"2":{"955":1}}],["这里所谓的",{"2":{"955":1}}],["这里直接贴出",{"2":{"954":1}}],["这里再做一个大胆又狂妄地的论断",{"2":{"946":1}}],["这里只留下笔者事后深刻反思的几个心得",{"2":{"938":1}}],["这里引用了",{"2":{"925":1}}],["这里的",{"2":{"903":1,"917":1,"923":1}}],["这里的讲述不是单方面的课堂宣讲",{"2":{"610":1}}],["这里的核心",{"2":{"458":1}}],["这里的核心难点在于数据预取",{"2":{"69":1}}],["这里我们传入一个字符串",{"2":{"483":1}}],["这里是乘法关系而不是加法",{"2":{"366":1}}],["这里还有缺陷",{"2":{"360":1}}],["这也关系到疫情后要不要继续实践混合工作制",{"2":{"957":1}}],["这也引出了一些好的学习方法论",{"2":{"918":1}}],["这也带来了洞察力新的定义",{"2":{"383":1}}],["这也意味着如果只依赖",{"2":{"360":1}}],["这也是为什么世界上会有15岁的黑客",{"2":{"614":1}}],["这也是为什么许多现代项目",{"2":{"124":1}}],["这也是智能化博客运营过程中需要考虑的一个重要方面",{"2":{"476":1}}],["这也是一种资产特定性权衡",{"2":{"400":1}}],["这也是",{"2":{"73":1}}],["这也是本文要讨论的核心问题",{"2":{"33":1}}],["这就要求工程师深谙长期记忆",{"2":{"546":1}}],["这就要求具备极强的系统架构思维和对业务逻辑的深度拆解能力",{"2":{"532":1}}],["这就要求复合型人才必须具备极度的",{"2":{"360":1}}],["这就像飞行员必须定期进行手动起降练习一样",{"2":{"531":1}}],["这就已经是一次足够伟大的商业实践",{"2":{"381":1}}],["这就意味着",{"2":{"379":1}}],["这就是人性",{"2":{"936":1}}],["这就是复利效应的来源",{"2":{"463":1}}],["这就是产品的比较优势",{"2":{"396":1}}],["这就是批判性思维带来的洞察",{"2":{"366":1}}],["这就是编译时的穷尽性检查",{"2":{"232":1}}],["这就使得",{"2":{"359":1}}],["这带来了两个极端的现象",{"2":{"359":1}}],["这座桥梁将自然语言需求转化为",{"2":{"536":1}}],["这座",{"2":{"358":1}}],["这句话被赋予了史无前例的现实意义",{"2":{"358":1}}],["这条调节回路",{"2":{"387":1}}],["这条演进之路的背后",{"2":{"303":1}}],["这条学习路径",{"2":{"271":1}}],["这条路上走到了极致",{"2":{"66":1}}],["这类外部归因",{"2":{"626":1}}],["这类沟通往往直击本质",{"2":{"625":1}}],["这类工具的本质是将",{"2":{"514":1}}],["这类依赖历史背景的问题",{"2":{"486":1}}],["这类系统通过任务分解",{"2":{"467":1}}],["这类函数需要处理各种不同的数据类型",{"2":{"256":1}}],["这类库在",{"2":{"143":1,"160":1}}],["这实现了零运行时成本的类型安全",{"2":{"247":1}}],["这不再是简单的信息检索",{"2":{"536":1}}],["这不只是技术层面的挑战",{"2":{"534":1}}],["这不仅能够确保设计的一致性",{"2":{"929":1}}],["这不仅带来了极度内卷的竞争",{"2":{"620":1}}],["这不仅仅是技能的组合",{"2":{"554":1}}],["这不仅仅是解答",{"2":{"494":1}}],["这不仅仅是写出一句完美的",{"2":{"367":1}}],["这不仅大幅提升了人机协作的效率",{"2":{"434":1}}],["这不仅是一个趣味实验",{"2":{"496":1}}],["这不仅是一份跨越领域的",{"2":{"357":1}}],["这不仅是技能的堆砌",{"2":{"464":1}}],["这不仅是机器能力的倍增",{"2":{"440":1}}],["这不仅是其利润来源",{"2":{"354":1}}],["这不仅是文件后缀的改变",{"2":{"333":1}}],["这不仅是语义上的清晰",{"2":{"318":1}}],["这不仅是对代码的要求",{"2":{"201":1}}],["这不仅浪费了服务器带宽",{"2":{"147":1}}],["这不是",{"2":{"188":1}}],["这需要一套复杂的重传与会话恢复机制",{"2":{"139":1}}],["这无疑增加了工程实现的复杂度",{"2":{"129":1}}],["这赋予了它许多开箱即用的高级特性",{"2":{"122":1}}],["这告诉客户端",{"2":{"117":1}}],["这五种主流技术",{"2":{"114":1}}],["这比在组件内使用",{"2":{"107":1}}],["这使得模型配置可集中管理",{"2":{"860":1}}],["这使得",{"2":{"104":1,"307":1}}],["这在一定程度上也表明了",{"2":{"957":1}}],["这在一定程度上可以提升个人工作效率",{"2":{"956":1}}],["这在信息爆炸的时代是得不偿失的",{"2":{"613":1}}],["这在模块化开发中常用于元数据注入",{"2":{"324":1}}],["这在复杂中后台应用中是杀手级功能",{"2":{"110":1}}],["这在处理依赖请求时非常有用",{"2":{"99":1}}],["这在语义上形成了一种",{"2":{"2":1}}],["这四者共同构成",{"2":{"85":1}}],["这对于快速定位关键信息",{"2":{"613":1}}],["这对于开发跨端的",{"2":{"548":1}}],["这对于大型项目尤为重要",{"2":{"255":1}}],["这对于实时",{"2":{"119":1}}],["这对",{"2":{"81":1}}],["这背后体现了一种架构哲学的转变",{"2":{"71":1}}],["这意味着跳出技术自嗨",{"2":{"902":1}}],["这意味着你告诉",{"2":{"571":1}}],["这意味着工程团队的核心能力要从",{"2":{"538":1}}],["这意味着什么",{"2":{"528":1}}],["这意味着我们可以让",{"2":{"493":1}}],["这意味着我们可以在复杂类型表达式中自由地重新排列组合顺序",{"2":{"243":1}}],["这意味着同一进程内多次引入同一文件",{"2":{"334":1}}],["这意味着如果你在浏览器中多开了几个监控标签页",{"2":{"124":1}}],["这意味着对象键值的顺序不影响缓存的命中",{"2":{"104":1}}],["这意味着浏览器不需要下载组件的",{"2":{"73":1}}],["这意味着",{"2":{"66":1,"82":1,"358":1,"361":1,"366":2}}],["这个时候也想过在健身房报个班",{"2":{"962":1}}],["这个阶段更注重强化减肥这件小事的目标合理性",{"2":{"962":1}}],["这个雷打不动的项目引入",{"2":{"961":1}}],["这个方向实践下去",{"2":{"948":1}}],["这个话题在疫情到来后被大家熟知",{"2":{"936":1}}],["这个话题虽被大家熟知",{"2":{"936":1}}],["这个项目的性质是什么",{"2":{"928":1}}],["这个世界是稀疏的",{"0":{"916":1}}],["这个黑盒子也就是系统",{"2":{"908":1}}],["这个公式告诉我们",{"2":{"554":1}}],["这个定义显得过时且狭隘",{"2":{"553":1}}],["这个流程是否多余",{"2":{"460":1}}],["这个概念时",{"2":{"457":1}}],["这个代价在商业上划算吗",{"2":{"374":1}}],["这个报错提示说",{"2":{"370":1}}],["这个问题痛不痛",{"2":{"365":1}}],["这个问题能否抽象成一个通用方案",{"2":{"271":1}}],["这个模块的边界清晰吗",{"2":{"337":1}}],["这个模块负责处理图片压缩",{"2":{"329":1}}],["这个模式之所以叫",{"2":{"230":1}}],["这个文件会迅速膨胀到数千行",{"2":{"327":1}}],["这个函数可能抛出什么",{"2":{"246":1}}],["这个无穷集合",{"2":{"227":1}}],["这个看似简单的隐喻",{"2":{"227":1}}],["这个",{"2":{"65":1,"227":1,"387":1,"491":1,"567":1,"590":1}}],["这个过程无需任何服务端参与",{"2":{"62":1}}],["这些进步不局限于减肥这件小事上",{"2":{"963":1}}],["这些年也在用实践推动着",{"2":{"919":1}}],["这些正弦波前面的系数大部分为零",{"2":{"916":1}}],["这些正是",{"2":{"462":1}}],["这些知识在大学阶段虽然也学过",{"2":{"912":1}}],["这些规律将会失效",{"2":{"908":1}}],["这些经历锻炼了我对系统复杂度的掌控力",{"2":{"901":1}}],["这些经验能帮助我们写出更清晰",{"2":{"263":1}}],["这些工具通过",{"2":{"868":1}}],["这些工程问题",{"2":{"71":1}}],["这些著作不仅是知识的传递",{"2":{"604":1}}],["这些智者教导我们如何利用杠杆",{"2":{"603":1}}],["这些世界级案例证明了",{"2":{"601":1}}],["这些中间过程不会污染主会话",{"2":{"590":1}}],["这些决定了系统的上限",{"2":{"555":1}}],["这些",{"2":{"495":1,"527":1}}],["这些就是解题的",{"2":{"494":1}}],["这些图表并非简单的占位符",{"2":{"475":1}}],["这些场景的共同特点是",{"2":{"465":1}}],["这些修改建议可以是细节上的调整",{"2":{"426":1}}],["这些子智能体像是一群专注的专家",{"2":{"415":1}}],["这些都需要在",{"2":{"509":1}}],["这些都是构成手表的",{"2":{"383":1}}],["这些都会增加理解成本和bug风险",{"2":{"186":1}}],["这些曾经被视为专业技能的",{"2":{"357":1}}],["这些原则本质上都在做同一件事",{"2":{"332":1}}],["这些重复的头部数据往往比有效载荷还要大",{"2":{"115":1}}],["这些问题的答案已被写进框架",{"2":{"71":1}}],["这些交互完全由客户端",{"2":{"66":1}}],["这些设计原则并非",{"2":{"12":1}}],["这些可通过计算得出的数据被称为",{"2":{"5":1}}],["这与接口继承的行为不同",{"2":{"237":1}}],["这与直觉一致",{"2":{"233":1}}],["这与",{"2":{"11":1,"314":1}}],["这是不是类似刚入职的员工操着",{"2":{"957":1}}],["这是笔者所在行业的惯用套路",{"2":{"942":1}}],["这是笔者第一次在文章中大篇幅尝试引入数学相关的知识",{"2":{"919":1}}],["这是新手转型",{"2":{"933":1}}],["这是心智负担最低的方案",{"2":{"931":1}}],["这是唯一在",{"2":{"887":1}}],["这是整个样式架构",{"2":{"932":1}}],["这是整个",{"2":{"886":1}}],["这是典型的适配器使用流程",{"2":{"804":1}}],["这是典型的",{"2":{"711":1}}],["这是知识从",{"2":{"628":1}}],["这是你不能交给",{"2":{"462":1}}],["这是编写",{"2":{"448":1}}],["这是闭环中最关键的一步",{"2":{"427":1}}],["这是思考环节",{"2":{"427":1}}],["这是多智能体最强悍的地方",{"2":{"415":1}}],["这是通用",{"2":{"414":1}}],["这是获取准确决策信息的前提",{"2":{"400":1}}],["这是最典型的使用场景",{"2":{"773":1}}],["这是最致命的一点",{"2":{"612":1}}],["这是最简单的交互模式",{"2":{"483":1}}],["这是最基础的阶段",{"2":{"410":1}}],["这是最关键",{"2":{"375":1}}],["这是最硬核的训练法",{"2":{"369":1}}],["这是最常见的坑",{"2":{"119":1}}],["这是其迈向",{"2":{"355":1}}],["这是衡量模块质量的终极金标准",{"2":{"328":1}}],["这是首选方案",{"2":{"315":1}}],["这是泛型的一个重要特性",{"2":{"254":1}}],["这是联合与交叉协作的典型场景",{"2":{"249":1}}],["这是联合与交叉最优雅的数学关系",{"2":{"242":1}}],["这是一种与传统",{"2":{"925":1}}],["这是一种预防机制",{"2":{"593":1}}],["这是一种全新的开发范式",{"2":{"542":1}}],["这是一种更纯粹的模式",{"2":{"425":1}}],["这是一种在类型层面区分语义不同但结构相同的数据的技巧",{"2":{"247":1}}],["这是一个零依赖的轻量级库",{"2":{"826":1}}],["这是一个极其危险的谬论",{"2":{"621":1}}],["这是一个什么项目",{"2":{"573":1}}],["这是一个正在爆发的新兴领域",{"2":{"544":1}}],["这是一个高频刚需",{"2":{"365":1}}],["这是一个容易被误解的特性",{"2":{"238":1}}],["这是一个容易被忽略但非常重要的细节",{"2":{"233":1}}],["这是函数式编程中",{"2":{"246":1}}],["这是元素为联合类型的数组",{"2":{"234":1}}],["这是因为",{"2":{"229":1}}],["这是实现路由懒加载和代码分割",{"2":{"313":1}}],["这是实现可辨识联合的关键",{"2":{"230":1}}],["这是实现",{"2":{"227":1}}],["这是实现配置复用的核心机制",{"2":{"209":1}}],["这是目前的最优解",{"2":{"927":1}}],["这是目前",{"2":{"143":1}}],["这是当前最火热的应用",{"2":{"118":1}}],["这是展现",{"2":{"108":1}}],["这是状态同步的典范",{"2":{"104":1}}],["这是对过去十年",{"2":{"71":1}}],["这是判断",{"2":{"66":1}}],["这是现代前端框架最强大的设计哲学之一",{"2":{"66":1}}],["这是",{"2":{"65":1,"79":1,"100":1,"200":2,"230":1,"234":1,"281":1,"410":1,"745":1,"888":1}}],["这是人类决策的关键环节",{"2":{"9":1}}],["这是解决组件树过深的最强武器",{"2":{"2":1}}],["这正是经济学中双头垄断",{"2":{"392":1}}],["这正是我们作为人类最后的底牌",{"2":{"362":1}}],["这正是奥卡姆剃刀原则在技术领域的深远意义",{"2":{"201":1}}],["这正是奥卡姆剃刀在",{"2":{"199":1}}],["这正是声明式编程与规范驱动开发在哲学层面的深度契合",{"2":{"11":1}}],["这正是",{"2":{"8":1,"63":1,"71":1,"143":1,"236":1,"439":1}}],["这种特质在经济下行的大环境下可能更值得学习",{"2":{"958":1}}],["这种习惯和爱好背后的本质原因和动力又是什么呢",{"2":{"945":1}}],["这种视觉噪音极大的代码",{"2":{"933":1}}],["这种高度内聚在",{"2":{"930":1}}],["这种高度的封装性从物理层面隔绝了",{"2":{"11":1}}],["这种分离允许多个后端共享同一套渲染逻辑",{"2":{"739":1}}],["这种分工",{"2":{"12":1}}],["这种分工让开发者从繁琐的编码劳动中解放出来",{"2":{"8":1}}],["这种不够客观的环境",{"2":{"618":1}}],["这种低维度的信息差正在被迅速抹平",{"2":{"616":1}}],["这种对物理形态的偏好可以理解",{"2":{"613":1}}],["这种着急就会演变成气急败坏",{"2":{"612":1}}],["这种基于经验的",{"2":{"533":1}}],["这种转变催生了一个深刻的监督悖论",{"2":{"531":1}}],["这种转变带来了一种极其诱人的",{"2":{"530":1}}],["这种转变标志着真正的",{"2":{"491":1}}],["这种阶段化的专业分工",{"2":{"468":1}}],["这种机制比挂载庞大的全局上下文更轻量",{"2":{"443":1}}],["这种机制有效地对抗了",{"2":{"431":1}}],["这种机制彻底改变了传统",{"2":{"97":1}}],["这种能力的自然延伸并非意味着人人都成为通才",{"2":{"529":1}}],["这种能力无法通过算法习得",{"2":{"359":1}}],["这种能",{"2":{"418":1}}],["这种指令隔离避免了在同一个提示词",{"2":{"415":1}}],["这种将错就错的思维模式",{"2":{"393":1}}],["这种公开构建的模式",{"2":{"380":1}}],["这种自信",{"2":{"379":1}}],["这种极度的克制不仅带来了极低的试错成本",{"2":{"378":1}}],["这种反其道而行之的勇气",{"2":{"350":1}}],["这种组合完美契合了",{"2":{"342":1}}],["这种设计避免了为每个平台维护单独的引导脚本",{"2":{"886":1}}],["这种设计能有效防止",{"2":{"470":1}}],["这种设计允许执行器内部进行自循环",{"2":{"429":1}}],["这种设计降低了知识工作者二次核查信息的成本",{"2":{"349":1}}],["这种设计的精髓在于",{"2":{"336":1}}],["这种设计彻底解耦了",{"2":{"104":1}}],["这种增强不仅限于前端",{"2":{"326":1}}],["这种跨模块的类型推导提供了极佳的代码提示体验",{"2":{"319":1}}],["这种标准化都是构建大规模复杂系统应用的基础",{"2":{"316":1}}],["这种架构模式特别适合大型团队协作和复杂业务场景",{"2":{"284":1}}],["这种架构天然具备了极高的并发承载能力和极低的",{"2":{"64":1}}],["这种思维方式的价值远超泛型本身",{"2":{"271":1}}],["这种思考方式与面向对象设计模式中的",{"2":{"255":1}}],["这种约束常用于处理继承体系",{"2":{"269":1}}],["这种约束常用于安全的对象属性访问器",{"2":{"268":1}}],["这种约束适用于需要泛型参数具备多种能力的场景",{"2":{"267":1}}],["这种约束特别适合用于处理各种数据结构",{"2":{"266":1}}],["这种约束确保了在泛型函数内部可以安全地使用该类型的内置方法和属性",{"2":{"265":1}}],["这种约定使得数据获取的",{"2":{"97":1}}],["这种检查发生在编译阶段",{"2":{"254":1}}],["这种关系叫做",{"2":{"242":1}}],["这种方式在国内还不会被大范围运用",{"2":{"955":1}}],["这种方式解耦了",{"2":{"143":1}}],["这种方式虽能满足大多数场景",{"2":{"114":1}}],["这种策略能在保证及时获取结果的同时",{"2":{"140":1}}],["这种策略能确保组件职责清晰",{"2":{"3":1}}],["这种双向并发通信机制彻底摆脱了",{"2":{"127":1}}],["这种在传统",{"2":{"125":1}}],["这种协议级的约定",{"2":{"121":1}}],["这种模式虽然简单",{"2":{"425":1}}],["这种模式类似于",{"2":{"423":1,"424":1}}],["这种模式被称为",{"2":{"312":1}}],["这种模式在设计",{"2":{"249":1}}],["这种模式让我们能够像搭积木一样",{"2":{"248":1}}],["这种模式让我们在类型层面就能区分操作的成功与失败",{"2":{"246":1}}],["这种模式天然适合服务间的松耦合集成",{"2":{"143":1}}],["这种模式完美契合了绝大多数非即时性的资源获取场景",{"2":{"115":1}}],["这种模式兼具",{"2":{"46":1}}],["这种粒度既能保证开发效率",{"2":{"9":1}}],["这种单向流动牺牲了双向绑定的",{"2":{"7":1}}],["这种",{"2":{"3":1,"7":1,"118":1,"160":1,"372":1,"417":1,"419":1,"427":1,"475":1,"476":1}}],["这既能启发思路",{"2":{"2":1}}],["这一次比较幸运",{"2":{"962":1}}],["这一阶段",{"2":{"963":1}}],["这一阶段积累了一些碎片化的健康意识",{"2":{"940":1}}],["这一阶段的核心是明确",{"2":{"9":1}}],["这一核心能力的深度复盘",{"2":{"903":1}}],["这一核心护城河",{"2":{"902":1}}],["这一特性使得规则可以做到",{"2":{"576":1}}],["这一狭窄定义中",{"2":{"552":1}}],["这一层就是修路和提炼石油的",{"2":{"551":1}}],["这一层是整个工程提效的核心发动机",{"2":{"930":1}}],["这一层是",{"2":{"551":1}}],["这一层负责为",{"2":{"544":1}}],["这一闭环",{"2":{"540":1}}],["这一职业的底层逻辑",{"2":{"525":1}}],["这一功能将",{"2":{"441":1}}],["这一模式的精髓在于引入了重规划",{"2":{"431":1}}],["这一设计使得",{"2":{"419":1}}],["这一案例启示",{"2":{"391":1}}],["这一点显得尤为契合时宜",{"2":{"378":1}}],["这一逻辑尤为深刻",{"2":{"377":1}}],["这一秒",{"2":{"372":1}}],["这一无效耗时环节",{"2":{"342":1}}],["这一原则由",{"2":{"181":1}}],["这一限制已基本消除",{"2":{"124":1}}],["这一限制显得非常局促",{"2":{"124":1}}],["这一转变带来了三重收益",{"2":{"72":1}}],["这一判断的底层逻辑",{"2":{"67":1}}],["这一命题的持续作答",{"2":{"303":1}}],["这一命题",{"2":{"12":1}}],["这一步是",{"2":{"429":1}}],["这一步是可选的",{"2":{"254":1}}],["这一步是后续全自动化与半自动化并行模式的基础",{"2":{"3":1}}],["这一步的工程价值不可估量",{"2":{"3":1}}],["这一软件工程经典原则的具象化落地",{"2":{"2":1}}],["这一比例依然坚如磐石",{"2":{"1":1}}],["并强制每两天内必须在朋友圈至少打卡一次",{"2":{"962":1}}],["并粗略了解",{"2":{"960":1}}],["并做出一系列调整动作",{"2":{"959":1}}],["并合理分配项目收益",{"2":{"957":1}}],["并以文化",{"2":{"957":1}}],["并以幽默生动",{"2":{"494":1}}],["并尽最大努力避免重要不紧急的事务演变为重要且紧急的事务",{"2":{"952":1}}],["并达到人之天年",{"2":{"941":1}}],["并执行",{"2":{"928":1}}],["并刻意训练",{"2":{"912":1}}],["并输出对应格式的",{"2":{"886":1}}],["并通过",{"2":{"717":1}}],["并注入所有",{"2":{"677":1}}],["并递归处理每个节点的",{"2":{"649":1}}],["并显示提交结果",{"2":{"581":1}}],["并显著提升了任务的成功率",{"2":{"443":1}}],["并直接上线",{"2":{"562":1}}],["并指挥",{"2":{"558":1}}],["并指定关注的事件类型",{"2":{"131":1}}],["并定义清楚需求的边界",{"2":{"558":1}}],["并为",{"2":{"539":1}}],["并附带",{"2":{"523":1}}],["并附上解读",{"2":{"504":1}}],["并与",{"2":{"515":1}}],["并使用加粗字体与换行格式",{"2":{"506":1}}],["并确保诗歌内容健康",{"2":{"504":1}}],["并确保幂等处理与签名验证",{"2":{"142":1}}],["并引导其重新输入",{"2":{"504":1}}],["并顺手推送了一道经典的",{"2":{"495":1}}],["并区分",{"2":{"488":1}}],["并修复",{"0":{"484":1}}],["并据此确定研究方向与重点",{"2":{"468":1}}],["并据此生成多维度的反馈",{"2":{"418":1}}],["并展示这种模式如何通过模块化设计显著提升研究报告的专业度",{"2":{"467":1}}],["并运用技术与分发实现价值的",{"2":{"459":1}}],["并设计串联工作流",{"2":{"459":1}}],["并借助",{"2":{"458":1}}],["并补充领域知识和错误处理机制",{"2":{"455":1}}],["并符合工程化流水线",{"2":{"451":1}}],["并明确触发条件",{"2":{"448":1}}],["并明确依赖关系",{"2":{"423":1}}],["并迅速在开发者社区引发热议",{"2":{"441":1}}],["并可配置项目级的全局自定义指令",{"2":{"437":1}}],["并主动调整策略",{"2":{"427":1}}],["并提出修改建议",{"2":{"426":1}}],["并提供极致性价比的算力支撑",{"2":{"551":1}}],["并提供确认链接",{"2":{"449":1}}],["并提供虚拟机环境",{"2":{"343":1}}],["并提供类似",{"2":{"343":1}}],["并提供公共依赖",{"2":{"288":1}}],["并建立了一个庞大的",{"2":{"419":1}}],["并自动在",{"2":{"418":1}}],["并生成对应的多媒体内容或执行具体的动作",{"2":{"418":1}}],["并生成研报",{"2":{"355":1}}],["并委派任务",{"2":{"416":1}}],["并行子agent协调调度",{"2":{"881":1}}],["并行开发与隔离",{"2":{"881":1}}],["并行agent调度",{"2":{"880":1}}],["并行工具执行",{"2":{"856":1}}],["并行启动",{"2":{"796":1}}],["并行执行",{"2":{"795":1}}],["并行委托",{"2":{"472":1}}],["并行生成",{"2":{"471":1}}],["并行网络搜索",{"2":{"470":1,"471":1}}],["并行处理",{"2":{"438":1}}],["并行推进",{"2":{"415":1,"438":1}}],["并行渲染",{"2":{"86":1}}],["并接收环境反馈",{"2":{"408":1}}],["并根据市场动态提供初步投资建议",{"2":{"407":1}}],["并根据数据变化高效更新渲染组件",{"2":{"339":1}}],["并加上这句",{"2":{"375":1}}],["并果断放弃那些",{"2":{"365":1}}],["并让用户愿意为之买单或停留",{"2":{"363":1}}],["并持续深耕",{"2":{"361":1}}],["并获取高信度知识是核心诉求",{"2":{"348":1}}],["并没有以此消灭全栈工程师",{"2":{"558":1}}],["并没有干巴巴地罗列知识点",{"2":{"495":1}}],["并没有绝对的优劣之分",{"2":{"433":1}}],["并没有试图成为",{"2":{"348":1}}],["并没有持续的数据流可供传输",{"2":{"136":1}}],["并完全支持它",{"2":{"344":2}}],["并完成水合",{"2":{"73":1}}],["并完成",{"2":{"39":1}}],["并最终打包成浏览器可直接运行的静态文件",{"2":{"343":1}}],["并利用用户模型",{"2":{"600":1}}],["并利用大模型组合出优雅的解决方案",{"2":{"495":1}}],["并利用",{"2":{"342":1}}],["并广泛应用于处理网络数据交互",{"2":{"342":1}}],["并探讨在现代工程",{"2":{"317":1}}],["并在生活实践中去尝试",{"2":{"935":1}}],["并在生成失败时优雅地回滚",{"2":{"113":1}}],["并在文档再次可见时自动重新打开",{"2":{"839":1}}],["并在整个对话过程中时刻参照",{"2":{"571":1}}],["并在关键节点结合",{"2":{"550":1}}],["并在其中精准定位",{"2":{"533":1}}],["并在严格安全约束下执行高度自主任务的系统",{"2":{"419":1}}],["并在执行过程中不断反思",{"2":{"414":1}}],["并在异常时主动预警",{"2":{"407":1}}],["并在这个过程中保持盈利与内心的从容",{"2":{"381":1}}],["并在实践中不断演化",{"2":{"361":1}}],["并在过程中培养结构化产品分析思维",{"2":{"348":1}}],["并在",{"2":{"319":1}}],["并在回调函数中使用加载好的模块",{"2":{"305":1}}],["并带来巨大的工程价值",{"2":{"297":1}}],["并能够在前端和",{"2":{"293":1}}],["并将从",{"2":{"902":1}}],["并将产品交付到用户手中",{"2":{"555":1}}],["并将返回的会话",{"2":{"489":1}}],["并将任务委派给子智能体",{"2":{"470":1}}],["并将结果回传给主代理",{"2":{"438":1}}],["并将结果作为下一轮推理的输入",{"2":{"427":1}}],["并将结果写入数据库",{"2":{"138":1}}],["并将其注入到",{"2":{"883":1}}],["并将其沉淀为",{"2":{"414":1}}],["并将其转化为实际行动",{"2":{"402":1}}],["并将工厂",{"2":{"303":1}}],["并将业务逻辑与技术实现紧密结合",{"2":{"276":1}}],["并非边缘工作",{"2":{"526":1}}],["并非为了盲目追捧个人英雄主义",{"2":{"457":1}}],["并非一个新概念",{"2":{"402":1}}],["并非一种全新的技术",{"2":{"306":1}}],["并非不可捉摸的黑魔法",{"2":{"363":1}}],["并非零和博弈",{"2":{"349":1}}],["并非否定复杂的可能性",{"2":{"181":1}}],["并非易事",{"2":{"1":1}}],["并不断开放使用与",{"2":{"512":1}}],["并不是要求一个人在设计",{"2":{"458":1}}],["并不是简单的文件读取",{"2":{"334":1}}],["并不局限于二选一",{"2":{"157":1}}],["并不存在放之四海而皆准的",{"2":{"67":1}}],["并立即返回给客户端",{"2":{"138":1}}],["并发起过不少",{"2":{"903":1}}],["并发agent调度模式",{"2":{"881":1}}],["并发问题",{"2":{"591":1}}],["并发模型",{"2":{"531":1}}],["并发量是否非常大",{"2":{"155":1}}],["并发连接数瓶颈",{"2":{"137":1}}],["并发发起所有数据请求",{"2":{"59":1}}],["并要求回调端点返回",{"2":{"133":1}}],["并返回一个",{"2":{"313":1}}],["并返回一个确认响应",{"2":{"131":1}}],["并返回给浏览器",{"2":{"38":1}}],["并未内置自动重连",{"2":{"129":1}}],["并未改变这些原则的内核",{"2":{"12":1}}],["并且使信赖成为可能",{"2":{"907":1}}],["并且要做到言之成理",{"2":{"610":1}}],["并且可能增加",{"2":{"922":1}}],["并且可无缝集成至",{"2":{"511":1}}],["并且可以与",{"2":{"220":1}}],["并且希望按角色分工完成任务时",{"2":{"438":1}}],["并且在数据格式层面依然遵循",{"2":{"160":1}}],["并且你推崇极简的架构代码",{"2":{"111":1}}],["并且由于",{"2":{"107":1}}],["并手动维护回滚",{"2":{"110":1}}],["并按特定字段排序",{"2":{"107":1}}],["并统一处理",{"2":{"99":1}}],["并重新渲染",{"2":{"59":1}}],["并写入缓存",{"2":{"47":1}}],["并存入缓存",{"2":{"47":1}}],["并遵循单一职责原则为其命名",{"2":{"2":1}}],["并渲染视图",{"2":{"2":1}}],["纯属",{"2":{"933":1}}],["纯预处理器的开发节奏太慢",{"2":{"928":1}}],["纯自研",{"2":{"928":1}}],["纯原子化",{"2":{"928":1}}],["纯色层元素",{"2":{"762":3}}],["纯数据",{"2":{"650":1}}],["纯思考",{"2":{"622":1}}],["纯执行",{"2":{"622":1}}],["纯手工编码",{"2":{"553":1,"934":1}}],["纯手工敲击代码",{"2":{"540":1}}],["纯文本大模型在进行严谨的逻辑推演和数学计算时",{"2":{"493":1}}],["纯后端业务逻辑处理",{"2":{"344":1}}],["纯流式",{"2":{"160":1}}],["纯无状态查询",{"2":{"155":1}}],["纯展示层",{"2":{"94":1}}],["纯客户端应用",{"2":{"93":1}}],["纯交互逻辑",{"2":{"75":1}}],["纯交互工具",{"2":{"75":1}}],["纯粹是本地构建工具的批量处理",{"2":{"62":1}}],["纯静态托管",{"2":{"345":1}}],["纯静态落地页",{"2":{"93":1}}],["纯静态分发",{"0":{"64":1},"2":{"61":1}}],["纯静态网站",{"2":{"16":1}}],["纯",{"2":{"57":1,"71":1,"344":1,"730":1,"734":1,"736":1,"758":1,"876":1}}],["纯函数",{"2":{"2":1}}],["纯布局或纯逻辑",{"2":{"1":1}}],["展现其顾盼生辉的绝代风华",{"2":{"505":1}}],["展现了极强的任务导向性",{"2":{"484":1}}],["展现出陡峭的指数级复利效应",{"2":{"464":1}}],["展示用动图",{"2":{"762":1}}],["展示分类图标",{"2":{"647":1}}],["展示不同类型仓库的解读效果",{"2":{"637":1}}],["展示数据",{"2":{"279":1}}],["展示姓名",{"2":{"184":1}}],["展示了",{"2":{"180":1}}],["展示型为主的",{"2":{"112":1}}],["展示",{"2":{"86":1,"488":2}}],["展示评论",{"2":{"28":1}}],["展示所有博客文章列表",{"2":{"27":1}}],["展示组件",{"2":{"2":2}}],["展平组件树",{"2":{"1":1}}],["随机性",{"2":{"532":1}}],["随机值",{"2":{"59":1}}],["随用随付",{"2":{"523":1}}],["随叫随到的",{"2":{"435":1}}],["随时会丢失",{"2":{"375":1}}],["随时可重新发起",{"2":{"155":1}}],["随时间推移保持不变",{"2":{"5":1}}],["随页面数量线性增长",{"2":{"57":1}}],["随后持续",{"2":{"136":1}}],["随后手动将数据获取逻辑与前端业务逻辑及",{"2":{"95":1}}],["随后被其他框架逐步借鉴",{"2":{"53":1}}],["随后加载",{"2":{"39":1}}],["随后进行",{"2":{"38":1}}],["随后将干净的数据流入子组件",{"2":{"2":1}}],["随着年龄与工作年限的增长",{"2":{"959":1}}],["随着工作年限和阅历的增加",{"2":{"950":1}}],["随着工作的深入",{"2":{"938":1}}],["随着日本制造技术的逐渐发达",{"2":{"943":1}}],["随着社会的发展",{"2":{"938":1}}],["随着大模型被广泛熟知",{"2":{"919":1}}],["随着训练数据的加大",{"2":{"918":1}}],["随着对模型思维",{"2":{"912":1}}],["随着时间的推移",{"2":{"946":1}}],["随着时间的推移与项目经验的累积",{"2":{"464":1}}],["随着时间的流逝",{"2":{"942":1}}],["随着时间的积累",{"2":{"912":1}}],["随着阅读时间的累加",{"2":{"909":1}}],["随着阅读的深入",{"2":{"613":1}}],["随着模型越大",{"2":{"551":1}}],["随着模型上下文窗口的扩大",{"2":{"509":1}}],["随着开源基座模型的强大",{"2":{"551":1}}],["随着项目复杂度的急剧提升",{"2":{"920":1}}],["随着项目进展自动同步最新的会议纪要或技术方案",{"2":{"417":1}}],["随着项目规模日益膨胀",{"2":{"294":1}}],["随着技术的演进",{"2":{"414":1}}],["随着长文本技术",{"2":{"410":1}}],["随着人员扩张",{"2":{"387":1}}],["随着后端逻辑变厚",{"2":{"336":1}}],["随着业务增长",{"2":{"327":1}}],["随着web技术的不断发展",{"2":{"293":1}}],["随着",{"2":{"115":1,"403":1,"419":1,"439":1,"441":1,"527":1,"548":1,"922":1}}],["随着前四个阶段的稳步推进",{"2":{"8":1}}],["随着功能膨胀",{"2":{"2":1}}],["策略参数化",{"2":{"851":1}}],["策略归一化规则",{"2":{"800":1}}],["策略自动归一化",{"2":{"800":1}}],["策略管理",{"2":{"791":1}}],["策略枚举",{"2":{"790":1}}],["策略模式设计",{"2":{"799":1}}],["策略模式适配器",{"2":{"786":1}}],["策略模式",{"2":{"761":1,"765":1,"768":1}}],["策略要点",{"2":{"291":1}}],["策略不一致",{"2":{"59":1}}],["策略",{"2":{"2":1,"59":2,"75":1,"342":1,"396":1,"427":1,"797":1,"851":1,"925":1}}],["在尝试去观察改善",{"2":{"964":1}}],["在做饭花样和做饭花费时间上的把握更加精确",{"2":{"963":1}}],["在吃极少量主食和加大运动量的坚持下",{"2":{"963":1}}],["在查过一些资料文章后",{"2":{"962":1}}],["在第二阶段快结束时遇到了体重基本不再下降",{"2":{"962":1}}],["在下降",{"2":{"961":1}}],["在下一次重构或开启新项目时",{"2":{"934":1}}],["在积累到一定数据量后",{"2":{"960":1}}],["在读了伟人的文章后",{"2":{"959":1}}],["在读了近一年多的文章和书以后",{"2":{"959":1}}],["在操作的过程中也有跟老同学",{"2":{"959":1}}],["在康复期间",{"2":{"959":1}}],["在身体养护方面从",{"2":{"959":1}}],["在经济快速发展的大背景下",{"2":{"959":1}}],["在经过初步的研究对比分析后",{"2":{"477":1}}],["在居家办公的时候",{"2":{"956":1}}],["在疫情中后期",{"2":{"957":1}}],["在疫情到来之前",{"2":{"957":1}}],["在疫情后我们要不要继续实践混合工作制呢",{"2":{"955":1}}],["在疫情进入初步放开的新阶段",{"2":{"935":1}}],["在升级清单管理前",{"2":{"953":1}}],["在上述延伸思考下",{"2":{"957":1}}],["在上述",{"2":{"948":1}}],["在阅读工具的选择方面笔者经历了以下几个阶段",{"2":{"947":1}}],["在毕业时也留下了两篇关于这方面的总结文章",{"2":{"936":1}}],["在将这些工具组合时",{"2":{"933":1}}],["在安全的局部作用域内进行逻辑封装与样式覆写",{"2":{"931":1}}],["在安全与效率之间取得了极佳平衡",{"2":{"478":1}}],["在哪些文件中查找类名",{"2":{"925":1}}],["在所有选择器的末尾加上对应的属性选择器",{"2":{"924":1}}],["在浏览器中最终会被编译成类似",{"2":{"923":1}}],["在浏览器中直接生成并运行完整的",{"2":{"561":1}}],["在浏览器侧动态计算和注入",{"2":{"922":1}}],["在基础逻辑与行动指导",{"2":{"912":1}}],["在得到休息的同时增添乐趣",{"2":{"910":1}}],["在设计产品过程中与研究团队专注设计模型行为",{"2":{"909":1}}],["在设计获批前编写任何代码",{"2":{"888":1}}],["在增强回路的成效越来越低时",{"2":{"908":1}}],["在日常业务开发中",{"2":{"930":1}}],["在日常工作与生活中",{"2":{"908":1}}],["在日常复盘时",{"2":{"385":1}}],["在知识付费时代",{"2":{"908":1}}],["在平衡思维与多维度视角的基础上",{"2":{"907":1}}],["在平衡思维下",{"2":{"907":1}}],["在一定程度上是可以避免进入",{"2":{"907":1}}],["在重读",{"2":{"907":1}}],["在重新思考技术演进的逻辑后",{"2":{"554":1}}],["在目标制定",{"2":{"906":1}}],["在时间的累加效应加持下",{"2":{"906":1}}],["在倒逼自己关注身体健康和时间管理后",{"2":{"906":1}}],["在特定生命周期事件",{"2":{"884":1}}],["在每次会话启动时自动将",{"2":{"879":1}}],["在每一轮反思中",{"2":{"426":1}}],["在纯文本环境更稳定",{"2":{"877":1}}],["在循环中调用",{"2":{"859":1}}],["在流关闭时",{"2":{"840":1}}],["在连接正常关闭时",{"2":{"839":1}}],["在隔离上下文中执行单一任务的独立",{"2":{"884":1}}],["在隔离上下文中",{"2":{"769":1}}],["在模型基本确定的情况下",{"2":{"910":1}}],["在模拟的",{"2":{"769":1}}],["在模块化和性能上有了长足进步",{"2":{"323":1}}],["在模块运行前",{"2":{"305":1}}],["在播放器中对应一个",{"2":{"765":1}}],["在光照计算中为场景提供照明",{"2":{"737":1}}],["在调度管道的",{"2":{"715":1}}],["在整个管道完成后执行",{"2":{"712":1}}],["在类的原型链上定义属性访问器",{"2":{"685":1}}],["在类型层面是可见的",{"2":{"246":1}}],["在弹窗",{"2":{"663":1}}],["在沙箱环境中求值",{"2":{"655":1}}],["在渲染时",{"2":{"652":1}}],["在渲染过程中",{"2":{"649":1}}],["在网络推荐算法和同温层环境的双重作用下",{"2":{"618":1}}],["在书中观摩大师的智慧",{"2":{"615":1}}],["在获取信息门槛越来越低的今天",{"2":{"615":1}}],["在如今",{"2":{"610":1}}],["在他人的追问和质疑中",{"2":{"610":1}}],["在面临大概率活到100岁的",{"2":{"605":1}}],["在面对需要跨越数十个步骤的自动化工程任务时",{"2":{"431":1}}],["在面对海量并发和复杂的网关负载均衡时",{"2":{"145":1}}],["在喧嚣中找准自我的定位",{"2":{"604":1}}],["在梁晓声对各阶层生存困境的细腻描摹中",{"2":{"604":1}}],["在碎片化与不确定性并存的时代",{"2":{"604":1}}],["在宏观历史与微观现实间构建认知",{"2":{"604":1}}],["在巅峰时刻主动寻求突破",{"2":{"603":1}}],["在泛滥的信息中识别本质",{"2":{"603":1}}],["在信息时代",{"2":{"613":1}}],["在信息爆炸与快速变革的时代",{"2":{"603":1}}],["在信息过载与高压竞争的现代环境中",{"2":{"602":1}}],["在信息不完整",{"2":{"363":1}}],["在追逐",{"2":{"601":1}}],["在关键时刻自动介入",{"2":{"597":1}}],["在受控范围内执行操作",{"2":{"597":1}}],["在危险操作发生之前就将其拦截",{"2":{"593":1}}],["在独立窗口中审查数千行代码时",{"2":{"590":1}}],["在独立分支快速产出多份候选代码",{"2":{"3":1}}],["在独立分支中全自动化生成代码",{"2":{"3":1}}],["在正确的场景下自动出现",{"2":{"576":1}}],["在过去的两年里",{"2":{"569":1}}],["在终端中直接与代码库深度对话",{"2":{"567":1}}],["在输入框用自然语言描述需求",{"2":{"561":1}}],["在输入框描述你的应用",{"2":{"561":1}}],["在新的范式下",{"2":{"558":1}}],["在逐渐接管",{"2":{"555":1}}],["在技术通缩的时代",{"2":{"552":1}}],["在技术快速迭代的今天",{"2":{"201":1}}],["在万卡级别的",{"2":{"551":1}}],["在成本与性能之间取舍",{"2":{"549":1}}],["在前端生态中已成为主流",{"2":{"822":1}}],["在前端框架",{"2":{"543":1}}],["在前端领域",{"2":{"10":1}}],["在产品成功率不足",{"2":{"600":1}}],["在产品应用层",{"2":{"541":1}}],["在产品设计中",{"2":{"394":1}}],["在推理过程中反复纠结",{"2":{"537":1}}],["在推送",{"2":{"451":1}}],["在人类的模糊意图与机器的结构化理解之间",{"2":{"536":1}}],["在人类大脑中",{"2":{"421":1}}],["在随机性之上",{"0":{"534":1},"1":{"535":1,"536":1,"537":1,"538":1}}],["在自然语言编程时代重塑工程",{"0":{"530":1},"1":{"531":1,"532":1,"533":1}}],["在讨论",{"2":{"526":1}}],["在长文档分析",{"2":{"521":1}}],["在对比具体平台之前",{"2":{"519":1}}],["在搜索结果顶部嵌入的",{"2":{"518":1}}],["在线预览",{"2":{"641":1}}],["在线轻量版供快速体验",{"2":{"564":1}}],["在线学编程",{"2":{"562":1}}],["在线课程复习",{"2":{"515":1}}],["在线游戏状态同步",{"2":{"156":1}}],["在中文理解与生成",{"2":{"512":1}}],["在英文处理",{"2":{"510":1}}],["在指令中展现出清晰的结构化",{"2":{"509":1}}],["在完成",{"2":{"509":1}}],["在音节上",{"2":{"506":1}}],["在回调内重新抛出错误以停止整个操作",{"2":{"839":1}}],["在回答时",{"2":{"504":1}}],["在回应家长提问时",{"2":{"494":1}}],["在创作过程中",{"2":{"504":1}}],["在创作过程中既能调用工具",{"2":{"502":1}}],["在后续的扩展和微调上缺乏灵活性",{"2":{"504":1}}],["在后台发送",{"2":{"97":1}}],["在选题阶段",{"2":{"492":1}}],["在极限开发的时间压力下",{"2":{"492":1}}],["在真实业务场景中可能面临的",{"2":{"491":1}}],["在真正的生产环境中",{"2":{"152":1}}],["在测试阶段",{"2":{"481":1}}],["在研究完成后",{"2":{"474":1}}],["在工作与业余项目中",{"2":{"901":1}}],["在工具化阶段",{"2":{"459":1}}],["在工程实践中",{"2":{"423":1}}],["在提交前",{"2":{"451":1}}],["在开始开发前",{"2":{"451":1}}],["在开发热更新工具时",{"2":{"334":1}}],["在需要专业判断时指派",{"2":{"597":1}}],["在需要时可查阅的其他文档",{"2":{"442":1}}],["在需要传递复杂查询参数",{"2":{"124":1}}],["在其旗舰模型",{"2":{"441":1}}],["在智能体生态里",{"2":{"434":1}}],["在具体的子任务执行中开启",{"2":{"433":1}}],["在大模型越来越被大家熟知后",{"2":{"912":1}}],["在大模型发展日新月异的今天",{"2":{"598":1}}],["在大语言模型",{"2":{"441":1}}],["在大目标上使用",{"2":{"433":1}}],["在大型工程中",{"2":{"335":1}}],["在大型项目中",{"2":{"312":1}}],["在大型应用项目中",{"2":{"205":1,"211":1}}],["在理解了",{"2":{"432":1}}],["在执行",{"2":{"451":2}}],["在执行具体步骤时",{"2":{"443":1}}],["在执行第",{"2":{"430":1}}],["在执行过程中不断",{"2":{"408":1}}],["在分析完侧重",{"2":{"428":1}}],["在分解任务的同时进行规划",{"2":{"424":1}}],["在众多的",{"2":{"493":1}}],["在众多",{"2":{"427":1}}],["在处理复杂",{"2":{"931":1}}],["在处理复杂任务时",{"2":{"424":1}}],["在处理极端定制",{"2":{"928":1}}],["在处理现实事务时会暴露无遗",{"2":{"614":1}}],["在处理任务时按需发现",{"2":{"436":1}}],["在处理链式调用或复杂的并行变更时",{"2":{"110":1}}],["在动手期之前",{"2":{"447":1}}],["在动手之前",{"2":{"423":1}}],["在动手构建任何复杂的软件架构之前",{"2":{"377":1}}],["在复杂业务中的边界",{"2":{"901":1}}],["在复杂的",{"2":{"547":1}}],["在复杂环境中寻找最优路径的",{"2":{"421":1}}],["在复制验证码的短信里加一个",{"2":{"370":1}}],["在单",{"2":{"415":1}}],["在单向推送场景轻量而优雅",{"2":{"144":1}}],["在数字化时代",{"2":{"908":1}}],["在数学",{"2":{"614":1}}],["在数百万条记录中快速定位相关信息",{"2":{"410":1}}],["在数据过期",{"2":{"103":1}}],["在显著重构工作模式后",{"2":{"405":1}}],["在细微之处",{"2":{"397":1}}],["在方寸之间",{"2":{"397":1}}],["在约束条件下求最优解",{"0":{"394":1}}],["在竞争激烈的成熟市场",{"2":{"392":1}}],["在冰柜这个",{"2":{"391":1}}],["在试图洞察万事万物时",{"2":{"388":1}}],["在物理世界和现实系统中",{"2":{"388":1}}],["在现实世界中",{"2":{"908":1}}],["在现实社会中",{"2":{"614":1}}],["在现实中创造真实的价值",{"2":{"615":1}}],["在现实中",{"2":{"383":1}}],["在现代前端开发中",{"2":{"920":1}}],["在现代前端工程中已基本不再使用",{"2":{"920":1}}],["在现代前端工程中",{"2":{"95":1}}],["在现代",{"2":{"145":1,"333":1}}],["在营销与团队构建层面",{"2":{"380":1}}],["在哲学层面是不谋而合的",{"2":{"379":1}}],["在笔者看来",{"2":{"379":1,"945":1,"946":1}}],["在笔记本上写下你的预测",{"2":{"369":1}}],["在找到真实需求后",{"2":{"378":1}}],["在错误发生时",{"2":{"376":1}}],["在脑海中",{"2":{"374":1}}],["在任何新功能上线前",{"2":{"369":1}}],["在你预设的",{"2":{"367":1}}],["在此基础上增加了",{"2":{"859":1}}],["在此模式下",{"2":{"484":1}}],["在此阶段只感知技能的存在与用途",{"2":{"443":1}}],["在此处体现为",{"2":{"367":1}}],["在此期间",{"2":{"104":1}}],["在购物车页面放置了",{"2":{"366":1}}],["在很长一段时间里",{"2":{"363":1,"553":1,"902":1}}],["在很长一段时间内",{"2":{"306":1}}],["在机器面前保持好奇",{"0":{"362":1}}],["在算力面前保持敬畏",{"0":{"362":1}}],["在当下变得愈发不可承受",{"2":{"361":1}}],["在当前众多顶级的",{"2":{"145":1}}],["在当前很多顶级的",{"2":{"135":1}}],["在某种程度上正是我们洞察力与品味的直接映射",{"2":{"358":1}}],["在某些最新的服务端边缘计算环境中可能受限",{"2":{"342":1}}],["在某些场景",{"2":{"315":1}}],["在未来",{"2":{"358":1}}],["在文章的最后",{"2":{"919":1,"958":1}}],["在文章的构思与润色过程中",{"2":{"903":1}}],["在文章中反复强调独立思考",{"2":{"360":1}}],["在文章中给出了答案",{"2":{"357":1}}],["在文学创作这种",{"2":{"496":1}}],["在文件顶部加",{"2":{"74":1}}],["在巨头林立的赛道中",{"2":{"356":1}}],["在互联网上自主穿梭",{"2":{"355":1}}],["在不牺牲精度的前提下榨干每一滴",{"2":{"551":1}}],["在不牺牲答案真实性和用户体验的前提下探索商业化",{"2":{"354":1}}],["在不久的将来",{"2":{"419":1}}],["在不断实践中",{"2":{"400":1}}],["在不同时间返回的",{"2":{"59":1}}],["在性能优化上借鉴了",{"2":{"353":1}}],["在交互设计上做出了几个违背传统搜索常理的决策",{"2":{"350":1}}],["在交叉类型上的行为",{"0":{"239":1}}],["在生成简明答案时",{"2":{"349":1}}],["在保持第一",{"2":{"964":1}}],["在保持第一和二阶段建立的习惯基础上",{"2":{"963":1}}],["在保持第一阶段建立的习惯基础上",{"2":{"962":1}}],["在保持源码可读性的同时",{"2":{"226":1}}],["在保留传统蓝链的同时提供综合答案",{"2":{"518":1}}],["在保留了完整的现代前端缓存调度能力的同时",{"2":{"342":1}}],["在团队协作中",{"2":{"330":1}}],["在团队工程中",{"2":{"311":1}}],["在全栈开发的语境下",{"2":{"326":1}}],["在全局只有一个实例",{"2":{"301":1}}],["在原生",{"2":{"317":1}}],["在函数",{"2":{"912":1}}],["在函数内部使用动态导入",{"2":{"315":1}}],["在函数体内对",{"2":{"254":1}}],["在标准规范中寻求最优解",{"0":{"316":1}}],["在标准之上构建未来",{"0":{"309":1}}],["在标准化脚手架搭建上效率极高",{"2":{"3":1}}],["在代码合并入主分支之前",{"2":{"535":1}}],["在代码执行前",{"2":{"314":1}}],["在代码编译阶段就能确定依赖关系",{"2":{"307":1}}],["在代码提交",{"2":{"132":1}}],["在运行时侦测当前环境",{"2":{"306":1}}],["在运行时只是一个",{"2":{"247":1}}],["在它出现之前",{"2":{"304":1}}],["在秩序与复杂中寻找平衡",{"0":{"303":1}}],["在深入理论之前",{"2":{"295":1}}],["在这所更大的学校中",{"2":{"965":1}}],["在这期间",{"2":{"962":1}}],["在这方面尝试改善了下",{"2":{"950":1}}],["在这场变革中",{"2":{"569":1}}],["在这一层",{"2":{"540":1}}],["在这一节",{"2":{"361":1}}],["在这种客观条件的倒逼下",{"2":{"956":1}}],["在这种",{"2":{"952":1}}],["在这种多智能体合作的场景下",{"2":{"475":1}}],["在这种背景下",{"2":{"414":1,"419":1}}],["在这类场景中",{"2":{"405":1}}],["在这里体现为",{"2":{"367":1}}],["在这个阶段",{"2":{"953":1}}],["在这个从",{"2":{"934":1}}],["在这个博客",{"2":{"902":1}}],["在这个时代",{"2":{"539":1,"613":1}}],["在这个案例中",{"2":{"473":1}}],["在这个过程中",{"2":{"464":1}}],["在这个范式下",{"2":{"440":1}}],["在这个生态里",{"2":{"434":1}}],["在这个",{"2":{"370":1,"420":1}}],["在这个技术天翻地覆的时代",{"2":{"362":1}}],["在这个信息大爆炸的时代",{"2":{"359":1}}],["在这个经典的生产者",{"2":{"138":1}}],["在这样的背景下",{"2":{"294":1}}],["在采用微前端架构之前",{"2":{"292":1}}],["在决定采用微前端架构时",{"2":{"292":1}}],["在微前端架构中",{"2":{"286":1}}],["在项目中的行为边界",{"2":{"593":1}}],["在项目中实施",{"2":{"282":1}}],["在项目根目录执行",{"2":{"567":1}}],["在项目初期确定统一的渲染策略",{"2":{"59":1}}],["在组件中作为对象导入",{"2":{"923":1}}],["在组件化开发中广泛应用",{"2":{"263":1}}],["在组件渲染前对数据进行转换",{"2":{"107":1}}],["在没有看到效果前大多数人都容易放弃",{"2":{"950":1}}],["在没有任何动画播放时自动停止循环",{"2":{"767":1}}],["在没有",{"2":{"414":1}}],["在没有泛型的时代",{"2":{"255":1}}],["在没有规范的情况下直接写代码",{"2":{"9":1}}],["在参数位置",{"2":{"254":1}}],["在属性类型冲突时会直接编译报错",{"2":{"237":1}}],["在集合运算中对应交集操作",{"2":{"236":1}}],["在联合类型上的行为",{"0":{"233":1}}],["在进行类型收窄之前",{"2":{"229":1}}],["在非",{"2":{"216":1}}],["在引用项目时可能不生效",{"2":{"216":1}}],["在应对复杂业务的挑战时",{"2":{"934":1}}],["在应对复杂需求时",{"2":{"201":1}}],["在应用的入口",{"2":{"106":1}}],["在编译阶段",{"2":{"924":1}}],["在编码阶段",{"2":{"923":1}}],["在编码平台中启动会话",{"2":{"900":1}}],["在编辑器里引入",{"2":{"559":1}}],["在编写下一行",{"2":{"337":1}}],["在编写代码时",{"2":{"3":1,"254":1}}],["在编程与设计中",{"2":{"201":1}}],["在编程",{"2":{"182":1}}],["在接收到",{"2":{"171":1}}],["在本文我们将重点探讨",{"2":{"158":1}}],["在web",{"2":{"158":1}}],["在业务场景的约束下做出最优雅的取舍",{"2":{"144":1}}],["在维持长连接",{"2":{"143":1}}],["在系统设计上是一笔不小的开销",{"2":{"136":1}}],["在水平扩容场景下",{"2":{"129":1}}],["在带来极致性能的同时",{"2":{"129":1}}],["在逻辑上比纯粹的流式传输更具约束力",{"2":{"120":1}}],["在请求方式",{"2":{"118":1}}],["在同一时刻",{"2":{"115":1}}],["在同一个渲染周期内",{"2":{"97":1}}],["在核心运作机制上",{"2":{"115":1}}],["在构建特定场景的",{"2":{"547":1}}],["在构建",{"2":{"113":1,"433":1}}],["在构建阶段",{"2":{"923":1}}],["在构建阶段自动将类名变成局部变量",{"2":{"923":1}}],["在构建阶段会生成一个轻量的客户端",{"2":{"65":1}}],["在构建阶段提前执行页面代码",{"2":{"42":1}}],["在企业级应用中",{"2":{"104":1,"417":1}}],["在企业级项目中",{"2":{"99":1}}],["在底层维护了一个全局的",{"2":{"104":1}}],["在传统开发模式下",{"2":{"527":1}}],["在传统搜索中",{"2":{"350":1}}],["在传统模式下",{"2":{"104":1}}],["在传统的数据获取流程中",{"2":{"95":1}}],["在缓存有效期内多次调用只会执行一次物理网络请求",{"2":{"103":1}}],["在配合",{"2":{"97":1}}],["在客户端的标准方案",{"2":{"162":1}}],["在客户端中",{"2":{"149":1}}],["在客户端渲染",{"2":{"75":1}}],["在客户端用",{"2":{"73":1}}],["在于如何将宏大叙事转化为个人的行动力量",{"2":{"604":1}}],["在于",{"2":{"75":1}}],["在实际应用",{"2":{"485":1}}],["在实际应用中",{"2":{"141":1}}],["在实际工程中",{"2":{"452":1}}],["在实际工程实践中",{"2":{"67":1}}],["在实际开发中",{"2":{"299":1}}],["在实际项目开发中",{"2":{"264":1}}],["在实际项目中应用微前端架构",{"2":{"291":1}}],["在实际项目中应用",{"2":{"281":1}}],["在实际项目中",{"2":{"226":1,"588":1}}],["在实际项目中使用",{"2":{"170":1}}],["在实际编程中有直接应用",{"2":{"244":1}}],["在实际业务中往往成为瓶颈",{"2":{"165":1}}],["在实际生产环境中",{"2":{"157":1}}],["在实践中打磨产品思维",{"2":{"901":1}}],["在实践中",{"2":{"2":1,"250":1}}],["在服务器过载",{"2":{"147":1}}],["在服务器接收到请求时实时执行页面代码",{"2":{"38":1}}],["在服务端运行",{"2":{"82":1}}],["在服务端动态生成",{"2":{"82":1}}],["在服务端使用",{"2":{"59":1}}],["在静态项目中直接编写",{"2":{"20":1}}],["在规范中明确要求",{"2":{"9":1}}],["在定义",{"2":{"5":1}}],["在状态与交互介入之前",{"2":{"3":1}}],["在",{"2":{"2":1,"3":1,"11":1,"28":1,"29":3,"30":2,"46":1,"50":1,"69":1,"71":1,"73":1,"74":1,"80":2,"86":1,"108":1,"109":1,"115":2,"117":1,"124":2,"127":1,"216":2,"217":1,"221":1,"224":1,"232":1,"244":1,"256":1,"309":1,"320":1,"322":1,"332":1,"333":1,"342":1,"348":1,"353":1,"357":1,"358":1,"360":1,"361":1,"363":1,"367":2,"376":1,"402":1,"410":1,"415":1,"426":1,"430":1,"437":1,"441":1,"466":1,"467":1,"495":2,"499":1,"508":1,"509":1,"523":1,"525":2,"532":1,"539":1,"540":1,"550":1,"555":1,"556":1,"581":1,"591":1,"610":1,"742":2,"764":1,"843":1,"906":1,"912":1,"925":1,"929":1,"931":2,"932":1,"933":2,"942":1,"947":1}}],["在软件工程中",{"2":{"1":1}}],["与同事",{"2":{"964":1}}],["与体脂秤对应的手机",{"2":{"960":1}}],["与别人沟通交流的方式推动",{"2":{"958":1}}],["与设计系统保持一致",{"2":{"928":3}}],["与现有技术栈和工具链的兼容性",{"2":{"928":1}}],["与长期维护成本",{"2":{"928":1}}],["与工作流",{"0":{"859":1}}],["与工具调用完善",{"2":{"522":1}}],["与默认",{"2":{"839":1}}],["与标准",{"2":{"815":1}}],["与浏览器",{"2":{"767":1}}],["与模块依赖拓扑",{"2":{"636":1}}],["与模块化",{"0":{"276":1},"1":{"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1}}],["与机会绝缘",{"2":{"622":1}}],["与让别人掏钱买你的服务之间",{"2":{"612":1}}],["与聊天",{"2":{"606":1}}],["与创造",{"0":{"600":1}}],["与数学思维",{"0":{"598":1}}],["与本地代码库深度结合",{"2":{"568":1}}],["与代码编辑器深度融合",{"0":{"563":1},"1":{"564":1,"565":1}}],["与交付",{"2":{"555":1}}],["与算力调度",{"2":{"551":1}}],["与其让问题与环境倒逼自己改变",{"2":{"950":1}}],["与其这般努力",{"2":{"950":1}}],["与其说世界上存在信息差",{"2":{"626":1}}],["与其追求每一步都人工可控",{"2":{"538":1}}],["与其他",{"2":{"402":1}}],["与能力的平庸化",{"0":{"531":1}}],["与字节跳动生态打通",{"2":{"522":1}}],["与阿里云",{"2":{"522":1}}],["与百度地图",{"2":{"518":1}}],["与百度搜索深度融合",{"2":{"512":1}}],["与飞书日历",{"2":{"515":2}}],["与私有化部署",{"2":{"512":1}}],["与抖音",{"2":{"512":1}}],["与钉钉",{"2":{"512":1}}],["与生态支持",{"2":{"512":1}}],["与用户的一次交互周期",{"2":{"884":1}}],["与用户的外部收益",{"2":{"399":1}}],["与用户对话",{"2":{"506":1}}],["与配置",{"0":{"481":1}}],["与人",{"0":{"610":1}}],["与人工对齐",{"2":{"550":1}}],["与人工协作",{"2":{"3":1}}],["与人类研究团队中的协作模式高度契合",{"2":{"468":1}}],["与杠杆力",{"2":{"458":1}}],["与行动",{"2":{"427":1}}],["与推理执行",{"2":{"419":1}}],["与上下文学习有关",{"2":{"408":1}}],["与沉没成本陷阱",{"0":{"393":1}}],["与运营成本",{"2":{"391":1}}],["与真诚",{"2":{"360":1}}],["与真实",{"2":{"70":1}}],["与平庸",{"0":{"360":1}}],["与碎片化接口治理问题",{"2":{"342":1}}],["与新兴技术深度融合",{"2":{"293":1}}],["与业务洞察",{"0":{"541":1}}],["与业务专家深入沟通",{"2":{"282":1}}],["与业务消息",{"2":{"175":1}}],["与后端接口交互时",{"2":{"256":1}}],["与后端接口自然对应",{"2":{"97":1}}],["与类型层级的代数关系",{"0":{"244":1}}],["与联合类型相反",{"2":{"239":1}}],["与普通",{"2":{"177":1}}],["与主动取消",{"0":{"174":1}}],["与原生",{"2":{"168":1}}],["与流式",{"2":{"159":1}}],["与实时业务场景选型",{"0":{"142":1}}],["与二进制数据帧",{"2":{"127":1}}],["与全局配置",{"0":{"99":1}}],["与状态同步",{"2":{"129":1}}],["与状态管理解耦",{"2":{"97":1}}],["与状态下沉",{"2":{"6":1}}],["与页面共享同一套",{"2":{"83":1}}],["与构建阶段的渲染过程解耦",{"2":{"66":1}}],["与客户端首次渲染的",{"2":{"59":1}}],["与传统动态网站对比",{"0":{"15":1}}],["与此同时",{"2":{"3":1,"86":1,"87":1}}],["与副作用",{"2":{"3":1}}],["与",{"0":{"11":1,"53":1,"85":1,"134":1,"205":1,"210":1,"235":1,"321":1,"333":1,"419":1,"777":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1,"206":1,"207":1,"208":1,"209":1,"210":1,"236":1,"237":1,"238":1,"239":1,"240":1},"2":{"2":1,"3":2,"26":1,"46":1,"51":1,"85":1,"86":1,"90":1,"95":1,"104":1,"109":1,"115":1,"125":1,"126":1,"145":1,"158":1,"163":1,"180":1,"182":1,"203":1,"209":1,"216":1,"226":1,"244":2,"303":1,"307":1,"313":1,"337":1,"338":1,"340":1,"342":1,"345":1,"349":1,"363":1,"365":1,"376":1,"422":1,"426":1,"429":1,"432":1,"480":1,"493":1,"511":1,"521":3,"522":1,"540":1,"541":1,"544":1,"550":1,"558":1,"561":1,"596":1,"704":1,"777":1,"901":1,"902":1,"909":2,"945":1}}],["与回调通信",{"2":{"2":1}}],["与高内聚低耦合两条铁律",{"2":{"2":1}}],["一直到",{"2":{"963":1}}],["一直有职员在玩",{"2":{"917":1}}],["一方面来总结下前几个阶段的操作",{"2":{"959":1}}],["一方面在后台精准计算",{"2":{"493":1}}],["一批又一批的大学生陆续走出校门进入社会大舞台",{"2":{"959":1}}],["一群比较合得来的学生仅仅凭借几成勇气就在业余时间集中到一个物理空间内去捣鼓一些东西",{"2":{"957":1}}],["一部分时间居家远程办公",{"2":{"955":1}}],["一天一个样",{"2":{"926":1}}],["一天内完成",{"2":{"461":2}}],["一人只能押大",{"2":{"917":1}}],["一维映射",{"2":{"706":1}}],["一维坐标轴",{"2":{"706":1}}],["一一对应",{"2":{"641":1}}],["一致性难以保证",{"2":{"639":1}}],["一切信息不对称的表象之下",{"2":{"626":1}}],["一切行为都可以从数学本质上推导出来",{"2":{"250":1}}],["一无所知",{"2":{"609":1}}],["一扇望向万年文明的宏大坐标",{"2":{"604":1}}],["一起自动加载",{"2":{"575":1}}],["一起阅读",{"2":{"433":1}}],["一般都掌握了好的学习方法论",{"2":{"918":1}}],["一般",{"2":{"565":2}}],["一般为",{"2":{"442":1}}],["一眼识破平庸与风险",{"2":{"539":1}}],["一百万匹马",{"2":{"539":1}}],["一体化",{"2":{"515":1}}],["一体化智能文档平台",{"2":{"515":1}}],["一步到位",{"2":{"515":1}}],["一笑倾人城",{"2":{"505":1}}],["一笑动山川",{"2":{"505":1}}],["一套逻辑",{"2":{"503":1}}],["一共",{"2":{"494":1,"495":1}}],["一开始就要做系统",{"2":{"459":1}}],["一开始往往是不受待见的",{"2":{"360":1}}],["一文中",{"2":{"441":1}}],["一些必须规避的反模式",{"0":{"933":1}}],["一些文章在撰写过程中",{"2":{"903":1}}],["一些典型的应用场景",{"2":{"436":1}}],["一些旧版",{"2":{"119":1}}],["一段有逻辑的话",{"2":{"503":1}}],["一段段咬合起来",{"2":{"385":1}}],["一段时间下来",{"2":{"917":1}}],["一段时间",{"2":{"151":1}}],["一周后",{"2":{"369":1}}],["一种描述请求数据方法的语法",{"2":{"342":1}}],["一种轻量的数据传输格式",{"2":{"73":1}}],["一目了然",{"2":{"297":1}}],["一组相关对象的集合",{"2":{"278":1}}],["一定是",{"2":{"268":1}}],["一张高质量图片的生成可能需要",{"2":{"136":1}}],["一问一答",{"2":{"116":1}}],["一句话概括",{"2":{"842":1}}],["一句话定位",{"2":{"639":1,"670":1,"728":1,"784":1,"874":1}}],["一句话提供的信息往往比你想象中要多",{"2":{"573":1}}],["一句话背景",{"2":{"573":1}}],["一句话做应用",{"2":{"561":1}}],["一句话描述",{"2":{"559":1}}],["一句话生成精美演示文稿",{"2":{"515":1}}],["一句话总结",{"2":{"87":1,"155":1,"526":1,"530":1,"534":1}}],["一句代码可以使所有以",{"2":{"110":1}}],["一并发送给浏览器",{"2":{"86":1}}],["一概不负责",{"2":{"71":1}}],["一半靠构建工具链的高效执行",{"2":{"66":1}}],["一半靠静态产物的缓存",{"2":{"66":1}}],["一次一个",{"2":{"888":1}}],["一次定义",{"2":{"583":1}}],["一次性的操作序列",{"2":{"585":1}}],["一次性需求",{"2":{"435":1}}],["一次性产物",{"2":{"50":1}}],["一次编写多处运行",{"2":{"730":1}}],["一次编写",{"2":{"270":1,"842":1,"886":1}}],["一次页面请求的完整流程",{"2":{"73":1}}],["一次构建",{"2":{"57":1}}],["一次",{"2":{"57":1}}],["一点点长出来",{"2":{"52":1}}],["一键完成",{"2":{"583":1}}],["一键触发复杂的自动化操作",{"2":{"579":1}}],["一键心流",{"2":{"565":1}}],["一键补全代码",{"2":{"564":1}}],["一键生成精美演示文稿",{"2":{"515":1}}],["一键跳回",{"2":{"370":1}}],["一键上线",{"0":{"29":1}}],["一键部署至",{"2":{"71":1}}],["一键部署",{"2":{"19":1,"23":1,"561":1}}],["一个包子",{"2":{"961":1}}],["一个多月后惊奇地发现涨了",{"2":{"959":1}}],["一个普通的打工人去延伸思考这些东西有什么用处呢",{"2":{"957":1}}],["一个大学生在学好数学等基础学科的基础上",{"2":{"947":1}}],["一个全面质量管理的思想基础和方法依据",{"2":{"943":1}}],["一个被广为熟知的话题",{"2":{"936":1}}],["一个专注于阅读体验的",{"2":{"904":1}}],["一个探索全栈工程",{"2":{"903":1}}],["一个人在学习时所使用的方式",{"2":{"918":1}}],["一个人越早学会将",{"2":{"914":1}}],["一个人一旦被哀怨情绪控制",{"2":{"612":1}}],["一个人就是一支队伍",{"2":{"557":1}}],["一个人就能打通创意",{"2":{"457":1}}],["一个直观的场景选择",{"2":{"592":1}}],["一个完整的包",{"2":{"585":1}}],["一个命令只做一件事",{"2":{"583":1}}],["一个命令文件由",{"2":{"581":1}}],["一个文件只讨论一个主题",{"2":{"578":1}}],["一个简单的判断标准",{"2":{"577":1,"588":1}}],["一个基于",{"2":{"573":1}}],["一个账号解决所有模型接入",{"2":{"523":1}}],["一个擅长创作诗歌",{"2":{"499":1}}],["一个聊天机器人",{"2":{"465":1}}],["一个浏览器插件",{"2":{"465":1}}],["一个想法到可用产品可能需要数周甚至数月",{"2":{"461":1}}],["一个具体的",{"0":{"451":1}}],["一个具备复合能力的人才或许只需一个周末就能完成原型的搭建与验证",{"2":{"361":1}}],["一个达到工程交付标准的",{"2":{"450":1}}],["一个强大的",{"2":{"440":1}}],["一个最核心的问题往往萦绕在开发者和用户的脑海中",{"2":{"434":1}}],["一个能在复杂业务中持久生存的智能体",{"2":{"433":1}}],["一个成熟的",{"2":{"408":1,"434":1}}],["一个成功的产品决策",{"2":{"363":1}}],["一个页面上有几个按钮",{"2":{"383":1}}],["一个好的新想法",{"2":{"360":1}}],["一个用于构建高效",{"2":{"344":1}}],["一个设计良好的",{"2":{"337":1,"444":1}}],["一个模块应当有且只有一个被改变的原因",{"2":{"327":1}}],["一个模块状态改变",{"2":{"302":1}}],["一个真正掌握了泛型的开发者",{"2":{"271":1}}],["一个真实的",{"2":{"71":1}}],["一个栈不应该只能存储",{"2":{"256":1}}],["一个新对象只要拥有所有要求的属性",{"2":{"236":1}}],["一个负责赋予交互",{"2":{"68":1}}],["一个负责产出",{"2":{"68":1}}],["一个典型的前端分层架构通常包含以下核心层次",{"2":{"274":1}}],["一个典型的",{"0":{"60":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1,"66":1}}],["一个",{"2":{"33":1,"190":1,"255":1,"358":1,"411":1,"535":1,"797":1,"884":1}}],["一个清晰的设计规范",{"2":{"12":1}}],["一个组件只负责渲染一块特定的视觉或封装一类特定的交互",{"2":{"2":1}}],["一份数据多种图表复用",{"2":{"702":1}}],["一份代码",{"2":{"308":1}}],["一份清晰的规范",{"2":{"9":1}}],["一份合格的状态必须",{"2":{"5":1}}],["一旦大环境发生变化",{"2":{"958":1}}],["一旦转换为其他的表示方法后",{"2":{"916":1}}],["一旦严格执行落地",{"2":{"906":1}}],["一旦缓存",{"2":{"621":1}}],["一旦喧宾夺主",{"2":{"613":1}}],["一旦你了解了这些背景",{"2":{"609":1}}],["一旦你看懂了调节回路",{"2":{"387":1}}],["一旦发现",{"2":{"537":1}}],["一旦发现问题或异常情况",{"2":{"3":1}}],["一旦初始计划中的某一步在执行时受阻",{"2":{"423":1}}],["一旦形成博弈均衡",{"2":{"392":1}}],["一旦我们将变量放进时间轴里观察",{"2":{"384":1}}],["一旦找到那个令你产生深度兴趣的切入点",{"2":{"361":1}}],["一旦数据库驱动更换",{"2":{"328":1}}],["一旦数据传输完成",{"2":{"115":1}}],["一旦任务完成",{"2":{"153":1}}],["一旦有新数据",{"2":{"151":1}}],["一旦页面顶层被标记为客户端组件",{"2":{"74":1}}],["一旦存在隐蔽缺陷",{"2":{"3":1}}],["一事一议",{"2":{"2":1}}],["snake",{"2":{"895":1}}],["snapshotoptions",{"2":{"806":1}}],["snapshot│",{"2":{"799":1}}],["snapshotformatter",{"2":{"792":1}}],["snapshot",{"2":{"667":1,"790":1,"792":1,"797":1,"799":2,"806":1}}],["sync",{"2":{"880":1,"881":3}}],["symbolsize",{"2":{"715":1}}],["symbol",{"2":{"706":1,"708":1,"715":1}}],["systematic",{"2":{"880":1,"881":1,"883":1,"893":1,"896":2}}],["systemtheme",{"2":{"647":1}}],["systemprompt",{"2":{"482":1}}],["systems",{"2":{"467":1}}],["systemjs",{"2":{"203":1}}],["system",{"0":{"415":1,"504":1,"506":1,"652":1,"654":1,"656":1,"711":1,"713":1,"714":1,"739":1,"742":1,"743":1,"886":1},"1":{"416":1,"505":1,"507":2,"508":2},"2":{"143":1,"203":1,"415":1,"438":1,"443":1,"486":2,"496":1,"503":1,"509":1,"646":9,"650":2,"653":1,"654":1,"656":2,"705":1,"711":1,"714":1,"732":1,"733":1,"741":1,"768":2,"771":1,"854":1,"856":1,"859":1,"867":1,"881":1,"925":1,"927":1}}],["sys",{"2":{"26":2}}],["square",{"2":{"692":1}}],["sqliang",{"2":{"905":1}}],["sqlcreate",{"2":{"28":1}}],["sql",{"2":{"15":1,"28":1,"301":2,"403":1,"555":1,"557":1,"586":1}}],["svgns",{"2":{"762":1}}],["svgnostyledata",{"2":{"762":1}}],["svgprolevelsfilter",{"2":{"762":1}}],["svgmatte3effect",{"2":{"762":1}}],["svggaussianblureffect",{"2":{"762":1}}],["svggradientstrokestyledata",{"2":{"762":1}}],["svggradientfillstyledata",{"2":{"762":1}}],["svgfillfilter",{"2":{"762":1}}],["svgfillstyledata",{"2":{"762":1}}],["svgdropshadoweffect",{"2":{"762":1}}],["svgcomposableeffect",{"2":{"762":1}}],["svgcompelement",{"2":{"761":1,"762":1,"768":2}}],["svgbaseelement",{"2":{"762":1}}],["svgtritonefilter",{"2":{"762":1}}],["svgtransformeffect",{"2":{"762":1}}],["svgtransformdata",{"2":{"762":1}}],["svgtinteffect",{"2":{"762":1}}],["svgtextelement",{"2":{"761":1,"762":1}}],["svgelement",{"2":{"768":1}}],["svgelements",{"2":{"762":1,"764":1}}],["svgelementsrenderer",{"2":{"762":1}}],["svgeffectsplaceholder",{"2":{"762":1}}],["svgeffects",{"2":{"761":1,"762":1,"764":1}}],["svgstrokeeffect",{"2":{"762":1}}],["svgstrokestyledata",{"2":{"762":1}}],["svgstyledata",{"2":{"762":1}}],["svgshapeelement",{"2":{"762":1}}],["svgshapeelement|",{"2":{"761":1}}],["svgshapedata",{"2":{"762":1}}],["svgsolidelement|",{"2":{"761":1}}],["svgimageelement|",{"2":{"761":1}}],["svgrendererconfig",{"2":{"777":1}}],["svgrendererbase",{"2":{"762":1}}],["svgrenderer",{"2":{"761":1,"762":1,"764":1,"768":3}}],["svg",{"2":{"643":1,"677":2,"699":1,"700":1,"701":3,"704":1,"705":1,"706":1,"719":1,"734":1,"755":2,"757":3,"758":1,"760":1,"761":2,"762":28,"764":4,"765":1,"768":1,"773":1,"776":1,"777":2,"778":5,"781":1,"782":2,"881":1}}],["svelte",{"2":{"103":1,"339":2,"345":1,"842":1,"845":1,"847":2,"848":1,"849":2,"881":2,"924":3,"928":1}}],["sveltekit",{"2":{"38":1}}],["sft",{"2":{"551":1}}],["sfc",{"2":{"65":1,"924":1,"928":2}}],["sge",{"2":{"518":1}}],["s",{"2":{"238":2,"776":1}}],["sky",{"2":{"925":1}}],["skewy",{"2":{"682":2}}],["skewx",{"2":{"682":2}}],["skeleton",{"2":{"100":1,"734":1}}],["skinnedmesh",{"2":{"734":1,"737":1,"740":1}}],["skia",{"2":{"670":1,"672":1,"673":2,"677":3}}],["skillmetadata",{"2":{"895":2}}],["skillfound",{"2":{"887":1}}],["skill3",{"2":{"506":1}}],["skill2",{"2":{"506":1}}],["skill1",{"2":{"506":1}}],["skill描述",{"2":{"442":1}}],["skill",{"0":{"444":1,"450":1,"451":1,"452":1,"547":1},"1":{"445":1,"446":1,"447":1,"448":1,"449":1,"450":1,"453":1,"454":1,"455":1},"2":{"437":1,"438":1,"442":6,"443":6,"444":5,"445":1,"448":3,"450":2,"451":1,"452":1,"454":2,"456":1,"470":1,"472":1,"491":2,"547":3,"570":3,"586":2,"588":1,"592":1,"792":1,"879":1,"880":4,"881":17,"883":17,"884":11,"886":1,"887":5,"888":1,"889":1,"890":1,"895":6,"896":1}}],["skillsv4",{"2":{"848":2,"866":1}}],["skills",{"0":{"436":1,"441":1,"584":1,"592":1},"1":{"585":1,"586":1,"587":1,"588":1},"2":{"434":1,"435":1,"436":2,"437":2,"438":2,"439":4,"440":1,"441":6,"442":3,"456":4,"470":3,"506":1,"509":1,"547":1,"552":1,"570":5,"584":1,"585":1,"586":1,"588":1,"590":1,"592":1,"597":2,"787":1,"792":1,"857":1,"866":1,"874":1,"879":1,"880":3,"881":3,"883":3,"884":1,"887":1,"896":1}}],["skipstroke",{"2":{"692":1}}],["skipshadow",{"2":{"692":1}}],["skiptransform",{"2":{"692":2}}],["skip",{"2":{"482":1}}],["skiplibcheck",{"2":{"203":1,"204":1,"212":1,"322":1}}],["skipdefaultlibcheck",{"2":{"203":1}}],["shutdown",{"2":{"801":2,"807":1}}],["showloading",{"2":{"719":1}}],["shot",{"2":{"367":1}}],["should",{"2":{"223":2,"806":1,"889":1}}],["sheen",{"2":{"734":1,"742":1}}],["sheet",{"2":{"647":1}}],["sheets",{"2":{"338":1}}],["shellindex",{"2":{"827":1}}],["shellfetch",{"2":{"823":1}}],["shell>",{"2":{"796":1}}],["shellopencli",{"2":{"792":1}}],["shelllottie",{"2":{"762":1}}],["shellthree",{"2":{"734":1}}],["shellecharts",{"2":{"706":1}}],["shellai",{"2":{"849":1}}],["shellamis",{"2":{"647":1}}],["shellapp",{"2":{"79":1}}],["shellmicro",{"2":{"290":1}}],["shellmonorepo",{"2":{"211":1}}],["shellproject",{"2":{"280":1}}],["shellsrc",{"2":{"190":1,"191":1,"274":1,"275":1,"823":1}}],["shell",{"2":{"52":1,"553":1,"567":2,"568":1,"722":1,"723":1,"726":1,"792":1,"876":1,"881":1}}],["sh",{"2":{"290":3,"677":1,"880":2,"881":29,"888":2}}],["shippingaddress",{"2":{"281":1}}],["shading",{"0":{"741":1},"2":{"741":1}}],["shadercode",{"2":{"737":1}}],["shaderchunk拼接",{"2":{"742":1}}],["shaderchunk",{"2":{"734":1,"736":1,"742":1}}],["shadernode",{"2":{"737":1}}],["shaderlib",{"2":{"734":1,"736":1,"742":1}}],["shaders",{"2":{"734":2,"739":2}}],["shadermaterial",{"2":{"734":1,"742":2}}],["shader",{"2":{"733":1,"734":1,"748":2}}],["shadcn",{"2":{"340":2,"561":1,"562":1,"926":1,"927":1}}],["shadowmaterial",{"2":{"734":1}}],["shadowforstrokeenabled",{"2":{"692":1}}],["shadowopacity",{"2":{"692":1}}],["shadowoffsety",{"2":{"692":1}}],["shadowoffsetx",{"2":{"692":1}}],["shadowoffset",{"2":{"692":1}}],["shadowenabled",{"2":{"692":1}}],["shadowblur",{"2":{"692":1}}],["shadowcolor",{"2":{"686":1,"692":1}}],["shadow",{"2":{"286":1,"291":1,"734":1,"739":1,"740":1}}],["shaking",{"2":{"307":1,"308":1,"311":1,"316":1,"318":1,"672":1,"673":1,"701":1,"729":1,"730":2,"758":1,"925":1,"926":1}}],["shapedata",{"2":{"776":1}}],["shapemodifier",{"2":{"765":2,"771":2}}],["shapemodifiers",{"0":{"771":1},"2":{"761":1,"762":1,"764":1,"771":3}}],["shapeproperty",{"2":{"762":1,"764":1}}],["shapepathbuilder",{"2":{"762":1}}],["shapepath",{"2":{"762":1,"771":1}}],["shapepathinterface",{"2":{"762":1}}],["shapeparams",{"2":{"677":1}}],["shapecollection",{"2":{"762":2}}],["shapeconfighandler",{"2":{"692":2}}],["shapeconfig",{"2":{"692":3}}],["shapeenums",{"2":{"762":1}}],["shapeelement",{"2":{"761":1,"762":2}}],["shapeinterface",{"2":{"762":1,"769":2}}],["shapetransformmanager",{"2":{"762":1}}],["shapegroupdata",{"2":{"762":1}}],["shapeutils",{"2":{"734":1}}],["shape>",{"2":{"692":3,"693":2}}],["shapes",{"2":{"677":2,"679":2,"734":1,"762":3,"764":2,"771":2,"776":1}}],["shape",{"0":{"683":1,"688":1},"2":{"230":12,"231":1,"232":10,"672":1,"675":2,"676":2,"677":3,"679":1,"680":8,"683":6,"688":1,"692":6,"693":17,"706":1,"762":2,"769":1,"770":1,"771":2,"792":2}}],["sharedstore",{"2":{"289":5}}],["shared",{"0":{"213":1},"2":{"203":2,"205":1,"210":1,"211":1,"214":2,"215":2,"216":7,"237":6,"242":4,"280":3,"288":3,"289":6,"290":2,"291":1,"315":9,"335":1,"792":3}}],["srgb",{"2":{"734":1}}],["src=",{"2":{"696":1,"781":1}}],["src",{"0":{"799":1,"800":1,"801":1},"2":{"203":12,"204":5,"211":3,"213":2,"214":2,"215":2,"216":2,"222":3,"223":2,"280":2,"281":8,"288":6,"290":7,"312":1,"576":4,"583":1,"647":9,"649":4,"677":1,"706":2,"713":1,"734":1,"748":1,"790":1,"791":1,"792":5,"823":1,"830":3,"850":6,"853":5,"872":5,"925":1}}],["srp",{"2":{"2":1}}],["slot>",{"2":{"924":1}}],["slot>默认按钮",{"2":{"924":1}}],["slotmanager",{"2":{"762":1,"768":1}}],["slidereffect",{"2":{"762":1}}],["slider",{"2":{"706":1}}],["slices",{"2":{"274":2}}],["slice",{"2":{"166":1,"168":2}}],["sla",{"2":{"520":1}}],["slack",{"2":{"417":2,"439":1}}],["slug",{"2":{"26":5,"27":7,"77":1}}],["s3",{"2":{"138":1}}],["screenshotoptions",{"2":{"806":1}}],["screenshot",{"2":{"806":1}}],["screenshots",{"2":{"734":1}}],["scrollto",{"2":{"806":1}}],["scroll",{"2":{"706":1,"806":1}}],["script>",{"2":{"696":3,"781":1,"924":1}}],["scripts",{"2":{"224":1,"290":1,"441":1,"442":3,"443":3,"449":1,"647":2,"792":1,"880":1,"881":2,"888":5}}],["script",{"2":{"65":1,"84":1,"297":1,"320":1,"696":1,"781":1,"792":1,"924":1}}],["scaffold",{"2":{"792":1}}],["scalar",{"2":{"770":2}}],["scaledatavalue",{"2":{"719":2}}],["scale",{"2":{"692":1,"706":2,"737":2,"740":1,"748":1}}],["scaley",{"2":{"682":2,"692":1}}],["scalex",{"2":{"682":2,"692":1}}],["scatterview",{"2":{"706":1}}],["scatterseries",{"2":{"706":1}}],["scatter",{"2":{"706":2}}],["schedulercore",{"2":{"719":1}}],["scheduler",{"0":{"712":1},"2":{"704":1,"705":2,"706":1,"708":3,"709":1,"712":1}}],["schemas",{"2":{"749":9}}],["schemanode",{"2":{"661":1}}],["schemaextend",{"2":{"647":1}}],["schemarenderer",{"2":{"646":1,"647":2,"649":3,"650":1,"652":1}}],["schemaminimal",{"2":{"646":1,"647":1}}],["schemafull",{"2":{"646":1,"647":1}}],["schema",{"2":{"274":1,"342":4,"374":1,"482":2,"587":1,"592":1,"640":3,"641":1,"645":3,"646":2,"647":13,"649":6,"650":2,"652":3,"656":2,"658":2,"661":4,"662":2,"668":3,"713":1,"762":1,"807":9,"847":2,"848":1,"854":1,"856":1,"863":1,"866":3}}],["scenes",{"2":{"734":1}}],["scenefunc",{"2":{"677":1,"680":2,"683":4,"692":1}}],["scenecontext",{"2":{"676":1,"677":1,"680":1,"692":3}}],["scenecanvas+hitcanvas",{"2":{"677":1}}],["scenecanvas",{"2":{"675":1,"676":1,"677":1,"680":2,"683":1,"684":1,"692":3}}],["scene",{"0":{"740":1},"2":{"675":1,"676":2,"679":1,"732":1,"733":4,"734":1,"736":1,"737":1,"745":1,"748":4,"749":2,"753":5}}],["scss",{"2":{"642":1,"643":1,"645":1,"646":1,"647":3,"921":4,"927":1,"928":6,"931":5,"932":1,"933":1,"934":6}}],["scoped>",{"2":{"924":1,"928":1}}],["scopedrootrenderer",{"2":{"647":1,"649":2}}],["scoped",{"0":{"924":1},"2":{"646":2,"647":1,"652":1,"654":1,"661":1,"920":1,"924":5,"928":5,"931":1,"933":1,"934":4}}],["scope",{"2":{"451":3,"581":1,"652":2,"653":1,"661":1}}],["scope>",{"2":{"451":1}}],["score>60",{"2":{"655":1}}],["score",{"2":{"107":2,"655":2}}],["socratic",{"2":{"888":1}}],["sociality",{"2":{"402":1}}],["socialaccounts",{"2":{"184":1}}],["sounds",{"2":{"734":1}}],["sourceformat",{"2":{"713":1}}],["sourcemanager",{"2":{"706":1,"713":1}}],["sourcemap",{"2":{"203":1,"204":2}}],["source",{"0":{"167":1},"2":{"118":1,"143":1,"160":1,"167":2,"168":1,"169":1,"170":1,"171":1,"174":1,"175":1,"180":1,"203":1,"217":1,"226":1,"636":1,"702":1,"706":1,"713":3,"734":1,"748":1,"806":1,"813":1,"818":1,"823":1,"826":1}}],["some",{"2":{"582":2}}],["somenamedexport",{"2":{"311":1}}],["solarize",{"2":{"677":1,"679":1}}],["solo",{"2":{"557":1,"564":1,"565":1}}],["solidelement",{"2":{"762":1}}],["solid",{"2":{"103":1}}],["sonnet",{"2":{"481":2,"521":1,"523":1,"581":1,"591":1}}],["sonar",{"2":{"353":1}}],["sop",{"2":{"454":1,"494":1}}],["softdeletable",{"2":{"248":3}}],["sortedpeoplestr",{"2":{"267":1}}],["sortandserialize",{"2":{"267":2}}],["sort",{"2":{"107":1,"267":1,"706":1}}],["swagger",{"2":{"275":1,"342":1}}],["swim",{"2":{"229":1}}],["switch",{"2":{"168":1,"172":1,"175":1,"203":1,"230":1,"231":1,"232":2,"289":1,"654":1,"768":1}}],["switching",{"2":{"126":1,"393":1}}],["swc",{"2":{"97":1,"112":1,"343":1,"642":1}}],["swr",{"0":{"90":1,"96":1,"109":1,"112":1},"1":{"97":1,"98":1,"99":1,"100":1,"101":1,"110":1,"111":1,"112":1,"113":1},"2":{"90":1,"95":1,"97":8,"99":4,"100":5,"101":2,"104":1,"109":1,"110":4,"111":1,"112":1,"342":5}}],["similar",{"2":{"867":1}}],["simplify",{"2":{"734":1}}],["simple",{"2":{"666":1,"706":1,"887":1}}],["sin",{"2":{"741":1}}],["sing",{"2":{"229":4}}],["singleaxis",{"2":{"706":1}}],["singleton",{"2":{"288":7,"301":2}}],["single",{"2":{"97":1,"286":1,"287":3,"706":1}}],["silent",{"2":{"719":1}}],["siliconflow",{"2":{"523":1}}],["signal",{"2":{"171":1,"173":1,"174":3,"175":3,"819":2}}],["signinwithotp",{"2":{"28":1}}],["size=",{"2":{"927":1}}],["size",{"2":{"97":1,"110":1,"249":3,"927":4}}],["site",{"2":{"42":1,"797":2,"800":1,"806":1}}],["sidebar",{"2":{"274":1,"734":1}}],["side",{"2":{"34":1,"38":1,"75":2,"314":1,"742":1,"748":1}}],["smart",{"2":{"792":1}}],["smooth",{"2":{"770":1}}],["smell",{"2":{"363":1}}],["sm",{"2":{"28":1,"249":1,"927":2}}],["sunburstview",{"2":{"706":1}}],["sunburstseries",{"2":{"706":1}}],["sunburst",{"2":{"706":2}}],["sunk",{"2":{"393":1}}],["surface",{"2":{"676":1}}],["supportedurls",{"2":{"866":1}}],["supports3d",{"2":{"768":1}}],["support",{"2":{"682":1,"826":1,"879":1,"880":1}}],["superpowers",{"0":{"887":1},"2":{"874":2,"875":1,"877":1,"879":2,"880":2,"881":4,"883":3,"884":2,"886":1,"887":3,"888":1,"896":1,"899":4}}],["supervision",{"2":{"530":1}}],["super",{"2":{"231":1,"269":1}}],["supabase",{"0":{"28":1},"2":{"16":1,"20":1,"22":1,"23":1,"25":3,"27":1,"28":16,"30":2,"561":1,"562":1}}],["successresult",{"2":{"262":2}}],["success",{"2":{"196":1,"197":1,"229":2,"234":2,"246":7,"260":3,"262":3,"288":1,"451":1,"662":1}}],["summary",{"2":{"472":1,"474":1,"807":6}}],["sum",{"2":{"187":3,"223":1,"281":2,"310":3}}],["suspense>",{"2":{"86":2,"288":4}}],["suspense",{"0":{"85":1,"86":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1},"2":{"78":1,"85":1,"86":7,"87":1,"89":1,"288":5}}],["subarray",{"2":{"833":1}}],["subagent的设计思路",{"2":{"470":1}}],["subagents",{"0":{"438":1},"2":{"434":1,"438":4,"440":1,"881":1}}],["subagent",{"0":{"889":1},"2":{"415":5,"416":1,"438":3,"879":1,"880":1,"881":6,"883":1,"884":4,"887":1,"889":2,"892":1,"896":2,"900":1}}],["subcmd>",{"2":{"796":2}}],["subpath",{"2":{"663":1}}],["subtypedefaulter",{"2":{"706":1,"720":1}}],["subtype",{"2":{"486":1,"705":1,"706":1}}],["subtract",{"2":{"223":5,"295":3,"304":3,"307":2,"310":3,"321":1}}],["subject",{"2":{"179":2,"451":1}}],["sub",{"0":{"302":1},"2":{"129":1,"152":1,"156":1}}],["subscribe",{"2":{"104":1,"175":1}}],["subscription",{"2":{"28":2}}],["submitted",{"2":{"866":1}}],["submitting",{"2":{"663":1}}],["submit",{"2":{"28":1,"663":1,"668":1}}],["speechmodelv4",{"2":{"866":1}}],["speechmodel",{"2":{"848":1,"866":1}}],["speech",{"2":{"848":1,"857":1}}],["speed",{"2":{"777":1}}],["specpath",{"2":{"895":1}}],["specialareas",{"2":{"720":1}}],["specificity",{"2":{"391":1}}],["specificationversion",{"2":{"866":2}}],["specification",{"2":{"1":1,"3":1,"8":1,"9":1,"440":1,"532":1}}],["specs",{"2":{"448":1,"881":1}}],["spec|test",{"2":{"222":1}}],["spec",{"2":{"11":1,"203":2,"204":1,"451":4,"542":2,"667":1,"720":1,"823":2,"847":2,"848":1,"881":2,"884":3,"889":2,"901":1}}],["sphericalharmonics3",{"2":{"734":1}}],["spherical",{"2":{"734":1}}],["sphere",{"2":{"734":1}}],["spheregeometry",{"2":{"734":1}}],["spotlight",{"2":{"734":1}}],["spline等",{"2":{"734":1}}],["splitting",{"2":{"313":1}}],["split",{"2":{"166":1,"168":1}}],["spritematerial",{"2":{"734":1}}],["spriteconfig>",{"2":{"693":1}}],["spritesheet",{"2":{"677":1}}],["sprite",{"2":{"677":1,"679":1,"680":1,"693":1,"734":1,"737":1}}],["spring",{"2":{"344":2}}],["spatial",{"2":{"676":1}}],["spacing",{"2":{"274":1,"647":1}}],["space",{"2":{"26":5,"28":1}}],["spa",{"2":{"34":1,"71":1,"74":1,"84":1,"93":1,"286":1,"287":3,"341":2,"342":1,"344":1,"662":1}}],["sdf",{"2":{"734":1}}],["sdxl",{"2":{"142":1}}],["sdkusermessage>",{"2":{"482":1,"483":1}}],["sdk",{"0":{"478":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1},"2":{"25":2,"467":2,"470":1,"476":1,"477":3,"478":4,"480":1,"481":1,"482":2,"483":1,"485":1,"487":1,"488":2,"491":3,"494":1,"523":3,"545":1,"671":1,"842":4,"843":2,"845":1,"847":7,"848":11,"849":1,"853":2,"856":1,"857":1,"858":1,"863":1,"867":1,"872":1,"877":1,"886":1,"895":1}}],["sdd",{"0":{"8":1,"9":1,"10":1,"11":1,"532":1},"1":{"9":1,"10":1,"11":1},"2":{"8":1,"9":2,"10":4,"11":3,"12":1,"110":1,"525":1,"532":1,"881":6}}],["sass",{"2":{"921":1,"923":1,"928":1}}],["safe",{"2":{"806":1}}],["safari",{"2":{"338":1}}],["sankeyview",{"2":{"706":1}}],["sankeyseries",{"2":{"706":1}}],["sankey",{"2":{"706":2}}],["sandbox",{"2":{"677":1}}],["sanity",{"2":{"21":1}}],["same",{"2":{"561":1,"562":2}}],["saveremote",{"2":{"654":1}}],["saveasimage",{"2":{"706":1}}],["saveas",{"2":{"654":3}}],["saveduser",{"2":{"269":1}}],["savetodatabase",{"2":{"269":3}}],["save",{"2":{"113":1,"221":2,"281":3}}],["saas",{"2":{"16":1,"18":1,"92":1,"342":2,"344":1,"439":1,"639":1,"640":1,"700":1,"928":1,"929":1}}],["std",{"2":{"886":1}}],["stdout",{"2":{"488":2,"489":1}}],["stealth",{"2":{"792":1,"799":1}}],["stencil",{"2":{"748":1}}],["stencilzpass",{"2":{"748":1}}],["stencilzfail",{"2":{"748":1}}],["stencilop",{"2":{"748":3}}],["stencilfail",{"2":{"748":1}}],["stencilfuncmask",{"2":{"748":1}}],["stencilfunc",{"2":{"748":2}}],["stencilref",{"2":{"748":1}}],["stencilwritemask",{"2":{"748":1}}],["stencilwrite",{"2":{"748":1}}],["stereo",{"2":{"734":1}}],["stereocamera",{"2":{"734":1}}],["steptimeoutms",{"2":{"856":1}}],["step",{"2":{"856":3,"859":2}}],["stepcount",{"2":{"856":2}}],["step3",{"2":{"494":1}}],["step2",{"2":{"494":1}}],["step1",{"2":{"494":1}}],["steps",{"2":{"451":1,"792":1,"806":1,"856":1,"859":1}}],["stop>",{"2":{"887":1}}],["stopcondition",{"2":{"867":1}}],["stopwhen",{"2":{"851":1,"859":2,"867":1}}],["stopped",{"2":{"767":2}}],["stopallaction",{"2":{"743":1}}],["stop",{"2":{"692":1,"743":1,"761":1,"767":2,"776":1,"777":1,"856":1,"859":1,"866":1,"881":1,"888":1}}],["stopsequences",{"2":{"866":1}}],["stops",{"2":{"482":1}}],["storagetexture",{"2":{"734":1}}],["storage",{"2":{"274":1,"280":1}}],["storeextendsdata",{"2":{"661":1}}],["storetype",{"2":{"661":1,"663":1}}],["storenode",{"2":{"650":1}}],["store",{"0":{"653":1,"663":1},"2":{"94":1,"97":1,"104":3,"274":3,"289":3,"290":1,"341":1,"645":1,"646":2,"647":9,"649":5,"650":15,"652":4,"653":6,"654":3,"656":2,"658":1,"661":4,"663":9}}],["stylus",{"2":{"921":1}}],["styling",{"0":{"340":1}}],["style>",{"2":{"924":1}}],["styledbutton>",{"2":{"922":2}}],["styledbutton>默认按钮",{"2":{"922":1}}],["styledbutton",{"2":{"922":2}}],["styled",{"2":{"922":4,"928":2}}],["styles",{"2":{"274":2,"313":1,"923":4,"934":1}}],["style",{"2":{"65":1,"338":1,"451":1,"570":1,"572":1,"575":1,"581":1,"647":1,"706":1,"708":1,"715":1,"922":1,"924":4,"928":3,"931":1}}],["studentcontroller",{"2":{"190":1,"191":1}}],["studentrepository",{"2":{"190":1}}],["studentservice",{"2":{"190":1,"191":1}}],["student",{"2":{"190":1}}],["starconfig>",{"2":{"693":1}}],["star",{"2":{"677":1,"679":1,"693":1}}],["startup|clear|compact",{"2":{"895":1}}],["startup|clear",{"2":{"886":1}}],["startnetworkcapture",{"2":{"806":1}}],["start",{"2":{"290":1,"666":1,"686":2,"692":1,"695":1,"697":1,"752":1,"880":1,"881":2,"883":2,"886":2,"888":1}}],["startswith",{"2":{"166":1}}],["started",{"2":{"65":1}}],["staging",{"2":{"581":1,"583":1,"594":1}}],["stagehandler",{"2":{"709":1,"720":3}}],["stageconfig",{"2":{"692":1}}],["stages",{"2":{"684":1,"705":2}}],["staged",{"2":{"581":3}}],["stage",{"0":{"324":1,"684":1},"2":{"464":3,"672":1,"675":2,"676":2,"677":1,"679":2,"680":5,"684":4,"692":2,"693":1,"696":3,"704":1,"708":2,"715":1,"741":3}}],["standardsessionstartoutput",{"2":{"895":2}}],["standardizeprompt",{"2":{"853":1,"856":1}}],["standard",{"2":{"482":1}}],["standalone",{"2":{"94":1,"777":1}}],["stackblitz",{"2":{"561":1}}],["stack=",{"2":{"554":2,"902":2}}],["stack",{"0":{"458":1,"463":1,"464":1,"540":1,"558":2},"1":{"459":1,"460":1,"461":1,"462":1,"541":1,"542":1,"543":1},"2":{"256":1,"457":2,"458":2,"459":3,"463":2,"464":1,"465":1,"466":1,"467":1,"477":1,"540":1,"553":4,"554":1,"558":2,"677":1,"901":1,"902":2,"903":4,"904":1,"905":1}}],["stable",{"2":{"135":1,"145":1,"523":1,"799":1,"806":2}}],["staletime",{"2":{"104":1,"106":1,"110":1}}],["stale",{"2":{"47":3,"90":1,"97":3,"110":1,"342":1}}],["statistics",{"2":{"705":1}}],["static",{"2":{"42":1,"46":1,"52":1,"75":2,"194":1,"261":1,"281":1,"692":1}}],["stats",{"2":{"705":1}}],["statuscontrol",{"2":{"656":1}}],["statuscode",{"2":{"231":2}}],["statusscopedprops",{"2":{"661":1}}],["statusscoped",{"2":{"646":1}}],["status`",{"2":{"149":1,"153":1}}],["status",{"2":{"99":2,"104":1,"149":3,"152":5,"153":4,"169":3,"178":1,"229":2,"234":2,"260":2,"280":1,"281":8,"318":5,"801":2,"807":2,"820":3,"866":1,"895":1}}],["states",{"2":{"706":1}}],["state",{"0":{"5":1,"6":1},"2":{"2":1,"3":1,"5":8,"6":5,"11":1,"95":2,"256":1,"263":1,"289":7,"641":1,"642":1,"645":1,"653":1,"656":1,"739":1}}],["strokeenabled",{"2":{"692":1}}],["strokehitenabled",{"2":{"692":1}}],["strokescaleenabled",{"2":{"692":1}}],["strokewidth",{"2":{"692":1,"696":1}}],["stroke",{"2":{"686":1,"692":1,"696":1}}],["str",{"2":{"194":3,"262":2}}],["streamui",{"2":{"848":1}}],["streamtextresult",{"2":{"867":1}}],["streamtext",{"0":{"856":1,"864":1},"2":{"844":1,"847":2,"849":1,"851":1,"856":1,"858":1,"859":1,"864":2,"867":1}}],["streamtaskpost",{"2":{"179":1}}],["streamtask",{"2":{"178":1}}],["stream`",{"2":{"175":1}}],["streamended",{"2":{"173":3,"175":2}}],["stream",{"0":{"488":1},"2":{"117":1,"121":1,"159":1,"160":1,"161":1,"164":1,"166":3,"168":2,"169":1,"172":2,"173":1,"175":3,"177":1,"178":2,"179":2,"487":1,"488":1,"815":1,"820":1,"832":1,"839":3,"840":2,"848":4,"850":1,"858":1}}],["streamable",{"0":{"116":1},"1":{"117":1,"118":1,"119":1},"2":{"116":1,"143":1}}],["streaming",{"0":{"85":1,"86":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1},"2":{"52":1,"85":1,"86":2,"87":1,"92":1,"158":1,"488":1,"543":2,"866":1}}],["strategy",{"2":{"84":1,"451":1,"797":3,"800":2,"806":3,"886":1}}],["strapi",{"2":{"21":1}}],["stripinternal",{"2":{"203":1}}],["stripe",{"2":{"20":1,"30":1,"132":1}}],["strictequality",{"2":{"203":1}}],["strictcallapply",{"2":{"203":1}}],["strictpropertyinitialization",{"2":{"203":1,"204":1}}],["strictfunctiontypes",{"2":{"203":1}}],["strictnullchecks",{"2":{"203":1,"204":1}}],["strict",{"2":{"203":3,"204":3,"212":1,"322":1,"823":1}}],["stringtonumber",{"2":{"262":1}}],["strings",{"2":{"261":1}}],["stringcontainer",{"2":{"261":3}}],["stringresult",{"2":{"258":1}}],["stringkeys",{"2":{"234":1}}],["stringutils",{"2":{"194":1}}],["string>",{"2":{"149":1,"153":1,"184":1,"234":1,"247":1,"258":1,"261":1,"262":1,"263":1,"661":1,"662":2,"663":1,"806":1,"832":1,"839":2,"866":1}}],["stringify",{"2":{"108":1,"166":2,"169":1,"178":2,"179":1,"232":1,"819":1}}],["string",{"2":{"26":1,"27":1,"28":6,"99":2,"100":1,"107":1,"108":2,"110":1,"149":2,"152":3,"153":2,"175":3,"178":4,"179":5,"184":7,"185":9,"194":1,"200":1,"203":1,"227":4,"229":4,"231":6,"233":4,"234":5,"236":2,"237":8,"238":14,"239":2,"240":3,"242":2,"244":6,"247":5,"248":1,"249":1,"255":2,"258":1,"259":2,"260":2,"261":2,"262":5,"263":1,"265":1,"266":3,"267":5,"269":4,"274":1,"275":1,"280":1,"281":6,"288":2,"289":7,"318":3,"324":1,"482":8,"486":1,"489":3,"661":8,"662":12,"663":14,"692":12,"693":2,"719":15,"720":6,"734":1,"748":10,"776":20,"777":24,"800":1,"806":50,"807":11,"832":1,"833":3,"839":5,"840":1,"866":17,"867":1,"895":26,"896":2}}],["segmentpos",{"2":{"776":1}}],["segmentstart",{"2":{"777":1}}],["segments",{"2":{"762":1,"776":1}}],["seedrandom",{"2":{"762":1,"769":1}}],["seeds",{"2":{"275":1}}],["seek",{"2":{"692":1}}],["sepia",{"2":{"677":1,"679":1}}],["secrets",{"2":{"594":1,"595":1}}],["security",{"2":{"570":2,"575":1,"578":1,"583":1,"586":3,"587":1,"588":1,"590":1,"591":1,"592":2,"734":1,"823":1}}],["secondary",{"2":{"249":2,"927":1}}],["secondaryvariant",{"2":{"249":2}}],["searchextracompositions",{"2":{"776":1}}],["searchanimations",{"2":{"767":1,"777":1}}],["search",{"2":{"511":1,"518":2,"521":1,"546":1,"792":2,"857":1,"868":3}}],["searchbar",{"2":{"274":1}}],["seaborn",{"2":{"472":1}}],["semantic",{"2":{"929":1}}],["semver",{"2":{"331":2}}],["semibold",{"2":{"27":1,"28":1}}],["sellkonva",{"2":{"677":1}}],["self",{"2":{"306":1}}],["selecttab",{"2":{"806":1}}],["selector",{"2":{"692":2,"806":1}}],["selectors",{"2":{"274":1}}],["selectedapproach",{"2":{"895":1}}],["selectedproduct",{"2":{"289":1}}],["selected",{"2":{"289":3}}],["selectedmodel",{"2":{"86":2}}],["selectedmodelid=",{"2":{"86":1}}],["select",{"2":{"28":2,"107":4,"110":2,"706":1}}],["serialjobexecutor",{"2":{"858":1}}],["serializable>",{"2":{"267":1}}],["serializable",{"2":{"267":6}}],["seriestype",{"2":{"720":1}}],["seriestask2",{"2":{"712":1}}],["seriestask1",{"2":{"712":1}}],["seriesuid",{"2":{"719":2}}],["seriessymboltask",{"2":{"706":1,"708":1,"715":1}}],["seriesstyletask",{"2":{"706":1,"708":1,"715":2}}],["seriesdatacore",{"2":{"719":1}}],["seriesdata",{"2":{"706":1,"709":3,"712":1,"713":2,"719":1}}],["seriesmodelclass",{"2":{"720":1}}],["seriesmodel|",{"2":{"711":1}}],["seriesmodel",{"2":{"704":1,"705":1,"706":1,"709":4,"712":2,"720":2}}],["series",{"2":{"702":1,"705":2,"706":3,"712":1,"724":1}}],["serve",{"2":{"697":1}}],["servers",{"2":{"807":1}}],["server",{"0":{"69":1,"72":1,"73":1,"120":1},"1":{"73":1,"74":1,"121":1,"122":1,"123":1,"124":1},"2":{"38":1,"57":8,"71":1,"74":5,"75":1,"79":1,"80":1,"92":2,"94":2,"95":1,"119":1,"138":1,"145":1,"158":1,"164":2,"344":2,"548":2,"734":1,"801":2,"813":1,"839":3,"848":1,"849":1,"881":5,"888":3,"928":1}}],["serverless",{"2":{"20":1,"31":1,"523":2,"555":1}}],["servicestore",{"2":{"646":1,"647":1,"650":3,"653":2,"663":1}}],["services",{"2":{"203":4,"274":1,"275":1,"280":4,"281":1,"288":3,"290":2}}],["service",{"2":{"191":1,"275":2,"280":5,"327":1,"330":2,"336":2,"647":1,"860":1}}],["sessionstartoutput",{"2":{"895":1}}],["sessionstart时强制注入",{"2":{"881":1}}],["sessionstart",{"2":{"876":1,"877":1,"879":1,"880":1,"881":3,"883":2,"884":3,"886":1,"887":1,"892":1,"895":2}}],["sessionstorage",{"2":{"274":1}}],["sessionid",{"2":{"486":3,"489":3}}],["session",{"2":{"129":1,"486":2,"653":1,"880":1,"881":1,"883":2,"884":3,"886":2}}],["sense=problem",{"2":{"367":2}}],["sense=empathy×critical",{"2":{"366":2}}],["sense=​complexity​​user",{"2":{"365":1}}],["sense=user",{"2":{"365":1}}],["sense",{"0":{"364":1,"530":1,"533":1,"541":1,"600":1},"1":{"365":1,"366":1,"367":1,"531":1,"532":1,"533":1},"2":{"363":3,"364":1,"365":3,"366":2,"367":6,"368":1,"369":1,"370":1,"371":1,"376":2,"389":1,"400":1,"492":1,"509":1,"525":1,"533":1,"540":1,"552":1,"558":1,"901":2,"902":1,"903":1}}],["sendmessage",{"2":{"858":1,"866":1}}],["sendorderconfirmation",{"2":{"281":1}}],["sendgrid",{"2":{"20":1}}],["sentry",{"2":{"455":3}}],["sent",{"0":{"120":1},"1":{"121":1,"122":1,"123":1,"124":1},"2":{"145":1,"158":1,"813":1,"839":3}}],["seo",{"0":{"82":1},"2":{"41":1,"57":2,"58":3,"59":1,"66":1,"67":1,"71":1,"75":2,"81":1,"82":2,"92":1,"94":1,"287":1,"344":3}}],["setfileinput",{"2":{"806":1}}],["setidprefix",{"2":{"777":2}}],["setinterval",{"2":{"164":1}}],["setlocationhref",{"2":{"777":1}}],["setlayers",{"2":{"692":1}}],["setquality",{"2":{"777":1}}],["setquerydata",{"2":{"108":2}}],["sethierarchy",{"2":{"776":1}}],["setdata",{"2":{"776":1}}],["setdirection",{"2":{"767":1,"777":1}}],["setdirty",{"2":{"712":1}}],["setclearcolor",{"2":{"748":1}}],["setcomments",{"2":{"28":3}}],["setrendertarget",{"2":{"748":1}}],["setvolume",{"2":{"767":1,"777":1}}],["setvalue",{"2":{"743":1}}],["setvalues",{"2":{"663":1}}],["setvisual",{"2":{"713":1,"719":1}}],["setecdata",{"2":{"706":1}}],["setemail",{"2":{"185":1}}],["setoptionoption",{"2":{"719":1}}],["setoption",{"2":{"704":1,"705":1,"706":2,"708":4,"712":1,"717":1,"719":1,"724":1}}],["setactivepage",{"2":{"806":1}}],["setasanimated",{"2":{"776":1}}],["setasparent",{"2":{"776":1}}],["setanimationloop",{"2":{"748":1,"749":1,"753":1}}],["setattr",{"2":{"682":1}}],["setaddress",{"2":{"184":1}}],["setsubframerendering",{"2":{"777":1}}],["setspeed",{"2":{"761":1,"767":1,"777":1}}],["setsize",{"2":{"692":1,"748":1,"753":1}}],["setselectedproduct",{"2":{"289":2}}],["setstate",{"2":{"7":1,"97":1,"104":1}}],["set",{"2":{"289":2,"685":1,"739":1,"748":1,"753":1,"860":1}}],["setprojectinterface",{"2":{"776":1}}],["setproducts",{"2":{"288":2}}],["setparams",{"2":{"768":1,"776":1}}],["setpointerspositions",{"2":{"692":1}}],["setposition",{"2":{"686":1}}],["setphone",{"2":{"185":1}}],["setup>",{"2":{"924":1}}],["setupglobaldata",{"2":{"768":1,"776":1}}],["setup",{"2":{"274":1,"583":1,"733":1,"736":1,"741":4,"746":1,"748":1,"881":1}}],["setuser",{"2":{"28":2}}],["setname",{"2":{"185":1}}],["setnewcomment",{"2":{"28":3}}],["settlems",{"2":{"806":1}}],["setter生成",{"2":{"679":1}}],["setter",{"2":{"184":1,"185":1,"682":3,"685":5}}],["settime",{"2":{"686":1}}],["settimeout",{"2":{"149":3,"152":1,"153":1,"155":1,"330":1}}],["settings",{"0":{"593":1,"596":1},"1":{"594":1,"595":1,"596":1},"2":{"77":2,"570":4,"593":1,"596":3,"597":1}}],["sseevent",{"2":{"178":2}}],["sse",{"0":{"120":1,"134":1,"161":1,"162":1,"179":1,"818":1},"1":{"121":1,"122":1,"123":1,"124":1,"163":1,"164":1},"2":{"31":1,"114":1,"118":3,"120":1,"121":1,"122":1,"123":1,"124":3,"125":1,"127":1,"130":1,"134":1,"135":1,"136":1,"138":1,"142":1,"143":4,"144":1,"145":2,"156":1,"158":1,"159":4,"160":12,"161":1,"162":2,"163":10,"164":4,"165":1,"166":5,"167":2,"168":4,"169":3,"170":1,"171":1,"172":1,"173":1,"175":5,"176":1,"177":3,"178":15,"179":2,"180":5,"813":1,"815":1,"818":1,"819":1,"820":1,"822":4,"823":2,"824":1,"833":1,"839":2}}],["ssg",{"0":{"18":1,"25":1,"27":1,"42":1,"60":1,"61":1},"1":{"43":1,"44":1,"45":1,"61":1,"62":2,"63":2,"64":2,"65":1,"66":1},"2":{"18":2,"23":1,"25":1,"27":1,"32":1,"33":1,"42":1,"45":1,"46":2,"47":1,"50":1,"55":1,"57":5,"58":2,"59":1,"60":2,"61":1,"63":1,"65":3,"66":11,"67":5,"71":1,"75":4,"92":1,"93":1,"344":5}}],["ssot",{"2":{"10":1}}],["ssr",{"0":{"38":1,"68":1},"1":{"39":1,"40":1,"41":1,"69":1,"70":1,"71":1},"2":{"3":1,"18":2,"33":1,"38":1,"41":1,"46":2,"50":1,"52":2,"55":1,"57":4,"58":3,"59":7,"65":1,"66":3,"67":4,"68":1,"71":3,"75":3,"92":1,"93":1,"344":5,"700":1,"701":1,"705":1,"706":2,"719":2,"922":1,"928":1}}],["拆解目标",{"2":{"963":1}}],["拆解地理环境如何冷酷而偶然地重塑全球版图",{"2":{"604":1}}],["拆解",{"2":{"494":1}}],["拆解问题",{"2":{"494":1}}],["拆解产品",{"2":{"400":1}}],["拆解为",{"2":{"408":1}}],["拆解为一组",{"2":{"367":1}}],["拆解为独立",{"2":{"1":1}}],["拆分",{"2":{"577":1}}],["拆分到",{"2":{"577":1}}],["拆分的大型指令文件",{"2":{"570":1}}],["拆分时机",{"2":{"329":1}}],["拆分为若干自治单元",{"2":{"2":1}}],["对做饭这件小事也起到了促进作用",{"2":{"963":1}}],["对笔者来说取得了一些比较大的进步",{"2":{"963":1}}],["对习惯的养成起到了一定的正向作用",{"2":{"961":1}}],["对自然认知不断细化",{"2":{"958":1}}],["对打工人来讲其实就是一部分时间在办公室工作",{"2":{"955":1}}],["对这个话题或阅读工具感兴趣的朋友可以看下凯文凯利在几年前写的",{"2":{"948":1}}],["对这部分答案感兴趣的读者",{"2":{"907":1}}],["对亚健康状态及疾病坚持预防为主",{"2":{"941":1}}],["对新手的综合要求较高",{"2":{"927":1}}],["对接具体的",{"2":{"847":1}}],["对接所有",{"2":{"842":1}}],["对接企业自研系统",{"2":{"439":1}}],["对接企业的",{"2":{"439":1}}],["对每条消息调用的函数",{"2":{"840":1}}],["对每个圆圈进一步分解",{"2":{"947":1}}],["对每个新",{"2":{"840":1}}],["对每个新字节块调用的函数",{"2":{"840":1}}],["对每个功能假设都要问",{"2":{"366":1}}],["对每个",{"2":{"104":1,"686":1,"840":2}}],["对形状路径进行动态变形",{"2":{"765":1,"771":1}}],["对齐",{"0":{"777":1},"2":{"677":1}}],["对不确定性",{"2":{"617":1}}],["对所有项目生效",{"2":{"571":1}}],["对标",{"2":{"565":1}}],["对标准化要求高的项目",{"2":{"287":1}}],["对工程团队的真正馈赠",{"2":{"526":1}}],["对质量要求高的核心场景",{"2":{"523":1}}],["对仗工稳",{"2":{"507":1}}],["对创作出来的诗歌进行解读",{"2":{"506":1}}],["对指令的遵循度",{"2":{"506":1}}],["对收集到的信息进行深度分析与归纳",{"2":{"468":1}}],["对别人有效的",{"2":{"462":1}}],["对照用户需求和客观约束",{"2":{"426":1}}],["对成本敏感的轻量级场景",{"2":{"414":1}}],["对广告商的正外部性",{"2":{"399":1}}],["对用户的负外部性",{"2":{"399":1}}],["对特定群体提供优惠",{"2":{"397":1}}],["对使用习惯",{"2":{"391":1}}],["对抗泛滥",{"0":{"620":1}}],["对抗边际效用递减",{"2":{"398":1}}],["对抗边际效用递减增加用户活跃度",{"2":{"398":1}}],["对抗",{"0":{"378":1,"530":1},"1":{"531":1,"532":1,"533":1}}],["对过度设计的迷恋",{"2":{"365":1}}],["对投入产出比产生动摇",{"2":{"617":1}}],["对投入产出比",{"2":{"365":1}}],["对文章核心观点的梳理与个人思考",{"2":{"357":1}}],["对比",{"2":{"706":1}}],["对比度调整",{"2":{"677":1}}],["对比一下三种扩展机制",{"2":{"590":1}}],["对比一下答案质量与来源引用",{"2":{"518":1}}],["对比效果再决定是否升级",{"2":{"523":1}}],["对比多家模型的首选",{"2":{"523":1}}],["对比数据",{"2":{"472":1}}],["对比维度",{"2":{"344":1}}],["对比缓存",{"2":{"97":1}}],["对模块化的增强",{"2":{"326":1}}],["对模块化编程的增强",{"2":{"272":1}}],["对偶性",{"0":{"242":1},"2":{"242":1}}],["对调用者无意义",{"2":{"196":1}}],["对外",{"0":{"693":1,"749":1,"777":1}}],["对外提供查询接口",{"2":{"191":1}}],["对外暴露统一的数据结构",{"2":{"99":1}}],["对话框",{"2":{"564":1}}],["对话助手",{"2":{"512":1}}],["对话风格开放",{"2":{"511":1}}],["对话循环",{"0":{"489":1},"2":{"490":1}}],["对话玩具",{"2":{"476":1}}],["对话中的迭代优化",{"2":{"435":1}}],["对话工具",{"2":{"410":1}}],["对话",{"0":{"420":1},"2":{"180":1,"843":1}}],["对话是致命的",{"2":{"119":1}}],["对象设计更灵活",{"2":{"822":1}}],["对象组装",{"2":{"761":1,"762":1}}],["对象池系统核心",{"2":{"762":1}}],["对象池系统",{"2":{"762":1}}],["对象池",{"2":{"761":1}}],["对象池等",{"2":{"760":1}}],["对象池优化",{"2":{"757":1}}],["对象池模式",{"2":{"739":1,"761":1}}],["对象的最后事件",{"2":{"839":1}}],["对象的基类",{"2":{"740":1}}],["对象的结构",{"2":{"175":1}}],["对象状态缓存",{"2":{"739":1}}],["对象基类",{"2":{"734":1}}],["对象层级管理",{"2":{"733":1}}],["对象模型提供",{"2":{"769":1}}],["对象模型接口",{"2":{"769":1}}],["对象模型",{"2":{"732":1}}],["对象模型和事件系统",{"2":{"702":1}}],["对象树",{"2":{"709":1}}],["对象暴露成员",{"2":{"304":1}}],["对象类型",{"2":{"268":1}}],["对象数组",{"2":{"210":1}}],["对象包含",{"2":{"169":1}}],["对象自带",{"2":{"166":1}}],["对象",{"2":{"160":1,"178":2,"679":1,"706":2,"713":1,"730":1,"734":2,"761":1,"770":2,"782":1,"833":1,"839":1}}],["对象上",{"2":{"99":1}}],["对实时性要求不高",{"2":{"156":1}}],["对服务器整体吞吐压力最小",{"2":{"149":1}}],["对服务器极不友好",{"2":{"145":1}}],["对服务器的资源调度能力提出严峻考验",{"2":{"129":1}}],["对服务器并发处理能力提出了严峻挑战",{"2":{"115":1}}],["对现代轻量级构建极为友好",{"2":{"110":1}}],["对后端",{"2":{"103":1}}],["对独立开发者和敏捷团队快速交付",{"2":{"83":1}}],["对应一个",{"2":{"737":1}}],["对应规则才会激活",{"2":{"576":1}}],["对应示例项目为",{"2":{"477":1}}],["对应的设计是",{"2":{"200":1}}],["对应的",{"2":{"163":1}}],["对应",{"2":{"163":3,"178":1,"650":1}}],["对应路由",{"2":{"77":1}}],["对应用也适用",{"2":{"33":1}}],["对于想要产出一些创造力或超预期效果的人来讲",{"2":{"906":1}}],["对于仅需服务器推送的场景",{"2":{"822":1}}],["对于开发者和内容创作者而言",{"2":{"618":1}}],["对于开发者而言",{"2":{"32":1,"410":1,"420":1,"478":1}}],["对于好书",{"2":{"608":1}}],["对于绝大多数有着丰富",{"2":{"552":1}}],["对于不符合诗歌创作要求的问题",{"2":{"504":1}}],["对于重复性工作或涉及深厚专业知识的任务",{"2":{"435":1}}],["对于一个",{"2":{"421":1}}],["对于没有养成良好习惯的人来说",{"2":{"906":1}}],["对于没有",{"2":{"411":1}}],["对于软件系统开发人员而言",{"2":{"403":1}}],["对于致力于通过技术提效的开发者而言",{"2":{"377":1}}],["对于技术背景的开发者",{"2":{"365":1}}],["对于知识工作者而言",{"2":{"356":1}}],["对于每天需要处理海量信息",{"2":{"348":1}}],["对于专注于产品迭代与业务增长的",{"2":{"342":1}}],["对于需要跨项目复用的公共模块",{"2":{"331":1}}],["对于大型企业级应用",{"2":{"292":1}}],["对于中小型项目",{"2":{"292":1}}],["对于简单通用的类型",{"2":{"263":1}}],["对于交叉类型",{"2":{"242":1}}],["对于联合类型",{"2":{"242":1}}],["对于同名属性",{"2":{"237":1}}],["对于更复杂的项目结构",{"2":{"216":1}}],["对于高频",{"2":{"127":1}}],["对于实时性要求高",{"2":{"115":1}}],["对于",{"2":{"95":1,"143":1,"171":2,"202":1,"237":2,"354":1,"537":1,"883":1}}],["对于第三方回调",{"2":{"83":1}}],["对于任何面向用户",{"2":{"37":1}}],["对性能要求高",{"2":{"31":1}}],["对项目上下文的理解",{"2":{"9":1}}],["对内通过",{"2":{"2":1}}],["对",{"2":{"2":1,"97":1,"137":1,"318":1,"322":1,"376":1,"407":1,"507":3,"539":1,"903":1,"930":1,"934":2}}],["cc",{"2":{"881":3}}],["ccdik",{"2":{"734":1}}],["cva",{"0":{"927":1},"2":{"927":9,"928":5,"930":2,"934":4}}],["cvtransformeffect",{"2":{"762":1}}],["cvtextelement",{"2":{"761":1,"762":1}}],["cvmaskelement",{"2":{"762":1}}],["cvcontextdata",{"2":{"762":1,"768":1}}],["cvcompbaseelement",{"2":{"762":1}}],["cvcompelement",{"2":{"761":1,"762":1,"768":1}}],["cvbaseelement",{"2":{"762":1}}],["cveffects",{"2":{"761":1,"762":1,"764":1}}],["cvshapedata",{"2":{"762":1}}],["cvshapeelement",{"2":{"761":1,"762":1}}],["cvsolidelement",{"2":{"761":1,"762":1}}],["cvimageelement",{"2":{"761":1,"762":1}}],["center",{"2":{"925":1,"926":1,"927":2}}],["cellheight",{"2":{"714":1}}],["cellwidth",{"2":{"714":1}}],["ceo",{"2":{"375":1,"957":1}}],["cylindrical",{"2":{"734":1}}],["cylindergeometry",{"2":{"734":1}}],["cy",{"2":{"714":2}}],["cx",{"2":{"714":2}}],["cxd",{"2":{"647":1}}],["cta",{"2":{"925":1}}],["ctx",{"2":{"661":1,"662":1,"663":3,"692":1}}],["ctrl",{"2":{"169":2,"171":2,"173":1,"174":3,"175":5,"819":2}}],["cmd",{"2":{"800":2,"807":1,"881":1,"886":1,"898":1}}],["cmd+k",{"2":{"564":2,"565":1}}],["cms",{"0":{"21":1},"2":{"17":1,"21":1,"48":1}}],["cn",{"2":{"456":2,"706":1,"762":1,"792":1,"927":2}}],["cny",{"2":{"281":1}}],["cpu",{"2":{"344":2}}],["cb",{"2":{"289":2,"719":1}}],["cjs+esm",{"2":{"823":1}}],["cjsdefault",{"2":{"333":1}}],["cjs",{"2":{"272":1,"298":1,"333":10,"335":1,"337":1,"702":1,"734":1,"762":1,"778":7,"792":2,"828":3,"881":1,"888":1}}],["c=",{"2":{"243":2}}],["cube",{"2":{"737":1,"753":4}}],["cubetexture",{"2":{"734":1}}],["cuberendertarget",{"2":{"734":1}}],["cubemap",{"2":{"734":2}}],["cubecamera",{"2":{"734":1}}],["cubic",{"2":{"734":1,"743":1}}],["cullface",{"2":{"734":1}}],["curves",{"2":{"734":2}}],["curvepath",{"2":{"734":1}}],["curve",{"2":{"734":1}}],["curl",{"2":{"594":1}}],["cursorsessionstartoutput",{"2":{"895":2}}],["cursor",{"2":{"542":1,"553":1,"557":1,"559":1,"564":4,"565":3,"784":1,"785":1,"879":1,"880":2,"881":4,"884":1,"886":4,"895":2,"898":1,"921":1,"922":1,"924":1,"927":1}}],["currentrawframe",{"2":{"776":1}}],["currentframe",{"2":{"776":1}}],["currenttarget",{"2":{"692":1}}],["current",{"2":{"289":1}}],["currentdelay",{"2":{"149":3}}],["currencymismatcherror",{"2":{"281":1}}],["currency",{"2":{"281":11}}],["cup",{"2":{"227":1}}],["customextinstaller",{"2":{"711":1}}],["customerid",{"2":{"281":9}}],["customview",{"2":{"706":1}}],["customseriesrenderitem",{"2":{"720":1}}],["customseries",{"2":{"706":1}}],["custom",{"2":{"1":1,"2":1,"10":1,"99":1,"240":1,"481":6,"705":1,"706":1,"715":1,"929":1}}],["cause",{"2":{"881":1}}],["camerahelper",{"2":{"734":1}}],["cameras",{"2":{"734":1}}],["camera",{"2":{"733":3,"734":2,"736":1,"737":2,"740":1,"745":1,"748":4,"749":2,"753":3}}],["camelcase",{"2":{"330":3}}],["cairo",{"2":{"673":1}}],["casters|",{"2":{"739":1}}],["cascade",{"2":{"564":1,"565":1}}],["cascading",{"2":{"338":1}}],["case",{"0":{"505":1,"507":1,"508":1,"640":1,"817":1,"818":1,"819":1,"820":1},"1":{"818":1,"819":1,"820":1},"2":{"168":3,"172":4,"175":4,"203":1,"230":3,"232":3,"289":2,"330":1,"442":1,"450":1,"550":1,"640":1,"654":9,"768":1,"895":1}}],["candlestickview",{"2":{"706":1}}],["candlestickseries",{"2":{"706":1}}],["candlestick",{"2":{"706":1}}],["can",{"2":{"683":3,"692":4}}],["canvas2dcontext",{"2":{"768":1}}],["canvaselements",{"2":{"762":1,"764":1}}],["canvastexture",{"2":{"734":1}}],["canvastarget",{"2":{"734":1}}],["canvasrendererconfig",{"2":{"777":1}}],["canvasrendererworkeroverride",{"2":{"762":1}}],["canvasrendererbase",{"2":{"762":1}}],["canvasrenderer",{"2":{"725":2,"761":1,"762":1,"764":1,"768":3}}],["canvasrenderingcontext2d",{"2":{"677":1,"680":2,"777":1}}],["canvasfillrule",{"2":{"692":1}}],["canvasgradient",{"2":{"692":2}}],["canvas>",{"2":{"684":2}}],["canvas绘制",{"2":{"679":1}}],["canvas双缓冲",{"2":{"675":1}}],["canvas",{"2":{"670":6,"671":1,"672":2,"673":3,"677":6,"679":1,"682":1,"683":1,"684":2,"692":1,"699":3,"701":2,"704":1,"705":1,"706":2,"708":1,"719":2,"734":4,"745":1,"748":1,"755":2,"756":1,"757":1,"760":1,"761":2,"762":21,"764":4,"765":1,"768":1,"776":1,"778":5,"782":1}}],["cancancel",{"2":{"281":1}}],["cancelbubble",{"2":{"692":1}}],["cancel",{"2":{"280":1}}],["cancelqueries",{"2":{"108":1}}],["cannot",{"2":{"281":1}}],["calendar",{"2":{"647":1,"706":2,"714":2}}],["calls",{"2":{"748":1}}],["callexpression",{"2":{"655":1}}],["call",{"2":{"512":1,"522":2,"523":1,"685":1,"859":2}}],["calling",{"2":{"411":1,"521":1}}],["callback",{"2":{"289":6,"302":4,"315":4,"740":1,"748":4,"749":1}}],["callbacks",{"2":{"173":1,"175":7}}],["calculator",{"2":{"324":1}}],["calculatesubtotal",{"2":{"281":1}}],["calculatetotal",{"2":{"281":1}}],["calculation",{"2":{"280":1}}],["cartesian2d",{"2":{"714":2}}],["cartesian",{"2":{"706":1,"714":1}}],["cart",{"2":{"289":5,"290":1}}],["cartitem",{"2":{"281":1}}],["cartslice",{"2":{"274":1}}],["card",{"2":{"79":1,"274":1,"340":1,"930":1,"933":1}}],["catrim",{"2":{"762":2}}],["catmullrom",{"2":{"734":1}}],["cat",{"2":{"231":4}}],["catch",{"2":{"149":1,"153":1,"246":2,"313":1,"330":1}}],["capabilityrouting",{"2":{"792":1}}],["capabilities",{"2":{"734":1}}],["cap",{"2":{"227":1}}],["caching",{"2":{"97":1,"881":2}}],["cachecanvas",{"2":{"682":1}}],["cached`",{"2":{"581":1}}],["cachetime",{"2":{"104":1}}],["cache",{"0":{"85":1,"88":2,"89":1},"1":{"86":1,"87":1,"88":1,"89":1,"90":1},"2":{"81":3,"85":1,"88":2,"89":3,"94":1,"97":1,"104":3,"112":1,"161":2,"164":2,"177":2,"203":1,"243":5,"334":3,"342":1,"551":1,"621":1,"652":1,"682":1,"734":1,"790":1,"792":1,"799":1}}],["cra",{"2":{"923":1}}],["crossfadefrom",{"2":{"743":1}}],["criteria",{"2":{"451":1}}],["critical",{"2":{"366":2}}],["crystallize",{"0":{"375":1}}],["creation",{"2":{"881":1}}],["creator",{"2":{"454":1,"464":1,"720":2}}],["createuimessagestream",{"2":{"858":1}}],["createopenai",{"2":{"851":1,"857":2}}],["createorder",{"2":{"281":2,"327":1}}],["createproviderdefinedtoolfactory",{"2":{"868":2}}],["createproperty",{"2":{"770":1}}],["createpipeline",{"2":{"719":1,"733":1}}],["createitem",{"2":{"768":2,"776":1}}],["createinterface",{"2":{"489":1}}],["createns",{"2":{"762":1}}],["createcomp",{"2":{"768":4}}],["createcomputepipeline",{"2":{"748":1}}],["createclippathfromcoordsys",{"2":{"706":1}}],["createclientcomponentclient",{"2":{"28":2}}],["createclient",{"2":{"26":2}}],["createrenderpipeline",{"2":{"748":1}}],["createroot",{"2":{"35":1}}],["createtodo",{"2":{"887":1}}],["createtag",{"2":{"762":1}}],["createtask",{"2":{"706":1}}],["createtexture",{"2":{"733":1,"748":1}}],["createextensionapi",{"2":{"708":1}}],["createevent",{"2":{"684":1}}],["createelement",{"2":{"203":2}}],["createbuffer",{"2":{"733":1,"748":1}}],["createb",{"2":{"315":3}}],["createa",{"2":{"315":3}}],["createapp",{"2":{"35":1}}],["createlogger",{"2":{"300":3}}],["createsource",{"2":{"706":1}}],["createstore",{"2":{"289":2}}],["createserver",{"2":{"164":1,"801":1}}],["createdimensions",{"2":{"706":1}}],["createdat",{"2":{"240":1,"248":2,"269":2,"281":1}}],["created",{"2":{"28":5,"280":1,"281":1}}],["create",{"2":{"25":1,"275":1,"280":3,"281":1,"649":1,"676":1,"714":1,"830":1,"832":2,"923":1}}],["credentials",{"2":{"327":2,"594":1}}],["crm",{"2":{"132":1,"411":1,"439":1}}],["crudstore",{"2":{"646":1,"647":1,"650":3,"653":1,"661":1,"663":1}}],["crud2",{"2":{"646":1,"647":2,"656":2}}],["crud",{"2":{"79":1,"92":1,"327":1,"344":1,"541":1,"553":1,"639":1,"640":1,"645":1,"646":1,"647":1,"650":1,"652":1,"661":1,"706":1,"713":1}}],["c",{"2":{"59":1,"112":1,"237":1,"243":7,"244":5,"314":3,"344":1,"692":1,"957":1}}],["circleconfig>",{"2":{"693":1}}],["circlearea",{"2":{"310":2}}],["circle",{"2":{"230":5,"232":1,"677":1,"679":1,"680":1,"693":1}}],["ci",{"2":{"59":1,"123":1,"132":1,"142":1,"143":1,"343":2,"345":1,"451":1,"542":1,"550":1,"555":1,"677":3,"706":1,"734":1,"762":1,"792":1,"823":1,"881":1}}],["csv",{"2":{"787":1,"792":1,"806":1}}],["csm",{"2":{"734":1}}],["csr",{"0":{"34":1},"1":{"35":1,"36":1,"37":1},"2":{"33":1,"34":1,"37":1,"38":1,"41":1,"57":3,"58":2,"59":1,"67":2,"71":2,"74":1,"75":2,"92":1}}],["cssnano",{"2":{"928":1,"932":1}}],["cssunocsswindi",{"2":{"925":1}}],["css+数字引用",{"2":{"792":1}}],["css3d",{"2":{"734":1}}],["css2d",{"2":{"734":1}}],["css2drenderer",{"2":{"733":1}}],["css",{"0":{"920":1,"921":1,"922":1,"923":1,"924":1,"925":2,"927":1,"929":1},"1":{"926":2},"2":{"14":1,"23":1,"35":1,"65":1,"274":2,"286":2,"291":2,"338":3,"340":4,"343":2,"345":1,"557":1,"561":1,"639":1,"642":2,"646":1,"647":1,"672":1,"682":2,"734":1,"799":1,"920":8,"921":8,"922":9,"923":11,"924":10,"925":15,"926":3,"927":2,"928":29,"929":1,"930":6,"931":4,"932":1,"933":7,"934":7}}],["cdp",{"2":{"786":1,"787":2,"791":1,"792":4,"799":2,"806":1}}],["cdpbridge",{"2":{"786":1,"790":1,"791":1,"792":1,"797":1,"799":2}}],["cd",{"2":{"25":1,"59":1,"94":1,"123":1,"132":1,"142":1,"143":1,"343":2,"345":1,"451":1,"542":1,"550":1,"555":1,"677":1,"695":1,"706":1,"734":1,"751":1,"762":1,"792":1}}],["cdnjs",{"2":{"780":1}}],["cdn边缘节点",{"2":{"64":1}}],["cdn",{"2":{"14":2,"15":3,"19":4,"23":1,"32":1,"42":1,"43":3,"57":4,"58":1,"63":1,"64":1,"66":1,"75":1,"92":1,"137":1,"152":1,"780":1}}],["clicommand>",{"2":{"800":1}}],["clicommand",{"2":{"797":3,"806":1}}],["click",{"2":{"682":1,"797":1,"799":1,"806":1}}],["clis",{"2":{"791":1,"792":2,"795":1,"796":2,"800":2}}],["clipintersection",{"2":{"748":1}}],["clipshadows",{"2":{"748":1}}],["clipaction",{"2":{"743":1}}],["clippingplanes",{"2":{"748":1}}],["clippingcontext",{"2":{"734":1}}],["clippinggroup",{"2":{"734":1}}],["clipheight",{"2":{"692":1}}],["clipwidth",{"2":{"692":1}}],["clipy",{"2":{"692":1}}],["clipx",{"2":{"692":1}}],["clipfuncoutput",{"2":{"692":1}}],["clipfunc",{"2":{"692":1}}],["clip",{"2":{"677":1,"680":1}}],["cli",{"2":{"559":1,"567":2,"568":3,"784":3,"785":3,"787":2,"789":1,"790":3,"791":2,"792":6,"796":2,"797":1,"800":1,"801":2,"806":2,"811":1,"881":6,"886":2,"887":2,"895":1,"898":2,"899":2}}],["client=",{"2":{"106":1}}],["client",{"0":{"70":1,"74":1},"2":{"26":3,"28":1,"34":1,"57":8,"71":1,"74":7,"75":1,"86":1,"90":2,"94":1,"119":1,"138":2,"274":1,"342":2,"706":1,"792":1}}],["clear",{"2":{"748":2}}],["clearcanvas",{"2":{"777":1}}],["clearcache",{"2":{"682":1}}],["clearcoat",{"2":{"734":1,"742":1}}],["clearbeforedraw",{"2":{"692":2}}],["clearinterval",{"2":{"164":1}}],["clean",{"2":{"216":1,"792":1}}],["clock",{"2":{"734":1}}],["clone",{"2":{"695":1,"748":1,"751":1}}],["closewindow",{"2":{"806":1}}],["closetab",{"2":{"806":1}}],["closed",{"2":{"489":1,"776":1}}],["close",{"2":{"164":1,"489":2,"662":1}}],["cloudflare",{"2":{"19":1}}],["clsx",{"2":{"927":4,"931":1,"934":2}}],["cls",{"2":{"84":1}}],["clazz",{"2":{"706":1}}],["classname",{"2":{"927":3}}],["classname=",{"2":{"27":11,"28":11,"288":3,"923":1,"925":1,"927":2}}],["classvalue",{"2":{"927":2}}],["classes",{"2":{"925":1}}],["class=",{"2":{"924":3,"928":1,"933":1}}],["classmethoddecoratorcontext",{"2":{"324":1}}],["class",{"2":{"152":1,"175":1,"178":1,"179":1,"184":1,"185":1,"194":1,"231":1,"248":3,"261":1,"267":1,"269":2,"281":7,"289":1,"302":1,"311":1,"319":1,"324":1,"330":1,"692":6,"693":25,"711":2,"820":1,"923":1,"927":2}}],["claudecodesessionstartoutput",{"2":{"895":2}}],["claude",{"0":{"478":1,"571":1,"574":1},"1":{"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"572":1,"573":1,"574":1},"2":{"2":1,"3":1,"118":1,"375":1,"403":1,"411":1,"441":3,"442":2,"456":2,"467":2,"470":4,"476":1,"477":4,"478":3,"480":1,"482":3,"483":1,"485":1,"488":1,"491":1,"510":3,"511":3,"519":1,"521":3,"523":7,"525":1,"535":1,"542":2,"545":1,"549":1,"550":1,"553":1,"557":1,"559":3,"567":8,"568":4,"569":5,"570":16,"571":10,"572":1,"573":2,"574":2,"575":5,"576":1,"577":1,"578":1,"580":2,"581":2,"583":3,"586":1,"591":1,"592":1,"593":1,"594":3,"596":1,"597":7,"636":1,"784":1,"790":1,"879":1,"880":1,"881":11,"883":2,"884":1,"886":3,"887":1,"895":1,"898":1,"899":2,"903":2}}],["coord",{"2":{"706":1}}],["coordinate",{"0":{"714":1},"2":{"705":1,"711":1,"714":1}}],["coordinatesystemcreator",{"2":{"720":1}}],["coordinatesystems",{"2":{"714":1}}],["coordinatesystemmanager",{"2":{"708":1,"714":2}}],["coordinatesystem",{"2":{"705":1,"706":2,"709":2,"714":1}}],["cookie",{"2":{"115":1,"163":1,"786":1,"790":1,"797":1,"800":1,"806":2}}],["copyframebuffertoframebuffer",{"2":{"748":1}}],["copyframebuffer",{"2":{"733":1,"739":1}}],["copy",{"2":{"654":3,"662":1,"748":1,"792":1}}],["copilot",{"2":{"542":1,"553":1,"881":2,"886":2,"887":1,"895":1}}],["co",{"2":{"553":1,"581":1}}],["cot",{"2":{"545":1}}],["coreinternals",{"2":{"677":2,"679":2}}],["core",{"2":{"451":1,"645":2,"646":2,"647":4,"649":4,"656":2,"672":1,"673":1,"677":2,"679":2,"705":1,"706":2,"708":2,"725":1,"734":5,"736":4,"806":1,"847":2,"848":1,"904":1}}],["cors",{"2":{"160":2,"801":2}}],["coh",{"2":{"426":1}}],["coze",{"2":{"403":1,"498":1}}],["collaboration",{"2":{"903":1}}],["collectcoveragefrom",{"2":{"222":1}}],["columncontrol",{"2":{"647":1,"656":1}}],["columns",{"2":{"640":1,"649":2,"806":1}}],["colorclasses",{"2":{"925":3}}],["colormanagement",{"2":{"734":1}}],["colorattrs",{"2":{"686":1}}],["color",{"2":{"676":1,"706":1,"734":2,"740":1,"742":1,"743":1,"748":6,"749":2,"753":1,"770":2,"921":6,"922":2,"923":3,"924":4,"925":10,"928":2,"929":1}}],["colors",{"2":{"274":1,"683":1,"925":1,"927":1}}],["colonindex",{"2":{"168":4}}],["colocating",{"2":{"6":2}}],["coveragedirectory",{"2":{"222":1}}],["coverage",{"2":{"203":1,"222":1,"224":2,"667":1}}],["coverimage",{"2":{"26":1}}],["count",{"2":{"171":1,"175":2,"178":3,"179":8,"330":5,"713":1,"719":1}}],["combo",{"2":{"647":1}}],["combostore",{"2":{"646":1,"647":1,"650":3}}],["com>`",{"2":{"581":1}}],["comp",{"2":{"762":1,"769":1,"776":1,"848":1}}],["compiledexpression",{"2":{"776":1}}],["compileexpression",{"2":{"769":1,"776":1}}],["compileroptions",{"2":{"203":1,"204":3,"209":1,"210":1,"212":2,"213":1,"214":1,"215":1,"216":4,"322":1}}],["compiler",{"2":{"202":1,"733":1,"928":1}}],["compinterface",{"2":{"762":1,"769":2,"776":1}}],["compelement",{"2":{"761":1,"762":1}}],["competitive",{"2":{"470":1}}],["competition",{"2":{"392":1}}],["compressedtexture",{"2":{"734":1}}],["computepipeline",{"2":{"748":1}}],["computenode",{"2":{"748":3}}],["computenodes",{"2":{"748":1}}],["compute",{"2":{"733":1,"739":1,"748":1}}],["computer",{"2":{"411":1}}],["companion",{"2":{"881":1,"888":1}}],["compatstyle",{"2":{"706":1}}],["compat",{"2":{"646":1,"647":1}}],["comparative",{"2":{"396":1}}],["comparable",{"2":{"267":7}}],["compareto",{"2":{"267":3}}],["completion",{"2":{"792":3,"795":1,"796":1,"857":1,"880":1,"881":1,"883":1,"896":1}}],["completions",{"2":{"523":1,"795":1,"796":1}}],["completelayers",{"2":{"776":1}}],["complete",{"2":{"172":2,"175":1,"179":1,"518":1,"777":1}}],["completed",{"2":{"149":2,"152":1,"153":2,"895":1}}],["complexity",{"2":{"365":3}}],["compound",{"2":{"792":1}}],["composable",{"2":{"879":1}}],["composition",{"2":{"341":1}}],["composite",{"0":{"208":1},"2":{"203":1,"208":1,"213":3,"216":2,"740":1}}],["compose",{"2":{"290":1}}],["componentviewclass",{"2":{"720":1}}],["componentview",{"2":{"704":1,"705":1,"706":1,"708":1,"709":2,"720":3}}],["componentmodelclass",{"2":{"720":1}}],["componentmodel",{"2":{"704":1,"705":1,"706":1,"709":3,"720":2}}],["componenttype",{"2":{"661":3,"720":1}}],["component",{"0":{"340":1},"2":{"59":3,"74":3,"79":1,"80":1,"86":1,"90":1,"94":2,"647":3,"649":1,"652":3,"656":1,"661":3,"705":1,"706":4,"708":2,"713":2,"715":1,"933":1}}],["components",{"0":{"73":1,"74":1,"88":1},"2":{"27":1,"28":1,"79":1,"86":1,"92":2,"203":5,"274":5,"280":1,"287":1,"288":4,"290":3,"312":2,"313":1,"344":1,"646":2,"647":3,"705":1,"706":1,"725":1,"749":9,"849":1,"922":2,"928":3}}],["com",{"2":{"29":1,"81":1,"83":1,"84":1,"90":1,"152":1,"163":1,"259":4,"262":1,"266":2,"268":1,"269":1,"318":1,"456":2,"564":1,"695":1,"696":1,"751":1,"755":1,"780":1,"803":1,"811":1,"899":1,"905":3}}],["community",{"0":{"346":1}}],["commandargs",{"2":{"806":3}}],["commanderadapter",{"2":{"792":1}}],["commander",{"2":{"787":1,"790":1,"792":2,"796":1}}],["commandencoder",{"2":{"739":1}}],["commandenc",{"2":{"733":1}}],["command",{"2":{"280":2,"801":2,"806":2,"807":2,"886":1,"895":3}}],["commands",{"0":{"579":1},"1":{"580":1,"581":1,"582":1,"583":1},"2":{"280":1,"470":3,"570":4,"579":1,"580":2,"583":4,"584":1,"585":1,"590":1,"597":2,"734":1,"792":2,"880":1,"881":2}}],["commontypes",{"2":{"280":1}}],["commonkeys",{"2":{"233":1}}],["commonjs",{"0":{"304":1,"333":1},"2":{"203":5,"204":1,"215":2,"298":2,"303":1,"304":1,"305":1,"306":3,"307":1,"308":2,"309":1,"314":1,"322":1,"730":1,"734":1,"762":1,"828":2}}],["commons",{"2":{"193":1}}],["common",{"2":{"152":1,"178":1,"179":1,"274":1,"275":1,"280":1,"647":1,"706":1,"734":1,"762":1,"764":1}}],["commit`",{"2":{"451":1,"581":1}}],["commits",{"2":{"451":1}}],["commit",{"2":{"29":1,"113":1,"375":1,"451":8,"581":4,"889":1,"890":1}}],["comment",{"2":{"28":9}}],["comments",{"2":{"28":7}}],["commentsection",{"2":{"27":3,"28":2}}],["concat",{"2":{"833":1}}],["concatenation",{"2":{"238":1}}],["conduct",{"2":{"823":1,"881":1}}],["conditions",{"2":{"856":1}}],["condition",{"2":{"647":1,"881":2}}],["converttolanguagemodelprompt",{"2":{"853":1}}],["converttopixel",{"2":{"719":1}}],["convertfrompixel",{"2":{"719":1}}],["conversation",{"2":{"482":1}}],["conventions",{"2":{"570":1,"575":1,"577":1,"881":1}}],["conventional",{"2":{"451":1}}],["connected",{"2":{"301":1,"807":1}}],["connect",{"2":{"301":1,"328":1}}],["connection",{"2":{"115":1,"126":1,"161":1,"163":2,"164":1,"177":1}}],["conf",{"2":{"647":2,"662":1,"677":1}}],["confirmed",{"2":{"281":2}}],["confirm",{"2":{"281":1}}],["confirmtext",{"2":{"249":3}}],["configanimation",{"2":{"776":1}}],["config>",{"2":{"692":2,"693":2}}],["configure",{"2":{"676":1}}],["configmap",{"2":{"262":2}}],["config",{"2":{"84":2,"203":2,"216":1,"222":5,"243":5,"274":4,"275":4,"288":3,"290":4,"481":1,"490":1,"647":1,"652":1,"661":1,"662":1,"668":3,"677":1,"686":2,"692":10,"706":1,"734":1,"762":1,"776":1,"777":1,"925":2,"928":1,"929":1,"932":1}}],["conflict",{"2":{"237":3,"451":1}}],["cons",{"2":{"895":1}}],["consolemessages",{"2":{"806":1}}],["console",{"2":{"106":1,"149":4,"153":4,"163":4,"164":1,"166":1,"169":1,"231":2,"246":2,"259":1,"260":1,"262":2,"263":1,"269":1,"288":2,"289":2,"295":5,"300":2,"301":3,"302":1,"304":2,"305":2,"307":2,"311":1,"313":1,"314":4,"315":4,"324":1,"325":1,"483":1,"484":1,"489":1,"571":1,"818":1}}],["consistent",{"2":{"97":1}}],["constraints",{"2":{"676":1}}],["constructor>",{"2":{"248":2}}],["constructor",{"2":{"175":1,"231":1,"248":1,"261":1,"267":1,"269":3,"281":7,"302":1,"311":1,"655":1,"692":2,"708":1,"720":2}}],["constants",{"2":{"274":1,"336":1,"734":1,"792":1}}],["const",{"2":{"26":3,"27":3,"28":12,"81":2,"82":1,"83":2,"84":1,"90":1,"97":3,"99":4,"100":3,"101":2,"103":1,"106":1,"108":2,"149":5,"152":3,"153":2,"163":1,"164":2,"166":7,"168":10,"169":1,"171":1,"172":1,"173":1,"175":5,"178":1,"179":2,"203":1,"222":1,"223":2,"229":1,"233":1,"236":1,"237":1,"238":3,"246":2,"247":2,"248":1,"258":3,"259":3,"260":1,"261":6,"262":3,"263":2,"266":2,"267":2,"268":4,"269":3,"281":4,"288":9,"289":5,"295":1,"300":2,"301":3,"302":1,"304":3,"305":1,"307":2,"310":3,"311":1,"313":2,"314":3,"315":14,"318":2,"321":1,"327":6,"328":3,"330":1,"333":3,"483":2,"484":1,"486":2,"488":2,"489":3,"640":1,"668":2,"693":1,"696":3,"724":1,"753":7,"839":1,"843":2,"868":2,"896":1,"922":1,"923":1,"925":2,"927":1}}],["continuous",{"2":{"706":1}}],["continue`",{"2":{"451":1}}],["continue",{"2":{"168":2,"889":1}}],["contributing",{"2":{"706":1,"823":1,"849":1}}],["contrast",{"2":{"676":1,"677":1,"679":1}}],["contract",{"2":{"11":1,"110":1,"112":1,"319":2}}],["controls",{"2":{"656":1,"734":2}}],["control",{"2":{"161":1,"164":1,"177":1,"419":1}}],["controllers",{"2":{"275":1,"280":1}}],["controller",{"2":{"152":2,"178":2,"179":2,"275":2,"280":2,"336":1}}],["contents",{"2":{"662":1}}],["contenttype",{"2":{"175":2}}],["content>",{"2":{"163":1,"178":1}}],["content",{"2":{"26":3,"28":4,"86":3,"117":2,"121":1,"163":2,"164":1,"166":1,"169":3,"175":3,"177":1,"234":2,"483":1,"484":2,"488":3,"654":1,"684":2,"692":1,"807":3,"819":1,"820":1,"839":2,"849":1,"872":1,"886":1,"895":1,"925":5}}],["contentful",{"0":{"26":1},"2":{"21":1,"22":1,"23":1,"25":2,"26":10,"27":3,"29":2,"30":1}}],["context|",{"2":{"886":1}}],["contextnode",{"2":{"734":1}}],["context",{"2":{"6":1,"7":1,"108":4,"110":1,"143":1,"277":1,"324":2,"367":4,"410":3,"439":1,"468":1,"546":1,"548":1,"557":1,"594":2,"646":1,"653":1,"663":1,"675":1,"677":1,"679":1,"683":5,"692":2,"712":1,"719":1,"739":1,"762":2,"777":1,"880":1,"895":1,"902":1}}],["containerconfig",{"2":{"692":5}}],["containerparams",{"2":{"677":1}}],["container",{"2":{"2":1,"27":2,"261":1,"288":1,"676":1,"677":1,"679":1,"680":2,"684":1,"692":7,"693":3,"696":3,"770":1,"773":1,"777":1,"781":1}}],["cost",{"2":{"928":1}}],["costs",{"2":{"391":2,"393":2}}],["cos",{"2":{"19":1}}],["coda",{"2":{"515":3}}],["coding",{"0":{"532":1,"560":1},"1":{"561":1,"562":1},"2":{"8":1,"365":1,"371":1,"461":1,"530":1,"553":1,"559":2,"569":1,"901":1,"930":1}}],["codeinterpreter",{"2":{"868":1}}],["codeium",{"2":{"564":1}}],["codemod",{"2":{"849":1}}],["codemirror",{"2":{"734":1}}],["coded",{"2":{"676":1}}],["codegeex",{"2":{"522":1}}],["coder",{"2":{"512":1,"522":2}}],["coders",{"2":{"405":1}}],["codespec",{"2":{"442":1,"443":1}}],["codex",{"2":{"3":1,"879":1,"880":2,"881":9,"884":1,"898":2}}],["code",{"2":{"3":1,"196":1,"197":1,"234":2,"281":1,"313":1,"363":1,"403":1,"411":1,"441":1,"442":1,"448":1,"455":1,"461":1,"470":2,"477":1,"478":1,"482":2,"493":1,"535":1,"542":2,"553":1,"557":1,"559":2,"564":1,"565":2,"567":6,"568":4,"569":4,"570":3,"571":1,"572":1,"575":1,"577":1,"582":2,"590":1,"591":3,"592":3,"593":1,"597":2,"734":1,"771":1,"784":1,"790":1,"823":1,"857":1,"868":2,"879":1,"880":3,"881":13,"883":4,"884":2,"886":1,"887":1,"889":2,"890":1,"892":1,"896":2,"898":1,"899":1,"928":1}}],["choices",{"2":{"806":1}}],["chordview",{"2":{"706":1}}],["chordseries",{"2":{"706":1}}],["chord",{"2":{"706":1}}],["chore",{"2":{"451":1,"581":1}}],["chromium",{"2":{"790":1,"809":1}}],["chrome",{"2":{"338":2,"542":1,"673":1,"787":2,"790":1,"799":2,"801":2,"809":1}}],["childtype>",{"2":{"692":1}}],["childtype",{"2":{"692":3}}],["childstore",{"2":{"653":2}}],["children",{"2":{"1":1,"2":1,"649":2,"676":3,"680":1,"692":3,"740":1,"748":1,"776":1,"923":2,"925":2}}],["checkforupdatebackground",{"2":{"796":1}}],["checklayers",{"2":{"768":2,"776":1}}],["checklist",{"0":{"450":1}}],["checktype",{"2":{"723":1}}],["checkskills",{"2":{"887":1}}],["checks",{"2":{"482":1}}],["check",{"2":{"470":1,"792":1,"871":1,"887":1}}],["checkout",{"2":{"451":1}}],["check装饰器",{"2":{"188":1}}],["chance",{"2":{"887":1}}],["change",{"2":{"845":1}}],["changelog",{"2":{"331":3,"583":1,"588":1,"677":1,"734":2,"762":1,"823":1}}],["changesets",{"2":{"845":1}}],["changes",{"2":{"113":1}}],["chalk",{"2":{"483":3,"484":1,"488":2,"489":1,"490":2}}],["chain",{"2":{"426":1}}],["chart",{"2":{"705":3,"706":2,"715":3,"724":2}}],["chartviewclass",{"2":{"720":1}}],["chartview",{"2":{"704":1,"705":1,"706":1,"708":1,"709":2,"711":1,"720":3}}],["charts",{"2":{"313":1,"471":2,"472":2,"474":1,"725":1}}],["charlie",{"2":{"259":2,"267":2}}],["charset",{"2":{"203":1}}],["chatexample",{"2":{"489":2}}],["chat",{"0":{"858":1},"2":{"169":1,"489":2,"523":1,"850":1,"857":1,"858":2}}],["chatgpt或沉迷于",{"2":{"371":1}}],["chatgpt",{"2":{"2":1,"118":1,"136":1,"363":1,"499":1,"510":2,"511":3,"519":1,"598":1,"785":1,"912":1}}],["chunklist",{"2":{"713":1}}],["chunking",{"2":{"546":1}}],["chunked",{"2":{"117":1,"159":1}}],["chunks",{"2":{"86":1,"117":1}}],["chunk",{"2":{"65":2,"66":1,"166":1,"168":2}}],["4+1",{"2":{"957":1}}],["4px",{"2":{"921":1,"922":1,"923":1,"924":1}}],["4阶段系统化调试方法论",{"2":{"881":1}}],["489行",{"2":{"762":1}}],["47kb",{"2":{"734":1}}],["43个文件",{"2":{"734":1}}],["44个文件",{"2":{"734":1}}],["4×4",{"2":{"734":1}}],["4d",{"2":{"734":1}}],["4600",{"2":{"705":1,"715":1}}],["4v",{"2":{"512":1,"522":1}}],["4o",{"2":{"511":1,"521":2,"523":2}}],["4500",{"2":{"705":1,"715":1}}],["450ms",{"2":{"59":1}}],["45+",{"2":{"647":1,"656":1}}],["456",{"2":{"247":1,"265":1}}],["427行",{"2":{"881":1}}],["42",{"2":{"229":1,"254":2}}],["429",{"2":{"147":1,"169":2,"820":1}}],["4s",{"2":{"171":1,"175":1}}],["4xx",{"2":{"169":1,"171":1}}],["408",{"2":{"807":1}}],["403",{"2":{"807":1}}],["40",{"2":{"734":1,"963":1,"964":1}}],["40+",{"2":{"647":1,"706":1,"842":1,"844":1,"847":1,"848":1}}],["40kb",{"2":{"647":1,"734":1}}],["404",{"2":{"78":1,"370":1}}],["4000",{"2":{"705":1,"715":1}}],["400",{"2":{"28":1,"169":1,"807":1,"820":1,"925":2}}],["4",{"0":{"4":1,"5":1,"6":1,"7":1,"21":1,"28":1,"31":1,"42":1,"59":1,"76":1,"77":1,"78":1,"79":1,"88":1,"120":1,"121":1,"122":1,"123":1,"124":2,"129":1,"134":1,"139":1,"154":1,"155":1,"156":1,"157":1,"169":1,"170":1,"171":1,"172":1,"173":1,"174":2,"175":1,"192":1,"201":1,"215":1,"218":1,"219":1,"220":1,"221":1,"222":1,"223":1,"224":2,"225":1,"232":1,"239":1,"241":1,"242":1,"243":1,"244":1,"249":1,"255":1,"261":1,"264":1,"265":1,"266":1,"267":1,"268":2,"269":1,"270":1,"280":1,"284":1,"285":1,"286":1,"287":1,"288":2,"289":1,"290":1,"291":1,"292":1,"303":1,"307":1,"313":1,"320":1,"330":1,"336":1,"341":1,"351":1,"352":1,"353":1,"360":1,"375":1,"376":1,"380":1,"385":1,"394":1,"399":1,"408":1,"409":1,"410":1,"411":1,"412":2,"418":1,"427":1,"437":1,"444":1,"445":1,"446":1,"462":1,"464":1,"473":1,"474":1,"475":1,"482":1,"483":1,"484":1,"495":1,"534":1,"535":1,"536":1,"537":1,"538":2,"548":1,"552":1,"566":1,"567":1,"568":1,"575":1,"576":1,"577":1,"578":1,"583":1,"588":1,"603":1,"615":1,"623":1,"624":1,"625":1,"626":1,"642":1,"651":1,"668":1,"673":1,"681":1,"702":1,"710":1,"725":1,"738":1,"758":1,"766":1,"787":1,"792":1,"798":1,"799":1,"800":1,"801":1,"845":1,"850":1,"855":1,"856":1,"857":1,"858":1,"859":2,"860":1,"861":1,"877":1,"885":1,"911":1,"912":1,"913":1,"923":1,"932":1,"943":1,"948":1,"963":1},"1":{"5":1,"6":1,"43":1,"44":1,"45":1,"77":1,"78":1,"79":1,"121":1,"122":1,"123":1,"124":1,"155":1,"156":1,"157":1,"171":1,"172":1,"173":1,"174":1,"175":1,"193":1,"194":1,"219":1,"220":1,"221":2,"222":2,"223":2,"224":2,"225":2,"242":1,"243":1,"244":1,"265":1,"266":1,"267":1,"268":1,"269":1,"270":1,"285":1,"286":1,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"352":1,"353":1,"409":1,"410":1,"411":1,"412":1,"445":1,"446":1,"447":2,"448":2,"449":2,"450":2,"474":1,"475":1,"483":1,"484":1,"535":1,"536":1,"537":1,"538":1,"567":1,"568":1,"576":1,"577":1,"578":1,"624":1,"625":1,"626":1,"652":1,"653":1,"654":1,"655":1,"656":1,"682":1,"683":1,"684":1,"685":1,"686":1,"711":1,"712":1,"713":1,"714":1,"715":1,"739":1,"740":1,"741":1,"742":1,"743":1,"767":1,"768":1,"769":1,"770":1,"771":1,"799":1,"800":1,"801":1,"856":1,"857":1,"858":1,"859":1,"860":1,"861":1,"886":1,"887":1,"888":1,"889":1,"890":1,"912":1,"913":1,"914":2,"915":2,"916":2,"917":2,"918":2},"2":{"1":1,"27":3,"28":6,"33":1,"100":1,"104":1,"143":1,"166":1,"169":1,"203":3,"231":1,"254":1,"261":1,"383":1,"430":1,"451":2,"471":1,"472":1,"494":1,"504":1,"506":1,"512":1,"521":1,"522":1,"523":1,"549":1,"550":1,"564":1,"581":2,"586":1,"631":2,"642":1,"652":1,"696":1,"821":1,"832":1,"845":4,"880":1,"888":1,"889":1,"893":1,"925":2,"926":1,"927":4,"928":2,"933":2}}],["扁平化原则",{"2":{"931":1}}],["扁平",{"2":{"1":1}}],["d2c",{"2":{"932":1}}],["d97706",{"2":{"925":1}}],["dx",{"2":{"904":1}}],["dst",{"2":{"748":1}}],["dsl",{"2":{"2":1,"66":2,"734":2,"736":1,"741":2}}],["dfg",{"2":{"734":1}}],["d3",{"2":{"702":1}}],["durable",{"2":{"859":1}}],["duration",{"2":{"686":1,"692":1,"743":1}}],["dual",{"2":{"823":1,"828":1}}],["duopoly",{"2":{"392":1}}],["dpr",{"2":{"777":1}}],["dpi",{"2":{"677":1}}],["dpo",{"2":{"551":1}}],["dd",{"2":{"676":1,"677":1,"680":1}}],["ddd",{"0":{"276":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1},"1":{"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1},"2":{"189":1,"276":1,"277":1,"278":1,"279":1,"280":1,"281":2,"282":1,"283":2,"344":1}}],["dnd",{"2":{"646":1,"647":1,"656":2}}],["django",{"2":{"573":1}}],["dynamicproperties",{"2":{"762":1}}],["dynamicpriority",{"2":{"203":1}}],["dynamic",{"0":{"313":1},"2":{"297":1,"412":1}}],["dtos",{"2":{"280":1}}],["dto",{"2":{"275":5,"280":3,"282":1}}],["dbrx",{"2":{"523":1}}],["db2",{"2":{"301":2}}],["db1",{"2":{"301":2}}],["db",{"2":{"246":1,"328":3,"410":1}}],["d",{"0":{"321":1,"777":1},"2":{"203":5,"208":1,"222":1,"274":2,"275":1,"320":1,"321":1,"325":1,"692":1,"755":1,"758":1,"762":2,"776":1,"777":1,"828":1}}],["dry",{"2":{"889":1}}],["droid",{"2":{"880":1,"898":1}}],["drop",{"2":{"647":1,"656":1}}],["dropbox",{"2":{"363":1}}],["draco",{"2":{"734":1}}],["draco等",{"2":{"734":1}}],["drawnframe",{"2":{"777":1}}],["drawscene",{"2":{"683":1,"692":2}}],["drawhitfromcache",{"2":{"683":1}}],["drawhit",{"2":{"683":1,"692":2}}],["draw",{"2":{"683":1,"686":1,"692":3,"696":1,"733":1,"736":1,"739":1,"748":1}}],["drawer",{"2":{"654":2}}],["drawerschema",{"2":{"653":1}}],["drawing",{"2":{"647":1,"676":1}}],["dragboundfunc",{"2":{"692":1}}],["dragdistance",{"2":{"692":1}}],["draggable",{"2":{"692":1,"696":1}}],["draganddrop",{"2":{"676":1,"677":1,"679":1,"680":1}}],["drag",{"2":{"647":1,"656":1,"676":1}}],["draft",{"2":{"113":1}}],["drive",{"2":{"439":1}}],["driven",{"0":{"889":1,"890":1,"927":1},"2":{"8":1,"276":1,"440":1,"532":1,"879":1,"880":2,"881":5,"883":3,"884":1,"889":2,"890":2,"892":1,"896":4,"900":1}}],["drilling",{"2":{"1":2}}],["daemonversion",{"2":{"807":1}}],["daemon",{"0":{"801":1,"807":1},"2":{"786":1,"787":1,"789":1,"790":2,"791":2,"792":5,"799":2,"801":6,"807":4}}],["dag",{"2":{"737":1,"741":1,"879":1,"880":1}}],["dashproperty",{"2":{"762":1}}],["dashoffset",{"2":{"692":1,"770":1}}],["dashenabled",{"2":{"692":1}}],["dash",{"2":{"692":1}}],["dashboardlayout",{"2":{"274":1}}],["dashboard",{"2":{"73":1,"77":2,"274":1}}],["darth",{"2":{"677":1}}],["dark",{"2":{"289":1,"706":2,"928":1}}],["daily",{"2":{"632":1}}],["daisy",{"2":{"340":1}}],["dall",{"2":{"523":1}}],["dau",{"2":{"382":1}}],["dao",{"2":{"336":1}}],["dangoor",{"2":{"304":1}}],["dangerously",{"2":{"482":1}}],["dangerous",{"2":{"482":1}}],["danger",{"2":{"249":3}}],["dangervariant",{"2":{"249":3}}],["dateformatoptions",{"2":{"318":1}}],["date",{"2":{"27":2,"28":1,"97":1,"188":1,"240":2,"248":8,"269":5,"274":1,"275":1,"280":1,"281":2,"895":1}}],["datamanagerworkeroverrides",{"2":{"762":1}}],["datamanager",{"2":{"761":1,"762":1,"770":2}}],["datamapping",{"2":{"646":1,"647":1}}],["data3dtexture",{"2":{"734":1}}],["dataarraytexture",{"2":{"734":1}}],["datautils",{"2":{"734":1}}],["dataurl",{"2":{"719":1}}],["dataindex",{"2":{"719":1}}],["datatexture",{"2":{"734":1}}],["datatopoint",{"2":{"714":1}}],["datatable",{"2":{"274":1}}],["dataframe",{"2":{"709":1,"713":1}}],["datadimensioninfo",{"2":{"706":1}}],["datadiffer",{"2":{"706":1,"713":3}}],["dataselect",{"2":{"706":1}}],["dataset",{"2":{"550":2,"700":1,"702":1,"706":3,"708":1,"713":3}}],["datasample",{"2":{"706":1,"708":1}}],["datasymboltask",{"2":{"706":1,"708":1,"715":1}}],["datastyletask",{"2":{"706":1,"708":1,"715":2}}],["datastackstagehandler",{"2":{"706":1}}],["datastack",{"2":{"705":1,"706":1,"708":1}}],["dataprocessorfuncs",{"2":{"708":1}}],["dataprocessor",{"2":{"704":1,"705":1,"706":1,"708":2,"712":1}}],["datazoom",{"2":{"700":2,"701":1,"706":2,"708":1,"712":1}}],["databindingcontrol",{"2":{"647":1,"656":1}}],["database",{"2":{"275":3,"280":2,"301":1,"328":2,"578":1,"592":1}}],["databasemodel>",{"2":{"269":1}}],["databasemodel",{"2":{"269":5}}],["databaseconfig",{"2":{"243":1}}],["dataview",{"2":{"629":1,"706":1}}],["datacontainer",{"2":{"261":4}}],["data>",{"2":{"177":1}}],["data=",{"2":{"101":1}}],["data",{"0":{"5":1,"342":1,"713":1},"2":{"5":1,"7":1,"28":6,"81":1,"83":2,"90":1,"97":2,"99":3,"101":2,"103":2,"107":2,"121":1,"149":4,"153":4,"160":1,"161":4,"163":7,"164":3,"166":10,"168":8,"169":2,"172":6,"175":10,"177":1,"178":9,"179":1,"196":1,"197":1,"246":4,"260":4,"262":2,"266":2,"289":4,"302":4,"315":2,"342":1,"411":1,"416":1,"470":2,"471":5,"472":5,"474":2,"475":1,"576":1,"647":1,"652":1,"653":2,"654":1,"655":1,"661":3,"662":1,"663":2,"702":1,"705":1,"706":2,"713":1,"715":2,"724":2,"770":1,"771":2,"773":1,"776":6,"777":2,"818":1,"819":1,"833":2,"839":1,"924":3}}],["diagnostic",{"2":{"792":1}}],["dialogschema",{"2":{"653":1}}],["dialog",{"2":{"646":2,"650":1,"654":2,"659":1}}],["dim",{"2":{"713":1,"719":3}}],["dimensionindex",{"2":{"719":3}}],["dimensions",{"2":{"713":3}}],["dimension",{"2":{"709":1}}],["diminishing",{"2":{"398":1}}],["dir",{"2":{"800":1}}],["direction",{"2":{"777":1,"806":1}}],["directionallight",{"2":{"734":1,"753":1}}],["dirty",{"2":{"682":1,"685":1,"708":1,"719":1}}],["dirname",{"2":{"216":1}}],["dify",{"2":{"403":1,"498":1}}],["difference",{"2":{"223":1}}],["diffusion",{"2":{"135":1,"145":1,"523":1}}],["diff",{"2":{"11":1,"484":1,"581":1,"594":4,"713":1}}],["di",{"2":{"344":3}}],["discardtrailingnewline",{"2":{"833":1}}],["discoverplugins",{"2":{"796":1,"800":1}}],["discoverclis",{"2":{"796":2,"800":1}}],["discovery",{"0":{"800":1},"2":{"791":1,"792":1,"800":2}}],["discrete",{"2":{"734":1}}],["discrimination",{"2":{"397":1}}],["discriminated",{"0":{"230":1}}],["dispose",{"2":{"705":1,"706":1,"719":1,"748":2,"830":1}}],["displayable",{"2":{"702":1,"704":1,"705":1}}],["display",{"2":{"647":1,"734":2}}],["dispatching",{"2":{"880":1,"881":1,"883":1}}],["dispatchaction",{"2":{"704":1,"705":1,"706":1,"708":1,"719":1}}],["dispatchevent",{"2":{"646":1,"652":1,"654":2,"661":1,"740":1}}],["dispatch",{"2":{"289":1}}],["disablehitgraph",{"2":{"692":1}}],["disabled",{"2":{"249":1,"927":3}}],["disallowedtools",{"2":{"482":1}}],["dist",{"2":{"43":1,"62":1,"63":1,"65":1,"203":3,"204":4,"213":2,"214":2,"215":2,"322":1,"335":3,"706":1,"726":1,"792":2}}],["divide",{"2":{"295":2,"304":1,"307":1}}],["div>hello",{"2":{"97":1}}],["div>loading",{"2":{"97":1,"101":1,"288":4}}],["div>failed",{"2":{"97":1}}],["div>",{"2":{"27":4,"28":3,"35":1,"97":3,"101":1,"103":2,"288":7,"696":1,"922":2}}],["div",{"2":{"1":1,"27":4,"28":3,"35":1,"288":3,"684":1,"696":1}}],["dedicated",{"2":{"523":2}}],["dedupinginterval",{"2":{"99":1}}],["deduplication",{"2":{"97":1,"342":1}}],["deny",{"2":{"482":1,"594":2}}],["debate",{"2":{"375":1}}],["debugging",{"2":{"880":1,"881":1,"883":1,"893":1,"896":2}}],["debug",{"2":{"110":1,"509":1,"661":1,"734":1,"806":1}}],["deepsplice",{"2":{"647":1}}],["deepseek",{"2":{"510":2,"512":3,"519":1,"522":5,"523":9,"549":1,"559":1,"567":1,"568":2}}],["deepresearch",{"2":{"467":1,"470":3,"474":1}}],["deep",{"0":{"416":1},"2":{"370":1,"467":2,"476":1,"518":4,"924":2,"928":1,"931":1,"934":1}}],["defense",{"2":{"881":1}}],["defs",{"2":{"768":1}}],["definiton",{"2":{"367":1}}],["definition+context",{"2":{"367":2}}],["definition",{"2":{"305":2,"306":2,"367":1,"806":1}}],["defineprops",{"2":{"924":1}}],["defineproperty",{"2":{"685":1}}],["defined",{"2":{"868":2}}],["define",{"2":{"305":2,"306":4,"308":1}}],["defaultvariants",{"2":{"927":1}}],["defaultformat",{"2":{"806":1}}],["defaulter",{"2":{"720":1}}],["defaultlogger",{"2":{"311":1}}],["defaultoptions",{"2":{"106":1}}],["default",{"2":{"27":2,"28":3,"86":1,"203":1,"222":1,"232":2,"288":1,"289":1,"295":1,"307":2,"308":1,"311":2,"312":1,"481":4,"482":1,"647":1,"661":1,"677":1,"693":1,"706":1,"749":6,"768":1,"806":1,"924":1,"925":1,"927":4}}],["detect",{"2":{"792":1}}],["detection",{"2":{"676":1,"886":1}}],["deterministic",{"2":{"104":1}}],["detailed",{"2":{"451":1,"586":2}}],["detail",{"2":{"288":1}}],["details",{"2":{"288":1}}],["destructive",{"2":{"927":2,"934":1}}],["destroy",{"2":{"692":1,"761":1,"767":2,"776":2,"777":2}}],["destroychildren",{"2":{"692":1}}],["destroy$",{"2":{"179":2}}],["desktop",{"2":{"792":1}}],["designsection",{"2":{"895":2}}],["designspec",{"2":{"895":1}}],["designdetails",{"2":{"895":1}}],["design",{"0":{"929":1},"2":{"274":1,"276":1,"340":1,"367":4,"448":2,"453":1,"921":1,"925":3,"927":1,"928":5,"929":1,"930":1,"931":1}}],["descriptors",{"2":{"734":1}}],["description`",{"2":{"581":1}}],["description>`",{"2":{"451":1}}],["description",{"2":{"81":1,"82":1,"442":1,"443":2,"448":3,"451":1,"506":1,"581":2,"582":1,"586":1,"591":1,"628":1,"636":1,"749":19,"777":1,"806":1,"807":10,"884":1,"895":2}}],["describes",{"2":{"806":1,"881":1}}],["describe",{"2":{"223":1}}],["decalvisualstagehandler",{"2":{"706":1}}],["decal",{"2":{"705":1,"706":1,"708":1,"715":3}}],["declare",{"2":{"229":1,"233":1,"321":1,"325":1,"482":1,"693":1}}],["declarationmap",{"2":{"203":1,"204":2}}],["declarationdir",{"2":{"203":1,"204":1}}],["declaration",{"2":{"203":1,"204":2}}],["declarative",{"2":{"11":1}}],["decoy",{"2":{"397":1}}],["decorator|",{"2":{"646":1}}],["decorators",{"0":{"324":1},"2":{"275":1}}],["decorator",{"2":{"203":1,"275":1,"324":2}}],["decode",{"2":{"166":1,"168":1}}],["decoder",{"2":{"166":2,"168":2,"636":1}}],["delta",{"2":{"488":9,"743":1}}],["delayms",{"2":{"806":1}}],["delayindex",{"2":{"149":2}}],["delay",{"2":{"148":1,"153":1,"171":3}}],["deletedat",{"2":{"248":3}}],["delete",{"2":{"103":1,"281":1,"334":2,"801":1,"807":1}}],["depth=1",{"2":{"751":1}}],["depth",{"2":{"748":1,"881":1}}],["depthwrite",{"2":{"748":1}}],["depthtest",{"2":{"742":1,"748":1}}],["depthtexture",{"2":{"734":1}}],["depthmode",{"2":{"734":1}}],["deprecatelog",{"2":{"706":1}}],["deprecated",{"2":{"203":1,"806":1}}],["deps",{"2":{"666":1}}],["dep2",{"2":{"305":2}}],["dep1",{"2":{"305":2}}],["department",{"2":{"236":2}}],["dependences",{"2":{"705":1}}],["dependency2",{"2":{"305":1}}],["dependency1",{"2":{"305":1}}],["dependency>",{"2":{"193":2}}],["dependencies",{"2":{"216":1}}],["dependent",{"0":{"101":1},"2":{"110":1}}],["deployment",{"0":{"345":1}}],["deploy",{"2":{"29":3,"290":1,"570":4,"579":1,"583":2,"587":1}}],["developer",{"2":{"839":1}}],["development|",{"2":{"880":1}}],["development",{"0":{"889":1,"890":1},"2":{"8":1,"532":1,"881":5,"883":4,"884":2,"889":2,"890":2,"896":6,"900":1}}],["device",{"2":{"733":1}}],["devicepixelratio",{"2":{"719":1}}],["devin",{"2":{"567":2,"568":2}}],["devops",{"2":{"537":1,"542":1,"555":1}}],["devtools",{"2":{"106":2,"110":1,"113":1,"787":1,"799":1}}],["dev",{"2":{"94":1,"221":2,"559":1,"561":1,"562":2,"573":1,"583":2,"706":1,"723":1,"880":2,"881":1,"892":1,"934":1}}],["demos",{"2":{"467":1}}],["demo",{"2":{"81":1,"83":1,"94":3,"495":1,"557":1,"562":1,"762":10,"901":1,"902":1}}],["demand",{"2":{"48":1,"880":1}}],["derived",{"0":{"5":1},"2":{"5":1}}],["dot",{"2":{"877":2,"881":2,"887":2}}],["dotenv",{"2":{"481":1,"490":1}}],["do",{"2":{"866":1}}],["dostream",{"2":{"844":1,"853":1,"854":1,"866":2}}],["doubleside",{"2":{"742":1,"748":1}}],["doubao",{"2":{"512":2,"519":1,"522":3}}],["don",{"2":{"482":1}}],["dontask",{"2":{"478":1,"482":1}}],["done=true",{"2":{"168":1}}],["done",{"2":{"104":1,"166":4,"168":2}}],["doe",{"2":{"318":1}}],["dogen",{"2":{"856":2}}],["dogenerate",{"2":{"844":1,"853":2,"854":1,"866":2}}],["dog",{"2":{"231":8}}],["doctor",{"2":{"790":1,"792":2,"796":1,"810":1}}],["doc",{"2":{"646":3,"647":2,"677":1}}],["docx",{"2":{"453":1,"641":1}}],["dockerfile",{"2":{"290":2}}],["docker",{"2":{"71":1,"94":1,"290":3,"553":1,"555":1,"567":1,"568":1,"573":2,"790":1}}],["docs",{"2":{"62":1,"65":2,"128":1,"451":1,"456":2,"515":4,"581":1,"647":2,"734":2,"752":1,"762":1,"792":1,"839":1,"872":1,"880":1,"881":1}}],["documentdata",{"2":{"777":1}}],["documentation",{"2":{"451":1}}],["document",{"2":{"59":1,"668":1,"724":1,"753":1,"781":1,"881":3}}],["docusaurus",{"2":{"42":1}}],["download",{"2":{"790":1,"792":5}}],["downstream",{"2":{"653":1,"663":1}}],["down",{"2":{"7":1,"583":1}}],["dom快照",{"2":{"799":1}}],["domloaded",{"2":{"777":1}}],["domelement",{"2":{"748":1,"749":1,"753":1}}],["dom绑定",{"2":{"679":1}}],["domainevent",{"2":{"281":1}}],["domain",{"2":{"190":1,"276":1,"280":9,"281":5,"800":2,"806":2}}],["dom",{"0":{"69":1,"70":1},"2":{"1":2,"2":2,"11":2,"35":2,"59":2,"70":4,"71":2,"73":1,"86":1,"203":3,"204":3,"214":2,"216":2,"286":1,"288":3,"291":1,"339":1,"672":1,"676":1,"677":1,"680":1,"684":5,"688":1,"705":1,"708":1,"709":1,"719":2,"761":1,"762":4,"782":1,"790":2,"791":1,"792":5,"799":2,"924":3}}],["3x8g9",{"2":{"923":1}}],["3xy12",{"2":{"923":1}}],["3xl",{"2":{"27":2}}],["3b82f6",{"2":{"921":1,"922":1,"923":1,"924":1}}],["392行",{"2":{"881":1}}],["390",{"2":{"643":1}}],["3rd",{"2":{"761":1,"762":1,"764":1}}],["319",{"2":{"755":1}}],["31kb",{"2":{"734":3}}],["32个",{"2":{"734":1}}],["32个文件",{"2":{"734":1}}],["321",{"2":{"643":1}}],["3×3",{"2":{"734":1}}],["34kb",{"2":{"734":1}}],["3d支持",{"2":{"757":1}}],["3d",{"2":{"728":5,"732":2,"733":1,"734":11,"737":2,"740":1,"755":1,"761":1,"762":5,"768":1,"782":2}}],["3643+",{"2":{"845":1}}],["36",{"2":{"724":1}}],["38",{"2":{"647":1,"734":1}}],["3个月掌握某框架落地",{"2":{"624":1}}],["3~10",{"2":{"519":1}}],["3562行",{"2":{"706":1}}],["35",{"2":{"267":2}}],["3+2",{"2":{"957":1}}],["3+",{"2":{"203":1}}],["3s",{"2":{"142":1}}],["333",{"2":{"921":1,"922":1,"924":1}}],["33个文件",{"2":{"734":1}}],["33kb",{"2":{"647":1,"734":1}}],["33",{"2":{"124":1}}],["3",{"0":{"3":1,"11":1,"16":1,"20":1,"22":1,"23":1,"24":1,"27":1,"30":2,"38":1,"58":1,"66":1,"71":1,"75":1,"79":1,"83":1,"87":1,"94":1,"98":1,"101":1,"105":1,"108":1,"109":1,"110":1,"111":1,"116":1,"117":1,"118":1,"119":2,"123":1,"128":1,"133":1,"138":1,"149":1,"150":1,"151":1,"152":1,"153":2,"157":1,"161":1,"165":1,"166":1,"167":1,"168":2,"169":1,"173":1,"179":1,"189":1,"200":1,"209":1,"211":1,"212":1,"213":1,"214":2,"215":1,"216":1,"217":1,"223":1,"231":1,"235":1,"236":1,"237":1,"238":2,"239":1,"240":1,"244":1,"248":1,"254":1,"260":1,"263":1,"267":1,"276":1,"277":1,"278":1,"279":2,"280":1,"281":1,"282":1,"283":1,"287":1,"296":1,"297":1,"298":1,"299":2,"306":1,"312":1,"319":1,"324":1,"329":1,"335":1,"340":1,"350":1,"359":1,"367":1,"368":1,"369":1,"370":1,"371":2,"374":1,"379":1,"384":1,"393":1,"398":1,"400":1,"404":1,"405":1,"406":1,"407":2,"411":1,"417":1,"425":1,"426":1,"431":1,"436":1,"443":1,"449":1,"455":1,"459":1,"461":1,"463":1,"469":1,"470":1,"471":1,"472":2,"479":1,"480":1,"481":1,"490":1,"494":1,"500":1,"501":1,"502":1,"503":1,"504":1,"506":1,"516":1,"517":1,"518":1,"523":1,"529":1,"530":1,"531":1,"532":1,"533":2,"537":1,"543":1,"547":1,"551":1,"557":1,"558":1,"563":1,"564":1,"565":1,"571":1,"572":1,"573":1,"574":2,"578":1,"582":1,"587":1,"592":1,"596":1,"602":1,"611":1,"622":1,"626":1,"641":1,"647":1,"648":1,"649":1,"650":1,"663":1,"667":1,"672":1,"678":1,"679":1,"680":1,"697":1,"701":1,"706":1,"707":1,"708":1,"709":1,"724":1,"730":1,"734":1,"735":1,"736":1,"737":1,"753":1,"757":1,"762":1,"763":1,"764":1,"765":1,"782":1,"786":1,"791":1,"793":1,"794":1,"797":1,"801":1,"811":1,"820":1,"844":1,"849":1,"852":1,"853":1,"854":1,"858":1,"872":1,"876":1,"881":1,"882":1,"883":1,"884":1,"900":1,"908":1,"909":1,"910":1,"922":1,"931":1,"942":1,"947":1,"962":1},"1":{"23":1,"24":1,"25":2,"26":2,"27":2,"28":2,"29":2,"30":1,"39":1,"40":1,"41":1,"99":1,"100":1,"101":1,"106":1,"107":1,"108":1,"110":1,"111":1,"112":2,"113":2,"117":1,"118":1,"119":1,"151":1,"152":1,"153":1,"166":1,"167":1,"168":1,"169":1,"190":1,"191":1,"212":1,"213":1,"214":1,"215":1,"216":1,"236":1,"237":1,"238":1,"239":1,"240":1,"277":1,"278":1,"279":1,"280":1,"281":1,"282":1,"283":1,"297":1,"298":1,"299":1,"300":3,"301":3,"302":3,"369":1,"370":1,"371":1,"372":3,"373":3,"374":3,"375":3,"405":1,"406":1,"407":1,"470":1,"471":1,"472":1,"480":1,"481":1,"501":1,"502":1,"504":1,"505":2,"507":2,"508":2,"517":1,"518":1,"531":1,"532":1,"533":1,"564":1,"565":1,"572":1,"573":1,"574":1,"612":1,"613":1,"614":1,"649":1,"650":1,"679":1,"680":1,"708":1,"709":1,"736":1,"737":1,"764":1,"765":1,"794":1,"795":2,"796":2,"797":1,"853":1,"854":1,"883":1,"884":1,"909":1,"910":1},"2":{"1":1,"3":1,"28":1,"33":1,"62":1,"86":1,"87":1,"100":1,"104":1,"106":1,"108":1,"110":1,"137":1,"143":1,"153":1,"166":1,"168":1,"169":1,"175":1,"223":3,"231":1,"254":1,"258":1,"259":1,"261":1,"262":1,"265":1,"281":2,"291":1,"295":6,"304":2,"307":2,"310":1,"313":1,"325":1,"330":1,"340":2,"341":1,"342":1,"344":1,"353":1,"370":1,"441":1,"443":3,"451":3,"464":1,"471":1,"494":2,"504":1,"505":1,"506":3,"521":3,"523":4,"577":1,"581":1,"586":1,"591":1,"631":2,"640":1,"652":1,"677":1,"741":1,"807":1,"821":1,"822":1,"832":1,"845":2,"856":1,"881":2,"887":1,"888":2,"889":2,"908":1,"927":2,"928":4,"931":1,"933":1,"950":1,"952":1}}],["30分钟的器材锻炼",{"2":{"963":1}}],["30+",{"2":{"729":1,"849":1}}],["30kb",{"2":{"646":1,"647":1,"734":1}}],["302",{"2":{"523":3}}],["300",{"2":{"575":1,"925":2,"927":1}}],["300+",{"2":{"523":2}}],["3002",{"2":{"288":1}}],["3001",{"2":{"288":1}}],["30000",{"2":{"171":1,"175":1}}],["3000",{"2":{"153":1,"705":1,"715":1}}],["30s~60s",{"2":{"143":1}}],["30s",{"2":{"137":1,"171":1,"175":1}}],["30",{"2":{"1":2,"137":1,"140":2,"236":1,"267":2,"268":2,"942":1,"952":1,"961":1,"963":1,"964":2}}],["或多或少助力我们成长",{"2":{"946":1}}],["或多个技能组合处理复杂流程",{"2":{"547":1}}],["或阅读学习的过程基于书中的阐述来结合实际提炼出可指导实践的",{"2":{"946":1}}],["或复杂",{"2":{"927":1}}],["或对",{"2":{"927":1}}],["或许海绵式阅读是大多数人认可的方式",{"2":{"946":1}}],["或许存在更通用的方法论",{"2":{"906":1}}],["或许在阅读之前",{"2":{"180":1}}],["或路径模式",{"2":{"661":1}}],["或路径正则匹配查找对应渲染器",{"2":{"652":1}}],["或推送至对外发布的知识库",{"2":{"629":1}}],["或ai",{"0":{"610":1}}],["或一组",{"2":{"609":1}}],["或可能由不同人负责时",{"2":{"577":1}}],["或自然语言任务",{"2":{"567":1}}],["或想要免费的国产方案",{"2":{"565":1}}],["或想快速验证想法的非专业开发者",{"2":{"561":1}}],["或需求交付周期",{"2":{"526":1}}],["或产生幻觉",{"2":{"509":1}}],["或纯",{"2":{"502":1}}],["或纯客户端库",{"2":{"74":1}}],["或检查本地端口占用情况",{"2":{"449":1}}],["或提到",{"2":{"448":1}}],["或执行",{"2":{"443":1}}],["或调用",{"2":{"443":1}}],["或各类云端数据库",{"2":{"439":1}}],["或出错",{"2":{"415":1}}],["或特定私域数据",{"2":{"411":1}}],["或人类进行协作",{"2":{"402":1}}],["或仅通过规模效应获得极低利润",{"2":{"392":1}}],["或是企业内部知识库",{"2":{"548":1}}],["或是其",{"2":{"491":1}}],["或是研发将非结构化数据自动化转换为标准代码的基建体系时",{"2":{"377":1}}],["或是张小龙式的",{"2":{"363":1}}],["或草稿纸上",{"2":{"374":1}}],["或追求",{"2":{"344":1}}],["或类",{"2":{"301":1}}],["或者说一个普通百姓",{"2":{"957":1}}],["或者说",{"2":{"457":1}}],["或者",{"2":{"396":1,"958":1}}],["或者观察竞品改版时",{"2":{"369":1}}],["或者在为一些没有模块系统的全局库",{"2":{"320":1}}],["或者需要明确表达类型意图时",{"2":{"263":1}}],["或者使用",{"2":{"255":1}}],["或性能问题时",{"2":{"198":1}}],["或网络错误",{"2":{"171":1}}],["或事件总线",{"2":{"152":1}}],["或达到设定的超时时间",{"2":{"151":1}}],["或上下文历史",{"2":{"143":1}}],["或保持长达",{"2":{"137":1}}],["或专用网关等中间件",{"2":{"129":1}}],["或抛出异常",{"2":{"101":1}}],["或微前端方案",{"2":{"93":1}}],["或利用",{"2":{"59":1,"308":1}}],["或启用懒水合",{"2":{"59":1}}],["或内容频繁更新",{"2":{"58":1}}],["或静态服务器",{"2":{"42":1,"43":1}}],["或通过",{"2":{"21":1,"780":1}}],["或状态管理工具来收敛",{"2":{"7":1}}],["或轻量级状态库",{"2":{"6":1}}],["或使用",{"2":{"5":1,"59":1,"304":1}}],["或",{"0":{"228":1},"1":{"229":1,"230":1,"231":1,"232":1,"233":1,"234":1},"2":{"1":1,"2":1,"5":1,"30":1,"35":1,"58":1,"59":1,"63":1,"65":2,"83":1,"94":1,"95":2,"117":1,"128":1,"138":1,"143":1,"144":1,"152":1,"163":1,"179":1,"202":2,"229":1,"230":1,"232":1,"236":1,"250":1,"286":3,"291":1,"304":1,"306":1,"307":1,"308":2,"334":2,"335":1,"342":1,"344":1,"375":1,"385":1,"415":1,"435":2,"438":1,"442":1,"451":1,"467":1,"515":1,"518":2,"523":3,"525":1,"540":1,"559":1,"571":1,"572":1,"576":1,"629":1,"636":1,"682":1,"755":1,"764":1,"796":1,"833":1,"839":1,"840":1,"898":1,"909":1,"923":1,"925":1,"931":1,"957":1}}],["组装积木开发者不再为组件编写专门的",{"2":{"925":1}}],["组装完整的",{"2":{"833":1}}],["组装完整消息",{"2":{"830":1,"833":1}}],["组装",{"2":{"764":1}}],["组装耗时和",{"2":{"550":1}}],["组",{"2":{"734":2}}],["组织和其他形式的团体中获得成功都是至关重要的",{"2":{"907":1}}],["组织容器",{"2":{"680":2}}],["组织结构",{"2":{"676":1}}],["组织下的",{"2":{"467":1}}],["组织级工作流",{"2":{"436":1}}],["组织",{"2":{"321":1}}],["组合逻辑",{"2":{"927":1}}],["组合效果基类",{"2":{"762":1}}],["组合成节点图后编译为着色器代码",{"2":{"737":1}}],["组合所有核心功能",{"2":{"706":1}}],["组合表单",{"2":{"647":1}}],["组合",{"2":{"523":1,"650":2,"677":1,"734":1,"742":1,"912":1}}],["组合模式",{"0":{"248":1},"2":{"761":1}}],["组合使用才是真实战",{"2":{"67":1}}],["组合优势",{"2":{"928":3}}],["组合优于嵌套",{"2":{"2":1}}],["组合优先",{"2":{"1":1}}],["组件时",{"2":{"934":1}}],["组件时特别有用",{"2":{"249":1}}],["组件覆写",{"2":{"928":1}}],["组件渲染",{"2":{"927":1}}],["组件渲染策略各异的复杂页面",{"2":{"57":1}}],["组件内聚性消除",{"2":{"926":1}}],["组件封装了",{"2":{"858":1}}],["组件模块导出",{"2":{"720":1}}],["组件模型",{"2":{"709":1}}],["组件提供连续",{"2":{"715":1}}],["组件视图",{"2":{"709":1}}],["组件辅助",{"2":{"706":1}}],["组件辅助函数",{"2":{"706":1}}],["组件引用解析",{"2":{"706":1}}],["组件基类",{"2":{"706":1}}],["组件树的完整流程",{"2":{"658":1}}],["组件树一一对应的",{"2":{"653":1}}],["组件热重载插件",{"2":{"647":1}}],["组件编辑插件",{"2":{"647":1,"656":1}}],["组件样式",{"2":{"647":1}}],["组件插件",{"2":{"641":1,"647":1,"656":1}}],["组件生成",{"2":{"562":1}}],["组件生成工具",{"2":{"561":1}}],["组件嵌入现有项目",{"2":{"562":1}}],["组件代码片段",{"2":{"562":1}}],["组件代码",{"2":{"561":1}}],["组件文档",{"2":{"448":1}}],["组件所需的数据切片",{"2":{"342":1}}],["组件间状态共享",{"2":{"341":1}}],["组件间仅通过",{"2":{"2":1}}],["组件原语",{"2":{"340":1}}],["组件库时",{"2":{"927":1}}],["组件库和主题系统",{"2":{"639":1}}],["组件库和设计系统",{"2":{"291":1}}],["组件库",{"0":{"340":1},"2":{"286":1,"290":1,"340":3,"647":1,"924":1,"928":1,"930":1}}],["组件层",{"2":{"274":1,"645":1,"646":1}}],["组件层级树与职责描述",{"2":{"3":1}}],["组件等场景",{"2":{"269":1,"270":1}}],["组件开发",{"2":{"264":1}}],["组件可以保持对",{"2":{"263":1}}],["组件可直接查询数据库",{"2":{"72":1}}],["组件通常需要处理各种类型的",{"2":{"256":1}}],["组件重新挂载或请求",{"2":{"104":1}}],["组件只负责声明它需要什么数据",{"2":{"104":1}}],["组件负责",{"2":{"104":1}}],["组件计算虽然很快",{"2":{"89":1}}],["组件预取机制的基础",{"2":{"73":1}}],["组件默认就在服务端运行",{"2":{"73":1}}],["组件导入",{"2":{"65":1}}],["组件被渲染为",{"2":{"69":1}}],["组件被",{"2":{"62":1}}],["组件级",{"2":{"59":1}}],["组件级混合渲染",{"2":{"57":1,"58":1}}],["组件化是对",{"2":{"12":1}}],["组件划分",{"2":{"12":1}}],["组件的不同状态",{"2":{"927":1}}],["组件的",{"2":{"2":1,"11":1,"927":1}}],["组件是",{"2":{"2":1}}],["组件",{"0":{"2":1},"2":{"18":1,"39":1,"65":1,"84":1,"88":1,"181":1,"203":1,"274":1,"645":2,"647":2,"652":1,"661":2,"704":1,"708":2,"711":1,"792":1,"922":1,"928":1,"930":1}}],["组件地狱",{"2":{"1":1}}],["2篇专刊会",{"2":{"964":1}}],["217",{"2":{"928":1}}],["21",{"2":{"787":1,"809":1}}],["21kb",{"2":{"734":4}}],["2×2",{"2":{"734":1}}],["221",{"2":{"928":1,"929":1}}],["2211行",{"2":{"706":1}}],["22",{"2":{"845":1,"870":1}}],["22kb",{"2":{"734":2}}],["289",{"2":{"755":1}}],["28kb",{"2":{"734":1}}],["28",{"2":{"701":1,"706":2}}],["2d",{"2":{"670":2,"671":1,"683":1,"734":3,"737":1,"755":1,"761":1,"762":4}}],["29kb",{"2":{"647":1}}],["23",{"2":{"701":1,"706":2,"755":1,"845":1,"849":1}}],["23kb",{"2":{"647":1}}],["237+",{"2":{"643":1}}],["27kb",{"2":{"646":1,"647":1,"734":2}}],["27",{"0":{"526":1},"1":{"527":1,"528":1,"529":1},"2":{"525":1,"526":2}}],["24kb",{"2":{"734":1}}],["24",{"2":{"419":2,"845":1,"870":1}}],["24h",{"2":{"407":1}}],["25个文件",{"2":{"734":2}}],["25kb",{"2":{"646":1,"647":1,"734":2}}],["25",{"2":{"267":2,"755":1}}],["2s",{"2":{"171":1,"175":1,"924":1}}],["2秒",{"2":{"149":1}}],["2xx",{"2":{"133":1}}],["2xl",{"2":{"27":1,"28":1}}],["204",{"2":{"801":1}}],["2016",{"2":{"762":1}}],["2015年启动",{"2":{"758":1}}],["2015",{"2":{"307":1}}],["20+",{"2":{"757":1,"762":1,"778":1}}],["20个",{"2":{"734":1}}],["20kb",{"2":{"734":2}}],["2020",{"2":{"965":1}}],["2021",{"0":{"964":1},"2":{"947":1}}],["2026",{"2":{"881":1}}],["20260328",{"2":{"474":1}}],["2025",{"2":{"441":1,"518":1,"525":1,"881":1}}],["2022年执行良好",{"2":{"942":1}}],["2022",{"2":{"331":3,"909":1,"948":1}}],["2023",{"2":{"331":1,"901":1,"906":1,"912":1,"917":1,"942":1}}],["202",{"2":{"152":1}}],["200k",{"2":{"437":1,"511":1}}],["2000",{"2":{"149":1,"169":1,"705":1,"715":1,"749":1,"814":1,"820":1}}],["200",{"2":{"117":1,"152":1,"164":1,"196":1,"197":1,"260":1,"572":1,"689":1,"807":6,"925":3}}],["200ms",{"2":{"59":1,"86":1,"136":1}}],["20",{"2":{"106":2,"366":1,"555":1,"642":1,"672":1,"677":1,"724":2,"843":1,"845":1,"870":1,"952":2,"962":1,"963":1}}],["2",{"0":{"2":1,"6":1,"10":1,"15":1,"17":1,"18":1,"19":2,"20":1,"21":1,"24":1,"26":1,"34":1,"65":1,"70":1,"72":1,"73":1,"74":2,"78":1,"82":1,"93":1,"100":1,"102":1,"103":1,"104":2,"105":1,"107":1,"111":1,"115":1,"118":1,"122":1,"127":1,"132":1,"137":1,"143":1,"146":1,"147":1,"148":2,"149":1,"152":1,"156":1,"160":1,"162":1,"163":1,"164":2,"167":1,"172":1,"178":1,"182":1,"183":1,"186":2,"189":1,"192":1,"195":1,"198":1,"204":1,"205":1,"206":1,"208":1,"210":2,"213":1,"220":1,"221":1,"222":2,"223":1,"224":1,"225":1,"228":1,"229":1,"230":2,"231":1,"232":1,"233":1,"234":1,"237":1,"243":1,"247":1,"253":1,"257":1,"258":1,"259":2,"260":1,"261":1,"262":1,"266":1,"273":1,"274":1,"275":2,"276":1,"277":1,"278":2,"279":1,"280":1,"281":1,"282":1,"283":1,"284":1,"285":1,"286":2,"287":1,"288":1,"289":1,"290":1,"291":1,"292":1,"295":1,"298":1,"305":1,"311":1,"318":1,"328":1,"334":1,"339":1,"349":1,"353":1,"358":1,"364":1,"365":1,"366":2,"367":1,"370":1,"373":1,"378":1,"383":1,"392":1,"395":1,"396":1,"397":2,"398":1,"399":1,"403":1,"406":1,"410":1,"415":1,"422":1,"423":1,"424":2,"425":1,"430":1,"435":1,"442":1,"446":1,"448":1,"454":1,"458":1,"459":1,"460":2,"461":1,"462":1,"468":1,"471":1,"475":1,"478":1,"481":1,"484":1,"489":1,"493":1,"497":1,"498":1,"499":2,"502":1,"506":1,"508":1,"512":1,"513":1,"514":1,"515":2,"518":1,"520":1,"521":1,"522":2,"526":1,"527":1,"528":2,"529":1,"532":1,"536":1,"542":1,"544":1,"545":1,"546":2,"547":1,"548":1,"549":1,"550":1,"554":1,"555":1,"556":2,"557":1,"560":1,"561":1,"562":2,"565":1,"568":1,"570":1,"573":1,"577":1,"581":1,"586":1,"591":1,"595":1,"599":1,"600":1,"601":2,"607":1,"618":1,"619":1,"620":1,"621":2,"625":1,"640":1,"644":1,"645":1,"646":2,"647":1,"650":1,"662":1,"666":1,"671":1,"674":1,"675":1,"680":1,"696":1,"700":1,"703":1,"704":1,"705":2,"706":1,"709":1,"723":1,"729":1,"731":1,"732":1,"733":2,"734":1,"737":1,"752":1,"756":1,"759":1,"760":1,"761":2,"762":1,"765":1,"777":1,"781":1,"785":1,"788":1,"789":1,"790":2,"791":1,"792":1,"797":1,"800":1,"804":1,"807":1,"810":1,"819":1,"833":1,"843":1,"846":1,"847":1,"848":2,"849":1,"850":1,"851":1,"854":1,"857":1,"864":1,"867":1,"871":1,"875":1,"878":1,"879":1,"880":2,"881":1,"884":1,"896":1,"899":1,"907":1,"910":1,"913":1,"921":1,"930":1,"941":1,"946":1,"951":1,"957":1,"961":1},"1":{"18":1,"19":1,"20":1,"21":1,"25":1,"26":1,"27":1,"28":1,"29":1,"35":1,"36":1,"37":1,"73":1,"74":1,"103":1,"104":1,"105":1,"106":2,"107":2,"108":2,"112":1,"113":1,"147":1,"148":1,"149":1,"163":1,"164":1,"183":1,"184":2,"185":2,"186":1,"187":3,"188":3,"189":1,"190":2,"191":2,"192":1,"193":2,"194":2,"195":1,"196":2,"197":2,"198":1,"199":2,"206":1,"207":2,"208":2,"209":2,"210":1,"221":1,"222":1,"223":1,"224":1,"225":1,"229":1,"230":1,"231":1,"232":1,"233":1,"234":1,"258":1,"259":1,"260":1,"261":1,"262":1,"274":1,"275":1,"276":1,"277":2,"278":2,"279":2,"280":2,"281":2,"282":2,"283":2,"284":1,"285":2,"286":2,"287":2,"288":2,"289":2,"290":2,"291":2,"292":2,"365":1,"366":1,"367":1,"396":1,"397":1,"398":1,"399":1,"416":1,"423":1,"424":1,"425":1,"447":1,"448":1,"449":1,"450":1,"459":1,"460":1,"461":1,"462":1,"479":1,"480":1,"481":1,"482":1,"483":1,"484":1,"485":1,"486":1,"487":1,"488":1,"489":1,"490":1,"491":1,"498":1,"499":1,"507":1,"508":1,"514":1,"515":1,"521":1,"522":1,"527":1,"528":1,"529":1,"545":1,"546":1,"547":1,"548":1,"549":1,"550":1,"555":1,"556":1,"557":1,"561":1,"562":1,"600":1,"601":1,"608":1,"609":1,"610":1,"620":1,"621":1,"645":1,"646":1,"647":1,"675":1,"676":1,"677":1,"704":1,"705":1,"706":1,"732":1,"733":1,"734":1,"760":1,"761":1,"762":1,"789":1,"790":1,"791":1,"792":1,"847":1,"848":1,"849":1,"850":1,"851":1,"879":1,"880":1,"881":1,"914":1,"915":1,"916":1,"917":1,"918":1,"952":1,"953":1,"954":1},"2":{"1":1,"3":1,"25":1,"27":2,"28":2,"33":1,"100":1,"101":1,"104":3,"106":1,"108":1,"111":1,"124":1,"127":1,"129":1,"140":1,"143":1,"148":1,"161":1,"166":1,"168":2,"169":2,"171":1,"175":1,"179":1,"223":3,"227":1,"230":2,"231":4,"232":1,"238":2,"254":1,"258":1,"259":3,"260":1,"261":1,"266":1,"281":1,"295":4,"304":2,"307":2,"313":1,"325":1,"329":1,"331":1,"342":1,"411":1,"439":1,"443":2,"449":1,"451":3,"464":1,"471":1,"472":1,"494":2,"504":1,"505":1,"506":6,"508":1,"581":1,"586":1,"591":1,"631":2,"640":1,"643":1,"646":1,"652":1,"699":2,"706":1,"728":1,"729":1,"732":1,"733":2,"734":4,"736":1,"739":1,"741":1,"749":1,"801":1,"821":1,"822":1,"832":1,"845":1,"856":1,"881":3,"884":1,"887":1,"888":2,"889":1,"895":1,"908":1,"921":1,"922":1,"925":1,"927":3,"928":5,"933":2,"942":1,"943":1,"952":2}}],["可做",{"2":{"959":1}}],["可如果我们慢慢固化了",{"2":{"958":1}}],["可人躺久了也会不自觉地想要尝试突破一下局限",{"2":{"950":1}}],["可它也能是让人在其面前最无奈",{"2":{"950":1}}],["可广泛应用的迭代实践套路",{"2":{"943":1}}],["可现实生活中时间不会多么充裕",{"2":{"942":1}}],["可分阶段来",{"2":{"942":1}}],["可终究没有改变最终的结果",{"2":{"917":1}}],["可插拔的停止条件和步骤准备",{"2":{"851":1}}],["可组合的中间件系统",{"2":{"844":1}}],["可配置重试间隔",{"2":{"830":1}}],["可连接任意",{"2":{"787":1}}],["可对内部元素添加事件监听",{"2":{"782":1}}],["可根据业务场景灵活选择渲染方式",{"2":{"755":1}}],["可根据业务特性全局开启或关闭",{"2":{"106":1}}],["可替换的",{"2":{"815":1}}],["可替换",{"2":{"739":1}}],["可渲染元素基类",{"2":{"762":1}}],["可渲染网格",{"2":{"737":1}}],["可渲染",{"2":{"734":1,"762":1}}],["可渲染对象",{"2":{"733":1}}],["可定制的商业图表方案",{"2":{"700":1}}],["可定制扩展",{"2":{"568":1}}],["可递归嵌套",{"2":{"680":1}}],["可绑定多个",{"2":{"661":1}}],["可见对象收集",{"2":{"739":1}}],["可见性与渲染",{"2":{"748":1}}],["可见性判断",{"2":{"739":1,"745":1}}],["可见性裁剪",{"2":{"733":1,"739":2}}],["可见性控制",{"2":{"646":1}}],["可见绘制",{"2":{"677":1,"683":1}}],["可见障碍",{"2":{"556":1}}],["可控的",{"2":{"931":1}}],["可控的闭环",{"2":{"1":1}}],["可控性",{"2":{"642":1}}],["可参考另一篇文章",{"2":{"588":1}}],["可包含多个文件",{"2":{"585":1}}],["可独立执行子任务",{"2":{"570":1}}],["可独立验证的行为",{"2":{"9":1}}],["可按主题拆分",{"2":{"570":1}}],["可按序执行",{"2":{"450":1}}],["可提交到",{"2":{"570":1}}],["可提前设计",{"2":{"200":1}}],["可执行",{"2":{"568":1}}],["可执行的",{"2":{"454":1}}],["可执行的描述",{"2":{"449":1}}],["可执行的精准意图",{"2":{"367":1}}],["可本地",{"2":{"567":1}}],["可浏览",{"2":{"561":1}}],["可重用与组合",{"2":{"547":1}}],["可重试错误",{"2":{"169":1}}],["可信赖",{"2":{"538":1}}],["可信基线",{"2":{"3":1}}],["可解释",{"2":{"537":1}}],["可观测性",{"0":{"537":1}}],["可精确解析的语义图谱",{"2":{"536":1}}],["可交付的代码",{"2":{"534":1}}],["可交付的工程化",{"2":{"525":1}}],["可交互",{"2":{"35":1,"70":1}}],["可一键部署到",{"2":{"561":1}}],["可一站访问",{"2":{"523":1}}],["可一旦系统出了问题",{"2":{"382":1,"908":1}}],["可从以下四个维度梳理自身诉求",{"2":{"519":1}}],["可将资料转为播客式对话",{"2":{"515":1}}],["可导入",{"2":{"515":1}}],["可调用的工具",{"2":{"506":1}}],["可感与不可感之间",{"2":{"506":1}}],["可追溯",{"2":{"491":1}}],["可追踪的",{"2":{"246":1}}],["可使用的",{"2":{"470":2}}],["可使用第三方",{"2":{"16":1}}],["可视化伴侣",{"2":{"888":1}}],["可视化伴侣触发条件与行为规范",{"2":{"881":1}}],["可视化辅助调试",{"2":{"734":1}}],["可视化测试",{"2":{"706":1}}],["可视化低代码编辑器",{"2":{"645":1}}],["可视化编辑器系统",{"0":{"656":1}}],["可视化编辑器",{"2":{"647":1}}],["可视化编辑器核心基础设施",{"2":{"647":1}}],["可视化编辑器层",{"2":{"646":1}}],["可视化编辑",{"2":{"641":1}}],["可视化工具",{"2":{"527":1}}],["可视化与工具的自动化",{"2":{"527":1}}],["可视化数据分析产出的图表",{"2":{"474":1}}],["可视化",{"2":{"470":1}}],["可视化阶段",{"2":{"468":1}}],["可视化时间旅行",{"2":{"110":1}}],["可预期",{"2":{"456":1}}],["可预测的秩序",{"2":{"332":1}}],["可持续跟进",{"2":{"568":1}}],["可持续工作流",{"2":{"441":1}}],["可持续运转的",{"2":{"440":1}}],["可持续更新的缓存资产",{"2":{"50":1}}],["可进化的工作流",{"2":{"427":1}}],["可操作的的子任务",{"2":{"422":1}}],["可管理",{"2":{"415":1,"438":1}}],["可打开",{"2":{"409":1}}],["可直接复制进项目",{"2":{"561":1}}],["可直接调用平台上数十万个开源模型",{"2":{"523":1}}],["可直接生成结构化笔记与任务清单",{"2":{"515":1}}],["可直接替代人工答疑",{"2":{"405":1}}],["可直接访问",{"2":{"230":1}}],["可乐是典型的薄利多销产品",{"2":{"392":1}}],["可乐好像一直没有涨价",{"2":{"392":1}}],["可乐的三十年价格迷局",{"0":{"392":1}}],["可乐不惜牺牲这一优势",{"2":{"391":1}}],["可乐高压圆柱均压",{"2":{"391":1}}],["可委托给智能代理自主完成",{"2":{"378":1}}],["可理解",{"2":{"367":1}}],["可迭代的思维模型",{"2":{"363":1}}],["可训练",{"2":{"363":1,"364":1}}],["可用于",{"2":{"662":1}}],["可用于创作",{"2":{"511":1}}],["可用于验证计算过程或生成可视化图表辅助讲解",{"2":{"494":1}}],["可用于任何异步",{"2":{"342":1}}],["可用性阈值",{"2":{"363":1}}],["可运行在浏览器和",{"2":{"342":1}}],["可访问的组件和代码分发平台",{"2":{"340":1}}],["可被多个接口复用",{"2":{"336":1}}],["可自主规划",{"2":{"564":1}}],["可自动规划多轮检索并生成结构化报告",{"2":{"518":1}}],["可自动整理行业数据",{"2":{"406":1}}],["可自治的子应用的架构模式",{"2":{"284":1}}],["可自建",{"2":{"21":1}}],["可读",{"2":{"270":1}}],["可读性和可维护性",{"2":{"921":1}}],["可读性",{"2":{"253":1,"889":1}}],["可辨识",{"2":{"230":1}}],["可辨识联合是联合类型最重要的设计模式",{"2":{"230":1}}],["可辨识联合",{"0":{"230":1}}],["可扩展的技术方案",{"2":{"558":1}}],["可扩展的",{"2":{"344":2}}],["可扩展",{"2":{"201":1}}],["可扩展性强",{"2":{"283":1,"845":1}}],["可扩展性",{"2":{"181":1,"200":1,"822":1}}],["可维护的组件的设计思想",{"2":{"296":1}}],["可维护",{"2":{"201":1}}],["可维护性和运行时性能之间找到完美平衡",{"2":{"928":1}}],["可维护性以及自动化交付体系",{"2":{"555":1}}],["可维护性",{"2":{"200":1,"292":1}}],["可选项",{"2":{"963":1}}],["可选继承",{"2":{"737":1}}],["可选素材附件",{"2":{"442":1}}],["可选初始数据",{"2":{"261":1}}],["可选",{"2":{"177":1,"210":1,"442":3,"498":1,"581":1,"764":3,"765":1,"927":1}}],["可选的无头",{"2":{"17":1}}],["可添加认证信息",{"2":{"169":1}}],["可携带请求体",{"2":{"169":1,"175":1}}],["可携带任意大小的",{"2":{"160":1}}],["可区分可重试错误与致命错误",{"2":{"167":1}}],["可多行",{"2":{"164":1}}],["可复用代码的关键技术",{"2":{"264":1}}],["可复用",{"2":{"156":1,"274":1,"296":1,"456":1}}],["可复用的类名的架构方法",{"2":{"925":1}}],["可复用的工具函数",{"2":{"847":1}}],["可复用的流程",{"2":{"592":1}}],["可复用的专属能力包",{"0":{"436":1}}],["可复用的独立组件",{"2":{"10":1}}],["可复用的自治单元",{"2":{"1":1}}],["可考虑",{"2":{"155":1}}],["可靠投递保障",{"2":{"133":1}}],["可靠投递与安全防护",{"0":{"133":1}}],["可靠性",{"2":{"15":1,"877":1}}],["可设为",{"2":{"100":1}}],["可关闭聚焦刷新",{"2":{"99":1}}],["可在项目根目录创建",{"2":{"571":1}}],["可在特定条件下自动触发",{"2":{"570":1}}],["可在",{"2":{"94":1}}],["可缓存",{"2":{"57":1}}],["可通过配置自定义模型服务",{"2":{"559":1}}],["可通过",{"2":{"31":1,"519":1}}],["可能答案中多少会涵盖点",{"2":{"945":1}}],["可能为其他项目配置或示例",{"2":{"762":1}}],["可能触发重新渲染",{"2":{"708":1}}],["可能有用的最简单的东西",{"2":{"361":1}}],["可能没有",{"2":{"233":2}}],["可能用得上",{"2":{"183":1}}],["可能是不完整的",{"2":{"166":1}}],["可能几秒也可能几十秒",{"2":{"156":1}}],["可能会因为环境变化而产生",{"2":{"425":1}}],["可能会因为",{"2":{"424":1}}],["可能会持续挂起",{"2":{"153":1}}],["可能会触发后端一系列的流式响应",{"2":{"113":1}}],["可能会在未来被新的框架取代",{"2":{"12":1}}],["可能导致用户",{"2":{"88":1}}],["可能被搜索引擎判定为",{"2":{"59":1}}],["可能耗时数小时",{"2":{"59":1}}],["可能影响性能",{"2":{"31":1}}],["可覆盖绝大多数场景",{"2":{"16":1}}],["可以缓解体重上升而选择大早上吃很多早餐",{"2":{"959":1}}],["可以直接把大模型生成的",{"2":{"934":1}}],["可以直接从",{"2":{"927":1}}],["可以经过短时间的学习就能较好地完成多个不同的任务",{"2":{"918":1}}],["可以去多次重复",{"2":{"917":1}}],["可以去阅读原著",{"2":{"907":1}}],["可以尝试摸索",{"2":{"908":1}}],["可以帮助我们更快",{"2":{"903":1}}],["可以帮助我们更好地利用",{"2":{"569":1}}],["可以定义自己的内置工具",{"2":{"868":1}}],["可以定义灵活的数据结构",{"2":{"263":1}}],["可以返回一个间隔",{"2":{"839":1}}],["可以在这里抛出异常并通过",{"2":{"839":1}}],["可以在此处统一处理所有",{"2":{"106":1}}],["可以在此处覆盖全局",{"2":{"99":1}}],["可以包含多个",{"2":{"680":1}}],["可以有子节点",{"2":{"680":1}}],["可以反哺",{"2":{"628":1}}],["可以从时间维度上来了解体重走势",{"2":{"960":1}}],["可以从",{"2":{"597":1}}],["可以得出以下结论",{"2":{"509":1}}],["可以得出两条选择结论",{"2":{"111":1}}],["可以调用相关插件生成与诗歌主题相符的图片",{"2":{"504":1}}],["可以并发处理双重任务",{"2":{"493":1}}],["可以是一个字符串",{"2":{"483":1}}],["可以是多行文本",{"2":{"161":1}}],["可以接管的环节",{"2":{"462":1}}],["可以根据需要自定义权限模式",{"2":{"482":1}}],["可以根据需要自定义输出格式",{"2":{"482":1}}],["可以根据需要自定义模型",{"2":{"482":1}}],["可以根据需要自定义最大轮数",{"2":{"482":1}}],["可以根据需要自定义系统提示",{"2":{"482":1}}],["可以根据需求生成多个独立的子智能体",{"2":{"415":1}}],["可以根据任务需求",{"2":{"443":1}}],["可以运行的可执行代码",{"2":{"442":1}}],["可以独立处理离散任务",{"2":{"438":1}}],["可以独立测试",{"2":{"292":1}}],["可以瞬间扫描过去三个月的所有项目会议纪要",{"2":{"417":1}}],["可以通过链接查阅的完整文档",{"2":{"572":1}}],["可以通过视觉识别和模拟鼠标键盘",{"2":{"411":1}}],["可以通过寻找非同质化体验",{"2":{"398":1}}],["可以通过寻找帕累托改进空间",{"2":{"398":1}}],["可以用体验优势",{"2":{"391":1}}],["可以计算概率",{"2":{"362":1}}],["可以生成代码",{"2":{"362":1}}],["可以模仿语气",{"2":{"362":1}}],["可以带着",{"2":{"355":1}}],["可以极大降低新知识创造的门槛",{"2":{"355":1}}],["可以针对不同的引入方式",{"2":{"335":1}}],["可以将",{"2":{"308":1}}],["可以自动放行",{"2":{"537":1}}],["可以自动通知其他监听该状态的模块",{"2":{"302":1}}],["可以自定义数据格式",{"2":{"160":1}}],["可以逐步升级或替换旧的子应用",{"2":{"285":1}}],["可以组合多个约束条件",{"2":{"264":1}}],["可以表达",{"2":{"263":1}}],["可以使用任意名称",{"2":{"311":1}}],["可以使用",{"2":{"263":1}}],["可以满足各种复杂的测试需求",{"2":{"225":1}}],["可以创建中间层配置",{"2":{"216":1}}],["可以智能地只编译发生变化的项目",{"2":{"207":1}}],["可以实现类型安全的对象属性访问",{"2":{"263":1}}],["可以实现",{"2":{"207":1}}],["可以重试",{"2":{"171":1}}],["可以承受一定数量的挂起连接",{"2":{"156":1}}],["可以承载搜索框",{"2":{"66":1}}],["可以执行任何异步操作",{"2":{"82":1}}],["可以各自选择不同的渲染策略",{"2":{"75":1}}],["可以看作是",{"2":{"53":1}}],["可以引入",{"2":{"7":1}}],["可以像排查电路图一样用万用表逐点测量",{"2":{"6":1}}],["可以先让它充当",{"2":{"2":1}}],["可验证的协作闭环",{"2":{"3":1}}],["可测试的数字资产",{"2":{"456":1}}],["可测试的",{"2":{"3":1}}],["让团队从",{"2":{"926":1}}],["让团队标准和个人自由可以共存",{"2":{"597":1}}],["让游戏时间延长一点",{"2":{"917":1}}],["让自己变得简洁",{"2":{"910":1}}],["让两者形成一个增强回路",{"2":{"909":1}}],["让能力匹配目标",{"2":{"622":1}}],["让知识真正为你所用",{"2":{"615":1}}],["让书籍成为连接自我与现实的桥梁",{"0":{"615":1}}],["让它对你的观点进行提问和反驳",{"2":{"610":1}}],["让它焕发新生",{"2":{"144":1}}],["让对方也能听懂",{"2":{"610":1}}],["让同一个",{"2":{"590":1}}],["让我能将精力聚焦于内容的创作",{"2":{"904":1}}],["让我来",{"2":{"585":1}}],["让我们在信息密度足够高的节点上",{"2":{"629":1}}],["让我们理解",{"2":{"598":1}}],["让我们可以将常用的工作流封装为斜杠命令",{"2":{"579":1}}],["让我们能够像编写后端服务一样",{"2":{"476":1}}],["让我们再从一个更全景的角度来分析",{"2":{"443":1}}],["让我们从单纯的",{"2":{"400":1}}],["让我们知晓可能性的边界",{"2":{"376":1}}],["让我们先通过一个简单的",{"2":{"295":1}}],["让规则精准生效",{"0":{"576":1}}],["让没有编程基础的人也能独立做出可上线的",{"2":{"561":1}}],["让大模型统一",{"2":{"548":1}}],["让大家都能用",{"2":{"438":1}}],["让每一次变更都可追溯",{"2":{"537":1}}],["让每个模块各司其职",{"2":{"294":1}}],["让用户按照",{"2":{"506":1}}],["让用户使用小精灵来创作更多",{"2":{"506":1}}],["让用户以",{"2":{"506":1}}],["让用户尽快看到页面结构",{"2":{"89":1}}],["让用户尽可能快地看到页面结构",{"2":{"87":1}}],["让人回归平衡",{"2":{"910":1}}],["让人专注于深度",{"2":{"628":1}}],["让人感触颇深",{"2":{"496":1}}],["让人们都能通过简单的",{"2":{"419":1}}],["让前沿技术精准落地",{"2":{"440":1}}],["让推理与行动交替进行",{"2":{"424":1}}],["让主脑始终保持清醒的大局观",{"2":{"415":1}}],["让真正想卖的选项脱颖而出",{"2":{"397":1}}],["让中间价",{"2":{"397":1}}],["让系统回归平衡",{"0":{"387":1}}],["让企业的发展速度与个人的生活节奏达成一种健康的平衡",{"2":{"379":1}}],["让外包承接繁琐",{"2":{"378":1}}],["让机器替代重复",{"2":{"378":1}}],["让在生成的洪流中锁定航向",{"2":{"376":1}}],["让你",{"2":{"362":1}}],["让你无需关心底层细节",{"2":{"163":1}}],["让工作充满",{"2":{"340":1}}],["让美与智能并进",{"2":{"340":1}}],["让全栈代码同构变得轻而易举",{"2":{"316":1}}],["让全局状态管理库回归其本质",{"2":{"97":1}}],["让未来类似的问题也能复用",{"2":{"271":1}}],["让使用者明确存储值的类型",{"2":{"263":1}}],["让编译器自动推断不仅代码更简洁",{"2":{"263":1}}],["让编译器能在每个分支中确定地知道当前类型",{"2":{"230":1}}],["让后续维护者一眼就知道这个泛型代表什么数据类型",{"2":{"263":1}}],["让后端跳过重复计算",{"2":{"89":1}}],["让客户端能够",{"2":{"176":1}}],["让客户端和网关之间维持一条长达数十秒的",{"2":{"136":1}}],["让客户端数据获取也具备了",{"2":{"90":1}}],["让开发者像搭积木一样直接在组件中堆砌样式",{"2":{"926":1}}],["让开发者在浏览器中零插件创建",{"2":{"728":1}}],["让开发者专注于业务逻辑和智能体行为的设计",{"2":{"478":1}}],["让开发者能将核心精力聚焦于产品逻辑本身",{"2":{"342":1}}],["让开发者无需关注数据缓存",{"2":{"103":1}}],["让开发者从繁琐的编码劳动中解放出来",{"2":{"12":1}}],["让应用在感官上具有",{"2":{"97":1}}],["让应用可控",{"2":{"5":1}}],["让性能在框架层解决",{"0":{"84":1}}],["让静态内容与动态内容各取所需",{"2":{"53":1}}],["让",{"0":{"537":1},"2":{"9":3,"367":1,"415":1,"418":1,"422":1,"427":1,"431":1,"441":1,"445":1,"457":1,"525":1,"547":1,"548":1,"557":1,"559":3,"564":1,"568":1,"597":1,"628":1,"902":1,"921":1}}],["让回调成为刚性契约",{"0":{"7":1}}],["让设计师和产品提前验收",{"2":{"3":1}}],["让代码意图一目了然",{"2":{"270":1}}],["让代码自描述性更强",{"2":{"255":1}}],["让代码本身成为直观的",{"2":{"2":1}}],["让代码库逐渐腐化",{"2":{"1":1}}],["让数据沿着从输入",{"2":{"1":1}}],["而笔者个人觉得自己从",{"2":{"965":1}}],["而疫情到来后我们更加主动拥抱",{"2":{"957":1}}],["而选择的类似应试教育的方式",{"2":{"946":1}}],["而德智皆寄于体",{"2":{"941":1,"959":1}}],["而终其天年",{"2":{"941":1}}],["而滥用",{"2":{"930":1}}],["而纯",{"2":{"928":1}}],["而调节回路",{"2":{"910":1}}],["而更关注能构建出怎样的建筑",{"2":{"902":1}}],["而愿意接纳新媒介的阅读者",{"2":{"613":1}}],["而具体的规范则分散到对应的规则文件中",{"2":{"575":1}}],["而具体的实现细节",{"2":{"11":1}}],["而要关注你能构建出怎样的建筑",{"2":{"554":1}}],["而来自",{"2":{"535":1}}],["而需要动态地观察",{"2":{"534":1}}],["而工程交付要求的却是确定性的",{"2":{"534":1}}],["而工具赋予了",{"2":{"411":1}}],["而被忽视的任务",{"2":{"528":1}}],["而到达创造者阶段",{"2":{"459":1}}],["而创造者也在精密的分工缝隙中",{"2":{"457":1}}],["而这一切的前提是得有个健硕的身体",{"2":{"959":1}}],["而这一能力最直接",{"2":{"441":1}}],["而这种能力恰恰源于那些正在被",{"2":{"531":1}}],["而这几百个零件是如何互相咬合",{"2":{"383":1}}],["而有些允许三个",{"2":{"400":1}}],["而牛奶需要低温储存",{"2":{"391":1}}],["而可乐却多装在圆瓶子里卖",{"2":{"391":1}}],["而经济学能帮我们拨开迷雾",{"2":{"390":1}}],["而90",{"2":{"383":1}}],["而应深挖特定圈层里的真实痛点",{"2":{"377":1}}],["而应是你的",{"2":{"337":1}}],["而本书提出了一个颠覆性的反向路径",{"2":{"377":1}}],["而那个皱眉的瞬间",{"2":{"376":1}}],["而真人的反馈则能补充",{"2":{"375":1}}],["而真正杰出的成就往往始于敏锐地注意到了知识边缘的",{"2":{"358":1}}],["而且国外的自由职业者是比国内多出很多的",{"2":{"955":1}}],["而且在闲暇的时候觉得自己在阅读方面不够系统化",{"2":{"947":1}}],["而且具备极强的说服力",{"2":{"475":1}}],["而且足够",{"2":{"359":1}}],["而且也导向更多的问题",{"2":{"358":1}}],["而言",{"2":{"354":1,"421":1}}],["而设计不当则可能成为负担",{"2":{"444":1}}],["而设计糟糕的",{"2":{"444":1}}],["而设计",{"2":{"344":1}}],["而默认导出在导入处重命名后容易脱离追踪",{"2":{"311":1}}],["而无需深入理解底层的分布式系统和计算架构",{"2":{"551":1}}],["而无需频繁发布",{"2":{"335":1}}],["而无需关心它们内部是如何实现的",{"2":{"295":1}}],["而无需改动接口定义本身",{"2":{"255":1}}],["而无需开发者手动处理流的切片逻辑",{"2":{"121":1}}],["而泛型",{"2":{"255":1}}],["而泛型在编译阶段就能捕获类型不匹配的问题",{"2":{"255":1}}],["而泛型让我们编写一套代码",{"2":{"255":1}}],["而此时客户端刚进入",{"2":{"149":1}}],["而使用轮询",{"2":{"137":1}}],["而生",{"2":{"120":1,"414":1}}],["而",{"2":{"104":1,"144":1,"159":2,"160":1,"181":1,"227":1,"336":1,"349":2,"350":1,"403":1,"415":1,"420":1,"427":1,"465":1,"918":1,"934":1}}],["而在",{"2":{"104":1,"415":1,"461":1,"537":1,"541":1}}],["而在于其与物理环境",{"2":{"419":1}}],["而在于它正确地选择了只在构建阶段处理所有复杂计算",{"2":{"66":1}}],["而在于我们是否真正理解其背后的设计哲学",{"2":{"1":1}}],["而不惜牺牲信息流转和获取的效率",{"2":{"613":1}}],["而不必每次重复交代",{"2":{"583":1}}],["而不去有意识地重构自身的职业能力",{"2":{"530":1}}],["而不需要从头开始整个推理链条",{"2":{"430":1}}],["而不需要关心具体文件结构",{"2":{"312":1}}],["而不需要依赖运行时异常",{"2":{"246":1}}],["而不需要重新执行代码逻辑",{"2":{"88":1}}],["而不影响最终结果",{"2":{"243":1}}],["而不是抽离",{"2":{"933":1}}],["而不是一团哈希乱码",{"2":{"924":1}}],["而不是把自己变成一个工具或发条去卷",{"2":{"907":1}}],["而不是为了把玩那一束装订起来的纸张",{"2":{"613":1}}],["而不是做学问的路径",{"2":{"608":1}}],["而不是模糊的",{"2":{"583":1}}],["而不是手动维护这些工具",{"2":{"527":1}}],["而不是预加载所有工具定义",{"2":{"439":1}}],["而不是写死在某个",{"2":{"438":1}}],["而不是只盯着存量结果干着急",{"2":{"384":1}}],["而不是虚无缥缈的广告创意上",{"2":{"379":1}}],["而不是成千上万个只索取不贡献的",{"2":{"379":1}}],["而不是胡乱幻觉",{"2":{"367":1}}],["而不是优化搜索算法",{"2":{"366":1}}],["而不是训练更快的马",{"2":{"366":1}}],["而不是避而不见",{"2":{"360":1}}],["而不是任由模型编造",{"2":{"352":1}}],["而不是直接导入",{"2":{"315":1}}],["而不是运行时",{"2":{"254":1}}],["而不是静默产生",{"2":{"237":1}}],["而不是将其塞入",{"2":{"5":1}}],["而保证这一一致性同样需要开发者自行负责",{"2":{"70":1}}],["而用",{"2":{"66":1}}],["而一个模糊的需求描述",{"2":{"12":1}}],["而非业务功能命名",{"2":{"925":1}}],["而非重复造轮子",{"2":{"904":1}}],["而非重复写simpledateformat代码",{"2":{"188":1}}],["而非目的",{"2":{"622":1}}],["而非陷入过度设计的泥潭",{"2":{"556":1}}],["而非盲目追求技术实现的",{"2":{"556":1}}],["而非死板的对话框",{"2":{"543":1}}],["而非死记硬背",{"2":{"407":1}}],["而非仅仅停留在",{"2":{"533":1}}],["而非单一速度",{"0":{"526":1},"1":{"527":1,"528":1,"529":1}}],["而非单方面的价值宣称",{"2":{"392":1}}],["而非顺序执行",{"2":{"472":1}}],["而非资料仓库",{"2":{"445":1}}],["而非资本的奴隶",{"0":{"379":1}}],["而非加载代码本身",{"2":{"443":1}}],["而非拷贝",{"2":{"314":1}}],["而非把泛型限制成某个具体类型",{"2":{"263":1}}],["而非参数和返回值的交叉",{"2":{"238":1}}],["而非编译后的",{"2":{"217":1}}],["而非盯着白屏等待",{"2":{"87":1}}],["而非一刀切",{"2":{"59":1}}],["而非",{"2":{"52":1,"181":1,"200":1,"451":1,"787":1,"822":1}}],["而非基础设施的维护",{"2":{"32":1}}],["而非通过命令式地操作",{"2":{"11":1}}],["而非直接手动修改",{"2":{"9":1}}],["而非零散的代码片段",{"2":{"9":1}}],["而非手动干预",{"2":{"9":1}}],["而非取代",{"2":{"1":1}}],["而是想基于以上延伸思考引出一个新的业余尝试",{"2":{"957":1}}],["而是想抛出问题",{"2":{"955":1}}],["而是再次分解和渐进明细碎片清单",{"2":{"953":1}}],["而是碎片清单的再次分解与渐进明细",{"2":{"953":1}}],["而是从清单中读取",{"2":{"953":1}}],["而是具备高度确定性的工程基建",{"2":{"934":1}}],["而是直接在",{"2":{"925":2}}],["而是致力于解决作用域问题",{"2":{"923":1}}],["而是现代化前端工程化中用于封装组件样式",{"2":{"923":1}}],["而是与其他方案",{"2":{"921":1}}],["而是跳到另一个从概率上对自己有利的局里",{"2":{"917":1}}],["而是重在强调数学思维真的又底层又有用",{"2":{"911":1}}],["而是由表达式引擎动态计算",{"2":{"774":1}}],["而是信息熵增与泛滥",{"2":{"620":1}}],["而是为了升级我们思考现实",{"2":{"615":1}}],["而是沦为了一种排解郁闷",{"2":{"612":1}}],["而是面对面的平等讨论",{"2":{"610":1}}],["而是面向接口编程的具象化",{"2":{"319":1}}],["而是沿着",{"2":{"609":1}}],["而是培养盲从信徒的方法",{"2":{"608":1}}],["而是隐藏在我们每天的日常选择中",{"2":{"605":1}}],["而是支撑我们跨越漫长生命周期",{"2":{"605":1}}],["而是学会在个人体验与宏观世界之间搭建桥梁",{"2":{"604":1}}],["而是认知系统的彻底迭代",{"2":{"603":1}}],["而是认知栈",{"2":{"553":1}}],["而是决策的精度与责任的边界",{"2":{"602":1}}],["而是建立在极致的风险验证与深刻的人性洞察之上",{"2":{"600":1}}],["而是演变为一个任务协调者",{"2":{"592":1}}],["而是创造一个拥有独立身份",{"2":{"589":1}}],["而是正在成为真正的",{"2":{"569":1}}],["而是转变为构建以下三层认知模型",{"2":{"558":1}}],["而是转向右侧的",{"2":{"443":1}}],["而是包含了",{"2":{"540":1}}],["而是那个能在随机生成的迷雾中",{"2":{"539":1}}],["而是给了你",{"2":{"539":1}}],["而是始终锚定于可预期的工程范式之内",{"2":{"532":1}}],["而是对约束条件的定义",{"2":{"532":1}}],["而是有能力把系统打磨得更健壮",{"2":{"528":1}}],["而是软件工程中长期被牺牲掉的",{"2":{"526":1}}],["而是软件工程几十年沉淀下来的智慧结晶",{"2":{"12":1}}],["而是改变了",{"2":{"526":1}}],["而是如何将这种碎片化的",{"2":{"525":1}}],["而是技术对真实人性的体察与关怀",{"2":{"495":1}}],["而是像一位耐心的老教师一样",{"2":{"495":1}}],["而是基于对大语言模型",{"2":{"493":1}}],["而是基于真实抓取的数据生成的专业资产",{"2":{"475":1}}],["而是基于业务领域封装成",{"2":{"99":1}}],["而是希望你用更低的成本",{"2":{"466":1}}],["而是知道什么是对的",{"2":{"460":1}}],["而是知识的生成与自主探索",{"2":{"355":1}}],["而是判断力",{"2":{"459":1}}],["而是可以沿着层级逐步演进",{"2":{"459":1}}],["而是乘数效应",{"0":{"458":1},"1":{"459":1,"460":1,"461":1,"462":1}}],["而是写",{"2":{"449":1}}],["而是规则或仓库约定",{"2":{"445":1}}],["而是规范的",{"2":{"12":1}}],["而是在实际场景中测试智能体工作流的边界",{"2":{"901":1}}],["而是在",{"2":{"464":1}}],["而是在每一个关键步骤后都进行一次",{"2":{"431":1}}],["而是在运行时按需",{"2":{"46":1}}],["而是根据每一步的反馈动态调整",{"2":{"424":1}}],["而是能自主读取代码库",{"2":{"567":1}}],["而是能跑得更稳",{"2":{"528":1}}],["而是能够独立完成从想法到上线的闭环",{"2":{"461":1}}],["而是能够一人承担",{"2":{"361":1}}],["而是能否构建出深谙业务逻辑",{"2":{"420":1}}],["而是负责脏活累活",{"2":{"406":1}}],["而是被已经发生在过去的投入",{"2":{"393":1}}],["而是被遗漏的那个类型",{"2":{"232":1}}],["而是克制",{"2":{"381":1}}],["而是先用最原始",{"2":{"378":1}}],["而是看不见的",{"2":{"367":1}}],["而是因为它也讲述了一个资质普通又平凡的少年",{"2":{"958":1}}],["而是因为技术底座的剧变",{"2":{"457":1}}],["而是因为",{"2":{"366":1}}],["而是站在雨夜路边",{"2":{"366":1}}],["而是",{"2":{"366":2,"367":1,"376":1,"492":1,"529":1,"887":1}}],["而是要建立辩证的",{"2":{"618":1}}],["而是要具备",{"2":{"461":1}}],["而是要将我们从繁琐的",{"2":{"420":1}}],["而是要量化思考",{"2":{"365":1}}],["而是要在混沌的业务逻辑之上",{"2":{"332":1}}],["而是倾向于将多个关联包放在一个仓库中",{"2":{"335":1}}],["而是进阶为了一名掌控全局的",{"2":{"303":1}}],["而是随着",{"2":{"298":1}}],["而是随着查询次数的增加而递增",{"2":{"146":1}}],["而是手段",{"2":{"292":1}}],["而是会思考",{"2":{"271":1}}],["而是让",{"2":{"536":1}}],["而是让你成为一名具备",{"2":{"400":1}}],["而是让我们",{"2":{"201":1}}],["而是让技术各归其位的顺势而为",{"2":{"144":1}}],["而是用",{"2":{"188":1}}],["而是优先用简单方案解决问题",{"2":{"181":1}}],["而是检查数据是否有更新",{"2":{"151":1}}],["而是将原因归咎于外界",{"2":{"612":1}}],["而是将自己定义为知识发现引擎",{"2":{"348":1}}],["而是将这个",{"2":{"151":1}}],["而是将关键架构决策内化为框架约定",{"2":{"71":1}}],["而是深入理解每种技术的边界与代价",{"2":{"144":1}}],["而是一场基于",{"2":{"603":1}}],["而是一场伴随模型能力进化的动态博弈",{"2":{"534":1}}],["而是一场关乎系统架构与产品思维的深刻重塑",{"2":{"440":1}}],["而是一位帮助家长掌握科学辅导方法的",{"2":{"492":1}}],["而是一组相互链接的要素",{"2":{"383":1}}],["而是一套可拆解",{"2":{"363":1}}],["而是一套经过高频训练后内化为本能的思维算法",{"2":{"363":1}}],["而是一套精巧的兼容性封装",{"2":{"306":1}}],["而是一种构建你自己的组件库的方法",{"2":{"340":1}}],["而是一种",{"2":{"144":1}}],["而是一个新的全栈价值公式",{"2":{"902":1}}],["而是一个闭环的多智能体协作流水线",{"2":{"535":1}}],["而是一个多工种流水线",{"2":{"468":1}}],["而是一个务实的分布式控制平面",{"2":{"419":1}}],["而是一个能够深度理解私域知识并基于此进行复杂决策的智能实体",{"2":{"417":1}}],["而是一个拥有广泛能力边界",{"2":{"414":1}}],["而是一个自主的目标执行者",{"2":{"414":1}}],["而是一个独立的",{"2":{"125":1}}],["而是一个专门用于处理服务端数据状态的异步数据管理库",{"2":{"103":1}}],["而是一次彻底的",{"2":{"125":1}}],["而是立即将",{"2":{"86":1}}],["而是源于底层架构范式的深度契合",{"2":{"11":1}}],["而是纯粹的结构编码",{"2":{"3":1}}],["而是通过给组件的",{"2":{"924":1}}],["而是通过上下文说服",{"2":{"887":1}}],["而是通过撰写严谨的",{"2":{"542":1}}],["而是通过架构上的解耦",{"2":{"431":1}}],["而是通过特定的协议头",{"2":{"117":1}}],["而是通过",{"2":{"2":1,"380":1}}],["的奇葩",{"2":{"959":1}}],["的法则",{"2":{"958":1}}],["的准则",{"2":{"942":2}}],["的锻炼后",{"2":{"938":1}}],["的转折点上",{"2":{"934":1}}],["的转换",{"2":{"70":1}}],["的转换规则",{"2":{"11":1}}],["的友好度评估",{"2":{"934":1}}],["的规范",{"2":{"933":1}}],["的规划能力主要由两部分协同驱动",{"2":{"421":1}}],["的书写快感",{"2":{"933":1}}],["的反模式",{"2":{"930":1}}],["的反馈闭环",{"0":{"369":1}}],["的布局",{"2":{"930":1}}],["的主力构建层",{"0":{"930":1}}],["的主场",{"2":{"143":3}}],["的嵌套也不应超过",{"2":{"931":1}}],["的嵌套语法",{"2":{"931":1}}],["的嵌套",{"2":{"928":1}}],["的绝对安全",{"2":{"928":1}}],["的速度与",{"2":{"928":1}}],["的单文件组件",{"2":{"928":1}}],["的单向流",{"2":{"119":1}}],["的尽头",{"2":{"928":1}}],["的两难境地",{"2":{"928":1}}],["的两种模式",{"0":{"48":1}}],["的博弈",{"2":{"928":1}}],["的类名",{"2":{"927":1}}],["的类型推导",{"2":{"927":1}}],["的类型推断能力已经非常成熟",{"2":{"263":1}}],["的类型系统是一座宝库",{"2":{"271":1}}],["的类型关系",{"2":{"263":1}}],["的类型层级中",{"2":{"244":1}}],["的类型是",{"2":{"237":2}}],["的类型",{"2":{"234":1}}],["的类型检查中",{"2":{"321":1}}],["的类型检查",{"2":{"227":1}}],["的颜色系统采用",{"2":{"925":1}}],["的困惑",{"2":{"924":1}}],["的经典原生直觉",{"2":{"924":1}}],["的经典题",{"2":{"494":1}}],["的哈希字符串",{"2":{"923":1}}],["的体积",{"2":{"922":1}}],["的体积开销",{"2":{"124":1}}],["的发展",{"2":{"919":1}}],["的范畴",{"2":{"907":1}}],["的范式",{"2":{"887":1}}],["的范式革命",{"0":{"420":1}}],["的范式转变",{"2":{"406":1}}],["的社会生活状态",{"2":{"906":1}}],["的初衷不谋而合",{"2":{"904":1}}],["的初始化",{"2":{"858":1}}],["的周期从数周压缩至数小时",{"2":{"902":1}}],["的独立作品",{"2":{"901":1}}],["的痛点",{"2":{"901":1}}],["的痛苦过程中",{"2":{"531":1}}],["的服务端开发",{"2":{"901":1}}],["的服务器运行时是额外开销",{"2":{"93":1}}],["的策略模式",{"2":{"889":1}}],["的策略解析依赖图",{"2":{"314":1}}],["的目标",{"2":{"886":1}}],["的插件清单",{"2":{"879":1}}],["的插件链完成编译",{"2":{"65":1}}],["的插件链会遍历所有",{"2":{"62":1}}],["的选择",{"2":{"877":1}}],["的软件开发者",{"2":{"875":1}}],["的零依赖",{"2":{"874":1}}],["的零配置或低配置体验",{"2":{"343":1}}],["的适配器",{"2":{"866":1}}],["的统一入口",{"2":{"853":1}}],["的参照标准",{"2":{"928":1}}],["的参考模板",{"2":{"850":1}}],["的参数",{"2":{"489":1}}],["的构建系统使用",{"2":{"778":1}}],["的构建顺序",{"2":{"3":1}}],["的注册器模式注册和查找",{"2":{"768":1}}],["的创建和生命周期",{"2":{"765":1}}],["的创新",{"2":{"360":1}}],["的并发播放",{"2":{"743":1}}],["的并集",{"2":{"229":1,"239":2}}],["的配置中推导出来",{"2":{"927":1}}],["的配置",{"2":{"709":1}}],["的配置趋向于更严格",{"2":{"322":1}}],["的缩略图预览",{"2":{"706":1}}],["的语法",{"2":{"921":1}}],["的语法糖",{"2":{"303":1}}],["的语义",{"2":{"680":1}}],["的四层节点树",{"2":{"675":1}}],["的四个维度",{"0":{"352":1}}],["的入口流程设计为快速路径优先",{"2":{"795":1}}],["的入口",{"2":{"675":1,"736":1}}],["的树形节点抽象",{"2":{"670":1}}],["的树形状态管理系统",{"2":{"641":1}}],["的底层核心基石",{"2":{"927":1}}],["的底层复杂性",{"2":{"670":1}}],["的底层设计",{"2":{"496":1}}],["的心",{"2":{"957":1}}],["的心脏",{"2":{"652":1}}],["的心智",{"2":{"350":1}}],["的升华路径",{"2":{"628":1}}],["的建设",{"2":{"628":1}}],["的建立遵循一个标准化的协议升级流程",{"2":{"126":1}}],["的差异",{"2":{"626":1}}],["的诊断都错了",{"2":{"622":1}}],["的恐惧",{"2":{"617":1}}],["的认知偏差",{"2":{"616":1}}],["的认知还停留在",{"2":{"180":1}}],["的系统性错觉",{"0":{"616":1},"1":{"617":1,"618":1}}],["的幻觉",{"2":{"610":1,"612":1}}],["的小例子",{"2":{"917":1}}],["的小世界",{"2":{"604":1}}],["的小型外包项目",{"2":{"344":1}}],["的傲慢",{"2":{"604":1}}],["的精密经营",{"2":{"603":1}}],["的精髓在于它不再追求一次性交付",{"2":{"117":1}}],["的精髓在于以组件化为核心",{"2":{"1":1}}],["的残酷市场中",{"2":{"600":1}}],["的白名单",{"2":{"597":1}}],["的详细规范和编写方法",{"2":{"588":1}}],["的详细指南",{"2":{"443":1}}],["的助手",{"2":{"584":1}}],["的响应准确性",{"2":{"578":1}}],["的响应模式",{"2":{"178":1}}],["的企业内部知识库问答系统",{"2":{"573":1}}],["的篇幅建议控制在",{"2":{"572":1}}],["的放置位置决定其作用范围",{"2":{"571":1}}],["的每一项规则",{"2":{"571":1}}],["的魔法时刻",{"2":{"569":1}}],["的行为模式",{"2":{"887":1}}],["的行为变得可观测",{"2":{"491":1}}],["的行业标杆",{"2":{"567":1}}],["的操作员",{"2":{"556":1}}],["的边界",{"0":{"931":1}}],["的边界就不再是技术栈",{"2":{"553":1}}],["的边界到底在哪里",{"2":{"553":1}}],["的专家",{"2":{"551":1,"584":1}}],["的专业技术工单",{"2":{"418":1}}],["的根因",{"2":{"550":1,"567":1}}],["的根本性颠覆",{"2":{"403":1}}],["的游击战",{"2":{"550":1}}],["的玄学转化为可量化的工程指标",{"2":{"550":1}}],["的泛化能力和开发效率",{"2":{"547":1}}],["的文化",{"2":{"601":1}}],["的文件",{"2":{"581":2}}],["的文件夹",{"2":{"547":1}}],["的文档内容以",{"2":{"62":1}}],["的无缝转变",{"2":{"547":1}}],["的洪流下",{"2":{"539":1}}],["的这份报告",{"2":{"539":1}}],["的这份深度观测",{"2":{"525":1}}],["的角色",{"2":{"535":1,"553":1}}],["的唯一方式",{"2":{"531":1}}],["的唯一依据",{"2":{"185":1}}],["的刻意练习",{"2":{"531":1}}],["的丧失",{"2":{"531":1}}],["的报告中提到",{"2":{"531":1}}],["的资格",{"2":{"530":1}}],["的资料库变成了",{"2":{"417":1}}],["的研究实践告诉我们",{"2":{"598":1}}],["的研究揭示了一个冷酷的现实",{"2":{"530":1}}],["的研究给出了一个更具洞察力的视角",{"2":{"526":1}}],["的定义结构",{"0":{"591":1}}],["的定义被重新改写为",{"2":{"540":1}}],["的定义权",{"2":{"539":1}}],["的定义能力",{"2":{"530":1}}],["的定盘星",{"0":{"433":1}}],["的观察揭示了一个关键转折点",{"2":{"527":1}}],["的观点与",{"2":{"361":1}}],["的浅层结论",{"2":{"526":1}}],["的苦力活中抽身",{"2":{"526":1}}],["的产物",{"2":{"903":1}}],["的产出从",{"2":{"525":1}}],["的产品人",{"2":{"400":1}}],["的产品",{"2":{"366":1}}],["的产品形态天然排斥传统的插入式链接广告",{"2":{"354":1}}],["的挑战",{"2":{"525":1}}],["的隐忧和",{"2":{"525":1}}],["的任务",{"2":{"525":1}}],["的碎片",{"2":{"515":1}}],["的总结",{"2":{"515":1}}],["的搭建",{"2":{"509":1}}],["的平声韵",{"2":{"508":1}}],["的平庸产品",{"2":{"366":1}}],["的章法",{"2":{"508":1}}],["的镜头式语言增强画面感",{"2":{"508":1}}],["的缥缈",{"2":{"508":1}}],["的千古遗憾",{"2":{"508":1}}],["的意象",{"2":{"508":1}}],["的怅惘",{"2":{"508":1}}],["的设定要求",{"2":{"507":1}}],["的设计意图说明",{"2":{"881":1}}],["的设计目标",{"2":{"760":1}}],["的设计初衷",{"2":{"597":1}}],["的设计理念相同",{"2":{"596":1}}],["的设计方向",{"2":{"439":1}}],["的设计哲学",{"2":{"66":1,"296":1}}],["的沟通",{"2":{"506":1}}],["的结构化思路",{"2":{"506":1}}],["的结果已经足以回答问题时",{"2":{"427":1}}],["的结果报错",{"2":{"427":1}}],["的永恒价值",{"2":{"505":1}}],["的深渊",{"2":{"532":1}}],["的深意",{"2":{"505":1}}],["的深度积累",{"2":{"464":1}}],["的深度解耦",{"2":{"419":1}}],["的深度产品观察与分析",{"2":{"348":1}}],["的深度交流",{"2":{"116":1}}],["的格式输入",{"2":{"504":1}}],["的质量直接决定了",{"2":{"503":1}}],["的综合模式",{"2":{"502":1}}],["的高频交互需求",{"2":{"494":1}}],["的高性价比已成为消费者心理中的一个强锚定",{"2":{"392":1}}],["的高性能与",{"2":{"50":1}}],["的高性能和",{"2":{"46":1}}],["的双重需求",{"2":{"493":1}}],["的双重能力",{"2":{"367":1}}],["的探索感兴趣",{"2":{"491":1}}],["的探索到",{"2":{"309":1}}],["的开发者",{"2":{"875":1}}],["的开发者的常用选择",{"2":{"523":1}}],["的开发重心也正在转向",{"2":{"491":1}}],["的开源可自托管替代方案",{"2":{"567":1}}],["的开源平替",{"2":{"567":1}}],["的开源",{"2":{"344":1}}],["的流式响应包含多种事件类型",{"2":{"488":1}}],["的流式输出",{"2":{"487":1,"489":1}}],["的捕获与恢复",{"0":{"486":1}}],["的思考路径",{"2":{"484":1}}],["的思维跨越",{"2":{"602":1}}],["的思维",{"2":{"476":1,"601":1}}],["的思维负担",{"2":{"444":1}}],["的思维边界",{"2":{"303":1}}],["的思维高度一致",{"2":{"11":1}}],["的跨学科视野",{"2":{"604":1}}],["的跨越",{"2":{"482":1}}],["的跨环境规范",{"2":{"298":1}}],["的演进已进入一个崭新的阶段",{"2":{"477":1}}],["的演进正以前所未有的速度重塑着人类的劳动范式",{"2":{"420":1}}],["的必经之路",{"2":{"476":1}}],["的链路",{"2":{"475":1,"534":1}}],["的表现",{"2":{"475":1}}],["的表达方式",{"2":{"230":1}}],["的具体任务",{"2":{"470":1}}],["的具体类型",{"2":{"254":1}}],["的职责隔离",{"2":{"467":1}}],["的理解力",{"2":{"539":1}}],["的理论优势",{"2":{"467":1}}],["的理念应运而生",{"2":{"922":1}}],["的理念",{"2":{"344":2,"353":1}}],["的迷茫期",{"2":{"465":1}}],["的成本首次降到了可接受的阈值之下",{"2":{"527":1}}],["的成长路径",{"0":{"464":1}}],["的成功证明了",{"2":{"356":1}}],["的复利效应",{"0":{"463":1}}],["的复杂逻辑时",{"2":{"329":1}}],["的部分",{"2":{"462":1}}],["的交互哲学",{"0":{"543":1}}],["的交互深度将会再上一个台阶",{"2":{"509":1}}],["的交集",{"2":{"462":1}}],["的交叉",{"2":{"250":1}}],["的乘数模型",{"2":{"458":1}}],["的编写技巧",{"2":{"496":1}}],["的编写",{"2":{"456":1}}],["的编译器",{"2":{"66":1}}],["的错误日志获取工具与",{"2":{"455":1}}],["的改动是原子的",{"2":{"451":1}}],["的触发要求",{"2":{"451":1}}],["的面纱",{"2":{"441":1}}],["的共识",{"2":{"441":1}}],["的状态机",{"2":{"706":1}}],["的状态",{"2":{"441":1}}],["的状态变量",{"2":{"103":1}}],["的落地实践中",{"2":{"441":1}}],["的视角",{"2":{"440":1}}],["的视角将贯穿全文",{"2":{"227":1}}],["的方向发展",{"2":{"613":1}}],["的方式输入内容",{"2":{"506":1}}],["的方式指定诗歌形式",{"2":{"506":1}}],["的方法",{"2":{"439":1}}],["的方案",{"2":{"110":2,"144":1,"160":2}}],["的需求会大幅减少",{"2":{"439":1}}],["的普及",{"2":{"439":1}}],["的外部桥梁问题",{"2":{"439":1}}],["的通用方法论教给所有代理",{"2":{"438":1}}],["的通信",{"2":{"289":1}}],["的第一步",{"2":{"433":1}}],["的第一性原理是直接提供具有事实支撑的答案",{"2":{"349":1}}],["的元认知检查",{"2":{"431":1}}],["的决策链路",{"2":{"537":1}}],["的决策过程透明可见",{"0":{"537":1}}],["的决策",{"2":{"427":1}}],["的决策权比",{"2":{"12":1}}],["的生产力工具",{"2":{"417":1}}],["的拥有细腻的品牌调性",{"2":{"415":1}}],["的拥有最严苛的安全规范",{"2":{"415":1}}],["的出现改变了这个算式",{"2":{"528":1}}],["的出现",{"2":{"415":1,"438":1,"456":1}}],["的闭环",{"2":{"414":1,"484":1,"622":1}}],["的分发",{"2":{"680":1}}],["的分享",{"2":{"496":1}}],["的分类与未来",{"0":{"413":1},"1":{"414":1,"415":1,"416":1,"417":1,"418":1,"419":1}}],["的分层状态管理",{"2":{"653":1}}],["的分层结构",{"2":{"226":1}}],["的分层架构完美闭环",{"2":{"416":1}}],["的分层架构",{"0":{"279":1},"2":{"189":1,"879":1}}],["的内存态",{"2":{"622":1}}],["的内部机制",{"2":{"569":1}}],["的内心独白",{"2":{"488":1}}],["的内在能力",{"2":{"412":1}}],["的内容与代码",{"2":{"359":1}}],["的陈旧系统",{"2":{"411":1}}],["的素质",{"2":{"410":1}}],["的记忆将变得越来越深邃且精准",{"2":{"410":1}}],["的上下文窗口",{"2":{"410":1,"437":1,"879":1}}],["的上下文环境",{"2":{"367":1}}],["的原始解析",{"2":{"410":1}}],["的原因",{"2":{"124":1,"198":1}}],["的瞬时感知",{"2":{"410":1}}],["的售后咨询与查询",{"2":{"405":1}}],["的追求",{"2":{"403":1}}],["的海量知识储备让",{"2":{"402":1}}],["的事实标准",{"2":{"934":1}}],["的事",{"2":{"601":1}}],["的事情",{"2":{"396":1,"621":1}}],["的事件对象完全一致",{"2":{"168":1}}],["的事件流协议",{"2":{"159":1}}],["的事件触发机制",{"2":{"130":1}}],["的证明",{"2":{"393":1}}],["的营销锁定自身品牌策略",{"2":{"392":1}}],["的均衡状态",{"2":{"392":1}}],["的权衡",{"2":{"391":1}}],["的权利",{"2":{"373":1}}],["的增强回路",{"2":{"387":2}}],["的地方",{"2":{"387":1}}],["的可靠支柱时",{"2":{"377":1}}],["的可能",{"2":{"11":1}}],["的终点从来不是",{"2":{"376":1}}],["的终止信号",{"2":{"117":1}}],["的化学反应",{"2":{"376":1}}],["的焦虑中解放",{"0":{"376":1}}],["的代码后",{"2":{"555":1}}],["的代码索引",{"2":{"536":1}}],["的代码门槛急剧降低之后",{"2":{"457":1}}],["的代码审查工具结合",{"2":{"455":1}}],["的代码变动",{"2":{"451":1}}],["的代码",{"2":{"375":1,"581":2}}],["的代码使用情况",{"2":{"203":1}}],["的官网之所以让人惊叹",{"2":{"372":1}}],["的官方规范",{"2":{"307":1}}],["的时代",{"2":{"525":1,"532":1}}],["的时刻",{"2":{"370":1}}],["的时间从数周压缩到数小时",{"2":{"557":1}}],["的时间",{"2":{"199":1,"365":1}}],["的时间应投入于架构设计",{"2":{"1":1}}],["的敏感度",{"2":{"370":1}}],["的过程",{"2":{"367":1,"429":1}}],["的不同状态完美映射为",{"2":{"930":1}}],["的不确定性",{"2":{"543":1}}],["的不一定是他们",{"2":{"366":1}}],["的不可替代场景",{"2":{"240":1}}],["的真实场景中思考",{"2":{"366":1}}],["的直觉",{"2":{"365":1}}],["的直接耦合",{"2":{"104":1}}],["的伪需求",{"2":{"365":1}}],["的低垂机会",{"2":{"365":1}}],["的能力边界不仅取决于模型本身",{"2":{"476":1}}],["的能力增长并非线性",{"2":{"464":1}}],["的能力演进可归纳为三个递进的层级",{"2":{"459":1}}],["的能力封装为直观的",{"2":{"441":1}}],["的能力",{"2":{"365":1,"403":1,"427":1,"493":1}}],["的艺术",{"2":{"364":1,"367":1}}],["的临界点",{"2":{"363":1}}],["的爆发力",{"2":{"539":1}}],["的爆发赋予了它真正的",{"2":{"402":1}}],["的爆发",{"2":{"363":1}}],["的算力跨越执行的鸿沟",{"2":{"362":1}}],["的输出质量",{"2":{"550":1}}],["的输出带有一定随机性",{"2":{"538":1}}],["的输出下限与上限",{"2":{"503":1}}],["的输出",{"2":{"360":1}}],["的力量",{"2":{"360":1}}],["的勇气",{"0":{"360":1}}],["的门槛降到极低时",{"2":{"357":1}}],["的尾部延迟",{"2":{"353":1}}],["的继任者",{"2":{"343":1}}],["的强制性流程",{"2":{"494":1}}],["的强类型推导系统",{"2":{"342":1}}],["的强大之处在于它能跨模块追踪数据流",{"2":{"319":1}}],["的项目",{"2":{"342":1}}],["的查询语言",{"2":{"342":1}}],["的更简洁",{"2":{"342":1}}],["的现代",{"2":{"342":1}}],["的现代化",{"2":{"341":1}}],["的现代项目目录结构示例",{"2":{"274":1,"275":1}}],["的热门开源ui组件库",{"2":{"340":1}}],["的人已经知道为什么了",{"2":{"917":1}}],["的人",{"2":{"337":1,"375":1,"544":1}}],["的混战中学会了兼容的艺术",{"2":{"337":1}}],["的混合",{"2":{"57":1}}],["的混合粒度是组件级别",{"2":{"51":1}}],["的混合方案",{"2":{"46":1}}],["的进化史",{"2":{"525":1}}],["的进化",{"0":{"402":1},"2":{"337":1}}],["的进阶配置",{"2":{"335":1}}],["的进阶方案",{"2":{"180":1}}],["的模块化拆分",{"2":{"597":1}}],["的模块化实践",{"2":{"337":1}}],["的模块加载机制遵循以下规则",{"2":{"334":1}}],["的模式",{"2":{"3":1,"343":1}}],["的路径查找逻辑",{"2":{"322":1}}],["的路由系统遵循一个原则",{"2":{"76":1}}],["的首选",{"2":{"322":1,"335":1,"477":1,"523":1}}],["的导出与导入",{"2":{"318":1}}],["的执行效率和输出质量",{"2":{"444":1}}],["的执行机构",{"2":{"412":1}}],["的执行顺序对于排查复杂的副作用",{"2":{"314":1}}],["的执行力更为稀缺",{"2":{"12":1}}],["的大一统",{"2":{"309":1}}],["的依赖",{"2":{"308":1}}],["的运行时加载不同",{"2":{"307":1}}],["的运行时结构完全相同",{"2":{"247":1}}],["的标准审美",{"2":{"926":1}}],["的标准化也正式开启",{"2":{"441":1}}],["的标准姿势",{"2":{"306":1}}],["的标准格式需要通过",{"2":{"160":1}}],["的百家争鸣",{"2":{"303":1}}],["的暗夜摸索",{"2":{"303":1}}],["的封装",{"2":{"287":1}}],["的优势与挑战",{"0":{"283":1}}],["的全流程自动化",{"2":{"491":1}}],["的全栈",{"2":{"280":1,"344":1}}],["的全部能力",{"2":{"160":1,"165":1,"167":1}}],["的抽象能力培养路径一致",{"2":{"271":1}}],["的写法",{"2":{"271":1}}],["的子类",{"2":{"269":3,"680":1}}],["的有效属性",{"2":{"268":1}}],["的有效属性名",{"2":{"268":1}}],["的其他类型系统特性结合使用时能发挥更大威力",{"2":{"263":1}}],["的用户",{"2":{"259":1}}],["的联合",{"2":{"250":1}}],["的属性名类型",{"2":{"268":1}}],["的属性",{"2":{"243":1,"268":1,"486":1}}],["的东西",{"2":{"240":1}}],["的函数签名比抛出异常更",{"2":{"246":1}}],["的函数",{"2":{"238":1,"247":1}}],["的含义",{"2":{"236":1}}],["的所有特性",{"2":{"815":1}}],["的所有属性",{"2":{"236":1,"239":1}}],["的所有优势全部清零",{"2":{"74":1}}],["的所有优点",{"2":{"66":1}}],["的关系",{"2":{"236":1,"244":2,"385":1}}],["的关键特性",{"2":{"902":1}}],["的关键概念",{"0":{"278":1}}],["的关键一步",{"2":{"250":1}}],["的关键在于把握一个根本性的心智模型转变",{"2":{"72":1}}],["的关键步骤是",{"2":{"32":1}}],["的值",{"2":{"233":1}}],["的妙用",{"0":{"232":1}}],["的集合",{"2":{"227":1}}],["的最终答复",{"2":{"488":1}}],["的最小闭环能力",{"2":{"461":1}}],["的最小完整集合",{"2":{"5":1}}],["的最高形态",{"2":{"389":1}}],["的最大解",{"0":{"365":1}}],["的最佳实践如下",{"2":{"216":1}}],["的区别",{"0":{"210":1}}],["的基础上",{"2":{"942":1}}],["的基础",{"2":{"227":1}}],["的基础要求",{"2":{"201":1}}],["的基石",{"2":{"144":1}}],["的判断",{"2":{"199":1}}],["的排查流程",{"0":{"199":1}}],["的库",{"2":{"192":1}}],["的误区",{"2":{"189":1}}],["的功能",{"2":{"183":2,"441":1,"494":1,"556":1,"569":1}}],["的组件",{"2":{"652":1}}],["的组件编排",{"2":{"440":1}}],["的组件都已卸载",{"2":{"104":1}}],["的组织方式在实际使用中尤为便捷直观",{"2":{"437":1}}],["的组合已经足够强大且优雅",{"2":{"180":1}}],["的工具挂载和技能制定后",{"2":{"509":1}}],["的工具箱",{"2":{"411":1}}],["的工程师而言",{"2":{"552":1}}],["的工程搭建",{"2":{"542":1}}],["的工程解法",{"2":{"493":1}}],["的工程博客提到",{"2":{"439":1}}],["的工程哲学",{"2":{"303":1,"342":1}}],["的工业级实现",{"2":{"180":1}}],["的工作原理",{"2":{"569":1}}],["的工作方式",{"2":{"525":1}}],["的工作流程",{"2":{"443":1}}],["的工作流压缩到了",{"2":{"439":1}}],["的工作模式从",{"2":{"415":1,"438":1}}],["的工作模式非常清晰",{"2":{"131":1}}],["的工作变得可预测",{"2":{"415":1,"438":1}}],["的工作量",{"2":{"219":1}}],["的工作机制基于",{"2":{"47":1}}],["的接口设计与原生",{"2":{"169":1}}],["的简化",{"2":{"166":1}}],["的简单替代",{"2":{"144":1}}],["的完成",{"2":{"163":1}}],["的完整软件开发方法论",{"2":{"874":1}}],["的完整事件流程",{"0":{"688":1}}],["的完整工程任务流",{"2":{"567":1}}],["的完整实践示例",{"2":{"86":1}}],["的完整链路",{"2":{"72":1,"689":1}}],["的完整交付链路封装为框架层的默认方案",{"2":{"71":1}}],["的一部分",{"2":{"927":1}}],["的一个超集",{"2":{"338":1}}],["的一统江湖",{"2":{"303":1}}],["的一些局限",{"2":{"160":1}}],["的一大优势在于其深度集成了浏览器原生的",{"2":{"122":1}}],["的一大杀器",{"2":{"106":1}}],["的实战场景",{"2":{"592":1}}],["的实际表现",{"2":{"503":1}}],["的实践经验",{"2":{"477":1}}],["的实践过程",{"2":{"467":1}}],["的实践",{"2":{"158":1,"476":1}}],["的实现示例",{"2":{"152":1}}],["的实现依赖流式服务端渲染",{"2":{"52":1}}],["的实现依赖",{"2":{"17":1}}],["的超时时间",{"2":{"153":1}}],["的常规响应后",{"2":{"153":1}}],["的概率稳赢",{"2":{"917":1}}],["的概率在这",{"2":{"152":1}}],["的概念最早由",{"2":{"53":1}}],["的逻辑缺陷",{"2":{"533":1}}],["的逻辑推理",{"2":{"367":1}}],["的逻辑",{"2":{"148":1,"415":1,"438":1}}],["的自动补全",{"2":{"702":1}}],["的自动化交付体系",{"2":{"902":1}}],["的自动化能力",{"2":{"597":1}}],["的自动化闭环",{"2":{"535":1}}],["的自动化生成",{"2":{"451":1}}],["的自动化产出后",{"2":{"3":1}}],["的自由",{"0":{"376":1}}],["的自然结果",{"2":{"144":1}}],["的技术选型指南中",{"2":{"158":1}}],["的技术选型指南",{"2":{"145":1}}],["的技术",{"2":{"144":2}}],["的技术演进",{"2":{"144":1}}],["的技术问题",{"2":{"71":1}}],["的重要一步",{"2":{"355":1}}],["的重要能力",{"2":{"48":1}}],["的重计算任务",{"2":{"143":1}}],["的长度限制",{"2":{"143":1}}],["的长连接功能",{"2":{"118":1}}],["的轻量级数据请求库",{"2":{"342":1}}],["的轻量级库",{"2":{"97":1}}],["的轻量化",{"2":{"341":1}}],["的轻量优势",{"2":{"143":1}}],["的返回",{"2":{"136":1}}],["的协助下",{"2":{"948":1}}],["的协议",{"2":{"129":1}}],["的协同",{"0":{"89":1}}],["的多人在同步编辑",{"2":{"128":1}}],["的串行约束",{"2":{"127":1}}],["的束缚",{"2":{"125":1}}],["的业务场景",{"2":{"123":1}}],["的灵活替代方案",{"2":{"118":1}}],["的灵活性之间取得平衡",{"2":{"50":1}}],["的灵活性",{"2":{"32":1,"46":1}}],["的特性",{"2":{"118":1,"418":1}}],["的物理限制",{"2":{"116":1}}],["的固有特性逐渐演变为开发的痛点",{"2":{"115":1}}],["的固有矛盾",{"2":{"55":1}}],["的极简经营",{"2":{"601":1}}],["的极简调度能用最低的性能开销换取最好的感官体验",{"2":{"112":1}}],["的极客团队",{"2":{"344":1}}],["的极限压缩",{"2":{"112":1}}],["的极致简单是精心设计的结果",{"2":{"66":1}}],["的情况下",{"2":{"342":1,"414":1,"531":1}}],["的情况",{"0":{"112":1,"113":1}}],["的数十倍",{"2":{"523":1}}],["的数学",{"2":{"522":1}}],["的数学之美",{"0":{"364":1},"1":{"365":1,"366":1,"367":1}}],["的数组",{"2":{"110":1}}],["的数据处理编排核心",{"2":{"712":1}}],["的数据变更通过",{"2":{"653":1}}],["的数据请求",{"2":{"103":1}}],["的数据",{"2":{"88":1,"104":1}}],["的数据流天然是自顶向下的",{"2":{"7":1}}],["的压倒性优势",{"2":{"110":1}}],["的局限",{"2":{"110":1}}],["的缓存机制",{"2":{"107":1}}],["的缓存策略",{"2":{"90":1}}],["的网络层面错误",{"2":{"106":1}}],["的确定",{"2":{"104":1}}],["的请求结果进行缓存",{"2":{"103":1}}],["的影响微乎其微",{"2":{"97":1}}],["的阻塞式体验",{"2":{"97":1}}],["的旧习惯",{"2":{"94":1}}],["的场景",{"0":{"92":1,"93":1},"2":{"128":1,"180":1,"311":1}}],["的效果",{"2":{"86":1,"252":1}}],["的形式推送给浏览器",{"2":{"86":1}}],["的后台页面",{"2":{"75":1}}],["的架构内核",{"0":{"72":1},"1":{"73":1,"74":1}}],["的架构立场",{"2":{"71":1}}],["的架构裁决",{"2":{"1":1}}],["的鸿沟",{"0":{"71":1,"321":1},"2":{"901":1}}],["的价值跃迁",{"2":{"406":1}}],["的价值不仅在于静态类型检查带来的代码提示和编译时错误发现",{"2":{"226":1}}],["的价值",{"2":{"68":1,"540":2}}],["的渲染结果会被序列化为",{"2":{"73":1}}],["的渲染链路",{"2":{"66":1}}],["的渲染架构",{"2":{"60":1}}],["的框架",{"2":{"66":1}}],["的性能优势",{"2":{"66":1}}],["的快速原型",{"2":{"561":1}}],["的快",{"2":{"66":1}}],["的典型特征",{"2":{"65":1}}],["的本质是",{"2":{"402":1}}],["的本质是减少",{"2":{"182":1}}],["的本质是将架构思维外化为可执行的契约",{"2":{"12":1}}],["的本质",{"2":{"66":1}}],["的本质特征",{"2":{"63":1}}],["的本质区别与协作关系",{"2":{"180":1}}],["的本质区别",{"0":{"53":1,"134":1}}],["的下载与执行速度",{"2":{"37":1}}],["的动态功能",{"2":{"28":1}}],["的核心优势",{"2":{"933":1}}],["的核心数据容器",{"2":{"713":1}}],["的核心设计模式是插件化扩展",{"2":{"711":1}}],["的核心壁垒",{"2":{"550":1}}],["的核心枢纽",{"2":{"544":1}}],["的核心定位",{"2":{"492":1}}],["的核心交互入口是",{"2":{"482":1}}],["的核心规则是",{"2":{"470":1}}],["的核心在于构建了一个不断自修正的逻辑闭环",{"2":{"427":1}}],["的核心在于将",{"2":{"168":1}}],["的核心诉求在于",{"2":{"417":1}}],["的核心使命则是",{"2":{"417":1}}],["的核心从",{"2":{"367":1}}],["的核心指标是让用户感到满意的查询次数",{"2":{"350":1}}],["的核心语法我们可以看到",{"2":{"316":1}}],["的核心语法和最佳实践",{"2":{"293":1}}],["的核心",{"2":{"313":1}}],["的核心思想是让软件设计回归业务本质",{"2":{"277":1}}],["的核心理念",{"0":{"277":1}}],["的核心原理",{"2":{"166":1}}],["的核心价值在于上下文隔离",{"2":{"590":1}}],["的核心价值在于",{"2":{"417":1,"583":1}}],["的核心价值",{"2":{"79":1}}],["的核心价值是",{"2":{"32":1}}],["的核心能力可以归纳为五个维度",{"2":{"72":1}}],["的核心逻辑",{"2":{"60":1}}],["的核心工具",{"2":{"18":1}}],["的核心是",{"2":{"14":1,"201":1,"586":1}}],["的约束范围内寻找局部最优解",{"2":{"11":1}}],["的",{"0":{"360":1,"526":1,"540":1},"1":{"527":1,"528":1,"529":1,"541":1,"542":1,"543":1},"2":{"11":1,"12":1,"35":2,"38":2,"46":1,"47":1,"59":2,"61":1,"65":3,"66":1,"75":1,"84":1,"86":1,"89":1,"99":1,"107":2,"110":1,"113":1,"129":1,"143":1,"160":1,"171":1,"178":3,"203":1,"233":1,"334":1,"339":1,"342":1,"344":1,"354":1,"366":1,"412":1,"418":1,"427":1,"428":1,"431":1,"439":1,"442":1,"443":1,"455":1,"470":1,"472":1,"482":1,"499":1,"509":3,"511":1,"525":1,"532":1,"536":1,"537":1,"540":1,"550":2,"551":1,"561":1,"564":1,"567":1,"654":1,"661":2,"663":1,"685":1,"712":1,"728":1,"813":1,"858":1,"868":2,"876":1,"895":1,"907":1,"927":1,"928":1,"934":3}}],["的映射关系",{"2":{"11":1}}],["的声明式数据可视化图表库",{"2":{"699":1}}],["的声明式编程范式",{"2":{"11":1}}],["的声明式",{"2":{"11":1}}],["的声明式范式尤为契合",{"2":{"10":1}}],["的问题根源",{"2":{"383":1}}],["的问题",{"2":{"8":1,"316":1,"360":1,"433":1}}],["的循环",{"2":{"7":1,"426":1,"427":1}}],["的安置需要在状态提升",{"2":{"6":1}}],["的安放位置",{"0":{"6":1}}],["的纯渲染路径跑通",{"2":{"3":1}}],["的轨迹形成清晰",{"2":{"1":1}}],["将总目标拆解为每",{"2":{"963":1}}],["将清单分为",{"2":{"953":1}}],["将时间周期拉的长一点",{"2":{"942":1}}],["将绝大部分",{"2":{"930":1}}],["将语义变量映射给",{"2":{"929":1}}],["将变量分为",{"2":{"929":1}}],["将变成核心资产",{"2":{"525":1}}],["将设计规范抽象为",{"2":{"929":1}}],["将一切非标准语法转化为浏览器可识别的",{"2":{"928":1}}],["将一个灵感迅速转化为高可用产品",{"2":{"540":1}}],["将样式的",{"2":{"927":1}}],["将样式与逻辑写在同一个文件里",{"2":{"922":1}}],["将是新一代工程师最核心的元能力",{"2":{"903":1}}],["将结果反馈给",{"2":{"863":1}}],["将结果返回给客户端",{"2":{"151":1}}],["将节点图转换为目标后端着色器代码",{"2":{"746":1}}],["将核心基建类注入",{"2":{"677":1}}],["将子",{"2":{"661":1}}],["将子组件作为参数注入",{"2":{"2":1}}],["将同样的文档和源码置于两人面前",{"2":{"626":1}}],["将相同的技术趋势",{"2":{"622":1}}],["将散乱的信息构建成清晰的知识树",{"2":{"609":1}}],["将他人的洞见转化为自己的血肉",{"2":{"603":1}}],["将利润置于规模之上",{"2":{"601":1}}],["将硬核的神经网络与概率统计转化为优化生活的决策工具",{"2":{"598":1}}],["将团队共识与个人偏好分离",{"2":{"596":1}}],["将可变部分作为参数传入",{"2":{"583":1}}],["将共性的",{"2":{"583":1}}],["将共同依赖的代码提取到一个新的模块中",{"2":{"315":1}}],["将庞大指令拆分为可复用的规则",{"2":{"570":1}}],["将庞大复杂的系统拆解为一个个独立",{"2":{"294":1}}],["将常用操作封装为",{"2":{"570":1}}],["将常见性能优化封装为内置组件",{"2":{"84":1}}],["将上述两层能力指数级放大",{"2":{"558":1}}],["将从",{"2":{"557":1}}],["将从开发者的玩具",{"2":{"419":1}}],["将代码安全",{"2":{"555":1}}],["将代码库",{"2":{"536":1}}],["将通用模型打磨成特定领域",{"2":{"551":1}}],["将评测无缝融入",{"2":{"550":1}}],["将评论",{"2":{"59":1}}],["将跨领域协作的摩擦成本大幅降低",{"2":{"529":1}}],["将自己打造成不可替代的稀缺资产",{"2":{"603":1}}],["将自己视作一家",{"2":{"603":1}}],["将自己变成了一个",{"2":{"525":1}}],["将自然语言抽象为类似面向对象的代码结构",{"2":{"509":1}}],["将自然语言目标转化为机器可理解的步骤树",{"2":{"425":1}}],["将离掩泪湿蒹葭",{"2":{"508":1}}],["将目标用户从",{"2":{"492":1}}],["将主题分解为",{"2":{"471":1}}],["将主题分解为若干子课题",{"2":{"416":1}}],["将用户请求分解为",{"2":{"471":1}}],["将用户的沉没投入转化为极高的替代成本",{"2":{"398":1}}],["将这些信息整合为带有可视化图表的深度研究报告",{"2":{"470":1}}],["将这部分",{"2":{"86":1}}],["将分析成果转化为结构化的文字内容",{"2":{"468":1}}],["将底层零散的工具",{"2":{"455":1}}],["将具体的逻辑编排",{"2":{"443":1}}],["将零散的需求转化为可获利的商业方案",{"2":{"600":1}}],["将零散的",{"2":{"440":1}}],["将专业工作交给专业的",{"2":{"592":1}}],["将专业且细碎的脏活累活下放给子代理",{"2":{"438":1}}],["将专家的工程规范与最佳实践固化为可执行脚本",{"2":{"440":1}}],["将特定",{"2":{"438":1}}],["将不同项目",{"2":{"437":1}}],["将原本零散的",{"2":{"434":1}}],["将原本死板的逻辑链路转化为了具有生命力的",{"2":{"427":1}}],["将推理与行动混合在每一轮循环中不同",{"2":{"429":1}}],["将思考转化为实际动作",{"2":{"427":1}}],["将最终定义",{"2":{"419":1}}],["将复杂任务拆解并委派给不同的",{"2":{"535":1}}],["将复杂目标拆解为完整的步骤列表",{"2":{"414":1}}],["将复杂的子目标转化为具体的步骤",{"2":{"412":1}}],["将复杂的单体应用拆分为多个简单的子应用",{"2":{"292":1}}],["将复杂的",{"2":{"1":1,"491":1}}],["将抽象的目标变为真实的结果",{"2":{"412":1}}],["将多个子任务组合成一个更大的任务",{"2":{"411":1}}],["将规划好的逻辑转化为具体的",{"2":{"408":1}}],["将经济学思维系统化地应用到产品全生命周期",{"0":{"395":1},"1":{"396":1,"397":1,"398":1,"399":1}}],["将模型的新功能融入产品",{"2":{"909":1}}],["将模块注入全局",{"2":{"679":1}}],["将模块间的依赖关系从简单的",{"2":{"317":1}}],["将模糊的目标拆解为一系列结构化的",{"2":{"429":1}}],["将模糊需求结构化",{"2":{"367":1}}],["将能力寄托于",{"2":{"363":1}}],["将成为我们在",{"2":{"359":1}}],["将成功和失败编码为可辨识联合",{"2":{"246":1}}],["将交互起点后置",{"2":{"350":1}}],["将交叉映射为联合",{"2":{"242":1}}],["将网络请求的",{"2":{"342":1}}],["将默认导出重命名后导出",{"2":{"312":1}}],["将内部多个子模块聚合后统一对外暴露",{"2":{"312":1}}],["将所有逻辑塞进少数几个文件的做法早已难以为继",{"2":{"294":1}}],["将前端应用按照业务领域或功能模块进行拆分",{"2":{"285":1}}],["将系统分为用户界面层",{"2":{"277":1}}],["将联合映射为交叉",{"2":{"242":1}}],["将工程中的代码规范配置到工具中",{"2":{"219":1}}],["将项目中的各种资源",{"2":{"343":1}}],["将项目划分为多个独立的子项目",{"2":{"205":1}}],["将项目推送到",{"2":{"29":1}}],["将行流组装为完整事件",{"2":{"168":1}}],["将字节块流转换为行迭代器",{"2":{"168":1}}],["将字节块转换为字符串",{"2":{"166":1}}],["将读取到的字节块解码为字符串",{"2":{"166":1}}],["将二者串联",{"2":{"138":1}}],["将图片上传至",{"2":{"138":1}}],["将消息平台的事件",{"2":{"132":1}}],["将事件详情封装在请求体中",{"2":{"131":1}}],["将响应数据实时推送到前端",{"2":{"118":1}}],["将数据操作抽象化",{"2":{"336":1}}],["将数据按照",{"2":{"176":1}}],["将数据化整为零",{"2":{"117":1}}],["将数据注入组件后再生成",{"2":{"69":1}}],["将快照返回",{"2":{"108":1}}],["将乐观更新的数据传递给实际的异步请求",{"2":{"100":1}}],["将后端返回的错误信息附加到",{"2":{"99":1}}],["将服务端状态的缓存",{"2":{"97":1}}],["将需要交互的",{"2":{"74":1}}],["将虚拟",{"2":{"70":1}}],["将页面结构抽象为",{"2":{"639":1}}],["将页面骨架",{"2":{"94":1}}],["将页面中的静态部分",{"2":{"87":1}}],["将页面分为两类",{"2":{"65":1}}],["将页面拆分为静态外壳和动态组件",{"2":{"51":1}}],["将渲染策略拆分到组件级别",{"2":{"53":1}}],["将渲染出的完整",{"2":{"42":1}}],["将渲染结果缓存",{"2":{"59":1}}],["将渲染结果",{"2":{"39":1}}],["将整个渲染过程放在浏览器端完成",{"2":{"34":1}}],["将其封装为声明式场景图",{"2":{"728":1}}],["将其流转至",{"2":{"629":1}}],["将其直接加载到系统提示词中",{"2":{"571":1}}],["将其转化为替代成本",{"2":{"393":1}}],["将其转化为结构化的文章发布",{"2":{"355":1}}],["将其提炼为以下三个核心公式",{"2":{"364":1}}],["将其渲染为可视化页面",{"2":{"33":1}}],["将其隔离",{"2":{"6":1}}],["将构建产物部署到服务器",{"2":{"33":1}}],["将源代码经过编译",{"2":{"33":1}}],["将静态文件上传到阿里云",{"2":{"19":1}}],["将伴随软件工程的始终",{"2":{"12":1}}],["将精力集中于真正创造价值的架构决策",{"2":{"12":1}}],["将第一阶段确认好的",{"2":{"3":1}}],["将为后续迭代埋下隐患",{"2":{"3":1}}],["将",{"2":{"1":1,"65":1,"71":1,"168":2,"242":1,"255":1,"308":3,"408":1,"414":1,"455":1,"462":1,"490":1,"550":1,"557":1,"645":1,"770":1,"840":1,"874":1,"922":1,"923":1,"928":1,"930":1,"931":1,"932":1,"933":1,"934":1,"942":1}}],["仅开发依赖",{"2":{"826":1}}],["仅引入核心",{"2":{"725":1}}],["仅核心功能",{"2":{"706":1}}],["仅核心基建",{"2":{"679":1}}],["仅筛选与目标强相关的信息",{"2":{"624":1}}],["仅停留在",{"2":{"622":1}}],["仅靠抽象逻辑是无法解决复杂现实问题的",{"2":{"614":1}}],["仅靠手机号",{"2":{"181":1}}],["仅凭逻辑推演确实可以成就",{"2":{"614":1}}],["仅跨项目通用的操作放在",{"2":{"583":1}}],["仅包含",{"2":{"472":1}}],["仅使用",{"2":{"470":1,"472":1}}],["仅通过内嵌模板和检查表即可实现",{"2":{"453":1}}],["仅接收执行结果反馈",{"2":{"443":1}}],["仅检索",{"2":{"443":1}}],["仅将执行结果返回给",{"2":{"443":1}}],["仅将所有技能的",{"2":{"443":1}}],["仅负责读取研究笔记",{"2":{"416":1}}],["仅有",{"2":{"577":1}}],["仅有批判性思维",{"2":{"366":1}}],["仅有同理心",{"2":{"366":1}}],["仅仅看作是",{"2":{"364":1}}],["仅处理鉴权状态与逻辑",{"2":{"327":1}}],["仅处理用户数据的",{"2":{"327":1}}],["仅类型",{"2":{"318":1}}],["仅含",{"2":{"227":1}}],["仅用于维护旧代码或编写特定的全局",{"2":{"320":1}}],["仅用于",{"2":{"216":1}}],["仅用于等待最终一个图片",{"2":{"136":1}}],["仅做类型检查",{"2":{"203":1}}],["仅暴露调用者需使用的用户id",{"2":{"197":1}}],["仅暴露必要的输入",{"2":{"2":1}}],["仅保留必要信息",{"2":{"197":1}}],["仅保留当前需求的字段",{"2":{"185":1}}],["仅返回调用者需要的信息",{"2":{"197":1}}],["仅字符串判空",{"2":{"193":1}}],["仅1个本地文件存储",{"2":{"190":1}}],["仅1个查询服务",{"2":{"190":1}}],["仅1个student实体",{"2":{"190":1}}],["仅为必用字段提供getter",{"2":{"185":1}}],["仅当多个方案能实现相同的功能",{"2":{"181":1}}],["仅在",{"2":{"889":1}}],["仅在处理相关任务时动态激活这些能力",{"2":{"547":1}}],["仅在需要兼容老旧环境时使用",{"2":{"308":1}}],["仅在需要引用其他项目时使用",{"2":{"210":1}}],["仅在需要时通过",{"2":{"14":1}}],["仅在完成后返回结果",{"2":{"143":1}}],["仅支持",{"2":{"124":2,"160":1,"814":1,"839":1}}],["仅限",{"2":{"118":1,"160":1}}],["仅交互",{"2":{"74":1}}],["仅附加事件处理器和内部状态",{"2":{"70":1}}],["仅提供静态资源",{"2":{"57":1}}],["仅需极简",{"2":{"344":1}}],["仅需补充以下步骤",{"2":{"30":1}}],["仅需",{"2":{"15":1,"193":1}}],["仅对真正需要的子孙暴露接口",{"2":{"6":1}}],["仅",{"2":{"1":1,"167":1}}],["约束团队规范",{"2":{"928":1}}],["约束能够有效防止大模型在长文本生成中",{"2":{"509":1}}],["约束条件和少样本",{"2":{"367":1}}],["约束条件等",{"2":{"9":1}}],["约束与边界工程",{"2":{"367":1}}],["约束对象必须有",{"2":{"270":1}}],["约束类型",{"2":{"270":1}}],["约束示例",{"2":{"268":1}}],["约束结合了",{"2":{"268":1}}],["约束",{"0":{"268":1},"2":{"265":1,"266":1,"267":1,"268":1,"270":1}}],["约束越多",{"2":{"263":1}}],["约定",{"2":{"575":1}}],["约定优于配置",{"2":{"97":1}}],["约定大于配置",{"0":{"76":1},"1":{"77":1,"78":1,"79":1}}],["约",{"2":{"1":1,"136":1,"755":1,"930":1}}],["1个小时",{"2":{"961":2}}],["1个controller",{"2":{"190":1}}],["1gemini",{"2":{"899":1}}],["1cursor",{"2":{"899":1}}],["1codex",{"2":{"899":1}}],["1javascriptlottie",{"2":{"781":1}}],["19825",{"2":{"801":1,"807":1}}],["19kb",{"2":{"734":1}}],["19",{"2":{"677":1,"845":1}}],["1991",{"2":{"115":1}}],["16px",{"2":{"921":1,"922":1,"923":1,"924":1}}],["1688",{"2":{"792":2}}],["16kb",{"2":{"734":1}}],["1632行",{"2":{"706":1}}],["16",{"2":{"665":1}}],["16+",{"2":{"203":1}}],["13kb",{"2":{"734":1}}],["13",{"2":{"643":1,"734":1,"755":1,"887":1}}],["13+",{"2":{"25":1}}],["1807",{"2":{"916":1}}],["185",{"2":{"755":1}}],["18kb",{"2":{"734":2}}],["18种",{"2":{"734":1}}],["18+",{"2":{"722":1,"751":1,"845":1}}],["18",{"2":{"642":1,"655":1,"665":1,"845":1,"870":1}}],["1m",{"2":{"523":1}}],["17",{"2":{"288":1}}],["17+",{"2":{"203":1}}],["1分钟验证",{"2":{"199":1}}],["1s",{"2":{"171":1,"175":2}}],["1秒后重试",{"2":{"839":1}}],["1秒",{"2":{"152":1}}],["112个",{"2":{"734":1}}],["1100",{"2":{"705":1,"715":1}}],["11",{"2":{"149":1,"331":1,"927":1}}],["11ty",{"2":{"18":1,"32":1}}],["15s",{"2":{"801":1}}],["15种",{"2":{"734":1}}],["15种材质",{"2":{"734":1}}],["15kb",{"2":{"646":1,"647":1,"734":3}}],["15+",{"2":{"470":1,"472":1}}],["150",{"2":{"439":1}}],["15000",{"2":{"149":1,"152":1}}],["150ms",{"2":{"59":1}}],["15秒到了任务还没完成",{"2":{"152":1}}],["15秒",{"2":{"149":2,"151":1,"152":1}}],["15",{"2":{"148":1,"149":1,"153":2,"289":1,"331":1,"416":1,"845":1}}],["1029行",{"2":{"762":1}}],["1024",{"2":{"448":1}}],["108kb",{"2":{"734":1}}],["10kb",{"2":{"734":2,"925":1}}],["10+",{"2":{"729":1,"870":1}}],["10万+",{"2":{"701":1}}],["105+",{"2":{"646":1,"647":1}}],["10分钟高强度运动",{"2":{"605":1}}],["10x",{"0":{"462":1}}],["10~15",{"2":{"151":1}}],["10~30",{"2":{"136":1}}],["10秒",{"2":{"149":1}}],["10s",{"2":{"142":1,"143":1}}],["10",{"0":{"931":1},"2":{"136":1,"140":1,"148":1,"152":1,"258":1,"262":1,"291":1,"343":1,"350":1,"366":1,"416":1,"459":2,"460":1,"470":1,"472":2,"522":1,"564":1,"565":1,"600":1,"652":1,"696":1,"724":2,"734":1,"774":1,"845":2,"927":1,"928":2,"931":1,"934":2,"959":1}}],["101",{"2":{"126":1,"236":1}}],["100x",{"2":{"845":1}}],["100+",{"2":{"523":1,"847":1,"849":1}}],["100",{"2":{"178":1,"281":2,"329":1,"511":1,"512":2,"522":2,"550":1,"652":1,"696":1,"815":1,"925":2,"927":1,"928":2}}],["1000ms",{"2":{"832":1}}],["10000",{"2":{"149":1,"594":1}}],["1000",{"2":{"106":1,"152":1,"164":1,"171":1,"175":1,"178":2,"179":1,"330":1,"594":1,"705":2,"715":1,"753":1}}],["100ms",{"2":{"59":1}}],["14个可组合技能",{"2":{"881":1}}],["14kb",{"2":{"734":2}}],["142+",{"2":{"645":1,"646":1,"647":1}}],["142",{"2":{"643":1}}],["14159",{"2":{"295":2,"310":1}}],["14",{"2":{"53":1,"127":1,"181":1,"193":1,"665":1,"879":1}}],["12+",{"2":{"876":1}}],["12kb",{"2":{"734":3}}],["127",{"2":{"666":2,"801":1,"807":1}}],["128k~1m",{"2":{"522":1}}],["12解决循环依赖的方法",{"2":{"315":1}}],["12创建对应的测试文件",{"2":{"223":1}}],["123",{"2":{"247":1,"265":2,"288":1,"289":1,"318":1,"481":1,"567":1,"726":1,"810":1,"827":1,"847":1}}],["123注意",{"2":{"177":1}}],["1234skill",{"2":{"586":1}}],["1234通过",{"2":{"335":1}}],["1234",{"2":{"75":1,"314":1}}],["12345完整目录树",{"2":{"823":1}}],["12345这样一来",{"2":{"575":1}}],["12345善于结合其他",{"2":{"263":1}}],["12345合理使用泛型约束",{"2":{"263":1}}],["12345优先使用类型推断",{"2":{"263":1}}],["12345swr",{"2":{"90":1}}],["12345",{"2":{"29":1,"191":1,"221":1,"442":1,"447":1,"722":1,"780":1,"871":1}}],["123456行解析状态机",{"2":{"833":1}}],["123456项目级的",{"2":{"570":1}}],["123456用集合语言表述这一对偶性",{"2":{"242":1}}],["123456这种设计让模块化具备了极强的扩展性",{"2":{"321":1}}],["123456这是因为",{"2":{"239":1}}],["123456这意味着不需要额外搭建",{"2":{"83":1}}],["1234567options",{"2":{"482":1}}],["1234567monorepo",{"2":{"335":1}}],["1234567运行测试",{"2":{"224":1}}],["12345678调用",{"2":{"582":1}}],["12345678正如你所见",{"2":{"295":1}}],["12345678多级配置继承示例",{"2":{"216":1}}],["12345678",{"2":{"84":1,"187":1,"197":1,"216":1,"229":1,"310":1,"695":1,"723":1,"843":1}}],["12345678generatemetadata",{"2":{"82":1}}],["123456789关键函数流程",{"2":{"832":1}}],["123456789执行结果",{"2":{"315":1}}],["123456789应用场景",{"2":{"312":1}}],["123456789实践建议",{"2":{"311":1}}],["123456789各层职责详解",{"2":{"279":1}}],["123456789stage",{"2":{"168":1}}],["12345678910本质原因",{"2":{"237":1}}],["12345678910联合类型有一个核心约束需要特别注意",{"2":{"229":1}}],["12345678910",{"2":{"196":1,"325":1,"470":1}}],["12345678910fetch",{"2":{"174":1}}],["1234567891011然后",{"2":{"923":1}}],["1234567891011",{"2":{"752":1,"811":1}}],["1234567891011typescript",{"2":{"318":1}}],["1234567891011在",{"2":{"306":1}}],["123456789101112通过保存这个",{"2":{"486":1}}],["123456789101112javascript",{"2":{"311":1}}],["123456789101112理解分配律有助于简化复杂的类型表达式",{"2":{"243":1}}],["123456789101112",{"2":{"212":1,"240":1,"265":1,"300":1,"315":1,"504":1,"797":1,"923":1}}],["12345678910111213通过这种方式",{"2":{"319":1}}],["12345678910111213从集合角度理解",{"2":{"236":1}}],["12345678910111213为什么可辨识联合如此重要",{"2":{"230":1}}],["1234567891011121314最终效果如下",{"2":{"490":1}}],["1234567891011121314输出目录",{"2":{"471":1}}],["1234567891011121314javascript",{"2":{"310":1}}],["1234567891011121314原理",{"2":{"232":1}}],["1234567891011121314",{"2":{"184":1,"289":1,"305":1,"333":1,"484":1,"667":1,"854":1}}],["123456789101112131415核心优势",{"2":{"318":1}}],["123456789101112131415在另一个文件中",{"2":{"295":1}}],["123456789101112131415这些看似抽象的关系",{"2":{"244":1}}],["123456789101112131415",{"2":{"103":1,"505":2,"868":1}}],["12345678910111213141516其中",{"2":{"591":1}}],["12345678910111213141516上面这条规则只会在操作",{"2":{"576":1}}],["12345678910111213141516更多流式输出的细节可参考",{"2":{"488":1}}],["12345678910111213141516原理解释",{"2":{"247":1}}],["12345678910111213141516",{"2":{"101":1,"216":1,"222":1,"474":1,"483":1,"765":1}}],["1234567891011121314151617执行顺序",{"2":{"314":1}}],["1234567891011121314151617业务层面也需要追踪状态",{"2":{"173":1}}],["1234567891011121314151617",{"2":{"155":1,"213":1,"258":1,"304":1,"313":1,"322":1,"448":1,"724":1}}],["123456789101112131415161718tailwind",{"2":{"925":1}}],["12345678910111213141516171819核心数据结构",{"2":{"833":1}}],["12345678910111213141516171819",{"2":{"696":1,"709":1}}],["1234567891011121314151617181920",{"2":{"508":1,"586":1,"853":1}}],["123456789101112131415161718192021",{"2":{"214":1,"268":1,"451":1,"820":1}}],["12345678910111213141516171819202122allow",{"2":{"594":1}}],["1234567891011121314151617181920212223文件作用说明",{"2":{"570":1}}],["1234567891011121314151617181920212223",{"2":{"249":1,"507":1,"823":1}}],["1234567891011121314151617181920212223242526设计巧思解析",{"2":{"494":1}}],["1234567891011121314151617181920212223242526",{"2":{"315":1,"712":1,"742":1,"767":1}}],["1234567891011121314151617181920212223242526272",{"2":{"204":1}}],["1234567891011121314151617181920212223242526272829",{"2":{"315":1,"650":1,"682":1,"686":1,"713":1}}],["1234567891011121314151617181920212223242526272829302",{"2":{"288":1}}],["123456789101112131415161718192021222324252627282930",{"2":{"248":1,"259":1,"288":1,"656":1,"715":1,"740":1,"770":1}}],["1234567891011121314151617181920212223242526272829303132",{"2":{"573":1,"711":1,"739":1,"741":1,"769":1,"800":1,"858":1}}],["123456789101112131415161718192021222324252627282930313233",{"2":{"654":1,"680":1,"684":1,"771":1,"840":1,"896":1}}],["1234567891011121314151617181920212223242526272829303132335",{"2":{"281":1}}],["12345678910111213141516171819202122232425262728293031323334关键设计细节",{"2":{"856":1}}],["12345678910111213141516171819202122232425262728293031323334",{"2":{"649":1,"857":1}}],["123456789101112131415161718192021222324252627282930313233344",{"2":{"281":1}}],["1234567891011121314151617181920212223242526272829303132333435",{"2":{"720":1,"886":1,"890":1}}],["1234567891011121314151617181920212223242526272829303132333435经过这三层处理",{"2":{"168":1}}],["123456789101112131415161718192021222324252627282930313233343536关键端点",{"2":{"801":1}}],["1234567891011121314151617181920212223242526272829303132333435362",{"2":{"289":1}}],["12345678910111213141516171819202122232425262728293031323334353637",{"2":{"106":1,"737":1,"889":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940",{"2":{"708":1,"768":1,"796":1,"867":1}}],["123456789101112131415161718192021222324252627282930313233343536373839403",{"2":{"289":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142",{"2":{"506":1,"683":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243",{"2":{"482":1,"799":1,"830":1,"832":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344",{"2":{"269":1,"887":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546",{"2":{"652":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445462",{"2":{"281":1,"451":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748",{"2":{"489":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647485",{"2":{"288":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849这份决策树不仅可以指导技术选型",{"2":{"928":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849clicommand",{"2":{"806":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950",{"2":{"231":1,"267":1,"833":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556",{"2":{"927":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162",{"2":{"705":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667",{"2":{"790":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071分层职责说明",{"2":{"761":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576",{"2":{"866":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677",{"2":{"848":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283",{"2":{"777":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788",{"2":{"749":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293",{"2":{"677":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118",{"2":{"719":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136",{"2":{"895":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146",{"2":{"792":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155",{"2":{"280":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162",{"2":{"881":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174",{"2":{"706":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208",{"2":{"776":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241",{"2":{"762":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249",{"2":{"748":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336",{"2":{"734":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311",{"2":{"203":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217",{"2":{"692":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194",{"2":{"647":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157",{"2":{"274":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130",{"2":{"807":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128这个示例涵盖了前文所述的核心要点",{"2":{"175":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899",{"2":{"28":1,"880":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485分层职责说明",{"2":{"733":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081",{"2":{"646":1,"839":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475",{"2":{"290":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273这段代码演示了",{"2":{"166":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768",{"2":{"663":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566",{"2":{"676":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465",{"2":{"661":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859",{"2":{"662":1,"928":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859关键点说明",{"2":{"178":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354",{"2":{"281":1,"693":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051",{"2":{"275":1,"679":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051可以看到",{"2":{"169":1}}],["12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849优点",{"2":{"149":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041424344454647",{"2":{"179":1,"261":1,"925":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142434445",{"2":{"57":1,"262":1,"806":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142优点",{"2":{"153":1}}],["123456789101112131415161718192021222324252627282930313233343536373839404142注",{"2":{"152":1}}],["1234567891011121314151617181920212223242526272829303132333435363738394041",{"2":{"108":1,"655":1,"736":1,"924":1}}],["1234567891011121314151617181920212223242526272829303132333435363738393",{"2":{"281":1}}],["1234567891011121314151617181920212223242526272829303132333435363738",{"2":{"99":1,"653":1,"743":1,"883":1}}],["123456789101112131415161718192021222324252627282930313233343536",{"2":{"100":1,"260":1}}],["12345678910111213141516171819202122232425262728293031",{"2":{"266":1,"859":1,"888":1}}],["1234567891011121314151617181920212223242526272829303",{"2":{"204":1}}],["123456789101112131415161718192021222324252627282930可以看到",{"2":{"164":1}}],["12345678910111213141516171819202122232425262728",{"2":{"58":1,"753":1,"922":1}}],["123456789101112131415161718192021222324252627stage",{"2":{"168":1}}],["123456789101112131415161718192021222324252627",{"2":{"26":1,"204":1,"764":1,"921":1}}],["123456789101112131415161718192021222324254",{"2":{"288":1}}],["123456789101112131415161718192021222324253",{"2":{"288":1}}],["12345678910111213141516171819202122232425api",{"2":{"163":1}}],["12345678910111213141516171819202122232425",{"2":{"27":1,"302":1,"315":1,"714":1}}],["123456789101112131415161718192021222324",{"2":{"27":1,"449":1}}],["12345678910111213141516171819202122为什么比",{"2":{"246":1}}],["12345678910111213141516171819202122",{"2":{"172":1,"215":1,"330":1,"668":1,"685":1,"849":1,"884":1}}],["123456789101112131415161718192021stage",{"2":{"168":1}}],["12345678910111213141516171819原理",{"2":{"238":1}}],["12345678910111213141516171819有了辨识字段",{"2":{"230":1}}],["123456789101112131415161718何时重试",{"2":{"171":1}}],["123456789101112131415161718",{"2":{"107":1,"301":1,"324":1,"328":1,"331":1,"581":1,"640":1}}],["123456789101112131415161718优势分析",{"2":{"97":1}}],["1234567891011121314151617modellist",{"2":{"86":1}}],["1234567891011121314151617根布局",{"2":{"79":1}}],["12345678910111213",{"2":{"47":1,"185":1,"211":1,"223":1,"233":1,"307":1,"327":1,"819":1}}],["1234567891011每个事件由可选的",{"2":{"161":1}}],["12345678910在后续导航中",{"2":{"73":1}}],["123456789",{"2":{"35":1,"39":1,"52":1,"74":1,"190":1,"234":1,"244":1,"666":1,"725":1,"751":1}}],["1234567cache",{"2":{"81":1}}],["1234567",{"2":{"28":1,"43":1,"481":1,"781":1,"818":1}}],["123456",{"2":{"25":1,"193":1,"194":1,"196":1,"197":1,"216":2}}],["12",{"2":{"26":1,"28":1,"188":1,"331":2,"334":1,"441":1,"665":1,"857":1,"887":1}}],["1",{"0":{"1":1,"5":1,"9":1,"13":1,"14":2,"15":1,"16":1,"18":1,"22":1,"23":1,"25":1,"33":1,"57":1,"61":1,"68":1,"69":2,"70":1,"71":1,"73":1,"77":1,"81":1,"86":1,"92":1,"95":1,"96":1,"97":2,"98":1,"99":1,"103":1,"106":1,"110":1,"114":1,"117":1,"121":1,"126":1,"131":1,"136":1,"142":1,"145":1,"147":1,"151":1,"155":1,"158":1,"159":2,"160":1,"161":1,"163":1,"166":1,"171":1,"177":1,"181":1,"183":1,"202":1,"203":2,"204":1,"206":1,"207":1,"212":1,"219":1,"221":1,"227":1,"229":1,"236":1,"242":1,"246":1,"251":1,"252":2,"253":1,"254":1,"255":1,"256":1,"258":1,"265":1,"272":1,"274":1,"277":1,"285":1,"294":1,"297":1,"304":1,"310":1,"317":1,"327":1,"333":1,"338":1,"348":1,"352":1,"357":1,"363":1,"365":1,"369":1,"372":1,"377":1,"382":1,"390":1,"391":2,"392":1,"393":1,"394":1,"396":1,"402":1,"405":1,"409":1,"414":1,"421":1,"423":1,"429":1,"434":1,"441":1,"445":1,"447":1,"453":1,"457":1,"459":1,"467":1,"470":1,"474":1,"477":1,"480":1,"483":1,"486":1,"488":1,"492":1,"496":1,"498":1,"501":1,"504":1,"510":1,"511":2,"512":1,"514":1,"517":1,"519":1,"521":1,"525":1,"527":1,"531":1,"535":1,"540":1,"541":2,"542":1,"543":1,"545":1,"553":1,"555":1,"559":1,"561":1,"564":1,"567":1,"569":1,"572":1,"576":1,"580":1,"585":1,"590":1,"594":1,"598":1,"600":1,"606":1,"616":1,"617":2,"618":1,"620":1,"624":1,"638":1,"639":2,"640":1,"641":1,"642":1,"643":1,"645":1,"649":1,"661":1,"665":1,"669":1,"670":2,"671":1,"672":1,"673":1,"675":1,"679":1,"692":1,"695":1,"698":1,"699":2,"700":1,"701":1,"702":1,"704":1,"708":1,"717":1,"719":1,"722":1,"727":1,"728":2,"729":1,"730":1,"732":1,"736":1,"748":1,"751":1,"754":1,"755":2,"756":1,"757":1,"758":1,"760":1,"764":1,"776":1,"780":1,"783":1,"784":2,"785":1,"786":1,"787":1,"789":1,"794":1,"799":1,"803":1,"806":1,"809":1,"818":1,"832":1,"841":1,"842":2,"843":1,"844":1,"845":1,"847":1,"853":1,"856":1,"863":1,"866":1,"870":1,"873":1,"874":2,"875":1,"876":1,"877":1,"879":1,"883":1,"895":1,"898":1,"906":1,"909":1,"912":1,"920":1,"929":1,"940":1,"945":1,"950":1,"956":1,"960":1},"1":{"14":1,"15":1,"16":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"30":1,"62":1,"63":1,"64":1,"69":1,"70":1,"71":1,"97":1,"98":1,"99":2,"100":2,"101":2,"159":1,"160":1,"161":1,"184":1,"185":1,"203":1,"204":1,"207":1,"208":1,"209":1,"252":1,"253":1,"254":1,"255":1,"256":1,"391":1,"392":1,"393":1,"394":1,"505":1,"507":1,"508":1,"511":1,"512":1,"541":1,"542":1,"543":1,"617":1,"618":1,"639":1,"640":1,"641":1,"642":1,"643":1,"670":1,"671":1,"672":1,"673":1,"699":1,"700":1,"701":1,"702":1,"728":1,"729":1,"730":1,"755":1,"756":1,"757":1,"758":1,"784":1,"785":1,"786":1,"787":1,"795":1,"796":1,"842":1,"843":1,"844":1,"845":1,"874":1,"875":1,"876":1,"877":1},"2":{"1":1,"3":1,"25":1,"33":1,"59":1,"79":1,"100":1,"101":1,"104":4,"106":2,"108":1,"111":1,"115":3,"124":2,"129":1,"137":2,"143":1,"149":2,"152":2,"161":1,"164":1,"166":1,"168":2,"169":1,"171":1,"175":1,"179":1,"204":1,"223":3,"224":1,"231":1,"238":2,"246":1,"254":1,"258":1,"259":1,"260":1,"261":2,"266":1,"269":1,"281":1,"288":1,"289":3,"295":2,"304":2,"307":1,"313":1,"329":1,"330":1,"331":7,"342":1,"383":1,"407":2,"411":1,"430":1,"443":2,"449":2,"451":4,"464":1,"477":1,"480":1,"494":2,"504":1,"505":1,"506":7,"507":3,"509":1,"522":1,"550":2,"581":1,"586":1,"591":1,"631":2,"640":1,"643":1,"647":1,"650":14,"652":1,"653":2,"666":2,"672":1,"680":7,"683":2,"699":2,"706":1,"708":2,"709":16,"728":1,"737":24,"741":1,"743":6,"749":7,"753":8,"765":16,"777":2,"797":3,"801":1,"807":2,"820":1,"821":1,"822":1,"832":1,"833":3,"845":1,"854":14,"856":1,"859":1,"874":1,"881":3,"884":19,"887":2,"888":1,"889":1,"899":1,"908":1,"917":1,"921":1,"922":1,"927":1,"928":5,"942":2,"943":1,"952":2,"963":1,"964":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/assets/chunks/ArticleCardList.CkVrFXZK.js b/assets/chunks/ArticleCardList.0WObDkKh.js similarity index 98% rename from assets/chunks/ArticleCardList.CkVrFXZK.js rename to assets/chunks/ArticleCardList.0WObDkKh.js index 24d955f..055c3f6 100644 --- a/assets/chunks/ArticleCardList.CkVrFXZK.js +++ b/assets/chunks/ArticleCardList.0WObDkKh.js @@ -1 +1 @@ -import{f as O,s as f,v as W,q as X,x as G,y as j,c as s,g as h,o,a as t,F as g,m as $,n as L,t as u,k as v,z as N,_ as P}from"./vitepress-theme-teek.CUuTa6hm.js";const J=["viewBox"],Q=["d"],Z={class:"column-root"},ee={class:"node-root","data-node":"root"},te={class:"node-root-text"},se={class:"column-categories"},oe=["data-node"],ae=["onClick","aria-label"],le=["href","onClick"],ce={class:"cat-icon"},ne={class:"cat-title"},ie={class:"cat-count"},re={key:0,class:"column-articles"},de={key:0,class:"article-group"},ue=["href","data-node"],he=["href","onClick"],ge=O({__name:"KnowledgeGraph",props:{categories:{},maxArticles:{default:5},collapsedByDefault:{type:Boolean,default:!1},showArticles:{type:Boolean,default:!0},rootLabel:{default:""}},setup(l){const _=l,d=f({});W(()=>_.categories,r=>{r.forEach(a=>{a.id in d.value||(d.value[a.id]=_.collapsedByDefault)})},{immediate:!0});function c(r){d.value[r]=!d.value[r],G(()=>b())}function x(r){document.getElementById(`category-${r}`)?.scrollIntoView({behavior:"smooth",block:"start"})}const i=f(),p=f([]),w=f([]),E=f(800),S=f(400);function b(){if(!i.value)return;const r=i.value,a=r.getBoundingClientRect();E.value=a.width,S.value=a.height;const e=[],n=[],y=r.querySelector('[data-node="root"]');if(!y){p.value=[],w.value=[];return}const A=y.getBoundingClientRect(),z=A.right-a.left,q=A.top+A.height/2-a.top;_.categories.forEach(m=>{const I=r.querySelector(`[data-node="category-${m.id}"]`);if(!I)return;const k=I.getBoundingClientRect(),T=k.left-a.left,C=k.top+k.height/2-a.top,D=(z+T)/2;if(e.push(`M${z},${q} C${D},${q} ${D},${C} ${T},${C}`),n.push("path-category"),_.showArticles&&!d.value[m.id]){const U=Math.min(m.articles.length,_.maxArticles),H=k.right-a.left;for(let M=0;M{G(()=>b()),B=new ResizeObserver(()=>b()),i.value&&B.observe(i.value)}),j(()=>{B?.disconnect()}),(r,a)=>l.categories.length?(o(),s("div",{key:0,class:"knowledge-graph",ref_key:"containerRef",ref:i},[(o(),s("svg",{class:"graph-lines",viewBox:`0 0 ${E.value} ${S.value}`},[(o(!0),s(g,null,$(p.value,(e,n)=>(o(),s("path",{key:n,d:e,class:L(w.value[n])},null,10,Q))),128))],8,J)),t("div",{class:L(["graph-columns",{"graph-columns--no-articles":!l.showArticles}])},[t("div",Z,[t("div",ee,[t("span",te,u(l.rootLabel||"知识体系"),1)])]),t("div",se,[(o(!0),s(g,null,$(l.categories,e=>(o(),s("div",{key:e.id,class:"node-category","data-node":`category-${e.id}`,style:v({"--cat-color":e.color})},[l.showArticles?(o(),s("button",{key:0,class:"cat-toggle",onClick:n=>c(e.id),"aria-label":d.value[e.id]?"展开":"折叠"},[t("span",{class:L(["toggle-icon",{collapsed:d.value[e.id]}])},"▸",2)],8,ae)):h("",!0),t("a",{class:"cat-body",href:`#category-${e.id}`,onClick:N(n=>x(e.id),["prevent"])},[t("span",ce,u(e.icon),1),t("span",ne,u(e.title),1),t("span",ie,u(e.articles.length)+" 篇",1)],8,le)],12,oe))),128))]),l.showArticles?(o(),s("div",re,[(o(!0),s(g,null,$(l.categories,e=>(o(),s(g,{key:`articles-${e.id}`},[d.value[e.id]?h("",!0):(o(),s("div",de,[(o(!0),s(g,null,$(e.articles.slice(0,l.maxArticles),(n,y)=>(o(),s("a",{key:n.url,href:n.url,class:"node-article","data-node":`article-${e.id}-${y}`,style:v({"--cat-color":e.color})},u(n.title),13,ue))),128)),e.articles.length>l.maxArticles?(o(),s("a",{key:0,href:`#category-${e.id}`,onClick:N(n=>x(e.id),["prevent"]),class:"node-more"}," + 更多 "+u(e.articles.length-l.maxArticles)+" 篇 ",9,he)):h("",!0)]))],64))),128))])):h("",!0)],2)],512)):h("",!0)}}),Re=P(ge,[["__scopeId","data-v-117550f0"]]),ve={class:"article-card-list"},_e=["id"],fe={class:"category-header"},$e=["innerHTML"],pe={class:"category-info"},ye={class:"category-title"},me={class:"article-grid"},ke=["href"],Ce={class:"card-body"},xe={class:"article-meta"},we={key:0,class:"article-tag"},be={class:"article-title"},Be={key:0,class:"article-desc"},Ae=O({__name:"ArticleCardList",props:{categories:{}},setup(l){return(_,d)=>(o(),s("div",ve,[(o(!0),s(g,null,$(l.categories,(c,x)=>(o(),s("div",{key:c.title,id:`category-${c.id}`,class:"category-section"},[t("div",fe,[t("div",{class:"category-icon-wrap",style:v({background:`linear-gradient(135deg, ${c.color}20, ${c.color}08)`})},[t("span",{class:"category-icon",style:v({color:c.color}),innerHTML:c.icon},null,12,$e)],4),t("div",pe,[t("h3",ye,u(c.title),1)]),t("div",{class:"category-line",style:v({background:`linear-gradient(90deg, ${c.color}40, transparent)`})},null,4)]),t("div",me,[(o(!0),s(g,null,$(c.articles,(i,p)=>(o(),s("a",{key:i.url,href:i.url,class:"article-card"},[t("div",{class:"card-indicator",style:v({background:c.color})},null,4),t("div",Ce,[t("div",xe,[t("span",{class:"article-index",style:v({color:c.color})},u(String(p+1).padStart(2,"0")),5),i.description?(o(),s("span",we,"文章")):h("",!0)]),t("h4",be,u(i.title),1),i.description?(o(),s("p",Be,u(i.description),1)):h("",!0)]),d[0]||(d[0]=t("div",{class:"card-action"},[t("span",{class:"action-text"},"阅读"),t("svg",{class:"action-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("path",{d:"M5 12h14M12 5l7 7-7 7"})])],-1))],8,ke))),128))])],8,_e))),128))]))}}),Le=P(Ae,[["__scopeId","data-v-33e3a0c3"]]);export{Le as A,Re as K}; +import{f as O,s as f,v as W,q as X,x as G,y as j,c as s,g as h,o,a as t,F as g,m as $,n as L,t as u,k as v,z as N,_ as P}from"./vitepress-theme-teek.Dg-9NfO3.js";const J=["viewBox"],Q=["d"],Z={class:"column-root"},ee={class:"node-root","data-node":"root"},te={class:"node-root-text"},se={class:"column-categories"},oe=["data-node"],ae=["onClick","aria-label"],le=["href","onClick"],ce={class:"cat-icon"},ne={class:"cat-title"},ie={class:"cat-count"},re={key:0,class:"column-articles"},de={key:0,class:"article-group"},ue=["href","data-node"],he=["href","onClick"],ge=O({__name:"KnowledgeGraph",props:{categories:{},maxArticles:{default:5},collapsedByDefault:{type:Boolean,default:!1},showArticles:{type:Boolean,default:!0},rootLabel:{default:""}},setup(l){const _=l,d=f({});W(()=>_.categories,r=>{r.forEach(a=>{a.id in d.value||(d.value[a.id]=_.collapsedByDefault)})},{immediate:!0});function c(r){d.value[r]=!d.value[r],G(()=>b())}function x(r){document.getElementById(`category-${r}`)?.scrollIntoView({behavior:"smooth",block:"start"})}const i=f(),p=f([]),w=f([]),E=f(800),S=f(400);function b(){if(!i.value)return;const r=i.value,a=r.getBoundingClientRect();E.value=a.width,S.value=a.height;const e=[],n=[],y=r.querySelector('[data-node="root"]');if(!y){p.value=[],w.value=[];return}const A=y.getBoundingClientRect(),z=A.right-a.left,q=A.top+A.height/2-a.top;_.categories.forEach(m=>{const I=r.querySelector(`[data-node="category-${m.id}"]`);if(!I)return;const k=I.getBoundingClientRect(),T=k.left-a.left,C=k.top+k.height/2-a.top,D=(z+T)/2;if(e.push(`M${z},${q} C${D},${q} ${D},${C} ${T},${C}`),n.push("path-category"),_.showArticles&&!d.value[m.id]){const U=Math.min(m.articles.length,_.maxArticles),H=k.right-a.left;for(let M=0;M{G(()=>b()),B=new ResizeObserver(()=>b()),i.value&&B.observe(i.value)}),j(()=>{B?.disconnect()}),(r,a)=>l.categories.length?(o(),s("div",{key:0,class:"knowledge-graph",ref_key:"containerRef",ref:i},[(o(),s("svg",{class:"graph-lines",viewBox:`0 0 ${E.value} ${S.value}`},[(o(!0),s(g,null,$(p.value,(e,n)=>(o(),s("path",{key:n,d:e,class:L(w.value[n])},null,10,Q))),128))],8,J)),t("div",{class:L(["graph-columns",{"graph-columns--no-articles":!l.showArticles}])},[t("div",Z,[t("div",ee,[t("span",te,u(l.rootLabel||"知识体系"),1)])]),t("div",se,[(o(!0),s(g,null,$(l.categories,e=>(o(),s("div",{key:e.id,class:"node-category","data-node":`category-${e.id}`,style:v({"--cat-color":e.color})},[l.showArticles?(o(),s("button",{key:0,class:"cat-toggle",onClick:n=>c(e.id),"aria-label":d.value[e.id]?"展开":"折叠"},[t("span",{class:L(["toggle-icon",{collapsed:d.value[e.id]}])},"▸",2)],8,ae)):h("",!0),t("a",{class:"cat-body",href:`#category-${e.id}`,onClick:N(n=>x(e.id),["prevent"])},[t("span",ce,u(e.icon),1),t("span",ne,u(e.title),1),t("span",ie,u(e.articles.length)+" 篇",1)],8,le)],12,oe))),128))]),l.showArticles?(o(),s("div",re,[(o(!0),s(g,null,$(l.categories,e=>(o(),s(g,{key:`articles-${e.id}`},[d.value[e.id]?h("",!0):(o(),s("div",de,[(o(!0),s(g,null,$(e.articles.slice(0,l.maxArticles),(n,y)=>(o(),s("a",{key:n.url,href:n.url,class:"node-article","data-node":`article-${e.id}-${y}`,style:v({"--cat-color":e.color})},u(n.title),13,ue))),128)),e.articles.length>l.maxArticles?(o(),s("a",{key:0,href:`#category-${e.id}`,onClick:N(n=>x(e.id),["prevent"]),class:"node-more"}," + 更多 "+u(e.articles.length-l.maxArticles)+" 篇 ",9,he)):h("",!0)]))],64))),128))])):h("",!0)],2)],512)):h("",!0)}}),Re=P(ge,[["__scopeId","data-v-117550f0"]]),ve={class:"article-card-list"},_e=["id"],fe={class:"category-header"},$e=["innerHTML"],pe={class:"category-info"},ye={class:"category-title"},me={class:"article-grid"},ke=["href"],Ce={class:"card-body"},xe={class:"article-meta"},we={key:0,class:"article-tag"},be={class:"article-title"},Be={key:0,class:"article-desc"},Ae=O({__name:"ArticleCardList",props:{categories:{}},setup(l){return(_,d)=>(o(),s("div",ve,[(o(!0),s(g,null,$(l.categories,(c,x)=>(o(),s("div",{key:c.title,id:`category-${c.id}`,class:"category-section"},[t("div",fe,[t("div",{class:"category-icon-wrap",style:v({background:`linear-gradient(135deg, ${c.color}20, ${c.color}08)`})},[t("span",{class:"category-icon",style:v({color:c.color}),innerHTML:c.icon},null,12,$e)],4),t("div",pe,[t("h3",ye,u(c.title),1)]),t("div",{class:"category-line",style:v({background:`linear-gradient(90deg, ${c.color}40, transparent)`})},null,4)]),t("div",me,[(o(!0),s(g,null,$(c.articles,(i,p)=>(o(),s("a",{key:i.url,href:i.url,class:"article-card"},[t("div",{class:"card-indicator",style:v({background:c.color})},null,4),t("div",Ce,[t("div",xe,[t("span",{class:"article-index",style:v({color:c.color})},u(String(p+1).padStart(2,"0")),5),i.description?(o(),s("span",we,"文章")):h("",!0)]),t("h4",be,u(i.title),1),i.description?(o(),s("p",Be,u(i.description),1)):h("",!0)]),d[0]||(d[0]=t("div",{class:"card-action"},[t("span",{class:"action-text"},"阅读"),t("svg",{class:"action-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[t("path",{d:"M5 12h14M12 5l7 7-7 7"})])],-1))],8,ke))),128))])],8,_e))),128))]))}}),Le=P(Ae,[["__scopeId","data-v-33e3a0c3"]]);export{Le as A,Re as K}; diff --git a/assets/chunks/Blockquote.acMDZFAD.js b/assets/chunks/Blockquote.B7nHhHWl.js similarity index 92% rename from assets/chunks/Blockquote.acMDZFAD.js rename to assets/chunks/Blockquote.B7nHhHWl.js index 1c16ed4..dfbf260 100644 --- a/assets/chunks/Blockquote.acMDZFAD.js +++ b/assets/chunks/Blockquote.B7nHhHWl.js @@ -1 +1 @@ -import{f as n,c as e,o,n as i,a as c,g as a,t as s,_ as u}from"./vitepress-theme-teek.CUuTa6hm.js";/* empty css */const r={class:"bq-icon"},l={key:0,class:"bq-insight"},h={class:"bq-text"},q={key:1,class:"bq-footer"},d={key:0,class:"bq-author"},k={key:1,class:"bq-source"},m=n({__name:"Blockquote",props:{quote:{},author:{},source:{},variant:{},icon:{},insight:{}},setup(t){return(b,f)=>(o(),e("blockquote",{class:i(["blockquote",`blockquote--${t.variant||"default"}`])},[c("span",r,s(t.icon||(t.variant==="insight"?"💡":"❝")),1),t.insight?(o(),e("p",l,s(t.insight),1)):a("",!0),c("p",h,s(t.quote),1),t.author||t.source?(o(),e("footer",q,[t.author?(o(),e("span",d,s(t.author),1)):a("",!0),t.source?(o(),e("span",k,s(t.source),1)):a("",!0)])):a("",!0)],2))}}),y=u(m,[["__scopeId","data-v-98941158"]]);export{y as B}; +import{f as n,c as e,o,n as i,a as c,g as a,t as s,_ as u}from"./vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const r={class:"bq-icon"},l={key:0,class:"bq-insight"},h={class:"bq-text"},q={key:1,class:"bq-footer"},d={key:0,class:"bq-author"},k={key:1,class:"bq-source"},m=n({__name:"Blockquote",props:{quote:{},author:{},source:{},variant:{},icon:{},insight:{}},setup(t){return(b,f)=>(o(),e("blockquote",{class:i(["blockquote",`blockquote--${t.variant||"default"}`])},[c("span",r,s(t.icon||(t.variant==="insight"?"💡":"❝")),1),t.insight?(o(),e("p",l,s(t.insight),1)):a("",!0),c("p",h,s(t.quote),1),t.author||t.source?(o(),e("footer",q,[t.author?(o(),e("span",d,s(t.author),1)):a("",!0),t.source?(o(),e("span",k,s(t.source),1)):a("",!0)])):a("",!0)],2))}}),y=u(m,[["__scopeId","data-v-98941158"]]);export{y as B}; diff --git a/assets/chunks/Callout.B-9wy57V.js b/assets/chunks/Callout.Bss1uX1v.js similarity index 96% rename from assets/chunks/Callout.B-9wy57V.js rename to assets/chunks/Callout.Bss1uX1v.js index 305f192..d104823 100644 --- a/assets/chunks/Callout.B-9wy57V.js +++ b/assets/chunks/Callout.Bss1uX1v.js @@ -1 +1 @@ -import{f as d,c as t,g as s,o as n,a as i,t as o,_ as r,h as g,n as f,F as a,e as c}from"./vitepress-theme-teek.CUuTa6hm.js";const m={key:0,class:"fig-root"},h={class:"fig-body"},k={key:0,class:"fig-img-wrap"},b=["src","alt"],v=["innerHTML"],C={key:0,class:"fig-caption"},N={key:0,class:"fig-num"},L={key:1},$=d({__name:"FigureContainer",props:{type:{},content:{},caption:{},figureNumber:{},alt:{}},setup(e){return(l,u)=>e.content?(n(),t("figure",m,[i("div",h,[e.type==="image"?(n(),t("div",k,[i("img",{src:e.content,alt:e.alt||e.caption||"figure",class:"fig-img",loading:"lazy"},null,8,b)])):(n(),t("div",{key:1,class:"fig-diagram",innerHTML:e.content},null,8,v))]),e.caption||e.figureNumber?(n(),t("figcaption",C,[e.figureNumber?(n(),t("span",N,o(e.figureNumber),1)):s("",!0),e.caption?(n(),t("span",L,o(e.caption),1)):s("",!0)])):s("",!0)])):s("",!0)}}),V=r($,[["__scopeId","data-v-b0dbba96"]]),x={class:"callout-header"},F={class:"callout-icon"},T={class:"callout-title"},p=["innerHTML"],B=d({__name:"Callout",props:{type:{},title:{},content:{},collapsible:{type:Boolean}},setup(e){const l=e,u={tip:"提示",warning:"注意",danger:"警告",info:"信息",success:"成功",question:"思考"},y=g(()=>u[l.type]||"");return(H,M)=>e.content?(n(),t("div",{key:0,class:f(["callout",`callout--${e.type}`])},[i("div",x,[i("span",F,[e.type==="tip"?(n(),t(a,{key:0},[c("💡")],64)):e.type==="warning"?(n(),t(a,{key:1},[c("⚠️")],64)):e.type==="danger"?(n(),t(a,{key:2},[c("🚫")],64)):e.type==="info"?(n(),t(a,{key:3},[c("ℹ️")],64)):e.type==="success"?(n(),t(a,{key:4},[c("✅")],64)):e.type==="question"?(n(),t(a,{key:5},[c("❓")],64)):s("",!0)]),i("span",T,o(e.title||y.value),1)]),i("div",{class:"callout-body",innerHTML:e.content},null,8,p)],2)):s("",!0)}}),q=r(B,[["__scopeId","data-v-dfd37a36"]]);export{q as C,V as F}; +import{f as d,c as t,g as s,o as n,a as i,t as o,_ as r,h as g,n as f,F as a,e as c}from"./vitepress-theme-teek.Dg-9NfO3.js";const m={key:0,class:"fig-root"},h={class:"fig-body"},k={key:0,class:"fig-img-wrap"},b=["src","alt"],v=["innerHTML"],C={key:0,class:"fig-caption"},N={key:0,class:"fig-num"},L={key:1},$=d({__name:"FigureContainer",props:{type:{},content:{},caption:{},figureNumber:{},alt:{}},setup(e){return(l,u)=>e.content?(n(),t("figure",m,[i("div",h,[e.type==="image"?(n(),t("div",k,[i("img",{src:e.content,alt:e.alt||e.caption||"figure",class:"fig-img",loading:"lazy"},null,8,b)])):(n(),t("div",{key:1,class:"fig-diagram",innerHTML:e.content},null,8,v))]),e.caption||e.figureNumber?(n(),t("figcaption",C,[e.figureNumber?(n(),t("span",N,o(e.figureNumber),1)):s("",!0),e.caption?(n(),t("span",L,o(e.caption),1)):s("",!0)])):s("",!0)])):s("",!0)}}),V=r($,[["__scopeId","data-v-b0dbba96"]]),x={class:"callout-header"},F={class:"callout-icon"},T={class:"callout-title"},p=["innerHTML"],B=d({__name:"Callout",props:{type:{},title:{},content:{},collapsible:{type:Boolean}},setup(e){const l=e,u={tip:"提示",warning:"注意",danger:"警告",info:"信息",success:"成功",question:"思考"},y=g(()=>u[l.type]||"");return(H,M)=>e.content?(n(),t("div",{key:0,class:f(["callout",`callout--${e.type}`])},[i("div",x,[i("span",F,[e.type==="tip"?(n(),t(a,{key:0},[c("💡")],64)):e.type==="warning"?(n(),t(a,{key:1},[c("⚠️")],64)):e.type==="danger"?(n(),t(a,{key:2},[c("🚫")],64)):e.type==="info"?(n(),t(a,{key:3},[c("ℹ️")],64)):e.type==="success"?(n(),t(a,{key:4},[c("✅")],64)):e.type==="question"?(n(),t(a,{key:5},[c("❓")],64)):s("",!0)]),i("span",T,o(e.title||y.value),1)]),i("div",{class:"callout-body",innerHTML:e.content},null,8,p)],2)):s("",!0)}}),q=r(B,[["__scopeId","data-v-dfd37a36"]]);export{q as C,V as F}; diff --git a/assets/chunks/ConceptPair.DYvaVmrQ.js b/assets/chunks/ConceptPair.CDPz5jW2.js similarity index 95% rename from assets/chunks/ConceptPair.DYvaVmrQ.js rename to assets/chunks/ConceptPair.CDPz5jW2.js index e3a611f..7404cb5 100644 --- a/assets/chunks/ConceptPair.DYvaVmrQ.js +++ b/assets/chunks/ConceptPair.CDPz5jW2.js @@ -1 +1 @@ -import{f as d,c as e,g as o,o as c,a as n,t as s,F as l,m as r,_ as h}from"./vitepress-theme-teek.CUuTa6hm.js";/* empty css */const u={key:0,class:"concept-pair"},p={key:0,class:"concept-pair-title"},f={class:"concept-pair-row"},g={class:"concept-card concept-left"},m={class:"concept-label"},k={key:0,class:"concept-desc"},v={key:1,class:"concept-points"},y={class:"concept-connector"},_={class:"connector-text"},b={class:"concept-card concept-right"},C={class:"concept-label"},x={key:0,class:"concept-desc"},B={key:1,class:"concept-points"},F=d({__name:"ConceptPair",props:{title:{},left:{},right:{},connector:{}},setup(t){return(N,P)=>t.left&&t.right?(c(),e("div",u,[t.title?(c(),e("div",p,s(t.title),1)):o("",!0),n("div",f,[n("div",g,[n("div",m,s(t.left.label),1),t.left.description?(c(),e("p",k,s(t.left.description),1)):o("",!0),t.left.points?.length?(c(),e("ul",v,[(c(!0),e(l,null,r(t.left.points,(i,a)=>(c(),e("li",{key:a},s(i),1))),128))])):o("",!0)]),n("div",y,[n("span",_,s(t.connector||"vs"),1)]),n("div",b,[n("div",C,s(t.right.label),1),t.right.description?(c(),e("p",x,s(t.right.description),1)):o("",!0),t.right.points?.length?(c(),e("ul",B,[(c(!0),e(l,null,r(t.right.points,(i,a)=>(c(),e("li",{key:a},s(i),1))),128))])):o("",!0)])])])):o("",!0)}}),D=h(F,[["__scopeId","data-v-94ebdf1c"]]);export{D as C}; +import{f as d,c as e,g as o,o as c,a as n,t as s,F as l,m as r,_ as h}from"./vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const u={key:0,class:"concept-pair"},p={key:0,class:"concept-pair-title"},f={class:"concept-pair-row"},g={class:"concept-card concept-left"},m={class:"concept-label"},k={key:0,class:"concept-desc"},v={key:1,class:"concept-points"},y={class:"concept-connector"},_={class:"connector-text"},b={class:"concept-card concept-right"},C={class:"concept-label"},x={key:0,class:"concept-desc"},B={key:1,class:"concept-points"},F=d({__name:"ConceptPair",props:{title:{},left:{},right:{},connector:{}},setup(t){return(N,P)=>t.left&&t.right?(c(),e("div",u,[t.title?(c(),e("div",p,s(t.title),1)):o("",!0),n("div",f,[n("div",g,[n("div",m,s(t.left.label),1),t.left.description?(c(),e("p",k,s(t.left.description),1)):o("",!0),t.left.points?.length?(c(),e("ul",v,[(c(!0),e(l,null,r(t.left.points,(i,a)=>(c(),e("li",{key:a},s(i),1))),128))])):o("",!0)]),n("div",y,[n("span",_,s(t.connector||"vs"),1)]),n("div",b,[n("div",C,s(t.right.label),1),t.right.description?(c(),e("p",x,s(t.right.description),1)):o("",!0),t.right.points?.length?(c(),e("ul",B,[(c(!0),e(l,null,r(t.right.points,(i,a)=>(c(),e("li",{key:a},s(i),1))),128))])):o("",!0)])])])):o("",!0)}}),D=h(F,[["__scopeId","data-v-94ebdf1c"]]);export{D as C}; diff --git a/assets/chunks/FeatureGrid.C9SUnqP9.js b/assets/chunks/FeatureGrid.LE2S2SBN.js similarity index 92% rename from assets/chunks/FeatureGrid.C9SUnqP9.js rename to assets/chunks/FeatureGrid.LE2S2SBN.js index 585f57e..3d9dbe3 100644 --- a/assets/chunks/FeatureGrid.C9SUnqP9.js +++ b/assets/chunks/FeatureGrid.LE2S2SBN.js @@ -1 +1 @@ -import{f as n,c as t,g as i,o as s,a,t as r,F as d,m as l,n as u,_}from"./vitepress-theme-teek.CUuTa6hm.js";const f={key:0,class:"feature-grid"},m={key:0,class:"feature-grid-title"},h={class:"feature-icon-wrap"},g={class:"feature-icon"},p={class:"feature-body"},v={class:"feature-name"},k={key:0,class:"feature-desc"},y=n({__name:"FeatureGrid",props:{title:{},items:{},columns:{}},setup(e){return(F,x)=>e.items.length?(s(),t("div",f,[e.title?(s(),t("div",m,r(e.title),1)):i("",!0),a("div",{class:u(["feature-grid-items",`feature-grid--cols${e.columns||2}`])},[(s(!0),t(d,null,l(e.items,(c,o)=>(s(),t("div",{key:o,class:"feature-card"},[a("div",h,[a("span",g,r(c.icon),1)]),a("div",p,[a("h4",v,r(c.title),1),c.description?(s(),t("p",k,r(c.description),1)):i("",!0)])]))),128))],2)])):i("",!0)}}),C=_(y,[["__scopeId","data-v-3c959517"]]);export{C as F}; +import{f as n,c as t,g as i,o as s,a,t as r,F as d,m as l,n as u,_}from"./vitepress-theme-teek.Dg-9NfO3.js";const f={key:0,class:"feature-grid"},m={key:0,class:"feature-grid-title"},h={class:"feature-icon-wrap"},g={class:"feature-icon"},p={class:"feature-body"},v={class:"feature-name"},k={key:0,class:"feature-desc"},y=n({__name:"FeatureGrid",props:{title:{},items:{},columns:{}},setup(e){return(F,x)=>e.items.length?(s(),t("div",f,[e.title?(s(),t("div",m,r(e.title),1)):i("",!0),a("div",{class:u(["feature-grid-items",`feature-grid--cols${e.columns||2}`])},[(s(!0),t(d,null,l(e.items,(c,o)=>(s(),t("div",{key:o,class:"feature-card"},[a("div",h,[a("span",g,r(c.icon),1)]),a("div",p,[a("h4",v,r(c.title),1),c.description?(s(),t("p",k,r(c.description),1)):i("",!0)])]))),128))],2)])):i("",!0)}}),C=_(y,[["__scopeId","data-v-3c959517"]]);export{C as F}; diff --git a/assets/chunks/HighLightText.pXHFEzDb.js b/assets/chunks/HighLightText.DNC3BKyb.js similarity index 92% rename from assets/chunks/HighLightText.pXHFEzDb.js rename to assets/chunks/HighLightText.DNC3BKyb.js index 5d9ea4b..62af015 100644 --- a/assets/chunks/HighLightText.pXHFEzDb.js +++ b/assets/chunks/HighLightText.DNC3BKyb.js @@ -1 +1 @@ -import{f as r,h as e,i as p,o as d,w as i,j as c,k as u,n as g,l as h,_ as m}from"./vitepress-theme-teek.CUuTa6hm.js";/* empty css */const f=r({__name:"HighLightText",props:{type:{default:"warning"},bold:{type:Boolean,default:!1},bgColor:{},textColor:{},padding:{default:"2px 6px"},borderRadius:{default:"3px"}},setup(o){const t=o,s=e(()=>t.bold?"strong":"span"),a=e(()=>["highlight-text",`highlight-text--${t.type}`]),l=e(()=>({"--hl-padding":t.padding,"--hl-border-radius":t.borderRadius,...t.type==="custom"?{"--hl-custom-bg":t.bgColor,"--hl-custom-text":t.textColor}:{}}));return(n,x)=>(d(),p(h(s.value),{class:g(a.value),style:u(l.value)},{default:i(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["class","style"]))}}),y=m(f,[["__scopeId","data-v-f601581b"]]);export{y as H}; +import{f as r,h as e,i as p,o as d,w as i,j as c,k as u,n as g,l as h,_ as m}from"./vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const f=r({__name:"HighLightText",props:{type:{default:"warning"},bold:{type:Boolean,default:!1},bgColor:{},textColor:{},padding:{default:"2px 6px"},borderRadius:{default:"3px"}},setup(o){const t=o,s=e(()=>t.bold?"strong":"span"),a=e(()=>["highlight-text",`highlight-text--${t.type}`]),l=e(()=>({"--hl-padding":t.padding,"--hl-border-radius":t.borderRadius,...t.type==="custom"?{"--hl-custom-bg":t.bgColor,"--hl-custom-text":t.textColor}:{}}));return(n,x)=>(d(),p(h(s.value),{class:g(a.value),style:u(l.value)},{default:i(()=>[c(n.$slots,"default",{},void 0,!0)]),_:3},8,["class","style"]))}}),y=m(f,[["__scopeId","data-v-f601581b"]]);export{y as H}; diff --git a/assets/chunks/KeyTakeaway.DyBgCpiw.js b/assets/chunks/KeyTakeaway.Cr-Br5gs.js similarity index 91% rename from assets/chunks/KeyTakeaway.DyBgCpiw.js rename to assets/chunks/KeyTakeaway.Cr-Br5gs.js index 34962e6..8926b70 100644 --- a/assets/chunks/KeyTakeaway.DyBgCpiw.js +++ b/assets/chunks/KeyTakeaway.Cr-Br5gs.js @@ -1 +1 @@ -import{f as i,c as e,g as l,o as s,n as r,a as t,t as n,F as d,m as k,_ as m}from"./vitepress-theme-teek.CUuTa6hm.js";const y={class:"kt-header"},u={class:"kt-icon"},f={class:"kt-title"},h={class:"kt-list"},v=i({__name:"KeyTakeaway",props:{title:{},points:{},variant:{},icon:{}},setup(a){return(_,g)=>a.points.length?(s(),e("div",{key:0,class:r(["key-takeaway",`key-takeaway--${a.variant||"summary"}`])},[t("div",y,[t("span",u,n(a.icon||(a.variant==="conclusion"?"✅":"💡")),1),t("span",f,n(a.title||(a.variant==="conclusion"?"核心结论":"关键要点")),1)]),t("ul",h,[(s(!0),e(d,null,k(a.points,(c,o)=>(s(),e("li",{key:o},n(c),1))),128))])],2)):l("",!0)}}),p=m(v,[["__scopeId","data-v-dfff761c"]]);export{p as K}; +import{f as i,c as e,g as l,o as s,n as r,a as t,t as n,F as d,m as k,_ as m}from"./vitepress-theme-teek.Dg-9NfO3.js";const y={class:"kt-header"},u={class:"kt-icon"},f={class:"kt-title"},h={class:"kt-list"},v=i({__name:"KeyTakeaway",props:{title:{},points:{},variant:{},icon:{}},setup(a){return(_,g)=>a.points.length?(s(),e("div",{key:0,class:r(["key-takeaway",`key-takeaway--${a.variant||"summary"}`])},[t("div",y,[t("span",u,n(a.icon||(a.variant==="conclusion"?"✅":"💡")),1),t("span",f,n(a.title||(a.variant==="conclusion"?"核心结论":"关键要点")),1)]),t("ul",h,[(s(!0),e(d,null,k(a.points,(c,o)=>(s(),e("li",{key:o},n(c),1))),128))])],2)):l("",!0)}}),p=m(v,[["__scopeId","data-v-dfff761c"]]);export{p as K}; diff --git a/assets/chunks/KnowledgePhilosophyBanner.hZQ91uX1.js b/assets/chunks/KnowledgePhilosophyBanner.IYXLkN-i.js similarity index 97% rename from assets/chunks/KnowledgePhilosophyBanner.hZQ91uX1.js rename to assets/chunks/KnowledgePhilosophyBanner.IYXLkN-i.js index b22c283..b72fc9b 100644 --- a/assets/chunks/KnowledgePhilosophyBanner.hZQ91uX1.js +++ b/assets/chunks/KnowledgePhilosophyBanner.IYXLkN-i.js @@ -1 +1 @@ -import{f as h,c as t,o as c,a,d as u,F as r,m as d,g as s,t as i,e as y,_ as x}from"./vitepress-theme-teek.CUuTa6hm.js";const g={class:"philosophy-banner"},f={class:"decorative-svg","aria-hidden":"true",viewBox:"0 0 1200 400",preserveAspectRatio:"none"},v={class:"dot-grid"},b=["cx","cy"],k={class:"banner-content"},_={key:0,class:"banner-label"},m={key:1,class:"banner-title"},B={key:0,class:"title-sep"},P={key:1,class:"title-highlight"},H={key:2,class:"banner-subtitle"},N={key:3,class:"pillars-grid"},T={class:"pillar-title"},V={class:"pillar-desc"},p={key:4,class:"context-card"},w={key:0,class:"context-label"},K={class:"context-list"},C=h({__name:"KnowledgePhilosophyBanner",props:{label:{},title:{},titleHighlight:{},subtitle:{},pillars:{},contextTitle:{},contextPoints:{}},setup(e){return(F,n)=>(c(),t("header",g,[(c(),t("svg",f,[n[0]||(n[0]=u('',5)),a("g",v,[(c(),t(r,null,d(36,l=>a("circle",{key:l,cx:30+(l-1)%6*22,cy:20+Math.floor((l-1)/6)*22,r:"1"},null,8,b)),64))]),n[1]||(n[1]=a("line",{x1:"30",y1:"385",x2:"400",y2:"385",class:"deco-line"},null,-1))])),a("div",k,[e.label?(c(),t("p",_,i(e.label),1)):s("",!0),e.title?(c(),t("h1",m,[y(i(e.title),1),e.titleHighlight?(c(),t("span",B," · ")):s("",!0),e.titleHighlight?(c(),t("span",P,i(e.titleHighlight),1)):s("",!0)])):s("",!0),e.subtitle?(c(),t("p",H,i(e.subtitle),1)):s("",!0),e.pillars.length?(c(),t("div",N,[(c(!0),t(r,null,d(e.pillars,(l,o)=>(c(),t("div",{key:o,class:"pillar-card"},[a("p",T,i(l.title),1),a("p",V,i(l.description),1)]))),128))])):s("",!0),e.contextPoints?.length?(c(),t("div",p,[e.contextTitle?(c(),t("p",w,i(e.contextTitle),1)):s("",!0),a("ul",K,[(c(!0),t(r,null,d(e.contextPoints,(l,o)=>(c(),t("li",{key:o},i(l),1))),128))])])):s("",!0)])]))}}),A=x(C,[["__scopeId","data-v-97dff961"]]);export{A as K}; +import{f as h,c as t,o as c,a,d as u,F as r,m as d,g as s,t as i,e as y,_ as x}from"./vitepress-theme-teek.Dg-9NfO3.js";const g={class:"philosophy-banner"},f={class:"decorative-svg","aria-hidden":"true",viewBox:"0 0 1200 400",preserveAspectRatio:"none"},v={class:"dot-grid"},b=["cx","cy"],k={class:"banner-content"},_={key:0,class:"banner-label"},m={key:1,class:"banner-title"},B={key:0,class:"title-sep"},P={key:1,class:"title-highlight"},H={key:2,class:"banner-subtitle"},N={key:3,class:"pillars-grid"},T={class:"pillar-title"},V={class:"pillar-desc"},p={key:4,class:"context-card"},w={key:0,class:"context-label"},K={class:"context-list"},C=h({__name:"KnowledgePhilosophyBanner",props:{label:{},title:{},titleHighlight:{},subtitle:{},pillars:{},contextTitle:{},contextPoints:{}},setup(e){return(F,n)=>(c(),t("header",g,[(c(),t("svg",f,[n[0]||(n[0]=u('',5)),a("g",v,[(c(),t(r,null,d(36,l=>a("circle",{key:l,cx:30+(l-1)%6*22,cy:20+Math.floor((l-1)/6)*22,r:"1"},null,8,b)),64))]),n[1]||(n[1]=a("line",{x1:"30",y1:"385",x2:"400",y2:"385",class:"deco-line"},null,-1))])),a("div",k,[e.label?(c(),t("p",_,i(e.label),1)):s("",!0),e.title?(c(),t("h1",m,[y(i(e.title),1),e.titleHighlight?(c(),t("span",B," · ")):s("",!0),e.titleHighlight?(c(),t("span",P,i(e.titleHighlight),1)):s("",!0)])):s("",!0),e.subtitle?(c(),t("p",H,i(e.subtitle),1)):s("",!0),e.pillars.length?(c(),t("div",N,[(c(!0),t(r,null,d(e.pillars,(l,o)=>(c(),t("div",{key:o,class:"pillar-card"},[a("p",T,i(l.title),1),a("p",V,i(l.description),1)]))),128))])):s("",!0),e.contextPoints?.length?(c(),t("div",p,[e.contextTitle?(c(),t("p",w,i(e.contextTitle),1)):s("",!0),a("ul",K,[(c(!0),t(r,null,d(e.contextPoints,(l,o)=>(c(),t("li",{key:o},i(l),1))),128))])])):s("",!0)])]))}}),A=x(C,[["__scopeId","data-v-97dff961"]]);export{A as K}; diff --git a/assets/chunks/ResourceCard.Org1H1aA.js b/assets/chunks/ResourceCard.Cht61sMy.js similarity index 97% rename from assets/chunks/ResourceCard.Org1H1aA.js rename to assets/chunks/ResourceCard.Cht61sMy.js index 561160c..08b9538 100644 --- a/assets/chunks/ResourceCard.Org1H1aA.js +++ b/assets/chunks/ResourceCard.Cht61sMy.js @@ -1 +1 @@ -import{f as g,c as t,g as r,o as s,n as u,F as d,m as h,a as n,t as a,_ as f,h as y}from"./vitepress-theme-teek.CUuTa6hm.js";/* empty css */const v={class:"tl-marker"},$={class:"tl-dot"},p={key:0,class:"tl-emoji"},b={key:1,class:"tl-num"},x={key:0,class:"tl-line"},C={class:"tl-body"},B={class:"tl-date"},I={class:"tl-title"},R=["href"],T={key:1},E={key:0,class:"tl-tags"},F={key:1,class:"tl-desc"},N=g({__name:"Timeline",props:{events:{},layout:{}},setup(e){return(i,m)=>e.events.length?(s(),t("div",{key:0,class:u(["timeline",`timeline--${e.layout||"vertical"}`])},[(s(!0),t(d,null,h(e.events,(c,o)=>(s(),t("div",{key:o,class:u(["tl-item",{"tl-item--last":o===e.events.length-1}])},[n("div",v,[n("span",$,[c.icon?(s(),t("span",p,a(c.icon),1)):(s(),t("span",b,a(o+1),1))]),o(s(),t("span",{key:l,class:"tl-tag"},a(l),1))),128))])):r("",!0),c.description?(s(),t("p",F,a(c.description),1)):r("",!0)])],2))),128))],2)):r("",!0)}}),A=f(N,[["__scopeId","data-v-b495583e"]]),V=["href","target","rel"],W={class:"rc-icon"},j={class:"rc-body"},w={class:"rc-name"},z={class:"rc-desc"},D={key:0,class:"rc-meta"},L={key:0,class:"rc-stars"},M=g({__name:"ResourceCard",props:{resource:{}},setup(e){const i=e,m={github:"🐙",tool:"🛠️",book:"📖",course:"🎓",article:"📄"},c=y(()=>m[i.resource?.type||"tool"]||"🔗"),o=y(()=>{const l=i.resource?.url||"";return l.startsWith("http://")||l.startsWith("https://")});return(l,_)=>e.resource?(s(),t("a",{key:0,href:e.resource.url,target:o.value?"_blank":void 0,rel:o.value?"noopener":void 0,class:u(["rc-root",`rc--${e.resource.type||"tool"}`])},[n("span",W,a(e.resource.icon||c.value),1),n("div",j,[n("span",w,a(e.resource.name),1),n("span",z,a(e.resource.description),1),e.resource.tags?.length||e.resource.stars?(s(),t("div",D,[e.resource.stars?(s(),t("span",L,"⭐ "+a(e.resource.stars),1)):r("",!0),(s(!0),t(d,null,h(e.resource.tags,k=>(s(),t("span",{key:k,class:"rc-tag"},a(k),1))),128))])):r("",!0)]),_[0]||(_[0]=n("span",{class:"rc-arrow"},"→",-1))],10,V)):r("",!0)}}),G=f(M,[["__scopeId","data-v-e20e4feb"]]);export{G as R,A as T}; +import{f as g,c as t,g as r,o as s,n as u,F as d,m as h,a as n,t as a,_ as f,h as y}from"./vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const v={class:"tl-marker"},$={class:"tl-dot"},p={key:0,class:"tl-emoji"},b={key:1,class:"tl-num"},x={key:0,class:"tl-line"},C={class:"tl-body"},B={class:"tl-date"},I={class:"tl-title"},R=["href"],T={key:1},E={key:0,class:"tl-tags"},F={key:1,class:"tl-desc"},N=g({__name:"Timeline",props:{events:{},layout:{}},setup(e){return(i,m)=>e.events.length?(s(),t("div",{key:0,class:u(["timeline",`timeline--${e.layout||"vertical"}`])},[(s(!0),t(d,null,h(e.events,(c,o)=>(s(),t("div",{key:o,class:u(["tl-item",{"tl-item--last":o===e.events.length-1}])},[n("div",v,[n("span",$,[c.icon?(s(),t("span",p,a(c.icon),1)):(s(),t("span",b,a(o+1),1))]),o(s(),t("span",{key:l,class:"tl-tag"},a(l),1))),128))])):r("",!0),c.description?(s(),t("p",F,a(c.description),1)):r("",!0)])],2))),128))],2)):r("",!0)}}),A=f(N,[["__scopeId","data-v-b495583e"]]),V=["href","target","rel"],W={class:"rc-icon"},j={class:"rc-body"},w={class:"rc-name"},z={class:"rc-desc"},D={key:0,class:"rc-meta"},L={key:0,class:"rc-stars"},M=g({__name:"ResourceCard",props:{resource:{}},setup(e){const i=e,m={github:"🐙",tool:"🛠️",book:"📖",course:"🎓",article:"📄"},c=y(()=>m[i.resource?.type||"tool"]||"🔗"),o=y(()=>{const l=i.resource?.url||"";return l.startsWith("http://")||l.startsWith("https://")});return(l,_)=>e.resource?(s(),t("a",{key:0,href:e.resource.url,target:o.value?"_blank":void 0,rel:o.value?"noopener":void 0,class:u(["rc-root",`rc--${e.resource.type||"tool"}`])},[n("span",W,a(e.resource.icon||c.value),1),n("div",j,[n("span",w,a(e.resource.name),1),n("span",z,a(e.resource.description),1),e.resource.tags?.length||e.resource.stars?(s(),t("div",D,[e.resource.stars?(s(),t("span",L,"⭐ "+a(e.resource.stars),1)):r("",!0),(s(!0),t(d,null,h(e.resource.tags,k=>(s(),t("span",{key:k,class:"rc-tag"},a(k),1))),128))])):r("",!0)]),_[0]||(_[0]=n("span",{class:"rc-arrow"},"→",-1))],10,V)):r("",!0)}}),G=f(M,[["__scopeId","data-v-e20e4feb"]]);export{G as R,A as T}; diff --git a/assets/chunks/StepGuide.B2IY2DS6.js b/assets/chunks/StepGuide.Cdy7FBTp.js similarity index 96% rename from assets/chunks/StepGuide.B2IY2DS6.js rename to assets/chunks/StepGuide.Cdy7FBTp.js index 8d31725..ad9326b 100644 --- a/assets/chunks/StepGuide.B2IY2DS6.js +++ b/assets/chunks/StepGuide.Cdy7FBTp.js @@ -1 +1 @@ -import{f as h,c as e,g as a,o as s,F as p,m as _,n as k,a as n,t as l,_ as y}from"./vitepress-theme-teek.CUuTa6hm.js";const g={key:0,class:"step-guide"},b={class:"step-indicator"},S={class:"step-circle"},v={key:0,class:"step-emoji"},f={key:1,class:"step-check"},L={key:2,class:"step-num"},C={key:0,class:"step-line"},H={class:"step-body"},M={class:"step-title"},T=["innerHTML"],x={key:1,class:"sub-step-list"},B={class:"sub-step-body"},F={class:"sub-step-title"},G=["innerHTML"],N=h({__name:"StepGuide",props:{steps:{},currentStep:{}},setup(c){function r(u){return u.replace(/\n/g,"
")}return(u,d)=>c.steps.length?(s(),e("div",g,[(s(!0),e(p,null,_(c.steps,(t,o)=>(s(),e("div",{key:o,class:k(["step-item",{"step--completed":t.status==="completed","step--current":t.status==="current"||c.currentStep!==void 0&&o===c.currentStep,"step--upcoming":t.status==="upcoming","step--last":o===c.steps.length-1}])},[n("div",b,[n("span",S,[t.icon&&t.status!=="completed"?(s(),e("span",v,l(t.icon),1)):t.status==="completed"?(s(),e("span",f,"✓")):(s(),e("span",L,l(o+1),1))]),o(s(),e("li",{key:m,class:"sub-step-item"},[d[0]||(d[0]=n("span",{class:"sub-step-dot"},null,-1)),n("div",B,[n("h5",F,l(i.title),1),i.content?(s(),e("p",{key:0,class:"sub-step-content",innerHTML:r(i.content)},null,8,G)):a("",!0)])]))),128))])):a("",!0)])],2))),128))])):a("",!0)}}),j=y(N,[["__scopeId","data-v-348880de"]]);export{j as S}; +import{f as h,c as e,g as a,o as s,F as p,m as _,n as k,a as n,t as l,_ as y}from"./vitepress-theme-teek.Dg-9NfO3.js";const g={key:0,class:"step-guide"},b={class:"step-indicator"},S={class:"step-circle"},v={key:0,class:"step-emoji"},f={key:1,class:"step-check"},L={key:2,class:"step-num"},C={key:0,class:"step-line"},H={class:"step-body"},M={class:"step-title"},T=["innerHTML"],x={key:1,class:"sub-step-list"},B={class:"sub-step-body"},F={class:"sub-step-title"},G=["innerHTML"],N=h({__name:"StepGuide",props:{steps:{},currentStep:{}},setup(c){function r(u){return u.replace(/\n/g,"
")}return(u,d)=>c.steps.length?(s(),e("div",g,[(s(!0),e(p,null,_(c.steps,(t,o)=>(s(),e("div",{key:o,class:k(["step-item",{"step--completed":t.status==="completed","step--current":t.status==="current"||c.currentStep!==void 0&&o===c.currentStep,"step--upcoming":t.status==="upcoming","step--last":o===c.steps.length-1}])},[n("div",b,[n("span",S,[t.icon&&t.status!=="completed"?(s(),e("span",v,l(t.icon),1)):t.status==="completed"?(s(),e("span",f,"✓")):(s(),e("span",L,l(o+1),1))]),o(s(),e("li",{key:m,class:"sub-step-item"},[d[0]||(d[0]=n("span",{class:"sub-step-dot"},null,-1)),n("div",B,[n("h5",F,l(i.title),1),i.content?(s(),e("p",{key:0,class:"sub-step-content",innerHTML:r(i.content)},null,8,G)):a("",!0)])]))),128))])):a("",!0)])],2))),128))])):a("",!0)}}),j=y(N,[["__scopeId","data-v-348880de"]]);export{j as S}; diff --git a/assets/chunks/TwoColumnImage.CvkELYbv.js b/assets/chunks/TwoColumnImage.BkZ7ar0-.js similarity index 91% rename from assets/chunks/TwoColumnImage.CvkELYbv.js rename to assets/chunks/TwoColumnImage.BkZ7ar0-.js index 62a042a..7e3bba3 100644 --- a/assets/chunks/TwoColumnImage.CvkELYbv.js +++ b/assets/chunks/TwoColumnImage.BkZ7ar0-.js @@ -1 +1 @@ -import{f as i,c as a,o as s,a as e,g as o,t as c,_ as l}from"./vitepress-theme-teek.CUuTa6hm.js";const n={class:"two-column-image"},m={class:"image-column"},g=["src","alt"],r={key:0,class:"caption"},d={class:"image-column"},h=["src","alt"],f={key:0,class:"caption"},u=i({__name:"TwoColumnImage",props:{leftImage:{},rightImage:{},leftAlt:{},rightAlt:{},leftCaption:{},rightCaption:{}},setup(t){return(_,C)=>(s(),a("div",n,[e("div",m,[e("img",{src:t.leftImage,alt:t.leftAlt||"",class:"image"},null,8,g),t.leftCaption?(s(),a("p",r,c(t.leftCaption),1)):o("",!0)]),e("div",d,[e("img",{src:t.rightImage,alt:t.rightAlt||"",class:"image"},null,8,h),t.rightCaption?(s(),a("p",f,c(t.rightCaption),1)):o("",!0)])]))}}),p=l(u,[["__scopeId","data-v-c85f9673"]]);export{p as T}; +import{f as i,c as a,o as s,a as e,g as o,t as c,_ as l}from"./vitepress-theme-teek.Dg-9NfO3.js";const n={class:"two-column-image"},m={class:"image-column"},g=["src","alt"],r={key:0,class:"caption"},d={class:"image-column"},h=["src","alt"],f={key:0,class:"caption"},u=i({__name:"TwoColumnImage",props:{leftImage:{},rightImage:{},leftAlt:{},rightAlt:{},leftCaption:{},rightCaption:{}},setup(t){return(_,C)=>(s(),a("div",n,[e("div",m,[e("img",{src:t.leftImage,alt:t.leftAlt||"",class:"image"},null,8,g),t.leftCaption?(s(),a("p",r,c(t.leftCaption),1)):o("",!0)]),e("div",d,[e("img",{src:t.rightImage,alt:t.rightAlt||"",class:"image"},null,8,h),t.rightCaption?(s(),a("p",f,c(t.rightCaption),1)):o("",!0)])]))}}),p=l(u,[["__scopeId","data-v-c85f9673"]]);export{p as T}; diff --git a/assets/chunks/VPLocalSearchBox.CKLEEKt7.js b/assets/chunks/VPLocalSearchBox.Czq7e9gl.js similarity index 99% rename from assets/chunks/VPLocalSearchBox.CKLEEKt7.js rename to assets/chunks/VPLocalSearchBox.Czq7e9gl.js index 676ba93..21706d6 100644 --- a/assets/chunks/VPLocalSearchBox.CKLEEKt7.js +++ b/assets/chunks/VPLocalSearchBox.Czq7e9gl.js @@ -1,3 +1,3 @@ -import{B as _t,C as re,v as De,h as ve,D as Et,E as He,G as Tt,H as It,I as kt,f as Nt,J as Ft,K as Ge,s as ce,L as At,M as Rt,N as Ot,O as Ct,q as Fe,x as ue,P as ge,Q as Mt,R as Lt,S as Dt,U as Pt,V as zt,W as Vt,i as jt,o as W,a as E,z as $t,X as Bt,u as C,Y as Wt,Z as Kt,c as q,g as be,n as Qe,m as Ye,F as Ze,e as de,t as fe,A as Jt,$ as Xe,a0 as Ut,a1 as qt,a2 as Ht,a3 as Gt,_ as Qt}from"./vitepress-theme-teek.CUuTa6hm.js";const Yt={root:()=>_t(()=>import("./@localSearchIndexroot.x1hrxyuH.js"),[])};var ct=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],xe=ct.join(","),ut=typeof Element>"u",ee=ut?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,_e=!ut&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a?.ownerDocument},Ee=function(e,t){var n;t===void 0&&(t=!0);var r=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),s=r===""||r==="true",i=s||t&&e&&(typeof e.closest=="function"?e.closest("[inert]"):Ee(e.parentNode));return i},Zt=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},dt=function(e,t,n){if(Ee(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(xe));return t&&ee.call(e,xe)&&r.unshift(e),r=r.filter(n),r},Te=function(e,t,n){for(var r=[],s=Array.from(e);s.length;){var i=s.shift();if(!Ee(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Te(l,!0,n);n.flatten?r.push.apply(r,c):r.push({scopeParent:i,candidates:c})}else{var h=ee.call(i,xe);h&&n.filter(i)&&(t||!e.includes(i))&&r.push(i);var v=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),p=!Ee(v,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(v&&p){var y=Te(v===!0?i.children:v.children,!0,n);n.flatten?r.push.apply(r,y):r.push({scopeParent:i,candidates:y})}else s.unshift.apply(s,i.children)}}return r},ft=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},X=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||Zt(e))&&!ft(e)?0:e.tabIndex},Xt=function(e,t){var n=X(e);return n<0&&t&&!ft(e)?0:n},en=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},ht=function(e){return e.tagName==="INPUT"},tn=function(e){return ht(e)&&e.type==="hidden"},nn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},rn=function(e,t){for(var n=0;nsummary:first-of-type"),o=i?e.parentElement:e;if(ee.call(o,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="full-native"||n==="legacy-full"){if(typeof r=="function"){for(var l=e;e;){var c=e.parentElement,h=_e(e);if(c&&!c.shadowRoot&&r(c)===!0)return et(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(ln(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return et(e);return!1},un=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},vt=function(e){var t=[],n=[];return e.forEach(function(r,s){var i=!!r.scopeParent,o=i?r.scopeParent:r,l=Xt(o,i),c=i?vt(r.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:s,tabIndex:l,item:r,isScope:i,content:c})}),n.sort(en).reduce(function(r,s){return s.isScope?r.push.apply(r,s.content):r.push(s.content),r},[]).concat(t)},fn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Te([e],t.includeContainer,{filter:Pe.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:dn}):n=dt(e,t.includeContainer,Pe.bind(null,t)),vt(n)},hn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Te([e],t.includeContainer,{filter:Ie.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=dt(e,t.includeContainer,Ie.bind(null,t)),n},te=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ee.call(e,xe)===!1?!1:Pe(t,e)},vn=ct.concat("iframe:not([inert]):not([inert] *)").join(","),Ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ee.call(e,vn)===!1?!1:Ie(t,e)};function ze(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,n=Array(e);t=a.length?{done:!0}:{done:!1,value:a[n++]}},e:function(l){throw l},f:r}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +import{B as _t,C as re,v as De,h as ve,D as Et,E as He,G as Tt,H as It,I as kt,f as Nt,J as Ft,K as Ge,s as ce,L as At,M as Rt,N as Ot,O as Ct,q as Fe,x as ue,P as ge,Q as Mt,R as Lt,S as Dt,U as Pt,V as zt,W as Vt,i as jt,o as W,a as E,z as $t,X as Bt,u as C,Y as Wt,Z as Kt,c as q,g as be,n as Qe,m as Ye,F as Ze,e as de,t as fe,A as Jt,$ as Xe,a0 as Ut,a1 as qt,a2 as Ht,a3 as Gt,_ as Qt}from"./vitepress-theme-teek.Dg-9NfO3.js";const Yt={root:()=>_t(()=>import("./@localSearchIndexroot.DDuUMxZm.js"),[])};var ct=["input:not([inert]):not([inert] *)","select:not([inert]):not([inert] *)","textarea:not([inert]):not([inert] *)","a[href]:not([inert]):not([inert] *)","button:not([inert]):not([inert] *)","[tabindex]:not(slot):not([inert]):not([inert] *)","audio[controls]:not([inert]):not([inert] *)","video[controls]:not([inert]):not([inert] *)",'[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)',"details>summary:first-of-type:not([inert]):not([inert] *)","details:not([inert]):not([inert] *)"],xe=ct.join(","),ut=typeof Element>"u",ee=ut?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,_e=!ut&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a?.ownerDocument},Ee=function(e,t){var n;t===void 0&&(t=!0);var r=e==null||(n=e.getAttribute)===null||n===void 0?void 0:n.call(e,"inert"),s=r===""||r==="true",i=s||t&&e&&(typeof e.closest=="function"?e.closest("[inert]"):Ee(e.parentNode));return i},Zt=function(e){var t,n=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return n===""||n==="true"},dt=function(e,t,n){if(Ee(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(xe));return t&&ee.call(e,xe)&&r.unshift(e),r=r.filter(n),r},Te=function(e,t,n){for(var r=[],s=Array.from(e);s.length;){var i=s.shift();if(!Ee(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Te(l,!0,n);n.flatten?r.push.apply(r,c):r.push({scopeParent:i,candidates:c})}else{var h=ee.call(i,xe);h&&n.filter(i)&&(t||!e.includes(i))&&r.push(i);var v=i.shadowRoot||typeof n.getShadowRoot=="function"&&n.getShadowRoot(i),p=!Ee(v,!1)&&(!n.shadowRootFilter||n.shadowRootFilter(i));if(v&&p){var y=Te(v===!0?i.children:v.children,!0,n);n.flatten?r.push.apply(r,y):r.push({scopeParent:i,candidates:y})}else s.unshift.apply(s,i.children)}}return r},ft=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},X=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||Zt(e))&&!ft(e)?0:e.tabIndex},Xt=function(e,t){var n=X(e);return n<0&&t&&!ft(e)?0:n},en=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},ht=function(e){return e.tagName==="INPUT"},tn=function(e){return ht(e)&&e.type==="hidden"},nn=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(n){return n.tagName==="SUMMARY"});return t},rn=function(e,t){for(var n=0;nsummary:first-of-type"),o=i?e.parentElement:e;if(ee.call(o,"details:not([open]) *"))return!0;if(!n||n==="full"||n==="full-native"||n==="legacy-full"){if(typeof r=="function"){for(var l=e;e;){var c=e.parentElement,h=_e(e);if(c&&!c.shadowRoot&&r(c)===!0)return et(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(ln(e))return!e.getClientRects().length;if(n!=="legacy-full")return!0}else if(n==="non-zero-area")return et(e);return!1},un=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var n=0;n=0)},vt=function(e){var t=[],n=[];return e.forEach(function(r,s){var i=!!r.scopeParent,o=i?r.scopeParent:r,l=Xt(o,i),c=i?vt(r.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):n.push({documentOrder:s,tabIndex:l,item:r,isScope:i,content:c})}),n.sort(en).reduce(function(r,s){return s.isScope?r.push.apply(r,s.content):r.push(s.content),r},[]).concat(t)},fn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Te([e],t.includeContainer,{filter:Pe.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:dn}):n=dt(e,t.includeContainer,Pe.bind(null,t)),vt(n)},hn=function(e,t){t=t||{};var n;return t.getShadowRoot?n=Te([e],t.includeContainer,{filter:Ie.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):n=dt(e,t.includeContainer,Ie.bind(null,t)),n},te=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ee.call(e,xe)===!1?!1:Pe(t,e)},vn=ct.concat("iframe:not([inert]):not([inert] *)").join(","),Ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ee.call(e,vn)===!1?!1:Ie(t,e)};function ze(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,n=Array(e);t=a.length?{done:!0}:{done:!1,value:a[n++]}},e:function(l){throw l},f:r}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var s,i=!0,o=!1;return{s:function(){t=t.call(a)},n:function(){var l=t.next();return i=l.done,l},e:function(l){o=!0,s=l},f:function(){try{i||t.return==null||t.return()}finally{if(o)throw s}}}}function mn(a,e,t){return(e=Sn(e))in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function gn(a){if(typeof Symbol<"u"&&a[Symbol.iterator]!=null||a["@@iterator"]!=null)return Array.from(a)}function bn(){throw new TypeError(`Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nt(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(a);e&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(a,r).enumerable})),t.push.apply(t,n)}return t}function rt(a){for(var e=1;e0?e[e.length-1]:null},activateTrap:function(e,t){var n=K.getActiveTrap(e);t!==n&&K.pauseTrap(e);var r=e.indexOf(t);r===-1||e.splice(r,1),e.push(t)},deactivateTrap:function(e,t){var n=e.indexOf(t);n!==-1&&e.splice(n,1),K.unpauseTrap(e)},pauseTrap:function(e){var t=K.getActiveTrap(e);t?._setPausedState(!0)},unpauseTrap:function(e){var t=K.getActiveTrap(e);t&&!t._isManuallyPaused()&&t._setPausedState(!1)}},xn=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},_n=function(e){return e?.key==="Escape"||e?.key==="Esc"||e?.keyCode===27},pe=function(e){return e?.key==="Tab"||e?.keyCode===9},En=function(e){return pe(e)&&!e.shiftKey},Tn=function(e){return pe(e)&&e.shiftKey},it=function(e){return setTimeout(e,0)},he=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r1&&arguments[1]!==void 0?arguments[1]:{},g=d.hasFallback,T=g===void 0?!1:g,x=d.params,m=x===void 0?[]:x,f=s[u];if(typeof f=="function"&&(f=f.apply(void 0,yn(m))),f===!0&&(f=void 0),!f){if(f===void 0||f===!1)return f;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var b=f;if(typeof f=="string"){try{b=n.querySelector(f)}catch(_){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(_.message,'"'))}if(!b&&!T)throw new Error("`".concat(u,"` as selector refers to no known node"))}return b},v=function(){var u=h("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Ae(u,s.tabbableOptions))if(c(n.activeElement)>=0)u=n.activeElement;else{var d=i.tabbableGroups[0],g=d&&d.firstTabbableNode;u=g||h("fallbackFocus")}else u===null&&(u=h("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},p=function(){if(i.containerGroups=i.containers.map(function(u){var d=fn(u,s.tabbableOptions),g=hn(u,s.tabbableOptions),T=d.length>0?d[0]:void 0,x=d.length>0?d[d.length-1]:void 0,m=g.find(function(_){return te(_)}),f=g.slice().reverse().find(function(_){return te(_)}),b=!!d.find(function(_){return X(_)>0});return{container:u,tabbableNodes:d,focusableNodes:g,posTabIndexesFound:b,firstTabbableNode:T,lastTabbableNode:x,firstDomTabbableNode:m,lastDomTabbableNode:f,nextTabbableNode:function(F){var O=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,D=d.indexOf(F);return D<0?O?g.slice(g.indexOf(F)+1).find(function($){return te($)}):g.slice(0,g.indexOf(F)).reverse().find(function($){return te($)}):d[D+(O?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},y=function(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?y(d.shadowRoot):d},S=function(u){if(u!==!1&&u!==y(document)){if(!u||!u.focus){S(v());return}u.focus({preventScroll:!!s.preventScroll}),i.mostRecentlyFocusedNode=u,xn(u)&&u.select()}},I=function(u){var d=h("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},w=function(u){var d=u.target,g=u.event,T=u.isBackward,x=T===void 0?!1:T;d=d||ye(g),p();var m=null;if(i.tabbableGroups.length>0){var f=c(d,g),b=f>=0?i.containerGroups[f]:void 0;if(f<0)x?m=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:m=i.tabbableGroups[0].firstTabbableNode;else if(x){var _=i.tabbableGroups.findIndex(function(L){var U=L.firstTabbableNode;return d===U});if(_<0&&(b.container===d||Ae(d,s.tabbableOptions)&&!te(d,s.tabbableOptions)&&!b.nextTabbableNode(d,!1))&&(_=f),_>=0){var F=_===0?i.tabbableGroups.length-1:_-1,O=i.tabbableGroups[F];m=X(d)>=0?O.lastTabbableNode:O.lastDomTabbableNode}else pe(g)||(m=b.nextTabbableNode(d,!1))}else{var D=i.tabbableGroups.findIndex(function(L){var U=L.lastTabbableNode;return d===U});if(D<0&&(b.container===d||Ae(d,s.tabbableOptions)&&!te(d,s.tabbableOptions)&&!b.nextTabbableNode(d))&&(D=f),D>=0){var $=D===i.tabbableGroups.length-1?0:D+1,B=i.tabbableGroups[$];m=X(d)>=0?B.firstTabbableNode:B.firstDomTabbableNode}else pe(g)||(m=b.nextTabbableNode(d))}}else m=h("fallbackFocus");return m},N=function(u){var d=ye(u);if(!(c(d,u)>=0)){if(he(s.clickOutsideDeactivates,u)){o.deactivate({returnFocus:s.returnFocusOnDeactivate});return}he(s.allowOutsideClick,u)||u.preventDefault()}},R=function(u){var d=ye(u),g=c(d,u)>=0;if(g||d instanceof Document)g&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var T,x=!0;if(i.mostRecentlyFocusedNode)if(X(i.mostRecentlyFocusedNode)>0){var m=c(i.mostRecentlyFocusedNode),f=i.containerGroups[m].tabbableNodes;if(f.length>0){var b=f.findIndex(function(_){return _===i.mostRecentlyFocusedNode});b>=0&&(s.isKeyForward(i.recentNavEvent)?b+1=0&&(T=f[b-1],x=!1))}}else i.containerGroups.some(function(_){return _.tabbableNodes.some(function(F){return X(F)>0})})||(x=!1);else x=!1;x&&(T=w({target:i.mostRecentlyFocusedNode,isBackward:s.isKeyBackward(i.recentNavEvent)})),S(T||i.mostRecentlyFocusedNode||v())}i.recentNavEvent=void 0},j=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var g=w({event:u,isBackward:d});g&&(pe(u)&&u.preventDefault(),S(g))},J=function(u){(s.isKeyForward(u)||s.isKeyBackward(u))&&j(u,s.isKeyBackward(u))},V=function(u){_n(u)&&he(s.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},P=function(u){var d=ye(u);c(d,u)>=0||he(s.clickOutsideDeactivates,u)||he(s.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},z=function(){if(i.active)return K.activateTrap(r,o),i.delayInitialFocusTimer=s.delayInitialFocus?it(function(){S(v())}):S(v()),n.addEventListener("focusin",R,!0),n.addEventListener("mousedown",N,{capture:!0,passive:!1}),n.addEventListener("touchstart",N,{capture:!0,passive:!1}),n.addEventListener("click",P,{capture:!0,passive:!1}),n.addEventListener("keydown",J,{capture:!0,passive:!1}),n.addEventListener("keydown",V),o},Ne=function(u){i.active&&!i.paused&&o._setSubtreeIsolation(!1),i.adjacentElements.clear(),i.alreadySilent.clear();var d=new Set,g=new Set,T=tt(u),x;try{for(T.s();!(x=T.n()).done;){var m=x.value;d.add(m);for(var f=typeof ShadowRoot<"u"&&m.getRootNode()instanceof ShadowRoot,b=m;b;){d.add(b);var _=b.parentElement,F=[];_?F=_.children:!_&&f&&(F=b.getRootNode().children,_=b.getRootNode().host,f=typeof ShadowRoot<"u"&&_.getRootNode()instanceof ShadowRoot);var O=tt(F),D;try{for(O.s();!(D=O.n()).done;){var $=D.value;g.add($)}}catch(B){O.e(B)}finally{O.f()}b=_}}}catch(B){T.e(B)}finally{T.f()}d.forEach(function(B){g.delete(B)}),i.adjacentElements=g},A=function(){if(i.active)return n.removeEventListener("focusin",R,!0),n.removeEventListener("mousedown",N,!0),n.removeEventListener("touchstart",N,!0),n.removeEventListener("click",P,!0),n.removeEventListener("keydown",J,!0),n.removeEventListener("keydown",V),o},G=function(u){var d=u.some(function(g){var T=Array.from(g.removedNodes);return T.some(function(x){return x===i.mostRecentlyFocusedNode})});d&&S(v())},Q=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(G):void 0,Y=function(){Q&&(Q.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){Q.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),g=l(u,"onPostActivate"),T=l(u,"checkCanFocusTrap"),x=K.getActiveTrap(r),m=!1;if(x&&!x.paused){var f;(f=x._setSubtreeIsolation)===null||f===void 0||f.call(x,!1),m=!0}try{T||p(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=y(n),d?.();var b=function(){T&&p(),z(),Y(),s.isolateSubtrees&&o._setSubtreeIsolation(!0),g?.()};if(T)return T(i.containers.concat()).then(b,b),this;b()}catch(F){if(x===K.getActiveTrap(r)&&m){var _;(_=x._setSubtreeIsolation)===null||_===void 0||_.call(x,!0)}throw F}return this},deactivate:function(u){if(!i.active)return this;var d=rt({onDeactivate:s.onDeactivate,onPostDeactivate:s.onPostDeactivate,checkCanReturnFocus:s.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,i.paused||o._setSubtreeIsolation(!1),i.alreadySilent.clear(),A(),i.active=!1,i.paused=!1,Y(),K.deactivateTrap(r,o);var g=l(d,"onDeactivate"),T=l(d,"onPostDeactivate"),x=l(d,"checkCanReturnFocus"),m=l(d,"returnFocus","returnFocusOnDeactivate");g?.();var f=function(){it(function(){m&&S(I(i.nodeFocusedBeforeActivation)),T?.()})};return m&&x?(x(I(i.nodeFocusedBeforeActivation)).then(f,f),this):(f(),this)},pause:function(u){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return i.active?(i.manuallyPaused=!1,r[r.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(g){return typeof g=="string"?n.querySelector(g):g}),s.isolateSubtrees&&Ne(i.containers),i.active&&(p(),s.isolateSubtrees&&!i.paused&&o._setSubtreeIsolation(!0)),Y(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(u,d){if(i.paused===u)return this;if(i.paused=u,u){var g=l(d,"onPause"),T=l(d,"onPostPause");g?.(),A(),Y(),o._setSubtreeIsolation(!1),T?.()}else{var x=l(d,"onUnpause"),m=l(d,"onPostUnpause");x?.(),o._setSubtreeIsolation(!0),p(),z(),Y(),m?.()}return this}},_setSubtreeIsolation:{value:function(u){s.isolateSubtrees&&i.adjacentElements.forEach(function(d){var g;u?s.isolateSubtrees==="aria-hidden"?((d.ariaHidden==="true"||((g=d.getAttribute("aria-hidden"))===null||g===void 0?void 0:g.toLowerCase())==="true")&&i.alreadySilent.add(d),d.setAttribute("aria-hidden","true")):((d.inert||d.hasAttribute("inert"))&&i.alreadySilent.add(d),d.setAttribute("inert",!0)):i.alreadySilent.has(d)||(s.isolateSubtrees==="aria-hidden"?d.removeAttribute("aria-hidden"):d.removeAttribute("inert"))})}}}),o.updateContainerElements(e),o};function Nn(a,e={}){let t;const{immediate:n,...r}=e,s=re(!1),i=re(!1),o=v=>t&&t.activate(v),l=v=>t&&t.deactivate(v),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return De(ve(()=>Et(He(a)).map(v=>{const p=He(v);return typeof p=="string"?p:Tt(p)}).filter(It)),v=>{if(v.length)if(!t)t=kn(v,{...r,onActivate(){s.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){s.value=!1,e.onDeactivate&&e.onDeactivate()}}),n&&o();else{const p=t?.active;t?.updateContainerElements(v),!p&&n&&o()}},{flush:"post"}),kt(()=>l()),{hasFocus:s,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ie{constructor(e,t=!0,n=[],r=5e3){this.ctx=e,this.iframes=t,this.exclude=n,this.iframesTimeout=r}static matches(e,t){const n=typeof t=="string"?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){let s=!1;return n.every(i=>r.call(e,i)?(s=!0,!1):!0),s}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(n=>{const r=t.filter(s=>s.contains(n)).length>0;t.indexOf(n)===-1&&!r&&t.push(n)}),t}getIframeContents(e,t,n=()=>{}){let r;try{const s=e.contentWindow;if(r=s.document,!s||!r)throw new Error("iframe inaccessible")}catch{n()}r&&t(r)}isIframeBlank(e){const t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}observeIframeLoad(e,t,n){let r=!1,s=null;const i=()=>{if(!r){r=!0,clearTimeout(s);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,n))}catch{n()}}};e.addEventListener("load",i),s=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,n){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch{n()}}waitForIframes(e,t){let n=0;this.forEachIframe(e,()=>!0,r=>{n++,this.waitForIframes(r.querySelector("html"),()=>{--n||t()})},r=>{r||t()})}forEachIframe(e,t,n,r=()=>{}){let s=e.querySelectorAll("iframe"),i=s.length,o=0;s=Array.prototype.slice.call(s);const l=()=>{--i<=0&&r(o)};i||l(),s.forEach(c=>{ie.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,n(h)),l()},l)})}createIterator(e,t,n){return document.createNodeIterator(e,t,n,!1)}createInstanceOnIframe(e){return new ie(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,n){const r=e.compareDocumentPosition(n),s=Node.DOCUMENT_POSITION_PRECEDING;if(r&s)if(t!==null){const i=t.compareDocumentPosition(n),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let n;return t===null?n=e.nextNode():n=e.nextNode()&&e.nextNode(),{prevNode:t,node:n}}checkIframeFilter(e,t,n,r){let s=!1,i=!1;return r.forEach((o,l)=>{o.val===n&&(s=l,i=o.handled)}),this.compareNodeIframe(e,t,n)?(s===!1&&!i?r.push({val:n,handled:!0}):s!==!1&&!i&&(r[s].handled=!0),!0):(s===!1&&r.push({val:n,handled:!1}),!1)}handleOpenIframes(e,t,n,r){e.forEach(s=>{s.handled||this.getIframeContents(s.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,n,r)})})}iterateThroughNodes(e,t,n,r,s){const i=this.createIterator(t,e,r);let o=[],l=[],c,h,v=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;v();)this.iframes&&this.forEachIframe(t,p=>this.checkIframeFilter(c,h,p,o),p=>{this.createInstanceOnIframe(p).forEachNode(e,y=>l.push(y),r)}),l.push(c);l.forEach(p=>{n(p)}),this.iframes&&this.handleOpenIframes(o,e,n,r),s()}forEachNode(e,t,n,r=()=>{}){const s=this.getContexts();let i=s.length;i||r(),s.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,n,()=>{--i<=0&&r()})};this.iframes?this.waitForIframes(o,l):l()})}}let Fn=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ie(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const n=this.opt.log;this.opt.debug&&typeof n=="object"&&typeof n[t]=="function"&&n[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let s in t)if(t.hasOwnProperty(s)){const i=t[s],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(s):this.escapeStr(s),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${n}`),r+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+r))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,n,r)=>{let s=r.charAt(n+1);return/[(|)\\]/.test(s)||s===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let r=[];return e.split("").forEach(s=>{n.every(i=>{if(i.indexOf(s)!==-1){if(r.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),r.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let n=this.opt.accuracy,r=typeof n=="string"?n:n.value,s=typeof n=="string"?[]:n.limiters,i="";switch(s.forEach(o=>{i+=`|${this.escapeStr(o)}`}),r){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(n=>{this.opt.separateWordSearch?n.split(" ").forEach(r=>{r.trim()&&t.indexOf(r)===-1&&t.push(r)}):n.trim()&&t.indexOf(n)===-1&&t.push(n)}),{keywords:t.sort((n,r)=>r.length-n.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let n=0;return e.sort((r,s)=>r.start-s.start).forEach(r=>{let{start:s,end:i,valid:o}=this.callNoMatchOnInvalidRanges(r,n);o&&(r.start=s,r.length=i-s,t.push(r),n=i)}),t}callNoMatchOnInvalidRanges(e,t){let n,r,s=!1;return e&&typeof e.start<"u"?(n=parseInt(e.start,10),r=n+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?s=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:n,end:r,valid:s}}checkWhitespaceRanges(e,t,n){let r,s=!0,i=n.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,r=l+parseInt(e.length,10),r>i&&(r=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||r-l<0||l>i||r>i?(s=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):n.substring(l,r).replace(/\s+/g,"")===""&&(s=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:r,valid:s}}getTextNodes(e){let t="",n=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,r=>{n.push({start:t.length,end:(t+=r.textContent).length,node:r})},r=>this.matchesExclude(r.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:n})})}matchesExclude(e){return ie.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,n){const r=this.opt.element?this.opt.element:"mark",s=e.splitText(t),i=s.splitText(n-t);let o=document.createElement(r);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=s.textContent,s.parentNode.replaceChild(o,s),i}wrapRangeInMappedTextNode(e,t,n,r,s){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!r(i.node))return!1;const c=t-i.start,h=(n>i.end?i.end:n)-i.start,v=e.value.substr(0,i.start),p=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=v+p,e.nodes.forEach((y,S)=>{S>=o&&(e.nodes[S].start>0&&S!==o&&(e.nodes[S].start-=h),e.nodes[S].end-=h)}),n-=h,s(i.node.previousSibling,i.start),n>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,n,r,s){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!n(c[i],l))continue;let h=c.index;if(i!==0)for(let v=1;v{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let v=1;vn(l[i],v),(v,p)=>{e.lastIndex=p,r(v)})}s()})}wrapRangeFromIndex(e,t,n,r){this.getTextNodes(s=>{const i=s.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:v}=this.checkWhitespaceRanges(o,i,s.value);v&&this.wrapRangeInMappedTextNode(s,c,h,p=>t(p,o,s.value.substring(c,h),l),p=>{n(p,o)})}),r()})}unwrapMatches(e){const t=e.parentNode;let n=document.createDocumentFragment();for(;e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let n=0,r="wrapMatches";const s=i=>{n++,this.opt.each(i)};this.opt.acrossElements&&(r="wrapMatchesAcrossElements"),this[r](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,n),s,()=>{n===0&&this.opt.noMatch(e),this.opt.done(n)})}mark(e,t){this.opt=t;let n=0,r="wrapMatches";const{keywords:s,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),v=0;this.log(`Searching with expression "${h}"`),this[r](h,1,(p,y)=>this.opt.filter(y,c,n,v),p=>{v++,n++,this.opt.each(p)},()=>{v===0&&this.opt.noMatch(c),s[i-1]===c?this.opt.done(n):l(s[s.indexOf(c)+1])})};this.opt.acrossElements&&(r="wrapMatchesAcrossElements"),i===0?this.opt.done(n):l(s[0])}markRanges(e,t){this.opt=t;let n=0,r=this.checkRanges(e);r&&r.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(r)),this.wrapRangeFromIndex(r,(s,i,o,l)=>this.opt.filter(s,i,o,l),(s,i)=>{n++,this.opt.each(s,i)},()=>{this.opt.done(n)})):this.opt.done(n)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,n=>{this.unwrapMatches(n)},n=>{const r=ie.matches(n,t),s=this.matchesExclude(n);return!r||s?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function An(a){const e=new Fn(a);return this.mark=(t,n)=>(e.mark(t,n),this),this.markRegExp=(t,n)=>(e.markRegExp(t,n),this),this.markRanges=(t,n)=>(e.markRanges(t,n),this),this.unmark=t=>(e.unmark(t),this),this}const Rn="ENTRIES",mt="KEYS",gt="VALUES",M="";class Re{constructor(e,t){const n=e._tree,r=Array.from(n.keys());this.set=e,this._type=t,this._path=r.length>0?[{node:n,keys:r}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=ne(this._path);if(ne(t)===M)return{done:!1,value:this.result()};const n=e.get(ne(t));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=ne(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>ne(e)).filter(e=>e!==M).join("")}value(){return ne(this._path).node.get(M)}result(){switch(this._type){case gt:return this.value();case mt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const ne=a=>a[a.length-1],On=(a,e,t)=>{const n=new Map;if(e===void 0)return n;const r=e.length+1,s=r+t,i=new Uint8Array(s*r).fill(t+1);for(let o=0;o{const l=s*i;e:for(const c of a.keys())if(c===M){const h=r[l-1];h<=t&&n.set(o,[a.get(c),h])}else{let h=s;for(let v=0;vt)continue e}bt(a.get(c),e,t,n,r,h,i,o+c)}};class H{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,n]=ke(this._tree,e.slice(this._prefix.length));if(t===void 0){const[r,s]=Be(n);for(const i of r.keys())if(i!==M&&i.startsWith(s)){const o=new Map;return o.set(i.slice(s.length),r.get(i)),new H(o,e)}}return new H(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Cn(this._tree,e)}entries(){return new Re(this,Rn)}forEach(e){for(const[t,n]of this)e(t,n,this)}fuzzyGet(e,t){return On(this._tree,e,t)}get(e){const t=Ve(this._tree,e);return t!==void 0?t.get(M):void 0}has(e){const t=Ve(this._tree,e);return t!==void 0&&t.has(M)}keys(){return new Re(this,mt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,Oe(this._tree,e).set(M,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=Oe(this._tree,e);return n.set(M,t(n.get(M))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const n=Oe(this._tree,e);let r=n.get(M);return r===void 0&&n.set(M,r=t()),r}values(){return new Re(this,gt)}[Symbol.iterator](){return this.entries()}static from(e){const t=new H;for(const[n,r]of e)t.set(n,r);return t}static fromObject(e){return H.from(Object.entries(e))}}const ke=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const n of a.keys())if(n!==M&&e.startsWith(n))return t.push([a,n]),ke(a.get(n),e.slice(n.length),t);return t.push([a,e]),ke(void 0,"",t)},Ve=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==M&&e.startsWith(t))return Ve(a.get(t),e.slice(t.length))},Oe=(a,e)=>{const t=e.length;e:for(let n=0;a&&n{const[t,n]=ke(a,e);if(t!==void 0){if(t.delete(M),t.size===0)yt(n);else if(t.size===1){const[r,s]=t.entries().next().value;wt(n,r,s)}}},yt=a=>{if(a.length===0)return;const[e,t]=Be(a);if(e.delete(t),e.size===0)yt(a.slice(0,-1));else if(e.size===1){const[n,r]=e.entries().next().value;n!==M&&wt(a.slice(0,-1),n,r)}},wt=(a,e,t)=>{if(a.length===0)return;const[n,r]=Be(a);n.set(r+e,t),n.delete(r)},Be=a=>a[a.length-1],We="or",St="and",Mn="and_not";class se{constructor(e){if(e?.fields==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Le:e.autoVacuum;this._options={...Me,...e,autoVacuum:t,searchOptions:{...st,...e.searchOptions||{}},autoSuggestOptions:{...Vn,...e.autoSuggestOptions||{}}},this._index=new H,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=$e,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:n,tokenize:r,processTerm:s,fields:i,idField:o}=this._options,l=t(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);if(this._idToShortId.has(l))throw new Error(`MiniSearch: duplicate ID ${l}`);const c=this.addDocumentId(l);this.saveStoredFields(c,e);for(const h of i){const v=t(e,h);if(v==null)continue;const p=r(n(v,h),h),y=this._fieldIds[h],S=new Set(p).size;this.addFieldLength(c,y,this._documentCount-1,S);for(const I of p){const w=s(I,h);if(Array.isArray(w))for(const N of w)this.addTerm(y,c,N);else w&&this.addTerm(y,c,w)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:n=10}=t,r={chunk:[],promise:Promise.resolve()},{chunk:s,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%n===0?{chunk:[],promise:l.then(()=>new Promise(v=>setTimeout(v,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),r);return i.then(()=>this.addAll(s))}remove(e){const{tokenize:t,processTerm:n,extractField:r,stringifyField:s,fields:i,idField:o}=this._options,l=r(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);const c=this._idToShortId.get(l);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${l}: it is not in the index`);for(const h of i){const v=r(e,h);if(v==null)continue;const p=t(s(v,h),h),y=this._fieldIds[h],S=new Set(p).size;this.removeFieldLength(c,y,this._documentCount,S);for(const I of p){const w=n(I,h);if(Array.isArray(w))for(const N of w)this.removeTerm(y,c,N);else w&&this.removeTerm(y,c,w)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(l),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new H,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((n,r)=>{this.removeFieldLength(t,r,this._documentCount,n)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:n,batchWait:r}=this._options.autoVacuum;this.conditionalVacuum({batchSize:n,batchWait:r},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const n of e)this.discard(n)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:n}=this._options,r=n(e,t);this.discard(r),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const n=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=$e,this.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const n=this._dirtCount;if(this.vacuumConditionsMet(t)){const r=e.batchSize||je.batchSize,s=e.batchWait||je.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[v]of h)this._documentIds.has(v)||(h.size<=1?l.delete(c):h.delete(v));this._index.get(o).size===0&&this._index.delete(o),i%r===0&&await new Promise(c=>setTimeout(c,s)),i+=1}this._dirtCount-=n}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:n}=e;return t=t||Le.minDirtCount,n=n||Le.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=n}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:n}=this._options,r={...n,...t},s=this.executeQuery(e,t),i=[];for(const[o,{score:l,terms:c,match:h}]of s){const v=c.length||1,p={id:this._documentIds.get(o),score:l*v,terms:Object.keys(h),queryTerms:c,match:h};Object.assign(p,this._storedFields.get(o)),(r.filter==null||r.filter(p))&&i.push(p)}return e===se.wildcard&&r.boostDocument==null||i.sort(ot),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const n=new Map;for(const{score:s,terms:i}of this.search(e,t)){const o=i.join(" "),l=n.get(o);l!=null?(l.score+=s,l.count+=1):n.set(o,{score:s,terms:i,count:1})}const r=[];for(const[s,{score:i,terms:o,count:l}]of n)r.push({suggestion:s,terms:o,score:i/l});return r.sort(ot),r}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Me.hasOwnProperty(e))return Ce(Me,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:n,documentIds:r,fieldLength:s,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=we(r),l._fieldLength=we(s),l._storedFields=we(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of n){const v=new Map;for(const p of Object.keys(h)){let y=h[p];o===1&&(y=y.ds),v.set(parseInt(p,10),we(y))}l._index.set(c,v)}return l}static async loadJSAsync(e,t){const{index:n,documentIds:r,fieldLength:s,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await Se(r),l._fieldLength=await Se(s),l._storedFields=await Se(i);for(const[h,v]of l._documentIds)l._idToShortId.set(v,h);let c=0;for(const[h,v]of n){const p=new Map;for(const y of Object.keys(v)){let S=v[y];o===1&&(S=S.ds),p.set(parseInt(y,10),await Se(S))}++c%1e3===0&&await xt(0),l._index.set(h,p)}return l}static instantiateMiniSearch(e,t){const{documentCount:n,nextId:r,fieldIds:s,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new se(t);return c._documentCount=n,c._nextId=r,c._idToShortId=new Map,c._fieldIds=s,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new H,c}executeQuery(e,t={}){if(e===se.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const p={...t,...e,queries:void 0},y=e.queries.map(S=>this.executeQuery(S,p));return this.combineResults(y,p.combineWith)}const{tokenize:n,processTerm:r,searchOptions:s}=this._options,i={tokenize:n,processTerm:r,...s,...t},{tokenize:o,processTerm:l}=i,v=o(e).flatMap(p=>l(p)).filter(p=>!!p).map(zn(i)).map(p=>this.executeQuerySpec(p,i));return this.combineResults(v,i.combineWith)}executeQuerySpec(e,t){const n={...this._options.searchOptions,...t},r=(n.fields||this._options.fields).reduce((I,w)=>({...I,[w]:Ce(n.boost,w)||1}),{}),{boostDocument:s,weights:i,maxFuzzy:o,bm25:l}=n,{fuzzy:c,prefix:h}={...st.weights,...i},v=this._index.get(e.term),p=this.termResults(e.term,e.term,1,e.termBoost,v,r,s,l);let y,S;if(e.prefix&&(y=this._index.atPrefix(e.term)),e.fuzzy){const I=e.fuzzy===!0?.2:e.fuzzy,w=I<1?Math.min(o,Math.round(e.term.length*I)):I;w&&(S=this._index.fuzzyGet(e.term,w))}if(y)for(const[I,w]of y){const N=I.length-e.term.length;if(!N)continue;S?.delete(I);const R=h*I.length/(I.length+.3*N);this.termResults(e.term,I,R,e.termBoost,w,r,s,l,p)}if(S)for(const I of S.keys()){const[w,N]=S.get(I);if(!N)continue;const R=c*I.length/(I.length+N);this.termResults(e.term,I,R,e.termBoost,w,r,s,l,p)}return p}executeWildcardQuery(e){const t=new Map,n={...this._options.searchOptions,...e};for(const[r,s]of this._documentIds){const i=n.boostDocument?n.boostDocument(s,"",this._storedFields.get(r)):1;t.set(r,{score:i,terms:[],match:{}})}return t}combineResults(e,t=We){if(e.length===0)return new Map;const n=t.toLowerCase(),r=Ln[n];if(!r)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(r)||new Map}toJSON(){const e=[];for(const[t,n]of this._index){const r={};for(const[s,i]of n)r[s]=Object.fromEntries(i);e.push([t,r])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,n,r,s,i,o,l,c=new Map){if(s==null)return c;for(const h of Object.keys(i)){const v=i[h],p=this._fieldIds[h],y=s.get(p);if(y==null)continue;let S=y.size;const I=this._avgFieldLength[p];for(const w of y.keys()){if(!this._documentIds.has(w)){this.removeTerm(p,w,t),S-=1;continue}const N=o?o(this._documentIds.get(w),t,this._storedFields.get(w)):1;if(!N)continue;const R=y.get(w),j=this._fieldLength.get(w)[p],J=Pn(R,S,this._documentCount,j,I,l),V=n*r*v*N*J,P=c.get(w);if(P){P.score+=V,jn(P.terms,e);const z=Ce(P.match,t);z?z.push(h):P.match[t]=[h]}else c.set(w,{score:V,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,n){const r=this._index.fetch(n,lt);let s=r.get(e);if(s==null)s=new Map,s.set(t,1),r.set(e,s);else{const i=s.get(t);s.set(t,(i||0)+1)}}removeTerm(e,t,n){if(!this._index.has(n)){this.warnDocumentChanged(t,e,n);return}const r=this._index.fetch(n,lt),s=r.get(e);s==null||s.get(t)==null?this.warnDocumentChanged(t,e,n):s.get(t)<=1?s.size<=1?r.delete(e):s.delete(t):s.set(t,s.get(t)-1),this._index.get(n).size===0&&this._index.delete(n)}warnDocumentChanged(e,t,n){for(const r of Object.keys(this._fieldIds))if(this._fieldIds[r]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${n}" was not present in field "${r}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Ln={[We]:(a,e)=>{for(const t of e.keys()){const n=a.get(t);if(n==null)a.set(t,e.get(t));else{const{score:r,terms:s,match:i}=e.get(t);n.score=n.score+r,n.match=Object.assign(n.match,i),at(n.terms,s)}}return a},[St]:(a,e)=>{const t=new Map;for(const n of e.keys()){const r=a.get(n);if(r==null)continue;const{score:s,terms:i,match:o}=e.get(n);at(r.terms,i),t.set(n,{score:r.score+s,terms:r.terms,match:Object.assign(r.match,o)})}return t},[Mn]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Dn={k:1.2,b:.7,d:.5},Pn=(a,e,t,n,r,s)=>{const{k:i,b:o,d:l}=s;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*n/r)))},zn=a=>(e,t,n)=>{const r=typeof a.fuzzy=="function"?a.fuzzy(e,t,n):a.fuzzy||!1,s=typeof a.prefix=="function"?a.prefix(e,t,n):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,n):1;return{term:e,fuzzy:r,prefix:s,termBoost:i}},Me={idField:"id",extractField:(a,e)=>a[e],stringifyField:(a,e)=>a.toString(),tokenize:a=>a.split($n),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof console?.[a]=="function"&&console[a](e)},autoVacuum:!0},st={combineWith:We,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Dn},Vn={combineWith:St,prefix:(a,e,t)=>e===t.length-1},je={batchSize:1e3,batchWait:10},$e={minDirtFactor:.1,minDirtCount:20},Le={...je,...$e},jn=(a,e)=>{a.includes(e)||a.push(e)},at=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},ot=({score:a},{score:e})=>e-a,lt=()=>new Map,we=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Se=async a=>{const e=new Map;let t=0;for(const n of Object.keys(a))e.set(parseInt(n,10),a[n]),++t%1e3===0&&await xt(0);return e},xt=a=>new Promise(e=>setTimeout(e,a)),$n=/[\n\r\p{Z}\p{P}]+/u;class Bn{max;cache;constructor(e=10){this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const Wn=["aria-owns"],Kn={class:"shell"},Jn=["title"],Un={class:"search-actions before"},qn=["title"],Hn=["aria-activedescendant","aria-controls","placeholder"],Gn={class:"search-actions"},Qn=["title"],Yn=["disabled","title"],Zn=["id","role","aria-labelledby"],Xn=["id","aria-selected"],er=["href","aria-label","onMouseenter","onFocusin","data-index"],tr={class:"titles"},nr=["innerHTML"],rr={class:"title main"},ir=["innerHTML"],sr={key:0,class:"excerpt-wrapper"},ar={key:0,class:"excerpt",inert:""},or=["innerHTML"],lr={key:0,class:"no-results"},cr={class:"search-keyboard-shortcuts"},ur=["aria-label"],dr=["aria-label"],fr=["aria-label"],hr=["aria-label"],vr=Nt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){const t=e,n=re(),r=re(),s=re(Yt),i=Ft(),{activate:o}=Nn(n,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=Ge(async()=>Xe(se.loadJSON((await s.value[l.value]?.())?.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...c.value.search?.provider==="local"&&c.value.search.options?.miniSearch?.searchOptions},...c.value.search?.provider==="local"&&c.value.search.options?.miniSearch?.options}))),p=ve(()=>c.value.search?.provider==="local"&&c.value.search.options?.disableQueryPersistence===!0).value?ce(""):At("vitepress:local-search-filter",""),y=Rt("vitepress:local-search-detailed-list",c.value.search?.provider==="local"&&c.value.search.options?.detailedView===!0),S=ve(()=>c.value.search?.provider==="local"&&(c.value.search.options?.disableDetailedView===!0||c.value.search.options?.detailedView===!1)),I=ve(()=>{const m=c.value.search?.options??c.value.algolia;return m?.locales?.[l.value]?.translations?.button?.buttonText||m?.translations?.button?.buttonText||"Search"});Ot(()=>{S.value&&(y.value=!1)});const w=re([]),N=ce(!1);De(p,()=>{N.value=!1});const R=Ge(async()=>{if(r.value)return Xe(new An(r.value))},null),j=new Bn(16);Ct(()=>[h.value,p.value,y.value],async([m,f,b],_,F)=>{_?.[0]!==m&&j.clear();let O=!1;if(F(()=>{O=!0}),!m)return;w.value=m.search(f).slice(0,16),N.value=!0;const D=b?await Promise.all(w.value.map(L=>J(L.id))):[];if(O)return;for(const{id:L,mod:U}of D){const me=L.slice(0,L.indexOf("#"));let ae=j.get(me);if(ae)continue;ae=new Map,j.set(me,ae);const oe=U.default??U;if(oe?.render||oe?.setup){const Z=Ut(oe);Z.config.warnHandler=()=>{},Z.provide(qt,i),Object.defineProperties(Z.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ke=document.createElement("div");Z.mount(Ke),Ke.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(le=>{const Je=le.querySelector("a")?.getAttribute("href"),Ue=Je?.startsWith("#")&&Je.slice(1);if(!Ue)return;let qe="";for(;(le=le.nextElementSibling)&&!/^h[1-6]$/i.test(le.tagName);)qe+=le.outerHTML;ae.set(Ue,qe)}),Z.unmount()}if(O)return}const $=new Set;if(w.value=w.value.map(L=>{const[U,me]=L.id.split("#"),oe=j.get(U)?.get(me)??"";for(const Z in L.match)$.add(Z);return{...L,text:oe}}),await ue(),O)return;await new Promise(L=>{R.value?.unmark({done:()=>{R.value?.markRegExp(T($),{done:L})}})});const B=n.value?.querySelectorAll(".result .excerpt")??[];for(const L of B)L.querySelector('mark[data-markjs="true"]')?.scrollIntoView({block:"center"});r.value?.firstElementChild?.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function J(m){const f=Ht(m.slice(0,m.indexOf("#")));try{if(!f)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(f)}}catch(b){return console.error(b),{id:m,mod:{}}}}const V=ce(),P=ve(()=>p.value?.length<=0);function z(m=!0){V.value?.focus(),m&&V.value?.select()}Fe(()=>{z()});function Ne(m){m.pointerType==="mouse"&&z()}const A=ce(-1),G=ce(!0);De(w,m=>{A.value=m.length?0:-1,Q()});function Q(){ue(()=>{document.querySelector(".result.selected")?.scrollIntoView({block:"nearest"})})}ge("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=w.value.length-1),G.value=!0,Q()}),ge("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=w.value.length&&(A.value=0),G.value=!0,Q()});const Y=Mt();ge("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const f=w.value[A.value];if(m.target instanceof HTMLInputElement&&!f){m.preventDefault();return}f&&(Y.go(f.id),t("close"))}),ge("Escape",()=>{t("close")});const u=Lt({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Fe(()=>{window.history.pushState(null,"",null)}),Dt("popstate",m=>{m.preventDefault(),t("close")});const d=Pt(zt?document.body:null);Fe(()=>{ue(()=>{d.value=!0,ue().then(()=>o())})}),Vt(()=>{d.value=!1});function g(){p.value="",ue().then(()=>z(!1))}function T(m){return new RegExp([...m].sort((f,b)=>b.length-f.length).map(f=>`(${Gt(f)})`).join("|"),"gi")}function x(m){if(!G.value)return;const f=m.target?.closest(".result"),b=Number.parseInt(f?.dataset.index);b>=0&&b!==A.value&&(A.value=b),G.value=!1}return(m,f)=>(W(),jt(Jt,{to:"body"},[E("div",{ref_key:"el",ref:n,role:"button","aria-owns":w.value?.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[E("div",{class:"backdrop",onClick:f[0]||(f[0]=b=>m.$emit("close"))}),E("div",Kn,[E("form",{class:"search-bar",onPointerup:f[4]||(f[4]=b=>Ne(b)),onSubmit:f[5]||(f[5]=$t(()=>{},["prevent"]))},[E("label",{title:I.value,id:"localsearch-label",for:"localsearch-input"},[...f[7]||(f[7]=[E("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)])],8,Jn),E("div",Un,[E("button",{class:"back-button",title:C(u)("modal.backButtonTitle"),onClick:f[1]||(f[1]=b=>m.$emit("close"))},[...f[8]||(f[8]=[E("span",{class:"vpi-arrow-left local-search-icon"},null,-1)])],8,qn)]),Bt(E("input",{ref_key:"searchInput",ref:V,"onUpdate:modelValue":f[2]||(f[2]=b=>Kt(p)?p.value=b:null),"aria-activedescendant":A.value>-1?"localsearch-item-"+A.value:void 0,"aria-autocomplete":"both","aria-controls":w.value?.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:I.value,spellcheck:"false",type:"search"},null,8,Hn),[[Wt,C(p)]]),E("div",Gn,[S.value?be("",!0):(W(),q("button",{key:0,class:Qe(["toggle-layout-button",{"detailed-list":C(y)}]),type:"button",title:C(u)("modal.displayDetails"),onClick:f[3]||(f[3]=b=>A.value>-1&&(y.value=!C(y)))},[...f[9]||(f[9]=[E("span",{class:"vpi-layout-list local-search-icon"},null,-1)])],10,Qn)),E("button",{class:"clear-button",type:"reset",disabled:P.value,title:C(u)("modal.resetButtonTitle"),onClick:g},[...f[10]||(f[10]=[E("span",{class:"vpi-delete local-search-icon"},null,-1)])],8,Yn)])],32),E("ul",{ref_key:"resultsEl",ref:r,id:w.value?.length?"localsearch-list":void 0,role:w.value?.length?"listbox":void 0,"aria-labelledby":w.value?.length?"localsearch-label":void 0,class:"results",onMousemove:x},[(W(!0),q(Ze,null,Ye(w.value,(b,_)=>(W(),q("li",{key:b.id,id:"localsearch-item-"+_,"aria-selected":A.value===_?"true":"false",role:"option"},[E("a",{href:b.id,class:Qe(["result",{selected:A.value===_}]),"aria-label":[...b.titles,b.title].join(" > "),onMouseenter:F=>!G.value&&(A.value=_),onFocusin:F=>A.value=_,onClick:f[6]||(f[6]=F=>m.$emit("close")),"data-index":_},[E("div",null,[E("div",tr,[f[12]||(f[12]=E("span",{class:"title-icon"},"#",-1)),(W(!0),q(Ze,null,Ye(b.titles,(F,O)=>(W(),q("span",{key:O,class:"title"},[E("span",{class:"text",innerHTML:F},null,8,nr),f[11]||(f[11]=E("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),E("span",rr,[E("span",{class:"text",innerHTML:b.title},null,8,ir)])]),C(y)?(W(),q("div",sr,[b.text?(W(),q("div",ar,[E("div",{class:"vp-doc",innerHTML:b.text},null,8,or)])):be("",!0),f[13]||(f[13]=E("div",{class:"excerpt-gradient-bottom"},null,-1)),f[14]||(f[14]=E("div",{class:"excerpt-gradient-top"},null,-1))])):be("",!0)])],42,er)],8,Xn))),128)),C(p)&&!w.value.length&&N.value?(W(),q("li",lr,[de(fe(C(u)("modal.noResultsText"))+' "',1),E("strong",null,fe(C(p)),1),f[15]||(f[15]=de('" ',-1))])):be("",!0)],40,Zn),E("div",cr,[E("span",null,[E("kbd",{"aria-label":C(u)("modal.footer.navigateUpKeyAriaLabel")},[...f[16]||(f[16]=[E("span",{class:"vpi-arrow-up navigate-icon"},null,-1)])],8,ur),E("kbd",{"aria-label":C(u)("modal.footer.navigateDownKeyAriaLabel")},[...f[17]||(f[17]=[E("span",{class:"vpi-arrow-down navigate-icon"},null,-1)])],8,dr),de(" "+fe(C(u)("modal.footer.navigateText")),1)]),E("span",null,[E("kbd",{"aria-label":C(u)("modal.footer.selectKeyAriaLabel")},[...f[18]||(f[18]=[E("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)])],8,fr),de(" "+fe(C(u)("modal.footer.selectText")),1)]),E("span",null,[E("kbd",{"aria-label":C(u)("modal.footer.closeKeyAriaLabel")},"esc",8,hr),de(" "+fe(C(u)("modal.footer.closeText")),1)])])])],8,Wn)]))}}),br=Qt(vr,[["__scopeId","data-v-e11da6d0"]]);export{br as default}; diff --git a/assets/chunks/arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js b/assets/chunks/arc-CegaQWj_-yn6JxQT-.C2WQ2TtA.js similarity index 98% rename from assets/chunks/arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js rename to assets/chunks/arc-CegaQWj_-yn6JxQT-.C2WQ2TtA.js index ff9b7a4..c75194a 100644 --- a/assets/chunks/arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js +++ b/assets/chunks/arc-CegaQWj_-yn6JxQT-.C2WQ2TtA.js @@ -1 +1 @@ -import{aY as sn,aZ as rn,a_ as c,aX as ln,a$ as O,b0 as Y,b1 as H,b2 as an,aV as I,b3 as un,b4 as Z,b5 as i,b6 as tn,b7 as on,b8 as yn}from"../app.DiEjJ8gz.js";function fn(l){return l.innerRadius}function cn(l){return l.outerRadius}function pn(l){return l.startAngle}function xn(l){return l.endAngle}function gn(l){return l&&l.padAngle}function mn(l,v,S,C,d,b,P,r){var q=S-l,t=C-v,n=P-d,x=r-b,a=x*q-n*t;if(!(a*au*u+B*B&&(D=_,E=m),{cx:D,cy:E,x01:-n,y01:-x,x11:D*(d/T-1),y11:E*(d/T-1)}}function vn(){var l=fn,v=cn,S=I(0),C=null,d=pn,b=xn,P=gn,r=null,q=sn(t);function t(){var n,x,a=+l.apply(this,arguments),s=+v.apply(this,arguments),y=d.apply(this,arguments)-rn,f=b.apply(this,arguments)-rn,w=an(f-y),o=f>y;if(r||(r=n=q()),sc))r.moveTo(0,0);else if(w>ln-c)r.moveTo(s*O(y),s*Y(y)),r.arc(0,0,s,y,f,!o),a>c&&(r.moveTo(a*O(f),a*Y(f)),r.arc(0,0,a,f,y,o));else{var g=y,p=f,L=y,T=f,A=w,z=w,D=P.apply(this,arguments)/2,E=D>c&&(C?+C.apply(this,arguments):Z(a*a+s*s)),_=H(an(s-a)/2,+S.apply(this,arguments)),m=_,h=_,e,u;if(E>c){var B=tn(E/a*Y(D)),$=tn(E/s*Y(D));(A-=B*2)>c?(B*=o?1:-1,L+=B,T-=B):(A=0,L=T=(y+f)/2),(z-=$*2)>c?($*=o?1:-1,g+=$,p-=$):(z=0,g=p=(y+f)/2)}var V=s*O(g),W=s*Y(g),j=a*O(T),J=a*Y(T);if(_>c){var K=s*O(p),U=s*Y(p),k=a*O(L),F=a*Y(L),R;if(wc?h>c?(e=X(k,F,V,W,s,h,o),u=X(K,U,j,J,s,h,o),r.moveTo(e.cx+e.x01,e.cy+e.y01),h<_?r.arc(e.cx,e.cy,h,i(e.y01,e.x01),i(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,h,i(e.y01,e.x01),i(e.y11,e.x11),!o),r.arc(0,0,s,i(e.cy+e.y11,e.cx+e.x11),i(u.cy+u.y11,u.cx+u.x11),!o),r.arc(u.cx,u.cy,h,i(u.y11,u.x11),i(u.y01,u.x01),!o))):(r.moveTo(V,W),r.arc(0,0,s,g,p,!o)):r.moveTo(V,W),!(a>c)||!(A>c)?r.lineTo(j,J):m>c?(e=X(j,J,K,U,a,-m,o),u=X(V,W,k,F,a,-m,o),r.lineTo(e.cx+e.x01,e.cy+e.y01),m<_?r.arc(e.cx,e.cy,m,i(e.y01,e.x01),i(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,m,i(e.y01,e.x01),i(e.y11,e.x11),!o),r.arc(0,0,a,i(e.cy+e.y11,e.cx+e.x11),i(u.cy+u.y11,u.cx+u.x11),o),r.arc(u.cx,u.cy,m,i(u.y11,u.x11),i(u.y01,u.x01),!o))):r.arc(0,0,a,T,L,o)}if(r.closePath(),n)return r=null,n+""||null}return t.centroid=function(){var n=(+l.apply(this,arguments)+ +v.apply(this,arguments))/2,x=(+d.apply(this,arguments)+ +b.apply(this,arguments))/2-un/2;return[O(x)*n,Y(x)*n]},t.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:I(+n),t):l},t.outerRadius=function(n){return arguments.length?(v=typeof n=="function"?n:I(+n),t):v},t.cornerRadius=function(n){return arguments.length?(S=typeof n=="function"?n:I(+n),t):S},t.padRadius=function(n){return arguments.length?(C=n==null?null:typeof n=="function"?n:I(+n),t):C},t.startAngle=function(n){return arguments.length?(d=typeof n=="function"?n:I(+n),t):d},t.endAngle=function(n){return arguments.length?(b=typeof n=="function"?n:I(+n),t):b},t.padAngle=function(n){return arguments.length?(P=typeof n=="function"?n:I(+n),t):P},t.context=function(n){return arguments.length?(r=n??null,t):r},t}export{vn as d}; +import{aY as sn,aZ as rn,a_ as c,aX as ln,a$ as O,b0 as Y,b1 as H,b2 as an,aV as I,b3 as un,b4 as Z,b5 as i,b6 as tn,b7 as on,b8 as yn}from"../app.DfYWW83x.js";function fn(l){return l.innerRadius}function cn(l){return l.outerRadius}function pn(l){return l.startAngle}function xn(l){return l.endAngle}function gn(l){return l&&l.padAngle}function mn(l,v,S,C,d,b,P,r){var q=S-l,t=C-v,n=P-d,x=r-b,a=x*q-n*t;if(!(a*au*u+B*B&&(D=_,E=m),{cx:D,cy:E,x01:-n,y01:-x,x11:D*(d/T-1),y11:E*(d/T-1)}}function vn(){var l=fn,v=cn,S=I(0),C=null,d=pn,b=xn,P=gn,r=null,q=sn(t);function t(){var n,x,a=+l.apply(this,arguments),s=+v.apply(this,arguments),y=d.apply(this,arguments)-rn,f=b.apply(this,arguments)-rn,w=an(f-y),o=f>y;if(r||(r=n=q()),sc))r.moveTo(0,0);else if(w>ln-c)r.moveTo(s*O(y),s*Y(y)),r.arc(0,0,s,y,f,!o),a>c&&(r.moveTo(a*O(f),a*Y(f)),r.arc(0,0,a,f,y,o));else{var g=y,p=f,L=y,T=f,A=w,z=w,D=P.apply(this,arguments)/2,E=D>c&&(C?+C.apply(this,arguments):Z(a*a+s*s)),_=H(an(s-a)/2,+S.apply(this,arguments)),m=_,h=_,e,u;if(E>c){var B=tn(E/a*Y(D)),$=tn(E/s*Y(D));(A-=B*2)>c?(B*=o?1:-1,L+=B,T-=B):(A=0,L=T=(y+f)/2),(z-=$*2)>c?($*=o?1:-1,g+=$,p-=$):(z=0,g=p=(y+f)/2)}var V=s*O(g),W=s*Y(g),j=a*O(T),J=a*Y(T);if(_>c){var K=s*O(p),U=s*Y(p),k=a*O(L),F=a*Y(L),R;if(wc?h>c?(e=X(k,F,V,W,s,h,o),u=X(K,U,j,J,s,h,o),r.moveTo(e.cx+e.x01,e.cy+e.y01),h<_?r.arc(e.cx,e.cy,h,i(e.y01,e.x01),i(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,h,i(e.y01,e.x01),i(e.y11,e.x11),!o),r.arc(0,0,s,i(e.cy+e.y11,e.cx+e.x11),i(u.cy+u.y11,u.cx+u.x11),!o),r.arc(u.cx,u.cy,h,i(u.y11,u.x11),i(u.y01,u.x01),!o))):(r.moveTo(V,W),r.arc(0,0,s,g,p,!o)):r.moveTo(V,W),!(a>c)||!(A>c)?r.lineTo(j,J):m>c?(e=X(j,J,K,U,a,-m,o),u=X(V,W,k,F,a,-m,o),r.lineTo(e.cx+e.x01,e.cy+e.y01),m<_?r.arc(e.cx,e.cy,m,i(e.y01,e.x01),i(u.y01,u.x01),!o):(r.arc(e.cx,e.cy,m,i(e.y01,e.x01),i(e.y11,e.x11),!o),r.arc(0,0,a,i(e.cy+e.y11,e.cx+e.x11),i(u.cy+u.y11,u.cx+u.x11),o),r.arc(u.cx,u.cy,m,i(u.y11,u.x11),i(u.y01,u.x01),!o))):r.arc(0,0,a,T,L,o)}if(r.closePath(),n)return r=null,n+""||null}return t.centroid=function(){var n=(+l.apply(this,arguments)+ +v.apply(this,arguments))/2,x=(+d.apply(this,arguments)+ +b.apply(this,arguments))/2-un/2;return[O(x)*n,Y(x)*n]},t.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:I(+n),t):l},t.outerRadius=function(n){return arguments.length?(v=typeof n=="function"?n:I(+n),t):v},t.cornerRadius=function(n){return arguments.length?(S=typeof n=="function"?n:I(+n),t):S},t.padRadius=function(n){return arguments.length?(C=n==null?null:typeof n=="function"?n:I(+n),t):C},t.startAngle=function(n){return arguments.length?(d=typeof n=="function"?n:I(+n),t):d},t.endAngle=function(n){return arguments.length?(b=typeof n=="function"?n:I(+n),t):b},t.padAngle=function(n){return arguments.length?(P=typeof n=="function"?n:I(+n),t):P},t.context=function(n){return arguments.length?(r=n??null,t):r},t}export{vn as d}; diff --git a/assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.BmBUXIJr.js b/assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.DUyQUGjS.js similarity index 99% rename from assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.BmBUXIJr.js rename to assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.DUyQUGjS.js index 13a68d6..a868540 100644 --- a/assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.BmBUXIJr.js +++ b/assets/chunks/architectureDiagram-SUXI7LT5-MkMpV-jr-B2a9oIQq.DUyQUGjS.js @@ -1,4 +1,4 @@ -import{q as it,a6 as qe,a5 as je,a7 as Ze,a8 as Qe,ao as Ke,an as Je,aS as ti,bk as ei,aA as ii,aB as ri,aC as ni,at as oi,O as Se,bp as Ee,A as Ne,bv as ue,a9 as ai,bw as si,bx as hi,aM as li}from"../app.DiEjJ8gz.js";import{i as di}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js";import{e as ci}from"./chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js";import{I as gi}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js";import{J as Fe}from"./cytoscape.esm-wWJwD64P-C103aMMl.DNxweH6G.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";var fe={exports:{}},pe={exports:{}},ve={exports:{}},ui=ve.exports,Ce;function fi(){return Ce||(Ce=1,(function(I,H){(function(x,Y){I.exports=Y()})(ui,function(){return(function(x){var Y={};function T(u){if(Y[u])return Y[u].exports;var d=Y[u]={i:u,l:!1,exports:{}};return x[u].call(d.exports,d,d.exports,T),d.l=!0,d.exports}return T.m=x,T.c=Y,T.i=function(u){return u},T.d=function(u,d,o){T.o(u,d)||Object.defineProperty(u,d,{configurable:!1,enumerable:!0,get:o})},T.n=function(u){var d=u&&u.__esModule?(function(){return u.default}):(function(){return u});return T.d(d,"a",d),d},T.o=function(u,d){return Object.prototype.hasOwnProperty.call(u,d)},T.p="",T(T.s=28)})([function(x,Y,T){function u(){}u.QUALITY=1,u.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,u.DEFAULT_INCREMENTAL=!1,u.DEFAULT_ANIMATION_ON_LAYOUT=!0,u.DEFAULT_ANIMATION_DURING_LAYOUT=!1,u.DEFAULT_ANIMATION_PERIOD=50,u.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,u.DEFAULT_GRAPH_MARGIN=15,u.NODE_DIMENSIONS_INCLUDE_LABELS=!1,u.SIMPLE_NODE_SIZE=40,u.SIMPLE_NODE_HALF_SIZE=u.SIMPLE_NODE_SIZE/2,u.EMPTY_COMPOUND_NODE_SIZE=40,u.MIN_EDGE_LENGTH=1,u.WORLD_BOUNDARY=1e6,u.INITIAL_WORLD_BOUNDARY=u.WORLD_BOUNDARY/1e3,u.WORLD_CENTER_X=1200,u.WORLD_CENTER_Y=900,x.exports=u},function(x,Y,T){var u=T(2),d=T(8),o=T(9);function i(s,n,f){u.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=s,this.target=n}i.prototype=Object.create(u.prototype);for(var e in u)i[e]=u[e];i.prototype.getSource=function(){return this.source},i.prototype.getTarget=function(){return this.target},i.prototype.isInterGraph=function(){return this.isInterGraph},i.prototype.getLength=function(){return this.length},i.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},i.prototype.getBendpoints=function(){return this.bendpoints},i.prototype.getLca=function(){return this.lca},i.prototype.getSourceInLca=function(){return this.sourceInLca},i.prototype.getTargetInLca=function(){return this.targetInLca},i.prototype.getOtherEnd=function(s){if(this.source===s)return this.target;if(this.target===s)return this.source;throw"Node is not incident with this edge"},i.prototype.getOtherEndInGraph=function(s,n){for(var f=this.getOtherEnd(s),t=n.getGraphManager().getRoot();;){if(f.getOwner()==n)return f;if(f.getOwner()==t)break;f=f.getOwner().getParent()}return null},i.prototype.updateLength=function(){var s=new Array(4);this.isOverlapingSourceAndTarget=d.getIntersection(this.target.getRect(),this.source.getRect(),s),this.isOverlapingSourceAndTarget||(this.lengthX=s[0]-s[2],this.lengthY=s[1]-s[3],Math.abs(this.lengthX)<1&&(this.lengthX=o.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=o.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},i.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=o.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=o.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},x.exports=i},function(x,Y,T){function u(d){this.vGraphObject=d}x.exports=u},function(x,Y,T){var u=T(2),d=T(10),o=T(13),i=T(0),e=T(16),s=T(5);function n(t,a,l,g){l==null&&g==null&&(g=a),u.call(this,g),t.graphManager!=null&&(t=t.graphManager),this.estimatedSize=d.MIN_VALUE,this.inclusionTreeDepth=d.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=t,l!=null&&a!=null?this.rect=new o(a.x,a.y,l.width,l.height):this.rect=new o}n.prototype=Object.create(u.prototype);for(var f in u)n[f]=u[f];n.prototype.getEdges=function(){return this.edges},n.prototype.getChild=function(){return this.child},n.prototype.getOwner=function(){return this.owner},n.prototype.getWidth=function(){return this.rect.width},n.prototype.setWidth=function(t){this.rect.width=t},n.prototype.getHeight=function(){return this.rect.height},n.prototype.setHeight=function(t){this.rect.height=t},n.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},n.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},n.prototype.getCenter=function(){return new s(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},n.prototype.getLocation=function(){return new s(this.rect.x,this.rect.y)},n.prototype.getRect=function(){return this.rect},n.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},n.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},n.prototype.setRect=function(t,a){this.rect.x=t.x,this.rect.y=t.y,this.rect.width=a.width,this.rect.height=a.height},n.prototype.setCenter=function(t,a){this.rect.x=t-this.rect.width/2,this.rect.y=a-this.rect.height/2},n.prototype.setLocation=function(t,a){this.rect.x=t,this.rect.y=a},n.prototype.moveBy=function(t,a){this.rect.x+=t,this.rect.y+=a},n.prototype.getEdgeListToNode=function(t){var a=[],l=this;return l.edges.forEach(function(g){if(g.target==t){if(g.source!=l)throw"Incorrect edge source!";a.push(g)}}),a},n.prototype.getEdgesBetween=function(t){var a=[],l=this;return l.edges.forEach(function(g){if(!(g.source==l||g.target==l))throw"Incorrect edge source and/or target";(g.target==t||g.source==t)&&a.push(g)}),a},n.prototype.getNeighborsList=function(){var t=new Set,a=this;return a.edges.forEach(function(l){if(l.source==a)t.add(l.target);else{if(l.target!=a)throw"Incorrect incidency!";t.add(l.source)}}),t},n.prototype.withChildren=function(){var t=new Set,a,l;if(t.add(this),this.child!=null)for(var g=this.child.getNodes(),h=0;ha?(this.rect.x-=(this.labelWidth-a)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(a+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(l+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>l?(this.rect.y-=(this.labelHeight-l)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(l+this.labelHeight))}}},n.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==d.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},n.prototype.transform=function(t){var a=this.rect.x;a>i.WORLD_BOUNDARY?a=i.WORLD_BOUNDARY:a<-i.WORLD_BOUNDARY&&(a=-i.WORLD_BOUNDARY);var l=this.rect.y;l>i.WORLD_BOUNDARY?l=i.WORLD_BOUNDARY:l<-i.WORLD_BOUNDARY&&(l=-i.WORLD_BOUNDARY);var g=new s(a,l),h=t.inverseTransformPoint(g);this.setLocation(h.x,h.y)},n.prototype.getLeft=function(){return this.rect.x},n.prototype.getRight=function(){return this.rect.x+this.rect.width},n.prototype.getTop=function(){return this.rect.y},n.prototype.getBottom=function(){return this.rect.y+this.rect.height},n.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},x.exports=n},function(x,Y,T){var u=T(0);function d(){}for(var o in u)d[o]=u[o];d.MAX_ITERATIONS=2500,d.DEFAULT_EDGE_LENGTH=50,d.DEFAULT_SPRING_STRENGTH=.45,d.DEFAULT_REPULSION_STRENGTH=4500,d.DEFAULT_GRAVITY_STRENGTH=.4,d.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,d.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,d.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,d.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,d.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,d.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,d.COOLING_ADAPTATION_FACTOR=.33,d.ADAPTATION_LOWER_NODE_LIMIT=1e3,d.ADAPTATION_UPPER_NODE_LIMIT=5e3,d.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,d.MAX_NODE_DISPLACEMENT=d.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,d.MIN_REPULSION_DIST=d.DEFAULT_EDGE_LENGTH/10,d.CONVERGENCE_CHECK_PERIOD=100,d.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,d.MIN_EDGE_LENGTH=1,d.GRID_CALCULATION_CHECK_PERIOD=10,x.exports=d},function(x,Y,T){function u(d,o){d==null&&o==null?(this.x=0,this.y=0):(this.x=d,this.y=o)}u.prototype.getX=function(){return this.x},u.prototype.getY=function(){return this.y},u.prototype.setX=function(d){this.x=d},u.prototype.setY=function(d){this.y=d},u.prototype.getDifference=function(d){return new DimensionD(this.x-d.x,this.y-d.y)},u.prototype.getCopy=function(){return new u(this.x,this.y)},u.prototype.translate=function(d){return this.x+=d.width,this.y+=d.height,this},x.exports=u},function(x,Y,T){var u=T(2),d=T(10),o=T(0),i=T(7),e=T(3),s=T(1),n=T(13),f=T(12),t=T(11);function a(g,h,N){u.call(this,N),this.estimatedSize=d.MIN_VALUE,this.margin=o.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,h!=null&&h instanceof i?this.graphManager=h:h!=null&&h instanceof Layout&&(this.graphManager=h.graphManager)}a.prototype=Object.create(u.prototype);for(var l in u)a[l]=u[l];a.prototype.getNodes=function(){return this.nodes},a.prototype.getEdges=function(){return this.edges},a.prototype.getGraphManager=function(){return this.graphManager},a.prototype.getParent=function(){return this.parent},a.prototype.getLeft=function(){return this.left},a.prototype.getRight=function(){return this.right},a.prototype.getTop=function(){return this.top},a.prototype.getBottom=function(){return this.bottom},a.prototype.isConnected=function(){return this.isConnected},a.prototype.add=function(g,h,N){if(h==null&&N==null){var c=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(c)>-1)throw"Node already in graph!";return c.owner=this,this.getNodes().push(c),c}else{var y=g;if(!(this.getNodes().indexOf(h)>-1&&this.getNodes().indexOf(N)>-1))throw"Source or target not in graph!";if(!(h.owner==N.owner&&h.owner==this))throw"Both owners must be this graph!";return h.owner!=N.owner?null:(y.source=h,y.target=N,y.isInterGraph=!1,this.getEdges().push(y),h.edges.push(y),N!=h&&N.edges.push(y),y)}},a.prototype.remove=function(g){var h=g;if(g instanceof e){if(h==null)throw"Node is null!";if(!(h.owner!=null&&h.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var N=h.edges.slice(),c,y=N.length,A=0;A-1&&U>-1))throw"Source and/or target doesn't know this edge!";c.source.edges.splice(S,1),c.target!=c.source&&c.target.edges.splice(U,1);var _=c.source.owner.getEdges().indexOf(c);if(_==-1)throw"Not in owner's edge list!";c.source.owner.getEdges().splice(_,1)}},a.prototype.updateLeftTop=function(){for(var g=d.MAX_VALUE,h=d.MAX_VALUE,N,c,y,A=this.getNodes(),_=A.length,S=0;S<_;S++){var U=A[S];N=U.getTop(),c=U.getLeft(),g>N&&(g=N),h>c&&(h=c)}return g==d.MAX_VALUE?null:(A[0].getParent().paddingLeft!=null?y=A[0].getParent().paddingLeft:y=this.margin,this.left=h-y,this.top=g-y,new f(this.left,this.top))},a.prototype.updateBounds=function(g){for(var h=d.MAX_VALUE,N=-d.MAX_VALUE,c=d.MAX_VALUE,y=-d.MAX_VALUE,A,_,S,U,k,X=this.nodes,Q=X.length,C=0;CA&&(h=A),N<_&&(N=_),c>S&&(c=S),yA&&(h=A),N<_&&(N=_),c>S&&(c=S),y=this.nodes.length){var Q=0;N.forEach(function(C){C.owner==g&&Q++}),Q==this.nodes.length&&(this.isConnected=!0)}},x.exports=a},function(x,Y,T){var u,d=T(1);function o(i){u=T(6),this.layout=i,this.graphs=[],this.edges=[]}o.prototype.addRoot=function(){var i=this.layout.newGraph(),e=this.layout.newNode(null),s=this.add(i,e);return this.setRootGraph(s),this.rootGraph},o.prototype.add=function(i,e,s,n,f){if(s==null&&n==null&&f==null){if(i==null)throw"Graph is null!";if(e==null)throw"Parent node is null!";if(this.graphs.indexOf(i)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(i),i.parent!=null)throw"Already has a parent!";if(e.child!=null)throw"Already has a child!";return i.parent=e,e.child=i,i}else{f=s,n=e,s=i;var t=n.getOwner(),a=f.getOwner();if(!(t!=null&&t.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(a!=null&&a.getGraphManager()==this))throw"Target not in this graph mgr!";if(t==a)return s.isInterGraph=!1,t.add(s,n,f);if(s.isInterGraph=!0,s.source=n,s.target=f,this.edges.indexOf(s)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(s),!(s.source!=null&&s.target!=null))throw"Edge source and/or target is null!";if(!(s.source.edges.indexOf(s)==-1&&s.target.edges.indexOf(s)==-1))throw"Edge already in source and/or target incidency list!";return s.source.edges.push(s),s.target.edges.push(s),s}},o.prototype.remove=function(i){if(i instanceof u){var e=i;if(e.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(e==this.rootGraph||e.parent!=null&&e.parent.graphManager==this))throw"Invalid parent node!";var s=[];s=s.concat(e.getEdges());for(var n,f=s.length,t=0;t=i.getRight()?e[0]+=Math.min(i.getX()-o.getX(),o.getRight()-i.getRight()):i.getX()<=o.getX()&&i.getRight()>=o.getRight()&&(e[0]+=Math.min(o.getX()-i.getX(),i.getRight()-o.getRight())),o.getY()<=i.getY()&&o.getBottom()>=i.getBottom()?e[1]+=Math.min(i.getY()-o.getY(),o.getBottom()-i.getBottom()):i.getY()<=o.getY()&&i.getBottom()>=o.getBottom()&&(e[1]+=Math.min(o.getY()-i.getY(),i.getBottom()-o.getBottom()));var f=Math.abs((i.getCenterY()-o.getCenterY())/(i.getCenterX()-o.getCenterX()));i.getCenterY()===o.getCenterY()&&i.getCenterX()===o.getCenterX()&&(f=1);var t=f*e[0],a=e[1]/f;e[0]t)return e[0]=s,e[1]=l,e[2]=f,e[3]=X,!1;if(nf)return e[0]=a,e[1]=n,e[2]=U,e[3]=t,!1;if(sf?(e[0]=h,e[1]=N,r=!0):(e[0]=g,e[1]=l,r=!0):p===m&&(s>f?(e[0]=a,e[1]=l,r=!0):(e[0]=c,e[1]=N,r=!0)),-v===m?f>s?(e[2]=k,e[3]=X,E=!0):(e[2]=U,e[3]=S,E=!0):v===m&&(f>s?(e[2]=_,e[3]=S,E=!0):(e[2]=Q,e[3]=X,E=!0)),r&&E)return!1;if(s>f?n>t?(R=this.getCardinalDirection(p,m,4),L=this.getCardinalDirection(v,m,2)):(R=this.getCardinalDirection(-p,m,3),L=this.getCardinalDirection(-v,m,1)):n>t?(R=this.getCardinalDirection(-p,m,1),L=this.getCardinalDirection(-v,m,3)):(R=this.getCardinalDirection(p,m,2),L=this.getCardinalDirection(v,m,4)),!r)switch(R){case 1:P=l,O=s+-A/m,e[0]=O,e[1]=P;break;case 2:O=c,P=n+y*m,e[0]=O,e[1]=P;break;case 3:P=N,O=s+A/m,e[0]=O,e[1]=P;break;case 4:O=h,P=n+-y*m,e[0]=O,e[1]=P;break}if(!E)switch(L){case 1:B=S,G=f+-ot/m,e[2]=G,e[3]=B;break;case 2:G=Q,B=t+C*m,e[2]=G,e[3]=B;break;case 3:B=X,G=f+ot/m,e[2]=G,e[3]=B;break;case 4:G=k,B=t+-C*m,e[2]=G,e[3]=B;break}}return!1},d.getCardinalDirection=function(o,i,e){return o>i?e:1+e%4},d.getIntersection=function(o,i,e,s){if(s==null)return this.getIntersection2(o,i,e);var n=o.x,f=o.y,t=i.x,a=i.y,l=e.x,g=e.y,h=s.x,N=s.y,c=void 0,y=void 0,A=void 0,_=void 0,S=void 0,U=void 0,k=void 0,X=void 0,Q=void 0;return A=a-f,S=n-t,k=t*f-n*a,_=N-g,U=l-h,X=h*g-l*N,Q=A*U-_*S,Q===0?null:(c=(S*X-U*k)/Q,y=(_*k-A*X)/Q,new u(c,y))},d.angleOfVector=function(o,i,e,s){var n=void 0;return o!==e?(n=Math.atan((s-i)/(e-o)),e=0){var N=(-l+Math.sqrt(l*l-4*a*g))/(2*a),c=(-l-Math.sqrt(l*l-4*a*g))/(2*a),y=null;return N>=0&&N<=1?[N]:c>=0&&c<=1?[c]:y}else return null},d.HALF_PI=.5*Math.PI,d.ONE_AND_HALF_PI=1.5*Math.PI,d.TWO_PI=2*Math.PI,d.THREE_PI=3*Math.PI,x.exports=d},function(x,Y,T){function u(){}u.sign=function(d){return d>0?1:d<0?-1:0},u.floor=function(d){return d<0?Math.ceil(d):Math.floor(d)},u.ceil=function(d){return d<0?Math.floor(d):Math.ceil(d)},x.exports=u},function(x,Y,T){function u(){}u.MAX_VALUE=2147483647,u.MIN_VALUE=-2147483648,x.exports=u},function(x,Y,T){var u=(function(){function n(f,t){for(var a=0;a"u"?"undefined":u(o);return o==null||i!="object"&&i!="function"},x.exports=d},function(x,Y,T){function u(l){if(Array.isArray(l)){for(var g=0,h=Array(l.length);g0&&g;){for(A.push(S[0]);A.length>0&&g;){var U=A[0];A.splice(0,1),y.add(U);for(var k=U.getEdges(),c=0;c-1&&S.splice(ot,1)}y=new Set,_=new Map}}return l},a.prototype.createDummyNodesForBendpoints=function(l){for(var g=[],h=l.source,N=this.graphManager.calcLowestCommonAncestor(l.source,l.target),c=0;c0){for(var N=this.edgeToDummyNodes.get(h),c=0;c=0&&g.splice(X,1);var Q=_.getNeighborsList();Q.forEach(function(r){if(h.indexOf(r)<0){var E=N.get(r),p=E-1;p==1&&U.push(r),N.set(r,p)}})}h=h.concat(U),(g.length==1||g.length==2)&&(c=!0,y=g[0])}return y},a.prototype.setGraphManager=function(l){this.graphManager=l},x.exports=a},function(x,Y,T){function u(){}u.seed=1,u.x=0,u.nextDouble=function(){return u.x=Math.sin(u.seed++)*1e4,u.x-Math.floor(u.x)},x.exports=u},function(x,Y,T){var u=T(5);function d(o,i){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}d.prototype.getWorldOrgX=function(){return this.lworldOrgX},d.prototype.setWorldOrgX=function(o){this.lworldOrgX=o},d.prototype.getWorldOrgY=function(){return this.lworldOrgY},d.prototype.setWorldOrgY=function(o){this.lworldOrgY=o},d.prototype.getWorldExtX=function(){return this.lworldExtX},d.prototype.setWorldExtX=function(o){this.lworldExtX=o},d.prototype.getWorldExtY=function(){return this.lworldExtY},d.prototype.setWorldExtY=function(o){this.lworldExtY=o},d.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},d.prototype.setDeviceOrgX=function(o){this.ldeviceOrgX=o},d.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},d.prototype.setDeviceOrgY=function(o){this.ldeviceOrgY=o},d.prototype.getDeviceExtX=function(){return this.ldeviceExtX},d.prototype.setDeviceExtX=function(o){this.ldeviceExtX=o},d.prototype.getDeviceExtY=function(){return this.ldeviceExtY},d.prototype.setDeviceExtY=function(o){this.ldeviceExtY=o},d.prototype.transformX=function(o){var i=0,e=this.lworldExtX;return e!=0&&(i=this.ldeviceOrgX+(o-this.lworldOrgX)*this.ldeviceExtX/e),i},d.prototype.transformY=function(o){var i=0,e=this.lworldExtY;return e!=0&&(i=this.ldeviceOrgY+(o-this.lworldOrgY)*this.ldeviceExtY/e),i},d.prototype.inverseTransformX=function(o){var i=0,e=this.ldeviceExtX;return e!=0&&(i=this.lworldOrgX+(o-this.ldeviceOrgX)*this.lworldExtX/e),i},d.prototype.inverseTransformY=function(o){var i=0,e=this.ldeviceExtY;return e!=0&&(i=this.lworldOrgY+(o-this.ldeviceOrgY)*this.lworldExtY/e),i},d.prototype.inverseTransformPoint=function(o){var i=new u(this.inverseTransformX(o.x),this.inverseTransformY(o.y));return i},x.exports=d},function(x,Y,T){function u(t){if(Array.isArray(t)){for(var a=0,l=Array(t.length);ao.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*o.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(t-o.ADAPTATION_LOWER_NODE_LIMIT)/(o.ADAPTATION_UPPER_NODE_LIMIT-o.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-o.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=o.MAX_NODE_DISPLACEMENT_INCREMENTAL):(t>o.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(o.COOLING_ADAPTATION_FACTOR,1-(t-o.ADAPTATION_LOWER_NODE_LIMIT)/(o.ADAPTATION_UPPER_NODE_LIMIT-o.ADAPTATION_LOWER_NODE_LIMIT)*(1-o.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=o.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*o.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},n.prototype.calcSpringForces=function(){for(var t=this.getAllEdges(),a,l=0;l0&&arguments[0]!==void 0?arguments[0]:!0,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,l,g,h,N,c=this.getAllNodes(),y;if(this.useFRGridVariant)for(this.totalIterations%o.GRID_CALCULATION_CHECK_PERIOD==1&&t&&this.updateGrid(),y=new Set,l=0;lA||y>A)&&(t.gravitationForceX=-this.gravityConstant*h,t.gravitationForceY=-this.gravityConstant*N)):(A=a.getEstimatedSize()*this.compoundGravityRangeFactor,(c>A||y>A)&&(t.gravitationForceX=-this.gravityConstant*h*this.compoundGravityConstant,t.gravitationForceY=-this.gravityConstant*N*this.compoundGravityConstant))},n.prototype.isConverged=function(){var t,a=!1;return this.totalIterations>this.maxIterations/3&&(a=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),t=this.totalDisplacement=c.length||A>=c[0].length)){for(var _=0;_s}}]),e})();x.exports=i},function(x,Y,T){function u(){}u.svd=function(d){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=d.length,this.n=d[0].length;var o=Math.min(this.m,this.n);this.s=(function(wt){for(var At=[];wt-- >0;)At.push(0);return At})(Math.min(this.m+1,this.n)),this.U=(function(wt){var At=function Xt(Ut){if(Ut.length==0)return 0;for(var Dt=[],Yt=0;Yt0;)At.push(0);return At})(this.n),e=(function(wt){for(var At=[];wt-- >0;)At.push(0);return At})(this.m),s=!0,n=Math.min(this.m-1,this.n),f=Math.max(0,Math.min(this.n-2,this.m)),t=0;t=0;v--)if(this.s[v]!==0){for(var m=v+1;m=0;V--){if((function(wt,At){return wt&&At})(V0;){var $=void 0,Mt=void 0;for($=r-2;$>=-1&&$!==-1;$--)if(Math.abs(i[$])<=vt+et*(Math.abs(this.s[$])+Math.abs(this.s[$+1]))){i[$]=0;break}if($===r-2)Mt=4;else{var J=void 0;for(J=r-1;J>=$&&J!==$;J--){var nt=(J!==r?Math.abs(i[J]):0)+(J!==$+1?Math.abs(i[J-1]):0);if(Math.abs(this.s[J])<=vt+et*nt){this.s[J]=0;break}}J===$?Mt=3:J===r-1?Mt=1:(Mt=2,$=J)}switch($++,Mt){case 1:{var mt=i[r-2];i[r-2]=0;for(var ht=r-2;ht>=$;ht--){var xt=u.hypot(this.s[ht],mt),Lt=this.s[ht]/xt,Tt=mt/xt;this.s[ht]=xt,ht!==$&&(mt=-Tt*i[ht-1],i[ht-1]=Lt*i[ht-1]);for(var It=0;It=this.s[$+1]);){var _t=this.s[$];if(this.s[$]=this.s[$+1],this.s[$+1]=_t,$Math.abs(o)?(i=o/d,i=Math.abs(d)*Math.sqrt(1+i*i)):o!=0?(i=d/o,i=Math.abs(o)*Math.sqrt(1+i*i)):i=0,i},x.exports=u},function(x,Y,T){var u=(function(){function i(e,s){for(var n=0;n2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,t=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;d(this,i),this.sequence1=e,this.sequence2=s,this.match_score=n,this.mismatch_penalty=f,this.gap_penalty=t,this.iMax=e.length+1,this.jMax=s.length+1,this.grid=new Array(this.iMax);for(var a=0;a=0;e--){var s=this.listeners[e];s.event===o&&s.callback===i&&this.listeners.splice(e,1)}},d.emit=function(o,i){for(var e=0;e{var Y={45:((o,i,e)=>{var s={};s.layoutBase=e(551),s.CoSEConstants=e(806),s.CoSEEdge=e(767),s.CoSEGraph=e(880),s.CoSEGraphManager=e(578),s.CoSELayout=e(765),s.CoSENode=e(991),s.ConstraintHandler=e(902),o.exports=s}),806:((o,i,e)=>{var s=e(551).FDLayoutConstants;function n(){}for(var f in s)n[f]=s[f];n.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,n.DEFAULT_RADIAL_SEPARATION=s.DEFAULT_EDGE_LENGTH,n.DEFAULT_COMPONENT_SEPERATION=60,n.TILE=!0,n.TILING_PADDING_VERTICAL=10,n.TILING_PADDING_HORIZONTAL=10,n.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,n.ENFORCE_CONSTRAINTS=!0,n.APPLY_LAYOUT=!0,n.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,n.TREE_REDUCTION_ON_INCREMENTAL=!0,n.PURE_INCREMENTAL=n.DEFAULT_INCREMENTAL,o.exports=n}),767:((o,i,e)=>{var s=e(551).FDLayoutEdge;function n(t,a,l){s.call(this,t,a,l)}n.prototype=Object.create(s.prototype);for(var f in s)n[f]=s[f];o.exports=n}),880:((o,i,e)=>{var s=e(551).LGraph;function n(t,a,l){s.call(this,t,a,l)}n.prototype=Object.create(s.prototype);for(var f in s)n[f]=s[f];o.exports=n}),578:((o,i,e)=>{var s=e(551).LGraphManager;function n(t){s.call(this,t)}n.prototype=Object.create(s.prototype);for(var f in s)n[f]=s[f];o.exports=n}),765:((o,i,e)=>{var s=e(551).FDLayout,n=e(578),f=e(880),t=e(991),a=e(767),l=e(806),g=e(902),h=e(551).FDLayoutConstants,N=e(551).LayoutConstants,c=e(551).Point,y=e(551).PointD,A=e(551).DimensionD,_=e(551).Layout,S=e(551).Integer,U=e(551).IGeometry,k=e(551).LGraph,X=e(551).Transform,Q=e(551).LinkedList;function C(){s.call(this),this.toBeTiled={},this.constraints={}}C.prototype=Object.create(s.prototype);for(var ot in s)C[ot]=s[ot];C.prototype.newGraphManager=function(){var r=new n(this);return this.graphManager=r,r},C.prototype.newGraph=function(r){return new f(null,this.graphManager,r)},C.prototype.newNode=function(r){return new t(this.graphManager,r)},C.prototype.newEdge=function(r){return new a(null,null,r)},C.prototype.initParameters=function(){s.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=h.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=h.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=h.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=h.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},C.prototype.initSpringEmbedder=function(){s.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/h.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},C.prototype.layout=function(){var r=N.DEFAULT_CREATE_BENDS_AS_NEEDED;return r&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},C.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(l.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var r=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(v){return r.has(v)});this.graphManager.setAllNodesToApplyGravitation(E)}}else{var p=this.getFlatForest();if(p.length>0)this.positionNodesRadially(p);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var r=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(R){return r.has(R)});this.graphManager.setAllNodesToApplyGravitation(E),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),l.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},C.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%h.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var r=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(m){return r.has(m)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),l.PURE_INCREMENTAL?this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),l.PURE_INCREMENTAL?this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var p=!this.isTreeGrowing&&!this.isGrowthFinished,v=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(p,v),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},C.prototype.getPositionsData=function(){for(var r=this.graphManager.getAllNodes(),E={},p=0;p0&&this.updateDisplacements();for(var p=0;p0&&(v.fixedNodeWeight=R)}}if(this.constraints.relativePlacementConstraint){var L=new Map,O=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(M){r.fixedNodesOnHorizontal.add(M),r.fixedNodesOnVertical.add(M)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var P=this.constraints.alignmentConstraint.vertical,p=0;p=2*M.length/3;et--)b=Math.floor(Math.random()*(et+1)),q=M[et],M[et]=M[b],M[b]=q;return M},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(M){if(M.left){var b=L.has(M.left)?L.get(M.left):M.left,q=L.has(M.right)?L.get(M.right):M.right;r.nodesInRelativeHorizontal.includes(b)||(r.nodesInRelativeHorizontal.push(b),r.nodeToRelativeConstraintMapHorizontal.set(b,[]),r.dummyToNodeForVerticalAlignment.has(b)?r.nodeToTempPositionMapHorizontal.set(b,r.idToNodeMap.get(r.dummyToNodeForVerticalAlignment.get(b)[0]).getCenterX()):r.nodeToTempPositionMapHorizontal.set(b,r.idToNodeMap.get(b).getCenterX())),r.nodesInRelativeHorizontal.includes(q)||(r.nodesInRelativeHorizontal.push(q),r.nodeToRelativeConstraintMapHorizontal.set(q,[]),r.dummyToNodeForVerticalAlignment.has(q)?r.nodeToTempPositionMapHorizontal.set(q,r.idToNodeMap.get(r.dummyToNodeForVerticalAlignment.get(q)[0]).getCenterX()):r.nodeToTempPositionMapHorizontal.set(q,r.idToNodeMap.get(q).getCenterX())),r.nodeToRelativeConstraintMapHorizontal.get(b).push({right:q,gap:M.gap}),r.nodeToRelativeConstraintMapHorizontal.get(q).push({left:b,gap:M.gap})}else{var et=O.has(M.top)?O.get(M.top):M.top,vt=O.has(M.bottom)?O.get(M.bottom):M.bottom;r.nodesInRelativeVertical.includes(et)||(r.nodesInRelativeVertical.push(et),r.nodeToRelativeConstraintMapVertical.set(et,[]),r.dummyToNodeForHorizontalAlignment.has(et)?r.nodeToTempPositionMapVertical.set(et,r.idToNodeMap.get(r.dummyToNodeForHorizontalAlignment.get(et)[0]).getCenterY()):r.nodeToTempPositionMapVertical.set(et,r.idToNodeMap.get(et).getCenterY())),r.nodesInRelativeVertical.includes(vt)||(r.nodesInRelativeVertical.push(vt),r.nodeToRelativeConstraintMapVertical.set(vt,[]),r.dummyToNodeForHorizontalAlignment.has(vt)?r.nodeToTempPositionMapVertical.set(vt,r.idToNodeMap.get(r.dummyToNodeForHorizontalAlignment.get(vt)[0]).getCenterY()):r.nodeToTempPositionMapVertical.set(vt,r.idToNodeMap.get(vt).getCenterY())),r.nodeToRelativeConstraintMapVertical.get(et).push({bottom:vt,gap:M.gap}),r.nodeToRelativeConstraintMapVertical.get(vt).push({top:et,gap:M.gap})}});else{var B=new Map,V=new Map;this.constraints.relativePlacementConstraint.forEach(function(M){if(M.left){var b=L.has(M.left)?L.get(M.left):M.left,q=L.has(M.right)?L.get(M.right):M.right;B.has(b)?B.get(b).push(q):B.set(b,[q]),B.has(q)?B.get(q).push(b):B.set(q,[b])}else{var et=O.has(M.top)?O.get(M.top):M.top,vt=O.has(M.bottom)?O.get(M.bottom):M.bottom;V.has(et)?V.get(et).push(vt):V.set(et,[vt]),V.has(vt)?V.get(vt).push(et):V.set(vt,[et])}});var z=function(M,b){var q=[],et=[],vt=new Q,$=new Set,Mt=0;return M.forEach(function(J,nt){if(!$.has(nt)){q[Mt]=[],et[Mt]=!1;var mt=nt;for(vt.push(mt),$.add(mt),q[Mt].push(mt);vt.length!=0;){mt=vt.shift(),b.has(mt)&&(et[Mt]=!0);var ht=M.get(mt);ht.forEach(function(xt){$.has(xt)||(vt.push(xt),$.add(xt),q[Mt].push(xt))})}Mt++}}),{components:q,isFixed:et}},j=z(B,r.fixedNodesOnHorizontal);this.componentsOnHorizontal=j.components,this.fixedComponentsOnHorizontal=j.isFixed;var F=z(V,r.fixedNodesOnVertical);this.componentsOnVertical=F.components,this.fixedComponentsOnVertical=F.isFixed}}},C.prototype.updateDisplacements=function(){var r=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(F){var M=r.idToNodeMap.get(F.nodeId);M.displacementX=0,M.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var E=this.constraints.alignmentConstraint.vertical,p=0;p1){var O;for(O=0;Ov&&(v=Math.floor(L.y)),R=Math.floor(L.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new y(N.WORLD_CENTER_X-L.x/2,N.WORLD_CENTER_Y-L.y/2))},C.radialLayout=function(r,E,p){var v=Math.max(this.maxDiagonalInTree(r),l.DEFAULT_RADIAL_SEPARATION);C.branchRadialLayout(E,null,0,359,0,v);var m=k.calculateBounds(r),R=new X;R.setDeviceOrgX(m.getMinX()),R.setDeviceOrgY(m.getMinY()),R.setWorldOrgX(p.x),R.setWorldOrgY(p.y);for(var L=0;L1;){var q=b[0];b.splice(0,1);var et=V.indexOf(q);et>=0&&V.splice(et,1),F--,z--}E!=null?M=(V.indexOf(b[0])+1)%F:M=0;for(var vt=Math.abs(v-p)/z,$=M;j!=z;$=++$%F){var Mt=V[$].getOtherEnd(r);if(Mt!=E){var J=(p+j*vt)%360,nt=(J+vt)%360;C.branchRadialLayout(Mt,r,J,nt,m+R,R),j++}}},C.maxDiagonalInTree=function(r){for(var E=S.MIN_VALUE,p=0;pE&&(E=m)}return E},C.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},C.prototype.groupZeroDegreeMembers=function(){var r=this,E={};this.memberGroups={},this.idToDummyNode={};for(var p=[],v=this.graphManager.getAllNodes(),m=0;m"u"&&(E[O]=[]),E[O]=E[O].concat(R)}Object.keys(E).forEach(function(P){if(E[P].length>1){var G="DummyCompound_"+P;r.memberGroups[G]=E[P];var B=E[P][0].getParent(),V=new t(r.graphManager);V.id=G,V.paddingLeft=B.paddingLeft||0,V.paddingRight=B.paddingRight||0,V.paddingBottom=B.paddingBottom||0,V.paddingTop=B.paddingTop||0,r.idToDummyNode[G]=V;var z=r.getGraphManager().add(r.newGraph(),V),j=B.getChild();j.add(V);for(var F=0;Fm?(v.rect.x-=(v.labelWidth-m)/2,v.setWidth(v.labelWidth),v.labelMarginLeft=(v.labelWidth-m)/2):v.labelPosHorizontal=="right"&&v.setWidth(m+v.labelWidth)),v.labelHeight&&(v.labelPosVertical=="top"?(v.rect.y-=v.labelHeight,v.setHeight(R+v.labelHeight),v.labelMarginTop=v.labelHeight):v.labelPosVertical=="center"&&v.labelHeight>R?(v.rect.y-=(v.labelHeight-R)/2,v.setHeight(v.labelHeight),v.labelMarginTop=(v.labelHeight-R)/2):v.labelPosVertical=="bottom"&&v.setHeight(R+v.labelHeight))}})},C.prototype.repopulateCompounds=function(){for(var r=this.compoundOrder.length-1;r>=0;r--){var E=this.compoundOrder[r],p=E.id,v=E.paddingLeft,m=E.paddingTop,R=E.labelMarginLeft,L=E.labelMarginTop;this.adjustLocations(this.tiledMemberPack[p],E.rect.x,E.rect.y,v,m,R,L)}},C.prototype.repopulateZeroDegreeMembers=function(){var r=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(p){var v=r.idToDummyNode[p],m=v.paddingLeft,R=v.paddingTop,L=v.labelMarginLeft,O=v.labelMarginTop;r.adjustLocations(E[p],v.rect.x,v.rect.y,m,R,L,O)})},C.prototype.getToBeTiled=function(r){var E=r.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var p=r.getChild();if(p==null)return this.toBeTiled[E]=!1,!1;for(var v=p.getNodes(),m=0;m0)return this.toBeTiled[E]=!1,!1;if(R.getChild()==null){this.toBeTiled[R.id]=!1;continue}if(!this.getToBeTiled(R))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},C.prototype.getNodeDegree=function(r){r.id;for(var E=r.getEdges(),p=0,v=0;vB&&(B=z.rect.height)}p+=B+r.verticalPadding}},C.prototype.tileCompoundMembers=function(r,E){var p=this;this.tiledMemberPack=[],Object.keys(r).forEach(function(v){var m=E[v];if(p.tiledMemberPack[v]=p.tileNodes(r[v],m.paddingLeft+m.paddingRight),m.rect.width=p.tiledMemberPack[v].width,m.rect.height=p.tiledMemberPack[v].height,m.setCenter(p.tiledMemberPack[v].centerX,p.tiledMemberPack[v].centerY),m.labelMarginLeft=0,m.labelMarginTop=0,l.NODE_DIMENSIONS_INCLUDE_LABELS){var R=m.rect.width,L=m.rect.height;m.labelWidth&&(m.labelPosHorizontal=="left"?(m.rect.x-=m.labelWidth,m.setWidth(R+m.labelWidth),m.labelMarginLeft=m.labelWidth):m.labelPosHorizontal=="center"&&m.labelWidth>R?(m.rect.x-=(m.labelWidth-R)/2,m.setWidth(m.labelWidth),m.labelMarginLeft=(m.labelWidth-R)/2):m.labelPosHorizontal=="right"&&m.setWidth(R+m.labelWidth)),m.labelHeight&&(m.labelPosVertical=="top"?(m.rect.y-=m.labelHeight,m.setHeight(L+m.labelHeight),m.labelMarginTop=m.labelHeight):m.labelPosVertical=="center"&&m.labelHeight>L?(m.rect.y-=(m.labelHeight-L)/2,m.setHeight(m.labelHeight),m.labelMarginTop=(m.labelHeight-L)/2):m.labelPosVertical=="bottom"&&m.setHeight(L+m.labelHeight))}})},C.prototype.tileNodes=function(r,E){var p=this.tileNodesByFavoringDim(r,E,!0),v=this.tileNodesByFavoringDim(r,E,!1),m=this.getOrgRatio(p),R=this.getOrgRatio(v),L;return RO&&(O=F.getWidth())});var P=R/m,G=L/m,B=Math.pow(p-v,2)+4*(P+v)*(G+p)*m,V=(v-p+Math.sqrt(B))/(2*(P+v)),z;E?(z=Math.ceil(V),z==V&&z++):z=Math.floor(V);var j=z*(P+v)-v;return O>j&&(j=O),j+=v*2,j},C.prototype.tileNodesByFavoringDim=function(r,E,p){var v=l.TILING_PADDING_VERTICAL,m=l.TILING_PADDING_HORIZONTAL,R=l.TILING_COMPARE_BY,L={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:v,horizontalPadding:m,centerX:0,centerY:0};R&&(L.idealRowWidth=this.calcIdealRowWidth(r,p));var O=function(F){return F.rect.width*F.rect.height},P=function(F,M){return O(M)-O(F)};r.sort(function(F,M){var b=P;return L.idealRowWidth?(b=R,b(F.id,M.id)):b(F,M)});for(var G=0,B=0,V=0;V0&&(L+=r.horizontalPadding),r.rowWidth[p]=L,r.width0&&(O+=r.verticalPadding);var P=0;O>r.rowHeight[p]&&(P=r.rowHeight[p],r.rowHeight[p]=O,P=r.rowHeight[p]-P),r.height+=P,r.rows[p].push(E)},C.prototype.getShortestRowIndex=function(r){for(var E=-1,p=Number.MAX_VALUE,v=0;vp&&(E=v,p=r.rowWidth[v]);return E},C.prototype.canAddHorizontal=function(r,E,p){if(r.idealRowWidth){var v=r.rows.length-1,m=r.rowWidth[v];return m+E+r.horizontalPadding<=r.idealRowWidth}var R=this.getShortestRowIndex(r);if(R<0)return!0;var L=r.rowWidth[R];if(L+r.horizontalPadding+E<=r.width)return!0;var O=0;r.rowHeight[R]0&&(O=p+r.verticalPadding-r.rowHeight[R]);var P;r.width-L>=E+r.horizontalPadding?P=(r.height+O)/(L+E+r.horizontalPadding):P=(r.height+O)/r.width,O=p+r.verticalPadding;var G;return r.widthR&&E!=p){v.splice(-1,1),r.rows[p].push(m),r.rowWidth[E]=r.rowWidth[E]-R,r.rowWidth[p]=r.rowWidth[p]+R,r.width=r.rowWidth[instance.getLongestRowIndex(r)];for(var L=Number.MIN_VALUE,O=0;OL&&(L=v[O].height);E>0&&(L+=r.verticalPadding);var P=r.rowHeight[E]+r.rowHeight[p];r.rowHeight[E]=L,r.rowHeight[p]0)for(var j=m;j<=R;j++)z[0]+=this.grid[j][L-1].length+this.grid[j][L].length-1;if(R0)for(var j=L;j<=O;j++)z[3]+=this.grid[m-1][j].length+this.grid[m][j].length-1;for(var F=S.MAX_VALUE,M,b,q=0;q{var s=e(551).FDLayoutNode,n=e(551).IMath;function f(a,l,g,h){s.call(this,a,l,g,h)}f.prototype=Object.create(s.prototype);for(var t in s)f[t]=s[t];f.prototype.calculateDisplacement=function(){var a=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=a.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=a.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=a.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=a.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>a.coolingFactor*a.maxNodeDisplacement&&(this.displacementX=a.coolingFactor*a.maxNodeDisplacement*n.sign(this.displacementX)),Math.abs(this.displacementY)>a.coolingFactor*a.maxNodeDisplacement&&(this.displacementY=a.coolingFactor*a.maxNodeDisplacement*n.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(a,l){for(var g=this.getChild().getNodes(),h,N=0;N{function s(g){if(Array.isArray(g)){for(var h=0,N=Array(g.length);h0){var st=0;at.forEach(function(ut){D=="horizontal"?(tt.set(ut,c.has(ut)?y[c.get(ut)]:K.get(ut)),st+=tt.get(ut)):(tt.set(ut,c.has(ut)?A[c.get(ut)]:K.get(ut)),st+=tt.get(ut))}),st=st/at.length,dt.forEach(function(ut){W.has(ut)||tt.set(ut,st)})}else{var _t=0;dt.forEach(function(ut){D=="horizontal"?_t+=c.has(ut)?y[c.get(ut)]:K.get(ut):_t+=c.has(ut)?A[c.get(ut)]:K.get(ut)}),_t=_t/dt.length,dt.forEach(function(ut){tt.set(ut,_t)})}});for(var Nt=function(){var dt=rt.shift(),at=w.get(dt);at.forEach(function(st){if(tt.get(st.id)ut&&(ut=Yt),Qt<_t&&(_t=Qt),Qt>Rt&&(Rt=Qt)}}catch(Zt){wt=!0,At=Zt}finally{try{!Gt&&Xt.return&&Xt.return()}finally{if(wt)throw At}}var he=(st+ut)/2-(_t+Rt)/2,re=!0,Kt=!1,Jt=void 0;try{for(var jt=dt[Symbol.iterator](),te;!(re=(te=jt.next()).done);re=!0){var oe=te.value;tt.set(oe,tt.get(oe)+he)}}catch(Zt){Kt=!0,Jt=Zt}finally{try{!re&&jt.return&&jt.return()}finally{if(Kt)throw Jt}}})}return tt},ot=function(w){var D=0,W=0,K=0,Z=0;if(w.forEach(function(gt){gt.left?y[c.get(gt.left)]-y[c.get(gt.right)]>=0?D++:W++:A[c.get(gt.top)]-A[c.get(gt.bottom)]>=0?K++:Z++}),D>W&&K>Z)for(var pt=0;ptW)for(var lt=0;ltZ)for(var tt=0;tt1)h.fixedNodeConstraint.forEach(function(w,D){v[D]=[w.position.x,w.position.y],m[D]=[y[c.get(w.nodeId)],A[c.get(w.nodeId)]]}),R=!0;else if(h.alignmentConstraint)(function(){var w=0;if(h.alignmentConstraint.vertical){for(var D=h.alignmentConstraint.vertical,W=function(tt){var gt=new Set;D[tt].forEach(function(yt){gt.add(yt)});var rt=new Set([].concat(s(gt)).filter(function(yt){return O.has(yt)})),Nt=void 0;rt.size>0?Nt=y[c.get(rt.values().next().value)]:Nt=Q(gt).x,D[tt].forEach(function(yt){v[w]=[Nt,A[c.get(yt)]],m[w]=[y[c.get(yt)],A[c.get(yt)]],w++})},K=0;K0?Nt=y[c.get(rt.values().next().value)]:Nt=Q(gt).y,Z[tt].forEach(function(yt){v[w]=[y[c.get(yt)],Nt],m[w]=[y[c.get(yt)],A[c.get(yt)]],w++})},lt=0;ltV&&(V=B[j].length,z=j);if(V0){var It={x:0,y:0};h.fixedNodeConstraint.forEach(function(w,D){var W={x:y[c.get(w.nodeId)],y:A[c.get(w.nodeId)]},K=w.position,Z=X(K,W);It.x+=Z.x,It.y+=Z.y}),It.x/=h.fixedNodeConstraint.length,It.y/=h.fixedNodeConstraint.length,y.forEach(function(w,D){y[D]+=It.x}),A.forEach(function(w,D){A[D]+=It.y}),h.fixedNodeConstraint.forEach(function(w){y[c.get(w.nodeId)]=w.position.x,A[c.get(w.nodeId)]=w.position.y})}if(h.alignmentConstraint){if(h.alignmentConstraint.vertical)for(var Vt=h.alignmentConstraint.vertical,bt=function(w){var D=new Set;Vt[w].forEach(function(Z){D.add(Z)});var W=new Set([].concat(s(D)).filter(function(Z){return O.has(Z)})),K=void 0;W.size>0?K=y[c.get(W.values().next().value)]:K=Q(D).x,D.forEach(function(Z){O.has(Z)||(y[c.get(Z)]=K)})},St=0;St0?K=A[c.get(W.values().next().value)]:K=Q(D).y,D.forEach(function(Z){O.has(Z)||(A[c.get(Z)]=K)})},Ft=0;Ft{o.exports=x})},T={};function u(o){var i=T[o];if(i!==void 0)return i.exports;var e=T[o]={exports:{}};return Y[o](e,e.exports,u),e.exports}var d=u(45);return d})()})})(pe)),pe.exports}var mi=fe.exports,Me;function yi(){return Me||(Me=1,(function(I,H){(function(x,Y){I.exports=Y(vi())})(mi,function(x){return(()=>{var Y={658:(o=>{o.exports=Object.assign!=null?Object.assign.bind(Object):function(i){for(var e=arguments.length,s=Array(e>1?e-1:0),n=1;n{var s=(function(){function t(a,l){var g=[],h=!0,N=!1,c=void 0;try{for(var y=a[Symbol.iterator](),A;!(h=(A=y.next()).done)&&(g.push(A.value),!(l&&g.length===l));h=!0);}catch(_){N=!0,c=_}finally{try{!h&&y.return&&y.return()}finally{if(N)throw c}}return g}return function(a,l){if(Array.isArray(a))return a;if(Symbol.iterator in Object(a))return t(a,l);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),n=e(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(t){for(var a={},l=0;l0&&v.merge(O)});for(var m=0;m1){A=c[0],_=A.connectedEdges().length,c.forEach(function(v){v.connectedEdges().length<_&&(_=v.connectedEdges().length,A=v)}),k.push(A.id());var p=t.collection();p.merge(c[0]),c.forEach(function(v){p.merge(v)}),c=[],l=l.difference(p),U++}};do Q();while(!S);return g&&k.length>0&&g.set("dummy"+(g.size+1),k),X},f.relocateComponent=function(t,a,l){if(!l.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,h=Number.NEGATIVE_INFINITY,N=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY;if(l.quality=="draft"){var y=!0,A=!1,_=void 0;try{for(var S=a.nodeIndexes[Symbol.iterator](),U;!(y=(U=S.next()).done);y=!0){var k=U.value,X=s(k,2),Q=X[0],C=X[1],ot=l.cy.getElementById(Q);if(ot){var r=ot.boundingBox(),E=a.xCoords[C]-r.w/2,p=a.xCoords[C]+r.w/2,v=a.yCoords[C]-r.h/2,m=a.yCoords[C]+r.h/2;Eh&&(h=p),vc&&(c=m)}}}catch(G){A=!0,_=G}finally{try{!y&&S.return&&S.return()}finally{if(A)throw _}}var R=t.x-(h+g)/2,L=t.y-(c+N)/2;a.xCoords=a.xCoords.map(function(G){return G+R}),a.yCoords=a.yCoords.map(function(G){return G+L})}else{Object.keys(a).forEach(function(G){var B=a[G],V=B.getRect().x,z=B.getRect().x+B.getRect().width,j=B.getRect().y,F=B.getRect().y+B.getRect().height;Vh&&(h=z),jc&&(c=F)});var O=t.x-(h+g)/2,P=t.y-(c+N)/2;Object.keys(a).forEach(function(G){var B=a[G];B.setCenter(B.getCenterX()+O,B.getCenterY()+P)})}}},f.calcBoundingBox=function(t,a,l,g){for(var h=Number.MAX_SAFE_INTEGER,N=Number.MIN_SAFE_INTEGER,c=Number.MAX_SAFE_INTEGER,y=Number.MIN_SAFE_INTEGER,A=void 0,_=void 0,S=void 0,U=void 0,k=t.descendants().not(":parent"),X=k.length,Q=0;QA&&(h=A),N<_&&(N=_),c>S&&(c=S),y{var s=e(548),n=e(140).CoSELayout,f=e(140).CoSENode,t=e(140).layoutBase.PointD,a=e(140).layoutBase.DimensionD,l=e(140).layoutBase.LayoutConstants,g=e(140).layoutBase.FDLayoutConstants,h=e(140).CoSEConstants,N=function(c,y){var A=c.cy,_=c.eles,S=_.nodes(),U=_.edges(),k=void 0,X=void 0,Q=void 0,C={};c.randomize&&(k=y.nodeIndexes,X=y.xCoords,Q=y.yCoords);var ot=function(O){return typeof O=="function"},r=function(O,P){return ot(O)?O(P):O},E=s.calcParentsWithoutChildren(A,_),p=function O(P,G,B,V){for(var z=G.length,j=0;j0){var vt=void 0;vt=B.getGraphManager().add(B.newGraph(),b),O(vt,M,B,V)}}},v=function(O,P,G){for(var B=0,V=0,z=0;z0?h.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=B/V:ot(c.idealEdgeLength)?h.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:h.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=c.idealEdgeLength,h.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,h.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},m=function(O,P){P.fixedNodeConstraint&&(O.constraints.fixedNodeConstraint=P.fixedNodeConstraint),P.alignmentConstraint&&(O.constraints.alignmentConstraint=P.alignmentConstraint),P.relativePlacementConstraint&&(O.constraints.relativePlacementConstraint=P.relativePlacementConstraint)};c.nestingFactor!=null&&(h.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=c.nestingFactor),c.gravity!=null&&(h.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=c.gravity),c.numIter!=null&&(h.MAX_ITERATIONS=g.MAX_ITERATIONS=c.numIter),c.gravityRange!=null&&(h.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=c.gravityRange),c.gravityCompound!=null&&(h.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=c.gravityCompound),c.gravityRangeCompound!=null&&(h.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=c.gravityRangeCompound),c.initialEnergyOnIncremental!=null&&(h.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=c.initialEnergyOnIncremental),c.tilingCompareBy!=null&&(h.TILING_COMPARE_BY=c.tilingCompareBy),c.quality=="proof"?l.QUALITY=2:l.QUALITY=0,h.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=l.NODE_DIMENSIONS_INCLUDE_LABELS=c.nodeDimensionsIncludeLabels,h.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=l.DEFAULT_INCREMENTAL=!c.randomize,h.ANIMATE=g.ANIMATE=l.ANIMATE=c.animate,h.TILE=c.tile,h.TILING_PADDING_VERTICAL=typeof c.tilingPaddingVertical=="function"?c.tilingPaddingVertical.call():c.tilingPaddingVertical,h.TILING_PADDING_HORIZONTAL=typeof c.tilingPaddingHorizontal=="function"?c.tilingPaddingHorizontal.call():c.tilingPaddingHorizontal,h.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=l.DEFAULT_INCREMENTAL=!0,h.PURE_INCREMENTAL=!c.randomize,l.DEFAULT_UNIFORM_LEAF_NODE_SIZES=c.uniformNodeDimensions,c.step=="transformed"&&(h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!1,h.APPLY_LAYOUT=!1),c.step=="enforced"&&(h.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!1),c.step=="cose"&&(h.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,h.ENFORCE_CONSTRAINTS=!1,h.APPLY_LAYOUT=!0),c.step=="all"&&(c.randomize?h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:h.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0),c.fixedNodeConstraint||c.alignmentConstraint||c.relativePlacementConstraint?h.TREE_REDUCTION_ON_INCREMENTAL=!1:h.TREE_REDUCTION_ON_INCREMENTAL=!0;var R=new n,L=R.newGraphManager();return p(L.addRoot(),s.getTopMostNodes(S),R,c),v(R,L,U),m(R,c),R.runLayout(),C};o.exports={coseLayout:N}}),212:((o,i,e)=>{var s=(function(){function y(A,_){for(var S=0;S<_.length;S++){var U=_[S];U.enumerable=U.enumerable||!1,U.configurable=!0,"value"in U&&(U.writable=!0),Object.defineProperty(A,U.key,U)}}return function(A,_,S){return _&&y(A.prototype,_),S&&y(A,S),A}})();function n(y,A){if(!(y instanceof A))throw new TypeError("Cannot call a class as a function")}var f=e(658),t=e(548),a=e(657),l=a.spectralLayout,g=e(816),h=g.coseLayout,N=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:function(y){return 4500},idealEdgeLength:function(y){return 50},edgeElasticity:function(y){return .45},nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:function(){},stop:function(){}}),c=(function(){function y(A){n(this,y),this.options=f({},N,A)}return s(y,[{key:"run",value:function(){var A=this,_=this.options,S=_.cy,U=_.eles,k=[],X=[],Q=void 0,C=[];_.fixedNodeConstraint&&(!Array.isArray(_.fixedNodeConstraint)||_.fixedNodeConstraint.length==0)&&(_.fixedNodeConstraint=void 0),_.alignmentConstraint&&(_.alignmentConstraint.vertical&&(!Array.isArray(_.alignmentConstraint.vertical)||_.alignmentConstraint.vertical.length==0)&&(_.alignmentConstraint.vertical=void 0),_.alignmentConstraint.horizontal&&(!Array.isArray(_.alignmentConstraint.horizontal)||_.alignmentConstraint.horizontal.length==0)&&(_.alignmentConstraint.horizontal=void 0)),_.relativePlacementConstraint&&(!Array.isArray(_.relativePlacementConstraint)||_.relativePlacementConstraint.length==0)&&(_.relativePlacementConstraint=void 0);var ot=_.fixedNodeConstraint||_.alignmentConstraint||_.relativePlacementConstraint;ot&&(_.tile=!1,_.packComponents=!1);var r=void 0,E=!1;if(S.layoutUtilities&&_.packComponents&&(r=S.layoutUtilities("get"),r||(r=S.layoutUtilities()),E=!0),U.nodes().length>0)if(E){var p=t.getTopMostNodes(_.eles.nodes());if(Q=t.connectComponents(S,_.eles,p),Q.forEach(function(J){var nt=J.boundingBox();C.push({x:nt.x1+nt.w/2,y:nt.y1+nt.h/2})}),_.randomize&&Q.forEach(function(J){_.eles=J,k.push(l(_))}),_.quality=="default"||_.quality=="proof"){var v=S.collection();if(_.tile){var m=new Map,R=[],L=[],O=0,P={nodeIndexes:m,xCoords:R,yCoords:L},G=[];if(Q.forEach(function(J,nt){J.edges().length==0&&(J.nodes().forEach(function(mt,ht){v.merge(J.nodes()[ht]),mt.isParent()||(P.nodeIndexes.set(J.nodes()[ht].id(),O++),P.xCoords.push(J.nodes()[0].position().x),P.yCoords.push(J.nodes()[0].position().y))}),G.push(nt))}),v.length>1){var B=v.boundingBox();C.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),Q.push(v),k.push(P);for(var V=G.length-1;V>=0;V--)Q.splice(G[V],1),k.splice(G[V],1),C.splice(G[V],1)}}Q.forEach(function(J,nt){_.eles=J,X.push(h(_,k[nt])),t.relocateComponent(C[nt],X[nt],_)})}else Q.forEach(function(J,nt){t.relocateComponent(C[nt],k[nt],_)});var z=new Set;if(Q.length>1){var j=[],F=U.filter(function(J){return J.css("display")=="none"});Q.forEach(function(J,nt){var mt=void 0;if(_.quality=="draft"&&(mt=k[nt].nodeIndexes),J.nodes().not(F).length>0){var ht={};ht.edges=[],ht.nodes=[];var xt=void 0;J.nodes().not(F).forEach(function(Lt){if(_.quality=="draft")if(!Lt.isParent())xt=mt.get(Lt.id()),ht.nodes.push({x:k[nt].xCoords[xt]-Lt.boundingbox().w/2,y:k[nt].yCoords[xt]-Lt.boundingbox().h/2,width:Lt.boundingbox().w,height:Lt.boundingbox().h});else{var Tt=t.calcBoundingBox(Lt,k[nt].xCoords,k[nt].yCoords,mt);ht.nodes.push({x:Tt.topLeftX,y:Tt.topLeftY,width:Tt.width,height:Tt.height})}else X[nt][Lt.id()]&&ht.nodes.push({x:X[nt][Lt.id()].getLeft(),y:X[nt][Lt.id()].getTop(),width:X[nt][Lt.id()].getWidth(),height:X[nt][Lt.id()].getHeight()})}),J.edges().forEach(function(Lt){var Tt=Lt.source(),It=Lt.target();if(Tt.css("display")!="none"&&It.css("display")!="none")if(_.quality=="draft"){var Vt=mt.get(Tt.id()),bt=mt.get(It.id()),St=[],kt=[];if(Tt.isParent()){var Bt=t.calcBoundingBox(Tt,k[nt].xCoords,k[nt].yCoords,mt);St.push(Bt.topLeftX+Bt.width/2),St.push(Bt.topLeftY+Bt.height/2)}else St.push(k[nt].xCoords[Vt]),St.push(k[nt].yCoords[Vt]);if(It.isParent()){var Ft=t.calcBoundingBox(It,k[nt].xCoords,k[nt].yCoords,mt);kt.push(Ft.topLeftX+Ft.width/2),kt.push(Ft.topLeftY+Ft.height/2)}else kt.push(k[nt].xCoords[bt]),kt.push(k[nt].yCoords[bt]);ht.edges.push({startX:St[0],startY:St[1],endX:kt[0],endY:kt[1]})}else X[nt][Tt.id()]&&X[nt][It.id()]&&ht.edges.push({startX:X[nt][Tt.id()].getCenterX(),startY:X[nt][Tt.id()].getCenterY(),endX:X[nt][It.id()].getCenterX(),endY:X[nt][It.id()].getCenterY()})}),ht.nodes.length>0&&(j.push(ht),z.add(nt))}});var M=r.packComponents(j,_.randomize).shifts;if(_.quality=="draft")k.forEach(function(J,nt){var mt=J.xCoords.map(function(xt){return xt+M[nt].dx}),ht=J.yCoords.map(function(xt){return xt+M[nt].dy});J.xCoords=mt,J.yCoords=ht});else{var b=0;z.forEach(function(J){Object.keys(X[J]).forEach(function(nt){var mt=X[J][nt];mt.setCenter(mt.getCenterX()+M[b].dx,mt.getCenterY()+M[b].dy)}),b++})}}}else{var q=_.eles.boundingBox();if(C.push({x:q.x1+q.w/2,y:q.y1+q.h/2}),_.randomize){var et=l(_);k.push(et)}_.quality=="default"||_.quality=="proof"?(X.push(h(_,k[0])),t.relocateComponent(C[0],X[0],_)):t.relocateComponent(C[0],k[0],_)}var vt=function(J,nt){if(_.quality=="default"||_.quality=="proof"){typeof J=="number"&&(J=nt);var mt=void 0,ht=void 0,xt=J.data("id");return X.forEach(function(Tt){xt in Tt&&(mt={x:Tt[xt].getRect().getCenterX(),y:Tt[xt].getRect().getCenterY()},ht=Tt[xt])}),_.nodeDimensionsIncludeLabels&&(ht.labelWidth&&(ht.labelPosHorizontal=="left"?mt.x+=ht.labelWidth/2:ht.labelPosHorizontal=="right"&&(mt.x-=ht.labelWidth/2)),ht.labelHeight&&(ht.labelPosVertical=="top"?mt.y+=ht.labelHeight/2:ht.labelPosVertical=="bottom"&&(mt.y-=ht.labelHeight/2))),mt==null&&(mt={x:J.position("x"),y:J.position("y")}),{x:mt.x,y:mt.y}}else{var Lt=void 0;return k.forEach(function(Tt){var It=Tt.nodeIndexes.get(J.id());It!=null&&(Lt={x:Tt.xCoords[It],y:Tt.yCoords[It]})}),Lt==null&&(Lt={x:J.position("x"),y:J.position("y")}),{x:Lt.x,y:Lt.y}}};if(_.quality=="default"||_.quality=="proof"||_.randomize){var $=t.calcParentsWithoutChildren(S,U),Mt=U.filter(function(J){return J.css("display")=="none"});_.eles=U.not(Mt),U.nodes().not(":parent").not(Mt).layoutPositions(A,_,vt),$.length>0&&$.forEach(function(J){J.position(vt(J))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")}}]),y})();o.exports=c}),657:((o,i,e)=>{var s=e(548),n=e(140).layoutBase.Matrix,f=e(140).layoutBase.SVD,t=function(a){var l=a.cy,g=a.eles,h=g.nodes(),N=g.nodes(":parent"),c=new Map,y=new Map,A=new Map,_=[],S=[],U=[],k=[],X=[],Q=[],C=[],ot=[],r=void 0,E=1e8,p=1e-9,v=a.piTol,m=a.samplingType,R=a.nodeSeparation,L=void 0,O=function(){for(var ct=0,w=0,D=!1;w=K;){pt=W[K++];for(var yt=_[pt],Ot=0;Otgt&&(gt=X[at],rt=at)}return rt},G=function(ct){var w=void 0;if(ct){w=Math.floor(Math.random()*r);for(var D=0;D=1)break;tt=lt}for(var Nt=0;Nt=1)break;tt=lt}for(var Ot=0;Ot0&&(D.isParent()?_[w].push(A.get(D.id())):_[w].push(D.id()))})});var Mt=function(ct){var w=y.get(ct),D=void 0;c.get(ct).forEach(function(W){l.getElementById(W).isParent()?D=A.get(W):D=W,_[w].push(D),_[y.get(D)].push(ct)})},J=!0,nt=!1,mt=void 0;try{for(var ht=c.keys()[Symbol.iterator](),xt;!(J=(xt=ht.next()).done);J=!0){var Lt=xt.value;Mt(Lt)}}catch(ct){nt=!0,mt=ct}finally{try{!J&&ht.return&&ht.return()}finally{if(nt)throw mt}}r=y.size;var Tt=void 0;if(r>2){L=r{var s=e(212),n=function(f){f&&f("layout","fcose",s)};typeof cytoscape<"u"&&n(cytoscape),o.exports=n}),140:(o=>{o.exports=x})},T={};function u(o){var i=T[o];if(i!==void 0)return i.exports;var e=T[o]={exports:{}};return Y[o](e,e.exports,u),e.exports}var d=u(579);return d})()})})(fe)),fe.exports}var Ei=yi();const Ni=li(Ei);var Re={L:"left",R:"right",T:"top",B:"bottom"},De={L:it(I=>`${I},${I/2} 0,${I} 0,0`,"L"),R:it(I=>`0,${I/2} ${I},0 ${I},${I}`,"R"),T:it(I=>`0,0 ${I},0 ${I/2},${I}`,"T"),B:it(I=>`${I/2},0 ${I},${I} 0,${I}`,"B")},ae={L:it((I,H)=>I-H+2,"L"),R:it((I,H)=>I-2,"R"),T:it((I,H)=>I-H+2,"T"),B:it((I,H)=>I-2,"B")},Ti=it(function(I){return Ht(I)?I==="L"?"R":"L":I==="T"?"B":"T"},"getOppositeArchitectureDirection"),be=it(function(I){const H=I;return H==="L"||H==="R"||H==="T"||H==="B"},"isArchitectureDirection"),Ht=it(function(I){const H=I;return H==="L"||H==="R"},"isArchitectureDirectionX"),qt=it(function(I){const H=I;return H==="T"||H==="B"},"isArchitectureDirectionY"),Te=it(function(I,H){const x=Ht(I)&&qt(H),Y=qt(I)&&Ht(H);return x||Y},"isArchitectureDirectionXY"),Ai=it(function(I){const H=I[0],x=I[1],Y=Ht(H)&&qt(x),T=qt(H)&&Ht(x);return Y||T},"isArchitecturePairXY"),Ii=it(function(I){return I!=="LL"&&I!=="RR"&&I!=="TT"&&I!=="BB"},"isValidArchitectureDirectionPair"),me=it(function(I,H){const x=`${I}${H}`;return Ii(x)?x:void 0},"getArchitectureDirectionPair"),_i=it(function([I,H],x){const Y=x[0],T=x[1];return Ht(Y)?qt(T)?[I+(Y==="L"?-1:1),H+(T==="T"?1:-1)]:[I+(Y==="L"?-1:1),H]:Ht(T)?[I+(T==="L"?1:-1),H+(Y==="T"?1:-1)]:[I,H+(Y==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),wi=it(function(I){return I==="LT"||I==="TL"?[1,1]:I==="BL"||I==="LB"?[1,-1]:I==="BR"||I==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),xi=it(function(I,H){return Te(I,H)?"bend":Ht(I)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Li=it(function(I){return I.type==="service"},"isArchitectureService"),Ci=it(function(I){return I.type==="junction"},"isArchitectureJunction"),Pe=it(I=>I.data(),"edgeData"),ie=it(I=>I.data(),"nodeData"),ke=ni.architecture,Et=new ci(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:ke,dataStructures:void 0,elements:{}})),Oi=it(()=>{Et.reset(),oi()},"clear"),Mi=it(function({id:I,icon:H,in:x,title:Y,iconText:T}){if(Et.records.registeredIds[I]!==void 0)throw new Error(`The service id [${I}] is already in use by another ${Et.records.registeredIds[I]}`);if(x!==void 0){if(I===x)throw new Error(`The service [${I}] cannot be placed within itself`);if(Et.records.registeredIds[x]===void 0)throw new Error(`The service [${I}]'s parent does not exist. Please make sure the parent is created before this service`);if(Et.records.registeredIds[x]==="node")throw new Error(`The service [${I}]'s parent is not a group`)}Et.records.registeredIds[I]="node",Et.records.nodes[I]={id:I,type:"service",icon:H,iconText:T,title:Y,edges:[],in:x}},"addService"),Ri=it(()=>Object.values(Et.records.nodes).filter(Li),"getServices"),Di=it(function({id:I,in:H}){Et.records.registeredIds[I]="node",Et.records.nodes[I]={id:I,type:"junction",edges:[],in:H}},"addJunction"),bi=it(()=>Object.values(Et.records.nodes).filter(Ci),"getJunctions"),Si=it(()=>Object.values(Et.records.nodes),"getNodes"),ye=it(I=>Et.records.nodes[I],"getNode"),Fi=it(function({id:I,icon:H,in:x,title:Y}){if(Et.records.registeredIds[I]!==void 0)throw new Error(`The group id [${I}] is already in use by another ${Et.records.registeredIds[I]}`);if(x!==void 0){if(I===x)throw new Error(`The group [${I}] cannot be placed within itself`);if(Et.records.registeredIds[x]===void 0)throw new Error(`The group [${I}]'s parent does not exist. Please make sure the parent is created before this group`);if(Et.records.registeredIds[x]==="node")throw new Error(`The group [${I}]'s parent is not a group`)}Et.records.registeredIds[I]="group",Et.records.groups[I]={id:I,icon:H,title:Y,in:x}},"addGroup"),Pi=it(()=>Object.values(Et.records.groups),"getGroups"),ki=it(function({lhsId:I,rhsId:H,lhsDir:x,rhsDir:Y,lhsInto:T,rhsInto:u,lhsGroup:d,rhsGroup:o,title:i}){if(!be(x))throw new Error(`Invalid direction given for left hand side of edge ${I}--${H}. Expected (L,R,T,B) got ${x}`);if(!be(Y))throw new Error(`Invalid direction given for right hand side of edge ${I}--${H}. Expected (L,R,T,B) got ${Y}`);if(Et.records.nodes[I]===void 0&&Et.records.groups[I]===void 0)throw new Error(`The left-hand id [${I}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(Et.records.nodes[H]===void 0&&Et.records.groups[I]===void 0)throw new Error(`The right-hand id [${H}] does not yet exist. Please create the service/group before declaring an edge to it.`);const e=Et.records.nodes[I].in,s=Et.records.nodes[H].in;if(d&&e&&s&&e==s)throw new Error(`The left-hand id [${I}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(o&&e&&s&&e==s)throw new Error(`The right-hand id [${H}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);const n={lhsId:I,lhsDir:x,lhsInto:T,lhsGroup:d,rhsId:H,rhsDir:Y,rhsInto:u,rhsGroup:o,title:i};Et.records.edges.push(n),Et.records.nodes[I]&&Et.records.nodes[H]&&(Et.records.nodes[I].edges.push(Et.records.edges[Et.records.edges.length-1]),Et.records.nodes[H].edges.push(Et.records.edges[Et.records.edges.length-1]))},"addEdge"),Gi=it(()=>Et.records.edges,"getEdges"),Yi=it(()=>{if(Et.records.dataStructures===void 0){const I={},H=Object.entries(Et.records.nodes).reduce((o,[i,e])=>(o[i]=e.edges.reduce((s,n)=>{const f=ye(n.lhsId)?.in,t=ye(n.rhsId)?.in;if(f&&t&&f!==t){const a=xi(n.lhsDir,n.rhsDir);a!=="bend"&&(I[f]??={},I[f][t]=a,I[t]??={},I[t][f]=a)}if(n.lhsId===i){const a=me(n.lhsDir,n.rhsDir);a&&(s[a]=n.rhsId)}else{const a=me(n.rhsDir,n.lhsDir);a&&(s[a]=n.lhsId)}return s},{}),o),{}),x=Object.keys(H)[0],Y={[x]:1},T=Object.keys(H).reduce((o,i)=>i===x?o:{...o,[i]:1},{}),u=it(o=>{const i={[o]:[0,0]},e=[o];for(;e.length>0;){const s=e.shift();if(s){Y[s]=1,delete T[s];const n=H[s],[f,t]=i[s];Object.entries(n).forEach(([a,l])=>{Y[l]||(i[l]=_i([f,t],a),e.push(l))})}}return i},"BFS"),d=[u(x)];for(;Object.keys(T).length>0;)d.push(u(Object.keys(T)[0]));Et.records.dataStructures={adjList:H,spatialMaps:d,groupAlignments:I}}return Et.records.dataStructures},"getDataStructures"),Ui=it((I,H)=>{Et.records.elements[I]=H},"setElementForId"),Hi=it(I=>Et.records.elements[I],"getElementById"),Ge=it(()=>ii({...ke,...ri().architecture}),"getConfig"),se={clear:Oi,setDiagramTitle:Je,getDiagramTitle:Ke,setAccTitle:Qe,getAccTitle:Ze,setAccDescription:je,getAccDescription:qe,getConfig:Ge,addService:Mi,getServices:Ri,addJunction:Di,getJunctions:bi,getNodes:Si,getNode:ye,addGroup:Fi,getGroups:Pi,addEdge:ki,getEdges:Gi,setElementForId:Ui,getElementById:Hi,getDataStructures:Yi};function Pt(I){return Ge()[I]}it(Pt,"getConfigField");var Xi=it((I,H)=>{di(I,H),I.groups.map(H.addGroup),I.services.map(x=>H.addService({...x,type:"service"})),I.junctions.map(x=>H.addJunction({...x,type:"junction"})),I.edges.map(H.addEdge)},"populateDb"),zi={parse:it(async I=>{const H=await gi("architecture",I);Se.debug(H),Xi(H,se)},"parse")},Vi=it(I=>` +import{q as it,a6 as qe,a5 as je,a7 as Ze,a8 as Qe,ao as Ke,an as Je,aS as ti,bk as ei,aA as ii,aB as ri,aC as ni,at as oi,O as Se,bp as Ee,A as Ne,bv as ue,a9 as ai,bw as si,bx as hi,aM as li}from"../app.DfYWW83x.js";import{i as di}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js";import{e as ci}from"./chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.CZC4Gt28.js";import{I as gi}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js";import{J as Fe}from"./cytoscape.esm-wWJwD64P-C103aMMl.DNxweH6G.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";var fe={exports:{}},pe={exports:{}},ve={exports:{}},ui=ve.exports,Ce;function fi(){return Ce||(Ce=1,(function(I,H){(function(x,Y){I.exports=Y()})(ui,function(){return(function(x){var Y={};function T(u){if(Y[u])return Y[u].exports;var d=Y[u]={i:u,l:!1,exports:{}};return x[u].call(d.exports,d,d.exports,T),d.l=!0,d.exports}return T.m=x,T.c=Y,T.i=function(u){return u},T.d=function(u,d,o){T.o(u,d)||Object.defineProperty(u,d,{configurable:!1,enumerable:!0,get:o})},T.n=function(u){var d=u&&u.__esModule?(function(){return u.default}):(function(){return u});return T.d(d,"a",d),d},T.o=function(u,d){return Object.prototype.hasOwnProperty.call(u,d)},T.p="",T(T.s=28)})([function(x,Y,T){function u(){}u.QUALITY=1,u.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,u.DEFAULT_INCREMENTAL=!1,u.DEFAULT_ANIMATION_ON_LAYOUT=!0,u.DEFAULT_ANIMATION_DURING_LAYOUT=!1,u.DEFAULT_ANIMATION_PERIOD=50,u.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,u.DEFAULT_GRAPH_MARGIN=15,u.NODE_DIMENSIONS_INCLUDE_LABELS=!1,u.SIMPLE_NODE_SIZE=40,u.SIMPLE_NODE_HALF_SIZE=u.SIMPLE_NODE_SIZE/2,u.EMPTY_COMPOUND_NODE_SIZE=40,u.MIN_EDGE_LENGTH=1,u.WORLD_BOUNDARY=1e6,u.INITIAL_WORLD_BOUNDARY=u.WORLD_BOUNDARY/1e3,u.WORLD_CENTER_X=1200,u.WORLD_CENTER_Y=900,x.exports=u},function(x,Y,T){var u=T(2),d=T(8),o=T(9);function i(s,n,f){u.call(this,f),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=f,this.bendpoints=[],this.source=s,this.target=n}i.prototype=Object.create(u.prototype);for(var e in u)i[e]=u[e];i.prototype.getSource=function(){return this.source},i.prototype.getTarget=function(){return this.target},i.prototype.isInterGraph=function(){return this.isInterGraph},i.prototype.getLength=function(){return this.length},i.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},i.prototype.getBendpoints=function(){return this.bendpoints},i.prototype.getLca=function(){return this.lca},i.prototype.getSourceInLca=function(){return this.sourceInLca},i.prototype.getTargetInLca=function(){return this.targetInLca},i.prototype.getOtherEnd=function(s){if(this.source===s)return this.target;if(this.target===s)return this.source;throw"Node is not incident with this edge"},i.prototype.getOtherEndInGraph=function(s,n){for(var f=this.getOtherEnd(s),t=n.getGraphManager().getRoot();;){if(f.getOwner()==n)return f;if(f.getOwner()==t)break;f=f.getOwner().getParent()}return null},i.prototype.updateLength=function(){var s=new Array(4);this.isOverlapingSourceAndTarget=d.getIntersection(this.target.getRect(),this.source.getRect(),s),this.isOverlapingSourceAndTarget||(this.lengthX=s[0]-s[2],this.lengthY=s[1]-s[3],Math.abs(this.lengthX)<1&&(this.lengthX=o.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=o.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},i.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=o.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=o.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},x.exports=i},function(x,Y,T){function u(d){this.vGraphObject=d}x.exports=u},function(x,Y,T){var u=T(2),d=T(10),o=T(13),i=T(0),e=T(16),s=T(5);function n(t,a,l,g){l==null&&g==null&&(g=a),u.call(this,g),t.graphManager!=null&&(t=t.graphManager),this.estimatedSize=d.MIN_VALUE,this.inclusionTreeDepth=d.MAX_VALUE,this.vGraphObject=g,this.edges=[],this.graphManager=t,l!=null&&a!=null?this.rect=new o(a.x,a.y,l.width,l.height):this.rect=new o}n.prototype=Object.create(u.prototype);for(var f in u)n[f]=u[f];n.prototype.getEdges=function(){return this.edges},n.prototype.getChild=function(){return this.child},n.prototype.getOwner=function(){return this.owner},n.prototype.getWidth=function(){return this.rect.width},n.prototype.setWidth=function(t){this.rect.width=t},n.prototype.getHeight=function(){return this.rect.height},n.prototype.setHeight=function(t){this.rect.height=t},n.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},n.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},n.prototype.getCenter=function(){return new s(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},n.prototype.getLocation=function(){return new s(this.rect.x,this.rect.y)},n.prototype.getRect=function(){return this.rect},n.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},n.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},n.prototype.setRect=function(t,a){this.rect.x=t.x,this.rect.y=t.y,this.rect.width=a.width,this.rect.height=a.height},n.prototype.setCenter=function(t,a){this.rect.x=t-this.rect.width/2,this.rect.y=a-this.rect.height/2},n.prototype.setLocation=function(t,a){this.rect.x=t,this.rect.y=a},n.prototype.moveBy=function(t,a){this.rect.x+=t,this.rect.y+=a},n.prototype.getEdgeListToNode=function(t){var a=[],l=this;return l.edges.forEach(function(g){if(g.target==t){if(g.source!=l)throw"Incorrect edge source!";a.push(g)}}),a},n.prototype.getEdgesBetween=function(t){var a=[],l=this;return l.edges.forEach(function(g){if(!(g.source==l||g.target==l))throw"Incorrect edge source and/or target";(g.target==t||g.source==t)&&a.push(g)}),a},n.prototype.getNeighborsList=function(){var t=new Set,a=this;return a.edges.forEach(function(l){if(l.source==a)t.add(l.target);else{if(l.target!=a)throw"Incorrect incidency!";t.add(l.source)}}),t},n.prototype.withChildren=function(){var t=new Set,a,l;if(t.add(this),this.child!=null)for(var g=this.child.getNodes(),h=0;ha?(this.rect.x-=(this.labelWidth-a)/2,this.setWidth(this.labelWidth)):this.labelPosHorizontal=="right"&&this.setWidth(a+this.labelWidth)),this.labelHeight&&(this.labelPosVertical=="top"?(this.rect.y-=this.labelHeight,this.setHeight(l+this.labelHeight)):this.labelPosVertical=="center"&&this.labelHeight>l?(this.rect.y-=(this.labelHeight-l)/2,this.setHeight(this.labelHeight)):this.labelPosVertical=="bottom"&&this.setHeight(l+this.labelHeight))}}},n.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==d.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},n.prototype.transform=function(t){var a=this.rect.x;a>i.WORLD_BOUNDARY?a=i.WORLD_BOUNDARY:a<-i.WORLD_BOUNDARY&&(a=-i.WORLD_BOUNDARY);var l=this.rect.y;l>i.WORLD_BOUNDARY?l=i.WORLD_BOUNDARY:l<-i.WORLD_BOUNDARY&&(l=-i.WORLD_BOUNDARY);var g=new s(a,l),h=t.inverseTransformPoint(g);this.setLocation(h.x,h.y)},n.prototype.getLeft=function(){return this.rect.x},n.prototype.getRight=function(){return this.rect.x+this.rect.width},n.prototype.getTop=function(){return this.rect.y},n.prototype.getBottom=function(){return this.rect.y+this.rect.height},n.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},x.exports=n},function(x,Y,T){var u=T(0);function d(){}for(var o in u)d[o]=u[o];d.MAX_ITERATIONS=2500,d.DEFAULT_EDGE_LENGTH=50,d.DEFAULT_SPRING_STRENGTH=.45,d.DEFAULT_REPULSION_STRENGTH=4500,d.DEFAULT_GRAVITY_STRENGTH=.4,d.DEFAULT_COMPOUND_GRAVITY_STRENGTH=1,d.DEFAULT_GRAVITY_RANGE_FACTOR=3.8,d.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=1.5,d.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION=!0,d.DEFAULT_USE_SMART_REPULSION_RANGE_CALCULATION=!0,d.DEFAULT_COOLING_FACTOR_INCREMENTAL=.3,d.COOLING_ADAPTATION_FACTOR=.33,d.ADAPTATION_LOWER_NODE_LIMIT=1e3,d.ADAPTATION_UPPER_NODE_LIMIT=5e3,d.MAX_NODE_DISPLACEMENT_INCREMENTAL=100,d.MAX_NODE_DISPLACEMENT=d.MAX_NODE_DISPLACEMENT_INCREMENTAL*3,d.MIN_REPULSION_DIST=d.DEFAULT_EDGE_LENGTH/10,d.CONVERGENCE_CHECK_PERIOD=100,d.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=.1,d.MIN_EDGE_LENGTH=1,d.GRID_CALCULATION_CHECK_PERIOD=10,x.exports=d},function(x,Y,T){function u(d,o){d==null&&o==null?(this.x=0,this.y=0):(this.x=d,this.y=o)}u.prototype.getX=function(){return this.x},u.prototype.getY=function(){return this.y},u.prototype.setX=function(d){this.x=d},u.prototype.setY=function(d){this.y=d},u.prototype.getDifference=function(d){return new DimensionD(this.x-d.x,this.y-d.y)},u.prototype.getCopy=function(){return new u(this.x,this.y)},u.prototype.translate=function(d){return this.x+=d.width,this.y+=d.height,this},x.exports=u},function(x,Y,T){var u=T(2),d=T(10),o=T(0),i=T(7),e=T(3),s=T(1),n=T(13),f=T(12),t=T(11);function a(g,h,N){u.call(this,N),this.estimatedSize=d.MIN_VALUE,this.margin=o.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=g,h!=null&&h instanceof i?this.graphManager=h:h!=null&&h instanceof Layout&&(this.graphManager=h.graphManager)}a.prototype=Object.create(u.prototype);for(var l in u)a[l]=u[l];a.prototype.getNodes=function(){return this.nodes},a.prototype.getEdges=function(){return this.edges},a.prototype.getGraphManager=function(){return this.graphManager},a.prototype.getParent=function(){return this.parent},a.prototype.getLeft=function(){return this.left},a.prototype.getRight=function(){return this.right},a.prototype.getTop=function(){return this.top},a.prototype.getBottom=function(){return this.bottom},a.prototype.isConnected=function(){return this.isConnected},a.prototype.add=function(g,h,N){if(h==null&&N==null){var c=g;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(c)>-1)throw"Node already in graph!";return c.owner=this,this.getNodes().push(c),c}else{var y=g;if(!(this.getNodes().indexOf(h)>-1&&this.getNodes().indexOf(N)>-1))throw"Source or target not in graph!";if(!(h.owner==N.owner&&h.owner==this))throw"Both owners must be this graph!";return h.owner!=N.owner?null:(y.source=h,y.target=N,y.isInterGraph=!1,this.getEdges().push(y),h.edges.push(y),N!=h&&N.edges.push(y),y)}},a.prototype.remove=function(g){var h=g;if(g instanceof e){if(h==null)throw"Node is null!";if(!(h.owner!=null&&h.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var N=h.edges.slice(),c,y=N.length,A=0;A-1&&U>-1))throw"Source and/or target doesn't know this edge!";c.source.edges.splice(S,1),c.target!=c.source&&c.target.edges.splice(U,1);var _=c.source.owner.getEdges().indexOf(c);if(_==-1)throw"Not in owner's edge list!";c.source.owner.getEdges().splice(_,1)}},a.prototype.updateLeftTop=function(){for(var g=d.MAX_VALUE,h=d.MAX_VALUE,N,c,y,A=this.getNodes(),_=A.length,S=0;S<_;S++){var U=A[S];N=U.getTop(),c=U.getLeft(),g>N&&(g=N),h>c&&(h=c)}return g==d.MAX_VALUE?null:(A[0].getParent().paddingLeft!=null?y=A[0].getParent().paddingLeft:y=this.margin,this.left=h-y,this.top=g-y,new f(this.left,this.top))},a.prototype.updateBounds=function(g){for(var h=d.MAX_VALUE,N=-d.MAX_VALUE,c=d.MAX_VALUE,y=-d.MAX_VALUE,A,_,S,U,k,X=this.nodes,Q=X.length,C=0;CA&&(h=A),N<_&&(N=_),c>S&&(c=S),yA&&(h=A),N<_&&(N=_),c>S&&(c=S),y=this.nodes.length){var Q=0;N.forEach(function(C){C.owner==g&&Q++}),Q==this.nodes.length&&(this.isConnected=!0)}},x.exports=a},function(x,Y,T){var u,d=T(1);function o(i){u=T(6),this.layout=i,this.graphs=[],this.edges=[]}o.prototype.addRoot=function(){var i=this.layout.newGraph(),e=this.layout.newNode(null),s=this.add(i,e);return this.setRootGraph(s),this.rootGraph},o.prototype.add=function(i,e,s,n,f){if(s==null&&n==null&&f==null){if(i==null)throw"Graph is null!";if(e==null)throw"Parent node is null!";if(this.graphs.indexOf(i)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(i),i.parent!=null)throw"Already has a parent!";if(e.child!=null)throw"Already has a child!";return i.parent=e,e.child=i,i}else{f=s,n=e,s=i;var t=n.getOwner(),a=f.getOwner();if(!(t!=null&&t.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(a!=null&&a.getGraphManager()==this))throw"Target not in this graph mgr!";if(t==a)return s.isInterGraph=!1,t.add(s,n,f);if(s.isInterGraph=!0,s.source=n,s.target=f,this.edges.indexOf(s)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(s),!(s.source!=null&&s.target!=null))throw"Edge source and/or target is null!";if(!(s.source.edges.indexOf(s)==-1&&s.target.edges.indexOf(s)==-1))throw"Edge already in source and/or target incidency list!";return s.source.edges.push(s),s.target.edges.push(s),s}},o.prototype.remove=function(i){if(i instanceof u){var e=i;if(e.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(e==this.rootGraph||e.parent!=null&&e.parent.graphManager==this))throw"Invalid parent node!";var s=[];s=s.concat(e.getEdges());for(var n,f=s.length,t=0;t=i.getRight()?e[0]+=Math.min(i.getX()-o.getX(),o.getRight()-i.getRight()):i.getX()<=o.getX()&&i.getRight()>=o.getRight()&&(e[0]+=Math.min(o.getX()-i.getX(),i.getRight()-o.getRight())),o.getY()<=i.getY()&&o.getBottom()>=i.getBottom()?e[1]+=Math.min(i.getY()-o.getY(),o.getBottom()-i.getBottom()):i.getY()<=o.getY()&&i.getBottom()>=o.getBottom()&&(e[1]+=Math.min(o.getY()-i.getY(),i.getBottom()-o.getBottom()));var f=Math.abs((i.getCenterY()-o.getCenterY())/(i.getCenterX()-o.getCenterX()));i.getCenterY()===o.getCenterY()&&i.getCenterX()===o.getCenterX()&&(f=1);var t=f*e[0],a=e[1]/f;e[0]t)return e[0]=s,e[1]=l,e[2]=f,e[3]=X,!1;if(nf)return e[0]=a,e[1]=n,e[2]=U,e[3]=t,!1;if(sf?(e[0]=h,e[1]=N,r=!0):(e[0]=g,e[1]=l,r=!0):p===m&&(s>f?(e[0]=a,e[1]=l,r=!0):(e[0]=c,e[1]=N,r=!0)),-v===m?f>s?(e[2]=k,e[3]=X,E=!0):(e[2]=U,e[3]=S,E=!0):v===m&&(f>s?(e[2]=_,e[3]=S,E=!0):(e[2]=Q,e[3]=X,E=!0)),r&&E)return!1;if(s>f?n>t?(R=this.getCardinalDirection(p,m,4),L=this.getCardinalDirection(v,m,2)):(R=this.getCardinalDirection(-p,m,3),L=this.getCardinalDirection(-v,m,1)):n>t?(R=this.getCardinalDirection(-p,m,1),L=this.getCardinalDirection(-v,m,3)):(R=this.getCardinalDirection(p,m,2),L=this.getCardinalDirection(v,m,4)),!r)switch(R){case 1:P=l,O=s+-A/m,e[0]=O,e[1]=P;break;case 2:O=c,P=n+y*m,e[0]=O,e[1]=P;break;case 3:P=N,O=s+A/m,e[0]=O,e[1]=P;break;case 4:O=h,P=n+-y*m,e[0]=O,e[1]=P;break}if(!E)switch(L){case 1:B=S,G=f+-ot/m,e[2]=G,e[3]=B;break;case 2:G=Q,B=t+C*m,e[2]=G,e[3]=B;break;case 3:B=X,G=f+ot/m,e[2]=G,e[3]=B;break;case 4:G=k,B=t+-C*m,e[2]=G,e[3]=B;break}}return!1},d.getCardinalDirection=function(o,i,e){return o>i?e:1+e%4},d.getIntersection=function(o,i,e,s){if(s==null)return this.getIntersection2(o,i,e);var n=o.x,f=o.y,t=i.x,a=i.y,l=e.x,g=e.y,h=s.x,N=s.y,c=void 0,y=void 0,A=void 0,_=void 0,S=void 0,U=void 0,k=void 0,X=void 0,Q=void 0;return A=a-f,S=n-t,k=t*f-n*a,_=N-g,U=l-h,X=h*g-l*N,Q=A*U-_*S,Q===0?null:(c=(S*X-U*k)/Q,y=(_*k-A*X)/Q,new u(c,y))},d.angleOfVector=function(o,i,e,s){var n=void 0;return o!==e?(n=Math.atan((s-i)/(e-o)),e=0){var N=(-l+Math.sqrt(l*l-4*a*g))/(2*a),c=(-l-Math.sqrt(l*l-4*a*g))/(2*a),y=null;return N>=0&&N<=1?[N]:c>=0&&c<=1?[c]:y}else return null},d.HALF_PI=.5*Math.PI,d.ONE_AND_HALF_PI=1.5*Math.PI,d.TWO_PI=2*Math.PI,d.THREE_PI=3*Math.PI,x.exports=d},function(x,Y,T){function u(){}u.sign=function(d){return d>0?1:d<0?-1:0},u.floor=function(d){return d<0?Math.ceil(d):Math.floor(d)},u.ceil=function(d){return d<0?Math.floor(d):Math.ceil(d)},x.exports=u},function(x,Y,T){function u(){}u.MAX_VALUE=2147483647,u.MIN_VALUE=-2147483648,x.exports=u},function(x,Y,T){var u=(function(){function n(f,t){for(var a=0;a"u"?"undefined":u(o);return o==null||i!="object"&&i!="function"},x.exports=d},function(x,Y,T){function u(l){if(Array.isArray(l)){for(var g=0,h=Array(l.length);g0&&g;){for(A.push(S[0]);A.length>0&&g;){var U=A[0];A.splice(0,1),y.add(U);for(var k=U.getEdges(),c=0;c-1&&S.splice(ot,1)}y=new Set,_=new Map}}return l},a.prototype.createDummyNodesForBendpoints=function(l){for(var g=[],h=l.source,N=this.graphManager.calcLowestCommonAncestor(l.source,l.target),c=0;c0){for(var N=this.edgeToDummyNodes.get(h),c=0;c=0&&g.splice(X,1);var Q=_.getNeighborsList();Q.forEach(function(r){if(h.indexOf(r)<0){var E=N.get(r),p=E-1;p==1&&U.push(r),N.set(r,p)}})}h=h.concat(U),(g.length==1||g.length==2)&&(c=!0,y=g[0])}return y},a.prototype.setGraphManager=function(l){this.graphManager=l},x.exports=a},function(x,Y,T){function u(){}u.seed=1,u.x=0,u.nextDouble=function(){return u.x=Math.sin(u.seed++)*1e4,u.x-Math.floor(u.x)},x.exports=u},function(x,Y,T){var u=T(5);function d(o,i){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}d.prototype.getWorldOrgX=function(){return this.lworldOrgX},d.prototype.setWorldOrgX=function(o){this.lworldOrgX=o},d.prototype.getWorldOrgY=function(){return this.lworldOrgY},d.prototype.setWorldOrgY=function(o){this.lworldOrgY=o},d.prototype.getWorldExtX=function(){return this.lworldExtX},d.prototype.setWorldExtX=function(o){this.lworldExtX=o},d.prototype.getWorldExtY=function(){return this.lworldExtY},d.prototype.setWorldExtY=function(o){this.lworldExtY=o},d.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},d.prototype.setDeviceOrgX=function(o){this.ldeviceOrgX=o},d.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},d.prototype.setDeviceOrgY=function(o){this.ldeviceOrgY=o},d.prototype.getDeviceExtX=function(){return this.ldeviceExtX},d.prototype.setDeviceExtX=function(o){this.ldeviceExtX=o},d.prototype.getDeviceExtY=function(){return this.ldeviceExtY},d.prototype.setDeviceExtY=function(o){this.ldeviceExtY=o},d.prototype.transformX=function(o){var i=0,e=this.lworldExtX;return e!=0&&(i=this.ldeviceOrgX+(o-this.lworldOrgX)*this.ldeviceExtX/e),i},d.prototype.transformY=function(o){var i=0,e=this.lworldExtY;return e!=0&&(i=this.ldeviceOrgY+(o-this.lworldOrgY)*this.ldeviceExtY/e),i},d.prototype.inverseTransformX=function(o){var i=0,e=this.ldeviceExtX;return e!=0&&(i=this.lworldOrgX+(o-this.ldeviceOrgX)*this.lworldExtX/e),i},d.prototype.inverseTransformY=function(o){var i=0,e=this.ldeviceExtY;return e!=0&&(i=this.lworldOrgY+(o-this.ldeviceOrgY)*this.lworldExtY/e),i},d.prototype.inverseTransformPoint=function(o){var i=new u(this.inverseTransformX(o.x),this.inverseTransformY(o.y));return i},x.exports=d},function(x,Y,T){function u(t){if(Array.isArray(t)){for(var a=0,l=Array(t.length);ao.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*o.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(t-o.ADAPTATION_LOWER_NODE_LIMIT)/(o.ADAPTATION_UPPER_NODE_LIMIT-o.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-o.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=o.MAX_NODE_DISPLACEMENT_INCREMENTAL):(t>o.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(o.COOLING_ADAPTATION_FACTOR,1-(t-o.ADAPTATION_LOWER_NODE_LIMIT)/(o.ADAPTATION_UPPER_NODE_LIMIT-o.ADAPTATION_LOWER_NODE_LIMIT)*(1-o.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=o.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.displacementThresholdPerNode=3*o.DEFAULT_EDGE_LENGTH/100,this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},n.prototype.calcSpringForces=function(){for(var t=this.getAllEdges(),a,l=0;l0&&arguments[0]!==void 0?arguments[0]:!0,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,l,g,h,N,c=this.getAllNodes(),y;if(this.useFRGridVariant)for(this.totalIterations%o.GRID_CALCULATION_CHECK_PERIOD==1&&t&&this.updateGrid(),y=new Set,l=0;lA||y>A)&&(t.gravitationForceX=-this.gravityConstant*h,t.gravitationForceY=-this.gravityConstant*N)):(A=a.getEstimatedSize()*this.compoundGravityRangeFactor,(c>A||y>A)&&(t.gravitationForceX=-this.gravityConstant*h*this.compoundGravityConstant,t.gravitationForceY=-this.gravityConstant*N*this.compoundGravityConstant))},n.prototype.isConverged=function(){var t,a=!1;return this.totalIterations>this.maxIterations/3&&(a=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),t=this.totalDisplacement=c.length||A>=c[0].length)){for(var _=0;_s}}]),e})();x.exports=i},function(x,Y,T){function u(){}u.svd=function(d){this.U=null,this.V=null,this.s=null,this.m=0,this.n=0,this.m=d.length,this.n=d[0].length;var o=Math.min(this.m,this.n);this.s=(function(wt){for(var At=[];wt-- >0;)At.push(0);return At})(Math.min(this.m+1,this.n)),this.U=(function(wt){var At=function Xt(Ut){if(Ut.length==0)return 0;for(var Dt=[],Yt=0;Yt0;)At.push(0);return At})(this.n),e=(function(wt){for(var At=[];wt-- >0;)At.push(0);return At})(this.m),s=!0,n=Math.min(this.m-1,this.n),f=Math.max(0,Math.min(this.n-2,this.m)),t=0;t=0;v--)if(this.s[v]!==0){for(var m=v+1;m=0;V--){if((function(wt,At){return wt&&At})(V0;){var $=void 0,Mt=void 0;for($=r-2;$>=-1&&$!==-1;$--)if(Math.abs(i[$])<=vt+et*(Math.abs(this.s[$])+Math.abs(this.s[$+1]))){i[$]=0;break}if($===r-2)Mt=4;else{var J=void 0;for(J=r-1;J>=$&&J!==$;J--){var nt=(J!==r?Math.abs(i[J]):0)+(J!==$+1?Math.abs(i[J-1]):0);if(Math.abs(this.s[J])<=vt+et*nt){this.s[J]=0;break}}J===$?Mt=3:J===r-1?Mt=1:(Mt=2,$=J)}switch($++,Mt){case 1:{var mt=i[r-2];i[r-2]=0;for(var ht=r-2;ht>=$;ht--){var xt=u.hypot(this.s[ht],mt),Lt=this.s[ht]/xt,Tt=mt/xt;this.s[ht]=xt,ht!==$&&(mt=-Tt*i[ht-1],i[ht-1]=Lt*i[ht-1]);for(var It=0;It=this.s[$+1]);){var _t=this.s[$];if(this.s[$]=this.s[$+1],this.s[$+1]=_t,$Math.abs(o)?(i=o/d,i=Math.abs(d)*Math.sqrt(1+i*i)):o!=0?(i=d/o,i=Math.abs(o)*Math.sqrt(1+i*i)):i=0,i},x.exports=u},function(x,Y,T){var u=(function(){function i(e,s){for(var n=0;n2&&arguments[2]!==void 0?arguments[2]:1,f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,t=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;d(this,i),this.sequence1=e,this.sequence2=s,this.match_score=n,this.mismatch_penalty=f,this.gap_penalty=t,this.iMax=e.length+1,this.jMax=s.length+1,this.grid=new Array(this.iMax);for(var a=0;a=0;e--){var s=this.listeners[e];s.event===o&&s.callback===i&&this.listeners.splice(e,1)}},d.emit=function(o,i){for(var e=0;e{var Y={45:((o,i,e)=>{var s={};s.layoutBase=e(551),s.CoSEConstants=e(806),s.CoSEEdge=e(767),s.CoSEGraph=e(880),s.CoSEGraphManager=e(578),s.CoSELayout=e(765),s.CoSENode=e(991),s.ConstraintHandler=e(902),o.exports=s}),806:((o,i,e)=>{var s=e(551).FDLayoutConstants;function n(){}for(var f in s)n[f]=s[f];n.DEFAULT_USE_MULTI_LEVEL_SCALING=!1,n.DEFAULT_RADIAL_SEPARATION=s.DEFAULT_EDGE_LENGTH,n.DEFAULT_COMPONENT_SEPERATION=60,n.TILE=!0,n.TILING_PADDING_VERTICAL=10,n.TILING_PADDING_HORIZONTAL=10,n.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,n.ENFORCE_CONSTRAINTS=!0,n.APPLY_LAYOUT=!0,n.RELAX_MOVEMENT_ON_CONSTRAINTS=!0,n.TREE_REDUCTION_ON_INCREMENTAL=!0,n.PURE_INCREMENTAL=n.DEFAULT_INCREMENTAL,o.exports=n}),767:((o,i,e)=>{var s=e(551).FDLayoutEdge;function n(t,a,l){s.call(this,t,a,l)}n.prototype=Object.create(s.prototype);for(var f in s)n[f]=s[f];o.exports=n}),880:((o,i,e)=>{var s=e(551).LGraph;function n(t,a,l){s.call(this,t,a,l)}n.prototype=Object.create(s.prototype);for(var f in s)n[f]=s[f];o.exports=n}),578:((o,i,e)=>{var s=e(551).LGraphManager;function n(t){s.call(this,t)}n.prototype=Object.create(s.prototype);for(var f in s)n[f]=s[f];o.exports=n}),765:((o,i,e)=>{var s=e(551).FDLayout,n=e(578),f=e(880),t=e(991),a=e(767),l=e(806),g=e(902),h=e(551).FDLayoutConstants,N=e(551).LayoutConstants,c=e(551).Point,y=e(551).PointD,A=e(551).DimensionD,_=e(551).Layout,S=e(551).Integer,U=e(551).IGeometry,k=e(551).LGraph,X=e(551).Transform,Q=e(551).LinkedList;function C(){s.call(this),this.toBeTiled={},this.constraints={}}C.prototype=Object.create(s.prototype);for(var ot in s)C[ot]=s[ot];C.prototype.newGraphManager=function(){var r=new n(this);return this.graphManager=r,r},C.prototype.newGraph=function(r){return new f(null,this.graphManager,r)},C.prototype.newNode=function(r){return new t(this.graphManager,r)},C.prototype.newEdge=function(r){return new a(null,null,r)},C.prototype.initParameters=function(){s.prototype.initParameters.call(this,arguments),this.isSubLayout||(l.DEFAULT_EDGE_LENGTH<10?this.idealEdgeLength=10:this.idealEdgeLength=l.DEFAULT_EDGE_LENGTH,this.useSmartIdealEdgeLengthCalculation=l.DEFAULT_USE_SMART_IDEAL_EDGE_LENGTH_CALCULATION,this.gravityConstant=h.DEFAULT_GRAVITY_STRENGTH,this.compoundGravityConstant=h.DEFAULT_COMPOUND_GRAVITY_STRENGTH,this.gravityRangeFactor=h.DEFAULT_GRAVITY_RANGE_FACTOR,this.compoundGravityRangeFactor=h.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR,this.prunedNodesAll=[],this.growTreeIterations=0,this.afterGrowthIterations=0,this.isTreeGrowing=!1,this.isGrowthFinished=!1)},C.prototype.initSpringEmbedder=function(){s.prototype.initSpringEmbedder.call(this),this.coolingCycle=0,this.maxCoolingCycle=this.maxIterations/h.CONVERGENCE_CHECK_PERIOD,this.finalTemperature=.04,this.coolingAdjuster=1},C.prototype.layout=function(){var r=N.DEFAULT_CREATE_BENDS_AS_NEEDED;return r&&(this.createBendpoints(),this.graphManager.resetAllEdges()),this.level=0,this.classicLayout()},C.prototype.classicLayout=function(){if(this.nodesWithGravity=this.calculateNodesToApplyGravitationTo(),this.graphManager.setAllNodesToApplyGravitation(this.nodesWithGravity),this.calcNoOfChildrenForAllNodes(),this.graphManager.calcLowestCommonAncestors(),this.graphManager.calcInclusionTreeDepths(),this.graphManager.getRoot().calcEstimatedSize(),this.calcIdealEdgeLengths(),this.incremental){if(l.TREE_REDUCTION_ON_INCREMENTAL){this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var r=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(v){return r.has(v)});this.graphManager.setAllNodesToApplyGravitation(E)}}else{var p=this.getFlatForest();if(p.length>0)this.positionNodesRadially(p);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var r=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(R){return r.has(R)});this.graphManager.setAllNodesToApplyGravitation(E),this.positionNodesRandomly()}}return Object.keys(this.constraints).length>0&&(g.handleConstraints(this),this.initConstraintVariables()),this.initSpringEmbedder(),l.APPLY_LAYOUT&&this.runSpringEmbedder(),!0},C.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%h.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var r=new Set(this.getAllNodes()),E=this.nodesWithGravity.filter(function(m){return r.has(m)});this.graphManager.setAllNodesToApplyGravitation(E),this.graphManager.updateBounds(),this.updateGrid(),l.PURE_INCREMENTAL?this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL/2:this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),l.PURE_INCREMENTAL?this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL/2*((100-this.afterGrowthIterations)/100):this.coolingFactor=h.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var p=!this.isTreeGrowing&&!this.isGrowthFinished,v=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(p,v),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},C.prototype.getPositionsData=function(){for(var r=this.graphManager.getAllNodes(),E={},p=0;p0&&this.updateDisplacements();for(var p=0;p0&&(v.fixedNodeWeight=R)}}if(this.constraints.relativePlacementConstraint){var L=new Map,O=new Map;if(this.dummyToNodeForVerticalAlignment=new Map,this.dummyToNodeForHorizontalAlignment=new Map,this.fixedNodesOnHorizontal=new Set,this.fixedNodesOnVertical=new Set,this.fixedNodeSet.forEach(function(M){r.fixedNodesOnHorizontal.add(M),r.fixedNodesOnVertical.add(M)}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var P=this.constraints.alignmentConstraint.vertical,p=0;p=2*M.length/3;et--)b=Math.floor(Math.random()*(et+1)),q=M[et],M[et]=M[b],M[b]=q;return M},this.nodesInRelativeHorizontal=[],this.nodesInRelativeVertical=[],this.nodeToRelativeConstraintMapHorizontal=new Map,this.nodeToRelativeConstraintMapVertical=new Map,this.nodeToTempPositionMapHorizontal=new Map,this.nodeToTempPositionMapVertical=new Map,this.constraints.relativePlacementConstraint.forEach(function(M){if(M.left){var b=L.has(M.left)?L.get(M.left):M.left,q=L.has(M.right)?L.get(M.right):M.right;r.nodesInRelativeHorizontal.includes(b)||(r.nodesInRelativeHorizontal.push(b),r.nodeToRelativeConstraintMapHorizontal.set(b,[]),r.dummyToNodeForVerticalAlignment.has(b)?r.nodeToTempPositionMapHorizontal.set(b,r.idToNodeMap.get(r.dummyToNodeForVerticalAlignment.get(b)[0]).getCenterX()):r.nodeToTempPositionMapHorizontal.set(b,r.idToNodeMap.get(b).getCenterX())),r.nodesInRelativeHorizontal.includes(q)||(r.nodesInRelativeHorizontal.push(q),r.nodeToRelativeConstraintMapHorizontal.set(q,[]),r.dummyToNodeForVerticalAlignment.has(q)?r.nodeToTempPositionMapHorizontal.set(q,r.idToNodeMap.get(r.dummyToNodeForVerticalAlignment.get(q)[0]).getCenterX()):r.nodeToTempPositionMapHorizontal.set(q,r.idToNodeMap.get(q).getCenterX())),r.nodeToRelativeConstraintMapHorizontal.get(b).push({right:q,gap:M.gap}),r.nodeToRelativeConstraintMapHorizontal.get(q).push({left:b,gap:M.gap})}else{var et=O.has(M.top)?O.get(M.top):M.top,vt=O.has(M.bottom)?O.get(M.bottom):M.bottom;r.nodesInRelativeVertical.includes(et)||(r.nodesInRelativeVertical.push(et),r.nodeToRelativeConstraintMapVertical.set(et,[]),r.dummyToNodeForHorizontalAlignment.has(et)?r.nodeToTempPositionMapVertical.set(et,r.idToNodeMap.get(r.dummyToNodeForHorizontalAlignment.get(et)[0]).getCenterY()):r.nodeToTempPositionMapVertical.set(et,r.idToNodeMap.get(et).getCenterY())),r.nodesInRelativeVertical.includes(vt)||(r.nodesInRelativeVertical.push(vt),r.nodeToRelativeConstraintMapVertical.set(vt,[]),r.dummyToNodeForHorizontalAlignment.has(vt)?r.nodeToTempPositionMapVertical.set(vt,r.idToNodeMap.get(r.dummyToNodeForHorizontalAlignment.get(vt)[0]).getCenterY()):r.nodeToTempPositionMapVertical.set(vt,r.idToNodeMap.get(vt).getCenterY())),r.nodeToRelativeConstraintMapVertical.get(et).push({bottom:vt,gap:M.gap}),r.nodeToRelativeConstraintMapVertical.get(vt).push({top:et,gap:M.gap})}});else{var B=new Map,V=new Map;this.constraints.relativePlacementConstraint.forEach(function(M){if(M.left){var b=L.has(M.left)?L.get(M.left):M.left,q=L.has(M.right)?L.get(M.right):M.right;B.has(b)?B.get(b).push(q):B.set(b,[q]),B.has(q)?B.get(q).push(b):B.set(q,[b])}else{var et=O.has(M.top)?O.get(M.top):M.top,vt=O.has(M.bottom)?O.get(M.bottom):M.bottom;V.has(et)?V.get(et).push(vt):V.set(et,[vt]),V.has(vt)?V.get(vt).push(et):V.set(vt,[et])}});var z=function(M,b){var q=[],et=[],vt=new Q,$=new Set,Mt=0;return M.forEach(function(J,nt){if(!$.has(nt)){q[Mt]=[],et[Mt]=!1;var mt=nt;for(vt.push(mt),$.add(mt),q[Mt].push(mt);vt.length!=0;){mt=vt.shift(),b.has(mt)&&(et[Mt]=!0);var ht=M.get(mt);ht.forEach(function(xt){$.has(xt)||(vt.push(xt),$.add(xt),q[Mt].push(xt))})}Mt++}}),{components:q,isFixed:et}},j=z(B,r.fixedNodesOnHorizontal);this.componentsOnHorizontal=j.components,this.fixedComponentsOnHorizontal=j.isFixed;var F=z(V,r.fixedNodesOnVertical);this.componentsOnVertical=F.components,this.fixedComponentsOnVertical=F.isFixed}}},C.prototype.updateDisplacements=function(){var r=this;if(this.constraints.fixedNodeConstraint&&this.constraints.fixedNodeConstraint.forEach(function(F){var M=r.idToNodeMap.get(F.nodeId);M.displacementX=0,M.displacementY=0}),this.constraints.alignmentConstraint){if(this.constraints.alignmentConstraint.vertical)for(var E=this.constraints.alignmentConstraint.vertical,p=0;p1){var O;for(O=0;Ov&&(v=Math.floor(L.y)),R=Math.floor(L.x+l.DEFAULT_COMPONENT_SEPERATION)}this.transform(new y(N.WORLD_CENTER_X-L.x/2,N.WORLD_CENTER_Y-L.y/2))},C.radialLayout=function(r,E,p){var v=Math.max(this.maxDiagonalInTree(r),l.DEFAULT_RADIAL_SEPARATION);C.branchRadialLayout(E,null,0,359,0,v);var m=k.calculateBounds(r),R=new X;R.setDeviceOrgX(m.getMinX()),R.setDeviceOrgY(m.getMinY()),R.setWorldOrgX(p.x),R.setWorldOrgY(p.y);for(var L=0;L1;){var q=b[0];b.splice(0,1);var et=V.indexOf(q);et>=0&&V.splice(et,1),F--,z--}E!=null?M=(V.indexOf(b[0])+1)%F:M=0;for(var vt=Math.abs(v-p)/z,$=M;j!=z;$=++$%F){var Mt=V[$].getOtherEnd(r);if(Mt!=E){var J=(p+j*vt)%360,nt=(J+vt)%360;C.branchRadialLayout(Mt,r,J,nt,m+R,R),j++}}},C.maxDiagonalInTree=function(r){for(var E=S.MIN_VALUE,p=0;pE&&(E=m)}return E},C.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},C.prototype.groupZeroDegreeMembers=function(){var r=this,E={};this.memberGroups={},this.idToDummyNode={};for(var p=[],v=this.graphManager.getAllNodes(),m=0;m"u"&&(E[O]=[]),E[O]=E[O].concat(R)}Object.keys(E).forEach(function(P){if(E[P].length>1){var G="DummyCompound_"+P;r.memberGroups[G]=E[P];var B=E[P][0].getParent(),V=new t(r.graphManager);V.id=G,V.paddingLeft=B.paddingLeft||0,V.paddingRight=B.paddingRight||0,V.paddingBottom=B.paddingBottom||0,V.paddingTop=B.paddingTop||0,r.idToDummyNode[G]=V;var z=r.getGraphManager().add(r.newGraph(),V),j=B.getChild();j.add(V);for(var F=0;Fm?(v.rect.x-=(v.labelWidth-m)/2,v.setWidth(v.labelWidth),v.labelMarginLeft=(v.labelWidth-m)/2):v.labelPosHorizontal=="right"&&v.setWidth(m+v.labelWidth)),v.labelHeight&&(v.labelPosVertical=="top"?(v.rect.y-=v.labelHeight,v.setHeight(R+v.labelHeight),v.labelMarginTop=v.labelHeight):v.labelPosVertical=="center"&&v.labelHeight>R?(v.rect.y-=(v.labelHeight-R)/2,v.setHeight(v.labelHeight),v.labelMarginTop=(v.labelHeight-R)/2):v.labelPosVertical=="bottom"&&v.setHeight(R+v.labelHeight))}})},C.prototype.repopulateCompounds=function(){for(var r=this.compoundOrder.length-1;r>=0;r--){var E=this.compoundOrder[r],p=E.id,v=E.paddingLeft,m=E.paddingTop,R=E.labelMarginLeft,L=E.labelMarginTop;this.adjustLocations(this.tiledMemberPack[p],E.rect.x,E.rect.y,v,m,R,L)}},C.prototype.repopulateZeroDegreeMembers=function(){var r=this,E=this.tiledZeroDegreePack;Object.keys(E).forEach(function(p){var v=r.idToDummyNode[p],m=v.paddingLeft,R=v.paddingTop,L=v.labelMarginLeft,O=v.labelMarginTop;r.adjustLocations(E[p],v.rect.x,v.rect.y,m,R,L,O)})},C.prototype.getToBeTiled=function(r){var E=r.id;if(this.toBeTiled[E]!=null)return this.toBeTiled[E];var p=r.getChild();if(p==null)return this.toBeTiled[E]=!1,!1;for(var v=p.getNodes(),m=0;m0)return this.toBeTiled[E]=!1,!1;if(R.getChild()==null){this.toBeTiled[R.id]=!1;continue}if(!this.getToBeTiled(R))return this.toBeTiled[E]=!1,!1}return this.toBeTiled[E]=!0,!0},C.prototype.getNodeDegree=function(r){r.id;for(var E=r.getEdges(),p=0,v=0;vB&&(B=z.rect.height)}p+=B+r.verticalPadding}},C.prototype.tileCompoundMembers=function(r,E){var p=this;this.tiledMemberPack=[],Object.keys(r).forEach(function(v){var m=E[v];if(p.tiledMemberPack[v]=p.tileNodes(r[v],m.paddingLeft+m.paddingRight),m.rect.width=p.tiledMemberPack[v].width,m.rect.height=p.tiledMemberPack[v].height,m.setCenter(p.tiledMemberPack[v].centerX,p.tiledMemberPack[v].centerY),m.labelMarginLeft=0,m.labelMarginTop=0,l.NODE_DIMENSIONS_INCLUDE_LABELS){var R=m.rect.width,L=m.rect.height;m.labelWidth&&(m.labelPosHorizontal=="left"?(m.rect.x-=m.labelWidth,m.setWidth(R+m.labelWidth),m.labelMarginLeft=m.labelWidth):m.labelPosHorizontal=="center"&&m.labelWidth>R?(m.rect.x-=(m.labelWidth-R)/2,m.setWidth(m.labelWidth),m.labelMarginLeft=(m.labelWidth-R)/2):m.labelPosHorizontal=="right"&&m.setWidth(R+m.labelWidth)),m.labelHeight&&(m.labelPosVertical=="top"?(m.rect.y-=m.labelHeight,m.setHeight(L+m.labelHeight),m.labelMarginTop=m.labelHeight):m.labelPosVertical=="center"&&m.labelHeight>L?(m.rect.y-=(m.labelHeight-L)/2,m.setHeight(m.labelHeight),m.labelMarginTop=(m.labelHeight-L)/2):m.labelPosVertical=="bottom"&&m.setHeight(L+m.labelHeight))}})},C.prototype.tileNodes=function(r,E){var p=this.tileNodesByFavoringDim(r,E,!0),v=this.tileNodesByFavoringDim(r,E,!1),m=this.getOrgRatio(p),R=this.getOrgRatio(v),L;return RO&&(O=F.getWidth())});var P=R/m,G=L/m,B=Math.pow(p-v,2)+4*(P+v)*(G+p)*m,V=(v-p+Math.sqrt(B))/(2*(P+v)),z;E?(z=Math.ceil(V),z==V&&z++):z=Math.floor(V);var j=z*(P+v)-v;return O>j&&(j=O),j+=v*2,j},C.prototype.tileNodesByFavoringDim=function(r,E,p){var v=l.TILING_PADDING_VERTICAL,m=l.TILING_PADDING_HORIZONTAL,R=l.TILING_COMPARE_BY,L={rows:[],rowWidth:[],rowHeight:[],width:0,height:E,verticalPadding:v,horizontalPadding:m,centerX:0,centerY:0};R&&(L.idealRowWidth=this.calcIdealRowWidth(r,p));var O=function(F){return F.rect.width*F.rect.height},P=function(F,M){return O(M)-O(F)};r.sort(function(F,M){var b=P;return L.idealRowWidth?(b=R,b(F.id,M.id)):b(F,M)});for(var G=0,B=0,V=0;V0&&(L+=r.horizontalPadding),r.rowWidth[p]=L,r.width0&&(O+=r.verticalPadding);var P=0;O>r.rowHeight[p]&&(P=r.rowHeight[p],r.rowHeight[p]=O,P=r.rowHeight[p]-P),r.height+=P,r.rows[p].push(E)},C.prototype.getShortestRowIndex=function(r){for(var E=-1,p=Number.MAX_VALUE,v=0;vp&&(E=v,p=r.rowWidth[v]);return E},C.prototype.canAddHorizontal=function(r,E,p){if(r.idealRowWidth){var v=r.rows.length-1,m=r.rowWidth[v];return m+E+r.horizontalPadding<=r.idealRowWidth}var R=this.getShortestRowIndex(r);if(R<0)return!0;var L=r.rowWidth[R];if(L+r.horizontalPadding+E<=r.width)return!0;var O=0;r.rowHeight[R]0&&(O=p+r.verticalPadding-r.rowHeight[R]);var P;r.width-L>=E+r.horizontalPadding?P=(r.height+O)/(L+E+r.horizontalPadding):P=(r.height+O)/r.width,O=p+r.verticalPadding;var G;return r.widthR&&E!=p){v.splice(-1,1),r.rows[p].push(m),r.rowWidth[E]=r.rowWidth[E]-R,r.rowWidth[p]=r.rowWidth[p]+R,r.width=r.rowWidth[instance.getLongestRowIndex(r)];for(var L=Number.MIN_VALUE,O=0;OL&&(L=v[O].height);E>0&&(L+=r.verticalPadding);var P=r.rowHeight[E]+r.rowHeight[p];r.rowHeight[E]=L,r.rowHeight[p]0)for(var j=m;j<=R;j++)z[0]+=this.grid[j][L-1].length+this.grid[j][L].length-1;if(R0)for(var j=L;j<=O;j++)z[3]+=this.grid[m-1][j].length+this.grid[m][j].length-1;for(var F=S.MAX_VALUE,M,b,q=0;q{var s=e(551).FDLayoutNode,n=e(551).IMath;function f(a,l,g,h){s.call(this,a,l,g,h)}f.prototype=Object.create(s.prototype);for(var t in s)f[t]=s[t];f.prototype.calculateDisplacement=function(){var a=this.graphManager.getLayout();this.getChild()!=null&&this.fixedNodeWeight?(this.displacementX+=a.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.fixedNodeWeight,this.displacementY+=a.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.fixedNodeWeight):(this.displacementX+=a.coolingFactor*(this.springForceX+this.repulsionForceX+this.gravitationForceX)/this.noOfChildren,this.displacementY+=a.coolingFactor*(this.springForceY+this.repulsionForceY+this.gravitationForceY)/this.noOfChildren),Math.abs(this.displacementX)>a.coolingFactor*a.maxNodeDisplacement&&(this.displacementX=a.coolingFactor*a.maxNodeDisplacement*n.sign(this.displacementX)),Math.abs(this.displacementY)>a.coolingFactor*a.maxNodeDisplacement&&(this.displacementY=a.coolingFactor*a.maxNodeDisplacement*n.sign(this.displacementY)),this.child&&this.child.getNodes().length>0&&this.propogateDisplacementToChildren(this.displacementX,this.displacementY)},f.prototype.propogateDisplacementToChildren=function(a,l){for(var g=this.getChild().getNodes(),h,N=0;N{function s(g){if(Array.isArray(g)){for(var h=0,N=Array(g.length);h0){var st=0;at.forEach(function(ut){D=="horizontal"?(tt.set(ut,c.has(ut)?y[c.get(ut)]:K.get(ut)),st+=tt.get(ut)):(tt.set(ut,c.has(ut)?A[c.get(ut)]:K.get(ut)),st+=tt.get(ut))}),st=st/at.length,dt.forEach(function(ut){W.has(ut)||tt.set(ut,st)})}else{var _t=0;dt.forEach(function(ut){D=="horizontal"?_t+=c.has(ut)?y[c.get(ut)]:K.get(ut):_t+=c.has(ut)?A[c.get(ut)]:K.get(ut)}),_t=_t/dt.length,dt.forEach(function(ut){tt.set(ut,_t)})}});for(var Nt=function(){var dt=rt.shift(),at=w.get(dt);at.forEach(function(st){if(tt.get(st.id)ut&&(ut=Yt),Qt<_t&&(_t=Qt),Qt>Rt&&(Rt=Qt)}}catch(Zt){wt=!0,At=Zt}finally{try{!Gt&&Xt.return&&Xt.return()}finally{if(wt)throw At}}var he=(st+ut)/2-(_t+Rt)/2,re=!0,Kt=!1,Jt=void 0;try{for(var jt=dt[Symbol.iterator](),te;!(re=(te=jt.next()).done);re=!0){var oe=te.value;tt.set(oe,tt.get(oe)+he)}}catch(Zt){Kt=!0,Jt=Zt}finally{try{!re&&jt.return&&jt.return()}finally{if(Kt)throw Jt}}})}return tt},ot=function(w){var D=0,W=0,K=0,Z=0;if(w.forEach(function(gt){gt.left?y[c.get(gt.left)]-y[c.get(gt.right)]>=0?D++:W++:A[c.get(gt.top)]-A[c.get(gt.bottom)]>=0?K++:Z++}),D>W&&K>Z)for(var pt=0;ptW)for(var lt=0;ltZ)for(var tt=0;tt1)h.fixedNodeConstraint.forEach(function(w,D){v[D]=[w.position.x,w.position.y],m[D]=[y[c.get(w.nodeId)],A[c.get(w.nodeId)]]}),R=!0;else if(h.alignmentConstraint)(function(){var w=0;if(h.alignmentConstraint.vertical){for(var D=h.alignmentConstraint.vertical,W=function(tt){var gt=new Set;D[tt].forEach(function(yt){gt.add(yt)});var rt=new Set([].concat(s(gt)).filter(function(yt){return O.has(yt)})),Nt=void 0;rt.size>0?Nt=y[c.get(rt.values().next().value)]:Nt=Q(gt).x,D[tt].forEach(function(yt){v[w]=[Nt,A[c.get(yt)]],m[w]=[y[c.get(yt)],A[c.get(yt)]],w++})},K=0;K0?Nt=y[c.get(rt.values().next().value)]:Nt=Q(gt).y,Z[tt].forEach(function(yt){v[w]=[y[c.get(yt)],Nt],m[w]=[y[c.get(yt)],A[c.get(yt)]],w++})},lt=0;ltV&&(V=B[j].length,z=j);if(V0){var It={x:0,y:0};h.fixedNodeConstraint.forEach(function(w,D){var W={x:y[c.get(w.nodeId)],y:A[c.get(w.nodeId)]},K=w.position,Z=X(K,W);It.x+=Z.x,It.y+=Z.y}),It.x/=h.fixedNodeConstraint.length,It.y/=h.fixedNodeConstraint.length,y.forEach(function(w,D){y[D]+=It.x}),A.forEach(function(w,D){A[D]+=It.y}),h.fixedNodeConstraint.forEach(function(w){y[c.get(w.nodeId)]=w.position.x,A[c.get(w.nodeId)]=w.position.y})}if(h.alignmentConstraint){if(h.alignmentConstraint.vertical)for(var Vt=h.alignmentConstraint.vertical,bt=function(w){var D=new Set;Vt[w].forEach(function(Z){D.add(Z)});var W=new Set([].concat(s(D)).filter(function(Z){return O.has(Z)})),K=void 0;W.size>0?K=y[c.get(W.values().next().value)]:K=Q(D).x,D.forEach(function(Z){O.has(Z)||(y[c.get(Z)]=K)})},St=0;St0?K=A[c.get(W.values().next().value)]:K=Q(D).y,D.forEach(function(Z){O.has(Z)||(A[c.get(Z)]=K)})},Ft=0;Ft{o.exports=x})},T={};function u(o){var i=T[o];if(i!==void 0)return i.exports;var e=T[o]={exports:{}};return Y[o](e,e.exports,u),e.exports}var d=u(45);return d})()})})(pe)),pe.exports}var mi=fe.exports,Me;function yi(){return Me||(Me=1,(function(I,H){(function(x,Y){I.exports=Y(vi())})(mi,function(x){return(()=>{var Y={658:(o=>{o.exports=Object.assign!=null?Object.assign.bind(Object):function(i){for(var e=arguments.length,s=Array(e>1?e-1:0),n=1;n{var s=(function(){function t(a,l){var g=[],h=!0,N=!1,c=void 0;try{for(var y=a[Symbol.iterator](),A;!(h=(A=y.next()).done)&&(g.push(A.value),!(l&&g.length===l));h=!0);}catch(_){N=!0,c=_}finally{try{!h&&y.return&&y.return()}finally{if(N)throw c}}return g}return function(a,l){if(Array.isArray(a))return a;if(Symbol.iterator in Object(a))return t(a,l);throw new TypeError("Invalid attempt to destructure non-iterable instance")}})(),n=e(140).layoutBase.LinkedList,f={};f.getTopMostNodes=function(t){for(var a={},l=0;l0&&v.merge(O)});for(var m=0;m1){A=c[0],_=A.connectedEdges().length,c.forEach(function(v){v.connectedEdges().length<_&&(_=v.connectedEdges().length,A=v)}),k.push(A.id());var p=t.collection();p.merge(c[0]),c.forEach(function(v){p.merge(v)}),c=[],l=l.difference(p),U++}};do Q();while(!S);return g&&k.length>0&&g.set("dummy"+(g.size+1),k),X},f.relocateComponent=function(t,a,l){if(!l.fixedNodeConstraint){var g=Number.POSITIVE_INFINITY,h=Number.NEGATIVE_INFINITY,N=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY;if(l.quality=="draft"){var y=!0,A=!1,_=void 0;try{for(var S=a.nodeIndexes[Symbol.iterator](),U;!(y=(U=S.next()).done);y=!0){var k=U.value,X=s(k,2),Q=X[0],C=X[1],ot=l.cy.getElementById(Q);if(ot){var r=ot.boundingBox(),E=a.xCoords[C]-r.w/2,p=a.xCoords[C]+r.w/2,v=a.yCoords[C]-r.h/2,m=a.yCoords[C]+r.h/2;Eh&&(h=p),vc&&(c=m)}}}catch(G){A=!0,_=G}finally{try{!y&&S.return&&S.return()}finally{if(A)throw _}}var R=t.x-(h+g)/2,L=t.y-(c+N)/2;a.xCoords=a.xCoords.map(function(G){return G+R}),a.yCoords=a.yCoords.map(function(G){return G+L})}else{Object.keys(a).forEach(function(G){var B=a[G],V=B.getRect().x,z=B.getRect().x+B.getRect().width,j=B.getRect().y,F=B.getRect().y+B.getRect().height;Vh&&(h=z),jc&&(c=F)});var O=t.x-(h+g)/2,P=t.y-(c+N)/2;Object.keys(a).forEach(function(G){var B=a[G];B.setCenter(B.getCenterX()+O,B.getCenterY()+P)})}}},f.calcBoundingBox=function(t,a,l,g){for(var h=Number.MAX_SAFE_INTEGER,N=Number.MIN_SAFE_INTEGER,c=Number.MAX_SAFE_INTEGER,y=Number.MIN_SAFE_INTEGER,A=void 0,_=void 0,S=void 0,U=void 0,k=t.descendants().not(":parent"),X=k.length,Q=0;QA&&(h=A),N<_&&(N=_),c>S&&(c=S),y{var s=e(548),n=e(140).CoSELayout,f=e(140).CoSENode,t=e(140).layoutBase.PointD,a=e(140).layoutBase.DimensionD,l=e(140).layoutBase.LayoutConstants,g=e(140).layoutBase.FDLayoutConstants,h=e(140).CoSEConstants,N=function(c,y){var A=c.cy,_=c.eles,S=_.nodes(),U=_.edges(),k=void 0,X=void 0,Q=void 0,C={};c.randomize&&(k=y.nodeIndexes,X=y.xCoords,Q=y.yCoords);var ot=function(O){return typeof O=="function"},r=function(O,P){return ot(O)?O(P):O},E=s.calcParentsWithoutChildren(A,_),p=function O(P,G,B,V){for(var z=G.length,j=0;j0){var vt=void 0;vt=B.getGraphManager().add(B.newGraph(),b),O(vt,M,B,V)}}},v=function(O,P,G){for(var B=0,V=0,z=0;z0?h.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=B/V:ot(c.idealEdgeLength)?h.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=50:h.DEFAULT_EDGE_LENGTH=g.DEFAULT_EDGE_LENGTH=c.idealEdgeLength,h.MIN_REPULSION_DIST=g.MIN_REPULSION_DIST=g.DEFAULT_EDGE_LENGTH/10,h.DEFAULT_RADIAL_SEPARATION=g.DEFAULT_EDGE_LENGTH)},m=function(O,P){P.fixedNodeConstraint&&(O.constraints.fixedNodeConstraint=P.fixedNodeConstraint),P.alignmentConstraint&&(O.constraints.alignmentConstraint=P.alignmentConstraint),P.relativePlacementConstraint&&(O.constraints.relativePlacementConstraint=P.relativePlacementConstraint)};c.nestingFactor!=null&&(h.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=g.PER_LEVEL_IDEAL_EDGE_LENGTH_FACTOR=c.nestingFactor),c.gravity!=null&&(h.DEFAULT_GRAVITY_STRENGTH=g.DEFAULT_GRAVITY_STRENGTH=c.gravity),c.numIter!=null&&(h.MAX_ITERATIONS=g.MAX_ITERATIONS=c.numIter),c.gravityRange!=null&&(h.DEFAULT_GRAVITY_RANGE_FACTOR=g.DEFAULT_GRAVITY_RANGE_FACTOR=c.gravityRange),c.gravityCompound!=null&&(h.DEFAULT_COMPOUND_GRAVITY_STRENGTH=g.DEFAULT_COMPOUND_GRAVITY_STRENGTH=c.gravityCompound),c.gravityRangeCompound!=null&&(h.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=g.DEFAULT_COMPOUND_GRAVITY_RANGE_FACTOR=c.gravityRangeCompound),c.initialEnergyOnIncremental!=null&&(h.DEFAULT_COOLING_FACTOR_INCREMENTAL=g.DEFAULT_COOLING_FACTOR_INCREMENTAL=c.initialEnergyOnIncremental),c.tilingCompareBy!=null&&(h.TILING_COMPARE_BY=c.tilingCompareBy),c.quality=="proof"?l.QUALITY=2:l.QUALITY=0,h.NODE_DIMENSIONS_INCLUDE_LABELS=g.NODE_DIMENSIONS_INCLUDE_LABELS=l.NODE_DIMENSIONS_INCLUDE_LABELS=c.nodeDimensionsIncludeLabels,h.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=l.DEFAULT_INCREMENTAL=!c.randomize,h.ANIMATE=g.ANIMATE=l.ANIMATE=c.animate,h.TILE=c.tile,h.TILING_PADDING_VERTICAL=typeof c.tilingPaddingVertical=="function"?c.tilingPaddingVertical.call():c.tilingPaddingVertical,h.TILING_PADDING_HORIZONTAL=typeof c.tilingPaddingHorizontal=="function"?c.tilingPaddingHorizontal.call():c.tilingPaddingHorizontal,h.DEFAULT_INCREMENTAL=g.DEFAULT_INCREMENTAL=l.DEFAULT_INCREMENTAL=!0,h.PURE_INCREMENTAL=!c.randomize,l.DEFAULT_UNIFORM_LEAF_NODE_SIZES=c.uniformNodeDimensions,c.step=="transformed"&&(h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0,h.ENFORCE_CONSTRAINTS=!1,h.APPLY_LAYOUT=!1),c.step=="enforced"&&(h.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!1),c.step=="cose"&&(h.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,h.ENFORCE_CONSTRAINTS=!1,h.APPLY_LAYOUT=!0),c.step=="all"&&(c.randomize?h.TRANSFORM_ON_CONSTRAINT_HANDLING=!0:h.TRANSFORM_ON_CONSTRAINT_HANDLING=!1,h.ENFORCE_CONSTRAINTS=!0,h.APPLY_LAYOUT=!0),c.fixedNodeConstraint||c.alignmentConstraint||c.relativePlacementConstraint?h.TREE_REDUCTION_ON_INCREMENTAL=!1:h.TREE_REDUCTION_ON_INCREMENTAL=!0;var R=new n,L=R.newGraphManager();return p(L.addRoot(),s.getTopMostNodes(S),R,c),v(R,L,U),m(R,c),R.runLayout(),C};o.exports={coseLayout:N}}),212:((o,i,e)=>{var s=(function(){function y(A,_){for(var S=0;S<_.length;S++){var U=_[S];U.enumerable=U.enumerable||!1,U.configurable=!0,"value"in U&&(U.writable=!0),Object.defineProperty(A,U.key,U)}}return function(A,_,S){return _&&y(A.prototype,_),S&&y(A,S),A}})();function n(y,A){if(!(y instanceof A))throw new TypeError("Cannot call a class as a function")}var f=e(658),t=e(548),a=e(657),l=a.spectralLayout,g=e(816),h=g.coseLayout,N=Object.freeze({quality:"default",randomize:!0,animate:!0,animationDuration:1e3,animationEasing:void 0,fit:!0,padding:30,nodeDimensionsIncludeLabels:!1,uniformNodeDimensions:!1,packComponents:!0,step:"all",samplingType:!0,sampleSize:25,nodeSeparation:75,piTol:1e-7,nodeRepulsion:function(y){return 4500},idealEdgeLength:function(y){return 50},edgeElasticity:function(y){return .45},nestingFactor:.1,gravity:.25,numIter:2500,tile:!0,tilingCompareBy:void 0,tilingPaddingVertical:10,tilingPaddingHorizontal:10,gravityRangeCompound:1.5,gravityCompound:1,gravityRange:3.8,initialEnergyOnIncremental:.3,fixedNodeConstraint:void 0,alignmentConstraint:void 0,relativePlacementConstraint:void 0,ready:function(){},stop:function(){}}),c=(function(){function y(A){n(this,y),this.options=f({},N,A)}return s(y,[{key:"run",value:function(){var A=this,_=this.options,S=_.cy,U=_.eles,k=[],X=[],Q=void 0,C=[];_.fixedNodeConstraint&&(!Array.isArray(_.fixedNodeConstraint)||_.fixedNodeConstraint.length==0)&&(_.fixedNodeConstraint=void 0),_.alignmentConstraint&&(_.alignmentConstraint.vertical&&(!Array.isArray(_.alignmentConstraint.vertical)||_.alignmentConstraint.vertical.length==0)&&(_.alignmentConstraint.vertical=void 0),_.alignmentConstraint.horizontal&&(!Array.isArray(_.alignmentConstraint.horizontal)||_.alignmentConstraint.horizontal.length==0)&&(_.alignmentConstraint.horizontal=void 0)),_.relativePlacementConstraint&&(!Array.isArray(_.relativePlacementConstraint)||_.relativePlacementConstraint.length==0)&&(_.relativePlacementConstraint=void 0);var ot=_.fixedNodeConstraint||_.alignmentConstraint||_.relativePlacementConstraint;ot&&(_.tile=!1,_.packComponents=!1);var r=void 0,E=!1;if(S.layoutUtilities&&_.packComponents&&(r=S.layoutUtilities("get"),r||(r=S.layoutUtilities()),E=!0),U.nodes().length>0)if(E){var p=t.getTopMostNodes(_.eles.nodes());if(Q=t.connectComponents(S,_.eles,p),Q.forEach(function(J){var nt=J.boundingBox();C.push({x:nt.x1+nt.w/2,y:nt.y1+nt.h/2})}),_.randomize&&Q.forEach(function(J){_.eles=J,k.push(l(_))}),_.quality=="default"||_.quality=="proof"){var v=S.collection();if(_.tile){var m=new Map,R=[],L=[],O=0,P={nodeIndexes:m,xCoords:R,yCoords:L},G=[];if(Q.forEach(function(J,nt){J.edges().length==0&&(J.nodes().forEach(function(mt,ht){v.merge(J.nodes()[ht]),mt.isParent()||(P.nodeIndexes.set(J.nodes()[ht].id(),O++),P.xCoords.push(J.nodes()[0].position().x),P.yCoords.push(J.nodes()[0].position().y))}),G.push(nt))}),v.length>1){var B=v.boundingBox();C.push({x:B.x1+B.w/2,y:B.y1+B.h/2}),Q.push(v),k.push(P);for(var V=G.length-1;V>=0;V--)Q.splice(G[V],1),k.splice(G[V],1),C.splice(G[V],1)}}Q.forEach(function(J,nt){_.eles=J,X.push(h(_,k[nt])),t.relocateComponent(C[nt],X[nt],_)})}else Q.forEach(function(J,nt){t.relocateComponent(C[nt],k[nt],_)});var z=new Set;if(Q.length>1){var j=[],F=U.filter(function(J){return J.css("display")=="none"});Q.forEach(function(J,nt){var mt=void 0;if(_.quality=="draft"&&(mt=k[nt].nodeIndexes),J.nodes().not(F).length>0){var ht={};ht.edges=[],ht.nodes=[];var xt=void 0;J.nodes().not(F).forEach(function(Lt){if(_.quality=="draft")if(!Lt.isParent())xt=mt.get(Lt.id()),ht.nodes.push({x:k[nt].xCoords[xt]-Lt.boundingbox().w/2,y:k[nt].yCoords[xt]-Lt.boundingbox().h/2,width:Lt.boundingbox().w,height:Lt.boundingbox().h});else{var Tt=t.calcBoundingBox(Lt,k[nt].xCoords,k[nt].yCoords,mt);ht.nodes.push({x:Tt.topLeftX,y:Tt.topLeftY,width:Tt.width,height:Tt.height})}else X[nt][Lt.id()]&&ht.nodes.push({x:X[nt][Lt.id()].getLeft(),y:X[nt][Lt.id()].getTop(),width:X[nt][Lt.id()].getWidth(),height:X[nt][Lt.id()].getHeight()})}),J.edges().forEach(function(Lt){var Tt=Lt.source(),It=Lt.target();if(Tt.css("display")!="none"&&It.css("display")!="none")if(_.quality=="draft"){var Vt=mt.get(Tt.id()),bt=mt.get(It.id()),St=[],kt=[];if(Tt.isParent()){var Bt=t.calcBoundingBox(Tt,k[nt].xCoords,k[nt].yCoords,mt);St.push(Bt.topLeftX+Bt.width/2),St.push(Bt.topLeftY+Bt.height/2)}else St.push(k[nt].xCoords[Vt]),St.push(k[nt].yCoords[Vt]);if(It.isParent()){var Ft=t.calcBoundingBox(It,k[nt].xCoords,k[nt].yCoords,mt);kt.push(Ft.topLeftX+Ft.width/2),kt.push(Ft.topLeftY+Ft.height/2)}else kt.push(k[nt].xCoords[bt]),kt.push(k[nt].yCoords[bt]);ht.edges.push({startX:St[0],startY:St[1],endX:kt[0],endY:kt[1]})}else X[nt][Tt.id()]&&X[nt][It.id()]&&ht.edges.push({startX:X[nt][Tt.id()].getCenterX(),startY:X[nt][Tt.id()].getCenterY(),endX:X[nt][It.id()].getCenterX(),endY:X[nt][It.id()].getCenterY()})}),ht.nodes.length>0&&(j.push(ht),z.add(nt))}});var M=r.packComponents(j,_.randomize).shifts;if(_.quality=="draft")k.forEach(function(J,nt){var mt=J.xCoords.map(function(xt){return xt+M[nt].dx}),ht=J.yCoords.map(function(xt){return xt+M[nt].dy});J.xCoords=mt,J.yCoords=ht});else{var b=0;z.forEach(function(J){Object.keys(X[J]).forEach(function(nt){var mt=X[J][nt];mt.setCenter(mt.getCenterX()+M[b].dx,mt.getCenterY()+M[b].dy)}),b++})}}}else{var q=_.eles.boundingBox();if(C.push({x:q.x1+q.w/2,y:q.y1+q.h/2}),_.randomize){var et=l(_);k.push(et)}_.quality=="default"||_.quality=="proof"?(X.push(h(_,k[0])),t.relocateComponent(C[0],X[0],_)):t.relocateComponent(C[0],k[0],_)}var vt=function(J,nt){if(_.quality=="default"||_.quality=="proof"){typeof J=="number"&&(J=nt);var mt=void 0,ht=void 0,xt=J.data("id");return X.forEach(function(Tt){xt in Tt&&(mt={x:Tt[xt].getRect().getCenterX(),y:Tt[xt].getRect().getCenterY()},ht=Tt[xt])}),_.nodeDimensionsIncludeLabels&&(ht.labelWidth&&(ht.labelPosHorizontal=="left"?mt.x+=ht.labelWidth/2:ht.labelPosHorizontal=="right"&&(mt.x-=ht.labelWidth/2)),ht.labelHeight&&(ht.labelPosVertical=="top"?mt.y+=ht.labelHeight/2:ht.labelPosVertical=="bottom"&&(mt.y-=ht.labelHeight/2))),mt==null&&(mt={x:J.position("x"),y:J.position("y")}),{x:mt.x,y:mt.y}}else{var Lt=void 0;return k.forEach(function(Tt){var It=Tt.nodeIndexes.get(J.id());It!=null&&(Lt={x:Tt.xCoords[It],y:Tt.yCoords[It]})}),Lt==null&&(Lt={x:J.position("x"),y:J.position("y")}),{x:Lt.x,y:Lt.y}}};if(_.quality=="default"||_.quality=="proof"||_.randomize){var $=t.calcParentsWithoutChildren(S,U),Mt=U.filter(function(J){return J.css("display")=="none"});_.eles=U.not(Mt),U.nodes().not(":parent").not(Mt).layoutPositions(A,_,vt),$.length>0&&$.forEach(function(J){J.position(vt(J))})}else console.log("If randomize option is set to false, then quality option must be 'default' or 'proof'.")}}]),y})();o.exports=c}),657:((o,i,e)=>{var s=e(548),n=e(140).layoutBase.Matrix,f=e(140).layoutBase.SVD,t=function(a){var l=a.cy,g=a.eles,h=g.nodes(),N=g.nodes(":parent"),c=new Map,y=new Map,A=new Map,_=[],S=[],U=[],k=[],X=[],Q=[],C=[],ot=[],r=void 0,E=1e8,p=1e-9,v=a.piTol,m=a.samplingType,R=a.nodeSeparation,L=void 0,O=function(){for(var ct=0,w=0,D=!1;w=K;){pt=W[K++];for(var yt=_[pt],Ot=0;Otgt&&(gt=X[at],rt=at)}return rt},G=function(ct){var w=void 0;if(ct){w=Math.floor(Math.random()*r);for(var D=0;D=1)break;tt=lt}for(var Nt=0;Nt=1)break;tt=lt}for(var Ot=0;Ot0&&(D.isParent()?_[w].push(A.get(D.id())):_[w].push(D.id()))})});var Mt=function(ct){var w=y.get(ct),D=void 0;c.get(ct).forEach(function(W){l.getElementById(W).isParent()?D=A.get(W):D=W,_[w].push(D),_[y.get(D)].push(ct)})},J=!0,nt=!1,mt=void 0;try{for(var ht=c.keys()[Symbol.iterator](),xt;!(J=(xt=ht.next()).done);J=!0){var Lt=xt.value;Mt(Lt)}}catch(ct){nt=!0,mt=ct}finally{try{!J&&ht.return&&ht.return()}finally{if(nt)throw mt}}r=y.size;var Tt=void 0;if(r>2){L=r{var s=e(212),n=function(f){f&&f("layout","fcose",s)};typeof cytoscape<"u"&&n(cytoscape),o.exports=n}),140:(o=>{o.exports=x})},T={};function u(o){var i=T[o];if(i!==void 0)return i.exports;var e=T[o]={exports:{}};return Y[o](e,e.exports,u),e.exports}var d=u(579);return d})()})})(fe)),fe.exports}var Ei=yi();const Ni=li(Ei);var Re={L:"left",R:"right",T:"top",B:"bottom"},De={L:it(I=>`${I},${I/2} 0,${I} 0,0`,"L"),R:it(I=>`0,${I/2} ${I},0 ${I},${I}`,"R"),T:it(I=>`0,0 ${I},0 ${I/2},${I}`,"T"),B:it(I=>`${I/2},0 ${I},${I} 0,${I}`,"B")},ae={L:it((I,H)=>I-H+2,"L"),R:it((I,H)=>I-2,"R"),T:it((I,H)=>I-H+2,"T"),B:it((I,H)=>I-2,"B")},Ti=it(function(I){return Ht(I)?I==="L"?"R":"L":I==="T"?"B":"T"},"getOppositeArchitectureDirection"),be=it(function(I){const H=I;return H==="L"||H==="R"||H==="T"||H==="B"},"isArchitectureDirection"),Ht=it(function(I){const H=I;return H==="L"||H==="R"},"isArchitectureDirectionX"),qt=it(function(I){const H=I;return H==="T"||H==="B"},"isArchitectureDirectionY"),Te=it(function(I,H){const x=Ht(I)&&qt(H),Y=qt(I)&&Ht(H);return x||Y},"isArchitectureDirectionXY"),Ai=it(function(I){const H=I[0],x=I[1],Y=Ht(H)&&qt(x),T=qt(H)&&Ht(x);return Y||T},"isArchitecturePairXY"),Ii=it(function(I){return I!=="LL"&&I!=="RR"&&I!=="TT"&&I!=="BB"},"isValidArchitectureDirectionPair"),me=it(function(I,H){const x=`${I}${H}`;return Ii(x)?x:void 0},"getArchitectureDirectionPair"),_i=it(function([I,H],x){const Y=x[0],T=x[1];return Ht(Y)?qt(T)?[I+(Y==="L"?-1:1),H+(T==="T"?1:-1)]:[I+(Y==="L"?-1:1),H]:Ht(T)?[I+(T==="L"?1:-1),H+(Y==="T"?1:-1)]:[I,H+(Y==="T"?1:-1)]},"shiftPositionByArchitectureDirectionPair"),wi=it(function(I){return I==="LT"||I==="TL"?[1,1]:I==="BL"||I==="LB"?[1,-1]:I==="BR"||I==="RB"?[-1,-1]:[-1,1]},"getArchitectureDirectionXYFactors"),xi=it(function(I,H){return Te(I,H)?"bend":Ht(I)?"horizontal":"vertical"},"getArchitectureDirectionAlignment"),Li=it(function(I){return I.type==="service"},"isArchitectureService"),Ci=it(function(I){return I.type==="junction"},"isArchitectureJunction"),Pe=it(I=>I.data(),"edgeData"),ie=it(I=>I.data(),"nodeData"),ke=ni.architecture,Et=new ci(()=>({nodes:{},groups:{},edges:[],registeredIds:{},config:ke,dataStructures:void 0,elements:{}})),Oi=it(()=>{Et.reset(),oi()},"clear"),Mi=it(function({id:I,icon:H,in:x,title:Y,iconText:T}){if(Et.records.registeredIds[I]!==void 0)throw new Error(`The service id [${I}] is already in use by another ${Et.records.registeredIds[I]}`);if(x!==void 0){if(I===x)throw new Error(`The service [${I}] cannot be placed within itself`);if(Et.records.registeredIds[x]===void 0)throw new Error(`The service [${I}]'s parent does not exist. Please make sure the parent is created before this service`);if(Et.records.registeredIds[x]==="node")throw new Error(`The service [${I}]'s parent is not a group`)}Et.records.registeredIds[I]="node",Et.records.nodes[I]={id:I,type:"service",icon:H,iconText:T,title:Y,edges:[],in:x}},"addService"),Ri=it(()=>Object.values(Et.records.nodes).filter(Li),"getServices"),Di=it(function({id:I,in:H}){Et.records.registeredIds[I]="node",Et.records.nodes[I]={id:I,type:"junction",edges:[],in:H}},"addJunction"),bi=it(()=>Object.values(Et.records.nodes).filter(Ci),"getJunctions"),Si=it(()=>Object.values(Et.records.nodes),"getNodes"),ye=it(I=>Et.records.nodes[I],"getNode"),Fi=it(function({id:I,icon:H,in:x,title:Y}){if(Et.records.registeredIds[I]!==void 0)throw new Error(`The group id [${I}] is already in use by another ${Et.records.registeredIds[I]}`);if(x!==void 0){if(I===x)throw new Error(`The group [${I}] cannot be placed within itself`);if(Et.records.registeredIds[x]===void 0)throw new Error(`The group [${I}]'s parent does not exist. Please make sure the parent is created before this group`);if(Et.records.registeredIds[x]==="node")throw new Error(`The group [${I}]'s parent is not a group`)}Et.records.registeredIds[I]="group",Et.records.groups[I]={id:I,icon:H,title:Y,in:x}},"addGroup"),Pi=it(()=>Object.values(Et.records.groups),"getGroups"),ki=it(function({lhsId:I,rhsId:H,lhsDir:x,rhsDir:Y,lhsInto:T,rhsInto:u,lhsGroup:d,rhsGroup:o,title:i}){if(!be(x))throw new Error(`Invalid direction given for left hand side of edge ${I}--${H}. Expected (L,R,T,B) got ${x}`);if(!be(Y))throw new Error(`Invalid direction given for right hand side of edge ${I}--${H}. Expected (L,R,T,B) got ${Y}`);if(Et.records.nodes[I]===void 0&&Et.records.groups[I]===void 0)throw new Error(`The left-hand id [${I}] does not yet exist. Please create the service/group before declaring an edge to it.`);if(Et.records.nodes[H]===void 0&&Et.records.groups[I]===void 0)throw new Error(`The right-hand id [${H}] does not yet exist. Please create the service/group before declaring an edge to it.`);const e=Et.records.nodes[I].in,s=Et.records.nodes[H].in;if(d&&e&&s&&e==s)throw new Error(`The left-hand id [${I}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);if(o&&e&&s&&e==s)throw new Error(`The right-hand id [${H}] is modified to traverse the group boundary, but the edge does not pass through two groups.`);const n={lhsId:I,lhsDir:x,lhsInto:T,lhsGroup:d,rhsId:H,rhsDir:Y,rhsInto:u,rhsGroup:o,title:i};Et.records.edges.push(n),Et.records.nodes[I]&&Et.records.nodes[H]&&(Et.records.nodes[I].edges.push(Et.records.edges[Et.records.edges.length-1]),Et.records.nodes[H].edges.push(Et.records.edges[Et.records.edges.length-1]))},"addEdge"),Gi=it(()=>Et.records.edges,"getEdges"),Yi=it(()=>{if(Et.records.dataStructures===void 0){const I={},H=Object.entries(Et.records.nodes).reduce((o,[i,e])=>(o[i]=e.edges.reduce((s,n)=>{const f=ye(n.lhsId)?.in,t=ye(n.rhsId)?.in;if(f&&t&&f!==t){const a=xi(n.lhsDir,n.rhsDir);a!=="bend"&&(I[f]??={},I[f][t]=a,I[t]??={},I[t][f]=a)}if(n.lhsId===i){const a=me(n.lhsDir,n.rhsDir);a&&(s[a]=n.rhsId)}else{const a=me(n.rhsDir,n.lhsDir);a&&(s[a]=n.lhsId)}return s},{}),o),{}),x=Object.keys(H)[0],Y={[x]:1},T=Object.keys(H).reduce((o,i)=>i===x?o:{...o,[i]:1},{}),u=it(o=>{const i={[o]:[0,0]},e=[o];for(;e.length>0;){const s=e.shift();if(s){Y[s]=1,delete T[s];const n=H[s],[f,t]=i[s];Object.entries(n).forEach(([a,l])=>{Y[l]||(i[l]=_i([f,t],a),e.push(l))})}}return i},"BFS"),d=[u(x)];for(;Object.keys(T).length>0;)d.push(u(Object.keys(T)[0]));Et.records.dataStructures={adjList:H,spatialMaps:d,groupAlignments:I}}return Et.records.dataStructures},"getDataStructures"),Ui=it((I,H)=>{Et.records.elements[I]=H},"setElementForId"),Hi=it(I=>Et.records.elements[I],"getElementById"),Ge=it(()=>ii({...ke,...ri().architecture}),"getConfig"),se={clear:Oi,setDiagramTitle:Je,getDiagramTitle:Ke,setAccTitle:Qe,getAccTitle:Ze,setAccDescription:je,getAccDescription:qe,getConfig:Ge,addService:Mi,getServices:Ri,addJunction:Di,getJunctions:bi,getNodes:Si,getNode:ye,addGroup:Fi,getGroups:Pi,addEdge:ki,getEdges:Gi,setElementForId:Ui,getElementById:Hi,getDataStructures:Yi};function Pt(I){return Ge()[I]}it(Pt,"getConfigField");var Xi=it((I,H)=>{di(I,H),I.groups.map(H.addGroup),I.services.map(x=>H.addService({...x,type:"service"})),I.junctions.map(x=>H.addJunction({...x,type:"junction"})),I.edges.map(H.addEdge)},"populateDb"),zi={parse:it(async I=>{const H=await gi("architecture",I);Se.debug(H),Xi(H,se)},"parse")},Vi=it(I=>` .edge { stroke-width: ${I.archEdgeWidth}; stroke: ${I.archEdgeColor}; diff --git a/assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js b/assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js similarity index 95% rename from assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js rename to assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js index 1b7194e..e60b3bd 100644 --- a/assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js +++ b/assets/chunks/basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js @@ -1 +1 @@ -import{b,E as l,R as d,w as $,e as w,P as h,h as x,y,L as P,A as j,q as X}from"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import{k as _,x as m,p as k,g as q,m as A,a2 as E,T as v,$ as N,U as R,C as T}from"../app.DiEjJ8gz.js";var U=/\s/;function C(n){for(var t=n.length;t--&&U.test(n.charAt(t)););return t}var M=/^\s+/;function z(n){return n&&n.slice(0,C(n)+1).replace(M,"")}var p=NaN,B=/^[-+]0x[0-9a-f]+$/i,D=/^0b[01]+$/i,F=/^0o[0-7]+$/i,G=parseInt;function H(n){if(typeof n=="number")return n;if(h(n))return p;if(v(n)){var t=typeof n.valueOf=="function"?n.valueOf():n;n=v(t)?t+"":t}if(typeof n!="string")return n===0?n:+n;n=z(n);var a=D.test(n);return a||F.test(n)?G(n.slice(2),a?2:8):B.test(n)?p:+n}var g=1/0,I=17976931348623157e292;function K(n){if(!n)return n===0?n:0;if(n=H(n),n===g||n===-g){var t=n<0?-1:1;return t*I}return n===n?n:0}function L(n){var t=K(n),a=t%1;return t===t?a?t-a:t:0}function on(n){var t=n==null?0:n.length;return t?$(n):[]}var O=Object.prototype,V=O.hasOwnProperty,fn=k(function(n,t){n=Object(n);var a=-1,e=t.length,r=e>2?t[2]:void 0;for(r&&q(t[0],t[1],r)&&(e=1);++a-1?r[i?t[u]:u]:void 0}}var Z=Math.max;function J(n,t,a){var e=n==null?0:n.length;if(!e)return-1;var r=a==null?0:L(a);return r<0&&(r=Z(e+r,0)),X(n,l(t),r)}var cn=W(J);function Q(n,t){var a=-1,e=m(n)?Array(n.length):[];return d(n,function(r,i,u){e[++a]=t(r,i,u)}),e}function vn(n,t){var a=_(n)?b:Q;return a(n,l(t))}var S=Object.prototype,Y=S.hasOwnProperty;function nn(n,t){return n!=null&&Y.call(n,t)}function ln(n,t){return n!=null&&w(n,t,nn)}function tn(n,t){return n2?t[2]:void 0;for(r&&q(t[0],t[1],r)&&(e=1);++a-1?r[i?t[u]:u]:void 0}}var Z=Math.max;function J(n,t,a){var e=n==null?0:n.length;if(!e)return-1;var r=a==null?0:L(a);return r<0&&(r=Z(e+r,0)),X(n,l(t),r)}var cn=W(J);function Q(n,t){var a=-1,e=m(n)?Array(n.length):[];return d(n,function(r,i,u){e[++a]=t(r,i,u)}),e}function vn(n,t){var a=_(n)?b:Q;return a(n,l(t))}var S=Object.prototype,Y=S.hasOwnProperty;function nn(n,t){return n!=null&&Y.call(n,t)}function ln(n,t){return n!=null&&w(n,t,nn)}function tn(n,t){return n-1}function m(e){return ue(e)?Le(e):Ee(e)}var Ze=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qe=/^\w*$/;function V(e,t){if(g(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||R(e)?!0:qe.test(e)||!Ze.test(e)||t!=null&&e in Object(t)}var et=500;function tt(e){var t=Ge(e,function(r){return n.size===et&&n.clear(),r}),n=t.cache;return t}var nt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rt=/\\(\\)?/g,at=tt(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(nt,function(n,r,o,a){t.push(o?a.replace(rt,"$1"):r||n)}),t});function ot(e){return e==null?"":be(e)}function pe(e,t){return g(e)?e:V(e,t)?[e]:at(ot(e))}function M(e){if(typeof e=="string"||R(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}function he(e,t){t=pe(t,e);for(var n=0,r=t.length;e!=null&&nc))return!1;var b=a.get(e),l=a.get(t);if(b&&l)return b==t&&l==e;var i=-1,v=!0,d=n&Un?new k:void 0;for(a.set(e,t),a.set(t,e);++i=dr){var b=t?null:gr(e);if(b)return G(b);u=!1,o=_e,f=new k}else f=t?[]:c;e:for(;++r-1}function m(e){return ue(e)?Le(e):Ee(e)}var Ze=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qe=/^\w*$/;function V(e,t){if(g(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||R(e)?!0:qe.test(e)||!Ze.test(e)||t!=null&&e in Object(t)}var et=500;function tt(e){var t=Ge(e,function(r){return n.size===et&&n.clear(),r}),n=t.cache;return t}var nt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rt=/\\(\\)?/g,at=tt(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(nt,function(n,r,o,a){t.push(o?a.replace(rt,"$1"):r||n)}),t});function ot(e){return e==null?"":be(e)}function pe(e,t){return g(e)?e:V(e,t)?[e]:at(ot(e))}function M(e){if(typeof e=="string"||R(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}function he(e,t){t=pe(t,e);for(var n=0,r=t.length;e!=null&&nc))return!1;var b=a.get(e),l=a.get(t);if(b&&l)return b==t&&l==e;var i=-1,v=!0,d=n&Un?new k:void 0;for(a.set(e,t),a.set(t,e);++i=dr){var b=t?null:gr(e);if(b)return G(b);u=!1,o=_e,f=new k}else f=t?[]:c;e:for(;++r"u"&&(z.yylloc={});var gt=z.yylloc;h.push(gt);var ne=z.options&&z.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function oe(Y){p.length=p.length-2*Y,E.length=E.length-Y,h.length=h.length-Y}g(oe,"popStack");function Dt(){var Y;return Y=m.pop()||z.lex()||H,typeof Y!="number"&&(Y instanceof Array&&(m=Y,Y=m.pop()),Y=c.symbols_[Y]||Y),Y}g(Dt,"lex");for(var P,Z,F,ut,G={},at,q,vt,st;;){if(Z=p[p.length-1],this.defaultActions[Z]?F=this.defaultActions[Z]:((P===null||typeof P>"u")&&(P=Dt()),F=_[Z]&&_[Z][P]),typeof F>"u"||!F.length||!F[0]){var yt="";st=[];for(at in _[Z])this.terminals_[at]&&at>V&&st.push("'"+this.terminals_[at]+"'");z.showPosition?yt="Parse error on line "+(A+1)+`: +import{l as le}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import{q as g,aB as rt,a9 as I,aa as ce,O as w,at as he,av as de,A as O,bq as ge,bb as ue,bi as ye,bf as pe,br as j,bp as Mt,b as be,am as J,ag as xe,bs as fe,bt as pt,bu as me,ad as Nt}from"../app.DfYWW83x.js";import{n as we}from"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";import{y as Le}from"./graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js";import{e as Se}from"./channel-CYBQPlIk-DDfBD8St.DUCXByQc.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";var bt=(function(){var e=g(function(v,c,p,m){for(p=p||{},m=v.length;m--;p[v[m]]=c);return p},"o"),t=[1,7],a=[1,13],n=[1,14],i=[1,15],r=[1,19],s=[1,16],o=[1,17],l=[1,18],u=[8,30],d=[8,21,28,29,30,31,32,40,44,47],b=[1,23],f=[1,24],x=[8,15,16,21,28,29,30,31,32,40,44,47],L=[8,15,16,21,27,28,29,30,31,32,40,44,47],S=[1,49],k={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,spaceLines:3,SPACELINE:4,NL:5,separator:6,SPACE:7,EOF:8,start:9,BLOCK_DIAGRAM_KEY:10,document:11,stop:12,statement:13,link:14,LINK:15,START_LINK:16,LINK_LABEL:17,STR:18,nodeStatement:19,columnsStatement:20,SPACE_BLOCK:21,blockStatement:22,classDefStatement:23,cssClassStatement:24,styleStatement:25,node:26,SIZE:27,COLUMNS:28,"id-block":29,end:30,block:31,NODE_ID:32,nodeShapeNLabel:33,dirList:34,DIR:35,NODE_DSTART:36,NODE_DEND:37,BLOCK_ARROW_START:38,BLOCK_ARROW_END:39,classDef:40,CLASSDEF_ID:41,CLASSDEF_STYLEOPTS:42,DEFAULT:43,class:44,CLASSENTITY_IDS:45,STYLECLASS:46,style:47,STYLE_ENTITY_IDS:48,STYLE_DEFINITION_DATA:49,$accept:0,$end:1},terminals_:{2:"error",4:"SPACELINE",5:"NL",7:"SPACE",8:"EOF",10:"BLOCK_DIAGRAM_KEY",15:"LINK",16:"START_LINK",17:"LINK_LABEL",18:"STR",21:"SPACE_BLOCK",27:"SIZE",28:"COLUMNS",29:"id-block",30:"end",31:"block",32:"NODE_ID",35:"DIR",36:"NODE_DSTART",37:"NODE_DEND",38:"BLOCK_ARROW_START",39:"BLOCK_ARROW_END",40:"classDef",41:"CLASSDEF_ID",42:"CLASSDEF_STYLEOPTS",43:"DEFAULT",44:"class",45:"CLASSENTITY_IDS",46:"STYLECLASS",47:"style",48:"STYLE_ENTITY_IDS",49:"STYLE_DEFINITION_DATA"},productions_:[0,[3,1],[3,2],[3,2],[6,1],[6,1],[6,1],[9,3],[12,1],[12,1],[12,2],[12,2],[11,1],[11,2],[14,1],[14,4],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[19,3],[19,2],[19,1],[20,1],[22,4],[22,3],[26,1],[26,2],[34,1],[34,2],[33,3],[33,4],[23,3],[23,3],[24,3],[25,3]],performAction:g(function(v,c,p,m,E,h,_){var y=h.length-1;switch(E){case 4:m.getLogger().debug("Rule: separator (NL) ");break;case 5:m.getLogger().debug("Rule: separator (Space) ");break;case 6:m.getLogger().debug("Rule: separator (EOF) ");break;case 7:m.getLogger().debug("Rule: hierarchy: ",h[y-1]),m.setHierarchy(h[y-1]);break;case 8:m.getLogger().debug("Stop NL ");break;case 9:m.getLogger().debug("Stop EOF ");break;case 10:m.getLogger().debug("Stop NL2 ");break;case 11:m.getLogger().debug("Stop EOF2 ");break;case 12:m.getLogger().debug("Rule: statement: ",h[y]),typeof h[y].length=="number"?this.$=h[y]:this.$=[h[y]];break;case 13:m.getLogger().debug("Rule: statement #2: ",h[y-1]),this.$=[h[y-1]].concat(h[y]);break;case 14:m.getLogger().debug("Rule: link: ",h[y],v),this.$={edgeTypeStr:h[y],label:""};break;case 15:m.getLogger().debug("Rule: LABEL link: ",h[y-3],h[y-1],h[y]),this.$={edgeTypeStr:h[y],label:h[y-1]};break;case 18:const A=parseInt(h[y]),B=m.generateId();this.$={id:B,type:"space",label:"",width:A,children:[]};break;case 23:m.getLogger().debug("Rule: (nodeStatement link node) ",h[y-2],h[y-1],h[y]," typestr: ",h[y-1].edgeTypeStr);const V=m.edgeStrToEdgeData(h[y-1].edgeTypeStr);this.$=[{id:h[y-2].id,label:h[y-2].label,type:h[y-2].type,directions:h[y-2].directions},{id:h[y-2].id+"-"+h[y].id,start:h[y-2].id,end:h[y].id,label:h[y-1].label,type:"edge",directions:h[y].directions,arrowTypeEnd:V,arrowTypeStart:"arrow_open"},{id:h[y].id,label:h[y].label,type:m.typeStr2Type(h[y].typeStr),directions:h[y].directions}];break;case 24:m.getLogger().debug("Rule: nodeStatement (abc88 node size) ",h[y-1],h[y]),this.$={id:h[y-1].id,label:h[y-1].label,type:m.typeStr2Type(h[y-1].typeStr),directions:h[y-1].directions,widthInColumns:parseInt(h[y],10)};break;case 25:m.getLogger().debug("Rule: nodeStatement (node) ",h[y]),this.$={id:h[y].id,label:h[y].label,type:m.typeStr2Type(h[y].typeStr),directions:h[y].directions,widthInColumns:1};break;case 26:m.getLogger().debug("APA123",this?this:"na"),m.getLogger().debug("COLUMNS: ",h[y]),this.$={type:"column-setting",columns:h[y]==="auto"?-1:parseInt(h[y])};break;case 27:m.getLogger().debug("Rule: id-block statement : ",h[y-2],h[y-1]),m.generateId(),this.$={...h[y-2],type:"composite",children:h[y-1]};break;case 28:m.getLogger().debug("Rule: blockStatement : ",h[y-2],h[y-1],h[y]);const H=m.generateId();this.$={id:H,type:"composite",label:"",children:h[y-1]};break;case 29:m.getLogger().debug("Rule: node (NODE_ID separator): ",h[y]),this.$={id:h[y]};break;case 30:m.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ",h[y-1],h[y]),this.$={id:h[y-1],label:h[y].label,typeStr:h[y].typeStr,directions:h[y].directions};break;case 31:m.getLogger().debug("Rule: dirList: ",h[y]),this.$=[h[y]];break;case 32:m.getLogger().debug("Rule: dirList: ",h[y-1],h[y]),this.$=[h[y-1]].concat(h[y]);break;case 33:m.getLogger().debug("Rule: nodeShapeNLabel: ",h[y-2],h[y-1],h[y]),this.$={typeStr:h[y-2]+h[y],label:h[y-1]};break;case 34:m.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ",h[y-3],h[y-2]," #3:",h[y-1],h[y]),this.$={typeStr:h[y-3]+h[y],label:h[y-2],directions:h[y-1]};break;case 35:case 36:this.$={type:"classDef",id:h[y-1].trim(),css:h[y].trim()};break;case 37:this.$={type:"applyClass",id:h[y-1].trim(),styleClass:h[y].trim()};break;case 38:this.$={type:"applyStyles",id:h[y-1].trim(),stylesStr:h[y].trim()};break}},"anonymous"),table:[{9:1,10:[1,2]},{1:[3]},{11:3,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:a,29:n,31:i,32:r,40:s,44:o,47:l},{8:[1,20]},e(u,[2,12],{13:4,19:5,20:6,22:8,23:9,24:10,25:11,26:12,11:21,21:t,28:a,29:n,31:i,32:r,40:s,44:o,47:l}),e(d,[2,16],{14:22,15:b,16:f}),e(d,[2,17]),e(d,[2,18]),e(d,[2,19]),e(d,[2,20]),e(d,[2,21]),e(d,[2,22]),e(x,[2,25],{27:[1,25]}),e(d,[2,26]),{19:26,26:12,32:r},{11:27,13:4,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:a,29:n,31:i,32:r,40:s,44:o,47:l},{41:[1,28],43:[1,29]},{45:[1,30]},{48:[1,31]},e(L,[2,29],{33:32,36:[1,33],38:[1,34]}),{1:[2,7]},e(u,[2,13]),{26:35,32:r},{32:[2,14]},{17:[1,36]},e(x,[2,24]),{11:37,13:4,14:22,15:b,16:f,19:5,20:6,21:t,22:8,23:9,24:10,25:11,26:12,28:a,29:n,31:i,32:r,40:s,44:o,47:l},{30:[1,38]},{42:[1,39]},{42:[1,40]},{46:[1,41]},{49:[1,42]},e(L,[2,30]),{18:[1,43]},{18:[1,44]},e(x,[2,23]),{18:[1,45]},{30:[1,46]},e(d,[2,28]),e(d,[2,35]),e(d,[2,36]),e(d,[2,37]),e(d,[2,38]),{37:[1,47]},{34:48,35:S},{15:[1,50]},e(d,[2,27]),e(L,[2,33]),{39:[1,51]},{34:52,35:S,39:[2,31]},{32:[2,15]},e(L,[2,34]),{39:[2,32]}],defaultActions:{20:[2,7],23:[2,14],50:[2,15],52:[2,32]},parseError:g(function(v,c){if(c.recoverable)this.trace(v);else{var p=new Error(v);throw p.hash=c,p}},"parseError"),parse:g(function(v){var c=this,p=[0],m=[],E=[null],h=[],_=this.table,y="",A=0,B=0,V=2,H=1,ie=h.slice.call(arguments,1),z=Object.create(this.lexer),Q={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(Q.yy[dt]=this.yy[dt]);z.setInput(v,Q.yy),Q.yy.lexer=z,Q.yy.parser=this,typeof z.yylloc>"u"&&(z.yylloc={});var gt=z.yylloc;h.push(gt);var ne=z.options&&z.options.ranges;typeof Q.yy.parseError=="function"?this.parseError=Q.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function oe(Y){p.length=p.length-2*Y,E.length=E.length-Y,h.length=h.length-Y}g(oe,"popStack");function Dt(){var Y;return Y=m.pop()||z.lex()||H,typeof Y!="number"&&(Y instanceof Array&&(m=Y,Y=m.pop()),Y=c.symbols_[Y]||Y),Y}g(Dt,"lex");for(var P,Z,F,ut,G={},at,q,vt,st;;){if(Z=p[p.length-1],this.defaultActions[Z]?F=this.defaultActions[Z]:((P===null||typeof P>"u")&&(P=Dt()),F=_[Z]&&_[Z][P]),typeof F>"u"||!F.length||!F[0]){var yt="";st=[];for(at in _[Z])this.terminals_[at]&&at>V&&st.push("'"+this.terminals_[at]+"'");z.showPosition?yt="Parse error on line "+(A+1)+`: `+z.showPosition()+` Expecting `+st.join(", ")+", got '"+(this.terminals_[P]||P)+"'":yt="Parse error on line "+(A+1)+": Unexpected "+(P==H?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(yt,{text:z.match,token:this.terminals_[P]||P,line:z.yylineno,loc:gt,expected:st})}if(F[0]instanceof Array&&F.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+P);switch(F[0]){case 1:p.push(P),E.push(z.yytext),h.push(z.yylloc),p.push(F[1]),P=null,B=z.yyleng,y=z.yytext,A=z.yylineno,gt=z.yylloc;break;case 2:if(q=this.productions_[F[1]][1],G.$=E[E.length-q],G._$={first_line:h[h.length-(q||1)].first_line,last_line:h[h.length-1].last_line,first_column:h[h.length-(q||1)].first_column,last_column:h[h.length-1].last_column},ne&&(G._$.range=[h[h.length-(q||1)].range[0],h[h.length-1].range[1]]),ut=this.performAction.apply(G,[y,B,A,Q.yy,F[1],E,h].concat(ie)),typeof ut<"u")return ut;q&&(p=p.slice(0,-1*q*2),E=E.slice(0,-1*q),h=h.slice(0,-1*q)),p.push(this.productions_[F[1]][0]),E.push(G.$),h.push(G._$),vt=_[p[p.length-2]][p[p.length-1]],p.push(vt);break;case 3:return!0}}return!0},"parse")},$=(function(){var v={EOF:1,parseError:g(function(c,p){if(this.yy.parser)this.yy.parser.parseError(c,p);else throw new Error(c)},"parseError"),setInput:g(function(c,p){return this.yy=p||this.yy||{},this._input=c,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:g(function(){var c=this._input[0];this.yytext+=c,this.yyleng++,this.offset++,this.match+=c,this.matched+=c;var p=c.match(/(?:\r\n?|\n).*/g);return p?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),c},"input"),unput:g(function(c){var p=c.length,m=c.split(/(?:\r\n?|\n)/g);this._input=c+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-p),this.offset-=p;var E=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),m.length-1&&(this.yylineno-=m.length-1);var h=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:m?(m.length===E.length?this.yylloc.first_column:0)+E[E.length-m.length].length-m[0].length:this.yylloc.first_column-p},this.options.ranges&&(this.yylloc.range=[h[0],h[0]+this.yyleng-p]),this.yyleng=this.yytext.length,this},"unput"),more:g(function(){return this._more=!0,this},"more"),reject:g(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:g(function(c){this.unput(this.match.slice(c))},"less"),pastInput:g(function(){var c=this.matched.substr(0,this.matched.length-this.match.length);return(c.length>20?"...":"")+c.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:g(function(){var c=this.match;return c.length<20&&(c+=this._input.substr(0,20-c.length)),(c.substr(0,20)+(c.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:g(function(){var c=this.pastInput(),p=new Array(c.length+1).join("-");return c+this.upcomingInput()+` diff --git a/assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.DPl3JjN1.js b/assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.BkDiTFKx.js similarity index 99% rename from assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.DPl3JjN1.js rename to assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.BkDiTFKx.js index c6ea8a5..d760a18 100644 --- a/assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.DPl3JjN1.js +++ b/assets/chunks/c4Diagram-6F6E4RAY-vK5l5Ihs-DWW3Ew7m.BkDiTFKx.js @@ -1,4 +1,4 @@ -import{g as ve,o as Re}from"./chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js";import{q as g,a5 as De,a6 as Pe,a7 as Ne,a8 as Be,A as Rt,a9 as Mt,O as de,aa as Ie,ab as Me,ac as Tt,ad as fe,ae as Le,af as Ye,ag as Jt,ah as ue}from"../app.DiEjJ8gz.js";import"./vitepress-theme-teek.CUuTa6hm.js";var Yt=(function(){var e=g(function(z,_,m,b){for(m=m||{},b=z.length;b--;m[z[b]]=_);return m},"o"),t=[1,24],r=[1,25],h=[1,26],l=[1,27],a=[1,28],s=[1,63],i=[1,64],n=[1,65],d=[1,66],u=[1,67],y=[1,68],f=[1,69],E=[1,29],k=[1,30],v=[1,31],B=[1,32],X=[1,33],j=[1,34],q=[1,35],V=[1,36],G=[1,37],K=[1,38],J=[1,39],Z=[1,40],tt=[1,41],et=[1,42],at=[1,43],nt=[1,44],it=[1,45],st=[1,46],rt=[1,47],lt=[1,48],ot=[1,50],ct=[1,51],ht=[1,52],dt=[1,53],ut=[1,54],pt=[1,55],yt=[1,56],ft=[1,57],gt=[1,58],bt=[1,59],_t=[1,60],wt=[14,42],zt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],kt=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],S=[1,82],A=[1,83],C=[1,84],w=[1,85],O=[12,14,42],re=[12,14,33,42],Pt=[12,14,33,42,76,77,79,80],Et=[12,33],Qt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$t={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:g(function(z,_,m,b,T,o,P){var p=o.length-1;switch(T){case 3:b.setDirection("TB");break;case 4:b.setDirection("BT");break;case 5:b.setDirection("RL");break;case 6:b.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:b.setC4Type(o[p-3]);break;case 19:b.setTitle(o[p].substring(6)),this.$=o[p].substring(6);break;case 20:b.setAccDescription(o[p].substring(15)),this.$=o[p].substring(15);break;case 21:this.$=o[p].trim(),b.setTitle(this.$);break;case 22:case 23:this.$=o[p].trim(),b.setAccDescription(this.$);break;case 28:o[p].splice(2,0,"ENTERPRISE"),b.addPersonOrSystemBoundary(...o[p]),this.$=o[p];break;case 29:o[p].splice(2,0,"SYSTEM"),b.addPersonOrSystemBoundary(...o[p]),this.$=o[p];break;case 30:b.addPersonOrSystemBoundary(...o[p]),this.$=o[p];break;case 31:o[p].splice(2,0,"CONTAINER"),b.addContainerBoundary(...o[p]),this.$=o[p];break;case 32:b.addDeploymentNode("node",...o[p]),this.$=o[p];break;case 33:b.addDeploymentNode("nodeL",...o[p]),this.$=o[p];break;case 34:b.addDeploymentNode("nodeR",...o[p]),this.$=o[p];break;case 35:b.popBoundaryParseStack();break;case 39:b.addPersonOrSystem("person",...o[p]),this.$=o[p];break;case 40:b.addPersonOrSystem("external_person",...o[p]),this.$=o[p];break;case 41:b.addPersonOrSystem("system",...o[p]),this.$=o[p];break;case 42:b.addPersonOrSystem("system_db",...o[p]),this.$=o[p];break;case 43:b.addPersonOrSystem("system_queue",...o[p]),this.$=o[p];break;case 44:b.addPersonOrSystem("external_system",...o[p]),this.$=o[p];break;case 45:b.addPersonOrSystem("external_system_db",...o[p]),this.$=o[p];break;case 46:b.addPersonOrSystem("external_system_queue",...o[p]),this.$=o[p];break;case 47:b.addContainer("container",...o[p]),this.$=o[p];break;case 48:b.addContainer("container_db",...o[p]),this.$=o[p];break;case 49:b.addContainer("container_queue",...o[p]),this.$=o[p];break;case 50:b.addContainer("external_container",...o[p]),this.$=o[p];break;case 51:b.addContainer("external_container_db",...o[p]),this.$=o[p];break;case 52:b.addContainer("external_container_queue",...o[p]),this.$=o[p];break;case 53:b.addComponent("component",...o[p]),this.$=o[p];break;case 54:b.addComponent("component_db",...o[p]),this.$=o[p];break;case 55:b.addComponent("component_queue",...o[p]),this.$=o[p];break;case 56:b.addComponent("external_component",...o[p]),this.$=o[p];break;case 57:b.addComponent("external_component_db",...o[p]),this.$=o[p];break;case 58:b.addComponent("external_component_queue",...o[p]),this.$=o[p];break;case 60:b.addRel("rel",...o[p]),this.$=o[p];break;case 61:b.addRel("birel",...o[p]),this.$=o[p];break;case 62:b.addRel("rel_u",...o[p]),this.$=o[p];break;case 63:b.addRel("rel_d",...o[p]),this.$=o[p];break;case 64:b.addRel("rel_l",...o[p]),this.$=o[p];break;case 65:b.addRel("rel_r",...o[p]),this.$=o[p];break;case 66:b.addRel("rel_b",...o[p]),this.$=o[p];break;case 67:o[p].splice(0,1),b.addRel("rel",...o[p]),this.$=o[p];break;case 68:b.updateElStyle("update_el_style",...o[p]),this.$=o[p];break;case 69:b.updateRelStyle("update_rel_style",...o[p]),this.$=o[p];break;case 70:b.updateLayoutConfig("update_layout_config",...o[p]),this.$=o[p];break;case 71:this.$=[o[p]];break;case 72:o[p].unshift(o[p-1]),this.$=o[p];break;case 73:case 75:this.$=o[p].trim();break;case 74:let St={};St[o[p-1].trim()]=o[p].trim(),this.$=St;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:70,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:71,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:72,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:73,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{14:[1,74]},e(wt,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:i,37:n,38:d,39:u,40:y,41:f,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t}),e(wt,[2,14]),e(zt,[2,16],{12:[1,76]}),e(wt,[2,36],{12:[1,77]}),e(kt,[2,19]),e(kt,[2,20]),{25:[1,78]},{27:[1,79]},e(kt,[2,23]),{35:80,75:81,76:S,77:A,79:C,80:w},{35:86,75:81,76:S,77:A,79:C,80:w},{35:87,75:81,76:S,77:A,79:C,80:w},{35:88,75:81,76:S,77:A,79:C,80:w},{35:89,75:81,76:S,77:A,79:C,80:w},{35:90,75:81,76:S,77:A,79:C,80:w},{35:91,75:81,76:S,77:A,79:C,80:w},{35:92,75:81,76:S,77:A,79:C,80:w},{35:93,75:81,76:S,77:A,79:C,80:w},{35:94,75:81,76:S,77:A,79:C,80:w},{35:95,75:81,76:S,77:A,79:C,80:w},{35:96,75:81,76:S,77:A,79:C,80:w},{35:97,75:81,76:S,77:A,79:C,80:w},{35:98,75:81,76:S,77:A,79:C,80:w},{35:99,75:81,76:S,77:A,79:C,80:w},{35:100,75:81,76:S,77:A,79:C,80:w},{35:101,75:81,76:S,77:A,79:C,80:w},{35:102,75:81,76:S,77:A,79:C,80:w},{35:103,75:81,76:S,77:A,79:C,80:w},{35:104,75:81,76:S,77:A,79:C,80:w},e(O,[2,59]),{35:105,75:81,76:S,77:A,79:C,80:w},{35:106,75:81,76:S,77:A,79:C,80:w},{35:107,75:81,76:S,77:A,79:C,80:w},{35:108,75:81,76:S,77:A,79:C,80:w},{35:109,75:81,76:S,77:A,79:C,80:w},{35:110,75:81,76:S,77:A,79:C,80:w},{35:111,75:81,76:S,77:A,79:C,80:w},{35:112,75:81,76:S,77:A,79:C,80:w},{35:113,75:81,76:S,77:A,79:C,80:w},{35:114,75:81,76:S,77:A,79:C,80:w},{35:115,75:81,76:S,77:A,79:C,80:w},{20:116,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{12:[1,118],33:[1,117]},{35:119,75:81,76:S,77:A,79:C,80:w},{35:120,75:81,76:S,77:A,79:C,80:w},{35:121,75:81,76:S,77:A,79:C,80:w},{35:122,75:81,76:S,77:A,79:C,80:w},{35:123,75:81,76:S,77:A,79:C,80:w},{35:124,75:81,76:S,77:A,79:C,80:w},{35:125,75:81,76:S,77:A,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(wt,[2,15]),e(zt,[2,17],{21:22,19:130,22:t,23:r,24:h,26:l,28:a}),e(wt,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:r,24:h,26:l,28:a,34:s,36:i,37:n,38:d,39:u,40:y,41:f,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t}),e(kt,[2,21]),e(kt,[2,22]),e(O,[2,39]),e(re,[2,71],{75:81,35:132,76:S,77:A,79:C,80:w}),e(Pt,[2,73]),{78:[1,133]},e(Pt,[2,75]),e(Pt,[2,76]),e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),e(O,[2,47]),e(O,[2,48]),e(O,[2,49]),e(O,[2,50]),e(O,[2,51]),e(O,[2,52]),e(O,[2,53]),e(O,[2,54]),e(O,[2,55]),e(O,[2,56]),e(O,[2,57]),e(O,[2,58]),e(O,[2,60]),e(O,[2,61]),e(O,[2,62]),e(O,[2,63]),e(O,[2,64]),e(O,[2,65]),e(O,[2,66]),e(O,[2,67]),e(O,[2,68]),e(O,[2,69]),e(O,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(Et,[2,28]),e(Et,[2,29]),e(Et,[2,30]),e(Et,[2,31]),e(Et,[2,32]),e(Et,[2,33]),e(Et,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(zt,[2,18]),e(wt,[2,38]),e(re,[2,72]),e(Pt,[2,74]),e(O,[2,24]),e(O,[2,35]),e(Qt,[2,25]),e(Qt,[2,26],{12:[1,138]}),e(Qt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:g(function(z,_){if(_.recoverable)this.trace(z);else{var m=new Error(z);throw m.hash=_,m}},"parseError"),parse:g(function(z){var _=this,m=[0],b=[],T=[null],o=[],P=this.table,p="",St=0,le=0,we=2,oe=1,Oe=o.slice.call(arguments,1),R=Object.create(this.lexer),At={yy:{}};for(var Wt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Wt)&&(At.yy[Wt]=this.yy[Wt]);R.setInput(z,At.yy),At.yy.lexer=R,At.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var Ht=R.yylloc;o.push(Ht);var Te=R.options&&R.options.ranges;typeof At.yy.parseError=="function"?this.parseError=At.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(I){m.length=m.length-2*I,T.length=T.length-I,o.length=o.length-I}g(ke,"popStack");function ce(){var I;return I=b.pop()||R.lex()||oe,typeof I!="number"&&(I instanceof Array&&(b=I,I=b.pop()),I=_.symbols_[I]||I),I}g(ce,"lex");for(var N,Ct,M,qt,Ot={},Bt,W,he,It;;){if(Ct=m[m.length-1],this.defaultActions[Ct]?M=this.defaultActions[Ct]:((N===null||typeof N>"u")&&(N=ce()),M=P[Ct]&&P[Ct][N]),typeof M>"u"||!M.length||!M[0]){var Vt="";It=[];for(Bt in P[Ct])this.terminals_[Bt]&&Bt>we&&It.push("'"+this.terminals_[Bt]+"'");R.showPosition?Vt="Parse error on line "+(St+1)+`: +import{g as ve,o as Re}from"./chunk-67H74DCK-BzSPKGN1-D9cP9OkH.dho-7ePY.js";import{q as g,a5 as De,a6 as Pe,a7 as Ne,a8 as Be,A as Rt,a9 as Mt,O as de,aa as Ie,ab as Me,ac as Tt,ad as fe,ae as Le,af as Ye,ag as Jt,ah as ue}from"../app.DfYWW83x.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var Yt=(function(){var e=g(function(z,_,m,b){for(m=m||{},b=z.length;b--;m[z[b]]=_);return m},"o"),t=[1,24],r=[1,25],h=[1,26],l=[1,27],a=[1,28],s=[1,63],i=[1,64],n=[1,65],d=[1,66],u=[1,67],y=[1,68],f=[1,69],E=[1,29],k=[1,30],v=[1,31],B=[1,32],X=[1,33],j=[1,34],q=[1,35],V=[1,36],G=[1,37],K=[1,38],J=[1,39],Z=[1,40],tt=[1,41],et=[1,42],at=[1,43],nt=[1,44],it=[1,45],st=[1,46],rt=[1,47],lt=[1,48],ot=[1,50],ct=[1,51],ht=[1,52],dt=[1,53],ut=[1,54],pt=[1,55],yt=[1,56],ft=[1,57],gt=[1,58],bt=[1,59],_t=[1,60],wt=[14,42],zt=[14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],kt=[12,14,34,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],S=[1,82],A=[1,83],C=[1,84],w=[1,85],O=[12,14,42],re=[12,14,33,42],Pt=[12,14,33,42,76,77,79,80],Et=[12,33],Qt=[34,36,37,38,39,40,41,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74],$t={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,direction_tb:6,direction_bt:7,direction_rl:8,direction_lr:9,graphConfig:10,C4_CONTEXT:11,NEWLINE:12,statements:13,EOF:14,C4_CONTAINER:15,C4_COMPONENT:16,C4_DYNAMIC:17,C4_DEPLOYMENT:18,otherStatements:19,diagramStatements:20,otherStatement:21,title:22,accDescription:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,boundaryStatement:29,boundaryStartStatement:30,boundaryStopStatement:31,boundaryStart:32,LBRACE:33,ENTERPRISE_BOUNDARY:34,attributes:35,SYSTEM_BOUNDARY:36,BOUNDARY:37,CONTAINER_BOUNDARY:38,NODE:39,NODE_L:40,NODE_R:41,RBRACE:42,diagramStatement:43,PERSON:44,PERSON_EXT:45,SYSTEM:46,SYSTEM_DB:47,SYSTEM_QUEUE:48,SYSTEM_EXT:49,SYSTEM_EXT_DB:50,SYSTEM_EXT_QUEUE:51,CONTAINER:52,CONTAINER_DB:53,CONTAINER_QUEUE:54,CONTAINER_EXT:55,CONTAINER_EXT_DB:56,CONTAINER_EXT_QUEUE:57,COMPONENT:58,COMPONENT_DB:59,COMPONENT_QUEUE:60,COMPONENT_EXT:61,COMPONENT_EXT_DB:62,COMPONENT_EXT_QUEUE:63,REL:64,BIREL:65,REL_U:66,REL_D:67,REL_L:68,REL_R:69,REL_B:70,REL_INDEX:71,UPDATE_EL_STYLE:72,UPDATE_REL_STYLE:73,UPDATE_LAYOUT_CONFIG:74,attribute:75,STR:76,STR_KEY:77,STR_VALUE:78,ATTRIBUTE:79,ATTRIBUTE_EMPTY:80,$accept:0,$end:1},terminals_:{2:"error",6:"direction_tb",7:"direction_bt",8:"direction_rl",9:"direction_lr",11:"C4_CONTEXT",12:"NEWLINE",14:"EOF",15:"C4_CONTAINER",16:"C4_COMPONENT",17:"C4_DYNAMIC",18:"C4_DEPLOYMENT",22:"title",23:"accDescription",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"LBRACE",34:"ENTERPRISE_BOUNDARY",36:"SYSTEM_BOUNDARY",37:"BOUNDARY",38:"CONTAINER_BOUNDARY",39:"NODE",40:"NODE_L",41:"NODE_R",42:"RBRACE",44:"PERSON",45:"PERSON_EXT",46:"SYSTEM",47:"SYSTEM_DB",48:"SYSTEM_QUEUE",49:"SYSTEM_EXT",50:"SYSTEM_EXT_DB",51:"SYSTEM_EXT_QUEUE",52:"CONTAINER",53:"CONTAINER_DB",54:"CONTAINER_QUEUE",55:"CONTAINER_EXT",56:"CONTAINER_EXT_DB",57:"CONTAINER_EXT_QUEUE",58:"COMPONENT",59:"COMPONENT_DB",60:"COMPONENT_QUEUE",61:"COMPONENT_EXT",62:"COMPONENT_EXT_DB",63:"COMPONENT_EXT_QUEUE",64:"REL",65:"BIREL",66:"REL_U",67:"REL_D",68:"REL_L",69:"REL_R",70:"REL_B",71:"REL_INDEX",72:"UPDATE_EL_STYLE",73:"UPDATE_REL_STYLE",74:"UPDATE_LAYOUT_CONFIG",76:"STR",77:"STR_KEY",78:"STR_VALUE",79:"ATTRIBUTE",80:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[5,1],[5,1],[5,1],[5,1],[4,1],[10,4],[10,4],[10,4],[10,4],[10,4],[13,1],[13,1],[13,2],[19,1],[19,2],[19,3],[21,1],[21,1],[21,2],[21,2],[21,1],[29,3],[30,3],[30,3],[30,4],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[32,2],[31,1],[20,1],[20,2],[20,3],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,1],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[43,2],[35,1],[35,2],[75,1],[75,2],[75,1],[75,1]],performAction:g(function(z,_,m,b,T,o,P){var p=o.length-1;switch(T){case 3:b.setDirection("TB");break;case 4:b.setDirection("BT");break;case 5:b.setDirection("RL");break;case 6:b.setDirection("LR");break;case 8:case 9:case 10:case 11:case 12:b.setC4Type(o[p-3]);break;case 19:b.setTitle(o[p].substring(6)),this.$=o[p].substring(6);break;case 20:b.setAccDescription(o[p].substring(15)),this.$=o[p].substring(15);break;case 21:this.$=o[p].trim(),b.setTitle(this.$);break;case 22:case 23:this.$=o[p].trim(),b.setAccDescription(this.$);break;case 28:o[p].splice(2,0,"ENTERPRISE"),b.addPersonOrSystemBoundary(...o[p]),this.$=o[p];break;case 29:o[p].splice(2,0,"SYSTEM"),b.addPersonOrSystemBoundary(...o[p]),this.$=o[p];break;case 30:b.addPersonOrSystemBoundary(...o[p]),this.$=o[p];break;case 31:o[p].splice(2,0,"CONTAINER"),b.addContainerBoundary(...o[p]),this.$=o[p];break;case 32:b.addDeploymentNode("node",...o[p]),this.$=o[p];break;case 33:b.addDeploymentNode("nodeL",...o[p]),this.$=o[p];break;case 34:b.addDeploymentNode("nodeR",...o[p]),this.$=o[p];break;case 35:b.popBoundaryParseStack();break;case 39:b.addPersonOrSystem("person",...o[p]),this.$=o[p];break;case 40:b.addPersonOrSystem("external_person",...o[p]),this.$=o[p];break;case 41:b.addPersonOrSystem("system",...o[p]),this.$=o[p];break;case 42:b.addPersonOrSystem("system_db",...o[p]),this.$=o[p];break;case 43:b.addPersonOrSystem("system_queue",...o[p]),this.$=o[p];break;case 44:b.addPersonOrSystem("external_system",...o[p]),this.$=o[p];break;case 45:b.addPersonOrSystem("external_system_db",...o[p]),this.$=o[p];break;case 46:b.addPersonOrSystem("external_system_queue",...o[p]),this.$=o[p];break;case 47:b.addContainer("container",...o[p]),this.$=o[p];break;case 48:b.addContainer("container_db",...o[p]),this.$=o[p];break;case 49:b.addContainer("container_queue",...o[p]),this.$=o[p];break;case 50:b.addContainer("external_container",...o[p]),this.$=o[p];break;case 51:b.addContainer("external_container_db",...o[p]),this.$=o[p];break;case 52:b.addContainer("external_container_queue",...o[p]),this.$=o[p];break;case 53:b.addComponent("component",...o[p]),this.$=o[p];break;case 54:b.addComponent("component_db",...o[p]),this.$=o[p];break;case 55:b.addComponent("component_queue",...o[p]),this.$=o[p];break;case 56:b.addComponent("external_component",...o[p]),this.$=o[p];break;case 57:b.addComponent("external_component_db",...o[p]),this.$=o[p];break;case 58:b.addComponent("external_component_queue",...o[p]),this.$=o[p];break;case 60:b.addRel("rel",...o[p]),this.$=o[p];break;case 61:b.addRel("birel",...o[p]),this.$=o[p];break;case 62:b.addRel("rel_u",...o[p]),this.$=o[p];break;case 63:b.addRel("rel_d",...o[p]),this.$=o[p];break;case 64:b.addRel("rel_l",...o[p]),this.$=o[p];break;case 65:b.addRel("rel_r",...o[p]),this.$=o[p];break;case 66:b.addRel("rel_b",...o[p]),this.$=o[p];break;case 67:o[p].splice(0,1),b.addRel("rel",...o[p]),this.$=o[p];break;case 68:b.updateElStyle("update_el_style",...o[p]),this.$=o[p];break;case 69:b.updateRelStyle("update_rel_style",...o[p]),this.$=o[p];break;case 70:b.updateLayoutConfig("update_layout_config",...o[p]),this.$=o[p];break;case 71:this.$=[o[p]];break;case 72:o[p].unshift(o[p-1]),this.$=o[p];break;case 73:case 75:this.$=o[p].trim();break;case 74:let St={};St[o[p-1].trim()]=o[p].trim(),this.$=St;break;case 76:this.$="";break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],7:[1,6],8:[1,7],9:[1,8],10:4,11:[1,9],15:[1,10],16:[1,11],17:[1,12],18:[1,13]},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,7]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{12:[1,14]},{12:[1,15]},{12:[1,16]},{12:[1,17]},{12:[1,18]},{13:19,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:70,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:71,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:72,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{13:73,19:20,20:21,21:22,22:t,23:r,24:h,26:l,28:a,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{14:[1,74]},e(wt,[2,13],{43:23,29:49,30:61,32:62,20:75,34:s,36:i,37:n,38:d,39:u,40:y,41:f,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t}),e(wt,[2,14]),e(zt,[2,16],{12:[1,76]}),e(wt,[2,36],{12:[1,77]}),e(kt,[2,19]),e(kt,[2,20]),{25:[1,78]},{27:[1,79]},e(kt,[2,23]),{35:80,75:81,76:S,77:A,79:C,80:w},{35:86,75:81,76:S,77:A,79:C,80:w},{35:87,75:81,76:S,77:A,79:C,80:w},{35:88,75:81,76:S,77:A,79:C,80:w},{35:89,75:81,76:S,77:A,79:C,80:w},{35:90,75:81,76:S,77:A,79:C,80:w},{35:91,75:81,76:S,77:A,79:C,80:w},{35:92,75:81,76:S,77:A,79:C,80:w},{35:93,75:81,76:S,77:A,79:C,80:w},{35:94,75:81,76:S,77:A,79:C,80:w},{35:95,75:81,76:S,77:A,79:C,80:w},{35:96,75:81,76:S,77:A,79:C,80:w},{35:97,75:81,76:S,77:A,79:C,80:w},{35:98,75:81,76:S,77:A,79:C,80:w},{35:99,75:81,76:S,77:A,79:C,80:w},{35:100,75:81,76:S,77:A,79:C,80:w},{35:101,75:81,76:S,77:A,79:C,80:w},{35:102,75:81,76:S,77:A,79:C,80:w},{35:103,75:81,76:S,77:A,79:C,80:w},{35:104,75:81,76:S,77:A,79:C,80:w},e(O,[2,59]),{35:105,75:81,76:S,77:A,79:C,80:w},{35:106,75:81,76:S,77:A,79:C,80:w},{35:107,75:81,76:S,77:A,79:C,80:w},{35:108,75:81,76:S,77:A,79:C,80:w},{35:109,75:81,76:S,77:A,79:C,80:w},{35:110,75:81,76:S,77:A,79:C,80:w},{35:111,75:81,76:S,77:A,79:C,80:w},{35:112,75:81,76:S,77:A,79:C,80:w},{35:113,75:81,76:S,77:A,79:C,80:w},{35:114,75:81,76:S,77:A,79:C,80:w},{35:115,75:81,76:S,77:A,79:C,80:w},{20:116,29:49,30:61,32:62,34:s,36:i,37:n,38:d,39:u,40:y,41:f,43:23,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t},{12:[1,118],33:[1,117]},{35:119,75:81,76:S,77:A,79:C,80:w},{35:120,75:81,76:S,77:A,79:C,80:w},{35:121,75:81,76:S,77:A,79:C,80:w},{35:122,75:81,76:S,77:A,79:C,80:w},{35:123,75:81,76:S,77:A,79:C,80:w},{35:124,75:81,76:S,77:A,79:C,80:w},{35:125,75:81,76:S,77:A,79:C,80:w},{14:[1,126]},{14:[1,127]},{14:[1,128]},{14:[1,129]},{1:[2,8]},e(wt,[2,15]),e(zt,[2,17],{21:22,19:130,22:t,23:r,24:h,26:l,28:a}),e(wt,[2,37],{19:20,20:21,21:22,43:23,29:49,30:61,32:62,13:131,22:t,23:r,24:h,26:l,28:a,34:s,36:i,37:n,38:d,39:u,40:y,41:f,44:E,45:k,46:v,47:B,48:X,49:j,50:q,51:V,52:G,53:K,54:J,55:Z,56:tt,57:et,58:at,59:nt,60:it,61:st,62:rt,63:lt,64:ot,65:ct,66:ht,67:dt,68:ut,69:pt,70:yt,71:ft,72:gt,73:bt,74:_t}),e(kt,[2,21]),e(kt,[2,22]),e(O,[2,39]),e(re,[2,71],{75:81,35:132,76:S,77:A,79:C,80:w}),e(Pt,[2,73]),{78:[1,133]},e(Pt,[2,75]),e(Pt,[2,76]),e(O,[2,40]),e(O,[2,41]),e(O,[2,42]),e(O,[2,43]),e(O,[2,44]),e(O,[2,45]),e(O,[2,46]),e(O,[2,47]),e(O,[2,48]),e(O,[2,49]),e(O,[2,50]),e(O,[2,51]),e(O,[2,52]),e(O,[2,53]),e(O,[2,54]),e(O,[2,55]),e(O,[2,56]),e(O,[2,57]),e(O,[2,58]),e(O,[2,60]),e(O,[2,61]),e(O,[2,62]),e(O,[2,63]),e(O,[2,64]),e(O,[2,65]),e(O,[2,66]),e(O,[2,67]),e(O,[2,68]),e(O,[2,69]),e(O,[2,70]),{31:134,42:[1,135]},{12:[1,136]},{33:[1,137]},e(Et,[2,28]),e(Et,[2,29]),e(Et,[2,30]),e(Et,[2,31]),e(Et,[2,32]),e(Et,[2,33]),e(Et,[2,34]),{1:[2,9]},{1:[2,10]},{1:[2,11]},{1:[2,12]},e(zt,[2,18]),e(wt,[2,38]),e(re,[2,72]),e(Pt,[2,74]),e(O,[2,24]),e(O,[2,35]),e(Qt,[2,25]),e(Qt,[2,26],{12:[1,138]}),e(Qt,[2,27])],defaultActions:{2:[2,1],3:[2,2],4:[2,7],5:[2,3],6:[2,4],7:[2,5],8:[2,6],74:[2,8],126:[2,9],127:[2,10],128:[2,11],129:[2,12]},parseError:g(function(z,_){if(_.recoverable)this.trace(z);else{var m=new Error(z);throw m.hash=_,m}},"parseError"),parse:g(function(z){var _=this,m=[0],b=[],T=[null],o=[],P=this.table,p="",St=0,le=0,we=2,oe=1,Oe=o.slice.call(arguments,1),R=Object.create(this.lexer),At={yy:{}};for(var Wt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Wt)&&(At.yy[Wt]=this.yy[Wt]);R.setInput(z,At.yy),At.yy.lexer=R,At.yy.parser=this,typeof R.yylloc>"u"&&(R.yylloc={});var Ht=R.yylloc;o.push(Ht);var Te=R.options&&R.options.ranges;typeof At.yy.parseError=="function"?this.parseError=At.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ke(I){m.length=m.length-2*I,T.length=T.length-I,o.length=o.length-I}g(ke,"popStack");function ce(){var I;return I=b.pop()||R.lex()||oe,typeof I!="number"&&(I instanceof Array&&(b=I,I=b.pop()),I=_.symbols_[I]||I),I}g(ce,"lex");for(var N,Ct,M,qt,Ot={},Bt,W,he,It;;){if(Ct=m[m.length-1],this.defaultActions[Ct]?M=this.defaultActions[Ct]:((N===null||typeof N>"u")&&(N=ce()),M=P[Ct]&&P[Ct][N]),typeof M>"u"||!M.length||!M[0]){var Vt="";It=[];for(Bt in P[Ct])this.terminals_[Bt]&&Bt>we&&It.push("'"+this.terminals_[Bt]+"'");R.showPosition?Vt="Parse error on line "+(St+1)+`: `+R.showPosition()+` Expecting `+It.join(", ")+", got '"+(this.terminals_[N]||N)+"'":Vt="Parse error on line "+(St+1)+": Unexpected "+(N==oe?"end of input":"'"+(this.terminals_[N]||N)+"'"),this.parseError(Vt,{text:R.match,token:this.terminals_[N]||N,line:R.yylineno,loc:Ht,expected:It})}if(M[0]instanceof Array&&M.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Ct+", token: "+N);switch(M[0]){case 1:m.push(N),T.push(R.yytext),o.push(R.yylloc),m.push(M[1]),N=null,le=R.yyleng,p=R.yytext,St=R.yylineno,Ht=R.yylloc;break;case 2:if(W=this.productions_[M[1]][1],Ot.$=T[T.length-W],Ot._$={first_line:o[o.length-(W||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(W||1)].first_column,last_column:o[o.length-1].last_column},Te&&(Ot._$.range=[o[o.length-(W||1)].range[0],o[o.length-1].range[1]]),qt=this.performAction.apply(Ot,[p,le,St,At.yy,M[1],T,o].concat(Oe)),typeof qt<"u")return qt;W&&(m=m.slice(0,-1*W*2),T=T.slice(0,-1*W),o=o.slice(0,-1*W)),m.push(this.productions_[M[1]][0]),T.push(Ot.$),o.push(Ot._$),he=P[m[m.length-2]][m[m.length-1]],m.push(he);break;case 3:return!0}}return!0},"parse")},Ce=(function(){var z={EOF:1,parseError:g(function(_,m){if(this.yy.parser)this.yy.parser.parseError(_,m);else throw new Error(_)},"parseError"),setInput:g(function(_,m){return this.yy=m||this.yy||{},this._input=_,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:g(function(){var _=this._input[0];this.yytext+=_,this.yyleng++,this.offset++,this.match+=_,this.matched+=_;var m=_.match(/(?:\r\n?|\n).*/g);return m?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),_},"input"),unput:g(function(_){var m=_.length,b=_.split(/(?:\r\n?|\n)/g);this._input=_+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-m),this.offset-=m;var T=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),b.length-1&&(this.yylineno-=b.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:b?(b.length===T.length?this.yylloc.first_column:0)+T[T.length-b.length].length-b[0].length:this.yylloc.first_column-m},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-m]),this.yyleng=this.yytext.length,this},"unput"),more:g(function(){return this._more=!0,this},"more"),reject:g(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:g(function(_){this.unput(this.match.slice(_))},"less"),pastInput:g(function(){var _=this.matched.substr(0,this.matched.length-this.match.length);return(_.length>20?"...":"")+_.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:g(function(){var _=this.match;return _.length<20&&(_+=this._input.substr(0,20-_.length)),(_.substr(0,20)+(_.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:g(function(){var _=this.pastInput(),m=new Array(_.length+1).join("-");return _+this.upcomingInput()+` diff --git a/assets/chunks/channel-CYBQPlIk-DDfBD8St.CNciJ1_Y.js b/assets/chunks/channel-CYBQPlIk-DDfBD8St.CNciJ1_Y.js deleted file mode 100644 index 8da3903..0000000 --- a/assets/chunks/channel-CYBQPlIk-DDfBD8St.CNciJ1_Y.js +++ /dev/null @@ -1 +0,0 @@ -import{aw as r,ax as s}from"../app.DiEjJ8gz.js";const n=(a,o)=>r.lang.round(s.parse(a)[o]);export{n as e}; diff --git a/assets/chunks/channel-CYBQPlIk-DDfBD8St.DUCXByQc.js b/assets/chunks/channel-CYBQPlIk-DDfBD8St.DUCXByQc.js new file mode 100644 index 0000000..dcc90de --- /dev/null +++ b/assets/chunks/channel-CYBQPlIk-DDfBD8St.DUCXByQc.js @@ -0,0 +1 @@ +import{aw as r,ax as s}from"../app.DfYWW83x.js";const n=(a,o)=>r.lang.round(s.parse(a)[o]);export{n as e}; diff --git a/assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js b/assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js similarity index 70% rename from assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js rename to assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js index 5951aae..bbfbdd4 100644 --- a/assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js +++ b/assets/chunks/chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js @@ -1 +1 @@ -import{q as i}from"../app.DiEjJ8gz.js";function t(c,e){c.accDescr&&e.setAccDescription?.(c.accDescr),c.accTitle&&e.setAccTitle?.(c.accTitle),c.title&&e.setDiagramTitle?.(c.title)}i(t,"populateCommonDb");export{t as i}; +import{q as i}from"../app.DfYWW83x.js";function t(c,e){c.accDescr&&e.setAccDescription?.(c.accDescr),c.accTitle&&e.setAccTitle?.(c.accTitle),c.title&&e.setDiagramTitle?.(c.title)}i(t,"populateCommonDb");export{t as i}; diff --git a/assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js b/assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.dho-7ePY.js similarity index 95% rename from assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js rename to assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.dho-7ePY.js index 441c0be..962d1e8 100644 --- a/assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js +++ b/assets/chunks/chunk-67H74DCK-BzSPKGN1-D9cP9OkH.dho-7ePY.js @@ -1 +1 @@ -import{q as n,ai as o,ae as i}from"../app.DiEjJ8gz.js";var c=n((s,t)=>{const r=s.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.name&&r.attr("name",t.name),t.rx&&r.attr("rx",t.rx),t.ry&&r.attr("ry",t.ry),t.attrs!==void 0)for(const a in t.attrs)r.attr(a,t.attrs[a]);return t.class&&r.attr("class",t.class),r},"drawRect"),d=n((s,t)=>{const r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};c(s,r).lower()},"drawBackgroundRect"),h=n((s,t)=>{const r=t.text.replace(o," "),a=s.append("text");a.attr("x",t.x),a.attr("y",t.y),a.attr("class","legend"),a.style("text-anchor",t.anchor),t.class&&a.attr("class",t.class);const e=a.append("tspan");return e.attr("x",t.x+t.textMargin*2),e.text(r),a},"drawText"),y=n((s,t,r,a)=>{const e=s.append("image");e.attr("x",t),e.attr("y",r);const x=i.sanitizeUrl(a);e.attr("xlink:href",x)},"drawImage"),p=n((s,t,r,a)=>{const e=s.append("use");e.attr("x",t),e.attr("y",r);const x=i.sanitizeUrl(a);e.attr("xlink:href",`#${x}`)},"drawEmbeddedImage"),g=n(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),f=n(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{d,g,h,c as o,p,f as w,y}; +import{q as n,ai as o,ae as i}from"../app.DfYWW83x.js";var c=n((s,t)=>{const r=s.append("rect");if(r.attr("x",t.x),r.attr("y",t.y),r.attr("fill",t.fill),r.attr("stroke",t.stroke),r.attr("width",t.width),r.attr("height",t.height),t.name&&r.attr("name",t.name),t.rx&&r.attr("rx",t.rx),t.ry&&r.attr("ry",t.ry),t.attrs!==void 0)for(const a in t.attrs)r.attr(a,t.attrs[a]);return t.class&&r.attr("class",t.class),r},"drawRect"),d=n((s,t)=>{const r={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};c(s,r).lower()},"drawBackgroundRect"),h=n((s,t)=>{const r=t.text.replace(o," "),a=s.append("text");a.attr("x",t.x),a.attr("y",t.y),a.attr("class","legend"),a.style("text-anchor",t.anchor),t.class&&a.attr("class",t.class);const e=a.append("tspan");return e.attr("x",t.x+t.textMargin*2),e.text(r),a},"drawText"),y=n((s,t,r,a)=>{const e=s.append("image");e.attr("x",t),e.attr("y",r);const x=i.sanitizeUrl(a);e.attr("xlink:href",x)},"drawImage"),p=n((s,t,r,a)=>{const e=s.append("use");e.attr("x",t),e.attr("y",r);const x=i.sanitizeUrl(a);e.attr("xlink:href",`#${x}`)},"drawEmbeddedImage"),g=n(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),f=n(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{d,g,h,c as o,p,f as w,y}; diff --git a/assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js b/assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.CZC4Gt28.js similarity index 64% rename from assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js rename to assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.CZC4Gt28.js index 144b3bb..b24f21d 100644 --- a/assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js +++ b/assets/chunks/chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.CZC4Gt28.js @@ -1 +1 @@ -import{q as r}from"../app.DiEjJ8gz.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},r(t,"ImperativeState"),t);export{e}; +import{q as r}from"../app.DfYWW83x.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},r(t,"ImperativeState"),t);export{e}; diff --git a/assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js b/assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js similarity index 71% rename from assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js rename to assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js index 720ba66..4a2a31a 100644 --- a/assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js +++ b/assets/chunks/chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js @@ -1 +1 @@ -import{q as a,a9 as e}from"../app.DiEjJ8gz.js";var r=a((n,o)=>{let t;return o==="sandbox"&&(t=e("#i"+n)),(o==="sandbox"?e(t.nodes()[0].contentDocument.body):e("body")).select(`[id="${n}"]`)},"getDiagramElement");export{r as a}; +import{q as a,a9 as e}from"../app.DfYWW83x.js";var r=a((n,o)=>{let t;return o==="sandbox"&&(t=e("#i"+n)),(o==="sandbox"?e(t.nodes()[0].contentDocument.body):e("body")).select(`[id="${n}"]`)},"getDiagramElement");export{r as a}; diff --git a/assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js b/assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js similarity index 84% rename from assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js rename to assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js index f2bd979..7b8b6f7 100644 --- a/assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js +++ b/assets/chunks/chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js @@ -1,4 +1,4 @@ -import{q as e}from"../app.DiEjJ8gz.js";var l=e(()=>` +import{q as e}from"../app.DfYWW83x.js";var l=e(()=>` /* Font Awesome icon styling - consolidated */ .label-icon { display: inline-block; diff --git a/assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.Bposhqfo.js b/assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.H03soZs8.js similarity index 99% rename from assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.Bposhqfo.js rename to assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.H03soZs8.js index 3b316f0..dae8ce7 100644 --- a/assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.Bposhqfo.js +++ b/assets/chunks/chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.H03soZs8.js @@ -1,4 +1,4 @@ -import{a as Zt}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import{$ as te}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import{q as u,O as _,A as w,al as ee,am as se,a7 as ie,a8 as re,a6 as ae,a5 as ne,an as oe,ao as le,bj as ce,ag as z,at as he}from"../app.DiEjJ8gz.js";var Dt=(function(){var t=u(function(N,r,a,y){for(a=a||{},y=N.length;y--;a[N[y]]=r);return a},"o"),e=[1,2],o=[1,3],s=[1,4],d=[2,4],h=[1,9],f=[1,11],S=[1,16],n=[1,17],g=[1,18],v=[1,19],T=[1,33],D=[1,20],O=[1,21],c=[1,22],C=[1,23],b=[1,24],R=[1,26],I=[1,27],F=[1,28],P=[1,29],tt=[1,30],et=[1,31],st=[1,32],it=[1,35],rt=[1,36],at=[1,37],nt=[1,38],K=[1,34],p=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],ot=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],xt=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],gt={trace:u(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:u(function(N,r,a,y,m,i,$){var l=i.length-1;switch(m){case 3:return y.setRootDoc(i[l]),i[l];case 4:this.$=[];break;case 5:i[l]!="nl"&&(i[l-1].push(i[l]),this.$=i[l-1]);break;case 6:case 7:this.$=i[l];break;case 8:this.$="nl";break;case 12:this.$=i[l];break;case 13:const V=i[l-1];V.description=y.trimColon(i[l]),this.$=V;break;case 14:this.$={stmt:"relation",state1:i[l-2],state2:i[l]};break;case 15:const St=y.trimColon(i[l]);this.$={stmt:"relation",state1:i[l-3],state2:i[l-1],description:St};break;case 19:this.$={stmt:"state",id:i[l-3],type:"default",description:"",doc:i[l-1]};break;case 20:var G=i[l],X=i[l-2].trim();if(i[l].match(":")){var ct=i[l].split(":");G=ct[0],X=[X,ct[1]]}this.$={stmt:"state",id:G,type:"default",description:X};break;case 21:this.$={stmt:"state",id:i[l-3],type:"default",description:i[l-5],doc:i[l-1]};break;case 22:this.$={stmt:"state",id:i[l],type:"fork"};break;case 23:this.$={stmt:"state",id:i[l],type:"join"};break;case 24:this.$={stmt:"state",id:i[l],type:"choice"};break;case 25:this.$={stmt:"state",id:y.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:i[l-1].trim(),note:{position:i[l-2].trim(),text:i[l].trim()}};break;case 29:this.$=i[l].trim(),y.setAccTitle(this.$);break;case 30:case 31:this.$=i[l].trim(),y.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:i[l-3],url:i[l-2],tooltip:i[l-1]};break;case 33:this.$={stmt:"click",id:i[l-3],url:i[l-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:i[l-1].trim(),classes:i[l].trim()};break;case 36:this.$={stmt:"style",id:i[l-1].trim(),styleClass:i[l].trim()};break;case 37:this.$={stmt:"applyClass",id:i[l-1].trim(),styleClass:i[l].trim()};break;case 38:y.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:y.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:y.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:y.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:i[l].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:i[l-2].trim(),classes:[i[l].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:i[l-2].trim(),classes:[i[l].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:o,6:s},{1:[3]},{3:5,4:e,5:o,6:s},{3:6,4:e,5:o,6:s},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],d,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:h,5:f,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:n,19:g,22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:S,17:n,19:g,22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,7]),t(p,[2,8]),t(p,[2,9]),t(p,[2,10]),t(p,[2,11]),t(p,[2,12],{14:[1,40],15:[1,41]}),t(p,[2,16]),{18:[1,42]},t(p,[2,18],{20:[1,43]}),{23:[1,44]},t(p,[2,22]),t(p,[2,23]),t(p,[2,24]),t(p,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(p,[2,28]),{34:[1,49]},{36:[1,50]},t(p,[2,31]),{13:51,24:T,57:K},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(ot,[2,44],{58:[1,56]}),t(ot,[2,45],{58:[1,57]}),t(p,[2,38]),t(p,[2,39]),t(p,[2,40]),t(p,[2,41]),t(p,[2,6]),t(p,[2,13]),{13:58,24:T,57:K},t(p,[2,17]),t(xt,d,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(p,[2,29]),t(p,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(p,[2,14],{14:[1,71]}),{4:h,5:f,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:n,19:g,21:[1,72],22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(p,[2,34]),t(p,[2,35]),t(p,[2,36]),t(p,[2,37]),t(ot,[2,46]),t(ot,[2,47]),t(p,[2,15]),t(p,[2,19]),t(xt,d,{7:78}),t(p,[2,26]),t(p,[2,27]),{5:[1,79]},{5:[1,80]},{4:h,5:f,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:n,19:g,21:[1,81],22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,32]),t(p,[2,33]),t(p,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:u(function(N,r){if(r.recoverable)this.trace(N);else{var a=new Error(N);throw a.hash=r,a}},"parseError"),parse:u(function(N){var r=this,a=[0],y=[],m=[null],i=[],$=this.table,l="",G=0,X=0,ct=2,V=1,St=i.slice.call(arguments,1),k=Object.create(this.lexer),j={yy:{}};for(var mt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,mt)&&(j.yy[mt]=this.yy[mt]);k.setInput(N,j.yy),j.yy.lexer=k,j.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var _t=k.yylloc;i.push(_t);var qt=k.options&&k.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Qt(L){a.length=a.length-2*L,m.length=m.length-L,i.length=i.length-L}u(Qt,"popStack");function vt(){var L;return L=y.pop()||k.lex()||V,typeof L!="number"&&(L instanceof Array&&(y=L,L=y.pop()),L=r.symbols_[L]||L),L}u(vt,"lex");for(var x,W,A,kt,M={},ht,Y,Lt,dt;;){if(W=a[a.length-1],this.defaultActions[W]?A=this.defaultActions[W]:((x===null||typeof x>"u")&&(x=vt()),A=$[W]&&$[W][x]),typeof A>"u"||!A.length||!A[0]){var Tt="";dt=[];for(ht in $[W])this.terminals_[ht]&&ht>ct&&dt.push("'"+this.terminals_[ht]+"'");k.showPosition?Tt="Parse error on line "+(G+1)+`: +import{a as Zt}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import{$ as te}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import{q as u,O as _,A as w,al as ee,am as se,a7 as ie,a8 as re,a6 as ae,a5 as ne,an as oe,ao as le,bj as ce,ag as z,at as he}from"../app.DfYWW83x.js";var Dt=(function(){var t=u(function(N,r,a,y){for(a=a||{},y=N.length;y--;a[N[y]]=r);return a},"o"),e=[1,2],o=[1,3],s=[1,4],d=[2,4],h=[1,9],f=[1,11],S=[1,16],n=[1,17],g=[1,18],v=[1,19],T=[1,33],D=[1,20],O=[1,21],c=[1,22],C=[1,23],b=[1,24],R=[1,26],I=[1,27],F=[1,28],P=[1,29],tt=[1,30],et=[1,31],st=[1,32],it=[1,35],rt=[1,36],at=[1,37],nt=[1,38],K=[1,34],p=[1,4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],ot=[1,4,5,14,15,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,39,40,41,45,48,51,52,53,54,57],xt=[4,5,16,17,19,21,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],gt={trace:u(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,classDefStatement:10,styleStatement:11,cssClassStatement:12,idStatement:13,DESCR:14,"-->":15,HIDE_EMPTY:16,scale:17,WIDTH:18,COMPOSIT_STATE:19,STRUCT_START:20,STRUCT_STOP:21,STATE_DESCR:22,AS:23,ID:24,FORK:25,JOIN:26,CHOICE:27,CONCURRENT:28,note:29,notePosition:30,NOTE_TEXT:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,CLICK:38,STRING:39,HREF:40,classDef:41,CLASSDEF_ID:42,CLASSDEF_STYLEOPTS:43,DEFAULT:44,style:45,STYLE_IDS:46,STYLEDEF_STYLEOPTS:47,class:48,CLASSENTITY_IDS:49,STYLECLASS:50,direction_tb:51,direction_bt:52,direction_rl:53,direction_lr:54,eol:55,";":56,EDGE_STATE:57,STYLE_SEPARATOR:58,left_of:59,right_of:60,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",14:"DESCR",15:"-->",16:"HIDE_EMPTY",17:"scale",18:"WIDTH",19:"COMPOSIT_STATE",20:"STRUCT_START",21:"STRUCT_STOP",22:"STATE_DESCR",23:"AS",24:"ID",25:"FORK",26:"JOIN",27:"CHOICE",28:"CONCURRENT",29:"note",31:"NOTE_TEXT",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",38:"CLICK",39:"STRING",40:"HREF",41:"classDef",42:"CLASSDEF_ID",43:"CLASSDEF_STYLEOPTS",44:"DEFAULT",45:"style",46:"STYLE_IDS",47:"STYLEDEF_STYLEOPTS",48:"class",49:"CLASSENTITY_IDS",50:"STYLECLASS",51:"direction_tb",52:"direction_bt",53:"direction_rl",54:"direction_lr",56:";",57:"EDGE_STATE",58:"STYLE_SEPARATOR",59:"left_of",60:"right_of"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,3],[9,4],[9,1],[9,2],[9,1],[9,4],[9,3],[9,6],[9,1],[9,1],[9,1],[9,1],[9,4],[9,4],[9,1],[9,2],[9,2],[9,1],[9,5],[9,5],[10,3],[10,3],[11,3],[12,3],[32,1],[32,1],[32,1],[32,1],[55,1],[55,1],[13,1],[13,1],[13,3],[13,3],[30,1],[30,1]],performAction:u(function(N,r,a,y,m,i,$){var l=i.length-1;switch(m){case 3:return y.setRootDoc(i[l]),i[l];case 4:this.$=[];break;case 5:i[l]!="nl"&&(i[l-1].push(i[l]),this.$=i[l-1]);break;case 6:case 7:this.$=i[l];break;case 8:this.$="nl";break;case 12:this.$=i[l];break;case 13:const V=i[l-1];V.description=y.trimColon(i[l]),this.$=V;break;case 14:this.$={stmt:"relation",state1:i[l-2],state2:i[l]};break;case 15:const St=y.trimColon(i[l]);this.$={stmt:"relation",state1:i[l-3],state2:i[l-1],description:St};break;case 19:this.$={stmt:"state",id:i[l-3],type:"default",description:"",doc:i[l-1]};break;case 20:var G=i[l],X=i[l-2].trim();if(i[l].match(":")){var ct=i[l].split(":");G=ct[0],X=[X,ct[1]]}this.$={stmt:"state",id:G,type:"default",description:X};break;case 21:this.$={stmt:"state",id:i[l-3],type:"default",description:i[l-5],doc:i[l-1]};break;case 22:this.$={stmt:"state",id:i[l],type:"fork"};break;case 23:this.$={stmt:"state",id:i[l],type:"join"};break;case 24:this.$={stmt:"state",id:i[l],type:"choice"};break;case 25:this.$={stmt:"state",id:y.getDividerId(),type:"divider"};break;case 26:this.$={stmt:"state",id:i[l-1].trim(),note:{position:i[l-2].trim(),text:i[l].trim()}};break;case 29:this.$=i[l].trim(),y.setAccTitle(this.$);break;case 30:case 31:this.$=i[l].trim(),y.setAccDescription(this.$);break;case 32:this.$={stmt:"click",id:i[l-3],url:i[l-2],tooltip:i[l-1]};break;case 33:this.$={stmt:"click",id:i[l-3],url:i[l-1],tooltip:""};break;case 34:case 35:this.$={stmt:"classDef",id:i[l-1].trim(),classes:i[l].trim()};break;case 36:this.$={stmt:"style",id:i[l-1].trim(),styleClass:i[l].trim()};break;case 37:this.$={stmt:"applyClass",id:i[l-1].trim(),styleClass:i[l].trim()};break;case 38:y.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 39:y.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 40:y.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 41:y.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 44:case 45:this.$={stmt:"state",id:i[l].trim(),type:"default",description:""};break;case 46:this.$={stmt:"state",id:i[l-2].trim(),classes:[i[l].trim()],type:"default",description:""};break;case 47:this.$={stmt:"state",id:i[l-2].trim(),classes:[i[l].trim()],type:"default",description:""};break}},"anonymous"),table:[{3:1,4:e,5:o,6:s},{1:[3]},{3:5,4:e,5:o,6:s},{3:6,4:e,5:o,6:s},t([1,4,5,16,17,19,22,24,25,26,27,28,29,33,35,37,38,41,45,48,51,52,53,54,57],d,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:h,5:f,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:n,19:g,22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,5]),{9:39,10:12,11:13,12:14,13:15,16:S,17:n,19:g,22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,7]),t(p,[2,8]),t(p,[2,9]),t(p,[2,10]),t(p,[2,11]),t(p,[2,12],{14:[1,40],15:[1,41]}),t(p,[2,16]),{18:[1,42]},t(p,[2,18],{20:[1,43]}),{23:[1,44]},t(p,[2,22]),t(p,[2,23]),t(p,[2,24]),t(p,[2,25]),{30:45,31:[1,46],59:[1,47],60:[1,48]},t(p,[2,28]),{34:[1,49]},{36:[1,50]},t(p,[2,31]),{13:51,24:T,57:K},{42:[1,52],44:[1,53]},{46:[1,54]},{49:[1,55]},t(ot,[2,44],{58:[1,56]}),t(ot,[2,45],{58:[1,57]}),t(p,[2,38]),t(p,[2,39]),t(p,[2,40]),t(p,[2,41]),t(p,[2,6]),t(p,[2,13]),{13:58,24:T,57:K},t(p,[2,17]),t(xt,d,{7:59}),{24:[1,60]},{24:[1,61]},{23:[1,62]},{24:[2,48]},{24:[2,49]},t(p,[2,29]),t(p,[2,30]),{39:[1,63],40:[1,64]},{43:[1,65]},{43:[1,66]},{47:[1,67]},{50:[1,68]},{24:[1,69]},{24:[1,70]},t(p,[2,14],{14:[1,71]}),{4:h,5:f,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:n,19:g,21:[1,72],22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,20],{20:[1,73]}),{31:[1,74]},{24:[1,75]},{39:[1,76]},{39:[1,77]},t(p,[2,34]),t(p,[2,35]),t(p,[2,36]),t(p,[2,37]),t(ot,[2,46]),t(ot,[2,47]),t(p,[2,15]),t(p,[2,19]),t(xt,d,{7:78}),t(p,[2,26]),t(p,[2,27]),{5:[1,79]},{5:[1,80]},{4:h,5:f,8:8,9:10,10:12,11:13,12:14,13:15,16:S,17:n,19:g,21:[1,81],22:v,24:T,25:D,26:O,27:c,28:C,29:b,32:25,33:R,35:I,37:F,38:P,41:tt,45:et,48:st,51:it,52:rt,53:at,54:nt,57:K},t(p,[2,32]),t(p,[2,33]),t(p,[2,21])],defaultActions:{5:[2,1],6:[2,2],47:[2,48],48:[2,49]},parseError:u(function(N,r){if(r.recoverable)this.trace(N);else{var a=new Error(N);throw a.hash=r,a}},"parseError"),parse:u(function(N){var r=this,a=[0],y=[],m=[null],i=[],$=this.table,l="",G=0,X=0,ct=2,V=1,St=i.slice.call(arguments,1),k=Object.create(this.lexer),j={yy:{}};for(var mt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,mt)&&(j.yy[mt]=this.yy[mt]);k.setInput(N,j.yy),j.yy.lexer=k,j.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var _t=k.yylloc;i.push(_t);var qt=k.options&&k.options.ranges;typeof j.yy.parseError=="function"?this.parseError=j.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Qt(L){a.length=a.length-2*L,m.length=m.length-L,i.length=i.length-L}u(Qt,"popStack");function vt(){var L;return L=y.pop()||k.lex()||V,typeof L!="number"&&(L instanceof Array&&(y=L,L=y.pop()),L=r.symbols_[L]||L),L}u(vt,"lex");for(var x,W,A,kt,M={},ht,Y,Lt,dt;;){if(W=a[a.length-1],this.defaultActions[W]?A=this.defaultActions[W]:((x===null||typeof x>"u")&&(x=vt()),A=$[W]&&$[W][x]),typeof A>"u"||!A.length||!A[0]){var Tt="";dt=[];for(ht in $[W])this.terminals_[ht]&&ht>ct&&dt.push("'"+this.terminals_[ht]+"'");k.showPosition?Tt="Parse error on line "+(G+1)+`: `+k.showPosition()+` Expecting `+dt.join(", ")+", got '"+(this.terminals_[x]||x)+"'":Tt="Parse error on line "+(G+1)+": Unexpected "+(x==V?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(Tt,{text:k.match,token:this.terminals_[x]||x,line:k.yylineno,loc:_t,expected:dt})}if(A[0]instanceof Array&&A.length>1)throw new Error("Parse Error: multiple actions possible at state: "+W+", token: "+x);switch(A[0]){case 1:a.push(x),m.push(k.yytext),i.push(k.yylloc),a.push(A[1]),x=null,X=k.yyleng,l=k.yytext,G=k.yylineno,_t=k.yylloc;break;case 2:if(Y=this.productions_[A[1]][1],M.$=m[m.length-Y],M._$={first_line:i[i.length-(Y||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(Y||1)].first_column,last_column:i[i.length-1].last_column},qt&&(M._$.range=[i[i.length-(Y||1)].range[0],i[i.length-1].range[1]]),kt=this.performAction.apply(M,[l,X,G,j.yy,A[1],m,i].concat(St)),typeof kt<"u")return kt;Y&&(a=a.slice(0,-1*Y*2),m=m.slice(0,-1*Y),i=i.slice(0,-1*Y)),a.push(this.productions_[A[1]][0]),m.push(M.$),i.push(M._$),Lt=$[a[a.length-2]][a[a.length-1]],a.push(Lt);break;case 3:return!0}}return!0},"parse")},Jt=(function(){var N={EOF:1,parseError:u(function(r,a){if(this.yy.parser)this.yy.parser.parseError(r,a);else throw new Error(r)},"parseError"),setInput:u(function(r,a){return this.yy=a||this.yy||{},this._input=r,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:u(function(){var r=this._input[0];this.yytext+=r,this.yyleng++,this.offset++,this.match+=r,this.matched+=r;var a=r.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),r},"input"),unput:u(function(r){var a=r.length,y=r.split(/(?:\r\n?|\n)/g);this._input=r+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var m=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),y.length-1&&(this.yylineno-=y.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:y?(y.length===m.length?this.yylloc.first_column:0)+m[m.length-y.length].length-y[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:u(function(){return this._more=!0,this},"more"),reject:u(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:u(function(r){this.unput(this.match.slice(r))},"less"),pastInput:u(function(){var r=this.matched.substr(0,this.matched.length-this.match.length);return(r.length>20?"...":"")+r.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:u(function(){var r=this.match;return r.length<20&&(r+=this._input.substr(0,20-r.length)),(r.substr(0,20)+(r.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:u(function(){var r=this.pastInput(),a=new Array(r.length+1).join("-");return r+this.upcomingInput()+` diff --git a/assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js b/assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js similarity index 87% rename from assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js rename to assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js index 13bbb06..97ca2cf 100644 --- a/assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js +++ b/assets/chunks/chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js @@ -1 +1 @@ -import{q as h,aa as s,O as w}from"../app.DiEjJ8gz.js";var u=h((t,e,i,a)=>{t.attr("class",i);const{width:o,height:r,x:n,y:g}=x(t,e);s(t,r,o,a);const d=c(n,g,o,r,e);t.attr("viewBox",d),w.debug(`viewBox configured: ${d} with padding: ${e}`)},"setupViewPortForSVG"),x=h((t,e)=>{const i=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:i.width+e*2,height:i.height+e*2,x:i.x,y:i.y}},"calculateDimensionsWithPadding"),c=h((t,e,i,a,o)=>`${t-o} ${e-o} ${i} ${a}`,"createViewBox");export{u as $}; +import{q as h,aa as s,O as w}from"../app.DfYWW83x.js";var u=h((t,e,i,a)=>{t.attr("class",i);const{width:o,height:r,x:n,y:g}=x(t,e);s(t,r,o,a);const d=c(n,g,o,r,e);t.attr("viewBox",d),w.debug(`viewBox configured: ${d} with padding: ${e}`)},"setupViewPortForSVG"),x=h((t,e)=>{const i=t.node()?.getBBox()||{width:0,height:0,x:0,y:0};return{width:i.width+e*2,height:i.height+e*2,x:i.x,y:i.y}},"calculateDimensionsWithPadding"),c=h((t,e,i,a,o)=>`${t-o} ${e-o} ${i} ${a}`,"createViewBox");export{u as $}; diff --git a/assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.u1EkA7cz.js b/assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.CTDEu5lJ.js similarity index 99% rename from assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.u1EkA7cz.js rename to assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.CTDEu5lJ.js index c096ace..e34ceb7 100644 --- a/assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.u1EkA7cz.js +++ b/assets/chunks/chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.CTDEu5lJ.js @@ -1,4 +1,4 @@ -import{l as Zt}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js";import{a as te}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import{$ as ee}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import{q as p,O as Ot,A as k,ak as se,al as ie,am as vt,a9 as Q,a8 as ne,a7 as ae,a5 as re,a6 as ue,an as le,ao as oe,ag as $,at as ce,as as he,ad as pe,bh as R}from"../app.DiEjJ8gz.js";var It=(function(){var t=p(function(N,l,c,n){for(c=c||{},n=N.length;n--;c[N[n]]=l);return c},"o"),i=[1,18],u=[1,19],a=[1,20],r=[1,41],h=[1,42],d=[1,26],y=[1,24],T=[1,25],ot=[1,32],ct=[1,33],ht=[1,34],C=[1,45],pt=[1,35],dt=[1,36],At=[1,37],yt=[1,38],Ct=[1,27],mt=[1,28],bt=[1,29],gt=[1,30],ft=[1,31],m=[1,44],b=[1,46],g=[1,43],E=[1,47],Et=[1,9],o=[1,8,9],q=[1,58],H=[1,59],V=[1,60],J=[1,61],Z=[1,62],kt=[1,63],Tt=[1,64],tt=[1,8,9,41],wt=[1,76],I=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],et=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],st=[13,58,84,99,101,102],P=[13,58,71,72,84,99,101,102],Rt=[13,58,66,67,68,69,70,84,99,101,102],Dt=[1,98],M=[1,115],G=[1,107],U=[1,113],z=[1,108],K=[1,109],Y=[1,110],W=[1,111],j=[1,112],X=[1,114],Pt=[22,58,59,80,84,85,86,87,88,89],Ft=[1,8,9,39,41,44],it=[1,8,9,22],Mt=[1,143],Gt=[1,8,9,59],S=[1,8,9,22,58,59,80,84,85,86,87,88,89],Bt={trace:p(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:p(function(N,l,c,n,A,e,D){var s=e.length-1;switch(A){case 8:this.$=e[s-1];break;case 9:case 12:case 14:this.$=e[s];break;case 10:case 13:this.$=e[s-2]+"."+e[s];break;case 11:case 15:this.$=e[s-1]+e[s];break;case 16:case 17:this.$=e[s-1]+"~"+e[s]+"~";break;case 18:n.addRelation(e[s]);break;case 19:e[s-1].title=n.cleanupLabel(e[s]),n.addRelation(e[s-1]);break;case 30:this.$=e[s].trim(),n.setAccTitle(this.$);break;case 31:case 32:this.$=e[s].trim(),n.setAccDescription(this.$);break;case 33:n.addClassesToNamespace(e[s-3],e[s-1]);break;case 34:n.addClassesToNamespace(e[s-4],e[s-1]);break;case 35:this.$=e[s],n.addNamespace(e[s]);break;case 36:this.$=[e[s]];break;case 37:this.$=[e[s-1]];break;case 38:e[s].unshift(e[s-2]),this.$=e[s];break;case 40:n.setCssClass(e[s-2],e[s]);break;case 41:n.addMembers(e[s-3],e[s-1]);break;case 42:n.setCssClass(e[s-5],e[s-3]),n.addMembers(e[s-5],e[s-1]);break;case 43:this.$=e[s],n.addClass(e[s]);break;case 44:this.$=e[s-1],n.addClass(e[s-1]),n.setClassLabel(e[s-1],e[s]);break;case 45:n.addAnnotation(e[s],e[s-2]);break;case 46:case 59:this.$=[e[s]];break;case 47:e[s].push(e[s-1]),this.$=e[s];break;case 48:break;case 49:n.addMember(e[s-1],n.cleanupLabel(e[s]));break;case 50:break;case 51:break;case 52:this.$={id1:e[s-2],id2:e[s],relation:e[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:e[s-3],id2:e[s],relation:e[s-1],relationTitle1:e[s-2],relationTitle2:"none"};break;case 54:this.$={id1:e[s-3],id2:e[s],relation:e[s-2],relationTitle1:"none",relationTitle2:e[s-1]};break;case 55:this.$={id1:e[s-4],id2:e[s],relation:e[s-2],relationTitle1:e[s-3],relationTitle2:e[s-1]};break;case 56:n.addNote(e[s],e[s-1]);break;case 57:n.addNote(e[s]);break;case 58:this.$=e[s-2],n.defineClass(e[s-1],e[s]);break;case 60:this.$=e[s-2].concat([e[s]]);break;case 61:n.setDirection("TB");break;case 62:n.setDirection("BT");break;case 63:n.setDirection("RL");break;case 64:n.setDirection("LR");break;case 65:this.$={type1:e[s-2],type2:e[s],lineType:e[s-1]};break;case 66:this.$={type1:"none",type2:e[s],lineType:e[s-1]};break;case 67:this.$={type1:e[s-1],type2:"none",lineType:e[s]};break;case 68:this.$={type1:"none",type2:"none",lineType:e[s]};break;case 69:this.$=n.relationType.AGGREGATION;break;case 70:this.$=n.relationType.EXTENSION;break;case 71:this.$=n.relationType.COMPOSITION;break;case 72:this.$=n.relationType.DEPENDENCY;break;case 73:this.$=n.relationType.LOLLIPOP;break;case 74:this.$=n.lineType.LINE;break;case 75:this.$=n.lineType.DOTTED_LINE;break;case 76:case 82:this.$=e[s-2],n.setClickEvent(e[s-1],e[s]);break;case 77:case 83:this.$=e[s-3],n.setClickEvent(e[s-2],e[s-1]),n.setTooltip(e[s-2],e[s]);break;case 78:this.$=e[s-2],n.setLink(e[s-1],e[s]);break;case 79:this.$=e[s-3],n.setLink(e[s-2],e[s-1],e[s]);break;case 80:this.$=e[s-3],n.setLink(e[s-2],e[s-1]),n.setTooltip(e[s-2],e[s]);break;case 81:this.$=e[s-4],n.setLink(e[s-3],e[s-2],e[s]),n.setTooltip(e[s-3],e[s-1]);break;case 84:this.$=e[s-3],n.setClickEvent(e[s-2],e[s-1],e[s]);break;case 85:this.$=e[s-4],n.setClickEvent(e[s-3],e[s-2],e[s-1]),n.setTooltip(e[s-3],e[s]);break;case 86:this.$=e[s-3],n.setLink(e[s-2],e[s]);break;case 87:this.$=e[s-4],n.setLink(e[s-3],e[s-1],e[s]);break;case 88:this.$=e[s-4],n.setLink(e[s-3],e[s-1]),n.setTooltip(e[s-3],e[s]);break;case 89:this.$=e[s-5],n.setLink(e[s-4],e[s-2],e[s]),n.setTooltip(e[s-4],e[s-1]);break;case 90:this.$=e[s-2],n.setCssStyle(e[s-1],e[s]);break;case 91:n.setCssClass(e[s-1],e[s]);break;case 92:this.$=[e[s]];break;case 93:e[s-2].push(e[s]),this.$=e[s-2];break;case 95:this.$=e[s-1]+e[s];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:u,37:a,38:22,42:r,43:23,46:h,47:d,49:y,50:T,52:ot,54:ct,55:ht,58:C,60:pt,61:dt,62:At,63:yt,73:Ct,74:mt,76:bt,80:gt,81:ft,84:m,99:b,101:g,102:E},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(Et,[2,5],{8:[1,48]}),{8:[1,49]},t(o,[2,18],{22:[1,50]}),t(o,[2,20]),t(o,[2,21]),t(o,[2,22]),t(o,[2,23]),t(o,[2,24]),t(o,[2,25]),t(o,[2,26]),t(o,[2,27]),t(o,[2,28]),t(o,[2,29]),{34:[1,51]},{36:[1,52]},t(o,[2,32]),t(o,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:q,67:H,68:V,69:J,70:Z,71:kt,72:Tt}),{39:[1,65]},t(tt,[2,39],{39:[1,67],44:[1,66]}),t(o,[2,50]),t(o,[2,51]),{16:68,58:C,84:m,99:b,101:g},{16:39,18:69,19:40,58:C,84:m,99:b,101:g,102:E},{16:39,18:70,19:40,58:C,84:m,99:b,101:g,102:E},{16:39,18:71,19:40,58:C,84:m,99:b,101:g,102:E},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:C,84:m,99:b,101:g,102:E},{13:wt,53:75},{56:77,58:[1,78]},t(o,[2,61]),t(o,[2,62]),t(o,[2,63]),t(o,[2,64]),t(I,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:C,84:m,99:b,101:g,102:E}),t(I,[2,14],{20:[1,82]}),{15:83,16:84,58:C,84:m,99:b,101:g},{16:39,18:85,19:40,58:C,84:m,99:b,101:g,102:E},t(et,[2,118]),t(et,[2,119]),t(et,[2,120]),t(et,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(Et,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:i,35:u,37:a,42:r,46:h,47:d,49:y,50:T,52:ot,54:ct,55:ht,58:C,60:pt,61:dt,62:At,63:yt,73:Ct,74:mt,76:bt,80:gt,81:ft,84:m,99:b,101:g,102:E}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:u,37:a,38:22,42:r,43:23,46:h,47:d,49:y,50:T,52:ot,54:ct,55:ht,58:C,60:pt,61:dt,62:At,63:yt,73:Ct,74:mt,76:bt,80:gt,81:ft,84:m,99:b,101:g,102:E},t(o,[2,19]),t(o,[2,30]),t(o,[2,31]),{13:[1,89],16:39,18:88,19:40,58:C,84:m,99:b,101:g,102:E},{51:90,64:56,65:57,66:q,67:H,68:V,69:J,70:Z,71:kt,72:Tt},t(o,[2,49]),{65:91,71:kt,72:Tt},t(st,[2,68],{64:92,66:q,67:H,68:V,69:J,70:Z}),t(P,[2,69]),t(P,[2,70]),t(P,[2,71]),t(P,[2,72]),t(P,[2,73]),t(Rt,[2,74]),t(Rt,[2,75]),{8:[1,94],24:95,40:93,43:23,46:h},{16:96,58:C,84:m,99:b,101:g},{45:97,49:Dt},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:M,57:104,58:G,80:U,82:105,83:106,84:z,85:K,86:Y,87:W,88:j,89:X},{58:[1,116]},{13:wt,53:117},t(o,[2,57]),t(o,[2,123]),{22:M,57:118,58:G,59:[1,119],80:U,82:105,83:106,84:z,85:K,86:Y,87:W,88:j,89:X},t(Pt,[2,59]),{16:39,18:120,19:40,58:C,84:m,99:b,101:g,102:E},t(I,[2,15]),t(I,[2,16]),t(I,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:C,84:m,99:b,101:g},t(Ft,[2,43],{11:123,12:[1,124]}),t(Et,[2,7]),{9:[1,125]},t(it,[2,52]),{16:39,18:126,19:40,58:C,84:m,99:b,101:g,102:E},{13:[1,128],16:39,18:127,19:40,58:C,84:m,99:b,101:g,102:E},t(st,[2,67],{64:129,66:q,67:H,68:V,69:J,70:Z}),t(st,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:h},{8:[1,132],41:[2,36]},t(tt,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:Dt},{16:39,18:136,19:40,58:C,84:m,99:b,101:g,102:E},t(o,[2,76],{13:[1,137]}),t(o,[2,78],{13:[1,139],75:[1,138]}),t(o,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(o,[2,90],{59:Mt}),t(Gt,[2,92],{83:144,22:M,58:G,80:U,84:z,85:K,86:Y,87:W,88:j,89:X}),t(S,[2,94]),t(S,[2,96]),t(S,[2,97]),t(S,[2,98]),t(S,[2,99]),t(S,[2,100]),t(S,[2,101]),t(S,[2,102]),t(S,[2,103]),t(S,[2,104]),t(o,[2,91]),t(o,[2,56]),t(o,[2,58],{59:Mt}),{58:[1,145]},t(I,[2,13]),{15:146,16:84,58:C,84:m,99:b,101:g},{39:[2,11]},t(Ft,[2,44]),{13:[1,147]},{1:[2,4]},t(it,[2,54]),t(it,[2,53]),{16:39,18:148,19:40,58:C,84:m,99:b,101:g,102:E},t(st,[2,65]),t(o,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:h},{45:151,49:Dt},t(tt,[2,41]),{41:[2,47]},t(o,[2,45]),t(o,[2,77]),t(o,[2,79]),t(o,[2,80],{75:[1,152]}),t(o,[2,83]),t(o,[2,84],{13:[1,153]}),t(o,[2,86],{13:[1,155],75:[1,154]}),{22:M,58:G,80:U,82:156,83:106,84:z,85:K,86:Y,87:W,88:j,89:X},t(S,[2,95]),t(Pt,[2,60]),{39:[2,10]},{14:[1,157]},t(it,[2,55]),t(o,[2,34]),{41:[2,38]},{41:[1,158]},t(o,[2,81]),t(o,[2,85]),t(o,[2,87]),t(o,[2,88],{75:[1,159]}),t(Gt,[2,93],{83:144,22:M,58:G,80:U,84:z,85:K,86:Y,87:W,88:j,89:X}),t(Ft,[2,8]),t(tt,[2,42]),t(o,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:p(function(N,l){if(l.recoverable)this.trace(N);else{var c=new Error(N);throw c.hash=l,c}},"parseError"),parse:p(function(N){var l=this,c=[0],n=[],A=[null],e=[],D=this.table,s="",at=0,Ut=0,qt=2,zt=1,Ht=e.slice.call(arguments,1),f=Object.create(this.lexer),x={yy:{}};for(var _t in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_t)&&(x.yy[_t]=this.yy[_t]);f.setInput(N,x.yy),x.yy.lexer=f,x.yy.parser=this,typeof f.yylloc>"u"&&(f.yylloc={});var St=f.yylloc;e.push(St);var Vt=f.options&&f.options.ranges;typeof x.yy.parseError=="function"?this.parseError=x.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Jt(B){c.length=c.length-2*B,A.length=A.length-B,e.length=e.length-B}p(Jt,"popStack");function Kt(){var B;return B=n.pop()||f.lex()||zt,typeof B!="number"&&(B instanceof Array&&(n=B,B=n.pop()),B=l.symbols_[B]||B),B}p(Kt,"lex");for(var F,O,_,Nt,w={},rt,L,Yt,ut;;){if(O=c[c.length-1],this.defaultActions[O]?_=this.defaultActions[O]:((F===null||typeof F>"u")&&(F=Kt()),_=D[O]&&D[O][F]),typeof _>"u"||!_.length||!_[0]){var Lt="";ut=[];for(rt in D[O])this.terminals_[rt]&&rt>qt&&ut.push("'"+this.terminals_[rt]+"'");f.showPosition?Lt="Parse error on line "+(at+1)+`: +import{l as Zt}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import{a as te}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import{$ as ee}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import{q as p,O as Ot,A as k,ak as se,al as ie,am as vt,a9 as Q,a8 as ne,a7 as ae,a5 as re,a6 as ue,an as le,ao as oe,ag as $,at as ce,as as he,ad as pe,bh as R}from"../app.DfYWW83x.js";var It=(function(){var t=p(function(N,l,c,n){for(c=c||{},n=N.length;n--;c[N[n]]=l);return c},"o"),i=[1,18],u=[1,19],a=[1,20],r=[1,41],h=[1,42],d=[1,26],y=[1,24],T=[1,25],ot=[1,32],ct=[1,33],ht=[1,34],C=[1,45],pt=[1,35],dt=[1,36],At=[1,37],yt=[1,38],Ct=[1,27],mt=[1,28],bt=[1,29],gt=[1,30],ft=[1,31],m=[1,44],b=[1,46],g=[1,43],E=[1,47],Et=[1,9],o=[1,8,9],q=[1,58],H=[1,59],V=[1,60],J=[1,61],Z=[1,62],kt=[1,63],Tt=[1,64],tt=[1,8,9,41],wt=[1,76],I=[1,8,9,12,13,22,39,41,44,66,67,68,69,70,71,72,77,79],et=[1,8,9,12,13,17,20,22,39,41,44,48,58,66,67,68,69,70,71,72,77,79,84,99,101,102],st=[13,58,84,99,101,102],P=[13,58,71,72,84,99,101,102],Rt=[13,58,66,67,68,69,70,84,99,101,102],Dt=[1,98],M=[1,115],G=[1,107],U=[1,113],z=[1,108],K=[1,109],Y=[1,110],W=[1,111],j=[1,112],X=[1,114],Pt=[22,58,59,80,84,85,86,87,88,89],Ft=[1,8,9,39,41,44],it=[1,8,9,22],Mt=[1,143],Gt=[1,8,9,59],S=[1,8,9,22,58,59,80,84,85,86,87,88,89],Bt={trace:p(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statements:5,graphConfig:6,CLASS_DIAGRAM:7,NEWLINE:8,EOF:9,statement:10,classLabel:11,SQS:12,STR:13,SQE:14,namespaceName:15,alphaNumToken:16,DOT:17,className:18,classLiteralName:19,GENERICTYPE:20,relationStatement:21,LABEL:22,namespaceStatement:23,classStatement:24,memberStatement:25,annotationStatement:26,clickStatement:27,styleStatement:28,cssClassStatement:29,noteStatement:30,classDefStatement:31,direction:32,acc_title:33,acc_title_value:34,acc_descr:35,acc_descr_value:36,acc_descr_multiline_value:37,namespaceIdentifier:38,STRUCT_START:39,classStatements:40,STRUCT_STOP:41,NAMESPACE:42,classIdentifier:43,STYLE_SEPARATOR:44,members:45,CLASS:46,ANNOTATION_START:47,ANNOTATION_END:48,MEMBER:49,SEPARATOR:50,relation:51,NOTE_FOR:52,noteText:53,NOTE:54,CLASSDEF:55,classList:56,stylesOpt:57,ALPHA:58,COMMA:59,direction_tb:60,direction_bt:61,direction_rl:62,direction_lr:63,relationType:64,lineType:65,AGGREGATION:66,EXTENSION:67,COMPOSITION:68,DEPENDENCY:69,LOLLIPOP:70,LINE:71,DOTTED_LINE:72,CALLBACK:73,LINK:74,LINK_TARGET:75,CLICK:76,CALLBACK_NAME:77,CALLBACK_ARGS:78,HREF:79,STYLE:80,CSSCLASS:81,style:82,styleComponent:83,NUM:84,COLON:85,UNIT:86,SPACE:87,BRKT:88,PCT:89,commentToken:90,textToken:91,graphCodeTokens:92,textNoTagsToken:93,TAGSTART:94,TAGEND:95,"==":96,"--":97,DEFAULT:98,MINUS:99,keywords:100,UNICODE_TEXT:101,BQUOTE_STR:102,$accept:0,$end:1},terminals_:{2:"error",7:"CLASS_DIAGRAM",8:"NEWLINE",9:"EOF",12:"SQS",13:"STR",14:"SQE",17:"DOT",20:"GENERICTYPE",22:"LABEL",33:"acc_title",34:"acc_title_value",35:"acc_descr",36:"acc_descr_value",37:"acc_descr_multiline_value",39:"STRUCT_START",41:"STRUCT_STOP",42:"NAMESPACE",44:"STYLE_SEPARATOR",46:"CLASS",47:"ANNOTATION_START",48:"ANNOTATION_END",49:"MEMBER",50:"SEPARATOR",52:"NOTE_FOR",54:"NOTE",55:"CLASSDEF",58:"ALPHA",59:"COMMA",60:"direction_tb",61:"direction_bt",62:"direction_rl",63:"direction_lr",66:"AGGREGATION",67:"EXTENSION",68:"COMPOSITION",69:"DEPENDENCY",70:"LOLLIPOP",71:"LINE",72:"DOTTED_LINE",73:"CALLBACK",74:"LINK",75:"LINK_TARGET",76:"CLICK",77:"CALLBACK_NAME",78:"CALLBACK_ARGS",79:"HREF",80:"STYLE",81:"CSSCLASS",84:"NUM",85:"COLON",86:"UNIT",87:"SPACE",88:"BRKT",89:"PCT",92:"graphCodeTokens",94:"TAGSTART",95:"TAGEND",96:"==",97:"--",98:"DEFAULT",99:"MINUS",100:"keywords",101:"UNICODE_TEXT",102:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[4,1],[6,4],[5,1],[5,2],[5,3],[11,3],[15,1],[15,3],[15,2],[18,1],[18,3],[18,1],[18,2],[18,2],[18,2],[10,1],[10,2],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[23,4],[23,5],[38,2],[40,1],[40,2],[40,3],[24,1],[24,3],[24,4],[24,6],[43,2],[43,3],[26,4],[45,1],[45,2],[25,1],[25,2],[25,1],[25,1],[21,3],[21,4],[21,4],[21,5],[30,3],[30,2],[31,3],[56,1],[56,3],[32,1],[32,1],[32,1],[32,1],[51,3],[51,2],[51,2],[51,1],[64,1],[64,1],[64,1],[64,1],[64,1],[65,1],[65,1],[27,3],[27,4],[27,3],[27,4],[27,4],[27,5],[27,3],[27,4],[27,4],[27,5],[27,4],[27,5],[27,5],[27,6],[28,3],[29,3],[57,1],[57,3],[82,1],[82,2],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[90,1],[90,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[91,1],[93,1],[93,1],[93,1],[93,1],[16,1],[16,1],[16,1],[16,1],[19,1],[53,1]],performAction:p(function(N,l,c,n,A,e,D){var s=e.length-1;switch(A){case 8:this.$=e[s-1];break;case 9:case 12:case 14:this.$=e[s];break;case 10:case 13:this.$=e[s-2]+"."+e[s];break;case 11:case 15:this.$=e[s-1]+e[s];break;case 16:case 17:this.$=e[s-1]+"~"+e[s]+"~";break;case 18:n.addRelation(e[s]);break;case 19:e[s-1].title=n.cleanupLabel(e[s]),n.addRelation(e[s-1]);break;case 30:this.$=e[s].trim(),n.setAccTitle(this.$);break;case 31:case 32:this.$=e[s].trim(),n.setAccDescription(this.$);break;case 33:n.addClassesToNamespace(e[s-3],e[s-1]);break;case 34:n.addClassesToNamespace(e[s-4],e[s-1]);break;case 35:this.$=e[s],n.addNamespace(e[s]);break;case 36:this.$=[e[s]];break;case 37:this.$=[e[s-1]];break;case 38:e[s].unshift(e[s-2]),this.$=e[s];break;case 40:n.setCssClass(e[s-2],e[s]);break;case 41:n.addMembers(e[s-3],e[s-1]);break;case 42:n.setCssClass(e[s-5],e[s-3]),n.addMembers(e[s-5],e[s-1]);break;case 43:this.$=e[s],n.addClass(e[s]);break;case 44:this.$=e[s-1],n.addClass(e[s-1]),n.setClassLabel(e[s-1],e[s]);break;case 45:n.addAnnotation(e[s],e[s-2]);break;case 46:case 59:this.$=[e[s]];break;case 47:e[s].push(e[s-1]),this.$=e[s];break;case 48:break;case 49:n.addMember(e[s-1],n.cleanupLabel(e[s]));break;case 50:break;case 51:break;case 52:this.$={id1:e[s-2],id2:e[s],relation:e[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 53:this.$={id1:e[s-3],id2:e[s],relation:e[s-1],relationTitle1:e[s-2],relationTitle2:"none"};break;case 54:this.$={id1:e[s-3],id2:e[s],relation:e[s-2],relationTitle1:"none",relationTitle2:e[s-1]};break;case 55:this.$={id1:e[s-4],id2:e[s],relation:e[s-2],relationTitle1:e[s-3],relationTitle2:e[s-1]};break;case 56:n.addNote(e[s],e[s-1]);break;case 57:n.addNote(e[s]);break;case 58:this.$=e[s-2],n.defineClass(e[s-1],e[s]);break;case 60:this.$=e[s-2].concat([e[s]]);break;case 61:n.setDirection("TB");break;case 62:n.setDirection("BT");break;case 63:n.setDirection("RL");break;case 64:n.setDirection("LR");break;case 65:this.$={type1:e[s-2],type2:e[s],lineType:e[s-1]};break;case 66:this.$={type1:"none",type2:e[s],lineType:e[s-1]};break;case 67:this.$={type1:e[s-1],type2:"none",lineType:e[s]};break;case 68:this.$={type1:"none",type2:"none",lineType:e[s]};break;case 69:this.$=n.relationType.AGGREGATION;break;case 70:this.$=n.relationType.EXTENSION;break;case 71:this.$=n.relationType.COMPOSITION;break;case 72:this.$=n.relationType.DEPENDENCY;break;case 73:this.$=n.relationType.LOLLIPOP;break;case 74:this.$=n.lineType.LINE;break;case 75:this.$=n.lineType.DOTTED_LINE;break;case 76:case 82:this.$=e[s-2],n.setClickEvent(e[s-1],e[s]);break;case 77:case 83:this.$=e[s-3],n.setClickEvent(e[s-2],e[s-1]),n.setTooltip(e[s-2],e[s]);break;case 78:this.$=e[s-2],n.setLink(e[s-1],e[s]);break;case 79:this.$=e[s-3],n.setLink(e[s-2],e[s-1],e[s]);break;case 80:this.$=e[s-3],n.setLink(e[s-2],e[s-1]),n.setTooltip(e[s-2],e[s]);break;case 81:this.$=e[s-4],n.setLink(e[s-3],e[s-2],e[s]),n.setTooltip(e[s-3],e[s-1]);break;case 84:this.$=e[s-3],n.setClickEvent(e[s-2],e[s-1],e[s]);break;case 85:this.$=e[s-4],n.setClickEvent(e[s-3],e[s-2],e[s-1]),n.setTooltip(e[s-3],e[s]);break;case 86:this.$=e[s-3],n.setLink(e[s-2],e[s]);break;case 87:this.$=e[s-4],n.setLink(e[s-3],e[s-1],e[s]);break;case 88:this.$=e[s-4],n.setLink(e[s-3],e[s-1]),n.setTooltip(e[s-3],e[s]);break;case 89:this.$=e[s-5],n.setLink(e[s-4],e[s-2],e[s]),n.setTooltip(e[s-4],e[s-1]);break;case 90:this.$=e[s-2],n.setCssStyle(e[s-1],e[s]);break;case 91:n.setCssClass(e[s-1],e[s]);break;case 92:this.$=[e[s]];break;case 93:e[s-2].push(e[s]),this.$=e[s-2];break;case 95:this.$=e[s-1]+e[s];break}},"anonymous"),table:[{3:1,4:2,5:3,6:4,7:[1,6],10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:u,37:a,38:22,42:r,43:23,46:h,47:d,49:y,50:T,52:ot,54:ct,55:ht,58:C,60:pt,61:dt,62:At,63:yt,73:Ct,74:mt,76:bt,80:gt,81:ft,84:m,99:b,101:g,102:E},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},t(Et,[2,5],{8:[1,48]}),{8:[1,49]},t(o,[2,18],{22:[1,50]}),t(o,[2,20]),t(o,[2,21]),t(o,[2,22]),t(o,[2,23]),t(o,[2,24]),t(o,[2,25]),t(o,[2,26]),t(o,[2,27]),t(o,[2,28]),t(o,[2,29]),{34:[1,51]},{36:[1,52]},t(o,[2,32]),t(o,[2,48],{51:53,64:56,65:57,13:[1,54],22:[1,55],66:q,67:H,68:V,69:J,70:Z,71:kt,72:Tt}),{39:[1,65]},t(tt,[2,39],{39:[1,67],44:[1,66]}),t(o,[2,50]),t(o,[2,51]),{16:68,58:C,84:m,99:b,101:g},{16:39,18:69,19:40,58:C,84:m,99:b,101:g,102:E},{16:39,18:70,19:40,58:C,84:m,99:b,101:g,102:E},{16:39,18:71,19:40,58:C,84:m,99:b,101:g,102:E},{58:[1,72]},{13:[1,73]},{16:39,18:74,19:40,58:C,84:m,99:b,101:g,102:E},{13:wt,53:75},{56:77,58:[1,78]},t(o,[2,61]),t(o,[2,62]),t(o,[2,63]),t(o,[2,64]),t(I,[2,12],{16:39,19:40,18:80,17:[1,79],20:[1,81],58:C,84:m,99:b,101:g,102:E}),t(I,[2,14],{20:[1,82]}),{15:83,16:84,58:C,84:m,99:b,101:g},{16:39,18:85,19:40,58:C,84:m,99:b,101:g,102:E},t(et,[2,118]),t(et,[2,119]),t(et,[2,120]),t(et,[2,121]),t([1,8,9,12,13,20,22,39,41,44,66,67,68,69,70,71,72,77,79],[2,122]),t(Et,[2,6],{10:5,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,18:21,38:22,43:23,16:39,19:40,5:86,33:i,35:u,37:a,42:r,46:h,47:d,49:y,50:T,52:ot,54:ct,55:ht,58:C,60:pt,61:dt,62:At,63:yt,73:Ct,74:mt,76:bt,80:gt,81:ft,84:m,99:b,101:g,102:E}),{5:87,10:5,16:39,18:21,19:40,21:7,23:8,24:9,25:10,26:11,27:12,28:13,29:14,30:15,31:16,32:17,33:i,35:u,37:a,38:22,42:r,43:23,46:h,47:d,49:y,50:T,52:ot,54:ct,55:ht,58:C,60:pt,61:dt,62:At,63:yt,73:Ct,74:mt,76:bt,80:gt,81:ft,84:m,99:b,101:g,102:E},t(o,[2,19]),t(o,[2,30]),t(o,[2,31]),{13:[1,89],16:39,18:88,19:40,58:C,84:m,99:b,101:g,102:E},{51:90,64:56,65:57,66:q,67:H,68:V,69:J,70:Z,71:kt,72:Tt},t(o,[2,49]),{65:91,71:kt,72:Tt},t(st,[2,68],{64:92,66:q,67:H,68:V,69:J,70:Z}),t(P,[2,69]),t(P,[2,70]),t(P,[2,71]),t(P,[2,72]),t(P,[2,73]),t(Rt,[2,74]),t(Rt,[2,75]),{8:[1,94],24:95,40:93,43:23,46:h},{16:96,58:C,84:m,99:b,101:g},{45:97,49:Dt},{48:[1,99]},{13:[1,100]},{13:[1,101]},{77:[1,102],79:[1,103]},{22:M,57:104,58:G,80:U,82:105,83:106,84:z,85:K,86:Y,87:W,88:j,89:X},{58:[1,116]},{13:wt,53:117},t(o,[2,57]),t(o,[2,123]),{22:M,57:118,58:G,59:[1,119],80:U,82:105,83:106,84:z,85:K,86:Y,87:W,88:j,89:X},t(Pt,[2,59]),{16:39,18:120,19:40,58:C,84:m,99:b,101:g,102:E},t(I,[2,15]),t(I,[2,16]),t(I,[2,17]),{39:[2,35]},{15:122,16:84,17:[1,121],39:[2,9],58:C,84:m,99:b,101:g},t(Ft,[2,43],{11:123,12:[1,124]}),t(Et,[2,7]),{9:[1,125]},t(it,[2,52]),{16:39,18:126,19:40,58:C,84:m,99:b,101:g,102:E},{13:[1,128],16:39,18:127,19:40,58:C,84:m,99:b,101:g,102:E},t(st,[2,67],{64:129,66:q,67:H,68:V,69:J,70:Z}),t(st,[2,66]),{41:[1,130]},{24:95,40:131,43:23,46:h},{8:[1,132],41:[2,36]},t(tt,[2,40],{39:[1,133]}),{41:[1,134]},{41:[2,46],45:135,49:Dt},{16:39,18:136,19:40,58:C,84:m,99:b,101:g,102:E},t(o,[2,76],{13:[1,137]}),t(o,[2,78],{13:[1,139],75:[1,138]}),t(o,[2,82],{13:[1,140],78:[1,141]}),{13:[1,142]},t(o,[2,90],{59:Mt}),t(Gt,[2,92],{83:144,22:M,58:G,80:U,84:z,85:K,86:Y,87:W,88:j,89:X}),t(S,[2,94]),t(S,[2,96]),t(S,[2,97]),t(S,[2,98]),t(S,[2,99]),t(S,[2,100]),t(S,[2,101]),t(S,[2,102]),t(S,[2,103]),t(S,[2,104]),t(o,[2,91]),t(o,[2,56]),t(o,[2,58],{59:Mt}),{58:[1,145]},t(I,[2,13]),{15:146,16:84,58:C,84:m,99:b,101:g},{39:[2,11]},t(Ft,[2,44]),{13:[1,147]},{1:[2,4]},t(it,[2,54]),t(it,[2,53]),{16:39,18:148,19:40,58:C,84:m,99:b,101:g,102:E},t(st,[2,65]),t(o,[2,33]),{41:[1,149]},{24:95,40:150,41:[2,37],43:23,46:h},{45:151,49:Dt},t(tt,[2,41]),{41:[2,47]},t(o,[2,45]),t(o,[2,77]),t(o,[2,79]),t(o,[2,80],{75:[1,152]}),t(o,[2,83]),t(o,[2,84],{13:[1,153]}),t(o,[2,86],{13:[1,155],75:[1,154]}),{22:M,58:G,80:U,82:156,83:106,84:z,85:K,86:Y,87:W,88:j,89:X},t(S,[2,95]),t(Pt,[2,60]),{39:[2,10]},{14:[1,157]},t(it,[2,55]),t(o,[2,34]),{41:[2,38]},{41:[1,158]},t(o,[2,81]),t(o,[2,85]),t(o,[2,87]),t(o,[2,88],{75:[1,159]}),t(Gt,[2,93],{83:144,22:M,58:G,80:U,84:z,85:K,86:Y,87:W,88:j,89:X}),t(Ft,[2,8]),t(tt,[2,42]),t(o,[2,89])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],83:[2,35],122:[2,11],125:[2,4],135:[2,47],146:[2,10],150:[2,38]},parseError:p(function(N,l){if(l.recoverable)this.trace(N);else{var c=new Error(N);throw c.hash=l,c}},"parseError"),parse:p(function(N){var l=this,c=[0],n=[],A=[null],e=[],D=this.table,s="",at=0,Ut=0,qt=2,zt=1,Ht=e.slice.call(arguments,1),f=Object.create(this.lexer),x={yy:{}};for(var _t in this.yy)Object.prototype.hasOwnProperty.call(this.yy,_t)&&(x.yy[_t]=this.yy[_t]);f.setInput(N,x.yy),x.yy.lexer=f,x.yy.parser=this,typeof f.yylloc>"u"&&(f.yylloc={});var St=f.yylloc;e.push(St);var Vt=f.options&&f.options.ranges;typeof x.yy.parseError=="function"?this.parseError=x.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Jt(B){c.length=c.length-2*B,A.length=A.length-B,e.length=e.length-B}p(Jt,"popStack");function Kt(){var B;return B=n.pop()||f.lex()||zt,typeof B!="number"&&(B instanceof Array&&(n=B,B=n.pop()),B=l.symbols_[B]||B),B}p(Kt,"lex");for(var F,O,_,Nt,w={},rt,L,Yt,ut;;){if(O=c[c.length-1],this.defaultActions[O]?_=this.defaultActions[O]:((F===null||typeof F>"u")&&(F=Kt()),_=D[O]&&D[O][F]),typeof _>"u"||!_.length||!_[0]){var Lt="";ut=[];for(rt in D[O])this.terminals_[rt]&&rt>qt&&ut.push("'"+this.terminals_[rt]+"'");f.showPosition?Lt="Parse error on line "+(at+1)+`: `+f.showPosition()+` Expecting `+ut.join(", ")+", got '"+(this.terminals_[F]||F)+"'":Lt="Parse error on line "+(at+1)+": Unexpected "+(F==zt?"end of input":"'"+(this.terminals_[F]||F)+"'"),this.parseError(Lt,{text:f.match,token:this.terminals_[F]||F,line:f.yylineno,loc:St,expected:ut})}if(_[0]instanceof Array&&_.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+F);switch(_[0]){case 1:c.push(F),A.push(f.yytext),e.push(f.yylloc),c.push(_[1]),F=null,Ut=f.yyleng,s=f.yytext,at=f.yylineno,St=f.yylloc;break;case 2:if(L=this.productions_[_[1]][1],w.$=A[A.length-L],w._$={first_line:e[e.length-(L||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(L||1)].first_column,last_column:e[e.length-1].last_column},Vt&&(w._$.range=[e[e.length-(L||1)].range[0],e[e.length-1].range[1]]),Nt=this.performAction.apply(w,[s,Ut,at,x.yy,_[1],A,e].concat(Ht)),typeof Nt<"u")return Nt;L&&(c=c.slice(0,-1*L*2),A=A.slice(0,-1*L),e=e.slice(0,-1*L)),c.push(this.productions_[_[1]][0]),A.push(w.$),e.push(w._$),Yt=D[c[c.length-2]][c[c.length-1]],c.push(Yt);break;case 3:return!0}}return!0},"parse")},Qt=(function(){var N={EOF:1,parseError:p(function(l,c){if(this.yy.parser)this.yy.parser.parseError(l,c);else throw new Error(l)},"parseError"),setInput:p(function(l,c){return this.yy=c||this.yy||{},this._input=l,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:p(function(){var l=this._input[0];this.yytext+=l,this.yyleng++,this.offset++,this.match+=l,this.matched+=l;var c=l.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),l},"input"),unput:p(function(l){var c=l.length,n=l.split(/(?:\r\n?|\n)/g);this._input=l+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===A.length?this.yylloc.first_column:0)+A[A.length-n.length].length-n[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:p(function(){return this._more=!0,this},"more"),reject:p(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:p(function(l){this.unput(this.match.slice(l))},"less"),pastInput:p(function(){var l=this.matched.substr(0,this.matched.length-this.match.length);return(l.length>20?"...":"")+l.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:p(function(){var l=this.match;return l.length<20&&(l+=this._input.substr(0,20-l.length)),(l.substr(0,20)+(l.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:p(function(){var l=this.pastInput(),c=new Array(l.length+1).join("-");return l+this.upcomingInput()+` diff --git a/assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.C12oGQvn.js b/assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.C12oGQvn.js deleted file mode 100644 index 988ef88..0000000 --- a/assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.C12oGQvn.js +++ /dev/null @@ -1 +0,0 @@ -import{T as e,D as a,E as s,k as t}from"./chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.u1EkA7cz.js";import{q as o}from"../app.DiEjJ8gz.js";import"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import"./vitepress-theme-teek.CUuTa6hm.js";var b={parser:s,get db(){return new t},renderer:a,styles:e,init:o(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram}; diff --git a/assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.DAtmvBpB.js b/assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.DAtmvBpB.js new file mode 100644 index 0000000..b0dfad1 --- /dev/null +++ b/assets/chunks/classDiagram-M3E45YP4-DwgdiJrV-CBqnjnjd.DAtmvBpB.js @@ -0,0 +1 @@ +import{T as e,D as a,E as s,k as t}from"./chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.CTDEu5lJ.js";import{q as o}from"../app.DfYWW83x.js";import"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var b={parser:s,get db(){return new t},renderer:a,styles:e,init:o(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram}; diff --git a/assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.C12oGQvn.js b/assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.C12oGQvn.js deleted file mode 100644 index 988ef88..0000000 --- a/assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.C12oGQvn.js +++ /dev/null @@ -1 +0,0 @@ -import{T as e,D as a,E as s,k as t}from"./chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.u1EkA7cz.js";import{q as o}from"../app.DiEjJ8gz.js";import"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import"./vitepress-theme-teek.CUuTa6hm.js";var b={parser:s,get db(){return new t},renderer:a,styles:e,init:o(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram}; diff --git a/assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.DAtmvBpB.js b/assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.DAtmvBpB.js new file mode 100644 index 0000000..b0dfad1 --- /dev/null +++ b/assets/chunks/classDiagram-v2-YAWTLIQI-DwgdiJrV-CBqnjnjd.DAtmvBpB.js @@ -0,0 +1 @@ +import{T as e,D as a,E as s,k as t}from"./chunk-SZ463SBG-DDSAy34r-Cj6UB3O8.CTDEu5lJ.js";import{q as o}from"../app.DfYWW83x.js";import"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var b={parser:s,get db(){return new t},renderer:a,styles:e,init:o(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram}; diff --git a/assets/chunks/clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js b/assets/chunks/clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js deleted file mode 100644 index 5fa8a4e..0000000 --- a/assets/chunks/clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js +++ /dev/null @@ -1 +0,0 @@ -import{F as t}from"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";var n=4;function e(r){return t(r,n)}export{e as n}; diff --git a/assets/chunks/clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js b/assets/chunks/clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js new file mode 100644 index 0000000..61cdb9c --- /dev/null +++ b/assets/chunks/clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js @@ -0,0 +1 @@ +import{F as t}from"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";var n=4;function e(r){return t(r,n)}export{e as n}; diff --git a/assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.CTr5MXTt.js b/assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.DfVkA-kZ.js similarity index 96% rename from assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.CTr5MXTt.js rename to assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.DfVkA-kZ.js index dfe6db0..ea9bb4b 100644 --- a/assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.CTr5MXTt.js +++ b/assets/chunks/dagre-JOIXM2OF-HUv6-TmE-C9NriUuC.DfVkA-kZ.js @@ -1,4 +1,4 @@ -import{q as h,r as F,F as L,P as M,z as Y,O as i,A as j,v as z,D as H,E as q,a as K,b as W,I as O,d as $,c as Q,e as U}from"../app.DiEjJ8gz.js";import{y as k}from"./graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js";import{i as V}from"./layout-FfY8zw-4-CVLJrweZ.BPwdqM1F.js";import{O as b}from"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import{n as Z}from"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";import{l as P}from"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./vitepress-theme-teek.CUuTa6hm.js";function w(e){var n={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:_(e),edges:ee(e)};return b(e.graph())||(n.value=Z(e.graph())),n}function _(e){return P(e.nodes(),function(n){var t=e.node(n),s=e.parent(n),r={v:n};return b(t)||(r.value=t),b(s)||(r.parent=s),r})}function ee(e){return P(e.edges(),function(n){var t=e.edge(n),s={v:n.v,w:n.w};return b(n.name)||(s.name=n.name),b(t)||(s.value=t),s})}var d=new Map,X=new Map,G=new Map,te=h(()=>{X.clear(),G.clear(),d.clear()},"clear"),I=h((e,n)=>{const t=X.get(n)||[];return i.trace("In isDescendant",n," ",e," = ",t.includes(e)),t.includes(e)},"isDescendant"),ne=h((e,n)=>{const t=X.get(n)||[];return i.info("Descendants of ",n," is ",t),i.info("Edge is ",e),e.v===n||e.w===n?!1:t?t.includes(e.v)||I(e.v,n)||I(e.w,n)||t.includes(e.w):(i.debug("Tilt, ",n,",not in descendants"),!1)},"edgeInCluster"),A=h((e,n,t,s)=>{i.warn("Copying children of ",e,"root",s,"data",n.node(e),s);const r=n.children(e)||[];e!==s&&r.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",r),r.forEach(o=>{if(n.children(o).length>0)A(o,n,t,s);else{const c=n.node(o);i.info("cp ",o," to ",s," with parent ",e),t.setNode(o,c),s!==n.parent(o)&&(i.warn("Setting parent",o,n.parent(o)),t.setParent(o,n.parent(o))),e!==s&&o!==e?(i.debug("Setting parent",o,e),t.setParent(o,e)):(i.info("In copy ",e,"root",s,"data",n.node(e),s),i.debug("Not Setting parent for node=",o,"cluster!==rootId",e!==s,"node!==clusterId",o!==e));const g=n.edges(o);i.debug("Copying Edges",g),g.forEach(f=>{i.info("Edge",f);const u=n.edge(f.v,f.w,f.name);i.info("Edge data",u,s);try{ne(f,s)?(i.info("Copying as ",f.v,f.w,u,f.name),t.setEdge(f.v,f.w,u,f.name),i.info("newGraph edges ",t.edges(),t.edge(t.edges()[0]))):i.info("Skipping copy of edge ",f.v,"-->",f.w," rootId: ",s," clusterId:",e)}catch(m){i.error(m)}})}i.debug("Removing node",o),n.removeNode(o)})},"copy"),J=h((e,n)=>{const t=n.children(e);let s=[...t];for(const r of t)G.set(r,e),s=[...s,...J(r,n)];return s},"extractDescendants"),ae=h((e,n,t)=>{const s=e.edges().filter(g=>g.v===n||g.w===n),r=e.edges().filter(g=>g.v===t||g.w===t),o=s.map(g=>({v:g.v===n?t:g.v,w:g.w===n?n:g.w})),c=r.map(g=>({v:g.v,w:g.w}));return o.filter(g=>c.some(f=>g.v===f.v&&g.w===f.w))},"findCommonEdges"),C=h((e,n,t)=>{const s=n.children(e);if(i.trace("Searching children of id ",e,s),s.length<1)return e;let r;for(const o of s){const c=C(o,n,t),g=ae(n,t,c);if(c)if(g.length>0)r=c;else return c}return r},"findNonClusterChild"),D=h(e=>!d.has(e)||!d.get(e).externalConnections?e:d.has(e)?d.get(e).id:e,"getAnchorId"),ie=h((e,n)=>{if(!e||n>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(t){e.children(t).length>0&&(i.warn("Cluster identified",t," Replacement id in edges: ",C(t,e,t)),X.set(t,J(t,e)),d.set(t,{id:C(t,e,t),clusterData:e.node(t)}))}),e.nodes().forEach(function(t){const s=e.children(t),r=e.edges();s.length>0?(i.debug("Cluster identified",t,X),r.forEach(o=>{const c=I(o.v,t),g=I(o.w,t);c^g&&(i.warn("Edge: ",o," leaves cluster ",t),i.warn("Descendants of XXX ",t,": ",X.get(t)),d.get(t).externalConnections=!0)})):i.debug("Not a cluster ",t,X)});for(let t of d.keys()){const s=d.get(t).id,r=e.parent(s);r!==t&&d.has(r)&&!d.get(r).externalConnections&&(d.get(t).id=r)}e.edges().forEach(function(t){const s=e.edge(t);i.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),i.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,o=t.w;if(i.warn("Fix XXX",d,"ids:",t.v,t.w,"Translating: ",d.get(t.v)," --- ",d.get(t.w)),d.get(t.v)||d.get(t.w)){if(i.warn("Fixing and trying - removing XXX",t.v,t.w,t.name),r=D(t.v),o=D(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v){const c=e.parent(r);d.get(c).externalConnections=!0,s.fromCluster=t.v}if(o!==t.w){const c=e.parent(o);d.get(c).externalConnections=!0,s.toCluster=t.w}i.warn("Fix Replacing with XXX",r,o,t.name),e.setEdge(r,o,s,t.name)}}),i.warn("Adjusted Graph",w(e)),B(e,0),i.trace(d)},"adjustClustersAndEdges"),B=h((e,n)=>{if(i.warn("extractor - ",n,w(e),e.children("D")),n>10){i.error("Bailing out");return}let t=e.nodes(),s=!1;for(const r of t){const o=e.children(r);s=s||o.length>0}if(!s){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",t,n);for(const r of t)if(i.debug("Extracting node",r,d,d.has(r)&&!d.get(r).externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",n),!d.has(r))i.debug("Not a cluster",r,n);else if(!d.get(r).externalConnections&&e.children(r)&&e.children(r).length>0){i.warn("Cluster without external connections, without a parent and with children",r,n);let o=e.graph().rankdir==="TB"?"LR":"TB";d.get(r)?.clusterData?.dir&&(o=d.get(r).clusterData.dir,i.warn("Fixing dir",d.get(r).clusterData.dir,o));const c=new k({multigraph:!0,compound:!0}).setGraph({rankdir:o,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",w(e)),A(r,e,c,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:d.get(r).clusterData,label:d.get(r).label,graph:c}),i.warn("New graph after copy node: (",r,")",w(c)),i.debug("Old graph after copy",w(e))}else i.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!d.get(r).externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),n),i.debug(d);t=e.nodes(),i.warn("New list of nodes",t);for(const r of t){const o=e.node(r);i.warn(" Now next level",r,o),o?.clusterNode&&B(o.graph,n+1)}},"extractor"),T=h((e,n)=>{if(n.length===0)return[];let t=Object.assign([],n);return n.forEach(s=>{const r=e.children(s),o=T(e,r);t=[...t,...o]}),t},"sorter"),re=h(e=>T(e,e.children()),"sortNodesByHierarchy"),R=h(async(e,n,t,s,r,o)=>{i.warn("Graph in recursive render:XAX",w(n),r);const c=n.graph().rankdir;i.trace("Dir in recursive render - dir:",c);const g=e.insert("g").attr("class","root");n.nodes()?i.info("Recursive render XXX",n.nodes()):i.info("No nodes found for",n),n.edges().length>0&&i.info("Recursive edges",n.edge(n.edges()[0]));const f=g.insert("g").attr("class","clusters"),u=g.insert("g").attr("class","edgePaths"),m=g.insert("g").attr("class","edgeLabels"),y=g.insert("g").attr("class","nodes");await Promise.all(n.nodes().map(async function(l){const a=n.node(l);if(r!==void 0){const p=JSON.parse(JSON.stringify(r.clusterData));i.trace(`Setting data for parent cluster XXX +import{q as h,r as F,F as L,P as M,z as Y,O as i,A as j,v as z,D as H,E as q,a as K,b as W,I as O,d as $,c as Q,e as U}from"../app.DfYWW83x.js";import{y as k}from"./graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js";import{i as V}from"./layout-FfY8zw-4-CVLJrweZ.CN6bbfRx.js";import{O as b}from"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import{n as Z}from"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";import{l as P}from"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./vitepress-theme-teek.Dg-9NfO3.js";function w(e){var n={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:_(e),edges:ee(e)};return b(e.graph())||(n.value=Z(e.graph())),n}function _(e){return P(e.nodes(),function(n){var t=e.node(n),s=e.parent(n),r={v:n};return b(t)||(r.value=t),b(s)||(r.parent=s),r})}function ee(e){return P(e.edges(),function(n){var t=e.edge(n),s={v:n.v,w:n.w};return b(n.name)||(s.name=n.name),b(t)||(s.value=t),s})}var d=new Map,X=new Map,G=new Map,te=h(()=>{X.clear(),G.clear(),d.clear()},"clear"),I=h((e,n)=>{const t=X.get(n)||[];return i.trace("In isDescendant",n," ",e," = ",t.includes(e)),t.includes(e)},"isDescendant"),ne=h((e,n)=>{const t=X.get(n)||[];return i.info("Descendants of ",n," is ",t),i.info("Edge is ",e),e.v===n||e.w===n?!1:t?t.includes(e.v)||I(e.v,n)||I(e.w,n)||t.includes(e.w):(i.debug("Tilt, ",n,",not in descendants"),!1)},"edgeInCluster"),A=h((e,n,t,s)=>{i.warn("Copying children of ",e,"root",s,"data",n.node(e),s);const r=n.children(e)||[];e!==s&&r.push(e),i.warn("Copying (nodes) clusterId",e,"nodes",r),r.forEach(o=>{if(n.children(o).length>0)A(o,n,t,s);else{const c=n.node(o);i.info("cp ",o," to ",s," with parent ",e),t.setNode(o,c),s!==n.parent(o)&&(i.warn("Setting parent",o,n.parent(o)),t.setParent(o,n.parent(o))),e!==s&&o!==e?(i.debug("Setting parent",o,e),t.setParent(o,e)):(i.info("In copy ",e,"root",s,"data",n.node(e),s),i.debug("Not Setting parent for node=",o,"cluster!==rootId",e!==s,"node!==clusterId",o!==e));const g=n.edges(o);i.debug("Copying Edges",g),g.forEach(f=>{i.info("Edge",f);const u=n.edge(f.v,f.w,f.name);i.info("Edge data",u,s);try{ne(f,s)?(i.info("Copying as ",f.v,f.w,u,f.name),t.setEdge(f.v,f.w,u,f.name),i.info("newGraph edges ",t.edges(),t.edge(t.edges()[0]))):i.info("Skipping copy of edge ",f.v,"-->",f.w," rootId: ",s," clusterId:",e)}catch(m){i.error(m)}})}i.debug("Removing node",o),n.removeNode(o)})},"copy"),J=h((e,n)=>{const t=n.children(e);let s=[...t];for(const r of t)G.set(r,e),s=[...s,...J(r,n)];return s},"extractDescendants"),ae=h((e,n,t)=>{const s=e.edges().filter(g=>g.v===n||g.w===n),r=e.edges().filter(g=>g.v===t||g.w===t),o=s.map(g=>({v:g.v===n?t:g.v,w:g.w===n?n:g.w})),c=r.map(g=>({v:g.v,w:g.w}));return o.filter(g=>c.some(f=>g.v===f.v&&g.w===f.w))},"findCommonEdges"),C=h((e,n,t)=>{const s=n.children(e);if(i.trace("Searching children of id ",e,s),s.length<1)return e;let r;for(const o of s){const c=C(o,n,t),g=ae(n,t,c);if(c)if(g.length>0)r=c;else return c}return r},"findNonClusterChild"),D=h(e=>!d.has(e)||!d.get(e).externalConnections?e:d.has(e)?d.get(e).id:e,"getAnchorId"),ie=h((e,n)=>{if(!e||n>10){i.debug("Opting out, no graph ");return}else i.debug("Opting in, graph ");e.nodes().forEach(function(t){e.children(t).length>0&&(i.warn("Cluster identified",t," Replacement id in edges: ",C(t,e,t)),X.set(t,J(t,e)),d.set(t,{id:C(t,e,t),clusterData:e.node(t)}))}),e.nodes().forEach(function(t){const s=e.children(t),r=e.edges();s.length>0?(i.debug("Cluster identified",t,X),r.forEach(o=>{const c=I(o.v,t),g=I(o.w,t);c^g&&(i.warn("Edge: ",o," leaves cluster ",t),i.warn("Descendants of XXX ",t,": ",X.get(t)),d.get(t).externalConnections=!0)})):i.debug("Not a cluster ",t,X)});for(let t of d.keys()){const s=d.get(t).id,r=e.parent(s);r!==t&&d.has(r)&&!d.get(r).externalConnections&&(d.get(t).id=r)}e.edges().forEach(function(t){const s=e.edge(t);i.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),i.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));let r=t.v,o=t.w;if(i.warn("Fix XXX",d,"ids:",t.v,t.w,"Translating: ",d.get(t.v)," --- ",d.get(t.w)),d.get(t.v)||d.get(t.w)){if(i.warn("Fixing and trying - removing XXX",t.v,t.w,t.name),r=D(t.v),o=D(t.w),e.removeEdge(t.v,t.w,t.name),r!==t.v){const c=e.parent(r);d.get(c).externalConnections=!0,s.fromCluster=t.v}if(o!==t.w){const c=e.parent(o);d.get(c).externalConnections=!0,s.toCluster=t.w}i.warn("Fix Replacing with XXX",r,o,t.name),e.setEdge(r,o,s,t.name)}}),i.warn("Adjusted Graph",w(e)),B(e,0),i.trace(d)},"adjustClustersAndEdges"),B=h((e,n)=>{if(i.warn("extractor - ",n,w(e),e.children("D")),n>10){i.error("Bailing out");return}let t=e.nodes(),s=!1;for(const r of t){const o=e.children(r);s=s||o.length>0}if(!s){i.debug("Done, no node has children",e.nodes());return}i.debug("Nodes = ",t,n);for(const r of t)if(i.debug("Extracting node",r,d,d.has(r)&&!d.get(r).externalConnections,!e.parent(r),e.node(r),e.children("D")," Depth ",n),!d.has(r))i.debug("Not a cluster",r,n);else if(!d.get(r).externalConnections&&e.children(r)&&e.children(r).length>0){i.warn("Cluster without external connections, without a parent and with children",r,n);let o=e.graph().rankdir==="TB"?"LR":"TB";d.get(r)?.clusterData?.dir&&(o=d.get(r).clusterData.dir,i.warn("Fixing dir",d.get(r).clusterData.dir,o));const c=new k({multigraph:!0,compound:!0}).setGraph({rankdir:o,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});i.warn("Old graph before copy",w(e)),A(r,e,c,r),e.setNode(r,{clusterNode:!0,id:r,clusterData:d.get(r).clusterData,label:d.get(r).label,graph:c}),i.warn("New graph after copy node: (",r,")",w(c)),i.debug("Old graph after copy",w(e))}else i.warn("Cluster ** ",r," **not meeting the criteria !externalConnections:",!d.get(r).externalConnections," no parent: ",!e.parent(r)," children ",e.children(r)&&e.children(r).length>0,e.children("D"),n),i.debug(d);t=e.nodes(),i.warn("New list of nodes",t);for(const r of t){const o=e.node(r);i.warn(" Now next level",r,o),o?.clusterNode&&B(o.graph,n+1)}},"extractor"),T=h((e,n)=>{if(n.length===0)return[];let t=Object.assign([],n);return n.forEach(s=>{const r=e.children(s),o=T(e,r);t=[...t,...o]}),t},"sorter"),re=h(e=>T(e,e.children()),"sortNodesByHierarchy"),R=h(async(e,n,t,s,r,o)=>{i.warn("Graph in recursive render:XAX",w(n),r);const c=n.graph().rankdir;i.trace("Dir in recursive render - dir:",c);const g=e.insert("g").attr("class","root");n.nodes()?i.info("Recursive render XXX",n.nodes()):i.info("No nodes found for",n),n.edges().length>0&&i.info("Recursive edges",n.edge(n.edges()[0]));const f=g.insert("g").attr("class","clusters"),u=g.insert("g").attr("class","edgePaths"),m=g.insert("g").attr("class","edgeLabels"),y=g.insert("g").attr("class","nodes");await Promise.all(n.nodes().map(async function(l){const a=n.node(l);if(r!==void 0){const p=JSON.parse(JSON.stringify(r.clusterData));i.trace(`Setting data for parent cluster XXX Node.id = `,l,` data=`,p.height,` Parent cluster`,r.height),n.setNode(r.id,p),n.parent(l)||(i.trace("Setting parent",l,r.id),n.setParent(l,r.id,p))}if(i.info("(Insert) Node XXX"+l+": "+JSON.stringify(n.node(l))),a?.clusterNode){i.info("Cluster identified XBX",l,a.width,n.node(l));const{ranksep:p,nodesep:E}=n.graph();a.graph.setGraph({...a.graph.graph(),ranksep:p+25,nodesep:E});const N=await R(y,a.graph,t,s,n.node(l),o),x=N.elem;z(a,x),a.diff=N.diff||0,i.info("New compound node after recursive render XAX",l,"width",a.width,"height",a.height),H(x,a)}else n.children(l).length>0?(i.trace("Cluster - the non recursive path XBX",l,a.id,a,a.width,"Graph:",n),i.trace(C(a.id,n)),d.set(a.id,{id:C(a.id,n),node:a})):(i.trace("Node - the non recursive path XAX",l,y,n.node(l),c),await q(y,n.node(l),{config:o,dir:c}))})),await h(async()=>{const l=n.edges().map(async function(a){const p=n.edge(a.v,a.w,a.name);i.info("Edge "+a.v+" -> "+a.w+": "+JSON.stringify(a)),i.info("Edge "+a.v+" -> "+a.w+": ",a," ",JSON.stringify(n.edge(a))),i.info("Fix",d,"ids:",a.v,a.w,"Translating: ",d.get(a.v),d.get(a.w)),await K(m,p)});await Promise.all(l)},"processEdges")(),i.info("Graph before layout:",JSON.stringify(w(n))),i.info("############################################# XXX"),i.info("### Layout ### XXX"),i.info("############################################# XXX"),V(n),i.info("Graph after layout:",JSON.stringify(w(n)));let v=0,{subGraphTitleTotalMargin:S}=W(o);return await Promise.all(re(n).map(async function(l){const a=n.node(l);if(i.info("Position XBX => "+l+": ("+a.x,","+a.y,") width: ",a.width," height: ",a.height),a?.clusterNode)a.y+=S,i.info("A tainted cluster node XBX1",l,a.id,a.width,a.height,a.x,a.y,n.parent(l)),d.get(a.id).node=a,O(a);else if(n.children(l).length>0){i.info("A pure cluster node XBX1",l,a.id,a.x,a.y,a.width,a.height,n.parent(l)),a.height+=S,n.node(a.parentId);const p=a?.padding/2||0,E=a?.labelBBox?.height||0,N=E-p||0;i.debug("OffsetY",N,"labelHeight",E,"halfPadding",p),await $(f,a),d.get(a.id).node=a}else{const p=n.node(a.parentId);a.y+=S/2,i.info("A regular node XBX1 - using the padding",a.id,"parent",a.parentId,a.width,a.height,a.x,a.y,"offsetY",a.offsetY,"parent",p,p?.offsetY,a),O(a)}})),n.edges().forEach(function(l){const a=n.edge(l);i.info("Edge "+l.v+" -> "+l.w+": "+JSON.stringify(a),a),a.points.forEach(x=>x.y+=S/2);const p=n.node(l.v);var E=n.node(l.w);const N=Q(u,a,d,t,p,E,s);U(a,N)}),n.nodes().forEach(function(l){const a=n.node(l);i.info(l,a.type,a.diff),a.isGroup&&(v=a.diff)}),i.warn("Returning from recursive render XAX",g,v),{elem:g,diff:v}},"recursiveRender"),pe=h(async(e,n)=>{const t=new k({multigraph:!0,compound:!0}).setGraph({rankdir:e.direction,nodesep:e.config?.nodeSpacing||e.config?.flowchart?.nodeSpacing||e.nodeSpacing,ranksep:e.config?.rankSpacing||e.config?.flowchart?.rankSpacing||e.rankSpacing,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),s=n.select("g");F(s,e.markers,e.type,e.diagramId),L(),M(),Y(),te(),e.nodes.forEach(o=>{t.setNode(o.id,{...o}),o.parentId&&t.setParent(o.id,o.parentId)}),i.debug("Edges:",e.edges),e.edges.forEach(o=>{if(o.start===o.end){const c=o.start,g=c+"---"+c+"---1",f=c+"---"+c+"---2",u=t.node(c);t.setNode(g,{domId:g,id:g,parentId:u.parentId,labelStyle:"",label:"",padding:0,shape:"labelRect",style:"",width:10,height:10}),t.setParent(g,u.parentId),t.setNode(f,{domId:f,id:f,parentId:u.parentId,labelStyle:"",padding:0,shape:"labelRect",label:"",style:"",width:10,height:10}),t.setParent(f,u.parentId);const m=structuredClone(o),y=structuredClone(o),v=structuredClone(o);m.label="",m.arrowTypeEnd="none",m.id=c+"-cyclic-special-1",y.arrowTypeStart="none",y.arrowTypeEnd="none",y.id=c+"-cyclic-special-mid",v.label="",u.isGroup&&(m.fromCluster=c,v.toCluster=c),v.id=c+"-cyclic-special-2",v.arrowTypeStart="none",t.setEdge(c,g,m,c+"-cyclic-special-0"),t.setEdge(g,f,y,c+"-cyclic-special-1"),t.setEdge(f,c,v,c+"-cyc{const t=m({...L,...D().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),q=n(()=>w.packet,"getPacket"),G=n(t=>{t.length>0&&w.packet.push(t)},"pushWord"),O=n(()=>{A(),w=structuredClone(x)},"clear"),u={pushWord:G,getPacket:q,getConfig:U,clear:O,setAccTitle:F,getAccTitle:z,setDiagramTitle:W,getDiagramTitle:S,getAccDescription:P,setAccDescription:B},R=1e4,X=n(t=>{v(t,u);let e=-1,o=[],i=1;const{bitsPerRow:s}=u.getConfig();for(let{start:a,end:r,bits:c,label:k}of t.blocks){if(a!==void 0&&r!==void 0&&r{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*o)return[t,void 0];const i=e*o-1,s=e*o;return[{start:t.start,end:i,label:t.label,bits:i-t.start},{start:s,end:t.end,label:t.label,bits:t.end-s}]},"getNextFittingBlock"),K={parse:n(async t=>{const e=await I("packet",t);$.debug(e),X(e)},"parse")},M=n((t,e,o,i)=>{const s=i.db,a=s.getConfig(),{rowHeight:r,paddingY:c,bitWidth:k,bitsPerRow:d}=a,p=s.getPacket(),l=s.getDiagramTitle(),h=r+c,b=h*(p.length+1)-(l?0:r),g=k*d+2,f=E(e);f.attr("viewbox",`0 0 ${g} ${b}`),T(f,b,g,a.useMaxWidth);for(const[y,C]of p.entries())N(f,C,y,a);f.append("text").text(l).attr("x",g/2).attr("y",b-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),N=n((t,e,o,{rowHeight:i,paddingX:s,paddingY:a,bitWidth:r,bitsPerRow:c,showBits:k})=>{const d=t.append("g"),p=o*(i+a)+a;for(const l of e){const h=l.start%c*r+1,b=(l.end-l.start+1)*r-s;if(d.append("rect").attr("x",h).attr("y",p).attr("width",b).attr("height",i).attr("class","packetBlock"),d.append("text").attr("x",h+b/2).attr("y",p+i/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(l.label),!k)continue;const g=l.end===l.start,f=p-2;d.append("text").attr("x",h+(g?b/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(l.start),g||d.append("text").attr("x",h+b).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(l.end)}},"drawWord"),j={draw:M},J={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},Q=n(({packet:t}={})=>{const e=m(J,t);return` +import{i as v}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js";import{q as n,a5 as B,a6 as P,ao as S,an as W,a7 as z,a8 as F,aA as m,aS as E,aa as T,at as A,aB as D,aC as Y,O as $}from"../app.DfYWW83x.js";import{I}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";var x={packet:[]},w=structuredClone(x),L=Y.packet,U=n(()=>{const t=m({...L,...D().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),q=n(()=>w.packet,"getPacket"),G=n(t=>{t.length>0&&w.packet.push(t)},"pushWord"),O=n(()=>{A(),w=structuredClone(x)},"clear"),u={pushWord:G,getPacket:q,getConfig:U,clear:O,setAccTitle:F,getAccTitle:z,setDiagramTitle:W,getDiagramTitle:S,getAccDescription:P,setAccDescription:B},R=1e4,X=n(t=>{v(t,u);let e=-1,o=[],i=1;const{bitsPerRow:s}=u.getConfig();for(let{start:a,end:r,bits:c,label:k}of t.blocks){if(a!==void 0&&r!==void 0&&r{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*o)return[t,void 0];const i=e*o-1,s=e*o;return[{start:t.start,end:i,label:t.label,bits:i-t.start},{start:s,end:t.end,label:t.label,bits:t.end-s}]},"getNextFittingBlock"),K={parse:n(async t=>{const e=await I("packet",t);$.debug(e),X(e)},"parse")},M=n((t,e,o,i)=>{const s=i.db,a=s.getConfig(),{rowHeight:r,paddingY:c,bitWidth:k,bitsPerRow:d}=a,p=s.getPacket(),l=s.getDiagramTitle(),h=r+c,b=h*(p.length+1)-(l?0:r),g=k*d+2,f=E(e);f.attr("viewbox",`0 0 ${g} ${b}`),T(f,b,g,a.useMaxWidth);for(const[y,C]of p.entries())N(f,C,y,a);f.append("text").text(l).attr("x",g/2).attr("y",b-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),N=n((t,e,o,{rowHeight:i,paddingX:s,paddingY:a,bitWidth:r,bitsPerRow:c,showBits:k})=>{const d=t.append("g"),p=o*(i+a)+a;for(const l of e){const h=l.start%c*r+1,b=(l.end-l.start+1)*r-s;if(d.append("rect").attr("x",h).attr("y",p).attr("width",b).attr("height",i).attr("class","packetBlock"),d.append("text").attr("x",h+b/2).attr("y",p+i/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(l.label),!k)continue;const g=l.end===l.start,f=p-2;d.append("text").attr("x",h+(g?b/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",g?"middle":"start").text(l.start),g||d.append("text").attr("x",h+b).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(l.end)}},"drawWord"),j={draw:M},J={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},Q=n(({packet:t}={})=>{const e=m(J,t);return` .packetByte { font-size: ${e.byteFontSize}; } diff --git a/assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BgEzd_En.js b/assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BCf_Uzji.js similarity index 97% rename from assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BgEzd_En.js rename to assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BCf_Uzji.js index 2435a23..84d6e40 100644 --- a/assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BgEzd_En.js +++ b/assets/chunks/diagram-VMROVX33-BbEyrapg-DqJhrp1R.BCf_Uzji.js @@ -1,4 +1,4 @@ -import{$ as ie}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import{q as w,aA as ee,aB as te,aS as ce,aa as de,O as Q,by as P,a9 as X,a8 as pe,a7 as he,an as ue,ao as fe,a6 as me,a5 as ye,aC as ge,bz as Se,at as xe}from"../app.DiEjJ8gz.js";import{i as ve}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js";import{I as Ce}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js";import{t as D}from"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";import{g as J}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";function be(t){var a=0,n=t.children,r=n&&n.length;if(!r)a=1;else for(;--r>=0;)a+=n[r].value;t.value=a}function we(){return this.eachAfter(be)}function $e(t,a){let n=-1;for(const r of this)t.call(a,r,++n,this);return this}function Le(t,a){for(var n=this,r=[n],o,l,d=-1;n=r.pop();)if(t.call(a,n,++d,this),o=n.children)for(l=o.length-1;l>=0;--l)r.push(o[l]);return this}function Me(t,a){for(var n=this,r=[n],o=[],l,d,p,f=-1;n=r.pop();)if(o.push(n),l=n.children)for(d=0,p=l.length;d=0;)n+=r[o].value;a.value=n})}function ke(t){return this.eachBefore(function(a){a.children&&a.children.sort(t)})}function Fe(t){for(var a=this,n=Ne(a,t),r=[a];a!==n;)a=a.parent,r.push(a);for(var o=r.length;t!==n;)r.splice(o,0,t),t=t.parent;return r}function Ne(t,a){if(t===a)return t;var n=t.ancestors(),r=a.ancestors(),o=null;for(t=n.pop(),a=r.pop();t===a;)o=t,t=n.pop(),a=r.pop();return o}function Be(){for(var t=this,a=[t];t=t.parent;)a.push(t);return a}function Pe(){return Array.from(this)}function Ae(){var t=[];return this.eachBefore(function(a){a.children||t.push(a)}),t}function We(){var t=this,a=[];return t.each(function(n){n!==t&&a.push({source:n.parent,target:n})}),a}function*Ie(){var t=this,a,n=[t],r,o,l;do for(a=n.reverse(),n=[];t=a.pop();)if(yield t,r=t.children)for(o=0,l=r.length;o=0;--p)o.push(l=d[p]=new Y(d[p])),l.parent=r,l.depth=r.depth+1;return n.eachBefore(Ee)}function Re(){return Z(this).eachBefore(Ge)}function Ve(t){return t.children}function De(t){return Array.isArray(t)?t[1]:null}function Ge(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function Ee(t){var a=0;do t.height=a;while((t=t.parent)&&t.height<++a)}function Y(t){this.data=t,this.depth=this.height=0,this.parent=null}Y.prototype=Z.prototype={constructor:Y,count:we,each:$e,eachAfter:Me,eachBefore:Le,find:Te,sum:ze,sort:ke,path:Fe,ancestors:Be,descendants:Pe,leaves:Ae,links:We,copy:Re,[Symbol.iterator]:Ie};function He(t){if(typeof t!="function")throw new Error;return t}function G(){return 0}function E(t){return function(){return t}}function Oe(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function je(t,a,n,r,o){for(var l=t.children,d,p=-1,f=l.length,i=t.value&&(r-a)/t.value;++pN&&(N=i),M=u*u*W,z=Math.max(N/M,M/m),z>B){u-=i;break}B=z}d.push(f={value:u,dice:x1?r:1)},n})(Ue);function Je(){var t=Ye,a=!1,n=1,r=1,o=[0],l=G,d=G,p=G,f=G,i=G;function h(s){return s.x0=s.y0=0,s.x1=n,s.y1=r,s.eachBefore(v),o=[0],a&&s.eachBefore(Oe),s}function v(s){var x=o[s.depth],g=s.x0+x,S=s.y0+x,u=s.x1-x,m=s.y1-x;u{Se(o)&&(n?.textStyles?n.textStyles.push(o):n.textStyles=[o]),n?.styles?n.styles.push(o):n.styles=[o]}),this.classes.set(t,n)}getClasses(){return this.classes}getStylesForClass(t){return this.classes.get(t)?.styles??[]}clear(){xe(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}},w(K,"TreeMapDB"),K);function ne(t){if(!t.length)return[];const a=[],n=[];return t.forEach(r=>{const o={name:r.name,children:r.type==="Leaf"?void 0:[]};for(o.classSelector=r?.classSelector,r?.cssCompiledStyles&&(o.cssCompiledStyles=[r.cssCompiledStyles]),r.type==="Leaf"&&r.value!==void 0&&(o.value=r.value);n.length>0&&n[n.length-1].level>=r.level;)n.pop();if(n.length===0)a.push(o);else{const l=n[n.length-1].node;l.children?l.children.push(o):l.children=[o]}r.type!=="Leaf"&&n.push({node:o,level:r.level})}),a}w(ne,"buildHierarchy");var Ke=w((t,a)=>{ve(t,a);const n=[];for(const l of t.TreemapRows??[])l.$type==="ClassDefStatement"&&a.addClass(l.className??"",l.styleText??"");for(const l of t.TreemapRows??[]){const d=l.item;if(!d)continue;const p=l.indent?parseInt(l.indent):0,f=Qe(d),i=d.classSelector?a.getStylesForClass(d.classSelector):[],h=i.length>0?i.join(";"):void 0,v={level:p,name:f,type:d.$type,value:d.value,classSelector:d.classSelector,cssCompiledStyles:h};n.push(v)}const r=ne(n),o=w((l,d)=>{for(const p of l)a.addNode(p,d),p.children&&p.children.length>0&&o(p.children,d+1)},"addNodesRecursively");o(r,0)},"populate"),Qe=w(t=>t.name?String(t.name):"","getItemName"),re={parser:{yy:void 0},parse:w(async t=>{try{const a=await Ce("treemap",t);Q.debug("Treemap AST:",a);const n=re.parser?.yy;if(!(n instanceof ae))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Ke(a,n)}catch(a){throw Q.error("Error parsing treemap:",a),a}},"parse")},Ze=10,A=10,H=25,_e=w((t,a,n,r)=>{const o=r.db,l=o.getConfig(),d=l.padding??Ze,p=o.getDiagramTitle(),f=o.getRoot(),{themeVariables:i}=te();if(!f)return;const h=p?30:0,v=ce(a),s=l.nodeWidth?l.nodeWidth*A:960,x=l.nodeHeight?l.nodeHeight*A:500,g=s,S=x+h;v.attr("viewBox",`0 0 ${g} ${S}`),de(v,S,g,l.useMaxWidth);let u;try{const e=l.valueFormat||",";if(e==="$0,0")u=w(c=>"$"+D(",")(c),"valueFormat");else if(e.startsWith("$")&&e.includes(",")){const c=/\.\d+/.exec(e),y=c?c[0]:"";u=w($=>"$"+D(","+y)($),"valueFormat")}else if(e.startsWith("$")){const c=e.substring(1);u=w(y=>"$"+D(c||"")(y),"valueFormat")}else u=D(e)}catch(e){Q.error("Error creating format function:",e),u=D(",")}const m=J().range(["transparent",i.cScale0,i.cScale1,i.cScale2,i.cScale3,i.cScale4,i.cScale5,i.cScale6,i.cScale7,i.cScale8,i.cScale9,i.cScale10,i.cScale11]),N=J().range(["transparent",i.cScalePeer0,i.cScalePeer1,i.cScalePeer2,i.cScalePeer3,i.cScalePeer4,i.cScalePeer5,i.cScalePeer6,i.cScalePeer7,i.cScalePeer8,i.cScalePeer9,i.cScalePeer10,i.cScalePeer11]),z=J().range([i.cScaleLabel0,i.cScaleLabel1,i.cScaleLabel2,i.cScaleLabel3,i.cScaleLabel4,i.cScaleLabel5,i.cScaleLabel6,i.cScaleLabel7,i.cScaleLabel8,i.cScaleLabel9,i.cScaleLabel10,i.cScaleLabel11]);p&&v.append("text").attr("x",g/2).attr("y",h/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(p);const B=v.append("g").attr("transform",`translate(0, ${h})`).attr("class","treemapContainer"),W=Z(f).sum(e=>e.value??0).sort((e,c)=>(c.value??0)-(e.value??0)),M=Je().size([s,x]).paddingTop(e=>e.children&&e.children.length>0?H+A:0).paddingInner(d).paddingLeft(e=>e.children&&e.children.length>0?A:0).paddingRight(e=>e.children&&e.children.length>0?A:0).paddingBottom(e=>e.children&&e.children.length>0?A:0).round(!0)(W),se=M.descendants().filter(e=>e.children&&e.children.length>0),I=B.selectAll(".treemapSection").data(se).enter().append("g").attr("class","treemapSection").attr("transform",e=>`translate(${e.x0},${e.y0})`);I.append("rect").attr("width",e=>e.x1-e.x0).attr("height",H).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",e=>e.depth===0?"display: none;":""),I.append("clipPath").attr("id",(e,c)=>`clip-section-${a}-${c}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-12)).attr("height",H),I.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class",(e,c)=>`treemapSection section${c}`).attr("fill",e=>m(e.data.name)).attr("fill-opacity",.6).attr("stroke",e=>N(e.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",e=>{if(e.depth===0)return"display: none;";const c=P({cssCompiledStyles:e.data.cssCompiledStyles});return c.nodeStyles+";"+c.borderStyles.join(";")}),I.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",H/2).attr("dominant-baseline","middle").text(e=>e.depth===0?"":e.data.name).attr("font-weight","bold").attr("style",e=>{if(e.depth===0)return"display: none;";const c="dominant-baseline: middle; font-size: 12px; fill:"+z(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")}).each(function(e){if(e.depth===0)return;const c=X(this),y=e.data.name;c.text(y);const $=e.x1-e.x0,k=6;let F;l.showValues!==!1&&e.value?F=$-10-30-10-k:F=$-k-6;const T=Math.max(15,F),L=c.node();if(L.getComputedTextLength()>T){let b=y;for(;b.length>0;){if(b=y.substring(0,b.length-1),b.length===0){c.text("..."),L.getComputedTextLength()>T&&c.text("");break}if(c.text(b+"..."),L.getComputedTextLength()<=T)break}}}),l.showValues!==!1&&I.append("text").attr("class","treemapSectionValue").attr("x",e=>e.x1-e.x0-10).attr("y",H/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(e=>e.value?u(e.value):"").attr("font-style","italic").attr("style",e=>{if(e.depth===0)return"display: none;";const c="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+z(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")});const le=M.leaves(),O=B.selectAll(".treemapLeafGroup").data(le).enter().append("g").attr("class",(e,c)=>`treemapNode treemapLeafGroup leaf${c}${e.data.classSelector?` ${e.data.classSelector}`:""}x`).attr("transform",e=>`translate(${e.x0},${e.y0})`);O.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class","treemapLeaf").attr("fill",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("style",e=>P({cssCompiledStyles:e.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("stroke-width",3),O.append("clipPath").attr("id",(e,c)=>`clip-${a}-${c}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-4)).attr("height",e=>Math.max(0,e.y1-e.y0-4)),O.append("text").attr("class","treemapLabel").attr("x",e=>(e.x1-e.x0)/2).attr("y",e=>(e.y1-e.y0)/2).attr("style",e=>{const c="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+z(e.data.name)+";",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")}).attr("clip-path",(e,c)=>`url(#clip-${a}-${c})`).text(e=>e.data.name).each(function(e){const c=X(this),y=e.x1-e.x0,$=e.y1-e.y0,k=c.node(),F=4,T=y-2*F,L=$-2*F;if(T<10||L<10){c.style("display","none");return}let C=parseInt(c.style("font-size"),10);const b=8,R=28,j=.6,V=6,q=2;for(;k.getComputedTextLength()>T&&C>b;)C--,c.style("font-size",`${C}px`);let U=Math.max(V,Math.min(R,Math.round(C*j))),_=C+q+U;for(;_>L&&C>b&&(C--,U=Math.max(V,Math.min(R,Math.round(C*j))),!(UT||C(e.x1-e.x0)/2).attr("y",function(e){return(e.y1-e.y0)/2}).attr("style",e=>{const c="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+z(e.data.name)+";",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")}).attr("clip-path",(e,c)=>`url(#clip-${a}-${c})`).text(e=>e.value?u(e.value):"").each(function(e){const c=X(this),y=this.parentNode;if(!y){c.style("display","none");return}const $=X(y).select(".treemapLabel");if($.empty()||$.style("display")==="none"){c.style("display","none");return}const k=parseFloat($.style("font-size")),F=28,T=.6,L=6,C=2,b=Math.max(L,Math.min(F,Math.round(k*T)));c.style("font-size",`${b}px`);const R=(e.y1-e.y0)/2+k/2+C;c.attr("y",R);const j=e.x1-e.x0,V=e.y1-e.y0-4,q=j-8;c.node().getComputedTextLength()>q||R+b>V||b{const a=ee(at,t);return` +import{$ as ie}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import{q as w,aA as ee,aB as te,aS as ce,aa as de,O as Q,by as P,a9 as X,a8 as pe,a7 as he,an as ue,ao as fe,a6 as me,a5 as ye,aC as ge,bz as Se,at as xe}from"../app.DfYWW83x.js";import{i as ve}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js";import{I as Ce}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js";import{t as D}from"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";import{g as J}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";function be(t){var a=0,n=t.children,r=n&&n.length;if(!r)a=1;else for(;--r>=0;)a+=n[r].value;t.value=a}function we(){return this.eachAfter(be)}function $e(t,a){let n=-1;for(const r of this)t.call(a,r,++n,this);return this}function Le(t,a){for(var n=this,r=[n],o,l,d=-1;n=r.pop();)if(t.call(a,n,++d,this),o=n.children)for(l=o.length-1;l>=0;--l)r.push(o[l]);return this}function Me(t,a){for(var n=this,r=[n],o=[],l,d,p,f=-1;n=r.pop();)if(o.push(n),l=n.children)for(d=0,p=l.length;d=0;)n+=r[o].value;a.value=n})}function ke(t){return this.eachBefore(function(a){a.children&&a.children.sort(t)})}function Fe(t){for(var a=this,n=Ne(a,t),r=[a];a!==n;)a=a.parent,r.push(a);for(var o=r.length;t!==n;)r.splice(o,0,t),t=t.parent;return r}function Ne(t,a){if(t===a)return t;var n=t.ancestors(),r=a.ancestors(),o=null;for(t=n.pop(),a=r.pop();t===a;)o=t,t=n.pop(),a=r.pop();return o}function Be(){for(var t=this,a=[t];t=t.parent;)a.push(t);return a}function Pe(){return Array.from(this)}function Ae(){var t=[];return this.eachBefore(function(a){a.children||t.push(a)}),t}function We(){var t=this,a=[];return t.each(function(n){n!==t&&a.push({source:n.parent,target:n})}),a}function*Ie(){var t=this,a,n=[t],r,o,l;do for(a=n.reverse(),n=[];t=a.pop();)if(yield t,r=t.children)for(o=0,l=r.length;o=0;--p)o.push(l=d[p]=new Y(d[p])),l.parent=r,l.depth=r.depth+1;return n.eachBefore(Ee)}function Re(){return Z(this).eachBefore(Ge)}function Ve(t){return t.children}function De(t){return Array.isArray(t)?t[1]:null}function Ge(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function Ee(t){var a=0;do t.height=a;while((t=t.parent)&&t.height<++a)}function Y(t){this.data=t,this.depth=this.height=0,this.parent=null}Y.prototype=Z.prototype={constructor:Y,count:we,each:$e,eachAfter:Me,eachBefore:Le,find:Te,sum:ze,sort:ke,path:Fe,ancestors:Be,descendants:Pe,leaves:Ae,links:We,copy:Re,[Symbol.iterator]:Ie};function He(t){if(typeof t!="function")throw new Error;return t}function G(){return 0}function E(t){return function(){return t}}function Oe(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function je(t,a,n,r,o){for(var l=t.children,d,p=-1,f=l.length,i=t.value&&(r-a)/t.value;++pN&&(N=i),M=u*u*W,z=Math.max(N/M,M/m),z>B){u-=i;break}B=z}d.push(f={value:u,dice:x1?r:1)},n})(Ue);function Je(){var t=Ye,a=!1,n=1,r=1,o=[0],l=G,d=G,p=G,f=G,i=G;function h(s){return s.x0=s.y0=0,s.x1=n,s.y1=r,s.eachBefore(v),o=[0],a&&s.eachBefore(Oe),s}function v(s){var x=o[s.depth],g=s.x0+x,S=s.y0+x,u=s.x1-x,m=s.y1-x;u{Se(o)&&(n?.textStyles?n.textStyles.push(o):n.textStyles=[o]),n?.styles?n.styles.push(o):n.styles=[o]}),this.classes.set(t,n)}getClasses(){return this.classes}getStylesForClass(t){return this.classes.get(t)?.styles??[]}clear(){xe(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}},w(K,"TreeMapDB"),K);function ne(t){if(!t.length)return[];const a=[],n=[];return t.forEach(r=>{const o={name:r.name,children:r.type==="Leaf"?void 0:[]};for(o.classSelector=r?.classSelector,r?.cssCompiledStyles&&(o.cssCompiledStyles=[r.cssCompiledStyles]),r.type==="Leaf"&&r.value!==void 0&&(o.value=r.value);n.length>0&&n[n.length-1].level>=r.level;)n.pop();if(n.length===0)a.push(o);else{const l=n[n.length-1].node;l.children?l.children.push(o):l.children=[o]}r.type!=="Leaf"&&n.push({node:o,level:r.level})}),a}w(ne,"buildHierarchy");var Ke=w((t,a)=>{ve(t,a);const n=[];for(const l of t.TreemapRows??[])l.$type==="ClassDefStatement"&&a.addClass(l.className??"",l.styleText??"");for(const l of t.TreemapRows??[]){const d=l.item;if(!d)continue;const p=l.indent?parseInt(l.indent):0,f=Qe(d),i=d.classSelector?a.getStylesForClass(d.classSelector):[],h=i.length>0?i.join(";"):void 0,v={level:p,name:f,type:d.$type,value:d.value,classSelector:d.classSelector,cssCompiledStyles:h};n.push(v)}const r=ne(n),o=w((l,d)=>{for(const p of l)a.addNode(p,d),p.children&&p.children.length>0&&o(p.children,d+1)},"addNodesRecursively");o(r,0)},"populate"),Qe=w(t=>t.name?String(t.name):"","getItemName"),re={parser:{yy:void 0},parse:w(async t=>{try{const a=await Ce("treemap",t);Q.debug("Treemap AST:",a);const n=re.parser?.yy;if(!(n instanceof ae))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Ke(a,n)}catch(a){throw Q.error("Error parsing treemap:",a),a}},"parse")},Ze=10,A=10,H=25,_e=w((t,a,n,r)=>{const o=r.db,l=o.getConfig(),d=l.padding??Ze,p=o.getDiagramTitle(),f=o.getRoot(),{themeVariables:i}=te();if(!f)return;const h=p?30:0,v=ce(a),s=l.nodeWidth?l.nodeWidth*A:960,x=l.nodeHeight?l.nodeHeight*A:500,g=s,S=x+h;v.attr("viewBox",`0 0 ${g} ${S}`),de(v,S,g,l.useMaxWidth);let u;try{const e=l.valueFormat||",";if(e==="$0,0")u=w(c=>"$"+D(",")(c),"valueFormat");else if(e.startsWith("$")&&e.includes(",")){const c=/\.\d+/.exec(e),y=c?c[0]:"";u=w($=>"$"+D(","+y)($),"valueFormat")}else if(e.startsWith("$")){const c=e.substring(1);u=w(y=>"$"+D(c||"")(y),"valueFormat")}else u=D(e)}catch(e){Q.error("Error creating format function:",e),u=D(",")}const m=J().range(["transparent",i.cScale0,i.cScale1,i.cScale2,i.cScale3,i.cScale4,i.cScale5,i.cScale6,i.cScale7,i.cScale8,i.cScale9,i.cScale10,i.cScale11]),N=J().range(["transparent",i.cScalePeer0,i.cScalePeer1,i.cScalePeer2,i.cScalePeer3,i.cScalePeer4,i.cScalePeer5,i.cScalePeer6,i.cScalePeer7,i.cScalePeer8,i.cScalePeer9,i.cScalePeer10,i.cScalePeer11]),z=J().range([i.cScaleLabel0,i.cScaleLabel1,i.cScaleLabel2,i.cScaleLabel3,i.cScaleLabel4,i.cScaleLabel5,i.cScaleLabel6,i.cScaleLabel7,i.cScaleLabel8,i.cScaleLabel9,i.cScaleLabel10,i.cScaleLabel11]);p&&v.append("text").attr("x",g/2).attr("y",h/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(p);const B=v.append("g").attr("transform",`translate(0, ${h})`).attr("class","treemapContainer"),W=Z(f).sum(e=>e.value??0).sort((e,c)=>(c.value??0)-(e.value??0)),M=Je().size([s,x]).paddingTop(e=>e.children&&e.children.length>0?H+A:0).paddingInner(d).paddingLeft(e=>e.children&&e.children.length>0?A:0).paddingRight(e=>e.children&&e.children.length>0?A:0).paddingBottom(e=>e.children&&e.children.length>0?A:0).round(!0)(W),se=M.descendants().filter(e=>e.children&&e.children.length>0),I=B.selectAll(".treemapSection").data(se).enter().append("g").attr("class","treemapSection").attr("transform",e=>`translate(${e.x0},${e.y0})`);I.append("rect").attr("width",e=>e.x1-e.x0).attr("height",H).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",e=>e.depth===0?"display: none;":""),I.append("clipPath").attr("id",(e,c)=>`clip-section-${a}-${c}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-12)).attr("height",H),I.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class",(e,c)=>`treemapSection section${c}`).attr("fill",e=>m(e.data.name)).attr("fill-opacity",.6).attr("stroke",e=>N(e.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",e=>{if(e.depth===0)return"display: none;";const c=P({cssCompiledStyles:e.data.cssCompiledStyles});return c.nodeStyles+";"+c.borderStyles.join(";")}),I.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",H/2).attr("dominant-baseline","middle").text(e=>e.depth===0?"":e.data.name).attr("font-weight","bold").attr("style",e=>{if(e.depth===0)return"display: none;";const c="dominant-baseline: middle; font-size: 12px; fill:"+z(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")}).each(function(e){if(e.depth===0)return;const c=X(this),y=e.data.name;c.text(y);const $=e.x1-e.x0,k=6;let F;l.showValues!==!1&&e.value?F=$-10-30-10-k:F=$-k-6;const T=Math.max(15,F),L=c.node();if(L.getComputedTextLength()>T){let b=y;for(;b.length>0;){if(b=y.substring(0,b.length-1),b.length===0){c.text("..."),L.getComputedTextLength()>T&&c.text("");break}if(c.text(b+"..."),L.getComputedTextLength()<=T)break}}}),l.showValues!==!1&&I.append("text").attr("class","treemapSectionValue").attr("x",e=>e.x1-e.x0-10).attr("y",H/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(e=>e.value?u(e.value):"").attr("font-style","italic").attr("style",e=>{if(e.depth===0)return"display: none;";const c="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+z(e.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")});const le=M.leaves(),O=B.selectAll(".treemapLeafGroup").data(le).enter().append("g").attr("class",(e,c)=>`treemapNode treemapLeafGroup leaf${c}${e.data.classSelector?` ${e.data.classSelector}`:""}x`).attr("transform",e=>`translate(${e.x0},${e.y0})`);O.append("rect").attr("width",e=>e.x1-e.x0).attr("height",e=>e.y1-e.y0).attr("class","treemapLeaf").attr("fill",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("style",e=>P({cssCompiledStyles:e.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",e=>e.parent?m(e.parent.data.name):m(e.data.name)).attr("stroke-width",3),O.append("clipPath").attr("id",(e,c)=>`clip-${a}-${c}`).append("rect").attr("width",e=>Math.max(0,e.x1-e.x0-4)).attr("height",e=>Math.max(0,e.y1-e.y0-4)),O.append("text").attr("class","treemapLabel").attr("x",e=>(e.x1-e.x0)/2).attr("y",e=>(e.y1-e.y0)/2).attr("style",e=>{const c="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+z(e.data.name)+";",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")}).attr("clip-path",(e,c)=>`url(#clip-${a}-${c})`).text(e=>e.data.name).each(function(e){const c=X(this),y=e.x1-e.x0,$=e.y1-e.y0,k=c.node(),F=4,T=y-2*F,L=$-2*F;if(T<10||L<10){c.style("display","none");return}let C=parseInt(c.style("font-size"),10);const b=8,R=28,j=.6,V=6,q=2;for(;k.getComputedTextLength()>T&&C>b;)C--,c.style("font-size",`${C}px`);let U=Math.max(V,Math.min(R,Math.round(C*j))),_=C+q+U;for(;_>L&&C>b&&(C--,U=Math.max(V,Math.min(R,Math.round(C*j))),!(UT||C(e.x1-e.x0)/2).attr("y",function(e){return(e.y1-e.y0)/2}).attr("style",e=>{const c="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+z(e.data.name)+";",y=P({cssCompiledStyles:e.data.cssCompiledStyles});return c+y.labelStyles.replace("color:","fill:")}).attr("clip-path",(e,c)=>`url(#clip-${a}-${c})`).text(e=>e.value?u(e.value):"").each(function(e){const c=X(this),y=this.parentNode;if(!y){c.style("display","none");return}const $=X(y).select(".treemapLabel");if($.empty()||$.style("display")==="none"){c.style("display","none");return}const k=parseFloat($.style("font-size")),F=28,T=.6,L=6,C=2,b=Math.max(L,Math.min(F,Math.round(k*T)));c.style("font-size",`${b}px`);const R=(e.y1-e.y0)/2+k/2+C;c.attr("y",R);const j=e.x1-e.x0,V=e.y1-e.y0-4,q=j-8;c.node().getComputedTextLength()>q||R+b>V||b{const a=ee(at,t);return` .treemapNode.section { stroke: ${a.sectionStrokeColor}; stroke-width: ${a.sectionStrokeWidth}; diff --git a/assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.3E3O7MPS.js b/assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.CcKUrUxd.js similarity index 93% rename from assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.3E3O7MPS.js rename to assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.CcKUrUxd.js index 3c3f638..24a5747 100644 --- a/assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.3E3O7MPS.js +++ b/assets/chunks/diagram-ZTM2IBQH-C32oQvHK-CnXELXZV.CcKUrUxd.js @@ -1,4 +1,4 @@ -import{i as S}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js";import{q as l,a5 as I,a6 as E,ao as F,an as z,a7 as G,a8 as P,aS as R,at as D,aA as y,aB as w,aC as W,O as B,b9 as V}from"../app.DiEjJ8gz.js";import{I as _}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";var x={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},b={axes:[],curves:[],options:x},u=structuredClone(b),q=W.radar,U=l(()=>y({...q,...w().radar}),"getConfig"),C=l(()=>u.axes,"getAxes"),j=l(()=>u.curves,"getCurves"),H=l(()=>u.options,"getOptions"),K=l(a=>{u.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),X=l(a=>{u.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:Y(t.entries)}))},"setCurves"),Y=l(a=>{if(a[0].axis==null)return a.map(e=>e.value);const t=C();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{const r=a.find(s=>s.axis?.$refText===e.name);if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),Z=l(a=>{const t=a.reduce((e,r)=>(e[r.name]=r,e),{});u.options={showLegend:t.showLegend?.value??x.showLegend,ticks:t.ticks?.value??x.ticks,max:t.max?.value??x.max,min:t.min?.value??x.min,graticule:t.graticule?.value??x.graticule}},"setOptions"),J=l(()=>{D(),u=structuredClone(b)},"clear"),f={getAxes:C,getCurves:j,getOptions:H,setAxes:K,setCurves:X,setOptions:Z,getConfig:U,clear:J,setAccTitle:P,getAccTitle:G,setDiagramTitle:z,getDiagramTitle:F,getAccDescription:E,setAccDescription:I},Q=l(a=>{S(a,f);const{axes:t,curves:e,options:r}=a;f.setAxes(t),f.setCurves(e),f.setOptions(r)},"populate"),N={parse:l(async a=>{const t=await _("radar",a);B.debug(t),Q(t)},"parse")},tt=l((a,t,e,r)=>{const s=r.db,n=s.getAxes(),o=s.getCurves(),i=s.getOptions(),c=s.getConfig(),d=s.getDiagramTitle(),p=R(t),g=et(p,c),h=i.max??Math.max(...o.map(v=>Math.max(...v.entries))),m=i.min,$=Math.min(c.width,c.height)/2;at(g,n,$,i.ticks,i.graticule),rt(g,n,$,c),M(g,n,o,m,h,i.graticule,c),T(g,o,i.showLegend,c),g.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),et=l((a,t)=>{const e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,s={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return a.attr("viewbox",`0 0 ${e} ${r}`).attr("width",e).attr("height",r),a.append("g").attr("transform",`translate(${s.x}, ${s.y})`)},"drawFrame"),at=l((a,t,e,r,s)=>{if(s==="circle")for(let n=0;n{const g=2*p*Math.PI/n-Math.PI/2,h=i*Math.cos(g),m=i*Math.sin(g);return`${h},${m}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),rt=l((a,t,e,r)=>{const s=t.length;for(let n=0;n{if(d.entries.length!==i)return;const g=d.entries.map((h,m)=>{const $=2*Math.PI*m/i-Math.PI/2,v=L(h,r,s,c),O=v*Math.cos($),k=v*Math.sin($);return{x:O,y:k}});n==="circle"?a.append("path").attr("d",A(g,o.curveTension)).attr("class",`radarCurve-${p}`):n==="polygon"&&a.append("polygon").attr("points",g.map(h=>`${h.x},${h.y}`).join(" ")).attr("class",`radarCurve-${p}`)})}l(M,"drawCurves");function L(a,t,e,r){const s=Math.min(Math.max(a,t),e);return r*(s-t)/(e-t)}l(L,"relativeRadius");function A(a,t){const e=a.length;let r=`M${a[0].x},${a[0].y}`;for(let s=0;s{const d=a.append("g").attr("transform",`translate(${s}, ${n+c*o})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(i.label)})}l(T,"drawLegend");var st={draw:tt},it=l((a,t)=>{let e="";for(let r=0;ry({...q,...w().radar}),"getConfig"),C=l(()=>u.axes,"getAxes"),j=l(()=>u.curves,"getCurves"),H=l(()=>u.options,"getOptions"),K=l(a=>{u.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),X=l(a=>{u.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:Y(t.entries)}))},"setCurves"),Y=l(a=>{if(a[0].axis==null)return a.map(e=>e.value);const t=C();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{const r=a.find(s=>s.axis?.$refText===e.name);if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),Z=l(a=>{const t=a.reduce((e,r)=>(e[r.name]=r,e),{});u.options={showLegend:t.showLegend?.value??x.showLegend,ticks:t.ticks?.value??x.ticks,max:t.max?.value??x.max,min:t.min?.value??x.min,graticule:t.graticule?.value??x.graticule}},"setOptions"),J=l(()=>{D(),u=structuredClone(b)},"clear"),f={getAxes:C,getCurves:j,getOptions:H,setAxes:K,setCurves:X,setOptions:Z,getConfig:U,clear:J,setAccTitle:P,getAccTitle:G,setDiagramTitle:z,getDiagramTitle:F,getAccDescription:E,setAccDescription:I},Q=l(a=>{S(a,f);const{axes:t,curves:e,options:r}=a;f.setAxes(t),f.setCurves(e),f.setOptions(r)},"populate"),N={parse:l(async a=>{const t=await _("radar",a);B.debug(t),Q(t)},"parse")},tt=l((a,t,e,r)=>{const s=r.db,n=s.getAxes(),o=s.getCurves(),i=s.getOptions(),c=s.getConfig(),d=s.getDiagramTitle(),p=R(t),g=et(p,c),h=i.max??Math.max(...o.map(v=>Math.max(...v.entries))),m=i.min,$=Math.min(c.width,c.height)/2;at(g,n,$,i.ticks,i.graticule),rt(g,n,$,c),M(g,n,o,m,h,i.graticule,c),T(g,o,i.showLegend,c),g.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),et=l((a,t)=>{const e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,s={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return a.attr("viewbox",`0 0 ${e} ${r}`).attr("width",e).attr("height",r),a.append("g").attr("transform",`translate(${s.x}, ${s.y})`)},"drawFrame"),at=l((a,t,e,r,s)=>{if(s==="circle")for(let n=0;n{const g=2*p*Math.PI/n-Math.PI/2,h=i*Math.cos(g),m=i*Math.sin(g);return`${h},${m}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),rt=l((a,t,e,r)=>{const s=t.length;for(let n=0;n{if(d.entries.length!==i)return;const g=d.entries.map((h,m)=>{const $=2*Math.PI*m/i-Math.PI/2,v=L(h,r,s,c),O=v*Math.cos($),k=v*Math.sin($);return{x:O,y:k}});n==="circle"?a.append("path").attr("d",A(g,o.curveTension)).attr("class",`radarCurve-${p}`):n==="polygon"&&a.append("polygon").attr("points",g.map(h=>`${h.x},${h.y}`).join(" ")).attr("class",`radarCurve-${p}`)})}l(M,"drawCurves");function L(a,t,e,r){const s=Math.min(Math.max(a,t),e);return r*(s-t)/(e-t)}l(L,"relativeRadius");function A(a,t){const e=a.length;let r=`M${a[0].x},${a[0].y}`;for(let s=0;s{const d=a.append("g").attr("transform",`translate(${s}, ${n+c*o})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(i.label)})}l(T,"drawLegend");var st={draw:tt},it=l((a,t)=>{let e="";for(let r=0;r"u"&&(d.yylloc={});var ct=d.yylloc;t.push(ct);var It=d.options&&d.options.ranges;typeof R.yy.parseError=="function"?this.parseError=R.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(f){n.length=n.length-2*f,h.length=h.length-f,t.length=t.length-f}o(xt,"popStack");function St(){var f;return f=r.pop()||d.lex()||Ot,typeof f!="number"&&(f instanceof Array&&(r=f,f=r.pop()),f=a.symbols_[f]||f),f}o(St,"lex");for(var _,C,g,ot,x={},J,k,Tt,Q;;){if(C=n[n.length-1],this.defaultActions[C]?g=this.defaultActions[C]:((_===null||typeof _>"u")&&(_=St()),g=p[C]&&p[C][_]),typeof g>"u"||!g.length||!g[0]){var lt="";Q=[];for(J in p[C])this.terminals_[J]&&J>Rt&&Q.push("'"+this.terminals_[J]+"'");d.showPosition?lt="Parse error on line "+(V+1)+`: +import{a as vt}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import{$ as $t}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import{q as o,a8 as Dt,a7 as wt,a5 as Lt,a6 as Mt,an as Ft,ao as Bt,A as H,O as v,at as Yt,as as Pt,av as Kt,ay as Gt,ak as zt,al as Ut,a9 as Zt,am as jt}from"../app.DfYWW83x.js";import{e as Wt}from"./channel-CYBQPlIk-DDfBD8St.DUCXByQc.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var ut=(function(){var e=o(function(m,a,n,r){for(n=n||{},r=m.length;r--;n[m[r]]=a);return n},"o"),i=[6,8,10,22,24,26,28,33,34,35,36,37,40,43,44,50],u=[1,10],c=[1,11],l=[1,12],y=[1,13],A=[1,20],b=[1,21],E=[1,22],$=[1,23],D=[1,24],N=[1,19],w=[1,25],z=[1,26],L=[1,18],q=[1,33],tt=[1,34],et=[1,35],st=[1,36],it=[1,37],yt=[6,8,10,13,15,17,20,21,22,24,26,28,33,34,35,36,37,40,43,44,50,63,64,65,66,67],O=[1,42],S=[1,43],M=[1,52],F=[40,50,68,69],B=[1,63],Y=[1,61],T=[1,58],P=[1,62],K=[1,64],U=[6,8,10,13,17,22,24,26,28,33,34,35,36,37,40,41,42,43,44,48,49,50,63,64,65,66,67],dt=[63,64,65,66,67],pt=[1,81],_t=[1,80],ft=[1,78],bt=[1,79],gt=[6,10,42,47],I=[6,10,13,41,42,47,48,49],Z=[1,89],j=[1,88],W=[1,87],G=[19,56],mt=[1,98],Et=[1,97],rt=[19,56,58,60],at={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,entityName:11,relSpec:12,COLON:13,role:14,STYLE_SEPARATOR:15,idList:16,BLOCK_START:17,attributes:18,BLOCK_STOP:19,SQS:20,SQE:21,title:22,title_value:23,acc_title:24,acc_title_value:25,acc_descr:26,acc_descr_value:27,acc_descr_multiline_value:28,direction:29,classDefStatement:30,classStatement:31,styleStatement:32,direction_tb:33,direction_bt:34,direction_rl:35,direction_lr:36,CLASSDEF:37,stylesOpt:38,separator:39,UNICODE_TEXT:40,STYLE_TEXT:41,COMMA:42,CLASS:43,STYLE:44,style:45,styleComponent:46,SEMI:47,NUM:48,BRKT:49,ENTITY_NAME:50,attribute:51,attributeType:52,attributeName:53,attributeKeyTypeList:54,attributeComment:55,ATTRIBUTE_WORD:56,attributeKeyType:57,",":58,ATTRIBUTE_KEY:59,COMMENT:60,cardinality:61,relType:62,ZERO_OR_ONE:63,ZERO_OR_MORE:64,ONE_OR_MORE:65,ONLY_ONE:66,MD_PARENT:67,NON_IDENTIFYING:68,IDENTIFYING:69,WORD:70,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",8:"SPACE",10:"NEWLINE",13:"COLON",15:"STYLE_SEPARATOR",17:"BLOCK_START",19:"BLOCK_STOP",20:"SQS",21:"SQE",22:"title",23:"title_value",24:"acc_title",25:"acc_title_value",26:"acc_descr",27:"acc_descr_value",28:"acc_descr_multiline_value",33:"direction_tb",34:"direction_bt",35:"direction_rl",36:"direction_lr",37:"CLASSDEF",40:"UNICODE_TEXT",41:"STYLE_TEXT",42:"COMMA",43:"CLASS",44:"STYLE",47:"SEMI",48:"NUM",49:"BRKT",50:"ENTITY_NAME",56:"ATTRIBUTE_WORD",58:",",59:"ATTRIBUTE_KEY",60:"COMMENT",63:"ZERO_OR_ONE",64:"ZERO_OR_MORE",65:"ONE_OR_MORE",66:"ONLY_ONE",67:"MD_PARENT",68:"NON_IDENTIFYING",69:"IDENTIFYING",70:"WORD"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,9],[9,7],[9,7],[9,4],[9,6],[9,3],[9,5],[9,1],[9,3],[9,7],[9,9],[9,6],[9,8],[9,4],[9,6],[9,2],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[9,1],[29,1],[29,1],[29,1],[29,1],[30,4],[16,1],[16,1],[16,3],[16,3],[31,3],[32,4],[38,1],[38,3],[45,1],[45,2],[39,1],[39,1],[39,1],[46,1],[46,1],[46,1],[46,1],[11,1],[11,1],[18,1],[18,2],[51,2],[51,3],[51,3],[51,4],[52,1],[53,1],[54,1],[54,3],[57,1],[55,1],[12,3],[61,1],[61,1],[61,1],[61,1],[61,1],[62,1],[62,1],[14,1],[14,1],[14,1]],performAction:o(function(m,a,n,r,h,t,p){var s=t.length-1;switch(h){case 1:break;case 2:this.$=[];break;case 3:t[s-1].push(t[s]),this.$=t[s-1];break;case 4:case 5:this.$=t[s];break;case 6:case 7:this.$=[];break;case 8:r.addEntity(t[s-4]),r.addEntity(t[s-2]),r.addRelationship(t[s-4],t[s],t[s-2],t[s-3]);break;case 9:r.addEntity(t[s-8]),r.addEntity(t[s-4]),r.addRelationship(t[s-8],t[s],t[s-4],t[s-5]),r.setClass([t[s-8]],t[s-6]),r.setClass([t[s-4]],t[s-2]);break;case 10:r.addEntity(t[s-6]),r.addEntity(t[s-2]),r.addRelationship(t[s-6],t[s],t[s-2],t[s-3]),r.setClass([t[s-6]],t[s-4]);break;case 11:r.addEntity(t[s-6]),r.addEntity(t[s-4]),r.addRelationship(t[s-6],t[s],t[s-4],t[s-5]),r.setClass([t[s-4]],t[s-2]);break;case 12:r.addEntity(t[s-3]),r.addAttributes(t[s-3],t[s-1]);break;case 13:r.addEntity(t[s-5]),r.addAttributes(t[s-5],t[s-1]),r.setClass([t[s-5]],t[s-3]);break;case 14:r.addEntity(t[s-2]);break;case 15:r.addEntity(t[s-4]),r.setClass([t[s-4]],t[s-2]);break;case 16:r.addEntity(t[s]);break;case 17:r.addEntity(t[s-2]),r.setClass([t[s-2]],t[s]);break;case 18:r.addEntity(t[s-6],t[s-4]),r.addAttributes(t[s-6],t[s-1]);break;case 19:r.addEntity(t[s-8],t[s-6]),r.addAttributes(t[s-8],t[s-1]),r.setClass([t[s-8]],t[s-3]);break;case 20:r.addEntity(t[s-5],t[s-3]);break;case 21:r.addEntity(t[s-7],t[s-5]),r.setClass([t[s-7]],t[s-2]);break;case 22:r.addEntity(t[s-3],t[s-1]);break;case 23:r.addEntity(t[s-5],t[s-3]),r.setClass([t[s-5]],t[s]);break;case 24:case 25:this.$=t[s].trim(),r.setAccTitle(this.$);break;case 26:case 27:this.$=t[s].trim(),r.setAccDescription(this.$);break;case 32:r.setDirection("TB");break;case 33:r.setDirection("BT");break;case 34:r.setDirection("RL");break;case 35:r.setDirection("LR");break;case 36:this.$=t[s-3],r.addClass(t[s-2],t[s-1]);break;case 37:case 38:case 56:case 64:this.$=[t[s]];break;case 39:case 40:this.$=t[s-2].concat([t[s]]);break;case 41:this.$=t[s-2],r.setClass(t[s-1],t[s]);break;case 42:this.$=t[s-3],r.addCssStyles(t[s-2],t[s-1]);break;case 43:this.$=[t[s]];break;case 44:t[s-2].push(t[s]),this.$=t[s-2];break;case 46:this.$=t[s-1]+t[s];break;case 54:case 76:case 77:this.$=t[s].replace(/"/g,"");break;case 55:case 78:this.$=t[s];break;case 57:t[s].push(t[s-1]),this.$=t[s];break;case 58:this.$={type:t[s-1],name:t[s]};break;case 59:this.$={type:t[s-2],name:t[s-1],keys:t[s]};break;case 60:this.$={type:t[s-2],name:t[s-1],comment:t[s]};break;case 61:this.$={type:t[s-3],name:t[s-2],keys:t[s-1],comment:t[s]};break;case 62:case 63:case 66:this.$=t[s];break;case 65:t[s-2].push(t[s]),this.$=t[s-2];break;case 67:this.$=t[s].replace(/"/g,"");break;case 68:this.$={cardA:t[s],relType:t[s-1],cardB:t[s-2]};break;case 69:this.$=r.Cardinality.ZERO_OR_ONE;break;case 70:this.$=r.Cardinality.ZERO_OR_MORE;break;case 71:this.$=r.Cardinality.ONE_OR_MORE;break;case 72:this.$=r.Cardinality.ONLY_ONE;break;case 73:this.$=r.Cardinality.MD_PARENT;break;case 74:this.$=r.Identification.NON_IDENTIFYING;break;case 75:this.$=r.Identification.IDENTIFYING;break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},e(i,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,22:u,24:c,26:l,28:y,29:14,30:15,31:16,32:17,33:A,34:b,35:E,36:$,37:D,40:N,43:w,44:z,50:L},e(i,[2,7],{1:[2,1]}),e(i,[2,3]),{9:27,11:9,22:u,24:c,26:l,28:y,29:14,30:15,31:16,32:17,33:A,34:b,35:E,36:$,37:D,40:N,43:w,44:z,50:L},e(i,[2,5]),e(i,[2,6]),e(i,[2,16],{12:28,61:32,15:[1,29],17:[1,30],20:[1,31],63:q,64:tt,65:et,66:st,67:it}),{23:[1,38]},{25:[1,39]},{27:[1,40]},e(i,[2,27]),e(i,[2,28]),e(i,[2,29]),e(i,[2,30]),e(i,[2,31]),e(yt,[2,54]),e(yt,[2,55]),e(i,[2,32]),e(i,[2,33]),e(i,[2,34]),e(i,[2,35]),{16:41,40:O,41:S},{16:44,40:O,41:S},{16:45,40:O,41:S},e(i,[2,4]),{11:46,40:N,50:L},{16:47,40:O,41:S},{18:48,19:[1,49],51:50,52:51,56:M},{11:53,40:N,50:L},{62:54,68:[1,55],69:[1,56]},e(F,[2,69]),e(F,[2,70]),e(F,[2,71]),e(F,[2,72]),e(F,[2,73]),e(i,[2,24]),e(i,[2,25]),e(i,[2,26]),{13:B,38:57,41:Y,42:T,45:59,46:60,48:P,49:K},e(U,[2,37]),e(U,[2,38]),{16:65,40:O,41:S,42:T},{13:B,38:66,41:Y,42:T,45:59,46:60,48:P,49:K},{13:[1,67],15:[1,68]},e(i,[2,17],{61:32,12:69,17:[1,70],42:T,63:q,64:tt,65:et,66:st,67:it}),{19:[1,71]},e(i,[2,14]),{18:72,19:[2,56],51:50,52:51,56:M},{53:73,56:[1,74]},{56:[2,62]},{21:[1,75]},{61:76,63:q,64:tt,65:et,66:st,67:it},e(dt,[2,74]),e(dt,[2,75]),{6:pt,10:_t,39:77,42:ft,47:bt},{40:[1,82],41:[1,83]},e(gt,[2,43],{46:84,13:B,41:Y,48:P,49:K}),e(I,[2,45]),e(I,[2,50]),e(I,[2,51]),e(I,[2,52]),e(I,[2,53]),e(i,[2,41],{42:T}),{6:pt,10:_t,39:85,42:ft,47:bt},{14:86,40:Z,50:j,70:W},{16:90,40:O,41:S},{11:91,40:N,50:L},{18:92,19:[1,93],51:50,52:51,56:M},e(i,[2,12]),{19:[2,57]},e(G,[2,58],{54:94,55:95,57:96,59:mt,60:Et}),e([19,56,59,60],[2,63]),e(i,[2,22],{15:[1,100],17:[1,99]}),e([40,50],[2,68]),e(i,[2,36]),{13:B,41:Y,45:101,46:60,48:P,49:K},e(i,[2,47]),e(i,[2,48]),e(i,[2,49]),e(U,[2,39]),e(U,[2,40]),e(I,[2,46]),e(i,[2,42]),e(i,[2,8]),e(i,[2,76]),e(i,[2,77]),e(i,[2,78]),{13:[1,102],42:T},{13:[1,104],15:[1,103]},{19:[1,105]},e(i,[2,15]),e(G,[2,59],{55:106,58:[1,107],60:Et}),e(G,[2,60]),e(rt,[2,64]),e(G,[2,67]),e(rt,[2,66]),{18:108,19:[1,109],51:50,52:51,56:M},{16:110,40:O,41:S},e(gt,[2,44],{46:84,13:B,41:Y,48:P,49:K}),{14:111,40:Z,50:j,70:W},{16:112,40:O,41:S},{14:113,40:Z,50:j,70:W},e(i,[2,13]),e(G,[2,61]),{57:114,59:mt},{19:[1,115]},e(i,[2,20]),e(i,[2,23],{17:[1,116],42:T}),e(i,[2,11]),{13:[1,117],42:T},e(i,[2,10]),e(rt,[2,65]),e(i,[2,18]),{18:118,19:[1,119],51:50,52:51,56:M},{14:120,40:Z,50:j,70:W},{19:[1,121]},e(i,[2,21]),e(i,[2,9]),e(i,[2,19])],defaultActions:{52:[2,62],72:[2,57]},parseError:o(function(m,a){if(a.recoverable)this.trace(m);else{var n=new Error(m);throw n.hash=a,n}},"parseError"),parse:o(function(m){var a=this,n=[0],r=[],h=[null],t=[],p=this.table,s="",V=0,kt=0,Rt=2,Ot=1,Ct=t.slice.call(arguments,1),d=Object.create(this.lexer),R={yy:{}};for(var nt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,nt)&&(R.yy[nt]=this.yy[nt]);d.setInput(m,R.yy),R.yy.lexer=d,R.yy.parser=this,typeof d.yylloc>"u"&&(d.yylloc={});var ct=d.yylloc;t.push(ct);var It=d.options&&d.options.ranges;typeof R.yy.parseError=="function"?this.parseError=R.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function xt(f){n.length=n.length-2*f,h.length=h.length-f,t.length=t.length-f}o(xt,"popStack");function St(){var f;return f=r.pop()||d.lex()||Ot,typeof f!="number"&&(f instanceof Array&&(r=f,f=r.pop()),f=a.symbols_[f]||f),f}o(St,"lex");for(var _,C,g,ot,x={},J,k,Tt,Q;;){if(C=n[n.length-1],this.defaultActions[C]?g=this.defaultActions[C]:((_===null||typeof _>"u")&&(_=St()),g=p[C]&&p[C][_]),typeof g>"u"||!g.length||!g[0]){var lt="";Q=[];for(J in p[C])this.terminals_[J]&&J>Rt&&Q.push("'"+this.terminals_[J]+"'");d.showPosition?lt="Parse error on line "+(V+1)+`: `+d.showPosition()+` Expecting `+Q.join(", ")+", got '"+(this.terminals_[_]||_)+"'":lt="Parse error on line "+(V+1)+": Unexpected "+(_==Ot?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(lt,{text:d.match,token:this.terminals_[_]||_,line:d.yylineno,loc:ct,expected:Q})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+C+", token: "+_);switch(g[0]){case 1:n.push(_),h.push(d.yytext),t.push(d.yylloc),n.push(g[1]),_=null,kt=d.yyleng,s=d.yytext,V=d.yylineno,ct=d.yylloc;break;case 2:if(k=this.productions_[g[1]][1],x.$=h[h.length-k],x._$={first_line:t[t.length-(k||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(k||1)].first_column,last_column:t[t.length-1].last_column},It&&(x._$.range=[t[t.length-(k||1)].range[0],t[t.length-1].range[1]]),ot=this.performAction.apply(x,[s,kt,V,R.yy,g[1],h,t].concat(Ct)),typeof ot<"u")return ot;k&&(n=n.slice(0,-1*k*2),h=h.slice(0,-1*k),t=t.slice(0,-1*k)),n.push(this.productions_[g[1]][0]),h.push(x.$),t.push(x._$),Tt=p[n[n.length-2]][n[n.length-1]],n.push(Tt);break;case 3:return!0}}return!0},"parse")},Nt=(function(){var m={EOF:1,parseError:o(function(a,n){if(this.yy.parser)this.yy.parser.parseError(a,n);else throw new Error(a)},"parseError"),setInput:o(function(a,n){return this.yy=n||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var n=a.match(/(?:\r\n?|\n).*/g);return n?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},"input"),unput:o(function(a){var n=a.length,r=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-n),this.offset-=n;var h=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var t=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===h.length?this.yylloc.first_column:0)+h[h.length-r.length].length-r[0].length:this.yylloc.first_column-n},this.options.ranges&&(this.yylloc.range=[t[0],t[0]+this.yyleng-n]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(a){this.unput(this.match.slice(a))},"less"),pastInput:o(function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var a=this.pastInput(),n=new Array(a.length+1).join("-");return a+this.upcomingInput()+` diff --git a/assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js b/assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.B6lsWZ93.js similarity index 99% rename from assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js rename to assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.B6lsWZ93.js index cc44cb6..bd26805 100644 --- a/assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.5Jxc5EWZ.js +++ b/assets/chunks/flowDiagram-KYDEHFYC-DVhYU71X-BNBS2E_i.B6lsWZ93.js @@ -1,4 +1,4 @@ -import{l as Ye}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js";import{q as b,aj as Pe,O as J,A as p1,a9 as m1,ak as He,al as qe,am as se,a8 as Ke,a5 as Qe,an as Xe,a7 as Je,a6 as Ze,ao as et,ag as tt,ap as st,aq as it,ar as rt,as as ee,at,au as nt,av as ut}from"../app.DiEjJ8gz.js";import{a as ot}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import{$ as lt}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import{e as ct}from"./channel-CYBQPlIk-DDfBD8St.CNciJ1_Y.js";import"./vitepress-theme-teek.CUuTa6hm.js";var ht="flowchart-",te,dt=(te=class{constructor(){this.vertexCounter=0,this.config=p1(),this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCount=-1,this.posCrossRef=[],this.funs=[],this.setAccTitle=Ke,this.setAccDescription=Qe,this.setDiagramTitle=Xe,this.getAccTitle=Je,this.getAccDescription=Ze,this.getDiagramTitle=et,this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}sanitizeText(e){return tt.sanitizeText(e,this.config)}lookUpDomId(e){for(const i of this.vertices.values())if(i.id===e)return i.domId;return e}addVertex(e,i,r,n,a,p,d={},l){if(!e||e.trim().length===0)return;let c;if(l!==void 0){let D;l.includes(` +import{l as Ye}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import{q as b,aj as Pe,O as J,A as p1,a9 as m1,ak as He,al as qe,am as se,a8 as Ke,a5 as Qe,an as Xe,a7 as Je,a6 as Ze,ao as et,ag as tt,ap as st,aq as it,ar as rt,as as ee,at,au as nt,av as ut}from"../app.DfYWW83x.js";import{a as ot}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import{$ as lt}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import{e as ct}from"./channel-CYBQPlIk-DDfBD8St.DUCXByQc.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var ht="flowchart-",te,dt=(te=class{constructor(){this.vertexCounter=0,this.config=p1(),this.vertices=new Map,this.edges=[],this.classes=new Map,this.subGraphs=[],this.subGraphLookup=new Map,this.tooltips=new Map,this.subCount=0,this.firstGraphFlag=!0,this.secCount=-1,this.posCrossRef=[],this.funs=[],this.setAccTitle=Ke,this.setAccDescription=Qe,this.setDiagramTitle=Xe,this.getAccTitle=Je,this.getAccDescription=Ze,this.getDiagramTitle=et,this.funs.push(this.setupToolTips.bind(this)),this.addVertex=this.addVertex.bind(this),this.firstGraph=this.firstGraph.bind(this),this.setDirection=this.setDirection.bind(this),this.addSubGraph=this.addSubGraph.bind(this),this.addLink=this.addLink.bind(this),this.setLink=this.setLink.bind(this),this.updateLink=this.updateLink.bind(this),this.addClass=this.addClass.bind(this),this.setClass=this.setClass.bind(this),this.destructLink=this.destructLink.bind(this),this.setClickEvent=this.setClickEvent.bind(this),this.setTooltip=this.setTooltip.bind(this),this.updateLinkInterpolate=this.updateLinkInterpolate.bind(this),this.setClickFun=this.setClickFun.bind(this),this.bindFunctions=this.bindFunctions.bind(this),this.lex={firstGraph:this.firstGraph.bind(this)},this.clear(),this.setGen("gen-2")}sanitizeText(e){return tt.sanitizeText(e,this.config)}lookUpDomId(e){for(const i of this.vertices.values())if(i.id===e)return i.domId;return e}addVertex(e,i,r,n,a,p,d={},l){if(!e||e.trim().length===0)return;let c;if(l!==void 0){let D;l.includes(` `)?D=l+` `:D=`{ `+l+` diff --git a/assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.4mlfbojo.js b/assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.DuURMpPQ.js similarity index 99% rename from assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.4mlfbojo.js rename to assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.DuURMpPQ.js index 9db8cf6..b8b7128 100644 --- a/assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.4mlfbojo.js +++ b/assets/chunks/ganttDiagram-EK5VF46D-Bly8WreB-mP9R-02L.DuURMpPQ.js @@ -1,4 +1,4 @@ -import{q as d,a6 as An,a5 as En,ao as Un,an as Ln,a7 as In,a8 as Hn,A as Mt,a9 as Zt,aa as On,aE as nt,O as Qt,ag as Wn,ae as Pn,at as Nn,aF as ne,am as zn,aG as en,aH as Rn,aI as nn,aJ as rn,aK as sn,aL as Zn,aM as xe}from"../app.DiEjJ8gz.js";import{i as jn,u as Vn,e as Xn,x as Bn,G as Ie}from"./linear-m73w_WNc-FCrKOMM3.W3QlvtjM.js";import{a as Qn}from"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";function qn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let s of t)(s=e(s,++r,t))!=null&&(n=s)&&(n=s)}return n}function Gn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let s of t)(s=e(s,++r,t))!=null&&(n>s||n===void 0&&s>=s)&&(n=s)}return n}function Kn(t){return t}var Vt=1,re=2,fe=3,jt=4,He=1e-6;function Jn(t){return"translate("+t+",0)"}function tr(t){return"translate(0,"+t+")"}function er(t){return e=>+t(e)}function nr(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function rr(){return!this.__axis}function an(t,e){var n=[],r=null,s=null,a=6,o=6,m=3,M=typeof window<"u"&&window.devicePixelRatio>1?0:.5,p=t===Vt||t===jt?-1:1,y=t===jt||t===re?"x":"y",Y=t===Vt||t===fe?Jn:tr;function b(x){var B=r??(e.ticks?e.ticks.apply(e,n):e.domain()),L=s??(e.tickFormat?e.tickFormat.apply(e,n):Kn),C=Math.max(a,0)+m,E=e.range(),N=+E[0]+M,U=+E[E.length-1]+M,j=(e.bandwidth?nr:er)(e.copy(),M),Q=x.selection?x.selection():x,w=Q.selectAll(".domain").data([null]),W=Q.selectAll(".tick").data(B,e).order(),T=W.exit(),$=W.enter().append("g").attr("class","tick"),S=W.select("line"),_=W.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),W=W.merge($),S=S.merge($.append("line").attr("stroke","currentColor").attr(y+"2",p*a)),_=_.merge($.append("text").attr("fill","currentColor").attr(y,p*C).attr("dy",t===Vt?"0em":t===fe?"0.71em":"0.32em")),x!==Q&&(w=w.transition(x),W=W.transition(x),S=S.transition(x),_=_.transition(x),T=T.transition(x).attr("opacity",He).attr("transform",function(g){return isFinite(g=j(g))?Y(g+M):this.getAttribute("transform")}),$.attr("opacity",He).attr("transform",function(g){var D=this.parentNode.__axis;return Y((D&&isFinite(D=D(g))?D:j(g))+M)})),T.remove(),w.attr("d",t===jt||t===re?o?"M"+p*o+","+N+"H"+M+"V"+U+"H"+p*o:"M"+M+","+N+"V"+U:o?"M"+N+","+p*o+"V"+M+"H"+U+"V"+p*o:"M"+N+","+M+"H"+U),W.attr("opacity",1).attr("transform",function(g){return Y(j(g)+M)}),S.attr(y+"2",p*a),_.attr(y,p*C).text(L),Q.filter(rr).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===re?"start":t===jt?"end":"middle"),Q.each(function(){this.__axis=j})}return b.scale=function(x){return arguments.length?(e=x,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(x){return arguments.length?(n=x==null?[]:Array.from(x),b):n.slice()},b.tickValues=function(x){return arguments.length?(r=x==null?null:Array.from(x),b):r&&r.slice()},b.tickFormat=function(x){return arguments.length?(s=x,b):s},b.tickSize=function(x){return arguments.length?(a=o=+x,b):a},b.tickSizeInner=function(x){return arguments.length?(a=+x,b):a},b.tickSizeOuter=function(x){return arguments.length?(o=+x,b):o},b.tickPadding=function(x){return arguments.length?(m=+x,b):m},b.offset=function(x){return arguments.length?(M=+x,b):M},b}function ir(t){return an(Vt,t)}function sr(t){return an(fe,t)}const ar=Math.PI/180,or=180/Math.PI,qt=18,on=.96422,cn=1,ln=.82521,un=4/29,_t=6/29,dn=3*_t*_t,cr=_t*_t*_t;function hn(t){if(t instanceof lt)return new lt(t.l,t.a,t.b,t.opacity);if(t instanceof dt)return fn(t);t instanceof en||(t=Rn(t));var e=oe(t.r),n=oe(t.g),r=oe(t.b),s=ie((.2225045*e+.7168786*n+.0606169*r)/cn),a,o;return e===n&&n===r?a=o=s:(a=ie((.4360747*e+.3850649*n+.1430804*r)/on),o=ie((.0139322*e+.0971045*n+.7141733*r)/ln)),new lt(116*s-16,500*(a-s),200*(s-o),t.opacity)}function lr(t,e,n,r){return arguments.length===1?hn(t):new lt(t,e,n,r??1)}function lt(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}nn(lt,lr,rn(sn,{brighter(t){return new lt(this.l+qt*(t??1),this.a,this.b,this.opacity)},darker(t){return new lt(this.l-qt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=on*se(e),t=cn*se(t),n=ln*se(n),new en(ae(3.1338561*e-1.6168667*t-.4906146*n),ae(-.9787684*e+1.9161415*t+.033454*n),ae(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ie(t){return t>cr?Math.pow(t,1/3):t/dn+un}function se(t){return t>_t?t*t*t:dn*(t-un)}function ae(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function oe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ur(t){if(t instanceof dt)return new dt(t.h,t.c,t.l,t.opacity);if(t instanceof lt||(t=hn(t)),t.a===0&&t.b===0)return new dt(NaN,0(t(a=new Date(+a)),a),s.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),s.round=a=>{const o=s(a),m=s.ceil(a);return a-o(e(a=new Date(+a),o==null?1:Math.floor(o)),a),s.range=(a,o,m)=>{const M=[];if(a=s.ceil(a),m=m==null?1:Math.floor(m),!(a0))return M;let p;do M.push(p=new Date(+a)),e(a,m),t(a);while(pJ(o=>{if(o>=o)for(;t(o),!a(o);)o.setTime(o-1)},(o,m)=>{if(o>=o)if(m<0)for(;++m<=0;)for(;e(o,-1),!a(o););else for(;--m>=0;)for(;e(o,1),!a(o););}),n&&(s.count=(a,o)=>(ce.setTime(+a),le.setTime(+o),t(ce),t(le),Math.floor(n(ce,le))),s.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?s.filter(r?o=>r(o)%a===0:o=>s.count(0,o)%a===0):s)),s}const $t=J(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);$t.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?J(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):$t);$t.range;const ht=1e3,st=ht*60,ft=st*60,gt=ft*24,we=gt*7,Oe=gt*30,ue=gt*365,mt=J(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getUTCSeconds());mt.range;const Lt=J(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ht)},(t,e)=>{t.setTime(+t+e*st)},(t,e)=>(e-t)/st,t=>t.getMinutes());Lt.range;const gr=J(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*st)},(t,e)=>(e-t)/st,t=>t.getUTCMinutes());gr.range;const It=J(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ht-t.getMinutes()*st)},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getHours());It.range;const yr=J(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCHours());yr.range;const Tt=J(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*st)/gt,t=>t.getDate()-1);Tt.range;const De=J(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gt,t=>t.getUTCDate()-1);De.range;const mr=J(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gt,t=>Math.floor(t/gt));mr.range;function xt(t){return J(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*st)/we)}const Wt=xt(0),Ht=xt(1),gn=xt(2),yn=xt(3),vt=xt(4),mn=xt(5),pn=xt(6);Wt.range;Ht.range;gn.range;yn.range;vt.range;mn.range;pn.range;function wt(t){return J(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/we)}const kn=wt(0),Gt=wt(1),pr=wt(2),kr=wt(3),Ft=wt(4),Tr=wt(5),vr=wt(6);kn.range;Gt.range;pr.range;kr.range;Ft.range;Tr.range;vr.range;const Ot=J(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Ot.range;const br=J(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());br.range;const yt=J(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());yt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:J(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});yt.range;const bt=J(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:J(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});bt.range;function xr(t,e,n,r,s,a){const o=[[mt,1,ht],[mt,5,5*ht],[mt,15,15*ht],[mt,30,30*ht],[a,1,st],[a,5,5*st],[a,15,15*st],[a,30,30*st],[s,1,ft],[s,3,3*ft],[s,6,6*ft],[s,12,12*ft],[r,1,gt],[r,2,2*gt],[n,1,we],[e,1,Oe],[e,3,3*Oe],[t,1,ue]];function m(p,y,Y){const b=yC).right(o,b);if(x===o.length)return t.every(Ie(p/ue,y/ue,Y));if(x===0)return $t.every(Math.max(Ie(p,y,Y),1));const[B,L]=o[b/o[x-1][2]53)return null;"w"in u||(u.w=1),"Z"in u?(O=he(At(u.y,0,1)),Z=O.getUTCDay(),O=Z>4||Z===0?Gt.ceil(O):Gt(O),O=De.offset(O,(u.V-1)*7),u.y=O.getUTCFullYear(),u.m=O.getUTCMonth(),u.d=O.getUTCDate()+(u.w+6)%7):(O=de(At(u.y,0,1)),Z=O.getDay(),O=Z>4||Z===0?Ht.ceil(O):Ht(O),O=Tt.offset(O,(u.V-1)*7),u.y=O.getFullYear(),u.m=O.getMonth(),u.d=O.getDate()+(u.w+6)%7)}else("W"in u||"U"in u)&&("w"in u||(u.w="u"in u?u.u%7:"W"in u?1:0),Z="Z"in u?he(At(u.y,0,1)).getUTCDay():de(At(u.y,0,1)).getDay(),u.m=0,u.d="W"in u?(u.w+6)%7+u.W*7-(Z+5)%7:u.w+u.U*7-(Z+6)%7);return"Z"in u?(u.H+=u.Z/100|0,u.M+=u.Z%100,he(u)):de(u)}}function T(k,H,P,u){for(var z=0,O=H.length,Z=P.length,G,tt;z=Z)return-1;if(G=H.charCodeAt(z++),G===37){if(G=H.charAt(z++),tt=Q[G in We?H.charAt(z++):G],!tt||(u=tt(k,P,u))<0)return-1}else if(G!=P.charCodeAt(u++))return-1}return u}function $(k,H,P){var u=p.exec(H.slice(P));return u?(k.p=y.get(u[0].toLowerCase()),P+u[0].length):-1}function S(k,H,P){var u=x.exec(H.slice(P));return u?(k.w=B.get(u[0].toLowerCase()),P+u[0].length):-1}function _(k,H,P){var u=Y.exec(H.slice(P));return u?(k.w=b.get(u[0].toLowerCase()),P+u[0].length):-1}function g(k,H,P){var u=E.exec(H.slice(P));return u?(k.m=N.get(u[0].toLowerCase()),P+u[0].length):-1}function D(k,H,P){var u=L.exec(H.slice(P));return u?(k.m=C.get(u[0].toLowerCase()),P+u[0].length):-1}function c(k,H,P){return T(k,e,H,P)}function f(k,H,P){return T(k,n,H,P)}function h(k,H,P){return T(k,r,H,P)}function F(k){return o[k.getDay()]}function i(k){return a[k.getDay()]}function v(k){return M[k.getMonth()]}function l(k){return m[k.getMonth()]}function I(k){return s[+(k.getHours()>=12)]}function A(k){return 1+~~(k.getMonth()/3)}function V(k){return o[k.getUTCDay()]}function X(k){return a[k.getUTCDay()]}function pt(k){return M[k.getUTCMonth()]}function q(k){return m[k.getUTCMonth()]}function at(k){return s[+(k.getUTCHours()>=12)]}function kt(k){return 1+~~(k.getUTCMonth()/3)}return{format:function(k){var H=w(k+="",U);return H.toString=function(){return k},H},parse:function(k){var H=W(k+="",!1);return H.toString=function(){return k},H},utcFormat:function(k){var H=w(k+="",j);return H.toString=function(){return k},H},utcParse:function(k){var H=W(k+="",!0);return H.toString=function(){return k},H}}}var We={"-":"",_:" ",0:"0"},et=/^\s*\d+/,Mr=/^%/,_r=/[\\^$*+?|[\]().{}]/g;function R(t,e,n){var r=t<0?"-":"",s=(r?-t:t)+"",a=s.length;return r+(a[e.toLowerCase(),n]))}function $r(t,e,n){var r=et.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Fr(t,e,n){var r=et.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Ar(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Er(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Pe(t,e,n){var r=et.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ne(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ur(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Lr(t,e,n){var r=et.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Ir(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ze(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Hr(t,e,n){var r=et.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Re(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Wr(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Pr(t,e,n){var r=et.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Nr(t,e,n){var r=et.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function zr(t,e,n){var r=Mr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Rr(t,e,n){var r=et.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Zr(t,e,n){var r=et.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ze(t,e){return R(t.getDate(),e,2)}function jr(t,e){return R(t.getHours(),e,2)}function Vr(t,e){return R(t.getHours()%12||12,e,2)}function Xr(t,e){return R(1+Tt.count(yt(t),t),e,3)}function Tn(t,e){return R(t.getMilliseconds(),e,3)}function Br(t,e){return Tn(t,e)+"000"}function Qr(t,e){return R(t.getMonth()+1,e,2)}function qr(t,e){return R(t.getMinutes(),e,2)}function Gr(t,e){return R(t.getSeconds(),e,2)}function Kr(t){var e=t.getDay();return e===0?7:e}function Jr(t,e){return R(Wt.count(yt(t)-1,t),e,2)}function vn(t){var e=t.getDay();return e>=4||e===0?vt(t):vt.ceil(t)}function ti(t,e){return t=vn(t),R(vt.count(yt(t),t)+(yt(t).getDay()===4),e,2)}function ei(t){return t.getDay()}function ni(t,e){return R(Ht.count(yt(t)-1,t),e,2)}function ri(t,e){return R(t.getFullYear()%100,e,2)}function ii(t,e){return t=vn(t),R(t.getFullYear()%100,e,2)}function si(t,e){return R(t.getFullYear()%1e4,e,4)}function ai(t,e){var n=t.getDay();return t=n>=4||n===0?vt(t):vt.ceil(t),R(t.getFullYear()%1e4,e,4)}function oi(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+R(e/60|0,"0",2)+R(e%60,"0",2)}function je(t,e){return R(t.getUTCDate(),e,2)}function ci(t,e){return R(t.getUTCHours(),e,2)}function li(t,e){return R(t.getUTCHours()%12||12,e,2)}function ui(t,e){return R(1+De.count(bt(t),t),e,3)}function bn(t,e){return R(t.getUTCMilliseconds(),e,3)}function di(t,e){return bn(t,e)+"000"}function hi(t,e){return R(t.getUTCMonth()+1,e,2)}function fi(t,e){return R(t.getUTCMinutes(),e,2)}function gi(t,e){return R(t.getUTCSeconds(),e,2)}function yi(t){var e=t.getUTCDay();return e===0?7:e}function mi(t,e){return R(kn.count(bt(t)-1,t),e,2)}function xn(t){var e=t.getUTCDay();return e>=4||e===0?Ft(t):Ft.ceil(t)}function pi(t,e){return t=xn(t),R(Ft.count(bt(t),t)+(bt(t).getUTCDay()===4),e,2)}function ki(t){return t.getUTCDay()}function Ti(t,e){return R(Gt.count(bt(t)-1,t),e,2)}function vi(t,e){return R(t.getUTCFullYear()%100,e,2)}function bi(t,e){return t=xn(t),R(t.getUTCFullYear()%100,e,2)}function xi(t,e){return R(t.getUTCFullYear()%1e4,e,4)}function wi(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Ft(t):Ft.ceil(t),R(t.getUTCFullYear()%1e4,e,4)}function Di(){return"+0000"}function Ve(){return"%"}function Xe(t){return+t}function Be(t){return Math.floor(+t/1e3)}var Ct,Kt;Ci({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Ci(t){return Ct=Cr(t),Kt=Ct.format,Ct.parse,Ct.utcFormat,Ct.utcParse,Ct}function Mi(t){return new Date(t)}function _i(t){return t instanceof Date?+t:+new Date(+t)}function wn(t,e,n,r,s,a,o,m,M,p){var y=Vn(),Y=y.invert,b=y.domain,x=p(".%L"),B=p(":%S"),L=p("%I:%M"),C=p("%I %p"),E=p("%a %d"),N=p("%b %d"),U=p("%B"),j=p("%Y");function Q(w){return(M(w)4&&(x+=7),b.add(x,n));return B.diff(L,"week")+1},m.isoWeekday=function(p){return this.$utils().u(p)?this.day()||7:this.day(this.day()%7?p:p-7)};var M=m.startOf;m.startOf=function(p,y){var Y=this.$utils(),b=!!Y.u(y)||y;return Y.p(p)==="isoweek"?b?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):M.bind(this)(p,y)}}})})(ye)),ye.exports}var Yi=Fi();const Ai=xe(Yi);var me={exports:{}},Ei=me.exports,qe;function Ui(){return qe||(qe=1,(function(t,e){(function(n,r){t.exports=r()})(Ei,function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d/,a=/\d\d/,o=/\d\d?/,m=/\d*[^-_:/,()\s\d]+/,M={},p=function(C){return(C=+C)+(C>68?1900:2e3)},y=function(C){return function(E){this[C]=+E}},Y=[/[+-]\d\d:?(\d\d)?|Z/,function(C){(this.zone||(this.zone={})).offset=(function(E){if(!E||E==="Z")return 0;var N=E.match(/([+-]|\d\d)/g),U=60*N[1]+(+N[2]||0);return U===0?0:N[0]==="+"?-U:U})(C)}],b=function(C){var E=M[C];return E&&(E.indexOf?E:E.s.concat(E.f))},x=function(C,E){var N,U=M.meridiem;if(U){for(var j=1;j<=24;j+=1)if(C.indexOf(U(j,0,E))>-1){N=j>12;break}}else N=C===(E?"pm":"PM");return N},B={A:[m,function(C){this.afternoon=x(C,!1)}],a:[m,function(C){this.afternoon=x(C,!0)}],Q:[s,function(C){this.month=3*(C-1)+1}],S:[s,function(C){this.milliseconds=100*+C}],SS:[a,function(C){this.milliseconds=10*+C}],SSS:[/\d{3}/,function(C){this.milliseconds=+C}],s:[o,y("seconds")],ss:[o,y("seconds")],m:[o,y("minutes")],mm:[o,y("minutes")],H:[o,y("hours")],h:[o,y("hours")],HH:[o,y("hours")],hh:[o,y("hours")],D:[o,y("day")],DD:[a,y("day")],Do:[m,function(C){var E=M.ordinal,N=C.match(/\d+/);if(this.day=N[0],E)for(var U=1;U<=31;U+=1)E(U).replace(/\[|\]/g,"")===C&&(this.day=U)}],w:[o,y("week")],ww:[a,y("week")],M:[o,y("month")],MM:[a,y("month")],MMM:[m,function(C){var E=b("months"),N=(b("monthsShort")||E.map(function(U){return U.slice(0,3)})).indexOf(C)+1;if(N<1)throw new Error;this.month=N%12||N}],MMMM:[m,function(C){var E=b("months").indexOf(C)+1;if(E<1)throw new Error;this.month=E%12||E}],Y:[/[+-]?\d+/,y("year")],YY:[a,function(C){this.year=p(C)}],YYYY:[/\d{4}/,y("year")],Z:Y,ZZ:Y};function L(C){var E,N;E=C,N=M&&M.formats;for(var U=(C=E.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,g){var D=g&&g.toUpperCase();return _||N[g]||n[g]||N[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(c,f,h){return f||h.slice(1)})})).match(r),j=U.length,Q=0;Q-1)return new Date((i==="X"?1e3:1)*F);var I=L(i)(F),A=I.year,V=I.month,X=I.day,pt=I.hours,q=I.minutes,at=I.seconds,kt=I.milliseconds,k=I.zone,H=I.week,P=new Date,u=X||(A||V?1:P.getDate()),z=A||P.getFullYear(),O=0;A&&!V||(O=V>0?V-1:P.getMonth());var Z,G=pt||0,tt=q||0,ot=at||0,rt=kt||0;return k?new Date(Date.UTC(z,O,u,G,tt,ot,rt+60*k.offset*1e3)):v?new Date(Date.UTC(z,O,u,G,tt,ot,rt)):(Z=new Date(z,O,u,G,tt,ot,rt),H&&(Z=l(Z).week(H).toDate()),Z)}catch{return new Date("")}})(w,$,W,N),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),g&&w!=this.format($)&&(this.$d=new Date("")),M={}}else if($ instanceof Array)for(var c=$.length,f=1;f<=c;f+=1){T[1]=$[f-1];var h=N.apply(this,T);if(h.isValid()){this.$d=h.$d,this.$L=h.$L,this.init();break}f===c&&(this.$d=new Date(""))}else j.call(this,Q)}}})})(me)),me.exports}var Li=Ui();const Ii=xe(Li);var pe={exports:{}},Hi=pe.exports,Ge;function Oi(){return Ge||(Ge=1,(function(t,e){(function(n,r){t.exports=r()})(Hi,function(){return function(n,r){var s=r.prototype,a=s.format;s.format=function(o){var m=this,M=this.$locale();if(!this.isValid())return a.bind(this)(o);var p=this.$utils(),y=(o||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(Y){switch(Y){case"Q":return Math.ceil((m.$M+1)/3);case"Do":return M.ordinal(m.$D);case"gggg":return m.weekYear();case"GGGG":return m.isoWeekYear();case"wo":return M.ordinal(m.week(),"W");case"w":case"ww":return p.s(m.week(),Y==="w"?1:2,"0");case"W":case"WW":return p.s(m.isoWeek(),Y==="W"?1:2,"0");case"k":case"kk":return p.s(String(m.$H===0?24:m.$H),Y==="k"?1:2,"0");case"X":return Math.floor(m.$d.getTime()/1e3);case"x":return m.$d.getTime();case"z":return"["+m.offsetName()+"]";case"zzz":return"["+m.offsetName("long")+"]";default:return Y}});return a.bind(this)(y)}}})})(pe)),pe.exports}var Wi=Oi();const Pi=xe(Wi);var ke=(function(){var t=d(function(D,c,f,h){for(f=f||{},h=D.length;h--;f[D[h]]=c);return f},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],n=[1,26],r=[1,27],s=[1,28],a=[1,29],o=[1,30],m=[1,31],M=[1,32],p=[1,33],y=[1,34],Y=[1,9],b=[1,10],x=[1,11],B=[1,12],L=[1,13],C=[1,14],E=[1,15],N=[1,16],U=[1,19],j=[1,20],Q=[1,21],w=[1,22],W=[1,23],T=[1,25],$=[1,35],S={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:d(function(D,c,f,h,F,i,v){var l=i.length-1;switch(F){case 1:return i[l-1];case 2:this.$=[];break;case 3:i[l-1].push(i[l]),this.$=i[l-1];break;case 4:case 5:this.$=i[l];break;case 6:case 7:this.$=[];break;case 8:h.setWeekday("monday");break;case 9:h.setWeekday("tuesday");break;case 10:h.setWeekday("wednesday");break;case 11:h.setWeekday("thursday");break;case 12:h.setWeekday("friday");break;case 13:h.setWeekday("saturday");break;case 14:h.setWeekday("sunday");break;case 15:h.setWeekend("friday");break;case 16:h.setWeekend("saturday");break;case 17:h.setDateFormat(i[l].substr(11)),this.$=i[l].substr(11);break;case 18:h.enableInclusiveEndDates(),this.$=i[l].substr(18);break;case 19:h.TopAxis(),this.$=i[l].substr(8);break;case 20:h.setAxisFormat(i[l].substr(11)),this.$=i[l].substr(11);break;case 21:h.setTickInterval(i[l].substr(13)),this.$=i[l].substr(13);break;case 22:h.setExcludes(i[l].substr(9)),this.$=i[l].substr(9);break;case 23:h.setIncludes(i[l].substr(9)),this.$=i[l].substr(9);break;case 24:h.setTodayMarker(i[l].substr(12)),this.$=i[l].substr(12);break;case 27:h.setDiagramTitle(i[l].substr(6)),this.$=i[l].substr(6);break;case 28:this.$=i[l].trim(),h.setAccTitle(this.$);break;case 29:case 30:this.$=i[l].trim(),h.setAccDescription(this.$);break;case 31:h.addSection(i[l].substr(8)),this.$=i[l].substr(8);break;case 33:h.addTask(i[l-1],i[l]),this.$="task";break;case 34:this.$=i[l-1],h.setClickEvent(i[l-1],i[l],null);break;case 35:this.$=i[l-2],h.setClickEvent(i[l-2],i[l-1],i[l]);break;case 36:this.$=i[l-2],h.setClickEvent(i[l-2],i[l-1],null),h.setLink(i[l-2],i[l]);break;case 37:this.$=i[l-3],h.setClickEvent(i[l-3],i[l-2],i[l-1]),h.setLink(i[l-3],i[l]);break;case 38:this.$=i[l-2],h.setClickEvent(i[l-2],i[l],null),h.setLink(i[l-2],i[l-1]);break;case 39:this.$=i[l-3],h.setClickEvent(i[l-3],i[l-1],i[l]),h.setLink(i[l-3],i[l-2]);break;case 40:this.$=i[l-1],h.setLink(i[l-1],i[l]);break;case 41:case 47:this.$=i[l-1]+" "+i[l];break;case 42:case 43:case 45:this.$=i[l-2]+" "+i[l-1]+" "+i[l];break;case 44:case 46:this.$=i[l-3]+" "+i[l-2]+" "+i[l-1]+" "+i[l];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:s,15:a,16:o,17:m,18:M,19:18,20:p,21:y,22:Y,23:b,24:x,25:B,26:L,27:C,28:E,29:N,30:U,31:j,33:Q,35:w,36:W,37:24,38:T,40:$},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:n,13:r,14:s,15:a,16:o,17:m,18:M,19:18,20:p,21:y,22:Y,23:b,24:x,25:B,26:L,27:C,28:E,29:N,30:U,31:j,33:Q,35:w,36:W,37:24,38:T,40:$},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:d(function(D,c){if(c.recoverable)this.trace(D);else{var f=new Error(D);throw f.hash=c,f}},"parseError"),parse:d(function(D){var c=this,f=[0],h=[],F=[null],i=[],v=this.table,l="",I=0,A=0,V=2,X=1,pt=i.slice.call(arguments,1),q=Object.create(this.lexer),at={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(at.yy[kt]=this.yy[kt]);q.setInput(D,at.yy),at.yy.lexer=q,at.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var k=q.yylloc;i.push(k);var H=q.options&&q.options.ranges;typeof at.yy.parseError=="function"?this.parseError=at.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function P(it){f.length=f.length-2*it,F.length=F.length-it,i.length=i.length-it}d(P,"popStack");function u(){var it;return it=h.pop()||q.lex()||X,typeof it!="number"&&(it instanceof Array&&(h=it,it=h.pop()),it=c.symbols_[it]||it),it}d(u,"lex");for(var z,O,Z,G,tt={},ot,rt,Le,Rt;;){if(O=f[f.length-1],this.defaultActions[O]?Z=this.defaultActions[O]:((z===null||typeof z>"u")&&(z=u()),Z=v[O]&&v[O][z]),typeof Z>"u"||!Z.length||!Z[0]){var ee="";Rt=[];for(ot in v[O])this.terminals_[ot]&&ot>V&&Rt.push("'"+this.terminals_[ot]+"'");q.showPosition?ee="Parse error on line "+(I+1)+`: +import{q as d,a6 as An,a5 as En,ao as Un,an as Ln,a7 as In,a8 as Hn,A as Mt,a9 as Zt,aa as On,aE as nt,O as Qt,ag as Wn,ae as Pn,at as Nn,aF as ne,am as zn,aG as en,aH as Rn,aI as nn,aJ as rn,aK as sn,aL as Zn,aM as xe}from"../app.DfYWW83x.js";import{i as jn,u as Vn,e as Xn,x as Bn,G as Ie}from"./linear-m73w_WNc-FCrKOMM3.Dmb54ZXl.js";import{a as Qn}from"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";function qn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n=r)&&(n=r);else{let r=-1;for(let s of t)(s=e(s,++r,t))!=null&&(n=s)&&(n=s)}return n}function Gn(t,e){let n;if(e===void 0)for(const r of t)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);else{let r=-1;for(let s of t)(s=e(s,++r,t))!=null&&(n>s||n===void 0&&s>=s)&&(n=s)}return n}function Kn(t){return t}var Vt=1,re=2,fe=3,jt=4,He=1e-6;function Jn(t){return"translate("+t+",0)"}function tr(t){return"translate(0,"+t+")"}function er(t){return e=>+t(e)}function nr(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function rr(){return!this.__axis}function an(t,e){var n=[],r=null,s=null,a=6,o=6,m=3,M=typeof window<"u"&&window.devicePixelRatio>1?0:.5,p=t===Vt||t===jt?-1:1,y=t===jt||t===re?"x":"y",Y=t===Vt||t===fe?Jn:tr;function b(x){var B=r??(e.ticks?e.ticks.apply(e,n):e.domain()),L=s??(e.tickFormat?e.tickFormat.apply(e,n):Kn),C=Math.max(a,0)+m,E=e.range(),N=+E[0]+M,U=+E[E.length-1]+M,j=(e.bandwidth?nr:er)(e.copy(),M),Q=x.selection?x.selection():x,w=Q.selectAll(".domain").data([null]),W=Q.selectAll(".tick").data(B,e).order(),T=W.exit(),$=W.enter().append("g").attr("class","tick"),S=W.select("line"),_=W.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),W=W.merge($),S=S.merge($.append("line").attr("stroke","currentColor").attr(y+"2",p*a)),_=_.merge($.append("text").attr("fill","currentColor").attr(y,p*C).attr("dy",t===Vt?"0em":t===fe?"0.71em":"0.32em")),x!==Q&&(w=w.transition(x),W=W.transition(x),S=S.transition(x),_=_.transition(x),T=T.transition(x).attr("opacity",He).attr("transform",function(g){return isFinite(g=j(g))?Y(g+M):this.getAttribute("transform")}),$.attr("opacity",He).attr("transform",function(g){var D=this.parentNode.__axis;return Y((D&&isFinite(D=D(g))?D:j(g))+M)})),T.remove(),w.attr("d",t===jt||t===re?o?"M"+p*o+","+N+"H"+M+"V"+U+"H"+p*o:"M"+M+","+N+"V"+U:o?"M"+N+","+p*o+"V"+M+"H"+U+"V"+p*o:"M"+N+","+M+"H"+U),W.attr("opacity",1).attr("transform",function(g){return Y(j(g)+M)}),S.attr(y+"2",p*a),_.attr(y,p*C).text(L),Q.filter(rr).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===re?"start":t===jt?"end":"middle"),Q.each(function(){this.__axis=j})}return b.scale=function(x){return arguments.length?(e=x,b):e},b.ticks=function(){return n=Array.from(arguments),b},b.tickArguments=function(x){return arguments.length?(n=x==null?[]:Array.from(x),b):n.slice()},b.tickValues=function(x){return arguments.length?(r=x==null?null:Array.from(x),b):r&&r.slice()},b.tickFormat=function(x){return arguments.length?(s=x,b):s},b.tickSize=function(x){return arguments.length?(a=o=+x,b):a},b.tickSizeInner=function(x){return arguments.length?(a=+x,b):a},b.tickSizeOuter=function(x){return arguments.length?(o=+x,b):o},b.tickPadding=function(x){return arguments.length?(m=+x,b):m},b.offset=function(x){return arguments.length?(M=+x,b):M},b}function ir(t){return an(Vt,t)}function sr(t){return an(fe,t)}const ar=Math.PI/180,or=180/Math.PI,qt=18,on=.96422,cn=1,ln=.82521,un=4/29,_t=6/29,dn=3*_t*_t,cr=_t*_t*_t;function hn(t){if(t instanceof lt)return new lt(t.l,t.a,t.b,t.opacity);if(t instanceof dt)return fn(t);t instanceof en||(t=Rn(t));var e=oe(t.r),n=oe(t.g),r=oe(t.b),s=ie((.2225045*e+.7168786*n+.0606169*r)/cn),a,o;return e===n&&n===r?a=o=s:(a=ie((.4360747*e+.3850649*n+.1430804*r)/on),o=ie((.0139322*e+.0971045*n+.7141733*r)/ln)),new lt(116*s-16,500*(a-s),200*(s-o),t.opacity)}function lr(t,e,n,r){return arguments.length===1?hn(t):new lt(t,e,n,r??1)}function lt(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}nn(lt,lr,rn(sn,{brighter(t){return new lt(this.l+qt*(t??1),this.a,this.b,this.opacity)},darker(t){return new lt(this.l-qt*(t??1),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=on*se(e),t=cn*se(t),n=ln*se(n),new en(ae(3.1338561*e-1.6168667*t-.4906146*n),ae(-.9787684*e+1.9161415*t+.033454*n),ae(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function ie(t){return t>cr?Math.pow(t,1/3):t/dn+un}function se(t){return t>_t?t*t*t:dn*(t-un)}function ae(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function oe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ur(t){if(t instanceof dt)return new dt(t.h,t.c,t.l,t.opacity);if(t instanceof lt||(t=hn(t)),t.a===0&&t.b===0)return new dt(NaN,0(t(a=new Date(+a)),a),s.ceil=a=>(t(a=new Date(a-1)),e(a,1),t(a),a),s.round=a=>{const o=s(a),m=s.ceil(a);return a-o(e(a=new Date(+a),o==null?1:Math.floor(o)),a),s.range=(a,o,m)=>{const M=[];if(a=s.ceil(a),m=m==null?1:Math.floor(m),!(a0))return M;let p;do M.push(p=new Date(+a)),e(a,m),t(a);while(pJ(o=>{if(o>=o)for(;t(o),!a(o);)o.setTime(o-1)},(o,m)=>{if(o>=o)if(m<0)for(;++m<=0;)for(;e(o,-1),!a(o););else for(;--m>=0;)for(;e(o,1),!a(o););}),n&&(s.count=(a,o)=>(ce.setTime(+a),le.setTime(+o),t(ce),t(le),Math.floor(n(ce,le))),s.every=a=>(a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?s.filter(r?o=>r(o)%a===0:o=>s.count(0,o)%a===0):s)),s}const $t=J(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);$t.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?J(e=>{e.setTime(Math.floor(e/t)*t)},(e,n)=>{e.setTime(+e+n*t)},(e,n)=>(n-e)/t):$t);$t.range;const ht=1e3,st=ht*60,ft=st*60,gt=ft*24,we=gt*7,Oe=gt*30,ue=gt*365,mt=J(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+e*ht)},(t,e)=>(e-t)/ht,t=>t.getUTCSeconds());mt.range;const Lt=J(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ht)},(t,e)=>{t.setTime(+t+e*st)},(t,e)=>(e-t)/st,t=>t.getMinutes());Lt.range;const gr=J(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+e*st)},(t,e)=>(e-t)/st,t=>t.getUTCMinutes());gr.range;const It=J(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*ht-t.getMinutes()*st)},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getHours());It.range;const yr=J(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+e*ft)},(t,e)=>(e-t)/ft,t=>t.getUTCHours());yr.range;const Tt=J(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*st)/gt,t=>t.getDate()-1);Tt.range;const De=J(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gt,t=>t.getUTCDate()-1);De.range;const mr=J(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/gt,t=>Math.floor(t/gt));mr.range;function xt(t){return J(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(e,n)=>{e.setDate(e.getDate()+n*7)},(e,n)=>(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*st)/we)}const Wt=xt(0),Ht=xt(1),gn=xt(2),yn=xt(3),vt=xt(4),mn=xt(5),pn=xt(6);Wt.range;Ht.range;gn.range;yn.range;vt.range;mn.range;pn.range;function wt(t){return J(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCDate(e.getUTCDate()+n*7)},(e,n)=>(n-e)/we)}const kn=wt(0),Gt=wt(1),pr=wt(2),kr=wt(3),Ft=wt(4),Tr=wt(5),vr=wt(6);kn.range;Gt.range;pr.range;kr.range;Ft.range;Tr.range;vr.range;const Ot=J(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());Ot.range;const br=J(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());br.range;const yt=J(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());yt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:J(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,n)=>{e.setFullYear(e.getFullYear()+n*t)});yt.range;const bt=J(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());bt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:J(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)});bt.range;function xr(t,e,n,r,s,a){const o=[[mt,1,ht],[mt,5,5*ht],[mt,15,15*ht],[mt,30,30*ht],[a,1,st],[a,5,5*st],[a,15,15*st],[a,30,30*st],[s,1,ft],[s,3,3*ft],[s,6,6*ft],[s,12,12*ft],[r,1,gt],[r,2,2*gt],[n,1,we],[e,1,Oe],[e,3,3*Oe],[t,1,ue]];function m(p,y,Y){const b=yC).right(o,b);if(x===o.length)return t.every(Ie(p/ue,y/ue,Y));if(x===0)return $t.every(Math.max(Ie(p,y,Y),1));const[B,L]=o[b/o[x-1][2]53)return null;"w"in u||(u.w=1),"Z"in u?(O=he(At(u.y,0,1)),Z=O.getUTCDay(),O=Z>4||Z===0?Gt.ceil(O):Gt(O),O=De.offset(O,(u.V-1)*7),u.y=O.getUTCFullYear(),u.m=O.getUTCMonth(),u.d=O.getUTCDate()+(u.w+6)%7):(O=de(At(u.y,0,1)),Z=O.getDay(),O=Z>4||Z===0?Ht.ceil(O):Ht(O),O=Tt.offset(O,(u.V-1)*7),u.y=O.getFullYear(),u.m=O.getMonth(),u.d=O.getDate()+(u.w+6)%7)}else("W"in u||"U"in u)&&("w"in u||(u.w="u"in u?u.u%7:"W"in u?1:0),Z="Z"in u?he(At(u.y,0,1)).getUTCDay():de(At(u.y,0,1)).getDay(),u.m=0,u.d="W"in u?(u.w+6)%7+u.W*7-(Z+5)%7:u.w+u.U*7-(Z+6)%7);return"Z"in u?(u.H+=u.Z/100|0,u.M+=u.Z%100,he(u)):de(u)}}function T(k,H,P,u){for(var z=0,O=H.length,Z=P.length,G,tt;z=Z)return-1;if(G=H.charCodeAt(z++),G===37){if(G=H.charAt(z++),tt=Q[G in We?H.charAt(z++):G],!tt||(u=tt(k,P,u))<0)return-1}else if(G!=P.charCodeAt(u++))return-1}return u}function $(k,H,P){var u=p.exec(H.slice(P));return u?(k.p=y.get(u[0].toLowerCase()),P+u[0].length):-1}function S(k,H,P){var u=x.exec(H.slice(P));return u?(k.w=B.get(u[0].toLowerCase()),P+u[0].length):-1}function _(k,H,P){var u=Y.exec(H.slice(P));return u?(k.w=b.get(u[0].toLowerCase()),P+u[0].length):-1}function g(k,H,P){var u=E.exec(H.slice(P));return u?(k.m=N.get(u[0].toLowerCase()),P+u[0].length):-1}function D(k,H,P){var u=L.exec(H.slice(P));return u?(k.m=C.get(u[0].toLowerCase()),P+u[0].length):-1}function c(k,H,P){return T(k,e,H,P)}function f(k,H,P){return T(k,n,H,P)}function h(k,H,P){return T(k,r,H,P)}function F(k){return o[k.getDay()]}function i(k){return a[k.getDay()]}function v(k){return M[k.getMonth()]}function l(k){return m[k.getMonth()]}function I(k){return s[+(k.getHours()>=12)]}function A(k){return 1+~~(k.getMonth()/3)}function V(k){return o[k.getUTCDay()]}function X(k){return a[k.getUTCDay()]}function pt(k){return M[k.getUTCMonth()]}function q(k){return m[k.getUTCMonth()]}function at(k){return s[+(k.getUTCHours()>=12)]}function kt(k){return 1+~~(k.getUTCMonth()/3)}return{format:function(k){var H=w(k+="",U);return H.toString=function(){return k},H},parse:function(k){var H=W(k+="",!1);return H.toString=function(){return k},H},utcFormat:function(k){var H=w(k+="",j);return H.toString=function(){return k},H},utcParse:function(k){var H=W(k+="",!0);return H.toString=function(){return k},H}}}var We={"-":"",_:" ",0:"0"},et=/^\s*\d+/,Mr=/^%/,_r=/[\\^$*+?|[\]().{}]/g;function R(t,e,n){var r=t<0?"-":"",s=(r?-t:t)+"",a=s.length;return r+(a[e.toLowerCase(),n]))}function $r(t,e,n){var r=et.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Fr(t,e,n){var r=et.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Yr(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Ar(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Er(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Pe(t,e,n){var r=et.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ne(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ur(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function Lr(t,e,n){var r=et.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Ir(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ze(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Hr(t,e,n){var r=et.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function Re(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Or(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Wr(t,e,n){var r=et.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Pr(t,e,n){var r=et.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Nr(t,e,n){var r=et.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function zr(t,e,n){var r=Mr.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Rr(t,e,n){var r=et.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Zr(t,e,n){var r=et.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Ze(t,e){return R(t.getDate(),e,2)}function jr(t,e){return R(t.getHours(),e,2)}function Vr(t,e){return R(t.getHours()%12||12,e,2)}function Xr(t,e){return R(1+Tt.count(yt(t),t),e,3)}function Tn(t,e){return R(t.getMilliseconds(),e,3)}function Br(t,e){return Tn(t,e)+"000"}function Qr(t,e){return R(t.getMonth()+1,e,2)}function qr(t,e){return R(t.getMinutes(),e,2)}function Gr(t,e){return R(t.getSeconds(),e,2)}function Kr(t){var e=t.getDay();return e===0?7:e}function Jr(t,e){return R(Wt.count(yt(t)-1,t),e,2)}function vn(t){var e=t.getDay();return e>=4||e===0?vt(t):vt.ceil(t)}function ti(t,e){return t=vn(t),R(vt.count(yt(t),t)+(yt(t).getDay()===4),e,2)}function ei(t){return t.getDay()}function ni(t,e){return R(Ht.count(yt(t)-1,t),e,2)}function ri(t,e){return R(t.getFullYear()%100,e,2)}function ii(t,e){return t=vn(t),R(t.getFullYear()%100,e,2)}function si(t,e){return R(t.getFullYear()%1e4,e,4)}function ai(t,e){var n=t.getDay();return t=n>=4||n===0?vt(t):vt.ceil(t),R(t.getFullYear()%1e4,e,4)}function oi(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+R(e/60|0,"0",2)+R(e%60,"0",2)}function je(t,e){return R(t.getUTCDate(),e,2)}function ci(t,e){return R(t.getUTCHours(),e,2)}function li(t,e){return R(t.getUTCHours()%12||12,e,2)}function ui(t,e){return R(1+De.count(bt(t),t),e,3)}function bn(t,e){return R(t.getUTCMilliseconds(),e,3)}function di(t,e){return bn(t,e)+"000"}function hi(t,e){return R(t.getUTCMonth()+1,e,2)}function fi(t,e){return R(t.getUTCMinutes(),e,2)}function gi(t,e){return R(t.getUTCSeconds(),e,2)}function yi(t){var e=t.getUTCDay();return e===0?7:e}function mi(t,e){return R(kn.count(bt(t)-1,t),e,2)}function xn(t){var e=t.getUTCDay();return e>=4||e===0?Ft(t):Ft.ceil(t)}function pi(t,e){return t=xn(t),R(Ft.count(bt(t),t)+(bt(t).getUTCDay()===4),e,2)}function ki(t){return t.getUTCDay()}function Ti(t,e){return R(Gt.count(bt(t)-1,t),e,2)}function vi(t,e){return R(t.getUTCFullYear()%100,e,2)}function bi(t,e){return t=xn(t),R(t.getUTCFullYear()%100,e,2)}function xi(t,e){return R(t.getUTCFullYear()%1e4,e,4)}function wi(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Ft(t):Ft.ceil(t),R(t.getUTCFullYear()%1e4,e,4)}function Di(){return"+0000"}function Ve(){return"%"}function Xe(t){return+t}function Be(t){return Math.floor(+t/1e3)}var Ct,Kt;Ci({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function Ci(t){return Ct=Cr(t),Kt=Ct.format,Ct.parse,Ct.utcFormat,Ct.utcParse,Ct}function Mi(t){return new Date(t)}function _i(t){return t instanceof Date?+t:+new Date(+t)}function wn(t,e,n,r,s,a,o,m,M,p){var y=Vn(),Y=y.invert,b=y.domain,x=p(".%L"),B=p(":%S"),L=p("%I:%M"),C=p("%I %p"),E=p("%a %d"),N=p("%b %d"),U=p("%B"),j=p("%Y");function Q(w){return(M(w)4&&(x+=7),b.add(x,n));return B.diff(L,"week")+1},m.isoWeekday=function(p){return this.$utils().u(p)?this.day()||7:this.day(this.day()%7?p:p-7)};var M=m.startOf;m.startOf=function(p,y){var Y=this.$utils(),b=!!Y.u(y)||y;return Y.p(p)==="isoweek"?b?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):M.bind(this)(p,y)}}})})(ye)),ye.exports}var Yi=Fi();const Ai=xe(Yi);var me={exports:{}},Ei=me.exports,qe;function Ui(){return qe||(qe=1,(function(t,e){(function(n,r){t.exports=r()})(Ei,function(){var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},r=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,s=/\d/,a=/\d\d/,o=/\d\d?/,m=/\d*[^-_:/,()\s\d]+/,M={},p=function(C){return(C=+C)+(C>68?1900:2e3)},y=function(C){return function(E){this[C]=+E}},Y=[/[+-]\d\d:?(\d\d)?|Z/,function(C){(this.zone||(this.zone={})).offset=(function(E){if(!E||E==="Z")return 0;var N=E.match(/([+-]|\d\d)/g),U=60*N[1]+(+N[2]||0);return U===0?0:N[0]==="+"?-U:U})(C)}],b=function(C){var E=M[C];return E&&(E.indexOf?E:E.s.concat(E.f))},x=function(C,E){var N,U=M.meridiem;if(U){for(var j=1;j<=24;j+=1)if(C.indexOf(U(j,0,E))>-1){N=j>12;break}}else N=C===(E?"pm":"PM");return N},B={A:[m,function(C){this.afternoon=x(C,!1)}],a:[m,function(C){this.afternoon=x(C,!0)}],Q:[s,function(C){this.month=3*(C-1)+1}],S:[s,function(C){this.milliseconds=100*+C}],SS:[a,function(C){this.milliseconds=10*+C}],SSS:[/\d{3}/,function(C){this.milliseconds=+C}],s:[o,y("seconds")],ss:[o,y("seconds")],m:[o,y("minutes")],mm:[o,y("minutes")],H:[o,y("hours")],h:[o,y("hours")],HH:[o,y("hours")],hh:[o,y("hours")],D:[o,y("day")],DD:[a,y("day")],Do:[m,function(C){var E=M.ordinal,N=C.match(/\d+/);if(this.day=N[0],E)for(var U=1;U<=31;U+=1)E(U).replace(/\[|\]/g,"")===C&&(this.day=U)}],w:[o,y("week")],ww:[a,y("week")],M:[o,y("month")],MM:[a,y("month")],MMM:[m,function(C){var E=b("months"),N=(b("monthsShort")||E.map(function(U){return U.slice(0,3)})).indexOf(C)+1;if(N<1)throw new Error;this.month=N%12||N}],MMMM:[m,function(C){var E=b("months").indexOf(C)+1;if(E<1)throw new Error;this.month=E%12||E}],Y:[/[+-]?\d+/,y("year")],YY:[a,function(C){this.year=p(C)}],YYYY:[/\d{4}/,y("year")],Z:Y,ZZ:Y};function L(C){var E,N;E=C,N=M&&M.formats;for(var U=(C=E.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(S,_,g){var D=g&&g.toUpperCase();return _||N[g]||n[g]||N[D].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(c,f,h){return f||h.slice(1)})})).match(r),j=U.length,Q=0;Q-1)return new Date((i==="X"?1e3:1)*F);var I=L(i)(F),A=I.year,V=I.month,X=I.day,pt=I.hours,q=I.minutes,at=I.seconds,kt=I.milliseconds,k=I.zone,H=I.week,P=new Date,u=X||(A||V?1:P.getDate()),z=A||P.getFullYear(),O=0;A&&!V||(O=V>0?V-1:P.getMonth());var Z,G=pt||0,tt=q||0,ot=at||0,rt=kt||0;return k?new Date(Date.UTC(z,O,u,G,tt,ot,rt+60*k.offset*1e3)):v?new Date(Date.UTC(z,O,u,G,tt,ot,rt)):(Z=new Date(z,O,u,G,tt,ot,rt),H&&(Z=l(Z).week(H).toDate()),Z)}catch{return new Date("")}})(w,$,W,N),this.init(),D&&D!==!0&&(this.$L=this.locale(D).$L),g&&w!=this.format($)&&(this.$d=new Date("")),M={}}else if($ instanceof Array)for(var c=$.length,f=1;f<=c;f+=1){T[1]=$[f-1];var h=N.apply(this,T);if(h.isValid()){this.$d=h.$d,this.$L=h.$L,this.init();break}f===c&&(this.$d=new Date(""))}else j.call(this,Q)}}})})(me)),me.exports}var Li=Ui();const Ii=xe(Li);var pe={exports:{}},Hi=pe.exports,Ge;function Oi(){return Ge||(Ge=1,(function(t,e){(function(n,r){t.exports=r()})(Hi,function(){return function(n,r){var s=r.prototype,a=s.format;s.format=function(o){var m=this,M=this.$locale();if(!this.isValid())return a.bind(this)(o);var p=this.$utils(),y=(o||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,function(Y){switch(Y){case"Q":return Math.ceil((m.$M+1)/3);case"Do":return M.ordinal(m.$D);case"gggg":return m.weekYear();case"GGGG":return m.isoWeekYear();case"wo":return M.ordinal(m.week(),"W");case"w":case"ww":return p.s(m.week(),Y==="w"?1:2,"0");case"W":case"WW":return p.s(m.isoWeek(),Y==="W"?1:2,"0");case"k":case"kk":return p.s(String(m.$H===0?24:m.$H),Y==="k"?1:2,"0");case"X":return Math.floor(m.$d.getTime()/1e3);case"x":return m.$d.getTime();case"z":return"["+m.offsetName()+"]";case"zzz":return"["+m.offsetName("long")+"]";default:return Y}});return a.bind(this)(y)}}})})(pe)),pe.exports}var Wi=Oi();const Pi=xe(Wi);var ke=(function(){var t=d(function(D,c,f,h){for(f=f||{},h=D.length;h--;f[D[h]]=c);return f},"o"),e=[6,8,10,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,33,35,36,38,40],n=[1,26],r=[1,27],s=[1,28],a=[1,29],o=[1,30],m=[1,31],M=[1,32],p=[1,33],y=[1,34],Y=[1,9],b=[1,10],x=[1,11],B=[1,12],L=[1,13],C=[1,14],E=[1,15],N=[1,16],U=[1,19],j=[1,20],Q=[1,21],w=[1,22],W=[1,23],T=[1,25],$=[1,35],S={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,weekday:11,weekday_monday:12,weekday_tuesday:13,weekday_wednesday:14,weekday_thursday:15,weekday_friday:16,weekday_saturday:17,weekday_sunday:18,weekend:19,weekend_friday:20,weekend_saturday:21,dateFormat:22,inclusiveEndDates:23,topAxis:24,axisFormat:25,tickInterval:26,excludes:27,includes:28,todayMarker:29,title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,section:36,clickStatement:37,taskTxt:38,taskData:39,click:40,callbackname:41,callbackargs:42,href:43,clickStatementDebug:44,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",12:"weekday_monday",13:"weekday_tuesday",14:"weekday_wednesday",15:"weekday_thursday",16:"weekday_friday",17:"weekday_saturday",18:"weekday_sunday",20:"weekend_friday",21:"weekend_saturday",22:"dateFormat",23:"inclusiveEndDates",24:"topAxis",25:"axisFormat",26:"tickInterval",27:"excludes",28:"includes",29:"todayMarker",30:"title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"section",38:"taskTxt",39:"taskData",40:"click",41:"callbackname",42:"callbackargs",43:"href"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[19,1],[19,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,2],[37,2],[37,3],[37,3],[37,4],[37,3],[37,4],[37,2],[44,2],[44,3],[44,3],[44,4],[44,3],[44,4],[44,2]],performAction:d(function(D,c,f,h,F,i,v){var l=i.length-1;switch(F){case 1:return i[l-1];case 2:this.$=[];break;case 3:i[l-1].push(i[l]),this.$=i[l-1];break;case 4:case 5:this.$=i[l];break;case 6:case 7:this.$=[];break;case 8:h.setWeekday("monday");break;case 9:h.setWeekday("tuesday");break;case 10:h.setWeekday("wednesday");break;case 11:h.setWeekday("thursday");break;case 12:h.setWeekday("friday");break;case 13:h.setWeekday("saturday");break;case 14:h.setWeekday("sunday");break;case 15:h.setWeekend("friday");break;case 16:h.setWeekend("saturday");break;case 17:h.setDateFormat(i[l].substr(11)),this.$=i[l].substr(11);break;case 18:h.enableInclusiveEndDates(),this.$=i[l].substr(18);break;case 19:h.TopAxis(),this.$=i[l].substr(8);break;case 20:h.setAxisFormat(i[l].substr(11)),this.$=i[l].substr(11);break;case 21:h.setTickInterval(i[l].substr(13)),this.$=i[l].substr(13);break;case 22:h.setExcludes(i[l].substr(9)),this.$=i[l].substr(9);break;case 23:h.setIncludes(i[l].substr(9)),this.$=i[l].substr(9);break;case 24:h.setTodayMarker(i[l].substr(12)),this.$=i[l].substr(12);break;case 27:h.setDiagramTitle(i[l].substr(6)),this.$=i[l].substr(6);break;case 28:this.$=i[l].trim(),h.setAccTitle(this.$);break;case 29:case 30:this.$=i[l].trim(),h.setAccDescription(this.$);break;case 31:h.addSection(i[l].substr(8)),this.$=i[l].substr(8);break;case 33:h.addTask(i[l-1],i[l]),this.$="task";break;case 34:this.$=i[l-1],h.setClickEvent(i[l-1],i[l],null);break;case 35:this.$=i[l-2],h.setClickEvent(i[l-2],i[l-1],i[l]);break;case 36:this.$=i[l-2],h.setClickEvent(i[l-2],i[l-1],null),h.setLink(i[l-2],i[l]);break;case 37:this.$=i[l-3],h.setClickEvent(i[l-3],i[l-2],i[l-1]),h.setLink(i[l-3],i[l]);break;case 38:this.$=i[l-2],h.setClickEvent(i[l-2],i[l],null),h.setLink(i[l-2],i[l-1]);break;case 39:this.$=i[l-3],h.setClickEvent(i[l-3],i[l-1],i[l]),h.setLink(i[l-3],i[l-2]);break;case 40:this.$=i[l-1],h.setLink(i[l-1],i[l]);break;case 41:case 47:this.$=i[l-1]+" "+i[l];break;case 42:case 43:case 45:this.$=i[l-2]+" "+i[l-1]+" "+i[l];break;case 44:case 46:this.$=i[l-3]+" "+i[l-2]+" "+i[l-1]+" "+i[l];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:17,12:n,13:r,14:s,15:a,16:o,17:m,18:M,19:18,20:p,21:y,22:Y,23:b,24:x,25:B,26:L,27:C,28:E,29:N,30:U,31:j,33:Q,35:w,36:W,37:24,38:T,40:$},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:36,11:17,12:n,13:r,14:s,15:a,16:o,17:m,18:M,19:18,20:p,21:y,22:Y,23:b,24:x,25:B,26:L,27:C,28:E,29:N,30:U,31:j,33:Q,35:w,36:W,37:24,38:T,40:$},t(e,[2,5]),t(e,[2,6]),t(e,[2,17]),t(e,[2,18]),t(e,[2,19]),t(e,[2,20]),t(e,[2,21]),t(e,[2,22]),t(e,[2,23]),t(e,[2,24]),t(e,[2,25]),t(e,[2,26]),t(e,[2,27]),{32:[1,37]},{34:[1,38]},t(e,[2,30]),t(e,[2,31]),t(e,[2,32]),{39:[1,39]},t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),t(e,[2,12]),t(e,[2,13]),t(e,[2,14]),t(e,[2,15]),t(e,[2,16]),{41:[1,40],43:[1,41]},t(e,[2,4]),t(e,[2,28]),t(e,[2,29]),t(e,[2,33]),t(e,[2,34],{42:[1,42],43:[1,43]}),t(e,[2,40],{41:[1,44]}),t(e,[2,35],{43:[1,45]}),t(e,[2,36]),t(e,[2,38],{42:[1,46]}),t(e,[2,37]),t(e,[2,39])],defaultActions:{},parseError:d(function(D,c){if(c.recoverable)this.trace(D);else{var f=new Error(D);throw f.hash=c,f}},"parseError"),parse:d(function(D){var c=this,f=[0],h=[],F=[null],i=[],v=this.table,l="",I=0,A=0,V=2,X=1,pt=i.slice.call(arguments,1),q=Object.create(this.lexer),at={yy:{}};for(var kt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,kt)&&(at.yy[kt]=this.yy[kt]);q.setInput(D,at.yy),at.yy.lexer=q,at.yy.parser=this,typeof q.yylloc>"u"&&(q.yylloc={});var k=q.yylloc;i.push(k);var H=q.options&&q.options.ranges;typeof at.yy.parseError=="function"?this.parseError=at.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function P(it){f.length=f.length-2*it,F.length=F.length-it,i.length=i.length-it}d(P,"popStack");function u(){var it;return it=h.pop()||q.lex()||X,typeof it!="number"&&(it instanceof Array&&(h=it,it=h.pop()),it=c.symbols_[it]||it),it}d(u,"lex");for(var z,O,Z,G,tt={},ot,rt,Le,Rt;;){if(O=f[f.length-1],this.defaultActions[O]?Z=this.defaultActions[O]:((z===null||typeof z>"u")&&(z=u()),Z=v[O]&&v[O][z]),typeof Z>"u"||!Z.length||!Z[0]){var ee="";Rt=[];for(ot in v[O])this.terminals_[ot]&&ot>V&&Rt.push("'"+this.terminals_[ot]+"'");q.showPosition?ee="Parse error on line "+(I+1)+`: `+q.showPosition()+` Expecting `+Rt.join(", ")+", got '"+(this.terminals_[z]||z)+"'":ee="Parse error on line "+(I+1)+": Unexpected "+(z==X?"end of input":"'"+(this.terminals_[z]||z)+"'"),this.parseError(ee,{text:q.match,token:this.terminals_[z]||z,line:q.yylineno,loc:k,expected:Rt})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+O+", token: "+z);switch(Z[0]){case 1:f.push(z),F.push(q.yytext),i.push(q.yylloc),f.push(Z[1]),z=null,A=q.yyleng,l=q.yytext,I=q.yylineno,k=q.yylloc;break;case 2:if(rt=this.productions_[Z[1]][1],tt.$=F[F.length-rt],tt._$={first_line:i[i.length-(rt||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(rt||1)].first_column,last_column:i[i.length-1].last_column},H&&(tt._$.range=[i[i.length-(rt||1)].range[0],i[i.length-1].range[1]]),G=this.performAction.apply(tt,[l,A,I,at.yy,Z[1],F,i].concat(pt)),typeof G<"u")return G;rt&&(f=f.slice(0,-1*rt*2),F=F.slice(0,-1*rt),i=i.slice(0,-1*rt)),f.push(this.productions_[Z[1]][0]),F.push(tt.$),i.push(tt._$),Le=v[f[f.length-2]][f[f.length-1]],f.push(Le);break;case 3:return!0}}return!0},"parse")},_=(function(){var D={EOF:1,parseError:d(function(c,f){if(this.yy.parser)this.yy.parser.parseError(c,f);else throw new Error(c)},"parseError"),setInput:d(function(c,f){return this.yy=f||this.yy||{},this._input=c,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:d(function(){var c=this._input[0];this.yytext+=c,this.yyleng++,this.offset++,this.match+=c,this.matched+=c;var f=c.match(/(?:\r\n?|\n).*/g);return f?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),c},"input"),unput:d(function(c){var f=c.length,h=c.split(/(?:\r\n?|\n)/g);this._input=c+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-f),this.offset-=f;var F=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),h.length-1&&(this.yylineno-=h.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:h?(h.length===F.length?this.yylloc.first_column:0)+F[F.length-h.length].length-h[0].length:this.yylloc.first_column-f},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-f]),this.yyleng=this.yytext.length,this},"unput"),more:d(function(){return this._more=!0,this},"more"),reject:d(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:d(function(c){this.unput(this.match.slice(c))},"less"),pastInput:d(function(){var c=this.matched.substr(0,this.matched.length-this.match.length);return(c.length>20?"...":"")+c.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:d(function(){var c=this.match;return c.length<20&&(c+=this._input.substr(0,20-c.length)),(c.substr(0,20)+(c.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:d(function(){var c=this.pastInput(),f=new Array(c.length+1).join("-");return c+this.upcomingInput()+` diff --git a/assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.adA6Yltn.js b/assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.C7_PT9aX.js similarity index 97% rename from assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.adA6Yltn.js rename to assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.C7_PT9aX.js index ab36cbc..d976218 100644 --- a/assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.adA6Yltn.js +++ b/assets/chunks/gitGraphDiagram-GW3U2K7C-LbRyzza8-61-s67VF.C7_PT9aX.js @@ -1,4 +1,4 @@ -import{i as K}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js";import{e as Y}from"./chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js";import{q as h,ao as U,an as V,a5 as Q,a6 as X,a7 as J,a8 as Z,O as u,A as tt,a9 as et,am as rt,az as ot,at as st,ag as E,aA as nt,aB as at,aC as ct,aD as it}from"../app.DiEjJ8gz.js";import{I as dt}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";var x={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},ht=ct.gitGraph,P=h(()=>nt({...ht,...at().gitGraph}),"getConfig"),i=new Y(()=>{const e=P(),t=e.mainBranchName,s=e.mainBranchOrder;return{mainBranchName:t,commits:new Map,head:null,branchConfig:new Map([[t,{name:t,order:s}]]),branches:new Map([[t,null]]),currBranch:t,direction:"LR",seq:0,options:{}}});function O(){return it({length:7})}h(O,"getID");function D(e,t){const s=Object.create(null);return e.reduce((n,r)=>{const o=t(r);return s[o]||(s[o]=!0,n.push(r)),n},[])}h(D,"uniqBy");var mt=h(function(e){i.records.direction=e},"setDirection"),$t=h(function(e){u.debug("options str",e),e=e?.trim(),e=e||"{}";try{i.records.options=JSON.parse(e)}catch(t){u.error("error while parsing gitGraph options",t.message)}},"setOptions"),lt=h(function(){return i.records.options},"getOptions"),gt=h(function(e){let t=e.msg,s=e.id;const n=e.type;let r=e.tags;u.info("commit",t,s,n,r),u.debug("Entering commit:",t,s,n,r);const o=P();s=E.sanitizeText(s,o),t=E.sanitizeText(t,o),r=r?.map(a=>E.sanitizeText(a,o));const d={id:s||i.records.seq+"-"+O(),message:t,seq:i.records.seq++,type:n??x.NORMAL,tags:r??[],parents:i.records.head==null?[]:[i.records.head.id],branch:i.records.currBranch};i.records.head=d,u.info("main branch",o.mainBranchName),i.records.commits.has(d.id)&&u.warn(`Commit ID ${d.id} already exists`),i.records.commits.set(d.id,d),i.records.branches.set(i.records.currBranch,d.id),u.debug("in pushCommit "+d.id)},"commit"),yt=h(function(e){let t=e.name;const s=e.order;if(t=E.sanitizeText(t,P()),i.records.branches.has(t))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${t}")`);i.records.branches.set(t,i.records.head!=null?i.records.head.id:null),i.records.branchConfig.set(t,{name:t,order:s}),N(t),u.debug("in createBranch")},"branch"),pt=h(e=>{let t=e.branch,s=e.id;const n=e.type,r=e.tags,o=P();t=E.sanitizeText(t,o),s&&(s=E.sanitizeText(s,o));const d=i.records.branches.get(i.records.currBranch),a=i.records.branches.get(t),l=d?i.records.commits.get(d):void 0,m=a?i.records.commits.get(a):void 0;if(l&&m&&l.branch===t)throw new Error(`Cannot merge branch '${t}' into itself.`);if(i.records.currBranch===t){const c=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["branch abc"]},c}if(l===void 0||!l){const c=new Error(`Incorrect usage of "merge". Current branch (${i.records.currBranch})has no commits`);throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["commit"]},c}if(!i.records.branches.has(t)){const c=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:[`branch ${t}`]},c}if(m===void 0||!m){const c=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:['"commit"']},c}if(l===m){const c=new Error('Incorrect usage of "merge". Both branches have same head');throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["branch abc"]},c}if(s&&i.records.commits.has(s)){const c=new Error('Incorrect usage of "merge". Commit with id:'+s+" already exists, use different custom id");throw c.hash={text:`merge ${t} ${s} ${n} ${r?.join(" ")}`,token:`merge ${t} ${s} ${n} ${r?.join(" ")}`,expected:[`merge ${t} ${s}_UNIQUE ${n} ${r?.join(" ")}`]},c}const $=a||"",g={id:s||`${i.records.seq}-${O()}`,message:`merged branch ${t} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,$],branch:i.records.currBranch,type:x.MERGE,customType:n,customId:!!s,tags:r??[]};i.records.head=g,i.records.commits.set(g.id,g),i.records.branches.set(i.records.currBranch,g.id),u.debug(i.records.branches),u.debug("in mergeBranch")},"merge"),xt=h(function(e){let t=e.id,s=e.targetId,n=e.tags,r=e.parent;u.debug("Entering cherryPick:",t,s,n);const o=P();if(t=E.sanitizeText(t,o),s=E.sanitizeText(s,o),n=n?.map(l=>E.sanitizeText(l,o)),r=E.sanitizeText(r,o),!t||!i.records.commits.has(t)){const l=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw l.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},l}const d=i.records.commits.get(t);if(d===void 0||!d)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(r&&!(Array.isArray(d.parents)&&d.parents.includes(r)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");const a=d.branch;if(d.type===x.MERGE&&!r)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!s||!i.records.commits.has(s)){if(a===i.records.currBranch){const g=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw g.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},g}const l=i.records.branches.get(i.records.currBranch);if(l===void 0||!l){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},g}const m=i.records.commits.get(l);if(m===void 0||!m){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},g}const $={id:i.records.seq+"-"+O(),message:`cherry-picked ${d?.message} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,d.id],branch:i.records.currBranch,type:x.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${d.id}${d.type===x.MERGE?`|parent:${r}`:""}`]};i.records.head=$,i.records.commits.set($.id,$),i.records.branches.set(i.records.currBranch,$.id),u.debug(i.records.branches),u.debug("in cherryPick")}},"cherryPick"),N=h(function(e){if(e=E.sanitizeText(e,P()),i.records.branches.has(e)){i.records.currBranch=e;const t=i.records.branches.get(i.records.currBranch);t===void 0||!t?i.records.head=null:i.records.head=i.records.commits.get(t)??null}else{const t=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${e}")`);throw t.hash={text:`checkout ${e}`,token:`checkout ${e}`,expected:[`branch ${e}`]},t}},"checkout");function z(e,t,s){const n=e.indexOf(t);n===-1?e.push(s):e.splice(n,1,s)}h(z,"upsert");function H(e){const t=e.reduce((r,o)=>r.seq>o.seq?r:o,e[0]);let s="";e.forEach(function(r){r===t?s+=" *":s+=" |"});const n=[s,t.id,t.seq];for(const r in i.records.branches)i.records.branches.get(r)===t.id&&n.push(r);if(u.debug(n.join(" ")),t.parents&&t.parents.length==2&&t.parents[0]&&t.parents[1]){const r=i.records.commits.get(t.parents[0]);z(e,t,r),t.parents[1]&&e.push(i.records.commits.get(t.parents[1]))}else{if(t.parents.length==0)return;if(t.parents[0]){const r=i.records.commits.get(t.parents[0]);z(e,t,r)}}e=D(e,r=>r.id),H(e)}h(H,"prettyPrintCommitHistory");var ft=h(function(){u.debug(i.records.commits);const e=W()[0];H([e])},"prettyPrint"),ut=h(function(){i.reset(),st()},"clear"),bt=h(function(){return[...i.records.branchConfig.values()].map((e,t)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${t}`)}).sort((e,t)=>(e.order??0)-(t.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),wt=h(function(){return i.records.branches},"getBranches"),Bt=h(function(){return i.records.commits},"getCommits"),W=h(function(){const e=[...i.records.commits.values()];return e.forEach(function(t){u.debug(t.id)}),e.sort((t,s)=>t.seq-s.seq),e},"getCommitsArray"),Et=h(function(){return i.records.currBranch},"getCurrentBranch"),Ct=h(function(){return i.records.direction},"getDirection"),kt=h(function(){return i.records.head},"getHead"),j={commitType:x,getConfig:P,setDirection:mt,setOptions:$t,getOptions:lt,commit:gt,branch:yt,merge:pt,cherryPick:xt,checkout:N,prettyPrint:ft,clear:ut,getBranchesAsObjArray:bt,getBranches:wt,getCommits:Bt,getCommitsArray:W,getCurrentBranch:Et,getDirection:Ct,getHead:kt,setAccTitle:Z,getAccTitle:J,getAccDescription:X,setAccDescription:Q,setDiagramTitle:V,getDiagramTitle:U},Lt=h((e,t)=>{K(e,t),e.dir&&t.setDirection(e.dir);for(const s of e.statements)Tt(s,t)},"populate"),Tt=h((e,t)=>{const s={Commit:h(n=>t.commit(Mt(n)),"Commit"),Branch:h(n=>t.branch(vt(n)),"Branch"),Merge:h(n=>t.merge(Pt(n)),"Merge"),Checkout:h(n=>t.checkout(Rt(n)),"Checkout"),CherryPicking:h(n=>t.cherryPick(At(n)),"CherryPicking")}[e.$type];s?s(e):u.error(`Unknown statement type: ${e.$type}`)},"parseStatement"),Mt=h(e=>({id:e.id,msg:e.message??"",type:e.type!==void 0?x[e.type]:x.NORMAL,tags:e.tags??void 0}),"parseCommit"),vt=h(e=>({name:e.name,order:e.order??0}),"parseBranch"),Pt=h(e=>({branch:e.branch,id:e.id??"",type:e.type!==void 0?x[e.type]:void 0,tags:e.tags??void 0}),"parseMerge"),Rt=h(e=>e.branch,"parseCheckout"),At=h(e=>({id:e.id,targetId:"",tags:e.tags?.length===0?void 0:e.tags,parent:e.parent}),"parseCherryPicking"),It={parse:h(async e=>{const t=await dt("gitGraph",e);u.debug(t),Lt(t,j)},"parse")},Gt=tt(),B=Gt?.gitGraph,T=10,M=40,C=4,k=2,v=8,b=new Map,w=new Map,I=30,R=new Map,G=[],L=0,y="LR",Ot=h(()=>{b.clear(),w.clear(),R.clear(),L=0,G=[],y="LR"},"clear"),_=h(e=>{const t=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof e=="string"?e.split(/\\n|\n|/gi):e).forEach(s=>{const n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),n.setAttribute("class","row"),n.textContent=s.trim(),t.appendChild(n)}),t},"drawText"),F=h(e=>{let t,s,n;return y==="BT"?(s=h((r,o)=>r<=o,"comparisonFunc"),n=1/0):(s=h((r,o)=>r>=o,"comparisonFunc"),n=0),e.forEach(r=>{const o=y==="TB"||y=="BT"?w.get(r)?.y:w.get(r)?.x;o!==void 0&&s(o,n)&&(t=r,n=o)}),t},"findClosestParent"),qt=h(e=>{let t="",s=1/0;return e.forEach(n=>{const r=w.get(n).y;r<=s&&(t=n,s=r)}),t||void 0},"findClosestParentBT"),zt=h((e,t,s)=>{let n=s,r=s;const o=[];e.forEach(d=>{const a=t.get(d);if(!a)throw new Error(`Commit not found for key ${d}`);a.parents.length?(n=St(a),r=Math.max(n,r)):o.push(a),Dt(a,n)}),n=r,o.forEach(d=>{Nt(d,n,s)}),e.forEach(d=>{const a=t.get(d);if(a?.parents.length){const l=qt(a.parents);n=w.get(l).y-M,n<=r&&(r=n);const m=b.get(a.branch).pos,$=n-T;w.set(a.id,{x:m,y:$})}})},"setParallelBTPos"),Ht=h(e=>{const t=F(e.parents.filter(n=>n!==null));if(!t)throw new Error(`Closest parent not found for commit ${e.id}`);const s=w.get(t)?.y;if(s===void 0)throw new Error(`Closest parent position not found for commit ${e.id}`);return s},"findClosestParentPos"),St=h(e=>Ht(e)+M,"calculateCommitPosition"),Dt=h((e,t)=>{const s=b.get(e.branch);if(!s)throw new Error(`Branch not found for commit ${e.id}`);const n=s.pos,r=t+T;return w.set(e.id,{x:n,y:r}),{x:n,y:r}},"setCommitPosition"),Nt=h((e,t,s)=>{const n=b.get(e.branch);if(!n)throw new Error(`Branch not found for commit ${e.id}`);const r=t+s,o=n.pos;w.set(e.id,{x:o,y:r})},"setRootPosition"),Wt=h((e,t,s,n,r,o)=>{if(o===x.HIGHLIGHT)e.append("rect").attr("x",s.x-10).attr("y",s.y-10).attr("width",20).attr("height",20).attr("class",`commit ${t.id} commit-highlight${r%v} ${n}-outer`),e.append("rect").attr("x",s.x-6).attr("y",s.y-6).attr("width",12).attr("height",12).attr("class",`commit ${t.id} commit${r%v} ${n}-inner`);else if(o===x.CHERRY_PICK)e.append("circle").attr("cx",s.x).attr("cy",s.y).attr("r",10).attr("class",`commit ${t.id} ${n}`),e.append("circle").attr("cx",s.x-3).attr("cy",s.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${t.id} ${n}`),e.append("circle").attr("cx",s.x+3).attr("cy",s.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${t.id} ${n}`),e.append("line").attr("x1",s.x+3).attr("y1",s.y+1).attr("x2",s.x).attr("y2",s.y-5).attr("stroke","#fff").attr("class",`commit ${t.id} ${n}`),e.append("line").attr("x1",s.x-3).attr("y1",s.y+1).attr("x2",s.x).attr("y2",s.y-5).attr("stroke","#fff").attr("class",`commit ${t.id} ${n}`);else{const d=e.append("circle");if(d.attr("cx",s.x),d.attr("cy",s.y),d.attr("r",t.type===x.MERGE?9:10),d.attr("class",`commit ${t.id} commit${r%v}`),o===x.MERGE){const a=e.append("circle");a.attr("cx",s.x),a.attr("cy",s.y),a.attr("r",6),a.attr("class",`commit ${n} ${t.id} commit${r%v}`)}o===x.REVERSE&&e.append("path").attr("d",`M ${s.x-5},${s.y-5}L${s.x+5},${s.y+5}M${s.x-5},${s.y+5}L${s.x+5},${s.y-5}`).attr("class",`commit ${n} ${t.id} commit${r%v}`)}},"drawCommitBullet"),jt=h((e,t,s,n)=>{if(t.type!==x.CHERRY_PICK&&(t.customId&&t.type===x.MERGE||t.type!==x.MERGE)&&B?.showCommitLabel){const r=e.append("g"),o=r.insert("rect").attr("class","commit-label-bkg"),d=r.append("text").attr("x",n).attr("y",s.y+25).attr("class","commit-label").text(t.id),a=d.node()?.getBBox();if(a&&(o.attr("x",s.posWithOffset-a.width/2-k).attr("y",s.y+13.5).attr("width",a.width+2*k).attr("height",a.height+2*k),y==="TB"||y==="BT"?(o.attr("x",s.x-(a.width+4*C+5)).attr("y",s.y-12),d.attr("x",s.x-(a.width+4*C)).attr("y",s.y+a.height-12)):d.attr("x",s.posWithOffset-a.width/2),B.rotateCommitLabel))if(y==="TB"||y==="BT")d.attr("transform","rotate(-45, "+s.x+", "+s.y+")"),o.attr("transform","rotate(-45, "+s.x+", "+s.y+")");else{const l=-7.5-(a.width+10)/25*9.5,m=10+a.width/25*8.5;r.attr("transform","translate("+l+", "+m+") rotate(-45, "+n+", "+s.y+")")}}},"drawCommitLabel"),_t=h((e,t,s,n)=>{if(t.tags.length>0){let r=0,o=0,d=0;const a=[];for(const l of t.tags.reverse()){const m=e.insert("polygon"),$=e.append("circle"),g=e.append("text").attr("y",s.y-16-r).attr("class","tag-label").text(l),c=g.node()?.getBBox();if(!c)throw new Error("Tag bbox not found");o=Math.max(o,c.width),d=Math.max(d,c.height),g.attr("x",s.posWithOffset-c.width/2),a.push({tag:g,hole:$,rect:m,yOffset:r}),r+=20}for(const{tag:l,hole:m,rect:$,yOffset:g}of a){const c=d/2,f=s.y-19.2-g;if($.attr("class","tag-label-bkg").attr("points",` +import{i as K}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js";import{e as Y}from"./chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.CZC4Gt28.js";import{q as h,ao as U,an as V,a5 as Q,a6 as X,a7 as J,a8 as Z,O as u,A as tt,a9 as et,am as rt,az as ot,at as st,ag as E,aA as nt,aB as at,aC as ct,aD as it}from"../app.DfYWW83x.js";import{I as dt}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";var x={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},ht=ct.gitGraph,P=h(()=>nt({...ht,...at().gitGraph}),"getConfig"),i=new Y(()=>{const e=P(),t=e.mainBranchName,s=e.mainBranchOrder;return{mainBranchName:t,commits:new Map,head:null,branchConfig:new Map([[t,{name:t,order:s}]]),branches:new Map([[t,null]]),currBranch:t,direction:"LR",seq:0,options:{}}});function O(){return it({length:7})}h(O,"getID");function D(e,t){const s=Object.create(null);return e.reduce((n,r)=>{const o=t(r);return s[o]||(s[o]=!0,n.push(r)),n},[])}h(D,"uniqBy");var mt=h(function(e){i.records.direction=e},"setDirection"),$t=h(function(e){u.debug("options str",e),e=e?.trim(),e=e||"{}";try{i.records.options=JSON.parse(e)}catch(t){u.error("error while parsing gitGraph options",t.message)}},"setOptions"),lt=h(function(){return i.records.options},"getOptions"),gt=h(function(e){let t=e.msg,s=e.id;const n=e.type;let r=e.tags;u.info("commit",t,s,n,r),u.debug("Entering commit:",t,s,n,r);const o=P();s=E.sanitizeText(s,o),t=E.sanitizeText(t,o),r=r?.map(a=>E.sanitizeText(a,o));const d={id:s||i.records.seq+"-"+O(),message:t,seq:i.records.seq++,type:n??x.NORMAL,tags:r??[],parents:i.records.head==null?[]:[i.records.head.id],branch:i.records.currBranch};i.records.head=d,u.info("main branch",o.mainBranchName),i.records.commits.has(d.id)&&u.warn(`Commit ID ${d.id} already exists`),i.records.commits.set(d.id,d),i.records.branches.set(i.records.currBranch,d.id),u.debug("in pushCommit "+d.id)},"commit"),yt=h(function(e){let t=e.name;const s=e.order;if(t=E.sanitizeText(t,P()),i.records.branches.has(t))throw new Error(`Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ${t}")`);i.records.branches.set(t,i.records.head!=null?i.records.head.id:null),i.records.branchConfig.set(t,{name:t,order:s}),N(t),u.debug("in createBranch")},"branch"),pt=h(e=>{let t=e.branch,s=e.id;const n=e.type,r=e.tags,o=P();t=E.sanitizeText(t,o),s&&(s=E.sanitizeText(s,o));const d=i.records.branches.get(i.records.currBranch),a=i.records.branches.get(t),l=d?i.records.commits.get(d):void 0,m=a?i.records.commits.get(a):void 0;if(l&&m&&l.branch===t)throw new Error(`Cannot merge branch '${t}' into itself.`);if(i.records.currBranch===t){const c=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["branch abc"]},c}if(l===void 0||!l){const c=new Error(`Incorrect usage of "merge". Current branch (${i.records.currBranch})has no commits`);throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["commit"]},c}if(!i.records.branches.has(t)){const c=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:[`branch ${t}`]},c}if(m===void 0||!m){const c=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:['"commit"']},c}if(l===m){const c=new Error('Incorrect usage of "merge". Both branches have same head');throw c.hash={text:`merge ${t}`,token:`merge ${t}`,expected:["branch abc"]},c}if(s&&i.records.commits.has(s)){const c=new Error('Incorrect usage of "merge". Commit with id:'+s+" already exists, use different custom id");throw c.hash={text:`merge ${t} ${s} ${n} ${r?.join(" ")}`,token:`merge ${t} ${s} ${n} ${r?.join(" ")}`,expected:[`merge ${t} ${s}_UNIQUE ${n} ${r?.join(" ")}`]},c}const $=a||"",g={id:s||`${i.records.seq}-${O()}`,message:`merged branch ${t} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,$],branch:i.records.currBranch,type:x.MERGE,customType:n,customId:!!s,tags:r??[]};i.records.head=g,i.records.commits.set(g.id,g),i.records.branches.set(i.records.currBranch,g.id),u.debug(i.records.branches),u.debug("in mergeBranch")},"merge"),xt=h(function(e){let t=e.id,s=e.targetId,n=e.tags,r=e.parent;u.debug("Entering cherryPick:",t,s,n);const o=P();if(t=E.sanitizeText(t,o),s=E.sanitizeText(s,o),n=n?.map(l=>E.sanitizeText(l,o)),r=E.sanitizeText(r,o),!t||!i.records.commits.has(t)){const l=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw l.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},l}const d=i.records.commits.get(t);if(d===void 0||!d)throw new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');if(r&&!(Array.isArray(d.parents)&&d.parents.includes(r)))throw new Error("Invalid operation: The specified parent commit is not an immediate parent of the cherry-picked commit.");const a=d.branch;if(d.type===x.MERGE&&!r)throw new Error("Incorrect usage of cherry-pick: If the source commit is a merge commit, an immediate parent commit must be specified.");if(!s||!i.records.commits.has(s)){if(a===i.records.currBranch){const g=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw g.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},g}const l=i.records.branches.get(i.records.currBranch);if(l===void 0||!l){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},g}const m=i.records.commits.get(l);if(m===void 0||!m){const g=new Error(`Incorrect usage of "cherry-pick". Current branch (${i.records.currBranch})has no commits`);throw g.hash={text:`cherryPick ${t} ${s}`,token:`cherryPick ${t} ${s}`,expected:["cherry-pick abc"]},g}const $={id:i.records.seq+"-"+O(),message:`cherry-picked ${d?.message} into ${i.records.currBranch}`,seq:i.records.seq++,parents:i.records.head==null?[]:[i.records.head.id,d.id],branch:i.records.currBranch,type:x.CHERRY_PICK,tags:n?n.filter(Boolean):[`cherry-pick:${d.id}${d.type===x.MERGE?`|parent:${r}`:""}`]};i.records.head=$,i.records.commits.set($.id,$),i.records.branches.set(i.records.currBranch,$.id),u.debug(i.records.branches),u.debug("in cherryPick")}},"cherryPick"),N=h(function(e){if(e=E.sanitizeText(e,P()),i.records.branches.has(e)){i.records.currBranch=e;const t=i.records.branches.get(i.records.currBranch);t===void 0||!t?i.records.head=null:i.records.head=i.records.commits.get(t)??null}else{const t=new Error(`Trying to checkout branch which is not yet created. (Help try using "branch ${e}")`);throw t.hash={text:`checkout ${e}`,token:`checkout ${e}`,expected:[`branch ${e}`]},t}},"checkout");function z(e,t,s){const n=e.indexOf(t);n===-1?e.push(s):e.splice(n,1,s)}h(z,"upsert");function H(e){const t=e.reduce((r,o)=>r.seq>o.seq?r:o,e[0]);let s="";e.forEach(function(r){r===t?s+=" *":s+=" |"});const n=[s,t.id,t.seq];for(const r in i.records.branches)i.records.branches.get(r)===t.id&&n.push(r);if(u.debug(n.join(" ")),t.parents&&t.parents.length==2&&t.parents[0]&&t.parents[1]){const r=i.records.commits.get(t.parents[0]);z(e,t,r),t.parents[1]&&e.push(i.records.commits.get(t.parents[1]))}else{if(t.parents.length==0)return;if(t.parents[0]){const r=i.records.commits.get(t.parents[0]);z(e,t,r)}}e=D(e,r=>r.id),H(e)}h(H,"prettyPrintCommitHistory");var ft=h(function(){u.debug(i.records.commits);const e=W()[0];H([e])},"prettyPrint"),ut=h(function(){i.reset(),st()},"clear"),bt=h(function(){return[...i.records.branchConfig.values()].map((e,t)=>e.order!==null&&e.order!==void 0?e:{...e,order:parseFloat(`0.${t}`)}).sort((e,t)=>(e.order??0)-(t.order??0)).map(({name:e})=>({name:e}))},"getBranchesAsObjArray"),wt=h(function(){return i.records.branches},"getBranches"),Bt=h(function(){return i.records.commits},"getCommits"),W=h(function(){const e=[...i.records.commits.values()];return e.forEach(function(t){u.debug(t.id)}),e.sort((t,s)=>t.seq-s.seq),e},"getCommitsArray"),Et=h(function(){return i.records.currBranch},"getCurrentBranch"),Ct=h(function(){return i.records.direction},"getDirection"),kt=h(function(){return i.records.head},"getHead"),j={commitType:x,getConfig:P,setDirection:mt,setOptions:$t,getOptions:lt,commit:gt,branch:yt,merge:pt,cherryPick:xt,checkout:N,prettyPrint:ft,clear:ut,getBranchesAsObjArray:bt,getBranches:wt,getCommits:Bt,getCommitsArray:W,getCurrentBranch:Et,getDirection:Ct,getHead:kt,setAccTitle:Z,getAccTitle:J,getAccDescription:X,setAccDescription:Q,setDiagramTitle:V,getDiagramTitle:U},Lt=h((e,t)=>{K(e,t),e.dir&&t.setDirection(e.dir);for(const s of e.statements)Tt(s,t)},"populate"),Tt=h((e,t)=>{const s={Commit:h(n=>t.commit(Mt(n)),"Commit"),Branch:h(n=>t.branch(vt(n)),"Branch"),Merge:h(n=>t.merge(Pt(n)),"Merge"),Checkout:h(n=>t.checkout(Rt(n)),"Checkout"),CherryPicking:h(n=>t.cherryPick(At(n)),"CherryPicking")}[e.$type];s?s(e):u.error(`Unknown statement type: ${e.$type}`)},"parseStatement"),Mt=h(e=>({id:e.id,msg:e.message??"",type:e.type!==void 0?x[e.type]:x.NORMAL,tags:e.tags??void 0}),"parseCommit"),vt=h(e=>({name:e.name,order:e.order??0}),"parseBranch"),Pt=h(e=>({branch:e.branch,id:e.id??"",type:e.type!==void 0?x[e.type]:void 0,tags:e.tags??void 0}),"parseMerge"),Rt=h(e=>e.branch,"parseCheckout"),At=h(e=>({id:e.id,targetId:"",tags:e.tags?.length===0?void 0:e.tags,parent:e.parent}),"parseCherryPicking"),It={parse:h(async e=>{const t=await dt("gitGraph",e);u.debug(t),Lt(t,j)},"parse")},Gt=tt(),B=Gt?.gitGraph,T=10,M=40,C=4,k=2,v=8,b=new Map,w=new Map,I=30,R=new Map,G=[],L=0,y="LR",Ot=h(()=>{b.clear(),w.clear(),R.clear(),L=0,G=[],y="LR"},"clear"),_=h(e=>{const t=document.createElementNS("http://www.w3.org/2000/svg","text");return(typeof e=="string"?e.split(/\\n|\n|/gi):e).forEach(s=>{const n=document.createElementNS("http://www.w3.org/2000/svg","tspan");n.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),n.setAttribute("dy","1em"),n.setAttribute("x","0"),n.setAttribute("class","row"),n.textContent=s.trim(),t.appendChild(n)}),t},"drawText"),F=h(e=>{let t,s,n;return y==="BT"?(s=h((r,o)=>r<=o,"comparisonFunc"),n=1/0):(s=h((r,o)=>r>=o,"comparisonFunc"),n=0),e.forEach(r=>{const o=y==="TB"||y=="BT"?w.get(r)?.y:w.get(r)?.x;o!==void 0&&s(o,n)&&(t=r,n=o)}),t},"findClosestParent"),qt=h(e=>{let t="",s=1/0;return e.forEach(n=>{const r=w.get(n).y;r<=s&&(t=n,s=r)}),t||void 0},"findClosestParentBT"),zt=h((e,t,s)=>{let n=s,r=s;const o=[];e.forEach(d=>{const a=t.get(d);if(!a)throw new Error(`Commit not found for key ${d}`);a.parents.length?(n=St(a),r=Math.max(n,r)):o.push(a),Dt(a,n)}),n=r,o.forEach(d=>{Nt(d,n,s)}),e.forEach(d=>{const a=t.get(d);if(a?.parents.length){const l=qt(a.parents);n=w.get(l).y-M,n<=r&&(r=n);const m=b.get(a.branch).pos,$=n-T;w.set(a.id,{x:m,y:$})}})},"setParallelBTPos"),Ht=h(e=>{const t=F(e.parents.filter(n=>n!==null));if(!t)throw new Error(`Closest parent not found for commit ${e.id}`);const s=w.get(t)?.y;if(s===void 0)throw new Error(`Closest parent position not found for commit ${e.id}`);return s},"findClosestParentPos"),St=h(e=>Ht(e)+M,"calculateCommitPosition"),Dt=h((e,t)=>{const s=b.get(e.branch);if(!s)throw new Error(`Branch not found for commit ${e.id}`);const n=s.pos,r=t+T;return w.set(e.id,{x:n,y:r}),{x:n,y:r}},"setCommitPosition"),Nt=h((e,t,s)=>{const n=b.get(e.branch);if(!n)throw new Error(`Branch not found for commit ${e.id}`);const r=t+s,o=n.pos;w.set(e.id,{x:o,y:r})},"setRootPosition"),Wt=h((e,t,s,n,r,o)=>{if(o===x.HIGHLIGHT)e.append("rect").attr("x",s.x-10).attr("y",s.y-10).attr("width",20).attr("height",20).attr("class",`commit ${t.id} commit-highlight${r%v} ${n}-outer`),e.append("rect").attr("x",s.x-6).attr("y",s.y-6).attr("width",12).attr("height",12).attr("class",`commit ${t.id} commit${r%v} ${n}-inner`);else if(o===x.CHERRY_PICK)e.append("circle").attr("cx",s.x).attr("cy",s.y).attr("r",10).attr("class",`commit ${t.id} ${n}`),e.append("circle").attr("cx",s.x-3).attr("cy",s.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${t.id} ${n}`),e.append("circle").attr("cx",s.x+3).attr("cy",s.y+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${t.id} ${n}`),e.append("line").attr("x1",s.x+3).attr("y1",s.y+1).attr("x2",s.x).attr("y2",s.y-5).attr("stroke","#fff").attr("class",`commit ${t.id} ${n}`),e.append("line").attr("x1",s.x-3).attr("y1",s.y+1).attr("x2",s.x).attr("y2",s.y-5).attr("stroke","#fff").attr("class",`commit ${t.id} ${n}`);else{const d=e.append("circle");if(d.attr("cx",s.x),d.attr("cy",s.y),d.attr("r",t.type===x.MERGE?9:10),d.attr("class",`commit ${t.id} commit${r%v}`),o===x.MERGE){const a=e.append("circle");a.attr("cx",s.x),a.attr("cy",s.y),a.attr("r",6),a.attr("class",`commit ${n} ${t.id} commit${r%v}`)}o===x.REVERSE&&e.append("path").attr("d",`M ${s.x-5},${s.y-5}L${s.x+5},${s.y+5}M${s.x-5},${s.y+5}L${s.x+5},${s.y-5}`).attr("class",`commit ${n} ${t.id} commit${r%v}`)}},"drawCommitBullet"),jt=h((e,t,s,n)=>{if(t.type!==x.CHERRY_PICK&&(t.customId&&t.type===x.MERGE||t.type!==x.MERGE)&&B?.showCommitLabel){const r=e.append("g"),o=r.insert("rect").attr("class","commit-label-bkg"),d=r.append("text").attr("x",n).attr("y",s.y+25).attr("class","commit-label").text(t.id),a=d.node()?.getBBox();if(a&&(o.attr("x",s.posWithOffset-a.width/2-k).attr("y",s.y+13.5).attr("width",a.width+2*k).attr("height",a.height+2*k),y==="TB"||y==="BT"?(o.attr("x",s.x-(a.width+4*C+5)).attr("y",s.y-12),d.attr("x",s.x-(a.width+4*C)).attr("y",s.y+a.height-12)):d.attr("x",s.posWithOffset-a.width/2),B.rotateCommitLabel))if(y==="TB"||y==="BT")d.attr("transform","rotate(-45, "+s.x+", "+s.y+")"),o.attr("transform","rotate(-45, "+s.x+", "+s.y+")");else{const l=-7.5-(a.width+10)/25*9.5,m=10+a.width/25*8.5;r.attr("transform","translate("+l+", "+m+") rotate(-45, "+n+", "+s.y+")")}}},"drawCommitLabel"),_t=h((e,t,s,n)=>{if(t.tags.length>0){let r=0,o=0,d=0;const a=[];for(const l of t.tags.reverse()){const m=e.insert("polygon"),$=e.append("circle"),g=e.append("text").attr("y",s.y-16-r).attr("class","tag-label").text(l),c=g.node()?.getBBox();if(!c)throw new Error("Tag bbox not found");o=Math.max(o,c.width),d=Math.max(d,c.height),g.attr("x",s.posWithOffset-c.width/2),a.push({tag:g,hole:$,rect:m,yOffset:r}),r+=20}for(const{tag:l,hole:m,rect:$,yOffset:g}of a){const c=d/2,f=s.y-19.2-g;if($.attr("class","tag-label-bkg").attr("points",` ${n-o/2-C/2},${f+k} ${n-o/2-C/2},${f-k} ${s.posWithOffset-o/2-C},${f-c-k} diff --git a/assets/chunks/graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js b/assets/chunks/graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js similarity index 97% rename from assets/chunks/graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js rename to assets/chunks/graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js index 6d35e15..f73f4c1 100644 --- a/assets/chunks/graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js +++ b/assets/chunks/graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js @@ -1 +1 @@ -import{f as p,K as v,p as L,s as N,Z as b}from"../app.DiEjJ8gz.js";import{A as _,a as g,_ as a,O as l,m as f,S as E,k as j,w as D}from"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";var P=L(function(o){return j(D(o,1,N,!0))}),F="\0",d="\0",C="";class y{constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=p(void 0),this._defaultEdgeLabelFn=p(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[d]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return v(e)||(e=p(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return _(this._nodes)}sources(){var e=this;return g(this.nodes(),function(t){return b(e._in[t])})}sinks(){var e=this;return g(this.nodes(),function(t){return b(e._out[t])})}setNodes(e,t){var s=arguments,r=this;return a(e,function(i){s.length>1?r.setNode(i,t):r.setNode(i)}),this}setNode(e,t){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=d,this._children[e]={},this._children[d][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var t=s=>this.removeEdge(this._edgeObjs[s]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],a(this.children(e),s=>{this.setParent(s)}),delete this._children[e]),a(_(this._in[e]),t),delete this._in[e],delete this._preds[e],a(_(this._out[e]),t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(l(t))t=d;else{t+="";for(var s=t;!l(s);s=this.parent(s))if(s===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var t=this._parent[e];if(t!==d)return t}}children(e){if(l(e)&&(e=d),this._isCompound){var t=this._children[e];if(t)return _(t)}else{if(e===d)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var t=this._preds[e];if(t)return _(t)}successors(e){var t=this._sucs[e];if(t)return _(t)}neighbors(e){var t=this.predecessors(e);if(t)return P(t,this.successors(e))}isLeaf(e){var t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var s=this;a(this._nodes,function(n,h){e(h)&&t.setNode(h,n)}),a(this._edgeObjs,function(n){t.hasNode(n.v)&&t.hasNode(n.w)&&t.setEdge(n,s.edge(n))});var r={};function i(n){var h=s.parent(n);return h===void 0||t.hasNode(h)?(r[n]=h,h):h in r?r[h]:i(h)}return this._isCompound&&a(t.nodes(),function(n){t.setParent(n,i(n))}),t}setDefaultEdgeLabel(e){return v(e)||(e=p(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return f(this._edgeObjs)}setPath(e,t){var s=this,r=arguments;return E(e,function(i,n){return r.length>1?s.setEdge(i,n,t):s.setEdge(i,n),n}),this}setEdge(){var e,t,s,r,i=!1,n=arguments[0];typeof n=="object"&&n!==null&&"v"in n?(e=n.v,t=n.w,s=n.name,arguments.length===2&&(r=arguments[1],i=!0)):(e=n,t=arguments[1],s=arguments[3],arguments.length>2&&(r=arguments[2],i=!0)),e=""+e,t=""+t,l(s)||(s=""+s);var h=c(this._isDirected,e,t,s);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,h))return i&&(this._edgeLabels[h]=r),this;if(!l(s)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[h]=i?r:this._defaultEdgeLabelFn(e,t,s);var u=M(this._isDirected,e,t,s);return e=u.v,t=u.w,Object.freeze(u),this._edgeObjs[h]=u,w(this._preds[t],e),w(this._sucs[e],t),this._in[t][h]=u,this._out[e][h]=u,this._edgeCount++,this}edge(e,t,s){var r=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s);return this._edgeLabels[r]}hasEdge(e,t,s){var r=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s);return Object.prototype.hasOwnProperty.call(this._edgeLabels,r)}removeEdge(e,t,s){var r=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s),i=this._edgeObjs[r];return i&&(e=i.v,t=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],O(this._preds[t],e),O(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this}inEdges(e,t){var s=this._in[e];if(s){var r=f(s);return t?g(r,function(i){return i.v===t}):r}}outEdges(e,t){var s=this._out[e];if(s){var r=f(s);return t?g(r,function(i){return i.w===t}):r}}nodeEdges(e,t){var s=this.inEdges(e,t);if(s)return s.concat(this.outEdges(e,t))}}y.prototype._nodeCount=0;y.prototype._edgeCount=0;function w(o,e){o[e]?o[e]++:o[e]=1}function O(o,e){--o[e]||delete o[e]}function c(o,e,t,s){var r=""+e,i=""+t;if(!o&&r>i){var n=r;r=i,i=n}return r+C+i+C+(l(s)?F:s)}function M(o,e,t,s){var r=""+e,i=""+t;if(!o&&r>i){var n=r;r=i,i=n}var h={v:r,w:i};return s&&(h.name=s),h}function m(o,e){return c(o,e.v,e.w,e.name)}export{y}; +import{f as p,K as v,p as L,s as N,Z as b}from"../app.DfYWW83x.js";import{A as _,a as g,_ as a,O as l,m as f,S as E,k as j,w as D}from"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";var P=L(function(o){return j(D(o,1,N,!0))}),F="\0",d="\0",C="";class y{constructor(e={}){this._isDirected=Object.prototype.hasOwnProperty.call(e,"directed")?e.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(e,"multigraph")?e.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(e,"compound")?e.compound:!1,this._label=void 0,this._defaultNodeLabelFn=p(void 0),this._defaultEdgeLabelFn=p(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[d]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(e){return this._label=e,this}graph(){return this._label}setDefaultNodeLabel(e){return v(e)||(e=p(e)),this._defaultNodeLabelFn=e,this}nodeCount(){return this._nodeCount}nodes(){return _(this._nodes)}sources(){var e=this;return g(this.nodes(),function(t){return b(e._in[t])})}sinks(){var e=this;return g(this.nodes(),function(t){return b(e._out[t])})}setNodes(e,t){var s=arguments,r=this;return a(e,function(i){s.length>1?r.setNode(i,t):r.setNode(i)}),this}setNode(e,t){return Object.prototype.hasOwnProperty.call(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]=d,this._children[e]={},this._children[d][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)}node(e){return this._nodes[e]}hasNode(e){return Object.prototype.hasOwnProperty.call(this._nodes,e)}removeNode(e){if(Object.prototype.hasOwnProperty.call(this._nodes,e)){var t=s=>this.removeEdge(this._edgeObjs[s]);delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],a(this.children(e),s=>{this.setParent(s)}),delete this._children[e]),a(_(this._in[e]),t),delete this._in[e],delete this._preds[e],a(_(this._out[e]),t),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this}setParent(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(l(t))t=d;else{t+="";for(var s=t;!l(s);s=this.parent(s))if(s===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this}_removeFromParentsChildList(e){delete this._children[this._parent[e]][e]}parent(e){if(this._isCompound){var t=this._parent[e];if(t!==d)return t}}children(e){if(l(e)&&(e=d),this._isCompound){var t=this._children[e];if(t)return _(t)}else{if(e===d)return this.nodes();if(this.hasNode(e))return[]}}predecessors(e){var t=this._preds[e];if(t)return _(t)}successors(e){var t=this._sucs[e];if(t)return _(t)}neighbors(e){var t=this.predecessors(e);if(t)return P(t,this.successors(e))}isLeaf(e){var t;return this.isDirected()?t=this.successors(e):t=this.neighbors(e),t.length===0}filterNodes(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var s=this;a(this._nodes,function(n,h){e(h)&&t.setNode(h,n)}),a(this._edgeObjs,function(n){t.hasNode(n.v)&&t.hasNode(n.w)&&t.setEdge(n,s.edge(n))});var r={};function i(n){var h=s.parent(n);return h===void 0||t.hasNode(h)?(r[n]=h,h):h in r?r[h]:i(h)}return this._isCompound&&a(t.nodes(),function(n){t.setParent(n,i(n))}),t}setDefaultEdgeLabel(e){return v(e)||(e=p(e)),this._defaultEdgeLabelFn=e,this}edgeCount(){return this._edgeCount}edges(){return f(this._edgeObjs)}setPath(e,t){var s=this,r=arguments;return E(e,function(i,n){return r.length>1?s.setEdge(i,n,t):s.setEdge(i,n),n}),this}setEdge(){var e,t,s,r,i=!1,n=arguments[0];typeof n=="object"&&n!==null&&"v"in n?(e=n.v,t=n.w,s=n.name,arguments.length===2&&(r=arguments[1],i=!0)):(e=n,t=arguments[1],s=arguments[3],arguments.length>2&&(r=arguments[2],i=!0)),e=""+e,t=""+t,l(s)||(s=""+s);var h=c(this._isDirected,e,t,s);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,h))return i&&(this._edgeLabels[h]=r),this;if(!l(s)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[h]=i?r:this._defaultEdgeLabelFn(e,t,s);var u=M(this._isDirected,e,t,s);return e=u.v,t=u.w,Object.freeze(u),this._edgeObjs[h]=u,w(this._preds[t],e),w(this._sucs[e],t),this._in[t][h]=u,this._out[e][h]=u,this._edgeCount++,this}edge(e,t,s){var r=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s);return this._edgeLabels[r]}hasEdge(e,t,s){var r=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s);return Object.prototype.hasOwnProperty.call(this._edgeLabels,r)}removeEdge(e,t,s){var r=arguments.length===1?m(this._isDirected,arguments[0]):c(this._isDirected,e,t,s),i=this._edgeObjs[r];return i&&(e=i.v,t=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],O(this._preds[t],e),O(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this}inEdges(e,t){var s=this._in[e];if(s){var r=f(s);return t?g(r,function(i){return i.v===t}):r}}outEdges(e,t){var s=this._out[e];if(s){var r=f(s);return t?g(r,function(i){return i.w===t}):r}}nodeEdges(e,t){var s=this.inEdges(e,t);if(s)return s.concat(this.outEdges(e,t))}}y.prototype._nodeCount=0;y.prototype._edgeCount=0;function w(o,e){o[e]?o[e]++:o[e]=1}function O(o,e){--o[e]||delete o[e]}function c(o,e,t,s){var r=""+e,i=""+t;if(!o&&r>i){var n=r;r=i,i=n}return r+C+i+C+(l(s)?F:s)}function M(o,e,t,s){var r=""+e,i=""+t;if(!o&&r>i){var n=r;r=i,i=n}var h={v:r,w:i};return s&&(h.name=s),h}function m(o,e){return c(o,e.v,e.w,e.name)}export{y}; diff --git a/assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.BXxB37i9.js b/assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.Cy7BIWS3.js similarity index 50% rename from assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.BXxB37i9.js rename to assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.Cy7BIWS3.js index 2f7d683..382c965 100644 --- a/assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.BXxB37i9.js +++ b/assets/chunks/infoDiagram-LHK5PUON-CSaYolw3-BvRhOuze.Cy7BIWS3.js @@ -1,2 +1,2 @@ -import{q as t,O as s,aS as i,aa as n,aT as p}from"../app.DiEjJ8gz.js";import{I as d}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";var m={parse:t(async r=>{const a=await d("info",r);s.debug(a)},"parse")},g={version:p.version+""},v=t(()=>g.version,"getVersion"),c={getVersion:v},f=t((r,a,o)=>{s.debug(`rendering info diagram +import{q as t,O as s,aS as i,aa as n,aT as p}from"../app.DfYWW83x.js";import{I as d}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";var m={parse:t(async r=>{const a=await d("info",r);s.debug(a)},"parse")},g={version:p.version+""},v=t(()=>g.version,"getVersion"),c={getVersion:v},f=t((r,a,o)=>{s.debug(`rendering info diagram `+r);const e=i(a);n(e,100,400,!0),e.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${o}`)},"draw"),x={draw:f},L={parser:m,db:c,renderer:x};export{L as diagram}; diff --git a/assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.CcjblcaA.js b/assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.DSJ4Yilw.js similarity index 98% rename from assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.CcjblcaA.js rename to assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.DSJ4Yilw.js index f05202e..b55b1a4 100644 --- a/assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.CcjblcaA.js +++ b/assets/chunks/journeyDiagram-EWQZEKCU-DqZ5Gtod-LnPX6MHg.DSJ4Yilw.js @@ -1,4 +1,4 @@ -import{d as ft,g as rt,h as gt,o as mt}from"./chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js";import{l as xt}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js";import{q as s,a6 as kt,a5 as bt,a7 as _t,a8 as vt,ao as wt,an as $t,A as j,a9 as U,aa as Tt,at as St}from"../app.DiEjJ8gz.js";import{d as tt}from"./arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js";import"./vitepress-theme-teek.CUuTa6hm.js";var G=(function(){var t=s(function(y,i,a,u){for(a=a||{},u=y.length;u--;a[y[u]]=i);return a},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],l=[1,10],n=[1,11],d=[1,12],c=[1,13],h=[1,14],f={trace:s(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:s(function(y,i,a,u,p,o,x){var k=o.length-1;switch(p){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:u.addTask(o[k-1],o[k]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:l,14:n,16:d,17:c,18:h},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:l,14:n,16:d,17:c,18:h},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:s(function(y,i){if(i.recoverable)this.trace(y);else{var a=new Error(y);throw a.hash=i,a}},"parseError"),parse:s(function(y){var i=this,a=[0],u=[],p=[null],o=[],x=this.table,k="",C=0,P=0,ut=2,J=1,pt=o.slice.call(arguments,1),b=Object.create(this.lexer),E={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(E.yy[z]=this.yy[z]);b.setInput(y,E.yy),E.yy.lexer=b,E.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var q=b.yylloc;o.push(q);var yt=b.options&&b.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dt(v){a.length=a.length-2*v,p.length=p.length-v,o.length=o.length-v}s(dt,"popStack");function Q(){var v;return v=u.pop()||b.lex()||J,typeof v!="number"&&(v instanceof Array&&(u=v,v=u.pop()),v=i.symbols_[v]||v),v}s(Q,"lex");for(var _,I,w,X,F={},N,S,K,O;;){if(I=a[a.length-1],this.defaultActions[I]?w=this.defaultActions[I]:((_===null||typeof _>"u")&&(_=Q()),w=x[I]&&x[I][_]),typeof w>"u"||!w.length||!w[0]){var Y="";O=[];for(N in x[I])this.terminals_[N]&&N>ut&&O.push("'"+this.terminals_[N]+"'");b.showPosition?Y="Parse error on line "+(C+1)+`: +import{d as ft,g as rt,h as gt,o as mt}from"./chunk-67H74DCK-BzSPKGN1-D9cP9OkH.dho-7ePY.js";import{l as xt}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import{q as s,a6 as kt,a5 as bt,a7 as _t,a8 as vt,ao as wt,an as $t,A as j,a9 as U,aa as Tt,at as St}from"../app.DfYWW83x.js";import{d as tt}from"./arc-CegaQWj_-yn6JxQT-.C2WQ2TtA.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var G=(function(){var t=s(function(y,i,a,u){for(a=a||{},u=y.length;u--;a[y[u]]=i);return a},"o"),e=[6,8,10,11,12,14,16,17,18],r=[1,9],l=[1,10],n=[1,11],d=[1,12],c=[1,13],h=[1,14],f={trace:s(function(){},"trace"),yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,taskName:18,taskData:19,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",18:"taskName",19:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,2]],performAction:s(function(y,i,a,u,p,o,x){var k=o.length-1;switch(p){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:u.setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),u.setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),u.setAccDescription(this.$);break;case 12:u.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 13:u.addTask(o[k-1],o[k]),this.$="task";break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:l,14:n,16:d,17:c,18:h},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:15,11:r,12:l,14:n,16:d,17:c,18:h},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),{13:[1,16]},{15:[1,17]},t(e,[2,11]),t(e,[2,12]),{19:[1,18]},t(e,[2,4]),t(e,[2,9]),t(e,[2,10]),t(e,[2,13])],defaultActions:{},parseError:s(function(y,i){if(i.recoverable)this.trace(y);else{var a=new Error(y);throw a.hash=i,a}},"parseError"),parse:s(function(y){var i=this,a=[0],u=[],p=[null],o=[],x=this.table,k="",C=0,P=0,ut=2,J=1,pt=o.slice.call(arguments,1),b=Object.create(this.lexer),E={yy:{}};for(var z in this.yy)Object.prototype.hasOwnProperty.call(this.yy,z)&&(E.yy[z]=this.yy[z]);b.setInput(y,E.yy),E.yy.lexer=b,E.yy.parser=this,typeof b.yylloc>"u"&&(b.yylloc={});var q=b.yylloc;o.push(q);var yt=b.options&&b.options.ranges;typeof E.yy.parseError=="function"?this.parseError=E.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function dt(v){a.length=a.length-2*v,p.length=p.length-v,o.length=o.length-v}s(dt,"popStack");function Q(){var v;return v=u.pop()||b.lex()||J,typeof v!="number"&&(v instanceof Array&&(u=v,v=u.pop()),v=i.symbols_[v]||v),v}s(Q,"lex");for(var _,I,w,X,F={},N,S,K,O;;){if(I=a[a.length-1],this.defaultActions[I]?w=this.defaultActions[I]:((_===null||typeof _>"u")&&(_=Q()),w=x[I]&&x[I][_]),typeof w>"u"||!w.length||!w[0]){var Y="";O=[];for(N in x[I])this.terminals_[N]&&N>ut&&O.push("'"+this.terminals_[N]+"'");b.showPosition?Y="Parse error on line "+(C+1)+`: `+b.showPosition()+` Expecting `+O.join(", ")+", got '"+(this.terminals_[_]||_)+"'":Y="Parse error on line "+(C+1)+": Unexpected "+(_==J?"end of input":"'"+(this.terminals_[_]||_)+"'"),this.parseError(Y,{text:b.match,token:this.terminals_[_]||_,line:b.yylineno,loc:q,expected:O})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+I+", token: "+_);switch(w[0]){case 1:a.push(_),p.push(b.yytext),o.push(b.yylloc),a.push(w[1]),_=null,P=b.yyleng,k=b.yytext,C=b.yylineno,q=b.yylloc;break;case 2:if(S=this.productions_[w[1]][1],F.$=p[p.length-S],F._$={first_line:o[o.length-(S||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(S||1)].first_column,last_column:o[o.length-1].last_column},yt&&(F._$.range=[o[o.length-(S||1)].range[0],o[o.length-1].range[1]]),X=this.performAction.apply(F,[k,P,C,E.yy,w[1],p,o].concat(pt)),typeof X<"u")return X;S&&(a=a.slice(0,-1*S*2),p=p.slice(0,-1*S),o=o.slice(0,-1*S)),a.push(this.productions_[w[1]][0]),p.push(F.$),o.push(F._$),K=x[a[a.length-2]][a[a.length-1]],a.push(K);break;case 3:return!0}}return!0},"parse")},m=(function(){var y={EOF:1,parseError:s(function(i,a){if(this.yy.parser)this.yy.parser.parseError(i,a);else throw new Error(i)},"parseError"),setInput:s(function(i,a){return this.yy=a||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:s(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var a=i.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:s(function(i){var a=i.length,u=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var p=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),u.length-1&&(this.yylineno-=u.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:u?(u.length===p.length?this.yylloc.first_column:0)+p[p.length-u.length].length-u[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:s(function(){return this._more=!0,this},"more"),reject:s(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:s(function(i){this.unput(this.match.slice(i))},"less"),pastInput:s(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:s(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:s(function(){var i=this.pastInput(),a=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BrKyeqfp.js b/assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BFZhmnh9.js similarity index 99% rename from assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BrKyeqfp.js rename to assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BFZhmnh9.js index ff514fc..ad0a98b 100644 --- a/assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BrKyeqfp.js +++ b/assets/chunks/kanban-definition-ZSS6B67P-CUcTB5vL-UWLoG0KX.BFZhmnh9.js @@ -1,4 +1,4 @@ -import{l as de}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.CbkwxGNO.js";import{q as o,O as ee,A as H,aS as ye,d as fe,E as me,I as be,bk as Ee,aC as W,ad as B,ap as _e,aq as ke,bl as Ne,bm as ae,bn as ce}from"../app.DiEjJ8gz.js";import"./vitepress-theme-teek.CUuTa6hm.js";var Y=(function(){var t=o(function(d,e,i,r){for(i=i||{},r=d.length;r--;i[d[r]]=e);return i},"o"),u=[1,4],p=[1,13],s=[1,12],g=[1,15],f=[1,16],E=[1,20],c=[1,19],D=[6,7,8],I=[1,26],h=[1,24],$=[1,25],N=[6,7,11],T=[1,31],O=[6,7,11,24],b=[1,6,13,16,17,20,23],A=[1,35],w=[1,36],v=[1,6,7,11,13,16,17,20,23],G=[1,38],j={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(d,e,i,r,l,n,_){var a=n.length-1;switch(l){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",n[a-1].id),r.addNode(n[a-2].length,n[a-1].id,n[a-1].descr,n[a-1].type,n[a]);break;case 16:r.getLogger().info("Node: ",n[a].id),r.addNode(n[a-1].length,n[a].id,n[a].descr,n[a].type);break;case 17:r.getLogger().trace("Icon: ",n[a]),r.decorateNode({icon:n[a]});break;case 18:case 23:r.decorateNode({class:n[a]});break;case 19:r.getLogger().trace("SPACELIST");break;case 20:r.getLogger().trace("Node: ",n[a-1].id),r.addNode(0,n[a-1].id,n[a-1].descr,n[a-1].type,n[a]);break;case 21:r.getLogger().trace("Node: ",n[a].id),r.addNode(0,n[a].id,n[a].descr,n[a].type);break;case 22:r.decorateNode({icon:n[a]});break;case 27:r.getLogger().trace("node found ..",n[a-2]),this.$={id:n[a-1],descr:n[a-1],type:r.getType(n[a-2],n[a])};break;case 28:this.$={id:n[a],descr:n[a],type:0};break;case 29:r.getLogger().trace("node found ..",n[a-3]),this.$={id:n[a-3],descr:n[a-1],type:r.getType(n[a-2],n[a])};break;case 30:this.$=n[a-1]+n[a];break;case 31:this.$=n[a];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:u},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:u},{6:p,7:[1,10],9:9,12:11,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},t(D,[2,3]),{1:[2,2]},t(D,[2,4]),t(D,[2,5]),{1:[2,6],6:p,12:21,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},{6:p,9:22,12:11,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},{6:I,7:h,10:23,11:$},t(N,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:E,23:c}),t(N,[2,19]),t(N,[2,21],{15:30,24:T}),t(N,[2,22]),t(N,[2,23]),t(O,[2,25]),t(O,[2,26]),t(O,[2,28],{20:[1,32]}),{21:[1,33]},{6:I,7:h,10:34,11:$},{1:[2,7],6:p,12:21,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},t(b,[2,14],{7:A,11:w}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(N,[2,16],{15:37,24:T}),t(N,[2,17]),t(N,[2,18]),t(N,[2,20],{24:G}),t(O,[2,31]),{21:[1,39]},{22:[1,40]},t(b,[2,13],{7:A,11:w}),t(v,[2,11]),t(v,[2,12]),t(N,[2,15],{24:G}),t(O,[2,30]),{22:[1,41]},t(O,[2,27]),t(O,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(d,e){if(e.recoverable)this.trace(d);else{var i=new Error(d);throw i.hash=e,i}},"parseError"),parse:o(function(d){var e=this,i=[0],r=[],l=[null],n=[],_=this.table,a="",M=0,ie=0,he=2,se=1,ue=n.slice.call(arguments,1),m=Object.create(this.lexer),R={yy:{}};for(var Q in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Q)&&(R.yy[Q]=this.yy[Q]);m.setInput(d,R.yy),R.yy.lexer=m,R.yy.parser=this,typeof m.yylloc>"u"&&(m.yylloc={});var Z=m.yylloc;n.push(Z);var ge=m.options&&m.options.ranges;typeof R.yy.parseError=="function"?this.parseError=R.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pe(S){i.length=i.length-2*S,l.length=l.length-S,n.length=n.length-S}o(pe,"popStack");function re(){var S;return S=r.pop()||m.lex()||se,typeof S!="number"&&(S instanceof Array&&(r=S,S=r.pop()),S=e.symbols_[S]||S),S}o(re,"lex");for(var k,P,x,q,U={},X,C,oe,z;;){if(P=i[i.length-1],this.defaultActions[P]?x=this.defaultActions[P]:((k===null||typeof k>"u")&&(k=re()),x=_[P]&&_[P][k]),typeof x>"u"||!x.length||!x[0]){var V="";z=[];for(X in _[P])this.terminals_[X]&&X>he&&z.push("'"+this.terminals_[X]+"'");m.showPosition?V="Parse error on line "+(M+1)+`: +import{l as de}from"./chunk-E2GYISFI-vYodxFCX-CCBY7rt1.DIq1mruj.js";import{q as o,O as ee,A as H,aS as ye,d as fe,E as me,I as be,bk as Ee,aC as W,ad as B,ap as _e,aq as ke,bl as Ne,bm as ae,bn as ce}from"../app.DfYWW83x.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var Y=(function(){var t=o(function(d,e,i,r){for(i=i||{},r=d.length;r--;i[d[r]]=e);return i},"o"),u=[1,4],p=[1,13],s=[1,12],g=[1,15],f=[1,16],E=[1,20],c=[1,19],D=[6,7,8],I=[1,26],h=[1,24],$=[1,25],N=[6,7,11],T=[1,31],O=[6,7,11,24],b=[1,6,13,16,17,20,23],A=[1,35],w=[1,36],v=[1,6,7,11,13,16,17,20,23],G=[1,38],j={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,KANBAN:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,shapeData:15,ICON:16,CLASS:17,nodeWithId:18,nodeWithoutId:19,NODE_DSTART:20,NODE_DESCR:21,NODE_DEND:22,NODE_ID:23,SHAPE_DATA:24,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"KANBAN",11:"EOF",13:"SPACELIST",16:"ICON",17:"CLASS",20:"NODE_DSTART",21:"NODE_DESCR",22:"NODE_DEND",23:"NODE_ID",24:"SHAPE_DATA"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,3],[12,2],[12,2],[12,2],[12,1],[12,2],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[19,3],[18,1],[18,4],[15,2],[15,1]],performAction:o(function(d,e,i,r,l,n,_){var a=n.length-1;switch(l){case 6:case 7:return r;case 8:r.getLogger().trace("Stop NL ");break;case 9:r.getLogger().trace("Stop EOF ");break;case 11:r.getLogger().trace("Stop NL2 ");break;case 12:r.getLogger().trace("Stop EOF2 ");break;case 15:r.getLogger().info("Node: ",n[a-1].id),r.addNode(n[a-2].length,n[a-1].id,n[a-1].descr,n[a-1].type,n[a]);break;case 16:r.getLogger().info("Node: ",n[a].id),r.addNode(n[a-1].length,n[a].id,n[a].descr,n[a].type);break;case 17:r.getLogger().trace("Icon: ",n[a]),r.decorateNode({icon:n[a]});break;case 18:case 23:r.decorateNode({class:n[a]});break;case 19:r.getLogger().trace("SPACELIST");break;case 20:r.getLogger().trace("Node: ",n[a-1].id),r.addNode(0,n[a-1].id,n[a-1].descr,n[a-1].type,n[a]);break;case 21:r.getLogger().trace("Node: ",n[a].id),r.addNode(0,n[a].id,n[a].descr,n[a].type);break;case 22:r.decorateNode({icon:n[a]});break;case 27:r.getLogger().trace("node found ..",n[a-2]),this.$={id:n[a-1],descr:n[a-1],type:r.getType(n[a-2],n[a])};break;case 28:this.$={id:n[a],descr:n[a],type:0};break;case 29:r.getLogger().trace("node found ..",n[a-3]),this.$={id:n[a-3],descr:n[a-1],type:r.getType(n[a-2],n[a])};break;case 30:this.$=n[a-1]+n[a];break;case 31:this.$=n[a];break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:u},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:u},{6:p,7:[1,10],9:9,12:11,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},t(D,[2,3]),{1:[2,2]},t(D,[2,4]),t(D,[2,5]),{1:[2,6],6:p,12:21,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},{6:p,9:22,12:11,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},{6:I,7:h,10:23,11:$},t(N,[2,24],{18:17,19:18,14:27,16:[1,28],17:[1,29],20:E,23:c}),t(N,[2,19]),t(N,[2,21],{15:30,24:T}),t(N,[2,22]),t(N,[2,23]),t(O,[2,25]),t(O,[2,26]),t(O,[2,28],{20:[1,32]}),{21:[1,33]},{6:I,7:h,10:34,11:$},{1:[2,7],6:p,12:21,13:s,14:14,16:g,17:f,18:17,19:18,20:E,23:c},t(b,[2,14],{7:A,11:w}),t(v,[2,8]),t(v,[2,9]),t(v,[2,10]),t(N,[2,16],{15:37,24:T}),t(N,[2,17]),t(N,[2,18]),t(N,[2,20],{24:G}),t(O,[2,31]),{21:[1,39]},{22:[1,40]},t(b,[2,13],{7:A,11:w}),t(v,[2,11]),t(v,[2,12]),t(N,[2,15],{24:G}),t(O,[2,30]),{22:[1,41]},t(O,[2,27]),t(O,[2,29])],defaultActions:{2:[2,1],6:[2,2]},parseError:o(function(d,e){if(e.recoverable)this.trace(d);else{var i=new Error(d);throw i.hash=e,i}},"parseError"),parse:o(function(d){var e=this,i=[0],r=[],l=[null],n=[],_=this.table,a="",M=0,ie=0,he=2,se=1,ue=n.slice.call(arguments,1),m=Object.create(this.lexer),R={yy:{}};for(var Q in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Q)&&(R.yy[Q]=this.yy[Q]);m.setInput(d,R.yy),R.yy.lexer=m,R.yy.parser=this,typeof m.yylloc>"u"&&(m.yylloc={});var Z=m.yylloc;n.push(Z);var ge=m.options&&m.options.ranges;typeof R.yy.parseError=="function"?this.parseError=R.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function pe(S){i.length=i.length-2*S,l.length=l.length-S,n.length=n.length-S}o(pe,"popStack");function re(){var S;return S=r.pop()||m.lex()||se,typeof S!="number"&&(S instanceof Array&&(r=S,S=r.pop()),S=e.symbols_[S]||S),S}o(re,"lex");for(var k,P,x,q,U={},X,C,oe,z;;){if(P=i[i.length-1],this.defaultActions[P]?x=this.defaultActions[P]:((k===null||typeof k>"u")&&(k=re()),x=_[P]&&_[P][k]),typeof x>"u"||!x.length||!x[0]){var V="";z=[];for(X in _[P])this.terminals_[X]&&X>he&&z.push("'"+this.terminals_[X]+"'");m.showPosition?V="Parse error on line "+(M+1)+`: `+m.showPosition()+` Expecting `+z.join(", ")+", got '"+(this.terminals_[k]||k)+"'":V="Parse error on line "+(M+1)+": Unexpected "+(k==se?"end of input":"'"+(this.terminals_[k]||k)+"'"),this.parseError(V,{text:m.match,token:this.terminals_[k]||k,line:m.yylineno,loc:Z,expected:z})}if(x[0]instanceof Array&&x.length>1)throw new Error("Parse Error: multiple actions possible at state: "+P+", token: "+k);switch(x[0]){case 1:i.push(k),l.push(m.yytext),n.push(m.yylloc),i.push(x[1]),k=null,ie=m.yyleng,a=m.yytext,M=m.yylineno,Z=m.yylloc;break;case 2:if(C=this.productions_[x[1]][1],U.$=l[l.length-C],U._$={first_line:n[n.length-(C||1)].first_line,last_line:n[n.length-1].last_line,first_column:n[n.length-(C||1)].first_column,last_column:n[n.length-1].last_column},ge&&(U._$.range=[n[n.length-(C||1)].range[0],n[n.length-1].range[1]]),q=this.performAction.apply(U,[a,ie,M,R.yy,x[1],l,n].concat(ue)),typeof q<"u")return q;C&&(i=i.slice(0,-1*C*2),l=l.slice(0,-1*C),n=n.slice(0,-1*C)),i.push(this.productions_[x[1]][0]),l.push(U.$),n.push(U._$),oe=_[i[i.length-2]][i[i.length-1]],i.push(oe);break;case 3:return!0}}return!0},"parse")},K=(function(){var d={EOF:1,parseError:o(function(e,i){if(this.yy.parser)this.yy.parser.parseError(e,i);else throw new Error(e)},"parseError"),setInput:o(function(e,i){return this.yy=i||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var e=this._input[0];this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e;var i=e.match(/(?:\r\n?|\n).*/g);return i?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},"input"),unput:o(function(e){var i=e.length,r=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-i),this.offset-=i;var l=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var n=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===l.length?this.yylloc.first_column:0)+l[l.length-r.length].length-r[0].length:this.yylloc.first_column-i},this.options.ranges&&(this.yylloc.range=[n[0],n[0]+this.yyleng-i]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(e){this.unput(this.match.slice(e))},"less"),pastInput:o(function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var e=this.pastInput(),i=new Array(e.length+1).join("-");return e+this.upcomingInput()+` diff --git a/assets/chunks/layout-FfY8zw-4-CVLJrweZ.BPwdqM1F.js b/assets/chunks/layout-FfY8zw-4-CVLJrweZ.CN6bbfRx.js similarity index 99% rename from assets/chunks/layout-FfY8zw-4-CVLJrweZ.BPwdqM1F.js rename to assets/chunks/layout-FfY8zw-4-CVLJrweZ.CN6bbfRx.js index 1691696..6ae28a8 100644 --- a/assets/chunks/layout-FfY8zw-4-CVLJrweZ.BPwdqM1F.js +++ b/assets/chunks/layout-FfY8zw-4-CVLJrweZ.CN6bbfRx.js @@ -1 +1 @@ -import{y as b}from"./graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js";import{w as Me,_ as s,b as $,h as Te,E as U,m as x,O as m,i as fe,n as Ce,S as C,a as R,F as Le,c as he,d as Se,P as ee}from"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import{i as $e,f as M,e as N,E as Fe,s as I,l as p,c as ge,a as ve,R as F,g as Ge,v as X,t as Ve}from"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import{p as qe,g as z,y as A,h as Be,i as Ye,k as le,C as pe,j as ze,l as Ae,f as De,U as Ue,G as Xe,m as Qe}from"../app.DiEjJ8gz.js";function We(e){return Be(Ye(e,void 0,N),e+"")}var Ze=1,He=4;function Je(e){return Le(e,Ze|He)}function Ke(e,r){return e==null?e:Xe(e,he(r),Qe)}function er(e,r){return e&&fe(e,he(r))}function rr(e,r){return e>r}function L(e,r){var t={};return r=U(r),fe(e,function(n,o,i){Ae(t,o,r(n,o,i))}),t}function y(e){return e&&e.length?ve(e,pe,rr):void 0}function Q(e,r){return e&&e.length?ve(e,U(r),Ve):void 0}function tr(e,r){var t=e.length;for(e.sort(r);t--;)e[t]=e[t].value;return e}function nr(e,r){if(e!==r){var t=e!==void 0,n=e===null,o=e===e,i=ee(e),a=r!==void 0,u=r===null,d=r===r,c=ee(r);if(!u&&!c&&!i&&e>r||i&&a&&d&&!u&&!c||n&&a&&d||!t&&d||!o)return 1;if(!n&&!i&&!c&&e=u)return d;var c=t[n];return d*(c=="desc"?-1:1)}}return e.index-r.index}function ir(e,r,t){r.length?r=$(r,function(i){return le(i)?function(a){return Te(a,i.length===1?i[0]:i)}:i}):r=[pe];var n=-1;r=$(r,ze(U));var o=Fe(e,function(i,a,u){var d=$(r,function(c){return c(i)});return{criteria:d,index:++n,value:i}});return tr(o,function(i,a){return or(i,a,t)})}function ar(e,r){return Ge(e,r,function(t,n){return Se(e,n)})}var T=We(function(e,r){return e==null?{}:ar(e,r)}),ur=Math.ceil,dr=Math.max;function cr(e,r,t,n){for(var o=-1,i=dr(ur((r-e)/(t||1)),0),a=Array(i);i--;)a[++o]=e,e+=t;return a}function sr(e){return function(r,t,n){return n&&typeof n!="number"&&z(r,t,n)&&(t=n=void 0),r=F(r),t===void 0?(t=r,r=0):t=F(t),n=n===void 0?r1&&z(e,r[0],r[1])?r=[]:t>2&&z(r[0],r[1],r[2])&&(r=[r[0]]),ir(e,Me(r),[])}),fr=0;function W(e){var r=++fr;return Ce(e)+r}function hr(e,r,t){for(var n=-1,o=e.length,i=r.length,a={};++n0;--u)if(a=r[u].dequeue(),a){n=n.concat(G(e,r,t,a,!0));break}}}return n}function G(e,r,t,n,o){var i=o?[]:void 0;return s(e.inEdges(n.v),function(a){var u=e.edge(a),d=e.node(a.v);o&&i.push({v:a.v,w:a.w}),d.out-=u,D(r,t,d)}),s(e.outEdges(n.v),function(a){var u=e.edge(a),d=a.w,c=e.node(d);c.in-=u,D(r,t,c)}),e.removeNode(n.v),i}function br(e,r){var t=new b,n=0,o=0;s(e.nodes(),function(u){t.setNode(u,{v:u,in:0,out:0})}),s(e.edges(),function(u){var d=t.edge(u.v,u.w)||0,c=r(u),f=d+c;t.setEdge(u.v,u.w,f),o=Math.max(o,t.node(u.v).out+=c),n=Math.max(n,t.node(u.w).in+=c)});var i=E(o+n+3).map(function(){return new vr}),a=n+1;return s(t.nodes(),function(u){D(i,a,t.node(u))}),{graph:t,buckets:i,zeroIdx:a}}function D(e,r,t){t.out?t.in?e[t.out-t.in+r].enqueue(t):e[e.length-1].enqueue(t):e[0].enqueue(t)}function yr(e){var r=e.graph().acyclicer==="greedy"?wr(e,t(e)):kr(e);s(r,function(n){var o=e.edge(n);e.removeEdge(n),o.forwardName=n.name,o.reversed=!0,e.setEdge(n.w,n.v,o,W("rev"))});function t(n){return function(o){return n.edge(o).weight}}}function kr(e){var r=[],t={},n={};function o(i){Object.prototype.hasOwnProperty.call(n,i)||(n[i]=!0,t[i]=!0,s(e.outEdges(i),function(a){Object.prototype.hasOwnProperty.call(t,a.w)?r.push(a):o(a.w)}),delete t[i])}return s(e.nodes(),o),r}function xr(e){s(e.edges(),function(r){var t=e.edge(r);if(t.reversed){e.removeEdge(r);var n=t.forwardName;delete t.reversed,delete t.forwardName,e.setEdge(r.w,r.v,t,n)}})}function O(e,r,t,n){var o;do o=W(n);while(e.hasNode(o));return t.dummy=r,e.setNode(o,t),o}function Er(e){var r=new b().setGraph(e.graph());return s(e.nodes(),function(t){r.setNode(t,e.node(t))}),s(e.edges(),function(t){var n=r.edge(t.v,t.w)||{weight:0,minlen:1},o=e.edge(t);r.setEdge(t.v,t.w,{weight:n.weight+o.weight,minlen:Math.max(n.minlen,o.minlen)})}),r}function we(e){var r=new b({multigraph:e.isMultigraph()}).setGraph(e.graph());return s(e.nodes(),function(t){e.children(t).length||r.setNode(t,e.node(t))}),s(e.edges(),function(t){r.setEdge(t,e.edge(t))}),r}function te(e,r){var t=e.x,n=e.y,o=r.x-t,i=r.y-n,a=e.width/2,u=e.height/2;if(!o&&!i)throw new Error("Not possible to find intersection inside of the rectangle");var d,c;return Math.abs(i)*a>Math.abs(o)*u?(i<0&&(u=-u),d=u*o/i,c=u):(o<0&&(a=-a),d=a,c=a*i/o),{x:t+d,y:n+c}}function S(e){var r=p(E(me(e)+1),function(){return[]});return s(e.nodes(),function(t){var n=e.node(t),o=n.rank;m(o)||(r[o][n.order]=t)}),r}function Nr(e){var r=I(p(e.nodes(),function(t){return e.node(t).rank}));s(e.nodes(),function(t){var n=e.node(t);ge(n,"rank")&&(n.rank-=r)})}function Or(e){var r=I(p(e.nodes(),function(i){return e.node(i).rank})),t=[];s(e.nodes(),function(i){var a=e.node(i).rank-r;t[a]||(t[a]=[]),t[a].push(i)});var n=0,o=e.graph().nodeRankFactor;s(t,function(i,a){m(i)&&a%o!==0?--n:n&&s(i,function(u){e.node(u).rank+=n})})}function ne(e,r,t,n){var o={width:0,height:0};return arguments.length>=4&&(o.rank=t,o.order=n),O(e,"border",o,r)}function me(e){return y(p(e.nodes(),function(r){var t=e.node(r).rank;if(!m(t))return t}))}function _r(e,r){var t={lhs:[],rhs:[]};return s(e,function(n){r(n)?t.lhs.push(n):t.rhs.push(n)}),t}function Ir(e,r){return r()}function Pr(e){function r(t){var n=e.children(t),o=e.node(t);if(n.length&&s(n,r),Object.prototype.hasOwnProperty.call(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var i=o.minRank,a=o.maxRank+1;ia.lim&&(u=a,d=!0);var c=R(r.edges(),function(f){return d===ae(e,e.node(f.v),u)&&d!==ae(e,e.node(f.w),u)});return Q(c,function(f){return P(r,f)})}function Ie(e,r,t,n){var o=t.v,i=t.w;e.removeEdge(o,i),e.setEdge(n.v,n.w,{}),J(e),H(e,r),Yr(e,r)}function Yr(e,r){var t=X(e.nodes(),function(o){return!r.node(o).parent}),n=qr(e,t);n=n.slice(1),s(n,function(o){var i=e.node(o).parent,a=r.edge(o,i),u=!1;a||(a=r.edge(i,o),u=!0),r.node(o).rank=r.node(i).rank+(u?a.minlen:-a.minlen)})}function zr(e,r,t){return e.hasEdge(r,t)}function ae(e,r,t){return t.low<=r.lim&&r.lim<=t.lim}function Ar(e){switch(e.graph().ranker){case"network-simplex":ue(e);break;case"tight-tree":Ur(e);break;case"longest-path":Dr(e);break;default:ue(e)}}var Dr=Z;function Ur(e){Z(e),ye(e)}function ue(e){k(e)}function Xr(e){var r=O(e,"root",{},"_root"),t=Qr(e),n=y(x(t))-1,o=2*n+1;e.graph().nestingRoot=r,s(e.edges(),function(a){e.edge(a).minlen*=o});var i=Wr(e)+1;s(e.children(),function(a){Pe(e,r,o,i,n,t,a)}),e.graph().nodeRankFactor=o}function Pe(e,r,t,n,o,i,a){var u=e.children(a);if(!u.length){a!==r&&e.setEdge(r,a,{weight:0,minlen:t});return}var d=ne(e,"_bt"),c=ne(e,"_bb"),f=e.node(a);e.setParent(d,a),f.borderTop=d,e.setParent(c,a),f.borderBottom=c,s(u,function(h){Pe(e,r,t,n,o,i,h);var g=e.node(h),v=g.borderTop?g.borderTop:h,l=g.borderBottom?g.borderBottom:h,w=g.borderTop?n:2*n,_=v!==l?1:o-i[a]+1;e.setEdge(d,v,{weight:w,minlen:_,nestingEdge:!0}),e.setEdge(l,c,{weight:w,minlen:_,nestingEdge:!0})}),e.parent(a)||e.setEdge(r,d,{weight:0,minlen:o+i[a]})}function Qr(e){var r={};function t(n,o){var i=e.children(n);i&&i.length&&s(i,function(a){t(a,o+1)}),r[n]=o}return s(e.children(),function(n){t(n,1)}),r}function Wr(e){return C(e.edges(),function(r,t){return r+e.edge(t).weight},0)}function Zr(e){var r=e.graph();e.removeNode(r.nestingRoot),delete r.nestingRoot,s(e.edges(),function(t){var n=e.edge(t);n.nestingEdge&&e.removeEdge(t)})}function Hr(e,r,t){var n={},o;s(t,function(i){for(var a=e.parent(i),u,d;a;){if(u=e.parent(a),u?(d=n[u],n[u]=a):(d=o,o=a),d&&d!==a){r.setEdge(d,a);return}a=u}})}function Jr(e,r,t){var n=Kr(e),o=new b({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(i){return e.node(i)});return s(e.nodes(),function(i){var a=e.node(i),u=e.parent(i);(a.rank===r||a.minRank<=r&&r<=a.maxRank)&&(o.setNode(i),o.setParent(i,u||n),s(e[t](i),function(d){var c=d.v===i?d.w:d.v,f=o.edge(c,i),h=m(f)?0:f.weight;o.setEdge(c,i,{weight:e.edge(d).weight+h})}),Object.prototype.hasOwnProperty.call(a,"minRank")&&o.setNode(i,{borderLeft:a.borderLeft[r],borderRight:a.borderRight[r]}))}),o}function Kr(e){for(var r;e.hasNode(r=W("_root")););return r}function et(e,r){for(var t=0,n=1;n0;)f%2&&(h+=u[f+1]),f=f-1>>1,u[f]+=c.weight;d+=c.weight*h})),d}function tt(e){var r={},t=R(e.nodes(),function(u){return!e.children(u).length}),n=y(p(t,function(u){return e.node(u).rank})),o=p(E(n+1),function(){return[]});function i(u){if(!ge(r,u)){r[u]=!0;var d=e.node(u);o[d.rank].push(u),s(e.successors(u),i)}}var a=j(t,function(u){return e.node(u).rank});return s(a,i),o}function nt(e,r){return p(r,function(t){var n=e.inEdges(t);if(n.length){var o=C(n,function(i,a){var u=e.edge(a),d=e.node(a.v);return{sum:i.sum+u.weight*d.order,weight:i.weight+u.weight}},{sum:0,weight:0});return{v:t,barycenter:o.sum/o.weight,weight:o.weight}}else return{v:t}})}function ot(e,r){var t={};s(e,function(o,i){var a=t[o.v]={indegree:0,in:[],out:[],vs:[o.v],i};m(o.barycenter)||(a.barycenter=o.barycenter,a.weight=o.weight)}),s(r.edges(),function(o){var i=t[o.v],a=t[o.w];!m(i)&&!m(a)&&(a.indegree++,i.out.push(t[o.w]))});var n=R(t,function(o){return!o.indegree});return it(n)}function it(e){var r=[];function t(i){return function(a){a.merged||(m(a.barycenter)||m(i.barycenter)||a.barycenter>=i.barycenter)&&at(i,a)}}function n(i){return function(a){a.in.push(i),--a.indegree===0&&e.push(a)}}for(;e.length;){var o=e.pop();r.push(o),s(o.in.reverse(),t(o)),s(o.out,n(o))}return p(R(r,function(i){return!i.merged}),function(i){return T(i,["vs","i","barycenter","weight"])})}function at(e,r){var t=0,n=0;e.weight&&(t+=e.barycenter*e.weight,n+=e.weight),r.weight&&(t+=r.barycenter*r.weight,n+=r.weight),e.vs=r.vs.concat(e.vs),e.barycenter=t/n,e.weight=n,e.i=Math.min(r.i,e.i),r.merged=!0}function ut(e,r){var t=_r(e,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=t.lhs,o=j(t.rhs,function(f){return-f.i}),i=[],a=0,u=0,d=0;n.sort(dt(!!r)),d=de(i,o,d),s(n,function(f){d+=f.vs.length,i.push(f.vs),a+=f.barycenter*f.weight,u+=f.weight,d=de(i,o,d)});var c={vs:N(i)};return u&&(c.barycenter=a/u,c.weight=u),c}function de(e,r,t){for(var n;r.length&&(n=M(r)).i<=t;)r.pop(),e.push(n.vs),t++;return t}function dt(e){return function(r,t){return r.barycentert.barycenter?1:e?t.i-r.i:r.i-t.i}}function Re(e,r,t,n){var o=e.children(r),i=e.node(r),a=i?i.borderLeft:void 0,u=i?i.borderRight:void 0,d={};a&&(o=R(o,function(l){return l!==a&&l!==u}));var c=nt(e,o);s(c,function(l){if(e.children(l.v).length){var w=Re(e,l.v,t,n);d[l.v]=w,Object.prototype.hasOwnProperty.call(w,"barycenter")&&st(l,w)}});var f=ot(c,t);ct(f,d);var h=ut(f,n);if(a&&(h.vs=N([a,h.vs,u]),e.predecessors(a).length)){var g=e.node(e.predecessors(a)[0]),v=e.node(e.predecessors(u)[0]);Object.prototype.hasOwnProperty.call(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+g.order+v.order)/(h.weight+2),h.weight+=2}return h}function ct(e,r){s(e,function(t){t.vs=N(t.vs.map(function(n){return r[n]?r[n].vs:n}))})}function st(e,r){m(e.barycenter)?(e.barycenter=r.barycenter,e.weight=r.weight):(e.barycenter=(e.barycenter*e.weight+r.barycenter*r.weight)/(e.weight+r.weight),e.weight+=r.weight)}function ft(e){var r=me(e),t=ce(e,E(1,r+1),"inEdges"),n=ce(e,E(r-1,-1,-1),"outEdges"),o=tt(e);se(e,o);for(var i=Number.POSITIVE_INFINITY,a,u=0,d=0;d<4;++u,++d){ht(u%2?t:n,u%4>=2),o=S(e);var c=et(e,o);ca||u>r[d].lim));for(c=d,d=n;(d=e.parent(d))!==c;)i.push(d);return{path:o.concat(i.reverse()),lca:c}}function lt(e){var r={},t=0;function n(o){var i=t;s(e.children(o),n),r[o]={low:i,lim:t++}}return s(e.children(),n),r}function pt(e,r){var t={};function n(o,i){var a=0,u=0,d=o.length,c=M(i);return s(i,function(f,h){var g=mt(e,f),v=g?e.node(g).order:d;(g||f===c)&&(s(i.slice(u,h+1),function(l){s(e.predecessors(l),function(w){var _=e.node(w),K=_.order;(Kc)&&je(t,g,f)})})}function o(i,a){var u=-1,d,c=0;return s(a,function(f,h){if(e.node(f).dummy==="border"){var g=e.predecessors(f);g.length&&(d=e.node(g[0]).order,n(a,c,h,u,d),c=h,u=d)}n(a,c,a.length,d,i.length)}),a}return C(r,o),t}function mt(e,r){if(e.node(r).dummy)return X(e.predecessors(r),function(t){return e.node(t).dummy})}function je(e,r,t){if(r>t){var n=r;r=t,t=n}var o=e[r];o||(e[r]=o={}),o[t]=!0}function bt(e,r,t){if(r>t){var n=r;r=t,t=n}return!!e[r]&&Object.prototype.hasOwnProperty.call(e[r],t)}function yt(e,r,t,n){var o={},i={},a={};return s(r,function(u){s(u,function(d,c){o[d]=d,i[d]=d,a[d]=c})}),s(r,function(u){var d=-1;s(u,function(c){var f=n(c);if(f.length){f=j(f,function(w){return a[w]});for(var h=(f.length-1)/2,g=Math.floor(h),v=Math.ceil(h);g<=v;++g){var l=f[g];i[c]===c&&d{var n=t(" buildLayoutGraph",()=>Bt(e));t(" runLayout",()=>Mt(n,t)),t(" updateInputGraph",()=>Tt(e,n))})}function Mt(e,r){r(" makeSpaceForEdgeLabels",()=>Yt(e)),r(" removeSelfEdges",()=>Ht(e)),r(" acyclic",()=>yr(e)),r(" nestingGraph.run",()=>Xr(e)),r(" rank",()=>Ar(we(e))),r(" injectEdgeLabelProxies",()=>zt(e)),r(" removeEmptyRanks",()=>Or(e)),r(" nestingGraph.cleanup",()=>Zr(e)),r(" normalizeRanks",()=>Nr(e)),r(" assignRankMinMax",()=>At(e)),r(" removeEdgeLabelProxies",()=>Dt(e)),r(" normalize.run",()=>Cr(e)),r(" parentDummyChains",()=>gt(e)),r(" addBorderSegments",()=>Pr(e)),r(" order",()=>ft(e)),r(" insertSelfEdges",()=>Jt(e)),r(" adjustCoordinateSystem",()=>Rr(e)),r(" position",()=>Rt(e)),r(" positionSelfEdges",()=>Kt(e)),r(" removeBorderNodes",()=>Zt(e)),r(" normalize.undo",()=>Sr(e)),r(" fixupEdgeLabelCoords",()=>Qt(e)),r(" undoCoordinateSystem",()=>jr(e)),r(" translateGraph",()=>Ut(e)),r(" assignNodeIntersects",()=>Xt(e)),r(" reversePoints",()=>Wt(e)),r(" acyclic.undo",()=>xr(e))}function Tt(e,r){s(e.nodes(),function(t){var n=e.node(t),o=r.node(t);n&&(n.x=o.x,n.y=o.y,r.children(t).length&&(n.width=o.width,n.height=o.height))}),s(e.edges(),function(t){var n=e.edge(t),o=r.edge(t);n.points=o.points,Object.prototype.hasOwnProperty.call(o,"x")&&(n.x=o.x,n.y=o.y)}),e.graph().width=r.graph().width,e.graph().height=r.graph().height}var Ct=["nodesep","edgesep","ranksep","marginx","marginy"],Lt={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},St=["acyclicer","ranker","rankdir","align"],$t=["width","height"],Ft={width:0,height:0},Gt=["minlen","weight","width","height","labeloffset"],Vt={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},qt=["labelpos"];function Bt(e){var r=new b({multigraph:!0,compound:!0}),t=Y(e.graph());return r.setGraph(A({},Lt,B(t,Ct),T(t,St))),s(e.nodes(),function(n){var o=Y(e.node(n));r.setNode(n,$e(B(o,$t),Ft)),r.setParent(n,e.parent(n))}),s(e.edges(),function(n){var o=Y(e.edge(n));r.setEdge(n,A({},Vt,B(o,Gt),T(o,qt)))}),r}function Yt(e){var r=e.graph();r.ranksep/=2,s(e.edges(),function(t){var n=e.edge(t);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(r.rankdir==="TB"||r.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function zt(e){s(e.edges(),function(r){var t=e.edge(r);if(t.width&&t.height){var n=e.node(r.v),o=e.node(r.w),i={rank:(o.rank-n.rank)/2+n.rank,e:r};O(e,"edge-proxy",i,"_ep")}})}function At(e){var r=0;s(e.nodes(),function(t){var n=e.node(t);n.borderTop&&(n.minRank=e.node(n.borderTop).rank,n.maxRank=e.node(n.borderBottom).rank,r=y(r,n.maxRank))}),e.graph().maxRank=r}function Dt(e){s(e.nodes(),function(r){var t=e.node(r);t.dummy==="edge-proxy"&&(e.edge(t.e).labelRank=t.rank,e.removeNode(r))})}function Ut(e){var r=Number.POSITIVE_INFINITY,t=0,n=Number.POSITIVE_INFINITY,o=0,i=e.graph(),a=i.marginx||0,u=i.marginy||0;function d(c){var f=c.x,h=c.y,g=c.width,v=c.height;r=Math.min(r,f-g/2),t=Math.max(t,f+g/2),n=Math.min(n,h-v/2),o=Math.max(o,h+v/2)}s(e.nodes(),function(c){d(e.node(c))}),s(e.edges(),function(c){var f=e.edge(c);Object.prototype.hasOwnProperty.call(f,"x")&&d(f)}),r-=a,n-=u,s(e.nodes(),function(c){var f=e.node(c);f.x-=r,f.y-=n}),s(e.edges(),function(c){var f=e.edge(c);s(f.points,function(h){h.x-=r,h.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=r),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),i.width=t-r+a,i.height=o-n+u}function Xt(e){s(e.edges(),function(r){var t=e.edge(r),n=e.node(r.v),o=e.node(r.w),i,a;t.points?(i=t.points[0],a=t.points[t.points.length-1]):(t.points=[],i=o,a=n),t.points.unshift(te(n,i)),t.points.push(te(o,a))})}function Qt(e){s(e.edges(),function(r){var t=e.edge(r);if(Object.prototype.hasOwnProperty.call(t,"x"))switch((t.labelpos==="l"||t.labelpos==="r")&&(t.width-=t.labeloffset),t.labelpos){case"l":t.x-=t.width/2+t.labeloffset;break;case"r":t.x+=t.width/2+t.labeloffset;break}})}function Wt(e){s(e.edges(),function(r){var t=e.edge(r);t.reversed&&t.points.reverse()})}function Zt(e){s(e.nodes(),function(r){if(e.children(r).length){var t=e.node(r),n=e.node(t.borderTop),o=e.node(t.borderBottom),i=e.node(M(t.borderLeft)),a=e.node(M(t.borderRight));t.width=Math.abs(a.x-i.x),t.height=Math.abs(o.y-n.y),t.x=i.x+t.width/2,t.y=n.y+t.height/2}}),s(e.nodes(),function(r){e.node(r).dummy==="border"&&e.removeNode(r)})}function Ht(e){s(e.edges(),function(r){if(r.v===r.w){var t=e.node(r.v);t.selfEdges||(t.selfEdges=[]),t.selfEdges.push({e:r,label:e.edge(r)}),e.removeEdge(r)}})}function Jt(e){var r=S(e);s(r,function(t){var n=0;s(t,function(o,i){var a=e.node(o);a.order=i+n,s(a.selfEdges,function(u){O(e,"selfedge",{width:u.label.width,height:u.label.height,rank:a.rank,order:i+ ++n,e:u.e,label:u.label},"_se")}),delete a.selfEdges})})}function Kt(e){s(e.nodes(),function(r){var t=e.node(r);if(t.dummy==="selfedge"){var n=e.node(t.e.v),o=n.x+n.width/2,i=n.y,a=t.x-o,u=n.height/2;e.setEdge(t.e,t.label),e.removeNode(r),t.label.points=[{x:o+2*a/3,y:i-u},{x:o+5*a/6,y:i-u},{x:o+a,y:i},{x:o+5*a/6,y:i+u},{x:o+2*a/3,y:i+u}],t.label.x=t.x,t.label.y=t.y}})}function B(e,r){return L(T(e,r),Number)}function Y(e){var r={};return s(e,function(t,n){r[n.toLowerCase()]=t}),r}export{on as i}; +import{y as b}from"./graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js";import{w as Me,_ as s,b as $,h as Te,E as U,m as x,O as m,i as fe,n as Ce,S as C,a as R,F as Le,c as he,d as Se,P as ee}from"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import{i as $e,f as M,e as N,E as Fe,s as I,l as p,c as ge,a as ve,R as F,g as Ge,v as X,t as Ve}from"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import{p as qe,g as z,y as A,h as Be,i as Ye,k as le,C as pe,j as ze,l as Ae,f as De,U as Ue,G as Xe,m as Qe}from"../app.DfYWW83x.js";function We(e){return Be(Ye(e,void 0,N),e+"")}var Ze=1,He=4;function Je(e){return Le(e,Ze|He)}function Ke(e,r){return e==null?e:Xe(e,he(r),Qe)}function er(e,r){return e&&fe(e,he(r))}function rr(e,r){return e>r}function L(e,r){var t={};return r=U(r),fe(e,function(n,o,i){Ae(t,o,r(n,o,i))}),t}function y(e){return e&&e.length?ve(e,pe,rr):void 0}function Q(e,r){return e&&e.length?ve(e,U(r),Ve):void 0}function tr(e,r){var t=e.length;for(e.sort(r);t--;)e[t]=e[t].value;return e}function nr(e,r){if(e!==r){var t=e!==void 0,n=e===null,o=e===e,i=ee(e),a=r!==void 0,u=r===null,d=r===r,c=ee(r);if(!u&&!c&&!i&&e>r||i&&a&&d&&!u&&!c||n&&a&&d||!t&&d||!o)return 1;if(!n&&!i&&!c&&e=u)return d;var c=t[n];return d*(c=="desc"?-1:1)}}return e.index-r.index}function ir(e,r,t){r.length?r=$(r,function(i){return le(i)?function(a){return Te(a,i.length===1?i[0]:i)}:i}):r=[pe];var n=-1;r=$(r,ze(U));var o=Fe(e,function(i,a,u){var d=$(r,function(c){return c(i)});return{criteria:d,index:++n,value:i}});return tr(o,function(i,a){return or(i,a,t)})}function ar(e,r){return Ge(e,r,function(t,n){return Se(e,n)})}var T=We(function(e,r){return e==null?{}:ar(e,r)}),ur=Math.ceil,dr=Math.max;function cr(e,r,t,n){for(var o=-1,i=dr(ur((r-e)/(t||1)),0),a=Array(i);i--;)a[++o]=e,e+=t;return a}function sr(e){return function(r,t,n){return n&&typeof n!="number"&&z(r,t,n)&&(t=n=void 0),r=F(r),t===void 0?(t=r,r=0):t=F(t),n=n===void 0?r1&&z(e,r[0],r[1])?r=[]:t>2&&z(r[0],r[1],r[2])&&(r=[r[0]]),ir(e,Me(r),[])}),fr=0;function W(e){var r=++fr;return Ce(e)+r}function hr(e,r,t){for(var n=-1,o=e.length,i=r.length,a={};++n0;--u)if(a=r[u].dequeue(),a){n=n.concat(G(e,r,t,a,!0));break}}}return n}function G(e,r,t,n,o){var i=o?[]:void 0;return s(e.inEdges(n.v),function(a){var u=e.edge(a),d=e.node(a.v);o&&i.push({v:a.v,w:a.w}),d.out-=u,D(r,t,d)}),s(e.outEdges(n.v),function(a){var u=e.edge(a),d=a.w,c=e.node(d);c.in-=u,D(r,t,c)}),e.removeNode(n.v),i}function br(e,r){var t=new b,n=0,o=0;s(e.nodes(),function(u){t.setNode(u,{v:u,in:0,out:0})}),s(e.edges(),function(u){var d=t.edge(u.v,u.w)||0,c=r(u),f=d+c;t.setEdge(u.v,u.w,f),o=Math.max(o,t.node(u.v).out+=c),n=Math.max(n,t.node(u.w).in+=c)});var i=E(o+n+3).map(function(){return new vr}),a=n+1;return s(t.nodes(),function(u){D(i,a,t.node(u))}),{graph:t,buckets:i,zeroIdx:a}}function D(e,r,t){t.out?t.in?e[t.out-t.in+r].enqueue(t):e[e.length-1].enqueue(t):e[0].enqueue(t)}function yr(e){var r=e.graph().acyclicer==="greedy"?wr(e,t(e)):kr(e);s(r,function(n){var o=e.edge(n);e.removeEdge(n),o.forwardName=n.name,o.reversed=!0,e.setEdge(n.w,n.v,o,W("rev"))});function t(n){return function(o){return n.edge(o).weight}}}function kr(e){var r=[],t={},n={};function o(i){Object.prototype.hasOwnProperty.call(n,i)||(n[i]=!0,t[i]=!0,s(e.outEdges(i),function(a){Object.prototype.hasOwnProperty.call(t,a.w)?r.push(a):o(a.w)}),delete t[i])}return s(e.nodes(),o),r}function xr(e){s(e.edges(),function(r){var t=e.edge(r);if(t.reversed){e.removeEdge(r);var n=t.forwardName;delete t.reversed,delete t.forwardName,e.setEdge(r.w,r.v,t,n)}})}function O(e,r,t,n){var o;do o=W(n);while(e.hasNode(o));return t.dummy=r,e.setNode(o,t),o}function Er(e){var r=new b().setGraph(e.graph());return s(e.nodes(),function(t){r.setNode(t,e.node(t))}),s(e.edges(),function(t){var n=r.edge(t.v,t.w)||{weight:0,minlen:1},o=e.edge(t);r.setEdge(t.v,t.w,{weight:n.weight+o.weight,minlen:Math.max(n.minlen,o.minlen)})}),r}function we(e){var r=new b({multigraph:e.isMultigraph()}).setGraph(e.graph());return s(e.nodes(),function(t){e.children(t).length||r.setNode(t,e.node(t))}),s(e.edges(),function(t){r.setEdge(t,e.edge(t))}),r}function te(e,r){var t=e.x,n=e.y,o=r.x-t,i=r.y-n,a=e.width/2,u=e.height/2;if(!o&&!i)throw new Error("Not possible to find intersection inside of the rectangle");var d,c;return Math.abs(i)*a>Math.abs(o)*u?(i<0&&(u=-u),d=u*o/i,c=u):(o<0&&(a=-a),d=a,c=a*i/o),{x:t+d,y:n+c}}function S(e){var r=p(E(me(e)+1),function(){return[]});return s(e.nodes(),function(t){var n=e.node(t),o=n.rank;m(o)||(r[o][n.order]=t)}),r}function Nr(e){var r=I(p(e.nodes(),function(t){return e.node(t).rank}));s(e.nodes(),function(t){var n=e.node(t);ge(n,"rank")&&(n.rank-=r)})}function Or(e){var r=I(p(e.nodes(),function(i){return e.node(i).rank})),t=[];s(e.nodes(),function(i){var a=e.node(i).rank-r;t[a]||(t[a]=[]),t[a].push(i)});var n=0,o=e.graph().nodeRankFactor;s(t,function(i,a){m(i)&&a%o!==0?--n:n&&s(i,function(u){e.node(u).rank+=n})})}function ne(e,r,t,n){var o={width:0,height:0};return arguments.length>=4&&(o.rank=t,o.order=n),O(e,"border",o,r)}function me(e){return y(p(e.nodes(),function(r){var t=e.node(r).rank;if(!m(t))return t}))}function _r(e,r){var t={lhs:[],rhs:[]};return s(e,function(n){r(n)?t.lhs.push(n):t.rhs.push(n)}),t}function Ir(e,r){return r()}function Pr(e){function r(t){var n=e.children(t),o=e.node(t);if(n.length&&s(n,r),Object.prototype.hasOwnProperty.call(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var i=o.minRank,a=o.maxRank+1;ia.lim&&(u=a,d=!0);var c=R(r.edges(),function(f){return d===ae(e,e.node(f.v),u)&&d!==ae(e,e.node(f.w),u)});return Q(c,function(f){return P(r,f)})}function Ie(e,r,t,n){var o=t.v,i=t.w;e.removeEdge(o,i),e.setEdge(n.v,n.w,{}),J(e),H(e,r),Yr(e,r)}function Yr(e,r){var t=X(e.nodes(),function(o){return!r.node(o).parent}),n=qr(e,t);n=n.slice(1),s(n,function(o){var i=e.node(o).parent,a=r.edge(o,i),u=!1;a||(a=r.edge(i,o),u=!0),r.node(o).rank=r.node(i).rank+(u?a.minlen:-a.minlen)})}function zr(e,r,t){return e.hasEdge(r,t)}function ae(e,r,t){return t.low<=r.lim&&r.lim<=t.lim}function Ar(e){switch(e.graph().ranker){case"network-simplex":ue(e);break;case"tight-tree":Ur(e);break;case"longest-path":Dr(e);break;default:ue(e)}}var Dr=Z;function Ur(e){Z(e),ye(e)}function ue(e){k(e)}function Xr(e){var r=O(e,"root",{},"_root"),t=Qr(e),n=y(x(t))-1,o=2*n+1;e.graph().nestingRoot=r,s(e.edges(),function(a){e.edge(a).minlen*=o});var i=Wr(e)+1;s(e.children(),function(a){Pe(e,r,o,i,n,t,a)}),e.graph().nodeRankFactor=o}function Pe(e,r,t,n,o,i,a){var u=e.children(a);if(!u.length){a!==r&&e.setEdge(r,a,{weight:0,minlen:t});return}var d=ne(e,"_bt"),c=ne(e,"_bb"),f=e.node(a);e.setParent(d,a),f.borderTop=d,e.setParent(c,a),f.borderBottom=c,s(u,function(h){Pe(e,r,t,n,o,i,h);var g=e.node(h),v=g.borderTop?g.borderTop:h,l=g.borderBottom?g.borderBottom:h,w=g.borderTop?n:2*n,_=v!==l?1:o-i[a]+1;e.setEdge(d,v,{weight:w,minlen:_,nestingEdge:!0}),e.setEdge(l,c,{weight:w,minlen:_,nestingEdge:!0})}),e.parent(a)||e.setEdge(r,d,{weight:0,minlen:o+i[a]})}function Qr(e){var r={};function t(n,o){var i=e.children(n);i&&i.length&&s(i,function(a){t(a,o+1)}),r[n]=o}return s(e.children(),function(n){t(n,1)}),r}function Wr(e){return C(e.edges(),function(r,t){return r+e.edge(t).weight},0)}function Zr(e){var r=e.graph();e.removeNode(r.nestingRoot),delete r.nestingRoot,s(e.edges(),function(t){var n=e.edge(t);n.nestingEdge&&e.removeEdge(t)})}function Hr(e,r,t){var n={},o;s(t,function(i){for(var a=e.parent(i),u,d;a;){if(u=e.parent(a),u?(d=n[u],n[u]=a):(d=o,o=a),d&&d!==a){r.setEdge(d,a);return}a=u}})}function Jr(e,r,t){var n=Kr(e),o=new b({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(function(i){return e.node(i)});return s(e.nodes(),function(i){var a=e.node(i),u=e.parent(i);(a.rank===r||a.minRank<=r&&r<=a.maxRank)&&(o.setNode(i),o.setParent(i,u||n),s(e[t](i),function(d){var c=d.v===i?d.w:d.v,f=o.edge(c,i),h=m(f)?0:f.weight;o.setEdge(c,i,{weight:e.edge(d).weight+h})}),Object.prototype.hasOwnProperty.call(a,"minRank")&&o.setNode(i,{borderLeft:a.borderLeft[r],borderRight:a.borderRight[r]}))}),o}function Kr(e){for(var r;e.hasNode(r=W("_root")););return r}function et(e,r){for(var t=0,n=1;n0;)f%2&&(h+=u[f+1]),f=f-1>>1,u[f]+=c.weight;d+=c.weight*h})),d}function tt(e){var r={},t=R(e.nodes(),function(u){return!e.children(u).length}),n=y(p(t,function(u){return e.node(u).rank})),o=p(E(n+1),function(){return[]});function i(u){if(!ge(r,u)){r[u]=!0;var d=e.node(u);o[d.rank].push(u),s(e.successors(u),i)}}var a=j(t,function(u){return e.node(u).rank});return s(a,i),o}function nt(e,r){return p(r,function(t){var n=e.inEdges(t);if(n.length){var o=C(n,function(i,a){var u=e.edge(a),d=e.node(a.v);return{sum:i.sum+u.weight*d.order,weight:i.weight+u.weight}},{sum:0,weight:0});return{v:t,barycenter:o.sum/o.weight,weight:o.weight}}else return{v:t}})}function ot(e,r){var t={};s(e,function(o,i){var a=t[o.v]={indegree:0,in:[],out:[],vs:[o.v],i};m(o.barycenter)||(a.barycenter=o.barycenter,a.weight=o.weight)}),s(r.edges(),function(o){var i=t[o.v],a=t[o.w];!m(i)&&!m(a)&&(a.indegree++,i.out.push(t[o.w]))});var n=R(t,function(o){return!o.indegree});return it(n)}function it(e){var r=[];function t(i){return function(a){a.merged||(m(a.barycenter)||m(i.barycenter)||a.barycenter>=i.barycenter)&&at(i,a)}}function n(i){return function(a){a.in.push(i),--a.indegree===0&&e.push(a)}}for(;e.length;){var o=e.pop();r.push(o),s(o.in.reverse(),t(o)),s(o.out,n(o))}return p(R(r,function(i){return!i.merged}),function(i){return T(i,["vs","i","barycenter","weight"])})}function at(e,r){var t=0,n=0;e.weight&&(t+=e.barycenter*e.weight,n+=e.weight),r.weight&&(t+=r.barycenter*r.weight,n+=r.weight),e.vs=r.vs.concat(e.vs),e.barycenter=t/n,e.weight=n,e.i=Math.min(r.i,e.i),r.merged=!0}function ut(e,r){var t=_r(e,function(f){return Object.prototype.hasOwnProperty.call(f,"barycenter")}),n=t.lhs,o=j(t.rhs,function(f){return-f.i}),i=[],a=0,u=0,d=0;n.sort(dt(!!r)),d=de(i,o,d),s(n,function(f){d+=f.vs.length,i.push(f.vs),a+=f.barycenter*f.weight,u+=f.weight,d=de(i,o,d)});var c={vs:N(i)};return u&&(c.barycenter=a/u,c.weight=u),c}function de(e,r,t){for(var n;r.length&&(n=M(r)).i<=t;)r.pop(),e.push(n.vs),t++;return t}function dt(e){return function(r,t){return r.barycentert.barycenter?1:e?t.i-r.i:r.i-t.i}}function Re(e,r,t,n){var o=e.children(r),i=e.node(r),a=i?i.borderLeft:void 0,u=i?i.borderRight:void 0,d={};a&&(o=R(o,function(l){return l!==a&&l!==u}));var c=nt(e,o);s(c,function(l){if(e.children(l.v).length){var w=Re(e,l.v,t,n);d[l.v]=w,Object.prototype.hasOwnProperty.call(w,"barycenter")&&st(l,w)}});var f=ot(c,t);ct(f,d);var h=ut(f,n);if(a&&(h.vs=N([a,h.vs,u]),e.predecessors(a).length)){var g=e.node(e.predecessors(a)[0]),v=e.node(e.predecessors(u)[0]);Object.prototype.hasOwnProperty.call(h,"barycenter")||(h.barycenter=0,h.weight=0),h.barycenter=(h.barycenter*h.weight+g.order+v.order)/(h.weight+2),h.weight+=2}return h}function ct(e,r){s(e,function(t){t.vs=N(t.vs.map(function(n){return r[n]?r[n].vs:n}))})}function st(e,r){m(e.barycenter)?(e.barycenter=r.barycenter,e.weight=r.weight):(e.barycenter=(e.barycenter*e.weight+r.barycenter*r.weight)/(e.weight+r.weight),e.weight+=r.weight)}function ft(e){var r=me(e),t=ce(e,E(1,r+1),"inEdges"),n=ce(e,E(r-1,-1,-1),"outEdges"),o=tt(e);se(e,o);for(var i=Number.POSITIVE_INFINITY,a,u=0,d=0;d<4;++u,++d){ht(u%2?t:n,u%4>=2),o=S(e);var c=et(e,o);ca||u>r[d].lim));for(c=d,d=n;(d=e.parent(d))!==c;)i.push(d);return{path:o.concat(i.reverse()),lca:c}}function lt(e){var r={},t=0;function n(o){var i=t;s(e.children(o),n),r[o]={low:i,lim:t++}}return s(e.children(),n),r}function pt(e,r){var t={};function n(o,i){var a=0,u=0,d=o.length,c=M(i);return s(i,function(f,h){var g=mt(e,f),v=g?e.node(g).order:d;(g||f===c)&&(s(i.slice(u,h+1),function(l){s(e.predecessors(l),function(w){var _=e.node(w),K=_.order;(Kc)&&je(t,g,f)})})}function o(i,a){var u=-1,d,c=0;return s(a,function(f,h){if(e.node(f).dummy==="border"){var g=e.predecessors(f);g.length&&(d=e.node(g[0]).order,n(a,c,h,u,d),c=h,u=d)}n(a,c,a.length,d,i.length)}),a}return C(r,o),t}function mt(e,r){if(e.node(r).dummy)return X(e.predecessors(r),function(t){return e.node(t).dummy})}function je(e,r,t){if(r>t){var n=r;r=t,t=n}var o=e[r];o||(e[r]=o={}),o[t]=!0}function bt(e,r,t){if(r>t){var n=r;r=t,t=n}return!!e[r]&&Object.prototype.hasOwnProperty.call(e[r],t)}function yt(e,r,t,n){var o={},i={},a={};return s(r,function(u){s(u,function(d,c){o[d]=d,i[d]=d,a[d]=c})}),s(r,function(u){var d=-1;s(u,function(c){var f=n(c);if(f.length){f=j(f,function(w){return a[w]});for(var h=(f.length-1)/2,g=Math.floor(h),v=Math.ceil(h);g<=v;++g){var l=f[g];i[c]===c&&d{var n=t(" buildLayoutGraph",()=>Bt(e));t(" runLayout",()=>Mt(n,t)),t(" updateInputGraph",()=>Tt(e,n))})}function Mt(e,r){r(" makeSpaceForEdgeLabels",()=>Yt(e)),r(" removeSelfEdges",()=>Ht(e)),r(" acyclic",()=>yr(e)),r(" nestingGraph.run",()=>Xr(e)),r(" rank",()=>Ar(we(e))),r(" injectEdgeLabelProxies",()=>zt(e)),r(" removeEmptyRanks",()=>Or(e)),r(" nestingGraph.cleanup",()=>Zr(e)),r(" normalizeRanks",()=>Nr(e)),r(" assignRankMinMax",()=>At(e)),r(" removeEdgeLabelProxies",()=>Dt(e)),r(" normalize.run",()=>Cr(e)),r(" parentDummyChains",()=>gt(e)),r(" addBorderSegments",()=>Pr(e)),r(" order",()=>ft(e)),r(" insertSelfEdges",()=>Jt(e)),r(" adjustCoordinateSystem",()=>Rr(e)),r(" position",()=>Rt(e)),r(" positionSelfEdges",()=>Kt(e)),r(" removeBorderNodes",()=>Zt(e)),r(" normalize.undo",()=>Sr(e)),r(" fixupEdgeLabelCoords",()=>Qt(e)),r(" undoCoordinateSystem",()=>jr(e)),r(" translateGraph",()=>Ut(e)),r(" assignNodeIntersects",()=>Xt(e)),r(" reversePoints",()=>Wt(e)),r(" acyclic.undo",()=>xr(e))}function Tt(e,r){s(e.nodes(),function(t){var n=e.node(t),o=r.node(t);n&&(n.x=o.x,n.y=o.y,r.children(t).length&&(n.width=o.width,n.height=o.height))}),s(e.edges(),function(t){var n=e.edge(t),o=r.edge(t);n.points=o.points,Object.prototype.hasOwnProperty.call(o,"x")&&(n.x=o.x,n.y=o.y)}),e.graph().width=r.graph().width,e.graph().height=r.graph().height}var Ct=["nodesep","edgesep","ranksep","marginx","marginy"],Lt={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},St=["acyclicer","ranker","rankdir","align"],$t=["width","height"],Ft={width:0,height:0},Gt=["minlen","weight","width","height","labeloffset"],Vt={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},qt=["labelpos"];function Bt(e){var r=new b({multigraph:!0,compound:!0}),t=Y(e.graph());return r.setGraph(A({},Lt,B(t,Ct),T(t,St))),s(e.nodes(),function(n){var o=Y(e.node(n));r.setNode(n,$e(B(o,$t),Ft)),r.setParent(n,e.parent(n))}),s(e.edges(),function(n){var o=Y(e.edge(n));r.setEdge(n,A({},Vt,B(o,Gt),T(o,qt)))}),r}function Yt(e){var r=e.graph();r.ranksep/=2,s(e.edges(),function(t){var n=e.edge(t);n.minlen*=2,n.labelpos.toLowerCase()!=="c"&&(r.rankdir==="TB"||r.rankdir==="BT"?n.width+=n.labeloffset:n.height+=n.labeloffset)})}function zt(e){s(e.edges(),function(r){var t=e.edge(r);if(t.width&&t.height){var n=e.node(r.v),o=e.node(r.w),i={rank:(o.rank-n.rank)/2+n.rank,e:r};O(e,"edge-proxy",i,"_ep")}})}function At(e){var r=0;s(e.nodes(),function(t){var n=e.node(t);n.borderTop&&(n.minRank=e.node(n.borderTop).rank,n.maxRank=e.node(n.borderBottom).rank,r=y(r,n.maxRank))}),e.graph().maxRank=r}function Dt(e){s(e.nodes(),function(r){var t=e.node(r);t.dummy==="edge-proxy"&&(e.edge(t.e).labelRank=t.rank,e.removeNode(r))})}function Ut(e){var r=Number.POSITIVE_INFINITY,t=0,n=Number.POSITIVE_INFINITY,o=0,i=e.graph(),a=i.marginx||0,u=i.marginy||0;function d(c){var f=c.x,h=c.y,g=c.width,v=c.height;r=Math.min(r,f-g/2),t=Math.max(t,f+g/2),n=Math.min(n,h-v/2),o=Math.max(o,h+v/2)}s(e.nodes(),function(c){d(e.node(c))}),s(e.edges(),function(c){var f=e.edge(c);Object.prototype.hasOwnProperty.call(f,"x")&&d(f)}),r-=a,n-=u,s(e.nodes(),function(c){var f=e.node(c);f.x-=r,f.y-=n}),s(e.edges(),function(c){var f=e.edge(c);s(f.points,function(h){h.x-=r,h.y-=n}),Object.prototype.hasOwnProperty.call(f,"x")&&(f.x-=r),Object.prototype.hasOwnProperty.call(f,"y")&&(f.y-=n)}),i.width=t-r+a,i.height=o-n+u}function Xt(e){s(e.edges(),function(r){var t=e.edge(r),n=e.node(r.v),o=e.node(r.w),i,a;t.points?(i=t.points[0],a=t.points[t.points.length-1]):(t.points=[],i=o,a=n),t.points.unshift(te(n,i)),t.points.push(te(o,a))})}function Qt(e){s(e.edges(),function(r){var t=e.edge(r);if(Object.prototype.hasOwnProperty.call(t,"x"))switch((t.labelpos==="l"||t.labelpos==="r")&&(t.width-=t.labeloffset),t.labelpos){case"l":t.x-=t.width/2+t.labeloffset;break;case"r":t.x+=t.width/2+t.labeloffset;break}})}function Wt(e){s(e.edges(),function(r){var t=e.edge(r);t.reversed&&t.points.reverse()})}function Zt(e){s(e.nodes(),function(r){if(e.children(r).length){var t=e.node(r),n=e.node(t.borderTop),o=e.node(t.borderBottom),i=e.node(M(t.borderLeft)),a=e.node(M(t.borderRight));t.width=Math.abs(a.x-i.x),t.height=Math.abs(o.y-n.y),t.x=i.x+t.width/2,t.y=n.y+t.height/2}}),s(e.nodes(),function(r){e.node(r).dummy==="border"&&e.removeNode(r)})}function Ht(e){s(e.edges(),function(r){if(r.v===r.w){var t=e.node(r.v);t.selfEdges||(t.selfEdges=[]),t.selfEdges.push({e:r,label:e.edge(r)}),e.removeEdge(r)}})}function Jt(e){var r=S(e);s(r,function(t){var n=0;s(t,function(o,i){var a=e.node(o);a.order=i+n,s(a.selfEdges,function(u){O(e,"selfedge",{width:u.label.width,height:u.label.height,rank:a.rank,order:i+ ++n,e:u.e,label:u.label},"_se")}),delete a.selfEdges})})}function Kt(e){s(e.nodes(),function(r){var t=e.node(r);if(t.dummy==="selfedge"){var n=e.node(t.e.v),o=n.x+n.width/2,i=n.y,a=t.x-o,u=n.height/2;e.setEdge(t.e,t.label),e.removeNode(r),t.label.points=[{x:o+2*a/3,y:i-u},{x:o+5*a/6,y:i-u},{x:o+a,y:i},{x:o+5*a/6,y:i+u},{x:o+2*a/3,y:i+u}],t.label.x=t.x,t.label.y=t.y}})}function B(e,r){return L(T(e,r),Number)}function Y(e){var r={};return s(e,function(t,n){r[n.toLowerCase()]=t}),r}export{on as i}; diff --git a/assets/chunks/linear-m73w_WNc-FCrKOMM3.W3QlvtjM.js b/assets/chunks/linear-m73w_WNc-FCrKOMM3.Dmb54ZXl.js similarity index 97% rename from assets/chunks/linear-m73w_WNc-FCrKOMM3.W3QlvtjM.js rename to assets/chunks/linear-m73w_WNc-FCrKOMM3.Dmb54ZXl.js index 180fbcf..4b87872 100644 --- a/assets/chunks/linear-m73w_WNc-FCrKOMM3.W3QlvtjM.js +++ b/assets/chunks/linear-m73w_WNc-FCrKOMM3.Dmb54ZXl.js @@ -1 +1 @@ -import{aN as N,aO as q,aP as b,aQ as $,aR as d}from"../app.DiEjJ8gz.js";import{a as j}from"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import{E as D,i as E,t as K,K as M}from"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";function g(r,n){return r==null||n==null?NaN:rn?1:r>=n?0:NaN}function O(r,n){return r==null||n==null?NaN:nr?1:n>=r?0:NaN}function x(r){let n,a,t;r.length!==2?(n=g,a=(i,c)=>g(r(i),c),t=(i,c)=>r(i)-c):(n=r===g||r===O?r:R,a=r,t=r);function u(i,c,e=0,h=i.length){if(e>>1;a(i[l],c)<0?e=l+1:h=l}while(e>>1;a(i[l],c)<=0?e=l+1:h=l}while(ee&&t(i[l-1],c)>-t(i[l],c)?l-1:l}return{left:u,center:o,right:f}}function R(){return 0}function T(r){return r===null?NaN:+r}const B=x(g),C=B.right;x(T).center;const F=Math.sqrt(50),P=Math.sqrt(10),Q=Math.sqrt(2);function p(r,n,a){const t=(n-r)/Math.max(0,a),u=Math.floor(Math.log10(t)),f=t/Math.pow(10,u),o=f>=F?10:f>=P?5:f>=Q?2:1;let i,c,e;return u<0?(e=Math.pow(10,-u)/o,i=Math.round(r*e),c=Math.round(n*e),i/en&&--c,e=-e):(e=Math.pow(10,u)*o,i=Math.round(r/e),c=Math.round(n/e),i*en&&--c),c0))return[];if(r===n)return[r];const t=n=u))return[];const i=f-u+1,c=new Array(i);if(t)if(o<0)for(let e=0;en&&(a=r,r=n,n=a),function(t){return Math.max(r,Math.min(n,t))}}function rr(r,n,a){var t=r[0],u=r[1],f=n[0],o=n[1];return u2?nr:rr,c=e=null,l}function l(s){return s==null||isNaN(s=+s)?f:(c||(c=i(r.map(t),n,a)))(t(o(s)))}return l.invert=function(s){return o(u((e||(e=i(n,r.map(t),N)))(s)))},l.domain=function(s){return arguments.length?(r=Array.from(s,_),h()):r.slice()},l.range=function(s){return arguments.length?(n=Array.from(s),h()):n.slice()},l.rangeRound=function(s){return n=Array.from(s),a=I,h()},l.clamp=function(s){return arguments.length?(o=s?!0:m,h()):o!==m},l.interpolate=function(s){return arguments.length?(a=s,h()):a},l.unknown=function(s){return arguments.length?(f=s,l):f},function(s,k){return t=s,u=k,h()}}function ar(){return er()(m,m)}function ur(r,n,a,t){var u=U(r,n,a),f;switch(t=D(t??",f"),t.type){case"s":{var o=Math.max(Math.abs(r),Math.abs(n));return t.precision==null&&!isNaN(f=W(u,o))&&(t.precision=f),E(t,o)}case"":case"e":case"g":case"p":case"r":{t.precision==null&&!isNaN(f=X(u,Math.max(Math.abs(r),Math.abs(n))))&&(t.precision=f-(t.type==="e"));break}case"f":case"%":{t.precision==null&&!isNaN(f=L(u))&&(t.precision=f-(t.type==="%")*2);break}}return K(t)}function or(r){var n=r.domain;return r.ticks=function(a){var t=n();return S(t[0],t[t.length-1],a??10)},r.tickFormat=function(a,t){var u=n();return ur(u[0],u[u.length-1],a??10,t)},r.nice=function(a){a==null&&(a=10);var t=n(),u=0,f=t.length-1,o=t[u],i=t[f],c,e,h=10;for(i0;){if(e=v(o,i,a),e===c)return t[u]=o,t[f]=i,n(t);if(e>0)o=Math.floor(o/e)*e,i=Math.ceil(i/e)*e;else if(e<0)o=Math.ceil(o*e)/e,i=Math.floor(i*e)/e;else break;c=e}return r},r}function ir(){var r=ar();return r.copy=function(){return tr(r,ir())},j.apply(r,arguments),or(r)}export{U as G,tr as e,ir as i,ar as u,x}; +import{aN as N,aO as q,aP as b,aQ as $,aR as d}from"../app.DfYWW83x.js";import{a as j}from"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import{E as D,i as E,t as K,K as M}from"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";function g(r,n){return r==null||n==null?NaN:rn?1:r>=n?0:NaN}function O(r,n){return r==null||n==null?NaN:nr?1:n>=r?0:NaN}function x(r){let n,a,t;r.length!==2?(n=g,a=(i,c)=>g(r(i),c),t=(i,c)=>r(i)-c):(n=r===g||r===O?r:R,a=r,t=r);function u(i,c,e=0,h=i.length){if(e>>1;a(i[l],c)<0?e=l+1:h=l}while(e>>1;a(i[l],c)<=0?e=l+1:h=l}while(ee&&t(i[l-1],c)>-t(i[l],c)?l-1:l}return{left:u,center:o,right:f}}function R(){return 0}function T(r){return r===null?NaN:+r}const B=x(g),C=B.right;x(T).center;const F=Math.sqrt(50),P=Math.sqrt(10),Q=Math.sqrt(2);function p(r,n,a){const t=(n-r)/Math.max(0,a),u=Math.floor(Math.log10(t)),f=t/Math.pow(10,u),o=f>=F?10:f>=P?5:f>=Q?2:1;let i,c,e;return u<0?(e=Math.pow(10,-u)/o,i=Math.round(r*e),c=Math.round(n*e),i/en&&--c,e=-e):(e=Math.pow(10,u)*o,i=Math.round(r/e),c=Math.round(n/e),i*en&&--c),c0))return[];if(r===n)return[r];const t=n=u))return[];const i=f-u+1,c=new Array(i);if(t)if(o<0)for(let e=0;en&&(a=r,r=n,n=a),function(t){return Math.max(r,Math.min(n,t))}}function rr(r,n,a){var t=r[0],u=r[1],f=n[0],o=n[1];return u2?nr:rr,c=e=null,l}function l(s){return s==null||isNaN(s=+s)?f:(c||(c=i(r.map(t),n,a)))(t(o(s)))}return l.invert=function(s){return o(u((e||(e=i(n,r.map(t),N)))(s)))},l.domain=function(s){return arguments.length?(r=Array.from(s,_),h()):r.slice()},l.range=function(s){return arguments.length?(n=Array.from(s),h()):n.slice()},l.rangeRound=function(s){return n=Array.from(s),a=I,h()},l.clamp=function(s){return arguments.length?(o=s?!0:m,h()):o!==m},l.interpolate=function(s){return arguments.length?(a=s,h()):a},l.unknown=function(s){return arguments.length?(f=s,l):f},function(s,k){return t=s,u=k,h()}}function ar(){return er()(m,m)}function ur(r,n,a,t){var u=U(r,n,a),f;switch(t=D(t??",f"),t.type){case"s":{var o=Math.max(Math.abs(r),Math.abs(n));return t.precision==null&&!isNaN(f=W(u,o))&&(t.precision=f),E(t,o)}case"":case"e":case"g":case"p":case"r":{t.precision==null&&!isNaN(f=X(u,Math.max(Math.abs(r),Math.abs(n))))&&(t.precision=f-(t.type==="e"));break}case"f":case"%":{t.precision==null&&!isNaN(f=L(u))&&(t.precision=f-(t.type==="%")*2);break}}return K(t)}function or(r){var n=r.domain;return r.ticks=function(a){var t=n();return S(t[0],t[t.length-1],a??10)},r.tickFormat=function(a,t){var u=n();return ur(u[0],u[u.length-1],a??10,t)},r.nice=function(a){a==null&&(a=10);var t=n(),u=0,f=t.length-1,o=t[u],i=t[f],c,e,h=10;for(i0;){if(e=v(o,i,a),e===c)return t[u]=o,t[f]=i,n(t);if(e>0)o=Math.floor(o/e)*e,i=Math.ceil(i/e)*e;else if(e<0)o=Math.ceil(o*e)/e,i=Math.floor(i*e)/e;else break;c=e}return r},r}function ir(){var r=ar();return r.copy=function(){return tr(r,ir())},j.apply(r,arguments),or(r)}export{U as G,tr as e,ir as i,ar as u,x}; diff --git a/assets/chunks/metadata.acf09505.js b/assets/chunks/metadata.acf09505.js new file mode 100644 index 0000000..e1de579 --- /dev/null +++ b/assets/chunks/metadata.acf09505.js @@ -0,0 +1 @@ +window.__VP_HASH_MAP__=JSON.parse("{\"about_growth_inner-experience.md\":\"BISUXRTm\",\"about_growth_outer-experience.md\":\"DniEKTlV\",\"about_growth_weight-loss.md\":\"n7uAYRkF\",\"about_me.md\":\"BZPZvAJ3\",\"ai-coding_ai-change-work-workflow.md\":\"Dfds8zzd\",\"ai-coding_ai-engineer-capability.md\":\"DZPwC1tg\",\"ai-coding_ai-native.md\":\"CGQ4u-7o\",\"ai-coding_claude-code-deep-dive.md\":\"TnvtJZZ3\",\"ai-coding_overview.md\":\"72rTeUxR\",\"ai-coding_resources.md\":\"BEyzO6Q5\",\"ai_agent_claude-agent-sdk-basic-build.md\":\"DyF6SguD\",\"ai_agent_composition-ai-components.md\":\"D63rfIxj\",\"ai_agent_deepresearch-agent.md\":\"BN6_LZWf\",\"ai_agent_math-bot.md\":\"BXhAqWyU\",\"ai_agent_overview.md\":\"BZYkese5\",\"ai_agent_planning-module.md\":\"CTDZNcds\",\"ai_agent_poetry-bot.md\":\"Djc9_lGV\",\"ai_agent_skills-practice-summary.md\":\"CsJjSRg1\",\"ai_full-stack-builder.md\":\"CtpFpp0a\",\"ai_llm-api-resources.md\":\"W2VuMWN0\",\"ai_overview.md\":\"DWoy5IjF\",\"ai_tools-assistant.md\":\"r9bHqTO_\",\"categories.md\":\"CVTxAp5y\",\"fullstack_css-engineering.md\":\"BlaebeRp\",\"fullstack_decode-es-modules.md\":\"CdNqd_Yi\",\"fullstack_different-module-programming-specifications.md\":\"C4s6GPsc\",\"fullstack_frontend-module-programming-basic.md\":\"BASiLfEG\",\"fullstack_frontend-rendering-scheme.md\":\"DbEMkvmS\",\"fullstack_full-stack-resources.md\":\"B8aCWi5d\",\"fullstack_jamstack.md\":\"5AOhPkSE\",\"fullstack_module-programming-practice-guide.md\":\"GX-fmZot\",\"fullstack_module-programming-principles-best-practices.md\":\"Kt0aczUY\",\"fullstack_networking-polling-optimization.md\":\"CsfHVMMa\",\"fullstack_networking-protocol-selection-guide.md\":\"M0GzKHtc\",\"fullstack_networking-sse-practice.md\":\"BrfbBg9x\",\"fullstack_next-deep-dive.md\":\"G2zDSoIv\",\"fullstack_nodejs-module-programming-summary.md\":\"ChyZglwn\",\"fullstack_occams-razor-software-design.md\":\"BxaCCGSA\",\"fullstack_overview.md\":\"D8h6Ek2v\",\"fullstack_react-design-philosophy-ai-augmented.md\":\"B47j5XxZ\",\"fullstack_server-state-management.md\":\"BbD9tD6W\",\"fullstack_typescript-compilation-debugging-guide.md\":\"g10WDisT\",\"fullstack_typescript-generic-types.md\":\"AQyoKeOl\",\"fullstack_typescript-module-programming-enhancement.md\":\"B6VJ067B\",\"fullstack_union-types-vs-intersection-types.md\":\"CeKTWuwd\",\"growth_books.md\":\"DON7D586\",\"growth_distinguish-useful-information.md\":\"Bk0b5058\",\"growth_reading-tips.md\":\"DvPd5P4v\",\"index.md\":\"6JFvWEIq\",\"insight-labs_ai-insight-engine.md\":\"FNPXwM48\",\"insight-labs_overview.md\":\"DQWu6elD\",\"insight-labs_repo-insight_a2ui.md\":\"Dgw3F5ap\",\"insight-labs_repo-insight_amis.md\":\"CM72pf5M\",\"insight-labs_repo-insight_anime.md\":\"GRpRGyDu\",\"insight-labs_repo-insight_echarts.md\":\"TPWYiRaL\",\"insight-labs_repo-insight_fetch-event-source.md\":\"DAv6uGU5\",\"insight-labs_repo-insight_konva.md\":\"j78KHmOK\",\"insight-labs_repo-insight_lottie-web.md\":\"D3b_s-CU\",\"insight-labs_repo-insight_open-cli.md\":\"BUMPTS97\",\"insight-labs_repo-insight_overview.md\":\"BodPHsDF\",\"insight-labs_repo-insight_pretext.md\":\"-L6NQ6rn\",\"insight-labs_repo-insight_superpowers.md\":\"jHsaGjp1\",\"insight-labs_repo-insight_three-js.md\":\"CXlVZ59K\",\"insight-labs_repo-insight_vercel-ai-sdk.md\":\"B5LIrYqb\",\"product-sense_ai-native-composite-talents.md\":\"BhamxEDf\",\"product-sense_engineer-build-product-sense.md\":\"BnO1b4Ek\",\"product-sense_insight-model.md\":\"DpyHnOA_\",\"product-sense_overview.md\":\"DCslZgFe\",\"product-sense_perplexity-knowledge-worker.md\":\"CLR7T_Ls\",\"product-sense_small-rule-learn.md\":\"DxfkWbog\",\"product-sense_using-economics-thinking.md\":\"C0NzUwHT\",\"tags.md\":\"B-0eiYZN\"}");function deserializeFunctions(r){return Array.isArray(r)?r.map(deserializeFunctions):typeof r=="object"&&r!==null?Object.keys(r).reduce((t,n)=>(t[n]=deserializeFunctions(r[n]),t),{}):typeof r=="string"&&r.startsWith("_vp-fn_")?new Function(`return ${r.slice(7)}`)():r};window.__VP_SITE_DATA__=deserializeFunctions(JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"Insight Stack\",\"description\":\"数字花园,聚焦全栈工程、产品思维与 LLMs,探讨 AI 与工程实践的交叉领域\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"teekTheme\":true,\"teekHome\":true,\"vpHome\":false,\"sidebarTrigger\":true,\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"banner\":{\"enabled\":true,\"name\":\"\",\"features\":[],\"bgStyle\":\"pure\",\"pureBgColor\":\"#F7F5FA\",\"imgSrc\":[\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/image.png\"],\"mask\":false,\"descStyle\":\"switch\",\"description\":[\"Insight Stack = 工程基座 × 产品思维 × AI 原力\"]},\"homeCardListPosition\":\"right\",\"homeCardSort\":[\"topArticle\",\"category\",\"tag\",\"docAnalysis\",\"friendLink\"],\"topArticle\":{\"enabled\":true,\"limit\":3,\"autoPage\":false,\"pageSpeed\":4000,\"dateFormat\":\"yyyy-MM-dd\"},\"category\":{\"enabled\":false,\"limit\":8,\"autoPage\":false,\"pageSpeed\":4000},\"friendLink\":{\"enabled\":false,\"limit\":5,\"list\":[{\"avatar\":\"https://vitepress.dev/vitepress-logo-large.svg\",\"name\":\"VitePress\",\"desc\":\"Vue 驱动的静态站点生成器\",\"link\":\"https://vitepress.dev/\"},{\"avatar\":\"https://vp.teek.top/teek-logo-large.png\",\"name\":\"vitepress-theme-teek\",\"desc\":\"Teek官网\",\"link\":\"https://vp.teek.top/\"}]},\"docAnalysis\":{\"enabled\":false},\"footerInfo\":{\"theme\":{\"name\":\"Theme By Teek@1.5.6\"},\"copyright\":{\"createYear\":2017,\"suffix\":\"Sqliang\"}},\"codeBlock\":{\"enabled\":false,\"collapseHeight\":700,\"overlay\":true,\"overlayHeight\":400,\"copiedDone\":\"_vp-fn_(TkMessage) => TkMessage.success(\\\"\\\\u590D\\\\u5236\\\\u6210\\\\u529F\\\\uFF01\\\")\"},\"articleShare\":{\"enabled\":true},\"articleUpdate\":{\"enabled\":false},\"post\":{},\"themeEnhance\":{\"layoutSwitch\":{\"defaultMode\":\"fullWidth\"},\"spotlight\":{\"disabled\":true}},\"toComment\":{\"enabled\":false,\"done\":\"_vp-fn_(TkMessage) => TkMessage.success(\\\"\\\\u5DF2\\\\u62B5\\\\u8FBE\\\\u8BC4\\\\u8BBA\\\\u533A\\\")\"},\"appreciation\":{\"position\":\"doc-after\",\"options\":{\"icon\":\"weChatPay\",\"expandTitle\":\"打赏支持\",\"collapseTitle\":\"下次一定\",\"content\":\"\",\"expand\":false}},\"logo\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/favicon.png\",\"darkModeSwitchLabel\":\"主题\",\"sidebarMenuLabel\":\"菜单\",\"returnToTopLabel\":\"返回顶部\",\"lastUpdatedText\":\"上次更新时间\",\"outline\":{\"level\":[2,4],\"label\":\"本页导航\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"Insight Labs\",\"items\":[{\"text\":\"\\n
\\n AI 驱动知识库建设\\n
\\n \",\"link\":\"/insight-labs/overview\"},{\"text\":\"\\n
\\n Daily AI Insight Engine\\n
\\n \",\"link\":\"/insight-labs/ai-insight-engine\"},{\"text\":\"\\n
\\n Repo Insight Engine\\n
\\n \",\"link\":\"/insight-labs/repo-insight/overview\"}]},{\"text\":\"AI 探索与实践\",\"items\":[{\"text\":\"\\n
\\n 全景一览\\n
\\n \",\"link\":\"/ai/overview\"},{\"text\":\"\\n
\\n AI 编程专题\\n
\\n \",\"link\":\"/ai-coding/overview\"},{\"text\":\"\\n
\\n Agent 系列\\n
\\n \",\"link\":\"/ai/agent/overview\"},{\"text\":\"\\n
\\n 社区活动与实践小项目\\n
\\n \",\"link\":\"/ai/agent/deepresearch-agent\"},{\"text\":\"\\n
\\n 工具与资源推荐\\n
\\n \",\"link\":\"/ai/tools-assistant\"}]},{\"text\":\"全栈\",\"items\":[{\"text\":\"\\n
\\n 全景一览\\n
\\n \",\"link\":\"/fullstack/overview\"},{\"text\":\"\\n
\\n 前端工程\\n
\\n \",\"link\":\"/fullstack/react-design-philosophy-ai-augmented\"},{\"text\":\"\\n
\\n 网络与通信\\n
\\n \",\"link\":\"/fullstack/networking-protocol-selection-guide\"},{\"text\":\"\\n
\\n 全栈基础素养\\n
\\n \",\"link\":\"/fullstack/occams-razor-software-design\"},{\"text\":\"\\n
\\n 工具与资源推荐\\n
\\n \",\"link\":\"/fullstack/full-stack-resources\"}]},{\"text\":\"产品思维\",\"items\":[{\"text\":\"\\n
\\n 全景一览\\n
\\n \",\"link\":\"/product-sense/overview\"},{\"text\":\"\\n
\\n 产品观察与分析\\n
\\n \",\"link\":\"/product-sense/perplexity-knowledge-worker\"},{\"text\":\"\\n
\\n 新 T 型人\\n
\\n \",\"link\":\"/product-sense/ai-native-composite-talents\"},{\"text\":\"\\n
\\n 产品创造与商业化\\n
\\n \",\"link\":\"/product-sense/small-rule-learn\"},{\"text\":\"\\n
\\n 方法论\\n
\\n \",\"link\":\"/product-sense/insight-model\"}]},{\"text\":\"悦读拾光\",\"items\":[{\"text\":\"好书推荐\",\"link\":\" /growth/books\"},{\"text\":\"读书“三要”和“三不要”\",\"link\":\"/growth/reading-tips\"},{\"text\":\"如何甄别真正有用的信息\",\"link\":\"/growth/distinguish-useful-information\"}]},{\"text\":\"关于\",\"items\":[{\"text\":\"关于我\",\"link\":\"/about/me\"},{\"text\":\"关于本站\",\"link\":\"/about/me#关于本站\"},{\"text\":\"成长随笔\",\"link\":\"/about/growth/outer-experience\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/sqliang\"},{\"icon\":{\"svg\":\"\"},\"link\":\"mailto:hfutsqliang@qq.com\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":{\"/fullstack/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/fullstack/overview.md\"},{\"text\":\"前端工程\",\"collapsed\":true,\"items\":[{\"text\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"collapsed\":true,\"link\":\"/fullstack/react-design-philosophy-ai-augmented.md\"},{\"text\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"collapsed\":true,\"link\":\"/fullstack/css-engineering.md\"},{\"text\":\"JAMStack 梳理与实践指南\",\"collapsed\":true,\"link\":\"/fullstack/jamstack.md\"},{\"text\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"collapsed\":true,\"link\":\"/fullstack/frontend-rendering-scheme.md\"},{\"text\":\"Next.js 深度解析:从架构理念到工程实践\",\"collapsed\":true,\"link\":\"/fullstack/next-deep-dive.md\"},{\"text\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"collapsed\":true,\"link\":\"/fullstack/server-state-management.md\"}]},{\"text\":\"网络与通信\",\"collapsed\":true,\"items\":[{\"text\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"collapsed\":true,\"link\":\"/fullstack/networking-protocol-selection-guide.md\"},{\"text\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"collapsed\":true,\"link\":\"/fullstack/networking-sse-practice.md\"},{\"text\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"collapsed\":true,\"link\":\"/fullstack/networking-polling-optimization.md\"}]},{\"text\":\"全栈基础素养\",\"collapsed\":true,\"items\":[{\"text\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"collapsed\":true,\"link\":\"/fullstack/occams-razor-software-design.md\"},{\"text\":\"TypeScript 编译与调试完全指南\",\"collapsed\":true,\"link\":\"/fullstack/typescript-compilation-debugging-guide.md\"},{\"text\":\"深入理解 TypeScript 联合类型与交叉类型\",\"collapsed\":true,\"link\":\"/fullstack/union-types-vs-intersection-types.md\"},{\"text\":\"聊一聊 TypeScript 中的泛型\",\"collapsed\":true,\"link\":\"/fullstack/typescript-generic-types.md\"},{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-practice-guide.md\"},{\"text\":\"模块化编程初体验:概念、演进与设计模式\",\"collapsed\":true,\"link\":\"/fullstack/frontend-module-programming-basic.md\"},{\"text\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"collapsed\":true,\"link\":\"/fullstack/different-module-programming-specifications.md\"},{\"text\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"collapsed\":true,\"link\":\"/fullstack/decode-es-modules.md\"},{\"text\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"collapsed\":true,\"link\":\"/fullstack/typescript-module-programming-enhancement.md\"},{\"text\":\"模块化编程原则梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-principles-best-practices.md\"},{\"text\":\"Node.js 模块化编程梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/nodejs-module-programming-summary.md\"}]}]},{\"text\":\"工具与资源推荐\",\"collapsed\":true,\"items\":[{\"text\":\"全栈技术资源推荐\",\"collapsed\":true,\"link\":\"/fullstack/full-stack-resources.md\"}]}],\"/product-sense/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/product-sense/overview.md\"},{\"text\":\"产品观察与分析\",\"collapsed\":true,\"items\":[{\"text\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"collapsed\":true,\"link\":\"/product-sense/perplexity-knowledge-worker.md\"}]},{\"text\":\"新 T 型人\",\"collapsed\":true,\"items\":[{\"text\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"collapsed\":true,\"link\":\"/product-sense/ai-native-composite-talents.md\"},{\"text\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"collapsed\":true,\"link\":\"/product-sense/engineer-build-product-sense.md\"}]},{\"text\":\"产品创造与商业化\",\"collapsed\":true,\"items\":[{\"text\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"collapsed\":true,\"link\":\"/product-sense/small-rule-learn.md\"}]},{\"text\":\"方法论\",\"collapsed\":true,\"items\":[{\"text\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"collapsed\":true,\"link\":\"/product-sense/insight-model.md\"},{\"text\":\"用经济学思维做产品\",\"collapsed\":true,\"link\":\"/product-sense/using-economics-thinking.md\"}]}],\"/ai/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/ai/overview.md\"},{\"text\":\"Agent 系列\",\"collapsed\":true,\"items\":[{\"text\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"collapsed\":true,\"link\":\"/ai/agent/overview.md\"},{\"text\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"collapsed\":true,\"link\":\"/ai/agent/planning-module.md\"},{\"text\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"collapsed\":true,\"link\":\"/ai/agent/composition-ai-components.md\"},{\"text\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"collapsed\":true,\"link\":\"/ai/agent/skills-practice-summary.md\"}]},{\"text\":\"社区活动与实践小项目\",\"collapsed\":true,\"items\":[{\"text\":\"做好 AI 时代的 Full Stack Builder\",\"collapsed\":true,\"link\":\"/ai/full-stack-builder.md\"},{\"text\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"collapsed\":true,\"link\":\"/ai/agent/deepresearch-agent.md\"},{\"text\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"collapsed\":true,\"link\":\"/ai/agent/claude-agent-sdk-basic-build.md\"},{\"text\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"collapsed\":true,\"link\":\"/ai/agent/math-bot.md\"},{\"text\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"collapsed\":true,\"link\":\"/ai/agent/poetry-bot.md\"}]},{\"text\":\"资源与工具推荐\",\"collapsed\":true,\"items\":[{\"text\":\"好用的 AI 助手与工作站推荐\",\"collapsed\":true,\"link\":\"/ai/tools-assistant.md\"},{\"text\":\"LLM API 平台推荐与选型指南\",\"collapsed\":true,\"link\":\"/ai/llm-api-resources.md\"}]}],\"/ai-coding/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/ai-coding/overview.md\"},{\"text\":\"AI Native 工程思维\",\"collapsed\":true,\"items\":[{\"text\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"collapsed\":true,\"link\":\"/ai-coding/ai-change-work-workflow.md\"},{\"text\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"collapsed\":true,\"link\":\"/ai-coding/ai-engineer-capability.md\"},{\"text\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"collapsed\":true,\"link\":\"/ai-coding/ai-native.md\"}]},{\"text\":\"AI 编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"AI 编程工具与资源推荐\",\"collapsed\":true,\"link\":\"/ai-coding/resources.md\"},{\"text\":\"从 .claude 文件夹读懂 Claude Code\",\"collapsed\":true,\"link\":\"/ai-coding/claude-code-deep-dive.md\"}]}],\"/growth/\":[{\"text\":\"好书推荐\",\"collapsed\":true,\"link\":\"/growth/books.md\"},{\"text\":\"读书“三要”和“三不要”\",\"collapsed\":true,\"link\":\"/growth/reading-tips.md\"},{\"text\":\"如何甄别真正有用的信息\",\"collapsed\":true,\"link\":\"/growth/distinguish-useful-information.md\"}],\"/insight-labs/\":[{\"text\":\"AI 驱动的体系化知识库建设\",\"collapsed\":true,\"link\":\"/insight-labs/overview.md\"},{\"text\":\"Daily AI Insight Engine\",\"collapsed\":true,\"link\":\"/insight-labs/ai-insight-engine.md\"},{\"text\":\"Repo Insight Engine\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/overview.md\"},{\"text\":\"Reop Insight Reports\",\"collapsed\":true,\"items\":[{\"text\":\"amis 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/amis.md\"},{\"text\":\"konva 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/konva.md\"},{\"text\":\"ECharts 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/echarts.md\"},{\"text\":\"Lottie Web 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/lottie-web.md\"},{\"text\":\"Three.js 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/three-js.md\"},{\"text\":\"Pretext 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/pretext.md\"},{\"text\":\"Animejs 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/anime.md\"},{\"text\":\"OpenCLI 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/open-cli.md\"},{\"text\":\"fetch-event-source 源码解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/fetch-event-source.md\"},{\"text\":\"vercel-ai-sdk 项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/vercel-ai-sdk.md\"},{\"text\":\"A2UI 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/a2ui.md\"},{\"text\":\"superpowers 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/superpowers.md\"}]}],\"/about/\":[{\"text\":\"关于我\",\"collapsed\":true,\"link\":\"/about/me.md\"},{\"text\":\"成长随笔\",\"collapsed\":true,\"items\":[{\"text\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"collapsed\":true,\"link\":\"/about/growth/outer-experience.md\"},{\"text\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"collapsed\":true,\"link\":\"/about/growth/inner-experience.md\"},{\"text\":\"用科学与迭代改善的方式推动减肥这件小事\",\"collapsed\":true,\"link\":\"/about/growth/weight-loss.md\"}]}],\"/categories.md/\":[{\"text\":\"分类\",\"collapsed\":true,\"link\":\"/categories.md\"},{\"text\":\"标签\",\"collapsed\":true,\"link\":\"/tags.md\"}]},\"docAnalysisInfo\":{\"fileList\":[{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/05.Next.js.md\",\"relativePath\":\"01.全栈/40.前端工程/05.Next.js.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/00.overview.md\",\"relativePath\":\"21.AI 编程专题/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/00.overview.md\",\"relativePath\":\"31.Insight Labs/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/01.优质资讯情报引擎.md\",\"relativePath\":\"31.Insight Labs/01.优质资讯情报引擎.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/10.repo-insight-overview.md\",\"relativePath\":\"31.Insight Labs/10.repo-insight-overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/01.amis.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/01.amis.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/02.konva.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/02.konva.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/03.echarts.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/03.echarts.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/05.three.js.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/05.three.js.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/06.pretext.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/06.pretext.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/07.anime.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/07.anime.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/13.a2ui.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/13.a2ui.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/14.superpowers.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/14.superpowers.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"}],\"totalFileWords\":290975,\"eachFileWords\":[{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},\"wordCount\":411,\"readingTime\":\"1.6m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},\"wordCount\":5038,\"readingTime\":\"17.6m\",\"frontmatter\":{\"date\":{},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},\"wordCount\":9015,\"readingTime\":\"34.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},\"wordCount\":3628,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},\"wordCount\":8241,\"readingTime\":\"29.7m\",\"frontmatter\":{\"date\":{},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/05.Next.js.md\",\"relativePath\":\"01.全栈/40.前端工程/05.Next.js.md\"},\"wordCount\":5433,\"readingTime\":\"20.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},\"wordCount\":4949,\"readingTime\":\"19.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},\"wordCount\":6770,\"readingTime\":\"23.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},\"wordCount\":6634,\"readingTime\":\"26.8m\",\"frontmatter\":{\"date\":{},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},\"wordCount\":3295,\"readingTime\":\"12.1m\",\"frontmatter\":{\"date\":{},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},\"wordCount\":3233,\"readingTime\":\"11.6m\",\"frontmatter\":{\"date\":{},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},\"wordCount\":5040,\"readingTime\":\"20m\",\"frontmatter\":{\"date\":{},\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\"},\"wordCount\":5526,\"readingTime\":\"22.6m\",\"frontmatter\":{\"date\":{},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},\"wordCount\":5614,\"readingTime\":\"21.5m\",\"frontmatter\":{\"date\":{},\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},\"wordCount\":7414,\"readingTime\":\"30.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},\"wordCount\":2099,\"readingTime\":\"7.8m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},\"wordCount\":1889,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},\"wordCount\":1767,\"readingTime\":\"7.5m\",\"frontmatter\":{\"date\":{},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},\"wordCount\":1576,\"readingTime\":\"6.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},\"wordCount\":1303,\"readingTime\":\"4.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},\"wordCount\":1240,\"readingTime\":\"4.7m\",\"frontmatter\":{\"date\":{},\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},\"wordCount\":7425,\"readingTime\":\"30.1m\",\"frontmatter\":{\"date\":{},\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},\"wordCount\":311,\"readingTime\":\"1.2m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},\"wordCount\":1833,\"readingTime\":\"6.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},\"wordCount\":1994,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},\"wordCount\":4356,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},\"wordCount\":1982,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},\"wordCount\":2572,\"readingTime\":\"9m\",\"frontmatter\":{\"date\":{},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},\"wordCount\":3150,\"readingTime\":\"10.7m\",\"frontmatter\":{\"date\":{},\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},\"wordCount\":316,\"readingTime\":\"1.3m\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":{},\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},\"wordCount\":6363,\"readingTime\":\"22.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},\"wordCount\":3028,\"readingTime\":\"10.6m\",\"frontmatter\":{\"date\":{},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},\"wordCount\":2685,\"readingTime\":\"9.4m\",\"frontmatter\":{\"date\":{},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},\"wordCount\":3915,\"readingTime\":\"14.6m\",\"frontmatter\":{\"date\":{},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\"},\"wordCount\":3176,\"readingTime\":\"11.5m\",\"frontmatter\":{\"date\":{},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},\"wordCount\":2889,\"readingTime\":\"11m\",\"frontmatter\":{\"date\":{},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},\"wordCount\":2778,\"readingTime\":\"11.2m\",\"frontmatter\":{\"date\":{},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},\"wordCount\":2122,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},\"wordCount\":4145,\"readingTime\":\"14.2m\",\"frontmatter\":{\"date\":{},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},\"wordCount\":5439,\"readingTime\":\"20.5m\",\"frontmatter\":{\"date\":{},\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},\"wordCount\":3528,\"readingTime\":\"13.6m\",\"frontmatter\":{\"date\":{},\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/00.overview.md\",\"relativePath\":\"21.AI 编程专题/00.overview.md\"},\"wordCount\":305,\"readingTime\":\"1.3m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},\"wordCount\":4407,\"readingTime\":\"15.2m\",\"frontmatter\":{\"date\":{},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},\"wordCount\":3614,\"readingTime\":\"12.9m\",\"frontmatter\":{\"date\":{},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},\"wordCount\":2017,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\"},\"wordCount\":3472,\"readingTime\":\"13.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},\"wordCount\":5798,\"readingTime\":\"21.4m\",\"frontmatter\":{\"date\":{},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},\"wordCount\":1847,\"readingTime\":\"6.4m\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":{},\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},\"wordCount\":3593,\"readingTime\":\"12m\",\"frontmatter\":{\"date\":{},\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},\"wordCount\":2443,\"readingTime\":\"8.2m\",\"frontmatter\":{\"date\":{},\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/00.overview.md\",\"relativePath\":\"31.Insight Labs/00.overview.md\"},\"wordCount\":3007,\"readingTime\":\"11.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/01.优质资讯情报引擎.md\",\"relativePath\":\"31.Insight Labs/01.优质资讯情报引擎.md\"},\"wordCount\":2103,\"readingTime\":\"8.2m\",\"frontmatter\":{\"date\":{},\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/10.repo-insight-overview.md\",\"relativePath\":\"31.Insight Labs/10.repo-insight-overview.md\"},\"wordCount\":1442,\"readingTime\":\"6m\",\"frontmatter\":{\"date\":{},\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/01.amis.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/01.amis.md\"},\"wordCount\":7693,\"readingTime\":\"32.5m\",\"frontmatter\":{\"date\":{},\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/02.konva.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/02.konva.md\"},\"wordCount\":6321,\"readingTime\":\"27.9m\",\"frontmatter\":{\"date\":{},\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/03.echarts.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/03.echarts.md\"},\"wordCount\":6736,\"readingTime\":\"27.9m\",\"frontmatter\":{\"date\":{},\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\"},\"wordCount\":9092,\"readingTime\":\"37.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/05.three.js.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/05.three.js.md\"},\"wordCount\":8107,\"readingTime\":\"35.2m\",\"frontmatter\":{\"date\":{},\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/06.pretext.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/06.pretext.md\"},\"wordCount\":7623,\"readingTime\":\"31.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/07.anime.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/07.anime.md\"},\"wordCount\":7072,\"readingTime\":\"30.8m\",\"frontmatter\":{\"date\":{},\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\"},\"wordCount\":4917,\"readingTime\":\"21.8m\",\"frontmatter\":{\"date\":{},\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\"},\"wordCount\":3025,\"readingTime\":\"12.7m\",\"frontmatter\":{\"date\":{},\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\"},\"wordCount\":4305,\"readingTime\":\"19.2m\",\"frontmatter\":{\"date\":{},\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/13.a2ui.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/13.a2ui.md\"},\"wordCount\":8691,\"readingTime\":\"36.7m\",\"frontmatter\":{\"date\":{},\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/14.superpowers.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/14.superpowers.md\"},\"wordCount\":7430,\"readingTime\":\"30.8m\",\"frontmatter\":{\"date\":{},\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},\"wordCount\":1636,\"readingTime\":\"5.9m\",\"frontmatter\":{\"date\":{},\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},\"wordCount\":6206,\"readingTime\":\"22.2m\",\"frontmatter\":{\"date\":{},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},\"wordCount\":9942,\"readingTime\":\"33.9m\",\"frontmatter\":{\"date\":{},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"},\"wordCount\":4009,\"readingTime\":\"13.5m\",\"frontmatter\":{\"date\":{},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]}}],\"lastCommitTime\":\"2026-06-02 20:09:00\"},\"catalogues\":{\"arr\":[],\"map\":{},\"inv\":{}},\"posts\":{\"allPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"},{\"url\":\"/categories\",\"relativePath\":\"/@pages/categoriesPage\",\"frontmatter\":{\"title\":\"分类\",\"categoriesPage\":true,\"permalink\":\"/categories\",\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"分类\",\"date\":\"2026-06-02 12:09:12\",\"capture\":\"\"},{\"url\":\"/tags\",\"relativePath\":\"/@pages/tagsPage\",\"frontmatter\":{\"title\":\"标签\",\"permalink\":\"/tags\",\"tagsPage\":true,\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"标签\",\"date\":\"2026-06-02 12:09:12\",\"capture\":\"\"},{\"url\":\"/\",\"relativePath\":\"/\",\"frontmatter\":{\"layout\":\"home\",\"title\":\"首页\",\"titleTemplate\":\":title | Insight Stack Blog\",\"tk\":{\"teekHome\":true,\"features\":[{\"stage\":\"洞察引擎\",\"stageEn\":\"Collect\",\"icon\":\"cloud-download\",\"desc\":\"优质资讯自动抓取、前沿技术追踪、开源项目挖掘\",\"items\":[{\"title\":\"Daily AI Insight Engine\",\"details\":\"旨在解决信息过载问题,打造自动聚合、深度解读、洞见提取的 AI 引擎。覆盖学术论文、技术博客、科技媒体、社区讨论四大信息源,支持中英文双语。\",\"link\":\"/insight-labs/ai-insight-engine\",\"tags\":[\"Automation\",\"Agent\"]},{\"title\":\"Repo Insight Engine\",\"details\":\"AST 与大模型结合的 GitHub 源码架构分析利器,将碎片化的源码阅读转化为系统性的技术理解,用来帮助开发者快速理解项目架构、功能模块、代码质量等。\",\"link\":\"/insight-labs/repo-insight/overview\",\"tags\":[\"AST\",\"LLM\",\"Agent\",\"Code Analysis\"]}]},{\"stage\":\"知识内化\",\"stageEn\":\"Knowledge\",\"icon\":\"brain\",\"desc\":\"碎片洞察 → 原子笔记 → 概念网络,每一条笔记都在为认知复利加速。\",\"items\":[{\"title\":\"AI 驱动的体系化知识库建设\",\"details\":\"LLM Wiki + Library 双轨制知识管理规范,融合卡片盒笔记法、Obsidian、AI 等,构建可持续演化的个人知识网络。将 AI 引擎的碎片洞察转化为节点,通过卡片盒笔记法编织概念网络,实现从信息到知识的跃迁。\",\"link\":\"/insight-labs/overview\",\"tags\":[\"Obsidian\",\"Zettelkasten\",\"Knowledge Engineering\"],\"featured\":true}]},{\"stage\":\"孵化\",\"stageEn\":\"Create\",\"icon\":\"rocket\",\"desc\":\"内容创作输出、工具产品孵化、技术品牌建设\",\"items\":[]}]},\"hero\":{\"name\":\"Insight Stack Blog\",\"text\":\"AI & 全栈技术 & 产品思考与成长记录\",\"tagline\":\"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量\",\"actions\":[{\"theme\":\"brand\",\"text\":\"关于我\",\"link\":\"/about/me\"},{\"theme\":\"alt\",\"text\":\"资源推荐\",\"link\":\"/growth/sites\"},{\"theme\":\"alt\",\"text\":\"书籍推荐\",\"link\":\"/growth/books\"}]}},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"首页\",\"date\":\"2026-06-02 12:09:12\",\"capture\":\"<style\\n/* 彩虹动画 */\\n:root {\\n animation: rainbow 12s linear infinite;\\n}\\n.tk-avatar {\\n height: var(--tk-avatar-size) !important;\\n width: var(--tk-avatar-size) !important;\\n}\\n.tk-avatar--circle {\\n border-radius: 50% !important;\\n}\\n.vp-doc hero-text {\\n display: none !important;\\n}\\n@media (min-w\"}],\"originPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDateAndSticky\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDate\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"groupPostsByYear\":{\"2026 \":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"2025 \":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"2024 \":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"2023 \":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"2022 \":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]},\"groupPostsByYearMonth\":{\"2026 \":{\"05\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"}],\"04\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"03\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"}],\"02\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"}],\"01\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}]},\"2025 \":{\"10\":[{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"}],\"11\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"12\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"}],\"08\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"03\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}]},\"2024 \":{\"06\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"}],\"05\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"04\":[{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"03\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"01\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"2023 \":{\"01\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}]},\"2022 \":{\"09\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupPosts\":{\"categories\":{\"AI 学习与实践\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"社区活动与实践小项目\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"}],\"Agent 系列\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"全栈\":[{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"产品 Sense\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"}],\"AI\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"个人成长\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"知识库体系化建设\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"开源洞察\":[{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/pretext\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/06.pretext\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Pretext 开源项目解读\",\"tldr\":\"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。\",\"description\":\"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/pretext\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Pretext 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Pretext\\n- 项目描述: Pretext 是一个纯 JS/TS 文本布局与测量库,通过 Canvas 测量 + 纯算术断行,在不触发 DOM 回流的情况下精确计算多语言文本的行数和高度。\\n- 项目地址:https://github.com/chenglou/pretex\\n- 应用 Demos:https://chenglou.me/pretext/\\n解决的核心痛点:\\n1. DOM 回流的性能诅咒 — 传统的文本测量(`getBoundingClientRect`、`offsetHeight`)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext \"},{\"url\":\"/insight-labs/repo-insight/anime\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/07.anime\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Animejs 开源项目解读\",\"tldr\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"description\":\"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/anime\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Animejs 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Animejs\\n- 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。\\n- 项目地址:https://github.com/juliangarnier/anime\\n- 官方文档:https://animejs.com\\n解决的核心痛点:\\n1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同\"},{\"url\":\"/insight-labs/repo-insight/a2ui\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.a2ui\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"A2UI 开源项目解读\",\"tldr\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"description\":\"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/a2ui\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"A2UI 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:A2UI\\n- 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。\\n- 项目地址:https://github.com/google/a2ui\\n- 官方文档:https://a2ui.org/\\n- 解决的核心痛点:\\n - 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。\\n - 远程 Agent 无法安全操控 UI:在多\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/14.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"}],\"优质信息洞察引擎\":[{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"}],\"AI 编程专题\":[{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"}],\"全栈基础素养\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"AI 编程系列\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"前端工程\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"网络与通信\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"ai-practice\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"关于\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"}],\"模块化编程实践指南\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"growth\":[{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"tags\":{\"全栈\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"AI\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"能力模型\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"}],\"职业成长\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"}],\"Agent SDK\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"}],\"Multi-Agent\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"Agent Skills\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"Agent\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"产品\":[{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"系统思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"数学思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"模型思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"疫情\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"健康\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"时间\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"远程协作\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"Zettelkasten\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"Obsidian\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"LLM Wiki\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"Knowledge Engineering\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"Digital Garden\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"concept\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"typescript\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"type-system\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"union-types\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"}],\"intersection-types\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"}],\"AI Coding\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Claude Code\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"Agentic Engineering\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Developer Tools\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"LLM\":[{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"}],\"Next.js\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"}],\"React\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"}],\"SSR\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"前端架构\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"}],\"CSS\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"工程化\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tailwindcss\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tutorial\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"SSE\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"HTTP Streaming\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"}],\"HTTP 轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"退避轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"长轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"HTTP\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"WebSocket\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"Webhooks\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"AI Agent\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"react\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"component-design\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"state-management\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"ai-augmented\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"specification-driven\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"LLM API\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"CSR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"SSG\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"ISR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"PPR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"VitePress\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"AI 助手\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"}],\"AI 搜索\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"Vibe Coding\":[{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"产品 Sense\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"商业化\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"}],\"SWR\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"TanStack Query\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"前端工程\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"jamstack\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"frontend-architecture\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"next.js\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"static-site-generator\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"系统洞察力\":[{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"}],\"信息筛选\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"个人成长\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"generics\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"compilation\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"tooling\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"eslint\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"jest\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"成长\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"}],\"ESM\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"DDD\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"微前端\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"node.js\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"commonjs\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"esm\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"monorepo\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"layered-architecture\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"solid-principles\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"code-organization\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"best-practices\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"naming-conventions\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"tsconfig\":[{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"static-analysis\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"Tree-Shaking\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"circular-dependency\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"CommonJS\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"AMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"UMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"javascript\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"modularization\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"design-patterns\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"知识发现\":[{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"engineering-fundamentals\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"code-design\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"software-engineering\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"运动\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupCards\":{\"categories\":[{\"name\":\"AI 学习与实践\",\"length\":10},{\"name\":\"社区活动与实践小项目\",\"length\":1},{\"name\":\"Agent 系列\",\"length\":1},{\"name\":\"全栈\",\"length\":26},{\"name\":\"产品 Sense\",\"length\":7},{\"name\":\"AI\",\"length\":2},{\"name\":\"悦读时光\",\"length\":1},{\"name\":\"个人成长\",\"length\":3},{\"name\":\"知识库体系化建设\",\"length\":1},{\"name\":\"开源洞察\",\"length\":13},{\"name\":\"优质信息洞察引擎\",\"length\":1},{\"name\":\"AI 编程专题\",\"length\":1},{\"name\":\"全栈基础素养\",\"length\":11},{\"name\":\"AI 编程系列\",\"length\":2},{\"name\":\"前端工程\",\"length\":5},{\"name\":\"网络与通信\",\"length\":3},{\"name\":\"ai-practice\",\"length\":1},{\"name\":\"资源推荐\",\"length\":4},{\"name\":\"关于\",\"length\":1},{\"name\":\"模块化编程实践指南\",\"length\":7},{\"name\":\"growth\",\"length\":1}],\"tags\":[{\"name\":\"全栈\",\"length\":8},{\"name\":\"AI\",\"length\":13},{\"name\":\"能力模型\",\"length\":1},{\"name\":\"职业成长\",\"length\":1},{\"name\":\"Agent SDK\",\"length\":2},{\"name\":\"Multi-Agent\",\"length\":1},{\"name\":\"Agent Skills\",\"length\":1},{\"name\":\"Agent\",\"length\":6},{\"name\":\"产品\",\"length\":1},{\"name\":\"悦读时光\",\"length\":3},{\"name\":\"系统思维\",\"length\":1},{\"name\":\"数学思维\",\"length\":1},{\"name\":\"模型思维\",\"length\":1},{\"name\":\"疫情\",\"length\":2},{\"name\":\"健康\",\"length\":2},{\"name\":\"时间\",\"length\":1},{\"name\":\"远程协作\",\"length\":1},{\"name\":\"Zettelkasten\",\"length\":1},{\"name\":\"Obsidian\",\"length\":1},{\"name\":\"LLM Wiki\",\"length\":1},{\"name\":\"Knowledge Engineering\",\"length\":1},{\"name\":\"Digital Garden\",\"length\":1},{\"name\":\"concept\",\"length\":6},{\"name\":\"typescript\",\"length\":4},{\"name\":\"type-system\",\"length\":2},{\"name\":\"union-types\",\"length\":1},{\"name\":\"intersection-types\",\"length\":1},{\"name\":\"AI Coding\",\"length\":2},{\"name\":\"Claude Code\",\"length\":1},{\"name\":\"Agentic Engineering\",\"length\":2},{\"name\":\"Developer Tools\",\"length\":1},{\"name\":\"LLM\",\"length\":1},{\"name\":\"Next.js\",\"length\":1},{\"name\":\"React\",\"length\":1},{\"name\":\"SSR\",\"length\":2},{\"name\":\"前端架构\",\"length\":1},{\"name\":\"CSS\",\"length\":1},{\"name\":\"工程化\",\"length\":1},{\"name\":\"tailwindcss\",\"length\":1},{\"name\":\"tutorial\",\"length\":8},{\"name\":\"SSE\",\"length\":2},{\"name\":\"HTTP Streaming\",\"length\":1},{\"name\":\"HTTP 轮询\",\"length\":2},{\"name\":\"退避轮询\",\"length\":1},{\"name\":\"长轮询\",\"length\":1},{\"name\":\"HTTP\",\"length\":1},{\"name\":\"WebSocket\",\"length\":1},{\"name\":\"Webhooks\",\"length\":1},{\"name\":\"AI Agent\",\"length\":1},{\"name\":\"react\",\"length\":1},{\"name\":\"component-design\",\"length\":1},{\"name\":\"state-management\",\"length\":1},{\"name\":\"ai-augmented\",\"length\":1},{\"name\":\"specification-driven\",\"length\":1},{\"name\":\"资源推荐\",\"length\":5},{\"name\":\"LLM API\",\"length\":1},{\"name\":\"CSR\",\"length\":1},{\"name\":\"SSG\",\"length\":1},{\"name\":\"ISR\",\"length\":1},{\"name\":\"PPR\",\"length\":1},{\"name\":\"VitePress\",\"length\":1},{\"name\":\"AI 助手\",\"length\":1},{\"name\":\"AI 搜索\",\"length\":2},{\"name\":\"Vibe Coding\",\"length\":1},{\"name\":\"产品 Sense\",\"length\":4},{\"name\":\"商业化\",\"length\":1},{\"name\":\"SWR\",\"length\":1},{\"name\":\"TanStack Query\",\"length\":1},{\"name\":\"前端工程\",\"length\":1},{\"name\":\"jamstack\",\"length\":1},{\"name\":\"frontend-architecture\",\"length\":1},{\"name\":\"next.js\",\"length\":1},{\"name\":\"static-site-generator\",\"length\":1},{\"name\":\"系统洞察力\",\"length\":1},{\"name\":\"信息筛选\",\"length\":1},{\"name\":\"个人成长\",\"length\":1},{\"name\":\"generics\",\"length\":1},{\"name\":\"compilation\",\"length\":1},{\"name\":\"tooling\",\"length\":1},{\"name\":\"eslint\",\"length\":1},{\"name\":\"jest\",\"length\":1},{\"name\":\"成长\",\"length\":1},{\"name\":\"ESM\",\"length\":3},{\"name\":\"DDD\",\"length\":1},{\"name\":\"微前端\",\"length\":1},{\"name\":\"node.js\",\"length\":1},{\"name\":\"commonjs\",\"length\":1},{\"name\":\"esm\",\"length\":2},{\"name\":\"monorepo\",\"length\":1},{\"name\":\"layered-architecture\",\"length\":1},{\"name\":\"solid-principles\",\"length\":1},{\"name\":\"code-organization\",\"length\":1},{\"name\":\"best-practices\",\"length\":1},{\"name\":\"naming-conventions\",\"length\":1},{\"name\":\"tsconfig\",\"length\":1},{\"name\":\"static-analysis\",\"length\":1},{\"name\":\"Tree-Shaking\",\"length\":1},{\"name\":\"circular-dependency\",\"length\":1},{\"name\":\"CommonJS\",\"length\":1},{\"name\":\"AMD\",\"length\":1},{\"name\":\"UMD\",\"length\":1},{\"name\":\"javascript\",\"length\":1},{\"name\":\"modularization\",\"length\":1},{\"name\":\"design-patterns\",\"length\":1},{\"name\":\"知识发现\",\"length\":1},{\"name\":\"engineering-fundamentals\",\"length\":1},{\"name\":\"code-design\",\"length\":1},{\"name\":\"software-engineering\",\"length\":1},{\"name\":\"运动\",\"length\":1}]}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true,\"additionalConfig\":{}}")); \ No newline at end of file diff --git a/assets/chunks/metadata.b6a2b9ed.js b/assets/chunks/metadata.b6a2b9ed.js deleted file mode 100644 index 33e990e..0000000 --- a/assets/chunks/metadata.b6a2b9ed.js +++ /dev/null @@ -1 +0,0 @@ -window.__VP_HASH_MAP__=JSON.parse("{\"about_growth_inner-experience.md\":\"Bv6irQCt\",\"about_growth_outer-experience.md\":\"H37qqbXv\",\"about_growth_weight-loss.md\":\"CJOxYo7l\",\"about_me.md\":\"-7r9zfxP\",\"ai-coding_ai-change-work-workflow.md\":\"Cf1dGJ-F\",\"ai-coding_ai-engineer-capability.md\":\"Dm2zRND9\",\"ai-coding_ai-native.md\":\"COrigMZ-\",\"ai-coding_claude-code-deep-dive.md\":\"DTTIPzhz\",\"ai-coding_overview.md\":\"CDUVxDM3\",\"ai-coding_resources.md\":\"nk3hBjmO\",\"ai_agent_claude-agent-sdk-basic-build.md\":\"CgSYkaoQ\",\"ai_agent_composition-ai-components.md\":\"C4n6A38j\",\"ai_agent_deepresearch-agent.md\":\"D1VHqJFV\",\"ai_agent_math-bot.md\":\"Dcxg40jZ\",\"ai_agent_overview.md\":\"CBny6Kqh\",\"ai_agent_planning-module.md\":\"CDlvBNcn\",\"ai_agent_poetry-bot.md\":\"BJeZitt5\",\"ai_agent_skills-practice-summary.md\":\"CYdSmJnx\",\"ai_full-stack-builder.md\":\"BGzdsC-3\",\"ai_llm-api-resources.md\":\"D_6BiDYj\",\"ai_overview.md\":\"CRjjlPMp\",\"ai_tools-assistant.md\":\"a4OzjAJ7\",\"categories.md\":\"CnMuA3JG\",\"fullstack_css-engineering.md\":\"BtxwP6p5\",\"fullstack_decode-es-modules.md\":\"pgLSwKoE\",\"fullstack_different-module-programming-specifications.md\":\"B-OI3QLK\",\"fullstack_frontend-module-programming-basic.md\":\"C-EsOJPG\",\"fullstack_frontend-rendering-scheme.md\":\"B1Gs9imT\",\"fullstack_full-stack-resources.md\":\"PB3ApNm8\",\"fullstack_jamstack.md\":\"DsAC5gK_\",\"fullstack_module-programming-practice-guide.md\":\"BvZSNC5t\",\"fullstack_module-programming-principles-best-practices.md\":\"CkS1Ktf9\",\"fullstack_networking-polling-optimization.md\":\"Co1K2del\",\"fullstack_networking-protocol-selection-guide.md\":\"C5frLLOO\",\"fullstack_networking-sse-practice.md\":\"CYa-7UGx\",\"fullstack_next-deep-dive.md\":\"DSAxqYkS\",\"fullstack_nodejs-module-programming-summary.md\":\"D0U-fUQ0\",\"fullstack_occams-razor-software-design.md\":\"Dsd2tAmK\",\"fullstack_overview.md\":\"D2Ez6OwG\",\"fullstack_react-design-philosophy-ai-augmented.md\":\"nIC-WImG\",\"fullstack_server-state-management.md\":\"CKwBMh6y\",\"fullstack_typescript-compilation-debugging-guide.md\":\"B3OD2eiY\",\"fullstack_typescript-generic-types.md\":\"k0YxICZf\",\"fullstack_typescript-module-programming-enhancement.md\":\"C7m0wq6p\",\"fullstack_union-types-vs-intersection-types.md\":\"hM79y4nW\",\"growth_books.md\":\"DxXz1I-x\",\"growth_distinguish-useful-information.md\":\"2KhRCOyW\",\"growth_reading-tips.md\":\"BGZRgwwj\",\"index.md\":\"BX5o6LIJ\",\"insight-labs_ai-insight-engine.md\":\"CSelYfUb\",\"insight-labs_overview.md\":\"CUk-HLJa\",\"insight-labs_repo-insight_amis.md\":\"BPSKFzw2\",\"insight-labs_repo-insight_echarts.md\":\"Dx4twj-H\",\"insight-labs_repo-insight_fetch-event-source.md\":\"_gmxs2BH\",\"insight-labs_repo-insight_konva.md\":\"hYUpqOCZ\",\"insight-labs_repo-insight_lottie-web.md\":\"DVvuwA83\",\"insight-labs_repo-insight_open-cli.md\":\"eC85uCpN\",\"insight-labs_repo-insight_overview.md\":\"BJ9OMyYd\",\"insight-labs_repo-insight_superpowers.md\":\"CU-2mqwr\",\"insight-labs_repo-insight_three-js.md\":\"EPr9hTuq\",\"insight-labs_repo-insight_vercel-ai-sdk.md\":\"BJMsUPUS\",\"product-sense_ai-native-composite-talents.md\":\"DRkRl5Gi\",\"product-sense_engineer-build-product-sense.md\":\"C9qdnDdy\",\"product-sense_insight-model.md\":\"5jE_m_oK\",\"product-sense_overview.md\":\"CTq33ibi\",\"product-sense_perplexity-knowledge-worker.md\":\"CkbI_a1F\",\"product-sense_small-rule-learn.md\":\"Bmjz4sNa\",\"product-sense_using-economics-thinking.md\":\"Dumcd-Lz\",\"tags.md\":\"oL46vvD0\"}");function deserializeFunctions(r){return Array.isArray(r)?r.map(deserializeFunctions):typeof r=="object"&&r!==null?Object.keys(r).reduce((t,n)=>(t[n]=deserializeFunctions(r[n]),t),{}):typeof r=="string"&&r.startsWith("_vp-fn_")?new Function(`return ${r.slice(7)}`)():r};window.__VP_SITE_DATA__=deserializeFunctions(JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"Insight Stack\",\"description\":\"数字花园,聚焦全栈工程、产品思维与 LLMs,探讨 AI 与工程实践的交叉领域\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"teekTheme\":true,\"teekHome\":true,\"vpHome\":false,\"sidebarTrigger\":true,\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"banner\":{\"enabled\":true,\"name\":\"\",\"features\":[],\"bgStyle\":\"pure\",\"pureBgColor\":\"#F7F5FA\",\"imgSrc\":[\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/image.png\"],\"mask\":false,\"descStyle\":\"switch\",\"description\":[\"Insight Stack = 工程基座 × 产品思维 × AI 原力\"]},\"homeCardListPosition\":\"right\",\"homeCardSort\":[\"topArticle\",\"category\",\"tag\",\"docAnalysis\",\"friendLink\"],\"topArticle\":{\"enabled\":true,\"limit\":3,\"autoPage\":false,\"pageSpeed\":4000,\"dateFormat\":\"yyyy-MM-dd\"},\"category\":{\"enabled\":false,\"limit\":8,\"autoPage\":false,\"pageSpeed\":4000},\"friendLink\":{\"enabled\":false,\"limit\":5,\"list\":[{\"avatar\":\"https://vitepress.dev/vitepress-logo-large.svg\",\"name\":\"VitePress\",\"desc\":\"Vue 驱动的静态站点生成器\",\"link\":\"https://vitepress.dev/\"},{\"avatar\":\"https://vp.teek.top/teek-logo-large.png\",\"name\":\"vitepress-theme-teek\",\"desc\":\"Teek官网\",\"link\":\"https://vp.teek.top/\"}]},\"docAnalysis\":{\"enabled\":false},\"footerInfo\":{\"theme\":{\"name\":\"Theme By Teek@1.5.6\"},\"copyright\":{\"createYear\":2017,\"suffix\":\"Sqliang\"}},\"codeBlock\":{\"enabled\":false,\"collapseHeight\":700,\"overlay\":true,\"overlayHeight\":400,\"copiedDone\":\"_vp-fn_(TkMessage) => TkMessage.success(\\\"\\\\u590D\\\\u5236\\\\u6210\\\\u529F\\\\uFF01\\\")\"},\"articleShare\":{\"enabled\":true},\"articleUpdate\":{\"enabled\":false},\"post\":{},\"themeEnhance\":{\"layoutSwitch\":{\"defaultMode\":\"fullWidth\"},\"spotlight\":{\"disabled\":true}},\"toComment\":{\"enabled\":false,\"done\":\"_vp-fn_(TkMessage) => TkMessage.success(\\\"\\\\u5DF2\\\\u62B5\\\\u8FBE\\\\u8BC4\\\\u8BBA\\\\u533A\\\")\"},\"appreciation\":{\"position\":\"doc-after\",\"options\":{\"icon\":\"weChatPay\",\"expandTitle\":\"打赏支持\",\"collapseTitle\":\"下次一定\",\"content\":\"\",\"expand\":false}},\"logo\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/favicon.png\",\"darkModeSwitchLabel\":\"主题\",\"sidebarMenuLabel\":\"菜单\",\"returnToTopLabel\":\"返回顶部\",\"lastUpdatedText\":\"上次更新时间\",\"outline\":{\"level\":[2,4],\"label\":\"本页导航\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"Insight Labs\",\"items\":[{\"text\":\"\\n
\\n AI 驱动知识库建设\\n
\\n \",\"link\":\"/insight-labs/overview\"},{\"text\":\"\\n
\\n Daily AI Insight Engine\\n
\\n \",\"link\":\"/insight-labs/ai-insight-engine\"},{\"text\":\"\\n
\\n Repo Insight Engine\\n
\\n \",\"link\":\"/insight-labs/repo-insight/overview\"}]},{\"text\":\"AI 探索与实践\",\"items\":[{\"text\":\"\\n
\\n 全景一览\\n
\\n \",\"link\":\"/ai/overview\"},{\"text\":\"\\n
\\n AI 编程专题\\n
\\n \",\"link\":\"/ai-coding/overview\"},{\"text\":\"\\n
\\n Agent 系列\\n
\\n \",\"link\":\"/ai/agent/overview\"},{\"text\":\"\\n
\\n 社区活动与实践小项目\\n
\\n \",\"link\":\"/ai/agent/deepresearch-agent\"},{\"text\":\"\\n
\\n 工具与资源推荐\\n
\\n \",\"link\":\"/ai/tools-assistant\"}]},{\"text\":\"全栈\",\"items\":[{\"text\":\"\\n
\\n 全景一览\\n
\\n \",\"link\":\"/fullstack/overview\"},{\"text\":\"\\n
\\n 前端工程\\n
\\n \",\"link\":\"/fullstack/react-design-philosophy-ai-augmented\"},{\"text\":\"\\n
\\n 网络与通信\\n
\\n \",\"link\":\"/fullstack/networking-protocol-selection-guide\"},{\"text\":\"\\n
\\n 全栈基础素养\\n
\\n \",\"link\":\"/fullstack/occams-razor-software-design\"},{\"text\":\"\\n
\\n 工具与资源推荐\\n
\\n \",\"link\":\"/fullstack/full-stack-resources\"}]},{\"text\":\"产品思维\",\"items\":[{\"text\":\"\\n
\\n 全景一览\\n
\\n \",\"link\":\"/product-sense/overview\"},{\"text\":\"\\n
\\n 产品观察与分析\\n
\\n \",\"link\":\"/product-sense/perplexity-knowledge-worker\"},{\"text\":\"\\n
\\n 新 T 型人\\n
\\n \",\"link\":\"/product-sense/ai-native-composite-talents\"},{\"text\":\"\\n
\\n 产品创造与商业化\\n
\\n \",\"link\":\"/product-sense/small-rule-learn\"},{\"text\":\"\\n
\\n 方法论\\n
\\n \",\"link\":\"/product-sense/insight-model\"}]},{\"text\":\"悦读拾光\",\"items\":[{\"text\":\"好书推荐\",\"link\":\" /growth/books\"},{\"text\":\"读书“三要”和“三不要”\",\"link\":\"/growth/reading-tips\"},{\"text\":\"如何甄别真正有用的信息\",\"link\":\"/growth/distinguish-useful-information\"}]},{\"text\":\"关于\",\"items\":[{\"text\":\"关于我\",\"link\":\"/about/me\"},{\"text\":\"关于本站\",\"link\":\"/about/me#关于本站\"},{\"text\":\"成长随笔\",\"link\":\"/about/growth/outer-experience\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/sqliang\"},{\"icon\":{\"svg\":\"\"},\"link\":\"mailto:hfutsqliang@qq.com\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":{\"/fullstack/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/fullstack/overview.md\"},{\"text\":\"前端工程\",\"collapsed\":true,\"items\":[{\"text\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"collapsed\":true,\"link\":\"/fullstack/react-design-philosophy-ai-augmented.md\"},{\"text\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"collapsed\":true,\"link\":\"/fullstack/css-engineering.md\"},{\"text\":\"JAMStack 梳理与实践指南\",\"collapsed\":true,\"link\":\"/fullstack/jamstack.md\"},{\"text\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"collapsed\":true,\"link\":\"/fullstack/frontend-rendering-scheme.md\"},{\"text\":\"Next.js 深度解析:从架构理念到工程实践\",\"collapsed\":true,\"link\":\"/fullstack/next-deep-dive.md\"},{\"text\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"collapsed\":true,\"link\":\"/fullstack/server-state-management.md\"}]},{\"text\":\"网络与通信\",\"collapsed\":true,\"items\":[{\"text\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"collapsed\":true,\"link\":\"/fullstack/networking-protocol-selection-guide.md\"},{\"text\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"collapsed\":true,\"link\":\"/fullstack/networking-sse-practice.md\"},{\"text\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"collapsed\":true,\"link\":\"/fullstack/networking-polling-optimization.md\"}]},{\"text\":\"全栈基础素养\",\"collapsed\":true,\"items\":[{\"text\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"collapsed\":true,\"link\":\"/fullstack/occams-razor-software-design.md\"},{\"text\":\"TypeScript 编译与调试完全指南\",\"collapsed\":true,\"link\":\"/fullstack/typescript-compilation-debugging-guide.md\"},{\"text\":\"深入理解 TypeScript 联合类型与交叉类型\",\"collapsed\":true,\"link\":\"/fullstack/union-types-vs-intersection-types.md\"},{\"text\":\"聊一聊 TypeScript 中的泛型\",\"collapsed\":true,\"link\":\"/fullstack/typescript-generic-types.md\"},{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-practice-guide.md\"},{\"text\":\"模块化编程初体验:概念、演进与设计模式\",\"collapsed\":true,\"link\":\"/fullstack/frontend-module-programming-basic.md\"},{\"text\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"collapsed\":true,\"link\":\"/fullstack/different-module-programming-specifications.md\"},{\"text\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"collapsed\":true,\"link\":\"/fullstack/decode-es-modules.md\"},{\"text\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"collapsed\":true,\"link\":\"/fullstack/typescript-module-programming-enhancement.md\"},{\"text\":\"模块化编程原则梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-principles-best-practices.md\"},{\"text\":\"Node.js 模块化编程梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/nodejs-module-programming-summary.md\"}]}]},{\"text\":\"工具与资源推荐\",\"collapsed\":true,\"items\":[{\"text\":\"全栈技术资源推荐\",\"collapsed\":true,\"link\":\"/fullstack/full-stack-resources.md\"}]}],\"/product-sense/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/product-sense/overview.md\"},{\"text\":\"产品观察与分析\",\"collapsed\":true,\"items\":[{\"text\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"collapsed\":true,\"link\":\"/product-sense/perplexity-knowledge-worker.md\"}]},{\"text\":\"新 T 型人\",\"collapsed\":true,\"items\":[{\"text\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"collapsed\":true,\"link\":\"/product-sense/ai-native-composite-talents.md\"},{\"text\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"collapsed\":true,\"link\":\"/product-sense/engineer-build-product-sense.md\"}]},{\"text\":\"产品创造与商业化\",\"collapsed\":true,\"items\":[{\"text\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"collapsed\":true,\"link\":\"/product-sense/small-rule-learn.md\"}]},{\"text\":\"方法论\",\"collapsed\":true,\"items\":[{\"text\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"collapsed\":true,\"link\":\"/product-sense/insight-model.md\"},{\"text\":\"用经济学思维做产品\",\"collapsed\":true,\"link\":\"/product-sense/using-economics-thinking.md\"}]}],\"/ai/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/ai/overview.md\"},{\"text\":\"Agent 系列\",\"collapsed\":true,\"items\":[{\"text\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"collapsed\":true,\"link\":\"/ai/agent/overview.md\"},{\"text\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"collapsed\":true,\"link\":\"/ai/agent/planning-module.md\"},{\"text\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"collapsed\":true,\"link\":\"/ai/agent/composition-ai-components.md\"},{\"text\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"collapsed\":true,\"link\":\"/ai/agent/skills-practice-summary.md\"}]},{\"text\":\"社区活动与实践小项目\",\"collapsed\":true,\"items\":[{\"text\":\"做好 AI 时代的 Full Stack Builder\",\"collapsed\":true,\"link\":\"/ai/full-stack-builder.md\"},{\"text\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"collapsed\":true,\"link\":\"/ai/agent/deepresearch-agent.md\"},{\"text\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"collapsed\":true,\"link\":\"/ai/agent/claude-agent-sdk-basic-build.md\"},{\"text\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"collapsed\":true,\"link\":\"/ai/agent/math-bot.md\"},{\"text\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"collapsed\":true,\"link\":\"/ai/agent/poetry-bot.md\"}]},{\"text\":\"资源与工具推荐\",\"collapsed\":true,\"items\":[{\"text\":\"好用的 AI 助手与工作站推荐\",\"collapsed\":true,\"link\":\"/ai/tools-assistant.md\"},{\"text\":\"LLM API 平台推荐与选型指南\",\"collapsed\":true,\"link\":\"/ai/llm-api-resources.md\"}]}],\"/ai-coding/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/ai-coding/overview.md\"},{\"text\":\"AI Native 工程思维\",\"collapsed\":true,\"items\":[{\"text\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"collapsed\":true,\"link\":\"/ai-coding/ai-change-work-workflow.md\"},{\"text\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"collapsed\":true,\"link\":\"/ai-coding/ai-engineer-capability.md\"},{\"text\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"collapsed\":true,\"link\":\"/ai-coding/ai-native.md\"}]},{\"text\":\"AI 编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"AI 编程工具与资源推荐\",\"collapsed\":true,\"link\":\"/ai-coding/resources.md\"},{\"text\":\"从 .claude 文件夹读懂 Claude Code\",\"collapsed\":true,\"link\":\"/ai-coding/claude-code-deep-dive.md\"}]}],\"/growth/\":[{\"text\":\"好书推荐\",\"collapsed\":true,\"link\":\"/growth/books.md\"},{\"text\":\"读书“三要”和“三不要”\",\"collapsed\":true,\"link\":\"/growth/reading-tips.md\"},{\"text\":\"如何甄别真正有用的信息\",\"collapsed\":true,\"link\":\"/growth/distinguish-useful-information.md\"}],\"/insight-labs/\":[{\"text\":\"AI 驱动的体系化知识库建设\",\"collapsed\":true,\"link\":\"/insight-labs/overview.md\"},{\"text\":\"Daily AI Insight Engine\",\"collapsed\":true,\"link\":\"/insight-labs/ai-insight-engine.md\"},{\"text\":\"Repo Insight Engine\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/overview.md\"},{\"text\":\"Reop Insight Reports\",\"collapsed\":true,\"items\":[{\"text\":\"amis 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/amis.md\"},{\"text\":\"konva 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/konva.md\"},{\"text\":\"ECharts 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/echarts.md\"},{\"text\":\"Lottie Web 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/lottie-web.md\"},{\"text\":\"Three.js 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/three-js.md\"},{\"text\":\"OpenCLI 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/open-cli.md\"},{\"text\":\"fetch-event-source 源码解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/fetch-event-source.md\"},{\"text\":\"vercel-ai-sdk 项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/vercel-ai-sdk.md\"},{\"text\":\"superpowers 开源项目解读\",\"collapsed\":true,\"link\":\"/insight-labs/repo-insight/superpowers.md\"}]}],\"/about/\":[{\"text\":\"关于我\",\"collapsed\":true,\"link\":\"/about/me.md\"},{\"text\":\"成长随笔\",\"collapsed\":true,\"items\":[{\"text\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"collapsed\":true,\"link\":\"/about/growth/outer-experience.md\"},{\"text\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"collapsed\":true,\"link\":\"/about/growth/inner-experience.md\"},{\"text\":\"用科学与迭代改善的方式推动减肥这件小事\",\"collapsed\":true,\"link\":\"/about/growth/weight-loss.md\"}]}],\"/categories.md/\":[{\"text\":\"分类\",\"collapsed\":true,\"link\":\"/categories.md\"},{\"text\":\"标签\",\"collapsed\":true,\"link\":\"/tags.md\"}]},\"docAnalysisInfo\":{\"fileList\":[{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/05.Next.js.md\",\"relativePath\":\"01.全栈/40.前端工程/05.Next.js.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/00.overview.md\",\"relativePath\":\"21.AI 编程专题/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/00.overview.md\",\"relativePath\":\"31.Insight Labs/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/01.优质资讯情报引擎.md\",\"relativePath\":\"31.Insight Labs/01.优质资讯情报引擎.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/10.repo-insight-overview.md\",\"relativePath\":\"31.Insight Labs/10.repo-insight-overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/01.amis.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/01.amis.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/02.konva.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/02.konva.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/03.echarts.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/03.echarts.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/05.three.js.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/05.three.js.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/13.superpowers.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/13.superpowers.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"}],\"totalFileWords\":267384,\"eachFileWords\":[{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},\"wordCount\":411,\"readingTime\":\"1.6m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},\"wordCount\":5038,\"readingTime\":\"17.6m\",\"frontmatter\":{\"date\":{},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},\"wordCount\":9015,\"readingTime\":\"34.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},\"wordCount\":3628,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},\"wordCount\":8241,\"readingTime\":\"29.7m\",\"frontmatter\":{\"date\":{},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/05.Next.js.md\",\"relativePath\":\"01.全栈/40.前端工程/05.Next.js.md\"},\"wordCount\":5433,\"readingTime\":\"20.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},\"wordCount\":4949,\"readingTime\":\"19.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},\"wordCount\":6770,\"readingTime\":\"23.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},\"wordCount\":6634,\"readingTime\":\"26.8m\",\"frontmatter\":{\"date\":{},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},\"wordCount\":3295,\"readingTime\":\"12.1m\",\"frontmatter\":{\"date\":{},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},\"wordCount\":3233,\"readingTime\":\"11.6m\",\"frontmatter\":{\"date\":{},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},\"wordCount\":5040,\"readingTime\":\"20m\",\"frontmatter\":{\"date\":{},\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md\"},\"wordCount\":5526,\"readingTime\":\"22.6m\",\"frontmatter\":{\"date\":{},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},\"wordCount\":5614,\"readingTime\":\"21.5m\",\"frontmatter\":{\"date\":{},\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},\"wordCount\":7414,\"readingTime\":\"30.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},\"wordCount\":2099,\"readingTime\":\"7.8m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},\"wordCount\":1889,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},\"wordCount\":1767,\"readingTime\":\"7.5m\",\"frontmatter\":{\"date\":{},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},\"wordCount\":1576,\"readingTime\":\"6.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},\"wordCount\":1303,\"readingTime\":\"4.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},\"wordCount\":1240,\"readingTime\":\"4.7m\",\"frontmatter\":{\"date\":{},\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},\"wordCount\":7425,\"readingTime\":\"30.1m\",\"frontmatter\":{\"date\":{},\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},\"wordCount\":311,\"readingTime\":\"1.2m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},\"wordCount\":1833,\"readingTime\":\"6.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},\"wordCount\":1994,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},\"wordCount\":4356,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},\"wordCount\":1982,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},\"wordCount\":2572,\"readingTime\":\"9m\",\"frontmatter\":{\"date\":{},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},\"wordCount\":3150,\"readingTime\":\"10.7m\",\"frontmatter\":{\"date\":{},\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},\"wordCount\":316,\"readingTime\":\"1.3m\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":{},\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},\"wordCount\":6363,\"readingTime\":\"22.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},\"wordCount\":3028,\"readingTime\":\"10.6m\",\"frontmatter\":{\"date\":{},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},\"wordCount\":2685,\"readingTime\":\"9.4m\",\"frontmatter\":{\"date\":{},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},\"wordCount\":3915,\"readingTime\":\"14.6m\",\"frontmatter\":{\"date\":{},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder.md\"},\"wordCount\":3176,\"readingTime\":\"11.5m\",\"frontmatter\":{\"date\":{},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},\"wordCount\":2889,\"readingTime\":\"11m\",\"frontmatter\":{\"date\":{},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},\"wordCount\":2778,\"readingTime\":\"11.2m\",\"frontmatter\":{\"date\":{},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},\"wordCount\":2122,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},\"wordCount\":4145,\"readingTime\":\"14.2m\",\"frontmatter\":{\"date\":{},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},\"wordCount\":5439,\"readingTime\":\"20.5m\",\"frontmatter\":{\"date\":{},\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},\"wordCount\":3528,\"readingTime\":\"13.6m\",\"frontmatter\":{\"date\":{},\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/00.overview.md\",\"relativePath\":\"21.AI 编程专题/00.overview.md\"},\"wordCount\":305,\"readingTime\":\"1.3m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},\"wordCount\":4407,\"readingTime\":\"15.2m\",\"frontmatter\":{\"date\":{},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},\"wordCount\":3614,\"readingTime\":\"12.9m\",\"frontmatter\":{\"date\":{},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},\"wordCount\":2017,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源.md\"},\"wordCount\":3472,\"readingTime\":\"13.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},\"wordCount\":5798,\"readingTime\":\"21.4m\",\"frontmatter\":{\"date\":{},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},\"wordCount\":1847,\"readingTime\":\"6.4m\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":{},\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},\"wordCount\":3593,\"readingTime\":\"12m\",\"frontmatter\":{\"date\":{},\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},\"wordCount\":2443,\"readingTime\":\"8.2m\",\"frontmatter\":{\"date\":{},\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/00.overview.md\",\"relativePath\":\"31.Insight Labs/00.overview.md\"},\"wordCount\":3007,\"readingTime\":\"11.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/01.优质资讯情报引擎.md\",\"relativePath\":\"31.Insight Labs/01.优质资讯情报引擎.md\"},\"wordCount\":2103,\"readingTime\":\"8.2m\",\"frontmatter\":{\"date\":{},\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/10.repo-insight-overview.md\",\"relativePath\":\"31.Insight Labs/10.repo-insight-overview.md\"},\"wordCount\":1237,\"readingTime\":\"5.1m\",\"frontmatter\":{\"date\":{},\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/01.amis.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/01.amis.md\"},\"wordCount\":7693,\"readingTime\":\"32.5m\",\"frontmatter\":{\"date\":{},\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/02.konva.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/02.konva.md\"},\"wordCount\":6321,\"readingTime\":\"27.9m\",\"frontmatter\":{\"date\":{},\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/03.echarts.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/03.echarts.md\"},\"wordCount\":6736,\"readingTime\":\"27.9m\",\"frontmatter\":{\"date\":{},\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md\"},\"wordCount\":9092,\"readingTime\":\"37.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/05.three.js.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/05.three.js.md\"},\"wordCount\":8107,\"readingTime\":\"35.2m\",\"frontmatter\":{\"date\":{},\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md\"},\"wordCount\":4917,\"readingTime\":\"21.8m\",\"frontmatter\":{\"date\":{},\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md\"},\"wordCount\":3025,\"readingTime\":\"12.7m\",\"frontmatter\":{\"date\":{},\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md\"},\"wordCount\":4305,\"readingTime\":\"19.2m\",\"frontmatter\":{\"date\":{},\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.Insight Labs/11.Reop Insight Reports/13.superpowers.md\",\"relativePath\":\"31.Insight Labs/11.Reop Insight Reports/13.superpowers.md\"},\"wordCount\":7430,\"readingTime\":\"30.8m\",\"frontmatter\":{\"date\":{},\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},\"wordCount\":1636,\"readingTime\":\"5.9m\",\"frontmatter\":{\"date\":{},\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},\"wordCount\":6206,\"readingTime\":\"22.2m\",\"frontmatter\":{\"date\":{},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},\"wordCount\":9942,\"readingTime\":\"33.9m\",\"frontmatter\":{\"date\":{},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"},\"wordCount\":4009,\"readingTime\":\"13.5m\",\"frontmatter\":{\"date\":{},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]}}],\"lastCommitTime\":\"2026-06-02 03:15:41\"},\"catalogues\":{\"arr\":[],\"map\":{},\"inv\":{}},\"posts\":{\"allPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"},{\"url\":\"/categories\",\"relativePath\":\"/@pages/categoriesPage\",\"frontmatter\":{\"title\":\"分类\",\"categoriesPage\":true,\"permalink\":\"/categories\",\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"分类\",\"date\":\"2026-06-01 19:15:54\",\"capture\":\"\"},{\"url\":\"/tags\",\"relativePath\":\"/@pages/tagsPage\",\"frontmatter\":{\"title\":\"标签\",\"permalink\":\"/tags\",\"tagsPage\":true,\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"标签\",\"date\":\"2026-06-01 19:15:54\",\"capture\":\"\"},{\"url\":\"/\",\"relativePath\":\"/\",\"frontmatter\":{\"layout\":\"home\",\"title\":\"首页\",\"titleTemplate\":\":title | Insight Stack Blog\",\"tk\":{\"teekHome\":true,\"features\":[{\"stage\":\"洞察引擎\",\"stageEn\":\"Collect\",\"icon\":\"cloud-download\",\"desc\":\"优质资讯自动抓取、前沿技术追踪、开源项目挖掘\",\"items\":[{\"title\":\"Daily AI Insight Engine\",\"details\":\"旨在解决信息过载问题,打造自动聚合、深度解读、洞见提取的 AI 引擎。覆盖学术论文、技术博客、科技媒体、社区讨论四大信息源,支持中英文双语。\",\"link\":\"/insight-labs/ai-insight-engine\",\"tags\":[\"Automation\",\"Agent\"]},{\"title\":\"Repo Insight Engine\",\"details\":\"AST 与大模型结合的 GitHub 源码架构分析利器,将碎片化的源码阅读转化为系统性的技术理解,用来帮助开发者快速理解项目架构、功能模块、代码质量等。\",\"link\":\"/insight-labs/repo-insight/overview\",\"tags\":[\"AST\",\"LLM\",\"Agent\",\"Code Analysis\"]}]},{\"stage\":\"知识内化\",\"stageEn\":\"Knowledge\",\"icon\":\"brain\",\"desc\":\"碎片洞察 → 原子笔记 → 概念网络,每一条笔记都在为认知复利加速。\",\"items\":[{\"title\":\"AI 驱动的体系化知识库建设\",\"details\":\"LLM Wiki + Library 双轨制知识管理规范,融合卡片盒笔记法、Obsidian、AI 等,构建可持续演化的个人知识网络。将 AI 引擎的碎片洞察转化为节点,通过卡片盒笔记法编织概念网络,实现从信息到知识的跃迁。\",\"link\":\"/insight-labs/overview\",\"tags\":[\"Obsidian\",\"Zettelkasten\",\"Knowledge Engineering\"],\"featured\":true}]},{\"stage\":\"孵化\",\"stageEn\":\"Create\",\"icon\":\"rocket\",\"desc\":\"内容创作输出、工具产品孵化、技术品牌建设\",\"items\":[]}]},\"hero\":{\"name\":\"Insight Stack Blog\",\"text\":\"AI & 全栈技术 & 产品思考与成长记录\",\"tagline\":\"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量\",\"actions\":[{\"theme\":\"brand\",\"text\":\"关于我\",\"link\":\"/about/me\"},{\"theme\":\"alt\",\"text\":\"资源推荐\",\"link\":\"/growth/sites\"},{\"theme\":\"alt\",\"text\":\"书籍推荐\",\"link\":\"/growth/books\"}]}},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"首页\",\"date\":\"2026-06-01 19:15:54\",\"capture\":\"<style\\n/* 彩虹动画 */\\n:root {\\n animation: rainbow 12s linear infinite;\\n}\\n.tk-avatar {\\n height: var(--tk-avatar-size) !important;\\n width: var(--tk-avatar-size) !important;\\n}\\n.tk-avatar--circle {\\n border-radius: 50% !important;\\n}\\n.vp-doc hero-text {\\n display: none !important;\\n}\\n@media (min-w\"}],\"originPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDateAndSticky\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDate\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"groupPostsByYear\":{\"2026 \":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"2025 \":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"2024 \":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"2023 \":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"2022 \":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]},\"groupPostsByYearMonth\":{\"2026 \":{\"05\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"},{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"}],\"04\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"03\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"}],\"02\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"}],\"01\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}]},\"2025 \":{\"10\":[{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"}],\"11\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"12\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"}],\"08\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"03\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}]},\"2024 \":{\"06\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"}],\"05\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"04\":[{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"03\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"01\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"2023 \":{\"01\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}]},\"2022 \":{\"09\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupPosts\":{\"categories\":{\"AI 学习与实践\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"社区活动与实践小项目\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"}],\"Agent 系列\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"全栈\":[{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"产品 Sense\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"}],\"AI\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { productSenseCategories } from '@fragment/data/product-sense-data'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport \"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"个人成长\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"知识库体系化建设\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"开源洞察\":[{\"url\":\"/insight-labs/repo-insight/amis\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/01.amis\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"amis 开源项目解读\",\"tldr\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"description\":\"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/amis\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"amis 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:amis\\n- 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。\\n- 项目地址:https://github.com/baidu/amis\\n- 官方文档:https://baidu.github.io/amis/zh-CN/docs/index\\n- 核心特点:\\n - 670,000 行源代码\\n - 237+ 个前端组件(142 UI + 95 业务)\\n - 9 个 Monorepo 子包(5 层架构)\\n - 86+ 个编辑器插件\\n - Apache-2.0 开源许可\\n- 核\"},{\"url\":\"/insight-labs/repo-insight/konva\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/02.konva\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"konva 开源项目解读\",\"tldr\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"description\":\"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/konva\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"konva 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Konva\\n- 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。\\n- 项目地址:https://github.com/konvajs/konva\\n- 官方文档:\\n - https://konvajs.org/docs/index.html\\n - 中文文档:https://konva.zhcndoc.com\\n- 解决的核心痛点:\\n - Canvas API 的底层复杂性:\"},{\"url\":\"/insight-labs/repo-insight/echarts\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/03.echarts\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"ECharts 开源项目解读\",\"tldr\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"description\":\"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/echarts\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"ECharts 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:ECharts\\n- 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。\\n- 项目地址:https://github.com/apache/echarts\\n- 官方文档:https://echarts.apache.org/zh/index.html\\n- 解决的核心痛点:\\n - 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降\"},{\"url\":\"/insight-labs/repo-insight/lottie-web\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/04.lottie-web\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Lottie Web 开源项目解读\",\"tldr\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"description\":\"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/lottie-web\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Lottie Web 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Lottie Web\\n- 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。\\n- 项目地址:https://github.com/airbnb/lottie-web\\n- 官方文档:https://lottie.airbnb.tech\\n- 解决的核心痛点:\\n - 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现\"},{\"url\":\"/insight-labs/repo-insight/three-js\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/05.three.js\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"Three.js 开源项目解读\",\"tldr\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"description\":\"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/three-js\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Three.js 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:Three.js\\n- 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。\\n- 项目地址:https://github.com/mrdoob/three.js\\n- 官方文档:https://threejs.org\\n- 中文文档:https://www.webgl3d.cn\\n- 解决的核心痛点:\\n - WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图\\n - 跨浏览器 3D 兼容性:统一 We\"},{\"url\":\"/insight-labs/repo-insight/superpowers\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/13.superpowers\",\"frontmatter\":{\"date\":\"2026-05-15 14:52:34\",\"title\":\"superpowers 开源项目解读\",\"tldr\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"description\":\"Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。\",\"abstract\":null,\"permalink\":\"/insight-labs/repo-insight/superpowers\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"superpowers 开源项目解读\",\"date\":\"2026-05-15 14:52:34\",\"capture\":\"- 项目名称:superpowers\\n- 项目描述:Superpowers 是一套让 AI 编码 Agent 学会\\\"软件工程纪律\\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。\\n- 项目地址:https://github.com/obra/superpowers\\n- superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh\\n- 解决的核心痛点:\\n - 1. AI \"},{\"url\":\"/insight-labs/repo-insight/vercel-ai-sdk\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk\",\"frontmatter\":{\"date\":\"2026-04-11 23:43:09\",\"title\":\"vercel-ai-sdk 项目解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/vercel-ai-sdk\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"vercel-ai-sdk 项目解读\",\"date\":\"2026-04-11 23:43:09\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n- 项目名称:vercel/ai\\n- 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。\\n- 项目地址:https://github.com/vercel/ai\\n 1. 项目概览\\n 1.1 项目定位与核心价值\\nAI SDK 是 <HighL\"},{\"url\":\"/insight-labs/repo-insight/open-cli\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/10.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/insight-labs/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/insight-labs/repo-insight/overview\",\"relativePath\":\"/31.Insight Labs/10.repo-insight-overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"Repo Insight Engine\",\"description\":\"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告\",\"permalink\":\"/insight-labs/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Repo Insight Engine\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"},{\"url\":\"/insight-labs/repo-insight/fetch-event-source\",\"relativePath\":\"/31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/insight-labs/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"}],\"优质信息洞察引擎\":[{\"url\":\"/insight-labs/ai-insight-engine\",\"relativePath\":\"/31.Insight Labs/01.优质资讯情报引擎\",\"frontmatter\":{\"date\":\"2026-05-15 00:00:00\",\"title\":\"Daily AI Insight Engine\",\"description\":\"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板\",\"permalink\":\"/insight-labs/ai-insight-engine\",\"categories\":[\"优质信息洞察引擎\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Daily AI Insight Engine\",\"date\":\"2026-05-15 00:00:00\",\"capture\":\"<script setup\\nimport ResourceCard from '@fragment/components/ResourceCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimport Timeline from '@fragment\"}],\"AI 编程专题\":[{\"url\":\"/ai-coding/overview\",\"relativePath\":\"/21.AI 编程专题/00.overview\",\"frontmatter\":{\"date\":\"2026-05-14 17:19:49\",\"title\":\"全景一览\",\"description\":\"从 Vibe Coding 到 Agentic Engineering,系统探索 AI 驱动编程的范式演进、工具链实践与工程思维升级。\",\"categories\":[\"AI 学习与实践\",\"AI 编程专题\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"permalink\":\"/ai-coding/overview\",\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-05-14 17:19:49\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"}],\"全栈基础素养\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"AI 编程系列\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"前端工程\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"网络与通信\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"ai-practice\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"关于\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"}],\"模块化编程实践指南\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"growth\":[{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"tags\":{\"全栈\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"AI\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"},{\"url\":\"/ai-coding/ai-engineer-capability\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/ai-coding/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai-coding/ai-change-work-workflow\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/01.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/ai-coding/ai-change-work-workflow/\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"能力模型\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"}],\"职业成长\":[{\"url\":\"/ai/full-stack-builder\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/01.做好 AI 时代的 full stack Builder\",\"frontmatter\":{\"date\":\"2026-04-27 18:00:00\",\"title\":\"做好 AI 时代的 Full Stack Builder\",\"tldr\":\"AI 时代个体的核心能力模型:判断力 × 实现力 × 杠杆力,乘数效应决定产出。\",\"description\":\"从结构性缺口、能力范式跃迁与人的壁垒三个维度,拆解 AI 时代的 Full Stack Builder 能力模型,提出判断力、实现力、杠杆力的乘数框架,并提供从工具化到创造者的进阶路径与切入场景。\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"能力模型\",\"职业成长\"],\"categories\":[\"AI 学习与实践\",\"社区活动与实践小项目\"],\"permalink\":\"/ai/full-stack-builder\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"做好 AI 时代的 Full Stack Builder\",\"date\":\"2026-04-27 18:00:00\",\"capture\":\"<script setup>\\n import HighLightText from '@fragment/components/HighLightText.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nconst whyNowItems = [\\n {\\n icon: '🌊',\\n title: 'WHY NOW — 结构性缺口',\\n description: '市场时机、用户需求、技术窗口同时到达临界点。现有的重型协同模式,已经越来越难以应对用户对\\\"轻量、快\"}],\"Agent SDK\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"}],\"Multi-Agent\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"Agent Skills\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"Agent\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"产品\":[{\"url\":\"/ai-coding/ai-native\",\"relativePath\":\"/21.AI 编程专题/01.AI Native 工程思维/03.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/ai-coding/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"系统思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"数学思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"模型思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"疫情\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"健康\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"时间\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"远程协作\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"Zettelkasten\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"Obsidian\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"LLM Wiki\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"Knowledge Engineering\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"Digital Garden\":[{\"url\":\"/insight-labs/overview\",\"relativePath\":\"/31.Insight Labs/00.overview\",\"frontmatter\":{\"date\":\"2026-05-16 00:00:00\",\"title\":\"AI 驱动的体系化知识库建设\",\"description\":\"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。\",\"permalink\":\"/insight-labs/overview\",\"categories\":[\"知识库体系化建设\"],\"tags\":[\"Zettelkasten\",\"Obsidian\",\"LLM Wiki\",\"Knowledge Engineering\",\"Digital Garden\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 驱动的体系化知识库建设\",\"date\":\"2026-05-16 00:00:00\",\"capture\":\"<script setup\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport KnowledgePhilosophyBanner from '@fragment/components/KnowledgePhilosophyBanner.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\nimpor\"}],\"concept\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"typescript\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"type-system\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"union-types\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"}],\"intersection-types\":[{\"url\":\"/fullstack/union-types-vs-intersection-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/03.联合类型 VS 类型\",\"frontmatter\":{\"date\":\"2026-04-15 09:16:06\",\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"tldr\":\"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。\",\"description\":\"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。\",\"tags\":[\"concept\",\"typescript\",\"type-system\",\"union-types\",\"intersection-types\"],\"categories\":[\"全栈\",\"全栈基础素养\"],\"permalink\":\"/fullstack/union-types-vs-intersection-types\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"深入理解 TypeScript 联合类型与交叉类型\",\"date\":\"2026-04-15 09:16:06\",\"capture\":\"<script setup\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport BeforeAfter from '@fragment/components/BeforeAfter.vue';\\nimport ConceptPair from '@fragment/components/ConceptPair.vue';\\nimport HighLightText from '@f\"}],\"AI Coding\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Claude Code\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"Agentic Engineering\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Developer Tools\":[{\"url\":\"/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"LLM\":[{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_learning.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"],\"articleShare\":false},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<script setup\\nimport KnowledgeGraph from '@fragment/components/KnowledgeGraph.vue'\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport Blockquote from '@fragment/components/Blockquote.vue'\\nimport FigureContainer from '@fragment/components/FigureContainer.vue'\\nimport Call\"}],\"Next.js\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"}],\"React\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"}],\"SSR\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"前端架构\":[{\"url\":\"/fullstack/next-deep-dive\",\"relativePath\":\"/01.全栈/40.前端工程/05.Next.js\",\"frontmatter\":{\"date\":\"2026-03-13 21:30:35\",\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"tldr\":\"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。\",\"description\":\"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。\",\"tags\":[\"Next.js\",\"React\",\"SSR\",\"前端架构\"],\"categories\":[\"全栈\",\"前端工程\"],\"permalink\":\"/fullstack/next-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Next.js 深度解析:从架构理念到工程实践\",\"date\":\"2026-03-13 21:30:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue';\\nimport KeyTakeaway from '@fragment/components/KeyTakeaway.vue';\\nimport Blockquote from '@fragment/components/Blockquote.vue';\\nimport StepGuide from '@fragment/components/StepGuide.vue';\\nimport ConceptPair from '@f\"}],\"CSS\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"工程化\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tailwindcss\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tutorial\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"SSE\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"HTTP Streaming\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"}],\"HTTP 轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"退避轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"长轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"HTTP\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"WebSocket\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"Webhooks\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"AI Agent\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"react\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"component-design\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"state-management\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"ai-augmented\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"specification-driven\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"LLM API\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"CSR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"SSG\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"ISR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"PPR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"VitePress\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"AI 助手\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"}],\"AI 搜索\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"Vibe Coding\":[{\"url\":\"/ai-coding/resources\",\"relativePath\":\"/21.AI 编程专题/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/ai_coding.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"产品 Sense\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"商业化\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"}],\"SWR\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"TanStack Query\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"前端工程\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"jamstack\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"frontend-architecture\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"next.js\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"static-site-generator\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"系统洞察力\":[{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"}],\"信息筛选\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"个人成长\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"generics\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"compilation\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"tooling\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"eslint\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"jest\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"成长\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"}],\"ESM\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"DDD\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"微前端\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"node.js\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"commonjs\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"esm\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"monorepo\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"layered-architecture\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"solid-principles\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"code-organization\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"best-practices\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"naming-conventions\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"tsconfig\":[{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"static-analysis\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"Tree-Shaking\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"circular-dependency\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"CommonJS\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"AMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"UMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"javascript\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"modularization\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"design-patterns\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"知识发现\":[{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"engineering-fundamentals\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"code-design\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"software-engineering\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"运动\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupCards\":{\"categories\":[{\"name\":\"AI 学习与实践\",\"length\":10},{\"name\":\"社区活动与实践小项目\",\"length\":1},{\"name\":\"Agent 系列\",\"length\":1},{\"name\":\"全栈\",\"length\":26},{\"name\":\"产品 Sense\",\"length\":7},{\"name\":\"AI\",\"length\":2},{\"name\":\"悦读时光\",\"length\":1},{\"name\":\"个人成长\",\"length\":3},{\"name\":\"知识库体系化建设\",\"length\":1},{\"name\":\"开源洞察\",\"length\":10},{\"name\":\"优质信息洞察引擎\",\"length\":1},{\"name\":\"AI 编程专题\",\"length\":1},{\"name\":\"全栈基础素养\",\"length\":11},{\"name\":\"AI 编程系列\",\"length\":2},{\"name\":\"前端工程\",\"length\":5},{\"name\":\"网络与通信\",\"length\":3},{\"name\":\"ai-practice\",\"length\":1},{\"name\":\"资源推荐\",\"length\":4},{\"name\":\"关于\",\"length\":1},{\"name\":\"模块化编程实践指南\",\"length\":7},{\"name\":\"growth\",\"length\":1}],\"tags\":[{\"name\":\"全栈\",\"length\":8},{\"name\":\"AI\",\"length\":13},{\"name\":\"能力模型\",\"length\":1},{\"name\":\"职业成长\",\"length\":1},{\"name\":\"Agent SDK\",\"length\":2},{\"name\":\"Multi-Agent\",\"length\":1},{\"name\":\"Agent Skills\",\"length\":1},{\"name\":\"Agent\",\"length\":6},{\"name\":\"产品\",\"length\":1},{\"name\":\"悦读时光\",\"length\":3},{\"name\":\"系统思维\",\"length\":1},{\"name\":\"数学思维\",\"length\":1},{\"name\":\"模型思维\",\"length\":1},{\"name\":\"疫情\",\"length\":2},{\"name\":\"健康\",\"length\":2},{\"name\":\"时间\",\"length\":1},{\"name\":\"远程协作\",\"length\":1},{\"name\":\"Zettelkasten\",\"length\":1},{\"name\":\"Obsidian\",\"length\":1},{\"name\":\"LLM Wiki\",\"length\":1},{\"name\":\"Knowledge Engineering\",\"length\":1},{\"name\":\"Digital Garden\",\"length\":1},{\"name\":\"concept\",\"length\":6},{\"name\":\"typescript\",\"length\":4},{\"name\":\"type-system\",\"length\":2},{\"name\":\"union-types\",\"length\":1},{\"name\":\"intersection-types\",\"length\":1},{\"name\":\"AI Coding\",\"length\":2},{\"name\":\"Claude Code\",\"length\":1},{\"name\":\"Agentic Engineering\",\"length\":2},{\"name\":\"Developer Tools\",\"length\":1},{\"name\":\"LLM\",\"length\":1},{\"name\":\"Next.js\",\"length\":1},{\"name\":\"React\",\"length\":1},{\"name\":\"SSR\",\"length\":2},{\"name\":\"前端架构\",\"length\":1},{\"name\":\"CSS\",\"length\":1},{\"name\":\"工程化\",\"length\":1},{\"name\":\"tailwindcss\",\"length\":1},{\"name\":\"tutorial\",\"length\":8},{\"name\":\"SSE\",\"length\":2},{\"name\":\"HTTP Streaming\",\"length\":1},{\"name\":\"HTTP 轮询\",\"length\":2},{\"name\":\"退避轮询\",\"length\":1},{\"name\":\"长轮询\",\"length\":1},{\"name\":\"HTTP\",\"length\":1},{\"name\":\"WebSocket\",\"length\":1},{\"name\":\"Webhooks\",\"length\":1},{\"name\":\"AI Agent\",\"length\":1},{\"name\":\"react\",\"length\":1},{\"name\":\"component-design\",\"length\":1},{\"name\":\"state-management\",\"length\":1},{\"name\":\"ai-augmented\",\"length\":1},{\"name\":\"specification-driven\",\"length\":1},{\"name\":\"资源推荐\",\"length\":5},{\"name\":\"LLM API\",\"length\":1},{\"name\":\"CSR\",\"length\":1},{\"name\":\"SSG\",\"length\":1},{\"name\":\"ISR\",\"length\":1},{\"name\":\"PPR\",\"length\":1},{\"name\":\"VitePress\",\"length\":1},{\"name\":\"AI 助手\",\"length\":1},{\"name\":\"AI 搜索\",\"length\":2},{\"name\":\"Vibe Coding\",\"length\":1},{\"name\":\"产品 Sense\",\"length\":4},{\"name\":\"商业化\",\"length\":1},{\"name\":\"SWR\",\"length\":1},{\"name\":\"TanStack Query\",\"length\":1},{\"name\":\"前端工程\",\"length\":1},{\"name\":\"jamstack\",\"length\":1},{\"name\":\"frontend-architecture\",\"length\":1},{\"name\":\"next.js\",\"length\":1},{\"name\":\"static-site-generator\",\"length\":1},{\"name\":\"系统洞察力\",\"length\":1},{\"name\":\"信息筛选\",\"length\":1},{\"name\":\"个人成长\",\"length\":1},{\"name\":\"generics\",\"length\":1},{\"name\":\"compilation\",\"length\":1},{\"name\":\"tooling\",\"length\":1},{\"name\":\"eslint\",\"length\":1},{\"name\":\"jest\",\"length\":1},{\"name\":\"成长\",\"length\":1},{\"name\":\"ESM\",\"length\":3},{\"name\":\"DDD\",\"length\":1},{\"name\":\"微前端\",\"length\":1},{\"name\":\"node.js\",\"length\":1},{\"name\":\"commonjs\",\"length\":1},{\"name\":\"esm\",\"length\":2},{\"name\":\"monorepo\",\"length\":1},{\"name\":\"layered-architecture\",\"length\":1},{\"name\":\"solid-principles\",\"length\":1},{\"name\":\"code-organization\",\"length\":1},{\"name\":\"best-practices\",\"length\":1},{\"name\":\"naming-conventions\",\"length\":1},{\"name\":\"tsconfig\",\"length\":1},{\"name\":\"static-analysis\",\"length\":1},{\"name\":\"Tree-Shaking\",\"length\":1},{\"name\":\"circular-dependency\",\"length\":1},{\"name\":\"CommonJS\",\"length\":1},{\"name\":\"AMD\",\"length\":1},{\"name\":\"UMD\",\"length\":1},{\"name\":\"javascript\",\"length\":1},{\"name\":\"modularization\",\"length\":1},{\"name\":\"design-patterns\",\"length\":1},{\"name\":\"知识发现\",\"length\":1},{\"name\":\"engineering-fundamentals\",\"length\":1},{\"name\":\"code-design\",\"length\":1},{\"name\":\"software-engineering\",\"length\":1},{\"name\":\"运动\",\"length\":1}]}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true,\"additionalConfig\":{}}")); \ No newline at end of file diff --git a/assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.B_Qa0jXF.js b/assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.MCFe2lSf.js similarity index 99% rename from assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.B_Qa0jXF.js rename to assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.MCFe2lSf.js index 786ed5e..620f16d 100644 --- a/assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.B_Qa0jXF.js +++ b/assets/chunks/mindmap-definition-6CBA2TL7-Cbhri6JR-COAfLT4H.MCFe2lSf.js @@ -1,4 +1,4 @@ -import{q as G,O as q,A as et,aS as Et,bk as Tt,aC as K,ad as Q,bl as vt,bm as mt,bn as Nt,a9 as At,bp as _t,aU as Lt,aM as It}from"../app.DiEjJ8gz.js";import{J as ut}from"./cytoscape.esm-wWJwD64P-C103aMMl.DNxweH6G.js";import"./vitepress-theme-teek.CUuTa6hm.js";var it={exports:{}},rt={exports:{}},nt={exports:{}},Dt=nt.exports,lt;function Ot(){return lt||(lt=1,(function(D,C){(function(p,_){D.exports=_()})(Dt,function(){return(function(p){var _={};function f(i){if(_[i])return _[i].exports;var t=_[i]={i,l:!1,exports:{}};return p[i].call(t.exports,t,t.exports,f),t.l=!0,t.exports}return f.m=p,f.c=_,f.i=function(i){return i},f.d=function(i,t,e){f.o(i,t)||Object.defineProperty(i,t,{configurable:!1,enumerable:!0,get:e})},f.n=function(i){var t=i&&i.__esModule?(function(){return i.default}):(function(){return i});return f.d(t,"a",t),t},f.o=function(i,t){return Object.prototype.hasOwnProperty.call(i,t)},f.p="",f(f.s=26)})([function(p,_,f){function i(){}i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,p.exports=i},function(p,_,f){var i=f(2),t=f(8),e=f(9);function r(a,s,y){i.call(this,y),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=y,this.bendpoints=[],this.source=a,this.target=s}r.prototype=Object.create(i.prototype);for(var h in i)r[h]=i[h];r.prototype.getSource=function(){return this.source},r.prototype.getTarget=function(){return this.target},r.prototype.isInterGraph=function(){return this.isInterGraph},r.prototype.getLength=function(){return this.length},r.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},r.prototype.getBendpoints=function(){return this.bendpoints},r.prototype.getLca=function(){return this.lca},r.prototype.getSourceInLca=function(){return this.sourceInLca},r.prototype.getTargetInLca=function(){return this.targetInLca},r.prototype.getOtherEnd=function(a){if(this.source===a)return this.target;if(this.target===a)return this.source;throw"Node is not incident with this edge"},r.prototype.getOtherEndInGraph=function(a,s){for(var y=this.getOtherEnd(a),o=s.getGraphManager().getRoot();;){if(y.getOwner()==s)return y;if(y.getOwner()==o)break;y=y.getOwner().getParent()}return null},r.prototype.updateLength=function(){var a=new Array(4);this.isOverlapingSourceAndTarget=t.getIntersection(this.target.getRect(),this.source.getRect(),a),this.isOverlapingSourceAndTarget||(this.lengthX=a[0]-a[2],this.lengthY=a[1]-a[3],Math.abs(this.lengthX)<1&&(this.lengthX=e.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=e.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},r.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=e.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=e.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},p.exports=r},function(p,_,f){function i(t){this.vGraphObject=t}p.exports=i},function(p,_,f){var i=f(2),t=f(10),e=f(13),r=f(0),h=f(16),a=f(4);function s(o,d,c,E){c==null&&E==null&&(E=d),i.call(this,E),o.graphManager!=null&&(o=o.graphManager),this.estimatedSize=t.MIN_VALUE,this.inclusionTreeDepth=t.MAX_VALUE,this.vGraphObject=E,this.edges=[],this.graphManager=o,c!=null&&d!=null?this.rect=new e(d.x,d.y,c.width,c.height):this.rect=new e}s.prototype=Object.create(i.prototype);for(var y in i)s[y]=i[y];s.prototype.getEdges=function(){return this.edges},s.prototype.getChild=function(){return this.child},s.prototype.getOwner=function(){return this.owner},s.prototype.getWidth=function(){return this.rect.width},s.prototype.setWidth=function(o){this.rect.width=o},s.prototype.getHeight=function(){return this.rect.height},s.prototype.setHeight=function(o){this.rect.height=o},s.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},s.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},s.prototype.getCenter=function(){return new a(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},s.prototype.getLocation=function(){return new a(this.rect.x,this.rect.y)},s.prototype.getRect=function(){return this.rect},s.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},s.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},s.prototype.setRect=function(o,d){this.rect.x=o.x,this.rect.y=o.y,this.rect.width=d.width,this.rect.height=d.height},s.prototype.setCenter=function(o,d){this.rect.x=o-this.rect.width/2,this.rect.y=d-this.rect.height/2},s.prototype.setLocation=function(o,d){this.rect.x=o,this.rect.y=d},s.prototype.moveBy=function(o,d){this.rect.x+=o,this.rect.y+=d},s.prototype.getEdgeListToNode=function(o){var d=[],c=this;return c.edges.forEach(function(E){if(E.target==o){if(E.source!=c)throw"Incorrect edge source!";d.push(E)}}),d},s.prototype.getEdgesBetween=function(o){var d=[],c=this;return c.edges.forEach(function(E){if(!(E.source==c||E.target==c))throw"Incorrect edge source and/or target";(E.target==o||E.source==o)&&d.push(E)}),d},s.prototype.getNeighborsList=function(){var o=new Set,d=this;return d.edges.forEach(function(c){if(c.source==d)o.add(c.target);else{if(c.target!=d)throw"Incorrect incidency!";o.add(c.source)}}),o},s.prototype.withChildren=function(){var o=new Set,d,c;if(o.add(this),this.child!=null)for(var E=this.child.getNodes(),m=0;md&&(this.rect.x-=(this.labelWidth-d)/2,this.setWidth(this.labelWidth)),this.labelHeight>c&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-c)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-c),this.setHeight(this.labelHeight))}}},s.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==t.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},s.prototype.transform=function(o){var d=this.rect.x;d>r.WORLD_BOUNDARY?d=r.WORLD_BOUNDARY:d<-r.WORLD_BOUNDARY&&(d=-r.WORLD_BOUNDARY);var c=this.rect.y;c>r.WORLD_BOUNDARY?c=r.WORLD_BOUNDARY:c<-r.WORLD_BOUNDARY&&(c=-r.WORLD_BOUNDARY);var E=new a(d,c),m=o.inverseTransformPoint(E);this.setLocation(m.x,m.y)},s.prototype.getLeft=function(){return this.rect.x},s.prototype.getRight=function(){return this.rect.x+this.rect.width},s.prototype.getTop=function(){return this.rect.y},s.prototype.getBottom=function(){return this.rect.y+this.rect.height},s.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},p.exports=s},function(p,_,f){function i(t,e){t==null&&e==null?(this.x=0,this.y=0):(this.x=t,this.y=e)}i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(t){this.x=t},i.prototype.setY=function(t){this.y=t},i.prototype.getDifference=function(t){return new DimensionD(this.x-t.x,this.y-t.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(t){return this.x+=t.width,this.y+=t.height,this},p.exports=i},function(p,_,f){var i=f(2),t=f(10),e=f(0),r=f(6),h=f(3),a=f(1),s=f(13),y=f(12),o=f(11);function d(E,m,T){i.call(this,T),this.estimatedSize=t.MIN_VALUE,this.margin=e.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=E,m!=null&&m instanceof r?this.graphManager=m:m!=null&&m instanceof Layout&&(this.graphManager=m.graphManager)}d.prototype=Object.create(i.prototype);for(var c in i)d[c]=i[c];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(E,m,T){if(m==null&&T==null){var N=E;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(N)>-1)throw"Node already in graph!";return N.owner=this,this.getNodes().push(N),N}else{var L=E;if(!(this.getNodes().indexOf(m)>-1&&this.getNodes().indexOf(T)>-1))throw"Source or target not in graph!";if(!(m.owner==T.owner&&m.owner==this))throw"Both owners must be this graph!";return m.owner!=T.owner?null:(L.source=m,L.target=T,L.isInterGraph=!1,this.getEdges().push(L),m.edges.push(L),T!=m&&T.edges.push(L),L)}},d.prototype.remove=function(E){var m=E;if(E instanceof h){if(m==null)throw"Node is null!";if(!(m.owner!=null&&m.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var T=m.edges.slice(),N,L=T.length,g=0;g-1&&u>-1))throw"Source and/or target doesn't know this edge!";N.source.edges.splice(n,1),N.target!=N.source&&N.target.edges.splice(u,1);var I=N.source.owner.getEdges().indexOf(N);if(I==-1)throw"Not in owner's edge list!";N.source.owner.getEdges().splice(I,1)}},d.prototype.updateLeftTop=function(){for(var E=t.MAX_VALUE,m=t.MAX_VALUE,T,N,L,g=this.getNodes(),I=g.length,n=0;nT&&(E=T),m>N&&(m=N)}return E==t.MAX_VALUE?null:(g[0].getParent().paddingLeft!=null?L=g[0].getParent().paddingLeft:L=this.margin,this.left=m-L,this.top=E-L,new y(this.left,this.top))},d.prototype.updateBounds=function(E){for(var m=t.MAX_VALUE,T=-t.MAX_VALUE,N=t.MAX_VALUE,L=-t.MAX_VALUE,g,I,n,u,l,v=this.nodes,A=v.length,O=0;Og&&(m=g),Tn&&(N=n),Lg&&(m=g),Tn&&(N=n),L=this.nodes.length){var A=0;T.forEach(function(O){O.owner==E&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},p.exports=d},function(p,_,f){var i,t=f(1);function e(r){i=f(5),this.layout=r,this.graphs=[],this.edges=[]}e.prototype.addRoot=function(){var r=this.layout.newGraph(),h=this.layout.newNode(null),a=this.add(r,h);return this.setRootGraph(a),this.rootGraph},e.prototype.add=function(r,h,a,s,y){if(a==null&&s==null&&y==null){if(r==null)throw"Graph is null!";if(h==null)throw"Parent node is null!";if(this.graphs.indexOf(r)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(r),r.parent!=null)throw"Already has a parent!";if(h.child!=null)throw"Already has a child!";return r.parent=h,h.child=r,r}else{y=a,s=h,a=r;var o=s.getOwner(),d=y.getOwner();if(!(o!=null&&o.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(d!=null&&d.getGraphManager()==this))throw"Target not in this graph mgr!";if(o==d)return a.isInterGraph=!1,o.add(a,s,y);if(a.isInterGraph=!0,a.source=s,a.target=y,this.edges.indexOf(a)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(a),!(a.source!=null&&a.target!=null))throw"Edge source and/or target is null!";if(!(a.source.edges.indexOf(a)==-1&&a.target.edges.indexOf(a)==-1))throw"Edge already in source and/or target incidency list!";return a.source.edges.push(a),a.target.edges.push(a),a}},e.prototype.remove=function(r){if(r instanceof i){var h=r;if(h.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(h==this.rootGraph||h.parent!=null&&h.parent.graphManager==this))throw"Invalid parent node!";var a=[];a=a.concat(h.getEdges());for(var s,y=a.length,o=0;o=r.getRight()?h[0]+=Math.min(r.getX()-e.getX(),e.getRight()-r.getRight()):r.getX()<=e.getX()&&r.getRight()>=e.getRight()&&(h[0]+=Math.min(e.getX()-r.getX(),r.getRight()-e.getRight())),e.getY()<=r.getY()&&e.getBottom()>=r.getBottom()?h[1]+=Math.min(r.getY()-e.getY(),e.getBottom()-r.getBottom()):r.getY()<=e.getY()&&r.getBottom()>=e.getBottom()&&(h[1]+=Math.min(e.getY()-r.getY(),r.getBottom()-e.getBottom()));var y=Math.abs((r.getCenterY()-e.getCenterY())/(r.getCenterX()-e.getCenterX()));r.getCenterY()===e.getCenterY()&&r.getCenterX()===e.getCenterX()&&(y=1);var o=y*h[0],d=h[1]/y;h[0]o)return h[0]=a,h[1]=c,h[2]=y,h[3]=v,!1;if(sy)return h[0]=d,h[1]=s,h[2]=u,h[3]=o,!1;if(ay?(h[0]=m,h[1]=T,R=!0):(h[0]=E,h[1]=c,R=!0):U===M&&(a>y?(h[0]=d,h[1]=c,R=!0):(h[0]=N,h[1]=T,R=!0)),-S===M?y>a?(h[2]=l,h[3]=v,b=!0):(h[2]=u,h[3]=n,b=!0):S===M&&(y>a?(h[2]=I,h[3]=n,b=!0):(h[2]=A,h[3]=v,b=!0)),R&&b)return!1;if(a>y?s>o?(x=this.getCardinalDirection(U,M,4),F=this.getCardinalDirection(S,M,2)):(x=this.getCardinalDirection(-U,M,3),F=this.getCardinalDirection(-S,M,1)):s>o?(x=this.getCardinalDirection(-U,M,1),F=this.getCardinalDirection(-S,M,3)):(x=this.getCardinalDirection(U,M,2),F=this.getCardinalDirection(S,M,4)),!R)switch(x){case 1:Y=c,k=a+-g/M,h[0]=k,h[1]=Y;break;case 2:k=N,Y=s+L*M,h[0]=k,h[1]=Y;break;case 3:Y=T,k=a+g/M,h[0]=k,h[1]=Y;break;case 4:k=m,Y=s+-L*M,h[0]=k,h[1]=Y;break}if(!b)switch(F){case 1:P=n,X=y+-w/M,h[2]=X,h[3]=P;break;case 2:X=A,P=o+O*M,h[2]=X,h[3]=P;break;case 3:P=v,X=y+w/M,h[2]=X,h[3]=P;break;case 4:X=l,P=o+-O*M,h[2]=X,h[3]=P;break}}return!1},t.getCardinalDirection=function(e,r,h){return e>r?h:1+h%4},t.getIntersection=function(e,r,h,a){if(a==null)return this.getIntersection2(e,r,h);var s=e.x,y=e.y,o=r.x,d=r.y,c=h.x,E=h.y,m=a.x,T=a.y,N=void 0,L=void 0,g=void 0,I=void 0,n=void 0,u=void 0,l=void 0,v=void 0,A=void 0;return g=d-y,n=s-o,l=o*y-s*d,I=T-E,u=c-m,v=m*E-c*T,A=g*u-I*n,A===0?null:(N=(n*v-u*l)/A,L=(I*l-g*v)/A,new i(N,L))},t.angleOfVector=function(e,r,h,a){var s=void 0;return e!==h?(s=Math.atan((a-r)/(h-e)),h0?1:t<0?-1:0},i.floor=function(t){return t<0?Math.ceil(t):Math.floor(t)},i.ceil=function(t){return t<0?Math.floor(t):Math.ceil(t)},p.exports=i},function(p,_,f){function i(){}i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,p.exports=i},function(p,_,f){var i=(function(){function s(y,o){for(var d=0;d"u"?"undefined":i(e);return e==null||r!="object"&&r!="function"},p.exports=t},function(p,_,f){function i(c){if(Array.isArray(c)){for(var E=0,m=Array(c.length);E0&&E;){for(g.push(n[0]);g.length>0&&E;){var u=g[0];g.splice(0,1),L.add(u);for(var l=u.getEdges(),N=0;N-1&&n.splice(w,1)}L=new Set,I=new Map}}return c},d.prototype.createDummyNodesForBendpoints=function(c){for(var E=[],m=c.source,T=this.graphManager.calcLowestCommonAncestor(c.source,c.target),N=0;N0){for(var T=this.edgeToDummyNodes.get(m),N=0;N=0&&E.splice(v,1);var A=I.getNeighborsList();A.forEach(function(R){if(m.indexOf(R)<0){var b=T.get(R),U=b-1;U==1&&u.push(R),T.set(R,U)}})}m=m.concat(u),(E.length==1||E.length==2)&&(N=!0,L=E[0])}return L},d.prototype.setGraphManager=function(c){this.graphManager=c},p.exports=d},function(p,_,f){function i(){}i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},p.exports=i},function(p,_,f){var i=f(4);function t(e,r){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}t.prototype.getWorldOrgX=function(){return this.lworldOrgX},t.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},t.prototype.getWorldOrgY=function(){return this.lworldOrgY},t.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},t.prototype.getWorldExtX=function(){return this.lworldExtX},t.prototype.setWorldExtX=function(e){this.lworldExtX=e},t.prototype.getWorldExtY=function(){return this.lworldExtY},t.prototype.setWorldExtY=function(e){this.lworldExtY=e},t.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},t.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},t.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},t.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},t.prototype.getDeviceExtX=function(){return this.ldeviceExtX},t.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},t.prototype.getDeviceExtY=function(){return this.ldeviceExtY},t.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},t.prototype.transformX=function(e){var r=0,h=this.lworldExtX;return h!=0&&(r=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/h),r},t.prototype.transformY=function(e){var r=0,h=this.lworldExtY;return h!=0&&(r=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/h),r},t.prototype.inverseTransformX=function(e){var r=0,h=this.ldeviceExtX;return h!=0&&(r=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/h),r},t.prototype.inverseTransformY=function(e){var r=0,h=this.ldeviceExtY;return h!=0&&(r=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/h),r},t.prototype.inverseTransformPoint=function(e){var r=new i(this.inverseTransformX(e.x),this.inverseTransformY(e.y));return r},p.exports=t},function(p,_,f){function i(o){if(Array.isArray(o)){for(var d=0,c=Array(o.length);de.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*e.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(o-e.ADAPTATION_LOWER_NODE_LIMIT)/(e.ADAPTATION_UPPER_NODE_LIMIT-e.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-e.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=e.MAX_NODE_DISPLACEMENT_INCREMENTAL):(o>e.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(e.COOLING_ADAPTATION_FACTOR,1-(o-e.ADAPTATION_LOWER_NODE_LIMIT)/(e.ADAPTATION_UPPER_NODE_LIMIT-e.ADAPTATION_LOWER_NODE_LIMIT)*(1-e.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=e.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},s.prototype.calcSpringForces=function(){for(var o=this.getAllEdges(),d,c=0;c0&&arguments[0]!==void 0?arguments[0]:!0,d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,c,E,m,T,N=this.getAllNodes(),L;if(this.useFRGridVariant)for(this.totalIterations%e.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),L=new Set,c=0;cg||L>g)&&(o.gravitationForceX=-this.gravityConstant*m,o.gravitationForceY=-this.gravityConstant*T)):(g=d.getEstimatedSize()*this.compoundGravityRangeFactor,(N>g||L>g)&&(o.gravitationForceX=-this.gravityConstant*m*this.compoundGravityConstant,o.gravitationForceY=-this.gravityConstant*T*this.compoundGravityConstant))},s.prototype.isConverged=function(){var o,d=!1;return this.totalIterations>this.maxIterations/3&&(d=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),o=this.totalDisplacement=N.length||g>=N[0].length)){for(var I=0;Ia}}]),h})();p.exports=r},function(p,_,f){var i=(function(){function r(h,a){for(var s=0;s2&&arguments[2]!==void 0?arguments[2]:1,y=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;t(this,r),this.sequence1=h,this.sequence2=a,this.match_score=s,this.mismatch_penalty=y,this.gap_penalty=o,this.iMax=h.length+1,this.jMax=a.length+1,this.grid=new Array(this.iMax);for(var d=0;d=0;h--){var a=this.listeners[h];a.event===e&&a.callback===r&&this.listeners.splice(h,1)}},t.emit=function(e,r){for(var h=0;ha.coolingFactor*a.maxNodeDisplacement&&(this.displacementX=a.coolingFactor*a.maxNodeDisplacement*e.sign(this.displacementX)),Math.abs(this.displacementY)>a.coolingFactor*a.maxNodeDisplacement&&(this.displacementY=a.coolingFactor*a.maxNodeDisplacement*e.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),a.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},r.prototype.propogateDisplacementToChildren=function(a,s){for(var y=this.getChild().getNodes(),o,d=0;d0)this.positionNodesRadially(l);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),u=this.nodesWithGravity.filter(function(O){return n.has(O)});this.graphManager.setAllNodesToApplyGravitation(u),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},g.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),u=this.nodesWithGravity.filter(function(A){return n.has(A)});this.graphManager.setAllNodesToApplyGravitation(u),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var l=!this.isTreeGrowing&&!this.isGrowthFinished,v=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(l,v),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},g.prototype.getPositionsData=function(){for(var n=this.graphManager.getAllNodes(),u={},l=0;l1){var R;for(R=0;Rv&&(v=Math.floor(w.y)),O=Math.floor(w.x+s.DEFAULT_COMPONENT_SEPERATION)}this.transform(new c(o.WORLD_CENTER_X-w.x/2,o.WORLD_CENTER_Y-w.y/2))},g.radialLayout=function(n,u,l){var v=Math.max(this.maxDiagonalInTree(n),s.DEFAULT_RADIAL_SEPARATION);g.branchRadialLayout(u,null,0,359,0,v);var A=N.calculateBounds(n),O=new L;O.setDeviceOrgX(A.getMinX()),O.setDeviceOrgY(A.getMinY()),O.setWorldOrgX(l.x),O.setWorldOrgY(l.y);for(var w=0;w1;){var P=X[0];X.splice(0,1);var B=M.indexOf(P);B>=0&&M.splice(B,1),k--,x--}u!=null?Y=(M.indexOf(X[0])+1)%k:Y=0;for(var H=Math.abs(v-l)/x,$=Y;F!=x;$=++$%k){var V=M[$].getOtherEnd(n);if(V!=u){var z=(l+F*H)%360,j=(z+H)%360;g.branchRadialLayout(V,n,z,j,A+O,O),F++}}},g.maxDiagonalInTree=function(n){for(var u=m.MIN_VALUE,l=0;lu&&(u=A)}return u},g.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},g.prototype.groupZeroDegreeMembers=function(){var n=this,u={};this.memberGroups={},this.idToDummyNode={};for(var l=[],v=this.graphManager.getAllNodes(),A=0;A"u"&&(u[R]=[]),u[R]=u[R].concat(O)}Object.keys(u).forEach(function(b){if(u[b].length>1){var U="DummyCompound_"+b;n.memberGroups[U]=u[b];var S=u[b][0].getParent(),M=new h(n.graphManager);M.id=U,M.paddingLeft=S.paddingLeft||0,M.paddingRight=S.paddingRight||0,M.paddingBottom=S.paddingBottom||0,M.paddingTop=S.paddingTop||0,n.idToDummyNode[U]=M;var x=n.getGraphManager().add(n.newGraph(),M),F=S.getChild();F.add(M);for(var k=0;k=0;n--){var u=this.compoundOrder[n],l=u.id,v=u.paddingLeft,A=u.paddingTop;this.adjustLocations(this.tiledMemberPack[l],u.rect.x,u.rect.y,v,A)}},g.prototype.repopulateZeroDegreeMembers=function(){var n=this,u=this.tiledZeroDegreePack;Object.keys(u).forEach(function(l){var v=n.idToDummyNode[l],A=v.paddingLeft,O=v.paddingTop;n.adjustLocations(u[l],v.rect.x,v.rect.y,A,O)})},g.prototype.getToBeTiled=function(n){var u=n.id;if(this.toBeTiled[u]!=null)return this.toBeTiled[u];var l=n.getChild();if(l==null)return this.toBeTiled[u]=!1,!1;for(var v=l.getNodes(),A=0;A0)return this.toBeTiled[u]=!1,!1;if(O.getChild()==null){this.toBeTiled[O.id]=!1;continue}if(!this.getToBeTiled(O))return this.toBeTiled[u]=!1,!1}return this.toBeTiled[u]=!0,!0},g.prototype.getNodeDegree=function(n){n.id;for(var u=n.getEdges(),l=0,v=0;vb&&(b=S.rect.height)}l+=b+n.verticalPadding}},g.prototype.tileCompoundMembers=function(n,u){var l=this;this.tiledMemberPack=[],Object.keys(n).forEach(function(v){var A=u[v];l.tiledMemberPack[v]=l.tileNodes(n[v],A.paddingLeft+A.paddingRight),A.rect.width=l.tiledMemberPack[v].width,A.rect.height=l.tiledMemberPack[v].height})},g.prototype.tileNodes=function(n,u){var l=s.TILING_PADDING_VERTICAL,v=s.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:u,verticalPadding:l,horizontalPadding:v};n.sort(function(R,b){return R.rect.width*R.rect.height>b.rect.width*b.rect.height?-1:R.rect.width*R.rect.height0&&(w+=n.horizontalPadding),n.rowWidth[l]=w,n.width0&&(R+=n.verticalPadding);var b=0;R>n.rowHeight[l]&&(b=n.rowHeight[l],n.rowHeight[l]=R,b=n.rowHeight[l]-b),n.height+=b,n.rows[l].push(u)},g.prototype.getShortestRowIndex=function(n){for(var u=-1,l=Number.MAX_VALUE,v=0;vl&&(u=v,l=n.rowWidth[v]);return u},g.prototype.canAddHorizontal=function(n,u,l){var v=this.getShortestRowIndex(n);if(v<0)return!0;var A=n.rowWidth[v];if(A+n.horizontalPadding+u<=n.width)return!0;var O=0;n.rowHeight[v]0&&(O=l+n.verticalPadding-n.rowHeight[v]);var w;n.width-A>=u+n.horizontalPadding?w=(n.height+O)/(A+u+n.horizontalPadding):w=(n.height+O)/n.width,O=l+n.verticalPadding;var R;return n.widthO&&u!=l){v.splice(-1,1),n.rows[l].push(A),n.rowWidth[u]=n.rowWidth[u]-O,n.rowWidth[l]=n.rowWidth[l]+O,n.width=n.rowWidth[instance.getLongestRowIndex(n)];for(var w=Number.MIN_VALUE,R=0;Rw&&(w=v[R].height);u>0&&(w+=n.verticalPadding);var b=n.rowHeight[u]+n.rowHeight[l];n.rowHeight[u]=w,n.rowHeight[l]0)for(var F=A;F<=O;F++)x[0]+=this.grid[F][w-1].length+this.grid[F][w].length-1;if(O0)for(var F=w;F<=R;F++)x[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var k=m.MAX_VALUE,Y,X,P=0;P0){var R;R=L.getGraphManager().add(L.newGraph(),l),this.processChildrenList(R,u,L)}}},c.prototype.stop=function(){return this.stopped=!0,this};var m=function(T){T("layout","cose-bilkent",c)};typeof cytoscape<"u"&&m(cytoscape),_.exports=m}])})})(it)),it.exports}var xt=Mt();const bt=It(xt);var ot=(function(){var D=G(function(L,g,I,n){for(I=I||{},n=L.length;n--;I[L[n]]=g);return I},"o"),C=[1,4],p=[1,13],_=[1,12],f=[1,15],i=[1,16],t=[1,20],e=[1,19],r=[6,7,8],h=[1,26],a=[1,24],s=[1,25],y=[6,7,11],o=[1,6,13,15,16,19,22],d=[1,33],c=[1,34],E=[1,6,7,11,13,15,16,19,22],m={trace:G(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:G(function(L,g,I,n,u,l,v){var A=l.length-1;switch(u){case 6:case 7:return n;case 8:n.getLogger().trace("Stop NL ");break;case 9:n.getLogger().trace("Stop EOF ");break;case 11:n.getLogger().trace("Stop NL2 ");break;case 12:n.getLogger().trace("Stop EOF2 ");break;case 15:n.getLogger().info("Node: ",l[A].id),n.addNode(l[A-1].length,l[A].id,l[A].descr,l[A].type);break;case 16:n.getLogger().trace("Icon: ",l[A]),n.decorateNode({icon:l[A]});break;case 17:case 21:n.decorateNode({class:l[A]});break;case 18:n.getLogger().trace("SPACELIST");break;case 19:n.getLogger().trace("Node: ",l[A].id),n.addNode(0,l[A].id,l[A].descr,l[A].type);break;case 20:n.decorateNode({icon:l[A]});break;case 25:n.getLogger().trace("node found ..",l[A-2]),this.$={id:l[A-1],descr:l[A-1],type:n.getType(l[A-2],l[A])};break;case 26:this.$={id:l[A],descr:l[A],type:n.nodeType.DEFAULT};break;case 27:n.getLogger().trace("node found ..",l[A-3]),this.$={id:l[A-3],descr:l[A-1],type:n.getType(l[A-2],l[A])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:C},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:C},{6:p,7:[1,10],9:9,12:11,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},D(r,[2,3]),{1:[2,2]},D(r,[2,4]),D(r,[2,5]),{1:[2,6],6:p,12:21,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},{6:p,9:22,12:11,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},{6:h,7:a,10:23,11:s},D(y,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:t,22:e}),D(y,[2,18]),D(y,[2,19]),D(y,[2,20]),D(y,[2,21]),D(y,[2,23]),D(y,[2,24]),D(y,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:a,10:32,11:s},{1:[2,7],6:p,12:21,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},D(o,[2,14],{7:d,11:c}),D(E,[2,8]),D(E,[2,9]),D(E,[2,10]),D(y,[2,15]),D(y,[2,16]),D(y,[2,17]),{20:[1,35]},{21:[1,36]},D(o,[2,13],{7:d,11:c}),D(E,[2,11]),D(E,[2,12]),{21:[1,37]},D(y,[2,25]),D(y,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:G(function(L,g){if(g.recoverable)this.trace(L);else{var I=new Error(L);throw I.hash=g,I}},"parseError"),parse:G(function(L){var g=this,I=[0],n=[],u=[null],l=[],v=this.table,A="",O=0,w=0,R=2,b=1,U=l.slice.call(arguments,1),S=Object.create(this.lexer),M={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(M.yy[x]=this.yy[x]);S.setInput(L,M.yy),M.yy.lexer=S,M.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var F=S.yylloc;l.push(F);var k=S.options&&S.options.ranges;typeof M.yy.parseError=="function"?this.parseError=M.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Y(W){I.length=I.length-2*W,u.length=u.length-W,l.length=l.length-W}G(Y,"popStack");function X(){var W;return W=n.pop()||S.lex()||b,typeof W!="number"&&(W instanceof Array&&(n=W,W=n.pop()),W=g.symbols_[W]||W),W}G(X,"lex");for(var P,B,H,$,V={},z,j,ht,Z;;){if(B=I[I.length-1],this.defaultActions[B]?H=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=X()),H=v[B]&&v[B][P]),typeof H>"u"||!H.length||!H[0]){var J="";Z=[];for(z in v[B])this.terminals_[z]&&z>R&&Z.push("'"+this.terminals_[z]+"'");S.showPosition?J="Parse error on line "+(O+1)+`: +import{q as G,O as q,A as et,aS as Et,bk as Tt,aC as K,ad as Q,bl as vt,bm as mt,bn as Nt,a9 as At,bp as _t,aU as Lt,aM as It}from"../app.DfYWW83x.js";import{J as ut}from"./cytoscape.esm-wWJwD64P-C103aMMl.DNxweH6G.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var it={exports:{}},rt={exports:{}},nt={exports:{}},Dt=nt.exports,lt;function Ot(){return lt||(lt=1,(function(D,C){(function(p,_){D.exports=_()})(Dt,function(){return(function(p){var _={};function f(i){if(_[i])return _[i].exports;var t=_[i]={i,l:!1,exports:{}};return p[i].call(t.exports,t,t.exports,f),t.l=!0,t.exports}return f.m=p,f.c=_,f.i=function(i){return i},f.d=function(i,t,e){f.o(i,t)||Object.defineProperty(i,t,{configurable:!1,enumerable:!0,get:e})},f.n=function(i){var t=i&&i.__esModule?(function(){return i.default}):(function(){return i});return f.d(t,"a",t),t},f.o=function(i,t){return Object.prototype.hasOwnProperty.call(i,t)},f.p="",f(f.s=26)})([function(p,_,f){function i(){}i.QUALITY=1,i.DEFAULT_CREATE_BENDS_AS_NEEDED=!1,i.DEFAULT_INCREMENTAL=!1,i.DEFAULT_ANIMATION_ON_LAYOUT=!0,i.DEFAULT_ANIMATION_DURING_LAYOUT=!1,i.DEFAULT_ANIMATION_PERIOD=50,i.DEFAULT_UNIFORM_LEAF_NODE_SIZES=!1,i.DEFAULT_GRAPH_MARGIN=15,i.NODE_DIMENSIONS_INCLUDE_LABELS=!1,i.SIMPLE_NODE_SIZE=40,i.SIMPLE_NODE_HALF_SIZE=i.SIMPLE_NODE_SIZE/2,i.EMPTY_COMPOUND_NODE_SIZE=40,i.MIN_EDGE_LENGTH=1,i.WORLD_BOUNDARY=1e6,i.INITIAL_WORLD_BOUNDARY=i.WORLD_BOUNDARY/1e3,i.WORLD_CENTER_X=1200,i.WORLD_CENTER_Y=900,p.exports=i},function(p,_,f){var i=f(2),t=f(8),e=f(9);function r(a,s,y){i.call(this,y),this.isOverlapingSourceAndTarget=!1,this.vGraphObject=y,this.bendpoints=[],this.source=a,this.target=s}r.prototype=Object.create(i.prototype);for(var h in i)r[h]=i[h];r.prototype.getSource=function(){return this.source},r.prototype.getTarget=function(){return this.target},r.prototype.isInterGraph=function(){return this.isInterGraph},r.prototype.getLength=function(){return this.length},r.prototype.isOverlapingSourceAndTarget=function(){return this.isOverlapingSourceAndTarget},r.prototype.getBendpoints=function(){return this.bendpoints},r.prototype.getLca=function(){return this.lca},r.prototype.getSourceInLca=function(){return this.sourceInLca},r.prototype.getTargetInLca=function(){return this.targetInLca},r.prototype.getOtherEnd=function(a){if(this.source===a)return this.target;if(this.target===a)return this.source;throw"Node is not incident with this edge"},r.prototype.getOtherEndInGraph=function(a,s){for(var y=this.getOtherEnd(a),o=s.getGraphManager().getRoot();;){if(y.getOwner()==s)return y;if(y.getOwner()==o)break;y=y.getOwner().getParent()}return null},r.prototype.updateLength=function(){var a=new Array(4);this.isOverlapingSourceAndTarget=t.getIntersection(this.target.getRect(),this.source.getRect(),a),this.isOverlapingSourceAndTarget||(this.lengthX=a[0]-a[2],this.lengthY=a[1]-a[3],Math.abs(this.lengthX)<1&&(this.lengthX=e.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=e.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY))},r.prototype.updateLengthSimple=function(){this.lengthX=this.target.getCenterX()-this.source.getCenterX(),this.lengthY=this.target.getCenterY()-this.source.getCenterY(),Math.abs(this.lengthX)<1&&(this.lengthX=e.sign(this.lengthX)),Math.abs(this.lengthY)<1&&(this.lengthY=e.sign(this.lengthY)),this.length=Math.sqrt(this.lengthX*this.lengthX+this.lengthY*this.lengthY)},p.exports=r},function(p,_,f){function i(t){this.vGraphObject=t}p.exports=i},function(p,_,f){var i=f(2),t=f(10),e=f(13),r=f(0),h=f(16),a=f(4);function s(o,d,c,E){c==null&&E==null&&(E=d),i.call(this,E),o.graphManager!=null&&(o=o.graphManager),this.estimatedSize=t.MIN_VALUE,this.inclusionTreeDepth=t.MAX_VALUE,this.vGraphObject=E,this.edges=[],this.graphManager=o,c!=null&&d!=null?this.rect=new e(d.x,d.y,c.width,c.height):this.rect=new e}s.prototype=Object.create(i.prototype);for(var y in i)s[y]=i[y];s.prototype.getEdges=function(){return this.edges},s.prototype.getChild=function(){return this.child},s.prototype.getOwner=function(){return this.owner},s.prototype.getWidth=function(){return this.rect.width},s.prototype.setWidth=function(o){this.rect.width=o},s.prototype.getHeight=function(){return this.rect.height},s.prototype.setHeight=function(o){this.rect.height=o},s.prototype.getCenterX=function(){return this.rect.x+this.rect.width/2},s.prototype.getCenterY=function(){return this.rect.y+this.rect.height/2},s.prototype.getCenter=function(){return new a(this.rect.x+this.rect.width/2,this.rect.y+this.rect.height/2)},s.prototype.getLocation=function(){return new a(this.rect.x,this.rect.y)},s.prototype.getRect=function(){return this.rect},s.prototype.getDiagonal=function(){return Math.sqrt(this.rect.width*this.rect.width+this.rect.height*this.rect.height)},s.prototype.getHalfTheDiagonal=function(){return Math.sqrt(this.rect.height*this.rect.height+this.rect.width*this.rect.width)/2},s.prototype.setRect=function(o,d){this.rect.x=o.x,this.rect.y=o.y,this.rect.width=d.width,this.rect.height=d.height},s.prototype.setCenter=function(o,d){this.rect.x=o-this.rect.width/2,this.rect.y=d-this.rect.height/2},s.prototype.setLocation=function(o,d){this.rect.x=o,this.rect.y=d},s.prototype.moveBy=function(o,d){this.rect.x+=o,this.rect.y+=d},s.prototype.getEdgeListToNode=function(o){var d=[],c=this;return c.edges.forEach(function(E){if(E.target==o){if(E.source!=c)throw"Incorrect edge source!";d.push(E)}}),d},s.prototype.getEdgesBetween=function(o){var d=[],c=this;return c.edges.forEach(function(E){if(!(E.source==c||E.target==c))throw"Incorrect edge source and/or target";(E.target==o||E.source==o)&&d.push(E)}),d},s.prototype.getNeighborsList=function(){var o=new Set,d=this;return d.edges.forEach(function(c){if(c.source==d)o.add(c.target);else{if(c.target!=d)throw"Incorrect incidency!";o.add(c.source)}}),o},s.prototype.withChildren=function(){var o=new Set,d,c;if(o.add(this),this.child!=null)for(var E=this.child.getNodes(),m=0;md&&(this.rect.x-=(this.labelWidth-d)/2,this.setWidth(this.labelWidth)),this.labelHeight>c&&(this.labelPos=="center"?this.rect.y-=(this.labelHeight-c)/2:this.labelPos=="top"&&(this.rect.y-=this.labelHeight-c),this.setHeight(this.labelHeight))}}},s.prototype.getInclusionTreeDepth=function(){if(this.inclusionTreeDepth==t.MAX_VALUE)throw"assert failed";return this.inclusionTreeDepth},s.prototype.transform=function(o){var d=this.rect.x;d>r.WORLD_BOUNDARY?d=r.WORLD_BOUNDARY:d<-r.WORLD_BOUNDARY&&(d=-r.WORLD_BOUNDARY);var c=this.rect.y;c>r.WORLD_BOUNDARY?c=r.WORLD_BOUNDARY:c<-r.WORLD_BOUNDARY&&(c=-r.WORLD_BOUNDARY);var E=new a(d,c),m=o.inverseTransformPoint(E);this.setLocation(m.x,m.y)},s.prototype.getLeft=function(){return this.rect.x},s.prototype.getRight=function(){return this.rect.x+this.rect.width},s.prototype.getTop=function(){return this.rect.y},s.prototype.getBottom=function(){return this.rect.y+this.rect.height},s.prototype.getParent=function(){return this.owner==null?null:this.owner.getParent()},p.exports=s},function(p,_,f){function i(t,e){t==null&&e==null?(this.x=0,this.y=0):(this.x=t,this.y=e)}i.prototype.getX=function(){return this.x},i.prototype.getY=function(){return this.y},i.prototype.setX=function(t){this.x=t},i.prototype.setY=function(t){this.y=t},i.prototype.getDifference=function(t){return new DimensionD(this.x-t.x,this.y-t.y)},i.prototype.getCopy=function(){return new i(this.x,this.y)},i.prototype.translate=function(t){return this.x+=t.width,this.y+=t.height,this},p.exports=i},function(p,_,f){var i=f(2),t=f(10),e=f(0),r=f(6),h=f(3),a=f(1),s=f(13),y=f(12),o=f(11);function d(E,m,T){i.call(this,T),this.estimatedSize=t.MIN_VALUE,this.margin=e.DEFAULT_GRAPH_MARGIN,this.edges=[],this.nodes=[],this.isConnected=!1,this.parent=E,m!=null&&m instanceof r?this.graphManager=m:m!=null&&m instanceof Layout&&(this.graphManager=m.graphManager)}d.prototype=Object.create(i.prototype);for(var c in i)d[c]=i[c];d.prototype.getNodes=function(){return this.nodes},d.prototype.getEdges=function(){return this.edges},d.prototype.getGraphManager=function(){return this.graphManager},d.prototype.getParent=function(){return this.parent},d.prototype.getLeft=function(){return this.left},d.prototype.getRight=function(){return this.right},d.prototype.getTop=function(){return this.top},d.prototype.getBottom=function(){return this.bottom},d.prototype.isConnected=function(){return this.isConnected},d.prototype.add=function(E,m,T){if(m==null&&T==null){var N=E;if(this.graphManager==null)throw"Graph has no graph mgr!";if(this.getNodes().indexOf(N)>-1)throw"Node already in graph!";return N.owner=this,this.getNodes().push(N),N}else{var L=E;if(!(this.getNodes().indexOf(m)>-1&&this.getNodes().indexOf(T)>-1))throw"Source or target not in graph!";if(!(m.owner==T.owner&&m.owner==this))throw"Both owners must be this graph!";return m.owner!=T.owner?null:(L.source=m,L.target=T,L.isInterGraph=!1,this.getEdges().push(L),m.edges.push(L),T!=m&&T.edges.push(L),L)}},d.prototype.remove=function(E){var m=E;if(E instanceof h){if(m==null)throw"Node is null!";if(!(m.owner!=null&&m.owner==this))throw"Owner graph is invalid!";if(this.graphManager==null)throw"Owner graph manager is invalid!";for(var T=m.edges.slice(),N,L=T.length,g=0;g-1&&u>-1))throw"Source and/or target doesn't know this edge!";N.source.edges.splice(n,1),N.target!=N.source&&N.target.edges.splice(u,1);var I=N.source.owner.getEdges().indexOf(N);if(I==-1)throw"Not in owner's edge list!";N.source.owner.getEdges().splice(I,1)}},d.prototype.updateLeftTop=function(){for(var E=t.MAX_VALUE,m=t.MAX_VALUE,T,N,L,g=this.getNodes(),I=g.length,n=0;nT&&(E=T),m>N&&(m=N)}return E==t.MAX_VALUE?null:(g[0].getParent().paddingLeft!=null?L=g[0].getParent().paddingLeft:L=this.margin,this.left=m-L,this.top=E-L,new y(this.left,this.top))},d.prototype.updateBounds=function(E){for(var m=t.MAX_VALUE,T=-t.MAX_VALUE,N=t.MAX_VALUE,L=-t.MAX_VALUE,g,I,n,u,l,v=this.nodes,A=v.length,O=0;Og&&(m=g),Tn&&(N=n),Lg&&(m=g),Tn&&(N=n),L=this.nodes.length){var A=0;T.forEach(function(O){O.owner==E&&A++}),A==this.nodes.length&&(this.isConnected=!0)}},p.exports=d},function(p,_,f){var i,t=f(1);function e(r){i=f(5),this.layout=r,this.graphs=[],this.edges=[]}e.prototype.addRoot=function(){var r=this.layout.newGraph(),h=this.layout.newNode(null),a=this.add(r,h);return this.setRootGraph(a),this.rootGraph},e.prototype.add=function(r,h,a,s,y){if(a==null&&s==null&&y==null){if(r==null)throw"Graph is null!";if(h==null)throw"Parent node is null!";if(this.graphs.indexOf(r)>-1)throw"Graph already in this graph mgr!";if(this.graphs.push(r),r.parent!=null)throw"Already has a parent!";if(h.child!=null)throw"Already has a child!";return r.parent=h,h.child=r,r}else{y=a,s=h,a=r;var o=s.getOwner(),d=y.getOwner();if(!(o!=null&&o.getGraphManager()==this))throw"Source not in this graph mgr!";if(!(d!=null&&d.getGraphManager()==this))throw"Target not in this graph mgr!";if(o==d)return a.isInterGraph=!1,o.add(a,s,y);if(a.isInterGraph=!0,a.source=s,a.target=y,this.edges.indexOf(a)>-1)throw"Edge already in inter-graph edge list!";if(this.edges.push(a),!(a.source!=null&&a.target!=null))throw"Edge source and/or target is null!";if(!(a.source.edges.indexOf(a)==-1&&a.target.edges.indexOf(a)==-1))throw"Edge already in source and/or target incidency list!";return a.source.edges.push(a),a.target.edges.push(a),a}},e.prototype.remove=function(r){if(r instanceof i){var h=r;if(h.getGraphManager()!=this)throw"Graph not in this graph mgr";if(!(h==this.rootGraph||h.parent!=null&&h.parent.graphManager==this))throw"Invalid parent node!";var a=[];a=a.concat(h.getEdges());for(var s,y=a.length,o=0;o=r.getRight()?h[0]+=Math.min(r.getX()-e.getX(),e.getRight()-r.getRight()):r.getX()<=e.getX()&&r.getRight()>=e.getRight()&&(h[0]+=Math.min(e.getX()-r.getX(),r.getRight()-e.getRight())),e.getY()<=r.getY()&&e.getBottom()>=r.getBottom()?h[1]+=Math.min(r.getY()-e.getY(),e.getBottom()-r.getBottom()):r.getY()<=e.getY()&&r.getBottom()>=e.getBottom()&&(h[1]+=Math.min(e.getY()-r.getY(),r.getBottom()-e.getBottom()));var y=Math.abs((r.getCenterY()-e.getCenterY())/(r.getCenterX()-e.getCenterX()));r.getCenterY()===e.getCenterY()&&r.getCenterX()===e.getCenterX()&&(y=1);var o=y*h[0],d=h[1]/y;h[0]o)return h[0]=a,h[1]=c,h[2]=y,h[3]=v,!1;if(sy)return h[0]=d,h[1]=s,h[2]=u,h[3]=o,!1;if(ay?(h[0]=m,h[1]=T,R=!0):(h[0]=E,h[1]=c,R=!0):U===M&&(a>y?(h[0]=d,h[1]=c,R=!0):(h[0]=N,h[1]=T,R=!0)),-S===M?y>a?(h[2]=l,h[3]=v,b=!0):(h[2]=u,h[3]=n,b=!0):S===M&&(y>a?(h[2]=I,h[3]=n,b=!0):(h[2]=A,h[3]=v,b=!0)),R&&b)return!1;if(a>y?s>o?(x=this.getCardinalDirection(U,M,4),F=this.getCardinalDirection(S,M,2)):(x=this.getCardinalDirection(-U,M,3),F=this.getCardinalDirection(-S,M,1)):s>o?(x=this.getCardinalDirection(-U,M,1),F=this.getCardinalDirection(-S,M,3)):(x=this.getCardinalDirection(U,M,2),F=this.getCardinalDirection(S,M,4)),!R)switch(x){case 1:Y=c,k=a+-g/M,h[0]=k,h[1]=Y;break;case 2:k=N,Y=s+L*M,h[0]=k,h[1]=Y;break;case 3:Y=T,k=a+g/M,h[0]=k,h[1]=Y;break;case 4:k=m,Y=s+-L*M,h[0]=k,h[1]=Y;break}if(!b)switch(F){case 1:P=n,X=y+-w/M,h[2]=X,h[3]=P;break;case 2:X=A,P=o+O*M,h[2]=X,h[3]=P;break;case 3:P=v,X=y+w/M,h[2]=X,h[3]=P;break;case 4:X=l,P=o+-O*M,h[2]=X,h[3]=P;break}}return!1},t.getCardinalDirection=function(e,r,h){return e>r?h:1+h%4},t.getIntersection=function(e,r,h,a){if(a==null)return this.getIntersection2(e,r,h);var s=e.x,y=e.y,o=r.x,d=r.y,c=h.x,E=h.y,m=a.x,T=a.y,N=void 0,L=void 0,g=void 0,I=void 0,n=void 0,u=void 0,l=void 0,v=void 0,A=void 0;return g=d-y,n=s-o,l=o*y-s*d,I=T-E,u=c-m,v=m*E-c*T,A=g*u-I*n,A===0?null:(N=(n*v-u*l)/A,L=(I*l-g*v)/A,new i(N,L))},t.angleOfVector=function(e,r,h,a){var s=void 0;return e!==h?(s=Math.atan((a-r)/(h-e)),h0?1:t<0?-1:0},i.floor=function(t){return t<0?Math.ceil(t):Math.floor(t)},i.ceil=function(t){return t<0?Math.floor(t):Math.ceil(t)},p.exports=i},function(p,_,f){function i(){}i.MAX_VALUE=2147483647,i.MIN_VALUE=-2147483648,p.exports=i},function(p,_,f){var i=(function(){function s(y,o){for(var d=0;d"u"?"undefined":i(e);return e==null||r!="object"&&r!="function"},p.exports=t},function(p,_,f){function i(c){if(Array.isArray(c)){for(var E=0,m=Array(c.length);E0&&E;){for(g.push(n[0]);g.length>0&&E;){var u=g[0];g.splice(0,1),L.add(u);for(var l=u.getEdges(),N=0;N-1&&n.splice(w,1)}L=new Set,I=new Map}}return c},d.prototype.createDummyNodesForBendpoints=function(c){for(var E=[],m=c.source,T=this.graphManager.calcLowestCommonAncestor(c.source,c.target),N=0;N0){for(var T=this.edgeToDummyNodes.get(m),N=0;N=0&&E.splice(v,1);var A=I.getNeighborsList();A.forEach(function(R){if(m.indexOf(R)<0){var b=T.get(R),U=b-1;U==1&&u.push(R),T.set(R,U)}})}m=m.concat(u),(E.length==1||E.length==2)&&(N=!0,L=E[0])}return L},d.prototype.setGraphManager=function(c){this.graphManager=c},p.exports=d},function(p,_,f){function i(){}i.seed=1,i.x=0,i.nextDouble=function(){return i.x=Math.sin(i.seed++)*1e4,i.x-Math.floor(i.x)},p.exports=i},function(p,_,f){var i=f(4);function t(e,r){this.lworldOrgX=0,this.lworldOrgY=0,this.ldeviceOrgX=0,this.ldeviceOrgY=0,this.lworldExtX=1,this.lworldExtY=1,this.ldeviceExtX=1,this.ldeviceExtY=1}t.prototype.getWorldOrgX=function(){return this.lworldOrgX},t.prototype.setWorldOrgX=function(e){this.lworldOrgX=e},t.prototype.getWorldOrgY=function(){return this.lworldOrgY},t.prototype.setWorldOrgY=function(e){this.lworldOrgY=e},t.prototype.getWorldExtX=function(){return this.lworldExtX},t.prototype.setWorldExtX=function(e){this.lworldExtX=e},t.prototype.getWorldExtY=function(){return this.lworldExtY},t.prototype.setWorldExtY=function(e){this.lworldExtY=e},t.prototype.getDeviceOrgX=function(){return this.ldeviceOrgX},t.prototype.setDeviceOrgX=function(e){this.ldeviceOrgX=e},t.prototype.getDeviceOrgY=function(){return this.ldeviceOrgY},t.prototype.setDeviceOrgY=function(e){this.ldeviceOrgY=e},t.prototype.getDeviceExtX=function(){return this.ldeviceExtX},t.prototype.setDeviceExtX=function(e){this.ldeviceExtX=e},t.prototype.getDeviceExtY=function(){return this.ldeviceExtY},t.prototype.setDeviceExtY=function(e){this.ldeviceExtY=e},t.prototype.transformX=function(e){var r=0,h=this.lworldExtX;return h!=0&&(r=this.ldeviceOrgX+(e-this.lworldOrgX)*this.ldeviceExtX/h),r},t.prototype.transformY=function(e){var r=0,h=this.lworldExtY;return h!=0&&(r=this.ldeviceOrgY+(e-this.lworldOrgY)*this.ldeviceExtY/h),r},t.prototype.inverseTransformX=function(e){var r=0,h=this.ldeviceExtX;return h!=0&&(r=this.lworldOrgX+(e-this.ldeviceOrgX)*this.lworldExtX/h),r},t.prototype.inverseTransformY=function(e){var r=0,h=this.ldeviceExtY;return h!=0&&(r=this.lworldOrgY+(e-this.ldeviceOrgY)*this.lworldExtY/h),r},t.prototype.inverseTransformPoint=function(e){var r=new i(this.inverseTransformX(e.x),this.inverseTransformY(e.y));return r},p.exports=t},function(p,_,f){function i(o){if(Array.isArray(o)){for(var d=0,c=Array(o.length);de.ADAPTATION_LOWER_NODE_LIMIT&&(this.coolingFactor=Math.max(this.coolingFactor*e.COOLING_ADAPTATION_FACTOR,this.coolingFactor-(o-e.ADAPTATION_LOWER_NODE_LIMIT)/(e.ADAPTATION_UPPER_NODE_LIMIT-e.ADAPTATION_LOWER_NODE_LIMIT)*this.coolingFactor*(1-e.COOLING_ADAPTATION_FACTOR))),this.maxNodeDisplacement=e.MAX_NODE_DISPLACEMENT_INCREMENTAL):(o>e.ADAPTATION_LOWER_NODE_LIMIT?this.coolingFactor=Math.max(e.COOLING_ADAPTATION_FACTOR,1-(o-e.ADAPTATION_LOWER_NODE_LIMIT)/(e.ADAPTATION_UPPER_NODE_LIMIT-e.ADAPTATION_LOWER_NODE_LIMIT)*(1-e.COOLING_ADAPTATION_FACTOR)):this.coolingFactor=1,this.initialCoolingFactor=this.coolingFactor,this.maxNodeDisplacement=e.MAX_NODE_DISPLACEMENT),this.maxIterations=Math.max(this.getAllNodes().length*5,this.maxIterations),this.totalDisplacementThreshold=this.displacementThresholdPerNode*this.getAllNodes().length,this.repulsionRange=this.calcRepulsionRange()},s.prototype.calcSpringForces=function(){for(var o=this.getAllEdges(),d,c=0;c0&&arguments[0]!==void 0?arguments[0]:!0,d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,c,E,m,T,N=this.getAllNodes(),L;if(this.useFRGridVariant)for(this.totalIterations%e.GRID_CALCULATION_CHECK_PERIOD==1&&o&&this.updateGrid(),L=new Set,c=0;cg||L>g)&&(o.gravitationForceX=-this.gravityConstant*m,o.gravitationForceY=-this.gravityConstant*T)):(g=d.getEstimatedSize()*this.compoundGravityRangeFactor,(N>g||L>g)&&(o.gravitationForceX=-this.gravityConstant*m*this.compoundGravityConstant,o.gravitationForceY=-this.gravityConstant*T*this.compoundGravityConstant))},s.prototype.isConverged=function(){var o,d=!1;return this.totalIterations>this.maxIterations/3&&(d=Math.abs(this.totalDisplacement-this.oldTotalDisplacement)<2),o=this.totalDisplacement=N.length||g>=N[0].length)){for(var I=0;Ia}}]),h})();p.exports=r},function(p,_,f){var i=(function(){function r(h,a){for(var s=0;s2&&arguments[2]!==void 0?arguments[2]:1,y=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:-1;t(this,r),this.sequence1=h,this.sequence2=a,this.match_score=s,this.mismatch_penalty=y,this.gap_penalty=o,this.iMax=h.length+1,this.jMax=a.length+1,this.grid=new Array(this.iMax);for(var d=0;d=0;h--){var a=this.listeners[h];a.event===e&&a.callback===r&&this.listeners.splice(h,1)}},t.emit=function(e,r){for(var h=0;ha.coolingFactor*a.maxNodeDisplacement&&(this.displacementX=a.coolingFactor*a.maxNodeDisplacement*e.sign(this.displacementX)),Math.abs(this.displacementY)>a.coolingFactor*a.maxNodeDisplacement&&(this.displacementY=a.coolingFactor*a.maxNodeDisplacement*e.sign(this.displacementY)),this.child==null?this.moveBy(this.displacementX,this.displacementY):this.child.getNodes().length==0?this.moveBy(this.displacementX,this.displacementY):this.propogateDisplacementToChildren(this.displacementX,this.displacementY),a.totalDisplacement+=Math.abs(this.displacementX)+Math.abs(this.displacementY),this.springForceX=0,this.springForceY=0,this.repulsionForceX=0,this.repulsionForceY=0,this.gravitationForceX=0,this.gravitationForceY=0,this.displacementX=0,this.displacementY=0},r.prototype.propogateDisplacementToChildren=function(a,s){for(var y=this.getChild().getNodes(),o,d=0;d0)this.positionNodesRadially(l);else{this.reduceTrees(),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),u=this.nodesWithGravity.filter(function(O){return n.has(O)});this.graphManager.setAllNodesToApplyGravitation(u),this.positionNodesRandomly()}}return this.initSpringEmbedder(),this.runSpringEmbedder(),!0},g.prototype.tick=function(){if(this.totalIterations++,this.totalIterations===this.maxIterations&&!this.isTreeGrowing&&!this.isGrowthFinished)if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;if(this.totalIterations%y.CONVERGENCE_CHECK_PERIOD==0&&!this.isTreeGrowing&&!this.isGrowthFinished){if(this.isConverged())if(this.prunedNodesAll.length>0)this.isTreeGrowing=!0;else return!0;this.coolingCycle++,this.layoutQuality==0?this.coolingAdjuster=this.coolingCycle:this.layoutQuality==1&&(this.coolingAdjuster=this.coolingCycle/3),this.coolingFactor=Math.max(this.initialCoolingFactor-Math.pow(this.coolingCycle,Math.log(100*(this.initialCoolingFactor-this.finalTemperature))/Math.log(this.maxCoolingCycle))/100*this.coolingAdjuster,this.finalTemperature),this.animationPeriod=Math.ceil(this.initialAnimationPeriod*Math.sqrt(this.coolingFactor))}if(this.isTreeGrowing){if(this.growTreeIterations%10==0)if(this.prunedNodesAll.length>0){this.graphManager.updateBounds(),this.updateGrid(),this.growTree(this.prunedNodesAll),this.graphManager.resetAllNodesToApplyGravitation();var n=new Set(this.getAllNodes()),u=this.nodesWithGravity.filter(function(A){return n.has(A)});this.graphManager.setAllNodesToApplyGravitation(u),this.graphManager.updateBounds(),this.updateGrid(),this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL}else this.isTreeGrowing=!1,this.isGrowthFinished=!0;this.growTreeIterations++}if(this.isGrowthFinished){if(this.isConverged())return!0;this.afterGrowthIterations%10==0&&(this.graphManager.updateBounds(),this.updateGrid()),this.coolingFactor=y.DEFAULT_COOLING_FACTOR_INCREMENTAL*((100-this.afterGrowthIterations)/100),this.afterGrowthIterations++}var l=!this.isTreeGrowing&&!this.isGrowthFinished,v=this.growTreeIterations%10==1&&this.isTreeGrowing||this.afterGrowthIterations%10==1&&this.isGrowthFinished;return this.totalDisplacement=0,this.graphManager.updateBounds(),this.calcSpringForces(),this.calcRepulsionForces(l,v),this.calcGravitationalForces(),this.moveNodes(),this.animate(),!1},g.prototype.getPositionsData=function(){for(var n=this.graphManager.getAllNodes(),u={},l=0;l1){var R;for(R=0;Rv&&(v=Math.floor(w.y)),O=Math.floor(w.x+s.DEFAULT_COMPONENT_SEPERATION)}this.transform(new c(o.WORLD_CENTER_X-w.x/2,o.WORLD_CENTER_Y-w.y/2))},g.radialLayout=function(n,u,l){var v=Math.max(this.maxDiagonalInTree(n),s.DEFAULT_RADIAL_SEPARATION);g.branchRadialLayout(u,null,0,359,0,v);var A=N.calculateBounds(n),O=new L;O.setDeviceOrgX(A.getMinX()),O.setDeviceOrgY(A.getMinY()),O.setWorldOrgX(l.x),O.setWorldOrgY(l.y);for(var w=0;w1;){var P=X[0];X.splice(0,1);var B=M.indexOf(P);B>=0&&M.splice(B,1),k--,x--}u!=null?Y=(M.indexOf(X[0])+1)%k:Y=0;for(var H=Math.abs(v-l)/x,$=Y;F!=x;$=++$%k){var V=M[$].getOtherEnd(n);if(V!=u){var z=(l+F*H)%360,j=(z+H)%360;g.branchRadialLayout(V,n,z,j,A+O,O),F++}}},g.maxDiagonalInTree=function(n){for(var u=m.MIN_VALUE,l=0;lu&&(u=A)}return u},g.prototype.calcRepulsionRange=function(){return 2*(this.level+1)*this.idealEdgeLength},g.prototype.groupZeroDegreeMembers=function(){var n=this,u={};this.memberGroups={},this.idToDummyNode={};for(var l=[],v=this.graphManager.getAllNodes(),A=0;A"u"&&(u[R]=[]),u[R]=u[R].concat(O)}Object.keys(u).forEach(function(b){if(u[b].length>1){var U="DummyCompound_"+b;n.memberGroups[U]=u[b];var S=u[b][0].getParent(),M=new h(n.graphManager);M.id=U,M.paddingLeft=S.paddingLeft||0,M.paddingRight=S.paddingRight||0,M.paddingBottom=S.paddingBottom||0,M.paddingTop=S.paddingTop||0,n.idToDummyNode[U]=M;var x=n.getGraphManager().add(n.newGraph(),M),F=S.getChild();F.add(M);for(var k=0;k=0;n--){var u=this.compoundOrder[n],l=u.id,v=u.paddingLeft,A=u.paddingTop;this.adjustLocations(this.tiledMemberPack[l],u.rect.x,u.rect.y,v,A)}},g.prototype.repopulateZeroDegreeMembers=function(){var n=this,u=this.tiledZeroDegreePack;Object.keys(u).forEach(function(l){var v=n.idToDummyNode[l],A=v.paddingLeft,O=v.paddingTop;n.adjustLocations(u[l],v.rect.x,v.rect.y,A,O)})},g.prototype.getToBeTiled=function(n){var u=n.id;if(this.toBeTiled[u]!=null)return this.toBeTiled[u];var l=n.getChild();if(l==null)return this.toBeTiled[u]=!1,!1;for(var v=l.getNodes(),A=0;A0)return this.toBeTiled[u]=!1,!1;if(O.getChild()==null){this.toBeTiled[O.id]=!1;continue}if(!this.getToBeTiled(O))return this.toBeTiled[u]=!1,!1}return this.toBeTiled[u]=!0,!0},g.prototype.getNodeDegree=function(n){n.id;for(var u=n.getEdges(),l=0,v=0;vb&&(b=S.rect.height)}l+=b+n.verticalPadding}},g.prototype.tileCompoundMembers=function(n,u){var l=this;this.tiledMemberPack=[],Object.keys(n).forEach(function(v){var A=u[v];l.tiledMemberPack[v]=l.tileNodes(n[v],A.paddingLeft+A.paddingRight),A.rect.width=l.tiledMemberPack[v].width,A.rect.height=l.tiledMemberPack[v].height})},g.prototype.tileNodes=function(n,u){var l=s.TILING_PADDING_VERTICAL,v=s.TILING_PADDING_HORIZONTAL,A={rows:[],rowWidth:[],rowHeight:[],width:0,height:u,verticalPadding:l,horizontalPadding:v};n.sort(function(R,b){return R.rect.width*R.rect.height>b.rect.width*b.rect.height?-1:R.rect.width*R.rect.height0&&(w+=n.horizontalPadding),n.rowWidth[l]=w,n.width0&&(R+=n.verticalPadding);var b=0;R>n.rowHeight[l]&&(b=n.rowHeight[l],n.rowHeight[l]=R,b=n.rowHeight[l]-b),n.height+=b,n.rows[l].push(u)},g.prototype.getShortestRowIndex=function(n){for(var u=-1,l=Number.MAX_VALUE,v=0;vl&&(u=v,l=n.rowWidth[v]);return u},g.prototype.canAddHorizontal=function(n,u,l){var v=this.getShortestRowIndex(n);if(v<0)return!0;var A=n.rowWidth[v];if(A+n.horizontalPadding+u<=n.width)return!0;var O=0;n.rowHeight[v]0&&(O=l+n.verticalPadding-n.rowHeight[v]);var w;n.width-A>=u+n.horizontalPadding?w=(n.height+O)/(A+u+n.horizontalPadding):w=(n.height+O)/n.width,O=l+n.verticalPadding;var R;return n.widthO&&u!=l){v.splice(-1,1),n.rows[l].push(A),n.rowWidth[u]=n.rowWidth[u]-O,n.rowWidth[l]=n.rowWidth[l]+O,n.width=n.rowWidth[instance.getLongestRowIndex(n)];for(var w=Number.MIN_VALUE,R=0;Rw&&(w=v[R].height);u>0&&(w+=n.verticalPadding);var b=n.rowHeight[u]+n.rowHeight[l];n.rowHeight[u]=w,n.rowHeight[l]0)for(var F=A;F<=O;F++)x[0]+=this.grid[F][w-1].length+this.grid[F][w].length-1;if(O0)for(var F=w;F<=R;F++)x[3]+=this.grid[A-1][F].length+this.grid[A][F].length-1;for(var k=m.MAX_VALUE,Y,X,P=0;P0){var R;R=L.getGraphManager().add(L.newGraph(),l),this.processChildrenList(R,u,L)}}},c.prototype.stop=function(){return this.stopped=!0,this};var m=function(T){T("layout","cose-bilkent",c)};typeof cytoscape<"u"&&m(cytoscape),_.exports=m}])})})(it)),it.exports}var xt=Mt();const bt=It(xt);var ot=(function(){var D=G(function(L,g,I,n){for(I=I||{},n=L.length;n--;I[L[n]]=g);return I},"o"),C=[1,4],p=[1,13],_=[1,12],f=[1,15],i=[1,16],t=[1,20],e=[1,19],r=[6,7,8],h=[1,26],a=[1,24],s=[1,25],y=[6,7,11],o=[1,6,13,15,16,19,22],d=[1,33],c=[1,34],E=[1,6,7,11,13,15,16,19,22],m={trace:G(function(){},"trace"),yy:{},symbols_:{error:2,start:3,mindMap:4,spaceLines:5,SPACELINE:6,NL:7,MINDMAP:8,document:9,stop:10,EOF:11,statement:12,SPACELIST:13,node:14,ICON:15,CLASS:16,nodeWithId:17,nodeWithoutId:18,NODE_DSTART:19,NODE_DESCR:20,NODE_DEND:21,NODE_ID:22,$accept:0,$end:1},terminals_:{2:"error",6:"SPACELINE",7:"NL",8:"MINDMAP",11:"EOF",13:"SPACELIST",15:"ICON",16:"CLASS",19:"NODE_DSTART",20:"NODE_DESCR",21:"NODE_DEND",22:"NODE_ID"},productions_:[0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,2],[12,2],[12,1],[12,1],[12,1],[12,1],[12,1],[14,1],[14,1],[18,3],[17,1],[17,4]],performAction:G(function(L,g,I,n,u,l,v){var A=l.length-1;switch(u){case 6:case 7:return n;case 8:n.getLogger().trace("Stop NL ");break;case 9:n.getLogger().trace("Stop EOF ");break;case 11:n.getLogger().trace("Stop NL2 ");break;case 12:n.getLogger().trace("Stop EOF2 ");break;case 15:n.getLogger().info("Node: ",l[A].id),n.addNode(l[A-1].length,l[A].id,l[A].descr,l[A].type);break;case 16:n.getLogger().trace("Icon: ",l[A]),n.decorateNode({icon:l[A]});break;case 17:case 21:n.decorateNode({class:l[A]});break;case 18:n.getLogger().trace("SPACELIST");break;case 19:n.getLogger().trace("Node: ",l[A].id),n.addNode(0,l[A].id,l[A].descr,l[A].type);break;case 20:n.decorateNode({icon:l[A]});break;case 25:n.getLogger().trace("node found ..",l[A-2]),this.$={id:l[A-1],descr:l[A-1],type:n.getType(l[A-2],l[A])};break;case 26:this.$={id:l[A],descr:l[A],type:n.nodeType.DEFAULT};break;case 27:n.getLogger().trace("node found ..",l[A-3]),this.$={id:l[A-3],descr:l[A-1],type:n.getType(l[A-2],l[A])};break}},"anonymous"),table:[{3:1,4:2,5:3,6:[1,5],8:C},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:C},{6:p,7:[1,10],9:9,12:11,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},D(r,[2,3]),{1:[2,2]},D(r,[2,4]),D(r,[2,5]),{1:[2,6],6:p,12:21,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},{6:p,9:22,12:11,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},{6:h,7:a,10:23,11:s},D(y,[2,22],{17:17,18:18,14:27,15:[1,28],16:[1,29],19:t,22:e}),D(y,[2,18]),D(y,[2,19]),D(y,[2,20]),D(y,[2,21]),D(y,[2,23]),D(y,[2,24]),D(y,[2,26],{19:[1,30]}),{20:[1,31]},{6:h,7:a,10:32,11:s},{1:[2,7],6:p,12:21,13:_,14:14,15:f,16:i,17:17,18:18,19:t,22:e},D(o,[2,14],{7:d,11:c}),D(E,[2,8]),D(E,[2,9]),D(E,[2,10]),D(y,[2,15]),D(y,[2,16]),D(y,[2,17]),{20:[1,35]},{21:[1,36]},D(o,[2,13],{7:d,11:c}),D(E,[2,11]),D(E,[2,12]),{21:[1,37]},D(y,[2,25]),D(y,[2,27])],defaultActions:{2:[2,1],6:[2,2]},parseError:G(function(L,g){if(g.recoverable)this.trace(L);else{var I=new Error(L);throw I.hash=g,I}},"parseError"),parse:G(function(L){var g=this,I=[0],n=[],u=[null],l=[],v=this.table,A="",O=0,w=0,R=2,b=1,U=l.slice.call(arguments,1),S=Object.create(this.lexer),M={yy:{}};for(var x in this.yy)Object.prototype.hasOwnProperty.call(this.yy,x)&&(M.yy[x]=this.yy[x]);S.setInput(L,M.yy),M.yy.lexer=S,M.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var F=S.yylloc;l.push(F);var k=S.options&&S.options.ranges;typeof M.yy.parseError=="function"?this.parseError=M.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Y(W){I.length=I.length-2*W,u.length=u.length-W,l.length=l.length-W}G(Y,"popStack");function X(){var W;return W=n.pop()||S.lex()||b,typeof W!="number"&&(W instanceof Array&&(n=W,W=n.pop()),W=g.symbols_[W]||W),W}G(X,"lex");for(var P,B,H,$,V={},z,j,ht,Z;;){if(B=I[I.length-1],this.defaultActions[B]?H=this.defaultActions[B]:((P===null||typeof P>"u")&&(P=X()),H=v[B]&&v[B][P]),typeof H>"u"||!H.length||!H[0]){var J="";Z=[];for(z in v[B])this.terminals_[z]&&z>R&&Z.push("'"+this.terminals_[z]+"'");S.showPosition?J="Parse error on line "+(O+1)+`: `+S.showPosition()+` Expecting `+Z.join(", ")+", got '"+(this.terminals_[P]||P)+"'":J="Parse error on line "+(O+1)+": Unexpected "+(P==b?"end of input":"'"+(this.terminals_[P]||P)+"'"),this.parseError(J,{text:S.match,token:this.terminals_[P]||P,line:S.yylineno,loc:F,expected:Z})}if(H[0]instanceof Array&&H.length>1)throw new Error("Parse Error: multiple actions possible at state: "+B+", token: "+P);switch(H[0]){case 1:I.push(P),u.push(S.yytext),l.push(S.yylloc),I.push(H[1]),P=null,w=S.yyleng,A=S.yytext,O=S.yylineno,F=S.yylloc;break;case 2:if(j=this.productions_[H[1]][1],V.$=u[u.length-j],V._$={first_line:l[l.length-(j||1)].first_line,last_line:l[l.length-1].last_line,first_column:l[l.length-(j||1)].first_column,last_column:l[l.length-1].last_column},k&&(V._$.range=[l[l.length-(j||1)].range[0],l[l.length-1].range[1]]),$=this.performAction.apply(V,[A,w,O,M.yy,H[1],u,l].concat(U)),typeof $<"u")return $;j&&(I=I.slice(0,-1*j*2),u=u.slice(0,-1*j),l=l.slice(0,-1*j)),I.push(this.productions_[H[1]][0]),u.push(V.$),l.push(V._$),ht=v[I[I.length-2]][I[I.length-1]],I.push(ht);break;case 3:return!0}}return!0},"parse")},T=(function(){var L={EOF:1,parseError:G(function(g,I){if(this.yy.parser)this.yy.parser.parseError(g,I);else throw new Error(g)},"parseError"),setInput:G(function(g,I){return this.yy=I||this.yy||{},this._input=g,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:G(function(){var g=this._input[0];this.yytext+=g,this.yyleng++,this.offset++,this.match+=g,this.matched+=g;var I=g.match(/(?:\r\n?|\n).*/g);return I?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),g},"input"),unput:G(function(g){var I=g.length,n=g.split(/(?:\r\n?|\n)/g);this._input=g+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-I),this.offset-=I;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var l=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===u.length?this.yylloc.first_column:0)+u[u.length-n.length].length-n[0].length:this.yylloc.first_column-I},this.options.ranges&&(this.yylloc.range=[l[0],l[0]+this.yyleng-I]),this.yyleng=this.yytext.length,this},"unput"),more:G(function(){return this._more=!0,this},"more"),reject:G(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:G(function(g){this.unput(this.match.slice(g))},"less"),pastInput:G(function(){var g=this.matched.substr(0,this.matched.length-this.match.length);return(g.length>20?"...":"")+g.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:G(function(){var g=this.match;return g.length<20&&(g+=this._input.substr(0,20-g.length)),(g.substr(0,20)+(g.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:G(function(){var g=this.pastInput(),I=new Array(g.length+1).join("-");return g+this.upcomingInput()+` diff --git a/assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.DrfJFWrX.js b/assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.BuSMwSOI.js similarity index 91% rename from assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.DrfJFWrX.js rename to assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.BuSMwSOI.js index 395f092..84e33f0 100644 --- a/assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.DrfJFWrX.js +++ b/assets/chunks/pieDiagram-NIOCPIFQ-B6XSd-nA-BuzC7Xnu.BuSMwSOI.js @@ -1,4 +1,4 @@ -import{i as X}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.gjo3LCPr.js";import{q as c,a6 as q,a5 as E,a7 as K,a8 as Y,ao as _,an as j,O as W,A as H,aA as J,aS as Q,aU as Z,aa as tt,at as et,aC as at,aV as w,aW as nt,aX as z}from"../app.DiEjJ8gz.js";import{I as rt}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js";import{d as L}from"./arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js";import{g as it}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";function ot(t,a){return at?1:a>=t?0:NaN}function lt(t){return t}function st(){var t=lt,a=ot,o=null,m=w(0),g=w(z),S=w(0);function i(e){var n,s=(e=nt(e)).length,u,$,h=0,p=new Array(s),r=new Array(s),x=+m.apply(this,arguments),v=Math.min(z,Math.max(-z,g.apply(this,arguments)-x)),f,C=Math.min(Math.abs(v)/s,S.apply(this,arguments)),D=C*(v<0?-1:1),d;for(n=0;n0&&(h+=d);for(a!=null?p.sort(function(y,A){return a(r[y],r[A])}):o!=null&&p.sort(function(y,A){return o(e[y],e[A])}),n=0,$=h?(v-s*D)/h:0;n0?d*$:0)+D,r[u]={data:e[u],index:n,value:d,startAngle:x,endAngle:f,padAngle:C};return r}return i.value=function(e){return arguments.length?(t=typeof e=="function"?e:w(+e),i):t},i.sortValues=function(e){return arguments.length?(a=e,o=null,i):a},i.sort=function(e){return arguments.length?(o=e,a=null,i):o},i.startAngle=function(e){return arguments.length?(m=typeof e=="function"?e:w(+e),i):m},i.endAngle=function(e){return arguments.length?(g=typeof e=="function"?e:w(+e),i):g},i.padAngle=function(e){return arguments.length?(S=typeof e=="function"?e:w(+e),i):S},i}var pt=at.pie,R={sections:new Map,showData:!1},M=R.sections,V=R.showData,ct=structuredClone(pt),ut=c(()=>structuredClone(ct),"getConfig"),dt=c(()=>{M=new Map,V=R.showData,et()},"clear"),gt=c(({label:t,value:a})=>{M.has(t)||(M.set(t,a),W.debug(`added new section: ${t}, with value: ${a}`))},"addSection"),ft=c(()=>M,"getSections"),mt=c(t=>{V=t},"setShowData"),ht=c(()=>V,"getShowData"),U={getConfig:ut,clear:dt,setDiagramTitle:j,getDiagramTitle:_,setAccTitle:Y,getAccTitle:K,setAccDescription:E,getAccDescription:q,addSection:gt,getSections:ft,setShowData:mt,getShowData:ht},xt=c((t,a)=>{X(t,a),a.setShowData(t.showData),t.sections.map(a.addSection)},"populateDb"),yt={parse:c(async t=>{const a=await rt("pie",t);W.debug(a),xt(a,U)},"parse")},wt=c(t=>` +import{i as X}from"./chunk-353BL4L5-C1ZAb07r-BMNIXPVo.CEEq5ZDr.js";import{q as c,a6 as q,a5 as E,a7 as K,a8 as Y,ao as _,an as j,O as W,A as H,aA as J,aS as Q,aU as Z,aa as tt,at as et,aC as at,aV as w,aW as nt,aX as z}from"../app.DfYWW83x.js";import{I as rt}from"./treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js";import{d as L}from"./arc-CegaQWj_-yn6JxQT-.C2WQ2TtA.js";import{g as it}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";import"./clone-78XdctpQ-DP6jZ9da.DhIG4lmO.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";function ot(t,a){return at?1:a>=t?0:NaN}function lt(t){return t}function st(){var t=lt,a=ot,o=null,m=w(0),g=w(z),S=w(0);function i(e){var n,s=(e=nt(e)).length,u,$,h=0,p=new Array(s),r=new Array(s),x=+m.apply(this,arguments),v=Math.min(z,Math.max(-z,g.apply(this,arguments)-x)),f,C=Math.min(Math.abs(v)/s,S.apply(this,arguments)),D=C*(v<0?-1:1),d;for(n=0;n0&&(h+=d);for(a!=null?p.sort(function(y,A){return a(r[y],r[A])}):o!=null&&p.sort(function(y,A){return o(e[y],e[A])}),n=0,$=h?(v-s*D)/h:0;n0?d*$:0)+D,r[u]={data:e[u],index:n,value:d,startAngle:x,endAngle:f,padAngle:C};return r}return i.value=function(e){return arguments.length?(t=typeof e=="function"?e:w(+e),i):t},i.sortValues=function(e){return arguments.length?(a=e,o=null,i):a},i.sort=function(e){return arguments.length?(o=e,a=null,i):o},i.startAngle=function(e){return arguments.length?(m=typeof e=="function"?e:w(+e),i):m},i.endAngle=function(e){return arguments.length?(g=typeof e=="function"?e:w(+e),i):g},i.padAngle=function(e){return arguments.length?(S=typeof e=="function"?e:w(+e),i):S},i}var pt=at.pie,R={sections:new Map,showData:!1},M=R.sections,V=R.showData,ct=structuredClone(pt),ut=c(()=>structuredClone(ct),"getConfig"),dt=c(()=>{M=new Map,V=R.showData,et()},"clear"),gt=c(({label:t,value:a})=>{M.has(t)||(M.set(t,a),W.debug(`added new section: ${t}, with value: ${a}`))},"addSection"),ft=c(()=>M,"getSections"),mt=c(t=>{V=t},"setShowData"),ht=c(()=>V,"getShowData"),U={getConfig:ut,clear:dt,setDiagramTitle:j,getDiagramTitle:_,setAccTitle:Y,getAccTitle:K,setAccDescription:E,getAccDescription:q,addSection:gt,getSections:ft,setShowData:mt,getShowData:ht},xt=c((t,a)=>{X(t,a),a.setShowData(t.showData),t.sections.map(a.addSection)},"populateDb"),yt={parse:c(async t=>{const a=await rt("pie",t);W.debug(a),xt(a,U)},"parse")},wt=c(t=>` .pieCircle{ stroke: ${t.pieStrokeColor}; stroke-width : ${t.pieStrokeWidth}; diff --git a/assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.Cm0TOG_e.js b/assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.DMAY0E28.js similarity index 99% rename from assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.Cm0TOG_e.js rename to assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.DMAY0E28.js index 6210a48..b1b1761 100644 --- a/assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.Cm0TOG_e.js +++ b/assets/chunks/quadrantDiagram-2OG54O6I-exVKgMW--CNOueA6o.DMAY0E28.js @@ -1,4 +1,4 @@ -import{q as o,a5 as be,a6 as _e,ao as ee,an as Se,a7 as ke,a8 as Fe,A as Lt,O as yt,a9 as kt,aa as Pe,at as Ce,aC as L,b9 as ve,ad as Le}from"../app.DiEjJ8gz.js";import{i as te}from"./linear-m73w_WNc-FCrKOMM3.W3QlvtjM.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";var Ct=(function(){var t=o(function(Q,a,c,h){for(c=c||{},h=Q.length;h--;c[Q[h]]=a);return c},"o"),n=[1,3],g=[1,4],f=[1,5],l=[1,6],u=[1,7],A=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],d=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],r=[55,56,57],D=[2,36],T=[1,37],m=[1,36],p=[1,38],y=[1,35],x=[1,43],b=[1,41],lt=[1,14],ht=[1,23],ct=[1,18],dt=[1,19],rt=[1,20],ot=[1,21],i=[1,22],Et=[1,24],Dt=[1,25],zt=[1,26],It=[1,27],wt=[1,28],Nt=[1,29],W=[1,32],O=[1,33],_=[1,34],S=[1,39],k=[1,40],F=[1,42],P=[1,44],X=[1,62],H=[1,61],C=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],$t=[1,65],Rt=[1,66],Ut=[1,67],Wt=[1,68],Ot=[1,69],Qt=[1,70],Bt=[1,71],Xt=[1,72],Ht=[1,73],Mt=[1,74],Yt=[1,75],jt=[1,76],I=[4,5,6,7,8,9,10,11,12,13,14,15,18],K=[1,90],V=[1,91],J=[1,92],Z=[1,99],G=[1,93],tt=[1,96],et=[1,94],it=[1,95],at=[1,97],nt=[1,98],mt=[1,102],Kt=[10,55,56,57],R=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],qt={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(Q,a,c,h,q,e,w){var s=e.length-1;switch(q){case 23:this.$=e[s];break;case 24:this.$=e[s-1]+""+e[s];break;case 26:this.$=e[s-1]+e[s];break;case 27:this.$=[e[s].trim()];break;case 28:e[s-2].push(e[s].trim()),this.$=e[s-2];break;case 29:this.$=e[s-4],h.addClass(e[s-2],e[s]);break;case 37:this.$=[];break;case 42:this.$=e[s].trim(),h.setDiagramTitle(this.$);break;case 43:this.$=e[s].trim(),h.setAccTitle(this.$);break;case 44:case 45:this.$=e[s].trim(),h.setAccDescription(this.$);break;case 46:h.addSection(e[s].substr(8)),this.$=e[s].substr(8);break;case 47:h.addPoint(e[s-3],"",e[s-1],e[s],[]);break;case 48:h.addPoint(e[s-4],e[s-3],e[s-1],e[s],[]);break;case 49:h.addPoint(e[s-4],"",e[s-2],e[s-1],e[s]);break;case 50:h.addPoint(e[s-5],e[s-4],e[s-2],e[s-1],e[s]);break;case 51:h.setXAxisLeftText(e[s-2]),h.setXAxisRightText(e[s]);break;case 52:e[s-1].text+=" ⟶ ",h.setXAxisLeftText(e[s-1]);break;case 53:h.setXAxisLeftText(e[s]);break;case 54:h.setYAxisBottomText(e[s-2]),h.setYAxisTopText(e[s]);break;case 55:e[s-1].text+=" ⟶ ",h.setYAxisBottomText(e[s-1]);break;case 56:h.setYAxisBottomText(e[s]);break;case 57:h.setQuadrant1Text(e[s]);break;case 58:h.setQuadrant2Text(e[s]);break;case 59:h.setQuadrant3Text(e[s]);break;case 60:h.setQuadrant4Text(e[s]);break;case 64:this.$={text:e[s],type:"text"};break;case 65:this.$={text:e[s-1].text+""+e[s],type:e[s-1].type};break;case 66:this.$={text:e[s],type:"text"};break;case 67:this.$={text:e[s],type:"markdown"};break;case 68:this.$=e[s];break;case 69:this.$=e[s-1]+""+e[s];break}},"anonymous"),table:[{18:n,26:1,27:2,28:g,55:f,56:l,57:u},{1:[3]},{18:n,26:8,27:2,28:g,55:f,56:l,57:u},{18:n,26:9,27:2,28:g,55:f,56:l,57:u},t(A,[2,33],{29:10}),t(d,[2,61]),t(d,[2,62]),t(d,[2,63]),{1:[2,30]},{1:[2,31]},t(r,D,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:T,5:m,10:p,12:y,13:x,14:b,18:lt,25:ht,35:ct,37:dt,39:rt,41:ot,42:i,48:Et,50:Dt,51:zt,52:It,53:wt,54:Nt,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),t(A,[2,34]),{27:45,55:f,56:l,57:u},t(r,[2,37]),t(r,D,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:T,5:m,10:p,12:y,13:x,14:b,18:lt,25:ht,35:ct,37:dt,39:rt,41:ot,42:i,48:Et,50:Dt,51:zt,52:It,53:wt,54:Nt,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),t(r,[2,39]),t(r,[2,40]),t(r,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(r,[2,45]),t(r,[2,46]),{18:[1,50]},{4:T,5:m,10:p,12:y,13:x,14:b,43:51,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:52,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:53,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:54,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:55,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:56,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,44:[1,57],47:[1,58],58:60,59:59,63:_,64:S,65:k,66:F,67:P},t(C,[2,64]),t(C,[2,66]),t(C,[2,67]),t(C,[2,70]),t(C,[2,71]),t(C,[2,72]),t(C,[2,73]),t(C,[2,74]),t(C,[2,75]),t(C,[2,76]),t(C,[2,77]),t(C,[2,78]),t(C,[2,79]),t(C,[2,80]),t(A,[2,35]),t(r,[2,38]),t(r,[2,42]),t(r,[2,43]),t(r,[2,44]),{3:64,4:$t,5:Rt,6:Ut,7:Wt,8:Ot,9:Qt,10:Bt,11:Xt,12:Ht,13:Mt,14:Yt,15:jt,21:63},t(r,[2,53],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,49:[1,77],63:_,64:S,65:k,66:F,67:P}),t(r,[2,56],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,49:[1,78],63:_,64:S,65:k,66:F,67:P}),t(r,[2,57],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,58],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,59],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,60],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),{45:[1,79]},{44:[1,80]},t(C,[2,65]),t(C,[2,81]),t(C,[2,82]),t(C,[2,83]),{3:82,4:$t,5:Rt,6:Ut,7:Wt,8:Ot,9:Qt,10:Bt,11:Xt,12:Ht,13:Mt,14:Yt,15:jt,18:[1,81]},t(I,[2,23]),t(I,[2,1]),t(I,[2,2]),t(I,[2,3]),t(I,[2,4]),t(I,[2,5]),t(I,[2,6]),t(I,[2,7]),t(I,[2,8]),t(I,[2,9]),t(I,[2,10]),t(I,[2,11]),t(I,[2,12]),t(r,[2,52],{58:31,43:83,4:T,5:m,10:p,12:y,13:x,14:b,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),t(r,[2,55],{58:31,43:84,4:T,5:m,10:p,12:y,13:x,14:b,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),{46:[1,85]},{45:[1,86]},{4:K,5:V,6:J,8:Z,11:G,13:tt,16:89,17:et,18:it,19:at,20:nt,22:88,23:87},t(I,[2,24]),t(r,[2,51],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,54],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,47],{22:88,16:89,23:100,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt}),{46:[1,101]},t(r,[2,29],{10:mt}),t(Kt,[2,27],{16:103,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt}),t(R,[2,25]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),t(R,[2,16]),t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,21]),t(R,[2,22]),t(r,[2,49],{10:mt}),t(r,[2,48],{22:88,16:89,23:104,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt}),{4:K,5:V,6:J,8:Z,11:G,13:tt,16:89,17:et,18:it,19:at,20:nt,22:105},t(R,[2,26]),t(r,[2,50],{10:mt}),t(Kt,[2,28],{16:103,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(Q,a){if(a.recoverable)this.trace(Q);else{var c=new Error(Q);throw c.hash=a,c}},"parseError"),parse:o(function(Q){var a=this,c=[0],h=[],q=[null],e=[],w=this.table,s="",xt=0,Vt=0,Te=2,Jt=1,me=e.slice.call(arguments,1),v=Object.create(this.lexer),Y={yy:{}};for(var At in this.yy)Object.prototype.hasOwnProperty.call(this.yy,At)&&(Y.yy[At]=this.yy[At]);v.setInput(Q,Y.yy),Y.yy.lexer=v,Y.yy.parser=this,typeof v.yylloc>"u"&&(v.yylloc={});var bt=v.yylloc;e.push(bt);var qe=v.options&&v.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ae($){c.length=c.length-2*$,q.length=q.length-$,e.length=e.length-$}o(Ae,"popStack");function Zt(){var $;return $=h.pop()||v.lex()||Jt,typeof $!="number"&&($ instanceof Array&&(h=$,$=h.pop()),$=a.symbols_[$]||$),$}o(Zt,"lex");for(var N,j,U,_t,st={},ft,M,Gt,gt;;){if(j=c[c.length-1],this.defaultActions[j]?U=this.defaultActions[j]:((N===null||typeof N>"u")&&(N=Zt()),U=w[j]&&w[j][N]),typeof U>"u"||!U.length||!U[0]){var St="";gt=[];for(ft in w[j])this.terminals_[ft]&&ft>Te&>.push("'"+this.terminals_[ft]+"'");v.showPosition?St="Parse error on line "+(xt+1)+`: +import{q as o,a5 as be,a6 as _e,ao as ee,an as Se,a7 as ke,a8 as Fe,A as Lt,O as yt,a9 as kt,aa as Pe,at as Ce,aC as L,b9 as ve,ad as Le}from"../app.DfYWW83x.js";import{i as te}from"./linear-m73w_WNc-FCrKOMM3.Dmb54ZXl.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";var Ct=(function(){var t=o(function(Q,a,c,h){for(c=c||{},h=Q.length;h--;c[Q[h]]=a);return c},"o"),n=[1,3],g=[1,4],f=[1,5],l=[1,6],u=[1,7],A=[1,4,5,10,12,13,14,18,25,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],d=[1,4,5,10,12,13,14,18,25,28,35,37,39,41,42,48,50,51,52,53,54,55,56,57,60,61,63,64,65,66,67],r=[55,56,57],D=[2,36],T=[1,37],m=[1,36],p=[1,38],y=[1,35],x=[1,43],b=[1,41],lt=[1,14],ht=[1,23],ct=[1,18],dt=[1,19],rt=[1,20],ot=[1,21],i=[1,22],Et=[1,24],Dt=[1,25],zt=[1,26],It=[1,27],wt=[1,28],Nt=[1,29],W=[1,32],O=[1,33],_=[1,34],S=[1,39],k=[1,40],F=[1,42],P=[1,44],X=[1,62],H=[1,61],C=[4,5,8,10,12,13,14,18,44,47,49,55,56,57,63,64,65,66,67],$t=[1,65],Rt=[1,66],Ut=[1,67],Wt=[1,68],Ot=[1,69],Qt=[1,70],Bt=[1,71],Xt=[1,72],Ht=[1,73],Mt=[1,74],Yt=[1,75],jt=[1,76],I=[4,5,6,7,8,9,10,11,12,13,14,15,18],K=[1,90],V=[1,91],J=[1,92],Z=[1,99],G=[1,93],tt=[1,96],et=[1,94],it=[1,95],at=[1,97],nt=[1,98],mt=[1,102],Kt=[10,55,56,57],R=[4,5,6,8,10,11,13,17,18,19,20,55,56,57],qt={trace:o(function(){},"trace"),yy:{},symbols_:{error:2,idStringToken:3,ALPHA:4,NUM:5,NODE_STRING:6,DOWN:7,MINUS:8,DEFAULT:9,COMMA:10,COLON:11,AMP:12,BRKT:13,MULT:14,UNICODE_TEXT:15,styleComponent:16,UNIT:17,SPACE:18,STYLE:19,PCT:20,idString:21,style:22,stylesOpt:23,classDefStatement:24,CLASSDEF:25,start:26,eol:27,QUADRANT:28,document:29,line:30,statement:31,axisDetails:32,quadrantDetails:33,points:34,title:35,title_value:36,acc_title:37,acc_title_value:38,acc_descr:39,acc_descr_value:40,acc_descr_multiline_value:41,section:42,text:43,point_start:44,point_x:45,point_y:46,class_name:47,"X-AXIS":48,"AXIS-TEXT-DELIMITER":49,"Y-AXIS":50,QUADRANT_1:51,QUADRANT_2:52,QUADRANT_3:53,QUADRANT_4:54,NEWLINE:55,SEMI:56,EOF:57,alphaNumToken:58,textNoTagsToken:59,STR:60,MD_STR:61,alphaNum:62,PUNCTUATION:63,PLUS:64,EQUALS:65,DOT:66,UNDERSCORE:67,$accept:0,$end:1},terminals_:{2:"error",4:"ALPHA",5:"NUM",6:"NODE_STRING",7:"DOWN",8:"MINUS",9:"DEFAULT",10:"COMMA",11:"COLON",12:"AMP",13:"BRKT",14:"MULT",15:"UNICODE_TEXT",17:"UNIT",18:"SPACE",19:"STYLE",20:"PCT",25:"CLASSDEF",28:"QUADRANT",35:"title",36:"title_value",37:"acc_title",38:"acc_title_value",39:"acc_descr",40:"acc_descr_value",41:"acc_descr_multiline_value",42:"section",44:"point_start",45:"point_x",46:"point_y",47:"class_name",48:"X-AXIS",49:"AXIS-TEXT-DELIMITER",50:"Y-AXIS",51:"QUADRANT_1",52:"QUADRANT_2",53:"QUADRANT_3",54:"QUADRANT_4",55:"NEWLINE",56:"SEMI",57:"EOF",60:"STR",61:"MD_STR",63:"PUNCTUATION",64:"PLUS",65:"EQUALS",66:"DOT",67:"UNDERSCORE"},productions_:[0,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[16,1],[21,1],[21,2],[22,1],[22,2],[23,1],[23,3],[24,5],[26,2],[26,2],[26,2],[29,0],[29,2],[30,2],[31,0],[31,1],[31,2],[31,1],[31,1],[31,1],[31,2],[31,2],[31,2],[31,1],[31,1],[34,4],[34,5],[34,5],[34,6],[32,4],[32,3],[32,2],[32,4],[32,3],[32,2],[33,2],[33,2],[33,2],[33,2],[27,1],[27,1],[27,1],[43,1],[43,2],[43,1],[43,1],[62,1],[62,2],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[58,1],[59,1],[59,1],[59,1]],performAction:o(function(Q,a,c,h,q,e,w){var s=e.length-1;switch(q){case 23:this.$=e[s];break;case 24:this.$=e[s-1]+""+e[s];break;case 26:this.$=e[s-1]+e[s];break;case 27:this.$=[e[s].trim()];break;case 28:e[s-2].push(e[s].trim()),this.$=e[s-2];break;case 29:this.$=e[s-4],h.addClass(e[s-2],e[s]);break;case 37:this.$=[];break;case 42:this.$=e[s].trim(),h.setDiagramTitle(this.$);break;case 43:this.$=e[s].trim(),h.setAccTitle(this.$);break;case 44:case 45:this.$=e[s].trim(),h.setAccDescription(this.$);break;case 46:h.addSection(e[s].substr(8)),this.$=e[s].substr(8);break;case 47:h.addPoint(e[s-3],"",e[s-1],e[s],[]);break;case 48:h.addPoint(e[s-4],e[s-3],e[s-1],e[s],[]);break;case 49:h.addPoint(e[s-4],"",e[s-2],e[s-1],e[s]);break;case 50:h.addPoint(e[s-5],e[s-4],e[s-2],e[s-1],e[s]);break;case 51:h.setXAxisLeftText(e[s-2]),h.setXAxisRightText(e[s]);break;case 52:e[s-1].text+=" ⟶ ",h.setXAxisLeftText(e[s-1]);break;case 53:h.setXAxisLeftText(e[s]);break;case 54:h.setYAxisBottomText(e[s-2]),h.setYAxisTopText(e[s]);break;case 55:e[s-1].text+=" ⟶ ",h.setYAxisBottomText(e[s-1]);break;case 56:h.setYAxisBottomText(e[s]);break;case 57:h.setQuadrant1Text(e[s]);break;case 58:h.setQuadrant2Text(e[s]);break;case 59:h.setQuadrant3Text(e[s]);break;case 60:h.setQuadrant4Text(e[s]);break;case 64:this.$={text:e[s],type:"text"};break;case 65:this.$={text:e[s-1].text+""+e[s],type:e[s-1].type};break;case 66:this.$={text:e[s],type:"text"};break;case 67:this.$={text:e[s],type:"markdown"};break;case 68:this.$=e[s];break;case 69:this.$=e[s-1]+""+e[s];break}},"anonymous"),table:[{18:n,26:1,27:2,28:g,55:f,56:l,57:u},{1:[3]},{18:n,26:8,27:2,28:g,55:f,56:l,57:u},{18:n,26:9,27:2,28:g,55:f,56:l,57:u},t(A,[2,33],{29:10}),t(d,[2,61]),t(d,[2,62]),t(d,[2,63]),{1:[2,30]},{1:[2,31]},t(r,D,{30:11,31:12,24:13,32:15,33:16,34:17,43:30,58:31,1:[2,32],4:T,5:m,10:p,12:y,13:x,14:b,18:lt,25:ht,35:ct,37:dt,39:rt,41:ot,42:i,48:Et,50:Dt,51:zt,52:It,53:wt,54:Nt,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),t(A,[2,34]),{27:45,55:f,56:l,57:u},t(r,[2,37]),t(r,D,{24:13,32:15,33:16,34:17,43:30,58:31,31:46,4:T,5:m,10:p,12:y,13:x,14:b,18:lt,25:ht,35:ct,37:dt,39:rt,41:ot,42:i,48:Et,50:Dt,51:zt,52:It,53:wt,54:Nt,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),t(r,[2,39]),t(r,[2,40]),t(r,[2,41]),{36:[1,47]},{38:[1,48]},{40:[1,49]},t(r,[2,45]),t(r,[2,46]),{18:[1,50]},{4:T,5:m,10:p,12:y,13:x,14:b,43:51,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:52,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:53,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:54,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:55,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,10:p,12:y,13:x,14:b,43:56,58:31,60:W,61:O,63:_,64:S,65:k,66:F,67:P},{4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,44:[1,57],47:[1,58],58:60,59:59,63:_,64:S,65:k,66:F,67:P},t(C,[2,64]),t(C,[2,66]),t(C,[2,67]),t(C,[2,70]),t(C,[2,71]),t(C,[2,72]),t(C,[2,73]),t(C,[2,74]),t(C,[2,75]),t(C,[2,76]),t(C,[2,77]),t(C,[2,78]),t(C,[2,79]),t(C,[2,80]),t(A,[2,35]),t(r,[2,38]),t(r,[2,42]),t(r,[2,43]),t(r,[2,44]),{3:64,4:$t,5:Rt,6:Ut,7:Wt,8:Ot,9:Qt,10:Bt,11:Xt,12:Ht,13:Mt,14:Yt,15:jt,21:63},t(r,[2,53],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,49:[1,77],63:_,64:S,65:k,66:F,67:P}),t(r,[2,56],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,49:[1,78],63:_,64:S,65:k,66:F,67:P}),t(r,[2,57],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,58],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,59],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,60],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),{45:[1,79]},{44:[1,80]},t(C,[2,65]),t(C,[2,81]),t(C,[2,82]),t(C,[2,83]),{3:82,4:$t,5:Rt,6:Ut,7:Wt,8:Ot,9:Qt,10:Bt,11:Xt,12:Ht,13:Mt,14:Yt,15:jt,18:[1,81]},t(I,[2,23]),t(I,[2,1]),t(I,[2,2]),t(I,[2,3]),t(I,[2,4]),t(I,[2,5]),t(I,[2,6]),t(I,[2,7]),t(I,[2,8]),t(I,[2,9]),t(I,[2,10]),t(I,[2,11]),t(I,[2,12]),t(r,[2,52],{58:31,43:83,4:T,5:m,10:p,12:y,13:x,14:b,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),t(r,[2,55],{58:31,43:84,4:T,5:m,10:p,12:y,13:x,14:b,60:W,61:O,63:_,64:S,65:k,66:F,67:P}),{46:[1,85]},{45:[1,86]},{4:K,5:V,6:J,8:Z,11:G,13:tt,16:89,17:et,18:it,19:at,20:nt,22:88,23:87},t(I,[2,24]),t(r,[2,51],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,54],{59:59,58:60,4:T,5:m,8:X,10:p,12:y,13:x,14:b,18:H,63:_,64:S,65:k,66:F,67:P}),t(r,[2,47],{22:88,16:89,23:100,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt}),{46:[1,101]},t(r,[2,29],{10:mt}),t(Kt,[2,27],{16:103,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt}),t(R,[2,25]),t(R,[2,13]),t(R,[2,14]),t(R,[2,15]),t(R,[2,16]),t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,21]),t(R,[2,22]),t(r,[2,49],{10:mt}),t(r,[2,48],{22:88,16:89,23:104,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt}),{4:K,5:V,6:J,8:Z,11:G,13:tt,16:89,17:et,18:it,19:at,20:nt,22:105},t(R,[2,26]),t(r,[2,50],{10:mt}),t(Kt,[2,28],{16:103,4:K,5:V,6:J,8:Z,11:G,13:tt,17:et,18:it,19:at,20:nt})],defaultActions:{8:[2,30],9:[2,31]},parseError:o(function(Q,a){if(a.recoverable)this.trace(Q);else{var c=new Error(Q);throw c.hash=a,c}},"parseError"),parse:o(function(Q){var a=this,c=[0],h=[],q=[null],e=[],w=this.table,s="",xt=0,Vt=0,Te=2,Jt=1,me=e.slice.call(arguments,1),v=Object.create(this.lexer),Y={yy:{}};for(var At in this.yy)Object.prototype.hasOwnProperty.call(this.yy,At)&&(Y.yy[At]=this.yy[At]);v.setInput(Q,Y.yy),Y.yy.lexer=v,Y.yy.parser=this,typeof v.yylloc>"u"&&(v.yylloc={});var bt=v.yylloc;e.push(bt);var qe=v.options&&v.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Ae($){c.length=c.length-2*$,q.length=q.length-$,e.length=e.length-$}o(Ae,"popStack");function Zt(){var $;return $=h.pop()||v.lex()||Jt,typeof $!="number"&&($ instanceof Array&&(h=$,$=h.pop()),$=a.symbols_[$]||$),$}o(Zt,"lex");for(var N,j,U,_t,st={},ft,M,Gt,gt;;){if(j=c[c.length-1],this.defaultActions[j]?U=this.defaultActions[j]:((N===null||typeof N>"u")&&(N=Zt()),U=w[j]&&w[j][N]),typeof U>"u"||!U.length||!U[0]){var St="";gt=[];for(ft in w[j])this.terminals_[ft]&&ft>Te&>.push("'"+this.terminals_[ft]+"'");v.showPosition?St="Parse error on line "+(xt+1)+`: `+v.showPosition()+` Expecting `+gt.join(", ")+", got '"+(this.terminals_[N]||N)+"'":St="Parse error on line "+(xt+1)+": Unexpected "+(N==Jt?"end of input":"'"+(this.terminals_[N]||N)+"'"),this.parseError(St,{text:v.match,token:this.terminals_[N]||N,line:v.yylineno,loc:bt,expected:gt})}if(U[0]instanceof Array&&U.length>1)throw new Error("Parse Error: multiple actions possible at state: "+j+", token: "+N);switch(U[0]){case 1:c.push(N),q.push(v.yytext),e.push(v.yylloc),c.push(U[1]),N=null,Vt=v.yyleng,s=v.yytext,xt=v.yylineno,bt=v.yylloc;break;case 2:if(M=this.productions_[U[1]][1],st.$=q[q.length-M],st._$={first_line:e[e.length-(M||1)].first_line,last_line:e[e.length-1].last_line,first_column:e[e.length-(M||1)].first_column,last_column:e[e.length-1].last_column},qe&&(st._$.range=[e[e.length-(M||1)].range[0],e[e.length-1].range[1]]),_t=this.performAction.apply(st,[s,Vt,xt,Y.yy,U[1],q,e].concat(me)),typeof _t<"u")return _t;M&&(c=c.slice(0,-1*M*2),q=q.slice(0,-1*M),e=e.slice(0,-1*M)),c.push(this.productions_[U[1]][0]),q.push(st.$),e.push(st._$),Gt=w[c[c.length-2]][c[c.length-1]],c.push(Gt);break;case 3:return!0}}return!0},"parse")},ye=(function(){var Q={EOF:1,parseError:o(function(a,c){if(this.yy.parser)this.yy.parser.parseError(a,c);else throw new Error(a)},"parseError"),setInput:o(function(a,c){return this.yy=c||this.yy||{},this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:o(function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var c=a.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},"input"),unput:o(function(a){var c=a.length,h=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),h.length-1&&(this.yylineno-=h.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:h?(h.length===q.length?this.yylloc.first_column:0)+q[q.length-h.length].length-h[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:o(function(){return this._more=!0,this},"more"),reject:o(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:o(function(a){this.unput(this.match.slice(a))},"less"),pastInput:o(function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:o(function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:o(function(){var a=this.pastInput(),c=new Array(a.length+1).join("-");return a+this.upcomingInput()+` diff --git a/assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DFy2a-9L.js b/assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DS4y_B-C.js similarity index 98% rename from assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DFy2a-9L.js rename to assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DS4y_B-C.js index ae110c4..b479714 100644 --- a/assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DFy2a-9L.js +++ b/assets/chunks/requirementDiagram-QOLK2EJ7-6dWmHEAc-Csct5Blb.DS4y_B-C.js @@ -1,4 +1,4 @@ -import{a as We}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import{$ as Ge}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import{q as c,a8 as ze,a7 as Je,a5 as Ze,a6 as Xe,an as et,ao as tt,A as Te,O as Ne,at as st,ay as it,ak as rt,al as nt,am as at}from"../app.DiEjJ8gz.js";import"./vitepress-theme-teek.CUuTa6hm.js";var qe=(function(){var e=c(function(F,i,a,s){for(a=a||{},s=F.length;s--;a[F[s]]=i);return a},"o"),u=[1,3],o=[1,4],r=[1,5],n=[1,6],m=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],f=[1,22],R=[2,7],_=[1,26],T=[1,27],N=[1,28],q=[1,29],A=[1,33],C=[1,34],v=[1,35],L=[1,36],O=[1,37],x=[1,38],w=[1,24],D=[1,31],M=[1,32],$=[1,30],p=[1,39],E=[1,40],y=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],U=[1,61],J=[89,90],Ae=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],me=[27,29],Ce=[1,70],ve=[1,71],Le=[1,72],Oe=[1,73],xe=[1,74],we=[1,75],De=[1,76],X=[1,83],V=[1,80],ee=[1,84],te=[1,85],se=[1,86],ie=[1,87],re=[1,88],ne=[1,89],ae=[1,90],le=[1,91],ce=[1,92],pe=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Y=[63,64],Me=[1,101],$e=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],b=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],B=[1,110],Q=[1,106],H=[1,107],K=[1,108],j=[1,109],W=[1,111],oe=[1,116],he=[1,117],ue=[1,114],ye=[1,115],_e={trace:c(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:c(function(F,i,a,s,h,t,g){var l=t.length-1;switch(h){case 4:this.$=t[l].trim(),s.setAccTitle(this.$);break;case 5:case 6:this.$=t[l].trim(),s.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:s.setDirection("TB");break;case 18:s.setDirection("BT");break;case 19:s.setDirection("RL");break;case 20:s.setDirection("LR");break;case 21:s.addRequirement(t[l-3],t[l-4]);break;case 22:s.addRequirement(t[l-5],t[l-6]),s.setClass([t[l-5]],t[l-3]);break;case 23:s.setNewReqId(t[l-2]);break;case 24:s.setNewReqText(t[l-2]);break;case 25:s.setNewReqRisk(t[l-2]);break;case 26:s.setNewReqVerifyMethod(t[l-2]);break;case 29:this.$=s.RequirementType.REQUIREMENT;break;case 30:this.$=s.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=s.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=s.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=s.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=s.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=s.RiskLevel.LOW_RISK;break;case 36:this.$=s.RiskLevel.MED_RISK;break;case 37:this.$=s.RiskLevel.HIGH_RISK;break;case 38:this.$=s.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=s.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=s.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=s.VerifyType.VERIFY_TEST;break;case 42:s.addElement(t[l-3]);break;case 43:s.addElement(t[l-5]),s.setClass([t[l-5]],t[l-3]);break;case 44:s.setNewElementType(t[l-2]);break;case 45:s.setNewElementDocRef(t[l-2]);break;case 48:s.addRelationship(t[l-2],t[l],t[l-4]);break;case 49:s.addRelationship(t[l-2],t[l-4],t[l]);break;case 50:this.$=s.Relationships.CONTAINS;break;case 51:this.$=s.Relationships.COPIES;break;case 52:this.$=s.Relationships.DERIVES;break;case 53:this.$=s.Relationships.SATISFIES;break;case 54:this.$=s.Relationships.VERIFIES;break;case 55:this.$=s.Relationships.REFINES;break;case 56:this.$=s.Relationships.TRACES;break;case 57:this.$=t[l-2],s.defineClass(t[l-1],t[l]);break;case 58:s.setClass(t[l-1],t[l]);break;case 59:s.setClass([t[l-2]],t[l]);break;case 60:case 62:this.$=[t[l]];break;case 61:case 63:this.$=t[l-2].concat([t[l]]);break;case 64:this.$=t[l-2],s.setCssStyle(t[l-1],t[l]);break;case 65:this.$=[t[l]];break;case 66:t[l-2].push(t[l]),this.$=t[l-2];break;case 68:this.$=t[l-1]+t[l];break}},"anonymous"),table:[{3:1,4:2,6:u,9:o,11:r,13:n},{1:[3]},{3:8,4:2,5:[1,7],6:u,9:o,11:r,13:n},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(m,[2,6]),{3:12,4:2,6:u,9:o,11:r,13:n},{1:[2,2]},{4:17,5:f,7:13,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},e(m,[2,4]),e(m,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:f,7:42,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:43,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:44,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:45,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:46,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:47,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:48,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:49,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:50,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},e(y,[2,17]),e(y,[2,18]),e(y,[2,19]),e(y,[2,20]),{30:60,33:62,75:U,89:p,90:E},{30:63,33:62,75:U,89:p,90:E},{30:64,33:62,75:U,89:p,90:E},e(J,[2,29]),e(J,[2,30]),e(J,[2,31]),e(J,[2,32]),e(J,[2,33]),e(J,[2,34]),e(Ae,[2,81]),e(Ae,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},e(me,[2,79]),e(me,[2,80]),{27:[1,67],29:[1,68]},e(me,[2,85]),e(me,[2,86]),{62:69,65:Ce,66:ve,67:Le,68:Oe,69:xe,70:we,71:De},{62:77,65:Ce,66:ve,67:Le,68:Oe,69:xe,70:we,71:De},{30:78,33:62,75:U,89:p,90:E},{73:79,75:X,76:V,78:81,79:82,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce},e(pe,[2,60]),e(pe,[2,62]),{73:93,75:X,76:V,78:81,79:82,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce},{30:94,33:62,75:U,76:V,89:p,90:E},{5:[1,95]},{30:96,33:62,75:U,89:p,90:E},{5:[1,97]},{30:98,33:62,75:U,89:p,90:E},{63:[1,99]},e(Y,[2,50]),e(Y,[2,51]),e(Y,[2,52]),e(Y,[2,53]),e(Y,[2,54]),e(Y,[2,55]),e(Y,[2,56]),{64:[1,100]},e(y,[2,59],{76:V}),e(y,[2,64],{76:Me}),{33:103,75:[1,102],89:p,90:E},e($e,[2,65],{79:104,75:X,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce}),e(b,[2,67]),e(b,[2,69]),e(b,[2,70]),e(b,[2,71]),e(b,[2,72]),e(b,[2,73]),e(b,[2,74]),e(b,[2,75]),e(b,[2,76]),e(b,[2,77]),e(b,[2,78]),e(y,[2,57],{76:Me}),e(y,[2,58],{76:V}),{5:B,28:105,31:Q,34:H,36:K,38:j,40:W},{27:[1,112],76:V},{5:oe,40:he,56:113,57:ue,59:ye},{27:[1,118],76:V},{33:119,89:p,90:E},{33:120,89:p,90:E},{75:X,78:121,79:82,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce},e(pe,[2,61]),e(pe,[2,63]),e(b,[2,68]),e(y,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:B,28:126,31:Q,34:H,36:K,38:j,40:W},e(y,[2,28]),{5:[1,127]},e(y,[2,42]),{32:[1,128]},{32:[1,129]},{5:oe,40:he,56:130,57:ue,59:ye},e(y,[2,47]),{5:[1,131]},e(y,[2,48]),e(y,[2,49]),e($e,[2,66],{79:104,75:X,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce}),{33:132,89:p,90:E},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},e(y,[2,27]),{5:B,28:145,31:Q,34:H,36:K,38:j,40:W},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},e(y,[2,46]),{5:oe,40:he,56:152,57:ue,59:ye},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},e(y,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},e(y,[2,43]),{5:B,28:159,31:Q,34:H,36:K,38:j,40:W},{5:B,28:160,31:Q,34:H,36:K,38:j,40:W},{5:B,28:161,31:Q,34:H,36:K,38:j,40:W},{5:B,28:162,31:Q,34:H,36:K,38:j,40:W},{5:oe,40:he,56:163,57:ue,59:ye},{5:oe,40:he,56:164,57:ue,59:ye},e(y,[2,23]),e(y,[2,24]),e(y,[2,25]),e(y,[2,26]),e(y,[2,44]),e(y,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:c(function(F,i){if(i.recoverable)this.trace(F);else{var a=new Error(F);throw a.hash=i,a}},"parseError"),parse:c(function(F){var i=this,a=[0],s=[],h=[null],t=[],g=this.table,l="",Re=0,Fe=0,Qe=2,Pe=1,He=t.slice.call(arguments,1),d=Object.create(this.lexer),G={yy:{}};for(var ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ge)&&(G.yy[ge]=this.yy[ge]);d.setInput(F,G.yy),G.yy.lexer=d,G.yy.parser=this,typeof d.yylloc>"u"&&(d.yylloc={});var Se=d.yylloc;t.push(Se);var Ke=d.options&&d.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function je(I){a.length=a.length-2*I,h.length=h.length-I,t.length=t.length-I}c(je,"popStack");function Ue(){var I;return I=s.pop()||d.lex()||Pe,typeof I!="number"&&(I instanceof Array&&(s=I,I=s.pop()),I=i.symbols_[I]||I),I}c(Ue,"lex");for(var S,z,k,Ie,Z={},de,P,Ve,fe;;){if(z=a[a.length-1],this.defaultActions[z]?k=this.defaultActions[z]:((S===null||typeof S>"u")&&(S=Ue()),k=g[z]&&g[z][S]),typeof k>"u"||!k.length||!k[0]){var be="";fe=[];for(de in g[z])this.terminals_[de]&&de>Qe&&fe.push("'"+this.terminals_[de]+"'");d.showPosition?be="Parse error on line "+(Re+1)+`: +import{a as We}from"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import{$ as Ge}from"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import{q as c,a8 as ze,a7 as Je,a5 as Ze,a6 as Xe,an as et,ao as tt,A as Te,O as Ne,at as st,ay as it,ak as rt,al as nt,am as at}from"../app.DfYWW83x.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var qe=(function(){var e=c(function(F,i,a,s){for(a=a||{},s=F.length;s--;a[F[s]]=i);return a},"o"),u=[1,3],o=[1,4],r=[1,5],n=[1,6],m=[5,6,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],f=[1,22],R=[2,7],_=[1,26],T=[1,27],N=[1,28],q=[1,29],A=[1,33],C=[1,34],v=[1,35],L=[1,36],O=[1,37],x=[1,38],w=[1,24],D=[1,31],M=[1,32],$=[1,30],p=[1,39],E=[1,40],y=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,77,89,90],U=[1,61],J=[89,90],Ae=[5,8,9,11,13,21,22,23,24,27,29,41,42,43,44,45,46,54,61,63,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],me=[27,29],Ce=[1,70],ve=[1,71],Le=[1,72],Oe=[1,73],xe=[1,74],we=[1,75],De=[1,76],X=[1,83],V=[1,80],ee=[1,84],te=[1,85],se=[1,86],ie=[1,87],re=[1,88],ne=[1,89],ae=[1,90],le=[1,91],ce=[1,92],pe=[5,8,9,11,13,21,22,23,24,27,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],Y=[63,64],Me=[1,101],$e=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,76,77,89,90],b=[5,8,9,11,13,21,22,23,24,41,42,43,44,45,46,54,72,74,75,76,77,80,81,82,83,84,85,86,87,88,89,90],B=[1,110],Q=[1,106],H=[1,107],K=[1,108],j=[1,109],W=[1,111],oe=[1,116],he=[1,117],ue=[1,114],ye=[1,115],_e={trace:c(function(){},"trace"),yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,acc_title:9,acc_title_value:10,acc_descr:11,acc_descr_value:12,acc_descr_multiline_value:13,requirementDef:14,elementDef:15,relationshipDef:16,direction:17,styleStatement:18,classDefStatement:19,classStatement:20,direction_tb:21,direction_bt:22,direction_rl:23,direction_lr:24,requirementType:25,requirementName:26,STRUCT_START:27,requirementBody:28,STYLE_SEPARATOR:29,idList:30,ID:31,COLONSEP:32,id:33,TEXT:34,text:35,RISK:36,riskLevel:37,VERIFYMTHD:38,verifyType:39,STRUCT_STOP:40,REQUIREMENT:41,FUNCTIONAL_REQUIREMENT:42,INTERFACE_REQUIREMENT:43,PERFORMANCE_REQUIREMENT:44,PHYSICAL_REQUIREMENT:45,DESIGN_CONSTRAINT:46,LOW_RISK:47,MED_RISK:48,HIGH_RISK:49,VERIFY_ANALYSIS:50,VERIFY_DEMONSTRATION:51,VERIFY_INSPECTION:52,VERIFY_TEST:53,ELEMENT:54,elementName:55,elementBody:56,TYPE:57,type:58,DOCREF:59,ref:60,END_ARROW_L:61,relationship:62,LINE:63,END_ARROW_R:64,CONTAINS:65,COPIES:66,DERIVES:67,SATISFIES:68,VERIFIES:69,REFINES:70,TRACES:71,CLASSDEF:72,stylesOpt:73,CLASS:74,ALPHA:75,COMMA:76,STYLE:77,style:78,styleComponent:79,NUM:80,COLON:81,UNIT:82,SPACE:83,BRKT:84,PCT:85,MINUS:86,LABEL:87,SEMICOLON:88,unqString:89,qString:90,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",9:"acc_title",10:"acc_title_value",11:"acc_descr",12:"acc_descr_value",13:"acc_descr_multiline_value",21:"direction_tb",22:"direction_bt",23:"direction_rl",24:"direction_lr",27:"STRUCT_START",29:"STYLE_SEPARATOR",31:"ID",32:"COLONSEP",34:"TEXT",36:"RISK",38:"VERIFYMTHD",40:"STRUCT_STOP",41:"REQUIREMENT",42:"FUNCTIONAL_REQUIREMENT",43:"INTERFACE_REQUIREMENT",44:"PERFORMANCE_REQUIREMENT",45:"PHYSICAL_REQUIREMENT",46:"DESIGN_CONSTRAINT",47:"LOW_RISK",48:"MED_RISK",49:"HIGH_RISK",50:"VERIFY_ANALYSIS",51:"VERIFY_DEMONSTRATION",52:"VERIFY_INSPECTION",53:"VERIFY_TEST",54:"ELEMENT",57:"TYPE",59:"DOCREF",61:"END_ARROW_L",63:"LINE",64:"END_ARROW_R",65:"CONTAINS",66:"COPIES",67:"DERIVES",68:"SATISFIES",69:"VERIFIES",70:"REFINES",71:"TRACES",72:"CLASSDEF",74:"CLASS",75:"ALPHA",76:"COMMA",77:"STYLE",80:"NUM",81:"COLON",82:"UNIT",83:"SPACE",84:"BRKT",85:"PCT",86:"MINUS",87:"LABEL",88:"SEMICOLON",89:"unqString",90:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,2],[4,2],[4,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[17,1],[17,1],[17,1],[17,1],[14,5],[14,7],[28,5],[28,5],[28,5],[28,5],[28,2],[28,1],[25,1],[25,1],[25,1],[25,1],[25,1],[25,1],[37,1],[37,1],[37,1],[39,1],[39,1],[39,1],[39,1],[15,5],[15,7],[56,5],[56,5],[56,2],[56,1],[16,5],[16,5],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[62,1],[19,3],[20,3],[20,3],[30,1],[30,3],[30,1],[30,3],[18,3],[73,1],[73,3],[78,1],[78,2],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[79,1],[26,1],[26,1],[33,1],[33,1],[35,1],[35,1],[55,1],[55,1],[58,1],[58,1],[60,1],[60,1]],performAction:c(function(F,i,a,s,h,t,g){var l=t.length-1;switch(h){case 4:this.$=t[l].trim(),s.setAccTitle(this.$);break;case 5:case 6:this.$=t[l].trim(),s.setAccDescription(this.$);break;case 7:this.$=[];break;case 17:s.setDirection("TB");break;case 18:s.setDirection("BT");break;case 19:s.setDirection("RL");break;case 20:s.setDirection("LR");break;case 21:s.addRequirement(t[l-3],t[l-4]);break;case 22:s.addRequirement(t[l-5],t[l-6]),s.setClass([t[l-5]],t[l-3]);break;case 23:s.setNewReqId(t[l-2]);break;case 24:s.setNewReqText(t[l-2]);break;case 25:s.setNewReqRisk(t[l-2]);break;case 26:s.setNewReqVerifyMethod(t[l-2]);break;case 29:this.$=s.RequirementType.REQUIREMENT;break;case 30:this.$=s.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 31:this.$=s.RequirementType.INTERFACE_REQUIREMENT;break;case 32:this.$=s.RequirementType.PERFORMANCE_REQUIREMENT;break;case 33:this.$=s.RequirementType.PHYSICAL_REQUIREMENT;break;case 34:this.$=s.RequirementType.DESIGN_CONSTRAINT;break;case 35:this.$=s.RiskLevel.LOW_RISK;break;case 36:this.$=s.RiskLevel.MED_RISK;break;case 37:this.$=s.RiskLevel.HIGH_RISK;break;case 38:this.$=s.VerifyType.VERIFY_ANALYSIS;break;case 39:this.$=s.VerifyType.VERIFY_DEMONSTRATION;break;case 40:this.$=s.VerifyType.VERIFY_INSPECTION;break;case 41:this.$=s.VerifyType.VERIFY_TEST;break;case 42:s.addElement(t[l-3]);break;case 43:s.addElement(t[l-5]),s.setClass([t[l-5]],t[l-3]);break;case 44:s.setNewElementType(t[l-2]);break;case 45:s.setNewElementDocRef(t[l-2]);break;case 48:s.addRelationship(t[l-2],t[l],t[l-4]);break;case 49:s.addRelationship(t[l-2],t[l-4],t[l]);break;case 50:this.$=s.Relationships.CONTAINS;break;case 51:this.$=s.Relationships.COPIES;break;case 52:this.$=s.Relationships.DERIVES;break;case 53:this.$=s.Relationships.SATISFIES;break;case 54:this.$=s.Relationships.VERIFIES;break;case 55:this.$=s.Relationships.REFINES;break;case 56:this.$=s.Relationships.TRACES;break;case 57:this.$=t[l-2],s.defineClass(t[l-1],t[l]);break;case 58:s.setClass(t[l-1],t[l]);break;case 59:s.setClass([t[l-2]],t[l]);break;case 60:case 62:this.$=[t[l]];break;case 61:case 63:this.$=t[l-2].concat([t[l]]);break;case 64:this.$=t[l-2],s.setCssStyle(t[l-1],t[l]);break;case 65:this.$=[t[l]];break;case 66:t[l-2].push(t[l]),this.$=t[l-2];break;case 68:this.$=t[l-1]+t[l];break}},"anonymous"),table:[{3:1,4:2,6:u,9:o,11:r,13:n},{1:[3]},{3:8,4:2,5:[1,7],6:u,9:o,11:r,13:n},{5:[1,9]},{10:[1,10]},{12:[1,11]},e(m,[2,6]),{3:12,4:2,6:u,9:o,11:r,13:n},{1:[2,2]},{4:17,5:f,7:13,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},e(m,[2,4]),e(m,[2,5]),{1:[2,1]},{8:[1,41]},{4:17,5:f,7:42,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:43,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:44,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:45,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:46,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:47,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:48,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:49,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{4:17,5:f,7:50,8:R,9:o,11:r,13:n,14:14,15:15,16:16,17:18,18:19,19:20,20:21,21:_,22:T,23:N,24:q,25:23,33:25,41:A,42:C,43:v,44:L,45:O,46:x,54:w,72:D,74:M,77:$,89:p,90:E},{26:51,89:[1,52],90:[1,53]},{55:54,89:[1,55],90:[1,56]},{29:[1,59],61:[1,57],63:[1,58]},e(y,[2,17]),e(y,[2,18]),e(y,[2,19]),e(y,[2,20]),{30:60,33:62,75:U,89:p,90:E},{30:63,33:62,75:U,89:p,90:E},{30:64,33:62,75:U,89:p,90:E},e(J,[2,29]),e(J,[2,30]),e(J,[2,31]),e(J,[2,32]),e(J,[2,33]),e(J,[2,34]),e(Ae,[2,81]),e(Ae,[2,82]),{1:[2,3]},{8:[2,8]},{8:[2,9]},{8:[2,10]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{27:[1,65],29:[1,66]},e(me,[2,79]),e(me,[2,80]),{27:[1,67],29:[1,68]},e(me,[2,85]),e(me,[2,86]),{62:69,65:Ce,66:ve,67:Le,68:Oe,69:xe,70:we,71:De},{62:77,65:Ce,66:ve,67:Le,68:Oe,69:xe,70:we,71:De},{30:78,33:62,75:U,89:p,90:E},{73:79,75:X,76:V,78:81,79:82,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce},e(pe,[2,60]),e(pe,[2,62]),{73:93,75:X,76:V,78:81,79:82,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce},{30:94,33:62,75:U,76:V,89:p,90:E},{5:[1,95]},{30:96,33:62,75:U,89:p,90:E},{5:[1,97]},{30:98,33:62,75:U,89:p,90:E},{63:[1,99]},e(Y,[2,50]),e(Y,[2,51]),e(Y,[2,52]),e(Y,[2,53]),e(Y,[2,54]),e(Y,[2,55]),e(Y,[2,56]),{64:[1,100]},e(y,[2,59],{76:V}),e(y,[2,64],{76:Me}),{33:103,75:[1,102],89:p,90:E},e($e,[2,65],{79:104,75:X,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce}),e(b,[2,67]),e(b,[2,69]),e(b,[2,70]),e(b,[2,71]),e(b,[2,72]),e(b,[2,73]),e(b,[2,74]),e(b,[2,75]),e(b,[2,76]),e(b,[2,77]),e(b,[2,78]),e(y,[2,57],{76:Me}),e(y,[2,58],{76:V}),{5:B,28:105,31:Q,34:H,36:K,38:j,40:W},{27:[1,112],76:V},{5:oe,40:he,56:113,57:ue,59:ye},{27:[1,118],76:V},{33:119,89:p,90:E},{33:120,89:p,90:E},{75:X,78:121,79:82,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce},e(pe,[2,61]),e(pe,[2,63]),e(b,[2,68]),e(y,[2,21]),{32:[1,122]},{32:[1,123]},{32:[1,124]},{32:[1,125]},{5:B,28:126,31:Q,34:H,36:K,38:j,40:W},e(y,[2,28]),{5:[1,127]},e(y,[2,42]),{32:[1,128]},{32:[1,129]},{5:oe,40:he,56:130,57:ue,59:ye},e(y,[2,47]),{5:[1,131]},e(y,[2,48]),e(y,[2,49]),e($e,[2,66],{79:104,75:X,80:ee,81:te,82:se,83:ie,84:re,85:ne,86:ae,87:le,88:ce}),{33:132,89:p,90:E},{35:133,89:[1,134],90:[1,135]},{37:136,47:[1,137],48:[1,138],49:[1,139]},{39:140,50:[1,141],51:[1,142],52:[1,143],53:[1,144]},e(y,[2,27]),{5:B,28:145,31:Q,34:H,36:K,38:j,40:W},{58:146,89:[1,147],90:[1,148]},{60:149,89:[1,150],90:[1,151]},e(y,[2,46]),{5:oe,40:he,56:152,57:ue,59:ye},{5:[1,153]},{5:[1,154]},{5:[2,83]},{5:[2,84]},{5:[1,155]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[1,156]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,41]},e(y,[2,22]),{5:[1,157]},{5:[2,87]},{5:[2,88]},{5:[1,158]},{5:[2,89]},{5:[2,90]},e(y,[2,43]),{5:B,28:159,31:Q,34:H,36:K,38:j,40:W},{5:B,28:160,31:Q,34:H,36:K,38:j,40:W},{5:B,28:161,31:Q,34:H,36:K,38:j,40:W},{5:B,28:162,31:Q,34:H,36:K,38:j,40:W},{5:oe,40:he,56:163,57:ue,59:ye},{5:oe,40:he,56:164,57:ue,59:ye},e(y,[2,23]),e(y,[2,24]),e(y,[2,25]),e(y,[2,26]),e(y,[2,44]),e(y,[2,45])],defaultActions:{8:[2,2],12:[2,1],41:[2,3],42:[2,8],43:[2,9],44:[2,10],45:[2,11],46:[2,12],47:[2,13],48:[2,14],49:[2,15],50:[2,16],134:[2,83],135:[2,84],137:[2,35],138:[2,36],139:[2,37],141:[2,38],142:[2,39],143:[2,40],144:[2,41],147:[2,87],148:[2,88],150:[2,89],151:[2,90]},parseError:c(function(F,i){if(i.recoverable)this.trace(F);else{var a=new Error(F);throw a.hash=i,a}},"parseError"),parse:c(function(F){var i=this,a=[0],s=[],h=[null],t=[],g=this.table,l="",Re=0,Fe=0,Qe=2,Pe=1,He=t.slice.call(arguments,1),d=Object.create(this.lexer),G={yy:{}};for(var ge in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ge)&&(G.yy[ge]=this.yy[ge]);d.setInput(F,G.yy),G.yy.lexer=d,G.yy.parser=this,typeof d.yylloc>"u"&&(d.yylloc={});var Se=d.yylloc;t.push(Se);var Ke=d.options&&d.options.ranges;typeof G.yy.parseError=="function"?this.parseError=G.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function je(I){a.length=a.length-2*I,h.length=h.length-I,t.length=t.length-I}c(je,"popStack");function Ue(){var I;return I=s.pop()||d.lex()||Pe,typeof I!="number"&&(I instanceof Array&&(s=I,I=s.pop()),I=i.symbols_[I]||I),I}c(Ue,"lex");for(var S,z,k,Ie,Z={},de,P,Ve,fe;;){if(z=a[a.length-1],this.defaultActions[z]?k=this.defaultActions[z]:((S===null||typeof S>"u")&&(S=Ue()),k=g[z]&&g[z][S]),typeof k>"u"||!k.length||!k[0]){var be="";fe=[];for(de in g[z])this.terminals_[de]&&de>Qe&&fe.push("'"+this.terminals_[de]+"'");d.showPosition?be="Parse error on line "+(Re+1)+`: `+d.showPosition()+` Expecting `+fe.join(", ")+", got '"+(this.terminals_[S]||S)+"'":be="Parse error on line "+(Re+1)+": Unexpected "+(S==Pe?"end of input":"'"+(this.terminals_[S]||S)+"'"),this.parseError(be,{text:d.match,token:this.terminals_[S]||S,line:d.yylineno,loc:Se,expected:fe})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+z+", token: "+S);switch(k[0]){case 1:a.push(S),h.push(d.yytext),t.push(d.yylloc),a.push(k[1]),S=null,Fe=d.yyleng,l=d.yytext,Re=d.yylineno,Se=d.yylloc;break;case 2:if(P=this.productions_[k[1]][1],Z.$=h[h.length-P],Z._$={first_line:t[t.length-(P||1)].first_line,last_line:t[t.length-1].last_line,first_column:t[t.length-(P||1)].first_column,last_column:t[t.length-1].last_column},Ke&&(Z._$.range=[t[t.length-(P||1)].range[0],t[t.length-1].range[1]]),Ie=this.performAction.apply(Z,[l,Fe,Re,G.yy,k[1],h,t].concat(He)),typeof Ie<"u")return Ie;P&&(a=a.slice(0,-1*P*2),h=h.slice(0,-1*P),t=t.slice(0,-1*P)),a.push(this.productions_[k[1]][0]),h.push(Z.$),t.push(Z._$),Ve=g[a[a.length-2]][a[a.length-1]],a.push(Ve);break;case 3:return!0}}return!0},"parse")},Be=(function(){var F={EOF:1,parseError:c(function(i,a){if(this.yy.parser)this.yy.parser.parseError(i,a);else throw new Error(i)},"parseError"),setInput:c(function(i,a){return this.yy=a||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:c(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var a=i.match(/(?:\r\n?|\n).*/g);return a?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:c(function(i){var a=i.length,s=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-a),this.offset-=a;var h=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),s.length-1&&(this.yylineno-=s.length-1);var t=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:s?(s.length===h.length?this.yylloc.first_column:0)+h[h.length-s.length].length-s[0].length:this.yylloc.first_column-a},this.options.ranges&&(this.yylloc.range=[t[0],t[0]+this.yyleng-a]),this.yyleng=this.yytext.length,this},"unput"),more:c(function(){return this._more=!0,this},"more"),reject:c(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:c(function(i){this.unput(this.match.slice(i))},"less"),pastInput:c(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:c(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:c(function(){var i=this.pastInput(),a=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.B-y2STaX.js b/assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.CKpep3Yg.js similarity index 99% rename from assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.B-y2STaX.js rename to assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.CKpep3Yg.js index 7cb6fa0..b21c684 100644 --- a/assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.B-y2STaX.js +++ b/assets/chunks/sankeyDiagram-4UZDY2LN-CnAdwvcC-CVFxLWrH.CKpep3Yg.js @@ -1,4 +1,4 @@ -import{q as d,an as xt,ao as kt,a5 as vt,a6 as bt,a8 as wt,a7 as St,A as lt,au as At,a9 as X,bk as Lt,at as Et,ag as It}from"../app.DiEjJ8gz.js";import{g as Tt}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";function Mt(t){for(var e=t.length/6|0,s=new Array(e),a=0;a=a)&&(s=a);else{let a=-1;for(let c of t)(c=e(c,++a,t))!=null&&(s=c)&&(s=c)}return s}function dt(t,e){let s;if(e===void 0)for(const a of t)a!=null&&(s>a||s===void 0&&a>=a)&&(s=a);else{let a=-1;for(let c of t)(c=e(c,++a,t))!=null&&(s>c||s===void 0&&c>=c)&&(s=c)}return s}function tt(t,e){let s=0;if(e===void 0)for(let a of t)(a=+a)&&(s+=a);else{let a=-1;for(let c of t)(c=+e(c,++a,t))&&(s+=c)}return s}function Nt(t){return t.target.depth}function Pt(t){return t.depth}function Ct(t,e){return e-1-t.height}function _t(t,e){return t.sourceLinks.length?t.depth:e-1}function Dt(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?dt(t.sourceLinks,Nt)-1:0}function Y(t){return function(){return t}}function ht(t,e){return K(t.source,e.source)||t.index-e.index}function ut(t,e){return K(t.target,e.target)||t.index-e.index}function K(t,e){return t.y0-e.y0}function nt(t){return t.value}function jt(t){return t.index}function $t(t){return t.nodes}function zt(t){return t.links}function ft(t,e){const s=t.get(e);if(!s)throw new Error("missing: "+e);return s}function yt({nodes:t}){for(const e of t){let s=e.y0,a=s;for(const c of e.sourceLinks)c.y0=s+c.width/2,s+=c.width;for(const c of e.targetLinks)c.y1=a+c.width/2,a+=c.width}}function Ut(){let t=0,e=0,s=1,a=1,c=24,b=8,_,m=jt,i=_t,o,f,g=$t,y=zt,w=6;function k(){const n={nodes:g.apply(null,arguments),links:y.apply(null,arguments)};return O(n),I(n),T(n),C(n),N(n),yt(n),n}k.update=function(n){return yt(n),n},k.nodeId=function(n){return arguments.length?(m=typeof n=="function"?n:Y(n),k):m},k.nodeAlign=function(n){return arguments.length?(i=typeof n=="function"?n:Y(n),k):i},k.nodeSort=function(n){return arguments.length?(o=n,k):o},k.nodeWidth=function(n){return arguments.length?(c=+n,k):c},k.nodePadding=function(n){return arguments.length?(b=_=+n,k):b},k.nodes=function(n){return arguments.length?(g=typeof n=="function"?n:Y(n),k):g},k.links=function(n){return arguments.length?(y=typeof n=="function"?n:Y(n),k):y},k.linkSort=function(n){return arguments.length?(f=n,k):f},k.size=function(n){return arguments.length?(t=e=0,s=+n[0],a=+n[1],k):[s-t,a-e]},k.extent=function(n){return arguments.length?(t=+n[0][0],s=+n[1][0],e=+n[0][1],a=+n[1][1],k):[[t,e],[s,a]]},k.iterations=function(n){return arguments.length?(w=+n,k):w};function O({nodes:n,links:u}){for(const[h,r]of n.entries())r.index=h,r.sourceLinks=[],r.targetLinks=[];const l=new Map(n.map((h,r)=>[m(h,r,n),h]));for(const[h,r]of u.entries()){r.index=h;let{source:x,target:v}=r;typeof x!="object"&&(x=r.source=ft(l,x)),typeof v!="object"&&(v=r.target=ft(l,v)),x.sourceLinks.push(r),v.targetLinks.push(r)}if(f!=null)for(const{sourceLinks:h,targetLinks:r}of n)h.sort(f),r.sort(f)}function I({nodes:n}){for(const u of n)u.value=u.fixedValue===void 0?Math.max(tt(u.sourceLinks,nt),tt(u.targetLinks,nt)):u.fixedValue}function T({nodes:n}){const u=n.length;let l=new Set(n),h=new Set,r=0;for(;l.size;){for(const x of l){x.depth=r;for(const{target:v}of x.sourceLinks)h.add(v)}if(++r>u)throw new Error("circular link");l=h,h=new Set}}function C({nodes:n}){const u=n.length;let l=new Set(n),h=new Set,r=0;for(;l.size;){for(const x of l){x.height=r;for(const{source:v}of x.targetLinks)h.add(v)}if(++r>u)throw new Error("circular link");l=h,h=new Set}}function M({nodes:n}){const u=ct(n,r=>r.depth)+1,l=(s-t-c)/(u-1),h=new Array(u);for(const r of n){const x=Math.max(0,Math.min(u-1,Math.floor(i.call(null,r,u))));r.layer=x,r.x0=t+x*l,r.x1=r.x0+c,h[x]?h[x].push(r):h[x]=[r]}if(o)for(const r of h)r.sort(o);return h}function S(n){const u=dt(n,l=>(a-e-(l.length-1)*_)/tt(l,nt));for(const l of n){let h=e;for(const r of l){r.y0=h,r.y1=h+r.value*u,h=r.y1+_;for(const x of r.sourceLinks)x.width=x.value*u}h=(a-h+_)/(l.length+1);for(let r=0;rl.length)-1)),S(u);for(let l=0;l0))continue;let q=(V/$-v.y0)*u;v.y0+=q,v.y1+=q,A(v)}o===void 0&&x.sort(K),p(x,l)}}function P(n,u,l){for(let h=n.length,r=h-2;r>=0;--r){const x=n[r];for(const v of x){let V=0,$=0;for(const{target:R,value:J}of v.sourceLinks){let G=J*(R.layer-v.layer);V+=W(v,R)*G,$+=G}if(!($>0))continue;let q=(V/$-v.y0)*u;v.y0+=q,v.y1+=q,A(v)}o===void 0&&x.sort(K),p(x,l)}}function p(n,u){const l=n.length>>1,h=n[l];F(n,h.y0-_,l-1,u),L(n,h.y1+_,l+1,u),F(n,a,n.length-1,u),L(n,e,0,u)}function L(n,u,l,h){for(;l1e-6&&(r.y0+=x,r.y1+=x),u=r.y1+_}}function F(n,u,l,h){for(;l>=0;--l){const r=n[l],x=(r.y1-u)*h;x>1e-6&&(r.y0-=x,r.y1-=x),u=r.y0-_}}function A({sourceLinks:n,targetLinks:u}){if(f===void 0){for(const{source:{sourceLinks:l}}of u)l.sort(ut);for(const{target:{targetLinks:l}}of n)l.sort(ht)}}function j(n){if(f===void 0)for(const{sourceLinks:u,targetLinks:l}of n)u.sort(ut),l.sort(ht)}function E(n,u){let l=n.y0-(n.sourceLinks.length-1)*_/2;for(const{target:h,width:r}of n.sourceLinks){if(h===u)break;l+=r+_}for(const{source:h,width:r}of u.targetLinks){if(h===n)break;l-=r}return l}function W(n,u){let l=u.y0-(u.targetLinks.length-1)*_/2;for(const{source:h,width:r}of u.targetLinks){if(h===n)break;l+=r+_}for(const{target:h,width:r}of n.sourceLinks){if(h===u)break;l-=r}return l}return k}var st=Math.PI,rt=2*st,z=1e-6,Ft=rt-z;function ot(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function mt(){return new ot}ot.prototype=mt.prototype={constructor:ot,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,s,a){this._+="Q"+ +t+","+ +e+","+(this._x1=+s)+","+(this._y1=+a)},bezierCurveTo:function(t,e,s,a,c,b){this._+="C"+ +t+","+ +e+","+ +s+","+ +a+","+(this._x1=+c)+","+(this._y1=+b)},arcTo:function(t,e,s,a,c){t=+t,e=+e,s=+s,a=+a,c=+c;var b=this._x1,_=this._y1,m=s-t,i=a-e,o=b-t,f=_-e,g=o*o+f*f;if(c<0)throw new Error("negative radius: "+c);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(g>z)if(!(Math.abs(f*m-i*o)>z)||!c)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var y=s-b,w=a-_,k=m*m+i*i,O=y*y+w*w,I=Math.sqrt(k),T=Math.sqrt(g),C=c*Math.tan((st-Math.acos((k+g-O)/(2*I*T)))/2),M=C/T,S=C/I;Math.abs(M-1)>z&&(this._+="L"+(t+M*o)+","+(e+M*f)),this._+="A"+c+","+c+",0,0,"+ +(f*y>o*w)+","+(this._x1=t+S*m)+","+(this._y1=e+S*i)}},arc:function(t,e,s,a,c,b){t=+t,e=+e,s=+s,b=!!b;var _=s*Math.cos(a),m=s*Math.sin(a),i=t+_,o=e+m,f=1^b,g=b?a-c:c-a;if(s<0)throw new Error("negative radius: "+s);this._x1===null?this._+="M"+i+","+o:(Math.abs(this._x1-i)>z||Math.abs(this._y1-o)>z)&&(this._+="L"+i+","+o),s&&(g<0&&(g=g%rt+rt),g>Ft?this._+="A"+s+","+s+",0,1,"+f+","+(t-_)+","+(e-m)+"A"+s+","+s+",0,1,"+f+","+(this._x1=i)+","+(this._y1=o):g>z&&(this._+="A"+s+","+s+",0,"+ +(g>=st)+","+f+","+(this._x1=t+s*Math.cos(c))+","+(this._y1=e+s*Math.sin(c))))},rect:function(t,e,s,a){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +s+"v"+ +a+"h"+-s+"Z"},toString:function(){return this._}};function pt(t){return function(){return t}}function Wt(t){return t[0]}function Vt(t){return t[1]}var qt=Array.prototype.slice;function Rt(t){return t.source}function Gt(t){return t.target}function Xt(t){var e=Rt,s=Gt,a=Wt,c=Vt,b=null;function _(){var m,i=qt.call(arguments),o=e.apply(this,i),f=s.apply(this,i);if(b||(b=m=mt()),t(b,+a.apply(this,(i[0]=o,i)),+c.apply(this,i),+a.apply(this,(i[0]=f,i)),+c.apply(this,i)),m)return b=null,m+""||null}return _.source=function(m){return arguments.length?(e=m,_):e},_.target=function(m){return arguments.length?(s=m,_):s},_.x=function(m){return arguments.length?(a=typeof m=="function"?m:pt(+m),_):a},_.y=function(m){return arguments.length?(c=typeof m=="function"?m:pt(+m),_):c},_.context=function(m){return arguments.length?(b=m??null,_):b},_}function Yt(t,e,s,a,c){t.moveTo(e,s),t.bezierCurveTo(e=(e+a)/2,s,e,c,a,c)}function Kt(){return Xt(Yt)}function Qt(t){return[t.source.x1,t.y0]}function Bt(t){return[t.target.x0,t.y1]}function Zt(){return Kt().source(Qt).target(Bt)}var at=(function(){var t=d(function(m,i,o,f){for(o=o||{},f=m.length;f--;o[m[f]]=i);return o},"o"),e=[1,9],s=[1,10],a=[1,5,10,12],c={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:d(function(m,i,o,f,g,y,w){var k=y.length-1;switch(g){case 7:const O=f.findOrCreateNode(y[k-4].trim().replaceAll('""','"')),I=f.findOrCreateNode(y[k-2].trim().replaceAll('""','"')),T=parseFloat(y[k].trim());f.addLink(O,I,T);break;case 8:case 9:case 11:this.$=y[k];break;case 10:this.$=y[k-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:s},{1:[2,6],7:11,10:[1,12]},t(s,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(a,[2,8]),t(a,[2,9]),{19:[1,16]},t(a,[2,11]),{1:[2,1]},{1:[2,5]},t(s,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:s},{15:18,16:7,17:8,18:e,20:s},{18:[1,19]},t(s,[2,3]),{12:[1,20]},t(a,[2,10]),{15:21,16:7,17:8,18:e,20:s},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:d(function(m,i){if(i.recoverable)this.trace(m);else{var o=new Error(m);throw o.hash=i,o}},"parseError"),parse:d(function(m){var i=this,o=[0],f=[],g=[null],y=[],w=this.table,k="",O=0,I=0,T=2,C=1,M=y.slice.call(arguments,1),S=Object.create(this.lexer),N={yy:{}};for(var D in this.yy)Object.prototype.hasOwnProperty.call(this.yy,D)&&(N.yy[D]=this.yy[D]);S.setInput(m,N.yy),N.yy.lexer=S,N.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var P=S.yylloc;y.push(P);var p=S.options&&S.options.ranges;typeof N.yy.parseError=="function"?this.parseError=N.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function L(v){o.length=o.length-2*v,g.length=g.length-v,y.length=y.length-v}d(L,"popStack");function F(){var v;return v=f.pop()||S.lex()||C,typeof v!="number"&&(v instanceof Array&&(f=v,v=f.pop()),v=i.symbols_[v]||v),v}d(F,"lex");for(var A,j,E,W,n={},u,l,h,r;;){if(j=o[o.length-1],this.defaultActions[j]?E=this.defaultActions[j]:((A===null||typeof A>"u")&&(A=F()),E=w[j]&&w[j][A]),typeof E>"u"||!E.length||!E[0]){var x="";r=[];for(u in w[j])this.terminals_[u]&&u>T&&r.push("'"+this.terminals_[u]+"'");S.showPosition?x="Parse error on line "+(O+1)+`: +import{q as d,an as xt,ao as kt,a5 as vt,a6 as bt,a8 as wt,a7 as St,A as lt,au as At,a9 as X,bk as Lt,at as Et,ag as It}from"../app.DfYWW83x.js";import{g as Tt}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";function Mt(t){for(var e=t.length/6|0,s=new Array(e),a=0;a=a)&&(s=a);else{let a=-1;for(let c of t)(c=e(c,++a,t))!=null&&(s=c)&&(s=c)}return s}function dt(t,e){let s;if(e===void 0)for(const a of t)a!=null&&(s>a||s===void 0&&a>=a)&&(s=a);else{let a=-1;for(let c of t)(c=e(c,++a,t))!=null&&(s>c||s===void 0&&c>=c)&&(s=c)}return s}function tt(t,e){let s=0;if(e===void 0)for(let a of t)(a=+a)&&(s+=a);else{let a=-1;for(let c of t)(c=+e(c,++a,t))&&(s+=c)}return s}function Nt(t){return t.target.depth}function Pt(t){return t.depth}function Ct(t,e){return e-1-t.height}function _t(t,e){return t.sourceLinks.length?t.depth:e-1}function Dt(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?dt(t.sourceLinks,Nt)-1:0}function Y(t){return function(){return t}}function ht(t,e){return K(t.source,e.source)||t.index-e.index}function ut(t,e){return K(t.target,e.target)||t.index-e.index}function K(t,e){return t.y0-e.y0}function nt(t){return t.value}function jt(t){return t.index}function $t(t){return t.nodes}function zt(t){return t.links}function ft(t,e){const s=t.get(e);if(!s)throw new Error("missing: "+e);return s}function yt({nodes:t}){for(const e of t){let s=e.y0,a=s;for(const c of e.sourceLinks)c.y0=s+c.width/2,s+=c.width;for(const c of e.targetLinks)c.y1=a+c.width/2,a+=c.width}}function Ut(){let t=0,e=0,s=1,a=1,c=24,b=8,_,m=jt,i=_t,o,f,g=$t,y=zt,w=6;function k(){const n={nodes:g.apply(null,arguments),links:y.apply(null,arguments)};return O(n),I(n),T(n),C(n),N(n),yt(n),n}k.update=function(n){return yt(n),n},k.nodeId=function(n){return arguments.length?(m=typeof n=="function"?n:Y(n),k):m},k.nodeAlign=function(n){return arguments.length?(i=typeof n=="function"?n:Y(n),k):i},k.nodeSort=function(n){return arguments.length?(o=n,k):o},k.nodeWidth=function(n){return arguments.length?(c=+n,k):c},k.nodePadding=function(n){return arguments.length?(b=_=+n,k):b},k.nodes=function(n){return arguments.length?(g=typeof n=="function"?n:Y(n),k):g},k.links=function(n){return arguments.length?(y=typeof n=="function"?n:Y(n),k):y},k.linkSort=function(n){return arguments.length?(f=n,k):f},k.size=function(n){return arguments.length?(t=e=0,s=+n[0],a=+n[1],k):[s-t,a-e]},k.extent=function(n){return arguments.length?(t=+n[0][0],s=+n[1][0],e=+n[0][1],a=+n[1][1],k):[[t,e],[s,a]]},k.iterations=function(n){return arguments.length?(w=+n,k):w};function O({nodes:n,links:u}){for(const[h,r]of n.entries())r.index=h,r.sourceLinks=[],r.targetLinks=[];const l=new Map(n.map((h,r)=>[m(h,r,n),h]));for(const[h,r]of u.entries()){r.index=h;let{source:x,target:v}=r;typeof x!="object"&&(x=r.source=ft(l,x)),typeof v!="object"&&(v=r.target=ft(l,v)),x.sourceLinks.push(r),v.targetLinks.push(r)}if(f!=null)for(const{sourceLinks:h,targetLinks:r}of n)h.sort(f),r.sort(f)}function I({nodes:n}){for(const u of n)u.value=u.fixedValue===void 0?Math.max(tt(u.sourceLinks,nt),tt(u.targetLinks,nt)):u.fixedValue}function T({nodes:n}){const u=n.length;let l=new Set(n),h=new Set,r=0;for(;l.size;){for(const x of l){x.depth=r;for(const{target:v}of x.sourceLinks)h.add(v)}if(++r>u)throw new Error("circular link");l=h,h=new Set}}function C({nodes:n}){const u=n.length;let l=new Set(n),h=new Set,r=0;for(;l.size;){for(const x of l){x.height=r;for(const{source:v}of x.targetLinks)h.add(v)}if(++r>u)throw new Error("circular link");l=h,h=new Set}}function M({nodes:n}){const u=ct(n,r=>r.depth)+1,l=(s-t-c)/(u-1),h=new Array(u);for(const r of n){const x=Math.max(0,Math.min(u-1,Math.floor(i.call(null,r,u))));r.layer=x,r.x0=t+x*l,r.x1=r.x0+c,h[x]?h[x].push(r):h[x]=[r]}if(o)for(const r of h)r.sort(o);return h}function S(n){const u=dt(n,l=>(a-e-(l.length-1)*_)/tt(l,nt));for(const l of n){let h=e;for(const r of l){r.y0=h,r.y1=h+r.value*u,h=r.y1+_;for(const x of r.sourceLinks)x.width=x.value*u}h=(a-h+_)/(l.length+1);for(let r=0;rl.length)-1)),S(u);for(let l=0;l0))continue;let q=(V/$-v.y0)*u;v.y0+=q,v.y1+=q,A(v)}o===void 0&&x.sort(K),p(x,l)}}function P(n,u,l){for(let h=n.length,r=h-2;r>=0;--r){const x=n[r];for(const v of x){let V=0,$=0;for(const{target:R,value:J}of v.sourceLinks){let G=J*(R.layer-v.layer);V+=W(v,R)*G,$+=G}if(!($>0))continue;let q=(V/$-v.y0)*u;v.y0+=q,v.y1+=q,A(v)}o===void 0&&x.sort(K),p(x,l)}}function p(n,u){const l=n.length>>1,h=n[l];F(n,h.y0-_,l-1,u),L(n,h.y1+_,l+1,u),F(n,a,n.length-1,u),L(n,e,0,u)}function L(n,u,l,h){for(;l1e-6&&(r.y0+=x,r.y1+=x),u=r.y1+_}}function F(n,u,l,h){for(;l>=0;--l){const r=n[l],x=(r.y1-u)*h;x>1e-6&&(r.y0-=x,r.y1-=x),u=r.y0-_}}function A({sourceLinks:n,targetLinks:u}){if(f===void 0){for(const{source:{sourceLinks:l}}of u)l.sort(ut);for(const{target:{targetLinks:l}}of n)l.sort(ht)}}function j(n){if(f===void 0)for(const{sourceLinks:u,targetLinks:l}of n)u.sort(ut),l.sort(ht)}function E(n,u){let l=n.y0-(n.sourceLinks.length-1)*_/2;for(const{target:h,width:r}of n.sourceLinks){if(h===u)break;l+=r+_}for(const{source:h,width:r}of u.targetLinks){if(h===n)break;l-=r}return l}function W(n,u){let l=u.y0-(u.targetLinks.length-1)*_/2;for(const{source:h,width:r}of u.targetLinks){if(h===n)break;l+=r+_}for(const{target:h,width:r}of n.sourceLinks){if(h===u)break;l-=r}return l}return k}var st=Math.PI,rt=2*st,z=1e-6,Ft=rt-z;function ot(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function mt(){return new ot}ot.prototype=mt.prototype={constructor:ot,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,s,a){this._+="Q"+ +t+","+ +e+","+(this._x1=+s)+","+(this._y1=+a)},bezierCurveTo:function(t,e,s,a,c,b){this._+="C"+ +t+","+ +e+","+ +s+","+ +a+","+(this._x1=+c)+","+(this._y1=+b)},arcTo:function(t,e,s,a,c){t=+t,e=+e,s=+s,a=+a,c=+c;var b=this._x1,_=this._y1,m=s-t,i=a-e,o=b-t,f=_-e,g=o*o+f*f;if(c<0)throw new Error("negative radius: "+c);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(g>z)if(!(Math.abs(f*m-i*o)>z)||!c)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var y=s-b,w=a-_,k=m*m+i*i,O=y*y+w*w,I=Math.sqrt(k),T=Math.sqrt(g),C=c*Math.tan((st-Math.acos((k+g-O)/(2*I*T)))/2),M=C/T,S=C/I;Math.abs(M-1)>z&&(this._+="L"+(t+M*o)+","+(e+M*f)),this._+="A"+c+","+c+",0,0,"+ +(f*y>o*w)+","+(this._x1=t+S*m)+","+(this._y1=e+S*i)}},arc:function(t,e,s,a,c,b){t=+t,e=+e,s=+s,b=!!b;var _=s*Math.cos(a),m=s*Math.sin(a),i=t+_,o=e+m,f=1^b,g=b?a-c:c-a;if(s<0)throw new Error("negative radius: "+s);this._x1===null?this._+="M"+i+","+o:(Math.abs(this._x1-i)>z||Math.abs(this._y1-o)>z)&&(this._+="L"+i+","+o),s&&(g<0&&(g=g%rt+rt),g>Ft?this._+="A"+s+","+s+",0,1,"+f+","+(t-_)+","+(e-m)+"A"+s+","+s+",0,1,"+f+","+(this._x1=i)+","+(this._y1=o):g>z&&(this._+="A"+s+","+s+",0,"+ +(g>=st)+","+f+","+(this._x1=t+s*Math.cos(c))+","+(this._y1=e+s*Math.sin(c))))},rect:function(t,e,s,a){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +s+"v"+ +a+"h"+-s+"Z"},toString:function(){return this._}};function pt(t){return function(){return t}}function Wt(t){return t[0]}function Vt(t){return t[1]}var qt=Array.prototype.slice;function Rt(t){return t.source}function Gt(t){return t.target}function Xt(t){var e=Rt,s=Gt,a=Wt,c=Vt,b=null;function _(){var m,i=qt.call(arguments),o=e.apply(this,i),f=s.apply(this,i);if(b||(b=m=mt()),t(b,+a.apply(this,(i[0]=o,i)),+c.apply(this,i),+a.apply(this,(i[0]=f,i)),+c.apply(this,i)),m)return b=null,m+""||null}return _.source=function(m){return arguments.length?(e=m,_):e},_.target=function(m){return arguments.length?(s=m,_):s},_.x=function(m){return arguments.length?(a=typeof m=="function"?m:pt(+m),_):a},_.y=function(m){return arguments.length?(c=typeof m=="function"?m:pt(+m),_):c},_.context=function(m){return arguments.length?(b=m??null,_):b},_}function Yt(t,e,s,a,c){t.moveTo(e,s),t.bezierCurveTo(e=(e+a)/2,s,e,c,a,c)}function Kt(){return Xt(Yt)}function Qt(t){return[t.source.x1,t.y0]}function Bt(t){return[t.target.x0,t.y1]}function Zt(){return Kt().source(Qt).target(Bt)}var at=(function(){var t=d(function(m,i,o,f){for(o=o||{},f=m.length;f--;o[m[f]]=i);return o},"o"),e=[1,9],s=[1,10],a=[1,5,10,12],c={trace:d(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SANKEY:4,NEWLINE:5,csv:6,opt_eof:7,record:8,csv_tail:9,EOF:10,"field[source]":11,COMMA:12,"field[target]":13,"field[value]":14,field:15,escaped:16,non_escaped:17,DQUOTE:18,ESCAPED_TEXT:19,NON_ESCAPED_TEXT:20,$accept:0,$end:1},terminals_:{2:"error",4:"SANKEY",5:"NEWLINE",10:"EOF",11:"field[source]",12:"COMMA",13:"field[target]",14:"field[value]",18:"DQUOTE",19:"ESCAPED_TEXT",20:"NON_ESCAPED_TEXT"},productions_:[0,[3,4],[6,2],[9,2],[9,0],[7,1],[7,0],[8,5],[15,1],[15,1],[16,3],[17,1]],performAction:d(function(m,i,o,f,g,y,w){var k=y.length-1;switch(g){case 7:const O=f.findOrCreateNode(y[k-4].trim().replaceAll('""','"')),I=f.findOrCreateNode(y[k-2].trim().replaceAll('""','"')),T=parseFloat(y[k].trim());f.addLink(O,I,T);break;case 8:case 9:case 11:this.$=y[k];break;case 10:this.$=y[k-1];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3]},{6:4,8:5,15:6,16:7,17:8,18:e,20:s},{1:[2,6],7:11,10:[1,12]},t(s,[2,4],{9:13,5:[1,14]}),{12:[1,15]},t(a,[2,8]),t(a,[2,9]),{19:[1,16]},t(a,[2,11]),{1:[2,1]},{1:[2,5]},t(s,[2,2]),{6:17,8:5,15:6,16:7,17:8,18:e,20:s},{15:18,16:7,17:8,18:e,20:s},{18:[1,19]},t(s,[2,3]),{12:[1,20]},t(a,[2,10]),{15:21,16:7,17:8,18:e,20:s},t([1,5,10],[2,7])],defaultActions:{11:[2,1],12:[2,5]},parseError:d(function(m,i){if(i.recoverable)this.trace(m);else{var o=new Error(m);throw o.hash=i,o}},"parseError"),parse:d(function(m){var i=this,o=[0],f=[],g=[null],y=[],w=this.table,k="",O=0,I=0,T=2,C=1,M=y.slice.call(arguments,1),S=Object.create(this.lexer),N={yy:{}};for(var D in this.yy)Object.prototype.hasOwnProperty.call(this.yy,D)&&(N.yy[D]=this.yy[D]);S.setInput(m,N.yy),N.yy.lexer=S,N.yy.parser=this,typeof S.yylloc>"u"&&(S.yylloc={});var P=S.yylloc;y.push(P);var p=S.options&&S.options.ranges;typeof N.yy.parseError=="function"?this.parseError=N.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function L(v){o.length=o.length-2*v,g.length=g.length-v,y.length=y.length-v}d(L,"popStack");function F(){var v;return v=f.pop()||S.lex()||C,typeof v!="number"&&(v instanceof Array&&(f=v,v=f.pop()),v=i.symbols_[v]||v),v}d(F,"lex");for(var A,j,E,W,n={},u,l,h,r;;){if(j=o[o.length-1],this.defaultActions[j]?E=this.defaultActions[j]:((A===null||typeof A>"u")&&(A=F()),E=w[j]&&w[j][A]),typeof E>"u"||!E.length||!E[0]){var x="";r=[];for(u in w[j])this.terminals_[u]&&u>T&&r.push("'"+this.terminals_[u]+"'");S.showPosition?x="Parse error on line "+(O+1)+`: `+S.showPosition()+` Expecting `+r.join(", ")+", got '"+(this.terminals_[A]||A)+"'":x="Parse error on line "+(O+1)+": Unexpected "+(A==C?"end of input":"'"+(this.terminals_[A]||A)+"'"),this.parseError(x,{text:S.match,token:this.terminals_[A]||A,line:S.yylineno,loc:P,expected:r})}if(E[0]instanceof Array&&E.length>1)throw new Error("Parse Error: multiple actions possible at state: "+j+", token: "+A);switch(E[0]){case 1:o.push(A),g.push(S.yytext),y.push(S.yylloc),o.push(E[1]),A=null,I=S.yyleng,k=S.yytext,O=S.yylineno,P=S.yylloc;break;case 2:if(l=this.productions_[E[1]][1],n.$=g[g.length-l],n._$={first_line:y[y.length-(l||1)].first_line,last_line:y[y.length-1].last_line,first_column:y[y.length-(l||1)].first_column,last_column:y[y.length-1].last_column},p&&(n._$.range=[y[y.length-(l||1)].range[0],y[y.length-1].range[1]]),W=this.performAction.apply(n,[k,I,O,N.yy,E[1],g,y].concat(M)),typeof W<"u")return W;l&&(o=o.slice(0,-1*l*2),g=g.slice(0,-1*l),y=y.slice(0,-1*l)),o.push(this.productions_[E[1]][0]),g.push(n.$),y.push(n._$),h=w[o[o.length-2]][o[o.length-1]],o.push(h);break;case 3:return!0}}return!0},"parse")},b=(function(){var m={EOF:1,parseError:d(function(i,o){if(this.yy.parser)this.yy.parser.parseError(i,o);else throw new Error(i)},"parseError"),setInput:d(function(i,o){return this.yy=o||this.yy||{},this._input=i,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:d(function(){var i=this._input[0];this.yytext+=i,this.yyleng++,this.offset++,this.match+=i,this.matched+=i;var o=i.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),i},"input"),unput:d(function(i){var o=i.length,f=i.split(/(?:\r\n?|\n)/g);this._input=i+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var g=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),f.length-1&&(this.yylineno-=f.length-1);var y=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:f?(f.length===g.length?this.yylloc.first_column:0)+g[g.length-f.length].length-f[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[y[0],y[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},"unput"),more:d(function(){return this._more=!0,this},"more"),reject:d(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:d(function(i){this.unput(this.match.slice(i))},"less"),pastInput:d(function(){var i=this.matched.substr(0,this.matched.length-this.match.length);return(i.length>20?"...":"")+i.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:d(function(){var i=this.match;return i.length<20&&(i+=this._input.substr(0,20-i.length)),(i.substr(0,20)+(i.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:d(function(){var i=this.pastInput(),o=new Array(i.length+1).join("-");return i+this.upcomingInput()+` diff --git a/assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.op8l4Jsx.js b/assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.Dq1KKRt3.js similarity index 99% rename from assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.op8l4Jsx.js rename to assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.Dq1KKRt3.js index 0d0cf86..d1c7339 100644 --- a/assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.op8l4Jsx.js +++ b/assets/chunks/sequenceDiagram-SKLFT4DO-CFhuQylM-Cfcj-PHs.Dq1KKRt3.js @@ -1,4 +1,4 @@ -import{d as xe,w as $t,g as _t,o as ye,p as me,y as be}from"./chunk-67H74DCK-BzSPKGN1-D9cP9OkH.r52jfz8D.js";import{e as Te}from"./chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.C5ECUxJx.js";import{q as g,aj as Ee,A as Z,a9 as It,O as K,ae as Xt,aa as fe,ab as we,ag as I,a8 as jt,a5 as Ie,an as Le,a7 as Pe,a6 as _e,ao as ve,at as ke,ad as Lt,am as $,bc as bt,bd as ct,aU as Gt,be as Ae,bf as Ne,bg as Jt,aB as Dt}from"../app.DiEjJ8gz.js";import"./vitepress-theme-teek.CUuTa6hm.js";var Rt=(function(){var t=g(function(ot,f,L,T){for(L=L||{},T=ot.length;T--;L[ot[T]]=f);return L},"o"),e=[1,2],c=[1,3],a=[1,4],r=[2,4],i=[1,9],n=[1,11],h=[1,13],d=[1,14],s=[1,16],x=[1,17],E=[1,18],u=[1,24],m=[1,25],w=[1,26],P=[1,27],v=[1,28],R=[1,29],M=[1,30],C=[1,31],O=[1,32],V=[1,33],F=[1,34],U=[1,35],tt=[1,36],W=[1,37],q=[1,38],Y=[1,39],S=[1,41],X=[1,42],z=[1,43],G=[1,44],et=[1,45],N=[1,46],b=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],_=[4,5,16,50,52,53],J=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],st=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],k=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Ft=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],it=[68,69,70],lt=[1,122],kt={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:g(function(ot,f,L,T,A,l,H){var p=l.length-1;switch(A){case 3:return T.apply(l[p]),l[p];case 4:case 9:this.$=[];break;case 5:case 10:l[p-1].push(l[p]),this.$=l[p-1];break;case 6:case 7:case 11:case 12:this.$=l[p];break;case 8:case 13:this.$=[];break;case 15:l[p].type="createParticipant",this.$=l[p];break;case 16:l[p-1].unshift({type:"boxStart",boxData:T.parseBoxData(l[p-2])}),l[p-1].push({type:"boxEnd",boxText:l[p-2]}),this.$=l[p-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(l[p-2]),sequenceIndexStep:Number(l[p-1]),sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(l[p-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:T.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[p-1].actor};break;case 23:this.$={type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[p-1].actor};break;case 29:T.setDiagramTitle(l[p].substring(6)),this.$=l[p].substring(6);break;case 30:T.setDiagramTitle(l[p].substring(7)),this.$=l[p].substring(7);break;case 31:this.$=l[p].trim(),T.setAccTitle(this.$);break;case 32:case 33:this.$=l[p].trim(),T.setAccDescription(this.$);break;case 34:l[p-1].unshift({type:"loopStart",loopText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.LOOP_START}),l[p-1].push({type:"loopEnd",loopText:l[p-2],signalType:T.LINETYPE.LOOP_END}),this.$=l[p-1];break;case 35:l[p-1].unshift({type:"rectStart",color:T.parseMessage(l[p-2]),signalType:T.LINETYPE.RECT_START}),l[p-1].push({type:"rectEnd",color:T.parseMessage(l[p-2]),signalType:T.LINETYPE.RECT_END}),this.$=l[p-1];break;case 36:l[p-1].unshift({type:"optStart",optText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.OPT_START}),l[p-1].push({type:"optEnd",optText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.OPT_END}),this.$=l[p-1];break;case 37:l[p-1].unshift({type:"altStart",altText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.ALT_START}),l[p-1].push({type:"altEnd",signalType:T.LINETYPE.ALT_END}),this.$=l[p-1];break;case 38:l[p-1].unshift({type:"parStart",parText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.PAR_START}),l[p-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[p-1];break;case 39:l[p-1].unshift({type:"parStart",parText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.PAR_OVER_START}),l[p-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[p-1];break;case 40:l[p-1].unshift({type:"criticalStart",criticalText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.CRITICAL_START}),l[p-1].push({type:"criticalEnd",signalType:T.LINETYPE.CRITICAL_END}),this.$=l[p-1];break;case 41:l[p-1].unshift({type:"breakStart",breakText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.BREAK_START}),l[p-1].push({type:"breakEnd",optText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.BREAK_END}),this.$=l[p-1];break;case 43:this.$=l[p-3].concat([{type:"option",optionText:T.parseMessage(l[p-1]),signalType:T.LINETYPE.CRITICAL_OPTION},l[p]]);break;case 45:this.$=l[p-3].concat([{type:"and",parText:T.parseMessage(l[p-1]),signalType:T.LINETYPE.PAR_AND},l[p]]);break;case 47:this.$=l[p-3].concat([{type:"else",altText:T.parseMessage(l[p-1]),signalType:T.LINETYPE.ALT_ELSE},l[p]]);break;case 48:l[p-3].draw="participant",l[p-3].type="addParticipant",l[p-3].description=T.parseMessage(l[p-1]),this.$=l[p-3];break;case 49:l[p-1].draw="participant",l[p-1].type="addParticipant",this.$=l[p-1];break;case 50:l[p-3].draw="actor",l[p-3].type="addParticipant",l[p-3].description=T.parseMessage(l[p-1]),this.$=l[p-3];break;case 51:l[p-1].draw="actor",l[p-1].type="addParticipant",this.$=l[p-1];break;case 52:l[p-1].type="destroyParticipant",this.$=l[p-1];break;case 53:this.$=[l[p-1],{type:"addNote",placement:l[p-2],actor:l[p-1].actor,text:l[p]}];break;case 54:l[p-2]=[].concat(l[p-1],l[p-1]).slice(0,2),l[p-2][0]=l[p-2][0].actor,l[p-2][1]=l[p-2][1].actor,this.$=[l[p-1],{type:"addNote",placement:T.PLACEMENT.OVER,actor:l[p-2].slice(0,2),text:l[p]}];break;case 55:this.$=[l[p-1],{type:"addLinks",actor:l[p-1].actor,text:l[p]}];break;case 56:this.$=[l[p-1],{type:"addALink",actor:l[p-1].actor,text:l[p]}];break;case 57:this.$=[l[p-1],{type:"addProperties",actor:l[p-1].actor,text:l[p]}];break;case 58:this.$=[l[p-1],{type:"addDetails",actor:l[p-1].actor,text:l[p]}];break;case 61:this.$=[l[p-2],l[p]];break;case 62:this.$=l[p];break;case 63:this.$=T.PLACEMENT.LEFTOF;break;case 64:this.$=T.PLACEMENT.RIGHTOF;break;case 65:this.$=[l[p-4],l[p-1],{type:"addMessage",from:l[p-4].actor,to:l[p-1].actor,signalType:l[p-3],msg:l[p],activate:!0},{type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[p-1].actor}];break;case 66:this.$=[l[p-4],l[p-1],{type:"addMessage",from:l[p-4].actor,to:l[p-1].actor,signalType:l[p-3],msg:l[p]},{type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[p-4].actor}];break;case 67:this.$=[l[p-3],l[p-1],{type:"addMessage",from:l[p-3].actor,to:l[p-1].actor,signalType:l[p-2],msg:l[p]}];break;case 68:this.$={type:"addParticipant",actor:l[p]};break;case 69:this.$=T.LINETYPE.SOLID_OPEN;break;case 70:this.$=T.LINETYPE.DOTTED_OPEN;break;case 71:this.$=T.LINETYPE.SOLID;break;case 72:this.$=T.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=T.LINETYPE.DOTTED;break;case 74:this.$=T.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=T.LINETYPE.SOLID_CROSS;break;case 76:this.$=T.LINETYPE.DOTTED_CROSS;break;case 77:this.$=T.LINETYPE.SOLID_POINT;break;case 78:this.$=T.LINETYPE.DOTTED_POINT;break;case 79:this.$=T.parseMessage(l[p].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:c,6:a},{1:[3]},{3:5,4:e,5:c,6:a},{3:6,4:e,5:c,6:a},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],r,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:n,8:8,9:10,12:12,13:h,14:d,17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},t(b,[2,5]),{9:47,12:12,13:h,14:d,17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},t(b,[2,7]),t(b,[2,8]),t(b,[2,14]),{12:48,50:W,52:q,53:Y},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:N},{22:55,70:N},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(b,[2,29]),t(b,[2,30]),{32:[1,61]},{34:[1,62]},t(b,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:N},{22:72,70:N},{22:73,70:N},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:N},{22:90,70:N},{22:91,70:N},{22:92,70:N},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(b,[2,6]),t(b,[2,15]),t(_,[2,9],{10:93}),t(b,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(b,[2,21]),{5:[1,97]},{5:[1,98]},t(b,[2,24]),t(b,[2,25]),t(b,[2,26]),t(b,[2,27]),t(b,[2,28]),t(b,[2,31]),t(b,[2,32]),t(J,r,{7:99}),t(J,r,{7:100}),t(J,r,{7:101}),t(st,r,{40:102,7:103}),t(k,r,{42:104,7:105}),t(k,r,{7:105,42:106}),t(Ft,r,{45:107,7:108}),t(J,r,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:N},t(it,[2,69]),t(it,[2,70]),t(it,[2,71]),t(it,[2,72]),t(it,[2,73]),t(it,[2,74]),t(it,[2,75]),t(it,[2,76]),t(it,[2,77]),t(it,[2,78]),{22:118,70:N},{22:120,58:119,70:N},{70:[2,63]},{70:[2,64]},{56:121,81:lt},{56:123,81:lt},{56:124,81:lt},{56:125,81:lt},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:W,52:q,53:Y},{5:[1,131]},t(b,[2,19]),t(b,[2,20]),t(b,[2,22]),t(b,[2,23]),{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,132],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,133],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,134],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{16:[1,135]},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[2,46],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,49:[1,136],50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{16:[1,137]},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[2,44],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,48:[1,138],50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{16:[1,139]},{16:[1,140]},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[2,42],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,47:[1,141],50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,142],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{15:[1,143]},t(b,[2,49]),{15:[1,144]},t(b,[2,51]),t(b,[2,52]),{22:145,70:N},{22:146,70:N},{56:147,81:lt},{56:148,81:lt},{56:149,81:lt},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(b,[2,16]),t(_,[2,10]),{12:151,50:W,52:q,53:Y},t(_,[2,12]),t(_,[2,13]),t(b,[2,18]),t(b,[2,34]),t(b,[2,35]),t(b,[2,36]),t(b,[2,37]),{15:[1,152]},t(b,[2,38]),{15:[1,153]},t(b,[2,39]),t(b,[2,40]),{15:[1,154]},t(b,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:lt},{56:158,81:lt},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:N},t(_,[2,11]),t(st,r,{7:103,40:160}),t(k,r,{7:105,42:161}),t(Ft,r,{7:108,45:162}),t(b,[2,48]),t(b,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:g(function(ot,f){if(f.recoverable)this.trace(ot);else{var L=new Error(ot);throw L.hash=f,L}},"parseError"),parse:g(function(ot){var f=this,L=[0],T=[],A=[null],l=[],H=this.table,p="",Et=0,Wt=0,de=2,qt=1,pe=l.slice.call(arguments,1),B=Object.create(this.lexer),dt={yy:{}};for(var At in this.yy)Object.prototype.hasOwnProperty.call(this.yy,At)&&(dt.yy[At]=this.yy[At]);B.setInput(ot,dt.yy),dt.yy.lexer=B,dt.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var Nt=B.yylloc;l.push(Nt);var ge=B.options&&B.options.ranges;typeof dt.yy.parseError=="function"?this.parseError=dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ue(Q){L.length=L.length-2*Q,A.length=A.length-Q,l.length=l.length-Q}g(ue,"popStack");function zt(){var Q;return Q=T.pop()||B.lex()||qt,typeof Q!="number"&&(Q instanceof Array&&(T=Q,Q=T.pop()),Q=f.symbols_[Q]||Q),Q}g(zt,"lex");for(var j,pt,at,Mt,xt={},ft,ht,Ht,wt;;){if(pt=L[L.length-1],this.defaultActions[pt]?at=this.defaultActions[pt]:((j===null||typeof j>"u")&&(j=zt()),at=H[pt]&&H[pt][j]),typeof at>"u"||!at.length||!at[0]){var St="";wt=[];for(ft in H[pt])this.terminals_[ft]&&ft>de&&wt.push("'"+this.terminals_[ft]+"'");B.showPosition?St="Parse error on line "+(Et+1)+`: +import{d as xe,w as $t,g as _t,o as ye,p as me,y as be}from"./chunk-67H74DCK-BzSPKGN1-D9cP9OkH.dho-7ePY.js";import{e as Te}from"./chunk-AACKK3MU-B0gfjd0p-BcoPfUa7.CZC4Gt28.js";import{q as g,aj as Ee,A as Z,a9 as It,O as K,ae as Xt,aa as fe,ab as we,ag as I,a8 as jt,a5 as Ie,an as Le,a7 as Pe,a6 as _e,ao as ve,at as ke,ad as Lt,am as $,bc as bt,bd as ct,aU as Gt,be as Ae,bf as Ne,bg as Jt,aB as Dt}from"../app.DfYWW83x.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var Rt=(function(){var t=g(function(ot,f,L,T){for(L=L||{},T=ot.length;T--;L[ot[T]]=f);return L},"o"),e=[1,2],c=[1,3],a=[1,4],r=[2,4],i=[1,9],n=[1,11],h=[1,13],d=[1,14],s=[1,16],x=[1,17],E=[1,18],u=[1,24],m=[1,25],w=[1,26],P=[1,27],v=[1,28],R=[1,29],M=[1,30],C=[1,31],O=[1,32],V=[1,33],F=[1,34],U=[1,35],tt=[1,36],W=[1,37],q=[1,38],Y=[1,39],S=[1,41],X=[1,42],z=[1,43],G=[1,44],et=[1,45],N=[1,46],b=[1,4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,48,49,50,52,53,54,59,60,61,62,70],_=[4,5,16,50,52,53],J=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],st=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,49,50,52,53,54,59,60,61,62,70],k=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,48,50,52,53,54,59,60,61,62,70],Ft=[4,5,13,14,16,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,47,50,52,53,54,59,60,61,62,70],it=[68,69,70],lt=[1,122],kt={trace:g(function(){},"trace"),yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,SD:6,document:7,line:8,statement:9,box_section:10,box_line:11,participant_statement:12,create:13,box:14,restOfLine:15,end:16,signal:17,autonumber:18,NUM:19,off:20,activate:21,actor:22,deactivate:23,note_statement:24,links_statement:25,link_statement:26,properties_statement:27,details_statement:28,title:29,legacy_title:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,loop:36,rect:37,opt:38,alt:39,else_sections:40,par:41,par_sections:42,par_over:43,critical:44,option_sections:45,break:46,option:47,and:48,else:49,participant:50,AS:51,participant_actor:52,destroy:53,note:54,placement:55,text2:56,over:57,actor_pair:58,links:59,link:60,properties:61,details:62,spaceList:63,",":64,left_of:65,right_of:66,signaltype:67,"+":68,"-":69,ACTOR:70,SOLID_OPEN_ARROW:71,DOTTED_OPEN_ARROW:72,SOLID_ARROW:73,BIDIRECTIONAL_SOLID_ARROW:74,DOTTED_ARROW:75,BIDIRECTIONAL_DOTTED_ARROW:76,SOLID_CROSS:77,DOTTED_CROSS:78,SOLID_POINT:79,DOTTED_POINT:80,TXT:81,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",6:"SD",13:"create",14:"box",15:"restOfLine",16:"end",18:"autonumber",19:"NUM",20:"off",21:"activate",23:"deactivate",29:"title",30:"legacy_title",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",36:"loop",37:"rect",38:"opt",39:"alt",41:"par",43:"par_over",44:"critical",46:"break",47:"option",48:"and",49:"else",50:"participant",51:"AS",52:"participant_actor",53:"destroy",54:"note",57:"over",59:"links",60:"link",61:"properties",62:"details",64:",",65:"left_of",66:"right_of",68:"+",69:"-",70:"ACTOR",71:"SOLID_OPEN_ARROW",72:"DOTTED_OPEN_ARROW",73:"SOLID_ARROW",74:"BIDIRECTIONAL_SOLID_ARROW",75:"DOTTED_ARROW",76:"BIDIRECTIONAL_DOTTED_ARROW",77:"SOLID_CROSS",78:"DOTTED_CROSS",79:"SOLID_POINT",80:"DOTTED_POINT",81:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[10,0],[10,2],[11,2],[11,1],[11,1],[9,1],[9,2],[9,4],[9,2],[9,4],[9,3],[9,3],[9,2],[9,3],[9,3],[9,2],[9,2],[9,2],[9,2],[9,2],[9,1],[9,1],[9,2],[9,2],[9,1],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[9,4],[45,1],[45,4],[42,1],[42,4],[40,1],[40,4],[12,5],[12,3],[12,5],[12,3],[12,3],[24,4],[24,4],[25,3],[26,3],[27,3],[28,3],[63,2],[63,1],[58,3],[58,1],[55,1],[55,1],[17,5],[17,5],[17,4],[22,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[67,1],[56,1]],performAction:g(function(ot,f,L,T,A,l,H){var p=l.length-1;switch(A){case 3:return T.apply(l[p]),l[p];case 4:case 9:this.$=[];break;case 5:case 10:l[p-1].push(l[p]),this.$=l[p-1];break;case 6:case 7:case 11:case 12:this.$=l[p];break;case 8:case 13:this.$=[];break;case 15:l[p].type="createParticipant",this.$=l[p];break;case 16:l[p-1].unshift({type:"boxStart",boxData:T.parseBoxData(l[p-2])}),l[p-1].push({type:"boxEnd",boxText:l[p-2]}),this.$=l[p-1];break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(l[p-2]),sequenceIndexStep:Number(l[p-1]),sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceIndex:Number(l[p-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:T.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:T.LINETYPE.AUTONUMBER};break;case 22:this.$={type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[p-1].actor};break;case 23:this.$={type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[p-1].actor};break;case 29:T.setDiagramTitle(l[p].substring(6)),this.$=l[p].substring(6);break;case 30:T.setDiagramTitle(l[p].substring(7)),this.$=l[p].substring(7);break;case 31:this.$=l[p].trim(),T.setAccTitle(this.$);break;case 32:case 33:this.$=l[p].trim(),T.setAccDescription(this.$);break;case 34:l[p-1].unshift({type:"loopStart",loopText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.LOOP_START}),l[p-1].push({type:"loopEnd",loopText:l[p-2],signalType:T.LINETYPE.LOOP_END}),this.$=l[p-1];break;case 35:l[p-1].unshift({type:"rectStart",color:T.parseMessage(l[p-2]),signalType:T.LINETYPE.RECT_START}),l[p-1].push({type:"rectEnd",color:T.parseMessage(l[p-2]),signalType:T.LINETYPE.RECT_END}),this.$=l[p-1];break;case 36:l[p-1].unshift({type:"optStart",optText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.OPT_START}),l[p-1].push({type:"optEnd",optText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.OPT_END}),this.$=l[p-1];break;case 37:l[p-1].unshift({type:"altStart",altText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.ALT_START}),l[p-1].push({type:"altEnd",signalType:T.LINETYPE.ALT_END}),this.$=l[p-1];break;case 38:l[p-1].unshift({type:"parStart",parText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.PAR_START}),l[p-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[p-1];break;case 39:l[p-1].unshift({type:"parStart",parText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.PAR_OVER_START}),l[p-1].push({type:"parEnd",signalType:T.LINETYPE.PAR_END}),this.$=l[p-1];break;case 40:l[p-1].unshift({type:"criticalStart",criticalText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.CRITICAL_START}),l[p-1].push({type:"criticalEnd",signalType:T.LINETYPE.CRITICAL_END}),this.$=l[p-1];break;case 41:l[p-1].unshift({type:"breakStart",breakText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.BREAK_START}),l[p-1].push({type:"breakEnd",optText:T.parseMessage(l[p-2]),signalType:T.LINETYPE.BREAK_END}),this.$=l[p-1];break;case 43:this.$=l[p-3].concat([{type:"option",optionText:T.parseMessage(l[p-1]),signalType:T.LINETYPE.CRITICAL_OPTION},l[p]]);break;case 45:this.$=l[p-3].concat([{type:"and",parText:T.parseMessage(l[p-1]),signalType:T.LINETYPE.PAR_AND},l[p]]);break;case 47:this.$=l[p-3].concat([{type:"else",altText:T.parseMessage(l[p-1]),signalType:T.LINETYPE.ALT_ELSE},l[p]]);break;case 48:l[p-3].draw="participant",l[p-3].type="addParticipant",l[p-3].description=T.parseMessage(l[p-1]),this.$=l[p-3];break;case 49:l[p-1].draw="participant",l[p-1].type="addParticipant",this.$=l[p-1];break;case 50:l[p-3].draw="actor",l[p-3].type="addParticipant",l[p-3].description=T.parseMessage(l[p-1]),this.$=l[p-3];break;case 51:l[p-1].draw="actor",l[p-1].type="addParticipant",this.$=l[p-1];break;case 52:l[p-1].type="destroyParticipant",this.$=l[p-1];break;case 53:this.$=[l[p-1],{type:"addNote",placement:l[p-2],actor:l[p-1].actor,text:l[p]}];break;case 54:l[p-2]=[].concat(l[p-1],l[p-1]).slice(0,2),l[p-2][0]=l[p-2][0].actor,l[p-2][1]=l[p-2][1].actor,this.$=[l[p-1],{type:"addNote",placement:T.PLACEMENT.OVER,actor:l[p-2].slice(0,2),text:l[p]}];break;case 55:this.$=[l[p-1],{type:"addLinks",actor:l[p-1].actor,text:l[p]}];break;case 56:this.$=[l[p-1],{type:"addALink",actor:l[p-1].actor,text:l[p]}];break;case 57:this.$=[l[p-1],{type:"addProperties",actor:l[p-1].actor,text:l[p]}];break;case 58:this.$=[l[p-1],{type:"addDetails",actor:l[p-1].actor,text:l[p]}];break;case 61:this.$=[l[p-2],l[p]];break;case 62:this.$=l[p];break;case 63:this.$=T.PLACEMENT.LEFTOF;break;case 64:this.$=T.PLACEMENT.RIGHTOF;break;case 65:this.$=[l[p-4],l[p-1],{type:"addMessage",from:l[p-4].actor,to:l[p-1].actor,signalType:l[p-3],msg:l[p],activate:!0},{type:"activeStart",signalType:T.LINETYPE.ACTIVE_START,actor:l[p-1].actor}];break;case 66:this.$=[l[p-4],l[p-1],{type:"addMessage",from:l[p-4].actor,to:l[p-1].actor,signalType:l[p-3],msg:l[p]},{type:"activeEnd",signalType:T.LINETYPE.ACTIVE_END,actor:l[p-4].actor}];break;case 67:this.$=[l[p-3],l[p-1],{type:"addMessage",from:l[p-3].actor,to:l[p-1].actor,signalType:l[p-2],msg:l[p]}];break;case 68:this.$={type:"addParticipant",actor:l[p]};break;case 69:this.$=T.LINETYPE.SOLID_OPEN;break;case 70:this.$=T.LINETYPE.DOTTED_OPEN;break;case 71:this.$=T.LINETYPE.SOLID;break;case 72:this.$=T.LINETYPE.BIDIRECTIONAL_SOLID;break;case 73:this.$=T.LINETYPE.DOTTED;break;case 74:this.$=T.LINETYPE.BIDIRECTIONAL_DOTTED;break;case 75:this.$=T.LINETYPE.SOLID_CROSS;break;case 76:this.$=T.LINETYPE.DOTTED_CROSS;break;case 77:this.$=T.LINETYPE.SOLID_POINT;break;case 78:this.$=T.LINETYPE.DOTTED_POINT;break;case 79:this.$=T.parseMessage(l[p].trim().substring(1));break}},"anonymous"),table:[{3:1,4:e,5:c,6:a},{1:[3]},{3:5,4:e,5:c,6:a},{3:6,4:e,5:c,6:a},t([1,4,5,13,14,18,21,23,29,30,31,33,35,36,37,38,39,41,43,44,46,50,52,53,54,59,60,61,62,70],r,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:i,5:n,8:8,9:10,12:12,13:h,14:d,17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},t(b,[2,5]),{9:47,12:12,13:h,14:d,17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},t(b,[2,7]),t(b,[2,8]),t(b,[2,14]),{12:48,50:W,52:q,53:Y},{15:[1,49]},{5:[1,50]},{5:[1,53],19:[1,51],20:[1,52]},{22:54,70:N},{22:55,70:N},{5:[1,56]},{5:[1,57]},{5:[1,58]},{5:[1,59]},{5:[1,60]},t(b,[2,29]),t(b,[2,30]),{32:[1,61]},{34:[1,62]},t(b,[2,33]),{15:[1,63]},{15:[1,64]},{15:[1,65]},{15:[1,66]},{15:[1,67]},{15:[1,68]},{15:[1,69]},{15:[1,70]},{22:71,70:N},{22:72,70:N},{22:73,70:N},{67:74,71:[1,75],72:[1,76],73:[1,77],74:[1,78],75:[1,79],76:[1,80],77:[1,81],78:[1,82],79:[1,83],80:[1,84]},{55:85,57:[1,86],65:[1,87],66:[1,88]},{22:89,70:N},{22:90,70:N},{22:91,70:N},{22:92,70:N},t([5,51,64,71,72,73,74,75,76,77,78,79,80,81],[2,68]),t(b,[2,6]),t(b,[2,15]),t(_,[2,9],{10:93}),t(b,[2,17]),{5:[1,95],19:[1,94]},{5:[1,96]},t(b,[2,21]),{5:[1,97]},{5:[1,98]},t(b,[2,24]),t(b,[2,25]),t(b,[2,26]),t(b,[2,27]),t(b,[2,28]),t(b,[2,31]),t(b,[2,32]),t(J,r,{7:99}),t(J,r,{7:100}),t(J,r,{7:101}),t(st,r,{40:102,7:103}),t(k,r,{42:104,7:105}),t(k,r,{7:105,42:106}),t(Ft,r,{45:107,7:108}),t(J,r,{7:109}),{5:[1,111],51:[1,110]},{5:[1,113],51:[1,112]},{5:[1,114]},{22:117,68:[1,115],69:[1,116],70:N},t(it,[2,69]),t(it,[2,70]),t(it,[2,71]),t(it,[2,72]),t(it,[2,73]),t(it,[2,74]),t(it,[2,75]),t(it,[2,76]),t(it,[2,77]),t(it,[2,78]),{22:118,70:N},{22:120,58:119,70:N},{70:[2,63]},{70:[2,64]},{56:121,81:lt},{56:123,81:lt},{56:124,81:lt},{56:125,81:lt},{4:[1,128],5:[1,130],11:127,12:129,16:[1,126],50:W,52:q,53:Y},{5:[1,131]},t(b,[2,19]),t(b,[2,20]),t(b,[2,22]),t(b,[2,23]),{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,132],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,133],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,134],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{16:[1,135]},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[2,46],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,49:[1,136],50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{16:[1,137]},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[2,44],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,48:[1,138],50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{16:[1,139]},{16:[1,140]},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[2,42],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,47:[1,141],50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{4:i,5:n,8:8,9:10,12:12,13:h,14:d,16:[1,142],17:15,18:s,21:x,22:40,23:E,24:19,25:20,26:21,27:22,28:23,29:u,30:m,31:w,33:P,35:v,36:R,37:M,38:C,39:O,41:V,43:F,44:U,46:tt,50:W,52:q,53:Y,54:S,59:X,60:z,61:G,62:et,70:N},{15:[1,143]},t(b,[2,49]),{15:[1,144]},t(b,[2,51]),t(b,[2,52]),{22:145,70:N},{22:146,70:N},{56:147,81:lt},{56:148,81:lt},{56:149,81:lt},{64:[1,150],81:[2,62]},{5:[2,55]},{5:[2,79]},{5:[2,56]},{5:[2,57]},{5:[2,58]},t(b,[2,16]),t(_,[2,10]),{12:151,50:W,52:q,53:Y},t(_,[2,12]),t(_,[2,13]),t(b,[2,18]),t(b,[2,34]),t(b,[2,35]),t(b,[2,36]),t(b,[2,37]),{15:[1,152]},t(b,[2,38]),{15:[1,153]},t(b,[2,39]),t(b,[2,40]),{15:[1,154]},t(b,[2,41]),{5:[1,155]},{5:[1,156]},{56:157,81:lt},{56:158,81:lt},{5:[2,67]},{5:[2,53]},{5:[2,54]},{22:159,70:N},t(_,[2,11]),t(st,r,{7:103,40:160}),t(k,r,{7:105,42:161}),t(Ft,r,{7:108,45:162}),t(b,[2,48]),t(b,[2,50]),{5:[2,65]},{5:[2,66]},{81:[2,61]},{16:[2,47]},{16:[2,45]},{16:[2,43]}],defaultActions:{5:[2,1],6:[2,2],87:[2,63],88:[2,64],121:[2,55],122:[2,79],123:[2,56],124:[2,57],125:[2,58],147:[2,67],148:[2,53],149:[2,54],157:[2,65],158:[2,66],159:[2,61],160:[2,47],161:[2,45],162:[2,43]},parseError:g(function(ot,f){if(f.recoverable)this.trace(ot);else{var L=new Error(ot);throw L.hash=f,L}},"parseError"),parse:g(function(ot){var f=this,L=[0],T=[],A=[null],l=[],H=this.table,p="",Et=0,Wt=0,de=2,qt=1,pe=l.slice.call(arguments,1),B=Object.create(this.lexer),dt={yy:{}};for(var At in this.yy)Object.prototype.hasOwnProperty.call(this.yy,At)&&(dt.yy[At]=this.yy[At]);B.setInput(ot,dt.yy),dt.yy.lexer=B,dt.yy.parser=this,typeof B.yylloc>"u"&&(B.yylloc={});var Nt=B.yylloc;l.push(Nt);var ge=B.options&&B.options.ranges;typeof dt.yy.parseError=="function"?this.parseError=dt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ue(Q){L.length=L.length-2*Q,A.length=A.length-Q,l.length=l.length-Q}g(ue,"popStack");function zt(){var Q;return Q=T.pop()||B.lex()||qt,typeof Q!="number"&&(Q instanceof Array&&(T=Q,Q=T.pop()),Q=f.symbols_[Q]||Q),Q}g(zt,"lex");for(var j,pt,at,Mt,xt={},ft,ht,Ht,wt;;){if(pt=L[L.length-1],this.defaultActions[pt]?at=this.defaultActions[pt]:((j===null||typeof j>"u")&&(j=zt()),at=H[pt]&&H[pt][j]),typeof at>"u"||!at.length||!at[0]){var St="";wt=[];for(ft in H[pt])this.terminals_[ft]&&ft>de&&wt.push("'"+this.terminals_[ft]+"'");B.showPosition?St="Parse error on line "+(Et+1)+`: `+B.showPosition()+` Expecting `+wt.join(", ")+", got '"+(this.terminals_[j]||j)+"'":St="Parse error on line "+(Et+1)+": Unexpected "+(j==qt?"end of input":"'"+(this.terminals_[j]||j)+"'"),this.parseError(St,{text:B.match,token:this.terminals_[j]||j,line:B.yylineno,loc:Nt,expected:wt})}if(at[0]instanceof Array&&at.length>1)throw new Error("Parse Error: multiple actions possible at state: "+pt+", token: "+j);switch(at[0]){case 1:L.push(j),A.push(B.yytext),l.push(B.yylloc),L.push(at[1]),j=null,Wt=B.yyleng,p=B.yytext,Et=B.yylineno,Nt=B.yylloc;break;case 2:if(ht=this.productions_[at[1]][1],xt.$=A[A.length-ht],xt._$={first_line:l[l.length-(ht||1)].first_line,last_line:l[l.length-1].last_line,first_column:l[l.length-(ht||1)].first_column,last_column:l[l.length-1].last_column},ge&&(xt._$.range=[l[l.length-(ht||1)].range[0],l[l.length-1].range[1]]),Mt=this.performAction.apply(xt,[p,Wt,Et,dt.yy,at[1],A,l].concat(pe)),typeof Mt<"u")return Mt;ht&&(L=L.slice(0,-1*ht*2),A=A.slice(0,-1*ht),l=l.slice(0,-1*ht)),L.push(this.productions_[at[1]][0]),A.push(xt.$),l.push(xt._$),Ht=H[L[L.length-2]][L[L.length-1]],L.push(Ht);break;case 3:return!0}}return!0},"parse")},he=(function(){var ot={EOF:1,parseError:g(function(f,L){if(this.yy.parser)this.yy.parser.parseError(f,L);else throw new Error(f)},"parseError"),setInput:g(function(f,L){return this.yy=L||this.yy||{},this._input=f,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:g(function(){var f=this._input[0];this.yytext+=f,this.yyleng++,this.offset++,this.match+=f,this.matched+=f;var L=f.match(/(?:\r\n?|\n).*/g);return L?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),f},"input"),unput:g(function(f){var L=f.length,T=f.split(/(?:\r\n?|\n)/g);this._input=f+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-L),this.offset-=L;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),T.length-1&&(this.yylineno-=T.length-1);var l=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:T?(T.length===A.length?this.yylloc.first_column:0)+A[A.length-T.length].length-T[0].length:this.yylloc.first_column-L},this.options.ranges&&(this.yylloc.range=[l[0],l[0]+this.yyleng-L]),this.yyleng=this.yytext.length,this},"unput"),more:g(function(){return this._more=!0,this},"more"),reject:g(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:g(function(f){this.unput(this.match.slice(f))},"less"),pastInput:g(function(){var f=this.matched.substr(0,this.matched.length-this.match.length);return(f.length>20?"...":"")+f.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:g(function(){var f=this.match;return f.length<20&&(f+=this._input.substr(0,20-f.length)),(f.substr(0,20)+(f.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:g(function(){var f=this.pastInput(),L=new Array(f.length+1).join("-");return f+this.upcomingInput()+` diff --git a/assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.BO96OnGS.js b/assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.Bwo-rHhY.js similarity index 94% rename from assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.BO96OnGS.js rename to assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.Bwo-rHhY.js index e1ee8ed..4f5399c 100644 --- a/assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.BO96OnGS.js +++ b/assets/chunks/stateDiagram-MI5ZYTHO-DUpd8xBQ-f0nYnhhU.Bwo-rHhY.js @@ -1 +1 @@ -import{U,F as A,j as M}from"./chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.Bposhqfo.js";import{q as y,A as t,a9 as v,O as S,aa as O,ag as H,bb as G,bi as P,bf as R,am as C}from"../app.DiEjJ8gz.js";import{y as F}from"./graph-CQdm8gkL-dflHhQdl.F8h9Zro-.js";import{i as I}from"./layout-FfY8zw-4-CVLJrweZ.BPwdqM1F.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import"./vitepress-theme-teek.CUuTa6hm.js";import"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";var W=y(e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),"drawStartState"),j=y(e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),J=y((e,r)=>{const g=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(r.id),s=g.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",s.width+2*t().state.padding).attr("height",s.height+2*t().state.padding).attr("rx",t().state.radius),g},"drawSimpleState"),q=y((e,r)=>{const g=y(function(o,u,B){const m=o.append("tspan").attr("x",2*t().state.padding).text(u);B||m.attr("dy",t().state.textHeight)},"addTspan"),s=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(r.descriptions[0]).node().getBBox(),d=s.height,c=e.append("text").attr("x",t().state.padding).attr("y",d+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let l=!0,a=!0;r.descriptions.forEach(function(o){l||(g(c,o,a),a=!1),l=!1});const n=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+d+t().state.dividerMargin/2).attr("y2",t().state.padding+d+t().state.dividerMargin/2).attr("class","descr-divider"),x=c.node().getBBox(),h=Math.max(x.width,s.width);return n.attr("x2",h+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",h+2*t().state.padding).attr("height",x.height+d+2*t().state.padding).attr("rx",t().state.radius),e},"drawDescrState"),X=y((e,r,g)=>{const s=t().state.padding,d=2*t().state.padding,c=e.node().getBBox(),l=c.width,a=c.x,n=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(r.id),x=n.node().getBBox().width+d;let h=Math.max(x,l);h===l&&(h=h+d);let o;const u=e.node().getBBox();r.doc,o=a-s,x>l&&(o=(l-h)/2+s),Math.abs(a-u.x)l&&(o=a-(x-l)/2);const B=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",o).attr("y",B).attr("class",g?"alt-composit":"composit").attr("width",h).attr("height",u.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),n.attr("x",o+s),x<=l&&n.attr("x",a+(h-d)/2-x/2+s),e.insert("rect",":first-child").attr("x",o).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",h).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",o).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",h).attr("height",u.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},"addTitleAndBox"),Y=y(e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),"drawEndState"),$=y((e,r)=>{let g=t().state.forkWidth,s=t().state.forkHeight;if(r.parentId){let d=g;g=s,s=d}return e.append("rect").style("stroke","black").style("fill","black").attr("width",g).attr("height",s).attr("x",t().state.padding).attr("y",t().state.padding)},"drawForkJoinState"),Z=y((e,r,g,s)=>{let d=0;const c=s.append("text");c.style("text-anchor","start"),c.attr("class","noteText");let l=e.replace(/\r\n/g,"
");l=l.replace(/\n/g,"
");const a=l.split(H.lineBreakRegex);let n=1.25*t().state.noteMargin;for(const x of a){const h=x.trim();if(h.length>0){const o=c.append("tspan");if(o.text(h),n===0){const u=o.node().getBBox();n+=u.height}d+=n,o.attr("x",r+t().state.noteMargin),o.attr("y",g+d+1.25*t().state.noteMargin)}}return{textWidth:c.node().getBBox().width,textHeight:d}},"_drawLongText"),_=y((e,r)=>{r.attr("class","state-note");const g=r.append("rect").attr("x",0).attr("y",t().state.padding),s=r.append("g"),{textWidth:d,textHeight:c}=Z(e,0,0,s);return g.attr("height",c+2*t().state.noteMargin),g.attr("width",d+t().state.noteMargin*2),g},"drawNote"),T=y(function(e,r){const g=r.id,s={id:g,label:r.id,width:0,height:0},d=e.append("g").attr("id",g).attr("class","stateGroup");r.type==="start"&&W(d),r.type==="end"&&Y(d),(r.type==="fork"||r.type==="join")&&$(d,r),r.type==="note"&&_(r.note.text,d),r.type==="divider"&&j(d),r.type==="default"&&r.descriptions.length===0&&J(d,r),r.type==="default"&&r.descriptions.length>0&&q(d,r);const c=d.node().getBBox();return s.width=c.width+2*t().state.padding,s.height=c.height+2*t().state.padding,s},"drawState"),L=0,K=y(function(e,r,g){const s=y(function(n){switch(n){case M.relationType.AGGREGATION:return"aggregation";case M.relationType.EXTENSION:return"extension";case M.relationType.COMPOSITION:return"composition";case M.relationType.DEPENDENCY:return"dependency"}},"getRelationType");r.points=r.points.filter(n=>!Number.isNaN(n.y));const d=r.points,c=G().x(function(n){return n.x}).y(function(n){return n.y}).curve(P),l=e.append("path").attr("d",c(d)).attr("id","edge"+L).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=R(!0)),l.attr("marker-end","url("+a+"#"+s(M.relationType.DEPENDENCY)+"End)"),g.title!==void 0){const n=e.append("g").attr("class","stateLabel"),{x,y:h}=C.calcLabelPosition(r.points),o=H.getRows(g.title);let u=0;const B=[];let m=0,E=0;for(let f=0;f<=o.length;f++){const p=n.append("text").attr("text-anchor","middle").text(o[f]).attr("x",x).attr("y",h+u),w=p.node().getBBox();m=Math.max(m,w.width),E=Math.min(E,w.x),S.info(w.x,x,h+u),u===0&&(u=p.node().getBBox().height,S.info("Title height",u,h)),B.push(p)}let N=u*o.length;if(o.length>1){const f=(o.length-1)*u*.5;B.forEach((p,w)=>p.attr("y",h+w*u-f)),N=u*o.length}const i=n.node().getBBox();n.insert("rect",":first-child").attr("class","box").attr("x",x-m/2-t().state.padding/2).attr("y",h-N/2-t().state.padding/2-3.5).attr("width",m+t().state.padding).attr("height",N+t().state.padding),S.info(i)}L++},"drawEdge"),b,z={},Q=y(function(){},"setConf"),V=y(function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),tt=y(function(e,r,g,s){b=t().state;const d=t().securityLevel;let c;d==="sandbox"&&(c=v("#i"+r));const l=d==="sandbox"?v(c.nodes()[0].contentDocument.body):v("body"),a=d==="sandbox"?c.nodes()[0].contentDocument:document;S.debug("Rendering diagram "+e);const n=l.select(`[id='${r}']`);V(n);const x=s.db.getRootDoc();D(x,n,void 0,!1,l,a,s);const h=b.padding,o=n.node().getBBox(),u=o.width+h*2,B=o.height+h*2,m=u*1.75;O(n,B,m,b.useMaxWidth),n.attr("viewBox",`${o.x-b.padding} ${o.y-b.padding} `+u+" "+B)},"draw"),et=y(e=>e?e.length*b.fontSizeFactor:1,"getLabelWidth"),D=y((e,r,g,s,d,c,l)=>{const a=new F({compound:!0,multigraph:!0});let n,x=!0;for(n=0;n{const p=f.parentElement;let w=0,k=0;p&&(p.parentElement&&(w=p.parentElement.getBBox().width),k=parseInt(p.getAttribute("data-x-shift"),10),Number.isNaN(k)&&(k=0)),f.setAttribute("x1",0-k+8),f.setAttribute("x2",w-k-8)})):S.debug("No Node "+i+": "+JSON.stringify(a.node(i)))});let E=m.getBBox();a.edges().forEach(function(i){i!==void 0&&a.edge(i)!==void 0&&(S.debug("Edge "+i.v+" -> "+i.w+": "+JSON.stringify(a.edge(i))),K(r,a.edge(i),a.edge(i).relation))}),E=m.getBBox();const N={id:g||"root",label:g||"root",width:0,height:0};return N.width=E.width+2*b.padding,N.height=E.height+2*b.padding,S.debug("Doc rendered",N,a),N},"renderDoc"),at={setConf:Q,draw:tt},ct={parser:A,get db(){return new M(1)},renderer:at,styles:U,init:y(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{ct as diagram}; +import{U,F as A,j as M}from"./chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.H03soZs8.js";import{q as y,A as t,a9 as v,O as S,aa as O,ag as H,bb as G,bi as P,bf as R,am as C}from"../app.DfYWW83x.js";import{y as F}from"./graph-CQdm8gkL-dflHhQdl.CiPTYTBE.js";import{i as I}from"./layout-FfY8zw-4-CVLJrweZ.CN6bbfRx.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./baseUniq-BxlSXXQG-mwChZi-I.D-TqEwom.js";import"./basePickBy-CC-D1y2F-DXbJFnnh.Br684Qf7.js";var W=y(e=>e.append("circle").attr("class","start-state").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit).attr("cy",t().state.padding+t().state.sizeUnit),"drawStartState"),j=y(e=>e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",t().state.textHeight).attr("class","divider").attr("x2",t().state.textHeight*2).attr("y1",0).attr("y2",0),"drawDivider"),J=y((e,r)=>{const g=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+2*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(r.id),s=g.node().getBBox();return e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",s.width+2*t().state.padding).attr("height",s.height+2*t().state.padding).attr("rx",t().state.radius),g},"drawSimpleState"),q=y((e,r)=>{const g=y(function(o,u,B){const m=o.append("tspan").attr("x",2*t().state.padding).text(u);B||m.attr("dy",t().state.textHeight)},"addTspan"),s=e.append("text").attr("x",2*t().state.padding).attr("y",t().state.textHeight+1.3*t().state.padding).attr("font-size",t().state.fontSize).attr("class","state-title").text(r.descriptions[0]).node().getBBox(),d=s.height,c=e.append("text").attr("x",t().state.padding).attr("y",d+t().state.padding*.4+t().state.dividerMargin+t().state.textHeight).attr("class","state-description");let l=!0,a=!0;r.descriptions.forEach(function(o){l||(g(c,o,a),a=!1),l=!1});const n=e.append("line").attr("x1",t().state.padding).attr("y1",t().state.padding+d+t().state.dividerMargin/2).attr("y2",t().state.padding+d+t().state.dividerMargin/2).attr("class","descr-divider"),x=c.node().getBBox(),h=Math.max(x.width,s.width);return n.attr("x2",h+3*t().state.padding),e.insert("rect",":first-child").attr("x",t().state.padding).attr("y",t().state.padding).attr("width",h+2*t().state.padding).attr("height",x.height+d+2*t().state.padding).attr("rx",t().state.radius),e},"drawDescrState"),X=y((e,r,g)=>{const s=t().state.padding,d=2*t().state.padding,c=e.node().getBBox(),l=c.width,a=c.x,n=e.append("text").attr("x",0).attr("y",t().state.titleShift).attr("font-size",t().state.fontSize).attr("class","state-title").text(r.id),x=n.node().getBBox().width+d;let h=Math.max(x,l);h===l&&(h=h+d);let o;const u=e.node().getBBox();r.doc,o=a-s,x>l&&(o=(l-h)/2+s),Math.abs(a-u.x)l&&(o=a-(x-l)/2);const B=1-t().state.textHeight;return e.insert("rect",":first-child").attr("x",o).attr("y",B).attr("class",g?"alt-composit":"composit").attr("width",h).attr("height",u.height+t().state.textHeight+t().state.titleShift+1).attr("rx","0"),n.attr("x",o+s),x<=l&&n.attr("x",a+(h-d)/2-x/2+s),e.insert("rect",":first-child").attr("x",o).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",h).attr("height",t().state.textHeight*3).attr("rx",t().state.radius),e.insert("rect",":first-child").attr("x",o).attr("y",t().state.titleShift-t().state.textHeight-t().state.padding).attr("width",h).attr("height",u.height+3+2*t().state.textHeight).attr("rx",t().state.radius),e},"addTitleAndBox"),Y=y(e=>(e.append("circle").attr("class","end-state-outer").attr("r",t().state.sizeUnit+t().state.miniPadding).attr("cx",t().state.padding+t().state.sizeUnit+t().state.miniPadding).attr("cy",t().state.padding+t().state.sizeUnit+t().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",t().state.sizeUnit).attr("cx",t().state.padding+t().state.sizeUnit+2).attr("cy",t().state.padding+t().state.sizeUnit+2)),"drawEndState"),$=y((e,r)=>{let g=t().state.forkWidth,s=t().state.forkHeight;if(r.parentId){let d=g;g=s,s=d}return e.append("rect").style("stroke","black").style("fill","black").attr("width",g).attr("height",s).attr("x",t().state.padding).attr("y",t().state.padding)},"drawForkJoinState"),Z=y((e,r,g,s)=>{let d=0;const c=s.append("text");c.style("text-anchor","start"),c.attr("class","noteText");let l=e.replace(/\r\n/g,"
");l=l.replace(/\n/g,"
");const a=l.split(H.lineBreakRegex);let n=1.25*t().state.noteMargin;for(const x of a){const h=x.trim();if(h.length>0){const o=c.append("tspan");if(o.text(h),n===0){const u=o.node().getBBox();n+=u.height}d+=n,o.attr("x",r+t().state.noteMargin),o.attr("y",g+d+1.25*t().state.noteMargin)}}return{textWidth:c.node().getBBox().width,textHeight:d}},"_drawLongText"),_=y((e,r)=>{r.attr("class","state-note");const g=r.append("rect").attr("x",0).attr("y",t().state.padding),s=r.append("g"),{textWidth:d,textHeight:c}=Z(e,0,0,s);return g.attr("height",c+2*t().state.noteMargin),g.attr("width",d+t().state.noteMargin*2),g},"drawNote"),T=y(function(e,r){const g=r.id,s={id:g,label:r.id,width:0,height:0},d=e.append("g").attr("id",g).attr("class","stateGroup");r.type==="start"&&W(d),r.type==="end"&&Y(d),(r.type==="fork"||r.type==="join")&&$(d,r),r.type==="note"&&_(r.note.text,d),r.type==="divider"&&j(d),r.type==="default"&&r.descriptions.length===0&&J(d,r),r.type==="default"&&r.descriptions.length>0&&q(d,r);const c=d.node().getBBox();return s.width=c.width+2*t().state.padding,s.height=c.height+2*t().state.padding,s},"drawState"),L=0,K=y(function(e,r,g){const s=y(function(n){switch(n){case M.relationType.AGGREGATION:return"aggregation";case M.relationType.EXTENSION:return"extension";case M.relationType.COMPOSITION:return"composition";case M.relationType.DEPENDENCY:return"dependency"}},"getRelationType");r.points=r.points.filter(n=>!Number.isNaN(n.y));const d=r.points,c=G().x(function(n){return n.x}).y(function(n){return n.y}).curve(P),l=e.append("path").attr("d",c(d)).attr("id","edge"+L).attr("class","transition");let a="";if(t().state.arrowMarkerAbsolute&&(a=R(!0)),l.attr("marker-end","url("+a+"#"+s(M.relationType.DEPENDENCY)+"End)"),g.title!==void 0){const n=e.append("g").attr("class","stateLabel"),{x,y:h}=C.calcLabelPosition(r.points),o=H.getRows(g.title);let u=0;const B=[];let m=0,E=0;for(let f=0;f<=o.length;f++){const p=n.append("text").attr("text-anchor","middle").text(o[f]).attr("x",x).attr("y",h+u),w=p.node().getBBox();m=Math.max(m,w.width),E=Math.min(E,w.x),S.info(w.x,x,h+u),u===0&&(u=p.node().getBBox().height,S.info("Title height",u,h)),B.push(p)}let N=u*o.length;if(o.length>1){const f=(o.length-1)*u*.5;B.forEach((p,w)=>p.attr("y",h+w*u-f)),N=u*o.length}const i=n.node().getBBox();n.insert("rect",":first-child").attr("class","box").attr("x",x-m/2-t().state.padding/2).attr("y",h-N/2-t().state.padding/2-3.5).attr("width",m+t().state.padding).attr("height",N+t().state.padding),S.info(i)}L++},"drawEdge"),b,z={},Q=y(function(){},"setConf"),V=y(function(e){e.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},"insertMarkers"),tt=y(function(e,r,g,s){b=t().state;const d=t().securityLevel;let c;d==="sandbox"&&(c=v("#i"+r));const l=d==="sandbox"?v(c.nodes()[0].contentDocument.body):v("body"),a=d==="sandbox"?c.nodes()[0].contentDocument:document;S.debug("Rendering diagram "+e);const n=l.select(`[id='${r}']`);V(n);const x=s.db.getRootDoc();D(x,n,void 0,!1,l,a,s);const h=b.padding,o=n.node().getBBox(),u=o.width+h*2,B=o.height+h*2,m=u*1.75;O(n,B,m,b.useMaxWidth),n.attr("viewBox",`${o.x-b.padding} ${o.y-b.padding} `+u+" "+B)},"draw"),et=y(e=>e?e.length*b.fontSizeFactor:1,"getLabelWidth"),D=y((e,r,g,s,d,c,l)=>{const a=new F({compound:!0,multigraph:!0});let n,x=!0;for(n=0;n{const p=f.parentElement;let w=0,k=0;p&&(p.parentElement&&(w=p.parentElement.getBBox().width),k=parseInt(p.getAttribute("data-x-shift"),10),Number.isNaN(k)&&(k=0)),f.setAttribute("x1",0-k+8),f.setAttribute("x2",w-k-8)})):S.debug("No Node "+i+": "+JSON.stringify(a.node(i)))});let E=m.getBBox();a.edges().forEach(function(i){i!==void 0&&a.edge(i)!==void 0&&(S.debug("Edge "+i.v+" -> "+i.w+": "+JSON.stringify(a.edge(i))),K(r,a.edge(i),a.edge(i).relation))}),E=m.getBBox();const N={id:g||"root",label:g||"root",width:0,height:0};return N.width=E.width+2*b.padding,N.height=E.height+2*b.padding,S.debug("Doc rendered",N,a),N},"renderDoc"),at={setConf:Q,draw:tt},ct={parser:A,get db(){return new M(1)},renderer:at,styles:U,init:y(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{ct as diagram}; diff --git a/assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.BhLrX9rT.js b/assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.BhLrX9rT.js new file mode 100644 index 0000000..f784b84 --- /dev/null +++ b/assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.BhLrX9rT.js @@ -0,0 +1 @@ +import{U as e,G as t,F as a,j as s}from"./chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.H03soZs8.js";import{q as o}from"../app.DfYWW83x.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.HEvsBfWT.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.CvQ5IWdi.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var d={parser:a,get db(){return new s(2)},renderer:t,styles:e,init:o(r=>{r.state||(r.state={}),r.state.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{d as diagram}; diff --git a/assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.DluC3sue.js b/assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.DluC3sue.js deleted file mode 100644 index bbeb5b1..0000000 --- a/assets/chunks/stateDiagram-v2-5AN5P6BG-DnT098Gs-BqyhOcwu.DluC3sue.js +++ /dev/null @@ -1 +0,0 @@ -import{U as e,G as t,F as a,j as s}from"./chunk-OW32GOEJ-YaixIGDO-OV7DQY6p.Bposhqfo.js";import{q as o}from"../app.DiEjJ8gz.js";import"./chunk-BFAMUDN2--_mLoQcM-8W1Vf50q.ChW95Yam.js";import"./chunk-SKB7J2MH-Zr_o4qjH-BQsYZan3.tqiOZ_sa.js";import"./vitepress-theme-teek.CUuTa6hm.js";var d={parser:a,get db(){return new s(2)},renderer:t,styles:e,init:o(r=>{r.state||(r.state={}),r.state.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{d as diagram}; diff --git a/assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.HonFmolT.js b/assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.B_87a6ob.js similarity index 99% rename from assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.HonFmolT.js rename to assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.B_87a6ob.js index cf07b5a..f62dd45 100644 --- a/assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.HonFmolT.js +++ b/assets/chunks/timeline-definition-MYPXXCX6-CsN-ivIZ-AR6XtwYS.B_87a6ob.js @@ -1,4 +1,4 @@ -import{q as r,A as mt,O as S,a9 as F,bk as xt,bl as bt,bm as kt,bn as _t,ay as wt,bo as vt,at as St}from"../app.DiEjJ8gz.js";import{d as tt}from"./arc-CegaQWj_-yn6JxQT-.CIwz2Uto.js";import"./vitepress-theme-teek.CUuTa6hm.js";var q=(function(){var n=r(function(g,s,c,d){for(c=c||{},d=g.length;d--;c[g[d]]=s);return c},"o"),t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],a=[1,10],i=[1,11],h=[1,12],l=[1,13],y=[1,16],p=[1,17],f={trace:r(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:r(function(g,s,c,d,u,o,m){var k=o.length-1;switch(u){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:d.getCommonDb().setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),d.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),d.getCommonDb().setAccDescription(this.$);break;case 12:d.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 15:d.addTask(o[k],0,""),this.$=o[k];break;case 16:d.addEvent(o[k].substr(2)),this.$=o[k];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:a,14:i,16:h,17:l,18:14,19:15,20:y,21:p},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:a,14:i,16:h,17:l,18:14,19:15,20:y,21:p},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:r(function(g,s){if(s.recoverable)this.trace(g);else{var c=new Error(g);throw c.hash=s,c}},"parseError"),parse:r(function(g){var s=this,c=[0],d=[],u=[null],o=[],m=this.table,k="",M=0,L=0,R=2,N=1,w=o.slice.call(arguments,1),x=Object.create(this.lexer),$={yy:{}};for(var T in this.yy)Object.prototype.hasOwnProperty.call(this.yy,T)&&($.yy[T]=this.yy[T]);x.setInput(g,$.yy),$.yy.lexer=x,$.yy.parser=this,typeof x.yylloc>"u"&&(x.yylloc={});var P=x.yylloc;o.push(P);var G=x.options&&x.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ft(E){c.length=c.length-2*E,u.length=u.length-E,o.length=o.length-E}r(ft,"popStack");function Z(){var E;return E=d.pop()||x.lex()||N,typeof E!="number"&&(E instanceof Array&&(d=E,E=d.pop()),E=s.symbols_[E]||E),E}r(Z,"lex");for(var v,H,I,U,j={},z,C,K,B;;){if(H=c[c.length-1],this.defaultActions[H]?I=this.defaultActions[H]:((v===null||typeof v>"u")&&(v=Z()),I=m[H]&&m[H][v]),typeof I>"u"||!I.length||!I[0]){var Y="";B=[];for(z in m[H])this.terminals_[z]&&z>R&&B.push("'"+this.terminals_[z]+"'");x.showPosition?Y="Parse error on line "+(M+1)+`: +import{q as r,A as mt,O as S,a9 as F,bk as xt,bl as bt,bm as kt,bn as _t,ay as wt,bo as vt,at as St}from"../app.DfYWW83x.js";import{d as tt}from"./arc-CegaQWj_-yn6JxQT-.C2WQ2TtA.js";import"./vitepress-theme-teek.Dg-9NfO3.js";var q=(function(){var n=r(function(g,s,c,d){for(c=c||{},d=g.length;d--;c[g[d]]=s);return c},"o"),t=[6,8,10,11,12,14,16,17,20,21],e=[1,9],a=[1,10],i=[1,11],h=[1,12],l=[1,13],y=[1,16],p=[1,17],f={trace:r(function(){},"trace"),yy:{},symbols_:{error:2,start:3,timeline:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NEWLINE:10,title:11,acc_title:12,acc_title_value:13,acc_descr:14,acc_descr_value:15,acc_descr_multiline_value:16,section:17,period_statement:18,event_statement:19,period:20,event:21,$accept:0,$end:1},terminals_:{2:"error",4:"timeline",6:"EOF",8:"SPACE",10:"NEWLINE",11:"title",12:"acc_title",13:"acc_title_value",14:"acc_descr",15:"acc_descr_value",16:"acc_descr_multiline_value",17:"section",20:"period",21:"event"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,2],[9,2],[9,1],[9,1],[9,1],[9,1],[18,1],[19,1]],performAction:r(function(g,s,c,d,u,o,m){var k=o.length-1;switch(u){case 1:return o[k-1];case 2:this.$=[];break;case 3:o[k-1].push(o[k]),this.$=o[k-1];break;case 4:case 5:this.$=o[k];break;case 6:case 7:this.$=[];break;case 8:d.getCommonDb().setDiagramTitle(o[k].substr(6)),this.$=o[k].substr(6);break;case 9:this.$=o[k].trim(),d.getCommonDb().setAccTitle(this.$);break;case 10:case 11:this.$=o[k].trim(),d.getCommonDb().setAccDescription(this.$);break;case 12:d.addSection(o[k].substr(8)),this.$=o[k].substr(8);break;case 15:d.addTask(o[k],0,""),this.$=o[k];break;case 16:d.addEvent(o[k].substr(2)),this.$=o[k];break}},"anonymous"),table:[{3:1,4:[1,2]},{1:[3]},n(t,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:e,12:a,14:i,16:h,17:l,18:14,19:15,20:y,21:p},n(t,[2,7],{1:[2,1]}),n(t,[2,3]),{9:18,11:e,12:a,14:i,16:h,17:l,18:14,19:15,20:y,21:p},n(t,[2,5]),n(t,[2,6]),n(t,[2,8]),{13:[1,19]},{15:[1,20]},n(t,[2,11]),n(t,[2,12]),n(t,[2,13]),n(t,[2,14]),n(t,[2,15]),n(t,[2,16]),n(t,[2,4]),n(t,[2,9]),n(t,[2,10])],defaultActions:{},parseError:r(function(g,s){if(s.recoverable)this.trace(g);else{var c=new Error(g);throw c.hash=s,c}},"parseError"),parse:r(function(g){var s=this,c=[0],d=[],u=[null],o=[],m=this.table,k="",M=0,L=0,R=2,N=1,w=o.slice.call(arguments,1),x=Object.create(this.lexer),$={yy:{}};for(var T in this.yy)Object.prototype.hasOwnProperty.call(this.yy,T)&&($.yy[T]=this.yy[T]);x.setInput(g,$.yy),$.yy.lexer=x,$.yy.parser=this,typeof x.yylloc>"u"&&(x.yylloc={});var P=x.yylloc;o.push(P);var G=x.options&&x.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ft(E){c.length=c.length-2*E,u.length=u.length-E,o.length=o.length-E}r(ft,"popStack");function Z(){var E;return E=d.pop()||x.lex()||N,typeof E!="number"&&(E instanceof Array&&(d=E,E=d.pop()),E=s.symbols_[E]||E),E}r(Z,"lex");for(var v,H,I,U,j={},z,C,K,B;;){if(H=c[c.length-1],this.defaultActions[H]?I=this.defaultActions[H]:((v===null||typeof v>"u")&&(v=Z()),I=m[H]&&m[H][v]),typeof I>"u"||!I.length||!I[0]){var Y="";B=[];for(z in m[H])this.terminals_[z]&&z>R&&B.push("'"+this.terminals_[z]+"'");x.showPosition?Y="Parse error on line "+(M+1)+`: `+x.showPosition()+` Expecting `+B.join(", ")+", got '"+(this.terminals_[v]||v)+"'":Y="Parse error on line "+(M+1)+": Unexpected "+(v==N?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(Y,{text:x.match,token:this.terminals_[v]||v,line:x.yylineno,loc:P,expected:B})}if(I[0]instanceof Array&&I.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+v);switch(I[0]){case 1:c.push(v),u.push(x.yytext),o.push(x.yylloc),c.push(I[1]),v=null,L=x.yyleng,k=x.yytext,M=x.yylineno,P=x.yylloc;break;case 2:if(C=this.productions_[I[1]][1],j.$=u[u.length-C],j._$={first_line:o[o.length-(C||1)].first_line,last_line:o[o.length-1].last_line,first_column:o[o.length-(C||1)].first_column,last_column:o[o.length-1].last_column},G&&(j._$.range=[o[o.length-(C||1)].range[0],o[o.length-1].range[1]]),U=this.performAction.apply(j,[k,L,M,$.yy,I[1],u,o].concat(w)),typeof U<"u")return U;C&&(c=c.slice(0,-1*C*2),u=u.slice(0,-1*C),o=o.slice(0,-1*C)),c.push(this.productions_[I[1]][0]),u.push(j.$),o.push(j._$),K=m[c[c.length-2]][c[c.length-1]],c.push(K);break;case 3:return!0}}return!0},"parse")},_=(function(){var g={EOF:1,parseError:r(function(s,c){if(this.yy.parser)this.yy.parser.parseError(s,c);else throw new Error(s)},"parseError"),setInput:r(function(s,c){return this.yy=c||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:r(function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var c=s.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},"input"),unput:r(function(s){var c=s.length,d=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),d.length-1&&(this.yylineno-=d.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:d?(d.length===u.length?this.yylloc.first_column:0)+u[u.length-d.length].length-d[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:r(function(){return this._more=!0,this},"more"),reject:r(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:r(function(s){this.unput(this.match.slice(s))},"less"),pastInput:r(function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:r(function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:r(function(){var s=this.pastInput(),c=new Array(s.length+1).join("-");return s+this.upcomingInput()+` diff --git a/assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js b/assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js similarity index 99% rename from assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js rename to assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js index 9c75b67..c6287f2 100644 --- a/assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.yJoAIi3j.js +++ b/assets/chunks/treemap-75Q7IDZK-CjtfQE8u-DBGEKm3F.DRgNg5dr.js @@ -1,4 +1,4 @@ -import{B as ft}from"./vitepress-theme-teek.CUuTa6hm.js";import{bA as wu,p as Lu,s as ma,N as ga,Z as D,k as te,x as xl,R as Il,X as Sl,C as ya,j as bu,K as Et,bB as Ou,V as _u,U as Pu,l as Mu,T as Du}from"../app.DiEjJ8gz.js";import{w as Cl,f as Uu,K as Fu,_ as C,O as qe,m as z,H as Nl,b as Gu,g as Bu,E as Gt,A as Ot,T as q,S as le,j as Ku,v as Vu,a as ke,R as Fs,k as wl,l as ju,o as Hu}from"./baseUniq-BxlSXXQG-mwChZi-I.DHdWxb1f.js";import{c as N,e as Ne,l as A,U as Gs,g as Wu,f as _t,i as Bs,v as Pt,s as zu}from"./basePickBy-CC-D1y2F-DXbJFnnh.7UqzW2Om.js";import{n as re}from"./clone-78XdctpQ-DP6jZ9da.Csh_n-xw.js";var Yu=Object.prototype,qu=Yu.hasOwnProperty,Ae=wu(function(n,e){if(Ou(e)||xl(e)){_u(e,Ot(e),n);return}for(var t in e)qu.call(e,t)&&Pu(n,t,e[t])});function Ll(n,e,t){var r=-1,i=n.length;e<0&&(e=-e>i?0:i+e),t=t>i?i:t,t<0&&(t+=i),i=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(i);++r=Zu&&(s=Hu,a=!1,e=new Uu(e));e:for(;++i-1:!!i&&Nl(n,e,t)>-1}function Ta(n,e,t){var r=n==null?0:n.length;if(!r)return-1;var i=0;return Nl(n,e,i)}var ld="[object RegExp]";function cd(n){return Il(n)&&Sl(n)==ld}var va=ga&&ga.isRegExp,Xe=va?bu(va):cd,ud="Expected a function";function dd(n){if(typeof n!="function")throw new TypeError(ud);return function(){var e=arguments;switch(e.length){case 0:return!n.call(this);case 1:return!n.call(this,e[0]);case 2:return!n.call(this,e[0],e[1]);case 3:return!n.call(this,e[0],e[1],e[2])}return!n.apply(this,e)}}function Me(n,e){if(n==null)return{};var t=Gu(Bu(n),function(r){return[r]});return e=Gt(e),Wu(n,t,function(r,i){return e(r,i[0])})}function Jr(n,e){var t=te(n)?Ku:Vu;return t(n,dd(Gt(e)))}function fd(n,e){var t;return Fs(n,function(r,i,s){return t=e(r,i,s),!t}),!!t}function bl(n,e,t){var r=te(n)?ju:fd;return r(n,Gt(e))}function Ks(n){return n&&n.length?wl(n):[]}function hd(n,e){return n&&n.length?wl(n,Gt(e)):[]}function ae(n){return typeof n=="object"&&n!==null&&typeof n.$type=="string"}function Ge(n){return typeof n=="object"&&n!==null&&typeof n.$refText=="string"}function pd(n){return typeof n=="object"&&n!==null&&typeof n.name=="string"&&typeof n.type=="string"&&typeof n.path=="string"}function fr(n){return typeof n=="object"&&n!==null&&ae(n.container)&&Ge(n.reference)&&typeof n.message=="string"}class Ol{constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,t){return ae(e)&&this.isSubtype(e.$type,t)}isSubtype(e,t){if(e===t)return!0;let r=this.subtypes[e];r||(r=this.subtypes[e]={});const i=r[t];if(i!==void 0)return i;{const s=this.computeIsSubtype(e,t);return r[t]=s,s}}getAllSubTypes(e){const t=this.allSubtypes[e];if(t)return t;{const r=this.getAllTypes(),i=[];for(const s of r)this.isSubtype(s,e)&&i.push(s);return this.allSubtypes[e]=i,i}}}function On(n){return typeof n=="object"&&n!==null&&Array.isArray(n.content)}function _l(n){return typeof n=="object"&&n!==null&&typeof n.tokenType=="object"}function Pl(n){return On(n)&&typeof n.fullText=="string"}class Z{constructor(e,t){this.startFn=e,this.nextFn=t}iterator(){const e={state:this.startFn(),next:()=>this.nextFn(e.state),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){const e=this.iterator();let t=0,r=e.next();for(;!r.done;)t++,r=e.next();return t}toArray(){const e=[],t=this.iterator();let r;do r=t.next(),r.value!==void 0&&e.push(r.value);while(!r.done);return e}toSet(){return new Set(this)}toMap(e,t){const r=this.map(i=>[e?e(i):i,t?t(i):i]);return new Map(r)}toString(){return this.join()}concat(e){return new Z(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),t=>{let r;if(!t.firstDone){do if(r=this.nextFn(t.first),!r.done)return r;while(!r.done);t.firstDone=!0}do if(r=t.iterator.next(),!r.done)return r;while(!r.done);return Re})}join(e=","){const t=this.iterator();let r="",i,s=!1;do i=t.next(),i.done||(s&&(r+=e),r+=md(i.value)),s=!0;while(!i.done);return r}indexOf(e,t=0){const r=this.iterator();let i=0,s=r.next();for(;!s.done;){if(i>=t&&s.value===e)return i;s=r.next(),i++}return-1}every(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(!e(r.value))return!1;r=t.next()}return!0}some(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(e(r.value))return!0;r=t.next()}return!1}forEach(e){const t=this.iterator();let r=0,i=t.next();for(;!i.done;)e(i.value,r),i=t.next(),r++}map(e){return new Z(this.startFn,t=>{const{done:r,value:i}=this.nextFn(t);return r?Re:{done:!1,value:e(i)}})}filter(e){return new Z(this.startFn,t=>{let r;do if(r=this.nextFn(t),!r.done&&e(r.value))return r;while(!r.done);return Re})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,t){const r=this.iterator();let i=t,s=r.next();for(;!s.done;)i===void 0?i=s.value:i=e(i,s.value),s=r.next();return i}reduceRight(e,t){return this.recursiveReduce(this.iterator(),e,t)}recursiveReduce(e,t,r){const i=e.next();if(i.done)return r;const s=this.recursiveReduce(e,t,r);return s===void 0?i.value:t(s,i.value)}find(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(e(r.value))return r.value;r=t.next()}}findIndex(e){const t=this.iterator();let r=0,i=t.next();for(;!i.done;){if(e(i.value))return r;i=t.next(),r++}return-1}includes(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(r.value===e)return!0;r=t.next()}return!1}flatMap(e){return new Z(()=>({this:this.startFn()}),t=>{do{if(t.iterator){const s=t.iterator.next();if(s.done)t.iterator=void 0;else return s}const{done:r,value:i}=this.nextFn(t.this);if(!r){const s=e(i);if(Sr(s))t.iterator=s[Symbol.iterator]();else return{done:!1,value:s}}}while(t.iterator);return Re})}flat(e){if(e===void 0&&(e=1),e<=0)return this;const t=e>1?this.flat(e-1):this;return new Z(()=>({this:t.startFn()}),r=>{do{if(r.iterator){const a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}const{done:i,value:s}=t.nextFn(r.this);if(!i)if(Sr(s))r.iterator=s[Symbol.iterator]();else return{done:!1,value:s}}while(r.iterator);return Re})}head(){const e=this.iterator().next();if(!e.done)return e.value}tail(e=1){return new Z(()=>{const t=this.startFn();for(let r=0;r({size:0,state:this.startFn()}),t=>(t.size++,t.size>e?Re:this.nextFn(t.state)))}distinct(e){return new Z(()=>({set:new Set,internalState:this.startFn()}),t=>{let r;do if(r=this.nextFn(t.internalState),!r.done){const i=e?e(r.value):r.value;if(!t.set.has(i))return t.set.add(i),r}while(!r.done);return Re})}exclude(e,t){const r=new Set;for(const i of e){const s=t?t(i):i;r.add(s)}return this.filter(i=>{const s=t?t(i):i;return!r.has(s)})}}function md(n){return typeof n=="string"?n:typeof n>"u"?"undefined":typeof n.toString=="function"?n.toString():Object.prototype.toString.call(n)}function Sr(n){return!!n&&typeof n[Symbol.iterator]=="function"}const gd=new Z(()=>{},()=>Re),Re=Object.freeze({done:!0,value:void 0});function ee(...n){if(n.length===1){const e=n[0];if(e instanceof Z)return e;if(Sr(e))return new Z(()=>e[Symbol.iterator](),t=>t.next());if(typeof e.length=="number")return new Z(()=>({index:0}),t=>t.index1?new Z(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){const t=e.iterator.next();if(!t.done)return t;e.iterator=void 0}if(e.array){if(e.arrIndex({iterators:r?.includeRoot?[[e][Symbol.iterator]()]:[t(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){const s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(t(s.value)[Symbol.iterator]()),s}return Re})}iterator(){const e={state:this.startFn(),next:()=>this.nextFn(e.state),prune:()=>{e.state.pruned=!0},[Symbol.iterator]:()=>e};return e}}var rs;(function(n){function e(s){return s.reduce((a,o)=>a+o,0)}n.sum=e;function t(s){return s.reduce((a,o)=>a*o,0)}n.product=t;function r(s){return s.reduce((a,o)=>Math.min(a,o))}n.min=r;function i(s){return s.reduce((a,o)=>Math.max(a,o))}n.max=i})(rs||(rs={}));function is(n){return new Vs(n,e=>On(e)?e.content:[],{includeRoot:!0})}function yd(n,e){for(;n.container;)if(n=n.container,n===e)return!0;return!1}function ss(n){return{start:{character:n.startColumn-1,line:n.startLine-1},end:{character:n.endColumn,line:n.endLine-1}}}function Cr(n){if(!n)return;const{offset:e,end:t,range:r}=n;return{range:r,offset:e,end:t,length:t-e}}var We;(function(n){n[n.Before=0]="Before",n[n.After=1]="After",n[n.OverlapFront=2]="OverlapFront",n[n.OverlapBack=3]="OverlapBack",n[n.Inside=4]="Inside",n[n.Outside=5]="Outside"})(We||(We={}));function Td(n,e){if(n.end.linee.end.line||n.start.line===e.end.line&&n.start.character>=e.end.character)return We.After;const t=n.start.line>e.start.line||n.start.line===e.start.line&&n.start.character>=e.start.character,r=n.end.lineWe.After}const Rd=/^[\w\p{L}]$/u;function $d(n,e){if(n){const t=Ed(n,!0);if(t&&Ra(t,e))return t;if(Pl(n)){const r=n.content.findIndex(i=>!i.hidden);for(let i=r-1;i>=0;i--){const s=n.content[i];if(Ra(s,e))return s}}}}function Ra(n,e){return _l(n)&&e.includes(n.tokenType.name)}function Ed(n,e=!0){for(;n.container;){const t=n.container;let r=t.content.indexOf(n);for(;r>0;){r--;const i=t.content[r];if(e||!i.hidden)return i}n=t}}class Ml extends Error{constructor(e,t){super(e?`${t} at ${e.range.start.line}:${e.range.start.character}`:t)}}function Dn(n){throw new Error("Error! The input value was not handled.")}const jn="AbstractRule",Hn="AbstractType",hi="Condition",$a="TypeDefinition",pi="ValueLiteral",Yt="AbstractElement";function Ad(n){return M.isInstance(n,Yt)}const Wn="ArrayLiteral",zn="ArrayType",qt="BooleanLiteral";function kd(n){return M.isInstance(n,qt)}const Xt="Conjunction";function xd(n){return M.isInstance(n,Xt)}const Jt="Disjunction";function Id(n){return M.isInstance(n,Jt)}const Yn="Grammar",mi="GrammarImport",Qt="InferredType";function Dl(n){return M.isInstance(n,Qt)}const Zt="Interface";function Ul(n){return M.isInstance(n,Zt)}const gi="NamedArgument",en="Negation";function Sd(n){return M.isInstance(n,en)}const qn="NumberLiteral",Xn="Parameter",tn="ParameterReference";function Cd(n){return M.isInstance(n,tn)}const nn="ParserRule";function we(n){return M.isInstance(n,nn)}const Jn="ReferenceType",hr="ReturnType";function Nd(n){return M.isInstance(n,hr)}const rn="SimpleType";function wd(n){return M.isInstance(n,rn)}const Qn="StringLiteral",Nt="TerminalRule";function At(n){return M.isInstance(n,Nt)}const sn="Type";function Fl(n){return M.isInstance(n,sn)}const yi="TypeAttribute",Zn="UnionType",an="Action";function Qr(n){return M.isInstance(n,an)}const on="Alternatives";function Gl(n){return M.isInstance(n,on)}const ln="Assignment";function gt(n){return M.isInstance(n,ln)}const cn="CharacterRange";function Ld(n){return M.isInstance(n,cn)}const un="CrossReference";function js(n){return M.isInstance(n,un)}const dn="EndOfFile";function bd(n){return M.isInstance(n,dn)}const fn="Group";function Hs(n){return M.isInstance(n,fn)}const hn="Keyword";function yt(n){return M.isInstance(n,hn)}const pn="NegatedToken";function Od(n){return M.isInstance(n,pn)}const mn="RegexToken";function _d(n){return M.isInstance(n,mn)}const gn="RuleCall";function Tt(n){return M.isInstance(n,gn)}const yn="TerminalAlternatives";function Pd(n){return M.isInstance(n,yn)}const Tn="TerminalGroup";function Md(n){return M.isInstance(n,Tn)}const vn="TerminalRuleCall";function Dd(n){return M.isInstance(n,vn)}const Rn="UnorderedGroup";function Bl(n){return M.isInstance(n,Rn)}const $n="UntilToken";function Ud(n){return M.isInstance(n,$n)}const En="Wildcard";function Fd(n){return M.isInstance(n,En)}class Kl extends Ol{getAllTypes(){return[Yt,jn,Hn,an,on,Wn,zn,ln,qt,cn,hi,Xt,un,Jt,dn,Yn,mi,fn,Qt,Zt,hn,gi,pn,en,qn,Xn,tn,nn,Jn,mn,hr,gn,rn,Qn,yn,Tn,Nt,vn,sn,yi,$a,Zn,Rn,$n,pi,En]}computeIsSubtype(e,t){switch(e){case an:case on:case ln:case cn:case un:case dn:case fn:case hn:case pn:case mn:case gn:case yn:case Tn:case vn:case Rn:case $n:case En:return this.isSubtype(Yt,t);case Wn:case qn:case Qn:return this.isSubtype(pi,t);case zn:case Jn:case rn:case Zn:return this.isSubtype($a,t);case qt:return this.isSubtype(hi,t)||this.isSubtype(pi,t);case Xt:case Jt:case en:case tn:return this.isSubtype(hi,t);case Qt:case Zt:case sn:return this.isSubtype(Hn,t);case nn:return this.isSubtype(jn,t)||this.isSubtype(Hn,t);case Nt:return this.isSubtype(jn,t);default:return!1}}getReferenceType(e){const t=`${e.container.$type}:${e.property}`;switch(t){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Hn;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return jn;case"Grammar:usedGrammars":return Yn;case"NamedArgument:parameter":case"ParameterReference:parameter":return Xn;case"TerminalRuleCall:rule":return Nt;default:throw new Error(`${t} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Yt:return{name:Yt,properties:[{name:"cardinality"},{name:"lookahead"}]};case Wn:return{name:Wn,properties:[{name:"elements",defaultValue:[]}]};case zn:return{name:zn,properties:[{name:"elementType"}]};case qt:return{name:qt,properties:[{name:"true",defaultValue:!1}]};case Xt:return{name:Xt,properties:[{name:"left"},{name:"right"}]};case Jt:return{name:Jt,properties:[{name:"left"},{name:"right"}]};case Yn:return{name:Yn,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case mi:return{name:mi,properties:[{name:"path"}]};case Qt:return{name:Qt,properties:[{name:"name"}]};case Zt:return{name:Zt,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case gi:return{name:gi,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case en:return{name:en,properties:[{name:"value"}]};case qn:return{name:qn,properties:[{name:"value"}]};case Xn:return{name:Xn,properties:[{name:"name"}]};case tn:return{name:tn,properties:[{name:"parameter"}]};case nn:return{name:nn,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case Jn:return{name:Jn,properties:[{name:"referenceType"}]};case hr:return{name:hr,properties:[{name:"name"}]};case rn:return{name:rn,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case Qn:return{name:Qn,properties:[{name:"value"}]};case Nt:return{name:Nt,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case sn:return{name:sn,properties:[{name:"name"},{name:"type"}]};case yi:return{name:yi,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case Zn:return{name:Zn,properties:[{name:"types",defaultValue:[]}]};case an:return{name:an,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case on:return{name:on,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case ln:return{name:ln,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case cn:return{name:cn,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case un:return{name:un,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case dn:return{name:dn,properties:[{name:"cardinality"},{name:"lookahead"}]};case fn:return{name:fn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case hn:return{name:hn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case pn:return{name:pn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case mn:return{name:mn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case gn:return{name:gn,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case yn:return{name:yn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Tn:return{name:Tn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case vn:return{name:vn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case Rn:return{name:Rn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case $n:return{name:$n,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case En:return{name:En,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}}const M=new Kl;function Gd(n){for(const[e,t]of Object.entries(n))e.startsWith("$")||(Array.isArray(t)?t.forEach((r,i)=>{ae(r)&&(r.$container=n,r.$containerProperty=e,r.$containerIndex=i)}):ae(t)&&(t.$container=n,t.$containerProperty=e))}function Zr(n,e){let t=n;for(;t;){if(e(t))return t;t=t.$container}}function Ze(n){const e=as(n).$document;if(!e)throw new Error("AST node has no document.");return e}function as(n){for(;n.$container;)n=n.$container;return n}function Ws(n,e){if(!n)throw new Error("Node must be an AstNode.");const t=e?.range;return new Z(()=>({keys:Object.keys(n),keyIndex:0,arrayIndex:0}),r=>{for(;r.keyIndexWs(t,e))}function Lt(n,e){if(!n)throw new Error("Root node must be an AstNode.");return new Vs(n,t=>Ws(t,e),{includeRoot:!0})}function Ea(n,e){var t;if(!e)return!0;const r=(t=n.$cstNode)===null||t===void 0?void 0:t.range;return r?vd(r,e):!1}function Vl(n){return new Z(()=>({keys:Object.keys(n),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndexi?0:i+e),t=t>i?i:t,t<0&&(t+=i),i=e>t?0:t-e>>>0,e>>>=0;for(var s=Array(i);++r=Zu&&(s=Hu,a=!1,e=new Uu(e));e:for(;++i-1:!!i&&Nl(n,e,t)>-1}function Ta(n,e,t){var r=n==null?0:n.length;if(!r)return-1;var i=0;return Nl(n,e,i)}var ld="[object RegExp]";function cd(n){return Il(n)&&Sl(n)==ld}var va=ga&&ga.isRegExp,Xe=va?bu(va):cd,ud="Expected a function";function dd(n){if(typeof n!="function")throw new TypeError(ud);return function(){var e=arguments;switch(e.length){case 0:return!n.call(this);case 1:return!n.call(this,e[0]);case 2:return!n.call(this,e[0],e[1]);case 3:return!n.call(this,e[0],e[1],e[2])}return!n.apply(this,e)}}function Me(n,e){if(n==null)return{};var t=Gu(Bu(n),function(r){return[r]});return e=Gt(e),Wu(n,t,function(r,i){return e(r,i[0])})}function Jr(n,e){var t=te(n)?Ku:Vu;return t(n,dd(Gt(e)))}function fd(n,e){var t;return Fs(n,function(r,i,s){return t=e(r,i,s),!t}),!!t}function bl(n,e,t){var r=te(n)?ju:fd;return r(n,Gt(e))}function Ks(n){return n&&n.length?wl(n):[]}function hd(n,e){return n&&n.length?wl(n,Gt(e)):[]}function ae(n){return typeof n=="object"&&n!==null&&typeof n.$type=="string"}function Ge(n){return typeof n=="object"&&n!==null&&typeof n.$refText=="string"}function pd(n){return typeof n=="object"&&n!==null&&typeof n.name=="string"&&typeof n.type=="string"&&typeof n.path=="string"}function fr(n){return typeof n=="object"&&n!==null&&ae(n.container)&&Ge(n.reference)&&typeof n.message=="string"}class Ol{constructor(){this.subtypes={},this.allSubtypes={}}isInstance(e,t){return ae(e)&&this.isSubtype(e.$type,t)}isSubtype(e,t){if(e===t)return!0;let r=this.subtypes[e];r||(r=this.subtypes[e]={});const i=r[t];if(i!==void 0)return i;{const s=this.computeIsSubtype(e,t);return r[t]=s,s}}getAllSubTypes(e){const t=this.allSubtypes[e];if(t)return t;{const r=this.getAllTypes(),i=[];for(const s of r)this.isSubtype(s,e)&&i.push(s);return this.allSubtypes[e]=i,i}}}function On(n){return typeof n=="object"&&n!==null&&Array.isArray(n.content)}function _l(n){return typeof n=="object"&&n!==null&&typeof n.tokenType=="object"}function Pl(n){return On(n)&&typeof n.fullText=="string"}class Z{constructor(e,t){this.startFn=e,this.nextFn=t}iterator(){const e={state:this.startFn(),next:()=>this.nextFn(e.state),[Symbol.iterator]:()=>e};return e}[Symbol.iterator](){return this.iterator()}isEmpty(){return!!this.iterator().next().done}count(){const e=this.iterator();let t=0,r=e.next();for(;!r.done;)t++,r=e.next();return t}toArray(){const e=[],t=this.iterator();let r;do r=t.next(),r.value!==void 0&&e.push(r.value);while(!r.done);return e}toSet(){return new Set(this)}toMap(e,t){const r=this.map(i=>[e?e(i):i,t?t(i):i]);return new Map(r)}toString(){return this.join()}concat(e){return new Z(()=>({first:this.startFn(),firstDone:!1,iterator:e[Symbol.iterator]()}),t=>{let r;if(!t.firstDone){do if(r=this.nextFn(t.first),!r.done)return r;while(!r.done);t.firstDone=!0}do if(r=t.iterator.next(),!r.done)return r;while(!r.done);return Re})}join(e=","){const t=this.iterator();let r="",i,s=!1;do i=t.next(),i.done||(s&&(r+=e),r+=md(i.value)),s=!0;while(!i.done);return r}indexOf(e,t=0){const r=this.iterator();let i=0,s=r.next();for(;!s.done;){if(i>=t&&s.value===e)return i;s=r.next(),i++}return-1}every(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(!e(r.value))return!1;r=t.next()}return!0}some(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(e(r.value))return!0;r=t.next()}return!1}forEach(e){const t=this.iterator();let r=0,i=t.next();for(;!i.done;)e(i.value,r),i=t.next(),r++}map(e){return new Z(this.startFn,t=>{const{done:r,value:i}=this.nextFn(t);return r?Re:{done:!1,value:e(i)}})}filter(e){return new Z(this.startFn,t=>{let r;do if(r=this.nextFn(t),!r.done&&e(r.value))return r;while(!r.done);return Re})}nonNullable(){return this.filter(e=>e!=null)}reduce(e,t){const r=this.iterator();let i=t,s=r.next();for(;!s.done;)i===void 0?i=s.value:i=e(i,s.value),s=r.next();return i}reduceRight(e,t){return this.recursiveReduce(this.iterator(),e,t)}recursiveReduce(e,t,r){const i=e.next();if(i.done)return r;const s=this.recursiveReduce(e,t,r);return s===void 0?i.value:t(s,i.value)}find(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(e(r.value))return r.value;r=t.next()}}findIndex(e){const t=this.iterator();let r=0,i=t.next();for(;!i.done;){if(e(i.value))return r;i=t.next(),r++}return-1}includes(e){const t=this.iterator();let r=t.next();for(;!r.done;){if(r.value===e)return!0;r=t.next()}return!1}flatMap(e){return new Z(()=>({this:this.startFn()}),t=>{do{if(t.iterator){const s=t.iterator.next();if(s.done)t.iterator=void 0;else return s}const{done:r,value:i}=this.nextFn(t.this);if(!r){const s=e(i);if(Sr(s))t.iterator=s[Symbol.iterator]();else return{done:!1,value:s}}}while(t.iterator);return Re})}flat(e){if(e===void 0&&(e=1),e<=0)return this;const t=e>1?this.flat(e-1):this;return new Z(()=>({this:t.startFn()}),r=>{do{if(r.iterator){const a=r.iterator.next();if(a.done)r.iterator=void 0;else return a}const{done:i,value:s}=t.nextFn(r.this);if(!i)if(Sr(s))r.iterator=s[Symbol.iterator]();else return{done:!1,value:s}}while(r.iterator);return Re})}head(){const e=this.iterator().next();if(!e.done)return e.value}tail(e=1){return new Z(()=>{const t=this.startFn();for(let r=0;r({size:0,state:this.startFn()}),t=>(t.size++,t.size>e?Re:this.nextFn(t.state)))}distinct(e){return new Z(()=>({set:new Set,internalState:this.startFn()}),t=>{let r;do if(r=this.nextFn(t.internalState),!r.done){const i=e?e(r.value):r.value;if(!t.set.has(i))return t.set.add(i),r}while(!r.done);return Re})}exclude(e,t){const r=new Set;for(const i of e){const s=t?t(i):i;r.add(s)}return this.filter(i=>{const s=t?t(i):i;return!r.has(s)})}}function md(n){return typeof n=="string"?n:typeof n>"u"?"undefined":typeof n.toString=="function"?n.toString():Object.prototype.toString.call(n)}function Sr(n){return!!n&&typeof n[Symbol.iterator]=="function"}const gd=new Z(()=>{},()=>Re),Re=Object.freeze({done:!0,value:void 0});function ee(...n){if(n.length===1){const e=n[0];if(e instanceof Z)return e;if(Sr(e))return new Z(()=>e[Symbol.iterator](),t=>t.next());if(typeof e.length=="number")return new Z(()=>({index:0}),t=>t.index1?new Z(()=>({collIndex:0,arrIndex:0}),e=>{do{if(e.iterator){const t=e.iterator.next();if(!t.done)return t;e.iterator=void 0}if(e.array){if(e.arrIndex({iterators:r?.includeRoot?[[e][Symbol.iterator]()]:[t(e)[Symbol.iterator]()],pruned:!1}),i=>{for(i.pruned&&(i.iterators.pop(),i.pruned=!1);i.iterators.length>0;){const s=i.iterators[i.iterators.length-1].next();if(s.done)i.iterators.pop();else return i.iterators.push(t(s.value)[Symbol.iterator]()),s}return Re})}iterator(){const e={state:this.startFn(),next:()=>this.nextFn(e.state),prune:()=>{e.state.pruned=!0},[Symbol.iterator]:()=>e};return e}}var rs;(function(n){function e(s){return s.reduce((a,o)=>a+o,0)}n.sum=e;function t(s){return s.reduce((a,o)=>a*o,0)}n.product=t;function r(s){return s.reduce((a,o)=>Math.min(a,o))}n.min=r;function i(s){return s.reduce((a,o)=>Math.max(a,o))}n.max=i})(rs||(rs={}));function is(n){return new Vs(n,e=>On(e)?e.content:[],{includeRoot:!0})}function yd(n,e){for(;n.container;)if(n=n.container,n===e)return!0;return!1}function ss(n){return{start:{character:n.startColumn-1,line:n.startLine-1},end:{character:n.endColumn,line:n.endLine-1}}}function Cr(n){if(!n)return;const{offset:e,end:t,range:r}=n;return{range:r,offset:e,end:t,length:t-e}}var We;(function(n){n[n.Before=0]="Before",n[n.After=1]="After",n[n.OverlapFront=2]="OverlapFront",n[n.OverlapBack=3]="OverlapBack",n[n.Inside=4]="Inside",n[n.Outside=5]="Outside"})(We||(We={}));function Td(n,e){if(n.end.linee.end.line||n.start.line===e.end.line&&n.start.character>=e.end.character)return We.After;const t=n.start.line>e.start.line||n.start.line===e.start.line&&n.start.character>=e.start.character,r=n.end.lineWe.After}const Rd=/^[\w\p{L}]$/u;function $d(n,e){if(n){const t=Ed(n,!0);if(t&&Ra(t,e))return t;if(Pl(n)){const r=n.content.findIndex(i=>!i.hidden);for(let i=r-1;i>=0;i--){const s=n.content[i];if(Ra(s,e))return s}}}}function Ra(n,e){return _l(n)&&e.includes(n.tokenType.name)}function Ed(n,e=!0){for(;n.container;){const t=n.container;let r=t.content.indexOf(n);for(;r>0;){r--;const i=t.content[r];if(e||!i.hidden)return i}n=t}}class Ml extends Error{constructor(e,t){super(e?`${t} at ${e.range.start.line}:${e.range.start.character}`:t)}}function Dn(n){throw new Error("Error! The input value was not handled.")}const jn="AbstractRule",Hn="AbstractType",hi="Condition",$a="TypeDefinition",pi="ValueLiteral",Yt="AbstractElement";function Ad(n){return M.isInstance(n,Yt)}const Wn="ArrayLiteral",zn="ArrayType",qt="BooleanLiteral";function kd(n){return M.isInstance(n,qt)}const Xt="Conjunction";function xd(n){return M.isInstance(n,Xt)}const Jt="Disjunction";function Id(n){return M.isInstance(n,Jt)}const Yn="Grammar",mi="GrammarImport",Qt="InferredType";function Dl(n){return M.isInstance(n,Qt)}const Zt="Interface";function Ul(n){return M.isInstance(n,Zt)}const gi="NamedArgument",en="Negation";function Sd(n){return M.isInstance(n,en)}const qn="NumberLiteral",Xn="Parameter",tn="ParameterReference";function Cd(n){return M.isInstance(n,tn)}const nn="ParserRule";function we(n){return M.isInstance(n,nn)}const Jn="ReferenceType",hr="ReturnType";function Nd(n){return M.isInstance(n,hr)}const rn="SimpleType";function wd(n){return M.isInstance(n,rn)}const Qn="StringLiteral",Nt="TerminalRule";function At(n){return M.isInstance(n,Nt)}const sn="Type";function Fl(n){return M.isInstance(n,sn)}const yi="TypeAttribute",Zn="UnionType",an="Action";function Qr(n){return M.isInstance(n,an)}const on="Alternatives";function Gl(n){return M.isInstance(n,on)}const ln="Assignment";function gt(n){return M.isInstance(n,ln)}const cn="CharacterRange";function Ld(n){return M.isInstance(n,cn)}const un="CrossReference";function js(n){return M.isInstance(n,un)}const dn="EndOfFile";function bd(n){return M.isInstance(n,dn)}const fn="Group";function Hs(n){return M.isInstance(n,fn)}const hn="Keyword";function yt(n){return M.isInstance(n,hn)}const pn="NegatedToken";function Od(n){return M.isInstance(n,pn)}const mn="RegexToken";function _d(n){return M.isInstance(n,mn)}const gn="RuleCall";function Tt(n){return M.isInstance(n,gn)}const yn="TerminalAlternatives";function Pd(n){return M.isInstance(n,yn)}const Tn="TerminalGroup";function Md(n){return M.isInstance(n,Tn)}const vn="TerminalRuleCall";function Dd(n){return M.isInstance(n,vn)}const Rn="UnorderedGroup";function Bl(n){return M.isInstance(n,Rn)}const $n="UntilToken";function Ud(n){return M.isInstance(n,$n)}const En="Wildcard";function Fd(n){return M.isInstance(n,En)}class Kl extends Ol{getAllTypes(){return[Yt,jn,Hn,an,on,Wn,zn,ln,qt,cn,hi,Xt,un,Jt,dn,Yn,mi,fn,Qt,Zt,hn,gi,pn,en,qn,Xn,tn,nn,Jn,mn,hr,gn,rn,Qn,yn,Tn,Nt,vn,sn,yi,$a,Zn,Rn,$n,pi,En]}computeIsSubtype(e,t){switch(e){case an:case on:case ln:case cn:case un:case dn:case fn:case hn:case pn:case mn:case gn:case yn:case Tn:case vn:case Rn:case $n:case En:return this.isSubtype(Yt,t);case Wn:case qn:case Qn:return this.isSubtype(pi,t);case zn:case Jn:case rn:case Zn:return this.isSubtype($a,t);case qt:return this.isSubtype(hi,t)||this.isSubtype(pi,t);case Xt:case Jt:case en:case tn:return this.isSubtype(hi,t);case Qt:case Zt:case sn:return this.isSubtype(Hn,t);case nn:return this.isSubtype(jn,t)||this.isSubtype(Hn,t);case Nt:return this.isSubtype(jn,t);default:return!1}}getReferenceType(e){const t=`${e.container.$type}:${e.property}`;switch(t){case"Action:type":case"CrossReference:type":case"Interface:superTypes":case"ParserRule:returnType":case"SimpleType:typeRef":return Hn;case"Grammar:hiddenTokens":case"ParserRule:hiddenTokens":case"RuleCall:rule":return jn;case"Grammar:usedGrammars":return Yn;case"NamedArgument:parameter":case"ParameterReference:parameter":return Xn;case"TerminalRuleCall:rule":return Nt;default:throw new Error(`${t} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Yt:return{name:Yt,properties:[{name:"cardinality"},{name:"lookahead"}]};case Wn:return{name:Wn,properties:[{name:"elements",defaultValue:[]}]};case zn:return{name:zn,properties:[{name:"elementType"}]};case qt:return{name:qt,properties:[{name:"true",defaultValue:!1}]};case Xt:return{name:Xt,properties:[{name:"left"},{name:"right"}]};case Jt:return{name:Jt,properties:[{name:"left"},{name:"right"}]};case Yn:return{name:Yn,properties:[{name:"definesHiddenTokens",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"imports",defaultValue:[]},{name:"interfaces",defaultValue:[]},{name:"isDeclared",defaultValue:!1},{name:"name"},{name:"rules",defaultValue:[]},{name:"types",defaultValue:[]},{name:"usedGrammars",defaultValue:[]}]};case mi:return{name:mi,properties:[{name:"path"}]};case Qt:return{name:Qt,properties:[{name:"name"}]};case Zt:return{name:Zt,properties:[{name:"attributes",defaultValue:[]},{name:"name"},{name:"superTypes",defaultValue:[]}]};case gi:return{name:gi,properties:[{name:"calledByName",defaultValue:!1},{name:"parameter"},{name:"value"}]};case en:return{name:en,properties:[{name:"value"}]};case qn:return{name:qn,properties:[{name:"value"}]};case Xn:return{name:Xn,properties:[{name:"name"}]};case tn:return{name:tn,properties:[{name:"parameter"}]};case nn:return{name:nn,properties:[{name:"dataType"},{name:"definesHiddenTokens",defaultValue:!1},{name:"definition"},{name:"entry",defaultValue:!1},{name:"fragment",defaultValue:!1},{name:"hiddenTokens",defaultValue:[]},{name:"inferredType"},{name:"name"},{name:"parameters",defaultValue:[]},{name:"returnType"},{name:"wildcard",defaultValue:!1}]};case Jn:return{name:Jn,properties:[{name:"referenceType"}]};case hr:return{name:hr,properties:[{name:"name"}]};case rn:return{name:rn,properties:[{name:"primitiveType"},{name:"stringType"},{name:"typeRef"}]};case Qn:return{name:Qn,properties:[{name:"value"}]};case Nt:return{name:Nt,properties:[{name:"definition"},{name:"fragment",defaultValue:!1},{name:"hidden",defaultValue:!1},{name:"name"},{name:"type"}]};case sn:return{name:sn,properties:[{name:"name"},{name:"type"}]};case yi:return{name:yi,properties:[{name:"defaultValue"},{name:"isOptional",defaultValue:!1},{name:"name"},{name:"type"}]};case Zn:return{name:Zn,properties:[{name:"types",defaultValue:[]}]};case an:return{name:an,properties:[{name:"cardinality"},{name:"feature"},{name:"inferredType"},{name:"lookahead"},{name:"operator"},{name:"type"}]};case on:return{name:on,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case ln:return{name:ln,properties:[{name:"cardinality"},{name:"feature"},{name:"lookahead"},{name:"operator"},{name:"terminal"}]};case cn:return{name:cn,properties:[{name:"cardinality"},{name:"left"},{name:"lookahead"},{name:"right"}]};case un:return{name:un,properties:[{name:"cardinality"},{name:"deprecatedSyntax",defaultValue:!1},{name:"lookahead"},{name:"terminal"},{name:"type"}]};case dn:return{name:dn,properties:[{name:"cardinality"},{name:"lookahead"}]};case fn:return{name:fn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"guardCondition"},{name:"lookahead"}]};case hn:return{name:hn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"value"}]};case pn:return{name:pn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case mn:return{name:mn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"regex"}]};case gn:return{name:gn,properties:[{name:"arguments",defaultValue:[]},{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case yn:return{name:yn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case Tn:return{name:Tn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case vn:return{name:vn,properties:[{name:"cardinality"},{name:"lookahead"},{name:"rule"}]};case Rn:return{name:Rn,properties:[{name:"cardinality"},{name:"elements",defaultValue:[]},{name:"lookahead"}]};case $n:return{name:$n,properties:[{name:"cardinality"},{name:"lookahead"},{name:"terminal"}]};case En:return{name:En,properties:[{name:"cardinality"},{name:"lookahead"}]};default:return{name:e,properties:[]}}}}const M=new Kl;function Gd(n){for(const[e,t]of Object.entries(n))e.startsWith("$")||(Array.isArray(t)?t.forEach((r,i)=>{ae(r)&&(r.$container=n,r.$containerProperty=e,r.$containerIndex=i)}):ae(t)&&(t.$container=n,t.$containerProperty=e))}function Zr(n,e){let t=n;for(;t;){if(e(t))return t;t=t.$container}}function Ze(n){const e=as(n).$document;if(!e)throw new Error("AST node has no document.");return e}function as(n){for(;n.$container;)n=n.$container;return n}function Ws(n,e){if(!n)throw new Error("Node must be an AstNode.");const t=e?.range;return new Z(()=>({keys:Object.keys(n),keyIndex:0,arrayIndex:0}),r=>{for(;r.keyIndexWs(t,e))}function Lt(n,e){if(!n)throw new Error("Root node must be an AstNode.");return new Vs(n,t=>Ws(t,e),{includeRoot:!0})}function Ea(n,e){var t;if(!e)return!0;const r=(t=n.$cstNode)===null||t===void 0?void 0:t.range;return r?vd(r,e):!1}function Vl(n){return new Z(()=>({keys:Object.keys(n),keyIndex:0,arrayIndex:0}),e=>{for(;e.keyIndexn in t}const Le={},fo=[],Ht=()=>{},ao=()=>!1,Ys=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ic=e=>e.startsWith("onUpdate:"),Ie=Object.assign,rc=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},_2=Object.prototype.hasOwnProperty,Oe=(e,t)=>_2.call(e,t),ce=Array.isArray,ho=e=>Io(e)==="[object Map]",Gs=e=>Io(e)==="[object Set]",Ru=e=>Io(e)==="[object Date]",S2=e=>Io(e)==="[object RegExp]",ye=e=>typeof e=="function",_e=e=>typeof e=="string",Gt=e=>typeof e=="symbol",Ue=e=>e!==null&&typeof e=="object",ac=e=>(Ue(e)||ye(e))&&ye(e.then)&&ye(e.catch),e1=Object.prototype.toString,Io=e=>e1.call(e),T2=e=>Io(e).slice(8,-1),Xr=e=>Io(e)==="[object Object]",lc=e=>_e(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ws=ln(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),E2=ln("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Qr=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},x2=/-\w/g,tt=Qr(e=>e.replace(x2,t=>t.slice(1).toUpperCase())),A2=/\B([A-Z])/g,Kt=Qr(e=>e.replace(A2,"-$1").toLowerCase()),Js=Qr(e=>e.charAt(0).toUpperCase()+e.slice(1)),po=Qr(e=>e?`on${Js(e)}`:""),Ot=(e,t)=>!Object.is(e,t),mo=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Zr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},br=e=>{const t=_e(e)?Number(e):NaN;return isNaN(t)?e:t};let Hu;const ea=()=>Hu||(Hu=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),$2="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol",L2=ln($2);function Fe(e){if(ce(e)){const t={};for(let n=0;n{if(n){const s=n.split(P2);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function T(e){let t="";if(_e(e))t=e;else if(ce(e))for(let n=0;nEs(n,t))}const o1=e=>!!(e&&e.__v_isRef===!0),W=e=>_e(e)?e:e==null?"":ce(e)||Ue(e)&&(e.toString===e1||!ye(e.toString))?o1(e)?W(e.value):JSON.stringify(e,i1,2):String(e),i1=(e,t)=>o1(t)?i1(e,t.value):ho(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],i)=>(n[Pa(s,i)+" =>"]=o,n),{})}:Gs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Pa(n))}:Gt(t)?Pa(t):Ue(t)&&!ce(t)&&!Xr(t)?String(t):t,Pa=(e,t="")=>{var n;return Gt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function W2(e){return e==null?"initial":typeof e=="string"?e===""?" ":e:String(e)}let $t;class cc{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=$t,!t&&$t&&(this.index=($t.scopes||($t.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&($t=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Yo){let t=Yo;for(Yo=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ko;){let t=Ko;for(Ko=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function c1(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function u1(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),hc(s),q2(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function ol(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(f1(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function f1(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===oi)||(e.globalVersion=oi,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ol(e))))return;e.flags|=2;const t=e.dep,n=Qe,s=xn;Qe=e,xn=!0;try{c1(e);const o=e.fn(e._value);(t.version===0||Ot(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{Qe=n,xn=s,u1(e),e.flags&=-3}}function hc(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)hc(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function q2(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}function K2(e,t){e.effect instanceof si&&(e=e.effect.fn);const n=new si(e);t&&Ie(n,t);try{n.run()}catch(o){throw n.stop(),o}const s=n.run.bind(n);return s.effect=n,s}function Y2(e){e.effect.stop()}let xn=!0;const d1=[];function ts(){d1.push(xn),xn=!1}function ns(){const e=d1.pop();xn=e===void 0?!0:e}function zu(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Qe;Qe=void 0;try{t()}finally{Qe=n}}}let oi=0;class G2{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class na{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Qe||!xn||Qe===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Qe)n=this.activeLink=new G2(Qe,this),Qe.deps?(n.prevDep=Qe.depsTail,Qe.depsTail.nextDep=n,Qe.depsTail=n):Qe.deps=Qe.depsTail=n,h1(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Qe.depsTail,n.nextDep=void 0,Qe.depsTail.nextDep=n,Qe.depsTail=n,Qe.deps===n&&(Qe.deps=s)}return n}trigger(t){this.version++,oi++,this.notify(t)}notify(t){fc();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{dc()}}}function h1(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)h1(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const kr=new WeakMap,Os=Symbol(""),il=Symbol(""),ii=Symbol("");function Pt(e,t,n){if(xn&&Qe){let s=kr.get(e);s||kr.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new na),o.map=s,o.key=n),o.track()}}function Gn(e,t,n,s,o,i){const r=kr.get(e);if(!r){oi++;return}const a=c=>{c&&c.trigger()};if(fc(),t==="clear")r.forEach(a);else{const c=ce(e),u=c&&lc(n);if(c&&n==="length"){const f=Number(s);r.forEach((d,h)=>{(h==="length"||h===ii||!Gt(h)&&h>=f)&&a(d)})}else switch((n!==void 0||r.has(void 0))&&a(r.get(n)),u&&a(r.get(ii)),t){case"add":c?u&&a(r.get("length")):(a(r.get(Os)),ho(e)&&a(r.get(il)));break;case"delete":c||(a(r.get(Os)),ho(e)&&a(r.get(il)));break;case"set":ho(e)&&a(r.get(Os));break}}dc()}function J2(e,t){const n=kr.get(e);return n&&n.get(t)}function eo(e){const t=Pe(e);return t===e?t:(Pt(t,"iterate",ii),an(e)?t:t.map(_t))}function sa(e){return Pt(e=Pe(e),"iterate",ii),e}const X2={__proto__:null,[Symbol.iterator](){return Fa(this,Symbol.iterator,_t)},concat(...e){return eo(this).concat(...e.map(t=>ce(t)?eo(t):t))},entries(){return Fa(this,"entries",e=>(e[1]=_t(e[1]),e))},every(e,t){return Un(this,"every",e,t,void 0,arguments)},filter(e,t){return Un(this,"filter",e,t,n=>n.map(_t),arguments)},find(e,t){return Un(this,"find",e,t,_t,arguments)},findIndex(e,t){return Un(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Un(this,"findLast",e,t,_t,arguments)},findLastIndex(e,t){return Un(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Un(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ba(this,"includes",e)},indexOf(...e){return Ba(this,"indexOf",e)},join(e){return eo(this).join(e)},lastIndexOf(...e){return Ba(this,"lastIndexOf",e)},map(e,t){return Un(this,"map",e,t,void 0,arguments)},pop(){return Ro(this,"pop")},push(...e){return Ro(this,"push",e)},reduce(e,...t){return ju(this,"reduce",e,t)},reduceRight(e,...t){return ju(this,"reduceRight",e,t)},shift(){return Ro(this,"shift")},some(e,t){return Un(this,"some",e,t,void 0,arguments)},splice(...e){return Ro(this,"splice",e)},toReversed(){return eo(this).toReversed()},toSorted(e){return eo(this).toSorted(e)},toSpliced(...e){return eo(this).toSpliced(...e)},unshift(...e){return Ro(this,"unshift",e)},values(){return Fa(this,"values",_t)}};function Fa(e,t,n){const s=sa(e),o=s[t]();return s!==e&&!an(e)&&(o._next=o.next,o.next=()=>{const i=o._next();return i.done||(i.value=n(i.value)),i}),o}const Q2=Array.prototype;function Un(e,t,n,s,o,i){const r=sa(e),a=r!==e&&!an(e),c=r[t];if(c!==Q2[t]){const d=c.apply(e,i);return a?_t(d):d}let u=n;r!==e&&(a?u=function(d,h){return n.call(this,_t(d),h,e)}:n.length>2&&(u=function(d,h){return n.call(this,d,h,e)}));const f=c.call(r,u,s);return a&&o?o(f):f}function ju(e,t,n,s){const o=sa(e);let i=n;return o!==e&&(an(e)?n.length>3&&(i=function(r,a,c){return n.call(this,r,a,c,e)}):i=function(r,a,c){return n.call(this,r,_t(a),c,e)}),o[t](i,...s)}function Ba(e,t,n){const s=Pe(e);Pt(s,"iterate",ii);const o=s[t](...n);return(o===-1||o===!1)&&ra(n[0])?(n[0]=Pe(n[0]),s[t](...n)):o}function Ro(e,t,n=[]){ts(),fc();const s=Pe(e)[t].apply(e,n);return dc(),ns(),s}const Z2=ln("__proto__,__v_isRef,__isVue"),p1=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Gt));function em(e){Gt(e)||(e=String(e));const t=Pe(this);return Pt(t,"has",e),t.hasOwnProperty(e)}class m1{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(o?i?w1:k1:i?b1:y1).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=ce(t);if(!o){let c;if(r&&(c=X2[n]))return c;if(n==="hasOwnProperty")return em}const a=Reflect.get(t,n,Ye(t)?t:s);if((Gt(n)?p1.has(n):Z2(n))||(o||Pt(t,"get",n),i))return a;if(Ye(a)){const c=r&&lc(n)?a:a.value;return o&&Ue(c)?It(c):c}return Ue(a)?o?It(a):Dn(a):a}}class g1 extends m1{constructor(t=!1){super(!1,t)}set(t,n,s,o){let i=t[n];if(!this._isShallow){const c=ss(i);if(!an(s)&&!ss(s)&&(i=Pe(i),s=Pe(s)),!ce(t)&&Ye(i)&&!Ye(s))return c||(i.value=s),!0}const r=ce(t)&&lc(n)?Number(n)e,Fi=e=>Reflect.getPrototypeOf(e);function im(e,t,n){return function(...s){const o=this.__v_raw,i=Pe(o),r=ho(i),a=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,u=o[e](...s),f=n?rl:t?wr:_t;return!t&&Pt(i,"iterate",c?il:Os),{next(){const{value:d,done:h}=u.next();return h?{value:d,done:h}:{value:a?[f(d[0]),f(d[1])]:f(d),done:h}},[Symbol.iterator](){return this}}}}function Bi(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function rm(e,t){const n={get(o){const i=this.__v_raw,r=Pe(i),a=Pe(o);e||(Ot(o,a)&&Pt(r,"get",o),Pt(r,"get",a));const{has:c}=Fi(r),u=t?rl:e?wr:_t;if(c.call(r,o))return u(i.get(o));if(c.call(r,a))return u(i.get(a));i!==r&&i.get(o)},get size(){const o=this.__v_raw;return!e&&Pt(Pe(o),"iterate",Os),o.size},has(o){const i=this.__v_raw,r=Pe(i),a=Pe(o);return e||(Ot(o,a)&&Pt(r,"has",o),Pt(r,"has",a)),o===a?i.has(o):i.has(o)||i.has(a)},forEach(o,i){const r=this,a=r.__v_raw,c=Pe(a),u=t?rl:e?wr:_t;return!e&&Pt(c,"iterate",Os),a.forEach((f,d)=>o.call(i,u(f),u(d),r))}};return Ie(n,e?{add:Bi("add"),set:Bi("set"),delete:Bi("delete"),clear:Bi("clear")}:{add(o){!t&&!an(o)&&!ss(o)&&(o=Pe(o));const i=Pe(this);return Fi(i).has.call(i,o)||(i.add(o),Gn(i,"add",o,o)),this},set(o,i){!t&&!an(i)&&!ss(i)&&(i=Pe(i));const r=Pe(this),{has:a,get:c}=Fi(r);let u=a.call(r,o);u||(o=Pe(o),u=a.call(r,o));const f=c.call(r,o);return r.set(o,i),u?Ot(i,f)&&Gn(r,"set",o,i):Gn(r,"add",o,i),this},delete(o){const i=Pe(this),{has:r,get:a}=Fi(i);let c=r.call(i,o);c||(o=Pe(o),c=r.call(i,o)),a&&a.call(i,o);const u=i.delete(o);return c&&Gn(i,"delete",o,void 0),u},clear(){const o=Pe(this),i=o.size!==0,r=o.clear();return i&&Gn(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=im(o,e,t)}),n}function oa(e,t){const n=rm(e,t);return(s,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(Oe(n,o)&&o in s?n:s,o,i)}const am={get:oa(!1,!1)},lm={get:oa(!1,!0)},cm={get:oa(!0,!1)},um={get:oa(!0,!0)},y1=new WeakMap,b1=new WeakMap,k1=new WeakMap,w1=new WeakMap;function fm(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dm(e){return e.__v_skip||!Object.isExtensible(e)?0:fm(T2(e))}function Dn(e){return ss(e)?e:ia(e,!1,tm,am,y1)}function pc(e){return ia(e,!1,sm,lm,b1)}function It(e){return ia(e,!0,nm,cm,k1)}function al(e){return ia(e,!0,om,um,w1)}function ia(e,t,n,s,o){if(!Ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=dm(e);if(i===0)return e;const r=o.get(e);if(r)return r;const a=new Proxy(e,i===2?s:n);return o.set(e,a),a}function Cs(e){return ss(e)?Cs(e.__v_raw):!!(e&&e.__v_isReactive)}function ss(e){return!!(e&&e.__v_isReadonly)}function an(e){return!!(e&&e.__v_isShallow)}function ra(e){return e?!!e.__v_raw:!1}function Pe(e){const t=e&&e.__v_raw;return t?Pe(t):e}function go(e){return!Oe(e,"__v_skip")&&Object.isExtensible(e)&&t1(e,"__v_skip",!0),e}const _t=e=>Ue(e)?Dn(e):e,wr=e=>Ue(e)?It(e):e;function Ye(e){return e?e.__v_isRef===!0:!1}function j(e){return C1(e,!1)}function He(e){return C1(e,!0)}function C1(e,t){return Ye(e)?e:new hm(e,t)}class hm{constructor(t,n){this.dep=new na,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Pe(t),this._value=n?t:_t(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||an(t)||ss(t);t=s?t:Pe(t),Ot(t,n)&&(this._rawValue=t,this._value=s?t:_t(t),this.dep.trigger())}}function pm(e){e.dep&&e.dep.trigger()}function l(e){return Ye(e)?e.value:e}function Se(e){return ye(e)?e():l(e)}const mm={get:(e,t,n)=>t==="__v_raw"?e:l(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Ye(o)&&!Ye(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function mc(e){return Cs(e)?e:new Proxy(e,mm)}class gm{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new na,{get:s,set:o}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=o}get value(){return this._value=this._get()}set value(t){this._set(t)}}function gc(e){return new gm(e)}function vm(e){const t=ce(e)?new Array(e.length):{};for(const n in e)t[n]=S1(e,n);return t}class ym{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return J2(Pe(this._object),this._key)}}class bm{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function _1(e,t,n){return Ye(e)?e:ye(e)?new bm(e):Ue(e)&&arguments.length>1?S1(e,t,n):j(e)}function S1(e,t,n){const s=e[t];return Ye(s)?s:new ym(e,t,n)}class km{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new na(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=oi-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Qe!==this)return l1(this,!0),!0}get value(){const t=this.dep.track();return f1(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function wm(e,t,n=!1){let s,o;return ye(e)?s=e:(s=e.get,o=e.set),new km(s,o,n)}const Cm={GET:"get",HAS:"has",ITERATE:"iterate"},_m={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},Ni={},Cr=new WeakMap;let ms;function Sm(){return ms}function T1(e,t=!1,n=ms){if(n){let s=Cr.get(n);s||Cr.set(n,s=[]),s.push(e)}}function Tm(e,t,n=Le){const{immediate:s,deep:o,once:i,scheduler:r,augmentJob:a,call:c}=n,u=_=>o?_:an(_)||o===!1||o===0?Jn(_,1):Jn(_);let f,d,h,m,g=!1,v=!1;if(Ye(e)?(d=()=>e.value,g=an(e)):Cs(e)?(d=()=>u(e),g=!0):ce(e)?(v=!0,g=e.some(_=>Cs(_)||an(_)),d=()=>e.map(_=>{if(Ye(_))return _.value;if(Cs(_))return u(_);if(ye(_))return c?c(_,2):_()})):ye(e)?t?d=c?()=>c(e,2):e:d=()=>{if(h){ts();try{h()}finally{ns()}}const _=ms;ms=f;try{return c?c(e,3,[m]):e(m)}finally{ms=_}}:d=Ht,t&&o){const _=d,x=o===!0?1/0:o;d=()=>Jn(_(),x)}const b=Ci(),k=()=>{f.stop(),b&&b.active&&rc(b.effects,f)};if(i&&t){const _=t;t=(...x)=>{_(...x),k()}}let C=v?new Array(e.length).fill(Ni):Ni;const y=_=>{if(!(!(f.flags&1)||!f.dirty&&!_))if(t){const x=f.run();if(o||g||(v?x.some(($,V)=>Ot($,C[V])):Ot(x,C))){h&&h();const $=ms;ms=f;try{const V=[x,C===Ni?void 0:v&&C[0]===Ni?[]:C,m];C=x,c?c(t,3,V):t(...V)}finally{ms=$}}}else f.run()};return a&&a(y),f=new si(d),f.scheduler=r?()=>r(y,!1):y,m=_=>T1(_,!1,f),h=f.onStop=()=>{const _=Cr.get(f);if(_){if(c)c(_,4);else for(const x of _)x();Cr.delete(f)}},t?s?y(!0):C=f.run():r?r(y.bind(null,!0),!0):f.run(),k.pause=f.pause.bind(f),k.resume=f.resume.bind(f),k.stop=k,k}function Jn(e,t=1/0,n){if(t<=0||!Ue(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ye(e))Jn(e.value,t,n);else if(ce(e))for(let s=0;s{Jn(s,t,n)});else if(Xr(e)){for(const s in e)Jn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Jn(e[s],t,n)}return e}const E1=[];function Em(e){E1.push(e)}function xm(){E1.pop()}function Am(e,t){}const $m={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},Lm={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function Po(e,t,n,s){try{return s?e(...s):e()}catch(o){Xs(o,t,n)}}function yn(e,t,n,s){if(ye(e)){const o=Po(e,t,n,s);return o&&ac(o)&&o.catch(i=>{Xs(i,t,n)}),o}if(ce(e)){const o=[];for(let i=0;i>>1,o=Dt[s],i=ai(o);i=ai(n)?Dt.push(e):Dt.splice(Pm(t),0,e),e.flags|=1,A1()}}function A1(){_r||(_r=x1.then($1))}function ri(e){ce(e)?vo.push(...e):gs&&e.id===-1?gs.splice(oo+1,0,e):e.flags&1||(vo.push(e),e.flags|=1),A1()}function Uu(e,t,n=Bn+1){for(;nai(n)-ai(s));if(vo.length=0,gs){gs.push(...t);return}for(gs=t,oo=0;ooe.id==null?e.flags&2?-1:1/0:e.id;function $1(e){try{for(Bn=0;Bnio.emit(o,...i)),Vi=[]):typeof window<"u"&&window.HTMLElement&&!((s=(n=window.navigator)==null?void 0:n.userAgent)!=null&&s.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{L1(i,t)}),setTimeout(()=>{io||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Vi=[])},3e3)):Vi=[]}let Tt=null,aa=null;function li(e){const t=Tt;return Tt=e,aa=e&&e.type.__scopeId||null,t}function Mm(e){aa=e}function Fm(){aa=null}const Bm=e=>O;function O(e,t=Tt,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&fi(-1);const i=li(t);let r;try{r=e(...o)}finally{li(i),s._d&&fi(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function et(e,t){if(Tt===null)return e;const n=Ei(Tt),s=e.dirs||(e.dirs=[]);for(let o=0;oe.__isTeleport,Go=e=>e&&(e.disabled||e.disabled===""),Wu=e=>e&&(e.defer||e.defer===""),qu=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Ku=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ll=(e,t)=>{const n=e&&e.to;return _e(n)?t?t(n):null:n},M1={name:"Teleport",__isTeleport:!0,process(e,t,n,s,o,i,r,a,c,u){const{mc:f,pc:d,pbc:h,o:{insert:m,querySelector:g,createText:v,createComment:b}}=u,k=Go(t.props);let{shapeFlag:C,children:y,dynamicChildren:_}=t;if(e==null){const x=t.el=v(""),$=t.anchor=v("");m(x,n,s),m($,n,s);const V=(I,P)=>{C&16&&f(y,I,P,o,i,r,a,c)},E=()=>{const I=t.target=ll(t.props,g),P=F1(I,t,v,m);I&&(r!=="svg"&&qu(I)?r="svg":r!=="mathml"&&Ku(I)&&(r="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(I),k||(V(I,P),ir(t,!1)))};k&&(V(n,$),ir(t,!0)),Wu(t.props)?(t.el.__isMounted=!1,pt(()=>{E(),delete t.el.__isMounted},i)):E()}else{if(Wu(t.props)&&e.el.__isMounted===!1){pt(()=>{M1.process(e,t,n,s,o,i,r,a,c,u)},i);return}t.el=e.el,t.targetStart=e.targetStart;const x=t.anchor=e.anchor,$=t.target=e.target,V=t.targetAnchor=e.targetAnchor,E=Go(e.props),I=E?n:$,P=E?x:V;if(r==="svg"||qu($)?r="svg":(r==="mathml"||Ku($))&&(r="mathml"),_?(h(e.dynamicChildren,_,I,o,i,r,a),Ic(e,t,!0)):c||d(e,t,I,P,o,i,r,a,!1),k)E?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Oi(t,n,x,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const N=t.target=ll(t.props,g);N&&Oi(t,N,null,u,0)}else E&&Oi(t,$,V,u,1);ir(t,k)}},remove(e,t,n,{um:s,o:{remove:o}},i){const{shapeFlag:r,children:a,anchor:c,targetStart:u,targetAnchor:f,target:d,props:h}=e;if(d&&(o(u),o(f)),i&&o(c),r&16){const m=i||!Go(h);for(let g=0;g{e.isMounted=!0}),as(()=>{e.isUnmounting=!0}),e}const dn=[Function,Array],bc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:dn,onEnter:dn,onAfterEnter:dn,onEnterCancelled:dn,onBeforeLeave:dn,onLeave:dn,onAfterLeave:dn,onLeaveCancelled:dn,onBeforeAppear:dn,onAppear:dn,onAfterAppear:dn,onAppearCancelled:dn},B1=e=>{const t=e.subTree;return t.component?B1(t.component):t},Vm={name:"BaseTransition",props:bc,setup(e,{slots:t}){const n=dt(),s=yc();return()=>{const o=t.default&&ca(t.default(),!0);if(!o||!o.length)return;const i=N1(o),r=Pe(e),{mode:a}=r;if(s.isLeaving)return Na(i);const c=Yu(i);if(!c)return Na(i);let u=ko(c,r,s,n,d=>u=d);c.type!==ut&&os(c,u);let f=n.subTree&&Yu(n.subTree);if(f&&f.type!==ut&&!Tn(f,c)&&B1(n).type!==ut){let d=ko(f,r,s,n);if(os(f,d),a==="out-in"&&c.type!==ut)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,f=void 0},Na(i);a==="in-out"&&c.type!==ut?d.delayLeave=(h,m,g)=>{const v=O1(s,f);v[String(f.key)]=f,h[Yn]=()=>{m(),h[Yn]=void 0,delete u.delayedLeave,f=void 0},u.delayedLeave=()=>{g(),delete u.delayedLeave,f=void 0}}:f=void 0}else f&&(f=void 0);return i}}};function N1(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ut){t=n;break}}return t}const V1=Vm;function O1(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ko(e,t,n,s,o){const{appear:i,mode:r,persisted:a=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:f,onEnterCancelled:d,onBeforeLeave:h,onLeave:m,onAfterLeave:g,onLeaveCancelled:v,onBeforeAppear:b,onAppear:k,onAfterAppear:C,onAppearCancelled:y}=t,_=String(e.key),x=O1(n,e),$=(I,P)=>{I&&yn(I,s,9,P)},V=(I,P)=>{const N=P[1];$(I,P),ce(I)?I.every(L=>L.length<=1)&&N():I.length<=1&&N()},E={mode:r,persisted:a,beforeEnter(I){let P=c;if(!n.isMounted)if(i)P=b||c;else return;I[Yn]&&I[Yn](!0);const N=x[_];N&&Tn(e,N)&&N.el[Yn]&&N.el[Yn](),$(P,[I])},enter(I){let P=u,N=f,L=d;if(!n.isMounted)if(i)P=k||u,N=C||f,L=y||d;else return;let U=!1;const q=I[Di]=J=>{U||(U=!0,J?$(L,[I]):$(N,[I]),E.delayedLeave&&E.delayedLeave(),I[Di]=void 0)};P?V(P,[I,q]):q()},leave(I,P){const N=String(e.key);if(I[Di]&&I[Di](!0),n.isUnmounting)return P();$(h,[I]);let L=!1;const U=I[Yn]=q=>{L||(L=!0,P(),q?$(v,[I]):$(g,[I]),I[Yn]=void 0,x[N]===e&&delete x[N])};x[N]=e,m?V(m,[I,U]):U()},clone(I){const P=ko(I,t,n,s,o);return o&&o(P),P}};return E}function Na(e){if(_i(e))return e=Rn(e),e.children=null,e}function Yu(e){if(!_i(e))return P1(e.type)&&e.children?N1(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ye(n.default))return n.default()}}function os(e,t){e.shapeFlag&6&&e.component?(e.transition=t,os(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ca(e,t=!1,n){let s=[],o=0;for(let i=0;i1)for(let i=0;in.value,set:i=>n.value=i})}return n}const Tr=new WeakMap;function yo(e,t,n,s,o=!1){if(ce(e)){e.forEach((g,v)=>yo(g,t&&(ce(t)?t[v]:t),n,s,o));return}if(_s(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&yo(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Ei(s.component):s.el,r=o?null:i,{i:a,r:c}=e,u=t&&t.r,f=a.refs===Le?a.refs={}:a.refs,d=a.setupState,h=Pe(d),m=d===Le?ao:g=>Oe(h,g);if(u!=null&&u!==c){if(Gu(t),_e(u))f[u]=null,m(u)&&(d[u]=null);else if(Ye(u)){u.value=null;const g=t;g.k&&(f[g.k]=null)}}if(ye(c))Po(c,a,12,[r,f]);else{const g=_e(c),v=Ye(c);if(g||v){const b=()=>{if(e.f){const k=g?m(c)?d[c]:f[c]:c.value;if(o)ce(k)&&rc(k,i);else if(ce(k))k.includes(i)||k.push(i);else if(g)f[c]=[i],m(c)&&(d[c]=f[c]);else{const C=[i];c.value=C,e.k&&(f[e.k]=C)}}else g?(f[c]=r,m(c)&&(d[c]=r)):v&&(c.value=r,e.k&&(f[e.k]=r))};if(r){const k=()=>{b(),Tr.delete(e)};k.id=-1,Tr.set(e,k),pt(k,n)}else Gu(e),b()}}}function Gu(e){const t=Tr.get(e);t&&(t.flags|=8,Tr.delete(e))}let Ju=!1;const to=()=>{Ju||(console.error("Hydration completed but contains mismatches."),Ju=!0)},Om=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",Dm=e=>e.namespaceURI.includes("MathML"),Ri=e=>{if(e.nodeType===1){if(Om(e))return"svg";if(Dm(e))return"mathml"}},lo=e=>e.nodeType===8;function Rm(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:i,parentNode:r,remove:a,insert:c,createComment:u}}=e,f=(y,_)=>{if(!_.hasChildNodes()){n(null,y,_),Sr(),_._vnode=y;return}d(_.firstChild,y,null,null,null),Sr(),_._vnode=y},d=(y,_,x,$,V,E=!1)=>{E=E||!!_.dynamicChildren;const I=lo(y)&&y.data==="[",P=()=>v(y,_,x,$,V,I),{type:N,ref:L,shapeFlag:U,patchFlag:q}=_;let J=y.nodeType;_.el=y,q===-2&&(E=!1,_.dynamicChildren=null);let G=null;switch(N){case Ss:J!==3?_.children===""?(c(_.el=o(""),r(y),y),G=y):G=P():(y.data!==_.children&&(to(),y.data=_.children),G=i(y));break;case ut:C(y)?(G=i(y),k(_.el=y.content.firstChild,y,x)):J!==8||I?G=P():G=i(y);break;case Rs:if(I&&(y=i(y),J=y.nodeType),J===1||J===3){G=y;const ae=!_.children.length;for(let ne=0;ne<_.staticCount;ne++)ae&&(_.children+=G.nodeType===1?G.outerHTML:G.data),ne===_.staticCount-1&&(_.anchor=G),G=i(G);return I?i(G):G}else P();break;case Y:I?G=g(y,_,x,$,V,E):G=P();break;default:if(U&1)(J!==1||_.type.toLowerCase()!==y.tagName.toLowerCase())&&!C(y)?G=P():G=h(y,_,x,$,V,E);else if(U&6){_.slotScopeIds=V;const ae=r(y);if(I?G=b(y):lo(y)&&y.data==="teleport start"?G=b(y,y.data,"teleport end"):G=i(y),t(_,ae,null,x,$,Ri(ae),E),_s(_)&&!_.type.__asyncResolved){let ne;I?(ne=H(Y),ne.anchor=G?G.previousSibling:ae.lastChild):ne=y.nodeType===3?rt(""):H("div"),ne.el=y,_.component.subTree=ne}}else U&64?J!==8?G=P():G=_.type.hydrate(y,_,x,$,V,E,e,m):U&128&&(G=_.type.hydrate(y,_,x,$,Ri(r(y)),V,E,e,d))}return L!=null&&yo(L,null,$,_),G},h=(y,_,x,$,V,E)=>{E=E||!!_.dynamicChildren;const{type:I,props:P,patchFlag:N,shapeFlag:L,dirs:U,transition:q}=_,J=I==="input"||I==="option";if(J||N!==-1){U&&Nn(_,null,x,"created");let G=!1;if(C(y)){G=f0(null,q)&&x&&x.vnode.props&&x.vnode.props.appear;const ne=y.content.firstChild;if(G){const he=ne.getAttribute("class");he&&(ne.$cls=he),q.beforeEnter(ne)}k(ne,y,x),_.el=y=ne}if(L&16&&!(P&&(P.innerHTML||P.textContent))){let ne=m(y.firstChild,_,y,x,$,V,E);for(;ne;){Hi(y,1)||to();const he=ne;ne=ne.nextSibling,a(he)}}else if(L&8){let ne=_.children;ne[0]===` `&&(y.tagName==="PRE"||y.tagName==="TEXTAREA")&&(ne=ne.slice(1));const{textContent:he}=y;he!==ne&&he!==ne.replace(/\r\n|\r/g,` -`)&&(Hi(y,0)||to(),y.textContent=_.children)}if(P){if(J||!E||N&48){const ne=y.tagName.includes("-");for(const he in P)(J&&(he.endsWith("value")||he==="indeterminate")||Ys(he)&&!ws(he)||he[0]==="."||ne)&&s(y,he,null,P[he],void 0,x)}else if(P.onClick)s(y,"onClick",null,P.onClick,void 0,x);else if(N&4&&Cs(P.style))for(const ne in P.style)P.style[ne]}let ae;(ae=P&&P.onVnodeBeforeMount)&&Ut(ae,x,_),U&&Nn(_,null,x,"beforeMount"),((ae=P&&P.onVnodeMounted)||U||G)&&k0(()=>{ae&&Ut(ae,x,_),G&&q.enter(y),U&&Nn(_,null,x,"mounted")},$)}return y.nextSibling},m=(y,_,x,$,V,E,I)=>{I=I||!!_.dynamicChildren;const P=_.children,N=P.length;for(let L=0;L{const{slotScopeIds:I}=_;I&&(V=V?V.concat(I):I);const P=r(y),N=m(i(y),_,P,x,$,V,E);return N&&lo(N)&&N.data==="]"?i(_.anchor=N):(to(),c(_.anchor=u("]"),P,N),N)},v=(y,_,x,$,V,E)=>{if(Hi(y.parentElement,1)||to(),_.el=null,E){const N=b(y);for(;;){const L=i(y);if(L&&L!==N)a(L);else break}}const I=i(y),P=r(y);return a(y),n(null,_,P,I,x,$,Ri(P),V),x&&(x.vnode.el=_.el,pa(x,_.el)),I},b=(y,_="[",x="]")=>{let $=0;for(;y;)if(y=i(y),y&&lo(y)&&(y.data===_&&$++,y.data===x)){if($===0)return i(y);$--}return y},k=(y,_,x)=>{const $=_.parentNode;$&&$.replaceChild(y,_);let V=x;for(;V;)V.vnode.el===_&&(V.vnode.el=V.subTree.el=y),V=V.parent},C=y=>y.nodeType===1&&y.tagName==="TEMPLATE";return[f,d]}const Xu="data-allow-mismatch",Hm={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Hi(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Xu);)e=e.parentElement;const n=e&&e.getAttribute(Xu);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Hm[t])}}const zm=ea().requestIdleCallback||(e=>setTimeout(e,1)),jm=ea().cancelIdleCallback||(e=>clearTimeout(e)),Um=(e=1e4)=>t=>{const n=zm(t,{timeout:e});return()=>jm(n)};function Wm(e){const{top:t,left:n,bottom:s,right:o}=e.getBoundingClientRect(),{innerHeight:i,innerWidth:r}=window;return(t>0&&t0&&s0&&n0&&o(t,n)=>{const s=new IntersectionObserver(o=>{for(const i of o)if(i.isIntersecting){s.disconnect(),t();break}},e);return n(o=>{if(o instanceof Element){if(Wm(o))return t(),s.disconnect(),!1;s.observe(o)}}),()=>s.disconnect()},Km=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},Ym=(e=[])=>(t,n)=>{_e(e)&&(e=[e]);let s=!1;const o=r=>{s||(s=!0,i(),t(),r.target.dispatchEvent(new r.constructor(r.type,r)))},i=()=>{n(r=>{for(const a of e)r.removeEventListener(a,o)})};return n(r=>{for(const a of e)r.addEventListener(a,o,{once:!0})}),i};function Gm(e,t){if(lo(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(lo(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const _s=e=>!!e.type.__asyncLoader;function wc(e){ye(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:o=200,hydrate:i,timeout:r,suspensible:a=!0,onError:c}=e;let u=null,f,d=0;const h=()=>(d++,u=null,m()),m=()=>{let g;return u||(g=u=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((b,k)=>{c(v,()=>b(h()),()=>k(v),d+1)});throw v}).then(v=>g!==u&&u?u:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),f=v,v)))};return z({name:"AsyncComponentWrapper",__asyncLoader:m,__asyncHydrate(g,v,b){let k=!1;(v.bu||(v.bu=[])).push(()=>k=!0);const C=()=>{k||b()},y=i?()=>{const _=i(C,x=>Gm(g,x));_&&(v.bum||(v.bum=[])).push(_)}:C;f?y():m().then(()=>!v.isUnmounted&&y())},get __asyncResolved(){return f},setup(){const g=St;if(kc(g),f)return()=>zi(f,g);const v=y=>{u=null,Xs(y,g,13,!s)};if(a&&g.suspense||wo)return m().then(y=>()=>zi(y,g)).catch(y=>(v(y),()=>s?H(s,{error:y}):null));const b=j(!1),k=j(),C=j(!!o);return o&&setTimeout(()=>{C.value=!1},o),r!=null&&setTimeout(()=>{if(!b.value&&!k.value){const y=new Error(`Async component timed out after ${r}ms.`);v(y),k.value=y}},r),m().then(()=>{b.value=!0,g.parent&&_i(g.parent.vnode)&&g.parent.update()}).catch(y=>{v(y),k.value=y}),()=>{if(b.value&&f)return zi(f,g);if(k.value&&s)return H(s,{error:k.value});if(n&&!C.value)return zi(n,g)}}})}function zi(e,t){const{ref:n,props:s,children:o,ce:i}=t.vnode,r=H(e,s,o);return r.ref=n,r.ce=i,delete t.vnode.ce,r}const _i=e=>e.type.__isKeepAlive,Jm={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=dt(),s=n.ctx;if(!s.renderer)return()=>{const C=t.default&&t.default();return C&&C.length===1?C[0]:C};const o=new Map,i=new Set;let r=null;const a=n.suspense,{renderer:{p:c,m:u,um:f,o:{createElement:d}}}=s,h=d("div");s.activate=(C,y,_,x,$)=>{const V=C.component;u(C,y,_,0,a),c(V.vnode,C,y,_,V,a,x,C.slotScopeIds,$),pt(()=>{V.isDeactivated=!1,V.a&&mo(V.a);const E=C.props&&C.props.onVnodeMounted;E&&Ut(E,V.parent,C)},a)},s.deactivate=C=>{const y=C.component;xr(y.m),xr(y.a),u(C,h,null,1,a),pt(()=>{y.da&&mo(y.da);const _=C.props&&C.props.onVnodeUnmounted;_&&Ut(_,y.parent,C),y.isDeactivated=!0},a)};function m(C){Va(C),f(C,n,a,!0)}function g(C){o.forEach((y,_)=>{const x=bl(y.type);x&&!C(x)&&v(_)})}function v(C){const y=o.get(C);y&&(!r||!Tn(y,r))?m(y):r&&Va(r),o.delete(C),i.delete(C)}te(()=>[e.include,e.exclude],([C,y])=>{C&&g(_=>Wo(C,_)),y&&g(_=>!Wo(y,_))},{flush:"post",deep:!0});let b=null;const k=()=>{b!=null&&(Ar(n.subTree.type)?pt(()=>{o.set(b,ji(n.subTree))},n.subTree.suspense):o.set(b,ji(n.subTree)))};return be(k),Mo(k),as(()=>{o.forEach(C=>{const{subTree:y,suspense:_}=n,x=ji(y);if(C.type===x.type&&C.key===x.key){Va(x);const $=x.component.da;$&&pt($,_);return}m(C)})}),()=>{if(b=null,!t.default)return r=null;const C=t.default(),y=C[0];if(C.length>1)return r=null,C;if(!Ln(y)||!(y.shapeFlag&4)&&!(y.shapeFlag&128))return r=null,y;let _=ji(y);if(_.type===ut)return r=null,_;const x=_.type,$=bl(_s(_)?_.type.__asyncResolved||{}:x),{include:V,exclude:E,max:I}=e;if(V&&(!$||!Wo(V,$))||E&&$&&Wo(E,$))return _.shapeFlag&=-257,r=_,y;const P=_.key==null?x:_.key,N=o.get(P);return _.el&&(_=Rn(_),y.shapeFlag&128&&(y.ssContent=_)),b=P,N?(_.el=N.el,_.component=N.component,_.transition&&os(_,_.transition),_.shapeFlag|=512,i.delete(P),i.add(P)):(i.add(P),I&&i.size>parseInt(I,10)&&v(i.values().next().value)),_.shapeFlag|=256,r=_,Ar(y.type)?y:_}}},Xm=Jm;function Wo(e,t){return ce(e)?e.some(n=>Wo(n,t)):_e(e)?e.split(",").includes(t):S2(e)?(e.lastIndex=0,e.test(t)):!1}function H1(e,t){j1(e,"a",t)}function z1(e,t){j1(e,"da",t)}function j1(e,t,n=St){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(ua(t,s,n),n){let o=n.parent;for(;o&&o.parent;)_i(o.parent.vnode)&&Qm(s,t,n,o),o=o.parent}}function Qm(e,t,n,s){const o=ua(t,e,s,!0);cn(()=>{rc(s[t],o)},n)}function Va(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ji(e){return e.shapeFlag&128?e.ssContent:e}function ua(e,t,n=St,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{ts();const a=qs(n),c=yn(t,n,e,r);return a(),ns(),c});return s?o.unshift(i):o.push(i),i}}const rs=e=>(t,n=St)=>{(!wo||e==="sp")&&ua(e,(...s)=>t(...s),n)},fa=rs("bm"),be=rs("m"),Cc=rs("bu"),Mo=rs("u"),as=rs("bum"),cn=rs("um"),U1=rs("sp"),W1=rs("rtg"),q1=rs("rtc");function K1(e,t=St){ua("ec",e,t)}const _c="components",Zm="directives";function un(e,t){return Sc(_c,e,!0,t)||e}const Y1=Symbol.for("v-ndc");function Be(e){return _e(e)?Sc(_c,e,!1)||e:e||Y1}function eg(e){return Sc(Zm,e)}function Sc(e,t,n=!0,s=!1){const o=Tt||St;if(o){const i=o.type;if(e===_c){const a=bl(i,!1);if(a&&(a===t||a===tt(t)||a===Js(tt(t))))return i}const r=Qu(o[e]||i[e],t)||Qu(o.appContext[e],t);return!r&&s?i:r}}function Qu(e,t){return e&&(e[t]||e[tt(t)]||e[Js(tt(t))])}function le(e,t,n,s){let o;const i=n&&n[s],r=ce(e);if(r||_e(e)){const a=r&&Cs(e);let c=!1,u=!1;a&&(c=!an(e),u=ss(e),e=sa(e)),o=new Array(e.length);for(let f=0,d=e.length;ft(a,c,void 0,i&&i[c]));else{const a=Object.keys(e);o=new Array(a.length);for(let c=0,u=a.length;c{const i=s.fn(...o);return i&&(i.key=s.key),i}:s.fn)}return e}function F(e,t,n={},s,o){if(Tt.ce||Tt.parent&&_s(Tt.parent)&&Tt.parent.ce){const u=Object.keys(n).length>0;return t!=="default"&&(n.name=t),p(),D(Y,null,[H("slot",n,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),p();const r=i&&Tc(i(n)),a=n.key||r&&r.key,c=D(Y,{key:(a&&!Gt(a)?a:`_${t}`)+(!r&&s?"_fb":"")},r||(s?s():[]),r&&e._===1?64:-2);return!o&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Tc(e){return e.some(t=>Ln(t)?!(t.type===ut||t.type===Y&&!Tc(t.children)):!0)?e:null}function Ec(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:po(s)]=e[s];return n}const cl=e=>e?E0(e)?Ei(e):cl(e.parent):null,Jo=Ie(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>cl(e.parent),$root:e=>cl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>xc(e),$forceUpdate:e=>e.f||(e.f=()=>{vc(e.update)}),$nextTick:e=>e.n||(e.n=ze.bind(e.proxy)),$watch:e=>Tg.bind(e)}),Oa=(e,t)=>e!==Le&&!e.__isScriptSetup&&Oe(e,t),ul={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:i,accessCache:r,type:a,appContext:c}=e;let u;if(t[0]!=="$"){const m=r[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(Oa(s,t))return r[t]=1,s[t];if(o!==Le&&Oe(o,t))return r[t]=2,o[t];if((u=e.propsOptions[0])&&Oe(u,t))return r[t]=3,i[t];if(n!==Le&&Oe(n,t))return r[t]=4,n[t];fl&&(r[t]=0)}}const f=Jo[t];let d,h;if(f)return t==="$attrs"&&Pt(e.attrs,"get",""),f(e);if((d=a.__cssModules)&&(d=d[t]))return d;if(n!==Le&&Oe(n,t))return r[t]=4,n[t];if(h=c.config.globalProperties,Oe(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return Oa(o,t)?(o[t]=n,!0):s!==Le&&Oe(s,t)?(s[t]=n,!0):Oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i,type:r}},a){let c,u;return!!(n[a]||e!==Le&&a[0]!=="$"&&Oe(e,a)||Oa(t,a)||(c=i[0])&&Oe(c,a)||Oe(s,a)||Oe(Jo,a)||Oe(o.config.globalProperties,a)||(u=r.__cssModules)&&u[a])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},tg=Ie({},ul,{get(e,t){if(t!==Symbol.unscopables)return ul.get(e,t,e)},has(e,t){return t[0]!=="_"&&!L2(t)}});function ng(){return null}function sg(){return null}function og(e){}function ig(e){}function rg(){return null}function ag(){}function lg(e,t){return null}function Si(){return G1().slots}function cg(){return G1().attrs}function G1(e){const t=dt();return t.setupContext||(t.setupContext=$0(t))}function ci(e){return ce(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function J1(e,t){const n=ci(e);for(const s in t){if(s.startsWith("__skip"))continue;let o=n[s];o?ce(o)||ye(o)?o=n[s]={type:o,default:t[s]}:o.default=t[s]:o===null&&(o=n[s]={default:t[s]}),o&&t[`__skip_${s}`]&&(o.skipFactory=!0)}return n}function $n(e,t){return!e||!t?e||t:ce(e)&&ce(t)?e.concat(t):Ie({},ci(e),ci(t))}function X1(e,t){const n={};for(const s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n}function ug(e){const t=dt();let n=e();return gl(),ac(n)&&(n=n.catch(s=>{throw qs(t),s})),[n,()=>qs(t)]}let fl=!0;function fg(e){const t=xc(e),n=e.proxy,s=e.ctx;fl=!1,t.beforeCreate&&Zu(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:r,watch:a,provide:c,inject:u,created:f,beforeMount:d,mounted:h,beforeUpdate:m,updated:g,activated:v,deactivated:b,beforeDestroy:k,beforeUnmount:C,destroyed:y,unmounted:_,render:x,renderTracked:$,renderTriggered:V,errorCaptured:E,serverPrefetch:I,expose:P,inheritAttrs:N,components:L,directives:U,filters:q}=t;if(u&&dg(u,s,null),r)for(const ae in r){const ne=r[ae];ye(ne)&&(s[ae]=ne.bind(n))}if(o){const ae=o.call(n,n);Ue(ae)&&(e.data=Dn(ae))}if(fl=!0,i)for(const ae in i){const ne=i[ae],he=ye(ne)?ne.bind(n,n):ye(ne.get)?ne.get.bind(n,n):Ht,st=!ye(ne)&&ye(ne.set)?ne.set.bind(n):Ht,je=M({get:he,set:st});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>je.value,set:yt=>je.value=yt})}if(a)for(const ae in a)Q1(a[ae],s,n,ae);if(c){const ae=ye(c)?c.call(n):c;Reflect.ownKeys(ae).forEach(ne=>{In(ne,ae[ne])})}f&&Zu(f,e,"c");function G(ae,ne){ce(ne)?ne.forEach(he=>ae(he.bind(n))):ne&&ae(ne.bind(n))}if(G(fa,d),G(be,h),G(Cc,m),G(Mo,g),G(H1,v),G(z1,b),G(K1,E),G(q1,$),G(W1,V),G(as,C),G(cn,_),G(U1,I),ce(P))if(P.length){const ae=e.exposed||(e.exposed={});P.forEach(ne=>{Object.defineProperty(ae,ne,{get:()=>n[ne],set:he=>n[ne]=he,enumerable:!0})})}else e.exposed||(e.exposed={});x&&e.render===Ht&&(e.render=x),N!=null&&(e.inheritAttrs=N),L&&(e.components=L),U&&(e.directives=U),I&&kc(e)}function dg(e,t,n=Ht){ce(e)&&(e=dl(e));for(const s in e){const o=e[s];let i;Ue(o)?"default"in o?i=qe(o.from||s,o.default,!0):i=qe(o.from||s):i=qe(o),Ye(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:r=>i.value=r}):t[s]=i}}function Zu(e,t,n){yn(ce(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Q1(e,t,n,s){let o=s.includes(".")?g0(n,s):()=>n[s];if(_e(e)){const i=t[e];ye(i)&&te(o,i)}else if(ye(e))te(o,e.bind(n));else if(Ue(e))if(ce(e))e.forEach(i=>Q1(i,t,n,s));else{const i=ye(e.handler)?e.handler.bind(n):t[e.handler];ye(i)&&te(o,i,e)}}function xc(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,a=i.get(t);let c;return a?c=a:!o.length&&!n&&!s?c=t:(c={},o.length&&o.forEach(u=>Er(c,u,r,!0)),Er(c,t,r)),Ue(t)&&i.set(t,c),c}function Er(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&Er(e,i,n,!0),o&&o.forEach(r=>Er(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const a=hg[r]||n&&n[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const hg={data:ef,props:tf,emits:tf,methods:qo,computed:qo,beforeCreate:Vt,created:Vt,beforeMount:Vt,mounted:Vt,beforeUpdate:Vt,updated:Vt,beforeDestroy:Vt,beforeUnmount:Vt,destroyed:Vt,unmounted:Vt,activated:Vt,deactivated:Vt,errorCaptured:Vt,serverPrefetch:Vt,components:qo,directives:qo,watch:mg,provide:ef,inject:pg};function ef(e,t){return t?e?function(){return Ie(ye(e)?e.call(this,this):e,ye(t)?t.call(this,this):t)}:t:e}function pg(e,t){return qo(dl(e),dl(t))}function dl(e){if(ce(e)){const t={};for(let n=0;n1)return n&&ye(t)?t.call(s&&s.proxy):t}}function Ac(){return!!(dt()||Ds)}const e0={},t0=()=>Object.create(e0),n0=e=>Object.getPrototypeOf(e)===e0;function yg(e,t,n,s=!1){const o={},i=t0();e.propsDefaults=Object.create(null),s0(e,t,o,i);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);n?e.props=s?o:pc(o):e.type.props?e.props=o:e.props=i,e.attrs=i}function bg(e,t,n,s){const{props:o,attrs:i,vnode:{patchFlag:r}}=e,a=Pe(o),[c]=e.propsOptions;let u=!1;if((s||r>0)&&!(r&16)){if(r&8){const f=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[h,m]=o0(d,t,!0);Ie(r,h),m&&a.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return Ue(e)&&s.set(e,fo),fo;if(ce(i))for(let f=0;fe==="_"||e==="_ctx"||e==="$stable",Lc=e=>ce(e)?e.map(qt):[qt(e)],wg=(e,t,n)=>{if(t._n)return t;const s=O((...o)=>Lc(t(...o)),n);return s._c=!1,s},i0=(e,t,n)=>{const s=e._ctx;for(const o in e){if($c(o))continue;const i=e[o];if(ye(i))t[o]=wg(o,i,s);else if(i!=null){const r=Lc(i);t[o]=()=>r}}},r0=(e,t)=>{const n=Lc(t);e.slots.default=()=>n},a0=(e,t,n)=>{for(const s in t)(n||!$c(s))&&(e[s]=t[s])},Cg=(e,t,n)=>{const s=e.slots=t0();if(e.vnode.shapeFlag&32){const o=t._;o?(a0(s,t,n),n&&t1(s,"_",o,!0)):i0(t,s)}else t&&r0(e,t)},_g=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,r=Le;if(s.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:a0(o,t,n):(i=!t.$stable,i0(t,o)),r=t}else t&&(r0(e,t),r={default:1});if(i)for(const a in o)!$c(a)&&r[a]==null&&delete o[a]},pt=k0;function l0(e){return u0(e)}function c0(e){return u0(e,Rm)}function u0(e,t){const n=ea();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:r,createText:a,createComment:c,setText:u,setElementText:f,parentNode:d,nextSibling:h,setScopeId:m=Ht,insertStaticContent:g}=e,v=(B,R,K,ee=null,X=null,Q=null,re=void 0,oe=null,se=!!R.dynamicChildren)=>{if(B===R)return;B&&!Tn(B,R)&&(ee=Ne(B),yt(B,X,Q,!0),B=null),R.patchFlag===-2&&(se=!1,R.dynamicChildren=null);const{type:Z,ref:ve,shapeFlag:ue}=R;switch(Z){case Ss:b(B,R,K,ee);break;case ut:k(B,R,K,ee);break;case Rs:B==null&&C(R,K,ee,re);break;case Y:L(B,R,K,ee,X,Q,re,oe,se);break;default:ue&1?x(B,R,K,ee,X,Q,re,oe,se):ue&6?U(B,R,K,ee,X,Q,re,oe,se):(ue&64||ue&128)&&Z.process(B,R,K,ee,X,Q,re,oe,se,bt)}ve!=null&&X?yo(ve,B&&B.ref,Q,R||B,!R):ve==null&&B&&B.ref!=null&&yo(B.ref,null,Q,B,!0)},b=(B,R,K,ee)=>{if(B==null)s(R.el=a(R.children),K,ee);else{const X=R.el=B.el;R.children!==B.children&&u(X,R.children)}},k=(B,R,K,ee)=>{B==null?s(R.el=c(R.children||""),K,ee):R.el=B.el},C=(B,R,K,ee)=>{[B.el,B.anchor]=g(B.children,R,K,ee,B.el,B.anchor)},y=({el:B,anchor:R},K,ee)=>{let X;for(;B&&B!==R;)X=h(B),s(B,K,ee),B=X;s(R,K,ee)},_=({el:B,anchor:R})=>{let K;for(;B&&B!==R;)K=h(B),o(B),B=K;o(R)},x=(B,R,K,ee,X,Q,re,oe,se)=>{if(R.type==="svg"?re="svg":R.type==="math"&&(re="mathml"),B==null)$(R,K,ee,X,Q,re,oe,se);else{const Z=B.el&&B.el._isVueCE?B.el:null;try{Z&&Z._beginPatch(),I(B,R,X,Q,re,oe,se)}finally{Z&&Z._endPatch()}}},$=(B,R,K,ee,X,Q,re,oe)=>{let se,Z;const{props:ve,shapeFlag:ue,transition:me,dirs:Ce}=B;if(se=B.el=r(B.type,Q,ve&&ve.is,ve),ue&8?f(se,B.children):ue&16&&E(B.children,se,null,ee,X,Da(B,Q),re,oe),Ce&&Nn(B,null,ee,"created"),V(se,B,B.scopeId,re,ee),ve){for(const Xe in ve)Xe!=="value"&&!ws(Xe)&&i(se,Xe,null,ve[Xe],Q,ee);"value"in ve&&i(se,"value",null,ve.value,Q),(Z=ve.onVnodeBeforeMount)&&Ut(Z,ee,B)}Ce&&Nn(B,null,ee,"beforeMount");const Me=f0(X,me);Me&&me.beforeEnter(se),s(se,R,K),((Z=ve&&ve.onVnodeMounted)||Me||Ce)&&pt(()=>{Z&&Ut(Z,ee,B),Me&&me.enter(se),Ce&&Nn(B,null,ee,"mounted")},X)},V=(B,R,K,ee,X)=>{if(K&&m(B,K),ee)for(let Q=0;Q{for(let Z=se;Z{const oe=R.el=B.el;let{patchFlag:se,dynamicChildren:Z,dirs:ve}=R;se|=B.patchFlag&16;const ue=B.props||Le,me=R.props||Le;let Ce;if(K&&Ps(K,!1),(Ce=me.onVnodeBeforeUpdate)&&Ut(Ce,K,R,B),ve&&Nn(R,B,K,"beforeUpdate"),K&&Ps(K,!0),(ue.innerHTML&&me.innerHTML==null||ue.textContent&&me.textContent==null)&&f(oe,""),Z?P(B.dynamicChildren,Z,oe,K,ee,Da(R,X),Q):re||ne(B,R,oe,null,K,ee,Da(R,X),Q,!1),se>0){if(se&16)N(oe,ue,me,K,X);else if(se&2&&ue.class!==me.class&&i(oe,"class",null,me.class,X),se&4&&i(oe,"style",ue.style,me.style,X),se&8){const Me=R.dynamicProps;for(let Xe=0;Xe{Ce&&Ut(Ce,K,R,B),ve&&Nn(R,B,K,"updated")},ee)},P=(B,R,K,ee,X,Q,re)=>{for(let oe=0;oe{if(R!==K){if(R!==Le)for(const Q in R)!ws(Q)&&!(Q in K)&&i(B,Q,R[Q],null,X,ee);for(const Q in K){if(ws(Q))continue;const re=K[Q],oe=R[Q];re!==oe&&Q!=="value"&&i(B,Q,oe,re,X,ee)}"value"in K&&i(B,"value",R.value,K.value,X)}},L=(B,R,K,ee,X,Q,re,oe,se)=>{const Z=R.el=B?B.el:a(""),ve=R.anchor=B?B.anchor:a("");let{patchFlag:ue,dynamicChildren:me,slotScopeIds:Ce}=R;Ce&&(oe=oe?oe.concat(Ce):Ce),B==null?(s(Z,K,ee),s(ve,K,ee),E(R.children||[],K,ve,X,Q,re,oe,se)):ue>0&&ue&64&&me&&B.dynamicChildren?(P(B.dynamicChildren,me,K,X,Q,re,oe),(R.key!=null||X&&R===X.subTree)&&Ic(B,R,!0)):ne(B,R,K,ve,X,Q,re,oe,se)},U=(B,R,K,ee,X,Q,re,oe,se)=>{R.slotScopeIds=oe,B==null?R.shapeFlag&512?X.ctx.activate(R,K,ee,re,se):q(R,K,ee,X,Q,re,se):J(B,R,se)},q=(B,R,K,ee,X,Q,re)=>{const oe=B.component=T0(B,ee,X);if(_i(B)&&(oe.ctx.renderer=bt),x0(oe,!1,re),oe.asyncDep){if(X&&X.registerDep(oe,G,re),!B.el){const se=oe.subTree=H(ut);k(null,se,R,K),B.placeholder=se.el}}else G(oe,B,R,K,X,Q,re)},J=(B,R,K)=>{const ee=R.component=B.component;if(Ig(B,R,K))if(ee.asyncDep&&!ee.asyncResolved){ae(ee,R,K);return}else ee.next=R,ee.update();else R.el=B.el,ee.vnode=R},G=(B,R,K,ee,X,Q,re)=>{const oe=()=>{if(B.isMounted){let{next:ue,bu:me,u:Ce,parent:Me,vnode:Xe}=B;{const Zt=d0(B);if(Zt){ue&&(ue.el=Xe.el,ae(B,ue,re)),Zt.asyncDep.then(()=>{B.isUnmounted||oe()});return}}let We=ue,zt;Ps(B,!1),ue?(ue.el=Xe.el,ae(B,ue,re)):ue=Xe,me&&mo(me),(zt=ue.props&&ue.props.onVnodeBeforeUpdate)&&Ut(zt,Me,ue,Xe),Ps(B,!0);const Et=rr(B),wn=B.subTree;B.subTree=Et,v(wn,Et,d(wn.el),Ne(wn),B,X,Q),ue.el=Et.el,We===null&&pa(B,Et.el),Ce&&pt(Ce,X),(zt=ue.props&&ue.props.onVnodeUpdated)&&pt(()=>Ut(zt,Me,ue,Xe),X)}else{let ue;const{el:me,props:Ce}=R,{bm:Me,m:Xe,parent:We,root:zt,type:Et}=B,wn=_s(R);if(Ps(B,!1),Me&&mo(Me),!wn&&(ue=Ce&&Ce.onVnodeBeforeMount)&&Ut(ue,We,R),Ps(B,!0),me&&Qt){const Zt=()=>{B.subTree=rr(B),Qt(me,B.subTree,B,X,null)};wn&&Et.__asyncHydrate?Et.__asyncHydrate(me,B,Zt):Zt()}else{zt.ce&&zt.ce._def.shadowRoot!==!1&&zt.ce._injectChildStyle(Et);const Zt=B.subTree=rr(B);v(null,Zt,K,ee,B,X,Q),R.el=Zt.el}if(Xe&&pt(Xe,X),!wn&&(ue=Ce&&Ce.onVnodeMounted)){const Zt=R;pt(()=>Ut(ue,We,Zt),X)}(R.shapeFlag&256||We&&_s(We.vnode)&&We.vnode.shapeFlag&256)&&B.a&&pt(B.a,X),B.isMounted=!0,R=K=ee=null}};B.scope.on();const se=B.effect=new si(oe);B.scope.off();const Z=B.update=se.run.bind(se),ve=B.job=se.runIfDirty.bind(se);ve.i=B,ve.id=B.uid,se.scheduler=()=>vc(ve),Ps(B,!0),Z()},ae=(B,R,K)=>{R.component=B;const ee=B.vnode.props;B.vnode=R,B.next=null,bg(B,R.props,ee,K),_g(B,R.children,K),ts(),Uu(B),ns()},ne=(B,R,K,ee,X,Q,re,oe,se=!1)=>{const Z=B&&B.children,ve=B?B.shapeFlag:0,ue=R.children,{patchFlag:me,shapeFlag:Ce}=R;if(me>0){if(me&128){st(Z,ue,K,ee,X,Q,re,oe,se);return}else if(me&256){he(Z,ue,K,ee,X,Q,re,oe,se);return}}Ce&8?(ve&16&&we(Z,X,Q),ue!==Z&&f(K,ue)):ve&16?Ce&16?st(Z,ue,K,ee,X,Q,re,oe,se):we(Z,X,Q,!0):(ve&8&&f(K,""),Ce&16&&E(ue,K,ee,X,Q,re,oe,se))},he=(B,R,K,ee,X,Q,re,oe,se)=>{B=B||fo,R=R||fo;const Z=B.length,ve=R.length,ue=Math.min(Z,ve);let me;for(me=0;meve?we(B,X,Q,!0,!1,ue):E(R,K,ee,X,Q,re,oe,se,ue)},st=(B,R,K,ee,X,Q,re,oe,se)=>{let Z=0;const ve=R.length;let ue=B.length-1,me=ve-1;for(;Z<=ue&&Z<=me;){const Ce=B[Z],Me=R[Z]=se?vs(R[Z]):qt(R[Z]);if(Tn(Ce,Me))v(Ce,Me,K,null,X,Q,re,oe,se);else break;Z++}for(;Z<=ue&&Z<=me;){const Ce=B[ue],Me=R[me]=se?vs(R[me]):qt(R[me]);if(Tn(Ce,Me))v(Ce,Me,K,null,X,Q,re,oe,se);else break;ue--,me--}if(Z>ue){if(Z<=me){const Ce=me+1,Me=Ceme)for(;Z<=ue;)yt(B[Z],X,Q,!0),Z++;else{const Ce=Z,Me=Z,Xe=new Map;for(Z=Me;Z<=me;Z++){const en=R[Z]=se?vs(R[Z]):qt(R[Z]);en.key!=null&&Xe.set(en.key,Z)}let We,zt=0;const Et=me-Me+1;let wn=!1,Zt=0;const Do=new Array(Et);for(Z=0;Z=Et){yt(en,X,Q,!0);continue}let Mn;if(en.key!=null)Mn=Xe.get(en.key);else for(We=Me;We<=me;We++)if(Do[We-Me]===0&&Tn(en,R[We])){Mn=We;break}Mn===void 0?yt(en,X,Q,!0):(Do[Mn-Me]=Z+1,Mn>=Zt?Zt=Mn:wn=!0,v(en,R[Mn],K,null,X,Q,re,oe,se),zt++)}const Vu=wn?Sg(Do):fo;for(We=Vu.length-1,Z=Et-1;Z>=0;Z--){const en=Me+Z,Mn=R[en],Ou=R[en+1],Du=en+1{const{el:Q,type:re,transition:oe,children:se,shapeFlag:Z}=B;if(Z&6){je(B.component.subTree,R,K,ee);return}if(Z&128){B.suspense.move(R,K,ee);return}if(Z&64){re.move(B,R,K,bt);return}if(re===Y){s(Q,R,K);for(let ue=0;ueoe.enter(Q),X);else{const{leave:ue,delayLeave:me,afterLeave:Ce}=oe,Me=()=>{B.ctx.isUnmounted?o(Q):s(Q,R,K)},Xe=()=>{Q._isLeaving&&Q[Yn](!0),ue(Q,()=>{Me(),Ce&&Ce()})};me?me(Q,Me,Xe):Xe()}else s(Q,R,K)},yt=(B,R,K,ee=!1,X=!1)=>{const{type:Q,props:re,ref:oe,children:se,dynamicChildren:Z,shapeFlag:ve,patchFlag:ue,dirs:me,cacheIndex:Ce}=B;if(ue===-2&&(X=!1),oe!=null&&(ts(),yo(oe,null,K,B,!0),ns()),Ce!=null&&(R.renderCache[Ce]=void 0),ve&256){R.ctx.deactivate(B);return}const Me=ve&1&&me,Xe=!_s(B);let We;if(Xe&&(We=re&&re.onVnodeBeforeUnmount)&&Ut(We,R,B),ve&6)Zs(B.component,K,ee);else{if(ve&128){B.suspense.unmount(K,ee);return}Me&&Nn(B,null,R,"beforeUnmount"),ve&64?B.type.remove(B,R,K,bt,ee):Z&&!Z.hasOnce&&(Q!==Y||ue>0&&ue&64)?we(Z,R,K,!1,!0):(Q===Y&&ue&384||!X&&ve&16)&&we(se,R,K),ee&&jn(B)}(Xe&&(We=re&&re.onVnodeUnmounted)||Me)&&pt(()=>{We&&Ut(We,R,B),Me&&Nn(B,null,R,"unmounted")},K)},jn=B=>{const{type:R,el:K,anchor:ee,transition:X}=B;if(R===Y){cs(K,ee);return}if(R===Rs){_(B);return}const Q=()=>{o(K),X&&!X.persisted&&X.afterLeave&&X.afterLeave()};if(B.shapeFlag&1&&X&&!X.persisted){const{leave:re,delayLeave:oe}=X,se=()=>re(K,Q);oe?oe(B.el,Q,se):se()}else Q()},cs=(B,R)=>{let K;for(;B!==R;)K=h(B),o(B),B=K;o(R)},Zs=(B,R,K)=>{const{bum:ee,scope:X,job:Q,subTree:re,um:oe,m:se,a:Z}=B;xr(se),xr(Z),ee&&mo(ee),X.stop(),Q&&(Q.flags|=8,yt(re,B,R,K)),oe&&pt(oe,R),pt(()=>{B.isUnmounted=!0},R)},we=(B,R,K,ee=!1,X=!1,Q=0)=>{for(let re=Q;re{if(B.shapeFlag&6)return Ne(B.component.subTree);if(B.shapeFlag&128)return B.suspense.next();const R=h(B.anchor||B.el),K=R&&R[I1];return K?h(K):R};let Ke=!1;const gt=(B,R,K)=>{B==null?R._vnode&&yt(R._vnode,null,null,!0):v(R._vnode||null,B,R,null,null,null,K),R._vnode=B,Ke||(Ke=!0,Uu(),Sr(),Ke=!1)},bt={p:v,um:yt,m:je,r:jn,mt:q,mc:E,pc:ne,pbc:P,n:Ne,o:e};let Nt,Qt;return t&&([Nt,Qt]=t(bt)),{render:gt,hydrate:Nt,createApp:vg(gt,Nt)}}function Da({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ps({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function f0(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ic(e,t,n=!1){const s=e.children,o=t.children;if(ce(s)&&ce(o))for(let i=0;i>1,e[n[a]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,r=n[i-1];i-- >0;)n[i]=r,r=t[r];return n}function d0(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:d0(t)}function xr(e){if(e)for(let t=0;tqe(h0);function Hn(e,t){return Ti(e,null,t)}function da(e,t){return Ti(e,null,{flush:"post"})}function m0(e,t){return Ti(e,null,{flush:"sync"})}function te(e,t,n){return Ti(e,t,n)}function Ti(e,t,n=Le){const{immediate:s,deep:o,flush:i,once:r}=n,a=Ie({},n),c=t&&s||!t&&i!=="post";let u;if(wo){if(i==="sync"){const m=p0();u=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=Ht,m.resume=Ht,m.pause=Ht,m}}const f=St;a.call=(m,g,v)=>yn(m,f,g,v);let d=!1;i==="post"?a.scheduler=m=>{pt(m,f&&f.suspense)}:i!=="sync"&&(d=!0,a.scheduler=(m,g)=>{g?m():vc(m)}),a.augmentJob=m=>{t&&(m.flags|=4),d&&(m.flags|=2,f&&(m.id=f.uid,m.i=f))};const h=Tm(e,t,a);return wo&&(u?u.push(h):c&&h()),h}function Tg(e,t,n){const s=this.proxy,o=_e(e)?e.includes(".")?g0(s,e):()=>s[e]:e.bind(s,s);let i;ye(t)?i=t:(i=t.handler,n=t);const r=qs(this),a=Ti(o,i.bind(s),n);return r(),a}function g0(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{let f,d=Le,h;return m0(()=>{const m=e[o];Ot(f,m)&&(f=m,u())}),{get(){return c(),n.get?n.get(f):f},set(m){const g=n.set?n.set(m):m;if(!Ot(g,f)&&!(d!==Le&&Ot(m,d)))return;const v=s.vnode.props;v&&(t in v||o in v||i in v)&&(`onUpdate:${t}`in v||`onUpdate:${o}`in v||`onUpdate:${i}`in v)||(f=m,u()),s.emit(`update:${t}`,g),Ot(m,g)&&Ot(m,d)&&!Ot(g,h)&&u(),d=m,h=g}}});return a[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?r||Le:a,done:!1}:{done:!0}}}},a}const v0=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${tt(t)}Modifiers`]||e[`${Kt(t)}Modifiers`];function Eg(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Le;let o=n;const i=t.startsWith("update:"),r=i&&v0(s,t.slice(7));r&&(r.trim&&(o=n.map(f=>_e(f)?f.trim():f)),r.number&&(o=n.map(Zr)));let a,c=s[a=po(t)]||s[a=po(tt(t))];!c&&i&&(c=s[a=po(Kt(t))]),c&&yn(c,e,6,o);const u=s[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,yn(u,e,6,o)}}const xg=new WeakMap;function y0(e,t,n=!1){const s=n?xg:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let r={},a=!1;if(!ye(e)){const c=u=>{const f=y0(u,t,!0);f&&(a=!0,Ie(r,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!a?(Ue(e)&&s.set(e,null),null):(ce(i)?i.forEach(c=>r[c]=null):Ie(r,i),Ue(e)&&s.set(e,r),r)}function ha(e,t){return!e||!Ys(t)?!1:(t=t.slice(2).replace(/Once$/,""),Oe(e,t[0].toLowerCase()+t.slice(1))||Oe(e,Kt(t))||Oe(e,t))}function rr(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[i],slots:r,attrs:a,emit:c,render:u,renderCache:f,props:d,data:h,setupState:m,ctx:g,inheritAttrs:v}=e,b=li(e);let k,C;try{if(n.shapeFlag&4){const _=o||s,x=_;k=qt(u.call(x,_,f,d,m,h,g)),C=a}else{const _=t;k=qt(_.length>1?_(d,{attrs:a,slots:r,emit:c}):_(d,null)),C=t.props?a:$g(a)}}catch(_){Xo.length=0,Xs(_,e,1),k=H(ut)}let y=k;if(C&&v!==!1){const _=Object.keys(C),{shapeFlag:x}=y;_.length&&x&7&&(i&&_.some(ic)&&(C=Lg(C,i)),y=Rn(y,C,!1,!0))}return n.dirs&&(y=Rn(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&os(y,n.transition),k=y,li(b),k}function Ag(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||Ys(n))&&((t||(t={}))[n]=e[n]);return t},Lg=(e,t)=>{const n={};for(const s in e)(!ic(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ig(e,t,n){const{props:s,children:o,component:i}=e,{props:r,children:a,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?sf(s,r,u):!!r;if(c&8){const f=t.dynamicProps;for(let d=0;de.__isSuspense;let pl=0;const Pg={name:"Suspense",__isSuspense:!0,process(e,t,n,s,o,i,r,a,c,u){if(e==null)Fg(t,n,s,o,i,r,a,c,u);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}Bg(e,t,n,s,o,r,a,c,u)}},hydrate:Ng,normalize:Vg},Mg=Pg;function ui(e,t){const n=e.props&&e.props[t];ye(n)&&n()}function Fg(e,t,n,s,o,i,r,a,c){const{p:u,o:{createElement:f}}=c,d=f("div"),h=e.suspense=b0(e,o,s,t,d,n,i,r,a,c);u(null,h.pendingBranch=e.ssContent,d,null,s,h,i,r),h.deps>0?(ui(e,"onPending"),ui(e,"onFallback"),u(null,e.ssFallback,t,n,s,null,i,r),bo(h,e.ssFallback)):h.resolve(!1,!0)}function Bg(e,t,n,s,o,i,r,a,{p:c,um:u,o:{createElement:f}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const h=t.ssContent,m=t.ssFallback,{activeBranch:g,pendingBranch:v,isInFallback:b,isHydrating:k}=d;if(v)d.pendingBranch=h,Tn(v,h)?(c(v,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0?d.resolve():b&&(k||(c(g,m,n,s,o,null,i,r,a),bo(d,m)))):(d.pendingId=pl++,k?(d.isHydrating=!1,d.activeBranch=v):u(v,o,d),d.deps=0,d.effects.length=0,d.hiddenContainer=f("div"),b?(c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0?d.resolve():(c(g,m,n,s,o,null,i,r,a),bo(d,m))):g&&Tn(g,h)?(c(g,h,n,s,o,d,i,r,a),d.resolve(!0)):(c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0&&d.resolve()));else if(g&&Tn(g,h))c(g,h,n,s,o,d,i,r,a),bo(d,h);else if(ui(t,"onPending"),d.pendingBranch=h,h.shapeFlag&512?d.pendingId=h.component.suspenseId:d.pendingId=pl++,c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0)d.resolve();else{const{timeout:C,pendingId:y}=d;C>0?setTimeout(()=>{d.pendingId===y&&d.fallback(m)},C):C===0&&d.fallback(m)}}function b0(e,t,n,s,o,i,r,a,c,u,f=!1){const{p:d,m:h,um:m,n:g,o:{parentNode:v,remove:b}}=u;let k;const C=Og(e);C&&t&&t.pendingBranch&&(k=t.pendingId,t.deps++);const y=e.props?br(e.props.timeout):void 0,_=i,x={vnode:e,parent:t,parentComponent:n,namespace:r,container:s,hiddenContainer:o,deps:0,pendingId:pl++,timeout:typeof y=="number"?y:-1,activeBranch:null,pendingBranch:null,isInFallback:!f,isHydrating:f,isUnmounted:!1,effects:[],resolve($=!1,V=!1){const{vnode:E,activeBranch:I,pendingBranch:P,pendingId:N,effects:L,parentComponent:U,container:q,isInFallback:J}=x;let G=!1;x.isHydrating?x.isHydrating=!1:$||(G=I&&P.transition&&P.transition.mode==="out-in",G&&(I.transition.afterLeave=()=>{N===x.pendingId&&(h(P,q,i===_?g(I):i,0),ri(L),J&&E.ssFallback&&(E.ssFallback.el=null))}),I&&(v(I.el)===q&&(i=g(I)),m(I,U,x,!0),!G&&J&&E.ssFallback&&(E.ssFallback.el=null)),G||h(P,q,i,0)),bo(x,P),x.pendingBranch=null,x.isInFallback=!1;let ae=x.parent,ne=!1;for(;ae;){if(ae.pendingBranch){ae.effects.push(...L),ne=!0;break}ae=ae.parent}!ne&&!G&&ri(L),x.effects=[],C&&t&&t.pendingBranch&&k===t.pendingId&&(t.deps--,t.deps===0&&!V&&t.resolve()),ui(E,"onResolve")},fallback($){if(!x.pendingBranch)return;const{vnode:V,activeBranch:E,parentComponent:I,container:P,namespace:N}=x;ui(V,"onFallback");const L=g(E),U=()=>{x.isInFallback&&(d(null,$,P,L,I,null,N,a,c),bo(x,$))},q=$.transition&&$.transition.mode==="out-in";q&&(E.transition.afterLeave=U),x.isInFallback=!0,m(E,I,null,!0),q||U()},move($,V,E){x.activeBranch&&h(x.activeBranch,$,V,E),x.container=$},next(){return x.activeBranch&&g(x.activeBranch)},registerDep($,V,E){const I=!!x.pendingBranch;I&&x.deps++;const P=$.vnode.el;$.asyncDep.catch(N=>{Xs(N,$,0)}).then(N=>{if($.isUnmounted||x.isUnmounted||x.pendingId!==$.suspenseId)return;$.asyncResolved=!0;const{vnode:L}=$;vl($,N,!1),P&&(L.el=P);const U=!P&&$.subTree.el;V($,L,v(P||$.subTree.el),P?null:g($.subTree),x,r,E),U&&(L.placeholder=null,b(U)),pa($,L.el),I&&--x.deps===0&&x.resolve()})},unmount($,V){x.isUnmounted=!0,x.activeBranch&&m(x.activeBranch,n,$,V),x.pendingBranch&&m(x.pendingBranch,n,$,V)}};return x}function Ng(e,t,n,s,o,i,r,a,c){const u=t.suspense=b0(t,s,n,e.parentNode,document.createElement("div"),null,o,i,r,a,!0),f=c(e,u.pendingBranch=t.ssContent,n,u,i,r);return u.deps===0&&u.resolve(!1,!0),f}function Vg(e){const{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=of(s?n.default:n),e.ssFallback=s?of(n.fallback):H(ut)}function of(e){let t;if(ye(e)){const n=Ws&&e._c;n&&(e._d=!1,p()),e=e(),n&&(e._d=!0,t=Mt,w0())}return ce(e)&&(e=Ag(e)),e=qt(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function k0(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):ri(e)}function bo(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e;let o=t.el;for(;!o&&t.component;)t=t.component.subTree,o=t.el;n.el=o,s&&s.subTree===n&&(s.vnode.el=o,pa(s,o))}function Og(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Y=Symbol.for("v-fgt"),Ss=Symbol.for("v-txt"),ut=Symbol.for("v-cmt"),Rs=Symbol.for("v-stc"),Xo=[];let Mt=null;function p(e=!1){Xo.push(Mt=e?null:[])}function w0(){Xo.pop(),Mt=Xo[Xo.length-1]||null}let Ws=1;function fi(e,t=!1){Ws+=e,e<0&&Mt&&t&&(Mt.hasOnce=!0)}function C0(e){return e.dynamicChildren=Ws>0?Mt||fo:null,w0(),Ws>0&&Mt&&Mt.push(e),e}function w(e,t,n,s,o,i){return C0(S(e,t,n,s,o,i,!0))}function D(e,t,n,s,o){return C0(H(e,t,n,s,o,!0))}function Ln(e){return e?e.__v_isVNode===!0:!1}function Tn(e,t){return e.type===t.type&&e.key===t.key}function Dg(e){}const _0=({key:e})=>e??null,ar=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?_e(e)||Ye(e)||ye(e)?{i:Tt,r:e,k:t,f:!!n}:e:null);function S(e,t=null,n=null,s=0,o=null,i=e===Y?0:1,r=!1,a=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&_0(t),ref:t&&ar(t),scopeId:aa,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Tt};return a?(Pc(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=_e(n)?8:16),Ws>0&&!r&&Mt&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Mt.push(c),c}const H=Rg;function Rg(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===Y1)&&(e=ut),Ln(e)){const a=Rn(e,t,!0);return n&&Pc(a,n),Ws>0&&!i&&Mt&&(a.shapeFlag&6?Mt[Mt.indexOf(e)]=a:Mt.push(a)),a.patchFlag=-2,a}if(Kg(e)&&(e=e.__vccOpts),t){t=Ze(t);let{class:a,style:c}=t;a&&!_e(a)&&(t.class=T(a)),Ue(c)&&(ra(c)&&!ce(c)&&(c=Ie({},c)),t.style=Fe(c))}const r=_e(e)?1:Ar(e)?128:P1(e)?64:Ue(e)?4:ye(e)?2:0;return S(e,t,n,s,o,r,i,!0)}function Ze(e){return e?ra(e)||n0(e)?Ie({},e):e:null}function Rn(e,t,n=!1,s=!1){const{props:o,ref:i,patchFlag:r,children:a,transition:c}=e,u=t?nt(o||{},t):o,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&_0(u),ref:t&&t.ref?n&&i?ce(i)?i.concat(ar(t)):[i,ar(t)]:ar(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Y?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Rn(e.ssContent),ssFallback:e.ssFallback&&Rn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&os(f,c.clone(f)),f}function rt(e=" ",t=0){return H(Ss,null,e,t)}function S0(e,t){const n=H(Rs,null,e);return n.staticCount=t,n}function A(e="",t=!1){return t?(p(),D(ut,null,e)):H(ut,null,e)}function qt(e){return e==null||typeof e=="boolean"?H(ut):ce(e)?H(Y,null,e.slice()):Ln(e)?vs(e):H(Ss,null,String(e))}function vs(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Rn(e)}function Pc(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),Pc(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!n0(t)?t._ctx=Tt:o===3&&Tt&&(Tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ye(t)?(t={default:t,_ctx:Tt},n=32):(t=String(t),s&64?(n=16,t=[rt(t)]):n=8);e.children=t,e.shapeFlag|=n}function nt(...e){const t={};for(let n=0;nSt||Tt;let $r,ml;{const e=ea(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),i=>{o.length>1?o.forEach(r=>r(i)):o[0](i)}};$r=t("__VUE_INSTANCE_SETTERS__",n=>St=n),ml=t("__VUE_SSR_SETTERS__",n=>wo=n)}const qs=e=>{const t=St;return $r(e),e.scope.on(),()=>{e.scope.off(),$r(t)}},gl=()=>{St&&St.scope.off(),$r(null)};function E0(e){return e.vnode.shapeFlag&4}let wo=!1;function x0(e,t=!1,n=!1){t&&ml(t);const{props:s,children:o}=e.vnode,i=E0(e);yg(e,s,i,t),Cg(e,o,n||t);const r=i?jg(e,t):void 0;return t&&ml(!1),r}function jg(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ul);const{setup:s}=n;if(s){ts();const o=e.setupContext=s.length>1?$0(e):null,i=qs(e),r=Po(s,e,0,[e.props,o]),a=ac(r);if(ns(),i(),(a||e.sp)&&!_s(e)&&kc(e),a){if(r.then(gl,gl),t)return r.then(c=>{vl(e,c,t)}).catch(c=>{Xs(c,e,0)});e.asyncDep=r}else vl(e,r,t)}else A0(e,t)}function vl(e,t,n){ye(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ue(t)&&(e.setupState=mc(t)),A0(e,n)}let Lr,yl;function Ug(e){Lr=e,yl=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,tg))}}const Wg=()=>!Lr;function A0(e,t,n){const s=e.type;if(!e.render){if(!t&&Lr&&!s.render){const o=s.template||xc(e).template;if(o){const{isCustomElement:i,compilerOptions:r}=e.appContext.config,{delimiters:a,compilerOptions:c}=s,u=Ie(Ie({isCustomElement:i,delimiters:a},r),c);s.render=Lr(o,u)}}e.render=s.render||Ht,yl&&yl(e)}{const o=qs(e);ts();try{fg(e)}finally{ns(),o()}}}const qg={get(e,t){return Pt(e,"get",""),e[t]}};function $0(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,qg),slots:e.slots,emit:e.emit,expose:t}}function Ei(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(mc(go(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jo)return Jo[n](e)},has(t,n){return n in t||n in Jo}})):e.proxy}function bl(e,t=!0){return ye(e)?e.displayName||e.name:e.name||t&&e.__name}function Kg(e){return ye(e)&&"__vccOpts"in e}const M=(e,t)=>wm(e,t,wo);function nn(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Ue(t)&&!ce(t)?Ln(t)?H(e,null,[t]):H(e,t):H(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Ln(n)&&(n=[n]),H(e,t,n))}finally{fi(1)}}function Yg(){}function Gg(e,t,n,s){const o=n[s];if(o&&L0(o,e))return o;const i=t();return i.memo=e.slice(),i.cacheIndex=s,n[s]=i}function L0(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&Mt&&Mt.push(e),!0}const I0="3.5.24",Jg=Ht,Xg=Lm,Qg=io,Zg=L1,ev={createComponentInstance:T0,setupComponent:x0,renderComponentRoot:rr,setCurrentRenderingInstance:li,isVNode:Ln,normalizeVNode:qt,getComponentPublicInstance:Ei,ensureValidVNode:Tc,pushWarningContext:Em,popWarningContext:xm},tv=ev,nv=null,sv=null,ov=null;let kl;const rf=typeof window<"u"&&window.trustedTypes;if(rf)try{kl=rf.createPolicy("vue",{createHTML:e=>e})}catch{}const P0=kl?e=>kl.createHTML(e):e=>e,iv="http://www.w3.org/2000/svg",rv="http://www.w3.org/1998/Math/MathML",Kn=typeof document<"u"?document:null,af=Kn&&Kn.createElement("template"),av={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?Kn.createElementNS(iv,e):t==="mathml"?Kn.createElementNS(rv,e):n?Kn.createElement(e,{is:n}):Kn.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Kn.createTextNode(e),createComment:e=>Kn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Kn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const r=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{af.innerHTML=P0(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const a=af.content;if(s==="svg"||s==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}t.insertBefore(a,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},us="transition",Ho="animation",Co=Symbol("_vtc"),M0={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},F0=Ie({},bc,M0),lv=e=>(e.displayName="Transition",e.props=F0,e),vt=lv((e,{slots:t})=>nn(V1,B0(e),t)),Ms=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},lf=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function B0(e){const t={};for(const L in e)L in M0||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=r,appearToClass:f=a,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,g=cv(o),v=g&&g[0],b=g&&g[1],{onBeforeEnter:k,onEnter:C,onEnterCancelled:y,onLeave:_,onLeaveCancelled:x,onBeforeAppear:$=k,onAppear:V=C,onAppearCancelled:E=y}=t,I=(L,U,q,J)=>{L._enterCancelled=J,hs(L,U?f:a),hs(L,U?u:r),q&&q()},P=(L,U)=>{L._isLeaving=!1,hs(L,d),hs(L,m),hs(L,h),U&&U()},N=L=>(U,q)=>{const J=L?V:C,G=()=>I(U,L,q);Ms(J,[U,G]),cf(()=>{hs(U,L?c:i),Fn(U,L?f:a),lf(J)||uf(U,s,v,G)})};return Ie(t,{onBeforeEnter(L){Ms(k,[L]),Fn(L,i),Fn(L,r)},onBeforeAppear(L){Ms($,[L]),Fn(L,c),Fn(L,u)},onEnter:N(!1),onAppear:N(!0),onLeave(L,U){L._isLeaving=!0;const q=()=>P(L,U);Fn(L,d),L._enterCancelled?(Fn(L,h),wl(L)):(wl(L),Fn(L,h)),cf(()=>{L._isLeaving&&(hs(L,d),Fn(L,m),lf(_)||uf(L,s,b,q))}),Ms(_,[L,q])},onEnterCancelled(L){I(L,!1,void 0,!0),Ms(y,[L])},onAppearCancelled(L){I(L,!0,void 0,!0),Ms(E,[L])},onLeaveCancelled(L){P(L),Ms(x,[L])}})}function cv(e){if(e==null)return null;if(Ue(e))return[Ra(e.enter),Ra(e.leave)];{const t=Ra(e);return[t,t]}}function Ra(e){return br(e)}function Fn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Co]||(e[Co]=new Set)).add(t)}function hs(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Co];n&&(n.delete(t),n.size||(e[Co]=void 0))}function cf(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let uv=0;function uf(e,t,n,s){const o=e._endId=++uv,i=()=>{o===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:r,timeout:a,propCount:c}=N0(e,t);if(!r)return s();const u=r+"end";let f=0;const d=()=>{e.removeEventListener(u,h),i()},h=m=>{m.target===e&&++f>=c&&d()};setTimeout(()=>{f(n[g]||"").split(", "),o=s(`${us}Delay`),i=s(`${us}Duration`),r=ff(o,i),a=s(`${Ho}Delay`),c=s(`${Ho}Duration`),u=ff(a,c);let f=null,d=0,h=0;t===us?r>0&&(f=us,d=r,h=i.length):t===Ho?u>0&&(f=Ho,d=u,h=c.length):(d=Math.max(r,u),f=d>0?r>u?us:Ho:null,h=f?f===us?i.length:c.length:0);const m=f===us&&/\b(?:transform|all)(?:,|$)/.test(s(`${us}Property`).toString());return{type:f,timeout:d,propCount:h,hasTransform:m}}function ff(e,t){for(;e.lengthdf(n)+df(e[s])))}function df(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function wl(e){return(e?e.ownerDocument:document).body.offsetHeight}function fv(e,t,n){const s=e[Co];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ir=Symbol("_vod"),V0=Symbol("_vsh"),at={name:"show",beforeMount(e,{value:t},{transition:n}){e[Ir]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):zo(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),zo(e,!0),s.enter(e)):s.leave(e,()=>{zo(e,!1)}):zo(e,t))},beforeUnmount(e,{value:t}){zo(e,t)}};function zo(e,t){e.style.display=t?e[Ir]:"none",e[V0]=!t}function dv(){at.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const O0=Symbol("");function hv(e){const t=dt();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Pr(i,o))},s=()=>{const o=e(t.proxy);t.ce?Pr(t.ce,o):Cl(t.subTree,o),n(o)};Cc(()=>{ri(s)}),be(()=>{te(s,Ht,{flush:"post"});const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),cn(()=>o.disconnect())})}function Cl(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Cl(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Pr(e.el,t);else if(e.type===Y)e.children.forEach(n=>Cl(n,t));else if(e.type===Rs){let{el:n,anchor:s}=e;for(;n&&(Pr(n,t),n!==s);)n=n.nextSibling}}function Pr(e,t){if(e.nodeType===1){const n=e.style;let s="";for(const o in t){const i=W2(t[o]);n.setProperty(`--${o}`,i),s+=`--${o}: ${i};`}n[O0]=s}}const pv=/(?:^|;)\s*display\s*:/;function mv(e,t,n){const s=e.style,o=_e(n);let i=!1;if(n&&!o){if(t)if(_e(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();n[a]==null&&lr(s,a,"")}else for(const r in t)n[r]==null&&lr(s,r,"");for(const r in n)r==="display"&&(i=!0),lr(s,r,n[r])}else if(o){if(t!==n){const r=s[O0];r&&(n+=";"+r),s.cssText=n,i=pv.test(n)}}else t&&e.removeAttribute("style");Ir in e&&(e[Ir]=i?s.display:"",e[V0]&&(s.display="none"))}const hf=/\s*!important$/;function lr(e,t,n){if(ce(n))n.forEach(s=>lr(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=gv(e,t);hf.test(n)?e.setProperty(Kt(s),n.replace(hf,""),"important"):e[s]=n}}const pf=["Webkit","Moz","ms"],Ha={};function gv(e,t){const n=Ha[t];if(n)return n;let s=tt(t);if(s!=="filter"&&s in e)return Ha[t]=s;s=Js(s);for(let o=0;oza||(kv.then(()=>za=0),za=Date.now());function Cv(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;yn(_v(s,n.value),t,5,[s])};return n.value=e,n.attached=wv(),n}function _v(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const kf=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Sv=(e,t,n,s,o,i)=>{const r=o==="svg";t==="class"?fv(e,s,r):t==="style"?mv(e,n,s):Ys(t)?ic(t)||yv(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Tv(e,t,s,r))?(vf(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&gf(e,t,s,r,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!_e(s))?vf(e,tt(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),gf(e,t,s,r))};function Tv(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&kf(t)&&ye(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return kf(t)&&_e(n)?!1:t in e}const wf={};function D0(e,t,n){let s=z(e,t);Xr(s)&&(s=Ie({},s,t));class o extends ma{constructor(r){super(s,r,n)}}return o.def=s,o}const Ev=((e,t)=>D0(e,t,G0)),xv=typeof HTMLElement<"u"?HTMLElement:class{};class ma extends xv{constructor(t,n={},s=Fr){super(),this._def=t,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&s!==Fr?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(Ie({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof ma){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,ze(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let s=0;s{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:r}=s;let a;if(i&&!ce(i))for(const c in i){const u=i[c];(u===Number||u&&u.type===Number)&&(c in this._props&&(this._props[c]=br(this._props[c])),(a||(a=Object.create(null)))[tt(c)]=!0)}this._numberProps=a,this._resolveProps(s),this.shadowRoot&&this._applyStyles(r),this._mount(s)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,t(this._def=s,!0)}):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const s in n)Oe(this,s)||Object.defineProperty(this,s,{get:()=>l(n[s])})}_resolveProps(t){const{props:n}=t,s=ce(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&s.includes(o)&&this._setProp(o,this[o]);for(const o of s.map(tt))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(i){this._setProp(o,i,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let s=n?this.getAttribute(t):wf;const o=tt(t);n&&this._numberProps&&this._numberProps[o]&&(s=br(s)),this._setProp(o,s,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,o=!1){if(n!==this._props[t]&&(this._dirty=!0,n===wf?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),o&&this._instance&&this._update(),s)){const i=this._ob;i&&(this._processMutations(i.takeRecords()),i.disconnect()),n===!0?this.setAttribute(Kt(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(Kt(t),n+""):n||this.removeAttribute(Kt(t)),i&&i.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),di(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=H(this._def,Ie(t,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0;const o=(i,r)=>{this.dispatchEvent(new CustomEvent(i,Xr(r[0])?Ie({detail:r},r[0]):{detail:r}))};s.emit=(i,...r)=>{o(i,r),Kt(i)!==i&&o(Kt(i),r)},this._setParent()}),n}_applyStyles(t,n){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const s=this._nonce;for(let o=t.length-1;o>=0;o--){const i=document.createElement("style");s&&i.setAttribute("nonce",s),i.textContent=t[o],this.shadowRoot.prepend(i)}}_parseSlots(){const t=this._slots={};let n;for(;n=this.firstChild;){const s=n.nodeType===1&&n.getAttribute("slot")||"default";(t[s]||(t[s]=[])).push(n),this.removeChild(n)}}_renderSlots(){const t=this._getSlots(),n=this._instance.type.__scopeId;for(let s=0;s(delete e.props.mode,e),Iv=Lv({name:"TransitionGroup",props:Ie({},F0,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=dt(),s=yc();let o,i;return Mo(()=>{if(!o.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!Bv(o[0].el,n.vnode.el,r)){o=[];return}o.forEach(Pv),o.forEach(Mv);const a=o.filter(Fv);wl(n.vnode.el),a.forEach(c=>{const u=c.el,f=u.style;Fn(u,r),f.transform=f.webkitTransform=f.transitionDuration="";const d=u[Mr]=h=>{h&&h.target!==u||(!h||h.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",d),u[Mr]=null,hs(u,r))};u.addEventListener("transitionend",d)}),o=[]}),()=>{const r=Pe(e),a=B0(r);let c=r.tag||Y;if(o=[],i)for(let u=0;u{a.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(a=>a&&s.classList.add(a)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:r}=N0(s);return i.removeChild(s),r}const xs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>mo(t,n):t};function Nv(e){e.target.composing=!0}function _f(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vn=Symbol("_assign");function Sf(e,t,n){return t&&(e=e.trim()),n&&(e=Zr(e)),e}const _o={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[vn]=xs(o);const i=s||o.props&&o.props.type==="number";Xn(e,t?"change":"input",r=>{r.target.composing||e[vn](Sf(e.value,n,i))}),(n||i)&&Xn(e,"change",()=>{e.value=Sf(e.value,n,i)}),t||(Xn(e,"compositionstart",Nv),Xn(e,"compositionend",_f),Xn(e,"change",_f))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:i}},r){if(e[vn]=xs(r),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?Zr(e.value):e.value,c=t??"";a!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===c)||(e.value=c))}},Mc={deep:!0,created(e,t,n){e[vn]=xs(n),Xn(e,"change",()=>{const s=e._modelValue,o=So(e),i=e.checked,r=e[vn];if(ce(s)){const a=ta(s,o),c=a!==-1;if(i&&!c)r(s.concat(o));else if(!i&&c){const u=[...s];u.splice(a,1),r(u)}}else if(Gs(s)){const a=new Set(s);i?a.add(o):a.delete(o),r(a)}else r(U0(e,i))})},mounted:Tf,beforeUpdate(e,t,n){e[vn]=xs(n),Tf(e,t,n)}};function Tf(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(ce(t))o=ta(t,s.props.value)>-1;else if(Gs(t))o=t.has(s.props.value);else{if(t===n)return;o=Es(t,U0(e,!0))}e.checked!==o&&(e.checked=o)}const ga={created(e,{value:t},n){e.checked=Es(t,n.props.value),e[vn]=xs(n),Xn(e,"change",()=>{e[vn](So(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vn]=xs(s),t!==n&&(e.checked=Es(t,s.props.value))}},j0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=Gs(t);Xn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?Zr(So(r)):So(r));e[vn](e.multiple?o?new Set(i):i:i[0]),e._assigning=!0,ze(()=>{e._assigning=!1})}),e[vn]=xs(s)},mounted(e,{value:t}){Ef(e,t)},beforeUpdate(e,t,n){e[vn]=xs(n)},updated(e,{value:t}){e._assigning||Ef(e,t)}};function Ef(e,t){const n=e.multiple,s=ce(t);if(!(n&&!s&&!Gs(t))){for(let o=0,i=e.options.length;oString(u)===String(a)):r.selected=ta(t,a)>-1}else r.selected=t.has(a);else if(Es(So(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function So(e){return"_value"in e?e._value:e.value}function U0(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Fc={created(e,t,n){Ui(e,t,n,null,"created")},mounted(e,t,n){Ui(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Ui(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Ui(e,t,n,s,"updated")}};function W0(e,t){switch(e){case"SELECT":return j0;case"TEXTAREA":return _o;default:switch(t){case"checkbox":return Mc;case"radio":return ga;default:return _o}}}function Ui(e,t,n,s,o){const r=W0(e.tagName,n.props&&n.props.type)[o];r&&r(e,t,n,s)}function Vv(){_o.getSSRProps=({value:e})=>({value:e}),ga.getSSRProps=({value:e},t)=>{if(t.props&&Es(t.props.value,e))return{checked:!0}},Mc.getSSRProps=({value:e},t)=>{if(ce(e)){if(t.props&&ta(e,t.props.value)>-1)return{checked:!0}}else if(Gs(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Fc.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=W0(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const Ov=["ctrl","shift","alt","meta"],Dv={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ov.some(n=>e[`${n}Key`]&&!t.includes(n))},To=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((o,...i)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(o=>{if(!("key"in o))return;const i=Kt(o.key);if(t.some(r=>r===i||Rv[r]===i))return e(o)}))},q0=Ie({patchProp:Sv},av);let Qo,xf=!1;function K0(){return Qo||(Qo=l0(q0))}function Y0(){return Qo=xf?Qo:c0(q0),xf=!0,Qo}const di=((...e)=>{K0().render(...e)}),Hv=((...e)=>{Y0().hydrate(...e)}),Fr=((...e)=>{const t=K0().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=X0(s);if(!o)return;const i=t._component;!ye(i)&&!i.render&&!i.template&&(i.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=n(o,!1,J0(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t}),G0=((...e)=>{const t=Y0().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=X0(s);if(o)return n(o,!0,J0(o))},t});function J0(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function X0(e){return _e(e)?document.querySelector(e):e}let Af=!1;const zv=()=>{Af||(Af=!0,Vv(),dv())};const jv=()=>{},Uv=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:V1,BaseTransitionPropsValidators:bc,Comment:ut,DeprecationTypes:ov,EffectScope:cc,ErrorCodes:$m,ErrorTypeStrings:Xg,Fragment:Y,KeepAlive:Xm,ReactiveEffect:si,Static:Rs,Suspense:Mg,Teleport:la,Text:Ss,TrackOpTypes:Cm,Transition:vt,TransitionGroup:Qs,TriggerOpTypes:_m,VueElement:ma,assertNumber:Am,callWithAsyncErrorHandling:yn,callWithErrorHandling:Po,camelize:tt,capitalize:Js,cloneVNode:Rn,compatUtils:sv,compile:jv,computed:M,createApp:Fr,createBlock:D,createCommentVNode:A,createElementBlock:w,createElementVNode:S,createHydrationRenderer:c0,createPropsRestProxy:X1,createRenderer:l0,createSSRApp:G0,createSlots:Wt,createStaticVNode:S0,createTextVNode:rt,createVNode:H,customRef:gc,defineAsyncComponent:wc,defineComponent:z,defineCustomElement:D0,defineEmits:sg,defineExpose:og,defineModel:ag,defineOptions:ig,defineProps:ng,defineSSRCustomElement:Ev,defineSlots:rg,devtools:Qg,effect:K2,effectScope:r1,getCurrentInstance:dt,getCurrentScope:Ci,getCurrentWatcher:Sm,getTransitionRawChildren:ca,guardReactiveProps:Ze,h:nn,handleError:Xs,hasInjectionContext:Ac,hydrate:Hv,hydrateOnIdle:Um,hydrateOnInteraction:Ym,hydrateOnMediaQuery:Km,hydrateOnVisible:qm,initCustomFormatter:Yg,initDirectivesForSSR:zv,inject:qe,isMemoSame:L0,isProxy:ra,isReactive:Cs,isReadonly:ss,isRef:Ye,isRuntimeOnly:Wg,isShallow:an,isVNode:Ln,markRaw:go,mergeDefaults:J1,mergeModels:$n,mergeProps:nt,nextTick:ze,normalizeClass:T,normalizeProps:Ge,normalizeStyle:Fe,onActivated:H1,onBeforeMount:fa,onBeforeUnmount:as,onBeforeUpdate:Cc,onDeactivated:z1,onErrorCaptured:K1,onMounted:be,onRenderTracked:q1,onRenderTriggered:W1,onScopeDispose:uc,onServerPrefetch:U1,onUnmounted:cn,onUpdated:Mo,onWatcherCleanup:T1,openBlock:p,popScopeId:Fm,provide:In,proxyRefs:mc,pushScopeId:Mm,queuePostFlushCb:ri,reactive:Dn,readonly:It,ref:j,registerRuntimeCompiler:Ug,render:di,renderList:le,renderSlot:F,resolveComponent:un,resolveDirective:eg,resolveDynamicComponent:Be,resolveFilter:nv,resolveTransitionHooks:ko,setBlockTracking:fi,setDevtoolsHook:Zg,setTransitionHooks:os,shallowReactive:pc,shallowReadonly:al,shallowRef:He,ssrContextKey:h0,ssrUtils:tv,stop:Y2,toDisplayString:W,toHandlerKey:po,toHandlers:Ec,toRaw:Pe,toRef:_1,toRefs:vm,toValue:Se,transformVNodeArgs:Dg,triggerRef:pm,unref:l,useAttrs:cg,useCssModule:$v,useCssVars:hv,useHost:R0,useId:D1,useModel:Jt,useSSRContext:p0,useShadowRoot:Av,useSlots:Si,useTemplateRef:R1,useTransitionState:yc,vModelCheckbox:Mc,vModelDynamic:Fc,vModelRadio:ga,vModelSelect:j0,vModelText:_o,vShow:at,version:I0,warn:Jg,watch:te,watchEffect:Hn,watchPostEffect:da,watchSyncEffect:m0,withAsyncContext:ug,withCtx:O,withDefaults:lg,withDirectives:et,withKeys:va,withMemo:Gg,withModifiers:To,withScopeId:Bm},Symbol.toStringTag,{value:"Module"})),Q0=z({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(p(),w("span",{class:T(["VPBadge",e.type])},[F(t.$slots,"default",{},()=>[rt(W(e.text),1)])],2))}}),Wv={key:0,class:"VPBackdrop"},qv=z({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(p(),D(vt,{name:"fade"},{default:O(()=>[e.show?(p(),w("div",Wv)):A("",!0)]),_:1}))}}),ke=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},Kv=ke(qv,[["__scopeId","data-v-2fd4a63c"]]),Yv=window.__VP_SITE_DATA__;function Z0(e,t){return Ci()?(uc(e,t),!0):!1}const ja=new WeakMap,Gv=(...e)=>{var t;const n=e[0],s=(t=dt())===null||t===void 0?void 0:t.proxy,o=s??Ci();if(o==null&&!Ac())throw new Error("injectLocal must be called in setup");return o&&ja.has(o)&&n in ja.get(o)?ja.get(o)[n]:qe(...e)},Jv=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Xv=e=>e!=null,Qv=Object.prototype.toString,Zv=e=>Qv.call(e)==="[object Object]",As=()=>{};function Bc(...e){if(e.length!==1)return _1(...e);const t=e[0];return typeof t=="function"?It(gc(()=>({get:t,set:As}))):j(t)}function Nc(e,t){function n(...s){return new Promise((o,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(o).catch(i)})}return n}const eh=e=>e();function th(e,t={}){let n,s,o=As;const i=c=>{clearTimeout(c),o(),o=As};let r;return c=>{const u=Se(e),f=Se(t.maxWait);return n&&i(n),u<=0||f!==void 0&&f<=0?(s&&(i(s),s=void 0),Promise.resolve(c())):new Promise((d,h)=>{o=t.rejectOnCancel?h:d,r=c,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=void 0,d(r())},f)),n=setTimeout(()=>{s&&i(s),s=void 0,d(c())},u)})}}function e3(...e){let t=0,n,s=!0,o=As,i,r,a,c,u;!Ye(e[0])&&typeof e[0]=="object"?{delay:r,trailing:a=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[r,a=!0,c=!0,u=!1]=e;const f=()=>{n&&(clearTimeout(n),n=void 0,o(),o=As)};return h=>{const m=Se(r),g=Date.now()-t,v=()=>i=h();return f(),m<=0?(t=Date.now(),v()):(g>m?(t=Date.now(),(c||!s)&&v()):a&&(i=new Promise((b,k)=>{o=u?k:b,n=setTimeout(()=>{t=Date.now(),s=!0,b(v()),f()},Math.max(0,m-g))})),!c&&!n&&(n=setTimeout(()=>s=!0,m)),s=!1,i)}}function t3(e=eh,t={}){const{initialState:n="active"}=t,s=Bc(n==="active");function o(){s.value=!1}function i(){s.value=!0}const r=(...a)=>{s.value&&e(...a)};return{isActive:It(s),pause:o,resume:i,eventFilter:r}}function $f(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function cr(e){return Array.isArray(e)?e:[e]}function nh(e){return dt()}function n3(e,t=200,n={}){return Nc(th(t,n),e)}function s3(e,t=200,n=!1,s=!0,o=!1){return Nc(e3(t,n,s,o),e)}function sh(e,t,n={}){const{eventFilter:s=eh,...o}=n;return te(e,Nc(s,t),o)}function o3(e,t,n={}){const{eventFilter:s,initialState:o="active",...i}=n,{eventFilter:r,pause:a,resume:c,isActive:u}=t3(s,{initialState:o});return{stop:sh(e,t,{...i,eventFilter:r}),pause:a,resume:c,isActive:u}}function ya(e,t=!0,n){nh()?be(e,n):t?e():ze(e)}function i3(e,t){nh()&&cn(e,t)}function r3(e,t,n={}){const{debounce:s=0,maxWait:o=void 0,...i}=n;return sh(e,t,{...i,eventFilter:th(s,{maxWait:o})})}const VA=r3;function a3(e,t,n){return te(e,t,{...n,immediate:!0})}function OA(e,t,n){var s;let o;Ye(n)?o={evaluating:n}:o=n||{};const{lazy:i=!1,flush:r="sync",evaluating:a=void 0,shallow:c=!0,onError:u=(s=globalThis.reportError)!==null&&s!==void 0?s:As}=o,f=He(!i),d=c?He(t):j(t);let h=0;return Hn(async m=>{if(!f.value)return;h++;const g=h;let v=!1;a&&Promise.resolve().then(()=>{a.value=!0});try{const b=await e(k=>{m(()=>{a&&(a.value=!1),v||k()})});g===h&&(d.value=b)}catch(b){u(b)}finally{a&&g===h&&(a.value=!1),v=!0}},{flush:r}),i?M(()=>(f.value=!0,d.value)):d}const Rt=Jv?window:void 0;function ba(e){var t;const n=Se(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function is(...e){const t=(s,o,i,r)=>(s.addEventListener(o,i,r),()=>s.removeEventListener(o,i,r)),n=M(()=>{const s=cr(Se(e[0])).filter(o=>o!=null);return s.every(o=>typeof o!="string")?s:void 0});return a3(()=>{var s,o;return[(s=(o=n.value)===null||o===void 0?void 0:o.map(i=>ba(i)))!==null&&s!==void 0?s:[Rt].filter(i=>i!=null),cr(Se(n.value?e[1]:e[0])),cr(l(n.value?e[2]:e[1])),Se(n.value?e[3]:e[2])]},([s,o,i,r],a,c)=>{if(!s?.length||!o?.length||!i?.length)return;const u=Zv(r)?{...r}:r,f=s.flatMap(d=>o.flatMap(h=>i.map(m=>t(d,h,m,u))));c(()=>{f.forEach(d=>d())})},{flush:"post"})}function l3(){const e=He(!1),t=dt();return t&&be(()=>{e.value=!0},t),e}function Vc(e){const t=l3();return M(()=>(t.value,!!e()))}function c3(e,t,n={}){const{window:s=Rt,...o}=n;let i;const r=Vc(()=>s&&"MutationObserver"in s),a=()=>{i&&(i.disconnect(),i=void 0)},c=te(M(()=>{const d=cr(Se(e)).map(ba).filter(Xv);return new Set(d)}),d=>{a(),r.value&&d.size&&(i=new MutationObserver(t),d.forEach(h=>i.observe(h,o)))},{immediate:!0,flush:"post"}),u=()=>i?.takeRecords(),f=()=>{c(),a()};return Z0(f),{isSupported:r,stop:f,takeRecords:u}}function u3(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function _l(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:o=Rt,eventName:i="keydown",passive:r=!1,dedupe:a=!1}=s,c=u3(t);return is(o,i,f=>{f.repeat&&Se(a)||c(f)&&n(f)},r)}const f3=Symbol("vueuse-ssr-width");function d3(){const e=Ac()?Gv(f3,null):null;return typeof e=="number"?e:void 0}function Br(e,t={}){const{window:n=Rt,ssrWidth:s=d3()}=t,o=Vc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=He(typeof s=="number"),r=He(),a=He(!1),c=u=>{a.value=u.matches};return Hn(()=>{if(i.value){i.value=!o.value,a.value=Se(e).split(",").some(u=>{const f=u.includes("not all"),d=u.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),h=u.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let m=!!(d||h);return d&&m&&(m=s>=$f(d[1])),h&&m&&(m=s<=$f(h[1])),f?!m:m});return}o.value&&(r.value=n.matchMedia(Se(e)),a.value=r.value.matches)}),is(r,"change",c,{passive:!0}),M(()=>a.value)}const Wi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},qi="__vueuse_ssr_handlers__",h3=p3();function p3(){return qi in Wi||(Wi[qi]=Wi[qi]||{}),Wi[qi]}function oh(e,t){return h3[e]||t}function ih(e){return Br("(prefers-color-scheme: dark)",e)}function m3(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const g3={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Lf="vueuse-storage";function Oc(e,t,n,s={}){var o;const{flush:i="pre",deep:r=!0,listenToStorageChanges:a=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:d=Rt,eventFilter:h,onError:m=q=>{console.error(q)},initOnMounted:g}=s,v=(f?He:j)(typeof t=="function"?t():t),b=M(()=>Se(e));if(!n)try{n=oh("getDefaultStorage",()=>Rt?.localStorage)()}catch(q){m(q)}if(!n)return v;const k=Se(t),C=m3(k),y=(o=s.serializer)!==null&&o!==void 0?o:g3[C],{pause:_,resume:x}=o3(v,q=>P(q),{flush:i,deep:r,eventFilter:h});te(b,()=>L(),{flush:i});let $=!1;const V=q=>{g&&!$||L(q)},E=q=>{g&&!$||U(q)};d&&a&&(n instanceof Storage?is(d,"storage",V,{passive:!0}):is(d,Lf,E)),g?ya(()=>{$=!0,L()}):L();function I(q,J){if(d){const G={key:b.value,oldValue:q,newValue:J,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",G):new CustomEvent(Lf,{detail:G}))}}function P(q){try{const J=n.getItem(b.value);if(q==null)I(J,null),n.removeItem(b.value);else{const G=y.write(q);J!==G&&(n.setItem(b.value,G),I(J,G))}}catch(J){m(J)}}function N(q){const J=q?q.newValue:n.getItem(b.value);if(J==null)return c&&k!=null&&n.setItem(b.value,y.write(k)),k;if(!q&&u){const G=y.read(J);return typeof u=="function"?u(G,k):C==="object"&&!Array.isArray(G)?{...k,...G}:G}else return typeof J!="string"?J:y.read(J)}function L(q){if(!(q&&q.storageArea!==n)){if(q&&q.key==null){v.value=k;return}if(!(q&&q.key!==b.value)){_();try{const J=y.write(v.value);(q===void 0||q?.newValue!==J)&&(v.value=N(q))}catch(J){m(J)}finally{q?ze(x):x()}}}}function U(q){L(q.detail)}return v}const v3="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function y3(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:o=Rt,storage:i,storageKey:r="vueuse-color-scheme",listenToStorageChanges:a=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},h=ih({window:o}),m=M(()=>h.value?"dark":"light"),g=c||(r==null?Bc(s):Oc(r,s,i,{window:o,listenToStorageChanges:a})),v=M(()=>g.value==="auto"?m.value:g.value),b=oh("updateHTMLAttrs",(_,x,$)=>{const V=typeof _=="string"?o?.document.querySelector(_):ba(_);if(!V)return;const E=new Set,I=new Set;let P=null;if(x==="class"){const L=$.split(/\s/g);Object.values(d).flatMap(U=>(U||"").split(/\s/g)).filter(Boolean).forEach(U=>{L.includes(U)?E.add(U):I.add(U)})}else P={key:x,value:$};if(E.size===0&&I.size===0&&P===null)return;let N;f&&(N=o.document.createElement("style"),N.appendChild(document.createTextNode(v3)),o.document.head.appendChild(N));for(const L of E)V.classList.add(L);for(const L of I)V.classList.remove(L);P&&V.setAttribute(P.key,P.value),f&&(o.getComputedStyle(N).opacity,document.head.removeChild(N))});function k(_){var x;b(t,n,(x=d[_])!==null&&x!==void 0?x:_)}function C(_){e.onChanged?e.onChanged(_,k):k(_)}te(v,C,{flush:"post",immediate:!0}),ya(()=>C(v.value));const y=M({get(){return u?g.value:v.value},set(_){g.value=_}});return Object.assign(y,{store:g,system:m,state:v})}function b3(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=y3({...e,onChanged:(i,r)=>{var a;e.onChanged?(a=e.onChanged)===null||a===void 0||a.call(e,i==="dark",r,i):r(i)},modes:{dark:t,light:n}}),o=M(()=>s.system.value);return M({get(){return s.value==="dark"},set(i){const r=i?"dark":"light";o.value===r?s.value="auto":s.value=r}})}function Ua(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const If=1;function k3(e,t={}){const{throttle:n=0,idle:s=200,onStop:o=As,onScroll:i=As,offset:r={left:0,right:0,top:0,bottom:0},observe:a={mutation:!1},eventListenerOptions:c={capture:!1,passive:!0},behavior:u="auto",window:f=Rt,onError:d=I=>{console.error(I)}}=t,h=typeof a=="boolean"?{mutation:a}:a,m=He(0),g=He(0),v=M({get(){return m.value},set(I){k(I,void 0)}}),b=M({get(){return g.value},set(I){k(void 0,I)}});function k(I,P){var N,L,U,q;if(!f)return;const J=Se(e);if(!J)return;(N=J instanceof Document?f.document.body:J)===null||N===void 0||N.scrollTo({top:(L=Se(P))!==null&&L!==void 0?L:b.value,left:(U=Se(I))!==null&&U!==void 0?U:v.value,behavior:Se(u)});const G=(J==null||(q=J.document)===null||q===void 0?void 0:q.documentElement)||J?.documentElement||J;v!=null&&(m.value=G.scrollLeft),b!=null&&(g.value=G.scrollTop)}const C=He(!1),y=Dn({left:!0,right:!1,top:!0,bottom:!1}),_=Dn({left:!1,right:!1,top:!1,bottom:!1}),x=I=>{C.value&&(C.value=!1,_.left=!1,_.right=!1,_.top=!1,_.bottom=!1,o(I))},$=n3(x,n+s),V=I=>{var P;if(!f)return;const N=(I==null||(P=I.document)===null||P===void 0?void 0:P.documentElement)||I?.documentElement||ba(I),{display:L,flexDirection:U,direction:q}=f.getComputedStyle(N),J=q==="rtl"?-1:1,G=N.scrollLeft;_.left=Gm.value;const ae=Math.abs(G*J)<=(r.left||0),ne=Math.abs(G*J)+N.clientWidth>=N.scrollWidth-(r.right||0)-If;L==="flex"&&U==="row-reverse"?(y.left=ne,y.right=ae):(y.left=ae,y.right=ne),m.value=G;let he=N.scrollTop;I===f.document&&!he&&(he=f.document.body.scrollTop),_.top=heg.value;const st=Math.abs(he)<=(r.top||0),je=Math.abs(he)+N.clientHeight>=N.scrollHeight-(r.bottom||0)-If;L==="flex"&&U==="column-reverse"?(y.top=je,y.bottom=st):(y.top=st,y.bottom=je),g.value=he},E=I=>{var P;f&&(V((P=I.target.documentElement)!==null&&P!==void 0?P:I.target),C.value=!0,$(I),i(I))};return is(e,"scroll",n?s3(E,n,!0,!1):E,c),ya(()=>{try{const I=Se(e);if(!I)return;V(I)}catch(I){d(I)}}),h?.mutation&&e!=null&&e!==f&&e!==document&&c3(e,()=>{const I=Se(e);I&&V(I)},{attributes:!0,childList:!0,subtree:!0}),is(e,"scrollend",x,c),{x:v,y:b,isScrolling:C,arrivedState:y,directions:_,measure(){const I=Se(e);f&&I&&V(I)}}}function DA(e,t,n={}){const{window:s=Rt}=n;return Oc(e,t,s?.localStorage,n)}function w3(e={}){const{window:t=Rt}=e,n=t?.navigator,s=Vc(()=>n&&"language"in n),o=He(n?.language);return is(t,"languagechange",()=>{n&&(o.value=n.language)},{passive:!0}),{isSupported:s,language:o}}const Wa=new WeakMap;function rh(e,t=!1){const n=He(t);let s="";te(Bc(e),r=>{const a=Ua(Se(r));if(a){const c=a;if(Wa.get(c)||Wa.set(c,c.style.overflow),c.style.overflow!=="hidden"&&(s=c.style.overflow),c.style.overflow==="hidden")return n.value=!0;if(n.value)return c.style.overflow="hidden"}},{immediate:!0});const o=()=>{const r=Ua(Se(e));!r||n.value||(r.style.overflow="hidden",n.value=!0)},i=()=>{const r=Ua(Se(e));!r||!n.value||(r.style.overflow=s,Wa.delete(r),n.value=!1)};return Z0(i),M({get(){return n.value},set(r){r?o():i()}})}function RA(e,t,n={}){const{window:s=Rt}=n;return Oc(e,t,s?.sessionStorage,n)}function ah(e={}){const{window:t=Rt,...n}=e;return k3(t,n)}function C3(e={}){const{window:t=Rt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:i=!0,type:r="inner"}=e,a=He(n),c=He(s),u=()=>{if(t)if(r==="outer")a.value=t.outerWidth,c.value=t.outerHeight;else if(r==="visual"&&t.visualViewport){const{width:d,height:h,scale:m}=t.visualViewport;a.value=Math.round(d*m),c.value=Math.round(h*m)}else i?(a.value=t.innerWidth,c.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),ya(u);const f={passive:!0};return is("resize",u,f),t&&r==="visual"&&t.visualViewport&&is(t.visualViewport,"resize",u,f),o&&te(Br("(orientation: portrait)"),()=>u()),{width:a,height:c}}const _3={};var S3={};const ka=/^(?:[a-z]+:|\/\/)/i,T3="vitepress-theme-appearance",lh=Symbol("stack-view:unpack"),E3=/#.*$/,x3=/[?#].*$/,A3=/(?:(^|\/)index)?\.(?:md|html)$/,wt=typeof document<"u",ch={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function $s(e,t,n=!1){if(t===void 0)return!1;if(e=Pf(`/${e}`),n)return new RegExp(t).test(e);if(Pf(t)!==e)return!1;const s=t.match(E3);return s?(wt?location.hash:"")===s[0]:!0}function Pf(e){return decodeURI(e).replace(x3,"").replace(A3,"$1")}function uh(e){return ka.test(e)}function $3(e,t){return Object.keys(e?.locales||{}).find(n=>n!=="root"&&!uh(n)&&$s(t,`^/${n}/`,!0))||"root"}function L3(e,t){const n=$3(e,t),{label:s,link:o,...i}=e.locales[n]??{};Object.assign(i,{localeIndex:n});const r=N3(e,t),a={head:M3(e.head??[],i.head??[],...r.map(c=>c.head??[]).reverse())};return Dc(a,...r,i,e)}function I3(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=P3(e.title,s);return n===o.slice(3)?n:`${n}${o}`}function P3(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function M3(...e){const t=[],n=new Map;for(const s of e)for(const o of s){const[i,r]=o,a=Object.entries(r)[0];if(i!=="meta"||!a){t.push(o);continue}const c=`${a[0]}=${a[1]}`,u=n.get(c);u!=null?t[u]=o:(n.set(c,t.length),t.push(o))}return t}const F3=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,B3=/^[a-z]:/i;function Mf(e){const t=B3.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(F3,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const qa=new Set;function fh(e){if(qa.size===0){const n=typeof process=="object"&&S3?.VITE_EXTRA_EXTENSIONS||_3?.VITE_EXTRA_EXTENSIONS||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>qa.add(s))}const t=e.split(".").pop();return t==null||!qa.has(t.toLowerCase())}function HA(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function N3({additionalConfig:e},t){if(e===void 0)return[];if(typeof e=="function")return e(t)??[];const n=[],s=t.split("/").slice(0,-1);for(;s.length;){const o=`/${s.join("/")}/`;n.push(e[o]),s.pop()}return n.push(e["/"]),n.filter(o=>o!==void 0)}function Dc(...e){const t=e.filter(o=>V3(o));if(t.length<=1)return e[0];const n=new Set(t.flatMap(o=>Reflect.ownKeys(o))),s=[...n];return new Proxy({},{get(o,i){return i===lh?t:Dc(...t.map(r=>r[i]).filter(r=>r!==void 0))},set(){throw new Error("StackView is read-only and cannot be mutated.")},has(o,i){return n.has(i)},ownKeys(){return s},getOwnPropertyDescriptor(o,i){for(const r of t){const a=Object.getOwnPropertyDescriptor(r,i);if(a)return a}}})}Dc.unpack=function(e){return e?.[lh]};function V3(e){return Object.prototype.toString.call(e)==="[object Object]"}const O3=["shellscript","shell","bash","sh","zsh"];function zA(e){return O3.includes(e)}const D3=Symbol(),bs=He(It(Yv));function jA(e){const t=M(()=>L3(bs.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?j(!0):n==="force-auto"?ih():n?b3({storageKey:T3,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):j(!1),o=j(wt?location.hash:"");return wt&&window.addEventListener("hashchange",()=>{o.value=location.hash}),te(()=>e.data,()=>{o.value=wt?location.hash:""}),{site:t,theme:M(()=>t.value.themeConfig),page:M(()=>e.data),frontmatter:M(()=>e.data.frontmatter),params:M(()=>e.data.params),lang:M(()=>t.value.lang),dir:M(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:M(()=>t.value.localeIndex||"root"),title:M(()=>I3(t.value,e.data)),description:M(()=>e.data.description||t.value.description),isDark:s,hash:M(()=>o.value)}}function Ae(){const e=qe(D3);if(!e)throw new Error("vitepress data not properly injected in app");return e}function R3(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ee(e){return ka.test(e)||!e.startsWith("/")?e:R3(bs.value.base,e)}function UA(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),wt){t=Mf(t.slice(1).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`/assets/${t}.${s}.js`}else t=`./${Mf(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ur=[];function xi(e){ur.push(e),i3(()=>{ur=ur.filter(t=>t!==e)})}function Rc(){let e=bs.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ff(e,n);else if(Array.isArray(e))for(const s of e){const o=Ff(s,n);if(o){t=o;break}}return t}function Ff(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const H3=Symbol(),dh="http://a.com",z3=()=>({path:"/",hash:"",query:"",component:null,data:ch});function WA(e,t){const n=Dn(z3()),s={route:n,async go(a,c){a=Tl(a),await s.onBeforeRouteChange?.(a)!==!1&&((!wt||await j3(a,c))&&await i(a),r(),await s.onAfterRouteChange?.(a))}};let o=null;async function i(a,c=0,u=!1){if(await s.onBeforePageLoad?.(a)===!1)return;const f=new URL(a,dh),d=o=f.pathname;try{let h=await e(d);if(!h)throw new Error(`Page not found: ${d}`);if(o===d){o=null;const{default:m,__pageData:g}=h;if(!m)throw new Error(`Invalid route component: ${m}`);await s.onAfterPageLoad?.(a),n.path=wt?d:Ee(d),n.component=go(m),n.data=go(g),r(f),wt&&ze(()=>{let v=bs.value.base+g.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");return!bs.value.cleanUrls&&!v.endsWith("/")&&(v+=".html"),v!==f.pathname&&(f.pathname=v,a=v+f.search+f.hash,history.replaceState({},"",a)),Sl(f.hash,!1,c)})}}catch(h){if(!/fetch|Page not found/.test(h.message)&&!/^\/404(\.html|\/)?$/.test(a)&&console.error(h),!u)try{const m=await fetch(bs.value.base+"hashmap.json");window.__VP_HASH_MAP__=await m.json(),await i(a,c,!0);return}catch{}if(o===d){o=null,n.path=wt?d:Ee(d),n.component=t?go(t):null;const m=wt?n.path.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").slice(bs.value.base.length):"404.md";n.data={...ch,relativePath:m},r(f)}}}function r(a=wt?location:{search:"",hash:""}){n.query=a.search,n.hash=decodeURIComponent(a.hash)}return wt&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",a=>{if(a.defaultPrevented||!(a.target instanceof Element)||a.target.closest("button")||a.button!==0||a.ctrlKey||a.shiftKey||a.altKey||a.metaKey)return;const c=a.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:d,pathname:h}=new URL(u,c.baseURI),m=new URL(location.href);d===m.origin&&fh(h)&&(a.preventDefault(),s.go(f,{smoothScroll:c.classList.contains("header-anchor")}))},{capture:!0}),window.addEventListener("popstate",async a=>{if(a.state===null)return;const c=Tl(location.href);await i(c,a.state&&a.state.scrollPosition||0),r(),await s.onAfterRouteChange?.(c)}),window.addEventListener("hashchange",a=>{a.preventDefault(),r()})),s}function Ls(){const e=qe(H3);if(!e)throw new Error("useRouter() is called without provider.");return e}function kn(){return Ls().route}function Sl(e,t=!1,n=0){if(!e||n){window.scrollTo(0,n);return}let s=null;try{s=document.getElementById(decodeURIComponent(e).slice(1))}catch(a){console.warn(a)}if(!s)return;const o=window.scrollY+s.getBoundingClientRect().top-Rc()+Number.parseInt(window.getComputedStyle(s).paddingTop,10)||0,i=window.matchMedia("(prefers-reduced-motion)").matches?"instant":t&&Math.abs(o-window.scrollY)<=window.innerHeight?"smooth":"auto";requestAnimationFrame(()=>{if(window.scrollTo({left:0,top:o,behavior:i}),s.focus({preventScroll:!0}),document.activeElement===s||s.hasAttribute("tabindex"))return;const a=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",a)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",a),s.focus({preventScroll:!0}),document.activeElement!==s&&a()})}function Tl(e){const t=new URL(e,dh);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),bs.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}async function j3(e,{smoothScroll:t=!1,initialLoad:n=!1,replace:s=!1}={}){const o=Tl(location.href),i=new URL(e,location.origin),r=new URL(o,location.origin);if(e===o){if(!n)return Sl(i.hash,t),!1}else if(s?history.replaceState({},"",e):(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",e)),i.pathname===r.pathname)return i.hash!==r.hash&&(window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:r.href,newURL:i.href})),Sl(i.hash,t)),!1;return!0}const Ki=()=>ur.forEach(e=>e()),qA=z({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=kn(),{frontmatter:n,site:s}=Ae();return te(n,Ki,{deep:!0,flush:"post"}),()=>nn(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?nn(t.component,{onVnodeMounted:Ki,onVnodeUpdated:Ki,onVnodeUnmounted:Ki}):"404 Page Not Found"])}}),xe=Ae;function U3(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),(s=!0)&&setTimeout(()=>s=!1,t))}}function El(e){return e.startsWith("/")?e:`/${e}`}function Hc(e){const{pathname:t,search:n,hash:s,protocol:o}=new URL(e,"http://a.com");if(uh(e)||e.startsWith("#")||!o.startsWith("http")||!fh(t))return e;const{site:i}=xe(),r=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${n}${s}`);return Ee(r)}function Ai({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:o,hash:i}=xe(),r=M(()=>({label:t.value.locales[n.value]?.label,link:t.value.locales[n.value]?.link||(n.value==="root"?"/":`/${n.value}/`)}));return{localeLinks:M(()=>Object.entries(t.value.locales).flatMap(([c,u])=>r.value.label===u.label?[]:{text:u.label,link:W3(u.link||(c==="root"?"/":`/${c}/`),o.value.i18nRouting!==!1&&e,s.value.relativePath.slice(r.value.link.length-1),!t.value.cleanUrls)+i.value,lang:u.lang,dir:u.dir})),currentLang:r}}function W3(e,t,n,s){return t?e.replace(/\/$/,"")+El(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const q3={class:"NotFound"},K3={class:"code"},Y3={class:"title"},G3={class:"quote"},J3={class:"action"},X3=["href","aria-label"],Q3=z({__name:"NotFound",setup(e){const{theme:t}=xe(),{currentLang:n}=Ai();return(s,o)=>(p(),w("div",q3,[S("p",K3,W(l(t).notFound?.code??"404"),1),S("h1",Y3,W(l(t).notFound?.title??"PAGE NOT FOUND"),1),o[0]||(o[0]=S("div",{class:"divider"},null,-1)),S("blockquote",G3,W(l(t).notFound?.quote??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),S("div",J3,[S("a",{class:"link",href:l(Ee)(l(t).notFound?.link??l(n).link),"aria-label":l(t).notFound?.linkLabel??"go to home"},W(l(t).notFound?.linkText??"Take me home"),9,X3)])]))}}),Z3=ke(Q3,[["__scopeId","data-v-8da4cf55"]]);function hh(e,t){if(Array.isArray(e))return fr(e);if(e==null)return[];t=El(t);const n=Object.keys(e).sort((o,i)=>i.split("/").length-o.split("/").length).find(o=>t.startsWith(El(o))),s=n?e[n]:[];return Array.isArray(s)?fr(s):fr(s.items,s.base)}function e4(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function t4(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function xl(e,t){return Array.isArray(t)?t.some(n=>xl(e,n)):$s(e,t.link)?!0:t.items?xl(e,t.items):!1}function fr(e,t){return[...e].map(n=>{const s={...n},o=s.base||t;return o&&s.link&&(s.link=o+s.link.replace(/^\//,o.endsWith("/")?"":"/")),s.items&&(s.items=fr(s.items,o)),s})}function n4(){const{hasSidebar:e}=ls(),t=Br("(min-width: 960px)"),n=Br("(min-width: 1280px)");return{isAsideEnabled:M(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const s4=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Al=[];function ph(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function o4(e){const t=[...document.querySelectorAll(".VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{element:n,title:i4(n),link:"#"+n.id,level:s}});return r4(t,e)}function i4(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(s4.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function r4(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return c4(e,s,o)}function a4(e,t){const{isAsideEnabled:n}=n4(),s=U3(i,100);let o=null;be(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Mo(()=>{r(location.hash)}),cn(()=>{window.removeEventListener("scroll",s)});function i(){if(!n.value)return;const a=window.scrollY,c=window.innerHeight,u=document.body.offsetHeight,f=Math.abs(a+c-u)<1,d=Al.map(({element:m,link:g})=>({link:g,top:l4(m)})).filter(({top:m})=>!Number.isNaN(m)).sort((m,g)=>m.top-g.top);if(!d.length){r(null);return}if(a<1){r(null);return}if(f){r(d[d.length-1].link);return}let h=null;for(const{link:m,top:g}of d){if(g>a+Rc()+4)break;h=m}r(h)}function r(a){o&&o.classList.remove("active"),a==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(a)}"]`);const c=o;c?(c.classList.add("active"),t.value.style.top=c.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function l4(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function c4(e,t,n){Al.length=0;const s=[],o=[];return e.forEach(i=>{const r={...i,children:[]};let a=o[o.length-1];for(;a&&a.level>=r.level;)o.pop(),a=o[o.length-1];if(r.element.classList.contains("ignore-header")||a&&"shouldIgnore"in a){o.push({level:r.level,shouldIgnore:!0});return}r.level>n||r.level{t=co.value?document.activeElement:void 0}),be(()=>{window.addEventListener("keyup",n)}),cn(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&co.value&&(e(),t?.focus())}}function f4(){function e(){co.value=!0}function t(){co.value=!1}function n(){co.value?t():e()}return{isOpen:co,open:e,close:t,toggle:n}}function d4(e){const{page:t,hash:n}=xe(),s=j(!1),o=M(()=>e.value.collapsed!=null),i=M(()=>!!e.value.link),r=j(!1),a=()=>{r.value=$s(t.value.relativePath,e.value.link)};te([t,e,n],a),be(a);const c=M(()=>r.value?!0:e.value.items?xl(t.value.relativePath,e.value.items):!1),u=M(()=>!!(e.value.items&&e.value.items.length));Hn(()=>{s.value=!!(o.value&&e.value.collapsed)}),da(()=>{(r.value||c.value)&&(s.value=!1)});function f(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:i,isActiveLink:r,hasActiveLink:c,hasChildren:u,toggle:f}}const $l=He([]),Zo=He([]),Ll=He(!1);function ls(){const{frontmatter:e,theme:t}=xe(),n=M(()=>!!(e.value.isHome??e.value.layout==="home")),s=M(()=>e.value.sidebar!==!1&&Zo.value.length>0&&!n.value),o=M(()=>s.value&&Ll.value),i=M(()=>s.value?e4(Zo.value):[]),r=M(()=>n.value?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),a=M(()=>r.value?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),c=M(()=>$l.value.length>0);return{isHome:n,sidebar:al(Zo),sidebarGroups:i,hasSidebar:s,isSidebarEnabled:o,hasAside:r,leftAside:a,headers:al($l),hasLocalNav:c}}function h4({closeSidebar:e}){const{frontmatter:t,page:n,theme:s}=xe();te(()=>[n.value.relativePath,s.value.sidebar],([i,r])=>{const a=r?hh(r,i):[];JSON.stringify(a)!==JSON.stringify(Zo.value)&&(Zo.value=a)},{immediate:!0,deep:!0,flush:"sync"}),xi(()=>{$l.value=o4(t.value.outline??s.value.outline)}),wt&&(Ll.value=window.innerWidth>=960,window.addEventListener("resize",()=>{Ll.value=window.innerWidth>=960},{passive:!0}));const o=kn();te(()=>o.path,e),u4(e)}const mh=Symbol("layout-info"),p4=["href","title"],m4=z({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){return(t,n)=>{const s=un("VPDocOutlineItem",!0);return p(),w("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(p(!0),w(Y,null,le(e.headers,({children:o,link:i,title:r})=>(p(),w("li",null,[S("a",{class:"outline-link",href:i,title:r},W(r),9,p4),o?.length?(p(),D(s,{key:0,headers:o},null,8,["headers"])):A("",!0)]))),256))],2)}}}),gh=ke(m4,[["__scopeId","data-v-a2fde347"]]),g4={class:"content"},v4={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},y4=z({__name:"VPDocAsideOutline",setup(e){const{theme:t}=xe(),n=j(),s=j(),{headers:o,hasLocalNav:i}=ls();return a4(n,s),(r,a)=>(p(),w("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":l(i)}]),ref_key:"container",ref:n},[S("div",g4,[S("div",{class:"outline-marker",ref_key:"marker",ref:s},null,512),S("div",v4,W(l(ph)(l(t))),1),H(gh,{headers:l(o),root:!0},null,8,["headers"])])],2))}}),b4=ke(y4,[["__scopeId","data-v-6de6b820"]]),k4={class:"VPDocAsideCarbonAds"},w4=z({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,s)=>(p(),w("div",k4,[H(l(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),C4={class:"VPDocAside"},_4=z({__name:"VPDocAside",setup(e){const{theme:t}=xe();return(n,s)=>(p(),w("div",C4,[F(n.$slots,"aside-top",{},void 0,!0),F(n.$slots,"aside-outline-before",{},void 0,!0),H(b4),F(n.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=S("div",{class:"spacer"},null,-1)),F(n.$slots,"aside-ads-before",{},void 0,!0),l(t).carbonAds?(p(),D(w4,{key:0,"carbon-ads":l(t).carbonAds},null,8,["carbon-ads"])):A("",!0),F(n.$slots,"aside-ads-after",{},void 0,!0),F(n.$slots,"aside-bottom",{},void 0,!0)]))}}),S4=ke(_4,[["__scopeId","data-v-76867c7a"]]);function T4(){const{theme:e,page:t}=xe();return M(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{};let o;return typeof s=="function"?o=s(t.value):o=s.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function E4(){const{page:e,theme:t,frontmatter:n}=xe();return M(()=>{const s=hh(t.value.sidebar,e.value.relativePath),o=t4(s),i=x4(o,u=>u.link.replace(/[?#].*$/,"")),r=i.findIndex(u=>$s(e.value.relativePath,u.link)),a=t.value.docFooter?.prev===!1&&!n.value.prev||n.value.prev===!1,c=t.value.docFooter?.next===!1&&!n.value.next||n.value.next===!1;return{prev:a?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??i[r-1]?.docFooterText??i[r-1]?.text,link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??i[r-1]?.link},next:c?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??i[r+1]?.docFooterText??i[r+1]?.text,link:(typeof n.value.next=="object"?n.value.next.link:void 0)??i[r+1]?.link}}})}function x4(e,t){const n=new Set;return e.filter(s=>{const o=t(s);return n.has(o)?!1:n.add(o)})}const Vn=z({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=M(()=>t.tag??(t.href?"a":"span")),s=M(()=>t.href&&ka.test(t.href)||t.target==="_blank");return(o,i)=>(p(),D(Be(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":s.value,"no-icon":e.noIcon}]),href:e.href?l(Hc)(e.href):void 0,target:e.target??(s.value?"_blank":void 0),rel:e.rel??(s.value?"noreferrer":void 0)},{default:O(()=>[F(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),A4={class:"VPLastUpdated"},$4=["datetime"],L4=z({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=xe(),{language:o}=w3(),i=R1("timeRef"),r=M(()=>new Date(n.value.lastUpdated)),a=M(()=>r.value.toISOString()),c=He("");return be(()=>{Hn(()=>{const u=t.value.lastUpdated?.formatOptions?.forceLocale?s.value:o.value;c.value=new Intl.DateTimeFormat(u,t.value.lastUpdated?.formatOptions??{dateStyle:"medium",timeStyle:"medium"}).format(r.value),u&&s.value!==u?i.value?.setAttribute("lang",u):i.value?.removeAttribute("lang")})}),(u,f)=>(p(),w("p",A4,[rt(W(l(t).lastUpdated?.text||l(t).lastUpdatedText||"Last updated")+": ",1),S("time",{ref_key:"timeRef",ref:i,datetime:a.value},W(c.value),9,$4)]))}}),I4=ke(L4,[["__scopeId","data-v-7dc12fe8"]]),P4={key:0,class:"VPDocFooter"},M4={key:0,class:"edit-info"},F4={key:0,class:"edit-link"},B4={key:1,class:"last-updated"},N4={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},V4={class:"pager"},O4=["innerHTML"],D4=["innerHTML"],R4={class:"pager"},H4=["innerHTML"],z4=["innerHTML"],j4=z({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=xe(),o=T4(),i=E4(),r=M(()=>t.value.editLink&&s.value.editLink!==!1),a=M(()=>n.value.lastUpdated),c=M(()=>r.value||a.value||i.value.prev||i.value.next);return(u,f)=>c.value?(p(),w("footer",P4,[F(u.$slots,"doc-footer-before",{},void 0,!0),r.value||a.value?(p(),w("div",M4,[r.value?(p(),w("div",F4,[H(Vn,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:O(()=>[f[0]||(f[0]=S("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),rt(" "+W(l(o).text),1)]),_:1},8,["href"])])):A("",!0),a.value?(p(),w("div",B4,[H(I4)])):A("",!0)])):A("",!0),l(i).prev?.link||l(i).next?.link?(p(),w("nav",N4,[f[1]||(f[1]=S("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),S("div",V4,[l(i).prev?.link?(p(),D(Vn,{key:0,class:"pager-link prev",href:l(i).prev.link},{default:O(()=>[S("span",{class:"desc",innerHTML:l(t).docFooter?.prev||"Previous page"},null,8,O4),S("span",{class:"title",innerHTML:l(i).prev.text},null,8,D4)]),_:1},8,["href"])):A("",!0)]),S("div",R4,[l(i).next?.link?(p(),D(Vn,{key:0,class:"pager-link next",href:l(i).next.link},{default:O(()=>[S("span",{class:"desc",innerHTML:l(t).docFooter?.next||"Next page"},null,8,H4),S("span",{class:"title",innerHTML:l(i).next.text},null,8,z4)]),_:1},8,["href"])):A("",!0)])])):A("",!0)])):A("",!0)}}),U4=ke(j4,[["__scopeId","data-v-984cd88d"]]),W4={class:"container"},q4={class:"aside-container"},K4={class:"aside-content"},Y4={class:"content"},G4={class:"content-container"},J4={class:"main"},X4=z({__name:"VPDoc",setup(e){const{theme:t}=xe(),n=kn(),{hasSidebar:s,hasAside:o,leftAside:i}=ls(),r=M(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(a,c)=>{const u=un("Content");return p(),w("div",{class:T(["VPDoc",{"has-sidebar":l(s),"has-aside":l(o)}])},[F(a.$slots,"doc-top",{},void 0,!0),S("div",W4,[l(o)?(p(),w("div",{key:0,class:T(["aside",{"left-aside":l(i)}])},[c[0]||(c[0]=S("div",{class:"aside-curtain"},null,-1)),S("div",q4,[S("div",K4,[H(S4,null,{"aside-top":O(()=>[F(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":O(()=>[F(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":O(()=>[F(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[F(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[F(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[F(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):A("",!0),S("div",Y4,[S("div",G4,[F(a.$slots,"doc-before",{},void 0,!0),S("main",J4,[H(u,{class:T(["vp-doc",[r.value,l(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),H(U4,null,{"doc-footer-before":O(()=>[F(a.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),F(a.$slots,"doc-after",{},void 0,!0)])])]),F(a.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Q4=ke(X4,[["__scopeId","data-v-882c4e63"]]),Z4=z({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=M(()=>t.href&&ka.test(t.href)),s=M(()=>t.tag||(t.href?"a":"button"));return(o,i)=>(p(),D(Be(s.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?l(Hc)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:O(()=>[F(o.$slots,"default",{},()=>[rt(W(e.text),1)],!0)]),_:3},8,["class","href","target","rel"]))}}),e6=ke(Z4,[["__scopeId","data-v-a733ff3b"]]),t6=["src","alt"],n6=z({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const s=un("VPImage",!0);return e.image?(p(),w(Y,{key:0},[typeof e.image=="string"||"src"in e.image?(p(),w("img",nt({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:l(Ee)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,t6)):(p(),w(Y,{key:1},[H(s,nt({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),H(s,nt({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):A("",!0)}}}),Nr=ke(n6,[["__scopeId","data-v-a8cbb5e4"]]),s6={class:"container"},o6={class:"main"},i6={class:"heading"},r6=["innerHTML"],a6=["innerHTML"],l6=["innerHTML"],c6={key:0,class:"actions"},u6={key:0,class:"image"},f6={class:"image-container"},d6=z({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const{heroImageSlotExists:t}=qe(mh);return(n,s)=>(p(),w("div",{class:T(["VPHero",{"has-image":e.image||l(t)}])},[S("div",s6,[S("div",o6,[F(n.$slots,"home-hero-info-before",{},void 0,!0),F(n.$slots,"home-hero-info",{},()=>[S("h1",i6,[e.name?(p(),w("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,r6)):A("",!0),e.text?(p(),w("span",{key:1,innerHTML:e.text,class:"text"},null,8,a6)):A("",!0)]),e.tagline?(p(),w("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,l6)):A("",!0)],!0),F(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(p(),w("div",c6,[(p(!0),w(Y,null,le(e.actions,o=>(p(),w("div",{key:o.link,class:"action"},[H(e6,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):A("",!0),F(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||l(t)?(p(),w("div",u6,[S("div",f6,[s[0]||(s[0]=S("div",{class:"image-bg"},null,-1)),F(n.$slots,"home-hero-image",{},()=>[e.image?(p(),D(Nr,{key:0,class:"image-src",image:e.image},null,8,["image"])):A("",!0)],!0)])])):A("",!0)])],2))}}),h6=ke(d6,[["__scopeId","data-v-ee741714"]]),p6=z({__name:"VPHomeHero",setup(e){const{frontmatter:t}=xe();return(n,s)=>l(t).hero?(p(),D(h6,{key:0,class:"VPHomeHero",name:l(t).hero.name,text:l(t).hero.text,tagline:l(t).hero.tagline,image:l(t).hero.image,actions:l(t).hero.actions},{"home-hero-info-before":O(()=>[F(n.$slots,"home-hero-info-before")]),"home-hero-info":O(()=>[F(n.$slots,"home-hero-info")]),"home-hero-info-after":O(()=>[F(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":O(()=>[F(n.$slots,"home-hero-actions-after")]),"home-hero-image":O(()=>[F(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):A("",!0)}}),m6={class:"box"},g6={key:0,class:"icon"},v6=["innerHTML"],y6=["innerHTML"],b6=["innerHTML"],k6={key:4,class:"link-text"},w6={class:"link-text-value"},C6=z({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(p(),D(Vn,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:O(()=>[S("article",m6,[typeof e.icon=="object"&&e.icon.wrap?(p(),w("div",g6,[H(Nr,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(p(),D(Nr,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(p(),w("div",{key:2,class:"icon",innerHTML:e.icon},null,8,v6)):A("",!0),S("h2",{class:"title",innerHTML:e.title},null,8,y6),e.details?(p(),w("p",{key:3,class:"details",innerHTML:e.details},null,8,b6)):A("",!0),e.linkText?(p(),w("div",k6,[S("p",w6,[rt(W(e.linkText)+" ",1),n[0]||(n[0]=S("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):A("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),_6=ke(C6,[["__scopeId","data-v-bf042e10"]]),S6={key:0,class:"VPFeatures"},T6={class:"container"},E6={class:"items"},x6=z({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=M(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>e.features?(p(),w("div",S6,[S("div",T6,[S("div",E6,[(p(!0),w(Y,null,le(e.features,i=>(p(),w("div",{key:i.title,class:T(["item",[n.value]])},[H(_6,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):A("",!0)}}),A6=ke(x6,[["__scopeId","data-v-5ad9f568"]]),$6=z({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=xe();return(n,s)=>l(t).features?(p(),D(A6,{key:0,class:"VPHomeFeatures",features:l(t).features},null,8,["features"])):A("",!0)}}),L6=z({__name:"VPHomeContent",setup(e){const{width:t}=C3({initialWidth:0,includeScrollbar:!1});return(n,s)=>(p(),w("div",{class:"vp-doc container",style:Fe(l(t)?{"--vp-offset":`calc(50% - ${l(t)/2}px)`}:{})},[F(n.$slots,"default",{},void 0,!0)],4))}}),I6=ke(L6,[["__scopeId","data-v-443a44f6"]]),P6=z({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=xe();return(s,o)=>{const i=un("Content");return p(),w("div",{class:T(["VPHome",{"external-link-icon-enabled":l(n).externalLinkIcon}])},[F(s.$slots,"home-hero-before",{},void 0,!0),H(p6,null,{"home-hero-info-before":O(()=>[F(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[F(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[F(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[F(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[F(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),F(s.$slots,"home-hero-after",{},void 0,!0),F(s.$slots,"home-features-before",{},void 0,!0),H($6),F(s.$slots,"home-features-after",{},void 0,!0),l(t).markdownStyles!==!1?(p(),D(I6,{key:0},{default:O(()=>[H(i)]),_:1})):(p(),D(i,{key:1}))],2)}}}),M6=ke(P6,[["__scopeId","data-v-a46f93a8"]]),F6={},B6={class:"VPPage"};function N6(e,t){const n=un("Content");return p(),w("div",B6,[F(e.$slots,"page-top"),H(n),F(e.$slots,"page-bottom")])}const V6=ke(F6,[["render",N6]]),O6=z({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=xe(),{isHome:s,hasSidebar:o}=ls();return(i,r)=>(p(),w("div",{class:T(["VPContent",{"has-sidebar":l(o),"is-home":l(s)}]),id:"VPContent"},[l(t).isNotFound?F(i.$slots,"not-found",{key:0},()=>[H(Z3)],!0):l(n).layout==="page"?(p(),D(V6,{key:1},{"page-top":O(()=>[F(i.$slots,"page-top",{},void 0,!0)]),"page-bottom":O(()=>[F(i.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(n).layout==="home"?(p(),D(M6,{key:2},{"home-hero-before":O(()=>[F(i.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":O(()=>[F(i.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[F(i.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[F(i.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[F(i.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[F(i.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":O(()=>[F(i.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":O(()=>[F(i.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":O(()=>[F(i.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(n).layout&&l(n).layout!=="doc"?(p(),D(Be(l(n).layout),{key:3})):(p(),D(Q4,{key:4},{"doc-top":O(()=>[F(i.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":O(()=>[F(i.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":O(()=>[F(i.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":O(()=>[F(i.$slots,"doc-before",{},void 0,!0)]),"doc-after":O(()=>[F(i.$slots,"doc-after",{},void 0,!0)]),"aside-top":O(()=>[F(i.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":O(()=>[F(i.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[F(i.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[F(i.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[F(i.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":O(()=>[F(i.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),D6=ke(O6,[["__scopeId","data-v-c3f0da0c"]]),R6={class:"container"},H6=["innerHTML"],z6=["innerHTML"],j6=z({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=xe(),{hasSidebar:s}=ls();return(o,i)=>l(t).footer&&l(n).footer!==!1?(p(),w("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(s)}])},[S("div",R6,[l(t).footer.message?(p(),w("p",{key:0,class:"message",innerHTML:l(t).footer.message},null,8,H6)):A("",!0),l(t).footer.copyright?(p(),w("p",{key:1,class:"copyright",innerHTML:l(t).footer.copyright},null,8,z6)):A("",!0)])],2)):A("",!0)}}),U6=ke(j6,[["__scopeId","data-v-9efde1aa"]]),W6={class:"menu-text"},q6={class:"header"},K6={class:"outline"},Y6=z({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=xe(),s=j(!1),o=j(0),i=j(),r=j();function a(d){i.value?.contains(d.target)||(s.value=!1)}te(s,d=>{if(d){document.addEventListener("click",a);return}document.removeEventListener("click",a)}),_l("Escape",()=>{s.value=!1}),xi(()=>{s.value=!1});function c(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function u(d){d.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),ze(()=>{s.value=!1}))}function f(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(d,h)=>(p(),w("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:i},[e.headers.length>0?(p(),w("button",{key:0,onClick:c,class:T({open:s.value})},[S("span",W6,W(l(ph)(l(n))),1),h[0]||(h[0]=S("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(p(),w("button",{key:1,onClick:f},W(l(n).returnToTopLabel||"Return to top"),1)),H(vt,{name:"flyout"},{default:O(()=>[s.value?(p(),w("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:u},[S("div",q6,[S("a",{class:"top-link",href:"#",onClick:f},W(l(n).returnToTopLabel||"Return to top"),1)]),S("div",K6,[H(gh,{headers:e.headers},null,8,["headers"])])],512)):A("",!0)]),_:1})],4))}}),G6=ke(Y6,[["__scopeId","data-v-9f1eaf8c"]]),J6={class:"container"},X6=["aria-expanded"],Q6={class:"menu-text"},Z6=z({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=xe(),{isHome:n,hasSidebar:s,headers:o,hasLocalNav:i}=ls(),{y:r}=ah(),a=j(0);be(()=>{a.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))});const c=M(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:!i.value,fixed:!i.value&&!s.value}));return(u,f)=>!l(n)&&(l(i)||l(s)||l(r)>=a.value)?(p(),w("div",{key:0,class:T(c.value)},[S("div",J6,[l(s)?(p(),w("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:f[0]||(f[0]=d=>u.$emit("open-menu"))},[f[1]||(f[1]=S("span",{class:"vpi-align-left menu-icon"},null,-1)),S("span",Q6,W(l(t).sidebarMenuLabel||"Menu"),1)],8,X6)):A("",!0),H(G6,{headers:l(o),navHeight:a.value},null,8,["headers","navHeight"])])],2)):A("",!0)}}),e8=ke(Z6,[["__scopeId","data-v-d7c3d326"]]);function t8(){const e=j(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=kn();return te(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const zc=Symbol("nav"),n8={},s8={class:"VPSwitch",type:"button",role:"switch"},o8={class:"check"},i8={key:0,class:"icon"};function r8(e,t){return p(),w("button",s8,[S("span",o8,[e.$slots.default?(p(),w("span",i8,[F(e.$slots,"default",{},void 0,!0)])):A("",!0)])])}const a8=ke(n8,[["render",r8],["__scopeId","data-v-aa6a72db"]]),l8=z({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=xe(),s=qe("toggle-appearance",()=>{t.value=!t.value}),o=j("");return da(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,r)=>(p(),D(a8,{title:o.value,class:"VPSwitchAppearance","aria-checked":l(t),onClick:l(s)},{default:O(()=>[...r[0]||(r[0]=[S("span",{class:"vpi-sun sun"},null,-1),S("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),jc=ke(l8,[["__scopeId","data-v-796463e8"]]),c8={key:0,class:"VPNavBarAppearance"},u8=z({__name:"VPNavBarAppearance",setup(e){const{site:t}=xe();return(n,s)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",c8,[H(jc)])):A("",!0)}}),f8=ke(u8,[["__scopeId","data-v-bca6fe53"]]),Uc=j();let vh=!1,Ka=0;function d8(e){const t=j(!1);if(wt){!vh&&h8(),Ka++;const n=te(Uc,s=>{s===e.el.value||e.el.value?.contains(s)?(t.value=!0,e.onFocus?.()):(t.value=!1,e.onBlur?.())});cn(()=>{n(),Ka--,Ka||p8()})}return It(t)}function h8(){document.addEventListener("focusin",yh),vh=!0,Uc.value=document.activeElement}function p8(){document.removeEventListener("focusin",yh)}function yh(){Uc.value=document.activeElement}const m8={class:"VPMenuLink"},g8=["innerHTML"],v8=z({inheritAttrs:!1,__name:"VPMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,i)=>(p(),w("div",m8,[H(Vn,nt(o.$attrs,{class:{active:l($s)(l(n).relativePath,e.item.activeMatch||s.value,!!e.item.activeMatch)},href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon}),{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,g8)]),_:1},16,["class","href","target","rel","no-icon"])]))}}),wa=ke(v8,[["__scopeId","data-v-e0872219"]]),y8={class:"VPMenuGroup"},b8={key:0,class:"title"},k8=z({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(p(),w("div",y8,[e.text?(p(),w("p",b8,W(e.text),1)):A("",!0),(p(!0),w(Y,null,le(e.items,s=>(p(),w(Y,{key:JSON.stringify(s)},["link"in s?(p(),D(wa,{key:0,item:s},null,8,["item"])):A("",!0)],64))),128))]))}}),w8=ke(k8,[["__scopeId","data-v-64849d1f"]]),C8={class:"VPMenu"},_8={key:0,class:"items"},S8=z({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(p(),w("div",C8,[e.items?(p(),w("div",_8,[(p(!0),w(Y,null,le(e.items,s=>(p(),w(Y,{key:JSON.stringify(s)},["link"in s?(p(),D(wa,{key:0,item:s},null,8,["item"])):"component"in s?(p(),D(Be(s.component),nt({key:1,ref_for:!0},s.props),null,16)):(p(),D(w8,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):A("",!0),F(t.$slots,"default",{},void 0,!0)]))}}),T8=ke(S8,[["__scopeId","data-v-0a00b60e"]]),E8=["aria-expanded","aria-label"],x8={key:0,class:"text"},A8=["innerHTML"],$8={key:1,class:"vpi-more-horizontal icon"},L8={class:"menu"},I8=z({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=j(!1),n=j();d8({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(p(),w("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=r=>t.value=!0),onMouseleave:i[2]||(i[2]=r=>t.value=!1)},[S("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=r=>t.value=!t.value)},[e.button||e.icon?(p(),w("span",x8,[e.icon?(p(),w("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):A("",!0),e.button?(p(),w("span",{key:1,innerHTML:e.button},null,8,A8)):A("",!0),i[3]||(i[3]=S("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(p(),w("span",$8))],8,E8),S("div",L8,[H(T8,{items:e.items},{default:O(()=>[F(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Wc=ke(I8,[["__scopeId","data-v-b2527cb7"]]),P8=["href","aria-label","rel","innerHTML"],M8=z({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{},me:{type:Boolean}},setup(e){const t=e,n=j();be(async()=>{await ze();const o=n.value?.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const s=M(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,i)=>(p(),w("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:e.me?"me noopener":"noopener",innerHTML:s.value},null,8,P8))}}),F8=ke(M8,[["__scopeId","data-v-91c7facc"]]),B8={class:"VPSocialLinks"},N8=z({__name:"VPSocialLinks",props:{links:{},me:{type:Boolean,default:!0}},setup(e){return(t,n)=>(p(),w("div",B8,[(p(!0),w(Y,null,le(e.links,({link:s,icon:o,ariaLabel:i})=>(p(),D(F8,{key:s,icon:o,link:s,ariaLabel:i,me:e.me},null,8,["icon","link","ariaLabel","me"]))),128))]))}}),qc=ke(N8,[["__scopeId","data-v-26dd8e81"]]),V8={key:0,class:"group translations"},O8={class:"trans-title"},D8={key:1,class:"group"},R8={class:"item appearance"},H8={class:"label"},z8={class:"appearance-action"},j8={key:2,class:"group"},U8={class:"item social-links"},W8=z({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=xe(),{localeLinks:s,currentLang:o}=Ai({correspondingLink:!0}),i=M(()=>s.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(r,a)=>i.value?(p(),D(Wc,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:O(()=>[l(s).length&&l(o).label?(p(),w("div",V8,[S("p",O8,W(l(o).label),1),(p(!0),w(Y,null,le(l(s),c=>(p(),D(wa,{key:c.link,item:c,lang:c.lang,dir:c.dir},null,8,["item","lang","dir"]))),128))])):A("",!0),l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",D8,[S("div",R8,[S("p",H8,W(l(n).darkModeSwitchLabel||"Appearance"),1),S("div",z8,[H(jc)])])])):A("",!0),l(n).socialLinks?(p(),w("div",j8,[S("div",U8,[H(qc,{class:"social-links-list",links:l(n).socialLinks},null,8,["links"])])])):A("",!0)]),_:1})):A("",!0)}}),q8=ke(W8,[["__scopeId","data-v-db1d6c7b"]]),K8=["aria-expanded"],Y8=z({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(p(),w("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},[...n[1]||(n[1]=[S("span",{class:"container"},[S("span",{class:"top"}),S("span",{class:"middle"}),S("span",{class:"bottom"})],-1)])],10,K8))}}),G8=ke(Y8,[["__scopeId","data-v-38f7b5e9"]]),J8=["innerHTML"],X8=z({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,i)=>(p(),D(Vn,{class:T({VPNavBarMenuLink:!0,active:l($s)(l(n).relativePath,e.item.activeMatch||s.value,!!e.item.activeMatch)}),href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,J8)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Q8=ke(X8,[["__scopeId","data-v-4da5b703"]]),Z8=z({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=i=>"component"in i?!1:"link"in i?$s(n.value.relativePath,typeof i.link=="function"?i.link(n.value):i.link,!!t.item.activeMatch):i.items.some(s),o=M(()=>s(t.item));return(i,r)=>(p(),D(Wc,{class:T({VPNavBarMenuGroup:!0,active:l($s)(l(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),e5={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},t5=z({__name:"VPNavBarMenu",setup(e){const{theme:t}=xe();return(n,s)=>l(t).nav?(p(),w("nav",e5,[s[0]||(s[0]=S("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(p(!0),w(Y,null,le(l(t).nav,o=>(p(),w(Y,{key:JSON.stringify(o)},["link"in o?(p(),D(Q8,{key:0,item:o},null,8,["item"])):"component"in o?(p(),D(Be(o.component),nt({key:1,ref_for:!0},o.props),null,16)):(p(),D(Z8,{key:2,item:o},null,8,["item"]))],64))),128))])):A("",!0)}}),n5=ke(t5,[["__scopeId","data-v-d6cb3036"]]),s5="modulepreload",o5=function(e){return"/"+e},Bf={},i5=function(t,n,s){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(f=>Promise.resolve(f).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),a=r?.nonce||r?.getAttribute("nonce");o=c(n.map(u=>{if(u=o5(u),u in Bf)return;Bf[u]=!0;const f=u.endsWith(".css"),d=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${d}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":s5,f||(h.as="script"),h.crossOrigin="",h.href=u,a&&h.setAttribute("nonce",a),document.head.appendChild(h),f)return new Promise((m,g)=>{h.addEventListener("load",m),h.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${u}`)))})}))}function i(r){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=r,window.dispatchEvent(a),!a.defaultPrevented)throw r}return o.then(r=>{for(const a of r||[])a.status==="rejected"&&i(a.reason);return t().catch(i)})};function r5(e){const{localeIndex:t,theme:n}=xe();function s(o){const i=o.split("."),r=n.value.search?.options,a=r&&typeof r=="object",c=a&&r.locales?.[t.value]?.translations||null,u=a&&r.translations||null;let f=c,d=u,h=e;const m=i.pop();for(const g of i){let v=null;const b=h?.[g];b&&(v=h=b);const k=d?.[g];k&&(v=d=k);const C=f?.[g];C&&(v=f=C),b||(h=v),k||(d=v),C||(f=v)}return f?.[m]??d?.[m]??h?.[m]??""}return s}const a5=["aria-label"],l5={class:"DocSearch-Button-Container"},c5={class:"DocSearch-Button-Placeholder"},Nf=z({__name:"VPNavBarSearchButton",setup(e){const n=r5({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,o)=>(p(),w("button",{type:"button","aria-label":l(n)("button.buttonAriaLabel"),"aria-keyshortcuts":"/ control+k meta+k",class:"DocSearch DocSearch-Button"},[S("span",l5,[o[0]||(o[0]=S("span",{class:"vpi-search DocSearch-Search-Icon"},null,-1)),S("span",c5,W(l(n)("button.buttonText")),1)]),o[1]||(o[1]=S("span",{class:"DocSearch-Button-Keys"},[S("kbd",{class:"DocSearch-Button-Key"}),S("kbd",{class:"DocSearch-Button-Key"})],-1))],8,a5))}}),u5={class:"VPNavBarSearch"},f5={id:"local-search"},d5={key:1,id:"docsearch"},h5=z({__name:"VPNavBarSearch",setup(e){const t=wc(()=>i5(()=>import("./VPLocalSearchBox.CKLEEKt7.js"),[])),n=()=>null,{theme:s}=xe(),o=j(!1),i=j(!1);be(()=>{});function r(){o.value||(o.value=!0,setTimeout(a,16))}function a(){const d=new Event("keydown");d.key="k",d.metaKey=!0,window.dispatchEvent(d),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||a()},16)}function c(d){const h=d.target,m=h.tagName;return h.isContentEditable||m==="INPUT"||m==="SELECT"||m==="TEXTAREA"}const u=j(!1);_l("k",d=>{(d.ctrlKey||d.metaKey)&&(d.preventDefault(),u.value=!0)}),_l("/",d=>{c(d)||(d.preventDefault(),u.value=!0)});const f="local";return(d,h)=>(p(),w("div",u5,[l(f)==="local"?(p(),w(Y,{key:0},[u.value?(p(),D(l(t),{key:0,onClose:h[0]||(h[0]=m=>u.value=!1)})):A("",!0),S("div",f5,[H(Nf,{onClick:h[1]||(h[1]=m=>u.value=!0)})])],64)):l(f)==="algolia"?(p(),w(Y,{key:1},[o.value?(p(),D(l(n),{key:0,algolia:l(s).search?.options??l(s).algolia,onVnodeBeforeMount:h[2]||(h[2]=m=>i.value=!0)},null,8,["algolia"])):A("",!0),i.value?A("",!0):(p(),w("div",d5,[H(Nf,{onClick:r})]))],64)):A("",!0)]))}}),p5=z({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=xe();return(n,s)=>l(t).socialLinks?(p(),D(qc,{key:0,class:"VPNavBarSocialLinks",links:l(t).socialLinks},null,8,["links"])):A("",!0)}}),m5=ke(p5,[["__scopeId","data-v-96c85d3a"]]),g5=["href","rel","target"],v5=["innerHTML"],y5={key:2},b5=z({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=xe(),{hasSidebar:s}=ls(),{currentLang:o}=Ai(),i=M(()=>typeof n.value.logoLink=="string"?n.value.logoLink:n.value.logoLink?.link),r=M(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.rel),a=M(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.target);return(c,u)=>(p(),w("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(s)}])},[S("a",{class:"title",href:i.value??l(Hc)(l(o).link),rel:r.value,target:a.value},[F(c.$slots,"nav-bar-title-before",{},void 0,!0),l(n).logo?(p(),D(Nr,{key:0,class:"logo",image:l(n).logo},null,8,["image"])):A("",!0),l(n).siteTitle?(p(),w("span",{key:1,innerHTML:l(n).siteTitle},null,8,v5)):l(n).siteTitle===void 0?(p(),w("span",y5,W(l(t).title),1)):A("",!0),F(c.$slots,"nav-bar-title-after",{},void 0,!0)],8,g5)],2))}}),k5=ke(b5,[["__scopeId","data-v-433c1997"]]),w5={class:"items"},C5={class:"title"},_5=z({__name:"VPNavBarTranslations",setup(e){const{theme:t}=xe(),{localeLinks:n,currentLang:s}=Ai({correspondingLink:!0});return(o,i)=>l(n).length&&l(s).label?(p(),D(Wc,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:l(t).langMenuLabel||"Change language"},{default:O(()=>[S("div",w5,[S("p",C5,W(l(s).label),1),(p(!0),w(Y,null,le(l(n),r=>(p(),D(wa,{key:r.link,item:r,lang:r.lang,dir:r.dir},null,8,["item","lang","dir"]))),128))])]),_:1},8,["label"])):A("",!0)}}),S5=ke(_5,[["__scopeId","data-v-a24a458d"]]),T5={class:"wrapper"},E5={class:"container"},x5={class:"title"},A5={class:"content"},$5={class:"content-body"},L5=z({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=ah(),{isHome:s,hasSidebar:o}=ls(),i=j({});return da(()=>{i.value={"has-sidebar":o.value,home:s.value,top:n.value===0,"screen-open":t.isScreenOpen}}),(r,a)=>(p(),w("div",{class:T(["VPNavBar",i.value])},[S("div",T5,[S("div",E5,[S("div",x5,[H(k5,null,{"nav-bar-title-before":O(()=>[F(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[F(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),S("div",A5,[S("div",$5,[F(r.$slots,"nav-bar-content-before",{},void 0,!0),H(h5,{class:"search"}),H(n5,{class:"menu"}),H(S5,{class:"translations"}),H(f8,{class:"appearance"}),H(m5,{class:"social-links"}),H(q8,{class:"extra"}),F(r.$slots,"nav-bar-content-after",{},void 0,!0),H(G8,{class:"hamburger",active:e.isScreenOpen,onClick:a[0]||(a[0]=c=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),a[1]||(a[1]=S("div",{class:"divider"},[S("div",{class:"divider-line"})],-1))],2))}}),I5=ke(L5,[["__scopeId","data-v-4038ab10"]]),P5={key:0,class:"VPNavScreenAppearance"},M5={class:"text"},F5=z({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=xe();return(s,o)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",P5,[S("p",M5,W(l(n).darkModeSwitchLabel||"Appearance"),1),H(jc)])):A("",!0)}}),B5=ke(F5,[["__scopeId","data-v-2dd8cf06"]]),N5=["innerHTML"],V5=z({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=qe(zc);return(i,r)=>(p(),D(Vn,{class:"VPNavScreenMenuLink",href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(o)},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,N5)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),O5=ke(V5,[["__scopeId","data-v-556e875f"]]),D5=["innerHTML"],R5=z({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=qe(zc);return(i,r)=>(p(),D(Vn,{class:"VPNavScreenMenuGroupLink",href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(o)},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,D5)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),bh=ke(R5,[["__scopeId","data-v-f633818c"]]),H5={class:"VPNavScreenMenuGroupSection"},z5={key:0,class:"title"},j5=z({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(p(),w("div",H5,[e.text?(p(),w("p",z5,W(e.text),1)):A("",!0),(p(!0),w(Y,null,le(e.items,s=>(p(),D(bh,{key:s.text,item:s},null,8,["item"]))),128))]))}}),U5=ke(j5,[["__scopeId","data-v-978ad136"]]),W5=["aria-controls","aria-expanded"],q5=["innerHTML"],K5=["id"],Y5={key:0,class:"item"},G5={key:1,class:"item"},J5={key:2,class:"group"},X5=z({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=j(!1),s=M(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(i,r)=>(p(),w("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[S("button",{class:"button","aria-controls":s.value,"aria-expanded":n.value,onClick:o},[S("span",{class:"button-text",innerHTML:e.text},null,8,q5),r[0]||(r[0]=S("span",{class:"vpi-plus button-icon"},null,-1))],8,W5),S("div",{id:s.value,class:"items"},[(p(!0),w(Y,null,le(e.items,a=>(p(),w(Y,{key:JSON.stringify(a)},["link"in a?(p(),w("div",Y5,[H(bh,{item:a},null,8,["item"])])):"component"in a?(p(),w("div",G5,[(p(),D(Be(a.component),nt({ref_for:!0},a.props,{"screen-menu":""}),null,16))])):(p(),w("div",J5,[H(U5,{text:a.text,items:a.items},null,8,["text","items"])]))],64))),128))],8,K5)],2))}}),Q5=ke(X5,[["__scopeId","data-v-011d53c7"]]),Z5={key:0,class:"VPNavScreenMenu"},e7=z({__name:"VPNavScreenMenu",setup(e){const{theme:t}=xe();return(n,s)=>l(t).nav?(p(),w("nav",Z5,[(p(!0),w(Y,null,le(l(t).nav,o=>(p(),w(Y,{key:JSON.stringify(o)},["link"in o?(p(),D(O5,{key:0,item:o},null,8,["item"])):"component"in o?(p(),D(Be(o.component),nt({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(p(),D(Q5,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):A("",!0)}}),t7=z({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=xe();return(n,s)=>l(t).socialLinks?(p(),D(qc,{key:0,class:"VPNavScreenSocialLinks",links:l(t).socialLinks},null,8,["links"])):A("",!0)}}),n7={class:"list"},s7=z({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=Ai({correspondingLink:!0}),s=j(!1);function o(){s.value=!s.value}return(i,r)=>l(t).length&&l(n).label?(p(),w("div",{key:0,class:T(["VPNavScreenTranslations",{open:s.value}])},[S("button",{class:"title",onClick:o},[r[0]||(r[0]=S("span",{class:"vpi-languages icon lang"},null,-1)),rt(" "+W(l(n).label)+" ",1),r[1]||(r[1]=S("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),S("ul",n7,[(p(!0),w(Y,null,le(l(t),a=>(p(),w("li",{key:a.link,class:"item"},[H(Vn,{class:"link",href:a.link,lang:a.lang,dir:a.dir},{default:O(()=>[rt(W(a.text),1)]),_:2},1032,["href","lang","dir"])]))),128))])],2)):A("",!0)}}),o7=ke(s7,[["__scopeId","data-v-c8207ae8"]]),i7={class:"container"},r7=z({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=j(null),n=rh(wt?document.body:null);return(s,o)=>(p(),D(vt,{name:"fade",onEnter:o[0]||(o[0]=i=>n.value=!0),onAfterLeave:o[1]||(o[1]=i=>n.value=!1)},{default:O(()=>[e.open?(p(),w("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[S("div",i7,[F(s.$slots,"nav-screen-content-before",{},void 0,!0),H(e7,{class:"menu"}),H(o7,{class:"translations"}),H(B5,{class:"appearance"}),H(t7,{class:"social-links"}),F(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):A("",!0)]),_:3}))}}),a7=ke(r7,[["__scopeId","data-v-5d62db4a"]]),l7={key:0,class:"VPNav"},c7=z({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=t8(),{frontmatter:o}=xe(),i=M(()=>o.value.navbar!==!1);return In(zc,{closeScreen:n}),Hn(()=>{wt&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(r,a)=>i.value?(p(),w("header",l7,[H(I5,{"is-screen-open":l(t),onToggleScreen:l(s)},{"nav-bar-title-before":O(()=>[F(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[F(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":O(()=>[F(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":O(()=>[F(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),H(a7,{open:l(t)},{"nav-screen-content-before":O(()=>[F(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":O(()=>[F(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):A("",!0)}}),u7=ke(c7,[["__scopeId","data-v-3b54cd11"]]),f7=["role","tabindex"],d7={key:1,class:"items"},h7=z({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:r,hasChildren:a,toggle:c}=d4(M(()=>t.item)),u=M(()=>a.value?"section":"div"),f=M(()=>o.value?"a":"div"),d=M(()=>a.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),h=M(()=>o.value?void 0:"button"),m=M(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":o.value},{"is-active":i.value},{"has-active":r.value}]);function g(b){"key"in b&&b.key!=="Enter"||!t.item.link&&c()}function v(){t.item.link&&c()}return(b,k)=>{const C=un("VPSidebarItem",!0);return p(),D(Be(u.value),{class:T(["VPSidebarItem",m.value])},{default:O(()=>[e.item.text?(p(),w("div",nt({key:0,class:"item",role:h.value},Ec(e.item.items?{click:g,keydown:g}:{},!0),{tabindex:e.item.items&&0}),[k[1]||(k[1]=S("div",{class:"indicator"},null,-1)),e.item.link?(p(),D(Vn,{key:0,tag:f.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:O(()=>[(p(),D(Be(d.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(p(),D(Be(d.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(p(),w("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:v,onKeydown:va(v,["enter"]),tabindex:"0"},[...k[0]||(k[0]=[S("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):A("",!0)],16,f7)):A("",!0),e.item.items&&e.item.items.length?(p(),w("div",d7,[e.depth<5?(p(!0),w(Y,{key:0},le(e.item.items,y=>(p(),D(C,{key:y.text,item:y,depth:e.depth+1},null,8,["item","depth"]))),128)):A("",!0)])):A("",!0)]),_:1},8,["class"])}}}),p7=ke(h7,[["__scopeId","data-v-5a4c94f8"]]),m7=z({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=j(!0);let n=null;return be(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),as(()=>{n!=null&&(clearTimeout(n),n=null)}),(s,o)=>(p(!0),w(Y,null,le(e.items,i=>(p(),w("div",{key:i.text,class:T(["group",{"no-transition":t.value}])},[H(p7,{item:i,depth:0},null,8,["item"])],2))),128))}}),g7=ke(m7,[["__scopeId","data-v-93551a19"]]),v7={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},y7=z({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=ls(),s=e,o=j(null),i=rh(wt?document.body:null);te([s,o],()=>{s.open?(i.value=!0,o.value?.focus()):i.value=!1},{immediate:!0,flush:"post"});const r=j(0);return te(t,()=>{r.value+=1},{deep:!0}),(a,c)=>l(n)?(p(),w("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:c[0]||(c[0]=To(()=>{},["stop"]))},[c[2]||(c[2]=S("div",{class:"curtain"},null,-1)),S("nav",v7,[c[1]||(c[1]=S("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),F(a.$slots,"sidebar-nav-before",{},void 0,!0),(p(),D(g7,{items:l(t),key:r.value},null,8,["items"])),F(a.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):A("",!0)}}),b7=ke(y7,[["__scopeId","data-v-f794e379"]]),k7={href:"#VPContent",class:"VPSkipLink visually-hidden"},w7=z({__name:"VPSkipLink",setup(e){const{theme:t}=xe(),n=kn(),s=j();return te(()=>n.path,()=>s.value.focus()),(o,i)=>(p(),w(Y,null,[S("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),S("a",k7,W(l(t).skipToContentLabel||"Skip to content"),1)],64))}}),C7=ke(w7,[["__scopeId","data-v-71bad25f"]]),_7=z({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=f4();h4({closeSidebar:s});const{frontmatter:o}=xe(),i=Si(),r=M(()=>!!i["home-hero-image"]);return In(mh,{heroImageSlotExists:r}),(a,c)=>{const u=un("Content");return l(o).layout!==!1?(p(),w("div",{key:0,class:T(["Layout",l(o).pageClass])},[F(a.$slots,"layout-top",{},void 0,!0),H(C7),H(Kv,{class:"backdrop",show:l(t),onClick:l(s)},null,8,["show","onClick"]),H(u7,null,{"nav-bar-title-before":O(()=>[F(a.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[F(a.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":O(()=>[F(a.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":O(()=>[F(a.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":O(()=>[F(a.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":O(()=>[F(a.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),H(e8,{open:l(t),onOpenMenu:l(n)},null,8,["open","onOpenMenu"]),H(b7,{open:l(t)},{"sidebar-nav-before":O(()=>[F(a.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":O(()=>[F(a.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),H(D6,null,{"page-top":O(()=>[F(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":O(()=>[F(a.$slots,"page-bottom",{},void 0,!0)]),"not-found":O(()=>[F(a.$slots,"not-found",{},void 0,!0)]),"home-hero-before":O(()=>[F(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":O(()=>[F(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[F(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[F(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[F(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[F(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":O(()=>[F(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":O(()=>[F(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":O(()=>[F(a.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":O(()=>[F(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":O(()=>[F(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":O(()=>[F(a.$slots,"doc-after",{},void 0,!0)]),"doc-top":O(()=>[F(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":O(()=>[F(a.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":O(()=>[F(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":O(()=>[F(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":O(()=>[F(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[F(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[F(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[F(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),H(U6),F(a.$slots,"layout-bottom",{},void 0,!0)],2)):(p(),D(u,{key:1}))}}}),S7=ke(_7,[["__scopeId","data-v-7a3bcf59"]]),kh={Layout:S7,enhanceApp:({app:e})=>{e.component("Badge",Q0)}},Vf=e=>/^(http?:|https?:|mailto:|tel:)/.test(e),Kc=e=>{try{return new URL(e),!0}catch{return!1}},Fo=(e,t)=>Object.prototype.toString.call(e)===`[object ${t}]`,ht=e=>Fo(e,"Function")||E7(e),ei=e=>e!==null&&Fo(e,"Object"),Yc=e=>Fo(e,"Number")&&!Number.isNaN(e),T7=e=>Je(e)?!Number.isNaN(Number(e)):!1,E7=e=>Fo(e,"AsyncFunction"),Je=e=>Fo(e,"String"),Qn=e=>Fo(e,"Boolean"),x7=e=>typeof Array.isArray>"u"?Object.prototype.toString.call(e)==="[object Array]":Array.isArray(e),Il=e=>typeof Element>"u"?!1:e instanceof Element,A7=()=>pe&&window?.navigator?.userAgent&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||window?.navigator?.maxTouchPoints>2&&/iPad|Macintosh/.test(window?.navigator.userAgent)),$7=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},pe=typeof window<"u"&&typeof document<"u",Of=(e="yyyy-MM-dd hh:mm:ss",t=!0)=>hi(new Date,e,t),hi=(e,t="yyyy-MM-dd hh:mm:ss",n=!0)=>{if(!e)return"";const s=new Date(e),o=n?s.getUTCFullYear():s.getFullYear(),i=String((n?s.getUTCMonth():s.getMonth())+1).padStart(2,"0"),r=String(n?s.getUTCDate():s.getDate()).padStart(2,"0"),a=String(n?s.getUTCHours():s.getHours()).padStart(2,"0"),c=String(n?s.getUTCMinutes():s.getMinutes()).padStart(2,"0"),u=String(n?s.getUTCSeconds():s.getSeconds()).padStart(2,"0");return t.replace("yyyy",o.toString()).replace("MM",i).replace("dd",r).replace("hh",a).replace("mm",c).replace("ss",u)},L7=(e,t)=>{const n=+new Date(e),s=+new Date,o=Math.abs(s-n),i=1e3,r=i*60,a=r*60,c=a*24,u=c*7,f=c*30,d=f*12;return o<1?"刚刚":o{const n=+new Date(e),s=+new Date;return Math.floor(Math.abs(n-s)/(1e3*60*60*24))},Df=e=>e.charAt(0).toUpperCase()+e.slice(1),sn=(e,t="px")=>e?Yc(e)||T7(e)?`${e}${t}`:Je(e)?e:"":"",P7=(e,t="px")=>{if(e){if(Yc(e))return e;if(Je(e))return Number(e.replace(t,""))}},M7=(e,t,n)=>{let s={...e};return t.includes(".")?(t.split(".").forEach(o=>s=s[o]??""),s||n):s[t]||n},wh=e=>{let t="";if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex");e=e.replace("#",""),t=e.match(/../g);for(let s=0;s<3;s++)t[s]=parseInt(t[s],16);return t},Ch=(e,t,n)=>{const s=/^\d{1,3}$/;if(!s.test(e)||!s.test(t)||!s.test(n))return console.error("[Teek Error] 输入错误的 rgb 颜色值");const o=[e.toString(16),t.toString(16),n.toString(16)];for(let i=0;i<3;i++)o[i].length===1&&(o[i]=`0${o[i]}`);return`#${o.join("")}`},Cn=(e,t)=>{if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex 颜色值");const s=wh(e);for(let o=0;o<3;o++)s[o]=Math.round(20.5*t+s[o]*(1-t));return Ch(s[0],s[1],s[2])},_n=(e,t)=>{if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex 颜色值");const s=wh(e);for(let o=0;o<3;o++)s[o]=Math.round(255*t+s[o]*(1-t));return Ch(s[0],s[1],s[2])},F7=e=>{if(!pe)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Baidu analytics id is empty");if(!document.querySelector(`#baidu-analytics-${t}`)){window._hmt=window._hmt||[];const s=document.createElement("script");s.id=`baidu-analytics-${t}`,s.async=!0,s.src=`https://hm.baidu.com/hm.js?${t}`,document.querySelector("head")?.appendChild(s)}},B7=(e,t)=>{if(!pe)return;const{id:n,production:s=!0}=e||{};if(n){if((!t||!Je(t))&&(t="/"),t.startsWith("http")){const o=t.split("/"),i=`${o[0]}//${o[2]}`;t=t.replace(i,"")}window._hmt&&(window._hmt.push(["_setAccount",n]),window._hmt.push(["_trackPageview",t]))}},N7=e=>{if(!pe||window.dataLayer&&window.gtag)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Google analytics id is empty");if(!document.querySelector(`#google-analytics-${t}`)){const s=document.createElement("script");s.id=`google-analytics-${t}`,s.src=`https://www.googletagmanager.com/gtag/js?id=${t}`,s.async=!0,document.head.appendChild(s),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",t)}},V7=(e,t=!0)=>{if(!pe)return;let n=[];if(Array.isArray(e)?n.push(...e):n.push(e),n=n.filter(s=>!!s.id),!!n.length)for(const s of n){const{id:o,src:i}=s;if(!document.querySelector(`#umami-analytics-${o}`)){const r=document.createElement("script");r.id=`umami-analytics-${o}`,r.async=!0,r.defer=!0,r.setAttribute("data-website-id",o),r.src=i,document.head.appendChild(r)}}},O7=e=>{if(!pe||window.clarity&&window.clarity.q)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Microsoft Clarity analytics id is empty");if(!document.querySelector(`#clarity-analytics-${t}`)){const s=document.createElement("script");s.id=`clarity-analytics-${t}`,s.async=!0,s.src=`https://www.clarity.ms/tag/${t}`,document.head.appendChild(s),window.clarity??=function(){(window.clarity.q??=[]).push(arguments)}}};typeof window<"u"&&(window._iconfont_svg_string_4999519='',(e=>{var t=(n=(n=document.getElementsByTagName("script"))[n.length-1]).getAttribute("data-injectcss"),n=n.getAttribute("data-disable-injectsvg");if(!n){var s,o,i,r,a,c=function(d,h){h.parentNode.insertBefore(d,h)};if(t&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(d){console&&console.log(d)}}s=function(){var d,h=document.createElement("div");h.innerHTML=e._iconfont_svg_string_4999519,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(d=document.body).firstChild?c(h,d.firstChild):d.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=s,r=e.document,a=!1,f(),r.onreadystatechange=function(){r.readyState=="complete"&&(r.onreadystatechange=null,u())})}function u(){a||(a=!0,i())}function f(){try{r.documentElement.doScroll("left")}catch{return void setTimeout(f,50)}u()}})(window));var _h=`{ae&&Ut(ae,x,_),G&&q.enter(y),U&&Nn(_,null,x,"mounted")},$)}return y.nextSibling},m=(y,_,x,$,V,E,I)=>{I=I||!!_.dynamicChildren;const P=_.children,N=P.length;for(let L=0;L{const{slotScopeIds:I}=_;I&&(V=V?V.concat(I):I);const P=r(y),N=m(i(y),_,P,x,$,V,E);return N&&lo(N)&&N.data==="]"?i(_.anchor=N):(to(),c(_.anchor=u("]"),P,N),N)},v=(y,_,x,$,V,E)=>{if(Hi(y.parentElement,1)||to(),_.el=null,E){const N=b(y);for(;;){const L=i(y);if(L&&L!==N)a(L);else break}}const I=i(y),P=r(y);return a(y),n(null,_,P,I,x,$,Ri(P),V),x&&(x.vnode.el=_.el,pa(x,_.el)),I},b=(y,_="[",x="]")=>{let $=0;for(;y;)if(y=i(y),y&&lo(y)&&(y.data===_&&$++,y.data===x)){if($===0)return i(y);$--}return y},k=(y,_,x)=>{const $=_.parentNode;$&&$.replaceChild(y,_);let V=x;for(;V;)V.vnode.el===_&&(V.vnode.el=V.subTree.el=y),V=V.parent},C=y=>y.nodeType===1&&y.tagName==="TEMPLATE";return[f,d]}const Xu="data-allow-mismatch",Hm={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Hi(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Xu);)e=e.parentElement;const n=e&&e.getAttribute(Xu);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Hm[t])}}const zm=ea().requestIdleCallback||(e=>setTimeout(e,1)),jm=ea().cancelIdleCallback||(e=>clearTimeout(e)),Um=(e=1e4)=>t=>{const n=zm(t,{timeout:e});return()=>jm(n)};function Wm(e){const{top:t,left:n,bottom:s,right:o}=e.getBoundingClientRect(),{innerHeight:i,innerWidth:r}=window;return(t>0&&t0&&s0&&n0&&o(t,n)=>{const s=new IntersectionObserver(o=>{for(const i of o)if(i.isIntersecting){s.disconnect(),t();break}},e);return n(o=>{if(o instanceof Element){if(Wm(o))return t(),s.disconnect(),!1;s.observe(o)}}),()=>s.disconnect()},Km=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},Ym=(e=[])=>(t,n)=>{_e(e)&&(e=[e]);let s=!1;const o=r=>{s||(s=!0,i(),t(),r.target.dispatchEvent(new r.constructor(r.type,r)))},i=()=>{n(r=>{for(const a of e)r.removeEventListener(a,o)})};return n(r=>{for(const a of e)r.addEventListener(a,o,{once:!0})}),i};function Gm(e,t){if(lo(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(lo(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const _s=e=>!!e.type.__asyncLoader;function wc(e){ye(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:o=200,hydrate:i,timeout:r,suspensible:a=!0,onError:c}=e;let u=null,f,d=0;const h=()=>(d++,u=null,m()),m=()=>{let g;return u||(g=u=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((b,k)=>{c(v,()=>b(h()),()=>k(v),d+1)});throw v}).then(v=>g!==u&&u?u:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),f=v,v)))};return z({name:"AsyncComponentWrapper",__asyncLoader:m,__asyncHydrate(g,v,b){let k=!1;(v.bu||(v.bu=[])).push(()=>k=!0);const C=()=>{k||b()},y=i?()=>{const _=i(C,x=>Gm(g,x));_&&(v.bum||(v.bum=[])).push(_)}:C;f?y():m().then(()=>!v.isUnmounted&&y())},get __asyncResolved(){return f},setup(){const g=St;if(kc(g),f)return()=>zi(f,g);const v=y=>{u=null,Xs(y,g,13,!s)};if(a&&g.suspense||wo)return m().then(y=>()=>zi(y,g)).catch(y=>(v(y),()=>s?H(s,{error:y}):null));const b=j(!1),k=j(),C=j(!!o);return o&&setTimeout(()=>{C.value=!1},o),r!=null&&setTimeout(()=>{if(!b.value&&!k.value){const y=new Error(`Async component timed out after ${r}ms.`);v(y),k.value=y}},r),m().then(()=>{b.value=!0,g.parent&&_i(g.parent.vnode)&&g.parent.update()}).catch(y=>{v(y),k.value=y}),()=>{if(b.value&&f)return zi(f,g);if(k.value&&s)return H(s,{error:k.value});if(n&&!C.value)return zi(n,g)}}})}function zi(e,t){const{ref:n,props:s,children:o,ce:i}=t.vnode,r=H(e,s,o);return r.ref=n,r.ce=i,delete t.vnode.ce,r}const _i=e=>e.type.__isKeepAlive,Jm={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=dt(),s=n.ctx;if(!s.renderer)return()=>{const C=t.default&&t.default();return C&&C.length===1?C[0]:C};const o=new Map,i=new Set;let r=null;const a=n.suspense,{renderer:{p:c,m:u,um:f,o:{createElement:d}}}=s,h=d("div");s.activate=(C,y,_,x,$)=>{const V=C.component;u(C,y,_,0,a),c(V.vnode,C,y,_,V,a,x,C.slotScopeIds,$),pt(()=>{V.isDeactivated=!1,V.a&&mo(V.a);const E=C.props&&C.props.onVnodeMounted;E&&Ut(E,V.parent,C)},a)},s.deactivate=C=>{const y=C.component;xr(y.m),xr(y.a),u(C,h,null,1,a),pt(()=>{y.da&&mo(y.da);const _=C.props&&C.props.onVnodeUnmounted;_&&Ut(_,y.parent,C),y.isDeactivated=!0},a)};function m(C){Va(C),f(C,n,a,!0)}function g(C){o.forEach((y,_)=>{const x=bl(y.type);x&&!C(x)&&v(_)})}function v(C){const y=o.get(C);y&&(!r||!Tn(y,r))?m(y):r&&Va(r),o.delete(C),i.delete(C)}te(()=>[e.include,e.exclude],([C,y])=>{C&&g(_=>Wo(C,_)),y&&g(_=>!Wo(y,_))},{flush:"post",deep:!0});let b=null;const k=()=>{b!=null&&(Ar(n.subTree.type)?pt(()=>{o.set(b,ji(n.subTree))},n.subTree.suspense):o.set(b,ji(n.subTree)))};return be(k),Mo(k),as(()=>{o.forEach(C=>{const{subTree:y,suspense:_}=n,x=ji(y);if(C.type===x.type&&C.key===x.key){Va(x);const $=x.component.da;$&&pt($,_);return}m(C)})}),()=>{if(b=null,!t.default)return r=null;const C=t.default(),y=C[0];if(C.length>1)return r=null,C;if(!Ln(y)||!(y.shapeFlag&4)&&!(y.shapeFlag&128))return r=null,y;let _=ji(y);if(_.type===ut)return r=null,_;const x=_.type,$=bl(_s(_)?_.type.__asyncResolved||{}:x),{include:V,exclude:E,max:I}=e;if(V&&(!$||!Wo(V,$))||E&&$&&Wo(E,$))return _.shapeFlag&=-257,r=_,y;const P=_.key==null?x:_.key,N=o.get(P);return _.el&&(_=Rn(_),y.shapeFlag&128&&(y.ssContent=_)),b=P,N?(_.el=N.el,_.component=N.component,_.transition&&os(_,_.transition),_.shapeFlag|=512,i.delete(P),i.add(P)):(i.add(P),I&&i.size>parseInt(I,10)&&v(i.values().next().value)),_.shapeFlag|=256,r=_,Ar(y.type)?y:_}}},Xm=Jm;function Wo(e,t){return ce(e)?e.some(n=>Wo(n,t)):_e(e)?e.split(",").includes(t):S2(e)?(e.lastIndex=0,e.test(t)):!1}function H1(e,t){j1(e,"a",t)}function z1(e,t){j1(e,"da",t)}function j1(e,t,n=St){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(ua(t,s,n),n){let o=n.parent;for(;o&&o.parent;)_i(o.parent.vnode)&&Qm(s,t,n,o),o=o.parent}}function Qm(e,t,n,s){const o=ua(t,e,s,!0);cn(()=>{rc(s[t],o)},n)}function Va(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ji(e){return e.shapeFlag&128?e.ssContent:e}function ua(e,t,n=St,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{ts();const a=qs(n),c=yn(t,n,e,r);return a(),ns(),c});return s?o.unshift(i):o.push(i),i}}const rs=e=>(t,n=St)=>{(!wo||e==="sp")&&ua(e,(...s)=>t(...s),n)},fa=rs("bm"),be=rs("m"),Cc=rs("bu"),Mo=rs("u"),as=rs("bum"),cn=rs("um"),U1=rs("sp"),W1=rs("rtg"),q1=rs("rtc");function K1(e,t=St){ua("ec",e,t)}const _c="components",Zm="directives";function un(e,t){return Sc(_c,e,!0,t)||e}const Y1=Symbol.for("v-ndc");function Be(e){return _e(e)?Sc(_c,e,!1)||e:e||Y1}function eg(e){return Sc(Zm,e)}function Sc(e,t,n=!0,s=!1){const o=Tt||St;if(o){const i=o.type;if(e===_c){const a=bl(i,!1);if(a&&(a===t||a===tt(t)||a===Js(tt(t))))return i}const r=Qu(o[e]||i[e],t)||Qu(o.appContext[e],t);return!r&&s?i:r}}function Qu(e,t){return e&&(e[t]||e[tt(t)]||e[Js(tt(t))])}function le(e,t,n,s){let o;const i=n&&n[s],r=ce(e);if(r||_e(e)){const a=r&&Cs(e);let c=!1,u=!1;a&&(c=!an(e),u=ss(e),e=sa(e)),o=new Array(e.length);for(let f=0,d=e.length;ft(a,c,void 0,i&&i[c]));else{const a=Object.keys(e);o=new Array(a.length);for(let c=0,u=a.length;c{const i=s.fn(...o);return i&&(i.key=s.key),i}:s.fn)}return e}function F(e,t,n={},s,o){if(Tt.ce||Tt.parent&&_s(Tt.parent)&&Tt.parent.ce){const u=Object.keys(n).length>0;return t!=="default"&&(n.name=t),p(),D(Y,null,[H("slot",n,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),p();const r=i&&Tc(i(n)),a=n.key||r&&r.key,c=D(Y,{key:(a&&!Gt(a)?a:`_${t}`)+(!r&&s?"_fb":"")},r||(s?s():[]),r&&e._===1?64:-2);return!o&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Tc(e){return e.some(t=>Ln(t)?!(t.type===ut||t.type===Y&&!Tc(t.children)):!0)?e:null}function Ec(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:po(s)]=e[s];return n}const cl=e=>e?E0(e)?Ei(e):cl(e.parent):null,Jo=Ie(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>cl(e.parent),$root:e=>cl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>xc(e),$forceUpdate:e=>e.f||(e.f=()=>{vc(e.update)}),$nextTick:e=>e.n||(e.n=ze.bind(e.proxy)),$watch:e=>Tg.bind(e)}),Oa=(e,t)=>e!==Le&&!e.__isScriptSetup&&Oe(e,t),ul={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:i,accessCache:r,type:a,appContext:c}=e;let u;if(t[0]!=="$"){const m=r[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(Oa(s,t))return r[t]=1,s[t];if(o!==Le&&Oe(o,t))return r[t]=2,o[t];if((u=e.propsOptions[0])&&Oe(u,t))return r[t]=3,i[t];if(n!==Le&&Oe(n,t))return r[t]=4,n[t];fl&&(r[t]=0)}}const f=Jo[t];let d,h;if(f)return t==="$attrs"&&Pt(e.attrs,"get",""),f(e);if((d=a.__cssModules)&&(d=d[t]))return d;if(n!==Le&&Oe(n,t))return r[t]=4,n[t];if(h=c.config.globalProperties,Oe(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return Oa(o,t)?(o[t]=n,!0):s!==Le&&Oe(s,t)?(s[t]=n,!0):Oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i,type:r}},a){let c,u;return!!(n[a]||e!==Le&&a[0]!=="$"&&Oe(e,a)||Oa(t,a)||(c=i[0])&&Oe(c,a)||Oe(s,a)||Oe(Jo,a)||Oe(o.config.globalProperties,a)||(u=r.__cssModules)&&u[a])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},tg=Ie({},ul,{get(e,t){if(t!==Symbol.unscopables)return ul.get(e,t,e)},has(e,t){return t[0]!=="_"&&!L2(t)}});function ng(){return null}function sg(){return null}function og(e){}function ig(e){}function rg(){return null}function ag(){}function lg(e,t){return null}function Si(){return G1().slots}function cg(){return G1().attrs}function G1(e){const t=dt();return t.setupContext||(t.setupContext=$0(t))}function ci(e){return ce(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function J1(e,t){const n=ci(e);for(const s in t){if(s.startsWith("__skip"))continue;let o=n[s];o?ce(o)||ye(o)?o=n[s]={type:o,default:t[s]}:o.default=t[s]:o===null&&(o=n[s]={default:t[s]}),o&&t[`__skip_${s}`]&&(o.skipFactory=!0)}return n}function $n(e,t){return!e||!t?e||t:ce(e)&&ce(t)?e.concat(t):Ie({},ci(e),ci(t))}function X1(e,t){const n={};for(const s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n}function ug(e){const t=dt();let n=e();return gl(),ac(n)&&(n=n.catch(s=>{throw qs(t),s})),[n,()=>qs(t)]}let fl=!0;function fg(e){const t=xc(e),n=e.proxy,s=e.ctx;fl=!1,t.beforeCreate&&Zu(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:r,watch:a,provide:c,inject:u,created:f,beforeMount:d,mounted:h,beforeUpdate:m,updated:g,activated:v,deactivated:b,beforeDestroy:k,beforeUnmount:C,destroyed:y,unmounted:_,render:x,renderTracked:$,renderTriggered:V,errorCaptured:E,serverPrefetch:I,expose:P,inheritAttrs:N,components:L,directives:U,filters:q}=t;if(u&&dg(u,s,null),r)for(const ae in r){const ne=r[ae];ye(ne)&&(s[ae]=ne.bind(n))}if(o){const ae=o.call(n,n);Ue(ae)&&(e.data=Dn(ae))}if(fl=!0,i)for(const ae in i){const ne=i[ae],he=ye(ne)?ne.bind(n,n):ye(ne.get)?ne.get.bind(n,n):Ht,st=!ye(ne)&&ye(ne.set)?ne.set.bind(n):Ht,je=M({get:he,set:st});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>je.value,set:yt=>je.value=yt})}if(a)for(const ae in a)Q1(a[ae],s,n,ae);if(c){const ae=ye(c)?c.call(n):c;Reflect.ownKeys(ae).forEach(ne=>{In(ne,ae[ne])})}f&&Zu(f,e,"c");function G(ae,ne){ce(ne)?ne.forEach(he=>ae(he.bind(n))):ne&&ae(ne.bind(n))}if(G(fa,d),G(be,h),G(Cc,m),G(Mo,g),G(H1,v),G(z1,b),G(K1,E),G(q1,$),G(W1,V),G(as,C),G(cn,_),G(U1,I),ce(P))if(P.length){const ae=e.exposed||(e.exposed={});P.forEach(ne=>{Object.defineProperty(ae,ne,{get:()=>n[ne],set:he=>n[ne]=he,enumerable:!0})})}else e.exposed||(e.exposed={});x&&e.render===Ht&&(e.render=x),N!=null&&(e.inheritAttrs=N),L&&(e.components=L),U&&(e.directives=U),I&&kc(e)}function dg(e,t,n=Ht){ce(e)&&(e=dl(e));for(const s in e){const o=e[s];let i;Ue(o)?"default"in o?i=qe(o.from||s,o.default,!0):i=qe(o.from||s):i=qe(o),Ye(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:r=>i.value=r}):t[s]=i}}function Zu(e,t,n){yn(ce(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function Q1(e,t,n,s){let o=s.includes(".")?g0(n,s):()=>n[s];if(_e(e)){const i=t[e];ye(i)&&te(o,i)}else if(ye(e))te(o,e.bind(n));else if(Ue(e))if(ce(e))e.forEach(i=>Q1(i,t,n,s));else{const i=ye(e.handler)?e.handler.bind(n):t[e.handler];ye(i)&&te(o,i,e)}}function xc(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,a=i.get(t);let c;return a?c=a:!o.length&&!n&&!s?c=t:(c={},o.length&&o.forEach(u=>Er(c,u,r,!0)),Er(c,t,r)),Ue(t)&&i.set(t,c),c}function Er(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&Er(e,i,n,!0),o&&o.forEach(r=>Er(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const a=hg[r]||n&&n[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const hg={data:ef,props:tf,emits:tf,methods:qo,computed:qo,beforeCreate:Vt,created:Vt,beforeMount:Vt,mounted:Vt,beforeUpdate:Vt,updated:Vt,beforeDestroy:Vt,beforeUnmount:Vt,destroyed:Vt,unmounted:Vt,activated:Vt,deactivated:Vt,errorCaptured:Vt,serverPrefetch:Vt,components:qo,directives:qo,watch:mg,provide:ef,inject:pg};function ef(e,t){return t?e?function(){return Ie(ye(e)?e.call(this,this):e,ye(t)?t.call(this,this):t)}:t:e}function pg(e,t){return qo(dl(e),dl(t))}function dl(e){if(ce(e)){const t={};for(let n=0;n1)return n&&ye(t)?t.call(s&&s.proxy):t}}function Ac(){return!!(dt()||Ds)}const e0={},t0=()=>Object.create(e0),n0=e=>Object.getPrototypeOf(e)===e0;function yg(e,t,n,s=!1){const o={},i=t0();e.propsDefaults=Object.create(null),s0(e,t,o,i);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);n?e.props=s?o:pc(o):e.type.props?e.props=o:e.props=i,e.attrs=i}function bg(e,t,n,s){const{props:o,attrs:i,vnode:{patchFlag:r}}=e,a=Pe(o),[c]=e.propsOptions;let u=!1;if((s||r>0)&&!(r&16)){if(r&8){const f=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[h,m]=o0(d,t,!0);Ie(r,h),m&&a.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return Ue(e)&&s.set(e,fo),fo;if(ce(i))for(let f=0;fe==="_"||e==="_ctx"||e==="$stable",Lc=e=>ce(e)?e.map(qt):[qt(e)],wg=(e,t,n)=>{if(t._n)return t;const s=O((...o)=>Lc(t(...o)),n);return s._c=!1,s},i0=(e,t,n)=>{const s=e._ctx;for(const o in e){if($c(o))continue;const i=e[o];if(ye(i))t[o]=wg(o,i,s);else if(i!=null){const r=Lc(i);t[o]=()=>r}}},r0=(e,t)=>{const n=Lc(t);e.slots.default=()=>n},a0=(e,t,n)=>{for(const s in t)(n||!$c(s))&&(e[s]=t[s])},Cg=(e,t,n)=>{const s=e.slots=t0();if(e.vnode.shapeFlag&32){const o=t._;o?(a0(s,t,n),n&&t1(s,"_",o,!0)):i0(t,s)}else t&&r0(e,t)},_g=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,r=Le;if(s.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:a0(o,t,n):(i=!t.$stable,i0(t,o)),r=t}else t&&(r0(e,t),r={default:1});if(i)for(const a in o)!$c(a)&&r[a]==null&&delete o[a]},pt=k0;function l0(e){return u0(e)}function c0(e){return u0(e,Rm)}function u0(e,t){const n=ea();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:r,createText:a,createComment:c,setText:u,setElementText:f,parentNode:d,nextSibling:h,setScopeId:m=Ht,insertStaticContent:g}=e,v=(B,R,K,ee=null,X=null,Q=null,re=void 0,oe=null,se=!!R.dynamicChildren)=>{if(B===R)return;B&&!Tn(B,R)&&(ee=Ne(B),yt(B,X,Q,!0),B=null),R.patchFlag===-2&&(se=!1,R.dynamicChildren=null);const{type:Z,ref:ve,shapeFlag:ue}=R;switch(Z){case Ss:b(B,R,K,ee);break;case ut:k(B,R,K,ee);break;case Rs:B==null&&C(R,K,ee,re);break;case Y:L(B,R,K,ee,X,Q,re,oe,se);break;default:ue&1?x(B,R,K,ee,X,Q,re,oe,se):ue&6?U(B,R,K,ee,X,Q,re,oe,se):(ue&64||ue&128)&&Z.process(B,R,K,ee,X,Q,re,oe,se,bt)}ve!=null&&X?yo(ve,B&&B.ref,Q,R||B,!R):ve==null&&B&&B.ref!=null&&yo(B.ref,null,Q,B,!0)},b=(B,R,K,ee)=>{if(B==null)s(R.el=a(R.children),K,ee);else{const X=R.el=B.el;R.children!==B.children&&u(X,R.children)}},k=(B,R,K,ee)=>{B==null?s(R.el=c(R.children||""),K,ee):R.el=B.el},C=(B,R,K,ee)=>{[B.el,B.anchor]=g(B.children,R,K,ee,B.el,B.anchor)},y=({el:B,anchor:R},K,ee)=>{let X;for(;B&&B!==R;)X=h(B),s(B,K,ee),B=X;s(R,K,ee)},_=({el:B,anchor:R})=>{let K;for(;B&&B!==R;)K=h(B),o(B),B=K;o(R)},x=(B,R,K,ee,X,Q,re,oe,se)=>{if(R.type==="svg"?re="svg":R.type==="math"&&(re="mathml"),B==null)$(R,K,ee,X,Q,re,oe,se);else{const Z=B.el&&B.el._isVueCE?B.el:null;try{Z&&Z._beginPatch(),I(B,R,X,Q,re,oe,se)}finally{Z&&Z._endPatch()}}},$=(B,R,K,ee,X,Q,re,oe)=>{let se,Z;const{props:ve,shapeFlag:ue,transition:me,dirs:Ce}=B;if(se=B.el=r(B.type,Q,ve&&ve.is,ve),ue&8?f(se,B.children):ue&16&&E(B.children,se,null,ee,X,Da(B,Q),re,oe),Ce&&Nn(B,null,ee,"created"),V(se,B,B.scopeId,re,ee),ve){for(const Xe in ve)Xe!=="value"&&!ws(Xe)&&i(se,Xe,null,ve[Xe],Q,ee);"value"in ve&&i(se,"value",null,ve.value,Q),(Z=ve.onVnodeBeforeMount)&&Ut(Z,ee,B)}Ce&&Nn(B,null,ee,"beforeMount");const Me=f0(X,me);Me&&me.beforeEnter(se),s(se,R,K),((Z=ve&&ve.onVnodeMounted)||Me||Ce)&&pt(()=>{Z&&Ut(Z,ee,B),Me&&me.enter(se),Ce&&Nn(B,null,ee,"mounted")},X)},V=(B,R,K,ee,X)=>{if(K&&m(B,K),ee)for(let Q=0;Q{for(let Z=se;Z{const oe=R.el=B.el;let{patchFlag:se,dynamicChildren:Z,dirs:ve}=R;se|=B.patchFlag&16;const ue=B.props||Le,me=R.props||Le;let Ce;if(K&&Ps(K,!1),(Ce=me.onVnodeBeforeUpdate)&&Ut(Ce,K,R,B),ve&&Nn(R,B,K,"beforeUpdate"),K&&Ps(K,!0),(ue.innerHTML&&me.innerHTML==null||ue.textContent&&me.textContent==null)&&f(oe,""),Z?P(B.dynamicChildren,Z,oe,K,ee,Da(R,X),Q):re||ne(B,R,oe,null,K,ee,Da(R,X),Q,!1),se>0){if(se&16)N(oe,ue,me,K,X);else if(se&2&&ue.class!==me.class&&i(oe,"class",null,me.class,X),se&4&&i(oe,"style",ue.style,me.style,X),se&8){const Me=R.dynamicProps;for(let Xe=0;Xe{Ce&&Ut(Ce,K,R,B),ve&&Nn(R,B,K,"updated")},ee)},P=(B,R,K,ee,X,Q,re)=>{for(let oe=0;oe{if(R!==K){if(R!==Le)for(const Q in R)!ws(Q)&&!(Q in K)&&i(B,Q,R[Q],null,X,ee);for(const Q in K){if(ws(Q))continue;const re=K[Q],oe=R[Q];re!==oe&&Q!=="value"&&i(B,Q,oe,re,X,ee)}"value"in K&&i(B,"value",R.value,K.value,X)}},L=(B,R,K,ee,X,Q,re,oe,se)=>{const Z=R.el=B?B.el:a(""),ve=R.anchor=B?B.anchor:a("");let{patchFlag:ue,dynamicChildren:me,slotScopeIds:Ce}=R;Ce&&(oe=oe?oe.concat(Ce):Ce),B==null?(s(Z,K,ee),s(ve,K,ee),E(R.children||[],K,ve,X,Q,re,oe,se)):ue>0&&ue&64&&me&&B.dynamicChildren?(P(B.dynamicChildren,me,K,X,Q,re,oe),(R.key!=null||X&&R===X.subTree)&&Ic(B,R,!0)):ne(B,R,K,ve,X,Q,re,oe,se)},U=(B,R,K,ee,X,Q,re,oe,se)=>{R.slotScopeIds=oe,B==null?R.shapeFlag&512?X.ctx.activate(R,K,ee,re,se):q(R,K,ee,X,Q,re,se):J(B,R,se)},q=(B,R,K,ee,X,Q,re)=>{const oe=B.component=T0(B,ee,X);if(_i(B)&&(oe.ctx.renderer=bt),x0(oe,!1,re),oe.asyncDep){if(X&&X.registerDep(oe,G,re),!B.el){const se=oe.subTree=H(ut);k(null,se,R,K),B.placeholder=se.el}}else G(oe,B,R,K,X,Q,re)},J=(B,R,K)=>{const ee=R.component=B.component;if(Ig(B,R,K))if(ee.asyncDep&&!ee.asyncResolved){ae(ee,R,K);return}else ee.next=R,ee.update();else R.el=B.el,ee.vnode=R},G=(B,R,K,ee,X,Q,re)=>{const oe=()=>{if(B.isMounted){let{next:ue,bu:me,u:Ce,parent:Me,vnode:Xe}=B;{const Zt=d0(B);if(Zt){ue&&(ue.el=Xe.el,ae(B,ue,re)),Zt.asyncDep.then(()=>{B.isUnmounted||oe()});return}}let We=ue,zt;Ps(B,!1),ue?(ue.el=Xe.el,ae(B,ue,re)):ue=Xe,me&&mo(me),(zt=ue.props&&ue.props.onVnodeBeforeUpdate)&&Ut(zt,Me,ue,Xe),Ps(B,!0);const Et=rr(B),wn=B.subTree;B.subTree=Et,v(wn,Et,d(wn.el),Ne(wn),B,X,Q),ue.el=Et.el,We===null&&pa(B,Et.el),Ce&&pt(Ce,X),(zt=ue.props&&ue.props.onVnodeUpdated)&&pt(()=>Ut(zt,Me,ue,Xe),X)}else{let ue;const{el:me,props:Ce}=R,{bm:Me,m:Xe,parent:We,root:zt,type:Et}=B,wn=_s(R);if(Ps(B,!1),Me&&mo(Me),!wn&&(ue=Ce&&Ce.onVnodeBeforeMount)&&Ut(ue,We,R),Ps(B,!0),me&&Qt){const Zt=()=>{B.subTree=rr(B),Qt(me,B.subTree,B,X,null)};wn&&Et.__asyncHydrate?Et.__asyncHydrate(me,B,Zt):Zt()}else{zt.ce&&zt.ce._def.shadowRoot!==!1&&zt.ce._injectChildStyle(Et);const Zt=B.subTree=rr(B);v(null,Zt,K,ee,B,X,Q),R.el=Zt.el}if(Xe&&pt(Xe,X),!wn&&(ue=Ce&&Ce.onVnodeMounted)){const Zt=R;pt(()=>Ut(ue,We,Zt),X)}(R.shapeFlag&256||We&&_s(We.vnode)&&We.vnode.shapeFlag&256)&&B.a&&pt(B.a,X),B.isMounted=!0,R=K=ee=null}};B.scope.on();const se=B.effect=new si(oe);B.scope.off();const Z=B.update=se.run.bind(se),ve=B.job=se.runIfDirty.bind(se);ve.i=B,ve.id=B.uid,se.scheduler=()=>vc(ve),Ps(B,!0),Z()},ae=(B,R,K)=>{R.component=B;const ee=B.vnode.props;B.vnode=R,B.next=null,bg(B,R.props,ee,K),_g(B,R.children,K),ts(),Uu(B),ns()},ne=(B,R,K,ee,X,Q,re,oe,se=!1)=>{const Z=B&&B.children,ve=B?B.shapeFlag:0,ue=R.children,{patchFlag:me,shapeFlag:Ce}=R;if(me>0){if(me&128){st(Z,ue,K,ee,X,Q,re,oe,se);return}else if(me&256){he(Z,ue,K,ee,X,Q,re,oe,se);return}}Ce&8?(ve&16&&we(Z,X,Q),ue!==Z&&f(K,ue)):ve&16?Ce&16?st(Z,ue,K,ee,X,Q,re,oe,se):we(Z,X,Q,!0):(ve&8&&f(K,""),Ce&16&&E(ue,K,ee,X,Q,re,oe,se))},he=(B,R,K,ee,X,Q,re,oe,se)=>{B=B||fo,R=R||fo;const Z=B.length,ve=R.length,ue=Math.min(Z,ve);let me;for(me=0;meve?we(B,X,Q,!0,!1,ue):E(R,K,ee,X,Q,re,oe,se,ue)},st=(B,R,K,ee,X,Q,re,oe,se)=>{let Z=0;const ve=R.length;let ue=B.length-1,me=ve-1;for(;Z<=ue&&Z<=me;){const Ce=B[Z],Me=R[Z]=se?vs(R[Z]):qt(R[Z]);if(Tn(Ce,Me))v(Ce,Me,K,null,X,Q,re,oe,se);else break;Z++}for(;Z<=ue&&Z<=me;){const Ce=B[ue],Me=R[me]=se?vs(R[me]):qt(R[me]);if(Tn(Ce,Me))v(Ce,Me,K,null,X,Q,re,oe,se);else break;ue--,me--}if(Z>ue){if(Z<=me){const Ce=me+1,Me=Ceme)for(;Z<=ue;)yt(B[Z],X,Q,!0),Z++;else{const Ce=Z,Me=Z,Xe=new Map;for(Z=Me;Z<=me;Z++){const en=R[Z]=se?vs(R[Z]):qt(R[Z]);en.key!=null&&Xe.set(en.key,Z)}let We,zt=0;const Et=me-Me+1;let wn=!1,Zt=0;const Do=new Array(Et);for(Z=0;Z=Et){yt(en,X,Q,!0);continue}let Mn;if(en.key!=null)Mn=Xe.get(en.key);else for(We=Me;We<=me;We++)if(Do[We-Me]===0&&Tn(en,R[We])){Mn=We;break}Mn===void 0?yt(en,X,Q,!0):(Do[Mn-Me]=Z+1,Mn>=Zt?Zt=Mn:wn=!0,v(en,R[Mn],K,null,X,Q,re,oe,se),zt++)}const Vu=wn?Sg(Do):fo;for(We=Vu.length-1,Z=Et-1;Z>=0;Z--){const en=Me+Z,Mn=R[en],Ou=R[en+1],Du=en+1{const{el:Q,type:re,transition:oe,children:se,shapeFlag:Z}=B;if(Z&6){je(B.component.subTree,R,K,ee);return}if(Z&128){B.suspense.move(R,K,ee);return}if(Z&64){re.move(B,R,K,bt);return}if(re===Y){s(Q,R,K);for(let ue=0;ueoe.enter(Q),X);else{const{leave:ue,delayLeave:me,afterLeave:Ce}=oe,Me=()=>{B.ctx.isUnmounted?o(Q):s(Q,R,K)},Xe=()=>{Q._isLeaving&&Q[Yn](!0),ue(Q,()=>{Me(),Ce&&Ce()})};me?me(Q,Me,Xe):Xe()}else s(Q,R,K)},yt=(B,R,K,ee=!1,X=!1)=>{const{type:Q,props:re,ref:oe,children:se,dynamicChildren:Z,shapeFlag:ve,patchFlag:ue,dirs:me,cacheIndex:Ce}=B;if(ue===-2&&(X=!1),oe!=null&&(ts(),yo(oe,null,K,B,!0),ns()),Ce!=null&&(R.renderCache[Ce]=void 0),ve&256){R.ctx.deactivate(B);return}const Me=ve&1&&me,Xe=!_s(B);let We;if(Xe&&(We=re&&re.onVnodeBeforeUnmount)&&Ut(We,R,B),ve&6)Zs(B.component,K,ee);else{if(ve&128){B.suspense.unmount(K,ee);return}Me&&Nn(B,null,R,"beforeUnmount"),ve&64?B.type.remove(B,R,K,bt,ee):Z&&!Z.hasOnce&&(Q!==Y||ue>0&&ue&64)?we(Z,R,K,!1,!0):(Q===Y&&ue&384||!X&&ve&16)&&we(se,R,K),ee&&jn(B)}(Xe&&(We=re&&re.onVnodeUnmounted)||Me)&&pt(()=>{We&&Ut(We,R,B),Me&&Nn(B,null,R,"unmounted")},K)},jn=B=>{const{type:R,el:K,anchor:ee,transition:X}=B;if(R===Y){cs(K,ee);return}if(R===Rs){_(B);return}const Q=()=>{o(K),X&&!X.persisted&&X.afterLeave&&X.afterLeave()};if(B.shapeFlag&1&&X&&!X.persisted){const{leave:re,delayLeave:oe}=X,se=()=>re(K,Q);oe?oe(B.el,Q,se):se()}else Q()},cs=(B,R)=>{let K;for(;B!==R;)K=h(B),o(B),B=K;o(R)},Zs=(B,R,K)=>{const{bum:ee,scope:X,job:Q,subTree:re,um:oe,m:se,a:Z}=B;xr(se),xr(Z),ee&&mo(ee),X.stop(),Q&&(Q.flags|=8,yt(re,B,R,K)),oe&&pt(oe,R),pt(()=>{B.isUnmounted=!0},R)},we=(B,R,K,ee=!1,X=!1,Q=0)=>{for(let re=Q;re{if(B.shapeFlag&6)return Ne(B.component.subTree);if(B.shapeFlag&128)return B.suspense.next();const R=h(B.anchor||B.el),K=R&&R[I1];return K?h(K):R};let Ke=!1;const gt=(B,R,K)=>{B==null?R._vnode&&yt(R._vnode,null,null,!0):v(R._vnode||null,B,R,null,null,null,K),R._vnode=B,Ke||(Ke=!0,Uu(),Sr(),Ke=!1)},bt={p:v,um:yt,m:je,r:jn,mt:q,mc:E,pc:ne,pbc:P,n:Ne,o:e};let Nt,Qt;return t&&([Nt,Qt]=t(bt)),{render:gt,hydrate:Nt,createApp:vg(gt,Nt)}}function Da({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ps({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function f0(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ic(e,t,n=!1){const s=e.children,o=t.children;if(ce(s)&&ce(o))for(let i=0;i>1,e[n[a]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,r=n[i-1];i-- >0;)n[i]=r,r=t[r];return n}function d0(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:d0(t)}function xr(e){if(e)for(let t=0;tqe(h0);function Hn(e,t){return Ti(e,null,t)}function da(e,t){return Ti(e,null,{flush:"post"})}function m0(e,t){return Ti(e,null,{flush:"sync"})}function te(e,t,n){return Ti(e,t,n)}function Ti(e,t,n=Le){const{immediate:s,deep:o,flush:i,once:r}=n,a=Ie({},n),c=t&&s||!t&&i!=="post";let u;if(wo){if(i==="sync"){const m=p0();u=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=Ht,m.resume=Ht,m.pause=Ht,m}}const f=St;a.call=(m,g,v)=>yn(m,f,g,v);let d=!1;i==="post"?a.scheduler=m=>{pt(m,f&&f.suspense)}:i!=="sync"&&(d=!0,a.scheduler=(m,g)=>{g?m():vc(m)}),a.augmentJob=m=>{t&&(m.flags|=4),d&&(m.flags|=2,f&&(m.id=f.uid,m.i=f))};const h=Tm(e,t,a);return wo&&(u?u.push(h):c&&h()),h}function Tg(e,t,n){const s=this.proxy,o=_e(e)?e.includes(".")?g0(s,e):()=>s[e]:e.bind(s,s);let i;ye(t)?i=t:(i=t.handler,n=t);const r=qs(this),a=Ti(o,i.bind(s),n);return r(),a}function g0(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{let f,d=Le,h;return m0(()=>{const m=e[o];Ot(f,m)&&(f=m,u())}),{get(){return c(),n.get?n.get(f):f},set(m){const g=n.set?n.set(m):m;if(!Ot(g,f)&&!(d!==Le&&Ot(m,d)))return;const v=s.vnode.props;v&&(t in v||o in v||i in v)&&(`onUpdate:${t}`in v||`onUpdate:${o}`in v||`onUpdate:${i}`in v)||(f=m,u()),s.emit(`update:${t}`,g),Ot(m,g)&&Ot(m,d)&&!Ot(g,h)&&u(),d=m,h=g}}});return a[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?r||Le:a,done:!1}:{done:!0}}}},a}const v0=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${tt(t)}Modifiers`]||e[`${Kt(t)}Modifiers`];function Eg(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Le;let o=n;const i=t.startsWith("update:"),r=i&&v0(s,t.slice(7));r&&(r.trim&&(o=n.map(f=>_e(f)?f.trim():f)),r.number&&(o=n.map(Zr)));let a,c=s[a=po(t)]||s[a=po(tt(t))];!c&&i&&(c=s[a=po(Kt(t))]),c&&yn(c,e,6,o);const u=s[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,yn(u,e,6,o)}}const xg=new WeakMap;function y0(e,t,n=!1){const s=n?xg:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let r={},a=!1;if(!ye(e)){const c=u=>{const f=y0(u,t,!0);f&&(a=!0,Ie(r,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!a?(Ue(e)&&s.set(e,null),null):(ce(i)?i.forEach(c=>r[c]=null):Ie(r,i),Ue(e)&&s.set(e,r),r)}function ha(e,t){return!e||!Ys(t)?!1:(t=t.slice(2).replace(/Once$/,""),Oe(e,t[0].toLowerCase()+t.slice(1))||Oe(e,Kt(t))||Oe(e,t))}function rr(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[i],slots:r,attrs:a,emit:c,render:u,renderCache:f,props:d,data:h,setupState:m,ctx:g,inheritAttrs:v}=e,b=li(e);let k,C;try{if(n.shapeFlag&4){const _=o||s,x=_;k=qt(u.call(x,_,f,d,m,h,g)),C=a}else{const _=t;k=qt(_.length>1?_(d,{attrs:a,slots:r,emit:c}):_(d,null)),C=t.props?a:$g(a)}}catch(_){Xo.length=0,Xs(_,e,1),k=H(ut)}let y=k;if(C&&v!==!1){const _=Object.keys(C),{shapeFlag:x}=y;_.length&&x&7&&(i&&_.some(ic)&&(C=Lg(C,i)),y=Rn(y,C,!1,!0))}return n.dirs&&(y=Rn(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&os(y,n.transition),k=y,li(b),k}function Ag(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||Ys(n))&&((t||(t={}))[n]=e[n]);return t},Lg=(e,t)=>{const n={};for(const s in e)(!ic(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Ig(e,t,n){const{props:s,children:o,component:i}=e,{props:r,children:a,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?sf(s,r,u):!!r;if(c&8){const f=t.dynamicProps;for(let d=0;de.__isSuspense;let pl=0;const Pg={name:"Suspense",__isSuspense:!0,process(e,t,n,s,o,i,r,a,c,u){if(e==null)Fg(t,n,s,o,i,r,a,c,u);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}Bg(e,t,n,s,o,r,a,c,u)}},hydrate:Ng,normalize:Vg},Mg=Pg;function ui(e,t){const n=e.props&&e.props[t];ye(n)&&n()}function Fg(e,t,n,s,o,i,r,a,c){const{p:u,o:{createElement:f}}=c,d=f("div"),h=e.suspense=b0(e,o,s,t,d,n,i,r,a,c);u(null,h.pendingBranch=e.ssContent,d,null,s,h,i,r),h.deps>0?(ui(e,"onPending"),ui(e,"onFallback"),u(null,e.ssFallback,t,n,s,null,i,r),bo(h,e.ssFallback)):h.resolve(!1,!0)}function Bg(e,t,n,s,o,i,r,a,{p:c,um:u,o:{createElement:f}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const h=t.ssContent,m=t.ssFallback,{activeBranch:g,pendingBranch:v,isInFallback:b,isHydrating:k}=d;if(v)d.pendingBranch=h,Tn(v,h)?(c(v,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0?d.resolve():b&&(k||(c(g,m,n,s,o,null,i,r,a),bo(d,m)))):(d.pendingId=pl++,k?(d.isHydrating=!1,d.activeBranch=v):u(v,o,d),d.deps=0,d.effects.length=0,d.hiddenContainer=f("div"),b?(c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0?d.resolve():(c(g,m,n,s,o,null,i,r,a),bo(d,m))):g&&Tn(g,h)?(c(g,h,n,s,o,d,i,r,a),d.resolve(!0)):(c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0&&d.resolve()));else if(g&&Tn(g,h))c(g,h,n,s,o,d,i,r,a),bo(d,h);else if(ui(t,"onPending"),d.pendingBranch=h,h.shapeFlag&512?d.pendingId=h.component.suspenseId:d.pendingId=pl++,c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0)d.resolve();else{const{timeout:C,pendingId:y}=d;C>0?setTimeout(()=>{d.pendingId===y&&d.fallback(m)},C):C===0&&d.fallback(m)}}function b0(e,t,n,s,o,i,r,a,c,u,f=!1){const{p:d,m:h,um:m,n:g,o:{parentNode:v,remove:b}}=u;let k;const C=Og(e);C&&t&&t.pendingBranch&&(k=t.pendingId,t.deps++);const y=e.props?br(e.props.timeout):void 0,_=i,x={vnode:e,parent:t,parentComponent:n,namespace:r,container:s,hiddenContainer:o,deps:0,pendingId:pl++,timeout:typeof y=="number"?y:-1,activeBranch:null,pendingBranch:null,isInFallback:!f,isHydrating:f,isUnmounted:!1,effects:[],resolve($=!1,V=!1){const{vnode:E,activeBranch:I,pendingBranch:P,pendingId:N,effects:L,parentComponent:U,container:q,isInFallback:J}=x;let G=!1;x.isHydrating?x.isHydrating=!1:$||(G=I&&P.transition&&P.transition.mode==="out-in",G&&(I.transition.afterLeave=()=>{N===x.pendingId&&(h(P,q,i===_?g(I):i,0),ri(L),J&&E.ssFallback&&(E.ssFallback.el=null))}),I&&(v(I.el)===q&&(i=g(I)),m(I,U,x,!0),!G&&J&&E.ssFallback&&(E.ssFallback.el=null)),G||h(P,q,i,0)),bo(x,P),x.pendingBranch=null,x.isInFallback=!1;let ae=x.parent,ne=!1;for(;ae;){if(ae.pendingBranch){ae.effects.push(...L),ne=!0;break}ae=ae.parent}!ne&&!G&&ri(L),x.effects=[],C&&t&&t.pendingBranch&&k===t.pendingId&&(t.deps--,t.deps===0&&!V&&t.resolve()),ui(E,"onResolve")},fallback($){if(!x.pendingBranch)return;const{vnode:V,activeBranch:E,parentComponent:I,container:P,namespace:N}=x;ui(V,"onFallback");const L=g(E),U=()=>{x.isInFallback&&(d(null,$,P,L,I,null,N,a,c),bo(x,$))},q=$.transition&&$.transition.mode==="out-in";q&&(E.transition.afterLeave=U),x.isInFallback=!0,m(E,I,null,!0),q||U()},move($,V,E){x.activeBranch&&h(x.activeBranch,$,V,E),x.container=$},next(){return x.activeBranch&&g(x.activeBranch)},registerDep($,V,E){const I=!!x.pendingBranch;I&&x.deps++;const P=$.vnode.el;$.asyncDep.catch(N=>{Xs(N,$,0)}).then(N=>{if($.isUnmounted||x.isUnmounted||x.pendingId!==$.suspenseId)return;$.asyncResolved=!0;const{vnode:L}=$;vl($,N,!1),P&&(L.el=P);const U=!P&&$.subTree.el;V($,L,v(P||$.subTree.el),P?null:g($.subTree),x,r,E),U&&(L.placeholder=null,b(U)),pa($,L.el),I&&--x.deps===0&&x.resolve()})},unmount($,V){x.isUnmounted=!0,x.activeBranch&&m(x.activeBranch,n,$,V),x.pendingBranch&&m(x.pendingBranch,n,$,V)}};return x}function Ng(e,t,n,s,o,i,r,a,c){const u=t.suspense=b0(t,s,n,e.parentNode,document.createElement("div"),null,o,i,r,a,!0),f=c(e,u.pendingBranch=t.ssContent,n,u,i,r);return u.deps===0&&u.resolve(!1,!0),f}function Vg(e){const{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=of(s?n.default:n),e.ssFallback=s?of(n.fallback):H(ut)}function of(e){let t;if(ye(e)){const n=Ws&&e._c;n&&(e._d=!1,p()),e=e(),n&&(e._d=!0,t=Mt,w0())}return ce(e)&&(e=Ag(e)),e=qt(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function k0(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):ri(e)}function bo(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e;let o=t.el;for(;!o&&t.component;)t=t.component.subTree,o=t.el;n.el=o,s&&s.subTree===n&&(s.vnode.el=o,pa(s,o))}function Og(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Y=Symbol.for("v-fgt"),Ss=Symbol.for("v-txt"),ut=Symbol.for("v-cmt"),Rs=Symbol.for("v-stc"),Xo=[];let Mt=null;function p(e=!1){Xo.push(Mt=e?null:[])}function w0(){Xo.pop(),Mt=Xo[Xo.length-1]||null}let Ws=1;function fi(e,t=!1){Ws+=e,e<0&&Mt&&t&&(Mt.hasOnce=!0)}function C0(e){return e.dynamicChildren=Ws>0?Mt||fo:null,w0(),Ws>0&&Mt&&Mt.push(e),e}function w(e,t,n,s,o,i){return C0(S(e,t,n,s,o,i,!0))}function D(e,t,n,s,o){return C0(H(e,t,n,s,o,!0))}function Ln(e){return e?e.__v_isVNode===!0:!1}function Tn(e,t){return e.type===t.type&&e.key===t.key}function Dg(e){}const _0=({key:e})=>e??null,ar=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?_e(e)||Ye(e)||ye(e)?{i:Tt,r:e,k:t,f:!!n}:e:null);function S(e,t=null,n=null,s=0,o=null,i=e===Y?0:1,r=!1,a=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&_0(t),ref:t&&ar(t),scopeId:aa,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Tt};return a?(Pc(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=_e(n)?8:16),Ws>0&&!r&&Mt&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Mt.push(c),c}const H=Rg;function Rg(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===Y1)&&(e=ut),Ln(e)){const a=Rn(e,t,!0);return n&&Pc(a,n),Ws>0&&!i&&Mt&&(a.shapeFlag&6?Mt[Mt.indexOf(e)]=a:Mt.push(a)),a.patchFlag=-2,a}if(Kg(e)&&(e=e.__vccOpts),t){t=Ze(t);let{class:a,style:c}=t;a&&!_e(a)&&(t.class=T(a)),Ue(c)&&(ra(c)&&!ce(c)&&(c=Ie({},c)),t.style=Fe(c))}const r=_e(e)?1:Ar(e)?128:P1(e)?64:Ue(e)?4:ye(e)?2:0;return S(e,t,n,s,o,r,i,!0)}function Ze(e){return e?ra(e)||n0(e)?Ie({},e):e:null}function Rn(e,t,n=!1,s=!1){const{props:o,ref:i,patchFlag:r,children:a,transition:c}=e,u=t?nt(o||{},t):o,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&_0(u),ref:t&&t.ref?n&&i?ce(i)?i.concat(ar(t)):[i,ar(t)]:ar(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Y?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Rn(e.ssContent),ssFallback:e.ssFallback&&Rn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&os(f,c.clone(f)),f}function rt(e=" ",t=0){return H(Ss,null,e,t)}function S0(e,t){const n=H(Rs,null,e);return n.staticCount=t,n}function A(e="",t=!1){return t?(p(),D(ut,null,e)):H(ut,null,e)}function qt(e){return e==null||typeof e=="boolean"?H(ut):ce(e)?H(Y,null,e.slice()):Ln(e)?vs(e):H(Ss,null,String(e))}function vs(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Rn(e)}function Pc(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),Pc(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!n0(t)?t._ctx=Tt:o===3&&Tt&&(Tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ye(t)?(t={default:t,_ctx:Tt},n=32):(t=String(t),s&64?(n=16,t=[rt(t)]):n=8);e.children=t,e.shapeFlag|=n}function nt(...e){const t={};for(let n=0;nSt||Tt;let $r,ml;{const e=ea(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),i=>{o.length>1?o.forEach(r=>r(i)):o[0](i)}};$r=t("__VUE_INSTANCE_SETTERS__",n=>St=n),ml=t("__VUE_SSR_SETTERS__",n=>wo=n)}const qs=e=>{const t=St;return $r(e),e.scope.on(),()=>{e.scope.off(),$r(t)}},gl=()=>{St&&St.scope.off(),$r(null)};function E0(e){return e.vnode.shapeFlag&4}let wo=!1;function x0(e,t=!1,n=!1){t&&ml(t);const{props:s,children:o}=e.vnode,i=E0(e);yg(e,s,i,t),Cg(e,o,n||t);const r=i?jg(e,t):void 0;return t&&ml(!1),r}function jg(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ul);const{setup:s}=n;if(s){ts();const o=e.setupContext=s.length>1?$0(e):null,i=qs(e),r=Po(s,e,0,[e.props,o]),a=ac(r);if(ns(),i(),(a||e.sp)&&!_s(e)&&kc(e),a){if(r.then(gl,gl),t)return r.then(c=>{vl(e,c,t)}).catch(c=>{Xs(c,e,0)});e.asyncDep=r}else vl(e,r,t)}else A0(e,t)}function vl(e,t,n){ye(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ue(t)&&(e.setupState=mc(t)),A0(e,n)}let Lr,yl;function Ug(e){Lr=e,yl=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,tg))}}const Wg=()=>!Lr;function A0(e,t,n){const s=e.type;if(!e.render){if(!t&&Lr&&!s.render){const o=s.template||xc(e).template;if(o){const{isCustomElement:i,compilerOptions:r}=e.appContext.config,{delimiters:a,compilerOptions:c}=s,u=Ie(Ie({isCustomElement:i,delimiters:a},r),c);s.render=Lr(o,u)}}e.render=s.render||Ht,yl&&yl(e)}{const o=qs(e);ts();try{fg(e)}finally{ns(),o()}}}const qg={get(e,t){return Pt(e,"get",""),e[t]}};function $0(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,qg),slots:e.slots,emit:e.emit,expose:t}}function Ei(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(mc(go(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jo)return Jo[n](e)},has(t,n){return n in t||n in Jo}})):e.proxy}function bl(e,t=!0){return ye(e)?e.displayName||e.name:e.name||t&&e.__name}function Kg(e){return ye(e)&&"__vccOpts"in e}const M=(e,t)=>wm(e,t,wo);function nn(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Ue(t)&&!ce(t)?Ln(t)?H(e,null,[t]):H(e,t):H(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Ln(n)&&(n=[n]),H(e,t,n))}finally{fi(1)}}function Yg(){}function Gg(e,t,n,s){const o=n[s];if(o&&L0(o,e))return o;const i=t();return i.memo=e.slice(),i.cacheIndex=s,n[s]=i}function L0(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&Mt&&Mt.push(e),!0}const I0="3.5.24",Jg=Ht,Xg=Lm,Qg=io,Zg=L1,ev={createComponentInstance:T0,setupComponent:x0,renderComponentRoot:rr,setCurrentRenderingInstance:li,isVNode:Ln,normalizeVNode:qt,getComponentPublicInstance:Ei,ensureValidVNode:Tc,pushWarningContext:Em,popWarningContext:xm},tv=ev,nv=null,sv=null,ov=null;let kl;const rf=typeof window<"u"&&window.trustedTypes;if(rf)try{kl=rf.createPolicy("vue",{createHTML:e=>e})}catch{}const P0=kl?e=>kl.createHTML(e):e=>e,iv="http://www.w3.org/2000/svg",rv="http://www.w3.org/1998/Math/MathML",Kn=typeof document<"u"?document:null,af=Kn&&Kn.createElement("template"),av={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?Kn.createElementNS(iv,e):t==="mathml"?Kn.createElementNS(rv,e):n?Kn.createElement(e,{is:n}):Kn.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Kn.createTextNode(e),createComment:e=>Kn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Kn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const r=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{af.innerHTML=P0(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const a=af.content;if(s==="svg"||s==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}t.insertBefore(a,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},us="transition",Ho="animation",Co=Symbol("_vtc"),M0={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},F0=Ie({},bc,M0),lv=e=>(e.displayName="Transition",e.props=F0,e),vt=lv((e,{slots:t})=>nn(V1,B0(e),t)),Ms=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},lf=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function B0(e){const t={};for(const L in e)L in M0||(t[L]=e[L]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=r,appearToClass:f=a,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,g=cv(o),v=g&&g[0],b=g&&g[1],{onBeforeEnter:k,onEnter:C,onEnterCancelled:y,onLeave:_,onLeaveCancelled:x,onBeforeAppear:$=k,onAppear:V=C,onAppearCancelled:E=y}=t,I=(L,U,q,J)=>{L._enterCancelled=J,hs(L,U?f:a),hs(L,U?u:r),q&&q()},P=(L,U)=>{L._isLeaving=!1,hs(L,d),hs(L,m),hs(L,h),U&&U()},N=L=>(U,q)=>{const J=L?V:C,G=()=>I(U,L,q);Ms(J,[U,G]),cf(()=>{hs(U,L?c:i),Fn(U,L?f:a),lf(J)||uf(U,s,v,G)})};return Ie(t,{onBeforeEnter(L){Ms(k,[L]),Fn(L,i),Fn(L,r)},onBeforeAppear(L){Ms($,[L]),Fn(L,c),Fn(L,u)},onEnter:N(!1),onAppear:N(!0),onLeave(L,U){L._isLeaving=!0;const q=()=>P(L,U);Fn(L,d),L._enterCancelled?(Fn(L,h),wl(L)):(wl(L),Fn(L,h)),cf(()=>{L._isLeaving&&(hs(L,d),Fn(L,m),lf(_)||uf(L,s,b,q))}),Ms(_,[L,q])},onEnterCancelled(L){I(L,!1,void 0,!0),Ms(y,[L])},onAppearCancelled(L){I(L,!0,void 0,!0),Ms(E,[L])},onLeaveCancelled(L){P(L),Ms(x,[L])}})}function cv(e){if(e==null)return null;if(Ue(e))return[Ra(e.enter),Ra(e.leave)];{const t=Ra(e);return[t,t]}}function Ra(e){return br(e)}function Fn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Co]||(e[Co]=new Set)).add(t)}function hs(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Co];n&&(n.delete(t),n.size||(e[Co]=void 0))}function cf(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let uv=0;function uf(e,t,n,s){const o=e._endId=++uv,i=()=>{o===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:r,timeout:a,propCount:c}=N0(e,t);if(!r)return s();const u=r+"end";let f=0;const d=()=>{e.removeEventListener(u,h),i()},h=m=>{m.target===e&&++f>=c&&d()};setTimeout(()=>{f(n[g]||"").split(", "),o=s(`${us}Delay`),i=s(`${us}Duration`),r=ff(o,i),a=s(`${Ho}Delay`),c=s(`${Ho}Duration`),u=ff(a,c);let f=null,d=0,h=0;t===us?r>0&&(f=us,d=r,h=i.length):t===Ho?u>0&&(f=Ho,d=u,h=c.length):(d=Math.max(r,u),f=d>0?r>u?us:Ho:null,h=f?f===us?i.length:c.length:0);const m=f===us&&/\b(?:transform|all)(?:,|$)/.test(s(`${us}Property`).toString());return{type:f,timeout:d,propCount:h,hasTransform:m}}function ff(e,t){for(;e.lengthdf(n)+df(e[s])))}function df(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function wl(e){return(e?e.ownerDocument:document).body.offsetHeight}function fv(e,t,n){const s=e[Co];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ir=Symbol("_vod"),V0=Symbol("_vsh"),at={name:"show",beforeMount(e,{value:t},{transition:n}){e[Ir]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):zo(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),zo(e,!0),s.enter(e)):s.leave(e,()=>{zo(e,!1)}):zo(e,t))},beforeUnmount(e,{value:t}){zo(e,t)}};function zo(e,t){e.style.display=t?e[Ir]:"none",e[V0]=!t}function dv(){at.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const O0=Symbol("");function hv(e){const t=dt();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Pr(i,o))},s=()=>{const o=e(t.proxy);t.ce?Pr(t.ce,o):Cl(t.subTree,o),n(o)};Cc(()=>{ri(s)}),be(()=>{te(s,Ht,{flush:"post"});const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),cn(()=>o.disconnect())})}function Cl(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Cl(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Pr(e.el,t);else if(e.type===Y)e.children.forEach(n=>Cl(n,t));else if(e.type===Rs){let{el:n,anchor:s}=e;for(;n&&(Pr(n,t),n!==s);)n=n.nextSibling}}function Pr(e,t){if(e.nodeType===1){const n=e.style;let s="";for(const o in t){const i=W2(t[o]);n.setProperty(`--${o}`,i),s+=`--${o}: ${i};`}n[O0]=s}}const pv=/(?:^|;)\s*display\s*:/;function mv(e,t,n){const s=e.style,o=_e(n);let i=!1;if(n&&!o){if(t)if(_e(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();n[a]==null&&lr(s,a,"")}else for(const r in t)n[r]==null&&lr(s,r,"");for(const r in n)r==="display"&&(i=!0),lr(s,r,n[r])}else if(o){if(t!==n){const r=s[O0];r&&(n+=";"+r),s.cssText=n,i=pv.test(n)}}else t&&e.removeAttribute("style");Ir in e&&(e[Ir]=i?s.display:"",e[V0]&&(s.display="none"))}const hf=/\s*!important$/;function lr(e,t,n){if(ce(n))n.forEach(s=>lr(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=gv(e,t);hf.test(n)?e.setProperty(Kt(s),n.replace(hf,""),"important"):e[s]=n}}const pf=["Webkit","Moz","ms"],Ha={};function gv(e,t){const n=Ha[t];if(n)return n;let s=tt(t);if(s!=="filter"&&s in e)return Ha[t]=s;s=Js(s);for(let o=0;oza||(kv.then(()=>za=0),za=Date.now());function Cv(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;yn(_v(s,n.value),t,5,[s])};return n.value=e,n.attached=wv(),n}function _v(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const kf=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Sv=(e,t,n,s,o,i)=>{const r=o==="svg";t==="class"?fv(e,s,r):t==="style"?mv(e,n,s):Ys(t)?ic(t)||yv(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Tv(e,t,s,r))?(vf(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&gf(e,t,s,r,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!_e(s))?vf(e,tt(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),gf(e,t,s,r))};function Tv(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&kf(t)&&ye(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return kf(t)&&_e(n)?!1:t in e}const wf={};function D0(e,t,n){let s=z(e,t);Xr(s)&&(s=Ie({},s,t));class o extends ma{constructor(r){super(s,r,n)}}return o.def=s,o}const Ev=((e,t)=>D0(e,t,G0)),xv=typeof HTMLElement<"u"?HTMLElement:class{};class ma extends xv{constructor(t,n={},s=Fr){super(),this._def=t,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&s!==Fr?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(Ie({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof ma){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,ze(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let s=0;s{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:r}=s;let a;if(i&&!ce(i))for(const c in i){const u=i[c];(u===Number||u&&u.type===Number)&&(c in this._props&&(this._props[c]=br(this._props[c])),(a||(a=Object.create(null)))[tt(c)]=!0)}this._numberProps=a,this._resolveProps(s),this.shadowRoot&&this._applyStyles(r),this._mount(s)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,t(this._def=s,!0)}):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const s in n)Oe(this,s)||Object.defineProperty(this,s,{get:()=>l(n[s])})}_resolveProps(t){const{props:n}=t,s=ce(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&s.includes(o)&&this._setProp(o,this[o]);for(const o of s.map(tt))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(i){this._setProp(o,i,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let s=n?this.getAttribute(t):wf;const o=tt(t);n&&this._numberProps&&this._numberProps[o]&&(s=br(s)),this._setProp(o,s,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,o=!1){if(n!==this._props[t]&&(this._dirty=!0,n===wf?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),o&&this._instance&&this._update(),s)){const i=this._ob;i&&(this._processMutations(i.takeRecords()),i.disconnect()),n===!0?this.setAttribute(Kt(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(Kt(t),n+""):n||this.removeAttribute(Kt(t)),i&&i.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),di(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=H(this._def,Ie(t,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0;const o=(i,r)=>{this.dispatchEvent(new CustomEvent(i,Xr(r[0])?Ie({detail:r},r[0]):{detail:r}))};s.emit=(i,...r)=>{o(i,r),Kt(i)!==i&&o(Kt(i),r)},this._setParent()}),n}_applyStyles(t,n){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const s=this._nonce;for(let o=t.length-1;o>=0;o--){const i=document.createElement("style");s&&i.setAttribute("nonce",s),i.textContent=t[o],this.shadowRoot.prepend(i)}}_parseSlots(){const t=this._slots={};let n;for(;n=this.firstChild;){const s=n.nodeType===1&&n.getAttribute("slot")||"default";(t[s]||(t[s]=[])).push(n),this.removeChild(n)}}_renderSlots(){const t=this._getSlots(),n=this._instance.type.__scopeId;for(let s=0;s(delete e.props.mode,e),Iv=Lv({name:"TransitionGroup",props:Ie({},F0,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=dt(),s=yc();let o,i;return Mo(()=>{if(!o.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!Bv(o[0].el,n.vnode.el,r)){o=[];return}o.forEach(Pv),o.forEach(Mv);const a=o.filter(Fv);wl(n.vnode.el),a.forEach(c=>{const u=c.el,f=u.style;Fn(u,r),f.transform=f.webkitTransform=f.transitionDuration="";const d=u[Mr]=h=>{h&&h.target!==u||(!h||h.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",d),u[Mr]=null,hs(u,r))};u.addEventListener("transitionend",d)}),o=[]}),()=>{const r=Pe(e),a=B0(r);let c=r.tag||Y;if(o=[],i)for(let u=0;u{a.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(a=>a&&s.classList.add(a)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:r}=N0(s);return i.removeChild(s),r}const xs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>mo(t,n):t};function Nv(e){e.target.composing=!0}function _f(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vn=Symbol("_assign");function Sf(e,t,n){return t&&(e=e.trim()),n&&(e=Zr(e)),e}const _o={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[vn]=xs(o);const i=s||o.props&&o.props.type==="number";Xn(e,t?"change":"input",r=>{r.target.composing||e[vn](Sf(e.value,n,i))}),(n||i)&&Xn(e,"change",()=>{e.value=Sf(e.value,n,i)}),t||(Xn(e,"compositionstart",Nv),Xn(e,"compositionend",_f),Xn(e,"change",_f))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:i}},r){if(e[vn]=xs(r),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?Zr(e.value):e.value,c=t??"";a!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===c)||(e.value=c))}},Mc={deep:!0,created(e,t,n){e[vn]=xs(n),Xn(e,"change",()=>{const s=e._modelValue,o=So(e),i=e.checked,r=e[vn];if(ce(s)){const a=ta(s,o),c=a!==-1;if(i&&!c)r(s.concat(o));else if(!i&&c){const u=[...s];u.splice(a,1),r(u)}}else if(Gs(s)){const a=new Set(s);i?a.add(o):a.delete(o),r(a)}else r(U0(e,i))})},mounted:Tf,beforeUpdate(e,t,n){e[vn]=xs(n),Tf(e,t,n)}};function Tf(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(ce(t))o=ta(t,s.props.value)>-1;else if(Gs(t))o=t.has(s.props.value);else{if(t===n)return;o=Es(t,U0(e,!0))}e.checked!==o&&(e.checked=o)}const ga={created(e,{value:t},n){e.checked=Es(t,n.props.value),e[vn]=xs(n),Xn(e,"change",()=>{e[vn](So(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vn]=xs(s),t!==n&&(e.checked=Es(t,s.props.value))}},j0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=Gs(t);Xn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?Zr(So(r)):So(r));e[vn](e.multiple?o?new Set(i):i:i[0]),e._assigning=!0,ze(()=>{e._assigning=!1})}),e[vn]=xs(s)},mounted(e,{value:t}){Ef(e,t)},beforeUpdate(e,t,n){e[vn]=xs(n)},updated(e,{value:t}){e._assigning||Ef(e,t)}};function Ef(e,t){const n=e.multiple,s=ce(t);if(!(n&&!s&&!Gs(t))){for(let o=0,i=e.options.length;oString(u)===String(a)):r.selected=ta(t,a)>-1}else r.selected=t.has(a);else if(Es(So(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function So(e){return"_value"in e?e._value:e.value}function U0(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Fc={created(e,t,n){Ui(e,t,n,null,"created")},mounted(e,t,n){Ui(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Ui(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Ui(e,t,n,s,"updated")}};function W0(e,t){switch(e){case"SELECT":return j0;case"TEXTAREA":return _o;default:switch(t){case"checkbox":return Mc;case"radio":return ga;default:return _o}}}function Ui(e,t,n,s,o){const r=W0(e.tagName,n.props&&n.props.type)[o];r&&r(e,t,n,s)}function Vv(){_o.getSSRProps=({value:e})=>({value:e}),ga.getSSRProps=({value:e},t)=>{if(t.props&&Es(t.props.value,e))return{checked:!0}},Mc.getSSRProps=({value:e},t)=>{if(ce(e)){if(t.props&&ta(e,t.props.value)>-1)return{checked:!0}}else if(Gs(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Fc.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=W0(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const Ov=["ctrl","shift","alt","meta"],Dv={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ov.some(n=>e[`${n}Key`]&&!t.includes(n))},To=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((o,...i)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(o=>{if(!("key"in o))return;const i=Kt(o.key);if(t.some(r=>r===i||Rv[r]===i))return e(o)}))},q0=Ie({patchProp:Sv},av);let Qo,xf=!1;function K0(){return Qo||(Qo=l0(q0))}function Y0(){return Qo=xf?Qo:c0(q0),xf=!0,Qo}const di=((...e)=>{K0().render(...e)}),Hv=((...e)=>{Y0().hydrate(...e)}),Fr=((...e)=>{const t=K0().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=X0(s);if(!o)return;const i=t._component;!ye(i)&&!i.render&&!i.template&&(i.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=n(o,!1,J0(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t}),G0=((...e)=>{const t=Y0().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=X0(s);if(o)return n(o,!0,J0(o))},t});function J0(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function X0(e){return _e(e)?document.querySelector(e):e}let Af=!1;const zv=()=>{Af||(Af=!0,Vv(),dv())};const jv=()=>{},Uv=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:V1,BaseTransitionPropsValidators:bc,Comment:ut,DeprecationTypes:ov,EffectScope:cc,ErrorCodes:$m,ErrorTypeStrings:Xg,Fragment:Y,KeepAlive:Xm,ReactiveEffect:si,Static:Rs,Suspense:Mg,Teleport:la,Text:Ss,TrackOpTypes:Cm,Transition:vt,TransitionGroup:Qs,TriggerOpTypes:_m,VueElement:ma,assertNumber:Am,callWithAsyncErrorHandling:yn,callWithErrorHandling:Po,camelize:tt,capitalize:Js,cloneVNode:Rn,compatUtils:sv,compile:jv,computed:M,createApp:Fr,createBlock:D,createCommentVNode:A,createElementBlock:w,createElementVNode:S,createHydrationRenderer:c0,createPropsRestProxy:X1,createRenderer:l0,createSSRApp:G0,createSlots:Wt,createStaticVNode:S0,createTextVNode:rt,createVNode:H,customRef:gc,defineAsyncComponent:wc,defineComponent:z,defineCustomElement:D0,defineEmits:sg,defineExpose:og,defineModel:ag,defineOptions:ig,defineProps:ng,defineSSRCustomElement:Ev,defineSlots:rg,devtools:Qg,effect:K2,effectScope:r1,getCurrentInstance:dt,getCurrentScope:Ci,getCurrentWatcher:Sm,getTransitionRawChildren:ca,guardReactiveProps:Ze,h:nn,handleError:Xs,hasInjectionContext:Ac,hydrate:Hv,hydrateOnIdle:Um,hydrateOnInteraction:Ym,hydrateOnMediaQuery:Km,hydrateOnVisible:qm,initCustomFormatter:Yg,initDirectivesForSSR:zv,inject:qe,isMemoSame:L0,isProxy:ra,isReactive:Cs,isReadonly:ss,isRef:Ye,isRuntimeOnly:Wg,isShallow:an,isVNode:Ln,markRaw:go,mergeDefaults:J1,mergeModels:$n,mergeProps:nt,nextTick:ze,normalizeClass:T,normalizeProps:Ge,normalizeStyle:Fe,onActivated:H1,onBeforeMount:fa,onBeforeUnmount:as,onBeforeUpdate:Cc,onDeactivated:z1,onErrorCaptured:K1,onMounted:be,onRenderTracked:q1,onRenderTriggered:W1,onScopeDispose:uc,onServerPrefetch:U1,onUnmounted:cn,onUpdated:Mo,onWatcherCleanup:T1,openBlock:p,popScopeId:Fm,provide:In,proxyRefs:mc,pushScopeId:Mm,queuePostFlushCb:ri,reactive:Dn,readonly:It,ref:j,registerRuntimeCompiler:Ug,render:di,renderList:le,renderSlot:F,resolveComponent:un,resolveDirective:eg,resolveDynamicComponent:Be,resolveFilter:nv,resolveTransitionHooks:ko,setBlockTracking:fi,setDevtoolsHook:Zg,setTransitionHooks:os,shallowReactive:pc,shallowReadonly:al,shallowRef:He,ssrContextKey:h0,ssrUtils:tv,stop:Y2,toDisplayString:W,toHandlerKey:po,toHandlers:Ec,toRaw:Pe,toRef:_1,toRefs:vm,toValue:Se,transformVNodeArgs:Dg,triggerRef:pm,unref:l,useAttrs:cg,useCssModule:$v,useCssVars:hv,useHost:R0,useId:D1,useModel:Jt,useSSRContext:p0,useShadowRoot:Av,useSlots:Si,useTemplateRef:R1,useTransitionState:yc,vModelCheckbox:Mc,vModelDynamic:Fc,vModelRadio:ga,vModelSelect:j0,vModelText:_o,vShow:at,version:I0,warn:Jg,watch:te,watchEffect:Hn,watchPostEffect:da,watchSyncEffect:m0,withAsyncContext:ug,withCtx:O,withDefaults:lg,withDirectives:et,withKeys:va,withMemo:Gg,withModifiers:To,withScopeId:Bm},Symbol.toStringTag,{value:"Module"})),Q0=z({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(p(),w("span",{class:T(["VPBadge",e.type])},[F(t.$slots,"default",{},()=>[rt(W(e.text),1)])],2))}}),Wv={key:0,class:"VPBackdrop"},qv=z({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(p(),D(vt,{name:"fade"},{default:O(()=>[e.show?(p(),w("div",Wv)):A("",!0)]),_:1}))}}),ke=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},Kv=ke(qv,[["__scopeId","data-v-2fd4a63c"]]),Yv=window.__VP_SITE_DATA__;function Z0(e,t){return Ci()?(uc(e,t),!0):!1}const ja=new WeakMap,Gv=(...e)=>{var t;const n=e[0],s=(t=dt())===null||t===void 0?void 0:t.proxy,o=s??Ci();if(o==null&&!Ac())throw new Error("injectLocal must be called in setup");return o&&ja.has(o)&&n in ja.get(o)?ja.get(o)[n]:qe(...e)},Jv=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Xv=e=>e!=null,Qv=Object.prototype.toString,Zv=e=>Qv.call(e)==="[object Object]",As=()=>{};function Bc(...e){if(e.length!==1)return _1(...e);const t=e[0];return typeof t=="function"?It(gc(()=>({get:t,set:As}))):j(t)}function Nc(e,t){function n(...s){return new Promise((o,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(o).catch(i)})}return n}const eh=e=>e();function th(e,t={}){let n,s,o=As;const i=c=>{clearTimeout(c),o(),o=As};let r;return c=>{const u=Se(e),f=Se(t.maxWait);return n&&i(n),u<=0||f!==void 0&&f<=0?(s&&(i(s),s=void 0),Promise.resolve(c())):new Promise((d,h)=>{o=t.rejectOnCancel?h:d,r=c,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=void 0,d(r())},f)),n=setTimeout(()=>{s&&i(s),s=void 0,d(c())},u)})}}function e3(...e){let t=0,n,s=!0,o=As,i,r,a,c,u;!Ye(e[0])&&typeof e[0]=="object"?{delay:r,trailing:a=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[r,a=!0,c=!0,u=!1]=e;const f=()=>{n&&(clearTimeout(n),n=void 0,o(),o=As)};return h=>{const m=Se(r),g=Date.now()-t,v=()=>i=h();return f(),m<=0?(t=Date.now(),v()):(g>m?(t=Date.now(),(c||!s)&&v()):a&&(i=new Promise((b,k)=>{o=u?k:b,n=setTimeout(()=>{t=Date.now(),s=!0,b(v()),f()},Math.max(0,m-g))})),!c&&!n&&(n=setTimeout(()=>s=!0,m)),s=!1,i)}}function t3(e=eh,t={}){const{initialState:n="active"}=t,s=Bc(n==="active");function o(){s.value=!1}function i(){s.value=!0}const r=(...a)=>{s.value&&e(...a)};return{isActive:It(s),pause:o,resume:i,eventFilter:r}}function $f(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function cr(e){return Array.isArray(e)?e:[e]}function nh(e){return dt()}function n3(e,t=200,n={}){return Nc(th(t,n),e)}function s3(e,t=200,n=!1,s=!0,o=!1){return Nc(e3(t,n,s,o),e)}function sh(e,t,n={}){const{eventFilter:s=eh,...o}=n;return te(e,Nc(s,t),o)}function o3(e,t,n={}){const{eventFilter:s,initialState:o="active",...i}=n,{eventFilter:r,pause:a,resume:c,isActive:u}=t3(s,{initialState:o});return{stop:sh(e,t,{...i,eventFilter:r}),pause:a,resume:c,isActive:u}}function ya(e,t=!0,n){nh()?be(e,n):t?e():ze(e)}function i3(e,t){nh()&&cn(e,t)}function r3(e,t,n={}){const{debounce:s=0,maxWait:o=void 0,...i}=n;return sh(e,t,{...i,eventFilter:th(s,{maxWait:o})})}const VA=r3;function a3(e,t,n){return te(e,t,{...n,immediate:!0})}function OA(e,t,n){var s;let o;Ye(n)?o={evaluating:n}:o=n||{};const{lazy:i=!1,flush:r="sync",evaluating:a=void 0,shallow:c=!0,onError:u=(s=globalThis.reportError)!==null&&s!==void 0?s:As}=o,f=He(!i),d=c?He(t):j(t);let h=0;return Hn(async m=>{if(!f.value)return;h++;const g=h;let v=!1;a&&Promise.resolve().then(()=>{a.value=!0});try{const b=await e(k=>{m(()=>{a&&(a.value=!1),v||k()})});g===h&&(d.value=b)}catch(b){u(b)}finally{a&&g===h&&(a.value=!1),v=!0}},{flush:r}),i?M(()=>(f.value=!0,d.value)):d}const Rt=Jv?window:void 0;function ba(e){var t;const n=Se(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function is(...e){const t=(s,o,i,r)=>(s.addEventListener(o,i,r),()=>s.removeEventListener(o,i,r)),n=M(()=>{const s=cr(Se(e[0])).filter(o=>o!=null);return s.every(o=>typeof o!="string")?s:void 0});return a3(()=>{var s,o;return[(s=(o=n.value)===null||o===void 0?void 0:o.map(i=>ba(i)))!==null&&s!==void 0?s:[Rt].filter(i=>i!=null),cr(Se(n.value?e[1]:e[0])),cr(l(n.value?e[2]:e[1])),Se(n.value?e[3]:e[2])]},([s,o,i,r],a,c)=>{if(!s?.length||!o?.length||!i?.length)return;const u=Zv(r)?{...r}:r,f=s.flatMap(d=>o.flatMap(h=>i.map(m=>t(d,h,m,u))));c(()=>{f.forEach(d=>d())})},{flush:"post"})}function l3(){const e=He(!1),t=dt();return t&&be(()=>{e.value=!0},t),e}function Vc(e){const t=l3();return M(()=>(t.value,!!e()))}function c3(e,t,n={}){const{window:s=Rt,...o}=n;let i;const r=Vc(()=>s&&"MutationObserver"in s),a=()=>{i&&(i.disconnect(),i=void 0)},c=te(M(()=>{const d=cr(Se(e)).map(ba).filter(Xv);return new Set(d)}),d=>{a(),r.value&&d.size&&(i=new MutationObserver(t),d.forEach(h=>i.observe(h,o)))},{immediate:!0,flush:"post"}),u=()=>i?.takeRecords(),f=()=>{c(),a()};return Z0(f),{isSupported:r,stop:f,takeRecords:u}}function u3(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function _l(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:o=Rt,eventName:i="keydown",passive:r=!1,dedupe:a=!1}=s,c=u3(t);return is(o,i,f=>{f.repeat&&Se(a)||c(f)&&n(f)},r)}const f3=Symbol("vueuse-ssr-width");function d3(){const e=Ac()?Gv(f3,null):null;return typeof e=="number"?e:void 0}function Br(e,t={}){const{window:n=Rt,ssrWidth:s=d3()}=t,o=Vc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=He(typeof s=="number"),r=He(),a=He(!1),c=u=>{a.value=u.matches};return Hn(()=>{if(i.value){i.value=!o.value,a.value=Se(e).split(",").some(u=>{const f=u.includes("not all"),d=u.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),h=u.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let m=!!(d||h);return d&&m&&(m=s>=$f(d[1])),h&&m&&(m=s<=$f(h[1])),f?!m:m});return}o.value&&(r.value=n.matchMedia(Se(e)),a.value=r.value.matches)}),is(r,"change",c,{passive:!0}),M(()=>a.value)}const Wi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},qi="__vueuse_ssr_handlers__",h3=p3();function p3(){return qi in Wi||(Wi[qi]=Wi[qi]||{}),Wi[qi]}function oh(e,t){return h3[e]||t}function ih(e){return Br("(prefers-color-scheme: dark)",e)}function m3(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const g3={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Lf="vueuse-storage";function Oc(e,t,n,s={}){var o;const{flush:i="pre",deep:r=!0,listenToStorageChanges:a=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:d=Rt,eventFilter:h,onError:m=q=>{console.error(q)},initOnMounted:g}=s,v=(f?He:j)(typeof t=="function"?t():t),b=M(()=>Se(e));if(!n)try{n=oh("getDefaultStorage",()=>Rt?.localStorage)()}catch(q){m(q)}if(!n)return v;const k=Se(t),C=m3(k),y=(o=s.serializer)!==null&&o!==void 0?o:g3[C],{pause:_,resume:x}=o3(v,q=>P(q),{flush:i,deep:r,eventFilter:h});te(b,()=>L(),{flush:i});let $=!1;const V=q=>{g&&!$||L(q)},E=q=>{g&&!$||U(q)};d&&a&&(n instanceof Storage?is(d,"storage",V,{passive:!0}):is(d,Lf,E)),g?ya(()=>{$=!0,L()}):L();function I(q,J){if(d){const G={key:b.value,oldValue:q,newValue:J,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",G):new CustomEvent(Lf,{detail:G}))}}function P(q){try{const J=n.getItem(b.value);if(q==null)I(J,null),n.removeItem(b.value);else{const G=y.write(q);J!==G&&(n.setItem(b.value,G),I(J,G))}}catch(J){m(J)}}function N(q){const J=q?q.newValue:n.getItem(b.value);if(J==null)return c&&k!=null&&n.setItem(b.value,y.write(k)),k;if(!q&&u){const G=y.read(J);return typeof u=="function"?u(G,k):C==="object"&&!Array.isArray(G)?{...k,...G}:G}else return typeof J!="string"?J:y.read(J)}function L(q){if(!(q&&q.storageArea!==n)){if(q&&q.key==null){v.value=k;return}if(!(q&&q.key!==b.value)){_();try{const J=y.write(v.value);(q===void 0||q?.newValue!==J)&&(v.value=N(q))}catch(J){m(J)}finally{q?ze(x):x()}}}}function U(q){L(q.detail)}return v}const v3="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function y3(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:o=Rt,storage:i,storageKey:r="vueuse-color-scheme",listenToStorageChanges:a=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},h=ih({window:o}),m=M(()=>h.value?"dark":"light"),g=c||(r==null?Bc(s):Oc(r,s,i,{window:o,listenToStorageChanges:a})),v=M(()=>g.value==="auto"?m.value:g.value),b=oh("updateHTMLAttrs",(_,x,$)=>{const V=typeof _=="string"?o?.document.querySelector(_):ba(_);if(!V)return;const E=new Set,I=new Set;let P=null;if(x==="class"){const L=$.split(/\s/g);Object.values(d).flatMap(U=>(U||"").split(/\s/g)).filter(Boolean).forEach(U=>{L.includes(U)?E.add(U):I.add(U)})}else P={key:x,value:$};if(E.size===0&&I.size===0&&P===null)return;let N;f&&(N=o.document.createElement("style"),N.appendChild(document.createTextNode(v3)),o.document.head.appendChild(N));for(const L of E)V.classList.add(L);for(const L of I)V.classList.remove(L);P&&V.setAttribute(P.key,P.value),f&&(o.getComputedStyle(N).opacity,document.head.removeChild(N))});function k(_){var x;b(t,n,(x=d[_])!==null&&x!==void 0?x:_)}function C(_){e.onChanged?e.onChanged(_,k):k(_)}te(v,C,{flush:"post",immediate:!0}),ya(()=>C(v.value));const y=M({get(){return u?g.value:v.value},set(_){g.value=_}});return Object.assign(y,{store:g,system:m,state:v})}function b3(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=y3({...e,onChanged:(i,r)=>{var a;e.onChanged?(a=e.onChanged)===null||a===void 0||a.call(e,i==="dark",r,i):r(i)},modes:{dark:t,light:n}}),o=M(()=>s.system.value);return M({get(){return s.value==="dark"},set(i){const r=i?"dark":"light";o.value===r?s.value="auto":s.value=r}})}function Ua(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const If=1;function k3(e,t={}){const{throttle:n=0,idle:s=200,onStop:o=As,onScroll:i=As,offset:r={left:0,right:0,top:0,bottom:0},observe:a={mutation:!1},eventListenerOptions:c={capture:!1,passive:!0},behavior:u="auto",window:f=Rt,onError:d=I=>{console.error(I)}}=t,h=typeof a=="boolean"?{mutation:a}:a,m=He(0),g=He(0),v=M({get(){return m.value},set(I){k(I,void 0)}}),b=M({get(){return g.value},set(I){k(void 0,I)}});function k(I,P){var N,L,U,q;if(!f)return;const J=Se(e);if(!J)return;(N=J instanceof Document?f.document.body:J)===null||N===void 0||N.scrollTo({top:(L=Se(P))!==null&&L!==void 0?L:b.value,left:(U=Se(I))!==null&&U!==void 0?U:v.value,behavior:Se(u)});const G=(J==null||(q=J.document)===null||q===void 0?void 0:q.documentElement)||J?.documentElement||J;v!=null&&(m.value=G.scrollLeft),b!=null&&(g.value=G.scrollTop)}const C=He(!1),y=Dn({left:!0,right:!1,top:!0,bottom:!1}),_=Dn({left:!1,right:!1,top:!1,bottom:!1}),x=I=>{C.value&&(C.value=!1,_.left=!1,_.right=!1,_.top=!1,_.bottom=!1,o(I))},$=n3(x,n+s),V=I=>{var P;if(!f)return;const N=(I==null||(P=I.document)===null||P===void 0?void 0:P.documentElement)||I?.documentElement||ba(I),{display:L,flexDirection:U,direction:q}=f.getComputedStyle(N),J=q==="rtl"?-1:1,G=N.scrollLeft;_.left=Gm.value;const ae=Math.abs(G*J)<=(r.left||0),ne=Math.abs(G*J)+N.clientWidth>=N.scrollWidth-(r.right||0)-If;L==="flex"&&U==="row-reverse"?(y.left=ne,y.right=ae):(y.left=ae,y.right=ne),m.value=G;let he=N.scrollTop;I===f.document&&!he&&(he=f.document.body.scrollTop),_.top=heg.value;const st=Math.abs(he)<=(r.top||0),je=Math.abs(he)+N.clientHeight>=N.scrollHeight-(r.bottom||0)-If;L==="flex"&&U==="column-reverse"?(y.top=je,y.bottom=st):(y.top=st,y.bottom=je),g.value=he},E=I=>{var P;f&&(V((P=I.target.documentElement)!==null&&P!==void 0?P:I.target),C.value=!0,$(I),i(I))};return is(e,"scroll",n?s3(E,n,!0,!1):E,c),ya(()=>{try{const I=Se(e);if(!I)return;V(I)}catch(I){d(I)}}),h?.mutation&&e!=null&&e!==f&&e!==document&&c3(e,()=>{const I=Se(e);I&&V(I)},{attributes:!0,childList:!0,subtree:!0}),is(e,"scrollend",x,c),{x:v,y:b,isScrolling:C,arrivedState:y,directions:_,measure(){const I=Se(e);f&&I&&V(I)}}}function DA(e,t,n={}){const{window:s=Rt}=n;return Oc(e,t,s?.localStorage,n)}function w3(e={}){const{window:t=Rt}=e,n=t?.navigator,s=Vc(()=>n&&"language"in n),o=He(n?.language);return is(t,"languagechange",()=>{n&&(o.value=n.language)},{passive:!0}),{isSupported:s,language:o}}const Wa=new WeakMap;function rh(e,t=!1){const n=He(t);let s="";te(Bc(e),r=>{const a=Ua(Se(r));if(a){const c=a;if(Wa.get(c)||Wa.set(c,c.style.overflow),c.style.overflow!=="hidden"&&(s=c.style.overflow),c.style.overflow==="hidden")return n.value=!0;if(n.value)return c.style.overflow="hidden"}},{immediate:!0});const o=()=>{const r=Ua(Se(e));!r||n.value||(r.style.overflow="hidden",n.value=!0)},i=()=>{const r=Ua(Se(e));!r||!n.value||(r.style.overflow=s,Wa.delete(r),n.value=!1)};return Z0(i),M({get(){return n.value},set(r){r?o():i()}})}function RA(e,t,n={}){const{window:s=Rt}=n;return Oc(e,t,s?.sessionStorage,n)}function ah(e={}){const{window:t=Rt,...n}=e;return k3(t,n)}function C3(e={}){const{window:t=Rt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:i=!0,type:r="inner"}=e,a=He(n),c=He(s),u=()=>{if(t)if(r==="outer")a.value=t.outerWidth,c.value=t.outerHeight;else if(r==="visual"&&t.visualViewport){const{width:d,height:h,scale:m}=t.visualViewport;a.value=Math.round(d*m),c.value=Math.round(h*m)}else i?(a.value=t.innerWidth,c.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),ya(u);const f={passive:!0};return is("resize",u,f),t&&r==="visual"&&t.visualViewport&&is(t.visualViewport,"resize",u,f),o&&te(Br("(orientation: portrait)"),()=>u()),{width:a,height:c}}const _3={};var S3={};const ka=/^(?:[a-z]+:|\/\/)/i,T3="vitepress-theme-appearance",lh=Symbol("stack-view:unpack"),E3=/#.*$/,x3=/[?#].*$/,A3=/(?:(^|\/)index)?\.(?:md|html)$/,wt=typeof document<"u",ch={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function $s(e,t,n=!1){if(t===void 0)return!1;if(e=Pf(`/${e}`),n)return new RegExp(t).test(e);if(Pf(t)!==e)return!1;const s=t.match(E3);return s?(wt?location.hash:"")===s[0]:!0}function Pf(e){return decodeURI(e).replace(x3,"").replace(A3,"$1")}function uh(e){return ka.test(e)}function $3(e,t){return Object.keys(e?.locales||{}).find(n=>n!=="root"&&!uh(n)&&$s(t,`^/${n}/`,!0))||"root"}function L3(e,t){const n=$3(e,t),{label:s,link:o,...i}=e.locales[n]??{};Object.assign(i,{localeIndex:n});const r=N3(e,t),a={head:M3(e.head??[],i.head??[],...r.map(c=>c.head??[]).reverse())};return Dc(a,...r,i,e)}function I3(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=P3(e.title,s);return n===o.slice(3)?n:`${n}${o}`}function P3(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function M3(...e){const t=[],n=new Map;for(const s of e)for(const o of s){const[i,r]=o,a=Object.entries(r)[0];if(i!=="meta"||!a){t.push(o);continue}const c=`${a[0]}=${a[1]}`,u=n.get(c);u!=null?t[u]=o:(n.set(c,t.length),t.push(o))}return t}const F3=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,B3=/^[a-z]:/i;function Mf(e){const t=B3.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(F3,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const qa=new Set;function fh(e){if(qa.size===0){const n=typeof process=="object"&&S3?.VITE_EXTRA_EXTENSIONS||_3?.VITE_EXTRA_EXTENSIONS||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>qa.add(s))}const t=e.split(".").pop();return t==null||!qa.has(t.toLowerCase())}function HA(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function N3({additionalConfig:e},t){if(e===void 0)return[];if(typeof e=="function")return e(t)??[];const n=[],s=t.split("/").slice(0,-1);for(;s.length;){const o=`/${s.join("/")}/`;n.push(e[o]),s.pop()}return n.push(e["/"]),n.filter(o=>o!==void 0)}function Dc(...e){const t=e.filter(o=>V3(o));if(t.length<=1)return e[0];const n=new Set(t.flatMap(o=>Reflect.ownKeys(o))),s=[...n];return new Proxy({},{get(o,i){return i===lh?t:Dc(...t.map(r=>r[i]).filter(r=>r!==void 0))},set(){throw new Error("StackView is read-only and cannot be mutated.")},has(o,i){return n.has(i)},ownKeys(){return s},getOwnPropertyDescriptor(o,i){for(const r of t){const a=Object.getOwnPropertyDescriptor(r,i);if(a)return a}}})}Dc.unpack=function(e){return e?.[lh]};function V3(e){return Object.prototype.toString.call(e)==="[object Object]"}const O3=["shellscript","shell","bash","sh","zsh"];function zA(e){return O3.includes(e)}const D3=Symbol(),bs=He(It(Yv));function jA(e){const t=M(()=>L3(bs.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?j(!0):n==="force-auto"?ih():n?b3({storageKey:T3,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):j(!1),o=j(wt?location.hash:"");return wt&&window.addEventListener("hashchange",()=>{o.value=location.hash}),te(()=>e.data,()=>{o.value=wt?location.hash:""}),{site:t,theme:M(()=>t.value.themeConfig),page:M(()=>e.data),frontmatter:M(()=>e.data.frontmatter),params:M(()=>e.data.params),lang:M(()=>t.value.lang),dir:M(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:M(()=>t.value.localeIndex||"root"),title:M(()=>I3(t.value,e.data)),description:M(()=>e.data.description||t.value.description),isDark:s,hash:M(()=>o.value)}}function Ae(){const e=qe(D3);if(!e)throw new Error("vitepress data not properly injected in app");return e}function R3(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ee(e){return ka.test(e)||!e.startsWith("/")?e:R3(bs.value.base,e)}function UA(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),wt){t=Mf(t.slice(1).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`/assets/${t}.${s}.js`}else t=`./${Mf(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ur=[];function xi(e){ur.push(e),i3(()=>{ur=ur.filter(t=>t!==e)})}function Rc(){let e=bs.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ff(e,n);else if(Array.isArray(e))for(const s of e){const o=Ff(s,n);if(o){t=o;break}}return t}function Ff(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const H3=Symbol(),dh="http://a.com",z3=()=>({path:"/",hash:"",query:"",component:null,data:ch});function WA(e,t){const n=Dn(z3()),s={route:n,async go(a,c){a=Tl(a),await s.onBeforeRouteChange?.(a)!==!1&&((!wt||await j3(a,c))&&await i(a),r(),await s.onAfterRouteChange?.(a))}};let o=null;async function i(a,c=0,u=!1){if(await s.onBeforePageLoad?.(a)===!1)return;const f=new URL(a,dh),d=o=f.pathname;try{let h=await e(d);if(!h)throw new Error(`Page not found: ${d}`);if(o===d){o=null;const{default:m,__pageData:g}=h;if(!m)throw new Error(`Invalid route component: ${m}`);await s.onAfterPageLoad?.(a),n.path=wt?d:Ee(d),n.component=go(m),n.data=go(g),r(f),wt&&ze(()=>{let v=bs.value.base+g.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");return!bs.value.cleanUrls&&!v.endsWith("/")&&(v+=".html"),v!==f.pathname&&(f.pathname=v,a=v+f.search+f.hash,history.replaceState({},"",a)),Sl(f.hash,!1,c)})}}catch(h){if(!/fetch|Page not found/.test(h.message)&&!/^\/404(\.html|\/)?$/.test(a)&&console.error(h),!u)try{const m=await fetch(bs.value.base+"hashmap.json");window.__VP_HASH_MAP__=await m.json(),await i(a,c,!0);return}catch{}if(o===d){o=null,n.path=wt?d:Ee(d),n.component=t?go(t):null;const m=wt?n.path.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").slice(bs.value.base.length):"404.md";n.data={...ch,relativePath:m},r(f)}}}function r(a=wt?location:{search:"",hash:""}){n.query=a.search,n.hash=decodeURIComponent(a.hash)}return wt&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",a=>{if(a.defaultPrevented||!(a.target instanceof Element)||a.target.closest("button")||a.button!==0||a.ctrlKey||a.shiftKey||a.altKey||a.metaKey)return;const c=a.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:d,pathname:h}=new URL(u,c.baseURI),m=new URL(location.href);d===m.origin&&fh(h)&&(a.preventDefault(),s.go(f,{smoothScroll:c.classList.contains("header-anchor")}))},{capture:!0}),window.addEventListener("popstate",async a=>{if(a.state===null)return;const c=Tl(location.href);await i(c,a.state&&a.state.scrollPosition||0),r(),await s.onAfterRouteChange?.(c)}),window.addEventListener("hashchange",a=>{a.preventDefault(),r()})),s}function Ls(){const e=qe(H3);if(!e)throw new Error("useRouter() is called without provider.");return e}function kn(){return Ls().route}function Sl(e,t=!1,n=0){if(!e||n){window.scrollTo(0,n);return}let s=null;try{s=document.getElementById(decodeURIComponent(e).slice(1))}catch(a){console.warn(a)}if(!s)return;const o=window.scrollY+s.getBoundingClientRect().top-Rc()+Number.parseInt(window.getComputedStyle(s).paddingTop,10)||0,i=window.matchMedia("(prefers-reduced-motion)").matches?"instant":t&&Math.abs(o-window.scrollY)<=window.innerHeight?"smooth":"auto";requestAnimationFrame(()=>{if(window.scrollTo({left:0,top:o,behavior:i}),s.focus({preventScroll:!0}),document.activeElement===s||s.hasAttribute("tabindex"))return;const a=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",a)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",a),s.focus({preventScroll:!0}),document.activeElement!==s&&a()})}function Tl(e){const t=new URL(e,dh);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),bs.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}async function j3(e,{smoothScroll:t=!1,initialLoad:n=!1,replace:s=!1}={}){const o=Tl(location.href),i=new URL(e,location.origin),r=new URL(o,location.origin);if(e===o){if(!n)return Sl(i.hash,t),!1}else if(s?history.replaceState({},"",e):(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",e)),i.pathname===r.pathname)return i.hash!==r.hash&&(window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:r.href,newURL:i.href})),Sl(i.hash,t)),!1;return!0}const Ki=()=>ur.forEach(e=>e()),qA=z({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=kn(),{frontmatter:n,site:s}=Ae();return te(n,Ki,{deep:!0,flush:"post"}),()=>nn(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?nn(t.component,{onVnodeMounted:Ki,onVnodeUpdated:Ki,onVnodeUnmounted:Ki}):"404 Page Not Found"])}}),xe=Ae;function U3(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),(s=!0)&&setTimeout(()=>s=!1,t))}}function El(e){return e.startsWith("/")?e:`/${e}`}function Hc(e){const{pathname:t,search:n,hash:s,protocol:o}=new URL(e,"http://a.com");if(uh(e)||e.startsWith("#")||!o.startsWith("http")||!fh(t))return e;const{site:i}=xe(),r=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${n}${s}`);return Ee(r)}function Ai({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:o,hash:i}=xe(),r=M(()=>({label:t.value.locales[n.value]?.label,link:t.value.locales[n.value]?.link||(n.value==="root"?"/":`/${n.value}/`)}));return{localeLinks:M(()=>Object.entries(t.value.locales).flatMap(([c,u])=>r.value.label===u.label?[]:{text:u.label,link:W3(u.link||(c==="root"?"/":`/${c}/`),o.value.i18nRouting!==!1&&e,s.value.relativePath.slice(r.value.link.length-1),!t.value.cleanUrls)+i.value,lang:u.lang,dir:u.dir})),currentLang:r}}function W3(e,t,n,s){return t?e.replace(/\/$/,"")+El(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const q3={class:"NotFound"},K3={class:"code"},Y3={class:"title"},G3={class:"quote"},J3={class:"action"},X3=["href","aria-label"],Q3=z({__name:"NotFound",setup(e){const{theme:t}=xe(),{currentLang:n}=Ai();return(s,o)=>(p(),w("div",q3,[S("p",K3,W(l(t).notFound?.code??"404"),1),S("h1",Y3,W(l(t).notFound?.title??"PAGE NOT FOUND"),1),o[0]||(o[0]=S("div",{class:"divider"},null,-1)),S("blockquote",G3,W(l(t).notFound?.quote??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),S("div",J3,[S("a",{class:"link",href:l(Ee)(l(t).notFound?.link??l(n).link),"aria-label":l(t).notFound?.linkLabel??"go to home"},W(l(t).notFound?.linkText??"Take me home"),9,X3)])]))}}),Z3=ke(Q3,[["__scopeId","data-v-8da4cf55"]]);function hh(e,t){if(Array.isArray(e))return fr(e);if(e==null)return[];t=El(t);const n=Object.keys(e).sort((o,i)=>i.split("/").length-o.split("/").length).find(o=>t.startsWith(El(o))),s=n?e[n]:[];return Array.isArray(s)?fr(s):fr(s.items,s.base)}function e4(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function t4(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function xl(e,t){return Array.isArray(t)?t.some(n=>xl(e,n)):$s(e,t.link)?!0:t.items?xl(e,t.items):!1}function fr(e,t){return[...e].map(n=>{const s={...n},o=s.base||t;return o&&s.link&&(s.link=o+s.link.replace(/^\//,o.endsWith("/")?"":"/")),s.items&&(s.items=fr(s.items,o)),s})}function n4(){const{hasSidebar:e}=ls(),t=Br("(min-width: 960px)"),n=Br("(min-width: 1280px)");return{isAsideEnabled:M(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const s4=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Al=[];function ph(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function o4(e){const t=[...document.querySelectorAll(".VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{element:n,title:i4(n),link:"#"+n.id,level:s}});return r4(t,e)}function i4(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(s4.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function r4(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return c4(e,s,o)}function a4(e,t){const{isAsideEnabled:n}=n4(),s=U3(i,100);let o=null;be(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Mo(()=>{r(location.hash)}),cn(()=>{window.removeEventListener("scroll",s)});function i(){if(!n.value)return;const a=window.scrollY,c=window.innerHeight,u=document.body.offsetHeight,f=Math.abs(a+c-u)<1,d=Al.map(({element:m,link:g})=>({link:g,top:l4(m)})).filter(({top:m})=>!Number.isNaN(m)).sort((m,g)=>m.top-g.top);if(!d.length){r(null);return}if(a<1){r(null);return}if(f){r(d[d.length-1].link);return}let h=null;for(const{link:m,top:g}of d){if(g>a+Rc()+4)break;h=m}r(h)}function r(a){o&&o.classList.remove("active"),a==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(a)}"]`);const c=o;c?(c.classList.add("active"),t.value.style.top=c.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function l4(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function c4(e,t,n){Al.length=0;const s=[],o=[];return e.forEach(i=>{const r={...i,children:[]};let a=o[o.length-1];for(;a&&a.level>=r.level;)o.pop(),a=o[o.length-1];if(r.element.classList.contains("ignore-header")||a&&"shouldIgnore"in a){o.push({level:r.level,shouldIgnore:!0});return}r.level>n||r.level{t=co.value?document.activeElement:void 0}),be(()=>{window.addEventListener("keyup",n)}),cn(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&co.value&&(e(),t?.focus())}}function f4(){function e(){co.value=!0}function t(){co.value=!1}function n(){co.value?t():e()}return{isOpen:co,open:e,close:t,toggle:n}}function d4(e){const{page:t,hash:n}=xe(),s=j(!1),o=M(()=>e.value.collapsed!=null),i=M(()=>!!e.value.link),r=j(!1),a=()=>{r.value=$s(t.value.relativePath,e.value.link)};te([t,e,n],a),be(a);const c=M(()=>r.value?!0:e.value.items?xl(t.value.relativePath,e.value.items):!1),u=M(()=>!!(e.value.items&&e.value.items.length));Hn(()=>{s.value=!!(o.value&&e.value.collapsed)}),da(()=>{(r.value||c.value)&&(s.value=!1)});function f(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:i,isActiveLink:r,hasActiveLink:c,hasChildren:u,toggle:f}}const $l=He([]),Zo=He([]),Ll=He(!1);function ls(){const{frontmatter:e,theme:t}=xe(),n=M(()=>!!(e.value.isHome??e.value.layout==="home")),s=M(()=>e.value.sidebar!==!1&&Zo.value.length>0&&!n.value),o=M(()=>s.value&&Ll.value),i=M(()=>s.value?e4(Zo.value):[]),r=M(()=>n.value?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),a=M(()=>r.value?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),c=M(()=>$l.value.length>0);return{isHome:n,sidebar:al(Zo),sidebarGroups:i,hasSidebar:s,isSidebarEnabled:o,hasAside:r,leftAside:a,headers:al($l),hasLocalNav:c}}function h4({closeSidebar:e}){const{frontmatter:t,page:n,theme:s}=xe();te(()=>[n.value.relativePath,s.value.sidebar],([i,r])=>{const a=r?hh(r,i):[];JSON.stringify(a)!==JSON.stringify(Zo.value)&&(Zo.value=a)},{immediate:!0,deep:!0,flush:"sync"}),xi(()=>{$l.value=o4(t.value.outline??s.value.outline)}),wt&&(Ll.value=window.innerWidth>=960,window.addEventListener("resize",()=>{Ll.value=window.innerWidth>=960},{passive:!0}));const o=kn();te(()=>o.path,e),u4(e)}const mh=Symbol("layout-info"),p4=["href","title"],m4=z({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){return(t,n)=>{const s=un("VPDocOutlineItem",!0);return p(),w("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(p(!0),w(Y,null,le(e.headers,({children:o,link:i,title:r})=>(p(),w("li",null,[S("a",{class:"outline-link",href:i,title:r},W(r),9,p4),o?.length?(p(),D(s,{key:0,headers:o},null,8,["headers"])):A("",!0)]))),256))],2)}}}),gh=ke(m4,[["__scopeId","data-v-a2fde347"]]),g4={class:"content"},v4={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},y4=z({__name:"VPDocAsideOutline",setup(e){const{theme:t}=xe(),n=j(),s=j(),{headers:o,hasLocalNav:i}=ls();return a4(n,s),(r,a)=>(p(),w("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":l(i)}]),ref_key:"container",ref:n},[S("div",g4,[S("div",{class:"outline-marker",ref_key:"marker",ref:s},null,512),S("div",v4,W(l(ph)(l(t))),1),H(gh,{headers:l(o),root:!0},null,8,["headers"])])],2))}}),b4=ke(y4,[["__scopeId","data-v-6de6b820"]]),k4={class:"VPDocAsideCarbonAds"},w4=z({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,s)=>(p(),w("div",k4,[H(l(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),C4={class:"VPDocAside"},_4=z({__name:"VPDocAside",setup(e){const{theme:t}=xe();return(n,s)=>(p(),w("div",C4,[F(n.$slots,"aside-top",{},void 0,!0),F(n.$slots,"aside-outline-before",{},void 0,!0),H(b4),F(n.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=S("div",{class:"spacer"},null,-1)),F(n.$slots,"aside-ads-before",{},void 0,!0),l(t).carbonAds?(p(),D(w4,{key:0,"carbon-ads":l(t).carbonAds},null,8,["carbon-ads"])):A("",!0),F(n.$slots,"aside-ads-after",{},void 0,!0),F(n.$slots,"aside-bottom",{},void 0,!0)]))}}),S4=ke(_4,[["__scopeId","data-v-76867c7a"]]);function T4(){const{theme:e,page:t}=xe();return M(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{};let o;return typeof s=="function"?o=s(t.value):o=s.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function E4(){const{page:e,theme:t,frontmatter:n}=xe();return M(()=>{const s=hh(t.value.sidebar,e.value.relativePath),o=t4(s),i=x4(o,u=>u.link.replace(/[?#].*$/,"")),r=i.findIndex(u=>$s(e.value.relativePath,u.link)),a=t.value.docFooter?.prev===!1&&!n.value.prev||n.value.prev===!1,c=t.value.docFooter?.next===!1&&!n.value.next||n.value.next===!1;return{prev:a?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??i[r-1]?.docFooterText??i[r-1]?.text,link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??i[r-1]?.link},next:c?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??i[r+1]?.docFooterText??i[r+1]?.text,link:(typeof n.value.next=="object"?n.value.next.link:void 0)??i[r+1]?.link}}})}function x4(e,t){const n=new Set;return e.filter(s=>{const o=t(s);return n.has(o)?!1:n.add(o)})}const Vn=z({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=M(()=>t.tag??(t.href?"a":"span")),s=M(()=>t.href&&ka.test(t.href)||t.target==="_blank");return(o,i)=>(p(),D(Be(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":s.value,"no-icon":e.noIcon}]),href:e.href?l(Hc)(e.href):void 0,target:e.target??(s.value?"_blank":void 0),rel:e.rel??(s.value?"noreferrer":void 0)},{default:O(()=>[F(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),A4={class:"VPLastUpdated"},$4=["datetime"],L4=z({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=xe(),{language:o}=w3(),i=R1("timeRef"),r=M(()=>new Date(n.value.lastUpdated)),a=M(()=>r.value.toISOString()),c=He("");return be(()=>{Hn(()=>{const u=t.value.lastUpdated?.formatOptions?.forceLocale?s.value:o.value;c.value=new Intl.DateTimeFormat(u,t.value.lastUpdated?.formatOptions??{dateStyle:"medium",timeStyle:"medium"}).format(r.value),u&&s.value!==u?i.value?.setAttribute("lang",u):i.value?.removeAttribute("lang")})}),(u,f)=>(p(),w("p",A4,[rt(W(l(t).lastUpdated?.text||l(t).lastUpdatedText||"Last updated")+": ",1),S("time",{ref_key:"timeRef",ref:i,datetime:a.value},W(c.value),9,$4)]))}}),I4=ke(L4,[["__scopeId","data-v-7dc12fe8"]]),P4={key:0,class:"VPDocFooter"},M4={key:0,class:"edit-info"},F4={key:0,class:"edit-link"},B4={key:1,class:"last-updated"},N4={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},V4={class:"pager"},O4=["innerHTML"],D4=["innerHTML"],R4={class:"pager"},H4=["innerHTML"],z4=["innerHTML"],j4=z({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=xe(),o=T4(),i=E4(),r=M(()=>t.value.editLink&&s.value.editLink!==!1),a=M(()=>n.value.lastUpdated),c=M(()=>r.value||a.value||i.value.prev||i.value.next);return(u,f)=>c.value?(p(),w("footer",P4,[F(u.$slots,"doc-footer-before",{},void 0,!0),r.value||a.value?(p(),w("div",M4,[r.value?(p(),w("div",F4,[H(Vn,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:O(()=>[f[0]||(f[0]=S("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),rt(" "+W(l(o).text),1)]),_:1},8,["href"])])):A("",!0),a.value?(p(),w("div",B4,[H(I4)])):A("",!0)])):A("",!0),l(i).prev?.link||l(i).next?.link?(p(),w("nav",N4,[f[1]||(f[1]=S("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),S("div",V4,[l(i).prev?.link?(p(),D(Vn,{key:0,class:"pager-link prev",href:l(i).prev.link},{default:O(()=>[S("span",{class:"desc",innerHTML:l(t).docFooter?.prev||"Previous page"},null,8,O4),S("span",{class:"title",innerHTML:l(i).prev.text},null,8,D4)]),_:1},8,["href"])):A("",!0)]),S("div",R4,[l(i).next?.link?(p(),D(Vn,{key:0,class:"pager-link next",href:l(i).next.link},{default:O(()=>[S("span",{class:"desc",innerHTML:l(t).docFooter?.next||"Next page"},null,8,H4),S("span",{class:"title",innerHTML:l(i).next.text},null,8,z4)]),_:1},8,["href"])):A("",!0)])])):A("",!0)])):A("",!0)}}),U4=ke(j4,[["__scopeId","data-v-984cd88d"]]),W4={class:"container"},q4={class:"aside-container"},K4={class:"aside-content"},Y4={class:"content"},G4={class:"content-container"},J4={class:"main"},X4=z({__name:"VPDoc",setup(e){const{theme:t}=xe(),n=kn(),{hasSidebar:s,hasAside:o,leftAside:i}=ls(),r=M(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(a,c)=>{const u=un("Content");return p(),w("div",{class:T(["VPDoc",{"has-sidebar":l(s),"has-aside":l(o)}])},[F(a.$slots,"doc-top",{},void 0,!0),S("div",W4,[l(o)?(p(),w("div",{key:0,class:T(["aside",{"left-aside":l(i)}])},[c[0]||(c[0]=S("div",{class:"aside-curtain"},null,-1)),S("div",q4,[S("div",K4,[H(S4,null,{"aside-top":O(()=>[F(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":O(()=>[F(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":O(()=>[F(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[F(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[F(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[F(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):A("",!0),S("div",Y4,[S("div",G4,[F(a.$slots,"doc-before",{},void 0,!0),S("main",J4,[H(u,{class:T(["vp-doc",[r.value,l(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),H(U4,null,{"doc-footer-before":O(()=>[F(a.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),F(a.$slots,"doc-after",{},void 0,!0)])])]),F(a.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Q4=ke(X4,[["__scopeId","data-v-882c4e63"]]),Z4=z({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=M(()=>t.href&&ka.test(t.href)),s=M(()=>t.tag||(t.href?"a":"button"));return(o,i)=>(p(),D(Be(s.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?l(Hc)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:O(()=>[F(o.$slots,"default",{},()=>[rt(W(e.text),1)],!0)]),_:3},8,["class","href","target","rel"]))}}),e6=ke(Z4,[["__scopeId","data-v-a733ff3b"]]),t6=["src","alt"],n6=z({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const s=un("VPImage",!0);return e.image?(p(),w(Y,{key:0},[typeof e.image=="string"||"src"in e.image?(p(),w("img",nt({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:l(Ee)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,t6)):(p(),w(Y,{key:1},[H(s,nt({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),H(s,nt({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):A("",!0)}}}),Nr=ke(n6,[["__scopeId","data-v-a8cbb5e4"]]),s6={class:"container"},o6={class:"main"},i6={class:"heading"},r6=["innerHTML"],a6=["innerHTML"],l6=["innerHTML"],c6={key:0,class:"actions"},u6={key:0,class:"image"},f6={class:"image-container"},d6=z({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const{heroImageSlotExists:t}=qe(mh);return(n,s)=>(p(),w("div",{class:T(["VPHero",{"has-image":e.image||l(t)}])},[S("div",s6,[S("div",o6,[F(n.$slots,"home-hero-info-before",{},void 0,!0),F(n.$slots,"home-hero-info",{},()=>[S("h1",i6,[e.name?(p(),w("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,r6)):A("",!0),e.text?(p(),w("span",{key:1,innerHTML:e.text,class:"text"},null,8,a6)):A("",!0)]),e.tagline?(p(),w("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,l6)):A("",!0)],!0),F(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(p(),w("div",c6,[(p(!0),w(Y,null,le(e.actions,o=>(p(),w("div",{key:o.link,class:"action"},[H(e6,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):A("",!0),F(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||l(t)?(p(),w("div",u6,[S("div",f6,[s[0]||(s[0]=S("div",{class:"image-bg"},null,-1)),F(n.$slots,"home-hero-image",{},()=>[e.image?(p(),D(Nr,{key:0,class:"image-src",image:e.image},null,8,["image"])):A("",!0)],!0)])])):A("",!0)])],2))}}),h6=ke(d6,[["__scopeId","data-v-ee741714"]]),p6=z({__name:"VPHomeHero",setup(e){const{frontmatter:t}=xe();return(n,s)=>l(t).hero?(p(),D(h6,{key:0,class:"VPHomeHero",name:l(t).hero.name,text:l(t).hero.text,tagline:l(t).hero.tagline,image:l(t).hero.image,actions:l(t).hero.actions},{"home-hero-info-before":O(()=>[F(n.$slots,"home-hero-info-before")]),"home-hero-info":O(()=>[F(n.$slots,"home-hero-info")]),"home-hero-info-after":O(()=>[F(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":O(()=>[F(n.$slots,"home-hero-actions-after")]),"home-hero-image":O(()=>[F(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):A("",!0)}}),m6={class:"box"},g6={key:0,class:"icon"},v6=["innerHTML"],y6=["innerHTML"],b6=["innerHTML"],k6={key:4,class:"link-text"},w6={class:"link-text-value"},C6=z({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(p(),D(Vn,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:O(()=>[S("article",m6,[typeof e.icon=="object"&&e.icon.wrap?(p(),w("div",g6,[H(Nr,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(p(),D(Nr,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(p(),w("div",{key:2,class:"icon",innerHTML:e.icon},null,8,v6)):A("",!0),S("h2",{class:"title",innerHTML:e.title},null,8,y6),e.details?(p(),w("p",{key:3,class:"details",innerHTML:e.details},null,8,b6)):A("",!0),e.linkText?(p(),w("div",k6,[S("p",w6,[rt(W(e.linkText)+" ",1),n[0]||(n[0]=S("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):A("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),_6=ke(C6,[["__scopeId","data-v-bf042e10"]]),S6={key:0,class:"VPFeatures"},T6={class:"container"},E6={class:"items"},x6=z({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=M(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>e.features?(p(),w("div",S6,[S("div",T6,[S("div",E6,[(p(!0),w(Y,null,le(e.features,i=>(p(),w("div",{key:i.title,class:T(["item",[n.value]])},[H(_6,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):A("",!0)}}),A6=ke(x6,[["__scopeId","data-v-5ad9f568"]]),$6=z({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=xe();return(n,s)=>l(t).features?(p(),D(A6,{key:0,class:"VPHomeFeatures",features:l(t).features},null,8,["features"])):A("",!0)}}),L6=z({__name:"VPHomeContent",setup(e){const{width:t}=C3({initialWidth:0,includeScrollbar:!1});return(n,s)=>(p(),w("div",{class:"vp-doc container",style:Fe(l(t)?{"--vp-offset":`calc(50% - ${l(t)/2}px)`}:{})},[F(n.$slots,"default",{},void 0,!0)],4))}}),I6=ke(L6,[["__scopeId","data-v-443a44f6"]]),P6=z({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=xe();return(s,o)=>{const i=un("Content");return p(),w("div",{class:T(["VPHome",{"external-link-icon-enabled":l(n).externalLinkIcon}])},[F(s.$slots,"home-hero-before",{},void 0,!0),H(p6,null,{"home-hero-info-before":O(()=>[F(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[F(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[F(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[F(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[F(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),F(s.$slots,"home-hero-after",{},void 0,!0),F(s.$slots,"home-features-before",{},void 0,!0),H($6),F(s.$slots,"home-features-after",{},void 0,!0),l(t).markdownStyles!==!1?(p(),D(I6,{key:0},{default:O(()=>[H(i)]),_:1})):(p(),D(i,{key:1}))],2)}}}),M6=ke(P6,[["__scopeId","data-v-a46f93a8"]]),F6={},B6={class:"VPPage"};function N6(e,t){const n=un("Content");return p(),w("div",B6,[F(e.$slots,"page-top"),H(n),F(e.$slots,"page-bottom")])}const V6=ke(F6,[["render",N6]]),O6=z({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=xe(),{isHome:s,hasSidebar:o}=ls();return(i,r)=>(p(),w("div",{class:T(["VPContent",{"has-sidebar":l(o),"is-home":l(s)}]),id:"VPContent"},[l(t).isNotFound?F(i.$slots,"not-found",{key:0},()=>[H(Z3)],!0):l(n).layout==="page"?(p(),D(V6,{key:1},{"page-top":O(()=>[F(i.$slots,"page-top",{},void 0,!0)]),"page-bottom":O(()=>[F(i.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(n).layout==="home"?(p(),D(M6,{key:2},{"home-hero-before":O(()=>[F(i.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":O(()=>[F(i.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[F(i.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[F(i.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[F(i.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[F(i.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":O(()=>[F(i.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":O(()=>[F(i.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":O(()=>[F(i.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(n).layout&&l(n).layout!=="doc"?(p(),D(Be(l(n).layout),{key:3})):(p(),D(Q4,{key:4},{"doc-top":O(()=>[F(i.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":O(()=>[F(i.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":O(()=>[F(i.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":O(()=>[F(i.$slots,"doc-before",{},void 0,!0)]),"doc-after":O(()=>[F(i.$slots,"doc-after",{},void 0,!0)]),"aside-top":O(()=>[F(i.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":O(()=>[F(i.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[F(i.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[F(i.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[F(i.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":O(()=>[F(i.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),D6=ke(O6,[["__scopeId","data-v-c3f0da0c"]]),R6={class:"container"},H6=["innerHTML"],z6=["innerHTML"],j6=z({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=xe(),{hasSidebar:s}=ls();return(o,i)=>l(t).footer&&l(n).footer!==!1?(p(),w("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(s)}])},[S("div",R6,[l(t).footer.message?(p(),w("p",{key:0,class:"message",innerHTML:l(t).footer.message},null,8,H6)):A("",!0),l(t).footer.copyright?(p(),w("p",{key:1,class:"copyright",innerHTML:l(t).footer.copyright},null,8,z6)):A("",!0)])],2)):A("",!0)}}),U6=ke(j6,[["__scopeId","data-v-9efde1aa"]]),W6={class:"menu-text"},q6={class:"header"},K6={class:"outline"},Y6=z({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=xe(),s=j(!1),o=j(0),i=j(),r=j();function a(d){i.value?.contains(d.target)||(s.value=!1)}te(s,d=>{if(d){document.addEventListener("click",a);return}document.removeEventListener("click",a)}),_l("Escape",()=>{s.value=!1}),xi(()=>{s.value=!1});function c(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function u(d){d.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),ze(()=>{s.value=!1}))}function f(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(d,h)=>(p(),w("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:i},[e.headers.length>0?(p(),w("button",{key:0,onClick:c,class:T({open:s.value})},[S("span",W6,W(l(ph)(l(n))),1),h[0]||(h[0]=S("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(p(),w("button",{key:1,onClick:f},W(l(n).returnToTopLabel||"Return to top"),1)),H(vt,{name:"flyout"},{default:O(()=>[s.value?(p(),w("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:u},[S("div",q6,[S("a",{class:"top-link",href:"#",onClick:f},W(l(n).returnToTopLabel||"Return to top"),1)]),S("div",K6,[H(gh,{headers:e.headers},null,8,["headers"])])],512)):A("",!0)]),_:1})],4))}}),G6=ke(Y6,[["__scopeId","data-v-9f1eaf8c"]]),J6={class:"container"},X6=["aria-expanded"],Q6={class:"menu-text"},Z6=z({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=xe(),{isHome:n,hasSidebar:s,headers:o,hasLocalNav:i}=ls(),{y:r}=ah(),a=j(0);be(()=>{a.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))});const c=M(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:!i.value,fixed:!i.value&&!s.value}));return(u,f)=>!l(n)&&(l(i)||l(s)||l(r)>=a.value)?(p(),w("div",{key:0,class:T(c.value)},[S("div",J6,[l(s)?(p(),w("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:f[0]||(f[0]=d=>u.$emit("open-menu"))},[f[1]||(f[1]=S("span",{class:"vpi-align-left menu-icon"},null,-1)),S("span",Q6,W(l(t).sidebarMenuLabel||"Menu"),1)],8,X6)):A("",!0),H(G6,{headers:l(o),navHeight:a.value},null,8,["headers","navHeight"])])],2)):A("",!0)}}),e8=ke(Z6,[["__scopeId","data-v-d7c3d326"]]);function t8(){const e=j(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=kn();return te(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const zc=Symbol("nav"),n8={},s8={class:"VPSwitch",type:"button",role:"switch"},o8={class:"check"},i8={key:0,class:"icon"};function r8(e,t){return p(),w("button",s8,[S("span",o8,[e.$slots.default?(p(),w("span",i8,[F(e.$slots,"default",{},void 0,!0)])):A("",!0)])])}const a8=ke(n8,[["render",r8],["__scopeId","data-v-aa6a72db"]]),l8=z({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=xe(),s=qe("toggle-appearance",()=>{t.value=!t.value}),o=j("");return da(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,r)=>(p(),D(a8,{title:o.value,class:"VPSwitchAppearance","aria-checked":l(t),onClick:l(s)},{default:O(()=>[...r[0]||(r[0]=[S("span",{class:"vpi-sun sun"},null,-1),S("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),jc=ke(l8,[["__scopeId","data-v-796463e8"]]),c8={key:0,class:"VPNavBarAppearance"},u8=z({__name:"VPNavBarAppearance",setup(e){const{site:t}=xe();return(n,s)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",c8,[H(jc)])):A("",!0)}}),f8=ke(u8,[["__scopeId","data-v-bca6fe53"]]),Uc=j();let vh=!1,Ka=0;function d8(e){const t=j(!1);if(wt){!vh&&h8(),Ka++;const n=te(Uc,s=>{s===e.el.value||e.el.value?.contains(s)?(t.value=!0,e.onFocus?.()):(t.value=!1,e.onBlur?.())});cn(()=>{n(),Ka--,Ka||p8()})}return It(t)}function h8(){document.addEventListener("focusin",yh),vh=!0,Uc.value=document.activeElement}function p8(){document.removeEventListener("focusin",yh)}function yh(){Uc.value=document.activeElement}const m8={class:"VPMenuLink"},g8=["innerHTML"],v8=z({inheritAttrs:!1,__name:"VPMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,i)=>(p(),w("div",m8,[H(Vn,nt(o.$attrs,{class:{active:l($s)(l(n).relativePath,e.item.activeMatch||s.value,!!e.item.activeMatch)},href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon}),{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,g8)]),_:1},16,["class","href","target","rel","no-icon"])]))}}),wa=ke(v8,[["__scopeId","data-v-e0872219"]]),y8={class:"VPMenuGroup"},b8={key:0,class:"title"},k8=z({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(p(),w("div",y8,[e.text?(p(),w("p",b8,W(e.text),1)):A("",!0),(p(!0),w(Y,null,le(e.items,s=>(p(),w(Y,{key:JSON.stringify(s)},["link"in s?(p(),D(wa,{key:0,item:s},null,8,["item"])):A("",!0)],64))),128))]))}}),w8=ke(k8,[["__scopeId","data-v-64849d1f"]]),C8={class:"VPMenu"},_8={key:0,class:"items"},S8=z({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(p(),w("div",C8,[e.items?(p(),w("div",_8,[(p(!0),w(Y,null,le(e.items,s=>(p(),w(Y,{key:JSON.stringify(s)},["link"in s?(p(),D(wa,{key:0,item:s},null,8,["item"])):"component"in s?(p(),D(Be(s.component),nt({key:1,ref_for:!0},s.props),null,16)):(p(),D(w8,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):A("",!0),F(t.$slots,"default",{},void 0,!0)]))}}),T8=ke(S8,[["__scopeId","data-v-0a00b60e"]]),E8=["aria-expanded","aria-label"],x8={key:0,class:"text"},A8=["innerHTML"],$8={key:1,class:"vpi-more-horizontal icon"},L8={class:"menu"},I8=z({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=j(!1),n=j();d8({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(p(),w("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=r=>t.value=!0),onMouseleave:i[2]||(i[2]=r=>t.value=!1)},[S("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=r=>t.value=!t.value)},[e.button||e.icon?(p(),w("span",x8,[e.icon?(p(),w("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):A("",!0),e.button?(p(),w("span",{key:1,innerHTML:e.button},null,8,A8)):A("",!0),i[3]||(i[3]=S("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(p(),w("span",$8))],8,E8),S("div",L8,[H(T8,{items:e.items},{default:O(()=>[F(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Wc=ke(I8,[["__scopeId","data-v-b2527cb7"]]),P8=["href","aria-label","rel","innerHTML"],M8=z({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{},me:{type:Boolean}},setup(e){const t=e,n=j();be(async()=>{await ze();const o=n.value?.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const s=M(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,i)=>(p(),w("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:e.me?"me noopener":"noopener",innerHTML:s.value},null,8,P8))}}),F8=ke(M8,[["__scopeId","data-v-91c7facc"]]),B8={class:"VPSocialLinks"},N8=z({__name:"VPSocialLinks",props:{links:{},me:{type:Boolean,default:!0}},setup(e){return(t,n)=>(p(),w("div",B8,[(p(!0),w(Y,null,le(e.links,({link:s,icon:o,ariaLabel:i})=>(p(),D(F8,{key:s,icon:o,link:s,ariaLabel:i,me:e.me},null,8,["icon","link","ariaLabel","me"]))),128))]))}}),qc=ke(N8,[["__scopeId","data-v-26dd8e81"]]),V8={key:0,class:"group translations"},O8={class:"trans-title"},D8={key:1,class:"group"},R8={class:"item appearance"},H8={class:"label"},z8={class:"appearance-action"},j8={key:2,class:"group"},U8={class:"item social-links"},W8=z({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=xe(),{localeLinks:s,currentLang:o}=Ai({correspondingLink:!0}),i=M(()=>s.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(r,a)=>i.value?(p(),D(Wc,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:O(()=>[l(s).length&&l(o).label?(p(),w("div",V8,[S("p",O8,W(l(o).label),1),(p(!0),w(Y,null,le(l(s),c=>(p(),D(wa,{key:c.link,item:c,lang:c.lang,dir:c.dir},null,8,["item","lang","dir"]))),128))])):A("",!0),l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",D8,[S("div",R8,[S("p",H8,W(l(n).darkModeSwitchLabel||"Appearance"),1),S("div",z8,[H(jc)])])])):A("",!0),l(n).socialLinks?(p(),w("div",j8,[S("div",U8,[H(qc,{class:"social-links-list",links:l(n).socialLinks},null,8,["links"])])])):A("",!0)]),_:1})):A("",!0)}}),q8=ke(W8,[["__scopeId","data-v-db1d6c7b"]]),K8=["aria-expanded"],Y8=z({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(p(),w("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},[...n[1]||(n[1]=[S("span",{class:"container"},[S("span",{class:"top"}),S("span",{class:"middle"}),S("span",{class:"bottom"})],-1)])],10,K8))}}),G8=ke(Y8,[["__scopeId","data-v-38f7b5e9"]]),J8=["innerHTML"],X8=z({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,i)=>(p(),D(Vn,{class:T({VPNavBarMenuLink:!0,active:l($s)(l(n).relativePath,e.item.activeMatch||s.value,!!e.item.activeMatch)}),href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,J8)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Q8=ke(X8,[["__scopeId","data-v-4da5b703"]]),Z8=z({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=i=>"component"in i?!1:"link"in i?$s(n.value.relativePath,typeof i.link=="function"?i.link(n.value):i.link,!!t.item.activeMatch):i.items.some(s),o=M(()=>s(t.item));return(i,r)=>(p(),D(Wc,{class:T({VPNavBarMenuGroup:!0,active:l($s)(l(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),e5={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},t5=z({__name:"VPNavBarMenu",setup(e){const{theme:t}=xe();return(n,s)=>l(t).nav?(p(),w("nav",e5,[s[0]||(s[0]=S("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(p(!0),w(Y,null,le(l(t).nav,o=>(p(),w(Y,{key:JSON.stringify(o)},["link"in o?(p(),D(Q8,{key:0,item:o},null,8,["item"])):"component"in o?(p(),D(Be(o.component),nt({key:1,ref_for:!0},o.props),null,16)):(p(),D(Z8,{key:2,item:o},null,8,["item"]))],64))),128))])):A("",!0)}}),n5=ke(t5,[["__scopeId","data-v-d6cb3036"]]),s5="modulepreload",o5=function(e){return"/"+e},Bf={},i5=function(t,n,s){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(f=>Promise.resolve(f).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),a=r?.nonce||r?.getAttribute("nonce");o=c(n.map(u=>{if(u=o5(u),u in Bf)return;Bf[u]=!0;const f=u.endsWith(".css"),d=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${d}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":s5,f||(h.as="script"),h.crossOrigin="",h.href=u,a&&h.setAttribute("nonce",a),document.head.appendChild(h),f)return new Promise((m,g)=>{h.addEventListener("load",m),h.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${u}`)))})}))}function i(r){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=r,window.dispatchEvent(a),!a.defaultPrevented)throw r}return o.then(r=>{for(const a of r||[])a.status==="rejected"&&i(a.reason);return t().catch(i)})};function r5(e){const{localeIndex:t,theme:n}=xe();function s(o){const i=o.split("."),r=n.value.search?.options,a=r&&typeof r=="object",c=a&&r.locales?.[t.value]?.translations||null,u=a&&r.translations||null;let f=c,d=u,h=e;const m=i.pop();for(const g of i){let v=null;const b=h?.[g];b&&(v=h=b);const k=d?.[g];k&&(v=d=k);const C=f?.[g];C&&(v=f=C),b||(h=v),k||(d=v),C||(f=v)}return f?.[m]??d?.[m]??h?.[m]??""}return s}const a5=["aria-label"],l5={class:"DocSearch-Button-Container"},c5={class:"DocSearch-Button-Placeholder"},Nf=z({__name:"VPNavBarSearchButton",setup(e){const n=r5({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,o)=>(p(),w("button",{type:"button","aria-label":l(n)("button.buttonAriaLabel"),"aria-keyshortcuts":"/ control+k meta+k",class:"DocSearch DocSearch-Button"},[S("span",l5,[o[0]||(o[0]=S("span",{class:"vpi-search DocSearch-Search-Icon"},null,-1)),S("span",c5,W(l(n)("button.buttonText")),1)]),o[1]||(o[1]=S("span",{class:"DocSearch-Button-Keys"},[S("kbd",{class:"DocSearch-Button-Key"}),S("kbd",{class:"DocSearch-Button-Key"})],-1))],8,a5))}}),u5={class:"VPNavBarSearch"},f5={id:"local-search"},d5={key:1,id:"docsearch"},h5=z({__name:"VPNavBarSearch",setup(e){const t=wc(()=>i5(()=>import("./VPLocalSearchBox.Czq7e9gl.js"),[])),n=()=>null,{theme:s}=xe(),o=j(!1),i=j(!1);be(()=>{});function r(){o.value||(o.value=!0,setTimeout(a,16))}function a(){const d=new Event("keydown");d.key="k",d.metaKey=!0,window.dispatchEvent(d),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||a()},16)}function c(d){const h=d.target,m=h.tagName;return h.isContentEditable||m==="INPUT"||m==="SELECT"||m==="TEXTAREA"}const u=j(!1);_l("k",d=>{(d.ctrlKey||d.metaKey)&&(d.preventDefault(),u.value=!0)}),_l("/",d=>{c(d)||(d.preventDefault(),u.value=!0)});const f="local";return(d,h)=>(p(),w("div",u5,[l(f)==="local"?(p(),w(Y,{key:0},[u.value?(p(),D(l(t),{key:0,onClose:h[0]||(h[0]=m=>u.value=!1)})):A("",!0),S("div",f5,[H(Nf,{onClick:h[1]||(h[1]=m=>u.value=!0)})])],64)):l(f)==="algolia"?(p(),w(Y,{key:1},[o.value?(p(),D(l(n),{key:0,algolia:l(s).search?.options??l(s).algolia,onVnodeBeforeMount:h[2]||(h[2]=m=>i.value=!0)},null,8,["algolia"])):A("",!0),i.value?A("",!0):(p(),w("div",d5,[H(Nf,{onClick:r})]))],64)):A("",!0)]))}}),p5=z({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=xe();return(n,s)=>l(t).socialLinks?(p(),D(qc,{key:0,class:"VPNavBarSocialLinks",links:l(t).socialLinks},null,8,["links"])):A("",!0)}}),m5=ke(p5,[["__scopeId","data-v-96c85d3a"]]),g5=["href","rel","target"],v5=["innerHTML"],y5={key:2},b5=z({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=xe(),{hasSidebar:s}=ls(),{currentLang:o}=Ai(),i=M(()=>typeof n.value.logoLink=="string"?n.value.logoLink:n.value.logoLink?.link),r=M(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.rel),a=M(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.target);return(c,u)=>(p(),w("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(s)}])},[S("a",{class:"title",href:i.value??l(Hc)(l(o).link),rel:r.value,target:a.value},[F(c.$slots,"nav-bar-title-before",{},void 0,!0),l(n).logo?(p(),D(Nr,{key:0,class:"logo",image:l(n).logo},null,8,["image"])):A("",!0),l(n).siteTitle?(p(),w("span",{key:1,innerHTML:l(n).siteTitle},null,8,v5)):l(n).siteTitle===void 0?(p(),w("span",y5,W(l(t).title),1)):A("",!0),F(c.$slots,"nav-bar-title-after",{},void 0,!0)],8,g5)],2))}}),k5=ke(b5,[["__scopeId","data-v-433c1997"]]),w5={class:"items"},C5={class:"title"},_5=z({__name:"VPNavBarTranslations",setup(e){const{theme:t}=xe(),{localeLinks:n,currentLang:s}=Ai({correspondingLink:!0});return(o,i)=>l(n).length&&l(s).label?(p(),D(Wc,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:l(t).langMenuLabel||"Change language"},{default:O(()=>[S("div",w5,[S("p",C5,W(l(s).label),1),(p(!0),w(Y,null,le(l(n),r=>(p(),D(wa,{key:r.link,item:r,lang:r.lang,dir:r.dir},null,8,["item","lang","dir"]))),128))])]),_:1},8,["label"])):A("",!0)}}),S5=ke(_5,[["__scopeId","data-v-a24a458d"]]),T5={class:"wrapper"},E5={class:"container"},x5={class:"title"},A5={class:"content"},$5={class:"content-body"},L5=z({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=ah(),{isHome:s,hasSidebar:o}=ls(),i=j({});return da(()=>{i.value={"has-sidebar":o.value,home:s.value,top:n.value===0,"screen-open":t.isScreenOpen}}),(r,a)=>(p(),w("div",{class:T(["VPNavBar",i.value])},[S("div",T5,[S("div",E5,[S("div",x5,[H(k5,null,{"nav-bar-title-before":O(()=>[F(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[F(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),S("div",A5,[S("div",$5,[F(r.$slots,"nav-bar-content-before",{},void 0,!0),H(h5,{class:"search"}),H(n5,{class:"menu"}),H(S5,{class:"translations"}),H(f8,{class:"appearance"}),H(m5,{class:"social-links"}),H(q8,{class:"extra"}),F(r.$slots,"nav-bar-content-after",{},void 0,!0),H(G8,{class:"hamburger",active:e.isScreenOpen,onClick:a[0]||(a[0]=c=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),a[1]||(a[1]=S("div",{class:"divider"},[S("div",{class:"divider-line"})],-1))],2))}}),I5=ke(L5,[["__scopeId","data-v-4038ab10"]]),P5={key:0,class:"VPNavScreenAppearance"},M5={class:"text"},F5=z({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=xe();return(s,o)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",P5,[S("p",M5,W(l(n).darkModeSwitchLabel||"Appearance"),1),H(jc)])):A("",!0)}}),B5=ke(F5,[["__scopeId","data-v-2dd8cf06"]]),N5=["innerHTML"],V5=z({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=qe(zc);return(i,r)=>(p(),D(Vn,{class:"VPNavScreenMenuLink",href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(o)},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,N5)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),O5=ke(V5,[["__scopeId","data-v-556e875f"]]),D5=["innerHTML"],R5=z({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=M(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=qe(zc);return(i,r)=>(p(),D(Vn,{class:"VPNavScreenMenuGroupLink",href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(o)},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,D5)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),bh=ke(R5,[["__scopeId","data-v-f633818c"]]),H5={class:"VPNavScreenMenuGroupSection"},z5={key:0,class:"title"},j5=z({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(p(),w("div",H5,[e.text?(p(),w("p",z5,W(e.text),1)):A("",!0),(p(!0),w(Y,null,le(e.items,s=>(p(),D(bh,{key:s.text,item:s},null,8,["item"]))),128))]))}}),U5=ke(j5,[["__scopeId","data-v-978ad136"]]),W5=["aria-controls","aria-expanded"],q5=["innerHTML"],K5=["id"],Y5={key:0,class:"item"},G5={key:1,class:"item"},J5={key:2,class:"group"},X5=z({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=j(!1),s=M(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(i,r)=>(p(),w("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[S("button",{class:"button","aria-controls":s.value,"aria-expanded":n.value,onClick:o},[S("span",{class:"button-text",innerHTML:e.text},null,8,q5),r[0]||(r[0]=S("span",{class:"vpi-plus button-icon"},null,-1))],8,W5),S("div",{id:s.value,class:"items"},[(p(!0),w(Y,null,le(e.items,a=>(p(),w(Y,{key:JSON.stringify(a)},["link"in a?(p(),w("div",Y5,[H(bh,{item:a},null,8,["item"])])):"component"in a?(p(),w("div",G5,[(p(),D(Be(a.component),nt({ref_for:!0},a.props,{"screen-menu":""}),null,16))])):(p(),w("div",J5,[H(U5,{text:a.text,items:a.items},null,8,["text","items"])]))],64))),128))],8,K5)],2))}}),Q5=ke(X5,[["__scopeId","data-v-011d53c7"]]),Z5={key:0,class:"VPNavScreenMenu"},e7=z({__name:"VPNavScreenMenu",setup(e){const{theme:t}=xe();return(n,s)=>l(t).nav?(p(),w("nav",Z5,[(p(!0),w(Y,null,le(l(t).nav,o=>(p(),w(Y,{key:JSON.stringify(o)},["link"in o?(p(),D(O5,{key:0,item:o},null,8,["item"])):"component"in o?(p(),D(Be(o.component),nt({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(p(),D(Q5,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):A("",!0)}}),t7=z({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=xe();return(n,s)=>l(t).socialLinks?(p(),D(qc,{key:0,class:"VPNavScreenSocialLinks",links:l(t).socialLinks},null,8,["links"])):A("",!0)}}),n7={class:"list"},s7=z({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=Ai({correspondingLink:!0}),s=j(!1);function o(){s.value=!s.value}return(i,r)=>l(t).length&&l(n).label?(p(),w("div",{key:0,class:T(["VPNavScreenTranslations",{open:s.value}])},[S("button",{class:"title",onClick:o},[r[0]||(r[0]=S("span",{class:"vpi-languages icon lang"},null,-1)),rt(" "+W(l(n).label)+" ",1),r[1]||(r[1]=S("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),S("ul",n7,[(p(!0),w(Y,null,le(l(t),a=>(p(),w("li",{key:a.link,class:"item"},[H(Vn,{class:"link",href:a.link,lang:a.lang,dir:a.dir},{default:O(()=>[rt(W(a.text),1)]),_:2},1032,["href","lang","dir"])]))),128))])],2)):A("",!0)}}),o7=ke(s7,[["__scopeId","data-v-c8207ae8"]]),i7={class:"container"},r7=z({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=j(null),n=rh(wt?document.body:null);return(s,o)=>(p(),D(vt,{name:"fade",onEnter:o[0]||(o[0]=i=>n.value=!0),onAfterLeave:o[1]||(o[1]=i=>n.value=!1)},{default:O(()=>[e.open?(p(),w("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[S("div",i7,[F(s.$slots,"nav-screen-content-before",{},void 0,!0),H(e7,{class:"menu"}),H(o7,{class:"translations"}),H(B5,{class:"appearance"}),H(t7,{class:"social-links"}),F(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):A("",!0)]),_:3}))}}),a7=ke(r7,[["__scopeId","data-v-5d62db4a"]]),l7={key:0,class:"VPNav"},c7=z({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=t8(),{frontmatter:o}=xe(),i=M(()=>o.value.navbar!==!1);return In(zc,{closeScreen:n}),Hn(()=>{wt&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(r,a)=>i.value?(p(),w("header",l7,[H(I5,{"is-screen-open":l(t),onToggleScreen:l(s)},{"nav-bar-title-before":O(()=>[F(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[F(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":O(()=>[F(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":O(()=>[F(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),H(a7,{open:l(t)},{"nav-screen-content-before":O(()=>[F(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":O(()=>[F(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):A("",!0)}}),u7=ke(c7,[["__scopeId","data-v-3b54cd11"]]),f7=["role","tabindex"],d7={key:1,class:"items"},h7=z({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:r,hasChildren:a,toggle:c}=d4(M(()=>t.item)),u=M(()=>a.value?"section":"div"),f=M(()=>o.value?"a":"div"),d=M(()=>a.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),h=M(()=>o.value?void 0:"button"),m=M(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":o.value},{"is-active":i.value},{"has-active":r.value}]);function g(b){"key"in b&&b.key!=="Enter"||!t.item.link&&c()}function v(){t.item.link&&c()}return(b,k)=>{const C=un("VPSidebarItem",!0);return p(),D(Be(u.value),{class:T(["VPSidebarItem",m.value])},{default:O(()=>[e.item.text?(p(),w("div",nt({key:0,class:"item",role:h.value},Ec(e.item.items?{click:g,keydown:g}:{},!0),{tabindex:e.item.items&&0}),[k[1]||(k[1]=S("div",{class:"indicator"},null,-1)),e.item.link?(p(),D(Vn,{key:0,tag:f.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:O(()=>[(p(),D(Be(d.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(p(),D(Be(d.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(p(),w("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:v,onKeydown:va(v,["enter"]),tabindex:"0"},[...k[0]||(k[0]=[S("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):A("",!0)],16,f7)):A("",!0),e.item.items&&e.item.items.length?(p(),w("div",d7,[e.depth<5?(p(!0),w(Y,{key:0},le(e.item.items,y=>(p(),D(C,{key:y.text,item:y,depth:e.depth+1},null,8,["item","depth"]))),128)):A("",!0)])):A("",!0)]),_:1},8,["class"])}}}),p7=ke(h7,[["__scopeId","data-v-5a4c94f8"]]),m7=z({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=j(!0);let n=null;return be(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),as(()=>{n!=null&&(clearTimeout(n),n=null)}),(s,o)=>(p(!0),w(Y,null,le(e.items,i=>(p(),w("div",{key:i.text,class:T(["group",{"no-transition":t.value}])},[H(p7,{item:i,depth:0},null,8,["item"])],2))),128))}}),g7=ke(m7,[["__scopeId","data-v-93551a19"]]),v7={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},y7=z({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=ls(),s=e,o=j(null),i=rh(wt?document.body:null);te([s,o],()=>{s.open?(i.value=!0,o.value?.focus()):i.value=!1},{immediate:!0,flush:"post"});const r=j(0);return te(t,()=>{r.value+=1},{deep:!0}),(a,c)=>l(n)?(p(),w("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:c[0]||(c[0]=To(()=>{},["stop"]))},[c[2]||(c[2]=S("div",{class:"curtain"},null,-1)),S("nav",v7,[c[1]||(c[1]=S("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),F(a.$slots,"sidebar-nav-before",{},void 0,!0),(p(),D(g7,{items:l(t),key:r.value},null,8,["items"])),F(a.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):A("",!0)}}),b7=ke(y7,[["__scopeId","data-v-f794e379"]]),k7={href:"#VPContent",class:"VPSkipLink visually-hidden"},w7=z({__name:"VPSkipLink",setup(e){const{theme:t}=xe(),n=kn(),s=j();return te(()=>n.path,()=>s.value.focus()),(o,i)=>(p(),w(Y,null,[S("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),S("a",k7,W(l(t).skipToContentLabel||"Skip to content"),1)],64))}}),C7=ke(w7,[["__scopeId","data-v-71bad25f"]]),_7=z({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=f4();h4({closeSidebar:s});const{frontmatter:o}=xe(),i=Si(),r=M(()=>!!i["home-hero-image"]);return In(mh,{heroImageSlotExists:r}),(a,c)=>{const u=un("Content");return l(o).layout!==!1?(p(),w("div",{key:0,class:T(["Layout",l(o).pageClass])},[F(a.$slots,"layout-top",{},void 0,!0),H(C7),H(Kv,{class:"backdrop",show:l(t),onClick:l(s)},null,8,["show","onClick"]),H(u7,null,{"nav-bar-title-before":O(()=>[F(a.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[F(a.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":O(()=>[F(a.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":O(()=>[F(a.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":O(()=>[F(a.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":O(()=>[F(a.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),H(e8,{open:l(t),onOpenMenu:l(n)},null,8,["open","onOpenMenu"]),H(b7,{open:l(t)},{"sidebar-nav-before":O(()=>[F(a.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":O(()=>[F(a.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),H(D6,null,{"page-top":O(()=>[F(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":O(()=>[F(a.$slots,"page-bottom",{},void 0,!0)]),"not-found":O(()=>[F(a.$slots,"not-found",{},void 0,!0)]),"home-hero-before":O(()=>[F(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":O(()=>[F(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[F(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[F(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[F(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[F(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":O(()=>[F(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":O(()=>[F(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":O(()=>[F(a.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":O(()=>[F(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":O(()=>[F(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":O(()=>[F(a.$slots,"doc-after",{},void 0,!0)]),"doc-top":O(()=>[F(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":O(()=>[F(a.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":O(()=>[F(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":O(()=>[F(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":O(()=>[F(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[F(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[F(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[F(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),H(U6),F(a.$slots,"layout-bottom",{},void 0,!0)],2)):(p(),D(u,{key:1}))}}}),S7=ke(_7,[["__scopeId","data-v-7a3bcf59"]]),kh={Layout:S7,enhanceApp:({app:e})=>{e.component("Badge",Q0)}},Vf=e=>/^(http?:|https?:|mailto:|tel:)/.test(e),Kc=e=>{try{return new URL(e),!0}catch{return!1}},Fo=(e,t)=>Object.prototype.toString.call(e)===`[object ${t}]`,ht=e=>Fo(e,"Function")||E7(e),ei=e=>e!==null&&Fo(e,"Object"),Yc=e=>Fo(e,"Number")&&!Number.isNaN(e),T7=e=>Je(e)?!Number.isNaN(Number(e)):!1,E7=e=>Fo(e,"AsyncFunction"),Je=e=>Fo(e,"String"),Qn=e=>Fo(e,"Boolean"),x7=e=>typeof Array.isArray>"u"?Object.prototype.toString.call(e)==="[object Array]":Array.isArray(e),Il=e=>typeof Element>"u"?!1:e instanceof Element,A7=()=>pe&&window?.navigator?.userAgent&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||window?.navigator?.maxTouchPoints>2&&/iPad|Macintosh/.test(window?.navigator.userAgent)),$7=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},pe=typeof window<"u"&&typeof document<"u",Of=(e="yyyy-MM-dd hh:mm:ss",t=!0)=>hi(new Date,e,t),hi=(e,t="yyyy-MM-dd hh:mm:ss",n=!0)=>{if(!e)return"";const s=new Date(e),o=n?s.getUTCFullYear():s.getFullYear(),i=String((n?s.getUTCMonth():s.getMonth())+1).padStart(2,"0"),r=String(n?s.getUTCDate():s.getDate()).padStart(2,"0"),a=String(n?s.getUTCHours():s.getHours()).padStart(2,"0"),c=String(n?s.getUTCMinutes():s.getMinutes()).padStart(2,"0"),u=String(n?s.getUTCSeconds():s.getSeconds()).padStart(2,"0");return t.replace("yyyy",o.toString()).replace("MM",i).replace("dd",r).replace("hh",a).replace("mm",c).replace("ss",u)},L7=(e,t)=>{const n=+new Date(e),s=+new Date,o=Math.abs(s-n),i=1e3,r=i*60,a=r*60,c=a*24,u=c*7,f=c*30,d=f*12;return o<1?"刚刚":o{const n=+new Date(e),s=+new Date;return Math.floor(Math.abs(n-s)/(1e3*60*60*24))},Df=e=>e.charAt(0).toUpperCase()+e.slice(1),sn=(e,t="px")=>e?Yc(e)||T7(e)?`${e}${t}`:Je(e)?e:"":"",P7=(e,t="px")=>{if(e){if(Yc(e))return e;if(Je(e))return Number(e.replace(t,""))}},M7=(e,t,n)=>{let s={...e};return t.includes(".")?(t.split(".").forEach(o=>s=s[o]??""),s||n):s[t]||n},wh=e=>{let t="";if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex");e=e.replace("#",""),t=e.match(/../g);for(let s=0;s<3;s++)t[s]=parseInt(t[s],16);return t},Ch=(e,t,n)=>{const s=/^\d{1,3}$/;if(!s.test(e)||!s.test(t)||!s.test(n))return console.error("[Teek Error] 输入错误的 rgb 颜色值");const o=[e.toString(16),t.toString(16),n.toString(16)];for(let i=0;i<3;i++)o[i].length===1&&(o[i]=`0${o[i]}`);return`#${o.join("")}`},Cn=(e,t)=>{if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex 颜色值");const s=wh(e);for(let o=0;o<3;o++)s[o]=Math.round(20.5*t+s[o]*(1-t));return Ch(s[0],s[1],s[2])},_n=(e,t)=>{if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex 颜色值");const s=wh(e);for(let o=0;o<3;o++)s[o]=Math.round(255*t+s[o]*(1-t));return Ch(s[0],s[1],s[2])},F7=e=>{if(!pe)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Baidu analytics id is empty");if(!document.querySelector(`#baidu-analytics-${t}`)){window._hmt=window._hmt||[];const s=document.createElement("script");s.id=`baidu-analytics-${t}`,s.async=!0,s.src=`https://hm.baidu.com/hm.js?${t}`,document.querySelector("head")?.appendChild(s)}},B7=(e,t)=>{if(!pe)return;const{id:n,production:s=!0}=e||{};if(n){if((!t||!Je(t))&&(t="/"),t.startsWith("http")){const o=t.split("/"),i=`${o[0]}//${o[2]}`;t=t.replace(i,"")}window._hmt&&(window._hmt.push(["_setAccount",n]),window._hmt.push(["_trackPageview",t]))}},N7=e=>{if(!pe||window.dataLayer&&window.gtag)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Google analytics id is empty");if(!document.querySelector(`#google-analytics-${t}`)){const s=document.createElement("script");s.id=`google-analytics-${t}`,s.src=`https://www.googletagmanager.com/gtag/js?id=${t}`,s.async=!0,document.head.appendChild(s),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",t)}},V7=(e,t=!0)=>{if(!pe)return;let n=[];if(Array.isArray(e)?n.push(...e):n.push(e),n=n.filter(s=>!!s.id),!!n.length)for(const s of n){const{id:o,src:i}=s;if(!document.querySelector(`#umami-analytics-${o}`)){const r=document.createElement("script");r.id=`umami-analytics-${o}`,r.async=!0,r.defer=!0,r.setAttribute("data-website-id",o),r.src=i,document.head.appendChild(r)}}},O7=e=>{if(!pe||window.clarity&&window.clarity.q)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Microsoft Clarity analytics id is empty");if(!document.querySelector(`#clarity-analytics-${t}`)){const s=document.createElement("script");s.id=`clarity-analytics-${t}`,s.async=!0,s.src=`https://www.clarity.ms/tag/${t}`,document.head.appendChild(s),window.clarity??=function(){(window.clarity.q??=[]).push(arguments)}}};typeof window<"u"&&(window._iconfont_svg_string_4999519='',(e=>{var t=(n=(n=document.getElementsByTagName("script"))[n.length-1]).getAttribute("data-injectcss"),n=n.getAttribute("data-disable-injectsvg");if(!n){var s,o,i,r,a,c=function(d,h){h.parentNode.insertBefore(d,h)};if(t&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(d){console&&console.log(d)}}s=function(){var d,h=document.createElement("div");h.innerHTML=e._iconfont_svg_string_4999519,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(d=document.body).firstChild?c(h,d.firstChild):d.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=s,r=e.document,a=!1,f(),r.onreadystatechange=function(){r.readyState=="complete"&&(r.onreadystatechange=null,u())})}function u(){a||(a=!0,i())}function f(){try{r.documentElement.doScroll("left")}catch{return void setTimeout(f,50)}u()}})(window));var _h=`"u"&&(_.yylloc={});var at=_.yylloc;a.push(at);var li=_.options&&_.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ci(B){c.length=c.length-2*B,b.length=b.length-B,a.length=a.length-B}n(ci,"popStack");function It(){var B;return B=g.pop()||_.lex()||Mt,typeof B!="number"&&(B instanceof Array&&(g=B,B=g.pop()),B=o.symbols_[B]||B),B}n(It,"lex");for(var I,U,$,ht,H={},tt,N,Bt,it;;){if(U=c[c.length-1],this.defaultActions[U]?$=this.defaultActions[U]:((I===null||typeof I>"u")&&(I=It()),$=M[U]&&M[U][I]),typeof $>"u"||!$.length||!$[0]){var ot="";it=[];for(tt in M[U])this.terminals_[tt]&&tt>oi&&it.push("'"+this.terminals_[tt]+"'");_.showPosition?ot="Parse error on line "+(J+1)+`: +import{q as n,a5 as gi,a6 as ui,ao as Nt,an as xi,a7 as di,a8 as pi,O as Vt,aS as fi,aa as mi,at as yi,aB as Ct,aA as Wt,aC as bi,b9 as Ai,ad as wi,ba as Si,bb as zt}from"../app.DfYWW83x.js";import{a as Ci}from"./init-DjUOC4st-C8Nwz6AJ.BTi8F14B.js";import{g as ki}from"./ordinal-DfAQgscy-BEJTu10r.vTmdWN-q.js";import{i as $t}from"./linear-m73w_WNc-FCrKOMM3.Dmb54ZXl.js";import"./vitepress-theme-teek.Dg-9NfO3.js";import"./defaultLocale-D7EN2tov-CK6dgF7Y.fzCKKdue.js";function _i(t,i,e){t=+t,i=+i,e=(h=arguments.length)<2?(i=t,t=0,1):h<3?1:+e;for(var s=-1,h=Math.max(0,Math.ceil((i-t)/e))|0,x=new Array(h);++s"u"&&(_.yylloc={});var at=_.yylloc;a.push(at);var li=_.options&&_.options.ranges;typeof X.yy.parseError=="function"?this.parseError=X.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ci(B){c.length=c.length-2*B,b.length=b.length-B,a.length=a.length-B}n(ci,"popStack");function It(){var B;return B=g.pop()||_.lex()||Mt,typeof B!="number"&&(B instanceof Array&&(g=B,B=g.pop()),B=o.symbols_[B]||B),B}n(It,"lex");for(var I,U,$,ht,H={},tt,N,Bt,it;;){if(U=c[c.length-1],this.defaultActions[U]?$=this.defaultActions[U]:((I===null||typeof I>"u")&&(I=It()),$=M[U]&&M[U][I]),typeof $>"u"||!$.length||!$[0]){var ot="";it=[];for(tt in M[U])this.terminals_[tt]&&tt>oi&&it.push("'"+this.terminals_[tt]+"'");_.showPosition?ot="Parse error on line "+(J+1)+`: `+_.showPosition()+` Expecting `+it.join(", ")+", got '"+(this.terminals_[I]||I)+"'":ot="Parse error on line "+(J+1)+": Unexpected "+(I==Mt?"end of input":"'"+(this.terminals_[I]||I)+"'"),this.parseError(ot,{text:_.match,token:this.terminals_[I]||I,line:_.yylineno,loc:at,expected:it})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+U+", token: "+I);switch($[0]){case 1:c.push(I),b.push(_.yytext),a.push(_.yylloc),c.push($[1]),I=null,Et=_.yyleng,d=_.yytext,J=_.yylineno,at=_.yylloc;break;case 2:if(N=this.productions_[$[1]][1],H.$=b[b.length-N],H._$={first_line:a[a.length-(N||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(N||1)].first_column,last_column:a[a.length-1].last_column},li&&(H._$.range=[a[a.length-(N||1)].range[0],a[a.length-1].range[1]]),ht=this.performAction.apply(H,[d,Et,J,X.yy,$[1],b,a].concat(ri)),typeof ht<"u")return ht;N&&(c=c.slice(0,-1*N*2),b=b.slice(0,-1*N),a=a.slice(0,-1*N)),c.push(this.productions_[$[1]][0]),b.push(H.$),a.push(H._$),Bt=M[c[c.length-2]][c[c.length-1]],c.push(Bt);break;case 3:return!0}}return!0},"parse")},q=(function(){var z={EOF:1,parseError:n(function(o,c){if(this.yy.parser)this.yy.parser.parseError(o,c);else throw new Error(o)},"parseError"),setInput:n(function(o,c){return this.yy=c||this.yy||{},this._input=o,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:n(function(){var o=this._input[0];this.yytext+=o,this.yyleng++,this.offset++,this.match+=o,this.matched+=o;var c=o.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),o},"input"),unput:n(function(o){var c=o.length,g=o.split(/(?:\r\n?|\n)/g);this._input=o+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var b=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===b.length?this.yylloc.first_column:0)+b[b.length-g.length].length-g[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:n(function(){return this._more=!0,this},"more"),reject:n(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true). `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:n(function(o){this.unput(this.match.slice(o))},"less"),pastInput:n(function(){var o=this.matched.substr(0,this.matched.length-this.match.length);return(o.length>20?"...":"")+o.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:n(function(){var o=this.match;return o.length<20&&(o+=this._input.substr(0,20-o.length)),(o.substr(0,20)+(o.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:n(function(){var o=this.pastInput(),c=new Array(o.length+1).join("-");return o+this.upcomingInput()+` diff --git a/assets/fullstack_css-engineering.md.BtxwP6p5.js b/assets/fullstack_css-engineering.md.BlaebeRp.js similarity index 99% rename from assets/fullstack_css-engineering.md.BtxwP6p5.js rename to assets/fullstack_css-engineering.md.BlaebeRp.js index 55e8b98..907fc49 100644 --- a/assets/fullstack_css-engineering.md.BtxwP6p5.js +++ b/assets/fullstack_css-engineering.md.BlaebeRp.js @@ -1,4 +1,4 @@ -import{_ as i,c as n,o as a,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","frontmatter":{"date":"2026-03-10T22:05:50.000Z","title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","permalink":"/fullstack/css-engineering","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","top":true,"categories":["全栈"],"tags":["全栈","CSS","工程化","tailwindcss"]},"headers":[],"relativePath":"fullstack/css-engineering.md","filePath":"01.全栈/40.前端工程/02.CSS工程化.md"}'),t={name:"fullstack/css-engineering.md"};function p(e,s,h,r,k,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南

摘要总结:在前端生态日新月异的今天,CSS 工程化早已超越了“如何写样式”的范畴,演变为一场关于开发效率(Velocity)与系统韧性(Resilience)的深度博弈。本文将系统梳理从预处理器、CSS-in-JS、Scoped CSS 到原子化 CSS 的演进脉络,并首次引入 “样式资产 ROI” 模型,深入剖析为何 Tailwind 已成为 AI 时代的基石架构。针对 Vue 与 React 的不同哲学,我们总结出了一套 “原子化为主,工程化局部兜底” 的企业级混合架构方案。无论你是深耕 React 生态、追求全链路类型安全的“变体驱动”先行者,还是在 Vue 生态中寻找极致心智负担平衡的实践者,本文都将为你提供一份清晰的架构决策树,助你规避工程红线,构建真正面向未来的样式资产。

1. 引言:主流 CSS 工程化方案有哪些?

在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。

除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。

CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modifier)来约束作用域,增强代码的可读性和可维护性。BEM 本身是一个优秀的规范,但它高度依赖开发者的自觉性,且会导致类名冗长,难以管理。

2. CSS 预处理器

CSS 预处理器是一种扩展了 CSS 功能的脚本语言,通过添加变量、嵌套、混入(Mixins)和函数等编程特性,让 CSS 更具结构化、可读性和可维护性。它允许开发者用特殊语法编写样式,然后编译成浏览器可读的普通 CSS 文件。 它也是最早也是最基础的工程化方案,核心思想是通过扩展原生 CSS 的语法,赋予其“编程”能力。

维度说明
核心思想增强版 CSS 使用变量统一管理设计令牌(Design Tokens),用嵌套减少重复选择器。
代表技术Sass (SCSS), Less, Stylus
核心特点提供了变量(Variables)、嵌套(Nesting)、混合(Mixins)、继承、函数等功能。
适用场景几乎所有项目。现阶段它通常不作为独立的解决方案,而是与其他方案(如 CSS Modules)结合使用。
局限性编译后的产物依然是普通 CSS,无法从根本上解决全局命名冲突的问题(通常需要配合 BEM 命名规范来缓解)

以 SCSS 为例,示意如下:

scss
/* Button.scss */
+import{_ as i,c as n,o as a,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","frontmatter":{"date":"2026-03-10T22:05:50.000Z","title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","permalink":"/fullstack/css-engineering","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","top":true,"categories":["全栈"],"tags":["全栈","CSS","工程化","tailwindcss"]},"headers":[],"relativePath":"fullstack/css-engineering.md","filePath":"01.全栈/40.前端工程/02.CSS工程化.md"}'),t={name:"fullstack/css-engineering.md"};function p(e,s,h,r,k,d){return a(),n("div",null,[...s[0]||(s[0]=[l(`

从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南

摘要总结:在前端生态日新月异的今天,CSS 工程化早已超越了“如何写样式”的范畴,演变为一场关于开发效率(Velocity)与系统韧性(Resilience)的深度博弈。本文将系统梳理从预处理器、CSS-in-JS、Scoped CSS 到原子化 CSS 的演进脉络,并首次引入 “样式资产 ROI” 模型,深入剖析为何 Tailwind 已成为 AI 时代的基石架构。针对 Vue 与 React 的不同哲学,我们总结出了一套 “原子化为主,工程化局部兜底” 的企业级混合架构方案。无论你是深耕 React 生态、追求全链路类型安全的“变体驱动”先行者,还是在 Vue 生态中寻找极致心智负担平衡的实践者,本文都将为你提供一份清晰的架构决策树,助你规避工程红线,构建真正面向未来的样式资产。

1. 引言:主流 CSS 工程化方案有哪些?

在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。

除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。

CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modifier)来约束作用域,增强代码的可读性和可维护性。BEM 本身是一个优秀的规范,但它高度依赖开发者的自觉性,且会导致类名冗长,难以管理。

2. CSS 预处理器

CSS 预处理器是一种扩展了 CSS 功能的脚本语言,通过添加变量、嵌套、混入(Mixins)和函数等编程特性,让 CSS 更具结构化、可读性和可维护性。它允许开发者用特殊语法编写样式,然后编译成浏览器可读的普通 CSS 文件。 它也是最早也是最基础的工程化方案,核心思想是通过扩展原生 CSS 的语法,赋予其“编程”能力。

维度说明
核心思想增强版 CSS 使用变量统一管理设计令牌(Design Tokens),用嵌套减少重复选择器。
代表技术Sass (SCSS), Less, Stylus
核心特点提供了变量(Variables)、嵌套(Nesting)、混合(Mixins)、继承、函数等功能。
适用场景几乎所有项目。现阶段它通常不作为独立的解决方案,而是与其他方案(如 CSS Modules)结合使用。
局限性编译后的产物依然是普通 CSS,无法从根本上解决全局命名冲突的问题(通常需要配合 BEM 命名规范来缓解)

以 SCSS 为例,示意如下:

scss
/* Button.scss */
 
 /* 1. 定义变量 */
 $primary-color: #3b82f6;
diff --git a/assets/fullstack_css-engineering.md.BtxwP6p5.lean.js b/assets/fullstack_css-engineering.md.BlaebeRp.lean.js
similarity index 95%
rename from assets/fullstack_css-engineering.md.BtxwP6p5.lean.js
rename to assets/fullstack_css-engineering.md.BlaebeRp.lean.js
index 140c8df..f133619 100644
--- a/assets/fullstack_css-engineering.md.BtxwP6p5.lean.js
+++ b/assets/fullstack_css-engineering.md.BlaebeRp.lean.js
@@ -1 +1 @@
-import{_ as i,c as n,o as a,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","frontmatter":{"date":"2026-03-10T22:05:50.000Z","title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","permalink":"/fullstack/css-engineering","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","top":true,"categories":["全栈"],"tags":["全栈","CSS","工程化","tailwindcss"]},"headers":[],"relativePath":"fullstack/css-engineering.md","filePath":"01.全栈/40.前端工程/02.CSS工程化.md"}'),t={name:"fullstack/css-engineering.md"};function p(e,s,h,r,k,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",79)])])}const c=i(t,[["render",p]]);export{g as __pageData,c as default};
+import{_ as i,c as n,o as a,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","frontmatter":{"date":"2026-03-10T22:05:50.000Z","title":"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南","description":"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。","permalink":"/fullstack/css-engineering","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","top":true,"categories":["全栈"],"tags":["全栈","CSS","工程化","tailwindcss"]},"headers":[],"relativePath":"fullstack/css-engineering.md","filePath":"01.全栈/40.前端工程/02.CSS工程化.md"}'),t={name:"fullstack/css-engineering.md"};function p(e,s,h,r,k,d){return a(),n("div",null,[...s[0]||(s[0]=[l("",79)])])}const c=i(t,[["render",p]]);export{g as __pageData,c as default};
diff --git a/assets/fullstack_decode-es-modules.md.pgLSwKoE.js b/assets/fullstack_decode-es-modules.md.CdNqd_Yi.js
similarity index 99%
rename from assets/fullstack_decode-es-modules.md.pgLSwKoE.js
rename to assets/fullstack_decode-es-modules.md.CdNqd_Yi.js
index 03e87c8..b9bd701 100644
--- a/assets/fullstack_decode-es-modules.md.pgLSwKoE.js
+++ b/assets/fullstack_decode-es-modules.md.CdNqd_Yi.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","frontmatter":{"date":"2024-05-14T22:29:32.000Z","title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","tldr":"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","permalink":"/fullstack/decode-es-modules","tags":["concept","ESM","static-analysis","Tree-Shaking","circular-dependency"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/decode-es-modules.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md"}'),p={name:"fullstack/decode-es-modules.md"};function h(k,s,e,t,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

回归标准,拥抱原生:ES Modules 核心规范与实践解析

如果说 CommonJS 是“草根英雄”,那么 ES Modules 就是“名门正派”。它是 ECMAScript 官方定义的模块系统,旨在为所有 JavaScript 环境提供统一、高效、且可静态分析的模块化方案。

理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。

1. 命名导出与导入:精准的代码引用

命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。

语法实践:

javascript
// math.js - 命名导出
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","frontmatter":{"date":"2024-05-14T22:29:32.000Z","title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","tldr":"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","permalink":"/fullstack/decode-es-modules","tags":["concept","ESM","static-analysis","Tree-Shaking","circular-dependency"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/decode-es-modules.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md"}'),p={name:"fullstack/decode-es-modules.md"};function h(k,s,e,t,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

回归标准,拥抱原生:ES Modules 核心规范与实践解析

如果说 CommonJS 是“草根英雄”,那么 ES Modules 就是“名门正派”。它是 ECMAScript 官方定义的模块系统,旨在为所有 JavaScript 环境提供统一、高效、且可静态分析的模块化方案。

理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。

1. 命名导出与导入:精准的代码引用

命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。

语法实践:

javascript
// math.js - 命名导出
 // 行内导出
 export const PI = 3.14159;
 
diff --git a/assets/fullstack_decode-es-modules.md.pgLSwKoE.lean.js b/assets/fullstack_decode-es-modules.md.CdNqd_Yi.lean.js
similarity index 95%
rename from assets/fullstack_decode-es-modules.md.pgLSwKoE.lean.js
rename to assets/fullstack_decode-es-modules.md.CdNqd_Yi.lean.js
index 9088e0e..240e33c 100644
--- a/assets/fullstack_decode-es-modules.md.pgLSwKoE.lean.js
+++ b/assets/fullstack_decode-es-modules.md.CdNqd_Yi.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","frontmatter":{"date":"2024-05-14T22:29:32.000Z","title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","tldr":"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","permalink":"/fullstack/decode-es-modules","tags":["concept","ESM","static-analysis","Tree-Shaking","circular-dependency"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/decode-es-modules.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md"}'),p={name:"fullstack/decode-es-modules.md"};function h(k,s,e,t,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",50)])])}const c=i(p,[["render",h]]);export{g as __pageData,c as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","frontmatter":{"date":"2024-05-14T22:29:32.000Z","title":"回归标准,拥抱原生:ES Modules 核心规范与实践解析","tldr":"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。","description":"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。","permalink":"/fullstack/decode-es-modules","tags":["concept","ESM","static-analysis","Tree-Shaking","circular-dependency"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/decode-es-modules.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md"}'),p={name:"fullstack/decode-es-modules.md"};function h(k,s,e,t,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",50)])])}const c=i(p,[["render",h]]);export{g as __pageData,c as default};
diff --git a/assets/fullstack_different-module-programming-specifications.md.B-OI3QLK.js b/assets/fullstack_different-module-programming-specifications.md.C4s6GPsc.js
similarity index 99%
rename from assets/fullstack_different-module-programming-specifications.md.B-OI3QLK.js
rename to assets/fullstack_different-module-programming-specifications.md.C4s6GPsc.js
index 98de7ed..6ad744a 100644
--- a/assets/fullstack_different-module-programming-specifications.md.B-OI3QLK.js
+++ b/assets/fullstack_different-module-programming-specifications.md.C4s6GPsc.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","frontmatter":{"date":"2024-05-14T22:26:06.000Z","title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","tldr":"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","permalink":"/fullstack/different-module-programming-specifications","tags":["tutorial","CommonJS","AMD","UMD","ESM"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/different-module-programming-specifications.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md"}'),l={name:"fullstack/different-module-programming-specifications.md"};function h(p,s,k,e,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

JavaScript 模块化规范全景图:从 CJS 到 ESM

摘要总结: 本文横向对比 JavaScript 四大模块化规范:CommonJS、AMD、UMD、ES Modules。通过代码示例展示各规范的核心语法,并提供从 CommonJS 迁移到 ESM 的具体步骤,以及从 AMD 向 ESM 迁移的构建工具策略。最后以对比表格收尾,阐明 ESM 作为现代开发唯一推荐标准的地位。

在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。

本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。

1. CommonJS 规范:Node.js 生态的基石

CommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.js 成功的关键因素之一,在它出现之前,JavaScript 缺乏在服务器端运行所需的组织结构。它规定每个文件都是一个独立的模块,拥有私有的作用域,不会污染全局空间。

核心逻辑:

  • 导出:通过 module.exportsexports 对象暴露成员。
  • 导入:使用同步的 require() 函数加载模块。

示例代码:

javascript
// 导出模块(module.exports)
+import{_ as i,c as a,o as n,d as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","frontmatter":{"date":"2024-05-14T22:26:06.000Z","title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","tldr":"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","permalink":"/fullstack/different-module-programming-specifications","tags":["tutorial","CommonJS","AMD","UMD","ESM"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/different-module-programming-specifications.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md"}'),l={name:"fullstack/different-module-programming-specifications.md"};function h(p,s,k,e,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t(`

JavaScript 模块化规范全景图:从 CJS 到 ESM

摘要总结: 本文横向对比 JavaScript 四大模块化规范:CommonJS、AMD、UMD、ES Modules。通过代码示例展示各规范的核心语法,并提供从 CommonJS 迁移到 ESM 的具体步骤,以及从 AMD 向 ESM 迁移的构建工具策略。最后以对比表格收尾,阐明 ESM 作为现代开发唯一推荐标准的地位。

在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。

本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。

1. CommonJS 规范:Node.js 生态的基石

CommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.js 成功的关键因素之一,在它出现之前,JavaScript 缺乏在服务器端运行所需的组织结构。它规定每个文件都是一个独立的模块,拥有私有的作用域,不会污染全局空间。

核心逻辑:

  • 导出:通过 module.exportsexports 对象暴露成员。
  • 导入:使用同步的 require() 函数加载模块。

示例代码:

javascript
// 导出模块(module.exports)
 const add = (a, b) => a + b;
 const subtract = (a, b) => a - b;
 
diff --git a/assets/fullstack_different-module-programming-specifications.md.B-OI3QLK.lean.js b/assets/fullstack_different-module-programming-specifications.md.C4s6GPsc.lean.js
similarity index 95%
rename from assets/fullstack_different-module-programming-specifications.md.B-OI3QLK.lean.js
rename to assets/fullstack_different-module-programming-specifications.md.C4s6GPsc.lean.js
index 79c8008..29a798f 100644
--- a/assets/fullstack_different-module-programming-specifications.md.B-OI3QLK.lean.js
+++ b/assets/fullstack_different-module-programming-specifications.md.C4s6GPsc.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","frontmatter":{"date":"2024-05-14T22:26:06.000Z","title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","tldr":"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","permalink":"/fullstack/different-module-programming-specifications","tags":["tutorial","CommonJS","AMD","UMD","ESM"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/different-module-programming-specifications.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md"}'),l={name:"fullstack/different-module-programming-specifications.md"};function h(p,s,k,e,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",41)])])}const o=i(l,[["render",h]]);export{g as __pageData,o as default};
+import{_ as i,c as a,o as n,d as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","frontmatter":{"date":"2024-05-14T22:26:06.000Z","title":"JavaScript 模块化规范全景图:从 CJS 到 ESM","tldr":"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。","description":"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。","permalink":"/fullstack/different-module-programming-specifications","tags":["tutorial","CommonJS","AMD","UMD","ESM"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/different-module-programming-specifications.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md"}'),l={name:"fullstack/different-module-programming-specifications.md"};function h(p,s,k,e,r,d){return n(),a("div",null,[...s[0]||(s[0]=[t("",41)])])}const o=i(l,[["render",h]]);export{g as __pageData,o as default};
diff --git a/assets/fullstack_frontend-module-programming-basic.md.C-EsOJPG.js b/assets/fullstack_frontend-module-programming-basic.md.BASiLfEG.js
similarity index 99%
rename from assets/fullstack_frontend-module-programming-basic.md.C-EsOJPG.js
rename to assets/fullstack_frontend-module-programming-basic.md.BASiLfEG.js
index 9866148..ac0e29d 100644
--- a/assets/fullstack_frontend-module-programming-basic.md.C-EsOJPG.js
+++ b/assets/fullstack_frontend-module-programming-basic.md.BASiLfEG.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"模块化编程初体验:概念、演进与设计模式","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","frontmatter":{"date":"2024-05-12T22:43:28.000Z","title":"模块化编程初体验:概念、演进与设计模式","tldr":"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","permalink":"/fullstack/frontend-module-programming-basic","tags":["tutorial","javascript","modularization","esm","design-patterns"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/frontend-module-programming-basic.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md"}'),h={name:"fullstack/frontend-module-programming-basic.md"};function p(t,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

模块化编程初体验:概念、演进与设计模式

摘要总结: 本文系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。从模块化的核心痛点出发——全局变量污染、依赖关系混乱、加载性能瓶颈——逐步展开模块化编程的知识图谱。实践层面结合工厂模式(批量创建相似对象)、单例模式(全局唯一实例,如数据库连接)、观察者/发布订阅模式(模块间松耦合通信)三种经典设计模式,展示模块化与设计模式的有机结合。

1. 引言

随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。

它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。

2. 模块化编程初体验

在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:

javascript
// math.js - 定义一个数学工具模块
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"模块化编程初体验:概念、演进与设计模式","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","frontmatter":{"date":"2024-05-12T22:43:28.000Z","title":"模块化编程初体验:概念、演进与设计模式","tldr":"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","permalink":"/fullstack/frontend-module-programming-basic","tags":["tutorial","javascript","modularization","esm","design-patterns"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/frontend-module-programming-basic.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md"}'),h={name:"fullstack/frontend-module-programming-basic.md"};function p(t,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

模块化编程初体验:概念、演进与设计模式

摘要总结: 本文系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。从模块化的核心痛点出发——全局变量污染、依赖关系混乱、加载性能瓶颈——逐步展开模块化编程的知识图谱。实践层面结合工厂模式(批量创建相似对象)、单例模式(全局唯一实例,如数据库连接)、观察者/发布订阅模式(模块间松耦合通信)三种经典设计模式,展示模块化与设计模式的有机结合。

1. 引言

随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。

它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。

2. 模块化编程初体验

在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:

javascript
// math.js - 定义一个数学工具模块
 export const PI = 3.14159;
 
 export function add(a, b) {
diff --git a/assets/fullstack_frontend-module-programming-basic.md.C-EsOJPG.lean.js b/assets/fullstack_frontend-module-programming-basic.md.BASiLfEG.lean.js
similarity index 95%
rename from assets/fullstack_frontend-module-programming-basic.md.C-EsOJPG.lean.js
rename to assets/fullstack_frontend-module-programming-basic.md.BASiLfEG.lean.js
index c7d2456..db39434 100644
--- a/assets/fullstack_frontend-module-programming-basic.md.C-EsOJPG.lean.js
+++ b/assets/fullstack_frontend-module-programming-basic.md.BASiLfEG.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"模块化编程初体验:概念、演进与设计模式","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","frontmatter":{"date":"2024-05-12T22:43:28.000Z","title":"模块化编程初体验:概念、演进与设计模式","tldr":"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","permalink":"/fullstack/frontend-module-programming-basic","tags":["tutorial","javascript","modularization","esm","design-patterns"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/frontend-module-programming-basic.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md"}'),h={name:"fullstack/frontend-module-programming-basic.md"};function p(t,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",38)])])}const y=i(h,[["render",p]]);export{g as __pageData,y as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"模块化编程初体验:概念、演进与设计模式","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","frontmatter":{"date":"2024-05-12T22:43:28.000Z","title":"模块化编程初体验:概念、演进与设计模式","tldr":"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。","description":"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。","permalink":"/fullstack/frontend-module-programming-basic","tags":["tutorial","javascript","modularization","esm","design-patterns"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/frontend-module-programming-basic.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md"}'),h={name:"fullstack/frontend-module-programming-basic.md"};function p(t,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",38)])])}const y=i(h,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/fullstack_frontend-rendering-scheme.md.B1Gs9imT.js b/assets/fullstack_frontend-rendering-scheme.md.DbEMkvmS.js
similarity index 99%
rename from assets/fullstack_frontend-rendering-scheme.md.B1Gs9imT.js
rename to assets/fullstack_frontend-rendering-scheme.md.DbEMkvmS.js
index cd4feaa..eff7164 100644
--- a/assets/fullstack_frontend-rendering-scheme.md.B1Gs9imT.js
+++ b/assets/fullstack_frontend-rendering-scheme.md.DbEMkvmS.js
@@ -1,4 +1,4 @@
-import{f as P,c as e,g as o,o as t,a as s,t as r,F as k,m as u,_ as R,n as S,e as l,d as b,b as d}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";import{F as y}from"./chunks/FeatureGrid.C9SUnqP9.js";import{C as _}from"./chunks/ConceptPair.DYvaVmrQ.js";/* empty css                                                                           */const x={key:0,class:"pros-cons"},v={key:0,class:"pros-cons-title"},T={class:"pros-cons-grid"},C={key:0,class:"pros-column"},I={class:"column-header pros-header"},f={class:"column-label"},V={class:"column-count"},q={class:"column-body"},L={class:"item-content"},G={class:"item-text"},M={key:0,class:"item-detail"},A={key:1,class:"cons-column"},H={class:"column-header cons-header"},N={class:"column-label"},D={class:"column-count"},O={class:"column-body"},w={class:"item-content"},B={class:"item-text"},$={key:0,class:"item-detail"},J=P({__name:"ProsCons",props:{title:{},pros:{},cons:{},prosLabel:{},consLabel:{}},setup(i){return(E,n)=>i.pros.length||i.cons.length?(t(),e("div",x,[i.title?(t(),e("div",v,r(i.title),1)):o("",!0),s("div",T,[i.pros.length?(t(),e("div",C,[s("div",I,[n[0]||(n[0]=s("span",{class:"column-icon"},"✓",-1)),s("span",f,r(i.prosLabel||"优点"),1),s("span",V,r(i.pros.length),1)]),s("div",q,[(t(!0),e(k,null,u(i.pros,(c,a)=>(t(),e("div",{key:a,class:"item-card pros-item"},[n[1]||(n[1]=s("span",{class:"item-icon"},"✓",-1)),s("div",L,[s("span",G,r(c.text),1),c.detail?(t(),e("span",M,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0),i.cons.length?(t(),e("div",A,[s("div",H,[n[2]||(n[2]=s("span",{class:"column-icon"},"✗",-1)),s("span",N,r(i.consLabel||"缺点"),1),s("span",D,r(i.cons.length),1)]),s("div",O,[(t(!0),e(k,null,u(i.cons,(c,a)=>(t(),e("div",{key:a,class:"item-card cons-item"},[n[3]||(n[3]=s("span",{class:"item-icon"},"✗",-1)),s("div",w,[s("span",B,r(c.text),1),c.detail?(t(),e("span",$,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0)])])):o("",!0)}}),h=R(J,[["__scopeId","data-v-460aa07a"]]),F={key:0,class:"comparison-card"},j={key:0,class:"comparison-title"},U={class:"comparison-table"},z={class:"comparison-header"},W={class:"option-name"},K={key:0,class:"option-tag"},Z={class:"row-dimension"},Q={key:0,class:"best-badge"},X=["aria-label"],Y=["innerHTML"],ss={class:"comparison-cards"},ns={class:"mobile-dimension"},as={key:0,class:"best-badge"},es={class:"mobile-option-label"},ts=["aria-label"],is=["innerHTML"],ls=P({__name:"ComparisonCard",props:{title:{},options:{},rows:{}},setup(i){function E(n){const c="★".repeat(n),a="☆".repeat(5-n);return c+a}return(n,c)=>i.options.length>=2?(t(),e("div",F,[i.title?(t(),e("div",j,r(i.title),1)):o("",!0),s("div",U,[s("div",z,[c[0]||(c[0]=s("div",{class:"header-dimension"},"维度",-1)),(t(!0),e(k,null,u(i.options,(a,g)=>(t(),e("div",{key:g,class:S(["header-option",{"is-highlighted":a.highlight}])},[s("span",W,r(a.name),1),a.tag?(t(),e("span",K,r(a.tag),1)):o("",!0)],2))),128))]),(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"comparison-row"},[s("div",Z,[s("span",null,r(a.dimension),1),a.bestIndex!==void 0?(t(),e("span",Q,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["row-value",{"is-best":a.bestIndex===p}])},[a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,X)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,Y)):o("",!0)],2))),128))]))),128))]),s("div",ss,[(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"mobile-row-card"},[s("div",ns,[l(r(a.dimension)+" ",1),a.bestIndex!==void 0?(t(),e("span",as,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["mobile-value",{"is-best":a.bestIndex===p}])},[s("span",es,r(m.name),1),a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,ts)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,is)):o("",!0)],2))),128))]))),128))])])):o("",!0)}}),rs=R(ls,[["__scopeId","data-v-0e4c55b1"]]),bs=JSON.parse('{"title":"前端渲染方案选型指南:从 CSR 到 PPR","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","frontmatter":{"date":"2025-12-20T07:05:50.000Z","title":"前端渲染方案选型指南:从 CSR 到 PPR","tldr":"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","category":["全栈"],"tags":["CSR","SSR","SSG","ISR","PPR","VitePress"],"permalink":"/fullstack/frontend-rendering-scheme","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/frontend-rendering-scheme.md","filePath":"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md"}'),ps={name:"fullstack/frontend-rendering-scheme.md"},ks=Object.assign(ps,{setup(i){return(E,n)=>(t(),e("div",null,[n[0]||(n[0]=b(`

前端渲染方案选型指南:从 CSR 到 PPR

摘要总结:针对前端渲染方案选型难题,系统解析 CSR、SSR、SSG、ISR、PPR 五种方案的核心原理、优缺点与适用场景,提出“构建时机选择 × 渲染位置选择”的分析框架。通过对比性能、实时性、SEO、架构复杂度四个维度,构建选型决策树,并以 VitePress 为例展示 SSG 的落地实践。总结出不同业务场景下的最优渲染策略,为前端架构决策提供参考。

1. 引言

一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:

提示

"构建 → 部署 → 请求 → 渲染",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择

1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。

2、部署:将构建产物部署到服务器,使其可以通过网络访问。

3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。

4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。

上述流程中,"构建"和"渲染"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题——CSR、SSR、SSG 以及 ISR 四种方案各自的原理、适用场景以及如何选型。

2. CSR 渲染方案

CSR(Client-Side Rendering,客户端渲染)将整个渲染过程放在浏览器端完成,是单页应用(SPA)最典型的渲染方式。服务器只返回一个近乎空的 HTML 框架和一份 JavaScript Bundle,页面内容的生成与渲染完全由客户端 JS 驱动。

核心原理

服务端仅返回基础 HTML(无实际内容)和 JS Bundle,客户端完成 DOM 构建与渲染,例如 React 的 createRoot().render() 或 Vue 的 createApp().mount()

markdown
用户访问 URL
+import{f as P,c as e,g as o,o as t,a as s,t as r,F as k,m as u,_ as R,n as S,e as l,d as b,b as d}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";import{F as y}from"./chunks/FeatureGrid.LE2S2SBN.js";import{C as _}from"./chunks/ConceptPair.CDPz5jW2.js";/* empty css                                                                           */const x={key:0,class:"pros-cons"},v={key:0,class:"pros-cons-title"},T={class:"pros-cons-grid"},C={key:0,class:"pros-column"},I={class:"column-header pros-header"},f={class:"column-label"},V={class:"column-count"},q={class:"column-body"},L={class:"item-content"},G={class:"item-text"},M={key:0,class:"item-detail"},A={key:1,class:"cons-column"},H={class:"column-header cons-header"},N={class:"column-label"},D={class:"column-count"},O={class:"column-body"},w={class:"item-content"},B={class:"item-text"},$={key:0,class:"item-detail"},J=P({__name:"ProsCons",props:{title:{},pros:{},cons:{},prosLabel:{},consLabel:{}},setup(i){return(E,n)=>i.pros.length||i.cons.length?(t(),e("div",x,[i.title?(t(),e("div",v,r(i.title),1)):o("",!0),s("div",T,[i.pros.length?(t(),e("div",C,[s("div",I,[n[0]||(n[0]=s("span",{class:"column-icon"},"✓",-1)),s("span",f,r(i.prosLabel||"优点"),1),s("span",V,r(i.pros.length),1)]),s("div",q,[(t(!0),e(k,null,u(i.pros,(c,a)=>(t(),e("div",{key:a,class:"item-card pros-item"},[n[1]||(n[1]=s("span",{class:"item-icon"},"✓",-1)),s("div",L,[s("span",G,r(c.text),1),c.detail?(t(),e("span",M,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0),i.cons.length?(t(),e("div",A,[s("div",H,[n[2]||(n[2]=s("span",{class:"column-icon"},"✗",-1)),s("span",N,r(i.consLabel||"缺点"),1),s("span",D,r(i.cons.length),1)]),s("div",O,[(t(!0),e(k,null,u(i.cons,(c,a)=>(t(),e("div",{key:a,class:"item-card cons-item"},[n[3]||(n[3]=s("span",{class:"item-icon"},"✗",-1)),s("div",w,[s("span",B,r(c.text),1),c.detail?(t(),e("span",$,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0)])])):o("",!0)}}),h=R(J,[["__scopeId","data-v-460aa07a"]]),F={key:0,class:"comparison-card"},j={key:0,class:"comparison-title"},U={class:"comparison-table"},z={class:"comparison-header"},W={class:"option-name"},K={key:0,class:"option-tag"},Z={class:"row-dimension"},Q={key:0,class:"best-badge"},X=["aria-label"],Y=["innerHTML"],ss={class:"comparison-cards"},ns={class:"mobile-dimension"},as={key:0,class:"best-badge"},es={class:"mobile-option-label"},ts=["aria-label"],is=["innerHTML"],ls=P({__name:"ComparisonCard",props:{title:{},options:{},rows:{}},setup(i){function E(n){const c="★".repeat(n),a="☆".repeat(5-n);return c+a}return(n,c)=>i.options.length>=2?(t(),e("div",F,[i.title?(t(),e("div",j,r(i.title),1)):o("",!0),s("div",U,[s("div",z,[c[0]||(c[0]=s("div",{class:"header-dimension"},"维度",-1)),(t(!0),e(k,null,u(i.options,(a,g)=>(t(),e("div",{key:g,class:S(["header-option",{"is-highlighted":a.highlight}])},[s("span",W,r(a.name),1),a.tag?(t(),e("span",K,r(a.tag),1)):o("",!0)],2))),128))]),(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"comparison-row"},[s("div",Z,[s("span",null,r(a.dimension),1),a.bestIndex!==void 0?(t(),e("span",Q,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["row-value",{"is-best":a.bestIndex===p}])},[a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,X)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,Y)):o("",!0)],2))),128))]))),128))]),s("div",ss,[(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"mobile-row-card"},[s("div",ns,[l(r(a.dimension)+" ",1),a.bestIndex!==void 0?(t(),e("span",as,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["mobile-value",{"is-best":a.bestIndex===p}])},[s("span",es,r(m.name),1),a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,ts)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,is)):o("",!0)],2))),128))]))),128))])])):o("",!0)}}),rs=R(ls,[["__scopeId","data-v-0e4c55b1"]]),bs=JSON.parse('{"title":"前端渲染方案选型指南:从 CSR 到 PPR","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","frontmatter":{"date":"2025-12-20T07:05:50.000Z","title":"前端渲染方案选型指南:从 CSR 到 PPR","tldr":"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","category":["全栈"],"tags":["CSR","SSR","SSG","ISR","PPR","VitePress"],"permalink":"/fullstack/frontend-rendering-scheme","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/frontend-rendering-scheme.md","filePath":"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md"}'),ps={name:"fullstack/frontend-rendering-scheme.md"},ks=Object.assign(ps,{setup(i){return(E,n)=>(t(),e("div",null,[n[0]||(n[0]=b(`

前端渲染方案选型指南:从 CSR 到 PPR

摘要总结:针对前端渲染方案选型难题,系统解析 CSR、SSR、SSG、ISR、PPR 五种方案的核心原理、优缺点与适用场景,提出“构建时机选择 × 渲染位置选择”的分析框架。通过对比性能、实时性、SEO、架构复杂度四个维度,构建选型决策树,并以 VitePress 为例展示 SSG 的落地实践。总结出不同业务场景下的最优渲染策略,为前端架构决策提供参考。

1. 引言

一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:

提示

"构建 → 部署 → 请求 → 渲染",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择

1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。

2、部署:将构建产物部署到服务器,使其可以通过网络访问。

3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。

4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。

上述流程中,"构建"和"渲染"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题——CSR、SSR、SSG 以及 ISR 四种方案各自的原理、适用场景以及如何选型。

2. CSR 渲染方案

CSR(Client-Side Rendering,客户端渲染)将整个渲染过程放在浏览器端完成,是单页应用(SPA)最典型的渲染方式。服务器只返回一个近乎空的 HTML 框架和一份 JavaScript Bundle,页面内容的生成与渲染完全由客户端 JS 驱动。

核心原理

服务端仅返回基础 HTML(无实际内容)和 JS Bundle,客户端完成 DOM 构建与渲染,例如 React 的 createRoot().render() 或 Vue 的 createApp().mount()

markdown
用户访问 URL
 
 服务器返回:空 HTML 骨架(通常只有 <div id="app"></div>)
 
diff --git a/assets/fullstack_frontend-rendering-scheme.md.B1Gs9imT.lean.js b/assets/fullstack_frontend-rendering-scheme.md.DbEMkvmS.lean.js
similarity index 99%
rename from assets/fullstack_frontend-rendering-scheme.md.B1Gs9imT.lean.js
rename to assets/fullstack_frontend-rendering-scheme.md.DbEMkvmS.lean.js
index f5e7f7d..fe8003b 100644
--- a/assets/fullstack_frontend-rendering-scheme.md.B1Gs9imT.lean.js
+++ b/assets/fullstack_frontend-rendering-scheme.md.DbEMkvmS.lean.js
@@ -1 +1 @@
-import{f as P,c as e,g as o,o as t,a as s,t as r,F as k,m as u,_ as R,n as S,e as l,d as b,b as d}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";import{F as y}from"./chunks/FeatureGrid.C9SUnqP9.js";import{C as _}from"./chunks/ConceptPair.DYvaVmrQ.js";/* empty css                                                                           */const x={key:0,class:"pros-cons"},v={key:0,class:"pros-cons-title"},T={class:"pros-cons-grid"},C={key:0,class:"pros-column"},I={class:"column-header pros-header"},f={class:"column-label"},V={class:"column-count"},q={class:"column-body"},L={class:"item-content"},G={class:"item-text"},M={key:0,class:"item-detail"},A={key:1,class:"cons-column"},H={class:"column-header cons-header"},N={class:"column-label"},D={class:"column-count"},O={class:"column-body"},w={class:"item-content"},B={class:"item-text"},$={key:0,class:"item-detail"},J=P({__name:"ProsCons",props:{title:{},pros:{},cons:{},prosLabel:{},consLabel:{}},setup(i){return(E,n)=>i.pros.length||i.cons.length?(t(),e("div",x,[i.title?(t(),e("div",v,r(i.title),1)):o("",!0),s("div",T,[i.pros.length?(t(),e("div",C,[s("div",I,[n[0]||(n[0]=s("span",{class:"column-icon"},"✓",-1)),s("span",f,r(i.prosLabel||"优点"),1),s("span",V,r(i.pros.length),1)]),s("div",q,[(t(!0),e(k,null,u(i.pros,(c,a)=>(t(),e("div",{key:a,class:"item-card pros-item"},[n[1]||(n[1]=s("span",{class:"item-icon"},"✓",-1)),s("div",L,[s("span",G,r(c.text),1),c.detail?(t(),e("span",M,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0),i.cons.length?(t(),e("div",A,[s("div",H,[n[2]||(n[2]=s("span",{class:"column-icon"},"✗",-1)),s("span",N,r(i.consLabel||"缺点"),1),s("span",D,r(i.cons.length),1)]),s("div",O,[(t(!0),e(k,null,u(i.cons,(c,a)=>(t(),e("div",{key:a,class:"item-card cons-item"},[n[3]||(n[3]=s("span",{class:"item-icon"},"✗",-1)),s("div",w,[s("span",B,r(c.text),1),c.detail?(t(),e("span",$,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0)])])):o("",!0)}}),h=R(J,[["__scopeId","data-v-460aa07a"]]),F={key:0,class:"comparison-card"},j={key:0,class:"comparison-title"},U={class:"comparison-table"},z={class:"comparison-header"},W={class:"option-name"},K={key:0,class:"option-tag"},Z={class:"row-dimension"},Q={key:0,class:"best-badge"},X=["aria-label"],Y=["innerHTML"],ss={class:"comparison-cards"},ns={class:"mobile-dimension"},as={key:0,class:"best-badge"},es={class:"mobile-option-label"},ts=["aria-label"],is=["innerHTML"],ls=P({__name:"ComparisonCard",props:{title:{},options:{},rows:{}},setup(i){function E(n){const c="★".repeat(n),a="☆".repeat(5-n);return c+a}return(n,c)=>i.options.length>=2?(t(),e("div",F,[i.title?(t(),e("div",j,r(i.title),1)):o("",!0),s("div",U,[s("div",z,[c[0]||(c[0]=s("div",{class:"header-dimension"},"维度",-1)),(t(!0),e(k,null,u(i.options,(a,g)=>(t(),e("div",{key:g,class:S(["header-option",{"is-highlighted":a.highlight}])},[s("span",W,r(a.name),1),a.tag?(t(),e("span",K,r(a.tag),1)):o("",!0)],2))),128))]),(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"comparison-row"},[s("div",Z,[s("span",null,r(a.dimension),1),a.bestIndex!==void 0?(t(),e("span",Q,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["row-value",{"is-best":a.bestIndex===p}])},[a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,X)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,Y)):o("",!0)],2))),128))]))),128))]),s("div",ss,[(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"mobile-row-card"},[s("div",ns,[l(r(a.dimension)+" ",1),a.bestIndex!==void 0?(t(),e("span",as,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["mobile-value",{"is-best":a.bestIndex===p}])},[s("span",es,r(m.name),1),a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,ts)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,is)):o("",!0)],2))),128))]))),128))])])):o("",!0)}}),rs=R(ls,[["__scopeId","data-v-0e4c55b1"]]),bs=JSON.parse('{"title":"前端渲染方案选型指南:从 CSR 到 PPR","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","frontmatter":{"date":"2025-12-20T07:05:50.000Z","title":"前端渲染方案选型指南:从 CSR 到 PPR","tldr":"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","category":["全栈"],"tags":["CSR","SSR","SSG","ISR","PPR","VitePress"],"permalink":"/fullstack/frontend-rendering-scheme","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/frontend-rendering-scheme.md","filePath":"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md"}'),ps={name:"fullstack/frontend-rendering-scheme.md"},ks=Object.assign(ps,{setup(i){return(E,n)=>(t(),e("div",null,[n[0]||(n[0]=b("",16)),d(h,{pros:[{text:"首屏之后交互流畅",detail:"适合复杂交互场景"},{text:"前端独立开发",detail:"服务端只需提供数据接口(API)"}],cons:[{text:"首屏加载慢",detail:"用户必须等待 JS 下载、执行完成后才能看到内容"},{text:"SEO 不友好",detail:"搜索引擎爬虫抓取到的 HTML 没有实际内容"}]}),n[1]||(n[1]=s("h3",{id:"适用与不适用场景",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[2]||(n[2]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(':CSR 以"初始白屏"为代价,换取首屏之后的流畅交互体验。FCP(首次内容绘制)完全取决于 JS Bundle 的下载与执行速度。对于任何面向用户、首屏体验重要的场景,通常不是最优选择。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"需要登录的后台管理系统",detail:"SEO 无关,首屏要求不高"},{text:"内部工具类应用"},{text:"高交互富应用",detail:"如 Figma、Google Docs 等"}],cons:[{text:"需要良好 SEO 的内容型网站",detail:"博客、官网、电商详情页等"},{text:"首屏体验重要的面向用户的产品"}]}),n[3]||(n[3]=b("",7)),d(h,{pros:[{text:"首屏快",detail:"服务器返回的 HTML 已包含完整内容,浏览器可直接呈现"},{text:"SEO 友好",detail:"搜索引擎爬虫能抓取到完整内容"}],cons:[{text:"服务器压力大",detail:"每个请求都需要服务器实时渲染,增加计算开销"},{text:"TTI 可能延迟",detail:"页面虽已可见,但需等待 JS 水合完成后才可交互"}]}),n[4]||(n[4]=s("h3",{id:"适用与不适用场景-1",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-1","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[5]||(n[5]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(":SSR 以"),s("strong",null,"服务器实时渲染"),l('为代价,换取首屏速度和 SEO 效果。水合过程完成后用户体验与 CSR 无异,但水合本身也是一次额外的性能开销,需注意避免"水合延迟"问题。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"内容型网站",detail:"博客、新闻站、文档站"},{text:"需要良好 SEO 的营销落地页"},{text:"需要首屏快速呈现的面向用户的产品"}],cons:[{text:"高度交互的富应用",detail:"后台系统、数据可视化平台"},{text:"请求量极大、服务器成本敏感的高流量场景"},{text:"强依赖客户端个性化数据的页面"}]}),n[6]||(n[6]=b("",7)),d(h,{pros:[{text:"性能极高",detail:"HTML 来自 CDN 缓存或直接文件系统读取,无需服务器计算"},{text:"安全性好",detail:"纯静态文件,无服务端代码执行面"},{text:"SEO 友好",detail:"搜索引擎抓取到完整内容"}],cons:[{text:"数据更新需重新构建",detail:"内容变更必须重新触发构建"},{text:"不适用于数据频繁变化的场景",detail:"每次更新都要全量重新生成"}]}),n[7]||(n[7]=s("h3",{id:"适用与不适用场景-2",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-2","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[8]||(n[8]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(':SSG 以"'),s("strong",null,"放弃实时渲染能力"),l('"为代价,换取极高的加载性能和服务器端的安全性、稳定性。适合内容相对固定、以阅读为主的场景。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"文档站",detail:"GitBook、VitePress、Docusaurus"},{text:"营销落地页、产品官网"},{text:"博客、个人站点等内容相对稳定的网站"}],cons:[{text:"数据频繁更新的页面",detail:"如股票行情、实时数据看板"},{text:"需要根据用户身份个性化展示的内容"},{text:"页面数量极多且无法穷举的场景",detail:"如电商搜索结果页"}]}),n[9]||(n[9]=b("",13)),d(h,{pros:[{text:"保留 SSG 的性能优势",detail:"缓存命中时页面加载极快,无服务器动态计算"},{text:"支持内容更新",detail:"无需全站重新构建,页面可自动或手动刷新"},{text:"适合大型站点",detail:"无需在构建时穷举所有页面,边际成本低"},{text:"灵活的更新策略",detail:"按路由周期失效和按需失效可组合使用"}],cons:[{text:"数据更新有延迟",detail:"取决于 revalidate 周期设置,周期太长则内容不及时"},{text:"架构复杂度较高",detail:"需要理解缓存策略与失效机制的配合"},{text:"不适合极强实时性要求的场景",detail:"如股票行情、实时水位等毫秒级数据"}]}),n[10]||(n[10]=s("h3",{id:"适用与不适用场景-3",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-3","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[11]||(n[11]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(':ISR 以"'),s("strong",null,"放弃绝对实时性"),l('"为代价,在 SSG 的高性能与 SSR 的灵活性之间取得平衡。'),s("strong",null,"适合那些内容需要更新、但更新频率不至于需要每次请求都实时渲染的场景"),l('。它将构建时生成的静态页面从"一次性产物"变成了"可持续更新的缓存资产"。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"电商商品详情页、分类列表",detail:"数据更新频繁但非实时"},{text:"资讯文章列表和详情页",detail:"CMS 更新后按需刷新"},{text:"页面数量庞大、无法全部构建的大型内容站"},{text:"需要良好 SEO 且首屏性能要求高的页面"}],cons:[{text:"对数据实时性要求极高的场景",detail:"股票、外汇、实时监控面板"},{text:"完全个性化、千人千面的页面",detail:"每次请求内容均不同"},{text:"数据完全公开但更新极频繁且不能有任何延迟的页面"}]}),n[12]||(n[12]=b("",7)),d(_,{title:"PPR 核心二分法",left:{label:"静态外壳",description:"不涉及动态数据的组件",points:["页面布局骨架","导航栏、页脚","文章正文框架","一次渲染即返回"]},right:{label:"动态组件",description:"依赖个性化数据的组件",points:["用户头像、评论列表","点赞数、推荐内容","独立流式渲染","逐步填充占位符"]},connector:"+"}),n[13]||(n[13]=b("",2)),d(rs,{title:"ISR vs PPR 对比",options:[{name:"ISR"},{name:"PPR",highlight:!0}],rows:[{dimension:"混合粒度",values:["页面级别——整页一起缓存/失效","组件级别——不同组件独立缓存/流式渲染"],bestIndex:1},{dimension:"缓存策略",values:["按页面整体缓存,存在统一 revalidate 周期","静态外壳和动态组件各有独立的缓存语义"],bestIndex:1},{dimension:"渲染时机",values:["首次访问时生成静态版本,后续复用","静态外壳每次请求实时渲染,动态组件独立流式"]},{dimension:"内容新鲜度",values:["依赖 revalidate 周期,有一定延迟","静态外壳每次请求新渲染,内容始终最新"],bestIndex:1}]}),n[14]||(n[14]=s("p",null,"PPR 可以看作是 ISR 思想的进一步细化——ISR 把整页当作一个整体进行增量更新,PPR 将渲染策略拆分到组件级别,让静态内容与动态内容各取所需。",-1)),n[15]||(n[15]=s("blockquote",null,[s("p",null,[s("strong",null,"注"),l(":PPR 的概念最早由 Next.js 14 提出并实现,随后被其他框架逐步借鉴。当前生产级实现仍以 Next.js 为主,但其核心机制(静态外壳 + 流式动态组件)是一种与框架无关的渲染思想。")])],-1)),n[16]||(n[16]=s("h3",{id:"优缺点-4",tabindex:"-1"},[l("优缺点 "),s("a",{class:"header-anchor",href:"#优缺点-4","aria-label":"Permalink to “优缺点”"},"​")],-1)),d(h,{pros:[{text:"首屏极快",detail:"静态外壳无任何动态延迟,页面框架立即呈现"},{text:"动态内容无缝加载",detail:"占位符逐步填充,用户体验流畅"},{text:"组件级混合灵活性",detail:"开发者按组件粒度控制渲染策略,无需整页一刀切"},{text:"TTI 更优",detail:"HTTP 流式传输使页面可交互时间早于传统 SSR"}],cons:[{text:"需要框架深度支持",detail:"依赖流式渲染和组件级边界划分机制,配置门槛较高"},{text:"调试复杂度高",detail:"静态外壳和动态组件的边界设计需要谨慎规划"},{text:"属于前沿方案",detail:"各框架实现进度不一,API 稳定性仍在演进中"},{text:"过度工程化风险",detail:"对简单页面反而引入不必要的架构复杂度"}]}),n[17]||(n[17]=s("h3",{id:"适用与不适用场景-4",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-4","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[18]||(n[18]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(":PPR 以"),s("strong",null,"组件级拆分 + 流式渲染"),l('为手段,试图解决 SSR"等全部内容才呈现"和 SSG"动态内容必须等待构建"的固有矛盾。它代表了一种趋势——渲染策略从页面级别下沉到组件级别。但鉴于其前沿性,建议在非核心页面验证后再应用于生产环境。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"动态内容与静态内容交织的页面",detail:"如文章页:正文静态 + 评论/点赞动态"},{text:"需要快速首屏的仪表盘类页面",detail:"静态框架 + 数据卡片流式加载"},{text:"大型内容站中同时包含个性化推荐和公共内容的混合页面"},{text:"需要 SEO 同时又想优化可交互时间的复杂页面"}],cons:[{text:"页面结构简单、全部为静态内容的页面",detail:"SSG 足够,无需引入额外复杂度"},{text:"高度个性化、每个用户看到内容完全不同的页面",detail:"SSR 或 CSR 更合适"},{text:"追求框架 API 稳定性的生产环境项目",detail:"PPR 各框架实现进度不一"}]}),n[19]||(n[19]=b("",33)),d(y,{title:"VitePress SSG 三大支柱",items:[{icon:"⚙️",title:"构建时穷举",description:"构建阶段遍历所有 Markdown 文件,逐一编译为独立 .html 文件,无需服务端参与"},{icon:"⚡",title:"零运行时",description:"dist/ 为完全自包含的静态站点,运行时无数据库、无 API、无应用代码执行"},{icon:"🌐",title:"纯静态分发",description:"直接部署到 CDN,边缘节点就近响应,源站零计算,并发承载能力极高"}]}),n[20]||(n[20]=b("",38))]))}});export{bs as __pageData,ks as default};
+import{f as P,c as e,g as o,o as t,a as s,t as r,F as k,m as u,_ as R,n as S,e as l,d as b,b as d}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";import{F as y}from"./chunks/FeatureGrid.LE2S2SBN.js";import{C as _}from"./chunks/ConceptPair.CDPz5jW2.js";/* empty css                                                                           */const x={key:0,class:"pros-cons"},v={key:0,class:"pros-cons-title"},T={class:"pros-cons-grid"},C={key:0,class:"pros-column"},I={class:"column-header pros-header"},f={class:"column-label"},V={class:"column-count"},q={class:"column-body"},L={class:"item-content"},G={class:"item-text"},M={key:0,class:"item-detail"},A={key:1,class:"cons-column"},H={class:"column-header cons-header"},N={class:"column-label"},D={class:"column-count"},O={class:"column-body"},w={class:"item-content"},B={class:"item-text"},$={key:0,class:"item-detail"},J=P({__name:"ProsCons",props:{title:{},pros:{},cons:{},prosLabel:{},consLabel:{}},setup(i){return(E,n)=>i.pros.length||i.cons.length?(t(),e("div",x,[i.title?(t(),e("div",v,r(i.title),1)):o("",!0),s("div",T,[i.pros.length?(t(),e("div",C,[s("div",I,[n[0]||(n[0]=s("span",{class:"column-icon"},"✓",-1)),s("span",f,r(i.prosLabel||"优点"),1),s("span",V,r(i.pros.length),1)]),s("div",q,[(t(!0),e(k,null,u(i.pros,(c,a)=>(t(),e("div",{key:a,class:"item-card pros-item"},[n[1]||(n[1]=s("span",{class:"item-icon"},"✓",-1)),s("div",L,[s("span",G,r(c.text),1),c.detail?(t(),e("span",M,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0),i.cons.length?(t(),e("div",A,[s("div",H,[n[2]||(n[2]=s("span",{class:"column-icon"},"✗",-1)),s("span",N,r(i.consLabel||"缺点"),1),s("span",D,r(i.cons.length),1)]),s("div",O,[(t(!0),e(k,null,u(i.cons,(c,a)=>(t(),e("div",{key:a,class:"item-card cons-item"},[n[3]||(n[3]=s("span",{class:"item-icon"},"✗",-1)),s("div",w,[s("span",B,r(c.text),1),c.detail?(t(),e("span",$,r(c.detail),1)):o("",!0)])]))),128))])])):o("",!0)])])):o("",!0)}}),h=R(J,[["__scopeId","data-v-460aa07a"]]),F={key:0,class:"comparison-card"},j={key:0,class:"comparison-title"},U={class:"comparison-table"},z={class:"comparison-header"},W={class:"option-name"},K={key:0,class:"option-tag"},Z={class:"row-dimension"},Q={key:0,class:"best-badge"},X=["aria-label"],Y=["innerHTML"],ss={class:"comparison-cards"},ns={class:"mobile-dimension"},as={key:0,class:"best-badge"},es={class:"mobile-option-label"},ts=["aria-label"],is=["innerHTML"],ls=P({__name:"ComparisonCard",props:{title:{},options:{},rows:{}},setup(i){function E(n){const c="★".repeat(n),a="☆".repeat(5-n);return c+a}return(n,c)=>i.options.length>=2?(t(),e("div",F,[i.title?(t(),e("div",j,r(i.title),1)):o("",!0),s("div",U,[s("div",z,[c[0]||(c[0]=s("div",{class:"header-dimension"},"维度",-1)),(t(!0),e(k,null,u(i.options,(a,g)=>(t(),e("div",{key:g,class:S(["header-option",{"is-highlighted":a.highlight}])},[s("span",W,r(a.name),1),a.tag?(t(),e("span",K,r(a.tag),1)):o("",!0)],2))),128))]),(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"comparison-row"},[s("div",Z,[s("span",null,r(a.dimension),1),a.bestIndex!==void 0?(t(),e("span",Q,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["row-value",{"is-best":a.bestIndex===p}])},[a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,X)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,Y)):o("",!0)],2))),128))]))),128))]),s("div",ss,[(t(!0),e(k,null,u(i.rows,(a,g)=>(t(),e("div",{key:g,class:"mobile-row-card"},[s("div",ns,[l(r(a.dimension)+" ",1),a.bestIndex!==void 0?(t(),e("span",as,"best")):o("",!0)]),(t(!0),e(k,null,u(i.options,(m,p)=>(t(),e("div",{key:p,class:S(["mobile-value",{"is-best":a.bestIndex===p}])},[s("span",es,r(m.name),1),a.ratings&&a.ratings[p]!==void 0?(t(),e("span",{key:0,class:"stars","aria-label":`${a.ratings[p]} / 5`},r(E(a.ratings[p])),9,ts)):a.values&&a.values[p]!==void 0?(t(),e("span",{key:1,class:"value-text",innerHTML:a.values[p]},null,8,is)):o("",!0)],2))),128))]))),128))])])):o("",!0)}}),rs=R(ls,[["__scopeId","data-v-0e4c55b1"]]),bs=JSON.parse('{"title":"前端渲染方案选型指南:从 CSR 到 PPR","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","frontmatter":{"date":"2025-12-20T07:05:50.000Z","title":"前端渲染方案选型指南:从 CSR 到 PPR","tldr":"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。","description":"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。","category":["全栈"],"tags":["CSR","SSR","SSG","ISR","PPR","VitePress"],"permalink":"/fullstack/frontend-rendering-scheme","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/frontend-rendering-scheme.md","filePath":"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md"}'),ps={name:"fullstack/frontend-rendering-scheme.md"},ks=Object.assign(ps,{setup(i){return(E,n)=>(t(),e("div",null,[n[0]||(n[0]=b("",16)),d(h,{pros:[{text:"首屏之后交互流畅",detail:"适合复杂交互场景"},{text:"前端独立开发",detail:"服务端只需提供数据接口(API)"}],cons:[{text:"首屏加载慢",detail:"用户必须等待 JS 下载、执行完成后才能看到内容"},{text:"SEO 不友好",detail:"搜索引擎爬虫抓取到的 HTML 没有实际内容"}]}),n[1]||(n[1]=s("h3",{id:"适用与不适用场景",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[2]||(n[2]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(':CSR 以"初始白屏"为代价,换取首屏之后的流畅交互体验。FCP(首次内容绘制)完全取决于 JS Bundle 的下载与执行速度。对于任何面向用户、首屏体验重要的场景,通常不是最优选择。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"需要登录的后台管理系统",detail:"SEO 无关,首屏要求不高"},{text:"内部工具类应用"},{text:"高交互富应用",detail:"如 Figma、Google Docs 等"}],cons:[{text:"需要良好 SEO 的内容型网站",detail:"博客、官网、电商详情页等"},{text:"首屏体验重要的面向用户的产品"}]}),n[3]||(n[3]=b("",7)),d(h,{pros:[{text:"首屏快",detail:"服务器返回的 HTML 已包含完整内容,浏览器可直接呈现"},{text:"SEO 友好",detail:"搜索引擎爬虫能抓取到完整内容"}],cons:[{text:"服务器压力大",detail:"每个请求都需要服务器实时渲染,增加计算开销"},{text:"TTI 可能延迟",detail:"页面虽已可见,但需等待 JS 水合完成后才可交互"}]}),n[4]||(n[4]=s("h3",{id:"适用与不适用场景-1",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-1","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[5]||(n[5]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(":SSR 以"),s("strong",null,"服务器实时渲染"),l('为代价,换取首屏速度和 SEO 效果。水合过程完成后用户体验与 CSR 无异,但水合本身也是一次额外的性能开销,需注意避免"水合延迟"问题。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"内容型网站",detail:"博客、新闻站、文档站"},{text:"需要良好 SEO 的营销落地页"},{text:"需要首屏快速呈现的面向用户的产品"}],cons:[{text:"高度交互的富应用",detail:"后台系统、数据可视化平台"},{text:"请求量极大、服务器成本敏感的高流量场景"},{text:"强依赖客户端个性化数据的页面"}]}),n[6]||(n[6]=b("",7)),d(h,{pros:[{text:"性能极高",detail:"HTML 来自 CDN 缓存或直接文件系统读取,无需服务器计算"},{text:"安全性好",detail:"纯静态文件,无服务端代码执行面"},{text:"SEO 友好",detail:"搜索引擎抓取到完整内容"}],cons:[{text:"数据更新需重新构建",detail:"内容变更必须重新触发构建"},{text:"不适用于数据频繁变化的场景",detail:"每次更新都要全量重新生成"}]}),n[7]||(n[7]=s("h3",{id:"适用与不适用场景-2",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-2","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[8]||(n[8]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(':SSG 以"'),s("strong",null,"放弃实时渲染能力"),l('"为代价,换取极高的加载性能和服务器端的安全性、稳定性。适合内容相对固定、以阅读为主的场景。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"文档站",detail:"GitBook、VitePress、Docusaurus"},{text:"营销落地页、产品官网"},{text:"博客、个人站点等内容相对稳定的网站"}],cons:[{text:"数据频繁更新的页面",detail:"如股票行情、实时数据看板"},{text:"需要根据用户身份个性化展示的内容"},{text:"页面数量极多且无法穷举的场景",detail:"如电商搜索结果页"}]}),n[9]||(n[9]=b("",13)),d(h,{pros:[{text:"保留 SSG 的性能优势",detail:"缓存命中时页面加载极快,无服务器动态计算"},{text:"支持内容更新",detail:"无需全站重新构建,页面可自动或手动刷新"},{text:"适合大型站点",detail:"无需在构建时穷举所有页面,边际成本低"},{text:"灵活的更新策略",detail:"按路由周期失效和按需失效可组合使用"}],cons:[{text:"数据更新有延迟",detail:"取决于 revalidate 周期设置,周期太长则内容不及时"},{text:"架构复杂度较高",detail:"需要理解缓存策略与失效机制的配合"},{text:"不适合极强实时性要求的场景",detail:"如股票行情、实时水位等毫秒级数据"}]}),n[10]||(n[10]=s("h3",{id:"适用与不适用场景-3",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-3","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[11]||(n[11]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(':ISR 以"'),s("strong",null,"放弃绝对实时性"),l('"为代价,在 SSG 的高性能与 SSR 的灵活性之间取得平衡。'),s("strong",null,"适合那些内容需要更新、但更新频率不至于需要每次请求都实时渲染的场景"),l('。它将构建时生成的静态页面从"一次性产物"变成了"可持续更新的缓存资产"。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"电商商品详情页、分类列表",detail:"数据更新频繁但非实时"},{text:"资讯文章列表和详情页",detail:"CMS 更新后按需刷新"},{text:"页面数量庞大、无法全部构建的大型内容站"},{text:"需要良好 SEO 且首屏性能要求高的页面"}],cons:[{text:"对数据实时性要求极高的场景",detail:"股票、外汇、实时监控面板"},{text:"完全个性化、千人千面的页面",detail:"每次请求内容均不同"},{text:"数据完全公开但更新极频繁且不能有任何延迟的页面"}]}),n[12]||(n[12]=b("",7)),d(_,{title:"PPR 核心二分法",left:{label:"静态外壳",description:"不涉及动态数据的组件",points:["页面布局骨架","导航栏、页脚","文章正文框架","一次渲染即返回"]},right:{label:"动态组件",description:"依赖个性化数据的组件",points:["用户头像、评论列表","点赞数、推荐内容","独立流式渲染","逐步填充占位符"]},connector:"+"}),n[13]||(n[13]=b("",2)),d(rs,{title:"ISR vs PPR 对比",options:[{name:"ISR"},{name:"PPR",highlight:!0}],rows:[{dimension:"混合粒度",values:["页面级别——整页一起缓存/失效","组件级别——不同组件独立缓存/流式渲染"],bestIndex:1},{dimension:"缓存策略",values:["按页面整体缓存,存在统一 revalidate 周期","静态外壳和动态组件各有独立的缓存语义"],bestIndex:1},{dimension:"渲染时机",values:["首次访问时生成静态版本,后续复用","静态外壳每次请求实时渲染,动态组件独立流式"]},{dimension:"内容新鲜度",values:["依赖 revalidate 周期,有一定延迟","静态外壳每次请求新渲染,内容始终最新"],bestIndex:1}]}),n[14]||(n[14]=s("p",null,"PPR 可以看作是 ISR 思想的进一步细化——ISR 把整页当作一个整体进行增量更新,PPR 将渲染策略拆分到组件级别,让静态内容与动态内容各取所需。",-1)),n[15]||(n[15]=s("blockquote",null,[s("p",null,[s("strong",null,"注"),l(":PPR 的概念最早由 Next.js 14 提出并实现,随后被其他框架逐步借鉴。当前生产级实现仍以 Next.js 为主,但其核心机制(静态外壳 + 流式动态组件)是一种与框架无关的渲染思想。")])],-1)),n[16]||(n[16]=s("h3",{id:"优缺点-4",tabindex:"-1"},[l("优缺点 "),s("a",{class:"header-anchor",href:"#优缺点-4","aria-label":"Permalink to “优缺点”"},"​")],-1)),d(h,{pros:[{text:"首屏极快",detail:"静态外壳无任何动态延迟,页面框架立即呈现"},{text:"动态内容无缝加载",detail:"占位符逐步填充,用户体验流畅"},{text:"组件级混合灵活性",detail:"开发者按组件粒度控制渲染策略,无需整页一刀切"},{text:"TTI 更优",detail:"HTTP 流式传输使页面可交互时间早于传统 SSR"}],cons:[{text:"需要框架深度支持",detail:"依赖流式渲染和组件级边界划分机制,配置门槛较高"},{text:"调试复杂度高",detail:"静态外壳和动态组件的边界设计需要谨慎规划"},{text:"属于前沿方案",detail:"各框架实现进度不一,API 稳定性仍在演进中"},{text:"过度工程化风险",detail:"对简单页面反而引入不必要的架构复杂度"}]}),n[17]||(n[17]=s("h3",{id:"适用与不适用场景-4",tabindex:"-1"},[l("适用与不适用场景 "),s("a",{class:"header-anchor",href:"#适用与不适用场景-4","aria-label":"Permalink to “适用与不适用场景”"},"​")],-1)),n[18]||(n[18]=s("blockquote",null,[s("p",null,[s("strong",null,"本质权衡"),l(":PPR 以"),s("strong",null,"组件级拆分 + 流式渲染"),l('为手段,试图解决 SSR"等全部内容才呈现"和 SSG"动态内容必须等待构建"的固有矛盾。它代表了一种趋势——渲染策略从页面级别下沉到组件级别。但鉴于其前沿性,建议在非核心页面验证后再应用于生产环境。')])],-1)),d(h,{prosLabel:"适用场景",consLabel:"不适用场景",pros:[{text:"动态内容与静态内容交织的页面",detail:"如文章页:正文静态 + 评论/点赞动态"},{text:"需要快速首屏的仪表盘类页面",detail:"静态框架 + 数据卡片流式加载"},{text:"大型内容站中同时包含个性化推荐和公共内容的混合页面"},{text:"需要 SEO 同时又想优化可交互时间的复杂页面"}],cons:[{text:"页面结构简单、全部为静态内容的页面",detail:"SSG 足够,无需引入额外复杂度"},{text:"高度个性化、每个用户看到内容完全不同的页面",detail:"SSR 或 CSR 更合适"},{text:"追求框架 API 稳定性的生产环境项目",detail:"PPR 各框架实现进度不一"}]}),n[19]||(n[19]=b("",33)),d(y,{title:"VitePress SSG 三大支柱",items:[{icon:"⚙️",title:"构建时穷举",description:"构建阶段遍历所有 Markdown 文件,逐一编译为独立 .html 文件,无需服务端参与"},{icon:"⚡",title:"零运行时",description:"dist/ 为完全自包含的静态站点,运行时无数据库、无 API、无应用代码执行"},{icon:"🌐",title:"纯静态分发",description:"直接部署到 CDN,边缘节点就近响应,源站零计算,并发承载能力极高"}]}),n[20]||(n[20]=b("",38))]))}});export{bs as __pageData,ks as default};
diff --git a/assets/fullstack_full-stack-resources.md.PB3ApNm8.js b/assets/fullstack_full-stack-resources.md.B8aCWi5d.js
similarity index 99%
rename from assets/fullstack_full-stack-resources.md.PB3ApNm8.js
rename to assets/fullstack_full-stack-resources.md.B8aCWi5d.js
index 6c036b1..ca26300 100644
--- a/assets/fullstack_full-stack-resources.md.PB3ApNm8.js
+++ b/assets/fullstack_full-stack-resources.md.B8aCWi5d.js
@@ -1 +1 @@
-import{_ as d,c as i,o as c,d as e,a,e as s}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const v=JSON.parse('{"title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","frontmatter":{"date":"2026-02-06T15:58:53.000Z","title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","permalink":"/fullstack/full-stack-resources","categories":["资源推荐"],"tags":["资源推荐","全栈"]},"headers":[],"relativePath":"fullstack/full-stack-resources.md","filePath":"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md"}'),l={name:"fullstack/full-stack-resources.md"};function n(o,t,r,p,_,m){return c(),i("div",null,[...t[0]||(t[0]=[e('

全栈技术资源推荐

摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,不仅是一份全栈工具检索目录,更是一份指导开发者从全局视角构建高性能、类型安全、且极具工程化思维的现代 Web 应用的最佳实践指南。

  • 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。
  • 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。
  • 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。

1. 基本语言与环境

',3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTML",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/1200px-HTML5_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"HTML")]),a("p",{class:"desc"},"HTML (HyperText Markup Language) 是用于创建网页的标准标记语言,用于描述网页的结构和内容。它使用标签来定义文档的不同部分,如标题、段落、图像、链接等。HTML 是构建 Web 页面的基础,也是所有前端开发的起点。"),a("span",{class:"VPBadge tip badge"},"标记语言")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/CSS",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/CSS3_logo_and_wordmark.svg/1200px-CSS3_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"CSS")]),a("p",{class:"desc"},"CSS (Cascading Style Sheets) 是用于描述网页样式和布局的样式表语言。它定义了文档的外观,包括字体、颜色、间距、布局等。CSS 与 HTML 结合使用,实现了网页的结构与样式的分离,使得网页设计更加灵活和可维护。"),a("span",{class:"VPBadge tip badge"},"样式表")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/JavaScript",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/JavaScript-logo.png/1200px-JavaScript-logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"JavaScript")]),a("p",{class:"desc"},"JavaScript 是一种动态、弱类型的脚本语言,用于在 Web 浏览器中实现交互性和动态内容。它是 Web 开发的基础,也是前端开发的核心语言。"),a("span",{class:"VPBadge tip badge"},"脚本语言")]),a("a",{href:"https://www.typescriptlang.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Typescript_logo_2020.svg/1200px-Typescript_logo_2020.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"TypeScript")]),a("p",{class:"desc"},"TypeScript 是 JavaScript 的一个超集,添加了静态类型检查和其他高级功能,使得代码更加可靠和可维护。它在前端开发中得到广泛应用,尤其在 React 项目中。"),a("span",{class:"VPBadge tip badge"},"静态类型")]),a("a",{href:"https://webkit.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webkit.org/wp-content/themes/webkit/images/webkit.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"webkit")]),a("p",{class:"desc"},"WebKit 是一个开源的浏览器引擎,用于渲染网页内容。它是 Safari 浏览器的引擎,也是 Chrome 浏览器的一部分。WebKit 提供了高性能的网页渲染和交互功能,是构建现代 Web 应用的基础。"),a("span",{class:"VPBadge tip badge"},"浏览器引擎")]),a("a",{href:"https://nodejs.org/zh-cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Node.js_logo.svg/1200px-Node.js_logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Node.js")]),a("p",{class:"desc"},"Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于在服务器端执行 JavaScript 代码。它允许开发者使用 JavaScript 构建高性能的网络应用程序,如服务器端渲染、实时应用程序和 API 服务。"),a("span",{class:"VPBadge tip badge"},"服务器端")])])],-1),a("h2",{id:"_2-核心-ui-框架",tabindex:"-1"},[s("2. 核心 UI 框架 "),a("a",{class:"header-anchor",href:"#_2-核心-ui-框架","aria-label":"Permalink to “2. 核心 UI 框架”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://react.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/1200px-React-icon.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React")]),a("p",{class:"desc"},"React 是 Facebook 开发的用于构建用户界面的声明式 JavaScript 库,采用组件化架构,支持服务器端渲染和客户端交互。它允许开发者设计简单的视图,并根据数据变化高效更新渲染组件。"),a("span",{class:"VPBadge tip badge"},"声明式")]),a("a",{href:"https://vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue")]),a("p",{class:"desc"},"Vue.js 是一套用于构建用户界面的渐进式框架,采用组件化架构,支持服务器端渲染和客户端交互。强调易用性和高性能。其生态包含官方路由 (Vue Router) 和状态管理库 (Pinia)。"),a("span",{class:"VPBadge tip badge"},"渐进式")]),a("a",{href:"https://svelte.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Svelte_Logo.svg/1200px-Svelte_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Svelte")]),a("p",{class:"desc"},"Svelte 是一种全新的构建 Web 应用的方式,作为编译器将声明式组件转换为高效且能直接操作 DOM 的 JavaScript 代码,运行时开销极小。它强调组件化开发,开发者可以直接在 HTML 中编写组件逻辑,无需额外的运行时支持。"),a("span",{class:"VPBadge tip badge"},"编译时")])])],-1),a("h2",{id:"_3-样式与-ui-组件库-styling-component-libraries",tabindex:"-1"},[s("3. 样式与 UI 组件库 (Styling & Component Libraries) "),a("a",{class:"header-anchor",href:"#_3-样式与-ui-组件库-styling-component-libraries","aria-label":"Permalink to “3. 样式与 UI 组件库 (Styling & Component Libraries)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://tailwindcss.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Tailwind_CSS_Logo.svg/1200px-Tailwind_CSS_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Tailwind CSS")]),a("p",{class:"desc"},"现代前端首选的实用优先 (Utility-first) CSS 框架,通过类名组合实现样式,无需编写自定义 CSS。"),a("span",{class:"VPBadge tip badge"},"实用优先")]),a("a",{href:"https://daisyui.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://img.daisyui.com/images/daisyui/mark.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Daisy UI")]),a("p",{class:"desc"},"是一个基于 Tailwind CSS 的热门开源UI组件库,通过添加语义化类名(如 btn, card)来解决 Tailwind 冗长的代码问题,能帮开发者用更少的代码、更快地构建出干净、美观、响应式且支持主题自定义的 Web 界面。"),a("span",{class:"VPBadge tip badge"},"tailwind 插件")]),a("a",{href:"https://ui.shadcn.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://ui.shadcn.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"shadcn/ui")]),a("p",{class:"desc"},"shadcn/ui 不是一个传统的组件库,而是一种构建你自己的组件库的方法。它提供了一套精心设计、可访问的组件和代码分发平台,兼容你喜欢的框架和 AI 模型。"),a("span",{class:"VPBadge tip badge"},"组件原语")]),a("a",{href:"https://ant.design/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://gw.alipayobjects.com/zos/rmsportal/rlpTLlbMzTNYuZGGCVYM.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Ant Design")]),a("p",{class:"desc"},"AI 友好的「设计系统」,让美与智能并进,让工作充满「灵感」与「快乐」。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://element-plus.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://element-plus.org/images/element-plus-logo-small.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"element-plus")]),a("p",{class:"desc"},"Element Plus 是一个基于 Vue 3 设计的组件库,提供丰富的组件和样式,常用于构建后台管理系统。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://vuetifyjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://vuetifyjs.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vuetify")]),a("p",{class:"desc"},"为 Vue 3 设计的成熟 UI 库,常用于构建后台管理系统,提供丰富的组件和样式。"),a("span",{class:"VPBadge tip badge"},"组件库")])])],-1),a("h2",{id:"_4-路由与状态管理",tabindex:"-1"},[s("4. 路由与状态管理 "),a("a",{class:"header-anchor",href:"#_4-路由与状态管理","aria-label":"Permalink to “4. 路由与状态管理”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://reactrouter.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://reactrouter.com/favicon-dark.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Router")]),a("p",{class:"desc"},"React Router 是 React 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://router.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue Router")]),a("p",{class:"desc"},"Vue.js 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://github.com/pmndrs/zustand",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Zustand")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Redux 的现代化、极简主义精神继承者(自上而下的全局 Store),提供了一种简单的方式来管理全局状态。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://github.com/pmndrs/jotai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Jotai")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Recoil 的轻量化、高性能替代者(自下而上的原子化状态)。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://redux.js.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://redux.js.org/img/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Redux")]),a("p",{class:"desc"},"Redux 是一个预测性的状态容器,用于管理应用的全局状态,提供一致的状态更新和可预测的行为。"),a("span",{class:"VPBadge tip badge"},"不再推荐")]),a("a",{href:"https://pinia.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://pinia.vuejs.org/logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Pinia")]),a("p",{class:"desc"},"Vue.js 官方推荐的状态管理库,基于 Vue 3 Composition API 设计,提供简单、灵活的状态管理解决方案。"),a("span",{class:"VPBadge tip badge"},"状态管理")])])],-1),e('

React 状态管理库横向对比分析:

特性/库Zustand 大部分项目的首选Jotai 编辑比较频繁的建议使用Redux 不再推荐
核心思想自上而下的全局状态管理自下而上的原子化状态管理单向数据流、集中式全局状态
适用场景中大型应用全局状态、偏好轻量方案组件间状态共享、细粒度更新、贴近React思维超大型复杂应用、强可预测性需求
学习曲线平缓,API 简洁平缓,原子概念容易理解陡峭,需理解中间件、Redux Toolkit 等
代码风格简洁,类似轻量版 Redux原子化,分散定义状态相对冗长,需定义 Action、Reducer
性能优化支持组件精准订阅状态天然细粒度更新,避免不必要重渲染需配合 Reselect 等工具优化
社区生态生态稳定,常用插件完善生态活跃,适合实验性场景生态庞大,工具链成熟

5. 数据获取与 API 集成 (Data Fetching & API)

',3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Fetch API")]),a("p",{class:"desc"},"Fetch 是一个基于 Promise 的现代 JavaScript API,用于在浏览器中发起 HTTP 请求(AJAX),是 XMLHttpRequest (XHR) 的更简洁、更强大的替代方案。它允许页面在不重载的情况下从服务器获取数据,支持 GET、POST 等请求方法,并广泛应用于处理网络数据交互。"),a("span",{class:"VPBadge tip badge"},"原生 API")]),a("a",{href:"https://axios-http.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://axios-http.com/assets/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Axios")]),a("p",{class:"desc"},"Axios 是一个基于 Promise 的 HTTP 请求库,可运行在浏览器和 Node.js 环境中。它支持拦截请求和响应、转换数据、取消请求等功能,是前端开发中常用的 HTTP 请求库。"),a("span",{class:"VPBadge tip badge"},"全能请求库")]),a("a",{href:"https://swr.vercel.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://swr.vercel.app/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"SWR")]),a("p",{class:"desc"},'SWR 是由 Vercel 开发的一个基于 React Hooks 的轻量级数据请求库。它基于 "stale-while-revalidate" 策略,先返回缓存数据,再在后台请求最新数据,保证 UI 快速响应且数据保持更新。特点:极简主义,越轻越好,开箱即用,专注于 HTTP 缓存策略。'),a("span",{class:"VPBadge tip badge"},"按需验证缓存")]),a("a",{href:"https://tanstack.com/query/latest",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://tanstack.com/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Query")]),a("p",{class:"desc"},"React Query (现更名为 TanStack Query) 是一个功能强大的 React 服务端状态管理库。它专注于处理异步数据的获取、缓存、同步和更新,开箱即用地简化了 API 请求、缓存处理、数据过期更新和加载/错误状态管理。特点:功能主义大而全,不仅是 HTTP,可用于任何异步 Promise 管理。"),a("span",{class:"VPBadge tip badge"},"服务端状态管理")]),a("a",{href:"https://graphql.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://graphql.org/_next/static/media/logo-blurred.94c9eff4.webp",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GraphQL")]),a("p",{class:"desc"},"GraphQL 是一个用于 API 的查询语言、一种描述请求数据方法的语法,通常用于客户端从服务端加载数据,主要是为了解决 REST API 中过度获取和获取不足的问题。"),a("span",{class:"VPBadge tip badge"},"按需声明式查询")]),a("a",{href:"https://trpc.io/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://trpc.io/img/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"tRPC")]),a("p",{class:"desc"},"tRPC 是基于插件化理念设计的一款支持多语言、高性能的 RPC 开发框架,旨在无需定义专门 API Schema(如 Swagger/GraphQL)的情况下,实现前后端无缝、全栈类型安全的 API 调用。它让前端能像调用本地函数一样调用后端远程函数,大大提升开发效率。"),a("span",{class:"VPBadge tip badge"},"端到端类型安全")])])],-1),e('
技术/工具核心定位与特征核心优势 (能解决什么痛点)局限性与妥协最佳实践与适用场景
Fetch API 通信基建浏览器原生标准协议无需安装第三方包、天然融入现代 Web 标准。在 Edge Runtime 环境下表现最佳。默认不抛出 HTTP 错误状态码(需手动拦截);处理 JSON 和参数拼接繁琐、缺少请求取消机制。极简场景/底层封装:不需要复杂拦截器的轻量级页面;作为更高级架构的底层引擎,如 Next.js 内部的 fetch 扩展。
Axios
通信基建
全能型同构请求体API 极其友好、请求/响应拦截器(处理全局 Token、统一错误提示的利器)、自动转换 JSON 数据。增加了一定的打包体积;基于 XHR(尽管现代版本已支持 fetch 底层),在某些最新的服务端边缘计算环境中可能受限。重度依赖 RESTful 的项目:需要精细化控制请求头、进行全局鉴权拦截、处理复杂文件上传的传统全栈或中后台系统。
SWR
状态调度
按需验证的轻量级缓存极致的轻量与简单;焦点聚焦时自动刷新、网络恢复时重试;带来极佳的“UI 瞬间响应”体验。面对极其复杂的异步状态流转(如互相依赖的串行请求、精细的离线修改回滚)时,显得心有余而力不足。内容驱动型应用:注重阅读体验的博客站点、数据实时性要求中等的数据看板。配置极简,非常适合快速迭代的产品。
React Query
状态调度
大而全的异步状态接管强大的缓存生命周期管理;优雅的 Mutations(数据变更)处理与乐观更新;极好的开发调试工具。学习曲线较陡峭;默认配置下有时会导致意料之外的组件重渲染;体积相对较大。复杂交互型 SaaS / 强业务逻辑系统:需要处理大量表单提交、列表无限滚动、精细化缓存控制的重型单页应用(SPA)。
GraphQL 协议契约声明式的图谱查询彻底解决 Over-fetching;前端拥有极高的数据按需组合自由度;自带强类型的 Schema 文档。后端开发成本极高(需编写大量 Resolver 函数);容易产生 N+1 查询性能问题;HTTP 缓存机制难以直接利用。多端复用型大中型产品:后端需要同时服务于 Web、iOS、Android 甚至第三方开发者;业务实体关系高度复杂的系统。
tRPC
协议契约
端到端的全栈类型推导前后端类型零成本共享;重构时的代码安全性极高;完全不需要手写接口文档或 Schema。强绑定 Node.js/TypeScript 技术栈;如果前端项目和后端代码没有在一个 Monorepo 中,威力大打折扣。敏捷全栈/单人作战团队:采用 Node.js + 前端框架(React/Vue)构建的全栈项目。极度追求开发效率和产品迭代速度的团队。

现代 Web 数据流架构范式:

1、标准前后端分离架构:Axios + React Query(或 SWR)

  • 适用场景: 异构系统(如前端使用 React/Vue,后端使用 Java/Go/Python 等非 JS 语言);高度依赖传统 RESTful API 规范、需要精细化控制网络请求拦截器的中大型企业级项目。
  • 架构机制:将网络请求的“底层通道”与“上层状态”严格解耦。Axios 专注于基础通信层的治理,负责全局请求头注入(如 Bearer Token)、统一的 HTTP 状态码拦截与静默错误上报;React Query / SWR 则专注于表现层的状态调度,接管数据的缓存生命周期、请求去重(Deduplication)以及乐观更新(Optimistic UI)。
  • 工程价值:具备极高的稳健性与技术栈包容性。前后端边界清晰,互不干扰。

2、全栈类型安全架构:tRPC + React Query

  • 适用场景: 采用 Monorepo 架构管理的纯 TypeScript/Node.js 全栈项目;追求敏捷开发、极速交付以及需要频繁进行业务重构的 SaaS 产品或内部系统。
  • 架构机制:基于 TypeScript 的强类型推导系统,打通前后端数据流。tRPC 官方深度集成了 React Query(@trpc/react-query),在保留了完整的现代前端缓存调度能力的同时,彻底免去了手动维护 API 接口文档和 Schema 编译生成的中间环节。后端的类型变更会即刻反映为前端编译期的静态类型检查报错。
  • 工程价值:极致的研发效能与结构安全性。对于专注于产品迭代与业务增长的 Node.js 全栈开发者而言,这种组合完美契合了“以更少投入获得更大收益”的工程哲学。它直接消灭了“接口联调”这一无效耗时环节,让开发者能将核心精力聚焦于产品逻辑本身。

3、多端数据聚合 BFF 架构:GraphQL + Apollo Client

  • 适用场景: 数据来源庞杂且分散的大型业务系统;需要同时为多种不同客户端提供高灵活性 API,且前后端团队规模较大、需要高度并行的项目。
  • 架构机制:引入 BFF(Backend For Frontend,服务于前端的后端)理念。GraphQL 作为中间件层,负责将底层分散的微服务、数据库或第三方 API 进行聚合与编排(Data Orchestration)。前端通过 Apollo Client 发起声明式查询,精准获取 UI 组件所需的数据切片,并利用 Apollo 强大的标准化缓存(Normalized Cache)管理复杂实体关系。
  • 工程价值:彻底解决多端设备(Web、iOS、Android)面临的过度获取(Over-fetching)与碎片化接口治理问题,实现了数据消费端的高度自治。

6. 构建工具与工作流 (Build Tools & Workflow)

',9),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://cn.vite.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://cn.vite.dev/logo-without-border.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vite")]),a("p",{class:"desc"},"Vite 是一款速度极快的前端构建工具,为下一代 Web 应用程序提供支持,它摒弃了“先打包,再启动”的模式,开启了“原生 ESM”开发的新时代。"),a("span",{class:"VPBadge tip badge"},"极速 ESM 构建")]),a("a",{href:"https://rsbuild.rs/zh/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.rspack.rs/rsbuild/favicon-128x128.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Rsbuild")]),a("p",{class:"desc"},"Rsbuild 是一个由字节跳动 Web Infra 团队开源、基于 Rust 语言编写的 Rspack 驱动的高性能构建工具。它专注于为 Web 项目提供开箱即用的开发体验,通过内置的高性能工具(如 SWC、Lightning CSS)实现极快的构建速度,并提供类似 Vite/Webpack 的零配置或低配置体验。"),a("span",{class:"VPBadge tip badge"},"Rust 高性能构建")]),a("a",{href:"https://nextjscn.org/docs/app/api-reference/turbopack",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Turbopack")]),a("p",{class:"desc"},"Turbopack 是由 Vercel 开发、基于 Rust 编写的高性能增量打包工具,专为 JavaScript 和 TypeScript 优化。它被设计为 Webpack 的继任者,旨在通过优化的机器代码和高度增量计算能力,提供比 Vite 快 10 倍、比 Webpack 快 700 倍的本地开发体验,主要内置于 Next.js。"),a("span",{class:"VPBadge tip badge"},"增量极速打包")]),a("a",{href:"https://webpack.docschina.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webpack.docschina.org/favicon.f326220248556af65f41.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Webpack")]),a("p",{class:"desc"},"Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它在内部构建依赖图,将项目中的各种资源(如 JS、CSS、图片、TypeScript 等)视为模块,并最终打包成浏览器可直接运行的静态文件。通过 Loader 和 Plugin,它能处理复杂的开发需求。"),a("span",{class:"VPBadge tip badge"},"经典模块打包")]),a("a",{href:"https://github.com/features/actions",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Actions")]),a("p",{class:"desc"},"GitHub Actions 是 GitHub 推出的持续集成和持续交付 (CI/CD) 平台,旨在帮助开发者自动执行软件开发工作流。它允许在代码仓库中直接定义自动化流程(如构建、测试、部署),支持事件触发(如提交代码),并提供虚拟机环境(Ubuntu、Windows、macOS)运行任务,使开发更高效。"),a("span",{class:"VPBadge tip badge"},"CI/CD 自动化")])])],-1),a("h2",{id:"_7-全栈框架",tabindex:"-1"},[s("7. 全栈框架 "),a("a",{class:"header-anchor",href:"#_7-全栈框架","aria-label":"Permalink to “7. 全栈框架”"},"​")],-1),a("blockquote",null,[a("p",null,[a("strong",null,"同构元框架:Next.js、Nuxt"),s(",现代全栈开发倾向于使用“元框架”,它们模糊了客户端和服务器的界限,提供一体化的开发体验。")]),a("p",null,[a("strong",null,"企业级 Node 服务端框架:NestJS"),s(",一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架。")])],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://nextjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nextjs.org/favicon.ico?favicon.3fc65821.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Next.js")]),a("p",{class:"desc"},"Next.js 是一个基于 React、Node.js 的全栈 Web 开发框架,由 Vercel 公司维护,专为生产环境设计。它通过内置的服务器端渲染 (SSR)、静态站点生成 (SSG) 和增量静态再生成 (ISR) 技术,解决了传统 React 应用的 SEO 优化差 和首屏加载慢的问题,是目前最受欢迎的 React 应用开发框架之一。"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nuxtjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nuxt.com/icon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Nuxt")]),a("p",{class:"desc"},"是一个基于 Vue.js 的开源、免费的 Web 开发元框架(Meta-framework),专为构建高性能的服务端渲染(SSR)、静态站点生成(SSG)和单页应用(SPA)而设计。它集成了 Vite、Vue 3 和 Nitro 服务端引擎,旨在简化开发流程,提供卓越的 SEO 优化和开发人员体验"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nestjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nestjs.com/favicon-32x32.a39d94f4.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"NestJS")]),a("p",{class:"desc"},"NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架."),a("span",{class:"VPBadge tip badge"},"企业级 Node 框架")])])],-1),e('
对比维度Next.jsNuxtNestJS
框架定位React 全栈框架
(Isomorphic Meta-framework)
Vue 全栈框架
(Isomorphic Meta-framework)
企业级 Node.js 服务端框架
(Backend Framework)
底层驱动Webpack / Turbopack
React Server Components
Vite / Nitro 引擎
Vue3
Express / Fastify (底层可插拔)
纯 TypeScript
核心工程特性混合渲染 (SSR/SSG/ISR)
Server Actions (无缝 RPC)
边缘计算路由
混合渲染与预渲染
极致的自动导入 (Auto-imports)
开箱即用的模块化生态
依赖注入 (DI) / 控制反转 (IoC)
面向切面编程 (AOP)
强主张的模块化目录
数据流职责视图层渲染、BFF (服务于前端的后端)、轻量级聚合 API。视图层渲染、BFF (服务于前端的后端)、轻量级聚合 API。纯后端业务逻辑处理、微服务通信与编排、统一 API 供应。
最佳业务场景重 SEO 的 C 端产品 (电商、内容站); 敏捷迭代的 SaaS; 单仓库极速交付。重交互体验的 Web 应用; Vue 技术团队的全栈转型; 独立开发者建站。复杂领域驱动设计 (DDD) 系统; 多端复用的 API 中台; 庞大的微服务集群。
需规避的反模式承载高并发 CPU 密集型计算; 极其复杂的跨服务分布式事务。承载高并发 CPU 密集型计算; 极其复杂的跨服务分布式事务。仅需极简 CRUD 的小型外包项目; 强依赖首屏 HTML 直出的纯展示网页。
团队协作模型前端主导的敏捷全栈小队, 或追求“单兵作战”的极客团队。前端主导的敏捷全栈小队, 或 Vue 生态重度依赖团队。后端主导的中大型团队, 前后端物理分离的标准化开发流水线。

8. 部署与托管 (Deployment & Hosting)

',2),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://vercel.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.vercel.com/image/upload/front/favicon/vercel/apple-touch-icon-256x256.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vercel")]),a("p",{class:"desc"},"Vercel 是一个现代前端项目的理想部署平台,它零配置、支持自动部署和预览、拥有全球加速节点,广泛用于开源项目、个人作品集、企业网站等。 无论你是用React、Vue、Svelte 还是静态HTML,只需几步就可以将项目上线。"),a("span",{class:"VPBadge tip badge"},"前端边缘托管")]),a("a",{href:"https://www.netlify.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://www.netlify.com/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Netlify")]),a("p",{class:"desc"},"与 Vercel 类似,功能更全面:支持更多的框架和静态站点生成器,有表单处理、无服务器函数等功能,免费额度更大、还支持 A/B 测试和分析。Netlify 是一个基于云计算的网站部署和托管平台,专注于为开发者提供便捷的静态网站和Jamstack 应用部署服务。 它的核心优势在于将网站构建、部署、托管以及持续集成/ 持续部署(CI/CD)流程高度集成,极大地简化了开发和运维的复杂程度"),a("span",{class:"VPBadge tip badge"},"Jamstack 平台")]),a("a",{href:"https://pages.github.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Pages")]),a("p",{class:"desc"},"GitHub Pages 是一个由 GitHub 提供的、免费的静态网站托管服务。它允许用户直接从 GitHub 仓库(Repository)获取 HTML、CSS 和 JavaScript 文件,无需额外配置服务器即可快速部署个人主页、项目文档或博客。"),a("span",{class:"VPBadge tip badge"},"纯静态托管")])])],-1),a("h2",{id:"_9-学习资源与社区-learning-community",tabindex:"-1"},[s("9. 学习资源与社区 (Learning & Community) "),a("a",{class:"header-anchor",href:"#_9-学习资源与社区-learning-community","aria-label":"Permalink to “9. 学习资源与社区 (Learning & Community)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://javascriptweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"JavaScript Weekly")]),a("p",{class:"desc"},"每周分享最新的 JavaScript 相关技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://nodeweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Node Weekly")]),a("p",{class:"desc"},"每周分享最新的 Node.js 相关技术文章、库、工具和趋势。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://www.ruanyifeng.com/blog/weekly/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"阮一峰网络日志")]),a("p",{class:"desc"},"阮一峰的网络日志,每周五发布,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E6%97%A9%E8%AF%BB%E8%AF%BE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端早读课")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E5%B7%85",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之巅")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIxMzExMjYwOQ==&action=getalbum&album_id=1369610438157369345#wechat_redirect",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"凹凸实验室")]),a("p",{class:"desc"},"蒲公英·JELLY技术周刊,由京东·凹凸实验室维护整理的技术周刊,从团队专注的研究技术方向出发,深入挖掘业界热点,聚焦技术动态。技术周刊内容分类主要包括如下:基础技术、工程化、跨端框架技术、图形编程、服务端开发、桌面开发、人工智能等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E5%A4%A7%E5%85%A8",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端大全")]),a("p",{class:"desc"},"前端大全,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E7%A5%9E",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之神")]),a("p",{class:"desc"},"前端之神,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E7%A8%8B%E5%BA%8F%E5%91%98%E6%88%90%E9%95%BF%E6%8C%87%E5%8C%97",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"程序员成长指北")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%AD%97%E8%8A%82%E5%89%8D%E7%AB%AF-ByteFE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"ByteFE")]),a("p",{class:"desc"},"字节跳动前端团队维护的专业微信公众号,分享技术前沿、文章分享、实践干货等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%BB%8E%E8%BF%9B%E9%98%B6%E5%88%B0%E5%85%A5%E9%99%A2",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端从进阶到入院")]),a("p",{class:"desc"},"前端从进阶到入院,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://www.zhangxinxu.com/wordpress/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"张鑫旭-鑫空间-鑫生活")]),a("p",{class:"desc"},"张鑫旭的个人博客,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"网络博客")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E6%B7%98%E7%B3%BB%E5%89%8D%E7%AB%AF%E5%9B%A2%E9%98%9F",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"淘系前端团队")]),a("p",{class:"desc"},"淘宝前端团队,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")])])],-1)])])}const h=d(l,[["render",n]]);export{v as __pageData,h as default}; +import{_ as d,c as i,o as c,d as e,a,e as s}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const v=JSON.parse('{"title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","frontmatter":{"date":"2026-02-06T15:58:53.000Z","title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","permalink":"/fullstack/full-stack-resources","categories":["资源推荐"],"tags":["资源推荐","全栈"]},"headers":[],"relativePath":"fullstack/full-stack-resources.md","filePath":"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md"}'),l={name:"fullstack/full-stack-resources.md"};function n(o,t,r,p,_,m){return c(),i("div",null,[...t[0]||(t[0]=[e('

全栈技术资源推荐

摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,不仅是一份全栈工具检索目录,更是一份指导开发者从全局视角构建高性能、类型安全、且极具工程化思维的现代 Web 应用的最佳实践指南。

  • 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。
  • 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。
  • 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。

1. 基本语言与环境

',3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTML",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/1200px-HTML5_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"HTML")]),a("p",{class:"desc"},"HTML (HyperText Markup Language) 是用于创建网页的标准标记语言,用于描述网页的结构和内容。它使用标签来定义文档的不同部分,如标题、段落、图像、链接等。HTML 是构建 Web 页面的基础,也是所有前端开发的起点。"),a("span",{class:"VPBadge tip badge"},"标记语言")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/CSS",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/CSS3_logo_and_wordmark.svg/1200px-CSS3_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"CSS")]),a("p",{class:"desc"},"CSS (Cascading Style Sheets) 是用于描述网页样式和布局的样式表语言。它定义了文档的外观,包括字体、颜色、间距、布局等。CSS 与 HTML 结合使用,实现了网页的结构与样式的分离,使得网页设计更加灵活和可维护。"),a("span",{class:"VPBadge tip badge"},"样式表")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/JavaScript",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/JavaScript-logo.png/1200px-JavaScript-logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"JavaScript")]),a("p",{class:"desc"},"JavaScript 是一种动态、弱类型的脚本语言,用于在 Web 浏览器中实现交互性和动态内容。它是 Web 开发的基础,也是前端开发的核心语言。"),a("span",{class:"VPBadge tip badge"},"脚本语言")]),a("a",{href:"https://www.typescriptlang.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Typescript_logo_2020.svg/1200px-Typescript_logo_2020.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"TypeScript")]),a("p",{class:"desc"},"TypeScript 是 JavaScript 的一个超集,添加了静态类型检查和其他高级功能,使得代码更加可靠和可维护。它在前端开发中得到广泛应用,尤其在 React 项目中。"),a("span",{class:"VPBadge tip badge"},"静态类型")]),a("a",{href:"https://webkit.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webkit.org/wp-content/themes/webkit/images/webkit.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"webkit")]),a("p",{class:"desc"},"WebKit 是一个开源的浏览器引擎,用于渲染网页内容。它是 Safari 浏览器的引擎,也是 Chrome 浏览器的一部分。WebKit 提供了高性能的网页渲染和交互功能,是构建现代 Web 应用的基础。"),a("span",{class:"VPBadge tip badge"},"浏览器引擎")]),a("a",{href:"https://nodejs.org/zh-cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Node.js_logo.svg/1200px-Node.js_logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Node.js")]),a("p",{class:"desc"},"Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于在服务器端执行 JavaScript 代码。它允许开发者使用 JavaScript 构建高性能的网络应用程序,如服务器端渲染、实时应用程序和 API 服务。"),a("span",{class:"VPBadge tip badge"},"服务器端")])])],-1),a("h2",{id:"_2-核心-ui-框架",tabindex:"-1"},[s("2. 核心 UI 框架 "),a("a",{class:"header-anchor",href:"#_2-核心-ui-框架","aria-label":"Permalink to “2. 核心 UI 框架”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://react.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/1200px-React-icon.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React")]),a("p",{class:"desc"},"React 是 Facebook 开发的用于构建用户界面的声明式 JavaScript 库,采用组件化架构,支持服务器端渲染和客户端交互。它允许开发者设计简单的视图,并根据数据变化高效更新渲染组件。"),a("span",{class:"VPBadge tip badge"},"声明式")]),a("a",{href:"https://vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue")]),a("p",{class:"desc"},"Vue.js 是一套用于构建用户界面的渐进式框架,采用组件化架构,支持服务器端渲染和客户端交互。强调易用性和高性能。其生态包含官方路由 (Vue Router) 和状态管理库 (Pinia)。"),a("span",{class:"VPBadge tip badge"},"渐进式")]),a("a",{href:"https://svelte.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Svelte_Logo.svg/1200px-Svelte_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Svelte")]),a("p",{class:"desc"},"Svelte 是一种全新的构建 Web 应用的方式,作为编译器将声明式组件转换为高效且能直接操作 DOM 的 JavaScript 代码,运行时开销极小。它强调组件化开发,开发者可以直接在 HTML 中编写组件逻辑,无需额外的运行时支持。"),a("span",{class:"VPBadge tip badge"},"编译时")])])],-1),a("h2",{id:"_3-样式与-ui-组件库-styling-component-libraries",tabindex:"-1"},[s("3. 样式与 UI 组件库 (Styling & Component Libraries) "),a("a",{class:"header-anchor",href:"#_3-样式与-ui-组件库-styling-component-libraries","aria-label":"Permalink to “3. 样式与 UI 组件库 (Styling & Component Libraries)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://tailwindcss.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Tailwind_CSS_Logo.svg/1200px-Tailwind_CSS_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Tailwind CSS")]),a("p",{class:"desc"},"现代前端首选的实用优先 (Utility-first) CSS 框架,通过类名组合实现样式,无需编写自定义 CSS。"),a("span",{class:"VPBadge tip badge"},"实用优先")]),a("a",{href:"https://daisyui.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://img.daisyui.com/images/daisyui/mark.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Daisy UI")]),a("p",{class:"desc"},"是一个基于 Tailwind CSS 的热门开源UI组件库,通过添加语义化类名(如 btn, card)来解决 Tailwind 冗长的代码问题,能帮开发者用更少的代码、更快地构建出干净、美观、响应式且支持主题自定义的 Web 界面。"),a("span",{class:"VPBadge tip badge"},"tailwind 插件")]),a("a",{href:"https://ui.shadcn.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://ui.shadcn.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"shadcn/ui")]),a("p",{class:"desc"},"shadcn/ui 不是一个传统的组件库,而是一种构建你自己的组件库的方法。它提供了一套精心设计、可访问的组件和代码分发平台,兼容你喜欢的框架和 AI 模型。"),a("span",{class:"VPBadge tip badge"},"组件原语")]),a("a",{href:"https://ant.design/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://gw.alipayobjects.com/zos/rmsportal/rlpTLlbMzTNYuZGGCVYM.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Ant Design")]),a("p",{class:"desc"},"AI 友好的「设计系统」,让美与智能并进,让工作充满「灵感」与「快乐」。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://element-plus.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://element-plus.org/images/element-plus-logo-small.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"element-plus")]),a("p",{class:"desc"},"Element Plus 是一个基于 Vue 3 设计的组件库,提供丰富的组件和样式,常用于构建后台管理系统。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://vuetifyjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://vuetifyjs.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vuetify")]),a("p",{class:"desc"},"为 Vue 3 设计的成熟 UI 库,常用于构建后台管理系统,提供丰富的组件和样式。"),a("span",{class:"VPBadge tip badge"},"组件库")])])],-1),a("h2",{id:"_4-路由与状态管理",tabindex:"-1"},[s("4. 路由与状态管理 "),a("a",{class:"header-anchor",href:"#_4-路由与状态管理","aria-label":"Permalink to “4. 路由与状态管理”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://reactrouter.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://reactrouter.com/favicon-dark.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Router")]),a("p",{class:"desc"},"React Router 是 React 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://router.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue Router")]),a("p",{class:"desc"},"Vue.js 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://github.com/pmndrs/zustand",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Zustand")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Redux 的现代化、极简主义精神继承者(自上而下的全局 Store),提供了一种简单的方式来管理全局状态。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://github.com/pmndrs/jotai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Jotai")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Recoil 的轻量化、高性能替代者(自下而上的原子化状态)。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://redux.js.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://redux.js.org/img/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Redux")]),a("p",{class:"desc"},"Redux 是一个预测性的状态容器,用于管理应用的全局状态,提供一致的状态更新和可预测的行为。"),a("span",{class:"VPBadge tip badge"},"不再推荐")]),a("a",{href:"https://pinia.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://pinia.vuejs.org/logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Pinia")]),a("p",{class:"desc"},"Vue.js 官方推荐的状态管理库,基于 Vue 3 Composition API 设计,提供简单、灵活的状态管理解决方案。"),a("span",{class:"VPBadge tip badge"},"状态管理")])])],-1),e('

React 状态管理库横向对比分析:

特性/库Zustand 大部分项目的首选Jotai 编辑比较频繁的建议使用Redux 不再推荐
核心思想自上而下的全局状态管理自下而上的原子化状态管理单向数据流、集中式全局状态
适用场景中大型应用全局状态、偏好轻量方案组件间状态共享、细粒度更新、贴近React思维超大型复杂应用、强可预测性需求
学习曲线平缓,API 简洁平缓,原子概念容易理解陡峭,需理解中间件、Redux Toolkit 等
代码风格简洁,类似轻量版 Redux原子化,分散定义状态相对冗长,需定义 Action、Reducer
性能优化支持组件精准订阅状态天然细粒度更新,避免不必要重渲染需配合 Reselect 等工具优化
社区生态生态稳定,常用插件完善生态活跃,适合实验性场景生态庞大,工具链成熟

5. 数据获取与 API 集成 (Data Fetching & API)

',3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Fetch API")]),a("p",{class:"desc"},"Fetch 是一个基于 Promise 的现代 JavaScript API,用于在浏览器中发起 HTTP 请求(AJAX),是 XMLHttpRequest (XHR) 的更简洁、更强大的替代方案。它允许页面在不重载的情况下从服务器获取数据,支持 GET、POST 等请求方法,并广泛应用于处理网络数据交互。"),a("span",{class:"VPBadge tip badge"},"原生 API")]),a("a",{href:"https://axios-http.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://axios-http.com/assets/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Axios")]),a("p",{class:"desc"},"Axios 是一个基于 Promise 的 HTTP 请求库,可运行在浏览器和 Node.js 环境中。它支持拦截请求和响应、转换数据、取消请求等功能,是前端开发中常用的 HTTP 请求库。"),a("span",{class:"VPBadge tip badge"},"全能请求库")]),a("a",{href:"https://swr.vercel.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://swr.vercel.app/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"SWR")]),a("p",{class:"desc"},'SWR 是由 Vercel 开发的一个基于 React Hooks 的轻量级数据请求库。它基于 "stale-while-revalidate" 策略,先返回缓存数据,再在后台请求最新数据,保证 UI 快速响应且数据保持更新。特点:极简主义,越轻越好,开箱即用,专注于 HTTP 缓存策略。'),a("span",{class:"VPBadge tip badge"},"按需验证缓存")]),a("a",{href:"https://tanstack.com/query/latest",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://tanstack.com/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Query")]),a("p",{class:"desc"},"React Query (现更名为 TanStack Query) 是一个功能强大的 React 服务端状态管理库。它专注于处理异步数据的获取、缓存、同步和更新,开箱即用地简化了 API 请求、缓存处理、数据过期更新和加载/错误状态管理。特点:功能主义大而全,不仅是 HTTP,可用于任何异步 Promise 管理。"),a("span",{class:"VPBadge tip badge"},"服务端状态管理")]),a("a",{href:"https://graphql.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://graphql.org/_next/static/media/logo-blurred.94c9eff4.webp",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GraphQL")]),a("p",{class:"desc"},"GraphQL 是一个用于 API 的查询语言、一种描述请求数据方法的语法,通常用于客户端从服务端加载数据,主要是为了解决 REST API 中过度获取和获取不足的问题。"),a("span",{class:"VPBadge tip badge"},"按需声明式查询")]),a("a",{href:"https://trpc.io/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://trpc.io/img/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"tRPC")]),a("p",{class:"desc"},"tRPC 是基于插件化理念设计的一款支持多语言、高性能的 RPC 开发框架,旨在无需定义专门 API Schema(如 Swagger/GraphQL)的情况下,实现前后端无缝、全栈类型安全的 API 调用。它让前端能像调用本地函数一样调用后端远程函数,大大提升开发效率。"),a("span",{class:"VPBadge tip badge"},"端到端类型安全")])])],-1),e('
技术/工具核心定位与特征核心优势 (能解决什么痛点)局限性与妥协最佳实践与适用场景
Fetch API 通信基建浏览器原生标准协议无需安装第三方包、天然融入现代 Web 标准。在 Edge Runtime 环境下表现最佳。默认不抛出 HTTP 错误状态码(需手动拦截);处理 JSON 和参数拼接繁琐、缺少请求取消机制。极简场景/底层封装:不需要复杂拦截器的轻量级页面;作为更高级架构的底层引擎,如 Next.js 内部的 fetch 扩展。
Axios
通信基建
全能型同构请求体API 极其友好、请求/响应拦截器(处理全局 Token、统一错误提示的利器)、自动转换 JSON 数据。增加了一定的打包体积;基于 XHR(尽管现代版本已支持 fetch 底层),在某些最新的服务端边缘计算环境中可能受限。重度依赖 RESTful 的项目:需要精细化控制请求头、进行全局鉴权拦截、处理复杂文件上传的传统全栈或中后台系统。
SWR
状态调度
按需验证的轻量级缓存极致的轻量与简单;焦点聚焦时自动刷新、网络恢复时重试;带来极佳的“UI 瞬间响应”体验。面对极其复杂的异步状态流转(如互相依赖的串行请求、精细的离线修改回滚)时,显得心有余而力不足。内容驱动型应用:注重阅读体验的博客站点、数据实时性要求中等的数据看板。配置极简,非常适合快速迭代的产品。
React Query
状态调度
大而全的异步状态接管强大的缓存生命周期管理;优雅的 Mutations(数据变更)处理与乐观更新;极好的开发调试工具。学习曲线较陡峭;默认配置下有时会导致意料之外的组件重渲染;体积相对较大。复杂交互型 SaaS / 强业务逻辑系统:需要处理大量表单提交、列表无限滚动、精细化缓存控制的重型单页应用(SPA)。
GraphQL 协议契约声明式的图谱查询彻底解决 Over-fetching;前端拥有极高的数据按需组合自由度;自带强类型的 Schema 文档。后端开发成本极高(需编写大量 Resolver 函数);容易产生 N+1 查询性能问题;HTTP 缓存机制难以直接利用。多端复用型大中型产品:后端需要同时服务于 Web、iOS、Android 甚至第三方开发者;业务实体关系高度复杂的系统。
tRPC
协议契约
端到端的全栈类型推导前后端类型零成本共享;重构时的代码安全性极高;完全不需要手写接口文档或 Schema。强绑定 Node.js/TypeScript 技术栈;如果前端项目和后端代码没有在一个 Monorepo 中,威力大打折扣。敏捷全栈/单人作战团队:采用 Node.js + 前端框架(React/Vue)构建的全栈项目。极度追求开发效率和产品迭代速度的团队。

现代 Web 数据流架构范式:

1、标准前后端分离架构:Axios + React Query(或 SWR)

  • 适用场景: 异构系统(如前端使用 React/Vue,后端使用 Java/Go/Python 等非 JS 语言);高度依赖传统 RESTful API 规范、需要精细化控制网络请求拦截器的中大型企业级项目。
  • 架构机制:将网络请求的“底层通道”与“上层状态”严格解耦。Axios 专注于基础通信层的治理,负责全局请求头注入(如 Bearer Token)、统一的 HTTP 状态码拦截与静默错误上报;React Query / SWR 则专注于表现层的状态调度,接管数据的缓存生命周期、请求去重(Deduplication)以及乐观更新(Optimistic UI)。
  • 工程价值:具备极高的稳健性与技术栈包容性。前后端边界清晰,互不干扰。

2、全栈类型安全架构:tRPC + React Query

  • 适用场景: 采用 Monorepo 架构管理的纯 TypeScript/Node.js 全栈项目;追求敏捷开发、极速交付以及需要频繁进行业务重构的 SaaS 产品或内部系统。
  • 架构机制:基于 TypeScript 的强类型推导系统,打通前后端数据流。tRPC 官方深度集成了 React Query(@trpc/react-query),在保留了完整的现代前端缓存调度能力的同时,彻底免去了手动维护 API 接口文档和 Schema 编译生成的中间环节。后端的类型变更会即刻反映为前端编译期的静态类型检查报错。
  • 工程价值:极致的研发效能与结构安全性。对于专注于产品迭代与业务增长的 Node.js 全栈开发者而言,这种组合完美契合了“以更少投入获得更大收益”的工程哲学。它直接消灭了“接口联调”这一无效耗时环节,让开发者能将核心精力聚焦于产品逻辑本身。

3、多端数据聚合 BFF 架构:GraphQL + Apollo Client

  • 适用场景: 数据来源庞杂且分散的大型业务系统;需要同时为多种不同客户端提供高灵活性 API,且前后端团队规模较大、需要高度并行的项目。
  • 架构机制:引入 BFF(Backend For Frontend,服务于前端的后端)理念。GraphQL 作为中间件层,负责将底层分散的微服务、数据库或第三方 API 进行聚合与编排(Data Orchestration)。前端通过 Apollo Client 发起声明式查询,精准获取 UI 组件所需的数据切片,并利用 Apollo 强大的标准化缓存(Normalized Cache)管理复杂实体关系。
  • 工程价值:彻底解决多端设备(Web、iOS、Android)面临的过度获取(Over-fetching)与碎片化接口治理问题,实现了数据消费端的高度自治。

6. 构建工具与工作流 (Build Tools & Workflow)

',9),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://cn.vite.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://cn.vite.dev/logo-without-border.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vite")]),a("p",{class:"desc"},"Vite 是一款速度极快的前端构建工具,为下一代 Web 应用程序提供支持,它摒弃了“先打包,再启动”的模式,开启了“原生 ESM”开发的新时代。"),a("span",{class:"VPBadge tip badge"},"极速 ESM 构建")]),a("a",{href:"https://rsbuild.rs/zh/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.rspack.rs/rsbuild/favicon-128x128.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Rsbuild")]),a("p",{class:"desc"},"Rsbuild 是一个由字节跳动 Web Infra 团队开源、基于 Rust 语言编写的 Rspack 驱动的高性能构建工具。它专注于为 Web 项目提供开箱即用的开发体验,通过内置的高性能工具(如 SWC、Lightning CSS)实现极快的构建速度,并提供类似 Vite/Webpack 的零配置或低配置体验。"),a("span",{class:"VPBadge tip badge"},"Rust 高性能构建")]),a("a",{href:"https://nextjscn.org/docs/app/api-reference/turbopack",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Turbopack")]),a("p",{class:"desc"},"Turbopack 是由 Vercel 开发、基于 Rust 编写的高性能增量打包工具,专为 JavaScript 和 TypeScript 优化。它被设计为 Webpack 的继任者,旨在通过优化的机器代码和高度增量计算能力,提供比 Vite 快 10 倍、比 Webpack 快 700 倍的本地开发体验,主要内置于 Next.js。"),a("span",{class:"VPBadge tip badge"},"增量极速打包")]),a("a",{href:"https://webpack.docschina.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webpack.docschina.org/favicon.f326220248556af65f41.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Webpack")]),a("p",{class:"desc"},"Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它在内部构建依赖图,将项目中的各种资源(如 JS、CSS、图片、TypeScript 等)视为模块,并最终打包成浏览器可直接运行的静态文件。通过 Loader 和 Plugin,它能处理复杂的开发需求。"),a("span",{class:"VPBadge tip badge"},"经典模块打包")]),a("a",{href:"https://github.com/features/actions",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Actions")]),a("p",{class:"desc"},"GitHub Actions 是 GitHub 推出的持续集成和持续交付 (CI/CD) 平台,旨在帮助开发者自动执行软件开发工作流。它允许在代码仓库中直接定义自动化流程(如构建、测试、部署),支持事件触发(如提交代码),并提供虚拟机环境(Ubuntu、Windows、macOS)运行任务,使开发更高效。"),a("span",{class:"VPBadge tip badge"},"CI/CD 自动化")])])],-1),a("h2",{id:"_7-全栈框架",tabindex:"-1"},[s("7. 全栈框架 "),a("a",{class:"header-anchor",href:"#_7-全栈框架","aria-label":"Permalink to “7. 全栈框架”"},"​")],-1),a("blockquote",null,[a("p",null,[a("strong",null,"同构元框架:Next.js、Nuxt"),s(",现代全栈开发倾向于使用“元框架”,它们模糊了客户端和服务器的界限,提供一体化的开发体验。")]),a("p",null,[a("strong",null,"企业级 Node 服务端框架:NestJS"),s(",一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架。")])],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://nextjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nextjs.org/favicon.ico?favicon.3fc65821.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Next.js")]),a("p",{class:"desc"},"Next.js 是一个基于 React、Node.js 的全栈 Web 开发框架,由 Vercel 公司维护,专为生产环境设计。它通过内置的服务器端渲染 (SSR)、静态站点生成 (SSG) 和增量静态再生成 (ISR) 技术,解决了传统 React 应用的 SEO 优化差 和首屏加载慢的问题,是目前最受欢迎的 React 应用开发框架之一。"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nuxtjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nuxt.com/icon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Nuxt")]),a("p",{class:"desc"},"是一个基于 Vue.js 的开源、免费的 Web 开发元框架(Meta-framework),专为构建高性能的服务端渲染(SSR)、静态站点生成(SSG)和单页应用(SPA)而设计。它集成了 Vite、Vue 3 和 Nitro 服务端引擎,旨在简化开发流程,提供卓越的 SEO 优化和开发人员体验"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nestjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nestjs.com/favicon-32x32.a39d94f4.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"NestJS")]),a("p",{class:"desc"},"NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架."),a("span",{class:"VPBadge tip badge"},"企业级 Node 框架")])])],-1),e('
对比维度Next.jsNuxtNestJS
框架定位React 全栈框架
(Isomorphic Meta-framework)
Vue 全栈框架
(Isomorphic Meta-framework)
企业级 Node.js 服务端框架
(Backend Framework)
底层驱动Webpack / Turbopack
React Server Components
Vite / Nitro 引擎
Vue3
Express / Fastify (底层可插拔)
纯 TypeScript
核心工程特性混合渲染 (SSR/SSG/ISR)
Server Actions (无缝 RPC)
边缘计算路由
混合渲染与预渲染
极致的自动导入 (Auto-imports)
开箱即用的模块化生态
依赖注入 (DI) / 控制反转 (IoC)
面向切面编程 (AOP)
强主张的模块化目录
数据流职责视图层渲染、BFF (服务于前端的后端)、轻量级聚合 API。视图层渲染、BFF (服务于前端的后端)、轻量级聚合 API。纯后端业务逻辑处理、微服务通信与编排、统一 API 供应。
最佳业务场景重 SEO 的 C 端产品 (电商、内容站); 敏捷迭代的 SaaS; 单仓库极速交付。重交互体验的 Web 应用; Vue 技术团队的全栈转型; 独立开发者建站。复杂领域驱动设计 (DDD) 系统; 多端复用的 API 中台; 庞大的微服务集群。
需规避的反模式承载高并发 CPU 密集型计算; 极其复杂的跨服务分布式事务。承载高并发 CPU 密集型计算; 极其复杂的跨服务分布式事务。仅需极简 CRUD 的小型外包项目; 强依赖首屏 HTML 直出的纯展示网页。
团队协作模型前端主导的敏捷全栈小队, 或追求“单兵作战”的极客团队。前端主导的敏捷全栈小队, 或 Vue 生态重度依赖团队。后端主导的中大型团队, 前后端物理分离的标准化开发流水线。

8. 部署与托管 (Deployment & Hosting)

',2),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://vercel.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.vercel.com/image/upload/front/favicon/vercel/apple-touch-icon-256x256.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vercel")]),a("p",{class:"desc"},"Vercel 是一个现代前端项目的理想部署平台,它零配置、支持自动部署和预览、拥有全球加速节点,广泛用于开源项目、个人作品集、企业网站等。 无论你是用React、Vue、Svelte 还是静态HTML,只需几步就可以将项目上线。"),a("span",{class:"VPBadge tip badge"},"前端边缘托管")]),a("a",{href:"https://www.netlify.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://www.netlify.com/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Netlify")]),a("p",{class:"desc"},"与 Vercel 类似,功能更全面:支持更多的框架和静态站点生成器,有表单处理、无服务器函数等功能,免费额度更大、还支持 A/B 测试和分析。Netlify 是一个基于云计算的网站部署和托管平台,专注于为开发者提供便捷的静态网站和Jamstack 应用部署服务。 它的核心优势在于将网站构建、部署、托管以及持续集成/ 持续部署(CI/CD)流程高度集成,极大地简化了开发和运维的复杂程度"),a("span",{class:"VPBadge tip badge"},"Jamstack 平台")]),a("a",{href:"https://pages.github.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Pages")]),a("p",{class:"desc"},"GitHub Pages 是一个由 GitHub 提供的、免费的静态网站托管服务。它允许用户直接从 GitHub 仓库(Repository)获取 HTML、CSS 和 JavaScript 文件,无需额外配置服务器即可快速部署个人主页、项目文档或博客。"),a("span",{class:"VPBadge tip badge"},"纯静态托管")])])],-1),a("h2",{id:"_9-学习资源与社区-learning-community",tabindex:"-1"},[s("9. 学习资源与社区 (Learning & Community) "),a("a",{class:"header-anchor",href:"#_9-学习资源与社区-learning-community","aria-label":"Permalink to “9. 学习资源与社区 (Learning & Community)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://javascriptweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"JavaScript Weekly")]),a("p",{class:"desc"},"每周分享最新的 JavaScript 相关技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://nodeweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Node Weekly")]),a("p",{class:"desc"},"每周分享最新的 Node.js 相关技术文章、库、工具和趋势。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://www.ruanyifeng.com/blog/weekly/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"阮一峰网络日志")]),a("p",{class:"desc"},"阮一峰的网络日志,每周五发布,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E6%97%A9%E8%AF%BB%E8%AF%BE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端早读课")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E5%B7%85",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之巅")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIxMzExMjYwOQ==&action=getalbum&album_id=1369610438157369345#wechat_redirect",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"凹凸实验室")]),a("p",{class:"desc"},"蒲公英·JELLY技术周刊,由京东·凹凸实验室维护整理的技术周刊,从团队专注的研究技术方向出发,深入挖掘业界热点,聚焦技术动态。技术周刊内容分类主要包括如下:基础技术、工程化、跨端框架技术、图形编程、服务端开发、桌面开发、人工智能等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E5%A4%A7%E5%85%A8",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端大全")]),a("p",{class:"desc"},"前端大全,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E7%A5%9E",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之神")]),a("p",{class:"desc"},"前端之神,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E7%A8%8B%E5%BA%8F%E5%91%98%E6%88%90%E9%95%BF%E6%8C%87%E5%8C%97",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"程序员成长指北")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%AD%97%E8%8A%82%E5%89%8D%E7%AB%AF-ByteFE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"ByteFE")]),a("p",{class:"desc"},"字节跳动前端团队维护的专业微信公众号,分享技术前沿、文章分享、实践干货等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%BB%8E%E8%BF%9B%E9%98%B6%E5%88%B0%E5%85%A5%E9%99%A2",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端从进阶到入院")]),a("p",{class:"desc"},"前端从进阶到入院,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://www.zhangxinxu.com/wordpress/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"张鑫旭-鑫空间-鑫生活")]),a("p",{class:"desc"},"张鑫旭的个人博客,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"网络博客")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E6%B7%98%E7%B3%BB%E5%89%8D%E7%AB%AF%E5%9B%A2%E9%98%9F",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"淘系前端团队")]),a("p",{class:"desc"},"淘宝前端团队,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")])])],-1)])])}const h=d(l,[["render",n]]);export{v as __pageData,h as default}; diff --git a/assets/fullstack_full-stack-resources.md.PB3ApNm8.lean.js b/assets/fullstack_full-stack-resources.md.B8aCWi5d.lean.js similarity index 99% rename from assets/fullstack_full-stack-resources.md.PB3ApNm8.lean.js rename to assets/fullstack_full-stack-resources.md.B8aCWi5d.lean.js index 9373fc0..174943f 100644 --- a/assets/fullstack_full-stack-resources.md.PB3ApNm8.lean.js +++ b/assets/fullstack_full-stack-resources.md.B8aCWi5d.lean.js @@ -1 +1 @@ -import{_ as d,c as i,o as c,d as e,a,e as s}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const v=JSON.parse('{"title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","frontmatter":{"date":"2026-02-06T15:58:53.000Z","title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","permalink":"/fullstack/full-stack-resources","categories":["资源推荐"],"tags":["资源推荐","全栈"]},"headers":[],"relativePath":"fullstack/full-stack-resources.md","filePath":"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md"}'),l={name:"fullstack/full-stack-resources.md"};function n(o,t,r,p,_,m){return c(),i("div",null,[...t[0]||(t[0]=[e("",3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTML",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/1200px-HTML5_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"HTML")]),a("p",{class:"desc"},"HTML (HyperText Markup Language) 是用于创建网页的标准标记语言,用于描述网页的结构和内容。它使用标签来定义文档的不同部分,如标题、段落、图像、链接等。HTML 是构建 Web 页面的基础,也是所有前端开发的起点。"),a("span",{class:"VPBadge tip badge"},"标记语言")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/CSS",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/CSS3_logo_and_wordmark.svg/1200px-CSS3_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"CSS")]),a("p",{class:"desc"},"CSS (Cascading Style Sheets) 是用于描述网页样式和布局的样式表语言。它定义了文档的外观,包括字体、颜色、间距、布局等。CSS 与 HTML 结合使用,实现了网页的结构与样式的分离,使得网页设计更加灵活和可维护。"),a("span",{class:"VPBadge tip badge"},"样式表")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/JavaScript",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/JavaScript-logo.png/1200px-JavaScript-logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"JavaScript")]),a("p",{class:"desc"},"JavaScript 是一种动态、弱类型的脚本语言,用于在 Web 浏览器中实现交互性和动态内容。它是 Web 开发的基础,也是前端开发的核心语言。"),a("span",{class:"VPBadge tip badge"},"脚本语言")]),a("a",{href:"https://www.typescriptlang.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Typescript_logo_2020.svg/1200px-Typescript_logo_2020.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"TypeScript")]),a("p",{class:"desc"},"TypeScript 是 JavaScript 的一个超集,添加了静态类型检查和其他高级功能,使得代码更加可靠和可维护。它在前端开发中得到广泛应用,尤其在 React 项目中。"),a("span",{class:"VPBadge tip badge"},"静态类型")]),a("a",{href:"https://webkit.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webkit.org/wp-content/themes/webkit/images/webkit.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"webkit")]),a("p",{class:"desc"},"WebKit 是一个开源的浏览器引擎,用于渲染网页内容。它是 Safari 浏览器的引擎,也是 Chrome 浏览器的一部分。WebKit 提供了高性能的网页渲染和交互功能,是构建现代 Web 应用的基础。"),a("span",{class:"VPBadge tip badge"},"浏览器引擎")]),a("a",{href:"https://nodejs.org/zh-cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Node.js_logo.svg/1200px-Node.js_logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Node.js")]),a("p",{class:"desc"},"Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于在服务器端执行 JavaScript 代码。它允许开发者使用 JavaScript 构建高性能的网络应用程序,如服务器端渲染、实时应用程序和 API 服务。"),a("span",{class:"VPBadge tip badge"},"服务器端")])])],-1),a("h2",{id:"_2-核心-ui-框架",tabindex:"-1"},[s("2. 核心 UI 框架 "),a("a",{class:"header-anchor",href:"#_2-核心-ui-框架","aria-label":"Permalink to “2. 核心 UI 框架”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://react.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/1200px-React-icon.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React")]),a("p",{class:"desc"},"React 是 Facebook 开发的用于构建用户界面的声明式 JavaScript 库,采用组件化架构,支持服务器端渲染和客户端交互。它允许开发者设计简单的视图,并根据数据变化高效更新渲染组件。"),a("span",{class:"VPBadge tip badge"},"声明式")]),a("a",{href:"https://vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue")]),a("p",{class:"desc"},"Vue.js 是一套用于构建用户界面的渐进式框架,采用组件化架构,支持服务器端渲染和客户端交互。强调易用性和高性能。其生态包含官方路由 (Vue Router) 和状态管理库 (Pinia)。"),a("span",{class:"VPBadge tip badge"},"渐进式")]),a("a",{href:"https://svelte.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Svelte_Logo.svg/1200px-Svelte_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Svelte")]),a("p",{class:"desc"},"Svelte 是一种全新的构建 Web 应用的方式,作为编译器将声明式组件转换为高效且能直接操作 DOM 的 JavaScript 代码,运行时开销极小。它强调组件化开发,开发者可以直接在 HTML 中编写组件逻辑,无需额外的运行时支持。"),a("span",{class:"VPBadge tip badge"},"编译时")])])],-1),a("h2",{id:"_3-样式与-ui-组件库-styling-component-libraries",tabindex:"-1"},[s("3. 样式与 UI 组件库 (Styling & Component Libraries) "),a("a",{class:"header-anchor",href:"#_3-样式与-ui-组件库-styling-component-libraries","aria-label":"Permalink to “3. 样式与 UI 组件库 (Styling & Component Libraries)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://tailwindcss.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Tailwind_CSS_Logo.svg/1200px-Tailwind_CSS_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Tailwind CSS")]),a("p",{class:"desc"},"现代前端首选的实用优先 (Utility-first) CSS 框架,通过类名组合实现样式,无需编写自定义 CSS。"),a("span",{class:"VPBadge tip badge"},"实用优先")]),a("a",{href:"https://daisyui.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://img.daisyui.com/images/daisyui/mark.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Daisy UI")]),a("p",{class:"desc"},"是一个基于 Tailwind CSS 的热门开源UI组件库,通过添加语义化类名(如 btn, card)来解决 Tailwind 冗长的代码问题,能帮开发者用更少的代码、更快地构建出干净、美观、响应式且支持主题自定义的 Web 界面。"),a("span",{class:"VPBadge tip badge"},"tailwind 插件")]),a("a",{href:"https://ui.shadcn.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://ui.shadcn.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"shadcn/ui")]),a("p",{class:"desc"},"shadcn/ui 不是一个传统的组件库,而是一种构建你自己的组件库的方法。它提供了一套精心设计、可访问的组件和代码分发平台,兼容你喜欢的框架和 AI 模型。"),a("span",{class:"VPBadge tip badge"},"组件原语")]),a("a",{href:"https://ant.design/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://gw.alipayobjects.com/zos/rmsportal/rlpTLlbMzTNYuZGGCVYM.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Ant Design")]),a("p",{class:"desc"},"AI 友好的「设计系统」,让美与智能并进,让工作充满「灵感」与「快乐」。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://element-plus.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://element-plus.org/images/element-plus-logo-small.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"element-plus")]),a("p",{class:"desc"},"Element Plus 是一个基于 Vue 3 设计的组件库,提供丰富的组件和样式,常用于构建后台管理系统。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://vuetifyjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://vuetifyjs.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vuetify")]),a("p",{class:"desc"},"为 Vue 3 设计的成熟 UI 库,常用于构建后台管理系统,提供丰富的组件和样式。"),a("span",{class:"VPBadge tip badge"},"组件库")])])],-1),a("h2",{id:"_4-路由与状态管理",tabindex:"-1"},[s("4. 路由与状态管理 "),a("a",{class:"header-anchor",href:"#_4-路由与状态管理","aria-label":"Permalink to “4. 路由与状态管理”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://reactrouter.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://reactrouter.com/favicon-dark.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Router")]),a("p",{class:"desc"},"React Router 是 React 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://router.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue Router")]),a("p",{class:"desc"},"Vue.js 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://github.com/pmndrs/zustand",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Zustand")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Redux 的现代化、极简主义精神继承者(自上而下的全局 Store),提供了一种简单的方式来管理全局状态。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://github.com/pmndrs/jotai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Jotai")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Recoil 的轻量化、高性能替代者(自下而上的原子化状态)。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://redux.js.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://redux.js.org/img/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Redux")]),a("p",{class:"desc"},"Redux 是一个预测性的状态容器,用于管理应用的全局状态,提供一致的状态更新和可预测的行为。"),a("span",{class:"VPBadge tip badge"},"不再推荐")]),a("a",{href:"https://pinia.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://pinia.vuejs.org/logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Pinia")]),a("p",{class:"desc"},"Vue.js 官方推荐的状态管理库,基于 Vue 3 Composition API 设计,提供简单、灵活的状态管理解决方案。"),a("span",{class:"VPBadge tip badge"},"状态管理")])])],-1),e("",3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Fetch API")]),a("p",{class:"desc"},"Fetch 是一个基于 Promise 的现代 JavaScript API,用于在浏览器中发起 HTTP 请求(AJAX),是 XMLHttpRequest (XHR) 的更简洁、更强大的替代方案。它允许页面在不重载的情况下从服务器获取数据,支持 GET、POST 等请求方法,并广泛应用于处理网络数据交互。"),a("span",{class:"VPBadge tip badge"},"原生 API")]),a("a",{href:"https://axios-http.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://axios-http.com/assets/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Axios")]),a("p",{class:"desc"},"Axios 是一个基于 Promise 的 HTTP 请求库,可运行在浏览器和 Node.js 环境中。它支持拦截请求和响应、转换数据、取消请求等功能,是前端开发中常用的 HTTP 请求库。"),a("span",{class:"VPBadge tip badge"},"全能请求库")]),a("a",{href:"https://swr.vercel.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://swr.vercel.app/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"SWR")]),a("p",{class:"desc"},'SWR 是由 Vercel 开发的一个基于 React Hooks 的轻量级数据请求库。它基于 "stale-while-revalidate" 策略,先返回缓存数据,再在后台请求最新数据,保证 UI 快速响应且数据保持更新。特点:极简主义,越轻越好,开箱即用,专注于 HTTP 缓存策略。'),a("span",{class:"VPBadge tip badge"},"按需验证缓存")]),a("a",{href:"https://tanstack.com/query/latest",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://tanstack.com/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Query")]),a("p",{class:"desc"},"React Query (现更名为 TanStack Query) 是一个功能强大的 React 服务端状态管理库。它专注于处理异步数据的获取、缓存、同步和更新,开箱即用地简化了 API 请求、缓存处理、数据过期更新和加载/错误状态管理。特点:功能主义大而全,不仅是 HTTP,可用于任何异步 Promise 管理。"),a("span",{class:"VPBadge tip badge"},"服务端状态管理")]),a("a",{href:"https://graphql.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://graphql.org/_next/static/media/logo-blurred.94c9eff4.webp",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GraphQL")]),a("p",{class:"desc"},"GraphQL 是一个用于 API 的查询语言、一种描述请求数据方法的语法,通常用于客户端从服务端加载数据,主要是为了解决 REST API 中过度获取和获取不足的问题。"),a("span",{class:"VPBadge tip badge"},"按需声明式查询")]),a("a",{href:"https://trpc.io/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://trpc.io/img/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"tRPC")]),a("p",{class:"desc"},"tRPC 是基于插件化理念设计的一款支持多语言、高性能的 RPC 开发框架,旨在无需定义专门 API Schema(如 Swagger/GraphQL)的情况下,实现前后端无缝、全栈类型安全的 API 调用。它让前端能像调用本地函数一样调用后端远程函数,大大提升开发效率。"),a("span",{class:"VPBadge tip badge"},"端到端类型安全")])])],-1),e("",9),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://cn.vite.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://cn.vite.dev/logo-without-border.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vite")]),a("p",{class:"desc"},"Vite 是一款速度极快的前端构建工具,为下一代 Web 应用程序提供支持,它摒弃了“先打包,再启动”的模式,开启了“原生 ESM”开发的新时代。"),a("span",{class:"VPBadge tip badge"},"极速 ESM 构建")]),a("a",{href:"https://rsbuild.rs/zh/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.rspack.rs/rsbuild/favicon-128x128.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Rsbuild")]),a("p",{class:"desc"},"Rsbuild 是一个由字节跳动 Web Infra 团队开源、基于 Rust 语言编写的 Rspack 驱动的高性能构建工具。它专注于为 Web 项目提供开箱即用的开发体验,通过内置的高性能工具(如 SWC、Lightning CSS)实现极快的构建速度,并提供类似 Vite/Webpack 的零配置或低配置体验。"),a("span",{class:"VPBadge tip badge"},"Rust 高性能构建")]),a("a",{href:"https://nextjscn.org/docs/app/api-reference/turbopack",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Turbopack")]),a("p",{class:"desc"},"Turbopack 是由 Vercel 开发、基于 Rust 编写的高性能增量打包工具,专为 JavaScript 和 TypeScript 优化。它被设计为 Webpack 的继任者,旨在通过优化的机器代码和高度增量计算能力,提供比 Vite 快 10 倍、比 Webpack 快 700 倍的本地开发体验,主要内置于 Next.js。"),a("span",{class:"VPBadge tip badge"},"增量极速打包")]),a("a",{href:"https://webpack.docschina.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webpack.docschina.org/favicon.f326220248556af65f41.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Webpack")]),a("p",{class:"desc"},"Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它在内部构建依赖图,将项目中的各种资源(如 JS、CSS、图片、TypeScript 等)视为模块,并最终打包成浏览器可直接运行的静态文件。通过 Loader 和 Plugin,它能处理复杂的开发需求。"),a("span",{class:"VPBadge tip badge"},"经典模块打包")]),a("a",{href:"https://github.com/features/actions",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Actions")]),a("p",{class:"desc"},"GitHub Actions 是 GitHub 推出的持续集成和持续交付 (CI/CD) 平台,旨在帮助开发者自动执行软件开发工作流。它允许在代码仓库中直接定义自动化流程(如构建、测试、部署),支持事件触发(如提交代码),并提供虚拟机环境(Ubuntu、Windows、macOS)运行任务,使开发更高效。"),a("span",{class:"VPBadge tip badge"},"CI/CD 自动化")])])],-1),a("h2",{id:"_7-全栈框架",tabindex:"-1"},[s("7. 全栈框架 "),a("a",{class:"header-anchor",href:"#_7-全栈框架","aria-label":"Permalink to “7. 全栈框架”"},"​")],-1),a("blockquote",null,[a("p",null,[a("strong",null,"同构元框架:Next.js、Nuxt"),s(",现代全栈开发倾向于使用“元框架”,它们模糊了客户端和服务器的界限,提供一体化的开发体验。")]),a("p",null,[a("strong",null,"企业级 Node 服务端框架:NestJS"),s(",一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架。")])],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://nextjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nextjs.org/favicon.ico?favicon.3fc65821.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Next.js")]),a("p",{class:"desc"},"Next.js 是一个基于 React、Node.js 的全栈 Web 开发框架,由 Vercel 公司维护,专为生产环境设计。它通过内置的服务器端渲染 (SSR)、静态站点生成 (SSG) 和增量静态再生成 (ISR) 技术,解决了传统 React 应用的 SEO 优化差 和首屏加载慢的问题,是目前最受欢迎的 React 应用开发框架之一。"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nuxtjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nuxt.com/icon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Nuxt")]),a("p",{class:"desc"},"是一个基于 Vue.js 的开源、免费的 Web 开发元框架(Meta-framework),专为构建高性能的服务端渲染(SSR)、静态站点生成(SSG)和单页应用(SPA)而设计。它集成了 Vite、Vue 3 和 Nitro 服务端引擎,旨在简化开发流程,提供卓越的 SEO 优化和开发人员体验"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nestjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nestjs.com/favicon-32x32.a39d94f4.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"NestJS")]),a("p",{class:"desc"},"NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架."),a("span",{class:"VPBadge tip badge"},"企业级 Node 框架")])])],-1),e("",2),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://vercel.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.vercel.com/image/upload/front/favicon/vercel/apple-touch-icon-256x256.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vercel")]),a("p",{class:"desc"},"Vercel 是一个现代前端项目的理想部署平台,它零配置、支持自动部署和预览、拥有全球加速节点,广泛用于开源项目、个人作品集、企业网站等。 无论你是用React、Vue、Svelte 还是静态HTML,只需几步就可以将项目上线。"),a("span",{class:"VPBadge tip badge"},"前端边缘托管")]),a("a",{href:"https://www.netlify.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://www.netlify.com/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Netlify")]),a("p",{class:"desc"},"与 Vercel 类似,功能更全面:支持更多的框架和静态站点生成器,有表单处理、无服务器函数等功能,免费额度更大、还支持 A/B 测试和分析。Netlify 是一个基于云计算的网站部署和托管平台,专注于为开发者提供便捷的静态网站和Jamstack 应用部署服务。 它的核心优势在于将网站构建、部署、托管以及持续集成/ 持续部署(CI/CD)流程高度集成,极大地简化了开发和运维的复杂程度"),a("span",{class:"VPBadge tip badge"},"Jamstack 平台")]),a("a",{href:"https://pages.github.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Pages")]),a("p",{class:"desc"},"GitHub Pages 是一个由 GitHub 提供的、免费的静态网站托管服务。它允许用户直接从 GitHub 仓库(Repository)获取 HTML、CSS 和 JavaScript 文件,无需额外配置服务器即可快速部署个人主页、项目文档或博客。"),a("span",{class:"VPBadge tip badge"},"纯静态托管")])])],-1),a("h2",{id:"_9-学习资源与社区-learning-community",tabindex:"-1"},[s("9. 学习资源与社区 (Learning & Community) "),a("a",{class:"header-anchor",href:"#_9-学习资源与社区-learning-community","aria-label":"Permalink to “9. 学习资源与社区 (Learning & Community)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://javascriptweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"JavaScript Weekly")]),a("p",{class:"desc"},"每周分享最新的 JavaScript 相关技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://nodeweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Node Weekly")]),a("p",{class:"desc"},"每周分享最新的 Node.js 相关技术文章、库、工具和趋势。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://www.ruanyifeng.com/blog/weekly/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"阮一峰网络日志")]),a("p",{class:"desc"},"阮一峰的网络日志,每周五发布,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E6%97%A9%E8%AF%BB%E8%AF%BE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端早读课")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E5%B7%85",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之巅")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIxMzExMjYwOQ==&action=getalbum&album_id=1369610438157369345#wechat_redirect",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"凹凸实验室")]),a("p",{class:"desc"},"蒲公英·JELLY技术周刊,由京东·凹凸实验室维护整理的技术周刊,从团队专注的研究技术方向出发,深入挖掘业界热点,聚焦技术动态。技术周刊内容分类主要包括如下:基础技术、工程化、跨端框架技术、图形编程、服务端开发、桌面开发、人工智能等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E5%A4%A7%E5%85%A8",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端大全")]),a("p",{class:"desc"},"前端大全,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E7%A5%9E",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之神")]),a("p",{class:"desc"},"前端之神,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E7%A8%8B%E5%BA%8F%E5%91%98%E6%88%90%E9%95%BF%E6%8C%87%E5%8C%97",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"程序员成长指北")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%AD%97%E8%8A%82%E5%89%8D%E7%AB%AF-ByteFE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"ByteFE")]),a("p",{class:"desc"},"字节跳动前端团队维护的专业微信公众号,分享技术前沿、文章分享、实践干货等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%BB%8E%E8%BF%9B%E9%98%B6%E5%88%B0%E5%85%A5%E9%99%A2",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端从进阶到入院")]),a("p",{class:"desc"},"前端从进阶到入院,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://www.zhangxinxu.com/wordpress/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"张鑫旭-鑫空间-鑫生活")]),a("p",{class:"desc"},"张鑫旭的个人博客,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"网络博客")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E6%B7%98%E7%B3%BB%E5%89%8D%E7%AB%AF%E5%9B%A2%E9%98%9F",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"淘系前端团队")]),a("p",{class:"desc"},"淘宝前端团队,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")])])],-1)])])}const h=d(l,[["render",n]]);export{v as __pageData,h as default}; +import{_ as d,c as i,o as c,d as e,a,e as s}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const v=JSON.parse('{"title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","frontmatter":{"date":"2026-02-06T15:58:53.000Z","title":"全栈技术资源推荐","description":"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。","permalink":"/fullstack/full-stack-resources","categories":["资源推荐"],"tags":["资源推荐","全栈"]},"headers":[],"relativePath":"fullstack/full-stack-resources.md","filePath":"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md"}'),l={name:"fullstack/full-stack-resources.md"};function n(o,t,r,p,_,m){return c(),i("div",null,[...t[0]||(t[0]=[e("",3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/HTML",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/1200px-HTML5_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"HTML")]),a("p",{class:"desc"},"HTML (HyperText Markup Language) 是用于创建网页的标准标记语言,用于描述网页的结构和内容。它使用标签来定义文档的不同部分,如标题、段落、图像、链接等。HTML 是构建 Web 页面的基础,也是所有前端开发的起点。"),a("span",{class:"VPBadge tip badge"},"标记语言")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/CSS",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/CSS3_logo_and_wordmark.svg/1200px-CSS3_logo_and_wordmark.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"CSS")]),a("p",{class:"desc"},"CSS (Cascading Style Sheets) 是用于描述网页样式和布局的样式表语言。它定义了文档的外观,包括字体、颜色、间距、布局等。CSS 与 HTML 结合使用,实现了网页的结构与样式的分离,使得网页设计更加灵活和可维护。"),a("span",{class:"VPBadge tip badge"},"样式表")]),a("a",{href:"https://developer.mozilla.org/zh-CN/docs/Web/JavaScript",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/JavaScript-logo.png/1200px-JavaScript-logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"JavaScript")]),a("p",{class:"desc"},"JavaScript 是一种动态、弱类型的脚本语言,用于在 Web 浏览器中实现交互性和动态内容。它是 Web 开发的基础,也是前端开发的核心语言。"),a("span",{class:"VPBadge tip badge"},"脚本语言")]),a("a",{href:"https://www.typescriptlang.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Typescript_logo_2020.svg/1200px-Typescript_logo_2020.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"TypeScript")]),a("p",{class:"desc"},"TypeScript 是 JavaScript 的一个超集,添加了静态类型检查和其他高级功能,使得代码更加可靠和可维护。它在前端开发中得到广泛应用,尤其在 React 项目中。"),a("span",{class:"VPBadge tip badge"},"静态类型")]),a("a",{href:"https://webkit.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webkit.org/wp-content/themes/webkit/images/webkit.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"webkit")]),a("p",{class:"desc"},"WebKit 是一个开源的浏览器引擎,用于渲染网页内容。它是 Safari 浏览器的引擎,也是 Chrome 浏览器的一部分。WebKit 提供了高性能的网页渲染和交互功能,是构建现代 Web 应用的基础。"),a("span",{class:"VPBadge tip badge"},"浏览器引擎")]),a("a",{href:"https://nodejs.org/zh-cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Node.js_logo.svg/1200px-Node.js_logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Node.js")]),a("p",{class:"desc"},"Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,用于在服务器端执行 JavaScript 代码。它允许开发者使用 JavaScript 构建高性能的网络应用程序,如服务器端渲染、实时应用程序和 API 服务。"),a("span",{class:"VPBadge tip badge"},"服务器端")])])],-1),a("h2",{id:"_2-核心-ui-框架",tabindex:"-1"},[s("2. 核心 UI 框架 "),a("a",{class:"header-anchor",href:"#_2-核心-ui-框架","aria-label":"Permalink to “2. 核心 UI 框架”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://react.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/1200px-React-icon.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React")]),a("p",{class:"desc"},"React 是 Facebook 开发的用于构建用户界面的声明式 JavaScript 库,采用组件化架构,支持服务器端渲染和客户端交互。它允许开发者设计简单的视图,并根据数据变化高效更新渲染组件。"),a("span",{class:"VPBadge tip badge"},"声明式")]),a("a",{href:"https://vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue")]),a("p",{class:"desc"},"Vue.js 是一套用于构建用户界面的渐进式框架,采用组件化架构,支持服务器端渲染和客户端交互。强调易用性和高性能。其生态包含官方路由 (Vue Router) 和状态管理库 (Pinia)。"),a("span",{class:"VPBadge tip badge"},"渐进式")]),a("a",{href:"https://svelte.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Svelte_Logo.svg/1200px-Svelte_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Svelte")]),a("p",{class:"desc"},"Svelte 是一种全新的构建 Web 应用的方式,作为编译器将声明式组件转换为高效且能直接操作 DOM 的 JavaScript 代码,运行时开销极小。它强调组件化开发,开发者可以直接在 HTML 中编写组件逻辑,无需额外的运行时支持。"),a("span",{class:"VPBadge tip badge"},"编译时")])])],-1),a("h2",{id:"_3-样式与-ui-组件库-styling-component-libraries",tabindex:"-1"},[s("3. 样式与 UI 组件库 (Styling & Component Libraries) "),a("a",{class:"header-anchor",href:"#_3-样式与-ui-组件库-styling-component-libraries","aria-label":"Permalink to “3. 样式与 UI 组件库 (Styling & Component Libraries)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://tailwindcss.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Tailwind_CSS_Logo.svg/1200px-Tailwind_CSS_Logo.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Tailwind CSS")]),a("p",{class:"desc"},"现代前端首选的实用优先 (Utility-first) CSS 框架,通过类名组合实现样式,无需编写自定义 CSS。"),a("span",{class:"VPBadge tip badge"},"实用优先")]),a("a",{href:"https://daisyui.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://img.daisyui.com/images/daisyui/mark.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Daisy UI")]),a("p",{class:"desc"},"是一个基于 Tailwind CSS 的热门开源UI组件库,通过添加语义化类名(如 btn, card)来解决 Tailwind 冗长的代码问题,能帮开发者用更少的代码、更快地构建出干净、美观、响应式且支持主题自定义的 Web 界面。"),a("span",{class:"VPBadge tip badge"},"tailwind 插件")]),a("a",{href:"https://ui.shadcn.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://ui.shadcn.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"shadcn/ui")]),a("p",{class:"desc"},"shadcn/ui 不是一个传统的组件库,而是一种构建你自己的组件库的方法。它提供了一套精心设计、可访问的组件和代码分发平台,兼容你喜欢的框架和 AI 模型。"),a("span",{class:"VPBadge tip badge"},"组件原语")]),a("a",{href:"https://ant.design/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://gw.alipayobjects.com/zos/rmsportal/rlpTLlbMzTNYuZGGCVYM.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Ant Design")]),a("p",{class:"desc"},"AI 友好的「设计系统」,让美与智能并进,让工作充满「灵感」与「快乐」。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://element-plus.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://element-plus.org/images/element-plus-logo-small.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"element-plus")]),a("p",{class:"desc"},"Element Plus 是一个基于 Vue 3 设计的组件库,提供丰富的组件和样式,常用于构建后台管理系统。"),a("span",{class:"VPBadge tip badge"},"组件库")]),a("a",{href:"https://vuetifyjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://vuetifyjs.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vuetify")]),a("p",{class:"desc"},"为 Vue 3 设计的成熟 UI 库,常用于构建后台管理系统,提供丰富的组件和样式。"),a("span",{class:"VPBadge tip badge"},"组件库")])])],-1),a("h2",{id:"_4-路由与状态管理",tabindex:"-1"},[s("4. 路由与状态管理 "),a("a",{class:"header-anchor",href:"#_4-路由与状态管理","aria-label":"Permalink to “4. 路由与状态管理”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://reactrouter.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://reactrouter.com/favicon-dark.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Router")]),a("p",{class:"desc"},"React Router 是 React 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://router.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Vue.js_Logo_2.svg/1200px-Vue.js_Logo_2.svg.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vue Router")]),a("p",{class:"desc"},"Vue.js 官方的路由管理器,用于构建单页应用 (SPA),提供动态路由匹配、嵌套路由、路由守卫等功能。"),a("span",{class:"VPBadge tip badge"},"路由管理器")]),a("a",{href:"https://github.com/pmndrs/zustand",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Zustand")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Redux 的现代化、极简主义精神继承者(自上而下的全局 Store),提供了一种简单的方式来管理全局状态。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://github.com/pmndrs/jotai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://avatars.githubusercontent.com/u/45790596?s=48&v=4",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Jotai")]),a("p",{class:"desc"},"pmndrs 社区出品,是 Recoil 的轻量化、高性能替代者(自下而上的原子化状态)。"),a("span",{class:"VPBadge tip badge"},"状态管理")]),a("a",{href:"https://redux.js.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://redux.js.org/img/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Redux")]),a("p",{class:"desc"},"Redux 是一个预测性的状态容器,用于管理应用的全局状态,提供一致的状态更新和可预测的行为。"),a("span",{class:"VPBadge tip badge"},"不再推荐")]),a("a",{href:"https://pinia.vuejs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://pinia.vuejs.org/logo.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Pinia")]),a("p",{class:"desc"},"Vue.js 官方推荐的状态管理库,基于 Vue 3 Composition API 设计,提供简单、灵活的状态管理解决方案。"),a("span",{class:"VPBadge tip badge"},"状态管理")])])],-1),e("",3),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Fetch API")]),a("p",{class:"desc"},"Fetch 是一个基于 Promise 的现代 JavaScript API,用于在浏览器中发起 HTTP 请求(AJAX),是 XMLHttpRequest (XHR) 的更简洁、更强大的替代方案。它允许页面在不重载的情况下从服务器获取数据,支持 GET、POST 等请求方法,并广泛应用于处理网络数据交互。"),a("span",{class:"VPBadge tip badge"},"原生 API")]),a("a",{href:"https://axios-http.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://axios-http.com/assets/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Axios")]),a("p",{class:"desc"},"Axios 是一个基于 Promise 的 HTTP 请求库,可运行在浏览器和 Node.js 环境中。它支持拦截请求和响应、转换数据、取消请求等功能,是前端开发中常用的 HTTP 请求库。"),a("span",{class:"VPBadge tip badge"},"全能请求库")]),a("a",{href:"https://swr.vercel.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://swr.vercel.app/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"SWR")]),a("p",{class:"desc"},'SWR 是由 Vercel 开发的一个基于 React Hooks 的轻量级数据请求库。它基于 "stale-while-revalidate" 策略,先返回缓存数据,再在后台请求最新数据,保证 UI 快速响应且数据保持更新。特点:极简主义,越轻越好,开箱即用,专注于 HTTP 缓存策略。'),a("span",{class:"VPBadge tip badge"},"按需验证缓存")]),a("a",{href:"https://tanstack.com/query/latest",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://tanstack.com/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"React Query")]),a("p",{class:"desc"},"React Query (现更名为 TanStack Query) 是一个功能强大的 React 服务端状态管理库。它专注于处理异步数据的获取、缓存、同步和更新,开箱即用地简化了 API 请求、缓存处理、数据过期更新和加载/错误状态管理。特点:功能主义大而全,不仅是 HTTP,可用于任何异步 Promise 管理。"),a("span",{class:"VPBadge tip badge"},"服务端状态管理")]),a("a",{href:"https://graphql.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://graphql.org/_next/static/media/logo-blurred.94c9eff4.webp",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GraphQL")]),a("p",{class:"desc"},"GraphQL 是一个用于 API 的查询语言、一种描述请求数据方法的语法,通常用于客户端从服务端加载数据,主要是为了解决 REST API 中过度获取和获取不足的问题。"),a("span",{class:"VPBadge tip badge"},"按需声明式查询")]),a("a",{href:"https://trpc.io/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://trpc.io/img/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"tRPC")]),a("p",{class:"desc"},"tRPC 是基于插件化理念设计的一款支持多语言、高性能的 RPC 开发框架,旨在无需定义专门 API Schema(如 Swagger/GraphQL)的情况下,实现前后端无缝、全栈类型安全的 API 调用。它让前端能像调用本地函数一样调用后端远程函数,大大提升开发效率。"),a("span",{class:"VPBadge tip badge"},"端到端类型安全")])])],-1),e("",9),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://cn.vite.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://cn.vite.dev/logo-without-border.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vite")]),a("p",{class:"desc"},"Vite 是一款速度极快的前端构建工具,为下一代 Web 应用程序提供支持,它摒弃了“先打包,再启动”的模式,开启了“原生 ESM”开发的新时代。"),a("span",{class:"VPBadge tip badge"},"极速 ESM 构建")]),a("a",{href:"https://rsbuild.rs/zh/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.rspack.rs/rsbuild/favicon-128x128.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Rsbuild")]),a("p",{class:"desc"},"Rsbuild 是一个由字节跳动 Web Infra 团队开源、基于 Rust 语言编写的 Rspack 驱动的高性能构建工具。它专注于为 Web 项目提供开箱即用的开发体验,通过内置的高性能工具(如 SWC、Lightning CSS)实现极快的构建速度,并提供类似 Vite/Webpack 的零配置或低配置体验。"),a("span",{class:"VPBadge tip badge"},"Rust 高性能构建")]),a("a",{href:"https://nextjscn.org/docs/app/api-reference/turbopack",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Turbopack")]),a("p",{class:"desc"},"Turbopack 是由 Vercel 开发、基于 Rust 编写的高性能增量打包工具,专为 JavaScript 和 TypeScript 优化。它被设计为 Webpack 的继任者,旨在通过优化的机器代码和高度增量计算能力,提供比 Vite 快 10 倍、比 Webpack 快 700 倍的本地开发体验,主要内置于 Next.js。"),a("span",{class:"VPBadge tip badge"},"增量极速打包")]),a("a",{href:"https://webpack.docschina.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://webpack.docschina.org/favicon.f326220248556af65f41.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Webpack")]),a("p",{class:"desc"},"Webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。它在内部构建依赖图,将项目中的各种资源(如 JS、CSS、图片、TypeScript 等)视为模块,并最终打包成浏览器可直接运行的静态文件。通过 Loader 和 Plugin,它能处理复杂的开发需求。"),a("span",{class:"VPBadge tip badge"},"经典模块打包")]),a("a",{href:"https://github.com/features/actions",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Actions")]),a("p",{class:"desc"},"GitHub Actions 是 GitHub 推出的持续集成和持续交付 (CI/CD) 平台,旨在帮助开发者自动执行软件开发工作流。它允许在代码仓库中直接定义自动化流程(如构建、测试、部署),支持事件触发(如提交代码),并提供虚拟机环境(Ubuntu、Windows、macOS)运行任务,使开发更高效。"),a("span",{class:"VPBadge tip badge"},"CI/CD 自动化")])])],-1),a("h2",{id:"_7-全栈框架",tabindex:"-1"},[s("7. 全栈框架 "),a("a",{class:"header-anchor",href:"#_7-全栈框架","aria-label":"Permalink to “7. 全栈框架”"},"​")],-1),a("blockquote",null,[a("p",null,[a("strong",null,"同构元框架:Next.js、Nuxt"),s(",现代全栈开发倾向于使用“元框架”,它们模糊了客户端和服务器的界限,提供一体化的开发体验。")]),a("p",null,[a("strong",null,"企业级 Node 服务端框架:NestJS"),s(",一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架。")])],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://nextjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nextjs.org/favicon.ico?favicon.3fc65821.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Next.js")]),a("p",{class:"desc"},"Next.js 是一个基于 React、Node.js 的全栈 Web 开发框架,由 Vercel 公司维护,专为生产环境设计。它通过内置的服务器端渲染 (SSR)、静态站点生成 (SSG) 和增量静态再生成 (ISR) 技术,解决了传统 React 应用的 SEO 优化差 和首屏加载慢的问题,是目前最受欢迎的 React 应用开发框架之一。"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nuxtjs.org/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nuxt.com/icon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Nuxt")]),a("p",{class:"desc"},"是一个基于 Vue.js 的开源、免费的 Web 开发元框架(Meta-framework),专为构建高性能的服务端渲染(SSR)、静态站点生成(SSG)和单页应用(SPA)而设计。它集成了 Vite、Vue 3 和 Nitro 服务端引擎,旨在简化开发流程,提供卓越的 SEO 优化和开发人员体验"),a("span",{class:"VPBadge tip badge"},"SSR/SSG/ISR")]),a("a",{href:"https://nestjs.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://nestjs.com/favicon-32x32.a39d94f4.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"NestJS")]),a("p",{class:"desc"},"NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它采用现代 TypeScript 编写,并完全支持它(同时也支持纯 JavaScript)。它融合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的理念。其设计深受 Angular 启发,内置了依赖注入(DI)、模块化和分层架构等强主张特性,被称为 Node.js 版的 Spring 框架."),a("span",{class:"VPBadge tip badge"},"企业级 Node 框架")])])],-1),e("",2),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://vercel.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://assets.vercel.com/image/upload/front/favicon/vercel/apple-touch-icon-256x256.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Vercel")]),a("p",{class:"desc"},"Vercel 是一个现代前端项目的理想部署平台,它零配置、支持自动部署和预览、拥有全球加速节点,广泛用于开源项目、个人作品集、企业网站等。 无论你是用React、Vue、Svelte 还是静态HTML,只需几步就可以将项目上线。"),a("span",{class:"VPBadge tip badge"},"前端边缘托管")]),a("a",{href:"https://www.netlify.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://www.netlify.com/favicon/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"Netlify")]),a("p",{class:"desc"},"与 Vercel 类似,功能更全面:支持更多的框架和静态站点生成器,有表单处理、无服务器函数等功能,免费额度更大、还支持 A/B 测试和分析。Netlify 是一个基于云计算的网站部署和托管平台,专注于为开发者提供便捷的静态网站和Jamstack 应用部署服务。 它的核心优势在于将网站构建、部署、托管以及持续集成/ 持续部署(CI/CD)流程高度集成,极大地简化了开发和运维的复杂程度"),a("span",{class:"VPBadge tip badge"},"Jamstack 平台")]),a("a",{href:"https://pages.github.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://github.com/fluidicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"GitHub Pages")]),a("p",{class:"desc"},"GitHub Pages 是一个由 GitHub 提供的、免费的静态网站托管服务。它允许用户直接从 GitHub 仓库(Repository)获取 HTML、CSS 和 JavaScript 文件,无需额外配置服务器即可快速部署个人主页、项目文档或博客。"),a("span",{class:"VPBadge tip badge"},"纯静态托管")])])],-1),a("h2",{id:"_9-学习资源与社区-learning-community",tabindex:"-1"},[s("9. 学习资源与社区 (Learning & Community) "),a("a",{class:"header-anchor",href:"#_9-学习资源与社区-learning-community","aria-label":"Permalink to “9. 学习资源与社区 (Learning & Community)”"},"​")],-1),a("div",{class:"container nav-card-container"},[a("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[a("a",{href:"https://javascriptweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"JavaScript Weekly")]),a("p",{class:"desc"},"每周分享最新的 JavaScript 相关技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://nodeweekly.com/issues",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"Node Weekly")]),a("p",{class:"desc"},"每周分享最新的 Node.js 相关技术文章、库、工具和趋势。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://www.ruanyifeng.com/blog/weekly/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"阮一峰网络日志")]),a("p",{class:"desc"},"阮一峰的网络日志,每周五发布,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E6%97%A9%E8%AF%BB%E8%AF%BE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端早读课")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E5%B7%85",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之巅")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzIxMzExMjYwOQ==&action=getalbum&album_id=1369610438157369345#wechat_redirect",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"凹凸实验室")]),a("p",{class:"desc"},"蒲公英·JELLY技术周刊,由京东·凹凸实验室维护整理的技术周刊,从团队专注的研究技术方向出发,深入挖掘业界热点,聚焦技术动态。技术周刊内容分类主要包括如下:基础技术、工程化、跨端框架技术、图形编程、服务端开发、桌面开发、人工智能等。"),a("span",{class:"VPBadge tip badge"},"技术周刊")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E5%A4%A7%E5%85%A8",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端大全")]),a("p",{class:"desc"},"前端大全,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%B9%8B%E7%A5%9E",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端之神")]),a("p",{class:"desc"},"前端之神,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E7%A8%8B%E5%BA%8F%E5%91%98%E6%88%90%E9%95%BF%E6%8C%87%E5%8C%97",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"程序员成长指北")]),a("p",{class:"desc"},"前端领域专业的微信公众号,发布一些与前端相关的深度技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%AD%97%E8%8A%82%E5%89%8D%E7%AB%AF-ByteFE",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"ByteFE")]),a("p",{class:"desc"},"字节跳动前端团队维护的专业微信公众号,分享技术前沿、文章分享、实践干货等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E5%89%8D%E7%AB%AF%E4%BB%8E%E8%BF%9B%E9%98%B6%E5%88%B0%E5%85%A5%E9%99%A2",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"前端从进阶到入院")]),a("p",{class:"desc"},"前端从进阶到入院,分享最新的前端技术文章、库、工具和趋势"),a("span",{class:"VPBadge tip badge"},"专业公众号")]),a("a",{href:"https://www.zhangxinxu.com/wordpress/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("span",{class:"name"},"张鑫旭-鑫空间-鑫生活")]),a("p",{class:"desc"},"张鑫旭的个人博客,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"网络博客")]),a("a",{href:"https://fed.chanceyu.com/?q=%5B%E6%9D%A5%E6%BA%90%5D%20%E6%B7%98%E7%B3%BB%E5%89%8D%E7%AB%AF%E5%9B%A2%E9%98%9F",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[a("div",{class:"nav-card__item__info"},[a("div",{class:"nav-card__item__img skeleton-image"},[a("img",{src:"https://res.wx.qq.com/a/wx_fed/assets/res/OTE0YTAw.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),a("span",{class:"name"},"淘系前端团队")]),a("p",{class:"desc"},"淘宝前端团队,分享最新的前端技术文章、库、工具和趋势等。"),a("span",{class:"VPBadge tip badge"},"专业公众号")])])],-1)])])}const h=d(l,[["render",n]]);export{v as __pageData,h as default}; diff --git a/assets/fullstack_jamstack.md.DsAC5gK_.js b/assets/fullstack_jamstack.md.5AOhPkSE.js similarity index 99% rename from assets/fullstack_jamstack.md.DsAC5gK_.js rename to assets/fullstack_jamstack.md.5AOhPkSE.js index a6fa29b..c96e058 100644 --- a/assets/fullstack_jamstack.md.DsAC5gK_.js +++ b/assets/fullstack_jamstack.md.5AOhPkSE.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"JAMStack 梳理与实践指南","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","frontmatter":{"date":"2025-11-14T22:33:39.000Z","title":"JAMStack 梳理与实践指南","aliases":["静态站点生成器","SSG"],"tldr":"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","permalink":"/fullstack/jamstack","tags":["tutorial","jamstack","frontend-architecture","next.js","static-site-generator"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/jamstack.md","filePath":"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md"}'),t={name:"fullstack/jamstack.md"};function p(h,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

JAMStack 梳理与实践指南

摘要总结:JAMStack 是一种以"预构建静态资产 + 客户端动态交互 + API 数据集成"为核心的 web 开发范式,名称源自 JavaScript、APIs、Markup 三个核心技术缩写。

其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。

本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi)的选型策略,并通过 Next.js + Vercel + Supabase + Contentful 的实战案例,完整演示了从项目初始化、内容配置、SSG 预渲染、动态评论集成到自动化部署的全流程。

JAMStack 是近几年前端领域备受关注的架构理念,它并非单一技术,而是一套以“高性能、高可靠、易扩展”为核心的开发范式。其名称源于三个核心技术的缩写:JavaScript(客户端交互逻辑)、APIs(通过第三方/自建接口获取数据)、Markup(预渲染的静态标记,如 HTML)。本质是“预渲染静态页面 + 客户端动态交互 + 接口数据集成”的架构模式,彻底改变了传统动态网站的部署与运行方式。

1. JAMStack 核心概念与核心特性

1.1 核心定义

JAMStack 的核心是“预构建静态资产”——网站部署前,所有页面已通过构建工具(如 Gatsby、Next.js)渲染为静态 HTML、CSS、JS 文件,部署时仅需将这些静态文件托管到 CDN 即可。用户访问时,直接从 CDN 加载静态资源,无需后端服务器动态生成页面,仅在需要时通过 API 调用获取动态数据(如用户信息、实时数据)。

1.2 核心特性(与传统动态网站对比)

特性JAMStack传统动态网站(如 PHP/Java 后端渲染)
页面生成时机构建时预渲染(部署前完成)请求时动态生成(用户访问时后端计算)
服务器依赖无(仅需 CDN 托管静态资源)强依赖后端服务器(需运行应用服务)
性能极高(CDN 全球分发,就近加载)中等(受服务器性能、网络延迟影响)
可靠性极高(静态资源无单点故障)中等(依赖后端服务器稳定性)
扩展性天然支持(CDN 弹性扩容)需配置服务器集群、负载均衡,成本高
安全性高(无服务器端代码,攻击面极小)较低(需防护 SQL 注入、XSS 等攻击)
开发/部署成本低(静态托管免费/低成本,无需运维服务器)高(需服务器运维、扩容、安全防护)

1.3 关键误区澄清

  • ❌ 误区1:JAMStack = 纯静态网站(无动态交互)

    ✅ 正解:JAMStack 支持动态交互,只是“页面骨架”预渲染为静态,动态数据通过 JavaScript 调用 API 实现(如登录、评论、实时数据展示)。

  • ❌ 误区2:JAMStack 只能做博客/文档类网站

    ✅ 正解:可覆盖绝大多数场景,包括电商网站、管理后台、SaaS 应用(如 Netlify、Vercel 本身就是基于 JAMStack 构建的)。

  • ❌ 误区3:JAMStack 不需要后端

    ✅ 正解:需要后端,但后端仅提供 API 接口(无页面渲染逻辑),可使用第三方 BaaS 服务(如 Firebase、Supabase)替代自建后端,降低开发成本。

2. JAMStack 核心技术栈(工具链选型)

JAMStack 的实现依赖“构建工具 + 静态托管 + API/BaaS + 可选的无头 CMS”,以下是主流工具选型推荐:

2.1 核心构建工具(静态站点生成器 SSG)

负责将源码(Markdown、组件、数据)预渲染为静态 HTML,是 JAMStack 的核心工具:

工具核心优势适用场景技术栈依赖
Next.js支持 SSG/SSR/ISR 混合渲染,React 生态,灵活度高复杂应用(电商、SaaS、管理后台)React
GatsbyGraphQL 数据层,插件生态丰富,优化极致博客、文档、营销网站React
Nuxt.jsVue 生态,支持 SSG/SSR,易用性强全场景 Vue 项目Vue
11ty(Eleventy)轻量无依赖,原生支持 Markdown,配置简单小型博客、静态文档原生 JS/模板引擎

2.2 静态资源托管(部署平台)

无需自建服务器,直接托管预构建的静态文件,提供全球 CDN 分发:

  • 主流平台:Vercel(Next.js 官方推荐,免费入门,一键部署)、Netlify(JAMStack 先驱,功能全面,支持表单/无服务器函数)、Cloudflare Pages(免费、CDN 速度快)、GitHub Pages(适合小型项目,免费无广告)。
  • 自建方案:将静态文件上传到阿里云 OSS + CDN、腾讯云 COS + CDN,适合需要私有化部署的场景。

2.3 API/BaaS 服务(后端能力补充)

JAMStack 无自建后端,需通过 API 获取动态能力(如数据库操作、用户认证):

  • 用户认证:Auth0、NextAuth.js(Next.js 专属)、Firebase Auth。
  • 数据库/存储:Supabase(开源 Firebase 替代方案,支持 PostgreSQL + 存储 + 认证)、Firebase Firestore、MongoDB Atlas。
  • 无服务器函数(Serverless Functions):Vercel Functions、Netlify Functions(无需部署独立 API 服务,在静态项目中直接编写 Node.js 函数,处理后端逻辑)。
  • 第三方 API:支付(Stripe)、邮件(SendGrid)、地图(高德/谷歌地图 API)等。

2.4 无头 CMS(内容管理)

适合非技术人员维护内容(如博客文章、产品信息),提供 API 供构建工具拉取数据:

  • 主流选择:Contentful、Sanity、Strapi(开源,可自建)、Ghost(专注博客)。
  • 核心作用:内容与代码分离,编辑者在 CMS 中修改内容后,触发构建工具重新预渲染静态页面(或通过 ISR 增量更新)。

3. JAMStack 项目实践:从 0 到 1 搭建博客网站

以“Next.js + Vercel + Supabase + Contentful”为例,搭建一个支持内容管理、用户评论的博客网站,步骤如下:

3.1 技术栈选型

  • 构建工具:Next.js(支持 SSG 预渲染,方便后续扩展动态功能)。
  • 托管平台:Vercel(一键部署,自动构建,全球 CDN)。
  • 内容管理:Contentful(免费版足够个人博客使用,API 友好)。
  • 动态功能:Supabase(提供 PostgreSQL 数据库,存储用户评论;Auth 功能实现评论登录)。
  • 样式方案:Tailwind CSS(快速开发,响应式设计)。

3.2 具体实施步骤

步骤 1:初始化 Next.js 项目(SSG 模式)

首先创建 Next.js 项目,开启 SSG 预渲染模式(Next.js 13+ 推荐 App Router):

bash
# 1. 创建项目
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"JAMStack 梳理与实践指南","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","frontmatter":{"date":"2025-11-14T22:33:39.000Z","title":"JAMStack 梳理与实践指南","aliases":["静态站点生成器","SSG"],"tldr":"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","permalink":"/fullstack/jamstack","tags":["tutorial","jamstack","frontend-architecture","next.js","static-site-generator"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/jamstack.md","filePath":"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md"}'),t={name:"fullstack/jamstack.md"};function p(h,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

JAMStack 梳理与实践指南

摘要总结:JAMStack 是一种以"预构建静态资产 + 客户端动态交互 + API 数据集成"为核心的 web 开发范式,名称源自 JavaScript、APIs、Markup 三个核心技术缩写。

其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。

本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi)的选型策略,并通过 Next.js + Vercel + Supabase + Contentful 的实战案例,完整演示了从项目初始化、内容配置、SSG 预渲染、动态评论集成到自动化部署的全流程。

JAMStack 是近几年前端领域备受关注的架构理念,它并非单一技术,而是一套以“高性能、高可靠、易扩展”为核心的开发范式。其名称源于三个核心技术的缩写:JavaScript(客户端交互逻辑)、APIs(通过第三方/自建接口获取数据)、Markup(预渲染的静态标记,如 HTML)。本质是“预渲染静态页面 + 客户端动态交互 + 接口数据集成”的架构模式,彻底改变了传统动态网站的部署与运行方式。

1. JAMStack 核心概念与核心特性

1.1 核心定义

JAMStack 的核心是“预构建静态资产”——网站部署前,所有页面已通过构建工具(如 Gatsby、Next.js)渲染为静态 HTML、CSS、JS 文件,部署时仅需将这些静态文件托管到 CDN 即可。用户访问时,直接从 CDN 加载静态资源,无需后端服务器动态生成页面,仅在需要时通过 API 调用获取动态数据(如用户信息、实时数据)。

1.2 核心特性(与传统动态网站对比)

特性JAMStack传统动态网站(如 PHP/Java 后端渲染)
页面生成时机构建时预渲染(部署前完成)请求时动态生成(用户访问时后端计算)
服务器依赖无(仅需 CDN 托管静态资源)强依赖后端服务器(需运行应用服务)
性能极高(CDN 全球分发,就近加载)中等(受服务器性能、网络延迟影响)
可靠性极高(静态资源无单点故障)中等(依赖后端服务器稳定性)
扩展性天然支持(CDN 弹性扩容)需配置服务器集群、负载均衡,成本高
安全性高(无服务器端代码,攻击面极小)较低(需防护 SQL 注入、XSS 等攻击)
开发/部署成本低(静态托管免费/低成本,无需运维服务器)高(需服务器运维、扩容、安全防护)

1.3 关键误区澄清

  • ❌ 误区1:JAMStack = 纯静态网站(无动态交互)

    ✅ 正解:JAMStack 支持动态交互,只是“页面骨架”预渲染为静态,动态数据通过 JavaScript 调用 API 实现(如登录、评论、实时数据展示)。

  • ❌ 误区2:JAMStack 只能做博客/文档类网站

    ✅ 正解:可覆盖绝大多数场景,包括电商网站、管理后台、SaaS 应用(如 Netlify、Vercel 本身就是基于 JAMStack 构建的)。

  • ❌ 误区3:JAMStack 不需要后端

    ✅ 正解:需要后端,但后端仅提供 API 接口(无页面渲染逻辑),可使用第三方 BaaS 服务(如 Firebase、Supabase)替代自建后端,降低开发成本。

2. JAMStack 核心技术栈(工具链选型)

JAMStack 的实现依赖“构建工具 + 静态托管 + API/BaaS + 可选的无头 CMS”,以下是主流工具选型推荐:

2.1 核心构建工具(静态站点生成器 SSG)

负责将源码(Markdown、组件、数据)预渲染为静态 HTML,是 JAMStack 的核心工具:

工具核心优势适用场景技术栈依赖
Next.js支持 SSG/SSR/ISR 混合渲染,React 生态,灵活度高复杂应用(电商、SaaS、管理后台)React
GatsbyGraphQL 数据层,插件生态丰富,优化极致博客、文档、营销网站React
Nuxt.jsVue 生态,支持 SSG/SSR,易用性强全场景 Vue 项目Vue
11ty(Eleventy)轻量无依赖,原生支持 Markdown,配置简单小型博客、静态文档原生 JS/模板引擎

2.2 静态资源托管(部署平台)

无需自建服务器,直接托管预构建的静态文件,提供全球 CDN 分发:

  • 主流平台:Vercel(Next.js 官方推荐,免费入门,一键部署)、Netlify(JAMStack 先驱,功能全面,支持表单/无服务器函数)、Cloudflare Pages(免费、CDN 速度快)、GitHub Pages(适合小型项目,免费无广告)。
  • 自建方案:将静态文件上传到阿里云 OSS + CDN、腾讯云 COS + CDN,适合需要私有化部署的场景。

2.3 API/BaaS 服务(后端能力补充)

JAMStack 无自建后端,需通过 API 获取动态能力(如数据库操作、用户认证):

  • 用户认证:Auth0、NextAuth.js(Next.js 专属)、Firebase Auth。
  • 数据库/存储:Supabase(开源 Firebase 替代方案,支持 PostgreSQL + 存储 + 认证)、Firebase Firestore、MongoDB Atlas。
  • 无服务器函数(Serverless Functions):Vercel Functions、Netlify Functions(无需部署独立 API 服务,在静态项目中直接编写 Node.js 函数,处理后端逻辑)。
  • 第三方 API:支付(Stripe)、邮件(SendGrid)、地图(高德/谷歌地图 API)等。

2.4 无头 CMS(内容管理)

适合非技术人员维护内容(如博客文章、产品信息),提供 API 供构建工具拉取数据:

  • 主流选择:Contentful、Sanity、Strapi(开源,可自建)、Ghost(专注博客)。
  • 核心作用:内容与代码分离,编辑者在 CMS 中修改内容后,触发构建工具重新预渲染静态页面(或通过 ISR 增量更新)。

3. JAMStack 项目实践:从 0 到 1 搭建博客网站

以“Next.js + Vercel + Supabase + Contentful”为例,搭建一个支持内容管理、用户评论的博客网站,步骤如下:

3.1 技术栈选型

  • 构建工具:Next.js(支持 SSG 预渲染,方便后续扩展动态功能)。
  • 托管平台:Vercel(一键部署,自动构建,全球 CDN)。
  • 内容管理:Contentful(免费版足够个人博客使用,API 友好)。
  • 动态功能:Supabase(提供 PostgreSQL 数据库,存储用户评论;Auth 功能实现评论登录)。
  • 样式方案:Tailwind CSS(快速开发,响应式设计)。

3.2 具体实施步骤

步骤 1:初始化 Next.js 项目(SSG 模式)

首先创建 Next.js 项目,开启 SSG 预渲染模式(Next.js 13+ 推荐 App Router):

bash
# 1. 创建项目
 npx create-next-app@latest jamstack-blog --typescript --tailwind --eslint
 cd jamstack-blog
 
diff --git a/assets/fullstack_jamstack.md.DsAC5gK_.lean.js b/assets/fullstack_jamstack.md.5AOhPkSE.lean.js
similarity index 94%
rename from assets/fullstack_jamstack.md.DsAC5gK_.lean.js
rename to assets/fullstack_jamstack.md.5AOhPkSE.lean.js
index 5ab089b..8bf9265 100644
--- a/assets/fullstack_jamstack.md.DsAC5gK_.lean.js
+++ b/assets/fullstack_jamstack.md.5AOhPkSE.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"JAMStack 梳理与实践指南","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","frontmatter":{"date":"2025-11-14T22:33:39.000Z","title":"JAMStack 梳理与实践指南","aliases":["静态站点生成器","SSG"],"tldr":"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","permalink":"/fullstack/jamstack","tags":["tutorial","jamstack","frontend-architecture","next.js","static-site-generator"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/jamstack.md","filePath":"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md"}'),t={name:"fullstack/jamstack.md"};function p(h,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",56)])])}const y=i(t,[["render",p]]);export{g as __pageData,y as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"JAMStack 梳理与实践指南","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","frontmatter":{"date":"2025-11-14T22:33:39.000Z","title":"JAMStack 梳理与实践指南","aliases":["静态站点生成器","SSG"],"tldr":"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式","description":"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。","permalink":"/fullstack/jamstack","tags":["tutorial","jamstack","frontend-architecture","next.js","static-site-generator"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/jamstack.md","filePath":"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md"}'),t={name:"fullstack/jamstack.md"};function p(h,s,k,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",56)])])}const y=i(t,[["render",p]]);export{g as __pageData,y as default};
diff --git a/assets/fullstack_module-programming-practice-guide.md.BvZSNC5t.js b/assets/fullstack_module-programming-practice-guide.md.GX-fmZot.js
similarity index 99%
rename from assets/fullstack_module-programming-practice-guide.md.BvZSNC5t.js
rename to assets/fullstack_module-programming-practice-guide.md.GX-fmZot.js
index fef3989..2bc5612 100644
--- a/assets/fullstack_module-programming-practice-guide.md.BvZSNC5t.js
+++ b/assets/fullstack_module-programming-practice-guide.md.GX-fmZot.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"模块化编程实践指南","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","frontmatter":{"date":"2024-05-18T22:49:57.000Z","title":"模块化编程实践指南","tldr":"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","permalink":"/fullstack/module-programming-practice-guide","tags":["tutorial","ESM","DDD","微前端"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-practice-guide.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md"}'),p={name:"fullstack/module-programming-practice-guide.md"};function h(k,s,t,e,r,F){return n(),a("div",null,[...s[0]||(s[0]=[l(`

模块化编程实践指南

作为模块化编程系列的总览文章,本文系统梳理了从基础概念到大型项目架构设计的全栈知识体系。首先介绍分层架构设计,包括前端 React 分层与后端 NestJS 分层,以及 DDD 四层架构。随后探讨微前端架构,解析 iframe、Web Components、single-spa、qiankun、模块联邦等方案的优劣势,并提供模块联邦的完整实战配置。系列文章涵盖 CommonJS、AMD、UMD、ES Modules 等规范演进,以及 TypeScript 模块增强、工程化实践与 Node.js 模块化。

1. 引言

模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。

前面的系列文章主要有:

本文将重点介绍大型项目中的模块化设计。

2.分层架构设计

分层架构是大型项目中常用的模块化设计模式,它将系统分为多个层次,每层负责特定的功能。

2.1 前端分层架构

以 React 技术栈为例,一个典型的前端分层架构通常包含以下核心层次:

层级说明
表现层负责 UI 渲染,包含组件与页面,遵循原子设计(Atomic Design)方法论
业务逻辑层封装业务规则与流程,通过自定义 Hooks 和服务实现
数据访问层处理与后端的通信,包括 API 请求、数据缓存与同步策略
状态管理层管理全局与局部状态,确保数据流的可预测性
路由层定义导航结构与路由守卫,处理权限控制与代码分割
基础设施层提供横切关注点支持,包括工具函数、常量定义与配置管理

以下是一个基于 React + TypeScript 的现代项目目录结构示例:

shell
src/
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"模块化编程实践指南","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","frontmatter":{"date":"2024-05-18T22:49:57.000Z","title":"模块化编程实践指南","tldr":"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","permalink":"/fullstack/module-programming-practice-guide","tags":["tutorial","ESM","DDD","微前端"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-practice-guide.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md"}'),p={name:"fullstack/module-programming-practice-guide.md"};function h(k,s,t,e,r,F){return n(),a("div",null,[...s[0]||(s[0]=[l(`

模块化编程实践指南

作为模块化编程系列的总览文章,本文系统梳理了从基础概念到大型项目架构设计的全栈知识体系。首先介绍分层架构设计,包括前端 React 分层与后端 NestJS 分层,以及 DDD 四层架构。随后探讨微前端架构,解析 iframe、Web Components、single-spa、qiankun、模块联邦等方案的优劣势,并提供模块联邦的完整实战配置。系列文章涵盖 CommonJS、AMD、UMD、ES Modules 等规范演进,以及 TypeScript 模块增强、工程化实践与 Node.js 模块化。

1. 引言

模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。

前面的系列文章主要有:

本文将重点介绍大型项目中的模块化设计。

2.分层架构设计

分层架构是大型项目中常用的模块化设计模式,它将系统分为多个层次,每层负责特定的功能。

2.1 前端分层架构

以 React 技术栈为例,一个典型的前端分层架构通常包含以下核心层次:

层级说明
表现层负责 UI 渲染,包含组件与页面,遵循原子设计(Atomic Design)方法论
业务逻辑层封装业务规则与流程,通过自定义 Hooks 和服务实现
数据访问层处理与后端的通信,包括 API 请求、数据缓存与同步策略
状态管理层管理全局与局部状态,确保数据流的可预测性
路由层定义导航结构与路由守卫,处理权限控制与代码分割
基础设施层提供横切关注点支持,包括工具函数、常量定义与配置管理

以下是一个基于 React + TypeScript 的现代项目目录结构示例:

shell
src/
 ├── app/                    # 应用层:应用配置和入口
    ├── App.tsx             # 应用根组件
    ├── Router.tsx          # 路由配置
diff --git a/assets/fullstack_module-programming-practice-guide.md.BvZSNC5t.lean.js b/assets/fullstack_module-programming-practice-guide.md.GX-fmZot.lean.js
similarity index 94%
rename from assets/fullstack_module-programming-practice-guide.md.BvZSNC5t.lean.js
rename to assets/fullstack_module-programming-practice-guide.md.GX-fmZot.lean.js
index cd17b4e..354091a 100644
--- a/assets/fullstack_module-programming-practice-guide.md.BvZSNC5t.lean.js
+++ b/assets/fullstack_module-programming-practice-guide.md.GX-fmZot.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"模块化编程实践指南","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","frontmatter":{"date":"2024-05-18T22:49:57.000Z","title":"模块化编程实践指南","tldr":"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","permalink":"/fullstack/module-programming-practice-guide","tags":["tutorial","ESM","DDD","微前端"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-practice-guide.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md"}'),p={name:"fullstack/module-programming-practice-guide.md"};function h(k,s,t,e,r,F){return n(),a("div",null,[...s[0]||(s[0]=[l("",108)])])}const E=i(p,[["render",h]]);export{g as __pageData,E as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"模块化编程实践指南","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","frontmatter":{"date":"2024-05-18T22:49:57.000Z","title":"模块化编程实践指南","tldr":"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。","description":"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。","permalink":"/fullstack/module-programming-practice-guide","tags":["tutorial","ESM","DDD","微前端"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-practice-guide.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md"}'),p={name:"fullstack/module-programming-practice-guide.md"};function h(k,s,t,e,r,F){return n(),a("div",null,[...s[0]||(s[0]=[l("",108)])])}const E=i(p,[["render",h]]);export{g as __pageData,E as default};
diff --git a/assets/fullstack_module-programming-principles-best-practices.md.CkS1Ktf9.js b/assets/fullstack_module-programming-principles-best-practices.md.Kt0aczUY.js
similarity index 99%
rename from assets/fullstack_module-programming-principles-best-practices.md.CkS1Ktf9.js
rename to assets/fullstack_module-programming-principles-best-practices.md.Kt0aczUY.js
index 9379fd4..547e494 100644
--- a/assets/fullstack_module-programming-principles-best-practices.md.CkS1Ktf9.js
+++ b/assets/fullstack_module-programming-principles-best-practices.md.Kt0aczUY.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"模块化编程原则梳理与总结","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","frontmatter":{"date":"2024-05-17T22:30:50.000Z","title":"模块化编程原则梳理与总结","tldr":"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","permalink":"/fullstack/module-programming-principles-best-practices","abstract":"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。","tags":["concept","solid-principles","code-organization","best-practices","naming-conventions"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-principles-best-practices.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md"}'),p={name:"fullstack/module-programming-principles-best-practices.md"};function h(e,s,t,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[l(`

模块化编程原则梳理与总结

如果说掌握模块化语法是“术”,那么理解其背后的设计原则就是“道”。在大型前端工程中,乱用模块化往往比不用更糟糕。为了构建出既健壮又易于扩展的系统,我们需要遵循一套行之有效的工程准则。

1. 单一职责原则

核心思想:一个模块应当有且只有一个被改变的原因。

模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。

代码演示:

javascript
// ✅ 推荐:职责拆分明确
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"模块化编程原则梳理与总结","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","frontmatter":{"date":"2024-05-17T22:30:50.000Z","title":"模块化编程原则梳理与总结","tldr":"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","permalink":"/fullstack/module-programming-principles-best-practices","abstract":"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。","tags":["concept","solid-principles","code-organization","best-practices","naming-conventions"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-principles-best-practices.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md"}'),p={name:"fullstack/module-programming-principles-best-practices.md"};function h(e,s,t,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[l(`

模块化编程原则梳理与总结

如果说掌握模块化语法是“术”,那么理解其背后的设计原则就是“道”。在大型前端工程中,乱用模块化往往比不用更糟糕。为了构建出既健壮又易于扩展的系统,我们需要遵循一套行之有效的工程准则。

1. 单一职责原则

核心思想:一个模块应当有且只有一个被改变的原因。

模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。

代码演示:

javascript
// ✅ 推荐:职责拆分明确
 // user-service.js - 仅处理用户数据的 CRUD
 export const getUser = async (id) => { /* ... */ };
 
diff --git a/assets/fullstack_module-programming-principles-best-practices.md.CkS1Ktf9.lean.js b/assets/fullstack_module-programming-principles-best-practices.md.Kt0aczUY.lean.js
similarity index 97%
rename from assets/fullstack_module-programming-principles-best-practices.md.CkS1Ktf9.lean.js
rename to assets/fullstack_module-programming-principles-best-practices.md.Kt0aczUY.lean.js
index 9fbed26..d955e91 100644
--- a/assets/fullstack_module-programming-principles-best-practices.md.CkS1Ktf9.lean.js
+++ b/assets/fullstack_module-programming-principles-best-practices.md.Kt0aczUY.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"模块化编程原则梳理与总结","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","frontmatter":{"date":"2024-05-17T22:30:50.000Z","title":"模块化编程原则梳理与总结","tldr":"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","permalink":"/fullstack/module-programming-principles-best-practices","abstract":"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。","tags":["concept","solid-principles","code-organization","best-practices","naming-conventions"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-principles-best-practices.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md"}'),p={name:"fullstack/module-programming-principles-best-practices.md"};function h(e,s,t,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[l("",30)])])}const c=i(p,[["render",h]]);export{g as __pageData,c as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"模块化编程原则梳理与总结","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","frontmatter":{"date":"2024-05-17T22:30:50.000Z","title":"模块化编程原则梳理与总结","tldr":"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。","description":"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。","permalink":"/fullstack/module-programming-principles-best-practices","abstract":"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。","tags":["concept","solid-principles","code-organization","best-practices","naming-conventions"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/module-programming-principles-best-practices.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md"}'),p={name:"fullstack/module-programming-principles-best-practices.md"};function h(e,s,t,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[l("",30)])])}const c=i(p,[["render",h]]);export{g as __pageData,c as default};
diff --git a/assets/fullstack_networking-polling-optimization.md.Co1K2del.js b/assets/fullstack_networking-polling-optimization.md.CsfHVMMa.js
similarity index 99%
rename from assets/fullstack_networking-polling-optimization.md.Co1K2del.js
rename to assets/fullstack_networking-polling-optimization.md.CsfHVMMa.js
index 7123af5..a3a498d 100644
--- a/assets/fullstack_networking-polling-optimization.md.Co1K2del.js
+++ b/assets/fullstack_networking-polling-optimization.md.CsfHVMMa.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","frontmatter":{"date":"2026-02-25T22:10:48.000Z","title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","tldr":"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","tags":["HTTP 轮询","退避轮询","长轮询"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-polling-optimization"},"headers":[],"relativePath":"fullstack/networking-polling-optimization.md","filePath":"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md"}'),p={name:"fullstack/networking-polling-optimization.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策

摘要总结: 针对传统固定频率轮询的服务器资源浪费问题,系统分析退避轮询与长轮询两种优化策略的核心原理与运行机制。通过 TypeScript 客户端与 NestJS 服务端的完整实现示例,对比两种方案在实时性、资源占用、复杂度等维度的差异。构建包含任务耗时、并发规模、基础设施约束的技术选型决策树,并提出退避+长轮询级联、按业务分级等混合策略建议。结论表明,低实时要求高并发场景选退避轮询,高实时要求中低并发场景选长轮询,复杂场景可两者结合。

1. 引言

在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。

📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。

在当前众多顶级的 AI AIGC 应用(如 Midjourney 类的第三方集成应用、Stable Diffusion 商业平台、长视频生成等)中,任务处理往往需要数十秒甚至数分钟。在面对海量并发和复杂的网关负载均衡时,HTTP 轮询因其无状态、易扩展、断连恢复成本极低的特性,成为了架构师经过深思熟虑后的首选方案。

然而,传统的固定频率轮询(如每秒请求一次)对服务器极不友好。为了兼顾用户体验与服务器的稳定性,本文将深入探讨两种常用的 HTTP 轮询优化策略:退避轮询(Backoff Polling) 与 长轮询(Long Polling)。

2. 退避轮询

退避轮询是一种在计算机网络和分布式系统中常用的网络请求或重试策略。它的核心思想是:当服务端任务未完成时,客户端下一次查询的等待时间并非固定,而是随着查询次数的增加而递增。

2.1 为什么需要退避轮询?

在服务器过载、网络故障或由于短时间高频请求触发限流(如 HTTP 429 错误)时,如果客户端仍以固定高频重试,会引发严重的灾难:

  • 惊群效应:大量客户端同时高频重试,导致服务器压力倍增,进而彻底崩溃。
  • 资源浪费:服务端在执行耗时任务(如 AI 渲染)时,初期的频繁查询注定是无效的,这不仅浪费了服务器带宽,也消耗了客户端的设备电量与性能。

2.2 核心机制与运行规则

退避轮询通过不断拉大两次请求之间的延迟时间,巧妙地实现了请求分流。其典型规则如下:

  • 服务端:保持“极轻”的逻辑,收到请求后立刻查询状态并返回(完成、失败或处理中),不做任何阻塞。

  • 客户端:收到“处理中”状态时,按策略进入等待。例如:

    • 第一次等待:2 秒

    • 第二次等待:5 秒

    • 第三次等待:10 秒

    • 第 N 次等待:最大上限(如 15 秒,避免等待过久导致体验断层)

设置最大值是为了避免等待时间变得不可接受(如几个小时),通常会设置一个最大等待时间(Max Delay)和最大重试次数。

2.3 客户端实现示例

在客户端中,我们可以通过简单的 while 循环和 setTimeout 挂起机制来实现:

typescript

+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","frontmatter":{"date":"2026-02-25T22:10:48.000Z","title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","tldr":"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","tags":["HTTP 轮询","退避轮询","长轮询"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-polling-optimization"},"headers":[],"relativePath":"fullstack/networking-polling-optimization.md","filePath":"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md"}'),p={name:"fullstack/networking-polling-optimization.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策

摘要总结: 针对传统固定频率轮询的服务器资源浪费问题,系统分析退避轮询与长轮询两种优化策略的核心原理与运行机制。通过 TypeScript 客户端与 NestJS 服务端的完整实现示例,对比两种方案在实时性、资源占用、复杂度等维度的差异。构建包含任务耗时、并发规模、基础设施约束的技术选型决策树,并提出退避+长轮询级联、按业务分级等混合策略建议。结论表明,低实时要求高并发场景选退避轮询,高实时要求中低并发场景选长轮询,复杂场景可两者结合。

1. 引言

在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。

📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。

在当前众多顶级的 AI AIGC 应用(如 Midjourney 类的第三方集成应用、Stable Diffusion 商业平台、长视频生成等)中,任务处理往往需要数十秒甚至数分钟。在面对海量并发和复杂的网关负载均衡时,HTTP 轮询因其无状态、易扩展、断连恢复成本极低的特性,成为了架构师经过深思熟虑后的首选方案。

然而,传统的固定频率轮询(如每秒请求一次)对服务器极不友好。为了兼顾用户体验与服务器的稳定性,本文将深入探讨两种常用的 HTTP 轮询优化策略:退避轮询(Backoff Polling) 与 长轮询(Long Polling)。

2. 退避轮询

退避轮询是一种在计算机网络和分布式系统中常用的网络请求或重试策略。它的核心思想是:当服务端任务未完成时,客户端下一次查询的等待时间并非固定,而是随着查询次数的增加而递增。

2.1 为什么需要退避轮询?

在服务器过载、网络故障或由于短时间高频请求触发限流(如 HTTP 429 错误)时,如果客户端仍以固定高频重试,会引发严重的灾难:

  • 惊群效应:大量客户端同时高频重试,导致服务器压力倍增,进而彻底崩溃。
  • 资源浪费:服务端在执行耗时任务(如 AI 渲染)时,初期的频繁查询注定是无效的,这不仅浪费了服务器带宽,也消耗了客户端的设备电量与性能。

2.2 核心机制与运行规则

退避轮询通过不断拉大两次请求之间的延迟时间,巧妙地实现了请求分流。其典型规则如下:

  • 服务端:保持“极轻”的逻辑,收到请求后立刻查询状态并返回(完成、失败或处理中),不做任何阻塞。

  • 客户端:收到“处理中”状态时,按策略进入等待。例如:

    • 第一次等待:2 秒

    • 第二次等待:5 秒

    • 第三次等待:10 秒

    • 第 N 次等待:最大上限(如 15 秒,避免等待过久导致体验断层)

设置最大值是为了避免等待时间变得不可接受(如几个小时),通常会设置一个最大等待时间(Max Delay)和最大重试次数。

2.3 客户端实现示例

在客户端中,我们可以通过简单的 while 循环和 setTimeout 挂起机制来实现:

typescript

 interface TaskResponse {
   status: 'processing' | 'completed' | 'failed';
   result?: string;
diff --git a/assets/fullstack_networking-polling-optimization.md.Co1K2del.lean.js b/assets/fullstack_networking-polling-optimization.md.CsfHVMMa.lean.js
similarity index 95%
rename from assets/fullstack_networking-polling-optimization.md.Co1K2del.lean.js
rename to assets/fullstack_networking-polling-optimization.md.CsfHVMMa.lean.js
index 10b61b7..7c1e918 100644
--- a/assets/fullstack_networking-polling-optimization.md.Co1K2del.lean.js
+++ b/assets/fullstack_networking-polling-optimization.md.CsfHVMMa.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","frontmatter":{"date":"2026-02-25T22:10:48.000Z","title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","tldr":"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","tags":["HTTP 轮询","退避轮询","长轮询"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-polling-optimization"},"headers":[],"relativePath":"fullstack/networking-polling-optimization.md","filePath":"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md"}'),p={name:"fullstack/networking-polling-optimization.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",51)])])}const y=i(p,[["render",h]]);export{g as __pageData,y as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","frontmatter":{"date":"2026-02-25T22:10:48.000Z","title":"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策","tldr":"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。","description":"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。","tags":["HTTP 轮询","退避轮询","长轮询"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-polling-optimization"},"headers":[],"relativePath":"fullstack/networking-polling-optimization.md","filePath":"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md"}'),p={name:"fullstack/networking-polling-optimization.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",51)])])}const y=i(p,[["render",h]]);export{g as __pageData,y as default};
diff --git a/assets/fullstack_networking-protocol-selection-guide.md.C5frLLOO.js b/assets/fullstack_networking-protocol-selection-guide.md.M0GzKHtc.js
similarity index 99%
rename from assets/fullstack_networking-protocol-selection-guide.md.C5frLLOO.js
rename to assets/fullstack_networking-protocol-selection-guide.md.M0GzKHtc.js
index c8036d8..6440fca 100644
--- a/assets/fullstack_networking-protocol-selection-guide.md.C5frLLOO.js
+++ b/assets/fullstack_networking-protocol-selection-guide.md.M0GzKHtc.js
@@ -1 +1 @@
-import{_ as e,c as o,o as r,d as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","frontmatter":{"date":"2026-02-24T08:40:31.000Z","title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","tldr":"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","categories":["全栈","网络与通信"],"tags":["HTTP","HTTP 轮询","SSE","WebSocket","Webhooks"],"permalink":"/fullstack/networking-protocol-selection-guide"},"headers":[],"relativePath":"fullstack/networking-protocol-selection-guide.md","filePath":"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md"}'),d={name:"fullstack/networking-protocol-selection-guide.md"};function n(s,t,h,l,i,g){return r(),o("div",null,[...t[0]||(t[0]=[a('

Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南

摘要总结:本文针对传统 HTTP 在实时通信场景的局限,系统分析流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询五种技术的核心原理、网络机制与适用边界。通过对比各方案在单向/双向推送、实时性、资源开销等维度的差异,结合 AI 文本对话、生图生视频等典型场景,构建技术选型决策矩阵。结论表明,不存在最优技术,需根据任务耗时特征、并发规模、基础设施约束等因素选择最适配方案。

1. 引言

HTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:请求 -> 等待 -> 完整响应。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。

为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。

2. 传统 HTTP——Web 通信的基石

自 1991 年诞生以来,HTTP(超文本传输协议)便成为了互联网运行的“通用语言”。作为一种无状态、基于“请求-响应”模式的应用层协议,它构筑了现代 Web 通信的稳固基石。

在核心运作机制上,传统 HTTP 遵循着严谨的单向驱动逻辑:通信必须由客户端发起请求(Request),服务器在处理完成后返回完整的响应(Response)。一旦数据传输完成,连接在逻辑上即告结束。

维度说明
网络特征HTTP 构建于 TCP 协议之上。尽管从 HTTP/1.1 开始,协议默认开启了 Connection: keep-alive 机制以复用底层 TCP 连接,减少了频繁三次握手的开销,但在应用层层面,它依然维持着半双工通信的本质——在同一时刻,数据只能单向流动,且服务器永远处于"被动应答"状态
典型应用这种模式完美契合了绝大多数非即时性的资源获取场景,如加载网页 HTML、调用标准 RESTful API(获取用户信息、提交表单)以及加载静态图片等。

随着 Web 应用向“实时化”与“高互动”演进,传统 HTTP 的固有特性逐渐演变为开发的痛点:

痛点说明
无法主动推送服务器如同一个被动的仓库管理员,即便仓库内的数据发生了更新,只要客户端不主动询问,服务器也无法将新信息触达用户。
头部开销沉重在 HTTP/1.x 中,每次请求都必须携带完整的 Header 信息(包括 Cookie、User-Agent 等)。对于实时性要求高、但单次数据包极小的场景(如传感器数值同步),这些重复的头部数据往往比有效载荷还要大,造成了带宽的极大浪费。
实时性的"伪实现"在 WebSocket 等原生实时技术成熟前,为了模拟实时效果,开发者通常被迫采用轮询(Polling)技术。无论是频繁发起连接的短轮询,还是长时间挂起请求的长轮询(Long Polling),都会产生大量冗余请求,对服务器并发处理能力提出了严峻挑战。

3. 流式 HTTP(Streamable HTTP)

如果说传统 HTTP 是严谨的“一问一答”,那么流式 HTTP(Streamable HTTP)则更像是一次“未完待续”的深度交流。它通过对响应机制的巧妙“变异”,打破了“服务端必须积攒全部结果才能返回”的物理限制,实现了数据的边计算、边传输。

3.1 核心原理:分块传输的艺术

流式 HTTP 的精髓在于它不再追求一次性交付,而是通过特定的协议头,将数据化整为零:

  • 传输机制:在 HTTP 响应头中声明 Transfer-Encoding: chunked(分块传输编码)或 Content-Type: text/event-stream。这告诉客户端:服务器目前尚不清楚响应的总长度(Content-Length),但会将数据切分成一个个逻辑块(Chunks)依次下发。

  • 网络特征:客户端在接收到 200 OK 状态码后,底层 TCP 连接并不会立即关闭。借助现代浏览器的 Fetch API 及其 ReadableStream 特性,前端可以像接水管一样,实时读取并处理源源不断传来的数据块,直到服务器发送一个长度为 0 的终止信号。

3.2 应用场景:从大文件到 AI 时代

这种“边读边播”的特性,使其在以下场景中无可替代:

  • AI 大模型“打字机”效果:这是当前最火热的应用。ChatGPT、Claude 等模型生成的长文本,正是通过流式 HTTP 将响应数据实时推送到前端,显著降低了用户的首字感知延迟(TTFT)。

  • 大容量资源下发:如超大文件或视频流的段落化加载,避免了内存爆仓,提升了系统吞吐量。

  • SSE 的灵活替代方案:配合 fetch-event-source 等库,它能完美模拟 SSE 的长连接功能,同时规避了标准 SSE 在请求方式(仅限 GET)和自定义 Header 上的限制。

3.3 隐藏的坑:代理与缓冲

虽然流式传输在逻辑上很美好,但在工程落地时必须关注“链路通畅”问题:

局限说明
单向传输局限它本质上仍是 Server-to-Client 的单向流。如果业务需要客户端也实时回传数据,则需要考虑其他双向通信协议。
代理服务这是最常见的坑。一些旧版 Nginx、防火墙或负载均衡器默认开启了强缓冲(Buffering)机制。它们会试图"积攒"足够多的流式数据再统一发给客户端。这对于实时 AI 对话是致命的,开发者必须确保代理层配置了 X-Accel-Buffering: no 等指令来禁用缓冲,确保数据的"直达性"。

4. SSE (Server-Sent Events):规范化的单向推送协议

如果说 流式 HTTP 是一种底层的“传输机制”,那么 SSE 则是基于此机制建立的一套标准化应用层协议。它专门为“服务器向客户端推送事件”而生,在逻辑上比纯粹的流式传输更具约束力,也更便于浏览器集成

4.1 核心原理:严格的文本契约

SSE 不允许像普通流那样随心所欲地传输字符,它要求响应头强制设定为 Content-Type: text/event-stream,且数据格式必须遵循一套严密的“报文规范”:

  • 结构化字段:每条消息由 id:(事件 ID)、event:(事件类型)、data:(业务数据)和 retry:(重连间隔)等字段组成。

  • 消息边界:必须以双换行符 \\n\\n 作为一条独立消息的终点。这种协议级的约定,使得客户端能够精准地拆分出每一条业务事件,而无需开发者手动处理流的切片逻辑。

4.2 网络机制:原生浏览器的“自动驾驶”

SSE 的一大优势在于其深度集成了浏览器原生的 EventSource API。这赋予了它许多开箱即用的高级特性:

  • 自动重连:当网络波动导致连接中断时,EventSource 会自动发起重连尝试。

  • 状态追踪:利用 Last-Event-ID 机制,客户端在重连时会自动携带最后一次收到的 ID,服务端据此可以实现数据的“断点续传”,确保消息不丢失。

4.3 典型场景:轻量级的实时感知

SSE 极其适合那些“高频下发、低频上报”的业务场景:

场景说明
金融/行情股票价格、加密货币的实时波动。
状态监控系统资源占用大盘、CI/CD 构建进度条。
社交提醒站内信通知、点赞互动的实时更新。

4.4 工程避坑指南:不可忽视的约束

尽管 SSE 足够轻巧,但在实际架构设计中,必须正视其局限性:

局限说明
文本编码限制SSE 仅支持 UTF-8 文本流。如果需要传输二进制文件(如实时生成的缩略图),必须先转码为 Base64,这会带来约 33% 的体积开销。
浏览器"单行道"限制原生的 EventSource 仅支持 GET 请求。在需要传递复杂查询参数(如超长的 JSON 过滤器)时,这一限制显得非常局促。这也是为什么许多现代项目(如 AI 聊天应用)宁愿使用 Fetch 模拟 SSE 的原因
连接数水位线在 HTTP/1.1 环境下,浏览器对同一域名的并发长连接限制通常只有 6 个。这意味着如果你在浏览器中多开了几个监控标签页,很可能会耗尽连接池,导致页面其他请求完全阻塞。(注:在 HTTP/2 及以上版本中,由于多路复用特性的存在,这一限制已基本消除)。

5. WebSocket:全双工通信

WebSocket 不同于 流式 HTTP 和 SSE 这种在传统 HTTP 框架下的“精雕细琢”,而是一次彻底的“范式革命”。它不仅仅是一个简单的 API,而是一个独立的、与 HTTP 平级的应用层协议。

它是一种基于 TCP 协议的全双工通信协议,真正的全双工持久连接方案,通过一次 HTTP 握手完成协议升级后,客户端与服务器可双向、实时、低延迟地传输数据,连接全程保持开放。旨在打破“请求-响应”的束缚,建立起真正意义上的“零延迟”双向通道。

5.1 核心原理

WebSocket 的建立遵循一个标准化的协议升级流程:

  • 协议升级握手:连接初始化阶段采用标准 HTTP 请求。客户端在请求头中声明 Upgrade: websocketConnection: Upgrade,表明协议升级意图。

  • 连接状态转换:服务器确认支持 WebSocket 协议后,返回 101 Switching Protocols 状态码。至此,底层 TCP 连接完成协议切换,后续通信采用 WebSocket 帧格式进行数据传输,不再承载 HTTP 协议开销。

5.2 网络机制

在 WebSocket 连接建立后,通信双方会进入全双工对等传输状态:

  • 全双工数据传输:客户端与服务器可随时、独立地向对端发送数据,无需等待对方请求或确认。这种双向并发通信机制彻底摆脱了 HTTP 协议"请求-响应"的串行约束,实现低延迟的实时数据交换。

  • 轻量级帧结构:相较于 HTTP 协议数百字节的首部开销,WebSocket 数据帧首部极为紧凑,固定部分仅 2 字节,带掩码时最大 14 字节。对于高频、小数据包传输场景(如实时游戏状态同步、传感器数据采集),显著降低网络带宽占用与传输延迟。

  • 原生二进制支持:WebSocket 协议原生支持文本(UTF-8)与二进制数据帧,无需像 SSE 那样进行 Base64 编码转换。该特性使其在实时音视频流传输、二进制协议封装等多媒体场景中具有显著的性能优势。

5.3 应用场景:高互动的终极方案

凡是需要“毫秒级同步”的场景,WebSocket 都是不二之选:

场景典型应用
即时通讯微信网页版、飞书聊天
协同办公Google Docs、Figma 的多人在同步编辑
竞技游戏实时同步玩家坐标与指令的 MMO 或 MOBA 游戏
金融博弈极速波动的量化交易终端

5.4 工程落地的“重装”代价

作为一种"有状态"的协议,WebSocket 在带来极致性能的同时,也给后端架构带来了沉重的复杂性:

  • 状态维护与内存开销
    不同于 HTTP 的"阅后即焚"模式,服务器必须为每一个 WebSocket 连接维持一个持久的 Session 状态。当并发量攀升至十万甚至百万级时,内存占用与长连接管理压力将呈几何级数增长,对服务器的资源调度能力提出严峻考验。

  • 分布式系统的挑战
    在水平扩容场景下,WebSocket 堪称负载均衡器的"噩梦"。由于连接具有状态属性,若用户 A 连接至机器 1,用户 B 连接至机器 2,二者间的通信便无法直接完成。此时后端必须引入 Redis Pub/Sub、消息队列(Message Queue)或专用网关等中间件,以实现跨节点的"消息对齐"与状态同步。

  • 原始协议的局限
    WebSocket 协议本身设计得极为精简,并未内置自动重连、心跳保活或消息确认等机制。为保障连接在生产环境中的鲁棒性,开发者必须在应用层自行实现 Ping/Pong 心跳检测、断线感知以及带退避策略的重连逻辑,这无疑增加了工程实现的复杂度。

6. Webhooks:事件驱动的反向回调

如果说 SSE 是服务器"主动推送给浏览器",那么 Webhooks 则是服务器"主动推送给服务端"——它是一种基于 HTTP 的事件触发机制,专为服务端向服务端单向推送而设计。

6.1 核心原理:回调的自动化

Webhooks 的工作模式非常清晰:

  • 事件注册:客户端(通常是第三方应用)预先在服务端注册一个回调 URL,并指定关注的事件类型(如"订单完成"、"用户注册"、"文件上传"等)。

  • 事件触发:当服务端发生指定事件时,它会主动向客户端注册的 URL 发送一个 HTTP POST 请求,将事件详情封装在请求体中。

  • 即时响应:客户端收到回调后,执行相应业务逻辑(如更新本地数据、发送通知等),并返回一个确认响应。

整个过程完全基于标准 HTTP,无需维护持久连接,也无需客户端持续轮询。

6.2 典型场景:跨系统的松耦合集成

场景说明
支付回调当用户在第三方支付平台(如 Stripe、支付宝)完成付款后,支付平台会向商户服务器发送 Webhook 回调,通知交易结果。
版本控制系统GitHub、GitLab 等平台通过 Webhooks 在代码提交、PR 创建时通知外部 CI/CD 系统。
电商订单同步订单状态变更、用户注册等事件触发后,同步至 ERP、CRM 等内部系统。
消息推送集成将消息平台的事件(如用户发送消息)推送至自有的聊天机器人或客服系统。

6.3 工程考量:可靠投递与安全防护

虽然 Webhooks 概念简单,但在生产环境中需要关注几个关键问题:

考量点说明
可靠投递保障HTTP 请求可能因网络问题投递失败,因此主流平台通常支持失败重试机制,并要求回调端点返回 2xx 状态码才视为成功。
幂等性设计由于重试机制的存在,同一个事件可能被多次投递。客户端应当具备幂等处理能力,避免重复业务操作。
安全验证为了防止恶意伪造回调,服务端通常会在请求中加入签名(如 HMAC 签名),客户端通过验证签名来确认请求的真实性。

6.4 与 SSE 的本质区别

维度WebhooksSSE
推送对象服务端 → 服务端服务端 → 浏览器
连接方向由接收方预先暴露 URL由发送方建立并维持连接
适用场景跨系统事件同步浏览器端实时更新
协议基础标准 HTTP POST长连接 + EventSource API

7. 关于 HTTP 轮询的讨论

HTTP 轮询是一种最朴素的实时通信方案,是实现实时性的基础方案,核心逻辑是客户端定时向服务器发起请求,主动拉取最新数据。

不少人在学习了 流式 HTTP、SSE 和 WebSocket 后,会产生一种“技术洁癖”,觉得 HTTP 轮询是上古时代的落后技术,应当被彻底淘汰。但现实是,在当前很多顶级的 AI 生图(如 Midjourney 类的第三方集成应用、部分 Stable Diffusion 商业平台)甚至部分长视频生成应用中,HTTP 轮询不仅没有消失,反而是架构师经过深思熟虑后的首选方案。

7.1 任务特性的本质差异:流式输出 vs 异步大任务

AI 应用的交互模式决定了通信协议的选型:

应用类型场景特征解释说明
文本大模型(如 ChatGPT)流式持续输出模型在极短时间内(首个 Token 约 200ms 即可生成)就开始返回数据,随后持续"吐字"。若采用传统同步 HTTP,用户将面对长达数秒的白屏等待,体验极差。SSE/流式 HTTP 正是为此类场景量身打造。
AI 生图/生视频重计算异步任务一张高质量图片的生成可能需要 GPU 满载运算 10~30 秒,甚至在高峰期需要排队数分钟。任务执行期间,除了偶尔的进度更新(10%、50%),并没有持续的数据流可供传输。让客户端和网关之间维持一条长达数十秒的"闲置长连接",仅用于等待最终一个图片 URL 的返回,在系统设计上是一笔不小的开销。

7.2 基础设施的残酷现实:连接池枯竭与网关超时

如果 AI 生图使用 WebSocket 或保持长达 30 秒的 HTTP 连接,会遇到严峻的基础设施挑战:

挑战说明
网关/负载均衡的超时限制大多数云厂商的负载均衡器(如 AWS ALB、Nginx 默认配置)和 CDN 对 HTTP 连接都有严格超时限制(通常为 30s 至 60s)。当 AI 任务耗时过长时,网关会主动切断连接并返回 504 Gateway Timeout。
并发连接数瓶颈服务器的并发连接池是有限的。假设 1 万名用户同时排队等图片:使用 WebSocket 需要维持 1 万个长连接;而使用轮询,每位用户每 3 秒发起一个极轻量的 GET 请求,查询完毕立即释放连接。无状态的短连接模式能让服务器吞吐量提升数个量级。

7.3 后端架构的天然要求:解耦与消息队列

现代高并发 AI 生图平台的后端架构通常是彻底解耦的:

  1. 提交任务 (Client):客户端 POST 请求 /api/generate

  2. 下发队列 (API Server):API 服务器将任务投入 Kafka/RabbitMQ 队列中,生成唯一 task_id 并立即返回给客户端(耗时约 50ms)。

  3. 异步消费 (GPU Worker):后端 GPU 节点从队列中取出任务,执行计算。生成完毕后,将图片上传至 OSS/S3 并将结果写入数据库。

  4. 获取结果 (Client):客户端持有 task_id,每隔数秒轮询一次 /api/task/{task_id} 查询任务状态。

在这个经典的生产者-消费者模型中,处理 HTTP 请求的 Web 服务器与真正执行计算的 GPU 服务器在物理上彼此隔离。若强行使用 WebSocket 或 SSE 将二者串联,不仅违背了解耦原则,还会使 Web 服务器与 GPU 节点间的状态同步变得极为复杂。

7.4 移动端弱网环境下的"绝对鲁棒性"

试想这样一个场景:用户在地铁中使用手机生图,刚提交任务便遭遇了 5 秒的网络中断。

  • 使用 WebSocket:连接断开后,重连时如何恢复先前的"会话状态"?服务器如何识别并继续向重连后的客户端推送结果?这需要一套复杂的重传与会话恢复机制。

  • 使用轮询 (Polling):则极为简洁。客户端持有 task_id。网络恢复后,继续发送 GET /api/task/{task_id} 即可获取结果。无状态特性带来了卓越的抗干扰能力。

7.5 小结

综上所述,轮询凭借其无状态、低连接开销、高吞吐量的特性,成为 AI 生图场景下更具性价比的通信方案

当然,如果决定使用轮询,为了兼顾体验和服务器压力,业界通常会采用退避轮询策略——即随着任务等待时间延长,逐步降低查询频率。例如前 30 秒每 2 秒查询一次,30 秒后改为每 5 秒查询一次,到后期甚至可以降至每 10 秒一次。这种策略能在保证及时获取结果的同时,有效减少不必要的请求开销。

8. 实践选型指南:不买最贵的,只选最对的

在实际应用中,脱离业务场景谈协议与通信方案的优劣是毫无意义的。WebSocket 虽强,但并非银弹;标准 HTTP 虽“老”,但在大规模分布式系统中依然是最稳健的选择。

8.1 决策矩阵:AI 与实时业务场景选型

业务场景任务耗时特征推荐通信协议决策依据与变通方案
AI 文本对话 (LLM)快速响应,持续文本流 (几秒~几十秒)流式 HTTP (Fetch / SSE)需提供“打字机”反馈以维持用户注意力。相比 WS,HTTP 更易穿透防火墙与网关。
AI 实时语音/视觉助手极低延迟,双向高频互动 (<500ms)WebSocket / WebRTC必须消除 HTTP 握手与头部延迟,实现真正的全双工流式交互。
AI 快速生图 (SDXL Turbo)耗时极短(<3s),无排队压力标准 HTTP (Request-Response)简单的挂起等待即可。无需引入长连接复杂度,保持架构简洁。
高精生图/视频/长文生成耗时长且需排队(10s ~ 数分钟)异步提交 + HTTP 轮询保护网关的核心手段。解耦 GPU 计算节点与 Web 节点,客户端持 TaskID 定时查询状态。
跨系统事件同步事件驱动,无固定耗时Webhooks适用于服务端间的异步事件通知(如支付回调、订单同步、Git 钩子触发 CI/CD)。接收方需预先暴露回调 URL,并确保幂等处理与签名验证。

8.2 深度决策逻辑:工程选型的五条金律

1、高频双向:WebSocket 的主场

核心逻辑:HTTP 及其衍生品在双向交互下,重复的头部开销会吞噬大量带宽,且无法实现真正的全双工并发。

若业务需要客户端与服务端互发高频消息(如多人竞技游戏、协作编辑、实时双向聊天),WebSocket 是唯一选择

2、单向推送:SSE 的轻量优势

若业务场景仅需服务端向客户端单向高频推送(如股票行情大盘、服务器实时日志、监控预警):

首选方案是 SSE。它完全复用现有的 HTTP 基础设施(负载均衡、WAF、鉴权逻辑),无需额外配置 WebSocket 网关。同时,其原生的断线重连机制极大降低了前端的开发心智负担。

3、流式响应:Streamable HTTP 的主场,AI 时代的主流选择

这是目前 LLM 文本对话中最主流的"事实标准"

痛点:原生 SSE 受限于浏览器实现,通常只能发起 GET 请求。但在 AI 场景下,我们需要发送庞大的 system_prompt 或上下文历史(Context),GET 的 URL 长度限制成为了瓶颈。

变通方案使用 Fetch API 结合 POST 请求,通过 ReadableStream 接收流式响应。既能突破 GET 的长度限制,又避免了 WebSocket 在维持长连接、处理心跳保活方面的额外资源损耗。这正是 fetch-event-source 这类库在 AI 社区盛行的底层逻辑。

4、异步任务:轮询的主场

对于 AI 生图、生视频等耗时较长(10s ~ 数分钟)的重计算任务,其特点是计算期间无持续数据流,仅在完成后返回结果。

此时若强行使用 WebSocket 或 SSE 维持长连接,不仅会遭遇网关超时限制(通常 30s~60s),还会造成并发连接数瓶颈。异步提交 + 轮询查询是更合理的架构:客户端提交任务后获得 TaskID,定期轮询查询状态。这种方式解耦了 Web 节点与 GPU 节点,无状态的短连接模式让服务器能够承载更高的吞吐量。

5、跨系统回调:Webhooks 的主场

若业务涉及跨服务的事件通知(如支付平台回调、订单状态变更通知、Git 仓库事件触发 CI/CD),且接收方是服务端而非浏览器:

首选方案是 Webhooks。它完全基于标准 HTTP POST 请求,无需维护持久连接,由接收方预先暴露回调 URL 即可实现事件驱动推送。这种模式天然适合服务间的松耦合集成,但需注意幂等性处理与签名验证以确保安全。

9. 结语

回望这场从 HTTP 到 WebSocket 的技术演进,我们或许能提炼出一个更普适的架构哲学:没有"最好"的技术,只有"最合适"的技术

技术的演进从来不是"长江后浪推前浪"的简单替代,而是一种"分工细化"的自然结果。传统 HTTP 依然是 Web 的基石,流式 HTTP 让它焕发新生;SSE 在单向推送场景轻量而优雅;WebSocket 为真正的实时双向交互打开了大门;轮询在 AI 时代的大模型洪流中,依然默默支撑着无数生图、生视频应用的正常运行;而 Webhooks 则在跨系统的服务端间编织出一张事件驱动的网络。

真正成熟的架构师,不会执着于"最新"或"最复杂"的方案,而是深入理解每种技术的边界与代价,在业务场景的约束下做出最优雅的取舍。毕竟,最好的架构不是用技术堆砌出来的,而是让技术各归其位的顺势而为

',108)])])}const T=e(d,[["render",n]]);export{c as __pageData,T as default}; +import{_ as e,c as o,o as r,d as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","frontmatter":{"date":"2026-02-24T08:40:31.000Z","title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","tldr":"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","categories":["全栈","网络与通信"],"tags":["HTTP","HTTP 轮询","SSE","WebSocket","Webhooks"],"permalink":"/fullstack/networking-protocol-selection-guide"},"headers":[],"relativePath":"fullstack/networking-protocol-selection-guide.md","filePath":"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md"}'),d={name:"fullstack/networking-protocol-selection-guide.md"};function n(s,t,h,l,i,g){return r(),o("div",null,[...t[0]||(t[0]=[a('

Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南

摘要总结:本文针对传统 HTTP 在实时通信场景的局限,系统分析流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询五种技术的核心原理、网络机制与适用边界。通过对比各方案在单向/双向推送、实时性、资源开销等维度的差异,结合 AI 文本对话、生图生视频等典型场景,构建技术选型决策矩阵。结论表明,不存在最优技术,需根据任务耗时特征、并发规模、基础设施约束等因素选择最适配方案。

1. 引言

HTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:请求 -> 等待 -> 完整响应。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。

为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。

2. 传统 HTTP——Web 通信的基石

自 1991 年诞生以来,HTTP(超文本传输协议)便成为了互联网运行的“通用语言”。作为一种无状态、基于“请求-响应”模式的应用层协议,它构筑了现代 Web 通信的稳固基石。

在核心运作机制上,传统 HTTP 遵循着严谨的单向驱动逻辑:通信必须由客户端发起请求(Request),服务器在处理完成后返回完整的响应(Response)。一旦数据传输完成,连接在逻辑上即告结束。

维度说明
网络特征HTTP 构建于 TCP 协议之上。尽管从 HTTP/1.1 开始,协议默认开启了 Connection: keep-alive 机制以复用底层 TCP 连接,减少了频繁三次握手的开销,但在应用层层面,它依然维持着半双工通信的本质——在同一时刻,数据只能单向流动,且服务器永远处于"被动应答"状态
典型应用这种模式完美契合了绝大多数非即时性的资源获取场景,如加载网页 HTML、调用标准 RESTful API(获取用户信息、提交表单)以及加载静态图片等。

随着 Web 应用向“实时化”与“高互动”演进,传统 HTTP 的固有特性逐渐演变为开发的痛点:

痛点说明
无法主动推送服务器如同一个被动的仓库管理员,即便仓库内的数据发生了更新,只要客户端不主动询问,服务器也无法将新信息触达用户。
头部开销沉重在 HTTP/1.x 中,每次请求都必须携带完整的 Header 信息(包括 Cookie、User-Agent 等)。对于实时性要求高、但单次数据包极小的场景(如传感器数值同步),这些重复的头部数据往往比有效载荷还要大,造成了带宽的极大浪费。
实时性的"伪实现"在 WebSocket 等原生实时技术成熟前,为了模拟实时效果,开发者通常被迫采用轮询(Polling)技术。无论是频繁发起连接的短轮询,还是长时间挂起请求的长轮询(Long Polling),都会产生大量冗余请求,对服务器并发处理能力提出了严峻挑战。

3. 流式 HTTP(Streamable HTTP)

如果说传统 HTTP 是严谨的“一问一答”,那么流式 HTTP(Streamable HTTP)则更像是一次“未完待续”的深度交流。它通过对响应机制的巧妙“变异”,打破了“服务端必须积攒全部结果才能返回”的物理限制,实现了数据的边计算、边传输。

3.1 核心原理:分块传输的艺术

流式 HTTP 的精髓在于它不再追求一次性交付,而是通过特定的协议头,将数据化整为零:

  • 传输机制:在 HTTP 响应头中声明 Transfer-Encoding: chunked(分块传输编码)或 Content-Type: text/event-stream。这告诉客户端:服务器目前尚不清楚响应的总长度(Content-Length),但会将数据切分成一个个逻辑块(Chunks)依次下发。

  • 网络特征:客户端在接收到 200 OK 状态码后,底层 TCP 连接并不会立即关闭。借助现代浏览器的 Fetch API 及其 ReadableStream 特性,前端可以像接水管一样,实时读取并处理源源不断传来的数据块,直到服务器发送一个长度为 0 的终止信号。

3.2 应用场景:从大文件到 AI 时代

这种“边读边播”的特性,使其在以下场景中无可替代:

  • AI 大模型“打字机”效果:这是当前最火热的应用。ChatGPT、Claude 等模型生成的长文本,正是通过流式 HTTP 将响应数据实时推送到前端,显著降低了用户的首字感知延迟(TTFT)。

  • 大容量资源下发:如超大文件或视频流的段落化加载,避免了内存爆仓,提升了系统吞吐量。

  • SSE 的灵活替代方案:配合 fetch-event-source 等库,它能完美模拟 SSE 的长连接功能,同时规避了标准 SSE 在请求方式(仅限 GET)和自定义 Header 上的限制。

3.3 隐藏的坑:代理与缓冲

虽然流式传输在逻辑上很美好,但在工程落地时必须关注“链路通畅”问题:

局限说明
单向传输局限它本质上仍是 Server-to-Client 的单向流。如果业务需要客户端也实时回传数据,则需要考虑其他双向通信协议。
代理服务这是最常见的坑。一些旧版 Nginx、防火墙或负载均衡器默认开启了强缓冲(Buffering)机制。它们会试图"积攒"足够多的流式数据再统一发给客户端。这对于实时 AI 对话是致命的,开发者必须确保代理层配置了 X-Accel-Buffering: no 等指令来禁用缓冲,确保数据的"直达性"。

4. SSE (Server-Sent Events):规范化的单向推送协议

如果说 流式 HTTP 是一种底层的“传输机制”,那么 SSE 则是基于此机制建立的一套标准化应用层协议。它专门为“服务器向客户端推送事件”而生,在逻辑上比纯粹的流式传输更具约束力,也更便于浏览器集成

4.1 核心原理:严格的文本契约

SSE 不允许像普通流那样随心所欲地传输字符,它要求响应头强制设定为 Content-Type: text/event-stream,且数据格式必须遵循一套严密的“报文规范”:

  • 结构化字段:每条消息由 id:(事件 ID)、event:(事件类型)、data:(业务数据)和 retry:(重连间隔)等字段组成。

  • 消息边界:必须以双换行符 \\n\\n 作为一条独立消息的终点。这种协议级的约定,使得客户端能够精准地拆分出每一条业务事件,而无需开发者手动处理流的切片逻辑。

4.2 网络机制:原生浏览器的“自动驾驶”

SSE 的一大优势在于其深度集成了浏览器原生的 EventSource API。这赋予了它许多开箱即用的高级特性:

  • 自动重连:当网络波动导致连接中断时,EventSource 会自动发起重连尝试。

  • 状态追踪:利用 Last-Event-ID 机制,客户端在重连时会自动携带最后一次收到的 ID,服务端据此可以实现数据的“断点续传”,确保消息不丢失。

4.3 典型场景:轻量级的实时感知

SSE 极其适合那些“高频下发、低频上报”的业务场景:

场景说明
金融/行情股票价格、加密货币的实时波动。
状态监控系统资源占用大盘、CI/CD 构建进度条。
社交提醒站内信通知、点赞互动的实时更新。

4.4 工程避坑指南:不可忽视的约束

尽管 SSE 足够轻巧,但在实际架构设计中,必须正视其局限性:

局限说明
文本编码限制SSE 仅支持 UTF-8 文本流。如果需要传输二进制文件(如实时生成的缩略图),必须先转码为 Base64,这会带来约 33% 的体积开销。
浏览器"单行道"限制原生的 EventSource 仅支持 GET 请求。在需要传递复杂查询参数(如超长的 JSON 过滤器)时,这一限制显得非常局促。这也是为什么许多现代项目(如 AI 聊天应用)宁愿使用 Fetch 模拟 SSE 的原因
连接数水位线在 HTTP/1.1 环境下,浏览器对同一域名的并发长连接限制通常只有 6 个。这意味着如果你在浏览器中多开了几个监控标签页,很可能会耗尽连接池,导致页面其他请求完全阻塞。(注:在 HTTP/2 及以上版本中,由于多路复用特性的存在,这一限制已基本消除)。

5. WebSocket:全双工通信

WebSocket 不同于 流式 HTTP 和 SSE 这种在传统 HTTP 框架下的“精雕细琢”,而是一次彻底的“范式革命”。它不仅仅是一个简单的 API,而是一个独立的、与 HTTP 平级的应用层协议。

它是一种基于 TCP 协议的全双工通信协议,真正的全双工持久连接方案,通过一次 HTTP 握手完成协议升级后,客户端与服务器可双向、实时、低延迟地传输数据,连接全程保持开放。旨在打破“请求-响应”的束缚,建立起真正意义上的“零延迟”双向通道。

5.1 核心原理

WebSocket 的建立遵循一个标准化的协议升级流程:

  • 协议升级握手:连接初始化阶段采用标准 HTTP 请求。客户端在请求头中声明 Upgrade: websocketConnection: Upgrade,表明协议升级意图。

  • 连接状态转换:服务器确认支持 WebSocket 协议后,返回 101 Switching Protocols 状态码。至此,底层 TCP 连接完成协议切换,后续通信采用 WebSocket 帧格式进行数据传输,不再承载 HTTP 协议开销。

5.2 网络机制

在 WebSocket 连接建立后,通信双方会进入全双工对等传输状态:

  • 全双工数据传输:客户端与服务器可随时、独立地向对端发送数据,无需等待对方请求或确认。这种双向并发通信机制彻底摆脱了 HTTP 协议"请求-响应"的串行约束,实现低延迟的实时数据交换。

  • 轻量级帧结构:相较于 HTTP 协议数百字节的首部开销,WebSocket 数据帧首部极为紧凑,固定部分仅 2 字节,带掩码时最大 14 字节。对于高频、小数据包传输场景(如实时游戏状态同步、传感器数据采集),显著降低网络带宽占用与传输延迟。

  • 原生二进制支持:WebSocket 协议原生支持文本(UTF-8)与二进制数据帧,无需像 SSE 那样进行 Base64 编码转换。该特性使其在实时音视频流传输、二进制协议封装等多媒体场景中具有显著的性能优势。

5.3 应用场景:高互动的终极方案

凡是需要“毫秒级同步”的场景,WebSocket 都是不二之选:

场景典型应用
即时通讯微信网页版、飞书聊天
协同办公Google Docs、Figma 的多人在同步编辑
竞技游戏实时同步玩家坐标与指令的 MMO 或 MOBA 游戏
金融博弈极速波动的量化交易终端

5.4 工程落地的“重装”代价

作为一种"有状态"的协议,WebSocket 在带来极致性能的同时,也给后端架构带来了沉重的复杂性:

  • 状态维护与内存开销
    不同于 HTTP 的"阅后即焚"模式,服务器必须为每一个 WebSocket 连接维持一个持久的 Session 状态。当并发量攀升至十万甚至百万级时,内存占用与长连接管理压力将呈几何级数增长,对服务器的资源调度能力提出严峻考验。

  • 分布式系统的挑战
    在水平扩容场景下,WebSocket 堪称负载均衡器的"噩梦"。由于连接具有状态属性,若用户 A 连接至机器 1,用户 B 连接至机器 2,二者间的通信便无法直接完成。此时后端必须引入 Redis Pub/Sub、消息队列(Message Queue)或专用网关等中间件,以实现跨节点的"消息对齐"与状态同步。

  • 原始协议的局限
    WebSocket 协议本身设计得极为精简,并未内置自动重连、心跳保活或消息确认等机制。为保障连接在生产环境中的鲁棒性,开发者必须在应用层自行实现 Ping/Pong 心跳检测、断线感知以及带退避策略的重连逻辑,这无疑增加了工程实现的复杂度。

6. Webhooks:事件驱动的反向回调

如果说 SSE 是服务器"主动推送给浏览器",那么 Webhooks 则是服务器"主动推送给服务端"——它是一种基于 HTTP 的事件触发机制,专为服务端向服务端单向推送而设计。

6.1 核心原理:回调的自动化

Webhooks 的工作模式非常清晰:

  • 事件注册:客户端(通常是第三方应用)预先在服务端注册一个回调 URL,并指定关注的事件类型(如"订单完成"、"用户注册"、"文件上传"等)。

  • 事件触发:当服务端发生指定事件时,它会主动向客户端注册的 URL 发送一个 HTTP POST 请求,将事件详情封装在请求体中。

  • 即时响应:客户端收到回调后,执行相应业务逻辑(如更新本地数据、发送通知等),并返回一个确认响应。

整个过程完全基于标准 HTTP,无需维护持久连接,也无需客户端持续轮询。

6.2 典型场景:跨系统的松耦合集成

场景说明
支付回调当用户在第三方支付平台(如 Stripe、支付宝)完成付款后,支付平台会向商户服务器发送 Webhook 回调,通知交易结果。
版本控制系统GitHub、GitLab 等平台通过 Webhooks 在代码提交、PR 创建时通知外部 CI/CD 系统。
电商订单同步订单状态变更、用户注册等事件触发后,同步至 ERP、CRM 等内部系统。
消息推送集成将消息平台的事件(如用户发送消息)推送至自有的聊天机器人或客服系统。

6.3 工程考量:可靠投递与安全防护

虽然 Webhooks 概念简单,但在生产环境中需要关注几个关键问题:

考量点说明
可靠投递保障HTTP 请求可能因网络问题投递失败,因此主流平台通常支持失败重试机制,并要求回调端点返回 2xx 状态码才视为成功。
幂等性设计由于重试机制的存在,同一个事件可能被多次投递。客户端应当具备幂等处理能力,避免重复业务操作。
安全验证为了防止恶意伪造回调,服务端通常会在请求中加入签名(如 HMAC 签名),客户端通过验证签名来确认请求的真实性。

6.4 与 SSE 的本质区别

维度WebhooksSSE
推送对象服务端 → 服务端服务端 → 浏览器
连接方向由接收方预先暴露 URL由发送方建立并维持连接
适用场景跨系统事件同步浏览器端实时更新
协议基础标准 HTTP POST长连接 + EventSource API

7. 关于 HTTP 轮询的讨论

HTTP 轮询是一种最朴素的实时通信方案,是实现实时性的基础方案,核心逻辑是客户端定时向服务器发起请求,主动拉取最新数据。

不少人在学习了 流式 HTTP、SSE 和 WebSocket 后,会产生一种“技术洁癖”,觉得 HTTP 轮询是上古时代的落后技术,应当被彻底淘汰。但现实是,在当前很多顶级的 AI 生图(如 Midjourney 类的第三方集成应用、部分 Stable Diffusion 商业平台)甚至部分长视频生成应用中,HTTP 轮询不仅没有消失,反而是架构师经过深思熟虑后的首选方案。

7.1 任务特性的本质差异:流式输出 vs 异步大任务

AI 应用的交互模式决定了通信协议的选型:

应用类型场景特征解释说明
文本大模型(如 ChatGPT)流式持续输出模型在极短时间内(首个 Token 约 200ms 即可生成)就开始返回数据,随后持续"吐字"。若采用传统同步 HTTP,用户将面对长达数秒的白屏等待,体验极差。SSE/流式 HTTP 正是为此类场景量身打造。
AI 生图/生视频重计算异步任务一张高质量图片的生成可能需要 GPU 满载运算 10~30 秒,甚至在高峰期需要排队数分钟。任务执行期间,除了偶尔的进度更新(10%、50%),并没有持续的数据流可供传输。让客户端和网关之间维持一条长达数十秒的"闲置长连接",仅用于等待最终一个图片 URL 的返回,在系统设计上是一笔不小的开销。

7.2 基础设施的残酷现实:连接池枯竭与网关超时

如果 AI 生图使用 WebSocket 或保持长达 30 秒的 HTTP 连接,会遇到严峻的基础设施挑战:

挑战说明
网关/负载均衡的超时限制大多数云厂商的负载均衡器(如 AWS ALB、Nginx 默认配置)和 CDN 对 HTTP 连接都有严格超时限制(通常为 30s 至 60s)。当 AI 任务耗时过长时,网关会主动切断连接并返回 504 Gateway Timeout。
并发连接数瓶颈服务器的并发连接池是有限的。假设 1 万名用户同时排队等图片:使用 WebSocket 需要维持 1 万个长连接;而使用轮询,每位用户每 3 秒发起一个极轻量的 GET 请求,查询完毕立即释放连接。无状态的短连接模式能让服务器吞吐量提升数个量级。

7.3 后端架构的天然要求:解耦与消息队列

现代高并发 AI 生图平台的后端架构通常是彻底解耦的:

  1. 提交任务 (Client):客户端 POST 请求 /api/generate

  2. 下发队列 (API Server):API 服务器将任务投入 Kafka/RabbitMQ 队列中,生成唯一 task_id 并立即返回给客户端(耗时约 50ms)。

  3. 异步消费 (GPU Worker):后端 GPU 节点从队列中取出任务,执行计算。生成完毕后,将图片上传至 OSS/S3 并将结果写入数据库。

  4. 获取结果 (Client):客户端持有 task_id,每隔数秒轮询一次 /api/task/{task_id} 查询任务状态。

在这个经典的生产者-消费者模型中,处理 HTTP 请求的 Web 服务器与真正执行计算的 GPU 服务器在物理上彼此隔离。若强行使用 WebSocket 或 SSE 将二者串联,不仅违背了解耦原则,还会使 Web 服务器与 GPU 节点间的状态同步变得极为复杂。

7.4 移动端弱网环境下的"绝对鲁棒性"

试想这样一个场景:用户在地铁中使用手机生图,刚提交任务便遭遇了 5 秒的网络中断。

  • 使用 WebSocket:连接断开后,重连时如何恢复先前的"会话状态"?服务器如何识别并继续向重连后的客户端推送结果?这需要一套复杂的重传与会话恢复机制。

  • 使用轮询 (Polling):则极为简洁。客户端持有 task_id。网络恢复后,继续发送 GET /api/task/{task_id} 即可获取结果。无状态特性带来了卓越的抗干扰能力。

7.5 小结

综上所述,轮询凭借其无状态、低连接开销、高吞吐量的特性,成为 AI 生图场景下更具性价比的通信方案

当然,如果决定使用轮询,为了兼顾体验和服务器压力,业界通常会采用退避轮询策略——即随着任务等待时间延长,逐步降低查询频率。例如前 30 秒每 2 秒查询一次,30 秒后改为每 5 秒查询一次,到后期甚至可以降至每 10 秒一次。这种策略能在保证及时获取结果的同时,有效减少不必要的请求开销。

8. 实践选型指南:不买最贵的,只选最对的

在实际应用中,脱离业务场景谈协议与通信方案的优劣是毫无意义的。WebSocket 虽强,但并非银弹;标准 HTTP 虽“老”,但在大规模分布式系统中依然是最稳健的选择。

8.1 决策矩阵:AI 与实时业务场景选型

业务场景任务耗时特征推荐通信协议决策依据与变通方案
AI 文本对话 (LLM)快速响应,持续文本流 (几秒~几十秒)流式 HTTP (Fetch / SSE)需提供“打字机”反馈以维持用户注意力。相比 WS,HTTP 更易穿透防火墙与网关。
AI 实时语音/视觉助手极低延迟,双向高频互动 (<500ms)WebSocket / WebRTC必须消除 HTTP 握手与头部延迟,实现真正的全双工流式交互。
AI 快速生图 (SDXL Turbo)耗时极短(<3s),无排队压力标准 HTTP (Request-Response)简单的挂起等待即可。无需引入长连接复杂度,保持架构简洁。
高精生图/视频/长文生成耗时长且需排队(10s ~ 数分钟)异步提交 + HTTP 轮询保护网关的核心手段。解耦 GPU 计算节点与 Web 节点,客户端持 TaskID 定时查询状态。
跨系统事件同步事件驱动,无固定耗时Webhooks适用于服务端间的异步事件通知(如支付回调、订单同步、Git 钩子触发 CI/CD)。接收方需预先暴露回调 URL,并确保幂等处理与签名验证。

8.2 深度决策逻辑:工程选型的五条金律

1、高频双向:WebSocket 的主场

核心逻辑:HTTP 及其衍生品在双向交互下,重复的头部开销会吞噬大量带宽,且无法实现真正的全双工并发。

若业务需要客户端与服务端互发高频消息(如多人竞技游戏、协作编辑、实时双向聊天),WebSocket 是唯一选择

2、单向推送:SSE 的轻量优势

若业务场景仅需服务端向客户端单向高频推送(如股票行情大盘、服务器实时日志、监控预警):

首选方案是 SSE。它完全复用现有的 HTTP 基础设施(负载均衡、WAF、鉴权逻辑),无需额外配置 WebSocket 网关。同时,其原生的断线重连机制极大降低了前端的开发心智负担。

3、流式响应:Streamable HTTP 的主场,AI 时代的主流选择

这是目前 LLM 文本对话中最主流的"事实标准"

痛点:原生 SSE 受限于浏览器实现,通常只能发起 GET 请求。但在 AI 场景下,我们需要发送庞大的 system_prompt 或上下文历史(Context),GET 的 URL 长度限制成为了瓶颈。

变通方案使用 Fetch API 结合 POST 请求,通过 ReadableStream 接收流式响应。既能突破 GET 的长度限制,又避免了 WebSocket 在维持长连接、处理心跳保活方面的额外资源损耗。这正是 fetch-event-source 这类库在 AI 社区盛行的底层逻辑。

4、异步任务:轮询的主场

对于 AI 生图、生视频等耗时较长(10s ~ 数分钟)的重计算任务,其特点是计算期间无持续数据流,仅在完成后返回结果。

此时若强行使用 WebSocket 或 SSE 维持长连接,不仅会遭遇网关超时限制(通常 30s~60s),还会造成并发连接数瓶颈。异步提交 + 轮询查询是更合理的架构:客户端提交任务后获得 TaskID,定期轮询查询状态。这种方式解耦了 Web 节点与 GPU 节点,无状态的短连接模式让服务器能够承载更高的吞吐量。

5、跨系统回调:Webhooks 的主场

若业务涉及跨服务的事件通知(如支付平台回调、订单状态变更通知、Git 仓库事件触发 CI/CD),且接收方是服务端而非浏览器:

首选方案是 Webhooks。它完全基于标准 HTTP POST 请求,无需维护持久连接,由接收方预先暴露回调 URL 即可实现事件驱动推送。这种模式天然适合服务间的松耦合集成,但需注意幂等性处理与签名验证以确保安全。

9. 结语

回望这场从 HTTP 到 WebSocket 的技术演进,我们或许能提炼出一个更普适的架构哲学:没有"最好"的技术,只有"最合适"的技术

技术的演进从来不是"长江后浪推前浪"的简单替代,而是一种"分工细化"的自然结果。传统 HTTP 依然是 Web 的基石,流式 HTTP 让它焕发新生;SSE 在单向推送场景轻量而优雅;WebSocket 为真正的实时双向交互打开了大门;轮询在 AI 时代的大模型洪流中,依然默默支撑着无数生图、生视频应用的正常运行;而 Webhooks 则在跨系统的服务端间编织出一张事件驱动的网络。

真正成熟的架构师,不会执着于"最新"或"最复杂"的方案,而是深入理解每种技术的边界与代价,在业务场景的约束下做出最优雅的取舍。毕竟,最好的架构不是用技术堆砌出来的,而是让技术各归其位的顺势而为

',108)])])}const T=e(d,[["render",n]]);export{c as __pageData,T as default}; diff --git a/assets/fullstack_networking-protocol-selection-guide.md.C5frLLOO.lean.js b/assets/fullstack_networking-protocol-selection-guide.md.M0GzKHtc.lean.js similarity index 95% rename from assets/fullstack_networking-protocol-selection-guide.md.C5frLLOO.lean.js rename to assets/fullstack_networking-protocol-selection-guide.md.M0GzKHtc.lean.js index 7fce005..6c9ecc2 100644 --- a/assets/fullstack_networking-protocol-selection-guide.md.C5frLLOO.lean.js +++ b/assets/fullstack_networking-protocol-selection-guide.md.M0GzKHtc.lean.js @@ -1 +1 @@ -import{_ as e,c as o,o as r,d as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","frontmatter":{"date":"2026-02-24T08:40:31.000Z","title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","tldr":"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","categories":["全栈","网络与通信"],"tags":["HTTP","HTTP 轮询","SSE","WebSocket","Webhooks"],"permalink":"/fullstack/networking-protocol-selection-guide"},"headers":[],"relativePath":"fullstack/networking-protocol-selection-guide.md","filePath":"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md"}'),d={name:"fullstack/networking-protocol-selection-guide.md"};function n(s,t,h,l,i,g){return r(),o("div",null,[...t[0]||(t[0]=[a("",108)])])}const T=e(d,[["render",n]]);export{c as __pageData,T as default}; +import{_ as e,c as o,o as r,d as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","frontmatter":{"date":"2026-02-24T08:40:31.000Z","title":"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南","tldr":"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。","description":"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。","categories":["全栈","网络与通信"],"tags":["HTTP","HTTP 轮询","SSE","WebSocket","Webhooks"],"permalink":"/fullstack/networking-protocol-selection-guide"},"headers":[],"relativePath":"fullstack/networking-protocol-selection-guide.md","filePath":"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md"}'),d={name:"fullstack/networking-protocol-selection-guide.md"};function n(s,t,h,l,i,g){return r(),o("div",null,[...t[0]||(t[0]=[a("",108)])])}const T=e(d,[["render",n]]);export{c as __pageData,T as default}; diff --git a/assets/fullstack_networking-sse-practice.md.CYa-7UGx.js b/assets/fullstack_networking-sse-practice.md.BrfbBg9x.js similarity index 99% rename from assets/fullstack_networking-sse-practice.md.CYa-7UGx.js rename to assets/fullstack_networking-sse-practice.md.BrfbBg9x.js index 32635aa..7500bf7 100644 --- a/assets/fullstack_networking-sse-practice.md.CYa-7UGx.js +++ b/assets/fullstack_networking-sse-practice.md.BrfbBg9x.js @@ -1,4 +1,4 @@ -import{H as a}from"./chunks/HighLightText.pXHFEzDb.js";import{c as h,o as k,d as n,a as l,e as i,b as p,w as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const y=JSON.parse('{"title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","frontmatter":{"date":"2026-03-05T16:54:35.000Z","title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","aliases":["Server-Sent Events","HTTP Streaming"],"tldr":"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","tags":["tutorial","SSE","HTTP Streaming","全栈"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-sse-practice"},"headers":[],"relativePath":"fullstack/networking-sse-practice.md","filePath":"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md"}'),t={name:"fullstack/networking-sse-practice.md"},b=Object.assign(t,{setup(r){return(E,s)=>(k(),h("div",null,[s[10]||(s[10]=n('

流式 HTTP 与 SSE 协议:从概念辨析到生产实践

摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 NestJS 为例展示服务端 SSE 响应的标准实现与 POST 请求扩展,最后涵盖指数退避重试、事件分类处理、连接状态追踪、资源清理等生产实践要点,为 AI 时代的流式响应场景提供完整技术方案。

1. 引言

Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南中,我们对比分析了多种通信技术。在本文我们将重点探讨 SSE(Server-Sent Events)流式 HTTP(HTTP Streaming) 的实践。

1.1 概念澄清:两种技术,两个层次

很多开发者容易将 SSE 与流式 HTTP 混为一谈,实际上它们处于不同的技术层次:

维度流式 HTTPSSE
定位底层传输机制应用层协议
核心原理HTTP Chunked Transfer Encoding,数据分块连续传输基于 HTTP 的事件流协议,定义了标准化的数据格式
浏览器原生支持无,需自行解析数据流有,EventSource API
协议规范无标准格式约定W3C 标准(text/event-stream
',7)),l("p",null,[s[2]||(s[2]=i("简而言之,",-1)),p(a,{bold:""},{default:e(()=>[...s[0]||(s[0]=[i("流式 HTTP 是一种“传输手段”,而 SSE 是一种“数据格式约定”",-1)])]),_:1}),s[3]||(s[3]=i("。",-1)),p(a,{type:"info"},{default:e(()=>[...s[1]||(s[1]=[i("流式 HTTP 关注的是如何把数据“边发边传”,而 SSE 关注的是如何让数据“按照固定格式组织”,便于客户端解析处理",-1)])]),_:1}),s[4]||(s[4]=i("。",-1))]),s[11]||(s[11]=n('

1.2 关联与协作

尽管处于不同层次,但二者完全可以协同工作:

  • SSE 必须基于流式 HTTP:SSE 的标准格式需要通过 HTTP 流式传输来实现,因此 SSE 协议的数据流底层必然依赖流式 HTTP
  • 流式 HTTP 不必局限于 SSE:纯流式 HTTP 可以自定义数据格式(如 JSON Lines、NDJSON),不一定要遵循 SSE 的 event:id:data: 等字段约定

正是由于这种关系,我们可以利用 fetch + ReadableStream 突破 SSE 的一些局限

  1. 请求方式受限:原生 SSE 仅支持 GET 请求,当需要携带较大 body 数据(如文件上传上下文、复杂查询参数)时会受到限制,而 fetch API 不受此约束。
  2. 身份验证不便:原生 SSE 无法灵活地在请求头中添加 Authorization: Bearer <token> 等认证信息,fetch API 则可以像调用普通接口一样自定义 Header。

因此,基于流式 HTTP,采用 fetch + ReadableStream 的方案,不仅保留了 fetch 的全部能力(POST 方法、自定义 Headers、超时控制等),同时具备了流式传输的实时性,并且在数据格式层面依然遵循 SSE 协议,保持良好的可解析性和通用性。相比原生 SSE,使用 Fetch API + ReadableStream 能突破 GET 请求限制,可携带任意大小的 body 数据,同时支持灵活的身份验证方式;相比 WebSocket,则避免了维护长连接和心跳保活的额外资源损耗。

',6)),l("p",null,[s[6]||(s[6]=i("这种“取两家之长”的方案,正是 ",-1)),s[7]||(s[7]=l("a",{href:"https://github.com/Azure/fetch-event-source",target:"_blank",rel:"noreferrer"},"@microsoft/fetch-event-source",-1)),s[8]||(s[8]=i(" 这类库在 AI 社区盛行的底层逻辑:",-1)),p(a,{bold:""},{default:e(()=>[...s[5]||(s[5]=[i("既能像调用普通接口一样编写业务逻辑,又能享受流式传输的实时性,数据格式依然遵循 SSE 协议,客户端解析毫无额外成本",-1)])]),_:1}),s[9]||(s[9]=i("。",-1))]),s[12]||(s[12]=n(`
特性标准 EventSource (SSE)Fetch + Stream
HTTP 方法仅限 GET支持 POST、PUT 等所有方法
自定义 Header不支持(无法传 Token 等)完全支持
**请求体 **(Body)不支持支持发送 JSON Payload
重连机制浏览器内置,难以精细控制插件实现,支持高度自定义重连策略
跨域 (CORS)比较死板,需特定配置遵循标准的 Fetch CORS 规则
底层 API浏览器原生 EventSource 对象基于 fetch 和 ReadableStream

1.3 SSE 协议数据格式

SSE 协议对数据流格式有明确规定,服务器返回的响应头和数据体需遵循以下规范:

markdown
Content-Type: text/event-stream
+import{H as a}from"./chunks/HighLightText.DNC3BKyb.js";import{c as h,o as k,d as n,a as l,e as i,b as p,w as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             */const y=JSON.parse('{"title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","frontmatter":{"date":"2026-03-05T16:54:35.000Z","title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","aliases":["Server-Sent Events","HTTP Streaming"],"tldr":"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","tags":["tutorial","SSE","HTTP Streaming","全栈"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-sse-practice"},"headers":[],"relativePath":"fullstack/networking-sse-practice.md","filePath":"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md"}'),t={name:"fullstack/networking-sse-practice.md"},b=Object.assign(t,{setup(r){return(E,s)=>(k(),h("div",null,[s[10]||(s[10]=n('

流式 HTTP 与 SSE 协议:从概念辨析到生产实践

摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 NestJS 为例展示服务端 SSE 响应的标准实现与 POST 请求扩展,最后涵盖指数退避重试、事件分类处理、连接状态追踪、资源清理等生产实践要点,为 AI 时代的流式响应场景提供完整技术方案。

1. 引言

Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南中,我们对比分析了多种通信技术。在本文我们将重点探讨 SSE(Server-Sent Events)流式 HTTP(HTTP Streaming) 的实践。

1.1 概念澄清:两种技术,两个层次

很多开发者容易将 SSE 与流式 HTTP 混为一谈,实际上它们处于不同的技术层次:

维度流式 HTTPSSE
定位底层传输机制应用层协议
核心原理HTTP Chunked Transfer Encoding,数据分块连续传输基于 HTTP 的事件流协议,定义了标准化的数据格式
浏览器原生支持无,需自行解析数据流有,EventSource API
协议规范无标准格式约定W3C 标准(text/event-stream
',7)),l("p",null,[s[2]||(s[2]=i("简而言之,",-1)),p(a,{bold:""},{default:e(()=>[...s[0]||(s[0]=[i("流式 HTTP 是一种“传输手段”,而 SSE 是一种“数据格式约定”",-1)])]),_:1}),s[3]||(s[3]=i("。",-1)),p(a,{type:"info"},{default:e(()=>[...s[1]||(s[1]=[i("流式 HTTP 关注的是如何把数据“边发边传”,而 SSE 关注的是如何让数据“按照固定格式组织”,便于客户端解析处理",-1)])]),_:1}),s[4]||(s[4]=i("。",-1))]),s[11]||(s[11]=n('

1.2 关联与协作

尽管处于不同层次,但二者完全可以协同工作:

  • SSE 必须基于流式 HTTP:SSE 的标准格式需要通过 HTTP 流式传输来实现,因此 SSE 协议的数据流底层必然依赖流式 HTTP
  • 流式 HTTP 不必局限于 SSE:纯流式 HTTP 可以自定义数据格式(如 JSON Lines、NDJSON),不一定要遵循 SSE 的 event:id:data: 等字段约定

正是由于这种关系,我们可以利用 fetch + ReadableStream 突破 SSE 的一些局限

  1. 请求方式受限:原生 SSE 仅支持 GET 请求,当需要携带较大 body 数据(如文件上传上下文、复杂查询参数)时会受到限制,而 fetch API 不受此约束。
  2. 身份验证不便:原生 SSE 无法灵活地在请求头中添加 Authorization: Bearer <token> 等认证信息,fetch API 则可以像调用普通接口一样自定义 Header。

因此,基于流式 HTTP,采用 fetch + ReadableStream 的方案,不仅保留了 fetch 的全部能力(POST 方法、自定义 Headers、超时控制等),同时具备了流式传输的实时性,并且在数据格式层面依然遵循 SSE 协议,保持良好的可解析性和通用性。相比原生 SSE,使用 Fetch API + ReadableStream 能突破 GET 请求限制,可携带任意大小的 body 数据,同时支持灵活的身份验证方式;相比 WebSocket,则避免了维护长连接和心跳保活的额外资源损耗。

',6)),l("p",null,[s[6]||(s[6]=i("这种“取两家之长”的方案,正是 ",-1)),s[7]||(s[7]=l("a",{href:"https://github.com/Azure/fetch-event-source",target:"_blank",rel:"noreferrer"},"@microsoft/fetch-event-source",-1)),s[8]||(s[8]=i(" 这类库在 AI 社区盛行的底层逻辑:",-1)),p(a,{bold:""},{default:e(()=>[...s[5]||(s[5]=[i("既能像调用普通接口一样编写业务逻辑,又能享受流式传输的实时性,数据格式依然遵循 SSE 协议,客户端解析毫无额外成本",-1)])]),_:1}),s[9]||(s[9]=i("。",-1))]),s[12]||(s[12]=n(`
特性标准 EventSource (SSE)Fetch + Stream
HTTP 方法仅限 GET支持 POST、PUT 等所有方法
自定义 Header不支持(无法传 Token 等)完全支持
**请求体 **(Body)不支持支持发送 JSON Payload
重连机制浏览器内置,难以精细控制插件实现,支持高度自定义重连策略
跨域 (CORS)比较死板,需特定配置遵循标准的 Fetch CORS 规则
底层 API浏览器原生 EventSource 对象基于 fetch 和 ReadableStream

1.3 SSE 协议数据格式

SSE 协议对数据流格式有明确规定,服务器返回的响应头和数据体需遵循以下规范:

markdown
Content-Type: text/event-stream
 Cache-Control: no-cache
 Connection: keep-alive
 
diff --git a/assets/fullstack_networking-sse-practice.md.CYa-7UGx.lean.js b/assets/fullstack_networking-sse-practice.md.BrfbBg9x.lean.js
similarity index 94%
rename from assets/fullstack_networking-sse-practice.md.CYa-7UGx.lean.js
rename to assets/fullstack_networking-sse-practice.md.BrfbBg9x.lean.js
index 63d6452..d41d1e4 100644
--- a/assets/fullstack_networking-sse-practice.md.CYa-7UGx.lean.js
+++ b/assets/fullstack_networking-sse-practice.md.BrfbBg9x.lean.js
@@ -1 +1 @@
-import{H as a}from"./chunks/HighLightText.pXHFEzDb.js";import{c as h,o as k,d as n,a as l,e as i,b as p,w as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const y=JSON.parse('{"title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","frontmatter":{"date":"2026-03-05T16:54:35.000Z","title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","aliases":["Server-Sent Events","HTTP Streaming"],"tldr":"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","tags":["tutorial","SSE","HTTP Streaming","全栈"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-sse-practice"},"headers":[],"relativePath":"fullstack/networking-sse-practice.md","filePath":"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md"}'),t={name:"fullstack/networking-sse-practice.md"},b=Object.assign(t,{setup(r){return(E,s)=>(k(),h("div",null,[s[10]||(s[10]=n("",7)),l("p",null,[s[2]||(s[2]=i("简而言之,",-1)),p(a,{bold:""},{default:e(()=>[...s[0]||(s[0]=[i("流式 HTTP 是一种“传输手段”,而 SSE 是一种“数据格式约定”",-1)])]),_:1}),s[3]||(s[3]=i("。",-1)),p(a,{type:"info"},{default:e(()=>[...s[1]||(s[1]=[i("流式 HTTP 关注的是如何把数据“边发边传”,而 SSE 关注的是如何让数据“按照固定格式组织”,便于客户端解析处理",-1)])]),_:1}),s[4]||(s[4]=i("。",-1))]),s[11]||(s[11]=n("",6)),l("p",null,[s[6]||(s[6]=i("这种“取两家之长”的方案,正是 ",-1)),s[7]||(s[7]=l("a",{href:"https://github.com/Azure/fetch-event-source",target:"_blank",rel:"noreferrer"},"@microsoft/fetch-event-source",-1)),s[8]||(s[8]=i(" 这类库在 AI 社区盛行的底层逻辑:",-1)),p(a,{bold:""},{default:e(()=>[...s[5]||(s[5]=[i("既能像调用普通接口一样编写业务逻辑,又能享受流式传输的实时性,数据格式依然遵循 SSE 协议,客户端解析毫无额外成本",-1)])]),_:1}),s[9]||(s[9]=i("。",-1))]),s[12]||(s[12]=n("",91))]))}});export{y as __pageData,b as default};
+import{H as a}from"./chunks/HighLightText.DNC3BKyb.js";import{c as h,o as k,d as n,a as l,e as i,b as p,w as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             */const y=JSON.parse('{"title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","frontmatter":{"date":"2026-03-05T16:54:35.000Z","title":"流式 HTTP 与 SSE 协议:从概念辨析到生产实践","aliases":["Server-Sent Events","HTTP Streaming"],"tldr":"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。","description":"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。","tags":["tutorial","SSE","HTTP Streaming","全栈"],"categories":["全栈","网络与通信"],"permalink":"/fullstack/networking-sse-practice"},"headers":[],"relativePath":"fullstack/networking-sse-practice.md","filePath":"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md"}'),t={name:"fullstack/networking-sse-practice.md"},b=Object.assign(t,{setup(r){return(E,s)=>(k(),h("div",null,[s[10]||(s[10]=n("",7)),l("p",null,[s[2]||(s[2]=i("简而言之,",-1)),p(a,{bold:""},{default:e(()=>[...s[0]||(s[0]=[i("流式 HTTP 是一种“传输手段”,而 SSE 是一种“数据格式约定”",-1)])]),_:1}),s[3]||(s[3]=i("。",-1)),p(a,{type:"info"},{default:e(()=>[...s[1]||(s[1]=[i("流式 HTTP 关注的是如何把数据“边发边传”,而 SSE 关注的是如何让数据“按照固定格式组织”,便于客户端解析处理",-1)])]),_:1}),s[4]||(s[4]=i("。",-1))]),s[11]||(s[11]=n("",6)),l("p",null,[s[6]||(s[6]=i("这种“取两家之长”的方案,正是 ",-1)),s[7]||(s[7]=l("a",{href:"https://github.com/Azure/fetch-event-source",target:"_blank",rel:"noreferrer"},"@microsoft/fetch-event-source",-1)),s[8]||(s[8]=i(" 这类库在 AI 社区盛行的底层逻辑:",-1)),p(a,{bold:""},{default:e(()=>[...s[5]||(s[5]=[i("既能像调用普通接口一样编写业务逻辑,又能享受流式传输的实时性,数据格式依然遵循 SSE 协议,客户端解析毫无额外成本",-1)])]),_:1}),s[9]||(s[9]=i("。",-1))]),s[12]||(s[12]=n("",91))]))}});export{y as __pageData,b as default};
diff --git a/assets/fullstack_next-deep-dive.md.DSAxqYkS.js b/assets/fullstack_next-deep-dive.md.G2zDSoIv.js
similarity index 99%
rename from assets/fullstack_next-deep-dive.md.DSAxqYkS.js
rename to assets/fullstack_next-deep-dive.md.G2zDSoIv.js
index 1352a64..99da115 100644
--- a/assets/fullstack_next-deep-dive.md.DSAxqYkS.js
+++ b/assets/fullstack_next-deep-dive.md.G2zDSoIv.js
@@ -1,4 +1,4 @@
-import{H as c}from"./chunks/HighLightText.pXHFEzDb.js";import{K as e}from"./chunks/KeyTakeaway.DyBgCpiw.js";/* empty css                                                                          */import{S as g}from"./chunks/StepGuide.B2IY2DS6.js";import{C as l}from"./chunks/ConceptPair.DYvaVmrQ.js";import{r as p,c as E,o as b,d as t,b as i,a,e as n,w as r}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             *//* empty css                                                                           */const R=JSON.parse('{"title":"Next.js 深度解析:从架构理念到工程实践","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","frontmatter":{"date":"2026-03-13T21:30:35.000Z","title":"Next.js 深度解析:从架构理念到工程实践","tldr":"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","tags":["Next.js","React","SSR","前端架构"],"categories":["全栈","前端工程"],"permalink":"/fullstack/next-deep-dive"},"headers":[],"relativePath":"fullstack/next-deep-dive.md","filePath":"01.全栈/40.前端工程/05.Next.js.md"}'),u={name:"fullstack/next-deep-dive.md"},f=Object.assign(u,{setup(y){const h={label:"Server Components",description:"默认在服务端运行,无需额外声明",points:["数据获取:直连数据库,靠近数据源","敏感操作:密钥、Token 永不暴露到浏览器","减少客户端 JS:组件代码不发送到浏览器"]},d={label:"Client Components",description:'文件顶部加 "use client" 声明',points:["交互事件:onClick、onChange、onSubmit 等","React Hooks:useState、useEffect、useContext 等","浏览器 API:window、localStorage、geolocation","仅客户端库:图表(ECharts)、动画(Framer Motion)、地图 SDK"]};return(m,s)=>{const k=p("MermaidChart"),o=p("ClientOnly");return b(),E("div",null,[s[3]||(s[3]=t('

Next.js 深度解析:从架构理念到工程实践

摘要: 从 React SSR 的基础能力出发,阐明 Next.js 作为框架解决的关键工程问题。核心围绕 Server First 架构哲学,对比传统 React 与 Next.js App Router 的心智模型转变,解析该转变在体积、安全与架构层面的三重收益。系统介绍了 React Server Components 与 Client Components 的分工边界、四种混合渲染策略的选择逻辑、文件系统路由的约定式设计、基于 async/await 的数据获取新范式,以及 Image、Link、Script、Font 等内置优化组件的原理。深入分析了 Streaming 加 Suspense 的流式渲染流程、Partial Prerendering 的动静分离机制与 Cache Components 的计算跳过策略之间的协同关系。最后给出 Next.js 的适用场景边界与核心实践原则。

1. 从 React SSR 到 Next.js:为什么需要一个框架

要理解 Next.js 的价值,首先要看清 React 服务端渲染的底层运作方式。React SSR 围绕两个核心包展开——一个负责产出 HTML,一个负责赋予交互:

1.1 react-dom/server — 服务端渲染

在 Node.js 环境中,React 组件被渲染为 HTML 字符串后直接返回给浏览器。关键 API 是 renderToStringrenderToPipeableStream。这里的核心难点在于数据预取——服务端必须在渲染前完成数据获取,将数据注入组件后再生成 HTML,才能确保首屏内容完整。然而,何时获取数据、以什么顺序获取、出错如何处理,React 完全不插手。

1.2 react-dom/client — 客户端水合(Hydration)

浏览器拿到服务端返回的 HTML 后,hydrateRoot 会将事件监听器"挂载"到这份静态 DOM 上。React 遍历已有的 DOM 树,将虚拟 DOM 与真实 DOM 进行比对——不重新创建节点,仅附加事件处理器和内部状态——完成从"静态"到"可交互"的转换。如果服务端和客户端的渲染结果不一致,水合就会失败,而保证这一一致性同样需要开发者自行负责。

1.3 从"库"到"框架"的鸿沟

react-dom/serverreact-dom/client 提供了 SSR 所需的基础能力,但它们并非完整的解决方案。一个真实的 SSR 应用还需要解决:路由匹配、数据预取的编排、服务端与客户端状态同步、代码拆分、缓存策略、部署架构……这些工程问题 React 一概不负责,每一项都需要开发者自行拼装。

这正是 Next.js 存在的意义。

React 决定了你能"画出什么",Next.js 决定了你的应用以怎样的方式呈现给用户——加载有多快、SEO 有多友好、架构有多合理。

Next.js 将"从组件到用户"的完整交付链路封装为框架层的默认方案。它并非 React 功能的简单叠加,而是将关键架构决策内化为框架约定:路由如何组织、页面如何渲染、数据如何获取、bundle 如何拆分——这些问题的答案已被写进框架,开发者可以专注于业务本身。

React(库)Next.js(框架)
职责边界UI 渲染:把组件画到屏幕上完整交付链路:路由 → 渲染 → 数据 → 部署
路由需自行集成(如 react-router)文件系统路由,零配置
渲染模式纯 CSR,首屏依赖 JS 加载SSR + SSG + ISR + CSR 混合渲染
数据获取useEffect 中客户端 fetch服务端直接 async/await,安全高效
部署自行配置构建和部署流程一键部署至 Vercel,也支持 Docker 自托管

这背后体现了一种架构哲学的转变:Next.js 不仅解决了"怎么渲染"的技术问题,更代表了一种默认在服务端运行,只在必要时才向客户端发送 JavaScript 的架构立场——这是对过去十年 SPA 范式的根本性反思。

',15)),i(e,{variant:"summary",points:["Next.js 将关键架构决策内化为框架约定:路由、渲染、数据获取、bundle 拆分的答案已写进框架","Server First:默认在服务端运行,只在必要时才向客户端发送 JavaScript","混合渲染:不同页面、甚至同一页面的不同区域可各自选择渲染策略","内置优化组件(Image / Link / Script / Font)在框架层解决性能问题,开发者无需手写优化代码"]}),s[4]||(s[4]=a("h2",{id:"_2-server-first-next-js-的架构内核",tabindex:"-1"},[n("2. Server First:Next.js 的架构内核 "),a("a",{class:"header-anchor",href:"#_2-server-first-next-js-的架构内核","aria-label":"Permalink to “2. Server First:Next.js 的架构内核”"},"​")],-1)),s[5]||(s[5]=a("p",null,"Next.js 的核心能力可以归纳为五个维度,它们层层递进,覆盖了从「页面如何渲染」到「项目如何组织」的完整链路:",-1)),i(o,null,{default:r(()=>[i(k,{code:"graph%20LR%0A%20%20%20%20A%5B%3Cb%3E%E5%BC%80%E5%8F%91%E4%BD%93%E9%AA%8C%3C%2Fb%3E%3Cbr%2F%3E%E9%9B%B6%E9%85%8D%E7%BD%AE%20%2F%20HMR%5D%20--%3E%20B%5B%3Cb%3E%E8%B7%AF%E7%94%B1%E7%B3%BB%E7%BB%9F%3C%2Fb%3E%3Cbr%2F%3EApp%20Router%5D%0A%20%20%20%20B%20--%3E%20C%5B%3Cb%3E%E6%B8%B2%E6%9F%93%E7%AD%96%E7%95%A5%3C%2Fb%3E%3Cbr%2F%3ESSR%20%2F%20SSG%20%2F%20ISR%5D%0A%20%20%20%20C%20--%3E%20D%5B%3Cb%3E%E7%BB%84%E4%BB%B6%E6%A8%A1%E5%9E%8B%3C%2Fb%3E%3Cbr%2F%3ERSC%20%2B%20Client%5D%0A%20%20%20%20D%20--%3E%20E%5B%3Cb%3E%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%3C%2Fb%3E%3Cbr%2F%3EImage%20%2F%20Link%20%2F%20Streaming%5D%0A",showToolbar:"1"})]),_:1}),s[6]||(s[6]=a("p",null,"理解 Next.js 的关键在于把握一个根本性的心智模型转变:",-1)),i(l,{title:"组件运行环境的范式反转",left:{label:"传统 React",description:"所有组件默认在浏览器中运行",points:["服务端渲染只是辅助手段","CSR 是默认行为","SPA 范式:JS 驱动一切"]},right:{label:"Next.js App Router",description:"所有组件默认在服务端运行",points:["客户端组件需主动声明","Server First 架构","Server Components 是默认"]}}),s[7]||(s[7]=t(`

这一转变带来了三重收益:

  • 客户端 JS 体积更小,服务端组件不向浏览器发送 JS 源码。
  • 数据访问更安全,API Key 和数据库密码永远不会暴露到浏览器。
  • 架构更简洁,组件可直接查询数据库,无需额外的 API 中间层。

2.1 React Server Components (RSC)

在 App Router 中,组件默认就在服务端运行,无需额外声明。RSC 的渲染结果会被序列化为 RSC Payload——一种轻量的数据传输格式——直接传给浏览器。这意味着浏览器不需要下载组件的 JS 代码,自然也不需要下载和执行这些代码,页面加载的 JavaScript 体积因此大幅减少。

一次页面请求的完整流程:

markdown
用户请求 /dashboard
+import{H as c}from"./chunks/HighLightText.DNC3BKyb.js";import{K as e}from"./chunks/KeyTakeaway.Cr-Br5gs.js";/* empty css                                                                          */import{S as g}from"./chunks/StepGuide.Cdy7FBTp.js";import{C as l}from"./chunks/ConceptPair.CDPz5jW2.js";import{r as p,c as E,o as b,d as t,b as i,a,e as n,w as r}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             *//* empty css                                                                           */const R=JSON.parse('{"title":"Next.js 深度解析:从架构理念到工程实践","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","frontmatter":{"date":"2026-03-13T21:30:35.000Z","title":"Next.js 深度解析:从架构理念到工程实践","tldr":"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","tags":["Next.js","React","SSR","前端架构"],"categories":["全栈","前端工程"],"permalink":"/fullstack/next-deep-dive"},"headers":[],"relativePath":"fullstack/next-deep-dive.md","filePath":"01.全栈/40.前端工程/05.Next.js.md"}'),u={name:"fullstack/next-deep-dive.md"},f=Object.assign(u,{setup(y){const h={label:"Server Components",description:"默认在服务端运行,无需额外声明",points:["数据获取:直连数据库,靠近数据源","敏感操作:密钥、Token 永不暴露到浏览器","减少客户端 JS:组件代码不发送到浏览器"]},d={label:"Client Components",description:'文件顶部加 "use client" 声明',points:["交互事件:onClick、onChange、onSubmit 等","React Hooks:useState、useEffect、useContext 等","浏览器 API:window、localStorage、geolocation","仅客户端库:图表(ECharts)、动画(Framer Motion)、地图 SDK"]};return(m,s)=>{const k=p("MermaidChart"),o=p("ClientOnly");return b(),E("div",null,[s[3]||(s[3]=t('

Next.js 深度解析:从架构理念到工程实践

摘要: 从 React SSR 的基础能力出发,阐明 Next.js 作为框架解决的关键工程问题。核心围绕 Server First 架构哲学,对比传统 React 与 Next.js App Router 的心智模型转变,解析该转变在体积、安全与架构层面的三重收益。系统介绍了 React Server Components 与 Client Components 的分工边界、四种混合渲染策略的选择逻辑、文件系统路由的约定式设计、基于 async/await 的数据获取新范式,以及 Image、Link、Script、Font 等内置优化组件的原理。深入分析了 Streaming 加 Suspense 的流式渲染流程、Partial Prerendering 的动静分离机制与 Cache Components 的计算跳过策略之间的协同关系。最后给出 Next.js 的适用场景边界与核心实践原则。

1. 从 React SSR 到 Next.js:为什么需要一个框架

要理解 Next.js 的价值,首先要看清 React 服务端渲染的底层运作方式。React SSR 围绕两个核心包展开——一个负责产出 HTML,一个负责赋予交互:

1.1 react-dom/server — 服务端渲染

在 Node.js 环境中,React 组件被渲染为 HTML 字符串后直接返回给浏览器。关键 API 是 renderToStringrenderToPipeableStream。这里的核心难点在于数据预取——服务端必须在渲染前完成数据获取,将数据注入组件后再生成 HTML,才能确保首屏内容完整。然而,何时获取数据、以什么顺序获取、出错如何处理,React 完全不插手。

1.2 react-dom/client — 客户端水合(Hydration)

浏览器拿到服务端返回的 HTML 后,hydrateRoot 会将事件监听器"挂载"到这份静态 DOM 上。React 遍历已有的 DOM 树,将虚拟 DOM 与真实 DOM 进行比对——不重新创建节点,仅附加事件处理器和内部状态——完成从"静态"到"可交互"的转换。如果服务端和客户端的渲染结果不一致,水合就会失败,而保证这一一致性同样需要开发者自行负责。

1.3 从"库"到"框架"的鸿沟

react-dom/serverreact-dom/client 提供了 SSR 所需的基础能力,但它们并非完整的解决方案。一个真实的 SSR 应用还需要解决:路由匹配、数据预取的编排、服务端与客户端状态同步、代码拆分、缓存策略、部署架构……这些工程问题 React 一概不负责,每一项都需要开发者自行拼装。

这正是 Next.js 存在的意义。

React 决定了你能"画出什么",Next.js 决定了你的应用以怎样的方式呈现给用户——加载有多快、SEO 有多友好、架构有多合理。

Next.js 将"从组件到用户"的完整交付链路封装为框架层的默认方案。它并非 React 功能的简单叠加,而是将关键架构决策内化为框架约定:路由如何组织、页面如何渲染、数据如何获取、bundle 如何拆分——这些问题的答案已被写进框架,开发者可以专注于业务本身。

React(库)Next.js(框架)
职责边界UI 渲染:把组件画到屏幕上完整交付链路:路由 → 渲染 → 数据 → 部署
路由需自行集成(如 react-router)文件系统路由,零配置
渲染模式纯 CSR,首屏依赖 JS 加载SSR + SSG + ISR + CSR 混合渲染
数据获取useEffect 中客户端 fetch服务端直接 async/await,安全高效
部署自行配置构建和部署流程一键部署至 Vercel,也支持 Docker 自托管

这背后体现了一种架构哲学的转变:Next.js 不仅解决了"怎么渲染"的技术问题,更代表了一种默认在服务端运行,只在必要时才向客户端发送 JavaScript 的架构立场——这是对过去十年 SPA 范式的根本性反思。

',15)),i(e,{variant:"summary",points:["Next.js 将关键架构决策内化为框架约定:路由、渲染、数据获取、bundle 拆分的答案已写进框架","Server First:默认在服务端运行,只在必要时才向客户端发送 JavaScript","混合渲染:不同页面、甚至同一页面的不同区域可各自选择渲染策略","内置优化组件(Image / Link / Script / Font)在框架层解决性能问题,开发者无需手写优化代码"]}),s[4]||(s[4]=a("h2",{id:"_2-server-first-next-js-的架构内核",tabindex:"-1"},[n("2. Server First:Next.js 的架构内核 "),a("a",{class:"header-anchor",href:"#_2-server-first-next-js-的架构内核","aria-label":"Permalink to “2. Server First:Next.js 的架构内核”"},"​")],-1)),s[5]||(s[5]=a("p",null,"Next.js 的核心能力可以归纳为五个维度,它们层层递进,覆盖了从「页面如何渲染」到「项目如何组织」的完整链路:",-1)),i(o,null,{default:r(()=>[i(k,{code:"graph%20LR%0A%20%20%20%20A%5B%3Cb%3E%E5%BC%80%E5%8F%91%E4%BD%93%E9%AA%8C%3C%2Fb%3E%3Cbr%2F%3E%E9%9B%B6%E9%85%8D%E7%BD%AE%20%2F%20HMR%5D%20--%3E%20B%5B%3Cb%3E%E8%B7%AF%E7%94%B1%E7%B3%BB%E7%BB%9F%3C%2Fb%3E%3Cbr%2F%3EApp%20Router%5D%0A%20%20%20%20B%20--%3E%20C%5B%3Cb%3E%E6%B8%B2%E6%9F%93%E7%AD%96%E7%95%A5%3C%2Fb%3E%3Cbr%2F%3ESSR%20%2F%20SSG%20%2F%20ISR%5D%0A%20%20%20%20C%20--%3E%20D%5B%3Cb%3E%E7%BB%84%E4%BB%B6%E6%A8%A1%E5%9E%8B%3C%2Fb%3E%3Cbr%2F%3ERSC%20%2B%20Client%5D%0A%20%20%20%20D%20--%3E%20E%5B%3Cb%3E%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%3C%2Fb%3E%3Cbr%2F%3EImage%20%2F%20Link%20%2F%20Streaming%5D%0A",showToolbar:"1"})]),_:1}),s[6]||(s[6]=a("p",null,"理解 Next.js 的关键在于把握一个根本性的心智模型转变:",-1)),i(l,{title:"组件运行环境的范式反转",left:{label:"传统 React",description:"所有组件默认在浏览器中运行",points:["服务端渲染只是辅助手段","CSR 是默认行为","SPA 范式:JS 驱动一切"]},right:{label:"Next.js App Router",description:"所有组件默认在服务端运行",points:["客户端组件需主动声明","Server First 架构","Server Components 是默认"]}}),s[7]||(s[7]=t(`

这一转变带来了三重收益:

  • 客户端 JS 体积更小,服务端组件不向浏览器发送 JS 源码。
  • 数据访问更安全,API Key 和数据库密码永远不会暴露到浏览器。
  • 架构更简洁,组件可直接查询数据库,无需额外的 API 中间层。

2.1 React Server Components (RSC)

在 App Router 中,组件默认就在服务端运行,无需额外声明。RSC 的渲染结果会被序列化为 RSC Payload——一种轻量的数据传输格式——直接传给浏览器。这意味着浏览器不需要下载组件的 JS 代码,自然也不需要下载和执行这些代码,页面加载的 JavaScript 体积因此大幅减少。

一次页面请求的完整流程:

markdown
用户请求 /dashboard
 
 
   服务端渲染 RSC 树 ──── 直接查询数据库(无需 API 中间层)
diff --git a/assets/fullstack_next-deep-dive.md.DSAxqYkS.lean.js b/assets/fullstack_next-deep-dive.md.G2zDSoIv.lean.js
similarity index 95%
rename from assets/fullstack_next-deep-dive.md.DSAxqYkS.lean.js
rename to assets/fullstack_next-deep-dive.md.G2zDSoIv.lean.js
index 2f6195e..d8beacb 100644
--- a/assets/fullstack_next-deep-dive.md.DSAxqYkS.lean.js
+++ b/assets/fullstack_next-deep-dive.md.G2zDSoIv.lean.js
@@ -1 +1 @@
-import{H as c}from"./chunks/HighLightText.pXHFEzDb.js";import{K as e}from"./chunks/KeyTakeaway.DyBgCpiw.js";/* empty css                                                                          */import{S as g}from"./chunks/StepGuide.B2IY2DS6.js";import{C as l}from"./chunks/ConceptPair.DYvaVmrQ.js";import{r as p,c as E,o as b,d as t,b as i,a,e as n,w as r}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             *//* empty css                                                                           */const R=JSON.parse('{"title":"Next.js 深度解析:从架构理念到工程实践","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","frontmatter":{"date":"2026-03-13T21:30:35.000Z","title":"Next.js 深度解析:从架构理念到工程实践","tldr":"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","tags":["Next.js","React","SSR","前端架构"],"categories":["全栈","前端工程"],"permalink":"/fullstack/next-deep-dive"},"headers":[],"relativePath":"fullstack/next-deep-dive.md","filePath":"01.全栈/40.前端工程/05.Next.js.md"}'),u={name:"fullstack/next-deep-dive.md"},f=Object.assign(u,{setup(y){const h={label:"Server Components",description:"默认在服务端运行,无需额外声明",points:["数据获取:直连数据库,靠近数据源","敏感操作:密钥、Token 永不暴露到浏览器","减少客户端 JS:组件代码不发送到浏览器"]},d={label:"Client Components",description:'文件顶部加 "use client" 声明',points:["交互事件:onClick、onChange、onSubmit 等","React Hooks:useState、useEffect、useContext 等","浏览器 API:window、localStorage、geolocation","仅客户端库:图表(ECharts)、动画(Framer Motion)、地图 SDK"]};return(m,s)=>{const k=p("MermaidChart"),o=p("ClientOnly");return b(),E("div",null,[s[3]||(s[3]=t("",15)),i(e,{variant:"summary",points:["Next.js 将关键架构决策内化为框架约定:路由、渲染、数据获取、bundle 拆分的答案已写进框架","Server First:默认在服务端运行,只在必要时才向客户端发送 JavaScript","混合渲染:不同页面、甚至同一页面的不同区域可各自选择渲染策略","内置优化组件(Image / Link / Script / Font)在框架层解决性能问题,开发者无需手写优化代码"]}),s[4]||(s[4]=a("h2",{id:"_2-server-first-next-js-的架构内核",tabindex:"-1"},[n("2. Server First:Next.js 的架构内核 "),a("a",{class:"header-anchor",href:"#_2-server-first-next-js-的架构内核","aria-label":"Permalink to “2. Server First:Next.js 的架构内核”"},"​")],-1)),s[5]||(s[5]=a("p",null,"Next.js 的核心能力可以归纳为五个维度,它们层层递进,覆盖了从「页面如何渲染」到「项目如何组织」的完整链路:",-1)),i(o,null,{default:r(()=>[i(k,{code:"graph%20LR%0A%20%20%20%20A%5B%3Cb%3E%E5%BC%80%E5%8F%91%E4%BD%93%E9%AA%8C%3C%2Fb%3E%3Cbr%2F%3E%E9%9B%B6%E9%85%8D%E7%BD%AE%20%2F%20HMR%5D%20--%3E%20B%5B%3Cb%3E%E8%B7%AF%E7%94%B1%E7%B3%BB%E7%BB%9F%3C%2Fb%3E%3Cbr%2F%3EApp%20Router%5D%0A%20%20%20%20B%20--%3E%20C%5B%3Cb%3E%E6%B8%B2%E6%9F%93%E7%AD%96%E7%95%A5%3C%2Fb%3E%3Cbr%2F%3ESSR%20%2F%20SSG%20%2F%20ISR%5D%0A%20%20%20%20C%20--%3E%20D%5B%3Cb%3E%E7%BB%84%E4%BB%B6%E6%A8%A1%E5%9E%8B%3C%2Fb%3E%3Cbr%2F%3ERSC%20%2B%20Client%5D%0A%20%20%20%20D%20--%3E%20E%5B%3Cb%3E%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%3C%2Fb%3E%3Cbr%2F%3EImage%20%2F%20Link%20%2F%20Streaming%5D%0A",showToolbar:"1"})]),_:1}),s[6]||(s[6]=a("p",null,"理解 Next.js 的关键在于把握一个根本性的心智模型转变:",-1)),i(l,{title:"组件运行环境的范式反转",left:{label:"传统 React",description:"所有组件默认在浏览器中运行",points:["服务端渲染只是辅助手段","CSR 是默认行为","SPA 范式:JS 驱动一切"]},right:{label:"Next.js App Router",description:"所有组件默认在服务端运行",points:["客户端组件需主动声明","Server First 架构","Server Components 是默认"]}}),s[7]||(s[7]=t("",11)),i(l,{title:"Server Components vs Client Components 分工边界",left:h,right:d}),s[8]||(s[8]=a("h2",{id:"_3-混合渲染-四种策略-各取所需-灵活混用",tabindex:"-1"},[n("3. 混合渲染:四种策略,各取所需,灵活混用 "),a("a",{class:"header-anchor",href:"#_3-混合渲染-四种策略-各取所需-灵活混用","aria-label":"Permalink to “3. 混合渲染:四种策略,各取所需,灵活混用”"},"​")],-1)),a("p",null,[s[1]||(s[1]=n("Next.js 的「灵魂」在于:",-1)),i(c,{bold:""},{default:r(()=>[...s[0]||(s[0]=[n("不同页面、甚至同一页面的不同区域,可以各自选择不同的渲染策略——不必因为某个页面需要 SSR,就把整个项目拖回传统服务端渲染模式",-1)])]),_:1}),s[2]||(s[2]=n("。",-1))]),s[9]||(s[9]=t("",37)),i(g,{steps:[{title:"用户发起请求",content:"浏览器向 Next.js 服务器请求页面。"},{title:"服务端快速响应页面外壳",content:"服务器开始渲染页面。当遇到  边界时,它不会等待内部的异步数据(如数据库查询),而是立即将 Suspense 外部的静态 HTML 结构连同内部的 fallback HTML 一并发送给浏览器。用户在极短时间内(TTFB 极低)就能看到导航栏、侧边栏和骨架屏。"},{title:"服务端后台获取数据",content:"与此同时,服务器在后台继续执行被 Suspense 包裹的异步组件代码(如查询数据库)。"},{title:"流式注入(Streaming)",content:"当数据查询完成、真实 HTML 渲染好后,Next.js 保持 HTTP 连接不断开,将这部分 HTML 及少量用于替换 DOM 的 JS 以数据流(Chunks)的形式推送给浏览器。"},{title:"客户端无缝替换",content:"浏览器收到数据流后,React 会平滑地将骨架屏替换为真实内容,无需整页刷新。"}]}),s[10]||(s[10]=t("",28)),i(e,{variant:"conclusion",points:["Server First 是 Next.js 的核心哲学——默认在服务端运行,按需声明客户端组件","混合渲染让你在不同页面甚至不同区域灵活选择 SSR / SSG / ISR / CSR","Suspense 不只是加载 UI,它是 Streaming 的边界标记——快部分先到,慢部分后补","PPR 解决交付时机,Cache 解决计算成本——两者协同才能达到极致性能","常见性能优化(图片、链接预取、脚本加载、字体)已被封装为框架内置组件"]}),s[11]||(s[11]=a("div",{class:"tip custom-block github-alert"},[a("p",{class:"custom-block-title"},"延伸阅读"),a("p",null,[n("本文提到的代码示例,可在 next-demo 项目查看:"),a("a",{href:"https://github.com/full-stack-workspace/full-stack-exploration/tree/main/packages/next-demo",target:"_blank",rel:"noreferrer"},"next-demo"),n("。")]),a("p",null,[n("运行方式: "),a("code",null,"cd packages/next-demo && npm run dev")])],-1))])}}});export{R as __pageData,f as default};
+import{H as c}from"./chunks/HighLightText.DNC3BKyb.js";import{K as e}from"./chunks/KeyTakeaway.Cr-Br5gs.js";/* empty css                                                                          */import{S as g}from"./chunks/StepGuide.Cdy7FBTp.js";import{C as l}from"./chunks/ConceptPair.CDPz5jW2.js";import{r as p,c as E,o as b,d as t,b as i,a,e as n,w as r}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             *//* empty css                                                                           */const R=JSON.parse('{"title":"Next.js 深度解析:从架构理念到工程实践","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","frontmatter":{"date":"2026-03-13T21:30:35.000Z","title":"Next.js 深度解析:从架构理念到工程实践","tldr":"以 Server First 为核心,深度解析 Next.js 混合渲染、RSC 组件模型、Streaming 及 PPR 缓存协同机制。","description":"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。","tags":["Next.js","React","SSR","前端架构"],"categories":["全栈","前端工程"],"permalink":"/fullstack/next-deep-dive"},"headers":[],"relativePath":"fullstack/next-deep-dive.md","filePath":"01.全栈/40.前端工程/05.Next.js.md"}'),u={name:"fullstack/next-deep-dive.md"},f=Object.assign(u,{setup(y){const h={label:"Server Components",description:"默认在服务端运行,无需额外声明",points:["数据获取:直连数据库,靠近数据源","敏感操作:密钥、Token 永不暴露到浏览器","减少客户端 JS:组件代码不发送到浏览器"]},d={label:"Client Components",description:'文件顶部加 "use client" 声明',points:["交互事件:onClick、onChange、onSubmit 等","React Hooks:useState、useEffect、useContext 等","浏览器 API:window、localStorage、geolocation","仅客户端库:图表(ECharts)、动画(Framer Motion)、地图 SDK"]};return(m,s)=>{const k=p("MermaidChart"),o=p("ClientOnly");return b(),E("div",null,[s[3]||(s[3]=t("",15)),i(e,{variant:"summary",points:["Next.js 将关键架构决策内化为框架约定:路由、渲染、数据获取、bundle 拆分的答案已写进框架","Server First:默认在服务端运行,只在必要时才向客户端发送 JavaScript","混合渲染:不同页面、甚至同一页面的不同区域可各自选择渲染策略","内置优化组件(Image / Link / Script / Font)在框架层解决性能问题,开发者无需手写优化代码"]}),s[4]||(s[4]=a("h2",{id:"_2-server-first-next-js-的架构内核",tabindex:"-1"},[n("2. Server First:Next.js 的架构内核 "),a("a",{class:"header-anchor",href:"#_2-server-first-next-js-的架构内核","aria-label":"Permalink to “2. Server First:Next.js 的架构内核”"},"​")],-1)),s[5]||(s[5]=a("p",null,"Next.js 的核心能力可以归纳为五个维度,它们层层递进,覆盖了从「页面如何渲染」到「项目如何组织」的完整链路:",-1)),i(o,null,{default:r(()=>[i(k,{code:"graph%20LR%0A%20%20%20%20A%5B%3Cb%3E%E5%BC%80%E5%8F%91%E4%BD%93%E9%AA%8C%3C%2Fb%3E%3Cbr%2F%3E%E9%9B%B6%E9%85%8D%E7%BD%AE%20%2F%20HMR%5D%20--%3E%20B%5B%3Cb%3E%E8%B7%AF%E7%94%B1%E7%B3%BB%E7%BB%9F%3C%2Fb%3E%3Cbr%2F%3EApp%20Router%5D%0A%20%20%20%20B%20--%3E%20C%5B%3Cb%3E%E6%B8%B2%E6%9F%93%E7%AD%96%E7%95%A5%3C%2Fb%3E%3Cbr%2F%3ESSR%20%2F%20SSG%20%2F%20ISR%5D%0A%20%20%20%20C%20--%3E%20D%5B%3Cb%3E%E7%BB%84%E4%BB%B6%E6%A8%A1%E5%9E%8B%3C%2Fb%3E%3Cbr%2F%3ERSC%20%2B%20Client%5D%0A%20%20%20%20D%20--%3E%20E%5B%3Cb%3E%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%3C%2Fb%3E%3Cbr%2F%3EImage%20%2F%20Link%20%2F%20Streaming%5D%0A",showToolbar:"1"})]),_:1}),s[6]||(s[6]=a("p",null,"理解 Next.js 的关键在于把握一个根本性的心智模型转变:",-1)),i(l,{title:"组件运行环境的范式反转",left:{label:"传统 React",description:"所有组件默认在浏览器中运行",points:["服务端渲染只是辅助手段","CSR 是默认行为","SPA 范式:JS 驱动一切"]},right:{label:"Next.js App Router",description:"所有组件默认在服务端运行",points:["客户端组件需主动声明","Server First 架构","Server Components 是默认"]}}),s[7]||(s[7]=t("",11)),i(l,{title:"Server Components vs Client Components 分工边界",left:h,right:d}),s[8]||(s[8]=a("h2",{id:"_3-混合渲染-四种策略-各取所需-灵活混用",tabindex:"-1"},[n("3. 混合渲染:四种策略,各取所需,灵活混用 "),a("a",{class:"header-anchor",href:"#_3-混合渲染-四种策略-各取所需-灵活混用","aria-label":"Permalink to “3. 混合渲染:四种策略,各取所需,灵活混用”"},"​")],-1)),a("p",null,[s[1]||(s[1]=n("Next.js 的「灵魂」在于:",-1)),i(c,{bold:""},{default:r(()=>[...s[0]||(s[0]=[n("不同页面、甚至同一页面的不同区域,可以各自选择不同的渲染策略——不必因为某个页面需要 SSR,就把整个项目拖回传统服务端渲染模式",-1)])]),_:1}),s[2]||(s[2]=n("。",-1))]),s[9]||(s[9]=t("",37)),i(g,{steps:[{title:"用户发起请求",content:"浏览器向 Next.js 服务器请求页面。"},{title:"服务端快速响应页面外壳",content:"服务器开始渲染页面。当遇到  边界时,它不会等待内部的异步数据(如数据库查询),而是立即将 Suspense 外部的静态 HTML 结构连同内部的 fallback HTML 一并发送给浏览器。用户在极短时间内(TTFB 极低)就能看到导航栏、侧边栏和骨架屏。"},{title:"服务端后台获取数据",content:"与此同时,服务器在后台继续执行被 Suspense 包裹的异步组件代码(如查询数据库)。"},{title:"流式注入(Streaming)",content:"当数据查询完成、真实 HTML 渲染好后,Next.js 保持 HTTP 连接不断开,将这部分 HTML 及少量用于替换 DOM 的 JS 以数据流(Chunks)的形式推送给浏览器。"},{title:"客户端无缝替换",content:"浏览器收到数据流后,React 会平滑地将骨架屏替换为真实内容,无需整页刷新。"}]}),s[10]||(s[10]=t("",28)),i(e,{variant:"conclusion",points:["Server First 是 Next.js 的核心哲学——默认在服务端运行,按需声明客户端组件","混合渲染让你在不同页面甚至不同区域灵活选择 SSR / SSG / ISR / CSR","Suspense 不只是加载 UI,它是 Streaming 的边界标记——快部分先到,慢部分后补","PPR 解决交付时机,Cache 解决计算成本——两者协同才能达到极致性能","常见性能优化(图片、链接预取、脚本加载、字体)已被封装为框架内置组件"]}),s[11]||(s[11]=a("div",{class:"tip custom-block github-alert"},[a("p",{class:"custom-block-title"},"延伸阅读"),a("p",null,[n("本文提到的代码示例,可在 next-demo 项目查看:"),a("a",{href:"https://github.com/full-stack-workspace/full-stack-exploration/tree/main/packages/next-demo",target:"_blank",rel:"noreferrer"},"next-demo"),n("。")]),a("p",null,[n("运行方式: "),a("code",null,"cd packages/next-demo && npm run dev")])],-1))])}}});export{R as __pageData,f as default};
diff --git a/assets/fullstack_nodejs-module-programming-summary.md.D0U-fUQ0.js b/assets/fullstack_nodejs-module-programming-summary.md.ChyZglwn.js
similarity index 99%
rename from assets/fullstack_nodejs-module-programming-summary.md.D0U-fUQ0.js
rename to assets/fullstack_nodejs-module-programming-summary.md.ChyZglwn.js
index 1cd2ff1..080ddab 100644
--- a/assets/fullstack_nodejs-module-programming-summary.md.D0U-fUQ0.js
+++ b/assets/fullstack_nodejs-module-programming-summary.md.ChyZglwn.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as e,d as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"Node.js 模块化编程梳理与总结","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","frontmatter":{"date":"2024-05-17T23:33:09.000Z","title":"Node.js 模块化编程梳理与总结","tldr":"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","permalink":"/fullstack/nodejs-module-programming-summary","abstract":"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。","tags":["concept","node.js","commonjs","esm","monorepo","layered-architecture"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/nodejs-module-programming-summary.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md"}'),l={name:"fullstack/nodejs-module-programming-summary.md"};function p(t,s,r,o,h,k){return e(),a("div",null,[...s[0]||(s[0]=[n(`

Node.js 模块化编程梳理与总结

如果说浏览器端的模块化是为了"按需加载",那么 Node.js 的模块化则是为了"代码组织"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。

在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。

1. CommonJS 与 ES Modules 双模共存

在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。

共存策略:

  1. 后缀决定论.mjs 始终被视为 ESM,.cjs 始终被视为 CJS。
  2. 包定义导向:在 package.json 中设置 "type": "module",则目录下所有 .js 均视为 ESM,反之默认为 CJS。
  3. 互操作性(Interop)
    • ESM 引用 CJS:直接 import 即可,Node 会将 module.exports 包装为默认导出。
    • CJS 引用 ESM:由于 ESM 是异步加载的,CJS 无法使用 require,必须使用 动态 import:const module = await import('./es-module.mjs')

代码示例

javascript
// package.json
+import{_ as i,c as a,o as e,d as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"Node.js 模块化编程梳理与总结","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","frontmatter":{"date":"2024-05-17T23:33:09.000Z","title":"Node.js 模块化编程梳理与总结","tldr":"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","permalink":"/fullstack/nodejs-module-programming-summary","abstract":"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。","tags":["concept","node.js","commonjs","esm","monorepo","layered-architecture"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/nodejs-module-programming-summary.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md"}'),l={name:"fullstack/nodejs-module-programming-summary.md"};function p(t,s,r,o,h,k){return e(),a("div",null,[...s[0]||(s[0]=[n(`

Node.js 模块化编程梳理与总结

如果说浏览器端的模块化是为了"按需加载",那么 Node.js 的模块化则是为了"代码组织"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。

在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。

1. CommonJS 与 ES Modules 双模共存

在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。

共存策略:

  1. 后缀决定论.mjs 始终被视为 ESM,.cjs 始终被视为 CJS。
  2. 包定义导向:在 package.json 中设置 "type": "module",则目录下所有 .js 均视为 ESM,反之默认为 CJS。
  3. 互操作性(Interop)
    • ESM 引用 CJS:直接 import 即可,Node 会将 module.exports 包装为默认导出。
    • CJS 引用 ESM:由于 ESM 是异步加载的,CJS 无法使用 require,必须使用 动态 import:const module = await import('./es-module.mjs')

代码示例

javascript
// package.json
 {
   "type": "module"
 }
diff --git a/assets/fullstack_nodejs-module-programming-summary.md.D0U-fUQ0.lean.js b/assets/fullstack_nodejs-module-programming-summary.md.ChyZglwn.lean.js
similarity index 97%
rename from assets/fullstack_nodejs-module-programming-summary.md.D0U-fUQ0.lean.js
rename to assets/fullstack_nodejs-module-programming-summary.md.ChyZglwn.lean.js
index 1e94ea5..fe4d44c 100644
--- a/assets/fullstack_nodejs-module-programming-summary.md.D0U-fUQ0.lean.js
+++ b/assets/fullstack_nodejs-module-programming-summary.md.ChyZglwn.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as e,d as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"Node.js 模块化编程梳理与总结","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","frontmatter":{"date":"2024-05-17T23:33:09.000Z","title":"Node.js 模块化编程梳理与总结","tldr":"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","permalink":"/fullstack/nodejs-module-programming-summary","abstract":"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。","tags":["concept","node.js","commonjs","esm","monorepo","layered-architecture"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/nodejs-module-programming-summary.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md"}'),l={name:"fullstack/nodejs-module-programming-summary.md"};function p(t,s,r,o,h,k){return e(),a("div",null,[...s[0]||(s[0]=[n("",30)])])}const g=i(l,[["render",p]]);export{c as __pageData,g as default};
+import{_ as i,c as a,o as e,d as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"Node.js 模块化编程梳理与总结","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","frontmatter":{"date":"2024-05-17T23:33:09.000Z","title":"Node.js 模块化编程梳理与总结","tldr":"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。","description":"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。","permalink":"/fullstack/nodejs-module-programming-summary","abstract":"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。","tags":["concept","node.js","commonjs","esm","monorepo","layered-architecture"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/nodejs-module-programming-summary.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md"}'),l={name:"fullstack/nodejs-module-programming-summary.md"};function p(t,s,r,o,h,k){return e(),a("div",null,[...s[0]||(s[0]=[n("",30)])])}const g=i(l,[["render",p]]);export{c as __pageData,g as default};
diff --git a/assets/fullstack_occams-razor-software-design.md.Dsd2tAmK.js b/assets/fullstack_occams-razor-software-design.md.BxaCCGSA.js
similarity index 99%
rename from assets/fullstack_occams-razor-software-design.md.Dsd2tAmK.js
rename to assets/fullstack_occams-razor-software-design.md.BxaCCGSA.js
index 0e0569e..7deb54d 100644
--- a/assets/fullstack_occams-razor-software-design.md.Dsd2tAmK.js
+++ b/assets/fullstack_occams-razor-software-design.md.BxaCCGSA.js
@@ -1,4 +1,4 @@
-import{H as n}from"./chunks/HighLightText.pXHFEzDb.js";import{c as t,o as l,d as a,a as s,b as e,w as h,e as p}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const k={tabindex:"0"},c=JSON.parse('{"title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","frontmatter":{"date":"2024-03-20T22:41:41.000Z","title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","tldr":"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","permalink":"/fullstack/occams-razor-software-design","tags":["concept","engineering-fundamentals","code-design","software-engineering"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/occams-razor-software-design.md","filePath":"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md"}'),r={name:"fullstack/occams-razor-software-design.md"},b=Object.assign(r,{setup(d){return(o,i)=>(l(),t("div",null,[i[5]||(i[5]=a('

奥卡姆剃刀原则:从理论到编程设计的实践指南

摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为"如无必要,勿增实体"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。

1. 奥卡姆剃刀原则的核心内涵

"奥卡姆剃刀" 是哲学与科学研究中经典的思维工具,其核心思想可概括为"如无必要,勿增实体"。这一原则由 14 世纪逻辑学家、圣方济各会修士威廉·奥卡姆(William of Ockham)提出,本质是在多个能同等解释现象的理论中,选择假设最少、最简洁的那个——并非否定复杂的可能性,而是优先用简单方案解决问题,避免无意义的"过度设计"。

要正确应用奥卡姆剃刀,需先理解其三个关键前提:

',5)),s("table",k,[i[4]||(i[4]=s("thead",null,[s("tr",null,[s("th",null,"关键前提"),s("th",null,"说明")])],-1)),s("tbody",null,[i[2]||(i[2]=s("tr",null,[s("td",null,[s("strong",null,'"同等有效"是前提')]),s("td",null,'仅当多个方案能实现相同的功能、满足相同的需求时,才用"简洁性"作为筛选标准;若简单方案无法覆盖需求(如安全性、可扩展性),则必须引入复杂设计,不可为了"简"而"简"。')],-1)),i[3]||(i[3]=s("tr",null,[s("td",null,[s("strong",null,'"实体"指"不必要的假设/组件"')]),s("td",null,'例如解释"手机没电","电池耗尽"比"电池故障+系统休眠+充电器接触不良"更简洁,后者多了两个无证据的"实体",应优先排除。')],-1)),s("tr",null,[s("td",null,[e(n,{type:"note",bold:""},{default:h(()=>[...i[0]||(i[0]=[p('"简洁"≠"简陋"',-1)])]),_:1})]),i[1]||(i[1]=s("td",null,'简洁是"去除冗余",而非"省略必要环节"。比如设计登录功能,"账号+密码"是简洁,"仅靠手机号(无验证)"是简陋,后者牺牲了安全性,不符合原则。',-1))])])]),i[6]||(i[6]=a(`

2. 编程与设计中应用奥卡姆剃刀的核心场景

在编程(代码实现)和设计(架构、接口、模块)中,"奥卡姆剃刀"的本质是减少"无价值的复杂性"——包括冗余代码、过度抽象、多余依赖、未使用的功能等。以下从六个核心场景展开,结合"反例"与"正例"说明实践方法:

2.1 场景1:需求实现,拒绝"提前设计未来功能"

开发中最常见的误区是"过度预判需求":为了"可能用得上"的功能,提前加入复杂逻辑,导致代码臃肿、维护成本升高。奥卡姆剃刀的要求是:只实现"当前明确需要"的功能,未来需求留待未来迭代

反例(过度设计)

开发一个"用户个人资料页"时,需求仅要求"展示姓名、手机号、邮箱",但开发者预判"未来可能要加地址、生日、社交账号",于是:

java
// 提前定义了大量未使用的字段和方法
+import{H as n}from"./chunks/HighLightText.DNC3BKyb.js";import{c as t,o as l,d as a,a as s,b as e,w as h,e as p}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             */const k={tabindex:"0"},c=JSON.parse('{"title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","frontmatter":{"date":"2024-03-20T22:41:41.000Z","title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","tldr":"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","permalink":"/fullstack/occams-razor-software-design","tags":["concept","engineering-fundamentals","code-design","software-engineering"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/occams-razor-software-design.md","filePath":"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md"}'),r={name:"fullstack/occams-razor-software-design.md"},b=Object.assign(r,{setup(d){return(o,i)=>(l(),t("div",null,[i[5]||(i[5]=a('

奥卡姆剃刀原则:从理论到编程设计的实践指南

摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为"如无必要,勿增实体"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。

1. 奥卡姆剃刀原则的核心内涵

"奥卡姆剃刀" 是哲学与科学研究中经典的思维工具,其核心思想可概括为"如无必要,勿增实体"。这一原则由 14 世纪逻辑学家、圣方济各会修士威廉·奥卡姆(William of Ockham)提出,本质是在多个能同等解释现象的理论中,选择假设最少、最简洁的那个——并非否定复杂的可能性,而是优先用简单方案解决问题,避免无意义的"过度设计"。

要正确应用奥卡姆剃刀,需先理解其三个关键前提:

',5)),s("table",k,[i[4]||(i[4]=s("thead",null,[s("tr",null,[s("th",null,"关键前提"),s("th",null,"说明")])],-1)),s("tbody",null,[i[2]||(i[2]=s("tr",null,[s("td",null,[s("strong",null,'"同等有效"是前提')]),s("td",null,'仅当多个方案能实现相同的功能、满足相同的需求时,才用"简洁性"作为筛选标准;若简单方案无法覆盖需求(如安全性、可扩展性),则必须引入复杂设计,不可为了"简"而"简"。')],-1)),i[3]||(i[3]=s("tr",null,[s("td",null,[s("strong",null,'"实体"指"不必要的假设/组件"')]),s("td",null,'例如解释"手机没电","电池耗尽"比"电池故障+系统休眠+充电器接触不良"更简洁,后者多了两个无证据的"实体",应优先排除。')],-1)),s("tr",null,[s("td",null,[e(n,{type:"note",bold:""},{default:h(()=>[...i[0]||(i[0]=[p('"简洁"≠"简陋"',-1)])]),_:1})]),i[1]||(i[1]=s("td",null,'简洁是"去除冗余",而非"省略必要环节"。比如设计登录功能,"账号+密码"是简洁,"仅靠手机号(无验证)"是简陋,后者牺牲了安全性,不符合原则。',-1))])])]),i[6]||(i[6]=a(`

2. 编程与设计中应用奥卡姆剃刀的核心场景

在编程(代码实现)和设计(架构、接口、模块)中,"奥卡姆剃刀"的本质是减少"无价值的复杂性"——包括冗余代码、过度抽象、多余依赖、未使用的功能等。以下从六个核心场景展开,结合"反例"与"正例"说明实践方法:

2.1 场景1:需求实现,拒绝"提前设计未来功能"

开发中最常见的误区是"过度预判需求":为了"可能用得上"的功能,提前加入复杂逻辑,导致代码臃肿、维护成本升高。奥卡姆剃刀的要求是:只实现"当前明确需要"的功能,未来需求留待未来迭代

反例(过度设计)

开发一个"用户个人资料页"时,需求仅要求"展示姓名、手机号、邮箱",但开发者预判"未来可能要加地址、生日、社交账号",于是:

java
// 提前定义了大量未使用的字段和方法
 public class UserProfile {
     private String name;       // 必用
     private String phone;      // 必用
diff --git a/assets/fullstack_occams-razor-software-design.md.Dsd2tAmK.lean.js b/assets/fullstack_occams-razor-software-design.md.BxaCCGSA.lean.js
similarity index 95%
rename from assets/fullstack_occams-razor-software-design.md.Dsd2tAmK.lean.js
rename to assets/fullstack_occams-razor-software-design.md.BxaCCGSA.lean.js
index aa1743f..647646d 100644
--- a/assets/fullstack_occams-razor-software-design.md.Dsd2tAmK.lean.js
+++ b/assets/fullstack_occams-razor-software-design.md.BxaCCGSA.lean.js
@@ -1 +1 @@
-import{H as n}from"./chunks/HighLightText.pXHFEzDb.js";import{c as t,o as l,d as a,a as s,b as e,w as h,e as p}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const k={tabindex:"0"},c=JSON.parse('{"title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","frontmatter":{"date":"2024-03-20T22:41:41.000Z","title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","tldr":"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","permalink":"/fullstack/occams-razor-software-design","tags":["concept","engineering-fundamentals","code-design","software-engineering"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/occams-razor-software-design.md","filePath":"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md"}'),r={name:"fullstack/occams-razor-software-design.md"},b=Object.assign(r,{setup(d){return(o,i)=>(l(),t("div",null,[i[5]||(i[5]=a("",5)),s("table",k,[i[4]||(i[4]=s("thead",null,[s("tr",null,[s("th",null,"关键前提"),s("th",null,"说明")])],-1)),s("tbody",null,[i[2]||(i[2]=s("tr",null,[s("td",null,[s("strong",null,'"同等有效"是前提')]),s("td",null,'仅当多个方案能实现相同的功能、满足相同的需求时,才用"简洁性"作为筛选标准;若简单方案无法覆盖需求(如安全性、可扩展性),则必须引入复杂设计,不可为了"简"而"简"。')],-1)),i[3]||(i[3]=s("tr",null,[s("td",null,[s("strong",null,'"实体"指"不必要的假设/组件"')]),s("td",null,'例如解释"手机没电","电池耗尽"比"电池故障+系统休眠+充电器接触不良"更简洁,后者多了两个无证据的"实体",应优先排除。')],-1)),s("tr",null,[s("td",null,[e(n,{type:"note",bold:""},{default:h(()=>[...i[0]||(i[0]=[p('"简洁"≠"简陋"',-1)])]),_:1})]),i[1]||(i[1]=s("td",null,'简洁是"去除冗余",而非"省略必要环节"。比如设计登录功能,"账号+密码"是简洁,"仅靠手机号(无验证)"是简陋,后者牺牲了安全性,不符合原则。',-1))])])]),i[6]||(i[6]=a("",60))]))}});export{c as __pageData,b as default};
+import{H as n}from"./chunks/HighLightText.DNC3BKyb.js";import{c as t,o as l,d as a,a as s,b as e,w as h,e as p}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             */const k={tabindex:"0"},c=JSON.parse('{"title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","frontmatter":{"date":"2024-03-20T22:41:41.000Z","title":"奥卡姆剃刀原则:从理论到编程设计的实践指南","tldr":"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。","description":"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。","permalink":"/fullstack/occams-razor-software-design","tags":["concept","engineering-fundamentals","code-design","software-engineering"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/occams-razor-software-design.md","filePath":"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md"}'),r={name:"fullstack/occams-razor-software-design.md"},b=Object.assign(r,{setup(d){return(o,i)=>(l(),t("div",null,[i[5]||(i[5]=a("",5)),s("table",k,[i[4]||(i[4]=s("thead",null,[s("tr",null,[s("th",null,"关键前提"),s("th",null,"说明")])],-1)),s("tbody",null,[i[2]||(i[2]=s("tr",null,[s("td",null,[s("strong",null,'"同等有效"是前提')]),s("td",null,'仅当多个方案能实现相同的功能、满足相同的需求时,才用"简洁性"作为筛选标准;若简单方案无法覆盖需求(如安全性、可扩展性),则必须引入复杂设计,不可为了"简"而"简"。')],-1)),i[3]||(i[3]=s("tr",null,[s("td",null,[s("strong",null,'"实体"指"不必要的假设/组件"')]),s("td",null,'例如解释"手机没电","电池耗尽"比"电池故障+系统休眠+充电器接触不良"更简洁,后者多了两个无证据的"实体",应优先排除。')],-1)),s("tr",null,[s("td",null,[e(n,{type:"note",bold:""},{default:h(()=>[...i[0]||(i[0]=[p('"简洁"≠"简陋"',-1)])]),_:1})]),i[1]||(i[1]=s("td",null,'简洁是"去除冗余",而非"省略必要环节"。比如设计登录功能,"账号+密码"是简洁,"仅靠手机号(无验证)"是简陋,后者牺牲了安全性,不符合原则。',-1))])])]),i[6]||(i[6]=a("",60))]))}});export{c as __pageData,b as default};
diff --git a/assets/fullstack_overview.md.D2Ez6OwG.js b/assets/fullstack_overview.md.D8h6Ek2v.js
similarity index 97%
rename from assets/fullstack_overview.md.D2Ez6OwG.js
rename to assets/fullstack_overview.md.D8h6Ek2v.js
index b836add..b4b1d47 100644
--- a/assets/fullstack_overview.md.D2Ez6OwG.js
+++ b/assets/fullstack_overview.md.D8h6Ek2v.js
@@ -1 +1 @@
-import{K as a,A as c}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as o}from"./chunks/Blockquote.acMDZFAD.js";import{F as n,C as p}from"./chunks/Callout.B-9wy57V.js";import{c as u,o as S,a as t,b as i,e as r,u as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                                          */const s=[{id:"frontend-engineering",title:"前端工程",icon:"🎨",color:"#f59e0b",articles:[{title:"React 设计哲学:AI 协作时代的组件化开发实践指南",url:"/fullstack/react-design-philosophy-ai-augmented",description:"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。"},{title:"前端渲染方案选型指南:从 CSR 到 PPR",url:"/fullstack/frontend-rendering-scheme",description:"针对前端渲染方案选型难题,系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。"},{title:"Next.js 深度解析:从架构理念到工程实践",url:"/fullstack/next-deep-dive",description:"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。"},{title:"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈",url:"/fullstack/server-state-management",description:"本文深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。"},{title:"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南",url:"/fullstack/css-engineering",description:"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。"},{title:"JAMStack 梳理与实践指南",url:"/fullstack/jamstack",description:"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式。 从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。"}]},{id:"fullstack-networking",title:"网络与通信",icon:"🌐",color:"#0ea5e9",articles:[{title:"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南",url:"/fullstack/networking-protocol-selection-guide",description:"文本深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵"},{title:"流式 HTTP 与 SSE 协议:从概念辨析到生产实践",url:"/fullstack/networking-sse-practice",description:"本文辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。"},{title:"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策",url:"/fullstack/networking-polling-optimization",description:"针对传统固定频率轮询的服务器资源浪费问题,系统分析退避轮询与长轮询两种优化策略的核心原理与运行机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。"}]},{id:"fullstack-basic",title:"全栈基础素养",icon:"📚",color:"#64748b",articles:[{title:"奥卡姆剃刀原则:从理论到编程设计的实践指南",url:"/fullstack/occams-razor-software-design",description:"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。本文深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。"},{title:"模块化编程实践指南",url:"/fullstack/module-programming-practice-guide",description:"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。"},{title:"TypeScript 编译与调试完全指南",url:"/fullstack/typescript-compilation-debugging-guide",description:"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。本文深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。"},{title:"聊一聊 TypeScript 中的泛型",url:"/fullstack/typescript-generic-types",description:"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。"},{title:"深入理解 TypeScript 联合类型与交叉类型",url:"/fullstack/union-types-vs-intersection-types",description:"本文以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。"}]},{id:"fullstack-resources",title:"工具与资源推荐",icon:"🔧",color:"#0ea5e9",articles:[{title:"全栈技术资源推荐",url:"/fullstack/full-stack-resources",description:"本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。"}]}],v=JSON.parse('{"title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","categories":["全栈"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/fullstack/overview","articleShare":false},"headers":[],"relativePath":"fullstack/overview.md","filePath":"01.全栈/00.overview.md"}'),d={name:"fullstack/overview.md"},C=Object.assign(d,{setup(g){return(f,e)=>(S(),u("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[r("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(o,{variant:"insight",quote:"全栈工程不是技术的广度竞赛,而是深度的贯通——从前端表达到后端架构,从数据设计到网络协议,在技术的全链路中建立系统性思维。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"纵深贯通"),r("——从前端表达到后端架构,从数据设计到网络协议,打破领域壁垒,在技术的全链路中建立系统性思维;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"根基扎实"),r("——TypeScript、浏览器原理、模块化设计,全栈的广度离不开每一个领域的深度积累;")],-1)),e[3]||(e[3]=t("p",null,[t("strong",null,"工程闭环"),r("——不仅会写代码,更懂架构决策、质量保障、安全防护与持续交付,确保每个环节都可推向生产。")],-1)),i(n,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png",caption:"全栈工程认知体系:认知层 → 技术领域层 → 工程能力层 → 基础设施层"}),i(p,{type:"info",title:"从技术广度到工程深度",content:"本系列聚焦全栈技术的核心领域:前端工程、网络协议、TypeScript 基础素养、工具与资源推荐。从 React 设计哲学到 SSE 协议实践,从类型系统到模块化架构,每一篇文章都力求在广度与深度之间找到平衡——不是泛泛了解每一个技术名词,而是在关键领域建立可迁移的系统性认知。"}),e[4]||(e[4]=t("h2",{id:"精选专题",tabindex:"-1"},[r("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(a,{categories:l(s),"root-label":"全栈工程","show-articles":!1},null,8,["categories"]),i(c,{categories:l(s)},null,8,["categories"])]))}});export{v as __pageData,C as default};
+import{K as a,A as c}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as o}from"./chunks/Blockquote.B7nHhHWl.js";import{F as n,C as p}from"./chunks/Callout.Bss1uX1v.js";import{c as u,o as S,a as t,b as i,e as r,u as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                                          */const s=[{id:"frontend-engineering",title:"前端工程",icon:"🎨",color:"#f59e0b",articles:[{title:"React 设计哲学:AI 协作时代的组件化开发实践指南",url:"/fullstack/react-design-philosophy-ai-augmented",description:"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。"},{title:"前端渲染方案选型指南:从 CSR 到 PPR",url:"/fullstack/frontend-rendering-scheme",description:"针对前端渲染方案选型难题,系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。"},{title:"Next.js 深度解析:从架构理念到工程实践",url:"/fullstack/next-deep-dive",description:"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。"},{title:"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈",url:"/fullstack/server-state-management",description:"本文深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。"},{title:"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南",url:"/fullstack/css-engineering",description:"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。"},{title:"JAMStack 梳理与实践指南",url:"/fullstack/jamstack",description:"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式。 从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。"}]},{id:"fullstack-networking",title:"网络与通信",icon:"🌐",color:"#0ea5e9",articles:[{title:"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南",url:"/fullstack/networking-protocol-selection-guide",description:"文本深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵"},{title:"流式 HTTP 与 SSE 协议:从概念辨析到生产实践",url:"/fullstack/networking-sse-practice",description:"本文辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。"},{title:"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策",url:"/fullstack/networking-polling-optimization",description:"针对传统固定频率轮询的服务器资源浪费问题,系统分析退避轮询与长轮询两种优化策略的核心原理与运行机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。"}]},{id:"fullstack-basic",title:"全栈基础素养",icon:"📚",color:"#64748b",articles:[{title:"奥卡姆剃刀原则:从理论到编程设计的实践指南",url:"/fullstack/occams-razor-software-design",description:"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。本文深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。"},{title:"模块化编程实践指南",url:"/fullstack/module-programming-practice-guide",description:"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。"},{title:"TypeScript 编译与调试完全指南",url:"/fullstack/typescript-compilation-debugging-guide",description:"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。本文深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。"},{title:"聊一聊 TypeScript 中的泛型",url:"/fullstack/typescript-generic-types",description:"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。"},{title:"深入理解 TypeScript 联合类型与交叉类型",url:"/fullstack/union-types-vs-intersection-types",description:"本文以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。"}]},{id:"fullstack-resources",title:"工具与资源推荐",icon:"🔧",color:"#0ea5e9",articles:[{title:"全栈技术资源推荐",url:"/fullstack/full-stack-resources",description:"本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。"}]}],v=JSON.parse('{"title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","categories":["全栈"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/fullstack/overview","articleShare":false},"headers":[],"relativePath":"fullstack/overview.md","filePath":"01.全栈/00.overview.md"}'),d={name:"fullstack/overview.md"},C=Object.assign(d,{setup(g){return(f,e)=>(S(),u("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[r("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(o,{variant:"insight",quote:"全栈工程不是技术的广度竞赛,而是深度的贯通——从前端表达到后端架构,从数据设计到网络协议,在技术的全链路中建立系统性思维。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"纵深贯通"),r("——从前端表达到后端架构,从数据设计到网络协议,打破领域壁垒,在技术的全链路中建立系统性思维;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"根基扎实"),r("——TypeScript、浏览器原理、模块化设计,全栈的广度离不开每一个领域的深度积累;")],-1)),e[3]||(e[3]=t("p",null,[t("strong",null,"工程闭环"),r("——不仅会写代码,更懂架构决策、质量保障、安全防护与持续交付,确保每个环节都可推向生产。")],-1)),i(n,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png",caption:"全栈工程认知体系:认知层 → 技术领域层 → 工程能力层 → 基础设施层"}),i(p,{type:"info",title:"从技术广度到工程深度",content:"本系列聚焦全栈技术的核心领域:前端工程、网络协议、TypeScript 基础素养、工具与资源推荐。从 React 设计哲学到 SSE 协议实践,从类型系统到模块化架构,每一篇文章都力求在广度与深度之间找到平衡——不是泛泛了解每一个技术名词,而是在关键领域建立可迁移的系统性认知。"}),e[4]||(e[4]=t("h2",{id:"精选专题",tabindex:"-1"},[r("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(a,{categories:l(s),"root-label":"全栈工程","show-articles":!1},null,8,["categories"]),i(c,{categories:l(s)},null,8,["categories"])]))}});export{v as __pageData,C as default};
diff --git a/assets/fullstack_overview.md.D2Ez6OwG.lean.js b/assets/fullstack_overview.md.D8h6Ek2v.lean.js
similarity index 97%
rename from assets/fullstack_overview.md.D2Ez6OwG.lean.js
rename to assets/fullstack_overview.md.D8h6Ek2v.lean.js
index b836add..b4b1d47 100644
--- a/assets/fullstack_overview.md.D2Ez6OwG.lean.js
+++ b/assets/fullstack_overview.md.D8h6Ek2v.lean.js
@@ -1 +1 @@
-import{K as a,A as c}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as o}from"./chunks/Blockquote.acMDZFAD.js";import{F as n,C as p}from"./chunks/Callout.B-9wy57V.js";import{c as u,o as S,a as t,b as i,e as r,u as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                                          */const s=[{id:"frontend-engineering",title:"前端工程",icon:"🎨",color:"#f59e0b",articles:[{title:"React 设计哲学:AI 协作时代的组件化开发实践指南",url:"/fullstack/react-design-philosophy-ai-augmented",description:"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。"},{title:"前端渲染方案选型指南:从 CSR 到 PPR",url:"/fullstack/frontend-rendering-scheme",description:"针对前端渲染方案选型难题,系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。"},{title:"Next.js 深度解析:从架构理念到工程实践",url:"/fullstack/next-deep-dive",description:"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。"},{title:"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈",url:"/fullstack/server-state-management",description:"本文深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。"},{title:"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南",url:"/fullstack/css-engineering",description:"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。"},{title:"JAMStack 梳理与实践指南",url:"/fullstack/jamstack",description:"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式。 从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。"}]},{id:"fullstack-networking",title:"网络与通信",icon:"🌐",color:"#0ea5e9",articles:[{title:"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南",url:"/fullstack/networking-protocol-selection-guide",description:"文本深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵"},{title:"流式 HTTP 与 SSE 协议:从概念辨析到生产实践",url:"/fullstack/networking-sse-practice",description:"本文辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。"},{title:"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策",url:"/fullstack/networking-polling-optimization",description:"针对传统固定频率轮询的服务器资源浪费问题,系统分析退避轮询与长轮询两种优化策略的核心原理与运行机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。"}]},{id:"fullstack-basic",title:"全栈基础素养",icon:"📚",color:"#64748b",articles:[{title:"奥卡姆剃刀原则:从理论到编程设计的实践指南",url:"/fullstack/occams-razor-software-design",description:"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。本文深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。"},{title:"模块化编程实践指南",url:"/fullstack/module-programming-practice-guide",description:"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。"},{title:"TypeScript 编译与调试完全指南",url:"/fullstack/typescript-compilation-debugging-guide",description:"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。本文深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。"},{title:"聊一聊 TypeScript 中的泛型",url:"/fullstack/typescript-generic-types",description:"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。"},{title:"深入理解 TypeScript 联合类型与交叉类型",url:"/fullstack/union-types-vs-intersection-types",description:"本文以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。"}]},{id:"fullstack-resources",title:"工具与资源推荐",icon:"🔧",color:"#0ea5e9",articles:[{title:"全栈技术资源推荐",url:"/fullstack/full-stack-resources",description:"本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。"}]}],v=JSON.parse('{"title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","categories":["全栈"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/fullstack/overview","articleShare":false},"headers":[],"relativePath":"fullstack/overview.md","filePath":"01.全栈/00.overview.md"}'),d={name:"fullstack/overview.md"},C=Object.assign(d,{setup(g){return(f,e)=>(S(),u("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[r("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(o,{variant:"insight",quote:"全栈工程不是技术的广度竞赛,而是深度的贯通——从前端表达到后端架构,从数据设计到网络协议,在技术的全链路中建立系统性思维。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"纵深贯通"),r("——从前端表达到后端架构,从数据设计到网络协议,打破领域壁垒,在技术的全链路中建立系统性思维;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"根基扎实"),r("——TypeScript、浏览器原理、模块化设计,全栈的广度离不开每一个领域的深度积累;")],-1)),e[3]||(e[3]=t("p",null,[t("strong",null,"工程闭环"),r("——不仅会写代码,更懂架构决策、质量保障、安全防护与持续交付,确保每个环节都可推向生产。")],-1)),i(n,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png",caption:"全栈工程认知体系:认知层 → 技术领域层 → 工程能力层 → 基础设施层"}),i(p,{type:"info",title:"从技术广度到工程深度",content:"本系列聚焦全栈技术的核心领域:前端工程、网络协议、TypeScript 基础素养、工具与资源推荐。从 React 设计哲学到 SSE 协议实践,从类型系统到模块化架构,每一篇文章都力求在广度与深度之间找到平衡——不是泛泛了解每一个技术名词,而是在关键领域建立可迁移的系统性认知。"}),e[4]||(e[4]=t("h2",{id:"精选专题",tabindex:"-1"},[r("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(a,{categories:l(s),"root-label":"全栈工程","show-articles":!1},null,8,["categories"]),i(c,{categories:l(s)},null,8,["categories"])]))}});export{v as __pageData,C as default};
+import{K as a,A as c}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as o}from"./chunks/Blockquote.B7nHhHWl.js";import{F as n,C as p}from"./chunks/Callout.Bss1uX1v.js";import{c as u,o as S,a as t,b as i,e as r,u as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                                          */const s=[{id:"frontend-engineering",title:"前端工程",icon:"🎨",color:"#f59e0b",articles:[{title:"React 设计哲学:AI 协作时代的组件化开发实践指南",url:"/fullstack/react-design-philosophy-ai-augmented",description:"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。"},{title:"前端渲染方案选型指南:从 CSR 到 PPR",url:"/fullstack/frontend-rendering-scheme",description:"针对前端渲染方案选型难题,系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。"},{title:"Next.js 深度解析:从架构理念到工程实践",url:"/fullstack/next-deep-dive",description:"深入解析 Next.js 的 Server First 架构哲学、混合渲染策略、Server Components 与 Client Components 的分工,以及 Streaming、Suspense、PPR 与 Cache 的协同机制,结合 next-demo 项目展示工程实践。"},{title:"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈",url:"/fullstack/server-state-management",description:"本文深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。"},{title:"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南",url:"/fullstack/css-engineering",description:"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。"},{title:"JAMStack 梳理与实践指南",url:"/fullstack/jamstack",description:"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式。 从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。"}]},{id:"fullstack-networking",title:"网络与通信",icon:"🌐",color:"#0ea5e9",articles:[{title:"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南",url:"/fullstack/networking-protocol-selection-guide",description:"文本深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵"},{title:"流式 HTTP 与 SSE 协议:从概念辨析到生产实践",url:"/fullstack/networking-sse-practice",description:"本文辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。"},{title:"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策",url:"/fullstack/networking-polling-optimization",description:"针对传统固定频率轮询的服务器资源浪费问题,系统分析退避轮询与长轮询两种优化策略的核心原理与运行机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。"}]},{id:"fullstack-basic",title:"全栈基础素养",icon:"📚",color:"#64748b",articles:[{title:"奥卡姆剃刀原则:从理论到编程设计的实践指南",url:"/fullstack/occams-razor-software-design",description:"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。本文深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。"},{title:"模块化编程实践指南",url:"/fullstack/module-programming-practice-guide",description:"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。"},{title:"TypeScript 编译与调试完全指南",url:"/fullstack/typescript-compilation-debugging-guide",description:"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。本文深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。"},{title:"聊一聊 TypeScript 中的泛型",url:"/fullstack/typescript-generic-types",description:"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。"},{title:"深入理解 TypeScript 联合类型与交叉类型",url:"/fullstack/union-types-vs-intersection-types",description:"本文以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。"}]},{id:"fullstack-resources",title:"工具与资源推荐",icon:"🔧",color:"#0ea5e9",articles:[{title:"全栈技术资源推荐",url:"/fullstack/full-stack-resources",description:"本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。"}]}],v=JSON.parse('{"title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\"认知层 → 技术领域 → 工程能力 → 基础设施\\"的完整全栈知识图谱。","categories":["全栈"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png","permalink":"/fullstack/overview","articleShare":false},"headers":[],"relativePath":"fullstack/overview.md","filePath":"01.全栈/00.overview.md"}'),d={name:"fullstack/overview.md"},C=Object.assign(d,{setup(g){return(f,e)=>(S(),u("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[r("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),i(o,{variant:"insight",quote:"全栈工程不是技术的广度竞赛,而是深度的贯通——从前端表达到后端架构,从数据设计到网络协议,在技术的全链路中建立系统性思维。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"纵深贯通"),r("——从前端表达到后端架构,从数据设计到网络协议,打破领域壁垒,在技术的全链路中建立系统性思维;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"根基扎实"),r("——TypeScript、浏览器原理、模块化设计,全栈的广度离不开每一个领域的深度积累;")],-1)),e[3]||(e[3]=t("p",null,[t("strong",null,"工程闭环"),r("——不仅会写代码,更懂架构决策、质量保障、安全防护与持续交付,确保每个环节都可推向生产。")],-1)),i(n,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png",caption:"全栈工程认知体系:认知层 → 技术领域层 → 工程能力层 → 基础设施层"}),i(p,{type:"info",title:"从技术广度到工程深度",content:"本系列聚焦全栈技术的核心领域:前端工程、网络协议、TypeScript 基础素养、工具与资源推荐。从 React 设计哲学到 SSE 协议实践,从类型系统到模块化架构,每一篇文章都力求在广度与深度之间找到平衡——不是泛泛了解每一个技术名词,而是在关键领域建立可迁移的系统性认知。"}),e[4]||(e[4]=t("h2",{id:"精选专题",tabindex:"-1"},[r("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),i(a,{categories:l(s),"root-label":"全栈工程","show-articles":!1},null,8,["categories"]),i(c,{categories:l(s)},null,8,["categories"])]))}});export{v as __pageData,C as default};
diff --git a/assets/fullstack_react-design-philosophy-ai-augmented.md.nIC-WImG.js b/assets/fullstack_react-design-philosophy-ai-augmented.md.B47j5XxZ.js
similarity index 99%
rename from assets/fullstack_react-design-philosophy-ai-augmented.md.nIC-WImG.js
rename to assets/fullstack_react-design-philosophy-ai-augmented.md.B47j5XxZ.js
index 7adb089..ed77f34 100644
--- a/assets/fullstack_react-design-philosophy-ai-augmented.md.nIC-WImG.js
+++ b/assets/fullstack_react-design-philosophy-ai-augmented.md.B47j5XxZ.js
@@ -1 +1 @@
-import{H as r}from"./chunks/HighLightText.pXHFEzDb.js";import{c as s,o as n,a as o,b as l,d as i,e,w as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const I=JSON.parse('{"title":"React 设计哲学:AI 协作时代的组件化开发实践指南","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","frontmatter":{"date":"2026-02-10T23:33:19.000Z","title":"React 设计哲学:AI 协作时代的组件化开发实践指南","tldr":"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","tags":["tutorial","react","component-design","state-management","ai-augmented","specification-driven"],"permalink":"/fullstack/react-design-philosophy-ai-augmented","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/react-design-philosophy-ai-augmented.md","filePath":"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md"}'),g={name:"fullstack/react-design-philosophy-ai-augmented.md"},h=Object.assign(g,{setup(d){return(p,t)=>(n(),s("div",null,[t[10]||(t[10]=o("h1",{id:"react-设计哲学-ai-协作时代的组件化开发实践指南",tabindex:"-1"},[e("React 设计哲学:AI 协作时代的组件化开发实践指南 "),o("a",{class:"header-anchor",href:"#react-设计哲学-ai-协作时代的组件化开发实践指南","aria-label":"Permalink to “React 设计哲学:AI 协作时代的组件化开发实践指南”"},"​")],-1)),t[11]||(t[11]=o("h2",{id:"_1-引言",tabindex:"-1"},[e("1. 引言 "),o("a",{class:"header-anchor",href:"#_1-引言","aria-label":"Permalink to “1. 引言”"},"​")],-1)),o("p",null,[t[1]||(t[1]=e("在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[0]||(t[0]=[e("AI 提升的是 30% 编码阶段的执行力,而非取代 70% 的架构裁决",-1)])]),_:1}),t[2]||(t[2]=e("。 高质量 React 应用的诞生,依然始于人类心智对数据流、副作用边界与可组合性的透彻推演。",-1))]),t[12]||(t[12]=o("p",null,'然而,真正驾驭 React 并非易事。许多团队在项目初期享受着组件化带来的快感,却在业务膨胀后陷入"组件地狱"——深嵌套的 prop drilling、失控的状态蔓延、难以追踪的副作用,让代码库逐渐腐化。问题的根源往往不在于 React 本身,而在于我们是否真正理解其背后的设计哲学。',-1)),l(r,{bold:""},{default:a(()=>[...t[3]||(t[3]=[e("React 的精髓在于以组件化为核心,将复杂的 UI 拆解为独立、可复用的自治单元,让数据沿着从输入(props)到输出(UI 元素)的轨迹形成清晰、可控的闭环",-1)])]),_:1}),t[13]||(t[13]=i('。为确保项目的可维护性与抗腐化能力,React 开发者应将以下标准内化为肌肉记忆:
检查项核心标准架构目标
1. 单一职责每个组件是否只做一件事(纯布局或纯逻辑)?控制认知复杂度,防止组件“上帝化”
2. 组合优先是否优先使用了 children 或 Props 传递子组件?消除 Prop Drilling,提升灵活性
3. DOM 扁平是否利用 <>...</> 移除了所有非必要的包装 <div>减小渲染开销,保持 DOM 树纯粹
4. 拥抱 Hooks是否已用 Custom Hooks 替代了 HOC 嵌套?展平组件树,实现逻辑与视图的物理隔离

2. 划分具备分层结构的“自治”组件

组件是 React 对“关注点分离”这一软件工程经典原则的具象化落地。它将 UI 拆分为若干自治单元,每个单元对外仅暴露 props 契约,对内通过 state 管理自身行为。

划分组件必须恪守单一职责(SRP)高内聚低耦合两条铁律:

  • 一事一议:理想状态下,一个组件只负责渲染一块特定的视觉或封装一类特定的交互。随着功能膨胀,必须果断将其裂变为更细粒度的子组件。
  • 显式通信:组件间仅通过 props 与回调通信,杜绝任何形式的隐式状态共享。

在实践中,我们可以通过以下策略压平组件层级,维持架构的清爽:

策略说明
角色界定容器组件(Container):充当"调度中心",负责数据获取、状态管理与业务逻辑,随后将干净的数据流入子组件。避免在容器中混杂复杂的 DOM 结构,利用 Custom Hooks 抽离逻辑,能让 UI 层级瞬间变薄。
展示组件(Presentational):充当"纯函数",专注于接收 props 并渲染视图,保持 DOM 结构的极度扁平。
组合优于嵌套这是解决组件树过深的最强武器。永远不要在组件内部硬编码子组件,而是通过 children 或 render props,将子组件作为参数注入。这在语义上形成了一种"声明式 DSL",让代码本身成为直观的 UI 蓝图。
极简接口组件的 props 契约应绝对最小化,仅暴露必要的输入。

AI 协作小洞察:

我们要先划分层级结构,不应该让 AI 盲目写代码,可以先让它充当“架构助理”进行结构划分与设计:

  • 投喂需求与视觉规格,提供需求描述或 UI 视觉稿截图,要求 AI(如 ChatGPT、Claude 等)辅助分析并输出组件层级树,同时解释其职责划分与层级结构设计的思路。
  • 定义职责约束,在 Prompt 中明确要求 AI 区分"容器组件"与"展示组件",并遵循单一职责原则为其命名——这既能启发思路,也能提前规避命名不当的问题。
  • 人工裁决,评估 AI 输出的结构,微调边界,确保这套“骨架”足够健壮,再进入下一步的实质性编码。

3. 构建纯渲染的静态版本:确立工程基线

在状态与交互介入之前,我们可以先用“数据占位符”把 UI 的纯渲染路径跑通,构建一个剥离了所有动态行为的“静态版本”。此过程不需要过多的逻辑烧脑,而是纯粹的结构编码。

静态版本应保证组件无副作用,能为后续快照测试、服务端渲染(SSR)与 hydration 奠定可靠基础。这一步的工程价值不可估量:

  • 契约验证:强制检验当前的 props 设计是否足以表达所有的视觉状态差异。
  • 前置对齐:让设计师和产品提前验收“像素级”静态产物,规避后期可能出现的视觉返工。
  • 可信基线:为后续增量引入状态(State)与副作用(Effects)提供了一个随时可回滚的基线

在编写代码时,我们通常采用“自顶向下”的构建顺序,即从顶层容器开始,逐层向叶子节点实现。这种策略能确保组件职责清晰,不会过早陷入局部细节,同时保证每个模块都是独立、可测试的。

当然,在 AI 协作时代,借助 AI 生成静态版本无疑是更为高效的方式。但我们不建议直接采用全自动化构建作为最终方案——毕竟静态版本是整个项目的工程基线,一旦存在隐蔽缺陷,将为后续迭代埋下隐患。

更稳健的做法是将全自动化与半自动化并行推进:先让 AI 基于第一阶段评审通过的组件划分树与职责描述,在独立分支中全自动化生成代码;与此同时,开发者在正式分支中以半自动化方式逐步搭建。由于全自动化产出速度极快,我们可以横向对比多份生成结果,择优验证后再整合到正式项目中。这种"边做边验"的模式,既能提升基线质量,也能加深开发者对架构的理解。

进入静态版本构建阶段,我们需要关注以下三个关键环节:

1、前置步骤:脚手架生成
首先利用 AI 编程工具(如 Claude Code / Codex)快速初始化项目结构与配置文件。这一步是后续全自动化与半自动化并行模式的基础——AI 在标准化脚手架搭建上效率极高,能够迅速为我们铺好工程地基。

2、注入规格,启动双轨模式
将第一阶段确认好的"组件层级树与职责描述"作为明确的 Specification 喂给 AI,令其批量生成符合 React 规范的静态组件骨架。此时全自动化与半自动化两条线并行推进:AI 在独立分支快速产出多份候选代码,开发者则在主干分支逐步搭建,形成可对比、可验证的协作闭环。

3、人机结对审查
横向对比 AI 的自动化产出后,择优与人工代码融合,重点 Review 是否真正做到"无副作用"与"幂等渲染"。过程中也可让 AI 与人工协作,一旦发现问题或异常情况,立即通过对话纠正,确保这份静态基线的绝对纯粹——它将是后续引入状态与副作用时唯一可信的回滚锚点。

4. 寻找状态的最简表示,敲定拓扑位置

4.1 什么是 State?什么是 Derived Data(派生数据)?

State 本质上是对应用随时间变化产生的差异的建模,为正确地构建应用,让应用可控,我们需要在这一阶段找出驱动 UI 运转的 State(状态)的最小完整集合

在定义 State 之前,先做灵魂三问。先问自己三个关键问题。如果满足以下任何一条,它就绝对不是 State

  1. 随时间推移保持不变? (如静态配置) -> 不是 State。
  2. 通过 props 从父级传入? (如外部注入的数据) -> 不是 State。
  3. 能通过已有 State 或 props 计算得出? (如根据商品列表计算出的库存总量) -> 坚决不能作为 State。

这些可通过计算得出的数据被称为 Derived Data(派生数据)。正确的做法是在渲染期间动态计算它们,或使用 useMemo 进行性能优化,而不是将其塞入 useState 中徒增同步烦恼。

一份合格的状态必须:最小(剔除可推导字段)且完整(下游 UI 能基于此状态集合进行确定性渲染)。

4.2 敲定 State 的安放位置

小提示:防范状态爆炸与泄漏

  • 单一真实数据源:同一业务实体在组件树中只能存在一份状态副本。如果祖先节点已有,就通过 props 传递,严禁在不同组件内重复 useState
  • 无泄漏下沉:把状态隔离在局部子树时,必须显式定义读写边界——仅对真正需要的子孙暴露接口。禁止在模块顶层声明可变状态,防止状态隐式穿透组件边界。

确定了“是什么”之后,更关键的是“放在哪”。State 的安置需要在状态提升(Lifting State Up)状态下沉(Colocating State)之间寻找动态平衡:

  • 状态提升(Lifting State Up):若多个兄弟组件需要共享同一状态,毫不犹豫地将其提升至它们最近的公共父节点。
  • 状态下沉(Colocating State):若状态仅在特定子树内部流转,应通过局部 Context 或轻量级状态库(Zustand / Jotai)将其隔离,避免污染全局。

架构目标是绘制出一张清晰的数据流拓扑图:状态变更只沿单向轨道流动,出现 Bug 时,可以像排查电路图一样用万用表逐点测量。

4. 建立反向数据流:让回调成为刚性契约

React 的数据流天然是自顶向下的(Top-Down)。这种单向流动牺牲了双向绑定的“便捷性”,换来的是数据流转的绝对清晰与可预测性

当底层展示组件需要向上级反馈用户行为时,我们需要设计反向数据流,其本质是将“UI 事件”转化为严谨的“回调契约”

  1. 父组件通过 props 向子组件下发契约:onXxx: (data: T) => void
  2. 子组件在适当时机触发契约,但不关心父组件如何处理,借此维持自身的纯粹与解耦。
  3. 父组件在回调中执行 setState,触发自顶向下的重新渲染,完成闭环。

这种 事件 -> 回调 -> 状态突变 -> 重渲染 的循环,构成了 React 响应式架构的最小内核。面对跨层级通信时,可以引入 Context 或状态管理工具来收敛"回调地狱",但单向数据流的铁律绝不能被破坏

5. 规范驱动开发(SDD):从执行者转变为立法者

随着前四个阶段的稳步推进,基础架构已然确立,应用项目也进入了更深层次的开发迭代阶段。此时,如何高效地解决"怎么写"的问题?这正是 AI 协作编程大显身手的时刻。

规范驱动开发(Specification-Driven Development,SDD)是一种比 Vibe Coding 更为可靠的人机协作实践模式:人类负责制定规范,AI 负责实现代码。这种分工让开发者从繁琐的编码劳动中解放出来,专注于真正创造价值的方案选择与设计决策。

5.1 SDD 模式的核心流程与实践要点

SDD 模式遵循一个五步闭环:规划阶段 → 生成规范 → 人工 Review → 自动化开发 → 工程验证

阶段描述
规划阶段让 AI 分析业务场景,输出设计文档。这一阶段的核心是明确"做什么"——包括模块边界、数据结构、接口签名、约束条件等。
生成规范基于规划结果,让 AI 生成可指导编程的实现规范(Specification)。规范是一份可执行的契约,包含类型定义、函数签名、测试用例、边界条件等。规范的质量直接决定了代码的质量
人工 Review开发者审核规范的合理性。这是人类决策的关键环节——确保设计符合架构原则、无冗余无泄漏、命名语义清晰、数据流方向明确。Review 通过后,规范成为 AI 实现的唯一依据。
自动化开发确认规范后,让 AI 基于规范实现完整的功能模块。要求 AI 遵循 TDD 模式——先编写测试用例,再实现逻辑,确保行为的可预测性。每次开发应聚焦于一个完整、恰当粒度的功能或独立模块,避免碎片化。
工程验证配置项目的 lint、类型检查与测试套件,由 AI 自动运行验证,形成质量闭环。若发现问题,应优先引导 AI 自行修正,而非手动干预。

SDD 模式的实践要点可归纳为:

  • 规范先行,代码后置:永远不要让 AI 在没有规范的情况下直接写代码。模糊的需求描述只会让 AI 制造技术债务。一份清晰的规范,能让 AI 产出可维护的代码。

  • 恰当粒度,完整交付:每次让 AI 开发一个完整的功能模块,而非零散的代码片段。完整的模块有清晰的边界、完整的测试、可独立验证的行为。这种粒度既能保证开发效率,又能确保代码质量。

  • TDD 内嵌,测试驱动:在规范中明确要求 AI 先写测试、再写实现。测试用例是规范的具象化表达,也是验证代码正确性的唯一标准。

  • 引导修正,避免手动修补:当代码未通过验证时,优先引导 AI 自行修正,而非直接手动修改。手动修补会干扰 AI 对项目上下文的理解,导致后续生成的代码一致性下降。

  • 工程闭环,持续迭代:lint、类型检查、测试套件是质量的三道防线。每次开发完成后必须运行完整验证,确保代码符合项目规范。验证通过后再进入下一个模块的开发。

5.2 SDD 模式的适用场景

SDD 模式适用于多数应用的功能迭代开发阶段。在前端领域,它与 React 的声明式范式尤为契合,特别适合以下场景:

  • 状态管理模块:状态是应用的核心骨架,需要严格的类型约束与变更追踪。SDD 能确保状态设计遵循 SSOT 原则,杜绝冗余与泄漏。

  • 交互逻辑开发:反向数据流涉及组件间的通信契约,是典型的"接口语义推敲"场景。SDD 能确保回调命名语义清晰、数据流方向明确。

  • 独立组件开发:针对功能内聚、可复用的独立组件(如表单控件、数据卡片、模态框等),需先明确其 Props 契约、内部状态边界及副作用生命周期,再交由 AI 实现具体渲染逻辑与交互细节。

  • 基础设施代码:Custom Hooks、工具函数、类型定义等基础设施代码,适合用 SDD 模式批量生成,确保接口一致性。

5.3 为什么 React 与 SDD 天生一对?

React 的声明式(Declarative)特性意味着我们只需描述 State → UI 的映射关系——给定特定的状态输入,界面应当呈现何种输出,完全由开发者声明式地定义,而非通过命令式地操作 DOM 来达成。

如果说 SDD(规格驱动开发)是人机协作的一套"宪法",那么 React 就是完美的"执行机构"。两者的天作之合并非偶然,而是源于底层架构范式的深度契合。React 所倡导的"描述即实现"的声明式编程范式,本质上就是一种显式契约(Props Contract),能够有效压缩 AI 的"幻觉空间"。

当我们在 Spec 中定义好 interface Props 时,实际上是为 AI 划定了一个认知边界。AI 无需费力猜测上下文,只需在 Props 的约束范围内寻找局部最优解。这种高度的封装性从物理层面隔绝了 AI 产生"幻觉"的可能,确保生成的组件是高内聚、低耦合的自治单元。

这与 SDD 的思维高度一致:开发者只需定义"映射规格"(即状态到 UI 的转换规则、组件的 Props 契约、数据的流动路径),而具体的实现细节——如何高效地 diff 虚拟 DOM、如何批量处理状态更新、如何优化重渲染性能——完全交由 AI 填充。在 SDD 模式下,人类聚焦于"做什么"(What)和"为什么"(Why),AI 负责"怎么做"(How)。这正是声明式编程与规范驱动开发在哲学层面的深度契合。

6.结语:工程师的不可替代性

当我们回望 React 设计哲学的四个核心步骤——组件划分、静态基线、状态定位、数据流闭环,会发现它们共同指向一个本质命题:如何在复杂性中建立秩序

',55)),o("p",null,[l(r,{type:"info"},{default:a(()=>[...t[4]||(t[4]=[e("组件化是对 UI 复杂性的分解,静态版本是对渲染行为的锚定,最小状态是对数据冗余的剔除,单向数据流是对变更轨迹的约束。这些设计原则并非 React 独有,而是软件工程几十年沉淀下来的智慧结晶——单一职责、关注点分离、显式优于隐式、数据流的可追溯性",-1)])]),_:1}),t[5]||(t[5]=e("。",-1))]),l(r,{type:"warning",bold:""},{default:a(()=>[...t[6]||(t[6]=[e("AI 时代的到来,并未改变这些原则的内核,反而让它们的价值更加凸显",-1)])]),_:1}),t[14]||(t[14]=e("。当 AI 能够以惊人的速度生成代码时,",-1)),t[15]||(t[15]=o("strong",null,'"写什么"的决策权比"怎么写"的执行力更为稀缺',-1)),t[16]||(t[16]=e("。一个清晰的设计规范,能让 AI 产出可维护的代码;而一个模糊的需求描述,只会让 AI 制造更多技术债务。",-1)),t[17]||(t[17]=o("p",null,[e("规范驱动开发(SDD)的本质是"),o("strong",null,"将架构思维外化为可执行的契约"),e('。开发者不再是代码的"搬运工",而是规范的"立法者"。我们定义组件边界、敲定状态拓扑、设计回调契约——AI 则在我们设定的框架内高效填充实现细节。这种分工,让开发者从繁琐的编码劳动中解放出来,将精力集中于真正创造价值的架构决策。')],-1)),o("p",null,[t[8]||(t[8]=e("最后,请记住:",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[7]||(t[7]=[e("工具会迭代,技术会过时,但对复杂性的驾驭能力永远是工程师的核心竞争力",-1)])]),_:1}),t[9]||(t[9]=e('。React 的 API 可能会在未来被新的框架取代,但"如何在复杂性中建立秩序"这一命题,将伴随软件工程的始终。愿你在这场技术演进中,始终站在架构设计的高地,用清晰的思维驾驭强大的工具,构建出经得起时间考验的软件系统。',-1))])]))}});export{I as __pageData,h as default}; +import{H as r}from"./chunks/HighLightText.DNC3BKyb.js";import{c as s,o as n,a as o,b as l,d as i,e,w as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const I=JSON.parse('{"title":"React 设计哲学:AI 协作时代的组件化开发实践指南","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","frontmatter":{"date":"2026-02-10T23:33:19.000Z","title":"React 设计哲学:AI 协作时代的组件化开发实践指南","tldr":"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","tags":["tutorial","react","component-design","state-management","ai-augmented","specification-driven"],"permalink":"/fullstack/react-design-philosophy-ai-augmented","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/react-design-philosophy-ai-augmented.md","filePath":"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md"}'),g={name:"fullstack/react-design-philosophy-ai-augmented.md"},h=Object.assign(g,{setup(d){return(p,t)=>(n(),s("div",null,[t[10]||(t[10]=o("h1",{id:"react-设计哲学-ai-协作时代的组件化开发实践指南",tabindex:"-1"},[e("React 设计哲学:AI 协作时代的组件化开发实践指南 "),o("a",{class:"header-anchor",href:"#react-设计哲学-ai-协作时代的组件化开发实践指南","aria-label":"Permalink to “React 设计哲学:AI 协作时代的组件化开发实践指南”"},"​")],-1)),t[11]||(t[11]=o("h2",{id:"_1-引言",tabindex:"-1"},[e("1. 引言 "),o("a",{class:"header-anchor",href:"#_1-引言","aria-label":"Permalink to “1. 引言”"},"​")],-1)),o("p",null,[t[1]||(t[1]=e("在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[0]||(t[0]=[e("AI 提升的是 30% 编码阶段的执行力,而非取代 70% 的架构裁决",-1)])]),_:1}),t[2]||(t[2]=e("。 高质量 React 应用的诞生,依然始于人类心智对数据流、副作用边界与可组合性的透彻推演。",-1))]),t[12]||(t[12]=o("p",null,'然而,真正驾驭 React 并非易事。许多团队在项目初期享受着组件化带来的快感,却在业务膨胀后陷入"组件地狱"——深嵌套的 prop drilling、失控的状态蔓延、难以追踪的副作用,让代码库逐渐腐化。问题的根源往往不在于 React 本身,而在于我们是否真正理解其背后的设计哲学。',-1)),l(r,{bold:""},{default:a(()=>[...t[3]||(t[3]=[e("React 的精髓在于以组件化为核心,将复杂的 UI 拆解为独立、可复用的自治单元,让数据沿着从输入(props)到输出(UI 元素)的轨迹形成清晰、可控的闭环",-1)])]),_:1}),t[13]||(t[13]=i('。为确保项目的可维护性与抗腐化能力,React 开发者应将以下标准内化为肌肉记忆:
检查项核心标准架构目标
1. 单一职责每个组件是否只做一件事(纯布局或纯逻辑)?控制认知复杂度,防止组件“上帝化”
2. 组合优先是否优先使用了 children 或 Props 传递子组件?消除 Prop Drilling,提升灵活性
3. DOM 扁平是否利用 <>...</> 移除了所有非必要的包装 <div>减小渲染开销,保持 DOM 树纯粹
4. 拥抱 Hooks是否已用 Custom Hooks 替代了 HOC 嵌套?展平组件树,实现逻辑与视图的物理隔离

2. 划分具备分层结构的“自治”组件

组件是 React 对“关注点分离”这一软件工程经典原则的具象化落地。它将 UI 拆分为若干自治单元,每个单元对外仅暴露 props 契约,对内通过 state 管理自身行为。

划分组件必须恪守单一职责(SRP)高内聚低耦合两条铁律:

  • 一事一议:理想状态下,一个组件只负责渲染一块特定的视觉或封装一类特定的交互。随着功能膨胀,必须果断将其裂变为更细粒度的子组件。
  • 显式通信:组件间仅通过 props 与回调通信,杜绝任何形式的隐式状态共享。

在实践中,我们可以通过以下策略压平组件层级,维持架构的清爽:

策略说明
角色界定容器组件(Container):充当"调度中心",负责数据获取、状态管理与业务逻辑,随后将干净的数据流入子组件。避免在容器中混杂复杂的 DOM 结构,利用 Custom Hooks 抽离逻辑,能让 UI 层级瞬间变薄。
展示组件(Presentational):充当"纯函数",专注于接收 props 并渲染视图,保持 DOM 结构的极度扁平。
组合优于嵌套这是解决组件树过深的最强武器。永远不要在组件内部硬编码子组件,而是通过 children 或 render props,将子组件作为参数注入。这在语义上形成了一种"声明式 DSL",让代码本身成为直观的 UI 蓝图。
极简接口组件的 props 契约应绝对最小化,仅暴露必要的输入。

AI 协作小洞察:

我们要先划分层级结构,不应该让 AI 盲目写代码,可以先让它充当“架构助理”进行结构划分与设计:

  • 投喂需求与视觉规格,提供需求描述或 UI 视觉稿截图,要求 AI(如 ChatGPT、Claude 等)辅助分析并输出组件层级树,同时解释其职责划分与层级结构设计的思路。
  • 定义职责约束,在 Prompt 中明确要求 AI 区分"容器组件"与"展示组件",并遵循单一职责原则为其命名——这既能启发思路,也能提前规避命名不当的问题。
  • 人工裁决,评估 AI 输出的结构,微调边界,确保这套“骨架”足够健壮,再进入下一步的实质性编码。

3. 构建纯渲染的静态版本:确立工程基线

在状态与交互介入之前,我们可以先用“数据占位符”把 UI 的纯渲染路径跑通,构建一个剥离了所有动态行为的“静态版本”。此过程不需要过多的逻辑烧脑,而是纯粹的结构编码。

静态版本应保证组件无副作用,能为后续快照测试、服务端渲染(SSR)与 hydration 奠定可靠基础。这一步的工程价值不可估量:

  • 契约验证:强制检验当前的 props 设计是否足以表达所有的视觉状态差异。
  • 前置对齐:让设计师和产品提前验收“像素级”静态产物,规避后期可能出现的视觉返工。
  • 可信基线:为后续增量引入状态(State)与副作用(Effects)提供了一个随时可回滚的基线

在编写代码时,我们通常采用“自顶向下”的构建顺序,即从顶层容器开始,逐层向叶子节点实现。这种策略能确保组件职责清晰,不会过早陷入局部细节,同时保证每个模块都是独立、可测试的。

当然,在 AI 协作时代,借助 AI 生成静态版本无疑是更为高效的方式。但我们不建议直接采用全自动化构建作为最终方案——毕竟静态版本是整个项目的工程基线,一旦存在隐蔽缺陷,将为后续迭代埋下隐患。

更稳健的做法是将全自动化与半自动化并行推进:先让 AI 基于第一阶段评审通过的组件划分树与职责描述,在独立分支中全自动化生成代码;与此同时,开发者在正式分支中以半自动化方式逐步搭建。由于全自动化产出速度极快,我们可以横向对比多份生成结果,择优验证后再整合到正式项目中。这种"边做边验"的模式,既能提升基线质量,也能加深开发者对架构的理解。

进入静态版本构建阶段,我们需要关注以下三个关键环节:

1、前置步骤:脚手架生成
首先利用 AI 编程工具(如 Claude Code / Codex)快速初始化项目结构与配置文件。这一步是后续全自动化与半自动化并行模式的基础——AI 在标准化脚手架搭建上效率极高,能够迅速为我们铺好工程地基。

2、注入规格,启动双轨模式
将第一阶段确认好的"组件层级树与职责描述"作为明确的 Specification 喂给 AI,令其批量生成符合 React 规范的静态组件骨架。此时全自动化与半自动化两条线并行推进:AI 在独立分支快速产出多份候选代码,开发者则在主干分支逐步搭建,形成可对比、可验证的协作闭环。

3、人机结对审查
横向对比 AI 的自动化产出后,择优与人工代码融合,重点 Review 是否真正做到"无副作用"与"幂等渲染"。过程中也可让 AI 与人工协作,一旦发现问题或异常情况,立即通过对话纠正,确保这份静态基线的绝对纯粹——它将是后续引入状态与副作用时唯一可信的回滚锚点。

4. 寻找状态的最简表示,敲定拓扑位置

4.1 什么是 State?什么是 Derived Data(派生数据)?

State 本质上是对应用随时间变化产生的差异的建模,为正确地构建应用,让应用可控,我们需要在这一阶段找出驱动 UI 运转的 State(状态)的最小完整集合

在定义 State 之前,先做灵魂三问。先问自己三个关键问题。如果满足以下任何一条,它就绝对不是 State

  1. 随时间推移保持不变? (如静态配置) -> 不是 State。
  2. 通过 props 从父级传入? (如外部注入的数据) -> 不是 State。
  3. 能通过已有 State 或 props 计算得出? (如根据商品列表计算出的库存总量) -> 坚决不能作为 State。

这些可通过计算得出的数据被称为 Derived Data(派生数据)。正确的做法是在渲染期间动态计算它们,或使用 useMemo 进行性能优化,而不是将其塞入 useState 中徒增同步烦恼。

一份合格的状态必须:最小(剔除可推导字段)且完整(下游 UI 能基于此状态集合进行确定性渲染)。

4.2 敲定 State 的安放位置

小提示:防范状态爆炸与泄漏

  • 单一真实数据源:同一业务实体在组件树中只能存在一份状态副本。如果祖先节点已有,就通过 props 传递,严禁在不同组件内重复 useState
  • 无泄漏下沉:把状态隔离在局部子树时,必须显式定义读写边界——仅对真正需要的子孙暴露接口。禁止在模块顶层声明可变状态,防止状态隐式穿透组件边界。

确定了“是什么”之后,更关键的是“放在哪”。State 的安置需要在状态提升(Lifting State Up)状态下沉(Colocating State)之间寻找动态平衡:

  • 状态提升(Lifting State Up):若多个兄弟组件需要共享同一状态,毫不犹豫地将其提升至它们最近的公共父节点。
  • 状态下沉(Colocating State):若状态仅在特定子树内部流转,应通过局部 Context 或轻量级状态库(Zustand / Jotai)将其隔离,避免污染全局。

架构目标是绘制出一张清晰的数据流拓扑图:状态变更只沿单向轨道流动,出现 Bug 时,可以像排查电路图一样用万用表逐点测量。

4. 建立反向数据流:让回调成为刚性契约

React 的数据流天然是自顶向下的(Top-Down)。这种单向流动牺牲了双向绑定的“便捷性”,换来的是数据流转的绝对清晰与可预测性

当底层展示组件需要向上级反馈用户行为时,我们需要设计反向数据流,其本质是将“UI 事件”转化为严谨的“回调契约”

  1. 父组件通过 props 向子组件下发契约:onXxx: (data: T) => void
  2. 子组件在适当时机触发契约,但不关心父组件如何处理,借此维持自身的纯粹与解耦。
  3. 父组件在回调中执行 setState,触发自顶向下的重新渲染,完成闭环。

这种 事件 -> 回调 -> 状态突变 -> 重渲染 的循环,构成了 React 响应式架构的最小内核。面对跨层级通信时,可以引入 Context 或状态管理工具来收敛"回调地狱",但单向数据流的铁律绝不能被破坏

5. 规范驱动开发(SDD):从执行者转变为立法者

随着前四个阶段的稳步推进,基础架构已然确立,应用项目也进入了更深层次的开发迭代阶段。此时,如何高效地解决"怎么写"的问题?这正是 AI 协作编程大显身手的时刻。

规范驱动开发(Specification-Driven Development,SDD)是一种比 Vibe Coding 更为可靠的人机协作实践模式:人类负责制定规范,AI 负责实现代码。这种分工让开发者从繁琐的编码劳动中解放出来,专注于真正创造价值的方案选择与设计决策。

5.1 SDD 模式的核心流程与实践要点

SDD 模式遵循一个五步闭环:规划阶段 → 生成规范 → 人工 Review → 自动化开发 → 工程验证

阶段描述
规划阶段让 AI 分析业务场景,输出设计文档。这一阶段的核心是明确"做什么"——包括模块边界、数据结构、接口签名、约束条件等。
生成规范基于规划结果,让 AI 生成可指导编程的实现规范(Specification)。规范是一份可执行的契约,包含类型定义、函数签名、测试用例、边界条件等。规范的质量直接决定了代码的质量
人工 Review开发者审核规范的合理性。这是人类决策的关键环节——确保设计符合架构原则、无冗余无泄漏、命名语义清晰、数据流方向明确。Review 通过后,规范成为 AI 实现的唯一依据。
自动化开发确认规范后,让 AI 基于规范实现完整的功能模块。要求 AI 遵循 TDD 模式——先编写测试用例,再实现逻辑,确保行为的可预测性。每次开发应聚焦于一个完整、恰当粒度的功能或独立模块,避免碎片化。
工程验证配置项目的 lint、类型检查与测试套件,由 AI 自动运行验证,形成质量闭环。若发现问题,应优先引导 AI 自行修正,而非手动干预。

SDD 模式的实践要点可归纳为:

  • 规范先行,代码后置:永远不要让 AI 在没有规范的情况下直接写代码。模糊的需求描述只会让 AI 制造技术债务。一份清晰的规范,能让 AI 产出可维护的代码。

  • 恰当粒度,完整交付:每次让 AI 开发一个完整的功能模块,而非零散的代码片段。完整的模块有清晰的边界、完整的测试、可独立验证的行为。这种粒度既能保证开发效率,又能确保代码质量。

  • TDD 内嵌,测试驱动:在规范中明确要求 AI 先写测试、再写实现。测试用例是规范的具象化表达,也是验证代码正确性的唯一标准。

  • 引导修正,避免手动修补:当代码未通过验证时,优先引导 AI 自行修正,而非直接手动修改。手动修补会干扰 AI 对项目上下文的理解,导致后续生成的代码一致性下降。

  • 工程闭环,持续迭代:lint、类型检查、测试套件是质量的三道防线。每次开发完成后必须运行完整验证,确保代码符合项目规范。验证通过后再进入下一个模块的开发。

5.2 SDD 模式的适用场景

SDD 模式适用于多数应用的功能迭代开发阶段。在前端领域,它与 React 的声明式范式尤为契合,特别适合以下场景:

  • 状态管理模块:状态是应用的核心骨架,需要严格的类型约束与变更追踪。SDD 能确保状态设计遵循 SSOT 原则,杜绝冗余与泄漏。

  • 交互逻辑开发:反向数据流涉及组件间的通信契约,是典型的"接口语义推敲"场景。SDD 能确保回调命名语义清晰、数据流方向明确。

  • 独立组件开发:针对功能内聚、可复用的独立组件(如表单控件、数据卡片、模态框等),需先明确其 Props 契约、内部状态边界及副作用生命周期,再交由 AI 实现具体渲染逻辑与交互细节。

  • 基础设施代码:Custom Hooks、工具函数、类型定义等基础设施代码,适合用 SDD 模式批量生成,确保接口一致性。

5.3 为什么 React 与 SDD 天生一对?

React 的声明式(Declarative)特性意味着我们只需描述 State → UI 的映射关系——给定特定的状态输入,界面应当呈现何种输出,完全由开发者声明式地定义,而非通过命令式地操作 DOM 来达成。

如果说 SDD(规格驱动开发)是人机协作的一套"宪法",那么 React 就是完美的"执行机构"。两者的天作之合并非偶然,而是源于底层架构范式的深度契合。React 所倡导的"描述即实现"的声明式编程范式,本质上就是一种显式契约(Props Contract),能够有效压缩 AI 的"幻觉空间"。

当我们在 Spec 中定义好 interface Props 时,实际上是为 AI 划定了一个认知边界。AI 无需费力猜测上下文,只需在 Props 的约束范围内寻找局部最优解。这种高度的封装性从物理层面隔绝了 AI 产生"幻觉"的可能,确保生成的组件是高内聚、低耦合的自治单元。

这与 SDD 的思维高度一致:开发者只需定义"映射规格"(即状态到 UI 的转换规则、组件的 Props 契约、数据的流动路径),而具体的实现细节——如何高效地 diff 虚拟 DOM、如何批量处理状态更新、如何优化重渲染性能——完全交由 AI 填充。在 SDD 模式下,人类聚焦于"做什么"(What)和"为什么"(Why),AI 负责"怎么做"(How)。这正是声明式编程与规范驱动开发在哲学层面的深度契合。

6.结语:工程师的不可替代性

当我们回望 React 设计哲学的四个核心步骤——组件划分、静态基线、状态定位、数据流闭环,会发现它们共同指向一个本质命题:如何在复杂性中建立秩序

',55)),o("p",null,[l(r,{type:"info"},{default:a(()=>[...t[4]||(t[4]=[e("组件化是对 UI 复杂性的分解,静态版本是对渲染行为的锚定,最小状态是对数据冗余的剔除,单向数据流是对变更轨迹的约束。这些设计原则并非 React 独有,而是软件工程几十年沉淀下来的智慧结晶——单一职责、关注点分离、显式优于隐式、数据流的可追溯性",-1)])]),_:1}),t[5]||(t[5]=e("。",-1))]),l(r,{type:"warning",bold:""},{default:a(()=>[...t[6]||(t[6]=[e("AI 时代的到来,并未改变这些原则的内核,反而让它们的价值更加凸显",-1)])]),_:1}),t[14]||(t[14]=e("。当 AI 能够以惊人的速度生成代码时,",-1)),t[15]||(t[15]=o("strong",null,'"写什么"的决策权比"怎么写"的执行力更为稀缺',-1)),t[16]||(t[16]=e("。一个清晰的设计规范,能让 AI 产出可维护的代码;而一个模糊的需求描述,只会让 AI 制造更多技术债务。",-1)),t[17]||(t[17]=o("p",null,[e("规范驱动开发(SDD)的本质是"),o("strong",null,"将架构思维外化为可执行的契约"),e('。开发者不再是代码的"搬运工",而是规范的"立法者"。我们定义组件边界、敲定状态拓扑、设计回调契约——AI 则在我们设定的框架内高效填充实现细节。这种分工,让开发者从繁琐的编码劳动中解放出来,将精力集中于真正创造价值的架构决策。')],-1)),o("p",null,[t[8]||(t[8]=e("最后,请记住:",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[7]||(t[7]=[e("工具会迭代,技术会过时,但对复杂性的驾驭能力永远是工程师的核心竞争力",-1)])]),_:1}),t[9]||(t[9]=e('。React 的 API 可能会在未来被新的框架取代,但"如何在复杂性中建立秩序"这一命题,将伴随软件工程的始终。愿你在这场技术演进中,始终站在架构设计的高地,用清晰的思维驾驭强大的工具,构建出经得起时间考验的软件系统。',-1))])]))}});export{I as __pageData,h as default}; diff --git a/assets/fullstack_react-design-philosophy-ai-augmented.md.nIC-WImG.lean.js b/assets/fullstack_react-design-philosophy-ai-augmented.md.B47j5XxZ.lean.js similarity index 97% rename from assets/fullstack_react-design-philosophy-ai-augmented.md.nIC-WImG.lean.js rename to assets/fullstack_react-design-philosophy-ai-augmented.md.B47j5XxZ.lean.js index da80693..ed9d623 100644 --- a/assets/fullstack_react-design-philosophy-ai-augmented.md.nIC-WImG.lean.js +++ b/assets/fullstack_react-design-philosophy-ai-augmented.md.B47j5XxZ.lean.js @@ -1 +1 @@ -import{H as r}from"./chunks/HighLightText.pXHFEzDb.js";import{c as s,o as n,a as o,b as l,d as i,e,w as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const I=JSON.parse('{"title":"React 设计哲学:AI 协作时代的组件化开发实践指南","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","frontmatter":{"date":"2026-02-10T23:33:19.000Z","title":"React 设计哲学:AI 协作时代的组件化开发实践指南","tldr":"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","tags":["tutorial","react","component-design","state-management","ai-augmented","specification-driven"],"permalink":"/fullstack/react-design-philosophy-ai-augmented","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/react-design-philosophy-ai-augmented.md","filePath":"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md"}'),g={name:"fullstack/react-design-philosophy-ai-augmented.md"},h=Object.assign(g,{setup(d){return(p,t)=>(n(),s("div",null,[t[10]||(t[10]=o("h1",{id:"react-设计哲学-ai-协作时代的组件化开发实践指南",tabindex:"-1"},[e("React 设计哲学:AI 协作时代的组件化开发实践指南 "),o("a",{class:"header-anchor",href:"#react-设计哲学-ai-协作时代的组件化开发实践指南","aria-label":"Permalink to “React 设计哲学:AI 协作时代的组件化开发实践指南”"},"​")],-1)),t[11]||(t[11]=o("h2",{id:"_1-引言",tabindex:"-1"},[e("1. 引言 "),o("a",{class:"header-anchor",href:"#_1-引言","aria-label":"Permalink to “1. 引言”"},"​")],-1)),o("p",null,[t[1]||(t[1]=e("在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[0]||(t[0]=[e("AI 提升的是 30% 编码阶段的执行力,而非取代 70% 的架构裁决",-1)])]),_:1}),t[2]||(t[2]=e("。 高质量 React 应用的诞生,依然始于人类心智对数据流、副作用边界与可组合性的透彻推演。",-1))]),t[12]||(t[12]=o("p",null,'然而,真正驾驭 React 并非易事。许多团队在项目初期享受着组件化带来的快感,却在业务膨胀后陷入"组件地狱"——深嵌套的 prop drilling、失控的状态蔓延、难以追踪的副作用,让代码库逐渐腐化。问题的根源往往不在于 React 本身,而在于我们是否真正理解其背后的设计哲学。',-1)),l(r,{bold:""},{default:a(()=>[...t[3]||(t[3]=[e("React 的精髓在于以组件化为核心,将复杂的 UI 拆解为独立、可复用的自治单元,让数据沿着从输入(props)到输出(UI 元素)的轨迹形成清晰、可控的闭环",-1)])]),_:1}),t[13]||(t[13]=i("",55)),o("p",null,[l(r,{type:"info"},{default:a(()=>[...t[4]||(t[4]=[e("组件化是对 UI 复杂性的分解,静态版本是对渲染行为的锚定,最小状态是对数据冗余的剔除,单向数据流是对变更轨迹的约束。这些设计原则并非 React 独有,而是软件工程几十年沉淀下来的智慧结晶——单一职责、关注点分离、显式优于隐式、数据流的可追溯性",-1)])]),_:1}),t[5]||(t[5]=e("。",-1))]),l(r,{type:"warning",bold:""},{default:a(()=>[...t[6]||(t[6]=[e("AI 时代的到来,并未改变这些原则的内核,反而让它们的价值更加凸显",-1)])]),_:1}),t[14]||(t[14]=e("。当 AI 能够以惊人的速度生成代码时,",-1)),t[15]||(t[15]=o("strong",null,'"写什么"的决策权比"怎么写"的执行力更为稀缺',-1)),t[16]||(t[16]=e("。一个清晰的设计规范,能让 AI 产出可维护的代码;而一个模糊的需求描述,只会让 AI 制造更多技术债务。",-1)),t[17]||(t[17]=o("p",null,[e("规范驱动开发(SDD)的本质是"),o("strong",null,"将架构思维外化为可执行的契约"),e('。开发者不再是代码的"搬运工",而是规范的"立法者"。我们定义组件边界、敲定状态拓扑、设计回调契约——AI 则在我们设定的框架内高效填充实现细节。这种分工,让开发者从繁琐的编码劳动中解放出来,将精力集中于真正创造价值的架构决策。')],-1)),o("p",null,[t[8]||(t[8]=e("最后,请记住:",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[7]||(t[7]=[e("工具会迭代,技术会过时,但对复杂性的驾驭能力永远是工程师的核心竞争力",-1)])]),_:1}),t[9]||(t[9]=e('。React 的 API 可能会在未来被新的框架取代,但"如何在复杂性中建立秩序"这一命题,将伴随软件工程的始终。愿你在这场技术演进中,始终站在架构设计的高地,用清晰的思维驾驭强大的工具,构建出经得起时间考验的软件系统。',-1))])]))}});export{I as __pageData,h as default}; +import{H as r}from"./chunks/HighLightText.DNC3BKyb.js";import{c as s,o as n,a as o,b as l,d as i,e,w as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const I=JSON.parse('{"title":"React 设计哲学:AI 协作时代的组件化开发实践指南","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","frontmatter":{"date":"2026-02-10T23:33:19.000Z","title":"React 设计哲学:AI 协作时代的组件化开发实践指南","tldr":"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。","description":"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。","tags":["tutorial","react","component-design","state-management","ai-augmented","specification-driven"],"permalink":"/fullstack/react-design-philosophy-ai-augmented","categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/react-design-philosophy-ai-augmented.md","filePath":"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md"}'),g={name:"fullstack/react-design-philosophy-ai-augmented.md"},h=Object.assign(g,{setup(d){return(p,t)=>(n(),s("div",null,[t[10]||(t[10]=o("h1",{id:"react-设计哲学-ai-协作时代的组件化开发实践指南",tabindex:"-1"},[e("React 设计哲学:AI 协作时代的组件化开发实践指南 "),o("a",{class:"header-anchor",href:"#react-设计哲学-ai-协作时代的组件化开发实践指南","aria-label":"Permalink to “React 设计哲学:AI 协作时代的组件化开发实践指南”"},"​")],-1)),t[11]||(t[11]=o("h2",{id:"_1-引言",tabindex:"-1"},[e("1. 引言 "),o("a",{class:"header-anchor",href:"#_1-引言","aria-label":"Permalink to “1. 引言”"},"​")],-1)),o("p",null,[t[1]||(t[1]=e("在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[0]||(t[0]=[e("AI 提升的是 30% 编码阶段的执行力,而非取代 70% 的架构裁决",-1)])]),_:1}),t[2]||(t[2]=e("。 高质量 React 应用的诞生,依然始于人类心智对数据流、副作用边界与可组合性的透彻推演。",-1))]),t[12]||(t[12]=o("p",null,'然而,真正驾驭 React 并非易事。许多团队在项目初期享受着组件化带来的快感,却在业务膨胀后陷入"组件地狱"——深嵌套的 prop drilling、失控的状态蔓延、难以追踪的副作用,让代码库逐渐腐化。问题的根源往往不在于 React 本身,而在于我们是否真正理解其背后的设计哲学。',-1)),l(r,{bold:""},{default:a(()=>[...t[3]||(t[3]=[e("React 的精髓在于以组件化为核心,将复杂的 UI 拆解为独立、可复用的自治单元,让数据沿着从输入(props)到输出(UI 元素)的轨迹形成清晰、可控的闭环",-1)])]),_:1}),t[13]||(t[13]=i("",55)),o("p",null,[l(r,{type:"info"},{default:a(()=>[...t[4]||(t[4]=[e("组件化是对 UI 复杂性的分解,静态版本是对渲染行为的锚定,最小状态是对数据冗余的剔除,单向数据流是对变更轨迹的约束。这些设计原则并非 React 独有,而是软件工程几十年沉淀下来的智慧结晶——单一职责、关注点分离、显式优于隐式、数据流的可追溯性",-1)])]),_:1}),t[5]||(t[5]=e("。",-1))]),l(r,{type:"warning",bold:""},{default:a(()=>[...t[6]||(t[6]=[e("AI 时代的到来,并未改变这些原则的内核,反而让它们的价值更加凸显",-1)])]),_:1}),t[14]||(t[14]=e("。当 AI 能够以惊人的速度生成代码时,",-1)),t[15]||(t[15]=o("strong",null,'"写什么"的决策权比"怎么写"的执行力更为稀缺',-1)),t[16]||(t[16]=e("。一个清晰的设计规范,能让 AI 产出可维护的代码;而一个模糊的需求描述,只会让 AI 制造更多技术债务。",-1)),t[17]||(t[17]=o("p",null,[e("规范驱动开发(SDD)的本质是"),o("strong",null,"将架构思维外化为可执行的契约"),e('。开发者不再是代码的"搬运工",而是规范的"立法者"。我们定义组件边界、敲定状态拓扑、设计回调契约——AI 则在我们设定的框架内高效填充实现细节。这种分工,让开发者从繁琐的编码劳动中解放出来,将精力集中于真正创造价值的架构决策。')],-1)),o("p",null,[t[8]||(t[8]=e("最后,请记住:",-1)),l(r,{type:"note",bold:""},{default:a(()=>[...t[7]||(t[7]=[e("工具会迭代,技术会过时,但对复杂性的驾驭能力永远是工程师的核心竞争力",-1)])]),_:1}),t[9]||(t[9]=e('。React 的 API 可能会在未来被新的框架取代,但"如何在复杂性中建立秩序"这一命题,将伴随软件工程的始终。愿你在这场技术演进中,始终站在架构设计的高地,用清晰的思维驾驭强大的工具,构建出经得起时间考验的软件系统。',-1))])]))}});export{I as __pageData,h as default}; diff --git a/assets/fullstack_server-state-management.md.CKwBMh6y.js b/assets/fullstack_server-state-management.md.BbD9tD6W.js similarity index 99% rename from assets/fullstack_server-state-management.md.CKwBMh6y.js rename to assets/fullstack_server-state-management.md.BbD9tD6W.js index b9418e7..66598cd 100644 --- a/assets/fullstack_server-state-management.md.CKwBMh6y.js +++ b/assets/fullstack_server-state-management.md.BbD9tD6W.js @@ -1,4 +1,4 @@ -import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","frontmatter":{"date":"2025-11-15T09:20:23.000Z","title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","aliases":["SWR","TanStack Query","React","服务端状态","乐观更新","工程化"],"tldr":"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","permalink":"/fullstack/server-state-management","tags":["SWR","TanStack Query","前端工程"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/server-state-management.md","filePath":"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md"}'),p={name:"fullstack/server-state-management.md"};function e(t,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈

摘要总结: 本文聚焦 UI 状态与服务端状态的管理边界,对比 SWR(基于 stale-while-revalidate 协议的轻量方案)与 TanStack Query(精密异步状态机)两者的核心机制差异,通过缓存策略、乐观更新、依赖查询等实战代码场景展开论述,最终给出以项目复杂度为维度的选型结论与决策框架。

1. 引言

在现代前端工程中,状态可严格区分为 UI 状态(UI State)服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 useStateuseEffect 等 Hooks,或 zustandjotai 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。

在传统的数据获取流程中,我们一般使用 fetchaxios 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新。

TanStack QuerySWR 等库的出现,为数据获取提供了更加简洁和高效的解决方案。

1. SWR

1.1 简介与核心流程说明

SWR is a minimal API with built-in caching, revalidation, and request deduplication. It keeps your UI fast, consistent, and always up to date — with a single React hook.

SWR 是一个基于 React Hooks 的轻量级库,它的 API 简单易用,同时提供了强大的功能。它的设计目标是简化数据获取和缓存的过程。它的核心思想是“ stale-while-revalidate ”,即先返回缓存数据(stale),同时发送请求去更新缓存(revalidate),核心运作流也非常简洁:

  • Stale:首先从本地缓存中返回数据,实现快速响应,无白屏。
  • Fetch:在后台发送 Fetch 请求获取最新数据。
  • Revalidate:拿到最新数据后,对比缓存,若有变化则触发 React 重新渲染并更新缓存。

这种机制彻底改变了传统 useEffect + setState 带来的“加载中 -> 渲染”的阻塞式体验,让应用在感官上具有“实时性”。

简单示例如下:

JSX
import useSWR from 'swr';
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","frontmatter":{"date":"2025-11-15T09:20:23.000Z","title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","aliases":["SWR","TanStack Query","React","服务端状态","乐观更新","工程化"],"tldr":"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","permalink":"/fullstack/server-state-management","tags":["SWR","TanStack Query","前端工程"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/server-state-management.md","filePath":"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md"}'),p={name:"fullstack/server-state-management.md"};function e(t,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈

摘要总结: 本文聚焦 UI 状态与服务端状态的管理边界,对比 SWR(基于 stale-while-revalidate 协议的轻量方案)与 TanStack Query(精密异步状态机)两者的核心机制差异,通过缓存策略、乐观更新、依赖查询等实战代码场景展开论述,最终给出以项目复杂度为维度的选型结论与决策框架。

1. 引言

在现代前端工程中,状态可严格区分为 UI 状态(UI State)服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 useStateuseEffect 等 Hooks,或 zustandjotai 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。

在传统的数据获取流程中,我们一般使用 fetchaxios 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新。

TanStack QuerySWR 等库的出现,为数据获取提供了更加简洁和高效的解决方案。

1. SWR

1.1 简介与核心流程说明

SWR is a minimal API with built-in caching, revalidation, and request deduplication. It keeps your UI fast, consistent, and always up to date — with a single React hook.

SWR 是一个基于 React Hooks 的轻量级库,它的 API 简单易用,同时提供了强大的功能。它的设计目标是简化数据获取和缓存的过程。它的核心思想是“ stale-while-revalidate ”,即先返回缓存数据(stale),同时发送请求去更新缓存(revalidate),核心运作流也非常简洁:

  • Stale:首先从本地缓存中返回数据,实现快速响应,无白屏。
  • Fetch:在后台发送 Fetch 请求获取最新数据。
  • Revalidate:拿到最新数据后,对比缓存,若有变化则触发 React 重新渲染并更新缓存。

这种机制彻底改变了传统 useEffect + setState 带来的“加载中 -> 渲染”的阻塞式体验,让应用在感官上具有“实时性”。

简单示例如下:

JSX
import useSWR from 'swr';
 import React from 'react';
 
 // 自定义 fetcher 函数,用于发送 HTTP 请求并获取数据
diff --git a/assets/fullstack_server-state-management.md.CKwBMh6y.lean.js b/assets/fullstack_server-state-management.md.BbD9tD6W.lean.js
similarity index 96%
rename from assets/fullstack_server-state-management.md.CKwBMh6y.lean.js
rename to assets/fullstack_server-state-management.md.BbD9tD6W.lean.js
index 692a19d..fc6becc 100644
--- a/assets/fullstack_server-state-management.md.CKwBMh6y.lean.js
+++ b/assets/fullstack_server-state-management.md.BbD9tD6W.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","frontmatter":{"date":"2025-11-15T09:20:23.000Z","title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","aliases":["SWR","TanStack Query","React","服务端状态","乐观更新","工程化"],"tldr":"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","permalink":"/fullstack/server-state-management","tags":["SWR","TanStack Query","前端工程"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/server-state-management.md","filePath":"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md"}'),p={name:"fullstack/server-state-management.md"};function e(t,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",74)])])}const y=i(p,[["render",e]]);export{g as __pageData,y as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","frontmatter":{"date":"2025-11-15T09:20:23.000Z","title":"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈","aliases":["SWR","TanStack Query","React","服务端状态","乐观更新","工程化"],"tldr":"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。","description":"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。","permalink":"/fullstack/server-state-management","tags":["SWR","TanStack Query","前端工程"],"categories":["全栈","前端工程"]},"headers":[],"relativePath":"fullstack/server-state-management.md","filePath":"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md"}'),p={name:"fullstack/server-state-management.md"};function e(t,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",74)])])}const y=i(p,[["render",e]]);export{g as __pageData,y as default};
diff --git a/assets/fullstack_typescript-compilation-debugging-guide.md.B3OD2eiY.js b/assets/fullstack_typescript-compilation-debugging-guide.md.g10WDisT.js
similarity index 99%
rename from assets/fullstack_typescript-compilation-debugging-guide.md.B3OD2eiY.js
rename to assets/fullstack_typescript-compilation-debugging-guide.md.g10WDisT.js
index efed339..59f28cb 100644
--- a/assets/fullstack_typescript-compilation-debugging-guide.md.B3OD2eiY.js
+++ b/assets/fullstack_typescript-compilation-debugging-guide.md.g10WDisT.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"TypeScript 编译与调试完全指南","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","frontmatter":{"date":"2025-08-12T22:47:47.000Z","title":"TypeScript 编译与调试完全指南","tldr":"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","permalink":"/fullstack/typescript-compilation-debugging-guide","tags":["tutorial","typescript","compilation","tooling","eslint","jest"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-compilation-debugging-guide.md","filePath":"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md"}'),p={name:"fullstack/typescript-compilation-debugging-guide.md"};function t(e,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

TypeScript 编译与调试完全指南

摘要总结: TypeScript 作为 JavaScript 的静态类型超集,不仅提供了类型安全,还构建了完善的编译工具链和调试能力。本文系统梳理 TypeScript 项目的编译与调试全流程,涵盖 TSC 编译器使用、tsconfig.json 各场景配置(单体项目、Monorepo 多包项目)、source map 浏览器调试、ESLint 静态检查与 Jest 单元测试等工程实践。通过对编译选项(strict、module、moduleResolution、incremental 等)的详细解读,以及 React+Vite、Node.js、npm 库等典型项目配置示例,帮助读者建立对 TypeScript 编译体系的完整认知。掌握这些核心技能,能够帮助开发者更高效地构建和维护高质量的 TypeScript 应用。

编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。

本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。

1. TypeScript 编译配置与 tsconfig.json

TSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(.ts.tsx)转换为 JavaScript 代码(.js.jsx)。

虽然你可以直接在终端运行 tsc 命令来编译单个文件,但在实际项目中,我们通常需要处理大量文件。为了提高编译命令的复用性和可维护性,TypeScript 提供了配置文件的方式来管理编译设置:

  • 配置文件:使用 tsconfig.json 文件集中管理待编译文件路径、编译选项和输出路径等。你可以通过 tsc --init 命令快速生成一个默认配置文件,然后根据项目需求进行调整。
  • 配置位置:通常将 tsconfig.json 放在项目根目录下。对于 Monorepo 项目结构,每个子项目可以拥有独立的配置文件,实现更精细的编译控制。

1.1 tsconfig.json 核心配置梳理

以下是一个生产环境常用的 tsconfig.json 配置示例,包含了 TypeScript 核心编译选项的详细注释说明:

json
{
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"TypeScript 编译与调试完全指南","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","frontmatter":{"date":"2025-08-12T22:47:47.000Z","title":"TypeScript 编译与调试完全指南","tldr":"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","permalink":"/fullstack/typescript-compilation-debugging-guide","tags":["tutorial","typescript","compilation","tooling","eslint","jest"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-compilation-debugging-guide.md","filePath":"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md"}'),p={name:"fullstack/typescript-compilation-debugging-guide.md"};function t(e,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

TypeScript 编译与调试完全指南

摘要总结: TypeScript 作为 JavaScript 的静态类型超集,不仅提供了类型安全,还构建了完善的编译工具链和调试能力。本文系统梳理 TypeScript 项目的编译与调试全流程,涵盖 TSC 编译器使用、tsconfig.json 各场景配置(单体项目、Monorepo 多包项目)、source map 浏览器调试、ESLint 静态检查与 Jest 单元测试等工程实践。通过对编译选项(strict、module、moduleResolution、incremental 等)的详细解读,以及 React+Vite、Node.js、npm 库等典型项目配置示例,帮助读者建立对 TypeScript 编译体系的完整认知。掌握这些核心技能,能够帮助开发者更高效地构建和维护高质量的 TypeScript 应用。

编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。

本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。

1. TypeScript 编译配置与 tsconfig.json

TSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(.ts.tsx)转换为 JavaScript 代码(.js.jsx)。

虽然你可以直接在终端运行 tsc 命令来编译单个文件,但在实际项目中,我们通常需要处理大量文件。为了提高编译命令的复用性和可维护性,TypeScript 提供了配置文件的方式来管理编译设置:

  • 配置文件:使用 tsconfig.json 文件集中管理待编译文件路径、编译选项和输出路径等。你可以通过 tsc --init 命令快速生成一个默认配置文件,然后根据项目需求进行调整。
  • 配置位置:通常将 tsconfig.json 放在项目根目录下。对于 Monorepo 项目结构,每个子项目可以拥有独立的配置文件,实现更精细的编译控制。

1.1 tsconfig.json 核心配置梳理

以下是一个生产环境常用的 tsconfig.json 配置示例,包含了 TypeScript 核心编译选项的详细注释说明:

json
{
   /*
    * ============================================
    * 编译信息配置
diff --git a/assets/fullstack_typescript-compilation-debugging-guide.md.B3OD2eiY.lean.js b/assets/fullstack_typescript-compilation-debugging-guide.md.g10WDisT.lean.js
similarity index 95%
rename from assets/fullstack_typescript-compilation-debugging-guide.md.B3OD2eiY.lean.js
rename to assets/fullstack_typescript-compilation-debugging-guide.md.g10WDisT.lean.js
index 95c2d92..8a83de1 100644
--- a/assets/fullstack_typescript-compilation-debugging-guide.md.B3OD2eiY.lean.js
+++ b/assets/fullstack_typescript-compilation-debugging-guide.md.g10WDisT.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"TypeScript 编译与调试完全指南","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","frontmatter":{"date":"2025-08-12T22:47:47.000Z","title":"TypeScript 编译与调试完全指南","tldr":"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","permalink":"/fullstack/typescript-compilation-debugging-guide","tags":["tutorial","typescript","compilation","tooling","eslint","jest"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-compilation-debugging-guide.md","filePath":"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md"}'),p={name:"fullstack/typescript-compilation-debugging-guide.md"};function t(e,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",99)])])}const g=i(p,[["render",t]]);export{c as __pageData,g as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"TypeScript 编译与调试完全指南","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","frontmatter":{"date":"2025-08-12T22:47:47.000Z","title":"TypeScript 编译与调试完全指南","tldr":"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。","description":"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。","permalink":"/fullstack/typescript-compilation-debugging-guide","tags":["tutorial","typescript","compilation","tooling","eslint","jest"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-compilation-debugging-guide.md","filePath":"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md"}'),p={name:"fullstack/typescript-compilation-debugging-guide.md"};function t(e,s,h,k,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",99)])])}const g=i(p,[["render",t]]);export{c as __pageData,g as default};
diff --git a/assets/fullstack_typescript-generic-types.md.k0YxICZf.js b/assets/fullstack_typescript-generic-types.md.AQyoKeOl.js
similarity index 99%
rename from assets/fullstack_typescript-generic-types.md.k0YxICZf.js
rename to assets/fullstack_typescript-generic-types.md.AQyoKeOl.js
index 7fadaba..75fd6e5 100644
--- a/assets/fullstack_typescript-generic-types.md.k0YxICZf.js
+++ b/assets/fullstack_typescript-generic-types.md.AQyoKeOl.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"聊一聊 TypeScript 中的泛型","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","frontmatter":{"date":"2025-08-20T22:51:27.000Z","title":"聊一聊 TypeScript 中的泛型","tldr":"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","permalink":"/fullstack/typescript-generic-types","tags":["tutorial","typescript","generics","type-system"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-generic-types.md","filePath":"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md"}'),p={name:"fullstack/typescript-generic-types.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

聊一聊 TypeScript 中的泛型

摘要总结: 泛型(Generics)是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。本文从泛型的基本概念出发,对比泛型与 any 类型的本质差异(类型安全、代码复用、类型推断、可读性),深入剖析类型参数化、类型检查、类型推断与类型擦除四方面工作原理。通过大量实战代码演示泛型函数、泛型接口、泛型类及泛型类型别名的高级应用,并系统讲解基本类型约束、接口约束、多重约束与 keyof 约束等高阶用法。泛型的学习路径本质上是从具体到抽象的思维训练,掌握泛型意味着掌握了 TypeScript 类型系统高阶能力的钥匙。

1. 泛型的基本概念和作用

1.1 核心定义

泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现"编写一次,复用多次"的效果。

1.2 泛型与 any 类型的对比

特性泛型any 类型
类型安全✅ 编译时进行类型检查❌ 完全失去类型检查
代码复用✅ 支持多种类型复用✅ 支持多种类型,但失去类型信息
类型推断✅ 编译器可推断具体类型❌ 无法推断具体类型
可读性✅ 明确类型意图❌ 隐藏类型信息

1.3 泛型的工作原理

理解泛型的工作原理,需要从四个方面来把握:

1、类型参数化

当我们定义一个泛型函数 function foo<T>(arg: T): T 时,T 就像是一个"位置的占位符"。在编写代码时,我们还不知道 T 具体是什么类型,但它已经具备了类型的语义——在参数位置、返回值位置,甚至是后续的变量声明中,T 都会被当作一个有效的类型来使用。

2、类型检查

TypeScript 编译器会对泛型代码进行严格的类型检查。例如,在函数体内对 T 类型的参数调用只有特定类型才有的方法时,编译器会报错。这种检查发生在编译阶段,而不是运行时,从而避免了许多潜在的 bug。

3、类型推断

当我们调用泛型函数时,TypeScript 会根据传入的参数自动推断 T 的具体类型。比如调用 identity(42),编译器自动推断 Tnumber。这一步是可选的,如果无法推断,我们也可以显式指定类型参数 identity<number>(42)

4、类型擦除

这是泛型的一个重要特性——泛型类型信息只存在于编译阶段。编译为 JavaScript 时,所有 <T> 相关的类型标注都会被擦除,只保留普通的类型注释或完全没有任何类型信息。例如 function identity<T>(arg: T): T 编译后会变成 function identity(arg) { return arg; },最终产物中不存在任何泛型的痕迹。

1.4 泛型的核心优势

泛型之所以重要,是因为它解决了 JavaScript 类型系统中的几个核心问题:

核心优势说明
代码复用性的质变在没有泛型的时代,如果我们想让一个函数同时支持 string 和 number 类型,通常需要编写两个独立函数,或者使用 any 类型牺牲类型安全。而泛型让我们编写一套代码,就能安全地处理多种类型。例如,一个 identity 函数既可以处理 number,也可以处理 string,甚至是自定义的对象类型。
类型安全是最大的保障使用 any 类型意味着彻底放弃类型检查,任何类型错误都要到运行时才能发现。而泛型在编译阶段就能捕获类型不匹配的问题,将 bug 消灭在摇篮里。这对于大型项目尤为重要,因为运行时类型错误往往难以定位和修复。
代码意图更加清晰any 类型像是一个"黑箱",开发者无法从类型声明中得知这个值应该是什么类型。而泛型 Array<T>Promise<T> 等声明方式,让代码自描述性更强,后续维护者能够快速理解数据的结构和流向。
面向未来的扩展性基于泛型设计的接口和类,不需要修改原有代码就能支持新的数据类型。比如我们定义了一个 Response<T> 接口,当业务需要新增一种数据类型时,只需要传入新的类型参数即可,而无需改动接口定义本身。
推动更好的设计泛型鼓励开发者从一开始就从通用的角度思考问题,设计出更具抽象性和复用性的组件。这种思考方式与面向对象设计模式中的"依赖倒置"、"开闭原则"等思想不谋而合。

1.5 泛型的应用场景

泛型在实际开发中的应用非常广泛,以下是几个最常见的场景:

应用场景说明
通用数据结构的实现数据结构往往是通用的——一个栈不应该只能存储 number,它应该能存储任意类型。泛型让我们能够定义如 Stack<T>Queue<T>LinkedList<T> 这样真正通用的数据结构,同时保持对内部元素类型的严格检查。
工具函数和类库开发日常开发中的工具函数,如深拷贝、JSON 序列化、数组处理等,都非常适合使用泛型。这类函数需要处理各种不同的数据类型,泛型能够在保持类型安全的同时,实现真正的复用。
API 响应数据的类型化与后端接口交互时,响应数据的结构往往是固定的,但具体的数据类型可能不同。通过泛型 ApiResponse<T>,我们可以为每个接口定义精确的返回类型,同时保持 API 请求逻辑的统一。
前端组件库开发在 React、Vue 等框架中,组件通常需要处理各种类型的 props 和 state。泛型组件如 Table<T>List<T> 等,能够在提供类型安全的同时,适应不同的业务数据模型。
通用接口和类的设计面向对象编程中,我们经常需要定义一些有通用约束的接口。比如定义一个 Repository<T> 接口,所有实体仓储都实现这个接口,但每个仓储操作的实体类型各不相同。泛型让这种设计成为可能。

2. 泛型代码示例

2.1 基础泛型函数

typescript
// 泛型标识函数:返回与输入相同类型的值
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"聊一聊 TypeScript 中的泛型","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","frontmatter":{"date":"2025-08-20T22:51:27.000Z","title":"聊一聊 TypeScript 中的泛型","tldr":"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","permalink":"/fullstack/typescript-generic-types","tags":["tutorial","typescript","generics","type-system"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-generic-types.md","filePath":"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md"}'),p={name:"fullstack/typescript-generic-types.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l(`

聊一聊 TypeScript 中的泛型

摘要总结: 泛型(Generics)是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。本文从泛型的基本概念出发,对比泛型与 any 类型的本质差异(类型安全、代码复用、类型推断、可读性),深入剖析类型参数化、类型检查、类型推断与类型擦除四方面工作原理。通过大量实战代码演示泛型函数、泛型接口、泛型类及泛型类型别名的高级应用,并系统讲解基本类型约束、接口约束、多重约束与 keyof 约束等高阶用法。泛型的学习路径本质上是从具体到抽象的思维训练,掌握泛型意味着掌握了 TypeScript 类型系统高阶能力的钥匙。

1. 泛型的基本概念和作用

1.1 核心定义

泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现"编写一次,复用多次"的效果。

1.2 泛型与 any 类型的对比

特性泛型any 类型
类型安全✅ 编译时进行类型检查❌ 完全失去类型检查
代码复用✅ 支持多种类型复用✅ 支持多种类型,但失去类型信息
类型推断✅ 编译器可推断具体类型❌ 无法推断具体类型
可读性✅ 明确类型意图❌ 隐藏类型信息

1.3 泛型的工作原理

理解泛型的工作原理,需要从四个方面来把握:

1、类型参数化

当我们定义一个泛型函数 function foo<T>(arg: T): T 时,T 就像是一个"位置的占位符"。在编写代码时,我们还不知道 T 具体是什么类型,但它已经具备了类型的语义——在参数位置、返回值位置,甚至是后续的变量声明中,T 都会被当作一个有效的类型来使用。

2、类型检查

TypeScript 编译器会对泛型代码进行严格的类型检查。例如,在函数体内对 T 类型的参数调用只有特定类型才有的方法时,编译器会报错。这种检查发生在编译阶段,而不是运行时,从而避免了许多潜在的 bug。

3、类型推断

当我们调用泛型函数时,TypeScript 会根据传入的参数自动推断 T 的具体类型。比如调用 identity(42),编译器自动推断 Tnumber。这一步是可选的,如果无法推断,我们也可以显式指定类型参数 identity<number>(42)

4、类型擦除

这是泛型的一个重要特性——泛型类型信息只存在于编译阶段。编译为 JavaScript 时,所有 <T> 相关的类型标注都会被擦除,只保留普通的类型注释或完全没有任何类型信息。例如 function identity<T>(arg: T): T 编译后会变成 function identity(arg) { return arg; },最终产物中不存在任何泛型的痕迹。

1.4 泛型的核心优势

泛型之所以重要,是因为它解决了 JavaScript 类型系统中的几个核心问题:

核心优势说明
代码复用性的质变在没有泛型的时代,如果我们想让一个函数同时支持 string 和 number 类型,通常需要编写两个独立函数,或者使用 any 类型牺牲类型安全。而泛型让我们编写一套代码,就能安全地处理多种类型。例如,一个 identity 函数既可以处理 number,也可以处理 string,甚至是自定义的对象类型。
类型安全是最大的保障使用 any 类型意味着彻底放弃类型检查,任何类型错误都要到运行时才能发现。而泛型在编译阶段就能捕获类型不匹配的问题,将 bug 消灭在摇篮里。这对于大型项目尤为重要,因为运行时类型错误往往难以定位和修复。
代码意图更加清晰any 类型像是一个"黑箱",开发者无法从类型声明中得知这个值应该是什么类型。而泛型 Array<T>Promise<T> 等声明方式,让代码自描述性更强,后续维护者能够快速理解数据的结构和流向。
面向未来的扩展性基于泛型设计的接口和类,不需要修改原有代码就能支持新的数据类型。比如我们定义了一个 Response<T> 接口,当业务需要新增一种数据类型时,只需要传入新的类型参数即可,而无需改动接口定义本身。
推动更好的设计泛型鼓励开发者从一开始就从通用的角度思考问题,设计出更具抽象性和复用性的组件。这种思考方式与面向对象设计模式中的"依赖倒置"、"开闭原则"等思想不谋而合。

1.5 泛型的应用场景

泛型在实际开发中的应用非常广泛,以下是几个最常见的场景:

应用场景说明
通用数据结构的实现数据结构往往是通用的——一个栈不应该只能存储 number,它应该能存储任意类型。泛型让我们能够定义如 Stack<T>Queue<T>LinkedList<T> 这样真正通用的数据结构,同时保持对内部元素类型的严格检查。
工具函数和类库开发日常开发中的工具函数,如深拷贝、JSON 序列化、数组处理等,都非常适合使用泛型。这类函数需要处理各种不同的数据类型,泛型能够在保持类型安全的同时,实现真正的复用。
API 响应数据的类型化与后端接口交互时,响应数据的结构往往是固定的,但具体的数据类型可能不同。通过泛型 ApiResponse<T>,我们可以为每个接口定义精确的返回类型,同时保持 API 请求逻辑的统一。
前端组件库开发在 React、Vue 等框架中,组件通常需要处理各种类型的 props 和 state。泛型组件如 Table<T>List<T> 等,能够在提供类型安全的同时,适应不同的业务数据模型。
通用接口和类的设计面向对象编程中,我们经常需要定义一些有通用约束的接口。比如定义一个 Repository<T> 接口,所有实体仓储都实现这个接口,但每个仓储操作的实体类型各不相同。泛型让这种设计成为可能。

2. 泛型代码示例

2.1 基础泛型函数

typescript
// 泛型标识函数:返回与输入相同类型的值
 // <T>:类型参数,代表任意类型
 // arg: T:参数类型为 T
 // : T:返回值类型为 T
diff --git a/assets/fullstack_typescript-generic-types.md.k0YxICZf.lean.js b/assets/fullstack_typescript-generic-types.md.AQyoKeOl.lean.js
similarity index 95%
rename from assets/fullstack_typescript-generic-types.md.k0YxICZf.lean.js
rename to assets/fullstack_typescript-generic-types.md.AQyoKeOl.lean.js
index 264645b..1748d19 100644
--- a/assets/fullstack_typescript-generic-types.md.k0YxICZf.lean.js
+++ b/assets/fullstack_typescript-generic-types.md.AQyoKeOl.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"聊一聊 TypeScript 中的泛型","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","frontmatter":{"date":"2025-08-20T22:51:27.000Z","title":"聊一聊 TypeScript 中的泛型","tldr":"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","permalink":"/fullstack/typescript-generic-types","tags":["tutorial","typescript","generics","type-system"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-generic-types.md","filePath":"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md"}'),p={name:"fullstack/typescript-generic-types.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",81)])])}const y=i(p,[["render",h]]);export{g as __pageData,y as default};
+import{_ as i,c as a,o as n,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"聊一聊 TypeScript 中的泛型","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","frontmatter":{"date":"2025-08-20T22:51:27.000Z","title":"聊一聊 TypeScript 中的泛型","tldr":"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。","description":"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。","permalink":"/fullstack/typescript-generic-types","tags":["tutorial","typescript","generics","type-system"],"categories":["全栈","全栈基础素养"]},"headers":[],"relativePath":"fullstack/typescript-generic-types.md","filePath":"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md"}'),p={name:"fullstack/typescript-generic-types.md"};function h(k,s,t,e,r,E){return n(),a("div",null,[...s[0]||(s[0]=[l("",81)])])}const y=i(p,[["render",h]]);export{g as __pageData,y as default};
diff --git a/assets/fullstack_typescript-module-programming-enhancement.md.C7m0wq6p.js b/assets/fullstack_typescript-module-programming-enhancement.md.B6VJ067B.js
similarity index 99%
rename from assets/fullstack_typescript-module-programming-enhancement.md.C7m0wq6p.js
rename to assets/fullstack_typescript-module-programming-enhancement.md.B6VJ067B.js
index 097d659..1d97fce 100644
--- a/assets/fullstack_typescript-module-programming-enhancement.md.C7m0wq6p.js
+++ b/assets/fullstack_typescript-module-programming-enhancement.md.B6VJ067B.js
@@ -1,4 +1,4 @@
-import{_ as i,c as a,o as n,d as p}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","frontmatter":{"date":"2024-05-16T21:27:36.000Z","title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","tldr":"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","permalink":"/fullstack/typescript-module-programming-enhancement","tags":["concept","全栈","typescript","tsconfig"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/typescript-module-programming-enhancement.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md"}'),l={name:"fullstack/typescript-module-programming-enhancement.md"};function t(h,s,e,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[p(`

从逻辑隔离到类型契约:TypeScript 对模块化编程的增强

摘要总结: TypeScript 将模块间的依赖关系从简单的代码引用提升为编译时类型契约。本文系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。

1. 引言

在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。

本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。

2. 类型导出与导入:极致的运行时优化

TypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性能优化的关键——类型导入在编译为 JS 后会被完全抹除,确保不会引入冗余的运行时负载。

示例代码

typescript
// types.ts - 类型导出
+import{_ as i,c as a,o as n,d as p}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","frontmatter":{"date":"2024-05-16T21:27:36.000Z","title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","tldr":"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","permalink":"/fullstack/typescript-module-programming-enhancement","tags":["concept","全栈","typescript","tsconfig"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/typescript-module-programming-enhancement.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md"}'),l={name:"fullstack/typescript-module-programming-enhancement.md"};function t(h,s,e,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[p(`

从逻辑隔离到类型契约:TypeScript 对模块化编程的增强

摘要总结: TypeScript 将模块间的依赖关系从简单的代码引用提升为编译时类型契约。本文系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。

1. 引言

在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。

本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。

2. 类型导出与导入:极致的运行时优化

TypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性能优化的关键——类型导入在编译为 JS 后会被完全抹除,确保不会引入冗余的运行时负载。

示例代码

typescript
// types.ts - 类型导出
 export interface User {
   id: string;
   name: string;
diff --git a/assets/fullstack_typescript-module-programming-enhancement.md.C7m0wq6p.lean.js b/assets/fullstack_typescript-module-programming-enhancement.md.B6VJ067B.lean.js
similarity index 95%
rename from assets/fullstack_typescript-module-programming-enhancement.md.C7m0wq6p.lean.js
rename to assets/fullstack_typescript-module-programming-enhancement.md.B6VJ067B.lean.js
index e2479a4..80e1008 100644
--- a/assets/fullstack_typescript-module-programming-enhancement.md.C7m0wq6p.lean.js
+++ b/assets/fullstack_typescript-module-programming-enhancement.md.B6VJ067B.lean.js
@@ -1 +1 @@
-import{_ as i,c as a,o as n,d as p}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","frontmatter":{"date":"2024-05-16T21:27:36.000Z","title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","tldr":"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","permalink":"/fullstack/typescript-module-programming-enhancement","tags":["concept","全栈","typescript","tsconfig"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/typescript-module-programming-enhancement.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md"}'),l={name:"fullstack/typescript-module-programming-enhancement.md"};function t(h,s,e,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[p("",40)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default};
+import{_ as i,c as a,o as n,d as p}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","frontmatter":{"date":"2024-05-16T21:27:36.000Z","title":"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强","tldr":"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。","description":"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。","permalink":"/fullstack/typescript-module-programming-enhancement","tags":["concept","全栈","typescript","tsconfig"],"categories":["全栈","全栈基础素养","模块化编程实践指南"]},"headers":[],"relativePath":"fullstack/typescript-module-programming-enhancement.md","filePath":"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md"}'),l={name:"fullstack/typescript-module-programming-enhancement.md"};function t(h,s,e,k,r,d){return n(),a("div",null,[...s[0]||(s[0]=[p("",40)])])}const y=i(l,[["render",t]]);export{g as __pageData,y as default};
diff --git a/assets/fullstack_union-types-vs-intersection-types.md.hM79y4nW.js b/assets/fullstack_union-types-vs-intersection-types.md.CeKTWuwd.js
similarity index 99%
rename from assets/fullstack_union-types-vs-intersection-types.md.hM79y4nW.js
rename to assets/fullstack_union-types-vs-intersection-types.md.CeKTWuwd.js
index fbe648e..cb21f81 100644
--- a/assets/fullstack_union-types-vs-intersection-types.md.hM79y4nW.js
+++ b/assets/fullstack_union-types-vs-intersection-types.md.CeKTWuwd.js
@@ -1,4 +1,4 @@
-import{K as k}from"./chunks/KeyTakeaway.DyBgCpiw.js";import{B as d}from"./chunks/Blockquote.acMDZFAD.js";import{f as g,c as n,g as e,o as p,a,t as l,_ as y,d as h,b as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";import{C as E}from"./chunks/ConceptPair.DYvaVmrQ.js";/* empty css                                                             *//* empty css                                                                          *//* empty css                                                                           */const c={key:0,class:"ba-root"},F={class:"ba-panel ba-panel--before"},m={class:"ba-header"},o={class:"ba-badge ba-badge--before"},b={key:0,class:"ba-title"},u={class:"ba-body"},A={key:0,class:"ba-code"},D=["src","alt"],C={key:2,class:"ba-text"},B={class:"ba-panel ba-panel--after"},f={class:"ba-header"},v={class:"ba-badge ba-badge--after"},q={key:0,class:"ba-title"},x={class:"ba-body"},_={key:0,class:"ba-code"},T=["src","alt"],w={key:2,class:"ba-text"},S=g({__name:"BeforeAfter",props:{before:{},after:{},beforeLabel:{},afterLabel:{}},setup(s){return(r,i)=>s.before&&s.after?(p(),n("div",c,[a("div",F,[a("div",m,[a("span",o,l(s.beforeLabel||"Before"),1),s.before.title?(p(),n("span",b,l(s.before.title),1)):e("",!0)]),a("div",u,[s.before.type==="code"?(p(),n("pre",A,[a("code",null,l(s.before.content),1)])):s.before.type==="image"?(p(),n("img",{key:1,src:s.before.content,alt:s.before.title||"Before",class:"ba-img"},null,8,D)):(p(),n("p",C,l(s.before.content),1))])]),i[0]||(i[0]=a("div",{class:"ba-arrow"},"→",-1)),a("div",B,[a("div",f,[a("span",v,l(s.afterLabel||"After"),1),s.after.title?(p(),n("span",q,l(s.after.title),1)):e("",!0)]),a("div",x,[s.after.type==="code"?(p(),n("pre",_,[a("code",null,l(s.after.content),1)])):s.after.type==="image"?(p(),n("img",{key:1,src:s.after.content,alt:s.after.title||"After",class:"ba-img"},null,8,T)):(p(),n("p",w,l(s.after.content),1))])])])):e("",!0)}}),P=y(S,[["__scopeId","data-v-8a40fafe"]]),K=JSON.parse('{"title":"深入理解 TypeScript 联合类型与交叉类型","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","frontmatter":{"date":"2026-04-15T09:16:06.000Z","title":"深入理解 TypeScript 联合类型与交叉类型","tldr":"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","tags":["concept","typescript","type-system","union-types","intersection-types"],"categories":["全栈","全栈基础素养"],"permalink":"/fullstack/union-types-vs-intersection-types"},"headers":[],"relativePath":"fullstack/union-types-vs-intersection-types.md","filePath":"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md"}'),U={name:"fullstack/union-types-vs-intersection-types.md"},W=Object.assign(U,{setup(s){return(r,i)=>(p(),n("div",null,[i[0]||(i[0]=h('

深入理解 TypeScript 联合类型与交叉类型

摘要: 以类型是值的集合这一核心心智模型为出发点,系统阐述了 TypeScript 联合类型与交叉类型的语法语义及深层设计原理。联合类型部分涵盖基础语法、可辨识联合模式、五种类型收窄方式、基于 never 的穷尽性检查、keyof 在联合类型上的行为及分布式条件类型的分发机制。交叉类型部分则解析了属性冲突的产生原因、函数类型交叉与重载签名的等价性,以及交叉类型与接口继承在时机、冲突处理和适用场景上的本质区别。进一步揭示了 keyof 在联合与交叉之间的对偶性、类型运算的分配律,以及与 never 和 unknown 的代数关系。最后以 Result/Either 模式、Branded Type、Mixin 组合及组件 Props 类型设计四个实战模式展示联合与交叉在工程中的应用。

1. 前置概念:类型即集合

理解联合类型和交叉类型的关键在于建立一个核心心智模型:类型是值的集合

这个看似简单的隐喻,实际上是我们理解一切复杂类型操作的起点。当我们说一个变量的类型是 string 时,不妨把它想象成「所有可能字符串值」这个无穷集合。而 TypeScript 的类型检查,本质上就是判断某个具体的值是否落在类型所对应的集合之中。

类型集合含义说明
string所有字符串值的集合无限集
number所有数字值的集合无限集
"a" | "b"仅含 "a""b" 的集合有限集,含 2 个元素
never空集不包含任何值
unknown全集包含所有可能的值

有了这个模型,两个运算符的含义就一目了然:

集合并集:

AB=ABA \\mid B \\;=\\; A \\cup B

集合交集:

A&B=ABA \\& B \\;=\\; A \\cap B

关键洞察

string | number 是所有字符串 + 所有数字的集合——值只要属于其中之一即可。 string & number 是既属于字符串又属于数字的值的集合——不存在这样的值,所以结果是 never(空集)。

这个「类型即集合」的视角将贯穿全文。下面我们分别深入联合类型与交叉类型,再从类型系统的高度审视二者的深层关系。

',13)),t(k,{variant:"summary",points:["类型是值的集合——联合类型 (|) 是并集,交叉类型 (&) 是交集","可辨识联合是 TypeScript 中最接近代数数据类型(ADT)的表达,配上 assertNever 做穷尽性检查","keyof 在联合与交叉上构成对偶关系:keyof(A|B) = keyof A & keyof B,反之亦然","条件类型对裸类型参数自动分发:F = F | F,这是实现 Exclude/Extract 的基础","实战中 Result 模式让错误处理进入类型系统,Branded Type 零成本区分语义不同的类型"]}),i[1]||(i[1]=h(`

2. 联合类型:类型的"或"

2.1 基础语法与语义

联合类型使用 | 运算符,表示值属于任一成员类型。从集合的角度来看,A | B 就是集合 A 和集合 B 的并集——只要值落在这两个集合中的任何一个里,就满足类型要求。

typescript
// 值可以是 string 或 number——集合的视角:string 集 ∪ number 集
+import{K as k}from"./chunks/KeyTakeaway.Cr-Br5gs.js";import{B as d}from"./chunks/Blockquote.B7nHhHWl.js";import{f as g,c as n,g as e,o as p,a,t as l,_ as y,d as h,b as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";import{C as E}from"./chunks/ConceptPair.CDPz5jW2.js";/* empty css                                                             *//* empty css                                                                          *//* empty css                                                                           */const c={key:0,class:"ba-root"},F={class:"ba-panel ba-panel--before"},m={class:"ba-header"},o={class:"ba-badge ba-badge--before"},b={key:0,class:"ba-title"},u={class:"ba-body"},A={key:0,class:"ba-code"},D=["src","alt"],C={key:2,class:"ba-text"},B={class:"ba-panel ba-panel--after"},f={class:"ba-header"},v={class:"ba-badge ba-badge--after"},q={key:0,class:"ba-title"},x={class:"ba-body"},_={key:0,class:"ba-code"},T=["src","alt"],w={key:2,class:"ba-text"},S=g({__name:"BeforeAfter",props:{before:{},after:{},beforeLabel:{},afterLabel:{}},setup(s){return(r,i)=>s.before&&s.after?(p(),n("div",c,[a("div",F,[a("div",m,[a("span",o,l(s.beforeLabel||"Before"),1),s.before.title?(p(),n("span",b,l(s.before.title),1)):e("",!0)]),a("div",u,[s.before.type==="code"?(p(),n("pre",A,[a("code",null,l(s.before.content),1)])):s.before.type==="image"?(p(),n("img",{key:1,src:s.before.content,alt:s.before.title||"Before",class:"ba-img"},null,8,D)):(p(),n("p",C,l(s.before.content),1))])]),i[0]||(i[0]=a("div",{class:"ba-arrow"},"→",-1)),a("div",B,[a("div",f,[a("span",v,l(s.afterLabel||"After"),1),s.after.title?(p(),n("span",q,l(s.after.title),1)):e("",!0)]),a("div",x,[s.after.type==="code"?(p(),n("pre",_,[a("code",null,l(s.after.content),1)])):s.after.type==="image"?(p(),n("img",{key:1,src:s.after.content,alt:s.after.title||"After",class:"ba-img"},null,8,T)):(p(),n("p",w,l(s.after.content),1))])])])):e("",!0)}}),P=y(S,[["__scopeId","data-v-8a40fafe"]]),K=JSON.parse('{"title":"深入理解 TypeScript 联合类型与交叉类型","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","frontmatter":{"date":"2026-04-15T09:16:06.000Z","title":"深入理解 TypeScript 联合类型与交叉类型","tldr":"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","tags":["concept","typescript","type-system","union-types","intersection-types"],"categories":["全栈","全栈基础素养"],"permalink":"/fullstack/union-types-vs-intersection-types"},"headers":[],"relativePath":"fullstack/union-types-vs-intersection-types.md","filePath":"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md"}'),U={name:"fullstack/union-types-vs-intersection-types.md"},W=Object.assign(U,{setup(s){return(r,i)=>(p(),n("div",null,[i[0]||(i[0]=h('

深入理解 TypeScript 联合类型与交叉类型

摘要: 以类型是值的集合这一核心心智模型为出发点,系统阐述了 TypeScript 联合类型与交叉类型的语法语义及深层设计原理。联合类型部分涵盖基础语法、可辨识联合模式、五种类型收窄方式、基于 never 的穷尽性检查、keyof 在联合类型上的行为及分布式条件类型的分发机制。交叉类型部分则解析了属性冲突的产生原因、函数类型交叉与重载签名的等价性,以及交叉类型与接口继承在时机、冲突处理和适用场景上的本质区别。进一步揭示了 keyof 在联合与交叉之间的对偶性、类型运算的分配律,以及与 never 和 unknown 的代数关系。最后以 Result/Either 模式、Branded Type、Mixin 组合及组件 Props 类型设计四个实战模式展示联合与交叉在工程中的应用。

1. 前置概念:类型即集合

理解联合类型和交叉类型的关键在于建立一个核心心智模型:类型是值的集合

这个看似简单的隐喻,实际上是我们理解一切复杂类型操作的起点。当我们说一个变量的类型是 string 时,不妨把它想象成「所有可能字符串值」这个无穷集合。而 TypeScript 的类型检查,本质上就是判断某个具体的值是否落在类型所对应的集合之中。

类型集合含义说明
string所有字符串值的集合无限集
number所有数字值的集合无限集
"a" | "b"仅含 "a""b" 的集合有限集,含 2 个元素
never空集不包含任何值
unknown全集包含所有可能的值

有了这个模型,两个运算符的含义就一目了然:

集合并集:

AB=ABA \\mid B \\;=\\; A \\cup B

集合交集:

A&B=ABA \\& B \\;=\\; A \\cap B

关键洞察

string | number 是所有字符串 + 所有数字的集合——值只要属于其中之一即可。 string & number 是既属于字符串又属于数字的值的集合——不存在这样的值,所以结果是 never(空集)。

这个「类型即集合」的视角将贯穿全文。下面我们分别深入联合类型与交叉类型,再从类型系统的高度审视二者的深层关系。

',13)),t(k,{variant:"summary",points:["类型是值的集合——联合类型 (|) 是并集,交叉类型 (&) 是交集","可辨识联合是 TypeScript 中最接近代数数据类型(ADT)的表达,配上 assertNever 做穷尽性检查","keyof 在联合与交叉上构成对偶关系:keyof(A|B) = keyof A & keyof B,反之亦然","条件类型对裸类型参数自动分发:F = F | F,这是实现 Exclude/Extract 的基础","实战中 Result 模式让错误处理进入类型系统,Branded Type 零成本区分语义不同的类型"]}),i[1]||(i[1]=h(`

2. 联合类型:类型的"或"

2.1 基础语法与语义

联合类型使用 | 运算符,表示值属于任一成员类型。从集合的角度来看,A | B 就是集合 A 和集合 B 的并集——只要值落在这两个集合中的任何一个里,就满足类型要求。

typescript
// 值可以是 string 或 number——集合的视角:string 集 ∪ number 集
 let value: string | number;
 
 value = "hello"; // ✅ string 是联合成员
diff --git a/assets/fullstack_union-types-vs-intersection-types.md.hM79y4nW.lean.js b/assets/fullstack_union-types-vs-intersection-types.md.CeKTWuwd.lean.js
similarity index 95%
rename from assets/fullstack_union-types-vs-intersection-types.md.hM79y4nW.lean.js
rename to assets/fullstack_union-types-vs-intersection-types.md.CeKTWuwd.lean.js
index 124ae15..dbdf900 100644
--- a/assets/fullstack_union-types-vs-intersection-types.md.hM79y4nW.lean.js
+++ b/assets/fullstack_union-types-vs-intersection-types.md.CeKTWuwd.lean.js
@@ -1,4 +1,4 @@
-import{K as k}from"./chunks/KeyTakeaway.DyBgCpiw.js";import{B as d}from"./chunks/Blockquote.acMDZFAD.js";import{f as g,c as n,g as e,o as p,a,t as l,_ as y,d as h,b as t}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";import{C as E}from"./chunks/ConceptPair.DYvaVmrQ.js";/* empty css                                                             *//* empty css                                                                          *//* empty css                                                                           */const c={key:0,class:"ba-root"},F={class:"ba-panel ba-panel--before"},m={class:"ba-header"},o={class:"ba-badge ba-badge--before"},b={key:0,class:"ba-title"},u={class:"ba-body"},A={key:0,class:"ba-code"},D=["src","alt"],C={key:2,class:"ba-text"},B={class:"ba-panel ba-panel--after"},f={class:"ba-header"},v={class:"ba-badge ba-badge--after"},q={key:0,class:"ba-title"},x={class:"ba-body"},_={key:0,class:"ba-code"},T=["src","alt"],w={key:2,class:"ba-text"},S=g({__name:"BeforeAfter",props:{before:{},after:{},beforeLabel:{},afterLabel:{}},setup(s){return(r,i)=>s.before&&s.after?(p(),n("div",c,[a("div",F,[a("div",m,[a("span",o,l(s.beforeLabel||"Before"),1),s.before.title?(p(),n("span",b,l(s.before.title),1)):e("",!0)]),a("div",u,[s.before.type==="code"?(p(),n("pre",A,[a("code",null,l(s.before.content),1)])):s.before.type==="image"?(p(),n("img",{key:1,src:s.before.content,alt:s.before.title||"Before",class:"ba-img"},null,8,D)):(p(),n("p",C,l(s.before.content),1))])]),i[0]||(i[0]=a("div",{class:"ba-arrow"},"→",-1)),a("div",B,[a("div",f,[a("span",v,l(s.afterLabel||"After"),1),s.after.title?(p(),n("span",q,l(s.after.title),1)):e("",!0)]),a("div",x,[s.after.type==="code"?(p(),n("pre",_,[a("code",null,l(s.after.content),1)])):s.after.type==="image"?(p(),n("img",{key:1,src:s.after.content,alt:s.after.title||"After",class:"ba-img"},null,8,T)):(p(),n("p",w,l(s.after.content),1))])])])):e("",!0)}}),P=y(S,[["__scopeId","data-v-8a40fafe"]]),K=JSON.parse('{"title":"深入理解 TypeScript 联合类型与交叉类型","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","frontmatter":{"date":"2026-04-15T09:16:06.000Z","title":"深入理解 TypeScript 联合类型与交叉类型","tldr":"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","tags":["concept","typescript","type-system","union-types","intersection-types"],"categories":["全栈","全栈基础素养"],"permalink":"/fullstack/union-types-vs-intersection-types"},"headers":[],"relativePath":"fullstack/union-types-vs-intersection-types.md","filePath":"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md"}'),U={name:"fullstack/union-types-vs-intersection-types.md"},W=Object.assign(U,{setup(s){return(r,i)=>(p(),n("div",null,[i[0]||(i[0]=h("",13)),t(k,{variant:"summary",points:["类型是值的集合——联合类型 (|) 是并集,交叉类型 (&) 是交集","可辨识联合是 TypeScript 中最接近代数数据类型(ADT)的表达,配上 assertNever 做穷尽性检查","keyof 在联合与交叉上构成对偶关系:keyof(A|B) = keyof A & keyof B,反之亦然","条件类型对裸类型参数自动分发:F = F | F,这是实现 Exclude/Extract 的基础","实战中 Result 模式让错误处理进入类型系统,Branded Type 零成本区分语义不同的类型"]}),i[1]||(i[1]=h("",26)),t(P,{"before-label":"分发(裸类型参数)","after-label":"不分发(用元组包裹)",before:{title:"ToArray — 裸参数,自动分发",content:`type ToArray = T extends any ? T[] : never;
+import{K as k}from"./chunks/KeyTakeaway.Cr-Br5gs.js";import{B as d}from"./chunks/Blockquote.B7nHhHWl.js";import{f as g,c as n,g as e,o as p,a,t as l,_ as y,d as h,b as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";import{C as E}from"./chunks/ConceptPair.CDPz5jW2.js";/* empty css                                                             *//* empty css                                                                          *//* empty css                                                                           */const c={key:0,class:"ba-root"},F={class:"ba-panel ba-panel--before"},m={class:"ba-header"},o={class:"ba-badge ba-badge--before"},b={key:0,class:"ba-title"},u={class:"ba-body"},A={key:0,class:"ba-code"},D=["src","alt"],C={key:2,class:"ba-text"},B={class:"ba-panel ba-panel--after"},f={class:"ba-header"},v={class:"ba-badge ba-badge--after"},q={key:0,class:"ba-title"},x={class:"ba-body"},_={key:0,class:"ba-code"},T=["src","alt"],w={key:2,class:"ba-text"},S=g({__name:"BeforeAfter",props:{before:{},after:{},beforeLabel:{},afterLabel:{}},setup(s){return(r,i)=>s.before&&s.after?(p(),n("div",c,[a("div",F,[a("div",m,[a("span",o,l(s.beforeLabel||"Before"),1),s.before.title?(p(),n("span",b,l(s.before.title),1)):e("",!0)]),a("div",u,[s.before.type==="code"?(p(),n("pre",A,[a("code",null,l(s.before.content),1)])):s.before.type==="image"?(p(),n("img",{key:1,src:s.before.content,alt:s.before.title||"Before",class:"ba-img"},null,8,D)):(p(),n("p",C,l(s.before.content),1))])]),i[0]||(i[0]=a("div",{class:"ba-arrow"},"→",-1)),a("div",B,[a("div",f,[a("span",v,l(s.afterLabel||"After"),1),s.after.title?(p(),n("span",q,l(s.after.title),1)):e("",!0)]),a("div",x,[s.after.type==="code"?(p(),n("pre",_,[a("code",null,l(s.after.content),1)])):s.after.type==="image"?(p(),n("img",{key:1,src:s.after.content,alt:s.after.title||"After",class:"ba-img"},null,8,T)):(p(),n("p",w,l(s.after.content),1))])])])):e("",!0)}}),P=y(S,[["__scopeId","data-v-8a40fafe"]]),K=JSON.parse('{"title":"深入理解 TypeScript 联合类型与交叉类型","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","frontmatter":{"date":"2026-04-15T09:16:06.000Z","title":"深入理解 TypeScript 联合类型与交叉类型","tldr":"以集合论视角深入 TypeScript 联合与交叉类型的本质,掌握条件类型分发、对偶性及实战模式。","description":"以类型是值的集合为核心心智模型,深入剖析联合类型与交叉类型的语法、收窄机制、函数重载行为及属性冲突,并揭示 keyof 对偶性、分配律及条件类型分发的底层逻辑。","tags":["concept","typescript","type-system","union-types","intersection-types"],"categories":["全栈","全栈基础素养"],"permalink":"/fullstack/union-types-vs-intersection-types"},"headers":[],"relativePath":"fullstack/union-types-vs-intersection-types.md","filePath":"01.全栈/80.全栈基础素养/03.联合类型 VS 类型.md"}'),U={name:"fullstack/union-types-vs-intersection-types.md"},W=Object.assign(U,{setup(s){return(r,i)=>(p(),n("div",null,[i[0]||(i[0]=h("",13)),t(k,{variant:"summary",points:["类型是值的集合——联合类型 (|) 是并集,交叉类型 (&) 是交集","可辨识联合是 TypeScript 中最接近代数数据类型(ADT)的表达,配上 assertNever 做穷尽性检查","keyof 在联合与交叉上构成对偶关系:keyof(A|B) = keyof A & keyof B,反之亦然","条件类型对裸类型参数自动分发:F = F | F,这是实现 Exclude/Extract 的基础","实战中 Result 模式让错误处理进入类型系统,Branded Type 零成本区分语义不同的类型"]}),i[1]||(i[1]=h("",26)),t(P,{"before-label":"分发(裸类型参数)","after-label":"不分发(用元组包裹)",before:{title:"ToArray — 裸参数,自动分发",content:`type ToArray = T extends any ? T[] : never;
 
 // 分发过程:ToArray
 //   = ToArray | ToArray
diff --git a/assets/growth_books.md.DxXz1I-x.js b/assets/growth_books.md.DON7D586.js
similarity index 99%
rename from assets/growth_books.md.DxXz1I-x.js
rename to assets/growth_books.md.DON7D586.js
index 6efebf1..0c1ea39 100644
--- a/assets/growth_books.md.DxXz1I-x.js
+++ b/assets/growth_books.md.DON7D586.js
@@ -1 +1 @@
-import{f as x,i as z,o as a,b as h,T as B,w as I,c as r,g as _,z as P,a as e,k as v,t as c,F as p,m as f,e as l,A as W,_ as A,s as j,h as Y,n as $,d as M,u as g}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const T="/img/cover/health_bg.png",N={class:"book-panel__drawer"},V={class:"book-panel__header-meta"},G={class:"book-panel__title"},D={class:"book-panel__author"},F={class:"book-panel__body"},Z={class:"book-panel__top-bar"},H={class:"book-panel__top-left"},J={class:"book-panel__tags"},O={key:0,class:"book-panel__rating"},R={class:"stars"},E={key:0,viewBox:"0 0 24 24",fill:"currentColor"},K={key:1,viewBox:"0 0 24 24",class:"half-star"},Q=["id"],X=["clip-path"],U={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},ee={class:"rating-text"},te={class:"book-panel__links"},oe=["href"],ae={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},le=["href"],re={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},ne={class:"book-panel__section"},se={class:"book-panel__desc"},ie={key:0,class:"book-panel__section"},de={class:"book-panel__highlights"},ce=x({__name:"BookDetailPanel",props:{book:{},open:{type:Boolean},heroColor:{},tagColors:{}},emits:["close"],setup(n,{emit:b}){const t=b;return(w,o)=>(a(),z(W,{to:"body"},[h(B,{name:"panel-slide"},{default:I(()=>[n.open&&n.book?(a(),r("div",{key:0,class:"book-panel",onClick:o[2]||(o[2]=P(i=>t("close"),["self"]))},[e("div",{class:"book-panel__overlay",onClick:o[0]||(o[0]=i=>t("close"))}),e("div",N,[e("div",{class:"book-panel__header",style:v({background:n.heroColor})},[e("button",{class:"book-panel__close",title:"关闭",onClick:o[1]||(o[1]=i=>t("close"))},[...o[3]||(o[3]=[e("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none"},[e("path",{d:"M12 4L4 12M4 4l8 8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])]),e("div",V,[e("h2",G,c(n.book.title),1),e("p",D,c(n.book.author),1)])],4),e("div",F,[e("div",Z,[e("div",H,[e("div",J,[(a(!0),r(p,null,f(n.book.tags,(i,m)=>(a(),r("span",{key:i,class:"book-panel__tag",style:v({background:n.tagColors[m%n.tagColors.length].bg,color:n.tagColors[m%n.tagColors.length].text})},c(i),5))),128))]),n.book.rating!=null?(a(),r("div",O,[o[8]||(o[8]=e("span",{class:"rating-label"},"推荐指数:",-1)),e("div",R,[(a(),r(p,null,f(5,i=>e("span",{key:i,class:"star"},[i<=Math.floor(n.book.rating)?(a(),r("svg",E,[...o[4]||(o[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):i===Math.ceil(n.book.rating)&&n.book.rating%1!==0?(a(),r("svg",K,[e("defs",null,[e("clipPath",{id:"clip-"+n.book.id},[...o[5]||(o[5]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,Q)]),o[6]||(o[6]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#clip-"+n.book.id+")"},null,8,X)])):(a(),r("svg",U,[...o[7]||(o[7]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",ee,c(n.book.rating.toFixed(1)),1)])):_("",!0)]),e("div",te,[e("a",{href:n.book.link,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",ae,[...o[9]||(o[9]=[e("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])),o[10]||(o[10]=l(" 豆瓣 ",-1))],8,oe),n.book.wereadLink?(a(),r("a",{key:0,href:n.book.wereadLink,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",re,[...o[11]||(o[11]=[e("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z",fill:"currentColor"},null,-1)])])),o[12]||(o[12]=l(" 微信读书 ",-1))],8,le)):_("",!0)])]),o[15]||(o[15]=e("div",{class:"book-panel__divider"},null,-1)),e("section",ne,[o[13]||(o[13]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"📖"),l(" 内容简介 ")],-1)),e("p",se,c(n.book.desc),1)]),n.book.highlights&&n.book.highlights.length>0?(a(),r("section",ie,[o[14]||(o[14]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"✨"),l(" 书籍亮点 ")],-1)),e("ul",de,[(a(!0),r(p,null,f(n.book.highlights,(i,m)=>(a(),r("li",{key:m,class:"book-panel__highlight-item"},c(i),1))),128))])])):_("",!0)])])])):_("",!0)]),_:1})]))}}),he=A(ce,[["__scopeId","data-v-1ddfc013"]]),be={class:"book-list"},ue=["onClick"],ge=["src","alt"],ke={class:"book-cover__overlay"},pe={key:0,class:"book-cover__hint"},we=["href"],me={class:"book-info"},_e={class:"book-info__title"},fe={class:"book-info__author"},qe={key:0,class:"book-info__rating"},ve={class:"stars"},je={key:0,viewBox:"0 0 24 24",fill:"currentColor"},Le={key:1,viewBox:"0 0 24 24",class:"half-star"},ye=["id"],Se=["clip-path"],xe={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},Pe={class:"rating-text"},Ae={class:"book-info__tags"},Ce={class:"book-info__desc"},ze=x({__name:"BookRecommend",props:{books:{}},setup(n){const b=["linear-gradient(135deg, #e8f0fe 0%, #c7d9fd 100%)","linear-gradient(135deg, #e6f4ea 0%, #b7dfc4 100%)","linear-gradient(135deg, #fff3e0 0%, #ffd9a0 100%)","linear-gradient(135deg, #fce4ec 0%, #f8b4c8 100%)","linear-gradient(135deg, #ede7f6 0%, #cdb8ee 100%)","linear-gradient(135deg, #e0f7fa 0%, #9ee8f0 100%)"],t=[{bg:"#e8f0fe",text:"#3b5bdb"},{bg:"#e6f4ea",text:"#2e7d32"},{bg:"#fff3e0",text:"#e65100"},{bg:"#fce4ec",text:"#c2185b"},{bg:"#ede7f6",text:"#6a1b9a"},{bg:"#e0f7fa",text:"#00838f"}],w=j(null),o=j(0),i=j(!1),m=Y(()=>b[o.value%b.length]);function C(q,d){q.withPanel!==!1&&(w.value?.id===q.id&&i.value?L():(w.value=q,o.value=d,i.value=!0))}function L(){i.value=!1,setTimeout(()=>{w.value=null},300)}return(q,d)=>(a(),r(p,null,[e("div",be,[(a(!0),r(p,null,f(n.books,(s,y)=>(a(),r("div",{key:s.id,class:$(["book-card",{"book-card--active":w.value?.id===s.id&&i.value}]),onClick:u=>C(s,y)},[e("div",{class:"book-cover",style:v({background:b[y%b.length]})},[s.cover?(a(),r("img",{key:0,src:s.cover,alt:s.title,class:"book-cover__img"},null,8,ge)):_("",!0),e("div",ke,[s.withPanel!==!1?(a(),r("span",pe,"点击查看详情")):(a(),r("a",{key:1,href:s.link,target:"_blank",rel:"noopener",class:"book-cover__hint",onClick:d[0]||(d[0]=P(()=>{},["stop"]))},"查看豆瓣",8,we))])],4),e("div",me,[e("div",_e,"《"+c(s.title)+"》",1),e("div",fe,c(s.author),1),s.rating!=null?(a(),r("div",qe,[e("div",ve,[(a(),r(p,null,f(5,u=>e("span",{key:u,class:"star"},[u<=Math.floor(s.rating)?(a(),r("svg",je,[...d[1]||(d[1]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):u===Math.ceil(s.rating)&&s.rating%1!==0?(a(),r("svg",Le,[e("defs",null,[e("clipPath",{id:"card-clip-"+s.id},[...d[2]||(d[2]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,ye)]),d[3]||(d[3]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#card-clip-"+s.id+")"},null,8,Se)])):(a(),r("svg",xe,[...d[4]||(d[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",Pe,c(s.rating.toFixed(1)),1)])):_("",!0),e("div",Ae,[(a(!0),r(p,null,f(s.tags,(u,S)=>(a(),r("span",{key:u,class:"tag",style:v({background:t[S%t.length].bg,color:t[S%t.length].text})},c(u),5))),128))]),e("p",Ce,c(s.desc),1)])],10,ue))),128))]),h(he,{book:w.value,open:i.value,"hero-color":m.value,"tag-colors":t,onClose:L},null,8,["book","open","hero-color"])],64))}}),k=A(ze,[["__scopeId","data-v-fd79cd55"]]),Be=[{id:"book-001",title:"心中有数:生活中的数学思维",author:"刘雪峰",cover:"https://cdn.weread.qq.com/weread/cover/39/3300018939/t6_3300018939.jpg",wereadLink:"https://weread.qq.com/web/reader/df6323a0813ab6de5g019a31#outline?noScroll=1",link:"https://book.douban.com/subject/35749693/",tags:["数学思维","科普","决策"],desc:"本书通过大量贴近日常的例子,展示数学思维如何优化我们的生活决策。作者用概率、统计、最优化等数学工具,为生活、职场、人际交往中的权衡问题提供分析框架,帮助读者在面对不确定性时像计算机一样找到“最优解”。",rating:4.9,highlights:["将大数定律、最小二乘法等硬核数学概念与日常生活巧妙结合","提供应对不确定性和多目标抉择的科学决策框架","强调数学不仅是公式计算,更是看世界、优化人生的高效思维工具"]},{id:"book-0020",title:"智慧的疆界:从图灵机到人工智能",author:"周志明",cover:"https://cdn.weread.qq.com/weread/cover/92/YueWen_23637052/t6_YueWen_23637052.jpg",wereadLink:"https://weread.qq.com/web/reader/b9732f007168ac3cb976eca#outline?noScroll=1",link:"https://book.douban.com/subject/30379536/",tags:["人工智能","科技史","通识读物"],desc:"本书是一部面向大众的人工智能通识读物。作者周明以时间为主线,将人工智能的发展历程、关键人物与里程碑事件串联起来,从五个维度展开:学术理论、历史沿革、技术应用、研究成果以及面临的困难与未来挑战。全书旨在用通俗的语言和巧妙的结构,把人工智能从“阳春白雪”的学术殿堂带到公众视野,帮助读者理解 AI 能做什么、做不到什么,以及背后的技术与思想根源。",rating:5,highlights:["以时间为主线,清晰梳理人工智能的发展脉络与里程碑","深入浅出,用通俗语言将复杂的学术理论带入公众视野","客观剖析,帮助读者准确界定AI“能做什么”与“做不到什么”"]},{id:"book-004",title:"为什么伟大不能被计划",author:"肯尼斯·斯坦利 / 乔尔·雷曼",cover:"https://cdn.weread.qq.com/weread/cover/22/cpplatform_wfdzhk1dx7ig9aep4gagof/t6_cpplatform_wfdzhk1dx7ig9aep4gagof1686304376.jpg",wereadLink:"https://weread.qq.com/web/reader/0bf32020813ab7e6bg016510#outline?noScroll=1",link:"https://book.douban.com/subject/36357804/",tags:["人工智能","创新思维","认知科学"],desc:"本书由两位前沿AI科学家合著,提出了颠覆传统“目标-计划”思维的全新视角。结合AI研究实践,书中论证了伟大成就往往并非出自精心设计的蓝图,而是源于对未知的好奇、随机探索与不断试错。通过“寻宝者思维”和“踏脚石模型”等方法,为读者在高度不确定的环境中激发突破性创新提供了具体的行动框架。",rating:4.5,highlights:["颠覆传统的“目标论”,论证伟大成就源自对未知的好奇与无边界的探索","提供“寻宝者思维”“踏脚石模型”“新奇性探索”三大可操作的认知与实践工具","扎根OpenAI等前沿机构的实证背景,其启发意义跨学科适用于科研、商业及人生规划"]},{id:"book-003",title:"这就是ChatGPT",author:"斯蒂芬·沃尔弗拉姆",cover:"https://cdn.weread.qq.com/weread/cover/24/cpplatform_4cn8w4tmgzntjobg9ffeny/t6_cpplatform_4cn8w4tmgzntjobg9ffeny1703648785.jpg",wereadLink:"https://weread.qq.com/web/reader/74332a90813ab86c4g019d98#outline?noScroll=1",link:"https://book.douban.com/subject/36449803/",tags:["人工智能","大模型","ChatGPT"],desc:"本书由著名科学家斯蒂芬·沃尔弗拉姆撰写,全景式拆解了ChatGPT的内部工作机制。作者用通俗语言解释了神经网络和自回归架构等核心技术,探讨了简单的计算规则如何涌现出令人惊叹的智能,帮助读者深刻理解大语言模型为何能生成高质量的人类水平文本。",rating:4.3,highlights:["全景拆解核心技术:深入浅出地讲清ChatGPT背后的神经网络与自回归架构","独特的大师视角:将大模型视为“简单的计算规则”涌现复杂智能的绝佳范例","兼顾技术与商业影响:结合算力规模与行业冲击,全面探讨AI时代的机遇与挑战"]},{id:"book-0030",title:"人工智能:现代方法(第4版)(上下册)",author:"[美]斯图尔特·罗素(Stuart Russell) / [美]彼得·诺维格(Peter Norvig)",cover:"https://cdn.weread.qq.com/weread/cover/33/cpplatform_8rthznqfhsjuz5fswwn6kx/t6_cpplatform_8rthznqfhsjuz5fswwn6kx1675928213.jpg",wereadLink:"https://weread.qq.com/web/reader/fc332020813ab7942g0102ad#outline?noScroll=1",link:"https://book.douban.com/subject/36152133",tags:["人工智能","教材","理论实践结合","经典著作","计算机科学"],desc:"本书是人工智能领域的经典权威教材,系统、深入地探讨AI领域的理论与实践,以统一风格融合当今流行的AI思想与术语到前沿应用中,真正实现理论与实践相结合。全书分7个部分共28章,理论部分涵盖逻辑、概率、连续数学、感知、推理、学习、行动及公平、信任、社会公益和安全等社会议题;实践部分选取微电子设备、机器人行星探测器、在线服务、AlphaZero、人形机器人、自动驾驶、AI辅助医疗等热门场景。由加州大学伯克利分校教授斯图尔特·罗素与前谷歌研究总监彼得·诺维格联合撰写,被全球1500多所高校采用,适合作为AI相关专业本科生和研究生教材,也可作为专业人员的参考书。",rating:5,highlights:["体系完整覆盖面广,7个部分28章构成自洽的AI理论主线,涵盖核心理论与前沿议题","理论与实践并重,既阐述核心算法与模型,又展示在热门场景中的落地实例,便于知识迁移","紧跟前沿关注社会议题,专门讨论AI伦理与安全,引导思考技术与社会的交互责任","一站式权威参考,兼具教材属性与专业参考价值,适配高校教学与产业实践双重需求","现代理念贯穿始终,通过最新案例体现AI进展与行业趋势,呈现“活”的AI生态"]},{id:"book-0031",title:"模型思维:简化世界的人工智能模型",author:"龚才春",cover:"https://cdn.weread.qq.com/weread/cover/26/YueWen_38601826/t6_YueWen_38601826.jpg",wereadLink:"https://weread.qq.com/web/reader/5a8326e0724d04625a8e740#outline?noScroll=1",link:"https://book.douban.com/subject/35488925/",tags:["模型思维","人工智能","算法模型","机器学习","入门实践"],desc:"本书聚焦“如何用模型简化世界”的核心主题,将人工智能在现实业务中面临的难题归纳为权重、状态、序列、表示、相似、分类六大问题,并围绕该框架讲解对应模型思路与算法。书中弱化复杂数学公式,以大量生活化、业务化案例阐释模型理论与落地场景,帮助读者建立“模型—场景”映射关系,降低AI模型学习门槛,既是人工智能初学者的入门读物,也可为企业工程师、科研人员提供实践参考,适合各类读者学习并将模型思维应用到生活与工作中。",rating:4.8,highlights:["以“六大问题”框架串联AI模型,可按场景快速检索适配的模型思路","侧重落地实践,搭配大量生活化与业务案例,助力建立“模型—场景”映射","降低学习门槛,少数学公式、多直观案例,兼顾初学者与工程落地需求","受众群体广泛,适配工程师、科研人员及普通读者,可迁移模型思维至实际场景"]},{id:"book-005",title:"你看起来好像……我爱你:AI的工作原理以及它为这个世界带来的稀奇古怪",author:"贾内尔·沙内",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/970/39481970/t6_39481970.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=f9a32c10725a7272f9a14f9&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/35407136/",tags:["人工智能","趣味科普","漫画算法"],desc:"这是一部写给普通读者的人工智能趣味科普读物。作者贾内尔·沙内结合生活化的比喻和超级可爱的漫画,深入浅出地讲解了AI的基本工作原理、实际应用及其局限性。书中通过大量幽默的AI实验与“翻车”案例,带领读者在轻松捧腹的氛围中,准确理解算法能做什么、不能做什么。",rating:4.2,highlights:["幽默可爱的漫画导览:用插图和通俗语言将“深度学习”“神经网络”等抽象概念可视化","丰富的趣味实验案例:通过精选的AI“翻车”故事,直观揭示算法背后的逻辑与潜在偏差","客观建立AI认知:在展示AI强大能力的同时,明确指出其在语境理解和处理模糊信息时的短板"]},{id:"book-006",title:"AI经济:机器人时代的工作、财富和社会福利",author:"罗杰·布特尔",cover:"https://cdn.weread.qq.com/weread/cover/30/YueWen_38229387/t6_YueWen_38229387.jpg",wereadLink:"https://weread.qq.com/web/reader/653320207247558b65332f5#outline?noScroll=1",link:"https://book.douban.com/subject/35433060/",tags:["人工智能","经济学","社会学","未来趋势"],desc:"本书由知名经济学家罗杰·布特尔撰写,聚焦AI与机器人技术对经济和社会的深远影响。作者拨开艰涩的科技术语,从经济增长、通货膨胀及财富分配等宏观视角,理性剖析AI革命将如何重塑我们的工作、教育与休闲方式,以乐观的姿态为迎接未来的社会变革指明路径。",rating:4.1,highlights:["宏观经济视角解析:深入探讨AI对经济增长、通货膨胀、财富与权力分配的真实影响","全景式社会洞察:全面检视机器人时代下,人类教育体系、工作模式与休闲形态的深刻变革","理性乐观的未来指南:拒绝技术恐慌,为个人与社会在变迁的世界中提供清晰可行的应对计划"]}],Ie=[{id:"book-007",title:"做对产品",author:"阿尔贝托·索维亚",cover:"https://cdn.weread.qq.com/weread/cover/53/YueWen_40877841/t6_YueWen_40877841.jpg",wereadLink:"https://weread.qq.com/web/reader/254322a0726fbf1125472c9#outline?noScroll=1",link:"https://book.douban.com/subject/35607961/",tags:["产品思维","创业","商业方法论"],slogan:"为什么有些产品注定失败,有些产品却能大获成功?来自谷歌与斯坦福的产品工具和产品战术。",desc:"谷歌首任产品总监阿尔贝托·索维亚结合在谷歌、斯坦福的实战经验与自身代价高昂的创业失败经历,总结出的一套防败手册。书中揭示了新产品高达90%的“市场失败律”,并创新性地提出了“预型”(Pre型)理念,指导团队在正式开发前,以极低的成本和真实数据快速验证关键假设,确保把创意打磨成“正确的它”。",rating:4.8,highlights:["揭示残酷的市场失败律:正视90%新产品必然失败的商业常态,并以此倒推破局的实战方法论","首创“预型”(Pre型)概念:提供8大测试工具,主张用极低成本和小规模试错快速逼近正确的产品形态","强调真实数据驱动决策:辅以特斯拉、谷歌等完整案例回溯,教导团队将决策建立在客观证据而非主观直觉之上"]},{id:"book-009",title:"俞军产品方法论",author:"俞军",cover:"https://cdn.weread.qq.com/weread/cover/47/YueWen_28165041/t6_YueWen_28165041.jpg",wereadLink:"https://weread.qq.com/web/reader/1cc3252071adc3b11cc0162#outline?noScroll=1",link:"https://book.douban.com/subject/34907971/",tags:["产品思维","产品经理","互联网","方法论"],desc:"“百度贴吧之父”俞军二十余年产品实践与思考的系统总结。本书将产品经理定义为“以科学方法研究人性并转化为商业方案”的交叉学科,深入解析了用户模型、交易模型和决策模型三大核心框架,为产品人提供了一套在不确定环境中权衡多方利益的实战指南。",rating:4.4,highlights:["沉淀二十年行业经验:从广为流传的“PM12条”到系统化的产品哲学,展现顶尖产品经理的认知迭代史","三大核心模型拆解:深度剖析用户模型与交易模型,指导如何通过让交易发生来创造“有利可图”的真实用户价值","兼顾科学与人文视角:强调批判性思维的运用,并清晰梳理了从新人到顶尖大牛的能力进阶路径"]},{id:"book-016",title:"策略产品经理:模型与方法论",author:"青十五",cover:"https://cdn.weread.qq.com/weread/cover/31/cpplatform_gheeqe7hjb2czyzthzf5nm/t6_cpplatform_gheeqe7hjb2czyzthzf5nm1735654872.jpg",wereadLink:"https://weread.qq.com/web/reader/4de32800813ab98d5g01286b#outline?noScroll=1",link:"https://book.douban.com/subject/35218721/",tags:["产品经理","策略产品","算法思维"],desc:"本书围绕“策略产品经理”这一复合角色,系统性地构建了从理念到实践的完整知识框架。作者从机器学习理论与经济学视角出发,结合推荐、搜索、广告、风控等核心业务场景,深入浅出地讲解了函数建模与策略应用,并对策略产品经理的核心能力与团队建设给出了详尽指导。",rating:3.9,highlights:["系统化的角色认知建构:清晰界定策略产品经理的时代背景、职责边界与工作内容,为从业者夯实概念基础","跨学科的模型与业务结合:利用机器学习的函数方法论与经济学理论,深度剖析推荐、搜索、广告、风控及定价等真实业务场景的解法","硬核算法的通俗化解析:深入浅出地拆解机器学习本质、常见算法及深度学习前沿技术,帮助产品经理真正理解策略背后的技术支撑","可落地的团队建设指南:全面拆解数据分析、沟通与项目管理等核心能力项,并针对不同产品生命周期提供策略团队的组建思路"]},{id:"book-008",title:"创造:用非传统方式做有价值的事",author:"托尼·法德尔",cover:"https://cdn.weread.qq.com/weread/cover/53/cpPlatform_tzdqT27m3vyaHnX5o8Vbwk/t6_cpPlatform_tzdqT27m3vyaHnX5o8Vbwk.jpg",wereadLink:"https://weread.qq.com/web/reader/13832ac0813ab725fg018645#outline?noScroll=1",link:"https://book.douban.com/subject/36071759/",tags:["产品思维","管理学","创业"],desc:"本书是iPod、iPhone、Nest等爆款产品幕后推手托尼·法德尔30余年职业经历的智慧结晶。作者毫无保留地分享了他在产品设计、团队管理、职业选择和公司经营等方面的“非传统”方法论,帮助读者在各自的领域内刻意练习创造力,做真正有价值的事。",rating:4.9,highlights:["源自顶级创新者的实战经验:连续打造iPod、iPhone等划时代产品的亲历复盘与真实反面教训","覆盖从个人到公司的完整路径:系统解答职业选择、产品设计、团队管理与企业经营等核心问题","提供可复制的“非传统”方法论:强调“亮点思维”与持续复盘,教导读者以反常规的视角刻意练习创造力"]},{id:"book-010",title:"产品思维",author:"刘飞",cover:"https://cdn.weread.qq.com/weread/cover/56/YueWen_25568738/t6_YueWen_25568738.jpg",wereadLink:"https://weread.qq.com/web/reader/38332ce0718625e23831fe7#outline?noScroll=1",link:"https://book.douban.com/subject/33456375/",tags:["产品思维","产品经理","个人成长","互联网"],desc:"实战派产品经理刘飞结合在一线大厂的丰富经验,围绕产品人如何实现能力跃迁展开的底层能力指南。全书掰开揉碎地讲解了认知盲点与实践痛点,通过“认知用户”“创造价值”和“产品落地”三大核心板块,系统拆解了从建立用户模型、高质量决策到快速迭代验证的完整产品方法论。",rating:4.2,highlights:["三大核心板块系统拆解:完整覆盖“认知用户”“创造价值”与“产品落地”的产品闭环","直击痛点的一线实战经验:毫无保留地分享实战中新手迫切需要却难以获取的隐性知识","聚焦底层能力与思维升维:不仅教授落地方法,更注重决策质量与思维模式的跃迁"]},{id:"book-011",title:"产品思维:创新设计的六条法则(全彩)",author:"张印帅",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/253/26687253/t6_26687253.jpg",wereadLink:"https://weread.qq.com/web/reader/a823297071973715a8202b0#outline?noScroll=1",link:"https://book.douban.com/subject/34859540/",tags:["产品设计","创新思维","方法论","设计灵感"],desc:"本书围绕作者张印帅多年产品设计实践总结出的6条创意公式展开,旨在帮助读者系统化地获取设计灵感并解决创新难题。全书通过大量经典案例,详细解析了从发散思考到重组创新的全过程,并在最后提供了从需求到草图再到最终方案的完整项目落地演示。",rating:4,highlights:["提炼6条实用的创新设计公式:将发散思考与重组创新系统化,打造可复用的设计灵感库","丰富的经典设计案例解析:详细展示“问题+方法”、“1+1>2”等法则在真实产品设计中的应用","呈现从需求到方案的落地全流程:通过综合案例演示概念打磨与草图设计的实战过程"]}],We=[{id:"book-012",title:"小而美:持续盈利的经营法则",author:"萨希尔·拉文吉亚",cover:"https://cdn.weread.qq.com/weread/cover/91/cpplatform_vl4abrrrqgxnry833gcrtt/t6_cpplatform_vl4abrrrqgxnry833gcrtt1677578056.jpg",wereadLink:"https://weread.qq.com/web/reader/02932980813ab7a43g012e77#outline?noScroll=1",link:"https://book.douban.com/subject/36280425/",tags:["创业","商业模式","极简主义"],desc:"本书打破了硅谷盲目追求“独角兽”的扩张迷思,聚焦于“规模不是唯一出路”的商业现实。作者结合创立Gumroad的亲身经历,提出了“极简创业经营”理念。全书指导创业者与管理者如何通过从社区切入、聚焦核心能力、精简团队等方式,用最少的资源打造出不仅能活下去,而且还能持续盈利的“慢公司”。",rating:5,highlights:["颠覆传统的扩张迷思:提出盈利至上而非规模至上,将持续赚钱和实际利润作为衡量企业成功的核心标准","可落地的极简法则:总结出“越少越好”“瞄准前100个客户”等7条创业清单,构建从定位、产品到销售的完整闭环","社区驱动的商业逻辑:提倡从虚拟社区入手,以“贡献-创作-教学”的方式低成本验证产品形态并获取早期信任","打造高韧性的“慢公司”:结合疫情与远程办公背景,展示如何通过精简组织和分布式协作,在不确定的时代保持稳定的现金流"]},{id:"book-013",title:"做难而正确的事:进步最快的方式",author:"尤里·莱文",cover:"https://cdn.weread.qq.com/weread/cover/53/cpplatform_bunxjyygj8m9stnwcgwqqk/t6_cpplatform_bunxjyygj8m9stnwcgwqqk1728876401.jpg",wereadLink:"https://weread.qq.com/web/reader/aa032fb0813ab9461g018406#outline?noScroll=1",link:"https://book.douban.com/subject/37054102/",tags:["创业","产品思维","商业管理"],desc:"Waze联合创始人尤里·莱文写给创业者和管理者的行动指南。作者结合连续打造两家估值超10亿美元公司的实战经验,提出“先做难事、再做正确事”的核心哲学。全书通过13个阶段的系统拆解,指导读者如何寻找真正的用户痛点、构建高价值产品,并在不确定的环境中通过不断复盘实现跨越式成长。",rating:4.9,highlights:["世界级创业者的实战复盘:连续打造两家独角兽公司的创始人亲授,提供极具可信度的第一手商业洞察与落地经验","践行“难而正确”的核心哲学:强调不追逐短期热点,而是去解决效率极低却被忽视的痛点,以此建立坚实的商业护城河","覆盖从0到1的全周期指南:系统拆解从寻找痛点、产品构建、融资运作到团队管理的13个关键阶段,提供可操作的行动清单","直面失败的心理韧性建设:不回避挫折,将“从错误中学习”提炼为核心方法,为身处高压环境的读者提供情感共鸣与心理支持","广泛的跨场景应用价值:书中给出的决策工具不仅适用于初创团队,同样能为大公司内部创新及个人职业认知升级提供指导"]},{id:"book-015",title:"创新公司:皮克斯的启示",author:"艾德·卡特姆",cover:"https://cdn.weread.qq.com/weread/cover/20/YueWen_814380/t6_YueWen_814380.jpg",wereadLink:"https://weread.qq.com/web/reader/2ef329605c6d2c2efeeb70d#outline?noScroll=1",link:"https://book.douban.com/subject/26314955/",tags:["创新思维","组织文化","企业管理"],desc:"皮克斯联合创始人艾德·卡特姆结合《玩具总动员》《机器人瓦力》等经典动画的幕后制作故事,深度揭示了皮克斯如何长期保持创意领先的秘密。本书不仅详述了皮克斯从初创到壮大的历程,更抽丝剥茧地解析了其在团队文化、跨部门协作、人才培养和允许失败等方面的独特创意管理机制,为各类组织提供了可复制的创新指南。",rating:4.5,highlights:["揭秘“皮克斯奇迹”背后的管理哲学:通过14部经典动画的真实幕后故事,展示创意从无到有、再到票房口碑双赢的全过程","深度解析创新土壤的搭建:阐述如何通过允许失败的文化、流程设计和激励机制,将“不断推动创新”彻底融入公司DNA","提供跨行业可复用的管理工具:总结项目立项、跨部门协作与风险控制的具体做法,为不同规模和行业的企业提供落地的实战模板"]},{id:"book-017",title:"重来:更为简单的商业思维",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/1/YueWen_635904/t6_YueWen_635904.jpg",wereadLink:"https://weread.qq.com/web/reader/0363228059b4000363b29e9#outline?noScroll=1",link:"https://book.douban.com/subject/5320866/",tags:["商业思维","创业","企业管理","极简主义"],desc:"37signals联合创始人基于十年创业实战经验,写给职场人与创业者的极简商业法则。本书摒弃了传统的MBA术语与复杂的商业教条,以“辛辣、直接、靠谱”的语言,颠覆了关于项目管理、人才招聘、产品设计与企业文化的常规认知,教导读者如何在真实的商业世界中“做更少,但创造更多价值”。",rating:4.3,highlights:["颠覆传统的极简商业哲学:反叛复杂的商业教条,主张“做更少,创造更多”,通过最小可行步骤降低试错成本并快速迭代","源自37signals的十年实战精髓:覆盖从项目管理、产品设计到市场营销的完整链条,提供不讲废话、拿来即用的行动指南","重塑职场与团队管理的认知:提出诸多务实且反常规的观点(如严苛的简历筛选标准),打造基于信任与结果导向的高效团队","适用面极广的实操手册:无论是寻求突破的精英企业家、小团队创业者,还是渴望提升工作效率的普通职场人,都能直接对照落地"]},{id:"book-018",title:"重来2:更为简单高效的远程工作方式",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/38/YueWen_635721/t6_YueWen_635721.jpg",wereadLink:"https://weread.qq.com/web/reader/46b3220059b34946b517012#outline?noScroll=1",link:"https://book.douban.com/subject/25861795/",tags:["企业管理","远程工作","工作方式","团队协作"],desc:"Basecamp(原37signals)创始人基于自身团队多年的全球分布式协作经验,为企业和个人提供的一套远程工作“思想升级包”。本书直面行业争议,破解了“创新只能面对面”及“文化会淡化”等常见误区,并系统提供了借助异步沟通、协作工具与流程设计来打造高效、人性化远程团队的实战指南。",rating:4.1,highlights:["提供思想层面的“升级包”:直击传统办公室痛点,用真实数据与反例打破关于远程办公的固有认知误区","第一手的分布式团队管理经验:Basecamp创始人亲授,展示如何突破地域限制招募顶尖人才,并保持健康、高效的工作节奏","系统可落地的工具与流程方法:详述如何利用协作工具降低管理成本,让远程工作从“特殊福利”真正转变为可持续的主流组织模式"]},{id:"book-019",title:"重来3:做得更少,但赚得更多",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/62/cpplatform_tqth8pnlq8h9ing5uciwhi/t6_cpplatform_tqth8pnlq8h9ing5uciwhi1748502715.jpg",wereadLink:"https://weread.qq.com/web/reader/b6a32ed0813ab9fb5g015181#outline?noScroll=1",link:"https://book.douban.com/subject/37367276/",tags:["工作方式","反内卷","企业文化"],desc:"Basecamp创始人带来的“反内卷”与“反过度忙碌”的管理指南。作者基于近20年带领54人团队服务全球10万家企业的成功经验,直击现代企业盲目扩张、无效加班等八大症结。全书主张以“冷静”颠覆“忙碌”文化,指导企业和个人通过40小时工作制、拒绝KPI和异步沟通等极简方式,在不牺牲生活质量的前提下实现健康发展与持续盈利。",rating:4.2,highlights:["以“冷静”颠覆“忙碌”文化:倡导高效比高产更重要,用稳定的节奏替代疯狂加班的内卷常态","直击现代企业八大症结:深度诊断快速扩张、无效加班、会议泛滥与目标绑架等痛点,提供对症下药的思路","提供四大可落地的管理工具:引入40小时工作制、拒绝硬性KPI、推行非实时沟通,坚持利润优先于规模","源自Basecamp的真实反向案例:展示“小而美”团队如何通过“少做但做好”的策略,跑赢新经济并保持高利润"]}],Ye=[{id:"book-024",title:"要事第一",author:"史蒂芬·柯维 / 罗杰·梅里尔 / 丽贝卡·梅里尔",cover:"https://cdn.weread.qq.com/weread/cover/57/yuewen_33091834/t6_yuewen_330918341686208943.jpg",wereadLink:"https://weread.qq.com/web/reader/f523268071f8f0faf52b806#outline?noScroll=1",link:"https://book.douban.com/subject/1028372/",tags:["时间管理","自我管理","经典思维"],desc:"作为《高效能人士的七个习惯》的延伸与加强版,本书提出了颠覆传统的“第四代时间管理”方法。作者强调,比提升做事速度(时钟)更重要的是找准人生的方向(罗盘)。全书指导读者通过自我意识的觉醒,以原则和价值观为中心,将精力聚焦于“重要而不紧急”的长期目标上,从而在繁忙的现代生活中真正做到“要事第一”。",rating:4.5,highlights:["从“时钟”到“罗盘”的思维跨越:打破一味追求“更快、更努力”的传统效率迷思,确立人生方向优先的哲学","经典的四象限时间管理矩阵:引导读者跳出紧急事务的“救火圈”,将核心精力倾注于第二象限(重要但不紧急)的高价值事务中","生动的“大石块”优先法则:通过“先放石头再倒水”的直观比喻,确保关键目标与核心使命在碎片化日程中得到绝对的优先落实","以原则为中心的自我驱动框架:不仅提供日程安排工具,更通过唤醒良知,帮助读者在工作、家庭等多元角色中实现真正的平衡与统合综效"]},{id:"book-025",title:"清单革命",author:"阿图·葛文德",cover:"https://cdn.weread.qq.com/weread/cover/12/cpPlatform_rudGZN3LDW5m9FBYr7rMBA/t6_cpPlatform_rudGZN3LDW5m9FBYr7rMBA.jpg",wereadLink:"https://weread.qq.com/web/reader/18332f80813ab7292g010065#outline?noScroll=1",link:"https://book.douban.com/subject/27168564/",tags:["管理学","认知科学","工作效率"],desc:"这是一部针对现代复杂世界所撰写的“认知防护手册”。作者阿图·葛文德通过医疗、建筑、投资等高风险领域的真实案例,揭示了人类在海量信息与高压环境下极易出现的判断疏忽。书中提出了“权力下放、简单至上、人为根本、持续改善”四大原则,指导读者将最佳实践外化为可操作的清单,从而在复杂系统中构建一道低成本、高回报的安全防线。",rating:4.6,highlights:["直面复杂时代的认知瓶颈:揭示在海量信息流中,清单如何作为“认知防护网”弥补人类记忆力与注意力分配的先天不足","提供兼具理念与落地的四大原则:通过“权力下放、简单至上、人为根本、持续改善”,构建一套可复用的清单设计哲学","扎实的医学实证背书:以手术感染率骤降等真实临床数据为支撑,证明清单思维在医疗、建筑、投资等高风险领域的跨行业普适性","简洁而具力量的流程创新:强调清单服务于人而非取代人,是帮助专业人士在高压环境下将复杂环节显性化、流程化的必备工具"]},{id:"book-020",title:"别让猴子跳回背上",author:"威廉·安肯三世",cover:"https://cdn.weread.qq.com/weread/cover/69/cpPlatform_7fFoBQ7dtqgABGSTskpJSN/t6_cpPlatform_7fFoBQ7dtqgABGSTskpJSN.jpg",wereadLink:"https://weread.qq.com/web/reader/9fc32010813ab7291g0196bd#outline?noScroll=1",link:"https://book.douban.com/subject/36103994/",tags:["时间管理","领导力","项目管理"],desc:"这是一部以“猴子”生动隐喻任务与责任的经典管理学著作。作者威廉·安肯三世深刻剖析了管理者常被琐事淹没的时间困境,并提出系统化的“猴子管理法”。通过明确任务归属、责任递减与有效授权,指导管理者如何把不属于自己的“猴子”交出去,从而释放精力专注于最高价值的战略思考,实现团队与个人的共同成长。",rating:4.3,highlights:["生动有趣的“猴子”隐喻:将枯燥的责任划分与任务流转具象化,直击职场中“忙碌却低效”的痛点","实用高效的“三步交接”法则:通过明确期望、授予资源与约定检查点,彻底避免下属的待办任务重新跳回自己背上","重塑时间管理与人才培养体系:指导高层放权、中层辅导、基层自发,将企业的成功真正建立在员工自主性的提升之上"]}],$e=[{id:"book-022",title:"学会提问(原书第12版)",author:"尼尔·布朗 / 斯图尔特·基利",cover:"https://cdn.weread.qq.com/weread/cover/68/YueWen_39980443/t6_YueWen_39980443.jpg",wereadLink:"https://weread.qq.com/web/reader/e6832d3072620d9be68aabf#outline?noScroll=1",link:"https://book.douban.com/subject/35513147/",tags:["批判性思维","逻辑学","认知科学","经典书"],desc:"这是一部培养批判性思维的经典实战指南。作者尼尔·布朗与斯图尔特·基利结合长期的教学与研究实践,提供了一套系统化、可操作的提问流程。全书通过大量真实情境案例,教导读者如何在信息泛滥的时代识别隐含假设、区分事实与观点,用高质量的“判断性问题”看透事物本质,从而做出更理性的决策。",rating:5,highlights:["聚焦批判性思考的核心能力:系统拆解“如何提出好问题”的思维过程,帮助读者在复杂信息中迅速抓住本质","提供可落地的提问与评估框架:从背景信息、关键概念到逻辑推理,构建一条完整的判断性问题链条","丰富的真实场景应用示范:结合课堂讨论、写作、日常沟通与职场决策等多元场景,让理论能“立即上手”","打造实用的思考检查单:不仅讲透“提问的价值”,更提供可直接转化为日常习惯的思维检查表,助你有效避开认知陷阱"]},{id:"book-026",title:"如何阅读一本书",author:"莫提默·J. 艾德勒 / 查尔斯·范多伦",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/810/23723810/t6_23723810.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=272326407169ff22272934f&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/1013208/",tags:["阅读方法","思维训练","经典"],desc:"阅读领域的“元方法”指南。作者艾德勒与范多伦将阅读划分为基础阅读、检视阅读、分析阅读与主题阅读四个进阶层次,并强调阅读是一项主动的思考活动。本书不仅提供了从“快速略读”到“系统拆解论点”的实操技巧,更致力于通过提问、归纳与批判,将阅读转化为训练理解力、批判力与终身学习的终极工具。",rating:5,highlights:["构建系统的四级阅读框架:从检视阅读到分析阅读再到主题阅读,为读者提供了一套从入门到精通的进阶路径","强调“主动与批判”的阅读观:拒绝被动接收,教导读者如何通过提问、归纳与反思,真正将作者的洞见转化为自己的认知","高效的检视阅读技巧:提供如何在有限时间内通过看目录、挑重点等方式,快速筛选并判断书目价值的核心能力","跨时代的经典效能:自1940年问世以来长盛不衰,其对逻辑拆解与深度思考的指导,是提升所有知识吸收效率的“总开关”"]},{id:"book-023",title:"检索力:打破信息差的科学方法",author:"龚芙蓉",cover:"https://cdn.weread.qq.com/weread/cover/58/cpplatform_feaxemubry47bnkzylqzwv/t6_cpplatform_feaxemubry47bnkzylqzwv1716796541.jpg",wereadLink:"https://weread.qq.com/web/reader/9de32810813ab8e00g018130#outline?noScroll=1",link:"https://book.douban.com/subject/36899979/",tags:["信息素养","检索能力","思维认知"],desc:"本书聚焦“检索力”这一核心技能,旨在帮助读者在信息过载的时代主动掌握“逆风而行”的搜索能力。作者龚芙蓉结合二十余年实践经验,用生动的人文与诺贝尔奖级科学案例,将枯燥的检索工具化为有趣的故事。不仅教授非线性、迭代式的搜索技巧,更致力于重塑读者的探究精神,赋予其走出“信息茧房”的勇气。",rating:4.2,highlights:["丰富的跨学科趣味案例驱动:用“张冠李戴的马克思名言”等生动故事,将枯燥繁琐的检索步骤转化为轻松的探索之旅","重塑非线性与迭代的搜索思维:打破按部就班的线性流程误区,建立以耐心与热情驱动的多轮迭代搜索心态","直击科研与职场的实用痛点:提供可快速落地的实操指南,帮助读者切实缩短科研周期、大幅提升工作效率","兼顾技能训练与人文底色:在教授如何利用和创造信息的同时,注重培养读者的信息素养与打破信息差的认知勇气"]},{id:"book-027",title:"原则",author:"瑞·达利欧",cover:"https://cdn.weread.qq.com/weread/cover/23/YueWen_921568/t6_YueWen_921568.jpg",wereadLink:"https://weread.qq.com/web/reader/848324405e0fe08483ab6a4#outline?noScroll=1",link:"https://book.douban.com/subject/27608239/",tags:["投资","方法论","自我管理"],desc:"桥水基金创始人瑞·达利欧总结四十余年投资、管理与人生经验的集大成之作。作者提出将生活和工作像机器一样系统化,确立了“极度求真”与“极度透明”两大基石,并通过“创意择优”与“基于可信度的决策机制”来迭代思维。书中包含500多条可操作原则,旨在帮助读者在复杂世界中保持开放心态、看清现实,并做出最优决策。",rating:4.8,highlights:["“极度求真”与“极度透明”的基石:主张诚实面对现实,通过公开决策过程来获取外部反馈,达成高效协作","创意择优与可信度加权机制:摒弃个人权威,利用数据驱动的讨论与可信度权重,在团队中选出最优方案","500余条可落地的原则清单:涵盖自我认知、投资决策、团队治理等场景,构建出一套随时可查的行动指南","系统化的“机器”思维:将生活与组织管理拆解为可维护、可迭代的系统,有效规避情绪化干扰"]},{id:"book-031",title:"价值",author:"张磊",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/958/33577958/t6_33577958.jpg",wereadLink:"https://weread.qq.com/web/reader/5be32a3072005be65bef195#outline?noScroll=1",link:"https://book.douban.com/subject/35188914/",tags:["价值投资","商业思维","创业"],desc:"高瓴资本创始人张磊首部个人及投资思想著作。全书通过回顾作者的个人求学与创业历程,系统阐释了“长期主义”与“重仓中国”的核心投资理念,并首次披露了高瓴投资的七大公式。作者将十余个典型投资案例与个人价值修养相结合,揭示了如何在不确定的商业环境中,通过坚持原则、敬畏规则与持续创新,创造长久、真实的价值。",rating:4.6,highlights:["系统构建长期主义哲学:首次系统化梳理“高瓴七大公式”,为读者提供从认知、决策到执行的价值投资实战模型","深度复盘经典实战案例:通过腾讯、货拉拉等真实商业案例,拆解如何在复杂市场中识别企业护城河与核心价值","投资之外的人文思考:延伸至教育、人才与科学观,展现作者作为顶尖投资者对社会责任与长期价值创造的深度思考","可视化的阅读体验:精选多幅手绘彩插与历史影像,将深刻的投资逻辑与企业成长叙事变得更加生动、直观"]},{id:"book-032",title:"纳瓦尔宝典",author:"埃里克·乔根森 / 纳瓦尔·拉维坎特",cover:"https://cdn.weread.qq.com/weread/cover/89/YueWen_44026191/t6_YueWen_44026191.jpg",wereadLink:"https://weread.qq.com/web/reader/e1e32b00729fc94fe1e824d#outline?noScroll=1",link:"https://book.douban.com/subject/35876121/",tags:["财富管理","个人成长","幸福哲学","思维认知"],desc:"这是一部汇集硅谷著名投资人纳瓦尔·拉维坎特过去十年关于财富与幸福思考的行动指南。全书摒弃了“致富靠运气”的传统观念,提出积累财富与幸福生活是可以通过学习掌握的技能。通过系统整理推特、播客与访谈中的智慧,本书为读者提供了如何在快速变化的科技与经济环境中,利用杠杆、发挥个人独特性,进而实现财务自由并获得持久内心满足的方法论。",rating:4.7,highlights:["将财富与幸福视为可习得的技能:打破运气论,强调通过建立杠杆、发挥个人独特性来获取非线性的回报","十年思想的系统化编纂:将碎片化的互联网智慧提炼为成体系的方法论,打造了数字时代个人的“行动指南”","兼顾财富积累与内心满足:不仅教导如何高效赚钱,更深入探讨如何通过阅读、冥想与长期主义,在职场成功中寻找内心的宁静","极具实操性的工具箱:提供如深度思考、刻意练习、构建个人品牌等具体路径,帮助读者在碎片化时代快速实现自我迭代"]},{id:"book-028",title:"优秀的绵羊",author:"威廉·德雷谢维奇",cover:"https://cdn.weread.qq.com/weread/cover/78/cpplatform_3ncoeekcuaectlzj9hf5nr/t6_cpplatform_3ncoeekcuaectlzj9hf5nr1744626569.jpg",wereadLink:"https://weread.qq.com/web/reader/1c0324c0813ab9d91g010aba#outline?noScroll=1",link:"https://book.douban.com/subject/26747208/",tags:["博雅教育","社会学","个人成长"],desc:"耶鲁大学前教授威廉·德雷谢维奇对美国常春藤精英教育体制的尖锐批判之作。作者通过二十余年的教学观察,指出顶尖学府培养出一群虽然聪明、优秀,但普遍焦虑、缺乏目标感且唯命是从的“优秀绵羊”。本书呼吁社会重新审视教育的本质,摆脱对名校与高薪的盲目崇拜,回归博雅教育,鼓励学生探索内在驱动力与自我价值。",rating:4.2,highlights:["犀利剖析精英教育弊端:直击常春藤体制培养出“聪明但没有灵魂”的学生的现实,反思唯名校与成绩论的单一评价体系","回归博雅教育的核心价值:批判应试化倾向,提倡给予学生更多探索、失败与重塑自我的空间,强调教育的本质在于帮助个体找到自我","提供挣脱外部期待的认知框架:既为迷茫的年轻人指明如何重建内在动力,也给家长和教育者敲响了关于“成功定义”的警钟","跨文化背景下的教育共鸣:尽管以美国精英教育为例,其对“教育内卷”与“缺乏目标感”的批判,引发了全球高压教育环境下的深层共鸣"]},{id:"book-029",title:"把自己变成稀缺资产",author:"何思平",cover:"https://cdn.weread.qq.com/weread/cover/98/cpplatform_ncqzerh3wdywn9mlc9cjna/t6_cpplatform_ncqzerh3wdywn9mlc9cjna1694085413.jpg",wereadLink:"https://weread.qq.com/web/reader/2fe326f0813ab821fg0146df#outline?noScroll=1",link:"https://book.douban.com/subject/36513648/",tags:["个人成长","思维认知","自我管理","投资理财"],desc:"这是一个将“人生”视作“公司”来经营的实战指南。作者何思平结合自身从严重口吃到演讲冠军、再到连续创业成功的跨越式经历,提出了“人生有限公司”的经营哲学。全书通过“生命立方体”模型,从认知、实践、精力管理三个维度拆解了如何通过持续输出与跨界学习,将自己打造为具有高壁垒、不可替代的“稀缺资产”。",rating:4.2,highlights:["提出“人生有限公司”经营哲学:倡导将自己视作最值得投资的上市公司,通过不断提升认知与能力壁垒,把“人生”经营成稀缺资产","系统化的“生命立方体”模型:从认知、实践、精力管理三个维度构建个人成长闭环,解决成长中的无序感与碎片化难题","聚焦个人核心竞争力:深度拆解认知力、学习力与共情力等稀缺能力的获取路径,教导读者在不同场景中通过实战验证自我价值","高度可操作的工具清单:摒弃鸡汤式说教,将自我成长拆解为具体的习惯改造与复盘清单,帮助读者在痛点与高光时刻都能通过反馈机制实现自我迭代"]},{id:"book-030",title:"成长第二曲线:跨越S型持续成长",author:"查尔斯·汉迪",cover:"https://cdn.weread.qq.com/weread/cover/65/YueWen_39427437/t6_YueWen_39427437.jpg",wereadLink:"https://weread.qq.com/web/reader/15d32ed072599d6d15daa86#outline?noScroll=1",link:"https://book.douban.com/subject/35531368/",tags:["管理学","个人成长","人生哲学","未来趋势"],desc:"管理大师查尔斯·汉迪的“人生长跑指南”。本书通过书信体形式,深度探讨了在数字时代背景下个人如何识别并跨越“第二曲线”。汉迪指出,无论组织还是个人,都受制于S型增长曲线,只有在第一曲线衰退前主动布局新的增长点,并保持内在价值的独立与进化,才能在不断变化的环境中获得持续且有意义的成长。",rating:4.5,highlights:["百岁管理大师的人生体悟:以书信体浓缩一生管理研究与个人经验,提供了从时间维度审视工作、学习与生活的全景视角","“第二曲线”理论的全面进阶:深刻揭示组织与个人的兴衰规律,教导读者如何在第一曲线的巅峰前就主动布局新的增长引擎","全场景下的持续进化方案:将第二曲线思维跨界应用于教育、职业规划、婚姻与家庭中,强调“变化才是常态”,鼓励持续自我重塑","面向Z世代的清醒处方:在科技高歌猛进的数字时代,提醒后人重视诚信、协作等软实力,保持独立判断,避免在算法与焦虑中迷失自我"]}],Me=[{id:"book-033",title:"枪炮、病菌与钢铁",author:"贾雷德·戴蒙德",cover:"https://cdn.weread.qq.com/weread/cover/99/YueWen_42766048/t6_YueWen_42766048.jpg",wereadLink:"https://weread.qq.com/web/reader/843329f0728c8ee08434fb1#outline?noScroll=1",link:"https://book.douban.com/subject/1813841/",tags:["人类历史","地理决定论","社会学","跨学科"],desc:"一部重新定义人类历史发展的宏大著作。作者贾雷德·戴蒙德通过生物学、地理学、人类学等多学科交叉视角,强有力地反驳了“种族决定论”和“西方文明优越论”。他提出,决定文明兴衰的关键并非种族,而是环境因素、地理格局以及动植物驯化的差异,这些自然条件的偶然性最终导致了技术、免疫力和权力结构的差异,从而重塑了现代世界的全球版图。",rating:4.8,highlights:["颠覆性的历史观:以环境与地理差异解释文明兴衰,有力冲击了长期流行的西方文明优越论,提供了理解人类历史的全新视角","跨学科的综合研究框架:巧妙融合生物学、地理学、历史学、社会学等多学科知识,重建人类文明演进的逻辑路径","系统揭示历史演变的机制:深入剖析农业、病菌传播与技术权力如何形成相互强化的循环,展示了文明发展背后复杂的资源互动","具备公共思想者的宏观视野:将严谨的科学研究转化为对人类命运与社会发展的深刻反思,为现代人理解自身在历史长河中的位置提供了绝佳参照"]},{id:"book-034",title:"中国社会各阶层分析",author:"梁晓声",cover:"https://cdn.weread.qq.com/weread/cover/0/yuewen_42682684/t6_yuewen_426826841728383400.jpg",wereadLink:"https://weread.qq.com/web/reader/085326e0728b493c085ade1#outline?noScroll=1",link:"https://book.douban.com/subject/35485315/",tags:["社会观察","阶层研究","现实主义"],desc:"茅盾文学奖得主梁晓声基于多年社会观察的现实题材力作。作者将快速变迁的中国社会划分为不同阶层,以平民视角细腻描摹各群体的生存状态、心理困境与阶层焦虑。全书不追求纯学术的枯燥分析,而是通过文学化的社会观察,勾勒出一幅当代中国社会的“浮世绘”,引导读者在时代坐标中找准定位,理解社会变迁背后的结构性逻辑。",rating:4.3,highlights:["平民视角下的社会“浮世绘”:通过细腻的笔触勾勒各阶层的生存逻辑与心理画像,帮助读者直观理解宏观社会结构","兼具现实痛点与精神深度:不仅呈现物质生活的差异,更深刻剖析阶层焦虑背后的价值困境,为理解当代社会提供人文参照","时代脉络中的命运书写:将个体命运置于历史事件的宏观背景中考察,展现了半个世纪以来社会变迁的深层脉络","文学笔触下的社会关怀:作为茅盾文学奖得主,作者通过富有故事性的叙事,既保留了批判性,又让文本充满了温暖的人文温度"]},{id:"book-021",title:"把自己作为方法",author:"项飙 / 吴琦",cover:"https://cdn.weread.qq.com/weread/cover/81/cpPlatform_3300003962/t6_cpPlatform_3300003962.jpg",wereadLink:"https://weread.qq.com/web/reader/d7532f80813ab680cg012708#outline?noScroll=1",link:"https://book.douban.com/subject/35092383/",tags:["社会学","访谈录","思想方法"],desc:"两代学人项飙与吴琦历时三年、跨越五地的深度对话实录。本书从项飙的个人经验切入,探讨了中国社会近半个世纪的变迁、全球化与民粹主义等宏大议题。在自我泛滥与思想受困的时代,作者提出“把自己作为方法”,指导读者如何在全球化年代重新定位自我、重建“附近”,并在个人体验与宏观叙事之间搭建起思考与行动的桥梁。",rating:4.6,highlights:["以“自我”切入回应宏大议题:示范如何在个人真实体验与全球化、社会变迁等宏观叙事之间搭建认知的桥梁","提供重建“附近”的行动指南:在自我泛滥的潮流中,指导读者如何审视现实,创造性地建设身边的小世界","兼具学术深度与极高可读性:将人类学、社会学的深刻理论洞察,巧妙融入生动的田野故事与双人生活化对谈中","跨越三年的思想碰撞:历时三年、跨越五地的持续对话结集,反思知识生产与公共讨论的真实处境"]}],Te=[{id:"book-035",title:"百岁人生:长寿时代的生活和工作",author:"琳达·格拉顿 / 安德鲁·斯科特",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/860/22902860/t6_22902860.jpg",wereadLink:"https://weread.qq.com/web/reader/30c323e0715d784c30c1e1b#outline?noScroll=1",link:"https://book.douban.com/subject/30245089/",tags:["人生规划","长寿时代","社会学"],desc:"基于伦敦商学院的经典课程,作者琳达·格拉顿与安德鲁·斯科特提出,面对一半概率活到100岁的长寿时代,传统的“学习-工作-退休”三段式人生模式已彻底失效。本书指导读者如何重新设计人生,通过拥抱多阶段人生模型,在更长的生命周期中平衡工作、学习与休闲,并强调在财务资产之外,更要注重健康、友谊与知识等“无形资产”的持续投入与增值。",rating:4.3,highlights:["重构人生模式:打破传统的“三段式”生活范式,提出充满弹性的“多阶段人生”模型,让工作与学习不再是线性的重复","从关注财务到“无形资产”:除了养老金,强调健康、友谊、社交网络与心理韧性等“无形资产”才是维持长寿生活质量的核心动力","职场与转型的系统规划:提供针对长寿时代的职业设计思路,涵盖何时转型、如何投资自身、怎样应对不确定性等实战框架","社会与制度的深度洞察:探讨长寿如何冲击养老金体系、劳动力市场与企业模式,帮助个人在宏观变革中把握主动权"]},{id:"book-00043",title:"重启吧!我的健康人生",author:"兰根·查特吉",cover:"https://cdn.weread.qq.com/weread/cover/80/cpplatform_kbrswv3bm7cix2zlyo6wtx/t6_cpplatform_kbrswv3bm7cix2zlyo6wtx1716362285.jpg",wereadLink:"https://weread.qq.com/web/reader/e8a32e80813ab8de4g0191c2#outline?noScroll=1",link:"https://book.douban.com/subject/36899697/",tags:["生活方式","预防医学","身心健康","自我管理"],desc:"英国临床医生基于20多年行医经验写就。本书主张“生活方式即良药”,围绕休息、饮食、运动和睡眠四个领域设计了20个微小行动计划,帮助现代人通过低成本的习惯改变逆转慢性问题。",rating:4.6,highlights:["提出99%的健康取决于日常习惯而非医学治疗,强调整体干预","构建“4×5”微行动框架,涵盖休息、饮食、运动、睡眠四个维度的20个小改变","兼顾科学深度与极简实操,如“12小时进食窗口”、“10分钟高强度运动”","关注现代职场人痛点,提供“小投入、大回报”的可叠加身心健康投资策略"]},{id:"book-00040",title:"你是你吃出来的:吃对少生病,病了这样吃",author:"夏萌",cover:"https://cdn.weread.qq.com/weread/cover/86/YueWen_920661/t6_YueWen_920661.jpg",wereadLink:"https://weread.qq.com/web/reader/7bb32c305e0c557bbdeab81#outline?noScroll=1",link:"https://book.douban.com/subject/27590675/",tags:["饮食科普","营养学","健康管理"],desc:"前安贞医院营养科主任夏萌结合十余年临床经验写成。本书颠覆“低油低脂”误区,提出回归进化的“65%植物+35%动物”膳食配比,并针对14种常见慢病给出“四分法”饮食干预方案,帮助读者重建健康饮食观。",rating:5,highlights:["指出多数慢病源于“蛋白质缺乏式营养不良”,打破常规低油低脂迷思","提出清晰量化的“65%植物类+35%动物类”科学饮食结构","针对冠心病、高血压等14种常见慢病提供实操性极强的“四分法”菜单","源于十万+真实临床病例,强调“一日三餐才是真正的保健品”"]},{id:"book-00041",title:"你是你吃出来的2",author:"夏萌",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/883/35905883/t6_35905883.jpg",wereadLink:"https://weread.qq.com/web/reader/40532d007223e15b4052fae#outline?noScroll=1",link:"https://book.douban.com/subject/35340053/",tags:["饮食指导","科普","疾病防治"],desc:"聚焦高血压、高脂血症、糖尿病等7大常见慢病,从临床营养医学角度逐一破除诸如“血压高不能吃肉”等饮食误区,提供系统的“上游-中游-下游”疾病防控思路与个体化营养处方。",rating:4.6,highlights:["专攻7大常见慢性病,为患者提供针对性的“生病了怎么吃”个体化指导","科学辟谣,破除“血压高不能吃肉”、“胆固醇高不能吃鸡蛋”等常见误区","梳理疾病发生因果链条,帮助读者从源头找到健康干预的着力点","提供从一日三餐、运动到心态调养的具体可操作生活方式清单"]}],Ge=JSON.parse('{"title":"好书推荐","description":"读书心得、推荐书籍和阅读技巧","frontmatter":{"title":"好书推荐","date":"2024-01-01T16:00:00.000Z","description":"读书心得、推荐书籍和阅读技巧","categories":["growth"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png","permalink":"/growth/books","tags":["悦读时光","资源推荐"]},"headers":[],"relativePath":"growth/books.md","filePath":"30.悦读时光/01.好书推荐.md"}'),Ne={name:"growth/books.md"},De=Object.assign(Ne,{setup(n){return(b,t)=>(a(),r("div",null,[t[0]||(t[0]=e("h1",{id:"好书推荐",tabindex:"-1"},[l("好书推荐 "),e("a",{class:"header-anchor",href:"#好书推荐","aria-label":"Permalink to “好书推荐”"},"​")],-1)),t[1]||(t[1]=e("h2",{id:"_1-ai-与数学思维",tabindex:"-1"},[l("1. AI 与数学思维 "),e("a",{class:"header-anchor",href:"#_1-ai-与数学思维","aria-label":"Permalink to “1. AI 与数学思维”"},"​")],-1)),t[2]||(t[2]=e("blockquote",null,[e("p",null,[l("在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操作系统”, "),e("strong",null,"理解 AI,本质上是理解数据、数学与逻辑如何重构这个世界"),l("。")]),e("p",null,"这套书单从数学思维的底层逻辑出发,让我们理解 ChatGPT 等大模型背后的计算机制,将硬核的神经网络与概率统计转化为优化生活的决策工具。它不仅能界定机器智能的边界,更颠覆了传统的“目标论”,倡导在不确定性中通过“踏脚石”思维寻找突破性创新的可能。AI 的研究实践告诉我们,伟大的突破往往无法被预设,唯有拥抱“寻宝者思维”才能在未知中偶遇奇迹,我们需要颠覆传统的创新范式。")],-1)),h(k,{books:g(Be)},null,8,["books"]),t[3]||(t[3]=M('about site background

2.1 产品 Sense 与创造

在产品成功率不足 10% 的残酷市场中,好的创造绝非源于盲目的灵感,而是建立在极致的风险验证与深刻的人性洞察之上。

卓越的产品力不仅关乎功能设计,更是一场关于策略与创造力的刻意练习:我们需要通过“预型”思维以极低成本进行真实数据验证,确保我们在投入开发前是在“做对产品”;并利用用户模型、交易模型等底层框架,将零散的需求转化为可获利的商业方案。

',4)),h(k,{books:g(Ie)},null,8,["books"]),t[4]||(t[4]=e("h3",{id:"_2-2-商业化",tabindex:"-1"},[l("2.2 商业化 "),e("a",{class:"header-anchor",href:"#_2-2-商业化","aria-label":"Permalink to “2.2 商业化”"},"​")],-1)),t[5]||(t[5]=e("blockquote",null,[e("p",null,[l("在追逐“独角兽”和规模扩张的狂热迷思之后,真正的商业高手正在重新回归本质:"),e("strong",null,"盈利才是企业的核心护城河。"),l(" 这套书单为我们揭示了一种"),e("strong",null,"更具韧性的商业路径——“小而美”的极简经营"),l("。它教导我们如何拒绝低效的内卷与忙碌,通过“做更少但创造更多价值”的思维,打造在不确定时代下依然能保持稳定现金流的“慢公司”。")]),e("p",null,[e("strong",null,"商业的成功,往往源于敢于挑战“难而正确”的事"),l("。从皮克斯如何建立允许失败的创意土壤,到 Waze 如何通过解决被忽视的痛点实现跨越式成长,这些世界级案例证明了:卓越的组织不仅需要极简的流程与高效的分布式协作(远程办公),更需要一种“冷静”的文化,将利润置于规模之上。")])],-1)),h(k,{books:g(We)},null,8,["books"]),t[6]||(t[6]=e("h2",{id:"_3-效率与效能",tabindex:"-1"},[l("3. 效率与效能 "),e("a",{class:"header-anchor",href:"#_3-效率与效能","aria-label":"Permalink to “3. 效率与效能”"},"​")],-1)),t[7]||(t[7]=e("blockquote",null,[e("p",null,[l("在信息过载与高压竞争的现代环境中,平庸与卓越的分水岭不再是做事的速度,而是"),e("strong",null,"决策的精度与责任的边界"),l("。这套书单为我们提供了一套从个人认知到组织协作的“效能防线”:首先,它"),e("strong",null,"引导我们完成从“时钟”到“罗盘”的思维跨越,打破盲目追求速度的迷思,确保将核心精力倾注在真正产生长远复利的“重要非紧急”事务之上"),l("。 真正的效能源于对复杂性的科学驾驭:")]),e("ul",null,[e("li",null,"通过“清单革命”式的认知防护,我们将最佳实践外化为可靠的防错系统,弥补人类在极端环境下的认知局限;"),e("li",null,"“猴子管理法”则以生动的视角重塑了职场协作的责任逻辑,教我们通过有效授权拒绝无谓的干扰,释放战略思考的精力;")])],-1)),h(k,{books:g(Ye)},null,8,["books"]),t[8]||(t[8]=e("h2",{id:"_4-学习与成长",tabindex:"-1"},[l("4. 学习与成长 "),e("a",{class:"header-anchor",href:"#_4-学习与成长","aria-label":"Permalink to “4. 学习与成长”"},"​")],-1)),t[9]||(t[9]=e("blockquote",null,[e("p",null,[l("在信息爆炸与快速变革的时代,"),e("strong",null,"真正的成长不再是知识的被动堆砌,而是认知系统的彻底迭代"),l("。这套书单为我们构建了一个从底层思维到人生经营的闭环:")]),e("ul",null,[e("li",null,"首先,通过批判性思维与深度阅读夯实“元能力”,在泛滥的信息中识别本质,将他人的洞见转化为自己的血肉;"),e("li",null,"其次,利用“检索力”打破信息差,确保自己在任何领域都能快速获取高质量资源,掌握逆风而行的主动权。")]),e("p",null,[e("strong",null,"人生不是一场盲目的长跑,而是一场基于“原则”的精密经营"),l("。从达利欧的系统化决策,到纳瓦尔的财富与幸福逻辑,这些智者教导我们如何利用杠杆、坚持长期主义,将自己视作一家“人生有限公司”来经营。我们需要摆脱“优秀绵羊”式的被动驱动,通过识别成长的“第二曲线”,在巅峰时刻主动寻求突破,将自己打造成不可替代的稀缺资产。阅读这些经典,不仅是为了习得技能,更是为了在算法与焦虑的夹击中,重塑内心的宁静与独立判断的勇气。")])],-1)),h(k,{books:g($e)},null,8,["books"]),t[10]||(t[10]=e("h2",{id:"_5-人文社科",tabindex:"-1"},[l("5. 人文社科 "),e("a",{class:"header-anchor",href:"#_5-人文社科","aria-label":"Permalink to “5. 人文社科”"},"​")],-1)),t[11]||(t[11]=e("blockquote",null,[e("p",null,"在宏观历史与微观现实间构建认知:在碎片化与不确定性并存的时代,穿透表象、直达本质的洞察力成为必需。这套单为我们开启了两扇窗:"),e("ul",null,[e("li",null,"一扇望向万年文明的宏大坐标,通过《枪炮、病菌与钢铁》的跨学科视野,拆解地理环境如何冷酷而偶然地重塑全球版图,彻底颠覆“文明优越论”的傲慢;"),e("li",null,"另一扇则照向当下社会的真实肌理,在梁晓声对各阶层生存困境的细腻描摹中,读懂大时代变革背后隐秘的结构性逻辑与阶层焦虑。")]),e("p",null,[e("strong",null,"人文思考的终极价值,在于如何将宏大叙事转化为个人的行动力量"),l("。正如项飙所倡导的“把自己作为方法”,这些著作不仅是知识的传递,更是思维的松绑。它们教导我们不再做时代的被动旁观者,而是学会在个人体验与宏观世界之间搭建桥梁,通过重建“附近”的小世界,在喧嚣中找准自我的定位。")])],-1)),h(k,{books:g(Me)},null,8,["books"]),t[12]||(t[12]=e("h2",{id:"_6-健康生活",tabindex:"-1"},[l("6. 健康生活 "),e("a",{class:"header-anchor",href:"#_6-健康生活","aria-label":"Permalink to “6. 健康生活”"},"​")],-1)),t[13]||(t[13]=e("img",{src:T,style:{width:"100%","border-radius":"8px","margin-bottom":"20px"},alt:"about site background"},null,-1)),t[14]||(t[14]=e("blockquote",null,[e("p",null,[l("在面临大概率活到100岁的“长寿时代”,传统的线性人生模式正在失效。我们需要对“健康”进行一次彻底的认知重构:"),e("strong",null,"健康不再仅仅是“没有疾病”,而是支撑我们跨越漫长生命周期、应对多阶段人生挑战的最核心“无形资产”"),l("。想要让这套生命系统长期平稳运行,真正的解法并不在医院的处方笺里,而是隐藏在我们每天的日常选择中。")]),e("p",null,[l("决定我们长期健康状态的,有 99 %取决于日常习惯。我们需要"),e("strong",null,"在休息、饮食、运动、睡眠这四个高频生活维度中,植入微小但杠杆率极高的改变"),l("(例如12小时进食窗口、10分钟高强度运动、睡前屏蔽数字通知等)。用最低的执行成本,置换身心状态的巨大回报。")])],-1)),h(k,{books:g(Te)},null,8,["books"])]))}});export{Ge as __pageData,De as default}; +import{f as x,i as z,o as a,b as h,T as B,w as I,c as r,g as _,z as P,a as e,k as v,t as c,F as p,m as f,e as l,A as W,_ as A,s as j,h as Y,n as $,d as M,u as g}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const T="/img/cover/health_bg.png",N={class:"book-panel__drawer"},V={class:"book-panel__header-meta"},G={class:"book-panel__title"},D={class:"book-panel__author"},F={class:"book-panel__body"},Z={class:"book-panel__top-bar"},H={class:"book-panel__top-left"},J={class:"book-panel__tags"},O={key:0,class:"book-panel__rating"},R={class:"stars"},E={key:0,viewBox:"0 0 24 24",fill:"currentColor"},K={key:1,viewBox:"0 0 24 24",class:"half-star"},Q=["id"],X=["clip-path"],U={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},ee={class:"rating-text"},te={class:"book-panel__links"},oe=["href"],ae={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},le=["href"],re={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},ne={class:"book-panel__section"},se={class:"book-panel__desc"},ie={key:0,class:"book-panel__section"},de={class:"book-panel__highlights"},ce=x({__name:"BookDetailPanel",props:{book:{},open:{type:Boolean},heroColor:{},tagColors:{}},emits:["close"],setup(n,{emit:b}){const t=b;return(w,o)=>(a(),z(W,{to:"body"},[h(B,{name:"panel-slide"},{default:I(()=>[n.open&&n.book?(a(),r("div",{key:0,class:"book-panel",onClick:o[2]||(o[2]=P(i=>t("close"),["self"]))},[e("div",{class:"book-panel__overlay",onClick:o[0]||(o[0]=i=>t("close"))}),e("div",N,[e("div",{class:"book-panel__header",style:v({background:n.heroColor})},[e("button",{class:"book-panel__close",title:"关闭",onClick:o[1]||(o[1]=i=>t("close"))},[...o[3]||(o[3]=[e("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none"},[e("path",{d:"M12 4L4 12M4 4l8 8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])]),e("div",V,[e("h2",G,c(n.book.title),1),e("p",D,c(n.book.author),1)])],4),e("div",F,[e("div",Z,[e("div",H,[e("div",J,[(a(!0),r(p,null,f(n.book.tags,(i,m)=>(a(),r("span",{key:i,class:"book-panel__tag",style:v({background:n.tagColors[m%n.tagColors.length].bg,color:n.tagColors[m%n.tagColors.length].text})},c(i),5))),128))]),n.book.rating!=null?(a(),r("div",O,[o[8]||(o[8]=e("span",{class:"rating-label"},"推荐指数:",-1)),e("div",R,[(a(),r(p,null,f(5,i=>e("span",{key:i,class:"star"},[i<=Math.floor(n.book.rating)?(a(),r("svg",E,[...o[4]||(o[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):i===Math.ceil(n.book.rating)&&n.book.rating%1!==0?(a(),r("svg",K,[e("defs",null,[e("clipPath",{id:"clip-"+n.book.id},[...o[5]||(o[5]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,Q)]),o[6]||(o[6]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#clip-"+n.book.id+")"},null,8,X)])):(a(),r("svg",U,[...o[7]||(o[7]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",ee,c(n.book.rating.toFixed(1)),1)])):_("",!0)]),e("div",te,[e("a",{href:n.book.link,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",ae,[...o[9]||(o[9]=[e("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])),o[10]||(o[10]=l(" 豆瓣 ",-1))],8,oe),n.book.wereadLink?(a(),r("a",{key:0,href:n.book.wereadLink,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",re,[...o[11]||(o[11]=[e("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z",fill:"currentColor"},null,-1)])])),o[12]||(o[12]=l(" 微信读书 ",-1))],8,le)):_("",!0)])]),o[15]||(o[15]=e("div",{class:"book-panel__divider"},null,-1)),e("section",ne,[o[13]||(o[13]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"📖"),l(" 内容简介 ")],-1)),e("p",se,c(n.book.desc),1)]),n.book.highlights&&n.book.highlights.length>0?(a(),r("section",ie,[o[14]||(o[14]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"✨"),l(" 书籍亮点 ")],-1)),e("ul",de,[(a(!0),r(p,null,f(n.book.highlights,(i,m)=>(a(),r("li",{key:m,class:"book-panel__highlight-item"},c(i),1))),128))])])):_("",!0)])])])):_("",!0)]),_:1})]))}}),he=A(ce,[["__scopeId","data-v-1ddfc013"]]),be={class:"book-list"},ue=["onClick"],ge=["src","alt"],ke={class:"book-cover__overlay"},pe={key:0,class:"book-cover__hint"},we=["href"],me={class:"book-info"},_e={class:"book-info__title"},fe={class:"book-info__author"},qe={key:0,class:"book-info__rating"},ve={class:"stars"},je={key:0,viewBox:"0 0 24 24",fill:"currentColor"},Le={key:1,viewBox:"0 0 24 24",class:"half-star"},ye=["id"],Se=["clip-path"],xe={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},Pe={class:"rating-text"},Ae={class:"book-info__tags"},Ce={class:"book-info__desc"},ze=x({__name:"BookRecommend",props:{books:{}},setup(n){const b=["linear-gradient(135deg, #e8f0fe 0%, #c7d9fd 100%)","linear-gradient(135deg, #e6f4ea 0%, #b7dfc4 100%)","linear-gradient(135deg, #fff3e0 0%, #ffd9a0 100%)","linear-gradient(135deg, #fce4ec 0%, #f8b4c8 100%)","linear-gradient(135deg, #ede7f6 0%, #cdb8ee 100%)","linear-gradient(135deg, #e0f7fa 0%, #9ee8f0 100%)"],t=[{bg:"#e8f0fe",text:"#3b5bdb"},{bg:"#e6f4ea",text:"#2e7d32"},{bg:"#fff3e0",text:"#e65100"},{bg:"#fce4ec",text:"#c2185b"},{bg:"#ede7f6",text:"#6a1b9a"},{bg:"#e0f7fa",text:"#00838f"}],w=j(null),o=j(0),i=j(!1),m=Y(()=>b[o.value%b.length]);function C(q,d){q.withPanel!==!1&&(w.value?.id===q.id&&i.value?L():(w.value=q,o.value=d,i.value=!0))}function L(){i.value=!1,setTimeout(()=>{w.value=null},300)}return(q,d)=>(a(),r(p,null,[e("div",be,[(a(!0),r(p,null,f(n.books,(s,y)=>(a(),r("div",{key:s.id,class:$(["book-card",{"book-card--active":w.value?.id===s.id&&i.value}]),onClick:u=>C(s,y)},[e("div",{class:"book-cover",style:v({background:b[y%b.length]})},[s.cover?(a(),r("img",{key:0,src:s.cover,alt:s.title,class:"book-cover__img"},null,8,ge)):_("",!0),e("div",ke,[s.withPanel!==!1?(a(),r("span",pe,"点击查看详情")):(a(),r("a",{key:1,href:s.link,target:"_blank",rel:"noopener",class:"book-cover__hint",onClick:d[0]||(d[0]=P(()=>{},["stop"]))},"查看豆瓣",8,we))])],4),e("div",me,[e("div",_e,"《"+c(s.title)+"》",1),e("div",fe,c(s.author),1),s.rating!=null?(a(),r("div",qe,[e("div",ve,[(a(),r(p,null,f(5,u=>e("span",{key:u,class:"star"},[u<=Math.floor(s.rating)?(a(),r("svg",je,[...d[1]||(d[1]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):u===Math.ceil(s.rating)&&s.rating%1!==0?(a(),r("svg",Le,[e("defs",null,[e("clipPath",{id:"card-clip-"+s.id},[...d[2]||(d[2]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,ye)]),d[3]||(d[3]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#card-clip-"+s.id+")"},null,8,Se)])):(a(),r("svg",xe,[...d[4]||(d[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",Pe,c(s.rating.toFixed(1)),1)])):_("",!0),e("div",Ae,[(a(!0),r(p,null,f(s.tags,(u,S)=>(a(),r("span",{key:u,class:"tag",style:v({background:t[S%t.length].bg,color:t[S%t.length].text})},c(u),5))),128))]),e("p",Ce,c(s.desc),1)])],10,ue))),128))]),h(he,{book:w.value,open:i.value,"hero-color":m.value,"tag-colors":t,onClose:L},null,8,["book","open","hero-color"])],64))}}),k=A(ze,[["__scopeId","data-v-fd79cd55"]]),Be=[{id:"book-001",title:"心中有数:生活中的数学思维",author:"刘雪峰",cover:"https://cdn.weread.qq.com/weread/cover/39/3300018939/t6_3300018939.jpg",wereadLink:"https://weread.qq.com/web/reader/df6323a0813ab6de5g019a31#outline?noScroll=1",link:"https://book.douban.com/subject/35749693/",tags:["数学思维","科普","决策"],desc:"本书通过大量贴近日常的例子,展示数学思维如何优化我们的生活决策。作者用概率、统计、最优化等数学工具,为生活、职场、人际交往中的权衡问题提供分析框架,帮助读者在面对不确定性时像计算机一样找到“最优解”。",rating:4.9,highlights:["将大数定律、最小二乘法等硬核数学概念与日常生活巧妙结合","提供应对不确定性和多目标抉择的科学决策框架","强调数学不仅是公式计算,更是看世界、优化人生的高效思维工具"]},{id:"book-0020",title:"智慧的疆界:从图灵机到人工智能",author:"周志明",cover:"https://cdn.weread.qq.com/weread/cover/92/YueWen_23637052/t6_YueWen_23637052.jpg",wereadLink:"https://weread.qq.com/web/reader/b9732f007168ac3cb976eca#outline?noScroll=1",link:"https://book.douban.com/subject/30379536/",tags:["人工智能","科技史","通识读物"],desc:"本书是一部面向大众的人工智能通识读物。作者周明以时间为主线,将人工智能的发展历程、关键人物与里程碑事件串联起来,从五个维度展开:学术理论、历史沿革、技术应用、研究成果以及面临的困难与未来挑战。全书旨在用通俗的语言和巧妙的结构,把人工智能从“阳春白雪”的学术殿堂带到公众视野,帮助读者理解 AI 能做什么、做不到什么,以及背后的技术与思想根源。",rating:5,highlights:["以时间为主线,清晰梳理人工智能的发展脉络与里程碑","深入浅出,用通俗语言将复杂的学术理论带入公众视野","客观剖析,帮助读者准确界定AI“能做什么”与“做不到什么”"]},{id:"book-004",title:"为什么伟大不能被计划",author:"肯尼斯·斯坦利 / 乔尔·雷曼",cover:"https://cdn.weread.qq.com/weread/cover/22/cpplatform_wfdzhk1dx7ig9aep4gagof/t6_cpplatform_wfdzhk1dx7ig9aep4gagof1686304376.jpg",wereadLink:"https://weread.qq.com/web/reader/0bf32020813ab7e6bg016510#outline?noScroll=1",link:"https://book.douban.com/subject/36357804/",tags:["人工智能","创新思维","认知科学"],desc:"本书由两位前沿AI科学家合著,提出了颠覆传统“目标-计划”思维的全新视角。结合AI研究实践,书中论证了伟大成就往往并非出自精心设计的蓝图,而是源于对未知的好奇、随机探索与不断试错。通过“寻宝者思维”和“踏脚石模型”等方法,为读者在高度不确定的环境中激发突破性创新提供了具体的行动框架。",rating:4.5,highlights:["颠覆传统的“目标论”,论证伟大成就源自对未知的好奇与无边界的探索","提供“寻宝者思维”“踏脚石模型”“新奇性探索”三大可操作的认知与实践工具","扎根OpenAI等前沿机构的实证背景,其启发意义跨学科适用于科研、商业及人生规划"]},{id:"book-003",title:"这就是ChatGPT",author:"斯蒂芬·沃尔弗拉姆",cover:"https://cdn.weread.qq.com/weread/cover/24/cpplatform_4cn8w4tmgzntjobg9ffeny/t6_cpplatform_4cn8w4tmgzntjobg9ffeny1703648785.jpg",wereadLink:"https://weread.qq.com/web/reader/74332a90813ab86c4g019d98#outline?noScroll=1",link:"https://book.douban.com/subject/36449803/",tags:["人工智能","大模型","ChatGPT"],desc:"本书由著名科学家斯蒂芬·沃尔弗拉姆撰写,全景式拆解了ChatGPT的内部工作机制。作者用通俗语言解释了神经网络和自回归架构等核心技术,探讨了简单的计算规则如何涌现出令人惊叹的智能,帮助读者深刻理解大语言模型为何能生成高质量的人类水平文本。",rating:4.3,highlights:["全景拆解核心技术:深入浅出地讲清ChatGPT背后的神经网络与自回归架构","独特的大师视角:将大模型视为“简单的计算规则”涌现复杂智能的绝佳范例","兼顾技术与商业影响:结合算力规模与行业冲击,全面探讨AI时代的机遇与挑战"]},{id:"book-0030",title:"人工智能:现代方法(第4版)(上下册)",author:"[美]斯图尔特·罗素(Stuart Russell) / [美]彼得·诺维格(Peter Norvig)",cover:"https://cdn.weread.qq.com/weread/cover/33/cpplatform_8rthznqfhsjuz5fswwn6kx/t6_cpplatform_8rthznqfhsjuz5fswwn6kx1675928213.jpg",wereadLink:"https://weread.qq.com/web/reader/fc332020813ab7942g0102ad#outline?noScroll=1",link:"https://book.douban.com/subject/36152133",tags:["人工智能","教材","理论实践结合","经典著作","计算机科学"],desc:"本书是人工智能领域的经典权威教材,系统、深入地探讨AI领域的理论与实践,以统一风格融合当今流行的AI思想与术语到前沿应用中,真正实现理论与实践相结合。全书分7个部分共28章,理论部分涵盖逻辑、概率、连续数学、感知、推理、学习、行动及公平、信任、社会公益和安全等社会议题;实践部分选取微电子设备、机器人行星探测器、在线服务、AlphaZero、人形机器人、自动驾驶、AI辅助医疗等热门场景。由加州大学伯克利分校教授斯图尔特·罗素与前谷歌研究总监彼得·诺维格联合撰写,被全球1500多所高校采用,适合作为AI相关专业本科生和研究生教材,也可作为专业人员的参考书。",rating:5,highlights:["体系完整覆盖面广,7个部分28章构成自洽的AI理论主线,涵盖核心理论与前沿议题","理论与实践并重,既阐述核心算法与模型,又展示在热门场景中的落地实例,便于知识迁移","紧跟前沿关注社会议题,专门讨论AI伦理与安全,引导思考技术与社会的交互责任","一站式权威参考,兼具教材属性与专业参考价值,适配高校教学与产业实践双重需求","现代理念贯穿始终,通过最新案例体现AI进展与行业趋势,呈现“活”的AI生态"]},{id:"book-0031",title:"模型思维:简化世界的人工智能模型",author:"龚才春",cover:"https://cdn.weread.qq.com/weread/cover/26/YueWen_38601826/t6_YueWen_38601826.jpg",wereadLink:"https://weread.qq.com/web/reader/5a8326e0724d04625a8e740#outline?noScroll=1",link:"https://book.douban.com/subject/35488925/",tags:["模型思维","人工智能","算法模型","机器学习","入门实践"],desc:"本书聚焦“如何用模型简化世界”的核心主题,将人工智能在现实业务中面临的难题归纳为权重、状态、序列、表示、相似、分类六大问题,并围绕该框架讲解对应模型思路与算法。书中弱化复杂数学公式,以大量生活化、业务化案例阐释模型理论与落地场景,帮助读者建立“模型—场景”映射关系,降低AI模型学习门槛,既是人工智能初学者的入门读物,也可为企业工程师、科研人员提供实践参考,适合各类读者学习并将模型思维应用到生活与工作中。",rating:4.8,highlights:["以“六大问题”框架串联AI模型,可按场景快速检索适配的模型思路","侧重落地实践,搭配大量生活化与业务案例,助力建立“模型—场景”映射","降低学习门槛,少数学公式、多直观案例,兼顾初学者与工程落地需求","受众群体广泛,适配工程师、科研人员及普通读者,可迁移模型思维至实际场景"]},{id:"book-005",title:"你看起来好像……我爱你:AI的工作原理以及它为这个世界带来的稀奇古怪",author:"贾内尔·沙内",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/970/39481970/t6_39481970.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=f9a32c10725a7272f9a14f9&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/35407136/",tags:["人工智能","趣味科普","漫画算法"],desc:"这是一部写给普通读者的人工智能趣味科普读物。作者贾内尔·沙内结合生活化的比喻和超级可爱的漫画,深入浅出地讲解了AI的基本工作原理、实际应用及其局限性。书中通过大量幽默的AI实验与“翻车”案例,带领读者在轻松捧腹的氛围中,准确理解算法能做什么、不能做什么。",rating:4.2,highlights:["幽默可爱的漫画导览:用插图和通俗语言将“深度学习”“神经网络”等抽象概念可视化","丰富的趣味实验案例:通过精选的AI“翻车”故事,直观揭示算法背后的逻辑与潜在偏差","客观建立AI认知:在展示AI强大能力的同时,明确指出其在语境理解和处理模糊信息时的短板"]},{id:"book-006",title:"AI经济:机器人时代的工作、财富和社会福利",author:"罗杰·布特尔",cover:"https://cdn.weread.qq.com/weread/cover/30/YueWen_38229387/t6_YueWen_38229387.jpg",wereadLink:"https://weread.qq.com/web/reader/653320207247558b65332f5#outline?noScroll=1",link:"https://book.douban.com/subject/35433060/",tags:["人工智能","经济学","社会学","未来趋势"],desc:"本书由知名经济学家罗杰·布特尔撰写,聚焦AI与机器人技术对经济和社会的深远影响。作者拨开艰涩的科技术语,从经济增长、通货膨胀及财富分配等宏观视角,理性剖析AI革命将如何重塑我们的工作、教育与休闲方式,以乐观的姿态为迎接未来的社会变革指明路径。",rating:4.1,highlights:["宏观经济视角解析:深入探讨AI对经济增长、通货膨胀、财富与权力分配的真实影响","全景式社会洞察:全面检视机器人时代下,人类教育体系、工作模式与休闲形态的深刻变革","理性乐观的未来指南:拒绝技术恐慌,为个人与社会在变迁的世界中提供清晰可行的应对计划"]}],Ie=[{id:"book-007",title:"做对产品",author:"阿尔贝托·索维亚",cover:"https://cdn.weread.qq.com/weread/cover/53/YueWen_40877841/t6_YueWen_40877841.jpg",wereadLink:"https://weread.qq.com/web/reader/254322a0726fbf1125472c9#outline?noScroll=1",link:"https://book.douban.com/subject/35607961/",tags:["产品思维","创业","商业方法论"],slogan:"为什么有些产品注定失败,有些产品却能大获成功?来自谷歌与斯坦福的产品工具和产品战术。",desc:"谷歌首任产品总监阿尔贝托·索维亚结合在谷歌、斯坦福的实战经验与自身代价高昂的创业失败经历,总结出的一套防败手册。书中揭示了新产品高达90%的“市场失败律”,并创新性地提出了“预型”(Pre型)理念,指导团队在正式开发前,以极低的成本和真实数据快速验证关键假设,确保把创意打磨成“正确的它”。",rating:4.8,highlights:["揭示残酷的市场失败律:正视90%新产品必然失败的商业常态,并以此倒推破局的实战方法论","首创“预型”(Pre型)概念:提供8大测试工具,主张用极低成本和小规模试错快速逼近正确的产品形态","强调真实数据驱动决策:辅以特斯拉、谷歌等完整案例回溯,教导团队将决策建立在客观证据而非主观直觉之上"]},{id:"book-009",title:"俞军产品方法论",author:"俞军",cover:"https://cdn.weread.qq.com/weread/cover/47/YueWen_28165041/t6_YueWen_28165041.jpg",wereadLink:"https://weread.qq.com/web/reader/1cc3252071adc3b11cc0162#outline?noScroll=1",link:"https://book.douban.com/subject/34907971/",tags:["产品思维","产品经理","互联网","方法论"],desc:"“百度贴吧之父”俞军二十余年产品实践与思考的系统总结。本书将产品经理定义为“以科学方法研究人性并转化为商业方案”的交叉学科,深入解析了用户模型、交易模型和决策模型三大核心框架,为产品人提供了一套在不确定环境中权衡多方利益的实战指南。",rating:4.4,highlights:["沉淀二十年行业经验:从广为流传的“PM12条”到系统化的产品哲学,展现顶尖产品经理的认知迭代史","三大核心模型拆解:深度剖析用户模型与交易模型,指导如何通过让交易发生来创造“有利可图”的真实用户价值","兼顾科学与人文视角:强调批判性思维的运用,并清晰梳理了从新人到顶尖大牛的能力进阶路径"]},{id:"book-016",title:"策略产品经理:模型与方法论",author:"青十五",cover:"https://cdn.weread.qq.com/weread/cover/31/cpplatform_gheeqe7hjb2czyzthzf5nm/t6_cpplatform_gheeqe7hjb2czyzthzf5nm1735654872.jpg",wereadLink:"https://weread.qq.com/web/reader/4de32800813ab98d5g01286b#outline?noScroll=1",link:"https://book.douban.com/subject/35218721/",tags:["产品经理","策略产品","算法思维"],desc:"本书围绕“策略产品经理”这一复合角色,系统性地构建了从理念到实践的完整知识框架。作者从机器学习理论与经济学视角出发,结合推荐、搜索、广告、风控等核心业务场景,深入浅出地讲解了函数建模与策略应用,并对策略产品经理的核心能力与团队建设给出了详尽指导。",rating:3.9,highlights:["系统化的角色认知建构:清晰界定策略产品经理的时代背景、职责边界与工作内容,为从业者夯实概念基础","跨学科的模型与业务结合:利用机器学习的函数方法论与经济学理论,深度剖析推荐、搜索、广告、风控及定价等真实业务场景的解法","硬核算法的通俗化解析:深入浅出地拆解机器学习本质、常见算法及深度学习前沿技术,帮助产品经理真正理解策略背后的技术支撑","可落地的团队建设指南:全面拆解数据分析、沟通与项目管理等核心能力项,并针对不同产品生命周期提供策略团队的组建思路"]},{id:"book-008",title:"创造:用非传统方式做有价值的事",author:"托尼·法德尔",cover:"https://cdn.weread.qq.com/weread/cover/53/cpPlatform_tzdqT27m3vyaHnX5o8Vbwk/t6_cpPlatform_tzdqT27m3vyaHnX5o8Vbwk.jpg",wereadLink:"https://weread.qq.com/web/reader/13832ac0813ab725fg018645#outline?noScroll=1",link:"https://book.douban.com/subject/36071759/",tags:["产品思维","管理学","创业"],desc:"本书是iPod、iPhone、Nest等爆款产品幕后推手托尼·法德尔30余年职业经历的智慧结晶。作者毫无保留地分享了他在产品设计、团队管理、职业选择和公司经营等方面的“非传统”方法论,帮助读者在各自的领域内刻意练习创造力,做真正有价值的事。",rating:4.9,highlights:["源自顶级创新者的实战经验:连续打造iPod、iPhone等划时代产品的亲历复盘与真实反面教训","覆盖从个人到公司的完整路径:系统解答职业选择、产品设计、团队管理与企业经营等核心问题","提供可复制的“非传统”方法论:强调“亮点思维”与持续复盘,教导读者以反常规的视角刻意练习创造力"]},{id:"book-010",title:"产品思维",author:"刘飞",cover:"https://cdn.weread.qq.com/weread/cover/56/YueWen_25568738/t6_YueWen_25568738.jpg",wereadLink:"https://weread.qq.com/web/reader/38332ce0718625e23831fe7#outline?noScroll=1",link:"https://book.douban.com/subject/33456375/",tags:["产品思维","产品经理","个人成长","互联网"],desc:"实战派产品经理刘飞结合在一线大厂的丰富经验,围绕产品人如何实现能力跃迁展开的底层能力指南。全书掰开揉碎地讲解了认知盲点与实践痛点,通过“认知用户”“创造价值”和“产品落地”三大核心板块,系统拆解了从建立用户模型、高质量决策到快速迭代验证的完整产品方法论。",rating:4.2,highlights:["三大核心板块系统拆解:完整覆盖“认知用户”“创造价值”与“产品落地”的产品闭环","直击痛点的一线实战经验:毫无保留地分享实战中新手迫切需要却难以获取的隐性知识","聚焦底层能力与思维升维:不仅教授落地方法,更注重决策质量与思维模式的跃迁"]},{id:"book-011",title:"产品思维:创新设计的六条法则(全彩)",author:"张印帅",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/253/26687253/t6_26687253.jpg",wereadLink:"https://weread.qq.com/web/reader/a823297071973715a8202b0#outline?noScroll=1",link:"https://book.douban.com/subject/34859540/",tags:["产品设计","创新思维","方法论","设计灵感"],desc:"本书围绕作者张印帅多年产品设计实践总结出的6条创意公式展开,旨在帮助读者系统化地获取设计灵感并解决创新难题。全书通过大量经典案例,详细解析了从发散思考到重组创新的全过程,并在最后提供了从需求到草图再到最终方案的完整项目落地演示。",rating:4,highlights:["提炼6条实用的创新设计公式:将发散思考与重组创新系统化,打造可复用的设计灵感库","丰富的经典设计案例解析:详细展示“问题+方法”、“1+1>2”等法则在真实产品设计中的应用","呈现从需求到方案的落地全流程:通过综合案例演示概念打磨与草图设计的实战过程"]}],We=[{id:"book-012",title:"小而美:持续盈利的经营法则",author:"萨希尔·拉文吉亚",cover:"https://cdn.weread.qq.com/weread/cover/91/cpplatform_vl4abrrrqgxnry833gcrtt/t6_cpplatform_vl4abrrrqgxnry833gcrtt1677578056.jpg",wereadLink:"https://weread.qq.com/web/reader/02932980813ab7a43g012e77#outline?noScroll=1",link:"https://book.douban.com/subject/36280425/",tags:["创业","商业模式","极简主义"],desc:"本书打破了硅谷盲目追求“独角兽”的扩张迷思,聚焦于“规模不是唯一出路”的商业现实。作者结合创立Gumroad的亲身经历,提出了“极简创业经营”理念。全书指导创业者与管理者如何通过从社区切入、聚焦核心能力、精简团队等方式,用最少的资源打造出不仅能活下去,而且还能持续盈利的“慢公司”。",rating:5,highlights:["颠覆传统的扩张迷思:提出盈利至上而非规模至上,将持续赚钱和实际利润作为衡量企业成功的核心标准","可落地的极简法则:总结出“越少越好”“瞄准前100个客户”等7条创业清单,构建从定位、产品到销售的完整闭环","社区驱动的商业逻辑:提倡从虚拟社区入手,以“贡献-创作-教学”的方式低成本验证产品形态并获取早期信任","打造高韧性的“慢公司”:结合疫情与远程办公背景,展示如何通过精简组织和分布式协作,在不确定的时代保持稳定的现金流"]},{id:"book-013",title:"做难而正确的事:进步最快的方式",author:"尤里·莱文",cover:"https://cdn.weread.qq.com/weread/cover/53/cpplatform_bunxjyygj8m9stnwcgwqqk/t6_cpplatform_bunxjyygj8m9stnwcgwqqk1728876401.jpg",wereadLink:"https://weread.qq.com/web/reader/aa032fb0813ab9461g018406#outline?noScroll=1",link:"https://book.douban.com/subject/37054102/",tags:["创业","产品思维","商业管理"],desc:"Waze联合创始人尤里·莱文写给创业者和管理者的行动指南。作者结合连续打造两家估值超10亿美元公司的实战经验,提出“先做难事、再做正确事”的核心哲学。全书通过13个阶段的系统拆解,指导读者如何寻找真正的用户痛点、构建高价值产品,并在不确定的环境中通过不断复盘实现跨越式成长。",rating:4.9,highlights:["世界级创业者的实战复盘:连续打造两家独角兽公司的创始人亲授,提供极具可信度的第一手商业洞察与落地经验","践行“难而正确”的核心哲学:强调不追逐短期热点,而是去解决效率极低却被忽视的痛点,以此建立坚实的商业护城河","覆盖从0到1的全周期指南:系统拆解从寻找痛点、产品构建、融资运作到团队管理的13个关键阶段,提供可操作的行动清单","直面失败的心理韧性建设:不回避挫折,将“从错误中学习”提炼为核心方法,为身处高压环境的读者提供情感共鸣与心理支持","广泛的跨场景应用价值:书中给出的决策工具不仅适用于初创团队,同样能为大公司内部创新及个人职业认知升级提供指导"]},{id:"book-015",title:"创新公司:皮克斯的启示",author:"艾德·卡特姆",cover:"https://cdn.weread.qq.com/weread/cover/20/YueWen_814380/t6_YueWen_814380.jpg",wereadLink:"https://weread.qq.com/web/reader/2ef329605c6d2c2efeeb70d#outline?noScroll=1",link:"https://book.douban.com/subject/26314955/",tags:["创新思维","组织文化","企业管理"],desc:"皮克斯联合创始人艾德·卡特姆结合《玩具总动员》《机器人瓦力》等经典动画的幕后制作故事,深度揭示了皮克斯如何长期保持创意领先的秘密。本书不仅详述了皮克斯从初创到壮大的历程,更抽丝剥茧地解析了其在团队文化、跨部门协作、人才培养和允许失败等方面的独特创意管理机制,为各类组织提供了可复制的创新指南。",rating:4.5,highlights:["揭秘“皮克斯奇迹”背后的管理哲学:通过14部经典动画的真实幕后故事,展示创意从无到有、再到票房口碑双赢的全过程","深度解析创新土壤的搭建:阐述如何通过允许失败的文化、流程设计和激励机制,将“不断推动创新”彻底融入公司DNA","提供跨行业可复用的管理工具:总结项目立项、跨部门协作与风险控制的具体做法,为不同规模和行业的企业提供落地的实战模板"]},{id:"book-017",title:"重来:更为简单的商业思维",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/1/YueWen_635904/t6_YueWen_635904.jpg",wereadLink:"https://weread.qq.com/web/reader/0363228059b4000363b29e9#outline?noScroll=1",link:"https://book.douban.com/subject/5320866/",tags:["商业思维","创业","企业管理","极简主义"],desc:"37signals联合创始人基于十年创业实战经验,写给职场人与创业者的极简商业法则。本书摒弃了传统的MBA术语与复杂的商业教条,以“辛辣、直接、靠谱”的语言,颠覆了关于项目管理、人才招聘、产品设计与企业文化的常规认知,教导读者如何在真实的商业世界中“做更少,但创造更多价值”。",rating:4.3,highlights:["颠覆传统的极简商业哲学:反叛复杂的商业教条,主张“做更少,创造更多”,通过最小可行步骤降低试错成本并快速迭代","源自37signals的十年实战精髓:覆盖从项目管理、产品设计到市场营销的完整链条,提供不讲废话、拿来即用的行动指南","重塑职场与团队管理的认知:提出诸多务实且反常规的观点(如严苛的简历筛选标准),打造基于信任与结果导向的高效团队","适用面极广的实操手册:无论是寻求突破的精英企业家、小团队创业者,还是渴望提升工作效率的普通职场人,都能直接对照落地"]},{id:"book-018",title:"重来2:更为简单高效的远程工作方式",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/38/YueWen_635721/t6_YueWen_635721.jpg",wereadLink:"https://weread.qq.com/web/reader/46b3220059b34946b517012#outline?noScroll=1",link:"https://book.douban.com/subject/25861795/",tags:["企业管理","远程工作","工作方式","团队协作"],desc:"Basecamp(原37signals)创始人基于自身团队多年的全球分布式协作经验,为企业和个人提供的一套远程工作“思想升级包”。本书直面行业争议,破解了“创新只能面对面”及“文化会淡化”等常见误区,并系统提供了借助异步沟通、协作工具与流程设计来打造高效、人性化远程团队的实战指南。",rating:4.1,highlights:["提供思想层面的“升级包”:直击传统办公室痛点,用真实数据与反例打破关于远程办公的固有认知误区","第一手的分布式团队管理经验:Basecamp创始人亲授,展示如何突破地域限制招募顶尖人才,并保持健康、高效的工作节奏","系统可落地的工具与流程方法:详述如何利用协作工具降低管理成本,让远程工作从“特殊福利”真正转变为可持续的主流组织模式"]},{id:"book-019",title:"重来3:做得更少,但赚得更多",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/62/cpplatform_tqth8pnlq8h9ing5uciwhi/t6_cpplatform_tqth8pnlq8h9ing5uciwhi1748502715.jpg",wereadLink:"https://weread.qq.com/web/reader/b6a32ed0813ab9fb5g015181#outline?noScroll=1",link:"https://book.douban.com/subject/37367276/",tags:["工作方式","反内卷","企业文化"],desc:"Basecamp创始人带来的“反内卷”与“反过度忙碌”的管理指南。作者基于近20年带领54人团队服务全球10万家企业的成功经验,直击现代企业盲目扩张、无效加班等八大症结。全书主张以“冷静”颠覆“忙碌”文化,指导企业和个人通过40小时工作制、拒绝KPI和异步沟通等极简方式,在不牺牲生活质量的前提下实现健康发展与持续盈利。",rating:4.2,highlights:["以“冷静”颠覆“忙碌”文化:倡导高效比高产更重要,用稳定的节奏替代疯狂加班的内卷常态","直击现代企业八大症结:深度诊断快速扩张、无效加班、会议泛滥与目标绑架等痛点,提供对症下药的思路","提供四大可落地的管理工具:引入40小时工作制、拒绝硬性KPI、推行非实时沟通,坚持利润优先于规模","源自Basecamp的真实反向案例:展示“小而美”团队如何通过“少做但做好”的策略,跑赢新经济并保持高利润"]}],Ye=[{id:"book-024",title:"要事第一",author:"史蒂芬·柯维 / 罗杰·梅里尔 / 丽贝卡·梅里尔",cover:"https://cdn.weread.qq.com/weread/cover/57/yuewen_33091834/t6_yuewen_330918341686208943.jpg",wereadLink:"https://weread.qq.com/web/reader/f523268071f8f0faf52b806#outline?noScroll=1",link:"https://book.douban.com/subject/1028372/",tags:["时间管理","自我管理","经典思维"],desc:"作为《高效能人士的七个习惯》的延伸与加强版,本书提出了颠覆传统的“第四代时间管理”方法。作者强调,比提升做事速度(时钟)更重要的是找准人生的方向(罗盘)。全书指导读者通过自我意识的觉醒,以原则和价值观为中心,将精力聚焦于“重要而不紧急”的长期目标上,从而在繁忙的现代生活中真正做到“要事第一”。",rating:4.5,highlights:["从“时钟”到“罗盘”的思维跨越:打破一味追求“更快、更努力”的传统效率迷思,确立人生方向优先的哲学","经典的四象限时间管理矩阵:引导读者跳出紧急事务的“救火圈”,将核心精力倾注于第二象限(重要但不紧急)的高价值事务中","生动的“大石块”优先法则:通过“先放石头再倒水”的直观比喻,确保关键目标与核心使命在碎片化日程中得到绝对的优先落实","以原则为中心的自我驱动框架:不仅提供日程安排工具,更通过唤醒良知,帮助读者在工作、家庭等多元角色中实现真正的平衡与统合综效"]},{id:"book-025",title:"清单革命",author:"阿图·葛文德",cover:"https://cdn.weread.qq.com/weread/cover/12/cpPlatform_rudGZN3LDW5m9FBYr7rMBA/t6_cpPlatform_rudGZN3LDW5m9FBYr7rMBA.jpg",wereadLink:"https://weread.qq.com/web/reader/18332f80813ab7292g010065#outline?noScroll=1",link:"https://book.douban.com/subject/27168564/",tags:["管理学","认知科学","工作效率"],desc:"这是一部针对现代复杂世界所撰写的“认知防护手册”。作者阿图·葛文德通过医疗、建筑、投资等高风险领域的真实案例,揭示了人类在海量信息与高压环境下极易出现的判断疏忽。书中提出了“权力下放、简单至上、人为根本、持续改善”四大原则,指导读者将最佳实践外化为可操作的清单,从而在复杂系统中构建一道低成本、高回报的安全防线。",rating:4.6,highlights:["直面复杂时代的认知瓶颈:揭示在海量信息流中,清单如何作为“认知防护网”弥补人类记忆力与注意力分配的先天不足","提供兼具理念与落地的四大原则:通过“权力下放、简单至上、人为根本、持续改善”,构建一套可复用的清单设计哲学","扎实的医学实证背书:以手术感染率骤降等真实临床数据为支撑,证明清单思维在医疗、建筑、投资等高风险领域的跨行业普适性","简洁而具力量的流程创新:强调清单服务于人而非取代人,是帮助专业人士在高压环境下将复杂环节显性化、流程化的必备工具"]},{id:"book-020",title:"别让猴子跳回背上",author:"威廉·安肯三世",cover:"https://cdn.weread.qq.com/weread/cover/69/cpPlatform_7fFoBQ7dtqgABGSTskpJSN/t6_cpPlatform_7fFoBQ7dtqgABGSTskpJSN.jpg",wereadLink:"https://weread.qq.com/web/reader/9fc32010813ab7291g0196bd#outline?noScroll=1",link:"https://book.douban.com/subject/36103994/",tags:["时间管理","领导力","项目管理"],desc:"这是一部以“猴子”生动隐喻任务与责任的经典管理学著作。作者威廉·安肯三世深刻剖析了管理者常被琐事淹没的时间困境,并提出系统化的“猴子管理法”。通过明确任务归属、责任递减与有效授权,指导管理者如何把不属于自己的“猴子”交出去,从而释放精力专注于最高价值的战略思考,实现团队与个人的共同成长。",rating:4.3,highlights:["生动有趣的“猴子”隐喻:将枯燥的责任划分与任务流转具象化,直击职场中“忙碌却低效”的痛点","实用高效的“三步交接”法则:通过明确期望、授予资源与约定检查点,彻底避免下属的待办任务重新跳回自己背上","重塑时间管理与人才培养体系:指导高层放权、中层辅导、基层自发,将企业的成功真正建立在员工自主性的提升之上"]}],$e=[{id:"book-022",title:"学会提问(原书第12版)",author:"尼尔·布朗 / 斯图尔特·基利",cover:"https://cdn.weread.qq.com/weread/cover/68/YueWen_39980443/t6_YueWen_39980443.jpg",wereadLink:"https://weread.qq.com/web/reader/e6832d3072620d9be68aabf#outline?noScroll=1",link:"https://book.douban.com/subject/35513147/",tags:["批判性思维","逻辑学","认知科学","经典书"],desc:"这是一部培养批判性思维的经典实战指南。作者尼尔·布朗与斯图尔特·基利结合长期的教学与研究实践,提供了一套系统化、可操作的提问流程。全书通过大量真实情境案例,教导读者如何在信息泛滥的时代识别隐含假设、区分事实与观点,用高质量的“判断性问题”看透事物本质,从而做出更理性的决策。",rating:5,highlights:["聚焦批判性思考的核心能力:系统拆解“如何提出好问题”的思维过程,帮助读者在复杂信息中迅速抓住本质","提供可落地的提问与评估框架:从背景信息、关键概念到逻辑推理,构建一条完整的判断性问题链条","丰富的真实场景应用示范:结合课堂讨论、写作、日常沟通与职场决策等多元场景,让理论能“立即上手”","打造实用的思考检查单:不仅讲透“提问的价值”,更提供可直接转化为日常习惯的思维检查表,助你有效避开认知陷阱"]},{id:"book-026",title:"如何阅读一本书",author:"莫提默·J. 艾德勒 / 查尔斯·范多伦",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/810/23723810/t6_23723810.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=272326407169ff22272934f&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/1013208/",tags:["阅读方法","思维训练","经典"],desc:"阅读领域的“元方法”指南。作者艾德勒与范多伦将阅读划分为基础阅读、检视阅读、分析阅读与主题阅读四个进阶层次,并强调阅读是一项主动的思考活动。本书不仅提供了从“快速略读”到“系统拆解论点”的实操技巧,更致力于通过提问、归纳与批判,将阅读转化为训练理解力、批判力与终身学习的终极工具。",rating:5,highlights:["构建系统的四级阅读框架:从检视阅读到分析阅读再到主题阅读,为读者提供了一套从入门到精通的进阶路径","强调“主动与批判”的阅读观:拒绝被动接收,教导读者如何通过提问、归纳与反思,真正将作者的洞见转化为自己的认知","高效的检视阅读技巧:提供如何在有限时间内通过看目录、挑重点等方式,快速筛选并判断书目价值的核心能力","跨时代的经典效能:自1940年问世以来长盛不衰,其对逻辑拆解与深度思考的指导,是提升所有知识吸收效率的“总开关”"]},{id:"book-023",title:"检索力:打破信息差的科学方法",author:"龚芙蓉",cover:"https://cdn.weread.qq.com/weread/cover/58/cpplatform_feaxemubry47bnkzylqzwv/t6_cpplatform_feaxemubry47bnkzylqzwv1716796541.jpg",wereadLink:"https://weread.qq.com/web/reader/9de32810813ab8e00g018130#outline?noScroll=1",link:"https://book.douban.com/subject/36899979/",tags:["信息素养","检索能力","思维认知"],desc:"本书聚焦“检索力”这一核心技能,旨在帮助读者在信息过载的时代主动掌握“逆风而行”的搜索能力。作者龚芙蓉结合二十余年实践经验,用生动的人文与诺贝尔奖级科学案例,将枯燥的检索工具化为有趣的故事。不仅教授非线性、迭代式的搜索技巧,更致力于重塑读者的探究精神,赋予其走出“信息茧房”的勇气。",rating:4.2,highlights:["丰富的跨学科趣味案例驱动:用“张冠李戴的马克思名言”等生动故事,将枯燥繁琐的检索步骤转化为轻松的探索之旅","重塑非线性与迭代的搜索思维:打破按部就班的线性流程误区,建立以耐心与热情驱动的多轮迭代搜索心态","直击科研与职场的实用痛点:提供可快速落地的实操指南,帮助读者切实缩短科研周期、大幅提升工作效率","兼顾技能训练与人文底色:在教授如何利用和创造信息的同时,注重培养读者的信息素养与打破信息差的认知勇气"]},{id:"book-027",title:"原则",author:"瑞·达利欧",cover:"https://cdn.weread.qq.com/weread/cover/23/YueWen_921568/t6_YueWen_921568.jpg",wereadLink:"https://weread.qq.com/web/reader/848324405e0fe08483ab6a4#outline?noScroll=1",link:"https://book.douban.com/subject/27608239/",tags:["投资","方法论","自我管理"],desc:"桥水基金创始人瑞·达利欧总结四十余年投资、管理与人生经验的集大成之作。作者提出将生活和工作像机器一样系统化,确立了“极度求真”与“极度透明”两大基石,并通过“创意择优”与“基于可信度的决策机制”来迭代思维。书中包含500多条可操作原则,旨在帮助读者在复杂世界中保持开放心态、看清现实,并做出最优决策。",rating:4.8,highlights:["“极度求真”与“极度透明”的基石:主张诚实面对现实,通过公开决策过程来获取外部反馈,达成高效协作","创意择优与可信度加权机制:摒弃个人权威,利用数据驱动的讨论与可信度权重,在团队中选出最优方案","500余条可落地的原则清单:涵盖自我认知、投资决策、团队治理等场景,构建出一套随时可查的行动指南","系统化的“机器”思维:将生活与组织管理拆解为可维护、可迭代的系统,有效规避情绪化干扰"]},{id:"book-031",title:"价值",author:"张磊",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/958/33577958/t6_33577958.jpg",wereadLink:"https://weread.qq.com/web/reader/5be32a3072005be65bef195#outline?noScroll=1",link:"https://book.douban.com/subject/35188914/",tags:["价值投资","商业思维","创业"],desc:"高瓴资本创始人张磊首部个人及投资思想著作。全书通过回顾作者的个人求学与创业历程,系统阐释了“长期主义”与“重仓中国”的核心投资理念,并首次披露了高瓴投资的七大公式。作者将十余个典型投资案例与个人价值修养相结合,揭示了如何在不确定的商业环境中,通过坚持原则、敬畏规则与持续创新,创造长久、真实的价值。",rating:4.6,highlights:["系统构建长期主义哲学:首次系统化梳理“高瓴七大公式”,为读者提供从认知、决策到执行的价值投资实战模型","深度复盘经典实战案例:通过腾讯、货拉拉等真实商业案例,拆解如何在复杂市场中识别企业护城河与核心价值","投资之外的人文思考:延伸至教育、人才与科学观,展现作者作为顶尖投资者对社会责任与长期价值创造的深度思考","可视化的阅读体验:精选多幅手绘彩插与历史影像,将深刻的投资逻辑与企业成长叙事变得更加生动、直观"]},{id:"book-032",title:"纳瓦尔宝典",author:"埃里克·乔根森 / 纳瓦尔·拉维坎特",cover:"https://cdn.weread.qq.com/weread/cover/89/YueWen_44026191/t6_YueWen_44026191.jpg",wereadLink:"https://weread.qq.com/web/reader/e1e32b00729fc94fe1e824d#outline?noScroll=1",link:"https://book.douban.com/subject/35876121/",tags:["财富管理","个人成长","幸福哲学","思维认知"],desc:"这是一部汇集硅谷著名投资人纳瓦尔·拉维坎特过去十年关于财富与幸福思考的行动指南。全书摒弃了“致富靠运气”的传统观念,提出积累财富与幸福生活是可以通过学习掌握的技能。通过系统整理推特、播客与访谈中的智慧,本书为读者提供了如何在快速变化的科技与经济环境中,利用杠杆、发挥个人独特性,进而实现财务自由并获得持久内心满足的方法论。",rating:4.7,highlights:["将财富与幸福视为可习得的技能:打破运气论,强调通过建立杠杆、发挥个人独特性来获取非线性的回报","十年思想的系统化编纂:将碎片化的互联网智慧提炼为成体系的方法论,打造了数字时代个人的“行动指南”","兼顾财富积累与内心满足:不仅教导如何高效赚钱,更深入探讨如何通过阅读、冥想与长期主义,在职场成功中寻找内心的宁静","极具实操性的工具箱:提供如深度思考、刻意练习、构建个人品牌等具体路径,帮助读者在碎片化时代快速实现自我迭代"]},{id:"book-028",title:"优秀的绵羊",author:"威廉·德雷谢维奇",cover:"https://cdn.weread.qq.com/weread/cover/78/cpplatform_3ncoeekcuaectlzj9hf5nr/t6_cpplatform_3ncoeekcuaectlzj9hf5nr1744626569.jpg",wereadLink:"https://weread.qq.com/web/reader/1c0324c0813ab9d91g010aba#outline?noScroll=1",link:"https://book.douban.com/subject/26747208/",tags:["博雅教育","社会学","个人成长"],desc:"耶鲁大学前教授威廉·德雷谢维奇对美国常春藤精英教育体制的尖锐批判之作。作者通过二十余年的教学观察,指出顶尖学府培养出一群虽然聪明、优秀,但普遍焦虑、缺乏目标感且唯命是从的“优秀绵羊”。本书呼吁社会重新审视教育的本质,摆脱对名校与高薪的盲目崇拜,回归博雅教育,鼓励学生探索内在驱动力与自我价值。",rating:4.2,highlights:["犀利剖析精英教育弊端:直击常春藤体制培养出“聪明但没有灵魂”的学生的现实,反思唯名校与成绩论的单一评价体系","回归博雅教育的核心价值:批判应试化倾向,提倡给予学生更多探索、失败与重塑自我的空间,强调教育的本质在于帮助个体找到自我","提供挣脱外部期待的认知框架:既为迷茫的年轻人指明如何重建内在动力,也给家长和教育者敲响了关于“成功定义”的警钟","跨文化背景下的教育共鸣:尽管以美国精英教育为例,其对“教育内卷”与“缺乏目标感”的批判,引发了全球高压教育环境下的深层共鸣"]},{id:"book-029",title:"把自己变成稀缺资产",author:"何思平",cover:"https://cdn.weread.qq.com/weread/cover/98/cpplatform_ncqzerh3wdywn9mlc9cjna/t6_cpplatform_ncqzerh3wdywn9mlc9cjna1694085413.jpg",wereadLink:"https://weread.qq.com/web/reader/2fe326f0813ab821fg0146df#outline?noScroll=1",link:"https://book.douban.com/subject/36513648/",tags:["个人成长","思维认知","自我管理","投资理财"],desc:"这是一个将“人生”视作“公司”来经营的实战指南。作者何思平结合自身从严重口吃到演讲冠军、再到连续创业成功的跨越式经历,提出了“人生有限公司”的经营哲学。全书通过“生命立方体”模型,从认知、实践、精力管理三个维度拆解了如何通过持续输出与跨界学习,将自己打造为具有高壁垒、不可替代的“稀缺资产”。",rating:4.2,highlights:["提出“人生有限公司”经营哲学:倡导将自己视作最值得投资的上市公司,通过不断提升认知与能力壁垒,把“人生”经营成稀缺资产","系统化的“生命立方体”模型:从认知、实践、精力管理三个维度构建个人成长闭环,解决成长中的无序感与碎片化难题","聚焦个人核心竞争力:深度拆解认知力、学习力与共情力等稀缺能力的获取路径,教导读者在不同场景中通过实战验证自我价值","高度可操作的工具清单:摒弃鸡汤式说教,将自我成长拆解为具体的习惯改造与复盘清单,帮助读者在痛点与高光时刻都能通过反馈机制实现自我迭代"]},{id:"book-030",title:"成长第二曲线:跨越S型持续成长",author:"查尔斯·汉迪",cover:"https://cdn.weread.qq.com/weread/cover/65/YueWen_39427437/t6_YueWen_39427437.jpg",wereadLink:"https://weread.qq.com/web/reader/15d32ed072599d6d15daa86#outline?noScroll=1",link:"https://book.douban.com/subject/35531368/",tags:["管理学","个人成长","人生哲学","未来趋势"],desc:"管理大师查尔斯·汉迪的“人生长跑指南”。本书通过书信体形式,深度探讨了在数字时代背景下个人如何识别并跨越“第二曲线”。汉迪指出,无论组织还是个人,都受制于S型增长曲线,只有在第一曲线衰退前主动布局新的增长点,并保持内在价值的独立与进化,才能在不断变化的环境中获得持续且有意义的成长。",rating:4.5,highlights:["百岁管理大师的人生体悟:以书信体浓缩一生管理研究与个人经验,提供了从时间维度审视工作、学习与生活的全景视角","“第二曲线”理论的全面进阶:深刻揭示组织与个人的兴衰规律,教导读者如何在第一曲线的巅峰前就主动布局新的增长引擎","全场景下的持续进化方案:将第二曲线思维跨界应用于教育、职业规划、婚姻与家庭中,强调“变化才是常态”,鼓励持续自我重塑","面向Z世代的清醒处方:在科技高歌猛进的数字时代,提醒后人重视诚信、协作等软实力,保持独立判断,避免在算法与焦虑中迷失自我"]}],Me=[{id:"book-033",title:"枪炮、病菌与钢铁",author:"贾雷德·戴蒙德",cover:"https://cdn.weread.qq.com/weread/cover/99/YueWen_42766048/t6_YueWen_42766048.jpg",wereadLink:"https://weread.qq.com/web/reader/843329f0728c8ee08434fb1#outline?noScroll=1",link:"https://book.douban.com/subject/1813841/",tags:["人类历史","地理决定论","社会学","跨学科"],desc:"一部重新定义人类历史发展的宏大著作。作者贾雷德·戴蒙德通过生物学、地理学、人类学等多学科交叉视角,强有力地反驳了“种族决定论”和“西方文明优越论”。他提出,决定文明兴衰的关键并非种族,而是环境因素、地理格局以及动植物驯化的差异,这些自然条件的偶然性最终导致了技术、免疫力和权力结构的差异,从而重塑了现代世界的全球版图。",rating:4.8,highlights:["颠覆性的历史观:以环境与地理差异解释文明兴衰,有力冲击了长期流行的西方文明优越论,提供了理解人类历史的全新视角","跨学科的综合研究框架:巧妙融合生物学、地理学、历史学、社会学等多学科知识,重建人类文明演进的逻辑路径","系统揭示历史演变的机制:深入剖析农业、病菌传播与技术权力如何形成相互强化的循环,展示了文明发展背后复杂的资源互动","具备公共思想者的宏观视野:将严谨的科学研究转化为对人类命运与社会发展的深刻反思,为现代人理解自身在历史长河中的位置提供了绝佳参照"]},{id:"book-034",title:"中国社会各阶层分析",author:"梁晓声",cover:"https://cdn.weread.qq.com/weread/cover/0/yuewen_42682684/t6_yuewen_426826841728383400.jpg",wereadLink:"https://weread.qq.com/web/reader/085326e0728b493c085ade1#outline?noScroll=1",link:"https://book.douban.com/subject/35485315/",tags:["社会观察","阶层研究","现实主义"],desc:"茅盾文学奖得主梁晓声基于多年社会观察的现实题材力作。作者将快速变迁的中国社会划分为不同阶层,以平民视角细腻描摹各群体的生存状态、心理困境与阶层焦虑。全书不追求纯学术的枯燥分析,而是通过文学化的社会观察,勾勒出一幅当代中国社会的“浮世绘”,引导读者在时代坐标中找准定位,理解社会变迁背后的结构性逻辑。",rating:4.3,highlights:["平民视角下的社会“浮世绘”:通过细腻的笔触勾勒各阶层的生存逻辑与心理画像,帮助读者直观理解宏观社会结构","兼具现实痛点与精神深度:不仅呈现物质生活的差异,更深刻剖析阶层焦虑背后的价值困境,为理解当代社会提供人文参照","时代脉络中的命运书写:将个体命运置于历史事件的宏观背景中考察,展现了半个世纪以来社会变迁的深层脉络","文学笔触下的社会关怀:作为茅盾文学奖得主,作者通过富有故事性的叙事,既保留了批判性,又让文本充满了温暖的人文温度"]},{id:"book-021",title:"把自己作为方法",author:"项飙 / 吴琦",cover:"https://cdn.weread.qq.com/weread/cover/81/cpPlatform_3300003962/t6_cpPlatform_3300003962.jpg",wereadLink:"https://weread.qq.com/web/reader/d7532f80813ab680cg012708#outline?noScroll=1",link:"https://book.douban.com/subject/35092383/",tags:["社会学","访谈录","思想方法"],desc:"两代学人项飙与吴琦历时三年、跨越五地的深度对话实录。本书从项飙的个人经验切入,探讨了中国社会近半个世纪的变迁、全球化与民粹主义等宏大议题。在自我泛滥与思想受困的时代,作者提出“把自己作为方法”,指导读者如何在全球化年代重新定位自我、重建“附近”,并在个人体验与宏观叙事之间搭建起思考与行动的桥梁。",rating:4.6,highlights:["以“自我”切入回应宏大议题:示范如何在个人真实体验与全球化、社会变迁等宏观叙事之间搭建认知的桥梁","提供重建“附近”的行动指南:在自我泛滥的潮流中,指导读者如何审视现实,创造性地建设身边的小世界","兼具学术深度与极高可读性:将人类学、社会学的深刻理论洞察,巧妙融入生动的田野故事与双人生活化对谈中","跨越三年的思想碰撞:历时三年、跨越五地的持续对话结集,反思知识生产与公共讨论的真实处境"]}],Te=[{id:"book-035",title:"百岁人生:长寿时代的生活和工作",author:"琳达·格拉顿 / 安德鲁·斯科特",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/860/22902860/t6_22902860.jpg",wereadLink:"https://weread.qq.com/web/reader/30c323e0715d784c30c1e1b#outline?noScroll=1",link:"https://book.douban.com/subject/30245089/",tags:["人生规划","长寿时代","社会学"],desc:"基于伦敦商学院的经典课程,作者琳达·格拉顿与安德鲁·斯科特提出,面对一半概率活到100岁的长寿时代,传统的“学习-工作-退休”三段式人生模式已彻底失效。本书指导读者如何重新设计人生,通过拥抱多阶段人生模型,在更长的生命周期中平衡工作、学习与休闲,并强调在财务资产之外,更要注重健康、友谊与知识等“无形资产”的持续投入与增值。",rating:4.3,highlights:["重构人生模式:打破传统的“三段式”生活范式,提出充满弹性的“多阶段人生”模型,让工作与学习不再是线性的重复","从关注财务到“无形资产”:除了养老金,强调健康、友谊、社交网络与心理韧性等“无形资产”才是维持长寿生活质量的核心动力","职场与转型的系统规划:提供针对长寿时代的职业设计思路,涵盖何时转型、如何投资自身、怎样应对不确定性等实战框架","社会与制度的深度洞察:探讨长寿如何冲击养老金体系、劳动力市场与企业模式,帮助个人在宏观变革中把握主动权"]},{id:"book-00043",title:"重启吧!我的健康人生",author:"兰根·查特吉",cover:"https://cdn.weread.qq.com/weread/cover/80/cpplatform_kbrswv3bm7cix2zlyo6wtx/t6_cpplatform_kbrswv3bm7cix2zlyo6wtx1716362285.jpg",wereadLink:"https://weread.qq.com/web/reader/e8a32e80813ab8de4g0191c2#outline?noScroll=1",link:"https://book.douban.com/subject/36899697/",tags:["生活方式","预防医学","身心健康","自我管理"],desc:"英国临床医生基于20多年行医经验写就。本书主张“生活方式即良药”,围绕休息、饮食、运动和睡眠四个领域设计了20个微小行动计划,帮助现代人通过低成本的习惯改变逆转慢性问题。",rating:4.6,highlights:["提出99%的健康取决于日常习惯而非医学治疗,强调整体干预","构建“4×5”微行动框架,涵盖休息、饮食、运动、睡眠四个维度的20个小改变","兼顾科学深度与极简实操,如“12小时进食窗口”、“10分钟高强度运动”","关注现代职场人痛点,提供“小投入、大回报”的可叠加身心健康投资策略"]},{id:"book-00040",title:"你是你吃出来的:吃对少生病,病了这样吃",author:"夏萌",cover:"https://cdn.weread.qq.com/weread/cover/86/YueWen_920661/t6_YueWen_920661.jpg",wereadLink:"https://weread.qq.com/web/reader/7bb32c305e0c557bbdeab81#outline?noScroll=1",link:"https://book.douban.com/subject/27590675/",tags:["饮食科普","营养学","健康管理"],desc:"前安贞医院营养科主任夏萌结合十余年临床经验写成。本书颠覆“低油低脂”误区,提出回归进化的“65%植物+35%动物”膳食配比,并针对14种常见慢病给出“四分法”饮食干预方案,帮助读者重建健康饮食观。",rating:5,highlights:["指出多数慢病源于“蛋白质缺乏式营养不良”,打破常规低油低脂迷思","提出清晰量化的“65%植物类+35%动物类”科学饮食结构","针对冠心病、高血压等14种常见慢病提供实操性极强的“四分法”菜单","源于十万+真实临床病例,强调“一日三餐才是真正的保健品”"]},{id:"book-00041",title:"你是你吃出来的2",author:"夏萌",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/883/35905883/t6_35905883.jpg",wereadLink:"https://weread.qq.com/web/reader/40532d007223e15b4052fae#outline?noScroll=1",link:"https://book.douban.com/subject/35340053/",tags:["饮食指导","科普","疾病防治"],desc:"聚焦高血压、高脂血症、糖尿病等7大常见慢病,从临床营养医学角度逐一破除诸如“血压高不能吃肉”等饮食误区,提供系统的“上游-中游-下游”疾病防控思路与个体化营养处方。",rating:4.6,highlights:["专攻7大常见慢性病,为患者提供针对性的“生病了怎么吃”个体化指导","科学辟谣,破除“血压高不能吃肉”、“胆固醇高不能吃鸡蛋”等常见误区","梳理疾病发生因果链条,帮助读者从源头找到健康干预的着力点","提供从一日三餐、运动到心态调养的具体可操作生活方式清单"]}],Ge=JSON.parse('{"title":"好书推荐","description":"读书心得、推荐书籍和阅读技巧","frontmatter":{"title":"好书推荐","date":"2024-01-01T16:00:00.000Z","description":"读书心得、推荐书籍和阅读技巧","categories":["growth"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png","permalink":"/growth/books","tags":["悦读时光","资源推荐"]},"headers":[],"relativePath":"growth/books.md","filePath":"30.悦读时光/01.好书推荐.md"}'),Ne={name:"growth/books.md"},De=Object.assign(Ne,{setup(n){return(b,t)=>(a(),r("div",null,[t[0]||(t[0]=e("h1",{id:"好书推荐",tabindex:"-1"},[l("好书推荐 "),e("a",{class:"header-anchor",href:"#好书推荐","aria-label":"Permalink to “好书推荐”"},"​")],-1)),t[1]||(t[1]=e("h2",{id:"_1-ai-与数学思维",tabindex:"-1"},[l("1. AI 与数学思维 "),e("a",{class:"header-anchor",href:"#_1-ai-与数学思维","aria-label":"Permalink to “1. AI 与数学思维”"},"​")],-1)),t[2]||(t[2]=e("blockquote",null,[e("p",null,[l("在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操作系统”, "),e("strong",null,"理解 AI,本质上是理解数据、数学与逻辑如何重构这个世界"),l("。")]),e("p",null,"这套书单从数学思维的底层逻辑出发,让我们理解 ChatGPT 等大模型背后的计算机制,将硬核的神经网络与概率统计转化为优化生活的决策工具。它不仅能界定机器智能的边界,更颠覆了传统的“目标论”,倡导在不确定性中通过“踏脚石”思维寻找突破性创新的可能。AI 的研究实践告诉我们,伟大的突破往往无法被预设,唯有拥抱“寻宝者思维”才能在未知中偶遇奇迹,我们需要颠覆传统的创新范式。")],-1)),h(k,{books:g(Be)},null,8,["books"]),t[3]||(t[3]=M('

2. 产品与商业

about site background

2.1 产品 Sense 与创造

在产品成功率不足 10% 的残酷市场中,好的创造绝非源于盲目的灵感,而是建立在极致的风险验证与深刻的人性洞察之上。

卓越的产品力不仅关乎功能设计,更是一场关于策略与创造力的刻意练习:我们需要通过“预型”思维以极低成本进行真实数据验证,确保我们在投入开发前是在“做对产品”;并利用用户模型、交易模型等底层框架,将零散的需求转化为可获利的商业方案。

',4)),h(k,{books:g(Ie)},null,8,["books"]),t[4]||(t[4]=e("h3",{id:"_2-2-商业化",tabindex:"-1"},[l("2.2 商业化 "),e("a",{class:"header-anchor",href:"#_2-2-商业化","aria-label":"Permalink to “2.2 商业化”"},"​")],-1)),t[5]||(t[5]=e("blockquote",null,[e("p",null,[l("在追逐“独角兽”和规模扩张的狂热迷思之后,真正的商业高手正在重新回归本质:"),e("strong",null,"盈利才是企业的核心护城河。"),l(" 这套书单为我们揭示了一种"),e("strong",null,"更具韧性的商业路径——“小而美”的极简经营"),l("。它教导我们如何拒绝低效的内卷与忙碌,通过“做更少但创造更多价值”的思维,打造在不确定时代下依然能保持稳定现金流的“慢公司”。")]),e("p",null,[e("strong",null,"商业的成功,往往源于敢于挑战“难而正确”的事"),l("。从皮克斯如何建立允许失败的创意土壤,到 Waze 如何通过解决被忽视的痛点实现跨越式成长,这些世界级案例证明了:卓越的组织不仅需要极简的流程与高效的分布式协作(远程办公),更需要一种“冷静”的文化,将利润置于规模之上。")])],-1)),h(k,{books:g(We)},null,8,["books"]),t[6]||(t[6]=e("h2",{id:"_3-效率与效能",tabindex:"-1"},[l("3. 效率与效能 "),e("a",{class:"header-anchor",href:"#_3-效率与效能","aria-label":"Permalink to “3. 效率与效能”"},"​")],-1)),t[7]||(t[7]=e("blockquote",null,[e("p",null,[l("在信息过载与高压竞争的现代环境中,平庸与卓越的分水岭不再是做事的速度,而是"),e("strong",null,"决策的精度与责任的边界"),l("。这套书单为我们提供了一套从个人认知到组织协作的“效能防线”:首先,它"),e("strong",null,"引导我们完成从“时钟”到“罗盘”的思维跨越,打破盲目追求速度的迷思,确保将核心精力倾注在真正产生长远复利的“重要非紧急”事务之上"),l("。 真正的效能源于对复杂性的科学驾驭:")]),e("ul",null,[e("li",null,"通过“清单革命”式的认知防护,我们将最佳实践外化为可靠的防错系统,弥补人类在极端环境下的认知局限;"),e("li",null,"“猴子管理法”则以生动的视角重塑了职场协作的责任逻辑,教我们通过有效授权拒绝无谓的干扰,释放战略思考的精力;")])],-1)),h(k,{books:g(Ye)},null,8,["books"]),t[8]||(t[8]=e("h2",{id:"_4-学习与成长",tabindex:"-1"},[l("4. 学习与成长 "),e("a",{class:"header-anchor",href:"#_4-学习与成长","aria-label":"Permalink to “4. 学习与成长”"},"​")],-1)),t[9]||(t[9]=e("blockquote",null,[e("p",null,[l("在信息爆炸与快速变革的时代,"),e("strong",null,"真正的成长不再是知识的被动堆砌,而是认知系统的彻底迭代"),l("。这套书单为我们构建了一个从底层思维到人生经营的闭环:")]),e("ul",null,[e("li",null,"首先,通过批判性思维与深度阅读夯实“元能力”,在泛滥的信息中识别本质,将他人的洞见转化为自己的血肉;"),e("li",null,"其次,利用“检索力”打破信息差,确保自己在任何领域都能快速获取高质量资源,掌握逆风而行的主动权。")]),e("p",null,[e("strong",null,"人生不是一场盲目的长跑,而是一场基于“原则”的精密经营"),l("。从达利欧的系统化决策,到纳瓦尔的财富与幸福逻辑,这些智者教导我们如何利用杠杆、坚持长期主义,将自己视作一家“人生有限公司”来经营。我们需要摆脱“优秀绵羊”式的被动驱动,通过识别成长的“第二曲线”,在巅峰时刻主动寻求突破,将自己打造成不可替代的稀缺资产。阅读这些经典,不仅是为了习得技能,更是为了在算法与焦虑的夹击中,重塑内心的宁静与独立判断的勇气。")])],-1)),h(k,{books:g($e)},null,8,["books"]),t[10]||(t[10]=e("h2",{id:"_5-人文社科",tabindex:"-1"},[l("5. 人文社科 "),e("a",{class:"header-anchor",href:"#_5-人文社科","aria-label":"Permalink to “5. 人文社科”"},"​")],-1)),t[11]||(t[11]=e("blockquote",null,[e("p",null,"在宏观历史与微观现实间构建认知:在碎片化与不确定性并存的时代,穿透表象、直达本质的洞察力成为必需。这套单为我们开启了两扇窗:"),e("ul",null,[e("li",null,"一扇望向万年文明的宏大坐标,通过《枪炮、病菌与钢铁》的跨学科视野,拆解地理环境如何冷酷而偶然地重塑全球版图,彻底颠覆“文明优越论”的傲慢;"),e("li",null,"另一扇则照向当下社会的真实肌理,在梁晓声对各阶层生存困境的细腻描摹中,读懂大时代变革背后隐秘的结构性逻辑与阶层焦虑。")]),e("p",null,[e("strong",null,"人文思考的终极价值,在于如何将宏大叙事转化为个人的行动力量"),l("。正如项飙所倡导的“把自己作为方法”,这些著作不仅是知识的传递,更是思维的松绑。它们教导我们不再做时代的被动旁观者,而是学会在个人体验与宏观世界之间搭建桥梁,通过重建“附近”的小世界,在喧嚣中找准自我的定位。")])],-1)),h(k,{books:g(Me)},null,8,["books"]),t[12]||(t[12]=e("h2",{id:"_6-健康生活",tabindex:"-1"},[l("6. 健康生活 "),e("a",{class:"header-anchor",href:"#_6-健康生活","aria-label":"Permalink to “6. 健康生活”"},"​")],-1)),t[13]||(t[13]=e("img",{src:T,style:{width:"100%","border-radius":"8px","margin-bottom":"20px"},alt:"about site background"},null,-1)),t[14]||(t[14]=e("blockquote",null,[e("p",null,[l("在面临大概率活到100岁的“长寿时代”,传统的线性人生模式正在失效。我们需要对“健康”进行一次彻底的认知重构:"),e("strong",null,"健康不再仅仅是“没有疾病”,而是支撑我们跨越漫长生命周期、应对多阶段人生挑战的最核心“无形资产”"),l("。想要让这套生命系统长期平稳运行,真正的解法并不在医院的处方笺里,而是隐藏在我们每天的日常选择中。")]),e("p",null,[l("决定我们长期健康状态的,有 99 %取决于日常习惯。我们需要"),e("strong",null,"在休息、饮食、运动、睡眠这四个高频生活维度中,植入微小但杠杆率极高的改变"),l("(例如12小时进食窗口、10分钟高强度运动、睡前屏蔽数字通知等)。用最低的执行成本,置换身心状态的巨大回报。")])],-1)),h(k,{books:g(Te)},null,8,["books"])]))}});export{Ge as __pageData,De as default}; diff --git a/assets/growth_books.md.DxXz1I-x.lean.js b/assets/growth_books.md.DON7D586.lean.js similarity index 99% rename from assets/growth_books.md.DxXz1I-x.lean.js rename to assets/growth_books.md.DON7D586.lean.js index 61bd951..39078ec 100644 --- a/assets/growth_books.md.DxXz1I-x.lean.js +++ b/assets/growth_books.md.DON7D586.lean.js @@ -1 +1 @@ -import{f as x,i as z,o as a,b as h,T as B,w as I,c as r,g as _,z as P,a as e,k as v,t as c,F as p,m as f,e as l,A as W,_ as A,s as j,h as Y,n as $,d as M,u as g}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const T="/img/cover/health_bg.png",N={class:"book-panel__drawer"},V={class:"book-panel__header-meta"},G={class:"book-panel__title"},D={class:"book-panel__author"},F={class:"book-panel__body"},Z={class:"book-panel__top-bar"},H={class:"book-panel__top-left"},J={class:"book-panel__tags"},O={key:0,class:"book-panel__rating"},R={class:"stars"},E={key:0,viewBox:"0 0 24 24",fill:"currentColor"},K={key:1,viewBox:"0 0 24 24",class:"half-star"},Q=["id"],X=["clip-path"],U={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},ee={class:"rating-text"},te={class:"book-panel__links"},oe=["href"],ae={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},le=["href"],re={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},ne={class:"book-panel__section"},se={class:"book-panel__desc"},ie={key:0,class:"book-panel__section"},de={class:"book-panel__highlights"},ce=x({__name:"BookDetailPanel",props:{book:{},open:{type:Boolean},heroColor:{},tagColors:{}},emits:["close"],setup(n,{emit:b}){const t=b;return(w,o)=>(a(),z(W,{to:"body"},[h(B,{name:"panel-slide"},{default:I(()=>[n.open&&n.book?(a(),r("div",{key:0,class:"book-panel",onClick:o[2]||(o[2]=P(i=>t("close"),["self"]))},[e("div",{class:"book-panel__overlay",onClick:o[0]||(o[0]=i=>t("close"))}),e("div",N,[e("div",{class:"book-panel__header",style:v({background:n.heroColor})},[e("button",{class:"book-panel__close",title:"关闭",onClick:o[1]||(o[1]=i=>t("close"))},[...o[3]||(o[3]=[e("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none"},[e("path",{d:"M12 4L4 12M4 4l8 8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])]),e("div",V,[e("h2",G,c(n.book.title),1),e("p",D,c(n.book.author),1)])],4),e("div",F,[e("div",Z,[e("div",H,[e("div",J,[(a(!0),r(p,null,f(n.book.tags,(i,m)=>(a(),r("span",{key:i,class:"book-panel__tag",style:v({background:n.tagColors[m%n.tagColors.length].bg,color:n.tagColors[m%n.tagColors.length].text})},c(i),5))),128))]),n.book.rating!=null?(a(),r("div",O,[o[8]||(o[8]=e("span",{class:"rating-label"},"推荐指数:",-1)),e("div",R,[(a(),r(p,null,f(5,i=>e("span",{key:i,class:"star"},[i<=Math.floor(n.book.rating)?(a(),r("svg",E,[...o[4]||(o[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):i===Math.ceil(n.book.rating)&&n.book.rating%1!==0?(a(),r("svg",K,[e("defs",null,[e("clipPath",{id:"clip-"+n.book.id},[...o[5]||(o[5]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,Q)]),o[6]||(o[6]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#clip-"+n.book.id+")"},null,8,X)])):(a(),r("svg",U,[...o[7]||(o[7]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",ee,c(n.book.rating.toFixed(1)),1)])):_("",!0)]),e("div",te,[e("a",{href:n.book.link,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",ae,[...o[9]||(o[9]=[e("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])),o[10]||(o[10]=l(" 豆瓣 ",-1))],8,oe),n.book.wereadLink?(a(),r("a",{key:0,href:n.book.wereadLink,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",re,[...o[11]||(o[11]=[e("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z",fill:"currentColor"},null,-1)])])),o[12]||(o[12]=l(" 微信读书 ",-1))],8,le)):_("",!0)])]),o[15]||(o[15]=e("div",{class:"book-panel__divider"},null,-1)),e("section",ne,[o[13]||(o[13]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"📖"),l(" 内容简介 ")],-1)),e("p",se,c(n.book.desc),1)]),n.book.highlights&&n.book.highlights.length>0?(a(),r("section",ie,[o[14]||(o[14]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"✨"),l(" 书籍亮点 ")],-1)),e("ul",de,[(a(!0),r(p,null,f(n.book.highlights,(i,m)=>(a(),r("li",{key:m,class:"book-panel__highlight-item"},c(i),1))),128))])])):_("",!0)])])])):_("",!0)]),_:1})]))}}),he=A(ce,[["__scopeId","data-v-1ddfc013"]]),be={class:"book-list"},ue=["onClick"],ge=["src","alt"],ke={class:"book-cover__overlay"},pe={key:0,class:"book-cover__hint"},we=["href"],me={class:"book-info"},_e={class:"book-info__title"},fe={class:"book-info__author"},qe={key:0,class:"book-info__rating"},ve={class:"stars"},je={key:0,viewBox:"0 0 24 24",fill:"currentColor"},Le={key:1,viewBox:"0 0 24 24",class:"half-star"},ye=["id"],Se=["clip-path"],xe={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},Pe={class:"rating-text"},Ae={class:"book-info__tags"},Ce={class:"book-info__desc"},ze=x({__name:"BookRecommend",props:{books:{}},setup(n){const b=["linear-gradient(135deg, #e8f0fe 0%, #c7d9fd 100%)","linear-gradient(135deg, #e6f4ea 0%, #b7dfc4 100%)","linear-gradient(135deg, #fff3e0 0%, #ffd9a0 100%)","linear-gradient(135deg, #fce4ec 0%, #f8b4c8 100%)","linear-gradient(135deg, #ede7f6 0%, #cdb8ee 100%)","linear-gradient(135deg, #e0f7fa 0%, #9ee8f0 100%)"],t=[{bg:"#e8f0fe",text:"#3b5bdb"},{bg:"#e6f4ea",text:"#2e7d32"},{bg:"#fff3e0",text:"#e65100"},{bg:"#fce4ec",text:"#c2185b"},{bg:"#ede7f6",text:"#6a1b9a"},{bg:"#e0f7fa",text:"#00838f"}],w=j(null),o=j(0),i=j(!1),m=Y(()=>b[o.value%b.length]);function C(q,d){q.withPanel!==!1&&(w.value?.id===q.id&&i.value?L():(w.value=q,o.value=d,i.value=!0))}function L(){i.value=!1,setTimeout(()=>{w.value=null},300)}return(q,d)=>(a(),r(p,null,[e("div",be,[(a(!0),r(p,null,f(n.books,(s,y)=>(a(),r("div",{key:s.id,class:$(["book-card",{"book-card--active":w.value?.id===s.id&&i.value}]),onClick:u=>C(s,y)},[e("div",{class:"book-cover",style:v({background:b[y%b.length]})},[s.cover?(a(),r("img",{key:0,src:s.cover,alt:s.title,class:"book-cover__img"},null,8,ge)):_("",!0),e("div",ke,[s.withPanel!==!1?(a(),r("span",pe,"点击查看详情")):(a(),r("a",{key:1,href:s.link,target:"_blank",rel:"noopener",class:"book-cover__hint",onClick:d[0]||(d[0]=P(()=>{},["stop"]))},"查看豆瓣",8,we))])],4),e("div",me,[e("div",_e,"《"+c(s.title)+"》",1),e("div",fe,c(s.author),1),s.rating!=null?(a(),r("div",qe,[e("div",ve,[(a(),r(p,null,f(5,u=>e("span",{key:u,class:"star"},[u<=Math.floor(s.rating)?(a(),r("svg",je,[...d[1]||(d[1]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):u===Math.ceil(s.rating)&&s.rating%1!==0?(a(),r("svg",Le,[e("defs",null,[e("clipPath",{id:"card-clip-"+s.id},[...d[2]||(d[2]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,ye)]),d[3]||(d[3]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#card-clip-"+s.id+")"},null,8,Se)])):(a(),r("svg",xe,[...d[4]||(d[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",Pe,c(s.rating.toFixed(1)),1)])):_("",!0),e("div",Ae,[(a(!0),r(p,null,f(s.tags,(u,S)=>(a(),r("span",{key:u,class:"tag",style:v({background:t[S%t.length].bg,color:t[S%t.length].text})},c(u),5))),128))]),e("p",Ce,c(s.desc),1)])],10,ue))),128))]),h(he,{book:w.value,open:i.value,"hero-color":m.value,"tag-colors":t,onClose:L},null,8,["book","open","hero-color"])],64))}}),k=A(ze,[["__scopeId","data-v-fd79cd55"]]),Be=[{id:"book-001",title:"心中有数:生活中的数学思维",author:"刘雪峰",cover:"https://cdn.weread.qq.com/weread/cover/39/3300018939/t6_3300018939.jpg",wereadLink:"https://weread.qq.com/web/reader/df6323a0813ab6de5g019a31#outline?noScroll=1",link:"https://book.douban.com/subject/35749693/",tags:["数学思维","科普","决策"],desc:"本书通过大量贴近日常的例子,展示数学思维如何优化我们的生活决策。作者用概率、统计、最优化等数学工具,为生活、职场、人际交往中的权衡问题提供分析框架,帮助读者在面对不确定性时像计算机一样找到“最优解”。",rating:4.9,highlights:["将大数定律、最小二乘法等硬核数学概念与日常生活巧妙结合","提供应对不确定性和多目标抉择的科学决策框架","强调数学不仅是公式计算,更是看世界、优化人生的高效思维工具"]},{id:"book-0020",title:"智慧的疆界:从图灵机到人工智能",author:"周志明",cover:"https://cdn.weread.qq.com/weread/cover/92/YueWen_23637052/t6_YueWen_23637052.jpg",wereadLink:"https://weread.qq.com/web/reader/b9732f007168ac3cb976eca#outline?noScroll=1",link:"https://book.douban.com/subject/30379536/",tags:["人工智能","科技史","通识读物"],desc:"本书是一部面向大众的人工智能通识读物。作者周明以时间为主线,将人工智能的发展历程、关键人物与里程碑事件串联起来,从五个维度展开:学术理论、历史沿革、技术应用、研究成果以及面临的困难与未来挑战。全书旨在用通俗的语言和巧妙的结构,把人工智能从“阳春白雪”的学术殿堂带到公众视野,帮助读者理解 AI 能做什么、做不到什么,以及背后的技术与思想根源。",rating:5,highlights:["以时间为主线,清晰梳理人工智能的发展脉络与里程碑","深入浅出,用通俗语言将复杂的学术理论带入公众视野","客观剖析,帮助读者准确界定AI“能做什么”与“做不到什么”"]},{id:"book-004",title:"为什么伟大不能被计划",author:"肯尼斯·斯坦利 / 乔尔·雷曼",cover:"https://cdn.weread.qq.com/weread/cover/22/cpplatform_wfdzhk1dx7ig9aep4gagof/t6_cpplatform_wfdzhk1dx7ig9aep4gagof1686304376.jpg",wereadLink:"https://weread.qq.com/web/reader/0bf32020813ab7e6bg016510#outline?noScroll=1",link:"https://book.douban.com/subject/36357804/",tags:["人工智能","创新思维","认知科学"],desc:"本书由两位前沿AI科学家合著,提出了颠覆传统“目标-计划”思维的全新视角。结合AI研究实践,书中论证了伟大成就往往并非出自精心设计的蓝图,而是源于对未知的好奇、随机探索与不断试错。通过“寻宝者思维”和“踏脚石模型”等方法,为读者在高度不确定的环境中激发突破性创新提供了具体的行动框架。",rating:4.5,highlights:["颠覆传统的“目标论”,论证伟大成就源自对未知的好奇与无边界的探索","提供“寻宝者思维”“踏脚石模型”“新奇性探索”三大可操作的认知与实践工具","扎根OpenAI等前沿机构的实证背景,其启发意义跨学科适用于科研、商业及人生规划"]},{id:"book-003",title:"这就是ChatGPT",author:"斯蒂芬·沃尔弗拉姆",cover:"https://cdn.weread.qq.com/weread/cover/24/cpplatform_4cn8w4tmgzntjobg9ffeny/t6_cpplatform_4cn8w4tmgzntjobg9ffeny1703648785.jpg",wereadLink:"https://weread.qq.com/web/reader/74332a90813ab86c4g019d98#outline?noScroll=1",link:"https://book.douban.com/subject/36449803/",tags:["人工智能","大模型","ChatGPT"],desc:"本书由著名科学家斯蒂芬·沃尔弗拉姆撰写,全景式拆解了ChatGPT的内部工作机制。作者用通俗语言解释了神经网络和自回归架构等核心技术,探讨了简单的计算规则如何涌现出令人惊叹的智能,帮助读者深刻理解大语言模型为何能生成高质量的人类水平文本。",rating:4.3,highlights:["全景拆解核心技术:深入浅出地讲清ChatGPT背后的神经网络与自回归架构","独特的大师视角:将大模型视为“简单的计算规则”涌现复杂智能的绝佳范例","兼顾技术与商业影响:结合算力规模与行业冲击,全面探讨AI时代的机遇与挑战"]},{id:"book-0030",title:"人工智能:现代方法(第4版)(上下册)",author:"[美]斯图尔特·罗素(Stuart Russell) / [美]彼得·诺维格(Peter Norvig)",cover:"https://cdn.weread.qq.com/weread/cover/33/cpplatform_8rthznqfhsjuz5fswwn6kx/t6_cpplatform_8rthznqfhsjuz5fswwn6kx1675928213.jpg",wereadLink:"https://weread.qq.com/web/reader/fc332020813ab7942g0102ad#outline?noScroll=1",link:"https://book.douban.com/subject/36152133",tags:["人工智能","教材","理论实践结合","经典著作","计算机科学"],desc:"本书是人工智能领域的经典权威教材,系统、深入地探讨AI领域的理论与实践,以统一风格融合当今流行的AI思想与术语到前沿应用中,真正实现理论与实践相结合。全书分7个部分共28章,理论部分涵盖逻辑、概率、连续数学、感知、推理、学习、行动及公平、信任、社会公益和安全等社会议题;实践部分选取微电子设备、机器人行星探测器、在线服务、AlphaZero、人形机器人、自动驾驶、AI辅助医疗等热门场景。由加州大学伯克利分校教授斯图尔特·罗素与前谷歌研究总监彼得·诺维格联合撰写,被全球1500多所高校采用,适合作为AI相关专业本科生和研究生教材,也可作为专业人员的参考书。",rating:5,highlights:["体系完整覆盖面广,7个部分28章构成自洽的AI理论主线,涵盖核心理论与前沿议题","理论与实践并重,既阐述核心算法与模型,又展示在热门场景中的落地实例,便于知识迁移","紧跟前沿关注社会议题,专门讨论AI伦理与安全,引导思考技术与社会的交互责任","一站式权威参考,兼具教材属性与专业参考价值,适配高校教学与产业实践双重需求","现代理念贯穿始终,通过最新案例体现AI进展与行业趋势,呈现“活”的AI生态"]},{id:"book-0031",title:"模型思维:简化世界的人工智能模型",author:"龚才春",cover:"https://cdn.weread.qq.com/weread/cover/26/YueWen_38601826/t6_YueWen_38601826.jpg",wereadLink:"https://weread.qq.com/web/reader/5a8326e0724d04625a8e740#outline?noScroll=1",link:"https://book.douban.com/subject/35488925/",tags:["模型思维","人工智能","算法模型","机器学习","入门实践"],desc:"本书聚焦“如何用模型简化世界”的核心主题,将人工智能在现实业务中面临的难题归纳为权重、状态、序列、表示、相似、分类六大问题,并围绕该框架讲解对应模型思路与算法。书中弱化复杂数学公式,以大量生活化、业务化案例阐释模型理论与落地场景,帮助读者建立“模型—场景”映射关系,降低AI模型学习门槛,既是人工智能初学者的入门读物,也可为企业工程师、科研人员提供实践参考,适合各类读者学习并将模型思维应用到生活与工作中。",rating:4.8,highlights:["以“六大问题”框架串联AI模型,可按场景快速检索适配的模型思路","侧重落地实践,搭配大量生活化与业务案例,助力建立“模型—场景”映射","降低学习门槛,少数学公式、多直观案例,兼顾初学者与工程落地需求","受众群体广泛,适配工程师、科研人员及普通读者,可迁移模型思维至实际场景"]},{id:"book-005",title:"你看起来好像……我爱你:AI的工作原理以及它为这个世界带来的稀奇古怪",author:"贾内尔·沙内",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/970/39481970/t6_39481970.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=f9a32c10725a7272f9a14f9&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/35407136/",tags:["人工智能","趣味科普","漫画算法"],desc:"这是一部写给普通读者的人工智能趣味科普读物。作者贾内尔·沙内结合生活化的比喻和超级可爱的漫画,深入浅出地讲解了AI的基本工作原理、实际应用及其局限性。书中通过大量幽默的AI实验与“翻车”案例,带领读者在轻松捧腹的氛围中,准确理解算法能做什么、不能做什么。",rating:4.2,highlights:["幽默可爱的漫画导览:用插图和通俗语言将“深度学习”“神经网络”等抽象概念可视化","丰富的趣味实验案例:通过精选的AI“翻车”故事,直观揭示算法背后的逻辑与潜在偏差","客观建立AI认知:在展示AI强大能力的同时,明确指出其在语境理解和处理模糊信息时的短板"]},{id:"book-006",title:"AI经济:机器人时代的工作、财富和社会福利",author:"罗杰·布特尔",cover:"https://cdn.weread.qq.com/weread/cover/30/YueWen_38229387/t6_YueWen_38229387.jpg",wereadLink:"https://weread.qq.com/web/reader/653320207247558b65332f5#outline?noScroll=1",link:"https://book.douban.com/subject/35433060/",tags:["人工智能","经济学","社会学","未来趋势"],desc:"本书由知名经济学家罗杰·布特尔撰写,聚焦AI与机器人技术对经济和社会的深远影响。作者拨开艰涩的科技术语,从经济增长、通货膨胀及财富分配等宏观视角,理性剖析AI革命将如何重塑我们的工作、教育与休闲方式,以乐观的姿态为迎接未来的社会变革指明路径。",rating:4.1,highlights:["宏观经济视角解析:深入探讨AI对经济增长、通货膨胀、财富与权力分配的真实影响","全景式社会洞察:全面检视机器人时代下,人类教育体系、工作模式与休闲形态的深刻变革","理性乐观的未来指南:拒绝技术恐慌,为个人与社会在变迁的世界中提供清晰可行的应对计划"]}],Ie=[{id:"book-007",title:"做对产品",author:"阿尔贝托·索维亚",cover:"https://cdn.weread.qq.com/weread/cover/53/YueWen_40877841/t6_YueWen_40877841.jpg",wereadLink:"https://weread.qq.com/web/reader/254322a0726fbf1125472c9#outline?noScroll=1",link:"https://book.douban.com/subject/35607961/",tags:["产品思维","创业","商业方法论"],slogan:"为什么有些产品注定失败,有些产品却能大获成功?来自谷歌与斯坦福的产品工具和产品战术。",desc:"谷歌首任产品总监阿尔贝托·索维亚结合在谷歌、斯坦福的实战经验与自身代价高昂的创业失败经历,总结出的一套防败手册。书中揭示了新产品高达90%的“市场失败律”,并创新性地提出了“预型”(Pre型)理念,指导团队在正式开发前,以极低的成本和真实数据快速验证关键假设,确保把创意打磨成“正确的它”。",rating:4.8,highlights:["揭示残酷的市场失败律:正视90%新产品必然失败的商业常态,并以此倒推破局的实战方法论","首创“预型”(Pre型)概念:提供8大测试工具,主张用极低成本和小规模试错快速逼近正确的产品形态","强调真实数据驱动决策:辅以特斯拉、谷歌等完整案例回溯,教导团队将决策建立在客观证据而非主观直觉之上"]},{id:"book-009",title:"俞军产品方法论",author:"俞军",cover:"https://cdn.weread.qq.com/weread/cover/47/YueWen_28165041/t6_YueWen_28165041.jpg",wereadLink:"https://weread.qq.com/web/reader/1cc3252071adc3b11cc0162#outline?noScroll=1",link:"https://book.douban.com/subject/34907971/",tags:["产品思维","产品经理","互联网","方法论"],desc:"“百度贴吧之父”俞军二十余年产品实践与思考的系统总结。本书将产品经理定义为“以科学方法研究人性并转化为商业方案”的交叉学科,深入解析了用户模型、交易模型和决策模型三大核心框架,为产品人提供了一套在不确定环境中权衡多方利益的实战指南。",rating:4.4,highlights:["沉淀二十年行业经验:从广为流传的“PM12条”到系统化的产品哲学,展现顶尖产品经理的认知迭代史","三大核心模型拆解:深度剖析用户模型与交易模型,指导如何通过让交易发生来创造“有利可图”的真实用户价值","兼顾科学与人文视角:强调批判性思维的运用,并清晰梳理了从新人到顶尖大牛的能力进阶路径"]},{id:"book-016",title:"策略产品经理:模型与方法论",author:"青十五",cover:"https://cdn.weread.qq.com/weread/cover/31/cpplatform_gheeqe7hjb2czyzthzf5nm/t6_cpplatform_gheeqe7hjb2czyzthzf5nm1735654872.jpg",wereadLink:"https://weread.qq.com/web/reader/4de32800813ab98d5g01286b#outline?noScroll=1",link:"https://book.douban.com/subject/35218721/",tags:["产品经理","策略产品","算法思维"],desc:"本书围绕“策略产品经理”这一复合角色,系统性地构建了从理念到实践的完整知识框架。作者从机器学习理论与经济学视角出发,结合推荐、搜索、广告、风控等核心业务场景,深入浅出地讲解了函数建模与策略应用,并对策略产品经理的核心能力与团队建设给出了详尽指导。",rating:3.9,highlights:["系统化的角色认知建构:清晰界定策略产品经理的时代背景、职责边界与工作内容,为从业者夯实概念基础","跨学科的模型与业务结合:利用机器学习的函数方法论与经济学理论,深度剖析推荐、搜索、广告、风控及定价等真实业务场景的解法","硬核算法的通俗化解析:深入浅出地拆解机器学习本质、常见算法及深度学习前沿技术,帮助产品经理真正理解策略背后的技术支撑","可落地的团队建设指南:全面拆解数据分析、沟通与项目管理等核心能力项,并针对不同产品生命周期提供策略团队的组建思路"]},{id:"book-008",title:"创造:用非传统方式做有价值的事",author:"托尼·法德尔",cover:"https://cdn.weread.qq.com/weread/cover/53/cpPlatform_tzdqT27m3vyaHnX5o8Vbwk/t6_cpPlatform_tzdqT27m3vyaHnX5o8Vbwk.jpg",wereadLink:"https://weread.qq.com/web/reader/13832ac0813ab725fg018645#outline?noScroll=1",link:"https://book.douban.com/subject/36071759/",tags:["产品思维","管理学","创业"],desc:"本书是iPod、iPhone、Nest等爆款产品幕后推手托尼·法德尔30余年职业经历的智慧结晶。作者毫无保留地分享了他在产品设计、团队管理、职业选择和公司经营等方面的“非传统”方法论,帮助读者在各自的领域内刻意练习创造力,做真正有价值的事。",rating:4.9,highlights:["源自顶级创新者的实战经验:连续打造iPod、iPhone等划时代产品的亲历复盘与真实反面教训","覆盖从个人到公司的完整路径:系统解答职业选择、产品设计、团队管理与企业经营等核心问题","提供可复制的“非传统”方法论:强调“亮点思维”与持续复盘,教导读者以反常规的视角刻意练习创造力"]},{id:"book-010",title:"产品思维",author:"刘飞",cover:"https://cdn.weread.qq.com/weread/cover/56/YueWen_25568738/t6_YueWen_25568738.jpg",wereadLink:"https://weread.qq.com/web/reader/38332ce0718625e23831fe7#outline?noScroll=1",link:"https://book.douban.com/subject/33456375/",tags:["产品思维","产品经理","个人成长","互联网"],desc:"实战派产品经理刘飞结合在一线大厂的丰富经验,围绕产品人如何实现能力跃迁展开的底层能力指南。全书掰开揉碎地讲解了认知盲点与实践痛点,通过“认知用户”“创造价值”和“产品落地”三大核心板块,系统拆解了从建立用户模型、高质量决策到快速迭代验证的完整产品方法论。",rating:4.2,highlights:["三大核心板块系统拆解:完整覆盖“认知用户”“创造价值”与“产品落地”的产品闭环","直击痛点的一线实战经验:毫无保留地分享实战中新手迫切需要却难以获取的隐性知识","聚焦底层能力与思维升维:不仅教授落地方法,更注重决策质量与思维模式的跃迁"]},{id:"book-011",title:"产品思维:创新设计的六条法则(全彩)",author:"张印帅",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/253/26687253/t6_26687253.jpg",wereadLink:"https://weread.qq.com/web/reader/a823297071973715a8202b0#outline?noScroll=1",link:"https://book.douban.com/subject/34859540/",tags:["产品设计","创新思维","方法论","设计灵感"],desc:"本书围绕作者张印帅多年产品设计实践总结出的6条创意公式展开,旨在帮助读者系统化地获取设计灵感并解决创新难题。全书通过大量经典案例,详细解析了从发散思考到重组创新的全过程,并在最后提供了从需求到草图再到最终方案的完整项目落地演示。",rating:4,highlights:["提炼6条实用的创新设计公式:将发散思考与重组创新系统化,打造可复用的设计灵感库","丰富的经典设计案例解析:详细展示“问题+方法”、“1+1>2”等法则在真实产品设计中的应用","呈现从需求到方案的落地全流程:通过综合案例演示概念打磨与草图设计的实战过程"]}],We=[{id:"book-012",title:"小而美:持续盈利的经营法则",author:"萨希尔·拉文吉亚",cover:"https://cdn.weread.qq.com/weread/cover/91/cpplatform_vl4abrrrqgxnry833gcrtt/t6_cpplatform_vl4abrrrqgxnry833gcrtt1677578056.jpg",wereadLink:"https://weread.qq.com/web/reader/02932980813ab7a43g012e77#outline?noScroll=1",link:"https://book.douban.com/subject/36280425/",tags:["创业","商业模式","极简主义"],desc:"本书打破了硅谷盲目追求“独角兽”的扩张迷思,聚焦于“规模不是唯一出路”的商业现实。作者结合创立Gumroad的亲身经历,提出了“极简创业经营”理念。全书指导创业者与管理者如何通过从社区切入、聚焦核心能力、精简团队等方式,用最少的资源打造出不仅能活下去,而且还能持续盈利的“慢公司”。",rating:5,highlights:["颠覆传统的扩张迷思:提出盈利至上而非规模至上,将持续赚钱和实际利润作为衡量企业成功的核心标准","可落地的极简法则:总结出“越少越好”“瞄准前100个客户”等7条创业清单,构建从定位、产品到销售的完整闭环","社区驱动的商业逻辑:提倡从虚拟社区入手,以“贡献-创作-教学”的方式低成本验证产品形态并获取早期信任","打造高韧性的“慢公司”:结合疫情与远程办公背景,展示如何通过精简组织和分布式协作,在不确定的时代保持稳定的现金流"]},{id:"book-013",title:"做难而正确的事:进步最快的方式",author:"尤里·莱文",cover:"https://cdn.weread.qq.com/weread/cover/53/cpplatform_bunxjyygj8m9stnwcgwqqk/t6_cpplatform_bunxjyygj8m9stnwcgwqqk1728876401.jpg",wereadLink:"https://weread.qq.com/web/reader/aa032fb0813ab9461g018406#outline?noScroll=1",link:"https://book.douban.com/subject/37054102/",tags:["创业","产品思维","商业管理"],desc:"Waze联合创始人尤里·莱文写给创业者和管理者的行动指南。作者结合连续打造两家估值超10亿美元公司的实战经验,提出“先做难事、再做正确事”的核心哲学。全书通过13个阶段的系统拆解,指导读者如何寻找真正的用户痛点、构建高价值产品,并在不确定的环境中通过不断复盘实现跨越式成长。",rating:4.9,highlights:["世界级创业者的实战复盘:连续打造两家独角兽公司的创始人亲授,提供极具可信度的第一手商业洞察与落地经验","践行“难而正确”的核心哲学:强调不追逐短期热点,而是去解决效率极低却被忽视的痛点,以此建立坚实的商业护城河","覆盖从0到1的全周期指南:系统拆解从寻找痛点、产品构建、融资运作到团队管理的13个关键阶段,提供可操作的行动清单","直面失败的心理韧性建设:不回避挫折,将“从错误中学习”提炼为核心方法,为身处高压环境的读者提供情感共鸣与心理支持","广泛的跨场景应用价值:书中给出的决策工具不仅适用于初创团队,同样能为大公司内部创新及个人职业认知升级提供指导"]},{id:"book-015",title:"创新公司:皮克斯的启示",author:"艾德·卡特姆",cover:"https://cdn.weread.qq.com/weread/cover/20/YueWen_814380/t6_YueWen_814380.jpg",wereadLink:"https://weread.qq.com/web/reader/2ef329605c6d2c2efeeb70d#outline?noScroll=1",link:"https://book.douban.com/subject/26314955/",tags:["创新思维","组织文化","企业管理"],desc:"皮克斯联合创始人艾德·卡特姆结合《玩具总动员》《机器人瓦力》等经典动画的幕后制作故事,深度揭示了皮克斯如何长期保持创意领先的秘密。本书不仅详述了皮克斯从初创到壮大的历程,更抽丝剥茧地解析了其在团队文化、跨部门协作、人才培养和允许失败等方面的独特创意管理机制,为各类组织提供了可复制的创新指南。",rating:4.5,highlights:["揭秘“皮克斯奇迹”背后的管理哲学:通过14部经典动画的真实幕后故事,展示创意从无到有、再到票房口碑双赢的全过程","深度解析创新土壤的搭建:阐述如何通过允许失败的文化、流程设计和激励机制,将“不断推动创新”彻底融入公司DNA","提供跨行业可复用的管理工具:总结项目立项、跨部门协作与风险控制的具体做法,为不同规模和行业的企业提供落地的实战模板"]},{id:"book-017",title:"重来:更为简单的商业思维",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/1/YueWen_635904/t6_YueWen_635904.jpg",wereadLink:"https://weread.qq.com/web/reader/0363228059b4000363b29e9#outline?noScroll=1",link:"https://book.douban.com/subject/5320866/",tags:["商业思维","创业","企业管理","极简主义"],desc:"37signals联合创始人基于十年创业实战经验,写给职场人与创业者的极简商业法则。本书摒弃了传统的MBA术语与复杂的商业教条,以“辛辣、直接、靠谱”的语言,颠覆了关于项目管理、人才招聘、产品设计与企业文化的常规认知,教导读者如何在真实的商业世界中“做更少,但创造更多价值”。",rating:4.3,highlights:["颠覆传统的极简商业哲学:反叛复杂的商业教条,主张“做更少,创造更多”,通过最小可行步骤降低试错成本并快速迭代","源自37signals的十年实战精髓:覆盖从项目管理、产品设计到市场营销的完整链条,提供不讲废话、拿来即用的行动指南","重塑职场与团队管理的认知:提出诸多务实且反常规的观点(如严苛的简历筛选标准),打造基于信任与结果导向的高效团队","适用面极广的实操手册:无论是寻求突破的精英企业家、小团队创业者,还是渴望提升工作效率的普通职场人,都能直接对照落地"]},{id:"book-018",title:"重来2:更为简单高效的远程工作方式",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/38/YueWen_635721/t6_YueWen_635721.jpg",wereadLink:"https://weread.qq.com/web/reader/46b3220059b34946b517012#outline?noScroll=1",link:"https://book.douban.com/subject/25861795/",tags:["企业管理","远程工作","工作方式","团队协作"],desc:"Basecamp(原37signals)创始人基于自身团队多年的全球分布式协作经验,为企业和个人提供的一套远程工作“思想升级包”。本书直面行业争议,破解了“创新只能面对面”及“文化会淡化”等常见误区,并系统提供了借助异步沟通、协作工具与流程设计来打造高效、人性化远程团队的实战指南。",rating:4.1,highlights:["提供思想层面的“升级包”:直击传统办公室痛点,用真实数据与反例打破关于远程办公的固有认知误区","第一手的分布式团队管理经验:Basecamp创始人亲授,展示如何突破地域限制招募顶尖人才,并保持健康、高效的工作节奏","系统可落地的工具与流程方法:详述如何利用协作工具降低管理成本,让远程工作从“特殊福利”真正转变为可持续的主流组织模式"]},{id:"book-019",title:"重来3:做得更少,但赚得更多",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/62/cpplatform_tqth8pnlq8h9ing5uciwhi/t6_cpplatform_tqth8pnlq8h9ing5uciwhi1748502715.jpg",wereadLink:"https://weread.qq.com/web/reader/b6a32ed0813ab9fb5g015181#outline?noScroll=1",link:"https://book.douban.com/subject/37367276/",tags:["工作方式","反内卷","企业文化"],desc:"Basecamp创始人带来的“反内卷”与“反过度忙碌”的管理指南。作者基于近20年带领54人团队服务全球10万家企业的成功经验,直击现代企业盲目扩张、无效加班等八大症结。全书主张以“冷静”颠覆“忙碌”文化,指导企业和个人通过40小时工作制、拒绝KPI和异步沟通等极简方式,在不牺牲生活质量的前提下实现健康发展与持续盈利。",rating:4.2,highlights:["以“冷静”颠覆“忙碌”文化:倡导高效比高产更重要,用稳定的节奏替代疯狂加班的内卷常态","直击现代企业八大症结:深度诊断快速扩张、无效加班、会议泛滥与目标绑架等痛点,提供对症下药的思路","提供四大可落地的管理工具:引入40小时工作制、拒绝硬性KPI、推行非实时沟通,坚持利润优先于规模","源自Basecamp的真实反向案例:展示“小而美”团队如何通过“少做但做好”的策略,跑赢新经济并保持高利润"]}],Ye=[{id:"book-024",title:"要事第一",author:"史蒂芬·柯维 / 罗杰·梅里尔 / 丽贝卡·梅里尔",cover:"https://cdn.weread.qq.com/weread/cover/57/yuewen_33091834/t6_yuewen_330918341686208943.jpg",wereadLink:"https://weread.qq.com/web/reader/f523268071f8f0faf52b806#outline?noScroll=1",link:"https://book.douban.com/subject/1028372/",tags:["时间管理","自我管理","经典思维"],desc:"作为《高效能人士的七个习惯》的延伸与加强版,本书提出了颠覆传统的“第四代时间管理”方法。作者强调,比提升做事速度(时钟)更重要的是找准人生的方向(罗盘)。全书指导读者通过自我意识的觉醒,以原则和价值观为中心,将精力聚焦于“重要而不紧急”的长期目标上,从而在繁忙的现代生活中真正做到“要事第一”。",rating:4.5,highlights:["从“时钟”到“罗盘”的思维跨越:打破一味追求“更快、更努力”的传统效率迷思,确立人生方向优先的哲学","经典的四象限时间管理矩阵:引导读者跳出紧急事务的“救火圈”,将核心精力倾注于第二象限(重要但不紧急)的高价值事务中","生动的“大石块”优先法则:通过“先放石头再倒水”的直观比喻,确保关键目标与核心使命在碎片化日程中得到绝对的优先落实","以原则为中心的自我驱动框架:不仅提供日程安排工具,更通过唤醒良知,帮助读者在工作、家庭等多元角色中实现真正的平衡与统合综效"]},{id:"book-025",title:"清单革命",author:"阿图·葛文德",cover:"https://cdn.weread.qq.com/weread/cover/12/cpPlatform_rudGZN3LDW5m9FBYr7rMBA/t6_cpPlatform_rudGZN3LDW5m9FBYr7rMBA.jpg",wereadLink:"https://weread.qq.com/web/reader/18332f80813ab7292g010065#outline?noScroll=1",link:"https://book.douban.com/subject/27168564/",tags:["管理学","认知科学","工作效率"],desc:"这是一部针对现代复杂世界所撰写的“认知防护手册”。作者阿图·葛文德通过医疗、建筑、投资等高风险领域的真实案例,揭示了人类在海量信息与高压环境下极易出现的判断疏忽。书中提出了“权力下放、简单至上、人为根本、持续改善”四大原则,指导读者将最佳实践外化为可操作的清单,从而在复杂系统中构建一道低成本、高回报的安全防线。",rating:4.6,highlights:["直面复杂时代的认知瓶颈:揭示在海量信息流中,清单如何作为“认知防护网”弥补人类记忆力与注意力分配的先天不足","提供兼具理念与落地的四大原则:通过“权力下放、简单至上、人为根本、持续改善”,构建一套可复用的清单设计哲学","扎实的医学实证背书:以手术感染率骤降等真实临床数据为支撑,证明清单思维在医疗、建筑、投资等高风险领域的跨行业普适性","简洁而具力量的流程创新:强调清单服务于人而非取代人,是帮助专业人士在高压环境下将复杂环节显性化、流程化的必备工具"]},{id:"book-020",title:"别让猴子跳回背上",author:"威廉·安肯三世",cover:"https://cdn.weread.qq.com/weread/cover/69/cpPlatform_7fFoBQ7dtqgABGSTskpJSN/t6_cpPlatform_7fFoBQ7dtqgABGSTskpJSN.jpg",wereadLink:"https://weread.qq.com/web/reader/9fc32010813ab7291g0196bd#outline?noScroll=1",link:"https://book.douban.com/subject/36103994/",tags:["时间管理","领导力","项目管理"],desc:"这是一部以“猴子”生动隐喻任务与责任的经典管理学著作。作者威廉·安肯三世深刻剖析了管理者常被琐事淹没的时间困境,并提出系统化的“猴子管理法”。通过明确任务归属、责任递减与有效授权,指导管理者如何把不属于自己的“猴子”交出去,从而释放精力专注于最高价值的战略思考,实现团队与个人的共同成长。",rating:4.3,highlights:["生动有趣的“猴子”隐喻:将枯燥的责任划分与任务流转具象化,直击职场中“忙碌却低效”的痛点","实用高效的“三步交接”法则:通过明确期望、授予资源与约定检查点,彻底避免下属的待办任务重新跳回自己背上","重塑时间管理与人才培养体系:指导高层放权、中层辅导、基层自发,将企业的成功真正建立在员工自主性的提升之上"]}],$e=[{id:"book-022",title:"学会提问(原书第12版)",author:"尼尔·布朗 / 斯图尔特·基利",cover:"https://cdn.weread.qq.com/weread/cover/68/YueWen_39980443/t6_YueWen_39980443.jpg",wereadLink:"https://weread.qq.com/web/reader/e6832d3072620d9be68aabf#outline?noScroll=1",link:"https://book.douban.com/subject/35513147/",tags:["批判性思维","逻辑学","认知科学","经典书"],desc:"这是一部培养批判性思维的经典实战指南。作者尼尔·布朗与斯图尔特·基利结合长期的教学与研究实践,提供了一套系统化、可操作的提问流程。全书通过大量真实情境案例,教导读者如何在信息泛滥的时代识别隐含假设、区分事实与观点,用高质量的“判断性问题”看透事物本质,从而做出更理性的决策。",rating:5,highlights:["聚焦批判性思考的核心能力:系统拆解“如何提出好问题”的思维过程,帮助读者在复杂信息中迅速抓住本质","提供可落地的提问与评估框架:从背景信息、关键概念到逻辑推理,构建一条完整的判断性问题链条","丰富的真实场景应用示范:结合课堂讨论、写作、日常沟通与职场决策等多元场景,让理论能“立即上手”","打造实用的思考检查单:不仅讲透“提问的价值”,更提供可直接转化为日常习惯的思维检查表,助你有效避开认知陷阱"]},{id:"book-026",title:"如何阅读一本书",author:"莫提默·J. 艾德勒 / 查尔斯·范多伦",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/810/23723810/t6_23723810.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=272326407169ff22272934f&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/1013208/",tags:["阅读方法","思维训练","经典"],desc:"阅读领域的“元方法”指南。作者艾德勒与范多伦将阅读划分为基础阅读、检视阅读、分析阅读与主题阅读四个进阶层次,并强调阅读是一项主动的思考活动。本书不仅提供了从“快速略读”到“系统拆解论点”的实操技巧,更致力于通过提问、归纳与批判,将阅读转化为训练理解力、批判力与终身学习的终极工具。",rating:5,highlights:["构建系统的四级阅读框架:从检视阅读到分析阅读再到主题阅读,为读者提供了一套从入门到精通的进阶路径","强调“主动与批判”的阅读观:拒绝被动接收,教导读者如何通过提问、归纳与反思,真正将作者的洞见转化为自己的认知","高效的检视阅读技巧:提供如何在有限时间内通过看目录、挑重点等方式,快速筛选并判断书目价值的核心能力","跨时代的经典效能:自1940年问世以来长盛不衰,其对逻辑拆解与深度思考的指导,是提升所有知识吸收效率的“总开关”"]},{id:"book-023",title:"检索力:打破信息差的科学方法",author:"龚芙蓉",cover:"https://cdn.weread.qq.com/weread/cover/58/cpplatform_feaxemubry47bnkzylqzwv/t6_cpplatform_feaxemubry47bnkzylqzwv1716796541.jpg",wereadLink:"https://weread.qq.com/web/reader/9de32810813ab8e00g018130#outline?noScroll=1",link:"https://book.douban.com/subject/36899979/",tags:["信息素养","检索能力","思维认知"],desc:"本书聚焦“检索力”这一核心技能,旨在帮助读者在信息过载的时代主动掌握“逆风而行”的搜索能力。作者龚芙蓉结合二十余年实践经验,用生动的人文与诺贝尔奖级科学案例,将枯燥的检索工具化为有趣的故事。不仅教授非线性、迭代式的搜索技巧,更致力于重塑读者的探究精神,赋予其走出“信息茧房”的勇气。",rating:4.2,highlights:["丰富的跨学科趣味案例驱动:用“张冠李戴的马克思名言”等生动故事,将枯燥繁琐的检索步骤转化为轻松的探索之旅","重塑非线性与迭代的搜索思维:打破按部就班的线性流程误区,建立以耐心与热情驱动的多轮迭代搜索心态","直击科研与职场的实用痛点:提供可快速落地的实操指南,帮助读者切实缩短科研周期、大幅提升工作效率","兼顾技能训练与人文底色:在教授如何利用和创造信息的同时,注重培养读者的信息素养与打破信息差的认知勇气"]},{id:"book-027",title:"原则",author:"瑞·达利欧",cover:"https://cdn.weread.qq.com/weread/cover/23/YueWen_921568/t6_YueWen_921568.jpg",wereadLink:"https://weread.qq.com/web/reader/848324405e0fe08483ab6a4#outline?noScroll=1",link:"https://book.douban.com/subject/27608239/",tags:["投资","方法论","自我管理"],desc:"桥水基金创始人瑞·达利欧总结四十余年投资、管理与人生经验的集大成之作。作者提出将生活和工作像机器一样系统化,确立了“极度求真”与“极度透明”两大基石,并通过“创意择优”与“基于可信度的决策机制”来迭代思维。书中包含500多条可操作原则,旨在帮助读者在复杂世界中保持开放心态、看清现实,并做出最优决策。",rating:4.8,highlights:["“极度求真”与“极度透明”的基石:主张诚实面对现实,通过公开决策过程来获取外部反馈,达成高效协作","创意择优与可信度加权机制:摒弃个人权威,利用数据驱动的讨论与可信度权重,在团队中选出最优方案","500余条可落地的原则清单:涵盖自我认知、投资决策、团队治理等场景,构建出一套随时可查的行动指南","系统化的“机器”思维:将生活与组织管理拆解为可维护、可迭代的系统,有效规避情绪化干扰"]},{id:"book-031",title:"价值",author:"张磊",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/958/33577958/t6_33577958.jpg",wereadLink:"https://weread.qq.com/web/reader/5be32a3072005be65bef195#outline?noScroll=1",link:"https://book.douban.com/subject/35188914/",tags:["价值投资","商业思维","创业"],desc:"高瓴资本创始人张磊首部个人及投资思想著作。全书通过回顾作者的个人求学与创业历程,系统阐释了“长期主义”与“重仓中国”的核心投资理念,并首次披露了高瓴投资的七大公式。作者将十余个典型投资案例与个人价值修养相结合,揭示了如何在不确定的商业环境中,通过坚持原则、敬畏规则与持续创新,创造长久、真实的价值。",rating:4.6,highlights:["系统构建长期主义哲学:首次系统化梳理“高瓴七大公式”,为读者提供从认知、决策到执行的价值投资实战模型","深度复盘经典实战案例:通过腾讯、货拉拉等真实商业案例,拆解如何在复杂市场中识别企业护城河与核心价值","投资之外的人文思考:延伸至教育、人才与科学观,展现作者作为顶尖投资者对社会责任与长期价值创造的深度思考","可视化的阅读体验:精选多幅手绘彩插与历史影像,将深刻的投资逻辑与企业成长叙事变得更加生动、直观"]},{id:"book-032",title:"纳瓦尔宝典",author:"埃里克·乔根森 / 纳瓦尔·拉维坎特",cover:"https://cdn.weread.qq.com/weread/cover/89/YueWen_44026191/t6_YueWen_44026191.jpg",wereadLink:"https://weread.qq.com/web/reader/e1e32b00729fc94fe1e824d#outline?noScroll=1",link:"https://book.douban.com/subject/35876121/",tags:["财富管理","个人成长","幸福哲学","思维认知"],desc:"这是一部汇集硅谷著名投资人纳瓦尔·拉维坎特过去十年关于财富与幸福思考的行动指南。全书摒弃了“致富靠运气”的传统观念,提出积累财富与幸福生活是可以通过学习掌握的技能。通过系统整理推特、播客与访谈中的智慧,本书为读者提供了如何在快速变化的科技与经济环境中,利用杠杆、发挥个人独特性,进而实现财务自由并获得持久内心满足的方法论。",rating:4.7,highlights:["将财富与幸福视为可习得的技能:打破运气论,强调通过建立杠杆、发挥个人独特性来获取非线性的回报","十年思想的系统化编纂:将碎片化的互联网智慧提炼为成体系的方法论,打造了数字时代个人的“行动指南”","兼顾财富积累与内心满足:不仅教导如何高效赚钱,更深入探讨如何通过阅读、冥想与长期主义,在职场成功中寻找内心的宁静","极具实操性的工具箱:提供如深度思考、刻意练习、构建个人品牌等具体路径,帮助读者在碎片化时代快速实现自我迭代"]},{id:"book-028",title:"优秀的绵羊",author:"威廉·德雷谢维奇",cover:"https://cdn.weread.qq.com/weread/cover/78/cpplatform_3ncoeekcuaectlzj9hf5nr/t6_cpplatform_3ncoeekcuaectlzj9hf5nr1744626569.jpg",wereadLink:"https://weread.qq.com/web/reader/1c0324c0813ab9d91g010aba#outline?noScroll=1",link:"https://book.douban.com/subject/26747208/",tags:["博雅教育","社会学","个人成长"],desc:"耶鲁大学前教授威廉·德雷谢维奇对美国常春藤精英教育体制的尖锐批判之作。作者通过二十余年的教学观察,指出顶尖学府培养出一群虽然聪明、优秀,但普遍焦虑、缺乏目标感且唯命是从的“优秀绵羊”。本书呼吁社会重新审视教育的本质,摆脱对名校与高薪的盲目崇拜,回归博雅教育,鼓励学生探索内在驱动力与自我价值。",rating:4.2,highlights:["犀利剖析精英教育弊端:直击常春藤体制培养出“聪明但没有灵魂”的学生的现实,反思唯名校与成绩论的单一评价体系","回归博雅教育的核心价值:批判应试化倾向,提倡给予学生更多探索、失败与重塑自我的空间,强调教育的本质在于帮助个体找到自我","提供挣脱外部期待的认知框架:既为迷茫的年轻人指明如何重建内在动力,也给家长和教育者敲响了关于“成功定义”的警钟","跨文化背景下的教育共鸣:尽管以美国精英教育为例,其对“教育内卷”与“缺乏目标感”的批判,引发了全球高压教育环境下的深层共鸣"]},{id:"book-029",title:"把自己变成稀缺资产",author:"何思平",cover:"https://cdn.weread.qq.com/weread/cover/98/cpplatform_ncqzerh3wdywn9mlc9cjna/t6_cpplatform_ncqzerh3wdywn9mlc9cjna1694085413.jpg",wereadLink:"https://weread.qq.com/web/reader/2fe326f0813ab821fg0146df#outline?noScroll=1",link:"https://book.douban.com/subject/36513648/",tags:["个人成长","思维认知","自我管理","投资理财"],desc:"这是一个将“人生”视作“公司”来经营的实战指南。作者何思平结合自身从严重口吃到演讲冠军、再到连续创业成功的跨越式经历,提出了“人生有限公司”的经营哲学。全书通过“生命立方体”模型,从认知、实践、精力管理三个维度拆解了如何通过持续输出与跨界学习,将自己打造为具有高壁垒、不可替代的“稀缺资产”。",rating:4.2,highlights:["提出“人生有限公司”经营哲学:倡导将自己视作最值得投资的上市公司,通过不断提升认知与能力壁垒,把“人生”经营成稀缺资产","系统化的“生命立方体”模型:从认知、实践、精力管理三个维度构建个人成长闭环,解决成长中的无序感与碎片化难题","聚焦个人核心竞争力:深度拆解认知力、学习力与共情力等稀缺能力的获取路径,教导读者在不同场景中通过实战验证自我价值","高度可操作的工具清单:摒弃鸡汤式说教,将自我成长拆解为具体的习惯改造与复盘清单,帮助读者在痛点与高光时刻都能通过反馈机制实现自我迭代"]},{id:"book-030",title:"成长第二曲线:跨越S型持续成长",author:"查尔斯·汉迪",cover:"https://cdn.weread.qq.com/weread/cover/65/YueWen_39427437/t6_YueWen_39427437.jpg",wereadLink:"https://weread.qq.com/web/reader/15d32ed072599d6d15daa86#outline?noScroll=1",link:"https://book.douban.com/subject/35531368/",tags:["管理学","个人成长","人生哲学","未来趋势"],desc:"管理大师查尔斯·汉迪的“人生长跑指南”。本书通过书信体形式,深度探讨了在数字时代背景下个人如何识别并跨越“第二曲线”。汉迪指出,无论组织还是个人,都受制于S型增长曲线,只有在第一曲线衰退前主动布局新的增长点,并保持内在价值的独立与进化,才能在不断变化的环境中获得持续且有意义的成长。",rating:4.5,highlights:["百岁管理大师的人生体悟:以书信体浓缩一生管理研究与个人经验,提供了从时间维度审视工作、学习与生活的全景视角","“第二曲线”理论的全面进阶:深刻揭示组织与个人的兴衰规律,教导读者如何在第一曲线的巅峰前就主动布局新的增长引擎","全场景下的持续进化方案:将第二曲线思维跨界应用于教育、职业规划、婚姻与家庭中,强调“变化才是常态”,鼓励持续自我重塑","面向Z世代的清醒处方:在科技高歌猛进的数字时代,提醒后人重视诚信、协作等软实力,保持独立判断,避免在算法与焦虑中迷失自我"]}],Me=[{id:"book-033",title:"枪炮、病菌与钢铁",author:"贾雷德·戴蒙德",cover:"https://cdn.weread.qq.com/weread/cover/99/YueWen_42766048/t6_YueWen_42766048.jpg",wereadLink:"https://weread.qq.com/web/reader/843329f0728c8ee08434fb1#outline?noScroll=1",link:"https://book.douban.com/subject/1813841/",tags:["人类历史","地理决定论","社会学","跨学科"],desc:"一部重新定义人类历史发展的宏大著作。作者贾雷德·戴蒙德通过生物学、地理学、人类学等多学科交叉视角,强有力地反驳了“种族决定论”和“西方文明优越论”。他提出,决定文明兴衰的关键并非种族,而是环境因素、地理格局以及动植物驯化的差异,这些自然条件的偶然性最终导致了技术、免疫力和权力结构的差异,从而重塑了现代世界的全球版图。",rating:4.8,highlights:["颠覆性的历史观:以环境与地理差异解释文明兴衰,有力冲击了长期流行的西方文明优越论,提供了理解人类历史的全新视角","跨学科的综合研究框架:巧妙融合生物学、地理学、历史学、社会学等多学科知识,重建人类文明演进的逻辑路径","系统揭示历史演变的机制:深入剖析农业、病菌传播与技术权力如何形成相互强化的循环,展示了文明发展背后复杂的资源互动","具备公共思想者的宏观视野:将严谨的科学研究转化为对人类命运与社会发展的深刻反思,为现代人理解自身在历史长河中的位置提供了绝佳参照"]},{id:"book-034",title:"中国社会各阶层分析",author:"梁晓声",cover:"https://cdn.weread.qq.com/weread/cover/0/yuewen_42682684/t6_yuewen_426826841728383400.jpg",wereadLink:"https://weread.qq.com/web/reader/085326e0728b493c085ade1#outline?noScroll=1",link:"https://book.douban.com/subject/35485315/",tags:["社会观察","阶层研究","现实主义"],desc:"茅盾文学奖得主梁晓声基于多年社会观察的现实题材力作。作者将快速变迁的中国社会划分为不同阶层,以平民视角细腻描摹各群体的生存状态、心理困境与阶层焦虑。全书不追求纯学术的枯燥分析,而是通过文学化的社会观察,勾勒出一幅当代中国社会的“浮世绘”,引导读者在时代坐标中找准定位,理解社会变迁背后的结构性逻辑。",rating:4.3,highlights:["平民视角下的社会“浮世绘”:通过细腻的笔触勾勒各阶层的生存逻辑与心理画像,帮助读者直观理解宏观社会结构","兼具现实痛点与精神深度:不仅呈现物质生活的差异,更深刻剖析阶层焦虑背后的价值困境,为理解当代社会提供人文参照","时代脉络中的命运书写:将个体命运置于历史事件的宏观背景中考察,展现了半个世纪以来社会变迁的深层脉络","文学笔触下的社会关怀:作为茅盾文学奖得主,作者通过富有故事性的叙事,既保留了批判性,又让文本充满了温暖的人文温度"]},{id:"book-021",title:"把自己作为方法",author:"项飙 / 吴琦",cover:"https://cdn.weread.qq.com/weread/cover/81/cpPlatform_3300003962/t6_cpPlatform_3300003962.jpg",wereadLink:"https://weread.qq.com/web/reader/d7532f80813ab680cg012708#outline?noScroll=1",link:"https://book.douban.com/subject/35092383/",tags:["社会学","访谈录","思想方法"],desc:"两代学人项飙与吴琦历时三年、跨越五地的深度对话实录。本书从项飙的个人经验切入,探讨了中国社会近半个世纪的变迁、全球化与民粹主义等宏大议题。在自我泛滥与思想受困的时代,作者提出“把自己作为方法”,指导读者如何在全球化年代重新定位自我、重建“附近”,并在个人体验与宏观叙事之间搭建起思考与行动的桥梁。",rating:4.6,highlights:["以“自我”切入回应宏大议题:示范如何在个人真实体验与全球化、社会变迁等宏观叙事之间搭建认知的桥梁","提供重建“附近”的行动指南:在自我泛滥的潮流中,指导读者如何审视现实,创造性地建设身边的小世界","兼具学术深度与极高可读性:将人类学、社会学的深刻理论洞察,巧妙融入生动的田野故事与双人生活化对谈中","跨越三年的思想碰撞:历时三年、跨越五地的持续对话结集,反思知识生产与公共讨论的真实处境"]}],Te=[{id:"book-035",title:"百岁人生:长寿时代的生活和工作",author:"琳达·格拉顿 / 安德鲁·斯科特",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/860/22902860/t6_22902860.jpg",wereadLink:"https://weread.qq.com/web/reader/30c323e0715d784c30c1e1b#outline?noScroll=1",link:"https://book.douban.com/subject/30245089/",tags:["人生规划","长寿时代","社会学"],desc:"基于伦敦商学院的经典课程,作者琳达·格拉顿与安德鲁·斯科特提出,面对一半概率活到100岁的长寿时代,传统的“学习-工作-退休”三段式人生模式已彻底失效。本书指导读者如何重新设计人生,通过拥抱多阶段人生模型,在更长的生命周期中平衡工作、学习与休闲,并强调在财务资产之外,更要注重健康、友谊与知识等“无形资产”的持续投入与增值。",rating:4.3,highlights:["重构人生模式:打破传统的“三段式”生活范式,提出充满弹性的“多阶段人生”模型,让工作与学习不再是线性的重复","从关注财务到“无形资产”:除了养老金,强调健康、友谊、社交网络与心理韧性等“无形资产”才是维持长寿生活质量的核心动力","职场与转型的系统规划:提供针对长寿时代的职业设计思路,涵盖何时转型、如何投资自身、怎样应对不确定性等实战框架","社会与制度的深度洞察:探讨长寿如何冲击养老金体系、劳动力市场与企业模式,帮助个人在宏观变革中把握主动权"]},{id:"book-00043",title:"重启吧!我的健康人生",author:"兰根·查特吉",cover:"https://cdn.weread.qq.com/weread/cover/80/cpplatform_kbrswv3bm7cix2zlyo6wtx/t6_cpplatform_kbrswv3bm7cix2zlyo6wtx1716362285.jpg",wereadLink:"https://weread.qq.com/web/reader/e8a32e80813ab8de4g0191c2#outline?noScroll=1",link:"https://book.douban.com/subject/36899697/",tags:["生活方式","预防医学","身心健康","自我管理"],desc:"英国临床医生基于20多年行医经验写就。本书主张“生活方式即良药”,围绕休息、饮食、运动和睡眠四个领域设计了20个微小行动计划,帮助现代人通过低成本的习惯改变逆转慢性问题。",rating:4.6,highlights:["提出99%的健康取决于日常习惯而非医学治疗,强调整体干预","构建“4×5”微行动框架,涵盖休息、饮食、运动、睡眠四个维度的20个小改变","兼顾科学深度与极简实操,如“12小时进食窗口”、“10分钟高强度运动”","关注现代职场人痛点,提供“小投入、大回报”的可叠加身心健康投资策略"]},{id:"book-00040",title:"你是你吃出来的:吃对少生病,病了这样吃",author:"夏萌",cover:"https://cdn.weread.qq.com/weread/cover/86/YueWen_920661/t6_YueWen_920661.jpg",wereadLink:"https://weread.qq.com/web/reader/7bb32c305e0c557bbdeab81#outline?noScroll=1",link:"https://book.douban.com/subject/27590675/",tags:["饮食科普","营养学","健康管理"],desc:"前安贞医院营养科主任夏萌结合十余年临床经验写成。本书颠覆“低油低脂”误区,提出回归进化的“65%植物+35%动物”膳食配比,并针对14种常见慢病给出“四分法”饮食干预方案,帮助读者重建健康饮食观。",rating:5,highlights:["指出多数慢病源于“蛋白质缺乏式营养不良”,打破常规低油低脂迷思","提出清晰量化的“65%植物类+35%动物类”科学饮食结构","针对冠心病、高血压等14种常见慢病提供实操性极强的“四分法”菜单","源于十万+真实临床病例,强调“一日三餐才是真正的保健品”"]},{id:"book-00041",title:"你是你吃出来的2",author:"夏萌",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/883/35905883/t6_35905883.jpg",wereadLink:"https://weread.qq.com/web/reader/40532d007223e15b4052fae#outline?noScroll=1",link:"https://book.douban.com/subject/35340053/",tags:["饮食指导","科普","疾病防治"],desc:"聚焦高血压、高脂血症、糖尿病等7大常见慢病,从临床营养医学角度逐一破除诸如“血压高不能吃肉”等饮食误区,提供系统的“上游-中游-下游”疾病防控思路与个体化营养处方。",rating:4.6,highlights:["专攻7大常见慢性病,为患者提供针对性的“生病了怎么吃”个体化指导","科学辟谣,破除“血压高不能吃肉”、“胆固醇高不能吃鸡蛋”等常见误区","梳理疾病发生因果链条,帮助读者从源头找到健康干预的着力点","提供从一日三餐、运动到心态调养的具体可操作生活方式清单"]}],Ge=JSON.parse('{"title":"好书推荐","description":"读书心得、推荐书籍和阅读技巧","frontmatter":{"title":"好书推荐","date":"2024-01-01T16:00:00.000Z","description":"读书心得、推荐书籍和阅读技巧","categories":["growth"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png","permalink":"/growth/books","tags":["悦读时光","资源推荐"]},"headers":[],"relativePath":"growth/books.md","filePath":"30.悦读时光/01.好书推荐.md"}'),Ne={name:"growth/books.md"},De=Object.assign(Ne,{setup(n){return(b,t)=>(a(),r("div",null,[t[0]||(t[0]=e("h1",{id:"好书推荐",tabindex:"-1"},[l("好书推荐 "),e("a",{class:"header-anchor",href:"#好书推荐","aria-label":"Permalink to “好书推荐”"},"​")],-1)),t[1]||(t[1]=e("h2",{id:"_1-ai-与数学思维",tabindex:"-1"},[l("1. AI 与数学思维 "),e("a",{class:"header-anchor",href:"#_1-ai-与数学思维","aria-label":"Permalink to “1. AI 与数学思维”"},"​")],-1)),t[2]||(t[2]=e("blockquote",null,[e("p",null,[l("在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操作系统”, "),e("strong",null,"理解 AI,本质上是理解数据、数学与逻辑如何重构这个世界"),l("。")]),e("p",null,"这套书单从数学思维的底层逻辑出发,让我们理解 ChatGPT 等大模型背后的计算机制,将硬核的神经网络与概率统计转化为优化生活的决策工具。它不仅能界定机器智能的边界,更颠覆了传统的“目标论”,倡导在不确定性中通过“踏脚石”思维寻找突破性创新的可能。AI 的研究实践告诉我们,伟大的突破往往无法被预设,唯有拥抱“寻宝者思维”才能在未知中偶遇奇迹,我们需要颠覆传统的创新范式。")],-1)),h(k,{books:g(Be)},null,8,["books"]),t[3]||(t[3]=M("",4)),h(k,{books:g(Ie)},null,8,["books"]),t[4]||(t[4]=e("h3",{id:"_2-2-商业化",tabindex:"-1"},[l("2.2 商业化 "),e("a",{class:"header-anchor",href:"#_2-2-商业化","aria-label":"Permalink to “2.2 商业化”"},"​")],-1)),t[5]||(t[5]=e("blockquote",null,[e("p",null,[l("在追逐“独角兽”和规模扩张的狂热迷思之后,真正的商业高手正在重新回归本质:"),e("strong",null,"盈利才是企业的核心护城河。"),l(" 这套书单为我们揭示了一种"),e("strong",null,"更具韧性的商业路径——“小而美”的极简经营"),l("。它教导我们如何拒绝低效的内卷与忙碌,通过“做更少但创造更多价值”的思维,打造在不确定时代下依然能保持稳定现金流的“慢公司”。")]),e("p",null,[e("strong",null,"商业的成功,往往源于敢于挑战“难而正确”的事"),l("。从皮克斯如何建立允许失败的创意土壤,到 Waze 如何通过解决被忽视的痛点实现跨越式成长,这些世界级案例证明了:卓越的组织不仅需要极简的流程与高效的分布式协作(远程办公),更需要一种“冷静”的文化,将利润置于规模之上。")])],-1)),h(k,{books:g(We)},null,8,["books"]),t[6]||(t[6]=e("h2",{id:"_3-效率与效能",tabindex:"-1"},[l("3. 效率与效能 "),e("a",{class:"header-anchor",href:"#_3-效率与效能","aria-label":"Permalink to “3. 效率与效能”"},"​")],-1)),t[7]||(t[7]=e("blockquote",null,[e("p",null,[l("在信息过载与高压竞争的现代环境中,平庸与卓越的分水岭不再是做事的速度,而是"),e("strong",null,"决策的精度与责任的边界"),l("。这套书单为我们提供了一套从个人认知到组织协作的“效能防线”:首先,它"),e("strong",null,"引导我们完成从“时钟”到“罗盘”的思维跨越,打破盲目追求速度的迷思,确保将核心精力倾注在真正产生长远复利的“重要非紧急”事务之上"),l("。 真正的效能源于对复杂性的科学驾驭:")]),e("ul",null,[e("li",null,"通过“清单革命”式的认知防护,我们将最佳实践外化为可靠的防错系统,弥补人类在极端环境下的认知局限;"),e("li",null,"“猴子管理法”则以生动的视角重塑了职场协作的责任逻辑,教我们通过有效授权拒绝无谓的干扰,释放战略思考的精力;")])],-1)),h(k,{books:g(Ye)},null,8,["books"]),t[8]||(t[8]=e("h2",{id:"_4-学习与成长",tabindex:"-1"},[l("4. 学习与成长 "),e("a",{class:"header-anchor",href:"#_4-学习与成长","aria-label":"Permalink to “4. 学习与成长”"},"​")],-1)),t[9]||(t[9]=e("blockquote",null,[e("p",null,[l("在信息爆炸与快速变革的时代,"),e("strong",null,"真正的成长不再是知识的被动堆砌,而是认知系统的彻底迭代"),l("。这套书单为我们构建了一个从底层思维到人生经营的闭环:")]),e("ul",null,[e("li",null,"首先,通过批判性思维与深度阅读夯实“元能力”,在泛滥的信息中识别本质,将他人的洞见转化为自己的血肉;"),e("li",null,"其次,利用“检索力”打破信息差,确保自己在任何领域都能快速获取高质量资源,掌握逆风而行的主动权。")]),e("p",null,[e("strong",null,"人生不是一场盲目的长跑,而是一场基于“原则”的精密经营"),l("。从达利欧的系统化决策,到纳瓦尔的财富与幸福逻辑,这些智者教导我们如何利用杠杆、坚持长期主义,将自己视作一家“人生有限公司”来经营。我们需要摆脱“优秀绵羊”式的被动驱动,通过识别成长的“第二曲线”,在巅峰时刻主动寻求突破,将自己打造成不可替代的稀缺资产。阅读这些经典,不仅是为了习得技能,更是为了在算法与焦虑的夹击中,重塑内心的宁静与独立判断的勇气。")])],-1)),h(k,{books:g($e)},null,8,["books"]),t[10]||(t[10]=e("h2",{id:"_5-人文社科",tabindex:"-1"},[l("5. 人文社科 "),e("a",{class:"header-anchor",href:"#_5-人文社科","aria-label":"Permalink to “5. 人文社科”"},"​")],-1)),t[11]||(t[11]=e("blockquote",null,[e("p",null,"在宏观历史与微观现实间构建认知:在碎片化与不确定性并存的时代,穿透表象、直达本质的洞察力成为必需。这套单为我们开启了两扇窗:"),e("ul",null,[e("li",null,"一扇望向万年文明的宏大坐标,通过《枪炮、病菌与钢铁》的跨学科视野,拆解地理环境如何冷酷而偶然地重塑全球版图,彻底颠覆“文明优越论”的傲慢;"),e("li",null,"另一扇则照向当下社会的真实肌理,在梁晓声对各阶层生存困境的细腻描摹中,读懂大时代变革背后隐秘的结构性逻辑与阶层焦虑。")]),e("p",null,[e("strong",null,"人文思考的终极价值,在于如何将宏大叙事转化为个人的行动力量"),l("。正如项飙所倡导的“把自己作为方法”,这些著作不仅是知识的传递,更是思维的松绑。它们教导我们不再做时代的被动旁观者,而是学会在个人体验与宏观世界之间搭建桥梁,通过重建“附近”的小世界,在喧嚣中找准自我的定位。")])],-1)),h(k,{books:g(Me)},null,8,["books"]),t[12]||(t[12]=e("h2",{id:"_6-健康生活",tabindex:"-1"},[l("6. 健康生活 "),e("a",{class:"header-anchor",href:"#_6-健康生活","aria-label":"Permalink to “6. 健康生活”"},"​")],-1)),t[13]||(t[13]=e("img",{src:T,style:{width:"100%","border-radius":"8px","margin-bottom":"20px"},alt:"about site background"},null,-1)),t[14]||(t[14]=e("blockquote",null,[e("p",null,[l("在面临大概率活到100岁的“长寿时代”,传统的线性人生模式正在失效。我们需要对“健康”进行一次彻底的认知重构:"),e("strong",null,"健康不再仅仅是“没有疾病”,而是支撑我们跨越漫长生命周期、应对多阶段人生挑战的最核心“无形资产”"),l("。想要让这套生命系统长期平稳运行,真正的解法并不在医院的处方笺里,而是隐藏在我们每天的日常选择中。")]),e("p",null,[l("决定我们长期健康状态的,有 99 %取决于日常习惯。我们需要"),e("strong",null,"在休息、饮食、运动、睡眠这四个高频生活维度中,植入微小但杠杆率极高的改变"),l("(例如12小时进食窗口、10分钟高强度运动、睡前屏蔽数字通知等)。用最低的执行成本,置换身心状态的巨大回报。")])],-1)),h(k,{books:g(Te)},null,8,["books"])]))}});export{Ge as __pageData,De as default}; +import{f as x,i as z,o as a,b as h,T as B,w as I,c as r,g as _,z as P,a as e,k as v,t as c,F as p,m as f,e as l,A as W,_ as A,s as j,h as Y,n as $,d as M,u as g}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const T="/img/cover/health_bg.png",N={class:"book-panel__drawer"},V={class:"book-panel__header-meta"},G={class:"book-panel__title"},D={class:"book-panel__author"},F={class:"book-panel__body"},Z={class:"book-panel__top-bar"},H={class:"book-panel__top-left"},J={class:"book-panel__tags"},O={key:0,class:"book-panel__rating"},R={class:"stars"},E={key:0,viewBox:"0 0 24 24",fill:"currentColor"},K={key:1,viewBox:"0 0 24 24",class:"half-star"},Q=["id"],X=["clip-path"],U={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},ee={class:"rating-text"},te={class:"book-panel__links"},oe=["href"],ae={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},le=["href"],re={width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",style:{"flex-shrink":"0"}},ne={class:"book-panel__section"},se={class:"book-panel__desc"},ie={key:0,class:"book-panel__section"},de={class:"book-panel__highlights"},ce=x({__name:"BookDetailPanel",props:{book:{},open:{type:Boolean},heroColor:{},tagColors:{}},emits:["close"],setup(n,{emit:b}){const t=b;return(w,o)=>(a(),z(W,{to:"body"},[h(B,{name:"panel-slide"},{default:I(()=>[n.open&&n.book?(a(),r("div",{key:0,class:"book-panel",onClick:o[2]||(o[2]=P(i=>t("close"),["self"]))},[e("div",{class:"book-panel__overlay",onClick:o[0]||(o[0]=i=>t("close"))}),e("div",N,[e("div",{class:"book-panel__header",style:v({background:n.heroColor})},[e("button",{class:"book-panel__close",title:"关闭",onClick:o[1]||(o[1]=i=>t("close"))},[...o[3]||(o[3]=[e("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none"},[e("path",{d:"M12 4L4 12M4 4l8 8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])]),e("div",V,[e("h2",G,c(n.book.title),1),e("p",D,c(n.book.author),1)])],4),e("div",F,[e("div",Z,[e("div",H,[e("div",J,[(a(!0),r(p,null,f(n.book.tags,(i,m)=>(a(),r("span",{key:i,class:"book-panel__tag",style:v({background:n.tagColors[m%n.tagColors.length].bg,color:n.tagColors[m%n.tagColors.length].text})},c(i),5))),128))]),n.book.rating!=null?(a(),r("div",O,[o[8]||(o[8]=e("span",{class:"rating-label"},"推荐指数:",-1)),e("div",R,[(a(),r(p,null,f(5,i=>e("span",{key:i,class:"star"},[i<=Math.floor(n.book.rating)?(a(),r("svg",E,[...o[4]||(o[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):i===Math.ceil(n.book.rating)&&n.book.rating%1!==0?(a(),r("svg",K,[e("defs",null,[e("clipPath",{id:"clip-"+n.book.id},[...o[5]||(o[5]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,Q)]),o[6]||(o[6]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#clip-"+n.book.id+")"},null,8,X)])):(a(),r("svg",U,[...o[7]||(o[7]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",ee,c(n.book.rating.toFixed(1)),1)])):_("",!0)]),e("div",te,[e("a",{href:n.book.link,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",ae,[...o[9]||(o[9]=[e("path",{d:"M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6M15 3h6v6M10 14L21 3",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])),o[10]||(o[10]=l(" 豆瓣 ",-1))],8,oe),n.book.wereadLink?(a(),r("a",{key:0,href:n.book.wereadLink,target:"_blank",rel:"noopener",class:"book-panel__link-btn"},[(a(),r("svg",re,[...o[11]||(o[11]=[e("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z",fill:"currentColor"},null,-1)])])),o[12]||(o[12]=l(" 微信读书 ",-1))],8,le)):_("",!0)])]),o[15]||(o[15]=e("div",{class:"book-panel__divider"},null,-1)),e("section",ne,[o[13]||(o[13]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"📖"),l(" 内容简介 ")],-1)),e("p",se,c(n.book.desc),1)]),n.book.highlights&&n.book.highlights.length>0?(a(),r("section",ie,[o[14]||(o[14]=e("h3",{class:"book-panel__section-title"},[e("span",{class:"book-panel__section-icon"},"✨"),l(" 书籍亮点 ")],-1)),e("ul",de,[(a(!0),r(p,null,f(n.book.highlights,(i,m)=>(a(),r("li",{key:m,class:"book-panel__highlight-item"},c(i),1))),128))])])):_("",!0)])])])):_("",!0)]),_:1})]))}}),he=A(ce,[["__scopeId","data-v-1ddfc013"]]),be={class:"book-list"},ue=["onClick"],ge=["src","alt"],ke={class:"book-cover__overlay"},pe={key:0,class:"book-cover__hint"},we=["href"],me={class:"book-info"},_e={class:"book-info__title"},fe={class:"book-info__author"},qe={key:0,class:"book-info__rating"},ve={class:"stars"},je={key:0,viewBox:"0 0 24 24",fill:"currentColor"},Le={key:1,viewBox:"0 0 24 24",class:"half-star"},ye=["id"],Se=["clip-path"],xe={key:2,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5"},Pe={class:"rating-text"},Ae={class:"book-info__tags"},Ce={class:"book-info__desc"},ze=x({__name:"BookRecommend",props:{books:{}},setup(n){const b=["linear-gradient(135deg, #e8f0fe 0%, #c7d9fd 100%)","linear-gradient(135deg, #e6f4ea 0%, #b7dfc4 100%)","linear-gradient(135deg, #fff3e0 0%, #ffd9a0 100%)","linear-gradient(135deg, #fce4ec 0%, #f8b4c8 100%)","linear-gradient(135deg, #ede7f6 0%, #cdb8ee 100%)","linear-gradient(135deg, #e0f7fa 0%, #9ee8f0 100%)"],t=[{bg:"#e8f0fe",text:"#3b5bdb"},{bg:"#e6f4ea",text:"#2e7d32"},{bg:"#fff3e0",text:"#e65100"},{bg:"#fce4ec",text:"#c2185b"},{bg:"#ede7f6",text:"#6a1b9a"},{bg:"#e0f7fa",text:"#00838f"}],w=j(null),o=j(0),i=j(!1),m=Y(()=>b[o.value%b.length]);function C(q,d){q.withPanel!==!1&&(w.value?.id===q.id&&i.value?L():(w.value=q,o.value=d,i.value=!0))}function L(){i.value=!1,setTimeout(()=>{w.value=null},300)}return(q,d)=>(a(),r(p,null,[e("div",be,[(a(!0),r(p,null,f(n.books,(s,y)=>(a(),r("div",{key:s.id,class:$(["book-card",{"book-card--active":w.value?.id===s.id&&i.value}]),onClick:u=>C(s,y)},[e("div",{class:"book-cover",style:v({background:b[y%b.length]})},[s.cover?(a(),r("img",{key:0,src:s.cover,alt:s.title,class:"book-cover__img"},null,8,ge)):_("",!0),e("div",ke,[s.withPanel!==!1?(a(),r("span",pe,"点击查看详情")):(a(),r("a",{key:1,href:s.link,target:"_blank",rel:"noopener",class:"book-cover__hint",onClick:d[0]||(d[0]=P(()=>{},["stop"]))},"查看豆瓣",8,we))])],4),e("div",me,[e("div",_e,"《"+c(s.title)+"》",1),e("div",fe,c(s.author),1),s.rating!=null?(a(),r("div",qe,[e("div",ve,[(a(),r(p,null,f(5,u=>e("span",{key:u,class:"star"},[u<=Math.floor(s.rating)?(a(),r("svg",je,[...d[1]||(d[1]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])])):u===Math.ceil(s.rating)&&s.rating%1!==0?(a(),r("svg",Le,[e("defs",null,[e("clipPath",{id:"card-clip-"+s.id},[...d[2]||(d[2]=[e("rect",{x:"0",y:"0",width:"12",height:"24"},null,-1)])],8,ye)]),d[3]||(d[3]=e("path",{class:"star-empty",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"none",stroke:"currentColor","stroke-width":"1.5"},null,-1)),e("path",{class:"star-filled",d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z",fill:"currentColor","clip-path":"url(#card-clip-"+s.id+")"},null,8,Se)])):(a(),r("svg",xe,[...d[4]||(d[4]=[e("path",{d:"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"},null,-1)])]))])),64))]),e("span",Pe,c(s.rating.toFixed(1)),1)])):_("",!0),e("div",Ae,[(a(!0),r(p,null,f(s.tags,(u,S)=>(a(),r("span",{key:u,class:"tag",style:v({background:t[S%t.length].bg,color:t[S%t.length].text})},c(u),5))),128))]),e("p",Ce,c(s.desc),1)])],10,ue))),128))]),h(he,{book:w.value,open:i.value,"hero-color":m.value,"tag-colors":t,onClose:L},null,8,["book","open","hero-color"])],64))}}),k=A(ze,[["__scopeId","data-v-fd79cd55"]]),Be=[{id:"book-001",title:"心中有数:生活中的数学思维",author:"刘雪峰",cover:"https://cdn.weread.qq.com/weread/cover/39/3300018939/t6_3300018939.jpg",wereadLink:"https://weread.qq.com/web/reader/df6323a0813ab6de5g019a31#outline?noScroll=1",link:"https://book.douban.com/subject/35749693/",tags:["数学思维","科普","决策"],desc:"本书通过大量贴近日常的例子,展示数学思维如何优化我们的生活决策。作者用概率、统计、最优化等数学工具,为生活、职场、人际交往中的权衡问题提供分析框架,帮助读者在面对不确定性时像计算机一样找到“最优解”。",rating:4.9,highlights:["将大数定律、最小二乘法等硬核数学概念与日常生活巧妙结合","提供应对不确定性和多目标抉择的科学决策框架","强调数学不仅是公式计算,更是看世界、优化人生的高效思维工具"]},{id:"book-0020",title:"智慧的疆界:从图灵机到人工智能",author:"周志明",cover:"https://cdn.weread.qq.com/weread/cover/92/YueWen_23637052/t6_YueWen_23637052.jpg",wereadLink:"https://weread.qq.com/web/reader/b9732f007168ac3cb976eca#outline?noScroll=1",link:"https://book.douban.com/subject/30379536/",tags:["人工智能","科技史","通识读物"],desc:"本书是一部面向大众的人工智能通识读物。作者周明以时间为主线,将人工智能的发展历程、关键人物与里程碑事件串联起来,从五个维度展开:学术理论、历史沿革、技术应用、研究成果以及面临的困难与未来挑战。全书旨在用通俗的语言和巧妙的结构,把人工智能从“阳春白雪”的学术殿堂带到公众视野,帮助读者理解 AI 能做什么、做不到什么,以及背后的技术与思想根源。",rating:5,highlights:["以时间为主线,清晰梳理人工智能的发展脉络与里程碑","深入浅出,用通俗语言将复杂的学术理论带入公众视野","客观剖析,帮助读者准确界定AI“能做什么”与“做不到什么”"]},{id:"book-004",title:"为什么伟大不能被计划",author:"肯尼斯·斯坦利 / 乔尔·雷曼",cover:"https://cdn.weread.qq.com/weread/cover/22/cpplatform_wfdzhk1dx7ig9aep4gagof/t6_cpplatform_wfdzhk1dx7ig9aep4gagof1686304376.jpg",wereadLink:"https://weread.qq.com/web/reader/0bf32020813ab7e6bg016510#outline?noScroll=1",link:"https://book.douban.com/subject/36357804/",tags:["人工智能","创新思维","认知科学"],desc:"本书由两位前沿AI科学家合著,提出了颠覆传统“目标-计划”思维的全新视角。结合AI研究实践,书中论证了伟大成就往往并非出自精心设计的蓝图,而是源于对未知的好奇、随机探索与不断试错。通过“寻宝者思维”和“踏脚石模型”等方法,为读者在高度不确定的环境中激发突破性创新提供了具体的行动框架。",rating:4.5,highlights:["颠覆传统的“目标论”,论证伟大成就源自对未知的好奇与无边界的探索","提供“寻宝者思维”“踏脚石模型”“新奇性探索”三大可操作的认知与实践工具","扎根OpenAI等前沿机构的实证背景,其启发意义跨学科适用于科研、商业及人生规划"]},{id:"book-003",title:"这就是ChatGPT",author:"斯蒂芬·沃尔弗拉姆",cover:"https://cdn.weread.qq.com/weread/cover/24/cpplatform_4cn8w4tmgzntjobg9ffeny/t6_cpplatform_4cn8w4tmgzntjobg9ffeny1703648785.jpg",wereadLink:"https://weread.qq.com/web/reader/74332a90813ab86c4g019d98#outline?noScroll=1",link:"https://book.douban.com/subject/36449803/",tags:["人工智能","大模型","ChatGPT"],desc:"本书由著名科学家斯蒂芬·沃尔弗拉姆撰写,全景式拆解了ChatGPT的内部工作机制。作者用通俗语言解释了神经网络和自回归架构等核心技术,探讨了简单的计算规则如何涌现出令人惊叹的智能,帮助读者深刻理解大语言模型为何能生成高质量的人类水平文本。",rating:4.3,highlights:["全景拆解核心技术:深入浅出地讲清ChatGPT背后的神经网络与自回归架构","独特的大师视角:将大模型视为“简单的计算规则”涌现复杂智能的绝佳范例","兼顾技术与商业影响:结合算力规模与行业冲击,全面探讨AI时代的机遇与挑战"]},{id:"book-0030",title:"人工智能:现代方法(第4版)(上下册)",author:"[美]斯图尔特·罗素(Stuart Russell) / [美]彼得·诺维格(Peter Norvig)",cover:"https://cdn.weread.qq.com/weread/cover/33/cpplatform_8rthznqfhsjuz5fswwn6kx/t6_cpplatform_8rthznqfhsjuz5fswwn6kx1675928213.jpg",wereadLink:"https://weread.qq.com/web/reader/fc332020813ab7942g0102ad#outline?noScroll=1",link:"https://book.douban.com/subject/36152133",tags:["人工智能","教材","理论实践结合","经典著作","计算机科学"],desc:"本书是人工智能领域的经典权威教材,系统、深入地探讨AI领域的理论与实践,以统一风格融合当今流行的AI思想与术语到前沿应用中,真正实现理论与实践相结合。全书分7个部分共28章,理论部分涵盖逻辑、概率、连续数学、感知、推理、学习、行动及公平、信任、社会公益和安全等社会议题;实践部分选取微电子设备、机器人行星探测器、在线服务、AlphaZero、人形机器人、自动驾驶、AI辅助医疗等热门场景。由加州大学伯克利分校教授斯图尔特·罗素与前谷歌研究总监彼得·诺维格联合撰写,被全球1500多所高校采用,适合作为AI相关专业本科生和研究生教材,也可作为专业人员的参考书。",rating:5,highlights:["体系完整覆盖面广,7个部分28章构成自洽的AI理论主线,涵盖核心理论与前沿议题","理论与实践并重,既阐述核心算法与模型,又展示在热门场景中的落地实例,便于知识迁移","紧跟前沿关注社会议题,专门讨论AI伦理与安全,引导思考技术与社会的交互责任","一站式权威参考,兼具教材属性与专业参考价值,适配高校教学与产业实践双重需求","现代理念贯穿始终,通过最新案例体现AI进展与行业趋势,呈现“活”的AI生态"]},{id:"book-0031",title:"模型思维:简化世界的人工智能模型",author:"龚才春",cover:"https://cdn.weread.qq.com/weread/cover/26/YueWen_38601826/t6_YueWen_38601826.jpg",wereadLink:"https://weread.qq.com/web/reader/5a8326e0724d04625a8e740#outline?noScroll=1",link:"https://book.douban.com/subject/35488925/",tags:["模型思维","人工智能","算法模型","机器学习","入门实践"],desc:"本书聚焦“如何用模型简化世界”的核心主题,将人工智能在现实业务中面临的难题归纳为权重、状态、序列、表示、相似、分类六大问题,并围绕该框架讲解对应模型思路与算法。书中弱化复杂数学公式,以大量生活化、业务化案例阐释模型理论与落地场景,帮助读者建立“模型—场景”映射关系,降低AI模型学习门槛,既是人工智能初学者的入门读物,也可为企业工程师、科研人员提供实践参考,适合各类读者学习并将模型思维应用到生活与工作中。",rating:4.8,highlights:["以“六大问题”框架串联AI模型,可按场景快速检索适配的模型思路","侧重落地实践,搭配大量生活化与业务案例,助力建立“模型—场景”映射","降低学习门槛,少数学公式、多直观案例,兼顾初学者与工程落地需求","受众群体广泛,适配工程师、科研人员及普通读者,可迁移模型思维至实际场景"]},{id:"book-005",title:"你看起来好像……我爱你:AI的工作原理以及它为这个世界带来的稀奇古怪",author:"贾内尔·沙内",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/970/39481970/t6_39481970.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=f9a32c10725a7272f9a14f9&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/35407136/",tags:["人工智能","趣味科普","漫画算法"],desc:"这是一部写给普通读者的人工智能趣味科普读物。作者贾内尔·沙内结合生活化的比喻和超级可爱的漫画,深入浅出地讲解了AI的基本工作原理、实际应用及其局限性。书中通过大量幽默的AI实验与“翻车”案例,带领读者在轻松捧腹的氛围中,准确理解算法能做什么、不能做什么。",rating:4.2,highlights:["幽默可爱的漫画导览:用插图和通俗语言将“深度学习”“神经网络”等抽象概念可视化","丰富的趣味实验案例:通过精选的AI“翻车”故事,直观揭示算法背后的逻辑与潜在偏差","客观建立AI认知:在展示AI强大能力的同时,明确指出其在语境理解和处理模糊信息时的短板"]},{id:"book-006",title:"AI经济:机器人时代的工作、财富和社会福利",author:"罗杰·布特尔",cover:"https://cdn.weread.qq.com/weread/cover/30/YueWen_38229387/t6_YueWen_38229387.jpg",wereadLink:"https://weread.qq.com/web/reader/653320207247558b65332f5#outline?noScroll=1",link:"https://book.douban.com/subject/35433060/",tags:["人工智能","经济学","社会学","未来趋势"],desc:"本书由知名经济学家罗杰·布特尔撰写,聚焦AI与机器人技术对经济和社会的深远影响。作者拨开艰涩的科技术语,从经济增长、通货膨胀及财富分配等宏观视角,理性剖析AI革命将如何重塑我们的工作、教育与休闲方式,以乐观的姿态为迎接未来的社会变革指明路径。",rating:4.1,highlights:["宏观经济视角解析:深入探讨AI对经济增长、通货膨胀、财富与权力分配的真实影响","全景式社会洞察:全面检视机器人时代下,人类教育体系、工作模式与休闲形态的深刻变革","理性乐观的未来指南:拒绝技术恐慌,为个人与社会在变迁的世界中提供清晰可行的应对计划"]}],Ie=[{id:"book-007",title:"做对产品",author:"阿尔贝托·索维亚",cover:"https://cdn.weread.qq.com/weread/cover/53/YueWen_40877841/t6_YueWen_40877841.jpg",wereadLink:"https://weread.qq.com/web/reader/254322a0726fbf1125472c9#outline?noScroll=1",link:"https://book.douban.com/subject/35607961/",tags:["产品思维","创业","商业方法论"],slogan:"为什么有些产品注定失败,有些产品却能大获成功?来自谷歌与斯坦福的产品工具和产品战术。",desc:"谷歌首任产品总监阿尔贝托·索维亚结合在谷歌、斯坦福的实战经验与自身代价高昂的创业失败经历,总结出的一套防败手册。书中揭示了新产品高达90%的“市场失败律”,并创新性地提出了“预型”(Pre型)理念,指导团队在正式开发前,以极低的成本和真实数据快速验证关键假设,确保把创意打磨成“正确的它”。",rating:4.8,highlights:["揭示残酷的市场失败律:正视90%新产品必然失败的商业常态,并以此倒推破局的实战方法论","首创“预型”(Pre型)概念:提供8大测试工具,主张用极低成本和小规模试错快速逼近正确的产品形态","强调真实数据驱动决策:辅以特斯拉、谷歌等完整案例回溯,教导团队将决策建立在客观证据而非主观直觉之上"]},{id:"book-009",title:"俞军产品方法论",author:"俞军",cover:"https://cdn.weread.qq.com/weread/cover/47/YueWen_28165041/t6_YueWen_28165041.jpg",wereadLink:"https://weread.qq.com/web/reader/1cc3252071adc3b11cc0162#outline?noScroll=1",link:"https://book.douban.com/subject/34907971/",tags:["产品思维","产品经理","互联网","方法论"],desc:"“百度贴吧之父”俞军二十余年产品实践与思考的系统总结。本书将产品经理定义为“以科学方法研究人性并转化为商业方案”的交叉学科,深入解析了用户模型、交易模型和决策模型三大核心框架,为产品人提供了一套在不确定环境中权衡多方利益的实战指南。",rating:4.4,highlights:["沉淀二十年行业经验:从广为流传的“PM12条”到系统化的产品哲学,展现顶尖产品经理的认知迭代史","三大核心模型拆解:深度剖析用户模型与交易模型,指导如何通过让交易发生来创造“有利可图”的真实用户价值","兼顾科学与人文视角:强调批判性思维的运用,并清晰梳理了从新人到顶尖大牛的能力进阶路径"]},{id:"book-016",title:"策略产品经理:模型与方法论",author:"青十五",cover:"https://cdn.weread.qq.com/weread/cover/31/cpplatform_gheeqe7hjb2czyzthzf5nm/t6_cpplatform_gheeqe7hjb2czyzthzf5nm1735654872.jpg",wereadLink:"https://weread.qq.com/web/reader/4de32800813ab98d5g01286b#outline?noScroll=1",link:"https://book.douban.com/subject/35218721/",tags:["产品经理","策略产品","算法思维"],desc:"本书围绕“策略产品经理”这一复合角色,系统性地构建了从理念到实践的完整知识框架。作者从机器学习理论与经济学视角出发,结合推荐、搜索、广告、风控等核心业务场景,深入浅出地讲解了函数建模与策略应用,并对策略产品经理的核心能力与团队建设给出了详尽指导。",rating:3.9,highlights:["系统化的角色认知建构:清晰界定策略产品经理的时代背景、职责边界与工作内容,为从业者夯实概念基础","跨学科的模型与业务结合:利用机器学习的函数方法论与经济学理论,深度剖析推荐、搜索、广告、风控及定价等真实业务场景的解法","硬核算法的通俗化解析:深入浅出地拆解机器学习本质、常见算法及深度学习前沿技术,帮助产品经理真正理解策略背后的技术支撑","可落地的团队建设指南:全面拆解数据分析、沟通与项目管理等核心能力项,并针对不同产品生命周期提供策略团队的组建思路"]},{id:"book-008",title:"创造:用非传统方式做有价值的事",author:"托尼·法德尔",cover:"https://cdn.weread.qq.com/weread/cover/53/cpPlatform_tzdqT27m3vyaHnX5o8Vbwk/t6_cpPlatform_tzdqT27m3vyaHnX5o8Vbwk.jpg",wereadLink:"https://weread.qq.com/web/reader/13832ac0813ab725fg018645#outline?noScroll=1",link:"https://book.douban.com/subject/36071759/",tags:["产品思维","管理学","创业"],desc:"本书是iPod、iPhone、Nest等爆款产品幕后推手托尼·法德尔30余年职业经历的智慧结晶。作者毫无保留地分享了他在产品设计、团队管理、职业选择和公司经营等方面的“非传统”方法论,帮助读者在各自的领域内刻意练习创造力,做真正有价值的事。",rating:4.9,highlights:["源自顶级创新者的实战经验:连续打造iPod、iPhone等划时代产品的亲历复盘与真实反面教训","覆盖从个人到公司的完整路径:系统解答职业选择、产品设计、团队管理与企业经营等核心问题","提供可复制的“非传统”方法论:强调“亮点思维”与持续复盘,教导读者以反常规的视角刻意练习创造力"]},{id:"book-010",title:"产品思维",author:"刘飞",cover:"https://cdn.weread.qq.com/weread/cover/56/YueWen_25568738/t6_YueWen_25568738.jpg",wereadLink:"https://weread.qq.com/web/reader/38332ce0718625e23831fe7#outline?noScroll=1",link:"https://book.douban.com/subject/33456375/",tags:["产品思维","产品经理","个人成长","互联网"],desc:"实战派产品经理刘飞结合在一线大厂的丰富经验,围绕产品人如何实现能力跃迁展开的底层能力指南。全书掰开揉碎地讲解了认知盲点与实践痛点,通过“认知用户”“创造价值”和“产品落地”三大核心板块,系统拆解了从建立用户模型、高质量决策到快速迭代验证的完整产品方法论。",rating:4.2,highlights:["三大核心板块系统拆解:完整覆盖“认知用户”“创造价值”与“产品落地”的产品闭环","直击痛点的一线实战经验:毫无保留地分享实战中新手迫切需要却难以获取的隐性知识","聚焦底层能力与思维升维:不仅教授落地方法,更注重决策质量与思维模式的跃迁"]},{id:"book-011",title:"产品思维:创新设计的六条法则(全彩)",author:"张印帅",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/253/26687253/t6_26687253.jpg",wereadLink:"https://weread.qq.com/web/reader/a823297071973715a8202b0#outline?noScroll=1",link:"https://book.douban.com/subject/34859540/",tags:["产品设计","创新思维","方法论","设计灵感"],desc:"本书围绕作者张印帅多年产品设计实践总结出的6条创意公式展开,旨在帮助读者系统化地获取设计灵感并解决创新难题。全书通过大量经典案例,详细解析了从发散思考到重组创新的全过程,并在最后提供了从需求到草图再到最终方案的完整项目落地演示。",rating:4,highlights:["提炼6条实用的创新设计公式:将发散思考与重组创新系统化,打造可复用的设计灵感库","丰富的经典设计案例解析:详细展示“问题+方法”、“1+1>2”等法则在真实产品设计中的应用","呈现从需求到方案的落地全流程:通过综合案例演示概念打磨与草图设计的实战过程"]}],We=[{id:"book-012",title:"小而美:持续盈利的经营法则",author:"萨希尔·拉文吉亚",cover:"https://cdn.weread.qq.com/weread/cover/91/cpplatform_vl4abrrrqgxnry833gcrtt/t6_cpplatform_vl4abrrrqgxnry833gcrtt1677578056.jpg",wereadLink:"https://weread.qq.com/web/reader/02932980813ab7a43g012e77#outline?noScroll=1",link:"https://book.douban.com/subject/36280425/",tags:["创业","商业模式","极简主义"],desc:"本书打破了硅谷盲目追求“独角兽”的扩张迷思,聚焦于“规模不是唯一出路”的商业现实。作者结合创立Gumroad的亲身经历,提出了“极简创业经营”理念。全书指导创业者与管理者如何通过从社区切入、聚焦核心能力、精简团队等方式,用最少的资源打造出不仅能活下去,而且还能持续盈利的“慢公司”。",rating:5,highlights:["颠覆传统的扩张迷思:提出盈利至上而非规模至上,将持续赚钱和实际利润作为衡量企业成功的核心标准","可落地的极简法则:总结出“越少越好”“瞄准前100个客户”等7条创业清单,构建从定位、产品到销售的完整闭环","社区驱动的商业逻辑:提倡从虚拟社区入手,以“贡献-创作-教学”的方式低成本验证产品形态并获取早期信任","打造高韧性的“慢公司”:结合疫情与远程办公背景,展示如何通过精简组织和分布式协作,在不确定的时代保持稳定的现金流"]},{id:"book-013",title:"做难而正确的事:进步最快的方式",author:"尤里·莱文",cover:"https://cdn.weread.qq.com/weread/cover/53/cpplatform_bunxjyygj8m9stnwcgwqqk/t6_cpplatform_bunxjyygj8m9stnwcgwqqk1728876401.jpg",wereadLink:"https://weread.qq.com/web/reader/aa032fb0813ab9461g018406#outline?noScroll=1",link:"https://book.douban.com/subject/37054102/",tags:["创业","产品思维","商业管理"],desc:"Waze联合创始人尤里·莱文写给创业者和管理者的行动指南。作者结合连续打造两家估值超10亿美元公司的实战经验,提出“先做难事、再做正确事”的核心哲学。全书通过13个阶段的系统拆解,指导读者如何寻找真正的用户痛点、构建高价值产品,并在不确定的环境中通过不断复盘实现跨越式成长。",rating:4.9,highlights:["世界级创业者的实战复盘:连续打造两家独角兽公司的创始人亲授,提供极具可信度的第一手商业洞察与落地经验","践行“难而正确”的核心哲学:强调不追逐短期热点,而是去解决效率极低却被忽视的痛点,以此建立坚实的商业护城河","覆盖从0到1的全周期指南:系统拆解从寻找痛点、产品构建、融资运作到团队管理的13个关键阶段,提供可操作的行动清单","直面失败的心理韧性建设:不回避挫折,将“从错误中学习”提炼为核心方法,为身处高压环境的读者提供情感共鸣与心理支持","广泛的跨场景应用价值:书中给出的决策工具不仅适用于初创团队,同样能为大公司内部创新及个人职业认知升级提供指导"]},{id:"book-015",title:"创新公司:皮克斯的启示",author:"艾德·卡特姆",cover:"https://cdn.weread.qq.com/weread/cover/20/YueWen_814380/t6_YueWen_814380.jpg",wereadLink:"https://weread.qq.com/web/reader/2ef329605c6d2c2efeeb70d#outline?noScroll=1",link:"https://book.douban.com/subject/26314955/",tags:["创新思维","组织文化","企业管理"],desc:"皮克斯联合创始人艾德·卡特姆结合《玩具总动员》《机器人瓦力》等经典动画的幕后制作故事,深度揭示了皮克斯如何长期保持创意领先的秘密。本书不仅详述了皮克斯从初创到壮大的历程,更抽丝剥茧地解析了其在团队文化、跨部门协作、人才培养和允许失败等方面的独特创意管理机制,为各类组织提供了可复制的创新指南。",rating:4.5,highlights:["揭秘“皮克斯奇迹”背后的管理哲学:通过14部经典动画的真实幕后故事,展示创意从无到有、再到票房口碑双赢的全过程","深度解析创新土壤的搭建:阐述如何通过允许失败的文化、流程设计和激励机制,将“不断推动创新”彻底融入公司DNA","提供跨行业可复用的管理工具:总结项目立项、跨部门协作与风险控制的具体做法,为不同规模和行业的企业提供落地的实战模板"]},{id:"book-017",title:"重来:更为简单的商业思维",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/1/YueWen_635904/t6_YueWen_635904.jpg",wereadLink:"https://weread.qq.com/web/reader/0363228059b4000363b29e9#outline?noScroll=1",link:"https://book.douban.com/subject/5320866/",tags:["商业思维","创业","企业管理","极简主义"],desc:"37signals联合创始人基于十年创业实战经验,写给职场人与创业者的极简商业法则。本书摒弃了传统的MBA术语与复杂的商业教条,以“辛辣、直接、靠谱”的语言,颠覆了关于项目管理、人才招聘、产品设计与企业文化的常规认知,教导读者如何在真实的商业世界中“做更少,但创造更多价值”。",rating:4.3,highlights:["颠覆传统的极简商业哲学:反叛复杂的商业教条,主张“做更少,创造更多”,通过最小可行步骤降低试错成本并快速迭代","源自37signals的十年实战精髓:覆盖从项目管理、产品设计到市场营销的完整链条,提供不讲废话、拿来即用的行动指南","重塑职场与团队管理的认知:提出诸多务实且反常规的观点(如严苛的简历筛选标准),打造基于信任与结果导向的高效团队","适用面极广的实操手册:无论是寻求突破的精英企业家、小团队创业者,还是渴望提升工作效率的普通职场人,都能直接对照落地"]},{id:"book-018",title:"重来2:更为简单高效的远程工作方式",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/38/YueWen_635721/t6_YueWen_635721.jpg",wereadLink:"https://weread.qq.com/web/reader/46b3220059b34946b517012#outline?noScroll=1",link:"https://book.douban.com/subject/25861795/",tags:["企业管理","远程工作","工作方式","团队协作"],desc:"Basecamp(原37signals)创始人基于自身团队多年的全球分布式协作经验,为企业和个人提供的一套远程工作“思想升级包”。本书直面行业争议,破解了“创新只能面对面”及“文化会淡化”等常见误区,并系统提供了借助异步沟通、协作工具与流程设计来打造高效、人性化远程团队的实战指南。",rating:4.1,highlights:["提供思想层面的“升级包”:直击传统办公室痛点,用真实数据与反例打破关于远程办公的固有认知误区","第一手的分布式团队管理经验:Basecamp创始人亲授,展示如何突破地域限制招募顶尖人才,并保持健康、高效的工作节奏","系统可落地的工具与流程方法:详述如何利用协作工具降低管理成本,让远程工作从“特殊福利”真正转变为可持续的主流组织模式"]},{id:"book-019",title:"重来3:做得更少,但赚得更多",author:"贾森·弗里德 / 戴维·海涅迈尔·汉森",cover:"https://cdn.weread.qq.com/weread/cover/62/cpplatform_tqth8pnlq8h9ing5uciwhi/t6_cpplatform_tqth8pnlq8h9ing5uciwhi1748502715.jpg",wereadLink:"https://weread.qq.com/web/reader/b6a32ed0813ab9fb5g015181#outline?noScroll=1",link:"https://book.douban.com/subject/37367276/",tags:["工作方式","反内卷","企业文化"],desc:"Basecamp创始人带来的“反内卷”与“反过度忙碌”的管理指南。作者基于近20年带领54人团队服务全球10万家企业的成功经验,直击现代企业盲目扩张、无效加班等八大症结。全书主张以“冷静”颠覆“忙碌”文化,指导企业和个人通过40小时工作制、拒绝KPI和异步沟通等极简方式,在不牺牲生活质量的前提下实现健康发展与持续盈利。",rating:4.2,highlights:["以“冷静”颠覆“忙碌”文化:倡导高效比高产更重要,用稳定的节奏替代疯狂加班的内卷常态","直击现代企业八大症结:深度诊断快速扩张、无效加班、会议泛滥与目标绑架等痛点,提供对症下药的思路","提供四大可落地的管理工具:引入40小时工作制、拒绝硬性KPI、推行非实时沟通,坚持利润优先于规模","源自Basecamp的真实反向案例:展示“小而美”团队如何通过“少做但做好”的策略,跑赢新经济并保持高利润"]}],Ye=[{id:"book-024",title:"要事第一",author:"史蒂芬·柯维 / 罗杰·梅里尔 / 丽贝卡·梅里尔",cover:"https://cdn.weread.qq.com/weread/cover/57/yuewen_33091834/t6_yuewen_330918341686208943.jpg",wereadLink:"https://weread.qq.com/web/reader/f523268071f8f0faf52b806#outline?noScroll=1",link:"https://book.douban.com/subject/1028372/",tags:["时间管理","自我管理","经典思维"],desc:"作为《高效能人士的七个习惯》的延伸与加强版,本书提出了颠覆传统的“第四代时间管理”方法。作者强调,比提升做事速度(时钟)更重要的是找准人生的方向(罗盘)。全书指导读者通过自我意识的觉醒,以原则和价值观为中心,将精力聚焦于“重要而不紧急”的长期目标上,从而在繁忙的现代生活中真正做到“要事第一”。",rating:4.5,highlights:["从“时钟”到“罗盘”的思维跨越:打破一味追求“更快、更努力”的传统效率迷思,确立人生方向优先的哲学","经典的四象限时间管理矩阵:引导读者跳出紧急事务的“救火圈”,将核心精力倾注于第二象限(重要但不紧急)的高价值事务中","生动的“大石块”优先法则:通过“先放石头再倒水”的直观比喻,确保关键目标与核心使命在碎片化日程中得到绝对的优先落实","以原则为中心的自我驱动框架:不仅提供日程安排工具,更通过唤醒良知,帮助读者在工作、家庭等多元角色中实现真正的平衡与统合综效"]},{id:"book-025",title:"清单革命",author:"阿图·葛文德",cover:"https://cdn.weread.qq.com/weread/cover/12/cpPlatform_rudGZN3LDW5m9FBYr7rMBA/t6_cpPlatform_rudGZN3LDW5m9FBYr7rMBA.jpg",wereadLink:"https://weread.qq.com/web/reader/18332f80813ab7292g010065#outline?noScroll=1",link:"https://book.douban.com/subject/27168564/",tags:["管理学","认知科学","工作效率"],desc:"这是一部针对现代复杂世界所撰写的“认知防护手册”。作者阿图·葛文德通过医疗、建筑、投资等高风险领域的真实案例,揭示了人类在海量信息与高压环境下极易出现的判断疏忽。书中提出了“权力下放、简单至上、人为根本、持续改善”四大原则,指导读者将最佳实践外化为可操作的清单,从而在复杂系统中构建一道低成本、高回报的安全防线。",rating:4.6,highlights:["直面复杂时代的认知瓶颈:揭示在海量信息流中,清单如何作为“认知防护网”弥补人类记忆力与注意力分配的先天不足","提供兼具理念与落地的四大原则:通过“权力下放、简单至上、人为根本、持续改善”,构建一套可复用的清单设计哲学","扎实的医学实证背书:以手术感染率骤降等真实临床数据为支撑,证明清单思维在医疗、建筑、投资等高风险领域的跨行业普适性","简洁而具力量的流程创新:强调清单服务于人而非取代人,是帮助专业人士在高压环境下将复杂环节显性化、流程化的必备工具"]},{id:"book-020",title:"别让猴子跳回背上",author:"威廉·安肯三世",cover:"https://cdn.weread.qq.com/weread/cover/69/cpPlatform_7fFoBQ7dtqgABGSTskpJSN/t6_cpPlatform_7fFoBQ7dtqgABGSTskpJSN.jpg",wereadLink:"https://weread.qq.com/web/reader/9fc32010813ab7291g0196bd#outline?noScroll=1",link:"https://book.douban.com/subject/36103994/",tags:["时间管理","领导力","项目管理"],desc:"这是一部以“猴子”生动隐喻任务与责任的经典管理学著作。作者威廉·安肯三世深刻剖析了管理者常被琐事淹没的时间困境,并提出系统化的“猴子管理法”。通过明确任务归属、责任递减与有效授权,指导管理者如何把不属于自己的“猴子”交出去,从而释放精力专注于最高价值的战略思考,实现团队与个人的共同成长。",rating:4.3,highlights:["生动有趣的“猴子”隐喻:将枯燥的责任划分与任务流转具象化,直击职场中“忙碌却低效”的痛点","实用高效的“三步交接”法则:通过明确期望、授予资源与约定检查点,彻底避免下属的待办任务重新跳回自己背上","重塑时间管理与人才培养体系:指导高层放权、中层辅导、基层自发,将企业的成功真正建立在员工自主性的提升之上"]}],$e=[{id:"book-022",title:"学会提问(原书第12版)",author:"尼尔·布朗 / 斯图尔特·基利",cover:"https://cdn.weread.qq.com/weread/cover/68/YueWen_39980443/t6_YueWen_39980443.jpg",wereadLink:"https://weread.qq.com/web/reader/e6832d3072620d9be68aabf#outline?noScroll=1",link:"https://book.douban.com/subject/35513147/",tags:["批判性思维","逻辑学","认知科学","经典书"],desc:"这是一部培养批判性思维的经典实战指南。作者尼尔·布朗与斯图尔特·基利结合长期的教学与研究实践,提供了一套系统化、可操作的提问流程。全书通过大量真实情境案例,教导读者如何在信息泛滥的时代识别隐含假设、区分事实与观点,用高质量的“判断性问题”看透事物本质,从而做出更理性的决策。",rating:5,highlights:["聚焦批判性思考的核心能力:系统拆解“如何提出好问题”的思维过程,帮助读者在复杂信息中迅速抓住本质","提供可落地的提问与评估框架:从背景信息、关键概念到逻辑推理,构建一条完整的判断性问题链条","丰富的真实场景应用示范:结合课堂讨论、写作、日常沟通与职场决策等多元场景,让理论能“立即上手”","打造实用的思考检查单:不仅讲透“提问的价值”,更提供可直接转化为日常习惯的思维检查表,助你有效避开认知陷阱"]},{id:"book-026",title:"如何阅读一本书",author:"莫提默·J. 艾德勒 / 查尔斯·范多伦",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/810/23723810/t6_23723810.jpg",wereadLink:"https://weread.qq.com/book-detail?type=1&senderVid=40710128&v=272326407169ff22272934f&wtheme=white&wfrom=app&wvid=40710128&scene=bottomSheetShare",link:"https://book.douban.com/subject/1013208/",tags:["阅读方法","思维训练","经典"],desc:"阅读领域的“元方法”指南。作者艾德勒与范多伦将阅读划分为基础阅读、检视阅读、分析阅读与主题阅读四个进阶层次,并强调阅读是一项主动的思考活动。本书不仅提供了从“快速略读”到“系统拆解论点”的实操技巧,更致力于通过提问、归纳与批判,将阅读转化为训练理解力、批判力与终身学习的终极工具。",rating:5,highlights:["构建系统的四级阅读框架:从检视阅读到分析阅读再到主题阅读,为读者提供了一套从入门到精通的进阶路径","强调“主动与批判”的阅读观:拒绝被动接收,教导读者如何通过提问、归纳与反思,真正将作者的洞见转化为自己的认知","高效的检视阅读技巧:提供如何在有限时间内通过看目录、挑重点等方式,快速筛选并判断书目价值的核心能力","跨时代的经典效能:自1940年问世以来长盛不衰,其对逻辑拆解与深度思考的指导,是提升所有知识吸收效率的“总开关”"]},{id:"book-023",title:"检索力:打破信息差的科学方法",author:"龚芙蓉",cover:"https://cdn.weread.qq.com/weread/cover/58/cpplatform_feaxemubry47bnkzylqzwv/t6_cpplatform_feaxemubry47bnkzylqzwv1716796541.jpg",wereadLink:"https://weread.qq.com/web/reader/9de32810813ab8e00g018130#outline?noScroll=1",link:"https://book.douban.com/subject/36899979/",tags:["信息素养","检索能力","思维认知"],desc:"本书聚焦“检索力”这一核心技能,旨在帮助读者在信息过载的时代主动掌握“逆风而行”的搜索能力。作者龚芙蓉结合二十余年实践经验,用生动的人文与诺贝尔奖级科学案例,将枯燥的检索工具化为有趣的故事。不仅教授非线性、迭代式的搜索技巧,更致力于重塑读者的探究精神,赋予其走出“信息茧房”的勇气。",rating:4.2,highlights:["丰富的跨学科趣味案例驱动:用“张冠李戴的马克思名言”等生动故事,将枯燥繁琐的检索步骤转化为轻松的探索之旅","重塑非线性与迭代的搜索思维:打破按部就班的线性流程误区,建立以耐心与热情驱动的多轮迭代搜索心态","直击科研与职场的实用痛点:提供可快速落地的实操指南,帮助读者切实缩短科研周期、大幅提升工作效率","兼顾技能训练与人文底色:在教授如何利用和创造信息的同时,注重培养读者的信息素养与打破信息差的认知勇气"]},{id:"book-027",title:"原则",author:"瑞·达利欧",cover:"https://cdn.weread.qq.com/weread/cover/23/YueWen_921568/t6_YueWen_921568.jpg",wereadLink:"https://weread.qq.com/web/reader/848324405e0fe08483ab6a4#outline?noScroll=1",link:"https://book.douban.com/subject/27608239/",tags:["投资","方法论","自我管理"],desc:"桥水基金创始人瑞·达利欧总结四十余年投资、管理与人生经验的集大成之作。作者提出将生活和工作像机器一样系统化,确立了“极度求真”与“极度透明”两大基石,并通过“创意择优”与“基于可信度的决策机制”来迭代思维。书中包含500多条可操作原则,旨在帮助读者在复杂世界中保持开放心态、看清现实,并做出最优决策。",rating:4.8,highlights:["“极度求真”与“极度透明”的基石:主张诚实面对现实,通过公开决策过程来获取外部反馈,达成高效协作","创意择优与可信度加权机制:摒弃个人权威,利用数据驱动的讨论与可信度权重,在团队中选出最优方案","500余条可落地的原则清单:涵盖自我认知、投资决策、团队治理等场景,构建出一套随时可查的行动指南","系统化的“机器”思维:将生活与组织管理拆解为可维护、可迭代的系统,有效规避情绪化干扰"]},{id:"book-031",title:"价值",author:"张磊",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/958/33577958/t6_33577958.jpg",wereadLink:"https://weread.qq.com/web/reader/5be32a3072005be65bef195#outline?noScroll=1",link:"https://book.douban.com/subject/35188914/",tags:["价值投资","商业思维","创业"],desc:"高瓴资本创始人张磊首部个人及投资思想著作。全书通过回顾作者的个人求学与创业历程,系统阐释了“长期主义”与“重仓中国”的核心投资理念,并首次披露了高瓴投资的七大公式。作者将十余个典型投资案例与个人价值修养相结合,揭示了如何在不确定的商业环境中,通过坚持原则、敬畏规则与持续创新,创造长久、真实的价值。",rating:4.6,highlights:["系统构建长期主义哲学:首次系统化梳理“高瓴七大公式”,为读者提供从认知、决策到执行的价值投资实战模型","深度复盘经典实战案例:通过腾讯、货拉拉等真实商业案例,拆解如何在复杂市场中识别企业护城河与核心价值","投资之外的人文思考:延伸至教育、人才与科学观,展现作者作为顶尖投资者对社会责任与长期价值创造的深度思考","可视化的阅读体验:精选多幅手绘彩插与历史影像,将深刻的投资逻辑与企业成长叙事变得更加生动、直观"]},{id:"book-032",title:"纳瓦尔宝典",author:"埃里克·乔根森 / 纳瓦尔·拉维坎特",cover:"https://cdn.weread.qq.com/weread/cover/89/YueWen_44026191/t6_YueWen_44026191.jpg",wereadLink:"https://weread.qq.com/web/reader/e1e32b00729fc94fe1e824d#outline?noScroll=1",link:"https://book.douban.com/subject/35876121/",tags:["财富管理","个人成长","幸福哲学","思维认知"],desc:"这是一部汇集硅谷著名投资人纳瓦尔·拉维坎特过去十年关于财富与幸福思考的行动指南。全书摒弃了“致富靠运气”的传统观念,提出积累财富与幸福生活是可以通过学习掌握的技能。通过系统整理推特、播客与访谈中的智慧,本书为读者提供了如何在快速变化的科技与经济环境中,利用杠杆、发挥个人独特性,进而实现财务自由并获得持久内心满足的方法论。",rating:4.7,highlights:["将财富与幸福视为可习得的技能:打破运气论,强调通过建立杠杆、发挥个人独特性来获取非线性的回报","十年思想的系统化编纂:将碎片化的互联网智慧提炼为成体系的方法论,打造了数字时代个人的“行动指南”","兼顾财富积累与内心满足:不仅教导如何高效赚钱,更深入探讨如何通过阅读、冥想与长期主义,在职场成功中寻找内心的宁静","极具实操性的工具箱:提供如深度思考、刻意练习、构建个人品牌等具体路径,帮助读者在碎片化时代快速实现自我迭代"]},{id:"book-028",title:"优秀的绵羊",author:"威廉·德雷谢维奇",cover:"https://cdn.weread.qq.com/weread/cover/78/cpplatform_3ncoeekcuaectlzj9hf5nr/t6_cpplatform_3ncoeekcuaectlzj9hf5nr1744626569.jpg",wereadLink:"https://weread.qq.com/web/reader/1c0324c0813ab9d91g010aba#outline?noScroll=1",link:"https://book.douban.com/subject/26747208/",tags:["博雅教育","社会学","个人成长"],desc:"耶鲁大学前教授威廉·德雷谢维奇对美国常春藤精英教育体制的尖锐批判之作。作者通过二十余年的教学观察,指出顶尖学府培养出一群虽然聪明、优秀,但普遍焦虑、缺乏目标感且唯命是从的“优秀绵羊”。本书呼吁社会重新审视教育的本质,摆脱对名校与高薪的盲目崇拜,回归博雅教育,鼓励学生探索内在驱动力与自我价值。",rating:4.2,highlights:["犀利剖析精英教育弊端:直击常春藤体制培养出“聪明但没有灵魂”的学生的现实,反思唯名校与成绩论的单一评价体系","回归博雅教育的核心价值:批判应试化倾向,提倡给予学生更多探索、失败与重塑自我的空间,强调教育的本质在于帮助个体找到自我","提供挣脱外部期待的认知框架:既为迷茫的年轻人指明如何重建内在动力,也给家长和教育者敲响了关于“成功定义”的警钟","跨文化背景下的教育共鸣:尽管以美国精英教育为例,其对“教育内卷”与“缺乏目标感”的批判,引发了全球高压教育环境下的深层共鸣"]},{id:"book-029",title:"把自己变成稀缺资产",author:"何思平",cover:"https://cdn.weread.qq.com/weread/cover/98/cpplatform_ncqzerh3wdywn9mlc9cjna/t6_cpplatform_ncqzerh3wdywn9mlc9cjna1694085413.jpg",wereadLink:"https://weread.qq.com/web/reader/2fe326f0813ab821fg0146df#outline?noScroll=1",link:"https://book.douban.com/subject/36513648/",tags:["个人成长","思维认知","自我管理","投资理财"],desc:"这是一个将“人生”视作“公司”来经营的实战指南。作者何思平结合自身从严重口吃到演讲冠军、再到连续创业成功的跨越式经历,提出了“人生有限公司”的经营哲学。全书通过“生命立方体”模型,从认知、实践、精力管理三个维度拆解了如何通过持续输出与跨界学习,将自己打造为具有高壁垒、不可替代的“稀缺资产”。",rating:4.2,highlights:["提出“人生有限公司”经营哲学:倡导将自己视作最值得投资的上市公司,通过不断提升认知与能力壁垒,把“人生”经营成稀缺资产","系统化的“生命立方体”模型:从认知、实践、精力管理三个维度构建个人成长闭环,解决成长中的无序感与碎片化难题","聚焦个人核心竞争力:深度拆解认知力、学习力与共情力等稀缺能力的获取路径,教导读者在不同场景中通过实战验证自我价值","高度可操作的工具清单:摒弃鸡汤式说教,将自我成长拆解为具体的习惯改造与复盘清单,帮助读者在痛点与高光时刻都能通过反馈机制实现自我迭代"]},{id:"book-030",title:"成长第二曲线:跨越S型持续成长",author:"查尔斯·汉迪",cover:"https://cdn.weread.qq.com/weread/cover/65/YueWen_39427437/t6_YueWen_39427437.jpg",wereadLink:"https://weread.qq.com/web/reader/15d32ed072599d6d15daa86#outline?noScroll=1",link:"https://book.douban.com/subject/35531368/",tags:["管理学","个人成长","人生哲学","未来趋势"],desc:"管理大师查尔斯·汉迪的“人生长跑指南”。本书通过书信体形式,深度探讨了在数字时代背景下个人如何识别并跨越“第二曲线”。汉迪指出,无论组织还是个人,都受制于S型增长曲线,只有在第一曲线衰退前主动布局新的增长点,并保持内在价值的独立与进化,才能在不断变化的环境中获得持续且有意义的成长。",rating:4.5,highlights:["百岁管理大师的人生体悟:以书信体浓缩一生管理研究与个人经验,提供了从时间维度审视工作、学习与生活的全景视角","“第二曲线”理论的全面进阶:深刻揭示组织与个人的兴衰规律,教导读者如何在第一曲线的巅峰前就主动布局新的增长引擎","全场景下的持续进化方案:将第二曲线思维跨界应用于教育、职业规划、婚姻与家庭中,强调“变化才是常态”,鼓励持续自我重塑","面向Z世代的清醒处方:在科技高歌猛进的数字时代,提醒后人重视诚信、协作等软实力,保持独立判断,避免在算法与焦虑中迷失自我"]}],Me=[{id:"book-033",title:"枪炮、病菌与钢铁",author:"贾雷德·戴蒙德",cover:"https://cdn.weread.qq.com/weread/cover/99/YueWen_42766048/t6_YueWen_42766048.jpg",wereadLink:"https://weread.qq.com/web/reader/843329f0728c8ee08434fb1#outline?noScroll=1",link:"https://book.douban.com/subject/1813841/",tags:["人类历史","地理决定论","社会学","跨学科"],desc:"一部重新定义人类历史发展的宏大著作。作者贾雷德·戴蒙德通过生物学、地理学、人类学等多学科交叉视角,强有力地反驳了“种族决定论”和“西方文明优越论”。他提出,决定文明兴衰的关键并非种族,而是环境因素、地理格局以及动植物驯化的差异,这些自然条件的偶然性最终导致了技术、免疫力和权力结构的差异,从而重塑了现代世界的全球版图。",rating:4.8,highlights:["颠覆性的历史观:以环境与地理差异解释文明兴衰,有力冲击了长期流行的西方文明优越论,提供了理解人类历史的全新视角","跨学科的综合研究框架:巧妙融合生物学、地理学、历史学、社会学等多学科知识,重建人类文明演进的逻辑路径","系统揭示历史演变的机制:深入剖析农业、病菌传播与技术权力如何形成相互强化的循环,展示了文明发展背后复杂的资源互动","具备公共思想者的宏观视野:将严谨的科学研究转化为对人类命运与社会发展的深刻反思,为现代人理解自身在历史长河中的位置提供了绝佳参照"]},{id:"book-034",title:"中国社会各阶层分析",author:"梁晓声",cover:"https://cdn.weread.qq.com/weread/cover/0/yuewen_42682684/t6_yuewen_426826841728383400.jpg",wereadLink:"https://weread.qq.com/web/reader/085326e0728b493c085ade1#outline?noScroll=1",link:"https://book.douban.com/subject/35485315/",tags:["社会观察","阶层研究","现实主义"],desc:"茅盾文学奖得主梁晓声基于多年社会观察的现实题材力作。作者将快速变迁的中国社会划分为不同阶层,以平民视角细腻描摹各群体的生存状态、心理困境与阶层焦虑。全书不追求纯学术的枯燥分析,而是通过文学化的社会观察,勾勒出一幅当代中国社会的“浮世绘”,引导读者在时代坐标中找准定位,理解社会变迁背后的结构性逻辑。",rating:4.3,highlights:["平民视角下的社会“浮世绘”:通过细腻的笔触勾勒各阶层的生存逻辑与心理画像,帮助读者直观理解宏观社会结构","兼具现实痛点与精神深度:不仅呈现物质生活的差异,更深刻剖析阶层焦虑背后的价值困境,为理解当代社会提供人文参照","时代脉络中的命运书写:将个体命运置于历史事件的宏观背景中考察,展现了半个世纪以来社会变迁的深层脉络","文学笔触下的社会关怀:作为茅盾文学奖得主,作者通过富有故事性的叙事,既保留了批判性,又让文本充满了温暖的人文温度"]},{id:"book-021",title:"把自己作为方法",author:"项飙 / 吴琦",cover:"https://cdn.weread.qq.com/weread/cover/81/cpPlatform_3300003962/t6_cpPlatform_3300003962.jpg",wereadLink:"https://weread.qq.com/web/reader/d7532f80813ab680cg012708#outline?noScroll=1",link:"https://book.douban.com/subject/35092383/",tags:["社会学","访谈录","思想方法"],desc:"两代学人项飙与吴琦历时三年、跨越五地的深度对话实录。本书从项飙的个人经验切入,探讨了中国社会近半个世纪的变迁、全球化与民粹主义等宏大议题。在自我泛滥与思想受困的时代,作者提出“把自己作为方法”,指导读者如何在全球化年代重新定位自我、重建“附近”,并在个人体验与宏观叙事之间搭建起思考与行动的桥梁。",rating:4.6,highlights:["以“自我”切入回应宏大议题:示范如何在个人真实体验与全球化、社会变迁等宏观叙事之间搭建认知的桥梁","提供重建“附近”的行动指南:在自我泛滥的潮流中,指导读者如何审视现实,创造性地建设身边的小世界","兼具学术深度与极高可读性:将人类学、社会学的深刻理论洞察,巧妙融入生动的田野故事与双人生活化对谈中","跨越三年的思想碰撞:历时三年、跨越五地的持续对话结集,反思知识生产与公共讨论的真实处境"]}],Te=[{id:"book-035",title:"百岁人生:长寿时代的生活和工作",author:"琳达·格拉顿 / 安德鲁·斯科特",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/860/22902860/t6_22902860.jpg",wereadLink:"https://weread.qq.com/web/reader/30c323e0715d784c30c1e1b#outline?noScroll=1",link:"https://book.douban.com/subject/30245089/",tags:["人生规划","长寿时代","社会学"],desc:"基于伦敦商学院的经典课程,作者琳达·格拉顿与安德鲁·斯科特提出,面对一半概率活到100岁的长寿时代,传统的“学习-工作-退休”三段式人生模式已彻底失效。本书指导读者如何重新设计人生,通过拥抱多阶段人生模型,在更长的生命周期中平衡工作、学习与休闲,并强调在财务资产之外,更要注重健康、友谊与知识等“无形资产”的持续投入与增值。",rating:4.3,highlights:["重构人生模式:打破传统的“三段式”生活范式,提出充满弹性的“多阶段人生”模型,让工作与学习不再是线性的重复","从关注财务到“无形资产”:除了养老金,强调健康、友谊、社交网络与心理韧性等“无形资产”才是维持长寿生活质量的核心动力","职场与转型的系统规划:提供针对长寿时代的职业设计思路,涵盖何时转型、如何投资自身、怎样应对不确定性等实战框架","社会与制度的深度洞察:探讨长寿如何冲击养老金体系、劳动力市场与企业模式,帮助个人在宏观变革中把握主动权"]},{id:"book-00043",title:"重启吧!我的健康人生",author:"兰根·查特吉",cover:"https://cdn.weread.qq.com/weread/cover/80/cpplatform_kbrswv3bm7cix2zlyo6wtx/t6_cpplatform_kbrswv3bm7cix2zlyo6wtx1716362285.jpg",wereadLink:"https://weread.qq.com/web/reader/e8a32e80813ab8de4g0191c2#outline?noScroll=1",link:"https://book.douban.com/subject/36899697/",tags:["生活方式","预防医学","身心健康","自我管理"],desc:"英国临床医生基于20多年行医经验写就。本书主张“生活方式即良药”,围绕休息、饮食、运动和睡眠四个领域设计了20个微小行动计划,帮助现代人通过低成本的习惯改变逆转慢性问题。",rating:4.6,highlights:["提出99%的健康取决于日常习惯而非医学治疗,强调整体干预","构建“4×5”微行动框架,涵盖休息、饮食、运动、睡眠四个维度的20个小改变","兼顾科学深度与极简实操,如“12小时进食窗口”、“10分钟高强度运动”","关注现代职场人痛点,提供“小投入、大回报”的可叠加身心健康投资策略"]},{id:"book-00040",title:"你是你吃出来的:吃对少生病,病了这样吃",author:"夏萌",cover:"https://cdn.weread.qq.com/weread/cover/86/YueWen_920661/t6_YueWen_920661.jpg",wereadLink:"https://weread.qq.com/web/reader/7bb32c305e0c557bbdeab81#outline?noScroll=1",link:"https://book.douban.com/subject/27590675/",tags:["饮食科普","营养学","健康管理"],desc:"前安贞医院营养科主任夏萌结合十余年临床经验写成。本书颠覆“低油低脂”误区,提出回归进化的“65%植物+35%动物”膳食配比,并针对14种常见慢病给出“四分法”饮食干预方案,帮助读者重建健康饮食观。",rating:5,highlights:["指出多数慢病源于“蛋白质缺乏式营养不良”,打破常规低油低脂迷思","提出清晰量化的“65%植物类+35%动物类”科学饮食结构","针对冠心病、高血压等14种常见慢病提供实操性极强的“四分法”菜单","源于十万+真实临床病例,强调“一日三餐才是真正的保健品”"]},{id:"book-00041",title:"你是你吃出来的2",author:"夏萌",cover:"https://wfqqreader-1252317822.image.myqcloud.com/cover/883/35905883/t6_35905883.jpg",wereadLink:"https://weread.qq.com/web/reader/40532d007223e15b4052fae#outline?noScroll=1",link:"https://book.douban.com/subject/35340053/",tags:["饮食指导","科普","疾病防治"],desc:"聚焦高血压、高脂血症、糖尿病等7大常见慢病,从临床营养医学角度逐一破除诸如“血压高不能吃肉”等饮食误区,提供系统的“上游-中游-下游”疾病防控思路与个体化营养处方。",rating:4.6,highlights:["专攻7大常见慢性病,为患者提供针对性的“生病了怎么吃”个体化指导","科学辟谣,破除“血压高不能吃肉”、“胆固醇高不能吃鸡蛋”等常见误区","梳理疾病发生因果链条,帮助读者从源头找到健康干预的着力点","提供从一日三餐、运动到心态调养的具体可操作生活方式清单"]}],Ge=JSON.parse('{"title":"好书推荐","description":"读书心得、推荐书籍和阅读技巧","frontmatter":{"title":"好书推荐","date":"2024-01-01T16:00:00.000Z","description":"读书心得、推荐书籍和阅读技巧","categories":["growth"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png","permalink":"/growth/books","tags":["悦读时光","资源推荐"]},"headers":[],"relativePath":"growth/books.md","filePath":"30.悦读时光/01.好书推荐.md"}'),Ne={name:"growth/books.md"},De=Object.assign(Ne,{setup(n){return(b,t)=>(a(),r("div",null,[t[0]||(t[0]=e("h1",{id:"好书推荐",tabindex:"-1"},[l("好书推荐 "),e("a",{class:"header-anchor",href:"#好书推荐","aria-label":"Permalink to “好书推荐”"},"​")],-1)),t[1]||(t[1]=e("h2",{id:"_1-ai-与数学思维",tabindex:"-1"},[l("1. AI 与数学思维 "),e("a",{class:"header-anchor",href:"#_1-ai-与数学思维","aria-label":"Permalink to “1. AI 与数学思维”"},"​")],-1)),t[2]||(t[2]=e("blockquote",null,[e("p",null,[l("在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操作系统”, "),e("strong",null,"理解 AI,本质上是理解数据、数学与逻辑如何重构这个世界"),l("。")]),e("p",null,"这套书单从数学思维的底层逻辑出发,让我们理解 ChatGPT 等大模型背后的计算机制,将硬核的神经网络与概率统计转化为优化生活的决策工具。它不仅能界定机器智能的边界,更颠覆了传统的“目标论”,倡导在不确定性中通过“踏脚石”思维寻找突破性创新的可能。AI 的研究实践告诉我们,伟大的突破往往无法被预设,唯有拥抱“寻宝者思维”才能在未知中偶遇奇迹,我们需要颠覆传统的创新范式。")],-1)),h(k,{books:g(Be)},null,8,["books"]),t[3]||(t[3]=M("",4)),h(k,{books:g(Ie)},null,8,["books"]),t[4]||(t[4]=e("h3",{id:"_2-2-商业化",tabindex:"-1"},[l("2.2 商业化 "),e("a",{class:"header-anchor",href:"#_2-2-商业化","aria-label":"Permalink to “2.2 商业化”"},"​")],-1)),t[5]||(t[5]=e("blockquote",null,[e("p",null,[l("在追逐“独角兽”和规模扩张的狂热迷思之后,真正的商业高手正在重新回归本质:"),e("strong",null,"盈利才是企业的核心护城河。"),l(" 这套书单为我们揭示了一种"),e("strong",null,"更具韧性的商业路径——“小而美”的极简经营"),l("。它教导我们如何拒绝低效的内卷与忙碌,通过“做更少但创造更多价值”的思维,打造在不确定时代下依然能保持稳定现金流的“慢公司”。")]),e("p",null,[e("strong",null,"商业的成功,往往源于敢于挑战“难而正确”的事"),l("。从皮克斯如何建立允许失败的创意土壤,到 Waze 如何通过解决被忽视的痛点实现跨越式成长,这些世界级案例证明了:卓越的组织不仅需要极简的流程与高效的分布式协作(远程办公),更需要一种“冷静”的文化,将利润置于规模之上。")])],-1)),h(k,{books:g(We)},null,8,["books"]),t[6]||(t[6]=e("h2",{id:"_3-效率与效能",tabindex:"-1"},[l("3. 效率与效能 "),e("a",{class:"header-anchor",href:"#_3-效率与效能","aria-label":"Permalink to “3. 效率与效能”"},"​")],-1)),t[7]||(t[7]=e("blockquote",null,[e("p",null,[l("在信息过载与高压竞争的现代环境中,平庸与卓越的分水岭不再是做事的速度,而是"),e("strong",null,"决策的精度与责任的边界"),l("。这套书单为我们提供了一套从个人认知到组织协作的“效能防线”:首先,它"),e("strong",null,"引导我们完成从“时钟”到“罗盘”的思维跨越,打破盲目追求速度的迷思,确保将核心精力倾注在真正产生长远复利的“重要非紧急”事务之上"),l("。 真正的效能源于对复杂性的科学驾驭:")]),e("ul",null,[e("li",null,"通过“清单革命”式的认知防护,我们将最佳实践外化为可靠的防错系统,弥补人类在极端环境下的认知局限;"),e("li",null,"“猴子管理法”则以生动的视角重塑了职场协作的责任逻辑,教我们通过有效授权拒绝无谓的干扰,释放战略思考的精力;")])],-1)),h(k,{books:g(Ye)},null,8,["books"]),t[8]||(t[8]=e("h2",{id:"_4-学习与成长",tabindex:"-1"},[l("4. 学习与成长 "),e("a",{class:"header-anchor",href:"#_4-学习与成长","aria-label":"Permalink to “4. 学习与成长”"},"​")],-1)),t[9]||(t[9]=e("blockquote",null,[e("p",null,[l("在信息爆炸与快速变革的时代,"),e("strong",null,"真正的成长不再是知识的被动堆砌,而是认知系统的彻底迭代"),l("。这套书单为我们构建了一个从底层思维到人生经营的闭环:")]),e("ul",null,[e("li",null,"首先,通过批判性思维与深度阅读夯实“元能力”,在泛滥的信息中识别本质,将他人的洞见转化为自己的血肉;"),e("li",null,"其次,利用“检索力”打破信息差,确保自己在任何领域都能快速获取高质量资源,掌握逆风而行的主动权。")]),e("p",null,[e("strong",null,"人生不是一场盲目的长跑,而是一场基于“原则”的精密经营"),l("。从达利欧的系统化决策,到纳瓦尔的财富与幸福逻辑,这些智者教导我们如何利用杠杆、坚持长期主义,将自己视作一家“人生有限公司”来经营。我们需要摆脱“优秀绵羊”式的被动驱动,通过识别成长的“第二曲线”,在巅峰时刻主动寻求突破,将自己打造成不可替代的稀缺资产。阅读这些经典,不仅是为了习得技能,更是为了在算法与焦虑的夹击中,重塑内心的宁静与独立判断的勇气。")])],-1)),h(k,{books:g($e)},null,8,["books"]),t[10]||(t[10]=e("h2",{id:"_5-人文社科",tabindex:"-1"},[l("5. 人文社科 "),e("a",{class:"header-anchor",href:"#_5-人文社科","aria-label":"Permalink to “5. 人文社科”"},"​")],-1)),t[11]||(t[11]=e("blockquote",null,[e("p",null,"在宏观历史与微观现实间构建认知:在碎片化与不确定性并存的时代,穿透表象、直达本质的洞察力成为必需。这套单为我们开启了两扇窗:"),e("ul",null,[e("li",null,"一扇望向万年文明的宏大坐标,通过《枪炮、病菌与钢铁》的跨学科视野,拆解地理环境如何冷酷而偶然地重塑全球版图,彻底颠覆“文明优越论”的傲慢;"),e("li",null,"另一扇则照向当下社会的真实肌理,在梁晓声对各阶层生存困境的细腻描摹中,读懂大时代变革背后隐秘的结构性逻辑与阶层焦虑。")]),e("p",null,[e("strong",null,"人文思考的终极价值,在于如何将宏大叙事转化为个人的行动力量"),l("。正如项飙所倡导的“把自己作为方法”,这些著作不仅是知识的传递,更是思维的松绑。它们教导我们不再做时代的被动旁观者,而是学会在个人体验与宏观世界之间搭建桥梁,通过重建“附近”的小世界,在喧嚣中找准自我的定位。")])],-1)),h(k,{books:g(Me)},null,8,["books"]),t[12]||(t[12]=e("h2",{id:"_6-健康生活",tabindex:"-1"},[l("6. 健康生活 "),e("a",{class:"header-anchor",href:"#_6-健康生活","aria-label":"Permalink to “6. 健康生活”"},"​")],-1)),t[13]||(t[13]=e("img",{src:T,style:{width:"100%","border-radius":"8px","margin-bottom":"20px"},alt:"about site background"},null,-1)),t[14]||(t[14]=e("blockquote",null,[e("p",null,[l("在面临大概率活到100岁的“长寿时代”,传统的线性人生模式正在失效。我们需要对“健康”进行一次彻底的认知重构:"),e("strong",null,"健康不再仅仅是“没有疾病”,而是支撑我们跨越漫长生命周期、应对多阶段人生挑战的最核心“无形资产”"),l("。想要让这套生命系统长期平稳运行,真正的解法并不在医院的处方笺里,而是隐藏在我们每天的日常选择中。")]),e("p",null,[l("决定我们长期健康状态的,有 99 %取决于日常习惯。我们需要"),e("strong",null,"在休息、饮食、运动、睡眠这四个高频生活维度中,植入微小但杠杆率极高的改变"),l("(例如12小时进食窗口、10分钟高强度运动、睡前屏蔽数字通知等)。用最低的执行成本,置换身心状态的巨大回报。")])],-1)),h(k,{books:g(Te)},null,8,["books"])]))}});export{Ge as __pageData,De as default}; diff --git a/assets/growth_distinguish-useful-information.md.2KhRCOyW.js b/assets/growth_distinguish-useful-information.md.Bk0b5058.js similarity index 99% rename from assets/growth_distinguish-useful-information.md.2KhRCOyW.js rename to assets/growth_distinguish-useful-information.md.Bk0b5058.js index 2e9db9a..14b1e92 100644 --- a/assets/growth_distinguish-useful-information.md.2KhRCOyW.js +++ b/assets/growth_distinguish-useful-information.md.Bk0b5058.js @@ -1 +1 @@ -import{_ as e,c as r,o as t,d as i}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","frontmatter":{"date":"2025-11-10T12:52:28.000Z","title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","permalink":"/growth/distinguish-useful-information","categories":["资源推荐"],"tags":["信息筛选","个人成长"]},"headers":[],"relativePath":"growth/distinguish-useful-information.md","filePath":"30.悦读时光/21.如何甄别真正有用的信息.md"}'),l={name:"growth/distinguish-useful-information.md"};function o(n,a,s,h,_,d){return t(),r("div",null,[...a[0]||(a[0]=[i('

如何甄别真正有用的信息

摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。

在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键

1. 打破“信息差”的系统性错觉

过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“人本身的差距”,具体体现在三个层面:

1.1 表面是你在筛选信息,实际是信息在筛选人

举个最常见的例子:大家都知道做技术输出、写独立博客或做个人产品能带来长期的复利,但为什么真正跑通全栈并沉淀下来的人凤毛麟角?

阻碍多数人的原因通常有三个:

  • 缺乏持久化机制、执行断层:无法在短期内看到正向反馈(ROI),导致进程中途中断,缺乏持续输出的执行力(如技术文章更新、用户运营)。
  • 缺乏深度计算:只是浮于表面的搬运,没有沉下心来对技术或业务进行深度解析与架构思考。
  • 对不确定性(Uncertainty)的恐惧:看不到确定性的回报,对投入产出比产生动摇,导致长期投入的决策被取消。

面对这些公开的“赚钱/成长路径”,看似是我们在评估它,实际上是这些高门槛的路径在天然地筛选掉那些缺乏定力和长远产品嗅觉的人。

1.2 警惕算法构建的“信息茧房”

在网络推荐算法和同温层环境的双重作用下,我们每天接收的输入往往带有严重的偏置。这种不够客观的环境,容易导致我们在遇到真正有价值、但与既有认知冲突的客观观点时,产生本能的防御和抵触。

对于开发者和内容创作者而言,打破认知茧房本身就是一种巨大的信息差。任何技术栈或商业模式,都需要博采众长。不要对非本领域的观点一味抛出异常,而是要建立辩证的“中间件”来过滤和吸收,做好信息的甄别与筛选。

2. 信息泛滥与脑力带宽的消耗

信息即权力,掌握高维信息的人确实拥有更强的资源调配能力。但关键在于,没有人有义务把复杂的底层逻辑拆解成现成的方法论,手把手教到完全理解为止。真正造成人与人之间差距的,是解析和编译信息的能力——同样的信息,不同的人能提炼出完全不同的价值。

2.1 从“追求差”到“对抗泛滥”

如今的问题早已不是信息匮乏,而是信息熵增与泛滥。这不仅带来了极度内卷的竞争,还伴随着传播过程中的信息失真。市面上很多被大肆宣扬的“风口”,仔细扒开源码就会发现:你所看到的,其实都是别人精心设计好让你看到的。

当一个赛道人人都争先恐后时,如果你真想创造价值,不如“反者道之动”,静观其变,等待系统重构的新机会。拥挤的赛道最终必然走向卷利润、卷价格的“劣币驱逐良币”死循环。

2.2 无效信息是对算力的极大消耗

很多人把赚不到钱、做不成事归结于“信息积累不够”,于是疯狂地囤积资料、拼命地订阅各种干货,试图通过扩大信息摄入量来超越别人。 这是一个极其危险的谬论。获取和处理信息,本质上是一件极其消耗系统资源(精力和能量)的事情。

如果一个人单凭拼凑信息就能战胜市场,那大家都不需要埋头精耕细作了。人的脑容量和认知带宽是有限的,一旦缓存(Cache)被大量低质、无用的噪音占满,真正高价值的信号就无法进入,想得太多、做得太少,只会引发严重的内耗。

3. 价值创造的核心:思考+执行,突破信息壁垒

信息本质是工具,而非目的,人的核心竞争力永远是“思考+执行”,二者形成的能力壁垒,远高于单纯的信息壁垒:思考 + 执行 > 纯执行 + 不思考 > 纯思考 + 不执行 > 不思考 + 不执行

  • 思考+执行:通过思考判断信息价值,通过执行验证选择,形成“信息-判断-实践-反馈”的闭环
  • 执行+不思考:机械落地但缺乏方向,效率低下但可能偶然踩中机会。
  • 思考+不执行:仅停留在“知道”阶段,信息无法转化为任何价值。
  • 不思考+不执行:完全被动接收信息,与机会绝缘。

“思考+执行”之所以重要,是因为它们构成了反馈闭环:思考是为了对输入的信息进行校验和逻辑判断,执行是为了将假设放入真实环境中跑通测试,从而向目标逼近

信息不对称的根源,其实是“内部能力不对称”。将相同的技术趋势、项目机会放在两位开发者面前:前者能通过思考拆解落地路径、通过执行验证可行性;后者仅停留在“了解”层面,差距便由此产生。人们最终能获得的价值,取决于自身的思考深度、执行力度、认知高度——想要获得更多,唯一路径是“精进自身”,让能力匹配目标。

真正有价值的信息,如果传达给一个没有执行力的人,就永远停留在“已知”的内存态,无法落盘,吸收、运用和产生价值的任何一个环节都不会发生。

我们通常以为自己没成事是因为缺少某个关键的“信息差”,实际上连这个“以为”的诊断都错了。真正的原因,往往是思考的深度和执行的颗粒度不到位,导致机会流失。人终归只能赚到自己系统架构支撑得起的那部分收益,想要获得更多,唯一的路径是重构和精进自己。

4. 行动指南

4.1 信息筛选:果断做减法,锚定核心目标

  • 停止抱怨外界信息的真伪,主动建立个人过滤机制,拒绝"信息焦虑",定期清理无效信息源(如低价值技术社群、重复资讯推送)。
  • 明确自身阶段目标(如“3个月掌握某框架落地”“半年实现副业变现”),仅筛选与目标强相关的信息,把有限的算力留给最高优的任务。

4.2 信息解读:穿透表象,洞察未言之意

  • 接收信息时(如技术文章、行业分享),不仅要关注"说了什么",更要洞察"没说什么"(如技术的适用场景、潜在坑点、变现逻辑的隐藏环节)。
  • 优先与高信噪比人群深度交流(如资深开发者、落地型创业者、领域专家),这类沟通往往直击本质、减少冗余,能快速触达核心信息与隐性经验,同时反向倒逼自身思考质量的提升。

4.3 差异破局:向内求索,强化“思考+执行”

与其说世界上存在信息差,不如说是"人差"。将同样的文档和源码置于两人面前,由于"底层编译器"(认知框架与执行系统)的差异,前者的洞察与后者的产出必然判若云泥。一切信息不对称的表象之下,真正分野的永远是内在的认知深度与执行密度。我们只有通过持续的思考和执行提升自己的能力,才能在信息时代中获得价值。

  • 停止抱怨"信息不真实"这类外部归因,把精力放在自己能掌控的事情上——提升思考深度和执行效率。
  • 建立"信息落地清单":每当获得有价值的信息,立刻拆解成三个部分——思考要点(比如是否适合自己)、执行步骤(比如本周验证什么)、反馈节点(比如两周后复盘效果),别让信息躺在那里吃灰。
',36)])])}const u=e(l,[["render",o]]);export{c as __pageData,u as default}; +import{_ as e,c as r,o as t,d as i}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","frontmatter":{"date":"2025-11-10T12:52:28.000Z","title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","permalink":"/growth/distinguish-useful-information","categories":["资源推荐"],"tags":["信息筛选","个人成长"]},"headers":[],"relativePath":"growth/distinguish-useful-information.md","filePath":"30.悦读时光/21.如何甄别真正有用的信息.md"}'),l={name:"growth/distinguish-useful-information.md"};function o(n,a,s,h,_,d){return t(),r("div",null,[...a[0]||(a[0]=[i('

如何甄别真正有用的信息

摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。

在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键

1. 打破“信息差”的系统性错觉

过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“人本身的差距”,具体体现在三个层面:

1.1 表面是你在筛选信息,实际是信息在筛选人

举个最常见的例子:大家都知道做技术输出、写独立博客或做个人产品能带来长期的复利,但为什么真正跑通全栈并沉淀下来的人凤毛麟角?

阻碍多数人的原因通常有三个:

  • 缺乏持久化机制、执行断层:无法在短期内看到正向反馈(ROI),导致进程中途中断,缺乏持续输出的执行力(如技术文章更新、用户运营)。
  • 缺乏深度计算:只是浮于表面的搬运,没有沉下心来对技术或业务进行深度解析与架构思考。
  • 对不确定性(Uncertainty)的恐惧:看不到确定性的回报,对投入产出比产生动摇,导致长期投入的决策被取消。

面对这些公开的“赚钱/成长路径”,看似是我们在评估它,实际上是这些高门槛的路径在天然地筛选掉那些缺乏定力和长远产品嗅觉的人。

1.2 警惕算法构建的“信息茧房”

在网络推荐算法和同温层环境的双重作用下,我们每天接收的输入往往带有严重的偏置。这种不够客观的环境,容易导致我们在遇到真正有价值、但与既有认知冲突的客观观点时,产生本能的防御和抵触。

对于开发者和内容创作者而言,打破认知茧房本身就是一种巨大的信息差。任何技术栈或商业模式,都需要博采众长。不要对非本领域的观点一味抛出异常,而是要建立辩证的“中间件”来过滤和吸收,做好信息的甄别与筛选。

2. 信息泛滥与脑力带宽的消耗

信息即权力,掌握高维信息的人确实拥有更强的资源调配能力。但关键在于,没有人有义务把复杂的底层逻辑拆解成现成的方法论,手把手教到完全理解为止。真正造成人与人之间差距的,是解析和编译信息的能力——同样的信息,不同的人能提炼出完全不同的价值。

2.1 从“追求差”到“对抗泛滥”

如今的问题早已不是信息匮乏,而是信息熵增与泛滥。这不仅带来了极度内卷的竞争,还伴随着传播过程中的信息失真。市面上很多被大肆宣扬的“风口”,仔细扒开源码就会发现:你所看到的,其实都是别人精心设计好让你看到的。

当一个赛道人人都争先恐后时,如果你真想创造价值,不如“反者道之动”,静观其变,等待系统重构的新机会。拥挤的赛道最终必然走向卷利润、卷价格的“劣币驱逐良币”死循环。

2.2 无效信息是对算力的极大消耗

很多人把赚不到钱、做不成事归结于“信息积累不够”,于是疯狂地囤积资料、拼命地订阅各种干货,试图通过扩大信息摄入量来超越别人。 这是一个极其危险的谬论。获取和处理信息,本质上是一件极其消耗系统资源(精力和能量)的事情。

如果一个人单凭拼凑信息就能战胜市场,那大家都不需要埋头精耕细作了。人的脑容量和认知带宽是有限的,一旦缓存(Cache)被大量低质、无用的噪音占满,真正高价值的信号就无法进入,想得太多、做得太少,只会引发严重的内耗。

3. 价值创造的核心:思考+执行,突破信息壁垒

信息本质是工具,而非目的,人的核心竞争力永远是“思考+执行”,二者形成的能力壁垒,远高于单纯的信息壁垒:思考 + 执行 > 纯执行 + 不思考 > 纯思考 + 不执行 > 不思考 + 不执行

  • 思考+执行:通过思考判断信息价值,通过执行验证选择,形成“信息-判断-实践-反馈”的闭环
  • 执行+不思考:机械落地但缺乏方向,效率低下但可能偶然踩中机会。
  • 思考+不执行:仅停留在“知道”阶段,信息无法转化为任何价值。
  • 不思考+不执行:完全被动接收信息,与机会绝缘。

“思考+执行”之所以重要,是因为它们构成了反馈闭环:思考是为了对输入的信息进行校验和逻辑判断,执行是为了将假设放入真实环境中跑通测试,从而向目标逼近

信息不对称的根源,其实是“内部能力不对称”。将相同的技术趋势、项目机会放在两位开发者面前:前者能通过思考拆解落地路径、通过执行验证可行性;后者仅停留在“了解”层面,差距便由此产生。人们最终能获得的价值,取决于自身的思考深度、执行力度、认知高度——想要获得更多,唯一路径是“精进自身”,让能力匹配目标。

真正有价值的信息,如果传达给一个没有执行力的人,就永远停留在“已知”的内存态,无法落盘,吸收、运用和产生价值的任何一个环节都不会发生。

我们通常以为自己没成事是因为缺少某个关键的“信息差”,实际上连这个“以为”的诊断都错了。真正的原因,往往是思考的深度和执行的颗粒度不到位,导致机会流失。人终归只能赚到自己系统架构支撑得起的那部分收益,想要获得更多,唯一的路径是重构和精进自己。

4. 行动指南

4.1 信息筛选:果断做减法,锚定核心目标

  • 停止抱怨外界信息的真伪,主动建立个人过滤机制,拒绝"信息焦虑",定期清理无效信息源(如低价值技术社群、重复资讯推送)。
  • 明确自身阶段目标(如“3个月掌握某框架落地”“半年实现副业变现”),仅筛选与目标强相关的信息,把有限的算力留给最高优的任务。

4.2 信息解读:穿透表象,洞察未言之意

  • 接收信息时(如技术文章、行业分享),不仅要关注"说了什么",更要洞察"没说什么"(如技术的适用场景、潜在坑点、变现逻辑的隐藏环节)。
  • 优先与高信噪比人群深度交流(如资深开发者、落地型创业者、领域专家),这类沟通往往直击本质、减少冗余,能快速触达核心信息与隐性经验,同时反向倒逼自身思考质量的提升。

4.3 差异破局:向内求索,强化“思考+执行”

与其说世界上存在信息差,不如说是"人差"。将同样的文档和源码置于两人面前,由于"底层编译器"(认知框架与执行系统)的差异,前者的洞察与后者的产出必然判若云泥。一切信息不对称的表象之下,真正分野的永远是内在的认知深度与执行密度。我们只有通过持续的思考和执行提升自己的能力,才能在信息时代中获得价值。

  • 停止抱怨"信息不真实"这类外部归因,把精力放在自己能掌控的事情上——提升思考深度和执行效率。
  • 建立"信息落地清单":每当获得有价值的信息,立刻拆解成三个部分——思考要点(比如是否适合自己)、执行步骤(比如本周验证什么)、反馈节点(比如两周后复盘效果),别让信息躺在那里吃灰。
',36)])])}const u=e(l,[["render",o]]);export{c as __pageData,u as default}; diff --git a/assets/growth_distinguish-useful-information.md.2KhRCOyW.lean.js b/assets/growth_distinguish-useful-information.md.Bk0b5058.lean.js similarity index 95% rename from assets/growth_distinguish-useful-information.md.2KhRCOyW.lean.js rename to assets/growth_distinguish-useful-information.md.Bk0b5058.lean.js index 61d9025..66d3fbd 100644 --- a/assets/growth_distinguish-useful-information.md.2KhRCOyW.lean.js +++ b/assets/growth_distinguish-useful-information.md.Bk0b5058.lean.js @@ -1 +1 @@ -import{_ as e,c as r,o as t,d as i}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const c=JSON.parse('{"title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","frontmatter":{"date":"2025-11-10T12:52:28.000Z","title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","permalink":"/growth/distinguish-useful-information","categories":["资源推荐"],"tags":["信息筛选","个人成长"]},"headers":[],"relativePath":"growth/distinguish-useful-information.md","filePath":"30.悦读时光/21.如何甄别真正有用的信息.md"}'),l={name:"growth/distinguish-useful-information.md"};function o(n,a,s,h,_,d){return t(),r("div",null,[...a[0]||(a[0]=[i("",36)])])}const u=e(l,[["render",o]]);export{c as __pageData,u as default}; +import{_ as e,c as r,o as t,d as i}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const c=JSON.parse('{"title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","frontmatter":{"date":"2025-11-10T12:52:28.000Z","title":"如何甄别真正有用的信息","description":"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。","permalink":"/growth/distinguish-useful-information","categories":["资源推荐"],"tags":["信息筛选","个人成长"]},"headers":[],"relativePath":"growth/distinguish-useful-information.md","filePath":"30.悦读时光/21.如何甄别真正有用的信息.md"}'),l={name:"growth/distinguish-useful-information.md"};function o(n,a,s,h,_,d){return t(),r("div",null,[...a[0]||(a[0]=[i("",36)])])}const u=e(l,[["render",o]]);export{c as __pageData,u as default}; diff --git a/assets/growth_reading-tips.md.BGZRgwwj.js b/assets/growth_reading-tips.md.DvPd5P4v.js similarity index 99% rename from assets/growth_reading-tips.md.BGZRgwwj.js rename to assets/growth_reading-tips.md.DvPd5P4v.js index 4db778b..191878c 100644 --- a/assets/growth_reading-tips.md.BGZRgwwj.js +++ b/assets/growth_reading-tips.md.DvPd5P4v.js @@ -1 +1 @@ -import{_ as o,c as a,o as r,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","frontmatter":{"date":"2025-03-06T11:42:20.000Z","title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png","permalink":"/growth/reading-tips","sticky":1,"top":true,"categories":["悦读时光"],"tags":["悦读时光"]},"headers":[],"relativePath":"growth/reading-tips.md","filePath":"30.悦读时光/10.读书三要三不要.md"}'),e={name:"growth/reading-tips.md"};function i(n,t,s,p,g,h){return r(),a("div",null,[...t[0]||(t[0]=[l('

读书“三要”和“三不要”

摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了读书的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。

about site background

1. 我们为什么需要读书?

读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:

  • 深度与严谨:书籍往往是创作者多年思考、长期写作的产物,经过专业编辑反复修改校对,知识密度远高于日常谈话或碎片内容。
  • 专注与反刍:读书允许读者专注其中,书中的信息因此往往条理清晰、逻辑严密,语言也更为精练紧凑。读者可以随时停下翻回反复琢磨、推敲。相比之下,电视画面一闪而过,很难进行层层递进的深入分析。
  • 知识密度高:沉淀在书中的信息,往往逻辑性强、语言精练紧凑(即所谓的“书面语”),知识含量远超日常碎片化信息。认真读完一本好书,获得的知识与思考深度,往往超过看几部剧、刷几小时短视频,甚至聊几个小时天的总和。

认真读一本好书,往往比看一部电视剧或漫无目的地浏览网页能获得更多知识。但这并不意味着“只要捧起书就一定有收获”,关键在于怎么读

2. 读书"三要"

第一“要”:完整地读,整本地读

对于好书,要完整地读、整本地读,不要只捡结论。

很多人习惯直接看结论和观点,觉得这样效率高。但这样做有一个根本缺陷:你只得到了答案,却错过了思考方法本身

掌握思考方法的唯一途径,是通过完整地阅读来观摩优秀的大师是如何思考的——他们如何一步步推导出结论,如何分析和批判不同的观点,遇到困难时又如何转换视角。看得多了,自然能渐渐窥见门道,再辅以勤恳的思考训练,才能真正将思维方法内化。

相反,只知道观点、不掌握方法的后果,是"刻舟求剑"

  • 理论的适用条件只要稍有些变化,便无所适从,只会把那几条观点反复背诵套用。
  • 经典著作往往具有复杂性,读起来必须动脑筋。只背诵结论不是传授学问的方法,而是培养盲从信徒的方法,而不是做学问的路径。

第二“要”:带着问题去读,构建知识树

要带着问题去读书,将散乱的信息构建成清晰的知识树。

每一本知识性书籍,背后都有一个(或一组)核心问题。知识性书籍的诞生,往往是为了解答、批驳或赞同某个特定的观点,好的作者会先把他要回答的问题交代清楚,再展开论述。

  • 还原“问题情境”:很多流传至今的名著,现代人之所以读不进去,是因为对当时的“问题情境”一无所知。许多经典在当年都是锋芒毕露、针锋相对的论辩性作品,是为了解决当时的痛点而生。一旦你了解了这些背景,事先知道了这本书在学科谱系中的位置,阅读就会变得像追踪一场精彩的辩论一样有趣。

  • 连点成树:带着亟待回答的问题去读书,不但不会觉得枯燥,反而能充分享受新知的乐趣。这样吸收进来的知识不再是无意义的堆积物,而是沿着“批判—反批判—再批判”线索生长出来的、清晰的知识树。有了知识树,才能真正形成自己的思想观念,才能条理清晰地理解世界。

  • 善用指引:老师或导读无法代替你读书,但可以帮你解释问题情境、指明知识门径、交代语境(所谓“师傅领进门,修行在个人”),大大提高你的阅读效率和理解深度。

第三“要”:与人(或AI)讨论,检验理解的试金石

读完一本书,要找人讨论(也可以与能力较强的 AI 工具深度对话),讨论是检验理解的试金石。

独自阅读常形成模糊的理解链条,容易产生“我懂了”的幻觉,唯有能用自己的语言让别人听懂,才算真正理解。

真正的理解有一个更高的标准:把书中的观点用自己的话讲给别人听,让对方也能听懂。"看懂"和"讲清楚"之间,差着十万八千里。很多时候,所谓"看懂",不过是在脑中形成了一条模糊、不连贯的"理解链"。只有当你必须用自己的语言向别人复述,并且要做到言之成理、自圆其说时,那些薄弱、缺失的环节才会立刻暴露出来(含糊的地方你会直接卡壳)。

在“刁难”中查漏补缺,讲述的过程会倒逼你:

  1. 把逻辑理清楚,确保"因为"和"所以"之间真的成立;
  2. 发现自己还没搞懂的地方,带着新问题回去再读;
  3. 在他人的追问和质疑中,不断深化理解。

我曾尝试将几本书的内容讲给没时间阅读的朋友听。他们可不会把我当“老师”来尊敬,遇到疑问或不同意见就会随时打断,甚至以把我“问倒”为乐。结果是,我原以为完全看懂的书,被他们一通“胡搅蛮缠”后,发现竟然还有那么多没吃透的地方,只能回去重读。下一次见面时,我必须把他们的质疑解释清楚。但也正因如此,那几本书成了我书架上理解最透彻、收获最大的书。

这里的讲述不是单方面的课堂宣讲,而是面对面的平等讨论、寻找高质量的对话。如果对话者水平高、讨论深入,效果极佳。在如今,你甚至可以把逻辑推理能力较强的 AI 工具当作你的“讨论搭子”,让它对你的观点进行提问和反驳,以此来迫使自己真正透彻地掌握知识。

3. 读书"三不要"

第一“不要”:不要怀揣哀怨心态,避免读书目的被异化

不要有哀怨心态,被哀怨情绪控制,就失去了读书的平常心和客观理解力。

读书多不等于人才,未提供社会价值则难致富。若因此怨天尤人,读书将异化为排解情绪与博取关注的工具。

一个人一旦被哀怨情绪控制,就会彻底失去读书的平常心和客观理解力。

  • 警惕“价值转化”的幻觉:有些人确实读了不少书,说起话来头头是道,也时常能得到他人的赞许。这容易让人产生一种幻觉,自认是个“被埋没的人才”。但实际上,读书多不等于人才,真正的财富来源于你能否为别人提供有价值的商品或服务。得到别人的口头赞许,与让别人掏钱买你的服务之间,有着巨大的鸿沟。

  • 警惕心态失衡与怨天尤人:当自诩为“人才”却迟迟未能发家致富时,很多人不会反思自己是否创造了真正的社会价值,而是将原因归咎于外界,静等着“伯乐”来发掘。当看到身边不读书的人纷纷买车买房时,这种着急就会演变成气急败坏、鄙夷与哀怨,甚至觉得“社会太不公平”。

  • 防止阅读初衷的异化:这是最致命的一点。当怨气占据大脑,读书对于这类人来说,就不再是客观接受信息、理解世界的方式了,而是沦为了一种排解郁闷、打发时间的消极手段。他们的关注点会从书本内容彻底转移到别人的眼光上,内心的潜台词变成了表演:“你们还没看到我刻苦读书的身姿吗?还不承认我是个人才吗?还不提高我的收入吗?”

第二“不要”:不要玩物丧志,陷入对物理媒介的过度迷恋

不要玩物丧志,过度沉溺书籍细节与附属品会导致“玩物丧志”。若读书脱离获取信息的目的,则难以在知识学问上有所成就。

  • 回归阅读的本质:读书的核心目的是为了获取信息、汲取知识,而不是为了把玩那一束装订起来的纸张。随着阅读的深入,很多人容易沉溺于书籍带来的附加体验(如纸张的手感、油墨的香气、版本的考究)。这种对物理形态的偏好可以理解,但必须有所节制,一旦喧宾夺主,甚至因此拒绝更高效的媒介,就是南辕北辙了。

  • 顺应媒介演进的效率趋势,时代趋势不可逆:纵观历史,从丝绸、竹简到纸张,再到如今的电子书,信息媒介的演进始终朝着“更低成本、更高效率”的方向发展。在信息时代,电子书在便携性、易储性、内容可检索性(如一键全文搜索)以及知识共享方面,拥有纸质书无法比拟的优势,这对于快速定位关键信息、构建个人知识树而言是极大的助力。

  • 警惕被“旧习惯”绑架:很多抗拒电子书的人,强调的种种理由其实与“读书”本身关系不大,更多是不愿改变旧有的阅读习惯,不愿放弃读书以外的把玩乐趣。为了坚持这种旧习惯,而不惜牺牲信息流转和获取的效率,这在信息爆炸的时代是得不偿失的。

  • 积极拥抱新媒介的红利:真正以求知为目的的人,从来都会积极拥抱新的传播工具。在这个时代,固守传统媒介的人获取知识的成本会越来越高、效率越来越低;而愿意接纳新媒介的阅读者,则能以更轻松、愉快的方式,获取最丰沛的知识。

第三“不要”:不要只读书不知现实,避免知识结构陷入“真空”

书籍仅承载极少知识,大量隐性知识存于现实社会。只读书会导致知识结构缺陷,难以应对实务,故不可脱离现实。

书本知识只是认识世界的一小部分,脱离现实的纯粹阅读,会导致知识结构的严重扭曲。

  • 认清书籍的局限性:知识以各种方式存在于社会的各个角落,书籍所承载的仅仅是世界知识总量中极小的一部分。由于书籍要求书面化、系统且连贯,它必然无法记录下大量不稳定、转瞬即逝、碎片化或难以用语言明确表达的知识。

  • 重视庞大的“隐性知识”:在现实社会中,存在着诸如谈话交流、个人经验、行为方式、商业模式及人际关系等海量的非书本知识。如果一个人只是一味读书而极少参与社会实践,就会完全错失这部分在数量上更为庞大的知识宝库,导致知识结构出现重大缺陷。

  • 警惕脱离现实的“扭曲认知”:如果只读书而不参与社会实践,会导致知识结构存在重大缺陷,在处理现实事务时会暴露无遗。在数学、计算机或棋类等高度抽象、无需太多社会经验的领域,仅凭逻辑推演确实可以成就“少年天才”。但真实世界的绝大多数领域(如法律、商业、服务业等)极度依赖从业者的社会经验和现实感。只读书不仅会造成处理实际事务时能力低下,更会以一小部分取代整体,形成对真实世界的扭曲认知。仅靠抽象逻辑是无法解决复杂现实问题的,这也是为什么世界上会有15岁的黑客,却绝不会有15岁的人事经理或法官。

4. 让书籍成为连接自我与现实的桥梁

读书从来不是为了把自己变成一个装满各类观点的“两脚书橱”,而是为了升级我们思考现实、解决问题的“底层操作系统”。

无论是坚持“三要”(掌握方法、构建体系、检验真知),还是警惕“三不要”(拒绝异化、拥抱高效、扎根现实),最终的指向都是同一个:打破书本与现实的壁垒,让知识真正为你所用。 在获取信息门槛越来越低的今天,独立思考和将知识转化为实际价值的能力愈发珍贵。

愿我们都能带着平常心去阅读,在书中观摩大师的智慧,在现实中创造真实的价值,享受纯粹而充实的悦读时光。

',42)])])}const u=o(e,[["render",i]]);export{d as __pageData,u as default}; +import{_ as o,c as a,o as r,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","frontmatter":{"date":"2025-03-06T11:42:20.000Z","title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png","permalink":"/growth/reading-tips","sticky":1,"top":true,"categories":["悦读时光"],"tags":["悦读时光"]},"headers":[],"relativePath":"growth/reading-tips.md","filePath":"30.悦读时光/10.读书三要三不要.md"}'),e={name:"growth/reading-tips.md"};function i(n,t,s,p,g,h){return r(),a("div",null,[...t[0]||(t[0]=[l('

读书“三要”和“三不要”

摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了读书的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。

about site background

1. 我们为什么需要读书?

读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:

  • 深度与严谨:书籍往往是创作者多年思考、长期写作的产物,经过专业编辑反复修改校对,知识密度远高于日常谈话或碎片内容。
  • 专注与反刍:读书允许读者专注其中,书中的信息因此往往条理清晰、逻辑严密,语言也更为精练紧凑。读者可以随时停下翻回反复琢磨、推敲。相比之下,电视画面一闪而过,很难进行层层递进的深入分析。
  • 知识密度高:沉淀在书中的信息,往往逻辑性强、语言精练紧凑(即所谓的“书面语”),知识含量远超日常碎片化信息。认真读完一本好书,获得的知识与思考深度,往往超过看几部剧、刷几小时短视频,甚至聊几个小时天的总和。

认真读一本好书,往往比看一部电视剧或漫无目的地浏览网页能获得更多知识。但这并不意味着“只要捧起书就一定有收获”,关键在于怎么读

2. 读书"三要"

第一“要”:完整地读,整本地读

对于好书,要完整地读、整本地读,不要只捡结论。

很多人习惯直接看结论和观点,觉得这样效率高。但这样做有一个根本缺陷:你只得到了答案,却错过了思考方法本身

掌握思考方法的唯一途径,是通过完整地阅读来观摩优秀的大师是如何思考的——他们如何一步步推导出结论,如何分析和批判不同的观点,遇到困难时又如何转换视角。看得多了,自然能渐渐窥见门道,再辅以勤恳的思考训练,才能真正将思维方法内化。

相反,只知道观点、不掌握方法的后果,是"刻舟求剑"

  • 理论的适用条件只要稍有些变化,便无所适从,只会把那几条观点反复背诵套用。
  • 经典著作往往具有复杂性,读起来必须动脑筋。只背诵结论不是传授学问的方法,而是培养盲从信徒的方法,而不是做学问的路径。

第二“要”:带着问题去读,构建知识树

要带着问题去读书,将散乱的信息构建成清晰的知识树。

每一本知识性书籍,背后都有一个(或一组)核心问题。知识性书籍的诞生,往往是为了解答、批驳或赞同某个特定的观点,好的作者会先把他要回答的问题交代清楚,再展开论述。

  • 还原“问题情境”:很多流传至今的名著,现代人之所以读不进去,是因为对当时的“问题情境”一无所知。许多经典在当年都是锋芒毕露、针锋相对的论辩性作品,是为了解决当时的痛点而生。一旦你了解了这些背景,事先知道了这本书在学科谱系中的位置,阅读就会变得像追踪一场精彩的辩论一样有趣。

  • 连点成树:带着亟待回答的问题去读书,不但不会觉得枯燥,反而能充分享受新知的乐趣。这样吸收进来的知识不再是无意义的堆积物,而是沿着“批判—反批判—再批判”线索生长出来的、清晰的知识树。有了知识树,才能真正形成自己的思想观念,才能条理清晰地理解世界。

  • 善用指引:老师或导读无法代替你读书,但可以帮你解释问题情境、指明知识门径、交代语境(所谓“师傅领进门,修行在个人”),大大提高你的阅读效率和理解深度。

第三“要”:与人(或AI)讨论,检验理解的试金石

读完一本书,要找人讨论(也可以与能力较强的 AI 工具深度对话),讨论是检验理解的试金石。

独自阅读常形成模糊的理解链条,容易产生“我懂了”的幻觉,唯有能用自己的语言让别人听懂,才算真正理解。

真正的理解有一个更高的标准:把书中的观点用自己的话讲给别人听,让对方也能听懂。"看懂"和"讲清楚"之间,差着十万八千里。很多时候,所谓"看懂",不过是在脑中形成了一条模糊、不连贯的"理解链"。只有当你必须用自己的语言向别人复述,并且要做到言之成理、自圆其说时,那些薄弱、缺失的环节才会立刻暴露出来(含糊的地方你会直接卡壳)。

在“刁难”中查漏补缺,讲述的过程会倒逼你:

  1. 把逻辑理清楚,确保"因为"和"所以"之间真的成立;
  2. 发现自己还没搞懂的地方,带着新问题回去再读;
  3. 在他人的追问和质疑中,不断深化理解。

我曾尝试将几本书的内容讲给没时间阅读的朋友听。他们可不会把我当“老师”来尊敬,遇到疑问或不同意见就会随时打断,甚至以把我“问倒”为乐。结果是,我原以为完全看懂的书,被他们一通“胡搅蛮缠”后,发现竟然还有那么多没吃透的地方,只能回去重读。下一次见面时,我必须把他们的质疑解释清楚。但也正因如此,那几本书成了我书架上理解最透彻、收获最大的书。

这里的讲述不是单方面的课堂宣讲,而是面对面的平等讨论、寻找高质量的对话。如果对话者水平高、讨论深入,效果极佳。在如今,你甚至可以把逻辑推理能力较强的 AI 工具当作你的“讨论搭子”,让它对你的观点进行提问和反驳,以此来迫使自己真正透彻地掌握知识。

3. 读书"三不要"

第一“不要”:不要怀揣哀怨心态,避免读书目的被异化

不要有哀怨心态,被哀怨情绪控制,就失去了读书的平常心和客观理解力。

读书多不等于人才,未提供社会价值则难致富。若因此怨天尤人,读书将异化为排解情绪与博取关注的工具。

一个人一旦被哀怨情绪控制,就会彻底失去读书的平常心和客观理解力。

  • 警惕“价值转化”的幻觉:有些人确实读了不少书,说起话来头头是道,也时常能得到他人的赞许。这容易让人产生一种幻觉,自认是个“被埋没的人才”。但实际上,读书多不等于人才,真正的财富来源于你能否为别人提供有价值的商品或服务。得到别人的口头赞许,与让别人掏钱买你的服务之间,有着巨大的鸿沟。

  • 警惕心态失衡与怨天尤人:当自诩为“人才”却迟迟未能发家致富时,很多人不会反思自己是否创造了真正的社会价值,而是将原因归咎于外界,静等着“伯乐”来发掘。当看到身边不读书的人纷纷买车买房时,这种着急就会演变成气急败坏、鄙夷与哀怨,甚至觉得“社会太不公平”。

  • 防止阅读初衷的异化:这是最致命的一点。当怨气占据大脑,读书对于这类人来说,就不再是客观接受信息、理解世界的方式了,而是沦为了一种排解郁闷、打发时间的消极手段。他们的关注点会从书本内容彻底转移到别人的眼光上,内心的潜台词变成了表演:“你们还没看到我刻苦读书的身姿吗?还不承认我是个人才吗?还不提高我的收入吗?”

第二“不要”:不要玩物丧志,陷入对物理媒介的过度迷恋

不要玩物丧志,过度沉溺书籍细节与附属品会导致“玩物丧志”。若读书脱离获取信息的目的,则难以在知识学问上有所成就。

  • 回归阅读的本质:读书的核心目的是为了获取信息、汲取知识,而不是为了把玩那一束装订起来的纸张。随着阅读的深入,很多人容易沉溺于书籍带来的附加体验(如纸张的手感、油墨的香气、版本的考究)。这种对物理形态的偏好可以理解,但必须有所节制,一旦喧宾夺主,甚至因此拒绝更高效的媒介,就是南辕北辙了。

  • 顺应媒介演进的效率趋势,时代趋势不可逆:纵观历史,从丝绸、竹简到纸张,再到如今的电子书,信息媒介的演进始终朝着“更低成本、更高效率”的方向发展。在信息时代,电子书在便携性、易储性、内容可检索性(如一键全文搜索)以及知识共享方面,拥有纸质书无法比拟的优势,这对于快速定位关键信息、构建个人知识树而言是极大的助力。

  • 警惕被“旧习惯”绑架:很多抗拒电子书的人,强调的种种理由其实与“读书”本身关系不大,更多是不愿改变旧有的阅读习惯,不愿放弃读书以外的把玩乐趣。为了坚持这种旧习惯,而不惜牺牲信息流转和获取的效率,这在信息爆炸的时代是得不偿失的。

  • 积极拥抱新媒介的红利:真正以求知为目的的人,从来都会积极拥抱新的传播工具。在这个时代,固守传统媒介的人获取知识的成本会越来越高、效率越来越低;而愿意接纳新媒介的阅读者,则能以更轻松、愉快的方式,获取最丰沛的知识。

第三“不要”:不要只读书不知现实,避免知识结构陷入“真空”

书籍仅承载极少知识,大量隐性知识存于现实社会。只读书会导致知识结构缺陷,难以应对实务,故不可脱离现实。

书本知识只是认识世界的一小部分,脱离现实的纯粹阅读,会导致知识结构的严重扭曲。

  • 认清书籍的局限性:知识以各种方式存在于社会的各个角落,书籍所承载的仅仅是世界知识总量中极小的一部分。由于书籍要求书面化、系统且连贯,它必然无法记录下大量不稳定、转瞬即逝、碎片化或难以用语言明确表达的知识。

  • 重视庞大的“隐性知识”:在现实社会中,存在着诸如谈话交流、个人经验、行为方式、商业模式及人际关系等海量的非书本知识。如果一个人只是一味读书而极少参与社会实践,就会完全错失这部分在数量上更为庞大的知识宝库,导致知识结构出现重大缺陷。

  • 警惕脱离现实的“扭曲认知”:如果只读书而不参与社会实践,会导致知识结构存在重大缺陷,在处理现实事务时会暴露无遗。在数学、计算机或棋类等高度抽象、无需太多社会经验的领域,仅凭逻辑推演确实可以成就“少年天才”。但真实世界的绝大多数领域(如法律、商业、服务业等)极度依赖从业者的社会经验和现实感。只读书不仅会造成处理实际事务时能力低下,更会以一小部分取代整体,形成对真实世界的扭曲认知。仅靠抽象逻辑是无法解决复杂现实问题的,这也是为什么世界上会有15岁的黑客,却绝不会有15岁的人事经理或法官。

4. 让书籍成为连接自我与现实的桥梁

读书从来不是为了把自己变成一个装满各类观点的“两脚书橱”,而是为了升级我们思考现实、解决问题的“底层操作系统”。

无论是坚持“三要”(掌握方法、构建体系、检验真知),还是警惕“三不要”(拒绝异化、拥抱高效、扎根现实),最终的指向都是同一个:打破书本与现实的壁垒,让知识真正为你所用。 在获取信息门槛越来越低的今天,独立思考和将知识转化为实际价值的能力愈发珍贵。

愿我们都能带着平常心去阅读,在书中观摩大师的智慧,在现实中创造真实的价值,享受纯粹而充实的悦读时光。

',42)])])}const u=o(e,[["render",i]]);export{d as __pageData,u as default}; diff --git a/assets/growth_reading-tips.md.BGZRgwwj.lean.js b/assets/growth_reading-tips.md.DvPd5P4v.lean.js similarity index 96% rename from assets/growth_reading-tips.md.BGZRgwwj.lean.js rename to assets/growth_reading-tips.md.DvPd5P4v.lean.js index bb0bbf3..331c149 100644 --- a/assets/growth_reading-tips.md.BGZRgwwj.lean.js +++ b/assets/growth_reading-tips.md.DvPd5P4v.lean.js @@ -1 +1 @@ -import{_ as o,c as a,o as r,d as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","frontmatter":{"date":"2025-03-06T11:42:20.000Z","title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png","permalink":"/growth/reading-tips","sticky":1,"top":true,"categories":["悦读时光"],"tags":["悦读时光"]},"headers":[],"relativePath":"growth/reading-tips.md","filePath":"30.悦读时光/10.读书三要三不要.md"}'),e={name:"growth/reading-tips.md"};function i(n,t,s,p,g,h){return r(),a("div",null,[...t[0]||(t[0]=[l("",42)])])}const u=o(e,[["render",i]]);export{d as __pageData,u as default}; +import{_ as o,c as a,o as r,d as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","frontmatter":{"date":"2025-03-06T11:42:20.000Z","title":"读书“三要”和“三不要”","description":"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png","permalink":"/growth/reading-tips","sticky":1,"top":true,"categories":["悦读时光"],"tags":["悦读时光"]},"headers":[],"relativePath":"growth/reading-tips.md","filePath":"30.悦读时光/10.读书三要三不要.md"}'),e={name:"growth/reading-tips.md"};function i(n,t,s,p,g,h){return r(),a("div",null,[...t[0]||(t[0]=[l("",42)])])}const u=o(e,[["render",i]]);export{d as __pageData,u as default}; diff --git a/assets/index.md.BX5o6LIJ.js b/assets/index.md.6JFvWEIq.js similarity index 99% rename from assets/index.md.BX5o6LIJ.js rename to assets/index.md.6JFvWEIq.js index 9d72a84..cb8a39b 100644 --- a/assets/index.md.BX5o6LIJ.js +++ b/assets/index.md.6JFvWEIq.js @@ -1 +1 @@ -import{f as n,p as o,q as s,c as l,o as c,a,e as r,t as d,u as g}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h={id:"hero-text",style:{display:"inline-block",position:"relative"}},m={style:{color:"var(--vp-c-brand)",position:"absolute","z-index":"-1",top:"1em",left:"0.2em",width:"calc(100% - 0.7em)",height:"auto"},width:"240",height:"11",viewBox:"0 0 240 11",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},k=JSON.parse('{"title":"首页","titleTemplate":":title | Insight Stack Blog","description":"","frontmatter":{"layout":"home","title":"首页","titleTemplate":":title | Insight Stack Blog","tk":{"teekHome":true,"features":[{"stage":"洞察引擎","stageEn":"Collect","icon":"cloud-download","desc":"优质资讯自动抓取、前沿技术追踪、开源项目挖掘","items":[{"title":"Daily AI Insight Engine","details":"旨在解决信息过载问题,打造自动聚合、深度解读、洞见提取的 AI 引擎。覆盖学术论文、技术博客、科技媒体、社区讨论四大信息源,支持中英文双语。","link":"/insight-labs/ai-insight-engine","tags":["Automation","Agent"]},{"title":"Repo Insight Engine","details":"AST 与大模型结合的 GitHub 源码架构分析利器,将碎片化的源码阅读转化为系统性的技术理解,用来帮助开发者快速理解项目架构、功能模块、代码质量等。","link":"/insight-labs/repo-insight/overview","tags":["AST","LLM","Agent","Code Analysis"]}]},{"stage":"知识内化","stageEn":"Knowledge","icon":"brain","desc":"碎片洞察 → 原子笔记 → 概念网络,每一条笔记都在为认知复利加速。","items":[{"title":"AI 驱动的体系化知识库建设","details":"LLM Wiki + Library 双轨制知识管理规范,融合卡片盒笔记法、Obsidian、AI 等,构建可持续演化的个人知识网络。将 AI 引擎的碎片洞察转化为节点,通过卡片盒笔记法编织概念网络,实现从信息到知识的跃迁。","link":"/insight-labs/overview","tags":["Obsidian","Zettelkasten","Knowledge Engineering"],"featured":true}]},{"stage":"孵化","stageEn":"Create","icon":"rocket","desc":"内容创作输出、工具产品孵化、技术品牌建设","items":[]}]},"hero":{"name":"Insight Stack Blog","text":"AI & 全栈技术 & 产品思考与成长记录","tagline":"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量","actions":[{"theme":"brand","text":"关于我","link":"/about/me"},{"theme":"alt","text":"资源推荐","link":"/growth/sites"},{"theme":"alt","text":"书籍推荐","link":"/growth/books"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),u={name:"index.md"},f=n({...u,setup(p){const{frontmatter:i}=o();return s(()=>{const t=document.querySelector(".VPHero .text"),e=document.querySelector("#hero-text");if(!(!t||!e)){for(;t.lastChild;)t.lastChild.remove();t.append(e)}}),(t,e)=>(c(),l("div",null,[a("span",h,[r(d(g(i).hero.text)+" ",1),(c(),l("svg",m,[...e[0]||(e[0]=[a("path",{d:"M20.766 10.187c.939-.024.386-.885.552-1.401 1.105-.301.553.626.962 1.061.685-.263 1.171-1.1 1.696-1.085.044.144.15.191.044.378.697-.736 2.21-.134 2.995-1.052a.55.55 0 0 1 .127.215 3.35 3.35 0 0 1-.204-1.204c.42-.034.751-.593.94 0-.255 0-.266.23-.377.416l.426-.273c.448.813-.586.316-.553.927.84-.306 1.802-1.037 2.476-.831.182.803-1.525.339-.608 1.023l-1.033-.268c.85 1.248-.625-.057.171 1.276 1.348.177 1.47-.478 2.818-.3.276-.479-.132-.66.144-1.124 1.857-.885 1.602 1.984 2.94.846.337-.555.42-1.582 1.442-1.08l-.276.889c1.298.038.668-1.348 2.06-.784-.226.368-1.005.344-.8.444.917.689.59-.545 1.27-.569l.16.827c1.371-.181 2.863-.827 4.388-1.037-.072.249-.326.512.044.746 1.912-.478 4.123-.058 6.007.368l.68-.727c.05.015.095.04.132.074a.275.275 0 0 1 .077.118c.014.044.015.091.004.136a.27.27 0 0 1-.07.122c.74.243 0-.445.354-.732.414-.062.552.383.315.603 1.248-.636 3.586-1.401 4.973-.694l-.254.22c1.06.249 1.105-1.477 2.127-.855l-.182.129c2.293.23 4.785-.478 6.564.52.293-1.017 2.272.393 2.365-1.022 1.327.664.967.927 2.813 1.348.492.052.702-.899 1.299-1.061l.044.731.79-.794.47.87.552-.205a.66.66 0 0 1-.332-.2.517.517 0 0 1-.132-.33c.873-.354 2.177.477 2.21.831l2.078-.679c-.039.301-.387.411-.657.607 1.105-.779.226.77 1.232.053-.144-.163.06-.44.077-.588.553.435 1.691.416 2.547.205l-.149.512c1.558.1 3.271-.31 5.018-.335-.636-.224-.514-1.109 0-1.204l.226.774c.32-.478-.552-.282.122-.884.652.076.464.875.094 1.138l.784-.287c.056.23-.127.358-.165.655.309-.478 1.387.75 1.834-.096l.05.23c1.746-.03 2.53-.316 3.95-.383 0-.674.553-.535.984-1.085 1.05.196 2.21.707 3.482.63.878-.343.243-.568.635-.955.077.612 1.332.535.69.985a15.353 15.353 0 0 0 3.83-.68c-.21-.243-.447-.353-.331-.563a.738.738 0 0 1 .275.01c.09.02.173.058.245.11a.58.58 0 0 1 .169.188c.04.072.061.151.062.232l-.088.067c2.127-.956 4.973 1.706 6.669.41l-.099.068 1.763-.684c.817.1-.481.478.127.842 1.9-1.043 3.022.12 4.586-.574 1.243 1.793 4.327-.167 5.979.956l-.1-.42c.426-.421.52.234.835.33-.05-.33-.464-.378-.205-.613 3.598-.545 7.438.598 11.129.956 1.348.11.757-2.203 2.465-1.195l-.481.794c2.719-.956 5.564 0 8.233-.77-.154.182-.16.416-.425.416.552.574 2.083.034 2.094-.435.42.053.1.425.354.665.552.339 1.42-.732 1.718-.158.05.09-.16.186-.265.23.37-.278 1.719.076 1.365-.589 1 .32 1.917-.287 2.713.105.553-.736 1.713.364 1.884-.683-.077 1.08 1.752.875 2.387.377-.215.326.553.345.299.794.718 0 1.381-.206 1.265-.76 1.315 1.305 2.686-1.018 3.415.645a45.888 45.888 0 0 1 6.078-1.17c-.082 1.075-2.138.09-2.066 1.218 1.834-.425 2.906-1.343 4.719-1.066.47.153-.276.478-.437.65 1.835-.43 3.537.148 5.172-.42 0 .1-.182.21-.348.291.321-.033.741.167.713-.325l-.315.13c-.497-.718 1.304-1.468 1.365-1.841-.553 1.396 1.602.377.707 2.137a.73.73 0 0 0 .337-.263.58.58 0 0 0 .1-.383c.315.1.409.297.083.665 1.155-.254.757-.78 1.801-.75 0 .233-.221.324-.337.601.553-.478 1.078-.908 1.951-.697-.056.143.044.33-.216.325 1.509-.048 2.603-1.195 4.249-.722-.513 1.023.553.349.625 1.243l.895-.254-.348-.44c.785.034 1.492-.602 2.155-.296l-.591.354 1.47-.139-.824-.354c.807-.444-.055-1.132.978-.86-.21.086.785.029 1.177.56.398-.278.801-.57 1.376-.335.138.291-.149.984-.055 1.176.398-.736 1.834-.168 2.337-.956-.143.227-.192.49-.138.745l.337-.597c.359.2.409.296.337.669 1.105.134-.309-1.138.967-.626-.105.048-.055.138-.27.23 1.287.277 2.519-.335 3.702 0 .326.903-1.05.195-.669.955 1.724-.129 3.592-.999 5.25-.74l-.31-.106c.277-1.262 1.221.66 2.083.086-.21.086-.298.693-.237.555 1.105.234 2.343-.249 4.083-.603l-.226.32c.657.311 1.763.216 2.481.383.226-.315.641-.253.403-.731 2.166 1.912 4.305-.89 6.228.726-.238 0-.553.268-.387.273l1.702-.244c-.111-.554-.21-.34-.553-.784.124-.163.292-.298.489-.392.198-.094.419-.145.644-.148-.774.34-.028.884.287 1.205-.049-.173.072-.354.05-.526.846 1.008.199-1.11 1.376-.407l-.077.287c.458-.134.889-.478 1.37-.401.177.645-.492.282-.552.803.685 0 1.403-1.162 1.994-.507-.298.167-.718.158-1.016.325.641.77.729.583 1.221.717h-.044l1.138.378-.282-.21c.928-1.635 1.752-.25 2.951-1.3-1.166.994-.21.592-.332 1.309.288.21.724.454.586.65.553-.564.89.478 1.696-.34 0 .235.581.044.431.627.713-.163-.149-.411-.077-.703 1.133-.76 2.514 1.061 4.139.029 1.376-.397 1.658-1.171 2.94-1.515.403.392-.393.836-.393.836.267.161.581.255.906.27a1.97 1.97 0 0 0 .934-.184c-.138.196 0 .373.172.64.519-.038.386-.831 1.05-.477a3.24 3.24 0 0 1-.553.918c.619-.192 1.243-.603 1.884-.79.149.412-.409.603-.646.856.718-.153 1.851-.296 2.105-.927l-.442-.248c.26 0 .105.559-.094.669-.63.478-.862-.258-.884-.478l.459-.134c-.387-1.382-1.818.148-2.719.033l.431-.956-.973.784c-.182-.263-.287-.822.166-.956-.624-.516-.591.33-1.105-.239-.055-.086-.028-.134.033-.172l-.646.273c.132-.201-.072-.703.309-.545-1.105-.617-1.873.674-2.26-.096l.099-.057c-1.596.272-.193.721-1.414 1.534l-.713-1.83-.188.721c-.16-.033-.481-.1-.409-.387-.63.478.089.32-.287.78-.752-.699-2.172.229-2.293-.957-.31.545.729.478-.127.813-.183-1.258-.978.181-1.658-.416.254-.636.917-.273.226-.875-.486 1.076-1.386-.282-2-.096-.066.87-1.332.32-2.354.579.078-.292-1.89-.54-2.818-.885l.033-.148c-.221.87-1.182.674-1.901.832a.906.906 0 0 1 .132-.55c.102-.169.258-.31.449-.406h-.669a.979.979 0 0 1-.34.327 1.167 1.167 0 0 1-.478.151l.194-.65c-.885 0-1.813.712-2.94.244-.083.607.84 1.725-.381 2.103-.034-.335-.056-.899.27-1.028-.105.043-.381.263-.585.12l.502-.545c-.508-.258-.287.478-.701.397 0-.478-.293-.35-.221-.722.11-.038.359.205.525 0a1.931 1.931 0 0 1-.691-.264 1.649 1.649 0 0 1-.503-.487c.028.268-.028.636-.37.684-.89 0-.282-.574-.79-.832-.227.325-.78-.033-.824.674-.259 0-.293-.34-.387-.535-.469.3-2.149.033-1.657.793l.116.053s-.05 0-.078.033c-1.525.66-3.105-.478-4.608-.224V3.34c-.895.244-1.984.106-2.636.593a.711.711 0 0 1-.402-.28.553.553 0 0 1-.084-.442c-.691.158-.774.416-1.746 0 .701-.396-.221-.373.713-.287-.879-.224-1.067-.607-2.039 0 .342-.597-.641-.774-1.067-.602l.608.445c-.436.053-.88.039-1.31-.043l.254-.794c-1.784-1.004-3.315 1.578-4.647-.067-.497.545.973.411.553 1.052-.829-.124-1.658-1.286-1.929-1.29-1.132-.479-1.105 1.137-2.282.812a.818.818 0 0 1 .031.774.938.938 0 0 1-.264.323 1.11 1.11 0 0 1-.397.198c-.829-.124-.994-1.214-.464-1.434.205 0 .299.072.288.168.27-.096.629-.21.303-.526l-.116.282c-.403-.297-1.552-.292-1.271-.75-.635.257-.281.477.183.616-1.061-.435-1.658-.053-2.763-.344.171.162.326.478.155.478-1.608-.378-.724.526-1.824.636-.608-.445.249-1.033-.862-.684-.668-.306-.127-.755.149-.985-1.016.536-1.867-.387-2.442-.478l.553-.22a1.892 1.892 0 0 1-.846.12l.293.573c-.309-.105-.553-.11-.553-.348-.326.368.227.956-.42 1.434-.403-.297-1.265.286-1.392-.478 1.298.272-.127-.76.978-.866a1.102 1.102 0 0 1-.851.024c-.044-.086.044-.157.133-.2-1.233-.689-.592.846-1.879.807.171-.42-.287-.808-.497-.721.519 0 .237.712-.249 1.027-.823-.34-.906.235-1.337.187l.491.162c-.176.426-.585.364-1.165.478-.045-.33.524-.22.326-.368-.652.736-1.437-.793-2.338-.306-.409-.291-.027-.798-.387-.999-1.011.54-1.077-.588-2.133-.148.293.574.349.435-.403.985l1.735-.387-1.105.822c.525 0 1.105-.35 1.42-.249-.553.478-.481.316-.238.794-.701-.86-1.425.478-2.21-.1l.044-1.41c-1.232-.641-2.21.702-3.823.334l.513.248c-.221.56-.994.072-1.519.292.055-.478-.271-.645-.492-.956.028.349-1.177-.043-1.337.899l-.707-.627c-1.305-.267-1.503 1.33-2.763 1.157.381-.507-.183-.846.657-1.21-.414 0-.79-.095-.801.23-.276-.263-1.199.646-1.575.215-.182.206-.243.698-.713.655a.337.337 0 0 1 0-.234c0 .234-.735.31-.331.837-1.271-1.478-3.592.095-4.708-1.172-.936.165-1.883.277-2.835.335.05-.139 0-.234.16-.186-1.143-.44-.707 1.352-2.005.86-.664-.765.69-.411.276-.703-.171-1.553-1.564.21-2.437-.702l.21-.091c-.663-.555-1.608.564-2.713.454a.326.326 0 0 0 0-.234c-.746.784-2.155 1.051-3.205 1.271.326-.607.475-.32.276-.956-.47.091.138.99-.801 1.167-.304-.33-.984-.622-1.078-1.282l.89-.019c-.459-.85-1.149.034-1.613-.114l.055-.368c-1.36.124-1.376 1.06-2.835.999l.155.282c-.796.956-.674-.521-1.465.172l-.248-.956c-.871.453-1.797.82-2.763 1.094.552-.698 1.658-1.06 2.315-1.477-.519 0-1.774.072-2.044.54.21-.09.475-.325.685-.181a2.832 2.832 0 0 1-1.094.83 3.298 3.298 0 0 1-1.42.27c.171-1.832-2.713-.455-3.482-1.865-1.834.693-3.652-.258-5.796-.13.774 1.435-.625.049-.481 1.507-.497.1-.685.076-.729 0l-1.525-.86c-.365-.421.469-.326.42-.65-1.106-.106-.465-.618-1.194-1 .155.521-.37.75-1 .56l.901.659c-1.52.793-1.338-1.214-2.868-.43l.48-.478c-.79.277-2.917 0-3.674 1.204-.144-.167-.332-.564 0-.674-1.89-.148-4.183 1.31-5.664.612l.138-.358c-.348.105-.602.678-1.05.325 0-.148.138-.359 0-.378-.182.124-.923.64-1.392.44l.386-.411c-1.85-.44-2.807 1.023-4.343 1.29 0-1.051-1.475-1.376-2.21-1.53V.685c-2.15-.086-3.625.956-5.598 1.4-1.265-1.118-4.188-.392-6.194-.99.31.182 0 .818-.37.957-.475-.206-1.266.755-1.221-.21h.165c-.375-.957-1.326-.67-2.072-.675l-.083 1.267c-2.006-1.778-5.106.813-6.227-.803-.459.33-1.045.34-1.498.67v-.68a12.396 12.396 0 0 0-3.575 0l.31-.478c-.912 0-1.072 1.98-1.912 2.042l-.288-1c-1.591.053-3.232-.774-4.763.192 0-.148.055-.445.31-.478-.746 0-2.918-.588-2.587.788-.06-.903-1.657-.038-2.48.388l.104-.689c-.685.875-.701 1.11-1.696 1.377-.243-.076-.238-.526.088-.368-.812-.32-.59.655-1.574.33l.342-.435c-.823-.029-.746.2-1.177.707-.503.287-1.564-.114-1.713-.712-.094.368-.52.875-1.011.717a.38.38 0 0 1 .013-.245.442.442 0 0 1 .164-.2c-1.393-.406-2 .851-2.973.235a.553.553 0 0 0-.182-.392 9.431 9.431 0 0 1 1.89.028c0-.616-.912-.688-.255-1.563-.685.478-1.845 1.54-2.713 1.286a.84.84 0 0 1-.1-.215l.061-.072a.668.668 0 0 0-.295 0 .61.61 0 0 0-.257.125 1.992 1.992 0 0 0-.718-.158c-.128-.507-1.023-.234-1.465-.244.072.67-.508.583.06 1.119-.07-.048.078-.086.366-.125a.528.528 0 0 0 .188-.076l-.028.062c.287-.033.663-.062 1.105-.09-.332.358-.68.654-1.183.3-.204.445-.43.894-.552 1.11-.647-.914-1.83-1.377-2.022-1.946-1.321.43-3.145.368-3.918 1.663-.376.177-.459-.344-.614-.535.216-.139.476-.13.586-.316-.74.354-2.249.216-2.381 1.105-.984-.364.491-.837-.818-.636l.166-.277c-2.675-1.291-4.09 2.433-7.068.755.204.105.304.148.354.296-3.316-.645-6.709 1.038-10.018-.062-.94-.205-1 .359-1.531.818l-.249-.713-.906.88c-1.315.679-2.47-1.65-4.117-.411l.254.478c-.624-.058-1.939.387-1.873-.177-.055.09-.166.516-.425.272l-.044-.372-1.487.712c-1.199-.215.078-1.506-1.658-1.492C.895 5.105-.22 6.114.04 6.362c.178.01.347.073.478.179a.645.645 0 0 1 .24.4l-.558.225C.17 8.279-.194 9.44 1.304 10.144l.917-.732.36.521-.818.1c.513.479.784 0 1.105-.305.07.225.233.42.458.55l.907-1.114c.149.43-.376.884.292 1.094.426-.516-.502-.956.233-1.314.513.478.403.898.933.44a.447.447 0 0 1 .012.336.525.525 0 0 1-.233.27c.476-.367 1.304-.214 1.525-.817.553.598 1.658-.248 1.691.808.29-.433.74-.77 1.277-.956-.752 1.3 1.724 0 1.591 1.348.553-1.162 2.21-.617 3.255-1.3-.055.095-.16.282-.265.23.624.061.823.391 1.237.592 0-.956.967-1.195 1.448-1.797.812.87-.392 1.118-.1 1.974-.082-.755 1.272-.813.973-1.434.614.53.514.248.862 1.008.028-1.17.553-.22.962-.956.873.54.282 1.086 1.182.689.453.354-.342.808-.342.808Zm21.793-2.93-.447.057.447-.058Zm1.818-.091a7.552 7.552 0 0 0-.801 0c-.072-.23 0-.478.171-.478-.083.186.348.305.63.478Zm-4.128-4.49c.288-.109.393 0 .442.159-.172.02-.343.053-.508.1v.081a.973.973 0 0 1 .066-.34Z"},null,-1)])]))])]))}});export{k as __pageData,f as default}; +import{f as n,p as o,q as s,c as l,o as c,a,e as r,t as d,u as g}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h={id:"hero-text",style:{display:"inline-block",position:"relative"}},m={style:{color:"var(--vp-c-brand)",position:"absolute","z-index":"-1",top:"1em",left:"0.2em",width:"calc(100% - 0.7em)",height:"auto"},width:"240",height:"11",viewBox:"0 0 240 11",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},k=JSON.parse('{"title":"首页","titleTemplate":":title | Insight Stack Blog","description":"","frontmatter":{"layout":"home","title":"首页","titleTemplate":":title | Insight Stack Blog","tk":{"teekHome":true,"features":[{"stage":"洞察引擎","stageEn":"Collect","icon":"cloud-download","desc":"优质资讯自动抓取、前沿技术追踪、开源项目挖掘","items":[{"title":"Daily AI Insight Engine","details":"旨在解决信息过载问题,打造自动聚合、深度解读、洞见提取的 AI 引擎。覆盖学术论文、技术博客、科技媒体、社区讨论四大信息源,支持中英文双语。","link":"/insight-labs/ai-insight-engine","tags":["Automation","Agent"]},{"title":"Repo Insight Engine","details":"AST 与大模型结合的 GitHub 源码架构分析利器,将碎片化的源码阅读转化为系统性的技术理解,用来帮助开发者快速理解项目架构、功能模块、代码质量等。","link":"/insight-labs/repo-insight/overview","tags":["AST","LLM","Agent","Code Analysis"]}]},{"stage":"知识内化","stageEn":"Knowledge","icon":"brain","desc":"碎片洞察 → 原子笔记 → 概念网络,每一条笔记都在为认知复利加速。","items":[{"title":"AI 驱动的体系化知识库建设","details":"LLM Wiki + Library 双轨制知识管理规范,融合卡片盒笔记法、Obsidian、AI 等,构建可持续演化的个人知识网络。将 AI 引擎的碎片洞察转化为节点,通过卡片盒笔记法编织概念网络,实现从信息到知识的跃迁。","link":"/insight-labs/overview","tags":["Obsidian","Zettelkasten","Knowledge Engineering"],"featured":true}]},{"stage":"孵化","stageEn":"Create","icon":"rocket","desc":"内容创作输出、工具产品孵化、技术品牌建设","items":[]}]},"hero":{"name":"Insight Stack Blog","text":"AI & 全栈技术 & 产品思考与成长记录","tagline":"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量","actions":[{"theme":"brand","text":"关于我","link":"/about/me"},{"theme":"alt","text":"资源推荐","link":"/growth/sites"},{"theme":"alt","text":"书籍推荐","link":"/growth/books"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),u={name:"index.md"},f=n({...u,setup(p){const{frontmatter:i}=o();return s(()=>{const t=document.querySelector(".VPHero .text"),e=document.querySelector("#hero-text");if(!(!t||!e)){for(;t.lastChild;)t.lastChild.remove();t.append(e)}}),(t,e)=>(c(),l("div",null,[a("span",h,[r(d(g(i).hero.text)+" ",1),(c(),l("svg",m,[...e[0]||(e[0]=[a("path",{d:"M20.766 10.187c.939-.024.386-.885.552-1.401 1.105-.301.553.626.962 1.061.685-.263 1.171-1.1 1.696-1.085.044.144.15.191.044.378.697-.736 2.21-.134 2.995-1.052a.55.55 0 0 1 .127.215 3.35 3.35 0 0 1-.204-1.204c.42-.034.751-.593.94 0-.255 0-.266.23-.377.416l.426-.273c.448.813-.586.316-.553.927.84-.306 1.802-1.037 2.476-.831.182.803-1.525.339-.608 1.023l-1.033-.268c.85 1.248-.625-.057.171 1.276 1.348.177 1.47-.478 2.818-.3.276-.479-.132-.66.144-1.124 1.857-.885 1.602 1.984 2.94.846.337-.555.42-1.582 1.442-1.08l-.276.889c1.298.038.668-1.348 2.06-.784-.226.368-1.005.344-.8.444.917.689.59-.545 1.27-.569l.16.827c1.371-.181 2.863-.827 4.388-1.037-.072.249-.326.512.044.746 1.912-.478 4.123-.058 6.007.368l.68-.727c.05.015.095.04.132.074a.275.275 0 0 1 .077.118c.014.044.015.091.004.136a.27.27 0 0 1-.07.122c.74.243 0-.445.354-.732.414-.062.552.383.315.603 1.248-.636 3.586-1.401 4.973-.694l-.254.22c1.06.249 1.105-1.477 2.127-.855l-.182.129c2.293.23 4.785-.478 6.564.52.293-1.017 2.272.393 2.365-1.022 1.327.664.967.927 2.813 1.348.492.052.702-.899 1.299-1.061l.044.731.79-.794.47.87.552-.205a.66.66 0 0 1-.332-.2.517.517 0 0 1-.132-.33c.873-.354 2.177.477 2.21.831l2.078-.679c-.039.301-.387.411-.657.607 1.105-.779.226.77 1.232.053-.144-.163.06-.44.077-.588.553.435 1.691.416 2.547.205l-.149.512c1.558.1 3.271-.31 5.018-.335-.636-.224-.514-1.109 0-1.204l.226.774c.32-.478-.552-.282.122-.884.652.076.464.875.094 1.138l.784-.287c.056.23-.127.358-.165.655.309-.478 1.387.75 1.834-.096l.05.23c1.746-.03 2.53-.316 3.95-.383 0-.674.553-.535.984-1.085 1.05.196 2.21.707 3.482.63.878-.343.243-.568.635-.955.077.612 1.332.535.69.985a15.353 15.353 0 0 0 3.83-.68c-.21-.243-.447-.353-.331-.563a.738.738 0 0 1 .275.01c.09.02.173.058.245.11a.58.58 0 0 1 .169.188c.04.072.061.151.062.232l-.088.067c2.127-.956 4.973 1.706 6.669.41l-.099.068 1.763-.684c.817.1-.481.478.127.842 1.9-1.043 3.022.12 4.586-.574 1.243 1.793 4.327-.167 5.979.956l-.1-.42c.426-.421.52.234.835.33-.05-.33-.464-.378-.205-.613 3.598-.545 7.438.598 11.129.956 1.348.11.757-2.203 2.465-1.195l-.481.794c2.719-.956 5.564 0 8.233-.77-.154.182-.16.416-.425.416.552.574 2.083.034 2.094-.435.42.053.1.425.354.665.552.339 1.42-.732 1.718-.158.05.09-.16.186-.265.23.37-.278 1.719.076 1.365-.589 1 .32 1.917-.287 2.713.105.553-.736 1.713.364 1.884-.683-.077 1.08 1.752.875 2.387.377-.215.326.553.345.299.794.718 0 1.381-.206 1.265-.76 1.315 1.305 2.686-1.018 3.415.645a45.888 45.888 0 0 1 6.078-1.17c-.082 1.075-2.138.09-2.066 1.218 1.834-.425 2.906-1.343 4.719-1.066.47.153-.276.478-.437.65 1.835-.43 3.537.148 5.172-.42 0 .1-.182.21-.348.291.321-.033.741.167.713-.325l-.315.13c-.497-.718 1.304-1.468 1.365-1.841-.553 1.396 1.602.377.707 2.137a.73.73 0 0 0 .337-.263.58.58 0 0 0 .1-.383c.315.1.409.297.083.665 1.155-.254.757-.78 1.801-.75 0 .233-.221.324-.337.601.553-.478 1.078-.908 1.951-.697-.056.143.044.33-.216.325 1.509-.048 2.603-1.195 4.249-.722-.513 1.023.553.349.625 1.243l.895-.254-.348-.44c.785.034 1.492-.602 2.155-.296l-.591.354 1.47-.139-.824-.354c.807-.444-.055-1.132.978-.86-.21.086.785.029 1.177.56.398-.278.801-.57 1.376-.335.138.291-.149.984-.055 1.176.398-.736 1.834-.168 2.337-.956-.143.227-.192.49-.138.745l.337-.597c.359.2.409.296.337.669 1.105.134-.309-1.138.967-.626-.105.048-.055.138-.27.23 1.287.277 2.519-.335 3.702 0 .326.903-1.05.195-.669.955 1.724-.129 3.592-.999 5.25-.74l-.31-.106c.277-1.262 1.221.66 2.083.086-.21.086-.298.693-.237.555 1.105.234 2.343-.249 4.083-.603l-.226.32c.657.311 1.763.216 2.481.383.226-.315.641-.253.403-.731 2.166 1.912 4.305-.89 6.228.726-.238 0-.553.268-.387.273l1.702-.244c-.111-.554-.21-.34-.553-.784.124-.163.292-.298.489-.392.198-.094.419-.145.644-.148-.774.34-.028.884.287 1.205-.049-.173.072-.354.05-.526.846 1.008.199-1.11 1.376-.407l-.077.287c.458-.134.889-.478 1.37-.401.177.645-.492.282-.552.803.685 0 1.403-1.162 1.994-.507-.298.167-.718.158-1.016.325.641.77.729.583 1.221.717h-.044l1.138.378-.282-.21c.928-1.635 1.752-.25 2.951-1.3-1.166.994-.21.592-.332 1.309.288.21.724.454.586.65.553-.564.89.478 1.696-.34 0 .235.581.044.431.627.713-.163-.149-.411-.077-.703 1.133-.76 2.514 1.061 4.139.029 1.376-.397 1.658-1.171 2.94-1.515.403.392-.393.836-.393.836.267.161.581.255.906.27a1.97 1.97 0 0 0 .934-.184c-.138.196 0 .373.172.64.519-.038.386-.831 1.05-.477a3.24 3.24 0 0 1-.553.918c.619-.192 1.243-.603 1.884-.79.149.412-.409.603-.646.856.718-.153 1.851-.296 2.105-.927l-.442-.248c.26 0 .105.559-.094.669-.63.478-.862-.258-.884-.478l.459-.134c-.387-1.382-1.818.148-2.719.033l.431-.956-.973.784c-.182-.263-.287-.822.166-.956-.624-.516-.591.33-1.105-.239-.055-.086-.028-.134.033-.172l-.646.273c.132-.201-.072-.703.309-.545-1.105-.617-1.873.674-2.26-.096l.099-.057c-1.596.272-.193.721-1.414 1.534l-.713-1.83-.188.721c-.16-.033-.481-.1-.409-.387-.63.478.089.32-.287.78-.752-.699-2.172.229-2.293-.957-.31.545.729.478-.127.813-.183-1.258-.978.181-1.658-.416.254-.636.917-.273.226-.875-.486 1.076-1.386-.282-2-.096-.066.87-1.332.32-2.354.579.078-.292-1.89-.54-2.818-.885l.033-.148c-.221.87-1.182.674-1.901.832a.906.906 0 0 1 .132-.55c.102-.169.258-.31.449-.406h-.669a.979.979 0 0 1-.34.327 1.167 1.167 0 0 1-.478.151l.194-.65c-.885 0-1.813.712-2.94.244-.083.607.84 1.725-.381 2.103-.034-.335-.056-.899.27-1.028-.105.043-.381.263-.585.12l.502-.545c-.508-.258-.287.478-.701.397 0-.478-.293-.35-.221-.722.11-.038.359.205.525 0a1.931 1.931 0 0 1-.691-.264 1.649 1.649 0 0 1-.503-.487c.028.268-.028.636-.37.684-.89 0-.282-.574-.79-.832-.227.325-.78-.033-.824.674-.259 0-.293-.34-.387-.535-.469.3-2.149.033-1.657.793l.116.053s-.05 0-.078.033c-1.525.66-3.105-.478-4.608-.224V3.34c-.895.244-1.984.106-2.636.593a.711.711 0 0 1-.402-.28.553.553 0 0 1-.084-.442c-.691.158-.774.416-1.746 0 .701-.396-.221-.373.713-.287-.879-.224-1.067-.607-2.039 0 .342-.597-.641-.774-1.067-.602l.608.445c-.436.053-.88.039-1.31-.043l.254-.794c-1.784-1.004-3.315 1.578-4.647-.067-.497.545.973.411.553 1.052-.829-.124-1.658-1.286-1.929-1.29-1.132-.479-1.105 1.137-2.282.812a.818.818 0 0 1 .031.774.938.938 0 0 1-.264.323 1.11 1.11 0 0 1-.397.198c-.829-.124-.994-1.214-.464-1.434.205 0 .299.072.288.168.27-.096.629-.21.303-.526l-.116.282c-.403-.297-1.552-.292-1.271-.75-.635.257-.281.477.183.616-1.061-.435-1.658-.053-2.763-.344.171.162.326.478.155.478-1.608-.378-.724.526-1.824.636-.608-.445.249-1.033-.862-.684-.668-.306-.127-.755.149-.985-1.016.536-1.867-.387-2.442-.478l.553-.22a1.892 1.892 0 0 1-.846.12l.293.573c-.309-.105-.553-.11-.553-.348-.326.368.227.956-.42 1.434-.403-.297-1.265.286-1.392-.478 1.298.272-.127-.76.978-.866a1.102 1.102 0 0 1-.851.024c-.044-.086.044-.157.133-.2-1.233-.689-.592.846-1.879.807.171-.42-.287-.808-.497-.721.519 0 .237.712-.249 1.027-.823-.34-.906.235-1.337.187l.491.162c-.176.426-.585.364-1.165.478-.045-.33.524-.22.326-.368-.652.736-1.437-.793-2.338-.306-.409-.291-.027-.798-.387-.999-1.011.54-1.077-.588-2.133-.148.293.574.349.435-.403.985l1.735-.387-1.105.822c.525 0 1.105-.35 1.42-.249-.553.478-.481.316-.238.794-.701-.86-1.425.478-2.21-.1l.044-1.41c-1.232-.641-2.21.702-3.823.334l.513.248c-.221.56-.994.072-1.519.292.055-.478-.271-.645-.492-.956.028.349-1.177-.043-1.337.899l-.707-.627c-1.305-.267-1.503 1.33-2.763 1.157.381-.507-.183-.846.657-1.21-.414 0-.79-.095-.801.23-.276-.263-1.199.646-1.575.215-.182.206-.243.698-.713.655a.337.337 0 0 1 0-.234c0 .234-.735.31-.331.837-1.271-1.478-3.592.095-4.708-1.172-.936.165-1.883.277-2.835.335.05-.139 0-.234.16-.186-1.143-.44-.707 1.352-2.005.86-.664-.765.69-.411.276-.703-.171-1.553-1.564.21-2.437-.702l.21-.091c-.663-.555-1.608.564-2.713.454a.326.326 0 0 0 0-.234c-.746.784-2.155 1.051-3.205 1.271.326-.607.475-.32.276-.956-.47.091.138.99-.801 1.167-.304-.33-.984-.622-1.078-1.282l.89-.019c-.459-.85-1.149.034-1.613-.114l.055-.368c-1.36.124-1.376 1.06-2.835.999l.155.282c-.796.956-.674-.521-1.465.172l-.248-.956c-.871.453-1.797.82-2.763 1.094.552-.698 1.658-1.06 2.315-1.477-.519 0-1.774.072-2.044.54.21-.09.475-.325.685-.181a2.832 2.832 0 0 1-1.094.83 3.298 3.298 0 0 1-1.42.27c.171-1.832-2.713-.455-3.482-1.865-1.834.693-3.652-.258-5.796-.13.774 1.435-.625.049-.481 1.507-.497.1-.685.076-.729 0l-1.525-.86c-.365-.421.469-.326.42-.65-1.106-.106-.465-.618-1.194-1 .155.521-.37.75-1 .56l.901.659c-1.52.793-1.338-1.214-2.868-.43l.48-.478c-.79.277-2.917 0-3.674 1.204-.144-.167-.332-.564 0-.674-1.89-.148-4.183 1.31-5.664.612l.138-.358c-.348.105-.602.678-1.05.325 0-.148.138-.359 0-.378-.182.124-.923.64-1.392.44l.386-.411c-1.85-.44-2.807 1.023-4.343 1.29 0-1.051-1.475-1.376-2.21-1.53V.685c-2.15-.086-3.625.956-5.598 1.4-1.265-1.118-4.188-.392-6.194-.99.31.182 0 .818-.37.957-.475-.206-1.266.755-1.221-.21h.165c-.375-.957-1.326-.67-2.072-.675l-.083 1.267c-2.006-1.778-5.106.813-6.227-.803-.459.33-1.045.34-1.498.67v-.68a12.396 12.396 0 0 0-3.575 0l.31-.478c-.912 0-1.072 1.98-1.912 2.042l-.288-1c-1.591.053-3.232-.774-4.763.192 0-.148.055-.445.31-.478-.746 0-2.918-.588-2.587.788-.06-.903-1.657-.038-2.48.388l.104-.689c-.685.875-.701 1.11-1.696 1.377-.243-.076-.238-.526.088-.368-.812-.32-.59.655-1.574.33l.342-.435c-.823-.029-.746.2-1.177.707-.503.287-1.564-.114-1.713-.712-.094.368-.52.875-1.011.717a.38.38 0 0 1 .013-.245.442.442 0 0 1 .164-.2c-1.393-.406-2 .851-2.973.235a.553.553 0 0 0-.182-.392 9.431 9.431 0 0 1 1.89.028c0-.616-.912-.688-.255-1.563-.685.478-1.845 1.54-2.713 1.286a.84.84 0 0 1-.1-.215l.061-.072a.668.668 0 0 0-.295 0 .61.61 0 0 0-.257.125 1.992 1.992 0 0 0-.718-.158c-.128-.507-1.023-.234-1.465-.244.072.67-.508.583.06 1.119-.07-.048.078-.086.366-.125a.528.528 0 0 0 .188-.076l-.028.062c.287-.033.663-.062 1.105-.09-.332.358-.68.654-1.183.3-.204.445-.43.894-.552 1.11-.647-.914-1.83-1.377-2.022-1.946-1.321.43-3.145.368-3.918 1.663-.376.177-.459-.344-.614-.535.216-.139.476-.13.586-.316-.74.354-2.249.216-2.381 1.105-.984-.364.491-.837-.818-.636l.166-.277c-2.675-1.291-4.09 2.433-7.068.755.204.105.304.148.354.296-3.316-.645-6.709 1.038-10.018-.062-.94-.205-1 .359-1.531.818l-.249-.713-.906.88c-1.315.679-2.47-1.65-4.117-.411l.254.478c-.624-.058-1.939.387-1.873-.177-.055.09-.166.516-.425.272l-.044-.372-1.487.712c-1.199-.215.078-1.506-1.658-1.492C.895 5.105-.22 6.114.04 6.362c.178.01.347.073.478.179a.645.645 0 0 1 .24.4l-.558.225C.17 8.279-.194 9.44 1.304 10.144l.917-.732.36.521-.818.1c.513.479.784 0 1.105-.305.07.225.233.42.458.55l.907-1.114c.149.43-.376.884.292 1.094.426-.516-.502-.956.233-1.314.513.478.403.898.933.44a.447.447 0 0 1 .012.336.525.525 0 0 1-.233.27c.476-.367 1.304-.214 1.525-.817.553.598 1.658-.248 1.691.808.29-.433.74-.77 1.277-.956-.752 1.3 1.724 0 1.591 1.348.553-1.162 2.21-.617 3.255-1.3-.055.095-.16.282-.265.23.624.061.823.391 1.237.592 0-.956.967-1.195 1.448-1.797.812.87-.392 1.118-.1 1.974-.082-.755 1.272-.813.973-1.434.614.53.514.248.862 1.008.028-1.17.553-.22.962-.956.873.54.282 1.086 1.182.689.453.354-.342.808-.342.808Zm21.793-2.93-.447.057.447-.058Zm1.818-.091a7.552 7.552 0 0 0-.801 0c-.072-.23 0-.478.171-.478-.083.186.348.305.63.478Zm-4.128-4.49c.288-.109.393 0 .442.159-.172.02-.343.053-.508.1v.081a.973.973 0 0 1 .066-.34Z"},null,-1)])]))])]))}});export{k as __pageData,f as default}; diff --git a/assets/index.md.BX5o6LIJ.lean.js b/assets/index.md.6JFvWEIq.lean.js similarity index 99% rename from assets/index.md.BX5o6LIJ.lean.js rename to assets/index.md.6JFvWEIq.lean.js index 9d72a84..cb8a39b 100644 --- a/assets/index.md.BX5o6LIJ.lean.js +++ b/assets/index.md.6JFvWEIq.lean.js @@ -1 +1 @@ -import{f as n,p as o,q as s,c as l,o as c,a,e as r,t as d,u as g}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h={id:"hero-text",style:{display:"inline-block",position:"relative"}},m={style:{color:"var(--vp-c-brand)",position:"absolute","z-index":"-1",top:"1em",left:"0.2em",width:"calc(100% - 0.7em)",height:"auto"},width:"240",height:"11",viewBox:"0 0 240 11",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},k=JSON.parse('{"title":"首页","titleTemplate":":title | Insight Stack Blog","description":"","frontmatter":{"layout":"home","title":"首页","titleTemplate":":title | Insight Stack Blog","tk":{"teekHome":true,"features":[{"stage":"洞察引擎","stageEn":"Collect","icon":"cloud-download","desc":"优质资讯自动抓取、前沿技术追踪、开源项目挖掘","items":[{"title":"Daily AI Insight Engine","details":"旨在解决信息过载问题,打造自动聚合、深度解读、洞见提取的 AI 引擎。覆盖学术论文、技术博客、科技媒体、社区讨论四大信息源,支持中英文双语。","link":"/insight-labs/ai-insight-engine","tags":["Automation","Agent"]},{"title":"Repo Insight Engine","details":"AST 与大模型结合的 GitHub 源码架构分析利器,将碎片化的源码阅读转化为系统性的技术理解,用来帮助开发者快速理解项目架构、功能模块、代码质量等。","link":"/insight-labs/repo-insight/overview","tags":["AST","LLM","Agent","Code Analysis"]}]},{"stage":"知识内化","stageEn":"Knowledge","icon":"brain","desc":"碎片洞察 → 原子笔记 → 概念网络,每一条笔记都在为认知复利加速。","items":[{"title":"AI 驱动的体系化知识库建设","details":"LLM Wiki + Library 双轨制知识管理规范,融合卡片盒笔记法、Obsidian、AI 等,构建可持续演化的个人知识网络。将 AI 引擎的碎片洞察转化为节点,通过卡片盒笔记法编织概念网络,实现从信息到知识的跃迁。","link":"/insight-labs/overview","tags":["Obsidian","Zettelkasten","Knowledge Engineering"],"featured":true}]},{"stage":"孵化","stageEn":"Create","icon":"rocket","desc":"内容创作输出、工具产品孵化、技术品牌建设","items":[]}]},"hero":{"name":"Insight Stack Blog","text":"AI & 全栈技术 & 产品思考与成长记录","tagline":"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量","actions":[{"theme":"brand","text":"关于我","link":"/about/me"},{"theme":"alt","text":"资源推荐","link":"/growth/sites"},{"theme":"alt","text":"书籍推荐","link":"/growth/books"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),u={name:"index.md"},f=n({...u,setup(p){const{frontmatter:i}=o();return s(()=>{const t=document.querySelector(".VPHero .text"),e=document.querySelector("#hero-text");if(!(!t||!e)){for(;t.lastChild;)t.lastChild.remove();t.append(e)}}),(t,e)=>(c(),l("div",null,[a("span",h,[r(d(g(i).hero.text)+" ",1),(c(),l("svg",m,[...e[0]||(e[0]=[a("path",{d:"M20.766 10.187c.939-.024.386-.885.552-1.401 1.105-.301.553.626.962 1.061.685-.263 1.171-1.1 1.696-1.085.044.144.15.191.044.378.697-.736 2.21-.134 2.995-1.052a.55.55 0 0 1 .127.215 3.35 3.35 0 0 1-.204-1.204c.42-.034.751-.593.94 0-.255 0-.266.23-.377.416l.426-.273c.448.813-.586.316-.553.927.84-.306 1.802-1.037 2.476-.831.182.803-1.525.339-.608 1.023l-1.033-.268c.85 1.248-.625-.057.171 1.276 1.348.177 1.47-.478 2.818-.3.276-.479-.132-.66.144-1.124 1.857-.885 1.602 1.984 2.94.846.337-.555.42-1.582 1.442-1.08l-.276.889c1.298.038.668-1.348 2.06-.784-.226.368-1.005.344-.8.444.917.689.59-.545 1.27-.569l.16.827c1.371-.181 2.863-.827 4.388-1.037-.072.249-.326.512.044.746 1.912-.478 4.123-.058 6.007.368l.68-.727c.05.015.095.04.132.074a.275.275 0 0 1 .077.118c.014.044.015.091.004.136a.27.27 0 0 1-.07.122c.74.243 0-.445.354-.732.414-.062.552.383.315.603 1.248-.636 3.586-1.401 4.973-.694l-.254.22c1.06.249 1.105-1.477 2.127-.855l-.182.129c2.293.23 4.785-.478 6.564.52.293-1.017 2.272.393 2.365-1.022 1.327.664.967.927 2.813 1.348.492.052.702-.899 1.299-1.061l.044.731.79-.794.47.87.552-.205a.66.66 0 0 1-.332-.2.517.517 0 0 1-.132-.33c.873-.354 2.177.477 2.21.831l2.078-.679c-.039.301-.387.411-.657.607 1.105-.779.226.77 1.232.053-.144-.163.06-.44.077-.588.553.435 1.691.416 2.547.205l-.149.512c1.558.1 3.271-.31 5.018-.335-.636-.224-.514-1.109 0-1.204l.226.774c.32-.478-.552-.282.122-.884.652.076.464.875.094 1.138l.784-.287c.056.23-.127.358-.165.655.309-.478 1.387.75 1.834-.096l.05.23c1.746-.03 2.53-.316 3.95-.383 0-.674.553-.535.984-1.085 1.05.196 2.21.707 3.482.63.878-.343.243-.568.635-.955.077.612 1.332.535.69.985a15.353 15.353 0 0 0 3.83-.68c-.21-.243-.447-.353-.331-.563a.738.738 0 0 1 .275.01c.09.02.173.058.245.11a.58.58 0 0 1 .169.188c.04.072.061.151.062.232l-.088.067c2.127-.956 4.973 1.706 6.669.41l-.099.068 1.763-.684c.817.1-.481.478.127.842 1.9-1.043 3.022.12 4.586-.574 1.243 1.793 4.327-.167 5.979.956l-.1-.42c.426-.421.52.234.835.33-.05-.33-.464-.378-.205-.613 3.598-.545 7.438.598 11.129.956 1.348.11.757-2.203 2.465-1.195l-.481.794c2.719-.956 5.564 0 8.233-.77-.154.182-.16.416-.425.416.552.574 2.083.034 2.094-.435.42.053.1.425.354.665.552.339 1.42-.732 1.718-.158.05.09-.16.186-.265.23.37-.278 1.719.076 1.365-.589 1 .32 1.917-.287 2.713.105.553-.736 1.713.364 1.884-.683-.077 1.08 1.752.875 2.387.377-.215.326.553.345.299.794.718 0 1.381-.206 1.265-.76 1.315 1.305 2.686-1.018 3.415.645a45.888 45.888 0 0 1 6.078-1.17c-.082 1.075-2.138.09-2.066 1.218 1.834-.425 2.906-1.343 4.719-1.066.47.153-.276.478-.437.65 1.835-.43 3.537.148 5.172-.42 0 .1-.182.21-.348.291.321-.033.741.167.713-.325l-.315.13c-.497-.718 1.304-1.468 1.365-1.841-.553 1.396 1.602.377.707 2.137a.73.73 0 0 0 .337-.263.58.58 0 0 0 .1-.383c.315.1.409.297.083.665 1.155-.254.757-.78 1.801-.75 0 .233-.221.324-.337.601.553-.478 1.078-.908 1.951-.697-.056.143.044.33-.216.325 1.509-.048 2.603-1.195 4.249-.722-.513 1.023.553.349.625 1.243l.895-.254-.348-.44c.785.034 1.492-.602 2.155-.296l-.591.354 1.47-.139-.824-.354c.807-.444-.055-1.132.978-.86-.21.086.785.029 1.177.56.398-.278.801-.57 1.376-.335.138.291-.149.984-.055 1.176.398-.736 1.834-.168 2.337-.956-.143.227-.192.49-.138.745l.337-.597c.359.2.409.296.337.669 1.105.134-.309-1.138.967-.626-.105.048-.055.138-.27.23 1.287.277 2.519-.335 3.702 0 .326.903-1.05.195-.669.955 1.724-.129 3.592-.999 5.25-.74l-.31-.106c.277-1.262 1.221.66 2.083.086-.21.086-.298.693-.237.555 1.105.234 2.343-.249 4.083-.603l-.226.32c.657.311 1.763.216 2.481.383.226-.315.641-.253.403-.731 2.166 1.912 4.305-.89 6.228.726-.238 0-.553.268-.387.273l1.702-.244c-.111-.554-.21-.34-.553-.784.124-.163.292-.298.489-.392.198-.094.419-.145.644-.148-.774.34-.028.884.287 1.205-.049-.173.072-.354.05-.526.846 1.008.199-1.11 1.376-.407l-.077.287c.458-.134.889-.478 1.37-.401.177.645-.492.282-.552.803.685 0 1.403-1.162 1.994-.507-.298.167-.718.158-1.016.325.641.77.729.583 1.221.717h-.044l1.138.378-.282-.21c.928-1.635 1.752-.25 2.951-1.3-1.166.994-.21.592-.332 1.309.288.21.724.454.586.65.553-.564.89.478 1.696-.34 0 .235.581.044.431.627.713-.163-.149-.411-.077-.703 1.133-.76 2.514 1.061 4.139.029 1.376-.397 1.658-1.171 2.94-1.515.403.392-.393.836-.393.836.267.161.581.255.906.27a1.97 1.97 0 0 0 .934-.184c-.138.196 0 .373.172.64.519-.038.386-.831 1.05-.477a3.24 3.24 0 0 1-.553.918c.619-.192 1.243-.603 1.884-.79.149.412-.409.603-.646.856.718-.153 1.851-.296 2.105-.927l-.442-.248c.26 0 .105.559-.094.669-.63.478-.862-.258-.884-.478l.459-.134c-.387-1.382-1.818.148-2.719.033l.431-.956-.973.784c-.182-.263-.287-.822.166-.956-.624-.516-.591.33-1.105-.239-.055-.086-.028-.134.033-.172l-.646.273c.132-.201-.072-.703.309-.545-1.105-.617-1.873.674-2.26-.096l.099-.057c-1.596.272-.193.721-1.414 1.534l-.713-1.83-.188.721c-.16-.033-.481-.1-.409-.387-.63.478.089.32-.287.78-.752-.699-2.172.229-2.293-.957-.31.545.729.478-.127.813-.183-1.258-.978.181-1.658-.416.254-.636.917-.273.226-.875-.486 1.076-1.386-.282-2-.096-.066.87-1.332.32-2.354.579.078-.292-1.89-.54-2.818-.885l.033-.148c-.221.87-1.182.674-1.901.832a.906.906 0 0 1 .132-.55c.102-.169.258-.31.449-.406h-.669a.979.979 0 0 1-.34.327 1.167 1.167 0 0 1-.478.151l.194-.65c-.885 0-1.813.712-2.94.244-.083.607.84 1.725-.381 2.103-.034-.335-.056-.899.27-1.028-.105.043-.381.263-.585.12l.502-.545c-.508-.258-.287.478-.701.397 0-.478-.293-.35-.221-.722.11-.038.359.205.525 0a1.931 1.931 0 0 1-.691-.264 1.649 1.649 0 0 1-.503-.487c.028.268-.028.636-.37.684-.89 0-.282-.574-.79-.832-.227.325-.78-.033-.824.674-.259 0-.293-.34-.387-.535-.469.3-2.149.033-1.657.793l.116.053s-.05 0-.078.033c-1.525.66-3.105-.478-4.608-.224V3.34c-.895.244-1.984.106-2.636.593a.711.711 0 0 1-.402-.28.553.553 0 0 1-.084-.442c-.691.158-.774.416-1.746 0 .701-.396-.221-.373.713-.287-.879-.224-1.067-.607-2.039 0 .342-.597-.641-.774-1.067-.602l.608.445c-.436.053-.88.039-1.31-.043l.254-.794c-1.784-1.004-3.315 1.578-4.647-.067-.497.545.973.411.553 1.052-.829-.124-1.658-1.286-1.929-1.29-1.132-.479-1.105 1.137-2.282.812a.818.818 0 0 1 .031.774.938.938 0 0 1-.264.323 1.11 1.11 0 0 1-.397.198c-.829-.124-.994-1.214-.464-1.434.205 0 .299.072.288.168.27-.096.629-.21.303-.526l-.116.282c-.403-.297-1.552-.292-1.271-.75-.635.257-.281.477.183.616-1.061-.435-1.658-.053-2.763-.344.171.162.326.478.155.478-1.608-.378-.724.526-1.824.636-.608-.445.249-1.033-.862-.684-.668-.306-.127-.755.149-.985-1.016.536-1.867-.387-2.442-.478l.553-.22a1.892 1.892 0 0 1-.846.12l.293.573c-.309-.105-.553-.11-.553-.348-.326.368.227.956-.42 1.434-.403-.297-1.265.286-1.392-.478 1.298.272-.127-.76.978-.866a1.102 1.102 0 0 1-.851.024c-.044-.086.044-.157.133-.2-1.233-.689-.592.846-1.879.807.171-.42-.287-.808-.497-.721.519 0 .237.712-.249 1.027-.823-.34-.906.235-1.337.187l.491.162c-.176.426-.585.364-1.165.478-.045-.33.524-.22.326-.368-.652.736-1.437-.793-2.338-.306-.409-.291-.027-.798-.387-.999-1.011.54-1.077-.588-2.133-.148.293.574.349.435-.403.985l1.735-.387-1.105.822c.525 0 1.105-.35 1.42-.249-.553.478-.481.316-.238.794-.701-.86-1.425.478-2.21-.1l.044-1.41c-1.232-.641-2.21.702-3.823.334l.513.248c-.221.56-.994.072-1.519.292.055-.478-.271-.645-.492-.956.028.349-1.177-.043-1.337.899l-.707-.627c-1.305-.267-1.503 1.33-2.763 1.157.381-.507-.183-.846.657-1.21-.414 0-.79-.095-.801.23-.276-.263-1.199.646-1.575.215-.182.206-.243.698-.713.655a.337.337 0 0 1 0-.234c0 .234-.735.31-.331.837-1.271-1.478-3.592.095-4.708-1.172-.936.165-1.883.277-2.835.335.05-.139 0-.234.16-.186-1.143-.44-.707 1.352-2.005.86-.664-.765.69-.411.276-.703-.171-1.553-1.564.21-2.437-.702l.21-.091c-.663-.555-1.608.564-2.713.454a.326.326 0 0 0 0-.234c-.746.784-2.155 1.051-3.205 1.271.326-.607.475-.32.276-.956-.47.091.138.99-.801 1.167-.304-.33-.984-.622-1.078-1.282l.89-.019c-.459-.85-1.149.034-1.613-.114l.055-.368c-1.36.124-1.376 1.06-2.835.999l.155.282c-.796.956-.674-.521-1.465.172l-.248-.956c-.871.453-1.797.82-2.763 1.094.552-.698 1.658-1.06 2.315-1.477-.519 0-1.774.072-2.044.54.21-.09.475-.325.685-.181a2.832 2.832 0 0 1-1.094.83 3.298 3.298 0 0 1-1.42.27c.171-1.832-2.713-.455-3.482-1.865-1.834.693-3.652-.258-5.796-.13.774 1.435-.625.049-.481 1.507-.497.1-.685.076-.729 0l-1.525-.86c-.365-.421.469-.326.42-.65-1.106-.106-.465-.618-1.194-1 .155.521-.37.75-1 .56l.901.659c-1.52.793-1.338-1.214-2.868-.43l.48-.478c-.79.277-2.917 0-3.674 1.204-.144-.167-.332-.564 0-.674-1.89-.148-4.183 1.31-5.664.612l.138-.358c-.348.105-.602.678-1.05.325 0-.148.138-.359 0-.378-.182.124-.923.64-1.392.44l.386-.411c-1.85-.44-2.807 1.023-4.343 1.29 0-1.051-1.475-1.376-2.21-1.53V.685c-2.15-.086-3.625.956-5.598 1.4-1.265-1.118-4.188-.392-6.194-.99.31.182 0 .818-.37.957-.475-.206-1.266.755-1.221-.21h.165c-.375-.957-1.326-.67-2.072-.675l-.083 1.267c-2.006-1.778-5.106.813-6.227-.803-.459.33-1.045.34-1.498.67v-.68a12.396 12.396 0 0 0-3.575 0l.31-.478c-.912 0-1.072 1.98-1.912 2.042l-.288-1c-1.591.053-3.232-.774-4.763.192 0-.148.055-.445.31-.478-.746 0-2.918-.588-2.587.788-.06-.903-1.657-.038-2.48.388l.104-.689c-.685.875-.701 1.11-1.696 1.377-.243-.076-.238-.526.088-.368-.812-.32-.59.655-1.574.33l.342-.435c-.823-.029-.746.2-1.177.707-.503.287-1.564-.114-1.713-.712-.094.368-.52.875-1.011.717a.38.38 0 0 1 .013-.245.442.442 0 0 1 .164-.2c-1.393-.406-2 .851-2.973.235a.553.553 0 0 0-.182-.392 9.431 9.431 0 0 1 1.89.028c0-.616-.912-.688-.255-1.563-.685.478-1.845 1.54-2.713 1.286a.84.84 0 0 1-.1-.215l.061-.072a.668.668 0 0 0-.295 0 .61.61 0 0 0-.257.125 1.992 1.992 0 0 0-.718-.158c-.128-.507-1.023-.234-1.465-.244.072.67-.508.583.06 1.119-.07-.048.078-.086.366-.125a.528.528 0 0 0 .188-.076l-.028.062c.287-.033.663-.062 1.105-.09-.332.358-.68.654-1.183.3-.204.445-.43.894-.552 1.11-.647-.914-1.83-1.377-2.022-1.946-1.321.43-3.145.368-3.918 1.663-.376.177-.459-.344-.614-.535.216-.139.476-.13.586-.316-.74.354-2.249.216-2.381 1.105-.984-.364.491-.837-.818-.636l.166-.277c-2.675-1.291-4.09 2.433-7.068.755.204.105.304.148.354.296-3.316-.645-6.709 1.038-10.018-.062-.94-.205-1 .359-1.531.818l-.249-.713-.906.88c-1.315.679-2.47-1.65-4.117-.411l.254.478c-.624-.058-1.939.387-1.873-.177-.055.09-.166.516-.425.272l-.044-.372-1.487.712c-1.199-.215.078-1.506-1.658-1.492C.895 5.105-.22 6.114.04 6.362c.178.01.347.073.478.179a.645.645 0 0 1 .24.4l-.558.225C.17 8.279-.194 9.44 1.304 10.144l.917-.732.36.521-.818.1c.513.479.784 0 1.105-.305.07.225.233.42.458.55l.907-1.114c.149.43-.376.884.292 1.094.426-.516-.502-.956.233-1.314.513.478.403.898.933.44a.447.447 0 0 1 .012.336.525.525 0 0 1-.233.27c.476-.367 1.304-.214 1.525-.817.553.598 1.658-.248 1.691.808.29-.433.74-.77 1.277-.956-.752 1.3 1.724 0 1.591 1.348.553-1.162 2.21-.617 3.255-1.3-.055.095-.16.282-.265.23.624.061.823.391 1.237.592 0-.956.967-1.195 1.448-1.797.812.87-.392 1.118-.1 1.974-.082-.755 1.272-.813.973-1.434.614.53.514.248.862 1.008.028-1.17.553-.22.962-.956.873.54.282 1.086 1.182.689.453.354-.342.808-.342.808Zm21.793-2.93-.447.057.447-.058Zm1.818-.091a7.552 7.552 0 0 0-.801 0c-.072-.23 0-.478.171-.478-.083.186.348.305.63.478Zm-4.128-4.49c.288-.109.393 0 .442.159-.172.02-.343.053-.508.1v.081a.973.973 0 0 1 .066-.34Z"},null,-1)])]))])]))}});export{k as __pageData,f as default}; +import{f as n,p as o,q as s,c as l,o as c,a,e as r,t as d,u as g}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h={id:"hero-text",style:{display:"inline-block",position:"relative"}},m={style:{color:"var(--vp-c-brand)",position:"absolute","z-index":"-1",top:"1em",left:"0.2em",width:"calc(100% - 0.7em)",height:"auto"},width:"240",height:"11",viewBox:"0 0 240 11",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},k=JSON.parse('{"title":"首页","titleTemplate":":title | Insight Stack Blog","description":"","frontmatter":{"layout":"home","title":"首页","titleTemplate":":title | Insight Stack Blog","tk":{"teekHome":true,"features":[{"stage":"洞察引擎","stageEn":"Collect","icon":"cloud-download","desc":"优质资讯自动抓取、前沿技术追踪、开源项目挖掘","items":[{"title":"Daily AI Insight Engine","details":"旨在解决信息过载问题,打造自动聚合、深度解读、洞见提取的 AI 引擎。覆盖学术论文、技术博客、科技媒体、社区讨论四大信息源,支持中英文双语。","link":"/insight-labs/ai-insight-engine","tags":["Automation","Agent"]},{"title":"Repo Insight Engine","details":"AST 与大模型结合的 GitHub 源码架构分析利器,将碎片化的源码阅读转化为系统性的技术理解,用来帮助开发者快速理解项目架构、功能模块、代码质量等。","link":"/insight-labs/repo-insight/overview","tags":["AST","LLM","Agent","Code Analysis"]}]},{"stage":"知识内化","stageEn":"Knowledge","icon":"brain","desc":"碎片洞察 → 原子笔记 → 概念网络,每一条笔记都在为认知复利加速。","items":[{"title":"AI 驱动的体系化知识库建设","details":"LLM Wiki + Library 双轨制知识管理规范,融合卡片盒笔记法、Obsidian、AI 等,构建可持续演化的个人知识网络。将 AI 引擎的碎片洞察转化为节点,通过卡片盒笔记法编织概念网络,实现从信息到知识的跃迁。","link":"/insight-labs/overview","tags":["Obsidian","Zettelkasten","Knowledge Engineering"],"featured":true}]},{"stage":"孵化","stageEn":"Create","icon":"rocket","desc":"内容创作输出、工具产品孵化、技术品牌建设","items":[]}]},"hero":{"name":"Insight Stack Blog","text":"AI & 全栈技术 & 产品思考与成长记录","tagline":"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量","actions":[{"theme":"brand","text":"关于我","link":"/about/me"},{"theme":"alt","text":"资源推荐","link":"/growth/sites"},{"theme":"alt","text":"书籍推荐","link":"/growth/books"}]}},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),u={name:"index.md"},f=n({...u,setup(p){const{frontmatter:i}=o();return s(()=>{const t=document.querySelector(".VPHero .text"),e=document.querySelector("#hero-text");if(!(!t||!e)){for(;t.lastChild;)t.lastChild.remove();t.append(e)}}),(t,e)=>(c(),l("div",null,[a("span",h,[r(d(g(i).hero.text)+" ",1),(c(),l("svg",m,[...e[0]||(e[0]=[a("path",{d:"M20.766 10.187c.939-.024.386-.885.552-1.401 1.105-.301.553.626.962 1.061.685-.263 1.171-1.1 1.696-1.085.044.144.15.191.044.378.697-.736 2.21-.134 2.995-1.052a.55.55 0 0 1 .127.215 3.35 3.35 0 0 1-.204-1.204c.42-.034.751-.593.94 0-.255 0-.266.23-.377.416l.426-.273c.448.813-.586.316-.553.927.84-.306 1.802-1.037 2.476-.831.182.803-1.525.339-.608 1.023l-1.033-.268c.85 1.248-.625-.057.171 1.276 1.348.177 1.47-.478 2.818-.3.276-.479-.132-.66.144-1.124 1.857-.885 1.602 1.984 2.94.846.337-.555.42-1.582 1.442-1.08l-.276.889c1.298.038.668-1.348 2.06-.784-.226.368-1.005.344-.8.444.917.689.59-.545 1.27-.569l.16.827c1.371-.181 2.863-.827 4.388-1.037-.072.249-.326.512.044.746 1.912-.478 4.123-.058 6.007.368l.68-.727c.05.015.095.04.132.074a.275.275 0 0 1 .077.118c.014.044.015.091.004.136a.27.27 0 0 1-.07.122c.74.243 0-.445.354-.732.414-.062.552.383.315.603 1.248-.636 3.586-1.401 4.973-.694l-.254.22c1.06.249 1.105-1.477 2.127-.855l-.182.129c2.293.23 4.785-.478 6.564.52.293-1.017 2.272.393 2.365-1.022 1.327.664.967.927 2.813 1.348.492.052.702-.899 1.299-1.061l.044.731.79-.794.47.87.552-.205a.66.66 0 0 1-.332-.2.517.517 0 0 1-.132-.33c.873-.354 2.177.477 2.21.831l2.078-.679c-.039.301-.387.411-.657.607 1.105-.779.226.77 1.232.053-.144-.163.06-.44.077-.588.553.435 1.691.416 2.547.205l-.149.512c1.558.1 3.271-.31 5.018-.335-.636-.224-.514-1.109 0-1.204l.226.774c.32-.478-.552-.282.122-.884.652.076.464.875.094 1.138l.784-.287c.056.23-.127.358-.165.655.309-.478 1.387.75 1.834-.096l.05.23c1.746-.03 2.53-.316 3.95-.383 0-.674.553-.535.984-1.085 1.05.196 2.21.707 3.482.63.878-.343.243-.568.635-.955.077.612 1.332.535.69.985a15.353 15.353 0 0 0 3.83-.68c-.21-.243-.447-.353-.331-.563a.738.738 0 0 1 .275.01c.09.02.173.058.245.11a.58.58 0 0 1 .169.188c.04.072.061.151.062.232l-.088.067c2.127-.956 4.973 1.706 6.669.41l-.099.068 1.763-.684c.817.1-.481.478.127.842 1.9-1.043 3.022.12 4.586-.574 1.243 1.793 4.327-.167 5.979.956l-.1-.42c.426-.421.52.234.835.33-.05-.33-.464-.378-.205-.613 3.598-.545 7.438.598 11.129.956 1.348.11.757-2.203 2.465-1.195l-.481.794c2.719-.956 5.564 0 8.233-.77-.154.182-.16.416-.425.416.552.574 2.083.034 2.094-.435.42.053.1.425.354.665.552.339 1.42-.732 1.718-.158.05.09-.16.186-.265.23.37-.278 1.719.076 1.365-.589 1 .32 1.917-.287 2.713.105.553-.736 1.713.364 1.884-.683-.077 1.08 1.752.875 2.387.377-.215.326.553.345.299.794.718 0 1.381-.206 1.265-.76 1.315 1.305 2.686-1.018 3.415.645a45.888 45.888 0 0 1 6.078-1.17c-.082 1.075-2.138.09-2.066 1.218 1.834-.425 2.906-1.343 4.719-1.066.47.153-.276.478-.437.65 1.835-.43 3.537.148 5.172-.42 0 .1-.182.21-.348.291.321-.033.741.167.713-.325l-.315.13c-.497-.718 1.304-1.468 1.365-1.841-.553 1.396 1.602.377.707 2.137a.73.73 0 0 0 .337-.263.58.58 0 0 0 .1-.383c.315.1.409.297.083.665 1.155-.254.757-.78 1.801-.75 0 .233-.221.324-.337.601.553-.478 1.078-.908 1.951-.697-.056.143.044.33-.216.325 1.509-.048 2.603-1.195 4.249-.722-.513 1.023.553.349.625 1.243l.895-.254-.348-.44c.785.034 1.492-.602 2.155-.296l-.591.354 1.47-.139-.824-.354c.807-.444-.055-1.132.978-.86-.21.086.785.029 1.177.56.398-.278.801-.57 1.376-.335.138.291-.149.984-.055 1.176.398-.736 1.834-.168 2.337-.956-.143.227-.192.49-.138.745l.337-.597c.359.2.409.296.337.669 1.105.134-.309-1.138.967-.626-.105.048-.055.138-.27.23 1.287.277 2.519-.335 3.702 0 .326.903-1.05.195-.669.955 1.724-.129 3.592-.999 5.25-.74l-.31-.106c.277-1.262 1.221.66 2.083.086-.21.086-.298.693-.237.555 1.105.234 2.343-.249 4.083-.603l-.226.32c.657.311 1.763.216 2.481.383.226-.315.641-.253.403-.731 2.166 1.912 4.305-.89 6.228.726-.238 0-.553.268-.387.273l1.702-.244c-.111-.554-.21-.34-.553-.784.124-.163.292-.298.489-.392.198-.094.419-.145.644-.148-.774.34-.028.884.287 1.205-.049-.173.072-.354.05-.526.846 1.008.199-1.11 1.376-.407l-.077.287c.458-.134.889-.478 1.37-.401.177.645-.492.282-.552.803.685 0 1.403-1.162 1.994-.507-.298.167-.718.158-1.016.325.641.77.729.583 1.221.717h-.044l1.138.378-.282-.21c.928-1.635 1.752-.25 2.951-1.3-1.166.994-.21.592-.332 1.309.288.21.724.454.586.65.553-.564.89.478 1.696-.34 0 .235.581.044.431.627.713-.163-.149-.411-.077-.703 1.133-.76 2.514 1.061 4.139.029 1.376-.397 1.658-1.171 2.94-1.515.403.392-.393.836-.393.836.267.161.581.255.906.27a1.97 1.97 0 0 0 .934-.184c-.138.196 0 .373.172.64.519-.038.386-.831 1.05-.477a3.24 3.24 0 0 1-.553.918c.619-.192 1.243-.603 1.884-.79.149.412-.409.603-.646.856.718-.153 1.851-.296 2.105-.927l-.442-.248c.26 0 .105.559-.094.669-.63.478-.862-.258-.884-.478l.459-.134c-.387-1.382-1.818.148-2.719.033l.431-.956-.973.784c-.182-.263-.287-.822.166-.956-.624-.516-.591.33-1.105-.239-.055-.086-.028-.134.033-.172l-.646.273c.132-.201-.072-.703.309-.545-1.105-.617-1.873.674-2.26-.096l.099-.057c-1.596.272-.193.721-1.414 1.534l-.713-1.83-.188.721c-.16-.033-.481-.1-.409-.387-.63.478.089.32-.287.78-.752-.699-2.172.229-2.293-.957-.31.545.729.478-.127.813-.183-1.258-.978.181-1.658-.416.254-.636.917-.273.226-.875-.486 1.076-1.386-.282-2-.096-.066.87-1.332.32-2.354.579.078-.292-1.89-.54-2.818-.885l.033-.148c-.221.87-1.182.674-1.901.832a.906.906 0 0 1 .132-.55c.102-.169.258-.31.449-.406h-.669a.979.979 0 0 1-.34.327 1.167 1.167 0 0 1-.478.151l.194-.65c-.885 0-1.813.712-2.94.244-.083.607.84 1.725-.381 2.103-.034-.335-.056-.899.27-1.028-.105.043-.381.263-.585.12l.502-.545c-.508-.258-.287.478-.701.397 0-.478-.293-.35-.221-.722.11-.038.359.205.525 0a1.931 1.931 0 0 1-.691-.264 1.649 1.649 0 0 1-.503-.487c.028.268-.028.636-.37.684-.89 0-.282-.574-.79-.832-.227.325-.78-.033-.824.674-.259 0-.293-.34-.387-.535-.469.3-2.149.033-1.657.793l.116.053s-.05 0-.078.033c-1.525.66-3.105-.478-4.608-.224V3.34c-.895.244-1.984.106-2.636.593a.711.711 0 0 1-.402-.28.553.553 0 0 1-.084-.442c-.691.158-.774.416-1.746 0 .701-.396-.221-.373.713-.287-.879-.224-1.067-.607-2.039 0 .342-.597-.641-.774-1.067-.602l.608.445c-.436.053-.88.039-1.31-.043l.254-.794c-1.784-1.004-3.315 1.578-4.647-.067-.497.545.973.411.553 1.052-.829-.124-1.658-1.286-1.929-1.29-1.132-.479-1.105 1.137-2.282.812a.818.818 0 0 1 .031.774.938.938 0 0 1-.264.323 1.11 1.11 0 0 1-.397.198c-.829-.124-.994-1.214-.464-1.434.205 0 .299.072.288.168.27-.096.629-.21.303-.526l-.116.282c-.403-.297-1.552-.292-1.271-.75-.635.257-.281.477.183.616-1.061-.435-1.658-.053-2.763-.344.171.162.326.478.155.478-1.608-.378-.724.526-1.824.636-.608-.445.249-1.033-.862-.684-.668-.306-.127-.755.149-.985-1.016.536-1.867-.387-2.442-.478l.553-.22a1.892 1.892 0 0 1-.846.12l.293.573c-.309-.105-.553-.11-.553-.348-.326.368.227.956-.42 1.434-.403-.297-1.265.286-1.392-.478 1.298.272-.127-.76.978-.866a1.102 1.102 0 0 1-.851.024c-.044-.086.044-.157.133-.2-1.233-.689-.592.846-1.879.807.171-.42-.287-.808-.497-.721.519 0 .237.712-.249 1.027-.823-.34-.906.235-1.337.187l.491.162c-.176.426-.585.364-1.165.478-.045-.33.524-.22.326-.368-.652.736-1.437-.793-2.338-.306-.409-.291-.027-.798-.387-.999-1.011.54-1.077-.588-2.133-.148.293.574.349.435-.403.985l1.735-.387-1.105.822c.525 0 1.105-.35 1.42-.249-.553.478-.481.316-.238.794-.701-.86-1.425.478-2.21-.1l.044-1.41c-1.232-.641-2.21.702-3.823.334l.513.248c-.221.56-.994.072-1.519.292.055-.478-.271-.645-.492-.956.028.349-1.177-.043-1.337.899l-.707-.627c-1.305-.267-1.503 1.33-2.763 1.157.381-.507-.183-.846.657-1.21-.414 0-.79-.095-.801.23-.276-.263-1.199.646-1.575.215-.182.206-.243.698-.713.655a.337.337 0 0 1 0-.234c0 .234-.735.31-.331.837-1.271-1.478-3.592.095-4.708-1.172-.936.165-1.883.277-2.835.335.05-.139 0-.234.16-.186-1.143-.44-.707 1.352-2.005.86-.664-.765.69-.411.276-.703-.171-1.553-1.564.21-2.437-.702l.21-.091c-.663-.555-1.608.564-2.713.454a.326.326 0 0 0 0-.234c-.746.784-2.155 1.051-3.205 1.271.326-.607.475-.32.276-.956-.47.091.138.99-.801 1.167-.304-.33-.984-.622-1.078-1.282l.89-.019c-.459-.85-1.149.034-1.613-.114l.055-.368c-1.36.124-1.376 1.06-2.835.999l.155.282c-.796.956-.674-.521-1.465.172l-.248-.956c-.871.453-1.797.82-2.763 1.094.552-.698 1.658-1.06 2.315-1.477-.519 0-1.774.072-2.044.54.21-.09.475-.325.685-.181a2.832 2.832 0 0 1-1.094.83 3.298 3.298 0 0 1-1.42.27c.171-1.832-2.713-.455-3.482-1.865-1.834.693-3.652-.258-5.796-.13.774 1.435-.625.049-.481 1.507-.497.1-.685.076-.729 0l-1.525-.86c-.365-.421.469-.326.42-.65-1.106-.106-.465-.618-1.194-1 .155.521-.37.75-1 .56l.901.659c-1.52.793-1.338-1.214-2.868-.43l.48-.478c-.79.277-2.917 0-3.674 1.204-.144-.167-.332-.564 0-.674-1.89-.148-4.183 1.31-5.664.612l.138-.358c-.348.105-.602.678-1.05.325 0-.148.138-.359 0-.378-.182.124-.923.64-1.392.44l.386-.411c-1.85-.44-2.807 1.023-4.343 1.29 0-1.051-1.475-1.376-2.21-1.53V.685c-2.15-.086-3.625.956-5.598 1.4-1.265-1.118-4.188-.392-6.194-.99.31.182 0 .818-.37.957-.475-.206-1.266.755-1.221-.21h.165c-.375-.957-1.326-.67-2.072-.675l-.083 1.267c-2.006-1.778-5.106.813-6.227-.803-.459.33-1.045.34-1.498.67v-.68a12.396 12.396 0 0 0-3.575 0l.31-.478c-.912 0-1.072 1.98-1.912 2.042l-.288-1c-1.591.053-3.232-.774-4.763.192 0-.148.055-.445.31-.478-.746 0-2.918-.588-2.587.788-.06-.903-1.657-.038-2.48.388l.104-.689c-.685.875-.701 1.11-1.696 1.377-.243-.076-.238-.526.088-.368-.812-.32-.59.655-1.574.33l.342-.435c-.823-.029-.746.2-1.177.707-.503.287-1.564-.114-1.713-.712-.094.368-.52.875-1.011.717a.38.38 0 0 1 .013-.245.442.442 0 0 1 .164-.2c-1.393-.406-2 .851-2.973.235a.553.553 0 0 0-.182-.392 9.431 9.431 0 0 1 1.89.028c0-.616-.912-.688-.255-1.563-.685.478-1.845 1.54-2.713 1.286a.84.84 0 0 1-.1-.215l.061-.072a.668.668 0 0 0-.295 0 .61.61 0 0 0-.257.125 1.992 1.992 0 0 0-.718-.158c-.128-.507-1.023-.234-1.465-.244.072.67-.508.583.06 1.119-.07-.048.078-.086.366-.125a.528.528 0 0 0 .188-.076l-.028.062c.287-.033.663-.062 1.105-.09-.332.358-.68.654-1.183.3-.204.445-.43.894-.552 1.11-.647-.914-1.83-1.377-2.022-1.946-1.321.43-3.145.368-3.918 1.663-.376.177-.459-.344-.614-.535.216-.139.476-.13.586-.316-.74.354-2.249.216-2.381 1.105-.984-.364.491-.837-.818-.636l.166-.277c-2.675-1.291-4.09 2.433-7.068.755.204.105.304.148.354.296-3.316-.645-6.709 1.038-10.018-.062-.94-.205-1 .359-1.531.818l-.249-.713-.906.88c-1.315.679-2.47-1.65-4.117-.411l.254.478c-.624-.058-1.939.387-1.873-.177-.055.09-.166.516-.425.272l-.044-.372-1.487.712c-1.199-.215.078-1.506-1.658-1.492C.895 5.105-.22 6.114.04 6.362c.178.01.347.073.478.179a.645.645 0 0 1 .24.4l-.558.225C.17 8.279-.194 9.44 1.304 10.144l.917-.732.36.521-.818.1c.513.479.784 0 1.105-.305.07.225.233.42.458.55l.907-1.114c.149.43-.376.884.292 1.094.426-.516-.502-.956.233-1.314.513.478.403.898.933.44a.447.447 0 0 1 .012.336.525.525 0 0 1-.233.27c.476-.367 1.304-.214 1.525-.817.553.598 1.658-.248 1.691.808.29-.433.74-.77 1.277-.956-.752 1.3 1.724 0 1.591 1.348.553-1.162 2.21-.617 3.255-1.3-.055.095-.16.282-.265.23.624.061.823.391 1.237.592 0-.956.967-1.195 1.448-1.797.812.87-.392 1.118-.1 1.974-.082-.755 1.272-.813.973-1.434.614.53.514.248.862 1.008.028-1.17.553-.22.962-.956.873.54.282 1.086 1.182.689.453.354-.342.808-.342.808Zm21.793-2.93-.447.057.447-.058Zm1.818-.091a7.552 7.552 0 0 0-.801 0c-.072-.23 0-.478.171-.478-.083.186.348.305.63.478Zm-4.128-4.49c.288-.109.393 0 .442.159-.172.02-.343.053-.508.1v.081a.973.973 0 0 1 .066-.34Z"},null,-1)])]))])]))}});export{k as __pageData,f as default}; diff --git a/assets/insight-labs_ai-insight-engine.md.CSelYfUb.js b/assets/insight-labs_ai-insight-engine.md.FNPXwM48.js similarity index 96% rename from assets/insight-labs_ai-insight-engine.md.CSelYfUb.js rename to assets/insight-labs_ai-insight-engine.md.FNPXwM48.js index 2e32c1c..0bd216e 100644 --- a/assets/insight-labs_ai-insight-engine.md.CSelYfUb.js +++ b/assets/insight-labs_ai-insight-engine.md.FNPXwM48.js @@ -1 +1 @@ -import{R as p,T as S}from"./chunks/ResourceCard.Org1H1aA.js";import{F as A}from"./chunks/FeatureGrid.C9SUnqP9.js";import{B as m}from"./chunks/Blockquote.acMDZFAD.js";/* empty css */import{S as v}from"./chunks/StepGuide.B2IY2DS6.js";import{f as I,c as s,g,o,n as c,F as h,m as y,a as e,k as b,t as d,_ as P,b as n,e as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";import{K as C}from"./chunks/KnowledgePhilosophyBanner.hZQ91uX1.js";/* empty css *//* empty css */const x={class:"mode-header-row"},D={class:"mode-icon"},T={class:"mode-audience"},E={class:"mode-title"},N={class:"mode-desc"},R=I({__name:"ConsumptionModes",props:{modes:{},layout:{default:"grid"}},setup(i){const l=["#6C5CE7","#0984E3","#00B894"];return(t,F)=>i.modes.length?(o(),s("div",{key:0,class:c(["consumption-modes",{"consumption-modes--stacked":i.layout==="stacked"}])},[(o(!0),s(h,null,y(i.modes,(r,u)=>(o(),s("div",{key:u,class:c(["mode-card",{"mode-card--stacked":i.layout==="stacked"}])},[i.layout==="stacked"?(o(),s("div",{key:0,class:"mode-accent-left",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",{class:c(["mode-body",{"mode-card-inner":i.layout==="stacked"}])},[i.layout==="grid"?(o(),s("div",{key:0,class:"mode-accent",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",x,[e("span",D,d(r.icon),1),e("span",T,d(r.audience),1)]),e("h4",E,d(r.title),1),e("p",N,d(r.description),1),e("ul",{class:c(["mode-features",{"mode-features--grid":i.layout==="stacked"}])},[(o(!0),s(h,null,y(r.features,(k,f)=>(o(),s("li",{key:f},d(k),1))),128))],2)],2)],2))),128))],2)):g("",!0)}}),w=P(R,[["__scopeId","data-v-83bc1c5b"]]),B={class:"quick-access",style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1rem"}},H=JSON.parse('{"title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","frontmatter":{"date":"2026-05-15T00:00:00.000Z","title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","permalink":"/insight-labs/ai-insight-engine","categories":["优质信息洞察引擎"]},"headers":[],"relativePath":"insight-labs/ai-insight-engine.md","filePath":"31.Insight Labs/01.优质资讯情报引擎.md"}'),M={name:"insight-labs/ai-insight-engine.md"},Z=Object.assign(M,{setup(i){return(l,t)=>(o(),s("div",null,[t[0]||(t[0]=e("h1",{id:"daily-ai-insight-engine",tabindex:"-1"},[a("Daily AI Insight Engine "),e("a",{class:"header-anchor",href:"#daily-ai-insight-engine","aria-label":"Permalink to “Daily AI Insight Engine”"},"​")],-1)),n(m,{variant:"highlight",insight:"信息高度图名的时代,真正稀缺的不是信息,而是结构化的判断力。",quote:"每天面对 arXiv、Hacker News、TechCrunch 等渠道的海量信息资源,真正需要的是一个能在信息噪音中提取信号、在碎片中构建体系的洞察引擎。"}),e("div",B,[n(p,{resource:{name:"🌍 在线体验",description:"AI 驱动的每日优质信息洞察引擎,四阶段流水线加工产出结构化日报与交互式 Dashboard。",url:"https://daily-ai-insight-engine.vercel.app",type:"tool"},style:{"margin-bottom":"8px"}}),n(p,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南",url:"https://github.com/sqliang/daily-ai-insight-engine",type:"github",tags:["AI","洞察引擎","Pipeline","Dashboard"]},style:{"margin-bottom":"8px"}})]),t[1]||(t[1]=e("div",{style:{"font-size":"0.8125rem",color:"var(--vp-c-text-3)"}},"注:以上链接需自备代理访问(Vercel 部署站 + GitHub 均在境外,国内访问不稳定)",-1)),t[2]||(t[2]=e("h3",{id:"项目简介",tabindex:"-1"},[a("项目简介 "),e("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),t[3]||(t[3]=e("p",null,[e("strong",null,"daily-ai-insight-engine"),a(" 是一款 AI 驱动的信息聚合与分析引擎,致力于解决信息过载难题。它自动采集多个中英文优质信息数据源,涵盖学术论文、技术博客、科技媒体及社区讨论四大领域;经由四阶段流水线处理,完成自动聚合、深度解读与洞见提炼,最终输出结构化的洞察报告与交互式可视化看板。")],-1)),n(C,{title:"黄金三角",titleHighlight:"三维信号聚合",subtitle:"少花时间筛信息,多花时间理解与学习——聚合多个中英文精选优质信息数据源,通过黄金三角串联学术前沿、产品动态与商业信号。经采集、提炼与多维解读,把高噪信息沉淀为带摘要与评分的结构化内容;既可速览日报脉络,也能单篇深读、按需回溯。",pillars:[{title:"技术前沿",description:"学术论文 & 官方技术博客 — 代表技术最前沿与基础研究信号"},{title:"产品与开发者",description:"社区讨论 & 开发者情绪 — 反映产品落地热度与开发者真实反馈"},{title:"商业与资本",description:"科技媒体 & 行业报道 — 捕捉商业落地、资本动向与产业趋势"}]}),n(m,{variant:"insight",insight:"洞察日报不是链接堆砌,而是可直接吸收的判断与脉络",quote:"上游信源经采集、提炼与多维解读后,由主编 Agent 综合为结构化洞察日报。每份日报提供执行摘要、关键事件与风险信号,并配套交互式看板与 Markdown 全文;既可速览当日要点,也能深读复盘、沉淀认知。"}),t[4]||(t[4]=e("ul",null,[e("li",null,[e("strong",null,"主编综述"),a(":执行摘要串联当日最重要变化与判断,为读者提供快速概览。")]),e("li",null,[e("strong",null,"交互看板"),a(":KPI、事件分布、趋势与机会/风险信号,为读者提供可视化洞察。")]),e("li",null,[e("strong",null,"完整报告"),a(":Markdown 全文,支持深读与按需检索。")])],-1)),t[5]||(t[5]=e("p",null,[e("strong",null,"核心能力一览")],-1)),n(A,{items:[{icon:"🔍",title:"多源自动采集",description:"多源核心信息输入,RSS/API/爬虫/无头浏览器四种策略,关键词过滤 + 时间窗口 + 去重"},{icon:"⚙️",title:"四阶段流水线",description:"采集 → 事实提取 → 深度分析 → 总编合成,每阶段产物可回溯、可重跑"},{icon:"🧠",title:"三人格并行分析",description:"技术架构师、资本分析师、风险评估师三种视角并行深度解读,产出 32+ 结构化字段"},{icon:"📊",title:"零后端可视化",description:"Next.js 16 直接读取 JSON 文件渲染 Dashboard,无数据库、无 API 层、无网络请求"}]}),t[6]||(t[6]=e("h3",{id:"四阶段流水线",tabindex:"-1"},[a("四阶段流水线 "),e("a",{class:"header-anchor",href:"#四阶段流水线","aria-label":"Permalink to “四阶段流水线”"},"​")],-1)),n(v,{steps:[{icon:"📥",title:"Stage 1 — 数据源筛选与采集",content:"四种抓取策略(RSS / API / Scrape / Browser)覆盖不同站点类型。关键词过滤 + 时间窗口截断 + URL 去重 + 标题相似度去重,每层配额上限 5 篇,按 impact_score 择优。",status:"completed"},{icon:"📝",title:"Stage 2 — 事实提取",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.1)精确提取:TLDR 摘要、客观事实总结、事件类型、实体识别(公司/技术/人物/产品/地区)、关键逻辑链(3-6 条)、影响力评分(1-10)。支持断点续跑。",status:"completed"},{icon:"🔬",title:"Stage 3 — 深度分析",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.3)实现并行分析:Tech Architect × Capital Analyst × Risk Assessor 三维度同时执行。外层 3 文件并发,内层 asyncio.gather 并行 = 每轮最多 9 个 Agent 调用。失败隔离:单维度异常不阻塞其他维度,产出定性评估、价值评估、前瞻与行动建议。",status:"completed"},{icon:"🧩",title:"Stage 4 — 总编合成",status:"completed",subSteps:[{title:"Stage-4a Frontmatter 聚合",content:"递归扫描分析产物,零 LLM 调用,<1 秒完成。"},{title:"Stage-4b Editor-in-Chief 合成",content:"单次调用、完整输出,产出最终日报。"}]}]}),t[7]||(t[7]=e("h3",{id:"三种消费模式",tabindex:"-1"},[a("三种消费模式 "),e("a",{class:"header-anchor",href:"#三种消费模式","aria-label":"Permalink to “三种消费模式”"},"​")],-1)),t[8]||(t[8]=e("p",null,"流水线产物通过三种方式消费,覆盖从底层数据钻取到高层洞察阅读的完整链路:",-1)),n(w,{layout:"stacked",modes:[{icon:"",title:"数据源探索(Source Explorer)",audience:"开发者 / 研究者",accent:"#6C5CE7",description:"按 Golden Triangle 三级金字塔浏览被筛选、采集的信息数据源,钻取到每篇文章在各阶段的提取与分析结果,理解 Agent 分析链路。",features:["三级金字塔信源卡片网格:A/B/C 三层分组,每张卡片含名称、描述、关键词、文章数及 Tier/语言/抓取策略徽章。","单源详情页:展示该源全部文章列表,每篇标注处理阶段状态(scout → extracted → analyzed)。","Stage 2 提取结果:TLDR 摘要、事件类型、实体识别(公司/技术/人物)、关键逻辑链(3-6 条)。","Stage 3 分析结果:影响力评分(1-10)含理由、情绪与开发者情绪、技术颠覆性、复合价值、风险矩阵。"]},{icon:"",title:"交互看板(Dashboard)",audience:"决策者 / 分析师",accent:"#0984E3",description:"Next.js 16 暗色主题 Dashboard,零后端架构,Server Component 直接 readFile 读取 daily-report.json 渲染。",features:["KPI 指标卡 + 双环形图(事件类型分布 × 情绪分布)","TOP 5 事件影响力排行 + 实体频率柱状图","四维趋势卡片(技术/应用/政策/资本)+ 深度解读面板","风险信号 + 机会信号双列表,附严重等级标签"]},{icon:"",title:"可读报告(Markdown Report)",audience:"读者 / 订阅者",accent:"#00B894",description:"Stage-4b Editor-in-Chief Agent(Claude Opus)一次性生成结构化 Markdown 日报,适合阅读与分享。",features:["执行摘要 + 当日数据概览(样本总量 / 信源数 / 语言覆盖)","TOP 5 事件 + 为何重要 + 支撑证据","3 篇深度解读(背景 → 影响 → 后续关注)","风险/机会信号各 5-7 条,附严重等级与判断依据"]}]}),t[9]||(t[9]=e("h3",{id:"项目时间线",tabindex:"-1"},[a("项目时间线 "),e("a",{class:"header-anchor",href:"#项目时间线","aria-label":"Permalink to “项目时间线”"},"​")],-1)),n(S,{layout:"vertical",events:[{date:"2026.04",title:"24h MVP 验证",icon:"🚀",description:"从零搭建核心流水线:采集 + 提取 + 分析 + 合成四阶段跑通,验证 AI 信息自动加工的可行性。确立 Markdown + YAML Frontmatter 作为阶段间数据交换格式。"},{date:"2026.05 上旬",title:"Pipeline 工程化",icon:"🔧",description:"引入 asyncio 并发控制、断点续跑、指数退避重试、五级 JSON 恢复解析。完善多信息源配置与三级金字塔筛选策略。三人格并行分析落地。"},{date:"2026.05 中旬",title:"Dashboard 可视化",icon:"📊",description:"Next.js 16 App Router + Recharts + Tailwind CSS 4 暗色主题。零后端架构:Server Component 直接 readFile 读取 JSON,Zod 验证后渲染。双 Schema 契约:Pydantic(Python)+ Zod(TypeScript)。"},{date:"后续",title:"持续运营与 Agent 化",icon:"🤖",description:"定时自动运行 + 推送通知。探索多 Agent 协作深化分析质量,引入历史对比与趋势追踪。开放自定义信息源与人格配置。"}]})]))}});export{H as __pageData,Z as default}; +import{R as p,T as S}from"./chunks/ResourceCard.Cht61sMy.js";import{F as A}from"./chunks/FeatureGrid.LE2S2SBN.js";import{B as m}from"./chunks/Blockquote.B7nHhHWl.js";/* empty css */import{S as v}from"./chunks/StepGuide.Cdy7FBTp.js";import{f as I,c as s,g,o,n as c,F as h,m as y,a as e,k as b,t as d,_ as P,b as n,e as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";import{K as C}from"./chunks/KnowledgePhilosophyBanner.IYXLkN-i.js";/* empty css *//* empty css */const x={class:"mode-header-row"},D={class:"mode-icon"},T={class:"mode-audience"},E={class:"mode-title"},N={class:"mode-desc"},R=I({__name:"ConsumptionModes",props:{modes:{},layout:{default:"grid"}},setup(i){const l=["#6C5CE7","#0984E3","#00B894"];return(t,F)=>i.modes.length?(o(),s("div",{key:0,class:c(["consumption-modes",{"consumption-modes--stacked":i.layout==="stacked"}])},[(o(!0),s(h,null,y(i.modes,(r,u)=>(o(),s("div",{key:u,class:c(["mode-card",{"mode-card--stacked":i.layout==="stacked"}])},[i.layout==="stacked"?(o(),s("div",{key:0,class:"mode-accent-left",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",{class:c(["mode-body",{"mode-card-inner":i.layout==="stacked"}])},[i.layout==="grid"?(o(),s("div",{key:0,class:"mode-accent",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",x,[e("span",D,d(r.icon),1),e("span",T,d(r.audience),1)]),e("h4",E,d(r.title),1),e("p",N,d(r.description),1),e("ul",{class:c(["mode-features",{"mode-features--grid":i.layout==="stacked"}])},[(o(!0),s(h,null,y(r.features,(k,f)=>(o(),s("li",{key:f},d(k),1))),128))],2)],2)],2))),128))],2)):g("",!0)}}),w=P(R,[["__scopeId","data-v-83bc1c5b"]]),B={class:"quick-access",style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1rem"}},H=JSON.parse('{"title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","frontmatter":{"date":"2026-05-15T00:00:00.000Z","title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","permalink":"/insight-labs/ai-insight-engine","categories":["优质信息洞察引擎"]},"headers":[],"relativePath":"insight-labs/ai-insight-engine.md","filePath":"31.Insight Labs/01.优质资讯情报引擎.md"}'),M={name:"insight-labs/ai-insight-engine.md"},Z=Object.assign(M,{setup(i){return(l,t)=>(o(),s("div",null,[t[0]||(t[0]=e("h1",{id:"daily-ai-insight-engine",tabindex:"-1"},[a("Daily AI Insight Engine "),e("a",{class:"header-anchor",href:"#daily-ai-insight-engine","aria-label":"Permalink to “Daily AI Insight Engine”"},"​")],-1)),n(m,{variant:"highlight",insight:"信息高度图名的时代,真正稀缺的不是信息,而是结构化的判断力。",quote:"每天面对 arXiv、Hacker News、TechCrunch 等渠道的海量信息资源,真正需要的是一个能在信息噪音中提取信号、在碎片中构建体系的洞察引擎。"}),e("div",B,[n(p,{resource:{name:"🌍 在线体验",description:"AI 驱动的每日优质信息洞察引擎,四阶段流水线加工产出结构化日报与交互式 Dashboard。",url:"https://daily-ai-insight-engine.vercel.app",type:"tool"},style:{"margin-bottom":"8px"}}),n(p,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南",url:"https://github.com/sqliang/daily-ai-insight-engine",type:"github",tags:["AI","洞察引擎","Pipeline","Dashboard"]},style:{"margin-bottom":"8px"}})]),t[1]||(t[1]=e("div",{style:{"font-size":"0.8125rem",color:"var(--vp-c-text-3)"}},"注:以上链接需自备代理访问(Vercel 部署站 + GitHub 均在境外,国内访问不稳定)",-1)),t[2]||(t[2]=e("h3",{id:"项目简介",tabindex:"-1"},[a("项目简介 "),e("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),t[3]||(t[3]=e("p",null,[e("strong",null,"daily-ai-insight-engine"),a(" 是一款 AI 驱动的信息聚合与分析引擎,致力于解决信息过载难题。它自动采集多个中英文优质信息数据源,涵盖学术论文、技术博客、科技媒体及社区讨论四大领域;经由四阶段流水线处理,完成自动聚合、深度解读与洞见提炼,最终输出结构化的洞察报告与交互式可视化看板。")],-1)),n(C,{title:"黄金三角",titleHighlight:"三维信号聚合",subtitle:"少花时间筛信息,多花时间理解与学习——聚合多个中英文精选优质信息数据源,通过黄金三角串联学术前沿、产品动态与商业信号。经采集、提炼与多维解读,把高噪信息沉淀为带摘要与评分的结构化内容;既可速览日报脉络,也能单篇深读、按需回溯。",pillars:[{title:"技术前沿",description:"学术论文 & 官方技术博客 — 代表技术最前沿与基础研究信号"},{title:"产品与开发者",description:"社区讨论 & 开发者情绪 — 反映产品落地热度与开发者真实反馈"},{title:"商业与资本",description:"科技媒体 & 行业报道 — 捕捉商业落地、资本动向与产业趋势"}]}),n(m,{variant:"insight",insight:"洞察日报不是链接堆砌,而是可直接吸收的判断与脉络",quote:"上游信源经采集、提炼与多维解读后,由主编 Agent 综合为结构化洞察日报。每份日报提供执行摘要、关键事件与风险信号,并配套交互式看板与 Markdown 全文;既可速览当日要点,也能深读复盘、沉淀认知。"}),t[4]||(t[4]=e("ul",null,[e("li",null,[e("strong",null,"主编综述"),a(":执行摘要串联当日最重要变化与判断,为读者提供快速概览。")]),e("li",null,[e("strong",null,"交互看板"),a(":KPI、事件分布、趋势与机会/风险信号,为读者提供可视化洞察。")]),e("li",null,[e("strong",null,"完整报告"),a(":Markdown 全文,支持深读与按需检索。")])],-1)),t[5]||(t[5]=e("p",null,[e("strong",null,"核心能力一览")],-1)),n(A,{items:[{icon:"🔍",title:"多源自动采集",description:"多源核心信息输入,RSS/API/爬虫/无头浏览器四种策略,关键词过滤 + 时间窗口 + 去重"},{icon:"⚙️",title:"四阶段流水线",description:"采集 → 事实提取 → 深度分析 → 总编合成,每阶段产物可回溯、可重跑"},{icon:"🧠",title:"三人格并行分析",description:"技术架构师、资本分析师、风险评估师三种视角并行深度解读,产出 32+ 结构化字段"},{icon:"📊",title:"零后端可视化",description:"Next.js 16 直接读取 JSON 文件渲染 Dashboard,无数据库、无 API 层、无网络请求"}]}),t[6]||(t[6]=e("h3",{id:"四阶段流水线",tabindex:"-1"},[a("四阶段流水线 "),e("a",{class:"header-anchor",href:"#四阶段流水线","aria-label":"Permalink to “四阶段流水线”"},"​")],-1)),n(v,{steps:[{icon:"📥",title:"Stage 1 — 数据源筛选与采集",content:"四种抓取策略(RSS / API / Scrape / Browser)覆盖不同站点类型。关键词过滤 + 时间窗口截断 + URL 去重 + 标题相似度去重,每层配额上限 5 篇,按 impact_score 择优。",status:"completed"},{icon:"📝",title:"Stage 2 — 事实提取",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.1)精确提取:TLDR 摘要、客观事实总结、事件类型、实体识别(公司/技术/人物/产品/地区)、关键逻辑链(3-6 条)、影响力评分(1-10)。支持断点续跑。",status:"completed"},{icon:"🔬",title:"Stage 3 — 深度分析",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.3)实现并行分析:Tech Architect × Capital Analyst × Risk Assessor 三维度同时执行。外层 3 文件并发,内层 asyncio.gather 并行 = 每轮最多 9 个 Agent 调用。失败隔离:单维度异常不阻塞其他维度,产出定性评估、价值评估、前瞻与行动建议。",status:"completed"},{icon:"🧩",title:"Stage 4 — 总编合成",status:"completed",subSteps:[{title:"Stage-4a Frontmatter 聚合",content:"递归扫描分析产物,零 LLM 调用,<1 秒完成。"},{title:"Stage-4b Editor-in-Chief 合成",content:"单次调用、完整输出,产出最终日报。"}]}]}),t[7]||(t[7]=e("h3",{id:"三种消费模式",tabindex:"-1"},[a("三种消费模式 "),e("a",{class:"header-anchor",href:"#三种消费模式","aria-label":"Permalink to “三种消费模式”"},"​")],-1)),t[8]||(t[8]=e("p",null,"流水线产物通过三种方式消费,覆盖从底层数据钻取到高层洞察阅读的完整链路:",-1)),n(w,{layout:"stacked",modes:[{icon:"",title:"数据源探索(Source Explorer)",audience:"开发者 / 研究者",accent:"#6C5CE7",description:"按 Golden Triangle 三级金字塔浏览被筛选、采集的信息数据源,钻取到每篇文章在各阶段的提取与分析结果,理解 Agent 分析链路。",features:["三级金字塔信源卡片网格:A/B/C 三层分组,每张卡片含名称、描述、关键词、文章数及 Tier/语言/抓取策略徽章。","单源详情页:展示该源全部文章列表,每篇标注处理阶段状态(scout → extracted → analyzed)。","Stage 2 提取结果:TLDR 摘要、事件类型、实体识别(公司/技术/人物)、关键逻辑链(3-6 条)。","Stage 3 分析结果:影响力评分(1-10)含理由、情绪与开发者情绪、技术颠覆性、复合价值、风险矩阵。"]},{icon:"",title:"交互看板(Dashboard)",audience:"决策者 / 分析师",accent:"#0984E3",description:"Next.js 16 暗色主题 Dashboard,零后端架构,Server Component 直接 readFile 读取 daily-report.json 渲染。",features:["KPI 指标卡 + 双环形图(事件类型分布 × 情绪分布)","TOP 5 事件影响力排行 + 实体频率柱状图","四维趋势卡片(技术/应用/政策/资本)+ 深度解读面板","风险信号 + 机会信号双列表,附严重等级标签"]},{icon:"",title:"可读报告(Markdown Report)",audience:"读者 / 订阅者",accent:"#00B894",description:"Stage-4b Editor-in-Chief Agent(Claude Opus)一次性生成结构化 Markdown 日报,适合阅读与分享。",features:["执行摘要 + 当日数据概览(样本总量 / 信源数 / 语言覆盖)","TOP 5 事件 + 为何重要 + 支撑证据","3 篇深度解读(背景 → 影响 → 后续关注)","风险/机会信号各 5-7 条,附严重等级与判断依据"]}]}),t[9]||(t[9]=e("h3",{id:"项目时间线",tabindex:"-1"},[a("项目时间线 "),e("a",{class:"header-anchor",href:"#项目时间线","aria-label":"Permalink to “项目时间线”"},"​")],-1)),n(S,{layout:"vertical",events:[{date:"2026.04",title:"24h MVP 验证",icon:"🚀",description:"从零搭建核心流水线:采集 + 提取 + 分析 + 合成四阶段跑通,验证 AI 信息自动加工的可行性。确立 Markdown + YAML Frontmatter 作为阶段间数据交换格式。"},{date:"2026.05 上旬",title:"Pipeline 工程化",icon:"🔧",description:"引入 asyncio 并发控制、断点续跑、指数退避重试、五级 JSON 恢复解析。完善多信息源配置与三级金字塔筛选策略。三人格并行分析落地。"},{date:"2026.05 中旬",title:"Dashboard 可视化",icon:"📊",description:"Next.js 16 App Router + Recharts + Tailwind CSS 4 暗色主题。零后端架构:Server Component 直接 readFile 读取 JSON,Zod 验证后渲染。双 Schema 契约:Pydantic(Python)+ Zod(TypeScript)。"},{date:"后续",title:"持续运营与 Agent 化",icon:"🤖",description:"定时自动运行 + 推送通知。探索多 Agent 协作深化分析质量,引入历史对比与趋势追踪。开放自定义信息源与人格配置。"}]})]))}});export{H as __pageData,Z as default}; diff --git a/assets/insight-labs_ai-insight-engine.md.CSelYfUb.lean.js b/assets/insight-labs_ai-insight-engine.md.FNPXwM48.lean.js similarity index 96% rename from assets/insight-labs_ai-insight-engine.md.CSelYfUb.lean.js rename to assets/insight-labs_ai-insight-engine.md.FNPXwM48.lean.js index 2e32c1c..0bd216e 100644 --- a/assets/insight-labs_ai-insight-engine.md.CSelYfUb.lean.js +++ b/assets/insight-labs_ai-insight-engine.md.FNPXwM48.lean.js @@ -1 +1 @@ -import{R as p,T as S}from"./chunks/ResourceCard.Org1H1aA.js";import{F as A}from"./chunks/FeatureGrid.C9SUnqP9.js";import{B as m}from"./chunks/Blockquote.acMDZFAD.js";/* empty css */import{S as v}from"./chunks/StepGuide.B2IY2DS6.js";import{f as I,c as s,g,o,n as c,F as h,m as y,a as e,k as b,t as d,_ as P,b as n,e as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";import{K as C}from"./chunks/KnowledgePhilosophyBanner.hZQ91uX1.js";/* empty css *//* empty css */const x={class:"mode-header-row"},D={class:"mode-icon"},T={class:"mode-audience"},E={class:"mode-title"},N={class:"mode-desc"},R=I({__name:"ConsumptionModes",props:{modes:{},layout:{default:"grid"}},setup(i){const l=["#6C5CE7","#0984E3","#00B894"];return(t,F)=>i.modes.length?(o(),s("div",{key:0,class:c(["consumption-modes",{"consumption-modes--stacked":i.layout==="stacked"}])},[(o(!0),s(h,null,y(i.modes,(r,u)=>(o(),s("div",{key:u,class:c(["mode-card",{"mode-card--stacked":i.layout==="stacked"}])},[i.layout==="stacked"?(o(),s("div",{key:0,class:"mode-accent-left",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",{class:c(["mode-body",{"mode-card-inner":i.layout==="stacked"}])},[i.layout==="grid"?(o(),s("div",{key:0,class:"mode-accent",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",x,[e("span",D,d(r.icon),1),e("span",T,d(r.audience),1)]),e("h4",E,d(r.title),1),e("p",N,d(r.description),1),e("ul",{class:c(["mode-features",{"mode-features--grid":i.layout==="stacked"}])},[(o(!0),s(h,null,y(r.features,(k,f)=>(o(),s("li",{key:f},d(k),1))),128))],2)],2)],2))),128))],2)):g("",!0)}}),w=P(R,[["__scopeId","data-v-83bc1c5b"]]),B={class:"quick-access",style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1rem"}},H=JSON.parse('{"title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","frontmatter":{"date":"2026-05-15T00:00:00.000Z","title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","permalink":"/insight-labs/ai-insight-engine","categories":["优质信息洞察引擎"]},"headers":[],"relativePath":"insight-labs/ai-insight-engine.md","filePath":"31.Insight Labs/01.优质资讯情报引擎.md"}'),M={name:"insight-labs/ai-insight-engine.md"},Z=Object.assign(M,{setup(i){return(l,t)=>(o(),s("div",null,[t[0]||(t[0]=e("h1",{id:"daily-ai-insight-engine",tabindex:"-1"},[a("Daily AI Insight Engine "),e("a",{class:"header-anchor",href:"#daily-ai-insight-engine","aria-label":"Permalink to “Daily AI Insight Engine”"},"​")],-1)),n(m,{variant:"highlight",insight:"信息高度图名的时代,真正稀缺的不是信息,而是结构化的判断力。",quote:"每天面对 arXiv、Hacker News、TechCrunch 等渠道的海量信息资源,真正需要的是一个能在信息噪音中提取信号、在碎片中构建体系的洞察引擎。"}),e("div",B,[n(p,{resource:{name:"🌍 在线体验",description:"AI 驱动的每日优质信息洞察引擎,四阶段流水线加工产出结构化日报与交互式 Dashboard。",url:"https://daily-ai-insight-engine.vercel.app",type:"tool"},style:{"margin-bottom":"8px"}}),n(p,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南",url:"https://github.com/sqliang/daily-ai-insight-engine",type:"github",tags:["AI","洞察引擎","Pipeline","Dashboard"]},style:{"margin-bottom":"8px"}})]),t[1]||(t[1]=e("div",{style:{"font-size":"0.8125rem",color:"var(--vp-c-text-3)"}},"注:以上链接需自备代理访问(Vercel 部署站 + GitHub 均在境外,国内访问不稳定)",-1)),t[2]||(t[2]=e("h3",{id:"项目简介",tabindex:"-1"},[a("项目简介 "),e("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),t[3]||(t[3]=e("p",null,[e("strong",null,"daily-ai-insight-engine"),a(" 是一款 AI 驱动的信息聚合与分析引擎,致力于解决信息过载难题。它自动采集多个中英文优质信息数据源,涵盖学术论文、技术博客、科技媒体及社区讨论四大领域;经由四阶段流水线处理,完成自动聚合、深度解读与洞见提炼,最终输出结构化的洞察报告与交互式可视化看板。")],-1)),n(C,{title:"黄金三角",titleHighlight:"三维信号聚合",subtitle:"少花时间筛信息,多花时间理解与学习——聚合多个中英文精选优质信息数据源,通过黄金三角串联学术前沿、产品动态与商业信号。经采集、提炼与多维解读,把高噪信息沉淀为带摘要与评分的结构化内容;既可速览日报脉络,也能单篇深读、按需回溯。",pillars:[{title:"技术前沿",description:"学术论文 & 官方技术博客 — 代表技术最前沿与基础研究信号"},{title:"产品与开发者",description:"社区讨论 & 开发者情绪 — 反映产品落地热度与开发者真实反馈"},{title:"商业与资本",description:"科技媒体 & 行业报道 — 捕捉商业落地、资本动向与产业趋势"}]}),n(m,{variant:"insight",insight:"洞察日报不是链接堆砌,而是可直接吸收的判断与脉络",quote:"上游信源经采集、提炼与多维解读后,由主编 Agent 综合为结构化洞察日报。每份日报提供执行摘要、关键事件与风险信号,并配套交互式看板与 Markdown 全文;既可速览当日要点,也能深读复盘、沉淀认知。"}),t[4]||(t[4]=e("ul",null,[e("li",null,[e("strong",null,"主编综述"),a(":执行摘要串联当日最重要变化与判断,为读者提供快速概览。")]),e("li",null,[e("strong",null,"交互看板"),a(":KPI、事件分布、趋势与机会/风险信号,为读者提供可视化洞察。")]),e("li",null,[e("strong",null,"完整报告"),a(":Markdown 全文,支持深读与按需检索。")])],-1)),t[5]||(t[5]=e("p",null,[e("strong",null,"核心能力一览")],-1)),n(A,{items:[{icon:"🔍",title:"多源自动采集",description:"多源核心信息输入,RSS/API/爬虫/无头浏览器四种策略,关键词过滤 + 时间窗口 + 去重"},{icon:"⚙️",title:"四阶段流水线",description:"采集 → 事实提取 → 深度分析 → 总编合成,每阶段产物可回溯、可重跑"},{icon:"🧠",title:"三人格并行分析",description:"技术架构师、资本分析师、风险评估师三种视角并行深度解读,产出 32+ 结构化字段"},{icon:"📊",title:"零后端可视化",description:"Next.js 16 直接读取 JSON 文件渲染 Dashboard,无数据库、无 API 层、无网络请求"}]}),t[6]||(t[6]=e("h3",{id:"四阶段流水线",tabindex:"-1"},[a("四阶段流水线 "),e("a",{class:"header-anchor",href:"#四阶段流水线","aria-label":"Permalink to “四阶段流水线”"},"​")],-1)),n(v,{steps:[{icon:"📥",title:"Stage 1 — 数据源筛选与采集",content:"四种抓取策略(RSS / API / Scrape / Browser)覆盖不同站点类型。关键词过滤 + 时间窗口截断 + URL 去重 + 标题相似度去重,每层配额上限 5 篇,按 impact_score 择优。",status:"completed"},{icon:"📝",title:"Stage 2 — 事实提取",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.1)精确提取:TLDR 摘要、客观事实总结、事件类型、实体识别(公司/技术/人物/产品/地区)、关键逻辑链(3-6 条)、影响力评分(1-10)。支持断点续跑。",status:"completed"},{icon:"🔬",title:"Stage 3 — 深度分析",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.3)实现并行分析:Tech Architect × Capital Analyst × Risk Assessor 三维度同时执行。外层 3 文件并发,内层 asyncio.gather 并行 = 每轮最多 9 个 Agent 调用。失败隔离:单维度异常不阻塞其他维度,产出定性评估、价值评估、前瞻与行动建议。",status:"completed"},{icon:"🧩",title:"Stage 4 — 总编合成",status:"completed",subSteps:[{title:"Stage-4a Frontmatter 聚合",content:"递归扫描分析产物,零 LLM 调用,<1 秒完成。"},{title:"Stage-4b Editor-in-Chief 合成",content:"单次调用、完整输出,产出最终日报。"}]}]}),t[7]||(t[7]=e("h3",{id:"三种消费模式",tabindex:"-1"},[a("三种消费模式 "),e("a",{class:"header-anchor",href:"#三种消费模式","aria-label":"Permalink to “三种消费模式”"},"​")],-1)),t[8]||(t[8]=e("p",null,"流水线产物通过三种方式消费,覆盖从底层数据钻取到高层洞察阅读的完整链路:",-1)),n(w,{layout:"stacked",modes:[{icon:"",title:"数据源探索(Source Explorer)",audience:"开发者 / 研究者",accent:"#6C5CE7",description:"按 Golden Triangle 三级金字塔浏览被筛选、采集的信息数据源,钻取到每篇文章在各阶段的提取与分析结果,理解 Agent 分析链路。",features:["三级金字塔信源卡片网格:A/B/C 三层分组,每张卡片含名称、描述、关键词、文章数及 Tier/语言/抓取策略徽章。","单源详情页:展示该源全部文章列表,每篇标注处理阶段状态(scout → extracted → analyzed)。","Stage 2 提取结果:TLDR 摘要、事件类型、实体识别(公司/技术/人物)、关键逻辑链(3-6 条)。","Stage 3 分析结果:影响力评分(1-10)含理由、情绪与开发者情绪、技术颠覆性、复合价值、风险矩阵。"]},{icon:"",title:"交互看板(Dashboard)",audience:"决策者 / 分析师",accent:"#0984E3",description:"Next.js 16 暗色主题 Dashboard,零后端架构,Server Component 直接 readFile 读取 daily-report.json 渲染。",features:["KPI 指标卡 + 双环形图(事件类型分布 × 情绪分布)","TOP 5 事件影响力排行 + 实体频率柱状图","四维趋势卡片(技术/应用/政策/资本)+ 深度解读面板","风险信号 + 机会信号双列表,附严重等级标签"]},{icon:"",title:"可读报告(Markdown Report)",audience:"读者 / 订阅者",accent:"#00B894",description:"Stage-4b Editor-in-Chief Agent(Claude Opus)一次性生成结构化 Markdown 日报,适合阅读与分享。",features:["执行摘要 + 当日数据概览(样本总量 / 信源数 / 语言覆盖)","TOP 5 事件 + 为何重要 + 支撑证据","3 篇深度解读(背景 → 影响 → 后续关注)","风险/机会信号各 5-7 条,附严重等级与判断依据"]}]}),t[9]||(t[9]=e("h3",{id:"项目时间线",tabindex:"-1"},[a("项目时间线 "),e("a",{class:"header-anchor",href:"#项目时间线","aria-label":"Permalink to “项目时间线”"},"​")],-1)),n(S,{layout:"vertical",events:[{date:"2026.04",title:"24h MVP 验证",icon:"🚀",description:"从零搭建核心流水线:采集 + 提取 + 分析 + 合成四阶段跑通,验证 AI 信息自动加工的可行性。确立 Markdown + YAML Frontmatter 作为阶段间数据交换格式。"},{date:"2026.05 上旬",title:"Pipeline 工程化",icon:"🔧",description:"引入 asyncio 并发控制、断点续跑、指数退避重试、五级 JSON 恢复解析。完善多信息源配置与三级金字塔筛选策略。三人格并行分析落地。"},{date:"2026.05 中旬",title:"Dashboard 可视化",icon:"📊",description:"Next.js 16 App Router + Recharts + Tailwind CSS 4 暗色主题。零后端架构:Server Component 直接 readFile 读取 JSON,Zod 验证后渲染。双 Schema 契约:Pydantic(Python)+ Zod(TypeScript)。"},{date:"后续",title:"持续运营与 Agent 化",icon:"🤖",description:"定时自动运行 + 推送通知。探索多 Agent 协作深化分析质量,引入历史对比与趋势追踪。开放自定义信息源与人格配置。"}]})]))}});export{H as __pageData,Z as default}; +import{R as p,T as S}from"./chunks/ResourceCard.Cht61sMy.js";import{F as A}from"./chunks/FeatureGrid.LE2S2SBN.js";import{B as m}from"./chunks/Blockquote.B7nHhHWl.js";/* empty css */import{S as v}from"./chunks/StepGuide.Cdy7FBTp.js";import{f as I,c as s,g,o,n as c,F as h,m as y,a as e,k as b,t as d,_ as P,b as n,e as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";import{K as C}from"./chunks/KnowledgePhilosophyBanner.IYXLkN-i.js";/* empty css *//* empty css */const x={class:"mode-header-row"},D={class:"mode-icon"},T={class:"mode-audience"},E={class:"mode-title"},N={class:"mode-desc"},R=I({__name:"ConsumptionModes",props:{modes:{},layout:{default:"grid"}},setup(i){const l=["#6C5CE7","#0984E3","#00B894"];return(t,F)=>i.modes.length?(o(),s("div",{key:0,class:c(["consumption-modes",{"consumption-modes--stacked":i.layout==="stacked"}])},[(o(!0),s(h,null,y(i.modes,(r,u)=>(o(),s("div",{key:u,class:c(["mode-card",{"mode-card--stacked":i.layout==="stacked"}])},[i.layout==="stacked"?(o(),s("div",{key:0,class:"mode-accent-left",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",{class:c(["mode-body",{"mode-card-inner":i.layout==="stacked"}])},[i.layout==="grid"?(o(),s("div",{key:0,class:"mode-accent",style:b({background:r.accent||l[u%l.length]})},null,4)):g("",!0),e("div",x,[e("span",D,d(r.icon),1),e("span",T,d(r.audience),1)]),e("h4",E,d(r.title),1),e("p",N,d(r.description),1),e("ul",{class:c(["mode-features",{"mode-features--grid":i.layout==="stacked"}])},[(o(!0),s(h,null,y(r.features,(k,f)=>(o(),s("li",{key:f},d(k),1))),128))],2)],2)],2))),128))],2)):g("",!0)}}),w=P(R,[["__scopeId","data-v-83bc1c5b"]]),B={class:"quick-access",style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1rem"}},H=JSON.parse('{"title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","frontmatter":{"date":"2026-05-15T00:00:00.000Z","title":"Daily AI Insight Engine","description":"多源 AI 信息自动采集、四阶段流水线深度分析、交互式可视化洞察看板","permalink":"/insight-labs/ai-insight-engine","categories":["优质信息洞察引擎"]},"headers":[],"relativePath":"insight-labs/ai-insight-engine.md","filePath":"31.Insight Labs/01.优质资讯情报引擎.md"}'),M={name:"insight-labs/ai-insight-engine.md"},Z=Object.assign(M,{setup(i){return(l,t)=>(o(),s("div",null,[t[0]||(t[0]=e("h1",{id:"daily-ai-insight-engine",tabindex:"-1"},[a("Daily AI Insight Engine "),e("a",{class:"header-anchor",href:"#daily-ai-insight-engine","aria-label":"Permalink to “Daily AI Insight Engine”"},"​")],-1)),n(m,{variant:"highlight",insight:"信息高度图名的时代,真正稀缺的不是信息,而是结构化的判断力。",quote:"每天面对 arXiv、Hacker News、TechCrunch 等渠道的海量信息资源,真正需要的是一个能在信息噪音中提取信号、在碎片中构建体系的洞察引擎。"}),e("div",B,[n(p,{resource:{name:"🌍 在线体验",description:"AI 驱动的每日优质信息洞察引擎,四阶段流水线加工产出结构化日报与交互式 Dashboard。",url:"https://daily-ai-insight-engine.vercel.app",type:"tool"},style:{"margin-bottom":"8px"}}),n(p,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南",url:"https://github.com/sqliang/daily-ai-insight-engine",type:"github",tags:["AI","洞察引擎","Pipeline","Dashboard"]},style:{"margin-bottom":"8px"}})]),t[1]||(t[1]=e("div",{style:{"font-size":"0.8125rem",color:"var(--vp-c-text-3)"}},"注:以上链接需自备代理访问(Vercel 部署站 + GitHub 均在境外,国内访问不稳定)",-1)),t[2]||(t[2]=e("h3",{id:"项目简介",tabindex:"-1"},[a("项目简介 "),e("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),t[3]||(t[3]=e("p",null,[e("strong",null,"daily-ai-insight-engine"),a(" 是一款 AI 驱动的信息聚合与分析引擎,致力于解决信息过载难题。它自动采集多个中英文优质信息数据源,涵盖学术论文、技术博客、科技媒体及社区讨论四大领域;经由四阶段流水线处理,完成自动聚合、深度解读与洞见提炼,最终输出结构化的洞察报告与交互式可视化看板。")],-1)),n(C,{title:"黄金三角",titleHighlight:"三维信号聚合",subtitle:"少花时间筛信息,多花时间理解与学习——聚合多个中英文精选优质信息数据源,通过黄金三角串联学术前沿、产品动态与商业信号。经采集、提炼与多维解读,把高噪信息沉淀为带摘要与评分的结构化内容;既可速览日报脉络,也能单篇深读、按需回溯。",pillars:[{title:"技术前沿",description:"学术论文 & 官方技术博客 — 代表技术最前沿与基础研究信号"},{title:"产品与开发者",description:"社区讨论 & 开发者情绪 — 反映产品落地热度与开发者真实反馈"},{title:"商业与资本",description:"科技媒体 & 行业报道 — 捕捉商业落地、资本动向与产业趋势"}]}),n(m,{variant:"insight",insight:"洞察日报不是链接堆砌,而是可直接吸收的判断与脉络",quote:"上游信源经采集、提炼与多维解读后,由主编 Agent 综合为结构化洞察日报。每份日报提供执行摘要、关键事件与风险信号,并配套交互式看板与 Markdown 全文;既可速览当日要点,也能深读复盘、沉淀认知。"}),t[4]||(t[4]=e("ul",null,[e("li",null,[e("strong",null,"主编综述"),a(":执行摘要串联当日最重要变化与判断,为读者提供快速概览。")]),e("li",null,[e("strong",null,"交互看板"),a(":KPI、事件分布、趋势与机会/风险信号,为读者提供可视化洞察。")]),e("li",null,[e("strong",null,"完整报告"),a(":Markdown 全文,支持深读与按需检索。")])],-1)),t[5]||(t[5]=e("p",null,[e("strong",null,"核心能力一览")],-1)),n(A,{items:[{icon:"🔍",title:"多源自动采集",description:"多源核心信息输入,RSS/API/爬虫/无头浏览器四种策略,关键词过滤 + 时间窗口 + 去重"},{icon:"⚙️",title:"四阶段流水线",description:"采集 → 事实提取 → 深度分析 → 总编合成,每阶段产物可回溯、可重跑"},{icon:"🧠",title:"三人格并行分析",description:"技术架构师、资本分析师、风险评估师三种视角并行深度解读,产出 32+ 结构化字段"},{icon:"📊",title:"零后端可视化",description:"Next.js 16 直接读取 JSON 文件渲染 Dashboard,无数据库、无 API 层、无网络请求"}]}),t[6]||(t[6]=e("h3",{id:"四阶段流水线",tabindex:"-1"},[a("四阶段流水线 "),e("a",{class:"header-anchor",href:"#四阶段流水线","aria-label":"Permalink to “四阶段流水线”"},"​")],-1)),n(v,{steps:[{icon:"📥",title:"Stage 1 — 数据源筛选与采集",content:"四种抓取策略(RSS / API / Scrape / Browser)覆盖不同站点类型。关键词过滤 + 时间窗口截断 + URL 去重 + 标题相似度去重,每层配额上限 5 篇,按 impact_score 择优。",status:"completed"},{icon:"📝",title:"Stage 2 — 事实提取",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.1)精确提取:TLDR 摘要、客观事实总结、事件类型、实体识别(公司/技术/人物/产品/地区)、关键逻辑链(3-6 条)、影响力评分(1-10)。支持断点续跑。",status:"completed"},{icon:"🔬",title:"Stage 3 — 深度分析",content:"构建 Agent(使用 deepseek-v4-pro 模型,温度系数为 0.3)实现并行分析:Tech Architect × Capital Analyst × Risk Assessor 三维度同时执行。外层 3 文件并发,内层 asyncio.gather 并行 = 每轮最多 9 个 Agent 调用。失败隔离:单维度异常不阻塞其他维度,产出定性评估、价值评估、前瞻与行动建议。",status:"completed"},{icon:"🧩",title:"Stage 4 — 总编合成",status:"completed",subSteps:[{title:"Stage-4a Frontmatter 聚合",content:"递归扫描分析产物,零 LLM 调用,<1 秒完成。"},{title:"Stage-4b Editor-in-Chief 合成",content:"单次调用、完整输出,产出最终日报。"}]}]}),t[7]||(t[7]=e("h3",{id:"三种消费模式",tabindex:"-1"},[a("三种消费模式 "),e("a",{class:"header-anchor",href:"#三种消费模式","aria-label":"Permalink to “三种消费模式”"},"​")],-1)),t[8]||(t[8]=e("p",null,"流水线产物通过三种方式消费,覆盖从底层数据钻取到高层洞察阅读的完整链路:",-1)),n(w,{layout:"stacked",modes:[{icon:"",title:"数据源探索(Source Explorer)",audience:"开发者 / 研究者",accent:"#6C5CE7",description:"按 Golden Triangle 三级金字塔浏览被筛选、采集的信息数据源,钻取到每篇文章在各阶段的提取与分析结果,理解 Agent 分析链路。",features:["三级金字塔信源卡片网格:A/B/C 三层分组,每张卡片含名称、描述、关键词、文章数及 Tier/语言/抓取策略徽章。","单源详情页:展示该源全部文章列表,每篇标注处理阶段状态(scout → extracted → analyzed)。","Stage 2 提取结果:TLDR 摘要、事件类型、实体识别(公司/技术/人物)、关键逻辑链(3-6 条)。","Stage 3 分析结果:影响力评分(1-10)含理由、情绪与开发者情绪、技术颠覆性、复合价值、风险矩阵。"]},{icon:"",title:"交互看板(Dashboard)",audience:"决策者 / 分析师",accent:"#0984E3",description:"Next.js 16 暗色主题 Dashboard,零后端架构,Server Component 直接 readFile 读取 daily-report.json 渲染。",features:["KPI 指标卡 + 双环形图(事件类型分布 × 情绪分布)","TOP 5 事件影响力排行 + 实体频率柱状图","四维趋势卡片(技术/应用/政策/资本)+ 深度解读面板","风险信号 + 机会信号双列表,附严重等级标签"]},{icon:"",title:"可读报告(Markdown Report)",audience:"读者 / 订阅者",accent:"#00B894",description:"Stage-4b Editor-in-Chief Agent(Claude Opus)一次性生成结构化 Markdown 日报,适合阅读与分享。",features:["执行摘要 + 当日数据概览(样本总量 / 信源数 / 语言覆盖)","TOP 5 事件 + 为何重要 + 支撑证据","3 篇深度解读(背景 → 影响 → 后续关注)","风险/机会信号各 5-7 条,附严重等级与判断依据"]}]}),t[9]||(t[9]=e("h3",{id:"项目时间线",tabindex:"-1"},[a("项目时间线 "),e("a",{class:"header-anchor",href:"#项目时间线","aria-label":"Permalink to “项目时间线”"},"​")],-1)),n(S,{layout:"vertical",events:[{date:"2026.04",title:"24h MVP 验证",icon:"🚀",description:"从零搭建核心流水线:采集 + 提取 + 分析 + 合成四阶段跑通,验证 AI 信息自动加工的可行性。确立 Markdown + YAML Frontmatter 作为阶段间数据交换格式。"},{date:"2026.05 上旬",title:"Pipeline 工程化",icon:"🔧",description:"引入 asyncio 并发控制、断点续跑、指数退避重试、五级 JSON 恢复解析。完善多信息源配置与三级金字塔筛选策略。三人格并行分析落地。"},{date:"2026.05 中旬",title:"Dashboard 可视化",icon:"📊",description:"Next.js 16 App Router + Recharts + Tailwind CSS 4 暗色主题。零后端架构:Server Component 直接 readFile 读取 JSON,Zod 验证后渲染。双 Schema 契约:Pydantic(Python)+ Zod(TypeScript)。"},{date:"后续",title:"持续运营与 Agent 化",icon:"🤖",description:"定时自动运行 + 推送通知。探索多 Agent 协作深化分析质量,引入历史对比与趋势追踪。开放自定义信息源与人格配置。"}]})]))}});export{H as __pageData,Z as default}; diff --git a/assets/insight-labs_overview.md.CUk-HLJa.js b/assets/insight-labs_overview.md.DQWu6elD.js similarity index 98% rename from assets/insight-labs_overview.md.CUk-HLJa.js rename to assets/insight-labs_overview.md.DQWu6elD.js index 3a8ded1..4d19ea4 100644 --- a/assets/insight-labs_overview.md.CUk-HLJa.js +++ b/assets/insight-labs_overview.md.DQWu6elD.js @@ -1,4 +1,4 @@ -import{B as k}from"./chunks/Blockquote.acMDZFAD.js";import{K as f}from"./chunks/KnowledgePhilosophyBanner.hZQ91uX1.js";import{F as u}from"./chunks/FeatureGrid.C9SUnqP9.js";/* empty css */import{f as y,s as h,q as L,c as s,o,k as v,n as D,g as A,a as t,t as a,F as m,m as F,_ as w,r as p,b as r,e as n,w as B}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css *//* empty css */import{F as I,C as b}from"./chunks/Callout.B-9wy57V.js";import{H as C}from"./chunks/HighLightText.pXHFEzDb.js";/* empty css *//* empty css */const x={key:0,class:"dual-title"},W={class:"dual-row"},M={class:"dual-card dual-left"},P={class:"card-header"},O={key:0,class:"card-icon"},j={class:"card-label"},S=["innerHTML"],_={key:1,class:"card-points"},R={class:"point-num"},T={class:"point-text"},N={class:"dual-connector"},H={class:"connector-badge"},Z={class:"dual-card dual-right"},V={class:"card-header"},q={key:0,class:"card-icon"},K={class:"card-label"},z=["innerHTML"],G={key:1,class:"card-points"},J={class:"point-num"},Y={class:"point-text"},$=y({__name:"EditorialDualPanel",props:{title:{},connector:{default:"vs"},leftIcon:{},rightIcon:{},leftAccent:{default:"#6366f1"},rightAccent:{default:"#f59e0b"},left:{},right:{}},setup(e){const c=h(null),g=h(!1);return L(()=>{if(!c.value)return;const i=new IntersectionObserver(([l])=>{l.isIntersecting&&(g.value=!0,i.disconnect())},{threshold:.15});i.observe(c.value)}),(i,l)=>(o(),s("div",{ref_key:"root",ref:c,class:D(["editorial-dual",{"is-visible":g.value}]),style:v({"--accent-left":e.leftAccent,"--accent-right":e.rightAccent})},[e.title?(o(),s("div",x,a(e.title),1)):A("",!0),t("div",W,[t("div",M,[l[0]||(l[0]=t("div",{class:"card-accent-bar"},null,-1)),t("div",P,[e.leftIcon?(o(),s("span",O,a(e.leftIcon),1)):A("",!0),t("span",j,a(e.left.label),1)]),e.left.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.left.description},null,8,S)):A("",!0),e.left.points?.length?(o(),s("ol",_,[(o(!0),s(m,null,F(e.left.points,(d,E)=>(o(),s("li",{key:E},[t("span",R,a(String(E+1).padStart(2,"0")),1),t("span",T,a(d),1)]))),128))])):A("",!0)]),t("div",N,[t("span",H,a(e.connector),1)]),t("div",Z,[l[1]||(l[1]=t("div",{class:"card-accent-bar"},null,-1)),t("div",V,[e.rightIcon?(o(),s("span",q,a(e.rightIcon),1)):A("",!0),t("span",K,a(e.right.label),1)]),e.right.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.right.description},null,8,z)):A("",!0),e.right.points?.length?(o(),s("ol",G,[(o(!0),s(m,null,F(e.right.points,(d,E)=>(o(),s("li",{key:E},[t("span",J,a(String(E+1).padStart(2,"0")),1),t("span",Y,a(d),1)]))),128))])):A("",!0)])])],6))}}),Q=w($,[["__scopeId","data-v-491aeed1"]]),At=JSON.parse('{"title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","frontmatter":{"date":"2026-05-16T00:00:00.000Z","title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","permalink":"/insight-labs/overview","categories":["知识库体系化建设"],"tags":["Zettelkasten","Obsidian","LLM Wiki","Knowledge Engineering","Digital Garden"]},"headers":[],"relativePath":"insight-labs/overview.md","filePath":"31.Insight Labs/00.overview.md"}'),U={name:"insight-labs/overview.md"},dt=Object.assign(U,{setup(e){const c=` +import{B as k}from"./chunks/Blockquote.B7nHhHWl.js";import{K as f}from"./chunks/KnowledgePhilosophyBanner.IYXLkN-i.js";import{F as u}from"./chunks/FeatureGrid.LE2S2SBN.js";/* empty css */import{f as y,s as h,q as L,c as s,o,k as v,n as D,g as A,a as t,t as a,F as m,m as F,_ as w,r as p,b as r,e as n,w as B}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css *//* empty css */import{F as I,C as b}from"./chunks/Callout.Bss1uX1v.js";import{H as C}from"./chunks/HighLightText.DNC3BKyb.js";/* empty css *//* empty css */const x={key:0,class:"dual-title"},W={class:"dual-row"},M={class:"dual-card dual-left"},P={class:"card-header"},O={key:0,class:"card-icon"},j={class:"card-label"},S=["innerHTML"],_={key:1,class:"card-points"},R={class:"point-num"},T={class:"point-text"},N={class:"dual-connector"},H={class:"connector-badge"},Z={class:"dual-card dual-right"},V={class:"card-header"},q={key:0,class:"card-icon"},K={class:"card-label"},z=["innerHTML"],G={key:1,class:"card-points"},J={class:"point-num"},Y={class:"point-text"},$=y({__name:"EditorialDualPanel",props:{title:{},connector:{default:"vs"},leftIcon:{},rightIcon:{},leftAccent:{default:"#6366f1"},rightAccent:{default:"#f59e0b"},left:{},right:{}},setup(e){const c=h(null),g=h(!1);return L(()=>{if(!c.value)return;const i=new IntersectionObserver(([l])=>{l.isIntersecting&&(g.value=!0,i.disconnect())},{threshold:.15});i.observe(c.value)}),(i,l)=>(o(),s("div",{ref_key:"root",ref:c,class:D(["editorial-dual",{"is-visible":g.value}]),style:v({"--accent-left":e.leftAccent,"--accent-right":e.rightAccent})},[e.title?(o(),s("div",x,a(e.title),1)):A("",!0),t("div",W,[t("div",M,[l[0]||(l[0]=t("div",{class:"card-accent-bar"},null,-1)),t("div",P,[e.leftIcon?(o(),s("span",O,a(e.leftIcon),1)):A("",!0),t("span",j,a(e.left.label),1)]),e.left.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.left.description},null,8,S)):A("",!0),e.left.points?.length?(o(),s("ol",_,[(o(!0),s(m,null,F(e.left.points,(d,E)=>(o(),s("li",{key:E},[t("span",R,a(String(E+1).padStart(2,"0")),1),t("span",T,a(d),1)]))),128))])):A("",!0)]),t("div",N,[t("span",H,a(e.connector),1)]),t("div",Z,[l[1]||(l[1]=t("div",{class:"card-accent-bar"},null,-1)),t("div",V,[e.rightIcon?(o(),s("span",q,a(e.rightIcon),1)):A("",!0),t("span",K,a(e.right.label),1)]),e.right.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.right.description},null,8,z)):A("",!0),e.right.points?.length?(o(),s("ol",G,[(o(!0),s(m,null,F(e.right.points,(d,E)=>(o(),s("li",{key:E},[t("span",J,a(String(E+1).padStart(2,"0")),1),t("span",Y,a(d),1)]))),128))])):A("",!0)])])],6))}}),Q=w($,[["__scopeId","data-v-491aeed1"]]),At=JSON.parse('{"title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","frontmatter":{"date":"2026-05-16T00:00:00.000Z","title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","permalink":"/insight-labs/overview","categories":["知识库体系化建设"],"tags":["Zettelkasten","Obsidian","LLM Wiki","Knowledge Engineering","Digital Garden"]},"headers":[],"relativePath":"insight-labs/overview.md","filePath":"31.Insight Labs/00.overview.md"}'),U={name:"insight-labs/overview.md"},dt=Object.assign(U,{setup(e){const c=` 卡片盒笔记法(Zettelkasten)是一种基于双向链接的笔记系统,强调知识不应按主题强制归类,而应通过原子化笔记 + 双向链接,从底层自然编织成一张概念网络。由德国社会学家卢曼提出,他用这套方法写出了 70 本著作,其核心并非卡片本身,而在于让笔记之间产生对话。

diff --git a/assets/insight-labs_overview.md.CUk-HLJa.lean.js b/assets/insight-labs_overview.md.DQWu6elD.lean.js similarity index 98% rename from assets/insight-labs_overview.md.CUk-HLJa.lean.js rename to assets/insight-labs_overview.md.DQWu6elD.lean.js index 3a8ded1..4d19ea4 100644 --- a/assets/insight-labs_overview.md.CUk-HLJa.lean.js +++ b/assets/insight-labs_overview.md.DQWu6elD.lean.js @@ -1,4 +1,4 @@ -import{B as k}from"./chunks/Blockquote.acMDZFAD.js";import{K as f}from"./chunks/KnowledgePhilosophyBanner.hZQ91uX1.js";import{F as u}from"./chunks/FeatureGrid.C9SUnqP9.js";/* empty css */import{f as y,s as h,q as L,c as s,o,k as v,n as D,g as A,a as t,t as a,F as m,m as F,_ as w,r as p,b as r,e as n,w as B}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css *//* empty css */import{F as I,C as b}from"./chunks/Callout.B-9wy57V.js";import{H as C}from"./chunks/HighLightText.pXHFEzDb.js";/* empty css *//* empty css */const x={key:0,class:"dual-title"},W={class:"dual-row"},M={class:"dual-card dual-left"},P={class:"card-header"},O={key:0,class:"card-icon"},j={class:"card-label"},S=["innerHTML"],_={key:1,class:"card-points"},R={class:"point-num"},T={class:"point-text"},N={class:"dual-connector"},H={class:"connector-badge"},Z={class:"dual-card dual-right"},V={class:"card-header"},q={key:0,class:"card-icon"},K={class:"card-label"},z=["innerHTML"],G={key:1,class:"card-points"},J={class:"point-num"},Y={class:"point-text"},$=y({__name:"EditorialDualPanel",props:{title:{},connector:{default:"vs"},leftIcon:{},rightIcon:{},leftAccent:{default:"#6366f1"},rightAccent:{default:"#f59e0b"},left:{},right:{}},setup(e){const c=h(null),g=h(!1);return L(()=>{if(!c.value)return;const i=new IntersectionObserver(([l])=>{l.isIntersecting&&(g.value=!0,i.disconnect())},{threshold:.15});i.observe(c.value)}),(i,l)=>(o(),s("div",{ref_key:"root",ref:c,class:D(["editorial-dual",{"is-visible":g.value}]),style:v({"--accent-left":e.leftAccent,"--accent-right":e.rightAccent})},[e.title?(o(),s("div",x,a(e.title),1)):A("",!0),t("div",W,[t("div",M,[l[0]||(l[0]=t("div",{class:"card-accent-bar"},null,-1)),t("div",P,[e.leftIcon?(o(),s("span",O,a(e.leftIcon),1)):A("",!0),t("span",j,a(e.left.label),1)]),e.left.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.left.description},null,8,S)):A("",!0),e.left.points?.length?(o(),s("ol",_,[(o(!0),s(m,null,F(e.left.points,(d,E)=>(o(),s("li",{key:E},[t("span",R,a(String(E+1).padStart(2,"0")),1),t("span",T,a(d),1)]))),128))])):A("",!0)]),t("div",N,[t("span",H,a(e.connector),1)]),t("div",Z,[l[1]||(l[1]=t("div",{class:"card-accent-bar"},null,-1)),t("div",V,[e.rightIcon?(o(),s("span",q,a(e.rightIcon),1)):A("",!0),t("span",K,a(e.right.label),1)]),e.right.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.right.description},null,8,z)):A("",!0),e.right.points?.length?(o(),s("ol",G,[(o(!0),s(m,null,F(e.right.points,(d,E)=>(o(),s("li",{key:E},[t("span",J,a(String(E+1).padStart(2,"0")),1),t("span",Y,a(d),1)]))),128))])):A("",!0)])])],6))}}),Q=w($,[["__scopeId","data-v-491aeed1"]]),At=JSON.parse('{"title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","frontmatter":{"date":"2026-05-16T00:00:00.000Z","title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","permalink":"/insight-labs/overview","categories":["知识库体系化建设"],"tags":["Zettelkasten","Obsidian","LLM Wiki","Knowledge Engineering","Digital Garden"]},"headers":[],"relativePath":"insight-labs/overview.md","filePath":"31.Insight Labs/00.overview.md"}'),U={name:"insight-labs/overview.md"},dt=Object.assign(U,{setup(e){const c=` +import{B as k}from"./chunks/Blockquote.B7nHhHWl.js";import{K as f}from"./chunks/KnowledgePhilosophyBanner.IYXLkN-i.js";import{F as u}from"./chunks/FeatureGrid.LE2S2SBN.js";/* empty css */import{f as y,s as h,q as L,c as s,o,k as v,n as D,g as A,a as t,t as a,F as m,m as F,_ as w,r as p,b as r,e as n,w as B}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css *//* empty css */import{F as I,C as b}from"./chunks/Callout.Bss1uX1v.js";import{H as C}from"./chunks/HighLightText.DNC3BKyb.js";/* empty css *//* empty css */const x={key:0,class:"dual-title"},W={class:"dual-row"},M={class:"dual-card dual-left"},P={class:"card-header"},O={key:0,class:"card-icon"},j={class:"card-label"},S=["innerHTML"],_={key:1,class:"card-points"},R={class:"point-num"},T={class:"point-text"},N={class:"dual-connector"},H={class:"connector-badge"},Z={class:"dual-card dual-right"},V={class:"card-header"},q={key:0,class:"card-icon"},K={class:"card-label"},z=["innerHTML"],G={key:1,class:"card-points"},J={class:"point-num"},Y={class:"point-text"},$=y({__name:"EditorialDualPanel",props:{title:{},connector:{default:"vs"},leftIcon:{},rightIcon:{},leftAccent:{default:"#6366f1"},rightAccent:{default:"#f59e0b"},left:{},right:{}},setup(e){const c=h(null),g=h(!1);return L(()=>{if(!c.value)return;const i=new IntersectionObserver(([l])=>{l.isIntersecting&&(g.value=!0,i.disconnect())},{threshold:.15});i.observe(c.value)}),(i,l)=>(o(),s("div",{ref_key:"root",ref:c,class:D(["editorial-dual",{"is-visible":g.value}]),style:v({"--accent-left":e.leftAccent,"--accent-right":e.rightAccent})},[e.title?(o(),s("div",x,a(e.title),1)):A("",!0),t("div",W,[t("div",M,[l[0]||(l[0]=t("div",{class:"card-accent-bar"},null,-1)),t("div",P,[e.leftIcon?(o(),s("span",O,a(e.leftIcon),1)):A("",!0),t("span",j,a(e.left.label),1)]),e.left.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.left.description},null,8,S)):A("",!0),e.left.points?.length?(o(),s("ol",_,[(o(!0),s(m,null,F(e.left.points,(d,E)=>(o(),s("li",{key:E},[t("span",R,a(String(E+1).padStart(2,"0")),1),t("span",T,a(d),1)]))),128))])):A("",!0)]),t("div",N,[t("span",H,a(e.connector),1)]),t("div",Z,[l[1]||(l[1]=t("div",{class:"card-accent-bar"},null,-1)),t("div",V,[e.rightIcon?(o(),s("span",q,a(e.rightIcon),1)):A("",!0),t("span",K,a(e.right.label),1)]),e.right.description?(o(),s("p",{key:0,class:"card-desc",innerHTML:e.right.description},null,8,z)):A("",!0),e.right.points?.length?(o(),s("ol",G,[(o(!0),s(m,null,F(e.right.points,(d,E)=>(o(),s("li",{key:E},[t("span",J,a(String(E+1).padStart(2,"0")),1),t("span",Y,a(d),1)]))),128))])):A("",!0)])])],6))}}),Q=w($,[["__scopeId","data-v-491aeed1"]]),At=JSON.parse('{"title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","frontmatter":{"date":"2026-05-16T00:00:00.000Z","title":"AI 驱动的体系化知识库建设","description":"以卡片盒笔记法为骨架、LLM Wiki+Library 双轨制为血脉、AI 为加速引擎的个人知识管理方法论。从碎片洞察到原子笔记,从概念网络到内容输出,构建可持续演化的知识内化系统。","permalink":"/insight-labs/overview","categories":["知识库体系化建设"],"tags":["Zettelkasten","Obsidian","LLM Wiki","Knowledge Engineering","Digital Garden"]},"headers":[],"relativePath":"insight-labs/overview.md","filePath":"31.Insight Labs/00.overview.md"}'),U={name:"insight-labs/overview.md"},dt=Object.assign(U,{setup(e){const c=` 卡片盒笔记法(Zettelkasten)是一种基于双向链接的笔记系统,强调知识不应按主题强制归类,而应通过原子化笔记 + 双向链接,从底层自然编织成一张概念网络。由德国社会学家卢曼提出,他用这套方法写出了 70 本著作,其核心并非卡片本身,而在于让笔记之间产生对话。

diff --git a/assets/insight-labs_repo-insight_a2ui.md.Dgw3F5ap.js b/assets/insight-labs_repo-insight_a2ui.md.Dgw3F5ap.js new file mode 100644 index 0000000..255e689 --- /dev/null +++ b/assets/insight-labs_repo-insight_a2ui.md.Dgw3F5ap.js @@ -0,0 +1,803 @@ +import{_ as h,r as i,c as e,o as k,d as a,b as n,w as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const C=JSON.parse('{"title":"A2UI 开源项目解读","description":"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"A2UI 开源项目解读","tldr":"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。","description":"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。","abstract":null,"permalink":"/insight-labs/repo-insight/a2ui","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/a2ui.md","filePath":"31.Insight Labs/11.Reop Insight Reports/13.a2ui.md"}'),r={name:"insight-labs/repo-insight/a2ui.md"};function F(d,s,g,c,E,y){const p=i("MermaidChart"),l=i("ClientOnly");return k(),e("div",null,[s[0]||(s[0]=a(`

A2UI 开源项目解读

项目信息

  • 项目名称:A2UI

  • 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。

  • 项目地址:https://github.com/google/a2ui

  • 官方文档:https://a2ui.org/

  • 解决的核心痛点

    • 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。

    • 远程 Agent 无法安全操控 UI:在多 Agent 系统中,Agent 通常运行在远程服务器上,无法直接操作客户端 UI。传统方案(iframe 嵌入 HTML/JS)存在严重的安全风险和样式隔离问题。A2UI 以声明式数据格式替代可执行代码,实现"像数据一样安全,像代码一样表达力强"。

    • 跨平台 UI 生成缺乏统一标准:不同平台(Web、iOS、Android、Flutter)需要不同的 UI 实现。A2UI 将 UI 结构与实现分离,同一份 JSON 可在多种框架上渲染。

1. 项目概览

1.1 项目定位与核心价值

一句话定位:A2UI 是一个开源的 Agent-to-User Interface 协议和库集合,让 AI Agent 能够"说 UI 语言"——通过声明式 JSON 格式生成和传递丰富的交互式用户界面

解决的核心痛点

  1. 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。

  2. 远程 Agent 无法安全操控 UI:在多 Agent 系统中,Agent 通常运行在远程服务器上,无法直接操作客户端 UI。传统方案(iframe 嵌入 HTML/JS)存在严重的安全风险和样式隔离问题。A2UI 以声明式数据格式替代可执行代码,实现"像数据一样安全,像代码一样表达力强"。

  3. 跨平台 UI 生成缺乏统一标准:不同平台(Web、iOS、Android、Flutter)需要不同的 UI 实现。A2UI 将 UI 结构与实现分离,同一份 JSON 可在多种框架上渲染。

目标用户画像

角色描述
Agent 开发者使用 Python/Kotlin SDK 让 Agent 生成 A2UI JSON 的服务端开发者
客户端开发者使用 Lit/React/Angular/Flutter 渲染 A2UI 的前端/移动端开发者
平台构建者构建 Agent 平台的团队,需要统一 Agent UI 生成能力
最终用户通过 Agent 驱动的应用获得更丰富交互体验的普通用户

1.2 目标用户与使用场景

核心业务场景

  • 场景一:动态数据收集 — Agent 根据对话上下文动态生成定制化表单(日期选择器、滑块、输入框等),例如预订特色餐厅时的偏好收集。
  • 场景二:远程子 Agent 编排 — 编排器 Agent 将任务委托给远程专业 Agent,远程 Agent 返回 UI 负载,在主聊天窗口中渲染。
  • 场景三:自适应工作流 — 企业级 Agent 根据用户查询即时生成审批仪表盘或数据可视化界面。

典型使用 Case(端到端流程)

  1. 用户在聊天界面中提出请求,如"帮我找附近的意大利餐厅"
  2. Agent(运行在服务端,如 Google ADK)处理请求,生成包含餐厅列表、评分筛选、预订按钮等组件的 A2UI JSON
  3. JSON 通过 A2A 或 AG UI 传输协议发送到客户端
  4. 客户端 A2UI 渲染器(如 Lit/Angular/React)接收到 JSON,使用本地组件目录映射渲染为原生 UI
  5. 用户与 UI 交互(点击按钮、填入表单等),交互事件通过协议回传 Agent
  6. Agent 接收用户操作,动态更新 UI(增量补丁),形成闭环交互

1.3 核心技术亮点

  1. 安全优先:Agent 只能请求渲染客户端预批准目录中的组件,无法执行任意代码
  2. LLM 友好的增量更新:扁平组件列表 + ID 引用,LLM 易于逐组件生成和修正
  3. 框架无关:同一份 A2UI JSON 可在 Lit、React、Angular、Flutter、SwiftUI 上渲染
  4. 渐进式渲染:流式解析引擎支持逐组件产出,用户看到"逐步构建"的 UI
  5. 响应式数据绑定:基于 Preact Signals 的细粒度响应式系统,数据变更时只更新相关组件
  6. Schema 驱动的通用绑定:GenericBinder 通过分析 Zod Schema 自动适配组件属性,无需手写绑定逻辑

1.4 技术栈与选型对比

层级技术选择关键依赖
Agent SDK (Python)Python 3.10+google-adk, google-genai, jsonschema, a2a-sdk
Agent SDK (Kotlin)Kotlin / JVMGradle
渲染核心 (Web)TypeScriptZod, Preact Signals
主力渲染器Lit (Web Components) v3@lit/context, @lit-labs/signals
React 渲染器React + TypeScript-
Angular 渲染器Angular Standalone-
Flutter 渲染器Dart (GenUI SDK)-
可视化工具Next.js 14 (App Router)React
文档站点MkDocs Material-
传输协议A2A, AG UI, MCP-

关键选型决策

  1. 声明式 JSON 而非可执行代码:安全性 > 灵活性。Agent 不可信任,声明式数据确保 Agent 只能请求预批准组件。
  2. 独立协议层而非直接使用 HTML:跨平台 > 简单性。引入新抽象层的学习成本换来真正的"一次生成,多端渲染"。
  3. Lit (Web Components) 作为主力渲染器:Web 标准保证了跨框架兼容性,轻量化适合渲染简单 UI。
  4. GenericBinder (Schema 驱动) 而非手写绑定:可扩展性 > 直观性。新增组件只需定义 Zod Schema,无需编写新的数据绑定代码。

2. 整体架构设计

2.1 架构概述

A2UI 采用协议驱动的分层架构模式。系统共分为五层:规范定义层(Specification)、Agent 生成层(Agent SDKs)、传输适配层(Transport)、渲染核心层(Web Core)和客户端渲染层(Renderers)。各层通过标准化的 JSON 协议消息松耦合连接,上层生成 A2UI JSON 消息,下层解析并渲染为原生 UI。核心设计哲学是"声明式数据替代可执行代码",Agent 只能请求客户端预批准组件目录中的组件。

整体架构图 (plainText)

text
+=======================================================================+
+|                     A2UI 整体架构 (Protocol-Driven Architecture)         |
++=======================================================================+
+
++---------------------------------------------+
+|           Specification Layer (规范层)        |
+|   v0.8 (Stable) | v0.9 (Current) | v0.10 (Draft)  |
+|   JSON Schema 协议定义 + 组件目录规范             |
++------------------+--------------------------+
+                   | (定义协议格式)
+                   v
++---------------------------------------------+
+|          Agent SDK Layer (Agent 生成层)       |
+|  +------------------+  +------------------+ |
+|  | Python SDK       |  | Kotlin SDK       | |
+|  | - Schema Manager |  | - StreamingParser| |
+|  | - Stream Parser  |  | - ...            | |
+|  | - Catalog System |  |                  | |
+|  | - ADK Integration|  |                  | |
+|  +------------------+  +------------------+ |
++------------------+--------------------------+
+                   | (生成 A2UI JSON 消息)
+                   v
++---------------------------------------------+
+|          Transport Layer (传输适配层)          |
+|  +---------+  +--------+  +-----------+     |
+|  | A2A     |  | AG UI  |  | MCP       |     |
+|  | Protocol|  |(Copilot)|  | Protocol  |     |
+|  +---------+  +--------+  +-----------+     |
++------------------+--------------------------+
+                   | (传输 JSON 消息到客户端)
+                   v
++---------------------------------------------+
+|        Web Core Layer (渲染核心层)            |
+|  +---------------------------------------+  |
+|  | MessageProcessor (消息处理器)          |  |
+|  | - 消息验证与分发                        |  |
+|  | - Surface 生命周期管理                  |  |
+|  +---------------------------------------+  |
+|  | State Management (状态管理)            |  |
+|  | - DataModel (响应式数据模型)            |  |
+|  | - SurfaceModel (Surface 模型)          |  |
+|  | - ComponentModel (组件模型)            |  |
+|  +---------------------------------------+  |
+|  | Rendering Engine (渲染引擎)            |  |
+|  | - GenericBinder (通用数据绑定)          |  |
+|  | - ComponentContext (组件上下文)         |  |
+|  | - DataContext (数据上下文)             |  |
+|  +---------------------------------------+  |
++------------------+--------------------------+
+                   | (提供数据绑定和状态)
+                   v
++---------------------------------------------+
+|        Renderers Layer (客户端渲染层)          |
+|  +---------+ +-------+ +---------+ +------+ |
+|  | Lit     | | React | | Angular | |Flutter| |
+|  | (主力)  | |       | |         | |      | |
+|  +---------+ +-------+ +---------+ +------+ |
+|  +------------------+                        |
+|  | Markdown         |                       |
+|  +------------------+                        |
++---------------------------------------------+
+                   |
+                   v
+          +------------------+
+          | End User (最终用户) |
+          | - Browser         |
+          | - Mobile App      |
+          | - Desktop App     |
+          +------------------+

2.2 目录结构

shell
A2UI/
+├── specification/                              # 【核心基建】A2UI 协议规范定义 (所有版本的协议 JSON Schema)
+   ├── v0_8/                                   # 【核心基建】v0.8 稳定版协议规范 (已锁定, 不再接受修改)
+   └── README.md                           # 【核心基建】v0.8 协议文档入口
+   ├── v0_9/                                   # 【核心基建】v0.9 版协议规范 (已发布, 不再活跃开发)
+   └── README.md                           # 【核心基建】v0.9 协议文档入口 + Evolution Guide
+   ├── v0_9_1/                                 # 【核心基建】v0.9.1 版协议规范 (小版本修正)
+   └── README.md                           # 【核心基建】v0.9.1 协议文档入口
+   ├── v0_10/                                  # 【核心基建】v0.10 版协议规范 (当前开发中的版本)
+   └── README.md                           # 【核心基建】v0.10 协议文档入口
+   └── scripts/                                # 【工具集】规范验证与处理脚本
+       └── validate.py                         # 【工具集】JSON Schema 规范验证工具
+
+├── agent_sdks/                                 # 【核心基建】Agent 端 SDK (服务端, 用于生成 A2UI JSON)
+   ├── python/                                 # 【核心基建】Python Agent SDK (主力实现)
+   ├── src/a2ui/                           # 【核心基建】Python SDK 源码
+   ├── __init__.py                     # 【核心基建】SDK 入口 (导出 __version__)
+   ├── version.py                      # 【配置】版本号常量
+   ├── inference_strategy.py           # 【核心基建】LLM 推理策略基类 (Adapter Pattern)
+   ├── parser/                         # 【核心基建】流式 JSON 解析引擎 (Factory Pattern)
+   ├── parser.py                   # 【核心基建】基础解析器
+   ├── streaming.py                # 【核心基建】A2uiStreamParser 工厂类 (版本路由)
+   ├── streaming_v08.py            # 【核心基建】v0.8 流式解析器实现
+   ├── streaming_v09.py            # 【核心基建】v0.9 流式解析器实现 (状态机)
+   ├── payload_fixer.py            # 【工具集】LLM 输出 payload 修复/纠错
+   ├── response_part.py            # 【核心基建】流式解析产出事件类型 (ResponsePart)
+   └── constants.py                # 【配置】解析器常量 (CUTTABLE_KEYS 等)
+   ├── schema/                         # 【核心基建】Schema 与 Catalog 管理 (协议安全核心)
+   ├── manager.py                  # 【核心基建】A2uiSchemaManager - LLM 提示词生成 + Catalog 协商
+   ├── catalog.py                  # 【核心基建】A2uiCatalog - 组件目录定义与 Schema 验证
+   ├── catalog_provider.py         # 【核心基建】CatalogProvider 接口 (Plugin/Extension Point)
+   ├── validator.py                # 【核心基建】拓扑分析 + 组件引用/必填字段提取
+   ├── common_modifiers.py         # 【核心基建】Schema Modifier 管道 (支持自定义修饰符)
+   ├── utils.py                    # 【工具集】bundled resource 加载工具
+   └── constants.py                # 【配置】协议版本与 Schema 文件映射
+   ├── adk/                            # 【核心基建】Google ADK (Agent Development Kit) 集成
+   ├── send_a2ui_to_client_toolset.py  # 【核心基建】ADK Toolset - 暴露 A2UI 工具给 LLM
+   ├── __init__.py                 # 【核心基建】ADK 模块入口
+   └── a2a/                        # 【核心基建】A2A 协议桥接
+       ├── event_converter.py      # 【核心基建】A2A Event → A2UI 事件转换器
+       └── part_converter.py       # 【核心基建】A2A Part → A2UI 消息转换器
+   ├── a2a/                            # 【核心基建】A2A 协议扩展 (Agent-to-Agent)
+   ├── extension.py                # 【核心基建】A2A AgentExtension 注册
+   └── parts.py                    # 【核心基建】A2UI 专用 A2A Part 类型定义
+   ├── basic_catalog/                  # 【核心基建】基础组件目录 (Button, Text, Card 等标准组件)
+   ├── provider.py                 # 【核心基建】BasicCatalogProvider - 加载 bundled catalog.json
+   ├── constants.py                # 【配置】基础组件目录 ID 常量
+   └── __init__.py                 # 【核心基建】模块入口
+   └── template/                       # 【核心基建】模板管理系统 (预定义 UI 模板)
+       ├── manager.py                  # 【核心基建】TemplateManager - 模板生命周期管理
+       └── __init__.py                 # 【核心基建】模块入口
+   ├── tests/                              # 【质量保证】Python SDK 测试
+   └── pyproject.toml                      # 【配置】Python 项目配置 (hatchling + uv)
+   ├── kotlin/                                 # 【核心基建】Kotlin Agent SDK (JVM/Android)
+   ├── src/main/kotlin/com/google/a2ui/   # 【核心基建】Kotlin SDK 源码
+   └── parser/StreamingParser.kt       # 【核心基建】Kotlin 流式解析器 (1114行, 与 Python 版功能对等)
+   └── gradle/                             # 【配置】Gradle 构建系统配置
+   └── conformance/                            # 【质量保证】跨 SDK 一致性测试 (确保 Python/Kotlin 行为一致)
+       ├── suites/                             # 【质量保证】测试套件定义
+       ├── test_data/                          # 【质量保证】共享测试数据 (JSON fixtures)
+       └── tests/                              # 【质量保证】一致性测试用例
+
+├── renderers/                                  # 【核心基建】客户端渲染器集合 (多框架实现)
+   ├── web_core/                               # 【核心基建】Web 渲染核心库 (所有 Web 渲染器的共享基础设施)
+   └── src/
+       ├── v0_8/                           # 【核心基建】v0.8 协议核心实现
+   ├── types/colors.ts             # 【核心基建】颜色系统类型定义 (Material Design 风格)
+   ├── errors.ts                   # 【核心基建】v0.8 错误类型定义
+   └── index.ts                    # 【核心基建】v0.8 模块入口
+       └── v0_9/                           # 【核心基建】v0.9 协议核心实现 (当前主力版本)
+           ├── schema/                     # 【核心基建】协议消息 Schema (Zod → JSON Schema)
+   ├── server-to-client.ts     # 【核心基建】服务端→客户端消息定义 (4种消息类型)
+   ├── client-to-server.ts     # 【核心基建】客户端→服务端消息定义 (Action + DataModel)
+   ├── common-types.ts         # 【核心基建】公共类型 (Component, DataBinding, Action, ChildList)
+   ├── client-capabilities.ts  # 【核心基建】客户端能力声明 (Catalog 协商)
+   ├── verify-schema.test.ts   # 【质量保证】Schema 验证测试
+   └── index.ts                # 【核心基建】Schema 模块入口
+           ├── state/                      # 【核心基建】响应式状态管理 (Preact Signals 驱动)
+   ├── data-model.ts           # 【核心基建】DataModel - JSON Pointer 响应式数据树
+   ├── surface-model.ts        # 【核心基建】SurfaceModel - UI Surface 状态
+   ├── component-model.ts      # 【核心基建】ComponentModel - 组件实例状态
+   ├── surface-components-model.ts  # 【核心基建】Surface 级组件注册表
+   └── surface-group-model.ts  # 【核心基建】全局 Surface 组管理
+           ├── processing/                 # 【核心基建】消息处理引擎
+   └── message-processor.ts    # 【核心基建】MessageProcessor - 消息验证与分发中枢
+           ├── catalog/                    # 【核心基建】组件目录与函数调用
+   ├── types.ts                # 【核心基建】Catalog/ComponentApi 类型定义
+   └── function_invoker.ts     # 【核心基建】自定义函数调用器 (支持客户端注册函数)
+           ├── reactivity/                 # 【核心基建】响应式系统封装
+   └── signals.ts              # 【核心基建】Preact Signals 适配封装
+           ├── rendering/                  # 【核心基建】渲染抽象层
+   ├── generic-binder.ts       # 【核心基建】GenericBinder - Schema 驱动的数据绑定引擎
+   ├── component-context.ts    # 【核心基建】ComponentContext - 组件上下文 (绑定到 Surface)
+   └── data-context.ts         # 【核心基建】DataContext - 数据上下文 (路径解析 + 动态值订阅)
+           ├── common/                     # 【工具集】公共基础设施
+   └── events.ts               # 【工具集】Event Emitter (Pub/Sub 订阅管理)
+           ├── basic_catalog/              # 【核心基建】基础组件目录 Web 实现
+   └── index.ts                # 【核心基建】基础目录注册 (包含所有标准 UI 组件的 Zod Schema)
+           ├── errors.ts                   # 【核心基建】v0.9 错误类型定义
+           └── index.ts                    # 【核心基建】v0.9 模块统一入口
+   ├── lit/                                    # 【业务模块】Lit (Web Components) 渲染器 - Google 主力实现
+   ├── src/
+   ├── index.ts                        # 【核心基建】@a2ui/lit 包入口 (多版本导出)
+   ├── 0.8/                            # 【业务模块】v0.8 版渲染实现 (稳定版)
+   ├── core.ts                     # 【核心基建】核心函数 (create, processMessages, etc.)
+   ├── model.test.ts               # 【质量保证】模型单元测试 (1323行, 覆盖全面)
+   ├── index.ts                    # 【核心基建】v0.8 公开 API
+   └── ui/                         # 【UI 视图】v0.8 UI 组件 (LitElement Web Components)
+       ├── ui.ts                   # 【UI 视图】UI 组件聚合导出
+       ├── root.ts                 # 【UI 视图】A2UIRoot - 应用根节点
+       ├── surface.ts              # 【UI 视图】A2UISurface - Surface 容器
+       ├── button.ts               # 【UI 视图】A2UIButton - 按钮 (支持 Action 绑定)
+       ├── text.ts                 # 【UI 视图】A2UIText - 文本 (h1-h5, body, caption)
+       ├── card.ts                 # 【UI 视图】A2UICard - 卡片容器
+       ├── image.ts                # 【UI 视图】A2UIImage - 图片
+       ├── video.ts                # 【UI 视图】A2UIVideo - 视频播放器
+       ├── audio.ts                # 【UI 视图】A2UIAudio - 音频播放器
+       ├── checkbox.ts             # 【UI 视图】A2UICheckbox - 复选框
+       ├── slider.ts               # 【UI 视图】A2UISlider - 滑块
+       ├── column.ts               # 【UI 视图】A2UIColumn - 垂直布局
+       ├── row.ts                  # 【UI 视图】A2UIRow - 水平布局
+       ├── tabs.ts                 # 【UI 视图】A2UITabs - 标签页
+       ├── modal.ts                # 【UI 视图】A2UIModal - 模态框
+       ├── divider.ts              # 【UI 视图】A2UIDivider - 分割线
+       ├── styles.ts               # 【UI 视图】Material Design 3 样式系统
+       └── component-registry.ts   # 【核心基建】组件注册表 (Map<componentType, LitElement>)
+   └── v0_9/                           # 【业务模块】v0.9 版渲染实现 (新架构)
+       ├── index.ts                    # 【核心基建】v0.9 公开 API
+       ├── a2ui-controller.ts          # 【核心基建】A2uiController - Lit ReactiveController (绑定 GenericBinder)
+       ├── a2ui-lit-element.ts         # 【核心基建】A2uiLitElement - 组件基类 (注入 ComponentContext)
+       ├── types.ts                    # 【核心基建】v0.9 类型定义
+       ├── surface/                    # 【UI 视图】Surface 渲染
+   ├── a2ui-surface.ts         # 【UI 视图】A2uiSurface - v0.9 Surface 容器
+   └── render-a2ui-node.ts     # 【UI 视图】递归组件节点渲染 (遍历组件树)
+       ├── context/                    # 【核心基建】依赖注入 Context (Lit Context Protocol)
+   ├── context.ts              # 【核心基建】主 Context (ComponentContext, 组件注册表)
+   └── markdown.ts             # 【核心基建】Markdown 渲染 Context
+       ├── directives/                 # 【UI 视图】Lit 自定义指令
+   ├── directives.ts           # 【UI 视图】通用渲染指令
+   └── markdown.ts             # 【UI 视图】Markdown 渲染指令 (AsyncDirective)
+       └── tests/                      # 【质量保证】v0.9 测试
+           ├── a2ui-surface.test.ts    # 【质量保证】Surface 组件的集成测试
+           ├── a2ui-lit-element.test.ts # 【质量保证】基础元素测试
+           ├── a2ui-controller.test.ts # 【质量保证】Controller 单元测试
+           ├── basic-catalog-examples.test.ts # 【质量保证】基础目录集成测试
+           ├── custom-catalogs.test.ts # 【质量保证】自定义目录测试
+           ├── markdown.test.ts        # 【质量保证】Markdown 渲染测试
+           └── dom-setup.ts            # 【质量保证】JSDOM 测试环境配置
+   └── package.json                        # 【配置】@a2ui/lit 包配置 (v0.10.0)
+   ├── react/                                  # 【业务模块】React 渲染器
+   └── src/
+       ├── index.ts                        # 【核心基建】@a2ui/react 包入口
+       ├── types.ts                        # 【核心基建】React 渲染器类型定义
+       ├── v0_8/                           # 【业务模块】v0.8 React 实现
+   ├── core/                       # 【核心基建】核心 React 组件
+   ├── A2UIProvider.tsx        # 【核心基建】A2UIProvider - 全局状态提供者 (React Context)
+   ├── A2UIViewer.tsx          # 【核心基建】A2UIViewer - 消息接收 + 渲染编排
+   ├── A2UIRenderer.tsx        # 【核心基建】A2UIRenderer - 组件递归渲染器
+   ├── ComponentNode.tsx       # 【核心基建】ComponentNode - 单节点渲染
+   └── store.ts                # 【核心基建】响应式 Store (Valtio 状态管理)
+   ├── hooks/                      # 【UI 视图】React 自定义 Hooks
+   ├── useA2UI.ts             # 【UI 视图】useA2UI - 获取 A2UI 应用状态
+   └── useA2UIComponent.ts     # 【UI 视图】useA2UIComponent - 获取单个组件状态
+   ├── registry/                   # 【核心基建】组件注册表
+   ├── ComponentRegistry.ts    # 【核心基建】组件注册表 (支持动态注册)
+   └── defaultCatalog.ts       # 【核心基建】默认 React 组件目录
+   ├── theme/                      # 【UI 视图】主题系统
+   ├── ThemeContext.tsx         # 【UI 视图】主题上下文 (支持自适应)
+   ├── litTheme.ts             # 【UI 视图】Lit 主题兼容层 (与 Lit 渲染器共享主题)
+   └── utils.ts                # 【工具集】主题工具函数
+   ├── styles/                     # 【UI 视图】CSS-in-JS 样式
+   ├── index.ts                # 【UI 视图】样式聚合导出
+   └── reset.ts                # 【UI 视图】浏览器样式重置
+   └── lib/                        # 【工具集】工具库
+       └── utils.ts                # 【工具集】通用工具函数
+       └── v0_9/                           # 【业务模块】v0.9 React 实现 (新架构)
+           ├── A2uiSurface.tsx             # 【UI 视图】A2uiSurface - v0.9 React Surface 组件
+           ├── adapter.tsx                  # 【核心基建】React → GenericBinder 适配器 (createReactComponent)
+           └── index.ts                    # 【核心基建】v0.9 React 公开 API
+   ├── angular/                                # 【业务模块】Angular 渲染器 (基于 Angular Standalone Components)
+   ├── flutter/                                # 【业务模块】Flutter 渲染器 (Dart) - GenUI SDK 底层
+   └── pubspec.yaml                        # 【配置】Flutter 包配置
+   ├── markdown/                               # 【业务模块】Markdown 渲染器 (生成纯 Markdown 输出)
+   ├── docs/                                   # 【配置】渲染器内部文档
+   └── scripts/                                # 【工具集】渲染器构建与发布脚本
+
+├── tools/                                      # 【工具集】A2UI 开发辅助工具链
+   ├── composer/                               # 【业务模块】A2UI Composer - 可视化 JSON 编辑器 (Next.js 14 App Router)
+   ├── src/
+   ├── app/                            # 【UI 视图】Next.js App Router
+   ├── page.tsx                    # 【UI 视图】主编辑器页面 (拖拽式组件构建)
+   └── layout.tsx                  # 【UI 视图】应用布局
+   ├── lib/                            # 【核心基建】编辑器核心逻辑
+   ├── components-data.ts          # 【核心基建】v0.8 组件定义与元数据 (1115行)
+   ├── components-data-v09.ts      # 【核心基建】v0.9 组件定义与元数据 (1052行)
+   ├── transcoder.ts               # 【核心基建】v0.8 <-> v0.9 版本双向转码器
+   ├── a2ui.tsx                    # 【核心基建】A2UI JSON 生成逻辑
+   ├── json-parser.ts              # 【工具集】JSON 解析与验证
+   ├── storage.ts                  # 【核心基建】localStorage 持久化
+   ├── utils.ts                    # 【工具集】通用工具函数
+   ├── v09Viewer.tsx               # 【UI 视图】v0.9 JSON 预览组件
+   └── viewerTheme.ts              # 【UI 视图】预览区主题配置
+   ├── contexts/                       # 【核心基建】React Context (SpecVersion, Widgets)
+   ├── spec-version-context.tsx    # 【核心基建】协议版本切换上下文
+   └── widgets-context.tsx         # 【核心基建】Widget 状态管理上下文
+   ├── data/theater/                   # 【配置】Theater 预构建场景 JSON (demo 数据)
+   ├── restaurant-finder.json      # 【配置】餐厅查找场景
+   ├── booking-form.json           # 【配置】预订表单场景
+   ├── weather-widget.json         # 【配置】天气组件场景
+   ├── flight-status.json          # 【配置】航班状态场景
+   ├── contact-card.json           # 【配置】联系人卡片场景
+   ├── kitchen-sink.json           # 【配置】全组件展示场景
+   ├── component-gallery-stream.json # 【配置】组件流式渲染场景
+   └── floor-plan.json             # 【配置】楼层平面图场景
+   ├── types/                          # 【核心基建】TypeScript 类型定义
+   └── widget.ts                   # 【核心基建】Widget 节点类型 (树形 + 属性)
+   └── test/                           # 【质量保证】测试
+   └── package.json                        # 【配置】Composer 包配置
+   ├── inspector/                              # 【业务模块】A2UI Inspector - 运行时调试工具
+   └── package.json                        # 【配置】Inspector 包配置
+   ├── editor/                                 # 【业务模块】A2UI Editor - Web 代码编辑器
+   └── package.json                        # 【配置】Editor 包配置
+   └── build_catalog/                          # 【工具集】Catalog 构建工具
+
+├── samples/                                    # 【业务模块】示例项目集合
+   ├── agent/adk/                              # 【业务模块】ADK Agent 示例 (Python)
+   ├── restaurant_finder/                  # 【业务模块】餐厅查找 - 主力 Demo (Gemini API 驱动)
+   ├── personalized_learning/              # 【业务模块】个性化学习 - 教育场景 Demo
+   ├── orchestrator/                       # 【业务模块】多 Agent 编排 - 远程子 Agent 场景
+   ├── rizzcharts/                         # 【业务模块】图表生成 Demo
+   ├── custom-components-example/          # 【业务模块】自定义组件目录示例
+   ├── mcp-apps-in-a2ui-sample/            # 【业务模块】MCP Apps 集成示例
+   ├── mcp_app_proxy/                      # 【业务模块】MCP 代理示例
+   └── gemini_enterprise/                  # 【业务模块】Gemini Enterprise 示例
+   ├── client/                                 # 【业务模块】客户端示例
+   ├── lit/                                # 【UI 视图】Lit 客户端 (主力)
+   ├── shell/                          # 【UI 视图】Shell 应用 (app.ts 932行)
+   ├── custom-components-example/      # 【业务模块】自定义组件客户端
+   ├── personalized_learning/          # 【业务模块】个性化学习客户端 (含 api-server)
+   └── mcp-apps-in-a2ui-sample/        # 【业务模块】MCP Apps 客户端
+   ├── react/shell/                        # 【UI 视图】React Shell 应用
+   ├── angular/                            # 【UI 视图】Angular 示例
+   ├── flutter/restaurant_finder/          # 【UI 视图】Flutter 餐厅查找 (GenUI 集成)
+   └── shared/                             # 【工具集】共享资源 (MCP inner iframe)
+   └── mcp/                                    # 【业务模块】MCP 协议集成示例
+       ├── a2ui-over-mcp-recipe/               # 【业务模块】A2UI over MCP - 完整双向集成
+       ├── a2ui-in-mcpapps/                    # 【业务模块】MCP Apps 中的 A2UI - 应用内嵌入
+       └── mcp-apps-calculator/                # 【业务模块】MCP 计算器 - 简单示例
+
+├── eval/                                       # 【质量保证】评估框架 (Agent 生成质量评估)
+   ├── a2ui_eval/                              # 【核心基建】评估核心库 (Python)
+   ├── datasets/                               # 【质量保证】标准测试数据集
+   ├── tests/                                  # 【质量保证】评估框架测试
+   └── bin/                                    # 【工具集】评估执行脚本
+
+├── docs/                                       # 【配置】MkDocs Material 文档站点 (a2ui.org)
+   ├── introduction/                           # 【配置】介绍文档 (What/Who/How/Compare)
+   ├── concepts/                               # 【配置】核心概念 (Data Flow/Components/Data Binding/Catalogs/Transports)
+   ├── guides/                                 # 【配置】开发者指南 (Client Setup/Agent Dev/Renderer Dev/MCP 集成)
+   ├── reference/                              # 【配置】API 参考 (Component Gallery/Message Reference/Renderers)
+   ├── specification/                          # 【配置】规范文档副本
+   ├── ecosystem/                              # 【配置】生态介绍 (Community/Community Renderers)
+   ├── assets/                                 # 【配置】文档静态资源 (SVG/PNG)
+   ├── stylesheets/                            # 【配置】自定义 CSS
+   └── scripts/                                # 【工具集】文档生成脚本
+
+├── scripts/                                    # 【工具集】项目级脚本
+   └── fix_format.sh                           # 【工具集】全仓库格式化 (Prettier + Pyink + dart format)
+
+├── .github/                                    # 【配置】GitHub CI/CD
+   ├── workflows/                              # 【配置】GitHub Actions 工作流
+   └── ISSUE_TEMPLATE/                         # 【配置】Issue 模板
+
+├── .gemini/                                    # 【配置】Gemini CLI 配置
+
+├── README.md                                   # 【配置】项目主页 (英文)
+├── CONTRIBUTING.md                             # 【配置】贡献指南 (CLA + 编码规范)
+├── LICENSE                                     # 【配置】Apache 2.0 许可证
+├── mkdocs.yaml                                 # 【配置】MkDocs 文档站点配置
+├── pubspec.yaml                                # 【配置】Flutter (Dart) 项目配置
+├── hooks.py                                    # 【配置】MkDocs 自定义钩子 (文档预处理)
+├── analysis_options.yaml                       # 【配置】Dart 代码分析规则
+└── requirements-docs.txt                       # 【配置】Python 文档构建依赖

3. 模块依赖与调用关系

3.1 全局入口与核心路由

逻辑说明:A2UI 的数据流从 Agent(如 Google ADK)开始,Agent 通过 Python/Kotlin SDK 的 SchemaManager 构建 LLM 系统提示词,LLM 生成 A2UI JSON 消息流,经过 StreamParser 解析验证后,通过 A2A/AG UI/MCP 传输协议发送到客户端。客户端 MessageProcessor 接收消息,根据消息类型(createSurface / updateComponents / updateDataModel / deleteSurface)分发到对应的 Surface 状态模型,状态变更通过 Signal 响应式系统自动传播到 UI 组件。

调用拓扑 (plainText)

text
Agent Application (e.g., ADK Agent)
+ +---> A2uiSchemaManager.generate_system_prompt()
+        +---> LLM (Gemini/Other) generates A2UI JSON stream
+               +---> A2uiStreamParser.process_chunk()
+                      +---> (版本判断) A2uiStreamParserV08 | A2uiStreamParserV09
+                             +---> (验证) JsonSchemaValidator
+                             +---> (产出) ResponsePart events
+                                    |
+Transport (A2A / AG UI / MCP) <----+
+       |
+       +---> Client: MessageProcessor.processMessages()
+              |
+              +---> [createSurface] --> SurfaceGroupModel.addSurface()
+              |                        +---> Catalog lookup
+              |                        +---> SurfaceModel 创建
+              |
+              +---> [updateComponents] --> SurfaceModel.componentsModel
+              |                           +---> ComponentModel 创建/更新
+              |                           +---> 触发 onUpdated 事件
+              |
+              +---> [updateDataModel] --> SurfaceModel.dataModel.set()
+              |                          +---> Signal 更新
+              |                          +---> 通知订阅者 (ancestors/descendants)
+              |
+              +---> [deleteSurface] --> SurfaceGroupModel.deleteSurface()
+
+Renderer-Specific Adapter (Lit/React/Angular/Flutter)
+ +---> GenericBinder.subscribe()
+        +---> resolveAndBind() (遍历 BehaviorNode 树)
+        +---> 订阅 DataContext 动态路径
+        +---> 产出 ResolvedProps --> UI Component re-render

3.2 核心业务实体与关联

实体定义

  • Surface:UI 画布。代表一个独立的 UI 渲染区域(如对话框、侧边栏、主视图)。一个应用可以同时存在多个 Surface。
  • Component:UI 元素。包括 Button、Text、Card、TextField 等。每个 Component 有唯一的 id、类型(如 "Text")、属性集合,通过 id 引用形成组件树。
  • DataModel:应用状态。采用 JSON Pointer (RFC 6901) 路径寻址的响应式树形数据结构。组件通过 path 绑定到数据模型的特定位置,数据更新自动触发 UI 更新。
  • Catalog:组件目录。定义客户端支持的组件类型集合、每个组件的 Schema(使用 Zod/JSON Schema 描述属性)、可用函数和主题定义。
  • Message:A2UI 协议消息。有四种核心消息类型:createSurfaceupdateComponentsupdateDataModeldeleteSurface

实体引用拓扑 (plainText)

text
[Catalog] 1 <----> N [ComponentApi]
+    |                      |
+    | (defines)            | (describes schema for)
+    |                      v
+    |               [Component] (generic)
+    |
+    +-------> [Surface] 1 -----> N [Component] (instance)
+                   |                        |
+                   | (has)                  | (binds to)
+                   v                        v
+              [DataModel] 1 <-----> N [Data Binding (path)]
+                   |
+                   | (notifies via)
+                   v
+              [Signal (Preact Signals)]
+                   |
+                   | (updates)
+                   v
+              [UI Component (Lit/React/etc.)]
+                   |
+                   | (triggers)
+                   v
+              [Action] ----> [Agent] (event callback)

4. 核心模块详解

模块一:MessageProcessor (消息处理器)

  • 模块名称:MessageProcessor - A2UI 消息处理核心

  • 设计说明:MessageProcessor 是客户端的消息分发中枢,采用观察者模式。它接收 A2UI JSON 消息数组,根据消息类型字段(createSurface/updateComponents/updateDataModel/deleteSurface)分发到不同的处理流程。它维护 SurfaceGroupModel 作为全局状态管理器,并管理 Catalog 注册表和 Action 回调。核心设计特点是消息可以增量到达(支持流式传输),每个消息只修改状态的一部分,通过 Preact Signals 实现的响应式系统自动传播变更到订阅的 UI 组件。

  • 内部结构图 (plainText)

text
+----------------------------------------+
+|         MessageProcessor<T>            |
+|  (消息分发中枢 / Observer Pattern)       |
++-----+--------+--------+---------+-----+
+      |        |        |         |
+      v        v        v         v
++--------+ +--------+ +--------+ +--------+
+|Create  | |Update  | |Update  | |Delete  |
+|Surface | |Comps   | |Data    | |Surface |
++--------+ +--------+ +--------+ +--------+
+      |        |        |         |
+      v        v        v         v
++========================================+
+|        SurfaceGroupModel<T>            |
+|  +----------------------------------+  |
+|  | surfacesMap: Map<string, Surface> |  |
+|  +----------------------------------+  |
+|  | onSurfaceCreated / onSurfaceDeleted| |
+|  | onAction (Event Emitter)          |  |
+|  +----------------------------------+  |
++========================================+
+      |
+      | (每个 Surface 包含)
+      v
++----------------------------------------+
+|          SurfaceModel<T>               |
+|  +----------------+ +---------------+  |
+|  |ComponentsModel | | DataModel     |  |
+|  |(组件注册表)     | | (JSON Pointer) |  |
+|  +----------------+ +---------------+  |
+|  | Catalog<T>     | | sendDataModel |  |
+|  +----------------+ +---------------+  |
++----------------------------------------+

模块二:DataModel (响应式数据模型)

  • 模块名称:DataModel - 响应式状态管理

  • 设计说明:DataModel 是 A2UI 客户端的核心状态管理模块,基于 JSON Pointer (RFC 6901) 路径寻址,使用 Preact Signals 实现细粒度响应式更新。支持路径的 CRUD 操作、父子路径的级联通知(修改子路径时通知所有祖先路径的订阅者)、Signal 缓存和惰性初始化。设计模式上采用了发布-订阅模式,外部通过 subscribe(path, callback) 订阅特定路径的变更,内部通过 signal(path) 管理响应式原语。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|              DataModel                      |
+|  (基于 JSON Pointer + Preact Signals)       |
++--------------------------------------------+
+|  data: Record<string, unknown>              |
+|  signals: Map<string, Signal<any>>          |
+|  subscriptions: Set<() => void>            |
++------------------+-------------------------+
+                   |
+    +--------------+--------------+
+    |              |              |
+    v              v              v
++--------+   +----------+   +-----------+
+| set()  |   | get()    |   |subscribe()|
+| path:  |   | path:    |   | path:     |
+| string |   | string   |   | string    |
+| value: |   | returns  |   | callback  |
+| any    |   | any|undef|   | returns   |
++--------+   +----------+   | DataSub   |
+    |                       +-----------+
+    |                            |
+    v                            v
++--------------------------------------------+
+|         notifySignals(path)                 |
+|  (级联通知机制)                             |
+|  1. updateSignal(targetPath)               |
+|  2. Notify all ancestor paths (向上冒泡)    |
+|  3. Notify all descendant paths (向下广播)  |
++--------------------------------------------+
+    |
+    v
++--------------------------------------------+
+|  Preact Signals (signal / batch / effect)  |
+|  - signal(): 创建响应式原语                  |
+|  - batch(): 批量更新优化                     |
+|  - effect(): 副作用订阅                      |
++--------------------------------------------+

模块三:GenericBinder (通用数据绑定引擎)

  • 模块名称:GenericBinder - Schema 驱动的响应式数据绑定

  • 设计说明:GenericBinder 是 A2UI v0.9 的核心创新模块,采用 策略模式 + 行为树遍历 的设计。它通过 scrapeSchemaBehavior() 分析 Zod Schema,自动识别属性类型(DYNAMIC/ACTION/STRUCTURAL/CHECKABLE/STATIC),无需为每个组件硬编码属性处理逻辑。DYNAMIC 类型自动订阅 DataModel 更新,ACTION 类型生成可执行闭包函数,STRUCTURAL 类型管理子组件列表。这是一种元编程方法——Schema 即是行为配置。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|         GenericBinder<T>                   |
+|  (Schema-Driven Reactive Binding Engine)   |
++--------------------------------------------+
+|  context: ComponentContext                  |
+|  behaviorTree: BehaviorNode                |
+|  currentProps: Partial<T>                  |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|      scrapeSchemaBehavior(schema)          |
+|  (Zod Schema --> BehaviorNode Tree)        |
++--------------------------------------------+
+|  识别规则:                                  |
+|  - ZodUnion + { event: ... } --> ACTION    |
+|  - ZodUnion + { path: ... }  --> DYNAMIC   |
+|  - ZodUnion + { componentId, path } --> STRUCTURAL |
+|  - propertyName === 'checks' --> CHECKABLE |
+|  - ZodObject --> OBJECT (递归)              |
+|  - ZodArray  --> ARRAY (递归)               |
+|  - Fallback  --> STATIC                     |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|       resolveAndBind(value, behavior)      |
+|  (行为驱动的属性解析)                        |
++--------------------------------------------+
+|                                            |
+|  DYNAMIC  ----> subscribeDynamicValue()    |
+|                 返回当前值 + 自动重订阅      |
+|                                            |
+|  ACTION   ----> () => dispatchAction()     |
+|                 生成可执行闭包               |
+|                                            |
+|  STRUCTURAL --> subscribeDynamicValue()    |
+|                 生成子组件列表 [{id, basePath}] |
+|                                            |
+|  CHECKABLE --> 验证规则数组                  |
+|                 注入 isValid / validationErrors |
+|                                            |
+|  OBJECT/ARRAY --> 递归遍历子节点             |
+|                                            |
+|  STATIC   ----> 原值返回                     |
++--------------------------------------------+
+                   |
+                   v
++--------------------------------------------+
+|     subscribe(listener) / notify()         |
+|  (Observer Pattern 通知视图更新)             |
++--------------------------------------------+

模块四:A2uiStreamParser (流式解析器)

  • 模块名称:A2uiStreamParser - 流式 JSON 解析

  • 设计说明:A2uiStreamParser 是 Agent 端的核心流式解析引擎,采用工厂模式根据 Catalog 版本创建对应的解析器实例(V08/V09)。主要挑战是处理 LLM 流式输出时 JSON 可能不完整的情况——解析器需要缓存不完整的 chunk,支持自动修复截断的字符串值(CUTTABLE_KEYS 机制),以及容错处理。解析结果以 ResponsePart 事件形式产出,支持逐组件的渐进式渲染。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|      A2uiStreamParser (Factory)            |
+|  catalog.version === 'v0.9' ? V09 : V08   |
++------------------+-------------------------+
+                   |
+         +---------+---------+
+         |                   |
+         v                   v
++------------------+  +------------------+
+| StreamParserV08  |  | StreamParserV09  |
++------------------+  +------------------+
+|  _buffer: str     |  |  _buffer: str    |
+|  _component_state |  |  _state: Enum    |
+|  _depth: int      |  |  (INIT/IN_MESSAGE|
+|                   |  |   /IN_COMPONENTS/ |
+|                   |  |   IN_ARRAY)       |
++--------+---------+  +--------+---------+
+         |                     |
+         v                     v
++--------------------------------------------+
+|         process_chunk(chunk: str)          |
+|  1. 追加 chunk 到 buffer                    |
+|  2. 尝试提取完整的 JSON 行/块               |
+|  3. 对不完整部分尝试 auto-heal (CUTTABLE)   |
+|  4. 逐行解析为 dict                         |
+|  5. 通过 JsonSchemaValidator 验证           |
+|  6. 产出 ResponsePart(createSurface |       |
+|     updateComponents | updateDataModel |    |
+|     deleteSurface)                          |
++--------------------------------------------+
+         |
+         v
++--------------------------------------------+
+|         ResponsePart (事件对象)             |
+|  - type: MessageType                       |
+|  - data: dict (完整消息体)                  |
+|  - component_id?: str (单组件事件)          |
+|  - is_partial?: bool (流式中间状态)         |
++--------------------------------------------+

模块五:Catalog System (组件目录系统)

  • 模块名称:Catalog System - 组件目录注册与协商

  • 设计说明:Catalog System 是 A2UI 安全模型的基石,采用策略模式 + 适配器模式。Agent 端维护支持的 Catalog 列表,客户端声明其能力(A2uiClientCapabilities),双方通过 supportedCatalogIds 协商选择共同支持的组件集。支持内联目录(Inline Catalog)——客户端可以将自定义组件的 JSON Schema 内联发送给 Agent,Agent 端的 LLM 即可理解并使用这些自定义组件。目录选择遵循三级优先级:内联目录 > 客户端支持的目录 ID > Agent 默认目录。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|        A2uiSchemaManager                    |
+|  (Agent 端 Schema 管理器)                   |
++--------------------------------------------+
+|  _version: str                              |
+|  _supported_catalogs: list[A2uiCatalog]     |
+|  _accepts_inline_catalogs: bool            |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|       _select_catalog(capabilities)         |
+|  目录选择优先级:                             |
+|  1. Inline Catalogs (客户端内联)            |
+|     --> merge with base catalog            |
+|  2. supportedCatalogIds (客户端声明)         |
+|     --> first mutual match                 |
+|  3. Agent default catalog (服务端默认)       |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|           A2uiCatalog                      |
+|  +--------------------------------------+  |
+|  | catalog_id: str                      |  |
+|  | components: dict (组件定义)            |  |
+|  | functions: list (可用函数)            |  |
+|  | theme_schema: dict (主题定义)         |  |
+|  +--------------------------------------+  |
+|  | render_as_llm_instructions() -> str   |  |
+|  | load_examples() -> str               |  |
+|  | with_pruning() -> A2uiCatalog        |  |
+|  +--------------------------------------+  |
++--------------------------------------------+
+                   ^
+                   | (客户端侧)
++--------------------------------------------+
+|   MessageProcessor.getClientCapabilities() |
+|   - supportedCatalogIds: string[]          |
+|   - inlineCatalogs?: InlineCatalog[]        |
+|     (包含完整 JSON Schema 定义)              |
++--------------------------------------------+

5. 关键数据流程

场景说明:这是一个完整的 A2UI 交互生命周期——用户提出"帮我找附近的意大利餐厅",Agent 生成餐厅搜索 UI,用户填写偏好后提交,Agent 更新搜索结果 UI。此流程覆盖了 A2UI 的所有核心消息类型(createSurface, updateComponents, updateDataModel, 用户 Action 回调)以及响应式数据绑定的完整链路。

  • 流转时序图 (Mermaid)
`,56)),n(l,null,{default:t(()=>[n(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Client%20as%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20(Lit%2FReact)%0A%20%20%20%20participant%20MsgProc%20as%20MessageProcessor%0A%20%20%20%20participant%20Surface%20as%20SurfaceModel%0A%20%20%20%20participant%20DataModel%20as%20DataModel%0A%20%20%20%20participant%20Binder%20as%20GenericBinder%0A%20%20%20%20participant%20UI%20as%20UI%20Component%0A%20%20%20%20participant%20Transport%20as%20%E4%BC%A0%E8%BE%93%E5%B1%82%20(A2A%2FAG%20UI)%0A%20%20%20%20participant%20Agent%20as%20Agent%20(ADK)%0A%20%20%20%20participant%20LLM%20as%20LLM%20(Gemini)%0A%0A%20%20%20%20User-%3E%3EClient%3A%20%22%E5%B8%AE%E6%88%91%E6%89%BE%E9%99%84%E8%BF%91%E7%9A%84%E6%84%8F%E5%A4%A7%E5%88%A9%E9%A4%90%E5%8E%85%22%0A%20%20%20%20activate%20Client%0A%20%20%20%20Client-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%E7%94%A8%E6%88%B7%E6%B6%88%E6%81%AF%0A%20%20%20%20Transport-%3E%3EAgent%3A%20%E8%BD%AC%E5%8F%91%E7%94%A8%E6%88%B7%E8%AF%B7%E6%B1%82%0A%20%20%20%20activate%20Agent%0A%0A%20%20%20%20Agent-%3E%3EAgent%3A%20SchemaManager.generate_system_prompt()%0A%20%20%20%20Agent-%3E%3ELLM%3A%20%E5%8F%91%E9%80%81%E7%B3%BB%E7%BB%9F%E6%8F%90%E7%A4%BA%E8%AF%8D%20%2B%20%E7%94%A8%E6%88%B7%E8%AF%B7%E6%B1%82%0A%20%20%20%20activate%20LLM%0A%20%20%20%20LLM--%3E%3EAgent%3A%20%E6%B5%81%E5%BC%8F%E7%94%9F%E6%88%90%20A2UI%20JSON%0A%20%20%20%20deactivate%20LLM%0A%0A%20%20%20%20Agent-%3E%3EAgent%3A%20StreamParser.process_chunk()%20%E9%80%90%E5%9D%97%E8%A7%A3%E6%9E%90%0A%20%20%20%20Agent-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%20createSurface%20%2B%20updateComponents%20%2B%20updateDataModel%0A%20%20%20%20deactivate%20Agent%0A%20%20%20%20Transport-%3E%3EMsgProc%3A%20%E8%BD%AC%E5%8F%91%20A2UI%20%E6%B6%88%E6%81%AF%0A%20%20%20%20deactivate%20Transport%0A%0A%20%20%20%20activate%20MsgProc%0A%20%20%20%20MsgProc-%3E%3EMsgProc%3A%20processMessage(createSurface)%0A%20%20%20%20MsgProc-%3E%3ESurface%3A%20%E5%88%9B%E5%BB%BA%20Surface(%22restaurant-search%22)%0A%20%20%20%20activate%20Surface%0A%20%20%20%20Surface-%3E%3ESurface%3A%20%E7%BB%91%E5%AE%9A%20Catalog%2C%20%E5%88%9D%E5%A7%8B%E5%8C%96%20DataModel%0A%20%20%20%20Surface--%3E%3EMsgProc%3A%20Surface%20created%0A%20%20%20%20deactivate%20Surface%0A%0A%20%20%20%20MsgProc-%3E%3EMsgProc%3A%20processMessage(updateComponents)%0A%20%20%20%20MsgProc-%3E%3ESurface%3A%20%E6%B7%BB%E5%8A%A0%E7%BB%84%E4%BB%B6%20(title%2C%20search-form%2C%20result-list...)%0A%20%20%20%20activate%20Surface%0A%20%20%20%20Surface-%3E%3ESurface%3A%20ComponentsModel.addComponent()%0A%20%20%20%20Surface--%3E%3EBinder%3A%20%E8%A7%A6%E5%8F%91%20onUpdated%20%E4%BA%8B%E4%BB%B6%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20resolveAndBind(props%2C%20behaviorTree)%0A%20%20%20%20Binder-%3E%3EDataModel%3A%20subscribeDynamicValue(path)%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel--%3E%3EBinder%3A%20%E8%BF%94%E5%9B%9E%E5%BD%93%E5%89%8D%E5%80%BC%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20Binder--%3E%3EUI%3A%20%E9%80%9A%E7%9F%A5%20props%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20Surface%0A%0A%20%20%20%20MsgProc-%3E%3EMsgProc%3A%20processMessage(updateDataModel)%0A%20%20%20%20MsgProc-%3E%3EDataModel%3A%20set(%22%2Frestaurants%22%2C%20%5B...%5D)%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel-%3E%3EDataModel%3A%20notifySignals(%22%2Frestaurants%22)%0A%20%20%20%20DataModel-%3E%3EBinder%3A%20Signal%20%E6%9B%B4%E6%96%B0%E8%A7%A6%E5%8F%91%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20rebuildAllBindings()%0A%20%20%20%20Binder--%3E%3EUI%3A%20%E9%80%9A%E7%9F%A5%20props%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20MsgProc%0A%0A%20%20%20%20UI-%3E%3EUI%3A%20%E6%B8%B2%E6%9F%93%E9%A4%90%E5%8E%85%E5%88%97%E8%A1%A8%20(%E5%8E%9F%E7%94%9F%E7%BB%84%E4%BB%B6)%0A%20%20%20%20UI--%3E%3EUser%3A%20%E6%98%BE%E7%A4%BA%E9%A4%90%E5%8E%85%E6%90%9C%E7%B4%A2%E7%95%8C%E9%9D%A2%0A%20%20%20%20deactivate%20Client%0A%0A%20%20%20%20Note%20over%20User%2CUI%3A%20%E7%94%A8%E6%88%B7%E4%B8%8E%20UI%20%E4%BA%A4%E4%BA%92%0A%0A%20%20%20%20User-%3E%3EUI%3A%20%E9%80%89%E6%8B%A9%22%E6%84%8F%E9%A4%90%22%E7%AD%9B%E9%80%89%20%2B%20%E7%82%B9%E5%87%BB%22%E6%90%9C%E7%B4%A2%22%0A%20%20%20%20activate%20UI%0A%20%20%20%20UI-%3E%3EBinder%3A%20%E8%A7%A6%E5%8F%91%20Action%20dispatch%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20resolveDynamicValue(payload)%0A%20%20%20%20Binder-%3E%3EDataModel%3A%20%E8%AF%BB%E5%8F%96%20payload%20%E4%B8%AD%E7%9A%84%E7%BB%91%E5%AE%9A%E5%80%BC%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel--%3E%3EBinder%3A%20%E8%BF%94%E5%9B%9E%E5%BD%93%E5%89%8D%E6%95%B0%E6%8D%AE%E5%BF%AB%E7%85%A7%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20Binder-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%E7%94%A8%E6%88%B7%20Action%20(%E5%90%AB%20payload)%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20UI%0A%0A%20%20%20%20Transport-%3E%3EAgent%3A%20%E8%BD%AC%E5%8F%91%20Action%20%E4%BA%8B%E4%BB%B6%0A%20%20%20%20activate%20Agent%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E5%A4%84%E7%90%86%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%0A%20%20%20%20Agent-%3E%3ELLM%3A%20%E7%94%9F%E6%88%90%E6%9B%B4%E6%96%B0%E7%9A%84%20UI%20(updateComponents%20%2B%20updateDataModel)%0A%20%20%20%20activate%20LLM%0A%20%20%20%20LLM--%3E%3EAgent%3A%20%E6%9B%B4%E6%96%B0%E5%90%8E%E7%9A%84%20A2UI%20JSON%0A%20%20%20%20deactivate%20LLM%0A%20%20%20%20Agent-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%E5%A2%9E%E9%87%8F%E6%9B%B4%E6%96%B0%E6%B6%88%E6%81%AF%0A%20%20%20%20deactivate%20Agent%0A%0A%20%20%20%20Transport-%3E%3EMsgProc%3A%20%E8%BD%AC%E5%8F%91%E6%9B%B4%E6%96%B0%E6%B6%88%E6%81%AF%0A%20%20%20%20activate%20MsgProc%0A%20%20%20%20MsgProc-%3E%3ESurface%3A%20updateComponents%20(%E6%9B%BF%E6%8D%A2%E6%90%9C%E7%B4%A2%E7%BB%93%E6%9E%9C)%0A%20%20%20%20activate%20Surface%0A%20%20%20%20Surface-%3E%3EBinder%3A%20%E8%A7%A6%E5%8F%91%20onUpdated%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20resolveAndBind()%0A%20%20%20%20Binder-%3E%3EDataModel%3A%20subscribe%20%2F%20read%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel--%3E%3EBinder%3A%20%E8%BF%94%E5%9B%9E%E6%96%B0%E6%95%B0%E6%8D%AE%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20Binder--%3E%3EUI%3A%20%E9%80%9A%E7%9F%A5%20props%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20Surface%0A%20%20%20%20deactivate%20MsgProc%0A%0A%20%20%20%20UI-%3E%3EUI%3A%20%E5%A2%9E%E9%87%8F%E6%9B%B4%E6%96%B0%20UI%20(%E5%8F%AA%E6%9B%B4%E6%96%B0%E5%8F%98%E5%8C%96%E7%9A%84%E9%83%A8%E5%88%86)%0A%20%20%20%20UI--%3E%3EUser%3A%20%E6%98%BE%E7%A4%BA%E7%AD%9B%E9%80%89%E5%90%8E%E7%9A%84%E9%A4%90%E5%8E%85%E5%88%97%E8%A1%A8%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=a(`

6. 接口与契约规范

6.1 核心内部模块契约 (TypeScript)

typescript
/**
+ * A2UI v0.9 消息联合类型
+ * Agent 可以发送以下四种消息之一
+ */
+export type A2uiMessage =
+  | CreateSurfaceMessage       // 创建渲染 Surface
+  | UpdateComponentsMessage    // 更新组件列表
+  | UpdateDataModelMessage     // 更新数据模型
+  | DeleteSurfaceMessage;      // 删除 Surface
+
+/**
+ * 消息处理器核心接口
+ * 负责接收、验证并分发 A2UI 消息到对应的状态模型
+ */
+export interface IMessageProcessor<T extends ComponentApi> {
+  /** 处理一批 A2UI 消息 */
+  processMessages(messages: A2uiMessage[] | A2uiMessageListWrapper): void;
+
+  /** 获取客户端能力声明(用于与 Agent 协商目录) */
+  getClientCapabilities(options?: CapabilitiesOptions): A2uiClientCapabilities;
+
+  /** 获取启用了 sendDataModel 的 Surface 的聚合数据模型 */
+  getClientDataModel(): A2uiClientDataModel | undefined;
+
+  /** 订阅 Surface 创建事件 */
+  onSurfaceCreated(handler: (surface: SurfaceModel<T>) => void): Subscription;
+
+  /** 订阅 Surface 删除事件 */
+  onSurfaceDeleted(handler: (id: string) => void): Subscription;
+}
+
+/**
+ * 响应式数据模型接口
+ * 基于 JSON Pointer (RFC 6901) 路径寻址
+ */
+export interface IDataModel {
+  /** 写入数据到指定路径,自动通知订阅者 */
+  set(path: string, value: any): this;
+
+  /** 读取指定路径的数据 */
+  get<T = any>(path: string): T | undefined;
+
+  /** 订阅路径变更,返回包含当前值和取消订阅方法的对象 */
+  subscribe<T>(path: string, onChange: (value: T | undefined) => void): DataSubscription<T>;
+
+  /** 获取路径对应的 Signal(惰性创建) */
+  getSignal<T>(path: string): Signal<T | undefined>;
+
+  /** 清理所有订阅 */
+  dispose(): void;
+}
+
+/**
+ * Surface 模型接口
+ * 代表一个独立的 UI 渲染区域
+ */
+export interface ISurfaceModel<T extends ComponentApi> {
+  readonly id: string;
+  readonly catalog: Catalog<T>;
+  readonly componentsModel: ComponentsModel<T>;
+  readonly dataModel: DataModel;
+  readonly sendDataModel: boolean;
+
+  /** 设置主题参数 */
+  setTheme(theme: Record<string, unknown>): void;
+
+  /** 销毁 Surface */
+  dispose(): void;
+}
+
+/**
+ * 通用数据绑定引擎接口
+ * 将 A2UI JSON 属性转换为响应式 props
+ */
+export interface IGenericBinder<T> {
+  /** 当前已解析的 props 快照 */
+  readonly currentProps: Partial<T>;
+
+  /** 获取同步快照 */
+  readonly snapshot: T;
+
+  /** 订阅 props 变更 */
+  subscribe(listener: (props: T) => void): { unsubscribe: () => void };
+
+  /** 销毁所有监听 */
+  dispose(): void;
+}
+
+/**
+ * Actions 监听器
+ * 处理用户在 A2UI Surface 上的交互事件
+ */
+export type ActionListener = (
+  surfaceId: string,
+  actionName: string,
+  payload: Record<string, unknown>
+) => void;

6.2 对外 API 契约 (A2UI v0.9 核心消息 Schema)

yaml
# A2UI v0.9 核心消息类型 — OpenSpec/YAML 格式
+
+components:
+  schemas:
+    CreateSurface:
+      type: object
+      required: [version, createSurface]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        createSurface:
+          type: object
+          required: [surfaceId, catalogId]
+          properties:
+            surfaceId:
+              type: string
+              description: UI Surface 的唯一标识符
+            catalogId:
+              type: string
+              description: 组件目录的唯一标识符
+            theme:
+              type: object
+              description: 可选的 Surface 级主题参数
+            sendDataModel:
+              type: boolean
+              description: 若为 true,客户端将在每次数据更新时发送完整数据模型
+
+    UpdateComponents:
+      type: object
+      required: [version, updateComponents]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        updateComponents:
+          type: object
+          required: [surfaceId, components]
+          properties:
+            surfaceId:
+              type: string
+              description: 目标 Surface 的唯一标识符
+            components:
+              type: array
+              minItems: 1
+              items:
+                $ref: '#/components/schemas/Component'
+              description: 该 Surface 的所有 UI 组件列表
+
+    UpdateDataModel:
+      type: object
+      required: [version, updateDataModel]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        updateDataModel:
+          type: object
+          required: [surfaceId]
+          properties:
+            surfaceId:
+              type: string
+              description: 目标 Surface 的唯一标识符
+            path:
+              type: string
+              description: JSON Pointer 路径,默认为根路径 "/"
+            value:
+              description: 要更新的数据值
+
+    DeleteSurface:
+      type: object
+      required: [version, deleteSurface]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        deleteSurface:
+          type: object
+          required: [surfaceId]
+          properties:
+            surfaceId:
+              type: string
+              description: 要删除的 Surface 唯一标识符
+
+    ClientCapabilities:
+      type: object
+      required: [v0.9]
+      properties:
+        v0.9:
+          type: object
+          required: [supportedCatalogIds]
+          properties:
+            supportedCatalogIds:
+              type: array
+              items:
+                type: string
+              description: 客户端支持的目录 ID 列表
+            inlineCatalogs:
+              type: array
+              items:
+                $ref: '#/components/schemas/InlineCatalog'
+              description: 客户端内联提供的完整目录定义

7. 快速开始

7.1 环境配置

  • Node.js 18+
  • Python 3.10+ (推荐使用 uv)
  • Gemini API Key (用于 Restaurant Finder Demo)

7.2 安装与运行

bash
git clone https://github.com/google/A2UI.git
+cd A2UI
+export GEMINI_API_KEY="your_gemini_api_key"
+cd samples/client/lit
+npm run demo:restaurant

启动后访问 http://localhost:5173 即可体验完整的 A2UI 餐厅查找应用。

7.3 典型用例

路径说明时间
Quickstart Demo完整 A2UI 本地运行 (Gemini + ADK + Lit)~5 分钟
A2UI + AG-UI (CopilotKit)将 A2UI 集成到现有 Agent 框架~5 分钟
A2UI Composer可视化构建 A2UI JSON~1 分钟
A2UI Theater预构建的流式渲染场景浏览~1 分钟
`,13))])}const B=h(r,[["render",F]]);export{C as __pageData,B as default}; diff --git a/assets/insight-labs_repo-insight_a2ui.md.Dgw3F5ap.lean.js b/assets/insight-labs_repo-insight_a2ui.md.Dgw3F5ap.lean.js new file mode 100644 index 0000000..c437326 --- /dev/null +++ b/assets/insight-labs_repo-insight_a2ui.md.Dgw3F5ap.lean.js @@ -0,0 +1 @@ +import{_ as h,r as i,c as e,o as k,d as a,b as n,w as t}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const C=JSON.parse('{"title":"A2UI 开源项目解读","description":"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"A2UI 开源项目解读","tldr":"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。","description":"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。","abstract":null,"permalink":"/insight-labs/repo-insight/a2ui","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/a2ui.md","filePath":"31.Insight Labs/11.Reop Insight Reports/13.a2ui.md"}'),r={name:"insight-labs/repo-insight/a2ui.md"};function F(d,s,g,c,E,y){const p=i("MermaidChart"),l=i("ClientOnly");return k(),e("div",null,[s[0]||(s[0]=a("",56)),n(l,null,{default:t(()=>[n(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Client%20as%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20(Lit%2FReact)%0A%20%20%20%20participant%20MsgProc%20as%20MessageProcessor%0A%20%20%20%20participant%20Surface%20as%20SurfaceModel%0A%20%20%20%20participant%20DataModel%20as%20DataModel%0A%20%20%20%20participant%20Binder%20as%20GenericBinder%0A%20%20%20%20participant%20UI%20as%20UI%20Component%0A%20%20%20%20participant%20Transport%20as%20%E4%BC%A0%E8%BE%93%E5%B1%82%20(A2A%2FAG%20UI)%0A%20%20%20%20participant%20Agent%20as%20Agent%20(ADK)%0A%20%20%20%20participant%20LLM%20as%20LLM%20(Gemini)%0A%0A%20%20%20%20User-%3E%3EClient%3A%20%22%E5%B8%AE%E6%88%91%E6%89%BE%E9%99%84%E8%BF%91%E7%9A%84%E6%84%8F%E5%A4%A7%E5%88%A9%E9%A4%90%E5%8E%85%22%0A%20%20%20%20activate%20Client%0A%20%20%20%20Client-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%E7%94%A8%E6%88%B7%E6%B6%88%E6%81%AF%0A%20%20%20%20Transport-%3E%3EAgent%3A%20%E8%BD%AC%E5%8F%91%E7%94%A8%E6%88%B7%E8%AF%B7%E6%B1%82%0A%20%20%20%20activate%20Agent%0A%0A%20%20%20%20Agent-%3E%3EAgent%3A%20SchemaManager.generate_system_prompt()%0A%20%20%20%20Agent-%3E%3ELLM%3A%20%E5%8F%91%E9%80%81%E7%B3%BB%E7%BB%9F%E6%8F%90%E7%A4%BA%E8%AF%8D%20%2B%20%E7%94%A8%E6%88%B7%E8%AF%B7%E6%B1%82%0A%20%20%20%20activate%20LLM%0A%20%20%20%20LLM--%3E%3EAgent%3A%20%E6%B5%81%E5%BC%8F%E7%94%9F%E6%88%90%20A2UI%20JSON%0A%20%20%20%20deactivate%20LLM%0A%0A%20%20%20%20Agent-%3E%3EAgent%3A%20StreamParser.process_chunk()%20%E9%80%90%E5%9D%97%E8%A7%A3%E6%9E%90%0A%20%20%20%20Agent-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%20createSurface%20%2B%20updateComponents%20%2B%20updateDataModel%0A%20%20%20%20deactivate%20Agent%0A%20%20%20%20Transport-%3E%3EMsgProc%3A%20%E8%BD%AC%E5%8F%91%20A2UI%20%E6%B6%88%E6%81%AF%0A%20%20%20%20deactivate%20Transport%0A%0A%20%20%20%20activate%20MsgProc%0A%20%20%20%20MsgProc-%3E%3EMsgProc%3A%20processMessage(createSurface)%0A%20%20%20%20MsgProc-%3E%3ESurface%3A%20%E5%88%9B%E5%BB%BA%20Surface(%22restaurant-search%22)%0A%20%20%20%20activate%20Surface%0A%20%20%20%20Surface-%3E%3ESurface%3A%20%E7%BB%91%E5%AE%9A%20Catalog%2C%20%E5%88%9D%E5%A7%8B%E5%8C%96%20DataModel%0A%20%20%20%20Surface--%3E%3EMsgProc%3A%20Surface%20created%0A%20%20%20%20deactivate%20Surface%0A%0A%20%20%20%20MsgProc-%3E%3EMsgProc%3A%20processMessage(updateComponents)%0A%20%20%20%20MsgProc-%3E%3ESurface%3A%20%E6%B7%BB%E5%8A%A0%E7%BB%84%E4%BB%B6%20(title%2C%20search-form%2C%20result-list...)%0A%20%20%20%20activate%20Surface%0A%20%20%20%20Surface-%3E%3ESurface%3A%20ComponentsModel.addComponent()%0A%20%20%20%20Surface--%3E%3EBinder%3A%20%E8%A7%A6%E5%8F%91%20onUpdated%20%E4%BA%8B%E4%BB%B6%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20resolveAndBind(props%2C%20behaviorTree)%0A%20%20%20%20Binder-%3E%3EDataModel%3A%20subscribeDynamicValue(path)%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel--%3E%3EBinder%3A%20%E8%BF%94%E5%9B%9E%E5%BD%93%E5%89%8D%E5%80%BC%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20Binder--%3E%3EUI%3A%20%E9%80%9A%E7%9F%A5%20props%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20Surface%0A%0A%20%20%20%20MsgProc-%3E%3EMsgProc%3A%20processMessage(updateDataModel)%0A%20%20%20%20MsgProc-%3E%3EDataModel%3A%20set(%22%2Frestaurants%22%2C%20%5B...%5D)%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel-%3E%3EDataModel%3A%20notifySignals(%22%2Frestaurants%22)%0A%20%20%20%20DataModel-%3E%3EBinder%3A%20Signal%20%E6%9B%B4%E6%96%B0%E8%A7%A6%E5%8F%91%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20rebuildAllBindings()%0A%20%20%20%20Binder--%3E%3EUI%3A%20%E9%80%9A%E7%9F%A5%20props%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20MsgProc%0A%0A%20%20%20%20UI-%3E%3EUI%3A%20%E6%B8%B2%E6%9F%93%E9%A4%90%E5%8E%85%E5%88%97%E8%A1%A8%20(%E5%8E%9F%E7%94%9F%E7%BB%84%E4%BB%B6)%0A%20%20%20%20UI--%3E%3EUser%3A%20%E6%98%BE%E7%A4%BA%E9%A4%90%E5%8E%85%E6%90%9C%E7%B4%A2%E7%95%8C%E9%9D%A2%0A%20%20%20%20deactivate%20Client%0A%0A%20%20%20%20Note%20over%20User%2CUI%3A%20%E7%94%A8%E6%88%B7%E4%B8%8E%20UI%20%E4%BA%A4%E4%BA%92%0A%0A%20%20%20%20User-%3E%3EUI%3A%20%E9%80%89%E6%8B%A9%22%E6%84%8F%E9%A4%90%22%E7%AD%9B%E9%80%89%20%2B%20%E7%82%B9%E5%87%BB%22%E6%90%9C%E7%B4%A2%22%0A%20%20%20%20activate%20UI%0A%20%20%20%20UI-%3E%3EBinder%3A%20%E8%A7%A6%E5%8F%91%20Action%20dispatch%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20resolveDynamicValue(payload)%0A%20%20%20%20Binder-%3E%3EDataModel%3A%20%E8%AF%BB%E5%8F%96%20payload%20%E4%B8%AD%E7%9A%84%E7%BB%91%E5%AE%9A%E5%80%BC%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel--%3E%3EBinder%3A%20%E8%BF%94%E5%9B%9E%E5%BD%93%E5%89%8D%E6%95%B0%E6%8D%AE%E5%BF%AB%E7%85%A7%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20Binder-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%E7%94%A8%E6%88%B7%20Action%20(%E5%90%AB%20payload)%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20UI%0A%0A%20%20%20%20Transport-%3E%3EAgent%3A%20%E8%BD%AC%E5%8F%91%20Action%20%E4%BA%8B%E4%BB%B6%0A%20%20%20%20activate%20Agent%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E5%A4%84%E7%90%86%E7%94%A8%E6%88%B7%E6%93%8D%E4%BD%9C%0A%20%20%20%20Agent-%3E%3ELLM%3A%20%E7%94%9F%E6%88%90%E6%9B%B4%E6%96%B0%E7%9A%84%20UI%20(updateComponents%20%2B%20updateDataModel)%0A%20%20%20%20activate%20LLM%0A%20%20%20%20LLM--%3E%3EAgent%3A%20%E6%9B%B4%E6%96%B0%E5%90%8E%E7%9A%84%20A2UI%20JSON%0A%20%20%20%20deactivate%20LLM%0A%20%20%20%20Agent-%3E%3ETransport%3A%20%E5%8F%91%E9%80%81%E5%A2%9E%E9%87%8F%E6%9B%B4%E6%96%B0%E6%B6%88%E6%81%AF%0A%20%20%20%20deactivate%20Agent%0A%0A%20%20%20%20Transport-%3E%3EMsgProc%3A%20%E8%BD%AC%E5%8F%91%E6%9B%B4%E6%96%B0%E6%B6%88%E6%81%AF%0A%20%20%20%20activate%20MsgProc%0A%20%20%20%20MsgProc-%3E%3ESurface%3A%20updateComponents%20(%E6%9B%BF%E6%8D%A2%E6%90%9C%E7%B4%A2%E7%BB%93%E6%9E%9C)%0A%20%20%20%20activate%20Surface%0A%20%20%20%20Surface-%3E%3EBinder%3A%20%E8%A7%A6%E5%8F%91%20onUpdated%0A%20%20%20%20activate%20Binder%0A%20%20%20%20Binder-%3E%3EBinder%3A%20resolveAndBind()%0A%20%20%20%20Binder-%3E%3EDataModel%3A%20subscribe%20%2F%20read%0A%20%20%20%20activate%20DataModel%0A%20%20%20%20DataModel--%3E%3EBinder%3A%20%E8%BF%94%E5%9B%9E%E6%96%B0%E6%95%B0%E6%8D%AE%0A%20%20%20%20deactivate%20DataModel%0A%20%20%20%20Binder--%3E%3EUI%3A%20%E9%80%9A%E7%9F%A5%20props%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20deactivate%20Binder%0A%20%20%20%20deactivate%20Surface%0A%20%20%20%20deactivate%20MsgProc%0A%0A%20%20%20%20UI-%3E%3EUI%3A%20%E5%A2%9E%E9%87%8F%E6%9B%B4%E6%96%B0%20UI%20(%E5%8F%AA%E6%9B%B4%E6%96%B0%E5%8F%98%E5%8C%96%E7%9A%84%E9%83%A8%E5%88%86)%0A%20%20%20%20UI--%3E%3EUser%3A%20%E6%98%BE%E7%A4%BA%E7%AD%9B%E9%80%89%E5%90%8E%E7%9A%84%E9%A4%90%E5%8E%85%E5%88%97%E8%A1%A8%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=a("",13))])}const B=h(r,[["render",F]]);export{C as __pageData,B as default}; diff --git a/assets/insight-labs_repo-insight_amis.md.BPSKFzw2.js b/assets/insight-labs_repo-insight_amis.md.CM72pf5M.js similarity index 99% rename from assets/insight-labs_repo-insight_amis.md.BPSKFzw2.js rename to assets/insight-labs_repo-insight_amis.md.CM72pf5M.js index a3e33c6..7291f57 100644 --- a/assets/insight-labs_repo-insight_amis.md.BPSKFzw2.js +++ b/assets/insight-labs_repo-insight_amis.md.CM72pf5M.js @@ -1,4 +1,4 @@ -import{_ as k,r as e,c as r,o as F,d as h,b as i,a as s,w as t,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const B=JSON.parse('{"title":"amis 开源项目解读","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"amis 开源项目解读","tldr":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","abstract":null,"permalink":"/insight-labs/repo-insight/amis","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/amis.md","filePath":"31.Insight Labs/11.Reop Insight Reports/01.amis.md"}'),d={name:"insight-labs/repo-insight/amis.md"};function g(c,a,y,E,b,o){const p=e("MermaidChart"),l=e("ClientOnly");return F(),r("div",null,[a[0]||(a[0]=h(`

amis 开源项目解读

项目信息

  • 项目名称:amis

  • 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。

  • 项目地址:https://github.com/baidu/amis

  • 官方文档:https://baidu.github.io/amis/zh-CN/docs/index

  • 核心特点

    • 670,000 行源代码
    • 237+ 个前端组件(142 UI + 95 业务)
    • 9 个 Monorepo 子包(5 层架构)
    • 86+ 个编辑器插件
    • Apache-2.0 开源许可
  • 核心模块

    • L5: amis-editor,可视化编辑器,拖拽构建页面
    • L4: amis,业务渲染,JSON → 页面
    • L3: amis-ui,基础组件,按钮/表单/表格
    • L2: amis-core,基础设施,工厂/Store/动作
    • L1: amis-formula,表达式引擎,公式/变量/过滤器

1. 项目概览

1.1 项目定位与核心价值

  • 一句话定位:amis 是一个面向前端开发者和后端开发者的低代码前端框架,通过 JSON 配置就能自动生成各种后台管理页面(CRUD、表单、图表、仪表盘等),极大减少前端开发成本,甚至可以完全不需要了解前端技术。

  • 解决的核心痛点

    1. 后台页面重复开发:企业后台管理系统存在大量重复性工作(表单、表格、列表页),传统方式需要手写大量 HTML/CSS/JS,开发效率低。amis 将页面结构抽象为 JSON 配置,实现"配置即页面"。
    2. 前端人力资源瓶颈:大量后端开发者需要做后台管理系统但不熟悉前端技术。amis 允许后端开发者通过编写 JSON 配置来生成页面,降低前端门槛。
    3. UI 一致性难以保证:企业级后台系统需要统一的 UI 风格和交互规范。amis 内置了一套完整的 UI 组件库和主题系统,保证了所有页面风格统一。
  • 目标用户群

    • 前端开发者:需要快速搭建后台管理系统的前端工程师
    • 后端开发者:不熟悉前端但需要做后台页面的后端开发者
    • 平台搭建者:需要集成低代码能力的 SaaS 平台开发者

1.2 目标场景与典型 Case

  • 场景一 — 企业后台管理系统快速搭建:HR、财务、客户管理等内部系统,只需在 JSON 中描述页面结构,框架自动渲染。

  • 场景二 — 低代码平台的核心渲染引擎:爱速搭(百度的低代码平台)使用 amis 作为底层渲染机制。

  • 场景三 — 动态表单与配置化后台:SaaS 平台需要根据客户需求动态调整页面,改 JSON 配置即可改变页面,无需重新发布。

  • 典型使用 Case(伪代码)

typescript
// 1. 定义 JSON Schema
+import{_ as k,r as e,c as r,o as F,d as h,b as i,a as s,w as t,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const B=JSON.parse('{"title":"amis 开源项目解读","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"amis 开源项目解读","tldr":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","abstract":null,"permalink":"/insight-labs/repo-insight/amis","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/amis.md","filePath":"31.Insight Labs/11.Reop Insight Reports/01.amis.md"}'),d={name:"insight-labs/repo-insight/amis.md"};function g(c,a,y,E,b,o){const p=e("MermaidChart"),l=e("ClientOnly");return F(),r("div",null,[a[0]||(a[0]=h(`

amis 开源项目解读

项目信息

  • 项目名称:amis

  • 项目描述:amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。

  • 项目地址:https://github.com/baidu/amis

  • 官方文档:https://baidu.github.io/amis/zh-CN/docs/index

  • 核心特点

    • 670,000 行源代码
    • 237+ 个前端组件(142 UI + 95 业务)
    • 9 个 Monorepo 子包(5 层架构)
    • 86+ 个编辑器插件
    • Apache-2.0 开源许可
  • 核心模块

    • L5: amis-editor,可视化编辑器,拖拽构建页面
    • L4: amis,业务渲染,JSON → 页面
    • L3: amis-ui,基础组件,按钮/表单/表格
    • L2: amis-core,基础设施,工厂/Store/动作
    • L1: amis-formula,表达式引擎,公式/变量/过滤器

1. 项目概览

1.1 项目定位与核心价值

  • 一句话定位:amis 是一个面向前端开发者和后端开发者的低代码前端框架,通过 JSON 配置就能自动生成各种后台管理页面(CRUD、表单、图表、仪表盘等),极大减少前端开发成本,甚至可以完全不需要了解前端技术。

  • 解决的核心痛点

    1. 后台页面重复开发:企业后台管理系统存在大量重复性工作(表单、表格、列表页),传统方式需要手写大量 HTML/CSS/JS,开发效率低。amis 将页面结构抽象为 JSON 配置,实现"配置即页面"。
    2. 前端人力资源瓶颈:大量后端开发者需要做后台管理系统但不熟悉前端技术。amis 允许后端开发者通过编写 JSON 配置来生成页面,降低前端门槛。
    3. UI 一致性难以保证:企业级后台系统需要统一的 UI 风格和交互规范。amis 内置了一套完整的 UI 组件库和主题系统,保证了所有页面风格统一。
  • 目标用户群

    • 前端开发者:需要快速搭建后台管理系统的前端工程师
    • 后端开发者:不熟悉前端但需要做后台页面的后端开发者
    • 平台搭建者:需要集成低代码能力的 SaaS 平台开发者

1.2 目标场景与典型 Case

  • 场景一 — 企业后台管理系统快速搭建:HR、财务、客户管理等内部系统,只需在 JSON 中描述页面结构,框架自动渲染。

  • 场景二 — 低代码平台的核心渲染引擎:爱速搭(百度的低代码平台)使用 amis 作为底层渲染机制。

  • 场景三 — 动态表单与配置化后台:SaaS 平台需要根据客户需求动态调整页面,改 JSON 配置即可改变页面,无需重新发布。

  • 典型使用 Case(伪代码)

typescript
// 1. 定义 JSON Schema
 const schema = {
   type: "page",
   title: "用户管理",
diff --git a/assets/insight-labs_repo-insight_amis.md.BPSKFzw2.lean.js b/assets/insight-labs_repo-insight_amis.md.CM72pf5M.lean.js
similarity index 99%
rename from assets/insight-labs_repo-insight_amis.md.BPSKFzw2.lean.js
rename to assets/insight-labs_repo-insight_amis.md.CM72pf5M.lean.js
index 55a6dd4..e568036 100644
--- a/assets/insight-labs_repo-insight_amis.md.BPSKFzw2.lean.js
+++ b/assets/insight-labs_repo-insight_amis.md.CM72pf5M.lean.js
@@ -1 +1 @@
-import{_ as k,r as e,c as r,o as F,d as h,b as i,a as s,w as t,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const B=JSON.parse('{"title":"amis 开源项目解读","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"amis 开源项目解读","tldr":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","abstract":null,"permalink":"/insight-labs/repo-insight/amis","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/amis.md","filePath":"31.Insight Labs/11.Reop Insight Reports/01.amis.md"}'),d={name:"insight-labs/repo-insight/amis.md"};function g(c,a,y,E,b,o){const p=e("MermaidChart"),l=e("ClientOnly");return F(),r("div",null,[a[0]||(a[0]=h("",53)),i(l,null,{default:t(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Render%20as%20amis.render()%0A%20%20%20%20participant%20Store%20as%20RendererStore%20(MST)%0A%20%20%20%20participant%20SR%20as%20SchemaRenderer%0A%20%20%20%20participant%20Factory%20as%20RendererFactory%0A%20%20%20%20participant%20Comp%20as%20%E4%B8%9A%E5%8A%A1%E6%B8%B2%E6%9F%93%E5%99%A8%0A%20%20%20%20participant%20UI%20as%20amis-ui%20%E7%BB%84%E4%BB%B6%0A%0A%20%20%20%20User-%3E%3ERender%3A%20render(schema%2C%20props%2C%20options)%0A%20%20%20%20activate%20Render%0A%20%20%20%20Render-%3E%3ERender%3A%20%E7%8E%AF%E5%A2%83%E5%88%9D%E5%A7%8B%E5%8C%96%20(locale%2C%20theme)%0A%20%20%20%20Render-%3E%3EStore%3A%20RendererStore.create(%7B%7D%2C%20options)%0A%20%20%20%20activate%20Store%0A%20%20%20%20Store-%3E%3EStore%3A%20%E6%B3%A8%E5%85%A5%20env%20(fetcher%2Fnotify%2FjumpTo...)%0A%20%20%20%20Store--%3E%3ERender%3A%20store%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20Store%0A%20%20%20%20Render-%3E%3ERender%3A%20envOverwrite(schema%2C%20locale%2C%20platform)%0A%20%20%20%20Note%20over%20Render%3A%20%E6%A0%B9%E6%8D%AE%E7%8E%AF%E5%A2%83%E8%A6%86%E7%9B%96%20Schema%20%E9%85%8D%E7%BD%AE%0A%20%20%20%20Render-%3E%3ERender%3A%20replaceText(schema)%0A%20%20%20%20Render-%3E%3ESR%3A%20ScopedRootRenderer%20%E2%86%92%20RootRenderer%0A%20%20%20%20activate%20SR%0A%20%20%20%20SR-%3E%3ESR%3A%20store.addStore(RootStore)%0A%20%20%20%20SR-%3E%3ESR%3A%20RootStore.initData(props.data)%0A%20%20%20%20SR-%3E%3ESR%3A%20%E5%BC%82%E6%AD%A5%E5%8A%A0%E8%BD%BD%E6%B8%B2%E6%9F%93%E5%99%A8%20(%E5%A6%82%E6%9C%89)%0A%20%20%20%20SR-%3E%3ESR%3A%20render(pathPrefix%2C%20schema%2C%20props)%0A%20%20%20%20loop%20%E9%80%92%E5%BD%92%E5%A4%84%E7%90%86%E6%AF%8F%E4%B8%AA%20Schema%20%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20SR-%3E%3EFactory%3A%20resolveRenderer(path%2C%20schema)%0A%20%20%20%20%20%20%20%20activate%20Factory%0A%20%20%20%20%20%20%20%20Factory-%3E%3EFactory%3A%20renderersTypeMap%5Btype%5D%20%E5%8C%B9%E9%85%8D%0A%20%20%20%20%20%20%20%20Factory--%3E%3ESR%3A%20RendererConfig%20(%E5%90%AB%20component)%0A%20%20%20%20%20%20%20%20deactivate%20Factory%0A%20%20%20%20%20%20%20%20SR-%3E%3ESR%3A%20filterSchema(schema%2C%20renderer)%0A%20%20%20%20%20%20%20%20SR-%3E%3EComp%3A%20renderer.component%20(%E6%B8%B2%E6%9F%93%E7%BB%84%E4%BB%B6)%0A%20%20%20%20%20%20%20%20activate%20Comp%0A%20%20%20%20%20%20%20%20Comp-%3E%3EComp%3A%20%E5%A4%84%E7%90%86%20props%2C%20data%2C%20dispatchEvent%0A%20%20%20%20%20%20%20%20alt%20%E6%9C%89%E5%B5%8C%E5%A5%97%E5%8C%BA%E5%9F%9F%20(body%2Fchildren%2Fcolumns)%0A%20%20%20%20%20%20%20%20%20%20%20%20Comp-%3E%3ESR%3A%20render(region%2C%20schema%2C%20props)%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20SR%3A%20%E9%80%92%E5%BD%92%E8%BF%9B%E5%85%A5%E4%B8%8B%E4%B8%80%E4%B8%AA%20SchemaNode%0A%20%20%20%20%20%20%20%20else%20%E5%8F%B6%E5%AD%90%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20%20%20%20%20Comp-%3E%3EUI%3A%20%E6%B8%B2%E6%9F%93%E5%9F%BA%E7%A1%80%20UI%20%E7%BB%84%E4%BB%B6%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20UI%0A%20%20%20%20%20%20%20%20%20%20%20%20UI--%3E%3EComp%3A%20React%20%E7%BB%84%E4%BB%B6%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20UI%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Comp--%3E%3ESR%3A%20JSX.Element%0A%20%20%20%20%20%20%20%20deactivate%20Comp%0A%20%20%20%20end%0A%20%20%20%20SR--%3E%3ERender%3A%20%E5%AE%8C%E6%95%B4%20React%20%E7%BB%84%E4%BB%B6%E6%A0%91%0A%20%20%20%20deactivate%20SR%0A%20%20%20%20Render--%3E%3EUser%3A%20JSX.Element%20(%E5%8F%AF%E6%8C%82%E8%BD%BD%E5%88%B0%20DOM)%0A%20%20%20%20deactivate%20Render%0A",showToolbar:"1"})]),_:1}),a[1]||(a[1]=s("h3",{id:"场景说明-1",tabindex:"-1"},[n("场景说明 "),s("a",{class:"header-anchor",href:"#场景说明-1","aria-label":"Permalink to “场景说明”"},"​")],-1)),a[2]||(a[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景二:用户交互触发动作"),n(" — 从按钮点击、表单提交等用户操作,触发动作(如 reload、ajax、dialog),到最终 UI 更新的完整流程。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:t(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Btn%20as%20Button%20%E7%BB%84%E4%BB%B6%0A%20%20%20%20participant%20Evt%20as%20dispatchEvent%0A%20%20%20%20participant%20Root%20as%20RootRenderer%0A%20%20%20%20participant%20Store%20as%20MST%20Store%0A%20%20%20%20participant%20API%20as%20API%20%E6%9C%8D%E5%8A%A1%0A%20%20%20%20participant%20SR%20as%20SchemaRenderer%0A%0A%20%20%20%20User-%3E%3EBtn%3A%20%E7%82%B9%E5%87%BB%22%E4%BF%9D%E5%AD%98%22%E6%8C%89%E9%92%AE%0A%20%20%20%20Btn-%3E%3EEvt%3A%20dispatchEvent(e%2C%20data%2C%20renderer%2C%20scoped)%0A%20%20%20%20activate%20Evt%0A%20%20%20%20Evt-%3E%3EEvt%3A%20%E6%9F%A5%E6%89%BE%20onEvent%20%E9%85%8D%E7%BD%AE%0A%20%20%20%20Evt-%3E%3EEvt%3A%20%E5%8C%B9%E9%85%8D%20action%20%E6%9D%A1%E4%BB%B6%0A%20%20%20%20Evt-%3E%3ERoot%3A%20handleAction(e%2C%20action%2C%20ctx)%0A%20%20%20%20activate%20Root%0A%0A%20%20%20%20alt%20actionType%20%3D%20'ajax'%0A%20%20%20%20%20%20%20%20Root-%3E%3EStore%3A%20store.saveRemote(api%2C%20ctx)%0A%20%20%20%20%20%20%20%20activate%20Store%0A%20%20%20%20%20%20%20%20Store-%3E%3EAPI%3A%20env.fetcher(api)%0A%20%20%20%20%20%20%20%20activate%20API%0A%20%20%20%20%20%20%20%20API--%3E%3EStore%3A%20response%20(data%2C%20status%2C%20msg)%0A%20%20%20%20%20%20%20%20deactivate%20API%0A%20%20%20%20%20%20%20%20Store-%3E%3EStore%3A%20%E5%90%88%E5%B9%B6%E6%95%B0%E6%8D%AE%E5%88%B0%20Store%0A%20%20%20%20%20%20%20%20Store-%3E%3ESR%3A%20MST%20reaction%20(%E8%87%AA%E5%8A%A8%E5%93%8D%E5%BA%94%E5%BC%8F%E6%9B%B4%E6%96%B0)%0A%20%20%20%20%20%20%20%20deactivate%20Store%0A%20%20%20%20%20%20%20%20activate%20SR%0A%20%20%20%20%20%20%20%20SR-%3E%3ESR%3A%20%E9%87%8D%E6%96%B0%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3%E7%BB%84%E4%BB%B6%0A%20%20%20%20%20%20%20%20SR--%3E%3EUser%3A%20UI%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20%20%20%20%20deactivate%20SR%0A%0A%20%20%20%20else%20actionType%20%3D%20'reload'%0A%20%20%20%20%20%20%20%20Root-%3E%3ERoot%3A%20scoped.reload(target%2C%20data)%0A%20%20%20%20%20%20%20%20Root-%3E%3EStore%3A%20%E5%AD%90%20Store%20%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20activate%20Store%0A%20%20%20%20%20%20%20%20Store-%3E%3EAPI%3A%20env.fetcher(api)%0A%20%20%20%20%20%20%20%20activate%20API%0A%20%20%20%20%20%20%20%20API--%3E%3EStore%3A%20response%0A%20%20%20%20%20%20%20%20deactivate%20API%0A%20%20%20%20%20%20%20%20Store-%3E%3ESR%3A%20reaction%20%E2%86%92%20%E9%87%8D%E6%96%B0%E6%B8%B2%E6%9F%93%0A%20%20%20%20%20%20%20%20deactivate%20Store%0A%0A%20%20%20%20else%20actionType%20%3D%20'dialog'%0A%20%20%20%20%20%20%20%20Root-%3E%3EStore%3A%20store.openDialog(ctx)%0A%20%20%20%20%20%20%20%20Note%20over%20Store%3A%20%E5%88%9B%E5%BB%BA%E5%BC%B9%E7%AA%97%20Schema%20%E5%B9%B6%E6%B8%B2%E6%9F%93%0A%0A%20%20%20%20else%20actionType%20%3D%20'url'%2F'link'%0A%20%20%20%20%20%20%20%20Root-%3E%3ERoot%3A%20env.jumpTo(url%2C%20action)%0A%20%20%20%20%20%20%20%20Note%20over%20Root%3A%20%E9%A1%B5%E9%9D%A2%E8%B7%B3%E8%BD%AC%0A%0A%20%20%20%20else%20actionType%20%3D%20'toast'%0A%20%20%20%20%20%20%20%20Root-%3E%3ERoot%3A%20env.notify(level%2C%20msg)%0A%20%20%20%20%20%20%20%20Note%20over%20Root%3A%20%E6%98%BE%E7%A4%BA%E6%B6%88%E6%81%AF%E9%80%9A%E7%9F%A5%0A%20%20%20%20end%0A%0A%20%20%20%20deactivate%20Root%0A%20%20%20%20deactivate%20Evt%0A",showToolbar:"1"})]),_:1}),a[3]||(a[3]=h("",16))])}const m=k(d,[["render",g]]);export{B as __pageData,m as default};
+import{_ as k,r as e,c as r,o as F,d as h,b as i,a as s,w as t,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const B=JSON.parse('{"title":"amis 开源项目解读","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"amis 开源项目解读","tldr":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","description":"amis 是百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。","abstract":null,"permalink":"/insight-labs/repo-insight/amis","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/amis.md","filePath":"31.Insight Labs/11.Reop Insight Reports/01.amis.md"}'),d={name:"insight-labs/repo-insight/amis.md"};function g(c,a,y,E,b,o){const p=e("MermaidChart"),l=e("ClientOnly");return F(),r("div",null,[a[0]||(a[0]=h("",53)),i(l,null,{default:t(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Render%20as%20amis.render()%0A%20%20%20%20participant%20Store%20as%20RendererStore%20(MST)%0A%20%20%20%20participant%20SR%20as%20SchemaRenderer%0A%20%20%20%20participant%20Factory%20as%20RendererFactory%0A%20%20%20%20participant%20Comp%20as%20%E4%B8%9A%E5%8A%A1%E6%B8%B2%E6%9F%93%E5%99%A8%0A%20%20%20%20participant%20UI%20as%20amis-ui%20%E7%BB%84%E4%BB%B6%0A%0A%20%20%20%20User-%3E%3ERender%3A%20render(schema%2C%20props%2C%20options)%0A%20%20%20%20activate%20Render%0A%20%20%20%20Render-%3E%3ERender%3A%20%E7%8E%AF%E5%A2%83%E5%88%9D%E5%A7%8B%E5%8C%96%20(locale%2C%20theme)%0A%20%20%20%20Render-%3E%3EStore%3A%20RendererStore.create(%7B%7D%2C%20options)%0A%20%20%20%20activate%20Store%0A%20%20%20%20Store-%3E%3EStore%3A%20%E6%B3%A8%E5%85%A5%20env%20(fetcher%2Fnotify%2FjumpTo...)%0A%20%20%20%20Store--%3E%3ERender%3A%20store%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20Store%0A%20%20%20%20Render-%3E%3ERender%3A%20envOverwrite(schema%2C%20locale%2C%20platform)%0A%20%20%20%20Note%20over%20Render%3A%20%E6%A0%B9%E6%8D%AE%E7%8E%AF%E5%A2%83%E8%A6%86%E7%9B%96%20Schema%20%E9%85%8D%E7%BD%AE%0A%20%20%20%20Render-%3E%3ERender%3A%20replaceText(schema)%0A%20%20%20%20Render-%3E%3ESR%3A%20ScopedRootRenderer%20%E2%86%92%20RootRenderer%0A%20%20%20%20activate%20SR%0A%20%20%20%20SR-%3E%3ESR%3A%20store.addStore(RootStore)%0A%20%20%20%20SR-%3E%3ESR%3A%20RootStore.initData(props.data)%0A%20%20%20%20SR-%3E%3ESR%3A%20%E5%BC%82%E6%AD%A5%E5%8A%A0%E8%BD%BD%E6%B8%B2%E6%9F%93%E5%99%A8%20(%E5%A6%82%E6%9C%89)%0A%20%20%20%20SR-%3E%3ESR%3A%20render(pathPrefix%2C%20schema%2C%20props)%0A%20%20%20%20loop%20%E9%80%92%E5%BD%92%E5%A4%84%E7%90%86%E6%AF%8F%E4%B8%AA%20Schema%20%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20SR-%3E%3EFactory%3A%20resolveRenderer(path%2C%20schema)%0A%20%20%20%20%20%20%20%20activate%20Factory%0A%20%20%20%20%20%20%20%20Factory-%3E%3EFactory%3A%20renderersTypeMap%5Btype%5D%20%E5%8C%B9%E9%85%8D%0A%20%20%20%20%20%20%20%20Factory--%3E%3ESR%3A%20RendererConfig%20(%E5%90%AB%20component)%0A%20%20%20%20%20%20%20%20deactivate%20Factory%0A%20%20%20%20%20%20%20%20SR-%3E%3ESR%3A%20filterSchema(schema%2C%20renderer)%0A%20%20%20%20%20%20%20%20SR-%3E%3EComp%3A%20renderer.component%20(%E6%B8%B2%E6%9F%93%E7%BB%84%E4%BB%B6)%0A%20%20%20%20%20%20%20%20activate%20Comp%0A%20%20%20%20%20%20%20%20Comp-%3E%3EComp%3A%20%E5%A4%84%E7%90%86%20props%2C%20data%2C%20dispatchEvent%0A%20%20%20%20%20%20%20%20alt%20%E6%9C%89%E5%B5%8C%E5%A5%97%E5%8C%BA%E5%9F%9F%20(body%2Fchildren%2Fcolumns)%0A%20%20%20%20%20%20%20%20%20%20%20%20Comp-%3E%3ESR%3A%20render(region%2C%20schema%2C%20props)%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20SR%3A%20%E9%80%92%E5%BD%92%E8%BF%9B%E5%85%A5%E4%B8%8B%E4%B8%80%E4%B8%AA%20SchemaNode%0A%20%20%20%20%20%20%20%20else%20%E5%8F%B6%E5%AD%90%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20%20%20%20%20Comp-%3E%3EUI%3A%20%E6%B8%B2%E6%9F%93%E5%9F%BA%E7%A1%80%20UI%20%E7%BB%84%E4%BB%B6%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20UI%0A%20%20%20%20%20%20%20%20%20%20%20%20UI--%3E%3EComp%3A%20React%20%E7%BB%84%E4%BB%B6%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20UI%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Comp--%3E%3ESR%3A%20JSX.Element%0A%20%20%20%20%20%20%20%20deactivate%20Comp%0A%20%20%20%20end%0A%20%20%20%20SR--%3E%3ERender%3A%20%E5%AE%8C%E6%95%B4%20React%20%E7%BB%84%E4%BB%B6%E6%A0%91%0A%20%20%20%20deactivate%20SR%0A%20%20%20%20Render--%3E%3EUser%3A%20JSX.Element%20(%E5%8F%AF%E6%8C%82%E8%BD%BD%E5%88%B0%20DOM)%0A%20%20%20%20deactivate%20Render%0A",showToolbar:"1"})]),_:1}),a[1]||(a[1]=s("h3",{id:"场景说明-1",tabindex:"-1"},[n("场景说明 "),s("a",{class:"header-anchor",href:"#场景说明-1","aria-label":"Permalink to “场景说明”"},"​")],-1)),a[2]||(a[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景二:用户交互触发动作"),n(" — 从按钮点击、表单提交等用户操作,触发动作(如 reload、ajax、dialog),到最终 UI 更新的完整流程。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:t(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Btn%20as%20Button%20%E7%BB%84%E4%BB%B6%0A%20%20%20%20participant%20Evt%20as%20dispatchEvent%0A%20%20%20%20participant%20Root%20as%20RootRenderer%0A%20%20%20%20participant%20Store%20as%20MST%20Store%0A%20%20%20%20participant%20API%20as%20API%20%E6%9C%8D%E5%8A%A1%0A%20%20%20%20participant%20SR%20as%20SchemaRenderer%0A%0A%20%20%20%20User-%3E%3EBtn%3A%20%E7%82%B9%E5%87%BB%22%E4%BF%9D%E5%AD%98%22%E6%8C%89%E9%92%AE%0A%20%20%20%20Btn-%3E%3EEvt%3A%20dispatchEvent(e%2C%20data%2C%20renderer%2C%20scoped)%0A%20%20%20%20activate%20Evt%0A%20%20%20%20Evt-%3E%3EEvt%3A%20%E6%9F%A5%E6%89%BE%20onEvent%20%E9%85%8D%E7%BD%AE%0A%20%20%20%20Evt-%3E%3EEvt%3A%20%E5%8C%B9%E9%85%8D%20action%20%E6%9D%A1%E4%BB%B6%0A%20%20%20%20Evt-%3E%3ERoot%3A%20handleAction(e%2C%20action%2C%20ctx)%0A%20%20%20%20activate%20Root%0A%0A%20%20%20%20alt%20actionType%20%3D%20'ajax'%0A%20%20%20%20%20%20%20%20Root-%3E%3EStore%3A%20store.saveRemote(api%2C%20ctx)%0A%20%20%20%20%20%20%20%20activate%20Store%0A%20%20%20%20%20%20%20%20Store-%3E%3EAPI%3A%20env.fetcher(api)%0A%20%20%20%20%20%20%20%20activate%20API%0A%20%20%20%20%20%20%20%20API--%3E%3EStore%3A%20response%20(data%2C%20status%2C%20msg)%0A%20%20%20%20%20%20%20%20deactivate%20API%0A%20%20%20%20%20%20%20%20Store-%3E%3EStore%3A%20%E5%90%88%E5%B9%B6%E6%95%B0%E6%8D%AE%E5%88%B0%20Store%0A%20%20%20%20%20%20%20%20Store-%3E%3ESR%3A%20MST%20reaction%20(%E8%87%AA%E5%8A%A8%E5%93%8D%E5%BA%94%E5%BC%8F%E6%9B%B4%E6%96%B0)%0A%20%20%20%20%20%20%20%20deactivate%20Store%0A%20%20%20%20%20%20%20%20activate%20SR%0A%20%20%20%20%20%20%20%20SR-%3E%3ESR%3A%20%E9%87%8D%E6%96%B0%E6%B8%B2%E6%9F%93%E7%9B%B8%E5%85%B3%E7%BB%84%E4%BB%B6%0A%20%20%20%20%20%20%20%20SR--%3E%3EUser%3A%20UI%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20%20%20%20%20deactivate%20SR%0A%0A%20%20%20%20else%20actionType%20%3D%20'reload'%0A%20%20%20%20%20%20%20%20Root-%3E%3ERoot%3A%20scoped.reload(target%2C%20data)%0A%20%20%20%20%20%20%20%20Root-%3E%3EStore%3A%20%E5%AD%90%20Store%20%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20activate%20Store%0A%20%20%20%20%20%20%20%20Store-%3E%3EAPI%3A%20env.fetcher(api)%0A%20%20%20%20%20%20%20%20activate%20API%0A%20%20%20%20%20%20%20%20API--%3E%3EStore%3A%20response%0A%20%20%20%20%20%20%20%20deactivate%20API%0A%20%20%20%20%20%20%20%20Store-%3E%3ESR%3A%20reaction%20%E2%86%92%20%E9%87%8D%E6%96%B0%E6%B8%B2%E6%9F%93%0A%20%20%20%20%20%20%20%20deactivate%20Store%0A%0A%20%20%20%20else%20actionType%20%3D%20'dialog'%0A%20%20%20%20%20%20%20%20Root-%3E%3EStore%3A%20store.openDialog(ctx)%0A%20%20%20%20%20%20%20%20Note%20over%20Store%3A%20%E5%88%9B%E5%BB%BA%E5%BC%B9%E7%AA%97%20Schema%20%E5%B9%B6%E6%B8%B2%E6%9F%93%0A%0A%20%20%20%20else%20actionType%20%3D%20'url'%2F'link'%0A%20%20%20%20%20%20%20%20Root-%3E%3ERoot%3A%20env.jumpTo(url%2C%20action)%0A%20%20%20%20%20%20%20%20Note%20over%20Root%3A%20%E9%A1%B5%E9%9D%A2%E8%B7%B3%E8%BD%AC%0A%0A%20%20%20%20else%20actionType%20%3D%20'toast'%0A%20%20%20%20%20%20%20%20Root-%3E%3ERoot%3A%20env.notify(level%2C%20msg)%0A%20%20%20%20%20%20%20%20Note%20over%20Root%3A%20%E6%98%BE%E7%A4%BA%E6%B6%88%E6%81%AF%E9%80%9A%E7%9F%A5%0A%20%20%20%20end%0A%0A%20%20%20%20deactivate%20Root%0A%20%20%20%20deactivate%20Evt%0A",showToolbar:"1"})]),_:1}),a[3]||(a[3]=h("",16))])}const m=k(d,[["render",g]]);export{B as __pageData,m as default};
diff --git a/assets/insight-labs_repo-insight_anime.md.GRpRGyDu.js b/assets/insight-labs_repo-insight_anime.md.GRpRGyDu.js
new file mode 100644
index 0000000..8139b04
--- /dev/null
+++ b/assets/insight-labs_repo-insight_anime.md.GRpRGyDu.js
@@ -0,0 +1,788 @@
+import{_ as h,r as e,c as t,o as k,d as a,b as n,w as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"Animejs 开源项目解读","description":"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Animejs 开源项目解读","tldr":"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。","description":"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。","abstract":null,"permalink":"/insight-labs/repo-insight/anime","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/anime.md","filePath":"31.Insight Labs/11.Reop Insight Reports/07.anime.md"}'),r={name:"insight-labs/repo-insight/anime.md"};function d(c,s,g,b,F,E){const i=e("MermaidChart"),p=e("ClientOnly");return k(),t("div",null,[s[0]||(s[0]=a(`

Animejs 开源项目解读

项目信息

  • 项目名称:Animejs
  • 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。
  • 项目地址:https://github.com/juliangarnier/anime
  • 官方文档:https://animejs.com

解决的核心痛点

  1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同的接口和控制方式,Anime.js 提供统一 API 屏蔽底层差异
  2. 复杂动画编排困难:原生 API 缺乏时间线编排能力,Anime.js 内建 Timer → Animation → Timeline 的分层模型
  3. 高性能与代码量平衡:通过模块化 ESM 导出和零运行时依赖的设计,实现功能完备但按需加载的架构

核心架构速览

功能扩展层 (SVG / Text / WAAPI / Events / Easings / ...)
+
+动画抽象层 (Timer → JSAnimation / Timeline / Draggable)
+
+核心引擎层 (Clock / Engine / Render / Values)
+
+基础设施层 (Consts / Helpers / Globals)

1. 项目概览

1.1 项目定位与核心价值

Anime.js 是一个快速、多功能、轻量级的 JavaScript 动画引擎库,提供简洁而强大的 API,支持 CSS 属性、SVG、DOM 属性和 JavaScript 对象动画。

解决的核心痛点

  1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同的接口和控制方式,Anime.js 提供统一 API 屏蔽底层差异
  2. 复杂动画编排困难:原生 API 缺乏时间线编排能力,Anime.js 内建 Timer → Animation → Timeline 的分层模型
  3. 高性能与代码量平衡:通过模块化 ESM 导出和零运行时依赖的设计,实现功能完备但按需加载的架构

1.2 目标用户与使用场景

  • Web 前端开发者:需要在项目中快速添加复杂交互动画
  • 创意设计师/开发者:需要制作高视觉效果的交互动画
  • 框架无关:可在任何 Web 项目中使用 (Vanilla JS / React / Vue 等)

1.3 核心技术亮点

特性说明
零运行时依赖不依赖任何第三方库
模块化架构14 个独立可导入子模块,Tree Shaking 友好
统一动画模型CSS/DOM/SVG/JS Object 统一 API
高性能渲染rAF 主循环 + 链表遍历 + 帧节流
值系统自动识别 NUMBER/UNIT/COLOR/COMPLEX 四种类型
合成系统replace/blend/none 三种 Tween 冲突处理
Promise 支持.then() 方法支持 await 语法
丰富扩展SVG 描边/变形/路径、文本分割/乱序、拖拽、滚动驱动

1.4 技术栈与选型对比

层面技术选型权衡考量
语言JavaScript ESMTree Shaking 友好,无编译步骤
类型JSDoc + TS .d.ts保持 JS 开发体验同时提供完整类型
构建RollupESM/CJS/UMD/IIFE 多格式输出
架构分层继承 (Clock→Timer→Animation)复用时间管理逻辑,代价是降低灵活性
渲染自建 rAF 循环精确控制每帧,支持复杂编排
WAAPI可选集成模块保留高性能原生动画路径

2. 整体架构设计

2.1 架构概述

Anime.js V4 采用 分层继承架构,从底层到顶层分为四个层次:

  • 基础设施层 (Infrastructure):环境检测、浏览器 API 适配、常量定义
  • 核心引擎层 (Core Engine):Clock 时间系统、Render 渲染循环、Values 值处理系统、全局 Engine 单例
  • 动画抽象层 (Animation Abstractions):Timer 基类 → Animation(单动画)/Timeline(时间线编排)/Draggable(拖拽)
  • 功能扩展层 (Extensions):Easings 缓动、SVG 工具、Text 文本、WAAPI 桥接、Events 事件、Scope 作用域

2.2 整体架构图

text
+=======================================================================+
+|                      功能扩展层 (Extensions)                           |
+|  +----------+  +----------+  +----------+  +-----------+             |
+|  |  SVG     |  |  Text    |  |  WAAPI   |  |  Events   |             |
+|  | drawable |  | split    |  | waapi()  |  | scroll    |             |
+|  | morphTo  |  | scramble |  | animate  |  | observer  |             |
+|  | motion   |  |          |  |          |  |           |             |
+|  +----+-----+  +----+-----+  +----+-----+  +-----+-----+             |
+|       |             |             |               |                    |
+|  +----+-----+  +----+-----+  +----+-----+  +-----+-----+             |
+|  | Layout   |  | Easings  |  | Scope    |  | Utils     |             |
+|  | animate  |  | eases    |  | scope()  |  | stagger   |             |
+|  | layout   |  | spring   |  | refresh  |  | random    |             |
+|  |          |  | cubic-   |  | revert   |  | chainable |             |
+|  |          |  | bezier   |  |          |  |           |             |
+|  +----------+  +----------+  +----------+  +-----------+             |
++=======================================================================+
+                                | (import)
+                                v
++=======================================================================+
+|                    动画抽象层 (Animation Abstractions)                  |
+|                                                                       |
+|  +-----------------------------------------------------------------+ |
+|  |                   Timer (继承 Clock)                              | |
+|  |  - 生命周期: began/completed/paused                              | |
+|  |  - 时间控制: seek/reset/restart/reverse/alternate                | |
+|  |  - 子节点: _head/_tail 链表管理                                   | |
+|  |  - 回调: onBegin/onUpdate/onLoop/onComplete                      | |
+|  |  - Promise: .then() 支持                                         | |
+|  +-------+-------------------+-------------------+-----------+------+ |
+|          |                   |                   |           |         |
+|          v                   v                   v           v         |
+|  +---------------+  +----------------+  +----------------+  +-------+ |
+|  | JSAnimation   |  | Timeline       |  | Draggable      |  | Anim- | |
+|  | (Animation)   |  | (时间线编排)    |  | (拖拽交互)      |  | atable| |
+|  | - _tweens链表 |  | - _children    |  | - snap/x/y     |  | (CSS) | |
+|  | - tween合成   |  |   位置计算      |  | - inertia      |  +-------+ |
+|  | - 值分解      |  | - add()/set()  |  | - modifiers    |           | |
+|  +---------------+  +----------------+  +----------------+           | |
++=======================================================================+
+                                | (继承/调用)
+                                v
++=======================================================================+
+|                     核心引擎层 (Core Engine)                           |
+|                                                                       |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Clock            |  | Engine (单例)    |  | Render / tick()    |  |
+|  | - _currentTime   |  | - _lastTickTime  |  | - render() 核心    |  |
+|  | - _fps/_speed     |  | - reqId (rAF)   |  |   渲染循环         |  |
+|  | - requestTick()  |  | - _head (链表)   |  | - tick() 子节点    |  |
+|  | - deltaTime      |  | - wake()        |  |   递归遍历         |  |
+|  +------------------+  +------------------+  +--------------------+  |
+|                                                                       |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Values           |  | Styles           |  | Transforms         |  |
+|  | - decomposeValue |  | - sanitizeProp   |  | - decomposeTransform| |
+|  | - composeColor   |  | - revertValues   |  | - buildString      |  |
+|  | - composeComplex |  |                  |  |                    |  |
+|  +------------------+  +------------------+  +--------------------+  |
+|                                                                       |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Units            |  | Colors           |  | Targets            |  |
+|  | - convertUnit    |  | - parse/rgb/hsl  |  | - registerTargets  |  |
+|  +------------------+  +------------------+  +--------------------+  |
++=======================================================================+
+                                | (依赖)
+                                v
++=======================================================================+
+|                   基础设施层 (Infrastructure)                          |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Consts           |  | Helpers          |  | Globals            |  |
+|  | - isBrowser      |  | - now()          |  | - globals.timeScale|  |
+|  | - tweenTypes     |  | - addChild()     |  | - defaults配置     |  |
+|  | - valueTypes     |  | - forEachChild() |  | - scope.current    |  |
+|  | - tickModes      |  | - lerp/clamp     |  |                    |  |
+|  +------------------+  +------------------+  +--------------------+  |
++=======================================================================+

分层职责说明

层次核心职责关键技术
基础设施层环境检测、常量枚举、工具函数、全局状态浏览器/Node 双环境适配
核心引擎层时间系统、帧调度、值解析、渲染循环rAF 主循环、链表遍历
动画抽象层Timer 基类、Animation、Timeline 编排、Draggable 交互类继承、双向链表
功能扩展层SVG 动画、文本特效、WAAPI 桥接、缓动函数可选的独立模块

2.3 目录结构

shell
anime/
+├── src/                                   # 【核心基建】源代码主目录 - 61个JS文件,~37K行
+   ├── index.js                           # 【核心基建】全局入口 - re-export 14个模块的所有公共API
+
+   ├── core/                              # 【核心基建】核心引擎基础设施层 - 11个文件
+   ├── clock.js                       # 【核心基建】Clock 时间基类 - 所有定时实体的父类
+   ├── consts.js                      # 【核心基建】全局常量 - 环境检测、枚举(tweenTypes/valueTypes/tickModes/compositionTypes)、浏览器DOM符号
+   ├── colors.js                      # 【核心基建】颜色处理 - 颜色解析与格式化
+   ├── globals.js                     # 【核心基建】全局状态 - globalVersions版本数组、defaults默认参数、scope管理
+   ├── helpers.js                     # 【工具集】通用工具 - now()/clamp()/lerp()/addChild()/forEachChildren()/mergeObjects()等
+   ├── render.js                      # 【核心基建】渲染核心 - render()计算单帧Tween值写入目标、tick()递归处理子节点(Timeline)
+   ├── styles.js                      # 【核心基建】样式处理 - sanitizePropertyName()属性名标准化(如line-height→lineHeight)、revertValues()恢复
+   ├── targets.js                     # 【核心基建】目标管理 - registerTargets()、parseTargets()加载DOM元素/NodeList/对象
+   ├── transforms.js                  # 【核心基建】Transform处理 - CSS Transform分解为独立属性、buildTransformString()重建
+   ├── units.js                       # 【核心基建】单位处理 - convertValueUnit()单位转换(px↔rem↔vh等)
+   └── values.js                      # 【核心基建】值系统 - decomposeRawValue()分解值类型、composeColorValue()/composeComplexValue()合成、getRelativeValue()相对值
+
+   ├── timer/                             # 【核心基建】Timer模块 - 动画引擎的核心时间抽象
+   ├── index.js                       # 【核心基建】导出 createTimer() 工厂函数
+   └── timer.js                       # 【核心基建】Timer类(继承Clock) - 生命周期管理、seek/pause/resume/reverse/stretch、Promise支持
+
+   ├── animation/                         # 【业务模块】Animation模块 - 属性动画实现
+   ├── index.js                       # 【业务模块】导出 animate()、createAnimations()、stagger()
+   ├── animation.js                   # 【业务模块】JSAnimation类(继承Timer) - Tween链表创建、值解析与写入
+   ├── composition.js                 # 【核心基建】Tween合成系统 - composeTween()处理replace/blend/none、WeakMap存储target+property→Tween映射
+   └── additive.js                    # 【核心基建】加法动画 - 相对值叠加(additive)、animation.add()累加
+
+   ├── timeline/                          # 【业务模块】Timeline模块 - 多动画时间编排
+   ├── index.js                       # 【业务模块】导出 createTimeline()
+   ├── timeline.js                    # 【业务模块】Timeline类(继承Timer) - add()/set()/sync()/remove()、子动画链表遍历渲染
+   └── position.js                    # 【工具集】位置解析 - parseTimelinePosition()处理绝对/相对/标签偏移
+
+   ├── easings/                           # 【核心基建】缓动函数系统 - 8种缓动类型
+   ├── index.js                       # 【核心基建】导出 parseEase() 统一缓动解析入口
+   ├── none.js                        # 【核心基建】无缓动恒等函数
+   ├── eases/                         # 【核心基建】标准Penner缓动集 - in/out/inOut × Quad/Cubic/Quart/Quint/Sine/Expo/Circ/Back/Elastic/Bounce
+   ├── index.js                   # 【核心基建】预定义缓动函数导出
+   └── parser.js                  # 【核心基建】缓动名称→函数解析器
+   ├── linear/ ── index.js           # 【核心基建】linear()/none() 线性缓动
+   ├── steps/ ── index.js            # 【核心基建】steps() 阶梯缓动
+   ├── irregular/ ── index.js        # 【核心基建】irregular() 自定义关键帧缓动(如[0, 0.2, 0.8, 1])
+   ├── cubic-bezier/ ── index.js     # 【核心基建】cubicBezier() CSS贝塞尔缓动
+   └── spring/ ── index.js           # 【核心基建】spring() 物理弹簧缓动(mass/stiffness/damping)
+
+   ├── engine/                            # 【核心基建】全局动画引擎
+   ├── index.js                       # 【核心基建】导出 engine 全局单例
+   └── engine.js                      # 【核心基建】Engine类(继承Clock) - rAF主循环、Timer链表管理、全局timeScale/pause控制
+
+   ├── animatable/                        # 【业务模块】Animatable - CSS computed style动画
+   ├── index.js                       # 【业务模块】导出 animateComputedStyle()等
+   └── animatable.js                  # 【业务模块】Animatable类(继承Timer) - 驱动CSS过渡/WAAPI动画
+
+   ├── draggable/                         # 【业务模块】Draggable - 拖拽交互
+   ├── index.js                       # 【业务模块】导出 createDraggable()
+   └── draggable.js                   # 【业务模块】Draggable类(继承Timer) - 鼠标/触摸拖拽、snap吸附、inertia惯性、modifiers修饰
+
+   ├── scope/                             # 【核心基建】Scope - 动画生命周期管理
+   ├── index.js                       # 【核心基建】导出 createScope()
+   └── scope.js                       # 【核心基建】Scope类 - register()/refresh()/revert()/pause()批量控制
+
+   ├── events/                            # 【业务模块】Events - 滚动驱动
+   ├── index.js                       # 【业务模块】导出 createScrollObserver()
+   └── scroll.js                      # 【业务模块】ScrollObserver - 滚动位置→动画时间的映射、link()/unlink()
+
+   ├── layout/                            # 【业务模块】Layout - 布局动画
+   ├── index.js                       # 【业务模块】导出 animateLayout()
+   └── layout.js                      # 【业务模块】FLIP布局动画实现 - First/Last/Invert/Play
+
+   ├── svg/                               # 【业务模块】SVG - 矢量图形动画专属
+   ├── index.js                       # 【业务模块】导出 createDrawable()、createMorphTo()、createMotionPath()
+   ├── drawable.js                    # 【业务模块】Drawable - SVG描边动画(stroke-dashoffset/stroke-dasharray)
+   ├── helpers.js                     # 【工具集】SVG工具 - 路径解析、长度计算
+   ├── morphto.js                     # 【业务模块】MorphTo - SVG path d属性形状变换
+   └── motionpath.js                  # 【业务模块】MotionPath - SVG路径跟随运动
+
+   ├── text/                              # 【业务模块】Text - 文本动画特效
+   ├── index.js                       # 【业务模块】导出 splitText()、scrambleText()
+   ├── split.js                       # 【业务模块】SplitText - 文本按字符/单词/行分割为独立DOM元素
+   └── scramble.js                    # 【业务模块】ScrambleText - 字符乱序切换动画
+
+   ├── waapi/                             # 【业务模块】WAAPI - Web Animations API桥接
+   ├── index.js                       # 【业务模块】导出 waapi.animate()
+   ├── waapi.js                       # 【业务模块】WAAPIAnimation(继承Timer) - 封装element.animate()
+   └── composition.js                 # 【业务模块】WAAPI Tween合成管理
+
+   ├── utils/                             # 【工具集】通用工具集 - 7个独立工具
+   ├── index.js                       # 【工具集】导出所有工具函数
+   ├── chainable.js                   # 【工具集】链式调用辅助 - 支持 obj.x(100).y(200).duration(1000) 语法
+   ├── number.js                      # 【工具集】数值工具 - 数值格式化、精度处理
+   ├── random.js                      # 【工具集】随机工具 - random()/randomInt() 随机值生成
+   ├── stagger.js                     # 【工具集】交错延迟 - stagger()按元素索引计算延迟
+   ├── target.js                      # 【工具集】目标查找 - querySelectorAll()封装、NodeList→Array
+   └── time.js                        # 【工具集】时间工具 - 时间格式化转换
+
+   └── types/                             # 【配置】JSDoc类型定义文件
+       └── index.js                       # 【配置】全局@typedef类型 - TimerParams/AnimationParams/Tween/Target等,构建时提取注入bundle头部
+
+├── dist/                                  # 【配置】构建产物
+   ├── modules/                           # 【配置】ESM + CJS 模块输出 (preserveModules)
+   └── bundles/                           # 【配置】UMD + ESM 打包输出 (anime.*.js)
+
+├── examples/                              # 【配置】78个示例页面 (官方示例)
+├── tests/                                 # 【质量保证】测试套件 (120个文件,Mocha + Chai)
+   ├── index.html                         # 【质量保证】浏览器测试入口
+   └── suites/                            # 【质量保证】测试用例目录 (浏览器 + Node.js)
+
+├── assets/                                # 【配置】仓库静态资源 (Logo、GIF、赞助商图片)
+├── .github/                               # 【配置】GitHub CI/CD配置
+├── package.json                           # 【配置】NPM包配置 - v4.4.1, 18个子路径导出, 零运行时依赖
+├── rollup.config.js                       # 【配置】Rollup构建配置 - ESM/CJS/UMD多格式输出
+├── tsconfig.json                          # 【配置】TypeScript主配置
+├── tsconfig.types.json                    # 【配置】类型声明生成配置 - 输出dist/modules/**/*.d.ts
+├── CONTRIBUTING.md                        # 【配置】贡献指南
+├── LICENSE.md                             # 【配置】MIT开源协议
+└── README.md                              # 【配置】英文项目主文档

3. 模块依赖与调用关系

3.1 全局入口与核心路由

逻辑说明src/index.js 作为全局入口,将所有 14 个模块的子入口聚合导出。每个模块有自己的 index.js,对外暴露特定的公共 API 函数。模块内部通过 core/ 共享基础设施。Engine 是全局单例,负责驱动所有活跃的 Timer 实例。

  • 调用拓扑 (plainText)
text
src/index.js (全局入口 - 14个模块聚合)
+ |
+ +---> src/timer/index.js --------> createTimer() ────> new Timer(Clock)
+ |
+ +---> src/animation/index.js -----> animate() ────────> new JSAnimation(Timer)
+ |                                   stagger()
+ |                                   createAnimations()
+ |
+ +---> src/timeline/index.js ------> createTimeline() ─> new Timeline(Timer)
+ |                                                         |
+ |                                                         +--> add() -> new JSAnimation
+ |                                                         +--> set() -> new JSAnimation
+ |
+ +---> src/draggable/index.js -----> createDraggable() ─> new Draggable(Timer)
+ |
+ +---> src/scope/index.js ---------> createScope() ─────> new Scope()
+ |                                   scope.refresh()
+ |                                   scope.revert()
+ |
+ +---> src/engine/index.js --------> engine (全局单例)
+ |                                   engine.resume()
+ |                                   engine.pause()
+ |
+ +---> src/events/index.js --------> createScrollObserver()
+ |
+ +---> src/easings/index.js -------> parseEase()
+ |    ├── src/easings/eases/ ------> 预定义缓动函数集
+ |    ├── src/easings/cubic-bezier/ -> cubicBezier()
+ |    ├── src/easings/spring/ ------> spring()
+ |    ├── src/easings/steps/ -------> steps()
+ |    ├── src/easings/linear/ ------> linear()
+ |    └── src/easings/irregular/ ---> irregular()
+ |
+ +---> src/svg/index.js -----------> createDrawable()
+ |                                   createMorphTo()
+ |                                   createMotionPath()
+ |
+ +---> src/text/index.js -----------> splitText()
+ |                                   scrambleText()
+ |
+ +---> src/layout/index.js ---------> animateLayout()
+ |
+ +---> src/waapi/index.js ----------> waapi.animate()
+ |
+ +---> src/animatable/index.js -----> animateComputedStyle()
+ |
+ +---> src/utils/index.js ----------> stagger()
+ |                                   random()
+ |                                   chainable()
+ |
+ +---> src/types/index.js ----------> (JSDoc 类型定义,仅用于类型检查)

3.2 核心业务实体与关联

实体定义

实体说明在系统中的角色
Clock时间基类,管理帧率和播放速率所有可定时实体的基础
Timer动画时间控制器,继承 ClockAnimation/Timeline/Draggable 的基类
Engine全局动画引擎单例,继承 Clock驱动主循环,管理所有活跃 Timer
JSAnimation单次动画,继承 Timer操作 Tween 链表,驱动属性动画
Tween动画单元,表示单个属性的插值包含起止值、缓动、类型信息
Timeline动画时间线,继承 Timer管理多个子 Animation 的时间编排
Draggable拖拽控制器,继承 Timer封装鼠标/触摸交互到动画
Scope作用域管理器批量控制一组动画的生命周期
ScrollObserver滚动观察器将滚动位置映射为动画时间
AnimatableCSS 过渡动画控制器驱动 computed style 过渡

实体引用拓扑 (plainText)

text
[Clock]
+  |
+  +------ 1 -----> 1 [Engine] (全局单例)
+  |
+  +------ 1 -----> N [Timer]
+                      |
+                      +------ 1 -----> N [JSAnimation]
+                      |                  |
+                      |                  +-- 1 -----> N [Tween] (属性插值单元)
+                      |                        |
+                      |                        +-- 1 -----> 1 [Composition] (合成模式)
+                      |
+                      +------ 1 -----> N [Timeline]
+                      |                  |
+                      |                  +-- 1 -----> N [JSAnimation] (子动画)
+                      |
+                      +------ 1 -----> N [Draggable]
+                      |
+                      +------ 1 -----> N [Animatable]
+
+[Engine] 1 -----> N [Timer] (双向链表: _head/_tail)
+
+[Scope] 1 -----> N [Timer] (作用域内注册的动画/时间线)
+
+[ScrollObserver] 1 -----> 1 [Timer] (linked 关联)
+
+[Tween]
+  +-- 1 -----> 1 [Target] (DOM元素或JS对象)
+  +-- 1 -----> 1 [Ease] (缓动函数)
+  +-- 1 -----> 0..1 [Modifier] (值修饰函数)

4. 核心模块详解

模块一:Clock - 时间基类

  • 模块名称:Clock(时间系统)

  • 设计说明:Clock 是所有时间相关实体的最底层基类。它封装了帧率控制(_fps)、播放速率(_speed)、时间计算(requestTickcomputeDeltaTime)和子节点链表管理(_head/_tail)。Clock 不负责渲染,只负责时间调度。通过 requestTick(time) 方法判断当前帧是否需要更新(基于帧率的节流),返回 tickModes.AUTOtickModes.NONE

  • 内部结构图 (plainText)

text
+--------------------------------------------------------+
+|                    Clock (时间基类)                      |
+|                                                         |
+|  属性:                                                   |
+|  +------------------------------------+                 |
+|  | _currentTime: Number              | 当前绝对时间      |
+|  | _startTime: Number                | 起始时间          |
+|  | _lastTickTime: Number             | 上次 tick 时间    |
+|  | _scheduledTime: Number            | 下次帧预定时间    |
+|  | _frameDuration: Number            | 帧持续时间(ms)    |
+|  | _fps: Number                      | 帧率              |
+|  | _speed: Number                    | 播放速率          |
+|  | _head: Tickable|null             | 子节点链表头       |
+|  | _tail: Tickable|null             | 子节点链表尾       |
+|  +------------------------------------+                 |
+|                                                         |
+|  方法:                                                   |
+|  +------------------------------------+                 |
+|  | requestTick(time) -> tickModes    | 帧节流判断       |
+|  | computeDeltaTime(time) -> Number  | 计算帧间隔       |
+|  +------------------------------------+                 |
++--------------------------------------------------------+

模块二:Timer - 动画时间基类

  • 模块名称:Timer(动画时间基类)

  • 设计说明:Timer 继承 Clock,是 Animation、Timeline、Draggable 的直接基类。它添加了完整的动画生命周期管理:began(开始)、completed(完成)、paused(暂停)。支持 delay、duration、loop(循环)、alternate(交替反向)、reversed(反向播放)。通过 seek()reset()restart()stretch() 等方法实现对时间的精确控制。内建 Promise 支持(.then() 方法),允许开发者 await 动画完成。Timer 还实现了:revert() 回到初始状态并取消、cancel() 取消并从引擎移除、complete() 立即完成。Timer 在构造函数中通过 scope.current?.register(this) 自动注册到当前作用域。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                      Timer (继承 Clock)                           |
+|                                                                   |
+|  +-----------------------------+  +-----------------------------+|
+|  |    生命周期状态              |  |     循环控制               ||
+|  |  - began: Boolean           |  |  - iterationCount: Number   ||
+|  |  - completed: Boolean       |  |  - iterationDuration: Number||
+|  |  - paused: Boolean          |  |  - _alternate: Boolean      ||
+|  |  - cancelled: Boolean       |  |  - _reversed: Number        ||
+|  +-----------------------------+  +-----------------------------+|
+|                                                                   |
+|  +-----------------------------+  +-----------------------------+|
+|  |    回调函数                  |  |     时间控制               ||
+|  |  - onBegin                   |  |  - _offset: Number          ||
+|  |  - onBeforeUpdate            |  |  - _delay: Number           ||
+|  |  - onUpdate                  |  |  - _loopDelay: Number       ||
+|  |  - onLoop                    |  |  - _priority: Number        ||
+|  |  - onPause                   |  |                             ||
+|  |  - onComplete                |  +-----------------------------+|
+|  +-----------------------------+                                  |
+|                                                                   |
+|  +--------------------------------------------------------------+ |
+|  |  核心方法                                                     | |
+|  |  init() -> this         : 初始化动画参数、fps、speed          | |
+|  |  reset() -> this        : 重置到初始状态                       | |
+|  |  restart() -> this      : reset + resume                      | |
+|  |  seek(time) -> this     : 跳转到指定时间                       | |
+|  |  pause() -> this        : 暂停动画                             | |
+|  |  resume() -> this       : 恢复播放(添加到Engine链表)          | |
+|  |  play() -> this         : 正向播放                             | |
+|  |  reverse() -> this      : 反向播放                             | |
+|  |  alternate() -> this    : 切换播放方向                         | |
+|  |  stretch(newDur) -> this: 拉伸时间                             | |
+|  |  cancel() -> this       : 取消动画(从Engine移除)              | |
+|  |  revert() -> this       : 回退 + 取消                         | |
+|  |  complete() -> this     : 立即完成                             | |
+|  |  then(cb) -> Promise    : Promise 化支持 await                | |
+|  +--------------------------------------------------------------+ |
++==================================================================+

模块三:Engine - 全局动画引擎

  • 模块名称:Engine(全局动画引擎单例)

  • 设计说明:Engine 是全局唯一的动画引擎实例,继承自 Clock。它使用 requestAnimationFrame(浏览器)或 setImmediate(Node.js)驱动主循环。所有活跃的 Timer 通过双向链表(_head_next/_prev)注册到 Engine 上。每帧 Engine 遍历链表,按优先级排序后调用 tick() 进行渲染。Engine 管理:全局 defaults 配置(影响所有动画)、timeScale 全局时间缩放、pauseOnDocumentHidden(页面隐藏时暂停)、_speed 全局播放速率。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                   Engine (全局单例, 继承 Clock)                    |
+|                                                                   |
+|  +-------------------------------+  +----------------------------+|
+|  |  全局配置                     |  |  主循环驱动               ||
+|  |  - defaults: DefaultsParams   |  |  - reqId: Number           ||
+|  |  - useDefaultMainLoop: Bool   |  |  - _lastTickTime: Number   ||
+|  |  - pauseOnDocumentHidden:Bool |  |  - _startTime: Number      ||
+|  +-------------------------------+  |  - engineTickMethod: rAF   ||
+|                                      |  - engineCancelMethod:cAF ||
+|  +-------------------------------+  +----------------------------+|
+|  |  链表管理                     |                                |
+|  |  - _head: Timer (最高优先级)  |  +----------------------------+|
+|  |  - _tail: Timer (最低优先级)  |  |  核心方法                  ||
+|  |  - _hasChildren: Boolean      |  |  - requestTick(time)       ||
+|  +-------------------------------+  |  - wake() : 唤醒引擎      ||
+|                                      |  - pause() : 全局暂停     ||
+|  +-------------------------------+  |  - resume() : 全局恢复    ||
+|  |  全局时间控制                 |  +----------------------------+|
+|  |  - _speed: Number             |                                |
+|  |  - timeScale (globals)        |                                |
+|  +-------------------------------+                                |
++==================================================================+

模块四:Render 渲染核心

  • 模块名称:Render(渲染/心跳系统)

  • 设计说明render()tick() 是 Anime.js 最核心的两个函数。render() 负责计算单个 Tickable 的当前状态(时间、迭代、方向),然后遍历其 Tweens 链表,为每个 Tween 计算当前值并写入目标(DOM style/attribute 或 JS object)。tick()render() 基础上增加了对子节点的递归处理(针对 Timeline),实现子动画的顺序或反向渲染。两个函数密切配合:Engine 的每帧调用 tick(engine, time),逐级传播到所有活跃的 Timer。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                    Render (核心渲染系统)                           |
+|                                                                   |
+|  tick(tickable, time, muteCallbacks, internalRender, tickMode)    |
+|  |                                                                |
+|  +-----> 1. render(tickable, time, ...)  渲染自身                 |
+|  |         |                                                      |
+|  |         +-- 计算: _currentTime, _iterationTime, backwards     |
+|  |         +-- 触发: onBegin, onLoop, onBeforeUpdate             |
+|  |         +-- 遍历 Tween 链表:                                   |
+|  |         |   +-- 计算 tweenProgress (ease)                     |
+|  |         |   +-- lerp fromNumber -> toNumber                  |
+|  |         |   +-- composeValue: NUMBER|UNIT|COLOR|COMPLEX      |
+|  |         |   +-- 写入目标: style/attribute/object            |
+|  |         +-- 触发: onUpdate, onRender                         |
+|  |         +-- 处理: onComplete (循环/正常结束)                 |
+|  |                                                                |
+|  +-----> 2. 如果有子节点 (Timeline)                               |
+|            |                                                      |
+|            +-- 处理循环回调 (onLoop)                              |
+|            +-- 遍历子节点 (正向或反向)                            |
+|            |   +-- render(child, childTime, ...)                  |
+|            +-- 触发 onRender                                     |
+|            +-- 处理 onComplete (所有子节点完成)                   |
++==================================================================+

模块五:Values 值处理系统

  • 模块名称:Values(值解析与合成)

  • 设计说明:Values 系统是 Anime.js 能处理多种值类型的关键。它将动画属性值分解为四种基本类型:NUMBER(纯数字)、UNIT(带单位的数字,如 100px)、COLOR(颜色,如 #ff0000rgb()hsl())、COMPLEX(复合值,如 10px 20px)。对于每种类型,系统能从原始值中提取 fromNumbertoNumber,在渲染时通过 lerp 插值后重新合成为目标格式。此外,系统还支持函数值(每帧动态计算)、相对值(+=100 形式)、以及 additive(加法动画叠加)。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                  Values (值处理核心)                               |
+|                                                                   |
+|  输入: 原始值字符串/数字 ("100px", "#ff0", "10px 20px", 42)      |
+|  |                                                                |
+|  v                                                                |
+|  decomposeRawValue(value)                                         |
+|  +-- 识别类型: NUMBER | UNIT | COLOR | COMPLEX                   |
+|  +-- 提取结构: { numbers, strings, unit, type }                 |
+|  |                                                                |
+|  v                                                                |
+|  decomposeTweenValue(tween)                                       |
+|  +-- 解析 from 值 (原始值/函数值/相对值)                         |
+|  +-- 解析 to 值                                                   |
+|  +-- 处理 modifier (值修饰函数)                                   |
+|  +-- 处理 composition (blend/replace/none)                       |
+|  +-- 存储: _fromNumber, _toNumber, _unit, _valueType            |
+|  |                                                                |
+|  v (每帧渲染时)                                                   |
+|  |                                                                |
+|  lerp(fromNumber, toNumber, progress) -> 插值结果                |
+|  |                                                                |
+|  v                                                                |
+|  合成输出:                                                        |
+|  +-- NUMBER: 直接返回值                                          |
+|  +-- UNIT: number + unit → "100px"                              |
+|  +-- COLOR: composeColorValue() → "rgb(128,255,0)"               |
+|  +-- COMPLEX: composeComplexValue() → "10px 20px"               |
++==================================================================+

5. 关键数据流程

场景一:动画从创建到完成的生命周期

  • 场景说明:用户调用 animate() 创建一个动画。动画参数被解析为 Tweens 链表,通过 Engine 注册到主循环。每帧 Engine 唤醒后遍历活跃的 Timer,调用 tick()render() 计算当前帧的 Tween 值并写入目标。当动画到达 duration 时触发 onComplete,从 Engine 链表中移除。这是 Anime.js 最核心的数据流,贯穿所有动画类型。

  • 流转时序图 (Mermaid)

`,52)),n(p,null,{default:l(()=>[n(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20API%20as%20animate()%0A%20%20%20%20participant%20JSAnim%20as%20JSAnimation(Timer)%0A%20%20%20%20participant%20Engine%20as%20Engine(%E5%85%A8%E5%B1%80%E5%8D%95%E4%BE%8B)%0A%20%20%20%20participant%20Render%20as%20Render%2Ftick()%0A%20%20%20%20participant%20Target%20as%20DOM%2FJS%20Target%0A%0A%20%20%20%20User-%3E%3EAPI%3A%20animate('.box'%2C%20%7B%20x%3A%20100%2C%20duration%3A%201000%20%7D)%0A%20%20%20%20activate%20API%0A%20%20%20%20API-%3E%3EAPI%3A%20parseTargets('.box')%20%E2%86%92%20%E6%9F%A5%E6%89%BEDOM%E5%85%83%E7%B4%A0%0A%20%20%20%20API-%3E%3EJSAnim%3A%20new%20JSAnimation(parameters)%0A%20%20%20%20activate%20JSAnim%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E6%9E%84%E9%80%A0%20Tween%20%E9%93%BE%E8%A1%A8%20(%E6%AF%8F%E4%B8%AA%E5%B1%9E%E6%80%A7%E4%B8%80%E4%B8%AATween)%0A%20%20%20%20Note%20over%20JSAnim%3A%20Tween%20%7B%20property%3A%20'x'%2C%20fromNumber%3A%200%2C%20toNumber%3A%20100%2C%20_valueType%3A%20UNIT%20%7D%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20decomposeTweenValue()%20%E5%88%86%E8%A7%A3%E5%80%BC%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E6%B3%A8%E5%86%8C%E5%88%B0%20scope.current%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20init()%20%E2%86%92%20reset()%20%E2%86%92%20resume()%0A%20%20%20%20JSAnim-%3E%3EEngine%3A%20resume()%20%E2%86%92%20addChild(engine%2C%20this)%0A%20%20%20%20Note%20over%20Engine%3A%20%E5%B0%86%20JSAnimation%20%E5%8A%A0%E5%85%A5%E5%88%B0%20Engine%20%E7%9A%84%E6%B4%BB%E8%B7%83%20Timer%20%E9%93%BE%E8%A1%A8%0A%20%20%20%20JSAnim-%3E%3EEngine%3A%20engine.wake()%0A%20%20%20%20deactivate%20JSAnim%0A%20%20%20%20API--%3E%3EUser%3A%20%E8%BF%94%E5%9B%9E%20JSAnimation%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20API%0A%0A%20%20%20%20loop%20%E6%AF%8F%E5%B8%A7%20(rAF%20~16ms)%0A%20%20%20%20%20%20%20%20Engine-%3E%3EEngine%3A%20engineTickMethod%20%E5%9B%9E%E8%B0%83%0A%20%20%20%20%20%20%20%20Engine-%3E%3EEngine%3A%20computeDeltaTime(now())%0A%20%20%20%20%20%20%20%20Engine-%3E%3ERender%3A%20tick(engine%2C%20currentTime)%0A%20%20%20%20%20%20%20%20activate%20Render%0A%20%20%20%20%20%20%20%20Render-%3E%3ERender%3A%20%E9%81%8D%E5%8E%86%20Engine._head%20%E9%93%BE%E8%A1%A8%20(%E6%8C%89%E4%BC%98%E5%85%88%E7%BA%A7%E6%8E%92%E5%BA%8F)%0A%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20render(jsAnimation%2C%20time)%0A%20%20%20%20%20%20%20%20activate%20JSAnim%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%20_currentTime%2C%20_iterationTime%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%20tweenProgress%20(ease%E5%87%BD%E6%95%B0)%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20lerp(fromNumber%2C%20toNumber%2C%20progress)%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20composeValue%20%E2%86%92%20%2285px%22%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3ETarget%3A%20target.style.transform%20%3D%20%22translateX(85px)%22%0A%20%20%20%20%20%20%20%20deactivate%20JSAnim%0A%20%20%20%20%20%20%20%20JSAnim--%3E%3ERender%3A%20hasRendered%20%3D%201%0A%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20onUpdate%20%E5%9B%9E%E8%B0%83%0A%20%20%20%20%20%20%20%20deactivate%20Render%0A%20%20%20%20end%0A%0A%20%20%20%20Note%20over%20JSAnim%3A%20%E5%BD%93%20currentTime%20%3E%3D%20duration%20(1000ms)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20completed%20%3D%20true%2C%20paused%20%3D%20true%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20onComplete(this)%0A%20%20%20%20JSAnim-%3E%3EEngine%3A%20%E4%BB%8E%E6%B4%BB%E8%B7%83%E9%93%BE%E8%A1%A8%E7%A7%BB%E9%99%A4%20(%E4%B8%8B%E6%AC%A1%20tick)%0A%20%20%20%20JSAnim--%3E%3EUser%3A%20.then()%20Promise%20resolve%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=a('

场景二:Timeline 时间线编排

  • 场景说明:用户创建 Timeline,通过 add() 方法添加子动画。每个子动画在 Timeline 上的位置通过位置参数(绝对/相对/标签偏移)计算。Timeline 的 _iterationTime 驱动所有子动画的 render(),子动画按 _offset 对齐到时间线的不同位置。这是实现复杂动画编排的核心机制。

  • 流转时序图 (Mermaid)

',2)),n(p,null,{default:l(()=>[n(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20TL%20as%20Timeline(Timer)%0A%20%20%20%20participant%20Pos%20as%20parseTimelinePosition%0A%20%20%20%20participant%20JSAnim%20as%20JSAnimation(Timer)%0A%20%20%20%20participant%20Engine%20as%20Engine%0A%20%20%20%20participant%20Render%20as%20Render%2Ftick()%0A%0A%20%20%20%20User-%3E%3ETL%3A%20createTimeline()%0A%20%20%20%20TL-%3E%3ETL%3A%20init()%20%E2%86%92%20reset()%20%E2%86%92%20resume()%0A%20%20%20%20TL-%3E%3EEngine%3A%20addChild(engine%2C%20timeline)%0A%0A%20%20%20%20User-%3E%3ETL%3A%20tl.add('.box'%2C%20%7B%20x%3A%20100%20%7D%2C%200)%0A%20%20%20%20activate%20TL%0A%20%20%20%20TL-%3E%3EPos%3A%20parseTimelinePosition(0)%0A%20%20%20%20Pos--%3E%3ETL%3A%20offsetPosition%20%3D%200%0A%20%20%20%20TL-%3E%3EJSAnim%3A%20new%20JSAnimation('.box'%2C%20%7B%20x%3A%20100%20%7D%2C%20timeline%2C%200)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20init(internalRender%3Dtrue)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20_offset%20%3D%200%20(%E4%BB%8ETimeline%E8%B5%B7%E5%A7%8B%E5%BC%80%E5%A7%8B)%0A%20%20%20%20TL-%3E%3ETL%3A%20addChild(timeline%2C%20jsAnimation)%20%E2%86%92%20%E6%8F%92%E5%85%A5%E5%AD%90%E8%8A%82%E7%82%B9%E9%93%BE%E8%A1%A8%0A%20%20%20%20TL--%3E%3EUser%3A%20%E8%BF%94%E5%9B%9E%20Timeline%20%E5%BC%95%E7%94%A8%20(%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8)%0A%20%20%20%20deactivate%20TL%0A%0A%20%20%20%20User-%3E%3ETL%3A%20tl.add('.circle'%2C%20%7B%20scale%3A%202%20%7D%2C%20'-%3D500')%0A%20%20%20%20activate%20TL%0A%20%20%20%20TL-%3E%3EPos%3A%20parseTimelinePosition('-%3D500')%0A%20%20%20%20Note%20over%20Pos%3A%20%E8%AE%A1%E7%AE%97%20relativeOffset%20%3D%20-500%20(%E4%B8%8E%E5%89%8D%E4%B8%80%E4%B8%AA%E7%BB%93%E6%9D%9F%E9%87%8D%E5%8F%A0500ms)%0A%20%20%20%20Pos--%3E%3ETL%3A%20offsetPosition%20%3D%20500%0A%20%20%20%20TL-%3E%3EJSAnim%3A%20new%20JSAnimation('.circle'%2C%20%7B%20scale%3A%202%20%7D%2C%20timeline%2C%20500)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20_offset%20%3D%20500%0A%20%20%20%20deactivate%20TL%0A%0A%20%20%20%20loop%20%E6%AF%8F%E5%B8%A7%0A%20%20%20%20%20%20%20%20Engine-%3E%3ERender%3A%20tick(engine%2C%20time)%0A%20%20%20%20%20%20%20%20Render-%3E%3ETL%3A%20render(timeline%2C%20time)%0A%20%20%20%20%20%20%20%20TL-%3E%3ETL%3A%20%E8%AE%A1%E7%AE%97%20_iterationTime%0A%20%20%20%20%20%20%20%20Render-%3E%3ERender%3A%20tick(timeline%2C%20time)%20%E2%80%94%20%E9%80%92%E5%BD%92%E5%A4%84%E7%90%86%E5%AD%90%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20loop%20%E9%81%8D%E5%8E%86%20Timeline%20%E5%AD%90%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20render(child1%3A%20'.box'%2C%20childTime%20%3D%20_iterationTime%20-%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%E5%B9%B6%E5%86%99%E5%85%A5%20x%20%E5%80%BC%0A%20%20%20%20%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20render(child2%3A%20'.circle'%2C%20childTime%20%3D%20_iterationTime%20-%20500)%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20JSAnim%3A%20child2%20%E6%AF%94%20child1%20%E6%99%9A%20500ms%20%E5%BC%80%E5%A7%8B%0A%20%20%20%20%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%E5%B9%B6%E5%86%99%E5%85%A5%20scale%20%E5%80%BC%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Render-%3E%3ETL%3A%20%E5%AD%90%E8%8A%82%E7%82%B9%E5%AE%8C%E6%88%90%E5%90%8E%E8%A7%A6%E5%8F%91%20onRender%2FonComplete%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),s[2]||(s[2]=a('

场景三:Tween 合成与冲突处理

  • 场景说明:当多个动画同时修改同一目标的同一属性时,需要进行 Tween 合成(composition)。Anime.js 支持三种合成模式:replace(覆盖旧动画)、blend(混合值)、none(独立运行)。合成系统通过 WeakMap 存储 target + property → Tween[] 的映射,在新动画创建时查找冲突并决定行为。

  • 流转时序图 (Mermaid)

',2)),n(p,null,{default:l(()=>[n(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20Anim1%20as%20JSAnimation%20%231%0A%20%20%20%20participant%20Anim2%20as%20JSAnimation%20%232%0A%20%20%20%20participant%20Comp%20as%20Composition%0A%20%20%20%20participant%20Lookups%20as%20Tween%20Lookups%20(WeakMap)%0A%20%20%20%20participant%20Render%20as%20Render%0A%0A%20%20%20%20User-%3E%3EAnim1%3A%20animate('.box'%2C%20%7B%20x%3A%20100%2C%20composition%3A%20'blend'%20%7D)%0A%20%20%20%20Anim1-%3E%3EAnim1%3A%20%E5%88%9B%E5%BB%BA%20Tween%20%7B%20target%3A%20.box%2C%20property%3A%20'x'%2C%20_composition%3A%20blend%20%7D%0A%20%20%20%20Anim1-%3E%3ELookups%3A%20%E6%B3%A8%E5%86%8C%3A%20WeakMap%5B.box%5D%5B'x'%5D%20%3D%20%5Btween1%5D%0A%20%20%20%20Anim1-%3E%3EAnim1%3A%20init()%20%E2%86%92%20resume()%0A%0A%20%20%20%20User-%3E%3EAnim2%3A%20animate('.box'%2C%20%7B%20x%3A%2050%2C%20composition%3A%20'replace'%20%7D)%0A%20%20%20%20Anim2-%3E%3EAnim2%3A%20%E5%88%9B%E5%BB%BA%20Tween%20%7B%20target%3A%20.box%2C%20property%3A%20'x'%2C%20_composition%3A%20replace%20%7D%0A%20%20%20%20Anim2-%3E%3EComp%3A%20composeTween(tween2%2C%20getTweenSiblings(.box%2C%20'x'))%0A%20%20%20%20Comp-%3E%3ELookups%3A%20%E6%9F%A5%E6%89%BE%3A%20WeakMap%5B.box%5D%5B'x'%5D%20%3D%20%5Btween1%2C%20tween2%5D%0A%20%20%20%20Comp-%3E%3EComp%3A%20tween1._isOverridden%20%3D%20true%20(%E8%A2%AB%20tween2%20replace)%0A%20%20%20%20Note%20over%20Comp%3A%20replace%20%E6%A8%A1%E5%BC%8F%3A%20%E6%97%A7%20tween%20%E8%A2%AB%E6%A0%87%E8%AE%B0%E4%B8%BA%20_isOverridden%0A%0A%20%20%20%20loop%20%E6%AF%8F%E5%B8%A7%E6%B8%B2%E6%9F%93%0A%20%20%20%20%20%20%20%20Render-%3E%3EAnim1%3A%20render(anim1)%20%E2%80%94%20tween1%20%E5%9B%A0%20_isOverridden%20%E8%A2%AB%E8%B7%B3%E8%BF%87%0A%20%20%20%20%20%20%20%20Render-%3E%3EAnim2%3A%20render(anim2)%20%E2%80%94%20tween2%20%E6%AD%A3%E5%B8%B8%E6%B8%B2%E6%9F%93%0A%20%20%20%20%20%20%20%20Note%20over%20Render%3A%20blend%20%E6%A8%A1%E5%BC%8F%E6%97%B6%E4%B8%A4%E4%B8%AA%20tween%20%E9%83%BD%E4%BC%9A%E6%B8%B2%E6%9F%93%EF%BC%8C%E5%80%BC%E7%9B%B8%E5%8A%A0%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),s[3]||(s[3]=a(`

6. 接口与契约规范

6.1 核心内部模块契约 (TypeScript)

typescript
// ============================================================
+// Clock - 时间基类契约
+// ============================================================
+interface IClock {
+  /** 帧间隔时间 (只读) */
+  readonly deltaTime: number;
+  /** 当前绝对时间 */
+  _currentTime: number;
+  /** 起始时间 */
+  _startTime: number;
+  /** 上次 tick 时间 */
+  _lastTickTime: number;
+  /** 预定下次帧时间 */
+  _scheduledTime: number;
+  /** 帧持续时间 (K/fps) */
+  _frameDuration: number;
+  /** 帧率 */
+  _fps: number;
+  /** 播放速率 */
+  _speed: number;
+  /** 是否有子节点 */
+  _hasChildren: boolean;
+  /** 子节点链表头 */
+  _head: Tickable | Tween | null;
+  /** 子节点链表尾 */
+  _tail: Tickable | Tween | null;
+
+  /** 帧节流: 判断是否应该渲染当前帧 */
+  requestTick(time: number): TickMode;
+  /** 计算帧间隔 */
+  computeDeltaTime(time: number): number;
+}
+
+// ============================================================
+// Timer - 动画时间基类契约
+// ============================================================
+interface ITimer extends IClock {
+  /** 唯一标识 */
+  id: string | number;
+  /** 父级 Timer (Timeline) */
+  parent: Timeline | null;
+  /** 总持续时间 */
+  duration: number;
+  /** 是否反向 */
+  backwards: boolean;
+  /** 暂停状态 */
+  paused: boolean;
+  /** 已开始标志 */
+  began: boolean;
+  /** 已完成标志 */
+  completed: boolean;
+  /** 单次迭代持续时间 */
+  iterationDuration: number;
+  /** 总迭代次数 */
+  iterationCount: number;
+  /** 当前迭代索引 */
+  _currentIteration: number;
+  /** 当前迭代内时间 */
+  _iterationTime: number;
+  /** 延迟偏移 */
+  _offset: number;
+  /** 取消标志 */
+  _cancelled: number;
+  /** 自动播放/滚动联动 */
+  _autoplay: boolean | ScrollObserver;
+
+  /** 进度 0-1 (get/set) */
+  progress: number;
+  /** 迭代进度 0-1 (get/set) */
+  iterationProgress: number;
+  /** 当前时间 (get/set) */
+  currentTime: number;
+  /** 迭代内当前时间 (get/set) */
+  iterationCurrentTime: number;
+  /** 当前迭代索引 (get/set) */
+  currentIteration: number;
+  /** 反向标志 (get/set) */
+  reversed: boolean;
+  /** 播放速度 (get/set) */
+  speed: number;
+
+  // 回调
+  onBegin: Callback<this>;
+  onBeforeUpdate: Callback<this>;
+  onUpdate: Callback<this>;
+  onLoop: Callback<this>;
+  onPause: Callback<this>;
+  onComplete: Callback<this>;
+
+  // 控制方法
+  init(internalRender?: boolean): this;
+  reset(softReset?: boolean): this;
+  restart(): this;
+  seek(time: number, muteCallbacks?: boolean, internalRender?: boolean): this;
+  pause(): this;
+  resume(): this;
+  play(): this;
+  reverse(): this;
+  alternate(): this;
+  stretch(newDuration: number): this;
+  cancel(): this;
+  revert(): this;
+  complete(muteCallbacks?: boolean): this;
+  then(callback?: Callback<ResolvedTimer>): Promise<this>;
+  resetTime(): this;
+}
+
+// ============================================================
+// Tween - 动画属性插值单元契约
+// ============================================================
+interface ITween {
+  /** 目标对象 */
+  target: Target;
+  /** 属性名 */
+  property: string;
+  /** Tween 类型 */
+  _tweenType: TweenType;   // OBJECT | ATTRIBUTE | CSS | TRANSFORM | CSS_VAR
+  /** 值类型 */
+  _valueType: ValueType;   // NUMBER | UNIT | COLOR | COMPLEX
+  /** 起始数值 */
+  _fromNumber: number;
+  /** 结束数值 */
+  _toNumber: number;
+  /** CSS 单位 */
+  _unit: string;
+  /** 起始时间偏移 */
+  _startTime: number;
+  /** 变化持续时间 */
+  _changeDuration: number;
+  /** 更新持续时间 (含延迟) */
+  _updateDuration: number;
+  /** 合成模式 */
+  _composition: CompositionType; // replace | none | blend
+  /** 缓动函数 */
+  _ease: EaseFunction;
+  /** 值修饰函数 */
+  _modifier: ModifierFunction;
+  /** 当前时间 */
+  _currentTime: number;
+  /** 是否被覆盖 */
+  _isOverridden: boolean;
+  /** 是否被重叠 */
+  _isOverlapped: boolean;
+  /** 绝对起始时间 */
+  _absoluteStartTime: number;
+  /** 链表下一个 */
+  _next: Tween | null;
+  /** 链表上一个 */
+  _prev: Tween | null;
+}
+
+// ============================================================
+// JSAnimation - 单次动画契约
+// ============================================================
+interface IJSAnimation extends ITimer {
+  /** Tween 链表头 */
+  _head: Tween | null;
+  /** Tween 链表尾 */
+  _tail: Tween | null;
+  /** 目标数组 */
+  targets: TargetsArray;
+  /** 默认参数 */
+  defaults: AnimationParams;
+  /** 渲染回调 */
+  onRender: Callback<this>;
+
+  /** 刷新动画值 (重新读取当前值) */
+  refresh(): this;
+}
+
+// ============================================================
+// Timeline - 时间线编排契约
+// ============================================================
+interface ITimeline extends ITimer {
+  /** 默认子动画参数 */
+  defaults: AnimationParams;
+
+  /** 添加动画到时间线 */
+  add(
+    targets: TargetsParam,
+    params: AnimationParams,
+    position?: TimelinePosition
+  ): this;
+  /** 设置属性 (立即生效) */
+  set(
+    targets: TargetsParam,
+    params: AnimationParams,
+    position?: TimelinePosition
+  ): this;
+  /** 同步子动画 */
+  sync(): this;
+  /** 刷新所有子动画 */
+  refresh(): this;
+  /** 移除子动画 */
+  remove(targets: TargetsParam): this;
+}
+
+// ============================================================
+// Engine - 全局引擎契约
+// ============================================================
+interface IEngine extends IClock {
+  /** 默认参数 */
+  defaults: DefaultsParams;
+  /** 是否使用默认主循环 */
+  useDefaultMainLoop: boolean;
+  /** 页面隐藏时暂停 */
+  pauseOnDocumentHidden: boolean;
+  /** 暂停状态 */
+  paused: boolean;
+  /** rAF/setImmediate ID */
+  reqId: number;
+  /** 上次 tick 时间 */
+  _lastTickTime: number;
+
+  /** 唤醒引擎 */
+  wake(): void;
+  /** 暂停引擎 */
+  pause(): this;
+  /** 恢复引擎 */
+  resume(): this;
+}
+
+// ============================================================
+// 类型枚举
+// ============================================================
+declare const enum TweenType {
+  OBJECT = 0,
+  ATTRIBUTE = 1,
+  CSS = 2,
+  TRANSFORM = 3,
+  CSS_VAR = 4,
+}
+
+declare const enum ValueType {
+  NUMBER = 0,
+  UNIT = 1,
+  COLOR = 2,
+  COMPLEX = 3,
+}
+
+declare const enum TickMode {
+  NONE = 0,
+  AUTO = 1,
+  FORCE = 2,
+}
+
+declare const enum CompositionType {
+  replace = 0,
+  none = 1,
+  blend = 2,
+}

6.2 对外公共 API 契约 (函数签名)

typescript
// ============================================================
+// 核心动画 API
+// ============================================================
+
+/**
+ * 创建单次动画
+ * @param targets - CSS选择器/DOM元素/NodeList/JS对象/数组
+ * @param parameters - 动画参数配置
+ * @returns JSAnimation 实例
+ */
+export function animate(
+  targets: TargetsParam,
+  parameters: AnimationParams
+): JSAnimation;
+
+/**
+ * 创建批量动画 (为每个目标创建独立动画)
+ * @param targets - 目标数组
+ * @param parameters - 动画参数
+ * @returns JSAnimation[]
+ */
+export function createAnimations(
+  targets: TargetsParam,
+  parameters: AnimationParams
+): JSAnimation[];
+
+// ============================================================
+// 时间线 API
+// ============================================================
+
+/**
+ * 创建动画时间线
+ * @param parameters - Timeline 参数 (可选)
+ * @returns Timeline 实例
+ */
+export function createTimeline(
+  parameters?: TimelineParams
+): Timeline;
+
+// ============================================================
+// 缓动函数 API
+// ============================================================
+
+/**
+ * 解析缓动函数 (字符串 → 函数)
+ * @param ease - 缓动名称字符串或函数
+ * @returns 缓动函数 (t: number) => number
+ */
+export function parseEase(
+  ease: string | EaseFunction
+): EaseFunction;
+
+/**
+ * 创建三次贝塞尔缓动
+ * @param x1, y1, x2, y2 - 贝塞尔控制点
+ * @returns 缓动函数
+ */
+export function cubicBezier(
+  x1: number, y1: number,
+  x2: number, y2: number
+): EaseFunction;
+
+/**
+ * 创建弹簧缓动
+ * @param parameters - 弹簧参数 (mass, stiffness, damping, velocity)
+ * @returns 缓动函数
+ */
+export function spring(
+  parameters?: SpringParams
+): EaseFunction;
+
+// ============================================================
+// 工具 API
+// ============================================================
+
+/**
+ * 创建交错延迟
+ * @param value - 每个元素的延迟时间
+ * @param options - 交错选项 (from: 'start'|'center'|'end'|number)
+ * @returns StaggerFunction
+ */
+export function stagger(
+  value: number | StaggerFunction,
+  options?: { from?: 'start' | 'center' | 'end' | number }
+): StaggerFunction;
+
+// ============================================================
+// 作用域 API
+// ============================================================
+
+/**
+ * 创建作用域
+ * @param parameters - 作用域配置
+ * @returns Scope 实例
+ */
+export function createScope(
+  parameters?: ScopeParams
+): Scope;

7. 构建与包结构

text
rollup.config.js
+ |
+ +-- 开发构建 (默认):
+ |     输入: src/**/index.js (从 package.json exports 自动提取)
+ |     输出: dist/modules/ (ESM + CJS, preserveModules)
+ |
+ +-- 生产构建 (build=true):
+       输入: src/index.js
+       输出: dist/bundles/anime.esm.js (ESM)
+             dist/bundles/anime.umd.js (UMD)
+             dist/bundles/anime.esm.min.js (ESM minified)
+             dist/bundles/anime.umd.min.js (UMD minified)
+       + TypeScript: tsconfig.types.json → dist/modules/**/*.d.ts

8. 快速开始

8.1 安装

bash
npm install animejs

8.2 基本用法

javascript
import { animate, stagger } from 'animejs';
+
+animate('.square', {
+  x: 320,
+  rotate: { from: -180 },
+  duration: 1250,
+  delay: stagger(65, { from: 'center' }),
+  ease: 'inOutQuint',
+  loop: true,
+  alternate: true
+});

8.3 开发环境

bash
npm i                    # 安装依赖
+npm run dev              # 开发模式 (监听 src/ 变化)
+npm run build            # 构建所有格式
+npm run test:browser     # 浏览器测试
+npm run test:node        # Node.js 测试
+npm run open:examples    # 浏览示例

8.4 模块化导入

javascript
// 按需导入 (Tree Shaking 友好)
+import { animate } from 'animejs';
+import { createTimeline } from 'animejs/timeline';
+import { spring } from 'animejs/easings/spring';
+import { createDraggable } from 'animejs/draggable';
+import { splitText } from 'animejs/text';
`,17))])}const A=h(r,[["render",d]]);export{m as __pageData,A as default}; diff --git a/assets/insight-labs_repo-insight_anime.md.GRpRGyDu.lean.js b/assets/insight-labs_repo-insight_anime.md.GRpRGyDu.lean.js new file mode 100644 index 0000000..e38540b --- /dev/null +++ b/assets/insight-labs_repo-insight_anime.md.GRpRGyDu.lean.js @@ -0,0 +1 @@ +import{_ as h,r as e,c as t,o as k,d as a,b as n,w as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"Animejs 开源项目解读","description":"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Animejs 开源项目解读","tldr":"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。","description":"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。","abstract":null,"permalink":"/insight-labs/repo-insight/anime","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/anime.md","filePath":"31.Insight Labs/11.Reop Insight Reports/07.anime.md"}'),r={name:"insight-labs/repo-insight/anime.md"};function d(c,s,g,b,F,E){const i=e("MermaidChart"),p=e("ClientOnly");return k(),t("div",null,[s[0]||(s[0]=a("",52)),n(p,null,{default:l(()=>[n(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20API%20as%20animate()%0A%20%20%20%20participant%20JSAnim%20as%20JSAnimation(Timer)%0A%20%20%20%20participant%20Engine%20as%20Engine(%E5%85%A8%E5%B1%80%E5%8D%95%E4%BE%8B)%0A%20%20%20%20participant%20Render%20as%20Render%2Ftick()%0A%20%20%20%20participant%20Target%20as%20DOM%2FJS%20Target%0A%0A%20%20%20%20User-%3E%3EAPI%3A%20animate('.box'%2C%20%7B%20x%3A%20100%2C%20duration%3A%201000%20%7D)%0A%20%20%20%20activate%20API%0A%20%20%20%20API-%3E%3EAPI%3A%20parseTargets('.box')%20%E2%86%92%20%E6%9F%A5%E6%89%BEDOM%E5%85%83%E7%B4%A0%0A%20%20%20%20API-%3E%3EJSAnim%3A%20new%20JSAnimation(parameters)%0A%20%20%20%20activate%20JSAnim%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E6%9E%84%E9%80%A0%20Tween%20%E9%93%BE%E8%A1%A8%20(%E6%AF%8F%E4%B8%AA%E5%B1%9E%E6%80%A7%E4%B8%80%E4%B8%AATween)%0A%20%20%20%20Note%20over%20JSAnim%3A%20Tween%20%7B%20property%3A%20'x'%2C%20fromNumber%3A%200%2C%20toNumber%3A%20100%2C%20_valueType%3A%20UNIT%20%7D%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20decomposeTweenValue()%20%E5%88%86%E8%A7%A3%E5%80%BC%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E6%B3%A8%E5%86%8C%E5%88%B0%20scope.current%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20init()%20%E2%86%92%20reset()%20%E2%86%92%20resume()%0A%20%20%20%20JSAnim-%3E%3EEngine%3A%20resume()%20%E2%86%92%20addChild(engine%2C%20this)%0A%20%20%20%20Note%20over%20Engine%3A%20%E5%B0%86%20JSAnimation%20%E5%8A%A0%E5%85%A5%E5%88%B0%20Engine%20%E7%9A%84%E6%B4%BB%E8%B7%83%20Timer%20%E9%93%BE%E8%A1%A8%0A%20%20%20%20JSAnim-%3E%3EEngine%3A%20engine.wake()%0A%20%20%20%20deactivate%20JSAnim%0A%20%20%20%20API--%3E%3EUser%3A%20%E8%BF%94%E5%9B%9E%20JSAnimation%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20API%0A%0A%20%20%20%20loop%20%E6%AF%8F%E5%B8%A7%20(rAF%20~16ms)%0A%20%20%20%20%20%20%20%20Engine-%3E%3EEngine%3A%20engineTickMethod%20%E5%9B%9E%E8%B0%83%0A%20%20%20%20%20%20%20%20Engine-%3E%3EEngine%3A%20computeDeltaTime(now())%0A%20%20%20%20%20%20%20%20Engine-%3E%3ERender%3A%20tick(engine%2C%20currentTime)%0A%20%20%20%20%20%20%20%20activate%20Render%0A%20%20%20%20%20%20%20%20Render-%3E%3ERender%3A%20%E9%81%8D%E5%8E%86%20Engine._head%20%E9%93%BE%E8%A1%A8%20(%E6%8C%89%E4%BC%98%E5%85%88%E7%BA%A7%E6%8E%92%E5%BA%8F)%0A%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20render(jsAnimation%2C%20time)%0A%20%20%20%20%20%20%20%20activate%20JSAnim%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%20_currentTime%2C%20_iterationTime%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%20tweenProgress%20(ease%E5%87%BD%E6%95%B0)%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20lerp(fromNumber%2C%20toNumber%2C%20progress)%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20composeValue%20%E2%86%92%20%2285px%22%0A%20%20%20%20%20%20%20%20JSAnim-%3E%3ETarget%3A%20target.style.transform%20%3D%20%22translateX(85px)%22%0A%20%20%20%20%20%20%20%20deactivate%20JSAnim%0A%20%20%20%20%20%20%20%20JSAnim--%3E%3ERender%3A%20hasRendered%20%3D%201%0A%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20onUpdate%20%E5%9B%9E%E8%B0%83%0A%20%20%20%20%20%20%20%20deactivate%20Render%0A%20%20%20%20end%0A%0A%20%20%20%20Note%20over%20JSAnim%3A%20%E5%BD%93%20currentTime%20%3E%3D%20duration%20(1000ms)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20completed%20%3D%20true%2C%20paused%20%3D%20true%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20onComplete(this)%0A%20%20%20%20JSAnim-%3E%3EEngine%3A%20%E4%BB%8E%E6%B4%BB%E8%B7%83%E9%93%BE%E8%A1%A8%E7%A7%BB%E9%99%A4%20(%E4%B8%8B%E6%AC%A1%20tick)%0A%20%20%20%20JSAnim--%3E%3EUser%3A%20.then()%20Promise%20resolve%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=a("",2)),n(p,null,{default:l(()=>[n(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20TL%20as%20Timeline(Timer)%0A%20%20%20%20participant%20Pos%20as%20parseTimelinePosition%0A%20%20%20%20participant%20JSAnim%20as%20JSAnimation(Timer)%0A%20%20%20%20participant%20Engine%20as%20Engine%0A%20%20%20%20participant%20Render%20as%20Render%2Ftick()%0A%0A%20%20%20%20User-%3E%3ETL%3A%20createTimeline()%0A%20%20%20%20TL-%3E%3ETL%3A%20init()%20%E2%86%92%20reset()%20%E2%86%92%20resume()%0A%20%20%20%20TL-%3E%3EEngine%3A%20addChild(engine%2C%20timeline)%0A%0A%20%20%20%20User-%3E%3ETL%3A%20tl.add('.box'%2C%20%7B%20x%3A%20100%20%7D%2C%200)%0A%20%20%20%20activate%20TL%0A%20%20%20%20TL-%3E%3EPos%3A%20parseTimelinePosition(0)%0A%20%20%20%20Pos--%3E%3ETL%3A%20offsetPosition%20%3D%200%0A%20%20%20%20TL-%3E%3EJSAnim%3A%20new%20JSAnimation('.box'%2C%20%7B%20x%3A%20100%20%7D%2C%20timeline%2C%200)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20init(internalRender%3Dtrue)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20_offset%20%3D%200%20(%E4%BB%8ETimeline%E8%B5%B7%E5%A7%8B%E5%BC%80%E5%A7%8B)%0A%20%20%20%20TL-%3E%3ETL%3A%20addChild(timeline%2C%20jsAnimation)%20%E2%86%92%20%E6%8F%92%E5%85%A5%E5%AD%90%E8%8A%82%E7%82%B9%E9%93%BE%E8%A1%A8%0A%20%20%20%20TL--%3E%3EUser%3A%20%E8%BF%94%E5%9B%9E%20Timeline%20%E5%BC%95%E7%94%A8%20(%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8)%0A%20%20%20%20deactivate%20TL%0A%0A%20%20%20%20User-%3E%3ETL%3A%20tl.add('.circle'%2C%20%7B%20scale%3A%202%20%7D%2C%20'-%3D500')%0A%20%20%20%20activate%20TL%0A%20%20%20%20TL-%3E%3EPos%3A%20parseTimelinePosition('-%3D500')%0A%20%20%20%20Note%20over%20Pos%3A%20%E8%AE%A1%E7%AE%97%20relativeOffset%20%3D%20-500%20(%E4%B8%8E%E5%89%8D%E4%B8%80%E4%B8%AA%E7%BB%93%E6%9D%9F%E9%87%8D%E5%8F%A0500ms)%0A%20%20%20%20Pos--%3E%3ETL%3A%20offsetPosition%20%3D%20500%0A%20%20%20%20TL-%3E%3EJSAnim%3A%20new%20JSAnimation('.circle'%2C%20%7B%20scale%3A%202%20%7D%2C%20timeline%2C%20500)%0A%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20_offset%20%3D%20500%0A%20%20%20%20deactivate%20TL%0A%0A%20%20%20%20loop%20%E6%AF%8F%E5%B8%A7%0A%20%20%20%20%20%20%20%20Engine-%3E%3ERender%3A%20tick(engine%2C%20time)%0A%20%20%20%20%20%20%20%20Render-%3E%3ETL%3A%20render(timeline%2C%20time)%0A%20%20%20%20%20%20%20%20TL-%3E%3ETL%3A%20%E8%AE%A1%E7%AE%97%20_iterationTime%0A%20%20%20%20%20%20%20%20Render-%3E%3ERender%3A%20tick(timeline%2C%20time)%20%E2%80%94%20%E9%80%92%E5%BD%92%E5%A4%84%E7%90%86%E5%AD%90%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20loop%20%E9%81%8D%E5%8E%86%20Timeline%20%E5%AD%90%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20render(child1%3A%20'.box'%2C%20childTime%20%3D%20_iterationTime%20-%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%E5%B9%B6%E5%86%99%E5%85%A5%20x%20%E5%80%BC%0A%20%20%20%20%20%20%20%20%20%20%20%20Render-%3E%3EJSAnim%3A%20render(child2%3A%20'.circle'%2C%20childTime%20%3D%20_iterationTime%20-%20500)%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20JSAnim%3A%20child2%20%E6%AF%94%20child1%20%E6%99%9A%20500ms%20%E5%BC%80%E5%A7%8B%0A%20%20%20%20%20%20%20%20%20%20%20%20JSAnim-%3E%3EJSAnim%3A%20%E8%AE%A1%E7%AE%97%E5%B9%B6%E5%86%99%E5%85%A5%20scale%20%E5%80%BC%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Render-%3E%3ETL%3A%20%E5%AD%90%E8%8A%82%E7%82%B9%E5%AE%8C%E6%88%90%E5%90%8E%E8%A7%A6%E5%8F%91%20onRender%2FonComplete%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),s[2]||(s[2]=a("",2)),n(p,null,{default:l(()=>[n(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20Anim1%20as%20JSAnimation%20%231%0A%20%20%20%20participant%20Anim2%20as%20JSAnimation%20%232%0A%20%20%20%20participant%20Comp%20as%20Composition%0A%20%20%20%20participant%20Lookups%20as%20Tween%20Lookups%20(WeakMap)%0A%20%20%20%20participant%20Render%20as%20Render%0A%0A%20%20%20%20User-%3E%3EAnim1%3A%20animate('.box'%2C%20%7B%20x%3A%20100%2C%20composition%3A%20'blend'%20%7D)%0A%20%20%20%20Anim1-%3E%3EAnim1%3A%20%E5%88%9B%E5%BB%BA%20Tween%20%7B%20target%3A%20.box%2C%20property%3A%20'x'%2C%20_composition%3A%20blend%20%7D%0A%20%20%20%20Anim1-%3E%3ELookups%3A%20%E6%B3%A8%E5%86%8C%3A%20WeakMap%5B.box%5D%5B'x'%5D%20%3D%20%5Btween1%5D%0A%20%20%20%20Anim1-%3E%3EAnim1%3A%20init()%20%E2%86%92%20resume()%0A%0A%20%20%20%20User-%3E%3EAnim2%3A%20animate('.box'%2C%20%7B%20x%3A%2050%2C%20composition%3A%20'replace'%20%7D)%0A%20%20%20%20Anim2-%3E%3EAnim2%3A%20%E5%88%9B%E5%BB%BA%20Tween%20%7B%20target%3A%20.box%2C%20property%3A%20'x'%2C%20_composition%3A%20replace%20%7D%0A%20%20%20%20Anim2-%3E%3EComp%3A%20composeTween(tween2%2C%20getTweenSiblings(.box%2C%20'x'))%0A%20%20%20%20Comp-%3E%3ELookups%3A%20%E6%9F%A5%E6%89%BE%3A%20WeakMap%5B.box%5D%5B'x'%5D%20%3D%20%5Btween1%2C%20tween2%5D%0A%20%20%20%20Comp-%3E%3EComp%3A%20tween1._isOverridden%20%3D%20true%20(%E8%A2%AB%20tween2%20replace)%0A%20%20%20%20Note%20over%20Comp%3A%20replace%20%E6%A8%A1%E5%BC%8F%3A%20%E6%97%A7%20tween%20%E8%A2%AB%E6%A0%87%E8%AE%B0%E4%B8%BA%20_isOverridden%0A%0A%20%20%20%20loop%20%E6%AF%8F%E5%B8%A7%E6%B8%B2%E6%9F%93%0A%20%20%20%20%20%20%20%20Render-%3E%3EAnim1%3A%20render(anim1)%20%E2%80%94%20tween1%20%E5%9B%A0%20_isOverridden%20%E8%A2%AB%E8%B7%B3%E8%BF%87%0A%20%20%20%20%20%20%20%20Render-%3E%3EAnim2%3A%20render(anim2)%20%E2%80%94%20tween2%20%E6%AD%A3%E5%B8%B8%E6%B8%B2%E6%9F%93%0A%20%20%20%20%20%20%20%20Note%20over%20Render%3A%20blend%20%E6%A8%A1%E5%BC%8F%E6%97%B6%E4%B8%A4%E4%B8%AA%20tween%20%E9%83%BD%E4%BC%9A%E6%B8%B2%E6%9F%93%EF%BC%8C%E5%80%BC%E7%9B%B8%E5%8A%A0%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),s[3]||(s[3]=a("",17))])}const A=h(r,[["render",d]]);export{m as __pageData,A as default}; diff --git a/assets/insight-labs_repo-insight_echarts.md.Dx4twj-H.js b/assets/insight-labs_repo-insight_echarts.md.TPWYiRaL.js similarity index 99% rename from assets/insight-labs_repo-insight_echarts.md.Dx4twj-H.js rename to assets/insight-labs_repo-insight_echarts.md.TPWYiRaL.js index b495e56..a1f89a3 100644 --- a/assets/insight-labs_repo-insight_echarts.md.Dx4twj-H.js +++ b/assets/insight-labs_repo-insight_echarts.md.TPWYiRaL.js @@ -1,4 +1,4 @@ -import{_ as e,r as i,c as h,o as t,d as a,b as n,w as k}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const C=JSON.parse('{"title":"ECharts 开源项目解读","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"ECharts 开源项目解读","tldr":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","abstract":null,"permalink":"/insight-labs/repo-insight/echarts","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/echarts.md","filePath":"31.Insight Labs/11.Reop Insight Reports/03.echarts.md"}'),r={name:"insight-labs/repo-insight/echarts.md"};function F(d,s,g,c,y,E){const p=i("MermaidChart"),l=i("ClientOnly");return t(),h("div",null,[s[0]||(s[0]=a(`

ECharts 开源项目解读

项目信息

  • 项目名称:ECharts

  • 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。

  • 项目地址:https://github.com/apache/echarts

  • 官方文档:https://echarts.apache.org/zh/index.html

  • 解决的核心痛点

    • 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降低可视化开发门槛。
    • 复杂的图表交互:内置缩放、平移、框选、提示框、图例切换等丰富的交互行为,避免开发者重复造轮子。
    • 跨平台一致性:统一的数据模型和渲染层,屏蔽 Canvas/SVG 底层差异,支持从 PC 到移动端的全平台一致性展示。
  • 目标用户

    • 前端工程师:需要在产品中快速集成专业可视化图表
    • 数据分析师:需要交互式探索数据,无需了解底层渲染细节
    • 企业级 BI/SaaS 产品:需要高性能、可定制的商业图表方案
  • 核心架构:插件化分层管道架构(6 层:API → 核心引擎 → 模型 → 调度管道 → 视图 → zrender 渲染)

  • 技术亮点:23 种图表、28 个组件、8 种坐标系、Canvas/SVG 双渲染、渐进式渲染、插件按需加载。

1. 项目概览

1.1 项目定位与核心价值

Apache ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。

属性
版本6.1.0
语言TypeScript (639 .ts 文件)
总文件数2,069
源码行数~211,836
许可证Apache-2.0
核心依赖zrender 6.1.0
主页https://echarts.apache.org

解决的核心痛点

  1. 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降低可视化开发门槛。

  2. 复杂的图表交互:内置缩放、平移、框选、提示框、图例切换等丰富的交互行为,避免开发者重复造轮子。

  3. 跨平台一致性:统一的数据模型和渲染层,屏蔽 Canvas/SVG 底层差异,支持从 PC 到移动端的全平台一致性展示。

1.2 目标用户与使用场景

目标用户

  • 前端工程师:需要在产品中快速集成专业可视化图表
  • 数据分析师:需要交互式探索数据,无需了解底层渲染细节
  • 企业级 BI/SaaS 产品:需要高性能、可定制的商业图表方案

核心业务场景

场景描述关键功能
商业仪表盘企业 BI 产品构建交互式数据大屏折线/柱状图、地图、饼图、visualMap、dataZoom
实时监控运维系统实时更新折线图和仪表盘dataset、dataZoom 时间窗口、动态数据
数据报告服务端渲染生成静态图表图片SSR 模式、SVG 渲染器

1.3 核心技术亮点

  • 23 种图表类型:涵盖折线、柱状、饼图、散点、地图、K线、桑基、旭日等
  • 28 个交互组件:legend、tooltip、dataZoom、visualMap、brush、timeline 等
  • 8 种坐标系:笛卡尔、极坐标、地理、雷达、日历、平行、单轴、矩阵
  • Canvas/SVG 双渲染:大数据量用 Canvas,精细交互用 SVG,SSR 用 SVG
  • 渐进式渲染:10万+ 数据点时支持分帧渲染,不阻塞 UI
  • 插件化架构:按需加载,Tree Shaking 友好
  • 全面国际化:55+ 语言支持
  • 完善的 TypeScript 类型:自动补全和类型检查

1.4 技术栈与选型对比

技术选型方案替代方案选择理由
渲染引擎zrender (自研)D3.js, PixiJS完整的 Displayable 对象模型和事件系统,适合声明式框架
语言TypeScriptJavaScript大型代码库的类型安全,复杂 option 的自动补全
构建Rollup + esbuildWebpack高效的 ESM/CJS/UMD 多格式输出
数据模型dataset + Sourceseries.data数据与图表解耦,一份数据多种图表复用
架构插件化管道单体架构按需加载,核心小巧 (IoC 模式)

2. 整体架构设计

2.1 架构概述

ECharts 采用插件化分层管道架构。核心引擎提供扩展注册机制和调度管道,所有功能(图表类型、组件、坐标系、视觉编码、布局算法、数据处理器)均以插件形式注册。系统自顶向下分为 6 个逻辑层:

  • 用户 API 层:暴露 init()setOption()dispatchAction() 等顶层 API
  • 核心引擎层:ECharts 主类,管理实例生命周期(创建/更新/销毁)、zrender 渲染器绑定、扩展 API 创建
  • 模型层 (Model):GlobalModel 解析并存储 option,SeriesModel/ComponentModel 管理各自配置与状态
  • 调度管道层 (Scheduler):按优先级排序的 Stage 管道,分为 dataProcessor 和 visual 两大阶段
  • 视图层 (View):ChartView 负责图表绘制,ComponentView 负责组件绘制,与 zrender Displayable 绑定
  • 基础渲染层 (zrender):提供 Canvas/SVG 双渲染后端、事件系统、图形基类

2.2 整体架构图

text
+===========================================================================+
+import{_ as e,r as i,c as h,o as t,d as a,b as n,w as k}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const C=JSON.parse('{"title":"ECharts 开源项目解读","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"ECharts 开源项目解读","tldr":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","abstract":null,"permalink":"/insight-labs/repo-insight/echarts","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/echarts.md","filePath":"31.Insight Labs/11.Reop Insight Reports/03.echarts.md"}'),r={name:"insight-labs/repo-insight/echarts.md"};function F(d,s,g,c,y,E){const p=i("MermaidChart"),l=i("ClientOnly");return t(),h("div",null,[s[0]||(s[0]=a(`

ECharts 开源项目解读

项目信息

  • 项目名称:ECharts

  • 项目描述*ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。

  • 项目地址:https://github.com/apache/echarts

  • 官方文档:https://echarts.apache.org/zh/index.html

  • 解决的核心痛点

    • 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降低可视化开发门槛。
    • 复杂的图表交互:内置缩放、平移、框选、提示框、图例切换等丰富的交互行为,避免开发者重复造轮子。
    • 跨平台一致性:统一的数据模型和渲染层,屏蔽 Canvas/SVG 底层差异,支持从 PC 到移动端的全平台一致性展示。
  • 目标用户

    • 前端工程师:需要在产品中快速集成专业可视化图表
    • 数据分析师:需要交互式探索数据,无需了解底层渲染细节
    • 企业级 BI/SaaS 产品:需要高性能、可定制的商业图表方案
  • 核心架构:插件化分层管道架构(6 层:API → 核心引擎 → 模型 → 调度管道 → 视图 → zrender 渲染)

  • 技术亮点:23 种图表、28 个组件、8 种坐标系、Canvas/SVG 双渲染、渐进式渲染、插件按需加载。

1. 项目概览

1.1 项目定位与核心价值

Apache ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 zrender。本项目是 Apache 软件基金会的顶级开源项目。

属性
版本6.1.0
语言TypeScript (639 .ts 文件)
总文件数2,069
源码行数~211,836
许可证Apache-2.0
核心依赖zrender 6.1.0
主页https://echarts.apache.org

解决的核心痛点

  1. 声明式 vs 命令式:开发者只需声明数据和图表配置(option),无需手动操作 Canvas API 逐像素绘制,极大降低可视化开发门槛。

  2. 复杂的图表交互:内置缩放、平移、框选、提示框、图例切换等丰富的交互行为,避免开发者重复造轮子。

  3. 跨平台一致性:统一的数据模型和渲染层,屏蔽 Canvas/SVG 底层差异,支持从 PC 到移动端的全平台一致性展示。

1.2 目标用户与使用场景

目标用户

  • 前端工程师:需要在产品中快速集成专业可视化图表
  • 数据分析师:需要交互式探索数据,无需了解底层渲染细节
  • 企业级 BI/SaaS 产品:需要高性能、可定制的商业图表方案

核心业务场景

场景描述关键功能
商业仪表盘企业 BI 产品构建交互式数据大屏折线/柱状图、地图、饼图、visualMap、dataZoom
实时监控运维系统实时更新折线图和仪表盘dataset、dataZoom 时间窗口、动态数据
数据报告服务端渲染生成静态图表图片SSR 模式、SVG 渲染器

1.3 核心技术亮点

  • 23 种图表类型:涵盖折线、柱状、饼图、散点、地图、K线、桑基、旭日等
  • 28 个交互组件:legend、tooltip、dataZoom、visualMap、brush、timeline 等
  • 8 种坐标系:笛卡尔、极坐标、地理、雷达、日历、平行、单轴、矩阵
  • Canvas/SVG 双渲染:大数据量用 Canvas,精细交互用 SVG,SSR 用 SVG
  • 渐进式渲染:10万+ 数据点时支持分帧渲染,不阻塞 UI
  • 插件化架构:按需加载,Tree Shaking 友好
  • 全面国际化:55+ 语言支持
  • 完善的 TypeScript 类型:自动补全和类型检查

1.4 技术栈与选型对比

技术选型方案替代方案选择理由
渲染引擎zrender (自研)D3.js, PixiJS完整的 Displayable 对象模型和事件系统,适合声明式框架
语言TypeScriptJavaScript大型代码库的类型安全,复杂 option 的自动补全
构建Rollup + esbuildWebpack高效的 ESM/CJS/UMD 多格式输出
数据模型dataset + Sourceseries.data数据与图表解耦,一份数据多种图表复用
架构插件化管道单体架构按需加载,核心小巧 (IoC 模式)

2. 整体架构设计

2.1 架构概述

ECharts 采用插件化分层管道架构。核心引擎提供扩展注册机制和调度管道,所有功能(图表类型、组件、坐标系、视觉编码、布局算法、数据处理器)均以插件形式注册。系统自顶向下分为 6 个逻辑层:

  • 用户 API 层:暴露 init()setOption()dispatchAction() 等顶层 API
  • 核心引擎层:ECharts 主类,管理实例生命周期(创建/更新/销毁)、zrender 渲染器绑定、扩展 API 创建
  • 模型层 (Model):GlobalModel 解析并存储 option,SeriesModel/ComponentModel 管理各自配置与状态
  • 调度管道层 (Scheduler):按优先级排序的 Stage 管道,分为 dataProcessor 和 visual 两大阶段
  • 视图层 (View):ChartView 负责图表绘制,ComponentView 负责组件绘制,与 zrender Displayable 绑定
  • 基础渲染层 (zrender):提供 Canvas/SVG 双渲染后端、事件系统、图形基类

2.2 整体架构图

text
+===========================================================================+
 |                         用户 API 层 (Public API)                          |
 |  init(dom, theme?, opts?)  |  setOption(option)  |  dispatchAction(payload) |
 +===================================+=======================================+
diff --git a/assets/insight-labs_repo-insight_echarts.md.Dx4twj-H.lean.js b/assets/insight-labs_repo-insight_echarts.md.TPWYiRaL.lean.js
similarity index 98%
rename from assets/insight-labs_repo-insight_echarts.md.Dx4twj-H.lean.js
rename to assets/insight-labs_repo-insight_echarts.md.TPWYiRaL.lean.js
index dd752f2..39a352a 100644
--- a/assets/insight-labs_repo-insight_echarts.md.Dx4twj-H.lean.js
+++ b/assets/insight-labs_repo-insight_echarts.md.TPWYiRaL.lean.js
@@ -1 +1 @@
-import{_ as e,r as i,c as h,o as t,d as a,b as n,w as k}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const C=JSON.parse('{"title":"ECharts 开源项目解读","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"ECharts 开源项目解读","tldr":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","abstract":null,"permalink":"/insight-labs/repo-insight/echarts","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/echarts.md","filePath":"31.Insight Labs/11.Reop Insight Reports/03.echarts.md"}'),r={name:"insight-labs/repo-insight/echarts.md"};function F(d,s,g,c,y,E){const p=i("MermaidChart"),l=i("ClientOnly");return t(),h("div",null,[s[0]||(s[0]=a("",54)),n(l,null,{default:k(()=>[n(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20EC%20as%20ECharts%20Instance%0A%20%20%20%20participant%20OM%20as%20OptionManager%0A%20%20%20%20participant%20GM%20as%20GlobalModel%0A%20%20%20%20participant%20Sch%20as%20Scheduler%0A%20%20%20%20participant%20DP%20as%20DataProcessor%0A%20%20%20%20participant%20VS%20as%20VisualStage%0A%20%20%20%20participant%20SM%20as%20SeriesModel%0A%20%20%20%20participant%20SD%20as%20SeriesData%0A%20%20%20%20participant%20CV%20as%20ChartView%20(LineView)%0A%20%20%20%20participant%20ZR%20as%20zrender%20(Canvas)%0A%0A%20%20%20%20User-%3E%3EEC%3A%20echarts.init(dom)%0A%20%20%20%20activate%20EC%0A%20%20%20%20EC-%3E%3EZR%3A%20zrender.init(dom%2C%20%7Brenderer%3A%20'canvas'%7D)%0A%20%20%20%20ZR--%3E%3EEC%3A%20zr%20instance%0A%20%20%20%20EC-%3E%3EEC%3A%20createExtensionAPI()%0A%20%20%20%20EC-%3E%3ESch%3A%20new%20Scheduler(ec%2C%20api%2C%20dpHandlers%2C%20visualHandlers)%0A%20%20%20%20EC--%3E%3EUser%3A%20chart%20instance%0A%20%20%20%20deactivate%20EC%0A%0A%20%20%20%20User-%3E%3EEC%3A%20chart.setOption(%7BxAxis%2C%20yAxis%2C%20series%3A%20%5B%7Btype%3A'line'%2C%20data%3A%5B...%5D%7D%5D%7D)%0A%20%20%20%20activate%20EC%0A%20%20%20%20EC-%3E%3EOM%3A%20setOption(option%2C%20opts)%0A%20%20%20%20OM-%3E%3EGM%3A%20setOption(option)%0A%20%20%20%20GM-%3E%3EGM%3A%20%E8%A7%A3%E6%9E%90%20option%2C%20%E5%88%9B%E5%BB%BA%20SeriesModel%20%2F%20ComponentModel%0A%20%20%20%20GM--%3E%3EOM%3A%20ecModel%20updated%0A%0A%20%20%20%20EC-%3E%3ESch%3A%20restoreData(ecModel%2C%20payload)%0A%20%20%20%20Sch-%3E%3ESM%3A%20restoreData()%20(per%20series)%0A%20%20%20%20SM-%3E%3ESD%3A%20restoreData()%0A%0A%20%20%20%20EC-%3E%3ESch%3A%20wipTasks()%0A%20%20%20%20activate%20Sch%0A%0A%20%20%20%20loop%20DataProcessor%20Stage%0A%20%20%20%20%20%20%20%20Sch-%3E%3EDP%3A%20performStageTask(dpTask)%0A%20%20%20%20%20%20%20%20DP-%3E%3ESM%3A%20plan()%20-%3E%20reset()%0A%20%20%20%20%20%20%20%20SM-%3E%3ESD%3A%20%E8%BF%87%E6%BB%A4%2F%E6%98%A0%E5%B0%84%2F%E7%BB%9F%E8%AE%A1%20%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20DP--%3E%3ESch%3A%20data%20processed%0A%20%20%20%20end%0A%0A%20%20%20%20loop%20Visual%20Stage%0A%20%20%20%20%20%20%20%20Sch-%3E%3EVS%3A%20performStageTask(visualTask)%0A%20%20%20%20%20%20%20%20VS-%3E%3ESM%3A%20reset(visualType)%0A%20%20%20%20%20%20%20%20SM-%3E%3ESD%3A%20setVisual(key%2C%20value)%0A%20%20%20%20%20%20%20%20VS--%3E%3ESch%3A%20visual%20encoded%0A%20%20%20%20end%0A%0A%20%20%20%20Sch--%3E%3EEC%3A%20all%20tasks%20completed%0A%20%20%20%20deactivate%20Sch%0A%0A%20%20%20%20EC-%3E%3ECV%3A%20render(seriesModel%2C%20ecModel%2C%20api)%0A%20%20%20%20activate%20CV%0A%20%20%20%20CV-%3E%3ESD%3A%20getItemModel(idx)%20%2F%20getVisual()%0A%20%20%20%20CV-%3E%3EZR%3A%20add%2Fupdate%20Displayable%20(Line%2C%20Rect%2C%20Text)%0A%20%20%20%20ZR--%3E%3ECV%3A%20render%20complete%0A%20%20%20%20deactivate%20CV%0A%0A%20%20%20%20EC-%3E%3EZR%3A%20flush()%20(throttled%2C%2017ms%20interval)%0A%20%20%20%20ZR--%3E%3EEC%3A%20painted%20to%20canvas%0A%20%20%20%20EC--%3E%3EUser%3A%20%E5%9B%BE%E8%A1%A8%E6%B8%B2%E6%9F%93%E5%AE%8C%E6%88%90%EF%BC%8C%E5%8F%AF%E4%BA%A4%E4%BA%92%0A%20%20%20%20deactivate%20EC%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=a("",16))])}const o=e(r,[["render",F]]);export{C as __pageData,o as default};
+import{_ as e,r as i,c as h,o as t,d as a,b as n,w as k}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const C=JSON.parse('{"title":"ECharts 开源项目解读","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"ECharts 开源项目解读","tldr":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","description":"ECharts 是一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目。","abstract":null,"permalink":"/insight-labs/repo-insight/echarts","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/echarts.md","filePath":"31.Insight Labs/11.Reop Insight Reports/03.echarts.md"}'),r={name:"insight-labs/repo-insight/echarts.md"};function F(d,s,g,c,y,E){const p=i("MermaidChart"),l=i("ClientOnly");return t(),h("div",null,[s[0]||(s[0]=a("",54)),n(l,null,{default:k(()=>[n(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20EC%20as%20ECharts%20Instance%0A%20%20%20%20participant%20OM%20as%20OptionManager%0A%20%20%20%20participant%20GM%20as%20GlobalModel%0A%20%20%20%20participant%20Sch%20as%20Scheduler%0A%20%20%20%20participant%20DP%20as%20DataProcessor%0A%20%20%20%20participant%20VS%20as%20VisualStage%0A%20%20%20%20participant%20SM%20as%20SeriesModel%0A%20%20%20%20participant%20SD%20as%20SeriesData%0A%20%20%20%20participant%20CV%20as%20ChartView%20(LineView)%0A%20%20%20%20participant%20ZR%20as%20zrender%20(Canvas)%0A%0A%20%20%20%20User-%3E%3EEC%3A%20echarts.init(dom)%0A%20%20%20%20activate%20EC%0A%20%20%20%20EC-%3E%3EZR%3A%20zrender.init(dom%2C%20%7Brenderer%3A%20'canvas'%7D)%0A%20%20%20%20ZR--%3E%3EEC%3A%20zr%20instance%0A%20%20%20%20EC-%3E%3EEC%3A%20createExtensionAPI()%0A%20%20%20%20EC-%3E%3ESch%3A%20new%20Scheduler(ec%2C%20api%2C%20dpHandlers%2C%20visualHandlers)%0A%20%20%20%20EC--%3E%3EUser%3A%20chart%20instance%0A%20%20%20%20deactivate%20EC%0A%0A%20%20%20%20User-%3E%3EEC%3A%20chart.setOption(%7BxAxis%2C%20yAxis%2C%20series%3A%20%5B%7Btype%3A'line'%2C%20data%3A%5B...%5D%7D%5D%7D)%0A%20%20%20%20activate%20EC%0A%20%20%20%20EC-%3E%3EOM%3A%20setOption(option%2C%20opts)%0A%20%20%20%20OM-%3E%3EGM%3A%20setOption(option)%0A%20%20%20%20GM-%3E%3EGM%3A%20%E8%A7%A3%E6%9E%90%20option%2C%20%E5%88%9B%E5%BB%BA%20SeriesModel%20%2F%20ComponentModel%0A%20%20%20%20GM--%3E%3EOM%3A%20ecModel%20updated%0A%0A%20%20%20%20EC-%3E%3ESch%3A%20restoreData(ecModel%2C%20payload)%0A%20%20%20%20Sch-%3E%3ESM%3A%20restoreData()%20(per%20series)%0A%20%20%20%20SM-%3E%3ESD%3A%20restoreData()%0A%0A%20%20%20%20EC-%3E%3ESch%3A%20wipTasks()%0A%20%20%20%20activate%20Sch%0A%0A%20%20%20%20loop%20DataProcessor%20Stage%0A%20%20%20%20%20%20%20%20Sch-%3E%3EDP%3A%20performStageTask(dpTask)%0A%20%20%20%20%20%20%20%20DP-%3E%3ESM%3A%20plan()%20-%3E%20reset()%0A%20%20%20%20%20%20%20%20SM-%3E%3ESD%3A%20%E8%BF%87%E6%BB%A4%2F%E6%98%A0%E5%B0%84%2F%E7%BB%9F%E8%AE%A1%20%E6%95%B0%E6%8D%AE%0A%20%20%20%20%20%20%20%20DP--%3E%3ESch%3A%20data%20processed%0A%20%20%20%20end%0A%0A%20%20%20%20loop%20Visual%20Stage%0A%20%20%20%20%20%20%20%20Sch-%3E%3EVS%3A%20performStageTask(visualTask)%0A%20%20%20%20%20%20%20%20VS-%3E%3ESM%3A%20reset(visualType)%0A%20%20%20%20%20%20%20%20SM-%3E%3ESD%3A%20setVisual(key%2C%20value)%0A%20%20%20%20%20%20%20%20VS--%3E%3ESch%3A%20visual%20encoded%0A%20%20%20%20end%0A%0A%20%20%20%20Sch--%3E%3EEC%3A%20all%20tasks%20completed%0A%20%20%20%20deactivate%20Sch%0A%0A%20%20%20%20EC-%3E%3ECV%3A%20render(seriesModel%2C%20ecModel%2C%20api)%0A%20%20%20%20activate%20CV%0A%20%20%20%20CV-%3E%3ESD%3A%20getItemModel(idx)%20%2F%20getVisual()%0A%20%20%20%20CV-%3E%3EZR%3A%20add%2Fupdate%20Displayable%20(Line%2C%20Rect%2C%20Text)%0A%20%20%20%20ZR--%3E%3ECV%3A%20render%20complete%0A%20%20%20%20deactivate%20CV%0A%0A%20%20%20%20EC-%3E%3EZR%3A%20flush()%20(throttled%2C%2017ms%20interval)%0A%20%20%20%20ZR--%3E%3EEC%3A%20painted%20to%20canvas%0A%20%20%20%20EC--%3E%3EUser%3A%20%E5%9B%BE%E8%A1%A8%E6%B8%B2%E6%9F%93%E5%AE%8C%E6%88%90%EF%BC%8C%E5%8F%AF%E4%BA%A4%E4%BA%92%0A%20%20%20%20deactivate%20EC%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=a("",16))])}const o=e(r,[["render",F]]);export{C as __pageData,o as default};
diff --git a/assets/insight-labs_repo-insight_fetch-event-source.md._gmxs2BH.js b/assets/insight-labs_repo-insight_fetch-event-source.md.DAv6uGU5.js
similarity index 99%
rename from assets/insight-labs_repo-insight_fetch-event-source.md._gmxs2BH.js
rename to assets/insight-labs_repo-insight_fetch-event-source.md.DAv6uGU5.js
index b814961..5d2a696 100644
--- a/assets/insight-labs_repo-insight_fetch-event-source.md._gmxs2BH.js
+++ b/assets/insight-labs_repo-insight_fetch-event-source.md.DAv6uGU5.js
@@ -1,4 +1,4 @@
-import{_ as r,r as e,c as k,o as d,d as t,b as a,a as n,w as l,e as h}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const u=JSON.parse('{"title":"fetch-event-source 源码解读","description":"","frontmatter":{"date":"2026-04-10T14:43:09.000Z","title":"fetch-event-source 源码解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/fetch-event-source"},"headers":[],"relativePath":"insight-labs/repo-insight/fetch-event-source.md","filePath":"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md"}'),E={name:"insight-labs/repo-insight/fetch-event-source.md"};function c(g,s,b,y,F,A){const i=e("MermaidChart"),p=e("ClientOnly");return d(),k("div",null,[s[0]||(s[0]=t(`

fetch-event-source 源码解读

项目信息

  • 项目名称:@microsoft/fetch-event-source

  • 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。

  • 项目地址:https://github.com/Azure/fetch-event-source

第一部分: 业务价值篇

项目定位

@microsoft/fetch-event-source 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。

解决的核心痛点

原生浏览器的 EventSource API 存在以下限制:

限制说明
仅支持 GET 请求无法使用 POST、PUT 等其他 HTTP 方法
无法自定义请求头无法传递认证令牌、内容类型等自定义头部
无法发送请求体所有参数必须编码在 URL 中,受限于浏览器 URL 长度限制(通常 2000 字符)
重试策略不可控连接断开时浏览器自动重试但无法自定义重试逻辑
错误处理能力有限无法优雅处理 API 网关返回的错误响应

技术亮点

技术亮点说明
基于 Fetch API充分利用 Fetch API 的所有特性(自定义方法、头部、请求体等)
完全兼容 SSE 格式与标准 Event Stream 格式 100% 兼容
灵活的重试策略完全掌控连接断开时的重试逻辑
页面可见性集成自动在页面隐藏时断开连接、显示时重连,减少服务器负载
可替换的 fetch 实现支持注入自定义 fetch 函数
TypeScript 原生支持完整的类型定义

适用场景

场景说明
实时数据推送股票行情、实时新闻、即时消息
进度更新长时间运行任务的进度追踪
日志流实时日志查看和监控
协作应用多人协作时的实时状态同步
AI 应用大语言模型的流式响应输出

典型使用 Case

Case 1: 基础 SSE 连接

typescript
import { fetchEventSource } from '@microsoft/fetch-event-source';
+import{_ as r,r as e,c as k,o as d,d as t,b as a,a as n,w as l,e as h}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const u=JSON.parse('{"title":"fetch-event-source 源码解读","description":"","frontmatter":{"date":"2026-04-10T14:43:09.000Z","title":"fetch-event-source 源码解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/fetch-event-source"},"headers":[],"relativePath":"insight-labs/repo-insight/fetch-event-source.md","filePath":"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md"}'),E={name:"insight-labs/repo-insight/fetch-event-source.md"};function c(g,s,b,y,F,A){const i=e("MermaidChart"),p=e("ClientOnly");return d(),k("div",null,[s[0]||(s[0]=t(`

fetch-event-source 源码解读

项目信息

  • 项目名称:@microsoft/fetch-event-source

  • 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。

  • 项目地址:https://github.com/Azure/fetch-event-source

第一部分: 业务价值篇

项目定位

@microsoft/fetch-event-source 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。

解决的核心痛点

原生浏览器的 EventSource API 存在以下限制:

限制说明
仅支持 GET 请求无法使用 POST、PUT 等其他 HTTP 方法
无法自定义请求头无法传递认证令牌、内容类型等自定义头部
无法发送请求体所有参数必须编码在 URL 中,受限于浏览器 URL 长度限制(通常 2000 字符)
重试策略不可控连接断开时浏览器自动重试但无法自定义重试逻辑
错误处理能力有限无法优雅处理 API 网关返回的错误响应

技术亮点

技术亮点说明
基于 Fetch API充分利用 Fetch API 的所有特性(自定义方法、头部、请求体等)
完全兼容 SSE 格式与标准 Event Stream 格式 100% 兼容
灵活的重试策略完全掌控连接断开时的重试逻辑
页面可见性集成自动在页面隐藏时断开连接、显示时重连,减少服务器负载
可替换的 fetch 实现支持注入自定义 fetch 函数
TypeScript 原生支持完整的类型定义

适用场景

场景说明
实时数据推送股票行情、实时新闻、即时消息
进度更新长时间运行任务的进度追踪
日志流实时日志查看和监控
协作应用多人协作时的实时状态同步
AI 应用大语言模型的流式响应输出

典型使用 Case

Case 1: 基础 SSE 连接

typescript
import { fetchEventSource } from '@microsoft/fetch-event-source';
 
 await fetchEventSource('/api/sse', {
     onmessage(ev) {
diff --git a/assets/insight-labs_repo-insight_fetch-event-source.md._gmxs2BH.lean.js b/assets/insight-labs_repo-insight_fetch-event-source.md.DAv6uGU5.lean.js
similarity index 98%
rename from assets/insight-labs_repo-insight_fetch-event-source.md._gmxs2BH.lean.js
rename to assets/insight-labs_repo-insight_fetch-event-source.md.DAv6uGU5.lean.js
index b481a8f..4146f5a 100644
--- a/assets/insight-labs_repo-insight_fetch-event-source.md._gmxs2BH.lean.js
+++ b/assets/insight-labs_repo-insight_fetch-event-source.md.DAv6uGU5.lean.js
@@ -1 +1 @@
-import{_ as r,r as e,c as k,o as d,d as t,b as a,a as n,w as l,e as h}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const u=JSON.parse('{"title":"fetch-event-source 源码解读","description":"","frontmatter":{"date":"2026-04-10T14:43:09.000Z","title":"fetch-event-source 源码解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/fetch-event-source"},"headers":[],"relativePath":"insight-labs/repo-insight/fetch-event-source.md","filePath":"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md"}'),E={name:"insight-labs/repo-insight/fetch-event-source.md"};function c(g,s,b,y,F,A){const i=e("MermaidChart"),p=e("ClientOnly");return d(),k("div",null,[s[0]||(s[0]=t("",64)),a(p,null,{default:l(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20U%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20F%20as%20fetchEventSource%0A%20%20%20%20participant%20R%20as%20Response%0A%20%20%20%20participant%20B%20as%20getBytes%0A%20%20%20%20participant%20L%20as%20getLines%0A%20%20%20%20participant%20M%20as%20getMessages%0A%20%20%20%20participant%20C%20as%20%E7%94%A8%E6%88%B7%E5%9B%9E%E8%B0%83%0A%0A%20%20%20%20U-%3E%3EF%3A%20fetchEventSource(url%2C%20options)%0A%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20F-%3E%3ER%3A%20fetch(input%2C%20init)%0A%20%20%20%20R--%3E%3EF%3A%20Response%0A%20%20%20%20F-%3E%3EC%3A%20onopen(response)%0A%20%20%20%20C--%3E%3EF%3A%20void%0A%20%20%20%20F-%3E%3EB%3A%20getBytes(response.body%2C%20onChunk)%0A%20%20%20%20loop%20%E5%AD%97%E8%8A%82%E6%B5%81%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20B-%3E%3EB%3A%20reader.read()%0A%20%20%20%20%20%20%20%20B--%3E%3EL%3A%20onChunk(arr)%0A%20%20%20%20%20%20%20%20loop%20%E8%A1%8C%E8%A7%A3%E6%9E%90%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20L--%3E%3EM%3A%20onLine(line%2C%20fieldLength)%0A%20%20%20%20%20%20%20%20%20%20%20%20alt%20%E9%9D%9E%E7%A9%BA%E8%A1%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20M-%3E%3EM%3A%20%E8%A7%A3%E6%9E%90%E5%AD%97%E6%AE%B5%20(id%2Fevent%2Fdata%2Fretry)%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20%E7%A9%BA%E8%A1%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20M--%3E%3EC%3A%20onmessage(msg)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20M-%3E%3EM%3A%20%E5%88%9B%E5%BB%BA%E6%96%B0%E6%B6%88%E6%81%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A%20%20%20%20B--%3E%3EF%3A%20%E6%B5%81%E5%85%B3%E9%97%AD%0A%20%20%20%20F-%3E%3EC%3A%20onclose()%0A%20%20%20%20F-%3E%3EF%3A%20dispose()%0A%20%20%20%20F--%3E%3EU%3A%20resolve()%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=n("h4",{id:"重试流程",tabindex:"-1"},[h("重试流程 "),n("a",{class:"header-anchor",href:"#重试流程","aria-label":"Permalink to “重试流程”"},"​")],-1)),a(p,null,{default:l(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20U%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20F%20as%20fetchEventSource%0A%20%20%20%20participant%20R%20as%20Response%0A%20%20%20%20participant%20C%20as%20%E7%94%A8%E6%88%B7%E5%9B%9E%E8%B0%83%0A%0A%20%20%20%20U-%3E%3EF%3A%20fetchEventSource(...)%0A%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20F-%3E%3ER%3A%20fetch(...)%0A%0A%20%20%20%20alt%20%E8%AF%B7%E6%B1%82%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20R--%3E%3EF%3A%20Error%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onerror(err)%0A%20%20%20%20%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E9%87%8D%E8%AF%95%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E8%BF%94%E5%9B%9E%E9%87%8D%E8%AF%95%E9%97%B4%E9%9A%94%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20setTimeout(create%2C%20interval)%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20F%3A%20%E7%AD%89%E5%BE%85%E6%8C%87%E5%AE%9A%E6%97%B6%E9%97%B4%E5%90%8E%E9%87%8D%E8%AF%95%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3ER%3A%20fetch(...%2C%20Last-Event-ID%3A%20id)%0A%20%20%20%20%20%20%20%20else%20%E8%87%B4%E5%91%BD%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E6%8A%9B%E5%87%BA%E5%BC%82%E5%B8%B8%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20dispose()%0A%20%20%20%20%20%20%20%20%20%20%20%20F--%3E%3EU%3A%20reject(err)%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20else%20%E5%93%8D%E5%BA%94%E6%88%90%E5%8A%9F%E4%BD%86%E8%BF%9E%E6%8E%A5%E6%96%AD%E5%BC%80%0A%20%20%20%20%20%20%20%20R--%3E%3EF%3A%20Response%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onopen()%0A%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20%E8%A7%A3%E6%9E%90%E4%BA%8B%E4%BB%B6%E6%B5%81...%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onclose()%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onerror(undefined)%0A%20%20%20%20%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E9%87%8D%E8%AF%95%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E8%BF%94%E5%9B%9E%E9%87%8D%E8%AF%95%E9%97%B4%E9%9A%94%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20setTimeout(create%2C%20interval)%0A%20%20%20%20%20%20%20%20else%20%E5%81%9C%E6%AD%A2%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E6%8A%9B%E5%87%BA%E5%BC%82%E5%B8%B8%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20dispose()%0A%20%20%20%20%20%20%20%20%20%20%20%20F--%3E%3EU%3A%20reject()%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),s[2]||(s[2]=n("h4",{id:"页面可见性变化流程",tabindex:"-1"},[h("页面可见性变化流程 "),n("a",{class:"header-anchor",href:"#页面可见性变化流程","aria-label":"Permalink to “页面可见性变化流程”"},"​")],-1)),a(p,null,{default:l(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20D%20as%20Document%0A%20%20%20%20participant%20F%20as%20fetchEventSource%0A%20%20%20%20participant%20R%20as%20Request%0A%0A%20%20%20%20Note%20over%20F%3A%20openWhenHidden%20%3D%20false%20(%E9%BB%98%E8%AE%A4)%0A%20%20%20%20F-%3E%3ED%3A%20addEventListener('visibilitychange')%0A%0A%20%20%20%20D-%3E%3EF%3A%20visibilitychange%20(hidden)%0A%20%20%20%20F-%3E%3EF%3A%20curRequestController.abort()%0A%20%20%20%20F-%3E%3ER%3A%20%E5%8F%96%E6%B6%88%E8%AF%B7%E6%B1%82%0A%0A%20%20%20%20D-%3E%3EF%3A%20visibilitychange%20(visible)%0A%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20F-%3E%3ER%3A%20fetch(...%2C%20Last-Event-ID%3A%20id)%0A",showToolbar:"1"})]),_:1}),s[3]||(s[3]=t("",5))])}const m=r(E,[["render",c]]);export{u as __pageData,m as default};
+import{_ as r,r as e,c as k,o as d,d as t,b as a,a as n,w as l,e as h}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const u=JSON.parse('{"title":"fetch-event-source 源码解读","description":"","frontmatter":{"date":"2026-04-10T14:43:09.000Z","title":"fetch-event-source 源码解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/fetch-event-source"},"headers":[],"relativePath":"insight-labs/repo-insight/fetch-event-source.md","filePath":"31.Insight Labs/11.Reop Insight Reports/11.fetch-event-source 源码解读.md"}'),E={name:"insight-labs/repo-insight/fetch-event-source.md"};function c(g,s,b,y,F,A){const i=e("MermaidChart"),p=e("ClientOnly");return d(),k("div",null,[s[0]||(s[0]=t("",64)),a(p,null,{default:l(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20U%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20F%20as%20fetchEventSource%0A%20%20%20%20participant%20R%20as%20Response%0A%20%20%20%20participant%20B%20as%20getBytes%0A%20%20%20%20participant%20L%20as%20getLines%0A%20%20%20%20participant%20M%20as%20getMessages%0A%20%20%20%20participant%20C%20as%20%E7%94%A8%E6%88%B7%E5%9B%9E%E8%B0%83%0A%0A%20%20%20%20U-%3E%3EF%3A%20fetchEventSource(url%2C%20options)%0A%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20F-%3E%3ER%3A%20fetch(input%2C%20init)%0A%20%20%20%20R--%3E%3EF%3A%20Response%0A%20%20%20%20F-%3E%3EC%3A%20onopen(response)%0A%20%20%20%20C--%3E%3EF%3A%20void%0A%20%20%20%20F-%3E%3EB%3A%20getBytes(response.body%2C%20onChunk)%0A%20%20%20%20loop%20%E5%AD%97%E8%8A%82%E6%B5%81%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20B-%3E%3EB%3A%20reader.read()%0A%20%20%20%20%20%20%20%20B--%3E%3EL%3A%20onChunk(arr)%0A%20%20%20%20%20%20%20%20loop%20%E8%A1%8C%E8%A7%A3%E6%9E%90%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20L--%3E%3EM%3A%20onLine(line%2C%20fieldLength)%0A%20%20%20%20%20%20%20%20%20%20%20%20alt%20%E9%9D%9E%E7%A9%BA%E8%A1%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20M-%3E%3EM%3A%20%E8%A7%A3%E6%9E%90%E5%AD%97%E6%AE%B5%20(id%2Fevent%2Fdata%2Fretry)%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20%E7%A9%BA%E8%A1%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20M--%3E%3EC%3A%20onmessage(msg)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20M-%3E%3EM%3A%20%E5%88%9B%E5%BB%BA%E6%96%B0%E6%B6%88%E6%81%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A%20%20%20%20B--%3E%3EF%3A%20%E6%B5%81%E5%85%B3%E9%97%AD%0A%20%20%20%20F-%3E%3EC%3A%20onclose()%0A%20%20%20%20F-%3E%3EF%3A%20dispose()%0A%20%20%20%20F--%3E%3EU%3A%20resolve()%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=n("h4",{id:"重试流程",tabindex:"-1"},[h("重试流程 "),n("a",{class:"header-anchor",href:"#重试流程","aria-label":"Permalink to “重试流程”"},"​")],-1)),a(p,null,{default:l(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20U%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20F%20as%20fetchEventSource%0A%20%20%20%20participant%20R%20as%20Response%0A%20%20%20%20participant%20C%20as%20%E7%94%A8%E6%88%B7%E5%9B%9E%E8%B0%83%0A%0A%20%20%20%20U-%3E%3EF%3A%20fetchEventSource(...)%0A%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20F-%3E%3ER%3A%20fetch(...)%0A%0A%20%20%20%20alt%20%E8%AF%B7%E6%B1%82%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20R--%3E%3EF%3A%20Error%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onerror(err)%0A%20%20%20%20%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E9%87%8D%E8%AF%95%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E8%BF%94%E5%9B%9E%E9%87%8D%E8%AF%95%E9%97%B4%E9%9A%94%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20setTimeout(create%2C%20interval)%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20F%3A%20%E7%AD%89%E5%BE%85%E6%8C%87%E5%AE%9A%E6%97%B6%E9%97%B4%E5%90%8E%E9%87%8D%E8%AF%95%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3ER%3A%20fetch(...%2C%20Last-Event-ID%3A%20id)%0A%20%20%20%20%20%20%20%20else%20%E8%87%B4%E5%91%BD%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E6%8A%9B%E5%87%BA%E5%BC%82%E5%B8%B8%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20dispose()%0A%20%20%20%20%20%20%20%20%20%20%20%20F--%3E%3EU%3A%20reject(err)%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20else%20%E5%93%8D%E5%BA%94%E6%88%90%E5%8A%9F%E4%BD%86%E8%BF%9E%E6%8E%A5%E6%96%AD%E5%BC%80%0A%20%20%20%20%20%20%20%20R--%3E%3EF%3A%20Response%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onopen()%0A%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20%E8%A7%A3%E6%9E%90%E4%BA%8B%E4%BB%B6%E6%B5%81...%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onclose()%0A%20%20%20%20%20%20%20%20F-%3E%3EC%3A%20onerror(undefined)%0A%20%20%20%20%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E9%87%8D%E8%AF%95%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E8%BF%94%E5%9B%9E%E9%87%8D%E8%AF%95%E9%97%B4%E9%9A%94%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20setTimeout(create%2C%20interval)%0A%20%20%20%20%20%20%20%20else%20%E5%81%9C%E6%AD%A2%0A%20%20%20%20%20%20%20%20%20%20%20%20C--%3E%3EF%3A%20%E6%8A%9B%E5%87%BA%E5%BC%82%E5%B8%B8%0A%20%20%20%20%20%20%20%20%20%20%20%20F-%3E%3EF%3A%20dispose()%0A%20%20%20%20%20%20%20%20%20%20%20%20F--%3E%3EU%3A%20reject()%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),s[2]||(s[2]=n("h4",{id:"页面可见性变化流程",tabindex:"-1"},[h("页面可见性变化流程 "),n("a",{class:"header-anchor",href:"#页面可见性变化流程","aria-label":"Permalink to “页面可见性变化流程”"},"​")],-1)),a(p,null,{default:l(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20D%20as%20Document%0A%20%20%20%20participant%20F%20as%20fetchEventSource%0A%20%20%20%20participant%20R%20as%20Request%0A%0A%20%20%20%20Note%20over%20F%3A%20openWhenHidden%20%3D%20false%20(%E9%BB%98%E8%AE%A4)%0A%20%20%20%20F-%3E%3ED%3A%20addEventListener('visibilitychange')%0A%0A%20%20%20%20D-%3E%3EF%3A%20visibilitychange%20(hidden)%0A%20%20%20%20F-%3E%3EF%3A%20curRequestController.abort()%0A%20%20%20%20F-%3E%3ER%3A%20%E5%8F%96%E6%B6%88%E8%AF%B7%E6%B1%82%0A%0A%20%20%20%20D-%3E%3EF%3A%20visibilitychange%20(visible)%0A%20%20%20%20F-%3E%3EF%3A%20create()%0A%20%20%20%20F-%3E%3ER%3A%20fetch(...%2C%20Last-Event-ID%3A%20id)%0A",showToolbar:"1"})]),_:1}),s[3]||(s[3]=t("",5))])}const m=r(E,[["render",c]]);export{u as __pageData,m as default};
diff --git a/assets/insight-labs_repo-insight_konva.md.hYUpqOCZ.js b/assets/insight-labs_repo-insight_konva.md.j78KHmOK.js
similarity index 99%
rename from assets/insight-labs_repo-insight_konva.md.hYUpqOCZ.js
rename to assets/insight-labs_repo-insight_konva.md.j78KHmOK.js
index e54d71c..2079552 100644
--- a/assets/insight-labs_repo-insight_konva.md.hYUpqOCZ.js
+++ b/assets/insight-labs_repo-insight_konva.md.j78KHmOK.js
@@ -1,4 +1,4 @@
-import{_ as k,r as t,c as r,o as d,d as h,b as i,a as s,w as e,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"konva 开源项目解读","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"konva 开源项目解读","tldr":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","abstract":null,"permalink":"/insight-labs/repo-insight/konva","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/konva.md","filePath":"31.Insight Labs/11.Reop Insight Reports/02.konva.md"}'),E={name:"insight-labs/repo-insight/konva.md"};function g(c,a,b,F,y,o){const p=t("MermaidChart"),l=t("ClientOnly");return d(),r("div",null,[a[0]||(a[0]=h(`

konva 开源项目解读

项目信息

  • 项目名称:Konva

  • 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。

  • 项目地址:https://github.com/konvajs/konva

  • 官方文档:

  • 解决的核心痛点

    • Canvas API 的底层复杂性: 原生 Canvas API 是无状态的"立即模式",Konva 提供"保留模式"的树形节点抽象
    • 高性能互动图形的工程化需求: 内置图层批量渲染、离屏 Hit Canvas 命中检测、节点变换与嵌套
    • 跨平台 2D 图形一致性: 通过抽象渲染后端(canvas-backend / skia-backend),浏览器和 Node.js 共用同一套 API
  • 核心亮点

    • 保留模式图形树: Stage → Layer → Group → Shape 树形结构,类 DOM 操作体验;
    • 像素级命中检测: 颜色编码 HitCanvas,GPU 加速,O(1) 查找;
    • 图层系统: 每个 Layer 独立 Canvas,支持批量渲染和图层级性能优化;
    • 滤镜管道: 20 种内置滤镜,支持 CSS filter 和 JS 滤镜函数双模式;
    • 变换系统: 综合位置/旋转/缩放/倾斜/偏移的仿射变换矩阵;
    • 动画引擎: RAF 循环 + 补间动画(Tween),支持 yoyo/play/pause/reverse;
    • Tree-shaking: 支持 Core(~26KB)和 Full 两种导入方式;
    • 跨平台: 浏览器 + Node.js(canvas/skia 双后端);

1. 项目概览

1.1 项目定位与核心价值

一句话定位:Konva 是一个面向前端开发者的高性能 HTML5 Canvas 2D 图形框架,通过树形节点结构提供对 Canvas 元素的高级抽象,使得在 Web 上构建交互式图形、编辑器和图表变得简单高效。

核心痛点解决

  1. Canvas API 的底层复杂性 — 原生 Canvas API 是无状态的"立即模式",Konva 提供"保留模式"的树形节点抽象
  2. 高性能互动图形的工程化需求 — 内置图层批量渲染、离屏 Hit Canvas 命中检测、节点变换与嵌套
  3. 跨平台 2D 图形一致性 — 通过抽象渲染后端(canvas-backend / skia-backend),浏览器和 Node.js 共用同一套 API

1.2 目标用户与使用场景

  • 前端 Web 开发者 — 图形编辑器、画布应用、数据可视化图表
  • 图形编辑器/设计工具开发者 — Polotno 等设计编辑器 SDK 基于 Konva 构建
  • 游戏开发者 — 2D 精灵、动画和交互的轻量级方案
  • Node.js 开发者 — 服务端渲染 Canvas 图像(缩略图生成、PDF/图片合成)

1.3 核心技术亮点

特性说明
保留模式图形树Stage → Layer → Group → Shape 树形结构,类 DOM 操作体验
像素级命中检测颜色编码 HitCanvas,GPU 加速,O(1) 查找
图层系统每个 Layer 独立 Canvas,支持批量渲染和图层级性能优化
滤镜管道20 种内置滤镜,支持 CSS filter 和 JS 滤镜函数双模式
变换系统综合位置/旋转/缩放/倾斜/偏移的仿射变换矩阵
动画引擎RAF 循环 + 补间动画(Tween),支持 yoyo/play/pause/reverse
Tree-shaking支持 Core(~26KB)和 Full 两种导入方式
跨平台浏览器 + Node.js(canvas/skia 双后端)

1.4 技术栈与选型对比

决策点选择替代方案权衡
渲染范式保留模式(Retained Mode)立即模式(Immediate Mode)牺牲了一定底层灵活性,换取了声明式 API 和自动重绘管理
命中检测颜色编码 HitCanvas几何碰撞计算像素级精度 + GPU 加速,但需要额外 Canvas 和内存开销
属性管理Factory 元编程手动属性声明极大减少样板代码,但 IDE 智能提示依赖类型导出
包设计Core/Full 分包单一打包支持按需加载和 Tree-shaking,但增加了构建配置复杂度
Node.js 后端canvas + skia 双后端单一后端提供兼容性(canvas/Cairo)和性能(skia/Chrome 引擎)两种选择

2. 整体架构设计

2.1 架构概述

Konva 采用分层图形树架构(Layered Scene Graph Architecture),核心设计理念是"保留模式"(Retained Mode)——所有图形对象以树形节点组织,每个节点独立维护自身属性状态,渲染引擎遍历树进行绘制。

系统分为四个层次:

  • 用户接口层:Konva 全局对象,提供创建 Stage/Shape/Animation/Tween 的入口
  • 图形树管理层:Stage -> Layer -> Group -> Shape 的四层节点树
  • 渲染引擎层:Canvas双缓冲(SceneCanvas + HitCanvas)、Context 包装、滤镜管线
  • 事件与交互层:指针事件系统、拖拽引擎、命中检测

整体架构图

text
+=======================================================================+
+import{_ as k,r as t,c as r,o as d,d as h,b as i,a as s,w as e,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"konva 开源项目解读","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"konva 开源项目解读","tldr":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","abstract":null,"permalink":"/insight-labs/repo-insight/konva","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/konva.md","filePath":"31.Insight Labs/11.Reop Insight Reports/02.konva.md"}'),E={name:"insight-labs/repo-insight/konva.md"};function g(c,a,b,F,y,o){const p=t("MermaidChart"),l=t("ClientOnly");return d(),r("div",null,[a[0]||(a[0]=h(`

konva 开源项目解读

项目信息

  • 项目名称:Konva

  • 项目描述:Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。

  • 项目地址:https://github.com/konvajs/konva

  • 官方文档:

  • 解决的核心痛点

    • Canvas API 的底层复杂性: 原生 Canvas API 是无状态的"立即模式",Konva 提供"保留模式"的树形节点抽象
    • 高性能互动图形的工程化需求: 内置图层批量渲染、离屏 Hit Canvas 命中检测、节点变换与嵌套
    • 跨平台 2D 图形一致性: 通过抽象渲染后端(canvas-backend / skia-backend),浏览器和 Node.js 共用同一套 API
  • 核心亮点

    • 保留模式图形树: Stage → Layer → Group → Shape 树形结构,类 DOM 操作体验;
    • 像素级命中检测: 颜色编码 HitCanvas,GPU 加速,O(1) 查找;
    • 图层系统: 每个 Layer 独立 Canvas,支持批量渲染和图层级性能优化;
    • 滤镜管道: 20 种内置滤镜,支持 CSS filter 和 JS 滤镜函数双模式;
    • 变换系统: 综合位置/旋转/缩放/倾斜/偏移的仿射变换矩阵;
    • 动画引擎: RAF 循环 + 补间动画(Tween),支持 yoyo/play/pause/reverse;
    • Tree-shaking: 支持 Core(~26KB)和 Full 两种导入方式;
    • 跨平台: 浏览器 + Node.js(canvas/skia 双后端);

1. 项目概览

1.1 项目定位与核心价值

一句话定位:Konva 是一个面向前端开发者的高性能 HTML5 Canvas 2D 图形框架,通过树形节点结构提供对 Canvas 元素的高级抽象,使得在 Web 上构建交互式图形、编辑器和图表变得简单高效。

核心痛点解决

  1. Canvas API 的底层复杂性 — 原生 Canvas API 是无状态的"立即模式",Konva 提供"保留模式"的树形节点抽象
  2. 高性能互动图形的工程化需求 — 内置图层批量渲染、离屏 Hit Canvas 命中检测、节点变换与嵌套
  3. 跨平台 2D 图形一致性 — 通过抽象渲染后端(canvas-backend / skia-backend),浏览器和 Node.js 共用同一套 API

1.2 目标用户与使用场景

  • 前端 Web 开发者 — 图形编辑器、画布应用、数据可视化图表
  • 图形编辑器/设计工具开发者 — Polotno 等设计编辑器 SDK 基于 Konva 构建
  • 游戏开发者 — 2D 精灵、动画和交互的轻量级方案
  • Node.js 开发者 — 服务端渲染 Canvas 图像(缩略图生成、PDF/图片合成)

1.3 核心技术亮点

特性说明
保留模式图形树Stage → Layer → Group → Shape 树形结构,类 DOM 操作体验
像素级命中检测颜色编码 HitCanvas,GPU 加速,O(1) 查找
图层系统每个 Layer 独立 Canvas,支持批量渲染和图层级性能优化
滤镜管道20 种内置滤镜,支持 CSS filter 和 JS 滤镜函数双模式
变换系统综合位置/旋转/缩放/倾斜/偏移的仿射变换矩阵
动画引擎RAF 循环 + 补间动画(Tween),支持 yoyo/play/pause/reverse
Tree-shaking支持 Core(~26KB)和 Full 两种导入方式
跨平台浏览器 + Node.js(canvas/skia 双后端)

1.4 技术栈与选型对比

决策点选择替代方案权衡
渲染范式保留模式(Retained Mode)立即模式(Immediate Mode)牺牲了一定底层灵活性,换取了声明式 API 和自动重绘管理
命中检测颜色编码 HitCanvas几何碰撞计算像素级精度 + GPU 加速,但需要额外 Canvas 和内存开销
属性管理Factory 元编程手动属性声明极大减少样板代码,但 IDE 智能提示依赖类型导出
包设计Core/Full 分包单一打包支持按需加载和 Tree-shaking,但增加了构建配置复杂度
Node.js 后端canvas + skia 双后端单一后端提供兼容性(canvas/Cairo)和性能(skia/Chrome 引擎)两种选择

2. 整体架构设计

2.1 架构概述

Konva 采用分层图形树架构(Layered Scene Graph Architecture),核心设计理念是"保留模式"(Retained Mode)——所有图形对象以树形节点组织,每个节点独立维护自身属性状态,渲染引擎遍历树进行绘制。

系统分为四个层次:

  • 用户接口层:Konva 全局对象,提供创建 Stage/Shape/Animation/Tween 的入口
  • 图形树管理层:Stage -> Layer -> Group -> Shape 的四层节点树
  • 渲染引擎层:Canvas双缓冲(SceneCanvas + HitCanvas)、Context 包装、滤镜管线
  • 事件与交互层:指针事件系统、拖拽引擎、命中检测

整体架构图

text
+=======================================================================+
 |                        Konva 全局对象 (Namespace)                      |
 |  [Stage] [Layer] [Shape] [Tween] [Animation] [Filters] [Easings]      |
 +=====================================+=================================+
diff --git a/assets/insight-labs_repo-insight_konva.md.hYUpqOCZ.lean.js b/assets/insight-labs_repo-insight_konva.md.j78KHmOK.lean.js
similarity index 99%
rename from assets/insight-labs_repo-insight_konva.md.hYUpqOCZ.lean.js
rename to assets/insight-labs_repo-insight_konva.md.j78KHmOK.lean.js
index cbb2bf2..769882a 100644
--- a/assets/insight-labs_repo-insight_konva.md.hYUpqOCZ.lean.js
+++ b/assets/insight-labs_repo-insight_konva.md.j78KHmOK.lean.js
@@ -1 +1 @@
-import{_ as k,r as t,c as r,o as d,d as h,b as i,a as s,w as e,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"konva 开源项目解读","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"konva 开源项目解读","tldr":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","abstract":null,"permalink":"/insight-labs/repo-insight/konva","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/konva.md","filePath":"31.Insight Labs/11.Reop Insight Reports/02.konva.md"}'),E={name:"insight-labs/repo-insight/konva.md"};function g(c,a,b,F,y,o){const p=t("MermaidChart"),l=t("ClientOnly");return d(),r("div",null,[a[0]||(a[0]=h("",50)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20DOM%20as%20DOM%20Canvas%0A%20%20%20%20participant%20Stage%20as%20Stage%0A%20%20%20%20participant%20PE%20as%20PointerEvents%0A%20%20%20%20participant%20HC%20as%20HitCanvas%0A%20%20%20%20participant%20Shape%20as%20Shape(%E7%9B%AE%E6%A0%87)%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20native%20pointerdown%20event%0A%20%20%20%20activate%20Stage%0A%20%20%20%20Stage-%3E%3EStage%3A%20_pointerdown(e)%0A%20%20%20%20Stage-%3E%3EPE%3A%20createEvent(evt)%0A%20%20%20%20activate%20PE%0A%20%20%20%20PE-%3E%3EPE%3A%20%E8%AE%A1%E7%AE%97%E7%9B%B8%E5%AF%B9%E5%9D%90%E6%A0%87%0A%20%20%20%20PE-%3E%3EPE%3A%20%E6%9E%84%E5%BB%BA%20Event%20%E5%AF%B9%E8%B1%A1%0A%20%20%20%20PE--%3E%3EStage%3A%20KonvaEventObject%0A%20%20%20%20deactivate%20PE%0A%20%20%20%20Stage-%3E%3EStage%3A%20_setPointerPosition(evt)%0A%20%20%20%20Stage-%3E%3EHC%3A%20getIntersection(point)%0A%20%20%20%20activate%20HC%0A%20%20%20%20HC-%3E%3EHC%3A%20context.getImageData(x%2C%20y%2C%201%2C%201)%0A%20%20%20%20HC-%3E%3EHC%3A%20%E5%83%8F%E7%B4%A0%E9%A2%9C%E8%89%B2%20-%3E%20%E6%9F%A5%E6%89%BE%20shapes%20map%0A%20%20%20%20HC--%3E%3EStage%3A%20targetShape%0A%20%20%20%20deactivate%20HC%0A%20%20%20%20Stage-%3E%3EShape%3A%20targetShape.fire('pointerdown'%2C%20evt)%0A%20%20%20%20activate%20Shape%0A%20%20%20%20Shape-%3E%3EShape%3A%20%E6%89%A7%E8%A1%8C%E6%B3%A8%E5%86%8C%E7%9A%84%E7%9B%91%E5%90%AC%E5%99%A8%0A%20%20%20%20Shape-%3E%3EUser%3A%20handler(evt)%20%2F%2F%20%E7%94%A8%E6%88%B7%E5%9B%9E%E8%B0%83%0A%20%20%20%20Shape-%3E%3EShape%3A%20%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%20(fire%20to%20parent%20Container)%0A%20%20%20%20Shape--%3E%3EStage%3A%20bubbling%20complete%0A%20%20%20%20deactivate%20Shape%0A%20%20%20%20deactivate%20Stage%0A",showToolbar:"1"})]),_:1}),a[1]||(a[1]=s("h3",{id:"场景二-形状属性变更到屏幕渲染的完整流程",tabindex:"-1"},[n("场景二:形状属性变更到屏幕渲染的完整流程 "),s("a",{class:"header-anchor",href:"#场景二-形状属性变更到屏幕渲染的完整流程","aria-label":"Permalink to “场景二:形状属性变更到屏幕渲染的完整流程”"},"​")],-1)),a[2]||(a[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户调用 "),s("code",null,"rect.x(200)"),n(" 修改属性,到最终屏幕更新(包括脏标记、自动绘制)的完整链路。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Node%20as%20Node%0A%20%20%20%20participant%20Layer%20as%20Layer%0A%20%20%20%20participant%20Shape%20as%20Shape%0A%20%20%20%20participant%20CC%20as%20SceneCanvas%0A%20%20%20%20participant%20DOM%20as%20DOM%20Canvas%0A%0A%20%20%20%20User-%3E%3ENode%3A%20rect.x(200)%0A%20%20%20%20activate%20Node%0A%20%20%20%20Node-%3E%3ENode%3A%20Factory%20setter%20%E6%89%A7%E8%A1%8C%0A%20%20%20%20Node-%3E%3ENode%3A%20validator(200)%20%2F%2F%20%E6%A0%A1%E9%AA%8C%0A%20%20%20%20Node-%3E%3ENode%3A%20_attrs.x%20%3D%20200%20%2F%2F%20%E5%AD%98%E5%82%A8%0A%20%20%20%20Node-%3E%3ENode%3A%20onChange%20callback%20%2F%2F%20%E6%A0%87%E8%AE%B0%E8%84%8F%0A%20%20%20%20Note%20over%20Node%3A%20batchDraw%20%E8%B0%83%E5%BA%A6%20(requestDraw)%0A%20%20%20%20Node--%3E%3EUser%3A%20rect%20(%E8%BF%94%E5%9B%9E%20this%20%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8)%0A%20%20%20%20deactivate%20Node%0A%0A%20%20%20%20Note%20over%20Layer%3A%20%E5%BE%AE%E4%BB%BB%E5%8A%A1%2FrequestAnimationFrame%20%E8%A7%A6%E5%8F%91%0A%0A%20%20%20%20Layer-%3E%3ELayer%3A%20batchDraw()%0A%20%20%20%20activate%20Layer%0A%20%20%20%20Layer-%3E%3ELayer%3A%20%E6%B8%85%E9%99%A4%20SceneCanvas%0A%0A%20%20%20%20loop%20%E9%81%8D%E5%8E%86%20children%0A%20%20%20%20%20%20%20%20Layer-%3E%3EShape%3A%20shape.draw()%0A%20%20%20%20%20%20%20%20activate%20Shape%0A%20%20%20%20%20%20%20%20Shape-%3E%3EShape%3A%20getTransform()%20%2F%2F%20%E8%AE%A1%E7%AE%97%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5%0A%20%20%20%20%20%20%20%20Shape-%3E%3ECC%3A%20context.save()%0A%20%20%20%20%20%20%20%20Shape-%3E%3ECC%3A%20context.transform(m)%0A%20%20%20%20%20%20%20%20Shape-%3E%3EShape%3A%20sceneFunc(context)%0A%20%20%20%20%20%20%20%20Note%20over%20Shape%3A%20_sceneFunc%3A%20%E7%BB%98%E5%88%B6%E5%87%A0%E4%BD%95%E5%9B%BE%E5%BD%A2%0A%20%20%20%20%20%20%20%20Shape-%3E%3EShape%3A%20fillStrokeScene(context)%0A%20%20%20%20%20%20%20%20Note%20over%20Shape%3A%20%E5%A1%AB%E5%85%85%20%2B%20%E6%8F%8F%E8%BE%B9%20%2B%20%E9%98%B4%E5%BD%B1%0A%20%20%20%20%20%20%20%20Shape-%3E%3ECC%3A%20context.restore()%0A%20%20%20%20%20%20%20%20deactivate%20Shape%0A%20%20%20%20end%0A%0A%20%20%20%20Layer-%3E%3ELayer%3A%20Layer%20%E5%86%85%E5%AE%8C%E6%88%90%E6%89%80%E6%9C%89%E7%BB%98%E5%88%B6%0A%20%20%20%20deactivate%20Layer%0A%20%20%20%20Note%20over%20DOM%3A%20Canvas%20%E5%83%8F%E7%B4%A0%E5%B7%B2%E6%9B%B4%E6%96%B0%EF%BC%8C%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%8A%A8%E5%90%88%E6%88%90%E6%98%BE%E7%A4%BA%0A",showToolbar:"1"})]),_:1}),a[3]||(a[3]=s("h3",{id:"场景三-拖拽操作的完整事件链",tabindex:"-1"},[n("场景三:拖拽操作的完整事件链 "),s("a",{class:"header-anchor",href:"#场景三-拖拽操作的完整事件链","aria-label":"Permalink to “场景三:拖拽操作的完整事件链”"},"​")],-1)),a[4]||(a[4]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户拖拽一个形状从起点移动到终点。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20DOM%20as%20DOM%20Canvas%0A%20%20%20%20participant%20Stage%20as%20Stage%0A%20%20%20%20participant%20DD%20as%20DragAndDrop%0A%20%20%20%20participant%20Node%20as%20Node(%E8%A2%AB%E6%8B%96%E6%8B%BD)%0A%20%20%20%20participant%20Layer%20as%20Layer%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20pointerdown%0A%20%20%20%20Stage-%3E%3EStage%3A%20getIntersection()%20-%3E%20%E5%91%BD%E4%B8%AD%20Node%0A%20%20%20%20Stage-%3E%3EDD%3A%20DD._pointerdown(evt%2C%20node)%0A%20%20%20%20activate%20DD%0A%20%20%20%20DD-%3E%3EDD%3A%20%E8%AE%B0%E5%BD%95%E8%B5%B7%E5%A7%8B%E4%BD%8D%E7%BD%AE%20(startPointerPos)%0A%20%20%20%20DD-%3E%3EDD%3A%20_justDragged%20%3D%20false%0A%20%20%20%20DD-%3E%3EDD%3A%20listening%20for%20move%2Fup%20on%20window%0A%20%20%20%20deactivate%20DD%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20pointermove%20(%E8%BF%9E%E7%BB%AD%E8%A7%A6%E5%8F%91)%0A%20%20%20%20Stage-%3E%3EDD%3A%20DD._pointermove(evt)%0A%20%20%20%20activate%20DD%0A%20%20%20%20DD-%3E%3EDD%3A%20%E8%AE%A1%E7%AE%97%E5%81%8F%E7%A7%BB%E9%87%8F%0A%20%20%20%20alt%20%E8%B6%85%E8%BF%87%E6%8B%96%E6%8B%BD%E9%98%88%E5%80%BC%0A%20%20%20%20%20%20%20%20DD-%3E%3EDD%3A%20_justDragged%20%3D%20true%0A%20%20%20%20%20%20%20%20DD-%3E%3ENode%3A%20node._setDragPosition(offset)%0A%20%20%20%20%20%20%20%20Node-%3E%3ENode%3A%20node.x()%20%2F%20node.y()%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20%20%20%20%20Note%20over%20Node%3A%20%E5%A6%82%E6%9E%9C%20dragBoundFunc%20%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%BA%94%E7%94%A8%E8%BE%B9%E7%95%8C%E7%BA%A6%E6%9D%9F%0A%20%20%20%20%20%20%20%20DD-%3E%3ELayer%3A%20layer.batchDraw()%0A%20%20%20%20%20%20%20%20Layer-%3E%3ELayer%3A%20%E9%87%8D%E7%BB%98%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%0A%20%20%20%20end%0A%20%20%20%20deactivate%20DD%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20pointerup%0A%20%20%20%20Stage-%3E%3EDD%3A%20DD._pointerup(evt)%0A%20%20%20%20activate%20DD%0A%20%20%20%20alt%20_justDragged%0A%20%20%20%20%20%20%20%20DD-%3E%3ENode%3A%20node.fire('dragend'%2C%20evt)%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20DD-%3E%3ENode%3A%20node.fire('click'%2C%20evt)%20%2F%2F%20%E6%9C%AA%E6%8B%96%E5%8A%A8%EF%BC%8C%E8%A7%A6%E5%8F%91%E7%82%B9%E5%87%BB%0A%20%20%20%20end%0A%20%20%20%20DD-%3E%3EDD%3A%20%E5%81%9C%E6%AD%A2%20window%20%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%0A%20%20%20%20deactivate%20DD%0A",showToolbar:"1"})]),_:1}),a[5]||(a[5]=h("",12))])}const A=k(E,[["render",g]]);export{m as __pageData,A as default};
+import{_ as k,r as t,c as r,o as d,d as h,b as i,a as s,w as e,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"konva 开源项目解读","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"konva 开源项目解读","tldr":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","description":"Konva 是一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。","abstract":null,"permalink":"/insight-labs/repo-insight/konva","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/konva.md","filePath":"31.Insight Labs/11.Reop Insight Reports/02.konva.md"}'),E={name:"insight-labs/repo-insight/konva.md"};function g(c,a,b,F,y,o){const p=t("MermaidChart"),l=t("ClientOnly");return d(),r("div",null,[a[0]||(a[0]=h("",50)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20DOM%20as%20DOM%20Canvas%0A%20%20%20%20participant%20Stage%20as%20Stage%0A%20%20%20%20participant%20PE%20as%20PointerEvents%0A%20%20%20%20participant%20HC%20as%20HitCanvas%0A%20%20%20%20participant%20Shape%20as%20Shape(%E7%9B%AE%E6%A0%87)%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20native%20pointerdown%20event%0A%20%20%20%20activate%20Stage%0A%20%20%20%20Stage-%3E%3EStage%3A%20_pointerdown(e)%0A%20%20%20%20Stage-%3E%3EPE%3A%20createEvent(evt)%0A%20%20%20%20activate%20PE%0A%20%20%20%20PE-%3E%3EPE%3A%20%E8%AE%A1%E7%AE%97%E7%9B%B8%E5%AF%B9%E5%9D%90%E6%A0%87%0A%20%20%20%20PE-%3E%3EPE%3A%20%E6%9E%84%E5%BB%BA%20Event%20%E5%AF%B9%E8%B1%A1%0A%20%20%20%20PE--%3E%3EStage%3A%20KonvaEventObject%0A%20%20%20%20deactivate%20PE%0A%20%20%20%20Stage-%3E%3EStage%3A%20_setPointerPosition(evt)%0A%20%20%20%20Stage-%3E%3EHC%3A%20getIntersection(point)%0A%20%20%20%20activate%20HC%0A%20%20%20%20HC-%3E%3EHC%3A%20context.getImageData(x%2C%20y%2C%201%2C%201)%0A%20%20%20%20HC-%3E%3EHC%3A%20%E5%83%8F%E7%B4%A0%E9%A2%9C%E8%89%B2%20-%3E%20%E6%9F%A5%E6%89%BE%20shapes%20map%0A%20%20%20%20HC--%3E%3EStage%3A%20targetShape%0A%20%20%20%20deactivate%20HC%0A%20%20%20%20Stage-%3E%3EShape%3A%20targetShape.fire('pointerdown'%2C%20evt)%0A%20%20%20%20activate%20Shape%0A%20%20%20%20Shape-%3E%3EShape%3A%20%E6%89%A7%E8%A1%8C%E6%B3%A8%E5%86%8C%E7%9A%84%E7%9B%91%E5%90%AC%E5%99%A8%0A%20%20%20%20Shape-%3E%3EUser%3A%20handler(evt)%20%2F%2F%20%E7%94%A8%E6%88%B7%E5%9B%9E%E8%B0%83%0A%20%20%20%20Shape-%3E%3EShape%3A%20%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%20(fire%20to%20parent%20Container)%0A%20%20%20%20Shape--%3E%3EStage%3A%20bubbling%20complete%0A%20%20%20%20deactivate%20Shape%0A%20%20%20%20deactivate%20Stage%0A",showToolbar:"1"})]),_:1}),a[1]||(a[1]=s("h3",{id:"场景二-形状属性变更到屏幕渲染的完整流程",tabindex:"-1"},[n("场景二:形状属性变更到屏幕渲染的完整流程 "),s("a",{class:"header-anchor",href:"#场景二-形状属性变更到屏幕渲染的完整流程","aria-label":"Permalink to “场景二:形状属性变更到屏幕渲染的完整流程”"},"​")],-1)),a[2]||(a[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户调用 "),s("code",null,"rect.x(200)"),n(" 修改属性,到最终屏幕更新(包括脏标记、自动绘制)的完整链路。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Node%20as%20Node%0A%20%20%20%20participant%20Layer%20as%20Layer%0A%20%20%20%20participant%20Shape%20as%20Shape%0A%20%20%20%20participant%20CC%20as%20SceneCanvas%0A%20%20%20%20participant%20DOM%20as%20DOM%20Canvas%0A%0A%20%20%20%20User-%3E%3ENode%3A%20rect.x(200)%0A%20%20%20%20activate%20Node%0A%20%20%20%20Node-%3E%3ENode%3A%20Factory%20setter%20%E6%89%A7%E8%A1%8C%0A%20%20%20%20Node-%3E%3ENode%3A%20validator(200)%20%2F%2F%20%E6%A0%A1%E9%AA%8C%0A%20%20%20%20Node-%3E%3ENode%3A%20_attrs.x%20%3D%20200%20%2F%2F%20%E5%AD%98%E5%82%A8%0A%20%20%20%20Node-%3E%3ENode%3A%20onChange%20callback%20%2F%2F%20%E6%A0%87%E8%AE%B0%E8%84%8F%0A%20%20%20%20Note%20over%20Node%3A%20batchDraw%20%E8%B0%83%E5%BA%A6%20(requestDraw)%0A%20%20%20%20Node--%3E%3EUser%3A%20rect%20(%E8%BF%94%E5%9B%9E%20this%20%E9%93%BE%E5%BC%8F%E8%B0%83%E7%94%A8)%0A%20%20%20%20deactivate%20Node%0A%0A%20%20%20%20Note%20over%20Layer%3A%20%E5%BE%AE%E4%BB%BB%E5%8A%A1%2FrequestAnimationFrame%20%E8%A7%A6%E5%8F%91%0A%0A%20%20%20%20Layer-%3E%3ELayer%3A%20batchDraw()%0A%20%20%20%20activate%20Layer%0A%20%20%20%20Layer-%3E%3ELayer%3A%20%E6%B8%85%E9%99%A4%20SceneCanvas%0A%0A%20%20%20%20loop%20%E9%81%8D%E5%8E%86%20children%0A%20%20%20%20%20%20%20%20Layer-%3E%3EShape%3A%20shape.draw()%0A%20%20%20%20%20%20%20%20activate%20Shape%0A%20%20%20%20%20%20%20%20Shape-%3E%3EShape%3A%20getTransform()%20%2F%2F%20%E8%AE%A1%E7%AE%97%E5%8F%98%E6%8D%A2%E7%9F%A9%E9%98%B5%0A%20%20%20%20%20%20%20%20Shape-%3E%3ECC%3A%20context.save()%0A%20%20%20%20%20%20%20%20Shape-%3E%3ECC%3A%20context.transform(m)%0A%20%20%20%20%20%20%20%20Shape-%3E%3EShape%3A%20sceneFunc(context)%0A%20%20%20%20%20%20%20%20Note%20over%20Shape%3A%20_sceneFunc%3A%20%E7%BB%98%E5%88%B6%E5%87%A0%E4%BD%95%E5%9B%BE%E5%BD%A2%0A%20%20%20%20%20%20%20%20Shape-%3E%3EShape%3A%20fillStrokeScene(context)%0A%20%20%20%20%20%20%20%20Note%20over%20Shape%3A%20%E5%A1%AB%E5%85%85%20%2B%20%E6%8F%8F%E8%BE%B9%20%2B%20%E9%98%B4%E5%BD%B1%0A%20%20%20%20%20%20%20%20Shape-%3E%3ECC%3A%20context.restore()%0A%20%20%20%20%20%20%20%20deactivate%20Shape%0A%20%20%20%20end%0A%0A%20%20%20%20Layer-%3E%3ELayer%3A%20Layer%20%E5%86%85%E5%AE%8C%E6%88%90%E6%89%80%E6%9C%89%E7%BB%98%E5%88%B6%0A%20%20%20%20deactivate%20Layer%0A%20%20%20%20Note%20over%20DOM%3A%20Canvas%20%E5%83%8F%E7%B4%A0%E5%B7%B2%E6%9B%B4%E6%96%B0%EF%BC%8C%E6%B5%8F%E8%A7%88%E5%99%A8%E8%87%AA%E5%8A%A8%E5%90%88%E6%88%90%E6%98%BE%E7%A4%BA%0A",showToolbar:"1"})]),_:1}),a[3]||(a[3]=s("h3",{id:"场景三-拖拽操作的完整事件链",tabindex:"-1"},[n("场景三:拖拽操作的完整事件链 "),s("a",{class:"header-anchor",href:"#场景三-拖拽操作的完整事件链","aria-label":"Permalink to “场景三:拖拽操作的完整事件链”"},"​")],-1)),a[4]||(a[4]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户拖拽一个形状从起点移动到终点。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20DOM%20as%20DOM%20Canvas%0A%20%20%20%20participant%20Stage%20as%20Stage%0A%20%20%20%20participant%20DD%20as%20DragAndDrop%0A%20%20%20%20participant%20Node%20as%20Node(%E8%A2%AB%E6%8B%96%E6%8B%BD)%0A%20%20%20%20participant%20Layer%20as%20Layer%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20pointerdown%0A%20%20%20%20Stage-%3E%3EStage%3A%20getIntersection()%20-%3E%20%E5%91%BD%E4%B8%AD%20Node%0A%20%20%20%20Stage-%3E%3EDD%3A%20DD._pointerdown(evt%2C%20node)%0A%20%20%20%20activate%20DD%0A%20%20%20%20DD-%3E%3EDD%3A%20%E8%AE%B0%E5%BD%95%E8%B5%B7%E5%A7%8B%E4%BD%8D%E7%BD%AE%20(startPointerPos)%0A%20%20%20%20DD-%3E%3EDD%3A%20_justDragged%20%3D%20false%0A%20%20%20%20DD-%3E%3EDD%3A%20listening%20for%20move%2Fup%20on%20window%0A%20%20%20%20deactivate%20DD%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20pointermove%20(%E8%BF%9E%E7%BB%AD%E8%A7%A6%E5%8F%91)%0A%20%20%20%20Stage-%3E%3EDD%3A%20DD._pointermove(evt)%0A%20%20%20%20activate%20DD%0A%20%20%20%20DD-%3E%3EDD%3A%20%E8%AE%A1%E7%AE%97%E5%81%8F%E7%A7%BB%E9%87%8F%0A%20%20%20%20alt%20%E8%B6%85%E8%BF%87%E6%8B%96%E6%8B%BD%E9%98%88%E5%80%BC%0A%20%20%20%20%20%20%20%20DD-%3E%3EDD%3A%20_justDragged%20%3D%20true%0A%20%20%20%20%20%20%20%20DD-%3E%3ENode%3A%20node._setDragPosition(offset)%0A%20%20%20%20%20%20%20%20Node-%3E%3ENode%3A%20node.x()%20%2F%20node.y()%20%E6%9B%B4%E6%96%B0%0A%20%20%20%20%20%20%20%20Note%20over%20Node%3A%20%E5%A6%82%E6%9E%9C%20dragBoundFunc%20%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%BA%94%E7%94%A8%E8%BE%B9%E7%95%8C%E7%BA%A6%E6%9D%9F%0A%20%20%20%20%20%20%20%20DD-%3E%3ELayer%3A%20layer.batchDraw()%0A%20%20%20%20%20%20%20%20Layer-%3E%3ELayer%3A%20%E9%87%8D%E7%BB%98%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%0A%20%20%20%20end%0A%20%20%20%20deactivate%20DD%0A%0A%20%20%20%20DOM-%3E%3EStage%3A%20pointerup%0A%20%20%20%20Stage-%3E%3EDD%3A%20DD._pointerup(evt)%0A%20%20%20%20activate%20DD%0A%20%20%20%20alt%20_justDragged%0A%20%20%20%20%20%20%20%20DD-%3E%3ENode%3A%20node.fire('dragend'%2C%20evt)%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20DD-%3E%3ENode%3A%20node.fire('click'%2C%20evt)%20%2F%2F%20%E6%9C%AA%E6%8B%96%E5%8A%A8%EF%BC%8C%E8%A7%A6%E5%8F%91%E7%82%B9%E5%87%BB%0A%20%20%20%20end%0A%20%20%20%20DD-%3E%3EDD%3A%20%E5%81%9C%E6%AD%A2%20window%20%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%0A%20%20%20%20deactivate%20DD%0A",showToolbar:"1"})]),_:1}),a[5]||(a[5]=h("",12))])}const A=k(E,[["render",g]]);export{m as __pageData,A as default};
diff --git a/assets/insight-labs_repo-insight_lottie-web.md.DVvuwA83.js b/assets/insight-labs_repo-insight_lottie-web.md.D3b_s-CU.js
similarity index 99%
rename from assets/insight-labs_repo-insight_lottie-web.md.DVvuwA83.js
rename to assets/insight-labs_repo-insight_lottie-web.md.D3b_s-CU.js
index 3565dde..1bc7996 100644
--- a/assets/insight-labs_repo-insight_lottie-web.md.DVvuwA83.js
+++ b/assets/insight-labs_repo-insight_lottie-web.md.D3b_s-CU.js
@@ -1,4 +1,4 @@
-import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const A=JSON.parse('{"title":"Lottie Web 开源项目解读","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Lottie Web 开源项目解读","tldr":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","abstract":null,"permalink":"/insight-labs/repo-insight/lottie-web","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/lottie-web.md","filePath":"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md"}'),d={name:"insight-labs/repo-insight/lottie-web.md"};function g(E,i,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e(`

Lottie Web 开源项目解读

项目信息

  • 项目名称:Lottie Web

  • 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。

  • 项目地址:https://github.com/airbnb/lottie-web

  • 官方文档:https://lottie.airbnb.tech

  • 解决的核心痛点

    • 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现,费时费力且效果容易走样。lottie-web 直接解析 AE 动画 JSON 数据,使设计稿"所见即所得"地呈现在 Web 端。
    • 跨平台动画一致性:通过 Bodymovin 导出标准化的 JSON 中间格式,同一份动画数据可在 Web、Android、iOS、React Native 和 Windows 多端一致渲染,极大简化了跨平台动画开发。
    • 高性能实时渲染:支持 SVG 矢量渲染(无损缩放)、Canvas 2D(高性能像素渲染)和 HTML(3D 相机支持)三种渲染模式,可根据业务场景灵活选择渲染方式。

目标用户

  • 前端开发者:通过简单的 lottie.loadAnimation() API 加载和播放动画
  • UI/UX 设计师:使用 After Effects 制作动画,通过 Bodymovin 插件导出 JSON 数据
  • 跨平台移动开发团队:需要 Web/iOS/Android 多端动画一致性交付的团队

核心业务场景

  • 品牌动效/Logo 动画
  • UI 交互反馈(加载动画、按钮点击、页面转场)
  • 社交/内容类应用动画表情
  • 游戏 UI 动画(Canvas 高性能渲染)

1. 项目概览

1.1 项目定位与核心价值

lottie-web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。

项目信息

属性
名称lottie-web
版本5.13.0
仓库https://github.com/airbnb/lottie-web
许可证MIT
入口文件build/player/lottie.js
类型定义index.d.ts
总文件数289
源代码行数23,319
核心源码目录player/js/ (25 个子目录, 约 185 个 JS 文件)

解决的核心痛点

  1. 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现,费时费力且效果容易走样。lottie-web 直接解析 AE 动画 JSON 数据,使设计稿"所见即所得"地呈现在 Web 端。

  2. 跨平台动画一致性:通过 Bodymovin 导出标准化的 JSON 中间格式,同一份动画数据可在 Web、Android、iOS、React Native 和 Windows 多端一致渲染,极大简化了跨平台动画开发。

  3. 高性能实时渲染:支持 SVG 矢量渲染(无损缩放)、Canvas 2D(高性能像素渲染)和 HTML(3D 相机支持)三种渲染模式,可根据业务场景灵活选择渲染方式。

1.2 目标用户与使用场景

目标用户

  • 前端开发者:通过简单的 lottie.loadAnimation() API 加载和播放动画
  • UI/UX 设计师:使用 After Effects 制作动画,通过 Bodymovin 插件导出 JSON 数据
  • 跨平台移动开发团队:需要 Web/iOS/Android 多端动画一致性交付的团队

核心业务场景

  • 品牌动效/Logo 动画
  • UI 交互反馈(加载动画、按钮点击、页面转场)
  • 社交/内容类应用动画表情
  • 游戏 UI 动画(Canvas 高性能渲染)

1.3 核心技术亮点

  1. 三种渲染器并存:SVG(矢量无损)、Canvas(高性能)、HTML(3D支持),按场景选择
  2. 完整的 AE 表达式引擎:自实现 wiggle、loopIn/Out、time、value 等 AE 内置函数
  3. 形状变形系统:支持 6 种形状修饰器(Trim/Pucker/Bloat/Repeater/RoundCorners/ZigZag/OffsetPath)
  4. SVG 滤镜系统:9 种 SVG 滤镜效果(投影/模糊/色阶/色调等)
  5. Web Worker 支持:支持在 Web Worker 中解析数据,不阻塞主线程
  6. 对象池优化:6 种对象池减少 GC 压力,提升性能
  7. 灵活构建:8 个构建入口,生成 20+ 种不同体积的产物

1.4 技术栈与选型对比

技术选择替代方案选择理由
纯 JavaScript (ES6+)TypeScript历史原因(2015年启动),提供 .d.ts 满足 TS 用户,避免编译步骤
Rollup (打包)Webpack库而非应用,Rollup 天然适合库打包,tree-shaking 效果好
三种渲染器并存单一 SVG满足不同性能/交互需求,按需加载减小体积
内联第三方依赖npm 依赖减少依赖数量,避免版本冲突,定制化修改
自定义表达式引擎不实现不支持表达式会导致大量 AE 动画无法正确渲染

2. 整体架构设计

2.1 架构概述

lottie-web 采用分层+插件化架构。核心分为五个层次:公共 API 层(lottie 全局对象)、动画管理层(AnimationManager)、渲染器层(SVG/Canvas/Hybrid)、元素层(各类图层元素)、以及基础设施层(属性工厂、表达式引擎、形状修饰器、对象池等)。各层之间通过注册器模式和接口契约解耦,实现"轻量核心 + 按需加载功能"的设计目标。

2.2 整体架构图

text
+=====================================================================================+
+import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const A=JSON.parse('{"title":"Lottie Web 开源项目解读","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Lottie Web 开源项目解读","tldr":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","abstract":null,"permalink":"/insight-labs/repo-insight/lottie-web","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/lottie-web.md","filePath":"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md"}'),d={name:"insight-labs/repo-insight/lottie-web.md"};function g(E,i,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e(`

Lottie Web 开源项目解读

项目信息

  • 项目名称:Lottie Web

  • 项目描述: 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。

  • 项目地址:https://github.com/airbnb/lottie-web

  • 官方文档:https://lottie.airbnb.tech

  • 解决的核心痛点

    • 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现,费时费力且效果容易走样。lottie-web 直接解析 AE 动画 JSON 数据,使设计稿"所见即所得"地呈现在 Web 端。
    • 跨平台动画一致性:通过 Bodymovin 导出标准化的 JSON 中间格式,同一份动画数据可在 Web、Android、iOS、React Native 和 Windows 多端一致渲染,极大简化了跨平台动画开发。
    • 高性能实时渲染:支持 SVG 矢量渲染(无损缩放)、Canvas 2D(高性能像素渲染)和 HTML(3D 相机支持)三种渲染模式,可根据业务场景灵活选择渲染方式。

目标用户

  • 前端开发者:通过简单的 lottie.loadAnimation() API 加载和播放动画
  • UI/UX 设计师:使用 After Effects 制作动画,通过 Bodymovin 插件导出 JSON 数据
  • 跨平台移动开发团队:需要 Web/iOS/Android 多端动画一致性交付的团队

核心业务场景

  • 品牌动效/Logo 动画
  • UI 交互反馈(加载动画、按钮点击、页面转场)
  • 社交/内容类应用动画表情
  • 游戏 UI 动画(Canvas 高性能渲染)

1. 项目概览

1.1 项目定位与核心价值

lottie-web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。

项目信息

属性
名称lottie-web
版本5.13.0
仓库https://github.com/airbnb/lottie-web
许可证MIT
入口文件build/player/lottie.js
类型定义index.d.ts
总文件数289
源代码行数23,319
核心源码目录player/js/ (25 个子目录, 约 185 个 JS 文件)

解决的核心痛点

  1. 设计到开发的协作鸿沟:设计师在 After Effects 中制作的精美动画,传统做法需要工程师手工重新编码实现,费时费力且效果容易走样。lottie-web 直接解析 AE 动画 JSON 数据,使设计稿"所见即所得"地呈现在 Web 端。

  2. 跨平台动画一致性:通过 Bodymovin 导出标准化的 JSON 中间格式,同一份动画数据可在 Web、Android、iOS、React Native 和 Windows 多端一致渲染,极大简化了跨平台动画开发。

  3. 高性能实时渲染:支持 SVG 矢量渲染(无损缩放)、Canvas 2D(高性能像素渲染)和 HTML(3D 相机支持)三种渲染模式,可根据业务场景灵活选择渲染方式。

1.2 目标用户与使用场景

目标用户

  • 前端开发者:通过简单的 lottie.loadAnimation() API 加载和播放动画
  • UI/UX 设计师:使用 After Effects 制作动画,通过 Bodymovin 插件导出 JSON 数据
  • 跨平台移动开发团队:需要 Web/iOS/Android 多端动画一致性交付的团队

核心业务场景

  • 品牌动效/Logo 动画
  • UI 交互反馈(加载动画、按钮点击、页面转场)
  • 社交/内容类应用动画表情
  • 游戏 UI 动画(Canvas 高性能渲染)

1.3 核心技术亮点

  1. 三种渲染器并存:SVG(矢量无损)、Canvas(高性能)、HTML(3D支持),按场景选择
  2. 完整的 AE 表达式引擎:自实现 wiggle、loopIn/Out、time、value 等 AE 内置函数
  3. 形状变形系统:支持 6 种形状修饰器(Trim/Pucker/Bloat/Repeater/RoundCorners/ZigZag/OffsetPath)
  4. SVG 滤镜系统:9 种 SVG 滤镜效果(投影/模糊/色阶/色调等)
  5. Web Worker 支持:支持在 Web Worker 中解析数据,不阻塞主线程
  6. 对象池优化:6 种对象池减少 GC 压力,提升性能
  7. 灵活构建:8 个构建入口,生成 20+ 种不同体积的产物

1.4 技术栈与选型对比

技术选择替代方案选择理由
纯 JavaScript (ES6+)TypeScript历史原因(2015年启动),提供 .d.ts 满足 TS 用户,避免编译步骤
Rollup (打包)Webpack库而非应用,Rollup 天然适合库打包,tree-shaking 效果好
三种渲染器并存单一 SVG满足不同性能/交互需求,按需加载减小体积
内联第三方依赖npm 依赖减少依赖数量,避免版本冲突,定制化修改
自定义表达式引擎不实现不支持表达式会导致大量 AE 动画无法正确渲染

2. 整体架构设计

2.1 架构概述

lottie-web 采用分层+插件化架构。核心分为五个层次:公共 API 层(lottie 全局对象)、动画管理层(AnimationManager)、渲染器层(SVG/Canvas/Hybrid)、元素层(各类图层元素)、以及基础设施层(属性工厂、表达式引擎、形状修饰器、对象池等)。各层之间通过注册器模式和接口契约解耦,实现"轻量核心 + 按需加载功能"的设计目标。

2.2 整体架构图

text
+=====================================================================================+
 |                              Lottie-Web 整体分层架构                                 |
 +=====================================================================================+
 |                                                                                     |
diff --git a/assets/insight-labs_repo-insight_lottie-web.md.DVvuwA83.lean.js b/assets/insight-labs_repo-insight_lottie-web.md.D3b_s-CU.lean.js
similarity index 99%
rename from assets/insight-labs_repo-insight_lottie-web.md.DVvuwA83.lean.js
rename to assets/insight-labs_repo-insight_lottie-web.md.D3b_s-CU.lean.js
index fc451e7..285ef48 100644
--- a/assets/insight-labs_repo-insight_lottie-web.md.DVvuwA83.lean.js
+++ b/assets/insight-labs_repo-insight_lottie-web.md.D3b_s-CU.lean.js
@@ -1 +1 @@
-import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const A=JSON.parse('{"title":"Lottie Web 开源项目解读","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Lottie Web 开源项目解读","tldr":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","abstract":null,"permalink":"/insight-labs/repo-insight/lottie-web","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/lottie-web.md","filePath":"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md"}'),d={name:"insight-labs/repo-insight/lottie-web.md"};function g(E,i,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e("",54)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Lottie%20as%20lottie%20%E5%85%A8%E5%B1%80%E5%AF%B9%E8%B1%A1%0A%20%20%20%20participant%20AM%20as%20AnimationManager%0A%20%20%20%20participant%20AI%20as%20AnimationItem%0A%20%20%20%20participant%20DM%20as%20DataManager%0A%20%20%20%20participant%20Renderer%20as%20SVGRenderer%0A%20%20%20%20participant%20PF%20as%20PropertyFactory%0A%20%20%20%20participant%20Elem%20as%20SVGElement%20(%E5%9B%BE%E5%B1%82)%0A%20%20%20%20participant%20Browser%20as%20Browser%20(RAF)%0A%0A%20%20%20%20User-%3E%3ELottie%3A%20loadAnimation(%7Bcontainer%2C%20path%2C%20renderer%3A'svg'%2C%20...%7D)%0A%20%20%20%20activate%20Lottie%0A%20%20%20%20Lottie-%3E%3EAM%3A%20loadAnimation(params)%0A%20%20%20%20activate%20AM%0A%20%20%20%20AM-%3E%3EAI%3A%20new%20AnimationItem()%0A%20%20%20%20activate%20AI%0A%20%20%20%20AI-%3E%3EAI%3A%20setParams(params)%0A%20%20%20%20AI-%3E%3EAI%3A%20%E6%A0%B9%E6%8D%AE%20renderer%20%E6%9F%A5%E6%89%BE%20RendererClass%0A%20%20%20%20AI-%3E%3ERenderer%3A%20new%20SVGRenderer(animationItem%2C%20config)%0A%20%20%20%20activate%20Renderer%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E5%88%9B%E5%BB%BA%20SVG%20DOM%20(svgElement%2C%20defs%2C%20layerElement)%0A%20%20%20%20Renderer--%3E%3EAI%3A%20renderer%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20Renderer%0A%0A%20%20%20%20AI-%3E%3EDM%3A%20%E5%8A%A0%E8%BD%BD%E5%8A%A8%E7%94%BB%20JSON%20(path%20%E6%88%96%20animationData)%0A%20%20%20%20activate%20DM%0A%20%20%20%20DM--%3E%3EAI%3A%20parsed%20animationData%20(layers%2C%20assets%2C%20chars%2C%20fonts)%0A%20%20%20%20deactivate%20DM%0A%0A%20%20%20%20AI-%3E%3EAI%3A%20configAnimation(animData)%0A%20%20%20%20AI-%3E%3EAI%3A%20%E8%AE%BE%E7%BD%AE%20totalFrames%2C%20frameRate%2C%20%E5%88%9D%E5%A7%8B%E5%8C%96%20segments%0A%20%20%20%20AI-%3E%3EAI%3A%20setupAnimation(animData)%0A%20%20%20%20AI-%3E%3ERenderer%3A%20renderer.setupGlobalData(animData)%0A%20%20%20%20activate%20Renderer%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E5%88%9D%E5%A7%8B%E5%8C%96%20FontManager%2C%20SlotManager%2C%20imageLoader%0A%20%20%20%20Renderer--%3E%3EAI%3A%20globalData%20%E9%85%8D%E7%BD%AE%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Renderer%0A%0A%20%20%20%20AI-%3E%3ERenderer%3A%20renderer.initItems()%0A%20%20%20%20activate%20Renderer%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20buildAllItems()%20(%E5%A6%82%E6%9E%9C%E9%9D%9E%20progressiveLoad)%0A%20%20%20%20loop%20%E9%81%8D%E5%8E%86%E6%89%80%E6%9C%89%20layers%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EPF%3A%20createItem(layer)%20-%3E%20getProp()%20%E5%88%9B%E5%BB%BA%E5%90%84%E7%A7%8D%20Property%0A%20%20%20%20%20%20%20%20PF--%3E%3ERenderer%3A%20Property%20%E5%AE%9E%E4%BE%8B%20(%E5%90%AB%E5%85%B3%E9%94%AE%E5%B8%A7%E6%95%B0%E6%8D%AE)%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EElem%3A%20new%20SVGCompElement%20%2F%20SVGShapeElement%20%2F%20...%0A%20%20%20%20%20%20%20%20Elem-%3E%3EElem%3A%20%E5%88%9D%E5%A7%8B%E5%8C%96%E8%87%AA%E8%BA%AB%20Property%EF%BC%8C%E5%88%9B%E5%BB%BA%20DOM%20%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20Elem--%3E%3ERenderer%3A%20element%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20end%0A%20%20%20%20Renderer--%3E%3EAI%3A%20%E6%89%80%E6%9C%89%E5%9B%BE%E5%B1%82%E5%85%83%E7%B4%A0%E6%9E%84%E5%BB%BA%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Renderer%0A%0A%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('config_ready')%0A%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('data_ready')%0A%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('DOMLoaded')%0A%0A%20%20%20%20AI--%3E%3EAM%3A%20animationItem%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20AI%0A%20%20%20%20AM-%3E%3EAM%3A%20setupAnimation(animItem)%0A%20%20%20%20AM-%3E%3EAM%3A%20%E5%A6%82%E6%9E%9C%20autoplay%20-%3E%20activate()%20-%3E%20RAF%20%E5%BE%AA%E7%8E%AF%0A%20%20%20%20AM--%3E%3ELottie%3A%20animationItem%0A%20%20%20%20deactivate%20AM%0A%20%20%20%20Lottie--%3E%3EUser%3A%20AnimationItem%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20Lottie%0A%0A%20%20%20%20Note%20over%20Browser%3A%20%E5%8A%A8%E7%94%BB%E5%BE%AA%E7%8E%AF%E5%BC%80%E5%A7%8B%0A%20%20%20%20loop%20%E6%AF%8F%E4%B8%80%E5%B8%A7%20(requestAnimationFrame)%0A%20%20%20%20%20%20%20%20Browser-%3E%3EAM%3A%20resume(nowTime)%0A%20%20%20%20%20%20%20%20AM-%3E%3EAI%3A%20advanceTime(elapsedTime)%0A%20%20%20%20%20%20%20%20activate%20AI%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20%E8%AE%A1%E7%AE%97%20currentFrame%20(%E5%90%AB%20direction%2C%20speed)%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20%E6%A3%80%E6%9F%A5%20segment%20%2F%20loop%20%E9%80%BB%E8%BE%91%0A%20%20%20%20%20%20%20%20AI-%3E%3ERenderer%3A%20renderFrame(currentFrame)%0A%20%20%20%20%20%20%20%20activate%20Renderer%0A%20%20%20%20%20%20%20%20loop%20%E9%81%8D%E5%8E%86%E6%89%80%E6%9C%89%20active%20elements%0A%20%20%20%20%20%20%20%20%20%20%20%20Renderer-%3E%3EElem%3A%20renderFrame()%0A%20%20%20%20%20%20%20%20%20%20%20%20Elem-%3E%3EPF%3A%20getValue(currentFrame)%20for%20each%20Property%0A%20%20%20%20%20%20%20%20%20%20%20%20PF--%3E%3EElem%3A%20%E5%BD%93%E5%89%8D%E5%B8%A7%E7%9A%84%E5%B1%9E%E6%80%A7%E5%80%BC%20(%E6%8F%92%E5%80%BC%E7%BB%93%E6%9E%9C)%0A%20%20%20%20%20%20%20%20%20%20%20%20Elem-%3E%3EElem%3A%20%E6%9B%B4%E6%96%B0%20SVG%20DOM%20%E5%B1%9E%E6%80%A7%20(transform%2C%20opacity%2C%20path...)%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Renderer--%3E%3EAI%3A%20%E6%B8%B2%E6%9F%93%E5%AE%8C%E6%88%90%0A%20%20%20%20%20%20%20%20deactivate%20Renderer%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('enterFrame')%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20%E6%A3%80%E6%9F%A5%20triggerEvent('complete'%2F'loopComplete')%0A%20%20%20%20%20%20%20%20deactivate%20AI%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),i[1]||(i[1]=s("h3",{id:"场景二-表达式引擎求值流程",tabindex:"-1"},[n("场景二:表达式引擎求值流程 "),s("a",{class:"header-anchor",href:"#场景二-表达式引擎求值流程","aria-label":"Permalink to “场景二:表达式引擎求值流程”"},"​")],-1)),i[2]||(i[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":当 AE JSON 中包含表达式(如 "),s("code",null,"wiggle(5, 10)"),n(" 实现抖动效果),属性值不再来自关键帧插值,而是由表达式引擎动态计算。表达式在每个渲染帧被求值一次,获取当前帧的实时属性值。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20Frame%20as%20%E6%AF%8F%E5%B8%A7%E6%B8%B2%E6%9F%93%0A%20%20%20%20participant%20Prop%20as%20Property%20(%E8%A2%AB%E8%A3%85%E9%A5%B0)%0A%20%20%20%20participant%20Decorator%20as%20ExpressionPropertyDecorator%0A%20%20%20%20participant%20EM%20as%20ExpressionManager%0A%20%20%20%20participant%20IP%20as%20InterfacesProvider%0A%20%20%20%20participant%20Func%20as%20%E7%BC%96%E8%AF%91%E5%90%8E%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%87%BD%E6%95%B0%0A%0A%20%20%20%20Frame-%3E%3EProp%3A%20getValue(frameNum)%0A%20%20%20%20activate%20Prop%0A%0A%20%20%20%20Note%20over%20Prop%3A%20%E8%A3%85%E9%A5%B0%E5%99%A8%E6%8B%A6%E6%88%AA%20getValue()%0A%20%20%20%20Prop-%3E%3EDecorator%3A%20%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E6%9C%89%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%A3%85%E9%A5%B0%0A%20%20%20%20activate%20Decorator%0A%0A%20%20%20%20Decorator-%3E%3EEM%3A%20%E8%8E%B7%E5%8F%96%E8%AF%A5%E5%B1%9E%E6%80%A7%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%AE%9E%E4%BE%8B%0A%20%20%20%20activate%20EM%0A%20%20%20%20EM-%3E%3EIP%3A%20getInterface(element)%20%E6%9E%84%E5%BB%BA%20AE%20%E4%B8%8A%E4%B8%8B%E6%96%87%0A%20%20%20%20activate%20IP%0A%20%20%20%20IP--%3E%3EEM%3A%20%7Bcomp%2C%20layer%2C%20property%2C%20shape%2C%20mask%2C%20...%7D%0A%20%20%20%20deactivate%20IP%0A%0A%20%20%20%20EM-%3E%3EEM%3A%20%E6%9E%84%E5%BB%BA%E8%A1%A8%E8%BE%BE%E5%BC%8F%20eval%20%E4%B8%8A%E4%B8%8B%E6%96%87%0A%20%20%20%20Note%20over%20EM%3A%20%E6%B3%A8%E5%85%A5%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%3A%20wiggle()%2C%20loopIn()%2C%20%3Cbr%2F%3EloopOut()%2C%20time%2C%20value%2C%20linear()%2C%3Cbr%2F%3Eease()%2C%20seedRandom()%2C%20posterizeTime()%0A%0A%20%20%20%20EM-%3E%3EFunc%3A%20eval(expressionStr)%20%E5%9C%A8%E6%9E%84%E5%BB%BA%E7%9A%84%E4%B8%8A%E4%B8%8B%E6%96%87%E4%B8%AD%E6%89%A7%E8%A1%8C%0A%20%20%20%20activate%20Func%0A%20%20%20%20Func-%3E%3EFunc%3A%20%E6%89%A7%E8%A1%8C%20AE%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%20(%E5%A6%82%20wiggle(5%2C%2010))%0A%20%20%20%20alt%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%89%A7%E8%A1%8C%E6%88%90%E5%8A%9F%0A%20%20%20%20%20%20%20%20Func--%3E%3EEM%3A%20%E8%AE%A1%E7%AE%97%E7%BB%93%E6%9E%9C%E5%80%BC%0A%20%20%20%20%20%20%20%20EM--%3E%3EDecorator%3A%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%BB%93%E6%9E%9C%0A%20%20%20%20%20%20%20%20Decorator--%3E%3EProp%3A%20%E8%BF%94%E5%9B%9E%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%80%BC%0A%20%20%20%20else%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%89%A7%E8%A1%8C%E5%BC%82%E5%B8%B8%0A%20%20%20%20%20%20%20%20Func--%3E%3EEM%3A%20%E6%8A%9B%E5%87%BA%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20EM--%3E%3EDecorator%3A%20%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20Decorator-%3E%3EDecorator%3A%20%E5%9B%9E%E9%80%80%E5%88%B0%E5%85%B3%E9%94%AE%E5%B8%A7%E6%8F%92%E5%80%BC%0A%20%20%20%20%20%20%20%20Decorator--%3E%3EProp%3A%20%E8%BF%94%E5%9B%9E%E5%85%B3%E9%94%AE%E5%B8%A7%E6%8F%92%E5%80%BC%E7%BB%93%E6%9E%9C%0A%20%20%20%20end%0A%20%20%20%20deactivate%20Func%0A%20%20%20%20deactivate%20EM%0A%20%20%20%20deactivate%20Decorator%0A%0A%20%20%20%20Prop--%3E%3EFrame%3A%20%E6%9C%80%E7%BB%88%E5%B1%9E%E6%80%A7%E5%80%BC%0A%20%20%20%20deactivate%20Prop%0A",showToolbar:"1"})]),_:1}),i[3]||(i[3]=e("",17))])}const m=t(d,[["render",g]]);export{A as __pageData,m as default};
+import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const A=JSON.parse('{"title":"Lottie Web 开源项目解读","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Lottie Web 开源项目解读","tldr":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","description":"Lottie Web 是 Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。","abstract":null,"permalink":"/insight-labs/repo-insight/lottie-web","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/lottie-web.md","filePath":"31.Insight Labs/11.Reop Insight Reports/04.lottie-web.md"}'),d={name:"insight-labs/repo-insight/lottie-web.md"};function g(E,i,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e("",54)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Lottie%20as%20lottie%20%E5%85%A8%E5%B1%80%E5%AF%B9%E8%B1%A1%0A%20%20%20%20participant%20AM%20as%20AnimationManager%0A%20%20%20%20participant%20AI%20as%20AnimationItem%0A%20%20%20%20participant%20DM%20as%20DataManager%0A%20%20%20%20participant%20Renderer%20as%20SVGRenderer%0A%20%20%20%20participant%20PF%20as%20PropertyFactory%0A%20%20%20%20participant%20Elem%20as%20SVGElement%20(%E5%9B%BE%E5%B1%82)%0A%20%20%20%20participant%20Browser%20as%20Browser%20(RAF)%0A%0A%20%20%20%20User-%3E%3ELottie%3A%20loadAnimation(%7Bcontainer%2C%20path%2C%20renderer%3A'svg'%2C%20...%7D)%0A%20%20%20%20activate%20Lottie%0A%20%20%20%20Lottie-%3E%3EAM%3A%20loadAnimation(params)%0A%20%20%20%20activate%20AM%0A%20%20%20%20AM-%3E%3EAI%3A%20new%20AnimationItem()%0A%20%20%20%20activate%20AI%0A%20%20%20%20AI-%3E%3EAI%3A%20setParams(params)%0A%20%20%20%20AI-%3E%3EAI%3A%20%E6%A0%B9%E6%8D%AE%20renderer%20%E6%9F%A5%E6%89%BE%20RendererClass%0A%20%20%20%20AI-%3E%3ERenderer%3A%20new%20SVGRenderer(animationItem%2C%20config)%0A%20%20%20%20activate%20Renderer%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E5%88%9B%E5%BB%BA%20SVG%20DOM%20(svgElement%2C%20defs%2C%20layerElement)%0A%20%20%20%20Renderer--%3E%3EAI%3A%20renderer%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20Renderer%0A%0A%20%20%20%20AI-%3E%3EDM%3A%20%E5%8A%A0%E8%BD%BD%E5%8A%A8%E7%94%BB%20JSON%20(path%20%E6%88%96%20animationData)%0A%20%20%20%20activate%20DM%0A%20%20%20%20DM--%3E%3EAI%3A%20parsed%20animationData%20(layers%2C%20assets%2C%20chars%2C%20fonts)%0A%20%20%20%20deactivate%20DM%0A%0A%20%20%20%20AI-%3E%3EAI%3A%20configAnimation(animData)%0A%20%20%20%20AI-%3E%3EAI%3A%20%E8%AE%BE%E7%BD%AE%20totalFrames%2C%20frameRate%2C%20%E5%88%9D%E5%A7%8B%E5%8C%96%20segments%0A%20%20%20%20AI-%3E%3EAI%3A%20setupAnimation(animData)%0A%20%20%20%20AI-%3E%3ERenderer%3A%20renderer.setupGlobalData(animData)%0A%20%20%20%20activate%20Renderer%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E5%88%9D%E5%A7%8B%E5%8C%96%20FontManager%2C%20SlotManager%2C%20imageLoader%0A%20%20%20%20Renderer--%3E%3EAI%3A%20globalData%20%E9%85%8D%E7%BD%AE%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Renderer%0A%0A%20%20%20%20AI-%3E%3ERenderer%3A%20renderer.initItems()%0A%20%20%20%20activate%20Renderer%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20buildAllItems()%20(%E5%A6%82%E6%9E%9C%E9%9D%9E%20progressiveLoad)%0A%20%20%20%20loop%20%E9%81%8D%E5%8E%86%E6%89%80%E6%9C%89%20layers%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EPF%3A%20createItem(layer)%20-%3E%20getProp()%20%E5%88%9B%E5%BB%BA%E5%90%84%E7%A7%8D%20Property%0A%20%20%20%20%20%20%20%20PF--%3E%3ERenderer%3A%20Property%20%E5%AE%9E%E4%BE%8B%20(%E5%90%AB%E5%85%B3%E9%94%AE%E5%B8%A7%E6%95%B0%E6%8D%AE)%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EElem%3A%20new%20SVGCompElement%20%2F%20SVGShapeElement%20%2F%20...%0A%20%20%20%20%20%20%20%20Elem-%3E%3EElem%3A%20%E5%88%9D%E5%A7%8B%E5%8C%96%E8%87%AA%E8%BA%AB%20Property%EF%BC%8C%E5%88%9B%E5%BB%BA%20DOM%20%E8%8A%82%E7%82%B9%0A%20%20%20%20%20%20%20%20Elem--%3E%3ERenderer%3A%20element%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20end%0A%20%20%20%20Renderer--%3E%3EAI%3A%20%E6%89%80%E6%9C%89%E5%9B%BE%E5%B1%82%E5%85%83%E7%B4%A0%E6%9E%84%E5%BB%BA%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Renderer%0A%0A%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('config_ready')%0A%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('data_ready')%0A%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('DOMLoaded')%0A%0A%20%20%20%20AI--%3E%3EAM%3A%20animationItem%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20AI%0A%20%20%20%20AM-%3E%3EAM%3A%20setupAnimation(animItem)%0A%20%20%20%20AM-%3E%3EAM%3A%20%E5%A6%82%E6%9E%9C%20autoplay%20-%3E%20activate()%20-%3E%20RAF%20%E5%BE%AA%E7%8E%AF%0A%20%20%20%20AM--%3E%3ELottie%3A%20animationItem%0A%20%20%20%20deactivate%20AM%0A%20%20%20%20Lottie--%3E%3EUser%3A%20AnimationItem%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20deactivate%20Lottie%0A%0A%20%20%20%20Note%20over%20Browser%3A%20%E5%8A%A8%E7%94%BB%E5%BE%AA%E7%8E%AF%E5%BC%80%E5%A7%8B%0A%20%20%20%20loop%20%E6%AF%8F%E4%B8%80%E5%B8%A7%20(requestAnimationFrame)%0A%20%20%20%20%20%20%20%20Browser-%3E%3EAM%3A%20resume(nowTime)%0A%20%20%20%20%20%20%20%20AM-%3E%3EAI%3A%20advanceTime(elapsedTime)%0A%20%20%20%20%20%20%20%20activate%20AI%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20%E8%AE%A1%E7%AE%97%20currentFrame%20(%E5%90%AB%20direction%2C%20speed)%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20%E6%A3%80%E6%9F%A5%20segment%20%2F%20loop%20%E9%80%BB%E8%BE%91%0A%20%20%20%20%20%20%20%20AI-%3E%3ERenderer%3A%20renderFrame(currentFrame)%0A%20%20%20%20%20%20%20%20activate%20Renderer%0A%20%20%20%20%20%20%20%20loop%20%E9%81%8D%E5%8E%86%E6%89%80%E6%9C%89%20active%20elements%0A%20%20%20%20%20%20%20%20%20%20%20%20Renderer-%3E%3EElem%3A%20renderFrame()%0A%20%20%20%20%20%20%20%20%20%20%20%20Elem-%3E%3EPF%3A%20getValue(currentFrame)%20for%20each%20Property%0A%20%20%20%20%20%20%20%20%20%20%20%20PF--%3E%3EElem%3A%20%E5%BD%93%E5%89%8D%E5%B8%A7%E7%9A%84%E5%B1%9E%E6%80%A7%E5%80%BC%20(%E6%8F%92%E5%80%BC%E7%BB%93%E6%9E%9C)%0A%20%20%20%20%20%20%20%20%20%20%20%20Elem-%3E%3EElem%3A%20%E6%9B%B4%E6%96%B0%20SVG%20DOM%20%E5%B1%9E%E6%80%A7%20(transform%2C%20opacity%2C%20path...)%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Renderer--%3E%3EAI%3A%20%E6%B8%B2%E6%9F%93%E5%AE%8C%E6%88%90%0A%20%20%20%20%20%20%20%20deactivate%20Renderer%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20triggerEvent('enterFrame')%0A%20%20%20%20%20%20%20%20AI-%3E%3EAI%3A%20%E6%A3%80%E6%9F%A5%20triggerEvent('complete'%2F'loopComplete')%0A%20%20%20%20%20%20%20%20deactivate%20AI%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),i[1]||(i[1]=s("h3",{id:"场景二-表达式引擎求值流程",tabindex:"-1"},[n("场景二:表达式引擎求值流程 "),s("a",{class:"header-anchor",href:"#场景二-表达式引擎求值流程","aria-label":"Permalink to “场景二:表达式引擎求值流程”"},"​")],-1)),i[2]||(i[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":当 AE JSON 中包含表达式(如 "),s("code",null,"wiggle(5, 10)"),n(" 实现抖动效果),属性值不再来自关键帧插值,而是由表达式引擎动态计算。表达式在每个渲染帧被求值一次,获取当前帧的实时属性值。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20Frame%20as%20%E6%AF%8F%E5%B8%A7%E6%B8%B2%E6%9F%93%0A%20%20%20%20participant%20Prop%20as%20Property%20(%E8%A2%AB%E8%A3%85%E9%A5%B0)%0A%20%20%20%20participant%20Decorator%20as%20ExpressionPropertyDecorator%0A%20%20%20%20participant%20EM%20as%20ExpressionManager%0A%20%20%20%20participant%20IP%20as%20InterfacesProvider%0A%20%20%20%20participant%20Func%20as%20%E7%BC%96%E8%AF%91%E5%90%8E%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%87%BD%E6%95%B0%0A%0A%20%20%20%20Frame-%3E%3EProp%3A%20getValue(frameNum)%0A%20%20%20%20activate%20Prop%0A%0A%20%20%20%20Note%20over%20Prop%3A%20%E8%A3%85%E9%A5%B0%E5%99%A8%E6%8B%A6%E6%88%AA%20getValue()%0A%20%20%20%20Prop-%3E%3EDecorator%3A%20%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E6%9C%89%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%A3%85%E9%A5%B0%0A%20%20%20%20activate%20Decorator%0A%0A%20%20%20%20Decorator-%3E%3EEM%3A%20%E8%8E%B7%E5%8F%96%E8%AF%A5%E5%B1%9E%E6%80%A7%E7%9A%84%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%AE%9E%E4%BE%8B%0A%20%20%20%20activate%20EM%0A%20%20%20%20EM-%3E%3EIP%3A%20getInterface(element)%20%E6%9E%84%E5%BB%BA%20AE%20%E4%B8%8A%E4%B8%8B%E6%96%87%0A%20%20%20%20activate%20IP%0A%20%20%20%20IP--%3E%3EEM%3A%20%7Bcomp%2C%20layer%2C%20property%2C%20shape%2C%20mask%2C%20...%7D%0A%20%20%20%20deactivate%20IP%0A%0A%20%20%20%20EM-%3E%3EEM%3A%20%E6%9E%84%E5%BB%BA%E8%A1%A8%E8%BE%BE%E5%BC%8F%20eval%20%E4%B8%8A%E4%B8%8B%E6%96%87%0A%20%20%20%20Note%20over%20EM%3A%20%E6%B3%A8%E5%85%A5%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%3A%20wiggle()%2C%20loopIn()%2C%20%3Cbr%2F%3EloopOut()%2C%20time%2C%20value%2C%20linear()%2C%3Cbr%2F%3Eease()%2C%20seedRandom()%2C%20posterizeTime()%0A%0A%20%20%20%20EM-%3E%3EFunc%3A%20eval(expressionStr)%20%E5%9C%A8%E6%9E%84%E5%BB%BA%E7%9A%84%E4%B8%8A%E4%B8%8B%E6%96%87%E4%B8%AD%E6%89%A7%E8%A1%8C%0A%20%20%20%20activate%20Func%0A%20%20%20%20Func-%3E%3EFunc%3A%20%E6%89%A7%E8%A1%8C%20AE%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%20(%E5%A6%82%20wiggle(5%2C%2010))%0A%20%20%20%20alt%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%89%A7%E8%A1%8C%E6%88%90%E5%8A%9F%0A%20%20%20%20%20%20%20%20Func--%3E%3EEM%3A%20%E8%AE%A1%E7%AE%97%E7%BB%93%E6%9E%9C%E5%80%BC%0A%20%20%20%20%20%20%20%20EM--%3E%3EDecorator%3A%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%BB%93%E6%9E%9C%0A%20%20%20%20%20%20%20%20Decorator--%3E%3EProp%3A%20%E8%BF%94%E5%9B%9E%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%80%BC%0A%20%20%20%20else%20%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%89%A7%E8%A1%8C%E5%BC%82%E5%B8%B8%0A%20%20%20%20%20%20%20%20Func--%3E%3EEM%3A%20%E6%8A%9B%E5%87%BA%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20EM--%3E%3EDecorator%3A%20%E9%94%99%E8%AF%AF%0A%20%20%20%20%20%20%20%20Decorator-%3E%3EDecorator%3A%20%E5%9B%9E%E9%80%80%E5%88%B0%E5%85%B3%E9%94%AE%E5%B8%A7%E6%8F%92%E5%80%BC%0A%20%20%20%20%20%20%20%20Decorator--%3E%3EProp%3A%20%E8%BF%94%E5%9B%9E%E5%85%B3%E9%94%AE%E5%B8%A7%E6%8F%92%E5%80%BC%E7%BB%93%E6%9E%9C%0A%20%20%20%20end%0A%20%20%20%20deactivate%20Func%0A%20%20%20%20deactivate%20EM%0A%20%20%20%20deactivate%20Decorator%0A%0A%20%20%20%20Prop--%3E%3EFrame%3A%20%E6%9C%80%E7%BB%88%E5%B1%9E%E6%80%A7%E5%80%BC%0A%20%20%20%20deactivate%20Prop%0A",showToolbar:"1"})]),_:1}),i[3]||(i[3]=e("",17))])}const m=t(d,[["render",g]]);export{A as __pageData,m as default};
diff --git a/assets/insight-labs_repo-insight_open-cli.md.eC85uCpN.js b/assets/insight-labs_repo-insight_open-cli.md.BUMPTS97.js
similarity index 99%
rename from assets/insight-labs_repo-insight_open-cli.md.eC85uCpN.js
rename to assets/insight-labs_repo-insight_open-cli.md.BUMPTS97.js
index 72ce797..1eddff9 100644
--- a/assets/insight-labs_repo-insight_open-cli.md.eC85uCpN.js
+++ b/assets/insight-labs_repo-insight_open-cli.md.BUMPTS97.js
@@ -1,4 +1,4 @@
-import{_ as t,r as h,c as r,o as d,d as e,b as a,a as i,w as k,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const o=JSON.parse('{"title":"OpenCLI 开源项目解读","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","frontmatter":{"date":"2026-04-11T14:52:34.000Z","title":"OpenCLI 开源项目解读","tldr":"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","abstract":"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。","permalink":"/insight-labs/repo-insight/open-cli","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/open-cli.md","filePath":"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md"}'),E={name:"insight-labs/repo-insight/open-cli.md"};function F(g,s,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return d(),r("div",null,[s[0]||(s[0]=e(`

OpenCLI 开源项目解读

项目信息

  • 项目名称:OpenCLI

  • 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。

  • 项目地址:https://github.com/jackwener/OpenCLI

  • 核心功能

    • 70+ 预置网站适配器(bilibili、twitter、hackernews 等)
    • 浏览器自动化(复用登录会话,无需密码)
    • Electron 应用控制(Cursor、ChatGPT 等)
    • CLI 工具统一管理
    • AI Agent 友好的技能系统

1. 项目概览

1.1 项目定位与核心价值

一句话定位:OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动型自动化平台。

核心痛点解决

  1. 网站操作自动化困难:传统爬虫易被反爬虫拦截,需要复用已登录会话。
  2. AI Agent 缺乏可靠的网站操作能力:需要标准化接口、安全的登录状态复用、确定性输出。
  3. CLI 工具碎片化:各种工具分散,缺乏统一发现和调用机制。
  4. Electron 应用自动化:桌面应用缺乏自动化接口。

目标用户

  • 普通用户:通过命令行快速使用网站功能
  • AI Agent 开发者:为 Agent 提供浏览器操作和 CLI 调用能力
  • 网站自动化开发者:编写适配器将网站转为 CLI 命令
  • Claude Code / Cursor 用户:使用内置技能快速操作网站

1.2 目标用户与使用场景

核心场景

  • AI Agent 实时网站操作:Agent 通过 OpenCLI 操作用户已登录的浏览器
  • 确定性网站 CLI 命令:使用预置适配器(70+ 网站)
  • CLI 工具统一管理:作为统一入口发现、安装、调用各种 CLI
  • Electron 应用控制:直接控制 Cursor、ChatGPT 等桌面应用

1.3 核心技术亮点

  • 分层插件化架构:抽象浏览器操作、插件化适配器
  • 安全的会话复用:Daemon + Extension 架构,多层安全防御
  • AI Agent 友好:结构化技能、确定性输出
  • 70+ 预置网站适配器:开箱即用
  • 多种浏览器连接方式:BrowserBridge(扩展)、CDPBridge(直接 CDP)
  • 策略模式适配器:PUBLIC/COOKIE/HEADER/INTERCEPT/UI 多种策略

1.4 技术栈与选型对比

层级技术选型
运行时Node.js >= 21.0.0
CLI 框架Commander.js
浏览器通信Chrome DevTools Protocol (CDP), WebSocket (ws)
数据格式JSON, YAML, CSV, Markdown
测试框架Vitest
文档工具VitePress

关键选型决策

  • 直接使用 CDP 而非 Puppeteer:可连接任意 Chrome 实例、复用登录会话
  • Daemon + Extension 架构:安全地桥接 CLI 和浏览器
  • Skills 系统:为 AI Agent 提供结构化工作流

2. 整体架构设计

2.1 架构概述

OpenCLI 采用分层插件化架构,通过标准化的接口将 CLI、浏览器自动化、网站适配器和 AI 技能组合在一起。架构设计的核心理念是:

  • 抽象浏览器操作:通过 IPage 接口统一不同浏览器控制方式
  • 插件化适配器:网站适配器可以独立开发和注册
  • 安全的会话复用:通过 Daemon + Extension 架构复用浏览器登录状态
  • AI Agent 友好:提供结构化的技能和确定性的输出

2.2 整体架构图 (ASCII)

text
┌─────────────────────────────────────────────────────────────────────────────┐
+import{_ as t,r as h,c as r,o as d,d as e,b as a,a as i,w as k,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const o=JSON.parse('{"title":"OpenCLI 开源项目解读","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","frontmatter":{"date":"2026-04-11T14:52:34.000Z","title":"OpenCLI 开源项目解读","tldr":"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","abstract":"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。","permalink":"/insight-labs/repo-insight/open-cli","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/open-cli.md","filePath":"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md"}'),E={name:"insight-labs/repo-insight/open-cli.md"};function F(g,s,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return d(),r("div",null,[s[0]||(s[0]=e(`

OpenCLI 开源项目解读

项目信息

  • 项目名称:OpenCLI

  • 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。

  • 项目地址:https://github.com/jackwener/OpenCLI

  • 核心功能

    • 70+ 预置网站适配器(bilibili、twitter、hackernews 等)
    • 浏览器自动化(复用登录会话,无需密码)
    • Electron 应用控制(Cursor、ChatGPT 等)
    • CLI 工具统一管理
    • AI Agent 友好的技能系统

1. 项目概览

1.1 项目定位与核心价值

一句话定位:OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动型自动化平台。

核心痛点解决

  1. 网站操作自动化困难:传统爬虫易被反爬虫拦截,需要复用已登录会话。
  2. AI Agent 缺乏可靠的网站操作能力:需要标准化接口、安全的登录状态复用、确定性输出。
  3. CLI 工具碎片化:各种工具分散,缺乏统一发现和调用机制。
  4. Electron 应用自动化:桌面应用缺乏自动化接口。

目标用户

  • 普通用户:通过命令行快速使用网站功能
  • AI Agent 开发者:为 Agent 提供浏览器操作和 CLI 调用能力
  • 网站自动化开发者:编写适配器将网站转为 CLI 命令
  • Claude Code / Cursor 用户:使用内置技能快速操作网站

1.2 目标用户与使用场景

核心场景

  • AI Agent 实时网站操作:Agent 通过 OpenCLI 操作用户已登录的浏览器
  • 确定性网站 CLI 命令:使用预置适配器(70+ 网站)
  • CLI 工具统一管理:作为统一入口发现、安装、调用各种 CLI
  • Electron 应用控制:直接控制 Cursor、ChatGPT 等桌面应用

1.3 核心技术亮点

  • 分层插件化架构:抽象浏览器操作、插件化适配器
  • 安全的会话复用:Daemon + Extension 架构,多层安全防御
  • AI Agent 友好:结构化技能、确定性输出
  • 70+ 预置网站适配器:开箱即用
  • 多种浏览器连接方式:BrowserBridge(扩展)、CDPBridge(直接 CDP)
  • 策略模式适配器:PUBLIC/COOKIE/HEADER/INTERCEPT/UI 多种策略

1.4 技术栈与选型对比

层级技术选型
运行时Node.js >= 21.0.0
CLI 框架Commander.js
浏览器通信Chrome DevTools Protocol (CDP), WebSocket (ws)
数据格式JSON, YAML, CSV, Markdown
测试框架Vitest
文档工具VitePress

关键选型决策

  • 直接使用 CDP 而非 Puppeteer:可连接任意 Chrome 实例、复用登录会话
  • Daemon + Extension 架构:安全地桥接 CLI 和浏览器
  • Skills 系统:为 AI Agent 提供结构化工作流

2. 整体架构设计

2.1 架构概述

OpenCLI 采用分层插件化架构,通过标准化的接口将 CLI、浏览器自动化、网站适配器和 AI 技能组合在一起。架构设计的核心理念是:

  • 抽象浏览器操作:通过 IPage 接口统一不同浏览器控制方式
  • 插件化适配器:网站适配器可以独立开发和注册
  • 安全的会话复用:通过 Daemon + Extension 架构复用浏览器登录状态
  • AI Agent 友好:提供结构化的技能和确定性的输出

2.2 整体架构图 (ASCII)

text
┌─────────────────────────────────────────────────────────────────────────────┐
 │                         用户 / AI Agent 层                                   │
 │  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐                   │
 │  │   人类用户   │    │  Claude Code │    │   其他 Agent │                   │
diff --git a/assets/insight-labs_repo-insight_open-cli.md.eC85uCpN.lean.js b/assets/insight-labs_repo-insight_open-cli.md.BUMPTS97.lean.js
similarity index 99%
rename from assets/insight-labs_repo-insight_open-cli.md.eC85uCpN.lean.js
rename to assets/insight-labs_repo-insight_open-cli.md.BUMPTS97.lean.js
index 61e1782..a407a24 100644
--- a/assets/insight-labs_repo-insight_open-cli.md.eC85uCpN.lean.js
+++ b/assets/insight-labs_repo-insight_open-cli.md.BUMPTS97.lean.js
@@ -1 +1 @@
-import{_ as t,r as h,c as r,o as d,d as e,b as a,a as i,w as k,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const o=JSON.parse('{"title":"OpenCLI 开源项目解读","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","frontmatter":{"date":"2026-04-11T14:52:34.000Z","title":"OpenCLI 开源项目解读","tldr":"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","abstract":"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。","permalink":"/insight-labs/repo-insight/open-cli","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/open-cli.md","filePath":"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md"}'),E={name:"insight-labs/repo-insight/open-cli.md"};function F(g,s,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return d(),r("div",null,[s[0]||(s[0]=e("",71)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%2FAgent%0A%20%20%20%20participant%20CLI%20as%20main.ts%0A%20%20%20%20participant%20Daemon%20as%20daemon.ts%0A%20%20%20%20participant%20Ext%20as%20Browser%20Extension%0A%20%20%20%20participant%20Chrome%20as%20Chrome%2FChromium%0A%0A%20%20%20%20User-%3E%3ECLI%3A%20opencli%20browser%20open%20%3Curl%3E%0A%20%20%20%20activate%20CLI%0A%0A%20%20%20%20CLI-%3E%3ECLI%3A%20%E6%A3%80%E6%9F%A5%20daemon%20%E6%98%AF%E5%90%A6%E8%BF%90%E8%A1%8C%0A%20%20%20%20alt%20Daemon%20%E6%9C%AA%E8%BF%90%E8%A1%8C%0A%20%20%20%20%20%20%20%20CLI-%3E%3ECLI%3A%20%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%20daemon%20(%E5%AD%90%E8%BF%9B%E7%A8%8B)%0A%20%20%20%20end%0A%0A%20%20%20%20CLI-%3E%3EDaemon%3A%20GET%20%2Fping%20(%E6%A3%80%E6%9F%A5%E5%81%A5%E5%BA%B7)%0A%20%20%20%20activate%20Daemon%0A%20%20%20%20Daemon--%3E%3ECLI%3A%20%7Bok%3A%20true%7D%0A%20%20%20%20deactivate%20Daemon%0A%0A%20%20%20%20CLI-%3E%3EDaemon%3A%20POST%20%2Fcommand%20%7Bid%2C%20cmd%3A%20%22open%22%2C%20url%7D%0A%20%20%20%20activate%20Daemon%0A%0A%20%20%20%20alt%20Extension%20%E6%9C%AA%E8%BF%9E%E6%8E%A5%0A%20%20%20%20%20%20%20%20Daemon--%3E%3ECLI%3A%20503%20%7Berror%3A%20%22Extension%20not%20connected%22%7D%0A%20%20%20%20%20%20%20%20CLI-%3E%3EUser%3A%20%E6%98%BE%E7%A4%BA%E9%94%99%E8%AF%AF%E6%8F%90%E7%A4%BA%0A%20%20%20%20%20%20%20%20deactivate%20CLI%0A%20%20%20%20%20%20%20%20stop%0A%20%20%20%20end%0A%0A%20%20%20%20Daemon-%3E%3EExt%3A%20WebSocket%20%E5%8F%91%E9%80%81%20%7Bid%2C%20cmd%3A%20%22open%22%2C%20url%7D%0A%20%20%20%20activate%20Ext%0A%0A%20%20%20%20Ext-%3E%3EChrome%3A%20CDP%20%E6%89%93%E5%BC%80%20URL%0A%20%20%20%20activate%20Chrome%0A%20%20%20%20Chrome--%3E%3EExt%3A%20%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Chrome%0A%0A%20%20%20%20Ext--%3E%3EDaemon%3A%20WebSocket%20%E8%BF%94%E5%9B%9E%20%7Bid%2C%20ok%3A%20true%2C%20page%3A%20targetId%7D%0A%20%20%20%20deactivate%20Ext%0A%0A%20%20%20%20Daemon--%3E%3ECLI%3A%20HTTP%20200%20%7Bid%2C%20ok%3A%20true%2C%20page%3A%20targetId%7D%0A%20%20%20%20deactivate%20Daemon%0A%0A%20%20%20%20CLI-%3E%3EUser%3A%20%E8%BE%93%E5%87%BA%20JSON%20%E7%BB%93%E6%9E%9C%0A%20%20%20%20deactivate%20CLI%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=i("h3",{id:"_5-2-网站适配器执行流程",tabindex:"-1"},[n("5.2 网站适配器执行流程 "),i("a",{class:"header-anchor",href:"#_5-2-网站适配器执行流程","aria-label":"Permalink to “5.2 网站适配器执行流程”"},"​")],-1)),s[2]||(s[2]=i("p",null,[i("strong",null,"场景说明"),n(":用户执行 "),i("code",null,"opencli bilibili hot --limit 5"),n(",这是典型的适配器使用流程。")],-1)),s[3]||(s[3]=i("p",null,[i("strong",null,"流转时序图 (Mermaid)"),n(":")],-1)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20CLI%20as%20cli.ts%0A%20%20%20%20participant%20Exec%20as%20execution.ts%0A%20%20%20%20participant%20Launcher%20as%20launcher.ts%0A%20%20%20%20participant%20Adapter%20as%20Bilibili%20Adapter%0A%20%20%20%20participant%20Page%20as%20IPage%0A%20%20%20%20participant%20Output%20as%20output.ts%0A%0A%20%20%20%20User-%3E%3ECLI%3A%20opencli%20bilibili%20hot%20--limit%205%0A%20%20%20%20activate%20CLI%0A%0A%20%20%20%20CLI-%3E%3ECLI%3A%20%E4%BB%8E%20Registry%20%E6%9F%A5%E6%89%BE%20bilibili%2Fhot%0A%20%20%20%20CLI-%3E%3EExec%3A%20executeCommand(cmd%2C%20args)%0A%20%20%20%20activate%20Exec%0A%0A%20%20%20%20Exec-%3E%3EExec%3A%20normalizeCommand(cmd)%0A%20%20%20%20note%20over%20Exec%3A%20%E6%A0%B9%E6%8D%AE%20Strategy%20%E7%A1%AE%E5%AE%9A%20browser%3Dtrue%2C%20navigateBefore%0A%0A%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E6%B5%8F%E8%A7%88%E5%99%A8%0A%20%20%20%20%20%20%20%20Exec-%3E%3ELauncher%3A%20getBrowserSession()%0A%20%20%20%20%20%20%20%20activate%20Launcher%0A%20%20%20%20%20%20%20%20Launcher-%3E%3ELauncher%3A%20%E6%A3%80%E6%9F%A5%2F%E5%90%AF%E5%8A%A8%20daemon%2Bextension%0A%20%20%20%20%20%20%20%20Launcher--%3E%3EExec%3A%20%E8%BF%94%E5%9B%9E%20IPage%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20%20%20%20%20deactivate%20Launcher%0A%0A%20%20%20%20%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E9%A2%84%E5%AF%BC%E8%88%AA%0A%20%20%20%20%20%20%20%20%20%20%20%20Exec-%3E%3EPage%3A%20page.goto(navigateBeforeUrl)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20Page%0A%20%20%20%20%20%20%20%20%20%20%20%20Page-%3E%3EPage%3A%20%E7%AD%89%E5%BE%85%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20Page%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A%0A%20%20%20%20Exec-%3E%3EAdapter%3A%20%E8%B0%83%E7%94%A8%20cmd.func(page%2C%20args)%0A%20%20%20%20activate%20Adapter%0A%0A%20%20%20%20alt%20%E4%BD%BF%E7%94%A8%20Pipeline%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EExec%3A%20pipeline%20%E6%89%A7%E8%A1%8C%0A%20%20%20%20else%20%E4%BD%BF%E7%94%A8%20func%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EPage%3A%20%E5%90%84%E7%A7%8D%E9%A1%B5%E9%9D%A2%E6%93%8D%E4%BD%9C%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EPage%3A%20page.evaluate(js)%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EPage%3A%20page.extract(selector)%0A%20%20%20%20%20%20%20%20Page--%3E%3EAdapter%3A%20%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE%0A%20%20%20%20end%0A%0A%20%20%20%20Adapter--%3E%3EExec%3A%20%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C%E6%95%B0%E6%8D%AE%0A%20%20%20%20deactivate%20Adapter%0A%0A%20%20%20%20Exec-%3E%3EOutput%3A%20formatOutput(data%2C%20format)%0A%20%20%20%20activate%20Output%0A%20%20%20%20Output-%3E%3EOutput%3A%20%E6%A0%BC%E5%BC%8F%E5%8C%96%20(table%2Fjson%2Fyaml%2Fmd%2Fcsv)%0A%20%20%20%20Output--%3E%3EUser%3A%20%E8%BE%93%E5%87%BA%E7%BB%93%E6%9E%9C%0A%20%20%20%20deactivate%20Output%0A%0A%20%20%20%20deactivate%20Exec%0A%20%20%20%20deactivate%20CLI%0A",showToolbar:"1"})]),_:1}),s[4]||(s[4]=e("",18))])}const u=t(E,[["render",F]]);export{o as __pageData,u as default};
+import{_ as t,r as h,c as r,o as d,d as e,b as a,a as i,w as k,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const o=JSON.parse('{"title":"OpenCLI 开源项目解读","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","frontmatter":{"date":"2026-04-11T14:52:34.000Z","title":"OpenCLI 开源项目解读","tldr":"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。","description":"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。","abstract":"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。","permalink":"/insight-labs/repo-insight/open-cli","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/open-cli.md","filePath":"31.Insight Labs/11.Reop Insight Reports/10.open-cli.md"}'),E={name:"insight-labs/repo-insight/open-cli.md"};function F(g,s,y,c,b,C){const p=h("MermaidChart"),l=h("ClientOnly");return d(),r("div",null,[s[0]||(s[0]=e("",71)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%2FAgent%0A%20%20%20%20participant%20CLI%20as%20main.ts%0A%20%20%20%20participant%20Daemon%20as%20daemon.ts%0A%20%20%20%20participant%20Ext%20as%20Browser%20Extension%0A%20%20%20%20participant%20Chrome%20as%20Chrome%2FChromium%0A%0A%20%20%20%20User-%3E%3ECLI%3A%20opencli%20browser%20open%20%3Curl%3E%0A%20%20%20%20activate%20CLI%0A%0A%20%20%20%20CLI-%3E%3ECLI%3A%20%E6%A3%80%E6%9F%A5%20daemon%20%E6%98%AF%E5%90%A6%E8%BF%90%E8%A1%8C%0A%20%20%20%20alt%20Daemon%20%E6%9C%AA%E8%BF%90%E8%A1%8C%0A%20%20%20%20%20%20%20%20CLI-%3E%3ECLI%3A%20%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%20daemon%20(%E5%AD%90%E8%BF%9B%E7%A8%8B)%0A%20%20%20%20end%0A%0A%20%20%20%20CLI-%3E%3EDaemon%3A%20GET%20%2Fping%20(%E6%A3%80%E6%9F%A5%E5%81%A5%E5%BA%B7)%0A%20%20%20%20activate%20Daemon%0A%20%20%20%20Daemon--%3E%3ECLI%3A%20%7Bok%3A%20true%7D%0A%20%20%20%20deactivate%20Daemon%0A%0A%20%20%20%20CLI-%3E%3EDaemon%3A%20POST%20%2Fcommand%20%7Bid%2C%20cmd%3A%20%22open%22%2C%20url%7D%0A%20%20%20%20activate%20Daemon%0A%0A%20%20%20%20alt%20Extension%20%E6%9C%AA%E8%BF%9E%E6%8E%A5%0A%20%20%20%20%20%20%20%20Daemon--%3E%3ECLI%3A%20503%20%7Berror%3A%20%22Extension%20not%20connected%22%7D%0A%20%20%20%20%20%20%20%20CLI-%3E%3EUser%3A%20%E6%98%BE%E7%A4%BA%E9%94%99%E8%AF%AF%E6%8F%90%E7%A4%BA%0A%20%20%20%20%20%20%20%20deactivate%20CLI%0A%20%20%20%20%20%20%20%20stop%0A%20%20%20%20end%0A%0A%20%20%20%20Daemon-%3E%3EExt%3A%20WebSocket%20%E5%8F%91%E9%80%81%20%7Bid%2C%20cmd%3A%20%22open%22%2C%20url%7D%0A%20%20%20%20activate%20Ext%0A%0A%20%20%20%20Ext-%3E%3EChrome%3A%20CDP%20%E6%89%93%E5%BC%80%20URL%0A%20%20%20%20activate%20Chrome%0A%20%20%20%20Chrome--%3E%3EExt%3A%20%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Chrome%0A%0A%20%20%20%20Ext--%3E%3EDaemon%3A%20WebSocket%20%E8%BF%94%E5%9B%9E%20%7Bid%2C%20ok%3A%20true%2C%20page%3A%20targetId%7D%0A%20%20%20%20deactivate%20Ext%0A%0A%20%20%20%20Daemon--%3E%3ECLI%3A%20HTTP%20200%20%7Bid%2C%20ok%3A%20true%2C%20page%3A%20targetId%7D%0A%20%20%20%20deactivate%20Daemon%0A%0A%20%20%20%20CLI-%3E%3EUser%3A%20%E8%BE%93%E5%87%BA%20JSON%20%E7%BB%93%E6%9E%9C%0A%20%20%20%20deactivate%20CLI%0A",showToolbar:"1"})]),_:1}),s[1]||(s[1]=i("h3",{id:"_5-2-网站适配器执行流程",tabindex:"-1"},[n("5.2 网站适配器执行流程 "),i("a",{class:"header-anchor",href:"#_5-2-网站适配器执行流程","aria-label":"Permalink to “5.2 网站适配器执行流程”"},"​")],-1)),s[2]||(s[2]=i("p",null,[i("strong",null,"场景说明"),n(":用户执行 "),i("code",null,"opencli bilibili hot --limit 5"),n(",这是典型的适配器使用流程。")],-1)),s[3]||(s[3]=i("p",null,[i("strong",null,"流转时序图 (Mermaid)"),n(":")],-1)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20CLI%20as%20cli.ts%0A%20%20%20%20participant%20Exec%20as%20execution.ts%0A%20%20%20%20participant%20Launcher%20as%20launcher.ts%0A%20%20%20%20participant%20Adapter%20as%20Bilibili%20Adapter%0A%20%20%20%20participant%20Page%20as%20IPage%0A%20%20%20%20participant%20Output%20as%20output.ts%0A%0A%20%20%20%20User-%3E%3ECLI%3A%20opencli%20bilibili%20hot%20--limit%205%0A%20%20%20%20activate%20CLI%0A%0A%20%20%20%20CLI-%3E%3ECLI%3A%20%E4%BB%8E%20Registry%20%E6%9F%A5%E6%89%BE%20bilibili%2Fhot%0A%20%20%20%20CLI-%3E%3EExec%3A%20executeCommand(cmd%2C%20args)%0A%20%20%20%20activate%20Exec%0A%0A%20%20%20%20Exec-%3E%3EExec%3A%20normalizeCommand(cmd)%0A%20%20%20%20note%20over%20Exec%3A%20%E6%A0%B9%E6%8D%AE%20Strategy%20%E7%A1%AE%E5%AE%9A%20browser%3Dtrue%2C%20navigateBefore%0A%0A%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E6%B5%8F%E8%A7%88%E5%99%A8%0A%20%20%20%20%20%20%20%20Exec-%3E%3ELauncher%3A%20getBrowserSession()%0A%20%20%20%20%20%20%20%20activate%20Launcher%0A%20%20%20%20%20%20%20%20Launcher-%3E%3ELauncher%3A%20%E6%A3%80%E6%9F%A5%2F%E5%90%AF%E5%8A%A8%20daemon%2Bextension%0A%20%20%20%20%20%20%20%20Launcher--%3E%3EExec%3A%20%E8%BF%94%E5%9B%9E%20IPage%20%E5%AE%9E%E4%BE%8B%0A%20%20%20%20%20%20%20%20deactivate%20Launcher%0A%0A%20%20%20%20%20%20%20%20alt%20%E9%9C%80%E8%A6%81%E9%A2%84%E5%AF%BC%E8%88%AA%0A%20%20%20%20%20%20%20%20%20%20%20%20Exec-%3E%3EPage%3A%20page.goto(navigateBeforeUrl)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20Page%0A%20%20%20%20%20%20%20%20%20%20%20%20Page-%3E%3EPage%3A%20%E7%AD%89%E5%BE%85%E9%A1%B5%E9%9D%A2%E5%8A%A0%E8%BD%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20Page%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A%0A%20%20%20%20Exec-%3E%3EAdapter%3A%20%E8%B0%83%E7%94%A8%20cmd.func(page%2C%20args)%0A%20%20%20%20activate%20Adapter%0A%0A%20%20%20%20alt%20%E4%BD%BF%E7%94%A8%20Pipeline%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EExec%3A%20pipeline%20%E6%89%A7%E8%A1%8C%0A%20%20%20%20else%20%E4%BD%BF%E7%94%A8%20func%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EPage%3A%20%E5%90%84%E7%A7%8D%E9%A1%B5%E9%9D%A2%E6%93%8D%E4%BD%9C%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EPage%3A%20page.evaluate(js)%0A%20%20%20%20%20%20%20%20Adapter-%3E%3EPage%3A%20page.extract(selector)%0A%20%20%20%20%20%20%20%20Page--%3E%3EAdapter%3A%20%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE%0A%20%20%20%20end%0A%0A%20%20%20%20Adapter--%3E%3EExec%3A%20%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C%E6%95%B0%E6%8D%AE%0A%20%20%20%20deactivate%20Adapter%0A%0A%20%20%20%20Exec-%3E%3EOutput%3A%20formatOutput(data%2C%20format)%0A%20%20%20%20activate%20Output%0A%20%20%20%20Output-%3E%3EOutput%3A%20%E6%A0%BC%E5%BC%8F%E5%8C%96%20(table%2Fjson%2Fyaml%2Fmd%2Fcsv)%0A%20%20%20%20Output--%3E%3EUser%3A%20%E8%BE%93%E5%87%BA%E7%BB%93%E6%9E%9C%0A%20%20%20%20deactivate%20Output%0A%0A%20%20%20%20deactivate%20Exec%0A%20%20%20%20deactivate%20CLI%0A",showToolbar:"1"})]),_:1}),s[4]||(s[4]=e("",18))])}const u=t(E,[["render",F]]);export{o as __pageData,u as default};
diff --git a/assets/insight-labs_repo-insight_overview.md.BJ9OMyYd.js b/assets/insight-labs_repo-insight_overview.md.BodPHsDF.js
similarity index 51%
rename from assets/insight-labs_repo-insight_overview.md.BJ9OMyYd.js
rename to assets/insight-labs_repo-insight_overview.md.BodPHsDF.js
index 22d21b7..58bb487 100644
--- a/assets/insight-labs_repo-insight_overview.md.BJ9OMyYd.js
+++ b/assets/insight-labs_repo-insight_overview.md.BodPHsDF.js
@@ -1,5 +1,5 @@
-import{R as r,T as c}from"./chunks/ResourceCard.Org1H1aA.js";import{F as d}from"./chunks/FeatureGrid.C9SUnqP9.js";import{B as u}from"./chunks/Blockquote.acMDZFAD.js";import{C as b}from"./chunks/ConceptPair.DYvaVmrQ.js";import{f as m,c as n,g as o,o as a,a as e,t as g,k as p,_ as f,b as t,e as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                                          *//* empty css                                                                        *//* empty css                                                                          *//* empty css                                                                           */const v={key:0,class:"split-root"},A={key:0,class:"split-header split-header--left"},y=["innerHTML"],S={key:0,class:"split-divider"},I={key:0,class:"split-header split-header--right"},T=["innerHTML"],k=m({__name:"SplitPanel",props:{left:{},right:{},leftTitle:{},rightTitle:{},leftWidth:{},separator:{type:Boolean}},setup(i){return(h,s)=>i.left&&i.right?(a(),n("div",v,[e("div",{class:"split-pane",style:p({width:i.leftWidth||"50%"})},[i.leftTitle?(a(),n("div",A,g(i.leftTitle),1)):o("",!0),e("div",{class:"split-body",innerHTML:i.left},null,8,y)],4),i.separator!==!1?(a(),n("div",S)):o("",!0),e("div",{class:"split-pane",style:p({width:`calc(${100-parseFloat(i.leftWidth||"50")}% - ${i.separator!==!1?"1px":"0px"})`})},[i.rightTitle?(a(),n("div",I,g(i.rightTitle),1)):o("",!0),e("div",{class:"split-body",innerHTML:i.right},null,8,T)],4)])):o("",!0)}}),C=f(k,[["__scopeId","data-v-595327cf"]]),w=JSON.parse('{"title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","frontmatter":{"date":"2026-04-10T14:52:34.000Z","title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","permalink":"/insight-labs/repo-insight/overview","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/overview.md","filePath":"31.Insight Labs/10.repo-insight-overview.md"}'),L={name:"insight-labs/repo-insight/overview.md"},B=Object.assign(L,{setup(i){return(h,s)=>(a(),n("div",null,[s[0]||(s[0]=e("h1",{id:"repo-insight-engine",tabindex:"-1"},[l("Repo Insight Engine "),e("a",{class:"header-anchor",href:"#repo-insight-engine","aria-label":"Permalink to “Repo Insight Engine”"},"​")],-1)),t(u,{variant:"highlight",insight:"将碎片化的源码阅读转化为系统性的技术理解。",quote:"读源码,不止于理解代码做了什么,更要看到每一行背后,设计者为何如此设计——对权衡与取舍的考量。"}),t(r,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南可参考源代码仓库",url:"https://github.com/sqliang/deep-insight-engines/tree/main/engines/repo-insight",type:"github",tags:["AI","代码仓库","深度分析","中文报告"]},style:{"margin-bottom":"8px"}}),s[1]||(s[1]=e("h2",{id:"项目简介",tabindex:"-1"},[l("项目简介 "),e("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),s[2]||(s[2]=e("p",null,[e("strong",null,"repo-insight"),l(" 是一套开源项目代码仓库深度分析的 AI 引擎,用来帮助开发者快速理解项目架构、功能模块、代码质量等。")],-1)),t(C,{"left-title":"输入","right-title":"输出",left:"GitHub URL本地目录

无需额外配置,输入即开始分析",right:`全方位深度解读报告

+import{R as s,T as c}from"./chunks/ResourceCard.Cht61sMy.js";import{F as d}from"./chunks/FeatureGrid.LE2S2SBN.js";import{B as u}from"./chunks/Blockquote.B7nHhHWl.js";import{C as b}from"./chunks/ConceptPair.CDPz5jW2.js";import{f as m,c as n,g as o,o as a,a as t,t as g,k as p,_ as f,b as e,e as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css *//* empty css *//* empty css *//* empty css */const A={key:0,class:"split-root"},v={key:0,class:"split-header split-header--left"},S=["innerHTML"],y={key:0,class:"split-divider"},I={key:0,class:"split-header split-header--right"},T=["innerHTML"],k=m({__name:"SplitPanel",props:{left:{},right:{},leftTitle:{},rightTitle:{},leftWidth:{},separator:{type:Boolean}},setup(i){return(h,r)=>i.left&&i.right?(a(),n("div",A,[t("div",{class:"split-pane",style:p({width:i.leftWidth||"50%"})},[i.leftTitle?(a(),n("div",v,g(i.leftTitle),1)):o("",!0),t("div",{class:"split-body",innerHTML:i.left},null,8,S)],4),i.separator!==!1?(a(),n("div",y)):o("",!0),t("div",{class:"split-pane",style:p({width:`calc(${100-parseFloat(i.leftWidth||"50")}% - ${i.separator!==!1?"1px":"0px"})`})},[i.rightTitle?(a(),n("div",I,g(i.rightTitle),1)):o("",!0),t("div",{class:"split-body",innerHTML:i.right},null,8,T)],4)])):o("",!0)}}),C=f(k,[["__scopeId","data-v-595327cf"]]),O=JSON.parse('{"title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","frontmatter":{"date":"2026-04-10T14:52:34.000Z","title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","permalink":"/insight-labs/repo-insight/overview","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/overview.md","filePath":"31.Insight Labs/10.repo-insight-overview.md"}'),P={name:"insight-labs/repo-insight/overview.md"},R=Object.assign(P,{setup(i){return(h,r)=>(a(),n("div",null,[r[0]||(r[0]=t("h1",{id:"repo-insight-engine",tabindex:"-1"},[l("Repo Insight Engine "),t("a",{class:"header-anchor",href:"#repo-insight-engine","aria-label":"Permalink to “Repo Insight Engine”"},"​")],-1)),e(u,{variant:"highlight",insight:"将碎片化的源码阅读转化为系统性的技术理解。",quote:"读源码,不止于理解代码做了什么,更要看到每一行背后,设计者为何如此设计——对权衡与取舍的考量。"}),e(s,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南可参考源代码仓库",url:"https://github.com/sqliang/deep-insight-engines/tree/main/engines/repo-insight",type:"github",tags:["AI","代码仓库","深度分析","中文报告"]},style:{"margin-bottom":"8px"}}),r[1]||(r[1]=t("h2",{id:"项目简介",tabindex:"-1"},[l("项目简介 "),t("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),r[2]||(r[2]=t("p",null,[t("strong",null,"repo-insight"),l(" 是一套开源项目代码仓库深度分析的 AI 引擎,用来帮助开发者快速理解项目架构、功能模块、代码质量等。")],-1)),e(C,{"left-title":"输入","right-title":"输出",left:"GitHub URL本地目录

无需额外配置,输入即开始分析",right:`全方位深度解读报告

· 业务定位、用户画像与技术选型对比
· 整体架构设计(ASCII 图)与模块依赖拓扑
· 核心模块设计详解与关键数据流时序
- · 接口契约、快速入门与角色化阅读指南`}),s[3]||(s[3]=e("p",null,[e("strong",null,"核心能力一览:")],-1)),t(d,{items:[{icon:"🔍",title:"一键分析",description:"GitHub URL 或本地目录,输入即分析"},{icon:"📊",title:"深度报告",description:"项目概述 → 架构分析 → 核心模块逐层解读"},{icon:"🇨🇳",title:"中文支持",description:"自动翻译 README、生成中文代码注释"},{icon:"🤖",title:"全自动执行",description:"调用后无需中间交互,全程自动完成"}]}),t(b,{title:"两种实现,按场景选用",connector:"互补",left:{label:"repo-insight",description:"纯 Agent Skill · 5+2 阶段工作流",points:["内置质量审查闭环,产出可交付报告","subAgent 并行处理复杂模块","面向中大型仓库(>500 文件)"]},right:{label:"github-source-decoder",description:"Python 脚本 + Claude 混合架构",points:["轻量快速,即开即用","面向中小型仓库(<100 文件)","适合快速概览与初筛"]}}),t(c,{layout:"vertical",events:[{date:"当前",title:"Skill 形态打磨 & 语义级分析",icon:"🔧",description:"围绕 Agent Skill 形态打磨核心分析能力,持续优化工作流与报告质量。引入 tree-sitter AST 解析,将分析深度从结构级推向语义级,实现函数调用链追踪与代码复杂度量化。"},{date:"后续",title:"Multi-Agent 架构",icon:"🌳",description:"架构分析、代码解析、业务理解、质量审查由独立 Agent 分工,协调 Agent 整合产出,进化为专业源码解读系统"}]}),s[4]||(s[4]=e("h2",{id:"解读案例",tabindex:"-1"},[l("解读案例 "),e("a",{class:"header-anchor",href:"#解读案例","aria-label":"Permalink to “解读案例”"},"​")],-1)),s[5]||(s[5]=e("p",null,"以下是通过 repo-insight 生成的深度分析报告,展示不同类型仓库的解读效果:",-1)),t(r,{resource:{name:"amis",description:"百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。",url:"/insight-labs/repo-insight/amis",type:"github",tags:["低代码","前端","框架"]}}),t(r,{resource:{name:"knova",description:"一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。",url:"/insight-labs/repo-insight/konva",type:"github",tags:["Canvas","前端","图形库"]}}),t(r,{resource:{name:"ECharts",description:"一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目",url:"/insight-labs/repo-insight/echarts",type:"github",tags:["ECharts","前端","图表库"]}}),t(r,{resource:{name:"Lottie Web",description:" Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。",url:"/insight-labs/repo-insight/lottie-web",type:"github",tags:["LottieWeb","前端","动画库"]}}),t(r,{resource:{name:"Three.js",description:"一个开源基于 JavaScript 的 Web 库用框架,用于创建 3D 模型、动画和交互。",url:"/insight-labs/repo-insight/three-js",type:"github",tags:["Three.js","前端","3D库"]}}),t(r,{resource:{name:"fetch-event-source",description:"微软开源的基于 Fetch API 的 SSE 客户端库,用于简化与服务器的实时通信。",url:"/insight-labs/repo-insight/fetch-event-source",type:"github",tags:["SSE","Microsoft"]}}),t(r,{resource:{name:"Vercel AI SDK",description:"Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。",url:"/insight-labs/repo-insight/vercel-ai-sdk",type:"github",tags:["AI SDK","TypeScript","Vercel"]}}),t(r,{resource:{name:"open-cli",description:"OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。",url:"/insight-labs/repo-insight/open-cli",type:"github",tags:["CLI","Automation","AI"]}})]))}});export{w as __pageData,B as default}; + · 接口契约、快速入门与角色化阅读指南`}),r[3]||(r[3]=t("p",null,[t("strong",null,"核心能力一览:")],-1)),e(d,{items:[{icon:"🔍",title:"一键分析",description:"GitHub URL 或本地目录,输入即分析"},{icon:"📊",title:"深度报告",description:"项目概述 → 架构分析 → 核心模块逐层解读"},{icon:"🇨🇳",title:"中文支持",description:"自动翻译 README、生成中文代码注释"},{icon:"🤖",title:"全自动执行",description:"调用后无需中间交互,全程自动完成"}]}),e(b,{title:"两种实现,按场景选用",connector:"互补",left:{label:"repo-insight",description:"纯 Agent Skill · 5+2 阶段工作流",points:["内置质量审查闭环,产出可交付报告","subAgent 并行处理复杂模块","面向中大型仓库(>500 文件)"]},right:{label:"github-source-decoder",description:"Python 脚本 + Claude 混合架构",points:["轻量快速,即开即用","面向中小型仓库(<100 文件)","适合快速概览与初筛"]}}),e(c,{layout:"vertical",events:[{date:"当前",title:"Skill 形态打磨 & 语义级分析",icon:"🔧",description:"围绕 Agent Skill 形态打磨核心分析能力,持续优化工作流与报告质量。引入 tree-sitter AST 解析,将分析深度从结构级推向语义级,实现函数调用链追踪与代码复杂度量化。"},{date:"后续",title:"Multi-Agent 架构",icon:"🌳",description:"架构分析、代码解析、业务理解、质量审查由独立 Agent 分工,协调 Agent 整合产出,进化为专业源码解读系统"}]}),r[4]||(r[4]=t("h2",{id:"解读案例",tabindex:"-1"},[l("解读案例 "),t("a",{class:"header-anchor",href:"#解读案例","aria-label":"Permalink to “解读案例”"},"​")],-1)),r[5]||(r[5]=t("p",null,"以下是通过 repo-insight 生成的深度分析报告,展示不同类型仓库的解读效果:",-1)),e(s,{resource:{name:"amis",description:"百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。",url:"/insight-labs/repo-insight/amis",type:"github",tags:["低代码","前端","框架"]}}),e(s,{resource:{name:"knova",description:"一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。",url:"/insight-labs/repo-insight/konva",type:"github",tags:["Canvas","前端","图形库"]}}),e(s,{resource:{name:"ECharts",description:"一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目",url:"/insight-labs/repo-insight/echarts",type:"github",tags:["ECharts","前端","图表库"]}}),e(s,{resource:{name:"Lottie Web",description:" Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。",url:"/insight-labs/repo-insight/lottie-web",type:"github",tags:["LottieWeb","前端","动画库"]}}),e(s,{resource:{name:"Three.js",description:"一个开源基于 JavaScript 的 Web 库用框架,用于创建 3D 模型、动画和交互。",url:"/insight-labs/repo-insight/three-js",type:"github",tags:["Three.js","前端","3D库"]}}),e(s,{resource:{name:"Pretext",description:"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。",url:"/insight-labs/repo-insight/pretext",type:"github",tags:["Pretext","前端","文本库"]}}),e(s,{resource:{name:"Animejs",description:"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。",url:"/insight-labs/repo-insight/animejs",type:"github",tags:["Animejs","前端","动画库"]}}),e(s,{resource:{name:"fetch-event-source",description:"微软开源的基于 Fetch API 的 SSE 客户端库,用于简化与服务器的实时通信。",url:"/insight-labs/repo-insight/fetch-event-source",type:"github",tags:["SSE","Microsoft"]}}),e(s,{resource:{name:"Vercel AI SDK",description:"Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。",url:"/insight-labs/repo-insight/vercel-ai-sdk",type:"github",tags:["AI SDK","TypeScript","Vercel"]}}),e(s,{resource:{name:"A2UI",description:"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。",url:"/insight-labs/repo-insight/a2ui",type:"github",tags:["AI UI","TypeScript","Google"]}}),e(s,{resource:{name:"open-cli",description:"OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。",url:"/insight-labs/repo-insight/open-cli",type:"github",tags:["CLI","Automation","AI"]}})]))}});export{O as __pageData,R as default}; diff --git a/assets/insight-labs_repo-insight_overview.md.BJ9OMyYd.lean.js b/assets/insight-labs_repo-insight_overview.md.BodPHsDF.lean.js similarity index 51% rename from assets/insight-labs_repo-insight_overview.md.BJ9OMyYd.lean.js rename to assets/insight-labs_repo-insight_overview.md.BodPHsDF.lean.js index 22d21b7..58bb487 100644 --- a/assets/insight-labs_repo-insight_overview.md.BJ9OMyYd.lean.js +++ b/assets/insight-labs_repo-insight_overview.md.BodPHsDF.lean.js @@ -1,5 +1,5 @@ -import{R as r,T as c}from"./chunks/ResourceCard.Org1H1aA.js";import{F as d}from"./chunks/FeatureGrid.C9SUnqP9.js";import{B as u}from"./chunks/Blockquote.acMDZFAD.js";import{C as b}from"./chunks/ConceptPair.DYvaVmrQ.js";import{f as m,c as n,g as o,o as a,a as e,t as g,k as p,_ as f,b as t,e as l}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css *//* empty css *//* empty css *//* empty css */const v={key:0,class:"split-root"},A={key:0,class:"split-header split-header--left"},y=["innerHTML"],S={key:0,class:"split-divider"},I={key:0,class:"split-header split-header--right"},T=["innerHTML"],k=m({__name:"SplitPanel",props:{left:{},right:{},leftTitle:{},rightTitle:{},leftWidth:{},separator:{type:Boolean}},setup(i){return(h,s)=>i.left&&i.right?(a(),n("div",v,[e("div",{class:"split-pane",style:p({width:i.leftWidth||"50%"})},[i.leftTitle?(a(),n("div",A,g(i.leftTitle),1)):o("",!0),e("div",{class:"split-body",innerHTML:i.left},null,8,y)],4),i.separator!==!1?(a(),n("div",S)):o("",!0),e("div",{class:"split-pane",style:p({width:`calc(${100-parseFloat(i.leftWidth||"50")}% - ${i.separator!==!1?"1px":"0px"})`})},[i.rightTitle?(a(),n("div",I,g(i.rightTitle),1)):o("",!0),e("div",{class:"split-body",innerHTML:i.right},null,8,T)],4)])):o("",!0)}}),C=f(k,[["__scopeId","data-v-595327cf"]]),w=JSON.parse('{"title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","frontmatter":{"date":"2026-04-10T14:52:34.000Z","title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","permalink":"/insight-labs/repo-insight/overview","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/overview.md","filePath":"31.Insight Labs/10.repo-insight-overview.md"}'),L={name:"insight-labs/repo-insight/overview.md"},B=Object.assign(L,{setup(i){return(h,s)=>(a(),n("div",null,[s[0]||(s[0]=e("h1",{id:"repo-insight-engine",tabindex:"-1"},[l("Repo Insight Engine "),e("a",{class:"header-anchor",href:"#repo-insight-engine","aria-label":"Permalink to “Repo Insight Engine”"},"​")],-1)),t(u,{variant:"highlight",insight:"将碎片化的源码阅读转化为系统性的技术理解。",quote:"读源码,不止于理解代码做了什么,更要看到每一行背后,设计者为何如此设计——对权衡与取舍的考量。"}),t(r,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南可参考源代码仓库",url:"https://github.com/sqliang/deep-insight-engines/tree/main/engines/repo-insight",type:"github",tags:["AI","代码仓库","深度分析","中文报告"]},style:{"margin-bottom":"8px"}}),s[1]||(s[1]=e("h2",{id:"项目简介",tabindex:"-1"},[l("项目简介 "),e("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),s[2]||(s[2]=e("p",null,[e("strong",null,"repo-insight"),l(" 是一套开源项目代码仓库深度分析的 AI 引擎,用来帮助开发者快速理解项目架构、功能模块、代码质量等。")],-1)),t(C,{"left-title":"输入","right-title":"输出",left:"GitHub URL本地目录

无需额外配置,输入即开始分析",right:`全方位深度解读报告

+import{R as s,T as c}from"./chunks/ResourceCard.Cht61sMy.js";import{F as d}from"./chunks/FeatureGrid.LE2S2SBN.js";import{B as u}from"./chunks/Blockquote.B7nHhHWl.js";import{C as b}from"./chunks/ConceptPair.CDPz5jW2.js";import{f as m,c as n,g as o,o as a,a as t,t as g,k as p,_ as f,b as e,e as l}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css *//* empty css *//* empty css *//* empty css */const A={key:0,class:"split-root"},v={key:0,class:"split-header split-header--left"},S=["innerHTML"],y={key:0,class:"split-divider"},I={key:0,class:"split-header split-header--right"},T=["innerHTML"],k=m({__name:"SplitPanel",props:{left:{},right:{},leftTitle:{},rightTitle:{},leftWidth:{},separator:{type:Boolean}},setup(i){return(h,r)=>i.left&&i.right?(a(),n("div",A,[t("div",{class:"split-pane",style:p({width:i.leftWidth||"50%"})},[i.leftTitle?(a(),n("div",v,g(i.leftTitle),1)):o("",!0),t("div",{class:"split-body",innerHTML:i.left},null,8,S)],4),i.separator!==!1?(a(),n("div",y)):o("",!0),t("div",{class:"split-pane",style:p({width:`calc(${100-parseFloat(i.leftWidth||"50")}% - ${i.separator!==!1?"1px":"0px"})`})},[i.rightTitle?(a(),n("div",I,g(i.rightTitle),1)):o("",!0),t("div",{class:"split-body",innerHTML:i.right},null,8,T)],4)])):o("",!0)}}),C=f(k,[["__scopeId","data-v-595327cf"]]),O=JSON.parse('{"title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","frontmatter":{"date":"2026-04-10T14:52:34.000Z","title":"Repo Insight Engine","description":"深度分析 GitHub 源代码仓库的 Agent Skill,一键生成中文架构报告","permalink":"/insight-labs/repo-insight/overview","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/overview.md","filePath":"31.Insight Labs/10.repo-insight-overview.md"}'),P={name:"insight-labs/repo-insight/overview.md"},R=Object.assign(P,{setup(i){return(h,r)=>(a(),n("div",null,[r[0]||(r[0]=t("h1",{id:"repo-insight-engine",tabindex:"-1"},[l("Repo Insight Engine "),t("a",{class:"header-anchor",href:"#repo-insight-engine","aria-label":"Permalink to “Repo Insight Engine”"},"​")],-1)),e(u,{variant:"highlight",insight:"将碎片化的源码阅读转化为系统性的技术理解。",quote:"读源码,不止于理解代码做了什么,更要看到每一行背后,设计者为何如此设计——对权衡与取舍的考量。"}),e(s,{resource:{name:"📦 源代码仓库",description:"更详细的功能、设计细节与安装指南可参考源代码仓库",url:"https://github.com/sqliang/deep-insight-engines/tree/main/engines/repo-insight",type:"github",tags:["AI","代码仓库","深度分析","中文报告"]},style:{"margin-bottom":"8px"}}),r[1]||(r[1]=t("h2",{id:"项目简介",tabindex:"-1"},[l("项目简介 "),t("a",{class:"header-anchor",href:"#项目简介","aria-label":"Permalink to “项目简介”"},"​")],-1)),r[2]||(r[2]=t("p",null,[t("strong",null,"repo-insight"),l(" 是一套开源项目代码仓库深度分析的 AI 引擎,用来帮助开发者快速理解项目架构、功能模块、代码质量等。")],-1)),e(C,{"left-title":"输入","right-title":"输出",left:"GitHub URL本地目录

无需额外配置,输入即开始分析",right:`全方位深度解读报告

· 业务定位、用户画像与技术选型对比
· 整体架构设计(ASCII 图)与模块依赖拓扑
· 核心模块设计详解与关键数据流时序
- · 接口契约、快速入门与角色化阅读指南`}),s[3]||(s[3]=e("p",null,[e("strong",null,"核心能力一览:")],-1)),t(d,{items:[{icon:"🔍",title:"一键分析",description:"GitHub URL 或本地目录,输入即分析"},{icon:"📊",title:"深度报告",description:"项目概述 → 架构分析 → 核心模块逐层解读"},{icon:"🇨🇳",title:"中文支持",description:"自动翻译 README、生成中文代码注释"},{icon:"🤖",title:"全自动执行",description:"调用后无需中间交互,全程自动完成"}]}),t(b,{title:"两种实现,按场景选用",connector:"互补",left:{label:"repo-insight",description:"纯 Agent Skill · 5+2 阶段工作流",points:["内置质量审查闭环,产出可交付报告","subAgent 并行处理复杂模块","面向中大型仓库(>500 文件)"]},right:{label:"github-source-decoder",description:"Python 脚本 + Claude 混合架构",points:["轻量快速,即开即用","面向中小型仓库(<100 文件)","适合快速概览与初筛"]}}),t(c,{layout:"vertical",events:[{date:"当前",title:"Skill 形态打磨 & 语义级分析",icon:"🔧",description:"围绕 Agent Skill 形态打磨核心分析能力,持续优化工作流与报告质量。引入 tree-sitter AST 解析,将分析深度从结构级推向语义级,实现函数调用链追踪与代码复杂度量化。"},{date:"后续",title:"Multi-Agent 架构",icon:"🌳",description:"架构分析、代码解析、业务理解、质量审查由独立 Agent 分工,协调 Agent 整合产出,进化为专业源码解读系统"}]}),s[4]||(s[4]=e("h2",{id:"解读案例",tabindex:"-1"},[l("解读案例 "),e("a",{class:"header-anchor",href:"#解读案例","aria-label":"Permalink to “解读案例”"},"​")],-1)),s[5]||(s[5]=e("p",null,"以下是通过 repo-insight 生成的深度分析报告,展示不同类型仓库的解读效果:",-1)),t(r,{resource:{name:"amis",description:"百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。",url:"/insight-labs/repo-insight/amis",type:"github",tags:["低代码","前端","框架"]}}),t(r,{resource:{name:"knova",description:"一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。",url:"/insight-labs/repo-insight/konva",type:"github",tags:["Canvas","前端","图形库"]}}),t(r,{resource:{name:"ECharts",description:"一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目",url:"/insight-labs/repo-insight/echarts",type:"github",tags:["ECharts","前端","图表库"]}}),t(r,{resource:{name:"Lottie Web",description:" Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。",url:"/insight-labs/repo-insight/lottie-web",type:"github",tags:["LottieWeb","前端","动画库"]}}),t(r,{resource:{name:"Three.js",description:"一个开源基于 JavaScript 的 Web 库用框架,用于创建 3D 模型、动画和交互。",url:"/insight-labs/repo-insight/three-js",type:"github",tags:["Three.js","前端","3D库"]}}),t(r,{resource:{name:"fetch-event-source",description:"微软开源的基于 Fetch API 的 SSE 客户端库,用于简化与服务器的实时通信。",url:"/insight-labs/repo-insight/fetch-event-source",type:"github",tags:["SSE","Microsoft"]}}),t(r,{resource:{name:"Vercel AI SDK",description:"Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。",url:"/insight-labs/repo-insight/vercel-ai-sdk",type:"github",tags:["AI SDK","TypeScript","Vercel"]}}),t(r,{resource:{name:"open-cli",description:"OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。",url:"/insight-labs/repo-insight/open-cli",type:"github",tags:["CLI","Automation","AI"]}})]))}});export{w as __pageData,B as default}; + · 接口契约、快速入门与角色化阅读指南`}),r[3]||(r[3]=t("p",null,[t("strong",null,"核心能力一览:")],-1)),e(d,{items:[{icon:"🔍",title:"一键分析",description:"GitHub URL 或本地目录,输入即分析"},{icon:"📊",title:"深度报告",description:"项目概述 → 架构分析 → 核心模块逐层解读"},{icon:"🇨🇳",title:"中文支持",description:"自动翻译 README、生成中文代码注释"},{icon:"🤖",title:"全自动执行",description:"调用后无需中间交互,全程自动完成"}]}),e(b,{title:"两种实现,按场景选用",connector:"互补",left:{label:"repo-insight",description:"纯 Agent Skill · 5+2 阶段工作流",points:["内置质量审查闭环,产出可交付报告","subAgent 并行处理复杂模块","面向中大型仓库(>500 文件)"]},right:{label:"github-source-decoder",description:"Python 脚本 + Claude 混合架构",points:["轻量快速,即开即用","面向中小型仓库(<100 文件)","适合快速概览与初筛"]}}),e(c,{layout:"vertical",events:[{date:"当前",title:"Skill 形态打磨 & 语义级分析",icon:"🔧",description:"围绕 Agent Skill 形态打磨核心分析能力,持续优化工作流与报告质量。引入 tree-sitter AST 解析,将分析深度从结构级推向语义级,实现函数调用链追踪与代码复杂度量化。"},{date:"后续",title:"Multi-Agent 架构",icon:"🌳",description:"架构分析、代码解析、业务理解、质量审查由独立 Agent 分工,协调 Agent 整合产出,进化为专业源码解读系统"}]}),r[4]||(r[4]=t("h2",{id:"解读案例",tabindex:"-1"},[l("解读案例 "),t("a",{class:"header-anchor",href:"#解读案例","aria-label":"Permalink to “解读案例”"},"​")],-1)),r[5]||(r[5]=t("p",null,"以下是通过 repo-insight 生成的深度分析报告,展示不同类型仓库的解读效果:",-1)),e(s,{resource:{name:"amis",description:"百度开源的前端低代码框架,通过 JSON 配置自动生成后台管理页面,拥有 237+ 组件、自研表达式引擎和完整的可视化编辑器。",url:"/insight-labs/repo-insight/amis",type:"github",tags:["低代码","前端","框架"]}}),e(s,{resource:{name:"knova",description:"一个 HTML5 Canvas 2D 图形框架(v10.3.0),采用保留模式图形树架构,提供 Stage → Layer → Group → Shape 的四层抽象。支持 19 种内置形状、20 种滤镜、拖拽、动画和事件系统。",url:"/insight-labs/repo-insight/konva",type:"github",tags:["Canvas","前端","图形库"]}}),e(s,{resource:{name:"ECharts",description:"一个面向 Web 的声明式数据可视化图表库,基于纯 JavaScript/TypeScript 开发,底层依赖自研 Canvas 渲染引擎 [zrender](https://github.com/ecomfe/zrender)。本项目是 Apache 软件基金会的顶级开源项目",url:"/insight-labs/repo-insight/echarts",type:"github",tags:["ECharts","前端","图表库"]}}),e(s,{resource:{name:"Lottie Web",description:" Airbnb 开源的 Web 端 Adobe After Effects 动画解析与原生渲染引擎,支持将 AE 设计师通过 Bodymovin 插件导出的 JSON 动画数据在浏览器中以 SVG、Canvas 或 HTML 方式高性能原生播放。",url:"/insight-labs/repo-insight/lottie-web",type:"github",tags:["LottieWeb","前端","动画库"]}}),e(s,{resource:{name:"Three.js",description:"一个开源基于 JavaScript 的 Web 库用框架,用于创建 3D 模型、动画和交互。",url:"/insight-labs/repo-insight/three-js",type:"github",tags:["Three.js","前端","3D库"]}}),e(s,{resource:{name:"Pretext",description:"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。",url:"/insight-labs/repo-insight/pretext",type:"github",tags:["Pretext","前端","文本库"]}}),e(s,{resource:{name:"Animejs",description:"Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。",url:"/insight-labs/repo-insight/animejs",type:"github",tags:["Animejs","前端","动画库"]}}),e(s,{resource:{name:"fetch-event-source",description:"微软开源的基于 Fetch API 的 SSE 客户端库,用于简化与服务器的实时通信。",url:"/insight-labs/repo-insight/fetch-event-source",type:"github",tags:["SSE","Microsoft"]}}),e(s,{resource:{name:"Vercel AI SDK",description:"Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型。",url:"/insight-labs/repo-insight/vercel-ai-sdk",type:"github",tags:["AI SDK","TypeScript","Vercel"]}}),e(s,{resource:{name:"A2UI",description:"A2UI 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。",url:"/insight-labs/repo-insight/a2ui",type:"github",tags:["AI UI","TypeScript","Google"]}}),e(s,{resource:{name:"open-cli",description:"OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。",url:"/insight-labs/repo-insight/open-cli",type:"github",tags:["CLI","Automation","AI"]}})]))}});export{O as __pageData,R as default}; diff --git a/assets/insight-labs_repo-insight_pretext.md.-L6NQ6rn.js b/assets/insight-labs_repo-insight_pretext.md.-L6NQ6rn.js new file mode 100644 index 0000000..91144af --- /dev/null +++ b/assets/insight-labs_repo-insight_pretext.md.-L6NQ6rn.js @@ -0,0 +1,579 @@ +import{_ as k,r as t,c as r,o as d,d as h,b as i,a as s,w as e,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const A=JSON.parse('{"title":"Pretext 开源项目解读","description":"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Pretext 开源项目解读","tldr":"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。","description":"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。","abstract":null,"permalink":"/insight-labs/repo-insight/pretext","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/pretext.md","filePath":"31.Insight Labs/11.Reop Insight Reports/06.pretext.md"}'),c={name:"insight-labs/repo-insight/pretext.md"};function F(g,a,b,y,o,u){const p=t("MermaidChart"),l=t("ClientOnly");return d(),r("div",null,[a[0]||(a[0]=h(`

Pretext 开源项目解读

项目信息

解决的核心痛点

  1. DOM 回流的性能诅咒 — 传统的文本测量(getBoundingClientRectoffsetHeight)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext 将昂贵工作集中在一次性 prepare() 中,layout() 变成纯算术操作(~0.0002ms/文本)。

  2. 多语言文本布局的复杂性 — CSS 文本布局涉及 CJK 逐字断行、阿拉伯语双向文本、泰语/高棉语字典分词、Emoji 宽度修正等大量细节。Pretext 用浏览器的 Canvas 字体引擎作为 ground truth,支持所有 Unicode 语言。

  3. Web 平台上缺失的多行 shrinkwrap — CSS 没有原生的多行文本宽度收缩适配 API。Pretext 提供了 walkLineRanges()measureNaturalWidth() 来精确计算。

目标用户:前端应用开发者 — 文本虚拟化、自定义布局引擎(masonry、JS 驱动的 flexbox)、聊天 UI、富文本编辑器、Canvas/SVG 渲染、开发时文本溢出验证。

1. 项目概览

1.1 项目定位与核心价值

Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。

一句话定位:面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。

解决的核心痛点

  1. DOM 回流的性能诅咒 — 传统的文本测量(getBoundingClientRectoffsetHeight)触发同步布局回流。500 个文本块可导致每帧 30ms+ 的卡顿。Pretext 将昂贵工作集中在一次性 prepare() 中,layout() 变成纯算术操作(~0.0002ms/文本)。

  2. 多语言文本布局的复杂性 — CSS 文本布局涉及 CJK 逐字断行、阿拉伯语双向文本、泰语/高棉语字典分词、Emoji 宽度修正等大量细节。Pretext 用浏览器的 Canvas 字体引擎作为 ground truth,支持所有 Unicode 语言。

  3. Web 平台上缺失的多行 shrinkwrap — CSS 没有原生的多行文本宽度收缩适配 API。Pretext 提供了 walkLineRanges()measureNaturalWidth() 来精确计算。

目标用户:前端应用开发者 — 文本虚拟化、自定义布局引擎(masonry、JS 驱动的 flexbox)、聊天 UI、富文本编辑器、Canvas/SVG 渲染、开发时文本溢出验证。

1.2 技术栈与选型对比

技术选择方案替代方案及放弃原因
文本测量Canvas measureText()DOM 测量 → 触发同步回流
文本分词Intl.Segmenter(浏览器原生)自建分词器 → 维护成本高,覆盖面窄
运行时ESM only + Bun 工具链CJS → 不支持 tree-shaking
Bidi 处理简化 Unicode Bidi(来自 pdf.js)完整 UBA → 属于渲染层,不在布局层范围
架构模式两阶段 Prepare-Layout 分离单次测量 → 无法在 resize 时复用预计算数据
字体指定字体名system-ui → Canvas/DOM 分辨率不一致

1.3 核心技术亮点

  • 两阶段分离prepare() 一次性分析+测量,layout() 纯算术(零 DOM/Canvas/字符串调用)
  • 8 种段类型:完整模拟 CSS 空白处理、不间断胶合、软连字符、零宽断行机会等
  • Emoji 自动修正:通过 Canvas vs DOM 对比自动检测并修正 Chrome/Firefox 的 Emoji 宽度差异
  • 浏览器自适应:自动检测引擎(Chrome/Safari/Firefox)并适配不同的行适配容差和行为策略
  • 支持多语言:20+ 语言的长文本语料测试,包括阿拉伯语、希伯来语、印地语、中文、日语、韩语、泰语、高棉语、缅甸语、乌尔都语
  • 渐进式 API 层次:快速路径(仅高度)、中等路径(含行文本)、低级路径(迭代器+无字符串分配)

2. 整体架构设计

2.1 架构概述

Pretext 采用两阶段分离 + 分层模块化架构。核心设计将一个文本布局问题拆解为三个阶段:

  1. 准备阶段 (Prepare):一次性昂贵的文本分析 + Canvas 测量,缓存所有中间结果
  2. 布局阶段 (Layout):纯算术的行行走,基于缓存的段宽度计算行数/高度/行文本
  3. 富文本辅助层 (Rich Inline):在核心引擎之上提供内联富文本的边界空白折叠和原子项处理

模块之间的依赖是单向的、严格分层的:

  • analysis.ts(文本分析)是底层,被 layout.tsbidi.ts 依赖
  • measurement.ts(Canvas 测量)是底层,被 layout.ts 依赖
  • line-break.ts(行行走引擎)是中间层,被 layout.ts 依赖
  • line-text.ts(行文本构造)是辅助层,被 layout.tsrich-inline.ts 依赖
  • bidi.ts(双向文本)是可选辅助层,仅被 layout.ts 在 rich 路径中依赖
  • layout.ts(核心库 API)是顶层,聚合所有模块并暴露公共 API
  • rich-inline.ts(富文本内联)是独立的辅助模块,依赖 layout.tsline-text.ts

2.2 整体架构图

text
+====================================================================================+
+|                             Pretext 公共 API 层                                    |
+|                                                                                   |
+|  prepare()  prepareWithSegments()  layout()  layoutWithLines()  setLocale()       |
+|  walkLineRanges()  measureLineStats()  measureNaturalWidth()                      |
+|  layoutNextLine()  layoutNextLineRange()  materializeLineRange()                   |
+|  clearCache()                                                                      |
++===================================+===============================================+
+                                    |
+                  +-----------------v------------------+
+                  |         layout.ts                   |
+                  |   (核心聚合 + API 暴露)             |
+                  |   两阶段协调、类型定义、             |
+                  |   locale 管理、缓存清除              |
+                  +--+--------+--------+--------+------+
+                     |        |        |        |
+       +-------------v-+ +---v------+ +v-------+ +v-------------+
+       |  analysis.ts  | | bidi.ts  | | line-  | | line-text.ts |
+       |  (文本分析)    | | (双向)   | | break  | | (行文本构造)  |
+       |               | |         | | .ts    | |              |
+       | 空白规范化     | | Unicode | | (行行走| | 字形分割缓存  |
+       | Intl.Segmenter| | Bidi    | | 引擎)  | | 段范围→字符串 |
+       | 胶合规则       | | 分类+   | |        | | 软连字符处理   |
+       | CJK/禁则处理  | | 层级计算 | | 段宽度 | | WeakMap 缓存   |
+       | keep-all 策略  | |         | | 累加    | |              |
+       +------+--------+ +---------+ | 断行判定| +--------------+
+              |                      | 行范围   |
+              |                      | 输出     |
+              |                      +----------+
+              |
+    +---------v----------+
+    | measurement.ts     |
+    | (Canvas 测量引擎)   |
+    |                    |
+    | Canvas 上下文管理   |
+    | 段宽度缓存          |
+    | Emoji 宽度修正      |
+    | 引擎 Profile 检测   |
+    | 字形级宽度预计算     |
+    | 字体尺寸解析         |
+    +--------------------+

分层职责说明

模块职责依赖
API 层layout.ts公共 API 暴露、两阶段协调、类型定义所有下层模块
分析层analysis.ts文本规范化、Intl.Segmenter 分词、胶合规则、CJK/keep-all 预处理
测量层measurement.tsCanvas 测量、段宽度缓存、Emoji 修正、引擎 Profile 检测analysis.ts(isCJK)
行走层line-break.ts段宽度累加、断行判定、行范围输出(4 种模式)analysis.ts(类型), measurement.ts(Profile)
文本层line-text.ts字形缓存、段范围→字符串拼接、软连字符可视化analysis.ts(类型), layout.ts(类型)
Bidi 层bidi.tsUnicode Bidi 分类、嵌入层级计算无(纯数据驱动)
富文本层rich-inline.ts跨项空白折叠、原子项处理、行游标状态机layout.ts, line-text.ts

2.3 目录结构图

shell
pretext/
+├── src/                         # 【核心基建】核心库源码 — 发布为 @chenglou/pretext
+   ├── layout.ts                # 【核心基建】公共 API 聚合层 — prepare/layout 系列 20+ 导出函数
+   ├── analysis.ts              # 【核心基建】文本分析引擎 — 空白规范化/Intl.Segmenter 分词/胶合规则/禁则/keep-all
+   ├── measurement.ts           # 【核心基建】Canvas 测量引擎 — 段宽度缓存/Emoji 修正/引擎 Profile 检测/字形级宽度
+   ├── line-break.ts            # 【核心基建】行行走引擎 — 段宽度累加/断行判定/行范围输出,四种输出模式
+   ├── line-text.ts             # 【核心基建】行文本构造器 — 字形级段拆分缓存/段范围→字符串拼接/软连字符可视化
+   ├── bidi.ts                  # 【核心基建】双向文本元数据 — Unicode Bidi 分类/嵌入层级计算,仅 rich 路径使用
+   ├── rich-inline.ts           # 【核心基建】富文本内联布局 — 跨项空白折叠/原子 chip/extraWidth,独立 export 路径
+   ├── test-data.ts             # 【工具集】测试数据共享 — 精度检查和基准面复用同一语料
+   ├── layout.test.ts           # 【质量保证】小型持久不变测试 — Bun Test 套件
+   ├── text-modules.d.ts        # 【配置】文本模块类型声明 — .txt/.html 导入类型
+   └── generated/               # 【工具集】自动生成数据
+       └── bidi-data.ts         # 【工具集】Unicode 17.0 Bidi 分类范围 — 由 generate:bidi-data 生成
+├── pages/                       # 【UI 视图】浏览器端页面 — 开发服务器 + 精度验证 + Demo
+   ├── accuracy.html            # 【UI 视图】精度检查页 — 多浏览器多宽度行级对比
+   ├── accuracy.ts              # 【质量保证】精度检查逻辑 — 浏览器 sweep + 逐行诊断
+   ├── benchmark.html           # 【UI 视图】基准面页 — 性能吞吐量对比
+   ├── benchmark.ts             # 【质量保证】基准面逻辑 — Chrome/Safari 性能快照
+   ├── corpus.html              # 【UI 视图】语料诊断页 — 长文本断行对比
+   ├── corpus.ts                # 【质量保证】语料诊断逻辑 — 段级偏移计算 + 行级对比
+   ├── probe.html               # 【UI 视图】探针诊断页 — 单宽度精确断行
+   ├── probe.ts                 # 【质量保证】探针诊断逻辑 — 细粒度断行追踪
+   ├── diagnostic-utils.ts      # 【工具集】字形安全诊断工具 — Range/span 提取器
+   ├── report-utils.ts          # 【工具集】报告传输工具 — hash 通道 + POST 侧通道
+   ├── emoji-test.html          # 【UI 视图】Emoji 测试页
+   ├── justification-comparison.html  # 【UI 视图】对齐比较页
+   ├── assets/                  # 【UI 视图】静态资源
+   ├── claude-symbol.svg    # 【UI 视图】Claude 符号
+   └── openai-symbol.svg    # 【UI 视图】OpenAI 符号
+   └── demos/                   # 【UI 视图】功能 Demo 合集 — GitHub Pages 站点
+       ├── index.html           # 【UI 视图】Demo 索引页 — 站点根页面
+       ├── bubbles.html         # 【UI 视图】气泡排版 Demo — shrinkwrap 动态布局
+       ├── bubbles.ts           # 【UI 视图】气泡排版逻辑 — walkLineRanges 狗粮
+       ├── bubbles-shared.ts    # 【工具集】气泡共享逻辑 — cell/glyph 类型
+       ├── dynamic-layout.html  # 【UI 视图】动态布局 Demo — 双栏浮动绕排
+       ├── dynamic-layout.ts    # 【UI 视图】动态布局逻辑 — layoutNextLineRange 狗粮
+       ├── dynamic-layout-text.ts # 【工具集】动态布局文本数据
+       ├── editorial-engine.html  # 【UI 视图】编辑引擎 Demo — 行级渲染引擎
+       ├── editorial-engine.ts  # 【UI 视图】编辑引擎逻辑 — 光学对齐/断行优化
+       ├── markdown-chat.html   # 【UI 视图】Markdown 聊天 Demo — 虚拟化聊天
+       ├── markdown-chat.ts     # 【UI 视图】Markdown 聊天逻辑 — rich-inline + pre-wrap 狗粮
+       ├── markdown-chat.model.ts # 【UI 视图】聊天状态模型 — 消息/渲染状态机
+       ├── markdown-chat.data.ts  # 【工具集】聊天测试数据
+       ├── rich-note.html       # 【UI 视图】富文本笔记 Demo — rich-inline 狗粮
+       ├── rich-note.ts         # 【UI 视图】富文本笔记逻辑 — 内联富文本渲染
+       ├── rich-note.model.ts   # 【UI 视图】笔记状态模型
+       ├── accordion.html       # 【UI 视图】手风琴 Demo
+       ├── accordion.ts         # 【UI 视图】手风琴逻辑
+       ├── justification-comparison.html  # 【UI 视图】对齐比较 Demo
+       ├── justification-comparison.ts    # 【UI 视图】对齐比较逻辑
+       ├── justification-comparison.model.ts  # 【UI 视图】对齐比较模型
+       ├── justification-comparison.data.ts   # 【工具集】对齐比较数据
+       ├── justification-comparison.ui.ts     # 【UI 视图】对齐比较 UI
+       ├── variable-typographic-ascii.html  # 【UI 视图】可变排版 ASCII Demo
+       ├── variable-typographic-ascii.ts    # 【UI 视图】可变排版 ASCII 逻辑
+       ├── wrap-geometry.ts      # 【工具集】换行几何计算
+       ├── svg.d.ts              # 【配置】SVG 类型声明
+       └── masonry/              # 【UI 视图】瀑布流 Demo
+           ├── index.html        # 【UI 视图】瀑布流 HTML
+           ├── index.ts          # 【UI 视图】瀑布流逻辑 — 动态 masonry
+           └── shower-thoughts.json  # 【工具集】瀑布流数据
+├── scripts/                      # 【工具集】自动化脚本 — 构建/检查/基准面/语料
+   ├── accuracy-check.ts        # 【质量保证】精度检查 — Chrome 浏览器 sweep
+   ├── benchmark-check.ts       # 【质量保证】基准面检查 — Chrome 性能快照
+   ├── browser-automation.ts    # 【核心基建】浏览器自动化 — CDP 连接/页面管理/报告通道
+   ├── report-server.ts         # 【工具集】报告 HTTP 端点 — POST 侧通道接收
+   ├── corpus-check.ts          # 【质量保证】语料诊断 — 单语料单宽度
+   ├── corpus-sweep.ts          # 【质量保证】语料扫频 — step=10 宽度遍历
+   ├── corpus-status.ts         # 【工具集】语料状态 — 生成 corpora/dashboard.json
+   ├── corpus-font-matrix.ts    # 【工具集】字体矩阵 — 多字体语料对比
+   ├── corpus-taxonomy.ts       # 【工具集】差异分类 — mismatch 语义桶
+   ├── pre-wrap-check.ts        # 【质量保证】pre-wrap 模式检查
+   ├── keep-all-check.ts        # 【质量保证】keep-all 模式检查
+   ├── symbol-check.ts          # 【质量保证】符号断行检查
+   ├── letter-spacing-check.ts  # 【质量保证】letter-spacing 检查
+   ├── probe-check.ts           # 【质量保证】探针诊断 — 断行追踪
+   ├── build-demo-site.ts       # 【工具集】构建静态 Demo 站点 → site/
+   ├── package-smoke-test.ts    # 【质量保证】包冒烟测试 — tarball JS/TS 消费端验证
+   ├── generate-bidi-data.ts    # 【工具集】生成 Bidi 数据 — Unicode 17.0
+   ├── status-dashboard.ts      # 【工具集】状态面板生成 → status/dashboard.json
+   └── unicode/                 # 【工具集】Unicode 元数据
+       └── DerivedBidiClass-17.0.0.txt  # 【工具集】Unicode Bidi 分类原始数据
+├── corpora/                      # 【工具集】多语言长文本语料 — 18 种语言 20+ 语料
+   ├── ar-al-bukhala.txt        # 【质量保证】阿拉伯语 — 古典文学
+   ├── ar-risalat-al-ghufran-part-1.txt  # 【质量保证】阿拉伯语 — 古典文学
+   ├── en-gatsby-opening.txt    # 【质量保证】英语 — 现代文学
+   ├── he-masaot-binyamin-metudela.txt  # 【质量保证】希伯来语 — 历史文本
+   ├── hi-eidgah.txt            # 【质量保证】印地语 — 现代文学
+   ├── ja-kumo-no-ito.txt       # 【质量保证】日语 — 芥川龙之介《蜘蛛の糸》
+   ├── ja-rashomon.txt          # 【质量保证】日语 — 芥川龙之介《羅生門》
+   ├── km-prachum-reuang-preng-khmer-volume-7-stories-1-10.txt  # 【质量保证】高棉语
+   ├── ko-sonagi.txt            # 【质量保证】韩语 — 现代文学
+   ├── ko-unsu-joh-eun-nal.txt  # 【质量保证】韩语 — 现代文学
+   ├── my-bad-deeds-return-to-you-teacher.txt  # 【质量保证】缅甸语
+   ├── my-cunning-heron-teacher.txt  # 【质量保证】缅甸语
+   ├── th-nithan-vetal-story-1.txt  # 【质量保证】泰语
+   ├── th-nithan-vetal-story-7.txt  # 【质量保证】泰语
+   ├── ur-chughd.txt            # 【质量保证】乌尔都语 — Nastaliq/Naskh
+   ├── zh-guxiang.txt           # 【质量保证】中文 — 鲁迅《故鄉》
+   ├── zh-zhufu.txt             # 【质量保证】中文 — 鲁迅《祝福》
+   ├── mixed-app-text.txt       # 【质量保证】混合应用文本 — URL/emoji/符号/软连字符
+   ├── chrome-step10.json       # 【工具集】Chrome step=10 语料扫频快照
+   ├── safari-step10.json       # 【工具集】Safari step=10 语料扫频快照
+   ├── dashboard.json           # 【工具集】语料面板 — 机读状态
+   ├── sources.json             # 【配置】语料来源元数据
+   ├── README.md                # 【配置】语料说明
+   ├── STATUS.md                # 【配置】语料状态指针
+   └── TAXONOMY.md              # 【配置】差异分类词汇 — mismatch 语义桶定义
+├── accuracy/                     # 【工具集】浏览器精度快照 — 三浏览器数据
+   ├── chrome.json              # 【工具集】Chrome 精度数据
+   ├── firefox.json             # 【工具集】Firefox 精度数据
+   ├── safari.json              # 【工具集】Safari 精度数据
+   └── letter-spacing.json      # 【工具集】letter-spacing 精度数据
+├── benchmarks/                   # 【工具集】性能基准面快照
+   ├── chrome.json              # 【工具集】Chrome 基准面
+   └── safari.json              # 【工具集】Safari 基准面
+├── status/                       # 【工具集】主状态面板
+   └── dashboard.json           # 【工具集】聚合精度 + 基准面状态
+├── shared/                       # 【工具集】全局共享
+   └── navigation-state.ts      # 【工具集】页面导航状态管理
+├── research-data/                # 【工具集】研究数据
+   └── system-ui-size-scan.json  # 【工具集】system-ui 尺寸扫描 — font resolution mismatch 证据
+├── .github/                      # 【配置】CI/CD
+   └── workflows/
+       └── pages.yml            # 【配置】GitHub Pages 自动部署
+├── .cursor/                      # 【配置】编辑器
+   └── rules/
+       └── use-bun-instead-of-node-vite-npm-pnpm.mdc  # 【配置】Cursor 规则 — 强制使用 Bun
+├── package.json                  # 【配置】NPM 包元数据 — @chenglou/pretext v0.0.7
+├── tsconfig.json                 # 【配置】TS 项目配置 — 开发模式 (noEmit)
+├── tsconfig.build.json           # 【配置】TS 构建配置 — 发布模式 (emit dist/)
+├── oxlintrc.json                 # 【配置】Oxlint 规则
+├── knip.config.ts                # 【配置】Knip 死代码扫描
+├── bun.lock                      # 【配置】Bun 依赖锁
+├── README.md                     # 【配置】项目说明 — 公共 API 参考
+├── DEVELOPMENT.md                # 【配置】开发指南 — 命令面/快照/分析流程
+├── TODO.md                       # 【配置】优先级 — 当前和下一步
+├── CHANGELOG.md                  # 【配置】变更日志 — 版本历史
+├── STATUS.md                     # 【配置】状态面板指针
+├── RESEARCH.md                   # 【配置】研究日志 — 所有实验/发现/结论
+├── SECURITY.md                   # 【配置】安全策略
+├── AGENTS.md                     # 【配置】Claude Code 项目指令
+├── thoughts.md                   # 【配置】设计思维记录
+├── LICENSE                       # 【配置】MIT 许可证
+└── .gitignore                    # 【配置】Git 忽略规则

3. 模块依赖与调用关系

3.1 全局入口与核心路由

逻辑说明:用户通过 prepare()prepareWithSegments() 进入系统。这两个函数内部协调 analysis.ts(文本分析)、measurement.ts(Canvas 测量)、和可选的 bidi.ts(Bidi 元数据)。返回的不透明句柄(PreparedTextPreparedTextWithSegments)包含所有 layout 热路径需要的预计算数据。后续的 layout()layoutWithLines()walkLineRanges() 等 API 接收准备好的句柄,委托给 line-break.ts 做纯算术的行行走,需要时调用 line-text.ts 构造文本字符串。

  • 调用拓扑 (plainText)
text
用户代码
+  |
+  v
+prepare(text, font, options?)
+  |
+  +---> analyzeText(text, options)         [analysis.ts]
+  |     +---> Intl.Segmenter (word)        词级分段
+  |     +---> Intl.Segmenter (grapheme)    字形级分段
+  |     +---> normalizeWhitespaceNormal()  空白规范化
+  |     +---> CJK/禁则/keep-all 预处理
+  |     +---> 返回 TextAnalysis
+  |
+  +---> getSegmentMetrics() × N            [measurement.ts]
+  |     +---> canvas.measureText(segment)  各段宽度
+  |     +---> Emoji 修正                   (如需要)
+  |     +---> 缓存到 Map<font, Map<segment, metrics>>
+  |
+  +---> computeSegmentLevels()             [bidi.ts] (仅 rich 路径)
+  |     +---> Unicode Bidi 分类
+  |     +---> 嵌入层级计算
+  |     +---> 映射到段
+  |
+  +---> 返回 PreparedText / PreparedTextWithSegments
+
+layout(prepared, maxWidth, lineHeight)
+  |
+  +---> countPreparedLines()               [line-break.ts]
+  |     +---> 宽度累加
+  |     +---> 断行判定 (epsilon 容差)
+  |     +---> 返回 { lineCount, height }
+  |
+  +---> 返回 LayoutResult
+
+layoutWithLines(prepared, maxWidth, lineHeight)
+  |
+  +---> walkPreparedLinesRaw()             [line-break.ts]
+  |     +---> 逐行宽度累加
+  |     +---> 每行触发回调: (start, end, width)
+  |
+  +---> buildLineTextFromRange() × N       [line-text.ts]
+  |     +---> Intl.Segmenter (grapheme)    按需字形拆分
+  |     +---> 段文本拼接
+  |     +---> 软连字符可见化
+  |
+  +---> 返回 LayoutLinesResult { lines: LayoutLine[] }

2.2 核心业务实体与关联

实体定义

  • PreparedText:不透明句柄,包含所有布局热路径需要的预计算数据(段宽度、段类型、字形宽度数组等)。快速路径使用,不暴露内部结构。
  • PreparedTextWithSegments:富文本句柄,在 PreparedText 基础上额外暴露段文本和 Bidi 元数据,用于手动行布局。
  • LayoutLine / LayoutLineRange:一行文本的表示。LayoutLine 包含实际文本字符串,LayoutLineRange 仅包含游标范围(更轻量)。
  • LayoutCursor:段/字形双级游标,用于在准备好的文本中精确定位。
  • SegmentMetrics:单个段的 Canvas 测量结果,包含宽度、是否含 CJK、Emoji 计数、字形级宽度数组。
  • TextAnalysis:文本分析产物,包含规范化文本、段数组、段类型数组、以及预计算的分块信息。

实体引用拓扑 (plainText)

text
[PrepareOptions]
+      |
+      v
+[TextAnalysis] 1 ---> 1 [normalized: string]
+      |                  [segments: string[]]
+      |                  [kinds: SegmentBreakKind[]]
+      |                  [chunks: AnalysisChunk[]]
+      |
+      v
+[PreparedText] 1 ---> 1 [PreparedCore]
+      |                  [widths: number[]]
+      |                  [kinds: SegmentBreakKind[]]
+      |                  [breakableFitAdvances: number[][]]
+      |                  [letterSpacing: number]
+      |                  [segLevels: Int8Array] (仅 rich)
+      |
+      +--- PreparedTextWithSegments (扩展)
+      |     [segments: string[]]
+      |     [starts: number[]]
+      |
+      v
+[layout()] ---> [LayoutResult { height, lineCount }]
+[layoutWithLines()] ---> [LayoutLinesResult { height, lineCount, lines: LayoutLine[] }]
+[walkLineRanges()] ---> N × [LayoutLineRange { width, start, end }]
+      |
+      v
+[layoutNextLineRange()] + [materializeLineRange()]
+      |                           |
+      v                           v
+[LayoutLineRange] -------> [LayoutLine { text, width, start, end }]
+{cursor: LayoutCursor}    {cursor: LayoutCursor}

4. 核心模块详解

模块一:文本分析引擎 (analysis.ts)

  • 设计说明:文本分析是 prepare() 的第一步,负责将原始文本转化为结构化的段数组。核心流程是:

    1. 空白规范化(normalizeWhitespaceNormal):white-space: normal 下将连续的空白折叠为单个空格,pre-wrap 下保留空格和硬换行
    2. 词级分段(Intl.Segmenter,granularity: 'word'):按语言规则将文本切分为"词"和"非词"段
    3. 标点胶合:将跟随的标点合并到前一个词段(如 "hello." 合并为一个段)
    4. CJK 字形级再分段:将 CJK 词段拆分为单字,然后在禁则规则下重新合并(行首/行尾禁则字符)
    5. keep-all 策略:CJK/Hangul 文本中禁止词内断行
    6. 特殊段处理:软连字符(­)、零宽空格()、不间断空格( )等
    7. 输出结构化的 TextAnalysis,以并行数组方式存储段文本、段类型、起始位置
  • 内部结构图 (plainText)

text
+---------------------------+     +---------------------------+
+| normalizeWhitespaceNormal |     | getWhiteSpaceProfile       |
+| (空白字符规范化)           |     | (模式配置解析)              |
++-----------+---------------+     +---------------------------+
+            |
+            v
++---------------------------+
+| Intl.Segmenter (word)     |
+| (浏览器原生的词级分词)     |
++-----------+---------------+
+            |
+            v
++-----------+---------------+
+| mergePunctuationIntoWords |
+| (标点→前词胶合)            |
++-----------+---------------+
+            |
+            v
++-----------+---------------+
+| splitCJKGraphemes +       |
+| applyKinsoku              |  <--- kinsokuStart / kinsokuEnd
+| (CJK 字形拆分 + 禁则合并)  |
++-----------+---------------+
+            |
+            v
++-----------+---------------+
+| applyKeepAllPreprocessing |  <--- canContinueKeepAllTextRun
+| (keep-all 断行策略)        |
++-----------+---------------+
+            |
+            v
++-----------+---------------+
+| classifySegmentKinds      |
+| (段类型分类: text/space/   |
+|  glue/soft-hyphen 等)     |
++-----------+---------------+
+            |
+            v
++---------------------------+
+| TextAnalysis              |
+| { normalized, segments[], |
+|   kinds[], starts[],      |
+|   chunks[] }              |
++---------------------------+

模块二:Canvas 测量引擎 (measurement.ts)

  • 设计说明:Canvas 测量是 prepare() 的第二步,负责测量每个段的精确宽度。核心设计要点:

    1. 延迟初始化:Canvas 上下文在首次测量时才创建(OffscreenCanvas 优先,回退到 DOM Canvas)
    2. 两级缓存Map<font, Map<segment, SegmentMetrics>>,跨文本共享,可通过 clearCache() 重置
    3. Emoji 修正:Chrome/Firefox 在字号 < 24px 时 Canvas 测量的 Emoji 宽度比 DOM 宽。修正量通过一次 DOM 比较读取自动检测。Safari 的 Canvas 和 DOM 一致,修正量为 0
    4. 字形级宽度预计算:对于可断行的长段(如 URL),预先测量每个字形的累积宽度(breakableFitAdvances),供行行走引擎使用
    5. 引擎 Profile 检测:自动检测当前浏览器的断行特性(行适配容差、CJK 引号后处理等),使算法适配 Chrome/Safari/Firefox 的差异
  • 内部结构图 (plainText)

text
+---------------------------+
+| getMeasureContext()        |
+| (Canvas 2D 上下文单例)     |
++-----------+---------------+
+            |
+            v
++---------------------------+     +---------------------------+
+| getSegmentMetrics()        | --> | segmentMetricCaches        |
+| (段宽度 + 字形宽度测量)     |     | Map<font, Map<seg, metrics>|
++-----------+---------------+     +---------------------------+
+            |
+            +---> canvas.measureText(seg).width
+            +---> 字形级 measureText(prefix) 累加 (大段用 pair-context)
+            +---> Emoji 修正 (如需要)
+            |
+            v
++-----------+---------------+
+| getEngineProfile()         |     缓存到 cachedEngineProfile
+| (浏览器引擎特征检测)        |
+| - lineFitEpsilon           |     检测 Chrome(0.005) vs Safari(1/64)
+| - preferPrefixWidths       |     Safari 前缀宽度策略
+| - preferEarlySoftHyphen    |     Chrome 软连字符策略
+| - carryCJKAfterClosingQuote|
++-----------+---------------+
+            |
+            v
++---------------------------+
+| getCorrectedSegmentWidth   |
+| (应用 Emoji 修正的段宽度)   |
++---------------------------+

模块三:行行走引擎 (line-break.ts)

  • 设计说明:行行走是布局的热路径核心。它接收预计算的段数据(宽度、类型、字形级宽度数组),通过纯算术方式模拟浏览器的断行行为。核心算法:

    1. 快速路径:对于纯普通文本(无特殊段类型、无 letter-spacing),使用简化的老式行走器
    2. 通用路径:逐段累加宽度,在宽度超过 maxWidth 时回溯找到合法的断点
    3. 断点规则space 段消费后断行、soft-hyphen 处可选择断行、glue(不间断)段不可断、zero-width-break 处零宽断行、tab 段跳跃到下一个 tab stop、hard-break 强制断行
    4. Overflow 处理:当单个字形超过行宽时,使用预计算的字形级 breakableFitAdvances 在字形边界做紧急断行
    5. 行尾字符处理letter-spacing 在行尾正确扣除最后一个字形的额外间距
    6. 四种输出模式countPreparedLines(仅计数)、walkPreparedLinesRaw(行范围回调)、stepPreparedLineGeometry(单步迭代)、measurePreparedLineGeometry(几何测量)
  • 内部结构图 (plainText)

text
+---------------------------+     +---------------------------+
+| PreparedLineBreakData      |     | getEngineProfile()         |
+| (预编译的段级数据)          |     | (引擎特征,决定容差/策略)   |
++-----------+---------------+     +---------------------------+
+            |
+            v
++---------------------------+
+| 行行走主循环                |
+| (逐段累加宽度)              |
++-----------+---------------+
+            |
+            +-- 宽度 < maxWidth?  --> 继续累加
+            +-- 宽度 > maxWidth?  --> 回溯找断点
+            |     +-- space/zero-width-break: 在段前断行
+            |     +-- soft-hyphen: 可选择在段前/段内断行
+            |     +-- 普通文本: 在段内字形边界断行
+            |     +-- glue (不间断): 强制推进 (overflow)
+            |     +-- hard-break: 强制在段后断行
+            |
+            v
++-----------+---------------+
+| 四种输出模式                |
+| - countPreparedLines       | --> { lineCount }
+| - walkPreparedLinesRaw     | --> callback(每行范围)
+| - stepPreparedLineGeometry | --> 单行范围 (迭代器模式)
+| - measurePreparedLineGeometry | --> { lineCount, maxWidth }
++---------------------------+

模块四:核心聚合层 (layout.ts)

  • 设计说明layout.ts 是库的公共 API 提供者。它本身不实现核心算法,而是协调 analysis.tsmeasurement.tsbidi.tsline-break.tsline-text.ts 五个模块。核心设计要点:

    1. prepare() / prepareWithSegments() 的内部流程被拆分为 analyzeText()(文本分析阶段)和测量阶段,保持接缝清晰
    2. layout() 是 resize 热路径:直接调用 countPreparedLines(),无 DOM 读、无 Canvas 调用、无字符串操作
    3. layoutWithLines() 先遍历行范围,再调用 buildLineTextFromRange() 逐行构建文本
    4. walkLineRanges()measureLineStats()** 不构建字符串,避免分配,适合 shrinkwrap 计算
    5. layoutNextLineRange() / materializeLineRange() 提供迭代器式 API,支持可变行宽的手工布局
    6. Locale 管理setLocale() 重置 Word Segmenter 和所有缓存
  • 内部结构图 (plainText)

text
+===========================================================+
+|                      layout.ts                             |
+|                                                           |
+|  prepare(text, font, opts?)                               |
+|    +-- analyzeText(text, opts)           [analysis.ts]     |
+|    +-- for each segment:                                   |
+|    |     getSegmentMetrics(seg, cache)   [measurement.ts]  |
+|    +-- computeSegmentLevels()            [bidi.ts] (rich)  |
+|    +-- return PreparedText / PreparedTextWithSegments      |
+|                                                           |
+|  layout(prepared, w, lh)                                  |
+|    +-- countPreparedLines(prepared, w)  [line-break.ts]    |
+|    +-- return { height: lc * lh, lineCount }              |
+|                                                           |
+|  layoutWithLines(prepared, w, lh)                         |
+|    +-- walkPreparedLinesRaw(prepared, w, cb)              |
+|    +-- for each emitted line:                             |
+|    |     buildLineTextFromRange(...)     [line-text.ts]    |
+|    +-- return { height, lineCount, lines }                |
++===========================================================+

模块五:富文本内联辅助 (rich-inline.ts)

  • 设计说明rich-inline.ts 是一个独立的辅助模块,提供窄范围的内联富文本布局。它不处理块级布局、嵌套标记树、或通用 CSS 内联格式化。核心功能:

    1. 跨项空白折叠:模拟浏览器的 white-space: normal 空白折叠行为(相邻项之间的边界空白折叠)
    2. 原子项break: 'never' 的项(如 chip、mention)不会被拆分到多行
    3. 额外宽度extraWidth 允许调用者添加 padding/border 等额外水平空间
    4. 行游标:使用 RichInlineCursor(包含 itemIndexsegmentIndexgraphemeIndex)精确定位
  • 内部结构图 (plainText)

text
+---------------------------+
+| prepareRichInline(items[]) |
+| - 逐项调用 prepareWithSegments()
+| - 计算自然宽度 (带 extraWidth)
+| - 返回 PreparedRichInline
++-----------+---------------+
+            |
+            v
++---------------------------+
+| walkRichInlineLineRanges() |
+| - 逐行遍历
+| - 跨项空白折叠
+| - 原子项保持完整
+| - 每行回调 RichInlineLineRange
++-----------+---------------+
+            |
+            v
++---------------------------+
+| materializeRichInlineLineRange()
+| - 将行范围转为完整文本
+| - 含 gapBefore, occupiedWidth
++---------------------------+

5. 关键数据流程

场景一:快速高度测量 (prepare + layout)

  • 场景说明:用户调用 prepare() 预计算文本数据,然后多次调用 layout() 在不同宽度下计算高度。这是 Pretext 最高频的使用模式。

  • 流转时序图 (Mermaid)

`,54)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Layout%20as%20layout.ts%0A%20%20%20%20participant%20Analysis%20as%20analysis.ts%0A%20%20%20%20participant%20Measure%20as%20measurement.ts%0A%20%20%20%20participant%20LineBreak%20as%20line-break.ts%0A%0A%20%20%20%20Note%20over%20User%3A%20%E5%87%86%E5%A4%87%E9%98%B6%E6%AE%B5%EF%BC%88%E4%B8%80%E6%AC%A1%E6%80%A7%EF%BC%89%0A%20%20%20%20User-%3E%3ELayout%3A%20prepare(text%2C%20'16px%20Inter')%0A%20%20%20%20activate%20Layout%0A%20%20%20%20Layout-%3E%3EAnalysis%3A%20analyzeText(text%2C%20opts)%0A%20%20%20%20activate%20Analysis%0A%20%20%20%20Analysis-%3E%3EAnalysis%3A%20normalizeWhitespaceNormal()%0A%20%20%20%20Analysis-%3E%3EAnalysis%3A%20Intl.Segmenter%20%E8%AF%8D%E7%BA%A7%E5%88%86%E8%AF%8D%0A%20%20%20%20Analysis-%3E%3EAnalysis%3A%20%E6%A0%87%E7%82%B9%E8%83%B6%E5%90%88%20%2B%20CJK%20%E7%A6%81%E5%88%99%E5%A4%84%E7%90%86%0A%20%20%20%20Analysis--%3E%3ELayout%3A%20TextAnalysis%20%7B%20segments%2C%20kinds%2C%20...%20%7D%0A%20%20%20%20deactivate%20Analysis%0A%0A%20%20%20%20Loop%20%E6%AF%8F%E4%B8%AA%E6%AE%B5%0A%20%20%20%20%20%20%20%20Layout-%3E%3EMeasure%3A%20getSegmentMetrics(segment%2C%20fontCache)%0A%20%20%20%20%20%20%20%20activate%20Measure%0A%20%20%20%20%20%20%20%20Measure-%3E%3EMeasure%3A%20canvas.measureText(segment)%0A%20%20%20%20%20%20%20%20Measure-%3E%3EMeasure%3A%20Emoji%20%E4%BF%AE%E6%AD%A3%20(%E5%A6%82%E9%9C%80%E8%A6%81)%0A%20%20%20%20%20%20%20%20Measure--%3E%3ELayout%3A%20SegmentMetrics%20%7B%20width%2C%20...%20%7D%0A%20%20%20%20%20%20%20%20deactivate%20Measure%0A%20%20%20%20end%0A%0A%20%20%20%20Layout-%3E%3ELayout%3A%20%E6%9E%84%E5%BB%BA%20PreparedCore%0A%20%20%20%20Layout--%3E%3EUser%3A%20PreparedText%20(%E4%B8%8D%E9%80%8F%E6%98%8E%E5%8F%A5%E6%9F%84)%0A%20%20%20%20deactivate%20Layout%0A%0A%20%20%20%20Note%20over%20User%3A%20%E5%B8%83%E5%B1%80%E9%98%B6%E6%AE%B5%EF%BC%88%E5%A4%9A%E6%AC%A1%E8%B0%83%E7%94%A8%EF%BC%8C%E7%83%AD%E8%B7%AF%E5%BE%84%EF%BC%89%0A%20%20%20%20User-%3E%3ELayout%3A%20layout(prepared%2C%20320%2C%2020)%0A%20%20%20%20activate%20Layout%0A%20%20%20%20Layout-%3E%3ELineBreak%3A%20countPreparedLines(prepared%2C%20320)%0A%20%20%20%20activate%20LineBreak%0A%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E9%80%90%E6%AE%B5%E7%B4%AF%E5%8A%A0%E5%AE%BD%E5%BA%A6%0A%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E5%AE%BD%E5%BA%A6%20%3E%20maxWidth%3F%20%E5%9B%9E%E6%BA%AF%E6%96%AD%E7%82%B9%0A%20%20%20%20LineBreak--%3E%3ELayout%3A%20%7B%20lineCount%20%7D%0A%20%20%20%20deactivate%20LineBreak%0A%20%20%20%20Layout-%3E%3ELayout%3A%20height%20%3D%20lineCount%20*%2020%0A%20%20%20%20Layout--%3E%3EUser%3A%20%7B%20height%3A%2060%2C%20lineCount%3A%203%20%7D%0A%20%20%20%20deactivate%20Layout%0A",showToolbar:"1"})]),_:1}),a[1]||(a[1]=s("h3",{id:"场景二-手工逐行布局-可变行宽-layoutnextlinerange-materializelinerange",tabindex:"-1"},[n("场景二:手工逐行布局 + 可变行宽 (layoutNextLineRange + materializeLineRange) "),s("a",{class:"header-anchor",href:"#场景二-手工逐行布局-可变行宽-layoutnextlinerange-materializelinerange","aria-label":"Permalink to “场景二:手工逐行布局 + 可变行宽 (layoutNextLineRange + materializeLineRange)”"},"​")],-1)),a[2]||(a[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户需要将文本精确分配到各行,每行宽度可能不同(例如浮动图片绕排)。使用迭代器式 API 逐行提取。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Layout%20as%20layout.ts%0A%20%20%20%20participant%20LineBreak%20as%20line-break.ts%0A%20%20%20%20participant%20LineText%20as%20line-text.ts%0A%0A%20%20%20%20Note%20over%20User%3A%20%E5%87%86%E5%A4%87%E9%98%B6%E6%AE%B5%EF%BC%88%E5%90%8C%E5%9C%BA%E6%99%AF%E4%B8%80%EF%BC%8C%E4%BD%BF%E7%94%A8%20prepareWithSegments%EF%BC%89%0A%20%20%20%20User-%3E%3ELayout%3A%20prepareWithSegments(text%2C%20font)%0A%20%20%20%20Layout--%3E%3EUser%3A%20PreparedTextWithSegments%0A%0A%20%20%20%20Note%20over%20User%3A%20%E9%80%90%E8%A1%8C%E8%BF%AD%E4%BB%A3%0A%20%20%20%20User-%3E%3EUser%3A%20cursor%20%3D%20%7B%20segmentIndex%3A%200%2C%20graphemeIndex%3A%200%20%7D%0A%0A%20%20%20%20Loop%20%E9%81%8D%E5%8E%86%E6%AF%8F%E4%B8%80%E8%A1%8C%0A%20%20%20%20%20%20%20%20User-%3E%3EUser%3A%20width%20%3D%20%E8%AE%A1%E7%AE%97%E5%BD%93%E5%89%8D%E8%A1%8C%E5%8F%AF%E7%94%A8%E5%AE%BD%E5%BA%A6%0A%0A%20%20%20%20%20%20%20%20User-%3E%3ELayout%3A%20layoutNextLineRange(prepared%2C%20cursor%2C%20width)%0A%20%20%20%20%20%20%20%20activate%20Layout%0A%20%20%20%20%20%20%20%20Layout-%3E%3ELineBreak%3A%20stepPreparedLineGeometryFromChunk(prepared%2C%20cursor%2C%20width)%0A%20%20%20%20%20%20%20%20activate%20LineBreak%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E4%BB%8E%20cursor%20%E5%BC%80%E5%A7%8B%E7%B4%AF%E5%8A%A0%E6%AE%B5%E5%AE%BD%E5%BA%A6%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E7%A1%AE%E5%AE%9A%E6%96%AD%E7%82%B9%E4%BD%8D%E7%BD%AE%0A%20%20%20%20%20%20%20%20alt%20%E6%9C%89%E5%89%A9%E4%BD%99%E6%96%87%E6%9C%AC%0A%20%20%20%20%20%20%20%20%20%20%20%20LineBreak--%3E%3ELayout%3A%20LayoutLineRange%20%7B%20width%2C%20start%2C%20end%20%7D%0A%20%20%20%20%20%20%20%20else%20%E6%96%87%E6%9C%AC%E8%80%97%E5%B0%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20LineBreak--%3E%3ELayout%3A%20null%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20deactivate%20LineBreak%0A%20%20%20%20%20%20%20%20Layout--%3E%3EUser%3A%20range%20%E6%88%96%20null%0A%20%20%20%20%20%20%20%20deactivate%20Layout%0A%0A%20%20%20%20%20%20%20%20alt%20range%20%E4%B8%8D%E4%B8%BA%20null%0A%20%20%20%20%20%20%20%20%20%20%20%20User-%3E%3ELayout%3A%20materializeLineRange(prepared%2C%20range)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20Layout%0A%20%20%20%20%20%20%20%20%20%20%20%20Layout-%3E%3ELineText%3A%20buildLineTextFromRange(prepared%2C%20cache%2C%20start%2C%20end)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20LineText%0A%20%20%20%20%20%20%20%20%20%20%20%20LineText-%3E%3ELineText%3A%20Intl.Segmenter%20%E5%AD%97%E5%BD%A2%E6%8B%86%E5%88%86%0A%20%20%20%20%20%20%20%20%20%20%20%20LineText-%3E%3ELineText%3A%20%E6%AE%B5%E6%96%87%E6%9C%AC%E6%8B%BC%E6%8E%A5%20%2B%20%E8%BD%AF%E8%BF%9E%E5%AD%97%E7%AC%A6%E5%A4%84%E7%90%86%0A%20%20%20%20%20%20%20%20%20%20%20%20LineText--%3E%3ELayout%3A%20'line%20text%20string'%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20LineText%0A%20%20%20%20%20%20%20%20%20%20%20%20Layout--%3E%3EUser%3A%20LayoutLine%20%7B%20text%2C%20width%2C%20start%2C%20end%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20Layout%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20User-%3E%3EUser%3A%20canvas.fillText(line.text%2C%20x%2C%20y)%0A%20%20%20%20%20%20%20%20%20%20%20%20User-%3E%3EUser%3A%20cursor%20%3D%20range.end%3B%20y%20%2B%3D%20lineHeight%0A%20%20%20%20%20%20%20%20else%20%E6%96%87%E6%9C%AC%E8%80%97%E5%B0%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20User%3A%20%E9%80%80%E5%87%BA%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),a[3]||(a[3]=s("h3",{id:"场景三-多行-shrinkwrap-walklineranges",tabindex:"-1"},[n("场景三:多行 Shrinkwrap (walkLineRanges) "),s("a",{class:"header-anchor",href:"#场景三-多行-shrinkwrap-walklineranges","aria-label":"Permalink to “场景三:多行 Shrinkwrap (walkLineRanges)”"},"​")],-1)),a[4]||(a[4]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户需要在不知道宽度的情况下,找到刚好容纳所有文本的最小宽度(shrinkwrap)。通过 "),s("code",null,"walkLineRanges()"),n(" 不构建文本字符串地遍历所有行,统计最宽行。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Layout%20as%20layout.ts%0A%20%20%20%20participant%20LineBreak%20as%20line-break.ts%0A%0A%20%20%20%20User-%3E%3ELayout%3A%20walkLineRanges(prepared%2C%20320%2C%20onLine)%0A%20%20%20%20activate%20Layout%0A%20%20%20%20Layout-%3E%3ELineBreak%3A%20walkPreparedLinesRaw(prepared%2C%20320%2C%20callback)%0A%20%20%20%20activate%20LineBreak%0A%0A%20%20%20%20Loop%20%E6%AF%8F%E4%B8%80%E8%A1%8C%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E9%80%90%E6%AE%B5%E7%B4%AF%E5%8A%A0%E5%AE%BD%E5%BA%A6%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E7%A1%AE%E5%AE%9A%E6%96%AD%E7%82%B9%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELayout%3A%20callback(width%2C%20startSeg%2C%20startG%2C%20endSeg%2C%20endG)%0A%20%20%20%20%20%20%20%20Note%20over%20Layout%3A%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%E5%9C%A8%20onLine%20%E4%B8%AD%E6%9B%B4%E6%96%B0%20maxWidth%0A%20%20%20%20end%0A%0A%20%20%20%20LineBreak--%3E%3ELayout%3A%20lineCount%0A%20%20%20%20deactivate%20LineBreak%0A%20%20%20%20Layout--%3E%3EUser%3A%20lineCount%0A%20%20%20%20deactivate%20Layout%0A%20%20%20%20Note%20over%20User%3A%20maxWidth%20%E5%8D%B3%E4%B8%BA%20shrinkwrap%20%E5%AE%BD%E5%BA%A6%0A",showToolbar:"1"})]),_:1}),a[5]||(a[5]=h(`

6. 接口与契约规范

6.1 核心类型定义

typescript
/**
+ * ============================================
+ * analysis.ts - 文本分析引擎契约
+ * ============================================
+ */
+
+/** 空白处理模式 */
+export type WhiteSpaceMode = 'normal' | 'pre-wrap'
+
+/** 断词模式 */
+export type WordBreakMode = 'normal' | 'keep-all'
+
+/** 段断行行为分类(8 种) */
+export type SegmentBreakKind =
+  | 'text'              // 普通文本段(可断行)
+  | 'space'             // 可折叠空格(white-space: normal 下)
+  | 'preserved-space'   // 保留空格(pre-wrap 下)
+  | 'tab'               // 制表符
+  | 'glue'              // 不间断胶合(NBSP/NNBSP/WJ 类)
+  | 'zero-width-break'  // 零宽断行机会(ZWSP)
+  | 'soft-hyphen'       // 软连字符(可选断行点)
+  | 'hard-break'        // 硬换行(\\n)
+
+/** 文本分析产物 */
+export type TextAnalysis = {
+  normalized: string           // 规范化后的文本
+  chunks: AnalysisChunk[]      // 硬换行分块信息
+  len: number                  // 段数量
+  texts: string[]              // 各段文本
+  isWordLike: boolean[]        // 各段是否为词类型
+  kinds: SegmentBreakKind[]    // 各段断行类型
+  starts: number[]             // 各段在规范化文本中的起始偏移
+}
+
+/**
+ * ============================================
+ * measurement.ts - Canvas 测量引擎契约
+ * ============================================
+ */
+
+/** 段的 Canvas 测量结果 */
+export type SegmentMetrics = {
+  width: number                        // 段宽(含 Emoji 修正)
+  containsCJK: boolean                 // 是否含 CJK 字符
+  emojiCount?: number                  // Emoji 数量
+  breakableFitMode?: BreakableFitMode  // 字形级宽度计算策略
+  breakableFitAdvances?: number[] | null // 字形级累积宽度
+}
+
+/** 浏览器引擎特征 */
+export type EngineProfile = {
+  lineFitEpsilon: number               // 行适配容差
+  carryCJKAfterClosingQuote: boolean   // CJK 引号后处理
+  breakKeepAllAfterPunctuation: boolean // keep-all 下标点后断行
+  preferPrefixWidthsForBreakableRuns: boolean // Safari 前缀宽度策略
+  preferEarlySoftHyphenBreak: boolean  // Chrome 软连字符策略
+}
+
+/** 字形级宽度计算策略 */
+export type BreakableFitMode = 'sum-graphemes' | 'segment-prefixes' | 'pair-context'
+
+/**
+ * ============================================
+ * layout.ts - 核心公共 API 契约
+ * ============================================
+ */
+
+/** 准备选项 */
+export type PrepareOptions = {
+  whiteSpace?: WhiteSpaceMode
+  wordBreak?: WordBreakMode
+  letterSpacing?: number  // CSS px 值
+}
+
+/** 布局游标(双级定位) */
+export type LayoutCursor = {
+  segmentIndex: number   // 段索引
+  graphemeIndex: number  // 段内字形索引
+}
+
+/** 布局结果(快速路径) */
+export type LayoutResult = {
+  height: number
+  lineCount: number
+}
+
+/** 行统计(无字符串分配) */
+export type LineStats = {
+  lineCount: number
+  maxLineWidth: number
+}
+
+/** 布局行(含文本内容) */
+export type LayoutLine = {
+  text: string
+  width: number
+  start: LayoutCursor
+  end: LayoutCursor
+}
+
+/** 布局行范围(无文本内容,更轻量) */
+export type LayoutLineRange = {
+  width: number
+  start: LayoutCursor
+  end: LayoutCursor
+}
+
+/** 布局结果(含行文本) */
+export type LayoutLinesResult = LayoutResult & {
+  lines: LayoutLine[]
+}
+
+/**
+ * ============================================
+ * rich-inline.ts - 富文本内联辅助契约
+ * ============================================
+ */
+
+/** 富文本内联项 */
+export type RichInlineItem = {
+  text: string              // 原始文本(含前后空白)
+  font: string              // Canvas 字体简写
+  letterSpacing?: number    // 字形间额外间距
+  break?: 'normal' | 'never' // 'never' = 原子项(chip/mention)
+  extraWidth?: number       // 额外水平 Chrome(padding/border)
+}
+
+/** 富文本内联游标 */
+export type RichInlineCursor = {
+  itemIndex: number
+  segmentIndex: number
+  graphemeIndex: number
+}

6.2公共 API 函数签名汇总

typescript
/**
+ * 核心 API (layout.ts)
+ */
+
+// 准备阶段(快速路径 + 富文本路径)
+function prepare(text: string, font: string, options?: PrepareOptions): PreparedText
+function prepareWithSegments(text: string, font: string, options?: PrepareOptions): PreparedTextWithSegments
+
+// 布局阶段(快速路径)
+function layout(prepared: PreparedText, maxWidth: number, lineHeight: number): LayoutResult
+
+// 布局阶段(富文本路径 - 批量)
+function layoutWithLines(prepared: PreparedTextWithSegments, maxWidth: number, lineHeight: number): LayoutLinesResult
+
+// 布局阶段(富文本路径 - 无字符串分配)
+function walkLineRanges(prepared: PreparedTextWithSegments, maxWidth: number, onLine: (line: LayoutLineRange) => void): number
+function measureLineStats(prepared: PreparedTextWithSegments, maxWidth: number): LineStats
+function measureNaturalWidth(prepared: PreparedTextWithSegments): number
+
+// 布局阶段(富文本路径 - 迭代器模式,可变行宽)
+function layoutNextLine(prepared: PreparedTextWithSegments, start: LayoutCursor, maxWidth: number): LayoutLine | null
+function layoutNextLineRange(prepared: PreparedTextWithSegments, start: LayoutCursor, maxWidth: number): LayoutLineRange | null
+function materializeLineRange(prepared: PreparedTextWithSegments, line: LayoutLineRange): LayoutLine
+
+// 缓存控制
+function clearCache(): void
+function setLocale(locale?: string): void
+
+/**
+ * 富文本内联 API (rich-inline.ts)
+ */
+function prepareRichInline(items: RichInlineItem[]): PreparedRichInline
+function layoutNextRichInlineLineRange(prepared: PreparedRichInline, maxWidth: number, start?: RichInlineCursor): RichInlineLineRange | null
+function walkRichInlineLineRanges(prepared: PreparedRichInline, maxWidth: number, onLine: (line: RichInlineLineRange) => void): number
+function materializeRichInlineLineRange(prepared: PreparedRichInline, line: RichInlineLineRange): RichInlineLine
+function measureRichInlineStats(prepared: PreparedRichInline, maxWidth: number): RichInlineStats

8. 快速开始

8.1 环境配置

sh
# 安装依赖
+bun install
+
+# 启动开发服务器
+bun start        # → http://localhost:3000
+
+# 运行类型检查 + 代码检查
+bun run check    # tsc + oxlint + knip
+
+# 运行测试
+bun test

8.2 安装与使用

sh
npm install @chenglou/pretext
typescript
import { prepare, layout } from '@chenglou/pretext'
+
+const prepared = prepare('AGI 春天到了. بدأت الرحلة 🚀‎', '16px Inter')
+const { height, lineCount } = layout(prepared, 320, 20)
+// height 和 lineCount 精确匹配浏览器行为

8.3 典型用例

用例推荐 API
虚拟滚动高度预测prepare() + layout()
Canvas 自定义渲染prepareWithSegments() + layoutWithLines()
浮动图片绕排prepareWithSegments() + layoutNextLineRange() + materializeLineRange()
多行 shrinkwrapprepareWithSegments() + walkLineRanges()
内联富文本 (chip/mention)@chenglou/pretext/rich-inline
`,13))])}const m=k(c,[["render",F]]);export{A as __pageData,m as default}; diff --git a/assets/insight-labs_repo-insight_pretext.md.-L6NQ6rn.lean.js b/assets/insight-labs_repo-insight_pretext.md.-L6NQ6rn.lean.js new file mode 100644 index 0000000..1e5ba37 --- /dev/null +++ b/assets/insight-labs_repo-insight_pretext.md.-L6NQ6rn.lean.js @@ -0,0 +1 @@ +import{_ as k,r as t,c as r,o as d,d as h,b as i,a as s,w as e,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const A=JSON.parse('{"title":"Pretext 开源项目解读","description":"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Pretext 开源项目解读","tldr":"面向前端的、与浏览器行为高度一致的高性能文本测量与布局引擎库。","description":"Pretext 是一个纯 JavaScript/TypeScript 文本布局与测量库,通过跳过 DOM 测量来实现高性能多行文本排版,同时保持与浏览器行为的高度一致。","abstract":null,"permalink":"/insight-labs/repo-insight/pretext","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/pretext.md","filePath":"31.Insight Labs/11.Reop Insight Reports/06.pretext.md"}'),c={name:"insight-labs/repo-insight/pretext.md"};function F(g,a,b,y,o,u){const p=t("MermaidChart"),l=t("ClientOnly");return d(),r("div",null,[a[0]||(a[0]=h("",54)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Layout%20as%20layout.ts%0A%20%20%20%20participant%20Analysis%20as%20analysis.ts%0A%20%20%20%20participant%20Measure%20as%20measurement.ts%0A%20%20%20%20participant%20LineBreak%20as%20line-break.ts%0A%0A%20%20%20%20Note%20over%20User%3A%20%E5%87%86%E5%A4%87%E9%98%B6%E6%AE%B5%EF%BC%88%E4%B8%80%E6%AC%A1%E6%80%A7%EF%BC%89%0A%20%20%20%20User-%3E%3ELayout%3A%20prepare(text%2C%20'16px%20Inter')%0A%20%20%20%20activate%20Layout%0A%20%20%20%20Layout-%3E%3EAnalysis%3A%20analyzeText(text%2C%20opts)%0A%20%20%20%20activate%20Analysis%0A%20%20%20%20Analysis-%3E%3EAnalysis%3A%20normalizeWhitespaceNormal()%0A%20%20%20%20Analysis-%3E%3EAnalysis%3A%20Intl.Segmenter%20%E8%AF%8D%E7%BA%A7%E5%88%86%E8%AF%8D%0A%20%20%20%20Analysis-%3E%3EAnalysis%3A%20%E6%A0%87%E7%82%B9%E8%83%B6%E5%90%88%20%2B%20CJK%20%E7%A6%81%E5%88%99%E5%A4%84%E7%90%86%0A%20%20%20%20Analysis--%3E%3ELayout%3A%20TextAnalysis%20%7B%20segments%2C%20kinds%2C%20...%20%7D%0A%20%20%20%20deactivate%20Analysis%0A%0A%20%20%20%20Loop%20%E6%AF%8F%E4%B8%AA%E6%AE%B5%0A%20%20%20%20%20%20%20%20Layout-%3E%3EMeasure%3A%20getSegmentMetrics(segment%2C%20fontCache)%0A%20%20%20%20%20%20%20%20activate%20Measure%0A%20%20%20%20%20%20%20%20Measure-%3E%3EMeasure%3A%20canvas.measureText(segment)%0A%20%20%20%20%20%20%20%20Measure-%3E%3EMeasure%3A%20Emoji%20%E4%BF%AE%E6%AD%A3%20(%E5%A6%82%E9%9C%80%E8%A6%81)%0A%20%20%20%20%20%20%20%20Measure--%3E%3ELayout%3A%20SegmentMetrics%20%7B%20width%2C%20...%20%7D%0A%20%20%20%20%20%20%20%20deactivate%20Measure%0A%20%20%20%20end%0A%0A%20%20%20%20Layout-%3E%3ELayout%3A%20%E6%9E%84%E5%BB%BA%20PreparedCore%0A%20%20%20%20Layout--%3E%3EUser%3A%20PreparedText%20(%E4%B8%8D%E9%80%8F%E6%98%8E%E5%8F%A5%E6%9F%84)%0A%20%20%20%20deactivate%20Layout%0A%0A%20%20%20%20Note%20over%20User%3A%20%E5%B8%83%E5%B1%80%E9%98%B6%E6%AE%B5%EF%BC%88%E5%A4%9A%E6%AC%A1%E8%B0%83%E7%94%A8%EF%BC%8C%E7%83%AD%E8%B7%AF%E5%BE%84%EF%BC%89%0A%20%20%20%20User-%3E%3ELayout%3A%20layout(prepared%2C%20320%2C%2020)%0A%20%20%20%20activate%20Layout%0A%20%20%20%20Layout-%3E%3ELineBreak%3A%20countPreparedLines(prepared%2C%20320)%0A%20%20%20%20activate%20LineBreak%0A%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E9%80%90%E6%AE%B5%E7%B4%AF%E5%8A%A0%E5%AE%BD%E5%BA%A6%0A%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E5%AE%BD%E5%BA%A6%20%3E%20maxWidth%3F%20%E5%9B%9E%E6%BA%AF%E6%96%AD%E7%82%B9%0A%20%20%20%20LineBreak--%3E%3ELayout%3A%20%7B%20lineCount%20%7D%0A%20%20%20%20deactivate%20LineBreak%0A%20%20%20%20Layout-%3E%3ELayout%3A%20height%20%3D%20lineCount%20*%2020%0A%20%20%20%20Layout--%3E%3EUser%3A%20%7B%20height%3A%2060%2C%20lineCount%3A%203%20%7D%0A%20%20%20%20deactivate%20Layout%0A",showToolbar:"1"})]),_:1}),a[1]||(a[1]=s("h3",{id:"场景二-手工逐行布局-可变行宽-layoutnextlinerange-materializelinerange",tabindex:"-1"},[n("场景二:手工逐行布局 + 可变行宽 (layoutNextLineRange + materializeLineRange) "),s("a",{class:"header-anchor",href:"#场景二-手工逐行布局-可变行宽-layoutnextlinerange-materializelinerange","aria-label":"Permalink to “场景二:手工逐行布局 + 可变行宽 (layoutNextLineRange + materializeLineRange)”"},"​")],-1)),a[2]||(a[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户需要将文本精确分配到各行,每行宽度可能不同(例如浮动图片绕排)。使用迭代器式 API 逐行提取。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Layout%20as%20layout.ts%0A%20%20%20%20participant%20LineBreak%20as%20line-break.ts%0A%20%20%20%20participant%20LineText%20as%20line-text.ts%0A%0A%20%20%20%20Note%20over%20User%3A%20%E5%87%86%E5%A4%87%E9%98%B6%E6%AE%B5%EF%BC%88%E5%90%8C%E5%9C%BA%E6%99%AF%E4%B8%80%EF%BC%8C%E4%BD%BF%E7%94%A8%20prepareWithSegments%EF%BC%89%0A%20%20%20%20User-%3E%3ELayout%3A%20prepareWithSegments(text%2C%20font)%0A%20%20%20%20Layout--%3E%3EUser%3A%20PreparedTextWithSegments%0A%0A%20%20%20%20Note%20over%20User%3A%20%E9%80%90%E8%A1%8C%E8%BF%AD%E4%BB%A3%0A%20%20%20%20User-%3E%3EUser%3A%20cursor%20%3D%20%7B%20segmentIndex%3A%200%2C%20graphemeIndex%3A%200%20%7D%0A%0A%20%20%20%20Loop%20%E9%81%8D%E5%8E%86%E6%AF%8F%E4%B8%80%E8%A1%8C%0A%20%20%20%20%20%20%20%20User-%3E%3EUser%3A%20width%20%3D%20%E8%AE%A1%E7%AE%97%E5%BD%93%E5%89%8D%E8%A1%8C%E5%8F%AF%E7%94%A8%E5%AE%BD%E5%BA%A6%0A%0A%20%20%20%20%20%20%20%20User-%3E%3ELayout%3A%20layoutNextLineRange(prepared%2C%20cursor%2C%20width)%0A%20%20%20%20%20%20%20%20activate%20Layout%0A%20%20%20%20%20%20%20%20Layout-%3E%3ELineBreak%3A%20stepPreparedLineGeometryFromChunk(prepared%2C%20cursor%2C%20width)%0A%20%20%20%20%20%20%20%20activate%20LineBreak%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E4%BB%8E%20cursor%20%E5%BC%80%E5%A7%8B%E7%B4%AF%E5%8A%A0%E6%AE%B5%E5%AE%BD%E5%BA%A6%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E7%A1%AE%E5%AE%9A%E6%96%AD%E7%82%B9%E4%BD%8D%E7%BD%AE%0A%20%20%20%20%20%20%20%20alt%20%E6%9C%89%E5%89%A9%E4%BD%99%E6%96%87%E6%9C%AC%0A%20%20%20%20%20%20%20%20%20%20%20%20LineBreak--%3E%3ELayout%3A%20LayoutLineRange%20%7B%20width%2C%20start%2C%20end%20%7D%0A%20%20%20%20%20%20%20%20else%20%E6%96%87%E6%9C%AC%E8%80%97%E5%B0%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20LineBreak--%3E%3ELayout%3A%20null%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20deactivate%20LineBreak%0A%20%20%20%20%20%20%20%20Layout--%3E%3EUser%3A%20range%20%E6%88%96%20null%0A%20%20%20%20%20%20%20%20deactivate%20Layout%0A%0A%20%20%20%20%20%20%20%20alt%20range%20%E4%B8%8D%E4%B8%BA%20null%0A%20%20%20%20%20%20%20%20%20%20%20%20User-%3E%3ELayout%3A%20materializeLineRange(prepared%2C%20range)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20Layout%0A%20%20%20%20%20%20%20%20%20%20%20%20Layout-%3E%3ELineText%3A%20buildLineTextFromRange(prepared%2C%20cache%2C%20start%2C%20end)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20LineText%0A%20%20%20%20%20%20%20%20%20%20%20%20LineText-%3E%3ELineText%3A%20Intl.Segmenter%20%E5%AD%97%E5%BD%A2%E6%8B%86%E5%88%86%0A%20%20%20%20%20%20%20%20%20%20%20%20LineText-%3E%3ELineText%3A%20%E6%AE%B5%E6%96%87%E6%9C%AC%E6%8B%BC%E6%8E%A5%20%2B%20%E8%BD%AF%E8%BF%9E%E5%AD%97%E7%AC%A6%E5%A4%84%E7%90%86%0A%20%20%20%20%20%20%20%20%20%20%20%20LineText--%3E%3ELayout%3A%20'line%20text%20string'%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20LineText%0A%20%20%20%20%20%20%20%20%20%20%20%20Layout--%3E%3EUser%3A%20LayoutLine%20%7B%20text%2C%20width%2C%20start%2C%20end%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20Layout%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20User-%3E%3EUser%3A%20canvas.fillText(line.text%2C%20x%2C%20y)%0A%20%20%20%20%20%20%20%20%20%20%20%20User-%3E%3EUser%3A%20cursor%20%3D%20range.end%3B%20y%20%2B%3D%20lineHeight%0A%20%20%20%20%20%20%20%20else%20%E6%96%87%E6%9C%AC%E8%80%97%E5%B0%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20Note%20over%20User%3A%20%E9%80%80%E5%87%BA%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A",showToolbar:"1"})]),_:1}),a[3]||(a[3]=s("h3",{id:"场景三-多行-shrinkwrap-walklineranges",tabindex:"-1"},[n("场景三:多行 Shrinkwrap (walkLineRanges) "),s("a",{class:"header-anchor",href:"#场景三-多行-shrinkwrap-walklineranges","aria-label":"Permalink to “场景三:多行 Shrinkwrap (walkLineRanges)”"},"​")],-1)),a[4]||(a[4]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":用户需要在不知道宽度的情况下,找到刚好容纳所有文本的最小宽度(shrinkwrap)。通过 "),s("code",null,"walkLineRanges()"),n(" 不构建文本字符串地遍历所有行,统计最宽行。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),i(l,null,{default:e(()=>[i(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20Layout%20as%20layout.ts%0A%20%20%20%20participant%20LineBreak%20as%20line-break.ts%0A%0A%20%20%20%20User-%3E%3ELayout%3A%20walkLineRanges(prepared%2C%20320%2C%20onLine)%0A%20%20%20%20activate%20Layout%0A%20%20%20%20Layout-%3E%3ELineBreak%3A%20walkPreparedLinesRaw(prepared%2C%20320%2C%20callback)%0A%20%20%20%20activate%20LineBreak%0A%0A%20%20%20%20Loop%20%E6%AF%8F%E4%B8%80%E8%A1%8C%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E9%80%90%E6%AE%B5%E7%B4%AF%E5%8A%A0%E5%AE%BD%E5%BA%A6%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELineBreak%3A%20%E7%A1%AE%E5%AE%9A%E6%96%AD%E7%82%B9%0A%20%20%20%20%20%20%20%20LineBreak-%3E%3ELayout%3A%20callback(width%2C%20startSeg%2C%20startG%2C%20endSeg%2C%20endG)%0A%20%20%20%20%20%20%20%20Note%20over%20Layout%3A%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%E5%9C%A8%20onLine%20%E4%B8%AD%E6%9B%B4%E6%96%B0%20maxWidth%0A%20%20%20%20end%0A%0A%20%20%20%20LineBreak--%3E%3ELayout%3A%20lineCount%0A%20%20%20%20deactivate%20LineBreak%0A%20%20%20%20Layout--%3E%3EUser%3A%20lineCount%0A%20%20%20%20deactivate%20Layout%0A%20%20%20%20Note%20over%20User%3A%20maxWidth%20%E5%8D%B3%E4%B8%BA%20shrinkwrap%20%E5%AE%BD%E5%BA%A6%0A",showToolbar:"1"})]),_:1}),a[5]||(a[5]=h("",13))])}const m=k(c,[["render",F]]);export{A as __pageData,m as default}; diff --git a/assets/insight-labs_repo-insight_superpowers.md.CU-2mqwr.js b/assets/insight-labs_repo-insight_superpowers.md.jHsaGjp1.js similarity index 99% rename from assets/insight-labs_repo-insight_superpowers.md.CU-2mqwr.js rename to assets/insight-labs_repo-insight_superpowers.md.jHsaGjp1.js index e707e9f..e78d149 100644 --- a/assets/insight-labs_repo-insight_superpowers.md.CU-2mqwr.js +++ b/assets/insight-labs_repo-insight_superpowers.md.jHsaGjp1.js @@ -1,4 +1,4 @@ -import{_ as c,r as e,c as b,o as h,d as r,b as a,a as s,w as t,e as p}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const F=JSON.parse('{"title":"superpowers 开源项目解读","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"superpowers 开源项目解读","tldr":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","abstract":null,"permalink":"/insight-labs/repo-insight/superpowers","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/superpowers.md","filePath":"31.Insight Labs/11.Reop Insight Reports/13.superpowers.md"}'),k={name:"insight-labs/repo-insight/superpowers.md"};function E(u,n,d,o,m,g){const i=e("MermaidChart"),l=e("ClientOnly");return h(),b("div",null,[n[0]||(n[0]=r(`

superpowers 开源项目解读

项目信息

  • 项目名称:superpowers

  • 项目描述:Superpowers 是一套让 AI 编码 Agent 学会"软件工程纪律"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。

  • 项目地址:https://github.com/obra/superpowers

  • superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh

  • 解决的核心痛点

      1. AI 编码 Agent 缺乏工程纪律 — 跳过设计、测试、架构考虑
      1. 跨平台 Agent 行为不一致 — 各编码平台缺乏统一工作流标准
      1. 开发流程碎片化 — 从需求到合并的全流程缺乏自动化编排
  • 核心工作流 (5 步)

用户说"帮我做X" → ① brainstorming (需求澄清)
+import{_ as c,r as e,c as b,o as h,d as r,b as a,a as s,w as t,e as p}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const F=JSON.parse('{"title":"superpowers 开源项目解读","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"superpowers 开源项目解读","tldr":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","abstract":null,"permalink":"/insight-labs/repo-insight/superpowers","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/superpowers.md","filePath":"31.Insight Labs/11.Reop Insight Reports/14.superpowers.md"}'),k={name:"insight-labs/repo-insight/superpowers.md"};function E(u,n,d,o,m,g){const i=e("MermaidChart"),l=e("ClientOnly");return h(),b("div",null,[n[0]||(n[0]=r(`

superpowers 开源项目解读

项目信息

  • 项目名称:superpowers

  • 项目描述:Superpowers 是一套让 AI 编码 Agent 学会"软件工程纪律"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并 的完整流程。支持 7 个编码平台,零外部依赖。

  • 项目地址:https://github.com/obra/superpowers

  • superpowers-zh项目 (汉化版) 文档:https://github.com/jnMetaCode/superpowers-zh

  • 解决的核心痛点

      1. AI 编码 Agent 缺乏工程纪律 — 跳过设计、测试、架构考虑
      1. 跨平台 Agent 行为不一致 — 各编码平台缺乏统一工作流标准
      1. 开发流程碎片化 — 从需求到合并的全流程缺乏自动化编排
  • 核心工作流 (5 步)

用户说"帮我做X" → ① brainstorming (需求澄清)
                   → ② writing-plans (任务拆分)
                   → ③ subagent-driven-dev (自动执行)
                   → ④ TDD + Code Review (质量保证)
diff --git a/assets/insight-labs_repo-insight_superpowers.md.CU-2mqwr.lean.js b/assets/insight-labs_repo-insight_superpowers.md.jHsaGjp1.lean.js
similarity index 98%
rename from assets/insight-labs_repo-insight_superpowers.md.CU-2mqwr.lean.js
rename to assets/insight-labs_repo-insight_superpowers.md.jHsaGjp1.lean.js
index d92833a..9a67a18 100644
--- a/assets/insight-labs_repo-insight_superpowers.md.CU-2mqwr.lean.js
+++ b/assets/insight-labs_repo-insight_superpowers.md.jHsaGjp1.lean.js
@@ -1 +1 @@
-import{_ as c,r as e,c as b,o as h,d as r,b as a,a as s,w as t,e as p}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const F=JSON.parse('{"title":"superpowers 开源项目解读","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"superpowers 开源项目解读","tldr":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","abstract":null,"permalink":"/insight-labs/repo-insight/superpowers","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/superpowers.md","filePath":"31.Insight Labs/11.Reop Insight Reports/13.superpowers.md"}'),k={name:"insight-labs/repo-insight/superpowers.md"};function E(u,n,d,o,m,g){const i=e("MermaidChart"),l=e("ClientOnly");return h(),b("div",null,[n[0]||(n[0]=r("",48)),a(l,null,{default:t(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Agent%20as%20Agent%20(%E4%B8%BB%E4%BC%9A%E8%AF%9D)%0A%20%20%20%20participant%20Hook%20as%20SessionStart%20Hook%0A%20%20%20%20participant%20US%20as%20using-superpowers%0A%20%20%20%20participant%20BS%20as%20brainstorming%0A%20%20%20%20participant%20WP%20as%20writing-plans%0A%20%20%20%20participant%20SDD%20as%20subagent-driven-dev%0A%20%20%20%20participant%20SA%20as%20SubAgent%20(%E7%8B%AC%E7%AB%8B%E4%B8%8A%E4%B8%8B%E6%96%87)%0A%20%20%20%20participant%20TDD%20as%20test-driven-development%0A%0A%20%20%20%20Note%20over%20Hook%3A%20%E4%BC%9A%E8%AF%9D%E5%90%AF%E5%8A%A8%0A%20%20%20%20Hook-%3E%3EHook%3A%20%E6%A3%80%E6%B5%8B%E5%B9%B3%E5%8F%B0%20(CURSOR%2FCC%2FCOPILOT)%0A%20%20%20%20Hook-%3E%3EHook%3A%20%E8%AF%BB%E5%8F%96%20using-superpowers%2FSKILL.md%0A%20%20%20%20Hook-%3E%3EAgent%3A%20%E6%B3%A8%E5%85%A5%20%3CEXTREMELY_IMPORTANT%3E%20%E6%8A%80%E8%83%BD%E5%BC%95%E5%AF%BC%0A%20%20%20%20Agent-%3E%3EUS%3A%20%E8%8E%B7%E5%BE%97%E6%8A%80%E8%83%BD%E7%B3%BB%E7%BB%9F%E8%83%BD%E5%8A%9B%0A%0A%20%20%20%20Note%20over%20User%2CAgent%3A%20%E7%94%A8%E6%88%B7%E6%8F%90%E5%87%BA%E9%9C%80%E6%B1%82%0A%20%20%20%20User-%3E%3EAgent%3A%20%22%E5%B8%AE%E6%88%91%E5%81%9A%E4%B8%80%E4%B8%AA%20React%20Todo%20List%22%0A%20%20%20%20Agent-%3E%3EUS%3A%20%E6%A3%80%E6%9F%A5%E9%80%82%E7%94%A8%E6%8A%80%E8%83%BD%0A%20%20%20%20US--%3E%3EAgent%3A%20%E8%A7%A6%E5%8F%91%20brainstorming%0A%0A%20%20%20%20Agent-%3E%3EBS%3A%20%E5%8A%A0%E8%BD%BD%20brainstorming%0A%20%20%20%20activate%20BS%0A%20%20%20%20BS-%3E%3EBS%3A%20%E6%A3%80%E6%9F%A5%E9%A1%B9%E7%9B%AE%E4%B8%8A%E4%B8%8B%E6%96%87%0A%20%20%20%20BS-%3E%3EUser%3A%20%E6%BE%84%E6%B8%85%E9%97%AE%E9%A2%98%20(%E4%B8%80%E6%AC%A1%E4%B8%80%E4%B8%AA)%0A%20%20%20%20User--%3E%3EBS%3A%20%E5%9B%9E%E7%AD%94%0A%20%20%20%20BS-%3E%3EUser%3A%20%E6%8F%90%E5%87%BA%202-3%20%E7%A7%8D%E6%96%B9%E6%A1%88%20%2B%20%E6%8E%A8%E8%8D%90%0A%20%20%20%20User--%3E%3EBS%3A%20%E9%80%89%E6%8B%A9%E6%96%B9%E6%A1%88%0A%20%20%20%20BS-%3E%3EUser%3A%20%E5%88%86%E6%AE%B5%E5%91%88%E7%8E%B0%E8%AE%BE%E8%AE%A1%0A%20%20%20%20User--%3E%3EBS%3A%20%E6%89%B9%E5%87%86%E8%AE%BE%E8%AE%A1%0A%20%20%20%20BS-%3E%3EBS%3A%20%E5%86%99%E5%85%A5%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3%20(docs%2Fsuperpowers%2Fspecs%2F)%0A%20%20%20%20BS-%3E%3EBS%3A%20%E8%A7%84%E6%A0%BC%E8%87%AA%E6%88%91%E5%AE%A1%E6%9F%A5%0A%20%20%20%20BS-%3E%3EUser%3A%20%E8%AF%B7%E5%AE%A1%E6%9F%A5%E8%A7%84%E6%A0%BC%E6%96%87%E4%BB%B6%0A%20%20%20%20User--%3E%3EBS%3A%20%E6%89%B9%E5%87%86%0A%20%20%20%20deactivate%20BS%0A%0A%20%20%20%20BS-%3E%3EWP%3A%20%E8%BD%AC%E6%8D%A2%E5%88%B0%20writing-plans%0A%20%20%20%20activate%20WP%0A%20%20%20%20WP-%3E%3EWP%3A%20%E5%88%86%E6%9E%90%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3%0A%20%20%20%20WP-%3E%3EWP%3A%20%E6%8B%86%E5%88%86%E4%B8%BA%202-5%20%E5%88%86%E9%92%9F%E7%9A%84%E7%BB%86%E7%B2%92%E5%BA%A6%E4%BB%BB%E5%8A%A1%0A%20%20%20%20WP-%3E%3EWP%3A%20%E5%86%99%E5%85%A5%E8%AE%A1%E5%88%92%E6%96%87%E6%A1%A3%20(docs%2Fsuperpowers%2Fplans%2F)%0A%20%20%20%20WP-%3E%3EUser%3A%20%E5%91%88%E7%8E%B0%E4%BB%BB%E5%8A%A1%E6%B8%85%E5%8D%95%0A%20%20%20%20User--%3E%3EWP%3A%20%E6%89%B9%E5%87%86%E6%89%A7%E8%A1%8C%0A%20%20%20%20deactivate%20WP%0A%0A%20%20%20%20WP-%3E%3ESDD%3A%20%E8%BD%AC%E6%8D%A2%E5%88%B0%20subagent-driven-dev%0A%20%20%20%20activate%20SDD%0A%20%20%20%20SDD-%3E%3ESDD%3A%20%E8%AF%BB%E5%8F%96%E8%AE%A1%E5%88%92%EF%BC%8C%E6%8F%90%E5%8F%96%E4%BB%BB%E5%8A%A1%0A%20%20%20%20SDD-%3E%3ESDD%3A%20%E5%88%9B%E5%BB%BA%20TodoWrite%20%E4%BB%BB%E5%8A%A1%E5%88%97%E8%A1%A8%0A%0A%20%20%20%20loop%20%E6%AF%8F%E4%B8%AA%E4%BB%BB%E5%8A%A1%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E5%88%86%E6%B4%BE%E5%AE%9E%E7%8E%B0%E8%80%85%E5%AD%90Agent%0A%20%20%20%20%20%20%20%20activate%20SA%0A%20%20%20%20%20%20%20%20SA-%3E%3ETDD%3A%20RED%3A%20%E7%BC%96%E5%86%99%E5%A4%B1%E8%B4%A5%E6%B5%8B%E8%AF%95%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20SA-%3E%3ETDD%3A%20GREEN%3A%20%E7%BC%96%E5%86%99%E6%9C%80%E5%B0%8F%E5%AE%9E%E7%8E%B0%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20REFACTOR%3A%20%E6%B8%85%E7%90%86%E4%BB%A3%E7%A0%81%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E6%8F%90%E4%BA%A4%20commit%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E8%87%AA%E6%88%91%E5%AE%A1%E6%9F%A5%0A%20%20%20%20%20%20%20%20deactivate%20SA%0A%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E5%88%86%E6%B4%BE%E8%A7%84%E6%A0%BC%E5%AE%A1%E6%9F%A5%E8%80%85%E5%AD%90Agent%0A%20%20%20%20%20%20%20%20activate%20SA%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E5%AF%B9%E6%AF%94%E4%BB%A3%E7%A0%81%20vs%20%E8%A7%84%E6%A0%BC%0A%20%20%20%20%20%20%20%20alt%20%E8%A7%84%E6%A0%BC%E5%B7%AE%E5%BC%82%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E5%8F%91%E7%8E%B0%E5%B7%AE%E5%BC%82%0A%20%20%20%20%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E4%BF%AE%E5%A4%8D%E5%B7%AE%E8%B7%9D%0A%20%20%20%20%20%20%20%20else%20%E8%A7%84%E6%A0%BC%E5%90%88%E8%A7%84%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20deactivate%20SA%0A%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E5%88%86%E6%B4%BE%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F%E5%AE%A1%E6%9F%A5%E8%80%85%E5%AD%90Agent%0A%20%20%20%20%20%20%20%20activate%20SA%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E5%AE%A1%E6%9F%A5%20DRY%2FYAGNI%2F%E5%8F%AF%E8%AF%BB%E6%80%A7%0A%20%20%20%20%20%20%20%20alt%20%E8%B4%A8%E9%87%8F%E9%97%AE%E9%A2%98%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E5%8F%91%E7%8E%B0%E8%B4%A8%E9%87%8F%E9%97%AE%E9%A2%98%0A%20%20%20%20%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E4%BF%AE%E5%A4%8D%E9%97%AE%E9%A2%98%0A%20%20%20%20%20%20%20%20else%20%E8%B4%A8%E9%87%8F%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20deactivate%20SA%0A%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESDD%3A%20%E6%A0%87%E8%AE%B0%E4%BB%BB%E5%8A%A1%E5%AE%8C%E6%88%90%0A%20%20%20%20end%0A%0A%20%20%20%20deactivate%20SDD%0A%0A%20%20%20%20Note%20over%20Agent%3A%20%E8%B0%83%E7%94%A8%20finishing-a-development-branch%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95%E5%A5%97%E4%BB%B6%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E6%A3%80%E6%B5%8B%20Git%20%E7%8E%AF%E5%A2%83%0A%20%20%20%20Agent-%3E%3EUser%3A%20%E5%91%88%E7%8E%B0%E9%80%89%E9%A1%B9%3A%20Merge%20%2F%20PR%20%2F%20Keep%20%2F%20Discard%0A%20%20%20%20User--%3E%3EAgent%3A%20%E9%80%89%E6%8B%A9%20Merge%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E5%90%88%E5%B9%B6%E5%88%B0%E4%B8%BB%E5%88%86%E6%94%AF%EF%BC%8C%E6%B8%85%E7%90%86%20Worktree%0A",showToolbar:"1"})]),_:1}),n[1]||(n[1]=s("h3",{id:"场景二-bug-修复调试流程",tabindex:"-1"},[p("场景二:Bug 修复调试流程 "),s("a",{class:"header-anchor",href:"#场景二-bug-修复调试流程","aria-label":"Permalink to “场景二:Bug 修复调试流程”"},"​")],-1)),n[2]||(n[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),p(":用户报告一个 bug,Agent 触发 systematic-debugging 技能,经过 4 阶段根因分析 → TDD 修复 → 验证的完整流程。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),p(":")])])],-1)),a(l,null,{default:t(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Agent%20as%20Agent%0A%20%20%20%20participant%20SD%20as%20systematic-debugging%0A%20%20%20%20participant%20Git%20as%20Git%20bisect%0A%20%20%20%20participant%20TDD%20as%20test-driven-development%0A%20%20%20%20participant%20VBC%20as%20verification-before-completion%0A%0A%20%20%20%20User-%3E%3EAgent%3A%20%22XX%20%E5%8A%9F%E8%83%BD%E5%9D%8F%E4%BA%86%22%0A%20%20%20%20Agent-%3E%3ESD%3A%20%E8%A7%A6%E5%8F%91%20systematic-debugging%0A%20%20%20%20activate%20SD%0A%0A%20%20%20%20Note%20over%20SD%3A%20Phase%201%3A%20%E6%A0%B9%E5%9B%A0%E8%B0%83%E6%9F%A5%0A%20%20%20%20SD-%3E%3ESD%3A%20%E4%BB%94%E7%BB%86%E8%AF%BB%E5%8F%96%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF%0A%20%20%20%20SD-%3E%3ESD%3A%20%E7%A8%B3%E5%AE%9A%E5%A4%8D%E7%8E%B0%20bug%0A%20%20%20%20SD-%3E%3ESD%3A%20%E4%BA%8C%E5%88%86%E6%90%9C%E7%B4%A2%E5%AE%9A%E4%BD%8D%E9%97%AE%E9%A2%98%E8%8C%83%E5%9B%B4%0A%0A%20%20%20%20alt%20%E9%9A%BE%E4%BB%A5%E5%AE%9A%E4%BD%8D%0A%20%20%20%20%20%20%20%20SD-%3E%3EGit%3A%20git%20bisect%20%E6%9F%A5%E6%89%BE%E5%BC%95%E5%85%A5%20commit%0A%20%20%20%20%20%20%20%20Git--%3E%3ESD%3A%20%E5%AE%9A%E4%BD%8D%E5%88%B0%E5%85%B7%E4%BD%93%20commit%0A%20%20%20%20end%0A%0A%20%20%20%20SD-%3E%3ESD%3A%20%E5%BD%A2%E6%88%90%E5%B9%B6%E9%AA%8C%E8%AF%81%E6%A0%B9%E5%9B%A0%E5%81%87%E8%AE%BE%0A%20%20%20%20SD--%3E%3EAgent%3A%20%E6%A0%B9%E5%9B%A0%E7%A1%AE%E8%AE%A4%0A%0A%20%20%20%20Note%20over%20SD%3A%20Phase%202%3A%20%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88%E8%AE%BE%E8%AE%A1%0A%20%20%20%20SD-%3E%3ESD%3A%20%E8%AE%BE%E8%AE%A1%E6%9C%80%E5%B0%8F%E4%BF%AE%E5%A4%8D%0A%20%20%20%20SD-%3E%3ESD%3A%20%E8%AF%84%E4%BC%B0%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4%0A%0A%20%20%20%20Note%20over%20SD%3A%20Phase%203%3A%20%E5%AE%9E%E6%96%BD%E4%BF%AE%E5%A4%8D%0A%20%20%20%20deactivate%20SD%0A%0A%20%20%20%20Agent-%3E%3ETDD%3A%20%E8%A7%A6%E5%8F%91%20TDD%0A%20%20%20%20activate%20TDD%0A%20%20%20%20TDD-%3E%3ETDD%3A%20RED%3A%20%E7%BC%96%E5%86%99%E5%A4%8D%E7%8E%B0bug%E7%9A%84%E6%B5%8B%E8%AF%95%0A%20%20%20%20TDD-%3E%3ETDD%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E5%A4%B1%E8%B4%A5%0A%20%20%20%20TDD-%3E%3ETDD%3A%20GREEN%3A%20%E7%BC%96%E5%86%99%E4%BF%AE%E5%A4%8D%E4%BB%A3%E7%A0%81%0A%20%20%20%20TDD-%3E%3ETDD%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87%0A%20%20%20%20TDD-%3E%3ETDD%3A%20REFACTOR%3A%20%E6%B8%85%E7%90%86%0A%20%20%20%20TDD-%3E%3ETDD%3A%20%E6%B7%BB%E5%8A%A0%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95%0A%20%20%20%20deactivate%20TDD%0A%0A%20%20%20%20Agent-%3E%3EVBC%3A%20%E8%A7%A6%E5%8F%91%20verification-before-completion%0A%20%20%20%20activate%20VBC%0A%20%20%20%20VBC-%3E%3EVBC%3A%20%E9%AA%8C%E8%AF%81%E5%8E%9F%E5%A7%8B%20bug%20%E5%B7%B2%E4%BF%AE%E5%A4%8D%0A%20%20%20%20VBC-%3E%3EVBC%3A%20%E9%AA%8C%E8%AF%81%E6%97%A0%E5%89%AF%E4%BD%9C%E7%94%A8%0A%20%20%20%20VBC-%3E%3EVBC%3A%20%E9%AA%8C%E8%AF%81%E8%BE%B9%E7%95%8C%E6%9D%A1%E4%BB%B6%0A%0A%20%20%20%20alt%20%E9%AA%8C%E8%AF%81%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20VBC--%3E%3ESD%3A%20%E5%9B%9E%E5%88%B0%E8%B0%83%E8%AF%95%E9%98%B6%E6%AE%B5%0A%20%20%20%20else%20%E9%AA%8C%E8%AF%81%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20VBC--%3E%3EAgent%3A%20%E4%BF%AE%E5%A4%8D%E7%A1%AE%E8%AE%A4%E5%AE%8C%E6%88%90%0A%20%20%20%20end%0A%20%20%20%20deactivate%20VBC%0A%0A%20%20%20%20Agent-%3E%3EUser%3A%20Bug%20%E5%B7%B2%E4%BF%AE%E5%A4%8D%EF%BC%8C%E9%99%84%E5%B8%A6%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95%0A",showToolbar:"1"})]),_:1}),n[3]||(n[3]=r("",19))])}const B=c(k,[["render",E]]);export{F as __pageData,B as default};
+import{_ as c,r as e,c as b,o as h,d as r,b as a,a as s,w as t,e as p}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const F=JSON.parse('{"title":"superpowers 开源项目解读","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"superpowers 开源项目解读","tldr":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","description":"Superpowers 是一套让 AI 编码 Agent 学会\\"软件工程纪律\\"的插件系统。通过 14 个可组合的 Markdown 技能,它强制 Agent 遵循:**先设计 → 再计划 → 再实现 → 测试 → 审查 → 合并** 的完整流程。支持 7 个编码平台,零外部依赖。","abstract":null,"permalink":"/insight-labs/repo-insight/superpowers","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/superpowers.md","filePath":"31.Insight Labs/11.Reop Insight Reports/14.superpowers.md"}'),k={name:"insight-labs/repo-insight/superpowers.md"};function E(u,n,d,o,m,g){const i=e("MermaidChart"),l=e("ClientOnly");return h(),b("div",null,[n[0]||(n[0]=r("",48)),a(l,null,{default:t(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Agent%20as%20Agent%20(%E4%B8%BB%E4%BC%9A%E8%AF%9D)%0A%20%20%20%20participant%20Hook%20as%20SessionStart%20Hook%0A%20%20%20%20participant%20US%20as%20using-superpowers%0A%20%20%20%20participant%20BS%20as%20brainstorming%0A%20%20%20%20participant%20WP%20as%20writing-plans%0A%20%20%20%20participant%20SDD%20as%20subagent-driven-dev%0A%20%20%20%20participant%20SA%20as%20SubAgent%20(%E7%8B%AC%E7%AB%8B%E4%B8%8A%E4%B8%8B%E6%96%87)%0A%20%20%20%20participant%20TDD%20as%20test-driven-development%0A%0A%20%20%20%20Note%20over%20Hook%3A%20%E4%BC%9A%E8%AF%9D%E5%90%AF%E5%8A%A8%0A%20%20%20%20Hook-%3E%3EHook%3A%20%E6%A3%80%E6%B5%8B%E5%B9%B3%E5%8F%B0%20(CURSOR%2FCC%2FCOPILOT)%0A%20%20%20%20Hook-%3E%3EHook%3A%20%E8%AF%BB%E5%8F%96%20using-superpowers%2FSKILL.md%0A%20%20%20%20Hook-%3E%3EAgent%3A%20%E6%B3%A8%E5%85%A5%20%3CEXTREMELY_IMPORTANT%3E%20%E6%8A%80%E8%83%BD%E5%BC%95%E5%AF%BC%0A%20%20%20%20Agent-%3E%3EUS%3A%20%E8%8E%B7%E5%BE%97%E6%8A%80%E8%83%BD%E7%B3%BB%E7%BB%9F%E8%83%BD%E5%8A%9B%0A%0A%20%20%20%20Note%20over%20User%2CAgent%3A%20%E7%94%A8%E6%88%B7%E6%8F%90%E5%87%BA%E9%9C%80%E6%B1%82%0A%20%20%20%20User-%3E%3EAgent%3A%20%22%E5%B8%AE%E6%88%91%E5%81%9A%E4%B8%80%E4%B8%AA%20React%20Todo%20List%22%0A%20%20%20%20Agent-%3E%3EUS%3A%20%E6%A3%80%E6%9F%A5%E9%80%82%E7%94%A8%E6%8A%80%E8%83%BD%0A%20%20%20%20US--%3E%3EAgent%3A%20%E8%A7%A6%E5%8F%91%20brainstorming%0A%0A%20%20%20%20Agent-%3E%3EBS%3A%20%E5%8A%A0%E8%BD%BD%20brainstorming%0A%20%20%20%20activate%20BS%0A%20%20%20%20BS-%3E%3EBS%3A%20%E6%A3%80%E6%9F%A5%E9%A1%B9%E7%9B%AE%E4%B8%8A%E4%B8%8B%E6%96%87%0A%20%20%20%20BS-%3E%3EUser%3A%20%E6%BE%84%E6%B8%85%E9%97%AE%E9%A2%98%20(%E4%B8%80%E6%AC%A1%E4%B8%80%E4%B8%AA)%0A%20%20%20%20User--%3E%3EBS%3A%20%E5%9B%9E%E7%AD%94%0A%20%20%20%20BS-%3E%3EUser%3A%20%E6%8F%90%E5%87%BA%202-3%20%E7%A7%8D%E6%96%B9%E6%A1%88%20%2B%20%E6%8E%A8%E8%8D%90%0A%20%20%20%20User--%3E%3EBS%3A%20%E9%80%89%E6%8B%A9%E6%96%B9%E6%A1%88%0A%20%20%20%20BS-%3E%3EUser%3A%20%E5%88%86%E6%AE%B5%E5%91%88%E7%8E%B0%E8%AE%BE%E8%AE%A1%0A%20%20%20%20User--%3E%3EBS%3A%20%E6%89%B9%E5%87%86%E8%AE%BE%E8%AE%A1%0A%20%20%20%20BS-%3E%3EBS%3A%20%E5%86%99%E5%85%A5%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3%20(docs%2Fsuperpowers%2Fspecs%2F)%0A%20%20%20%20BS-%3E%3EBS%3A%20%E8%A7%84%E6%A0%BC%E8%87%AA%E6%88%91%E5%AE%A1%E6%9F%A5%0A%20%20%20%20BS-%3E%3EUser%3A%20%E8%AF%B7%E5%AE%A1%E6%9F%A5%E8%A7%84%E6%A0%BC%E6%96%87%E4%BB%B6%0A%20%20%20%20User--%3E%3EBS%3A%20%E6%89%B9%E5%87%86%0A%20%20%20%20deactivate%20BS%0A%0A%20%20%20%20BS-%3E%3EWP%3A%20%E8%BD%AC%E6%8D%A2%E5%88%B0%20writing-plans%0A%20%20%20%20activate%20WP%0A%20%20%20%20WP-%3E%3EWP%3A%20%E5%88%86%E6%9E%90%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3%0A%20%20%20%20WP-%3E%3EWP%3A%20%E6%8B%86%E5%88%86%E4%B8%BA%202-5%20%E5%88%86%E9%92%9F%E7%9A%84%E7%BB%86%E7%B2%92%E5%BA%A6%E4%BB%BB%E5%8A%A1%0A%20%20%20%20WP-%3E%3EWP%3A%20%E5%86%99%E5%85%A5%E8%AE%A1%E5%88%92%E6%96%87%E6%A1%A3%20(docs%2Fsuperpowers%2Fplans%2F)%0A%20%20%20%20WP-%3E%3EUser%3A%20%E5%91%88%E7%8E%B0%E4%BB%BB%E5%8A%A1%E6%B8%85%E5%8D%95%0A%20%20%20%20User--%3E%3EWP%3A%20%E6%89%B9%E5%87%86%E6%89%A7%E8%A1%8C%0A%20%20%20%20deactivate%20WP%0A%0A%20%20%20%20WP-%3E%3ESDD%3A%20%E8%BD%AC%E6%8D%A2%E5%88%B0%20subagent-driven-dev%0A%20%20%20%20activate%20SDD%0A%20%20%20%20SDD-%3E%3ESDD%3A%20%E8%AF%BB%E5%8F%96%E8%AE%A1%E5%88%92%EF%BC%8C%E6%8F%90%E5%8F%96%E4%BB%BB%E5%8A%A1%0A%20%20%20%20SDD-%3E%3ESDD%3A%20%E5%88%9B%E5%BB%BA%20TodoWrite%20%E4%BB%BB%E5%8A%A1%E5%88%97%E8%A1%A8%0A%0A%20%20%20%20loop%20%E6%AF%8F%E4%B8%AA%E4%BB%BB%E5%8A%A1%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E5%88%86%E6%B4%BE%E5%AE%9E%E7%8E%B0%E8%80%85%E5%AD%90Agent%0A%20%20%20%20%20%20%20%20activate%20SA%0A%20%20%20%20%20%20%20%20SA-%3E%3ETDD%3A%20RED%3A%20%E7%BC%96%E5%86%99%E5%A4%B1%E8%B4%A5%E6%B5%8B%E8%AF%95%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20SA-%3E%3ETDD%3A%20GREEN%3A%20%E7%BC%96%E5%86%99%E6%9C%80%E5%B0%8F%E5%AE%9E%E7%8E%B0%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20REFACTOR%3A%20%E6%B8%85%E7%90%86%E4%BB%A3%E7%A0%81%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E6%8F%90%E4%BA%A4%20commit%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E8%87%AA%E6%88%91%E5%AE%A1%E6%9F%A5%0A%20%20%20%20%20%20%20%20deactivate%20SA%0A%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E5%88%86%E6%B4%BE%E8%A7%84%E6%A0%BC%E5%AE%A1%E6%9F%A5%E8%80%85%E5%AD%90Agent%0A%20%20%20%20%20%20%20%20activate%20SA%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E5%AF%B9%E6%AF%94%E4%BB%A3%E7%A0%81%20vs%20%E8%A7%84%E6%A0%BC%0A%20%20%20%20%20%20%20%20alt%20%E8%A7%84%E6%A0%BC%E5%B7%AE%E5%BC%82%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E5%8F%91%E7%8E%B0%E5%B7%AE%E5%BC%82%0A%20%20%20%20%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E4%BF%AE%E5%A4%8D%E5%B7%AE%E8%B7%9D%0A%20%20%20%20%20%20%20%20else%20%E8%A7%84%E6%A0%BC%E5%90%88%E8%A7%84%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20deactivate%20SA%0A%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E5%88%86%E6%B4%BE%E4%BB%A3%E7%A0%81%E8%B4%A8%E9%87%8F%E5%AE%A1%E6%9F%A5%E8%80%85%E5%AD%90Agent%0A%20%20%20%20%20%20%20%20activate%20SA%0A%20%20%20%20%20%20%20%20SA-%3E%3ESA%3A%20%E5%AE%A1%E6%9F%A5%20DRY%2FYAGNI%2F%E5%8F%AF%E8%AF%BB%E6%80%A7%0A%20%20%20%20%20%20%20%20alt%20%E8%B4%A8%E9%87%8F%E9%97%AE%E9%A2%98%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E5%8F%91%E7%8E%B0%E8%B4%A8%E9%87%8F%E9%97%AE%E9%A2%98%0A%20%20%20%20%20%20%20%20%20%20%20%20SDD-%3E%3ESA%3A%20%E4%BF%AE%E5%A4%8D%E9%97%AE%E9%A2%98%0A%20%20%20%20%20%20%20%20else%20%E8%B4%A8%E9%87%8F%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20%20%20%20%20SA--%3E%3ESDD%3A%20%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20deactivate%20SA%0A%0A%20%20%20%20%20%20%20%20SDD-%3E%3ESDD%3A%20%E6%A0%87%E8%AE%B0%E4%BB%BB%E5%8A%A1%E5%AE%8C%E6%88%90%0A%20%20%20%20end%0A%0A%20%20%20%20deactivate%20SDD%0A%0A%20%20%20%20Note%20over%20Agent%3A%20%E8%B0%83%E7%94%A8%20finishing-a-development-branch%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95%E5%A5%97%E4%BB%B6%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E6%A3%80%E6%B5%8B%20Git%20%E7%8E%AF%E5%A2%83%0A%20%20%20%20Agent-%3E%3EUser%3A%20%E5%91%88%E7%8E%B0%E9%80%89%E9%A1%B9%3A%20Merge%20%2F%20PR%20%2F%20Keep%20%2F%20Discard%0A%20%20%20%20User--%3E%3EAgent%3A%20%E9%80%89%E6%8B%A9%20Merge%0A%20%20%20%20Agent-%3E%3EAgent%3A%20%E5%90%88%E5%B9%B6%E5%88%B0%E4%B8%BB%E5%88%86%E6%94%AF%EF%BC%8C%E6%B8%85%E7%90%86%20Worktree%0A",showToolbar:"1"})]),_:1}),n[1]||(n[1]=s("h3",{id:"场景二-bug-修复调试流程",tabindex:"-1"},[p("场景二:Bug 修复调试流程 "),s("a",{class:"header-anchor",href:"#场景二-bug-修复调试流程","aria-label":"Permalink to “场景二:Bug 修复调试流程”"},"​")],-1)),n[2]||(n[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),p(":用户报告一个 bug,Agent 触发 systematic-debugging 技能,经过 4 阶段根因分析 → TDD 修复 → 验证的完整流程。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),p(":")])])],-1)),a(l,null,{default:t(()=>[a(i,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%0A%20%20%20%20participant%20Agent%20as%20Agent%0A%20%20%20%20participant%20SD%20as%20systematic-debugging%0A%20%20%20%20participant%20Git%20as%20Git%20bisect%0A%20%20%20%20participant%20TDD%20as%20test-driven-development%0A%20%20%20%20participant%20VBC%20as%20verification-before-completion%0A%0A%20%20%20%20User-%3E%3EAgent%3A%20%22XX%20%E5%8A%9F%E8%83%BD%E5%9D%8F%E4%BA%86%22%0A%20%20%20%20Agent-%3E%3ESD%3A%20%E8%A7%A6%E5%8F%91%20systematic-debugging%0A%20%20%20%20activate%20SD%0A%0A%20%20%20%20Note%20over%20SD%3A%20Phase%201%3A%20%E6%A0%B9%E5%9B%A0%E8%B0%83%E6%9F%A5%0A%20%20%20%20SD-%3E%3ESD%3A%20%E4%BB%94%E7%BB%86%E8%AF%BB%E5%8F%96%E9%94%99%E8%AF%AF%E4%BF%A1%E6%81%AF%0A%20%20%20%20SD-%3E%3ESD%3A%20%E7%A8%B3%E5%AE%9A%E5%A4%8D%E7%8E%B0%20bug%0A%20%20%20%20SD-%3E%3ESD%3A%20%E4%BA%8C%E5%88%86%E6%90%9C%E7%B4%A2%E5%AE%9A%E4%BD%8D%E9%97%AE%E9%A2%98%E8%8C%83%E5%9B%B4%0A%0A%20%20%20%20alt%20%E9%9A%BE%E4%BB%A5%E5%AE%9A%E4%BD%8D%0A%20%20%20%20%20%20%20%20SD-%3E%3EGit%3A%20git%20bisect%20%E6%9F%A5%E6%89%BE%E5%BC%95%E5%85%A5%20commit%0A%20%20%20%20%20%20%20%20Git--%3E%3ESD%3A%20%E5%AE%9A%E4%BD%8D%E5%88%B0%E5%85%B7%E4%BD%93%20commit%0A%20%20%20%20end%0A%0A%20%20%20%20SD-%3E%3ESD%3A%20%E5%BD%A2%E6%88%90%E5%B9%B6%E9%AA%8C%E8%AF%81%E6%A0%B9%E5%9B%A0%E5%81%87%E8%AE%BE%0A%20%20%20%20SD--%3E%3EAgent%3A%20%E6%A0%B9%E5%9B%A0%E7%A1%AE%E8%AE%A4%0A%0A%20%20%20%20Note%20over%20SD%3A%20Phase%202%3A%20%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%A1%88%E8%AE%BE%E8%AE%A1%0A%20%20%20%20SD-%3E%3ESD%3A%20%E8%AE%BE%E8%AE%A1%E6%9C%80%E5%B0%8F%E4%BF%AE%E5%A4%8D%0A%20%20%20%20SD-%3E%3ESD%3A%20%E8%AF%84%E4%BC%B0%E5%BD%B1%E5%93%8D%E8%8C%83%E5%9B%B4%0A%0A%20%20%20%20Note%20over%20SD%3A%20Phase%203%3A%20%E5%AE%9E%E6%96%BD%E4%BF%AE%E5%A4%8D%0A%20%20%20%20deactivate%20SD%0A%0A%20%20%20%20Agent-%3E%3ETDD%3A%20%E8%A7%A6%E5%8F%91%20TDD%0A%20%20%20%20activate%20TDD%0A%20%20%20%20TDD-%3E%3ETDD%3A%20RED%3A%20%E7%BC%96%E5%86%99%E5%A4%8D%E7%8E%B0bug%E7%9A%84%E6%B5%8B%E8%AF%95%0A%20%20%20%20TDD-%3E%3ETDD%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E5%A4%B1%E8%B4%A5%0A%20%20%20%20TDD-%3E%3ETDD%3A%20GREEN%3A%20%E7%BC%96%E5%86%99%E4%BF%AE%E5%A4%8D%E4%BB%A3%E7%A0%81%0A%20%20%20%20TDD-%3E%3ETDD%3A%20%E7%A1%AE%E8%AE%A4%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87%0A%20%20%20%20TDD-%3E%3ETDD%3A%20REFACTOR%3A%20%E6%B8%85%E7%90%86%0A%20%20%20%20TDD-%3E%3ETDD%3A%20%E6%B7%BB%E5%8A%A0%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95%0A%20%20%20%20deactivate%20TDD%0A%0A%20%20%20%20Agent-%3E%3EVBC%3A%20%E8%A7%A6%E5%8F%91%20verification-before-completion%0A%20%20%20%20activate%20VBC%0A%20%20%20%20VBC-%3E%3EVBC%3A%20%E9%AA%8C%E8%AF%81%E5%8E%9F%E5%A7%8B%20bug%20%E5%B7%B2%E4%BF%AE%E5%A4%8D%0A%20%20%20%20VBC-%3E%3EVBC%3A%20%E9%AA%8C%E8%AF%81%E6%97%A0%E5%89%AF%E4%BD%9C%E7%94%A8%0A%20%20%20%20VBC-%3E%3EVBC%3A%20%E9%AA%8C%E8%AF%81%E8%BE%B9%E7%95%8C%E6%9D%A1%E4%BB%B6%0A%0A%20%20%20%20alt%20%E9%AA%8C%E8%AF%81%E5%A4%B1%E8%B4%A5%0A%20%20%20%20%20%20%20%20VBC--%3E%3ESD%3A%20%E5%9B%9E%E5%88%B0%E8%B0%83%E8%AF%95%E9%98%B6%E6%AE%B5%0A%20%20%20%20else%20%E9%AA%8C%E8%AF%81%E9%80%9A%E8%BF%87%0A%20%20%20%20%20%20%20%20VBC--%3E%3EAgent%3A%20%E4%BF%AE%E5%A4%8D%E7%A1%AE%E8%AE%A4%E5%AE%8C%E6%88%90%0A%20%20%20%20end%0A%20%20%20%20deactivate%20VBC%0A%0A%20%20%20%20Agent-%3E%3EUser%3A%20Bug%20%E5%B7%B2%E4%BF%AE%E5%A4%8D%EF%BC%8C%E9%99%84%E5%B8%A6%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95%0A",showToolbar:"1"})]),_:1}),n[3]||(n[3]=r("",19))])}const B=c(k,[["render",E]]);export{F as __pageData,B as default};
diff --git a/assets/insight-labs_repo-insight_three-js.md.EPr9hTuq.js b/assets/insight-labs_repo-insight_three-js.md.CXlVZ59K.js
similarity index 99%
rename from assets/insight-labs_repo-insight_three-js.md.EPr9hTuq.js
rename to assets/insight-labs_repo-insight_three-js.md.CXlVZ59K.js
index fffc369..c5531c7 100644
--- a/assets/insight-labs_repo-insight_three-js.md.EPr9hTuq.js
+++ b/assets/insight-labs_repo-insight_three-js.md.CXlVZ59K.js
@@ -1,4 +1,4 @@
-import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const A=JSON.parse('{"title":"Three.js 开源项目解读","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Three.js 开源项目解读","tldr":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","abstract":null,"permalink":"/insight-labs/repo-insight/three-js","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/three-js.md","filePath":"31.Insight Labs/11.Reop Insight Reports/05.three.js.md"}'),d={name:"insight-labs/repo-insight/three-js.md"};function g(E,i,y,c,b,B){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e(`

Three.js 开源项目解读

项目信息

  • 项目名称:Three.js

  • 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。

  • 项目地址:https://github.com/mrdoob/three.js

  • 官方文档:https://threejs.org

  • 中文文档:https://www.webgl3d.cn

  • 解决的核心痛点

    • WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图
    • 跨浏览器 3D 兼容性:统一 WebGL 1.0/2.0、WebGPU 的 API 差异,提供一致的渲染结果
    • 缺少一站式 3D 解决方案:整合场景图、材质、光照、动画、加载器、后处理等完整 3D 管线
  • 目标用户:Web 前端开发者、创意技术专家、游戏开发者、XR/VR 开发者、教育与科研人员

  • 核心技术亮点

    • 双后端架构:同时支持 WebGL 2 和 WebGPU,通过统一 Backend 接口实现后端透明切换
    • TSL 着色语言:自研节点化着色语言,编译到 GLSL/WGSL,实现着色器跨后端复用
    • PBR 物理渲染:内置完整的 PBR 材质系统 (roughness/metalness 工作流),支持 IBL 环境光照
    • 丰富的扩展生态:50+ 加载器、30+ 后处理效果、10+ 交互控制器,全部可 Tree Shaking

1. 项目概览

1.1 项目定位与核心价值

一句话定位:three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。

解决的核心痛点

  1. WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图
  2. 跨浏览器 3D 兼容性:统一 WebGL 1.0/2.0、WebGPU 的 API 差异,提供一致的渲染结果
  3. 缺少一站式 3D 解决方案:整合场景图、材质、光照、动画、加载器、后处理等完整 3D 管线

目标用户:Web 前端开发者、创意技术专家、游戏开发者、XR/VR 开发者、教育与科研人员

1.2 核心技术亮点

  • 双后端架构:同时支持 WebGL 2 和 WebGPU,通过统一 Backend 接口实现后端透明切换
  • TSL 着色语言:自研节点化着色语言,编译到 GLSL/WGSL,实现着色器跨后端复用
  • PBR 物理渲染:内置完整的 PBR 材质系统 (roughness/metalness 工作流),支持 IBL 环境光照
  • 丰富的扩展生态:50+ 加载器、30+ 后处理效果、10+ 交互控制器,全部可 Tree Shaking

1.3 技术栈与选型对比

维度选型替代方案权衡
构建工具RollupWebpack/ViteTree Shaking 效果最优,适合库构建
着色语言TSL (自研) + GLSL + WGSL纯 GLSL/WGSL跨后端复用,一次编写多处运行
模块格式ES Module 为主CommonJS静态分析 + Tree Shaking
几何体BufferGeometry (TypedArray)旧版 Geometry (对象)GPU 友好,性能优先
默认材质PBR (MeshStandardMaterial)Phong/Lambert工业标准,参数直观

2. 整体架构设计

2.1 架构概述

three.js 采用分层插件化架构,从上到下分为五层:

  • 应用层 (Addons):丰富的扩展生态,包括高级加载器、控制器、后处理效果等,用户按需引入
  • 场景图层 (Scene Graph):声明式 3D 对象模型,通过树形结构组织 3D 世界,节点支持变换层级继承
  • 渲染抽象层 (Renderer Abstraction):统一渲染接口,隔离后端差异。Renderer 管理渲染流程,Backend 封装底层 API
  • 后端实现层 (Backend Implementation):WebGL 2 和 WebGPU 两套具体实现,包含着色器管理、状态管理、纹理管理等
  • 节点着色层 (TSL/Node System):自研着色语言,通过节点图编译到 GLSL/WGSL,实现跨后端着色器复用

2.2 整体架构图

text
+===============================================================================+
+import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const A=JSON.parse('{"title":"Three.js 开源项目解读","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Three.js 开源项目解读","tldr":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","abstract":null,"permalink":"/insight-labs/repo-insight/three-js","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/three-js.md","filePath":"31.Insight Labs/11.Reop Insight Reports/05.three.js.md"}'),d={name:"insight-labs/repo-insight/three-js.md"};function g(E,i,y,c,b,B){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e(`

Three.js 开源项目解读

项目信息

  • 项目名称:Three.js

  • 项目描述: three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。

  • 项目地址:https://github.com/mrdoob/three.js

  • 官方文档:https://threejs.org

  • 中文文档:https://www.webgl3d.cn

  • 解决的核心痛点

    • WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图
    • 跨浏览器 3D 兼容性:统一 WebGL 1.0/2.0、WebGPU 的 API 差异,提供一致的渲染结果
    • 缺少一站式 3D 解决方案:整合场景图、材质、光照、动画、加载器、后处理等完整 3D 管线
  • 目标用户:Web 前端开发者、创意技术专家、游戏开发者、XR/VR 开发者、教育与科研人员

  • 核心技术亮点

    • 双后端架构:同时支持 WebGL 2 和 WebGPU,通过统一 Backend 接口实现后端透明切换
    • TSL 着色语言:自研节点化着色语言,编译到 GLSL/WGSL,实现着色器跨后端复用
    • PBR 物理渲染:内置完整的 PBR 材质系统 (roughness/metalness 工作流),支持 IBL 环境光照
    • 丰富的扩展生态:50+ 加载器、30+ 后处理效果、10+ 交互控制器,全部可 Tree Shaking

1. 项目概览

1.1 项目定位与核心价值

一句话定位:three.js 是世界上最流行、最易用的 JavaScript 3D 渲染库,让开发者在浏览器中零插件创建 GPU 加速的 3D 内容。

解决的核心痛点

  1. WebGL/WebGPU 原生 API 复杂度过高:原生 WebGL 需要数百行代码绘制一个三角形,three.js 将其封装为声明式场景图
  2. 跨浏览器 3D 兼容性:统一 WebGL 1.0/2.0、WebGPU 的 API 差异,提供一致的渲染结果
  3. 缺少一站式 3D 解决方案:整合场景图、材质、光照、动画、加载器、后处理等完整 3D 管线

目标用户:Web 前端开发者、创意技术专家、游戏开发者、XR/VR 开发者、教育与科研人员

1.2 核心技术亮点

  • 双后端架构:同时支持 WebGL 2 和 WebGPU,通过统一 Backend 接口实现后端透明切换
  • TSL 着色语言:自研节点化着色语言,编译到 GLSL/WGSL,实现着色器跨后端复用
  • PBR 物理渲染:内置完整的 PBR 材质系统 (roughness/metalness 工作流),支持 IBL 环境光照
  • 丰富的扩展生态:50+ 加载器、30+ 后处理效果、10+ 交互控制器,全部可 Tree Shaking

1.3 技术栈与选型对比

维度选型替代方案权衡
构建工具RollupWebpack/ViteTree Shaking 效果最优,适合库构建
着色语言TSL (自研) + GLSL + WGSL纯 GLSL/WGSL跨后端复用,一次编写多处运行
模块格式ES Module 为主CommonJS静态分析 + Tree Shaking
几何体BufferGeometry (TypedArray)旧版 Geometry (对象)GPU 友好,性能优先
默认材质PBR (MeshStandardMaterial)Phong/Lambert工业标准,参数直观

2. 整体架构设计

2.1 架构概述

three.js 采用分层插件化架构,从上到下分为五层:

  • 应用层 (Addons):丰富的扩展生态,包括高级加载器、控制器、后处理效果等,用户按需引入
  • 场景图层 (Scene Graph):声明式 3D 对象模型,通过树形结构组织 3D 世界,节点支持变换层级继承
  • 渲染抽象层 (Renderer Abstraction):统一渲染接口,隔离后端差异。Renderer 管理渲染流程,Backend 封装底层 API
  • 后端实现层 (Backend Implementation):WebGL 2 和 WebGPU 两套具体实现,包含着色器管理、状态管理、纹理管理等
  • 节点着色层 (TSL/Node System):自研着色语言,通过节点图编译到 GLSL/WGSL,实现跨后端着色器复用

2.2 整体架构图

text
+===============================================================================+
 |                           three.js 分层架构图                                  |
 +===============================================================================+
 |                                                                               |
diff --git a/assets/insight-labs_repo-insight_three-js.md.EPr9hTuq.lean.js b/assets/insight-labs_repo-insight_three-js.md.CXlVZ59K.lean.js
similarity index 99%
rename from assets/insight-labs_repo-insight_three-js.md.EPr9hTuq.lean.js
rename to assets/insight-labs_repo-insight_three-js.md.CXlVZ59K.lean.js
index 85a400a..cdd88dd 100644
--- a/assets/insight-labs_repo-insight_three-js.md.EPr9hTuq.lean.js
+++ b/assets/insight-labs_repo-insight_three-js.md.CXlVZ59K.lean.js
@@ -1 +1 @@
-import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const A=JSON.parse('{"title":"Three.js 开源项目解读","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Three.js 开源项目解读","tldr":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","abstract":null,"permalink":"/insight-labs/repo-insight/three-js","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/three-js.md","filePath":"31.Insight Labs/11.Reop Insight Reports/05.three.js.md"}'),d={name:"insight-labs/repo-insight/three-js.md"};function g(E,i,y,c,b,B){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e("",53)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20R3D%20as%20Object3D%0A%20%20%20%20participant%20Renderer%20as%20Renderer(%E5%9F%BA%E7%B1%BB)%0A%20%20%20%20participant%20RList%20as%20RenderList%0A%20%20%20%20participant%20RObj%20as%20RenderObjects%0A%20%20%20%20participant%20Pipes%20as%20Pipelines%0A%20%20%20%20participant%20Binds%20as%20Bindings%0A%20%20%20%20participant%20Backend%20as%20WebGPUBackend%0A%20%20%20%20participant%20GPU%20as%20GPU%20Device%0A%0A%20%20%20%20User-%3E%3ER3D%3A%20mesh.rotation.x%20%2B%3D%200.01%0A%20%20%20%20activate%20R3D%0A%20%20%20%20R3D-%3E%3ER3D%3A%20%E6%A0%87%E8%AE%B0%20matrixWorldNeedsUpdate%0A%20%20%20%20deactivate%20R3D%0A%0A%20%20%20%20User-%3E%3ERenderer%3A%20render(scene%2C%20camera)%0A%20%20%20%20activate%20Renderer%0A%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E6%9B%B4%E6%96%B0%20scene.matrixWorld%20(%E5%9C%BA%E6%99%AF%E5%9B%BE%E9%81%8D%E5%8E%86)%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20camera.updateMatrixWorld()%0A%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E8%A7%86%E9%94%A5%E4%BD%93%E8%A3%81%E5%89%AA%20(Frustum%20Culling)%0A%20%20%20%20Note%20over%20Renderer%3A%20%E6%A3%80%E6%9F%A5%E6%AF%8F%E4%B8%AA%20Object3D%20%E7%9A%84%E5%8C%85%E5%9B%B4%E7%9B%92%2F%E7%90%83%0A%0A%20%20%20%20Renderer-%3E%3ERList%3A%20%E6%9E%84%E5%BB%BA%E6%B8%B2%E6%9F%93%E9%98%9F%E5%88%97%0A%20%20%20%20activate%20RList%0A%20%20%20%20RList-%3E%3ERList%3A%20%E5%88%86%E7%B1%BB%3A%20opaque%20%2F%20transparent%20%2F%20shadow%0A%20%20%20%20RList-%3E%3ERList%3A%20%E6%8E%92%E5%BA%8F%3A%20%E4%B8%8D%E9%80%8F%E6%98%8E%E4%BB%8E%E5%89%8D%E5%88%B0%E5%90%8E%2C%20%E9%80%8F%E6%98%8E%E4%BB%8E%E5%90%8E%E5%88%B0%E5%89%8D%0A%20%20%20%20RList--%3E%3ERenderer%3A%20%E8%BF%94%E5%9B%9E%E6%9C%89%E5%BA%8F%E6%B8%B2%E6%9F%93%E5%88%97%E8%A1%A8%0A%20%20%20%20deactivate%20RList%0A%0A%20%20%20%20Renderer-%3E%3EBackend%3A%20begin()%0A%20%20%20%20activate%20Backend%0A%20%20%20%20Backend-%3E%3EGPU%3A%20%E8%8E%B7%E5%8F%96%20CommandEncoder%0A%20%20%20%20Backend-%3E%3EBackend%3A%20%E5%87%86%E5%A4%87%E9%BB%98%E8%AE%A4%20RenderPass%0A%20%20%20%20deactivate%20Backend%0A%0A%20%20%20%20loop%20%E6%AF%8F%E4%B8%AA%20RenderItem%20(%E4%B8%8D%E9%80%8F%E6%98%8E%2F%E9%80%8F%E6%98%8E)%0A%20%20%20%20%20%20%20%20Renderer-%3E%3ERObj%3A%20get(scene%2C%20camera%2C%20object%2C%20geometry%2C%20material)%0A%20%20%20%20%20%20%20%20activate%20RObj%0A%20%20%20%20%20%20%20%20RObj-%3E%3ERObj%3A%20%E6%A3%80%E6%9F%A5%2F%E6%9B%B4%E6%96%B0%E6%B8%B2%E6%9F%93%E5%AF%B9%E8%B1%A1%E7%BC%93%E5%AD%98%0A%20%20%20%20%20%20%20%20RObj--%3E%3ERenderer%3A%20%E8%BF%94%E5%9B%9E%20RenderObject%0A%20%20%20%20%20%20%20%20deactivate%20RObj%0A%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EPipes%3A%20get(renderObject)%0A%20%20%20%20%20%20%20%20activate%20Pipes%0A%20%20%20%20%20%20%20%20Pipes-%3E%3EPipes%3A%20%E6%A3%80%E6%9F%A5%E7%AE%A1%E7%BA%BF%E7%BC%93%E5%AD%98%0A%20%20%20%20%20%20%20%20alt%20%E7%AE%A1%E7%BA%BF%E6%9C%AA%E7%BC%93%E5%AD%98%0A%20%20%20%20%20%20%20%20%20%20%20%20Pipes-%3E%3EBackend%3A%20%E5%88%9B%E5%BB%BA%E6%96%B0%E6%B8%B2%E6%9F%93%E7%AE%A1%E7%BA%BF%0A%20%20%20%20%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20createRenderPipeline(descriptor)%0A%20%20%20%20%20%20%20%20%20%20%20%20GPU--%3E%3EBackend%3A%20Pipeline%0A%20%20%20%20%20%20%20%20%20%20%20%20Backend--%3E%3EPipes%3A%20Pipeline%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Pipes--%3E%3ERenderer%3A%20%E8%BF%94%E5%9B%9E%20Pipeline%0A%20%20%20%20%20%20%20%20deactivate%20Pipes%0A%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EBinds%3A%20update(renderObject)%0A%20%20%20%20%20%20%20%20activate%20Binds%0A%20%20%20%20%20%20%20%20Binds-%3E%3EBackend%3A%20%E6%9B%B4%E6%96%B0%20Uniform%20Buffer%20%2F%20BindGroup%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20%E4%B8%8A%E4%BC%A0%E6%95%B0%E6%8D%AE%E5%88%B0%20GPU%20Buffer%0A%20%20%20%20%20%20%20%20deactivate%20Binds%0A%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EBackend%3A%20draw(renderObject)%0A%20%20%20%20%20%20%20%20activate%20Backend%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20setPipeline(pipeline)%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20setBindGroup(bindGroup)%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20drawIndexed()%20%2F%20draw()%0A%20%20%20%20%20%20%20%20deactivate%20Backend%0A%20%20%20%20end%0A%0A%20%20%20%20Renderer-%3E%3EBackend%3A%20end()%0A%20%20%20%20activate%20Backend%0A%20%20%20%20Backend-%3E%3EGPU%3A%20commandEncoder.finish()%0A%20%20%20%20Backend-%3E%3EGPU%3A%20device.queue.submit(%5BcommandBuffer%5D)%0A%20%20%20%20Note%20over%20GPU%3A%20GPU%20%E6%89%A7%E8%A1%8C%E6%B8%B2%E6%9F%93%2C%20%E8%BE%93%E5%87%BA%E5%88%B0%20Canvas%0A%20%20%20%20deactivate%20Backend%0A%0A%20%20%20%20deactivate%20Renderer%0A",showToolbar:"1"})]),_:1}),i[1]||(i[1]=s("h3",{id:"场景二-tsl-着色器编译流程",tabindex:"-1"},[n("场景二:TSL 着色器编译流程 "),s("a",{class:"header-anchor",href:"#场景二-tsl-着色器编译流程","aria-label":"Permalink to “场景二:TSL 着色器编译流程”"},"​")],-1)),i[2]||(i[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":描述开发者使用 TSL 编写自定义着色器节点的完整编译流程。NodeBuilder 分三阶段(setup/analyze/generate)将节点图转换为目标后端着色器代码。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20Dev%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20TSL%20as%20TSL%20DSL%0A%20%20%20%20participant%20Node%20as%20Node%20Graph%0A%20%20%20%20participant%20Builder%20as%20NodeBuilder%0A%20%20%20%20participant%20GLSL%20as%20GLSLBuilder%0A%20%20%20%20participant%20WGSL%20as%20WGSLBuilder%0A%20%20%20%20participant%20Backend%20as%20GPU%20Backend%0A%0A%20%20%20%20Dev-%3E%3ETSL%3A%20Fn((%7B%20geometryPosition%20%7D)%20%3D%3E%20%7B%20...%20%7D)%0A%20%20%20%20activate%20TSL%0A%20%20%20%20TSL-%3E%3ENode%3A%20%E5%88%9B%E5%BB%BA%E8%8A%82%E7%82%B9%E5%9B%BE%20(DAG)%0A%20%20%20%20Note%20over%20Node%3A%20%5BAttributeNode%5D%20%E2%86%92%20%5BOperatorNode%5D%20%E2%86%92%20%5BOutputNode%5D%0A%20%20%20%20deactivate%20TSL%0A%0A%20%20%20%20Backend-%3E%3EBuilder%3A%20build(node)%0A%20%20%20%20activate%20Builder%0A%0A%20%20%20%20Note%20over%20Builder%3A%20Stage%201%3A%20setup%0A%20%20%20%20Builder-%3E%3ENode%3A%20setup(builder)%0A%20%20%20%20activate%20Node%0A%20%20%20%20Node-%3E%3ENode%3A%20%E5%88%9D%E5%A7%8B%E5%8C%96%E8%8A%82%E7%82%B9%E7%8A%B6%E6%80%81%0A%20%20%20%20Node-%3E%3ENode%3A%20%E6%B3%A8%E5%86%8C%E9%9C%80%E8%A6%81%E6%9B%B4%E6%96%B0%E7%9A%84%20Uniform%2FAttribute%0A%20%20%20%20Node--%3E%3EBuilder%3A%20setup%20%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Node%0A%0A%20%20%20%20Note%20over%20Builder%3A%20Stage%202%3A%20analyze%0A%20%20%20%20Builder-%3E%3ENode%3A%20analyze(builder)%0A%20%20%20%20activate%20Node%0A%20%20%20%20Node-%3E%3ENode%3A%20%E7%B1%BB%E5%9E%8B%E6%8E%A8%E5%AF%BC%20float%2Fvec3%2F...%0A%20%20%20%20Node-%3E%3ENode%3A%20%E4%BC%98%E5%8C%96%E8%8A%82%E7%82%B9%E5%9B%BE%20(%E5%90%88%E5%B9%B6%2F%E7%AE%80%E5%8C%96)%0A%20%20%20%20Node--%3E%3EBuilder%3A%20analyze%20%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Node%0A%0A%20%20%20%20Note%20over%20Builder%3A%20Stage%203%3A%20generate%0A%20%20%20%20alt%20%E5%90%8E%E7%AB%AF%E6%98%AF%20WebGL%0A%20%20%20%20%20%20%20%20Builder-%3E%3EGLSL%3A%20generate(node%2C%20output)%0A%20%20%20%20%20%20%20%20activate%20GLSL%0A%20%20%20%20%20%20%20%20GLSL-%3E%3EGLSL%3A%20%E7%94%9F%E6%88%90%20GLSL%20%E9%A1%B6%E7%82%B9%E7%9D%80%E8%89%B2%E5%99%A8%0A%20%20%20%20%20%20%20%20GLSL-%3E%3EGLSL%3A%20%E7%94%9F%E6%88%90%20GLSL%20%E7%89%87%E6%AE%B5%E7%9D%80%E8%89%B2%E5%99%A8%0A%20%20%20%20%20%20%20%20GLSL--%3E%3EBuilder%3A%20GLSL%20%E4%BB%A3%E7%A0%81%E5%AD%97%E7%AC%A6%E4%B8%B2%0A%20%20%20%20%20%20%20%20deactivate%20GLSL%0A%20%20%20%20else%20%E5%90%8E%E7%AB%AF%E6%98%AF%20WebGPU%0A%20%20%20%20%20%20%20%20Builder-%3E%3EWGSL%3A%20generate(node%2C%20output)%0A%20%20%20%20%20%20%20%20activate%20WGSL%0A%20%20%20%20%20%20%20%20WGSL-%3E%3EWGSL%3A%20%E7%94%9F%E6%88%90%20WGSL%20%E7%9D%80%E8%89%B2%E5%99%A8%E4%BB%A3%E7%A0%81%0A%20%20%20%20%20%20%20%20WGSL--%3E%3EBuilder%3A%20WGSL%20%E4%BB%A3%E7%A0%81%E5%AD%97%E7%AC%A6%E4%B8%B2%0A%20%20%20%20%20%20%20%20deactivate%20WGSL%0A%20%20%20%20end%0A%0A%20%20%20%20Builder--%3E%3EBackend%3A%20%E7%9D%80%E8%89%B2%E5%99%A8%E6%BA%90%E4%BB%A3%E7%A0%81%0A%20%20%20%20deactivate%20Builder%0A%0A%20%20%20%20Backend-%3E%3EBackend%3A%20%E7%BC%96%E8%AF%91%2F%E5%88%9B%E5%BB%BA%20GPU%20Pipeline%0A%20%20%20%20Note%20over%20Backend%3A%20WebGL%3A%20gl.compileShader()%3Cbr%2F%3EWebGPU%3A%20device.createShaderModule()%0A",showToolbar:"1"})]),_:1}),i[3]||(i[3]=e("",12))])}const u=t(d,[["render",g]]);export{A as __pageData,u as default};
+import{_ as t,r as h,c as r,o as F,d as e,b as a,a as s,w as k,e as n}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const A=JSON.parse('{"title":"Three.js 开源项目解读","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","frontmatter":{"date":"2026-05-15T14:52:34.000Z","title":"Three.js 开源项目解读","tldr":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","description":"Three.js 是 Google 开源的 Web 端 3D 渲染库,支持在浏览器中创建和操作 3D 模型、场景和相机。","abstract":null,"permalink":"/insight-labs/repo-insight/three-js","categories":["开源洞察"]},"headers":[],"relativePath":"insight-labs/repo-insight/three-js.md","filePath":"31.Insight Labs/11.Reop Insight Reports/05.three.js.md"}'),d={name:"insight-labs/repo-insight/three-js.md"};function g(E,i,y,c,b,B){const p=h("MermaidChart"),l=h("ClientOnly");return F(),r("div",null,[i[0]||(i[0]=e("",53)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E7%94%A8%E6%88%B7%E4%BB%A3%E7%A0%81%0A%20%20%20%20participant%20R3D%20as%20Object3D%0A%20%20%20%20participant%20Renderer%20as%20Renderer(%E5%9F%BA%E7%B1%BB)%0A%20%20%20%20participant%20RList%20as%20RenderList%0A%20%20%20%20participant%20RObj%20as%20RenderObjects%0A%20%20%20%20participant%20Pipes%20as%20Pipelines%0A%20%20%20%20participant%20Binds%20as%20Bindings%0A%20%20%20%20participant%20Backend%20as%20WebGPUBackend%0A%20%20%20%20participant%20GPU%20as%20GPU%20Device%0A%0A%20%20%20%20User-%3E%3ER3D%3A%20mesh.rotation.x%20%2B%3D%200.01%0A%20%20%20%20activate%20R3D%0A%20%20%20%20R3D-%3E%3ER3D%3A%20%E6%A0%87%E8%AE%B0%20matrixWorldNeedsUpdate%0A%20%20%20%20deactivate%20R3D%0A%0A%20%20%20%20User-%3E%3ERenderer%3A%20render(scene%2C%20camera)%0A%20%20%20%20activate%20Renderer%0A%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E6%9B%B4%E6%96%B0%20scene.matrixWorld%20(%E5%9C%BA%E6%99%AF%E5%9B%BE%E9%81%8D%E5%8E%86)%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20camera.updateMatrixWorld()%0A%0A%20%20%20%20Renderer-%3E%3ERenderer%3A%20%E8%A7%86%E9%94%A5%E4%BD%93%E8%A3%81%E5%89%AA%20(Frustum%20Culling)%0A%20%20%20%20Note%20over%20Renderer%3A%20%E6%A3%80%E6%9F%A5%E6%AF%8F%E4%B8%AA%20Object3D%20%E7%9A%84%E5%8C%85%E5%9B%B4%E7%9B%92%2F%E7%90%83%0A%0A%20%20%20%20Renderer-%3E%3ERList%3A%20%E6%9E%84%E5%BB%BA%E6%B8%B2%E6%9F%93%E9%98%9F%E5%88%97%0A%20%20%20%20activate%20RList%0A%20%20%20%20RList-%3E%3ERList%3A%20%E5%88%86%E7%B1%BB%3A%20opaque%20%2F%20transparent%20%2F%20shadow%0A%20%20%20%20RList-%3E%3ERList%3A%20%E6%8E%92%E5%BA%8F%3A%20%E4%B8%8D%E9%80%8F%E6%98%8E%E4%BB%8E%E5%89%8D%E5%88%B0%E5%90%8E%2C%20%E9%80%8F%E6%98%8E%E4%BB%8E%E5%90%8E%E5%88%B0%E5%89%8D%0A%20%20%20%20RList--%3E%3ERenderer%3A%20%E8%BF%94%E5%9B%9E%E6%9C%89%E5%BA%8F%E6%B8%B2%E6%9F%93%E5%88%97%E8%A1%A8%0A%20%20%20%20deactivate%20RList%0A%0A%20%20%20%20Renderer-%3E%3EBackend%3A%20begin()%0A%20%20%20%20activate%20Backend%0A%20%20%20%20Backend-%3E%3EGPU%3A%20%E8%8E%B7%E5%8F%96%20CommandEncoder%0A%20%20%20%20Backend-%3E%3EBackend%3A%20%E5%87%86%E5%A4%87%E9%BB%98%E8%AE%A4%20RenderPass%0A%20%20%20%20deactivate%20Backend%0A%0A%20%20%20%20loop%20%E6%AF%8F%E4%B8%AA%20RenderItem%20(%E4%B8%8D%E9%80%8F%E6%98%8E%2F%E9%80%8F%E6%98%8E)%0A%20%20%20%20%20%20%20%20Renderer-%3E%3ERObj%3A%20get(scene%2C%20camera%2C%20object%2C%20geometry%2C%20material)%0A%20%20%20%20%20%20%20%20activate%20RObj%0A%20%20%20%20%20%20%20%20RObj-%3E%3ERObj%3A%20%E6%A3%80%E6%9F%A5%2F%E6%9B%B4%E6%96%B0%E6%B8%B2%E6%9F%93%E5%AF%B9%E8%B1%A1%E7%BC%93%E5%AD%98%0A%20%20%20%20%20%20%20%20RObj--%3E%3ERenderer%3A%20%E8%BF%94%E5%9B%9E%20RenderObject%0A%20%20%20%20%20%20%20%20deactivate%20RObj%0A%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EPipes%3A%20get(renderObject)%0A%20%20%20%20%20%20%20%20activate%20Pipes%0A%20%20%20%20%20%20%20%20Pipes-%3E%3EPipes%3A%20%E6%A3%80%E6%9F%A5%E7%AE%A1%E7%BA%BF%E7%BC%93%E5%AD%98%0A%20%20%20%20%20%20%20%20alt%20%E7%AE%A1%E7%BA%BF%E6%9C%AA%E7%BC%93%E5%AD%98%0A%20%20%20%20%20%20%20%20%20%20%20%20Pipes-%3E%3EBackend%3A%20%E5%88%9B%E5%BB%BA%E6%96%B0%E6%B8%B2%E6%9F%93%E7%AE%A1%E7%BA%BF%0A%20%20%20%20%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20createRenderPipeline(descriptor)%0A%20%20%20%20%20%20%20%20%20%20%20%20GPU--%3E%3EBackend%3A%20Pipeline%0A%20%20%20%20%20%20%20%20%20%20%20%20Backend--%3E%3EPipes%3A%20Pipeline%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20%20%20%20%20Pipes--%3E%3ERenderer%3A%20%E8%BF%94%E5%9B%9E%20Pipeline%0A%20%20%20%20%20%20%20%20deactivate%20Pipes%0A%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EBinds%3A%20update(renderObject)%0A%20%20%20%20%20%20%20%20activate%20Binds%0A%20%20%20%20%20%20%20%20Binds-%3E%3EBackend%3A%20%E6%9B%B4%E6%96%B0%20Uniform%20Buffer%20%2F%20BindGroup%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20%E4%B8%8A%E4%BC%A0%E6%95%B0%E6%8D%AE%E5%88%B0%20GPU%20Buffer%0A%20%20%20%20%20%20%20%20deactivate%20Binds%0A%0A%20%20%20%20%20%20%20%20Renderer-%3E%3EBackend%3A%20draw(renderObject)%0A%20%20%20%20%20%20%20%20activate%20Backend%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20setPipeline(pipeline)%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20setBindGroup(bindGroup)%0A%20%20%20%20%20%20%20%20Backend-%3E%3EGPU%3A%20drawIndexed()%20%2F%20draw()%0A%20%20%20%20%20%20%20%20deactivate%20Backend%0A%20%20%20%20end%0A%0A%20%20%20%20Renderer-%3E%3EBackend%3A%20end()%0A%20%20%20%20activate%20Backend%0A%20%20%20%20Backend-%3E%3EGPU%3A%20commandEncoder.finish()%0A%20%20%20%20Backend-%3E%3EGPU%3A%20device.queue.submit(%5BcommandBuffer%5D)%0A%20%20%20%20Note%20over%20GPU%3A%20GPU%20%E6%89%A7%E8%A1%8C%E6%B8%B2%E6%9F%93%2C%20%E8%BE%93%E5%87%BA%E5%88%B0%20Canvas%0A%20%20%20%20deactivate%20Backend%0A%0A%20%20%20%20deactivate%20Renderer%0A",showToolbar:"1"})]),_:1}),i[1]||(i[1]=s("h3",{id:"场景二-tsl-着色器编译流程",tabindex:"-1"},[n("场景二:TSL 着色器编译流程 "),s("a",{class:"header-anchor",href:"#场景二-tsl-着色器编译流程","aria-label":"Permalink to “场景二:TSL 着色器编译流程”"},"​")],-1)),i[2]||(i[2]=s("ul",null,[s("li",null,[s("p",null,[s("strong",null,"场景说明"),n(":描述开发者使用 TSL 编写自定义着色器节点的完整编译流程。NodeBuilder 分三阶段(setup/analyze/generate)将节点图转换为目标后端着色器代码。")])]),s("li",null,[s("p",null,[s("strong",null,"流转时序图 (Mermaid)"),n(":")])])],-1)),a(l,null,{default:k(()=>[a(p,{code:"sequenceDiagram%0A%20%20%20%20participant%20Dev%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20TSL%20as%20TSL%20DSL%0A%20%20%20%20participant%20Node%20as%20Node%20Graph%0A%20%20%20%20participant%20Builder%20as%20NodeBuilder%0A%20%20%20%20participant%20GLSL%20as%20GLSLBuilder%0A%20%20%20%20participant%20WGSL%20as%20WGSLBuilder%0A%20%20%20%20participant%20Backend%20as%20GPU%20Backend%0A%0A%20%20%20%20Dev-%3E%3ETSL%3A%20Fn((%7B%20geometryPosition%20%7D)%20%3D%3E%20%7B%20...%20%7D)%0A%20%20%20%20activate%20TSL%0A%20%20%20%20TSL-%3E%3ENode%3A%20%E5%88%9B%E5%BB%BA%E8%8A%82%E7%82%B9%E5%9B%BE%20(DAG)%0A%20%20%20%20Note%20over%20Node%3A%20%5BAttributeNode%5D%20%E2%86%92%20%5BOperatorNode%5D%20%E2%86%92%20%5BOutputNode%5D%0A%20%20%20%20deactivate%20TSL%0A%0A%20%20%20%20Backend-%3E%3EBuilder%3A%20build(node)%0A%20%20%20%20activate%20Builder%0A%0A%20%20%20%20Note%20over%20Builder%3A%20Stage%201%3A%20setup%0A%20%20%20%20Builder-%3E%3ENode%3A%20setup(builder)%0A%20%20%20%20activate%20Node%0A%20%20%20%20Node-%3E%3ENode%3A%20%E5%88%9D%E5%A7%8B%E5%8C%96%E8%8A%82%E7%82%B9%E7%8A%B6%E6%80%81%0A%20%20%20%20Node-%3E%3ENode%3A%20%E6%B3%A8%E5%86%8C%E9%9C%80%E8%A6%81%E6%9B%B4%E6%96%B0%E7%9A%84%20Uniform%2FAttribute%0A%20%20%20%20Node--%3E%3EBuilder%3A%20setup%20%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Node%0A%0A%20%20%20%20Note%20over%20Builder%3A%20Stage%202%3A%20analyze%0A%20%20%20%20Builder-%3E%3ENode%3A%20analyze(builder)%0A%20%20%20%20activate%20Node%0A%20%20%20%20Node-%3E%3ENode%3A%20%E7%B1%BB%E5%9E%8B%E6%8E%A8%E5%AF%BC%20float%2Fvec3%2F...%0A%20%20%20%20Node-%3E%3ENode%3A%20%E4%BC%98%E5%8C%96%E8%8A%82%E7%82%B9%E5%9B%BE%20(%E5%90%88%E5%B9%B6%2F%E7%AE%80%E5%8C%96)%0A%20%20%20%20Node--%3E%3EBuilder%3A%20analyze%20%E5%AE%8C%E6%88%90%0A%20%20%20%20deactivate%20Node%0A%0A%20%20%20%20Note%20over%20Builder%3A%20Stage%203%3A%20generate%0A%20%20%20%20alt%20%E5%90%8E%E7%AB%AF%E6%98%AF%20WebGL%0A%20%20%20%20%20%20%20%20Builder-%3E%3EGLSL%3A%20generate(node%2C%20output)%0A%20%20%20%20%20%20%20%20activate%20GLSL%0A%20%20%20%20%20%20%20%20GLSL-%3E%3EGLSL%3A%20%E7%94%9F%E6%88%90%20GLSL%20%E9%A1%B6%E7%82%B9%E7%9D%80%E8%89%B2%E5%99%A8%0A%20%20%20%20%20%20%20%20GLSL-%3E%3EGLSL%3A%20%E7%94%9F%E6%88%90%20GLSL%20%E7%89%87%E6%AE%B5%E7%9D%80%E8%89%B2%E5%99%A8%0A%20%20%20%20%20%20%20%20GLSL--%3E%3EBuilder%3A%20GLSL%20%E4%BB%A3%E7%A0%81%E5%AD%97%E7%AC%A6%E4%B8%B2%0A%20%20%20%20%20%20%20%20deactivate%20GLSL%0A%20%20%20%20else%20%E5%90%8E%E7%AB%AF%E6%98%AF%20WebGPU%0A%20%20%20%20%20%20%20%20Builder-%3E%3EWGSL%3A%20generate(node%2C%20output)%0A%20%20%20%20%20%20%20%20activate%20WGSL%0A%20%20%20%20%20%20%20%20WGSL-%3E%3EWGSL%3A%20%E7%94%9F%E6%88%90%20WGSL%20%E7%9D%80%E8%89%B2%E5%99%A8%E4%BB%A3%E7%A0%81%0A%20%20%20%20%20%20%20%20WGSL--%3E%3EBuilder%3A%20WGSL%20%E4%BB%A3%E7%A0%81%E5%AD%97%E7%AC%A6%E4%B8%B2%0A%20%20%20%20%20%20%20%20deactivate%20WGSL%0A%20%20%20%20end%0A%0A%20%20%20%20Builder--%3E%3EBackend%3A%20%E7%9D%80%E8%89%B2%E5%99%A8%E6%BA%90%E4%BB%A3%E7%A0%81%0A%20%20%20%20deactivate%20Builder%0A%0A%20%20%20%20Backend-%3E%3EBackend%3A%20%E7%BC%96%E8%AF%91%2F%E5%88%9B%E5%BB%BA%20GPU%20Pipeline%0A%20%20%20%20Note%20over%20Backend%3A%20WebGL%3A%20gl.compileShader()%3Cbr%2F%3EWebGPU%3A%20device.createShaderModule()%0A",showToolbar:"1"})]),_:1}),i[3]||(i[3]=e("",12))])}const u=t(d,[["render",g]]);export{A as __pageData,u as default};
diff --git a/assets/insight-labs_repo-insight_vercel-ai-sdk.md.BJMsUPUS.js b/assets/insight-labs_repo-insight_vercel-ai-sdk.md.B5LIrYqb.js
similarity index 99%
rename from assets/insight-labs_repo-insight_vercel-ai-sdk.md.BJMsUPUS.js
rename to assets/insight-labs_repo-insight_vercel-ai-sdk.md.B5LIrYqb.js
index bad740c..2a4de16 100644
--- a/assets/insight-labs_repo-insight_vercel-ai-sdk.md.BJMsUPUS.js
+++ b/assets/insight-labs_repo-insight_vercel-ai-sdk.md.B5LIrYqb.js
@@ -1,4 +1,4 @@
-import{H as p}from"./chunks/HighLightText.pXHFEzDb.js";import{r as h,c as k,o as d,d as l,a as n,b as i,e as a,w as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const y=JSON.parse('{"title":"vercel-ai-sdk 项目解读","description":"","frontmatter":{"date":"2026-04-11T23:43:09.000Z","title":"vercel-ai-sdk 项目解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/vercel-ai-sdk"},"headers":[],"relativePath":"insight-labs/repo-insight/vercel-ai-sdk.md","filePath":"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md"}'),g={name:"insight-labs/repo-insight/vercel-ai-sdk.md"},u=Object.assign(g,{setup(c){return(o,s)=>{const t=h("MermaidChart"),r=h("ClientOnly");return d(),k("div",null,[s[16]||(s[16]=l('

vercel-ai-sdk 项目解读

项目信息

  • 项目名称:vercel/ai

  • 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型

  • 项目地址:https://github.com/vercel/ai

1. 项目概览

1.1 项目定位与核心价值

',4)),n("p",null,[s[1]||(s[1]=a("AI SDK 是 ",-1)),i(p,{bold:""},{default:e(()=>[...s[0]||(s[0]=[a("Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口",-1)])]),_:1}),s[2]||(s[2]=a("。一句话概括:",-1)),s[3]||(s[3]=n("strong",null,"用一套 API 对接所有 AI 模型",-1)),s[4]||(s[4]=a("。",-1))]),s[17]||(s[17]=n("p",null,[n("strong",null,"解决的核心痛点"),a(":")],-1)),n("ol",null,[s[15]||(s[15]=n("li",null,[n("strong",null,"AI 提供商 API 碎片化"),a(':不同 AI 服务(OpenAI、Anthropic、Google 等)拥有互不兼容的 API 设计和数据格式,AI SDK 通过统一的适配器模式抹平差异,做到"一次编写,多提供商切换"。')],-1)),n("li",null,[s[6]||(s[6]=n("strong",null,"前端/全栈开发者接入 AI 门槛高",-1)),s[7]||(s[7]=a(":",-1)),i(p,{type:"info"},{default:e(()=>[...s[5]||(s[5]=[a("流式响应、提示词工程、工具调用、结构化输出等 AI 领域常见需求缺乏前端友好的封装",-1)])]),_:1}),s[8]||(s[8]=a("。AI SDK 通过统一的适配器模式抹平差异,提供开箱即用的 React/Vue/Svelte hooks。",-1))]),n("li",null,[s[10]||(s[10]=n("strong",null,"AI 应用架构缺乏标准化",-1)),s[11]||(s[11]=a(":Agent 模式、工作流编排、",-1)),s[12]||(s[12]=n("strong",null,"UI 流式协议缺少业界统一方案",-1)),s[13]||(s[13]=a("。",-1)),i(p,{type:"info",bold:""},{default:e(()=>[...s[9]||(s[9]=[a("AI SDK 提供了从数据流到 UI 层的完整范式",-1)])]),_:1}),s[14]||(s[14]=a("。",-1))])]),s[18]||(s[18]=l(`

1.2 目标用户与使用场景

  • 主要用户:使用 TypeScript/JavaScript 技术栈构建 AI 功能的全栈开发者和前端开发者。
  • 核心场景:AI 聊天助手、结构化数据提取、多模态应用、Agent 自动化工作流等。在 Next.js、Node.js、Express、Hono 等框架中快速集成 LLM 对话、结构化输出、图像/语音生成等 AI 能力。
  • 典型代码量:从 API 调用到 UI 渲染,只需不到 20 行代码
typescript
// 服务端
+import{H as p}from"./chunks/HighLightText.DNC3BKyb.js";import{r as h,c as k,o as d,d as l,a as n,b as i,e as a,w as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             */const y=JSON.parse('{"title":"vercel-ai-sdk 项目解读","description":"","frontmatter":{"date":"2026-04-11T23:43:09.000Z","title":"vercel-ai-sdk 项目解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/vercel-ai-sdk"},"headers":[],"relativePath":"insight-labs/repo-insight/vercel-ai-sdk.md","filePath":"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md"}'),g={name:"insight-labs/repo-insight/vercel-ai-sdk.md"},u=Object.assign(g,{setup(c){return(o,s)=>{const t=h("MermaidChart"),r=h("ClientOnly");return d(),k("div",null,[s[16]||(s[16]=l('

vercel-ai-sdk 项目解读

项目信息

  • 项目名称:vercel/ai

  • 项目描述:Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口。一句话概括:用一套 API 对接所有 AI 模型

  • 项目地址:https://github.com/vercel/ai

1. 项目概览

1.1 项目定位与核心价值

',4)),n("p",null,[s[1]||(s[1]=a("AI SDK 是 ",-1)),i(p,{bold:""},{default:e(()=>[...s[0]||(s[0]=[a("Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口",-1)])]),_:1}),s[2]||(s[2]=a("。一句话概括:",-1)),s[3]||(s[3]=n("strong",null,"用一套 API 对接所有 AI 模型",-1)),s[4]||(s[4]=a("。",-1))]),s[17]||(s[17]=n("p",null,[n("strong",null,"解决的核心痛点"),a(":")],-1)),n("ol",null,[s[15]||(s[15]=n("li",null,[n("strong",null,"AI 提供商 API 碎片化"),a(':不同 AI 服务(OpenAI、Anthropic、Google 等)拥有互不兼容的 API 设计和数据格式,AI SDK 通过统一的适配器模式抹平差异,做到"一次编写,多提供商切换"。')],-1)),n("li",null,[s[6]||(s[6]=n("strong",null,"前端/全栈开发者接入 AI 门槛高",-1)),s[7]||(s[7]=a(":",-1)),i(p,{type:"info"},{default:e(()=>[...s[5]||(s[5]=[a("流式响应、提示词工程、工具调用、结构化输出等 AI 领域常见需求缺乏前端友好的封装",-1)])]),_:1}),s[8]||(s[8]=a("。AI SDK 通过统一的适配器模式抹平差异,提供开箱即用的 React/Vue/Svelte hooks。",-1))]),n("li",null,[s[10]||(s[10]=n("strong",null,"AI 应用架构缺乏标准化",-1)),s[11]||(s[11]=a(":Agent 模式、工作流编排、",-1)),s[12]||(s[12]=n("strong",null,"UI 流式协议缺少业界统一方案",-1)),s[13]||(s[13]=a("。",-1)),i(p,{type:"info",bold:""},{default:e(()=>[...s[9]||(s[9]=[a("AI SDK 提供了从数据流到 UI 层的完整范式",-1)])]),_:1}),s[14]||(s[14]=a("。",-1))])]),s[18]||(s[18]=l(`

1.2 目标用户与使用场景

  • 主要用户:使用 TypeScript/JavaScript 技术栈构建 AI 功能的全栈开发者和前端开发者。
  • 核心场景:AI 聊天助手、结构化数据提取、多模态应用、Agent 自动化工作流等。在 Next.js、Node.js、Express、Hono 等框架中快速集成 LLM 对话、结构化输出、图像/语音生成等 AI 能力。
  • 典型代码量:从 API 调用到 UI 渲染,只需不到 20 行代码
typescript
// 服务端
 import { generateText } from 'ai';
 import { openai } from '@ai-sdk/openai';
 const { text } = await generateText({ model: openai('gpt-5'), prompt: 'Hello' });
diff --git a/assets/insight-labs_repo-insight_vercel-ai-sdk.md.BJMsUPUS.lean.js b/assets/insight-labs_repo-insight_vercel-ai-sdk.md.B5LIrYqb.lean.js
similarity index 98%
rename from assets/insight-labs_repo-insight_vercel-ai-sdk.md.BJMsUPUS.lean.js
rename to assets/insight-labs_repo-insight_vercel-ai-sdk.md.B5LIrYqb.lean.js
index 60828d6..1b62f51 100644
--- a/assets/insight-labs_repo-insight_vercel-ai-sdk.md.BJMsUPUS.lean.js
+++ b/assets/insight-labs_repo-insight_vercel-ai-sdk.md.B5LIrYqb.lean.js
@@ -1 +1 @@
-import{H as p}from"./chunks/HighLightText.pXHFEzDb.js";import{r as h,c as k,o as d,d as l,a as n,b as i,e as a,w as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css                                                             */const y=JSON.parse('{"title":"vercel-ai-sdk 项目解读","description":"","frontmatter":{"date":"2026-04-11T23:43:09.000Z","title":"vercel-ai-sdk 项目解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/vercel-ai-sdk"},"headers":[],"relativePath":"insight-labs/repo-insight/vercel-ai-sdk.md","filePath":"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md"}'),g={name:"insight-labs/repo-insight/vercel-ai-sdk.md"},u=Object.assign(g,{setup(c){return(o,s)=>{const t=h("MermaidChart"),r=h("ClientOnly");return d(),k("div",null,[s[16]||(s[16]=l("",4)),n("p",null,[s[1]||(s[1]=a("AI SDK 是 ",-1)),i(p,{bold:""},{default:e(()=>[...s[0]||(s[0]=[a("Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口",-1)])]),_:1}),s[2]||(s[2]=a("。一句话概括:",-1)),s[3]||(s[3]=n("strong",null,"用一套 API 对接所有 AI 模型",-1)),s[4]||(s[4]=a("。",-1))]),s[17]||(s[17]=n("p",null,[n("strong",null,"解决的核心痛点"),a(":")],-1)),n("ol",null,[s[15]||(s[15]=n("li",null,[n("strong",null,"AI 提供商 API 碎片化"),a(':不同 AI 服务(OpenAI、Anthropic、Google 等)拥有互不兼容的 API 设计和数据格式,AI SDK 通过统一的适配器模式抹平差异,做到"一次编写,多提供商切换"。')],-1)),n("li",null,[s[6]||(s[6]=n("strong",null,"前端/全栈开发者接入 AI 门槛高",-1)),s[7]||(s[7]=a(":",-1)),i(p,{type:"info"},{default:e(()=>[...s[5]||(s[5]=[a("流式响应、提示词工程、工具调用、结构化输出等 AI 领域常见需求缺乏前端友好的封装",-1)])]),_:1}),s[8]||(s[8]=a("。AI SDK 通过统一的适配器模式抹平差异,提供开箱即用的 React/Vue/Svelte hooks。",-1))]),n("li",null,[s[10]||(s[10]=n("strong",null,"AI 应用架构缺乏标准化",-1)),s[11]||(s[11]=a(":Agent 模式、工作流编排、",-1)),s[12]||(s[12]=n("strong",null,"UI 流式协议缺少业界统一方案",-1)),s[13]||(s[13]=a("。",-1)),i(p,{type:"info",bold:""},{default:e(()=>[...s[9]||(s[9]=[a("AI SDK 提供了从数据流到 UI 层的完整范式",-1)])]),_:1}),s[14]||(s[14]=a("。",-1))])]),s[18]||(s[18]=l("",58)),i(r,null,{default:e(()=>[i(t,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20GenText%20as%20generateText()%0A%20%20%20%20participant%20Prompt%20as%20Prompt%20%E6%A0%87%E5%87%86%E5%8C%96%0A%20%20%20%20participant%20Model%20as%20LanguageModelV4%0A%20%20%20%20participant%20ToolExec%20as%20Tool%20Executor%0A%20%20%20%20participant%20Provider%20as%20OpenAI%20API%0A%0A%20%20%20%20User-%3E%3EGenText%3A%20generateText(%7B%20model%2C%20prompt%2C%20tools%20%7D)%0A%20%20%20%20activate%20GenText%0A%20%20%20%20GenText-%3E%3EPrompt%3A%20standardizePrompt(prompt)%0A%20%20%20%20activate%20Prompt%0A%20%20%20%20Prompt--%3E%3EGenText%3A%20ModelMessage%5B%5D%0A%20%20%20%20deactivate%20Prompt%0A%20%20%20%20GenText-%3E%3EGenText%3A%20resolveLanguageModel()%0A%20%20%20%20GenText-%3E%3EGenText%3A%20prepareTools()%20%2F%20prepareToolChoice()%0A%20%20%20%20%0A%20%20%20%20loop%20Tool%20Loop%20(maxSteps)%0A%20%20%20%20%20%20%20%20GenText-%3E%3EModel%3A%20doGenerate(%7B%20messages%2C%20tools%20%7D)%0A%20%20%20%20%20%20%20%20activate%20Model%0A%20%20%20%20%20%20%20%20Model-%3E%3EProvider%3A%20POST%20%2Fv1%2Fresponses%0A%20%20%20%20%20%20%20%20activate%20Provider%0A%20%20%20%20%20%20%20%20Provider--%3E%3EModel%3A%20Response%20(text%20OR%20tool_calls)%0A%20%20%20%20%20%20%20%20deactivate%20Provider%0A%20%20%20%20%20%20%20%20Model--%3E%3EGenText%3A%20LanguageModelV4GenerateResult%0A%20%20%20%20%20%20%20%20deactivate%20Model%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20alt%20hasToolCalls%0A%20%20%20%20%20%20%20%20%20%20%20%20GenText-%3E%3EToolExec%3A%20executeToolCall(toolCall)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20ToolExec%0A%20%20%20%20%20%20%20%20%20%20%20%20ToolExec--%3E%3EGenText%3A%20ToolResult%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20ToolExec%0A%20%20%20%20%20%20%20%20%20%20%20%20GenText-%3E%3EGenText%3A%20%E5%B0%86%20ToolResult%20%E5%8A%A0%E5%85%A5%20messages%0A%20%20%20%20%20%20%20%20else%20isText%0A%20%20%20%20%20%20%20%20%20%20%20%20GenText-%3E%3EGenText%3A%20%E8%B7%B3%E5%87%BA%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A%20%20%20%20%0A%20%20%20%20GenText--%3E%3EUser%3A%20GenerateTextResult%20%7B%20text%2C%20toolCalls%2C%20usage%20%7D%0A%20%20%20%20deactivate%20GenText%0A",showToolbar:"1"})]),_:1}),s[19]||(s[19]=l("",2)),i(r,null,{default:e(()=>[i(t,{code:"sequenceDiagram%0A%20%20%20%20participant%20Browser%20as%20%E6%B5%8F%E8%A7%88%E5%99%A8%20(React)%0A%20%20%20%20participant%20useChat%20as%20useChat%20Hook%0A%20%20%20%20participant%20API%20as%20Next.js%20API%20Route%0A%20%20%20%20participant%20StreamText%20as%20streamText()%0A%20%20%20%20participant%20LLM%20as%20OpenAI%20API%0A%0A%20%20%20%20Browser-%3E%3EuseChat%3A%20%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%20%2B%20handleSubmit()%0A%20%20%20%20activate%20useChat%0A%20%20%20%20useChat-%3E%3EuseChat%3A%20append%20user%20message%20to%20messages%0A%20%20%20%20useChat-%3E%3EAPI%3A%20POST%20%2Fapi%2Fchat%20(messages)%0A%20%20%20%20activate%20API%0A%20%20%20%20API-%3E%3EStreamText%3A%20streamText(%7B%20model%2C%20messages%2C%20tools%20%7D)%0A%20%20%20%20activate%20StreamText%0A%20%20%20%20StreamText-%3E%3EStreamText%3A%20%E5%88%9B%E5%BB%BA%20AsyncIterableStream%0A%20%20%20%20StreamText-%3E%3ELLM%3A%20doStream(%7B%20messages%2C%20tools%20%7D)%0A%20%20%20%20activate%20LLM%0A%20%20%20%20LLM--%3E%3EStreamText%3A%20SSE%20text-delta%20chunks%0A%20%20%20%20LLM--%3E%3EStreamText%3A%20SSE%20tool-call%20chunks%0A%20%20%20%20%0A%20%20%20%20loop%20%E6%B5%81%E5%BC%8F%E8%BE%93%E5%87%BA%0A%20%20%20%20%20%20%20%20StreamText--%3E%3EAPI%3A%20TextStreamPart%5B%5D%0A%20%20%20%20%20%20%20%20API--%3E%3EuseChat%3A%20UIMessageStream%20(chunked)%0A%20%20%20%20%20%20%20%20useChat-%3E%3EuseChat%3A%20update%20messages%20state%0A%20%20%20%20%20%20%20%20useChat--%3E%3EBrowser%3A%20re-render%20with%20new%20text%0A%20%20%20%20end%0A%20%20%20%20%0A%20%20%20%20deactivate%20LLM%0A%20%20%20%20StreamText--%3E%3EAPI%3A%20finish%0A%20%20%20%20deactivate%20StreamText%0A%20%20%20%20API--%3E%3EuseChat%3A%20stream%20end%0A%20%20%20%20deactivate%20API%0A%0A%20%20%20%20alt%20hasToolCall%0A%20%20%20%20%20%20%20%20useChat-%3E%3EAPI%3A%20POST%20%2Fapi%2Fchat%20(tool%20results)%0A%20%20%20%20%20%20%20%20API-%3E%3EStreamText%3A%20%E7%BB%A7%E7%BB%AD%20streamText%0A%20%20%20%20%20%20%20%20Note%20over%20StreamText%2CLLM%3A%20%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8%E5%BE%AA%E7%8E%AF%E7%BB%A7%E7%BB%AD%0A%20%20%20%20end%0A%0A%20%20%20%20useChat--%3E%3EBrowser%3A%20status%3A%20'ready'%0A%20%20%20%20deactivate%20useChat%0A",showToolbar:"1"})]),_:1}),s[20]||(s[20]=l("",15))])}}});export{y as __pageData,u as default};
+import{H as p}from"./chunks/HighLightText.DNC3BKyb.js";import{r as h,c as k,o as d,d as l,a as n,b as i,e as a,w as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css                                                             */const y=JSON.parse('{"title":"vercel-ai-sdk 项目解读","description":"","frontmatter":{"date":"2026-04-11T23:43:09.000Z","title":"vercel-ai-sdk 项目解读","categories":["开源洞察"],"permalink":"/insight-labs/repo-insight/vercel-ai-sdk"},"headers":[],"relativePath":"insight-labs/repo-insight/vercel-ai-sdk.md","filePath":"31.Insight Labs/11.Reop Insight Reports/12.vercel-ai-sdk.md"}'),g={name:"insight-labs/repo-insight/vercel-ai-sdk.md"},u=Object.assign(g,{setup(c){return(o,s)=>{const t=h("MermaidChart"),r=h("ClientOnly");return d(),k("div",null,[s[16]||(s[16]=l("",4)),n("p",null,[s[1]||(s[1]=a("AI SDK 是 ",-1)),i(p,{bold:""},{default:e(()=>[...s[0]||(s[0]=[a("Vercel 推出的 TypeScript 生态 AI 应用开发工具包,为前端/全栈开发者提供统一的、跨 40+ AI 提供商的 API 接口",-1)])]),_:1}),s[2]||(s[2]=a("。一句话概括:",-1)),s[3]||(s[3]=n("strong",null,"用一套 API 对接所有 AI 模型",-1)),s[4]||(s[4]=a("。",-1))]),s[17]||(s[17]=n("p",null,[n("strong",null,"解决的核心痛点"),a(":")],-1)),n("ol",null,[s[15]||(s[15]=n("li",null,[n("strong",null,"AI 提供商 API 碎片化"),a(':不同 AI 服务(OpenAI、Anthropic、Google 等)拥有互不兼容的 API 设计和数据格式,AI SDK 通过统一的适配器模式抹平差异,做到"一次编写,多提供商切换"。')],-1)),n("li",null,[s[6]||(s[6]=n("strong",null,"前端/全栈开发者接入 AI 门槛高",-1)),s[7]||(s[7]=a(":",-1)),i(p,{type:"info"},{default:e(()=>[...s[5]||(s[5]=[a("流式响应、提示词工程、工具调用、结构化输出等 AI 领域常见需求缺乏前端友好的封装",-1)])]),_:1}),s[8]||(s[8]=a("。AI SDK 通过统一的适配器模式抹平差异,提供开箱即用的 React/Vue/Svelte hooks。",-1))]),n("li",null,[s[10]||(s[10]=n("strong",null,"AI 应用架构缺乏标准化",-1)),s[11]||(s[11]=a(":Agent 模式、工作流编排、",-1)),s[12]||(s[12]=n("strong",null,"UI 流式协议缺少业界统一方案",-1)),s[13]||(s[13]=a("。",-1)),i(p,{type:"info",bold:""},{default:e(()=>[...s[9]||(s[9]=[a("AI SDK 提供了从数据流到 UI 层的完整范式",-1)])]),_:1}),s[14]||(s[14]=a("。",-1))])]),s[18]||(s[18]=l("",58)),i(r,null,{default:e(()=>[i(t,{code:"sequenceDiagram%0A%20%20%20%20participant%20User%20as%20%E5%BC%80%E5%8F%91%E8%80%85%0A%20%20%20%20participant%20GenText%20as%20generateText()%0A%20%20%20%20participant%20Prompt%20as%20Prompt%20%E6%A0%87%E5%87%86%E5%8C%96%0A%20%20%20%20participant%20Model%20as%20LanguageModelV4%0A%20%20%20%20participant%20ToolExec%20as%20Tool%20Executor%0A%20%20%20%20participant%20Provider%20as%20OpenAI%20API%0A%0A%20%20%20%20User-%3E%3EGenText%3A%20generateText(%7B%20model%2C%20prompt%2C%20tools%20%7D)%0A%20%20%20%20activate%20GenText%0A%20%20%20%20GenText-%3E%3EPrompt%3A%20standardizePrompt(prompt)%0A%20%20%20%20activate%20Prompt%0A%20%20%20%20Prompt--%3E%3EGenText%3A%20ModelMessage%5B%5D%0A%20%20%20%20deactivate%20Prompt%0A%20%20%20%20GenText-%3E%3EGenText%3A%20resolveLanguageModel()%0A%20%20%20%20GenText-%3E%3EGenText%3A%20prepareTools()%20%2F%20prepareToolChoice()%0A%20%20%20%20%0A%20%20%20%20loop%20Tool%20Loop%20(maxSteps)%0A%20%20%20%20%20%20%20%20GenText-%3E%3EModel%3A%20doGenerate(%7B%20messages%2C%20tools%20%7D)%0A%20%20%20%20%20%20%20%20activate%20Model%0A%20%20%20%20%20%20%20%20Model-%3E%3EProvider%3A%20POST%20%2Fv1%2Fresponses%0A%20%20%20%20%20%20%20%20activate%20Provider%0A%20%20%20%20%20%20%20%20Provider--%3E%3EModel%3A%20Response%20(text%20OR%20tool_calls)%0A%20%20%20%20%20%20%20%20deactivate%20Provider%0A%20%20%20%20%20%20%20%20Model--%3E%3EGenText%3A%20LanguageModelV4GenerateResult%0A%20%20%20%20%20%20%20%20deactivate%20Model%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20alt%20hasToolCalls%0A%20%20%20%20%20%20%20%20%20%20%20%20GenText-%3E%3EToolExec%3A%20executeToolCall(toolCall)%0A%20%20%20%20%20%20%20%20%20%20%20%20activate%20ToolExec%0A%20%20%20%20%20%20%20%20%20%20%20%20ToolExec--%3E%3EGenText%3A%20ToolResult%0A%20%20%20%20%20%20%20%20%20%20%20%20deactivate%20ToolExec%0A%20%20%20%20%20%20%20%20%20%20%20%20GenText-%3E%3EGenText%3A%20%E5%B0%86%20ToolResult%20%E5%8A%A0%E5%85%A5%20messages%0A%20%20%20%20%20%20%20%20else%20isText%0A%20%20%20%20%20%20%20%20%20%20%20%20GenText-%3E%3EGenText%3A%20%E8%B7%B3%E5%87%BA%E5%BE%AA%E7%8E%AF%0A%20%20%20%20%20%20%20%20end%0A%20%20%20%20end%0A%20%20%20%20%0A%20%20%20%20GenText--%3E%3EUser%3A%20GenerateTextResult%20%7B%20text%2C%20toolCalls%2C%20usage%20%7D%0A%20%20%20%20deactivate%20GenText%0A",showToolbar:"1"})]),_:1}),s[19]||(s[19]=l("",2)),i(r,null,{default:e(()=>[i(t,{code:"sequenceDiagram%0A%20%20%20%20participant%20Browser%20as%20%E6%B5%8F%E8%A7%88%E5%99%A8%20(React)%0A%20%20%20%20participant%20useChat%20as%20useChat%20Hook%0A%20%20%20%20participant%20API%20as%20Next.js%20API%20Route%0A%20%20%20%20participant%20StreamText%20as%20streamText()%0A%20%20%20%20participant%20LLM%20as%20OpenAI%20API%0A%0A%20%20%20%20Browser-%3E%3EuseChat%3A%20%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5%20%2B%20handleSubmit()%0A%20%20%20%20activate%20useChat%0A%20%20%20%20useChat-%3E%3EuseChat%3A%20append%20user%20message%20to%20messages%0A%20%20%20%20useChat-%3E%3EAPI%3A%20POST%20%2Fapi%2Fchat%20(messages)%0A%20%20%20%20activate%20API%0A%20%20%20%20API-%3E%3EStreamText%3A%20streamText(%7B%20model%2C%20messages%2C%20tools%20%7D)%0A%20%20%20%20activate%20StreamText%0A%20%20%20%20StreamText-%3E%3EStreamText%3A%20%E5%88%9B%E5%BB%BA%20AsyncIterableStream%0A%20%20%20%20StreamText-%3E%3ELLM%3A%20doStream(%7B%20messages%2C%20tools%20%7D)%0A%20%20%20%20activate%20LLM%0A%20%20%20%20LLM--%3E%3EStreamText%3A%20SSE%20text-delta%20chunks%0A%20%20%20%20LLM--%3E%3EStreamText%3A%20SSE%20tool-call%20chunks%0A%20%20%20%20%0A%20%20%20%20loop%20%E6%B5%81%E5%BC%8F%E8%BE%93%E5%87%BA%0A%20%20%20%20%20%20%20%20StreamText--%3E%3EAPI%3A%20TextStreamPart%5B%5D%0A%20%20%20%20%20%20%20%20API--%3E%3EuseChat%3A%20UIMessageStream%20(chunked)%0A%20%20%20%20%20%20%20%20useChat-%3E%3EuseChat%3A%20update%20messages%20state%0A%20%20%20%20%20%20%20%20useChat--%3E%3EBrowser%3A%20re-render%20with%20new%20text%0A%20%20%20%20end%0A%20%20%20%20%0A%20%20%20%20deactivate%20LLM%0A%20%20%20%20StreamText--%3E%3EAPI%3A%20finish%0A%20%20%20%20deactivate%20StreamText%0A%20%20%20%20API--%3E%3EuseChat%3A%20stream%20end%0A%20%20%20%20deactivate%20API%0A%0A%20%20%20%20alt%20hasToolCall%0A%20%20%20%20%20%20%20%20useChat-%3E%3EAPI%3A%20POST%20%2Fapi%2Fchat%20(tool%20results)%0A%20%20%20%20%20%20%20%20API-%3E%3EStreamText%3A%20%E7%BB%A7%E7%BB%AD%20streamText%0A%20%20%20%20%20%20%20%20Note%20over%20StreamText%2CLLM%3A%20%E5%B7%A5%E5%85%B7%E8%B0%83%E7%94%A8%E5%BE%AA%E7%8E%AF%E7%BB%A7%E7%BB%AD%0A%20%20%20%20end%0A%0A%20%20%20%20useChat--%3E%3EBrowser%3A%20status%3A%20'ready'%0A%20%20%20%20deactivate%20useChat%0A",showToolbar:"1"})]),_:1}),s[20]||(s[20]=l("",15))])}}});export{y as __pageData,u as default};
diff --git a/assets/product-sense_ai-native-composite-talents.md.DRkRl5Gi.js b/assets/product-sense_ai-native-composite-talents.md.BhamxEDf.js
similarity index 99%
rename from assets/product-sense_ai-native-composite-talents.md.DRkRl5Gi.js
rename to assets/product-sense_ai-native-composite-talents.md.BhamxEDf.js
index 2653980..18362f9 100644
--- a/assets/product-sense_ai-native-composite-talents.md.DRkRl5Gi.js
+++ b/assets/product-sense_ai-native-composite-talents.md.BhamxEDf.js
@@ -1 +1 @@
-import{_ as a,c as o,o as e,d as s}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const I=JSON.parse('{"title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","frontmatter":{"date":"2024-06-15T22:23:00.000Z","title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","coverImg":"/img/cover/product_sense_bg.png","permalink":"/product-sense/ai-native-composite-talents","categories":["产品 Sense"],"tags":["AI","成长"]},"headers":[],"relativePath":"product-sense/ai-native-composite-talents.md","filePath":"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md"}'),r={name:"product-sense/ai-native-composite-talents.md"};function l(i,t,p,c,n,_){return e(),o("div",null,[...t[0]||(t[0]=[s('

读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?

原文标题:《How to Do Great Work》(如何取得杰出成就)

原文地址https://paulgraham.com/greatwork.html

原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。

文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。

1. 引言:当“执行”被 AI 填平,什么才是核心壁垒?

通读保罗·格雷厄姆(以下简称 PG)这篇两万字的长文,笔者最大的感受是:这不仅是一份跨越领域的“伟大成就指南”,更是一份为 AI 原生时代量身定制的“复合型人才生存手册”。

在 AI 爆发的当下,写代码、画图、撰写基础文案甚至简单的数据分析,这些曾经被视为专业技能的“执行动作”,正在迅速贬值。当 AI 把“解答问题”的门槛降到极低时,人与人之间的差距将被什么拉开?

PG 在文章中给出了答案:找到正确的问题、保持非共识的好奇心、以及拥有极高的品味。以下是我结合 AI 时代浪潮,对文章核心观点的梳理与个人思考。

2. 从“解决问题”到“发现问题”:提问力决定生产力

【原文精髓】

“问题不仅导向答案,而且也导向更多的问题。”

PG 认为,人们在解决问题上表现出的原创性,远超在“决定解决哪些问题”上。很多人被困在时髦的漩涡里,而真正杰出的成就往往始于敏锐地注意到了知识边缘的“缺口”。

【我的体会】

在 AI 时代,这句话被赋予了史无前例的现实意义。大模型(LLM)本质上是一个超级“解答机”,它极其擅长顺着你给定的逻辑生成答案。这意味着,在未来,寻找答案的能力将不再稀缺,稀缺的是提出绝佳问题的能力

一个 AI 原生时代的复合型人才,其核心特质就是成为一个高阶的“问题发现者”。我们需要利用 AI 快速跨越多个领域的知识盲区(即 PG 说的“到达领域前沿”),然后在前沿地带敏锐地嗅到那些被主流忽视的空白。"Prompt(提示词)质量"在某种程度上正是我们洞察力与品味的直接映射——它决定了我们能否从 AI 这座"超级解答机"中,挖掘出真正有价值的答案。

3. 培养非共识的“品味”:逃离 AI 生成的“平均数”

【原文精髓】

PG 强调:“有意识地培养对自己领域工作的品味。除非我们知道什么是最好的,以及是什么使它成为最好的,否则我们并不知道自己在追求什么。”

【我的体会】

在这个信息大爆炸的时代,AI 正在批量生产海量的、无差别的“及格线以上”的内容与代码,这带来了两个极端的现象:

  • 下限被拔高了,平庸者可以利用 AI 瞬间看起来像个专家。

  • 上限变得更难突破了,因为所有由 AI 生成的东西,本质上都是在“历史数据的平均值”上做微小变异。

这就使得 PG 提到的“品味(Taste)”变得无比重要。复合型人才必须拥有极高的审美眼光与判别能力,这种能力无法通过算法习得。当我们面对 AI 给出的多个解决方案时,需要敏锐地判断哪个方案不仅可行,而且足够“优雅”。品味,将成为我们在 AI 自动驾驶浪潮中把稳方向盘的核心资产

4. 保持真诚与“打破规则”的勇气:抵抗 AI 的“幻觉”与平庸

【原文精髓】

“要找到新的想法,就必须抓住不合理的迹象,而不是避而不见。” PG 在文章中反复强调独立思考(无论是主动还是被动的)与真诚(Intellectual Honesty,智力诚实)的力量。一个好的新想法,一开始往往是不受待见的。

【我的体会】

大模型是基于“人类现有共识(语料库)”训练出来的产物,这也意味着如果只依赖 AI 的输出,我们将永远在已知的舒适区内打转。真正“伟大”的创新,必然是对现有常识的颠覆与补充。

这就要求复合型人才必须具备极度的“智力诚实”。我们要把 AI 当作工具去验证假设,但在 AI 给出看似完美的常规解答时,我们要敢于说:“不,这里还有缺陷。”

当所有人都沉浸在某种热门技术或框架中时,我们要敢于像 PG 说的那样,选择冷门但具有极大潜力的“问题空间”。在 AI 时代,你的原创性,恰恰体现在你敢于在 AI 给出“标准答案”时,按下暂停键,去追问一个看似疯狂但属于“正确类别”的问题。

5. 复合指数增长:以小见大的行动力

【原文精髓】

“指数增长的问题在于曲线在开始时给人的感觉很平,但它不是。” PG 指出:杰出成就的累积效应是被严重低估的,关键在于一致性。同时,我们不需要做庞大的计划,只需要做“可能有用的最简单的东西”,并在实践中不断演化。

【我的体会】

在这一节,PG 的观点与“敏捷开发”不谋而合。但在今天,有了 AI 加持,个人开发者的“复合杠杆率”被无限放大了。

过去,打造一个最小可行性产品(MVP)往往需要数周时间。如今,在 AI 编程工具的助力下,一个具备复合能力的人才或许只需一个周末就能完成原型的搭建与验证。这意味着"以项目为单位的拖延"在当下变得愈发不可承受

AI 时代的复合型人才,不再是拥有单一深厚技能的螺丝钉,而是能够一人承担“产品经理 + 全栈工程师 + 运营”角色的超级个体。一旦找到那个令你产生深度兴趣的切入点,并持续深耕,你的成长曲线将在极短时间内迎来惊人的指数级跃升。

6. 在算力面前保持敬畏,在机器面前保持好奇

通读 PG 这篇万字长文,如果要问:在这个技术天翻地覆的时代,取得成就究竟有什么不可替代的秘诀?文章给出的最终答案是——好奇心。

AI 可以模仿语气,可以生成代码,可以计算概率,却无法拥有真正自发的好奇心。它不会为一个微小的不合理现象而抓狂,也不会为了一个未知的答案彻夜难眠。

这正是我们作为人类最后的底牌。去追寻那些让你兴奋不已、让你"过分"好奇的问题吧——借助 AI 的算力跨越执行的鸿沟,以极高的品味去甄别筛选,用不妥协的真诚去深入探索。

剩下的,正如保罗·格雷厄姆所说:"还有很多发现正等待着被发现,为什么不由我们自己去发现呢?"

',23)])])}const A=a(r,[["render",l]]);export{I as __pageData,A as default}; +import{_ as a,c as o,o as e,d as s}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const I=JSON.parse('{"title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","frontmatter":{"date":"2024-06-15T22:23:00.000Z","title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","coverImg":"/img/cover/product_sense_bg.png","permalink":"/product-sense/ai-native-composite-talents","categories":["产品 Sense"],"tags":["AI","成长"]},"headers":[],"relativePath":"product-sense/ai-native-composite-talents.md","filePath":"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md"}'),r={name:"product-sense/ai-native-composite-talents.md"};function l(i,t,p,c,n,_){return e(),o("div",null,[...t[0]||(t[0]=[s('

读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?

原文标题:《How to Do Great Work》(如何取得杰出成就)

原文地址https://paulgraham.com/greatwork.html

原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。

文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。

1. 引言:当“执行”被 AI 填平,什么才是核心壁垒?

通读保罗·格雷厄姆(以下简称 PG)这篇两万字的长文,笔者最大的感受是:这不仅是一份跨越领域的“伟大成就指南”,更是一份为 AI 原生时代量身定制的“复合型人才生存手册”。

在 AI 爆发的当下,写代码、画图、撰写基础文案甚至简单的数据分析,这些曾经被视为专业技能的“执行动作”,正在迅速贬值。当 AI 把“解答问题”的门槛降到极低时,人与人之间的差距将被什么拉开?

PG 在文章中给出了答案:找到正确的问题、保持非共识的好奇心、以及拥有极高的品味。以下是我结合 AI 时代浪潮,对文章核心观点的梳理与个人思考。

2. 从“解决问题”到“发现问题”:提问力决定生产力

【原文精髓】

“问题不仅导向答案,而且也导向更多的问题。”

PG 认为,人们在解决问题上表现出的原创性,远超在“决定解决哪些问题”上。很多人被困在时髦的漩涡里,而真正杰出的成就往往始于敏锐地注意到了知识边缘的“缺口”。

【我的体会】

在 AI 时代,这句话被赋予了史无前例的现实意义。大模型(LLM)本质上是一个超级“解答机”,它极其擅长顺着你给定的逻辑生成答案。这意味着,在未来,寻找答案的能力将不再稀缺,稀缺的是提出绝佳问题的能力

一个 AI 原生时代的复合型人才,其核心特质就是成为一个高阶的“问题发现者”。我们需要利用 AI 快速跨越多个领域的知识盲区(即 PG 说的“到达领域前沿”),然后在前沿地带敏锐地嗅到那些被主流忽视的空白。"Prompt(提示词)质量"在某种程度上正是我们洞察力与品味的直接映射——它决定了我们能否从 AI 这座"超级解答机"中,挖掘出真正有价值的答案。

3. 培养非共识的“品味”:逃离 AI 生成的“平均数”

【原文精髓】

PG 强调:“有意识地培养对自己领域工作的品味。除非我们知道什么是最好的,以及是什么使它成为最好的,否则我们并不知道自己在追求什么。”

【我的体会】

在这个信息大爆炸的时代,AI 正在批量生产海量的、无差别的“及格线以上”的内容与代码,这带来了两个极端的现象:

  • 下限被拔高了,平庸者可以利用 AI 瞬间看起来像个专家。

  • 上限变得更难突破了,因为所有由 AI 生成的东西,本质上都是在“历史数据的平均值”上做微小变异。

这就使得 PG 提到的“品味(Taste)”变得无比重要。复合型人才必须拥有极高的审美眼光与判别能力,这种能力无法通过算法习得。当我们面对 AI 给出的多个解决方案时,需要敏锐地判断哪个方案不仅可行,而且足够“优雅”。品味,将成为我们在 AI 自动驾驶浪潮中把稳方向盘的核心资产

4. 保持真诚与“打破规则”的勇气:抵抗 AI 的“幻觉”与平庸

【原文精髓】

“要找到新的想法,就必须抓住不合理的迹象,而不是避而不见。” PG 在文章中反复强调独立思考(无论是主动还是被动的)与真诚(Intellectual Honesty,智力诚实)的力量。一个好的新想法,一开始往往是不受待见的。

【我的体会】

大模型是基于“人类现有共识(语料库)”训练出来的产物,这也意味着如果只依赖 AI 的输出,我们将永远在已知的舒适区内打转。真正“伟大”的创新,必然是对现有常识的颠覆与补充。

这就要求复合型人才必须具备极度的“智力诚实”。我们要把 AI 当作工具去验证假设,但在 AI 给出看似完美的常规解答时,我们要敢于说:“不,这里还有缺陷。”

当所有人都沉浸在某种热门技术或框架中时,我们要敢于像 PG 说的那样,选择冷门但具有极大潜力的“问题空间”。在 AI 时代,你的原创性,恰恰体现在你敢于在 AI 给出“标准答案”时,按下暂停键,去追问一个看似疯狂但属于“正确类别”的问题。

5. 复合指数增长:以小见大的行动力

【原文精髓】

“指数增长的问题在于曲线在开始时给人的感觉很平,但它不是。” PG 指出:杰出成就的累积效应是被严重低估的,关键在于一致性。同时,我们不需要做庞大的计划,只需要做“可能有用的最简单的东西”,并在实践中不断演化。

【我的体会】

在这一节,PG 的观点与“敏捷开发”不谋而合。但在今天,有了 AI 加持,个人开发者的“复合杠杆率”被无限放大了。

过去,打造一个最小可行性产品(MVP)往往需要数周时间。如今,在 AI 编程工具的助力下,一个具备复合能力的人才或许只需一个周末就能完成原型的搭建与验证。这意味着"以项目为单位的拖延"在当下变得愈发不可承受

AI 时代的复合型人才,不再是拥有单一深厚技能的螺丝钉,而是能够一人承担“产品经理 + 全栈工程师 + 运营”角色的超级个体。一旦找到那个令你产生深度兴趣的切入点,并持续深耕,你的成长曲线将在极短时间内迎来惊人的指数级跃升。

6. 在算力面前保持敬畏,在机器面前保持好奇

通读 PG 这篇万字长文,如果要问:在这个技术天翻地覆的时代,取得成就究竟有什么不可替代的秘诀?文章给出的最终答案是——好奇心。

AI 可以模仿语气,可以生成代码,可以计算概率,却无法拥有真正自发的好奇心。它不会为一个微小的不合理现象而抓狂,也不会为了一个未知的答案彻夜难眠。

这正是我们作为人类最后的底牌。去追寻那些让你兴奋不已、让你"过分"好奇的问题吧——借助 AI 的算力跨越执行的鸿沟,以极高的品味去甄别筛选,用不妥协的真诚去深入探索。

剩下的,正如保罗·格雷厄姆所说:"还有很多发现正等待着被发现,为什么不由我们自己去发现呢?"

',23)])])}const A=a(r,[["render",l]]);export{I as __pageData,A as default}; diff --git a/assets/product-sense_ai-native-composite-talents.md.DRkRl5Gi.lean.js b/assets/product-sense_ai-native-composite-talents.md.BhamxEDf.lean.js similarity index 96% rename from assets/product-sense_ai-native-composite-talents.md.DRkRl5Gi.lean.js rename to assets/product-sense_ai-native-composite-talents.md.BhamxEDf.lean.js index 33a7a26..d4d13b3 100644 --- a/assets/product-sense_ai-native-composite-talents.md.DRkRl5Gi.lean.js +++ b/assets/product-sense_ai-native-composite-talents.md.BhamxEDf.lean.js @@ -1 +1 @@ -import{_ as a,c as o,o as e,d as s}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const I=JSON.parse('{"title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","frontmatter":{"date":"2024-06-15T22:23:00.000Z","title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","coverImg":"/img/cover/product_sense_bg.png","permalink":"/product-sense/ai-native-composite-talents","categories":["产品 Sense"],"tags":["AI","成长"]},"headers":[],"relativePath":"product-sense/ai-native-composite-talents.md","filePath":"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md"}'),r={name:"product-sense/ai-native-composite-talents.md"};function l(i,t,p,c,n,_){return e(),o("div",null,[...t[0]||(t[0]=[s("",23)])])}const A=a(r,[["render",l]]);export{I as __pageData,A as default}; +import{_ as a,c as o,o as e,d as s}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const I=JSON.parse('{"title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","frontmatter":{"date":"2024-06-15T22:23:00.000Z","title":"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?","description":"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。","coverImg":"/img/cover/product_sense_bg.png","permalink":"/product-sense/ai-native-composite-talents","categories":["产品 Sense"],"tags":["AI","成长"]},"headers":[],"relativePath":"product-sense/ai-native-composite-talents.md","filePath":"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md"}'),r={name:"product-sense/ai-native-composite-talents.md"};function l(i,t,p,c,n,_){return e(),o("div",null,[...t[0]||(t[0]=[s("",23)])])}const A=a(r,[["render",l]]);export{I as __pageData,A as default}; diff --git a/assets/product-sense_engineer-build-product-sense.md.C9qdnDdy.js b/assets/product-sense_engineer-build-product-sense.md.BnO1b4Ek.js similarity index 99% rename from assets/product-sense_engineer-build-product-sense.md.C9qdnDdy.js rename to assets/product-sense_engineer-build-product-sense.md.BnO1b4Ek.js index 7353210..c0724b7 100644 --- a/assets/product-sense_engineer-build-product-sense.md.C9qdnDdy.js +++ b/assets/product-sense_engineer-build-product-sense.md.BnO1b4Ek.js @@ -1 +1 @@ -import{_ as s,c as t,o as n,d as m}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","frontmatter":{"date":"2025-10-23T16:05:50.000Z","title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","sticky":1,"top":true,"categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/engineer-build-product-sense"},"headers":[],"relativePath":"product-sense/engineer-build-product-sense.md","filePath":"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md"}'),i={name:"product-sense/engineer-build-product-sense.md"};function o(l,a,e,r,p,d){return n(),t("div",null,[...a[0]||(a[0]=[m('

当“实现”不再是壁垒:工程师如何构建产品 Sense?

摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。

1. 引言

在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。

但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 "Code Smell"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。

一个成功的产品决策,往往发生在三个维度的交汇点:

  • 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更快到达目的地”。
  • 商业可行性(Business Viability):不仅能做出来,还能算得过账。像 Dropbox 早期利用病毒式裂变降低获客成本,就是商业嗅觉的体现。
  • 技术可实现性(Technical Feasibility):在“完美的架构”和“明天就能上线”之间找到平衡。ChatGPT 的爆发,正是技术积累终于跨过了“可用性阈值”的临界点。

产品 Sense 是产品经理、设计师乃至创业者经常被提及、却也难以量化的能力之一。它并非玄学,而是一套可拆解、可训练、可迭代的思维模型:在信息不完整、目标模糊、资源受限的情况下,依然能快速判断「做什么」与「不做什么」,并让用户愿意为之买单或停留

2. 解构产品 Sense 的数学之美

如果把产品 Sense 仅仅看作是“灵光一现”的艺术,那它就是不可复制的黑盒。作为工程师,我们更习惯于透过现象探寻底层的运行规律。

事实上,那些看似玄妙的直觉判断,往往是潜意识在极短时间内完成的高维计算。为了让这个抽象概念变得可解构、可训练,我尝试用理性的数学语言来重构感性的产品直觉,将其提炼为以下三个核心公式。

2.1. 极简杠杆公式:寻找 ROI 的最大解

NOTE

核心逻辑:卓越的产品嗅觉(产品 Sense)本质上是一种寻找“高杠杆解”的能力,对投入产出比(ROI)极致敏感。它要求我们敏锐地发现那些 “价值极高,但实现较低” 的低垂机会(Low Hanging Fruits),并果断放弃那些 “价值低又很难做” 的伪需求(看似美好,实则陷入技术泥潭)。

适用场景:技术选型决策、Feature 排期优先级、MVP 边界界定。

对于技术背景的开发者,最大的陷阱往往是“对过度设计的迷恋” 与 “为了技术而技术的自我感动”。因为掌握了某个新技术,就强行创造一个需求,但好的 Product Sense 其实是投入产出比(ROI)的直觉:

Product Sense=User ValueComplexity\\mathbf{Product\\ Sense} \\; = \\; \\frac{\\mathbf{User\\ Value}}{\\mathbf{Complexity}}

  • 分子——用户价值(User Value): 痛点烈度 × 覆盖广度不仅仅是“这个问题痛不痛”,而是要量化思考:这是一个高频刚需,还是低频痒点?解决它能为业务带来多大的增量(留存、转化或效率提升)?
  • 分母——实现复杂度(Complexity): 开发成本 + 维护税复杂度不仅是 Coding 的时间,更包含未来的维护成本、系统熵增以及用户认知的负担。全栈的智慧在于:用最简单的技术栈(Low Complexity),去撬动最大的业务价值。敢于在非核心功能上使用“笨办法”,是为了在核心体验上以此换取“极致体验”。

2.2. 洞察力公式:理智与情感的共舞

NOTE

核心逻辑:同理心提供"方向",批判性思维提供"导航"

  • 同理心告诉你"用户很痛苦"批判性思维告诉你"痛苦的根源是什么"
  • 同理心告诉你"用户想要什么"批判性思维告诉你"为什么想要"和"有没有更好的解决方案"

适用场景:需求分析、用户调研、产品定位、功能设计、A/B 测试方案设计。

仅有同理心,产品容易沦为“臃肿的许愿池”(用户要什么给什么,导致产品臃肿);仅有批判性思维,产品容易变成“冰冷的逻辑机器”(数据看似完美,却缺乏打动人心的人性温度)。因此,产品 Sense 本质上也是同理心与批判性思维的结合:

例如,用户抱怨"App 太复杂",同理心让你感受到用户的挫败感,批判性思维让你追问:是功能太多?还是导航不清晰?还是学习成本太高?——不同的根源需要不同的解决方案。

Product Sense=Empathy×Critical Thinking\\mathbf{Product\\ Sense} \\; = \\; \\mathbf{Empathy} \\; \\times \\; \\mathbf{Critical\\ Thinking}

注意,这里是乘法关系而不是加法,意味着任何一个为零,整个结果都是零。只有同理心但缺乏批判性思维,会做出"用户要什么就给什么"的平庸产品;只有批判性思维但缺乏同理心,会做出"技术上完美但用户不买账"的产品。

  • 同理心 (Empathy): 感知用户真实感受的能力。同理心不是"我理解用户",而是"我能变成用户"。这意味着:

    • 情境代入:能够切换到用户的真实使用场景。例如,设计外卖 App 时,不是在办公室想象"用户想要什么功能",而是站在雨夜路边、手机电量 10% 的真实场景中思考。
    • 情绪捕捉:能够识别用户未说出口的情绪。用户抱怨"页面加载慢",背后的情绪可能是"我饿得不行了,还要等多久?"——解决方案不只是优化代码,更可能是优化"等待时的体验"(比如显示预计时间、播放动画)。
    • 认知对齐:不预设用户很聪明。用户不会像你一样熟悉产品,他们会在你意想不到的地方卡住。例如,注册页面的"密码强度"指示器,用户可能根本看不懂那些颜色代表什么。
    • 反面案例:某电商 App 在购物车页面放置了 20 个功能入口,产品经理觉得"功能很全",但用户只想要一个"快速结算"按钮。
  • 批判性思维 (Critical Thinking): 透过现象看本质的能力。批判性思维不是"质疑一切",而是"追问为什么"。这意味着:

    • 需求挖掘:用户说"想要"的不一定是他们"需要"的。经典的例子:用户说"我要一匹更快的马",背后的需求是"更快到达目的地"——解决方案可能是汽车、火车、飞机,而不是训练更快的马。
    • 数据解读:能够区分"相关性"和"因果关系"。数据显示"使用某功能的用户留存率更高",但究竟是"功能带来留存"还是"高留存用户恰好用了这个功能"?需要进一步验证。
    • 假设挑战:对每个功能假设都要问"如果不做会怎样?"。例如,增加"每日签到"功能前,先问:用户不签到的损失是什么?如果签到带来的价值不足以改变用户行为,那就是伪需求。 实际案例:Airbnb 早期发现用户不愿预订,不是因为价格或房源,而是因为"信任陌生房东"。于是他们投入大量精力做"房东验证""真实评价""照片认证",而不是优化搜索算法——这就是批判性思维带来的洞察。

2.3. AI 前沿视角公式:从“功能产品”到“语境构建”

NOTE

核心洞察:AI 时代的稀缺资源不再是“生成答案的能力”(模型已经具备),而是“提出正确问题的能力”。Product Sense 的核心从“设计功能交互”转变为“设计隐性的思维路径”,我们需要同时具备 翻译官(将模糊需求结构化) 和 架构师(构建智能体工作流) 的双重能力。

AI 模型本身是通用的引擎,我们需要为它设计底盘和方向盘,产品 Sense 在 AI 时代也就包含了新的特征:定义问题的能力——能把模糊的人类需求翻译成 AI 能理解的精确指令和环境:

Product Sense=Problem Definition+Context Design\\mathbf{Product\\ Sense} \\; = \\; \\mathbf{Problem\\ Definition} \\; + \\; \\mathbf{Context\\ Design}

  • 定义问题(Problem Definiton):
    • 结构化歧义:AI 拥有无限的潜力,也伴随着无限的发散。Product Sense 在此处体现为 “收敛能力”——能否将一个模糊的业务痛点(如“分析用户情绪”),拆解为一组 AI 可理解、可执行的精准意图。
    • 工作流架构:这不仅仅是写出一句完美的 Prompt,更是设计 Agentic Workflow(智能体工作流)的过程。我们需要判断哪些环节利用 LLM 的逻辑推理(概率性),哪些环节必须由传统代码(确定性)来兜底,从而构建出稳定可靠的系统。
  • 语境设计(Context Design):从“喂数据”到“构建信息场域”
    • 无形界面设计:在 AI 应用中,真正的 UI 往往不是屏幕上的像素,而是看不见的 Context Window(上下文窗口)。Product Sense 就是设计这个“无形界面”的艺术——决定让 AI “看到”什么,以及“忽略”什么。
    • 约束与边界工程:Product Sense 在这里体现为:我们能否为 AI 构建一个“全知全能”且“专注当下”的上下文环境,使其输出精准且可控。核心挑战是:如何在有限的上下文窗口(Context Window)中,提供最关键的先验知识、约束条件和少样本(Few-Shot)案例,让 AI 在你预设的“语境场”里精准舞蹈,而不是胡乱幻觉。

3. 刻意练习:如何从“凭感觉”到“有直觉”?

很多人认为 Sense 是天赋,无法学习,但我坚信直觉是经验在潜意识里的压缩算法。我们可以通过以下三个步骤的“刻意练习”来训练这种算法:

3.1. 建立“预测-验证”的反馈闭环

这是最硬核的训练法,不要只是被动地看数据,要主动做预测。

  • 练习方法:在任何新功能上线前(或者观察竞品改版时),在笔记本上写下你的预测。
    • “我赌这个按钮改为红色,点击率会提升 5%。”
    • “我认为竞品推出这个功能是想解决留存问题,但可能会导致用户反感。”
  • 复盘:一周后,看真实数据或市场反馈。如果你猜对了,强化这个直觉。如果你猜错了,这才是最宝贵的时刻:去深究为什么?是高估了用户动力?还是低估了操作门槛?
  • 原理:大模型的训练依靠 Loss Function(损失函数)来收敛,人的直觉也一样。只有通过不断的“预测失败”,我们的大脑才能修正权重,从而获得更精准的 Sense。

3.2. 培养“摩擦力日记”

很多时候我们对痛点视而不见,是因为我们习惯了,要训练产品 Sense,就要恢复对“不舒服”的敏感度。

  • 练习方法:每天记录 3 个让自己感到“微小不爽”的时刻,无论是使用自家产品还是生活中的琐事。

    • “在这个 App 复制验证码居然不能自动跳转,还得我手动切回去,好烦。”
    • “这个报错提示说‘网络错误 404’,为什么不直接告诉我‘请检查 Wi-Fi’?”
  • 进阶:不只是抱怨,强迫自己构思一个 “最小改动解”

    • 解法:在复制验证码的短信里加一个 Deep Link,一键跳回 App。

3.3. 解构“魔法”:从惊叹到复刻的逆向工程

NOTE

四步闭环: “记录-解剖-重构-沉淀”

当我们遇到一个让自己惊叹的产品(比如初次使用 ChatGPT或沉迷于 Vibe Coding)时,千万不要只停留在消费者的视角感叹“真好用”。那是“魔法”生效的时刻,也是你作为魔术师学徒拆解戏法的最佳时机。

若想将这种惊叹内化为自己的 Sense,我们需要执行一套完整的逆向工程循环:

(1)记录 (Record):捕捉情绪颗粒度

不要等回头再想,要在“惊叹”发生的当下,像捕捉蝴蝶一样捕捉你的情绪:

  • 截屏/录屏:记录下那个让你嘴角上扬或瞳孔放大的瞬间(Aha Moment)。
  • 微观情绪标注:问自己,“这一秒,为什么我觉得‘爽’?”是因为那个丝滑的转场动画,还是因为文案恰好击中了我的软肋,还是因为它的响应速度快得不可思议?
    • 案例:Linear 的官网之所以让人惊叹,不仅因为设计,更因为当你按 J / K 键时的毫秒级响应,这种“掌控感”是情绪的来源。

(2)解剖 (Peel):上帝视角的逻辑拆解

切换到产品经理的上帝视角,透过表皮看骨架。思考它做对了哪三件事:

  • 它满足了哪个层级的需求?是底层的生理/安全,还是顶层的自我实现/虚荣?它是帮你省了时间,还是帮你杀了时间?
  • 它极其大胆地“删减”了什么?伟大的产品往往由它不做什么来定义。TikTok 删减了用户“选择看什么”的权利,直接喂饭;Notion 早期删减了复杂的格式兼容,只保留 Block。
  • 它的核心增长飞轮是什么?它是如何让你忍不住想分享给别人的?是利用了你的炫耀欲,还是单纯的互利机制?

(3)重构 (Reconstruct):全栈视角的复刻推演

发挥全栈工程师的技术优势,在脑海中(或草稿纸上)尝试重建它。

  • 技术推演:为了实现这个丝滑体验,它的前端可能用了什么技术栈?后端是如何处理高并发的?如果你来做,你会怎么设计数据库 Schema?
  • 成本估算:它为了这个体验,付出了多大的工程代价?这个代价在商业上划算吗?

(4)沉淀 (Crystallize):输出倒逼内化

这是最关键、却最常被忽略的一步。没有输出的思考,就像没有 commit 的代码,随时会丢失。

  • 写一篇“产品验证报告”:不要只在脑子里想,要写下来。比如尝试写一篇《为什么 X 产品让我欲罢不能?》,强迫自己把模糊的感觉结构化为文字。

  • 发起一场“人机辩论” (Initiate a Human-AI Debate): 不要急着把观点发给同行,先让 AI 充当你的“红队”也就是“假想敌”。

    • 第一轮(AI 陪练):把自己的分析发给 GPT/Claude,并加上这句 Prompt:“如果你是这个产品的 CEO,请指出我分析中的漏洞,有哪些商业考量或技术限制是我没看到的?” AI 往往能从你忽略的历史背景、隐形成本或竞争格局角度给出惊人的补充。
    • 第二轮(真人验证):带着 AI 完善过的观点,再去社区或同行间交流。你会发现,你的洞察深度已经超越了 90% 的人,而真人的反馈则能补充 AI 无法触达的“隐秘行业潜规则”或“人性微妙之处”

4. 结语:从“如何实现”的焦虑中解放,拥抱“为何而做”的自由

在 AI 时代,代码生成的边际成本正在无限趋近于零。当“实现”不再是不可逾越的壁垒,“洞察”与“品位”便成了新的护城河。

未来的全栈工程师将不再是 [前端 + 后端],而是 [技术理解力 x 产品敏锐度]的化学反应:

  • 技术是我们的压舱石,让我们知晓可能性的边界,不至于在天马行空中失重;
  • 产品 Sense 是我们的罗盘,让在生成的洪流中锁定航向,不至于在低价值的代码堆里荒废时光。

产品 Sense 的终点从来不是“不做错的决定”——那是全知视角的奢望。它的终点是“拥有比别人更短的纠错半径”:在错误发生时,能以最低的成本感知并修正。

保持敏锐,保持饥饿,对“用户下一秒的皱眉”心存敬畏。因为算法无法计算“痛点”,而那个皱眉的瞬间,往往就是下一款好产品的起点。

',58)])])}const b=s(i,[["render",o]]);export{h as __pageData,b as default}; +import{_ as s,c as t,o as n,d as m}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","frontmatter":{"date":"2025-10-23T16:05:50.000Z","title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","sticky":1,"top":true,"categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/engineer-build-product-sense"},"headers":[],"relativePath":"product-sense/engineer-build-product-sense.md","filePath":"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md"}'),i={name:"product-sense/engineer-build-product-sense.md"};function o(l,a,e,r,p,d){return n(),t("div",null,[...a[0]||(a[0]=[m('

当“实现”不再是壁垒:工程师如何构建产品 Sense?

摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。

1. 引言

在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。

但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 "Code Smell"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。

一个成功的产品决策,往往发生在三个维度的交汇点:

  • 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更快到达目的地”。
  • 商业可行性(Business Viability):不仅能做出来,还能算得过账。像 Dropbox 早期利用病毒式裂变降低获客成本,就是商业嗅觉的体现。
  • 技术可实现性(Technical Feasibility):在“完美的架构”和“明天就能上线”之间找到平衡。ChatGPT 的爆发,正是技术积累终于跨过了“可用性阈值”的临界点。

产品 Sense 是产品经理、设计师乃至创业者经常被提及、却也难以量化的能力之一。它并非玄学,而是一套可拆解、可训练、可迭代的思维模型:在信息不完整、目标模糊、资源受限的情况下,依然能快速判断「做什么」与「不做什么」,并让用户愿意为之买单或停留

2. 解构产品 Sense 的数学之美

如果把产品 Sense 仅仅看作是“灵光一现”的艺术,那它就是不可复制的黑盒。作为工程师,我们更习惯于透过现象探寻底层的运行规律。

事实上,那些看似玄妙的直觉判断,往往是潜意识在极短时间内完成的高维计算。为了让这个抽象概念变得可解构、可训练,我尝试用理性的数学语言来重构感性的产品直觉,将其提炼为以下三个核心公式。

2.1. 极简杠杆公式:寻找 ROI 的最大解

NOTE

核心逻辑:卓越的产品嗅觉(产品 Sense)本质上是一种寻找“高杠杆解”的能力,对投入产出比(ROI)极致敏感。它要求我们敏锐地发现那些 “价值极高,但实现较低” 的低垂机会(Low Hanging Fruits),并果断放弃那些 “价值低又很难做” 的伪需求(看似美好,实则陷入技术泥潭)。

适用场景:技术选型决策、Feature 排期优先级、MVP 边界界定。

对于技术背景的开发者,最大的陷阱往往是“对过度设计的迷恋” 与 “为了技术而技术的自我感动”。因为掌握了某个新技术,就强行创造一个需求,但好的 Product Sense 其实是投入产出比(ROI)的直觉:

Product Sense=User ValueComplexity\\mathbf{Product\\ Sense} \\; = \\; \\frac{\\mathbf{User\\ Value}}{\\mathbf{Complexity}}

  • 分子——用户价值(User Value): 痛点烈度 × 覆盖广度不仅仅是“这个问题痛不痛”,而是要量化思考:这是一个高频刚需,还是低频痒点?解决它能为业务带来多大的增量(留存、转化或效率提升)?
  • 分母——实现复杂度(Complexity): 开发成本 + 维护税复杂度不仅是 Coding 的时间,更包含未来的维护成本、系统熵增以及用户认知的负担。全栈的智慧在于:用最简单的技术栈(Low Complexity),去撬动最大的业务价值。敢于在非核心功能上使用“笨办法”,是为了在核心体验上以此换取“极致体验”。

2.2. 洞察力公式:理智与情感的共舞

NOTE

核心逻辑:同理心提供"方向",批判性思维提供"导航"

  • 同理心告诉你"用户很痛苦"批判性思维告诉你"痛苦的根源是什么"
  • 同理心告诉你"用户想要什么"批判性思维告诉你"为什么想要"和"有没有更好的解决方案"

适用场景:需求分析、用户调研、产品定位、功能设计、A/B 测试方案设计。

仅有同理心,产品容易沦为“臃肿的许愿池”(用户要什么给什么,导致产品臃肿);仅有批判性思维,产品容易变成“冰冷的逻辑机器”(数据看似完美,却缺乏打动人心的人性温度)。因此,产品 Sense 本质上也是同理心与批判性思维的结合:

例如,用户抱怨"App 太复杂",同理心让你感受到用户的挫败感,批判性思维让你追问:是功能太多?还是导航不清晰?还是学习成本太高?——不同的根源需要不同的解决方案。

Product Sense=Empathy×Critical Thinking\\mathbf{Product\\ Sense} \\; = \\; \\mathbf{Empathy} \\; \\times \\; \\mathbf{Critical\\ Thinking}

注意,这里是乘法关系而不是加法,意味着任何一个为零,整个结果都是零。只有同理心但缺乏批判性思维,会做出"用户要什么就给什么"的平庸产品;只有批判性思维但缺乏同理心,会做出"技术上完美但用户不买账"的产品。

  • 同理心 (Empathy): 感知用户真实感受的能力。同理心不是"我理解用户",而是"我能变成用户"。这意味着:

    • 情境代入:能够切换到用户的真实使用场景。例如,设计外卖 App 时,不是在办公室想象"用户想要什么功能",而是站在雨夜路边、手机电量 10% 的真实场景中思考。
    • 情绪捕捉:能够识别用户未说出口的情绪。用户抱怨"页面加载慢",背后的情绪可能是"我饿得不行了,还要等多久?"——解决方案不只是优化代码,更可能是优化"等待时的体验"(比如显示预计时间、播放动画)。
    • 认知对齐:不预设用户很聪明。用户不会像你一样熟悉产品,他们会在你意想不到的地方卡住。例如,注册页面的"密码强度"指示器,用户可能根本看不懂那些颜色代表什么。
    • 反面案例:某电商 App 在购物车页面放置了 20 个功能入口,产品经理觉得"功能很全",但用户只想要一个"快速结算"按钮。
  • 批判性思维 (Critical Thinking): 透过现象看本质的能力。批判性思维不是"质疑一切",而是"追问为什么"。这意味着:

    • 需求挖掘:用户说"想要"的不一定是他们"需要"的。经典的例子:用户说"我要一匹更快的马",背后的需求是"更快到达目的地"——解决方案可能是汽车、火车、飞机,而不是训练更快的马。
    • 数据解读:能够区分"相关性"和"因果关系"。数据显示"使用某功能的用户留存率更高",但究竟是"功能带来留存"还是"高留存用户恰好用了这个功能"?需要进一步验证。
    • 假设挑战:对每个功能假设都要问"如果不做会怎样?"。例如,增加"每日签到"功能前,先问:用户不签到的损失是什么?如果签到带来的价值不足以改变用户行为,那就是伪需求。 实际案例:Airbnb 早期发现用户不愿预订,不是因为价格或房源,而是因为"信任陌生房东"。于是他们投入大量精力做"房东验证""真实评价""照片认证",而不是优化搜索算法——这就是批判性思维带来的洞察。

2.3. AI 前沿视角公式:从“功能产品”到“语境构建”

NOTE

核心洞察:AI 时代的稀缺资源不再是“生成答案的能力”(模型已经具备),而是“提出正确问题的能力”。Product Sense 的核心从“设计功能交互”转变为“设计隐性的思维路径”,我们需要同时具备 翻译官(将模糊需求结构化) 和 架构师(构建智能体工作流) 的双重能力。

AI 模型本身是通用的引擎,我们需要为它设计底盘和方向盘,产品 Sense 在 AI 时代也就包含了新的特征:定义问题的能力——能把模糊的人类需求翻译成 AI 能理解的精确指令和环境:

Product Sense=Problem Definition+Context Design\\mathbf{Product\\ Sense} \\; = \\; \\mathbf{Problem\\ Definition} \\; + \\; \\mathbf{Context\\ Design}

  • 定义问题(Problem Definiton):
    • 结构化歧义:AI 拥有无限的潜力,也伴随着无限的发散。Product Sense 在此处体现为 “收敛能力”——能否将一个模糊的业务痛点(如“分析用户情绪”),拆解为一组 AI 可理解、可执行的精准意图。
    • 工作流架构:这不仅仅是写出一句完美的 Prompt,更是设计 Agentic Workflow(智能体工作流)的过程。我们需要判断哪些环节利用 LLM 的逻辑推理(概率性),哪些环节必须由传统代码(确定性)来兜底,从而构建出稳定可靠的系统。
  • 语境设计(Context Design):从“喂数据”到“构建信息场域”
    • 无形界面设计:在 AI 应用中,真正的 UI 往往不是屏幕上的像素,而是看不见的 Context Window(上下文窗口)。Product Sense 就是设计这个“无形界面”的艺术——决定让 AI “看到”什么,以及“忽略”什么。
    • 约束与边界工程:Product Sense 在这里体现为:我们能否为 AI 构建一个“全知全能”且“专注当下”的上下文环境,使其输出精准且可控。核心挑战是:如何在有限的上下文窗口(Context Window)中,提供最关键的先验知识、约束条件和少样本(Few-Shot)案例,让 AI 在你预设的“语境场”里精准舞蹈,而不是胡乱幻觉。

3. 刻意练习:如何从“凭感觉”到“有直觉”?

很多人认为 Sense 是天赋,无法学习,但我坚信直觉是经验在潜意识里的压缩算法。我们可以通过以下三个步骤的“刻意练习”来训练这种算法:

3.1. 建立“预测-验证”的反馈闭环

这是最硬核的训练法,不要只是被动地看数据,要主动做预测。

  • 练习方法:在任何新功能上线前(或者观察竞品改版时),在笔记本上写下你的预测。
    • “我赌这个按钮改为红色,点击率会提升 5%。”
    • “我认为竞品推出这个功能是想解决留存问题,但可能会导致用户反感。”
  • 复盘:一周后,看真实数据或市场反馈。如果你猜对了,强化这个直觉。如果你猜错了,这才是最宝贵的时刻:去深究为什么?是高估了用户动力?还是低估了操作门槛?
  • 原理:大模型的训练依靠 Loss Function(损失函数)来收敛,人的直觉也一样。只有通过不断的“预测失败”,我们的大脑才能修正权重,从而获得更精准的 Sense。

3.2. 培养“摩擦力日记”

很多时候我们对痛点视而不见,是因为我们习惯了,要训练产品 Sense,就要恢复对“不舒服”的敏感度。

  • 练习方法:每天记录 3 个让自己感到“微小不爽”的时刻,无论是使用自家产品还是生活中的琐事。

    • “在这个 App 复制验证码居然不能自动跳转,还得我手动切回去,好烦。”
    • “这个报错提示说‘网络错误 404’,为什么不直接告诉我‘请检查 Wi-Fi’?”
  • 进阶:不只是抱怨,强迫自己构思一个 “最小改动解”

    • 解法:在复制验证码的短信里加一个 Deep Link,一键跳回 App。

3.3. 解构“魔法”:从惊叹到复刻的逆向工程

NOTE

四步闭环: “记录-解剖-重构-沉淀”

当我们遇到一个让自己惊叹的产品(比如初次使用 ChatGPT或沉迷于 Vibe Coding)时,千万不要只停留在消费者的视角感叹“真好用”。那是“魔法”生效的时刻,也是你作为魔术师学徒拆解戏法的最佳时机。

若想将这种惊叹内化为自己的 Sense,我们需要执行一套完整的逆向工程循环:

(1)记录 (Record):捕捉情绪颗粒度

不要等回头再想,要在“惊叹”发生的当下,像捕捉蝴蝶一样捕捉你的情绪:

  • 截屏/录屏:记录下那个让你嘴角上扬或瞳孔放大的瞬间(Aha Moment)。
  • 微观情绪标注:问自己,“这一秒,为什么我觉得‘爽’?”是因为那个丝滑的转场动画,还是因为文案恰好击中了我的软肋,还是因为它的响应速度快得不可思议?
    • 案例:Linear 的官网之所以让人惊叹,不仅因为设计,更因为当你按 J / K 键时的毫秒级响应,这种“掌控感”是情绪的来源。

(2)解剖 (Peel):上帝视角的逻辑拆解

切换到产品经理的上帝视角,透过表皮看骨架。思考它做对了哪三件事:

  • 它满足了哪个层级的需求?是底层的生理/安全,还是顶层的自我实现/虚荣?它是帮你省了时间,还是帮你杀了时间?
  • 它极其大胆地“删减”了什么?伟大的产品往往由它不做什么来定义。TikTok 删减了用户“选择看什么”的权利,直接喂饭;Notion 早期删减了复杂的格式兼容,只保留 Block。
  • 它的核心增长飞轮是什么?它是如何让你忍不住想分享给别人的?是利用了你的炫耀欲,还是单纯的互利机制?

(3)重构 (Reconstruct):全栈视角的复刻推演

发挥全栈工程师的技术优势,在脑海中(或草稿纸上)尝试重建它。

  • 技术推演:为了实现这个丝滑体验,它的前端可能用了什么技术栈?后端是如何处理高并发的?如果你来做,你会怎么设计数据库 Schema?
  • 成本估算:它为了这个体验,付出了多大的工程代价?这个代价在商业上划算吗?

(4)沉淀 (Crystallize):输出倒逼内化

这是最关键、却最常被忽略的一步。没有输出的思考,就像没有 commit 的代码,随时会丢失。

  • 写一篇“产品验证报告”:不要只在脑子里想,要写下来。比如尝试写一篇《为什么 X 产品让我欲罢不能?》,强迫自己把模糊的感觉结构化为文字。

  • 发起一场“人机辩论” (Initiate a Human-AI Debate): 不要急着把观点发给同行,先让 AI 充当你的“红队”也就是“假想敌”。

    • 第一轮(AI 陪练):把自己的分析发给 GPT/Claude,并加上这句 Prompt:“如果你是这个产品的 CEO,请指出我分析中的漏洞,有哪些商业考量或技术限制是我没看到的?” AI 往往能从你忽略的历史背景、隐形成本或竞争格局角度给出惊人的补充。
    • 第二轮(真人验证):带着 AI 完善过的观点,再去社区或同行间交流。你会发现,你的洞察深度已经超越了 90% 的人,而真人的反馈则能补充 AI 无法触达的“隐秘行业潜规则”或“人性微妙之处”

4. 结语:从“如何实现”的焦虑中解放,拥抱“为何而做”的自由

在 AI 时代,代码生成的边际成本正在无限趋近于零。当“实现”不再是不可逾越的壁垒,“洞察”与“品位”便成了新的护城河。

未来的全栈工程师将不再是 [前端 + 后端],而是 [技术理解力 x 产品敏锐度]的化学反应:

  • 技术是我们的压舱石,让我们知晓可能性的边界,不至于在天马行空中失重;
  • 产品 Sense 是我们的罗盘,让在生成的洪流中锁定航向,不至于在低价值的代码堆里荒废时光。

产品 Sense 的终点从来不是“不做错的决定”——那是全知视角的奢望。它的终点是“拥有比别人更短的纠错半径”:在错误发生时,能以最低的成本感知并修正。

保持敏锐,保持饥饿,对“用户下一秒的皱眉”心存敬畏。因为算法无法计算“痛点”,而那个皱眉的瞬间,往往就是下一款好产品的起点。

',58)])])}const b=s(i,[["render",o]]);export{h as __pageData,b as default}; diff --git a/assets/product-sense_engineer-build-product-sense.md.C9qdnDdy.lean.js b/assets/product-sense_engineer-build-product-sense.md.BnO1b4Ek.lean.js similarity index 96% rename from assets/product-sense_engineer-build-product-sense.md.C9qdnDdy.lean.js rename to assets/product-sense_engineer-build-product-sense.md.BnO1b4Ek.lean.js index 3482937..45d0ccf 100644 --- a/assets/product-sense_engineer-build-product-sense.md.C9qdnDdy.lean.js +++ b/assets/product-sense_engineer-build-product-sense.md.BnO1b4Ek.lean.js @@ -1 +1 @@ -import{_ as s,c as t,o as n,d as m}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","frontmatter":{"date":"2025-10-23T16:05:50.000Z","title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","sticky":1,"top":true,"categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/engineer-build-product-sense"},"headers":[],"relativePath":"product-sense/engineer-build-product-sense.md","filePath":"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md"}'),i={name:"product-sense/engineer-build-product-sense.md"};function o(l,a,e,r,p,d){return n(),t("div",null,[...a[0]||(a[0]=[m("",58)])])}const b=s(i,[["render",o]]);export{h as __pageData,b as default}; +import{_ as s,c as t,o as n,d as m}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","frontmatter":{"date":"2025-10-23T16:05:50.000Z","title":"当“实现”不再是壁垒:工程师如何构建产品 Sense?","description":"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。","sticky":1,"top":true,"categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/engineer-build-product-sense"},"headers":[],"relativePath":"product-sense/engineer-build-product-sense.md","filePath":"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md"}'),i={name:"product-sense/engineer-build-product-sense.md"};function o(l,a,e,r,p,d){return n(),t("div",null,[...a[0]||(a[0]=[m("",58)])])}const b=s(i,[["render",o]]);export{h as __pageData,b as default}; diff --git a/assets/product-sense_insight-model.md.5jE_m_oK.js b/assets/product-sense_insight-model.md.DpyHnOA_.js similarity index 99% rename from assets/product-sense_insight-model.md.5jE_m_oK.js rename to assets/product-sense_insight-model.md.DpyHnOA_.js index f16fb74..c033d7d 100644 --- a/assets/product-sense_insight-model.md.5jE_m_oK.js +++ b/assets/product-sense_insight-model.md.DpyHnOA_.js @@ -1 +1 @@ -import{_ as a,c as r,o,d as s}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","frontmatter":{"date":"2025-11-14T16:00:00.000Z","title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","permalink":"/product-sense/insight-model","categories":["产品 Sense"],"tags":["产品 Sense","系统洞察力"]},"headers":[],"relativePath":"product-sense/insight-model.md","filePath":"10.产品 Sense/05.方法论/40.洞察力模型.md"}'),i={name:"product-sense/insight-model.md"};function n(e,t,p,l,g,c){return o(),r("div",null,[...t[0]||(t[0]=[s('

洞察力模型:如何看透产品与技术背后的系统逻辑?

摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。

1. 表象背后藏着决定一切的“系统黑盒”

我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。

系统黑盒

当系统运转正常时,我们可以遵循经验和规律按部就班地做事。可一旦系统出了问题,过往的经验往往会瞬间失效。如果我们无法破译表象背后的系统,就不可能知道问题到底出在哪一行“代码”上,更别提去修复它了。因此,所谓锻炼洞察力,本质上就是为了:理解“表象”背后的“系统”,从而在根源上解决问题。

2. 系统的核心:要素 * 连接关系

系统并不是一团乱麻,而是一组相互链接的要素,它是有公式可循:系统 = 要素 * 连接关系。举个经典的机械手表例子:表盘、表冠、几百个微小的齿轮和游丝,这些都是构成手表的“要素”。而这几百个零件是如何互相咬合、传递动力的,就是它们之间的“连接关系”。

放到工作中也是同理:做产品的要素是用户、功能、流量、运营;做团队的要素是成员、岗位、目标、资源。然而,绝大多数人虽然能轻松看清这些要素,却往往习惯性忽略它们之间的连接关系——而90%的问题根源,恰恰就藏在这些看不见的连接之中。

这也带来了洞察力新的定义:透过表象,不仅能看到系统的各个要素,更能看透要素之间错综复杂的连接关系。

在现实中,我们往往很容易一眼看到“要素”(比如一个团队里有几个人,一个页面上有几个按钮),却极其容易忽略“连接关系”(比如这几个人之间的利益与权责分配,按钮背后的数据流向)。然而,真正高阶的解决方案,往往就藏在那些看不见的连接关系里

想要练出这种能力,我们要拆解系统里的 5 个核心要点:变量、因果链、增强回路、调节回路、滞后效应。

  • 1 种要素:变量
  • 4 种连接关系:因果链、增强回路、调节回路、滞后效应
洞察力模型

3. 变量:系统里的“变化因子”

变量,顾名思义,是系统中会随着时间发生变化的要素。一旦我们将变量放进时间轴里观察,它就会呈现出两种截然不同的状态:存量与流量。

  • 存量:是某一特定时刻,系统中积累的变量总和。

  • 流量:是一段时间内,变量流入或流出的速率。

变量

存量是系统的“家底”,流量决定存量的增减。看懂变量的存量与流量,才能找准系统变化的源头,而不是只盯着存量结果干着急。

4. 因果链:搭建系统的骨架

用因果链连接变量,是训练洞察力的基本功。

如果说变量是独立的节点,那么将它们连接起来的线段就是“因果链”。因果链描述的是变量之间“增强”或“减弱”的关系。如果没有这些链条,再多的变量堆砌在一起,也只是一盘毫无生机的散沙,无法构成生生不息的系统。

因果链

行动小建议

  • 在日常复盘时,试着拿起两个看似相关的指标(比如“代码提测速度”和“线上故障率”),问问自己:它们之间是因增强果,还是因减弱果?
  • 看似简单的因果链,一段段咬合起来,最终就构成了复杂的商业或技术系统.

5. 增强回路:造就指数级增长

变量是节点,因果链是线段,但线段总有尽头,能量传到末端就结束了。如果我们能把结尾与开头也连接起来,形成一个闭环,会发生什么?于是回路诞生了。回路分为两种:增强回路与调节回路。

增强回路

不管是人生规划、产品迭代还是商业设计:小成功靠聪明才智,大成就靠建立正向的"增强回路"。所谓增强回路,就是两条或多条因果链首尾相连,形成的自我强化闭环:

  • 正向增强回路(因增强果,果又增强因):比如开源生态建设,你贡献的优质代码越多,吸引的用户就越多。用户越多,反馈和参与共建的开发者就越多,进而代码质量更高。长久以来,人们给这种现象起了无数霸气的名字“马太效应、赢家通吃、复利效应、指数级增长”

  • 负向增强回路(因减弱果,果又减弱因,即恶性循环):典型的就是“技术债”,为了赶进度写出烂代码,导致系统 Bug 频发。为了修 Bug 占用了新功能开发时间,时间不够又只能继续写烂代码……如此无限死循环。

6. 调节回路:让系统回归平衡

如果说增强回路的存在,是让这个世界走向极端;那么调节回路的存在,就是让这个世界回归平衡。凡是有“增强回路”的地方,七步之内,必然有“调节回路”。

调节回路

想象一家处于爆发期的小型科技公司:

  • 初期阶段:采用“无管理的管理”(不设层级、不设 KPI => 产品为王),依赖工程师文化和产品敏锐度,形成了“高效产出 -> 业务爆发”的增强回路。

  • 后期阶段:随着人员扩张,当初那套粗放模式失效了,跨部门沟通成本剧增,线上问题频发。此时,“产品为王”的增强回路,撞上了“管理复杂度”这条调节回路,导致业绩和研发效率徘徊不前。

遇到这种情况该怎么办?

答案是:切断“管理复杂度”这个“调节回路”,释放进一步增长的潜力。一旦你看懂了调节回路,你可能瞬间就顿悟了:很多时候,产品或个人的突破并不需要拼命猛踩油门,只要松开脚下的刹车就好了

增强回路,追求极端。调节回路,回归平衡。增强回路和调节回路这对孪生兄弟,性格迥然不同,但却共同构建了最美妙的世界万物。

7. 滞后效应:时间的迷雾

因果不是瞬间连接,回路也不是瞬间闭合,它们之间有个时间差,有滞后效应

在物理世界和现实系统中,因果并不是瞬间连接的,回路也不是瞬间闭合的,它们之间存在一个时间差,这时间差就是“滞后效应”。

滞后效应让原本在空间维度上就很复杂的系统,又增加了时间维度的复杂性。它会让原因和结果在时空上错位,极大地误导我们的判断力。就像洗澡时调水温,你觉得水冷,往热水方向拧了一点,没反应,于是你继续猛拧,结果几秒后直接被烫伤。

在试图洞察万事万物时,我们心里一定要装着一条“时间轴”。无论是发布一个新功能、重构一段底层代码,还是坚持写技术博客,效应的显现都需要时间。懂得等待,也是洞察力的一部分

8. 总结:从观察者到洞察者

当你下次在产品或代码中遇到棘手问题时,不妨在脑海里跑一遍这 5 个关键步骤(建议把它固化进你的思考框架中):

  • 找到核心存量

  • 找到关键因果链

  • 找到增强回路(你在踩油门吗?)

  • 找到调节回路(哪里有刹车?)

  • 考虑滞后效应(是不是子弹还要飞一会儿?)

看看系统到底卡在哪一个节点,你可以重构哪些连接关系?做到这些,才算真正拥有了“产品 Sense”的最高形态——系统洞察力。

普通人观察表象,优秀的人洞察系统,希望这套模型,能成为你升级认知操作系统的核心组件。

',48)])])}const m=a(i,[["render",n]]);export{h as __pageData,m as default}; +import{_ as a,c as r,o,d as s}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","frontmatter":{"date":"2025-11-14T16:00:00.000Z","title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","permalink":"/product-sense/insight-model","categories":["产品 Sense"],"tags":["产品 Sense","系统洞察力"]},"headers":[],"relativePath":"product-sense/insight-model.md","filePath":"10.产品 Sense/05.方法论/40.洞察力模型.md"}'),i={name:"product-sense/insight-model.md"};function n(e,t,p,l,g,c){return o(),r("div",null,[...t[0]||(t[0]=[s('

洞察力模型:如何看透产品与技术背后的系统逻辑?

摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。

1. 表象背后藏着决定一切的“系统黑盒”

我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。

系统黑盒

当系统运转正常时,我们可以遵循经验和规律按部就班地做事。可一旦系统出了问题,过往的经验往往会瞬间失效。如果我们无法破译表象背后的系统,就不可能知道问题到底出在哪一行“代码”上,更别提去修复它了。因此,所谓锻炼洞察力,本质上就是为了:理解“表象”背后的“系统”,从而在根源上解决问题。

2. 系统的核心:要素 * 连接关系

系统并不是一团乱麻,而是一组相互链接的要素,它是有公式可循:系统 = 要素 * 连接关系。举个经典的机械手表例子:表盘、表冠、几百个微小的齿轮和游丝,这些都是构成手表的“要素”。而这几百个零件是如何互相咬合、传递动力的,就是它们之间的“连接关系”。

放到工作中也是同理:做产品的要素是用户、功能、流量、运营;做团队的要素是成员、岗位、目标、资源。然而,绝大多数人虽然能轻松看清这些要素,却往往习惯性忽略它们之间的连接关系——而90%的问题根源,恰恰就藏在这些看不见的连接之中。

这也带来了洞察力新的定义:透过表象,不仅能看到系统的各个要素,更能看透要素之间错综复杂的连接关系。

在现实中,我们往往很容易一眼看到“要素”(比如一个团队里有几个人,一个页面上有几个按钮),却极其容易忽略“连接关系”(比如这几个人之间的利益与权责分配,按钮背后的数据流向)。然而,真正高阶的解决方案,往往就藏在那些看不见的连接关系里

想要练出这种能力,我们要拆解系统里的 5 个核心要点:变量、因果链、增强回路、调节回路、滞后效应。

  • 1 种要素:变量
  • 4 种连接关系:因果链、增强回路、调节回路、滞后效应
洞察力模型

3. 变量:系统里的“变化因子”

变量,顾名思义,是系统中会随着时间发生变化的要素。一旦我们将变量放进时间轴里观察,它就会呈现出两种截然不同的状态:存量与流量。

  • 存量:是某一特定时刻,系统中积累的变量总和。

  • 流量:是一段时间内,变量流入或流出的速率。

变量

存量是系统的“家底”,流量决定存量的增减。看懂变量的存量与流量,才能找准系统变化的源头,而不是只盯着存量结果干着急。

4. 因果链:搭建系统的骨架

用因果链连接变量,是训练洞察力的基本功。

如果说变量是独立的节点,那么将它们连接起来的线段就是“因果链”。因果链描述的是变量之间“增强”或“减弱”的关系。如果没有这些链条,再多的变量堆砌在一起,也只是一盘毫无生机的散沙,无法构成生生不息的系统。

因果链

行动小建议

  • 在日常复盘时,试着拿起两个看似相关的指标(比如“代码提测速度”和“线上故障率”),问问自己:它们之间是因增强果,还是因减弱果?
  • 看似简单的因果链,一段段咬合起来,最终就构成了复杂的商业或技术系统.

5. 增强回路:造就指数级增长

变量是节点,因果链是线段,但线段总有尽头,能量传到末端就结束了。如果我们能把结尾与开头也连接起来,形成一个闭环,会发生什么?于是回路诞生了。回路分为两种:增强回路与调节回路。

增强回路

不管是人生规划、产品迭代还是商业设计:小成功靠聪明才智,大成就靠建立正向的"增强回路"。所谓增强回路,就是两条或多条因果链首尾相连,形成的自我强化闭环:

  • 正向增强回路(因增强果,果又增强因):比如开源生态建设,你贡献的优质代码越多,吸引的用户就越多。用户越多,反馈和参与共建的开发者就越多,进而代码质量更高。长久以来,人们给这种现象起了无数霸气的名字“马太效应、赢家通吃、复利效应、指数级增长”

  • 负向增强回路(因减弱果,果又减弱因,即恶性循环):典型的就是“技术债”,为了赶进度写出烂代码,导致系统 Bug 频发。为了修 Bug 占用了新功能开发时间,时间不够又只能继续写烂代码……如此无限死循环。

6. 调节回路:让系统回归平衡

如果说增强回路的存在,是让这个世界走向极端;那么调节回路的存在,就是让这个世界回归平衡。凡是有“增强回路”的地方,七步之内,必然有“调节回路”。

调节回路

想象一家处于爆发期的小型科技公司:

  • 初期阶段:采用“无管理的管理”(不设层级、不设 KPI => 产品为王),依赖工程师文化和产品敏锐度,形成了“高效产出 -> 业务爆发”的增强回路。

  • 后期阶段:随着人员扩张,当初那套粗放模式失效了,跨部门沟通成本剧增,线上问题频发。此时,“产品为王”的增强回路,撞上了“管理复杂度”这条调节回路,导致业绩和研发效率徘徊不前。

遇到这种情况该怎么办?

答案是:切断“管理复杂度”这个“调节回路”,释放进一步增长的潜力。一旦你看懂了调节回路,你可能瞬间就顿悟了:很多时候,产品或个人的突破并不需要拼命猛踩油门,只要松开脚下的刹车就好了

增强回路,追求极端。调节回路,回归平衡。增强回路和调节回路这对孪生兄弟,性格迥然不同,但却共同构建了最美妙的世界万物。

7. 滞后效应:时间的迷雾

因果不是瞬间连接,回路也不是瞬间闭合,它们之间有个时间差,有滞后效应

在物理世界和现实系统中,因果并不是瞬间连接的,回路也不是瞬间闭合的,它们之间存在一个时间差,这时间差就是“滞后效应”。

滞后效应让原本在空间维度上就很复杂的系统,又增加了时间维度的复杂性。它会让原因和结果在时空上错位,极大地误导我们的判断力。就像洗澡时调水温,你觉得水冷,往热水方向拧了一点,没反应,于是你继续猛拧,结果几秒后直接被烫伤。

在试图洞察万事万物时,我们心里一定要装着一条“时间轴”。无论是发布一个新功能、重构一段底层代码,还是坚持写技术博客,效应的显现都需要时间。懂得等待,也是洞察力的一部分

8. 总结:从观察者到洞察者

当你下次在产品或代码中遇到棘手问题时,不妨在脑海里跑一遍这 5 个关键步骤(建议把它固化进你的思考框架中):

  • 找到核心存量

  • 找到关键因果链

  • 找到增强回路(你在踩油门吗?)

  • 找到调节回路(哪里有刹车?)

  • 考虑滞后效应(是不是子弹还要飞一会儿?)

看看系统到底卡在哪一个节点,你可以重构哪些连接关系?做到这些,才算真正拥有了“产品 Sense”的最高形态——系统洞察力。

普通人观察表象,优秀的人洞察系统,希望这套模型,能成为你升级认知操作系统的核心组件。

',48)])])}const m=a(i,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/product-sense_insight-model.md.5jE_m_oK.lean.js b/assets/product-sense_insight-model.md.DpyHnOA_.lean.js similarity index 96% rename from assets/product-sense_insight-model.md.5jE_m_oK.lean.js rename to assets/product-sense_insight-model.md.DpyHnOA_.lean.js index c7b7cab..b189dd9 100644 --- a/assets/product-sense_insight-model.md.5jE_m_oK.lean.js +++ b/assets/product-sense_insight-model.md.DpyHnOA_.lean.js @@ -1 +1 @@ -import{_ as a,c as r,o,d as s}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","frontmatter":{"date":"2025-11-14T16:00:00.000Z","title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","permalink":"/product-sense/insight-model","categories":["产品 Sense"],"tags":["产品 Sense","系统洞察力"]},"headers":[],"relativePath":"product-sense/insight-model.md","filePath":"10.产品 Sense/05.方法论/40.洞察力模型.md"}'),i={name:"product-sense/insight-model.md"};function n(e,t,p,l,g,c){return o(),r("div",null,[...t[0]||(t[0]=[s("",48)])])}const m=a(i,[["render",n]]);export{h as __pageData,m as default}; +import{_ as a,c as r,o,d as s}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","frontmatter":{"date":"2025-11-14T16:00:00.000Z","title":"洞察力模型:如何看透产品与技术背后的系统逻辑?","description":"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。","permalink":"/product-sense/insight-model","categories":["产品 Sense"],"tags":["产品 Sense","系统洞察力"]},"headers":[],"relativePath":"product-sense/insight-model.md","filePath":"10.产品 Sense/05.方法论/40.洞察力模型.md"}'),i={name:"product-sense/insight-model.md"};function n(e,t,p,l,g,c){return o(),r("div",null,[...t[0]||(t[0]=[s("",48)])])}const m=a(i,[["render",n]]);export{h as __pageData,m as default}; diff --git a/assets/product-sense_overview.md.CTq33ibi.lean.js b/assets/product-sense_overview.md.DCslZgFe.js similarity index 95% rename from assets/product-sense_overview.md.CTq33ibi.lean.js rename to assets/product-sense_overview.md.DCslZgFe.js index 721d459..4c69ad9 100644 --- a/assets/product-sense_overview.md.CTq33ibi.lean.js +++ b/assets/product-sense_overview.md.DCslZgFe.js @@ -1 +1 @@ -import{K as n,A as a}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as l}from"./chunks/Blockquote.acMDZFAD.js";import{F as c,C as d}from"./chunks/Callout.B-9wy57V.js";import{c as p,o as u,a as t,b as o,e as s,u as r}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const i=[{id:"product-observation",title:"产品观察与拆解分析",icon:"🔍",color:"#6366f1",articles:[{title:"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者",url:"/product-sense/perplexity-knowledge-worker",description:"从产品 Sense 与工程逻辑的双重视角,深入分析 Perplexity 如何重新定义搜索体验."}]},{id:"new-talents",title:"新 T 型人:AI 时代的复合型人才",icon:"🌟",color:"#8b5cf6",articles:[{title:"AI 原生时代的复合型人才,究竟需要怎样的特质?",url:"/product-sense/ai-native-composite-talents/",description:"一篇阅读 Paul Graham 深度长文后的思考,探寻 AI 时代下跨界能力的构建路径。"},{title:'当"实现"不再是壁垒:工程师如何构建 Product Sense?',url:"/product-sense/engineer-build-product-sense",description:"工程师视角下的产品思维构建指南——将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。"}]},{id:"product-creation",title:"产品创造与商业化",icon:"💡",color:"#f59e0b",articles:[{title:"放弃增长执念,为什么“小而美”才是可持续之路?",url:"/product-sense/small-rule-learn",description:"本文结合《小而美:持续盈利的经营法则》书中提出的一种不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。从自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考"},{title:"好书籍汇总与推荐",url:"/growth/books#_2-产品与商业",description:"系统整理了产品 Sense 与创造、商业化相关的必读书籍清单,便于开发者和产品经理学习和应用产品 Sense 的理论和实践。"}]},{id:"methodology",title:"方法论学习与总结:洞察力与经济学思维",icon:"📊",color:"#10b981",articles:[{title:"洞察力模型:如何看透产品与技术背后的系统逻辑?",url:"/product-sense/insight-model",description:"用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,建立透过现象看本质的思维框架,从根源上解决问题。"},{title:"用经济学思维做产品",url:"/product-sense/using-economics-thinking",description:"通过拆解日常生活中的经典案例,提炼成本收益、博弈均衡、有限理性、效率改进等核心经济学原理,并系统地将其应用到产品生命周期的核心环节——定义定位、定价策略、体验锁定及生态构建。"}]}],w=JSON.parse('{"title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/overview"},"headers":[],"relativePath":"product-sense/overview.md","filePath":"10.产品 Sense/00.学习与实践全景.md"}'),m={name:"product-sense/overview.md"},A=Object.assign(m,{setup(g){return(h,e)=>(u(),p("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[s("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),o(l,{variant:"insight",quote:"产品 Sense 的精髓在于用最小投入撬动最大价值,同时精准洞察人性。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"追求高杠杆"),s("——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"平衡感性与理性"),s("——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。")],-1)),o(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png",caption:"产品 Sense 核心能力模型"}),o(d,{type:"info",title:"产品 Sense 可训练",content:"在产品成功率不足 10% 的残酷市场中,产品 Sense 往往被误认为是某种不可复制的玄妙直觉。然而,它本质上是一套可拆解、可训练的思维模式:在信息不完整、资源受限的环境下,依然能精准判断做什么与不做什么,确保团队在投入开发前始终是在做对产品。"}),e[3]||(e[3]=t("h2",{id:"精选专题",tabindex:"-1"},[s("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),o(n,{categories:r(i),"root-label":"产品 Sense","show-articles":!1},null,8,["categories"]),o(a,{categories:r(i)},null,8,["categories"])]))}});export{w as __pageData,A as default}; +import{K as n,A as a}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as l}from"./chunks/Blockquote.B7nHhHWl.js";import{F as c,C as d}from"./chunks/Callout.Bss1uX1v.js";import{c as p,o as u,a as t,b as o,e as s,u as r}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const i=[{id:"product-observation",title:"产品观察与拆解分析",icon:"🔍",color:"#6366f1",articles:[{title:"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者",url:"/product-sense/perplexity-knowledge-worker",description:"从产品 Sense 与工程逻辑的双重视角,深入分析 Perplexity 如何重新定义搜索体验."}]},{id:"new-talents",title:"新 T 型人:AI 时代的复合型人才",icon:"🌟",color:"#8b5cf6",articles:[{title:"AI 原生时代的复合型人才,究竟需要怎样的特质?",url:"/product-sense/ai-native-composite-talents/",description:"一篇阅读 Paul Graham 深度长文后的思考,探寻 AI 时代下跨界能力的构建路径。"},{title:'当"实现"不再是壁垒:工程师如何构建 Product Sense?',url:"/product-sense/engineer-build-product-sense",description:"工程师视角下的产品思维构建指南——将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。"}]},{id:"product-creation",title:"产品创造与商业化",icon:"💡",color:"#f59e0b",articles:[{title:"放弃增长执念,为什么“小而美”才是可持续之路?",url:"/product-sense/small-rule-learn",description:"本文结合《小而美:持续盈利的经营法则》书中提出的一种不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。从自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考"},{title:"好书籍汇总与推荐",url:"/growth/books#_2-产品与商业",description:"系统整理了产品 Sense 与创造、商业化相关的必读书籍清单,便于开发者和产品经理学习和应用产品 Sense 的理论和实践。"}]},{id:"methodology",title:"方法论学习与总结:洞察力与经济学思维",icon:"📊",color:"#10b981",articles:[{title:"洞察力模型:如何看透产品与技术背后的系统逻辑?",url:"/product-sense/insight-model",description:"用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,建立透过现象看本质的思维框架,从根源上解决问题。"},{title:"用经济学思维做产品",url:"/product-sense/using-economics-thinking",description:"通过拆解日常生活中的经典案例,提炼成本收益、博弈均衡、有限理性、效率改进等核心经济学原理,并系统地将其应用到产品生命周期的核心环节——定义定位、定价策略、体验锁定及生态构建。"}]}],w=JSON.parse('{"title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/overview"},"headers":[],"relativePath":"product-sense/overview.md","filePath":"10.产品 Sense/00.学习与实践全景.md"}'),m={name:"product-sense/overview.md"},A=Object.assign(m,{setup(g){return(h,e)=>(u(),p("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[s("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),o(l,{variant:"insight",quote:"产品 Sense 的精髓在于用最小投入撬动最大价值,同时精准洞察人性。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"追求高杠杆"),s("——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"平衡感性与理性"),s("——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。")],-1)),o(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png",caption:"产品 Sense 核心能力模型"}),o(d,{type:"info",title:"产品 Sense 可训练",content:"在产品成功率不足 10% 的残酷市场中,产品 Sense 往往被误认为是某种不可复制的玄妙直觉。然而,它本质上是一套可拆解、可训练的思维模式:在信息不完整、资源受限的环境下,依然能精准判断做什么与不做什么,确保团队在投入开发前始终是在做对产品。"}),e[3]||(e[3]=t("h2",{id:"精选专题",tabindex:"-1"},[s("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),o(n,{categories:r(i),"root-label":"产品 Sense","show-articles":!1},null,8,["categories"]),o(a,{categories:r(i)},null,8,["categories"])]))}});export{w as __pageData,A as default}; diff --git a/assets/product-sense_overview.md.CTq33ibi.js b/assets/product-sense_overview.md.DCslZgFe.lean.js similarity index 95% rename from assets/product-sense_overview.md.CTq33ibi.js rename to assets/product-sense_overview.md.DCslZgFe.lean.js index 721d459..4c69ad9 100644 --- a/assets/product-sense_overview.md.CTq33ibi.js +++ b/assets/product-sense_overview.md.DCslZgFe.lean.js @@ -1 +1 @@ -import{K as n,A as a}from"./chunks/ArticleCardList.CkVrFXZK.js";import{B as l}from"./chunks/Blockquote.acMDZFAD.js";import{F as c,C as d}from"./chunks/Callout.B-9wy57V.js";import{c as p,o as u,a as t,b as o,e as s,u as r}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";/* empty css */const i=[{id:"product-observation",title:"产品观察与拆解分析",icon:"🔍",color:"#6366f1",articles:[{title:"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者",url:"/product-sense/perplexity-knowledge-worker",description:"从产品 Sense 与工程逻辑的双重视角,深入分析 Perplexity 如何重新定义搜索体验."}]},{id:"new-talents",title:"新 T 型人:AI 时代的复合型人才",icon:"🌟",color:"#8b5cf6",articles:[{title:"AI 原生时代的复合型人才,究竟需要怎样的特质?",url:"/product-sense/ai-native-composite-talents/",description:"一篇阅读 Paul Graham 深度长文后的思考,探寻 AI 时代下跨界能力的构建路径。"},{title:'当"实现"不再是壁垒:工程师如何构建 Product Sense?',url:"/product-sense/engineer-build-product-sense",description:"工程师视角下的产品思维构建指南——将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。"}]},{id:"product-creation",title:"产品创造与商业化",icon:"💡",color:"#f59e0b",articles:[{title:"放弃增长执念,为什么“小而美”才是可持续之路?",url:"/product-sense/small-rule-learn",description:"本文结合《小而美:持续盈利的经营法则》书中提出的一种不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。从自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考"},{title:"好书籍汇总与推荐",url:"/growth/books#_2-产品与商业",description:"系统整理了产品 Sense 与创造、商业化相关的必读书籍清单,便于开发者和产品经理学习和应用产品 Sense 的理论和实践。"}]},{id:"methodology",title:"方法论学习与总结:洞察力与经济学思维",icon:"📊",color:"#10b981",articles:[{title:"洞察力模型:如何看透产品与技术背后的系统逻辑?",url:"/product-sense/insight-model",description:"用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,建立透过现象看本质的思维框架,从根源上解决问题。"},{title:"用经济学思维做产品",url:"/product-sense/using-economics-thinking",description:"通过拆解日常生活中的经典案例,提炼成本收益、博弈均衡、有限理性、效率改进等核心经济学原理,并系统地将其应用到产品生命周期的核心环节——定义定位、定价策略、体验锁定及生态构建。"}]}],w=JSON.parse('{"title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/overview"},"headers":[],"relativePath":"product-sense/overview.md","filePath":"10.产品 Sense/00.学习与实践全景.md"}'),m={name:"product-sense/overview.md"},A=Object.assign(m,{setup(g){return(h,e)=>(u(),p("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[s("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),o(l,{variant:"insight",quote:"产品 Sense 的精髓在于用最小投入撬动最大价值,同时精准洞察人性。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"追求高杠杆"),s("——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"平衡感性与理性"),s("——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。")],-1)),o(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png",caption:"产品 Sense 核心能力模型"}),o(d,{type:"info",title:"产品 Sense 可训练",content:"在产品成功率不足 10% 的残酷市场中,产品 Sense 往往被误认为是某种不可复制的玄妙直觉。然而,它本质上是一套可拆解、可训练的思维模式:在信息不完整、资源受限的环境下,依然能精准判断做什么与不做什么,确保团队在投入开发前始终是在做对产品。"}),e[3]||(e[3]=t("h2",{id:"精选专题",tabindex:"-1"},[s("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),o(n,{categories:r(i),"root-label":"产品 Sense","show-articles":!1},null,8,["categories"]),o(a,{categories:r(i)},null,8,["categories"])]))}});export{w as __pageData,A as default}; +import{K as n,A as a}from"./chunks/ArticleCardList.0WObDkKh.js";import{B as l}from"./chunks/Blockquote.B7nHhHWl.js";import{F as c,C as d}from"./chunks/Callout.Bss1uX1v.js";import{c as p,o as u,a as t,b as o,e as s,u as r}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";/* empty css */const i=[{id:"product-observation",title:"产品观察与拆解分析",icon:"🔍",color:"#6366f1",articles:[{title:"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者",url:"/product-sense/perplexity-knowledge-worker",description:"从产品 Sense 与工程逻辑的双重视角,深入分析 Perplexity 如何重新定义搜索体验."}]},{id:"new-talents",title:"新 T 型人:AI 时代的复合型人才",icon:"🌟",color:"#8b5cf6",articles:[{title:"AI 原生时代的复合型人才,究竟需要怎样的特质?",url:"/product-sense/ai-native-composite-talents/",description:"一篇阅读 Paul Graham 深度长文后的思考,探寻 AI 时代下跨界能力的构建路径。"},{title:'当"实现"不再是壁垒:工程师如何构建 Product Sense?',url:"/product-sense/engineer-build-product-sense",description:"工程师视角下的产品思维构建指南——将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。"}]},{id:"product-creation",title:"产品创造与商业化",icon:"💡",color:"#f59e0b",articles:[{title:"放弃增长执念,为什么“小而美”才是可持续之路?",url:"/product-sense/small-rule-learn",description:"本文结合《小而美:持续盈利的经营法则》书中提出的一种不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。从自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考"},{title:"好书籍汇总与推荐",url:"/growth/books#_2-产品与商业",description:"系统整理了产品 Sense 与创造、商业化相关的必读书籍清单,便于开发者和产品经理学习和应用产品 Sense 的理论和实践。"}]},{id:"methodology",title:"方法论学习与总结:洞察力与经济学思维",icon:"📊",color:"#10b981",articles:[{title:"洞察力模型:如何看透产品与技术背后的系统逻辑?",url:"/product-sense/insight-model",description:"用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,建立透过现象看本质的思维框架,从根源上解决问题。"},{title:"用经济学思维做产品",url:"/product-sense/using-economics-thinking",description:"通过拆解日常生活中的经典案例,提炼成本收益、博弈均衡、有限理性、效率改进等核心经济学原理,并系统地将其应用到产品生命周期的核心环节——定义定位、定价策略、体验锁定及生态构建。"}]}],w=JSON.parse('{"title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","frontmatter":{"date":"2026-03-19T23:05:50.000Z","title":"全景一览","description":"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。","categories":["产品 Sense","AI"],"coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/overview"},"headers":[],"relativePath":"product-sense/overview.md","filePath":"10.产品 Sense/00.学习与实践全景.md"}'),m={name:"product-sense/overview.md"},A=Object.assign(m,{setup(g){return(h,e)=>(u(),p("div",null,[e[0]||(e[0]=t("h1",{id:"全景一览",tabindex:"-1"},[s("全景一览 "),t("a",{class:"header-anchor",href:"#全景一览","aria-label":"Permalink to “全景一览”"},"​")],-1)),o(l,{variant:"insight",quote:"产品 Sense 的精髓在于用最小投入撬动最大价值,同时精准洞察人性。"}),e[1]||(e[1]=t("p",null,[t("strong",null,"追求高杠杆"),s("——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;")],-1)),e[2]||(e[2]=t("p",null,[t("strong",null,"平衡感性与理性"),s("——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。")],-1)),o(c,{type:"image",content:"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png",caption:"产品 Sense 核心能力模型"}),o(d,{type:"info",title:"产品 Sense 可训练",content:"在产品成功率不足 10% 的残酷市场中,产品 Sense 往往被误认为是某种不可复制的玄妙直觉。然而,它本质上是一套可拆解、可训练的思维模式:在信息不完整、资源受限的环境下,依然能精准判断做什么与不做什么,确保团队在投入开发前始终是在做对产品。"}),e[3]||(e[3]=t("h2",{id:"精选专题",tabindex:"-1"},[s("精选专题 "),t("a",{class:"header-anchor",href:"#精选专题","aria-label":"Permalink to “精选专题”"},"​")],-1)),o(n,{categories:r(i),"root-label":"产品 Sense","show-articles":!1},null,8,["categories"]),o(a,{categories:r(i)},null,8,["categories"])]))}});export{w as __pageData,A as default}; diff --git a/assets/product-sense_perplexity-knowledge-worker.md.CkbI_a1F.js b/assets/product-sense_perplexity-knowledge-worker.md.CLR7T_Ls.js similarity index 99% rename from assets/product-sense_perplexity-knowledge-worker.md.CkbI_a1F.js rename to assets/product-sense_perplexity-knowledge-worker.md.CLR7T_Ls.js index da3946a..ec3bf94 100644 --- a/assets/product-sense_perplexity-knowledge-worker.md.CkbI_a1F.js +++ b/assets/product-sense_perplexity-knowledge-worker.md.CLR7T_Ls.js @@ -1 +1 @@ -import{_ as r,c as t,o as l,d as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","frontmatter":{"date":"2024-05-08T08:56:21.000Z","title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","permalink":"/product-sense/perplexity-knowledge-worker","categories":["产品 Sense"],"tags":["AI 搜索","知识发现","产品 Sense"]},"headers":[],"relativePath":"product-sense/perplexity-knowledge-worker.md","filePath":"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md"}'),o={name:"product-sense/perplexity-knowledge-worker.md"};function i(n,e,p,s,g,d){return l(),t("div",null,[...e[0]||(e[0]=[a('

AI-powered 搜索引擎观察分析:Perplexity 与知识工作者

摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。

1. 引言

在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。

对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。

本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。

2. 核心定位:从“链接导航”到“知识发现”

传统搜索引擎的本质是流量分发与链接导航,而 Perplexity 的第一性原理是直接提供具有事实支撑的答案

  • 学术级的严谨性:Perplexity 借鉴了学术论文的引用机制。它不仅提取相关网页段落,还要求大语言模型(LLM)在生成简明答案时,每一句话都必须带有准确的脚注来源。这种设计降低了知识工作者二次核查信息的成本

  • 非替代关系: Perplexity 与 Google 并非零和博弈。Google 擅长处理具有确定性 UI 需求的查询(如天气、股价、标准导航),而 Perplexity 则专注于解答需要跨信息源整合、总结的复杂问题

3. 产品交互重构:反直觉的 UI 创新

Perplexity 在交互设计上做出了几个违背传统搜索常理的决策:

  • 降级链接的视觉权重:在传统搜索中,10 条蓝色链接是绝对的主角。Perplexity 内部曾经历过激烈的争论,最终决定将核心位置让给“生成的答案”,哪怕早期模型偶尔会出现幻觉(Hallucination)。这种反其道而行之的勇气,确立了其作为“问答引擎”的心智

  • 将交互起点后置:传统搜索在用户点击链接后结束,而 Perplexity 认为,用户得到答案后,交互才刚刚开始。通过在底部提供“相关问题(People also ask)”,它充当了用户的思考辅助工具,帮助不擅长提问的用户将模糊的“好奇心”具象化为清晰的 Prompt。

  • 聚焦“魔力指标”: 相比于关注用户的停留时长,Perplexity 的核心指标是让用户感到满意的查询次数快速、准确、易读,是驱动知识工作者留存的唯一动力

4. 技术护城河:搜索是一项工程与模型的交响

很多人误以为 AI 搜索只是大模型的“套壳”,但实际上,做好搜索需要深厚的领域 Know-how 和极致的工程优化。

4.1 驯服幻觉(Hallucination)的四个维度

Perplexity 坚持比标准 RAG(检索增强生成)更严苛的原则:如果检索到的文档信息不足,系统必须直接拒绝回答,而不是任由模型编造。 减少幻觉需要从以下几个工程节点切入:

  • 检索质量:提升索引的新鲜度和全面性,避免提取过时或冲突的信息。

  • 上下文控制:避免一次性将海量文档全部丢给模型导致“注意力涣散”,精确控制摘录的颗粒度。

  • 模型理解力: 提升模型对深层语义的理解,确保其能从一堆相关度不高的文档中,精准识别出隐藏的正确答案。

4.2 极致的性能优化:追踪尾部延迟(Tail Latency)

知识工作者对效率极其敏感。Perplexity 在性能优化上借鉴了 Google 的理念,不仅看平均响应时间,更死磕 P90 和 P99 的尾部延迟。

  • 采用自研的 Sonar 模型(基于 Llama 3 结合 Post-training)。

  • LLM 层:在 LLM 层,核心关注首字生成时间(TTFT)和数据流式传输的吞吐量。

  • 通过与 NVIDIA 合作开发 TensorRT-LLM 框架,甚至深入内核级别编写代码,确保在最差的网络环境下也能实现极低的延迟。

5. 商业逻辑:你的利润率,就是我的机会

Google 拥有过去 50 年最伟大的商业模式——广告竞价。这不仅是其利润来源,也成了其在 AI 搜索转型时的历史包袱。对于 Google 而言,为每一个长尾查询生成 AI 答案的算力成本极高,且会破坏现有的高利润广告位。

Perplexity 巧妙地利用了这一点(正如 Amazon AWS 当年切入低利润率的云市场一样):

  • 放弃传统广告位:基于“答案”的产品形态天然排斥传统的插入式链接广告。

  • 订阅制先行:专注于打造可持续的订阅模式(如 Pro 档服务)。未来可能会借鉴 Netflix 的“订阅+广告”混合模式,在不牺牲答案真实性和用户体验的前提下探索商业化。

6. 未来演进:从被动响应到主动 Agent

搜索的终局不仅仅是回答问题,而是知识的生成与自主探索

  • Perplexity Pages:这是其迈向“知识发现引擎”的重要一步。用户的优质提问和搜索会话不仅对自己有价值,将其转化为结构化的文章发布,可以极大降低新知识创造的门槛,构建类似 AI 时代的维基百科。

  • 赋予 AI 好奇心:当前的 AI 仍是被动响应的。未来的想象空间在于,当推理成本进一步降低,AI Agent 可以带着“好奇心”在互联网上自主穿梭。用户只需抛出一个宏大的目标(如“分析某项新技术的 ROI 并生成研报”),AI 就能自行拆解问题、进行多轮搜索验证,最终带着提纯后的知识返回。

写在最后

Perplexity 的成功证明了,在巨头林立的赛道中,依然可以通过重新定义产品边界和极致的工程打磨撕开缺口。对于知识工作者而言,它不仅仅是一个搜索工具,更是一个能大幅降低信息噪音、提升信息处理转化率的“外脑”。

',29)])])}const c=r(o,[["render",i]]);export{h as __pageData,c as default}; +import{_ as r,c as t,o as l,d as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","frontmatter":{"date":"2024-05-08T08:56:21.000Z","title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","permalink":"/product-sense/perplexity-knowledge-worker","categories":["产品 Sense"],"tags":["AI 搜索","知识发现","产品 Sense"]},"headers":[],"relativePath":"product-sense/perplexity-knowledge-worker.md","filePath":"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md"}'),o={name:"product-sense/perplexity-knowledge-worker.md"};function i(n,e,p,s,g,d){return l(),t("div",null,[...e[0]||(e[0]=[a('

AI-powered 搜索引擎观察分析:Perplexity 与知识工作者

摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。

1. 引言

在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。

对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。

本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。

2. 核心定位:从“链接导航”到“知识发现”

传统搜索引擎的本质是流量分发与链接导航,而 Perplexity 的第一性原理是直接提供具有事实支撑的答案

  • 学术级的严谨性:Perplexity 借鉴了学术论文的引用机制。它不仅提取相关网页段落,还要求大语言模型(LLM)在生成简明答案时,每一句话都必须带有准确的脚注来源。这种设计降低了知识工作者二次核查信息的成本

  • 非替代关系: Perplexity 与 Google 并非零和博弈。Google 擅长处理具有确定性 UI 需求的查询(如天气、股价、标准导航),而 Perplexity 则专注于解答需要跨信息源整合、总结的复杂问题

3. 产品交互重构:反直觉的 UI 创新

Perplexity 在交互设计上做出了几个违背传统搜索常理的决策:

  • 降级链接的视觉权重:在传统搜索中,10 条蓝色链接是绝对的主角。Perplexity 内部曾经历过激烈的争论,最终决定将核心位置让给“生成的答案”,哪怕早期模型偶尔会出现幻觉(Hallucination)。这种反其道而行之的勇气,确立了其作为“问答引擎”的心智

  • 将交互起点后置:传统搜索在用户点击链接后结束,而 Perplexity 认为,用户得到答案后,交互才刚刚开始。通过在底部提供“相关问题(People also ask)”,它充当了用户的思考辅助工具,帮助不擅长提问的用户将模糊的“好奇心”具象化为清晰的 Prompt。

  • 聚焦“魔力指标”: 相比于关注用户的停留时长,Perplexity 的核心指标是让用户感到满意的查询次数快速、准确、易读,是驱动知识工作者留存的唯一动力

4. 技术护城河:搜索是一项工程与模型的交响

很多人误以为 AI 搜索只是大模型的“套壳”,但实际上,做好搜索需要深厚的领域 Know-how 和极致的工程优化。

4.1 驯服幻觉(Hallucination)的四个维度

Perplexity 坚持比标准 RAG(检索增强生成)更严苛的原则:如果检索到的文档信息不足,系统必须直接拒绝回答,而不是任由模型编造。 减少幻觉需要从以下几个工程节点切入:

  • 检索质量:提升索引的新鲜度和全面性,避免提取过时或冲突的信息。

  • 上下文控制:避免一次性将海量文档全部丢给模型导致“注意力涣散”,精确控制摘录的颗粒度。

  • 模型理解力: 提升模型对深层语义的理解,确保其能从一堆相关度不高的文档中,精准识别出隐藏的正确答案。

4.2 极致的性能优化:追踪尾部延迟(Tail Latency)

知识工作者对效率极其敏感。Perplexity 在性能优化上借鉴了 Google 的理念,不仅看平均响应时间,更死磕 P90 和 P99 的尾部延迟。

  • 采用自研的 Sonar 模型(基于 Llama 3 结合 Post-training)。

  • LLM 层:在 LLM 层,核心关注首字生成时间(TTFT)和数据流式传输的吞吐量。

  • 通过与 NVIDIA 合作开发 TensorRT-LLM 框架,甚至深入内核级别编写代码,确保在最差的网络环境下也能实现极低的延迟。

5. 商业逻辑:你的利润率,就是我的机会

Google 拥有过去 50 年最伟大的商业模式——广告竞价。这不仅是其利润来源,也成了其在 AI 搜索转型时的历史包袱。对于 Google 而言,为每一个长尾查询生成 AI 答案的算力成本极高,且会破坏现有的高利润广告位。

Perplexity 巧妙地利用了这一点(正如 Amazon AWS 当年切入低利润率的云市场一样):

  • 放弃传统广告位:基于“答案”的产品形态天然排斥传统的插入式链接广告。

  • 订阅制先行:专注于打造可持续的订阅模式(如 Pro 档服务)。未来可能会借鉴 Netflix 的“订阅+广告”混合模式,在不牺牲答案真实性和用户体验的前提下探索商业化。

6. 未来演进:从被动响应到主动 Agent

搜索的终局不仅仅是回答问题,而是知识的生成与自主探索

  • Perplexity Pages:这是其迈向“知识发现引擎”的重要一步。用户的优质提问和搜索会话不仅对自己有价值,将其转化为结构化的文章发布,可以极大降低新知识创造的门槛,构建类似 AI 时代的维基百科。

  • 赋予 AI 好奇心:当前的 AI 仍是被动响应的。未来的想象空间在于,当推理成本进一步降低,AI Agent 可以带着“好奇心”在互联网上自主穿梭。用户只需抛出一个宏大的目标(如“分析某项新技术的 ROI 并生成研报”),AI 就能自行拆解问题、进行多轮搜索验证,最终带着提纯后的知识返回。

写在最后

Perplexity 的成功证明了,在巨头林立的赛道中,依然可以通过重新定义产品边界和极致的工程打磨撕开缺口。对于知识工作者而言,它不仅仅是一个搜索工具,更是一个能大幅降低信息噪音、提升信息处理转化率的“外脑”。

',29)])])}const c=r(o,[["render",i]]);export{h as __pageData,c as default}; diff --git a/assets/product-sense_perplexity-knowledge-worker.md.CkbI_a1F.lean.js b/assets/product-sense_perplexity-knowledge-worker.md.CLR7T_Ls.lean.js similarity index 97% rename from assets/product-sense_perplexity-knowledge-worker.md.CkbI_a1F.lean.js rename to assets/product-sense_perplexity-knowledge-worker.md.CLR7T_Ls.lean.js index ecfddba..ceac724 100644 --- a/assets/product-sense_perplexity-knowledge-worker.md.CkbI_a1F.lean.js +++ b/assets/product-sense_perplexity-knowledge-worker.md.CLR7T_Ls.lean.js @@ -1 +1 @@ -import{_ as r,c as t,o as l,d as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const h=JSON.parse('{"title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","frontmatter":{"date":"2024-05-08T08:56:21.000Z","title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","permalink":"/product-sense/perplexity-knowledge-worker","categories":["产品 Sense"],"tags":["AI 搜索","知识发现","产品 Sense"]},"headers":[],"relativePath":"product-sense/perplexity-knowledge-worker.md","filePath":"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md"}'),o={name:"product-sense/perplexity-knowledge-worker.md"};function i(n,e,p,s,g,d){return l(),t("div",null,[...e[0]||(e[0]=[a("",29)])])}const c=r(o,[["render",i]]);export{h as __pageData,c as default}; +import{_ as r,c as t,o as l,d as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const h=JSON.parse('{"title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","frontmatter":{"date":"2024-05-08T08:56:21.000Z","title":"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者","description":"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。","permalink":"/product-sense/perplexity-knowledge-worker","categories":["产品 Sense"],"tags":["AI 搜索","知识发现","产品 Sense"]},"headers":[],"relativePath":"product-sense/perplexity-knowledge-worker.md","filePath":"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md"}'),o={name:"product-sense/perplexity-knowledge-worker.md"};function i(n,e,p,s,g,d){return l(),t("div",null,[...e[0]||(e[0]=[a("",29)])])}const c=r(o,[["render",i]]);export{h as __pageData,c as default}; diff --git a/assets/product-sense_small-rule-learn.md.Bmjz4sNa.js b/assets/product-sense_small-rule-learn.md.DxfkWbog.js similarity index 99% rename from assets/product-sense_small-rule-learn.md.Bmjz4sNa.js rename to assets/product-sense_small-rule-learn.md.DxfkWbog.js index ff7f31b..a184d8d 100644 --- a/assets/product-sense_small-rule-learn.md.Bmjz4sNa.js +++ b/assets/product-sense_small-rule-learn.md.DxfkWbog.js @@ -1 +1 @@ -import{_ as s,c as t,o as n,d as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","frontmatter":{"date":"2025-11-24T21:50:00.000Z","title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/small-rule-learn","categories":["产品 Sense"],"tags":["产品 Sense","商业化"]},"headers":[],"relativePath":"product-sense/small-rule-learn.md","filePath":"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md"}'),r={name:"product-sense/small-rule-learn.md"};function o(p,a,i,l,c,m){return n(),t("div",null,[...a[0]||(a[0]=[e('

放弃增长执念,为什么“小而美”才是可持续之路

摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。

书籍信息

书名:《小而美:持续盈利的经营法则》

作者:[美] 萨希尔·拉文吉亚

核心标签:极简创业|社区本位|持续盈利|创作者经济

一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。

更多书籍推荐信息可参考:产品 Sense 与商业化

1. 社区先行:从“我是谁”到“我能为谁解决问题”

传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 \\rightarrow 问题 \\rightarrow 流程 \\rightarrow 产品 \\rightarrow 商业

极简主义创业者绝不是在真空里写代码的人,他们首先是某个社区的深度参与者和“创作者”。在动手构建任何复杂的软件架构之前,第一步永远是把自己沉浸到特定的人群中。只有当我们花时间去倾听、去贡献价值、甚至通过公开写作和分享去教授他人时,那些真实而具体的高价值痛点才会自然浮现。

关系网社区参与

对于致力于通过技术提效的开发者而言,这一逻辑尤为深刻。当我们试图构建智能化的知识管理工具,或是研发将非结构化数据自动化转换为标准代码的基建体系时,切入点不应是盲目堆砌前沿技术栈,而应深挖特定圈层里的真实痛点。当我们成为社区中那个"总能用技术手段帮大家搞定繁琐工作"的可靠支柱时,第一批种子用户会自然诞生。因此,我们要学着先做一个乐于助人的创作者,创业不过是水到渠成之事。

2. 极简流转:用“克制”对抗“熵增”,用“自动化”替代“堆人力”

书中另一个贯穿始终的理念是"少即是多"。在找到真实需求后,极简主义创业者不会立刻规划一个包罗万象的大型系统,而是先用最原始、最人工的“流程”去跑通闭环

需要做的不分

唯有当用户为这个人工流程付费后,才开始进入“产品化”阶段。此时的核心策略是将重复性的工作外包或交给代码,让机器替代重复,让外包承接繁琐。身处当下的技术变革期,这一点显得尤为契合时宜。借助大语言模型等智能化工具的辅助,我们不仅可以极大地降低开发成本,更能将很多以往需要极高人力成本的环节直接交给自动化程序处理。

譬如,复杂的数据清洗、异常诊断与迭代优化,可委托给智能代理自主完成;日常的内容分发与用户服务,亦能通过技术手段实现无缝流转。无需奢华的办公场地,不必急于扩充团队规模,“雇佣软件而不是雇佣人力”,这种极度的克制不仅带来了极低的试错成本,更赋予了产品快速迭代、早早交付的敏捷性。

3. 盈利自信:做时间的朋友,而非资本的奴隶

书中提出了一个极具穿透力的概念——盈利自信

当一家企业赚的钱大于花的钱时,它就拥有了无限长的跑道。这就意味着,你不再需要为了迎合资本的审美而扭曲产品的初衷,也不需要在没有想清楚商业模式的时候就去烧钱买流量。这种自信,是坚守长期主义和价值创造的客观根基。

极简主义创业者瞄准的是前一百个愿意付费的真实客户,而不是成千上万个只索取不贡献的“僵尸粉”。他们把资金花在维护老客户和提升产品体验上,而不是虚无缥缈的广告创意上。当生存不再受制于人,我们就可以按照科学的节奏,安排好日常的专注时间,借助现代化的协同工具进行高效的异步沟通与知识沉淀,让企业的发展速度与个人的生活节奏达成一种健康的平衡。在笔者看来,这其实与全栈工程师们追求的代码高可用性与系统稳定性,在哲学层面是不谋而合的。

4. 建造你想住的房子:真实的营销与价值观契合

在营销与团队构建层面,拉文吉亚倡导“做最真实的自己”。营销不是为了制造博人眼球的头条新闻,而是通过“教学、激励、娱乐”三个层次,毫无保留地分享自己踩过的坑与获得的真知灼见,从而吸引气味相投的粉丝。这种公开构建的模式,本身就是一种极具穿透力的品牌资产。

同样的逻辑也适用于团队。企业是一栋你建造的、且需要自己住进去的房子。比起用虚高的薪水去挖人,不如尽早且频繁地公开自己的价值观和工作流。明确告诉世界:我们追求的是极简、是结果导向、是每个人都要像经营者一样主动思考并承担责任。适合永远是双向的,当你坚守这种透明和真实,自然会吸引到那些愿意通过项目互助协作、追求长期成长的优秀同路人

5. 总结与反思

《小而美》不仅仅是一本商业指南,更是一场关于工作与生活方式的哲学探讨。它提醒我们,技术的进步与工具的完善,已经让个体有机会摆脱庞大组织的束缚,以极低的成本去解决一个具体的社会问题

我们不必成为改变世界的庞然大物,只要能结合自身的优势,找准一个社区,用精湛的手艺和智能化的工具为他们扫除障碍,并在这个过程中保持盈利与内心的从容,这就已经是一次足够伟大的商业实践。小,绝不是格局的局限,而是克制、精准与持续繁荣的起点。

',23)])])}const d=s(r,[["render",o]]);export{g as __pageData,d as default}; +import{_ as s,c as t,o as n,d as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","frontmatter":{"date":"2025-11-24T21:50:00.000Z","title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/small-rule-learn","categories":["产品 Sense"],"tags":["产品 Sense","商业化"]},"headers":[],"relativePath":"product-sense/small-rule-learn.md","filePath":"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md"}'),r={name:"product-sense/small-rule-learn.md"};function o(p,a,i,l,c,m){return n(),t("div",null,[...a[0]||(a[0]=[e('

放弃增长执念,为什么“小而美”才是可持续之路

摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。

书籍信息

书名:《小而美:持续盈利的经营法则》

作者:[美] 萨希尔·拉文吉亚

核心标签:极简创业|社区本位|持续盈利|创作者经济

一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。

更多书籍推荐信息可参考:产品 Sense 与商业化

1. 社区先行:从“我是谁”到“我能为谁解决问题”

传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 \\rightarrow 问题 \\rightarrow 流程 \\rightarrow 产品 \\rightarrow 商业

极简主义创业者绝不是在真空里写代码的人,他们首先是某个社区的深度参与者和“创作者”。在动手构建任何复杂的软件架构之前,第一步永远是把自己沉浸到特定的人群中。只有当我们花时间去倾听、去贡献价值、甚至通过公开写作和分享去教授他人时,那些真实而具体的高价值痛点才会自然浮现。

关系网社区参与

对于致力于通过技术提效的开发者而言,这一逻辑尤为深刻。当我们试图构建智能化的知识管理工具,或是研发将非结构化数据自动化转换为标准代码的基建体系时,切入点不应是盲目堆砌前沿技术栈,而应深挖特定圈层里的真实痛点。当我们成为社区中那个"总能用技术手段帮大家搞定繁琐工作"的可靠支柱时,第一批种子用户会自然诞生。因此,我们要学着先做一个乐于助人的创作者,创业不过是水到渠成之事。

2. 极简流转:用“克制”对抗“熵增”,用“自动化”替代“堆人力”

书中另一个贯穿始终的理念是"少即是多"。在找到真实需求后,极简主义创业者不会立刻规划一个包罗万象的大型系统,而是先用最原始、最人工的“流程”去跑通闭环

需要做的不分

唯有当用户为这个人工流程付费后,才开始进入“产品化”阶段。此时的核心策略是将重复性的工作外包或交给代码,让机器替代重复,让外包承接繁琐。身处当下的技术变革期,这一点显得尤为契合时宜。借助大语言模型等智能化工具的辅助,我们不仅可以极大地降低开发成本,更能将很多以往需要极高人力成本的环节直接交给自动化程序处理。

譬如,复杂的数据清洗、异常诊断与迭代优化,可委托给智能代理自主完成;日常的内容分发与用户服务,亦能通过技术手段实现无缝流转。无需奢华的办公场地,不必急于扩充团队规模,“雇佣软件而不是雇佣人力”,这种极度的克制不仅带来了极低的试错成本,更赋予了产品快速迭代、早早交付的敏捷性。

3. 盈利自信:做时间的朋友,而非资本的奴隶

书中提出了一个极具穿透力的概念——盈利自信

当一家企业赚的钱大于花的钱时,它就拥有了无限长的跑道。这就意味着,你不再需要为了迎合资本的审美而扭曲产品的初衷,也不需要在没有想清楚商业模式的时候就去烧钱买流量。这种自信,是坚守长期主义和价值创造的客观根基。

极简主义创业者瞄准的是前一百个愿意付费的真实客户,而不是成千上万个只索取不贡献的“僵尸粉”。他们把资金花在维护老客户和提升产品体验上,而不是虚无缥缈的广告创意上。当生存不再受制于人,我们就可以按照科学的节奏,安排好日常的专注时间,借助现代化的协同工具进行高效的异步沟通与知识沉淀,让企业的发展速度与个人的生活节奏达成一种健康的平衡。在笔者看来,这其实与全栈工程师们追求的代码高可用性与系统稳定性,在哲学层面是不谋而合的。

4. 建造你想住的房子:真实的营销与价值观契合

在营销与团队构建层面,拉文吉亚倡导“做最真实的自己”。营销不是为了制造博人眼球的头条新闻,而是通过“教学、激励、娱乐”三个层次,毫无保留地分享自己踩过的坑与获得的真知灼见,从而吸引气味相投的粉丝。这种公开构建的模式,本身就是一种极具穿透力的品牌资产。

同样的逻辑也适用于团队。企业是一栋你建造的、且需要自己住进去的房子。比起用虚高的薪水去挖人,不如尽早且频繁地公开自己的价值观和工作流。明确告诉世界:我们追求的是极简、是结果导向、是每个人都要像经营者一样主动思考并承担责任。适合永远是双向的,当你坚守这种透明和真实,自然会吸引到那些愿意通过项目互助协作、追求长期成长的优秀同路人

5. 总结与反思

《小而美》不仅仅是一本商业指南,更是一场关于工作与生活方式的哲学探讨。它提醒我们,技术的进步与工具的完善,已经让个体有机会摆脱庞大组织的束缚,以极低的成本去解决一个具体的社会问题

我们不必成为改变世界的庞然大物,只要能结合自身的优势,找准一个社区,用精湛的手艺和智能化的工具为他们扫除障碍,并在这个过程中保持盈利与内心的从容,这就已经是一次足够伟大的商业实践。小,绝不是格局的局限,而是克制、精准与持续繁荣的起点。

',23)])])}const d=s(r,[["render",o]]);export{g as __pageData,d as default}; diff --git a/assets/product-sense_small-rule-learn.md.Bmjz4sNa.lean.js b/assets/product-sense_small-rule-learn.md.DxfkWbog.lean.js similarity index 97% rename from assets/product-sense_small-rule-learn.md.Bmjz4sNa.lean.js rename to assets/product-sense_small-rule-learn.md.DxfkWbog.lean.js index 8f43364..94878be 100644 --- a/assets/product-sense_small-rule-learn.md.Bmjz4sNa.lean.js +++ b/assets/product-sense_small-rule-learn.md.DxfkWbog.lean.js @@ -1 +1 @@ -import{_ as s,c as t,o as n,d as e}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const g=JSON.parse('{"title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","frontmatter":{"date":"2025-11-24T21:50:00.000Z","title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/small-rule-learn","categories":["产品 Sense"],"tags":["产品 Sense","商业化"]},"headers":[],"relativePath":"product-sense/small-rule-learn.md","filePath":"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md"}'),r={name:"product-sense/small-rule-learn.md"};function o(p,a,i,l,c,m){return n(),t("div",null,[...a[0]||(a[0]=[e("",23)])])}const d=s(r,[["render",o]]);export{g as __pageData,d as default}; +import{_ as s,c as t,o as n,d as e}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const g=JSON.parse('{"title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","frontmatter":{"date":"2025-11-24T21:50:00.000Z","title":"放弃增长执念,为什么“小而美”才是可持续之路","description":"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png","permalink":"/product-sense/small-rule-learn","categories":["产品 Sense"],"tags":["产品 Sense","商业化"]},"headers":[],"relativePath":"product-sense/small-rule-learn.md","filePath":"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md"}'),r={name:"product-sense/small-rule-learn.md"};function o(p,a,i,l,c,m){return n(),t("div",null,[...a[0]||(a[0]=[e("",23)])])}const d=s(r,[["render",o]]);export{g as __pageData,d as default}; diff --git a/assets/product-sense_using-economics-thinking.md.Dumcd-Lz.js b/assets/product-sense_using-economics-thinking.md.C0NzUwHT.js similarity index 99% rename from assets/product-sense_using-economics-thinking.md.Dumcd-Lz.js rename to assets/product-sense_using-economics-thinking.md.C0NzUwHT.js index 3a5fee6..b177379 100644 --- a/assets/product-sense_using-economics-thinking.md.Dumcd-Lz.js +++ b/assets/product-sense_using-economics-thinking.md.C0NzUwHT.js @@ -1 +1 @@ -import{_ as e,c as n,o as r,d as i}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","frontmatter":{"date":"2024-01-01T16:00:00.000Z","title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","categories":["产品 Sense"],"permalink":"/product-sense/using-economics-thinking"},"headers":[],"relativePath":"product-sense/using-economics-thinking.md","filePath":"10.产品 Sense/05.方法论/50.用经济学思维做产品.md"}'),t={name:"product-sense/using-economics-thinking.md"};function s(o,a,l,p,g,c){return r(),n("div",null,[...a[0]||(a[0]=[i('

用经济学思维做产品

摘要总结:经济学不仅是分析宏观数据的工具,更是洞察人性、优化资源配置、在约束条件下求最优解的思维方式。本文通过拆解日常生活中的经典案例,提炼成本收益、博弈均衡、有限理性、效率改进等核心经济学原理,并系统地将其应用到产品生命周期的核心环节——定义定位、定价策略、体验锁定及生态构建。最终,我们将这些原理沉淀为一套系统的、具有“经济直觉”的产品方法论,助力产品人完成从单纯的“体验设计师”向具备商业格局的“微观经济学家”跨越。

在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。

经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。

1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈

我们常被日常现象的“合理性”所迷惑,而经济学能帮我们拨开迷雾,看到冰山之下的成本收益权衡与竞争博弈。

1.1 容器的形状:方盒与圆瓶背后的成本战术

为什么牛奶通常装在方盒子里卖,而可乐却多装在圆瓶子里卖?用户提供的素材中,对使用习惯、包装物理属性(利乐纸易塑形,可乐高压圆柱均压)已有深刻见解。但深入思考,最核心的逻辑在于固定成本(Fixed Costs)与运营成本(Operating Costs)的权衡,以及资产特定性(Asset Specificity)

超市里的软饮料多放在便宜的开放式货架上,运营成本极低。而牛奶需要低温储存,冰柜不仅昂贵(固定成本),且常年运行(运营成本)极高。冰柜里的存储空间不仅是资源,更是稀缺的、昂贵资产。方形容器能最大化冰柜的空间利用率,降低每单位体积的存储成本。可乐不惜牺牲这一优势,选择更趁手的圆瓶,是因为其开放式货架策略将存储成本降到了极低,可以用体验优势(使用习惯)来抵消额外的存储空间成本。

这一案例启示:产品设计不仅是关乎前端的用户体验(使用习惯),更需要从后端运营链条出发,思考核心稀缺资源的配置效率。在冰柜这个“资产特定”场景下,方盒子就是帕累托改进。

1.2 可乐的三十年价格迷局:双头垄断下的博弈均衡

可乐好像一直没有涨价,这几乎成了都市传说。深度拆解,这正是经济学中双头垄断(Duopoly)下,尤其是Bertrand 竞争博弈的经典案例。

  • Bertrand 竞争(Bertrand Competition):假设两家公司生产同质化产品(如可口可乐和百事可乐),如果一家涨价,哪怕只涨一点点,精明的消费者就会全部流向另一家。为了维持市场份额,两家都不敢轻易涨价,最终价格趋向于接近零利润(或仅通过规模效应获得极低利润)的均衡状态。一旦形成博弈均衡,打破它需要巨大的替代成本和风险,例如涨价会被对方借低价抢占市场份额,且借助低利润将潜在进入者挡在门外。

  • 规模效应与锚定效应:可乐是典型的薄利多销产品,利润通过极致的规模化获得。同时,“肥宅快乐水”的高性价比已成为消费者心理中的一个强锚定(Anchoring Effect)。涨价不仅面临博弈风险,还可能瞬间激发消费者的损失厌恶心理,导致流失。

经济学启示:在竞争激烈的成熟市场(尤其是产品高度同质化时),不仅要看用户价值,更要看博弈对手的行动边界。定价往往是竞争博弈后的动态平衡,而非单方面的价值宣称。此外,锁定效应(Lock-in Effect)不仅能锁定用户,有时也能通过“原汁原味”的营销锁定自身品牌策略。

1.3 “来都来了”与沉没成本陷阱:有限理性的普遍胜利

“来都来了,逛遍景点再说”,“来都来了,看完这昏昏欲睡的电影”。这种将错就错的思维模式,是人性的弱点,也是有限理性(Bounded Rationality)的证明。

理性人假说认为人是绝对自私且理智的,始终寻求以最小代价获得最大收益,不感情用事。但在现实中,人们往往无法客观地从未来的成本收益出发做决策,而是被已经发生在过去的投入——沉没成本(Sunk Costs)——所束缚。

经济学启示:沉没成本描述的是已经发生且与当前决策无关的费用。正确决策应“往日之不可追,来日之尚可期”,专注于未来的增量成本和收益。但对产品人而言,我们不仅要避免自己掉入沉没成本陷阱,更要深入研究用户的沉没感,将其转化为替代成本(Switching Costs),例如构建用户的网络效应、数据积累和品牌忠诚。

1.4 帕累托优化与最优体验:在约束条件下求最优解

租房案例中,兼顾价格便宜和交通便利在“既定状态”下,任何改变都不可能使一人变好而又不使另一人变坏,这便是帕累托最优(Pareto Efficiency)状态。

在产品设计中,我们不可能无限增加功能(会导致复杂度提升和体验牺牲)、不能无限降低价格(会导致商业不可持续)。优秀的产品设计就是在无数个 Trade-off 之间寻找到帕累托效率点。例如,通过 A/B 测试寻找更优解,就是试图进行帕累托改进——找到一种既不伤害核心用户体验,又能提升商业变现或用户粘性的路径。

2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期

2.1 产品定义与定位:深入市场洞察与价值发现

  • 寻找有效需求,利用供求关系发现市场蓝海:不仅要进行用户访谈,更要通过数据分析了解客户的需求、痛点和期望。深入研究市场意味着寻找那些未被满足的有效需求——即不仅有欲望且具备支付能力的(不管是金钱、时间还是隐私数据)需求。只有真正了解市场和客户,才能定位产品的核心功能和价值。

  • 确定竞争壁垒,利用比较优势寻找产品核心竞争优势:分析竞争对手的产品、策略、市场份额,是为了找出自己的优势和不足。不仅能制定竞争策略,还能避免不必要的失误。我们应该追求做“只有你能做”或者“你做得最好”的事情,这就是产品的比较优势(Comparative Advantage)。

2.2 产品定价策略:最大化收益与捕获用户剩余

用户提供的定价点集中在价格歧视,我们将其深化和系统化,引入更多心理经济学。

  • 基于价值的定价 (Value-Based Pricing):不仅是根据供求,更是寻找价值创造的核心环节,制定有效的价格策略。在方寸之间,见天地,在细微之处,察人性。

  • 价格歧视 (Price Discrimination):促使用户转化和付费。

    • 二级价格歧视(版本化定价):通过推出免费版 vs 专业版、标准会员 vs VIP 会员,根据用户的自我选择(Willingness to Pay)来划分群体。

    • 三级价格歧视(群体化定价):对特定群体提供优惠,如学生优惠、特定地区优惠。

  • 价格心理学应用

    • 锚定效应 (Anchoring Effect):设置一个高价锚点(例如高额的年费),让中间价(例如月费)看起来更具性价比。

    • 诱饵效应 (Decoy Effect):提供一个不如意但价格相近的选项,让真正想卖的选项脱颖而出。

2.3 产品用户体验与留存:构建锁定效应与对抗边际效用递减

  • 利用沉没成本,利用沉没成本,利用替代成本构建锁定效应 (Lock-in Effect):通过引导用户在产品中积累数据(云盘)、网络关系(社交网络)、品牌忠诚(生态系统),将用户的沉没投入转化为极高的替代成本,从而吸引用户持续使用。

  • 利用边际效用递减,对抗边际效用递减增加用户活跃度。深度拆解发现:可以通过寻找帕累托改进空间,例如精细化精算法投放广告。更积极地,可以通过寻找非同质化体验、引入多阶梯奖励系统、持续迭代新功能来刺激用户,对抗边际效用递减(Diminishing Marginal Utility)带来的活跃度下降。

2.4 产品商业化与生态构建:追求帕累托改进与管理外部性

  • 商业化路径优化:追求帕累托改进与外部性管理:通过不断学习和实践,我们需要保持敏锐。深入研究广告、会员等商业化模式。理想的商业化优化是在不降低核心用户体验的前提下,增加新的价值或收入流(帕累托改进)。

  • 外部性管理:平台型产品(如广告平台)具有强交叉外部性(Externalities)。需要平衡广告商的外部收益(对用户的负外部性)与用户的外部收益(对广告商的正外部性)。推荐多阅读读物,深入了解外部性管理策略。

3. 总结:方法论提炼与职业修养——培养“经济直觉”

经济学思维做产品,不是让你成为数学家,而是让你成为一名具备“经济直觉”的产品人。

  • 深入研究市场与竞争对手:这是获取准确决策信息的前提。

  • 持续创新与改进:市场是不断变化的,技术方法在不断更新,保持敏感度,核心目标不仅是体验更好,更是商业模型更健康。

  • 培养经济直觉(Sense):需要理论学习和大量实践。观察生活、拆解产品(例如:为什么某些软件只允许你用一个设备,而有些允许三个?这也是一种资产特定性权衡),从微观和宏观角度预判趋势,做出准确决策。推荐一些不错读物。

  • 关注外部环境与政策法规:宏观经济日新月异,政策、法规、行业环境(例如:数据隐私法规对精细化广告的影响)时刻影响着产品的发展边界。推荐多读读物,及时了解相关变化。

  • 不断学习和实践:在不断实践中,只有学习和总结,才能保持竞争力。经济学思维能让我们更理智地分配资源、更精准地定价、更深刻地洞察人性,最终打造出既符合用户价值又具有商业可持续性的产品。

经济环境瞬息万变,技术方法迭代日新月异,但理性的微观经济学原理,始终是一盏指引方向的不灭灯塔。让我们从单纯的“体验设计师”向具备商业格局和深邃人性的“微观经济学家”跨越。

',35)])])}const _=e(t,[["render",s]]);export{d as __pageData,_ as default}; +import{_ as e,c as n,o as r,d as i}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","frontmatter":{"date":"2024-01-01T16:00:00.000Z","title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","categories":["产品 Sense"],"permalink":"/product-sense/using-economics-thinking"},"headers":[],"relativePath":"product-sense/using-economics-thinking.md","filePath":"10.产品 Sense/05.方法论/50.用经济学思维做产品.md"}'),t={name:"product-sense/using-economics-thinking.md"};function s(o,a,l,p,g,c){return r(),n("div",null,[...a[0]||(a[0]=[i('

用经济学思维做产品

摘要总结:经济学不仅是分析宏观数据的工具,更是洞察人性、优化资源配置、在约束条件下求最优解的思维方式。本文通过拆解日常生活中的经典案例,提炼成本收益、博弈均衡、有限理性、效率改进等核心经济学原理,并系统地将其应用到产品生命周期的核心环节——定义定位、定价策略、体验锁定及生态构建。最终,我们将这些原理沉淀为一套系统的、具有“经济直觉”的产品方法论,助力产品人完成从单纯的“体验设计师”向具备商业格局的“微观经济学家”跨越。

在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。

经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。

1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈

我们常被日常现象的“合理性”所迷惑,而经济学能帮我们拨开迷雾,看到冰山之下的成本收益权衡与竞争博弈。

1.1 容器的形状:方盒与圆瓶背后的成本战术

为什么牛奶通常装在方盒子里卖,而可乐却多装在圆瓶子里卖?用户提供的素材中,对使用习惯、包装物理属性(利乐纸易塑形,可乐高压圆柱均压)已有深刻见解。但深入思考,最核心的逻辑在于固定成本(Fixed Costs)与运营成本(Operating Costs)的权衡,以及资产特定性(Asset Specificity)

超市里的软饮料多放在便宜的开放式货架上,运营成本极低。而牛奶需要低温储存,冰柜不仅昂贵(固定成本),且常年运行(运营成本)极高。冰柜里的存储空间不仅是资源,更是稀缺的、昂贵资产。方形容器能最大化冰柜的空间利用率,降低每单位体积的存储成本。可乐不惜牺牲这一优势,选择更趁手的圆瓶,是因为其开放式货架策略将存储成本降到了极低,可以用体验优势(使用习惯)来抵消额外的存储空间成本。

这一案例启示:产品设计不仅是关乎前端的用户体验(使用习惯),更需要从后端运营链条出发,思考核心稀缺资源的配置效率。在冰柜这个“资产特定”场景下,方盒子就是帕累托改进。

1.2 可乐的三十年价格迷局:双头垄断下的博弈均衡

可乐好像一直没有涨价,这几乎成了都市传说。深度拆解,这正是经济学中双头垄断(Duopoly)下,尤其是Bertrand 竞争博弈的经典案例。

  • Bertrand 竞争(Bertrand Competition):假设两家公司生产同质化产品(如可口可乐和百事可乐),如果一家涨价,哪怕只涨一点点,精明的消费者就会全部流向另一家。为了维持市场份额,两家都不敢轻易涨价,最终价格趋向于接近零利润(或仅通过规模效应获得极低利润)的均衡状态。一旦形成博弈均衡,打破它需要巨大的替代成本和风险,例如涨价会被对方借低价抢占市场份额,且借助低利润将潜在进入者挡在门外。

  • 规模效应与锚定效应:可乐是典型的薄利多销产品,利润通过极致的规模化获得。同时,“肥宅快乐水”的高性价比已成为消费者心理中的一个强锚定(Anchoring Effect)。涨价不仅面临博弈风险,还可能瞬间激发消费者的损失厌恶心理,导致流失。

经济学启示:在竞争激烈的成熟市场(尤其是产品高度同质化时),不仅要看用户价值,更要看博弈对手的行动边界。定价往往是竞争博弈后的动态平衡,而非单方面的价值宣称。此外,锁定效应(Lock-in Effect)不仅能锁定用户,有时也能通过“原汁原味”的营销锁定自身品牌策略。

1.3 “来都来了”与沉没成本陷阱:有限理性的普遍胜利

“来都来了,逛遍景点再说”,“来都来了,看完这昏昏欲睡的电影”。这种将错就错的思维模式,是人性的弱点,也是有限理性(Bounded Rationality)的证明。

理性人假说认为人是绝对自私且理智的,始终寻求以最小代价获得最大收益,不感情用事。但在现实中,人们往往无法客观地从未来的成本收益出发做决策,而是被已经发生在过去的投入——沉没成本(Sunk Costs)——所束缚。

经济学启示:沉没成本描述的是已经发生且与当前决策无关的费用。正确决策应“往日之不可追,来日之尚可期”,专注于未来的增量成本和收益。但对产品人而言,我们不仅要避免自己掉入沉没成本陷阱,更要深入研究用户的沉没感,将其转化为替代成本(Switching Costs),例如构建用户的网络效应、数据积累和品牌忠诚。

1.4 帕累托优化与最优体验:在约束条件下求最优解

租房案例中,兼顾价格便宜和交通便利在“既定状态”下,任何改变都不可能使一人变好而又不使另一人变坏,这便是帕累托最优(Pareto Efficiency)状态。

在产品设计中,我们不可能无限增加功能(会导致复杂度提升和体验牺牲)、不能无限降低价格(会导致商业不可持续)。优秀的产品设计就是在无数个 Trade-off 之间寻找到帕累托效率点。例如,通过 A/B 测试寻找更优解,就是试图进行帕累托改进——找到一种既不伤害核心用户体验,又能提升商业变现或用户粘性的路径。

2. 系统化方法论——将经济学思维系统化地应用到产品全生命周期

2.1 产品定义与定位:深入市场洞察与价值发现

  • 寻找有效需求,利用供求关系发现市场蓝海:不仅要进行用户访谈,更要通过数据分析了解客户的需求、痛点和期望。深入研究市场意味着寻找那些未被满足的有效需求——即不仅有欲望且具备支付能力的(不管是金钱、时间还是隐私数据)需求。只有真正了解市场和客户,才能定位产品的核心功能和价值。

  • 确定竞争壁垒,利用比较优势寻找产品核心竞争优势:分析竞争对手的产品、策略、市场份额,是为了找出自己的优势和不足。不仅能制定竞争策略,还能避免不必要的失误。我们应该追求做“只有你能做”或者“你做得最好”的事情,这就是产品的比较优势(Comparative Advantage)。

2.2 产品定价策略:最大化收益与捕获用户剩余

用户提供的定价点集中在价格歧视,我们将其深化和系统化,引入更多心理经济学。

  • 基于价值的定价 (Value-Based Pricing):不仅是根据供求,更是寻找价值创造的核心环节,制定有效的价格策略。在方寸之间,见天地,在细微之处,察人性。

  • 价格歧视 (Price Discrimination):促使用户转化和付费。

    • 二级价格歧视(版本化定价):通过推出免费版 vs 专业版、标准会员 vs VIP 会员,根据用户的自我选择(Willingness to Pay)来划分群体。

    • 三级价格歧视(群体化定价):对特定群体提供优惠,如学生优惠、特定地区优惠。

  • 价格心理学应用

    • 锚定效应 (Anchoring Effect):设置一个高价锚点(例如高额的年费),让中间价(例如月费)看起来更具性价比。

    • 诱饵效应 (Decoy Effect):提供一个不如意但价格相近的选项,让真正想卖的选项脱颖而出。

2.3 产品用户体验与留存:构建锁定效应与对抗边际效用递减

  • 利用沉没成本,利用沉没成本,利用替代成本构建锁定效应 (Lock-in Effect):通过引导用户在产品中积累数据(云盘)、网络关系(社交网络)、品牌忠诚(生态系统),将用户的沉没投入转化为极高的替代成本,从而吸引用户持续使用。

  • 利用边际效用递减,对抗边际效用递减增加用户活跃度。深度拆解发现:可以通过寻找帕累托改进空间,例如精细化精算法投放广告。更积极地,可以通过寻找非同质化体验、引入多阶梯奖励系统、持续迭代新功能来刺激用户,对抗边际效用递减(Diminishing Marginal Utility)带来的活跃度下降。

2.4 产品商业化与生态构建:追求帕累托改进与管理外部性

  • 商业化路径优化:追求帕累托改进与外部性管理:通过不断学习和实践,我们需要保持敏锐。深入研究广告、会员等商业化模式。理想的商业化优化是在不降低核心用户体验的前提下,增加新的价值或收入流(帕累托改进)。

  • 外部性管理:平台型产品(如广告平台)具有强交叉外部性(Externalities)。需要平衡广告商的外部收益(对用户的负外部性)与用户的外部收益(对广告商的正外部性)。推荐多阅读读物,深入了解外部性管理策略。

3. 总结:方法论提炼与职业修养——培养“经济直觉”

经济学思维做产品,不是让你成为数学家,而是让你成为一名具备“经济直觉”的产品人。

  • 深入研究市场与竞争对手:这是获取准确决策信息的前提。

  • 持续创新与改进:市场是不断变化的,技术方法在不断更新,保持敏感度,核心目标不仅是体验更好,更是商业模型更健康。

  • 培养经济直觉(Sense):需要理论学习和大量实践。观察生活、拆解产品(例如:为什么某些软件只允许你用一个设备,而有些允许三个?这也是一种资产特定性权衡),从微观和宏观角度预判趋势,做出准确决策。推荐一些不错读物。

  • 关注外部环境与政策法规:宏观经济日新月异,政策、法规、行业环境(例如:数据隐私法规对精细化广告的影响)时刻影响着产品的发展边界。推荐多读读物,及时了解相关变化。

  • 不断学习和实践:在不断实践中,只有学习和总结,才能保持竞争力。经济学思维能让我们更理智地分配资源、更精准地定价、更深刻地洞察人性,最终打造出既符合用户价值又具有商业可持续性的产品。

经济环境瞬息万变,技术方法迭代日新月异,但理性的微观经济学原理,始终是一盏指引方向的不灭灯塔。让我们从单纯的“体验设计师”向具备商业格局和深邃人性的“微观经济学家”跨越。

',35)])])}const _=e(t,[["render",s]]);export{d as __pageData,_ as default}; diff --git a/assets/product-sense_using-economics-thinking.md.Dumcd-Lz.lean.js b/assets/product-sense_using-economics-thinking.md.C0NzUwHT.lean.js similarity index 93% rename from assets/product-sense_using-economics-thinking.md.Dumcd-Lz.lean.js rename to assets/product-sense_using-economics-thinking.md.C0NzUwHT.lean.js index 7dc9395..8e52d6c 100644 --- a/assets/product-sense_using-economics-thinking.md.Dumcd-Lz.lean.js +++ b/assets/product-sense_using-economics-thinking.md.C0NzUwHT.lean.js @@ -1 +1 @@ -import{_ as e,c as n,o as r,d as i}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const d=JSON.parse('{"title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","frontmatter":{"date":"2024-01-01T16:00:00.000Z","title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","categories":["产品 Sense"],"permalink":"/product-sense/using-economics-thinking"},"headers":[],"relativePath":"product-sense/using-economics-thinking.md","filePath":"10.产品 Sense/05.方法论/50.用经济学思维做产品.md"}'),t={name:"product-sense/using-economics-thinking.md"};function s(o,a,l,p,g,c){return r(),n("div",null,[...a[0]||(a[0]=[i("",35)])])}const _=e(t,[["render",s]]);export{d as __pageData,_ as default}; +import{_ as e,c as n,o as r,d as i}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const d=JSON.parse('{"title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","frontmatter":{"date":"2024-01-01T16:00:00.000Z","title":"用经济学思维做产品","description":"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。","categories":["产品 Sense"],"permalink":"/product-sense/using-economics-thinking"},"headers":[],"relativePath":"product-sense/using-economics-thinking.md","filePath":"10.产品 Sense/05.方法论/50.用经济学思维做产品.md"}'),t={name:"product-sense/using-economics-thinking.md"};function s(o,a,l,p,g,c){return r(),n("div",null,[...a[0]||(a[0]=[i("",35)])])}const _=e(t,[["render",s]]);export{d as __pageData,_ as default}; diff --git a/assets/tags.md.oL46vvD0.js b/assets/tags.md.B-0eiYZN.js similarity index 70% rename from assets/tags.md.oL46vvD0.js rename to assets/tags.md.B-0eiYZN.js index 5d825f8..507b660 100644 --- a/assets/tags.md.oL46vvD0.js +++ b/assets/tags.md.B-0eiYZN.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"标签","description":"","frontmatter":{"title":"标签","permalink":"/tags","tagsPage":true,"article":false,"layout":"home"},"headers":[],"relativePath":"tags.md","filePath":"@pages/tagsPage.md"}'),s={name:"tags.md"};function r(o,c,n,i,p,l){return a(),t("div")}const _=e(s,[["render",r]]);export{m as __pageData,_ as default}; +import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"标签","description":"","frontmatter":{"title":"标签","permalink":"/tags","tagsPage":true,"article":false,"layout":"home"},"headers":[],"relativePath":"tags.md","filePath":"@pages/tagsPage.md"}'),s={name:"tags.md"};function r(o,c,n,i,p,l){return a(),t("div")}const _=e(s,[["render",r]]);export{m as __pageData,_ as default}; diff --git a/assets/tags.md.oL46vvD0.lean.js b/assets/tags.md.B-0eiYZN.lean.js similarity index 70% rename from assets/tags.md.oL46vvD0.lean.js rename to assets/tags.md.B-0eiYZN.lean.js index 5d825f8..507b660 100644 --- a/assets/tags.md.oL46vvD0.lean.js +++ b/assets/tags.md.B-0eiYZN.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.CUuTa6hm.js";const m=JSON.parse('{"title":"标签","description":"","frontmatter":{"title":"标签","permalink":"/tags","tagsPage":true,"article":false,"layout":"home"},"headers":[],"relativePath":"tags.md","filePath":"@pages/tagsPage.md"}'),s={name:"tags.md"};function r(o,c,n,i,p,l){return a(),t("div")}const _=e(s,[["render",r]]);export{m as __pageData,_ as default}; +import{_ as e,c as t,o as a}from"./chunks/vitepress-theme-teek.Dg-9NfO3.js";const m=JSON.parse('{"title":"标签","description":"","frontmatter":{"title":"标签","permalink":"/tags","tagsPage":true,"article":false,"layout":"home"},"headers":[],"relativePath":"tags.md","filePath":"@pages/tagsPage.md"}'),s={name:"tags.md"};function r(o,c,n,i,p,l){return a(),t("div")}const _=e(s,[["render",r]]);export{m as __pageData,_ as default}; diff --git a/categories.html b/categories.html index c64822e..b593f8b 100644 --- a/categories.html +++ b/categories.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/css-engineering.html b/fullstack/css-engineering.html index f6adfb5..e8ad2fe 100644 --- a/fullstack/css-engineering.html +++ b/fullstack/css-engineering.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/decode-es-modules.html b/fullstack/decode-es-modules.html index 858d966..783145c 100644 --- a/fullstack/decode-es-modules.html +++ b/fullstack/decode-es-modules.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/different-module-programming-specifications.html b/fullstack/different-module-programming-specifications.html index b062674..4b41739 100644 --- a/fullstack/different-module-programming-specifications.html +++ b/fullstack/different-module-programming-specifications.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/frontend-module-programming-basic.html b/fullstack/frontend-module-programming-basic.html index cc162fa..d9c6a14 100644 --- a/fullstack/frontend-module-programming-basic.html +++ b/fullstack/frontend-module-programming-basic.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/frontend-rendering-scheme.html b/fullstack/frontend-rendering-scheme.html index 34b8a28..84977dc 100644 --- a/fullstack/frontend-rendering-scheme.html +++ b/fullstack/frontend-rendering-scheme.html @@ -8,12 +8,12 @@ - - - - - - + + + + + + diff --git a/fullstack/full-stack-resources.html b/fullstack/full-stack-resources.html index 00028f8..2a0a106 100644 --- a/fullstack/full-stack-resources.html +++ b/fullstack/full-stack-resources.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/jamstack.html b/fullstack/jamstack.html index 1a9d7da..00c5d40 100644 --- a/fullstack/jamstack.html +++ b/fullstack/jamstack.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/module-programming-practice-guide.html b/fullstack/module-programming-practice-guide.html index 4f429d4..9907d4b 100644 --- a/fullstack/module-programming-practice-guide.html +++ b/fullstack/module-programming-practice-guide.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/module-programming-principles-best-practices.html b/fullstack/module-programming-principles-best-practices.html index dad6084..07900d6 100644 --- a/fullstack/module-programming-principles-best-practices.html +++ b/fullstack/module-programming-principles-best-practices.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/networking-polling-optimization.html b/fullstack/networking-polling-optimization.html index ffd0bfe..f5a6829 100644 --- a/fullstack/networking-polling-optimization.html +++ b/fullstack/networking-polling-optimization.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/networking-protocol-selection-guide.html b/fullstack/networking-protocol-selection-guide.html index dee7084..d83dbe5 100644 --- a/fullstack/networking-protocol-selection-guide.html +++ b/fullstack/networking-protocol-selection-guide.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/networking-sse-practice.html b/fullstack/networking-sse-practice.html index e986a77..38e5345 100644 --- a/fullstack/networking-sse-practice.html +++ b/fullstack/networking-sse-practice.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/fullstack/next-deep-dive.html b/fullstack/next-deep-dive.html index 343def3..6bc0c69 100644 --- a/fullstack/next-deep-dive.html +++ b/fullstack/next-deep-dive.html @@ -8,14 +8,14 @@ - - - - - - - - + + + + + + + + diff --git a/fullstack/nodejs-module-programming-summary.html b/fullstack/nodejs-module-programming-summary.html index adcaa8b..a8442e3 100644 --- a/fullstack/nodejs-module-programming-summary.html +++ b/fullstack/nodejs-module-programming-summary.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/occams-razor-software-design.html b/fullstack/occams-razor-software-design.html index 7ebd193..6f38f86 100644 --- a/fullstack/occams-razor-software-design.html +++ b/fullstack/occams-razor-software-design.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/fullstack/overview.html b/fullstack/overview.html index 6d82c7f..8fbcd9b 100644 --- a/fullstack/overview.html +++ b/fullstack/overview.html @@ -8,13 +8,13 @@ - - - - - - - + + + + + + + diff --git a/fullstack/react-design-philosophy-ai-augmented.html b/fullstack/react-design-philosophy-ai-augmented.html index b4d534c..cc6677d 100644 --- a/fullstack/react-design-philosophy-ai-augmented.html +++ b/fullstack/react-design-philosophy-ai-augmented.html @@ -8,11 +8,11 @@ - - - - - + + + + + diff --git a/fullstack/server-state-management.html b/fullstack/server-state-management.html index 26bcede..03ca236 100644 --- a/fullstack/server-state-management.html +++ b/fullstack/server-state-management.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/typescript-compilation-debugging-guide.html b/fullstack/typescript-compilation-debugging-guide.html index 69884c0..6c13f71 100644 --- a/fullstack/typescript-compilation-debugging-guide.html +++ b/fullstack/typescript-compilation-debugging-guide.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/typescript-generic-types.html b/fullstack/typescript-generic-types.html index a8a4507..efb7c0f 100644 --- a/fullstack/typescript-generic-types.html +++ b/fullstack/typescript-generic-types.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/typescript-module-programming-enhancement.html b/fullstack/typescript-module-programming-enhancement.html index bb56517..ff95fed 100644 --- a/fullstack/typescript-module-programming-enhancement.html +++ b/fullstack/typescript-module-programming-enhancement.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/fullstack/union-types-vs-intersection-types.html b/fullstack/union-types-vs-intersection-types.html index 94445ab..5e0f5ba 100644 --- a/fullstack/union-types-vs-intersection-types.html +++ b/fullstack/union-types-vs-intersection-types.html @@ -8,13 +8,13 @@ - - - - - - - + + + + + + + diff --git a/growth/books.html b/growth/books.html index b883c2f..835d8c0 100644 --- a/growth/books.html +++ b/growth/books.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/growth/distinguish-useful-information.html b/growth/distinguish-useful-information.html index 9b9b06a..dbdf1e9 100644 --- a/growth/distinguish-useful-information.html +++ b/growth/distinguish-useful-information.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/growth/reading-tips.html b/growth/reading-tips.html index b90ae3e..279989a 100644 --- a/growth/reading-tips.html +++ b/growth/reading-tips.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/hashmap.json b/hashmap.json index 50813db..22707ca 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"about_growth_inner-experience.md":"Bv6irQCt","about_growth_outer-experience.md":"H37qqbXv","about_growth_weight-loss.md":"CJOxYo7l","about_me.md":"-7r9zfxP","ai-coding_ai-change-work-workflow.md":"Cf1dGJ-F","ai-coding_ai-engineer-capability.md":"Dm2zRND9","ai-coding_ai-native.md":"COrigMZ-","ai-coding_claude-code-deep-dive.md":"DTTIPzhz","ai-coding_overview.md":"CDUVxDM3","ai-coding_resources.md":"nk3hBjmO","ai_agent_claude-agent-sdk-basic-build.md":"CgSYkaoQ","ai_agent_composition-ai-components.md":"C4n6A38j","ai_agent_deepresearch-agent.md":"D1VHqJFV","ai_agent_math-bot.md":"Dcxg40jZ","ai_agent_overview.md":"CBny6Kqh","ai_agent_planning-module.md":"CDlvBNcn","ai_agent_poetry-bot.md":"BJeZitt5","ai_agent_skills-practice-summary.md":"CYdSmJnx","ai_full-stack-builder.md":"BGzdsC-3","ai_llm-api-resources.md":"D_6BiDYj","ai_overview.md":"CRjjlPMp","ai_tools-assistant.md":"a4OzjAJ7","categories.md":"CnMuA3JG","fullstack_css-engineering.md":"BtxwP6p5","fullstack_decode-es-modules.md":"pgLSwKoE","fullstack_different-module-programming-specifications.md":"B-OI3QLK","fullstack_frontend-module-programming-basic.md":"C-EsOJPG","fullstack_frontend-rendering-scheme.md":"B1Gs9imT","fullstack_full-stack-resources.md":"PB3ApNm8","fullstack_jamstack.md":"DsAC5gK_","fullstack_module-programming-practice-guide.md":"BvZSNC5t","fullstack_module-programming-principles-best-practices.md":"CkS1Ktf9","fullstack_networking-polling-optimization.md":"Co1K2del","fullstack_networking-protocol-selection-guide.md":"C5frLLOO","fullstack_networking-sse-practice.md":"CYa-7UGx","fullstack_next-deep-dive.md":"DSAxqYkS","fullstack_nodejs-module-programming-summary.md":"D0U-fUQ0","fullstack_occams-razor-software-design.md":"Dsd2tAmK","fullstack_overview.md":"D2Ez6OwG","fullstack_react-design-philosophy-ai-augmented.md":"nIC-WImG","fullstack_server-state-management.md":"CKwBMh6y","fullstack_typescript-compilation-debugging-guide.md":"B3OD2eiY","fullstack_typescript-generic-types.md":"k0YxICZf","fullstack_typescript-module-programming-enhancement.md":"C7m0wq6p","fullstack_union-types-vs-intersection-types.md":"hM79y4nW","growth_books.md":"DxXz1I-x","growth_distinguish-useful-information.md":"2KhRCOyW","growth_reading-tips.md":"BGZRgwwj","index.md":"BX5o6LIJ","insight-labs_ai-insight-engine.md":"CSelYfUb","insight-labs_overview.md":"CUk-HLJa","insight-labs_repo-insight_amis.md":"BPSKFzw2","insight-labs_repo-insight_echarts.md":"Dx4twj-H","insight-labs_repo-insight_fetch-event-source.md":"_gmxs2BH","insight-labs_repo-insight_konva.md":"hYUpqOCZ","insight-labs_repo-insight_lottie-web.md":"DVvuwA83","insight-labs_repo-insight_open-cli.md":"eC85uCpN","insight-labs_repo-insight_overview.md":"BJ9OMyYd","insight-labs_repo-insight_superpowers.md":"CU-2mqwr","insight-labs_repo-insight_three-js.md":"EPr9hTuq","insight-labs_repo-insight_vercel-ai-sdk.md":"BJMsUPUS","product-sense_ai-native-composite-talents.md":"DRkRl5Gi","product-sense_engineer-build-product-sense.md":"C9qdnDdy","product-sense_insight-model.md":"5jE_m_oK","product-sense_overview.md":"CTq33ibi","product-sense_perplexity-knowledge-worker.md":"CkbI_a1F","product-sense_small-rule-learn.md":"Bmjz4sNa","product-sense_using-economics-thinking.md":"Dumcd-Lz","tags.md":"oL46vvD0"} +{"about_growth_inner-experience.md":"BISUXRTm","about_growth_outer-experience.md":"DniEKTlV","about_growth_weight-loss.md":"n7uAYRkF","about_me.md":"BZPZvAJ3","ai-coding_ai-change-work-workflow.md":"Dfds8zzd","ai-coding_ai-engineer-capability.md":"DZPwC1tg","ai-coding_ai-native.md":"CGQ4u-7o","ai-coding_claude-code-deep-dive.md":"TnvtJZZ3","ai-coding_overview.md":"72rTeUxR","ai-coding_resources.md":"BEyzO6Q5","ai_agent_claude-agent-sdk-basic-build.md":"DyF6SguD","ai_agent_composition-ai-components.md":"D63rfIxj","ai_agent_deepresearch-agent.md":"BN6_LZWf","ai_agent_math-bot.md":"BXhAqWyU","ai_agent_overview.md":"BZYkese5","ai_agent_planning-module.md":"CTDZNcds","ai_agent_poetry-bot.md":"Djc9_lGV","ai_agent_skills-practice-summary.md":"CsJjSRg1","ai_full-stack-builder.md":"CtpFpp0a","ai_llm-api-resources.md":"W2VuMWN0","ai_overview.md":"DWoy5IjF","ai_tools-assistant.md":"r9bHqTO_","categories.md":"CVTxAp5y","fullstack_css-engineering.md":"BlaebeRp","fullstack_decode-es-modules.md":"CdNqd_Yi","fullstack_different-module-programming-specifications.md":"C4s6GPsc","fullstack_frontend-module-programming-basic.md":"BASiLfEG","fullstack_frontend-rendering-scheme.md":"DbEMkvmS","fullstack_full-stack-resources.md":"B8aCWi5d","fullstack_jamstack.md":"5AOhPkSE","fullstack_module-programming-practice-guide.md":"GX-fmZot","fullstack_module-programming-principles-best-practices.md":"Kt0aczUY","fullstack_networking-polling-optimization.md":"CsfHVMMa","fullstack_networking-protocol-selection-guide.md":"M0GzKHtc","fullstack_networking-sse-practice.md":"BrfbBg9x","fullstack_next-deep-dive.md":"G2zDSoIv","fullstack_nodejs-module-programming-summary.md":"ChyZglwn","fullstack_occams-razor-software-design.md":"BxaCCGSA","fullstack_overview.md":"D8h6Ek2v","fullstack_react-design-philosophy-ai-augmented.md":"B47j5XxZ","fullstack_server-state-management.md":"BbD9tD6W","fullstack_typescript-compilation-debugging-guide.md":"g10WDisT","fullstack_typescript-generic-types.md":"AQyoKeOl","fullstack_typescript-module-programming-enhancement.md":"B6VJ067B","fullstack_union-types-vs-intersection-types.md":"CeKTWuwd","growth_books.md":"DON7D586","growth_distinguish-useful-information.md":"Bk0b5058","growth_reading-tips.md":"DvPd5P4v","index.md":"6JFvWEIq","insight-labs_ai-insight-engine.md":"FNPXwM48","insight-labs_overview.md":"DQWu6elD","insight-labs_repo-insight_a2ui.md":"Dgw3F5ap","insight-labs_repo-insight_amis.md":"CM72pf5M","insight-labs_repo-insight_anime.md":"GRpRGyDu","insight-labs_repo-insight_echarts.md":"TPWYiRaL","insight-labs_repo-insight_fetch-event-source.md":"DAv6uGU5","insight-labs_repo-insight_konva.md":"j78KHmOK","insight-labs_repo-insight_lottie-web.md":"D3b_s-CU","insight-labs_repo-insight_open-cli.md":"BUMPTS97","insight-labs_repo-insight_overview.md":"BodPHsDF","insight-labs_repo-insight_pretext.md":"-L6NQ6rn","insight-labs_repo-insight_superpowers.md":"jHsaGjp1","insight-labs_repo-insight_three-js.md":"CXlVZ59K","insight-labs_repo-insight_vercel-ai-sdk.md":"B5LIrYqb","product-sense_ai-native-composite-talents.md":"BhamxEDf","product-sense_engineer-build-product-sense.md":"BnO1b4Ek","product-sense_insight-model.md":"DpyHnOA_","product-sense_overview.md":"DCslZgFe","product-sense_perplexity-knowledge-worker.md":"CLR7T_Ls","product-sense_small-rule-learn.md":"DxfkWbog","product-sense_using-economics-thinking.md":"C0NzUwHT","tags.md":"B-0eiYZN"} diff --git a/index.html b/index.html index 8b83b33..d4e9792 100644 --- a/index.html +++ b/index.html @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/insight-labs/ai-insight-engine.html b/insight-labs/ai-insight-engine.html index 1a976bd..7539427 100644 --- a/insight-labs/ai-insight-engine.html +++ b/insight-labs/ai-insight-engine.html @@ -8,15 +8,15 @@ - - - - - - - - - + + + + + + + + + @@ -120,7 +120,7 @@ d="m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36z" > -
+ + +
8691
+ + + + 36.7m

A2UI 开源项目解读

项目信息

  • 项目名称:A2UI

  • 项目描述: 是 Google 开源的一个协议和库集合,让 AI Agent 能够生成丰富的交互式用户界面。Agent 发送声明式 JSON,客户端用原生组件渲染,安全且跨平台。

  • 项目地址:https://github.com/google/a2ui

  • 官方文档:https://a2ui.org/

  • 解决的核心痛点

    • 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。

    • 远程 Agent 无法安全操控 UI:在多 Agent 系统中,Agent 通常运行在远程服务器上,无法直接操作客户端 UI。传统方案(iframe 嵌入 HTML/JS)存在严重的安全风险和样式隔离问题。A2UI 以声明式数据格式替代可执行代码,实现"像数据一样安全,像代码一样表达力强"。

    • 跨平台 UI 生成缺乏统一标准:不同平台(Web、iOS、Android、Flutter)需要不同的 UI 实现。A2UI 将 UI 结构与实现分离,同一份 JSON 可在多种框架上渲染。

1. 项目概览

1.1 项目定位与核心价值

一句话定位:A2UI 是一个开源的 Agent-to-User Interface 协议和库集合,让 AI Agent 能够"说 UI 语言"——通过声明式 JSON 格式生成和传递丰富的交互式用户界面

解决的核心痛点

  1. 文本交互效率低下:传统 Agent 只能以纯文本与用户交互,表单填写、时间选择等场景需要多轮对话。A2UI 让 Agent 能直接生成交互式 UI,将多轮文本对话压缩为一轮 UI 交互。

  2. 远程 Agent 无法安全操控 UI:在多 Agent 系统中,Agent 通常运行在远程服务器上,无法直接操作客户端 UI。传统方案(iframe 嵌入 HTML/JS)存在严重的安全风险和样式隔离问题。A2UI 以声明式数据格式替代可执行代码,实现"像数据一样安全,像代码一样表达力强"。

  3. 跨平台 UI 生成缺乏统一标准:不同平台(Web、iOS、Android、Flutter)需要不同的 UI 实现。A2UI 将 UI 结构与实现分离,同一份 JSON 可在多种框架上渲染。

目标用户画像

角色描述
Agent 开发者使用 Python/Kotlin SDK 让 Agent 生成 A2UI JSON 的服务端开发者
客户端开发者使用 Lit/React/Angular/Flutter 渲染 A2UI 的前端/移动端开发者
平台构建者构建 Agent 平台的团队,需要统一 Agent UI 生成能力
最终用户通过 Agent 驱动的应用获得更丰富交互体验的普通用户

1.2 目标用户与使用场景

核心业务场景

  • 场景一:动态数据收集 — Agent 根据对话上下文动态生成定制化表单(日期选择器、滑块、输入框等),例如预订特色餐厅时的偏好收集。
  • 场景二:远程子 Agent 编排 — 编排器 Agent 将任务委托给远程专业 Agent,远程 Agent 返回 UI 负载,在主聊天窗口中渲染。
  • 场景三:自适应工作流 — 企业级 Agent 根据用户查询即时生成审批仪表盘或数据可视化界面。

典型使用 Case(端到端流程)

  1. 用户在聊天界面中提出请求,如"帮我找附近的意大利餐厅"
  2. Agent(运行在服务端,如 Google ADK)处理请求,生成包含餐厅列表、评分筛选、预订按钮等组件的 A2UI JSON
  3. JSON 通过 A2A 或 AG UI 传输协议发送到客户端
  4. 客户端 A2UI 渲染器(如 Lit/Angular/React)接收到 JSON,使用本地组件目录映射渲染为原生 UI
  5. 用户与 UI 交互(点击按钮、填入表单等),交互事件通过协议回传 Agent
  6. Agent 接收用户操作,动态更新 UI(增量补丁),形成闭环交互

1.3 核心技术亮点

  1. 安全优先:Agent 只能请求渲染客户端预批准目录中的组件,无法执行任意代码
  2. LLM 友好的增量更新:扁平组件列表 + ID 引用,LLM 易于逐组件生成和修正
  3. 框架无关:同一份 A2UI JSON 可在 Lit、React、Angular、Flutter、SwiftUI 上渲染
  4. 渐进式渲染:流式解析引擎支持逐组件产出,用户看到"逐步构建"的 UI
  5. 响应式数据绑定:基于 Preact Signals 的细粒度响应式系统,数据变更时只更新相关组件
  6. Schema 驱动的通用绑定:GenericBinder 通过分析 Zod Schema 自动适配组件属性,无需手写绑定逻辑

1.4 技术栈与选型对比

层级技术选择关键依赖
Agent SDK (Python)Python 3.10+google-adk, google-genai, jsonschema, a2a-sdk
Agent SDK (Kotlin)Kotlin / JVMGradle
渲染核心 (Web)TypeScriptZod, Preact Signals
主力渲染器Lit (Web Components) v3@lit/context, @lit-labs/signals
React 渲染器React + TypeScript-
Angular 渲染器Angular Standalone-
Flutter 渲染器Dart (GenUI SDK)-
可视化工具Next.js 14 (App Router)React
文档站点MkDocs Material-
传输协议A2A, AG UI, MCP-

关键选型决策

  1. 声明式 JSON 而非可执行代码:安全性 > 灵活性。Agent 不可信任,声明式数据确保 Agent 只能请求预批准组件。
  2. 独立协议层而非直接使用 HTML:跨平台 > 简单性。引入新抽象层的学习成本换来真正的"一次生成,多端渲染"。
  3. Lit (Web Components) 作为主力渲染器:Web 标准保证了跨框架兼容性,轻量化适合渲染简单 UI。
  4. GenericBinder (Schema 驱动) 而非手写绑定:可扩展性 > 直观性。新增组件只需定义 Zod Schema,无需编写新的数据绑定代码。

2. 整体架构设计

2.1 架构概述

A2UI 采用协议驱动的分层架构模式。系统共分为五层:规范定义层(Specification)、Agent 生成层(Agent SDKs)、传输适配层(Transport)、渲染核心层(Web Core)和客户端渲染层(Renderers)。各层通过标准化的 JSON 协议消息松耦合连接,上层生成 A2UI JSON 消息,下层解析并渲染为原生 UI。核心设计哲学是"声明式数据替代可执行代码",Agent 只能请求客户端预批准组件目录中的组件。

整体架构图 (plainText)

text
+=======================================================================+
+|                     A2UI 整体架构 (Protocol-Driven Architecture)         |
++=======================================================================+
+
++---------------------------------------------+
+|           Specification Layer (规范层)        |
+|   v0.8 (Stable) | v0.9 (Current) | v0.10 (Draft)  |
+|   JSON Schema 协议定义 + 组件目录规范             |
++------------------+--------------------------+
+                   | (定义协议格式)
+                   v
++---------------------------------------------+
+|          Agent SDK Layer (Agent 生成层)       |
+|  +------------------+  +------------------+ |
+|  | Python SDK       |  | Kotlin SDK       | |
+|  | - Schema Manager |  | - StreamingParser| |
+|  | - Stream Parser  |  | - ...            | |
+|  | - Catalog System |  |                  | |
+|  | - ADK Integration|  |                  | |
+|  +------------------+  +------------------+ |
++------------------+--------------------------+
+                   | (生成 A2UI JSON 消息)
+                   v
++---------------------------------------------+
+|          Transport Layer (传输适配层)          |
+|  +---------+  +--------+  +-----------+     |
+|  | A2A     |  | AG UI  |  | MCP       |     |
+|  | Protocol|  |(Copilot)|  | Protocol  |     |
+|  +---------+  +--------+  +-----------+     |
++------------------+--------------------------+
+                   | (传输 JSON 消息到客户端)
+                   v
++---------------------------------------------+
+|        Web Core Layer (渲染核心层)            |
+|  +---------------------------------------+  |
+|  | MessageProcessor (消息处理器)          |  |
+|  | - 消息验证与分发                        |  |
+|  | - Surface 生命周期管理                  |  |
+|  +---------------------------------------+  |
+|  | State Management (状态管理)            |  |
+|  | - DataModel (响应式数据模型)            |  |
+|  | - SurfaceModel (Surface 模型)          |  |
+|  | - ComponentModel (组件模型)            |  |
+|  +---------------------------------------+  |
+|  | Rendering Engine (渲染引擎)            |  |
+|  | - GenericBinder (通用数据绑定)          |  |
+|  | - ComponentContext (组件上下文)         |  |
+|  | - DataContext (数据上下文)             |  |
+|  +---------------------------------------+  |
++------------------+--------------------------+
+                   | (提供数据绑定和状态)
+                   v
++---------------------------------------------+
+|        Renderers Layer (客户端渲染层)          |
+|  +---------+ +-------+ +---------+ +------+ |
+|  | Lit     | | React | | Angular | |Flutter| |
+|  | (主力)  | |       | |         | |      | |
+|  +---------+ +-------+ +---------+ +------+ |
+|  +------------------+                        |
+|  | Markdown         |                       |
+|  +------------------+                        |
++---------------------------------------------+
+                   |
+                   v
+          +------------------+
+          | End User (最终用户) |
+          | - Browser         |
+          | - Mobile App      |
+          | - Desktop App     |
+          +------------------+

2.2 目录结构

shell
A2UI/
+├── specification/                              # 【核心基建】A2UI 协议规范定义 (所有版本的协议 JSON Schema)
+   ├── v0_8/                                   # 【核心基建】v0.8 稳定版协议规范 (已锁定, 不再接受修改)
+   └── README.md                           # 【核心基建】v0.8 协议文档入口
+   ├── v0_9/                                   # 【核心基建】v0.9 版协议规范 (已发布, 不再活跃开发)
+   └── README.md                           # 【核心基建】v0.9 协议文档入口 + Evolution Guide
+   ├── v0_9_1/                                 # 【核心基建】v0.9.1 版协议规范 (小版本修正)
+   └── README.md                           # 【核心基建】v0.9.1 协议文档入口
+   ├── v0_10/                                  # 【核心基建】v0.10 版协议规范 (当前开发中的版本)
+   └── README.md                           # 【核心基建】v0.10 协议文档入口
+   └── scripts/                                # 【工具集】规范验证与处理脚本
+       └── validate.py                         # 【工具集】JSON Schema 规范验证工具
+
+├── agent_sdks/                                 # 【核心基建】Agent 端 SDK (服务端, 用于生成 A2UI JSON)
+   ├── python/                                 # 【核心基建】Python Agent SDK (主力实现)
+   ├── src/a2ui/                           # 【核心基建】Python SDK 源码
+   ├── __init__.py                     # 【核心基建】SDK 入口 (导出 __version__)
+   ├── version.py                      # 【配置】版本号常量
+   ├── inference_strategy.py           # 【核心基建】LLM 推理策略基类 (Adapter Pattern)
+   ├── parser/                         # 【核心基建】流式 JSON 解析引擎 (Factory Pattern)
+   ├── parser.py                   # 【核心基建】基础解析器
+   ├── streaming.py                # 【核心基建】A2uiStreamParser 工厂类 (版本路由)
+   ├── streaming_v08.py            # 【核心基建】v0.8 流式解析器实现
+   ├── streaming_v09.py            # 【核心基建】v0.9 流式解析器实现 (状态机)
+   ├── payload_fixer.py            # 【工具集】LLM 输出 payload 修复/纠错
+   ├── response_part.py            # 【核心基建】流式解析产出事件类型 (ResponsePart)
+   └── constants.py                # 【配置】解析器常量 (CUTTABLE_KEYS 等)
+   ├── schema/                         # 【核心基建】Schema 与 Catalog 管理 (协议安全核心)
+   ├── manager.py                  # 【核心基建】A2uiSchemaManager - LLM 提示词生成 + Catalog 协商
+   ├── catalog.py                  # 【核心基建】A2uiCatalog - 组件目录定义与 Schema 验证
+   ├── catalog_provider.py         # 【核心基建】CatalogProvider 接口 (Plugin/Extension Point)
+   ├── validator.py                # 【核心基建】拓扑分析 + 组件引用/必填字段提取
+   ├── common_modifiers.py         # 【核心基建】Schema Modifier 管道 (支持自定义修饰符)
+   ├── utils.py                    # 【工具集】bundled resource 加载工具
+   └── constants.py                # 【配置】协议版本与 Schema 文件映射
+   ├── adk/                            # 【核心基建】Google ADK (Agent Development Kit) 集成
+   ├── send_a2ui_to_client_toolset.py  # 【核心基建】ADK Toolset - 暴露 A2UI 工具给 LLM
+   ├── __init__.py                 # 【核心基建】ADK 模块入口
+   └── a2a/                        # 【核心基建】A2A 协议桥接
+       ├── event_converter.py      # 【核心基建】A2A Event → A2UI 事件转换器
+       └── part_converter.py       # 【核心基建】A2A Part → A2UI 消息转换器
+   ├── a2a/                            # 【核心基建】A2A 协议扩展 (Agent-to-Agent)
+   ├── extension.py                # 【核心基建】A2A AgentExtension 注册
+   └── parts.py                    # 【核心基建】A2UI 专用 A2A Part 类型定义
+   ├── basic_catalog/                  # 【核心基建】基础组件目录 (Button, Text, Card 等标准组件)
+   ├── provider.py                 # 【核心基建】BasicCatalogProvider - 加载 bundled catalog.json
+   ├── constants.py                # 【配置】基础组件目录 ID 常量
+   └── __init__.py                 # 【核心基建】模块入口
+   └── template/                       # 【核心基建】模板管理系统 (预定义 UI 模板)
+       ├── manager.py                  # 【核心基建】TemplateManager - 模板生命周期管理
+       └── __init__.py                 # 【核心基建】模块入口
+   ├── tests/                              # 【质量保证】Python SDK 测试
+   └── pyproject.toml                      # 【配置】Python 项目配置 (hatchling + uv)
+   ├── kotlin/                                 # 【核心基建】Kotlin Agent SDK (JVM/Android)
+   ├── src/main/kotlin/com/google/a2ui/   # 【核心基建】Kotlin SDK 源码
+   └── parser/StreamingParser.kt       # 【核心基建】Kotlin 流式解析器 (1114行, 与 Python 版功能对等)
+   └── gradle/                             # 【配置】Gradle 构建系统配置
+   └── conformance/                            # 【质量保证】跨 SDK 一致性测试 (确保 Python/Kotlin 行为一致)
+       ├── suites/                             # 【质量保证】测试套件定义
+       ├── test_data/                          # 【质量保证】共享测试数据 (JSON fixtures)
+       └── tests/                              # 【质量保证】一致性测试用例
+
+├── renderers/                                  # 【核心基建】客户端渲染器集合 (多框架实现)
+   ├── web_core/                               # 【核心基建】Web 渲染核心库 (所有 Web 渲染器的共享基础设施)
+   └── src/
+       ├── v0_8/                           # 【核心基建】v0.8 协议核心实现
+   ├── types/colors.ts             # 【核心基建】颜色系统类型定义 (Material Design 风格)
+   ├── errors.ts                   # 【核心基建】v0.8 错误类型定义
+   └── index.ts                    # 【核心基建】v0.8 模块入口
+       └── v0_9/                           # 【核心基建】v0.9 协议核心实现 (当前主力版本)
+           ├── schema/                     # 【核心基建】协议消息 Schema (Zod → JSON Schema)
+   ├── server-to-client.ts     # 【核心基建】服务端→客户端消息定义 (4种消息类型)
+   ├── client-to-server.ts     # 【核心基建】客户端→服务端消息定义 (Action + DataModel)
+   ├── common-types.ts         # 【核心基建】公共类型 (Component, DataBinding, Action, ChildList)
+   ├── client-capabilities.ts  # 【核心基建】客户端能力声明 (Catalog 协商)
+   ├── verify-schema.test.ts   # 【质量保证】Schema 验证测试
+   └── index.ts                # 【核心基建】Schema 模块入口
+           ├── state/                      # 【核心基建】响应式状态管理 (Preact Signals 驱动)
+   ├── data-model.ts           # 【核心基建】DataModel - JSON Pointer 响应式数据树
+   ├── surface-model.ts        # 【核心基建】SurfaceModel - UI Surface 状态
+   ├── component-model.ts      # 【核心基建】ComponentModel - 组件实例状态
+   ├── surface-components-model.ts  # 【核心基建】Surface 级组件注册表
+   └── surface-group-model.ts  # 【核心基建】全局 Surface 组管理
+           ├── processing/                 # 【核心基建】消息处理引擎
+   └── message-processor.ts    # 【核心基建】MessageProcessor - 消息验证与分发中枢
+           ├── catalog/                    # 【核心基建】组件目录与函数调用
+   ├── types.ts                # 【核心基建】Catalog/ComponentApi 类型定义
+   └── function_invoker.ts     # 【核心基建】自定义函数调用器 (支持客户端注册函数)
+           ├── reactivity/                 # 【核心基建】响应式系统封装
+   └── signals.ts              # 【核心基建】Preact Signals 适配封装
+           ├── rendering/                  # 【核心基建】渲染抽象层
+   ├── generic-binder.ts       # 【核心基建】GenericBinder - Schema 驱动的数据绑定引擎
+   ├── component-context.ts    # 【核心基建】ComponentContext - 组件上下文 (绑定到 Surface)
+   └── data-context.ts         # 【核心基建】DataContext - 数据上下文 (路径解析 + 动态值订阅)
+           ├── common/                     # 【工具集】公共基础设施
+   └── events.ts               # 【工具集】Event Emitter (Pub/Sub 订阅管理)
+           ├── basic_catalog/              # 【核心基建】基础组件目录 Web 实现
+   └── index.ts                # 【核心基建】基础目录注册 (包含所有标准 UI 组件的 Zod Schema)
+           ├── errors.ts                   # 【核心基建】v0.9 错误类型定义
+           └── index.ts                    # 【核心基建】v0.9 模块统一入口
+   ├── lit/                                    # 【业务模块】Lit (Web Components) 渲染器 - Google 主力实现
+   ├── src/
+   ├── index.ts                        # 【核心基建】@a2ui/lit 包入口 (多版本导出)
+   ├── 0.8/                            # 【业务模块】v0.8 版渲染实现 (稳定版)
+   ├── core.ts                     # 【核心基建】核心函数 (create, processMessages, etc.)
+   ├── model.test.ts               # 【质量保证】模型单元测试 (1323行, 覆盖全面)
+   ├── index.ts                    # 【核心基建】v0.8 公开 API
+   └── ui/                         # 【UI 视图】v0.8 UI 组件 (LitElement Web Components)
+       ├── ui.ts                   # 【UI 视图】UI 组件聚合导出
+       ├── root.ts                 # 【UI 视图】A2UIRoot - 应用根节点
+       ├── surface.ts              # 【UI 视图】A2UISurface - Surface 容器
+       ├── button.ts               # 【UI 视图】A2UIButton - 按钮 (支持 Action 绑定)
+       ├── text.ts                 # 【UI 视图】A2UIText - 文本 (h1-h5, body, caption)
+       ├── card.ts                 # 【UI 视图】A2UICard - 卡片容器
+       ├── image.ts                # 【UI 视图】A2UIImage - 图片
+       ├── video.ts                # 【UI 视图】A2UIVideo - 视频播放器
+       ├── audio.ts                # 【UI 视图】A2UIAudio - 音频播放器
+       ├── checkbox.ts             # 【UI 视图】A2UICheckbox - 复选框
+       ├── slider.ts               # 【UI 视图】A2UISlider - 滑块
+       ├── column.ts               # 【UI 视图】A2UIColumn - 垂直布局
+       ├── row.ts                  # 【UI 视图】A2UIRow - 水平布局
+       ├── tabs.ts                 # 【UI 视图】A2UITabs - 标签页
+       ├── modal.ts                # 【UI 视图】A2UIModal - 模态框
+       ├── divider.ts              # 【UI 视图】A2UIDivider - 分割线
+       ├── styles.ts               # 【UI 视图】Material Design 3 样式系统
+       └── component-registry.ts   # 【核心基建】组件注册表 (Map<componentType, LitElement>)
+   └── v0_9/                           # 【业务模块】v0.9 版渲染实现 (新架构)
+       ├── index.ts                    # 【核心基建】v0.9 公开 API
+       ├── a2ui-controller.ts          # 【核心基建】A2uiController - Lit ReactiveController (绑定 GenericBinder)
+       ├── a2ui-lit-element.ts         # 【核心基建】A2uiLitElement - 组件基类 (注入 ComponentContext)
+       ├── types.ts                    # 【核心基建】v0.9 类型定义
+       ├── surface/                    # 【UI 视图】Surface 渲染
+   ├── a2ui-surface.ts         # 【UI 视图】A2uiSurface - v0.9 Surface 容器
+   └── render-a2ui-node.ts     # 【UI 视图】递归组件节点渲染 (遍历组件树)
+       ├── context/                    # 【核心基建】依赖注入 Context (Lit Context Protocol)
+   ├── context.ts              # 【核心基建】主 Context (ComponentContext, 组件注册表)
+   └── markdown.ts             # 【核心基建】Markdown 渲染 Context
+       ├── directives/                 # 【UI 视图】Lit 自定义指令
+   ├── directives.ts           # 【UI 视图】通用渲染指令
+   └── markdown.ts             # 【UI 视图】Markdown 渲染指令 (AsyncDirective)
+       └── tests/                      # 【质量保证】v0.9 测试
+           ├── a2ui-surface.test.ts    # 【质量保证】Surface 组件的集成测试
+           ├── a2ui-lit-element.test.ts # 【质量保证】基础元素测试
+           ├── a2ui-controller.test.ts # 【质量保证】Controller 单元测试
+           ├── basic-catalog-examples.test.ts # 【质量保证】基础目录集成测试
+           ├── custom-catalogs.test.ts # 【质量保证】自定义目录测试
+           ├── markdown.test.ts        # 【质量保证】Markdown 渲染测试
+           └── dom-setup.ts            # 【质量保证】JSDOM 测试环境配置
+   └── package.json                        # 【配置】@a2ui/lit 包配置 (v0.10.0)
+   ├── react/                                  # 【业务模块】React 渲染器
+   └── src/
+       ├── index.ts                        # 【核心基建】@a2ui/react 包入口
+       ├── types.ts                        # 【核心基建】React 渲染器类型定义
+       ├── v0_8/                           # 【业务模块】v0.8 React 实现
+   ├── core/                       # 【核心基建】核心 React 组件
+   ├── A2UIProvider.tsx        # 【核心基建】A2UIProvider - 全局状态提供者 (React Context)
+   ├── A2UIViewer.tsx          # 【核心基建】A2UIViewer - 消息接收 + 渲染编排
+   ├── A2UIRenderer.tsx        # 【核心基建】A2UIRenderer - 组件递归渲染器
+   ├── ComponentNode.tsx       # 【核心基建】ComponentNode - 单节点渲染
+   └── store.ts                # 【核心基建】响应式 Store (Valtio 状态管理)
+   ├── hooks/                      # 【UI 视图】React 自定义 Hooks
+   ├── useA2UI.ts             # 【UI 视图】useA2UI - 获取 A2UI 应用状态
+   └── useA2UIComponent.ts     # 【UI 视图】useA2UIComponent - 获取单个组件状态
+   ├── registry/                   # 【核心基建】组件注册表
+   ├── ComponentRegistry.ts    # 【核心基建】组件注册表 (支持动态注册)
+   └── defaultCatalog.ts       # 【核心基建】默认 React 组件目录
+   ├── theme/                      # 【UI 视图】主题系统
+   ├── ThemeContext.tsx         # 【UI 视图】主题上下文 (支持自适应)
+   ├── litTheme.ts             # 【UI 视图】Lit 主题兼容层 (与 Lit 渲染器共享主题)
+   └── utils.ts                # 【工具集】主题工具函数
+   ├── styles/                     # 【UI 视图】CSS-in-JS 样式
+   ├── index.ts                # 【UI 视图】样式聚合导出
+   └── reset.ts                # 【UI 视图】浏览器样式重置
+   └── lib/                        # 【工具集】工具库
+       └── utils.ts                # 【工具集】通用工具函数
+       └── v0_9/                           # 【业务模块】v0.9 React 实现 (新架构)
+           ├── A2uiSurface.tsx             # 【UI 视图】A2uiSurface - v0.9 React Surface 组件
+           ├── adapter.tsx                  # 【核心基建】React → GenericBinder 适配器 (createReactComponent)
+           └── index.ts                    # 【核心基建】v0.9 React 公开 API
+   ├── angular/                                # 【业务模块】Angular 渲染器 (基于 Angular Standalone Components)
+   ├── flutter/                                # 【业务模块】Flutter 渲染器 (Dart) - GenUI SDK 底层
+   └── pubspec.yaml                        # 【配置】Flutter 包配置
+   ├── markdown/                               # 【业务模块】Markdown 渲染器 (生成纯 Markdown 输出)
+   ├── docs/                                   # 【配置】渲染器内部文档
+   └── scripts/                                # 【工具集】渲染器构建与发布脚本
+
+├── tools/                                      # 【工具集】A2UI 开发辅助工具链
+   ├── composer/                               # 【业务模块】A2UI Composer - 可视化 JSON 编辑器 (Next.js 14 App Router)
+   ├── src/
+   ├── app/                            # 【UI 视图】Next.js App Router
+   ├── page.tsx                    # 【UI 视图】主编辑器页面 (拖拽式组件构建)
+   └── layout.tsx                  # 【UI 视图】应用布局
+   ├── lib/                            # 【核心基建】编辑器核心逻辑
+   ├── components-data.ts          # 【核心基建】v0.8 组件定义与元数据 (1115行)
+   ├── components-data-v09.ts      # 【核心基建】v0.9 组件定义与元数据 (1052行)
+   ├── transcoder.ts               # 【核心基建】v0.8 <-> v0.9 版本双向转码器
+   ├── a2ui.tsx                    # 【核心基建】A2UI JSON 生成逻辑
+   ├── json-parser.ts              # 【工具集】JSON 解析与验证
+   ├── storage.ts                  # 【核心基建】localStorage 持久化
+   ├── utils.ts                    # 【工具集】通用工具函数
+   ├── v09Viewer.tsx               # 【UI 视图】v0.9 JSON 预览组件
+   └── viewerTheme.ts              # 【UI 视图】预览区主题配置
+   ├── contexts/                       # 【核心基建】React Context (SpecVersion, Widgets)
+   ├── spec-version-context.tsx    # 【核心基建】协议版本切换上下文
+   └── widgets-context.tsx         # 【核心基建】Widget 状态管理上下文
+   ├── data/theater/                   # 【配置】Theater 预构建场景 JSON (demo 数据)
+   ├── restaurant-finder.json      # 【配置】餐厅查找场景
+   ├── booking-form.json           # 【配置】预订表单场景
+   ├── weather-widget.json         # 【配置】天气组件场景
+   ├── flight-status.json          # 【配置】航班状态场景
+   ├── contact-card.json           # 【配置】联系人卡片场景
+   ├── kitchen-sink.json           # 【配置】全组件展示场景
+   ├── component-gallery-stream.json # 【配置】组件流式渲染场景
+   └── floor-plan.json             # 【配置】楼层平面图场景
+   ├── types/                          # 【核心基建】TypeScript 类型定义
+   └── widget.ts                   # 【核心基建】Widget 节点类型 (树形 + 属性)
+   └── test/                           # 【质量保证】测试
+   └── package.json                        # 【配置】Composer 包配置
+   ├── inspector/                              # 【业务模块】A2UI Inspector - 运行时调试工具
+   └── package.json                        # 【配置】Inspector 包配置
+   ├── editor/                                 # 【业务模块】A2UI Editor - Web 代码编辑器
+   └── package.json                        # 【配置】Editor 包配置
+   └── build_catalog/                          # 【工具集】Catalog 构建工具
+
+├── samples/                                    # 【业务模块】示例项目集合
+   ├── agent/adk/                              # 【业务模块】ADK Agent 示例 (Python)
+   ├── restaurant_finder/                  # 【业务模块】餐厅查找 - 主力 Demo (Gemini API 驱动)
+   ├── personalized_learning/              # 【业务模块】个性化学习 - 教育场景 Demo
+   ├── orchestrator/                       # 【业务模块】多 Agent 编排 - 远程子 Agent 场景
+   ├── rizzcharts/                         # 【业务模块】图表生成 Demo
+   ├── custom-components-example/          # 【业务模块】自定义组件目录示例
+   ├── mcp-apps-in-a2ui-sample/            # 【业务模块】MCP Apps 集成示例
+   ├── mcp_app_proxy/                      # 【业务模块】MCP 代理示例
+   └── gemini_enterprise/                  # 【业务模块】Gemini Enterprise 示例
+   ├── client/                                 # 【业务模块】客户端示例
+   ├── lit/                                # 【UI 视图】Lit 客户端 (主力)
+   ├── shell/                          # 【UI 视图】Shell 应用 (app.ts 932行)
+   ├── custom-components-example/      # 【业务模块】自定义组件客户端
+   ├── personalized_learning/          # 【业务模块】个性化学习客户端 (含 api-server)
+   └── mcp-apps-in-a2ui-sample/        # 【业务模块】MCP Apps 客户端
+   ├── react/shell/                        # 【UI 视图】React Shell 应用
+   ├── angular/                            # 【UI 视图】Angular 示例
+   ├── flutter/restaurant_finder/          # 【UI 视图】Flutter 餐厅查找 (GenUI 集成)
+   └── shared/                             # 【工具集】共享资源 (MCP inner iframe)
+   └── mcp/                                    # 【业务模块】MCP 协议集成示例
+       ├── a2ui-over-mcp-recipe/               # 【业务模块】A2UI over MCP - 完整双向集成
+       ├── a2ui-in-mcpapps/                    # 【业务模块】MCP Apps 中的 A2UI - 应用内嵌入
+       └── mcp-apps-calculator/                # 【业务模块】MCP 计算器 - 简单示例
+
+├── eval/                                       # 【质量保证】评估框架 (Agent 生成质量评估)
+   ├── a2ui_eval/                              # 【核心基建】评估核心库 (Python)
+   ├── datasets/                               # 【质量保证】标准测试数据集
+   ├── tests/                                  # 【质量保证】评估框架测试
+   └── bin/                                    # 【工具集】评估执行脚本
+
+├── docs/                                       # 【配置】MkDocs Material 文档站点 (a2ui.org)
+   ├── introduction/                           # 【配置】介绍文档 (What/Who/How/Compare)
+   ├── concepts/                               # 【配置】核心概念 (Data Flow/Components/Data Binding/Catalogs/Transports)
+   ├── guides/                                 # 【配置】开发者指南 (Client Setup/Agent Dev/Renderer Dev/MCP 集成)
+   ├── reference/                              # 【配置】API 参考 (Component Gallery/Message Reference/Renderers)
+   ├── specification/                          # 【配置】规范文档副本
+   ├── ecosystem/                              # 【配置】生态介绍 (Community/Community Renderers)
+   ├── assets/                                 # 【配置】文档静态资源 (SVG/PNG)
+   ├── stylesheets/                            # 【配置】自定义 CSS
+   └── scripts/                                # 【工具集】文档生成脚本
+
+├── scripts/                                    # 【工具集】项目级脚本
+   └── fix_format.sh                           # 【工具集】全仓库格式化 (Prettier + Pyink + dart format)
+
+├── .github/                                    # 【配置】GitHub CI/CD
+   ├── workflows/                              # 【配置】GitHub Actions 工作流
+   └── ISSUE_TEMPLATE/                         # 【配置】Issue 模板
+
+├── .gemini/                                    # 【配置】Gemini CLI 配置
+
+├── README.md                                   # 【配置】项目主页 (英文)
+├── CONTRIBUTING.md                             # 【配置】贡献指南 (CLA + 编码规范)
+├── LICENSE                                     # 【配置】Apache 2.0 许可证
+├── mkdocs.yaml                                 # 【配置】MkDocs 文档站点配置
+├── pubspec.yaml                                # 【配置】Flutter (Dart) 项目配置
+├── hooks.py                                    # 【配置】MkDocs 自定义钩子 (文档预处理)
+├── analysis_options.yaml                       # 【配置】Dart 代码分析规则
+└── requirements-docs.txt                       # 【配置】Python 文档构建依赖

3. 模块依赖与调用关系

3.1 全局入口与核心路由

逻辑说明:A2UI 的数据流从 Agent(如 Google ADK)开始,Agent 通过 Python/Kotlin SDK 的 SchemaManager 构建 LLM 系统提示词,LLM 生成 A2UI JSON 消息流,经过 StreamParser 解析验证后,通过 A2A/AG UI/MCP 传输协议发送到客户端。客户端 MessageProcessor 接收消息,根据消息类型(createSurface / updateComponents / updateDataModel / deleteSurface)分发到对应的 Surface 状态模型,状态变更通过 Signal 响应式系统自动传播到 UI 组件。

调用拓扑 (plainText)

text
Agent Application (e.g., ADK Agent)
+ +---> A2uiSchemaManager.generate_system_prompt()
+        +---> LLM (Gemini/Other) generates A2UI JSON stream
+               +---> A2uiStreamParser.process_chunk()
+                      +---> (版本判断) A2uiStreamParserV08 | A2uiStreamParserV09
+                             +---> (验证) JsonSchemaValidator
+                             +---> (产出) ResponsePart events
+                                    |
+Transport (A2A / AG UI / MCP) <----+
+       |
+       +---> Client: MessageProcessor.processMessages()
+              |
+              +---> [createSurface] --> SurfaceGroupModel.addSurface()
+              |                        +---> Catalog lookup
+              |                        +---> SurfaceModel 创建
+              |
+              +---> [updateComponents] --> SurfaceModel.componentsModel
+              |                           +---> ComponentModel 创建/更新
+              |                           +---> 触发 onUpdated 事件
+              |
+              +---> [updateDataModel] --> SurfaceModel.dataModel.set()
+              |                          +---> Signal 更新
+              |                          +---> 通知订阅者 (ancestors/descendants)
+              |
+              +---> [deleteSurface] --> SurfaceGroupModel.deleteSurface()
+
+Renderer-Specific Adapter (Lit/React/Angular/Flutter)
+ +---> GenericBinder.subscribe()
+        +---> resolveAndBind() (遍历 BehaviorNode 树)
+        +---> 订阅 DataContext 动态路径
+        +---> 产出 ResolvedProps --> UI Component re-render

3.2 核心业务实体与关联

实体定义

  • Surface:UI 画布。代表一个独立的 UI 渲染区域(如对话框、侧边栏、主视图)。一个应用可以同时存在多个 Surface。
  • Component:UI 元素。包括 Button、Text、Card、TextField 等。每个 Component 有唯一的 id、类型(如 "Text")、属性集合,通过 id 引用形成组件树。
  • DataModel:应用状态。采用 JSON Pointer (RFC 6901) 路径寻址的响应式树形数据结构。组件通过 path 绑定到数据模型的特定位置,数据更新自动触发 UI 更新。
  • Catalog:组件目录。定义客户端支持的组件类型集合、每个组件的 Schema(使用 Zod/JSON Schema 描述属性)、可用函数和主题定义。
  • Message:A2UI 协议消息。有四种核心消息类型:createSurfaceupdateComponentsupdateDataModeldeleteSurface

实体引用拓扑 (plainText)

text
[Catalog] 1 <----> N [ComponentApi]
+    |                      |
+    | (defines)            | (describes schema for)
+    |                      v
+    |               [Component] (generic)
+    |
+    +-------> [Surface] 1 -----> N [Component] (instance)
+                   |                        |
+                   | (has)                  | (binds to)
+                   v                        v
+              [DataModel] 1 <-----> N [Data Binding (path)]
+                   |
+                   | (notifies via)
+                   v
+              [Signal (Preact Signals)]
+                   |
+                   | (updates)
+                   v
+              [UI Component (Lit/React/etc.)]
+                   |
+                   | (triggers)
+                   v
+              [Action] ----> [Agent] (event callback)

4. 核心模块详解

模块一:MessageProcessor (消息处理器)

  • 模块名称:MessageProcessor - A2UI 消息处理核心

  • 设计说明:MessageProcessor 是客户端的消息分发中枢,采用观察者模式。它接收 A2UI JSON 消息数组,根据消息类型字段(createSurface/updateComponents/updateDataModel/deleteSurface)分发到不同的处理流程。它维护 SurfaceGroupModel 作为全局状态管理器,并管理 Catalog 注册表和 Action 回调。核心设计特点是消息可以增量到达(支持流式传输),每个消息只修改状态的一部分,通过 Preact Signals 实现的响应式系统自动传播变更到订阅的 UI 组件。

  • 内部结构图 (plainText)

text
+----------------------------------------+
+|         MessageProcessor<T>            |
+|  (消息分发中枢 / Observer Pattern)       |
++-----+--------+--------+---------+-----+
+      |        |        |         |
+      v        v        v         v
++--------+ +--------+ +--------+ +--------+
+|Create  | |Update  | |Update  | |Delete  |
+|Surface | |Comps   | |Data    | |Surface |
++--------+ +--------+ +--------+ +--------+
+      |        |        |         |
+      v        v        v         v
++========================================+
+|        SurfaceGroupModel<T>            |
+|  +----------------------------------+  |
+|  | surfacesMap: Map<string, Surface> |  |
+|  +----------------------------------+  |
+|  | onSurfaceCreated / onSurfaceDeleted| |
+|  | onAction (Event Emitter)          |  |
+|  +----------------------------------+  |
++========================================+
+      |
+      | (每个 Surface 包含)
+      v
++----------------------------------------+
+|          SurfaceModel<T>               |
+|  +----------------+ +---------------+  |
+|  |ComponentsModel | | DataModel     |  |
+|  |(组件注册表)     | | (JSON Pointer) |  |
+|  +----------------+ +---------------+  |
+|  | Catalog<T>     | | sendDataModel |  |
+|  +----------------+ +---------------+  |
++----------------------------------------+

模块二:DataModel (响应式数据模型)

  • 模块名称:DataModel - 响应式状态管理

  • 设计说明:DataModel 是 A2UI 客户端的核心状态管理模块,基于 JSON Pointer (RFC 6901) 路径寻址,使用 Preact Signals 实现细粒度响应式更新。支持路径的 CRUD 操作、父子路径的级联通知(修改子路径时通知所有祖先路径的订阅者)、Signal 缓存和惰性初始化。设计模式上采用了发布-订阅模式,外部通过 subscribe(path, callback) 订阅特定路径的变更,内部通过 signal(path) 管理响应式原语。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|              DataModel                      |
+|  (基于 JSON Pointer + Preact Signals)       |
++--------------------------------------------+
+|  data: Record<string, unknown>              |
+|  signals: Map<string, Signal<any>>          |
+|  subscriptions: Set<() => void>            |
++------------------+-------------------------+
+                   |
+    +--------------+--------------+
+    |              |              |
+    v              v              v
++--------+   +----------+   +-----------+
+| set()  |   | get()    |   |subscribe()|
+| path:  |   | path:    |   | path:     |
+| string |   | string   |   | string    |
+| value: |   | returns  |   | callback  |
+| any    |   | any|undef|   | returns   |
++--------+   +----------+   | DataSub   |
+    |                       +-----------+
+    |                            |
+    v                            v
++--------------------------------------------+
+|         notifySignals(path)                 |
+|  (级联通知机制)                             |
+|  1. updateSignal(targetPath)               |
+|  2. Notify all ancestor paths (向上冒泡)    |
+|  3. Notify all descendant paths (向下广播)  |
++--------------------------------------------+
+    |
+    v
++--------------------------------------------+
+|  Preact Signals (signal / batch / effect)  |
+|  - signal(): 创建响应式原语                  |
+|  - batch(): 批量更新优化                     |
+|  - effect(): 副作用订阅                      |
++--------------------------------------------+

模块三:GenericBinder (通用数据绑定引擎)

  • 模块名称:GenericBinder - Schema 驱动的响应式数据绑定

  • 设计说明:GenericBinder 是 A2UI v0.9 的核心创新模块,采用 策略模式 + 行为树遍历 的设计。它通过 scrapeSchemaBehavior() 分析 Zod Schema,自动识别属性类型(DYNAMIC/ACTION/STRUCTURAL/CHECKABLE/STATIC),无需为每个组件硬编码属性处理逻辑。DYNAMIC 类型自动订阅 DataModel 更新,ACTION 类型生成可执行闭包函数,STRUCTURAL 类型管理子组件列表。这是一种元编程方法——Schema 即是行为配置。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|         GenericBinder<T>                   |
+|  (Schema-Driven Reactive Binding Engine)   |
++--------------------------------------------+
+|  context: ComponentContext                  |
+|  behaviorTree: BehaviorNode                |
+|  currentProps: Partial<T>                  |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|      scrapeSchemaBehavior(schema)          |
+|  (Zod Schema --> BehaviorNode Tree)        |
++--------------------------------------------+
+|  识别规则:                                  |
+|  - ZodUnion + { event: ... } --> ACTION    |
+|  - ZodUnion + { path: ... }  --> DYNAMIC   |
+|  - ZodUnion + { componentId, path } --> STRUCTURAL |
+|  - propertyName === 'checks' --> CHECKABLE |
+|  - ZodObject --> OBJECT (递归)              |
+|  - ZodArray  --> ARRAY (递归)               |
+|  - Fallback  --> STATIC                     |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|       resolveAndBind(value, behavior)      |
+|  (行为驱动的属性解析)                        |
++--------------------------------------------+
+|                                            |
+|  DYNAMIC  ----> subscribeDynamicValue()    |
+|                 返回当前值 + 自动重订阅      |
+|                                            |
+|  ACTION   ----> () => dispatchAction()     |
+|                 生成可执行闭包               |
+|                                            |
+|  STRUCTURAL --> subscribeDynamicValue()    |
+|                 生成子组件列表 [{id, basePath}] |
+|                                            |
+|  CHECKABLE --> 验证规则数组                  |
+|                 注入 isValid / validationErrors |
+|                                            |
+|  OBJECT/ARRAY --> 递归遍历子节点             |
+|                                            |
+|  STATIC   ----> 原值返回                     |
++--------------------------------------------+
+                   |
+                   v
++--------------------------------------------+
+|     subscribe(listener) / notify()         |
+|  (Observer Pattern 通知视图更新)             |
++--------------------------------------------+

模块四:A2uiStreamParser (流式解析器)

  • 模块名称:A2uiStreamParser - 流式 JSON 解析

  • 设计说明:A2uiStreamParser 是 Agent 端的核心流式解析引擎,采用工厂模式根据 Catalog 版本创建对应的解析器实例(V08/V09)。主要挑战是处理 LLM 流式输出时 JSON 可能不完整的情况——解析器需要缓存不完整的 chunk,支持自动修复截断的字符串值(CUTTABLE_KEYS 机制),以及容错处理。解析结果以 ResponsePart 事件形式产出,支持逐组件的渐进式渲染。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|      A2uiStreamParser (Factory)            |
+|  catalog.version === 'v0.9' ? V09 : V08   |
++------------------+-------------------------+
+                   |
+         +---------+---------+
+         |                   |
+         v                   v
++------------------+  +------------------+
+| StreamParserV08  |  | StreamParserV09  |
++------------------+  +------------------+
+|  _buffer: str     |  |  _buffer: str    |
+|  _component_state |  |  _state: Enum    |
+|  _depth: int      |  |  (INIT/IN_MESSAGE|
+|                   |  |   /IN_COMPONENTS/ |
+|                   |  |   IN_ARRAY)       |
++--------+---------+  +--------+---------+
+         |                     |
+         v                     v
++--------------------------------------------+
+|         process_chunk(chunk: str)          |
+|  1. 追加 chunk 到 buffer                    |
+|  2. 尝试提取完整的 JSON 行/块               |
+|  3. 对不完整部分尝试 auto-heal (CUTTABLE)   |
+|  4. 逐行解析为 dict                         |
+|  5. 通过 JsonSchemaValidator 验证           |
+|  6. 产出 ResponsePart(createSurface |       |
+|     updateComponents | updateDataModel |    |
+|     deleteSurface)                          |
++--------------------------------------------+
+         |
+         v
++--------------------------------------------+
+|         ResponsePart (事件对象)             |
+|  - type: MessageType                       |
+|  - data: dict (完整消息体)                  |
+|  - component_id?: str (单组件事件)          |
+|  - is_partial?: bool (流式中间状态)         |
++--------------------------------------------+

模块五:Catalog System (组件目录系统)

  • 模块名称:Catalog System - 组件目录注册与协商

  • 设计说明:Catalog System 是 A2UI 安全模型的基石,采用策略模式 + 适配器模式。Agent 端维护支持的 Catalog 列表,客户端声明其能力(A2uiClientCapabilities),双方通过 supportedCatalogIds 协商选择共同支持的组件集。支持内联目录(Inline Catalog)——客户端可以将自定义组件的 JSON Schema 内联发送给 Agent,Agent 端的 LLM 即可理解并使用这些自定义组件。目录选择遵循三级优先级:内联目录 > 客户端支持的目录 ID > Agent 默认目录。

  • 内部结构图 (plainText)

text
+--------------------------------------------+
+|        A2uiSchemaManager                    |
+|  (Agent 端 Schema 管理器)                   |
++--------------------------------------------+
+|  _version: str                              |
+|  _supported_catalogs: list[A2uiCatalog]     |
+|  _accepts_inline_catalogs: bool            |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|       _select_catalog(capabilities)         |
+|  目录选择优先级:                             |
+|  1. Inline Catalogs (客户端内联)            |
+|     --> merge with base catalog            |
+|  2. supportedCatalogIds (客户端声明)         |
+|     --> first mutual match                 |
+|  3. Agent default catalog (服务端默认)       |
++------------------+-------------------------+
+                   |
+                   v
++--------------------------------------------+
+|           A2uiCatalog                      |
+|  +--------------------------------------+  |
+|  | catalog_id: str                      |  |
+|  | components: dict (组件定义)            |  |
+|  | functions: list (可用函数)            |  |
+|  | theme_schema: dict (主题定义)         |  |
+|  +--------------------------------------+  |
+|  | render_as_llm_instructions() -> str   |  |
+|  | load_examples() -> str               |  |
+|  | with_pruning() -> A2uiCatalog        |  |
+|  +--------------------------------------+  |
++--------------------------------------------+
+                   ^
+                   | (客户端侧)
++--------------------------------------------+
+|   MessageProcessor.getClientCapabilities() |
+|   - supportedCatalogIds: string[]          |
+|   - inlineCatalogs?: InlineCatalog[]        |
+|     (包含完整 JSON Schema 定义)              |
++--------------------------------------------+

5. 关键数据流程

场景说明:这是一个完整的 A2UI 交互生命周期——用户提出"帮我找附近的意大利餐厅",Agent 生成餐厅搜索 UI,用户填写偏好后提交,Agent 更新搜索结果 UI。此流程覆盖了 A2UI 的所有核心消息类型(createSurface, updateComponents, updateDataModel, 用户 Action 回调)以及响应式数据绑定的完整链路。

  • 流转时序图 (Mermaid)

6. 接口与契约规范

6.1 核心内部模块契约 (TypeScript)

typescript
/**
+ * A2UI v0.9 消息联合类型
+ * Agent 可以发送以下四种消息之一
+ */
+export type A2uiMessage =
+  | CreateSurfaceMessage       // 创建渲染 Surface
+  | UpdateComponentsMessage    // 更新组件列表
+  | UpdateDataModelMessage     // 更新数据模型
+  | DeleteSurfaceMessage;      // 删除 Surface
+
+/**
+ * 消息处理器核心接口
+ * 负责接收、验证并分发 A2UI 消息到对应的状态模型
+ */
+export interface IMessageProcessor<T extends ComponentApi> {
+  /** 处理一批 A2UI 消息 */
+  processMessages(messages: A2uiMessage[] | A2uiMessageListWrapper): void;
+
+  /** 获取客户端能力声明(用于与 Agent 协商目录) */
+  getClientCapabilities(options?: CapabilitiesOptions): A2uiClientCapabilities;
+
+  /** 获取启用了 sendDataModel 的 Surface 的聚合数据模型 */
+  getClientDataModel(): A2uiClientDataModel | undefined;
+
+  /** 订阅 Surface 创建事件 */
+  onSurfaceCreated(handler: (surface: SurfaceModel<T>) => void): Subscription;
+
+  /** 订阅 Surface 删除事件 */
+  onSurfaceDeleted(handler: (id: string) => void): Subscription;
+}
+
+/**
+ * 响应式数据模型接口
+ * 基于 JSON Pointer (RFC 6901) 路径寻址
+ */
+export interface IDataModel {
+  /** 写入数据到指定路径,自动通知订阅者 */
+  set(path: string, value: any): this;
+
+  /** 读取指定路径的数据 */
+  get<T = any>(path: string): T | undefined;
+
+  /** 订阅路径变更,返回包含当前值和取消订阅方法的对象 */
+  subscribe<T>(path: string, onChange: (value: T | undefined) => void): DataSubscription<T>;
+
+  /** 获取路径对应的 Signal(惰性创建) */
+  getSignal<T>(path: string): Signal<T | undefined>;
+
+  /** 清理所有订阅 */
+  dispose(): void;
+}
+
+/**
+ * Surface 模型接口
+ * 代表一个独立的 UI 渲染区域
+ */
+export interface ISurfaceModel<T extends ComponentApi> {
+  readonly id: string;
+  readonly catalog: Catalog<T>;
+  readonly componentsModel: ComponentsModel<T>;
+  readonly dataModel: DataModel;
+  readonly sendDataModel: boolean;
+
+  /** 设置主题参数 */
+  setTheme(theme: Record<string, unknown>): void;
+
+  /** 销毁 Surface */
+  dispose(): void;
+}
+
+/**
+ * 通用数据绑定引擎接口
+ * 将 A2UI JSON 属性转换为响应式 props
+ */
+export interface IGenericBinder<T> {
+  /** 当前已解析的 props 快照 */
+  readonly currentProps: Partial<T>;
+
+  /** 获取同步快照 */
+  readonly snapshot: T;
+
+  /** 订阅 props 变更 */
+  subscribe(listener: (props: T) => void): { unsubscribe: () => void };
+
+  /** 销毁所有监听 */
+  dispose(): void;
+}
+
+/**
+ * Actions 监听器
+ * 处理用户在 A2UI Surface 上的交互事件
+ */
+export type ActionListener = (
+  surfaceId: string,
+  actionName: string,
+  payload: Record<string, unknown>
+) => void;

6.2 对外 API 契约 (A2UI v0.9 核心消息 Schema)

yaml
# A2UI v0.9 核心消息类型 — OpenSpec/YAML 格式
+
+components:
+  schemas:
+    CreateSurface:
+      type: object
+      required: [version, createSurface]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        createSurface:
+          type: object
+          required: [surfaceId, catalogId]
+          properties:
+            surfaceId:
+              type: string
+              description: UI Surface 的唯一标识符
+            catalogId:
+              type: string
+              description: 组件目录的唯一标识符
+            theme:
+              type: object
+              description: 可选的 Surface 级主题参数
+            sendDataModel:
+              type: boolean
+              description: 若为 true,客户端将在每次数据更新时发送完整数据模型
+
+    UpdateComponents:
+      type: object
+      required: [version, updateComponents]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        updateComponents:
+          type: object
+          required: [surfaceId, components]
+          properties:
+            surfaceId:
+              type: string
+              description: 目标 Surface 的唯一标识符
+            components:
+              type: array
+              minItems: 1
+              items:
+                $ref: '#/components/schemas/Component'
+              description: 该 Surface 的所有 UI 组件列表
+
+    UpdateDataModel:
+      type: object
+      required: [version, updateDataModel]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        updateDataModel:
+          type: object
+          required: [surfaceId]
+          properties:
+            surfaceId:
+              type: string
+              description: 目标 Surface 的唯一标识符
+            path:
+              type: string
+              description: JSON Pointer 路径,默认为根路径 "/"
+            value:
+              description: 要更新的数据值
+
+    DeleteSurface:
+      type: object
+      required: [version, deleteSurface]
+      properties:
+        version:
+          type: string
+          enum: ["v0.9"]
+        deleteSurface:
+          type: object
+          required: [surfaceId]
+          properties:
+            surfaceId:
+              type: string
+              description: 要删除的 Surface 唯一标识符
+
+    ClientCapabilities:
+      type: object
+      required: [v0.9]
+      properties:
+        v0.9:
+          type: object
+          required: [supportedCatalogIds]
+          properties:
+            supportedCatalogIds:
+              type: array
+              items:
+                type: string
+              description: 客户端支持的目录 ID 列表
+            inlineCatalogs:
+              type: array
+              items:
+                $ref: '#/components/schemas/InlineCatalog'
+              description: 客户端内联提供的完整目录定义

7. 快速开始

7.1 环境配置

  • Node.js 18+
  • Python 3.10+ (推荐使用 uv)
  • Gemini API Key (用于 Restaurant Finder Demo)

7.2 安装与运行

bash
git clone https://github.com/google/A2UI.git
+cd A2UI
+export GEMINI_API_KEY="your_gemini_api_key"
+cd samples/client/lit
+npm run demo:restaurant

启动后访问 http://localhost:5173 即可体验完整的 A2UI 餐厅查找应用。

7.3 典型用例

路径说明时间
Quickstart Demo完整 A2UI 本地运行 (Gemini + ADK + Lit)~5 分钟
A2UI + AG-UI (CopilotKit)将 A2UI 集成到现有 Agent 框架~5 分钟
A2UI Composer可视化构建 A2UI JSON~1 分钟
A2UI Theater预构建的流式渲染场景浏览~1 分钟
+ + + + \ No newline at end of file diff --git a/insight-labs/repo-insight/amis.html b/insight-labs/repo-insight/amis.html index ca8b2cb..775f8e1 100644 --- a/insight-labs/repo-insight/amis.html +++ b/insight-labs/repo-insight/amis.html @@ -8,10 +8,10 @@ - - - - + + + + @@ -115,7 +115,7 @@ d="m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36z" > -
+ + +
7072
+ + + + 30.8m

Animejs 开源项目解读

项目信息

  • 项目名称:Animejs
  • 项目描述: Animejs 一个零依赖、模块化、高性能的 JavaScript 动画引擎,通过 Clock → Timer → Animation/Timeline 的分层继承架构,提供 CSS/SVG/DOM/JS Object 的统一动画 API。
  • 项目地址:https://github.com/juliangarnier/anime
  • 官方文档:https://animejs.com

解决的核心痛点

  1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同的接口和控制方式,Anime.js 提供统一 API 屏蔽底层差异
  2. 复杂动画编排困难:原生 API 缺乏时间线编排能力,Anime.js 内建 Timer → Animation → Timeline 的分层模型
  3. 高性能与代码量平衡:通过模块化 ESM 导出和零运行时依赖的设计,实现功能完备但按需加载的架构

核心架构速览

功能扩展层 (SVG / Text / WAAPI / Events / Easings / ...)
+
+动画抽象层 (Timer → JSAnimation / Timeline / Draggable)
+
+核心引擎层 (Clock / Engine / Render / Values)
+
+基础设施层 (Consts / Helpers / Globals)

1. 项目概览

1.1 项目定位与核心价值

Anime.js 是一个快速、多功能、轻量级的 JavaScript 动画引擎库,提供简洁而强大的 API,支持 CSS 属性、SVG、DOM 属性和 JavaScript 对象动画。

解决的核心痛点

  1. Web 动画 API 碎片化:CSS Transition/Animation、WAAPI、SVG 动画、Canvas/WebGL 各自有不同的接口和控制方式,Anime.js 提供统一 API 屏蔽底层差异
  2. 复杂动画编排困难:原生 API 缺乏时间线编排能力,Anime.js 内建 Timer → Animation → Timeline 的分层模型
  3. 高性能与代码量平衡:通过模块化 ESM 导出和零运行时依赖的设计,实现功能完备但按需加载的架构

1.2 目标用户与使用场景

  • Web 前端开发者:需要在项目中快速添加复杂交互动画
  • 创意设计师/开发者:需要制作高视觉效果的交互动画
  • 框架无关:可在任何 Web 项目中使用 (Vanilla JS / React / Vue 等)

1.3 核心技术亮点

特性说明
零运行时依赖不依赖任何第三方库
模块化架构14 个独立可导入子模块,Tree Shaking 友好
统一动画模型CSS/DOM/SVG/JS Object 统一 API
高性能渲染rAF 主循环 + 链表遍历 + 帧节流
值系统自动识别 NUMBER/UNIT/COLOR/COMPLEX 四种类型
合成系统replace/blend/none 三种 Tween 冲突处理
Promise 支持.then() 方法支持 await 语法
丰富扩展SVG 描边/变形/路径、文本分割/乱序、拖拽、滚动驱动

1.4 技术栈与选型对比

层面技术选型权衡考量
语言JavaScript ESMTree Shaking 友好,无编译步骤
类型JSDoc + TS .d.ts保持 JS 开发体验同时提供完整类型
构建RollupESM/CJS/UMD/IIFE 多格式输出
架构分层继承 (Clock→Timer→Animation)复用时间管理逻辑,代价是降低灵活性
渲染自建 rAF 循环精确控制每帧,支持复杂编排
WAAPI可选集成模块保留高性能原生动画路径

2. 整体架构设计

2.1 架构概述

Anime.js V4 采用 分层继承架构,从底层到顶层分为四个层次:

  • 基础设施层 (Infrastructure):环境检测、浏览器 API 适配、常量定义
  • 核心引擎层 (Core Engine):Clock 时间系统、Render 渲染循环、Values 值处理系统、全局 Engine 单例
  • 动画抽象层 (Animation Abstractions):Timer 基类 → Animation(单动画)/Timeline(时间线编排)/Draggable(拖拽)
  • 功能扩展层 (Extensions):Easings 缓动、SVG 工具、Text 文本、WAAPI 桥接、Events 事件、Scope 作用域

2.2 整体架构图

text
+=======================================================================+
+|                      功能扩展层 (Extensions)                           |
+|  +----------+  +----------+  +----------+  +-----------+             |
+|  |  SVG     |  |  Text    |  |  WAAPI   |  |  Events   |             |
+|  | drawable |  | split    |  | waapi()  |  | scroll    |             |
+|  | morphTo  |  | scramble |  | animate  |  | observer  |             |
+|  | motion   |  |          |  |          |  |           |             |
+|  +----+-----+  +----+-----+  +----+-----+  +-----+-----+             |
+|       |             |             |               |                    |
+|  +----+-----+  +----+-----+  +----+-----+  +-----+-----+             |
+|  | Layout   |  | Easings  |  | Scope    |  | Utils     |             |
+|  | animate  |  | eases    |  | scope()  |  | stagger   |             |
+|  | layout   |  | spring   |  | refresh  |  | random    |             |
+|  |          |  | cubic-   |  | revert   |  | chainable |             |
+|  |          |  | bezier   |  |          |  |           |             |
+|  +----------+  +----------+  +----------+  +-----------+             |
++=======================================================================+
+                                | (import)
+                                v
++=======================================================================+
+|                    动画抽象层 (Animation Abstractions)                  |
+|                                                                       |
+|  +-----------------------------------------------------------------+ |
+|  |                   Timer (继承 Clock)                              | |
+|  |  - 生命周期: began/completed/paused                              | |
+|  |  - 时间控制: seek/reset/restart/reverse/alternate                | |
+|  |  - 子节点: _head/_tail 链表管理                                   | |
+|  |  - 回调: onBegin/onUpdate/onLoop/onComplete                      | |
+|  |  - Promise: .then() 支持                                         | |
+|  +-------+-------------------+-------------------+-----------+------+ |
+|          |                   |                   |           |         |
+|          v                   v                   v           v         |
+|  +---------------+  +----------------+  +----------------+  +-------+ |
+|  | JSAnimation   |  | Timeline       |  | Draggable      |  | Anim- | |
+|  | (Animation)   |  | (时间线编排)    |  | (拖拽交互)      |  | atable| |
+|  | - _tweens链表 |  | - _children    |  | - snap/x/y     |  | (CSS) | |
+|  | - tween合成   |  |   位置计算      |  | - inertia      |  +-------+ |
+|  | - 值分解      |  | - add()/set()  |  | - modifiers    |           | |
+|  +---------------+  +----------------+  +----------------+           | |
++=======================================================================+
+                                | (继承/调用)
+                                v
++=======================================================================+
+|                     核心引擎层 (Core Engine)                           |
+|                                                                       |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Clock            |  | Engine (单例)    |  | Render / tick()    |  |
+|  | - _currentTime   |  | - _lastTickTime  |  | - render() 核心    |  |
+|  | - _fps/_speed     |  | - reqId (rAF)   |  |   渲染循环         |  |
+|  | - requestTick()  |  | - _head (链表)   |  | - tick() 子节点    |  |
+|  | - deltaTime      |  | - wake()        |  |   递归遍历         |  |
+|  +------------------+  +------------------+  +--------------------+  |
+|                                                                       |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Values           |  | Styles           |  | Transforms         |  |
+|  | - decomposeValue |  | - sanitizeProp   |  | - decomposeTransform| |
+|  | - composeColor   |  | - revertValues   |  | - buildString      |  |
+|  | - composeComplex |  |                  |  |                    |  |
+|  +------------------+  +------------------+  +--------------------+  |
+|                                                                       |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Units            |  | Colors           |  | Targets            |  |
+|  | - convertUnit    |  | - parse/rgb/hsl  |  | - registerTargets  |  |
+|  +------------------+  +------------------+  +--------------------+  |
++=======================================================================+
+                                | (依赖)
+                                v
++=======================================================================+
+|                   基础设施层 (Infrastructure)                          |
+|  +------------------+  +------------------+  +--------------------+  |
+|  | Consts           |  | Helpers          |  | Globals            |  |
+|  | - isBrowser      |  | - now()          |  | - globals.timeScale|  |
+|  | - tweenTypes     |  | - addChild()     |  | - defaults配置     |  |
+|  | - valueTypes     |  | - forEachChild() |  | - scope.current    |  |
+|  | - tickModes      |  | - lerp/clamp     |  |                    |  |
+|  +------------------+  +------------------+  +--------------------+  |
++=======================================================================+

分层职责说明

层次核心职责关键技术
基础设施层环境检测、常量枚举、工具函数、全局状态浏览器/Node 双环境适配
核心引擎层时间系统、帧调度、值解析、渲染循环rAF 主循环、链表遍历
动画抽象层Timer 基类、Animation、Timeline 编排、Draggable 交互类继承、双向链表
功能扩展层SVG 动画、文本特效、WAAPI 桥接、缓动函数可选的独立模块

2.3 目录结构

shell
anime/
+├── src/                                   # 【核心基建】源代码主目录 - 61个JS文件,~37K行
+   ├── index.js                           # 【核心基建】全局入口 - re-export 14个模块的所有公共API
+
+   ├── core/                              # 【核心基建】核心引擎基础设施层 - 11个文件
+   ├── clock.js                       # 【核心基建】Clock 时间基类 - 所有定时实体的父类
+   ├── consts.js                      # 【核心基建】全局常量 - 环境检测、枚举(tweenTypes/valueTypes/tickModes/compositionTypes)、浏览器DOM符号
+   ├── colors.js                      # 【核心基建】颜色处理 - 颜色解析与格式化
+   ├── globals.js                     # 【核心基建】全局状态 - globalVersions版本数组、defaults默认参数、scope管理
+   ├── helpers.js                     # 【工具集】通用工具 - now()/clamp()/lerp()/addChild()/forEachChildren()/mergeObjects()等
+   ├── render.js                      # 【核心基建】渲染核心 - render()计算单帧Tween值写入目标、tick()递归处理子节点(Timeline)
+   ├── styles.js                      # 【核心基建】样式处理 - sanitizePropertyName()属性名标准化(如line-height→lineHeight)、revertValues()恢复
+   ├── targets.js                     # 【核心基建】目标管理 - registerTargets()、parseTargets()加载DOM元素/NodeList/对象
+   ├── transforms.js                  # 【核心基建】Transform处理 - CSS Transform分解为独立属性、buildTransformString()重建
+   ├── units.js                       # 【核心基建】单位处理 - convertValueUnit()单位转换(px↔rem↔vh等)
+   └── values.js                      # 【核心基建】值系统 - decomposeRawValue()分解值类型、composeColorValue()/composeComplexValue()合成、getRelativeValue()相对值
+
+   ├── timer/                             # 【核心基建】Timer模块 - 动画引擎的核心时间抽象
+   ├── index.js                       # 【核心基建】导出 createTimer() 工厂函数
+   └── timer.js                       # 【核心基建】Timer类(继承Clock) - 生命周期管理、seek/pause/resume/reverse/stretch、Promise支持
+
+   ├── animation/                         # 【业务模块】Animation模块 - 属性动画实现
+   ├── index.js                       # 【业务模块】导出 animate()、createAnimations()、stagger()
+   ├── animation.js                   # 【业务模块】JSAnimation类(继承Timer) - Tween链表创建、值解析与写入
+   ├── composition.js                 # 【核心基建】Tween合成系统 - composeTween()处理replace/blend/none、WeakMap存储target+property→Tween映射
+   └── additive.js                    # 【核心基建】加法动画 - 相对值叠加(additive)、animation.add()累加
+
+   ├── timeline/                          # 【业务模块】Timeline模块 - 多动画时间编排
+   ├── index.js                       # 【业务模块】导出 createTimeline()
+   ├── timeline.js                    # 【业务模块】Timeline类(继承Timer) - add()/set()/sync()/remove()、子动画链表遍历渲染
+   └── position.js                    # 【工具集】位置解析 - parseTimelinePosition()处理绝对/相对/标签偏移
+
+   ├── easings/                           # 【核心基建】缓动函数系统 - 8种缓动类型
+   ├── index.js                       # 【核心基建】导出 parseEase() 统一缓动解析入口
+   ├── none.js                        # 【核心基建】无缓动恒等函数
+   ├── eases/                         # 【核心基建】标准Penner缓动集 - in/out/inOut × Quad/Cubic/Quart/Quint/Sine/Expo/Circ/Back/Elastic/Bounce
+   ├── index.js                   # 【核心基建】预定义缓动函数导出
+   └── parser.js                  # 【核心基建】缓动名称→函数解析器
+   ├── linear/ ── index.js           # 【核心基建】linear()/none() 线性缓动
+   ├── steps/ ── index.js            # 【核心基建】steps() 阶梯缓动
+   ├── irregular/ ── index.js        # 【核心基建】irregular() 自定义关键帧缓动(如[0, 0.2, 0.8, 1])
+   ├── cubic-bezier/ ── index.js     # 【核心基建】cubicBezier() CSS贝塞尔缓动
+   └── spring/ ── index.js           # 【核心基建】spring() 物理弹簧缓动(mass/stiffness/damping)
+
+   ├── engine/                            # 【核心基建】全局动画引擎
+   ├── index.js                       # 【核心基建】导出 engine 全局单例
+   └── engine.js                      # 【核心基建】Engine类(继承Clock) - rAF主循环、Timer链表管理、全局timeScale/pause控制
+
+   ├── animatable/                        # 【业务模块】Animatable - CSS computed style动画
+   ├── index.js                       # 【业务模块】导出 animateComputedStyle()等
+   └── animatable.js                  # 【业务模块】Animatable类(继承Timer) - 驱动CSS过渡/WAAPI动画
+
+   ├── draggable/                         # 【业务模块】Draggable - 拖拽交互
+   ├── index.js                       # 【业务模块】导出 createDraggable()
+   └── draggable.js                   # 【业务模块】Draggable类(继承Timer) - 鼠标/触摸拖拽、snap吸附、inertia惯性、modifiers修饰
+
+   ├── scope/                             # 【核心基建】Scope - 动画生命周期管理
+   ├── index.js                       # 【核心基建】导出 createScope()
+   └── scope.js                       # 【核心基建】Scope类 - register()/refresh()/revert()/pause()批量控制
+
+   ├── events/                            # 【业务模块】Events - 滚动驱动
+   ├── index.js                       # 【业务模块】导出 createScrollObserver()
+   └── scroll.js                      # 【业务模块】ScrollObserver - 滚动位置→动画时间的映射、link()/unlink()
+
+   ├── layout/                            # 【业务模块】Layout - 布局动画
+   ├── index.js                       # 【业务模块】导出 animateLayout()
+   └── layout.js                      # 【业务模块】FLIP布局动画实现 - First/Last/Invert/Play
+
+   ├── svg/                               # 【业务模块】SVG - 矢量图形动画专属
+   ├── index.js                       # 【业务模块】导出 createDrawable()、createMorphTo()、createMotionPath()
+   ├── drawable.js                    # 【业务模块】Drawable - SVG描边动画(stroke-dashoffset/stroke-dasharray)
+   ├── helpers.js                     # 【工具集】SVG工具 - 路径解析、长度计算
+   ├── morphto.js                     # 【业务模块】MorphTo - SVG path d属性形状变换
+   └── motionpath.js                  # 【业务模块】MotionPath - SVG路径跟随运动
+
+   ├── text/                              # 【业务模块】Text - 文本动画特效
+   ├── index.js                       # 【业务模块】导出 splitText()、scrambleText()
+   ├── split.js                       # 【业务模块】SplitText - 文本按字符/单词/行分割为独立DOM元素
+   └── scramble.js                    # 【业务模块】ScrambleText - 字符乱序切换动画
+
+   ├── waapi/                             # 【业务模块】WAAPI - Web Animations API桥接
+   ├── index.js                       # 【业务模块】导出 waapi.animate()
+   ├── waapi.js                       # 【业务模块】WAAPIAnimation(继承Timer) - 封装element.animate()
+   └── composition.js                 # 【业务模块】WAAPI Tween合成管理
+
+   ├── utils/                             # 【工具集】通用工具集 - 7个独立工具
+   ├── index.js                       # 【工具集】导出所有工具函数
+   ├── chainable.js                   # 【工具集】链式调用辅助 - 支持 obj.x(100).y(200).duration(1000) 语法
+   ├── number.js                      # 【工具集】数值工具 - 数值格式化、精度处理
+   ├── random.js                      # 【工具集】随机工具 - random()/randomInt() 随机值生成
+   ├── stagger.js                     # 【工具集】交错延迟 - stagger()按元素索引计算延迟
+   ├── target.js                      # 【工具集】目标查找 - querySelectorAll()封装、NodeList→Array
+   └── time.js                        # 【工具集】时间工具 - 时间格式化转换
+
+   └── types/                             # 【配置】JSDoc类型定义文件
+       └── index.js                       # 【配置】全局@typedef类型 - TimerParams/AnimationParams/Tween/Target等,构建时提取注入bundle头部
+
+├── dist/                                  # 【配置】构建产物
+   ├── modules/                           # 【配置】ESM + CJS 模块输出 (preserveModules)
+   └── bundles/                           # 【配置】UMD + ESM 打包输出 (anime.*.js)
+
+├── examples/                              # 【配置】78个示例页面 (官方示例)
+├── tests/                                 # 【质量保证】测试套件 (120个文件,Mocha + Chai)
+   ├── index.html                         # 【质量保证】浏览器测试入口
+   └── suites/                            # 【质量保证】测试用例目录 (浏览器 + Node.js)
+
+├── assets/                                # 【配置】仓库静态资源 (Logo、GIF、赞助商图片)
+├── .github/                               # 【配置】GitHub CI/CD配置
+├── package.json                           # 【配置】NPM包配置 - v4.4.1, 18个子路径导出, 零运行时依赖
+├── rollup.config.js                       # 【配置】Rollup构建配置 - ESM/CJS/UMD多格式输出
+├── tsconfig.json                          # 【配置】TypeScript主配置
+├── tsconfig.types.json                    # 【配置】类型声明生成配置 - 输出dist/modules/**/*.d.ts
+├── CONTRIBUTING.md                        # 【配置】贡献指南
+├── LICENSE.md                             # 【配置】MIT开源协议
+└── README.md                              # 【配置】英文项目主文档

3. 模块依赖与调用关系

3.1 全局入口与核心路由

逻辑说明src/index.js 作为全局入口,将所有 14 个模块的子入口聚合导出。每个模块有自己的 index.js,对外暴露特定的公共 API 函数。模块内部通过 core/ 共享基础设施。Engine 是全局单例,负责驱动所有活跃的 Timer 实例。

  • 调用拓扑 (plainText)
text
src/index.js (全局入口 - 14个模块聚合)
+ |
+ +---> src/timer/index.js --------> createTimer() ────> new Timer(Clock)
+ |
+ +---> src/animation/index.js -----> animate() ────────> new JSAnimation(Timer)
+ |                                   stagger()
+ |                                   createAnimations()
+ |
+ +---> src/timeline/index.js ------> createTimeline() ─> new Timeline(Timer)
+ |                                                         |
+ |                                                         +--> add() -> new JSAnimation
+ |                                                         +--> set() -> new JSAnimation
+ |
+ +---> src/draggable/index.js -----> createDraggable() ─> new Draggable(Timer)
+ |
+ +---> src/scope/index.js ---------> createScope() ─────> new Scope()
+ |                                   scope.refresh()
+ |                                   scope.revert()
+ |
+ +---> src/engine/index.js --------> engine (全局单例)
+ |                                   engine.resume()
+ |                                   engine.pause()
+ |
+ +---> src/events/index.js --------> createScrollObserver()
+ |
+ +---> src/easings/index.js -------> parseEase()
+ |    ├── src/easings/eases/ ------> 预定义缓动函数集
+ |    ├── src/easings/cubic-bezier/ -> cubicBezier()
+ |    ├── src/easings/spring/ ------> spring()
+ |    ├── src/easings/steps/ -------> steps()
+ |    ├── src/easings/linear/ ------> linear()
+ |    └── src/easings/irregular/ ---> irregular()
+ |
+ +---> src/svg/index.js -----------> createDrawable()
+ |                                   createMorphTo()
+ |                                   createMotionPath()
+ |
+ +---> src/text/index.js -----------> splitText()
+ |                                   scrambleText()
+ |
+ +---> src/layout/index.js ---------> animateLayout()
+ |
+ +---> src/waapi/index.js ----------> waapi.animate()
+ |
+ +---> src/animatable/index.js -----> animateComputedStyle()
+ |
+ +---> src/utils/index.js ----------> stagger()
+ |                                   random()
+ |                                   chainable()
+ |
+ +---> src/types/index.js ----------> (JSDoc 类型定义,仅用于类型检查)

3.2 核心业务实体与关联

实体定义

实体说明在系统中的角色
Clock时间基类,管理帧率和播放速率所有可定时实体的基础
Timer动画时间控制器,继承 ClockAnimation/Timeline/Draggable 的基类
Engine全局动画引擎单例,继承 Clock驱动主循环,管理所有活跃 Timer
JSAnimation单次动画,继承 Timer操作 Tween 链表,驱动属性动画
Tween动画单元,表示单个属性的插值包含起止值、缓动、类型信息
Timeline动画时间线,继承 Timer管理多个子 Animation 的时间编排
Draggable拖拽控制器,继承 Timer封装鼠标/触摸交互到动画
Scope作用域管理器批量控制一组动画的生命周期
ScrollObserver滚动观察器将滚动位置映射为动画时间
AnimatableCSS 过渡动画控制器驱动 computed style 过渡

实体引用拓扑 (plainText)

text
[Clock]
+  |
+  +------ 1 -----> 1 [Engine] (全局单例)
+  |
+  +------ 1 -----> N [Timer]
+                      |
+                      +------ 1 -----> N [JSAnimation]
+                      |                  |
+                      |                  +-- 1 -----> N [Tween] (属性插值单元)
+                      |                        |
+                      |                        +-- 1 -----> 1 [Composition] (合成模式)
+                      |
+                      +------ 1 -----> N [Timeline]
+                      |                  |
+                      |                  +-- 1 -----> N [JSAnimation] (子动画)
+                      |
+                      +------ 1 -----> N [Draggable]
+                      |
+                      +------ 1 -----> N [Animatable]
+
+[Engine] 1 -----> N [Timer] (双向链表: _head/_tail)
+
+[Scope] 1 -----> N [Timer] (作用域内注册的动画/时间线)
+
+[ScrollObserver] 1 -----> 1 [Timer] (linked 关联)
+
+[Tween]
+  +-- 1 -----> 1 [Target] (DOM元素或JS对象)
+  +-- 1 -----> 1 [Ease] (缓动函数)
+  +-- 1 -----> 0..1 [Modifier] (值修饰函数)

4. 核心模块详解

模块一:Clock - 时间基类

  • 模块名称:Clock(时间系统)

  • 设计说明:Clock 是所有时间相关实体的最底层基类。它封装了帧率控制(_fps)、播放速率(_speed)、时间计算(requestTickcomputeDeltaTime)和子节点链表管理(_head/_tail)。Clock 不负责渲染,只负责时间调度。通过 requestTick(time) 方法判断当前帧是否需要更新(基于帧率的节流),返回 tickModes.AUTOtickModes.NONE

  • 内部结构图 (plainText)

text
+--------------------------------------------------------+
+|                    Clock (时间基类)                      |
+|                                                         |
+|  属性:                                                   |
+|  +------------------------------------+                 |
+|  | _currentTime: Number              | 当前绝对时间      |
+|  | _startTime: Number                | 起始时间          |
+|  | _lastTickTime: Number             | 上次 tick 时间    |
+|  | _scheduledTime: Number            | 下次帧预定时间    |
+|  | _frameDuration: Number            | 帧持续时间(ms)    |
+|  | _fps: Number                      | 帧率              |
+|  | _speed: Number                    | 播放速率          |
+|  | _head: Tickable|null             | 子节点链表头       |
+|  | _tail: Tickable|null             | 子节点链表尾       |
+|  +------------------------------------+                 |
+|                                                         |
+|  方法:                                                   |
+|  +------------------------------------+                 |
+|  | requestTick(time) -> tickModes    | 帧节流判断       |
+|  | computeDeltaTime(time) -> Number  | 计算帧间隔       |
+|  +------------------------------------+                 |
++--------------------------------------------------------+

模块二:Timer - 动画时间基类

  • 模块名称:Timer(动画时间基类)

  • 设计说明:Timer 继承 Clock,是 Animation、Timeline、Draggable 的直接基类。它添加了完整的动画生命周期管理:began(开始)、completed(完成)、paused(暂停)。支持 delay、duration、loop(循环)、alternate(交替反向)、reversed(反向播放)。通过 seek()reset()restart()stretch() 等方法实现对时间的精确控制。内建 Promise 支持(.then() 方法),允许开发者 await 动画完成。Timer 还实现了:revert() 回到初始状态并取消、cancel() 取消并从引擎移除、complete() 立即完成。Timer 在构造函数中通过 scope.current?.register(this) 自动注册到当前作用域。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                      Timer (继承 Clock)                           |
+|                                                                   |
+|  +-----------------------------+  +-----------------------------+|
+|  |    生命周期状态              |  |     循环控制               ||
+|  |  - began: Boolean           |  |  - iterationCount: Number   ||
+|  |  - completed: Boolean       |  |  - iterationDuration: Number||
+|  |  - paused: Boolean          |  |  - _alternate: Boolean      ||
+|  |  - cancelled: Boolean       |  |  - _reversed: Number        ||
+|  +-----------------------------+  +-----------------------------+|
+|                                                                   |
+|  +-----------------------------+  +-----------------------------+|
+|  |    回调函数                  |  |     时间控制               ||
+|  |  - onBegin                   |  |  - _offset: Number          ||
+|  |  - onBeforeUpdate            |  |  - _delay: Number           ||
+|  |  - onUpdate                  |  |  - _loopDelay: Number       ||
+|  |  - onLoop                    |  |  - _priority: Number        ||
+|  |  - onPause                   |  |                             ||
+|  |  - onComplete                |  +-----------------------------+|
+|  +-----------------------------+                                  |
+|                                                                   |
+|  +--------------------------------------------------------------+ |
+|  |  核心方法                                                     | |
+|  |  init() -> this         : 初始化动画参数、fps、speed          | |
+|  |  reset() -> this        : 重置到初始状态                       | |
+|  |  restart() -> this      : reset + resume                      | |
+|  |  seek(time) -> this     : 跳转到指定时间                       | |
+|  |  pause() -> this        : 暂停动画                             | |
+|  |  resume() -> this       : 恢复播放(添加到Engine链表)          | |
+|  |  play() -> this         : 正向播放                             | |
+|  |  reverse() -> this      : 反向播放                             | |
+|  |  alternate() -> this    : 切换播放方向                         | |
+|  |  stretch(newDur) -> this: 拉伸时间                             | |
+|  |  cancel() -> this       : 取消动画(从Engine移除)              | |
+|  |  revert() -> this       : 回退 + 取消                         | |
+|  |  complete() -> this     : 立即完成                             | |
+|  |  then(cb) -> Promise    : Promise 化支持 await                | |
+|  +--------------------------------------------------------------+ |
++==================================================================+

模块三:Engine - 全局动画引擎

  • 模块名称:Engine(全局动画引擎单例)

  • 设计说明:Engine 是全局唯一的动画引擎实例,继承自 Clock。它使用 requestAnimationFrame(浏览器)或 setImmediate(Node.js)驱动主循环。所有活跃的 Timer 通过双向链表(_head_next/_prev)注册到 Engine 上。每帧 Engine 遍历链表,按优先级排序后调用 tick() 进行渲染。Engine 管理:全局 defaults 配置(影响所有动画)、timeScale 全局时间缩放、pauseOnDocumentHidden(页面隐藏时暂停)、_speed 全局播放速率。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                   Engine (全局单例, 继承 Clock)                    |
+|                                                                   |
+|  +-------------------------------+  +----------------------------+|
+|  |  全局配置                     |  |  主循环驱动               ||
+|  |  - defaults: DefaultsParams   |  |  - reqId: Number           ||
+|  |  - useDefaultMainLoop: Bool   |  |  - _lastTickTime: Number   ||
+|  |  - pauseOnDocumentHidden:Bool |  |  - _startTime: Number      ||
+|  +-------------------------------+  |  - engineTickMethod: rAF   ||
+|                                      |  - engineCancelMethod:cAF ||
+|  +-------------------------------+  +----------------------------+|
+|  |  链表管理                     |                                |
+|  |  - _head: Timer (最高优先级)  |  +----------------------------+|
+|  |  - _tail: Timer (最低优先级)  |  |  核心方法                  ||
+|  |  - _hasChildren: Boolean      |  |  - requestTick(time)       ||
+|  +-------------------------------+  |  - wake() : 唤醒引擎      ||
+|                                      |  - pause() : 全局暂停     ||
+|  +-------------------------------+  |  - resume() : 全局恢复    ||
+|  |  全局时间控制                 |  +----------------------------+|
+|  |  - _speed: Number             |                                |
+|  |  - timeScale (globals)        |                                |
+|  +-------------------------------+                                |
++==================================================================+

模块四:Render 渲染核心

  • 模块名称:Render(渲染/心跳系统)

  • 设计说明render()tick() 是 Anime.js 最核心的两个函数。render() 负责计算单个 Tickable 的当前状态(时间、迭代、方向),然后遍历其 Tweens 链表,为每个 Tween 计算当前值并写入目标(DOM style/attribute 或 JS object)。tick()render() 基础上增加了对子节点的递归处理(针对 Timeline),实现子动画的顺序或反向渲染。两个函数密切配合:Engine 的每帧调用 tick(engine, time),逐级传播到所有活跃的 Timer。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                    Render (核心渲染系统)                           |
+|                                                                   |
+|  tick(tickable, time, muteCallbacks, internalRender, tickMode)    |
+|  |                                                                |
+|  +-----> 1. render(tickable, time, ...)  渲染自身                 |
+|  |         |                                                      |
+|  |         +-- 计算: _currentTime, _iterationTime, backwards     |
+|  |         +-- 触发: onBegin, onLoop, onBeforeUpdate             |
+|  |         +-- 遍历 Tween 链表:                                   |
+|  |         |   +-- 计算 tweenProgress (ease)                     |
+|  |         |   +-- lerp fromNumber -> toNumber                  |
+|  |         |   +-- composeValue: NUMBER|UNIT|COLOR|COMPLEX      |
+|  |         |   +-- 写入目标: style/attribute/object            |
+|  |         +-- 触发: onUpdate, onRender                         |
+|  |         +-- 处理: onComplete (循环/正常结束)                 |
+|  |                                                                |
+|  +-----> 2. 如果有子节点 (Timeline)                               |
+|            |                                                      |
+|            +-- 处理循环回调 (onLoop)                              |
+|            +-- 遍历子节点 (正向或反向)                            |
+|            |   +-- render(child, childTime, ...)                  |
+|            +-- 触发 onRender                                     |
+|            +-- 处理 onComplete (所有子节点完成)                   |
++==================================================================+

模块五:Values 值处理系统

  • 模块名称:Values(值解析与合成)

  • 设计说明:Values 系统是 Anime.js 能处理多种值类型的关键。它将动画属性值分解为四种基本类型:NUMBER(纯数字)、UNIT(带单位的数字,如 100px)、COLOR(颜色,如 #ff0000rgb()hsl())、COMPLEX(复合值,如 10px 20px)。对于每种类型,系统能从原始值中提取 fromNumbertoNumber,在渲染时通过 lerp 插值后重新合成为目标格式。此外,系统还支持函数值(每帧动态计算)、相对值(+=100 形式)、以及 additive(加法动画叠加)。

  • 内部结构图 (plainText)

text
+==================================================================+
+|                  Values (值处理核心)                               |
+|                                                                   |
+|  输入: 原始值字符串/数字 ("100px", "#ff0", "10px 20px", 42)      |
+|  |                                                                |
+|  v                                                                |
+|  decomposeRawValue(value)                                         |
+|  +-- 识别类型: NUMBER | UNIT | COLOR | COMPLEX                   |
+|  +-- 提取结构: { numbers, strings, unit, type }                 |
+|  |                                                                |
+|  v                                                                |
+|  decomposeTweenValue(tween)                                       |
+|  +-- 解析 from 值 (原始值/函数值/相对值)                         |
+|  +-- 解析 to 值                                                   |
+|  +-- 处理 modifier (值修饰函数)                                   |
+|  +-- 处理 composition (blend/replace/none)                       |
+|  +-- 存储: _fromNumber, _toNumber, _unit, _valueType            |
+|  |                                                                |
+|  v (每帧渲染时)                                                   |
+|  |                                                                |
+|  lerp(fromNumber, toNumber, progress) -> 插值结果                |
+|  |                                                                |
+|  v                                                                |
+|  合成输出:                                                        |
+|  +-- NUMBER: 直接返回值                                          |
+|  +-- UNIT: number + unit → "100px"                              |
+|  +-- COLOR: composeColorValue() → "rgb(128,255,0)"               |
+|  +-- COMPLEX: composeComplexValue() → "10px 20px"               |
++==================================================================+

5. 关键数据流程

场景一:动画从创建到完成的生命周期

  • 场景说明:用户调用 animate() 创建一个动画。动画参数被解析为 Tweens 链表,通过 Engine 注册到主循环。每帧 Engine 唤醒后遍历活跃的 Timer,调用 tick()render() 计算当前帧的 Tween 值并写入目标。当动画到达 duration 时触发 onComplete,从 Engine 链表中移除。这是 Anime.js 最核心的数据流,贯穿所有动画类型。

  • 流转时序图 (Mermaid)

场景二:Timeline 时间线编排

  • 场景说明:用户创建 Timeline,通过 add() 方法添加子动画。每个子动画在 Timeline 上的位置通过位置参数(绝对/相对/标签偏移)计算。Timeline 的 _iterationTime 驱动所有子动画的 render(),子动画按 _offset 对齐到时间线的不同位置。这是实现复杂动画编排的核心机制。

  • 流转时序图 (Mermaid)

场景三:Tween 合成与冲突处理

  • 场景说明:当多个动画同时修改同一目标的同一属性时,需要进行 Tween 合成(composition)。Anime.js 支持三种合成模式:replace(覆盖旧动画)、blend(混合值)、none(独立运行)。合成系统通过 WeakMap 存储 target + property → Tween[] 的映射,在新动画创建时查找冲突并决定行为。

  • 流转时序图 (Mermaid)

6. 接口与契约规范

6.1 核心内部模块契约 (TypeScript)

typescript
// ============================================================
+// Clock - 时间基类契约
+// ============================================================
+interface IClock {
+  /** 帧间隔时间 (只读) */
+  readonly deltaTime: number;
+  /** 当前绝对时间 */
+  _currentTime: number;
+  /** 起始时间 */
+  _startTime: number;
+  /** 上次 tick 时间 */
+  _lastTickTime: number;
+  /** 预定下次帧时间 */
+  _scheduledTime: number;
+  /** 帧持续时间 (K/fps) */
+  _frameDuration: number;
+  /** 帧率 */
+  _fps: number;
+  /** 播放速率 */
+  _speed: number;
+  /** 是否有子节点 */
+  _hasChildren: boolean;
+  /** 子节点链表头 */
+  _head: Tickable | Tween | null;
+  /** 子节点链表尾 */
+  _tail: Tickable | Tween | null;
+
+  /** 帧节流: 判断是否应该渲染当前帧 */
+  requestTick(time: number): TickMode;
+  /** 计算帧间隔 */
+  computeDeltaTime(time: number): number;
+}
+
+// ============================================================
+// Timer - 动画时间基类契约
+// ============================================================
+interface ITimer extends IClock {
+  /** 唯一标识 */
+  id: string | number;
+  /** 父级 Timer (Timeline) */
+  parent: Timeline | null;
+  /** 总持续时间 */
+  duration: number;
+  /** 是否反向 */
+  backwards: boolean;
+  /** 暂停状态 */
+  paused: boolean;
+  /** 已开始标志 */
+  began: boolean;
+  /** 已完成标志 */
+  completed: boolean;
+  /** 单次迭代持续时间 */
+  iterationDuration: number;
+  /** 总迭代次数 */
+  iterationCount: number;
+  /** 当前迭代索引 */
+  _currentIteration: number;
+  /** 当前迭代内时间 */
+  _iterationTime: number;
+  /** 延迟偏移 */
+  _offset: number;
+  /** 取消标志 */
+  _cancelled: number;
+  /** 自动播放/滚动联动 */
+  _autoplay: boolean | ScrollObserver;
+
+  /** 进度 0-1 (get/set) */
+  progress: number;
+  /** 迭代进度 0-1 (get/set) */
+  iterationProgress: number;
+  /** 当前时间 (get/set) */
+  currentTime: number;
+  /** 迭代内当前时间 (get/set) */
+  iterationCurrentTime: number;
+  /** 当前迭代索引 (get/set) */
+  currentIteration: number;
+  /** 反向标志 (get/set) */
+  reversed: boolean;
+  /** 播放速度 (get/set) */
+  speed: number;
+
+  // 回调
+  onBegin: Callback<this>;
+  onBeforeUpdate: Callback<this>;
+  onUpdate: Callback<this>;
+  onLoop: Callback<this>;
+  onPause: Callback<this>;
+  onComplete: Callback<this>;
+
+  // 控制方法
+  init(internalRender?: boolean): this;
+  reset(softReset?: boolean): this;
+  restart(): this;
+  seek(time: number, muteCallbacks?: boolean, internalRender?: boolean): this;
+  pause(): this;
+  resume(): this;
+  play(): this;
+  reverse(): this;
+  alternate(): this;
+  stretch(newDuration: number): this;
+  cancel(): this;
+  revert(): this;
+  complete(muteCallbacks?: boolean): this;
+  then(callback?: Callback<ResolvedTimer>): Promise<this>;
+  resetTime(): this;
+}
+
+// ============================================================
+// Tween - 动画属性插值单元契约
+// ============================================================
+interface ITween {
+  /** 目标对象 */
+  target: Target;
+  /** 属性名 */
+  property: string;
+  /** Tween 类型 */
+  _tweenType: TweenType;   // OBJECT | ATTRIBUTE | CSS | TRANSFORM | CSS_VAR
+  /** 值类型 */
+  _valueType: ValueType;   // NUMBER | UNIT | COLOR | COMPLEX
+  /** 起始数值 */
+  _fromNumber: number;
+  /** 结束数值 */
+  _toNumber: number;
+  /** CSS 单位 */
+  _unit: string;
+  /** 起始时间偏移 */
+  _startTime: number;
+  /** 变化持续时间 */
+  _changeDuration: number;
+  /** 更新持续时间 (含延迟) */
+  _updateDuration: number;
+  /** 合成模式 */
+  _composition: CompositionType; // replace | none | blend
+  /** 缓动函数 */
+  _ease: EaseFunction;
+  /** 值修饰函数 */
+  _modifier: ModifierFunction;
+  /** 当前时间 */
+  _currentTime: number;
+  /** 是否被覆盖 */
+  _isOverridden: boolean;
+  /** 是否被重叠 */
+  _isOverlapped: boolean;
+  /** 绝对起始时间 */
+  _absoluteStartTime: number;
+  /** 链表下一个 */
+  _next: Tween | null;
+  /** 链表上一个 */
+  _prev: Tween | null;
+}
+
+// ============================================================
+// JSAnimation - 单次动画契约
+// ============================================================
+interface IJSAnimation extends ITimer {
+  /** Tween 链表头 */
+  _head: Tween | null;
+  /** Tween 链表尾 */
+  _tail: Tween | null;
+  /** 目标数组 */
+  targets: TargetsArray;
+  /** 默认参数 */
+  defaults: AnimationParams;
+  /** 渲染回调 */
+  onRender: Callback<this>;
+
+  /** 刷新动画值 (重新读取当前值) */
+  refresh(): this;
+}
+
+// ============================================================
+// Timeline - 时间线编排契约
+// ============================================================
+interface ITimeline extends ITimer {
+  /** 默认子动画参数 */
+  defaults: AnimationParams;
+
+  /** 添加动画到时间线 */
+  add(
+    targets: TargetsParam,
+    params: AnimationParams,
+    position?: TimelinePosition
+  ): this;
+  /** 设置属性 (立即生效) */
+  set(
+    targets: TargetsParam,
+    params: AnimationParams,
+    position?: TimelinePosition
+  ): this;
+  /** 同步子动画 */
+  sync(): this;
+  /** 刷新所有子动画 */
+  refresh(): this;
+  /** 移除子动画 */
+  remove(targets: TargetsParam): this;
+}
+
+// ============================================================
+// Engine - 全局引擎契约
+// ============================================================
+interface IEngine extends IClock {
+  /** 默认参数 */
+  defaults: DefaultsParams;
+  /** 是否使用默认主循环 */
+  useDefaultMainLoop: boolean;
+  /** 页面隐藏时暂停 */
+  pauseOnDocumentHidden: boolean;
+  /** 暂停状态 */
+  paused: boolean;
+  /** rAF/setImmediate ID */
+  reqId: number;
+  /** 上次 tick 时间 */
+  _lastTickTime: number;
+
+  /** 唤醒引擎 */
+  wake(): void;
+  /** 暂停引擎 */
+  pause(): this;
+  /** 恢复引擎 */
+  resume(): this;
+}
+
+// ============================================================
+// 类型枚举
+// ============================================================
+declare const enum TweenType {
+  OBJECT = 0,
+  ATTRIBUTE = 1,
+  CSS = 2,
+  TRANSFORM = 3,
+  CSS_VAR = 4,
+}
+
+declare const enum ValueType {
+  NUMBER = 0,
+  UNIT = 1,
+  COLOR = 2,
+  COMPLEX = 3,
+}
+
+declare const enum TickMode {
+  NONE = 0,
+  AUTO = 1,
+  FORCE = 2,
+}
+
+declare const enum CompositionType {
+  replace = 0,
+  none = 1,
+  blend = 2,
+}

6.2 对外公共 API 契约 (函数签名)

typescript
// ============================================================
+// 核心动画 API
+// ============================================================
+
+/**
+ * 创建单次动画
+ * @param targets - CSS选择器/DOM元素/NodeList/JS对象/数组
+ * @param parameters - 动画参数配置
+ * @returns JSAnimation 实例
+ */
+export function animate(
+  targets: TargetsParam,
+  parameters: AnimationParams
+): JSAnimation;
+
+/**
+ * 创建批量动画 (为每个目标创建独立动画)
+ * @param targets - 目标数组
+ * @param parameters - 动画参数
+ * @returns JSAnimation[]
+ */
+export function createAnimations(
+  targets: TargetsParam,
+  parameters: AnimationParams
+): JSAnimation[];
+
+// ============================================================
+// 时间线 API
+// ============================================================
+
+/**
+ * 创建动画时间线
+ * @param parameters - Timeline 参数 (可选)
+ * @returns Timeline 实例
+ */
+export function createTimeline(
+  parameters?: TimelineParams
+): Timeline;
+
+// ============================================================
+// 缓动函数 API
+// ============================================================
+
+/**
+ * 解析缓动函数 (字符串 → 函数)
+ * @param ease - 缓动名称字符串或函数
+ * @returns 缓动函数 (t: number) => number
+ */
+export function parseEase(
+  ease: string | EaseFunction
+): EaseFunction;
+
+/**
+ * 创建三次贝塞尔缓动
+ * @param x1, y1, x2, y2 - 贝塞尔控制点
+ * @returns 缓动函数
+ */
+export function cubicBezier(
+  x1: number, y1: number,
+  x2: number, y2: number
+): EaseFunction;
+
+/**
+ * 创建弹簧缓动
+ * @param parameters - 弹簧参数 (mass, stiffness, damping, velocity)
+ * @returns 缓动函数
+ */
+export function spring(
+  parameters?: SpringParams
+): EaseFunction;
+
+// ============================================================
+// 工具 API
+// ============================================================
+
+/**
+ * 创建交错延迟
+ * @param value - 每个元素的延迟时间
+ * @param options - 交错选项 (from: 'start'|'center'|'end'|number)
+ * @returns StaggerFunction
+ */
+export function stagger(
+  value: number | StaggerFunction,
+  options?: { from?: 'start' | 'center' | 'end' | number }
+): StaggerFunction;
+
+// ============================================================
+// 作用域 API
+// ============================================================
+
+/**
+ * 创建作用域
+ * @param parameters - 作用域配置
+ * @returns Scope 实例
+ */
+export function createScope(
+  parameters?: ScopeParams
+): Scope;

7. 构建与包结构

text
rollup.config.js
+ |
+ +-- 开发构建 (默认):
+ |     输入: src/**/index.js (从 package.json exports 自动提取)
+ |     输出: dist/modules/ (ESM + CJS, preserveModules)
+ |
+ +-- 生产构建 (build=true):
+       输入: src/index.js
+       输出: dist/bundles/anime.esm.js (ESM)
+             dist/bundles/anime.umd.js (UMD)
+             dist/bundles/anime.esm.min.js (ESM minified)
+             dist/bundles/anime.umd.min.js (UMD minified)
+       + TypeScript: tsconfig.types.json → dist/modules/**/*.d.ts

8. 快速开始

8.1 安装

bash
npm install animejs

8.2 基本用法

javascript
import { animate, stagger } from 'animejs';
+
+animate('.square', {
+  x: 320,
+  rotate: { from: -180 },
+  duration: 1250,
+  delay: stagger(65, { from: 'center' }),
+  ease: 'inOutQuint',
+  loop: true,
+  alternate: true
+});

8.3 开发环境

bash
npm i                    # 安装依赖
+npm run dev              # 开发模式 (监听 src/ 变化)
+npm run build            # 构建所有格式
+npm run test:browser     # 浏览器测试
+npm run test:node        # Node.js 测试
+npm run open:examples    # 浏览示例

8.4 模块化导入

javascript
// 按需导入 (Tree Shaking 友好)
+import { animate } from 'animejs';
+import { createTimeline } from 'animejs/timeline';
+import { spring } from 'animejs/easings/spring';
+import { createDraggable } from 'animejs/draggable';
+import { splitText } from 'animejs/text';
+ + + + \ No newline at end of file diff --git a/insight-labs/repo-insight/echarts.html b/insight-labs/repo-insight/echarts.html index 24827b6..7b65cdb 100644 --- a/insight-labs/repo-insight/echarts.html +++ b/insight-labs/repo-insight/echarts.html @@ -8,10 +8,10 @@ - - - - + + + + @@ -115,7 +115,7 @@ d="m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36z" > -

2. 产品与商业

技术选择方案替代方案及放弃原因
文本测量Canvas measureText()DOM 测量 → 触发同步回流
文本分词Intl.Segmenter(浏览器原生)自建分词器 → 维护成本高,覆盖面窄
运行时ESM only + Bun 工具链CJS → 不支持 tree-shaking
Bidi 处理简化 Unicode Bidi(来自 pdf.js)完整 UBA → 属于渲染层,不在布局层范围
架构模式两阶段 Prepare-Layout 分离单次测量 → 无法在 resize 时复用预计算数据
字体指定字体名system-ui → Canvas/DOM 分辨率不一致

模块职责依赖
API 层layout.ts公共 API 暴露、两阶段协调、类型定义所有下层模块
分析层analysis.ts文本规范化、Intl.Segmenter 分词、胶合规则、CJK/keep-all 预处理
测量层measurement.tsCanvas 测量、段宽度缓存、Emoji 修正、引擎 Profile 检测analysis.ts(isCJK)
行走层line-break.ts段宽度累加、断行判定、行范围输出(4 种模式)analysis.ts(类型), measurement.ts(Profile)
文本层line-text.ts字形缓存、段范围→字符串拼接、软连字符可视化analysis.ts(类型), layout.ts(类型)
Bidi 层bidi.tsUnicode Bidi 分类、嵌入层级计算无(纯数据驱动)
富文本层rich-inline.ts跨项空白折叠、原子项处理、行游标状态机layout.ts, line-text.ts

用例推荐 API
虚拟滚动高度预测prepare() + layout()
Canvas 自定义渲染prepareWithSegments() + layoutWithLines()
浮动图片绕排prepareWithSegments() + layoutNextLineRange() + materializeLineRange()
多行 shrinkwrapprepareWithSegments() + walkLineRanges()
内联富文本 (chip/mention)@chenglou/pretext/rich-inline

目录用途关键文件数
packages/ai/src/核心 SDK~418
packages/provider/src/Provider 接口规范~211
packages/provider-utils/src/Provider 共享工具~201
packages/openai/src/OpenAI Provider~144
packages/react/src/React 集成~12
content/docs/官方文档MDX

目录用途关键文件数
packages/ai/src/核心 SDK~418
packages/provider/src/Provider 接口规范~211
packages/provider-utils/src/Provider 共享工具~201
packages/openai/src/OpenAI Provider~144
packages/react/src/React 集成~12
content/docs/官方文档MDX