Archive for the ‘Web’ Category

apache2 和 tomcat5.5 集成及虚拟主机配置

Thursday, November 26th, 2009

想起以前 tomcat 还没配过虚拟主机,便想试试,就随手集成了 apache2。把配置过程记录在这里。

安装 apache2、JDK、tomcat 就不写了,查看文档吧。

apache2 要整合 tomcat 需要用到 mod_jk。Ubuntu 下安装 mod_jk 很简单:

$ sudo apt-get install libapache2-mod-jk

可以查看一下这个包安装后产生的配置文件:

$ dpkg -L libapache2-mod-jk
1
2
3
4
5
6
7
8
......
/etc
/etc/libapache2-mod-jk
/etc/libapache2-mod-jk/workers.properties
/etc/apache2
/etc/apache2/mods-available
/etc/apache2/mods-available/jk.load
......

(more…)

HTTP 输出 Gzip 的注意事项

Tuesday, August 25th, 2009

昨天上 Jobsdigg.com 发现 Firebug 里飘红,于是做了一些测试,在这里做个笔记。

如今海量存储已经不是问题,反而是带宽资源有限,成了 Web 应用中主要瓶颈的所在。因此减少响应的传输量也就成了优化的关键。

Yahoo 的 34 条前端优化规则 中提到了 Gzip 压缩,Google 的前端性能最佳实践 中也提到了 Gzip 压缩。把服务器响应中的文本内容用 Gzip 压缩后可以减少大约 70% 的大小。这着实对前端性能和用户体验的提升有明显的帮助。

从 HTTP/1.1 开始,客户端就可以在请求头中添加

 Accept-Encoding: gzip,deflate

来向请求的服务器表明自己支持 Gzip 压缩的响应。Web 服务器则在响应头中添加

 Content-Encoding: gzip

来向客户端表明响应体是经过 gzip 压缩的。

(more…)

闭包的用处

Friday, August 7th, 2009

闭包的原理懂了,但闭包在 JavaScript 的实际编程中有什么用呢?这是一个同事的提问。闭包可以用在很多地方,但我还不能完全总结出来,最常用的使用方式有以下几种。

(more…)

从总结中学习

Friday, August 7th, 2009

JavaScript语言精粹

这本书的书名叫 JavaScript: The Good Parts,内容共 150 页左右。原本以为这么薄的书直接在书店看完就好。但当我在书店花了大约半小时时间快速看了一遍之后我觉得它值得我买下来。

它概括了 JavaScript 这个脚本语言的核心内容,不仅总结了语言的精华部分,还指出了“鸡肋”和“糟粕”。如果说犀牛书展现了 JavaScript 特性的丰富和功能的强大,这本书就体现了 JavaScript 语言轻巧简洁的特点。

其实 JavaScript 就是这么简洁,但是它很灵活,使用得好,可以编写出功能强大的程序。语言中核心的内容,也就是犀牛书的第一部分,全部在这本书中被总结出来了。但这并不表示可以从这本书入门,它不是入门级的,不适合初学者。作为概括总结,它是一本很好的帮助你提高 JavaScript 水平的书籍,因为总结也是学习的过程。

(more…)

Javascript 的词法作用域、调用对象和闭包

Tuesday, July 28th, 2009

昨天又有人问我 Javascript 闭包到底是什么,我发现三言两语无法解释清楚,干脆就写出来吧。其实关于 Javascript 的函数作用域、调用对象和闭包之间的关系很微妙,关于它们的文章已经有很多,但不知道为什么很多新手都难以理解。我就尝试用比较通俗的语言来表达我自己的理解吧。

(more…)

源代码的字符集不同带来的问题

Sunday, March 29th, 2009

这两天在研究 Jobs Digg 的中文 URL 编码乱码的问题,我发现原来是由源代码字符集和数据输入输出字符集不同造成的。

这个乱码问题是这样的。在 Jobs Digg 的网站上,中文分类的链接里 URL 编码出错,无法还原成原来的中文名称。比如,UTF-8 的“招聘”这两个中文的 URL 编码应该是 %E6%8B%9B%E8%81%98,而出错的串变成 ae%8B%9Be%81%98。

产生这个问题的原因是在添加/更新分类的时候,Pligg 会把这个分类名称另外保存成一个 category_safe_name,代码中是先用 str_replace 函数把分类名称中可能包含的特殊字符转换成安全字符,再进行 URLEncode。

(more…)

ThinkPHP 框架的 PATHINFO 模式对站点性能的影响

Tuesday, December 30th, 2008

最近在做的是一个基于 ThinkPHP 框架的webgame项目。在做性能优化的时候,发现 ThinkPHP 框架中 URL 的 PATHINFO 模式对性能有些不好的影响。

首先看看 ThinkPHP 的默认配置注1

URL_MODEL=1
URL模式: 0 普通模式 1 PATHINFO 2 REWRITE
默认为PATHINFO 模式,提供最好的用户体验和SEO支持
PATH_MODEL=2
// PATHINFO 模式
// 普通模式1 参数没有顺序/m/module/a/action/id/1
// 智能模式2 自动识别模块和操作/module/action/id/1/ 或者 /module,action,id,1/...
默认采用智能模式

把URL参数以斜杠分隔,这样 URL 看起来就比较友好,不管是对人(用户)还是对蜘蛛(机器人)都是。但在处理这种模式下的 URL 参数时,ThinkPHP 却做了影响性能的行为。在这种模式下,如果浏览器的 GET 参数是以常规的方式来传递(即参数以&分隔),ThinkPHP 在处理 URL 是时候,会把这样的参数重新拼成以斜杠分隔的“规范”的形式,然后向浏览器发一个重定向的响应头,让浏览器重新用“规范”的URL形式来请求。而重定向在高性能网站设计中是比较忌讳的,因为增加了浏览器向服务器提交请求的次数,也就增加了前端加载的时间,同时还会增加服务器的负载。这对于设计高性能的站点来说,是个不利的因素。注2

(more…)

jQuery中ajax方法的改进

Saturday, December 27th, 2008

前些日子在做一个用 ajax 异步加载文件的预加载组件,系统以 jQuery 为基础,将页面要用到的组件,例如静态js,css,html 等文本类型的文件和图片、flash 等二进制类型的数据,加载到浏览器缓存中。这里遇到一个问题。

(more…)