2007-07-03 23:28:53 by 番茄红了鸡零狗碎
由于ZF1.0的发布,导致最近与某些人在在PHPChina上大打口水战,很是不爽。
今天在看某一论坛XX人的解答时,发现了不少个人认为是解答错误的地方,特来指出一二,如果觉得我说得有错的,欢迎指教。
另外也针对一下XX人一直认为“特别”优秀的框架做一些简单的对比。
1、关于Join会降低效率,使用“递归关联查询”提高效率
参考:http://www.fleaphp.org/bbs/viewt … p;extra=page%3D1### 四楼
1、不同对象的职责更明确;
2、尽量减少不必要的 join,显著提高查询效率;
3、可以在递归关联查询时,获得更多的灵活性。
1、首先我不明白什么是“递归关联查询”,我搜篇了Google没发现有这个名词,估计乃XX人所独创,实在是强。
2、如果“递归关联查询”是指“递归查询”的话,不知道有谁听过“递归关联查询”比JOIN更快的方法。
3、从来只听说过使用JOIN的方法来提高查询效率,生平第一次听说JOIN会使效率降低,实在感叹自己像XX人所说“井底之蛙”,不知道XX人是否知道什么叫做笛卡尔乘积?
一些参考:http://dev.mysql.com/doc/refman/ … t-join-optimization
http://edu.cnzz.cn/NewsInfo/29612.aspx
4、至于说到JOIN在查询大量数据时会降低效率,这不能说明什么,只用一个select查询表和多表关联查询时能快多少?
不知道有没有谁的项目是会在一个页面中显示上百条记录的数据的,我想很少,那么这个效率已经缩小了。
5、JOIN真的会慢很多吗?
当JOIN的驱动表(应该是一个结果集比较小的表)对另一个表做查询时,表中最多只有一行匹配的记录,它在查询一开始的时候就会被读取出来。 由于只有一行记录,在余下的优化程序里该行记录的字段值可以被当作是一个恒定值。MySQL在查询时做一个 LEFT/RIGHT JOIN 优化时,当它在当前表中找到了和前一条记录符合 LEFT JOIN 条件后,就不再搜索更多的记录了。
由上可见,当驱动表较小的时候,使用JOIN做查询的时候,是会超过其他的方式的(当然不包括单表的SELECT)。当然JOIN确实也是会降低效率的,因为他要花很多的功夫在对数据的排序操作上,但当驱动表变小的时候,这一性能上的消耗几乎可以忽略不计。除非有人硬是要在一个页面上取出成百上千条记录,但我想这个时候要还没建视图,我想这家伙也够笨了,如果有人认为还有比视图查询更快速的查询方法,麻烦提出来,其实JOIN不就是一个逻辑上的视图吗?
2、建议手写 SQL 作为 $conditions,这样效率非常高,而且再复杂的条件都可以使用
参考:http://www.fleaphp.org/bbs/viewt … &extra=page%3D1
1、这是一个多么幼稚建议啊,稍稍复杂一点就要都手写SQL语句了,那我还要框架干嘛呢?
殊不知被人称为丑陋的 Zend_Db_Select 在这上面就非常好用,添加几段类似如下的代码,由ZF本身对几个字符串组合一下就能生成正确的SQL语句,这样已经大大减少了写SQL语句的工作,对于一个项目来说,少写许多SQL语句对于开发效率来说会是一个多大的提升啊。
(PS:不知道是不是因为ZF要组织一下字符串生成SQL,而使某人觉得这样消耗了性能还是其他,如果是这样我也无话可说了)
$select = $db->select();
$select->from(….)
->where(….)
->where(….)
->where(….)
…;
看上面的代码,多么容易阅读和扩展啊?居然有人说这是垃圾,真搞不懂,哎~~~
3、可以给 $dbo 增加两个属性:activeDb 和 defaultDb,分别指示当前操作的数据库和该 $dbo 原本要操作的 数据库
参考:http://www.fleaphp.org/bbs/viewt … &extra=page%3D1
不知道XX人听说过 Database Schema 这个东西没有,我很庆幸我正在使用中的 Zend Framework 提供了这个功能,非常方便且好用,至少不需要像XX人提出的建立多个连接来进行操作了。
(PS:我之前在某文中提到的框架局限性中非常严重的包括了这一部分的问题)
总结:看了看XX框架的代码,看了看某人对数据库的了解,感觉这个框架在DB这方面的设计思路上似乎有些问题,可能效率不是很好,不过还没做数据测试,暂时不下定论,明天抽个时间做个测试吧。另外,XX框架号称支持Oracle,殊不知在Oracle中根本没法使用,因为作者似乎不知道 Database Schema 是一个非常重要的东西,相信框架的作者并没有在Oracle上做太多的测试就发布了,让人用起来有点心惊胆战的。
2007-06-12 21:36:17 by 番茄红了鸡零狗碎
恰好这一天是星星的生日,中午和阿标、macoo、frank几个人小聚祝星星生日快乐,然后一帮人去超市买些东西为下午的烧烤做准备。
老天爷很争气,下了好多天雨的广州突然不下雨了。
只可惜最近身边的朋友似乎都不怎么走运,一住深圳布吉的同事家里被盗,损失了近2万多元,最惨的是几年积累下来的代码全都丢失,这个损失是无法估计的。在从深圳去广州的路上,同事macoo居然把钱包弄丢了,损失了500多元还有许多的证件和银行卡,包括身份证… 我只能同情一下了,各位出门在外的朋友也要小心一下。



