PHP 编译器 BPC 6.2 发布,直接编译 PHP 文件为 web server!

2023-06-29 18:04:02 +08:00
 heguangyu5

不了解 BPC 是什么的可以翻看之前的帖子.

简言之,BPC 可以将 PHP 代码最终转译成 C 语言,然后编译成动态链接库或者可执行程序,实现 PHP Native AOT.

apache2 mod_bpc

在 BPC 6.2 之前,要想发布 web 应用,需要将 php 文件编译成.so,然后由 BPC 提供的 apache2 module mod_bpc 加载,借由 apache 对外提供服务,详见 07_mod_bpc.

althttpd/althttpd-tls

Althttpd 是 https://sqlite.org/ 背后的 webserver, 其简介如下:

Althttpd is a simple webserver that has run the https://sqlite.org/ website since 2004. Althttpd strives for simplicity, security, and low resource usage.

As of 2022, the althttpd instance for sqlite.org answers about 500,000 HTTP requests per day (about 5 or 6 per second) delivering about 200GB of content per day (about 18 megabits/second) on a $40/month Linode. The load average on this machine normally stays around 0.5. About 10% of the HTTP requests are CGI to various Fossil source-code repositories.

详见 Althttpd: The Althttpd Webserver.

Althttpd 源码只有一个 c 文件,我们将其改造,然后将 BPC 最终转译出来的.c 和 althttpd.c 编译在一起,于是一个全新的 web server 诞生了!

如果编译时再加上 --static 选项,那么最终交付时,就一个可执行文件,包含了 web server + php 逻辑 + js/css/image 等静态资源, 非常便捷!

BPC Playground

BPC 官网 https://bpc.dev Try it Online ( BPC Playground ) 已经支持将合适的项目编译成 althttpd, 感兴趣的可以试一试!

2707 次点击
所在节点    PHP
25 条回复
heguangyu5
2023-06-30 15:31:33 +08:00
@happy321 BPC 也是重新实现了每一个扩展,只不过扩展开发简单一些,并且还有 php 扩展源码做参考.

BPC 不以性能为第一目标,能和 php 持平就可以了,但和 php 的兼容性一定要高,这样能在 php 环境下做开发调试,只是发布时拿 BPC 编译一下.
heguangyu5
2023-06-30 15:36:23 +08:00
@jry 所以这时间有测试用例保障是非常重要的.一个黑盒子,给定同样的输入,给出同样的输出,内部怎么改都没什么可怕的.要是没有完善的测试用例,做起来心里肯定不踏实.
happy321
2023-06-30 21:28:07 +08:00
@heguangyu5 原生的 PHP 性能已经跟不上了,遇到几个慢查询 就玩完了…… 建议自己实现一个服务器吧 swow 是用 c 语言的 libuv 构建的 可以参考一下 或者 直接引用进来
millken
2023-06-30 22:29:32 +08:00
是否支持跨平台编译
heguangyu5
2023-07-01 08:43:26 +08:00
@millken BPC 不支持跨平台编译,这只是实现时的简化选择而已.

BPC 将 php 编译成 bigloo scheme,而 bigloo scheme 是支持多平台并且能够 Cross Compilation 的.如果愿意,肯定是能做到的,但目前还没到那个阶段.

1. http://www-sop.inria.fr/indes/fp/Bigloo/index.html
2. http://www-sop.inria.fr/indes/fp/Bigloo/manual-chapter33.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/952783

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX