java与php做web开发 最大的区别在那 为什么好多用java的
回复内容: java与php做web开发 最大的区别在那 为什么好多用java的
感觉用php做web开发的后台的更多,segmentfault应该就是php的后台,java做web后台性能更好些,每秒支持的request多些,但java开发周期长,迭代慢,但对于中小的website,性能从来不是关键,pv在没达到几千万、上亿的情况下,如何靠一个小的团队迅速迭代产品才最关键。而且做web后台,性能瓶颈往往在db。twitter之前是ruby开发的,后来因为每天数据太大了,才改成java了(其实应该是java+scala+clojure)。 对于大部分互联网公司来说,能否快速的迭代产品才是企业生存的核心之道, 而且大多数是混合各种语言的后台,没有说单纯的是php或是java.
从技术上来讲,lamp(linux+apache+mysql+php)基本上是互联网的标配,基于php的framwork明显更多些。
用php的公司: n多中小站点,大点的如baidu, qq, facebook,当然,这些公司也用java
用java的: ebay, 阿里, twitter
php做的web应用性能就比java差吗? 就拿查询mysql获取结果集并在页面上显示数据为例来分析. http请求由c级别的程序比如apache/nginx处理(java的http服务用的是java开发的tomcat等), php则调用内置在php引擎的c开发的数据库驱动mysqlnd(java用的是java开发的jdbc驱动)来操作mysql, 查询的逻辑这个重点都落在了c/c++开发的mysql身上, 然后就是把返回结果集放到php数组, 经过字符串处理后在页面输出, 这些逻辑并不复杂, php负荷并不大. 值得注意的是, php内置的大量库函数全部使用c实现, 而java的核心运行时类库rt.jar则是使用java实现.
在一些cli下的压力测试中,因为存在大量的循环,很容易就触发java的jit热点编译,这时java的计算性能上升到c的级别,这样的测试结果只能说java在计算上的性能碾压动态解释型弱类型的php,而不是在web上.对比具有jit的机制的hhvm和php7的性能也能说明这个问题,在bench.php这个计算脚本的压力测试中,hhvm还是要比php7快1到2倍,但在wordpress等真实web应用的测试中,hhvm和php7两者的性能相近.
php的运行模式要比java健壮稳定得多,比如php-fpm是经典的多进程prefork模式,主进程会维持指定数量的工作进程数,可以设置工作进程在处理多少个请求后自动重启.反观java多线程的tomcat,除了内存膨胀,代码稍有不慎,就有可能让tomcat崩溃退出,抛出一大堆的错误信息.
php开启zendopcache后,可以把脚本生成的opcode缓存到内存形成opcache供下次请求直接在zendvm上执行,能带来一定的性能提升.
php进程(php-fpm,apache)可以和mysql/memcached/redis建立持久连接,一个php进程保持一个mysql持久连接,省去每次请求都建立连接的开销.但需要注意php进程数不要超过mysql最大连接数这一点,超时或重启mysql后php-fpm在代码mysqli_connect时会自动重连,但会返回mysql server has gone away的warning信息,可以用@抑制错误输出.
php的热部署特性大大方便了开发和运维,这点是java等其他语言(包括ror/python/node.js)所不能媲美的.
我是phper,也自学过一下java web,觉得java很复杂,而php实现起来却很简单。我不评价java和php谁好,两种都是很好的语言,但php在web上的确有不少优势。
php不需要编译,易于调试
这是动态语言非常巨大的优点,web项目的改动实在太多,编译会浪费很多时间,这使得java难以快速迭代。而现在互联网的发展又非常快,快速迭代的需求是必须的。
php有丰富又成熟的框架
yii, cakephp, zend framework, thinkphp, ci等都是易于使用又久经磨练的框架。java的web框架很成熟,但真正易于使用的很少。这给不少web初学者不少门槛,让java程序员的精力更集中于所谓的后台开发,但现在web开发人员更偏向全能型,phper也由于php很简单,他们往往有精力去学习并深化css、 js甚至是linux的技术。所以资深点的phper可能除了不会做画,什么都能做。
php现成开源产品多
php只专注于web领域,php的产品就是web的产品。而php又易于使用,所以促进它更易于交流。像主流的blog系统workpress,很多做个性blog的博主为了可以扩展自己的blog也会学一点php。我是基于drupal做开发的,对php的开源社会情况也有所了解,在大多数情况下,php开源项目已经可以满足绝大部分的要求,轮子都有别人做好了,只是学会使用这些开源已经足够你在web领域上立足。你甚至有更多时间去泡妹子。
php非常易于部署
php无论在linux, mac还是windows下都很容易部署,linux下甚至可能默认有lamp可以直接使用,这个是其它语言难以超越的。是否易于部署对于初学者很重要,每个初学者都希望可以快速实现自己的hello world,这会对以后的学习过程增加信心。java初学者总是有比较多的拙败感。
至于题主说用java的多,的确是这样,大学教育也更偏向于java,php很少在大学里开课,所以会java比php多并不奇怪。 但在web领域上php的确是很好的解决方案,企业用java实现web项目我觉得可能有两个原因:一是java比php更好招人,二是他们已经存在一个java成熟的web解决方案,就没有理由去重构使用php的方案。
我一直做 java,学 php 头一天,教程里头教我写一个访问计数器,结果竟然要把访问次数写文件里头。。。这有必要吗。。。放内存不行吗。。。我就去找,硬是没找到,敢情这俩思维方式完全不一样。。。
在做web开发的时候,一般都要求要快,快速的上线,快速的迭代。然后慢慢再趋向一个稳定状态去发展,说到快,不得不承认用php来开发能节约不少时间,这也是刚开始一些创业公司或者一些初创项目选择php的很大一部分原因。
你可能要问的是php和java在web开发上都有哪些优缺点,下面我回答的却不是这些,但却是决定开发语言很重要的一个因素。
在开发之前语言的选择,还常常忽略一个很重要的问题。有时候我们以一个程序员的身份很难考虑到一些客观因素,这需要有经验的技术管理者来决定。在定一个项目用哪种语言开发的时候,必须要考虑到团队成员对这门语言的熟悉程度,还有你所在的城市,以及业务自身等等。
假如你的团队都是一群java大牛,那么你还会要求他们去用php来做开发吗?
假如你的团队成员对java和php都很了解,那你要考虑在后期人才补充上面。你所处的城市是怎样的环境,要调查这个人才市场中哪门语言的使用者相对较多。(想象一下在小城市用较新一点的语言做开发如go,那招不来人的样子。)
今年最新的调查结果显示:在北上广深这些城市,java是职位多人多,而php是职位多人少。
等等:-)
总的说,java语言本身规范性要优于php, 而且java还有一个“容器”的概念,php则不存在。
但是规范性优就意味着相比php要死板,
单单从开发角度,java 开发每项功能可能会走 entity->dao->service->action 这一个流程
php 是一种动态语言,最偷懒的时候 一个model类和一个dao类可以兼容所有数据表的映射不需要重复去写
所以 单说开发效率上 并不是一个级别的
动态语言有一些特新在快速开发上 是java这类编译语言无法望其项背的
首先,我是动态语言的支持者,当然项目中用什么语言主要还是看老大们熟悉哪个,踩过的坑哪个多,能够快速解决问题。
区别
区别,一个静态语言,一个动态语言,区别就是动态语言的生产效率高于静态语言,静态语言可以在编译期避免一些低级错误。
生产效率高的例子,
动态语言通过反射等黑魔法,可以快速实现一些静态语言只能靠编译器级别的底层修改才能实现的特性(比如aop、ioc、di),一个动态语言开发者只要了解那个新特性是做什么的就可以快速的实现它,而不需要进行底层修改,所以动态语言框架特别多,新特性层出不穷,ruby on rails就是例子。
静态语言编译期类型检查,
其实这个特点,对动态语言并没有什么吸引,在有了ide等工具的支援,以及tdd开发方式的流行后,编译期类型检查就很鸡肋了。
为什么好多用java的
现实是php比java用的多,开发和部署都比java快很多
就个人来看,java代码比php好维护。
解释型语言 编译型语言 的区别
用go好了,无论开发效率还是运行效率都要优于java,并且和php一样好学,即便有坑,也不是出外语言本身
反正大型网站都是用java的,更看重其性能和可维护性。
其实这个问题很简单,也不需要过多的数据对比啊什么的,只需要去招聘网站搜一下就知道啦,比如拉勾网,其实这两种技术都有很广的应用度。
