<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dexbol</title>
	<atom:link href="http://dexbol.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://dexbol.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 22 Dec 2009 14:13:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>如何使YUICompressor保留特定的注释</title>
		<link>http://dexbol.com/blog/archives/160</link>
		<comments>http://dexbol.com/blog/archives/160#comments</comments>
		<pubDate>Sat, 19 Sep 2009 04:11:55 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=160</guid>
		<description><![CDATA[YUICompressor是很好的javascript压缩工具，它会删除所有的注释和空白符，但有时候我们需要保留一些注释 ，比如版权之类的信息。这个时候我们可以利用YUICompressor不删除ie条件注释的特征来实现：

/*cc_on/*******************************
 *
 *      your information here ........
 *
 *
 ***************************************@*/

Update: 原来可以这样：

/*!
 * information
 */

泪奔&#8230;.
]]></description>
			<content:encoded><![CDATA[<p>YUICompressor是很好的javascript压缩工具，它会删除所有的注释和空白符，但有时候我们需要保留一些注释 ，比如版权之类的信息。这个时候我们可以利用YUICompressor不删除ie条件注释的特征来实现：</p>
<pre class="code">
/*cc_on/*******************************
 *
 *      your information here ........
 *
 *
 ***************************************@*/
</pre>
<p>Update: 原来可以这样：</p>
<pre class="code">
/*!
 * information
 */
</pre>
<p>泪奔&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/160/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ie中操作flash节点或其父节点会导致javascript无法调用flash函数</title>
		<link>http://dexbol.com/blog/archives/150</link>
		<comments>http://dexbol.com/blog/archives/150#comments</comments>
		<pubDate>Sun, 09 Aug 2009 10:14:00 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/archives/150</guid>
		<description><![CDATA[这个bug折腾了我和flasher半天的时间，最后也没找到解决办法，只能用其他方法代替。
用ie打开demo就可以见证这个神奇的bug了。页面加载完后，不管是flash调用javascript还是javascript调用flash都没问题，但当点击上面的按钮，移动flash父节点时，javascript便无法调用flash输出的方法了。
]]></description>
			<content:encoded><![CDATA[<p>这个bug折腾了我和flasher半天的时间，最后也没找到解决办法，只能用其他方法代替。</p>
<p>用ie打开<a href="http://dexbol.com/demo/javascript/ExternalInterfaceExample.html">demo</a>就可以见证这个神奇的bug了。页面加载完后，不管是flash调用javascript还是javascript调用flash都没问题，但当点击上面的按钮，移动flash父节点时，javascript便无法调用flash输出的方法了。</p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/150/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>unicode编码转换工具</title>
		<link>http://dexbol.com/blog/archives/146</link>
		<comments>http://dexbol.com/blog/archives/146#comments</comments>
		<pubDate>Mon, 27 Jul 2009 12:10:29 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=146</guid>
		<description><![CDATA[有时候我们想把javascript写的隐晦一些,比如:alert(&#8217;break wind&#8217;).这个时候比较简单的方法就是把js代码用16进制的unicode编码来表示,然后eval一下.像下面这样：

alert('break wind');
//还可以这样:
eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0062\u0072\u0065\u0061\u006b\u0020\u0077\u0069\u006e\u0064\u0027\u0029\u003b');

为了方便我写了一个转换小工具,这样就能很方便的对js代码进行编码了。
关于网页编码的问题推荐阅读这篇文章
]]></description>
			<content:encoded><![CDATA[<p>有时候我们想把javascript写的隐晦一些,比如:alert(&#8217;break wind&#8217;).这个时候比较简单的方法就是把js代码用16进制的unicode编码来表示,然后eval一下.像下面这样：</p>
<pre class="code">
alert('break wind');
//还可以这样:
eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0062\u0072\u0065\u0061\u006b\u0020\u0077\u0069\u006e\u0064\u0027\u0029\u003b');
</pre>
<p>为了方便我写了一个<a href="http://dexbol.com/demo/javascript/unicode_encode.html">转换小工具</a>,这样就能很方便的对js代码进行编码了。</p>
<p>关于网页编码的问题推荐阅读<a href="http://ued.koubei.com/?p=537">这篇文章</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/146/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>blog修改记录</title>
		<link>http://dexbol.com/blog/archives/140</link>
		<comments>http://dexbol.com/blog/archives/140#comments</comments>
		<pubDate>Sat, 04 Jul 2009 16:58:17 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=140</guid>
		<description><![CDATA[
周末对此站做了如下修改。


取消了对internet explorer 6 的支持，并且更改了浏览器升级提示，现在使用 IE6 Update。
去除了更改字体大小的功能，因为大部分现代浏览器都支持字体缩放了。
加深了字体颜色，使文字看起来更省力。
and so on &#8230;

]]></description>
			<content:encoded><![CDATA[<p>
周末对此站做了如下修改。
</p>
<ul>
<li>取消了对internet explorer 6 的支持，并且更改了浏览器升级提示，现在使用 <a href="http://ie6update.com/">IE6 Update</a>。</li>
<li>去除了更改字体大小的功能，因为大部分现代浏览器都支持字体缩放了。</li>
<li>加深了字体颜色，使文字看起来更省力。</li>
<li>and so on &#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/140/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置yui 3.x Loader</title>
		<link>http://dexbol.com/blog/archives/127</link>
		<comments>http://dexbol.com/blog/archives/127#comments</comments>
		<pubDate>Mon, 29 Jun 2009 10:37:54 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=127</guid>
		<description><![CDATA[
感觉yui 3最大特点之一就是模块化，官网给出的例子中也都是从YUI().use()开始的。为了让这种模板化具有可行性，yui提供了一套管理和加载模块的机制(Loader,Get)和ydn提供的combine功能.这样做很好，但它太依赖ydn提供的cdn了，对于个人站来说这样可能既方便又不用占用自己的空间，但对于其他公司来说将js框架放在yahoo提供的免费CDN上肯定不放心，而且没有足够的控制权。要解决这个问题只能让本公司的运维部门也提供一个有cobine功能的cdn网络，但这样会增加很多成本，甚至根本就无法实现（比如公司的cnd采用HTTP 1.0协议）。然而没有cobine又会增加很多http请求次数，比如加载一个&#8221;node&#8221;，需要请求7个js文件。


一个折中的方法就是根据自己的需求把小模块合成大模块一并加载，可以通过增加Loader中META.modules的属性来实现，比如在modules里添加customize模块：


customize:{
	requires:[YUIBASE]
},
customize2:{
	requires:[YUIBASE,'coustomize']
}

然后在build文件下建立 customize/customize-min.js ， 在这个js文件里把需要的多个模块组合进去，customize2同理。

近期准备在一个相对独立的项目中使用yui 3.0.0b1 ，顺便看下yui 3的性能如何。这是我第一次接触yui，感觉yui的确为团队开发做了很多工作，比如模块化和沙盒。
]]></description>
			<content:encoded><![CDATA[<p>
感觉yui 3最大特点之一就是模块化，官网给出的例子中也都是从YUI().use()开始的。为了让这种模板化具有可行性，yui提供了一套管理和加载模块的机制(Loader,Get)和ydn提供的combine功能.这样做很好，但它太依赖ydn提供的cdn了，对于个人站来说这样可能既方便又不用占用自己的空间，但对于其他公司来说将js框架放在yahoo提供的免费CDN上肯定不放心，而且没有足够的控制权。要解决这个问题只能让本公司的运维部门也提供一个有cobine功能的cdn网络，但这样会增加很多成本，甚至根本就无法实现（比如公司的cnd采用HTTP 1.0协议）。然而没有cobine又会增加很多http请求次数，比如加载一个&#8221;node&#8221;，需要请求7个js文件。
</p>
<p>
一个折中的方法就是根据自己的需求把小模块合成大模块一并加载，可以通过增加Loader中META.modules的属性来实现，比如在modules里添加customize模块：
</p>
<pre class="code">
customize:{
	requires:[YUIBASE]
},
customize2:{
	requires:[YUIBASE,'coustomize']
}
</pre>
<p>然后在build文件下建立 customize/customize-min.js ， 在这个js文件里把需要的多个模块组合进去，customize2同理。</p>
<p>
近期准备在一个相对独立的项目中使用yui 3.0.0b1 ，顺便看下yui 3的性能如何。这是我第一次接触yui，感觉yui的确为团队开发做了很多工作，比如模块化和沙盒。</p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/127/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>并发下载javascript</title>
		<link>http://dexbol.com/blog/archives/119</link>
		<comments>http://dexbol.com/blog/archives/119#comments</comments>
		<pubDate>Sat, 23 May 2009 00:41:21 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=119</guid>
		<description><![CDATA[原文:http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/  作者: Steve Souders  译言地址: http://www.yeeyan.com/articles/view/dexbol/40162
越来越多的网站演化成了web2.0应用程序，javascript文件也随之增加，但javascript对网站的性能有负面影响。 在主流浏览器(ie6,7)里javascript会从两个方面阻碍页面呈现：

script标签下面的网页资源在script加载完之前会停止请求、下载。
script标签下面的html元素在script加载完之前会停止渲染。

这个demo说明了这两种情况。demo页面里包含两个外部javascript文件 接下来是图片、css、和iframe，下面的http 瀑布图表是在ie7下首次访问demo页的情况。从图上可以看到：第一个script标签阻碍了它下面所有资源的下载，接着第二个script标签又 阻碍了所有下载，最后img css 和iframe 并行下载。 同时注意页面渲染，你会发现script标签上面的段落文本瞬间就呈现了，然而其他的html元素在两个script加载完之后才一并显示 出来。
 在ie6/7 firefox2/3 Safari3 Chrome1 和 opera下 script标签会阻碍下载
浏览器是单线程的，因此在script执行的时候不下载其他资源是可以理解的，但没有理由让浏览器在script下载的时候阻碍其他资源的下载,还好最新的浏览器(ie8,safari 4,chrome 2)已经 意识到这点了。下面的图标是在ie8下首次访问刚才的demo页时的http瀑布图， 从图中可以看到script的确是并行下载，而且css文件也与script一起并行下载。但是图片和iframe依然被阻碍下载。
虽然在ie8，safari4，chrome2下script可以并发，但依然阻碍了其他资源的下载
幸运的是,有一些方法可以使script标签不会堵塞任何其他资源的下载，即使在老一些的浏览器里。不幸的是开发人员要做更多的工作。
这里有6种方法可以使script与其他资源并行下载：

XHR eval &#8212; 通过XHR(XMLHttpRequest 对象)下载script，然后用eval方法执行XHR的responseText
XHR Injection &#8212; 通过XHR下载script，然后建立一个script标签并把它插入文档中(body或者head标签内),接着把script标签的text属性设置为XHR的responseText的值
XHR in Iframe &#8212; 把script标签放到一个iframe里，通过iframe下载它
Script DOM Element &#8212; 创建script标签并把它的src属性指向你的脚本地址
Script Defer &#8212; 添加script标签的defer属性，这个只在ie中有效，但firefox3.1也支持这个属性了
使用document.write方法在页面中写入&#60;script src=""&#62;,这个只在ie里有效

你可以通过Cuzillion查看各个方法的使用例子。下面的表格是对各个方法的总结，通过表格我们可以看到各个方法之间有一些很重要的差异。 虽然Script Defer和document.write Script标签比较混乱(mixed),但大部分方法都实现了并行下载。一些方法不能跨浏览器工作,还有一些方法需要更改你现存的代码才能正常工作。还有一个不被大家广泛讨论的区别 就是是否会引发浏览器的示忙器[busy indicator](状态栏，任务栏，标签图标，鼠标指针).如果你下载的多个script相互依赖，那么还需要这个方法可以保持多个脚本的下载执行顺序。



Technique 方法
Parallel Downloads 是否并行下载
Domains [...]]]></description>
			<content:encoded><![CDATA[<p>原文:<a href="http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/">http://www.stevesouders.com/blog/2009/04/27/loading-scripts-without-blocking/</a>  作者: Steve Souders  译言地址:<a href=" http://www.yeeyan.com/articles/view/dexbol/40162"> http://www.yeeyan.com/articles/view/dexbol/40162</a></p>
<p>越来越多的网站演化成了web2.0应用程序，javascript文件也随之增加，但javascript对网站的性能有负面影响。 在主流浏览器(ie6,7)里javascript会从两个方面阻碍页面呈现：</p>
<ul>
<li>script标签下面的网页资源在script加载完之前会停止请求、下载。</li>
<li>script标签下面的html元素在script加载完之前会停止渲染。</li>
</ul>
<p>这个<a href="http://stevesouders.com/cuzillion/?ex=10008&amp;title=Scripts+Block+Downloads">demo</a>说明了这两种情况。demo页面里包含两个外部javascript文件 接下来是图片、css、和iframe，下面的http 瀑布图表是在ie7下首次访问demo页的情况。从图上可以看到：第一个script标签阻碍了它下面所有资源的下载，接着第二个script标签又 阻碍了所有下载，最后img css 和iframe 并行下载。 同时注意页面渲染，你会发现script标签上面的段落文本瞬间就呈现了，然而其他的html元素在两个script加载完之后才一并显示 出来。</p>
<p style="margin: 10px auto; width: 450px; font-size: 11px; line-height: 13px;"><img src="http://stevesouders.com/efws/images/scripts-block.gif" alt="在ie6/7 firefox2/3 Safari3 Chrome1 和 opera下 script标签会阻碍下载" /><br /> 在ie6/7 firefox2/3 Safari3 Chrome1 和 opera下 script标签会阻碍下载</p>
<p>浏览器是单线程的，因此在script<strong>执行</strong>的时候不下载其他资源是可以理解的，但没有理由让浏览器在script下载的时候阻碍其他资源的下载,还好最新的浏览器(ie8,safari 4,chrome 2)已经 意识到这点了。下面的图标是在ie8下首次访问刚才的<a href="http://stevesouders.com/cuzillion/?ex=10008&amp;title=Scripts+Block+Downloads">demo</a>页时的http瀑布图， 从图中可以看到script的确是并行下载，而且css文件也与script一起并行下载。但是图片和iframe依然被阻碍下载。</p>
<p style="margin: 10px auto; width: 450px; font-size: 11px; line-height: 13px;"><img src="http://stevesouders.com/efws/images/scripts-block-ie8.gif" alt="虽然在ie8，safari4，chrome2下script可以并发，但依然阻碍了其他资源的下载" /><br />虽然在ie8，safari4，chrome2下script可以并发，但依然阻碍了其他资源的下载</p>
<p>幸运的是,有一些方法可以使script标签不会堵塞任何其他资源的下载，即使在老一些的浏览器里。不幸的是开发人员要做更多的工作。</p>
<p>这里有6种方法可以使script与其他资源并行下载：</p>
<ul>
<li>XHR eval &#8212; 通过XHR(XMLHttpRequest 对象)下载script，然后用eval方法执行XHR的responseText</li>
<li>XHR Injection &#8212; 通过XHR下载script，然后建立一个script标签并把它插入文档中(body或者head标签内),接着把script标签的text属性设置为XHR的responseText的值</li>
<li>XHR in Iframe &#8212; 把script标签放到一个iframe里，通过iframe下载它</li>
<li>Script DOM Element &#8212; 创建script标签并把它的src属性指向你的脚本地址</li>
<li>Script Defer &#8212; 添加script标签的defer属性，这个只在ie中有效，但firefox3.1也支持这个属性了</li>
<li>使用<code>document.write</code>方法在页面中写入<code>&lt;script src=""&gt;</code>,这个只在ie里有效</li>
</ul>
<p>你可以通过<a href="http://cuzillion.com/">Cuzillion</a>查看各个方法的使用例子。下面的表格是对各个方法的总结，通过表格我们可以看到各个方法之间有一些很重要的差异。 虽然Script Defer和document.write Script标签比较混乱(mixed),但大部分方法都实现了并行下载。一些方法不能跨浏览器工作,还有一些方法需要更改你现存的代码才能正常工作。还有一个不被大家广泛讨论的区别 就是是否会引发浏览器的示忙器[busy indicator](状态栏，任务栏，标签图标，鼠标指针).如果你下载的多个script相互依赖，那么还需要这个方法可以保持多个脚本的下载执行顺序。</p>
<table style="text-align:center;" border="1" cellspacing="0" cellpadding="2">
<thead>
<tr>
<th>Technique 方法</th>
<th>Parallel Downloads 是否并行下载</th>
<th>Domains can Differ 可否跨域</th>
<th>Existing Scripts 是否需要更改现有脚本</th>
<th>Busy Indicators是否出现示忙器</th>
<th>Ensures Order 是否确保顺序</th>
<th>Size (bytes)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;">XHR Eval</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>no</td>
<td>no</td>
<td>Saf, Chr</td>
<td>-</td>
<td>~500</td>
</tr>
<tr>
<td style="text-align:left;">XHR Injection</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>no</td>
<td>yes</td>
<td>Saf, Chr</td>
<td>-</td>
<td>~500</td>
</tr>
<tr>
<td style="text-align:left;">Script in Iframe</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>no</td>
<td>no</td>
<td>IE, FF, Saf, Chr</td>
<td>-</td>
<td>~50</td>
</tr>
<tr>
<td style="text-align:left;">Script DOM Element</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>yes</td>
<td>yes</td>
<td>FF, Saf, Chr</td>
<td>FF, Op</td>
<td>~200</td>
</tr>
<tr>
<td style="text-align:left;">Script Defer</td>
<td>IE, Saf4, Chr2, FF3.1</td>
<td>yes</td>
<td>yes</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>~50</td>
</tr>
<tr>
<td style="text-align:left;">document.write Script Tag</td>
<td>IE, Saf4, Chr2, Op</td>
<td>yes</td>
<td>yes</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>IE, FF, Saf, Chr, Op</td>
<td>~100</td>
</tr>
</tbody>
</table>
<p>现在的问题是哪种方法才是最好的？其实这个需要具体情况具体分析。下面的树形结构图是可以引导你找到最合适的方法，他并没有看起来的复杂。只有三个关键变量来决定结果：是否需要跨域，是否需要确保执行顺序，是否需要触发示忙器。</p>
<p><a href="http://tu.6.cn/pic/show-new/id/4524734"><img src="http://i3.6.cn/cvbnm/94/8e/33/a0028cff2ab39df56318df16b8659763.gif" alt="" /></a></p>
<p>这下好了，如果把这个选择逻辑包装在流行的HTML 模板语言(PHP,Python,Perl等等)里，你只需要调用一个函数就能确保使用了最佳方法。</p>
<p>在多数情况下，Script DOM Element是最好的选择。它可以在所有浏览器下工作，不存在跨域问题，而且容易实现，但有一点要记住：他不能在所有浏览器下都确保执行顺序。如果你有多个相互依赖的script，那么你需要合并它们，或者使用其方法。 如果你有一些内联脚本需要在外部脚本执行后才能执行，那就需要同步(synchronize)他们了。我把它称作&#8221;coupling&#8221;，<a href="http://www.stevesouders.com/blog/2008/12/27/coupling-async-scripts/">Coupling Asynchronous Scripts</a> 这篇文章介绍了一些目前可以实现&ldquo;coupling&rdquo;的方法。</p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/119/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>:after清除浮动的一点缺陷</title>
		<link>http://dexbol.com/blog/archives/101</link>
		<comments>http://dexbol.com/blog/archives/101#comments</comments>
		<pubDate>Mon, 20 Apr 2009 15:13:56 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=101</guid>
		<description><![CDATA[
.fix{
    content:'.';
    display:block;
    clear:both;
    height:0;
    visibility:hidden;
}
上面的代码是最常见的清除浮动的方法（在支持:after伪选择符的浏览器下），国内各大网站也都普遍使用此方法，但这里有一个缺陷：demo  
通过demo可以看到最外层div#page底部与body有一个空隙，但这里的确什么内容也没有。把清除浮动类的visiblity属性删除后发现原来是content属性指定的点号。造成这个现象的原因是：上面的css规则并没有很好的隐藏掉content内容。
上面有两条rule是用来隐藏content属性指定的内容(这里是点号)：height:0 这样设置并不能隐藏元素，但超出的文本会自然溺出，不会影响到下面的文档流（类似position:absolute），然后用visibility:hidden把它隐藏掉，在大多数情况下这样就ok了。但是当溺出的文本下面没有文档流的时候，他就会像普通文本那样也占个位
解决办法很简单，既然是溺出的文本那加个font-size:0就搞定了，或者更严谨一些，如下面的yahoo.com里的清除浮动的css rule

ol:after, ul:after,
.md:after, .md-sub:after, .hd:after, .bd:after, .ft:after,
.fixfloat:after, .fbody:after,
#colcx:after, #rightcx:after, #eyebrow:after,
#masthead:after, #search:after, #tabs:after,
#doors:after, #patabs:after, #patop:after,
#trough-overlay-bd div:after, #newsft:after, #newsbottom:after{
    content:".";
    display:block;
    font-size:0px;
    [...]]]></description>
			<content:encoded><![CDATA[<pre class='code'>
.fix{
    content:'.';
    display:block;
    clear:both;
    height:0;
    visibility:hidden;
}</pre>
<p>上面的代码是最常见的清除浮动的方法（在支持:after伪选择符的浏览器下），国内各大网站也都普遍使用此方法，但这里有一个缺陷：<a href='http://dexbol.com/demo/css/clear-float.html'>demo</a>  </p>
<p>通过demo可以看到最外层div#page底部与body有一个空隙，但这里的确什么内容也没有。把清除浮动类的visiblity属性删除后发现原来是content属性指定的点号。造成这个现象的原因是：上面的css规则并没有很好的隐藏掉content内容。</p>
<p>上面有两条rule是用来隐藏content属性指定的内容(这里是点号)：height:0 这样设置并不能隐藏元素，但超出的文本会自然溺出，不会影响到下面的文档流（类似position:absolute），然后用visibility:hidden把它隐藏掉，在大多数情况下这样就ok了。但是当溺出的文本下面没有文档流的时候，他就会像普通文本那样也占个位</p>
<p>解决办法很简单，既然是溺出的文本那加个font-size:0就搞定了，或者更严谨一些，如下面的yahoo.com里的清除浮动的css rule</p>
<pre class='code'>
ol:after, ul:after,
.md:after, .md-sub:after, .hd:after, .bd:after, .ft:after,
.fixfloat:after, .fbody:after,
#colcx:after, #rightcx:after, #eyebrow:after,
#masthead:after, #search:after, #tabs:after,
#doors:after, #patabs:after, #patop:after,
#trough-overlay-bd div:after, #newsft:after, #newsbottom:after{
    content:".";
    display:block;
    font-size:0px;
    line-height:0px;
    height:0;
    clear:both;
    visibility:hidden;
}
</pre>
<p>这是我发现的唯一一个在清除浮动的样式表里使用font-size:0的网站 ，yahoo 美国真不是盖的。</p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/101/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>图片压缩工具 Rooms6Crush</title>
		<link>http://dexbol.com/blog/archives/89</link>
		<comments>http://dexbol.com/blog/archives/89#comments</comments>
		<pubDate>Fri, 20 Mar 2009 15:10:28 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=89</guid>
		<description><![CDATA[受TBCompressor的启发写了这个Rooms6Crush用于对png和jpg图片进行压缩。
这样windows下不需要命令行就能很方便的压缩图片了。
Rooms6Crush是在常见的几个图片压缩工具上做了简单的批处理封装。针对png文件会先使用pngout进行压缩然后使用pngcrush进行二次压缩（大多数情况下二次压缩并没有效果），针对jpeg文件会使用jpegtran进行压缩。
下载后解压，双击install.cmd安装，安装后右击jpg或png图片菜单里会出现6roomsCrush，单击后压缩。双击uninstall.cmd卸载。
下载地址: http://www.box.net/shared/g0nmjdj2j2

Update: 
修改了一个bug 新版本下载: http://www.box.net/shared/8&#215;8chxxuzb
如果上面链接无法打开可以试试这个：http://www.boxcn.net/shared/8&#215;8chxxuzb

]]></description>
			<content:encoded><![CDATA[<p>受<a href='http://lifesinger.org/blog/?p=1253' >TBCompressor</a>的启发写了这个Rooms6Crush用于对png和jpg图片进行压缩。<br />
这样windows下不需要命令行就能很方便的<a href="http://dexbol.com/blog/archives/49">压缩图片</a>了。</p>
<p>Rooms6Crush是在常见的几个图片压缩工具上做了简单的批处理封装。针对png文件会先使用<a href="http://advsys.net/ken/utils.htm">pngout</a>进行压缩然后使用<a href="http://pmt.sourceforge.net/pngcrush/">pngcrush</a>进行二次压缩（大多数情况下二次压缩并没有效果），针对jpeg文件会使用<a href="http://jpegclub.org/">jpegtran</a>进行压缩。</p>
<p>下载后解压，双击install.cmd安装，安装后右击jpg或png图片菜单里会出现6roomsCrush，单击后压缩。双击uninstall.cmd卸载。</p>
<p><del>下载地址: <a href="http://www.box.net/shared/g0nmjdj2j2">http://www.box.net/shared/g0nmjdj2j2</a></del></p>
<dl>
<dt>Update: </dt>
<dd>修改了一个bug 新版本下载: <a href="http://www.box.net/shared/8x8chxxuzb">http://www.box.net/shared/8&#215;8chxxuzb</a></dd>
<dd>如果上面链接无法打开可以试试这个：<a href="http://www.boxcn.net/shared/8x8chxxuzb">http://www.boxcn.net/shared/8&#215;8chxxuzb</a></dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/89/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>浏览器默认动作是在事件完全结束后执行的</title>
		<link>http://dexbol.com/blog/archives/76</link>
		<comments>http://dexbol.com/blog/archives/76#comments</comments>
		<pubDate>Tue, 17 Feb 2009 14:11:34 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Note]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=76</guid>
		<description><![CDATA[今天才突然想到这个问题，它的意义在于: 不管事件在哪个元素上发生，发生在哪个阶段，都可以取消浏览器默认事件动作。
http://dexbol.com/demo/javascript/note/browser_default_action.html
]]></description>
			<content:encoded><![CDATA[<p>今天才突然想到这个问题，它的意义在于: 不管事件在哪个元素上发生，发生在哪个阶段，都可以取消浏览器默认事件动作。</p>
<p><a href='http://dexbol.com/demo/javascript/note/browser_default_action.html'>http://dexbol.com/demo/javascript/note/browser_default_action.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/76/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>图片优化</title>
		<link>http://dexbol.com/blog/archives/49</link>
		<comments>http://dexbol.com/blog/archives/49#comments</comments>
		<pubDate>Mon, 12 Jan 2009 16:08:00 +0000</pubDate>
		<dc:creator>dexbol</dc:creator>
				<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://dexbol.com/blog/?p=49</guid>
		<description><![CDATA[最近看了Images Optimization 系列文章,作者是Stoyan Stefanov，就职于Yahoo Exceptional Performance小组，Yslow的主要开发人员。这里记录一下阅读后的心得。


alexa前十名的网站，图片占所有组件的比重是46.6%,所以对图片做优化是相当必要的。


&#8220;Give PiNG a chance !&#8221;.这个是老生长谈了。不过这里的png是指索引png(8位png图片，以后统称png8),而不是真彩png（24或32位png，以后统称png32）。因为png32并没有什么优势，保存成jpg通常比png32要小。对图片格式的使用总结如下：

照片存为jpg格式。
动画保存为gif格式。
其他都用png8搞定。

读这篇文章时我最大的收获是知道了：png8也支持半透明（variable/alpha transparency）。这让我兴奋的半天。而且不同于png32的是，不支持png半透明的浏览器(如ie6)会自动降级到全透明(像gif那样)，而不是像png32那样会有一个难看的背景。(demo)


压缩图片
压缩PNG，主要工具pngcrush

>pngcrush -rem alla -brute -reduce src.png dest.png


-rem alla : 除了关于透明的信息外，其他全都干掉。
-brute : 很暴力的使用各种方法压缩，以使图片被压缩到最小。
-reduce : 尽可能的删掉调色板中多余的颜色。

一次处理多个文件可以张样：

>pngcrush -rem alla -reduce -brute -d folder src1.png scr2.png

对于alexa前十的网站，用这招平均可以干掉16.05%的大小。
其他压缩工具还有：pngout , optipng 等 。强烈推荐一下pngout，它总能给我带来惊喜，比如一个用pngcrush压缩过的图片(32k),用pngout压缩后还可以再干掉5k！关于这些工具的性能介绍可以阅读 Stoyan Stefanov的另一篇文章PNG optimization tools
去掉jpeg的metadata信息(包括EXIF，application datameta以及评论)，主要工具jpegtran

>jpegtran -copy none -optimize src,jpg dest.jpg

上面的命令复制并优化src.jpe,复制过程中去掉了所有metadata信息。同样用这招前十大网站可以干掉11.85%
使用png8替换非动画gif，工具:imageMagic

>convert image.gif PNG:8:image.png

然后再对png进行压缩，用这招前十大网站可以干掉20.42%
优化动画gif，使用工具GIFsicle

> gifsicle -O2 src.gif > dest.gif

上面命令的作用是删掉相同的帧，详见这里。
觉得上面的太麻烦？使用smush.it吧。这同样是Stoyan Stefanov的杰作。


jpeg 渐进式还是普通式？渐进式的优点是对用户尤其是窄带用户更友好,不过关键还是看哪种更小。Stoyan做了一个测试，最后的结论是：小于10k的普通式比较小，大于10k的渐进式比较小。测试的具体数据和过程在这里


避免使用ie的AlphaImageLoader滤镜，因为AlphaImageLoader滤镜是梯形渲染所以会使整个页面渲染速度变慢，而且比较费资源。具体数据点击这里。代替方案是使用VML，DD_belatedPNG就是一个利用vml解决ie不支持半透明png的js对象。用它不仅可以让ie6支持半透明png，还可以支持background-repeat [...]]]></description>
			<content:encoded><![CDATA[<p>最近看了<a href='http://yuiblog.com/blog/2008/10/29/imageopt-1/'>Images Optimization 系列文章</a>,作者是<a href='http://www.phpied.com/'>Stoyan Stefanov</a>，就职于Yahoo Exceptional Performance小组，Yslow的主要开发人员。这里记录一下阅读后的心得。</p>
<ol>
<li>
<p>alexa前十名的网站，图片占所有组件的比重是46.6%,所以对图片做优化是相当必要的。</p>
</li>
<li>
<p><strong>&#8220;Give PiNG a chance !&#8221;</strong>.这个是老生长谈了。不过这里的png是指索引png(8位png图片，以后统称png8),而不是真彩png（24或32位png，以后统称png32）。因为png32并没有什么优势，保存成jpg通常比png32要小。对图片格式的使用总结如下：</p>
<ul>
<li>照片存为jpg格式。</li>
<li>动画保存为gif格式。</li>
<li>其他都用png8搞定。</li>
</ul>
<p>读这篇文章时我最大的收获是知道了：<strong>png8也支持半透明（variable/alpha transparency）</strong>。这让我兴奋的半天。而且不同于png32的是，不支持png半透明的浏览器(如ie6)会自动降级到全透明(像gif那样)，而不是像png32那样会有一个难看的背景。(<a href='http://dexbol.com/demo/css/png_variable_transparncy.html'>demo</a>)</p>
</li>
<li>
<p><strong>压缩图片</strong></p>
<p><strong>压缩PNG</strong>，主要工具<a href='http://pmt.sourceforge.net/pngcrush/'>pngcrush</a></p>
<pre class='code'>
>pngcrush -rem alla -brute -reduce src.png dest.png
</pre>
<p>
-rem alla : 除了关于透明的信息外，其他全都干掉。<br />
-brute : 很暴力的使用各种方法压缩，以使图片被压缩到最小。<br />
-reduce : 尽可能的删掉调色板中多余的颜色。
</p>
<p>一次处理多个文件可以张样：</p>
<pre class='code'>
>pngcrush -rem alla -reduce -brute -d folder src1.png scr2.png
</pre>
<p>对于alexa前十的网站，用这招平均可以干掉16.05%的大小。</p>
<p>其他压缩工具还有：<a href='http://advsys.net/ken/utils.htm'>pngout</a> , <a href='http://optipng.sourceforge.net/'>optipng</a> 等 。强烈推荐一下pngout，它总能给我带来惊喜，比如一个用pngcrush压缩过的图片(32k),用pngout压缩后还可以再干掉5k！关于这些工具的性能介绍可以阅读<a href='http://www.phpied.com/'> Stoyan Stefanov</a>的另一篇文章<a href='http://www.phpied.com/png-optimization-tools/'>PNG optimization tools</a></p>
<p><strong>去掉jpeg的metadata信息</strong>(包括EXIF，application datameta以及评论)，主要工具<a href='http://jpegclub.org/'>jpegtran</a></p>
<pre class='code'>
>jpegtran -copy none -optimize src,jpg dest.jpg
</pre>
<p>上面的命令复制并优化src.jpe,复制过程中去掉了所有metadata信息。同样用这招前十大网站可以干掉11.85%</p>
<p><strong>使用png8替换非动画gif</strong>，工具:<a href='http://www.imagemagick.org/script/index.php'>imageMagic</a></p>
<pre class='code'>
>convert image.gif PNG:8:image.png
</pre>
<p>然后再对png进行压缩，用这招前十大网站可以干掉20.42%</p>
<p>优化动画gif，使用工具<a href='http://www.lcdf.org/gifsicle/'>GIFsicle</a></p>
<pre class='code'>
> gifsicle -O2 src.gif > dest.gif
</pre>
<p>上面命令的作用是删掉相同的帧，详见<a href='http://www.lcdf.org/gifsicle/man.html'>这里</a>。</p>
<p>觉得上面的太麻烦？使用<a href='http://smush.it/'>smush.it</a>吧。这同样是<a href='http://www.phpied.com/'>Stoyan Stefanov</a>的杰作。</p>
</li>
<li>
<p>jpeg 渐进式还是普通式？渐进式的优点是对用户尤其是窄带用户更友好,不过关键还是看哪种更小。Stoyan做了一个测试，最后的结论是：小于10k的普通式比较小，大于10k的渐进式比较小。测试的具体数据和过程在<a href='http://yuiblog.com/blog/2008/12/05/imageopt-4/'>这里</a></p>
</li>
<li>
<p>避免使用ie的AlphaImageLoader滤镜，因为AlphaImageLoader滤镜是梯形渲染所以会使整个页面渲染速度变慢，而且比较费资源。具体数据点击<a href='http://yuiblog.com/blog/2008/12/08/imageopt-5/'>这里</a>。代替方案是使用VML，<a href='http://www.dillerdesign.com/experiment/DD_belatedPNG/'>DD_belatedPNG</a>就是一个利用vml解决ie不支持半透明png的js对象。用它不仅可以让ie6支持半透明png，还可以支持background-repeat 和:hover .代价是要多下载一个5.5k的js文件。个人感觉并没有太大必要。</p>
</li>
</ol>
<p>以上链到YUI的链接都需要穿墙。</p>
]]></content:encoded>
			<wfw:commentRss>http://dexbol.com/blog/archives/49/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
