当前位置:首页>Linux>Linux 显示服务器与合成器架构详解

Linux 显示服务器与合成器架构详解

  • 2026-02-05 23:34:05
Linux 显示服务器与合成器架构详解
目录
  • 1. 引言
    • 1.1 显示服务器
    • 1.2 合成器
    • 1.3 客户端
    • 1.4 历史演化
      • 1.4.1 X11 的架构包袱
      • 1.4.2 Wayland 的极简主义与强隔离
  • 2. 总体架构
  • 3. 合成器剖析
    • 3.1 协议处理与资源管理
    • 3.2 场景图
    • 3.3 渲染后端
    • 3.4 DRM/KMS 后端与 Session 管理
  • 4. 缓冲区模型与生命周期
    • 4.1 共享内存 vs DMA-BUF
    • 4.2 缓冲区生命周期与显式同步
  • 5. 输入事件处理
    • 5.1 流程
    • 5.2 剪贴板与数据交换
  • 6. 硬件加速高级路径
    • 6.1 直接扫描
    • 6.2 硬件叠加层
    • 6.3 现代显示特性
  • 7. XWayland
  • 8. 典型合成器实现对比
  • 9. 调试与性能优化
    • 9.1 协议调试
    • 9.2 渲染调试
    • 9.3 性能追踪
  • 10. 总结

1. 引言

从 X11 到 Wayland 的演进不仅是协议的更替,更是 Linux 图形栈设计哲学的一次彻底重构,它标志着图形系统从“服务器中心化渲染”向“客户端直接渲染”的范式转移。本文将深入解构现代合成器(Compositor)的内部架构,剖析从应用渲染到屏幕显示的完整数据流,揭示零拷贝(Zero-Copy)、直接扫描(Direct Scanout)以及原子显示提交(Atomic KMS)等核心机制背后的工程原理。

在深入代码和协议之前,我们需要明确现代图形栈中的三个核心角色,以及它们定义的变化。

1.1 显示服务器

在传统的 X11 模型中,X Server 显示服务器(Display Server)是绝对的中心。它是一个庞大的守护进程,负责:

  • 绘图:接收客户端的绘图指令(如画一条线、填充矩形),执行服务器端渲染。
  • 硬件管理:直接控制显卡和输入设备(在 KMS 普及前,X Server 甚至需要自带显卡驱动)。
  • 窗口管理:维护着全局的窗口树、字体资源和绘图上下文(Graphics Context)。窗口管理器(Window Manager)只是它的一个特殊客户端。

1.2 合成器

在 Wayland 模型中,没有独立的“服务器进程”,合成器即服务器。

  • 角色合并:Wayland 合成器(Wayland Compositor)同时扮演了显示服务器、窗口管理器和合成器这三个曾分离的角色。
  • 职责收敛:它不再负责绘图(这是客户端的事),只负责合成。它接收所有客户端渲染好的图像缓冲区,将它们按照层级、透明度、位置组合在一起,生成最终的一帧画面,并提交给显示硬件。

1.3 客户端

运行在用户空间的应用程序(如浏览器、游戏)。在 Wayland 中,客户端拥有极高的自主权:它通过 EGL/Vulkan 结合 GBM(Generic Buffer Management)直接分配 GPU 显存,自行完成渲染;与合成器交互的不再是绘图指令,而是渲染完成后的显存句柄(Handle/FD)。

1.4 历史演化

理解 Wayland 的设计,必须理解 X11 为何在现代硬件面前显得力不从心。

1.4.1 X11 的架构包袱

X11 设计于 1980 年代,其核心理念是“网络透明性”,这一设计在现代场景下暴露出诸多问题:

  • 状态爆炸与同步地狱:X Server 维护着海量的绘图上下文、字体、光标等状态。客户端每次操作都可能涉及繁琐的状态同步,导致协议通信过多,IPC 开销巨大。
  • 渲染路径冗长:随着 OpenGL 和现代 GPU 的出现,应用普遍不再发送绘图指令,而是采用直接渲染。但在 X11 的合成模型下,数据流变得异常复杂:客户端(GPU 渲染) -> X Server -> 合成器(读取并合成) -> X Server(显示) -> 内核,这种来回的上下文切换和数据拷贝导致了画面撕裂(Tearing)和不可预测的输入延迟。
  • 安全模型的缺失:X11 的设计初衷是信任所有客户端,任何一个应用程序都可以请求 X Server 给出所有窗口的内容(截屏),或者监听全局的键盘事件(Keylogger)。这在现代操作系统中是不可接受的安全漏洞。

1.4.2 Wayland 的极简主义与强隔离

