`
yipsilon
  • 浏览: 244783 次
  • 性别: 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了,它的学习门槛不低啊,而且运行环境配置起来也比较复杂,大部分常用类库也都是外置的)

分享到:
评论
117 楼 icewubin 2009-11-30  
yipsilon 写道

我觉得之前说的没错,只要是J2EE项目都是很占资源的,不管是只用tomcat这样的独立引擎,还是Application Server。不是么?

跟J2SE或J2EE有没有关系也没必要讨论,因为本贴比较的是Web应用上语言间的差异,目前java的绝大部分web应用都是建立在j2ee上的吧,那就可以了。

这怎么会没必要讨论?

我说一下必要性吧,java有偏向于企业级的技术,也有偏向于互联网的技术,数量上是前者偏多一点,但是你老举那些确实很占资源的server做什么呢?例如websphere?

因为做互联网的server都是很轻量级的(这个轻量就是相对于websphere这种重量级来说的),除了你听到过的Tomcat、收费的resin,还有jetty、glassfish等。

“目前java的绝大部分web应用都是建立在j2ee上的吧”,这算什么话,轻量级的开发模式下,j2ee这一层就是非常薄的,绝大部分逻辑和J2EE API一点关系都没有的。

我举个例子:我们在做单元测试的时候,不需要启动任何webserver的,直接用junit就可以测试完整的service层的业务逻辑,web层的代码是非常少的。


116 楼 icewubin 2009-11-30  
yipsilon 写道

你要知道,IBM做的不仅仅是产品,它有很多公司,其中就有个公司(之前提过了)叫ISSC,大部分业务是做外包项目的,这些公司整合起来就是不同行业的解决方案提供商。客户不同且需求很多,有的用Python做、有的用RoR做,拿你举例子来说的专业翻译软件,他的方案是包括语言教育市场,投资翻译软件可以把其整合到自己的解决方案中或为客户提供技术支持等,还是要赚钱的啊。


“你只不过举了个websphere整合apache”(纠正apache是旗下IBM所支持的子项目,既不是程序也不是网站),假设说IBM支持两个开源项目,我举出其中一个例子说明了,你非要告诉我,他还支持其他项目,就不能举一反三么?这也太钻牛角尖了吧。


1.因为我不高兴把我IBM的N个同学的例子一个一个举出来,那就再举个例子吧。这N个同学中,有一个人很特殊(什么部门或子公司我背不出,下次遇到他问他一下),有一次遇到他,问他忙什么,他说机密,过了一年打牌又问了下他,机密项目结束了么?他说结束了。我问可以告诉我什么项目,还要保密,现在可以公开了么?他说是一个apache上的一个开源项目。。。

前因后果我记不全了,大致是说,名义上这个apache上的开源项目和IBM没有什么关系,但是IBM做服务的时候,能够提供该技术的配套的、集成的技术方案和咨询服务。

2.教育软件是赚钱啊,你又偏题了吧,我的意思是指IBM支持的软件又不仅仅是J2EE的。

3.是你先钻牛角尖吧,举了个websphere整合apache,然后和我解释什么“IBM的投资目的、IBM是卖方案的”,为了证明你说的“IBM要利用java买更多的硬件”。再次拜托你回复的时候请分别引用,不要合在一起回复。
115 楼 yipsilon 2009-11-30  
<div class="quote_title"><span style="font-weight: normal;"><strong><span style="font-family: Simsun; font-size: medium; font-weight: normal;">
<div>
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;"><span style="font-weight: normal;"><strong><span style="font-family: Simsun; font-size: medium; font-weight: normal;">
<div>
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;"><span style="font-size: x-small;"><span style="font-size: x-small;">icewubin 写道</span></span></div>
<div class="quote_div">
<span style="font-size: x-small;"><span style="font-size: x-small;">老兄啊,你说的我会不知道么?<br>你说的“Java性能接近于C”是一方面我说的另一方面,两者毫无关系的行不?<br><br>都说了多少次,对其他语系不了解,就不要随便臆想。<br><br>1.对于某些评测来说,的确是性能接近于C,这是一点。对于这些测评的理由是两方面的,一个是你认为的“占用了大量的资源”,说的简单点是空间(内存)换时间,说的复杂点,请看2.<br><br>2.先说内存,空间换时间仅仅是性能优化的方法之一而已,无论是JVM还是C或C++,都是要做内存管理的,无非是管理的效果而已(当然谁来管理也很重要,C需要自己管理,所以很容易出错,开发效率也低下,而JVM通过server版的JVM配置,可以根据不同的应用场景调优参数),因为内存是有限的,不能把所有占用过内存的数据都缓存下来,稍微进一步能想得到的就是,某个类的实例被调用了超过两次(简单点,先认为是2次好了),可以认为这个类是经常会被调用的,而90%都是只实例化一次,是可以在下一次垃圾回收过程中回收的,经常调用的部分可以成为老年代,老年代回收优先级低,更多的时间留在内存中,被调用一次的成为年轻代,年轻代重要性低,一旦开始垃圾回收,马上释放内存。<br><br>这是JDK 1.3的JVM开始出现的分代垃圾回收机制,本质上就是一种内存优化策略。JVM对内存的管理和优化是非常复杂的,我这里只是举了个分代垃圾的例子,有兴趣可以适当了解一下HotSpot JVM 垃圾收集原理。并不是你想像的那样,靠狂吃内存资源来提高性能那么简单。<br><br>3.继续,资源不仅仅是性能,接下来说线程,为什么说线程,因为现有的服务器基本上都是双核或者四核了,如何充分利用CPU的多核计算能力是很重要的。如果你有条件,可以看一下很多程序运行时,CPU的占用率是不是能够比较平均的分配到不同的CPU上。无论C还是C++要写多线程充分利用多核CPU的程序相对java来说是比较复杂的,而且很容易出错,JDK本来多线程编程能力就很强,自从1.5开始加入了java.util.concurrent包后(改包的主要作者是个研究了20年并发编程的强人),更是大大增强了并发编程的能力和开发效率。从某种程度上来说,这一点才是java相对于其他所有语言最大的优势。<br><br>4.继续,系统资源除了CPU和内存还有IO,有本地磁盘IO和网络IO,JDK从1.4开始加入java.nio,提供各种非阻塞的IO操作,听说JDK 7又会大大增强IO这部分的API。不同操作系统版本的JVM实现各自的IO方式是不一样的,以Linux服务器为例,一般说的网络NIO,也就是Tomcat6使用的NIO技术,从操作系统层来说是利用了Linux的epoll命令(JDK封装好了),这和其他几个有名的httpserver如Nginx用的技术是一致的,都是网络IO非阻塞编程模型,所以性能接近。<br></span></span><span style="font-size: x-small;">
</span>
</div>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br>解释了那么多,得出个结论就是:你太较真了!请看看我说的话:</span></span></p>
<div class="quote_div">
<span style="font-size: x-small;"><span style="font-size: x-small;">因为JVM本身就占用了大量的资源,</span></span><strong><span style="font-size: x-small;"><span style="font-size: x-small;">如内存等</span></span></strong><span style="font-size: x-small;"><span style="font-size: x-small;">
</span></span><span style="font-size: x-small;">
</span>
</div>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">就像你说的,本身与做JVM比较就会涉及很多周边资源,并不是只有内存,做事情不要太死扣,要学会举一反三啊,呵呵。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<div class="quote_title"><span style="font-size: x-small;"><span style="font-size: x-small;">icewubin 写道</span></span></div>
<div class="quote_div"><span style="font-size: x-small;"><span style="font-size: x-small;">所以您不要啥背景都不了解,就冒出一句“每触发一次IO事件所消耗的资源都比C大的多,因为C是可以直接调用内核库”,JVM难道调的不是内核库?太不专业了吧。</span></span></div>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">JVM还是要先解释字节码后才会根据内容调用一些系统级别的类库吧?这多了一层“解释”知道么?怎么可能跟C编译出来机器码的执行效率比较?!</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">SUN的那个评测比较的是JVM解释字节码与操作系统解释机器码这一层单方面的性能,但JVM在解释出字节码之后还是要调用一下操作系统封装的API,而C编译出来的机器码是不需要做这一步的。实际的执行性能,java类是不如C编译的本地程序,这还不加启动JVM的时间。不信,你用C写个hello world,再用java写个hello world,查看一下运行时间就知道了。</span></span></p>
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;"><span style="font-size: x-small;"><span style="font-size: x-small;">icewubin 写道</span></span></div>
<div class="quote_div"><span style="font-size: x-small;"><span style="font-size: x-small;">1. 我真是佩服你臆想的能力,人家说的笑话你也当真了? <br><br>2. 当年IBM做出决定,权利支持Java和Linux的出发点绝对不是你想的那样行不?按照你的逻辑,IBM打死都是不会支持Linux的,它有自己的AIX何必去玩廉价的Linux?它又何必现在开始支持PHP? <br><br>3. 我之前已经说过了,IBM内部的员工,无论哪个子公司或者部门,自己做项目的都是相当多的使用轻量级的J2EE开发技术。 <br><br>4. IBM在N年前决定转型为服务企业,就是因为知道光靠卖硬件是没有前途的,硬件的利润逐渐不如软件,软件的利润逐渐步入服务、咨询。 <br><br>5. EJB当年诞生是有其背景和原因的,以现在轻量级J2EE的技术眼光看,的确是效率低下,但是在EJB 1.0的当时,就是世界上最先进的技术,无可替代的。</span></span></div>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">注:原文没有编号(1-5),我编号一下方便表述。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">1. 兄弟你挺搞笑,还当真了?哈哈。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">2. IBM绝对会支持LINUX的,因为中小型客户的大部分J2EE程序都是跑在LINUX上的,用AIX系统比较少的。大公司也是要看客户要求的,人家非要用PHP,你还能拒绝不接这单子?现在IT已经不是垄断行业了。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">3. 内部员工用什么,跟本贴无关吧?如果非要解释的话,他们用的开源项目一定存在公司不同程度上的支持,无利不起早嘛。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">4. 对于转型,你说的对,“因为知道</span></span><strong><span style="font-size: x-small;"><span style="font-size: x-small;">光靠</span></span></strong><span style="font-size: x-small;"><span style="font-size: x-small;">卖硬件是没有前途的”,但也不是“硬件的利润逐渐不如软件”,其实硬件利润跟软件不差上下的,你要知道,同样工作3天,找一堆流水线蓝领加上原料造出一台高端服务器的利润,跟找一帮开发人员开发一套五万行有效代码级别的软件利润,是差不多的,因为后者的分摊成本比前者大得多。如果你是解决方案提供商,你用相同时间开发出一套软件并造出一台高端服务器后,打包成方案卖给客户,那利润就是两倍。但如果你开发出来的软件对硬件要求不高的话,客户很聪明的,未必会买你的高端服务器。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">如果你做过系统集成,你会发现高端服务器(像小型机等)成本可以达到一折以下,可想而知利润有多高,试问,你做软件项目,客户的报价你能打几折呢?一个100万的软件项目,你找20个人辛辛苦苦做了半年,算得的利润还不及人家半年卖两台高端服务器的利润高。呵呵。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">5. 内容怎么又跑到EJB上了?晕...</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;"><span style="font-size: x-small;"><span style="font-size: x-small;">icewubin 写道</span></span></div>
<div class="quote_div">
<span style="font-size: x-small;"><span style="font-size: x-small;">1. 我先问你个问题,为什么现在这么多网站用memcached?这种狂吃内存的服务开在那里干啥? <br><br></span></span><strong><span style="font-size: x-small;"><span style="font-size: x-small;">2. 你举这种例子本身就是很莫名其妙的,都说了多少遍了,网站瓶颈不在页面的生成上。</span></span></strong><span style="font-size: x-small;"><span style="font-size: x-small;"> <br><br></span></span><span style="color: #ff0000;"><strong><span style="font-size: x-small;"><span style="font-size: x-small;">3. 你还真别说,我敢说64MB内存的机器跑精简版的glassfish也是绝对流畅的,你信么? </span></span></strong></span><span style="font-size: x-small;"><span style="font-size: x-small;"><br><br>4. 我还是那句话,并发测试不加上数据库和其他一些操作就是没有意义的,因为PHP的网站流量一大,数据库就是先出问题,一旦数据库先遇到瓶颈,开始牵涉到各种分布式优化或者,集群中每台机器的复杂算法优化,就不在是PHP的强项了。对于这点我也再提醒一次,之前不知道是你还是其他人说了句“PHP专门针对大流量的网站而设计”(原话好象是这样),这句话实在太笑话了,连一些很基本很简单的分布式优化技巧都搞不定,谈何大流量的网站。 <br><br>5. 你要说PHP适合流量不大的中小网站,我也一定不会反驳你,草根特点嘛,开发快嘛,但是你要说大流量,那就扯蛋了,没见过什么网站瓶颈是在页面生成这个环节的。</span></span><span style="font-size: x-small;">
</span>
</div>
<p><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">注:同上编号(1-5)</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">1. 如果你非要用memcached的话,我可以这么比较:</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">---------------------------------------------------------------</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">拿单机性能比较本身就不合时宜,如果非要拿单机性能做比较的话,那就拿64M内存(极端的话就用32M的)的服务器加一台MEMCACHED服务器比比试试,我敢说LINUX下跑PHP绝对流畅,但是你运行tomcat试试吧,不管用什么JRE都白扯。 <br><br>如果拿我说的“性能”来看(突然觉得应该叫相对性能),那就在同样服务器加一台同样的MEMCACHED服务器,用同样的JSP和PHP网站应用,做大量并发测试就知道结果了。这个例子也在跟贴中举了不下两遍了吧。 </span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">----------------------------------------------------------------</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">效果不是一样的么?你网络架构再复杂,用相同硬件配置做测试就够了,何必这么较真呢?</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">2. 针对黑体字,我已无话可说了,因为之前已经强调多次啦,你居然还没看见....</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">3. 针对红色字,这个我还真不信,就像Windows XP最低运行配置是64M内存一样,倒是能运行起来,但是不卡么?再者说,我在GlassFish网站上看到的运行环境要:</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<table border="2" cellspacing="0" cellpadding="10" width="100%"><tbody><tr>
<td style="color: #333333;" align="right" valign="top">
<p style="color: #333333;"><strong><span style="font-size: x-small;"><span style="font-size: x-small;">System Memory (RAM)</span></span></strong></p>
</td>
<td style="color: #333333;" align="left" valign="top">
<span style="font-size: x-small;"><span style="font-size: x-small;"><a style="text-decoration: none;"></a>
</span></span><span style="font-size: x-small;">
</span>
<ul style="margin-left: 13px; padding-left: 0px;">
<li style="margin-left: 13px; padding-left: 0px;">
<p style="color: #333333;"><span style="font-size: x-small;"><span style="font-size: x-small;">Solaris, Linux: 1 GB minimum, at least 2 GB recommended</span></span></p>
</li>
<li style="margin-left: 13px; padding-left: 0px;">
<p style="color: #333333;"><span style="font-size: x-small;"><span style="font-size: x-small;">Windows: 2 GB minimum, at least 3 GB recommended</span></span></p>
</li>
<li style="margin-left: 13px; padding-left: 0px;">
<p style="color: #333333;"><span style="font-size: x-small;"><span style="font-size: x-small;">MacOS X: 1 GB minimum, at least 2 GB recommended</span></span></p>
</li>
</ul>
</td>
</tr></tbody></table>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">标准版最低都要1G了,简化版的难道64M就能跑?难道是你自己优化的?那估计什么可能都有,呵呵。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">4. 貌似不管是J2EE还是PHP还是其他语言,网站流量一大,都是数据库先出问题的吧?这根两个语言的比较有什么关系呢?你JAVA再优化,也是用JDBC连啊,顶多加个连接池,类似的实现PHP有长连接啊。要是深入优化就有的说了,但也超出了本文范围。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">5. “你要说PHP适合流量不大的中小网站,我也一定不会反驳你”,这句话太搞了,翻翻我之前的回帖吧,你还是一定不会反驳我,但是确实又反驳了,哎哎。</span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;"><br></span></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><span style="font-size: x-small;">“但是你要说大流量,那就扯蛋了,没见过什么网站瓶颈是在页面生成这个环节的。”,什么大流量,什么页面生成,都是你自己提出来的,自言自语?又犯老毛病了,晕...</span></span></p>
<p style="margin: 0px;">
</p>
<div class="quote_title"><span style="font-size: x-small;">icewubin 写道</span></div>
<div class="quote_div"><span style="font-size: x-small;">1.唉,无语啊,你看帖太快了吧,我说“google这么多应用,有几个是和钱有关的?”,意思是指和钱无关,是反问,你怎么理解成和钱相关了? <br><br>2. 这个没跑题,此话题由Oralce驱动引起的,牵涉到数据安全性问题,不少网站总有些关键数据,不适合用mysql存储的,例如订单数据,数据一旦丢了就没了。 <br><br>3. 我们之前讨论到IBM的业务模式(你认为的利用java卖硬件)问题,你扯到google身上去做什么?世界上支持开源项目,但是不使用那些开源项目做自己网站的公司多了,大部分支持开源项目的公司哪有什么流量很大的自己的大型网站啊,你这偏题偏得真厉害。 <br><br>4. 因为你回复总是挤在一起,我回复不方便,还特地分开一个一个话题地说,期望能够针对一个小话题,不断引用,好知道是从何开始讨论的,你别老是都挤在一起回复啊。</span></div>

<p style="margin: 0px;"><span style="font-size: x-small;">注:继续标注(1-4) </span></p>
<p style="margin: 0px;"> </p>
<p style="margin: 0px;"><span style="font-size: x-small;">1. 我说的是跟钱相关的话题么?你仔细看看:</span></p>
<p style="margin: 0px;">
</p>
<div class="quote_div">
<span style="font-size: x-small;">话说回google来了,你知道google虽然支持很多开源项目,但是貌似没怎么听说过他自己的网站应用都用哪些所支持的开源项目,但google应用都并不是开源的,</span><strong><span style="font-size: x-small;">你说google应用跟钱相关明显跑题了</span></strong><span style="font-size: x-small;">。 </span>
</div>

<p style="margin: 0px;"><span style="font-size: x-small;"> 貌似是你看贴太快了吧?这又是给我的一个莫须有罪名哦。呵呵</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">2.这个也跑题了。</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">3. 看看帖子吧,是谁先说google的,一定要看清楚哦... 论偏题这个问题,还是看看帖子吧。</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">4. 我kao,回复你也看不惯啊?有引用,有论点,多好看啊...</span></p>
<p style="margin: 0px;">
</p>
<div class="quote_title"><span style="font-size: x-small;">icewubin 写道</span></div>
<div class="quote_div"><span style="font-size: x-small;">你这句话又是没头没脑,不知道你想说明啥?</span></div>

<p style="margin: 0px;"><span style="font-size: x-small;"> IBM一直都在支持着apache struts项目,而IBM也经常拿struts做项目赚钱,解释够清楚了吧?这绝对是良性循环哦。</span></p>
<p style="margin: 0px;">
</p>
<div class="quote_title"><span style="font-size: x-small;">icewubin 写道</span></div>
<div class="quote_div"><span style="font-size: x-small;">1. 因为很多测试负载能力的,只测了个页面生成,而你总那这个说事,所以我才这么说的。 <br>做网站当然不仅仅是页面生成,要测试就要根据实际情况,至少要带上非本地的数据库做压力测试,否则这些测试都没什么太大的实际意义。 <br><br>2. 啊,“不用高价的开发人员”,正好抓到一个,目前例如同样是2年工作经验(2年不能是兼的),PHP程序员的平均工资肯定比java程序员高吧,呵呵。<br><br>3. 你如果加上一个小流量的网站,我也是不会反驳你的。 <br><br>4. 如果是在大流量情况下,PHP就是不适合的,当然我说的大流量也是有前提的,不考虑极端例子,一般的大流量的网站就是意味着要解决数据库瓶颈和其他的各种瓶颈和应用整合问题。 </span></div>

<p style="margin: 0px;"><span style="font-size: x-small;">注:一如既往地编号(1-4)</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">1. 哎,又说我“总拿这个说事”了,呵呵。你翻翻帖子,看看我有哪句话说PHP</span><strong><span style="font-size: x-small;">只</span></strong><span style="font-size: x-small;">生成页面的事情了?极端得讲就算PHP是页面生成,难道J2EE中的页面生成是非Java技术么?更何况我测试的就是访问压力,你认为生成什么做压力测试好呢?</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">2. 说实话,其实国外PHP开发人员工资跟Java不差上下,可到了国内... 一个相同大学毕业且有同样技术经验(注意,不是按时长划分的工作经验)的人,做Java薪水高。感觉国内的人瞧不起PHP这门技术啊。</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">3. 哈哈,你越来越搞笑了。服了。</span></p>
<p style="margin: 0px;"><span style="font-size: x-small;"><br></span></p>
<p style="margin: 0px;"><span style="font-size: x-small;">4. 大流量的情况下,就要看网络架构了,一般如果架构设计合理的话,任何语言所搭建的平台都能胜任高负载的应用,不仅仅是PHP,但都有一个共同点,就是:<strong>那是有钱之后的事情</strong>。呵呵</span></p>
</div>
</span></strong></span></div>
</div>
</span></strong></span></div>
114 楼 icewubin 2009-11-30  
yipsilon 写道

又给我一个“莫须有的罪名”,呵呵。我说过“做网站仅仅就是页面生成了”了么?晕。


我一直都在围绕“不用高价的开发人员,不用配置很高的硬件服务器,就可以非常快速地构建网站应用。”这句话说事,不知道你说的“你要说java做web页面开发效率没有PHP高,我是绝对不会反驳你的。”包不包含在“就可以非常快速地构建网站应用”中,如果包含,你确实不应该反驳我。

因为很多测试负载能力的,只测了个页面生成,而你总那这个说事,所以我才这么说的。
做网站当然不仅仅是页面生成,要测试就要根据实际情况,至少要带上非本地的数据库做压力测试,否则这些测试都没什么太大的实际意义。

啊,“不用高价的开发人员”,正好抓到一个,目前例如同样是2年工作经验(2年不能是兼的),PHP程序员的平均工资肯定比java程序员高吧,呵呵。

你如果加上一个小流量的网站,我也是不会反驳你的。

如果是在大流量情况下,PHP就是不适合的,当然我说的大流量也是有前提的,不考虑极端例子,一般的大流量的网站就是意味着要解决数据库瓶颈和其他的各种瓶颈和应用整合问题。
113 楼 icewubin 2009-11-30  
yipsilon 写道

而IBM类的企业,几乎每支持一个项目,就依赖这个项目做了很多项目,就像struts,不知道你有没有朋友在ISSC,基本上他们的很多客户JSP网站,都是用struts做的。

你这句话又是没头没脑,不知道你想说明啥?
112 楼 icewubin 2009-11-30  
yipsilon 写道

话说回google来了,你知道google虽然支持很多开源项目,但是貌似没怎么听说过他自己的网站应用都用哪些所支持的开源项目,但google应用都并不是开源的,你说google应用跟钱相关明显跑题了。


唉,无语啊,你看帖太快了吧,我说“google这么多应用,有几个是和钱有关的?”,意思是指和钱无关,是反问,你怎么理解成和钱相关了?

这个没跑题,此话题由Oralce驱动引起的,牵涉到数据安全性问题,不少网站总有些关键数据,不适合用mysql存储的,例如订单数据,数据一旦丢了就没了。

我们之前讨论到IBM的业务模式(你认为的利用java卖硬件)问题,你扯到google身上去做什么?世界上支持开源项目,但是不使用那些开源项目做自己网站的公司多了,大部分支持开源项目的公司哪有什么流量很大的自己的大型网站啊,你这偏题偏得真厉害。

因为你回复总是挤在一起,我回复不方便,还特地分开一个一个话题地说,期望能够针对一个小话题,不断引用,好知道是从何开始讨论的,你别老是都挤在一起回复啊
111 楼 icewubin 2009-11-30  
yipsilon 写道

确实,我也认为某些PHPer想法很幼稚,但是本帖我只想说出自己的论点而已。

貌似,一些大的网站都没有分很多域名吧。就用你举的google例子,google搜索引擎就是www.google.com域名的,没听说过有什么浏览器限制,而在中国用cn域名那是政府限制的,没办法。


第三条,你说得对,我也赞成,但貌似我压根就没说什么页面生成相关的问题,如果只是用PHP生成页面那只能说是一个误区,像我们开发的网站,生成页面部分只有一半吧,另一半是生成数据,通过AJAX读取,读取数据库的瓶颈可以靠高速缓存解决,因为高速缓存就是静态资源,它的执行效率可以进行硬性提高。

你还真会睁眼说瞎话,以yahoo首页为例,我跑到了这个地址:
http://m.www.yahoo.com/
左上角的yahoo的图标的地址就是:
http://l.yimg.com/a/i/mntl/ww/events/p.gif

然后我在帮你查一篇文章,有空你自己看看,你居然连查都不查,就说自己没听说过有什么浏览器限制,你是专业的web开发人员么?
http://blog.s135.com/post/332/

你既然说到高速缓存的问题,我来给说说吧,缓存机制因为很多层,暂且讨论页面生成前的各种数据缓存这一级别的概念。

像memcached是一种缓存服务,当网站复杂了,memcached和数据库对于页面生成的程序来说,没什么太大的区别,都是从其他机器上远程那数据,其他可能的还有key-value存储服务器,例如memcachedDB,或者是网站内部其他的服务,例如搜索接口。

无论这些数据接口什么格式,一般为了减少过度频繁的建立连接和关闭连接(无论是数据库连接还是HTTP连接),这些连接的建立和关闭都应该尽可能的避免,由此出现了数据库连接池,memcached的某些java client也有长连接的概念(PHP有没有我不知道),但是这些长连接或连接池在java中就是很容易就能实现的,无论是socket的长连接还是http的长连接,PHP呢?自己实现不了,还得依赖于其他程序,典型的例如数据库连接池。网站大了,这么多数据接口,对于PHP来说,有些还好,有现成的,但是那些没有现成的呢?难道每次都建立连接然后再释放么?

我听说过PHP的永久链接,20个子进程复用20个不同的永久连接,但是却无法像其他语言那样轻松的使20个子进程复用5个永久连接。

然后我再说你说的“生成数据”,生成数据可大可小,对吧,之前已经说过了,如果搜索没有现成的轮子可用的,大家都自己实现的话,相当于一个复杂度较高的数据生成过程了,PHP能做吧。我又提到搜索引擎,你可能不服,那我还是说我之前说过的例子,例如统计帖子的浏览次数,需求稍微明确+简化一下:
因为访问量非常巨大,不持久化数据,准确性要求也不高,实时性要求只要达到1分钟左右即可,用户查看某个帖子时页面上显示改帖被浏览的次数。

当然这个需求如果访问量小的话,随便怎么做都可以,例如写数据库。如果访问量很大,肯定不能这么搞,之前说过在java中处理这种逻辑是非常简单的,每台web应用各自在自己的内存中维护最近一分钟的帖子ID和帖子访问量的hashMap,每隔1分钟汇总到某一台服务器A,由服务器A定期写入一个memcached,我估计其他的语言处理起来也不复杂,但是PHPer的话估计就麻烦了吧。

110 楼 icewubin 2009-11-30  
yipsilon 写道

谈到“性能”这个词:

拿单机性能比较本身就不合时宜,如果非要拿单机性能做比较的话,那就拿64M内存(极端的话就用32M的)的服务器比比试试,我敢说LINUX下跑PHP绝对流畅,但是你运行tomcat试试吧,不管用什么JRE都白扯。

如果拿我说的“性能”来看(突然觉得应该叫相对性能),那就在同样服务器用同样的JSP和PHP网站应用,做大量并发测试就知道结果了。这个例子也在跟贴中举了不下两遍了吧。

我先问你个问题,为什么现在这么多网站用memcached?这种狂吃内存的服务开在那里干啥?

你举这种例子本身就是很莫名其妙的,都说了多少遍了,网站瓶颈不在页面的生成上。

你还真别说,我敢说64MB内存的机器跑精简版的glassfish也是绝对流畅的,你信么?

我还是那句话,并发测试不加上数据库和其他一些操作就是没有意义的,因为PHP的网站流量一大,数据库就是先出问题,一旦数据库先遇到瓶颈,开始牵涉到各种分布式优化或者,集群中每台机器的复杂算法优化,就不在是PHP的强项了。对于这点我也再提醒一次,之前不知道是你还是其他人说了句“PHP专门针对大流量的网站而设计”(原话好象是这样),这句话实在太笑话了,连一些很基本很简单的分布式优化技巧都搞不定,谈何大流量的网站。

你要说PHP适合流量不大的中小网站,我也一定不会反驳你,草根特点嘛,开发快嘛,但是你要说大流量,那就扯蛋了,没见过什么网站瓶颈是在页面生成这个环节的。
109 楼 icewubin 2009-11-30  
yipsilon 写道

大的解决方案厂商为什么钟爱Java?不仅仅它对企业应用支持得好,它对系统硬件需求高也是原因之一,举个例子说用其他语言开发的项目本来可以花10,000美金搞定的硬件,可使用J2EE技术了,达到相同效果就得花20,000美金来搞定。

我真是佩服你臆想的能力,人家说的笑话你也当真了?

当年IBM做出决定,权利支持Java和Linux的出发点绝对不是你想的那样行不?按照你的逻辑,IBM打死都是不会支持Linux的,它有自己的AIX何必去玩廉价的Linux?它又何必现在开始支持PHP?

我之前已经说过了,IBM内部的员工,无论哪个子公司或者部门,自己做项目的都是相当多的使用轻量级的J2EE开发技术。

IBM在N年前决定转型为服务企业,就是因为知道光靠卖硬件是没有前途的,硬件的利润逐渐不如软件,软件的利润逐渐步入服务、咨询。

EJB当年诞生是有其背景和原因的,以现在轻量级J2EE的技术眼光看,的确是效率低下,但是在EJB 1.0的当时,就是世界上最先进的技术,无可替代的。
108 楼 icewubin 2009-11-29  
yipsilon 写道

老兄啊,你知道为什么都说Java性能接近于C么?因为JVM本身就占用了大量的资源,如内存等。很简单,它不管是用AIO还是什么其他技术,每触发一次IO事件所消耗的资源都比C大的多,因为C是可以直接调用内核库。

老兄啊,你说的我会不知道么?
你说的“Java性能接近于C”是一方面我说的另一方面,两者毫无关系的行不?

都说了多少次,对其他语系不了解,就不要随便臆想。

1.对于某些评测来说,的确是性能接近于C,这是一点。对于这些测评的理由是两方面的,一个是你认为的“占用了大量的资源”,说的简单点是空间(内存)换时间,说的复杂点,请看2.

2.先说内存,空间换时间仅仅是性能优化的方法之一而已,无论是JVM还是C或C++,都是要做内存管理的,无非是管理的效果而已(当然谁来管理也很重要,C需要自己管理,所以很容易出错,开发效率也低下,而JVM通过server版的JVM配置,可以根据不同的应用场景调优参数),因为内存是有限的,不能把所有占用过内存的数据都缓存下来,稍微进一步能想得到的就是,某个类的实例被调用了超过两次(简单点,先认为是2次好了),可以认为这个类是经常会被调用的,而90%都是只实例化一次,是可以在下一次垃圾回收过程中回收的,经常调用的部分可以成为老年代,老年代回收优先级低,更多的时间留在内存中,被调用一次的成为年轻代,年轻代重要性低,一旦开始垃圾回收,马上释放内存。

这是JDK 1.3的JVM开始出现的分代垃圾回收机制,本质上就是一种内存优化策略。JVM对内存的管理和优化是非常复杂的,我这里只是举了个分代垃圾的例子,有兴趣可以适当了解一下HotSpot JVM 垃圾收集原理。并不是你想像的那样,靠狂吃内存资源来提高性能那么简单。

3.继续,资源不仅仅是性能,接下来说线程,为什么说线程,因为现有的服务器基本上都是双核或者四核了,如何充分利用CPU的多核计算能力是很重要的。如果你有条件,可以看一下很多程序运行时,CPU的占用率是不是能够比较平均的分配到不同的CPU上。无论C还是C++要写多线程充分利用多核CPU的程序相对java来说是比较复杂的,而且很容易出错,JDK本来多线程编程能力就很强,自从1.5开始加入了java.util.concurrent包后(改包的主要作者是个研究了20年并发编程的强人),更是大大增强了并发编程的能力和开发效率。从某种程度上来说,这一点才是java相对于其他所有语言最大的优势。

4.继续,系统资源除了CPU和内存还有IO,有本地磁盘IO和网络IO,JDK从1.4开始加入java.nio,提供各种非阻塞的IO操作,听说JDK 7又会大大增强IO这部分的API。不同操作系统版本的JVM实现各自的IO方式是不一样的,以Linux服务器为例,一般说的网络NIO,也就是Tomcat6使用的NIO技术,从操作系统层来说是利用了Linux的epoll命令(JDK封装好了),这和其他几个有名的httpserver如Nginx用的技术是一致的,都是网络IO非阻塞编程模型,所以性能接近。

所以您不要啥背景都不了解,就冒出一句“每触发一次IO事件所消耗的资源都比C大的多,因为C是可以直接调用内核库”,JVM难道调的不是内核库?太不专业了吧。
107 楼 yipsilon 2009-11-29  
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">Tomcat 6开始有异步IO模式,直接测试表明,单单就页面生成、输出的并发能力性能已经接近于C语言写的很多server了。 <br><br>都什么年代了,还提EJB(顺带说一句,Tomcat不支持EJB),目前java项目,即使是企业级,绝大部分都已经不再使用EJB了,都是轻量级的J2EE开发模式了。即使用其他Application Server,也都很少用EJB了。 <br><br>java体系的事实标准也在不断进步发展中的。 </div>
<p>老兄啊,你知道为什么都说Java性能接近于C么?因为JVM本身就占用了大量的资源,如内存等。很简单,它不管是用AIO还是什么其他技术,每触发一次IO事件所消耗的资源都比C大的多,因为C是可以直接调用内核库。</p>
<p> </p>
<p>大的解决方案厂商为什么钟爱Java?不仅仅它对企业应用支持得好,它对系统硬件需求高也是原因之一,举个例子说用其他语言开发的项目本来可以花10,000美金搞定的硬件,可使用J2EE技术了,达到相同效果就得花20,000美金来搞定。</p>
<p> </p>
<p>谈到“性能”这个词:</p>
<p> </p>
<p>拿单机性能比较本身就不合时宜,如果非要拿单机性能做比较的话,那就拿64M内存(极端的话就用32M的)的服务器比比试试,我敢说LINUX下跑PHP绝对流畅,但是你运行tomcat试试吧,不管用什么JRE都白扯。</p>
<p> </p>
<p>如果拿我说的“性能”来看(突然觉得应该叫相对性能),那就在同样服务器用同样的JSP和PHP网站应用,做大量并发测试就知道结果了。这个例子也在跟贴中举了不下两遍了吧。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">你说的莫须有的罪名多了,随便举一个: <br><br>...<br><br>ASP.NET开发部署应该是要比PHP快,且更方便部署的,为什么会比PHP慢呢?</div>
<p> 果然是莫须有的罪名,我压根就没说ASP.NET部署比PHP快,一直说的是ASP,而且是能跟PHP比的(没说一定快),ASP和ASP.NET虽是同一妈生的,但是差别可大了。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">话不能这么说吧,我也可以说国外PHP 2.0就开始流行了,国内直到PHP 3.0才开始流行的吧。 <br><br>java 1.1的流行主要是applet,和现在的J2SE、J2EE没有什么关系,JDK 1.2和JDK 1.1差异是非常巨大的,例如经典的Java Collection Framework就是从JDK 1.2开始的,还有其他N多的API和特性都是从JDK 1.2才开始的,就是由于差异巨大,所以JDK 1.2才叫java2。 <br><br>还有就是我介绍的是J2SE的历史,不是J2EE的历史,自servlet诞生,然后是JSP 1.0、JSP 1.1,才能算J2EE开始流行,国内开始逐步流行大概是要到2000年了。</div>
<p>麻烦你看看PHP官方网站的History那一页吧,话不是随便说说的。</p>
<p> </p>
<p>我98年第一次接触Java的时候,国内还没有几本书呢,好不容易找到了两本清华出的,99年Java的书就多了。再说我也没说是J2EE的历史,因为九几年的时候国内还没J2EE的概念呢,呵呵。</p>
<p> </p>
<p>还有就是,关于历史的问题,当初就是为了反驳你提出来的那个观点而已,这些都是记录在案的,不明白就搜索一下,没必要再提到本帖继续说啦,也跑题了很远。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div"><span>在和你讨论这个问题之前,我先说一个PHP支持的一些比较搞笑的言论,PHPer先会说PHP支持并发有多强,然后有人说PHP某些方面复杂算法性能不强,PHPer又会说,算法不重要,瓶颈在数据库那边。 <br><br>好,然后继续: <br>1.我举这么多服务器,不仅仅是说了静态资源服务器,不知你看清楚了没有,绝大部分都不是静态资源服务器。 <br>2.既然说静态资源,脑我就再指出你的谬误之处,静态资源分不同的服务器(准确的说是不同的域名),最主要的目的是各种浏览器在默认情况下都是有并发数限制的,分不同的域名最主要的目的是绕开浏览器的并发限制,尽量减少由于并发限制造成的堵塞,而不是带宽问题。 <br><br><span style="color: red;">浏览器对同一个域名可以并发请求,下面是每个浏览器默认的并发数限制</span> <br><a style="color: #006699; text-decoration: underline;" href="http://www.cnblogs.com/cnblogsfans/archive/2009/09/29/1576197.html" target="_blank">http://www.cnblogs.com/cnblogsfans/archive/2009/09/29/1576197.html</a> <br><br>3.然后我帮你展开一个应用的瓶颈,我们不谈测试软件,只说实际情况,页面的生成,不考虑squid的页面cache(包括其他静态化缓存技术)的话,一个应用的最主要的瓶颈就是数据库操作或者是其他远程操作(例如memcached的访问),而不是页面的生成。(当然这是大部分的web应用,你如果一定要举个不带任何数据库或者日志操作的web文字直播应用,那是特例了) </span></div>
<p>确实,我也认为某些PHPer想法很幼稚,但是本帖我只想说出自己的论点而已。</p>
<p> </p>
<p>貌似,一些大的网站都没有分很多域名吧。就用你举的google例子,google搜索引擎就是www.google.com域名的,没听说过有什么浏览器限制,而在中国用cn域名那是政府限制的,没办法。</p>
<p> </p>
<p>第三条,你说得对,我也赞成,但貌似我压根就没说什么页面生成相关的问题,如果只是用PHP生成页面那只能说是一个误区,像我们开发的网站,生成页面部分只有一半吧,另一半是生成数据,通过AJAX读取,读取数据库的瓶颈可以靠高速缓存解决,因为高速缓存就是静态资源,它的执行效率可以进行硬性提高。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">1.上面我分析过一个页面打开的主要瓶颈,只要这台应用服务器和数据库服务器、memcached服务器不在一台机器上,瓶颈就不在页面生成上,无论网站大小,都是一样的。 <br><br>2.google这么多应用,有几个是和钱有关的? <br><br>3.反过来我要说了,一个网站要赚钱,当然某些途径,例如广告统计是不需要自己直接和钱打交道,但是只要是牵涉到一定的盈利模式的,怎么会不和钱有关?即使一个小网站,可以不开事务,可以都只用第三方支付的接口来搞定支付问题,但是重要的用户数据(例如订单)是无论如何都不能丢失的,对吧。 </div>
<p>1. 上面已经说了。</p>
<p> </p>
<p>2. 话说回google来了,你知道google虽然支持很多开源项目,但是貌似没怎么听说过他自己的网站应用都用哪些所支持的开源项目,但google应用都并不是开源的,你说google应用跟钱相关明显跑题了。</p>
<p> </p>
<p>而IBM类的企业,几乎每支持一个项目,就依赖这个项目做了很多项目,就像struts,不知道你有没有朋友在ISSC,基本上他们的很多客户JSP网站,都是用struts做的。</p>
<p> </p>
<p>3. 跟题目无关,不说了。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">哦,那你说的“做网站”仅仅就是页面生成了,我认为的做网站不仅仅是页面生成,应该有更多的后台业务逻辑。 <br><br>恩,后面一句您终于说到点子上来了,做小网站太方便了,您应该和其态语言比,例如asp.net体系或者rails体系,而不应该和java比。但是我反驳的不是因为你举java跑web应用的例子,而是你举证的一些理由说的不正确。 <br><br>我反过来举例吧,你要说java做web页面开发效率没有PHP高,我是绝对不会反驳你的。</div>
<p> 又给我一个“莫须有的罪名”,呵呵。我说过“做网站仅仅就是页面生成了”了么?晕。</p>
<p> </p>
<p>我一直都在围绕“<span style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-weight: bold; line-height: 18px;">不用高价的开发人员,不用配置很高的硬件服务器,就可以非常快速地构建网站应用。<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: normal; line-height: normal;">”这句话说事,不知道你说的“你要说java做web页面开发效率没有PHP高”包不包含在“<span style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-weight: bold; line-height: 18px;">就可以非常快速地构建网站应用<span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: normal; line-height: normal;">”中,如果包含,你确实不应该反驳我。</span></span></span></span></p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">一句病句:“但是对于J2EE项目”。 <br>IBM对于开源项目的支持(近10年总计),绝大部分都是Java,或者说J2SE项目,我不知道你说这句话对J2EE这个词有多了解,对于Java应用来说,只要用了和Servlet或者JSP任何沾上一点边的都可以算是J2EE,哪怕95%的程序都和J2EE API没有半点关系。Java就是java,没有所谓的对于J2EE项目这个概念,J2SE的东西是没有应用限制的,即使某个J2EE项目,例如Tomcat,其本身有相当多的代码都是J2SE的API,而不是J2EE的API。 <br>
</div>
<p> 我觉得之前说的没错,只要是J2EE项目都是很占资源的,不管是只用tomcat这样的独立引擎,还是Application Server。不是么?</p>
<p> </p>
<p>跟J2SE或J2EE有没有关系也没必要讨论,因为本贴比较的是Web应用上语言间的差异,目前java的绝大部分web应用都是建立在j2ee上的吧,那就可以了。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">你只不过举了个websphere整合apache(apache程序,不是apache网站)的例子,就能类比其他所有的apache基金会的开源项目了?很幼稚啊。各种开源项目目的多种多样,例如eclipse是笼络开发人员,试图垄断IDE开发工具市场。还有个例子是IBM还暗地里支持一个开源的专业翻译软件项目,明的是为这个项目提供服务支持(盈利模式有点接近于JBOSS),但是大部分人不知道,这个开源项目本身就是出自IBM公司员工之手。其他例子还有很多。所以你不要想当然的认为以为IBM支持的开源软件都是为其自己整合用,或者仅仅是为了J2EE项目用。 </div>
<p>你要知道,IBM做的不仅仅是产品,它有很多公司,其中就有个公司(之前提过了)叫ISSC,大部分业务是做外包项目的,这些公司整合起来就是不同行业的解决方案提供商。客户不同且需求很多,有的用Python做、有的用RoR做,拿你举例子来说的专业翻译软件,他的方案是包括语言教育市场,投资翻译软件可以把其整合到自己的解决方案中或为客户提供技术支持等,还是要赚钱的啊。</p>
<p> </p>
<p>“你只不过举了个websphere整合apache”(纠正apache是旗下IBM所支持的子项目,既不是程序也不是网站),假设说IBM支持两个开源项目,我举出其中一个例子说明了,你非要告诉我,他还支持其他项目,就不能举一反三么?这也太钻牛角尖了吧。</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">卖服务就是卖整套解决方案?您对IBM一点都不了解,就不要瞎攘攘行不?我正好有个大学同班同学做售前工程师的,不是其他公司的那种售前,而是专做example project的,他们现在什么技术都接的,客户不想用IBM服务器、要用HP或者DELL的服务器,接,客户要不想用DB2、要用Oracle,接,客户不想用websphere、要Weblogic甚至Tomcat,接,客户开发架构想要SSH(还有ibatis),都接的。IBM内部不少子公司或者部门,自己用的框架都是基于Struts 1.x封装的,还有Spring和ibatis,而不使用什么以前官方推荐的EJB或者是JSF。 </div>
<p>貌似,你的那位朋友不是在ISSC就是在CSDL或CDL吧,他们都是解决方案的附属品。你应该好好了解IBM的公司架构了,每个子公司负责不同目的的。但是你反驳的这些问题,好像都不是我说的,在反驳谁呢?</p>
<div class="quote_title">icewubin 写道</div>
<div class="quote_div">“大部分疑难问社区就可以搞定”,这句话可笑之极,如果你说“大部分中低端问题,社区就可以搞定”,那还稍微有点靠谱,刚才提了一下的,你了解JBOSS的盈利模式么? <br><br>“早就不是你想的那样了”的意思是你对IBM就是非常的无知,不清楚IBM现在的各种商业模式,就不要乱发表意见。如果你有兴趣,我可以再多和你说说IBM内部的事情。</div>
<p>第一句:社区不像国人理解那样架个KB或者BBS回答问题的,如果不回答问题就不是好社区,呵呵。国外的主流社区提供的技术支持能力非常强大,项目开发人员之间互相沟通,把开发代码中所涉及到的问题和疑难通过email或者newsgroup提出来,然后大家一起解决,这是公开场合中看所看不到的。你有心的话,查查国外的邮件列表网站,会发现很多开源项目内部好玩儿的事情。</p>
<p> </p>
<p>第二句:我无话可说,哈哈。看看上面的回复吧,哎。</p>
<div class="quote_title">wps2000 写道</div>
<div class="quote_div">你真的理解PHP中的扩展么?那些扩展都是各厂商的C/C++接口的包装而已,能说出Oracle没有对PHP开放接口的言论对你真是佩服</div>
<p>
 其实你的意思跟我的一样,承认我举的例子确实比较极端,但一方面没有指名道姓,另一方面确实是Oracle当时对PHP的支持力度不够,而不是不支持它,如果不支持的话,压根就不会有OCI模块。</p>
106 楼 kaki 2009-11-29  
楼主了解的太肤浅了。
普通的应用比java效率高才是真的,
105 楼 icewubin 2009-11-29  
yipsilon 写道

就J2EE范围内看,Tomcat性能是不错,但是现在比较的是跨语言范围的PHP和Java的web应用,当然是拿Java开源项目中主流的容器和PHP中主流的搭配来说事儿啦。



还有一点就是,Tomcat只是JSP/Servlet引擎,没有加载其他的服务(例如EJB等),因此性能相对其Application Server来说是高了些,不过有多人说resin最快,没有测试,不知其所以然。


Tomcat 6开始有异步IO模式,直接测试表明,单单就页面生成、输出的并发能力性能已经接近于C语言写的很多server了。

都什么年代了,还提EJB(顺带说一句,Tomcat不支持EJB),目前java项目,即使是企业级,绝大部分都已经不再使用EJB了,都是轻量级的J2EE开发模式了。即使用其他Application Server,也都很少用EJB了。

java体系的事实标准也在不断进步发展中的。

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

ASP.NET开发部署应该是要比PHP快,且更方便部署的,为什么会比PHP慢呢?
103 楼 icewubin 2009-11-29  
yipsilon 写道

对了,矫正一下,其实 java 1.1 开始就已经流行,国内没有表现出来是因为信息太闭塞了,直到1999年的时候才逐步在国内流行起来。

话不能这么说吧,我也可以说国外PHP 2.0就开始流行了,国内直到PHP 3.0才开始流行的吧。

java 1.1的流行主要是applet,和现在的J2SE、J2EE没有什么关系,JDK 1.2和JDK 1.1差异是非常巨大的,例如经典的Java Collection Framework就是从JDK 1.2开始的,还有其他N多的API和特性都是从JDK 1.2才开始的,就是由于差异巨大,所以JDK 1.2才叫java2。

还有就是我介绍的是J2SE的历史,不是J2EE的历史,自servlet诞生,然后是JSP 1.0、JSP 1.1,才能算J2EE开始流行,国内开始逐步流行大概是要到2000年了。
102 楼 icewubin 2009-11-29  
yipsilon 写道

所谓JS、CSS、图片、高速缓存等等,都是静态资源,为什么这些东西要用太多的服务器?不是因为应用性能问题,而是因为服务器的资源分配不平衡,例如一台服务器在机房中分配不了太多带宽;如果并发多了(不管是数据库还是磁盘读写)磁盘IO也比较吃紧。但是你对比一下打开一个应用页面所消耗的硬件资源与载入这个页面中的静态资源所消耗的硬件资源,你会发现,前者远远大于后者,如果静态资源少的情况下,有时候这种消耗都是可以忽略不计的。

在和你讨论这个问题之前,我先说一个PHP支持的一些比较搞笑的言论,PHPer先会说PHP支持并发有多强,然后有人说PHP某些方面复杂算法性能不强,PHPer又会说,算法不重要,瓶颈在数据库那边。

好,然后继续:
1.我举这么多服务器,不仅仅是说了静态资源服务器,不知你看清楚了没有,绝大部分都不是静态资源服务器。
2.既然说静态资源,脑我就再指出你的谬误之处,静态资源分不同的服务器(准确的说是不同的域名),最主要的目的是各种浏览器在默认情况下都是有并发数限制的,分不同的域名最主要的目的是绕开浏览器的并发限制,尽量减少由于并发限制造成的堵塞,而不是带宽问题。

浏览器对同一个域名可以并发请求,下面是每个浏览器默认的并发数限制
http://www.cnblogs.com/cnblogsfans/archive/2009/09/29/1576197.html

3.然后我帮你展开一个应用的瓶颈,我们不谈测试软件,只说实际情况,页面的生成,不考虑squid的页面cache(包括其他静态化缓存技术)的话,一个应用的最主要的瓶颈就是数据库操作或者是其他远程操作(例如memcached的访问),而不是页面的生成。(当然这是大部分的web应用,你如果一定要举个不带任何数据库或者日志操作的web文字直播应用,那是特例了)

yipsilon 写道

其实你说的那些只是属于互联网中某些特殊的大型网站的架构,但是对于绝大部分中小型网站来说,他的优势非常明显。而大多数的中小型网站的架构就是“web server+app server”模式的。感觉你总拿特殊应用做案例,就像淘宝一样,你知道么,淘宝是交易型网站,跟钱有关,那么必须要有一套支持事务处理的技术做架构,J2EE的企业应用优势之一就在于此,它是完全支持事务服务的。

1.上面我分析过一个页面打开的主要瓶颈,只要这台应用服务器和数据库服务器、memcached服务器不在一台机器上,瓶颈就不在页面生成上,无论网站大小,都是一样的。

2.google这么多应用,有几个是和钱有关的?

3.反过来我要说了,一个网站要赚钱,当然某些途径,例如广告统计是不需要自己直接和钱打交道,但是只要是牵涉到一定的盈利模式的,怎么会不和钱有关?即使一个小网站,可以不开事务,可以都只用第三方支付的接口来搞定支付问题,但是重要的用户数据(例如订单)是无论如何都不能丢失的,对吧。

yipsilon 写道

设计网站架构,归根到底就是要合理利用资源,使其达到一种平衡,如执行性能平衡、使用带宽平衡等。当然,这也不排除由于架构经验不足而导致硬件资源浪费,你可以用一些测试工具做做测试,比如资源占用测试啦、带宽测试啦什么的,看看到底有没有浪费的地方,但是这个问题已经超出本帖的讨论范围了。

是超出范围了,上面我说的比较多了,不再重复。

yipsilon 写道

我什么时候说PHP要做APP SERVER了?我自认为PHP还没到那种程度,但我认为PHP做网站太方便了,也是一直这么强调的。难道是因为我拿App Server举例子?这就奇怪了,我拿tomcat举例子你反驳,那就拿app server举例子你也反驳,那你说我该拿什么举java跑web应用的例子好呢?

哦,那你说的“做网站”仅仅就是页面生成了,我认为的做网站不仅仅是页面生成,应该有更多的后台业务逻辑。

恩,后面一句您终于说到点子上来了,做小网站太方便了,您应该和其态语言比,例如asp.net体系或者rails体系,而不应该和java比。但是我反驳的不是因为你举java跑web应用的例子,而是你举证的一些理由说的不正确。

我反过来举例吧,你要说java做web页面开发效率没有PHP高,我是绝对不会反驳你的。
101 楼 icewubin 2009-11-29  
引用
哈哈,你说对了,IBM用的其他开源项目某些确实可以有效地节省硬件资源,但是对于J2EE项目,你去问问好了,顺便看看我之前文章的论点。


你知道么,IBM投资apache,我所知道的就有两方面原因,一方面是把Apache相关项目中优秀的代码整合到自己的产品中,例如websphere里就能看到apache的代码;另一方面是通过apache的项目做自己客户的项目,这样也可以不用投入很多的人力来做这件事情,因为apache社区已经足够可以为其提供很多技术支持了。其他项目也是一样。


卖服务是什么?卖服务就是卖整套解决方案,包括软硬件产品还有各种人力支持等,使用开源项目的好处就是可以用现有的产品,并且不用做太多的人力支持,因为大部分疑难问社区就可以搞定。


还有一点我不明确的,是你说的“早就不是你想的那样了”是什么意思,呵呵。

一句病句:“但是对于J2EE项目”。
IBM对于开源项目的支持(近10年总计),绝大部分都是Java,或者说J2SE项目,我不知道你说这句话对J2EE这个词有多了解,对于Java应用来说,只要用了和Servlet或者JSP任何沾上一点边的都可以算是J2EE,哪怕95%的程序都和J2EE API没有半点关系。Java就是java,没有所谓的对于J2EE项目这个概念,J2SE的东西是没有应用限制的,即使某个J2EE项目,例如Tomcat,其本身有相当多的代码都是J2SE的API,而不是J2EE的API。

你只不过举了个websphere整合apache(apache程序,不是apache网站)的例子,就能类比其他所有的apache基金会的开源项目了?很幼稚啊。各种开源项目目的多种多样,例如eclipse是笼络开发人员,试图垄断IDE开发工具市场。还有个例子是IBM还暗地里支持一个开源的专业翻译软件项目,明的是为这个项目提供服务支持(盈利模式有点接近于JBOSS),但是大部分人不知道,这个开源项目本身就是出自IBM公司员工之手。其他例子还有很多。所以你不要想当然的认为以为IBM支持的开源软件都是为其自己整合用,或者仅仅是为了J2EE项目用。

卖服务就是卖整套解决方案?您对IBM一点都不了解,就不要瞎攘攘行不?我正好有个大学同班同学做售前工程师的,不是其他公司的那种售前,而是专做example project的,他们现在什么技术都接的,客户不想用IBM服务器、要用HP或者DELL的服务器,接,客户要不想用DB2、要用Oracle,接,客户不想用websphere、要Weblogic甚至Tomcat,接,客户开发架构想要SSH(还有ibatis),都接的。IBM内部不少子公司或者部门,自己用的框架都是基于Struts 1.x封装的,还有Spring和ibatis,而不使用什么以前官方推荐的EJB或者是JSF。

“大部分疑难问社区就可以搞定”,这句话可笑之极,如果你说“大部分中低端问题,社区就可以搞定”,那还稍微有点靠谱,刚才提了一下的,你了解JBOSS的盈利模式么?

“早就不是你想的那样了”的意思是你对IBM就是非常的无知,不清楚IBM现在的各种商业模式,就不要乱发表意见。如果你有兴趣,我可以再多和你说说IBM内部的事情。
100 楼 wwmfeng 2009-11-29  
没有完美的东西 有缺点才有进步
99 楼 wps2000 2009-11-29  
[quote=&quot;yipsilon&quot;]

“楼主你不是认为java的各种server负载能力很差么?”,不信的话,同样一台配置比较低的PC服务器,跑同样一个小型JSP和PHP的网站,你做做压力测试就知道了。




  已经不明白你到底想说明什么了? 想说明JSP的负载能力实际上比PHP还是要强?不知道你是否真的bench过,在能够正常运行Tomcat的机器上,PHP比JSP(为了避免拿 PHP 和 Java SSH 之流的应用比较,这里还是写明白,JSP吧)更加符合硬件杀手的称号。
  作为一个PHP玩家,很难忍受有些人拿一些明显不是PHP层面的东西和Tomcat比,不知道这是否真的能提高PHPer的信心?之所以总是强调低配置的机器上,PHP的性能要好于Java,那是因为Apache + Mod PHP 的内存要求是小于纯Java的Tomcat的,这其实只说明 Apache Web Server 占用的资源比Tomcat要少而已。难道你编写的PHP 应用本身会比JSP更省资源?

[quote=&quot;yipsilon&quot;]

如果我有个产品,不给你开发接口,你能用我的产品么?Oracle不给你连接和优化数据库的技术支持,你访问Oracle的能力当然就不行啦,很简单的道理,不知道你怎么能较真到现在,晕....




    你真的理解PHP中的扩展么?那些扩展都是各厂商的C/C++接口的包装而已,能说出Oracle没有对PHP开放接口的言论对你真是佩服
98 楼 biaowen 2009-11-29  
大家都很无聊……

相关推荐

    秒盾代码 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