PHP在实际项目中的应用:大公司案例与开发者经验教训

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP在实际项目中的应用:不是神话,而是巨头的实战工具

\n\n

当听到“PHP”时,脑海中常常浮现出旧论坛或自建电商网站的形象。但说实话:PHP在实际项目中不仅仅是遗留代码。这是一个被Facebook(部分)、Wikipedia、Slack(初期)和Etsy所使用的语言。他们选择PHP并非出于无奈,而是因为它能解决他们的需求。

\n\n

在本文中,我们将分析使用PHP的公司的实际案例。您将看到代码示例,了解他们如何解决瓶颈问题,最重要的是——可以从中汲取哪些经验教训用于自己的项目。开始吧!

\n\n

为什么大公司不避讳使用PHP?

\n

PHP走过了漫长的道路。带有JIT编译和严格类型检查的8.x版本已将其转变为严肃的后端语言。巨头们坚持使用PHP的主要原因:

\n
    \n
  • 快速开发。 PHP允许快速编写代码——这对初创公司至关重要。
  • \n
  • 庞大的社区。任何问题都有人解决过。Composer、Laravel、Symfony——生态系统已经成熟。
  • \n
  • 水平扩展。 PHP可以轻松克隆到数百台服务器上。
  • \n
  • 遗留代码。有时将所有代码重写为Go或Python是一种公司无法承受的奢侈。
  • \n
\n\n

案例#1:Facebook (Meta) —— HipHop和HHVM

\n

在2010年代,Facebook遇到了一个问题:PHP代码呈指数级增长,而标准解释器无法应对负载。马克·扎克伯格的工程师们走了一条非传统的道路——他们创建了HipHop for PHP,随后又创建了HHVM(HipHop虚拟机)。

\n\n

思路:将PHP转换为C++并进行编译。这带来了5-6倍的性能提升。后来HHVM成为带有JIT编译的虚拟机。大约在同一时间,PHP 7问世,解决了语言层面的一部分问题。

\n\n

对我们的启示:如果您的PHP项目运行缓慢,不要急于将其重写为其他语言。尝试优化代码,使用OPcache,对于最繁重的部分——编写C扩展或升级到PHP 8.x。

\n\n

示例:Facebook如何加速数组处理

\n
<?php\n// 问题:遍历大数组速度慢\n$users = getUsersFromDB(); // 100万条记录\nforeach ($users as $user) {\n    processUser($user);\n}\n\n// 解决方案:使用生成器和分块处理\nfunction getUsersChunked(int $chunkSize = 1000): Generator {\n    $offset = 0;\n    while (true) {\n        $chunk = getUsersFromDBWithLimit($chunkSize, $offset);\n        if (empty($chunk)) break;\n        foreach ($chunk as $user) {\n            yield $user;\n        }\n        $offset += $chunkSize;\n    }\n}\n\nforeach (getUsersChunked() as $user) {\n    processUser($user);\n}\n?>
\n

这种模式通过处理小块数据来降低内存消耗并加速执行。

\n\n

案例#2:Slack —— 初期使用PHP并转向混合架构

\n

Slack最初是一个基于CodeIgniter框架的PHP应用。团队很快意识到,对于实时聊天来说,仅仅使用PHP是不够的。但他们没有完全重写,而是采用了混合架构:PHP仍然用于Web和API,而实时逻辑则迁移到了Erlang,后来又迁移到了C++。

\n\n

有趣的事实:直到今天,Slack后端的大部分代码仍然是用PHP编写的。他们只是将关键的速度任务分离到了独立的微服务中。

\n\n

对我们的启示:不要将世界划分为“PHP不好,Go好”。在PHP擅长的领域使用它:CRUD、管理面板、数据库操作、集成。而对于websocket、队列和繁重计算,则使用专门的工具。

\n\n

示例:PHP与RabbitMQ集成实现异步消息发送

\n
<?php\nrequire_once __DIR__ . '/vend                

博客

书籍推荐