php为什么不设计成编译后再运行

时间:2022-10-21 23:14:51
问题1:如题,既然很多网站一直在为了处理高并发问题想尽各种办法,比如增加eAccelerator 、Memcache、XCache等php缓存加速器,起到保存编译之后的php执行碼的目的来缓解多次访问
多次编译带来的负载,与其这样,为什么不能直接将php编译之后再放在网站目录下面呢?php是脚本语言,难道是仅仅为了跨平台吗?
问题2:eAccelerator,Memcache,XCache三者的功能有差别吗?是不是都可以作为数据库和php的缓存,缓解数据库和php编译的压力?

11 个解决方案

#1


1.PHP不是JAVA,C++编译语言而是脚本语言不存在编译一说,你的意思是直接将php编译之后再放在网站目录==这样做等于生成静态页面,看服务器构架了,如果访问量太大,页面读取容易受到I/O影响,而缓存在内存速度远远大于I/O并且不易出现I/O瓶颈,主要看你的服务器的整体状态了,比如你如果是液态硬盘I/O性能足够问题不大。memcahce这类的也是存在瓶颈的,就是不能存太多太大的东西。
2.三者性能或多或少有一些区别,主要看自己的需求,缓解数据库压力也是一个很重要的东西,缓存加速器主要用途也是优化mysql查询负载和I/O、硬盘负载

#2


没必要,缓存有数据缓存文件缓存,数据缓存可以用memcache等一些工具,文件缓存可以有类似smarty的,当然了,可以自己做的比smarty还要彻底的文件缓存,这样一来你说的那种做法就完全没有必要了

#3


为什么不设计成编译后再运行?
这是个有趣的问题。这取决于一开始的php定位——服务器端脚本。
说实在的,php的创造者怎么也不会想到php会发展到现在的状态。不过,如果php是编译执行的话,估计也没有几个人会去用他。zend 不是也推出了php的编译器吗(只是很多人把它称之为加密)

eAccelerator、XCache 和 Memcache 不是一回事,前者的主要用于共享伪编译后的程序,后者主要用于共享用户数据

#4


引用 3 楼 xuzuning 的回复:
为什么不设计成编译后再运行?
这是个有趣的问题。这取决于一开始的php定位——服务器端脚本。
说实在的,php的创造者怎么也不会想到php会发展到现在的状态。不过,如果php是编译执行的话,估计也没有几个人会去用他。zend 不是也推出了php的编译器吗(只是很多人把它称之为加密)

eAccelerator、XCache 和 Memcache 不是一回事,前者的……
谢谢大神关于第二个问题的回答!!!关于第一个问题,为什么如果php编译执行的话就没有人用了啊?

#5


除非有自动编译,否则如果一个网站上万个php的话,你去逐个编译吧!我精神上支持你

#6


能看到源代码,修改方便,其实挺好的。

#7


引用 4 楼 oanehc 的回复:
为什么如果php编译执行的话就没有人用了啊?

你认为 php 比 C/C++ 怎样?比 java 怎样?比 Delphi 怎样?...
显然功能要弱许多,速度要慢许多
如果 php 还要先编译的话,你会用吗?反正我不会

#8


楼上的都是神的解释,牛逼。不过讲的很有道理,我是拿着PHP简单当工具使用的,处理数据之类的,语法简单随时修改,更主要的是,在你机器测试好功能,在老板电脑打开浏览器直接演示,例如我在服装厂工作过,直接用php写成的随时查询 今天库存 入库 出库 物料使用 甚至 人事部门的人事调动,都可以从我写的程序点出来,总共就几个按钮。老板从来不会什么ERP之类的软件,打开你设置好的 IE快捷方式 点 按钮这个他会的吧!所以php还是挺强大的。

#9