点击这里查看更多聚会照片…
2007-06-05 17:21:12 by 鸡零狗碎
6月3日,公司全体开发人员+股东及家属一起到大鹏湾游玩,天气非常晴朗,非常清爽,海水也非常蓝,上午9点半出发,在一个滨海的小村庄里吃了午饭后就径直前往海滩边上。
由于这里是个半岛,海水也变得非常咸,大家在游泳的时候都被呛到不行。其实大家都拍了不少照片,但是我的由于蓝牙坏了,无法导出手机中的照片,因此照片的数量也比较有限,不过也已经够了。
要查看更多的照片可以点击这里,查看到我的相册。

9点半出发,一小时后看到了大海,但这里不是我们的目的地

远远的看到,大海很蓝很蓝,天空很晴朗,这是一个好天气

12点左右终于到达目的地,这里人不是很多。这里相对比较偏僻,人也比较少,查看地图后知道这里是个半岛,比较靠近海中心,因此海水也相对咸很多,大家也都有点不太适应,我也被呛得可以,喝了好多海水
2007-06-04 23:15:24 by 番茄红了鸡零狗碎
被BS了一段时间,终于换WordPress了,作为一个PHP程序员一直在使用ASP的博客,大家都有话说,其实是大家不清楚我为什么一直在使用PJBLOG
我的程序生涯应该可以说是从PJBLOG开始的,那时我还只是网络管理员,每天沉迷在路由、交换、ISA、服务器中。虽然之前也学过一些ASP和PHP,但都是很入门的级别。
刚开始使用的第一个BLOG程序是L-Blog,使用一段时间发现PJBLOG,感觉是一个很不错的BLOG程序,于是开始研究PJBLOG,并且加入了很久以前的PJBLOG开发团队,很多的朋友都不知道有这样一个团队。于是整天漫迹于PJBLOG的论坛、QQ群,认识了诸如虫虫、老鼠、鲸鱼叔叔等等的好朋友,也制作一些BLOG风格、插件,写了些教程,给我的博客也带来了不少的人气,最高的时候曾达到了日IP 1600多,PV达到6000多。最让我感激的则应该是舜子,在这些过程中,他一直是无私奉献的,同时也教会了我不少的东西,在这里对舜子说声“谢谢了”。
后来由于工作的关系,玩BLOG的时间也少了,经常一个月才2~3篇日志,加我QQ向我请教问题的网友被我大量拒绝,BLOG上的留言回复越来越少,我的BLOG于是变成了一个荒芜之地。去年11份不知为什么Baidu拒绝了对我的BLOG的收录,从那时候开始,人气开始急剧下降,尽管后来重新被Baidu收录,而且网站PR也升到了5,但最高也只达到了日PV3000左右。加上在先前的公司工作太忙,经常加班到晚上2~3点,甚至周未也被工作所霸占,更没有时间更新BLOG,人气越来越低,自己也没有了继续更新BLOG的习惯和兴趣。
但是对自己的BLOG已经产生了很浓厚的感情,因为通过BLOG,我认识了不少的朋友,放弃BLOG的同时,也将让我放弃不少的好朋友,这是我所不愿意的。只不过这里将来只会成为一个主要以记录个人生活、学习经验为主的BLOG。
下面记录一些历史:
2005年3月XX日,开始在博客中国写个人日志
2005年6月24日,开始由博客中国改为L-Blog,使用 57dtc.com 的域名和空间(这个空间和域名都是朋友的)
2005年8月19日,升级BLOG程序为PJBLOG,开始了PJBLOG之旅
2005年8月23日,收到同学心跳的提前生日礼物,tblog.com.cn的域名及空间,开始使用新域名
2005年9月7日,发布个人第一个BLOG皮肤,之后陆续发布了不少的皮肤
2005年10月21日,发布PJBLOG皮肤视频教程,虽然现在看来很烂,但是受到了广大网友的支持,BLOG流量开始提高,同时Baidu搜索关键字BLOG排到了第一页
2005年12月底,辞掉轻松的网络管理员职务,回家闭关修炼ASP、PHP、.Net
2006年2月12日,开始修改发布第一个PJBLOG的相关程序
2006年3月18日,开始写第一篇教程,于是带来了空前的人气
2006年4月15日,闭关结束,前往广州工作,BLOG更新开始减少,但人气不减
2006年6月底,因为工作太轻松而且受北京读秀网络邀请而辞职,但后又因为一些原因放弃了去北京工作,同时进入广州多迪网络工作,BLOG更新越来越少
2006年8月,担任多迪网络技术部经理,个人时间越来越少,同时辞去PJBLOG论坛版主,BLOG更新接近停止状态
2006年10月,加入广州PEA,终于找到了组织并经常参加活动
2006年11月,Baidu拒绝收录本站,网站流量开始下降
2007年4月,由于与公司领导发生意见冲突,我连同多个部门经理同时辞职,结束了半年多的加班生活,同时开始成为一个自由职业者,并少量更新BLOG日志
2007年5月18日,与现任同事Macoo接触后决定前往深圳发展,开始新的职业新的生活,结束自由职业者
2007年6月,也就是现在了,更换BLOG程序了为WordPress
我现在的环境还算不错,不用再每天熬夜加班,并且有一大帮有着相同爱好的同事一起工作,一起探讨技术。祝自己工作顺利,我将继续更新BLOG,但我不再把更新BLOG做为自己的责任。
2007-06-02 23:02:43 by 番茄红了鸡零狗碎
终于,星星过来带领我们的团队了,心里那个高兴~
前些天,对FleaPHP做了许多的测试,结果在与Oracle的搭配上非常糟糕,刚使用CRUD建立数据库连接时就发现了一个重大的错误,让我对FleaPHP失去了很大的信心。
FleaPHP借鉴了大量的ROR的思想,因此也使得框架本身太过于依赖数据库,但对于Oracle的支持偏偏又太弱。加上FleaPHP本身开发团队人员有限,相信在Oracle的驱动上并没有做过太多的测试,让大家都不太敢信任。
目前FleaPHP的版本为1.0.7.0版,虽然说支持国货,但大家谁也不敢拿公司的项目来开玩笑。如果不是Oracle的原因,FleaPHP的CRUD还是很好用的,希望将来的版本能够把对Oracle的支持处理得更好。
之前放弃Zend Framework换成FleaPHP的主要两个原因:
ZF版本没有正式版,不过前些天刚发布了1.0.0 RC1,似乎1.0.0 RC2又快要发布了;
ZF版本升级的文件改变太大,今天看RC2版的时候似乎又去掉了几个包,其中就有Zend_Config,不过也惊喜的发现也添加了Zend_Db_Adapter_Oracle,不知道是不是那么回事,全是E英,也没看太明白,感觉改动太大了,网址在这里:http://framework.zend.com/issues/browse/ZF
ZF的ACL模块让大家感觉上手似乎很麻烦,而且有太多的文档没有被翻译,大家的英文能力也都有限,不过这次星星过来,这个问题也就解决了,呵~~
还有很多,小问题就不说了…
换ZF也是没有选择的选择了,希望接下来的项目中不会给我们带来太多的麻烦,写到这里,继续看ZF的文档去了
2007-05-29 01:45:50 by 番茄红了鸡零狗碎
非常高兴的是,星星今天已经从德国归来并第一时间赶到深圳。呵呵,他说德国的农村很不错,我等也只有干瞧着羡慕的份了,听他说异国的风情确实是一件高兴的事情。
到新的公司,已经快两周了,这些时间一直在做些项目分析和开发环境的确定。
加上今天星星大神给我们的分析,已经基本上决定抛弃了使用ZF框架和项目模块并行的做法,三个月一个六人的团队完成一个门户网确实是一项极具挑战性的工作。
可以肯定的一点,在这之前团队中可能没有任何敢打保票完成任务,但今天星星的归来无疑给我们带来了更多的希望。
他给我们分析的PHP和Oracle的组合,加上目前许多开发框架对Oracle的支持物质,以及可能出现的各种问题,让我突然觉得自己的项目知识还太浅薄了,一番提醒,让整个团队的人都发现了事态的严重性。
虽然公司股东们决定让我作为项目经理来带动团队,但我始终觉得自己只适合组织文档和项目进度规划这些工作。非常希望星星这次能确定下来,带领我们的团队,这样我们的团队就有希望了,哈哈。
目前开发环境如下:
服务器环境:PHP 5.2.2 / Apache 2.5.8 / Windows 2003 (暂定为Windows,因为没有专业的Linux维护人员)
数据库版本:Oracle 10g
PHP开发框架:FleaPHP
之前团队讨论过太多框架的对比,但始终没找到最合适的,FleaPHP算是比较接近需要的一个吧,可惜对Oracle的支持太弱了,需要重新编写扩展。
团队中包括星星对Oracle的了解也都严重不足,看来大家都得恶补一下Oracle了,幸好有个专业的DBA。
开发团队也介绍一下吧,哈哈,如果星星加入我们的团队就NB了:
星星 - - 不用多说了,我目前在广州所过见的PHPer技术最牛的,技术和项目经验都比较全面
小路 - - 全国PEA组织的首个发起者,技术也是没得说的
小潘 - - JAVA程序员,非常优秀的DBA
macoo - - 一个既敬业又内向的PHP程序员,同时也是ROR的狂热爱好者
aaxron — jQuery中国社区版主,负责前台页面及JS部分,前台页面及WEB标准我们就不用担心了
最后就是我番茄了,呵呵,最菜菜的一个,加入这样的团队是我的荣幸。
星星,等你六一的归来,六一快乐~
2007-05-27 13:55:10 by 番茄红了鸡零狗碎
今天同时收到两封邮件,哈~~淘宝和易趣发过来的内容居然是如此的相同,不知道是谁学谁的。


