写过几篇关于C#的文章,引来了不少讨论。
之前我不停偶然于各种编程语言的纷争,在我的认知里每种编程语言都有它的特点,适合不同的场景,选择一个满足用户需求的才是最明智的。
但是现在不同了,C#在Anders Hejlsberg的领导下,一路披荆斩棘,现在已经遥遥领先于各类语言,而且随着微软对跨平台的支持,VS这个世界第一的代码编辑器,我好像看到了秦国要统一六国的影子,优秀的语言淘汰掉队的语言,就像汗青选择一样,不也挺好吗?
先挑软柿子捏,PHP:)
我做码农20多年,用过不少语言,C#是用得最多的,也是现在的主要开辟语言。可以说现在的C#已不再是原来那个只能开辟windows应用程序的鸡肋了,于是我就说:PHP与C#根本就不是一个量级的。结果这句话,引起了PHPer们的剧烈不满:
◆呵呵,什么时候连net的也敢来说吊打php了。什么世道?
◆吊打php就算了吧,效率瓶颈更多不是语言本身,而是数据库,架构等影响的。facebook不也用php?除了微软自己,你再找一个大规模用net的来看看?
◆Php你会吗?
◆吊打?你不感觉脸红吗?你难道没有犯罪感吗?
◆起首应用场景不同,其次很少软件有什么屌炸天的功能必要优化到语言实行效率上,软件实行瓶颈在硬件设施上,最后学习成本上,php要低许多
◆胡说八道 php是web开辟王者,不是因为成本低,而是因为它就是为web而生
◆胡说八道 继续吹net
......
今天公平起见,我不比桌面应用,就以PHP最善于的Web项目来举例子,让那些PHPer们看看,PHP跟C#语言相比有多么严峻的缺陷。
之前做过一个微信现场摇一摇的项目,时间比较紧,所以就在网上找了一套现成的PHP代码,简单修修改改,匆忙上马。成本方面,不得不说PHP有非常大的优势,复制过来修修改改就能用,Apache、MySql都不用花钱。
结果没几天,用户反馈说摇一摇人少了正常,人一多服务器就崩了,100多人一起摇就不行了。
有问题肯定要解决嘛,于是查代码,发现了此中的逻辑:每个手机每摇一次,都要到后台数据库把计数加1。极端情况下,100多人1秒钟内就可以摇5下,数据库1秒钟就要写500次,而且还要做同步处理,这啥服务器能受得了啊?这TM是哪个垃圾程序员写的代码!
当时我想,原因找到了,解决还不简单吗?根本不必要每次都写数据库,只要做一个全局哈希表的缓存,每个人的计数都只在缓存中更新,游戏结束之后再批量更新到数据库,不就解决这个问题了吗?
然而想法是美好的,我用了PHP的全局变量,也记录了结果,但是不对啊,每个用户都只能访问自己的,汇总那里根本取不到值啊,百思不得其解。查资料一看懵逼了,PHP竟然没有所有效户共享的机制,所谓的全局变量只是针对当前用户的全局变量,而不是所有效户的全局变量,要想实现只能通过数据库、文件或memcached等外部方式来实现。数据库和文件肯定性能低,memcached我一看,这不就是再设置一个网站专门存储内存变量吗?这也叫解决方案?在C#中几行代码就能搞定的事情,在PHP中因为本身不支持,就得再配一个网站,简直超越了我对软件架构设计的想象,PHP不是世界上最好的语言吗?就这?我到此刻也终于理解那个程序员为什么每摇一次都写数据库了,这种性价比最高,小规模使用没问题,大规模有问题了你得回头找我来提供服务。
理解归理解,问题还是要解决。
既然无论怎样都要再配一个网站,我就索性用c#+asp.net写一个,毕竟这个是高频应用,脚本肯定没有编译好的二进制效率高。于是用C#写了一个缓存接口,在php中调用,以后这个项目2000人的摇一摇都没再出过问题。
从成本上说,PHP确实有优势,前提是项目简单要求不高,且有现成代码可以使用的基础上。
从技能上说,PHP相比C#没有任何优势,C#就是吊打PHP!PHP能做的,C#都能做;C#能做的,PHP许多做不了;C#与PHP都能做的,C#也有能力比PHP做的好。
欢迎PHPer们来喷,也欢迎C#er们来支持:)
|