PHP内置服务器与Serverless

2023-10-19 09:57:59 浏览数 (2)

PHP内置服务器与Serverless

PHP从5.4版本开始就提供了一个内置的WEB服务器,可以通过一个简单的命令php -S启动一个WEB服务器,极大简化了开发环境的搭建。

到目前为止,官网文档对于内置服务器的使用依然建议用于开发环境,不建议用于生产环境,原因倒是很容易理解,主要有两个方面:

  1. 支持的MIME类型很少,5.4版本放出时只支持.htm和.svg(从5.5版本完善了大部分常见的MIME类型支持)
  2. 仅实现了基本功能,基本没有任何优化,是一个单线程进程(不过从7.4版本开始,内置服务器支持多进程的运行方式)

从传统开发角度看,这样性能和功能的服务器确实很难应用于生产环境,但是伴随着Serverless的发展,感觉内置服务器的限制突然不是那么重要了。

使用Serverless服务,不管是AWS Lambda,Google Function,还是国内阿里云的函数计算、腾讯云的云函数,我们关注的点不再聚焦于单机性能释放,而是变成了以下四个方面,我们要做的本质上变成了降低单请求的资源占用和执行时间

  1. 调用次数
  2. CPU时间
  3. 内存占用
  4. 执行时间
  5. 带宽

我们可以逐个对比以下,

  1. 调用次数显然很难因为WEB服务器的变化有什么变化
  2. CPU时间上,内置服务器作为一个单进程应用,同样的逻辑在函数计算这样的环境下,较少了Nginx与FPM交互的网络开销、Nginx的运行开销,理论上内置服务器应该表现更好
  3. 内存占用方面,内置服务器不再需要运行Nginx,同样逻辑,应该也比传统部署方式占用更少一些
  4. 执行时间,Nginx FPM需要启动两个进程,需要两个进程间的通信,很难与直接启动PHP进程更快
  5. 带宽基本不用对比,应该不会有什么变化,gzip完全可以在CDN层来实现

从Serverless的角度看,内置服务器并不算是一个很差的选择,对比传统的运行方式可能更加合适一些,就是不太清楚不建议生产环境使用是否有除性能外的其他原因,回头去翻一翻PHP的issue。

参考文章

  1. PHP-Built-in web server(https://www.php.net/manual/en/features.commandline.webserver.php)
  • MySQL多层级树形结构表的搜索查询优化
  • 使用WordPress作为小程序后端——APPID有效性前置检查
  • 使用WordPress作为小程序后端——小程序请求前置检查
  • Windows rclone挂载sftp
  • 迁移——从Electron迁移到Eclipse Theia
  • 使用typescript开发chrome扩展
  • use multiple simple queries or a join
  • php: /usr/local/lib/libcurl.so.4: no version information available (required by php)
  • how to improve the rank of search results in google
  • SEO导航

0 人点赞