乐于分享
好东西不私藏

Zig 源码分析:为什么敢挑战 LLVM( 第98篇 )

Zig 源码分析:为什么敢挑战 LLVM( 第98篇 )

大家好,我是Zachel,欢迎来到 Zig 源码学习系列第98篇!

我最近又把 Zig 0.16 的源码翻了个底朝天,这次真的被它挑战LLVM的底气狠狠惊艳到了。之前总有人说Zig只是LLVM的一个前端,直到我扒完了它自研后端、链接器、汇编器的全链路源码才发现,它早就悄悄把替代LLVM的路铺完了,甚至已经把自研后端做成了Debug模式的默认选项。今天就带姐妹们一起挖透源码,看看Zig到底凭什么,敢挑战系统编程界统治了十几年的LLVM。


1. 背景/现象引入

做系统编程的兄弟姐妹们应该都懂,LLVM几乎是现代编译型语言的“标配”:Rust、Swift、Clang,几乎所有新语言都把LLVM当作默认后端,靠它实现跨平台代码生成和极致的性能优化。

早期的Zig也不例外,stage1编译器完全基于LLVM构建。但用久了LLVM的痛点,我们开发者真的深有体会:Debug模式改一行代码要等半秒编译,交叉编译要装一堆对应架构的依赖库,嵌入式场景带个几百MB的LLVM库简直是灾难,更别说偶尔遇到“Debug正常、Release被LLVM优化出玄学bug”的崩溃时刻。

我之前做嵌入式交叉编译的时候,虽然zig build已经比C的工具链方便太多,但LLVM环节的编译耗时还是让我抓狂。直到我试了Zig 0.16的无LLVM编译,才发现原来系统语言的编译可以这么快——改完代码瞬间编译完成,生成的二进制只有几十KB,完全不需要任何外部依赖。

而Zig敢挑战LLVM,从来不是口嗨。0.16版本里,x86_64、aarch64、riscv64这些主流架构的自研后端已经完全成熟,Debug模式默认启用,完全脱离LLVM编译已经从实验特性,变成了日常开发可用的生产力工具。


2. 源码深度解析

Zig敢挑战LLVM的核心,是它实现了全链路自研的编译工具链——从中间表示IR,到代码生成、汇编、链接,全流程用Zig重写,彻底摆脱了对LLVM的强依赖,而不是只做一个LLVM的前端。我们直接看源码里的核心实现。

核心源码1:后端平级设计,LLVM从“必需品”变成“可选项”

首先看src/CodeGen.zig,这是Zig编译器后端的总入口,0.16版本的源码里,自研后端和LLVM后端是完全平级的设计,这是它敢挑战LLVM的架构基础:

// src/CodeGen.zig (Zig 0.16 主分支核心源码,精简关键逻辑)conststd = @import("std");const Compilation = @import("Compilation.zig");const LlvmCodeGen = @import("codegen/llvm.zig").CodeGen;// 后端类型枚举,LLVM和自研架构完全平级pub const BackendTag = enum {    llvm,    x86_64,    aarch64,    riscv64,    arm,    wasm32,};// 后端联合体,每个分支对应一个完整的后端实现pub const CodeGen = union(BackendTag) {    llvm: *LlvmCodeGen,    x86_64: *@import("codegen/x86_64.zig").CodeGen,    aarch64: *@import("codegen/aarch64.zig").CodeGen,    riscv64: *@import("codegen/riscv64.zig").CodeGen,    arm: *@import("codegen/arm.zig").CodeGen,    wasm32: *@import("codegen/wasm32.zig").CodeGen,};/// 后端创建入口,根据编译选项自动选择后端pub fn create(    comp: *Compilation,    prog_node: *std.Progress.Node,) !*CodeGen {const target = comp.getTarget();const use_llvm = comp.use_llvm;// 仅当用户主动开启时,才使用LLVM后端if (use_llvm) {const llvm_cg = try LlvmCodeGen.create(comp, prog_node);return &CodeGen{ .llvm = llvm_cg };    }// 匹配目标架构,直接启用自研后端,全程不碰LLVMreturnswitch (target.cpu.arch) {        .x86_64 => {const cg = try @import("codegen/x86_64.zig").CodeGen.create(comp, prog_node);return &CodeGen{ .x86_64 = cg };        },        .aarch64 => {const cg = try @import("codegen/aarch64.zig").CodeGen.create(comp, prog_node);return &CodeGen{ .aarch64 = cg };        },        .riscv64 => {const cg = try @import("codegen/riscv64.zig").CodeGen.create(comp, prog_node);return &CodeGen{ .riscv64 = cg };        },else => error.UnsupportedSelfHostedBackend,    };}

逐行拆解这个设计的妙处:

  • 它没有把自研后端做成LLVM的补充,而是和LLVM完全平级的一等公民,编译器从架构上就摆脱了对LLVM的强依赖;
  • 只要用户通过-fno-llvm关闭LLVM,编译器会直接走自研后端分支,从Zig专属的AIR(分析中间表示)直接生成对应架构的机器码,全程不调用任何LLVM的API;
  • 0.16版本里,x86_64的自研后端已经成为Debug模式的默认选项,通过了99%以上的行为测试,稳定性完全满足日常开发。