Wayland 的核心理念是:把不需要内核干预的任务,全部移出显示服务器。

  • 去中心化绘图:Wayland 协议本身不包含任何绘图 API,画图的任务完全交给 OpenGL 或 Vulkan 完成。
  • 直接渲染与零拷贝:客户端直接通过 GBM/DRM 接口分配内存/显存(DMA-BUF),渲染完成后仅需通过 Wayland 协议传递一个文件描述符(fd)。合成器拿到 fd 后,直接生成纹理进行合成,实现了真正的零拷贝。
  • 严格的隔离机制:Wayland 默认禁止客户端“看到”其他客户端。截图、录屏、全局快捷键等功能,不再是客户端随手可得的权限,而必须通过 XDG-Desktop-Portal 等机制,由合成器和用户明确授权才能进行。

2. 总体架构

下图展示了现代 Linux 图形栈的完整全景图。

Linux 图形栈全景图

关键路径解读:

  1. 应用渲染:App 调用 OpenGL/Vulkan,驱动 GPU 将内容画到显存中的 Buffer。
  2. 提交 Buffer:App 通过 Wayland 协议告诉合成器:“这是我的 Buffer 句柄(fd)”。这里传递的仅仅是句柄和元数据(如宽、高、格式、Modifier),不涉及任何图像数据的拷贝。
  3. 合成:合成器唤醒,安排 GPU 读取 App 的 Buffer,将其画到最终的屏幕 Framebuffer 上。
  4. 显示:合成器通过 DRM/KMS 接口,命令显示控制器扫描输出 Framebuffer。

3. 合成器剖析

一个成熟的合成器(如基于 wlroots 的 Sway,或 GNOME Mutter)内部极其复杂。我们可以将其拆解为四个核心子系统。

合成器内部架构图

3.1 协议处理与资源管理

合成器本质是一个 Socket 服务器,核心处理逻辑如下:

  • Registry & Global:客户端连接后,首先查询 Registry,合成器通过它广播支持的全局接口(如 wl_compositorwl_shmwl_seat)。
  • 资源清理:当客户端崩溃或断开时,内核会通知合成器 Socket 关闭。合成器必须利用 wl_resource_destroy 机制清理该客户端残留的所有显存句柄和对象,防止资源泄漏。

3.2 场景图

这是合成器的“大脑”,维护着屏幕上所有内容的逻辑结构(不仅限于窗口):

  • Surface Tree:窗口并非平面结构,可能存在嵌套(Subsurfaces)。例如浏览器中的视频弹窗可能是独立的 subsurface,拥有独立的刷新率和 Buffer。
  • Transforms:处理窗口的旋转、缩放(HiDPI)以及裁剪(Clipping)。
  • Damage Tracking:合成器会精确计算每一帧屏幕的脏区域(Damage Region)。若仅光标移动,合成器仅重绘光标覆盖的小区域,而非全屏重绘,大幅降低功耗。

3.3 渲染后端

这是合成器的“画师”,负责将场景图转化为可显示的图像:

  • GLES/Vulkan Renderer:使用 GPU 将客户端的 Buffer 贴到最终的帧缓冲区纹理上。需注意:现代合成器需处理格式修饰符(Modifiers),确保正确读取客户端以 Tiling(平铺)方式存储在显存中的数据,而非仅支持线性内存。
  • Pixman Renderer:CPU 软件渲染,通常作为安全回退(Fallback)路径,用于调试或无 GPU 环境。

3.4 DRM/KMS 后端与 Session 管理

这是合成器的“驱动接口”,负责与内核和硬件交互:

  • Session 管理(libseat):易被忽略但至关重要的环节。合成器通常以普通用户权限运行,无法直接 open("/dev/dri/card0"),需通过 libseat 与 systemd-logind 或 seatd 通信,动态获取显卡和输入设备的控制权(FD),实现无需 root 权限启动图形界面。
  • Atomic Commit:现代 Linux 显示的核心机制。合成器将所有平面的属性(位置、Buffer 句柄、格式)打包成原子请求发送给内核,内核保证请求要么全部成功显示,要么全部失败(回滚),解决了传统模式下分辨率调整或窗口移动时的屏幕闪烁问题。

4. 缓冲区模型与生命周期

Wayland 实现高性能的核心在于高效的 Buffer 管理及配套的同步机制。

4.1 共享内存 vs DMA-BUF

特性
wl_shm(共享内存)
zwp_linux_dmabuf(DMA-BUF)
原理
mmap
 一块内存,CPU 写入、CPU 读取
GPU 显存句柄(fd)传递
分配器
传统 POSIX shm
GBM
适用场景
软件渲染客户端、简单 GUI 工具、Crash Handler
游戏、浏览器、视频播放器、高性能 UI
性能
较慢,涉及 CPU 拷贝和总线传输
极快,零拷贝
数据流
客户端 CPU -> 系统内存 -> 合成器 GPU 上传
客户端 GPU -> 显存 -> 合成器 GPU 采样

