<?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>網絡暴民 Jacky&#039;s Blog &#187; leak</title>
	<atom:link href="http://jacky.seezone.net/tag/leak/feed/" rel="self" type="application/rss+xml" />
	<link>http://jacky.seezone.net</link>
	<description></description>
	<lastBuildDate>Mon, 30 Jan 2012 17:45:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>漏水 IE</title>
		<link>http://jacky.seezone.net/2008/09/05/2114/</link>
		<comments>http://jacky.seezone.net/2008/09/05/2114/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 19:28:00 +0000</pubDate>
		<dc:creator>Jacky</dc:creator>
				<category><![CDATA[電腦]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[leak]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://jacky.seezone.net/?p=2114</guid>
		<description><![CDATA[瀏覽器大戰，走的方向都是以運行 Web Application 為主，所以大力加重 Javascript 的效能改進，得益的自然是一般用戶。可是，我想即使是現在，仍然有很多開發工作要以 IE6 為對象。IE6 除了超多 CSS 臭蟲 外，Javascript Engine 的漏水 (記憶) 情況也是很嚴重。 在 MSDN 上，就已經有專屬文章讓大家了解 IE 漏水的原因 ，有四種：Circular Reference、Closure、DOM Insertion (Cross-Page Leak) 和 Pseudo Leak，全都是很容易中招的地方，開發者只能自求多福，盡量除蟲。 Circular Reference 和 Closure 大致上是同一類問題，當 Javascript 和 DOM 之間互有 Reference 的時候，IE 就不懂 GC，原因是 IE Javascript GC 和 DOM 的 GC 採用不同機制。但現在的 UI 越趨複雜，Javascript 和 DOM 有更緊密的接觸，一不小心就會留下這些 [...]]]></description>
			<content:encoded><![CDATA[	<p>瀏覽器大戰，走的方向都是以運行 Web Application 為主，所以大力加重 Javascript 的效能改進，得益的自然是一般用戶。可是，我想即使是現在，仍然有很多開發工作要以 IE6 為對象。IE6 除了超多 <span class="caps">CSS</span> <a href="http://www.positioniseverything.net/explorer.html">臭蟲</a> 外，Javascript Engine 的漏水 (記憶) 情況也是很嚴重。</p>

	<p>在 <span class="caps">MSDN</span> 上，就已經有專屬文章讓大家了解 <a href="http://msdn.microsoft.com/en-us/library/bb250448(VS.85).aspx">IE 漏水的原因</a> ，有四種：Circular Reference、Closure、DOM Insertion (Cross-Page Leak) 和 Pseudo Leak，全都是很容易中招的地方，開發者只能自求多福，盡量除蟲。</p>

	<p>Circular Reference 和 Closure 大致上是同一類問題，當 Javascript 和 <span class="caps">DOM</span> 之間互有 Reference 的時候，IE 就不懂 GC，原因是 IE Javascript GC 和 <span class="caps">DOM</span> 的 GC 採用不同機制。但現在的 UI 越趨複雜，Javascript 和 <span class="caps">DOM</span> 有更緊密的接觸，一不小心就會留下這些 Circular Reference。而近年被談論得最多的 Closure 語法 (?)，在文章裏給大家的意見是：「可免則免」。</p>

	<p>至於 <span class="caps">DOM</span> Insertion bug，我寫過一個有 lightbox 加 Ajax Form 的元件，當中當然有大量的 <span class="caps">DOM</span> object 的處理。但這個元件在 IE 上一開，就會消耗 7-8 MB 的記憶，而最可惡的是即使是跳頁，記憶也不會被釋放。結果，用上半個小時左右的 IE 已經佔數百 MB 的記憶。這個 bug 的解決方法，是改變一下插入 <span class="caps">DOM</span> 的順序，看似簡單，但卻很容易被忽視。</p>

	<p>Pseudo Leak 指的是同頁上的 <span class="caps">DOM</span> Object 即使被移除了，記憶也不會被釋放，只會在跳下一頁時才可以清除。MS 認為，因為最終記憶是可被釋放，所以才說這是 Pseudo Leak。但對於一些 Single Page Application 來說，這又是另一個大頭痛。</p>

	<p>以上種種問題，的確會令開發者膽子變少，不敢用太多新的寫法、技術，結果會停滯不前，也少了創意。這也是為甚麼靠 Internet 而存在的 Google，要推出自家瀏覽，始終不能靠一個漏水瀏覽器吧！</p>

	<p>對付 IE 的漏水問題， <a href="http://home.wanadoo.nl/jsrosman/">sIEve</a> 會是大家的好幫手。使用 Library 如 <a href="http://www.jquery.com">jQuery</a> 也會有幫助，裏面有蠻多 code 特地應付以上談到的漏水原因。IE 也有一些 <a href="http://support.microsoft.com/kb/933566/">Patch</a> 來治漏，不過效果好像不太理想。另外也有一些偏門技巧如 <a href="http://www.hedgerwow.com/360/dhtml/ie6_memory_leak_fix/">finally</a> 、 <a href="http://blogs.msdn.com/ericlippert/archive/2003/09/17/53038.aspx">CollectGarbage()</a> 等等。</p>

	<p>P.S. 寫此篇明顯是因為近日又要與 IE 搏鬥的關係&#8230;</p>


	Tags:  <a href="http://jacky.seezone.net/tag/browser/" title="browser" rel="tag">browser</a>, <a href="http://jacky.seezone.net/tag/ie/" title="ie" rel="tag">ie</a>, <a href="http://jacky.seezone.net/tag/leak/" title="leak" rel="tag">leak</a>, <a href="http://jacky.seezone.net/tag/memory/" title="memory" rel="tag">memory</a>, <a href="http://jacky.seezone.net/tag/microsoft/" title="microsoft" rel="tag">microsoft</a>, <a href="http://jacky.seezone.net/tag/programming/" title="programming" rel="tag">programming</a><br />
]]></content:encoded>
			<wfw:commentRss>http://jacky.seezone.net/2008/09/05/2114/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

