<?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>Stubbornella</title>
	<atom:link href="http://www.stubbornella.org/content/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stubbornella.org/content</link>
	<description>A Term of Endearment</description>
	<lastBuildDate>Sat, 27 Jun 2009 01:44:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Year of Business Metrics &#8211; Don&#8217;t make your users run away!</title>
		<link>http://www.stubbornella.org/content/2009/06/26/the-year-of-business-metrics-dont-make-your-users-run-away/</link>
		<comments>http://www.stubbornella.org/content/2009/06/26/the-year-of-business-metrics-dont-make-your-users-run-away/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 01:42:22 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Latest Happenings]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[business metrics]]></category>
		<category><![CDATA[reflow]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=341</guid>
		<description><![CDATA[A marked change has occurred since the first Velocity Conference a year ago, and while the effects are not yet obvious, they will be. The web is still slow, but we have something now, that we didn’t a year ago: business metrics. This was the year we quantified the impact of performance choices on our businesses, and the results were astounding. 

For those of you who couldn't attend, this article summarizes results from AOL, Shopzilla, Google, Bing, Hotmail, and Chrome and gives pointers to highlights of Velocity Conference 2009. ]]></description>
			<content:encoded><![CDATA[<h3>Performance at Velocity Conference</h3>
<p>A marked change has occurred since the first Velocity Conference a year ago, and while the effects are not yet obvious, they will be. The web is still slow, but we have something now, that we didn’t a year ago: business metrics. This was the year we quantified the impact of performance choices on our businesses, and the results were astounding. </p>
<p>Those of us who worked in the field had a gut feeling that users want a fast web experience, but most of the studies done previously were lacking something, either in experiment design or reliability of the data. They were all strong indicators that more research needed to be done, but they weren’t damning enough to provide real certainty. This year we found a real correlation between websites speed and its ability to establish and keep relationships with visitors. Not everyone could attend, so I’d like to share with you some of the key moments of an amazing conference. Please feel free to add others in the comments.</p>
<h3>David Artz at AOL</h3>
<p>David Artz from AOL presented their <a href="http://assets.en.oreilly.com/1/event/29/The%20Secret%20Weapons%20of%20the%20AOL%20Optimization%20Team%20Presentation.pdf">findings from a study which measured page views per visit against performance</a>. They divided users into buckets based on response time and plotted it against PV. The results were startling. Across six AOL sites there was a clear inverse correlation. </p>
<h4>The take away: AOL</h4>
<p>Users who had a slower experience view far fewer pages.</p>
<p><a href="http://www.artzstudio.com/2009/06/web-performance-impact-on-revenue-velocity-09-highlights/"><img src="http://www.artzstudio.com/files/velocity-09/aol-pv-visit-speed-correlation.png" alt="AOL PV-speed correlation" /></a> </p>
<h3>Goog and Bing sitting in a tree, K-I-S&#8230;</h3>
<p>Goog and Bing got together (whoa!) to do a study looking at <a href="http://radar.oreilly.com/2009/06/bing-and-google-agree-slow-pag.html">search behavior when performance is worsened over very narrow increments</a>. This study was unique particularly because it followed the same users <em>over a period of time</em>. The data can be used to determine the threshold at which clicks, refined searches, revenue, satisfaction, and time to click are likely to be impacted by features which slow a website. Their methodologies were a bit different, but the conclusions were remarkably similar. A 50MS delay seemed to have no impact, but as little as 200-500MS changed user behavior across the board. Revenue, clicks, and time to first click were most profoundly impacted.</p>
<p><embed src="http://blip.tv/play/AYGL+QOLqzQ" type="application/x-shockwave-flash" width="390" height="390" allowscriptaccess="always" allowfullscreen="true"></embed> </p>
<h4>The Take Away: Bing</h4>
<p>One key point was that users seem to lose their focus if you make them wait too long. Progressive rendering and flushing the header (which are also recommended by Yahoo!) can help. Bing had this to say: </p>
<blockquote><p>Notice that as the delays get longer the Time To Click increases at a more extreme rate (1000ms increases by 1900ms). The theory is that the user gets distracted and unengaged in the page. In other words, they&#8217;ve lost the user&#8217;s full attention and have to get it back.</p>
<p>~ <a href="http://assets.en.oreilly.com/1/event/29/The%20User%20and%20Business%20Impact%20of%20Server%20Delays,%20Additional%20Bytes,%20and%20HTTP%20Chunking%20in%20Web%20Search%20Presentation.pptx">Google &#038; Bing</a></p>
</blockquote>
<p>We’ve all experienced that.  We open a new tab and run a search. Multitasking fools that we are, we flip to a new tab or open our email if the results take too long to load. </p>
<h4>The Take Away: Google</h4>
<p>The most interesting data to come out of the Google tests took place <em>long after the experiment had finished</em>. <strong>As much as five weeks later, some users, especially those who saw delays greater than 400MS, were still searching less than before</strong>. Performance is a feature users want. Fail them, and they may never come back.</p>
<p>The % change recorded was very small. For instance, a half a second delay caused a -1.2% loss of revenue per user. What does that mean? We need to think big, and simultaneously work on incremental and profound ways to make the web faster.</p>
<h3>Shopzilla &#8211; Profound improvements</h3>
<p><a href="http://en.oreilly.com/velocity2009/public/schedule/detail/7709">Shopzilla also presented their (profound) performance improvements</a>. They decreased their response time by around 3.5 seconds and the data showed their conversions increased by 7-9% and their page views skyrocketed 25%.  This is good stuff. This is how we go to business and make the case that performance is an important feature that deserves attention, not a band-aide that you stick on afterwards. <a href="http://www.artzstudio.com/files/velocity-09/shopzilla-performance-summary.png">Dave Artz has more details</a>.</p>
<h3>JavaScript versus CSS versus Network Latency: Which is killing our sites?</h3>
<p>In a separate session with Mike Belche from the Chrome team, he discussed his experiments which tested total time spend on executing JavaScript, rendering the page (CSS), and network latency. He said the vast majority of the time is being spent on network latency. There was a subtle flaw in his methodology, because his rendering time included only one full rendering and painting, because all resources were already in cache and no JavaScript was used, there would be no unnecessary reflows. </p>
<h4>The Take Away: Reflows</h4>
<p>This got me thinking about images and other fixed dimension media. We should always set height and width of images to avoid reflows being caused when the resource is finally downloaded and available. </p>
<p>I agree with him that, except in extreme cases (and a lot of selector/reflow experiments have been too extreme to really reflect reality), rendering will be much less important that network latency. It is much more important to keep page weight and HTTP requests as low as possible. <strong>Over-complicating our CSS selectors to reduce render time would be a mistake.</strong> Browsers are really good at parsing selectors, we need to be really good at writing the minimum number we actually need. This is clearly missing not handled correctly in the current suite of testing tools such as Page Speed. </p>
<p>My talk included (not yet released) suggestions for coding performant selectors. More on that later. <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Further Reading</h3>
<ul>
<li>Aladdin Nassir spoke about linking performance and business metrics via <a href="http://assets.en.oreilly.com/1/event/29/Performance-Based%20Design%20-%20Linking%20Performance%20to%20Business%20Metrics%20Presentation.ppt">Performance-Based Design</a>.  </li>
<li>Lindsey Simon spoke about <a href="http://en.oreilly.com/velocity2009/public/schedule/detail/9340">reflows</a> and an open source tool he is building to better measure these things. The methods for accurately measuring reflows are still a WIP, and the numbers are fuzzy, but that makes this a really interesting project to get involved in.  </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/06/26/the-year-of-business-metrics-dont-make-your-users-run-away/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smush.it finds a home at Yahoo!</title>
		<link>http://www.stubbornella.org/content/2009/04/29/smushit-finds-a-home-at-yahoo/</link>
		<comments>http://www.stubbornella.org/content/2009/04/29/smushit-finds-a-home-at-yahoo/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 22:27:53 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=324</guid>
		<description><![CDATA[Today is a great day for Smush it because Yahoo! decided to accept it into their family of tools. This will allow the tool to run on fanatically maintained servers, with the Yahoo! style quality of service. It doesn’t get any better than that. I feel like my baby is all grown up and going off to college! :) 

<h3>Want to Optimize Images like a Pro?</h3>

<a style="float:right;" href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304"><img border="0" src="https://images-na.ssl-images-amazon.com/images/I/51kJhRzSo1L._SL160_.jpg"/></a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


Stoyan and I have contributed a chapter to <a href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304">Even Faster Web Sites</a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, that outlines all the fantastic tricks you can use to make your sites smaller. We hope you find it useful, and of course we welcome feedback! It will show you how to make image optimization part of your own system, and give you all the information you need to make images as small as possible. 

]]></description>
			<content:encoded><![CDATA[<p>Things are changing around here. </p>
<p>When <a href="http://phpied.com">Stoyan</a> and I created <a href="http://smush.it">Smush.it</a> we were scratching our own itch. As web developers we had spent way too much time optimizing images by hand, and we thought there must be a better solution. Optimizing images was far more important to overall site performance than people were giving it credit for being. Stoyan found that on average 50% of page weight was comprised of images, and that often those images were 30-40% larger than they needed to be. That translated to a lot of image bloat dragging down the web.</p>
<p>When we released Smush it at The Ajax Experience last year we were really excited to see what people did with it; building on the APIs to create a WordPress extension and other cool tools. Since the release we’ve smushed millions of images and put the web on a much needed diet. </p>
<p>Today is a great day for Smush it because Yahoo! decided to accept it into their family of tools. This will allow the tool to run on fanatically maintained servers, with the Yahoo! style quality of service. It doesn’t get any better than that. I feel like my baby is all grown up and going off to college! <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<h3>Want to Optimize Images like a Pro?</h3>
<p><a style="float:right; margin-left: 10px;" href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304"><img border="0" src="https://images-na.ssl-images-amazon.com/images/I/51kJhRzSo1L._SL160_.jpg"/></a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></p>
<p>Stoyan and I have contributed a chapter to <a href="http://www.amazon.com/gp/product/0596522304?ie=UTF8&#038;tag=nicolsulli-20&#038;linkCode=as2&#038;camp=1789&#038;creative=9325&#038;creativeASIN=0596522304">Even Faster Web Sites</a><img src="http://www.assoc-amazon.com/e/ir?t=nicolsulli-20&#038;l=as2&#038;o=1&#038;a=0596522304" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />, that outlines all the fantastic tricks you can use to make your sites smaller. We hope you find it useful, and of course we welcome feedback! It will show you how to make image optimization part of your own system, and give you all the information you need to make images as small as possible. </p>
<h3>What’s changed?</h3>
<p>They&#8217;ve been doing all the quiet background work to get things set up at Yahoo!. In addition, Smush.it functionality has been included in <a href="http://developer.yahoo.com/yslow/smushit/">YSlow 2.0</a> (now in beta!), so you can get all of your performance information in one place. You’ll start seeing changes in look at feel, but Yahoo! assures us the APIs and functionality won’t change. We are proud that this tool has helped so many people improve their site performance. Thank you all for supporting us and using Smush.it.</p>
<p>You can help Yahoo! by <a href="http://tech.groups.yahoo.com/group/exceptional-performance/">providing feedback for Smush.it on their mailing list</a>.</p>
<h3>My favorite Smush it story</h3>
<p>Jaydee, a web developer in Singapore, came to my two-day boot camp. On day one, he heard about optimizing images, when he came back on day two he had already smushed all the images on his site and pushed the changes live. He showed a fantastic commitment to making the Yahoo user experience even faster.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/04/29/smushit-finds-a-home-at-yahoo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Reflows &amp; Repaints: CSS Performance making your JavaScript slow?</title>
		<link>http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/</link>
		<comments>http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 19:15:50 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[reflow]]></category>
		<category><![CDATA[rendering]]></category>
		<category><![CDATA[repaint]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=290</guid>
		<description><![CDATA[<p>I’ve been <a href="http://twitter.com/stubbornella/statuses/1131777322">tweeting</a> and <a href="http://delicious.com/stubbornella/reflow">posting to delicious about reflows and repaints</a>, and it seemed time for a blog post. <em>Opera lists <a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3#reflow">repaint and reflow as one of the three main contributors to sluggish JavaScript</a>, so it definitely seems worth a look.</em></p>
<blockquote>
	<p>Reflows are very expensive in terms of performance, and is one of the main causes of slow DOM scripts, especially on devices with low processing power, such as phones. In many cases, they are equivalent to laying out the entire page again.</p>
</blockquote>
<h3>How to avoid reflows or at least minimize their impact on performance?</h3>
<ol style="list-style-type: decimal;padding-left: 20px;">
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#low">Change classes on the element you wish to	style (as low in the dom tree as possible)</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#inline">Avoid setting multiple inline styles</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#animations">Apply animations to elements that are position fixed or absolute</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#smooth">Trade smoothness for speed</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#tables">Avoid tables for layout</a> </li>
	<li><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/#expressions">Avoid JavaScript expressions in the CSS</a> (IE only)</li>
</ol>
<h3>Tools</h3>
<p>A few tools have made waves lately. Stoyan Stefanov and I have been looking for decent ways to measure reflows and repaints and there are a few tools which show promise (despite being very early alpha).</p>
<ul style="list-style-type: square;padding-left: 20px;">
<li>UPDATE: Lindsey Simon at Google wrote a <a href="http://reflowr.appspot.com/">bookmarklet that tests reflow times on any browser</a>. Fantastic. (Note: all that shaking is normal!)</li>
	<li>John Resig wrote a <a href="http://ejohn.org/blog/browser-paint-events/">bookmarklet to visualize paint events</a>. </li>
	<li>Kyle Scholz created this tool to <a href="http://www.kylescholz.com/blog/2008/11/digging_into_paint_events_in_f_html">visualize paint events before onload</a>. </li>
	<li>Alex at Yoono has created the <a href="http://blog.yoono.com/blog/2008/12/download-yoono-xulprofiler/">XUL profiler</a>.</li>
</ul>
<p>Has anyone else seen any cool tools for evaluating reflows?</p>
]]></description>
			<content:encoded><![CDATA[<p>I’ve been <a href="http://twitter.com/stubbornella/statuses/1131777322">tweeting</a> and <a href="http://delicious.com/stubbornella/reflow">posting to delicious about reflows and repaints</a>, but hadn’t mentioned either in a talk or blog post yet.</p>
<p>I first started thinking about reflows and repaints after a <a href="http://www.flickr.com/photos/kiouv/3035720145/">firey exchange</a> with <a href="http://www.glazman.org/weblog/">Mr. Glazman</a> at <a href="http://www.paris-web.fr/2008/">ParisWeb</a>.  I may be stubborn, but I did actually listen to his arguments.  <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <a href="http://www.phpied.com/">Stoyan</a> and I began discussing ways to quantify the problem.  </p>
<p>Going forward the performance community needs to partner more with browser vendors in addition to our more typical black box experiments. Browser makers know what is costly or irrelevant in terms of performance. <em>Opera lists <a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3#reflow">repaint and reflow as one of the three main contributors to sluggish JavaScript</a>, so it definitely seems worth a look.</em></p>
<p>Let&#8217;s start with a little background information. A <em>repaint</em> occurs when changes are made to an elements skin that changes visibility, but do not affect its layout. Examples of this include outline, visibility, or background color. According to Opera, repaint is expensive because the browser must verify the visibility of all other nodes in the DOM tree. A <em>reflow</em> is even more critical to performance because it involves changes that affect the layout of a portion of the page (or the whole page). Reflow of an element causes the subsequent reflow of all child and ancestor elements as well as any elements following it in the DOM. </p>
<p>For example:</p>
<pre>&lt;body&gt;
&lt;div class=”error”&gt;
	&lt;h4&gt;My Module&lt;/h4&gt;
	&lt;p&gt;&lt;strong&gt;Error:&lt;/strong&gt;Description of the error…&lt;/p&gt;
	&lt;h5&gt;Corrective action required:&lt;/h5&gt;
	&lt;ol&gt;
		&lt;li&gt;Step one&lt;/li&gt;
		&lt;li&gt;Step two&lt;/li&gt;
	&lt;/ol&gt;
&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>In the html snippet above, a reflow on the paragraph would trigger a reflow of the strong because it is a child node. It would also cause a reflow of the ancestors (div.error and body &#8211; depending on the browser). In addition, the h5 and ol would be reflowed simply because they follow that element in the DOM. According to Opera, most reflows essentially cause the page to be re-rendered:</p>
<blockquote>
<p>Reflows are very expensive in terms of performance, and is one of the main causes of slow DOM scripts, especially on devices with low processing power, such as phones. In many cases, they are equivalent to laying out the entire page again.</p>
</blockquote>
<h3>So, if they’re so awful for performance, what causes a reflow?</h3>
<p>Unfortunately, lots of things. Among them some which are particularly relevant when writing CSS:</p>
<ul style="list-style-type: square;padding-left: 20px;">
<li>Resizing the window </li>
<li>Changing the font </li>
<li>Adding or removing a stylesheet </li>
<li>Content changes, such as a user typing text in<br />
		an input box</li>
<li>Activation of CSS pseudo classes such as :hover (in IE the activation of the pseudo class of a sibling) </li>
<li>Manipulating the class attribute </li>
<li>A script manipulating the DOM </li>
<li>Calculating offsetWidth and offsetHeight </li>
<li>Setting a property of the style attribute </li>
</ul>
<p><a href="http://www.mozilla.org/newlayout/doc/reflow.html">Mozilla article about reflows</a> that outlines causes and when they could be reduced.</p>
<h3>How to avoid reflows or at least minimize their impact on performance?</h3>
<p>Note: I’m limiting myself to discussing the CSS impact of reflows, if you are a JavaScripter I’d definitely recommend reading my <a href="http://delicious.com/stubbornella/reflow">reflow links</a>, there is some really good stuff there that isn&#8217;t directly related to CSS.</p>
<ol style="list-style-type: decimal;padding-left: 20px;">
<li><a href="#low">Change classes on the element you wish to	style (as low in the dom tree as possible)</a> </li>
<li><a href="#inline">Avoid setting multiple inline styles</a> </li>
<li><a href="#animations">Apply animations to elements that are position fixed or absolute</a> </li>
<li><a href="#smooth">Trade smoothness for speed</a> </li>
<li><a href="#tables">Avoid tables for layout</a> </li>
<li><a href="#expressions">Avoid JavaScript expressions in the CSS</a> (IE only)</li>
</ol>
<h4 id="low"><strong>Change classes as low in the dom tree as possible </strong></h4>
<p>Reflows can be top-down or bottom-up as reflow information is passed to surrounding nodes. Reflows are unavoidable, but you can reduce their impact. <em>Change classes as low in the dom tree as possible</em> and thus limit the scope of the reflow to as few nodes as possible. For example, you should avoid changing a class on wrapper elements to affect the display of child nodes. Object oriented css always attempts to attach classes to  the object (DOM node or nodes) they affect, but in this case it has the added performance benefit of minimizing the impact of reflows.</p>
<h4 id="inline"><strong>Avoid setting multiple inline styles</strong></h4>
<p>We all know interacting with the DOM is slow. We try to group changes in an invisible DOM tree fragment and then cause only one reflow when the entire change is applied to the DOM. Similarly, setting styles via the style attribute cause reflows. <em>Avoid setting multiple inline styles</em> which would each cause a reflow, the styles should be combined in an external class which would cause only one reflow when the class attribute of the element is manipulated.</p>
<h4 id="animations"><strong>Apply animations with position fixed or absolute</strong></h4>
<p><em>Apply animations to elements that are position fixed or absolute</em>. They don’t affect other elements layout, so they will only cause a repaint rather than a full reflow. This is much less costly.</p>
<h4 id="smooth"><strong>Trade smoothness for speed</strong></h4>
<p>Opera also advises that we <em>trade smoothness for speed</em>. What they mean by this is that you may want to move an animation 1 pixel at a time, but if the animation and subsequent reflows use 100% of the CPU the animation will seem jumpy as the browser struggles to update the flow. Moving the animated element by 3 pixels at a time may seem slightly less smooth on very fast machines, but it won’t cause CPU thrashing on slower machines and mobile devices.</p>
<h4 id="table"><strong>Avoid tables for layout (or set table-layout fixed)</strong></h4>
<p><em>Avoid tables for layout</em>. As if you needed <em>another</em> reason to avoid them, tables often require multiple passes before the layout is completely established because they are one of the rare cases where elements can affect the display of other elements that came before them on the DOM. Imagine a cell at the end of the table with very wide content that causes the column to be completely resized. This is why tables are not rendered progressively in all browsers (thanks to Bill Scott for this tip) and <em>yet another</em> reason why they are a bad idea for layout. According to Mozilla, <a href="http://www.mozilla.org/newlayout/doc/reflow.html">even minor changes will cause reflows of all other nodes in the table</a>.</p>
<p>Jenny Donnelly, the owner of the YUI data table widget, recommends using a fixed layout for data tables to allow a more efficient layout algorithm. Any value for table-layout other than &quot;auto&quot; will trigger a fixed layout and allow the table to render row by row according to the CSS 2.1 specification. Quirksmode shows that <a href="http://www.quirksmode.org/css/tables.html#tablelayout">browser support for the table-layout property</a> is good across all major browsers.</p>
<blockquote>
<p>In this manner, the user agent can begin to lay out the table once the entire first row has been received. Cells in subsequent rows do not affect column widths. Any cell that has content that overflows uses the &#8216;overflow&#8217; property to determine whether to clip the overflow content.</p>
<p><cite><a href="http://www.w3.org/TR/CSS21/tables.html#fixed-table-layout">Fixed layout, CSS 2.1 Specification</a></cite></p>
</blockquote>
<blockquote>
<p>This algorithm may be inefficient since it requires the user agent to have access to all the content in the table before determining the final layout and may demand more than one pass.</p>
<p><cite><a href="http://www.w3.org/TR/CSS21/tables.html#auto-table-layout">Automatic layout, CSS 2.1 Specification</a></cite></p>
</blockquote>
<h4 id="expressions"><strong>Avoid JavaScript expressions in the CSS</strong></h4>
<p>This rule is an oldie but goodie. The main reason these<strong> expressions are so costly</strong> is because they are recalculated each time the document, or part of the document, reflows. As we have seen from all the <em>many</em> things that trigger a reflow, it can occur thousands and thousands of times per second. Beware!</p>
<h3>Further study</h3>
<p>The Yahoo! Exceptional Performance team ran an experiment to determine the optimal method to include an external stylesheet. We recommended putting a link tag in the head because, while it was one second slower (6.3 to 7.3 seconds) all the other methods blocked progressive rendering. While progressive rendering is non-negotiable (users <em>hate</em> staring at a blank screen), it does make me curious about the effects of rendering, repaints, reflows and resulting CPU thrashing on component download and overall response time. If we could reduce the number of reflows during loading could we maybe gain back a tenth of the lost time  (100ms)? What if it was as much as half? </p>
<p>At SXSW I was trying to convince <a href="http://stevesouders.com/">Steve</a> that reflows are important by telling him about an experiment I’ve been meaning to run for a long time, but just haven’t had time. I do hope someone can pick up where I left off (hint! hint!). While loading the page I’d like to intentionally trigger reflows at various rates. This could perhaps be accomplished by toggling a class name on the body (experiment) versus the last child of the body with no descendants (control). By comparing the two, and increasing in the number of reflows per second, we could correlate reflows to response time. Measuring the impact of reflows on JS responsiveness will be harder because anything we do to trigger the reflows will likely impact the experiment.</p>
<p>In the end, quantifying the impact is only mildly interesting, because browser vendors are telling us it matters. Perhaps more interesting is to focus on what causes reflows and how to avoid them. That will require better tools, so I challenge browser vendors and the performance community to work together to make it a reality! </p>
<h3>See it in action</h3>
<p>Perhaps you are a visual person? These videos are a really cool visualization of the reflow process.</p>
<ol>
<li><a href="http://www.youtube.com/watch?v=nJtBUHyNBxs">http://www.youtube.com/watch?v=nJtBUHyNBxs</a>&#8232;</li>
<li><a href="http://www.youtube.com/watch?v=ZTnIxIA5KGw">http://www.youtube.com/watch?v=ZTnIxIA5KGw</a>&#8232;</li>
<li><a href="http://www.youtube.com/watch?v=dndeRnzkJDU">http://www.youtube.com/watch?v=dndeRnzkJDU</a></li>
</ol>
<h3>Reflow gone amok</h3>
<p>In order to improve performance browser vendors may try to limit reflows from affecting adjacent nodes or combine several reflows into one larger change such as <a href="http://www.mozilla.org/newlayout/doc/reflow.html">Mozilla’s dirty reflows</a>. This can improve performance, but sometimes it can also cause display problems. You can use what we’ve learned about reflows and trigger them when necessary to correct related display problems.</p>
<p>For example, when toggling between tabs on our image optimization site, <a href="http://smush.it">http://smush.it</a>, the height of the content is variable from tab to tab. Occasionally the shadow gets left behind as it is several ancestor nodes above the content being toggled and its container may not be reflowed. This image is simulated because the bug is difficult to catch on camera as any attempts to shoot it cause the reflow that corrects it. If you find yourself with a similar bug, move the background images to DOM elements <em>below</em> the content being toggled. </p>
<div><a href="http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/smushit-reflow-problem/" rel="attachment wp-att-304"><img src="http://www.stubbornella.org/content/wp-content/uploads/2009/03/smushit-reflow-problem-300x252.png" alt="Smush.it! with un-reflowed shadows" title="smushit-reflow-problem" width="300" height="252" class="size-medium wp-image-304" /></a></div>
<p class="caption">Smush it on tab change in Firefox only.</p>
<p>Another example is dynamically adding items to an ordered list. As you increase from 9 to 10 items or 99 to 100 items the numbers in the list will no longer line up properly across all navigators. When the total number increases by an order of magnitude and the browser doesn’t  reflow siblings,  the alignment is broken. Quickly toggling the display of the entire list or adding a class, even if it has no associated styles, will cause a reflow and correct the alignment. </p>
<h3>Tools</h3>
<p>A few tools have made waves lately. Stoyan Stefanov and I have been looking for decent ways to measure reflows and repaints and there are a few tools which show promise (despite being very early alpha). Beware, some of these seriously destroyed my browser before I got them working correctly. In most cases you’ll need to have installed the latest nightly builds.</p>
<p>When <a href="https://developer.mozilla.org/web-tech/2008/10/13/mozafterpaint/">Mozilla announced the MozAfterPaint</a> Firefox API, the internets were abuzz. </p>
<ul style="list-style-type: square;padding-left: 20px;">
<li>UPDATE: Lindsey Simon at Google wrote a <a href="http://reflowr.appspot.com/">bookmarklet that tests reflow times on any browser</a>. Fantastic. (Note: all that shaking is normal!)</li>
<li>John Resig wrote a <a href="http://ejohn.org/blog/browser-paint-events/">bookmarklet to visualize paint events</a>. </li>
<li>Kyle Scholz created this tool to <a href="http://www.kylescholz.com/blog/2008/11/digging_into_paint_events_in_f_1.html">visualize paint events before onload</a>. </li>
<li>Alex at Yoono has created the <a href="http://blog.yoono.com/blog/2008/12/download-yoono-xulprofiler/">XUL profiler</a>.</li>
</ul>
<p>Has anyone else seen any cool tools for evaluating reflows? Please send them my way!</p>
<p>And a couple other tools not directly dealing with reflows.</p>
<ul style="list-style-type: square;padding-left: 20px;">
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3&amp;displaylang=en">IE Visual Roundtrip Analyzer (VRTA)</a>, because if Microsoft named it something fun we might actually want to use it. <img src='http://www.stubbornella.org/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa969767.aspx">Performance Profiling Tools for WPF</a>.</li>
</ul>
<p>Ultimately, we need a cross browser tool to quantify and reduce reflows and repaints. I’m hoping that the performance community can partner with browser vendors to make this tool a reality. The browser vendors have been telling us for a while that this was where we needed to look next, the ball is in our court.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/03/27/reflows-repaints-css-performance-making-your-javascript-slow/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Object Oriented CSS video on YDN</title>
		<link>http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn/</link>
		<comments>http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 01:42:39 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Latest Happenings]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[css architecture]]></category>
		<category><![CDATA[object oriented CSS]]></category>
		<category><![CDATA[oocss]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[Women In Technology]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=281</guid>
		<description><![CDATA[Yahoo! Developer Network has released a <a href="http://developer.yahoo.net/blogs/theater/archives/2009/03/website_and_webapp_performance.html">video of my Object Oriented CSS talk at Web Directions North</a> just in time for Ada Lovelace day.  I've also been included in a feature on <a href="http://www.wait-till-i.com/2009/03/24/ada-lovelace-day-women-in-technology-i-admire/">Women in Technology</a>. I'm absolutely flattered to be included among these fantastic technical women. Wow.

<h3>Object Oriented CSS: for high performance websites and web applications.</h3>
<embed src=http://d.yimg.com/cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop.swf?shareEnable=1&#038;id=12627863&#038;autoStart=0&#038;infoEnable=0&#038;shareEnable=0&#038;prepanelEnable=1&#038;carouselEnable=0&#038;postpanelEnable=1 width=300 height=225 type=application/x-shockwave-flash></embed>

Find out more about object oriented css 
<ol style="list-style-type: square; padding-left: 20px;">
	<li><a href="http://wiki.github.com/stubbornella/oocss">Open source project on github</a> (GIT is having some DNS issues, be patient)</li>
	<li><a href="http://www.slideshare.net/stubbornella/object-oriented-css">Follow along with the slides on slideshare</a></li>
	<li>Join the <a href="http://groups.google.com/group/object-oriented-css">OOCSS google group</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Yahoo! Developer Network has released a <a href="http://developer.yahoo.net/blogs/theater/archives/2009/03/website_and_webapp_performance.html">video of my Object Oriented CSS talk at Web Directions North</a> just in time for Ada Lovelace day.  I&#8217;ve also been included in a feature on <a href="http://www.wait-till-i.com/2009/03/24/ada-lovelace-day-women-in-technology-i-admire/">Women in Technology</a>. I&#8217;m absolutely flattered to be included among these fantastic technical women. Wow.</p>
<h3>Object Oriented CSS: for high performance websites and web applications.</h3>
<p><embed src=http://d.yimg.com/cosmos.bcst.yahoo.com/up/fop/embedflv/swf/fop.swf?shareEnable=1&#038;id=12627863&#038;autoStart=0&#038;infoEnable=0&#038;shareEnable=0&#038;prepanelEnable=1&#038;carouselEnable=0&#038;postpanelEnable=1 width=400 height=300 type=application/x-shockwave-flash></embed></p>
<p>Find out more about object oriented css </p>
<ol style="list-style-type: square; padding-left: 20px;">
<li><a href="http://wiki.github.com/stubbornella/oocss">Open source project on github</a> (GIT is having some DNS issues, be patient)</li>
<li><a href="http://www.slideshare.net/stubbornella/object-oriented-css">Follow along with the slides on slideshare</a></li>
<li>Join the <a href="http://groups.google.com/group/object-oriented-css">OOCSS google group</a></li>
</ol>
<p>Thanks to Havi, Julie, Ricky, Yahoo! Developer Network, and the whole <a href="http://north.webdirections.org/">Web Directions North</a> team for their hard work putting this together!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/03/23/object-oriented-css-video-on-ydn/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Object Oriented CSS, Grids on Github</title>
		<link>http://www.stubbornella.org/content/2009/02/28/object-oriented-css-grids-on-github/</link>
		<comments>http://www.stubbornella.org/content/2009/02/28/object-oriented-css-grids-on-github/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 12:51:40 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Latest Happenings]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[event]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=266</guid>
		<description><![CDATA[My Object Oriented CSS grids and templates are open sourced on github.  They have all the functionality of YUI grids plus some important features.

<ul style="list-style-type:square; padding-left: 20px;">
	<li><strong>Only 4kb</strong>, half the size of YUI grids.  (I was totally happy when I checked the final size!)</li>
	<li>They allow <strong>infinite nesting and stacking</strong>.</li>
	<li>The only change required to use any of the objects is to <strong>place it in the HTML</strong>, there are no changes to other places in the DOM and no <strong>location dependent styling</strong>. Eases back-end development and makes it a lot easier to manage for newbies.</li>
	<li>Solution for <strong>sub-pixel rounding errors</strong>.</li>
</ul>

http://wiki.github.com/stubbornella/oocss

template.css and grids.css

<blockquote>…My prediction is that you’ll be writing complex layouts in less than 24 hours without adding a line to the CSS file.</blockquote>

]]></description>
			<content:encoded><![CDATA[<p>How do you scale CSS for millions of visitors or thousands of pages? Object Oriented CSS  allows you to write fast, maintainable, standards-based front end code. It adds much needed predictability to CSS so that even beginners can participate in writing beautiful websites.</p>
<p>I recently presented <em><a href="http://www.slideshare.net/stubbornella/object-oriented-css">Object Oriented CSS</a> for high performance web applications and sites</em> at Web Directions North 2009. If you didn&#8217;t attend my talk, you are probably asking yourself &#8220;what in the world is OO-CSS?&#8221; </p>
<h3>Object Oriented CSS: Two main principles</h3>
<p>1. Separate structure and skin<br />
2. Separate container and content</p>
<p>I&#8217;m writing a framework to demonstrate the technique, but more than anything, Object Oriented CSS is a different way of approaching CSS and the cascade. It draws on traditional software engineering concepts like extending objects, modularity, and predictability. Solutions are judged based on their complexity, in other words,  &#8220;what happens to the size of the CSS file as more pages and modules are added?&#8221;</p>
<p>The answer, for most sites, is that it grows out of control and becomes an unmaintainable tangle of spaghetti code. People often complain about CSS, and rightly so &#8212; even though it inspired a <a href="http://www.stubbornella.org/content/2009/02/12/css-doesn’t-suck-you’re-just-doing-it-wrong/">rant</a>, I understand their frustration.   </p>
<p>Current methods for writing CSS require <strong>expert level ability just to get started</strong>. To become a CSS expert, you need to spend couple years coding away in your basement by yourself before you are remotely useful. Front-end engineering needs to accomodate entry level, mid level, and architect level developers, but our sites are too <strong>brittle</strong>. You may have a perfectly accessible or high performance website, and then the first newbie to touch it, ruins it.  Our code should be robust enough that newbies can contribute while maintaining the standards we’ve set.</p>
<h3>We don&#8217;t trust each others code</h3>
<p>Imagine a JavaScript developer wrote a function to return area, and every now and then it randomly returned the diameter instead. The function would never make it through a code review, and yet we tolerate the same thing from CSS, as if it were immune from normal programming best-practices.   This is why CSS <strong>code reuse is almost nonexistent</strong>.  An object should behave predictably no matter where you place it on the page, which is why Object Oriented CSS avoids <em>location dependent styles</em>. </p>
<h4>What <em>not</em> to do</h4>
<pre>
#myModule h2{...}
#myModule span{...}
#myModule #saleModule{...}
#myOtherModule h3{...}
#myOtherModule span{...}
</pre>
<p>Developers have tried to sandbox their CSS into individual modules, to protect against the cascade.  But in doing so we&#8217;ve ended up with a mess.</p>
<div style="width:425px;text-align:left" id="__ss_990405"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/stubbornella/object-oriented-css?type=powerpoint" title="Object Oriented CSS">Object Oriented CSS</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=oocss-1233786987806904-3&#038;stripped_title=object-oriented-css" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=oocss-1233786987806904-3&#038;stripped_title=object-oriented-css" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/stubbornella">Nicole Sullivan</a>. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/modules">modules</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/blocks">blocks</a>)</div>
</div>
<h2>Object Oriented CSS Grids on github</h2>
<p>My Object Oriented CSS grids and templates are open sourced on github.  They have all the functionality of YUI grids plus some important features.</p>
<ul style="list-style-type:square; padding-left: 20px;">
<li><strong>Only 4kb</strong>, half the size of YUI grids.  (I was totally happy when I checked the final size!)</li>
<li>They allow <strong>infinite nesting and stacking</strong>.</li>
<li>The only change required to use any of the objects is to <strong>place it in the HTML</strong>, there are no changes to other places in the DOM and no <strong>location dependent styling</strong>. Eases back-end development and makes it a lot easier to manage for newbies.</li>
<li>Solution for <strong>sub-pixel rounding errors</strong>.</li>
</ul>
<p>http://wiki.github.com/stubbornella/oocss</p>
<p>Check out template.css and grids.css and the docs on the github wiki.</p>
<blockquote><p>My prediction is that you’ll be writing complex layouts in less than 24 hours without adding a line to the CSS file.</p></blockquote>
<h2>What&#8217;s up next?</h2>
<p>Template and grids are ready for rock and roll.  Please be my alpha testers, put them through their paces. Let me know if you find bugs or want additional functionality. I&#8217;m also hoping to <a href="http://github.com/yui/">contribute some of this back to YUI since they now have a github repository</a>. How cool is that?</p>
<h3>Rounded Corner Boxes and Tabs</h3>
<p>Next up, modules. There are a million cool ways to create rounded corner boxes. I&#8217;m going to take several of my favorites (like <a href="http://www.lesliesommer.com/wdw07/html/">CSS Mojo</a> and Arnaud Gueras blocks) and convert them to OO-CSS.  This will make it super easy for newbies to create their own modules, without needing to understand the minutiae of browser differences.  </p>
<h3>Video / Podcasts </h3>
<p>YDN will publish a video of my talk and Web Directions North is putting out podcasts.  I&#8217;ll tweet and post when that happens. The audio contains a lot more detail than the slides, so check it out as they become available.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/02/28/object-oriented-css-grids-on-github/feed/</wfw:commentRss>
		<slash:comments>64</slash:comments>
		</item>
		<item>
		<title>CSS doesn’t suck, you’re just doing it wrong.</title>
		<link>http://www.stubbornella.org/content/2009/02/12/css-doesn%e2%80%99t-suck-you%e2%80%99re-just-doing-it-wrong/</link>
		<comments>http://www.stubbornella.org/content/2009/02/12/css-doesn%e2%80%99t-suck-you%e2%80%99re-just-doing-it-wrong/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 23:55:19 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=226</guid>
		<description><![CDATA[<img src="http://www.stubbornella.org/content/wp-content/uploads/2009/02/larger_type.jpg" alt="I will not say CSS sucks. I will admit my own discomfort with the problem space." width="300" height="58" class="size-full wp-image-249" />
<h3>A bit of a rant</h3>

The cascade is something like a new data structure, and the ways for dealing with it are algorithms you never learned in school. You couldn’t have, because traditional engineering school poo-poos the front-end and web engineering in favor of stale (but still valuable) traditional software engineering. 

Perhaps you realized this web thing wasn’t going away, so you learned a bit of javascript. That went OK, how hard is it to add another language to your repertoire? Now you just wish it would compile like a proper language. You hate the browsers, and (foolishly) wish there was only one.  You <a href="http://ajaxian.com/archives/css-for-layout-another-rant">find Ajaxian</a>, and start thinking of yourself as super-engineer; the guy who can just as easily write a web UI as a cronjob to perform background data processing.

With the confidence of JavaScript success, you decide to tackle CSS, and then <em>the problems begin</em>.  You start from scratch rather than using a library, because after all this is just a display syntax. (Do you also rewrite the math class every time you need a random number generated?) You don’t bother to learn proper semantic HTML, they must be joking! Nattering on about <em>web standards and accessibility</em>.  It should be cake. 

Nothing works as you expect it to.  Your columns won’t line up. You never validated your HTML, and you have a sneaking suspicion that there is an unclosed tag somewhere. You can’t make even the simplest design look right, and you are pretty sure CSS is to blame, rather than your understanding of the technology.  This should be just another acronym on your resume, right? 

No.  Resoundingly, no. 

CSS can be predictable, scalable, modular and even <a href="http://www.slideshare.net/stubbornella/object-oriented-css">object oriented</a>.  If it is written correctly, beginners can be productively participating in creating clean, reusable code in 2-3 weeks.  But we need to change our approach, understand that the fundamental algorithms for a display language are different than a programing language, and yet borrow everything we can from software engineering, so that we don't waste time reinventing the wheel.
]]></description>
			<content:encoded><![CDATA[<h3>A bit of a rant</h3>
<p>The cascade is something like a new data structure, and the ways for dealing with it are algorithms you never learned in school. You couldn’t have, because traditional engineering school poo-poos the front-end and web engineering in favor of stale (but still valuable) traditional software engineering. </p>
<h4>JavaScript</h4>
<p>Perhaps you realized this web thing wasn’t going away, so you learned a bit of javascript. That went OK, how hard is it to add another language to your repertoire? Now you just wish it would compile like a proper language. You hate the browsers, and (foolishly) wish there was only one.  You <a href="http://ajaxian.com/archives/css-for-layout-another-rant">find Ajaxian</a>, and start thinking of yourself as super-engineer; the guy who can just as easily write a web UI as a cronjob to perform background data processing.</p>
<h4>CSS</h4>
<p>With the confidence of JavaScript success, you decide to tackle CSS, and then <em>the problems begin</em>.  You start from scratch rather than using a library, because after all this is just a display syntax. (Do you also rewrite the math class every time you need a random number generated?) You don’t bother to learn proper semantic HTML, they must be joking! Nattering on about <em>web standards and accessibility</em>.  It should be cake. </p>
<p>Nothing works as you expect it to.  Your columns won’t line up. You never validated your HTML, and you have a sneaking suspicion that there is an unclosed tag somewhere. You can’t make even the simplest design look right, and you are pretty sure CSS is to blame, rather than your understanding of the technology.  This should be just another acronym on your resume, right? </p>
<p>No.  Resoundingly, no. </p>
<h3>Calculating Complexity</h3>
<p>Take for example, calculating the complexity of a given solution.  If you were to calculate <code>O(n)</code> in CSS, <code>n</code> is adding more pages and modules to the site.  What happens to the size of the CSS file?  It goes up, right?  But does it grow like a fifteen year old boy?  If so, you’ve found the CSS equivalent of <code>O(n^2)</code>.  When you keep that stylesheet lean and mean by effectively using the cascade, the fundamental solutions are algorithms, but no, your engineering professors won’t have mentioned them.</p>
<p>If you did manage to get a site up and running, you’ve noticed how fragile your code is.  You touch it on one side and it breaks somewhere else entirely.  You try to sandbox individual components to prevent this, and your CSS file just keeps getting larger.  It is unmanageable, unmaintainable, and it doesn’t scale. Again, you think, CSS sucks, with all these inherent flaws.</p>
<h3>Communication Breakdown</h3>
<p>You think of people who do know CSS as designers, not giving any credit to the engineering prowess required to tame the stylesheet of a multinational corporation because (self-taught as they are) most true front-end gurus don’t speak the same language as you do.  Their skill appears to be a black-art, some kind of magic, or internalized instinct for browser flaws. This is your guess anyway, because you simply can’t communicate with them.  They didn’t go to the right school, or maybe they studied <em>japanese modern literature</em> instead of databases and sorting algorithms. </p>
<p>Furthermore, you don’t understand why it is so hard to hire them.  You said to me once, <quote>“I can sit at the exit of the best engineering schools in the country and scoop up software engineers, but I have no idea how to find you people!”.</quote> You’ve been writing CSS yourself for a couple weeks, so you decide you are ready to hire a web developer / designer / front-end engineer.  The role is pretty unclear, but in your organization they’ll either be alone in a team full of software engineers, or they’ll report to the Artistic Director in the marketing department. You’ll give them goals like “learn SQL” or “some C++ would be <em>really helpful</em>”.   </p>
<p>I once said in an interview, “If we talk about what I know, we’ll arrive at the limits of your understanding very quickly, and if we talk about what you know, we’ll arrive at the limits of my understanding very quickly. So what do we talk about?”. The engineer interviewing me took it well, and I was even more impressed with the company. </p>
<p>By now you have 3-4 weeks of CSS under your belt and you can confidently say, “CSS sucks, <em>our organization will use tables.</em>” Excellent choice grasshopper, if you can’t win, blame the game.  </p>
<h3>An attempt at a solution</h3>
<p>We need your help. Web development and client-side technologies need a dose of best-practices from software engineering.  We don’t need you to solve problems for us, nor will our solutions necessarily be the same as yours, but we need to learn from you rather than reinventing the wheel, so that the front end can mature as a proper engineering discipline. </p>
<p>This is virtually impossible unless we develop a mutual respect for each others’ skills, and software engineers make an effort to understand what makes a good front-end engineer. <em>Hint: it may not be exactly the same skill set, and certainly not the same technologies.</em> Like it or not, managers tend to be software engineers, and you need to understand how to work with your developers to improve the state of the art.  </p>
<h4>Hiring</h4>
<p>You might be an engineering manager, with a self-taught front end engineer sitting before you in a fish bowl conference room you use for interviews.  Look for:</p>
<ul>
<li><strong>A sense of design, attention to aesthetics. </strong>Tattoos, weird hair, artistic hobbies, or slight OCD are good things to look for here. They need to <em>care</em> that the h3 are 1px off from where they should be. [1]
</li>
<li><strong>Semantics and clean HTML</strong> &#8211; foundational, if they don’t have this, be very afraid. If you hear <code>DIV DIV DIV</code>, be very afraid. Note: you may need to study up yourself to judge this.  I print out a mockup (psd for example) that I am currently building and ask them to draw squares on the paper representing the different HTML tags.  I draw a box around one paragraph to get them started. I’m not looking for perfection, just the ability to comprehend the difference between the meaning of things and the display.
</li>
<li><strong>Approach and problem solving</strong> &#8211; make the problem concrete and visual if possible, move slowly toward more abstract questions to judge their ability to generalize a solution.
</li>
<li><strong>Algorithmic mind</strong>  &#8211; assume no prior knowledge of traditional algorithms, but they should be able to understand algorithms you’ve explained and tie that back into the code they write. Again, make it visual.
</li>
<li><strong>Complexity and scalability</strong> &#8211; they might not be thinking in this way (yet!), but if you talk about what happens if there are thousands of pages or an unknown number of user generated modules they should be able to explain the failure points of their code.
</li>
<li><strong>Experience</strong> &#8211; Be aware of the team the developer will join.  If they are alone, you can’t hire a beginner. Their skills won’t develop, and you will be frustrated by the fragility of the code they write.</li>
</ul>
<h3>To solve the communication difficulties, think: </h3>
<blockquote><p>“My web developer is smart, so smart she learned a kind of engineering for which there is no school.  The technologies she knows are as relevant, complicated, and legitimate as those with which I am more comfortable. I may never be an expert in those areas, but I can help her learn the vocabulary of algorithms, complexity, modularity, and scalability so that she can write better and better code. Furthermore, I will never again say that CSS sucks rather than admitting my own discomfort with a different problem space.”</p></blockquote>
<p>Stay after school and write that last line on the board 100 times. </p>
<div id="attachment_253" class="wp-caption alignnone" style="width: 680px"><a href="http://www.stubbornella.org/content/2009/02/12/css-doesn%e2%80%99t-suck-you%e2%80%99re-just-doing-it-wrong/larger_type_lg1/" rel="attachment wp-att-253"><img src="http://www.stubbornella.org/content/wp-content/uploads/2009/02/larger_type_lg1.jpg" alt="CSS doesn&#039;t suck. " title="larger_type_lg1" width="670" height="129" class="size-full wp-image-253" /></a><p class="wp-caption-text">CSS doesn't suck. </p></div>
<p>CSS can be predictable, scalable, modular and even <a href="http://www.slideshare.net/stubbornella/object-oriented-css">object oriented</a>.  If it is written correctly, beginners can be productively participating in creating clean, reusable code in 2-3 weeks.  It is simply a matter of changing our approach, understanding that the fundamental algorithms for a display language are different than a programing language, and borrowing everything we can from software engineering, so that we don&#8217;t spend time reinventing the wheel.</p>
<h3>And If you still want to be an F2E?</h3>
<p>Check out this <a href="http://teachtheweb.com/monograph.php">F2E skills list presented by Leslie Jensen-Inman at Web Directions North</a> as a part of her dissertation on the state of web education.  Note: even the non-acronyms count as skills.</p>
<p>[1]Thanks to Nick Fogler of Juku at Yahoo! for his ideas on aesthetics and F2Es.<br />
[2] The Ajaxian post that made me feel like ranting: http://ajaxian.com/archives/css-for-layout-another-rant</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2009/02/12/css-doesn%e2%80%99t-suck-you%e2%80%99re-just-doing-it-wrong/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Design Fast Websites &#8211; Don&#8217;t blame the rounded corners! on YUI Theater</title>
		<link>http://www.stubbornella.org/content/2008/12/28/design-fast-websites-rounded-corners-yui-theater/</link>
		<comments>http://www.stubbornella.org/content/2008/12/28/design-fast-websites-rounded-corners-yui-theater/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 11:50:06 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[France]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[bling]]></category>
		<category><![CDATA[sprite]]></category>
		<category><![CDATA[web dev]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=204</guid>
		<description><![CDATA[<a href="http://video.yahoo.com/watch/4156174/11192533"><img src="http://ericmiraglia.com/assets/sullivan-fast.jpg" alt="Nicole at the Design Fast Websites Presentation by Eric Miraglia" width="300px" /></a>

I visited Yahoo! last week to record a talk I had given at the Front End Summit in October. If you are a designer or an F2E it is essential that you understand the ways in which design choices impact overall site performance.  This talk establishes guidelines for High Performance Design including 9 Best Practices.
<h3>9 Best Practices </h3>
<ol style="list-style-type: decimal; padding-left: 20px;">
	<li>Create a component library of smart objects.</li>
	<li>Use consistent semantic styles.</li>
	<li>Design modules to be transparent on the inside.</li>
	<li>Optimize images and sprites.</li>
	<li>Avoid non-standard browser fonts.</li>
	<li>Use columns rather than rows.</li>
	<li>Choose your bling carefully.</li>
	<li>Be flexible.</li>
	<li>Learn to love grids. </li>
</ol>



<h3>Web Directions North, Denver, February 2-7</h3>

I'll be speaking more about Design and also CSS best practices at <a href="http://north.webdirections.org/">Web Directions North</a> in February where I've been invited to give both a <a href="http://north.webdirections.org/workshops#performance-bootcamp">Performance Bootcamp Workshop</a> and a <a href="http://north.webdirections.org/program#website-and-webapp-performance">CSS Performance for Websites and Web Apps Presentation</a>.  I look forward to seeing you there!]]></description>
			<content:encoded><![CDATA[<p><a href="http://video.yahoo.com/watch/4156174/11192533"><img src="http://ericmiraglia.com/assets/sullivan-fast.jpg" alt="Nicole at the Design Fast Websites Presentation by Eric Miraglia" width="420" /></a></p>
<p>I visited Yahoo! last week to record a talk I had given at the Front End Summit in October. If you are a designer or an F2E it is essential that you understand the ways in which design choices impact overall site performance.  This talk establishes guidelines for High Performance Design including 9 Best Practices.</p>
<h3>9 Best Practices </h3>
<ol style="list-style-type: decimal; padding-left: 20px;">
<li>Create a component library of smart objects.</li>
<li>Use consistent semantic styles.</li>
<li>Design modules to be transparent on the inside.</li>
<li>Optimize images and sprites.</li>
<li>Avoid non-standard browser fonts.</li>
<li>Use columns rather than rows.</li>
<li>Choose your bling carefully.</li>
<li>Be flexible.</li>
<li>Learn to love grids. </li>
</ol>
<h3>Baby Steps to a Faster Site</h3>
<p>In honor of the video being made available on YUI theater, I&#8217;ve removed the non-standard browser fonts from my site.  While the design was changed slightly it is infinitely more maintainable and I also eliminated an unnecessary HTTP request at the same time.  One more step to a faster page.</p>
<h3>Web Directions North, Denver, February 2-7</h3>
<p>I&#8217;ll be speaking more about Design and also CSS best practices at <a href="http://north.webdirections.org/">Web Directions North</a> in February where I&#8217;ve been invited to give both a <a href="http://north.webdirections.org/workshops#performance-bootcamp">Performance Bootcamp Workshop</a> and a <a href="http://north.webdirections.org/program#website-and-webapp-performance">CSS Performance for Websites and Web Apps Presentation</a>.  I look forward to seeing you there!</p>
<p><a href="http://north.webdirections.org/program"><img src="http://north.webdirections.org/wp-content/themes/webdirections/images/logo.png" alt="Check out the Web Directions North Program." /></a></p>
<p>They have some really <a href="http://north.webdirections.org/speakers">amazing speakers lined up</a>.  I&#8217;m especially excited to talk to <a href="http://simplebits.com/">Dan Cederholm</a>, who wrote one of my favorite books.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2008/12/28/design-fast-websites-rounded-corners-yui-theater/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>ParisWeb Performance Web Videos et slides disponible</title>
		<link>http://www.stubbornella.org/content/2008/12/03/parisweb-performance-web-videos-et-slides-disponible/</link>
		<comments>http://www.stubbornella.org/content/2008/12/03/parisweb-performance-web-videos-et-slides-disponible/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 01:54:50 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[France]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[XHTML / HTML]]></category>
		<category><![CDATA[event]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=220</guid>
		<description><![CDATA[80% des problèmes de performance Web se situe au niveau des échanges avec le navigateur et sur le navigateur lui-même : échanges réseau, rendu dans le navigateur, organisation des composants dans une page etc.

Nous aborderons les principales problématiques et les solutions à mettre en œuvre. Forts de l'expérience de l'équipe performance de Yahoo!, à la fin de cette session vous saurez aborder la question des performances Web du point de vue du visiteur et mettre en œuvre les actions correctrices sur vos sites Web.]]></description>
			<content:encoded><![CDATA[<p>80% des problèmes de performance Web se situe au niveau des échanges avec le navigateur et sur le navigateur lui-même : échanges réseau, rendu dans le navigateur, organisation des composants dans une page etc.</p>
<p>Nous aborderons les principales problématiques et les solutions à mettre en œuvre. Forts de l&#8217;expérience de l&#8217;équipe performance de Yahoo!, à la fin de cette session vous saurez aborder la question des performances Web du point de vue du visiteur et mettre en œuvre les actions correctrices sur vos sites Web.</p>
<h2>Video de la presentation (dailymotion)</h2>
<div><object width="480" height="234"><param name="movie" value="http://www.dailymotion.com/swf/kCUR0DFqaiGfp1Saqh&#038;related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.dailymotion.com/swf/kCUR0DFqaiGfp1Saqh&#038;related=0" type="application/x-shockwave-flash" width="480" height="234" allowFullScreen="true" allowScriptAccess="always"></embed></object><br /><b><a href="http://www.dailymotion.com/video/x7op91_eric-daspet-nicole-sullivan-perform_tech">Eric Daspet &#038; Nicole Sullivan &#8211; Performance Web côté client</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/parisweb">parisweb</a></i></div>
<h2>Slides de la presentation (slideshare)</h2>
<div style="width:425px;text-align:left" id="__ss_785780"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/stubbornella/pourquoi-la-performance-presentation?type=powerpoint" title="Pourquoi la performance?">Pourquoi la performance?</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=pariswebfrsm-1227592453918946-8&#038;rel=0&#038;stripped_title=pourquoi-la-performance-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=pariswebfrsm-1227592453918946-8&#038;rel=0&#038;stripped_title=pourquoi-la-performance-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/stubbornella/pourquoi-la-performance-presentation?type=powerpoint" title="View Pourquoi la performance? on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/image">image</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/sprites">sprites</a>)</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2008/12/03/parisweb-performance-web-videos-et-slides-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prop 8: the musical!</title>
		<link>http://www.stubbornella.org/content/2008/12/03/prop-8-the-musical/</link>
		<comments>http://www.stubbornella.org/content/2008/12/03/prop-8-the-musical/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 20:30:58 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=199</guid>
		<description><![CDATA[Cute, though the whole economy link is kind of odd.

<object width="250" height="209" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param name="movie" value="http://player.ordienetworks.com/flash/fodplayer.swf" /><param name="flashvars" value="key=c0cf508ff8" /><param name="allowfullscreen" value="true" /><embed width="250" height="209" flashvars="key=c0cf508ff8" allowfullscreen="true" quality="high" src="http://player.ordienetworks.com/flash/fodplayer.swf" type="application/x-shockwave-flash"></embed></object><div style="text-align:center;width: 250px;">See more <a href="http://www.funnyordie.com/jackblack">Jack Black</a> videos at Funny or Die</div>]]></description>
			<content:encoded><![CDATA[<p>Cute, though the whole economy link is kind of odd.</p>
<p><object width="464" height="388" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"><param name="movie" value="http://player.ordienetworks.com/flash/fodplayer.swf" /><param name="flashvars" value="key=c0cf508ff8" /><param name="allowfullscreen" value="true" /><embed width="464" height="388" flashvars="key=c0cf508ff8" allowfullscreen="true" quality="high" src="http://player.ordienetworks.com/flash/fodplayer.swf" type="application/x-shockwave-flash"></embed></object>
<div style="text-align:center;width: 464px;">See more <a href="http://www.funnyordie.com/jackblack">Jack Black</a> videos at Funny or Die</div>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2008/12/03/prop-8-the-musical/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New tool: Easy image optimization with Smush it</title>
		<link>http://www.stubbornella.org/content/2008/09/30/new-tool-easy-image-optimization-with-smush-it/</link>
		<comments>http://www.stubbornella.org/content/2008/09/30/new-tool-easy-image-optimization-with-smush-it/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 15:43:51 +0000</pubDate>
		<dc:creator>Nicole</dc:creator>
				<category><![CDATA[Content]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Latest Happenings]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.stubbornella.org/content/?p=195</guid>
		<description><![CDATA[I'm at Ajax Experience this week with my teammate, <a href="http://phpied.com">Stoyan Stefanov</a>. This morning we did a demo of our new tool <a href="http://smushit.com">SmushIt.com</a>.  Smush it allows you to automate image optimization by using the best of open source algorithms to achieve the smallest, high performance images possible.

Smush it comes in different flavors:

<ul>
    	<li>You can upload a bunch of pictures in your browser</li>
    	<li>You can provide us with a list of image urls or</li>
    	<li>You can get a Firefox Extension to optimize the images found on any web page</li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Download the <a href="http://smushit.com/firefox/smush-0.5.xpi">Smush it Firefox extension</a> to follow along with my post.</p>
<p>I&#8217;m at Ajax Experience this week with my teammate, <a href="http://phpied.com">Stoyan Stefanov</a>. This morning we did a lightning-demo of our new tool <a href="http://smushit.com">SmushIt.com</a>.  Smush it allows you to automate image optimization by using the best of open source algorithms to achieve the smallest, high performance images possible.</p>
<div style="width:425px;text-align:left" id="__ss_627379"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/stubbornella/image-optimization-lightning-presentation?type=powerpoint" title="Image Optimization Lightning">Image Optimization Lightning</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=imgoptlightning-1222791054626031-8&#038;rel=0&#038;stripped_title=image-optimization-lightning-presentation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=imgoptlightning-1222791054626031-8&#038;rel=0&#038;stripped_title=image-optimization-lightning-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View SlideShare <a style="text-decoration:underline;" href="http://www.slideshare.net/stubbornella/image-optimization-lightning-presentation?type=powerpoint" title="View Image Optimization Lightning on SlideShare">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/performance">performance</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/image">image</a>)</div>
</div>
<p>Smush it comes in different flavors:</p>
<ul>
<li>You can upload a bunch of pictures in your browser</li>
<li>You can provide us with a list of image urls or</li>
<li>You can get a Firefox Extension to optimize the images found on any web page</li>
</ul>
<p>Our fundamental principal was that the images we produced needed to be 100% pixel for pixel faithful to the original quality.  That means that our techniques are completely lossless.  We decided to let designers decide what quality level was necessary, then, given that quality, we use the best open source compression algorithms to make the image as small as possible.</p>
<p>Smush it also generates a zip so that you can easily download and replace all of the images in your page. </p>
<p><embed src="http://blip.tv/play/AdCdYYHpEA" type="application/x-shockwave-flash" width="640" height="510" allowscriptaccess="always" allowfullscreen="true"></embed>The tool smushes your images in several ways and outputs the best result, or gives you a bravo if your images are already optimized.  Some of the options we test are: </p>
<ul>
<li>Crush PNG</li>
<li>Convert GIF to PNG</li>
<li>Convert JPG to progressive JPG</li>
<li>Remove Metadata</li>
<li>Compress animated GIF</li>
</ul>
<p>We would love feature requests, bugs, or suggestions so that we can improve the tool.  I am nicole at my domain.  At Ajax Experience I showed the tool on <a href="http://kr.yahoo.com/">Korea Yahoo</a>, <a href="http://news.bbc.co.uk/">BBC News</a>, and <a href="http://www.barackobama.com/index.php">Barack Obama&#8217;s site</a>.  Can you guess who had over 300K of useless image bloat?</p>
<p>Modern sites are doing more than they ever have before, this tool will help keep them lean, mean, and (of course) fast.</p>
<p>Christian Heilmann recorded a <a href="http://developer.yahoo.net/blog/archives/2008/09/smushitcom_opti.html">video of our demo for YDN</a>.  The audio is a bit wonky, I&#8217;ll link to the official AE recordings as they become available.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.stubbornella.org/content/2008/09/30/new-tool-easy-image-optimization-with-smush-it/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>
