norepad++如何编写php代码神秘的PHP项目终于揭开面纱,加速和优化PHP扩展手把手编写自己的php mvc
2022-02-05
神秘的 PHP 项目终于揭开了面纱。该项目由 PHP 到 C++ 转换器、重新实现的 PHP 运行时以及许多流行的 PHP 扩展的重写版本组成,旨在加速和优化 PHP。
用项目负责人赵海平的话说,项目影响巨大。它目前支持 % 的网络流量。这样一来,服务器上的 CPU 使用率平均降低了 50%,大大降低了对服务器的需求。为了让这项改进也造福于社区,他们决定将其开源,希望进一步帮助提高更多大型和复杂 PHP 网站的可扩展性。
PHP 的问题和
众所周知,的前端主要是用PHP编写的。赵海平说,过去的六年,从 PHP 语言的进步中受益匪浅。PHP 非常简单,易于学习和使用,易于阅读和调试,因此新工程师快速成长,这有利于促进更快的创新。
PHP 是一种脚本语言,其优点是编程效率高,并且能够支持产品的快速迭代。但是相对于传统的编译语言norepad++如何编写php代码,脚本语言在 CPU 和内存的使用上效率并不高。随着Ajax技术的广泛采用和SNS的高动态要求,这些缺点更加突出。对于每月超过 4000 亿个 PV,扩展尤其具有挑战性。
一种常见的方法是直接使用 C++ 将 PHP 应用程序中更复杂的部分重写为 PHP 扩展。实际上,PHP 被转换为连接前端 HTML 和 C++ 应用程序逻辑的胶水语言。从技术角度来看,这很好,但随着技能要求的提高,能够处理整个应用程序的工程师数量大大减少。学习 C++ 只是编写 PHP 扩展的第一步网站模板,理解是下一步。由于工程团队规模小,每位工程师需要支持超过 100 万用户。有些代码不是团队中的每个人都理解的,这是不可接受的。
网站本身的可扩展性更具挑战性,因为几乎每个页面视图都是由具有个性化体验的登录用户发起的。浏览首页时,系统需要查找你所有的朋友,他们最重要的状态更新,根据隐私设置过滤结果,然后显示评论、照片等,这一切都在一秒钟内完成。
自 2007 年以来,已经针对这些问题编写了几种不同的方法。这包括用另一种语言重写,但由于开发的复杂性和速度等原因,它没有实施。他们还重写了 PHP 的核心部分 Zend 引擎,并提交给 PHP 项目,但最终没有得到他们需要的性能。最终,他们选择了,最终得到了他们想要的。
有了它,工程师可以用 PHP 编写代码、编写逻辑以组装最终页面,并继续快速迭代,而后端服务则用 C++、Java 编写,提供新闻提要、搜索、聊天和其他核心功能。
发展故事
赵海平透露,这个项目最初来源于几年前公司的一次活动(员工一晚上自由发挥,尝试新想法)。他手动将 PHP 转换为 C++ 代码。尽管语法非常相似,无论是 CPU 还是内存使用norepad++如何编写php代码,转换后的 C++ 代码都明显优于 PHP。所以他想网站优化,如果你建立一个系统并对转换进行编程呢?
在那之前,已经有很多方法可以提高 PHP 的性能。Zend 引擎在运行时将 PHP 源代码转换为在 Zend 虚拟机上运行。大多数 PHP 网站使用的开源项目 APC 和输出缓存。此外,还有像这样的商业产品通过优化和缓存来提高 PHP 速度。赵海平选择了另外一条路,直接把PHP转成C++,再转成本地机器码。当然,同样的方式还有很多开源项目,phc编译成C,编译成Java,编译成.NET。
接下来的8个月,赵海平拿出了原型,足以说明这条路是可以走的,而且编译出来的代码确实更快。很快,加入进来。接下来是另外 10 个月的开发和 6 个月的生产服务器测试。然后它正式启动和部署。6 个月后,超过 % 的网络流量被使用。
据赵海平介绍,正因为如此,服务器上的CPU使用率平均降低了50%,从而大大降低了对服务器的需求。该项目影响巨大。为了让这项改进也造福于社区,他们决定将其开源,希望进一步帮助提高更多大型和复杂 PHP 网站的可扩展性。
原则
将 PHP 代码转换为高度优化的 C++ 代码,然后使用 g++ 编译器进行编译。它可以在保持语义等价的同时执行源代码,但为了性能牺牲了一些很少使用的特性,例如 eval()。
转换过程是一个三步过程:
· 静态分析。收集诸如声明性关系和依赖关系之类的信息。
·类型扣除。选择最合适的类型,它是 C++ 标量吗?或者,,,或者。
· 代码生成。大多数 PHP 语句和表达式直接对应于 C++ 语句和表达式。
在开发过程中,还有一个副产品: ,一个实验性的解释器。有了它,你可以在不编译 PHP 源代码的情况下运行它。它已在自己的调试中使用。
在保持PHP优势的同时,也具备C++的性能优势。该项目总共有 300,000 行代码和 5,000 多个单元测试。所有将在 PHP 开源许可下发布。