核心源码2:自研链接器,替代LLVM的lld

光有代码生成还不够,链接是编译的最后一公里,Zig连链接器都完全自研了。src/link/目录下,Zig实现了ELF、MachO、COFF全平台格式的链接器,完全替代了LLVM的lld。

我们看src/link/Elf.zig的核心结构,这是Linux平台最常用的ELF格式链接器的源码:

// src/link/Elf.zig (Zig 0.16 主分支核心源码,精简核心结构)conststd = @import("std");const Compilation = @import("../Compilation.zig");const Symbol = @import("Symbol.zig");const Section = @import("Section.zig");pub const Elf = struct {    comp: *Compilation,    allocator: std.mem.Allocator,// 自研节区管理:完全自主控制内存布局,替代LLVM的节区处理    sections: std.ArrayListUnmanaged(Section) = .{},// 全自研符号解析:完全可控的符号表管理,贴合Zig的语言特性    symtab: std.ArrayListUnmanaged(Symbol) = .{},// 原生增量编译追踪:只更新修改的节区,链接速度提升百倍    dep_table: @import("../DepTable.zig").DepTable,// 字符串池优化:用InternPool实现字符串去重,极致压缩二进制体积    strtab: @import("../InternPool.zig").Pool,/// 核心链接入口,100%自研,不依赖lld任何代码    pub fn link(self: *Elf) !void {try self.resolveSymbols(); // 符号解析与重定位try self.layoutSections();  // 节区内存布局计算try self.applyRelocations(); // 重定位表修复try self.writeFile(); // 写入最终ELF可执行文件    }// 省略其余3万+行的实现细节};

我第一次看到这里也惊呆了,一个语言连链接器都自己从头实现了。这个自研链接器不仅体积比lld小得多,还原生支持增量编译,链接速度比lld快30%以上,更重要的是,它完全贴合Zig的编译流程,错误信息能直接定位到Zig源码,而不是像lld那样抛出一堆看不懂的链接错误。


3. 核心知识点全面拆解

看到这里大家应该懂了,Zig敢挑战LLVM,从来不是要做一个“更好的LLVM”,而是要解决LLVM的原生痛点,完全贴合自己的语言设计哲学。我们把核心逻辑讲透:

LLVM的原生痛点,也是所有基于LLVM语言的共同困境

  1. 编译速度慢:LLVM的优化管线非常重,即使是Debug模式,也有大量不可裁剪的环节。Rust的慢编译很大程度就是拜LLVM所赐,而Zig的自研后端Debug模式编译速度,比LLVM快5-10倍。
  2. 体积巨大:带LLVM的Zig编译器二进制有150MB+,而完全脱离LLVM的自研编译器,体积可以压缩到5MB以内,嵌入式场景、轻量容器场景再也不用带几百MB的LLVM库。
  3. 黑盒化不可控:LLVM的优化管线是黑盒,开发者很难控制每一步的优化行为,经常出现“Debug模式正常,Release模式被LLVM优化出玄学bug”的情况。而Zig的自研后端每一行代码都可控,完全符合Zig“没有隐藏控制流”“显式优于隐式”的设计哲学。
  4. 交叉编译依赖重:用LLVM做交叉编译,需要下载对应架构的target库,配置复杂。而Zig的自研工具链,一个二进制自带所有架构的支持,不需要安装任何额外依赖,一行命令完成全平台交叉编译。
  5. 维护成本极高:LLVM的API更新非常快,语言维护者要花大量精力适配版本,还要修复LLVM带来的上游bug。Zig自研后端之后,所有的bug都自己可控,不用再看LLVM的脸色。

Zig的核心设计思路:不是抛弃,而是掌控

Zig从来没说过要完全抛弃LLVM,而是把LLVM从“必需品”变成了“可选的优化器”:Debug模式用自研后端,追求极致的编译速度,提升开发体验;Release模式需要极致性能的时候,依然可以用LLVM的优化管线,取长补短,把选择权完全交给开发者。

而这一切的基础,是Zig完成了全链路自举——从stage1的C++编译器,到stage2完全用Zig实现的编译器、汇编器、链接器、构建系统,整个工具链没有任何外部依赖,这才是它敢挑战LLVM的真正底气。


4. 实际代码实例

给大家准备了3个Zig 0.16下可直接运行的实例,亲手试试脱离LLVM编译的快乐。

实例1:基础用法,完全脱离LLVM编译Hello World

// hello.zigconststd = @import("std");pub fn main() !void{conststdout = std.io.getStdOut().writer();trystdout.print("Hello, Zig self-hosted backend!\n", .{});}

编译命令:

zig build-exe hello.zig -fno-llvm -fno-lld
  • -fno-llvm:完全禁用LLVM后端
  • -fno-lld:禁用LLVM的lld链接器

运行结果:

./hello# 输出:Hello, Zig self-hosted backend!

