怎么测试php性能,linux运行php会比windows好很多不?
要看就看有流量规模的网站,那些小网站用什么都差不多,没什么参考价值.2016年10月份统计,在排名前一百万最繁忙的站点中:Apache为42.40%,同比下降-0.13Nginx为27.80%,同比增长0.20IIS为10.74%,同比下降-0.14
同一台机器,Linux上的PHP性能要比Windows高,这点是可以肯定的.看PHP7核心开发者鸟哥的文章,很多优化都是现为Linux提供的,比如:1.使用GCC4.8及更新版本编译PHP7时才能开启"Global Register for opline and execute_data"支持,在WordPress测试中,能带来5%的性能提升.2.GCC通过PGO(编译器学习)编译为特定PHP应用优化的PHP版本.3.在Linux中开启HugePages,然后开启Opcache的huge_code_pages.启用HugePages后能稳定在WordPress上看到2%~3%的QPS提升.sudo sysctl vm.nr_hugepages=128opcache.huge_code_pages=1
而且Linux上可以使用PHP-FPM跟Nginx配合实现动静分离/负载均衡/故障恢复,而Windows上没有PHP-FPM,还有Windows版Nginx也只是建议用于开发测试.像Facebook自己搞的HHVM,只支持Linux系统,大概就能看出个端倪来了.PHP-FPM也比较利于用持久连接实现一一对应的数据库连接池:
PHP是什么?
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
主要特点编辑
(一)开源性和免费性
由于PHP的解释器的源代码是公开的,所以安全系数较高的网站可以自己更改PHP的解释程序。另外,PHP 运行环境的使用也是免费的。 [1]
(二)快捷性
PHP是一种非常容易学习和使用的一门语言,它的语法特点类似于C语言,但又没有C语言复杂的地址操作,而且又加入了面向对象的概念,再加上它具有简洁的语法规则,使得它操作编辑非常简单,实用性很强。 [1]
(三)数据库连接的广泛性
PHP可以与很多主流的数据库建立起连接,如MySQL、ODBC、Oracle等,PHP是利用编译的不同函数与这些数据库建立起连接的,PHPLIB就是常用的为一般事务提供的基库。 [1]
(四)面向过程和面向对象并用
在PHP语言的使用中,可以分别使用面向过程和面向对象, 而且可以将PHP面向过程和面向对象两者一起混用,这是其它很多编程语言是做不到的。 [1]
优点编辑
(一)流行,容易上手
PHP是目前最流行的编程语言,这毋庸置疑。它驱动全球超过2亿多个网站,有全球超过81.7%的公共网站在服务器端采用PHP。PHP常用的数据结构都内置了,使用起来方便简单,也一点都不复杂,表达能力相当灵活。 [1]
(二)开发职位很多
在服务器端的网站编程中PHP会更容易帮助你找到工作。很多互联网相关企业都在使用PHP开发框架,所以可以说市场对PHP的开发程序员的需求还是比较大的。 [1]
(三)仍然在不断发展
PHP在不断兼容着类似closures和命名空间等技术,同时兼顾性能和当下流行的框架。版本是7之后,一直在提供更高性能的应用。 [1]
(四)可植入性强
PHP 语言在补丁漏洞升级过程中,核心部分植入简单易行,且速度快。 [2]
(五)拓展性强
PHP 语言在数据库应用过程中,可以从数据库调取各类数据,执行效率高。
为什么php不适合做计算密集型业务?
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
1.优点:开源 免费性 快捷性 [程序开发快,运行快,技术本身学习快]
1)跨平台,性能优越,跟Linux/Unix结合别跟Windows结合性能强45%,并且和很多免费的平台结合非常省钱,比如LAMP(Linux /Apache/Mysql/PHP)或者FAMP(FreeBSD/Apache/Mysql/PHP)结合,或者数据应用够大可以考虑换 PostgreSQL或者Oracle,支持N种数据库。(N >= 10)
2)语法简单,如果有学习C和Perl的很容易上手,并且跟ASP有部分类似。有成熟的开发工具,比如NuPHPed,或者Zend Studio等等,再Linux平台下可以使用Eclipse等等。
3)目前主流技术都支持,比如WebService、Ajax、XML等等,足够应用。
4)有比较完整的支持,比如使用ADODB或者PEAR::DB做数据库抽象层,用Smarty或者smart template做模板层,如果是PHP 5.1的话,还能够使用PDO(PHP Data Object)来访问数据库。
5)有很多成熟的框架,比如支持MVC的框架:phpMVC,支持类似ASP.net的事件驱动的框架:Prado,支持类似Ruby On Rails的快速开发的框架:Cake等等,足够满足你的应用需求。
6)PHP 5已经有成熟的面向对象体系,能够适应基本的面向对象要求。适合开发大型项目。
7)有成熟的社区来支持PHP的开发。
8)目前已经很多大型应用都是使用PHP,比如淘宝网、Yahoo、163、Sina等等大型门户,很多选用PHP来作为他们的开发语言,所以大型门户都能够选用它,我想足够能够你的使用了。
9)有很多开源的框架或开源的系统可以使用,比如比较知名的开源框架有Zend Framework、CakePHP、CodeIgniter、symfony等,开源论坛有Discuz!、Phpwind等,开源博客 WordPress,开源网店系统如Ecshop、ShopEx等,开源的SNS系统如UCHome、ThinkSNS等。
10)使用成本低 (linux apache mysql php内核)
2.缺点
1)函数命名不规范 驼峰法和下滑线,传参位置不一 你知道的
2)单线程 ; PHP本身,一直以来php就是个单进程的程序;虽然php的pthreads扩展早就有了。但是它不够稳定,运行运行着就会莫名其妙的自己挂掉;php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉
3)核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善
4)只支持web开发,不方便做 .exe文件,不方便做桌面应用程序. 不方便做手机程序.
5)不适合做爬虫、自动运行脚本.科学运算项目,这语言基本构架就不适合,虽然有很多方法实现。
6)后期维护困难。后期提速空间局限性较大。
在对PHP有一个大致的认识以后,我们来了解一下为什么说PHP慢?
PHP的慢是相对于C/C++级别的语言来说,事实上,PHP语言最初的设计,就不是用来解决计算密集型的应用场景。我们可以这样粗略理解为,PHP为了提升开发效率,而牺牲了执行效率。
我们知道PHP一个很大的特点,就是弱类型特性,也就是说,我可以随意定义一个变量,然后给它随意赋值为各种类型的数据。以一个int整型数字为例子,在C语言中:
int num = 200; // 通常是4字节
但是,如果是PHP定义了一个同样的变量,实际对应的存储结构则是:
这个结构体将会占据远比C变量多得多的内存,PHP中定义方式如下:
$a = 200; //这变量将实际占用对比C变量很多倍的存储空间。
其实对PHP来说,无论存储什么类型的数据,都是用上述“通杀”的结构体实现。为了兼容PHP程序员的变量类型“乱入”,PHP做到了对开发者的友好,但是对执行引擎很残酷。单个变量内存消耗可能还不明显,一旦用到PHP的数组等,则复杂度指数上升(数组的实现是HashTable)。然后,Zend引擎执行时,将这些PHP代码编译为opcode(PHP的中间字节码,格式有点类似于汇编),由Zend引擎逐行解释执行。
无论是字符串的连接操作,还是数组的简单修改等,几乎都是“PHP程序员一句话,Zend引擎跑断腿”的节奏。因此,同样的操作,对比C来说,PHP消耗了更多的CPU和内存等系统资源。除此之外,还有内存自动回收、变量类型判断等等,都会增加系统资源的消耗。
例如,我用纯PHP实现的快速排序函数和原生sort函数,排序10000个整型数字,来做一个耗时对比,结果如下:
原生的sort耗时3.44 ms,而我们自己实现的PHP函数sort则是68.79 ms。我们发现,两者执行效率差距巨大。我的测试方式,是计算函数执行前后的时间间隔,而不是整个PHP脚本从启动到结束的时间。PHP脚本启动和关闭过程,本身有着一系列的初始化和清理工作,也会占据不少的耗时。
通常情况下,PHP执行效率的排行是:
最快的是PHP语言结构(isset、echo等),PHP语言的一部分(它们根本不是函数)。
然后比较快的就是PHP的原生和拓展函数。PHP拓展,基于Zend API之上,用C实现的功能,执行效率和C /Java是属于同一个数量级的。
真正慢的就是,我们通过PHP自己写的代码和函数。例如,假如我们使用的比较重的纯PHP实现的框架,因为框架本身的模块很多,所以,会明显拖累语言层面的执行效率,同时占据更多的内存。(国内的Yaf框架,以拓展的方式实现,因此执行效率远快于纯PHP写的框架。
在一般情况下,我们并不推荐用过PHP实现逻辑复杂计算类型的功能,尤其是Web系统流量比较大的场景下。因此,PHP程序员应该对PHP的各种原生函数和各类拓展有一个比较广泛的了解,在具体的功能实现场景中,寻求更原生的解决方案(原生接口或者拓展),而不是自己写一堆复杂的PHP代码来实现这类型功能。
如果有足够的PHP拓展开发实力,将这类型业务功能重写为一个PHP拓展,也会大幅提升代码的执行效率。这是一个非常不错的方式,也被广泛应用PHP优化中。但是,自己编写的PHP业务拓展的缺点也很明显:
拓展开发耗时比较长,需求变更的时候修改也复杂,写得不好可能会影响Web服务稳定性。(例如,在Apache的worker模式下,多线程场景下挂掉,会影响同一个进程下的其他正常子线程。如果是多线程的Web模式,编写拓展还需要支持线程安全)
拓展在PHP版本升级的时候,可能需要做额外的兼容工作。
人员变动后的维护和接手成本也比较高。
实际上,在互联网一线企业中,更常见的解决方案,并非增加PHP拓展,而用C/C 独立写一个服务server,然后PHP通过socket和服务server通信来完成业务处理,并不将PHP本身和业务耦合在一起。
不过,Web服务大部分的性能瓶颈都在网络传输和其他服务server的耗时上(例如MySQL等),PHP执行的耗时在整体耗时的占用比例非常小,所以从业务角度来说,影响可能并不明显。
你看过/写过哪些有意思的代码?
都说程序员木讷无趣,今天就借机让大家领略一下什么叫隐藏在代码里的有趣灵魂。
话不多说,follow me!
1.离职彩蛋——会自杀的文件
离职时电脑里的文件带不走,又不想被别人捡漏?不妨给文件下一个“自杀”指令。直白地说就是在Excel文件的VBA里编制一段“自杀”代码,只要有人启用该文件的宏,文件就会神奇的消失,是不是有点奇幻色彩?
这还不是最牛的,更厉害的地方在于你可以为文件设定一个“自杀”期限或者限制一定的“自杀”次数。比如,为了避免影响工作交接,你可以把启动“自杀”的时间设置在交接完成之后,只要有人再打开你的工作簿启用宏,文件就会忠诚的“死去”;设定次数的方式比较适合于炫技场景,例如设定了5次“自杀”机会,你大可以把前5次机会让给别人,事实上无论是谁打开都会发生文件“自杀”事件,而到第6次的时候一定要亲自上阵,向大家展示什么是“天选之子”。
2. 小霸王代码
不知道程序员们有没有玩过小霸王486?据说有人曾在第一次接触到这种“电脑”的时候,怀着无比激动的心情,在它的GBASIC程序下面敲下了自己人生中的第一行代码“what is your name?”即便是一行跑不通的代码,也让人兴奋不已。
3.手机的隐藏代码
买了新手机却忘记了手机序列号?别急,其实除了看手机的包装盒外,直接用手机中“关于手机”也能查到手机序列号。不过今天要说的是大部分手机在出厂之前就被安装了一组神奇的代码,只需要在手机的拨号界面,输入“*#06#”就会出现手机的IMEI码,部分手机可以通过该序列号查询到手机的真伪以及激活保修等信息。不用担心买到假手机了,开森~
4.PHP一行代码的巨大威力
不得不说PHP是“全世界最好的编程语言”,因为你只需要在编辑器里输入书上的示例代码
刷新浏览器的页面就会出现奇迹!
惊不惊喜?服不服气?开不开森?PHP是世界上最好的语言没有错吧,一行代码就输出了这么一大页东西!
5.Python控制程序操纵浏览器
什么?Python才是王道?那就学起来吧!打开IDLE,输入下面的代码:
再按一下回车键,意外之喜!程序竟然可以操纵我的浏览器了!
6.会跳舞的图片
闲来无聊娱乐一下,你可以在浏览器地址栏里输入一段代码,让网页里的图片在屏幕上飞舞起来,有没有很神奇?
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; var DI= document.getElementsByTagName("img"); DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5+"px"; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5+"px"}R++}tag=setInterval('A()',5 );document.onmousedown=function(){clearInterval(tag);for(i=0; i<DIL; i++){DI[i].style.position="static";}}; void(0)Ps.有时粘贴时浏览器会自动吃掉“javascript:”这几个字符,手动敲上就可以~
7.编辑页面文字
在浏览页面的时候想要复制一段文字,却发现文字不能被编辑?其实方法很简单,按F12快键打开控制台,在控制台里面输入
你就会发现页面中的所有文字都可以编辑了,而且绝大部分网页界面都可以这么用。
8.用PHP代码作画
代码能作画,不到20行PHP代码也可以绘制一个复杂美丽的图像,而你只需要敲出下面这些代码:
看,作品成功出炉了。
9.制作无法关闭的对话框
工作的时候最烦电脑不听指挥,但其实有些也可能是人为恶搞的小把戏,例如在浏览器的地址栏里输入一段神奇的代码,你将得到一个无法关闭的对话框。
10.黑客帝国代码雨效果
将这段代码用记事本保存为一个bat批处理文件,比如yu.bat,按WIN+R打开运行对话框,输入CMD,在CMD里面运行该文件,就会出现黑客帝国代码雨的效果了。
@echo off color 02 :start echo %random% %random% %random% %random% %random% %random% %random% %random% %random% %random% goto start11.“调皮”的光驱
不要在安装有光驱的LINUX电脑运行下列程序,否则打赌你的光驱总是会自动弹开。
12.一行“累死”CPU的代码
看吧,码农的世界丰富多彩,黑夜给了码农黑色的眼睛,我们却用它来寻找代码里的光明……希望这些小代码能激起你学习编程的兴趣哦~
程序员学习交流请添加慕课网官方客服微信:mukewang666回复暗号“前端面试”可进前端交流群回复暗号“Java”可进Java交流群回复暗号“专栏”可进程序员交流群php哪个更好?
Node.js非常优于PHP
Node.js与PHP的性能时,Node.js的优势几乎没有问题。在所有三个基准测试中,Node.js都优于PHP,即使在高性能HHVM运行时环境中测试PHP也是如此。
这意味着,当在Web服务器上执行代码并向访问者提供内容时,Node.js几乎每次都会更快。
更重要的是,当向Web服务器发出多个同时请求时,Node.js与PHP之间的区别特别明显。对于看到大量Web流量的共享托管服务器或专用服务器,多任务处理性能的差异可能是有效提供内容与崩溃的服务器之间的差异。