<?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>omiga &#187; 性能</title>
	<atom:link href="http://omiga.org/blog/archives/tag/%e6%80%a7%e8%83%bd/feed" rel="self" type="application/rss+xml" />
	<link>http://omiga.org/blog</link>
	<description>简单就好</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:39:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>性能，还是性能！</title>
		<link>http://omiga.org/blog/archives/1078</link>
		<comments>http://omiga.org/blog/archives/1078#comments</comments>
		<pubDate>Thu, 28 May 2009 13:17:42 +0000</pubDate>
		<dc:creator>omiga</dc:creator>
				<category><![CDATA[前端开发]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ratestar]]></category>
		<category><![CDATA[性能]]></category>

		<guid isPermaLink="false">http://omiga.org/blog/?p=1078</guid>
		<description><![CDATA[很简单的一个应用，实现方式当然也是多种多样，最直接的，通过&#60;img&#62;的src属性，但我想这是最废材的方法了，这样一个效果，你至少需要两张图片，然后是更多的DOM操作，你还要面对图片下载延迟的问题。还有啥性能（1，2）可言？ 于是我写了以下的实现方式（DEMO）： function star(id){ var star = $(id); var stars = $(id).getElementsByTagName("li"); for(var i=0; i&#60;stars.length; i++){ stars[i].starNum = i+1; stars[i].onmouseover = function(){ star.star = this.starNum; star.style.backgroundPosition = 'left '+(-parseInt(this.starNum)*30)+'px'; } stars[i].onclick = function(){ alert(star.star); } } star.onmouseout = function(){ star.star = 0; this.style.backgroundPosition = 'left top'; } } function $(id){return document.getElementById(id);} 当然要依据特定的DOM，这种方式通过改变背景图片的位置来实现，看起来似乎已经很完美了，可惜这只是较之于src的实现方法而言。 再看一个TZ的改进的版本（DEMO）： function $(element){ [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="ratestar" src="http://omiga.org/img/ratestar.gif" alt="" width="188" height="55" /></p>
<p>很简单的一个应用，实现方式当然也是多种多样，最直接的，通过&lt;img&gt;的src属性，但我想这是最废材的方法了，这样一个效果，你至少需要两张图片，然后是更多的DOM操作，你还要面对图片下载延迟的问题。还有啥性能（<a href="http://omiga.org/blog/archives/113">1</a>，<a href="http://omiga.org/blog/archives/294">2</a>）可言？</p>
<p>于是我写了以下的实现方式（<a href="http://omiga.org/lab/star/">DEMO</a>）：</p>
<pre>function star(id){
	var star = $(id);
	var stars = $(id).getElementsByTagName("li");
	for(var i=0; i&lt;stars.length; i++){
		stars[i].starNum = i+1;
		stars[i].onmouseover = function(){
			star.star = this.starNum;
			star.style.backgroundPosition = 'left '+(-parseInt(this.starNum)*30)+'px';
		}
		stars[i].onclick = function(){
			alert(star.star);
		}
	}
	star.onmouseout = function(){
		star.star = 0;
		this.style.backgroundPosition = 'left top';
	}
}
function $(id){return document.getElementById(id);}</pre>
<p>当然要依据特定的DOM，这种方式通过改变背景图片的位置来实现，看起来似乎已经很完美了，可惜这只是较之于src的实现方法而言。</p>
<p>再看一个TZ的改进的版本（<a href="http://omiga.org/lab/ratestar/">DEMO</a>）：</p>
<pre>    function $(element){
      return document.getElementById(element) ;
    }
    var obj = $('outter').getElementsByTagName("li") ;
    for (var i=0,k;k=obj[i];i++ ) {
      k.no = i ;
      k.onmouseover = function () {
        for (var i=0;i&lt;=this.no;i++ ) {
          obj[i].style.backgroundPosition = 'left -30px' ;
        }
      }
      k.onmouseout = function () {
        for (var i=0;i&lt;=this.no;i++ ) {
          obj[i].style.backgroundPosition = 'left top' ;
        }
      }
    }</pre>
<p>很显然，这个写法比我的又更优化了一些。虽然都是通过改变背景图片的坐标来实现，但是，我使用了一个30K的jpg图片，TZ使用的却是一个只有599B的gif图片，但即使不使用gif，他的图片也会比我的小很多，大概是15倍左右～···，因为具体的实现方式决定了。虽然他的方法增加了更多的DOM操作，但是最大限度地优化网络传输方面的<a href="http://omiga.org/blog/archives/294">性能</a>，总体性能是最佳的！</p>
<p>只有一个感概：只要有可能，就要最大限度的减少页面下载量，就要最大限度的提升代码性能！</p>
<hr />
<p><small>© omiga for <a href="http://omiga.org/blog">omiga</a>, 2009. |
<a href="http://omiga.org/blog/archives/1078">Permalink</a> |
<a href="http://omiga.org/blog/archives/1078#comments">5 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://omiga.org/blog/archives/1078&title=性能，还是性能！">del.icio.us</a>
<br/>
Post tags: <a href="http://omiga.org/blog/archives/tag/javascript" rel="tag">javascript</a>, <a href="http://omiga.org/blog/archives/tag/ratestar" rel="tag">ratestar</a>, <a href="http://omiga.org/blog/archives/tag/%e6%80%a7%e8%83%bd" rel="tag">性能</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://omiga.org/blog/archives/1078/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

