当前位置:首页>python>AI Agent 开发,Python 输了?

AI Agent 开发,Python 输了?

  • 2026-07-03 17:40:52
AI Agent 开发,Python 输了?

在现代软件开发与 AI 应用开发领域,TypeScript 已经从一个可选的增强工具,逐渐成为了主流的开发选择,尤其是在 AI Agent 这一新兴领域,越来越多的团队与框架开始选择 TypeScript 作为核心开发语言。本文将从基础到深入,完整解析 TypeScript 的核心能力、底层机制,并结合实际的代码示例,深入分析它为何成为 AI Agent 开发的首选技术栈,帮助你从入门到掌握这一技术栈的核心逻辑。

一、TypeScript 是什么:从 JS 超集到现代开发的基石

1.1 基础定义与发展历史

TypeScript 是由微软在 2012 年推出的开源编程语言,由 C# 之父 Anders Hejlsberg 主导开发,它是 JavaScript 超集—— 这意味着所有合法的 JavaScript 代码,本身就是合法的 TypeScript 代码。

经过十余年的发展,TypeScript 已经从一个小众的工具,成长为现代开发的基石:

2025 年 Stack Overflow 开发者调查显示,TypeScript 以 73% 的开发者满意度,成为最受欢迎的编程语言,超过了 JavaScript 与 Python

它已经更新到 5.x 版本,支持最新的 ECMAScript 特性,同时拥有全球最活跃的开发社区。

 npm 仓库中,TypeScript 是下载量最高的开发依赖,每周下载量超过 亿次。

1.2 编译机制:类型擦除与运行时无关

很多开发者会误解 TypeScript 是一个新的运行时语言,但实际上,TypeScript 是一个转译型语言

1.你编写的带类型的 TypeScript 代码,会通过编译器(tsc/esbuild/swc)转译成纯 JavaScript 代码。

2.在转译过程中,所有的类型信息会被完全擦除,不会对运行时的代码产生任何影响。

3.最终生成的 JavaScript 代码,可以在任何支持 JavaScript 的环境中运行:浏览器、Node.jsBunDeno,甚至嵌入式设备。

这意味着,TypeScript 的所有能力,都只是在开发与编译阶段为你提供保障,不会带来任何运行时的 overhead,也不会限制你的运行环境。

二、TypeScript 核心特性与底层机制:从入门到深入

2.1 静态类型系统:提前拦截错误的核心

这是 TypeScript 最核心的特性。与 JavaScript 这种动态类型语言不同,TypeScript 可以在编译阶段(代码运行前)就完成类型检查,提前发现类型不匹配、属性缺失等常见错误。

根据行业统计,TypeScript 的静态类型检查可以在开发阶段捕获超过 70% 的常见代码错误,大幅减少了线上 Bug 的出现概率,也降低了调试的成本。

基础示例:类型检查的直观效果

typescript// TypeScript 代码:显式声明参数类型function add(a: number, b: number): number {return a + b;}// 如果你传入字符串,编译阶段就会直接报错add("5", 10); // �� 编译错误:类型 'string' 的参数不能赋给类型 'number' 的参数

而在 JavaScript 中,这段代码会正常运行,最终得到 "510"这种不符合预期的结果,这类错误往往要到运行时,甚至线上环境才会被发现。

深入:结构化类型系统 vs 名义类型系统

TypeScript 的类型系统是结构化类型系统,这和 C#Java 这类传统的名义类型系统有本质的区别:

名义类型系统:两个类型的名称不同,就算结构完全一样,也会被认为是不同的类型。

结构化类型系统:两个类型只要结构一致,就算名称完全不同,也会被认为是兼容的类型。

这个特性让 TypeScript 完美适配了 JavaScript 的动态特性,同时保留了类型安全:

typescript// 定义两个名字完全不同的接口interface User {name: string;age: number;}interface Person {name: string;age: number;}// 结构化类型系统下,它们是完全兼容的const u: User = { name: '张三', age: 20 };const p: Person = u; // 这是完全合法的代码,TS 不会报错

严格模式:类型安全的终极保障

很多开发者使用 TypeScript 却没有发挥它的全部能力,核心原因是没有开启严格模式(strict mode。严格模式是 TypeScript 提供的一组严格的类型检查开关,开启后可以最大化类型安全的能力:

strictNullChecks:强制检查nullundefined,你不能把null赋值给string类型,除非你显式声明string | null

strictFunctionTypes:强制检查函数的参数类型,防止逆变的错误。

strictPropertyInitialization:强制检查类的属性是否完成初始化。

举个例子,开启strictNullChecks之后:

typescript// 开启严格模式后,TS 会强制你处理 undefined 的情况function getUserName(user?: User) {// �� 如果没有处理,TS 会直接在编译阶段报错:Object is possibly 'undefined'// return user.name;// 正确的写法,先判断 user 是否存在if (!user) return '未知用户';return user.name;}

这个特性在 Agent 开发中尤为重要,因为 LLM 的输出经常会有缺失的字段,严格模式可以提前帮你发现这些问题,避免运行时崩溃。

2.2 类型 Narrowing:安全处理动态数据的核心机制

TypeScript 提供了 \\类型 Narrowing(类型收窄)\\的能力,它可以根据你的代码逻辑,自动把宽泛的类型缩小到具体的类型,让你可以安全地处理动态数据,比如 LLM 返回的未知 JSON

typescript// unknown 类型:代表完全未知的输入,比如 LLM 返回的原始 JSONfunction processLLMOutput(input: unknown) {// 你可以通过类型判断,让 TS 自动收窄类型if (typeof input === 'object' && input !== null) {// 到这里,input 的类型已经被收窄到了 objectif ('name' in input && typeof input.name === 'string') {// 到这里,TS 已经知道 input.name 一定是 string 类型,可以安全访问console.log(input.name.toUpperCase());}}}

这个机制完美解决了动态数据的类型安全问题,让你在处理 LLM 的不可靠输出时,依然可以保留类型检查的能力。

2.3 灵活的高级类型:适配复杂业务的类型工具

TypeScript 提供了非常丰富的高级类型工具,让你可以精准地描述复杂的数据结构:

类型推断TS 可以自动推断变量的类型,大部分场景下不需要手动添加类型注解,减少冗余代码。

接口与类型别名:精准定义对象的结构,明确数据的输入输出格式。

泛型:支持可复用、类型安全的组件,让工具函数可以适配不同的类型,同时保留类型检查能力。

泛型的实际示例:类型安全的工具函数

泛型是 TypeScript 最强大的特性之一,它可以让你写出既复用又类型安全的代码:

typescript// 泛型工具函数:获取对象的属性,同时保留类型信息function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {return obj[key];}const user = { name: '张三', age: 20 };// TS 可以自动推断返回值的类型const name = getProperty(user, 'name'); // name 的类型自动推断为 stringconst age = getProperty(user, 'age'); // age 的类型自动推断为 number// 如果你传了不存在的 key,TS 会直接在编译阶段报错getProperty(user, 'email'); // �� 报错:Argument of type '"email"' is not assignable to parameter of type '"name" | "age"'

枚举、条件类型、映射类型、模板字面量类型:支持复杂的类型逻辑,甚至可以在类型层面完成计算,适配最复杂的业务场景。

2.4 极致的开发体验:类型驱动的工具链

TypeScript 的类型信息,为 IDE 提供了丰富的上下文,带来了堪比 "代码自动驾驶的开发体验:

智能自动补全:基于类型,IDE 可以精准提示对象的属性、方法,不用反复查阅文档。

一键安全重构:重命名变量、提取函数、移动模块时,类型系统可以保证修改的安全性,不会出现漏改的情况。

代码导航:可以一键跳转到定义、查看引用,大幅提升大型项目的代码浏览效率。

自文档化:类型定义本身就是可执行的文档,新加入团队的开发者,只需要看类型就能理解代码的输入输出约束,大幅降低上手成本。

2.5 渐进式迁移:无负担的升级路径

TypeScript 支持渐进式的接入,你不需要一次性把整个项目的 JavaScript 代码全部改成 TypeScript,你可以按照以下步骤平滑迁移:

1.安装 TypeScriptnpm install typescript --save-dev

2.初始化配置:npx tsc --init,开启allowJs选项,允许 JS 和 TS 文件共存。

3.逐步把 JS 文件重命名为 TS 文件,先不开启严格模式。

4.对于没有类型的第三方库,安装@types/xxx的类型包,比如npm install @types/lodash --save-dev

5.逐步开启严格模式的选项,比如先开启strictNullChecks,再逐步开启其他选项。

这种特性让很多老项目也可以平滑地迁移到 TypeScript 生态,不需要重写任何代码。

三、为什么 AI Agent 开发偏爱 TypeScript

AI Agent 作为一种新兴的应用形态,它的开发需求和传统的 Web 开发、数据科学开发有很大的不同:它是有状态的、多步骤的、集成密集的,同时需要处理大量的不可靠的 LLM 输出。而 TypeScript 的特性,刚好完美匹配了 Agent 开发的核心痛点,这也让它成为了当前 Agent 开发的主流选择。

根据 2025 年的行业统计,有 60%~70% 的 YC 创业公司,都选择用 TypeScript 来构建他们的 AI Agent 产品。我们可以通过这张对比图,直观地看到两者的能力差异:

3.1 类型安全:复杂 Agent 系统的刚需

Agent 系统的核心是什么?是工具调用、状态管理、多步消息流转。一个复杂的 Agent,可能会集成数十个工具,管理跨多轮对话的状态,处理大量的外部数据输入。这些环节涉及大量的数据结构与接口约定:

工具的输入参数、输出格式

Agent 的状态快照、消息格式

LLM 的响应结构、配置选项

在这种复杂的系统中,动态类型语言很容易出现 "接口不匹配的问题:比如工具的参数改了,但是调用方没更新;或者 LLM 返回的 JSON 少了一个字段,这些问题在动态类型语言中,要等到运行时才会暴露,而且很难调试 —— 尤其是 Agent 很多时候是自主运行的,点钟在生产环境崩溃,你根本来不及调试。

 TypeScript 的静态类型系统,可以在编译阶段就发现这些问题,同时配合 Zod 这类 Schema 校验库,实现 "一次定义,双重校验",完美解决 LLM 输出不可靠的问题。

实战示例:工具调用的类型安全

我们用一个实际的搜索工具的例子,来看 TypeScript + Zod 怎么解决 Agent 工具调用的问题:

typescriptimport { z } from 'zod';import OpenAI from 'openai';const openai = new OpenAI();// 1. 定义搜索工具的输入 Schemaconst SearchToolSchema = z.object({query: z.string().describe('用户要搜索的关键词,必须清晰明确'),maxResults: z.number().int().min(1).max(20).default(5).describe('搜索返回的最大结果数量,默认5')});// 2. 自动从 Schema 生成 TypeScript 类型,不用手动写两遍type SearchToolInput = z.infer<typeof SearchToolSchema>;// 3. 自动生成 JSON Schema,直接传给 OpenAI 的 Function Call// 这样 LLM 就知道这个工具需要什么参数,不用手动维护 JSON Schemaconst toolDefinition = {type: 'function',function: {name: 'web_search',description: '搜索网络获取最新的信息,当你需要不知道的实时信息的时候使用',parameters: SearchToolSchema.jsonSchema}};// 4. 工具的实现,输入已经被类型约束async function webSearch(input: SearchToolInput) {// Zod 可以在运行时校验输入,防止 LLM 传错参数const validatedInput = SearchToolSchema.parse(input);// 执行搜索const results = await fetchSearchResults(validatedInput.query, validatedInput.maxResults);return results;}

在这个例子中,我们只写了一次 Schema,就完成了三件事:

1.编译时的 TypeScript 类型检查,保证代码内部的类型安全。

2.运行时的输入校验,处理 LLM 可能传错的参数。

3.自动生成 LLM 需要的工具参数描述,不用手动维护两份文档。

实战示例:Agent 状态的类型安全

Agent 是多阶段的,不同的阶段有不同的状态,TypeScript 的可区分联合(Discriminated Union)可以完美管理这种复杂的状态流转:

typescript// 定义 Agent 的状态,用可区分联合描述不同阶段的状态type AgentState = // 初始阶段:用户刚输入请求| { phase: 'init'; messages: Message[] }// 规划阶段:Agent 正在生成执行计划| { phase: 'planning'; messages: Message[]; plan: Step[] }// 工具执行阶段:Agent 正在调用工具| { phase: 'tool_executing'; messages: Message[]; currentTool: string; toolInput: unknown }// 结果处理阶段:Agent 正在处理工具的返回结果| { phase: 'result_processing'; messages: Message[]; toolResult: unknown }// 完成阶段:任务结束| { phase: 'done'; messages: Message[]; finalResult: string };// 处理状态的函数,TS 会自动做类型收窄function processAgentState(state: AgentState) {switch(state.phase) {case 'init':// TS 知道这个阶段只有 messages,没有 plan、currentTool 这些startPlanning(state.messages);break;case 'planning':// TS 知道这个阶段 plan 一定存在executePlan(state.plan);break;case 'tool_executing':// TS 知道这个阶段 currentTool 一定存在runTool(state.currentTool, state.toolInput);break;case 'done':// TS 知道这个阶段 finalResult 一定存在return state.finalResult;}}

通过这种方式,TS 可以保证你不会在错误的阶段访问错误的状态,比如你不会在 init阶段访问plan,这些错误在编译阶段就会被拦截,不用等到运行时。

3.2 全栈一体化:一套语言覆盖所有场景

Agent 产品从来都不是一个单纯的后端工具,它往往需要覆盖多个场景:

后端的 Agent 逻辑、API 服务

前端的交互界面、控制面板

命令行工具(CLI),方便开发者调试

实时通信、WebSocket,用来做流式响应

如果用 Python 做后端,JavaScript 做前端,那么团队就需要维护两套技术栈,开发者需要在 Python 和 JavaScript 之间来回切换,心智负担非常大。

 TypeScript 可以用一套语言覆盖所有这些场景:

后端用 Node.js + Express/Fastify 搭建服务

前端用 React/Vue 这些同样基于 TypeScript 的框架

CLI 工具直接用 Node.js 开发,跨平台部署非常简单

实时通信、WebSocket 这些能力,Node.js 生态已经非常成熟

全栈一套语言,让团队的开发效率大幅提升,也减少了跨语言通信的成本。比如知名的 AI 编辑器 Cursor,就是完全用 TypeScript 开发的,从前端的编辑器界面,到后端的 Agent 逻辑,再到 CLI 工具,全部用一套语言完成。

3.3 成熟的异步与流式处理:完美适配 Agent 的工作模式

Agent 系统的工作流,本质上是大量的异步操作:

调用 LLM 的 API,等待响应

调用外部工具,等待执行结果

读写数据库、调用第三方 API

流式输出 LLM 的响应,让用户可以实时看到结果

TypeScript/JavaScript 的异步编程模型,是目前最成熟、最易用的异步模型之一。Promiseasync/await语法,让异步代码写起来和同步代码一样直观,可读性非常好。同时,Node.js 原生就支持流式处理、Web Streams API,完美适配 LLM 的流式输出场景。

实战示例:流式响应的处理

typescript// 处理 LLM 的流式输出,用 async iteratorasync function streamAgentResponse(messages: Message[]) {const stream = await openai.chat.completions.create({model: 'gpt-4o',messages: messages,stream: true,});// TS 的类型保证,每个 chunk 的结构是正确的for await (const chunk of stream) {const content = chunk.choices[0]?.delta?.content || '';// 逐字输出给用户process.stdout.write(content);}}

对比之下,Python 的 asyncio虽然也支持异步,但是生态的成熟度、开发者的熟悉度,都远不如 JavaScript 的异步模型,对于大部分全栈开发者来说,TypeScript 的异步代码更容易上手,也更少出错。

3.4 庞大的 npm 生态:不用重复造轮子

npm 是目前世界上最大的包管理器仓库,2025 年已经拥有超过 220 万个包,其中超过 80% 的包都提供了 TypeScript 的类型定义,几乎你能想到的所有能力,都有现成的开源实现:

你需要发邮件?有 NodemailerResend

你需要读写 PDF?有 pdf-parse

你需要操作数据库?有 DrizzlePrisma,还有各种数据库的驱动

你需要调用云服务?AWSGCPAzure 都提供了第一方的 TypeScript SDK

Agent 开发需要大量的集成能力,而 npm 生态让开发者不需要重复造轮子,只需要把这些现成的工具组合起来,就可以快速实现复杂的 Agent 能力,专注在核心的 Agent 逻辑上,而不是基础的工具开发。

3.5 对 AI 生成代码的天然适配

现在的 Agent 开发,很大程度上会依赖 LLM 来生成代码,但是 LLM 生成的代码,往往会有很多错误。根据 2025 年的学术研究,LLM 生成的代码中,94% 的编译错误都是类型错误

在动态类型的 Python 中,这些类型错误要等到代码运行的时候才会暴露,开发者需要花大量的时间去调试这些低级错误。而在 TypeScript 中,这些错误在编译阶段就会被拦截下来,开发者可以立刻修复,不用等到运行时。

举个例子,LLM 生成了这样的代码:

typescript// LLM 生成的处理用户数据的代码function processUser(user: User) {return user.name.toUpperCase();}

如果User接口里没有name字段,TS 会直接在编译阶段报错:属性 name 在 User 类型上不存在,你可以立刻修复,不用等到运行时才发现。

这就形成了一个正向循环:AI 生成代码 -> TypeScript 做类型校验,拦截错误 -> 得到高质量的代码 -> 开发者更愿意用 AI 来辅助开发,进一步提升效率。

3.6 成熟的 Agent 框架生态

目前主流的 Agent 框架,都把 TypeScript 作为第一优先级的支持语言,而且很多框架的 TS 版本已经超过了 Python 版本的活跃度:

LangChain.jsLangChain 的 JavaScript/TypeScript 版本,2025 年的周下载量已经超过了 100 万,超过了 Python 版本,成为了 LangChain 最受欢迎的版本。

Vercel AI SDK:专门为 TypeScript 设计的 AI 应用开发框架,完美支持流式输出、工具调用,是现在最流行的 Agent 开发框架之一。

LlamaIndex.TSLlamaIndex 的 TypeScript 版本,用来做数据索引、RAG 开发,已经支持大部分的 Python 版本的能力。

OpenAI Agents SDKOpenAI 官方的 Agent SDK,优先提供了 TypeScript 的支持。

MastraOpenClaw等新兴的 Agent 平台,也都是基于 TypeScript 构建的,已经获得了 YC 等顶级机构的投资。

这些框架的成熟,反过来又推动了更多的开发者选择 TypeScript 来开发 Agent,形成了生态的正向循环。

四、TypeScript 的局限性与技术权衡

当然,TypeScript 也不是银弹,它也有自己的局限性,我们需要客观地看待这些权衡:

1.计算密集型任务的性能TypeScript 编译成 JavaScript 运行在 Node.js 上,对于 I/O 密集型的 Agent 逻辑来说,性能完全足够,但是对于计算密集型的任务(比如大规模模型推理、大规模数据处理),它的性能不如 RustGo 这类编译型语言。

现在的行业解法是:用 Rust 写核心的性能敏感模块,比如向量检索、张量计算,通过 FFI 暴露给 TypeScript,用 TypeScript 做上层的胶水层,兼顾开发效率和性能。

2.类型复杂度:为了实现严格的类型安全,有时候需要写非常复杂的类型定义,也就是所谓的 "类型体操",这会增加代码的理解成本,对于新手来说不太友好。

现在的 ZodValibot 这类库,已经把复杂的类型定义封装起来了,开发者不需要自己写复杂的类型,只需要用这些库的 API 就可以了,降低了门槛。

3.构建步骤:传统的 TypeScript 需要编译成 JavaScript 才能运行,不过现在的 tsxBun 这些工具,已经支持直接运行 TS 代码,不需要手动编译,比如 tsx agent.ts就可以直接运行,和运行 JS 代码一样简单,这个问题已经基本解决了。

五、总结:AI 开发的分工与未来

TypeScript 成为 AI Agent 开发的主流选择,并不是偶然,而是它的特性刚好完美匹配了 Agent 开发的核心需求:

静态类型系统,解决了 Agent 复杂系统的可靠性问题,让自主运行的 Agent 可以稳定工作。

全栈一体化,降低了团队的开发成本,一套语言覆盖所有场景。

成熟的异步与流式处理,适配 Agent 的工作模式,轻松处理并发的工具调用与流式输出。

庞大的生态,让开发者可以快速集成各种能力,不用重复造轮子。

当然,Python 依然在模型训练、数据科学领域拥有不可替代的优势,未来的 AI 开发,大概率会是这样的分工:

Python 负责底层:模型训练、数据处理、大规模的 ML 工作流,这些依然是 Python 的优势领域。

TypeScript 负责应用层Agent 的 orchestration、工具调用、状态管理、用户交互,这些应用层的工作,刚好是 TypeScript 的优势领域。

两者互补,共同构建更强大、更可靠的 AI 应用,这也是当前 AI 开发的最新趋势。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-04 06:45:02 HTTP/2.0 GET : https://f.mffb.com.cn/a/490144.html
  2. 运行时间 : 0.131076s [ 吞吐率:7.63req/s ] 内存消耗:4,738.47kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=83e6352cf7d95817a835da9ca99a6a54
  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.000733s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000944s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000339s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000289s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000580s ]
  6. SELECT * FROM `set` [ RunTime:0.000229s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000683s ]
  8. SELECT * FROM `article` WHERE `id` = 490144 LIMIT 1 [ RunTime:0.000588s ]
  9. UPDATE `article` SET `lasttime` = 1783118702 WHERE `id` = 490144 [ RunTime:0.024797s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.007869s ]
  11. SELECT * FROM `article` WHERE `id` < 490144 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000631s ]
  12. SELECT * FROM `article` WHERE `id` > 490144 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002690s ]
  13. SELECT * FROM `article` WHERE `id` < 490144 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000693s ]
  14. SELECT * FROM `article` WHERE `id` < 490144 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001007s ]
  15. SELECT * FROM `article` WHERE `id` < 490144 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006781s ]
0.132583s