2007-05-26 00:13:47 by 番茄红了鸡零狗碎
前段时间在用google map api的函数库的时候,发现里面的downloadUrl函数非常好用,所以自己写了一个。用腻了那些什么框架什么池,到头来发现越简单的东西越是适合我这种懒人。
downloadUrl(url, callback, data);
参数说明:
url不用说了;
callback是回调函数,函数调用的时候会有两个参数:data, responseCode,data就是responseText,responseCode就是status;
data是要post的数据,get方式时此参数可省略。
用法一:直接把回调函输写在参数中
downloadUrl(’http://www.ugia.cn/wp-data/test.htm’, function (data, responseCode) {
alert(data); // 这里处理返回的数据
});
用法二:先定义回调函数,然后传入
function test(data, responseCode) {
alert(data); // 这里处理返回的数据
}
downloadUrl(’http://www.ugia.cn/wp-data/test.htm’, test);
源代码:
/**
* download url lite
*
* @author: legend(legendsky@hotmail.com)
* @link: http://www.ugia.cn/?p=122
* @version: 1.0
*
* @param string url
* @param string callback 回调函数
* @param string data post数据
*
* @return void
*/
function downloadUrl(url, callback, data)
{
// init
url += url.indexOf("?") >= 0 ? "&" : "?";
url += "random_download_url=" + Math.random();
if (typeof data == 'undefined')
{
var data = null;
}
method = data ? 'POST' : 'GET';
// create XMLHttpRequest object
if (window.XMLHttpRequest) {
var objXMLHttpRequest = new XMLHttpRequest();
} else {
var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for(var n = 0; n < MSXML.length; n ++) {
try {
var objXMLHttpRequest = new ActiveXObject(MSXML[n]);
break;
} catch(e) {}
}
}
// send request
with(objXMLHttpRequest) {
//setTimeouts(30*1000,30*1000,30*1000,30*60*1000);
try {
open(method, url, true);
if (method == 'POST')
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
send(data);
} catch(e) { alert(e);}
// on ready
onreadystatechange = function() {
if (objXMLHttpRequest.readyState == 4) {
callback(objXMLHttpRequest.responseText, objXMLHttpRequest.status);
delete(objXMLHttpRequest);
}
}
}
}
2007-05-18 22:36:46 by 番茄红了鸡零狗碎
今天中午12点半,终于安全到达深圳~
一路上把我累死了,因为我是从广州一直站到深圳的。从来没有带过这么多行李,虽然上车钱已经处理掉一半的东西,可还是有一大箱,包括电脑、低音炮(比电脑还重)、液显…想不到我居然这么历害,能带这么多东西上路。为了不影响其他乘客,我选择了自己一直站到深圳~~
还好新同事Macoo到火车站来接我,免了很多麻烦~
花了几个小时安顿好,下午和公司老板见了个面,一起吃了个饭。想不到老板居然也是如此牛的人,于是对这个项目也信心十足,虽然项目时间很紧,用我自己的话说就是 — 非常有挑战性。
顺便在自己的BLOG里帮公司招聘一下PHP开发人员,有意者请联系QQ:532136411。
这里环境很不错,是我喜欢的类型,大家在一栋公寓里,随时工作随时休息。
今天一过来就认识了jQuery中国社区的版主,真是幸会,我相信自己会在这里过得更好~~