乐于分享
好东西不私藏

组装线:四层补丁叠出一棵树|dsh源码篇EP03

组装线:四层补丁叠出一棵树|dsh源码篇EP03

大家好,我是郑同学。上一篇拆完 Cordis,文尾留了一个问题:那棵树本身是怎么叠出来的。先看两个本机实跑的命令:

$ cat ~/.dsh/profiles/web/cordis.yml            # web 这份 profile 的根文件

[]                                               # 内容:一个空清单

$ dsh web --dump-config | grep -c '^- id:'       # 实际要启动的完整清单

135

空文件怎么长出 135 行:由四摞补丁叠出——组合包(bundle)层 78 行、web 应用层 57 行、你的层 0、临时层 0,叠放顺序固定,后写胜出。本篇沿组装线走七站,先给一句口诀作为全文总纲,每站可对照:

补丁四层摞,后写盖前写;行是数据,树认 id;冷热一条线,dump 是干跑

 

图:dsh 组装线全数据流转——从盘上四个文件到 135 行在岗清单,每步真实输入输出

● ● ●

第 1 站:四层的出身——从盘上收齐一摞补丁

组装线的输入在盘上。web 这份 profile 的目录(真实文件,四项):

~/.dsh/profiles/web/

├── package.json          ← 声明叠哪些 bundle

├── cordis.yml            ← 根文件:空清单 [](开头见过)

├── cordis.patch.yml      ← 你的层:现在是空的 []

└── pnpm-workspace.yaml   ← 装插件时 pnpm 用

四摞补丁的来源与缺失行为(composeProfile,profile-boot lib:166):

来源
文件不在时
bundle 层
package.json 的 dsh.profile.bundles 逐包解析
启动报错
你的层
profile 目录的 cordis.patch.yml
启动报错
home 层
~/.dsh/cordis.patch.yml(全机偏好)
当空层
临时层
--patch
 传的文件,按出现顺序
启动报错

两类读法的边界是明确的:bundle 的补丁文件由 package.json 显式声明,属于必需文件,缺失即启动失败;home 层与根文件是可选文件,缺失时按空层处理。这与上一篇的 fail-loud 原则一致:能确定为配置错误的,启动时直接报出,不静默跳过。

收齐后由 allPatches 按固定顺序叠放:bundle 层在下,依次是你的层、home 层、临时层(profile-boot lib:147)。composeProfile 会先干跑一遍合并、建立 id 索引,据此决定是否追加两张自动补丁(预设目录、遥测开关);这一步只做合并计算,不启动插件,第 7 站的 dump 复用的是同一个函数。

本站输入 → 输出

输入   ~/.dsh/profiles/web/ 的四个文件,其中 package.json

       声明 bundles = [@deepseek-ai/dsh-base, @deepseek-ai/dsh-web-app]

输出   allPatches 的有序补丁数组:

       [ base 78 条, web-app 57 条, 你的 0 条, 临时 0 条 ]

本站完整链路

 

图:第 1 站完整链路——盘上四个文件收齐成一摞有序补丁

● ● ●

第 2 站:空根文件——include 服务把文件变成树

四摞补丁收齐后交给 boot:挂一根 include 行,行内携带根文件路径与未合并的四摞补丁(app-boot lib:964)。接收方 include 服务是一个由文件供货的树:行列表不来自代码,而来自读文件加叠补丁。

初始化做三件事(include lib:203):读根文件(空清单 [])、解析成行列表、连同补丁一并上树。读文件前先做内容比对:内容与上次一致即返回 undefined,解析不再发生,热重载的每次触发都先经过这道检查。

include 内部有一个三行的串行队列 enqueue(include lib:157)。树的差异更新不可重入:初始化的上树与文件监听触发的刷新并发时,建行与回滚会在同一批行上交错,更新挂起。enqueue 把所有更新排进同一条 Promise 链,前一个执行完(无论成败)后一个才开始,保证树的状态串行变化

本站输入 → 输出

输入   根文件 cordis.yml:原文 '[]',解析出行列表 data = []

