<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[关于perl和php在建网站方面的比较（转过来的，觉得写的很好），效率等]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Wed, 13 Oct 2010 15:24:13 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>1．数据库的操作：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perl对多种数据库操作都方法一样，且操作极其方便，简单，并且能够直接得到对数据库的操作结果。<br/>Php对不同数据库操作方法不同，需要调用不同函数，且不能直接得到对数据库的操作结果。<br/>Mod_perl对ORACLE数据库的访问速度快，在数据库访问速度上快于php。<br/><br/>2．Perl语言历史较长，在网上有很多的共享资源，实现各种功能的成熟的函数包内容丰富，性能稳定，经过了长期的测试，php的共<br/><br/>享资源没有perl丰富，因此在扩展性上不如perl.<br/>Perl语言更能实现程序的模块化，面向对象，利于长期开发和大型网站，随着开发的深入，能够写出高效率的代码，代码的重用性高<br/><br/>，有利于后续版本的开发。<br/>Php的嵌入式语言结构决定了它在代码重用和模块化管理上不如perl，它适用于短期的快速开发，但随着开发的深入，它比不过perl.<br/>C语言也有很长的历史，但它不支持面向对象。<br/>Java支持面向对象，优点很多，但限于目前的人力和能力，暂时无法使用。<br/><br/>3．在代码执行速度上，mod_perl与FastCGI采取了更好的解决方案，页面下载速度大为提高，并不次于php，优秀的函数包和访问率<br/><br/>高的页面可以采用驻留内存的方法。需要强调的是页面的下载速度是与多种因素有关的，如果采用模块化的编程，精简代码，速度怎<br/><br/>么会慢？只有效率不高的代码速度才会慢。<br/>比较起来C和Java在执行速度上才具备真正的优势。<br/>C也属于CGI脚本范畴，由perl向C语言转化比较容易，很多网站都采用这样的方式。<br/><br/>4．Perl的安装也更简单，perl是apache自带的，说明它们的结合更紧密，php需要自行安装。<br/><br/>5.放眼现在，国外真正优秀的门户网站都是用CGI编程，速度不慢，因为硬件设备是决定速度的关键。着眼未来，perl是一种稳定的<br/><br/>，扩展性强的，利于长期开发的语言，使用perl不会错。<br/><br/><br/>Perl、PHP、ASP、JSP技术比较<br/><br/>　　本文将对目前最常用的四种动态网页语言Perl（Practical Extraction and Report Language）、PHP（Hypertext<br/><br/>Preprocessor）、ASP（Active Server Pages）、JSP（JavaServer Pages）进行一些技术性的比较。<br/><br/>　　Perl<br/><br/>　　Perl（Practical Extraction and Report Language）是一种很古老的脚本语言。最初的Web应用大多是用Perl编写的，Perl很<br/><br/>像C语言，使用非常灵活，对于文件操作和处理具有和C语言一样的方便快捷。<br/><br/>　　也正是因为Perl的灵活性和“过度”的冗余语法，也因此导致许多Perl程序的代码令人难以阅读和维护，因此使用的人在逐渐减<br/><br/>少，并且目前有被Python替代的可能。<br/><br/>　　另外Perl对于CPU的消耗似乎较高，效率似乎有一些不足。<br/><br/>　　Perl开发的成功案例：<br/><br/>　　Movable Type — 世界上使用最多的Blog系统之一，功能强大的足以和一个CMS系统相比拟。<br/><br/>　　Awstats — 非常经典的日志系统，速度极快，功能也非常强大。<br/><br/>　　结论：Perl在部分应用中能发挥很大优势，但其维护性差使得其普及变得很困难。<br/><br/>　　PHP<br/><br/>　　PHP（Hypertext Preprocessor）是一种嵌入HTML页面中的脚本语言。它大量地借用C和Perl语言的语法， 并结合PHP自己的特性<br/><br/>，使Web开发者能够快速地写出动态产生页面。<br/><br/>　　PHP是完全免费的开源产品，不用花钱，Apache和MYSQL也是用样免费开源，在国外非常流行，PHP和MYSQL搭配使用，可以非常快<br/><br/>速的搭建一套不错的动态网站系统，因此国外大多数主机系统都配有免费的APACHE＋PHP＋MYSQL。通常认为这种搭配的执行效率比<br/><br/>IIS＋ASP＋ACCESS要高，而后者的使用还必须另外交钱给微软。<br/><br/>　　PHP的语法和Perl很相似，但是PHP所包含的函数却远远多于Perl，PHP没有命名空间，编程时候必须努力避免模块的名称冲突。<br/><br/>一个开源的语言虽然需要简单的语法和丰富的函数，但PHP内部结构的天生缺陷导致了PHP不适合于编写比中小型业余网站更大的网站<br/><br/>。<br/><br/>　　PHP开发的成功案例：<br/><br/>　　MediaWiki — 著名的维基百科（Wiki）程序，如此庞大的条目居然只用PHP＋MYSQL就能够支持，真是不可思议。<br/><br/>　　WordPress — 著名的Blog系统，功能上丝毫不输于Movable Type，不少用户都纷纷从Movable Type转移到了WordPress。<br/><br/>　　结论：PHP语法简单，非常易学易用，很利于快速开发各种功能不同的定制网站，PHP因为结构上的缺陷，使的PHP在复杂的大型<br/><br/>项目上的开发和维护都比较困难。<br/><br/>　　ASP<br/><br/>　　 ASP（Active Server Pages）微软的Windows IIS系统自带的脚本语言，利用它可以执行动态的Web服务应用程序。ASP的语法非<br/><br/>常类似Visual BASIC，学过VB的人可以很快上手，ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的<br/><br/>一个不能很好支持跨平台的语言。<br/><br/>　　因为ASP脚本语言非常简单，因此其代码也简单易懂，结合HTML代码，可快速地完成网站的应用程序。<br/><br/>　　ASP在国内异常流行，因为国内大多使用的是盗版的Windows和盗版的SQLServer，而ASP＋COM＋SQLServer实际上也是一种不错的<br/><br/>搭配，其性能也不输于PHP+MYSQL，特别是Windows系统和SQLServer都有图形界面，比APACHE和MYSQL易于维护，因此对于不重视知识<br/><br/>产权的国家来说也是一种不错的选择。<br/><br/>　　不过，正因为ASP很简单，所以单纯使用ASP所能完成的功能也是有限的，好在COM（Component Object Model）技术拯救了ASP，<br/><br/>微软提供了COM/DCOM技术，极大拓宽了ASP的应用范围，使得ASP几乎具有无限可扩充性。<br/><br/>　　结论：和PHP一样，ASP简单而易于维护，很适合小型网站应用，通过DCOM和MTS技术，ASP甚至还可以完成小规模的企业应用，但<br/><br/>ASP的致命缺点就是不支持跨平台的系统，在大型项目开发和维护上非常困难。<br/><br/>　　JSP<br/><br/>　　JSP（JavaServer Pages）是Sun公司推出的一种动态网页技术。JSP技术是以Java语言作为脚本语言的，熟悉JAVA语言的人可以<br/><br/>很快上手。<br/><br/>　　JSP本身虽然也是脚本语言，但是却和PHP、ASP有着本质的区别。PHP和ASP都是由语言引擎解释执行程序代码，而JSP代码却被编<br/><br/>译成Servlet并由Java虚拟机执行，这种编译操作仅在对JSP页面的第一次请求时发生。因此普遍认为JSP的执行效率比PHP和ASP都高<br/><br/>。<br/><br/>　　JSP是一种服务器端的脚本语言，最大的好处就是开发效率较高，JSP可以使用JavaBeans或者EJB（Enterprise JavaBeans）来执<br/><br/>行应用程序所要求的更为复杂的处理，但是这种网站架构因为其业务规则代码与页面代码混为一团，不利于维护，因此并不适应大型<br/><br/>应用的要求，取而代之的是基于MVC的Web架构。MVC的核心思想是将应用分为模型、视图和控制器三部分。模型是指应用程序的数据<br/><br/>，以及对这些数据的操作；视图是指用户界面；控制器负责用户界面和程序数据之间的同步。通过MVC的Web架构，可以弱化各个部分<br/><br/>的耦合关系，并将业务逻辑处理与页面以及数据分离开来，这样当其中一个模块的代码发生改变时，并不影响其他模块的正常运行，<br/><br/>所以基于MVC的Web架构更适应于大型应用开发的潮流。<br/><br/>　　因此，不少国外的大型企业系统和商务系统都使用以上的MVC架构，能够支持高度复杂的基于Web的大型应用。<br/><br/>　　结论：JSP对于网站开发来讲不像PHP和ASP那样易学易用，支持JAVA的主机也少于支持PHP的主机，这从一定程度上限制了Java技<br/><br/>术在网站上的发展，不过在企业软件应用上来讲，MVC还是拥有相当大的优势的，虽然其配置和部署相对其他脚本语言来说要复杂一<br/><br/>些，但对于跨平台的中大型企业应用系统来讲，基于JAVA技术的MVC架构几乎成为唯一的选择。<br/><br/><br/>周偶然与fcicq讨论到一个关于perlcc的优化问题。据说用perlcc将perl程序编译成C程序后再用gcc -O3进行优化，速度可能会快一些。于是就测了测，顺便试了试其他语言的情况。<br/><br/>测试程序是Ackermann函数。也许用它来做benchmark不太合适，但毕竟这是个纯数学+多次递归+耗时的运算，也能反映一定问题吧。<br/><br/>先来看Perl的原版。<br/><br/><br/><div class="code">$ cat ack.pl<br/>#!/usr/bin/perl<br/><br/>sub ackermann &#123;<br/>&nbsp;&nbsp;my ( $m, $n ) = @_;<br/><br/>&nbsp;&nbsp;return $n + 1 if $m == 0;<br/>&nbsp;&nbsp;return ackermann( $m - 1, 1 ) if $n == 0;<br/>&nbsp;&nbsp;return ackermann( $m - 1, ackermann( $m, $n - 1 ) );<br/>&#125;<br/><br/>print ackermann( 3, 10 ), &quot;&#92;n&quot;;</div><br/>$ time ./ack.pl<br/>8189<br/><br/>real&nbsp;&nbsp;&nbsp;&nbsp;1m5.044s<br/>user&nbsp;&nbsp;&nbsp;&nbsp;1m4.412s<br/>sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.620s结果约为65秒。然后用perlcc编译并gcc -O3优化试试：<br/><br/>$ cp /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/DynaLoader/DynaLoader.a .<br/>$ ar xv DynaLoader.a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# 先弄个必要的DynaLoader.o否则会连接错误<br/>$ perl -c -o ack-perlcc.c ack.pl<br/>$ gcc -O3 -c -o ack-perlcc.o `perl -MExtUtils::Embed -e ccopts` ack-perlcc.c<br/>$ gcc -o ack-perlcc `perl -MExtUtils::Embed -e ldopts` DynaLoader.o ack-perlcc.o<br/>$ time ./ack-perlcc<br/>8189<br/>real&nbsp;&nbsp;&nbsp;&nbsp;1m3.487s<br/>user&nbsp;&nbsp;&nbsp;&nbsp;1m3.012s<br/>sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.484s用了63秒，跟perl是同一数量级的。可见这个perlcc之后没什么效果。<br/><br/>遗憾之余顺手写了个纯C版本：<br/><br/>$ cat myack.c<br/><br/><div class="code">#include &lt;stdio.h&gt;<br/><br/>int ackermann(int m, int n);<br/><br/>int main() &#123;<br/>&nbsp;&nbsp;int result = ackermann(3, 10);<br/>&nbsp;&nbsp;printf(&quot;%d&#92;n&quot;, result);<br/>&nbsp;&nbsp;return 0;<br/>&#125;<br/><br/>int ackermann(int m, int n) &#123;<br/>&nbsp;&nbsp;if (m == 0) return n+1;<br/>&nbsp;&nbsp;if (n == 0) return ackermann(m-1, 1);<br/>&nbsp;&nbsp;return ackermann(m-1, ackermann(m, n-1));<br/>&#125;</div><br/>$ gcc -O3 -o myack myack.c<br/>$ time ./myack<br/>8189<br/><br/>real&nbsp;&nbsp;&nbsp;&nbsp;0m0.231s<br/>user&nbsp;&nbsp;&nbsp;&nbsp;0m0.228s<br/>sys&nbsp;&nbsp;&nbsp;&nbsp; 0m0.004s哇！0.23秒，比perl语言快了280倍以上。看来谈到效率时果然C语言才是王道。也难怪为什么C程序员的待遇那么高了。<br/><br/>当然这个程序是纯粹的数学运算，发挥不出perl的长处，才会让perl效率如此低吧。<br/><br/>PHP也有同样的问题。还是这个Ackermann函数，用纯PHP写出来的效率很低，但如果将函数写成php extension再调用，效率几乎等同于C语言的效率。于是得出个结论，复杂的算法还是不要用PHP直接实现，而是写成extension吧。<br/><br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 关于perl和php在建网站方面的比较（转过来的，觉得写的很好），效率等]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>