4.2 缓冲区生命周期与显式同步

Buffer 的生命周期管理是图形栈中易出 Bug 的环节,其核心流程如下:

缓冲区生命周期图

显式同步(Explicit Sync)

传统 Linux 图形栈依赖隐式同步(Implicit Sync),即内核驱动通过 Buffer 上的隐式 Fence 自动管理依赖关系。但这在复杂的现代 GPU 场景(尤其是 NVIDIA 驱动)下易导致性能瓶颈或死锁。

Wayland 最新的 Linux DRM Syncobj 协议引入显式同步:客户端提交 Buffer 时,显式附带 Acquire Fence(告知合成器可读取的时机)和 Release Fence(合成器告知客户端读取完成的时机)。这一机制大幅改善同步问题,是解决 Wayland 下部分显卡/驱动(如部分 NVIDIA 驱动)闪屏、掉帧问题的关键,实际效果取决于驱动对显式同步的支持程度。

5. 输入事件处理

合成器同时管理输出与输入,输入处理不仅是坐标传递,还涉及复杂的键位映射逻辑。

5.1 流程

  1. libinput 层:合成器链接 libinput 库,从 /dev/input/event* 规范化读取鼠标、键盘、触摸板数据,负责去抖动、加速度曲线及 1:1 触控板手势处理。
  2. 坐标转换:将触摸屏绝对坐标映射到逻辑屏幕坐标;多屏幕场景下,需处理跨屏幕的坐标变换矩阵。
  3. 键盘映射:与 X11 不同,Wayland 合成器不直接发送键值,而是发送“扫描码(Scancode)”。合成器通过 xkbcommon 编译键盘布局(如 US、Dvorak),将其序列化为文件描述符(mmap 内存块)并在客户端连接时发送;客户端拿到 Keymap 后,自行将 Scancode 翻译为具体符号(Keysym)。该设计简化合成器逻辑,且允许每个客户端拥有独立键盘状态。
  4. 焦点判定:根据窗口堆叠(Z-Order)和鼠标位置,确定事件发送的目标 Surface。
  5. 事件发送:通过 wl_pointer.motionwl_keyboard.key 等协议事件传递输入信息。

5.2 剪贴板与数据交换

Wayland 的剪贴板(Data Device)机制采用惰性复制(Lazy Copy)

用户按下 Ctrl+C 时,焦点客户端仅告知合成器“我拥有文本、图片、HTML 等格式的数据”,此时不发生任何数据拷贝;当另一窗口按下 Ctrl+V 时,该客户端向合成器请求数据,合成器建立管道(Pipe),让源客户端直接将数据写入管道,目标客户端从管道读取。该机制既保证安全(无中间人嗅探剪贴板),又提升效率(如大图片仅在粘贴时传输)。

6. 硬件加速高级路径

6.1 直接扫描

若窗口全屏(如全屏运行 CS:GO),或为不透明矩形且无遮挡,合成器会采用优化策略:不再调用 GPU 渲染整个场景,直接将客户端的 Buffer 句柄通过 DRM KMS API 设置给 CRTC(显示控制器)。此时 GPU 3D 引擎占用率为 0%,显存带宽减半,延迟降至物理层面的最低值。

6.2 硬件叠加层

现代显示控制器通常包含多个硬件图层(Planes):Primary Plane(主图层)和 Overlay Planes(叠加图层)。

视频播放优化场景(以浏览器播放视频为例):

  1. 浏览器将视频解码为 NV12 格式的 Buffer。
  2. 合成器识别该 Surface 为视频类型,且显示控制器支持 Overlay。
  3. 合成器将 UI 层通过 GPU 合成后放入 Primary Plane。
  4. 合成器将视频 Buffer 不经转换直接放入 Overlay Plane。
  5. 显示控制器硬件自动混合两个图层。

该流程省去了 GPU 将 YUV 转换为 RGB 并拷贝纹理的巨大开销,是移动设备省电的核心机制。

合成路径对比图

