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开发框架并不是一条光明的道路。
分享到:
相关推荐
DevOps - Python / Shell / Ruby 数据采集 - Python / C++ / Java 量化交易 - Python / C++ / R 数据科学 - Python / R / Julia / Matlab 机器学习 - Python / R / C++ / Julia 自动化测试 - Python / Shell 作为一...
使用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/Pygame经典游戏源码飞机大战 亲测成功运行,值得下载的一款游戏源码项目
Python/Pygame经典游戏源码五子棋 亲测成功运行,值得下载的一款游戏源码项目,学习python语言,分析代码实现方法经典样例。 如需要代码指导或运行环
PHP、Python、Ruby的(数据库、文件)比较 (原创)
Ruby/Javascript/Python/Erlang/Elixir/Elm 开发人员有用的资源链接。 主要类别 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | : , , | | | | | | : , , , , | | | | | | | | | | | | | | ...
用Python,Lua和Ruby语言设计游戏,是python lua 和ruby的入门类书籍(英文版)
pdflib 7 的中文参考手册,综合版,包括 Cobol、C、C++、Java、Perl、PHP、Python、RPG、Ruby 和 Tcl。
Python、Ruby游戏设计参考图书,该书详细讲述了游戏的通用设计与如何用Python、Ruby等脚本类语言设计开发游戏。
1、用自己采样得到的故障诊断数据分别采用Python/MATLAB两种方式对样本数据进行故障特征提取。...3、两份用Python或MATLAB写的源码都是对故障样本进行特征提取并归一化操作,改变文件路径可以直接运行。
ECMAScripter 是 JVM 语言的 IDE。 这个IDE非常简单易用。 因此,您可以轻松地使用知名语言编写和测试您的算法。
先通过 which python 获得 python 指令所在路径: $ which python /usr/bin/python 如上得到了其所在路径是 /usr/bin/python ,因此我创建了一个文件 ~/bin/python-sudo.sh ,然后填入: #!/bin/bash sudo /usr/bin/...
Python和Ruby比较优缺点共1页.pdf.zip
Python/Pygame经典游戏源码坦克大战 亲测成功运行,值得下载的一款游戏源码项目,学习python语言,分析代码实现方法经典样例。 如需要代码指导或运行环境安装指导,可以留言给我!
PHP、Python、Ruby的(数据库、文件)比较(原创).pdf
用Python,Lua和Ruby语言设计游戏-Game.Programming.with.Python.Lua.And.Ruby