当前位置:首页>电子书资讯>Unity 电子书|SO 模块化架构|五|事件通道

Unity 电子书|SO 模块化架构|五|事件通道

  • 2026-04-02 03:01:37
Unity 电子书|SO 模块化架构|五|事件通道

本文最后更新于 2026 年 1 月 23 日。

摘要

本文是《Unity 电子书|SO 模块化架构》系列文章的第五篇,利用 ScriptableObject 实现事件通道。通过 SO 作为中介,实现发布者与订阅者松耦合通信。相比单例或直接引用,该模式提供了更好的模块化、可测试性,并极大提升了设计师在编辑器中的工作自由度。

核心概念

观察者模式基础

在观察者模式中,发布者(Subject)负责向一个或多个观察者(Observer)广播消息。关键在于发布者不需要知道观察者的具体身份,观察者也不需要知道彼此的存在,从而实现了松耦合。

ScriptableObject 事件通道

SO 事件通道就像是一个无线电塔。发布者(如玩家控制器)向 SO 发送信号。SO 资产作为中介,将信号广播出去。订阅者(如 UI、音效管理器)监听这个 SO 资产,一旦收到信号就做出响应。

三个核心要素

一个标准的事件通道通常包含:委托(Delegate)使用 UnityAction 或 System.Action 来通知订阅者;event 关键字限制委托只能从 SO 内部调用,保证安全性;RaiseEvent 方法供外部对象调用以触发事件。

关键优势

项目级资产存在于项目文件夹中,全局可访问,不会随场景加载而销毁。无全局状态副作用,避免了单例模式带来的紧耦合和测试难题。

单例模式作为全局访问点,允许任何类直接调用,这使得依赖关系隐藏在代码深处,导致模块间紧密耦合,难以拆分重用。

同时,单例持有的全局状态在测试间共享,无法隔离,容易导致测试相互干扰。

即使使用独立场景并在测试前后复原值,也难以保证完全的隔离。单元测试强调的是“隔离性”而非“恢复性”,每个测试应当完全独立,不依赖执行顺序。状态恢复方案往往存在遗漏风险(如未注销的静态事件订阅、隐藏的内部缓存等),这不仅增加了测试的维护成本,还违背了单元测试快速、可靠的原则,容易导致难以排查的“幽灵”错误。

此外,单例难以被 Mock 对象替代,使得编写纯粹的单元测试变得异常困难。

Mock 对象是在单元测试中使用的模拟对象,用于替代真实的依赖项。开发者可以预设它的行为和返回值,从而隔离被测试的代码。这样能确保测试环境纯粹、可控,不再依赖数据库或网络等外部系统,让测试专注于逻辑本身。

与纯代码编写对比的优势

耦合度

纯代码模式高,对象间需要直接引用或依赖单例,难以拆分和扩展。SO 事件通道低,通过中介解耦,发布者和订阅者互不依赖。

可测试性

纯代码模式差,单例引入全局状态,单元测试困难。SO 事件通道好,可以轻松替换为测试用的 SO 实例。

设计师友好度

纯代码模式低,修改逻辑通常需要程序员介入。SO 事件通道高,设计师可在 Inspector 中拖拽配置事件连接,无需编程。

跨场景通信

纯代码模式需特殊处理(如 DontDestroyOnLoad)。SO 事件通道天然支持,SO 资产独立于场景生命周期。

调试便利性

纯代码模式需断点或 Log。SO 事件通道高,可通过 Editor 脚本添加按钮手动触发事件测试。

协作冲突

纯代码模式易冲突,逻辑硬编码在脚本或预制体中。SO 事件通道少,事件配置独立于场景,多人协作更安全。

简单最佳实践

基础事件通道(无参数)

最简单的事件通道不传递任何数据,仅作为信号。

using UnityEngine;

using UnityEngine.Events;

[CreateAssetMenu(menuName = "Events/Void Event Channel")]

publicclassVoidEventChannelSO : ScriptableObject

{

publicevent UnityAction OnEventRaised;

publicvoidRaiseEvent()

    {

if (OnEventRaised != null)

            OnEventRaised.Invoke();

    }

}

订阅与取消订阅