6.3 现代显示特性

  • VRR(Variable Refresh Rate,可变刷新率):合成器可动态调整显示器的刷新间隔(VBlank 时间),使其与游戏渲染帧率同步,消除画面撕裂并减少卡顿。
  • Tearing Control(wp_tearing_control:针对竞技游戏的低延迟需求,协议允许客户端请求“允许撕裂”。此时合成器使用 DRM_MODE_PAGE_FLIP_ASYNC,立即将新帧送往屏幕,不再等待垂直同步信号。
  • HDR 与色彩管理:当前 Wayland 开发的热点方向。新协议允许客户端附带色彩空间(Color Space)和 HDR 元数据,合成器负责将不同色彩空间的内容(如 sRGB 浏览器 + HDR 电影)正确映射到显示器色域中。

以上特性的可用性,取决于合成器实现、内核版本及显卡驱动的支持程度。

7. XWayland

XWayland 是特殊的 X Server:它不直接输出到硬件,而是作为 Wayland 客户端,将自身“屏幕”作为 Surface 提交给合成器,充当 X11 应用与 Wayland 合成器的“翻译官”。

  • HiDPI 问题:X11 核心协议不支持分数缩放。在 150% 缩放的屏幕上,合成器通常只能将 XWayland 窗口按 100% 渲染后强制拉伸,导致字体模糊(Wayland 原生应用通过 wp-fractional-scale-v1 支持完美的分数缩放)。
  • 安全漏洞:尽管 Wayland 隔离了原生客户端,但连接到同一 XWayland 实例的所有 X11 程序之间仍无隔离,恶意 X11 程序仍可抓取其他 X11 程序的输入。

8. 典型合成器实现对比

特性
Weston
Mutter(GNOME)
KWin(KDE)
wlroots(Sway/Hyprland)
定位
官方参考实现,教学用途
深度集成,用户体验优先
功能最强,配置项极多
模块化库,构建合成器的框架
架构
插件式,libweston
单进程,集成 JS 引擎(GJS)
C++/Qt,复杂的场景图
极简,提供模块积木
渲染
Pixman / GL
OpenGL(Cogl/Clutter)
OpenGL / QPainter
OpenGL / Vulkan
优势
代码清晰,稳定
动画流畅,触摸手势好,色彩管理完善
桌面特效丰富,脚本化能力强
生态基石,催生了 Sway、Hyprland、Wayfire 等合成器

9. 调试与性能优化

9.1 协议调试

  • WAYLAND_DEBUG=1:基础调试工具。在终端执行 WAYLAND_DEBUG=1 alacritty,可查看 Socket 上传输的文本化协议日志,重点观察 buffer.attachsurface.commit 的频率及 frame.callback 的返回及时性。
  • wev(Wayland Event Viewer):类似 X11 的 xev,用于调试输入事件,查看键盘按键对应的 Scancode 和 Keysym。
  • wayland-info:列出当前合成器支持的所有全局接口和扩展协议。

9.2 渲染调试

  • Gammaray(Qt) / GtkInspector:查看应用程序内部的控件树。
  • RenderDoc:截取单帧画面,分析 GPU 具体的绘制指令(Draw Calls)。

9.3 性能追踪

gpuvis 是功能最强的可视化工具,结合 trace-cmd 可在时间轴上同步显示:

  • CPU 进程调度(App/合成器的运行时段)。
  • GPU 任务队列(Render/Compute 耗时)。
  • DRM VBlank 信号(屏幕刷新心跳)。
  • Wayland 事件。

通过 gpuvis 可直观定位性能瓶颈:是客户端渲染过慢拖累帧率,还是合成器提交延迟导致错过 VBlank。

10. 总结

显示服务器的演进史,是一部追求低延迟、高效率、强隔离的系统工程史:

  • 过去:X11 是网络时代的产物,信任所有客户端,功能强大但架构臃肿,无法适配现代 GPU 渲染管线。
  • 现在:Wayland 通过合成器与显示服务器合二为一的设计,配合 GBM、Atomic Commit 和显式同步,实现了近乎完美的帧控制和零拷贝性能。
  • 未来:随着 HDR 支持完善、色彩管理协议定稿及显卡驱动对显式同步的全面支持,Wayland 将完全释放现代图形硬件的潜力。

若想深入图形开发,无需从零编写合成器:可阅读 Weston 源码理解核心流程,或基于 wlroots 编写小型 Demo。观察 wl_surface.commit 如何触发屏幕像素变化,是理解整个 Linux 图形栈的最佳切入点。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 15:17:43 HTTP/2.0 GET : https://f.mffb.com.cn/a/473796.html
  2. 运行时间 : 0.294217s [ 吞吐率:3.40req/s ] 内存消耗:4,765.48kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=2138b1a2c3015f144fea49a5b35e24eb
  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.001037s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001472s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001323s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.003049s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001394s ]
  6. SELECT * FROM `set` [ RunTime:0.001020s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001432s ]
  8. SELECT * FROM `article` WHERE `id` = 473796 LIMIT 1 [ RunTime:0.009044s ]
  9. UPDATE `article` SET `lasttime` = 1770448663 WHERE `id` = 473796 [ RunTime:0.057678s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.002177s ]
  11. SELECT * FROM `article` WHERE `id` < 473796 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.008991s ]
  12. SELECT * FROM `article` WHERE `id` > 473796 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.008086s ]
  13. SELECT * FROM `article` WHERE `id` < 473796 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.006956s ]
  14. SELECT * FROM `article` WHERE `id` < 473796 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.039747s ]
  15. SELECT * FROM `article` WHERE `id` < 473796 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011768s ]
0.295769s