PHP China | 中国开源之路 's Archiver

徐风 发表于 2005-11-23 09:26

对php和zend的一些建议

平时做个人网站较多,所以特别关注低成本高效率的实现,而喜欢php,主要因为它的自由和快速。以下是我对php应用的一些建议,个人之见,欢迎大家指正和补充:)

1、php一直在升级完善,这是我们希望看到的,不过软件的升级总离不开一个问题,越来越庞大和复杂了。我不反对php去跟java、.net等竞争企业应用,但是希望仍能保留php高效的特色,可以考虑象现在这样php4和php5同步发展,php5里面提高性能的改进给php4也加上,而用来应付企业应用的特性就自己留着好了。(这让我想到Smarty和Adodb虽然强大,但是简化的Smarty-Light和Adodb-Lite同样是很多人的选择)

2、php最为解释执行的脚本,方便的是程序员,性能上比直接编译好的执行程序总要差不少的。zend encoder算是一种编译工具,不过目前从可以还原的情况来看,比较象是编码转换而不象真正的编译了。希望新的encoder版本不光是安全性上提高,性能上也要加强,如果只是加入了复杂的加密算法,那反而影响执行速度。

3、现在稍微大一点的网站应用就离不开缓存的使用,目前比较常用的是自己设计缓存逻辑或者装缓存功能的软件。自己做缓存程序一般就是把处理结果存到一个文件,在有效期内可以直接载入。这种方式灵活,但是效率并不高。而缓存软件又往往自成一体,按自己的逻辑缓存,php程序并不方便控制。比较理想是zend engine里面集成缓存机制,并提供一系列调用接口,方便php程序实现自己的缓存。

4、无论用什么语言,编程里面有几个比较难控制等东西,如内存操作、多进程处理。从网站应用来看,这些还是蛮有用的。php有共享内存的库,不过怎么防止读写冲突得自己搞定。至于需要多进程或者多线程得时候,php并没有提供直接支持,虽然有些小技巧可以实现类似功能,效果并不见得好。以后php如果能在这方面做一些统一标准出来,将大大方便开发人员。

5、我们这些人一般都致力于网络应用,让php无所不能只是个想法,倒没必要真的什么都做。我更愿意把它当成C的扩展,专门为web应用和网络开发的扩展。目前作为web应用已经比较成熟,而用来网络服务程序开发还很少。目前网络协议、数据格式五花八门,能精通的还真不多,而php可以利用开源的力量把这些都做成一个个可方便调用的库。到时候我们就可以直接用php来做语音视频聊天、文件传输等服务。

6、对开发人员来说,写好程序会迫切想知道性能怎么样,这样就需要一个分析测试的软件。现在zend studio虽然可以分析一个php程序调用的页面、函数、执行时间等,但还是不够详细。网站程序瓶颈通常在cpu、内存、硬盘读写、带宽、数据库处理等几个方面,而分析程序最好也能得出这些方面的使用值,并且不光是能分析一个php页面,要可以对整个工程可以进行统计,这样就很容易看出程序哪里需要优化了。看看介绍,ZendPlatform好像有做这方面的统计,不过程序员的开发工具上也蛮需要这种功能。

暂时想到这些,最后对zend为php的贡献表示敬意,并希望多多发布开源产品!

Ben 发表于 2005-11-23 15:21

1、PHP4的开发基本上算是停止了。以后发布的只会是一些BugFix版本。这点可能让哥们失望了。
2、可以被反编译那是由于PHP是一个解释语言的缘故。VFP、Java甚至VB目前也可以进行反编译。但这并不代表他们没有被编译过。Zend Encoder之目前所以没有性能上优势主要是在于Zend Optimizer需要进行一个解码还原的工作,这几乎完全抵消掉了预编译的优势。另外,加密的越复杂,相应的解码也就越消耗时间。目前 Zend 可以较容易的被反编译,恰恰是由于 Zend 公司不敢采用过于复杂的算法。否则将会在性能上带来很大的伤害。
3、Zend Engine 里面的缓存概念不同于 smarty 之类里面的缓存概念。Zend 缓存可能会在PHP6里面支持。PHP5在PHP5.1发布之后基本进入了成熟阶段,不大可能在 Zend Engine 方面有大的改变。
4、内存操作?多进程处理?进行这些“核心”操作大多是需要 admin 权限的。而PHP仅仅是web脚本,执行引擎一般情况下是不可能具有admin 权限,so...
5、PEAR 和 PECL 不就是干这个吗?不过既然是开源嘛,just for fun,很多时候也得看人家愿不愿意。:(
6、这个问题似乎就是压力测试问题了。不过这的确是对 Zend 公司的好建议。

过段时间我也写一些对 Zend  的建议,这一段时间主要在看 .NET 的 CLR,在和 Zend Engine 互相比对之时,感触颇多。

Per 发表于 2005-11-23 16:02

首先特别的高兴大家的深层的研究,和方向上的研究,我们看看如何把这些建议转交给zend公司。
1, php5的确多了更多的面向对象,功能的强大化,但是我还不知道是否过于复杂,简便性降低,或者说出现了哪些不足和php4比较。
2,两位楼主认为encoder,到底应该如何做呢,既然是个矛盾,加密降低性能,不加密,没有安全,如何找这个平衡点呢,特别是新的4.0的出现,如何呢?
3,目前对于缓存,我们可以看到zend公司的产品中比较的重视,我们可以参考zend Platform的两种缓存的工具,不过问题是,这是个商业产品。在大的公司中,缓存的应用更是非常的多,因为流量的问题。由于原来缺少商业产品的支持,大多数的都是自己写在程序里,工具类的似乎比较的少。甚至研发一些专门的检索页面缓存服务器,但是都存在着问题。如果想清楚地明白zend公司对于缓存的处理,可以研究一下Platform的缓存处理,包括部分缓存,一个资深工程师告诉我们,缓存的处理是一个无限挖掘的潜力,看个人的修为。不过对于大的网站,缓存的贡献似乎也是有极限。

Per 发表于 2005-11-23 16:18

4,标准是有范围的,说实在的,我感觉我们中国的确需要标准,不过也是有范围的。就好像yahoo,自己做自己的标准。我们目前来推动php的发展也是为了这个努力吧。不过开源有些矛盾,其实就是一个平衡吧。
5,目前来说,php的发展还是有些新的变化,除去更多的人的贡献,特别是大公司的加盟,业内的先驱的参与,类似框架或资源库的研发,都在路上了,不过到底哪一天是个转折点,能够到达我们希望的那个样子,还不好说。但是希望是看到了。
6,对于所讲的这种功能分析软件,可能有些宽广了,studio 原来的方向可能就是一个写php的工具,不过现在开始变得功能强大些了,所提到Platform和Studio结合起来,就是所谓的Studio enterprise,因为这个问题超越了一个简单的写作代码的工具概念,所以是一个企业的整体应用,个人估计,zend公司将会加强Platform的开发,完善那个PHP intelligence,新的2.0版本明显的看到图形化的分析工具。因此不太可能把Studio搞得过于复杂,而是结合其它类的产品达到整体应用的目的。

Ben 发表于 2005-11-23 17:07

受到楼主和版猪的刺激了,老大等一下看看我在敲的文章。:D

Ben 发表于 2005-11-23 17:55

php5对OO还支持的不彻底。另外在对PHP5的推广上面太保守了。

长空 发表于 2005-11-23 18:52

强烈要求zend 发布中文版的 IDE

徐风 发表于 2005-11-23 23:37

这里的气氛好啊,大家都讨论这么细致:)

看来zend可以考虑下直接把php程序编译成可执行文件的可能性了。
象PHP-GTK那样作为一个分支也行,而这种可执行程序可以和脚本的php做交互才行。

这样php系统本身要完成这么几个功能:
一是解释和执行php脚本,这个本身就有了
二是提供一系列api接口,供可执行程序调用。这有是定义标准的东西了,主要靠zend来做比价合适
三是php脚本和可执行程序之间的通讯管道,怎么有效的结合可以逐步琢磨发展


现在用C也可以做php的扩展,不过比我理想情况还是有点差距
一、C用起来比php麻烦,如果能用php的语法来写php自己的扩展那也是一大进步。当然php能和C混合写更加好,反正编辑都交给编译程序去了,程序员省力。
二、扩展毕竟不是单独的可执行程序,用起来不灵活,也不利于跟其他语言或程序结合。

说了这些,其实很多都是标准定制上的问题,怎么定制要看zend对php的定位了,我希望是强大不失灵活。

Ben 发表于 2005-11-24 11:23

我不知道“php写扩展”这里的扩展指的是什么。如果指的是类似现在GD、Zlib、PECL等这些扩展(暂称为传统扩展吧),那么则是根本不可行的。原因不是别的,就是速度!为什么我们要写扩展?就是因为我们想要它的速度。PHP形式的扩展(甚至是PHP可执行的扩展)在速度上恐怕要和传统扩展差一个数量级以上!如果是为了可封装性,为什么不采用OO呢?PHP和C混合?怎么混合?哥们难道希望Zend Engine在带一个PHP编译器的同时在带一个C编译器?
另外不但可以用C写扩展,还可以用C++甚至是Delphi来写。



这样php系统本身要完成这么几个功能:
一是解释和执行php脚本,这个本身就有了
二是提供一系列api接口,供可执行程序调用。这有是定义标准的东西了,主要靠zend来做比价合适
三是php脚本和可执行程序之间的通讯管道,怎么有效的结合可以逐步琢磨发展

哥们二、三里面的“可执行程序”指的是什么意思?
关于一,我是这样的观点,Zend 完全没有必要集成编译(解释、编译、执行在编译原理中不是同一个概念)功能。正如Windows没有必要集成C编译器一样。Zend 之所以要集成编译功能,仅仅是为了保持向下(<=PHP5、6?)兼容!ASP.NET 已经将这些完全实现。

徐风 发表于 2005-11-24 12:44

呵呵,我是不是越说越乱了,解释下

我说的扩展,就是你说的传统扩展
而可执行程序是一个单独的程序,在windows下就是常见的 exe ,linux下不知道怎么说,就叫 elf 吧

这两种属于不同类型的程序,扩展是基于zend engine的虚拟机运行的;exe是单独运行的,但是可以调用zend engine的api,也可以不用:)

至于程序写法方面我希望用php来做这些东西,并不是要破坏现在php作为脚本程序的模式,而是想用php的语法来写其他程序,因为使用上比较习惯。

php也是用C写出来的,那用php语法写的程序,象C程序一样编译也应该可行,关键是要有这么个编译器来处理。

而当我们用php来开发这些功能时候,这个编译器完全可以是客户端软件,没必要做到 zend engine里面去。

Ben 发表于 2005-11-24 13:18

Linux 里面不但可以用 perl 做shell脚本,也可以用 php 做 shell 吧。

zend engine 已经提供 api 供外界调用了。

php 调 exe/elf 需要一个权限问题。

“php也是用C写出来的,那用php语法写的程序,象C程序一样编译也应该可行,关键是要有这么个编译器来处理。”
如果说我的想法可能在php6实现,估计兄弟盼望的这个编译器恐怕至少要等到php10了。:D

windowsxp 发表于 2007-4-27 22:10

网上说那么多都不知道该用哪个版本了

eoe2005 发表于 2007-4-28 17:14

很有道理
我坚决支持

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.