Demo/Download请猛击 -> http://www.raychou.com/demo/jquery-rater/
Archive for the ‘程序开发’ Category
PHP autoload与include性能比较
自PHP5后,官方大大丰富了对面向对象的支持,其中有个重要改变:引入了__autoload()函数,从此不再需要在php脚本的header写一堆的require或include了,用PHP函数手册中的话说:”它会在试图使用尚未被定义的类时自动调用”。
这一机制大大减轻了开发人员的负担,只要在架构初期考虑好了目录结构和命名规范,在开发过程中,需要再为代码中要用到的类分别去require相应的文件,减少了大量代码。
但这样一来,也容易出现运行一个程序,某个类文件被include多次,例如有以下四个脚本:
#file:include1.php include 'include2.php'; //@todo something
#file:include2.php //@todo something
#file:script1.php include 'include2.php'; //@todo something
#file:script2.php include 'include1.php'; include 'script1.php' //@todo something
当执行script1.php时, include ‘include2.php’; 这行代码被执行了一次。而执行script2.php时,这行代码被执行了两次。
这里只是一个简单的例子,在实际的项目中,include2.php被include的次数可能更多。这样反复的include,是否会影响性能呢?为此我写了个脚本来测试。
#file:SimpleClass.php class SimpleClass { public function __construct() { echo get_time() . "rn"; } }
#file:php_include.php for($i = 0;$i < $loop;$i++) { include_once "SimpleClass.php"; new SimpleClass(); }
当$loop值为1时,脚本耗时约0.00018906593322754秒,当$loop为1000时,脚本耗时约0.076701879501343秒。
如果我们用autoload实现呢?
#file:php_autoload.php function __autoload($class_name) { include_once $class_name . '.php'; } for($i = 0;$i < $loop;$i++) { new SimpleClass(); }
在这段代码中,我定义了__autoload函数,几乎一样的脚本,当$loop为1时,耗时0.0002131462097168秒,而当$loop为1000时,耗时仅为前面代码的1/7,0.012391805648804秒。
但请注意看SimpleClass的代码,其中输出了一行字符串,如果去掉这行输出后再比较,会是什么样的结果呢?
在$loop同为1000的情况下,前者耗时0.057836055755615秒,而使用了autoload后,仅仅0.00199294090271秒!效率相差近30倍!
从上面的测试可以看出,当文件仅仅被include一次,autoload会消耗稍微多一点的时间,但如果在文件被反复include的情况下,使用autoload则能大大提高系统性能。
至于是否要使用autoload来解放程序员,这就仁者见仁,智者见智了。在我看来,条件允许的前提下,牺牲这一点性能(某些情况下,可能是提升性能),换来更为便捷的开发,是值得的。
附:本文测试脚本下载
天气预报V2隆重上线测试
当初做RSS天气预报纯属兴趣,完全没有想到提供服务后如此受欢迎,在2008一年时间内,访问量超过千万,平均每日4万多次。这套系统完全没有做过任何宣传,仅仅靠网友们的口碑相传就能达到这么多的访问量,远远超过我的意料之外。另外据我简单的来源统计,至少有3-4款手机客户端软件使用了raychou的RSS作为数据源。
raychou.com里和天气预报程序有关的文章:
网络/网友相关介绍
程序发布2年多,期间重写过一次,再应网友要求增加了ICAL输出,但当时由于GG日历对于外部ICAL中文支持的问题,一直无法在GG日历中完美显示中文,很长一段时间内都是以拼音代替中文输出,以满足网友们利用Google日历的免费短信提醒功能接受天气预报。这一问题在新版系统中也终于得到解决。