输出   apply(candidate):携带第 1 站的补丁摞,

       先合并(第 3 站)、再上树(第 4 站)

本站完整链路

 

图:第 2 站完整链路——根行挂载到 include 服务的初始化

● ● ●

第 3 站:合并算法——applyEntryPatches 逐行

本站处理合并:根文件的 [] 加四摞补丁,产出 135 行。合并函数 applyEntryPatches 上一篇第 2 站贴过 15 行简化版(深拷贝 → 建 id 索引 → 插入/覆盖两分支),此处不再重复,只补两点。

第一点:完整版的四道校验——组校验(向非组行插入)、id 必填、目标缺失、name 不匹配——均为「警告并跳过该条」,不报错中止。原因:同一份 overlay 可能被多个界面共用,为 headless 写的补丁里有一行 web 树没有,不应导致整个 web 启动失败。函数首行深拷贝的原因(insert 的行按引用进树,防止覆盖被写入 bundle 层)上一篇第 8 站已讲,不再展开。

第二点:覆盖语义。两个 bundle 的 cordis.patch.yml 节选(插入与覆盖的形态上一篇已见过):

# dsh-base:一整摞 insert,78 行从这里进树

insert:

    - idtimer

name'@deepseek-ai/cordis-plugin-timer'

# dsh-web-app:对 base 已有行的覆盖

idhmr

disabledtrue

# 只覆盖 disabled,config 没带 → base 给的原样保留

补丁的每个键整体替换,不做字段级深合并——config 是一个键,携带即整份替换。只改 openAt 时必须重述全部保留字段:

# 想把 openAt 改成 first-search,这样写是错的:

idsession-query-sqlite

config:

openAtfirst-search

# path 字段没了:整份 config 被换成这一个字段

# 必须重述保留:

idsession-query-sqlite

config:

path':memory:'

openAtfirst-search

本机 web 的行数在本站确定:[] + 78 + 57 = 135 行。

本站输入 → 输出

输入   data = [](根文件)

       + 补丁摞(base 的 insert 78 条、web-app 的覆盖…)

输出   135 行的新列表,节选真实一行:

       { id: 'hmr',

         name: '@deepseek-ai/cordis-plugin-hmr',

         config: { root: ['.'] },   ← base 插入时给的

         disabled: true }           ← web-app 后来压的

本站完整链路

 

图:第 3 站完整链路——空清单叠四摞补丁合成 135 行

● ● ●

第 4 站:差异事务——树怎么接住一份新清单

合并出的 135 行交给树的 update(loader lib:76)。代码里没有独立的 diff 函数——差异由新旧两张 id 索引对比得出

asyncupdate(config) {

// 先全体查重:同一层里 id 重复,当场报错

// 新列表逐行走 create——已存在的 id 就是「按新 options 更新」

constoutcomes=await Promise.allSettled(

config.map((options) => this.create(options)))

// 旧列表里有、新列表里没有的 id → 拆掉

// 全部成功 → 新列表正式接管

// 任何一步失败 → 回滚:新建的逆序拆掉、拆掉的重建回来

}

树不做全量重装:改一行补丁,134 行不变,仅 1 行走更新,这是热重载开销低的原因。任一步失败即整笔回滚,不停留在半更新状态。create 内部对单行的处理在下一站。

本站输入 → 输出

输入   新列表 135 行(第 3 站的输出),树的现状:

       冷启动 = [](空树)

       热重载 = 上一版 135 行

输出   冷启动:135 行全部 create

       热重载:134 行差异为空不动,1 行进单行决策

本站完整链路

 

图:第 4 站完整链路——135 行清单进入差异事务

● ● ●

第 5 站:单行决策——不动、拆掉、原地重启、换插件重来

create 最终落到每一行的 entry.update(loader lib:395),决策分支如下:

diff 内容
走哪路
插件对象
模块重导吗
无差异且不强制
不动
不动
新变禁用
拆掉
只改了 config
原地重启
同一个
改了 name
换插件重来
新模块的导出
改了 inject/group
换插件重来
同一个

