Archive for 二月, 2009

apache之mod_gzip压缩

Posted by 机器人 on 25th 二月 2009 in linux/server

yahoo前端开发工程师提出了14条优化网站性能的规则,其规则4就明确提出了应该将响应的数据进行压缩后,再传到客户端,这样将近压缩70%的数据内容,也就是100KB的页面如果经过压缩最终传输的内容只有30KB。

最近看了国内几大网站,特别是几大搜索引擎界面,均采取了对响应内容进行了压缩。

正好这段时间在做对首页界面的响应优化,先前我们的首页没有经过gzip压缩,所以原始大小有11KB,经过压缩后测试,响应内容减少到了4KB,压缩掉差不多64%,如果再对所有的CSS和JS进行压缩,最近响应内容会减少很多。

配置gzip的模块最终取决于apache的版本,在apache1.x的版本中,使用mod_gzip,而apache2.x则使用mod_deflate.
apache2.x压缩通过mod_deflate来进行,尽管该模块的名字是这样,但它实际上是使用gzip来进行压缩。

基于目前已经是2009年,服务器基本上都已升级至apache2.x,所以这里我们只说mod_defalte.
这个模块在2.x的版本中,就已经自带了,不像mod_gzip,不是apache自身的模块,所以只需要在编译apache时,加上

--enable-deflate

即可.
然后在apache配置文件中,添加

OutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript

意思是对html xml css 和javascript都进行压缩。
然后启动服务器即可。

明显mod_deflate的配置要比mod_gzip方便很多。

然后通过抓包工具或者firebug就能看见服务器的响应信息如下图

图中的
Content-Encoding gzip
则表明响应内容已经是通过gzip压缩过,也就是通过浏览器你们要通过gzip算法来解压数据。

机器人 2009-02-24 11:59 于 北京

如何查看服务器CPU是几核的

Posted by 机器人 on 20th 二月 2009 in linux/server

每个虚拟的CPU就有相应的目录来存放一个具体的参数信息。
那么在LINUX中,在/proc/acpi/processor目录下就为每个虚拟的CPU建立了一个文件夹。也就是说CPU是几核的,这个目录下就应该有几个文件夹。
依次为 CPU0 CPU1…
如下:

~@bash ls /proc/acpi/processor

查看具体CPU数

-bash-3.2$ ls -l /proc/acpi/processor/ | grep -v total | wc -l

为什么要查看CPU核数呢?因为在服务器监控预警程序中,系统的平均负载( load average)的数值和CPU数据有关系。

机器人 2009-02-20 14:23 于 北京

又可以充实下自己了

Posted by 机器人 on 18th 二月 2009 in mylife, 读书

昨天在豆瓣在逛,发现了两本不错的书。
高性能网站建设指南 》和《构建可扩展的Web站点》。前一本大致从前端技术讲怎么提高一个网站的性能,后一本则就从服务器以及系统构架方面来谈。
所以今天一上班就上卓越网去把这两本书给订了,由于急于阅读这两本书,所以选择了急件快送。我是上午10点左右订的,原则是是下午就应该送过来,可今天又又偏偏忘了带手机。在提交订单时,没有注意,后来修改订单时,还是没有注意手机那家里。后来去看订单已经打包,就不能修改联系方式了。
本来以为会直接送到公司,正好公司也有事,呆到晚上8点多也不见送来,9点多回到家,看手机有两未接电话,是一座机号,晚上6点左右打的,我想应该是送货的人想确定是否公司有人,见没人接,所以就没送过来。

明天应该会送过来,期待早点能阅读上。

机器人 2008-02-18 23:23 于 于 北京

命令行中,SVN的几点技巧

Posted by 机器人 on 13th 二月 2009 in linux/server

如果是在WINDOW中,使用SVN的客户端工具,这些技巧都算不上什么。但如果使用SVN命令来操作源码的版本,有些技巧可能你还不知道。下面就让我跟大家分享一下吧!

情况一:将项目中未加入版本控制的文件提交到版本库。

