闭包的用处

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

阅读全文 »

从总结中学习

JavaScript语言精粹

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

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

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

阅读全文 »

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

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

阅读全文 »

最近

最近发生了很多事。

国内共享主机到期,续费了 cn 域名一年作为过渡,同时购买了 hostmonster 的共享主机和新域名 belltoy.net,完成了 blogwiki 的迁移。

去年买国内空间的原因是想接触互联网,买来捣鼓的。随着 LAMP 的东西接触得多了,觉得这个主机服务很初级,完全不适合我这种开发人员。在 TualatriX 的推荐下通过代购买了 HM 的共享主机。

阅读全文 »

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

这两天在研究 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。

阅读全文 »

挽救一个年轻的生命

福建师大附中原初中6班 ,高一9班 和高三7班 的各位同学你们好,我们班的林金秋同学得了肝癌晚期,肿瘤直径10多厘米,还有肝门静脉癌栓,情况很严重,希望有心的同学可以抽空去看望下他。他现在的住院的地方是协和医院13区7床(去的时候到医院问下就好)。还有就是我们高三7班有组织捐款活动有想参加的可以和吴力强同学联系(QQ:285996010),或者可以到病房看望的时候带给他,或者汇到这个帐号(农行卡 6228 4800 6238 6076 715 |这是吴力强同学为金秋同学专门新办的一张卡),捐款数额不限。请看到这则消息的同学可以转发到认识金秋的同学那~

愿好人一生平安!

阅读全文 »

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

最近在做的是一个基于 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

阅读全文 »

jQuery中ajax方法的改进

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

阅读全文 »