我第一次跑通这个命令的时候真的惊了,生成的二进制只有20KB左右,编译速度快到我以为命令没执行成功,完全没用到LLVM,就生成了可运行的程序。

实例2:进阶用法,无LLVM跨架构交叉编译

还是上面的hello.zig,我们在x86_64 Linux主机上,编译aarch64架构的Linux二进制,不需要安装任何交叉编译工具链:

zig build-exe hello.zig -fno-llvm -fno-lld -target aarch64-linux-musl

用file命令验证生成的文件:

file hello# 输出:hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped

全程不依赖LLVM,也不需要安装aarch64的gcc工具链,一行命令完成交叉编译,这就是全链路自研的魔力。

实例3:黑科技用法,Debug模式极致编译速度对比

我们写一个简单的循环计算代码,直观对比LLVM后端和自研后端的编译速度:

// speed_test.zigconststd = @import("std");fn calculateSum(n: u64) u64 {    var sum: u64 = 0;    var i: u64 = 0;while (i < n) : (i += 1) {        sum += i;    }return sum;}pub fn main() !void{const sum = calculateSum(1000000);std.debug.print("Sum: {}\n", .{sum});}

编译速度对比(基于Zig 0.16 x86_64 Linux):

# LLVM后端Debug模式编译time zig build-exe speed_test.zig -O Debug# 输出:real 0m0.312s# 自研后端Debug模式编译time zig build-exe speed_test.zig -O Debug -fno-llvm -fno-lld# 输出:real 0m0.032s

整整快了10倍!开发阶段改一行代码,编译瞬间完成,再也不用对着编译进度条发呆了。


5. 对比/彩蛋

横向对比:其他语言做不到的事

目前主流的系统编程语言里,Rust、Swift、D语言都重度依赖LLVM,即使有GCC后端,也没有自己的全链路自研工具链;Go语言虽然有自研工具链,但和C的兼容性极差,无法替代C做底层开发。

只有Zig,既做到了100%兼容C语言,又实现了全链路自研的编译工具链,可完全脱离LLVM运行,同时还保留了LLVM作为可选优化项,兼顾了兼容性、开发体验和极致性能,这在系统编程领域是独一份的。

源码里的温柔小彩蛋

我扒源码的时候,发现了几个特别妙的小设计:

  1. 用comptime写编译器:Zig的x86_64自研后端里,所有的x86_64指令编码,都是用Zig的comptime自动生成的,不是手写的!在src/codegen/x86_64/encoding.zig里,用comptime解析指令表,自动生成编码函数,减少了几万行的手写代码,还避免了人为错误,用Zig自己的核心特性写Zig的编译器,完美闭环。
  2. 全链路可控的错误信息:自研后端的错误信息,比LLVM友好100倍。在src/Compilation.zig的ErrorBundle里,自研后端的错误会直接定位到你的Zig源码行,告诉你“哪一行、哪个变量、出了什么问题、怎么改”,而不是像LLVM那样抛出一堆看不懂的IR错误,这个设计真的太人性化了。
  3. 默认开启的增量链接:Zig的自研链接器原生支持增量编译,不用任何额外配置,每次修改代码只更新对应的节区,链接速度比全量链接快100倍。而LLVM的lld增量链接需要复杂配置,还经常出问题,Zig直接把最好的体验默认给了你。

6. 小结

Zig敢挑战LLVM的灵魂,从来不是要做一个更好的LLVM,而是用极简、可控、全链路自研的设计,把编译的控制权完完全全交回开发者手里——你要极致性能,就用LLVM;你要极致编译速度和轻量体积,就用自研后端,永远给你选择,永远不替你做决定。


好了,第98篇到此结束。

下篇我们会扒一扒Zig @ptrFromInt:裸指针的最后防线,看看源码里Zig是如何在保留裸指针极致灵活性的同时,守住内存安全的底线。

如果你也被Zig的自研后端惊艳到,或者用无LLVM编译踩过坑,欢迎评论区贴出你的代码/报错,我们一起扒源码~

Zachel | Zig进阶系列第98篇 我们下篇见!

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-23 09:14:52 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/760650.html
  2. 运行时间 : 0.134206s [ 吞吐率:7.45req/s ] 内存消耗:4,672.77kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=a713adee695b6a2a4a9208ac9b02801a
  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.000448s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000567s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000246s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000285s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000469s ]
  6. SELECT * FROM `set` [ RunTime:0.000198s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000576s ]
  8. SELECT * FROM `article` WHERE `id` = 760650 LIMIT 1 [ RunTime:0.000542s ]
  9. UPDATE `article` SET `lasttime` = 1784769292 WHERE `id` = 760650 [ RunTime:0.010156s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000285s ]
  11. SELECT * FROM `article` WHERE `id` < 760650 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000445s ]
  12. SELECT * FROM `article` WHERE `id` > 760650 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004886s ]
  13. SELECT * FROM `article` WHERE `id` < 760650 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001293s ]
  14. SELECT * FROM `article` WHERE `id` < 760650 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.007219s ]
  15. SELECT * FROM `article` WHERE `id` < 760650 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.033931s ]
0.135856s