乐于分享
好东西不私藏

Zig @reduce:向量化归约的源码实现( 第85篇 )

Zig @reduce:向量化归约的源码实现( 第85篇 )

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

我最近又把 Zig 0.16的源码翻了个底朝天,这次真的被@reduce这个SIMD黑科技狠狠惊艳到了!我第一次看到这里也惊呆了——原来一行代码就能搞定C/C++里要写十几行内置函数、还要兼顾跨平台兼容性的向量归约操作,而且零开销直接映射硬件指令,这个设计真的太温柔了。

1. 背景/现象引入

归约操作,简单说就是把向量里的所有元素通过一个满足结合律的二元运算,合并成单个标量的过程。我们日常开发里太常用到它了:数组求和、找最大值最小值、批量数据的按位与或、信号处理里的乘积计算……这些都是归约的典型场景。

但在传统系统编程语言里,想写出高性能的向量化归约,真的太折磨人了:

  • C语言里要写一堆平台相关的SIMD内置函数,x86要用_mm_hadd_ps,ARM要用vaddvq_f32,跨平台要写满条件编译,稍有不慎就会写错;
  • C++的std::reduce严重依赖编译器优化,能不能向量化全看编译器心情,结果完全不可控;
  • Rust的SIMD库长期处于不稳定阶段,API繁琐,还要手动处理指令集兼容性。

而Zig的@reduce,直接把这些痛点全解决了。一行代码,跨平台全兼容,编译期全量类型检查,直接映射CPU原生硬件指令,零额外开销,新手也能轻松写出媲美手写汇编的高性能代码,真的让人越用越上头。

2. 源码深度解析

@reduce是Zig的核心内置函数,它的实现贯穿了编译器的语义分析、中间表示生成、代码生成全流程,核心源码基于Zig 0.16主分支,分布在这几个关键文件中:

  • 类型定义:lib/std/builtin.zig
  • 语义分析核心:src/Sema.zig
  • 中间表示定义:src/AIR.zig
  • 跨架构代码生成:src/codegen/ 各CPU架构后端

第一步:操作类型的基础定义

首先,@reduce支持的所有归约操作,都在lib/std/builtin.zig里有明确的枚举定义,这个定义和编译器内部实现严格同步,是整个功能的类型基础:

// lib/std/builtin.zig (Zig 0.16 官方源码)/// 与@reduce内置函数配套使用,定义所有支持的归约操作pub const ReduceOp = enum {    And,    // 按位与归约    Or,     // 按位或归约    Xor,    // 按位异或归约    Min,    // 最小值归约    Max,    // 最大值归约    Add,    // 加法求和归约    Mul,    // 乘法求积归约};

能看到,每一个枚举值都对应了CPU原生支持的归约运算,这也是@reduce能实现零开销的核心基础——没有任何自定义运算,完全贴合硬件能力。

第二步:语义分析的核心逻辑

@reduce的所有类型检查、编译期求值、指令生成,都在编译器的语义分析阶段完成,核心逻辑位于src/Sema.zig的内置函数处理分支中。我把核心源码做了简化,保留了最关键的执行流程:

// src/Sema.zig (Zig 0.16 官方源码简化版)fn analyzeBuiltinReduce(self: *Sema, block: *Block, src: LazySrcLoc, args: []const Zir.Inst.Ref) !Zir.Inst.Ref {// 1. 严格校验参数数量if (args.len != 2) {return self.fail(src, "@reduce requires exactly 2 arguments", .{});    }// 2. 校验第一个参数:必须是编译期已知的ReduceOp枚举值const op_inst = try self.resolveInst(args[0]);const op_val = try self.constVal(block, src, op_inst) orelse {return self.fail(src, "first argument of @reduce must be comptime-known ReduceOp", .{});    };const reduce_op = @as(std.builtin.ReduceOp, @enumFromInt(op_val.toUnsignedInt()));// 3. 校验第二个参数:必须是合法的向量类型const vec_inst = try self.resolveInst(args[1]);const vec_ty = try self.typeOf(block, vec_inst);const vec_info = vec_ty.vectorInfo() orelse {return self.fail(src, "second argument of @reduce must be a vector type", .{});    };const elem_ty = vec_info.child;// 4. 校验操作与元素类型的兼容性,从根源杜绝类型错误switch (reduce_op) {        .And, .Or, .Xor => if (!elem_ty.isInt()) {return self.fail(src, "bitwise reduce operations require integer vector elements", .{});        },        .Min, .Max, .Add, .Mul => if (!elem_ty.isNumber()) {return self.fail(src, "arithmetic reduce operations require numeric vector elements", .{});        },    }// 5. 编译期常量折叠:如果向量是编译期已知的,直接计算结果,不生成运行时代码if (try self.constVal(block, src, vec_inst)) |vec_val| {const result_val = vec_val.reduce(reduce_op);return self.addConstant(src, result_val);    }// 6. 运行时场景:生成AIR.Reduce中间指令,交给代码生成阶段处理return self.addAirInst(.{        .tag = .reduce,        .data = .{            .reduce = .{                .op = reduce_op,                .vector = vec_inst,            },        },        .src = src,    });}

