<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[自由时代]]></title>
  <subtitle type="html"><![CDATA[借你的魅力让我才华不朽，借我的才华让你魅力增添。]]></subtitle>
  <id>http://www.freeage.cn/</id>
  <link rel="alternate" type="text/html" href="http://www.freeage.cn/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.freeage.cn/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2010-07-29T14:08:58+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[转：独一无二的松子──写给毕业班同学]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=8" label="其它分类" /> 
	  <updated>2010-07-29T14:08:58+08:00</updated>
	  <published>2010-07-29T14:08:58+08:00</published>
		  <summary type="html"><![CDATA[<div id="Cnt-Main-Article-QQ" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 20px; padding-left: 0px; font-size: 14px; ">
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; "><strong style="font-style: normal; font-weight: 800; ">周保松 香港中文大学政治与行政学系教师</strong></p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">各位同学：</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">你们今天将披上毕业袍，在春雾弥漫杜鹃满山的三月，向大学生活道别。有同学对我说，老师，为我们写点什么吧，留个纪念。我明白你们的心意。中大是一座山，而政治系在山之巅。三年来，我们在山中一起思考政治、哲学与人生，日夕相处，度过无数难忘时光，此刻目送你们学成下山，真是既安慰又不舍。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">让我从中大的树说起吧。你们都知道，中大多马尾松。马尾松并不起眼，长在山坡上，终年常绿，开花也好，结果也好，没人会留意。有时在校园散步，见到掉下来的松子，我会拾起几颗，带回家中。后来，我读到台湾作家周志文一篇回忆少年同学的文章，说这些一生默默无闻的人，犹如&ldquo;空山松子落，不只是一颗，而是数也数不清的松子从树上落下，有的落在石头上，有的落在草叶上，有的落在溪涧中，但从来没人会看到，也没人会听到，因为那是一座空山&rdquo;。这是实情。但想深一层，即便不是空山，即便人来人往如中大，我们又何曾关心那一颗又一颗松子的命运。在我们眼中，所有松子其实没有差别。一批掉了，零落成泥，另一批自然生出来，周而复始。世界不会因为多了或少了一颗松子而有任何不同。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">松子的命运，大抵也是人生的实相。如果我注定是万千松子的一颗，平凡走过一生，然后不留痕迹地离开，我的生命有何价值？如果我只是历史长河的一粒微尘，最后一切必归于虚无，今天的努力和挣扎，于我有何意义？</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">每次想起这个问题，我的心情总是混杂。有时惶恐，有时悲凉，有时豁达，有时虚无。更多的时候，是不让自己想下去，因为它犹如将人置于精神的悬崖，稍一不慎便会掉下去。我于是退一步问，为什么这个问题总是挥之不去，总是如此影响心情。渐渐，我明白，我其实不可以不想，因为我是人，有自我意识和价值意识。我如此清楚见到自己在活着，见到当下眨眼成过去，见到自己作为独立个体在默默走着自己的路。更重要的，是我无时无刻不在衡量自己的生命。我们心中好像有杆秤，要求自己每天要活得好。我们认真规划人生，谨慎作出决定，珍惜各种机会，因为我们知道，生命只有一次，而生命是有好与坏幸福不幸福可言的。我们不愿意活得一无是处，不愿意虚度华年，意义问题遂无从逃避。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">难题于是出现。从个体主观的观点看，我自己的生命就是一切，重如泰山。我的生命完结，世界也就跟着完结。我是宇宙的中心。但只要离自己远一点，从客观的观点看，我又必须承认，我只是万千松子的其中一颗。我的生命完结了，世界仍然存在，一点没变。我的生命如微尘滴水，毫无分量，很快遭人遗忘，后面有更多来者。这不是什么难以想象的事。每次去完殡仪馆，目睹至亲好友片刻化成灰烬，返回闹市，再次面对笑语盈盈的人群，我总有难言的伤恸。那一刻，我看到生的重，也看到生的轻。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">既然我们的人生路线图早已画好，这中间的曲曲折折，真的有分别吗？</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">我想我们总是相信，那是有分别的。对，即使我是长在深谷无人见的松子，终有一天跌落荒野化成泥，我依然不会接受，我的人生和他人毫无分别，更不会接受我的人生毫无价值。但这是自欺吗？我们是在编织一张意义之网安慰自己吗？我不认为是这样。所有意义问题之所以成为问题，之所以困扰我，说到底，是因为我意识到&ldquo;我&rdquo;的存在，意识到&ldquo;我&rdquo;在活着自己的生命，并在规划属于自己的人生。如果我没有了一己的主观观点，只懂从一客观抽离的角度观照自身，我将无法理解&ldquo;我&rdquo;为何要如此在乎自己。我们必须先意识到&ldquo;我&rdquo;的存在，并在浩瀚宇宙中为&ldquo;我&rdquo;找到一个立足点，意义问题才会浮现。所以，即使我是一颗松子，也不必因为看到身边还有无数更大更美的松子而顾影自怜，更不必因为默默无闻而觉一生枉度。我真实经历了属于自己的春夏秋冬，见证一己容颜的变迁，并用自己的眼睛和心灵，体味生命赋予的一切。这份体味，是别人夺不走也替代不了的。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">这份对自我存在的肯定，是我们活着的支柱。这个世界很大，这个世界有很多其他生命，但我只能从我的眼睛看世界，只能用我的身体和心灵去与世界交往。只有先有了&ldquo;我&rdquo;，我们才能开始思考如何活出有意义的人生。但问题并未在此完结。因为一旦有了&ldquo;我&rdquo;，自然也就有无数与&ldquo;我&rdquo;不同的他者。我们的样貌性情能力信仰家境出身，千差万别。有了差异，便难免有争。我们于是时刻将他人当作对手，并要为自己争得最多的财富地位权力。各位离开学校进入社会工作，可能感受最深的，正是这种无时无刻无处不在的竞争压力。我们未必喜欢争，但却不得不争，因为所有人都告诉你，世界就是一个竞技场，只有争才能生存，只有争才能肯定自己的存在价值。人世间种种压迫宰制异化，遂由此而生。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">问题是，这些压迫宰制异化，真的无可避免吗？不同个体组成社会，难道不能够以更平等更公正的方式活在一起吗？这是过去三年，我们在课堂上经常讨论的问题。我认为，承认个体差异和接受平等相待之间，虽有张力，但并非不可调和。关键之处，在于我们能否将两种看似对立的观点融合。一方面，从主观的观点看，我们意识到自我的独特和不可替代，以及一己生命对于自身绝对的重要性。另一方面，转从客观的观点看，我们将意识到，如果我的生命对我无比重要，那么他或她的生命，也将对他或她同样重要。我们都是人，都有自己的生命要过，都渴望过得好。就此而言，我们的生命，有同样的重要性。我们不以一个人的出身能力财富，去将人划分等级，并以此衡量人的价值。推己及人，我们既看到人的差异，也看到人作为人共享的可贵人性，因而努力在群体生活中实践平等尊严的政治。也就是说，我们既要肯定个性，鼓励每个人自由地活出自己的生命情调，同时要彼此关顾，保障人的平等权利，使得人们能够公正地活在一起。这是我常说的，我们应该追求一种自由人的平等政治。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">我觉得，受过大学教育的人，应该有这样一份对人的平等关注。但这并不容易。试想想，各位也是经历重重考试，并将很多同辈甩在后面，才能进入中文大学。而一旦离开校门，迎面而来的将是更激烈的竞争。既然这样，我们如何能够穿过人的种种差异，看到人性中共享的价值，并以此作为社会合作的基础，实现平等尊严的政治？到底需要怎样的制度建设和文化氛围，我们才能培养出这样的道德信念？这是活在资本主义社会的我们必须认真思考的问题。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">各位下山之际，为什么我还要如此絮絮不休和大家探讨这些问题？因为问题重要。在上面的讨论中，我指出生命中有两重根本的张力，并尝试提出化解之道。第一重是两种观照人生的方式带来的的张力，第二重是生命的差异和平等导致的张力。第一重张力，影响我们如何好好地活着。第二重张力，影响我们如何好好地活在一起。各位身为读书人，关心生活关心政治，是一生之事，不应随着披上毕业袍而终。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">大家应该还记得，去年冬天上完《当代政治哲学》最后一课，我们曾在联合书院教室外那个裂开的大松子雕塑前合照留念。那个大松子啊，笑得活泼率真。在我眼中，你们都是独一无二的松子。</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">&nbsp;</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">&nbsp;</p>
<p style="margin-top: 20px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; line-height: 25px; text-indent: 2em; ">&nbsp;</p>
</div>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=231" /> 
	  <id>http://www.freeage.cn/default.asp?id=231</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[在VMware成功安装MacOS 10.5.6]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-05-23T21:58:52+08:00</updated>
	  <published>2010-05-23T21:58:52+08:00</published>
		  <summary type="html"><![CDATA[<p>&nbsp;今天终于在win7的VMware成功安装了MACOS 10.5.6.</p>
<p>&nbsp;</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=6" /></p>
<p>&nbsp;</p>
<p>在安装过程中,主要遇到以下几个问题,现总结一下:</p>
<p>&nbsp;1. 在VMware虚拟机中，网上的有的朋友说CPU需要选择下面这个：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.freeage.cn/download.asp?id=23" /></p>
<p>2. 装到最后快成功的时候,显示还有一分钟,安装程序卡死在这里,一直不动.我等了一会儿以后,直接关掉虚拟机电源,然后重新打开虚拟机,结果发现系统正常进去了.</p>
<p>3. 安装完成后，发现虚拟机老是启动不了，提示什么cpu不能使用，然后就会反复重启中，到网上找了下资料，有人说需要把虚拟机目录下 vmx文件中把guestOS修改为：guestOS = &quot;darwin10&quot;，保存后重新开户虚拟机即正常了。</p>
<p>4.&nbsp;安装以后,发现系统不能重硬盘启动.只能通过光驱挂载启动文件(darwin),才能进入系统.目前这个问题还没有解决。</p>
<p>5. 成功安装了声卡,显卡,网卡驱动。声卡驱动使用的是:&nbsp;EnsoniqAudioPCI；显卡驱动使用是:</p>
<p>VMsvgeII，网卡使用的是: VM_NET_Driver_for_Mac_OS。&nbsp;</p>
<p>6. 虚拟机里面的光驱接口要选择SCSI，否则进入系统会识别不了。</p>
<p>&nbsp;</p>
<p>下面放几张图看看：</p>
<p>桌面截图:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=19" /></p>
<p>五笔输入法(使用的FIT):&nbsp;</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=9" /></p>
<p>Chrome浏览器:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=11" /></p>
<p>QQ截图:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=12" /></p>
<p>分辨率切换:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=13" /></p>
<p>声音设置:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=14" /></p>
<p>网络设置:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=15" /></p>
<p>&nbsp;</p>
<p>系统资源使用情况:</p>
<p><img alt="" src="http://www.freeage.cn/download.asp?id=20" /><br />
<br />
<br />
<img alt="" src="http://www.freeage.cn/download.asp?id=21" /></p>
<p>&nbsp;</p>
<p>网卡驱动下载: &nbsp;<a href="http://www.freeage.cn/download.asp?id=16"><img border="0" alt="" style="margin: 0px 2px -4px 0px" src="http://www.freeage.cn/images/download.gif" />点击下载此文件</a></p>
<p>声卡驱动: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.freeage.cn/download.asp?id=17"><img border="0" alt="" style="margin: 0px 2px -4px 0px" src="http://www.freeage.cn/images/download.gif" />点击下载此文件</a></p>
<p>显卡驱动: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.freeage.cn/download.asp?id=18"><img border="0" alt="" style="margin: 0px 2px -4px 0px" src="http://www.freeage.cn/images/download.gif" />点击下载此文件</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=230" /> 
	  <id>http://www.freeage.cn/default.asp?id=230</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[中关村在线出现异常跳转]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-04-20T14:53:00+08:00</updated>
	  <published>2010-04-20T14:53:00+08:00</published>
		  <summary type="html"><![CDATA[<p><br />
<span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">&nbsp;&nbsp; &nbsp; &nbsp; 今天，14:24分左右，打开中关村在线网站(http://www.zol.com.cn)，打开后突然发现页面跳转到了一个baidu空间的网站，地址是：http://hi.baidu.com/edworkshop/blog/item/66929e2fb4ca06381e3089d4.html。</span></span></p>
<p><span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">&nbsp;&nbsp; &nbsp; &nbsp; 开始还以为是我不小心点了哪里的广告或链接进去，然后再试了下就发现最开始打开是正常，稍等一下就跳转到了上述baidu空间，截图如下：</span></span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img alt="" src="http://www.freeage.cn/download.asp?id=5" /></p>
<p><span style="font-size: 14px; "><span style="color: rgb(51, 102, 255); ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;通过抓包发现zol.com.cn有一个这样的请求页面：<br type="_moz" />
</span></span></p>
<p><span style="font-size: 14px; "><span style="color: rgb(51, 102, 255); ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;http://stat.zol.com.cn/ol.php?ad_key_list=konka27888hpword|hp28670hpword|sharp28509hpword|autodesk29002hpword|logi28247hpword|canon29111hpword|hp29439hpword|nikia29702hpword|hp29812hpword|kaba28995hpword|toshiba29786hpword|hp30245hpword|hp30268hpword|jind29862hpword|sam30469howord|nokia30551hpword|hkc28268hp248|canonhpzq|intel29615hpwz|len29974hp760|len30545hp760|len30131hp760|len30131hp760a|intel30535hp760span|haier26119hp400|haier26119hp400|changw25896hp145|haier26009hp100|haier26009hp100&amp;t=1271744692790943</span></span></p>
<p><span style="font-size: 14px; "><span style="color: rgb(51, 102, 255); ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;内容如下：</span></span></p>
<div class="codeText">
<div class="codeHead">Javascri&#112;t代码</div>
<ol start="1" class="dp-c">
    <li class="alt"><span><span>document.write(</span><span class="string">'&lt;iframe&nbsp;&nbsp;marginheight=0&nbsp;&nbsp;marginwidth=0&nbsp;&nbsp;frameborder=0&nbsp;&nbsp;scrolling=no&nbsp;&nbsp;width=0&nbsp;&nbsp;height=0&nbsp;&nbsp;src=&quot;http://hi.baidu.com/edworkshop/blog/item/66929e2fb4ca06381e3089d4.html&quot;&gt;&lt;/iframe&gt;'</span><span>);document.write(</span><span class="string">'&lt;img&nbsp;width=0&nbsp;height=0&nbsp;border=0&nbsp;src=&quot;http://imp.zol.com.cn/imphit0001.gif?impid=haier26009hp100&amp;tmp=2029392626&quot;&gt;'</span><span>);document.write(</span><span class="string">'&lt;iframe&nbsp;&nbsp;marginheight=0&nbsp;&nbsp;marginwidth=0&nbsp;&nbsp;frameborder=0&nbsp;&nbsp;scrolling=no&nbsp;&nbsp;width=0&nbsp;&nbsp;height=0&nbsp;&nbsp;src=&quot;http://view.admaster.com.cn/show.php?a=1061&amp;b=10021&amp;c=367&amp;i=100&amp;f=1&amp;h=&amp;e=12628263099401803265&amp;g=12717386272011489784&amp;d=null&quot;&gt;&lt;/iframe&gt;'</span><span>);document.write(</span><span class="string">'&lt;img&nbsp;width=0&nbsp;height=0&nbsp;border=0&nbsp;src=&quot;http://imp.zol.com.cn/imphit0001.gif?impid=haier26119hp400&amp;tmp=511289477&quot;&gt;'</span><span>);document.write(</span><span class="string">'&lt;iframe&nbsp;&nbsp;marginheight=0&nbsp;&nbsp;marginwidth=0&nbsp;&nbsp;frameborder=0&nbsp;&nbsp;scrolling=no&nbsp;&nbsp;width=0&nbsp;&nbsp;height=0&nbsp;&nbsp;src=&quot;http://hi.baidu.com/edworkshop/blog/item/66929e2fb4ca06381e3089d4.html&quot;&gt;&lt;/iframe&gt;'</span><span>);document.write(</span><span class="string">'&lt;img&nbsp;width=0&nbsp;height=0&nbsp;border=0&nbsp;src=&quot;http://imp.zol.com.cn/imphit0001.gif?impid=haier26009hp100&amp;tmp=391589983&quot;&gt;'</span><span>);document.write(</span><span class="string">'&lt;iframe&nbsp;&nbsp;marginheight=0&nbsp;&nbsp;marginwidth=0&nbsp;&nbsp;frameborder=0&nbsp;&nbsp;scrolling=no&nbsp;&nbsp;width=0&nbsp;&nbsp;height=0&nbsp;&nbsp;src=&quot;http://view.admaster.com.cn/show.php?a=1061&amp;b=10021&amp;c=367&amp;i=100&amp;f=1&amp;h=&amp;e=12628263099401803265&amp;g=12717386272011489784&amp;d=null&quot;&gt;&lt;/iframe&gt;'</span><span>);document.write(</span><span class="string">'&lt;img&nbsp;width=0&nbsp;height=0&nbsp;border=0&nbsp;src=&quot;http://imp.zol.com.cn/imphit0001.gif?impid=haier26119hp400&amp;tmp=389109576&quot;&gt;'</span><span>);document.write(</span><span class="string">''</span><span>);&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;&nbsp; &nbsp; &nbsp; <span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">&nbsp;&nbsp; &nbsp; 目前还不清楚是误更新还是被人利用了。</span></span></p>
<p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=229" /> 
	  <id>http://www.freeage.cn/default.asp?id=229</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[终于抽时间把blog升级了]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-04-15T10:24:49+08:00</updated>
	  <published>2010-04-15T10:24:49+08:00</published>
		  <summary type="html"><![CDATA[<p><span style="font-size: 16px; "><span style="color: rgb(51, 102, 255); ">　　终于把blog 升级了。。。</span></span></p>
<p><span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">　　pjblog 2.7的版本用了很长的一段时间，一直没有去升级，最近看看pjblog3出来很久了，终于有了想升级的想法。<br />
</span></span></p>
<p><span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">　　不过，看了官方网站的升级，还真挺麻烦的，不能直接从2.7升级到最新版本，要一步步往上升，还是比较麻烦。 &nbsp;</span></span></p>
<p><span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">　　所以后来自就直接重新安装了新的版本，然后手动把数据导入到3.0里面。 目前测试了，功能都还正常。</span></span></p>
<p><span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">　　也没有用什么很多插件，所以安装插件是很快的，目前正在感受pjblog3的功能改进。<br />
</span></span></p>
<p><span style="color: rgb(51, 102, 255); "><span style="font-size: 14px; ">　　似乎pjblog4也出来，希望能够到时会有一个完整的升级方案，对于不太懂这方面的朋友能够快速升级。</span></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=228" /> 
	  <id>http://www.freeage.cn/default.asp?id=228</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Google.cn转向了Google.com.hk]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-03-23T10:21:41+08:00</updated>
	  <published>2010-03-23T10:21:41+08:00</published>
		  <summary type="html"><![CDATA[<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;<font size="4"><font color="#ff6600">今天早上打开Google.cn，发现被重定向了Google.com.hk，看来流传了几个月的言论现在终于有了定论。 </font></font></p>
<p><font color="#ff6600" size="4">&nbsp;&nbsp;&nbsp;&nbsp;Google.cn最终还是退出了中国。</font></p>
<p><img alt="" src="http://www.freeage.cn/attachments/month_1003/o2010323102024.jpg" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<font color="#ff6600" size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于这一决定，2010年3月23日，注定要成为互联网历史上一个特殊的日子。<br />
</font><br />
<font color="#ff6600" size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择永远是痛苦的，生活中美好的事物总是以牺牲另外同样美好的事物来换取。</font></p>
<p><font color="#ff6600" size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但愿时间能够澄清所有的疑惑和不解，推测与流言！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font color="#ff6600" size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 愿Google在新的征程上一路走好！</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p><br />
&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=225" /> 
	  <id>http://www.freeage.cn/default.asp?id=225</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[终于订到票了，要回家了.....]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-02-03T09:31:12+08:00</updated>
	  <published>2010-02-03T09:31:12+08:00</published>
		  <summary type="html"><![CDATA[<span style="font-size:12pt;line-height:100%;"><br/>　　今年还算幸运，能打进去电话订到回家的车票。<br/>　　出来这么久，还是第一次这么顺利的买到票，也是第一次没有从黄牛手上买票了。<br/>　　说实话，这电话真不容易打呀.......<br/><br/></span>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=224" /> 
	  <id>http://www.freeage.cn/default.asp?id=224</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[转载]Google员工：我很幸运可以在这样一家公司工作]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-01-15T21:10:34+08:00</updated>
	  <published>2010-01-15T21:10:34+08:00</published>
		  <summary type="html"><![CDATA[<h2 style="BACKGROUND-COLOR: rgb(153,204,0)">Google员工：我很幸运可以在这样一家公司工作</h2>
<div style="BORDER-LEFT: rgb(221,221,221) 5px solid; MARGIN: 15px 30px 0pt 10px; PADDING-LEFT: 20px">
<p><a title="宁为玉碎，不为瓦全-为Google喝彩" href="http://www.kenengba.com/post/2248.html"><strong><font color="#008d00">Google 退出中国的事件</font></strong></a>最近闹得沸沸扬扬，<font color="#ff0000"><strong>网络上的阴谋论四起</strong></font>，整个事件俨然已经成为中美政府角力的国际头条。</p>
<p>这两天网络上流传着一篇文章：<a href="http://blog.devep.net/virushuo/2010/01/14/blog56google_blogtinyfool_1_go.html"><strong><font color="#008d00">Google百度和谷歌的那些事</font></strong></a>，文中提到，这个事件突显出来的，不只是一种利益的冲突，而是更高层次的价值观的冲突，既然我们都难得见证了一个我相信是影响深远的历史事件，我觉得有必要在此时此刻把自己的想法写下来，作为一种个人的人生记录。</p>
<p>如同文章中所写到的：Google 的创办人是幸运的，有这样一个史无前例的机会，把商业价值建立在正确的价值观上面。这句话相当地震撼我，因为我再次意识到，原来这样的幸运是几乎全世界的人都没有的，大部分的人朝九晚五的工作，做着一些自己可能不那么喜欢的事情；看客户的脸色，挨老板的骂，一切忍气吞声，只希望有一天这些忍耐都值得，年资深了，可以不再受制于人，实现人生的自由。</p>
<p>每个企业的高层，总是借着不同的场合，强调公司的价值观是如何如何，我们基层员工是应该如何地有使命感。只是，这些高层，似乎永远离我们那么遥远，他们的话，也似乎像回声一样那么地不切实际且转瞬消逝。</p>
<p>事实上是，踏出社会之后，大部分的我们就一步一步地远离自己的本性和价值观，深处真实的世界，我们有着&ldquo;人在江湖、身不由己&rdquo;的无奈，我们开始向现实低头，开始隐藏住自己的情绪，凡事开始懂得去算计、思考自身利益的最大化；我们被迫在谈判中耍一些小手段，在办公室外安排&ldquo;第二摊&rdquo;。吃饭应酬小心翼翼，免得得罪人，以后不知道会对自己有什么不好的影响。</p>
<p>一切是为了公司，也是为了自己。</p>
<p>我们变得常常需要说服自己：&ldquo;这是必要之恶，我并没有偷拐抢骗，只是好好利用手边的资源。&rdquo;刚出社会原本看不惯别人的很多行为，不知不觉自己也从他们身上学到许多职场上的技巧，也渐渐地觉得：&ldquo;其实我还学了不少。&rdquo;这是耳濡目染，但是在很多人心底，却是一种连自己也渐渐遗忘的无奈。</p>
<p>我们只是一群基层员工，想要存点钱养家活口。价值观？理想？等我休假有时间的时候再想想。</p>
<p>个人既然如此，何况是需要追求永续生存的庞大企业？</p>
<p>也难怪，真正的好朋友总是那些学生时代交的朋友。因为没有利益冲突，最重要的是，那个时候交的朋友，都是用真心交的，没什么好考虑算计的。</p>
<p>所以，Google 是幸运的：&ldquo;<font color="#ff0000"><strong>Don&rsquo;t be evil.</strong></font>&rdquo;</p>
<p><img alt="" src="http://www.freeage.cn/attachments/month_1001/u201011521846.png" /></p>
<p>没有任何一家企业，能够在很大程度上实现这句话的意涵，像 Google 这样的一家公司，我认为不会再有。</p>
<p>很多人羡慕 Google 待遇好，但是令我惊讶的是：这里的员工对于 Google 价值观的认同。我认为好的价值观始终是我们的一部份，或大或小、若隐若现，只是在社会上越久，就藏得越深，而<font color="#ff0000"><strong> Google 的文化，只是让一些人重新发现他们遗忘的这些东西</strong></font>。</p>
<p>美国的学风素以多开放和多元化著称，这是美国文化的一部份。但即使如此，在所有的美国企业之中，也只有 Google 真正地把这种文化带到办公室。由此可知，坚持一种价值观是多么不容易的事情。从古至今，也只有 Google 这样一家公司可以把&ldquo;Don&rsquo;t be evil.&rdquo;这句话挂在嘴上，多的是坚持理想而铩羽而归的个人和企业。</p>
<p>这没有对错，大部分的我们都是身不由己，先能生存，才能谈理想和价值观，所有关于人和社会的理论都是这样告诉我们。事实也似乎的确是如此。</p>
<p>所以 Google 与中国政府的对决，也就是反映出了这件事情，你要求生存？还是求理想？</p>
<p>大部分的我们，只能二选一。</p>
<p>Google 很难得，他可以两个都要。</p>
<p><font color="#ff0000"><strong>我很幸运，可以在这样一家公司工作。</strong></font></p>
<p><strong><font color="#ff0000"></font></strong></p>
</div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=223" /> 
	  <id>http://www.freeage.cn/default.asp?id=223</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[没有谷歌的Google]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=6" label="生活摘记" /> 
	  <updated>2010-01-15T13:05:33+08:00</updated>
	  <published>2010-01-15T13:05:33+08:00</published>
		  <summary type="html"><![CDATA[<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span">&nbsp;<font size="3"><font size="+0">&nbsp;&nbsp; 最近谷歌退出中国的消息满天飞。 </font></font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp;&nbsp; 虽然最后的商谈结果仍然没有出来，但可以预见，Google的离开似乎已成定局。 </font></font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp;&nbsp; 慕文明而来，因文明而去。 </font></font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp;&nbsp; 且看Google.cn logo:<br />&nbsp;<img alt="" src="http://www.freeage.cn/attachments/month_1001/s201011513113.jpg" /> </font></font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp; 在这没有节日的时段，推出此logo,不能说谷歌没有意义。 </font></font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp;&nbsp;2010年1月14日，谷歌发布退出中国和关闭谷歌中国站点消息的第二天，谷歌中国网站的LOGO变成了上面的四大发明。 </font></font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp; 曾记得几年前谷歌进入中国的时候，宣称为中国古文明而来。 <br />&nbsp;&nbsp; 或许为了纪念这个夙愿，谷歌在这即将离别的日子，用这样一个富含谷歌文化和中华文明意味的LOGO，说不出是一种什么滋味。 <br />&nbsp;&nbsp; <br />&nbsp;&nbsp; 不知道是谷歌是在怀念过去，还是在纪念即将的离开，亦或是对文明之国的不解和困惑。</font></font></span></span></font></p>
<p><font color="#000000" size="3"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span">&nbsp;&nbsp; <font size="3">放弃，为了实现当初的格言，为了改变世界的梦想，需要莫大的胸怀与勇气！</font></span></span></font></p>
<p><font color="#000000"><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; orPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="FONT-FAMILY: monospace; WHITE-SPACE: pre-wrap; FONT-SIZE: 13px" class="Apple-style-span"><font size="3"><font size="+0">&nbsp;&nbsp;四年坚持，曾经梦想终难守， 今朝放弃，往日格言始自高！</font> </font></span></span><br class="Apple-interchange-newline" /></font></p>
<p><font color="#000000"></font></p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=222" /> 
	  <id>http://www.freeage.cn/default.asp?id=222</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[如何提升JavaScript的运行速度(DOM篇)]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=23" label="Javascri&#112;t" /> 
	  <updated>2009-12-14T09:48:32+08:00</updated>
	  <published>2009-12-14T09:48:32+08:00</published>
		  <summary type="html"><![CDATA[<p>　　本文转载自：　</p>
<p>　　本文译自<a href="http://www.nczonline.net/contact/">Nicholas C. Zakas</a>于2009年2月17日在<a href="http://www.nczonline.net/">个人网站</a>上发表的《<a href="http://www.nczonline.net/blog/2009/02/03/speed-up-your-javascript-part-4/">Speed up your JavaScript, Part 4</a>》。原文是唯一的正式版，本文是经过原文作者授权的简体中文翻译版。译者在翻译的准确性上做了大量的努力，并承诺译文的内容完全忠于原文，但可能还是包含疏漏和不妥之处，欢迎大家指正。译序和译注的内容是非正式的，仅代表译者个人观点。</p>
<p>　　译者序：在Web开发中，JavaScript的一个很重要的作用就是对DOM进行操作，可你知道么？对DOM的操作是非常昂贵的，因为这会导致浏览器执行回流操作，而执行了过多的回流操作，你就会发现自己的网站变得越来越慢了，我们应该尽可能的减少DOM操作。本文是这个系列的最后一篇，给出了一些指导性原则，比如在什么时候应该对DOM可以进行什么样的操作等。</p>
<p>　　以下是对原文的翻译：</p>
<p>　　在过去的几周中，我为大家介绍了几种可以加快JavaScript脚本运行速度的技术。<a href="http://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/">第一节</a>介绍了如何优化循环。<a href="http://www.nczonline.net/blog/2009/01/20/speed-up-your-javascript-part-2/">第二节</a>的重点放在优化函数内部代码上，还介绍了队列（queuing）和记忆化（memoization）两种技术，来减轻函数的工作负担。<a href="http://www.nczonline.net/blog/2009/01/27/speed-up-your-javascript-part-3/">第三节</a>就如何将递归转换为迭代循环或者记忆化方式的话题，展开了讨论。第四节是这个系列的最后一篇，也就是本文，将重点阐述过多的DOM操作所带来的影响。</p>
<p>　　我们都知道，DOM操作的效率是很低的，而且不是一般的慢，而且这也是引发性能问题的常见问题之一。为什么会慢呢？因为对DOM的修改为影响网页的用户界面，重绘页面是一项昂贵的操作。太多的DOM操作会导致一系列的重绘操作，为了确保执行结果的准确性，所有的修改操作是按顺序同步执行的。我们称这个过程叫做<a href="http://dev.opera.com/articles/view/efficient-javascript/?page=3#reflow">回流（reflow）</a>，同时这也是最昂贵的浏览器操作之一。回流操作主要会发生在几种情况下：</p>
<p>* 当对DOM节点执行新增或者删除操作时。<br />* 动态设置一个样式时（比如element.style.width=&rdquo;10px&rdquo;）。<br />* 当获取一个必须经过计算的尺寸值时，比如访问offsetWidth、clientHeight或者其他需要经过计算的CSS值（在兼容DOM的浏览器中，可以通过getComputedStyle函数获取；在IE中，可以通过currentStyle属性获取）。</p>
<p>　　解决问题的关键，就是限制通过DOM操作所引发回流的次数。大部分浏览器都不会在JavaScript的执行过程中更新DOM。相应的，这些浏览器将对对DOM的操作放进一个队列，并在JavaScript脚本执行完毕以后按顺序一次执行完毕。也就是说，在JavaScript执行的过程中，用户不能和浏览器进行互动，直到一个回流操作被执行。（<a href="http://www.nczonline.net/blog/2009/01/05/what-determines-that-a-script-is-long-running/">失控脚本对话框</a>会触发回流操作，因为他执行了一个中止JavaScript执行的操作，此时会对用户界面进行更新）</p>
<p>　　如果要减少由于DOM修改带来的回流操作，有两个基本的方法。第一个就是在对当前DOM进行操作之前，尽可能多的做一些准备工作。一个经典的例子就是向document对象中添加很多DOM节点：</p>
<pre class="source-code">/*
for (var i=0; i &lt; items.length; i++){
var item = document.createElement(&quot;li&quot;);
item.appendChild(document.createTextNode(&quot;Option &quot; + i);
list.appendChild(item);
}
*/</pre>
<p>　　这段代码的效率是很低的，因为他在每次循环中都会修改当前DOM结构。为了提高性能，我们需要将这个次数降到最低，对于这个案例来说，最好的办法是建立一个文档碎片（document fragment），作为那些已创建元素元素的临时容器，最后一次将容器的内容直接添加到父节点中：</p>
<pre class="source-code"><code>/*
var fragment = document.createDocumentFragment();
for (var i=0; i &lt; items.length; i++){
var item = document.createElement(&quot;li&quot;);
item.appendChild(document.createTextNode(&quot;Option &quot; + i);
fragment.appendChild(item);
}
list.appendChild(fragment);
*/</code></pre>
<p>　　经过调整的代码，只会修改一次当前DOM的结构，就在最后一行，而在这之前，我们用文档碎片来保存那些中间结果。因为文档碎片没有任何可见内容，所以这类修改不会触发回流操作。实际上，文档碎片也不能被添加到DOM中，我们需要将它作为参数传给appendChild函数，而实际上添加的不是文档碎片本身，而是它下面的所有子元素。</p>
<p>　　避免不必要回流操作的另外一种方法，就是在对DOM操作之前，把要操作的元素，先从当前DOM结构中删除。对于删除一个元素，基本有两种方法：<br />1. 通过removeChild()或者replaceChild()实现真正意义上的删除。<br />2. 设置该元素的display样式为&ldquo;none&rdquo;。</p>
<p>　　而一旦修改操作完成，上面这个过程就需要反转过来，将删除的元素重新添加到当前的DOM结构中，我们还是拿上面的例子来做说明：</p>
<pre class="source-code"><code>/*
list.style.display = &quot;none&quot;;
for (var i=0; i &lt; items.length; i++){
var item = document.createElement(&quot;li&quot;);
item.appendChild(document.createTextNode(&quot;Option &quot; + i);
list.appendChild(item);
}
list.style.display = &quot;&quot;;
*/</code></pre>
<p>　　将list的display样式设置为&ldquo;none&rdquo;后，就将这个元素从当前的DOM结构中删除了，因为这个节点不再可视。在将display属性设置回之前的默认值之前，向其下添加子元素是不会触发回流操作的。</p>
<p>　　另外一个经常引起回流操作的情况是通过style属性对元素的外观进行修改。比如下面这个例子：</p>
<pre class="source-code"><code>/*
element.style.backgroundColor = &quot;blue&quot;;
element.style.color = &quot;red&quot;;
element.style.fontSize = &quot;12em&quot;;
*/</code></pre>
<p>　　这段代码修改了三个样式，同时也就触发了三次回流操作。每次修改元素的style属性，都肯定会触发回流操作。如果你要同时修改一个元素的很多样式，最好的办法是将这些样式放到一个class下，然后直接修改元素的class，这可比单独修改元素的样式要强得多。比如下面这个例子：</p>
<pre class="source-code"><code>/*
.newStyle {
background-color: blue;
color: red;
font-size: 12em;
}
*/</code></pre>
<p>　　这样我们在JavaScript代码中，只需下面这行代码就可以修改样式：</p>
<pre class="source-code"><code>/*
element.className = &quot;newStyle&quot;;
*/</code></pre>
<p>　　修改元素的class属性，会一次将所有的样式应用在目标元素上，而且只会触发一次回流操作。这样做不止更加有效，而且还更<a href="http://video.yahoo.com/watch/568351/2820297">容易维护</a>。</p>
<p>　　既然DOM几乎在所有情况下都很慢，就很有必要将获取的DOM数据缓存起来。这种方法，不仅对获取那些会触发回流操作的属性（比如offsetWidth等）尤为重要，就算对于一般情况，也同样适用。下面介绍一个效率低的夸张的例子：</p>
<pre class="source-code"><code>/*
document.getElementById(&quot;myDiv&quot;).style.left = document.getElementById(&quot;myDiv&quot;).offsetLeft +
document.getElementById(&quot;myDiv&quot;).offsetWidth + &quot;px&quot;;
*/</code></pre>
<p>　　这里对getElementById()调用了三次，是一个很大的问题，访问DOM是很昂贵的，而这三个调用恰恰访问的是同一个元素，也许我们像下面这样写，会更好一些：</p>
<pre class="source-code"><code>/*
var myDiv = document.getElementById(&quot;myDiv&quot;);
myDiv.style.left = myDiv.offsetLeft + myDiv.offsetWidth + &quot;px&quot;;
*/</code></pre>
<p>　　我们去掉了一些冗余操作，现在对DOM操作的次数已经被减小了。对于那些使用次数超过一次的DOM值，我们都应该缓冲起来，这样可以避免无谓的性能消耗。</p>
<p>　　也许，拖慢属性访问速度的罪魁祸首就是HTMLCollection对象。这些对象是object类型的，只要DOM需要返回一组节点时就会使用这个对象，也就是说childNodes属性和getElementsByTagName()的返回值都属于这种情况。我们可能经常会将HTMLCollection当作数组来使用，但实际上他是一个根据DOM结构自动变化的实体对象。每次你访问一个HTMLCollection对象的属性，他都会对DOM内所有的节点进行一次完整匹配，这意味着下面的代码将导致一个死循环：</p>
<pre class="source-code"><code>/*
var divs = document.getElementsByTagName(&quot;div&quot;);
for (var i=0; i &lt; divs.length; i++){  //infinite loop
document.body.appendChild(document.createElement(&quot;div&quot;));
}
*/</code></pre>
<p>　　这段代码为什么会变成死循环呢？因为在每次循环中，将会向document中新增一个div元素，同时也会更新divs这个集合，也就是说循环的索引永远都不会超过divs.length的值，因为divs.length的值是伴随着循环而递增的。每次访问divs.length，就会更新一次集合对象，这可比访问一个普通数组的length属性要付出更大的代价。当对HTMLCollection对象进行操作时，应该将访问的次数尽可能的降至最低，最简单的，你可以将length属性缓存在一个本地变量中，这样就能大幅度的提高循环的效率。</p>
<pre class="source-code"><code>/*
var divs = document.getElementsByTagName(&quot;div&quot;);
for (var i=0, len=divs.length; i &lt; len; i++){  //not an infinite loop
document.body.appendChild(document.createElement(&quot;div&quot;));
}
*/</code></pre>
<p>　　修改后的代码已经不是死循环了，因为在每次循环时，len的值都是保持固定不变的。将属性值缓存起来除了更加有效率，还可以保证document不会执行多于一次的查询。</p>
<p>　　本文是&ldquo;Speed up your JavaScript&rdquo;这个系列的最后一篇文章，我希望你现在已经知道如何避免那个脚本失控的对话框，以及如何让你的脚本运行的更快。我所提到的技巧很多别人已经提过了，我只是将它们组织到一起，这样大家可以更容易的找到这些信息。如果你有什么更好的话题需要来我整理，在评论中直接告诉我，或者直接<a href="http://www.nczonline.net/contact/">联系我</a>吧。</p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=217" /> 
	  <id>http://www.freeage.cn/default.asp?id=217</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[转载]如何提升JavaScript的运行速度(递归篇)]]></title>
	  <author>
		 <name>梦想年华</name>
		 <uri>http://www.freeage.cn/</uri>
		 <email>admin@freeage.cn</email>
	  </author>
	  <category term="" scheme="http://www.freeage.cn/default.asp?cateID=23" label="Javascri&#112;t" /> 
	  <updated>2009-12-14T09:44:29+08:00</updated>
	  <published>2009-12-14T09:44:29+08:00</published>
		  <summary type="html"><![CDATA[<p>　　本文转载自：<a href="http://oragg.com/2009/02/speed-up-your-javascript-part-3.html">http://oragg.com/2009/02/speed-up-your-javascript-part-3.html</a></p>
<p>　　本文译自<a href="http://www.nczonline.net/contact/">Nicholas C. Zakas</a>于2009年1月27日在<a href="http://www.nczonline.net/">个人网站</a>上发表的《<a href="http://www.nczonline.net/blog/2009/01/27/speed-up-your-javascript-part-3/">Speed up your JavaScript, Part 3</a>》。原文是唯一的正式版，本文是经过原文作者授权的简体中文翻译版。译者在翻译的准确性上做了大量的努力，并承诺译文的内容完全忠于原文，但可能还是包含疏漏和不妥之处，欢迎大家指正。译序和译注的内容是非正式的，仅代表译者个人观点。</p>
<p>　　译者序：影响JavaScript性能的另外一个杀手就是递归，在上一节中提到采用memoization技术可以优化计算数值的递归函数，但memoization不是万能的，不是所有的递归函数都可以用memoization技术优化，本文介绍了这些情况，并介绍了解决办法，就是将递归转换为迭代，同时需要注意，本文末尾介绍的方案不是最终的方案，还需要和上一节优化循环的方案综合起来才能达到最佳效果。</p>
<p>　　以下是对原文的翻译：</p>
<p>　　递归是拖慢脚本运行速度的大敌之一。太多的递归会让浏览器变得越来越慢直到死掉或者莫名其妙的突然自动退出，所以我们一定要解决在JavaScript中出现的这一系列性能问题。在<a href="http://www.nczonline.net/blog/2009/01/20/speed-up-your-javascript-part-2/">这个系列文章的第二篇</a>中，我曾经简短的介绍了如何通过memoization技术来替代函数中太多的递归调用。memoization是一种可以缓存之前运算结果的技术，这样我们就不需要重新计算那些已经计算过的结果。对于通过递归来进行计算的函数，memoization简直是太有用了。我现在使用的memoizer是由 Crockford写的，主要应用在那些返回整数的递归运算中。当然并不是所有的递归函数都返回整数，所以我们需要一个更加通用的memoizer()函数来处理更多类型的递归函数。</p>
<pre class="source-code">/*
function memoizer(fundamental, cache) {
cache = cache || {};
var shell = function(arg) {
if (! (arg in cache)) {
cache[arg] = fundamental(shell, arg);
}
return cache[arg];
};
return shell;
}
*/</pre>
<p>　　这个版本的函数和Crockford写的版本有一点点不同。首先，参数的顺序被颠倒了，原有函数被设置为第一个参数，第二个参数是缓存对象，为可选参数，因为并不是所有的递归函数都包含初始信息。在函数内部，我将缓存对象的类型从数组转换为对象，这样这个版本就可以适应那些不是返回整数的递归函数。在shell函数里，我使用了in操作符来判断参数是否已经包含在缓存里。这种写法比测试类型不是undefined更加安全，因为undefined是一个有效的返回值。我们还是用之前提到的斐波纳契数列来做说明：</p>
<pre class="source-code">/*
var fibonacci = memoizer(function(recur, n) {
return recur(n - 1) + recur(n - 2);
}, { &quot;0&quot;: 0, &quot;1&quot;: 1} );
*/</pre>
<p>　　同样的，执行fibonacci(40)这个函数，只会对原有的函数调用40次，而不是夸张的331,160,280次。memoization对于那些有着严格定义的结果集的递归算法来说，简直是棒极了。然而，确实还有很多递归算法不适合使用memoization方法来进行优化。</p>
<p>　　我在学校时的一位教授一直坚持认为，任何使用递归的情况，如果有需要，都可以使用迭代来代替。实际上，递归和迭代经常会被作为互相弥补的方法，尤其是在另外一种出问题的情况下。将递归算法转换为迭代算法的技术，也是和开发语言无关的。这对JavaScript来说是很重要的，因为很多东西在执行环境中是受到限制的（the importance in JavaScript is greater, though, because the resources of the execution environment are so restrictive.）。让我们回顾一个典型的递归算法，比如说归并排序，在JavaScript中实现这个算法需要下面的代码：</p>
<pre class="source-code">/*
function merge(left, right) {
var result = [];
while (left.length &gt; 0 &amp;&amp; right.length &gt; 0) {
if (left[0] &lt; right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
return result.concat(left).concat(right);
}
//采用递归实现的归并排序算法
function mergeSort(items) {
if (items.length == 1) {
return items;
}
var middle = Math.floor(items.length / 2),
left = items.slice(0, middle),
right = items.slice(middle);
return merge(mergeSort(left), mergeSort(right));
}
*/</pre>
<p>　　调用mergeSort()函数处理一个数组，就可以返回经过排序的数组。注意每次调用mergeSort()函数，都会有两次递归调用。这个算法不可以使用memoization来进行优化，因为每个结果都只计算并使用一次，就算缓冲了结果也没有什么用。如果你使用mergeSort()函数来处理一个包含100个元素的数组，总共会有199次调用。1000个元素的数组将会执行1999次调用。在这种情况下，我们的解决方案是将递归算法转换为迭代算法，也就是说要引入一些循环（关于算法，可以参考这篇《<a href="http://penguin.ewu.edu/~trolfe/NaturalMerge/NatMerge.html">List Processing: Sort Again, Naturally</a>》）：</p>
<pre class="source-code">/* 采用迭代实现的归并排序算法
function mergeSort(items) {
if (items.length == 1) {
return items;
}
var work = [];
for (var i = 0,
len = items.length; i &lt; len; i++) {
work.push([items[i]]);
}
work.push([]); //in case of odd number of items
for (var lim = len; lim &gt; 1; lim = (lim + 1) / 2) {
for (var j = 0,
k = 0; k &lt; lim; j++, k += 2) {
work[j] = merge(work[k], work[k + 1]);
}
work[j] = []; //in case of odd number of items
}
return work[0];
}
*/</pre>
<p>　　这个归并排序算法实现使用了一系列循环来代替递归进行排序。由于归并排序首先要将数组拆分成若干只有一个元素的数组，这个方法更加明确的执行了这个操作，而不是通过递归函数隐晦的完成。work数组被初始化为包含一堆只有一个元素数组的数组。在循环中每次会合并两个数组，并将合并后的结果放回 work数组中。当函数执行完成后，排序的结果会通过work数组中的第一个元素返回。在这个归并排序的实现中，没有使用任何递归，同样也实现了这个算法。然而，这样做却引入了大量的循环，循环的次数基于要排序的数组中元素的个数，所以我们可能需要使用在<a href="http://www.nczonline.net/blog/2009/01/20/speed-up-your-javascript-part-2/">上篇讨论过的技术</a>来进行修订，处理这些额外开销。</p>
<p>　　总结一下基本原则，不管是什么时候使用递归的时候都应该小心谨慎。memoization和迭代是代替递归的两种解决方案，最直接的结果当然就是避免那个<a href="http://www.nczonline.net/blog/2009/01/05/what-determines-that-a-script-is-long-running/">提示脚本失控的对话框</a>。</p>
<p>&nbsp;</p>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.freeage.cn/article.asp?id=216" /> 
	  <id>http://www.freeage.cn/default.asp?id=216</id>
  </entry>	
		
</feed>