随着访问量的上升,以及众多网友在Blog上留言对现有系统的各种不满,利用周末的时间重写了全部代码,并于今天正式对外测试(新版系统网址:http://weather.raychou.com)。新的架构实现了多数据源采集,多格式输出,能够非常方便的进行输出源的扩展,目前已完成RSS和ICAL格式的输出,计划中还有HTML,WAP,Mobile,iPhone等输出格式以满足各类网友的需求。

希望使用老版数据源的用户尽快转到新版,针对v1,v2做了如下改进:
计划中要推出的功能
- widget,用户可在论坛签名档,blog侧边栏,网站首页等等区域调用代码,实现为访客显示当地天气预报
- 丰富的输出格式
更多功能期待您的建议,有任何想法欢迎联系我,联系方式请看这里
PS:一如既往,这套系统任然会提供免费下载,我将会第一时间在Blog公布。
UCHome二次开发规范 – 不同于Manyou的开发模式
注意:此文和UCHome的Manyou开发模式不同,Manyou是利用Discuz的开放平台MYOP开发公共插件,可供所有基于UCHome的网站使用;而此文涉及的开发模式与Manyou不同,是在本地开发,以插件的形式扩展UCHome原有功能。
UCHome是Discuz的一款SNS程序,能让每个网站都用拥有自己的Facebook/校内。Discuz也提供了MYOP开发者平台,所有开发者都可以在此平台上开发自己的应用程序供其他UCHome网站使用,不但可以为自己的网站增加功能,同时也能将自己网站的功能推广到数以万计的UCHome网站中,可谓一举两得。
有时候,开发者并不一定希望使用MYOP开发应用,一是由于产品的需要,并不希望开发出来的应用被其他网站使用;二者MYOP的开发,必须处理联网模式,不能本地开发,较为繁琐。因此,很多有能力的站长会在UCHome的基础之上,以修改UCHome代码的方式增加功能。
但UCHome发展速度很快,经常会有版本更新,往往这个时候,修改了UCHome源码的站长就会面临一个两难的问题:是升级程序?还是为了保留以往的修改,而不升级?在我看来,如果前期做好开发规范,是完全可以避免这个问题的。下面介绍一下我在UCHome Apps开发过程中的一些经验。
想要能够随着官方的程序发布实现平滑的代码升级,无非一点:尽量的少改UCHome原有代码。
少改,但不是不改。一点不改程序的源代码是不可能的。但如何能实现少改呢?我定制了了下面的一些规则:
MySQL分卷备份/导入工具
相信很多使用虚拟主机,没有SSH权限的站长们,最郁闷的一件事就是MySQL数据的备份和导入,几兆大小的数据文件还好说,但经常有动辄几十上百兆的数据需要导入导出,phpmyadmin可以方便的导出大量数据,但对于大文件的导入却无能为力。
下面推荐的一款”PHP版MySQL数据库分卷备份工具”,可以轻松胜任超大数据库的备份/导入工具,最重要的是,他可以分卷操作,并可以指定每个文件的大小。

需要输入密码验证才能进行操作

分卷备份

分卷导入,只要导入一个文件,会自动导入其余分卷
DotProject乱码处理
由于项目需要,最近在需找一个比较顺手的ProjectManagement工具,但因为硬件限制,只能基于LAMP平台,对比了几个产品后,最后敲定DotProject。
但很郁闷的是,在DotProject中输入的部分中文存入数据库后会变成乱码,解决的方法也很简单,SET NAMES UTF8:
编辑includes/db_adodb.php,找到下面这行代码:
$ADODB_FETCH_MODE=ADODB_FETCH_BOTH;
在其之前添加一行:
$db->Execute("SET NAMES UTF8");
轻量级表单验证插件 jQuery.Validation
表单验证是Web开发中最常见的流程,一般分为前端js验证,和后端服务器脚本验证两部分。前端js验证不是必须,但为了加强用户体验,却又往往是必不可少。但很多重复的表单验证却花去了开发人员大量宝贵时间,这个Validation插件已经做了一个月了,投入项目使用效果不错,特放上来与大家分享

目前有12种验证规则,分别为
| required | 必填 | |
| password | 密码 | |
| loginname | 登录名 | |
| 电子邮件 | ||
| phone | 固话 | |
| cellphone | 手机 | |
| zip | 邮编 | |
| numeric | 数字 | |
| idcard | 身份证 | |
| match | 是否匹配 | |
| unmatch | 是否不匹配 | |
$('input[@name=username]').validation({rule:'required'} , '登录名必填'); $('input[@name=cellphone]').validation({rule:'cellphone'} , '手机号码格式错误' , '格式:13912345678'); $('input[@name=email]').validation({rule:'email' , required:true} , 'EMail格式错误'); $('input[@name=password2]').validation({rule:'match' , el:'input[@name=password]'} , '两次密码不匹配');
更新 jQuery Rater Star Plugin
应网友要求,新增自定义起始值和自定义步长,请参照Demo8。
PS:今天做了件相当二的事情,到学校来忘记把笔记本的电源适配器带上。。。晕死,不过运气比较好的是,同学中有一台T61送修了,所以还可以临时蹭几天电源,嘿嘿~~
[转]Java在Web开发语言上败给了PHP
转自月光博客
PHP的主要语言开发者之一、Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言。他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java已经输掉了Web开发语言的战争,PHP是事实上的标准和胜利者。
Gutmans的这篇文章在技术界引发了强烈争议,很对人对此有不同的意见,我在这里就阐述一下我对PHP和Java两种语言的看法。
我早先曾经在《Perl、PHP、ASP、JSP技术比较》一文中对比过PHP和Java的异同,简而言之,PHP是一种解释执行的脚本语言,语法和C语言类似,易学易用,不懂电脑的非专业人员稍经学习也能使用PHP.而Java要先编译成Class文件,然后在Java虚拟机上执行,Java开发需要熟悉Java语法以及一些核心的架构,从而实现一种可复用的、跨平台的软件,Java比PHP要难学的多。
实际上,从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而JAVA可以实现多层架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP.实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择(微软.NET不支持跨平台),但是在于Web网站应用开发来讲,Java却面临着被PHP边缘化的危险,几乎所有的虚拟主机都支持PHP+MySQL,而支持Java的却少之又少,在资源上,网上有不计其数的PHP资源,很多著名的大型网站(例如Facebook、Mediawiki等)都是基于PHP的,而成功的Java网站却寥寥无几,这又是什么原因呢?
Java的理念是”一次编写,到处运行”,Java在应用框架底下的架构是无与伦比的,远胜过其他任何语言,Java的框架利于大型的协同编程开发,系统易维护、可复用性较好。而PHP很容易自学,让热备能快速简洁地编写代码,适合于快速开发,中小型应用系统,开发成本低。在调试、发布上,PHP也较Java简单。
理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持PHP的虚拟主机多如牛毛,使得用PHP开发一个网站比用Java开发一个网站要快得多,容易的多。Java所拥有的优点只适合传统的以软件项目为核心的开发模式,而PHP更适合于以客户为核心的SaaS的开发模式,因此,PHP目前在Web网站开发的优势完全是因为Web网站开发的特殊性而导致的,并非编程语言特性所决定。
因此,PHP在Web网站开发语言的战争中已经慢慢将Java抛在了后面,Java要想在Web网站开发上奋起直追,的确应该多听听Andi Gutmans的意见,彻底改变一下思路才行,否则两者的差距只能是越来越远。
另外,虽然在国际上LAMP(Linux+Apache+Mysql+Php)架构已经占领了统治地位,但是在中国国内还有一个怪胎,就是基于微软的Windows Server+IIS+SqlServer+ASP/ASP.NET的架构,从理论上说,微软的这一套架构也能实现不错的性能,只可惜Windows和SqlServer价格不菲,整个架构在性能上比起LAMP不仅没有什么优势,反而还有不少劣势,因此微软的这一套家伙在国际市场上吃不开。而国内使用微软盗版则可以忽略成本,而ASP的易学易用性不逊于PHP,甚至连IT外行都能够使用,因此在国内也有不小的市场。但是随着中国在保护知识产权方面的日趋完善,免费的LAMP依旧是未来的趋势。

