当前位置:首页>java>Kotlin委托:让你的代码拥有“神奇助手”,效率提升200%的秘籍!

Kotlin委托:让你的代码拥有“神奇助手”,效率提升200%的秘籍!

  • 2026-02-05 06:07:51
Kotlin委托:让你的代码拥有“神奇助手”,效率提升200%的秘籍!

在日常开发中,你是否经常遇到这样的场景:多个类需要实现相同接口,但又不愿编写重复代码?或者某个属性的getter/setter逻辑复杂且需要在多处复用?Kotlin委托模式正是解决这些痛点的“银弹”!今天,就让我们一起探索这项让代码更加优雅的强大特性。

掌握这种黑科技,轻松实现代码复用与架构解耦

委托模式:编程世界的“专业外包”

想象一下,你是公司的项目经理(委托类),需要完成一个复杂项目(接口实现)。你可以选择自己亲手完成每个细节,也可以将专业部分外包给技术团队(被委托对象)。Kotlin委托就如同这种智能外包机制,让你既能保持控制权,又能享受专业团队的高效。

委托模式的核心价值在于:两个对象参与处理同一请求,接受请求的对象将操作委托给另一个专业对象处理。这种模式在软件开发中极为常见,而Kotlin通过语言层面的by关键字,让实现变得异常简单。

类委托:告别模板代码的利器

基础概念与语法

类委托的核心思想是将接口的实现责任转交给另一个对象。让我们通过一个生动例子来理解:

// 定义能力接口(约束)interface Printer {    funprint(document: String)}// 专业实现类(被委托对象)class LaserPrinter : Printer {    override funprint(document: String) {        println("激光打印机正在打印:$document")    }}// 委托类 - 将打印工作委托给专业设备class OfficeManager(printer: Printer) : Printer by printer {    // 可以添加自己特有的方法    funmanageDocument() {        println("文档管理完成,开始打印...")    }}

使用这个委托系统非常简单:

