回复内容:
SNS采用的技术可不都是PHP (不局限于国内),特别是国外的新兴公司,基本上没有再用PHP的了,国内到还是蛮常用的。简单说说我知道的几个案例:
- Facebook (PHP):Facebook采用PHP是历史原因,而且Facebook的PHP被大量的Hack过了(e.g. Hiphop)。Quora曾经问一个问题,为什么「伟大」的Facebook要用PHP,答案是如果没有PHP,Facebook会更「伟大」。PHP的优点在于成熟稳定,经受考验;缺点在于语法较乱,代码管理不好。Tumblr和Pinboard都用的是典型的LAMP组合。
- Twitter (Ruby on Rails):Twitter也不能说全都是Ruby on Rails了,用RoR的地方大概在浅层的实现,真正后台的处理已经改成Scala。Twitter的business logic很简单,RoR的优势并没有完全发挥。RoR的社区很活跃,有许多新技术都诞生于此,而且RoR的程序员都以RoR为骄傲,我的朋友就一直费口舌劝我说转去RoR。
- Foursquare (Scala):承接这上一个说,Scala是运行在JVM的语言,继承了Java的优良特性,同时有许多改进,FS用的是Lift这个框架。
- 人人网 (Java):人人网一开始应该使用的Structs,后来肯定深度的Hack了Structs。Java做网络开发的缺点在于,成本太高。先不说JVM有多消耗内存,Java在开发效率(注意不是执行效率)要低于PHP, Ruby和Python。而且「Java系」习惯铺一个很大的摊子。所以Java主要运用在企业级别的应用,特别是Java对于Threading的控制。
- Stackoverflow (.NET):.NET的初创公司太少了,SO比较奇葩一些。.NET成本高,不仅是开发成本,而且维护成本也高。Windows的服务器很贵,而且用起来不如Linux放心。
- 豆瓣 (Python):豆瓣用Python应该是阿北自己习惯咯,当时还没有Django,所以用的是Quixote。Python现在在YC-Funded的公司中很流行,甚至有超过Ruby。原因我觉得一方面是Python在大学中很流行(相比Ruby和PHP就不行了,我们大学甚至连PHP都不教,不认为它是一门语言),大学生毕业之后创业,自然选择熟悉的语言。Python的Framework选择也很多,包括Django, Web.py, Cherry.py, Pylon等等。
主流的就这几种(Scala算不上主流还),还有一些不是很主流的,比如Lua, Erlang, Haskell,主要是functional language,也会有很多有个性的公司在用。然后听说豆瓣说有用Node.js的
http://Socket.io,具体我就不知道了,要豆瓣的同学来回答。
我是搞java的, 可是最近玩wordpress,所以有点感悟。
其实很多人对比java和PHP,很多人都说java慢、重,本来不觉得的。后来我有点感悟了。
其实人们都把PHP这门脚本语言和JSP这个SCRIPTLET做比较了。而不是PHP和java比较。
在这里假定学习时间是1年的话,搞PHP的同学比起搞java的同学做出来的东西可能更多一点了~所以,
从学习曲线来讲, php就像剑法招式,java就像内功,一开始,php比较容易有成就。 到了2年工作经验的PHP同学和java同学比较,就发现原来java有模板引擎技术,velocity,sitemesh等,可以完全不用JSP的。会感觉PHP的优势降低了,而java mvc比起php代码确实是整洁很多很多~ 这时候,PHP和java各有千秋~
最后2位同学都好几年工作经验了(假定还是程序员,没有转行^_^),具体php我没深入了解, 但是当项目巨大,需要做数据分析,数据挖掘,爬虫搜索引擎等重大项目的时候,java的优势就越来愈明显起来了。
最后说说服务器性能问题。这个不得不承认,PHP的服务器(apache或者nginx)比起tomcat,resin是轻量很多的,可能jetty能稍微好一点,但还是比不上PHP的解析器。
从语言层面来讲是肯定适用的,甚至来说大部分高级语言都能做出一个像样的SNS。存在即合理,PHP、Python和Ruby等动态语言在SNS和大量WEB2.0项目中流行肯定是有原因的。
一般来说大部分项目初创阶段都会选择成本最低,效率最高的手段打磨出产品原型,尽快发布上线以获得及时的用户反馈情况来论证项目模式的可行性,这个阶段看重
起步快、开发快、迭代快。当产品上线运营并在获得一定成功过后,一般就会倾向于
运行稳定、性能高、扩展方便,这个时候就要具体项目具体分析了。如果当前的技术体系可以满足项目的发展需求,那这种情况最好,不需要对技术架构做大的变动(我觉得FB算这一种,他们大部分的上层应用还是PHP,而且在这种背景下他们才搞出了HIPHOP和HHVM)。但是如果之前的技术体系无法支撑可遇见地规模化发展,那变更技术体系便势在必行了(比如淘宝)。
一个大型项目选择技术体系的时候(没有历史技术包袱的情况下),语言本身的特性并不是最重要的,还要优先考虑到成本(不同的技术体系对服务器软硬件成本影响是很大的,特别像.NET这种土豪才敢用的体系一般的SNS这种前期超低现金流的项目是不敢随便上的,不同技术体系的工资差距也很大的,说到这里为广大PHPer抹把泪)、团队规模(3个人的团队你要用J2EE何必呢)、开发效率(SNS这种项目一般前期是需要很快迭代出功能原型的,动态语言的开发效率和部署效率一般来说是高于静态语言的)、招聘难易度等因素。
我是PHP的重度使用者,也是Python狂热粉丝,曾经也做过好几个J2SE和J2EE的项目,现在业余时间都在琢磨Golang。还是那句话,语言没有优劣,只有适不适合。
此事跟语言无关。
市场不是问题。问题在于成本。
java最大的问题在于它太“重”,对硬件的要求太高。用来做SNS产品,硬件投入是非常巨大的。校内网早期的时候效率问题非常明显,当时的开心网用php实现,运行效率上差距非常大,这个在后来被千橡收购以后有所改善。
PHP这种语言的好处在于你所会遇到的问题基本都有人遇到过了,而且有非常漂亮的解决方案,最重要的是它们是免费的!可是用到Java的话,涉及到大规模分布式的解决方案,都是投入要求非常巨大的,小团队承受不起。
当然,如果你有钱砸,用什么语言都不是问题,大规模网站用java也许会更稳定,可控性更强,但是对于创业公司来说,PHP, Python, Ruby都是更好的选择。
是跟风的结果吧,看到做SNS的Facebook火了,大家做SNS就都选PHP了,看到做问答的Quora火了,做问答的就基本都选用Python了,这直接造成了Python成为2010年的年度编程语言,一度排名到了前五,但是随着Quora变冷,Python的热度已经降下来了。
并不都是用 PHP,除了 PHP 之外相信用 Python 和 Ruby 的也不在少数。比较有名的如 Twitter 用的是 Ruby,知乎和豆瓣等用的是 Python。
Java 和 .NET 面临的问题很可能是成本过高,特别是 .NET,因为
http://ASP.net 受到微软的专利保护,很难完全在 Mono 下实现,这使得其很难在 Linux 下使用。而 Windows 的服务器,且不考虑其软件的授权成本,Windows 所消耗的基本资源也要远高于 Linux,因此同样性能的服务器用 Linux 做网站能够承受的负载要大的多。所以从成本上考虑 .NET 不是特别适合于做大型网站。可以很明显的看到,在全球访问量排名前列的网站,除了微软自己的,没有什么是用 .NET 做的,这是一个很明显的证据。
至于 Java,我个人不是特别了解,因此暂不做过多评论。不过个人感觉 Java 的内存消耗相当惊人。
淘宝用的是java
还有一个重要的,就是学习成本吧,会什么用什么得了,互联网讲究的是快速,什么熟用什么