在 MonoBehaviour 中使用时,务必注意生命周期管理,防止内存泄漏。

publicclassStartGame : MonoBehaviour

{

    [SerializeFieldprivate VoidEventChannelSO m_onNewGameButton;

privatevoidOnEnable()

    {

// 务必在 OnEnable 订阅

if (m_onNewGameButton != null)

            m_onNewGameButton.OnEventRaised += StartNewGame;

    }

privatevoidOnDisable()

    {

// 务必在 OnDisable 取消订阅

if (m_onNewGameButton != null)

            m_onNewGameButton.OnEventRaised -= StartNewGame;

    }

privatevoidStartNewGame()

    {

// 游戏逻辑...

    }

}

带参数的事件通道

你可以创建携带数据的事件通道,例如传递整数(分数、伤害)或向量(位置)。

[CreateAssetMenu(menuName = "Events/Int Event Channel")]

publicclassIntEventChannelSO : ScriptableObject

{

publicevent UnityAction<int> OnEventRaised;

publicvoidRaiseEvent(intvalue)

    {

if (OnEventRaised != null)

            OnEventRaised.Invoke(value);

    }

}

</int>

EventListener 组件

为了让非程序员也能配置响应逻辑,可以创建一个通用的监听器组件。

publicclassVoidEventListener : MonoBehaviour

{

    [SerializeFieldprivate VoidEventChannelSO m_channel;

public UnityEvent OnEventRaised; // 在 Inspector 中配置响应

privatevoidOnEnable()

    {

if (m_channel != null) m_channel.OnEventRaised += Respond;

    }

privatevoidOnDisable()

    {

if (m_channel != null) m_channel.OnEventRaised -= Respond;

    }

privatevoidRespond()

    {

        OnEventRaised?.Invoke();

    }

}

这样,设计师只需将 VoidEventListener 挂载到物体上,拖入对应的事件通道 SO,然后在 OnEventRaised 列表中关联如 AudioSource.Play 或 GameObject.SetActive 等方法。

不同人群锐评

纯程序员角度

“这实现了真正的发布-订阅解耦,非常符合依赖倒置原则(DIP)。相比于满天飞的单例和静态事件,SO 事件通道让代码更加干净、可测试。虽然需要手动在 Inspector 中拖拽引用稍微繁琐,且必须严格管理 += 和 -= 以防内存泄漏,但为了架构的整洁性,这些代价是值得的。”

纯策划角度

“这简直是革命性的工具!以前我想改个‘吃到金币后播放特效’的逻辑,都得求程序改代码。现在我只需要在编辑器里把‘金币事件’连上‘特效播放器’就行了。我可以随意尝试不同的玩法组合,比如让‘跳跃’也触发‘得分’,完全不需要写代码,太自由了。”

独立开发者角度

“这是一个前期投入与长期收益的权衡。如果是两天的 Game Jam,我可能直接写代码更快。但如果是要做一个长线项目,SO 事件通道是必选项。它特别适合我这种既写代码又做设计的人——写代码时我搭建好通道,做设计时我就能像搭积木一样组装玩法。不过要注意别过早优化,只有当系统确实需要解耦时再引入,避免把简单逻辑搞复杂。”

写在最后

事件通道模式又体现了“一切皆资产”思维的另一个方面—事件关系也可以资产化。

这种极致的资产化思维,将编程工作从单纯的“编写逻辑”转变为“搭建框架 + 配置资产”。

对于团队协作和长期维护的项目,这是一种非常值得投资的架构方式。

不过,事件驱动架构的松耦合可能也会造成事件触发调试困难,可能需要一些追踪办法。

电子书中有一点内容:任何一个对象都可以是发布者,任何一个对象也都可以是订阅者。

在代码编写中,通常是发布者,拥有一个公共 event 事件字段。而订阅者只有一个订阅事件的方法,他们是不能直接转换的,如果想要修改角色,则必须修改代码。

而 SO 事件通道,只要对象拥有事件通道的引用,那么他可以同时担任发布者和订阅者,不需要修改代码的结构。分析原因,实际上是代码层面直接让每一个对象都持有了一个事件字段和触发方法。

最新文章

随机文章

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