funmain() {    val laserPrinter = LaserPrinter()    val office = OfficeManager(laserPrinter)    office.manageDocument() // 输出:文档管理完成,开始打印...    office.print("季度报告"// 输出:激光打印机正在打印:季度报告}

与传统实现的对比优势

在没有委托语法的情况下,我们需要手动实现每个方法:

// 传统方式 - 繁琐的模板代码class TraditionalOfficeManager(private val printer: Printer) : Printer {    override funprint(document: String) {        printer.print(document) // 必须手动转发每个方法    }}

而使用委托,编译器自动生成转发代码,当接口有数十个方法时,优势更加明显。

实际应用场景

类委托在这些场景中特别有用:

  • 实现装饰器模式:增强功能而不修改原有类

  • 跨平台开发:将平台特定实现委托给不同对象

  • 测试替身:将实际实现委托给Mock对象

属性委托:智能属性管理大师

属性委托是Kotlin委托的另一个重要方面,它将属性的访问逻辑委托给专门的对象。

基本语法原理

class Example {    var data: String by Delegate()}class Delegate {    private var storedValue: String = "默认值"    operator fungetValue(thisRef: Any?, property: KProperty<*>): String {        println("获取属性 ${property.name}")        return storedValue    }    operator funsetValue(thisRef: Any?, property: KProperty<*>, value: String) {        println("设置属性 ${property.name} 为 $value")        storedValue = value    }}

标准库提供的实用委托

Kotlin标准库内置了多种开箱即用的委托,极大提升开发效率。

1. 延迟初始化(Lazy)

class HeavyResourceManager {    // 只有首次访问时初始化,避免不必要的资源消耗    val expensiveResource: ExpensiveResource by lazy {        println("正在初始化昂贵资源...")        ExpensiveResource() // 假设这里是很耗时的操作    }    funuseResource() {        println("开始使用资源...")        expensiveResource.doSomething() // 第一次调用时才会初始化        expensiveResource.doSomething() // 直接使用已初始化的实例    }}

lazy委托支持三种线程安全模式,满足不同场景需求。

2. 可观察属性(Observable)

class UserSettings {    var themeString by Delegates.observable("Light") { property, old, new ->        println("主题从 $old 切换为 $new")        applyTheme(new// 实际应用新主题    }    var fontSizeInt by Delegates.observable(14) { _, old, new ->        if (new in 8..72) {            println("字体大小从 $old 调整为 $new")        }    }}

3. 条件赋值(Vetoable)

class BankAccount {    var balance: Int by Delegates.vetoable(0) { _, old, new ->        if (new >= 0) {            println("余额从 $old 变为 $new")            true // 允许变更        } else {            println("余额不能为负数!")            false // 拒绝变更        }    }}

4. 映射委托(Map)

class User(val map: Map<String, Any?>) {    val name: String by map    val age: Int by map    val email: String by map}// 使用示例 - 非常适合JSON解析funmain() {    val userData = mapOf(        "name" to "张三",        "age" to 28,        "email" to "zhangsan@example.com"    )    val user = User(userData)    println("${user.name} - ${user.age}岁"// 自动从map获取值}

实战进阶:自定义委托解决复杂场景

实现SharedPreferences委托

class PreferenceDelegate<T>(    private val preferences: SharedPreferences,    private val key: String,    private val defaultValue: T) : ReadWriteProperty<Any, T> {    override fungetValue(thisRef: Any, property: KProperty<*>): T {        return when (defaultValue) {            is String -> preferences.getString(key, defaultValue as? String) as T            is Int -> preferences.getInt(key, defaultValue asInt ?: 0as T            is Boolean -> preferences.getBoolean(key, defaultValue asBoolean ?: falseas T            else -> throw IllegalArgumentException("不支持的类型")        }    }    override funsetValue(thisRef: Any, property: KProperty<*>, value: T) {        preferences.edit().apply {            when (value) {                is String -> putString(key, value)                is Int -> putInt(key, value)                is Boolean -> putBoolean(key, value)            }        }.apply()    }}// 使用示例class AppSettings(preferences: SharedPreferences) {    var userName: String by PreferenceDelegate(preferences, "user_name""Guest")    var notificationEnabled: Boolean by PreferenceDelegate(preferences, "notifications"true)    var loginCount: Int by PreferenceDelegate(preferences, "login_count"0)}

实现防抖点击委托

class ThrottleClickDelegate(    private val interval: Long = 1000 // 默认1秒内防抖) : ReadWriteProperty<Any, () -> Unit> {    private var lastClickTime: Long = 0    private var originalAction: (() -> Unit)? = null    override fungetValue(thisRef: Any, property: KProperty<*>): () -> Unit {        return {            val currentTime = System.currentTimeMillis()            if (currentTime - lastClickTime > interval) {                lastClickTime = currentTime                originalAction?.invoke()            }        }    }    override funsetValue(thisRef: Any, property: KProperty<*>, value: () -> Unit) {        originalAction = value    }}// 使用class MainActivity : AppCompatActivity() {    var onSearchClick: () -> Unit by ThrottleClickDelegate(2000// 2秒防抖    override funonCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        onSearchClick = {            // 执行搜索操作,自动防抖            performSearch()        }        searchButton.setOnClickListener { onSearchClick() }    }}

委托模式的底层原理

理解委托的编译原理有助于更好地使用这一特性。

编译器魔法:代码生成

当我们编写:

classExample{    val data: String by Delegate()}

编译器会大致生成以下代码:

class Example {    private val data$delegate = Delegate()    val data: String        get() = data$delegate.getValue(thisthis::data)}

这种转换在编译期静态完成,运行时几乎没有性能开销

性能优化与最佳实践

1. 正确选择委托类型

  • 轻量级属性:直接使用getter/setter

  • 复杂逻辑属性:使用属性委托封装复杂度

  • 资源昂贵初始化:使用lazy委托延迟初始化

2. 内存管理注意事项

// 正确:委托对象无外部引用class GoodExample {    val heavyResource by lazy { HeavyResource() } // 随GoodExample实例释放}// 注意:委托对象持有外部引用可能导致内存泄漏class LeakRiskExample {    val delegate = DelegateWithContext(this// 可能造成循环引用    val data: String by delegate}

3. 线程安全考虑

// 多线程环境使用同步委托classThreadSafeExample{    val sharedData: String by lazy(LazyThreadSafetyMode.SYNCHRONIZED) {        initializeExpensiveResource()    }}

Kotlin 2.0中的委托增强

根据最新信息,Kotlin 2.0(K2编译器)进一步优化了委托性能,特别是在属性观察和跨平台逻辑中的应用。这些优化包括:

  • 编译速度提升:委托相关的编译时间优化约20%

  • 内存使用优化:减少委托对象的内存开销

  • 跨平台支持:在KMP(Kotlin Multiplatform)中更好的委托支持

总结:何时使用委托?

优先使用委托的场景:

  1. 接口方法转发:多个类实现相同接口且有共同实现

  2. 复杂属性逻辑:需要复用getter/setter逻辑

  3. 资源懒加载:昂贵的初始化操作需要延迟

  4. 属性观察:需要监听属性变化并响应

  5. 跨平台共享:在KMP中共享业务逻辑

避免过度使用的场景:

  1. 简单属性:没有复杂逻辑的直接属性访问

  2. 性能极致敏感:对性能要求极高的底层代码

  3. 简单接口实现:接口方法需要完全自定义实现

Kotlin委托是提升代码质量的神器,它让代码更加:

  • 简洁:减少模板代码,提高可读性

  • 可维护:逻辑集中,修改容易

  • 灵活:易于扩展和替换实现

  • 安全:编译时检查,减少运行时错误

掌握委托模式,意味着你的Kotlin编程水平将迈入高级阶段。从今天开始,在合适的场景中尝试使用委托,你会发现代码质量有了质的飞跃!

尝试在下一个项目中应用委托模式,体验编码效率的大幅提升吧!


觉得这篇文章有帮助吗?点赞、分享、推荐给更多开发者朋友,关注我们获取更多Kotlin高级技巧和最佳实践!

#Kotlin委托#设计模式#代码优化#Kotlin技巧#Android开发

最新文章

随机文章

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