适合装b,我的下场就是死的很惨,以前老板总认为应该有人管理和监控 公司的 一切 数据 现在好了,自动有了它,我要下岗了。悲哀。好就好在,我走东西也跟着我走,没留给他们,一群不识货的人认为我什么事都不做,整天坐那里倒弄自己的东西。  还有我写了的颜色自动分类功能,也是在基础资料入资料颜色必须是和ERP系统相同才可以的,例如什么什么黄 只要是浅色的统称 淡黄色  什么什么黄 黄色 深点的 杏黄色 等等,总之写了很多类,我的ERP基本不用人工干预,上班就是想怎么自动处理。后来我光荣的下岗了,现在自己开了个自动化集成工作室,一个人照样管理维护很多机器利用自动化赚钱。工作比老板给的工资高,感谢老板开除,要不然也不能解放自己开工作室。

#10


这个问题很有意思。

现在已经有一些框架不以PHP出现,而是以PHP extension出现(比如Phalcon),这可能是一个信号。

但是在用户代码级别,还是解释执行。

假定我们解决了种种跨平台编译的问题,有了类似G++那样的P++编译器,我们该怎样来部署我们的PHP应用呢?

服务器端的编译吗?那你至少需要SSH权限,还要VPS的供应商允许你链接那些必要的库进行编译。至少在目前,我不认为这是一个普适的做法。当然,你也可以自己用独立的虚拟主机,那是另外一回事……

另外,一个脚本可以被读取并被(系统信任的)解释器解释运行是一回事,这个脚本编译出来的可执行文件独立运行又是一回事。

在性能方面的提升呢?足够我们排除万难吗?我看也不一定。

首先,数据库连接方面,更多的额外开销是在和数据库建立/释放连接,发出SQL命令给数据库服务器,等待数据库服务器返回数据集。这个过程是编译器无法优化的。

其次,数据处理方面。如果你真的需要对数据进行大规模的运算,那么我只能要么建议抛开PHP用更高效的语言(C/C++等),要么对数据在服务器端进行处理再传递(比如用存储过程),要么就用高大上的Hadoop之类的并发。这些更结构性的改进带来的性能提升比我们纠结如何提高PHP编译器——如果有的话——编译效率而可能带来的效率提升更高,也更有前途,更有成就感。

第三,客户端呈现方面。那这和PHP本身关系也不大了。PHP只是将数据和显示的模板传递到客户端的浏览器,怎么渲染是浏览器的事情,PHP管不到。

所以,综上所述,鉴于PHP的这个语言的特殊性,编译PHP程序能带来的性能提升是很微乎其微的。这也许就是大牛如此多,却没有人去着手PHP编译器的道理吧。

#11


PHP你可以认为是一个模版引擎

#1


1.PHP不是JAVA,C++编译语言而是脚本语言不存在编译一说,你的意思是直接将php编译之后再放在网站目录==这样做等于生成静态页面,看服务器构架了,如果访问量太大,页面读取容易受到I/O影响,而缓存在内存速度远远大于I/O并且不易出现I/O瓶颈,主要看你的服务器的整体状态了,比如你如果是液态硬盘I/O性能足够问题不大。memcahce这类的也是存在瓶颈的,就是不能存太多太大的东西。
2.三者性能或多或少有一些区别,主要看自己的需求,缓解数据库压力也是一个很重要的东西,缓存加速器主要用途也是优化mysql查询负载和I/O、硬盘负载

#2


没必要,缓存有数据缓存文件缓存,数据缓存可以用memcache等一些工具,文件缓存可以有类似smarty的,当然了,可以自己做的比smarty还要彻底的文件缓存,这样一来你说的那种做法就完全没有必要了

#3


为什么不设计成编译后再运行?
这是个有趣的问题。这取决于一开始的php定位——服务器端脚本。
说实在的,php的创造者怎么也不会想到php会发展到现在的状态。不过,如果php是编译执行的话,估计也没有几个人会去用他。zend 不是也推出了php的编译器吗(只是很多人把它称之为加密)

eAccelerator、XCache 和 Memcache 不是一回事,前者的主要用于共享伪编译后的程序,后者主要用于共享用户数据

#4


引用 3 楼 xuzuning 的回复:
为什么不设计成编译后再运行?
这是个有趣的问题。这取决于一开始的php定位——服务器端脚本。
说实在的,php的创造者怎么也不会想到php会发展到现在的状态。不过,如果php是编译执行的话,估计也没有几个人会去用他。zend 不是也推出了php的编译器吗(只是很多人把它称之为加密)