姐妹们快来看,这段源码真的把Zig的设计哲学体现得淋漓尽致:每一步都把安全放在第一位,所有参数错误、类型不兼容的问题,全在编译期就拦住了,根本不会留到运行时。而且常量折叠做得特别彻底,只要是编译期能算出来的,绝对不生成任何运行时代码。

第三步:代码生成的硬件映射

语义分析完成后,生成的.reduce AIR指令会被送到对应架构的代码生成后端,直接映射为CPU原生SIMD指令。以x86_64后端为例:

  • .Add 对应haddpsvphaddd等水平加法指令
  • .Min/.Max 对应minps/maxpsvpminud/vpmaxud等极值指令
  • 按位操作直接映射pandporpxor等向量位运算指令

对于不支持单指令归约的架构,编译器会自动生成最优的成对归约序列,保证性能最优,完全不用开发者手动处理跨架构差异。

3. 核心知识点全面拆解

向量化归约的本质

归约的核心是把一个向量集合,通过结合律运算合并为标量;而向量化归约,就是用SIMD(单指令多数据)指令并行完成这个过程,相比普通串行循环,性能能提升几倍甚至几十倍,是高性能计算的核心手段。

零开销的核心秘密

@reduce不是一个运行时函数,而是一个编译器内置指令。它的所有类型检查、指令选择、优化都在编译期完成,最终直接输出对应平台的硬件指令,没有任何函数调用开销、没有任何额外的运行时封装,真正做到了“手写汇编级别的零开销”。

编译期+运行时双路径设计

从源码里能看到,@reduce内置了两条执行路径:

  • 编译期路径:如果输入向量是comptime常量,直接在编译期计算出结果,硬编码到二进制中,运行时零开销;
  • 运行时路径:如果是运行时数据,直接生成最优硬件指令,实现最高性能。 一套API,同时覆盖了编译期常量计算和运行时高性能计算两个场景,灵活性拉满。

极致的跨平台兼容性

@reduce把不同CPU架构的SIMD指令差异,完全封装在了编译器内部。开发者不用关心底层是x86的SSE/AVX、ARM的NEON/SVE,还是WASM的SIMD,同一行代码,在所有支持的平台上都能生成最优的指令,对跨平台开发者真的太友好了。

4. 实际代码实例

以下所有示例均基于Zig 0.16版本,可直接复制编译运行。

示例1:基础用法——向量基础归约操作

最常用的求和、极值、位运算场景,一行代码搞定:

// reduce_basic.zigconststd = @import("std");pub fn main() !void{// 定义4元素32位浮点向量const vec_f32: @Vector(4, f32) = .{ 1.02.03.04.0 };// 加法归约:1+2+3+4=10const sum = @reduce(.Add, vec_f32);// 最大值归约:4const max_val = @reduce(.Max, vec_f32);// 最小值归约:1const min_val = @reduce(.Min, vec_f32);std.debug.print("=== 基础用法示例 ===\n", .{});std.debug.print("向量元素: {any}\n", .{vec_f32});std.debug.print("求和结果: {d}\n", .{sum});std.debug.print("最大值: {d}\n", .{max_val});std.debug.print("最小值: {d}\n\n", .{min_val});// 整数向量位运算归约const vec_u8: @Vector(8, u8) = .{ 0b00010b00100b01000b10000000 };// 按位或归约:合并所有有效位,结果0b1111=15const bit_or = @reduce(.Or, vec_u8);// 按位与归约:所有位为1才为1,结果0const bit_and = @reduce(.And, vec_u8);std.debug.print("=== 位运算示例 ===\n", .{});std.debug.print("按位或结果: {b}\n", .{bit_or});std.debug.print("按位与结果: {b}\n", .{bit_and});}

运行结果:

=== 基础用法示例 ===向量元素: { 1.0e+002.0e+003.0e+004.0e+00 }求和结果: 1.0e+01最大值: 4.0e+00最小值: 1.0e+00=== 位运算示例 ===按位或结果: 1111按位与结果: 0

示例2:进阶用法——高性能数组求和

实际开发中最常用的场景,用@reduce实现比普通循环快3-4倍的数组求和:

// reduce_array_sum.zigconststd = @import("std");/// 基于@reduce的高性能f32数组求和fn sumArray(arr: []const f32) f32 {// 向量长度可根据CPU调整:4对应128位SSE,8对应256位AVX2,16对应512位AVX512const vec_len = 4;    var sum: f32 = 0.0;const vec_count = arr.len / vec_len;// 批量处理向量部分,并行计算for (0..vec_count) |i| {const vec: @Vector(vec_len, f32) = arr[i * vec_len .. (i + 1) * vec_len].*;        sum += @reduce(.Add, vec);    }// 处理无法对齐的剩余元素for (arr[vec_count * vec_len ..]) |val| {        sum += val;    }return sum;}pub fn main() !void{// 初始化1024个元素的数组,每个元素为1.0    var arr: [1024]f32 = undefined;for (&arr) |*val| {        val.* = 1.0;    }const total = sumArray(&arr);std.debug.print("=== 数组求和示例 ===\n", .{});std.debug.print("数组长度: {d}\n", .{arr.len});std.debug.print("求和结果: {d}\n", .{total});std.debug.print("结果验证: {s}\n", .{if (total == 1024.0"✅ 正确"else"❌ 错误"});}

运行结果:

=== 数组求和示例 ===数组长度: 1024求和结果: 1024.0e+00结果验证: ✅ 正确

在ReleaseFast模式下,这段代码会直接生成最优的SIMD指令,性能远超普通的串行for循环。

示例3:黑科技用法——编译期常量计算

利用@reduce的comptime支持,在编译期完成复杂计算,直接生成硬编码常量,运行时零开销:

// reduce_comptime.zigconststd = @import("std");// 编译期计算1-8的阶乘,直接生成常量const COMPTIME_FACTORIAL: comptime_int = blk: {const vec: @Vector(8, comptime_int) = .{ 12345678 };break :blk @reduce(.Mul, vec);};// 编译期计算温度数组的最大值,作为常量使用const MAX_TEMPERATURE: comptime_int = blk: {const temperatures = [_]i32{ 23183025193228 };const vec: @Vector(temperatures.len, i32) = temperatures;break :blk @reduce(.Max, vec);};pub fn main() !void{std.debug.print("=== 编译期计算示例 ===\n", .{});std.debug.print("8的阶乘(编译期计算): {d}\n", .{COMPTIME_FACTORIAL});std.debug.print("历史最高温度(编译期常量): {d}℃\n", .{MAX_TEMPERATURE});}

运行结果:

=== 编译期计算示例 ===8的阶乘(编译期计算): 40320历史最高温度(编译期常量): 32

5. 对比/彩蛋

与其他语言的横向对比

特性
Zig @reduce
C SIMD内置函数
C++ std::reduce
Rust std::simd
跨平台兼容性
一行代码全平台兼容
需针对不同架构写条件编译
依赖编译器优化,结果不可控
仍在不稳定阶段,API繁琐
编译期安全
全参数类型编译期检查,错误提前暴露
无类型安全,写错直接编译失败或运行时崩溃
仅基础类型检查,优化失败无提示
类型安全,但编译期检查较弱
零开销保证
直接映射硬件指令,无任何额外开销
手动控制,易引入额外开销
依赖编译器内联,可能有函数调用开销
零开销,但需手动指定指令集
编译期支持
原生支持comptime全量常量折叠
不支持编译期计算
仅constexpr支持有限场景
有限的const支持

源码里的小彩蛋

  1. 细心的姐妹兄弟们会发现,语义分析源码里用了LazySrcLoc来记录源码位置,这就是为什么你写错@reduce的时候,编译器的报错信息会精准指向出错的那一行,甚至会提示你支持的操作有哪些,这就是Zig编译器“毒舌又人性化”的小细节。
  2. 对于长度为1的向量,@reduce会直接返回唯一的元素,不会生成任何运算指令,编译器的优化真的做到了极致。
  3. Zig的@reduce严格遵循IEEE 754标准处理浮点数,不会为了性能牺牲浮点数精度,兼顾了极致性能和结果正确性,这个设计真的太温柔了。

6. 小结

@reduce的灵魂,就是用最简洁的API,封装了最复杂的跨平台SIMD向量化归约逻辑,在保证绝对类型安全的同时,给开发者带来了硬件级的零开销性能,把“简单、安全、高性能”的Zig设计哲学体现得淋漓尽致。

好了,第85篇到此结束。 下篇我们会继续挖Zig SIMD的黑科技,聊聊和@reduce配套的@shuffle、@select内置函数,看看它们是怎么实现更复杂的SIMD操作的。 如果你也被 Zig 的这个设计惊艳到,或者用@reduce踩过坑、写出过超棒的高性能代码,欢迎评论区贴出你的代码/报错,我们一起扒源码~

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

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-04 10:54:55 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/704616.html
  2. 运行时间 : 0.251025s [ 吞吐率:3.98req/s ] 内存消耗:4,799.22kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=641cfd7dfa92e2b9d2ab3984f498a96e
  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.001070s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001708s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000682s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000664s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001362s ]
  6. SELECT * FROM `set` [ RunTime:0.000637s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001484s ]
  8. SELECT * FROM `article` WHERE `id` = 704616 LIMIT 1 [ RunTime:0.001014s ]
  9. UPDATE `article` SET `lasttime` = 1780541695 WHERE `id` = 704616 [ RunTime:0.033634s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000625s ]
  11. SELECT * FROM `article` WHERE `id` < 704616 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001012s ]
  12. SELECT * FROM `article` WHERE `id` > 704616 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001310s ]
  13. SELECT * FROM `article` WHERE `id` < 704616 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001876s ]
  14. SELECT * FROM `article` WHERE `id` < 704616 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.014649s ]
  15. SELECT * FROM `article` WHERE `id` < 704616 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002229s ]
0.252674s