`
yipsilon
  • 浏览: 244728 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

PHP会倒掉吗?

php 
阅读更多

最近有不少文章讨论PHP如何如何不好,如何如何不适应企业应用,如何如何会倒掉的问题。我也发表一下我的看法。

 

我认为PHP的最成功之处在于以下几点:

 

1. 相对简单的语:PHP的语法构成囊括了C、JAVA、PERL等,这使得熟悉这些语法的人可以很轻易地入门PHP语言,而其他语言则不同,除非用户在一门语言中有了一定的经验,再去学另一门语言能稍微轻松些,但是对于毫无经验的初学者,那是一个痛苦的过程。

 

2. 丰富的类库支持:PHP内置了非常多的函数,而且都使用统一的命名环境,这样PHP开发人员只需要打开PHP参考文档就可以查询到,不必像其他语言那样(如Java),不断地加入第三方类库及学习其使用方法。

 

3. 低廉的部署成本:因为PHP本身就是开源的,因此它使用的环境大多是开源或免费的,况且市面上集成产品很多,如XAMPP,一解压运行个自动安装程序,就可以使用了。再看其他的语言,Java产品中免费的有tomcat,它还是需要进行一些手工配置,且性能非常一般;而ASP.NET的它本身就是收费的,这里就不说了。

 

再者就是,PHP是专门针对网站的,这使得它把全部精力投入到如何优化网站上面,不管是语法结构还是解释引擎。而其他语言如Java或.net,他们是一套通用的语言,网站应用只是其一部分,网站快速开发和应用能力确实没有PHP强。

 

上面几点总结出一句话就是:不用高价的开发人员,不用配置很高的硬件服务器,就可以非常快速地构建网站应用。而这个速度,是其他语言所不能匹敌的。最简单的测试不过是拿一个同样功能的网站,让一帮初级程序员分别用PHP、JAVA、ASP.NET进行开发,看看开发和部署速度的差距就知道了。

 

你会发现,这应该就是PHP的魅力所在。

 

至于OOP,我觉得对于网站的应用来说,只要能以最快的速度满足客户要求就行了,任何产品如果无法满足客户的需求,那使用再好的技术也是扯淡,更何况如果不是大中型项目,OOP是会拖累开发进度的,而目前大部分网站应用来说,基本都是小型项目。

 

而企业应用,我觉得PHP完全可以胜任,因为PHP它内置了支持调用Java和.NET组件,如果自身不行,那就用别人的嘛,只要快速开发的本质不变就行。

 

至少,从我接触PHP的这段时间来看,个人认为它不会垮掉,因为网站应用还没有能像它一样简洁快速的语言出现。(不要说ruby了,它的学习门槛不低啊,而且运行环境配置起来也比较复杂,大部分常用类库也都是外置的)

分享到:
评论
57 楼 diogin 2009-11-27  
icewubin 写道
引用
确实是这样的,这是草根文化的一种体现,PHP之所以发展这么壮大也是走了与其他语言不同的方向,事实证明它确实是成功的。


1994年,PHP 1.0就诞生了,比1995年Java诞生还早,花了15年,真不知道和ruby、python比,能不能算成功?

从市场占有率来说,PHP 是成功的,Python、Ruby 是失败的,两者加起来的市场占有率都没有 PHP 高。
56 楼 coolcoolhot 2009-11-27  
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">
<div class="quote_title">引用</div>
<div class="quote_div">确实是这样的,这是草根文化的一种体现,PHP之所以发展这么壮大也是走了与其他语言不同的方向,事实证明它确实是成功的。</div>
<br><br>1994年,PHP 1.0就诞生了,比1995年Java诞生还早,花了15年,真不知道和ruby、python比,能不能算成功?</div>
<p> </p>
<p> 反过来想想,这么多年了,为啥php就没有倒掉呢?也许10年后,还有人在论它的倒掉</p>
55 楼 icewubin 2009-11-27  
引用
确实是这样的,这是草根文化的一种体现,PHP之所以发展这么壮大也是走了与其他语言不同的方向,事实证明它确实是成功的。


1994年,PHP 1.0就诞生了,比1995年Java诞生还早,花了15年,真不知道和ruby、python比,能不能算成功?
54 楼 icewubin 2009-11-27  
引用

你记住这点就行了,“无利不起早”,IBM利用开放的Java和Java开源项目赚了多少钱你知道么?现在PHP火了,这些商业厂商当然不能放过赚钱的机会。不是我说的有理,事实就是这样的,利润是企业的根本。细数一下,这些投资开源项目的公司,他们的方案里都带有这些项目,为的就是赚钱,这其实是种良性循环。



要知道,微软的数据库和Sybase都差不多,而Sybase的数据库对JDBC的支持是很好的,因此,基本不用怎么移植就可以放在之前版本的MS SQL SERVER上,当然,新版的 SQL SERVER 越来越不同了,因此,慢慢地也只有微软官方的JDBC库越来越好用了,这是趋势。如果有心的话,你可以看看freetds等jdbc项目的开发人员,多多少少都会有微软或Sybase的人参与。



至于Oracle,貌似它就没参加过多少开源项目,当时不支持PHP应该是很正常的,不过随着它把SUN收购了,估计未来对PHP等跟MySQL相关的技术支持力度能加大。希望如此吧。


你没有看清楚我说的话,我没有说大厂商如何如何,我当然知道不同的大厂商有不同的策略,我质疑的是面对不同策略你举证的态度有问题,Oracle怎么怎么,你说了一段话,表明大厂不支持社区很正常,MS和IBM怎么怎么,你又说了句话,表明因为PHP火了大厂这么做也很正常,我都不明白你想说什么。

我是不是可以理解为,PHP在企业级的市场前景完全就看Oracle老大一家的喜好了?Oracle老大一个不开心?PHP的企业级市场就没戏了么?
53 楼 icewubin 2009-11-27  
引用
但有个前提就是,要是访问量太大的话,确实需要很多tomcat服务器来支持,也就是说要投入很多的硬件设备,而且几乎所有的java app server都有这个毛病,因此大多数软件方案都是包含有硬件集成的,毕竟对于大厂商来说,卖硬件是最赚钱的。


貌似我没有理解错啊,你认为java的tomcat服务器来支持是一种方案,而且这种方案是拿来卖的。

可能我重点说Tomcat了,你认为不妥。

1.“访问量太大的话,确实需要很多tomcat服务器来支持”这句首先我是不承认的,我可没有说过,起点就不对。我们公司2000多台服务器,跑Tomcat的只占很小一部分。全国跑图片服务器的就有一大坨呢。

2.“几乎所有的java app server都有这个毛病”,这谁告诉你的?请举证。

3.一般互联网公司哪有提“软件方案都是包含有硬件集成”,只有做企业级应用才会这么操作。服务器都是根据需要单买的。
52 楼 yipsilon 2009-11-27  
<p> </p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">说着说着你怎么说到“卖硬件是最赚钱的”,硬件厂商会卖Tomcat么?你这个想法是4-5年前了,而且是企业应用才会有的。 <br><br>互联网应用的公司怎么可能会干企业应用的这种傻冒事情?</div>
<p> 这位老兄,请看好我说的话:</p>
<p> </p>
<div class="quote_div">但有个前提就是,要是访问量太大的话,确实需要很多tomcat服务器来支持,也就是说要投入很多的硬件设备,<strong>而且几乎所有的java app server都有这个毛病,因此大多数软件方案都是包含有硬件集成的,毕竟对于大厂商来说,卖硬件是最赚钱的</strong>。</div>
<p>看到黑体的字了么?麻烦你看文章千万别断章取义,会害死人的。呵呵。</p>
<p> </p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">这段话的倾向性有问题啊: <br><br>大厂商Oracle不开发好的驱动,你就说“他们不开发,难道让一帮外行人来做这事情”?(说到这个,还真有非微软的公司开发了比微软自己提供的驱动更好的SQLServer 2000的JDBC驱动) <br><br>大厂商IBM和MS示好PHP,你又说市场有利润才促使大厂商支持PHP社区。 <br><br>奇怪了,大厂商无论如何做,你都有理啊,那为什么Oracle不能像IBM、MS那样支持PHP社区呢?市场有利润啊。</div>
<p> 你记住这点就行了,“无利不起早”,IBM利用开放的Java和Java开源项目赚了多少钱你知道么?现在PHP火了,这些商业厂商当然不能放过赚钱的机会。不是我说的有理,事实就是这样的,利润是企业的根本。细数一下,这些投资开源项目的公司,他们的方案里都带有这些项目,为的就是赚钱,这其实是种良性循环。</p>
<p> </p>
<p>要知道,微软的数据库和Sybase都差不多,而Sybase的数据库对JDBC的支持是很好的,因此,基本不用怎么移植就可以放在之前版本的MS SQL SERVER上,当然,新版的 SQL SERVER 越来越不同了,因此,慢慢地也只有微软官方的JDBC库越来越好用了,这是趋势。如果有心的话,你可以看看freetds等jdbc项目的开发人员,多多少少都会有微软或Sybase的人参与。</p>
<p> </p>
<p>至于Oracle,貌似它就没参加过多少开源项目,当时不支持PHP应该是很正常的,不过随着它把SUN收购了,估计未来对PHP等跟MySQL相关的技术支持力度能加大。希望如此吧。</p>
<div class="quote_title">diogin 写道</div>
<div class="quote_div"><span>大体上来说确实有这种问题。实际上 PHP 社区有一种文化,这种文化追求“能完成活就行,设计与否是次要的”。因此 PHP 语言规范及其实现有很多问题,诸如 API 不规范,OOP 模型有缺陷,社区人心不齐,等等。PHP 创始人 Rasmus 就不止一次提示过“一种特性只要符合 PHP ‘实用’的目标,就可以加入 PHP 语言,美与丑并不那么重要”。对设计出身的人来说,是很难接受这种文化的。</span></div>
<p>
 确实是这样的,这是草根文化的一种体现,PHP之所以发展这么壮大也是走了与其他语言不同的方向,事实证明它确实是成功的。</p>
51 楼 geweixin 2009-11-27  
目前在一对日外包企业中,PHP。。。用的别扭~~
50 楼 aninfeel 2009-11-27  
开发速度不是其它语言能比的,但是开发出垃圾产品的数量也不是其它语言能比的吧
49 楼 diogin 2009-11-27  
fireflyc 写道
PHP社区缺乏热情,没有活力,死气沉沉


大体上来说确实有这种问题。实际上 PHP 社区有一种文化,这种文化追求“能完成活就行,设计与否是次要的”。因此 PHP 语言规范及其实现有很多问题,诸如 API 不规范,OOP 模型有缺陷,社区人心不齐,等等。PHP 创始人 Rasmus 就不止一次提示过“一种特性只要符合 PHP ‘实用’的目标,就可以加入 PHP 语言,美与丑并不那么重要”。对设计出身的人来说,是很难接受这种文化的。
48 楼 icewubin 2009-11-27  
引用
要知道,OCI库是Oracle开发人员提供的,他们不开发,难道让一帮外行人来做这事情?至于你说的连接池,貌似跟线程没关系吧,举个例子,如果OCI想加连接池,直接在PHP模块中(C写的)分配一块内存来开发就行了,然后写几个API供OCI模块调用就可以呀,解决的方法有的是,关键是人家愿不愿意拿出来给你用。对所有商业厂商来讲,支持开源项目关键是能不能为自己盈利,大家都去用PHP连Oracle数据库了,那Oracle自己的App Server往哪里卖呀?这也是为什么IBM的Websphere和IIS都开始全面支持PHP了,因为有市场有利润,而不是吃饱了撑的去支持开源社区。

这段话的倾向性有问题啊:

大厂商Oracle不开发好的驱动,你就说“他们不开发,难道让一帮外行人来做这事情”?(说到这个,还真有非微软的公司开发了比微软自己提供的驱动更好的SQLServer 2000的JDBC驱动)

大厂商IBM和MS示好PHP,你又说市场有利润才促使大厂商支持PHP社区。

奇怪了,大厂商无论如何做,你都有理啊,那为什么Oracle不能像IBM、MS那样支持PHP社区呢?市场有利润啊。
47 楼 icewubin 2009-11-27  
引用
这里可以讨论,但不许侮辱别人哦,我有些看不过去了,呵呵。兄弟说的这个“烂”字我不知道是指什么,如果是性能问题,那它并不烂,如果你把它研究透了,通过一些设置,能达到一个很不错的性能,而且,它本身还可以做集群,处理大型应用完全不成问题,但有个前提就是,要是访问量太大的话,确实需要很多tomcat服务器来支持,也就是说要投入很多的硬件设备,而且几乎所有的java app server都有这个毛病,因此大多数软件方案都是包含有硬件集成的,毕竟对于大厂商来说,卖硬件是最赚钱的。

说着说着你怎么说到“卖硬件是最赚钱的”,硬件厂商会卖Tomcat么?你这个想法是4-5年前了,而且是企业应用才会有的。

互联网应用的公司怎么可能会干企业应用的这种傻冒事情?
46 楼 diogin 2009-11-27  
不用争了,一切差异的根源我都喊了 N+1 年了:PHP 的运行模型完全是为 HTTP 这种瞬态的“请求——响应”式模型而设计,任何脱离了这种模型的计算,PHP 都不适合。当然 PHP 也有 cli,也可以以 daemon 的形式运行,也可以独立弄成 Web 服务器来运行,但那性能和编程的便利程度跟其它语言(特指 Python、Ruby、Java)没法比,是一种拿筷子去喝汤的行为。

我认为:只要 HTTP 这种瞬态的“请求——响应”式模型不会倒,PHP 就不会倒。

如果 HTTP 不再是瞬态,如果它大量要求服务端进程内的编程对象需要跨请求存在、跨请求持久,那时候就是 PHP 的末日。
45 楼 wq13480 2009-11-27  
肯定不会跨掉,各有各的用途嘛!看需求
44 楼 yipsilon 2009-11-27  
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">1.我不知道跑在8080和跑在80端口会有什么本质区别,给你的调试带来了麻烦么?为你的学习带来了成本妈?你是ajp,apache2.2,这是风马牛不相干的事情,ajp是apache开发的一个通讯协议本意用于服务器之间的通讯,这个有什么关系么?</div>

<p> 老兄啊,你难道在部署的时候直接用tomcat跑80端口啊?一个成熟的Java Web应用都是web server+app server的,用apache的ajp说话,因为apache+tomcat通过ajp通讯是最简单的配置方式了,但比起PHP来确实还是复杂了许多。你关于JAVA部分的论点,实在不敢恭维,麻烦多多进修一下再来讨论吧。</p>
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">你说asp流行还给出了一个看似合理的理由,那么你确信这个理由成立吗?当年web出现是CGI在统治世界,后来人们开始用脚本写CGI了,再后来微软开发了一个脚本来代替那些编译型的语言,与此同时也有很多人提供了各种脚本和技术来减轻编译型CGI的痛苦。那么这个理由是很正常的,历史的发展选择了简单,人们需要简单所以创造了一些东西来减轻自己的痛苦。如此而已。如果让我在asp的错误和java的错误上选择我会选择有错误堆栈的java,能让我准确定定位到代码的位置。如果说有不懂的问异常什么意思也很正常,难道那个error xxx unexpected之类的能够让不懂的人看的更清楚么?难道没有人问马?</div>

<p> 编译型语言?Perl可比ASP早多了,也是当时CGI程序的主流力量,我怎么不知道它是编译型的啊?在ASP出来之前Perl的用户量非常大,后来市场份额被ASP蚕食得很厉害,要知道ASP的功能并没有Perl强大,但是在那个时代却站稳了脚跟。</p>
<p> </p>
<p>其实当初ASP的一些莫名的错误,都可以找到解决方案的,你可以问微软的人,如果他们愿意免费给你解答的话。严重的封闭性就是ASP被逐步淘汰的原因之一。</p>
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">2.ok,再次印证了为php提供广泛库的组织很少。几乎只有官方自己。。。这个让我想起了不堪重负的微软。如果说把这种社区的不繁荣当作一种没有必要作选择的理由的话,如果把选择作为一中累赘的话,如果觉得更多的东西以为着乱的话。那么请你静下来,仔细想一想,到底谁是大教堂,谁是集市,请仔细想一想开源的本意是不是独裁。</div>

<p> 呵呵,你总认为PHP官方跟社区是对立的似的。其实官方的核心库,大部分都是由PCEL导入来的,而PCEL就是社区开发人员提交的,经过完善之后导入到核心库中。这种方式比JCP好多了,因为JCP才真正是那些巨头们的乐园,一般小开发人员是进不去的。而PCEL,无论是谁都可以提交代码,无论多少,就像PHP5.2支持JSON库一样,就两个函数,是一个社区的开发人员所开发出来的。</p>
<p> </p>
<p>如果说独裁,相信JCP肯定比PCT(PHP CORE TEAM)独裁吧。至少,JCP不会听从咱们这帮无名之辈的建议,就算写了一些好代码也不行,除非你能找到那些巨头们引荐(有点儿拉帮结伙的意思)。</p>
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">3.这种问题我不知道该怎么说,你的观点是认为把PHP丢到一个apache上就可以了。无所谓它是什么运行模式,甚至是pfork模式都可以,都能获得很高的性能。那么这不是PHP,是拯救一切的银弹了。你还在局现在作java必须用tomcat,而且只能用tomcat;作PHP必须用apache,而且只管代码就好了。至于你 说的web server部分的优化是指什么?仅仅是你的代码么?web server的参数吗?难道系统的整体性能是由于web server决定的马?这个问题扯远了,我无非是想说明一点PHP的性能快但是不意味着系统快。</div>

<p> 我可没说java必须用tomcat的话,不要妄自菲薄哦,呵呵。我只是用tomcat和apache举例子,因为这两者是大多数开发者所用到的资源,举别的也没问题,如果你想听的话。</p>
<p> </p>
<p>系统快我不知道是什么意思,貌似关于通过参数优化进行性能调优什么的,这是你最先提出来的,也确实与PHP语言本身没太大关系,就像我跟贴说的“那是赚钱以后的事儿”,呵呵。</p>
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">4.社区不是那家。。社区是一个环境。老大你睁开眼睛看看把。别的不用看了,但看javaeye的这个PHP板块把。从上之下你数框架。。。。。。。。。。难道这种还不足以说明问题吗?</div>

<p> 不管是社区还是“环境”(虽然我不知道这到底是什么,你能解释一下么?),应该都是以人为本吧,但是我经常去逛的国外的几个大型社区中,没几个人谈关于PHP企业应用的话题。而且国外谈框架的也很少,大多数是谈一些具体类库的问题。不像咱们国内,一堆堆的网站框架... 哪天,ZEND真把他的ZF给移植到核心库里了,那现有的这些框架都可以歇菜了,因为论性能论架构都不是一个档次的。</p>
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">ok,你这里说的8000万PV的事情说tomcat顶不住那么我要说几句了。只能说明你们是菜鸟,对,菜鸟。很笨,我没有见过java版那个互联网项目丢上去不做动静分离的,甚至可以说是web项目几乎都是作分离的。我这里有一个例子,舍得网,大家可以google,他的创建者说最高的一次是一亿的访问量。是用很“烂”的java作的,而且还是那个很“烂”的tomcat。 <br>
</div>

<p> 这里可以讨论,但不许侮辱别人哦,我有些看不过去了,呵呵。兄弟说的这个“烂”字我不知道是指什么,如果是性能问题,那它并不烂,如果你把它研究透了,通过一些设置,能达到一个很不错的性能,而且,它本身还可以做集群,处理大型应用完全不成问题,但有个前提就是,要是访问量太大的话,确实需要很多tomcat服务器来支持,也就是说要投入很多的硬件设备,而且几乎所有的java app server都有这个毛病,因此大多数软件方案都是包含有硬件集成的,毕竟对于大厂商来说,卖硬件是最赚钱的。</p>
<p>
</p>
<div class="quote_title">fireflyc 写道</div>
<div class="quote_div">至于说到连接池我都提PHP社区丢脸,有一次windows发布版本的PHP居然把一些oracle的dll给拉掉了。再看看那些bug list,oracle中历史悠久的bug。PHP不是不能作连接池,而是连线程的概念都没有。想作?那你得在web server上动脑筋了,然后重新编译mod_php。php连接Mysql是快,但是oracle呢?不管了,这再次印证我的话“PHP社区缺乏热情,没有活力,死气沉沉”</div>

<p> 开源的软件,犯错误是正常的,想当初MySQL 5发布出来的时候也是bugs一堆,我们都不敢升级,后来到了5.1了才开始用。PHP+MYSQL都是开源的组合,都是草根格外亲,而遇到商业的oracle,当然就不会那么友好了,这是很正常的。</p>
<p> </p>
<p>要知道,OCI库是Oracle开发人员提供的,他们不开发,难道让一帮外行人来做这事情?至于你说的连接池,貌似跟线程没关系吧,举个例子,如果OCI想加连接池,直接在PHP模块中(C写的)分配一块内存来开发就行了,然后写几个API供OCI模块调用就可以呀,<strong>解决的方法有的是,关键是人家愿不愿意拿出来给你用</strong>。对所有商业厂商来讲,支持开源项目关键是能不能为自己盈利,大家都去用PHP连Oracle数据库了,那Oracle自己的App Server往哪里卖呀?这也是为什么IBM的Websphere和IIS都开始全面支持PHP了,因为有市场有利润,而不是吃饱了撑的去支持开源社区。</p>
43 楼 icewubin 2009-11-27  
引用
对与大型网站,可扩展性就是一个大问题。大流量的网站不可能是一个机器能扛下来的。至于你说的,1000次请求写一次memcached,php也有apc可以实现。不过我并不认为这是一个好主意。比起由此产生的复杂性和出bug的可能这划不来。


我来举例子,为什么说在java中,这真是小儿科。

假设每分钟发送一次技术统计数据,如下代码中,只要在“发送技术汇总”那一行,写一下远程接口或者是数据库都可以。这个计数器完全线程安全,没有并发问题,而且特别高效,不依赖于上下文,increment()方法可以直接调用,可以很方便的水平扩展。

这种简单模式(也算是多线程编程了)写起来没有任何难度,都是JDK封装好的类或方法。

public class Count {
    
    private static AtomicInteger count = new AtomicInteger();
    
    static {
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(new Runnable() {
            public void run() {
                System.out.println("send count:" + count);//发送计数汇总(伪码)
                count.set(0);//计数器清零
            }
        }, 60, 60, TimeUnit.SECONDS);
    }
    
    /**计数器加1,线程安全*/
    public static void increment() {
        count.incrementAndGet();
    }
    
}
42 楼 icewubin 2009-11-27  
说到Oracle,突然想到一个问题了,如果一个网站要做和支付相关的东西(不是自己做支付网关,例如酷6的商城,例如做调研赚钱的网站),一旦和钱有关了,这些数据一般就不可能再放在MySql中了,一定是用Oracle了,后面我就不说下去了。
41 楼 fireflyc 2009-11-27  
syre 写道
icewubin 写道
我觉得楼主没有清楚认识到为什么有些人说PHP的发展方向不对的问题。

PHP的优势本来就是草根+简单,可是目前PHP的发展貌似不是这样的,N多的人更喜欢用PHP4版本的,而不愿意以用PHP5版本。

有几位网友说的很多了,不再重复一些反驳的言论,举几个例子。

我们公司网站,不说所有吧,就说个播放页,每天8000万的PV,31台Tomcat。我举这个例子并不是想说Tomcat性能有多强,因为整个网站的架构好坏和核心的编程语言并没有直接关系,例如优酷就是PHP的,但是PV数也很高。

但是我们公司历史上正好有一段PHP转向Java的历程,原因有很多,我说一下个人感觉的和技术直接有关的一些细节吧。

个人以为php就是个模板语言而已,和高性能根本搭不边,也不需要高性能,从业务逻辑上来讲,典型的PHPer更多的是把业务逻辑堆砌在了数据库中了,而不是php代码中,有部分原因是php语言本身不适合做太复杂的业务逻辑算法。

php(主要是PHP4)本身的优点也是它的缺点,每次请求全部加载相关的资源,请求结束然后全部释放,这个特性对草根来说非常好,不用担心某些资源不被释放,不用担心内存泄漏的问题。但是这个优点恰恰是双刃剑,很明显,如果每次请求,在php代码中有很复杂的资源加载过程,每次请求都加载无疑是浪费系统资源。

举个例子,连接池,PHP无法自己实现,还不是靠第三方的C实现?为什么,因为PHP自己无法像某些语言那样,有一个全局的内存环境。

有人会说,这个不重要,大部分应用都是程序等数据库,瓶颈在数据库。恩,一句话扔给数据库,表面上看和php没关系了,那就再举个例子。

例如我从数据库中取1000个记录,然后按照较复杂的逻辑在内存中排序(假定排序算法复杂,不适合在数据库中操作),那么排序结果或者某些中间计算结果,对于java来说最简单的就是随便搞个static变量就可以了(java中如果要单击统计一台机器上的某些数字,只要搞个static AtomicInteger就能轻松搞定,而且性能极高),稍微复杂点的,用本地cache(其是还是java类),再复杂点考虑集群的话,用memcached,啊,有人又会跳出来说,php也可以用memcached,是啊,没错,是可以用,但是不需要任何数据动不动就放数据库或者memcached吧,毕竟有相当数量的数据是实时性要求不高,但是又没必要每次请求都要计算的,memcached毕竟是一次网络连接,速度没办法和本地计算相比的。

前面说到php的优点,自动释放资源,听起来有点像JVM中的垃圾回收,这个类比还算贴切吧,但是问题来了,java强其实就是强在JVM上,以前叫垃圾回收,其实就是内存管理(经过十几年的发展,JVM的内存管理已经非常先进了),相比之下php的只按照请求来自动释放资源的内存管理手法太单一了,如何算高性能呢,某些测评很片面的,没什么可看的,哪有什么网站,后台逻辑简单到只要展现页面就行了?这里再说一下数据库的问题,不能总拿数据库作挡箭牌,就算数据库是挡箭牌,功劳也不是php的,如果真要拿数据库说事,要说开发部署难易程度,还是asp.net最简单、最快,而不是php。

继续说,由于php的资深限制,我们的网站以前有不少是PHP+crontab来完成很多后台定时任务,现在的运维经常抱怨这些“垃圾”都清理不干净,说说是PHP,结果还是依赖OS的定时任务,如果是java来写,很多后台任务写起来超简单的,而且整个过程相对来说调试起来容易多了。

再举例子,写个程序,最多2000个网络并发,验证4000万个图片的有效性,用PHP写写看这种并发程序?不过这个例子不太好,因为不是web应用了。

PHP倒掉是不太可能的,但是也用不着用贬低其他解决方案的方式来提高PHP的地位吧。



每天8000万的PV,31台Tomcat,用php都用不了10台就能顶住。我估计java程序优化一下其实也用不着那许多。虽然从语言上说,php比java慢,但是java的应用服务器本身的复杂性拖累了java应用的性能。所以很多时候并比不上php。

php语言本身确实不适合做太复杂的业务逻辑算法。不过绝大多数情况下也没啥负载的业务逻辑算法可做。就是有,对java而言也未必会自己去实现。如果用的第三方应用,也就无所谓是啥语言实现的。比如用全文检索,用solr或者sphinx都是选择。另外,在一些涉及到低层的东西,java不是也得用jni么

说到连接池,php+mysql其实不怎么需要连接池。因为连接mysql的速度本来就很快,必要时也可以再用上持久连接。不比oracle,没了连接池就没法活。

说到效率,1000条记录在php和java里排序的差异是可以忽略的。除非有超过百万的数据才有得比较。而真有那么大数据
的时候,从数据库传回应用服务器的开销就足以抵消这点性能差异了。

你是搞java的,而且对php不了解。php也是有垃圾回收的,虽然是比较简单的引用计数方式。每个请求结束自动释放资源是只是防止程序员失误的一个功能而已。同样也可以让某些资源不在请求结束后释放,比如持久链接。对java而言,也很少会把数据放到请求的上下文环境之外,何况这种做法会对可扩展性带来不小麻烦。

至于后台任务,虽然不是php的强项,但是也不会有多大障碍。不能因为你们的php写的不好就说是php做不了这事。而对于一些php做不好的后台任务,我也会用python来写,而不是java。因为更方便比如你说到的图片检测。

楼主举的例子是不太合适。不过对于很多网站来说,尤其是web2.0应用,php确实是个很不错的选择。但对于ERP, CRM之类的,还得用java。



ok,你这里说的8000万PV的事情说tomcat顶不住那么我要说几句了。只能说明你们是菜鸟,对,菜鸟。很笨,我没有见过java版那个互联网项目丢上去不做动静分离的,甚至可以说是web项目几乎都是作分离的。我这里有一个例子,舍得网,大家可以google,他的创建者说最高的一次是一亿的访问量。是用很“烂”的java作的,而且还是那个很“烂”的tomcat。
至于说到连接池我都提PHP社区丢脸,有一次windows发布版本的PHP居然把一些oracle的dll给拉掉了。再看看那些bug list,oracle中历史悠久的bug。PHP不是不能作连接池,而是连线程的概念都没有。想作?那你得在web server上动脑筋了,然后重新编译mod_php。php连接Mysql是快,但是oracle呢?不管了,这再次印证我的话“PHP社区缺乏热情,没有活力,死气沉沉
40 楼 icewubin 2009-11-26  
ssuhvs 写道
php 跟 java 争企业级开发老大 如同 java跟php争网站开发老大开发一样愚蠢。

不愚蠢啊,国外第一大互联网公司和国内第一大互联网公司(有可能是第一大)也都是java应用的巨头。
39 楼 icewubin 2009-11-26  
我不认为PHP会倒掉,但是不到掉的原因绝对不是PHP性能有多好。
38 楼 ssuhvs 2009-11-26  
php 跟 java 争企业级开发老大 如同 java跟php争网站开发老大开发一样愚蠢。

相关推荐

    秒盾代码 PHP5秒盾代码_5秒安全检查源码.zip

    隔一二天不能访问,网站的排名收录会掉的很厉害而且影响以后 正因为这样,出现了很多网络黑客专门以攻击他人网站谋生 今天就给大家分享一个能有效防止一下小 CC. 用过百度云加速服务的网站都知道,在第一次打开后...

    开源php搜索引擎-蜘蛛程序

    4. **索引建立**:将提取的关键词和对应的URL存储到MySQL数据库中,形成倒排索引,便于快速查找。 5. **查询处理**:当用户输入搜索词时,搜索引擎会根据这些词在索引中的位置返回相关网页。 在实际应用中,为了...

    php-poo:练习一些遵循SOLID原则PHP POO

    7. **SOLID原则的实际应用**:项目中可能会有各种示例,如使用接口来实现开闭原则,通过策略模式应用SRP,利用抽象类或接口实现LSP,以及如何在设计中避免违反ISP和DIP。 8. **面向对象设计模式**:SOLID原则通常与...

    php之75道经典逻辑思考题

    3. 将5升水壶中的水倒掉,然后将6升水壶中剩下的1升水倒入5升水壶中; 4. 再次将6升水壶装满水; 5. 用6升水壶中的水继续向5升水壶中倒水,直至5升水壶满,此时6升水壶中会剩下恰好3升水。 通过这种方式,我们可以...

    PHP读取文件内容后清空文件示例代码

    如果文件不存在,`fopen`会返回false。 接着,为了保证文件内容读取和清空操作的原子性,我们需要对文件加锁。在PHP中,可以使用`flock`函数来加锁,该函数同样需要文件句柄作为参数,并指明要加的锁类型。在示例...

    php 猴子摘桃的算法

    问题描述了一只猴子在连续十天内吃桃子的过程,每天吃掉剩下桃子的一半再加一个,到第十天时仅剩一个桃子。我们需要通过编程计算出猴子最初摘了多少个桃子。 解决这个问题的思路是从第十天开始往回推算,每次根据...

    Sphider-plus 2.2

    同时,它可能会过滤掉广告、重复内容和非正文部分。 4. **关键词提取与索引**:Sphider-plus 会分析网页内容,识别关键词,并建立倒排索引,这是一种快速查找文档中包含特定词的高效方法。索引过程可能包括词干提取...

    ecshop中如何添加限时抢购功能可以看到一个倒计时

    要实现ecshop中的限时抢购功能并展示倒计时,我们需要对ecshop系统的模板、后台管理文件以及数据库进行一些修改和添加相应的代码,以实现抢购倒计时的效果。以下是详细的实现步骤: 1. 修改商品详情模板文件,以便...

    代码解耦之道_黄朝晖_PHPCON2019.pdf

    里氏替换原则(Liskov Substitution Principle):子类型必须能够替换掉它们的父类型。 5. 开闭原则(Open/Closed Principle):软件实体应当对扩展开放,对修改关闭。 6. 最少知识原则(Least Knowledge ...

    grub4dos-V0.4.6a-2017-02-04更新

    --timeout=[x]=[y]=[color] 倒计时位置、颜色。单位:列,行,24位色彩。 2015-05-14(yaya) 改进 NTFS 文件系统: 对于驻留属性文件(小文件),可以写,也可用 blocklist 显示信息。 对于非驻留属性列表,...

    TU-training

    【标题】"TU-training" 指的可能是一个关于软件开发的培训项目,重点是讲解SOLID原则和Test-Driven ...通过参与这个项目,学员不仅会学习到理论知识,还能获得实际操作的经验,从而提高其作为专业PHP开发者的技能。

    JavaScript应用177例

    5.3.htm 倒计时效果 5.4.htm 模拟时钟 5.5.htm 显示农历日期 5.6.htm 温度计样式时钟 5.7.htm 位置固定的时钟 第6章(\cha06) 6.1.htm HTML事件绑定 6.2....

    就要来娱乐论坛动网7.1 SP1 1114修改版

    我不想就这么放弃掉了,不然心血白白浪费,发布完了,过几天就改PHP了,这个可以算是终结版吧,但如果大家有问题,只要我能帮忙的我一定尽力,希望大家能支持!管理员帐号:ID: admin PASSWORD:admin888音乐后台帐号...

    23种 设计模式---面向对象的基本原则

    3. 里氏替换原则(Liskov Substitution Principle, LSP):子类型必须能够替换掉它们的基类型。这保证了继承不会破坏原有的程序行为。 4. 接口隔离原则(Interface Segregation Principle, ISP):不应该强迫客户端...

    gdkp

    在GDKP中,团队成员通过击杀游戏内的高级首领获得金币,这些金币随后被用于竞拍首领掉落的稀有物品。这种方式旨在优化团队资源分配,提高玩家参与度和游戏体验。 在HTML方面,虽然GDKP本身与HTML(超文本标记语言)...

    Excel百宝箱8.0

    【禁止重复值】:可以指定某列不允许重复,指定后该列输入重复值时会自动提示 【标示重复值】:将重复出现的数据用不同颜色分别标示出来,不同重复值用不同颜色 【删除空白单元格所在行】:输入1则删除空白行(整行...

Global site tag (gtag.js) - Google Analytics