乐于分享
好东西不私藏

读 VS Code 源码:Workbench、服务图和插件宿主

读 VS Code 源码:Workbench、服务图和插件宿主

这一篇读的是 microsoft/vscode。VS Code 很容易被当成“编辑器项目”来泛读:先看编辑区、再看文件树、再看命令面板。这个顺序会把人带进大量 UI 和贡献点细节,最后只记住目录名。

更有效的一条线,是从桌面应用启动开始,一直追到插件被激活:Electron main 进程怎样准备环境,窗口怎样拿到 native configuration,renderer 怎样加载 Workbench,Workbench 怎样合并服务注册,Extension Host 怎样被 main 进程启动,最后 activation event 怎样走到插件的 activate(context)

本文源码基线:本地目录 sources/vscode;分支 main;提交 1f98b39208918cace8d36e2a4f20b7b9282508f1;提交时间 2026-05-31T00:04:28+02:00;提交主题 Avoid leaving detached DOM elements in Getting Started (#319128)。本地根 package.json 声明 name = code-oss-devversion = 1.123.0、入口 main = ./out/main.js;根 product.json 声明 OSS 产品名为 Code - OSS

本文由 AI 辅助整理和改写,可能存在遗漏、理解偏差或版本差异。关键实现请以本文固定的提交、对应源码文件和官方文档为准,自行复核后再用于工程判断。

src/main.ts 开始,但不要停在入口文件

src/main.ts 看起来像入口,实际更像 Electron 进程的校准层。它会处理 portable mode、CLI args、Electron command-line switches、sandbox/GPU sandbox、user data path、crash reporter、vscode-webviewvscode-file scheme,然后等待 Electron app.once('ready')

真正进入业务 main bundle 之前,它还会设置 NLS config 和 code cache path,再通过 bootstrapESM() 动态导入 ./vs/code/electron-main/main.js

这里的重点是:VS Code 的启动不是“加载一个 JS app”。它先把进程级行为、安全 scheme、缓存、NLS 和崩溃上报固定下来,然后才进入 CodeMain。如果从这里开始读,很多后面的窗口、webview、extension host 行为会更容易定位到源头。

Main 进程先有服务,再有窗口

src/vs/code/electron-main/main.ts 里的 CodeMain.startup() 会创建 main 进程的 ServiceCollection,再处理单实例、lockfile、logger、shutdown cleanup,最后创建 CodeApplication(...).startup()

createServices() 里能看到一批窗口之前就存在的服务:EnvironmentMainServiceFileServiceStateMainServiceUserDataProfilesMainServiceConfigurationServiceLifecycleMainServiceIProtocolMainService。这些东西属于 main 进程级底座,窗口只是后面被这些服务打开和管理的 native shell。

到了 CodeApplication,它先配置 Electron session 权限,再注册监听器。Webview origin 和核心 window origin 的权限是分开处理的:webview 只允许特定能力,其他 origin 默认拒绝。这层权限配置直接落在插件生态的安全边界上。

CodeApplication.startup() 还会创建 IPC server、启动 shared process、初始化服务和 IPC channels、处理 protocol URL,然后打开第一个窗口。IExtensionHostStarter 也是在这个阶段被注册到 main 进程服务和 IPC channel 里的。后面本地 extension host 的实际进程创建,会回到这里。

窗口不是空壳,关键在 native configuration

窗口打开的主线在 src/vs/platform/windows/electron-main/windowsMainService.tsWindowsMainService.open() 会先把请求分类成 folders、workspaces、files、empty windows、backup windows、diff/merge/wait marker 等路径,然后才进入窗口加载。

真正进入窗口加载时,openInBrowserWindow() 会组装 INativeWindowConfiguration。这个对象很重,里面有 CLI args、machine ID、appRoot、execPath、codeCachePath、backup path、profiles、home/tmp/userData dirs、remote authority、workspace、filesToOpen、NLS、logs、product、performance marks、OS、color/accessibility state、policy data、CSS modules、window session 等字段。

这一步解释了很多调试问题:为什么某个 profile 没生效,为什么 remote window 行为不同,为什么 backup 或 window reuse 会影响打开结果。VS Code 的 renderer 依赖 main 进程构造好的窗口配置启动,而不是靠全局变量猜环境。

Renderer 侧入口在 src/vs/code/electron-browser/workbench/workbench.ts。它从 preload globals 里 resolve window configuration,设置 NLS、base URL、开发态 CSS import maps,再动态 import vs/workbench/workbench.desktop.main.js。加载完成后,才调用 desktop workbench 的 main(configuration)

Workbench 不是普通前端 SPA

src/vs/workbench/electron-browser/desktop.main.ts 里的 DesktopMain.open() 会先初始化桌面侧服务,同时等待 DOM ready,然后创建 new Workbench(...) 并调用 workbench.startup()

这里最容易误读的是服务注册方式。VS Code 没有把所有服务都直接写进 DesktopMain。文件里反复强调应通过 registerSingleton() 注册服务,因为桌面端、Web 端、共享 workbench 都要进入统一 registry。

src/vs/workbench/browser/workbench.tsinitServices() 会遍历 getSingletonServiceDescriptors(),把前面通过 registerSingleton() 注册的服务放进 collection,再创建 InstantiationService。这就是 Workbench 的基本组织方式:服务 token、实现类、lazy/eager 实例化、contribution import side effects,共同组成一张运行时服务图。

所以 src/vs/workbench/workbench.desktop.main.ts 不能当普通 barrel file 看。它的大量 import 都带副作用:注册服务、贡献点、actions、views、extension API participants。和 extension host 相关的 nativeExtensionServiceextensionHostStarterextensionHost.contribution,也是通过这条 bundle import 链进入 Workbench。

插件不直接跑在 renderer 里

NativeExtensionService 是 desktop Workbench 里的关键对象。它会创建 extension scanner、extension host factory、extension host kind picker,并作为 IExtensionService 的 eager singleton 进入工作台。

插件会跑在哪里,不是简单由“本地安装”决定。NativeExtensionHostKindPicker 会结合 extensionKind、本地/远端安装位置、remote authority、web worker host 能力来判断:

  • ui 且本地安装,通常跑 local process。
  • workspace 且远端安装,跑 remote host。
  • workspace 但没有 remote,会回到 local process。
  • web 且本地安装且启用 web worker,可能跑 local web worker。

这也是 VS Code 源码最有价值的地方之一:它把插件运行位置收敛成可解释的策略,避免让判断散落在各处的 if/else 里。

本地进程 host 的启动链路在 localProcessExtensionHost.ts。renderer 侧先决定需要 extension host,准备环境变量、debug port、inspect 参数、MessagePort 和握手 nonce;但实际创建进程的是 main 进程里的 extensionHostStarter.ts。它会创建 WindowUtilityProcess,类型是 extensionHost,entry point 是 vs/workbench/api/node/extensionHostProcess

换句话说,本地 extension host 的边界是:renderer 负责发起和握手,main 进程负责创建 utility process,extension host process 再通过 MessagePort/RPC 接回 renderer。

RPC 才是插件 API 的真实边界

src/vs/workbench/services/extensions/common/rpcProtocol.ts 里的 RPCProtocol 用 proxy identifier 把 $method 调用封成跨进程 RPC。getProxy(identifier) 会创建远端 proxy,JS Proxy 拦截 $ 开头的方法名,再调用 _remoteCall(rpcId, name, args)

接口地图在 src/vs/workbench/api/common/extHost.protocol.ts。里面的 MainContextExtHostContext 定义了两边能互相调用的对象,例如 MainThreadExtensionServiceExtHostExtensionService

mainThreadExtensionService.ts 展示了这条桥怎么接起来:main-thread customer 从 extHostContext.getProxy(ExtHostContext.ExtHostExtensionService) 拿到 ext host proxy,再把 $startExtensionHost$activateByEvent$activate 等调用转成远端调用。

这能纠正一个常见误解:插件 API 不是 renderer 里的一堆直接函数调用。真实边界是一组 MainThread/ExtHost 双边对象和 RPC proxy。理解这层,才能理解为什么 VS Code 可以把插件放到 local process、web worker 或 remote host,而上层 API 仍然保持相对一致。

Activation 不是 require(main).activate() 这么简单

插件激活要分 renderer side 和 extension host side 看。

Renderer side 在 extensionHostManager.ts。它会设置 extension registry,启动 extension host,并在 activateByEvent() 时检查扩展集合里是否包含对应 activation event,再调用 ext host proxy。

Extension host side 在 extHostExtensionService.ts 和 Node 版 extHostExtensionService.ts。它先等待 workspace 初始化和 ready barrier,再根据事件或 extension id 进入 _activateExtension()。真正执行之前,还要判断 ESM/CJS、加载模块、创建冻结的 ExtensionContext,包括 global/workspace state、secrets、subscriptions、extensionUri/path、storage/log URI、extensionMode、extensionRuntime 等。

最后才会检查 extensionModule.activate 是否是函数,并调用 activate(context)。成功后还会上报 code loading、activate call、activate resolved 等 timing;失败路径也会归因到对应 extension。

extensionsRegistry.tsextensionDescriptionRegistry.ts 则解释了 manifest 的另一半:contributes schema、activationEvents schema、extension point 注册、activation event 到 extension description 的索引。也就是说,插件会先被注册和索引,再由事件触发激活,不是运行时临时扫一遍 package.json。

最后的判断:VS Code 的核心是可扩展平台骨架

读完这条链路,我对 VS Code 源码的判断是:它最值得学习的不是“编辑器 UI 怎么写”,而是一个大型桌面工具平台怎样把边界拆清楚。

Electron main 进程负责单实例、进程级配置、IPC channel、安全 session 和 native service。窗口层负责路径分类和 native configuration。Renderer bootstrap 负责把配置带进 Workbench。Workbench 用 service registry、DI 和 import side effects 组织服务与贡献点。Extension service 决定插件运行位置。Local extension host 通过 main 进程 utility process 启动。RPCProtocol 把 MainThread/ExtHost 双边接口接起来。Activation runtime 再把 manifest、activation event、loader、context、timing 和错误处理串成完整生命周期。

如果继续读 VS Code,建议不要从目录百科开始。按这条顺序走:src/main.tsCodeMainCodeApplicationWindowsMainService、renderer workbench bootstrap、DesktopMainWorkbench.startup()workbench.desktop.main.tsNativeExtensionServicelocalProcessExtensionHost.tsextensionHostProcess.tsextHost.protocol.tsextHostExtensionService.ts

VS Code 的项目价值,在于它把“桌面应用、服务容器、插件宿主、远程能力和 API 边界”做成了一套可持续扩展的骨架。源码阅读最该带走的,也正是这套骨架如何启动、连接、隔离和激活。

                 
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-24 23:12:55 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/785186.html
  2. 运行时间 : 0.101611s [ 吞吐率:9.84req/s ] 内存消耗:4,731.83kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0dab3e4bc17b2625897dc9ea927e18e8
  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 ( 3.94 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 ( 9.87 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.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000598s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000943s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000364s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000251s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000573s ]
  6. SELECT * FROM `set` [ RunTime:0.000207s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000623s ]
  8. SELECT * FROM `article` WHERE `id` = 785186 LIMIT 1 [ RunTime:0.000418s ]
  9. UPDATE `article` SET `lasttime` = 1782313975 WHERE `id` = 785186 [ RunTime:0.000783s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000219s ]
  11. SELECT * FROM `article` WHERE `id` < 785186 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000414s ]
  12. SELECT * FROM `article` WHERE `id` > 785186 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000377s ]
  13. SELECT * FROM `article` WHERE `id` < 785186 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000763s ]
  14. SELECT * FROM `article` WHERE `id` < 785186 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000748s ]
  15. SELECT * FROM `article` WHERE `id` < 785186 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001134s ]
0.105610s