怎么看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执行的耗时在整体耗时的占用比例非常小,所以从业务角度来说,影响可能并不明显。
epp系统?
EPP系统是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。它是从MRP(物料需求计划)发展而来的新一代集成化管理信息系统,它扩展了MRP的功能,其核心思想是供应链管理。
它跳出了传统企业边界,从供应链范围去优化企业的资源。ERP系统集信息技术与先进管理思想于一身,成为现代企业的运行模式,反映时代对企业合理调配资源,最大化地创造社会财富的要求,成为企业在信息时代生存、发展的基石。它对于改善企业业务流程、提高企业核心竞争力具有显著作用。
请问SPL是什么意思?
样品,spl是SAMPLE的缩写,通常指的是样品,有时也有成SMPL。
SPL有以下接口(10大接口)
1.ArrayAccess其功能是使类可以像PHP中的数组一样操作。有点类似于.net平台的index操作。
2.Traversable是Zend引擎的内置接口,它是能让类用于foreach语句的接口,但是在PHP中并不能直接实现Traversable。只能间接地通过Iterator或IteratorAggregate接口实现。
3.IteratorAggregate(继承Traversable,是他的儿子)是除Iterator之外另一个从Traversable接口中继承而来的。其接口也很简单,只有一个函数。就是返回一个迭代器实例。
4.Iterator(也是继承Traversable,是他的儿子),SPL中大部分接口和类都是从这个接口继承而来的。
5.RecursiveIterator(继承Iterator,为Traversable的孙子),递归迭代器,通过hasChildren()和getChildren()两个函数实现递归遍历子元素。
6.Countable这接口就一个count()函数,返回结果集的数量。实现这个接口的类可以用count()函数查询其结果集。
7.Serializable该接口实现序列化和反序列化的接口。在没有SPL之前,可以通过__sleep()和__wakeup()实现相同的功能,若同时实现了Serializable接口和_sleep()和__wakeup(),则只有Serializable接口的函数启作用。
8.SplObserverObserver观察者模式的中的观察者。
9.SplSubjectObserver观察者模式的中的发布者。
10.OuterIterator它的实现者可以包含一个或多个迭代器成员,即可以通过。
AOBO是什么意思?
AoBo音乐盒是由国内著名的多用户博客系统oBlog团队开发的一款Web音乐应用程序;在刚刚上线的新版本中,AoBo音乐盒重新设计了用户界面,它借鉴了Windows Media Player 11 的设计风格,同时延续了WMP11的用户操作习惯,而这些细微的设计在不经意间在很大程度上提高了AoBo音乐盒的用户体验;使用AoBo Music提供的服务,用户可以很轻松的创建自己的音乐播放列表、聚合网络电台等;AoBo Music 作为 oBlog 旗下的一款子产品,它并不是独立存在的, AoBo Music 真正实现oBlog 用户和音乐盒之间的无缝链接,其中的“博客音乐播放器”便是一个很好的例子;另外,根据官方介绍,Aobo Music 是目前中国唯一使用Flex开发的Web音乐应用程序;Flex+PHP完美结合,脱离传统的Web操作模式,使用快捷方便,用户体验更爽。
或者Phpwind而不用WordPress?
这问题挺有意思的,聊聊自己的看法。
因为公司业务涉及到这块,所以对WP和其他很多建站程序都有接触,也都有一些自己的看法。国内WP的使用率至少在中小企业不算很高。这并不是说WP不好,中间的原因还是比较复杂的。首先来说,中小企业建站很少会选择自己找程序开发,都是找建站公司,而建站公司用WP不多。建站公司一般是自己写一套后台出来,然后按年付费。做过建站这个生意的都知道,对中小企业这种客户来说,建站往往都是一次性消费。什么意思呢,就是没有后续续费的可能性。那怎么解决这个问题呢?让网站持续依赖建站公司就可以了。WP是完全开源且独立的程序,不需要按年去支付程序源码,一次建站之后还想做后续的生意,就只能做衍生出来的业务,比如网站推广、网站SEO之类的。但是,这些服务对很多中小企来说也是浅尝辄止,第一年可能觉得新鲜,就花钱做了,但是第二年,第三年往往都会断掉。况且现在很多建站公司也不怎么做这些生意,搞一套源码出来,让用户按年续费,比辛辛苦苦做服务舒服多了。那可以不续费吗?有这个可能,但是不高。网站一旦建设完成,就意味着你所有的对外宣传资料都在里面,想彻底放弃不要,当然可以,那你就要重新再做一个网站,然后循环这个过程。换个角度想,每年几千块的续费好像也不是那么多,多一事不如少一事,花钱买安心,也没什么不可以的。说回WP,WP在国内并不是没人用,接触到的很多大型企业、集团网站几乎都是WP出来的。独立性强,可控性比较强。建站一般是单独立项,就是比如说我要做一个网站,好,你们这几家公司按照我的要求给我报价,我觉得哪家好就选哪家。网站做好之后也不用去开发什么衍生服务,做好之后连带服务器权限、网站权限、源码一并交接,项目就结束了。不存在什么后续续费的事情,这种合作模式相对来说就简单、纯粹很多。但是这种模式中小企业很少用,都是图省事,网上找一个建站公司,直接就花钱做了,就是上面说的那个循环。当然,讲这些不是在否定一些建站公司的运营模式,也没有刻意拔高WP系统。建站公司的这种运营模式本身并没有什么问题,明码标价就是正规生意。而且在市场不太好的情况下,也能够保证公司相对稳定的收入。毕竟看事情我们不能完全从企业角度来,也要让服务商有生存空间。另一个,WP系统有优点,当然也有一些问题。比如说,WP很多东西都没有很好的中文适配,包括插件、模板等等,这对企业接收之后的维护人员有一定的要求,至少你要看得懂,或者能够找到相关设置在哪里修改才行。这是WP国内普及一个最大的问题。另一个,WP和国内主流的搜索引擎应该还没有建立很好的合作关系。大陆不是海外,百度也不是谷歌,如果没有想明白这句话,就是对搜索市场还不够了解。为什么做网站?还不是希望更多人能看到自己的公司么,那这就必然牵扯到后续网站在搜索引擎中的排名问题。那么问题就来了,以百度为首的搜索引擎,并不是谷歌,也不会按照谷歌的算法思路走。百度现在走的是适应大陆市场的发展路线:在内容上收紧管控权,做一个内容生态。注意,这里说的是内容生态,不是搜索引擎。你可以理解为百度现在或者将来要做的,不是搜索引擎,而是一个平台,比如知乎、比如今日头条一样的平台。那回到问题本身,如果想在生态中获得更大的收益,就需要你成为生态的一部分。怎么成为呢?要么被收编、要么合作。但是这两点目前看WP都没有,或者说人家压根就不想这么干。在谷歌看来,网站和搜索引擎是相对独立存在的,主权对等。但是在百度看来,网站要逐渐变为搜索引擎内部的一个组成部分,势必要被收编改造。这点从百度最近几年的动作就可以看得出来。从熊掌号到百家号再到企业百家号,再到后来的百度AIpage,甚至于百度的竞价体系、基木鱼、子产品爱采购,都是这个目的。我们不能说这样不好,但是已经造成了市场的改变。改变不了的,就慢慢改。说回WP系统,没有这层合作关系,在一些数据对接上也能做,但是总隔着一层东西。人家点点鼠标就能同步的东西,你就要老老实实跳转几个后台去做。当然,这也能理解,用了人家的地没给钱,总不能指望着人家还敲锣打鼓地欢迎你不是,不把你赶出去就烧香拜佛了。没有无效的推广,只有没选对的方法!
我是Dora,10年推广服务经验,为7-Eleven、微软、腾讯等集团提供营销顾问服务。推广不走弯路,帮你找到适合自己的渠道,有问题咨询欢迎私信。1、提供SEO策略方案制定、企业推广现状评估;2、谷歌seo实战方法,让独立站流量突破瓶颈;3、分享海外推广、流量市场走势、出海推广操盘策略;