论坛首页 编程语言技术论坛

PHP框架的繁荣是正确的发展方向吗?

浏览 246921 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-02-02  
niyunjiu 写道
php的运行机制容易实现SNA,而java不容易实现SNA,这是否是php的一个优点呢?
当然这个不是性能了,而是扩展性了

你是不是应该这么问,凡是和PHP的运行机制不类似的语言或框架,都不容易实现SNA?
0 请登录后投票
   发表时间:2009-02-02  
如果php在核心上也支持不必每次都去初始化资源,恐怕有得一拼了,毕竟PHP目前来说拥有大量的用户。
0 请登录后投票
   发表时间:2009-02-02   最后修改:2009-02-02
robbin 写道
其实PHP核心问题都不是性能,而是能不能保持“简单性”和“草根性”

一个有点编程背景的普通人,只需要学习PHP半天时间,就可以上手开始开发web应用了,这就是PHP最大的优势。专业程序群体才多大,而电脑爱好者的群体有多大? 我一个朋友,做photoshop出身的,人家学了两天PHP,到处接活给人家开发网站,一个人全部搞定。你让他学Java,那真要了他的命了。我另外一个朋友的老公,人家压根就不是这一行的,照样会用PHP搭网站,人家上网去下载一个PHP程序,改吧改吧页面,就弄好了,你让人家学ruby?那肯定不可能。

PHP的人海战术也就是这么来的,群众基础好。事实上PHP5曾经在相当长时间内被抵制,就是因为PHP5的面向对象语法引入了对于电脑爱好者来说门槛开始变高了,PHP开始变复杂了。

因此PHP再用什么框架,是违背PHP本身的设计哲学的。PHP就应该做简单的页面处理就够了,复杂的逻辑让后台的Java/C++去处理。



PHP照样可以简单,并不是说PHP到了5之后就不兼容PHP4了,PHP5照样可以以更高的性能支持PHP4语法。
不管怎么说发展才是硬道理,PHP的劣处被攻克后将会更强大。
如果照robbin所说的,那么有c之后就不应该有c++,或许也不应该有java。向下来说,那么C也不应该被设计成支持汇编,汇编的事就交给asm去做吧。
0 请登录后投票
   发表时间:2009-02-02  
七月十五 写道
如果php在核心上也支持不必每次都去初始化资源,恐怕有得一拼了,毕竟PHP目前来说拥有大量的用户。


如果PHP要实现跨请求的持有内存资源,这意味着PHP必须实现对象内存分配机制和垃圾收集器,而这将意味着PHP语言的复杂性上升,PHP内存泄露的危险大大增加,最终将得不偿失。

其实我们应该跳出编程语言的简单对比,而比较一下不同的编程模型背后的哲学:

1、Java - controll whole world模型 单进程运行,进程内部多线程调度,所有的资源都自己提供。

2、Ruby - controll process模型 多进程运行,进程内部可以持有资源,带有GC,部分依赖外部资源实现(例如Cache)功能

3、PHP - controll request模型 多进程运行,进程不持有任何资源,不带GC,完全依赖外部资源实现扩展功能

比较和探讨一下3种不同的模型,以及他们的优势,劣势,长处,短处,适合做什么,不适合做什么。这才是一个有意思的话题。
2 请登录后投票
   发表时间:2009-02-02  
robbin 写道
论坛的讨论就没有必要搞什么PHP pk Rails了,特别是pk性能更加无聊。

我们要讨论的内容应该是:

1、PHP的优点和限制是什么?
2、PHP的框架是否符合PHP应该的发展方向
3、对于PHP框架来说,如何最大限度发挥PHP的优点,又如何尽量规避PHP的限制


这个主题好。

1、PHP 有点在于运行模式简单,PHP 开发者可以假定自己的应用是运行在一个单一的进程中。而且由于每次请求后都会释放资源,所以开发者也不需要操心内存泄漏等问题。再加上 PHP 类似 C 的简单语法和丰富的扩展库,所以编写 PHP 应用很方便。当然,PHP 最大的优势还是因为其设计目标就是针对 Web 领域的,开发 Web 应用得心应手。

