<?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>刘钢的博客 - 我是UED &#187; reflow</title>
	<atom:link href="http://www.iamued.com/tag/reflow/feed" rel="self" type="application/rss+xml" />
	<link>http://www.iamued.com</link>
	<description>http://www.IamUED.com</description>
	<lastBuildDate>Wed, 18 Jan 2012 02:51:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>前端：减少reflow 提升性能</title>
		<link>http://www.iamued.com/qianduan/535.html</link>
		<comments>http://www.iamued.com/qianduan/535.html#comments</comments>
		<pubDate>Sun, 15 Nov 2009 02:32:29 +0000</pubDate>
		<dc:creator>RichieLiu</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[页面实现]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[前端]]></category>
		<category><![CDATA[重构]]></category>

		<guid isPermaLink="false">http://www.iamued.com/?p=535</guid>
		<description><![CDATA[原文：Minimizing browser reflow 作者：Lindsey Simon 翻译：ytzong 浏览器为了重新渲染部分或整个页面，重新计算页面元素位置和几何结构（geometries）的进程叫做 reflow。由于 reflow 是一种浏览器中的用户拦截（user-blocking）操作，所以了解如何减少 reflow 次数，及不同的文档属性（DOM 层级（DOM depth），CSS 效率，不用类型的 style 变化）对 reflow 次数的影响对开发者来说非常必要。有时 reflow 页面中的一个元素会 reflow 它的父元素（译注：这里是复数）以及所有子元素。 有多种用户操作和 DHTML 变化可能会触发 reflow。调整浏览器窗口的大小，用 javascript 计算样式（computed styles），在 DOM 中创建删除元素，改变元素的 class 都会触发 reflow。值得注意的是，有些操作会多次触发 reflow，超出你的想象。下图源自 Steve Souders 的演讲 “Even Faster Web Sites“： 从上表可以很明显的看出，在所有浏览器中并非所有 javascript 控制的样式都触发 reflow，即使触发了触发的次数也不尽相同。同时可以看出现代浏览器在控制 reflow 次数方面做的越来越好。 在 Google，我们通过多种方式对我们的页面及 Web 应用测速，同时 reflow 是我们增加 [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>原文：<a href="http://code.google.com/speed/articles/reflow.html" target="_blank">Minimizing browser reflow</a></li>
<li>作者：Lindsey Simon</li>
<li>翻译：<a href="http://www.99css.com/" target="_blank">ytzong</a></li>
</ul>
<p>浏览器为了重新渲染部分或整个页面，重新计算页面元素位置和几何结构（geometries）的进程叫做 reflow。由于 reflow 是一种浏览器中的用户拦截（user-blocking）操作，所以了解如何减少 reflow 次数，及不同的文档属性（DOM 层级（DOM depth），CSS 效率，不用类型的 style 变化）对 reflow 次数的影响对开发者来说非常必要。有时 reflow 页面中的一个元素会 reflow 它的父元素（译注：这里是复数）以及所有子元素。</p>
<p><span id="more-535"></span></p>
<p>有多种用户操作和 DHTML 变化可能会触发 reflow。调整浏览器窗口的大小，用 javascript 计算样式（<a href="http://www.w3.org/TR/1998/REC-CSS2-19980512/cascade.html#computed-value" target="_blank">computed styles</a>），在 DOM 中创建删除元素，改变元素的 class 都会触发 reflow。值得注意的是，有些操作会多次触发 reflow，超出你的想象。下图源自 Steve Souders 的演讲 “<a href="http://code.google.com/events/io/sessions/EvenFasterWebsites.html" target="_blank">Even Faster Web Sites</a>“：</p>
<p align="center"><img src="http://iamued-wordpress.stor.sinaapp.com/uploads/auto_save_image/2009/11/103239VCf.jpg" border="0" alt="" width="400" height="300" /></p>
<p>从上表可以很明显的看出，在所有浏览器中并非所有 javascript 控制的样式都触发 reflow，即使触发了触发的次数也不尽相同。同时可以看出现代浏览器在控制 reflow 次数方面做的越来越好。</p>
<p>在 Google，我们通过多种方式对我们的页面及 Web 应用测速，同时 reflow 是我们增加 UI 时考虑的一个关键因素。我们致力于传达轻快的（lively），交互性强的（interactive）和令人愉悦的（delightful）的用户体验。</p>
<p><strong>原则</strong></p>
<p>下面是一些减小 reflow 的原则：</p>
<ol>
<li>减少不必要的 DOM 层级（DOM depth）。改变 DOM 树中的一级会导致所有层级的改变，上至根部，下至被改变节点的子节点。这导致大量时间耗费在执行 reflow 上面。</li>
<li>尽量减少 CSS 规则，去除未用到的 CSS。</li>
<li>如果做复杂的表现变化，如动画，让它脱离文档流。用绝对定位或 fixed 定位来完成。</li>
<li>避免不必要的复杂的 CSS 选择器，尤其是后代选择器（descendant selectors），因为为了匹配选择器将耗费更多的 CPU。</li>
</ol>
<p>在下面的视频中（译注：引用自 youtube，无法观看，请到原文翻墙），Lindsey 介绍了一些减少 reflow 的方法。</p>
<p><strong>延伸阅读</strong></p>
<ul>
<li><a href="http://www.mozilla.org/newlayout/doc/reflow.html" target="_blank">Mozilla 关于 HTML reflow 的记录（Mozilla&#8217;s Notes on HTML reflow）</a></li>
<li><a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3" target="_blank">Opera 的重绘和 reflow（Opera&#8217;s Repaints and reflows）</a></li>
<li>Satoshi Ueyama 在 Firefox 中调试 reflow 的例子（Satoshi Ueyama&#8217;s debug-Firefox reflow demos）:
<ul>
<li>
<div><a href="http://www.youtube.com/watch?v=nJtBUHyNBxs" target="_blank">google.co.jp reflow</a></div>
</li>
<li>
<div><a href="http://www.youtube.com/watch?v=ZTnIxIA5KGw" target="_blank">mozilla.org reflow</a></div>
</li>
<li>
<div><a href="http://www.youtube.com/watch?v=dndeRnzkJDU" target="_blank">ja.wikipedia.org reflow</a></div>
</li>
</ul>
</li>
<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/" target="_blank">Nicole Sullivan 的关于 reflow 和 重绘（Nicole Sullivan on Reflows and Repaints）</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.iamued.com/qianduan/535.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