在使用WINDOW下的SVN客户端工具时,在提交一个项目的文件时,如果有未加入版本库的文件,这时可以先将未加入的文件选中,然后一起提交。

但在LINUX命令行中,如果一个项目中新创建了一个文件new.php,那么我们可以使用如下命令来进行版本的提交。

~@bash svn add new.php
~@bash svn ci -m=hqlong

但如果有多个文件时,我一直都是一个一个的添加。比如。有a.php,b.php,c.php.那么提交操作如下:

~@bash svn add a.php,b.php,c.php
~@bash ci -m=hqlong

一直以后,新添加的文件不多,所以也就没有注意这个。今天当我查看项目的版本状态时,发现很多文件都没有加入版本库,本想按照老方法一个一个的添加,但始终想着是否有另外一种方式,一次性全部提交。所以就请教了我的两位大学同学(小黑、杨煌)。答案如下:
将同一目录下的未加入版本库的文件提交到版本库。

~@bash svn add *

注意上面只是针对同一目录的文件,如果目录下还有目录,这时上面的命令提交就不行了。如果是二级目录的话。操作命令如下:

~@bash svn add */*

当然三目录依次类推。

~@bash svn add */*/*

那么如果里面有很多级目录,该怎么办呢?或者说根本不清楚究竟有多少级。
这时使用通配符“*”,来解决一切未知的答案。

~@bash svn add */**/*

注意上面第三个“*”,它代表了我们所担心的那个未知数。

情况二:更新或者提交源码时,不提交某一特定文件。

当很多人同时开发一个项目,项目的配置文件可能在不同的开发人员的机器上,会有不同。当每次更新整个项目时,希望更新全部的文件但除了配置文件以外。
又如配置文件为config.php.
这时我们可以使用正则来排除我们所不需要提交的代码。
提交代码命令如下

~@bash svn ci !(config.php) -m=hqlong

表示除了config.php以外的代码,都提交到版本库中。
更新代码命令如下

~@bash svn up !(config.php)

表示除了config.php的所有代码都更新。

上面是今天从两位同学那里学到的技巧,特此分享。

明天情人节,提前祝朋友们情人节快乐

机器人 2009-02-13 23:51 于 北京

iframe载入完成时的事件监听

Posted by 机器人 on 10th 二月 2009 in php/javascript

经常会遇到这样一种情况。
在iframe里嵌入另外一个页面时。如果iframe载入的页面响应较快,或许我们感觉不到页面载入的不同步,但试想,如果一个需要内嵌到iframe里的页面的响应很慢,这里会出现一种什么现象呢?这时将会出现所有页面已经载入完成,但在iframe元素处,将会出现空白,直到内嵌页面完成载入时,该空白处才会显示新载入的页面。
可想而知,一个页面如果长时间的空白,对于浏览者来说将意味着什么。
如果在内嵌页面未载入完成时,给出一种加载提示信息。如:“页面加载中”之类的,我想这对浏览页面用户来讲,将不再是煎熬,更是一种视觉上的享受。
为了实现这样的效果,一般会采用如下原理处理。
·iframe载入区域给出友好的提示信息。
·当iframe载入完成时,清空提示信息,而让iframe显示。
这些都比较容易,但现在的问题的关键是怎么监听iframe元素内的页面已经载入完成。
关键这个问题,一般来讲,会分两种情况的来讨论解决方案。
·同域的嵌套。最好是让子页面调用父页面的方法。
·如果是异域,但子页面无法修改,那么:在Firefox/Opera/Safari中,可以直接使用iframe onload事件;而在IE中,可以通过定时器测定子页面的document.readyState,或者使用iframe onreadystatechange事件计算该事件的响应。
1.同域嵌套。
parent.html

function ifrmLoaded() {
	// code here
}

sub.html

window.onload = function() {
	window.parent.ifrmLoaded();
}

有时候,为了防止自己的页面不被别人嵌套,可以采用如下方式解决:

if(window.parent!=window) window.parent.location="http://hqlong.com";
//or
if(window.top!=window) window.top.location="http://hqlong.com";

2.嵌套页面不能修改,或者异域嵌套。
2.1 Firefox/Opera/Safari中直接使用iframe onload事件

document.getElementById('ifrm').onload = function() {
	//here doc
}

2.2 在IE下,定时器测document.readyState或者注册iframe onreadystatechange事件
2.2.1 使用定时器

var oFrm = document.getElementById('ifrm');
var fmState=function(){
	var state=null;
	if(document.readyState){
		try{
			state=oFrm.document.readyState;
		}catch(e){state=null;}
		if(state=="complete" || !state) {
			onComplete();
			return;
		}
		window.setTimeout(fmState,10);
	}
};
//在改变src或者通过form target提交表单时,执行语句:
if(fmState.TimeoutInt) window.clearTimeout(fmState.timeoutInt);
fmState.timeoutInt = window.setTimeout(fmState,400);

2.2.2 使用iframe onreadystatechange事件

var oFrm = document.getElementById('ifrm');
oFrm.onreadystatechange = function() {
	if (this.readyState && this.readyState == 'complete') {
		onComplete();
	}
}

每当iframe加载页面,过程内会激活onreadystatechange事件三次,相应的状态分别是loading,interactive和complete,而最后一次才是complete.
3. 兼容Firefox/Opera/Safari/IE的处理方式。

var oFrm = document.getElementById('ifrm');
oFrm.onload = oFrm.onreadystatechange = function() {
     if (this.readyState && this.readyState != 'complete') return;
     else {
         onComplete();
     }

参考资料: http://yr.hk/article.asp?id=993

机器人 2009-02-10 15:10 于 北京

特10公交车设计的很人性化【图】

Posted by 机器人 on 8th 二月 2009 in mylife

今天突然发现T10公交车又换新车了。记得年前的时候还是奥运会前北京新进的两层豪华公交。虽然车的外观比较漂亮,但坐起来很难受,特别是做的时候比较长,感觉特别明显,车设计的不合理的几个地方大致有:
1.二楼高度不够。80%的人站着都会撅着头。
2.前后会座位间距太小。我每次坐着,两膝盖刚好顶着前面的靠背,两腿基本没有活动的空间。
3.二楼虽然较大,但空间感觉一点也感觉不到开阔。

似乎有乘客向公交公司反应过这些情况,这次新车基本上已经解决了上面的问题。下面新车车内的几组图:

图一
(图一)

二楼的高度已经明显增高,现在80%的人站着头是不会再撅着了。

图二
(图二)

以前的座位是全塑料的硬座椅,这次全换成软座椅,当然给人的舒适程度是不言而喻的了。

还有一点这次做的特别明显,就是两座位之间的距离明显增大了,现在两腿在之间可以自由的活动。

图三
(图三)

以前的两边窗户特别小,给人很多拓展不开,压抑的感觉。

而这次两边的窗户设计的很大方,设计的很大,在车内的空间感觉方面有很大的提高,让人在车里感觉:视力开阔,光线明亮,空间很大。似乎和外面的景色结合的是那么的融洽。

总体来讲,新车在保留了旧车美丽外观的情况下,对里面空间做了很大的调整,设计很人性化,让你的出行的同时,似乎更有种观光的感觉。

不错!!

机器 人 2009-02-08 22:10 于 北京

坚持、不放弃

Posted by 机器人 on 8th 二月 2009 in mylife

本来是计算这个礼拜看一部历史剧的,就在迅雷上找,但无意中却发现在了一部青春偶像剧-< <青春舞台>>,是韩国SJ-M组合中,超红的中国成员-韩庚主演,这也是韩庚拍的第一部连续剧。

这部片子可以说是专为韩庚量身定做,里面的大部分情节似乎都是围绕着韩庚的亲身经历所改写。由一个怀着梦想独自闯荡韩国,虽然在这期间遇到了很多艰难险阻,但始终没有动摇他那为了梦想,而坚强的信心,最终实现了自己的梦想,演变成了一位从小喜欢舞蹈,虽然没有经过专业的训练,但凭着自己对舞蹈的热爱,利用业余自己练习舞蹈,由于自己的父亲是一位射箭教练,从小对他严格要求,一直希望他能在射箭方面有所作为,所以被父亲认为他是不务正业,但他一起坚持着自己的梦想,终于等到了机会,实现了自己的梦想。

这部片子有个特殊的地方就是里面几乎所有的主要演员都有自己的梦想,都是为了自己的梦想而奋斗,虽然在实现梦想的过程中,遇到了很多困难,但他们坚持,不放弃,最终实现了自己的梦想。

这部片子告诉我们:只要自己有梦想,就一定要去保护自己的梦想,不管别人怎么说,不管遇到了什么困难,都应该坚持,不放弃,挺过最艰难的时刻,就会是海阔天空。

外插一句,看韩庚跳舞真是一种享受,通过对这部片子,现在是越来越会欣赏舞蹈了。

机器人 2009-02-09 00:25 于 北京

Zend Studio for Eclipse不能打开文件

Posted by 机器人 on 5th 二月 2009 in php/javascript

经常有时候会出现工程里的某一个文件打不开,总是出现:
Could not open the editor: Editor could not be initialized.
的提示信息。
问题原因:外部文件被修改,工程没有得到即时的初始化。
解决方法:选中工程文件,F5刷新即可。

机器人 2009-02-05 13:36 于 北京

现在才明白

Posted by 机器人 on 4th 二月 2009 in mylife

“要做自己喜欢的,有激情的,有挑战性的工作”。
相信很多同学刚从学校里出来时,都是怀着这样的念头来工作的。总认为最理想的工作是:自己喜欢的,有激情,还要有挑战性。但当自己尝试了很多工作后,才发现,自己还是没有找到心目中理想的工作,所有工作似乎都是那么乏味。

但当每次自己静下以来想的时候,究竟什么样的工作才是我们心目中的理想工作呢?那种所谓的要有激情,有挑战性的工作究竟又是什么样的呢?每当问自己的时候,自己也不知道。曾经自己也是抱怨公司天天安排自己做一些锁事,想:天天做这些事,只能是浪费时间,而且对自己来讲,也没有什么提高,这些事是应该由谁来完成。

当自己经历了人生第一次换工作后,才渐渐明白了,原来所谓激情和挑战性是自己给予自己的,并不是事物本身给予你的。那怕天天做一些小情事,如果能够把这些小事做的尽量好,其实那时自己就已经是在从事一份对自己有激情,有挑战性的工作,这所有的一切都是和自己的”心态“相关,就是要看自己用什么样的一种心态去对待国。要培养自己拥有一个良心的心态,又需要自己有足够的耐性。所以当自己坚持把小事做下去,并将其做到更好的时候,这时,基本上就可以说明自己已经有很好的耐性了,这时,自己也就自然而然的拥有了一个良好心态。当然这时自己也就感觉到自己所从事的事是很有挑战性的,因为很少有人能坚持把这样小的事做到这么好,既然只有少数人能做的事,是不是就应该算是有挑战性的事呢?

所以我现在明白了:世界上最伟大的事就是有足够的耐性去做一些足够小的事。

机器人 2008-02-04 22:23 于 北京

回到北京

Posted by 机器人 on 1st 二月 2009 in mylife

今天回到北京,这一次回来,又标志着一个新的开始,这次回北京的心情和去年是截然不同。完全给人一种全新的感觉。
今天回来太累,就没有准时去上班,明天正式开始新的一年的工作。
给自己的一些期望。
1.至少三天要写一篇日志,特别是技术日志。
2.为领导分担更多的任务,努力培养自己的责任感。
3.在专业上一点也不能放松,还是要努力学习。
4.增加自己的业余生活,要经常和朋友,同学一起去玩。比如,打打台球,篮球(很久没打过了)等。
5.经常多喝喝歌,有机会最好是去KTV。(每次喝完感觉是无比的痛快,但不知道别人的感觉怎么样)
机器人 2008-02-01 21:19 于 北京