eAccelerator、XCache 和 Memcache 不是一回事,前者的……
谢谢大神关于第二个问题的回答!!!关于第一个问题,为什么如果php编译执行的话就没有人用了啊?

#5


除非有自动编译,否则如果一个网站上万个php的话,你去逐个编译吧!我精神上支持你

#6


能看到源代码,修改方便,其实挺好的。

#7


引用 4 楼 oanehc 的回复:
为什么如果php编译执行的话就没有人用了啊?

你认为 php 比 C/C++ 怎样?比 java 怎样?比 Delphi 怎样?...
显然功能要弱许多,速度要慢许多
如果 php 还要先编译的话,你会用吗?反正我不会

#8


楼上的都是神的解释,牛逼。不过讲的很有道理,我是拿着PHP简单当工具使用的,处理数据之类的,语法简单随时修改,更主要的是,在你机器测试好功能,在老板电脑打开浏览器直接演示,例如我在服装厂工作过,直接用php写成的随时查询 今天库存 入库 出库 物料使用 甚至 人事部门的人事调动,都可以从我写的程序点出来,总共就几个按钮。老板从来不会什么ERP之类的软件,打开你设置好的 IE快捷方式 点 按钮这个他会的吧!所以php还是挺强大的。

#9


适合装b,我的下场就是死的很惨,以前老板总认为应该有人管理和监控 公司的 一切 数据 现在好了,自动有了它,我要下岗了。悲哀。好就好在,我走东西也跟着我走,没留给他们,一群不识货的人认为我什么事都不做,整天坐那里倒弄自己的东西。  还有我写了的颜色自动分类功能,也是在基础资料入资料颜色必须是和ERP系统相同才可以的,例如什么什么黄 只要是浅色的统称 淡黄色  什么什么黄 黄色 深点的 杏黄色 等等,总之写了很多类,我的ERP基本不用人工干预,上班就是想怎么自动处理。后来我光荣的下岗了,现在自己开了个自动化集成工作室,一个人照样管理维护很多机器利用自动化赚钱。工作比老板给的工资高,感谢老板开除,要不然也不能解放自己开工作室。

#10


这个问题很有意思。

现在已经有一些框架不以PHP出现,而是以PHP extension出现(比如Phalcon),这可能是一个信号。

但是在用户代码级别,还是解释执行。

假定我们解决了种种跨平台编译的问题,有了类似G++那样的P++编译器,我们该怎样来部署我们的PHP应用呢?

服务器端的编译吗?那你至少需要SSH权限,还要VPS的供应商允许你链接那些必要的库进行编译。至少在目前,我不认为这是一个普适的做法。当然,你也可以自己用独立的虚拟主机,那是另外一回事……

另外,一个脚本可以被读取并被(系统信任的)解释器解释运行是一回事,这个脚本编译出来的可执行文件独立运行又是一回事。

在性能方面的提升呢?足够我们排除万难吗?我看也不一定。

首先,数据库连接方面,更多的额外开销是在和数据库建立/释放连接,发出SQL命令给数据库服务器,等待数据库服务器返回数据集。这个过程是编译器无法优化的。

其次,数据处理方面。如果你真的需要对数据进行大规模的运算,那么我只能要么建议抛开PHP用更高效的语言(C/C++等),要么对数据在服务器端进行处理再传递(比如用存储过程),要么就用高大上的Hadoop之类的并发。这些更结构性的改进带来的性能提升比我们纠结如何提高PHP编译器——如果有的话——编译效率而可能带来的效率提升更高,也更有前途,更有成就感。

第三,客户端呈现方面。那这和PHP本身关系也不大了。PHP只是将数据和显示的模板传递到客户端的浏览器,怎么渲染是浏览器的事情,PHP管不到。

所以,综上所述,鉴于PHP的这个语言的特殊性,编译PHP程序能带来的性能提升是很微乎其微的。这也许就是大牛如此多,却没有人去着手PHP编译器的道理吧。

#11


PHP你可以认为是一个模版引擎