<?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>样式之美 &#187; 前端架构</title>
	<atom:link href="http://www.aoao.org.cn/blog/tag/front-end/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aoao.org.cn</link>
	<description>没落的角落</description>
	<lastBuildDate>Fri, 13 Jan 2012 03:37:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>人肉gzip</title>
		<link>http://www.aoao.org.cn/blog/2008/11/human-flesh-gzip/</link>
		<comments>http://www.aoao.org.cn/blog/2008/11/human-flesh-gzip/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 18:15:51 +0000</pubDate>
		<dc:creator>aoao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[前端架构]]></category>

		<guid isPermaLink="false">http://www.aoao.org.cn/?p=118</guid>
		<description><![CDATA[gzip 是什么东东呢？百科跟我们说 gzip是GNU zip的缩写，它是一个 GNU 自由软件的文件压缩程序。&#8230; gzip 的基础是 DEFLATE ，DEFLATE 是 LZ77 与哈夫曼编码的一个组合体。&#8230; “gzip” 也经常用来表示 gzip 文件格式，这种格式： 10 字节的头，包含幻数、版本号以及时间戳 可选的扩展头，如原文件名 文件体，包括 DEFLATE 压缩的数据 8 字节的尾注，包括 CRC-32 校验和以...]]></description>
			<content:encoded><![CDATA[<p><a title="The gzip home page" href="http://www.gzip.org/">gzip</a> 是什么东东呢？百科跟我们说</p>
<blockquote cite="http://zh.wikipedia.org/wiki/Gzip"><p><strong>gzip</strong>是<strong>GNU zip</strong>的缩写，它是一个 GNU 自由软件的文件压缩程序。&#8230;<br />
<strong>gzip</strong> 的基础是 DEFLATE ，DEFLATE 是 LZ77 与哈夫曼编码的一个组合体。&#8230;<br />
“<strong>gzip</strong>” 也经常用来表示 <strong>gzip</strong> 文件格式，这种格式：</p>
<ul>
<li>10 字节的头，包含幻数、版本号以及时间戳</li>
<li>可选的扩展头，如原文件名</li>
<li>文件体，包括 DEFLATE 压缩的数据</li>
<li>8 字节的尾注，包括 CRC-32 校验和以及未压缩的原始数据长度</li>
</ul>
</blockquote>
<p>简单来说，Gzip就是一种让你的网页显示变快一种神奇的东东。</p>
<p>那么，什么是人肉Gzip呢？就把本来要服务器动态压的东东人工压，大家可以先看一下这篇：<a href="http://61924.wepwnyou.net/blog/2008/10/04/gzipping-css-and-javascript-files.html">Gzipping CSS and Javascript files</a>。实现方式就人工zip一下，然后服务器再派上头。</p>
<blockquote>
<pre><code>&lt;link rel="stylesheet" href="style.cgz" media="all" type="text/css" /&gt;</code></pre>
<pre><code># Compressed css files
AddEncoding x-gzip .cgz
AddType text/css .cgz</code></pre>
</blockquote>
<p>其实Gzip就是三个选择：CPU、内存、IO，通常都是cpu+内存来做，我并不喜欢这个人工IO的方式，它最大的一个问题就是不能解决http1.0的问题，而且很体力活，不过我们可以人工zip来看我们的东西Gzip后的大小。在中国，因为有好多xx版XP的原因，http1.0成为了可能。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aoao.org.cn/blog/2008/11/human-flesh-gzip/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>CSS Frameworks的概念</title>
		<link>http://www.aoao.org.cn/blog/2008/01/css-frameworks/</link>
		<comments>http://www.aoao.org.cn/blog/2008/01/css-frameworks/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 17:45:35 +0000</pubDate>
		<dc:creator>aoao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[前端架构]]></category>
		<category><![CDATA[概念]]></category>

		<guid isPermaLink="false">http://www.aoao.org.cn/blog/2008/01/css-frameworks/</guid>
		<description><![CDATA[最近看到N多介绍CSS框架，前些天我说过一句话：“在我有限的视野里，还没见到可以真正可以称得上css框架的东东~”，当然也可能是我的视野太小了，或者是说世界太大了，我自己还是感觉还有一大堆我看不到的东西。 先来看一下一个我比较认同的概念： 框架可分为白盒(White-Box)与黑盒(Black-Box)两种框架。 基于继承的框架被称为白盒框架。所谓白盒即具备可...]]></description>
			<content:encoded><![CDATA[<p>最近看到N多介绍CSS框架，前些天我说过一句话：“在我有限的视野里，还没见到可以真正可以称得上css框架的东东~”，当然也可能是我的视野太小了，或者是说世界太大了，我自己还是感觉还有一大堆我看不到的东西。</p>
<p>先来看一下一个我比较认同的概念：</p>
<blockquote cite="http://www.itisedu.com/phrase/200603061723295.html"><p>
框架可分为白盒(White-Box)与黑盒(Black-Box)两种框架。</p>
<p>基于继承的框架被称为白盒框架。所谓白盒即具备可视性，被继承的父类的内部实现细节对子类而言都是可知的。利用白盒框架的应用开发者通过衍生子类或重写父类的成员方法来开发系统。子类的实现很大程度上依赖于父类的实现，这种依赖性限制了重用的灵活性和完全性。但解决这种局限性的方法可以是只继承抽象父类，因为抽象类基本上不提供具体的实现。白盒框架是一个程序骨架，而用户衍生出的子类是这个骨架上的附属品。</p>
<p>基于对象构件组装的框架就是黑盒框架。应用开发者通过整理、组装对象来获得系统的实现。用户只须了解构件的外部接口，无须了解内部的具体实现。另外，组装比继承更为灵活，它能动态地改变，继承只是一个静态编译时的概念。</p>
<p>在理想情况下，任何所需的功能都可通过组装已有的构件得到，事实上可获得的构件远远不能满足需求，有时通过继承获得新的构件比利用已有构件组装新构件更容易，因此白盒和黑盒将同时应用于系统的开发中。不过白盒框架趋向于向黑盒框架发展，黑盒框架也是系统开发希望达到的理想目标。
</p></blockquote>
<p>再回头看一下现在网上那样多CSS框架（YUI是叫“YUI Library CSS Tools” 并非是“YUI CSS Frameworks”），有多少是真正以框架的概念在写，有多少只是定义样式基类的。当然，每个人对框架的理解不一定，你可能不认同我的说法。</p>
<p>再谈一下CSS 框架，并不非我不认可这个东西的存在，我从一两年前也就一直在尝试这样的东西。对于大型网站，前端的开发需要一个解决方案。框架自然是首选的。可惜距离我太远了，我太弱了T_T，我只要要求两点：</p>
<ul>
<li>管理下面的内容的东西</li>
<li>类/组件</li>
</ul>
<p>很明显，第一点，CSS做不到，第二点，相对其它语言很弱的说。</p>
<p>大约在一年前做一个中型网站时，我为了偷懒，我想到内容模块化，让程序员拼页面。大约方向也就是封装了一个又一个的功能块，程序员在要用到哪一块内容时就只要使用相应的HTML与CSS，大家都方便，我不要拼页面，他不用重复套代码，大家好才是真的好。</p>
<p>在同一个网站，差不多的内容块，多次使用是很正常的事，这也是就让模块化成为可能，比如一个图片列表，可能是用户头像列表，或者群组的图标列表，这时你会怎样写呢？相同的用这样吗？</p>
<pre><code>.photoListUesr,.photoListGroup{ /*_*/ }</code></pre>
<p>这样不是说不行，但如果突然说要再加一个相似的呢？这时可能就要调整样式。而我呢？尝试过这样的使用方式：</p>
<pre><code>&lt;div class=&quot;photoList UesrCt&quot; /&gt;
&lt;div class=&quot;photoList GroupCt&quot; /&gt;</code></pre>
<p>这样的话，我们一开始就分离出共同表现的东西，把<code>.photoList</code>当成原型，通处额外的class再去处理细节。前些天，我写了<a href="http://www.aoao.org.cn/blog/2008/01/oo-style/">面向对象的XHTML与CSS编程</a>，其实只写了一半，另一半是详细的例子，不过介于要做太多的例子跟核心已经写出来就没写完，^^ 当然，这样也存在一定的问题，就是最初的原型的定义要很慎重，要尽量做到以后就算是改版也可能不用修改。CSS这东西，基本上一个框架最多只能适合一个站，当然，如果这个站足够大的话，这样使用才是有意义滴。</p>
<p>HTML与CSS越是模块化，文件越分散这个问题就越严重。HTML倒是好办，反正是应用程序最终要合并输出一份，但CSS一般会给抛弃直接使用。如果在刚才的例子中，在网页导入CSS的方式是这样的话：</p>
<pre><code>@import url(/xxx/photoList.css);
@import url(/xxx/UserCt.css);
@import url(/xxx/GroupCt.css);</code></pre>
<p>那甚至可以考虑用程序来拼页面，但是使用方便，请求数也成正比，一般情况大家都会选择手动合并文件。虽然人脑比电脑更智能，但很多时候，人脑的计算能力是比不上电脑滴。我曾经有这样的想法，就是使用服务端程序来处理CSS的发布机制，大约方向就是通过网站访问日志来分析出整个站各种页面的使用量，通过程序来计算哪些公共使用的要合并，合并的顺序（CSS的文件顺序会影响到优先权），等等各种计算并压缩输出。</p>
<p>可惜的是，这样一套复杂的程序可能只适合一个站，或者同系列的站群。虽然说做起来有点折腾，但我相信门户级别网站使用这样的方式是有必要滴，当然前提还要整个团队都要使用相同的设计模式。</p>
<p>PS:以上CSS发布程序，只是我的幻想，还没尝试过，有兴趣的朋友可以尝试一下，如有意外，概不负责。^_^~</p>
<p>当然，就以上这些还是不能称得上CSS Frameworks，或许只能叫成一个系统级解决方案，毕竟，CSS只是描述性语言。</p>
<p>前晚跟<a href="http://hi.baidu.com/akira_cn" title="影月阁">月影</a>一起吃烤鸭时，有聊到这个，他问我有没有前端一体化的解决方案。JS组件化时也会面临同样的问题，差不多的发布机制应该也可以适用JS。不过完全的一体化解决方案我还没想好，也许月影多请我吃几次烤鸭我就能想好。</p>
<p>广告一下：<a href="http://widgets.ucren.com/ucren-documentation/" title="Ucren 文档中心">Ucren-widgets</a>，国内一个不错的JS组件。</p>
<p>扩展阅读：<a href="http://www.smashingmagazine.com/2007/09/21/css-frameworks-css-reset-design-from-scratch/">CSS Frameworks + CSS Reset: Design From Scratch</a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aoao.org.cn/blog/2008/01/css-frameworks/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>JavaScript分层的概念与本地存贮</title>
		<link>http://www.aoao.org.cn/blog/2008/01/js-3-tier/</link>
		<comments>http://www.aoao.org.cn/blog/2008/01/js-3-tier/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 14:42:09 +0000</pubDate>
		<dc:creator>aoao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[前端架构]]></category>

		<guid isPermaLink="false">http://www.aoao.org.cn/blog/2008/01/js-3-tier/</guid>
		<description><![CDATA[以前学了一个月的asp.net算没学，把三层结构的概念改改就套在JS上。^^，那JS要怎样分层呢？其实主要是多了一个页面级的数据库 表现层：处理UI呈现 业务逻辑层：除了上面跟下面的都算在这个里面。当然我不介意你再细分^_^ 数据与数据维护层：JS存数据也不是一天两天的事。可有多少人在网页维护JS数据库呢？ 为什么要给自己找麻烦呢，把本来简单的东西复杂...]]></description>
			<content:encoded><![CDATA[<p>以前学了一个月的asp.net算没学，把三层结构的概念改改就套在JS上。^^，那JS要怎样分层呢？其实主要是多了一个页面级的数据库</p>
<ul>
<li>表现层：处理UI呈现</li>
<li>业务逻辑层：除了上面跟下面的都算在这个里面。当然我不介意你再细分^_^</li>
<li>数据与数据维护层：JS存数据也不是一天两天的事。可有多少人在网页维护JS数据库呢？</li>
</ul>
<p>为什么要给自己找麻烦呢，把本来简单的东西复杂化，要数据找服务器要，自己干啥还得维护多一份数据，多无聊。主要的原因是：</p>
<ul>
<li><strong>页面缓存数据，减少与服务端之间的交互。</strong><br />
页面缓存数据有什么意义，比如在不稳定的无线网络里，不是每个操作都去访问网络，也就不会有因为不稳定网络引起的一大堆乱七八糟的问题。</li>
<li><strong>实现预加载，加快访问速度。</strong><br />
Gmail的新版本号称邮件一点就开，其实是在网络空闲的时候，把数据先当下来。我没去看Google那些恶心的代码。估计也是用JS构建一个页面级的数据库。</li>
<li><strong>方便数据二次呈现。</strong><br />
变更数据呈现有个“本地数据库”来查询自然方便多了。挖哈哈</li>
</ul>
<p>当然也有一些负面的作用。比如性价比没那样高，以前，我们从服务器要到数据后一般就直接或者转换一下innerHTML到界面，如果按这种方式就一定要多存份到“数据库”。去掉某些东西时也要去通知“数据库”。由于JS的受限，我们折腾了半天的“数据库”在刷新一下就干掉了。这不是折腾吗? 看看Gmail是怎样做的，虽然它也是一刷新就干掉，但它已经养成用户一种习惯了GMail是不用刷新滴，挖哈哈。</p>
<p>当然，我们还是比较贪心的。如果能再加上本地存贮的话，折腾就少了点。现在离线比较出名的算是google的Gears，不过我对它没兴趣，估计我做的产品的用户们没人听说过它，再别说会使用，好像最近也给GFW的样子 。本地存贮如果要用的话，应该尽可能使用浏览器的原生技术。比如IE有userData、Firefox有sessionStorage，怎样用呢？石头老大写过一篇<a href="http://www.blogjava.net/emu/archive/2006/10/04/73385.html" title="终于盼到了，firefox支持sessionStorage了">关于怎样操作的</a>。当然也有人用flash来存东西，100K哦。</p>
<p>综合来说页面级的数据库并非适合所有的产品，个人认为最适合邮箱，或者某些后台管理、QZone等那些一个页面搞定一切的网站。当然这也不是空口说白话的，我已经在项目中一个模块尝试过。一点就开的感觉很爽滴~ </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aoao.org.cn/blog/2008/01/js-3-tier/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>如何减少网页的内存与CPU占用</title>
		<link>http://www.aoao.org.cn/blog/2007/11/memory-cpu/</link>
		<comments>http://www.aoao.org.cn/blog/2007/11/memory-cpu/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 18:02:29 +0000</pubDate>
		<dc:creator>aoao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[前端架构]]></category>
		<category><![CDATA[性能优化]]></category>

		<guid isPermaLink="false">http://www.aoao.org.cn/blog/2007/11/memory-cpu/</guid>
		<description><![CDATA[有的网页看起来并不大但打开会很卡，有的网页虽然很长但使用流畅，占用用户电脑的内存与CPU就影响这些。 浏览器问题，有各自的浏览器处理内存问题会影响到，但几乎没办法控制得了，Windows上的： IE系列，刷新回收的量不大，但最小化会释放内存，。 Firefox2据说也会在最小化回收，可我从没见过最垃圾，用多少是多少，基本不回收。据说prototype的ajax还会...]]></description>
			<content:encoded><![CDATA[<p>有的网页看起来并不大但打开会很卡，有的网页虽然很长但使用流畅，占用用户电脑的内存与CPU就影响这些。</p>
<p>浏览器问题，有各自的浏览器处理内存问题会影响到，但几乎没办法控制得了，Windows上的：</p>
<ul>
<li>IE系列，刷新回收的量不大，但最小化会释放内存，。</li>
<li>Firefox2据说也会在最小化回收，可我从没见过最垃圾，用多少是多少，基本不回收。据说prototype的ajax还会引起内存一直增加。</li>
<li>Opera最好。一直控制得很好。不存在什么问题。。</li>
</ul>
<p>Linux的内存分配机制与Win的不一样，有多少用多少，如果浏览器占光时说不定会干掉系统。</p>
<p>页面问题，浏览器渲染页面会消耗内存和CPU，能减少一点就减少点。</p>
<h4>结构上</h4>
<ul>
<li>使用DocType，告诉浏览器你在用什么，html4也有DTD。也许Transitional更适合你</li>
<li>如果使用的是XHTML并能保持良好结构的话，记得输出相应的MIME跟XML头<sup><a href="#f1">1</a></sup>，可以减少浏览器的代码检查，</li>
<li>保持结构的完整，不要让浏览器帮你补全代码。</li>
<li>控制页面的文件大小，可以通过程序把为了看代码比较舒服的缩进去掉。2~3K也是大小。</li>
<li>iframe会产生新的页面，其实有很多方式可以代替iframe</li>
<li>引入的JS与CSS可以适当合并，同样背景图片也可以合并，甚至有人连Flash都合并</li>
<li>给已知宽高的内容图片/Object加上宽度的属性可以减少页面的局部重渲染</li>
</ul>
<h4>表现上</h4>
<ul>
<li>质量99跟70的jpg在大多数情况下只有文件有大小不一样。gif的也一样，特别是小图标，256色跟128色的差别是文件大小．</li>
<li>flash动得太快吃CPU很大，控制每秒的帧数及动画的效果可以减少一些，如果把品质用中低显示会省很多资源，但这样却牺牲了效果。。quality属性 有时选择Autolow<sup><a href="#f2">2</a></sup> 或者Autohigh会更适合，没必要一直low 或者best，</li>
<li>flash使用矢量图会节省文件大小，但计算复杂的图形跟动画时花的是CPU。复杂的太多滤镜，则会占用大量内存，模糊滤镜有减少些<sup><a href="#f3">3</a></sup>。</li>
<li>IE的滤镜也是比较占用内存，同时也有兼容性问题。全屏的半透明很吃资源的。</li>
<li>2*2的图片跟8*8的图片大小差不多，但是平铺背景2*2却占用大很多。</li>
<li>gif动画同样有帧的概念，别把gif当成flash来玩就行。</li>
</ul>
<h4>行为上</h4>
<ul>
<li>别为了使用一个$()引入整个prototype或jQuery，它们有更多的作用。</li>
<li>AJAX很帅。但是用xml会用上XML解析器，有人推荐用JSON，可是这样要eval数据，其实可以直接import已经是对象的script来用。只是要多传个对象名，或者把对象名写死，或者像flickr那样<code>jsonFlickrApi({"xxx":"xxx"})</code>，直接当函数用，挖哈哈。</li>
<li>实现某些效果时能用<code>visibility:hidden</code>解决时就别用<code>display:none</code>来玩。</li>
<li>在这里强调js变量要注全局跟局部等等的意义并不大，JS复杂的地方也不是一两句能说得清的，关注大家关注月影的正在出版的新书吧。^^</li>
</ul>
<p>其实这里有的内容有不少跟<a href="http://www.aoao.org.cn/blog/2007/06/how-to-show-our-pages-quickly/">如何快速的呈现我们的网页</a>相近，不过那篇是以处理服务端为主，但在很多时候，节省服务端资源消耗的同时也会节省客户端的资源消耗。</p>
<p>再其实，这篇已经蹲在草稿箱里好久了，一直没有时间去整理。现在给的也不是完整的，因为没有完整，慢慢补充吧。</p>
<hr />
<ol>
<li><a name="f1">产生问题</a>：虽然会引起<a href="http://www.aoao.org.cn/blog/2007/01/browser-mode/" title="浏览器的模式问题 Quirks Mode vs Standards Mode">浏览器的模式问题</a>，但问题是可以解决滴。参考<a href="http://keystonewebsites.com/articles/mime_type.php">Serving up XHTML with the correct MIME type</a>，派送XML头浏览器不会容错显示，出现错误结构会导致整个页面无法显法。</li>
<li><a name="f2">Autolow</a>: 优先考虑速度，但是也会尽可能改善外观。 回放开始时，消除锯齿功能处于关闭状态。 如果 Flash Player 检测到处理器可以处理消除锯齿功能，就会打开该功能。 <br />
Autohigh:开始时回放速度和外观两者并重，必要时会牺牲外观来保证回放速度。 回放开始时，消除锯齿功能处于打开状态。如果实际帧频降到指定帧频之下，就会关闭消除锯齿功能以提高回放速度。使用此设置可模拟“消除锯齿”命令（“视图”>“预览模式”>“消除锯齿”）。</li>
<li><a name="f3">模糊滤镜</a>:使用模糊滤镜时，如果用于 blurX 和 blurY 的值是 2 的整数次幂（例如 2、4、8、16 和 32），则可以加快计算速度，并且可以使性能提高 20% 到 30%（flash的帮助是介样说滴）。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.aoao.org.cn/blog/2007/11/memory-cpu/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>iGoogle的主题与模块</title>
		<link>http://www.aoao.org.cn/blog/2007/09/igoogle/</link>
		<comments>http://www.aoao.org.cn/blog/2007/09/igoogle/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 06:58:17 +0000</pubDate>
		<dc:creator>aoao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Module]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[前端架构]]></category>

		<guid isPermaLink="false">http://www.loaoao.com/blog/2007/09/igoogle.html</guid>
		<description><![CDATA[iGoogle现在的主题是按时间或者天气变化的，它存放样式的方式也不错。每个主题存在一个xml，除公交车站外，什么时间应该读什么几乎全在XML里，3.14早已经不是什么秘密了，有兴趣就去看下3.14有什么特别。不过感觉他的文件命名有两个特别的：noon和midnight，不知道为什么不统一用时间格式的呢？已知的各套的主题的XML在这里，据说还有一些官方神秘主题，都...]]></description>
			<content:encoded><![CDATA[<p>iGoogle现在的主题是按时间或者天气变化的，它存放样式的方式也不错。每个主题存在一个xml，除公交车站外，什么时间应该读什么几乎全在XML里，3.14早已经不是什么秘密了，有兴趣就去看下3.14有什么特别。不过感觉他的文件命名有两个特别的：noon和midnight，不知道为什么不统一用时间格式的呢？已知的各套的主题的XML在这里，据说还有一些官方神秘主题，都不知道是什么样滴。</p>
<ul>
<li><img src="http://img0.gmodules.com/ig/images/skins/springscape.png" alt="Spring Scape" width="80" height="25" /> 四季景色：<a title="igoogle 主题：四季景色" href="http://www.google.com/ig/skins/springscape.xml">http://www.google.com/ig/skins/springscape.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/teahouse.png" alt="Teahouse" width="80" height="25" /> 童话茶楼：<a title="igoogle 主题：童话茶楼" href="http://www.google.com/ig/skins/teahouse.xml">http://www.google.com/ig/skins/teahouse.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/beach.png" alt="Beach" width="80" height="25" /> 黄金海滩：<a title="igoogle 主题：黄金海滩" href="http://www.google.com/ig/skins/beach.xml">http://www.google.com/ig/skins/beach.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/city.png" alt="City Scape" width="80" height="25" /> 城市景观：<a title="igoogle 主题：城市景观" href="http://www.google.com/ig/skins/cityscape.xml">http://www.google.com/ig/skins/cityscape.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/sweetdreams.png" alt="Sweet Dreams" width="80" height="25" /> 甜美的梦：<a title="igoogle 主题：甜美的梦" href="http://www.google.com/ig/skins/sweetdreams.xml">http://www.google.com/ig/skins/sweetdreams.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/busstop.png" alt="Bus Stop" width="80" height="25" /> 公交车站：<a title="igoogle 主题：公交车站 " href="http://www.google.com/ig/skins/busstop.xml">http://www.google.com/ig/skins/busstop.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/winterscape.png" alt="Winter Scape" width="80" height="25" /> 冰天雪地：<a title="igoogle 主题：winterscape" href="http://www.google.com/ig/skins/winterscape.xml">http://www.google.com/ig/skins/winterscape.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/planets.png" alt="Solar System" width="80" height="25" /> Solar System:：<a title="igoogle 主题：Solar System" href="http://www.google.com/ig/skins/planets.xml">http://www.google.com/ig/skins/planets.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/fallscape.png" alt="Autumn" width="80" height="25" />Autumn：<a title="igoogle 主题：Autumn" href="http://www.google.com/ig/skins/autumn.xml">http://www.google.com/ig/skins/autumn.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/hongkong.png" alt="hongkong" width="80" height="25" /> HongKong：<a title="igoogle 主题：hongkong" href="http://www.google.com/ig/skins/hongkong.xml">http://www.google.com/ig/skins/hongkong.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/JR.png" alt=" J. R." width="80" height="25" /> J. R.：<a title="igoogle 主题：J. R." href="http://www.google.com/ig/skins/jr.xml">http://www.google.com/ig/skins/jr.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/tiger.png" alt="Aja Tiger" width="80" height="25" /> Aja Tiger：<a title="igoogle 主题Aja Tiger" href="http://www.google.com/ig/skins/tiger.xml">http://www.google.com/ig/skins/tiger.xml</a></li>
<li><img src="http://img0.gmodules.com/ig/images/skins/holidayvillage.jpg" alt="Holiday Village" width="80" height="25" />Holiday Village：<a title="igoogle 主题Holiday Village" href="http://www.google.com/ig/skins/holidayvillage.xml">http://www.google.com/ig/skins/holidayvillage.xml</a> <sup>new</sup></li>
<li><img src="http://www.google.com/ig/images/skins/taiwanlandscape_thumbnail.jpg" alt="taiwanlandscape" width="80" height="25" /> Aja Tiger：<a title="igoogle 主题 taiwanlandscape" href="http://www.google.com/ig/skins/taiwanlandscape.xml">http://www.google.com/ig/skins/taiwanlandscape.xml</a> <sup>new</sup></li>
</ul>
<p>“冰天雪地”的名字是我起滴^_^，默认是看不到，如果想要看的话，打开iGoogle，先点<span>选择主题</span>，然后在地址栏上敲上：</p>
<pre><code>javascript:_dlsetp('preview_skin=skins/winterscape.xml');</code></pre>
<p>要不要保存就是自己的事了^^，XML地址源自<a href="http://michaelsync.net/2007/07/25/all-screenshots-of-google-theme-igoogle/">All screenshots of  Google Theme (iGoogle)</a>，绕道而行。</p>
<p>update：2007.11.6 发现了新的五个 <a href="http://googlesystem.blogspot.com/2007/11/new-igoogle-themes.html">Five New iGoogle Themes</a>，使用方式同冰天雪地，只要改XML就可以</p>
<p>3.14的看法也是敲代码。。</p>
<pre><code>javascript:void(document.getElementById("ext_css").href="/ig/skins/hongkong/hongkong_3.14am.css");</code></pre>
<p>iGoogle的模块处理的方式也不错，也是用xml来存，类如这样：</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;Module&gt;
  &lt;ModulePrefs title="hello aoao example" /&gt;
  &lt;Content type="html"&gt;
     &lt;![CDATA[
       子乌不发威，你当我是hello aoao!
     ]]&gt;
  &lt;/Content&gt;
&lt;/Module&gt;</pre>
<blockquote cite="http://www.google.com/intl/zh-CN/apis/gadgets/gs.html">
<ul>
<li><code>&lt;Module&gt;</code> 标记说明此 XML 文件包含小工具。</li>
<li><code>&lt;ModulePrefs&gt;</code> 标记包含关于小工具的信息，如标题、说明、作者和其他可选功能。</li>
<li><code>&lt;Content type="html"&gt;</code> 行说明此小工具的内容类型为 HTML。</li>
<li><code>&lt;![CDATA[ ...<em>insert HTML here</em>... ]]&gt;</code> 用于在小工具内容类型为 <span class="codetext">html</span> 时将 HTML 包括于其中，告诉小工具解析器 CDATA 部分内的文本不应视作 XML。CDATA 部分通常包含 HTML 和 JavaScript。</li>
</ul>
</blockquote>
<p>这个方式的定制性很大，也很自由，更详细的介绍可以看<a title="Google 小工具 API" href="http://www.google.com/intl/zh-CN/apis/gadgets/index.html">Google 小工具 API</a>。早已经有人把Google 相关的模块都整理出来，起名Google OS，不过我忘记最早是在哪里发现的，我共享了我自己的&#8221;Google OS&#8221;标签页，<a href="http://www.google.com/ig/sharetab?source=stb&amp;stid=113308975163625867709d21c4bb046e6eac62db3002dd35fbb7b"><img src="http://buttons.googlesyndication.com/fusion/add.gif" border="0" alt="Add to Google" width="104" height="17" /></a> ^_^ 我最近也在接触类似的项目。</p>
<p>也有人做了“<a href="http://bonstio.net/google-gadgets/custom-igoogle-skins.html">Custom iGoogle Skins</a>” 的模块，<a href="http://fusion.google.com/add?moduleurl=http%3A//igskins.googlecode.com/svn/trunk/skins.xml"><img src="http://buttons.googlesyndication.com/fusion/add.gif" border="0" alt="Add to Google" width="104" height="17" /></a>，可以玩转iGoogle主题。</p>
<p>update 08/7/20:要玩新版的igoogle可将语言设定为English；在地址栏中输入<code>javascript:_dlsetp('v2=1')，回车。</code> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aoao.org.cn/blog/2007/09/igoogle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>如何快速的呈现我们的网页</title>
		<link>http://www.aoao.org.cn/blog/2007/06/how-to-show-our-pages-quickly/</link>
		<comments>http://www.aoao.org.cn/blog/2007/06/how-to-show-our-pages-quickly/#comments</comments>
		<pubDate>Fri, 15 Jun 2007 10:38:44 +0000</pubDate>
		<dc:creator>aoao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[前端架构]]></category>
		<category><![CDATA[性能优化]]></category>

		<guid isPermaLink="false">http://wordpress.cs/?p=37</guid>
		<description><![CDATA[前几天小芳同学一直在群发起一些加速的话题，我已经把聊天记录抽出来，正打算整理出份像样的，没想到小芳同学非常速度的出了这篇。我的就省掉了，挖哈哈。 特别说一下了，这些方案并非适合所有的网站，很多部分有的网站还是不要做反而会更好。如果你还有更多的想法，可以到这里讨论或者评论，我只是归档成为方便阅读的，对了论坛和群讨论的另一...]]></description>
			<content:encoded><![CDATA[<p>前几天小芳同学一直在群发起一些加速的话题，我已经把聊天记录抽出来，正打算整理出份像样的，没想到小芳同学非常速度的出了这篇。我的就省掉了，挖哈哈。</p>
<p>特别说一下了，这些方案并非适合所有的网站，很多部分有的网站还是不要做反而会更好。如果你还有更多的想法，可以到这里<a href="http://bbs.51js.com/thread-69346-1-1.html">讨论</a>或者评论，我只是归档成为方便阅读的，对了论坛和群讨论的另一些结果如果有价值我也会补充进来。</p>
<p>如何快速的呈现我们的网页 作者：<a href="http://i.javascript.cn/">flashsoft</a>，（内容被我略修删过）。</p>
<h3>一.我们需达解决的麻烦</h3>
<ul class="upper-alpha">
<li>减少HTTP请求数. 减少HTTP请求数有什么好处
<ul>
<li>降低服务器跟客户端的建立和消除HTTP请求和响应Header的开销</li>
<li>减少服务器为HTTP连接的进程和线程的开销,如果可能,还会包括GZIP压缩的CPU开销.</li>
</ul>
</li>
<li>减小被请求文件大小, 减少请求数据占用的网络带宽.</li>
<li>让用户更快的看到想要的结果.</li>
<li>提高客户端渲染速度.</li>
<li>让浏览器同时能请求更多的数据.</li>
<li>提高服务器相应速度.</li>
<li>通过版本化控制客户端Cache.</li>
</ul>
<h3>二.如何解决我们的麻烦</h3>
<h4>A.如何减少HTTP请求数</h4>
<ol>
<li>合并JS文件跟CSS文件。</li>
<li>合并框架图片以及相对变动较少的图片成一张，通过CSS背景切割来完成渲染，比如：<a href="http://blog.rexsong.com/?p=746">加速图片显示</a>。</li>
<li>合理使用本地Cache来缓存JS/CSS/IMAGE。</li>
<li>合理使用UserData缓存JS文件,对于FF用户可以单独请求服务器,这样能解决80%用户的问题.代码可以<a href="http://blog.csdn.net/meizz">蓉儿</a>(meizz)的js framework<sup><a href="#f1">1</a></sup>。</li>
<li><a href="http://www.loaoao.com/blog/2007/05/js-css/">把JS跟CSS合并成一个文件</a></li>
</ol>
<h4>B.减小被请求文件大小,减少请求数据占用的网络带宽</h4>
<ol>
<li>压缩JS体积：删除JS中空白换行,注释,混淆把长变量换成短变量；</li>
<li>压缩CSS体积：删除CSS注释、写法尽量用简写；</li>
<li>使用(X)HTML+CSS方式搭建网站结构,提高CSS重用性,来减少(X)HTML文件大小；</li>
<li>使用服务器端GZIP压缩JS/ CSS文件,缩小传输文件大小。附注:Apache1跟Apache2的GZIP的效率跟方式不一样的，根据需要自行选择。</li>
</ol>
<p>嗷嗷补充说明：压缩、合并JS和CSS都由程序处理。而不是自己手动去缩删，不然不利于后期维护。</p>
<h4>C.让用户更快的看到想要的结果</h4>
<p>用户对于一个站点的白页的忍受时间根据统计是8-12秒。白页的产生可能由于各种原因引起,我们能做的就是怎么让用户能变的稍微能等待更久。</p>
<ul>
<li>方案1.多做一个引导页,让用户体会其中的变化<br />
案例:mail.aol.com中的loading引导页</li>
<li>方案2.优先载入页面结构以及结构图片,后一步载入当前页面数据,再后一步载入Iframe,Flash等数据.让用户尽早的看到被打开页面的希望.</li>
</ul>
<h4>D.提高客户端渲染速度</h4>
<p>这个问题就比较泛泛了,影响客户端的渲染速度有多方面的,主要目的都是提高程序方面的效率.</p>
<ol>
<li> 对于大索引的结构,尽可能的少用索引访问,能用访问兄弟节点的方式尽可能用访问兄弟节点的方式.</li>
<li> 字符串拼接尽可能用数组方式</li>
<li> 大规模添加节点数据,请不要使用appendChild方式,尽量使用类似innerHTML的insertAdjacentHTML方式,FF下需修正<sup><a href="#f2">2</a></sup></li>
</ol>
<h4>E.让浏览器同时能请求更多的数据.</h4>
<p>浏览器默认只是支持单域名同时有两个HTTP请求,使用多域名将能把请求数提高,在网络条件优良的情况下,能更快的下载数据,呈现结果.</p>
<h4>F.提高服务器相应速度</h4>
<p>对于需快速响应的文件,把其放入快速响应的服务器,应该是不错的方案,优化方案请系统储备组提供.</p>
<h4>G.通过版本化控制客户端Cache.</h4>
<p>通常js/css这类文件改动比较频繁,但是为了加载速度变快,我们有可能需要设定这类文件的过期时间为几天后,这样我们碰到的问题就是,如何及时更新这些在cache的文件?<br />
通过一个简单的配置,通过修改JS的版本来及时告诉浏览器,这些文件必须重新请求了,不要继续使用浏览器cache中的数据. 方案有好几个:</p>
<ol>
<li>手动改这些js的文件名</li>
<li>手动改这些js的路径</li>
<li>通过URL Rewrite方式来改重定位js路径</li>
<li>通过一个在高响应服务器上的一个js配置告知页面,这个页面该链接哪些JS文件</li>
<li>大版本不变,小版本不断追加,等一定时间后,统一更新,高效利用cache</li>
</ol>
<hr />
<h4>标注</h4>
<ol>
<li><a title="f1" name="f1"></a>meizz的js framework还没出正式版，有兴趣在CSDN的页面翻一下</li>
<li><a title="f2" name="f2"></a>Firefox修正方式<br />
<code>function addHTML(oParentNode, sHTML) {     if(window.addEventListener) {// for MOZ         var oRange = oParentNode.ownerDocument.createRange();         oRange.setStartBefore(oParentNode);         var oFrag = oRange.createContextualFragment(sHTML);         oParentNode.appendChild(oFrag);     }     else {// for IE5+         oParentNode.insertAdjacentHTML("BeforeEnd", sHTML);     }}</code></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.aoao.org.cn/blog/2007/06/how-to-show-our-pages-quickly/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.514 seconds -->