2、我认为 PHP 使用框架是一种必然趋势。因为 PHP 也在逐步进入更大规模的应用。比如淘宝,前端就开始逐步改为 PHP 了。虽然这种大型应用中,PHP 只是充当表现层和胶水的作用,但框架仍然能够带来很大的价值。框架可以让 PHP 应用开发更有规范性,从企业角度来说可以获得更高的可维护性。

而中小规模的应用,使用 PHP 框架可以完全满足从表现到业务的全部需求。不管是开发效率还是维护性,都比不用框架强得多。至于性能,现在的 PHP 框架已经很快了,不会出现无法满足性能表现的情况。

3、PHP 框架要充分发挥 PHP 的优点和规避 PHP 的限制,可以从几个方面入手:

a) 按需加载:在一次请求中,只有被用到的功能才加载,这样可以最大程度的提高性能。其他语言的开发框架都是一次性把大部分组件载入内存,而 PHP 由于对象不能跨请求存在,所以这种做法是对性能的极大浪费。

b) 尽可能降低 bootstrap 成本:bootstrap 通常完成运行环境初始化、载入配置、连接数据库等。在 PHP 中,初始化运行环境并不存在什么问题,因为 PHP 本就是为 Web 应用设计的,启动 .php 程序时,运行环境就已经准备好了。而载入配置可以通过把配置文件解析为 php 数组后写入缓存文件,载入时直接 include 就可以获得设置,连序列化和反序列化都省了。最后的数据库连接,通过持久连接就能很好解决。而且访问量大了,再增加个第三方的连接池也不是难事。

0 请登录后投票
   发表时间:2009-02-02  
robbin 写道
3、PHP - controll request模型 多进程运行,进程不持有任何资源,不带GC,完全依赖外部资源实现扩展功能


这个说法我没怎么看懂。扩展功能是指什么?
0 请登录后投票
   发表时间:2009-02-02   最后修改:2009-02-02
dualface 写道
b) 尽可能降低 bootstrap 成本:bootstrap 通常完成运行环境初始化、载入配置、连接数据库等。在 PHP 中,初始化运行环境并不存在什么问题,因为 PHP 本就是为 Web 应用设计的,启动 .php 程序时,运行环境就已经准备好了。而载入配置可以通过把配置文件解析为 php 数组后写入缓存文件,载入时直接 include 就可以获得设置,连序列化和反序列化都省了。最后的数据库连接,通过持久连接就能很好解决。而且访问量大了,再增加个第三方的连接池也不是难事。



1.框架的逻辑环境可简单可复杂,本质上来讲是在内存中建立数据结构模型,即使你说的,针对配置文件的加载在文本处理上可以优化,逻辑上的数据结构建立的开销是无法避免的。比如,处理一个大的xml对象(算是第三个具体的例子了,呵呵),深度优先或广度优先算法遍历这个xml对象,变成一定的数据结构(假设某个功能框架有这个需求),这个数据结构的建立过程是很难避免的。

当然可以根据PHP的特性,通过其他手段绕过这个问题,但毕竟是绕过这个问题。

2.配置文件和数据库连接共享只不过是框架逻辑环境初始化的两个例子而已。从这两个例子的对策上来说,已经把PHP搞得有点复杂了,你说得很简单,什么都很好解决,但是当很多“很好解决”的技术手段或方案合在一起,往往就不是那么很好解决了,技术架构也越来越复杂。

0 请登录后投票
   发表时间:2009-02-02  
robbin 写道
七月十五 写道
如果php在核心上也支持不必每次都去初始化资源,恐怕有得一拼了,毕竟PHP目前来说拥有大量的用户。


如果PHP要实现跨请求的持有内存资源,这意味着PHP必须实现对象内存分配机制和垃圾收集器,而这将意味着PHP语言的复杂性上升,PHP内存泄露的危险大大增加,最终将得不偿失。

其实我们应该跳出编程语言的简单对比,而比较一下不同的编程模型背后的哲学:

1、Java - controll whole world模型 单进程运行,进程内部多线程调度,所有的资源都自己提供。

