为什么 PHP 不像 Python 一样在脚本执行之后自动生成类似于 pyc 这种字节码文件?

2016-12-11 13:27:42 +08:00
 changwei

在 php 里面如果要实现类似需求还得手动安装各种扩展,修改配置文件等等。

为什么他不直接像 Python 一样弄的自动化一点,方便用户使用?

这样的话普通的 php 开发者解决性能问题也就不用那么麻烦了

3663 次点击
所在节点    问与答
28 条回复
Tyanboot
2016-12-11 13:29:57 +08:00
我记得 PHP 好像运行时生成字节码。(好像是
ss098
2016-12-11 13:30:24 +08:00
HHVM 是这样的。
oisc
2016-12-11 13:35:59 +08:00
http://hhvm.com
php7 已经加入 JIT
txlty
2016-12-11 13:41:52 +08:00
普通开发者,解决性能问题最简单方式是换 php7 。
ryd994
2016-12-11 13:59:45 +08:00
pyc 只是提高加载的效率而已啊
pyc 其实和 java 之类的字节码还是有区别的,只翻译没优化
毕竟现在都不是 cgi 了
fcgi 进程常驻,是不是字节码几乎没区别
gouchaoer
2016-12-11 14:06:06 +08:00
php 有 opcache ,只是不存在源码目录下,你看不见的
gouchaoer
2016-12-11 14:07:31 +08:00
py 出来喷 php 的性能。。。 php 的性能在脚本语言里的大多数场景下,那是数一数二的
gouchaoer
2016-12-11 14:13:03 +08:00
hhvm 和这个差了十万八千里好吧
php7 加 jit 是谁说的
fcgi 方式让字节码缓存失去意义也太厉害了吧,你 php-fpm 里开 opcache 和不开看看性能如何
sagaxu
2016-12-11 14:17:19 +08:00
@gouchaoer 坏就坏在 fastcgi 记不住东西,框架初始化和 app 初始化每个请求都要做一次, php 写的框架 rps 连 1000 都跑不到,脚本里找不到第二个这么慢的
gouchaoer
2016-12-11 14:25:43 +08:00
@sagaxu fastcgi 方式特点就是耐草,你要找和 node 那样常驻内存的 php 也有, yaf 、 swoole 这些大厂都用,开一个命令行应用盯着 80 端口这种方式部署和运维都有很高要求,这里我觉得就 java 做的很成熟,别的脚本语言还没有特别成熟

单纯比语言本身性能, php 做的很好的
dant
2016-12-11 14:30:58 +08:00
PHP 性能不差,只要不踩 CGI 和 GC 这两个坑(
sagaxu
2016-12-11 14:41:19 +08:00
@gouchaoer 那么多 python 和 ruby 开发的后台长年累月的跑,然而并没有很多关于不成熟方面的报道。

不考虑运行环境,只比语言本身性能, php 在常用脚本里大概能排第三吧。 php 最大的优点还是门槛低,对开发者要求低, phper 可以不懂多线程同步,也可以无视资源泄露,甚至分不清 string 和 number 就可以干活了,基本数据结构也只有 array 一种,不像别的语言各种花样。
gouchaoer
2016-12-11 14:57:17 +08:00
@sagaxu
1 ,脚本语言里分场景的, zend 性能 team 跑了一些场景下的 benchmark : https://link.zhihu.com/?target=https%3A//pages.zend.com/rs/zendtechnologies/images/PHP7-Performance%2520Infographic.pdf

2 ,对开发者要求低是好事情,我喜欢 php 不装逼的特点,基本上就是把 c 语言写的库老老实实封装了一下,语法规规矩矩、该有的都有

3 , string 和 number 不分这种 py 更是没脸来说, php 早意识到强类型的好处, php7 里参数类型更是连 string , int 这种基本类型都加进去了。。。 py 的参数真的是严重缺乏类型

4 , array 就是好用,哈西是我, queue 是我,字典是我, stack 是我,数组还是我。。。。不好吗? spl 还有一些数据结构,这些花样没人用就是了
sagaxu
2016-12-11 15:38:46 +08:00
@gouchaoer

1. zend 团队敢拿 lua 和 nodejs 跟 php 跑一下性能测试么? 似乎现在 dart 性能也上去了。

2. 简单的事情用 php 可以更简单,但是一旦事情复杂了,用 php 会更复杂,对开发者要求反而更高。

3. anyway , python 是强类型语言, php 却不是。 python3 参数可以声明类型, cython 可以用 python 的子集写 python 扩展,通过静态类型获得几十倍的性能提升。

4. array 再好用,也改变不了不能从中间任意位置插入的硬伤。 Java
sagaxu
2016-12-11 15:39:28 +08:00
@sagaxu 和 C++ STL 那样的数据结构标准库,才能算好使。
eoo
2016-12-11 18:10:55 +08:00
@dant 求解
changwei
2016-12-11 21:14:53 +08:00
@gouchaoer 但是生成 opcode 这个过程是在运行时啊, Python 是在 import 的时候就生成好了 pyc 文件直接用
@dant 命令行执行 php ,性能也低啊,有人做过测试,貌似 php5.6 比 python2.7 还低一点,
@ss098 hhvm 的话程序可能有部分不兼容,我也没敢上
@oisc php7 还没上,现在很多主机最高都还是 php5.4 ,
gouchaoer
2016-12-11 21:36:06 +08:00
这么说吧,也许是你比较熟悉 py 而 php 接触少

论跨平台性和部署简易性, php 比 py 做的好很多
论性能, php 比 py 做的好非常多

你的一些观点有点缺乏对 php 的了解。。。。首先你搞错了扩展和第三方库, php 为了追求性能把一些函数用 c 写了,官方就是 pecl 扩展,分为多线程 /单线程版本,你要用需要自己安装。。。而第三方库就是纯的 php 的代码库了,跨平台的,管理为 composer ,类似 nodejs 的 npm 的第三方库管理。。。 py 没有这个概念,什么东西都一股脑装进 py 系统文件夹那里。。。 py 的库管理存在很大问题,平台兼容也没做好。。。所以说 php 在这里被 py 鄙视是荒谬的


opcode 在运行时,那 py 在 import 的时候不是运行时, hhvm 张口就来先去搞清楚概念, php5.6 和 py 比性能把各个场景的 benchmark 亮出来。。。后面的一些东西很暴露水平
gouchaoer
2016-12-11 21:45:02 +08:00
你知道 php 主机的 ftp 空间最高支持 php5.4 不正是说明部署简单么,而且有关键业务的谁会用 ftp 空间啊。。。。

我从前写过不少 py 吧,后来用 php 比较多。。。 php 和 py 不同场景优势不一样,不过 lz 提的这些场景 php 做的比 py 好
8e47e42
2016-12-11 21:49:23 +08:00
普通开发者纠结性能的意义不是很大, benchmark 什么的小用户感受不到。

像 php 开发的小站,性能不够果断硬件来压, 10 刀一个月的 VPS 跑不动就换 100 刀一个月的。
相比而言,你喊个码农帮你优化代码, 100 刀只能请吃个麻辣烫吧。。

世界第二好的语言 PHP 设计初衷就是为了易用,所以可能刚需没有那么足吧

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

https://www.v2ex.com/t/326809

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

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

© 2021 V2EX