首页 php教程 php手册 Delphi for PHP 评测

Delphi for PHP 评测

Jun 06, 2016 pm 07:56 PM
delphi for p php 评测

Delphi for PHP 评测 Haohappy haohappy AT msn.com http://blog.csdn.net/haohappy2004 为书写方便,下面将 Delphi for PHP 简写为D4P。 其实现在写这篇评测稍早了一些,因为这个IDE以及使用的开发框架Vcl for PHP都才刚推出不过一个月。 首先请先回顾一下

Delphi for PHP 评测
Haohappy  haohappy AT msn.com
http://blog.csdn.net/haohappy2004

为书写方便,下面将Delphi for PHP简写为D4P。

其实现在写这篇评测稍早了一些,因为这个IDE以及使用的开发框架Vcl for PHP都才刚推出不过一个月。

首先请先回顾一下关于三种主流WEB架构的思考 一文所说的三种WEB开发方式,使用D4P开发是典型的第三种方式,就是IDE+基于控件、事件驱动的开发框架。

我根据D4P的DEMO,设计了两个程序,一个是普通的表单提交-返回程序,然后我所熟悉的QuickForm进行了对比;另一个是数据库程序,就是查询一个MySQL表,然后返回,另外试用DataGrid列出数据。

在写测试程序的过程中,除了熟悉和体验一下IDE的使用,其实我更感兴趣的是Delphi for PHP这个IDE所采用的PHP开发框架――Vcl for PHP(http://www.qadram.com/vcl4php/)。在我使用D4P之前,我就猜测Codegear在易用性上一定不错,这个猜测得到了证实。但是Vcl for PHP是否是一个优秀的PHP框架? 如果没有优秀的开发框架,不能保证程序的质量和效率,那么光靠个优秀的IDE,开发出来的程序一定是中看不中用,没人敢用。

基于这个想法,我认真研究了一下VCL for PHP(简称为V4P)。这个框架2007年3月27才开源的,也就是说开源不到一个月。框架文件位于C:/Program Files/CodeGear/Delphi for PHP/1.0/vcl目录,或者你也可以在http://www.qadram.com/vcl4php/网站上下载到。

我们可以看到,V4P使用了很多我们熟悉的PHP开源类库,例如ADODB、Smarty、Xajax、Nusoap等等,还使用了qooxdoo这个JS GUI工具包。也可以看到一些似乎还未完成的类库,如对Google Map的调用(见vcl/google目录),对PHPBB论坛的调用等。这下你明白了吧,为什么D4P这么强大,呵呵,因为它站在巨人的肩膀之上啊。不过这也带来了一个问题,太依赖别人的类库,缺乏自主性,对于代码质量带来了不可控因素。

对于第一个测试程序,很简单,就是一个表单提交数据,然后返回响应。大家可以自己参照Demo来写,我测试了一下效率,大概执行时间在0.5秒左右,嗯,算是非常慢。

对于第二个测试程序,也就是数据库操作程序,是我比较重视的,下面来详细介绍一下。

D4P目前支持MySQL和Interbase两种数据库。我打开D4P的安装目录看了一下,原来数据库访问层使用的是ADODB(http://adodb.sourceforge.net)这个开源类库。也就是说理论上将来D4P可能支持非常多的数据库,因为ADODB实在太强大(这里是ADOdb支持的所有数据库:http://phplens.com/adodb/supported.databases.html)。

D4P提供了五种数据库访问控件(Data Access:Datasource,Database,Table,Query,StorProc—数据源、库、表、查询、存储过程)和三种数据库控制控件(DBGrid,DBPaninator,DBRepeater—表数据列表、分页、表数据或记录集列表)。

DBGrid的设计还是很精巧的,前端采用了AJAX,显示很漂亮,还可以直接更新。但显示速度较慢。老实说这样一种东西对于管理后台数据库似乎中看不中用,如果是数据库管理,我们还是使用熟悉的更为强大的PHPMyAdmin吧;如果是提供给用户的管理页面,我们要定制很多页面效果,DBGrid又不满足要求(太复杂了,而且都封装起来了,修改效果不如自己写)。用于给客户作展示倒是挺适合的。

Delphi for PHP 评测

我们再来测试一下代码的执行速度。任务很简单,我们从两个表中分别读取30条记录,然后分别两个生成DataGrid:

测试代码非常简单:

<span><?php </span></span>
<span>$time_start </span>
<span>= </span><span>microtime_float</span><span>(); </span>
<span>        </span>
<span>//Includes </span>

<span>        </span>
<span>require_once(</span><span>"vcl/vcl.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"forms.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"dbgrids.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"dbctrls.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"db.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"dbtables.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"extctrls.inc.php"</span><span>); </span>
<span>        </span>
<span>use_unit</span><span>(</span><span>"stdctrls.inc.php"</span><span>); </span>

<span>$time_start2 </span><span>= </span><span>microtime_float</span><span>(); </span>

<span>        </span>
<span>//Class definition </span>
<span>        </span>
<span>class </span><span>Unit2 </span><span>extends </span><span>Page </span>
<span>        </span>
<span>{ </span>
<span>               public </span>
<span>$DBGrid2 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$dsfeedentry1 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$tbfeedentry1 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$Query1 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$DBGrid1 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$dsarticle1 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$dbhappycms21 </span><span>= </span><span>null</span><span>; </span>
<span>               public </span>
<span>$tbarticle1 </span><span>= </span><span>null</span><span>; </span>

<span>        } </span>

<span>        global </span>
<span>$application</span><span>; </span>

<span>        global </span>
<span>$Unit2</span><span>; </span>

<span>        </span>
<span>//Creates the form </span>
<span>        </span>
<span>$Unit2</span><span>=new </span><span>Unit2</span><span>(</span><span>$application</span><span>); </span>

<span>        </span>
<span>//Read from resource file </span>
<span>        </span>
<span>$Unit2</span><span>-></span><span>loadResource</span><span>(</span><span>__FILE__</span><span>); </span>

<span>        </span>
<span>//Shows the form </span>
<span>        </span>
<span>$Unit2</span><span>-></span><span>show</span><span>(); </span>

<span>        function </span>
<span>microtime_float</span><span>(){ </span>
<span>                list(</span>
<span>$usec</span><span>, </span><span>$sec</span><span>) = </span><span>explode</span><span>(</span><span>" "</span><span>, </span><span>microtime</span><span>()); </span>
<span>                return ((float)</span>
<span>$usec </span><span>+ (float)</span><span>$sec</span><span>); </span>
<span>        } </span>

<span>$time_end </span><span>= </span><span>microtime_float</span><span>(); </span>
<span>$time_lib </span><span>= </span><span>$time_start2</span><span>-</span><span>$time_start</span><span>; </span>
<span>$time_total </span><span>= </span><span>$time_end </span><span>- </span><span>$time_start</span><span>; </span>

<span>echo </span>
<span>"Loaded libs in $time_lib seconds and all processed in  $time_total seconds"</span><span>; </span>
<span>?></span>

输出结果:

Delphi for PHP 评测

Loaded libs in 1.1935691833496 seconds and all processed in 2.1492249965668 seconds

结果告诉我们:读取两个表并且生成DataGrid总共花费了2.14秒,其中加载公用类库用了1.2秒。

我用PHP程序员最常用的数据表读取及输出结果的代码进行同样功能的代码重写,即用两个mysql_query(‘SELECT * FROM table limit 0,30’)得到结果并用while循环输出,消耗时间为:
All processed in 0.31938099861145 seconds

0.3秒对2.1秒,相差7倍,可见D4P的DataGrid效率相当低。注意这是测试的是服务器端数据查询的执行效率,实际上在浏览器端的显示也有明显延迟,可能qooxdoo的效率也不高。

D4P除了有自带的基于qooxdoo的DataGrid,还可以与PEAR的DataGrid直接集成,就是一个正常的HTML表格界面,相对比较容易扩展。

其它:

小结一下:

D4P的优点:

  • 界面清爽漂亮,IDE速度较快。操作简便,继承了Delphi的传统。
  • 控件相当齐全,所有的表单和常见的HTML控件,还有不少特色组件,比如HTML在线编辑器、进度条、日期选择器、日历、树状菜单等等。还有数据库和WEBServices控件等。可以满足大部份情况下设计的需要。
  • 代码可复用性高。

D4P的缺点:

  • 只支持Windows平台;光是这一点,就无法与ZDE相抗衡,不过在中国问题不大,因为在中国大部份人都在Windows下开发项目,在Linux下布署。
  • 生成的代码执行效率不高。

这是个主要缺陷,具体看上面的测试数据。如果是“展示型”的站点,例如门户网站的新闻频道,肯定不可能用这样的框架来开发。因为我们要对服务器端的脚本和生成的HTML/JavaScript都要精确控制,减少效率和带宽上的浪费。

将来我也许会拿D4P来开发OA之类的企业内部应用。这种项目界面控件比较多,需求比较复杂,变化比较多,但系统负载不大,对效率要求不高。

  • VCL for PHP以大量开源类库为基础,代码质量不能保证完全可控制。

Vcl for PHP无法对其使用的开源类库的代码作统一的质量控制,所以我对这样一个工具执怀疑态度。我喜欢程序的每一部份都是“可控”的,过多的封装和过多的依赖其它第三方类库让我对其内部产生不信任。

当然,Vcl for PHP作为开源项目才诞生一个月,还有很大发展空间,让我们过段时间再来关注一下,也许到时会有惊喜出现。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1666
14
CakePHP 教程
1425
52
Laravel 教程
1324
25
PHP教程
1272
29
C# 教程
1251
24
PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

See all articles