2、Ruby - controll process模型 多进程运行,进程内部可以持有资源,带有GC,部分依赖外部资源实现(例如Cache)功能

3、PHP - controll request模型 多进程运行,进程不持有任何资源,不带GC,完全依赖外部资源实现扩展功能

比较和探讨一下3种不同的模型,以及他们的优势,劣势,长处,短处,适合做什么,不适合做什么。这才是一个有意思的话题。


建议看看这篇博文:http://blog.ianbicking.org/2008/01/12/what-php-deployment-gets-right/

从 Python/Ruby 和 PHP 的运行模型来看,我的建议是初、中、高级开发者均可使用 PHP,而中、高级开发者比较偏向于使用 Python/Ruby,因为后者给开发者一种从全局上掌控工作进程的快感,这种快感是无法从 PHP 的运行模型中得到的。

做个比喻:
Python/Ruby 框架是一群音乐家静静地坐着演奏交响乐,而 PHP 框架是一群舞者在激流而下的瀑布里跳舞……

这些舞者可以模仿那些音乐家的“模式”,却模仿不了他们的“本质”,而只有这个“本质”,才是他们的“模式”赖以生存的基础。

我同意这种观点:Python/Ruby 框架是在误导 PHP 框架。
0 请登录后投票
   发表时间:2009-02-03  
diogin 写道


建议看看这篇博文:http://blog.ianbicking.org/2008/01/12/what-php-deployment-gets-right/

从 Python/Ruby 和 PHP 的运行模型来看,我的建议是初、中、高级开发者均可使用 PHP,而中、高级开发者比较偏向于使用 Python/Ruby,因为后者给开发者一种从全局上掌控工作进程的快感,这种快感是无法从 PHP 的运行模型中得到的。

做个比喻:
Python/Ruby 框架是一群音乐家静静地坐着演奏交响乐,而 PHP 框架是一群舞者在激流而下的瀑布里跳舞……

这些舞者可以模仿那些音乐家的“模式”,却模仿不了他们的“本质”,而只有这个“本质”,才是他们的“模式”赖以生存的基础。

我同意这种观点:Python/Ruby 框架是在误导 PHP 框架。


还有几个不明白的地方:

如果性能不是问题,那PHP框架还是不是问题?

运行机制上,上面说的给开发者一种从全局上掌控工作进程的快感,能不能举一个实际的例子解释一下,到底是什么全局掌控?PHP是否有必要实现这样的全局掌控?
0 请登录后投票
   发表时间:2009-02-03   最后修改:2009-02-03
lao__wang 写道
diogin 写道


建议看看这篇博文:http://blog.ianbicking.org/2008/01/12/what-php-deployment-gets-right/

从 Python/Ruby 和 PHP 的运行模型来看,我的建议是初、中、高级开发者均可使用 PHP,而中、高级开发者比较偏向于使用 Python/Ruby,因为后者给开发者一种从全局上掌控工作进程的快感,这种快感是无法从 PHP 的运行模型中得到的。

做个比喻:
Python/Ruby 框架是一群音乐家静静地坐着演奏交响乐,而 PHP 框架是一群舞者在激流而下的瀑布里跳舞……

这些舞者可以模仿那些音乐家的“模式”,却模仿不了他们的“本质”,而只有这个“本质”,才是他们的“模式”赖以生存的基础。

我同意这种观点:Python/Ruby 框架是在误导 PHP 框架。


还有几个不明白的地方:

如果性能不是问题,那PHP框架还是不是问题?

运行机制上,上面说的给开发者一种从全局上掌控工作进程的快感,能不能举一个实际的例子解释一下,到底是什么全局掌控?PHP是否有必要实现这样的全局掌控?




我从事PHP工作了两年, 过程式开发和框架开发都经历过。对此我有体会:
1. 如果是微型项目,过程式开发足矣。
2. 如果是中型项目,没有一个约束、没有一个规范、没有一个整体的控制,尤其是创业型项目,需求容易变,没有框架的话就是瞎折腾,迟早后悔。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics