PHP和Python/Ruby的运行机制有一个本质区别:PHP是每次HTTP请求过来以后,初始化全部资源(例如创建数据库链接、加载系统类库,创建缓存等等),处理完毕,释放全部资源,这不像Python/Ruby之类带有GC的脚本语言,Python/Ruby是初次启动的时候初始化资源,随后的请求就不必再次初始化资源了。
这种机制的差异带来的区别就是:
1、PHP极难出现严重的内存泄露问题,随便你代码写的多烂,反正每个请求一执行完毕,所有资源统统释放光。而Python/Ruby则需要依赖GC来回收内存,因此稍有不慎,还是会出现GC无法释放的内存泄露问题。
2、PHP每次请求都要初始化资源,这个开销非常大。所以尽管PHP解析器本身的运行速度是极快的,但是一旦使用复杂的PHP框架,那么由于需要每次请求的时候初始化整个框架,性能的下降非常厉害,你用一个很复杂的PHP框架的结果就是整体性能被Ruby远远甩开。这也是为什么PHP社区这么多年来,并不怎么倾向于使用框架的原因之一。
3、由于PHP这种每请求初始化资源的机制,也造成了PHP添加跨请求的高级特性相当困难,这是PHP本身一个很大的限制,但是反过来说,正是这种限制使得PHP始终保持在一个比较简单的web语言上面,而正是这一点才是PHP得以成为互联网第一Web编程语言的原因,因此也未必就不好。
总之,PHP和Ruby的差异还是很大的,不适合放在一起比较,其实应该比较的是Ruby和Python才对。
所以我觉得Rails这种框架性做法被PHP跟风以后,其实是把PHP带上了邪路,所以不如说是Rails在误导PHP的发展。顺便多说一句:DHH在编写basecamp之前,一直是用PHP的,并且自己还写了一个PHP的快速开发框架,他改用ruby以后,把当初自己写的PHP框架也移植过来了,这个框架实际上是Rails最初的原型。那么为什么DHH当初不直接基于PHP做Rails呢?非要改用ruby以后,才发表rails呢?你看看PHP这种运行机制就知道了,PHP做复杂的web开发框架并不是一条光明的道路。
分享到:
相关推荐
使用Python Lua和Ruby语言进行游戏编程
Eric is a full featured Python and Ruby editor and IDE, written in python. It is based on the cross platform Qt gui toolkit, integrating the highly flexible Scintilla editor control. It is designed to...
Python垃圾回收机制:主要介绍了计数引用,标记清除,分代回收等概念,测试代码,测试结果。用于技术学习,技术分享
python代码运行助手
Redis 实战 源码 Josiah L.Carlson著 黄健宏译 人民邮电出版社出版 java python ruby node 源码
Tutorialspoint QC Sass Scala Scrapy Rust Python Ruby Redis R React 教程
vim8.1一键安装的deb包, 支持 lua, python, ruby, 全方位支持各种插件
用Python,Lua和Ruby语言设计游戏,是python lua 和ruby的入门类书籍(英文版)
Python爬虫运行流程,简单描述了Python爬虫运行流程,便于理解
PHP、Python、Ruby的(数据库、文件)比较 (原创)
ltp哈工大NLP源码含(c# c++ ,java python ruby等)
Matlab系列--学习各种语言的(c c++ java Python ruby MATLAB lingo math
用Python,Lua和Ruby语言设计游戏-Game.Programming.with.Python.Lua.And.Ruby
reggae, 在D python ruby Javascript或者Lua中,构建系统 Reggae 一种多前端( 。python,ruby,Javascript,Lua ) 和后端( 忍者,忍者,tup,自定义)的( 元) 构建。 这是alpha软件,只在Linux上测试,可能会有重大的...
内存管理,对于python这样的动态语言来说,是至关重要的一部分。它很大程度上决定了python的执行效率,对象的创建销毁,都涉及到内存的管理
python成功运行hadoop
Python、Ruby游戏设计参考图书,该书详细讲述了游戏的通用设计与如何用Python、Ruby等脚本类语言设计开发游戏。
PyCall:从Ruby语言中调用Python函数该库提供了直接从Ruby语言中调用Python并与之进行部分互操作的功能。 您可以在PyCall中导入任意Python模块:从Ruby语言调用Python函数该库提供了直接从Ruby语言调用Python并与之...
python-ruby-golang click(Python),thor(Ruby)和cli.go(Golang)的比较,用于构建非常简单的命令行工具。 快速开始 有关更多信息,请参见每个子目录中的README.md。 博客文章
python的License授权机制(csdn)————程序