当前位置:首页>python>“Python 3永远不可能出现在Facebook”,4年后:真香

“Python 3永远不可能出现在Facebook”,4年后:真香

  • 2026-01-09 10:27:54
“Python 3永远不可能出现在Facebook”,4年后:真香
作者|Jake Edge
编辑|Natalie、Vincent、Debra
出处丨 AI 前线公众号
过去几年,Python 3 的采用量明显增加,但它仍有很长的路要走。采用 Python 的大型公司倾向于在其基础架构上运行大量的 Python 2.7 代码,Facebook 也不例外。在今年的 PyCon 2018 会议上,Facebook 产品工程师 Jason Fried 讲述了该公司在过去四年时间里,Python 3 从几乎无人问津到成为该公司主流 Python 版本的全过程,也展示出 Fried 作为一名工程师的坚持。

按例先贴演讲视频:

Jason Fried 现任 Facebook 的产品工程师,在帮助公司实现这一目标方面发挥了重要作用,他在演讲中讨论了关于如何解决 Python 版本迁移的一些想法。

Fried 在 2011 年进入 Facebook 工作,很快,他就发现需要自学 Python,因为在 Facebook,Python 代码更容易通过代码评审。后来,他发现自己成为推动 Facebook 采用 Python 3 的主要动力。他表示从未特地进行过计划,只是 Python 用得多了,自然而然产生的结果。

(Jason Fried)

Jason Fried 最初因在 Python 内部社区中非常活跃而展露头角,他经常是第一个站出来回答问题的人。随后,他在 Facebook 作为 Python 的支持者而渐渐成名(或者说”臭名昭著“),因为当他看到 Python 代码中出现问题时,他会未经许可就直接上手修改。这在 Facebook 行之有效,因为这里并没有真正意义上的自上而下的控制机制,每个人都有权利对一个代码变更做出修改,就像你有权利做出代码变更一样。随着时间推移,他在 Facebook 的内部 Python 社区内建立起了威信,这对他日后在 Facebook 顺利主导 Python 版本迁移起到了很大的推动作用。

这是 Fried 演讲中提到的关于 Python 3 在 Facebook 从无人问津到占主导地位的完整时间线,可以看到,这个过程花了将近 5 年的时间,实属不易。

2013 年(基本支持→负面情绪→希望乍现)

Python 3 永远不可能出现在 Facebook

Python 3 在 Facebook 的落地过程非常艰难,一开始遭到内部的否定,甚至让 Fried 一度认为它不可能出现在 Facebook,直到目前超过 55% 的采用率,整个过程非常坎坷。

他说,要在“Facebook 规模”上改变 Python 版本这类东西需要花费相当多的时间,并需要使用很多“外交“手段。他讲述了他和几个工程师是如何利用空闲时间,在没有任何权力的情况下让 Python 3 成为 Facebook 主要版本的。

2013 年,Facebook 打算开始初步支持 Python 3,因为他们需要向构建系统中添加 Python 3 支持。但因为 Facebook 库不支持 Python 3,所以无法向构建系统添加 Python3。而如果构建系统不支持 Python 3,Facebook 库就不可能支持 Python 3。这就像《第二十二条军规》里描述的矛盾军规一样,Python 3 虽然“可用”,但在 Facebook 环境中得不到任何支持。

另外,在 2013 年,Facebook 内部对 Python 3 抱有很大的消极情绪。总体来说,他们认为公司的编程语言将永远停留在 Python 2.7 版本。还有人建议完全换成另一种语言。Fried 也曾表示(在内部社区中)Python 3 永远不会出现在 Facebook。只有一个人向他提出质疑,并建议他做些事情来改变这种情况,虽然当时他忽略了这个建议,但这个想法却留在了他的脑海里。

希望乍现

2013 年,事情出现了转机。当年一月,当时 Facebook 正在使用的“linter”工具需要从 future 导入 print_function、division、absolute_imports 和 unicode_literals,以延长 Python 2 代码库的使用寿命。他们在任何 linter 提示的地方导入这些包,这样可以更容易将模块转为 Python 3。

用于序列化和远程过程调用的 Apache Thrift 框架在 Facebook“无处不在”。由于它仅支持 Python 2,所以成为最大的障碍。但是,由 Facebook Thrift 团队发起的一个有关 Thrift 新特性的问卷调查显示,开发者普遍希望能够添加 Python 3 支持。Fried 投了赞成票,但并不是跟风,他认为 Python 2 接口需要重构,因为它看起来好像 Java。

当他看到 Guido van Rossum 在旧金山的 Yelp 谈论一个叫做“Tulip”(最终成为了 asyncio 模块)的东西时,他的想法开始转变。他一直是 Python 异步编程爱好者,但因为框架(例如 Twisted、gevent)之间的差异而变得碎片化。而 Tulip 让异步 I/O 操作之间可以互操作。在那次演讲结束之前,他与 Facebook Thrift 团队沟通,表示 Thrift 应该直接支持 Tulip,而不是等 Twisted、gevent 和其他框架迁移到 Python 3。几天后,Thrift 团队发布了一个路线图,其中就有对 Python 3 和 Tulip 的支持。

Thrift 团队在 2014 年初推出了这两项新特性,但此后六个月并没有什么动静。用户并没有对此作出反应,实际上他们不关心,甚至根本不知道已经发生了这些变更。Fried 还顺便引用了中国盖了房子却没人住的例子来说明这种情况,真是让人哭笑不得。

2014 年(改变文化→从头开始→强制推行)

新项目

2014 年 8 月,他开始重写一个服务,并计划使用 gevent 和 Python 2,但他后来才意识到,如果这么做的话,在完成这个项目时它就过时了。为了有所改变,需要有人成为第一个做出改变的人。要在 Facebook 推动使用 Python 3,那个人非 Fried 莫属。

于是他使用 Python 3 开始他的项目,可想而知,他面对的是一个”一塌糊涂“的局面。当时 Facebook 没有人用 Python 3,构建系统不支持他的代码,而且所有第三方包仅适用于 Python 2。在他修复了所有问题,让代码通过编译后,又在运行时出了问题。

为了让代码能够正常运行,他必须修复所有问题。他重新构建了数百个第三方包,这样它们就可以同时支持两个版本的 Python,而且他必须让所有内部库可以兼容 Python 2 和 Python 3。但是,每天都有人会将 Python 2 变更提交到他的依赖项中。他需要不停地修复问题,并对此感到厌倦。一种解决方案是在组织内部强制进行 Python 3 合规,但这在 Facebook 根本不可能。但是,如果你表现得好像有某种权力时,人们会渐渐相信你真的有这种权力。

他动用了很多关系把 Pyflakes(一个 lint 工具)添加到构建过程中。他能够证明添加它是有道理的,因为虽然已经有了 PEP 8,但 Pyflakes 可以解决其他额外的代码质量问题。此外,Pyflakes 几乎没有误报,所以它不会惹火开发人员。他做了一些设置,让 Pyflakes 能够扫描所有需要审查的代码,先是 Python 2,然后是 Python 3。这有助于将 Python 3 兼容性扩展至所有开发人员,而不仅仅是他自己,这让他的项目取得了进展。

在刚开始,他必须花费大量的时间向人们解释“linter 是没有错的”,并且让代码能够在 Python 3 上运行是有价值的。如果开发人员开始觉得迁移到 Python 3 是件困难的事,他们就会回到“让我们永远留在 Python 2”的心态。他要尽量保证开发人员能够顺利在 Python 3 上运行代码。

2015 年(培训)

培训

虽然克服了一些困难,但在 Facebook 扩大 Python 3 地盘的进展甚微或毫无进展。他加入了为 Facebook 新员工进行 Python 编程培训的团队。他希望兼容代码仅用于遗留项目,而新项目应该用 Python 3 开发。

2015 年,他修改了新员工 Python 培训内容,表示 Facebook 总有一天会转向 Python 3,只编写 Python 2 代码是没有意义的,因为未来得重写。他教导新员工,所有代码都应该与 Facebook 基础架构和构建系统一致,如果不是,他们应该提交错误或尝试自行修复。这样,新的员工开始在工作中使用 Python 3,这就是进步的开始。“奇怪的是,事情就这么发生了”。

2015 年 1 月,他终于交付了他的项目。他花了大半年的时间告诉人们它有多好,为什么他们应该尽可能地使用 Python 3。一年来,很多在 Facebook 致力于推行 Python 3 的盟友在公司中出了名。

2016 年(Python 3 成为默认编程语言)

其中一位盟友是Łukasz Langa,他“说服了 Instagram 转向 Python 3”。 2016 年,Fried 和 Langa 在 Facebook 组建了一支全新的团队,在公司内部培训 Python,他们称之为“滑稽漫步团”(The Ministry of Silly Walks)。虽然只有两个人,但毕竟是一个“Python 团队”,于是他之前提到的“权威”开始起作用了:人们认为他们可以在 Facebook 做出有关 Python 的决策。

2016 年,他发现 Python 3 的采用量增长虽然缓慢,但还是有稳步的增长。人们在会议上提到它,他还经常听到有新项目在使用它。即使 Python 3 不是默认设置,项目也会选择使用它,Facebook 此时对 Python 3 的看法已经发生了变化。2016 年 5 月,Fried 表示打算将构建系统切换到默认使用 Python 3,他的这一提议几乎得到了绝对支持。几天之后,他完成了切换,切换之后并没有带来任何不良影响。

