PHP内置服务器与Serverless
PHP从5.4版本开始就提供了一个内置的WEB服务器,可以通过一个简单的命令php -S
启动一个WEB服务器,极大简化了开发环境的搭建。
到目前为止,官网文档对于内置服务器的使用依然建议用于开发环境,不建议用于生产环境,原因倒是很容易理解,主要有两个方面:
- 支持的MIME类型很少,5.4版本放出时只支持.htm和.svg(从5.5版本完善了大部分常见的MIME类型支持)
- 仅实现了基本功能,基本没有任何优化,是一个单线程进程(不过从7.4版本开始,内置服务器支持多进程的运行方式)
从传统开发角度看,这样性能和功能的服务器确实很难应用于生产环境,但是伴随着Serverless的发展,感觉内置服务器的限制突然不是那么重要了。
使用Serverless服务,不管是AWS Lambda,Google Function,还是国内阿里云的函数计算、腾讯云的云函数,我们关注的点不再聚焦于单机性能释放,而是变成了以下四个方面,我们要做的本质上变成了降低单请求的资源占用和执行时间:
- 调用次数
- CPU时间
- 内存占用
- 执行时间
- 带宽
我们可以逐个对比以下,
- 调用次数显然很难因为WEB服务器的变化有什么变化
- CPU时间上,内置服务器作为一个单进程应用,同样的逻辑在函数计算这样的环境下,较少了Nginx与FPM交互的网络开销、Nginx的运行开销,理论上内置服务器应该表现更好
- 内存占用方面,内置服务器不再需要运行Nginx,同样逻辑,应该也比传统部署方式占用更少一些
- 执行时间,Nginx FPM需要启动两个进程,需要两个进程间的通信,很难与直接启动PHP进程更快
- 带宽基本不用对比,应该不会有什么变化,gzip完全可以在CDN层来实现
从Serverless的角度看,内置服务器并不算是一个很差的选择,对比传统的运行方式可能更加合适一些,就是不太清楚不建议生产环境使用是否有除性能外的其他原因,回头去翻一翻PHP的issue。
参考文章
-
- 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导航