<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>膘叔</title>
		<link>http://www.neatstudio.com/</link>
		<description>只关心我所关心的，不在意我所不在意的</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Tue, 09 Feb 2010 17:34:01 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.neatstudio.com/show-1100-1.shtml</guid>
			<title>PHP 中如何处理时区</title>
			<author>gouki</author>
			<description><![CDATA[<p>小记录，一般情况而言，默认安装好的lamp中，时间都是标准GMT时间，基本上，我们中国时间都应该是+8才对，但很多人往往不设置。</p>
<p>因此，为了时间正确，建议你还是设置一下默认时区，否则出现这8小时的误差也很郁闷的。</p>
<p>那么如何知道自己的时区是否正确呢？在不知道一些系统函数的情况下，直接输出 date('Y-m-d H:i:s', now()) ，就可以了解了。。</p>
<p>那么，我在知道这样的问题后，怎么能够知道当前设定的时区是哪里呢？这时可以通过：date_default_timezone_get()函数来获取，理所当然，设置时区就是date_default_timezone_set()了。</p>
<p>手册上也说明，在PHP 5.1之后，如果时区不正确，那每次在调用Date或者time函数时，都会有一个warning 或者 notice出现：
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>Note:&nbsp;Since&nbsp;PHP&nbsp;5.1.0&nbsp;(when&nbsp;the&nbsp;date/time&nbsp;functions&nbsp;were&nbsp;rewritten),&nbsp;every&nbsp;call&nbsp;to&nbsp;a&nbsp;date/time&nbsp;function&nbsp;will&nbsp;generate&nbsp;a&nbsp;E_NOTICE&nbsp;if&nbsp;the&nbsp;timezone&nbsp;isn't&nbsp;valid,&nbsp;and/or&nbsp;a&nbsp;E_STRICT&nbsp;message&nbsp;if&nbsp;using&nbsp;the&nbsp;system&nbsp;settings&nbsp;or&nbsp;the&nbsp;TZ&nbsp;environment&nbsp;variable.&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</p>
<p>当然，如果你觉得这样设置很麻烦，你可以更改php.ini文件中的 ;date.timezone = ，添加自己需要的时区，例如 date.timezone =  Asia/Chongqing，然后重启服务器就可以了。PHP支持的 timezone 的字符串在手册中能够查到。</p>
<p>手册中的：<a name="timezones">Appendix J. List of Supported Timezones，可以查看所有支持的时区。</a></p>
<p><strong>Note: </strong>The latest version of the timezone database can be installed via  PECL's <a target="_top" href="http://pecl.php.net/get/timezonedb">timezonedb</a>.  For Windows users, a pre-compiled DLL can be downloaded from the PECL4Win site:  <a target="_top" href="http://pecl4win.php.net/ext.php/php_timezonedb.dll">php_timezonedb.dll</a>.</p>]]></description>
			<link>http://www.neatstudio.com/show-1100-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-1-1.shtml">PHP</category>
			<pubDate>2010-02-09 16:51</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1099-1.shtml</guid>
			<title>[娱乐]凤姐霸气语录大全</title>
			<author>gouki</author>
			<description><![CDATA[<p>最近凤姐很是红火啊，一时间芙蓉姐姐、杨二车娜母之类的在凤姐面前黯然失色，听听凤姐怎么说的：</p>
<p>1 你去死<br />
2 必须具备国际视野 有征服世界的欲望<br />
3 本人找伴侣 一不求帅二不求富<br />
4 9岁博览群书，20岁到达顶峰， 往前300年往后推300年， 没有人会超过我，在智力上他们是不可能比我强的 那就在身高和外貌上弥补吧。。。<br />
5 他太老了 而且身高也不够 他也不可能是北大清华 更不可能是经济学专业 我不会选他（陈坤）<br />
6 这个标准不高 这个标准很低<br />
7 看到其他女的就他妈花痴一样（疯了 上电视说脏话）<br />
8 过了三十岁自己滚蛋<br />
9 男人过了三十岁就没看点了 就人老珠黄了<br />
10 你给我十万</p>
<p>11 吾日三省吾身（凤姐念错字了）<br />
12 我用的是A4纸，因为A4是标准<br />
13. 因为上海是一个经济中心 我这个人对征服经济世界蛮有兴趣的(征服猫扑的男人试试)<br />
14. 我经常看的都是社会经济学和一些文学类的著作！比如说，《知音》还有《故事会》。<br />
15 我一般按长相将人分等。<br />
我是第三等。<br />
（主持人指着他男朋友问：他是几等）<br />
他啊，没有等。。。。。（乐乐捂嘴笑）<br />
16 我在家乐福超市工作，世界500强.<br />
17 世界上有一半的男人看到我就想逃跑，另一半我看到他就想逃跑。<br />
18我这个人有点洁癖，以前读书时衣服每天要洗，现在基本上过两三天就洗一次，洗头也这样，现在很多时间都浪费在这上面。<br />
19罗指着台下众人说:你们这些普通院校的,如果撇开这上面的七条,你们肯定有人会原意娶我...<br />
20 真的美女真多啊.我对面的一位男孩,开始很仔细的打量我,我想我应该还没有出名到他已经看过我的视频吧.有次有人对我说你上电视了,我说什么电视?人家说东方卫视啊.我打开电视,东方卫视正在播奥巴马的新闻.我觉得我和奥巴马之间还有很大的距离.做人,自知之明还是有的.。</p>
<p>牛人啊。怪不得别人说信春哥得永生，而信凤姐则是得自信。</p>
<p>实在是我辈偶像 啊。</p>]]></description>
			<link>http://www.neatstudio.com/show-1099-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-02-08 13:36</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1098-1.shtml</guid>
			<title>Firebug Lite For Chrome</title>
			<author>gouki</author>
			<description><![CDATA[<p>很意外，一直都认为firebug不会为chrome写插件了。毕竟chrome自带了一个F12的debug工具。<br />
4。0开始后的chrome逐渐开始支持插件，然而，插件网站却不是每次打开都正常。也让我非常郁闷。<br />
不过，看过chrome的插件编写的hello world，却真的发现，它的编写比firefox的插件简单的多。<br />
<br />
上面都是闲话，真正想说的还是firebug，自从前两年firebug为IE出过lite版本后，更新幅度就小了很多，所以这次看到它为chrome做的更新，还是不禁想尝试一下的。<br />
OK，上官方的菜，Firebug自己认为：</p>
<div class="codeText">
<div class="codeHead"><span><span>Firebug&nbsp;Lite:&nbsp;doing&nbsp;the&nbsp;Firebug&nbsp;way,&nbsp;anywhere.</span></span></div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>&nbsp;</span>*&nbsp;Compatible&nbsp;with&nbsp;all&nbsp;major&nbsp;browsers:&nbsp;IE6+,&nbsp;Firefox,&nbsp;Opera,&nbsp;Safari&nbsp;and&nbsp;Chrome&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*&nbsp;Same&nbsp;look&nbsp;and&nbsp;feel&nbsp;as&nbsp;Firebug&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;*&nbsp;Inspect&nbsp;HTML&nbsp;and&nbsp;modify&nbsp;style&nbsp;in&nbsp;real-time&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*&nbsp;Powerful&nbsp;console&nbsp;logging&nbsp;functions&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;*&nbsp;Rich&nbsp;representation&nbsp;of&nbsp;DOM&nbsp;elements&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*&nbsp;Extend&nbsp;Firebug&nbsp;Lite&nbsp;and&nbsp;add&nbsp;features&nbsp;to&nbsp;make&nbsp;it&nbsp;even&nbsp;more&nbsp;powerful&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>不过作为chrome插件，它还仅仅是一个beta版，他这么介绍的：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>Firebug&nbsp;Lite&nbsp;is&nbsp;not&nbsp;a&nbsp;substitute&nbsp;for&nbsp;Firebug,&nbsp;or&nbsp;Chrome&nbsp;Developer&nbsp;Tools.&nbsp;It&nbsp;is&nbsp;a&nbsp;tool&nbsp;to&nbsp;be&nbsp;used&nbsp;in&nbsp;conjunction&nbsp;with&nbsp;these&nbsp;tools.&nbsp;Firebug&nbsp;Lite&nbsp;provides&nbsp;the&nbsp;rich&nbsp;visual&nbsp;representation&nbsp;we&nbsp;are&nbsp;used&nbsp;to&nbsp;see&nbsp;in&nbsp;Firebug&nbsp;when&nbsp;it&nbsp;comes&nbsp;to&nbsp;HTML&nbsp;elements,&nbsp;DOM&nbsp;elements,&nbsp;and&nbsp;Box&nbsp;Model&nbsp;shading.&nbsp;It&nbsp;provides&nbsp;also&nbsp;some&nbsp;cool&nbsp;features&nbsp;like&nbsp;inspecting&nbsp;HTML&nbsp;elemements&nbsp;with&nbsp;your&nbsp;mouse,&nbsp;and&nbsp;live&nbsp;editing&nbsp;CSS&nbsp;properties.&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>o&nbsp;get&nbsp;more&nbsp;information&nbsp;about&nbsp;what's&nbsp;new&nbsp;in&nbsp;Firebug&nbsp;Lite&nbsp;1.3&nbsp;beta&nbsp;(which&nbsp;is&nbsp;compatible&nbsp;with&nbsp;all&nbsp;major&nbsp;browsers)&nbsp;please&nbsp;visit&nbsp;the&nbsp;beta&nbsp;release&nbsp;page.&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
可以到这里进行下载：<a href="http://getfirebug.com/releases/lite/chrome/">http://getfirebug.com/releases/lite/chrome/</a></p>]]></description>
			<link>http://www.neatstudio.com/show-1098-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-3-1.shtml">Software</category>
			<pubDate>2010-02-08 10:31</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1097-1.shtml</guid>
			<title>【转】jQuery性能规则</title>
			<author>gouki</author>
			<description><![CDATA[<p>转载的关于jQuery性能设置的文章 。。。</p>
<p>&nbsp;之前，我们需要担心减少字节数和请求次数以及加载顺序以使页面加载的更快。如今，我们越来越多的注意到一个影响性能的重要组成部分--CPU利用 率。使用 jQuery和其他JavaScript框架，使节点选择和DOM操作变得越来越容易，但如果你不小心使用了一些减少浏览器本身要做的工作的一些做法可能 会带来不好的结果。</p>
<ol style="margin-left: 30px;">
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#descend-from-id" target="_self">总是使用#id去寻找element</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#use-tags-before-classes" target="_self">在Classes前面使用Tags</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#cache-jquery-objects" target="_self">缓存jQuery对象</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#harness-chaining" target="_self">更好的利用链</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#use-sub-queries" target="_self">使用子查询</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#limit-dom-manipulation" target="_self">限制直接对DOM操作</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#leverage-event-delegation" target="_self">事件委托</a>（又名：冒泡事件）</li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#eliminate-query-waste" target="_self">消除查询浪费</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#defer-to-window-load" target="_self">遵从 $(window).load</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#compress-your-js" target="_self">压缩JS</a></li>
    <li><a href="http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html#learn-the-library" target="_self">学习jQuery库</a></li>
</ol>
<h2 id="descend-from-id">1.总是使用#id去寻找element.</h2>
<p>&nbsp;在jQuery中最快的选择器是ID选择器 (<code>$('#someid')</code>). 这是因为它直接映射为JavaScript的<code>getElementById()</code>方法。</p>
<h3>选择单个元素</h3>
<p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;content&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;post&quot;</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;/&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>Traffic&nbsp;Light</span><span class="tag">&lt;/</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ul</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_light&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;on&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;red&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Red</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;yellow&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Yellow</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;green&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Green</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_button&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;submit&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Go&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</p>
<p>选择button的性能不好的一种方式：<br />
var traffic_button = $('#content .button');<br />
<br />
取而代之的是直接选择button:<br />
var traffic_button = $('#traffic_button');</p>
<p><strong>选择多个元素</strong><br />
<br />
在我们讨论选择多个元素的时候，我们真正需要知道的是DOM的遍历和循环才是性能低下的原因。为了尽量减少性能损失， 总是使用最近的父ID去寻找。<br />
var traffic_lights = $('#traffic_light input');</p>
<h2 id="use-tags-before-classes">2.在Classes前面使用Tags</h2>
<p>在jQuery中第二快的选择器就是Tag选择器 (<code>$('head')</code>). 而这是因为它直接映射到JavaScript的<code>getElementsByTagName()</code>方法。</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;content&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;post&quot;</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;/&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>Traffic&nbsp;Light</span><span class="tag">&lt;/</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ul</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_light&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;on&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;red&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Red</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;yellow&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Yellow</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;green&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Green</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_button&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;submit&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Go&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>总是在一个Class前面加上一个tag名字（记得从一个ID传下来）<br />
var active_light = $('#traffic_light input.on');<br />
<br />
注意：在jQuery里Class选择器是最慢的一个选择器;在IE中它循环整个DOM。可能的话尽量避免使用它。不要在ID前面加Tags。例如，它会因为去循环所有的&lt;div&gt;元素去寻找ID为content的&lt;div&gt;，而导致很慢。<br />
var content = $('div#content');<br />
<br />
按照同样的思路，从多个ID传下来是冗余的。<br />
var traffic_light = $('#content #traffic_light');</p>
<h2 id="cache-jquery-objects">3.缓存jQuery对象</h2>
<p>养成保存jQuery对象到一个变量上（就像上面的例子）的习惯。例如，不要这样做：</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>$(</span><span class="string">'#traffic_light&nbsp;input.on).bind('</span><span>click</span><span class="string">',&nbsp;function(){...});</span>&nbsp;</span></li>
    <li class=""><span><span class="string">$('</span><span>#traffic_light&nbsp;input.on).css(</span><span class="string">'border'</span><span>,&nbsp;</span><span class="string">'3px&nbsp;dashed&nbsp;yellow'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">'#traffic_light&nbsp;input.on).css('</span><span>background-color</span><span class="string">',&nbsp;'</span><span>orange</span><span class="string">');</span>&nbsp;</span></li>
    <li class=""><span><span class="string">$('</span><span>#traffic_light&nbsp;input.on).fadeIn(</span><span class="string">'slow'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>取而代之，首现保存jQuery变量到一个本地变量后，再继续你的操作。
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;$active_light&nbsp;=&nbsp;$(</span><span class="string">'#traffic_light&nbsp;input.on'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$active_light.bind(<span class="string">'click'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(){...});&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$active_light.css(<span class="string">'border'</span><span>,&nbsp;</span><span class="string">'3px&nbsp;dashed&nbsp;yellow'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$active_light.css(<span class="string">'background-color'</span><span>,&nbsp;</span><span class="string">'orange'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$active_light.fadeIn(<span class="string">'slow'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</p>
<p>提示：使用$前辍表示我们的本地变量是一个jQuery包集。记住，不要在你的应该程序里出现一次以上的jQuery重复的选择操作。</p>
<h3>&nbsp;额外提示：延迟存储jQuery对象结果。</h3>
<p>如果你想在你的程序的其它地方使用jQuery结果对象（result object(s)），或者你的函数要执行多次，要把它缓存在一个全局范围的对象里。通过定义一个全局容器保存jQuery结果对象，就可以在其它的函数里引用它。<br />
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="comment">//&nbsp;Define&nbsp;an&nbsp;object&nbsp;in&nbsp;the&nbsp;global&nbsp;scope&nbsp;(i.e.&nbsp;the&nbsp;window&nbsp;object)</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>window.$my&nbsp;=&nbsp;&nbsp;</span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Initialize&nbsp;all&nbsp;the&nbsp;queries&nbsp;you&nbsp;want&nbsp;to&nbsp;use&nbsp;more&nbsp;than&nbsp;once</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;:&nbsp;$(<span class="string">'head'</span><span>),&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;traffic_light&nbsp;:&nbsp;$(<span class="string">'#traffic_light'</span><span>),&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;traffic_button&nbsp;:&nbsp;$(<span class="string">'#traffic_button'</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>};&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">function</span><span>&nbsp;do_something()&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Now&nbsp;you&nbsp;can&nbsp;reference&nbsp;the&nbsp;stored&nbsp;results&nbsp;and&nbsp;manipulate&nbsp;them</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;script&nbsp;=&nbsp;document.createElement(</span><span class="string">'script'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$my.head.append(script);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;When&nbsp;working&nbsp;inside&nbsp;functions,&nbsp;continue&nbsp;to&nbsp;save&nbsp;jQuery&nbsp;results</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;to&nbsp;your&nbsp;global&nbsp;container.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$my.cool_results&nbsp;=&nbsp;$(<span class="string">'#some_ul&nbsp;li'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$my.other_results&nbsp;=&nbsp;$(<span class="string">'#some_table&nbsp;td'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Use&nbsp;the&nbsp;global&nbsp;functions&nbsp;as&nbsp;you&nbsp;would&nbsp;a&nbsp;normal&nbsp;jQuery&nbsp;result</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$my.other_results.css(<span class="string">'border-color'</span><span>,&nbsp;</span><span class="string">'red'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$my.traffic_light.css(<span class="string">'border-color'</span><span>,&nbsp;</span><span class="string">'green'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</p>
<h2 id="harness-chaining">4.更好的利用链</h2>
<p>&nbsp;前面的例子也可以这样写：
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;$active_light&nbsp;=&nbsp;$(</span><span class="string">'#traffic_light&nbsp;input.on'</span><span>);$active_light.bind(</span><span class="string">'click'</span><span>,&nbsp;</span><span class="keyword">function</span><span>(){...})&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;.css(<span class="string">'border'</span><span>,&nbsp;</span><span class="string">'3px&nbsp;dashed&nbsp;yellow'</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;.css(<span class="string">'background-color'</span><span>,&nbsp;</span><span class="string">'orange'</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;.fadeIn(<span class="string">'slow'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</p>
<p>这样可以让我们写更少的代码，使JavaScript更轻量。</p>
<h2 id="use-sub-queries">5.使用子查询</h2>
<p>jQuery允许我们在一个包集上附加其它的选择器。因为我们已经在本地变量里保存了父对象这样会减少以后在选择器上的性能开销。</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;content&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">method</span><span>=</span><span class="attribute-value">&quot;post&quot;</span><span>&nbsp;</span><span class="attribute">action</span><span>=</span><span class="attribute-value">&quot;/&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>Traffic&nbsp;Light</span><span class="tag">&lt;/</span><span class="tag-name">h2</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">ul</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_light&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;on&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;red&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Red</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;yellow&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Yellow</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;green&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Green</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_button&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;submit&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Go&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>例如，我们可以利用子查询缓存active和inactive lights以便后面的操作。</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;$traffic_light&nbsp;=&nbsp;$(</span><span class="string">'#traffic_light'</span><span>),&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$active_light&nbsp;=&nbsp;$traffic_light.find(<span class="string">'input.on'</span><span>),&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;$inactive_lights&nbsp;=&nbsp;$traffic_light.find(<span class="string">'input.off'</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>提示：可以用逗号隔开一次定义多个本地变量，这样可以节省一些字节。</p>
<h2 id="limit-dom-manipulation">&nbsp;6.限制直接对DOM操作</h2>
<p>DOM操作的基本做法是在内存中创建DOM结构，然后再更新DOM结构。这不是jQuery最好的做法，但对JavaScript来讲是高效的。<strong>直接操作DOM结构性能是低下的</strong>。 例如，如果你需要动态创建一列元素，不要这样做：</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;top_100_list&nbsp;=&nbsp;[...],&nbsp;</span><span class="comment">//&nbsp;assume&nbsp;this&nbsp;has&nbsp;100&nbsp;unique&nbsp;strings</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$mylist&nbsp;=&nbsp;$(<span class="string">'#mylist'</span><span>);&nbsp;</span><span class="comment">//&nbsp;jQuery&nbsp;selects&nbsp;our&nbsp;&lt;ul&gt;&nbsp;element</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i=0,&nbsp;l=top_100_list.length;&nbsp;i&lt;l;&nbsp;i++)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$mylist.append(<span class="string">'&lt;li&gt;'</span><span>&nbsp;+&nbsp;top_100_list[i]&nbsp;+&nbsp;</span><span class="string">'&lt;/li&gt;'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>取而代之，我们希望在插入DOM结构之前先在一个字符串里创建一套元素。</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;top_100_list&nbsp;=&nbsp;[...],&nbsp;</span><span class="comment">//&nbsp;assume&nbsp;this&nbsp;has&nbsp;100&nbsp;unique&nbsp;strings</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$mylist&nbsp;=&nbsp;$(<span class="string">'#mylist'</span><span>),&nbsp;</span><span class="comment">//&nbsp;jQuery&nbsp;selects&nbsp;our&nbsp;&lt;ul&gt;&nbsp;element</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;top_100_li&nbsp;=&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;</span><span class="comment">//&nbsp;This&nbsp;will&nbsp;store&nbsp;our&nbsp;list&nbsp;items</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i=0,&nbsp;l=top_100_list.length;&nbsp;i&lt;l;&nbsp;i++)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;top_100_li&nbsp;+=&nbsp;<span class="string">'&lt;li&gt;'</span><span>&nbsp;+&nbsp;top_100_list[i]&nbsp;+&nbsp;</span><span class="string">'&lt;/li&gt;'</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>$mylist.html(top_100_li);&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>更快的做法，在插入DOM结构之前我们应该总是在一个父节点里包含许多元素</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;top_100_list&nbsp;=&nbsp;[...],&nbsp;</span><span class="comment">//&nbsp;assume&nbsp;this&nbsp;has&nbsp;100&nbsp;unique&nbsp;strings</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$mylist&nbsp;=&nbsp;$(<span class="string">'#mylist'</span><span>),&nbsp;</span><span class="comment">//&nbsp;jQuery&nbsp;selects&nbsp;our&nbsp;&lt;ul&gt;&nbsp;element</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;top_100_ul&nbsp;=&nbsp;<span class="string">'&lt;ul&nbsp;id=&quot;#mylist&quot;&gt;'</span><span>;&nbsp;</span><span class="comment">//&nbsp;This&nbsp;will&nbsp;store&nbsp;our&nbsp;entire&nbsp;unordered&nbsp;list</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">var</span><span>&nbsp;i=0,&nbsp;l=top_100_list.length;&nbsp;i&lt;l;&nbsp;i++)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;top_100_ul&nbsp;+=&nbsp;<span class="string">'&lt;li&gt;'</span><span>&nbsp;+&nbsp;top_100_list[i]&nbsp;+&nbsp;</span><span class="string">'&lt;/li&gt;'</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>top_100_ul&nbsp;+=&nbsp;<span class="string">'&lt;/ul&gt;'</span><span>;&nbsp;</span><span class="comment">//&nbsp;Close&nbsp;our&nbsp;unordered&nbsp;list</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>$mylist.replaceWith(top_100_ul);&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>如是你照着上面的做了还是对性能有些迷惑的话，可以参考以下内容：</p>
<ul>
    <li>试一下jQuery提供的Clone()方法。Clone()方法创建节点数的拷贝，随后你可以在这个副本中进行操作。</li>
    <li>使用<a href="http://www.devguru.com/technologies/xmldom/quickref/obj_documentFragment.html" target="_blank">DOM DocumentFragments</a>. As the <a href="http://ejohn.org/blog/dom-documentfragments/" target="_blank">creator of jQuery points out</a>, 比直接操作DOM性能上更好. 先创建你需要的结构(就像我们上面用一个字符串做的一样), 然后使用jQuery的 <a href="http://docs.jquery.com/Manipulation" target="_blank">insert or replace methods</a>.&nbsp;</li>
</ul>
<h2 id="leverage-event-delegation">7. 事件委托（又名：冒泡事件）</h2>
<p>除非特别说明，每一个JavaScript事件（如click, mouseover 等）在DOM结构树上都会冒泡到它的父元素上。如果我们想让很多elements(nodes)调用同一个function这是非常有用的。取而代之的是 你可以只对它们的父级绑定一次，而且可以计算出是哪一个节点触发了事件，而不是绑定一个事件监听器到很多节点上这种效率低下的方式。例如，假如我们要开发 一个包含很多input的大型form，当input被选择的时候我们想绑定一个class name。像这样的帮定是效率低下的：</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>$('#myList&nbsp;li).bind('click',&nbsp;function(){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;$(this).addClass('clicked');&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;stuff&nbsp;&nbsp;</span></li>
    <li class=""><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>反而，我们应该在父级侦听click事件。
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>$(</span><span class="string">'#myList).bind('</span><span>click</span><span class="string">',&nbsp;function(e){</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;target&nbsp;=&nbsp;e.target,&nbsp;//&nbsp;e.target&nbsp;grabs&nbsp;the&nbsp;node&nbsp;that&nbsp;triggered&nbsp;the&nbsp;event.</span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$target&nbsp;=&nbsp;$(target);&nbsp;&nbsp;//&nbsp;wraps&nbsp;the&nbsp;node&nbsp;in&nbsp;a&nbsp;jQuery&nbsp;object</span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(target.nodeName&nbsp;===&nbsp;'</span><span>LI</span><span class="string">')&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$target.addClass('<span>clicked');&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;do&nbsp;stuff</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>});&nbsp;&nbsp;</span></li>
</ol>
</div>
</p>
<p>父节点担当着发报机的工作，可以在触发了事件的目标element上做一些工作。如果你发现自己把一个event listener帮定到很多个element上，那么你这种做法是不正确的。</p>
<h2 id="eliminate-query-waste">&nbsp;8.消除查询浪费</h2>
<p>虽然jQuery对没有找到任何匹配的elements处理的很好，但是它还是需要花费时间去查找的。如果你的站点有一个全局的JavaScript，你可能会把每个jQuery function都放在<span style="background-color: rgb(153, 204, 0);"> </span><code><span style="background-color: rgb(153, 204, 0);">$(document).ready(function(){ // all my glorious code })</span></code>里。 不要这样做。只去放一些页面上适合用到的function。这样做最有效的方式是你的模板可以完全控制任何时候或者地方执行JavaScript以内联脚 本的方式初始化function。例如，在你的&ldquo;article&rdquo;页面模板里，你可能在body标签关闭之前包含以下代码
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=&quot;text/javascript</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>mylib.article.init();&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</p>
<p>如果你的页面模板包含多种有可能在页面或者不在页面上的模块，或者为了可视化效果你需要它们稍后再初如化，你应该在这些模块之后立即放置初如化函数。
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">ul</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;traffic_light&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;on&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;red&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Red</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;yellow&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Yellow</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">li</span><span class="tag">&gt;</span><span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;radio&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;off&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;light&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;green&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;Green</span><span class="tag">&lt;/</span><span class="tag-name">li</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">ul</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">type</span><span>=&quot;text/javascript</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>mylib.traffic_light.init();&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
你的全局JavaScript库看起来应该是这样的：
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;mylib&nbsp;=&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;article_page&nbsp;:&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init&nbsp;:&nbsp;<span class="keyword">function</span><span>()&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Article&nbsp;page&nbsp;specific&nbsp;jQuery&nbsp;functions.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;traffic_light&nbsp;:&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init&nbsp;:&nbsp;<span class="keyword">function</span><span>()&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;Traffic&nbsp;light&nbsp;specific&nbsp;jQuery&nbsp;functions.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</p>
<h2 id="defer-to-window-load">9 遵从$(windows).load</h2>
<p>有一种诱惑会使jQuery开发者hook所有事情到 <code>$(document).ready</code> 这个虚伪的事件里。毕竟在大多数例子里都可以看到这样使用。虽然<code>$(document).ready</code> 非常有用，它在页面呈现时发生，虽然其它对象还在下载中。如果你发现你的页面在下载中停顿，就有可能是<code>$(document).ready</code> 引起的。你可以通过把jQuery functions帮定到$(window).load事件来减少下面下载时的CPU使用率，它是在所有HTML（包括iframe内容）都下载完以后才去调用所有对象的。</p>
<div class="cnblogs_code">
<div><!--<br/  />
<br/  />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br/  />
http://www.CodeHighlighter.com/<br/  />
<br/  />
--><span style="color: rgb(0, 0, 0);">$(window).load(</span><span style="color: rgb(0, 0, 255);">function</span><span style="color: rgb(0, 0, 0);">(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">&nbsp;jQuery&nbsp;functions&nbsp;to&nbsp;initialize&nbsp;after&nbsp;the&nbsp;page&nbsp;has&nbsp;loaded.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">});</span></div>
</div>
<p>多余的功能，如拖拽、帮定可视化效果和动画、预读取图片等，使用这种方法比较好。</p>
<h2 id="compress-your-js">10 压缩JS</h2>
<p>虽然和jQuery无关，但在这里也要提一下。使JavaScript函数和变量变得可读是一个趋势，这对开发者来讲是必不可少的，但对普通用户来 讲没有任何关系。不用什么借口，是时候把JS压缩纳入我们的工作流程中来了。注释你的代码，在投放到生产环境之前找一个压缩工具进行压缩。使用<a href="http://www.julienlecomte.net/yuicompressor/" target="_blank">YUICompressor</a> 压缩你代码中多余的浪费的字节。根据我们的经验，它可以安全的把JavaScript压缩的尽可能小，而不会多占用CPU。小提示：为了在YUICompressor里最大化压缩，应该这样这样定义变量（例如：var my_long_variable_name;）</p>
<h2 id="learn-the-library">11 学习jQuery库</h2>
<p>学习jQuery最好的方法就是去查jQuery的文档了，可以当作手册来用。</p>
<p>本文来自博客园，作者是<!--done--><a href="http://www.cnblogs.com/trendline/" class="headermaintitle" id="Header1_HeaderTitle">Skyline.xin</a>，来源网址是：http://www.cnblogs.com/trendline/archive/2010/02/05/jquery-performance-rules.html，用他的话来说，他是翻译：http://www.artzstudio.com/2009/04/jquery-performance-rules/，可惜我的英文太差。否则我也可以翻译啥的了。。</p>
<p>感谢翻译者为我们带来的快乐。</p>]]></description>
			<link>http://www.neatstudio.com/show-1097-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-2-1.shtml">Javascript</category>
			<pubDate>2010-02-07 22:44</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1096-1.shtml</guid>
			<title>一次糟糕的测试</title>
			<author>gouki</author>
			<description><![CDATA[<p>关于飞信，我上次写过<a href="../../../show-1094-1.shtml">学着写PHP飞信</a>，然而今天晚上我把上文中测试的内容重现时却发现，现实有点残酷。我用curl的时候，速度居然没有fsocketopen快？我于是多次测试，然而，我却得到了一些令人沮丧的结果</p>
<p>【$postData,$postLength，都不提供。。。】</p>
<p>1、curl，利用curl来post</p>
<div class="codeText">
<div class="codeHead">平均【大约 1.8~1.9秒】</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="vars">$ch</span><span>&nbsp;=&nbsp;curl_init();&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="vars">$chOptions</span><span>&nbsp;=&nbsp;</span><span class="keyword">array</span><span>(&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_URL&nbsp;=&gt;&nbsp;<span class="string">&quot;http://nav.fetion.com.cn/nav/getsystemconfig.aspx&quot;</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_HTTP_VERSION&nbsp;=&gt;&nbsp;<span class="string">'HTTP/1.0'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_USERAGENT&nbsp;=&gt;&nbsp;sprintf(<span class="string">'IIC2.0/pc&nbsp;%s'</span><span>&nbsp;,&nbsp;self::FETION_CLIENT_VERSION),&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_ENCODING&nbsp;=&gt;&nbsp;<span class="string">'gzip,deflate'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_HTTPHEADER&nbsp;=&gt;&nbsp;<span class="keyword">array</span><span>(</span><span class="string">'Content-Type:&nbsp;text/xml;&nbsp;charset=utf-8'</span><span>),&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_POST&nbsp;=&gt;&nbsp;1,&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_POSTFIELDS&nbsp;=&gt;&nbsp;<span class="vars">$postData</span><span>&nbsp;,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_RETURNTRANSFER&nbsp;=&gt;&nbsp;1,&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;CURLOPT_HEADER&nbsp;=&gt;&nbsp;0&nbsp;&nbsp;</span></li>
    <li class=""><span>);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>curl_setopt_array(<span class="vars">$ch</span><span>,&nbsp;</span><span class="vars">$chOptions</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="vars">$res</span><span>&nbsp;=&nbsp;curl_exec(</span><span class="vars">$ch</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;2、fsocketopen，同样POST数据</p>
<div class="codeText">
<div class="codeHead">平均【大约 0.8~0.9秒】</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="vars">$headers</span><span>=&lt;&lt;&lt;eot&nbsp;&nbsp;</span></span></li>
    <li class=""><span>POST&nbsp;/nav/getsystemconfig.aspx&nbsp;HTTP/1.0&nbsp;&nbsp;</span></li>
    <li class="alt"><span>User-Agent:&nbsp;IIC2.0/pc&nbsp;3.1.0480&nbsp;&nbsp;</span></li>
    <li class=""><span>Accept-Encoding:&nbsp;deflate,&nbsp;gzip&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Host:&nbsp;nav.fetion.com.cn:80&nbsp;&nbsp;</span></li>
    <li class=""><span>Content-Length:&nbsp;{<span class="vars">$postLength</span><span>}&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>{<span class="vars">$postData</span><span>}&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>eot;&nbsp;&nbsp;</span></li>
    <li class=""><span>fwrite(<span class="vars">$fp</span><span>,</span><span class="vars">$headers</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$received</span><span>=</span><span class="func">fread</span><span>(</span><span class="vars">$fp</span><span>,1024);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>fclose(<span class="vars">$fp</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>3、stream，利用文件流</p>
<div class="codeText">
<div class="codeHead">平均【大约 1.3~1.4秒】</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="vars">$opts</span><span>&nbsp;=&nbsp;</span><span class="keyword">array</span><span>&nbsp;(&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">'http'</span><span>&nbsp;=&gt;&nbsp;</span><span class="keyword">array</span><span>&nbsp;(&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">'method'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'POST'</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">'header'</span><span>=&gt;&nbsp;</span><span class="string">&quot;Content-type:&nbsp;application/x-www-form-urlencoded&quot;</span><span>&nbsp;.&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;Content-Length:&nbsp;&quot;</span><span>&nbsp;.&nbsp;</span><span class="vars">$postLength</span><span>&nbsp;.&nbsp;</span><span class="string">&quot;&quot;</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">'content'</span><span>&nbsp;=&gt;&nbsp;</span><span class="vars">$postData</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;),&nbsp;&nbsp;</span></li>
    <li class=""><span>);&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="vars">$context</span><span>&nbsp;=&nbsp;stream_context_create(</span><span class="vars">$opts</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//$received&nbsp;=&nbsp;file_get_contents('http://nav.fetion.com.cn/nav/getsystemconfig.aspx',&nbsp;false,&nbsp;$context&nbsp;,&nbsp;0&nbsp;,1024);</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="vars">$fp</span><span>&nbsp;=&nbsp;</span><span class="func">fopen</span><span>(</span><span class="string">'http://nav.fetion.com.cn/nav/getsystemconfig.aspx'</span><span>,</span><span class="string">'r'</span><span>,false,</span><span class="vars">$context</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">if</span><span>(</span><span class="vars">$fp</span><span>){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="vars">$received</span><span>&nbsp;=&nbsp;</span><span class="func">fgets</span><span>(</span><span class="vars">$fp</span><span>,&nbsp;512);&nbsp; //在这里我用了三种测试，fgets,fread,stream_get_contents</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;fclose(<span class="vars">$fp</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>在这里我用了两种方式，一种是file_get_contents还有一种是fopen，file_get_contents的方法被我注释了。。。</p>
<p>在这三种中，我发现真的只有fsocketopen后然后fread是最快的。</p>
<p>真让我沮丧。。因为第三种方法中file_get_contens也可以指定读取的长度。但<a href="http://www.phprpc.org">PHPRPC作者andot</a>却认为，file_get_contents把头已经读回来了。我想，file_get_contents其实已经把数据读回来了，虽然是指定了长度，但其实只是读回来后再截取的。</p>
<p>唉。看来，不得不用fsocketopen了。。不知道除此之外有没有什么好办法。</p>]]></description>
			<link>http://www.neatstudio.com/show-1096-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-1-1.shtml">PHP</category>
			<pubDate>2010-02-06 23:05</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1095-1.shtml</guid>
			<title>海报</title>
			<author>gouki</author>
			<description><![CDATA[<p>昨天是老婆生日，陪着她去逛了逛 商场，在她逛的时候，我就在那里偷拍商场的海报。<br />
拍的时候还是很当心的，怕被人痛欧。没办法，这年头，都是喜欢拿着鸡毛当令箭。<br />
<br />
有的海报我还是挺喜欢的，象E.LAND品牌的，看起来就象电影海报。还有一些，也挺漂亮，只是海报居然对着商铺的里侧，不走进去还真看不到，这样又怎么体现出海报的作用？真想不通。<br />
<br />
或者最近一直在想着如何赢利，所以看到一些特别的东西就想着记录下来。昨天还拍了一张曹扬的&ldquo;创业小店&rdquo;，说是团委搞的一个创业园区，说白了就是让大学生自己养活自己而己。唉。。<br />
<br />
上图【晚上，没办法。。有点糊了】<br />
<a href="http://www.neatstudio.com/attachment.php?id=488" target="_blank"><img src="http://www.neatstudio.com/attachments/date_201002/thumb_626dfbe37949ceaa56f1b74a58b12ab9.jpg" border="0" alt="大小: 1.46 M&#13;尺寸: 500 x 375&#13;浏览: 13 次&#13;点击打开新窗口浏览全图" width="500" height="375" /></a><br />
<br />
哪天自己能够创业？想起一哥们，已经陷在创业的泥潭。我胆量还是挺小的。<br />
老婆说，郑渊洁有次在采访的时候说，如果在法律允许的范围内，越早有小孩是越好的，因为只有那样你才有压力和动力去创业。<br />
现在，却是想着要稳定，却不知道怎么搞</p>
<p>对了，我说的海报的图在：http://g.52cd.net/archives/356，点击小图可以看大图。</p>]]></description>
			<link>http://www.neatstudio.com/show-1095-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-02-06 15:34</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1094-1.shtml</guid>
			<title>学着写PHP飞信</title>
			<author>gouki</author>
			<description><![CDATA[<p>飞信，对于我们搞开发的人来说，确实还是需要的。网上也有一些php飞信的类（看的也很累），不过，我看的是<a href="http://zendstudio.net">zendstudio.net</a>，因为看起来好象方便。<br />
自从上次<a href="http://l4ever.cn/archives/1846">飞信改过IP地址</a>后，我才真正的仔细看过这方面的东西（其实也只是稍看看啦。。。哈哈）<br />
<br />
其实，说真的，飞信这东西，PHP版的在我眼里感觉很深奥，因为要抓包，以前还从来没有这样抓过，总觉得是一件很复杂很难的事情。但自从不能给好友发短信后，我到Zendstudio.net上看过别人回复后，才发现他根本就没有提供。所以就萌发了要自己的写的念头。<br />
<br />
于是找了smartsniff这个抓包工具，找来libfetion，关掉我所有的上网的程序。然后运行他开始抓包。<br />
发现真的很方便。。。<br />
于是就准备开始写了。不用fsockopen，而准备直接采用curl。。。目前刚刚写了一个getSIPC，发现速度好象是比fsockopen的速度快很多。【可能是因为，zendstudio.net他是按字节读取，然后用正则处理获得sipcproxy，而我是直接取回来用simplexml_loadstring，然后直接输出这个对象的值 ？也或许只是一个感觉而己，其实并没有变化？晚上回去输出执行时间看一下就知道了。HOHO】<br />
<br />
慢慢写，因为注意过给好友发短信的功能，是利用SID的，但普通情况下，获取不到SID，必须得先把好友拉回来做一个缓存。这样就可以了。所以本版飞信应该不会公开，否则，谁也不敢使用。【随便说说，还没写完呢。。。。】</p>]]></description>
			<link>http://www.neatstudio.com/show-1094-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-1-1.shtml">PHP</category>
			<pubDate>2010-02-05 10:42</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1093-1.shtml</guid>
			<title>最近一些想做和正在做的事的记录</title>
			<author>gouki</author>
			<description><![CDATA[<p>快过年了。一些在做和想做的事情需要记录一下了</p>
<p>1、kenai.com要关门了。sbPHP没有地方放源码了。只能天天晚上更新了，不过正好又准备重写一下，所以问题不大，影响也小</p>
<p>2、kkread.com，原来想做小说站的。现在改成代码快读，专门用来研究php,js以及wordpress。等数据多一点后，考虑的是提供整合下载，代码压缩等。</p>
<p>3、mzditu.com，是一直想做的，但没有时间做的。在playgoogle.com上也看到一些操作google map的代码，但却一直没有动手过。。。</p>
<p>4、wordpress学习以及插件研究一下。毕竟，我不是纯粹用来玩的。</p>
<p>5、想好好读读优秀代码，想好好看看书</p>
<p>6、学python，NS团队的hihiyou在<a href="http://hihiyou.com">博客</a>上贴了点用python做的编辑器，吸引了我。。。</p>
<p>7、想好好看看JS，多写一些jQuery插件。</p>]]></description>
			<link>http://www.neatstudio.com/show-1093-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-02-04 21:52</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1092-1.shtml</guid>
			<title>kenai.com即将关闭</title>
			<author>gouki</author>
			<description><![CDATA[<p>说起kenai，那其实是要说很多很多东西的，比如说，netbeans整合了它，比如说他现在属于oracle了，比如说他是一个开源代码库，类似于Sf.net等。</p>
<p>但是，今天上午收到一封邮件说，kenai.com即将关闭了，不再为开源代码库提供服务了。</p>
<p>邮件主题很简单：<span title="查看与此标题相关的所有邮件" style="cursor: pointer;" class="cgSelectable" cmd="msgaction_ext:subjectSearch" widget="">The Closure of Project  Kenai。</span></p>
<p><span title="查看与此标题相关的所有邮件" style="cursor: pointer;" class="cgSelectable" cmd="msgaction_ext:subjectSearch" widget="">邮件内容也很简单：</span></p>
<p><span title="查看与此标题相关的所有邮件" style="cursor: pointer;" class="cgSelectable" cmd="msgaction_ext:subjectSearch" widget="">
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol start="1" class="dp-xml">
    <li class="alt"><span><span>It's&nbsp;with&nbsp;a&nbsp;sad&nbsp;heart&nbsp;that&nbsp;we&nbsp;have&nbsp;to&nbsp;announce&nbsp;that&nbsp;the&nbsp;Kenai.com&nbsp;domain&nbsp;will&nbsp;be&nbsp;shutdown&nbsp;as&nbsp;part&nbsp;of&nbsp;the&nbsp;consolidation&nbsp;of&nbsp;project&nbsp;hosting&nbsp;sites&nbsp;now&nbsp;that&nbsp;Sun&nbsp;is&nbsp;a&nbsp;wholly&nbsp;owned&nbsp;subsidiary&nbsp;of&nbsp;Oracle.&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>Project&nbsp;Kenai&nbsp;has&nbsp;always&nbsp;existed&nbsp;as&nbsp;two&nbsp;different&nbsp;things:&nbsp;Kenai&nbsp;the&nbsp;infrastructure,&nbsp;and&nbsp;Kenai&nbsp;the&nbsp;website&nbsp;(Kenai.com).&nbsp;&nbsp;While&nbsp;it&nbsp;has&nbsp;come&nbsp;time&nbsp;to&nbsp;close&nbsp;the&nbsp;domain&nbsp;of&nbsp;Kenai.com,&nbsp;the&nbsp;infrastructure&nbsp;(which&nbsp;is&nbsp;already&nbsp;used&nbsp;under&nbsp;NetBeans.org)&nbsp;will&nbsp;live&nbsp;on&nbsp;to&nbsp;support&nbsp;other&nbsp;domains&nbsp;in&nbsp;the&nbsp;future.&nbsp;&nbsp;</span></li>
</ol>
</div>
然后就是告诉我，该准备一下往其他源代码服务器上迁移，并且提示我可以用subversion等工具把代码拷贝出来。否则。。。唉。</span></p>
<p>可怜我的sbphp就是放在kenai上面的现在，是全完了。不过反正我也准备重写了，倒也无所谓，只是又少了一个源代码迁入的地方。看来netbeans也需要更新了。期待再次整合一个网站。<span title="查看与此标题相关的所有邮件" style="cursor: pointer;" class="cgSelectable" cmd="msgaction_ext:subjectSearch" widget=""><br />
<br />
</span></p>]]></description>
			<link>http://www.neatstudio.com/show-1092-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-02-03 13:30</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1091-1.shtml</guid>
			<title>jQuery操作select</title>
			<author>gouki</author>
			<description><![CDATA[<p>jQuery这个框架方便了我们对于HTML元素的操作，本来以为自己对于Select操作也算是熟悉了，但上午在测试的时候才发现自己了解的还真不多。</p>
<p>看了一下jQuery的一些方法后，理出了一些常用的方法，列在下面：</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="comment">//获取第一个option的值</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;option:first'</span><span>).val();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//最后一个option的值&nbsp;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;option:last'</span><span>).val();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//获取第二个option的值</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;option:eq(1)'</span><span>).val();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//获取选中的值</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test'</span><span>).val();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">'#test&nbsp;option:selected'</span><span>).val();&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//设置值为2的option为选中状态</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">'#test'</span><span>).attr(</span><span class="string">'value'</span><span>,</span><span class="string">'2'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//设置第一个option为选中</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">'#test&nbsp;option:last'</span><span>).attr(</span><span class="string">'selected'</span><span>,</span><span class="string">'selected'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">&quot;#test&quot;</span><span>).attr(</span><span class="string">'value'</span><span>&nbsp;,&nbsp;$(</span><span class="string">'#test&nbsp;option:last'</span><span>).val());&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">&quot;#test&quot;</span><span>).attr(</span><span class="string">'value'</span><span>&nbsp;,&nbsp;$(</span><span class="string">'#test&nbsp;option'</span><span>).eq($(</span><span class="string">'#test&nbsp;option'</span><span>).length&nbsp;-&nbsp;1).val());&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//获取select的长度</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">'#test&nbsp;option'</span><span>).length;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="comment">//添加一个option</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>$(<span class="string">&quot;#test&quot;</span><span>).append(</span><span class="string">&quot;&lt;option&nbsp;value='9'&gt;ff&lt;/option&gt;&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">&quot;&lt;option&nbsp;value='9'&gt;ff&lt;/option&gt;&quot;</span><span>).appendTo(</span><span class="string">&quot;#test&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//添除选中项</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;option:selected'</span><span>).remove();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//指定项选中</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;option:first'</span><span>).remove();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//指定值被删除</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;option'</span><span>).each(</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(&nbsp;$(</span><span class="keyword">this</span><span>).val()&nbsp;==&nbsp;</span><span class="string">'5'</span><span>){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(<span class="keyword">this</span><span>).remove();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>});&nbsp;&nbsp;</span></li>
    <li class="alt"><span>$(<span class="string">'#test&nbsp;option[value=5]'</span><span>).remove();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//获取第一个Group的标签</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;optgroup:eq(0)'</span><span>).attr(</span><span class="string">'label'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="comment">//获取第二group下面第一个option的值&nbsp;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>$(<span class="string">'#test&nbsp;optgroup:eq(1)&nbsp;:option:eq(0)'</span><span>).val();&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;想来应该够用了吧？呵呵</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.neatstudio.com/show-1091-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-2-1.shtml">Javascript</category>
			<pubDate>2010-02-03 09:32</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1090-1.shtml</guid>
			<title>sexy button</title>
			<author>gouki</author>
			<description><![CDATA[<p>对于非美工来说，做一个漂亮的button是件很痛苦的事情。当然，对于一位美工，即使是做个好一点的button，想来也不会太简单。你可以看看这里。。</p>
<p>或许你认为这样的BUTTON很简单：</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=481" target="_blank"><img src="http://www.neatstudio.com/attachments//date_201002/0fb9f1e7879d2cddfa5c8d493d1b6795.jpg" border="0" alt="大小: 9.46 K&#13;尺寸: 295 x 85&#13;浏览: 34 次&#13;点击打开新窗口浏览全图" width="295" height="85" /></a></p>
<p>这样自定义图标的呢？</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=485" target="_blank"><img src="http://www.neatstudio.com/attachments//date_201002/9b40c0f5420049f393209d52239f1f4d.jpg" border="0" alt="大小: 2.72 K&#13;尺寸: 198 x 45&#13;浏览: 23 次&#13;点击打开新窗口浏览全图" width="198" height="45" /></a></p>
<p>那么，这样的呢？</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=486" target="_blank"><img src="http://www.neatstudio.com/attachments//date_201002/b733a05af075cb38fdb0f8c1d6284dfc.jpg" border="0" alt="大小: 4.59 K&#13;尺寸: 262 x 51&#13;浏览: 20 次&#13;点击打开新窗口浏览全图" width="262" height="51" /></a></p>
<p>如果上面都简单，那么还有这么多的样式呢，你认为怎么样？</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=487" target="_blank"><img src="http://www.neatstudio.com/attachments/date_201002/thumb_20ac0d92177463dede4961158ab9630b.jpg" border="0" alt="大小: 40.96 K&#13;尺寸: 290 x 376&#13;浏览: 21 次&#13;点击打开新窗口浏览全图" width="290" height="376" /></a></p>
<p>觉得不错的话。到这里看看：http://sexybuttons.googlecode.com/svn/tags/1.0/index.html</p>
<p>如果觉得真不错，那么到：<a href="http://code.google.com/p/sexybuttons/">http://code.google.com/p/sexybuttons/</a>下载吧。一些小图片加上CSS，不需要再利用js做圆角了。看看作者怎么说？</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span>Sexy&nbsp;Buttons&nbsp;is&nbsp;a&nbsp;HTML/CSS-based&nbsp;framework&nbsp;for&nbsp;creating&nbsp;beautiful&nbsp;web&nbsp;site&nbsp;buttons.&nbsp;These&nbsp;stylish,&nbsp;attention&nbsp;getting&nbsp;buttons&nbsp;can&nbsp;be&nbsp;used&nbsp;for&nbsp;calls&nbsp;to&nbsp;action&nbsp;wherever&nbsp;user&nbsp;interaction&nbsp;is&nbsp;desired.&nbsp;Compare&nbsp;Sexy&nbsp;Buttons&nbsp;with&nbsp;the&nbsp;standard&nbsp;browser&nbsp;buttons:&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>The&nbsp;framework&nbsp;is&nbsp;focused&nbsp;on&nbsp;being&nbsp;simple&nbsp;yet&nbsp;flexible&nbsp;and&nbsp;strives&nbsp;to&nbsp;be&nbsp;as&nbsp;easy&nbsp;to&nbsp;implement&nbsp;as&nbsp;possible.&nbsp;&nbsp;</span></li>
    <li class=""><span>Button&nbsp;Features&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;The&nbsp;underlying&nbsp;HTML&nbsp;can&nbsp;use&nbsp;either&nbsp;<span class="tag">&lt;</span><span class="tag-name">button</span><span class="tag">&gt;</span><span>&nbsp;or&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;elements.&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;They&nbsp;are&nbsp;dynamic&nbsp;and&nbsp;shrink/expand&nbsp;to&nbsp;fit&nbsp;their&nbsp;text&nbsp;labels.&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;There&nbsp;are&nbsp;three&nbsp;states:&nbsp;normal,&nbsp;hover,&nbsp;and&nbsp;active.&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;The&nbsp;labels&nbsp;can&nbsp;include&nbsp;icons.&nbsp;Use&nbsp;one&nbsp;of&nbsp;the&nbsp;1000+&nbsp;included&nbsp;Silk&nbsp;icons&nbsp;or&nbsp;use&nbsp;your&nbsp;own.&nbsp;Icons&nbsp;are&nbsp;specified&nbsp;via&nbsp;HTML&nbsp;class&nbsp;attribute.&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;They&nbsp;use&nbsp;the&nbsp;sliding&nbsp;doors&nbsp;CSS&nbsp;technique&nbsp;for&nbsp;increased&nbsp;performance.&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;They&nbsp;support&nbsp;different&nbsp;skins&nbsp;by&nbsp;simply&nbsp;changing&nbsp;an&nbsp;HTML&nbsp;class&nbsp;attribute.&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;A&nbsp;layered&nbsp;Photoshop&nbsp;template&nbsp;is&nbsp;provided&nbsp;to&nbsp;assist&nbsp;in&nbsp;creating&nbsp;new&nbsp;skins.&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Easy&nbsp;to&nbsp;implement.&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;No&nbsp;Javascript&nbsp;required.&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>这些可是支持所有浏览器的哦</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.neatstudio.com/show-1090-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-02-02 13:59</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1089-1.shtml</guid>
			<title>开心网转贴：残酷的现实</title>
			<author>gouki</author>
			<description><![CDATA[<p>　　张二狗是偶的同学。一直以来，偶们都是被人拿来作为对比的两个极端，偶曾经是他的梦魇，现在他却是偶的梦魇。现将偶和他的人生历程列出来，再一次深刻感受风水轮流转这一永恒真理。<br />
<br />
1、小学入学第一天，偶对老师说会背301首唐诗做100以内加减法，口齿清晰条理清楚，老师对偶眉开眼笑。　　<br />
小学入学第一天，张二狗对老师的提问一问摇头三不知，神情呆滞语无伦次，老师对他暗暗皱眉。<br />
<br />
2、小学二年级，偶考试次次第一，终于在一次满分后肩膀上多了三条杠杠。　　<br />
小学二年级，张二狗和人打架有赢有输，终于在一次大败后脸上多了三条疤疤<br />
<br />
3、小学三年级，期末考试偶再次拿到语文数学两门功课双一百，老爸被老师请到家长会上介绍家庭教育经验。　　<br />
小学三年级，期末考试张二狗再次拿到语文数学两门功课总分三十，老爸被老师请进办公室聆听家庭教育经验。<br />
<br />
4、小学四年级，领导前来视察我校，偶作为少先队代表上台发言，被大家称为主席台上的模范学生。　　<br />
小学四年级，校长宣布从严治校，张二狗作为闯祸精代表上台检讨，被大家说是站壁角的形象大使。<br />
<br />
5、小学五年级，偶的作文《一个难忘的晚上》在某次大赛中获奖，老师陪偶到省城领奖并游玩了一天。　　<br />
小学五年级，张二狗在一个难忘的晚上爬墙进入某个工厂搬运废铜，门卫陪他到派出所领奖并休养了一天。<br />
<br />
6、升初中了，听说初中的几个班主任为抢偶到自己班上而争得面红耳赤。　　<br />
升初中了，听说初中的几个班主任为把张二狗踢到别人班上闹得不可开交。<br />
<br />
7、初一时，偶爸在酒店设宴庆功，为偶在中学生奥数中获奖请别人一起高兴。<br />
初一时，张二狗爸在酒店设宴赔罪，为张二狗闯的祸请别人不要追究<br />
<br />
8、初二时，偶光荣地加入了学校里的团组织　　<br />
初二时，张二狗光荣地加入了学校里的痞子帮<br />
<br />
9、初三时，班上的班花给偶写情书，情书还没到偶手里就被班主任发现没收，班主任警告班花：不得妨碍偶考重点高中　　<br />
初三时，张二狗给班上的胖妞如花递纸条，如花转身把纸条扔进垃圾桶，还告诫张二狗：不要妨碍她混初中文凭<br />
<br />
10、初中毕业了，偶理所当然地进入了重点高中　　<br />
初中毕业了，张二狗顺理成章地进入社会深造<br />
<br />
11、毕业那天，偶们初中的门卫李大爷指着偶教育大孙子：一定要像偶这样好好学习天天向上，将来才能做个受尊敬的人　　<br />
毕业那天，偶们初中的门卫李大爷指着张二狗教育大孙子：千万不要像他这样惹是生非门门红灯，将来一定是个受鄙视的人<br />
<br />
12、高中三年，偶做过班长团支书学生会主席，获得了一个又一个荣誉、拿到了一笔又一笔的奖学金　　<br />
社会三年，张二狗做过混混推销员包工头，积累了一条又一条的人脉，攒下了一笔又一笔资金<br />
<br />
13、那个黑色七月，偶如愿考上省城的大学　　<br />
那个火热七月，张二狗如愿在省城注册公司<br />
<br />
14、大学里，偶在学海遨游　　<br />
创业中，张二狗在商海搏击<br />
<br />
15、毕业那年，优秀毕业生偶进入人才市场找工作，处处碰壁后不得不把薪金要求降?<br />
创业四年，民营企业家张二狗进入人才市场找员工，广受追捧后不得不把学历门槛提高到硕士起点，很轻松招揽一群高学历高层次的人才，感受了一夜之间从丑小鸭到白天鹅的荣耀<br />
<br />
16、偶的破永久跑遍全省城，孤身一人凄凄凉凉四处寻找租住的房子　　<br />
张二狗的保时捷跑遍全省城，市长区长作陪四处寻找建二狗大厦和工业园区的地块<br />
<br />
17、当红女明星来省城开演唱会，偶买不到演唱票，便在体育馆外和女朋友傻站半宿，还被女朋友骂：买不到票，真没用　　<br />
当红女明星来省城开演唱会，演唱结束后张二狗亲自开着奔驰把明星接到别墅共度良宵，还被女明星夸：偌大家业，你真行<br />
<br />
18、偶手头紧张，也想学张二狗白手起家自主创业，从小商品市场批发了一大堆东东搞兼职做起了推销，几星期内亏了一大笔，暗自感慨：做生意原来这么难　　<br />
张二狗闲来无事，也想进大学校门学习深造增加内涵，请教授吃饭泡校里的美眉就是没认真上课，几年内拿到了MBA学位，暗自感慨：读书原来这么简单<br />
<br />
19、七夕节，别人介绍的恐龙女朋友嫌弃偶没房没车没出息，和偶吹灯拔蜡分道扬镳　　<br />
七夕节，大学里的校花因为张二狗家大业大前程大，向他眉目传情投怀送抱<br />
<br />
20、家门口，偶哀求俗气的土包子房东缓交房费时唯唯诺诺支支吾吾，净给大学生丢脸　　<br />
电视上，张二狗对着漂亮的财经频道女主持人大谈企业文化?　　<br />
<br />
21、房价飞涨，偶忽然发现在省城有一套房子只能是一个梦想，老爹老妈来省城看过偶的租住房，回家后伤心不已　　<br />
房价飞涨，张二狗把一套又一套的房子赠给各类美女，一小美女的老爹老妈来省城看过二狗赠的复式景观房，回家后得意不已<br />
<br />
22、春节偶回家，没人理睬，路过当年就读的初中，听说里面在办校庆，想去看看却被拒之门外，门卫李大爷指着偶教育小孙子：不要学习这个人，读了这么多年书还是一穷二白，连自己都养不活　　<br />
春节张二狗回家，县长接驾，还参加当年就读的初中特意举办的校庆，张董在校庆上砸下巨额赞助，门卫李大爷指着张董教育小孙子：你要像主席台上的这个人学习，白手起家富甲一方，连亲戚都沾光<br />
<br />
23、十几年前，老师感叹，要是所有学生都像偶一样该有多好　　<br />
十几年后，老师感叹，要是所有学生都想张二狗一样该有多好</p>]]></description>
			<link>http://www.neatstudio.com/show-1089-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-6-1.shtml">Literature</category>
			<pubDate>2010-02-01 09:04</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1088-1.shtml</guid>
			<title>可怜的小家伙</title>
			<author>gouki</author>
			<description><![CDATA[<p>从元旦开始，小家伙就感冒不断，当然，鼻涕也是不停的在流<br />
上次我说过发了风疹块，好象是好了。<br />
前两天，突然又开始感冒，流鼻涕，而且今天身上又开始发小点点。真的不知道是水痘还是别的什么。<br />
皮肤过敏也不能这样吧？难道夏天生的小孩抵抗能力这么差？<br />
唉。希望好起来吧，今天鼻涕已经流了整一天了。看着我非常不开心，不知道他的身体什么时候能够恢复。<br />
算起来，有一个月了呢。<br />
唉。祈祷一下吧。</p>]]></description>
			<link>http://www.neatstudio.com/show-1088-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-11-1.shtml">Baby</category>
			<pubDate>2010-01-30 20:56</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1087-1.shtml</guid>
			<title>一小段音乐：我没有钱，我不要脸</title>
			<author>gouki</author>
			<description><![CDATA[<p><script language="JavaScript" src="http://www.neatcn.com/plugins/audioplayer/audio-player.js"></script> <object type="application/x-shockwave-flash" data="http://www.neatcn.com/plugins/audioplayer/player.swf" id="audioplayer1" height="24" width="290">
<param name="movie" value="http://www.neatcn.com/plugins/audioplayer/player.swf">
<param name="FlashVars" value="playerID=1&amp;autostart=no&amp;loop=yes&amp;soundFile=http://www.neatcn.com/attachment/dont_need_face.mp3">
<param name="quality" value="high">
<param name="menu" value="false">
<param name="wmode" value="transparent">
</object></p>
<p>从amr转为mp3并截取过的。。</p>
<p>AMR是手机音乐，下载了：total video converter，先用它把amr转换成MP3</p>
<p>然后用goldwave把Mp3进行了编辑。最后就是这么一小段了。。</p>
<p>因为杂音过多。所以仅保留这段经典的</p>
<p><font color="#ff0000"><strong>注：</strong></font></p>
<blockquote>
<p>由于有很多朋友強烈抗議，因此，把自動播放去掉了。請主動點擊。謝謝</p>
<p>一旦點擊就自動循環啦，請仔細聽，歌詞是：我沒有錢，我不要臉。。。</p>
</blockquote>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.neatstudio.com/show-1087-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-01-29 11:01</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1086-1.shtml</guid>
			<title>ThinkPHP经常会遗忘的事</title>
			<author>gouki</author>
			<description><![CDATA[<p>使用THinkPHP框架开发程序，经常容易遗忘的事是什么呢？<br />
1、app runtime没有及时更新<br />
2、datamodel 缓存在更改表结构后没有刷新<br />
3、数据缓存设定的时间太长。而在更改数据后没有主动刷新</p>
<p>4、模版缓存中的 include file 一般不会强制刷新。。</p>
<p>以上是开发注意事情，如果你发现改了一些设置或者其他什么后，死活不正常，请先检查以上四样。</p>]]></description>
			<link>http://www.neatstudio.com/show-1086-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-4-1.shtml">PHP Framework</category>
			<pubDate>2010-01-28 15:01</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1085-1.shtml</guid>
			<title>孟宪会之AJAX（XMLHttpRequest）进行跨域请求方法详解</title>
			<author>gouki</author>
			<description><![CDATA[<p>跨域请求，顾名思义，就是一个站点中的资源去访问另外一个不同域名站点上的资源。这种情况很常见，比如说通过 style 标签加载外部样式表文件、通过 img 标签加载外部图片、通过 script 标签加载外部脚本文件、通过 Webfont 加载字体文件等等。默认情况下，脚本访问文档属性等数据采用的是同源策略（Same origin policy）。<br />
<br />
那么，什么是同源策略呢？如果两个页面的协议、域名和端口是完全相同的，那么它们就是同源的。同源策略是为了防止从一个地址加载的文档或脚本访问或者设置 从另外一个地址加载的文档的属性。如果两个页面的主域名相同，则还可以通过设置 document.domain 属性将它们认为是同源的。<br />
<br />
随着 Web2.0 和 SNS 的兴起，Web 应用对跨域访问的需求也越来越多，但是，在脚本中进行跨域请求是受安全性限制的，Web 开发人员迫切需要提供一种更安全、方便的跨域请求方式来融合（Mashup）自己的 Web 应用。这样做的一个好处就是可以将请求分摊到不同的服务器，减轻单个服务器压力以提高响应速度；另外一个好处是可以将不同的业务逻辑分布到不同的服务器上 以降低负载。<br />
<br />
值得庆幸的是，跨域请求的标准已经出台，主流浏览器也已经实现了这一标准。W3C 工作组中的 Web Applications Working Group（Web 应用工作组）发布了一个 Cross-Origin Resource Sharing（跨域资源共享，该规范地址：http://www.w3.org/TR/access-control/和http: //dev.w3.org/2006/waf/access-control/） 推荐规范来解决跨域请求的问题。该规范提供了一种更安全的跨域数据交换方法。具体规范的介绍可以访问上面提供的网站地址。值得注意的是：该规范只能应用在 类似 XMLHttprequest 这样的 API 容器内。IE8、Firefox 3.5 及其以后的版本、Chrome浏览器、Safari 4 等已经实现了 Cross-Origin Resource Sharing 规范，已经可以进行跨域请求了。<br />
<br />
Cross-Origin Resource Sharing 的工作方式是通过添加 HTTP 头的方法来判断哪些资源允许 Web 浏览器访问该域名下的信息。然而，对于那些 HTTP 请求导致用户数据产生副作用的请求方法（特别是对于除了GET、某些 MIME 类型的 POST 之外的 HTTP方法），该规范要求浏览器对请求进行&ldquo;预先验&rdquo;，通过发送 HTTP 的 OPTIONS 请求头询问服务器有哪些支持的方法，在征得服务器的同意后，再使用实际的 HTTP 请求方法发送实际的请求。服务器也可以通知客户端是否需要将验证信息（如 Cookie 和 HTTP Authentication 数据）随同请求一起发送。<br />
<br />
请看详细。。。</p><br /><br /><a href="http://www.neatstudio.com/show-1085-1.shtml" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.neatstudio.com/show-1085-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-2-1.shtml">Javascript</category>
			<pubDate>2010-01-28 11:38</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1084-1.shtml</guid>
			<title>合理使用google reader</title>
			<author>gouki</author>
			<description><![CDATA[<p>google reader恐怕很多人都在用吧。当然在国内也有很多人使用有道的RSS订阅，鲜果的RSS订阅。<br />
不过，我仍然是说的google reader，在我的博客里以前也介绍过。<br />
<br />
今天我说的合理使用Google reader，是指另类的用法。<br />
一些技术型 的博客，往往都是在国外，而正常的时候，我们好象都无法访问，怎么办？只能借着偶尔翻墙的时机，订阅那些博客的RSS源。如果你用的是国内的RSS订阅，那么也很有可能是无法订阅的。所以，GoogleReader就派用场了。<br />
再深再远，他都能够帮你订阅回来，只是。。。无法回复而己<br />
<br />
借着这个功能，我订阅了几个写mysql proxy的作者的博客。<br />
当然更重要的是，我订阅了twitter上的两位：孙燕姿和萧亚轩。。<br />
<br />
所以，懂的喽。。。什么非死不可啦，推特啦，博客班点啦。哈哈。。。都可以尝试订阅你所关注的对象，除了这个嘛。。。。你当然仍然不能回复 。除非你为google reader推插件。。。<br />
如果你用firefox写个插件，或许也能够回复哦？</p>]]></description>
			<link>http://www.neatstudio.com/show-1084-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-01-27 10:19</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1083-1.shtml</guid>
			<title>Ways to debug your jQuery or JavaScript codes</title>
			<author>gouki</author>
			<description><![CDATA[<p>Debugging your client code is rather a normal procedures for any web developers. Everyone will shout Firebug! yeah, me too. But Firebug is great for syntax detection but how about logic problem? In this article i will share with you some of the ways i used to debug my JavaScript or jQuery codes when I&rsquo;m developing my web application. I will also share with you a trick that i used on my code to alert me that a bug occurs in a particular script since i don&rsquo;t get many helpful users nowadays.</p>
<h2>Alert Them Out</h2>
<p>The most simple and basic way of debugging is by using JavaScript alert function. This is old but is quite useful sometimes. Especially when you do not want to remember other debugging methods. It&rsquo;s pretty simple, alert the message you want to see. If the alert doesn&rsquo;t appear, this means that the error is before the alert statement. I usually do this when I&rsquo;m debugging IE although there are tools available for IE.</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>alert(</span><span class="string">&quot;The&nbsp;Bug&nbsp;Is&nbsp;Somewhere&nbsp;Before&nbsp;ME!&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>
<h2>Log them up</h2>
<p>Well, if you are using WebKit browsers for your development (FireFox, Chrome, Safari) you may want to try this.</p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">if</span><span>&nbsp;(window.console)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;window.console.log(<span class="string">&quot;The&nbsp;Bug&nbsp;is&nbsp;killing&nbsp;me&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>What this does is to log the string &lsquo;The Bug is killing me&rsquo; into the console such as Firebug. It&rsquo;s always better than using alert and see this infinity loop that keep popping out until you are force to shut down your browser!</p>
<h2>Log them with jQuery</h2>
<p>The above two methods work both in jQuery and JavaScript. But this only function well in jQuery. This is definitely not something i came up with but its from <a href="http://hungred.com/goto/http://happygiraffe.net/blog/2007/09/26/jquery-logging/" onclick="javascript:pageTracker._trackPageview('/outbound/article/happygiraffe.net');">Dominic Mitchell</a></p>
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span>jQuery.fn.log&nbsp;=&nbsp;</span><span class="keyword">function</span><span>&nbsp;(msg)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;console.log(<span class="string">&quot;%s:&nbsp;%o&quot;</span><span>,&nbsp;msg,&nbsp;</span><span class="keyword">this</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">this</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>};&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;The above creates a function, &lsquo;log&rsquo;. This function will do exactly similar to the one above but the differences is that it format the string a little bit before displaying out to the console. This is good for debugging your long chaining with jQuery. Although the previous method also can be used to debug chaining but it will required an additional line instead of including it into the chaining process. So you can debug this way,
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>$(root).find(</span><span class="string">'li.source&nbsp;&gt;&nbsp;input:checkbox'</span><span>).log(</span><span class="string">&quot;sources&nbsp;to&nbsp;uncheck&quot;</span><span>).removeAttr(</span><span class="string">&quot;checked&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</p>
<h2>Try and catch</h2>
<p>In JavaScript, you can try to catch the error in a particular scope. This way, it won&rsquo;t propagate to other section of the code.
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">try</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="comment">//Run&nbsp;some&nbsp;code&nbsp;here</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">catch</span><span>(err)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="comment">//Handle&nbsp;errors&nbsp;here</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</p>
<p>&nbsp;</p>
<p>&nbsp;This is pretty good when you are trying to debug one of the many function in your JavaScript.</p>
<h2>Catch them all</h2>
<p>The last one i am going to show you is to catch any one of the error into a particular function instead of using multiple try and catch.
<div class="codeText">
<div class="codeHead">JavaScript代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;handleError(e)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(&rsquo;An&nbsp;error&nbsp;has&nbsp;occurred!\n&rsquo;+e);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>window.onerror&nbsp;=&nbsp;handleError;&nbsp;&nbsp;</span></li>
</ol>
</div>
</p>
<p>This will handle any error occurs in your JavaScript code to the function &lsquo;handleError&rsquo;. You will want to use this at the end of your script. Especially if you want to be informed whether a particular function or script has malfunction and the users are not reporting. Basically, what you can do is to gather all information and placed them into a String or JSON. Using ajax to delivery these information to your email or database. This way, your support team will have an idea which part are having problems and your system will be more reliable. (testing doesn&rsquo;t means 100% bug free) The information that you may want to know are usually located at Navigator Object in JavaScript.</p>
<h2>Summary</h2>
<p>These are the methods i usually look at when debugging my own client script. It might not be everything but i hope it can be useful to some of you out there. Hope you learn something!</p>
<p>&nbsp;</p>
<p>原文来自于：http://hungred.com/2009/08/04/useful-information/ways-debug-jquery-javascript-codes/</p>
<h4>Author: <a href="http://hungred.com/"> 					Clay Lua</a></h4>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.neatstudio.com/show-1083-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-2-1.shtml">Javascript</category>
			<pubDate>2010-01-26 15:34</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1082-1.shtml</guid>
			<title>互联网时代，每天都是新闻，篱笆域名被封</title>
			<author>gouki</author>
			<description><![CDATA[<p>互联网时间，每天都有一些新闻啊。<br />
这不，前段时间it168,51,博客大巴刚刚关掉没多久，现在篱笆网也被关掉了。去新网查一下，输入域名：</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=479" target="_blank"><img src="http://www.neatstudio.com/attachments//date_201001/6362880277cced54b76f51741ddf85c6.jpg" border="0" alt="大小: 24.88 K&#13;尺寸: 386 x 290&#13;浏览: 34 次&#13;点击打开新窗口浏览全图" width="386" height="290" /></a></p>
<p>然后会弹出：</p>
<p><a href="http://www.neatstudio.com/attachment.php?id=480" target="_blank"><img src="http://www.neatstudio.com/attachments//date_201001/0f7fa523fc4d54a934873ef8d55585e6.jpg" border="0" alt="大小: 24.69 K&#13;尺寸: 498 x 257&#13;浏览: 30 次&#13;点击打开新窗口浏览全图" width="498" height="257" /></a></p>
<p>汗死，居然是这种原因。看来举报人或者工信部之类的对于这类事情很痛恨啊。</p>
<p>不过。liba.cn还是可以访问的。。论坛嘛 ，又换了域名了。不知道下一个会是谁去举报。。。真有意思。还好我这里不允许用户输入【是评论都需要审核】</p>
<p>唉。还是审核好啊。天啊，人人自危？</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.neatstudio.com/show-1082-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-5-1.shtml">Misc</category>
			<pubDate>2010-01-26 15:01</pubDate>
		</item>
		<item>
			<guid>http://www.neatstudio.com/show-1081-1.shtml</guid>
			<title>万能验证码：recaptcha</title>
			<author>gouki</author>
			<description><![CDATA[<p>说是万能，意思是他支持多种程序语言。而且调用方式也非常简单，当然官方也有例子<br />
Recaptcha，这是一个验证码程序，其实真的很方便，如果你一天到晚还在为着验证码被别人破解而不停的改进自己的验证码时，你可以用它;如果你不会写验证码程序，你可以用它;如果你想支持语音验证，你也可以用它;如果你想有更多的功能，当然你一样可以用它。</p>
<p>使用方法比较简单，大致如下：</p>
<ol>
    <li><a href="http://code.google.com/p/recaptcha/downloads/list?q=label:phplib-Latest">Download</a> the reCAPTCHA Library, unzip it, and copy recaptchalib.php to the directory where your forms live.先到reCAPTCHA下载PHP类库，解压拷到你的线上目录中</li>
    <li>If you haven't done so, <a href="http://recaptcha.net/api/getkey?app=php">sign up for an API key</a>. 准备完后，你可以注册并申请一下API</li>
    <li>Now we're ready to start modifying your code. First, we'll add code to display the CAPTCHA:然后，我们开始修改代码。首先，我们先添加显示CAPTCHA验证码的代码&nbsp;
    <div class="codeText">
    <div class="codeHead">PHP代码</div>
    <ol start="1" class="dp-c">
        <li class="alt"><span><span class="keyword">require_once</span><span>(</span><span class="string">'recaptchalib.php'</span><span>);&nbsp;&nbsp;</span></span></li>
        <li class=""><span><span class="vars">$publickey</span><span>&nbsp;=&nbsp;</span><span class="string">&quot;...&quot;</span><span>;&nbsp;</span><span class="comment">//&nbsp;you&nbsp;got&nbsp;this&nbsp;from&nbsp;the&nbsp;signup&nbsp;page</span><span>，这里就是你刚才申请的API KEY&nbsp; <br />
        </span></span></li>
        <li class="alt"><span><span class="func">echo</span><span>&nbsp;recaptcha_get_html(</span><span class="vars">$publickey</span><span>);&nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    </li>
</ol>
<p>&nbsp;&nbsp; 4.In the code that processes the form submission, you need to add code to validate the CAPTCHA. Otherwise, the CAPTCHA will appear, but the answers won't be checked. The validation code looks like:在提交处理页，你需要添加CAPTCHA验证代码。否则，CAPTCHA并不会验证他们。验证代码大致如下：
<div class="codeText">
<div class="codeHead">PHP代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span class="keyword">require_once</span><span>(</span><span class="string">'recaptchalib.php'</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="vars">$privatekey</span><span>&nbsp;=&nbsp;</span><span class="string">&quot;...&quot;</span><span>;&nbsp; //申请的API KEY<br />
    </span></span></li>
    <li class="alt"><span><span class="vars">$resp</span><span>&nbsp;=&nbsp;recaptcha_check_answer&nbsp;(</span><span class="vars">$privatekey</span><span>,&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="vars">$_SERVER</span><span>[</span><span class="string">&quot;REMOTE_ADDR&quot;</span><span>],&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="vars">$_POST</span><span>[</span><span class="string">&quot;recaptcha_challenge_field&quot;</span><span>],&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="vars">$_POST</span><span>[</span><span class="string">&quot;recaptcha_response_field&quot;</span><span>]);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">if</span><span>&nbsp;(!</span><span class="vars">$resp</span><span>-&gt;is_valid)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;<span class="keyword">die</span><span>&nbsp;(</span><span class="string">&quot;The&nbsp;reCAPTCHA&nbsp;wasn't&nbsp;entered&nbsp;correctly.&nbsp;Go&nbsp;back&nbsp;and&nbsp;try&nbsp;it&nbsp;again.&quot;</span><span>&nbsp;.&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="string">&quot;(reCAPTCHA&nbsp;said:&nbsp;&quot;</span><span>&nbsp;.&nbsp;</span><span class="vars">$resp</span><span>-&gt;error&nbsp;.&nbsp;</span><span class="string">&quot;)&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
</p>
<p>看起来是不是很简单？现在是不是不再犹豫了？？</p>
<p>更多参考和参数可以查看这里：http://recaptcha.net/plugins/php/</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
			<link>http://www.neatstudio.com/show-1081-1.shtml</link>
			<category domain="http://www.neatstudio.com/category-1-1.shtml">PHP</category>
			<pubDate>2010-01-25 16:33</pubDate>
		</item>
	</channel>
</rss>