Fried 表示,2016 年,在 Facebook 中推动 Python 3 项目的只有十个人,其中三个是主要推动者,而且人事流动不断,做这个项目的很多人都是兼职。

2016 年底,有一个项目团队发表了一篇文章,其中介绍了切换到 Python 3 的结果。开发人员从 Python 2 换到 Python 3 时只需做出一些修复,运行代码的速度就提高了 40%,并仅使用了一半的内存。这打破了 Fried 之前听到的一个传言:Python 3 比 Python 2 慢。早期版本的 Python 3 可能是这样,但现在肯定不是,他说道。

2017 年(Instagram 迁移)

好事情发生

2017 年初,Facebook 因为 Instagram 完成了 Python 3 迁移而感受到 Python 3 迁移带来的荣光。Python 版本升级原来并不可怕,反而带来了可用的新功能。Facebook 开发人员现在开始使用新的静态类型或使用 asyncio 改造旧服务。“Python 在 Facebook 又开始变得很有趣了”。

现在的问题是,每个人都在问什么时候可以停止支持 Python 2。当 Python 2 支持库或模块出现回归时,通常会听到开发人员询问是否可以直接升级到 Python 3。而几年前,情况是完全相反的。“哦,世界真美好啊!”

2018 年(Python 3 占比超过 55%)

他展示了一张 Facebook 的 Python 服务入口端点随时间变化的图表,从 2015 年第三季度开始,那个时候只有四个 Python 3 服务入口端点。截至 2016 年年中,当切换到默认使用 Python 3 时,Facebook 已经有 4%的服务入口端点使用了 Python 3。2018 年 3 月,这一比例超过 50%。5 月中旬,当他发表演讲时,运行 Python 3 的 Facebook 服务入口端点比例已达 55%。在 Facebook,只能在 Python 2 上运行的代码现在处于尴尬的境地,Fried 说道。

Łukasz Langa 发推文,对 Python 3 低 CPU 占用和运行速度提升表示赞赏。

演讲接近尾声,他对演讲做了概述。总的来说,他的建议包括:

  • 你要做的是创新,做出改变,结果自然会来;

  • 你必须通过“亲力亲为让人看到你想要的变化”来引导开发者;

  • 你还应该寻求他人的帮助,不要单枪匹马;

  • 另外,培训新员工去实现你未来的目标是很重要的。

  • 收集需要的数据;

  • 享受得到的成果,用 Python 3 写一些“非常棒的东西”。

最后,他还回答了观众提出的一些问题。有人问,如何在传统、等级分明的组织中实现演讲中所说的目标。Fried 认为,实际上这可能会更容易一些,因为你不需要说服成千上万的开发者,只需要让管理层意识到这件事情的好处就可以了。如果在文化保守的组织中,这也可能很难,但专注于代码质量改进可能对此有所帮助。另一个问题是关于整体代码,而不是多个入口点,对于这个问题,Fried 建议看看 PyCon 2017 上的 Instagram 主题演讲(见文章开头)。

整个演讲让人受益匪浅,包括 Fried 强调的倡导者和领导者,以及坚持不懈的精神在一个项目中的的重要性。

原文链接:

https://lwn.net/SubscriberLink/758159/f1f631e1535ab9d6/

今日荐文

点击下方图片即可阅读

为什么 Python 发展得如此之快?


今日福利

还在自己苦学 Python?还在因摸不透 Python 2 与 Python 3 的差别而苦恼?有些小工具明明可以用几行代码解决,却因为不懂 Python 而白白浪费蛮多的时间精力?

跟十余年 Python 大神从零基础学 Python,基于 Python 3,通过实际问题的场景展开编码,让你系统化了解并掌握 Python!

扫码或点击“阅读原文”,即可试看或订阅

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-10 13:20:31 HTTP/2.0 GET : https://f.mffb.com.cn/a/458918.html
  2. 运行时间 : 0.156296s [ 吞吐率:6.40req/s ] 内存消耗:4,763.47kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=0da1f1a202f1844712271f95733f5eb6
  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.000723s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000876s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000302s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000887s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000529s ]
  6. SELECT * FROM `set` [ RunTime:0.000178s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000640s ]
  8. SELECT * FROM `article` WHERE `id` = 458918 LIMIT 1 [ RunTime:0.005556s ]
  9. UPDATE `article` SET `lasttime` = 1770700831 WHERE `id` = 458918 [ RunTime:0.001777s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000283s ]
  11. SELECT * FROM `article` WHERE `id` < 458918 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003928s ]
  12. SELECT * FROM `article` WHERE `id` > 458918 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003630s ]
  13. SELECT * FROM `article` WHERE `id` < 458918 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.016695s ]
  14. SELECT * FROM `article` WHERE `id` < 458918 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.036641s ]
  15. SELECT * FROM `article` WHERE `id` < 458918 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.014755s ]
0.157885s