路三(只改 config)是热重载最常走的分支:不换插件对象、不重导模块,把 fiber 拆除后按新 config 重新拉起,中间经过 internal/update 瀑布(上一篇讲过的否决点,第 6 站会被 include 使用)。路四(换插件)先拆旧行、再起新行,起新失败时回滚旧插件;错误信息携带行 id 与模块名,调用栈定位到配置行

最后补上一篇未展开的一环:行的 config 如何进入插件、未写 config 的行使用什么默认值。三步(loader lib:527 → cordis lib:955 / 1066):

// 第一步:行启动,行里的 config 交给 registry.plugin

fiber=this.ctx.registry.plugin(pluginthis.options.config)

// 第二步:Fiber 启动前解析——插件声明了 Config schema 就过一遍校验

functionresolveConfig(runtimeconfig) {

if (!runtime.Configreturnconfig

// 非法 → 启动即抛 ValidationError

// 合法 → 返回标准化后的值,schema 里的默认值在这一步填充

returnruntime.Config["~standard"].validate(config).value

}

// 第三步:插件拿到 config——它是插件函数的第二个参数

// 类插件:new callback(ctx, this.config)

// 函数插件:callback(ctx, this.config)

示例是开篇那行 hmr(cordis-plugin-hmr lib:440):

Hmr.Config=z.object({

root:z.array(String).default(["."]),

debounce:z.natural().default(100),

})

base 给 hmr 写的 root: ['.'] 与 schema 默认值相同;debounce 没有任何一层提供,启动时由 schema 填充。行的 config 只是输入,插件实际收到的是 schema 解析后的值;未声明 Config 的插件原样传入。路三的重启走同一流程:新 config 重新过一遍 schema。这也解释了 dump 输出的一个现象:dump 打印的是盘上行,未写 config 的行为空,默认值在启动时才填充。

本站输入 → 输出

输入 → 输出(同一行的前后两份 options):

  hmr:  disabled: false → true

        diff = [disabled]  → 路二,拆掉

  session-query-sqlite:  openAt: never → first-search

        diff = [config]   → 路三,原地重启

本站完整链路

 

图:第 5 站完整链路——一行的四路决策与回滚

● ● ●

第 6 站:保存之后——一次热重载的完整内部链

前五站是冷启动路径。热重载的整条概览上一篇第 7 站已给出:保存 → hmr 监听 → 四层重组深拷贝 → entry.update 只改根行 config → include 重放补丁 → 树计算差异。本站只讲概览未覆盖的三个内部环节——否决、排队、基底不动。完整链路(app-boot lib:761 → include lib:139),增量标注在箭头处:

保存 cordis.patch.yml

  ↓ 上一篇第 7 站的概览部分:监听触发 → 四层重读、重叠、深拷贝

entry.update({ config: { patches } })        ← 对根行只改 config

  ↓ 决策表:diff 只有 config → 路三

fiber.update → internal/update 瀑布

  ↓ 增量一:Include 的监听者接住(path 匹配),

  │          不调 next → 否决默认的重启

  ↓ 增量二:enqueue 排进串行队列(第 2 站的那三行)

applyPatches(this.data, 新四摞)              ← 增量三:基底还是根文件的 []

  ↓

root.update(合并结果) → 第 4 站差异事务收尾

这条链的关键:变更的是补丁,不是根文件this.data(根文件解析结果)始终是 [],每次热重载都以「原基底 + 新四摞」重新合并,根文件在盘上不变。

修改生效靠新补丁参与合并,撤销靠删掉该行后合并结果复原,两个方向都不触碰根文件。

冷启动的组装线被热重载完整复用——同一条线,冷时叫启动,热时叫重载

本站输入 → 输出

输入   cordis.patch.yml 新增的一行(第 3 站的正确写法):

       - id: session-query-sqlite

         config: { path: ':memory:', openAt: first-search }

输出   树仍为 135 行:该行 config 变化 → 路三原地重启;

       其余 134 行 diff 为空,不动

本站完整链路

 

图:第 6 站完整链路——一次补丁热重载的完整内部链

● ● ●

第 7 站:透视镜——dump-config 为什么可信

回到开篇的命令。dsh web --dump-config 的输出与真实启动一致,原因在合并入口:dump 干跑走的 composeEntries 调用的正是第 3 站的 applyEntryPatches——同一函数、同一输入,boot 时建树,dump 时打印。源码注释:a dump can never drift from what boots(dump 永不偏离启动)。

dump 输出中,每个区段顶部的 # == 注释标明出处(真实输出):

# == @deepseek-ai/dsh-base

- id: timer

  name: '@deepseek-ai/cordis-plugin-timer'

# == @deepseek-ai/dsh-base, patched by @deepseek-ai/dsh-web-app

- id: hmr

  disabled: true

hmr 行即第 3 站示例的验证:行来自 base,disabled 由 web-app 覆盖。据此,「插件为什么没生效」的排查对应三个检查项,全部可在 dump 中直接完成:是否进树(检索行 id)、是否被覆盖(看 # == 注释的 patched by 与 config 是否被整份重述)、是否被禁用(看 disabled 或 !!js 在当前平台的求值结果)。

本站输入 → 输出

输入   $ dsh web --dump-config

输出   135 行清单 + 每行顶部的 # == 出处注释

       (即上面那段真实输出,与启动一致)

本站完整链路

 

图:第 7 站完整链路——dump 与 boot 共用一条合并线

● ● ●

对照:每个用户动作对应的内部路径

用户操作
内部路径
第一次敲 dsh web(目录不存在)
随包模板生成 profile 目录,根文件写为 [](第 1 站)
编辑 cordis.patch.yml 后保存
第 6 站热重载链,未变的行不动
dsh web --patch ./试验.yml
读文件进临时层,叠在最上,本次有效不落盘(第 1 站)
升级某个 bundle
差异事务按 id 对比,变化的行走单行决策(第 4、5 站)
删除自己写的补丁行
合并结果复原,树拆除多出的行(第 4 站)
dsh web --dump-config
同一合并函数干跑,# == 标注每行出处(第 7 站)

收尾重复口诀:补丁四层摞,后写盖前写;行是数据,树认 id;冷热一条线,dump 是干跑。这份 135 行的清单始终只是数据:从四个文件叠出,热重载时重新合并,dump 时干跑合并;树只对行的集合做差异事务,与行所属的层无关。下一篇拆这棵树上最核心的一行——Agent Loop 的 kick、turn、step 双层循环。


素材(行号=npm 编译产物 lib/index.js):profile-boot lib:147/166 · app-boot lib:540/575/761/793/812/964 · include lib:57/116/129/157/170/203/233/243 · loader lib:76/119/373/395/454/483/527 · cordis lib:955/1066/1409/1426 · cordis-plugin-hmr lib:440 · dsh-base、dsh-web-app 的 cordis.patch.yml · 本机实跑 dump(/tmp/dsh-dump-web.txt)

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-28 00:21:59 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/974854.html
  2. 运行时间 : 0.274270s [ 吞吐率:3.65req/s ] 内存消耗:4,791.48kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a05a0c7ea8f765c5dac746802c6e36d1
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 4.22 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 10.56 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.11 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001109s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001244s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002319s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.006207s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001212s ]
  6. SELECT * FROM `set` [ RunTime:0.004395s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001389s ]
  8. SELECT * FROM `article` WHERE `id` = 974854 LIMIT 1 [ RunTime:0.016384s ]
  9. UPDATE `article` SET `lasttime` = 1787847719 WHERE `id` = 974854 [ RunTime:0.004703s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000668s ]
  11. SELECT * FROM `article` WHERE `id` < 974854 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001083s ]
  12. SELECT * FROM `article` WHERE `id` > 974854 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.005204s ]
  13. SELECT * FROM `article` WHERE `id` < 974854 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.031026s ]
  14. SELECT * FROM `article` WHERE `id` < 974854 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003567s ]
  15. SELECT * FROM `article` WHERE `id` < 974854 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.014649s ]
0.278123s