<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-weidagang2046的专栏-文章分类-Javascript</title><link>http://www.blogjava.net/weidagang2046/category/17206.html</link><description>物格而后知致</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:39:27 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:39:27 GMT</pubDate><ttl>60</ttl><item><title>JavaScript中的arguments,callee,caller,call,appy</title><link>http://www.blogjava.net/weidagang2046/articles/93554.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Sat, 13 Jan 2007 00:52:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/93554.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/93554.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/93554.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/93554.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/93554.html</trackback:ping><description><![CDATA[
		<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		<span style="COLOR: #000000">&lt;</span>
		<span style="COLOR: #000000">script language</span>
		<span style="COLOR: #000000">=</span>
		<span style="COLOR: #000000">"</span>
		<span style="COLOR: #000000">JavaScript</span>
		<span style="COLOR: #000000">"</span>
		<span style="COLOR: #000000">&gt;</span>
		<span style="COLOR: #000000">
				<br />
				<img id="Codehighlighter1_31_66_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_66_Open_Text.style.display='none'; Codehighlighter1_31_66_Closed_Image.style.display='inline'; Codehighlighter1_31_66_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_31_66_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_66_Closed_Text.style.display='none'; Codehighlighter1_31_66_Open_Image.style.display='inline'; Codehighlighter1_31_66_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span id="Codehighlighter1_31_66_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
		<span id="Codehighlighter1_31_66_Open_Text">
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 演示arguments的用法,如何获取实参数和形数数<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
				<span style="COLOR: #008000">*/</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img id="Codehighlighter1_93_329_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_329_Open_Text.style.display='none'; Codehighlighter1_93_329_Closed_Image.style.display='inline'; Codehighlighter1_93_329_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_93_329_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_93_329_Closed_Text.style.display='none'; Codehighlighter1_93_329_Open_Image.style.display='inline'; Codehighlighter1_93_329_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> argTest(a,b,c,d)</span>
		<span id="Codehighlighter1_93_329_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_93_329_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> numargs </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> arguments.length;     </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 获取被传递参数的数值。</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000">    </span>
				<span style="COLOR: #0000ff">var</span>
				<span style="COLOR: #000000"> expargs </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> argTest.length;       </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> 获取期望参数的数值。</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000">    alert(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">实参数目为:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">numargs)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">形数数目为:</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">expargs)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(arguments[</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">])         <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(argTest[</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">])          </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">undefined 没有这种用法</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
				</span>
				<span style="COLOR: #000000">}</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">argTest(1,2)</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//</span>
		<span style="COLOR: #008000">argTest(1,2,3,4,5)</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000">
				<br />
				<img id="Codehighlighter1_368_399_Open_Image" onclick="this.style.display='none'; Codehighlighter1_368_399_Open_Text.style.display='none'; Codehighlighter1_368_399_Closed_Image.style.display='inline'; Codehighlighter1_368_399_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_368_399_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_368_399_Closed_Text.style.display='none'; Codehighlighter1_368_399_Open_Image.style.display='inline'; Codehighlighter1_368_399_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span id="Codehighlighter1_368_399_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
		<span id="Codehighlighter1_368_399_Open_Text">
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *  arguments不是数组(Array类)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
				<span style="COLOR: #008000">*/</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Array.prototype.selfvalue </span>
		<span style="COLOR: #000000">=</span>
		<span style="COLOR: #000000"> </span>
		<span style="COLOR: #000000">1</span>
		<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_456_513_Open_Image" onclick="this.style.display='none'; Codehighlighter1_456_513_Open_Text.style.display='none'; Codehighlighter1_456_513_Closed_Image.style.display='inline'; Codehighlighter1_456_513_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_456_513_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_456_513_Closed_Text.style.display='none'; Codehighlighter1_456_513_Open_Image.style.display='inline'; Codehighlighter1_456_513_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> testAguments()</span>
		<span id="Codehighlighter1_456_513_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_456_513_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">arguments.selfvalue=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000">arguments.selfvalue);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">alert("Array.sefvalue="+new Array().selfvalue);</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//</span>
		<span style="COLOR: #008000">testAguments();</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img id="Codehighlighter1_588_653_Open_Image" onclick="this.style.display='none'; Codehighlighter1_588_653_Open_Text.style.display='none'; Codehighlighter1_588_653_Closed_Image.style.display='inline'; Codehighlighter1_588_653_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_588_653_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_588_653_Closed_Text.style.display='none'; Codehighlighter1_588_653_Open_Image.style.display='inline'; Codehighlighter1_588_653_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span id="Codehighlighter1_588_653_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
		<span id="Codehighlighter1_588_653_Open_Text">
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 演示函数的caller属性.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 说明:(当前函数).caller:返回一个对函数的引用，该函数调用了当前函数<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
				<span style="COLOR: #008000">*/</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img id="Codehighlighter1_678_834_Open_Image" onclick="this.style.display='none'; Codehighlighter1_678_834_Open_Text.style.display='none'; Codehighlighter1_678_834_Closed_Image.style.display='inline'; Codehighlighter1_678_834_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_678_834_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_678_834_Closed_Text.style.display='none'; Codehighlighter1_678_834_Open_Image.style.display='inline'; Codehighlighter1_678_834_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> callerDemo() </span>
		<span id="Codehighlighter1_678_834_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_678_834_Open_Text">
				<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_707_778_Open_Image" onclick="this.style.display='none'; Codehighlighter1_707_778_Open_Text.style.display='none'; Codehighlighter1_707_778_Closed_Image.style.display='inline'; Codehighlighter1_707_778_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_707_778_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_707_778_Closed_Text.style.display='none'; Codehighlighter1_707_778_Open_Image.style.display='inline'; Codehighlighter1_707_778_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (callerDemo.caller) </span>
				<span id="Codehighlighter1_707_778_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_707_778_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
						<span style="COLOR: #0000ff">var</span>
						<span style="COLOR: #000000"> a</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> callerDemo.caller.arguments[</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert(a);<br /><img id="Codehighlighter1_785_832_Open_Image" onclick="this.style.display='none'; Codehighlighter1_785_832_Open_Text.style.display='none'; Codehighlighter1_785_832_Closed_Image.style.display='inline'; Codehighlighter1_785_832_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_785_832_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_785_832_Closed_Text.style.display='none'; Codehighlighter1_785_832_Open_Image.style.display='inline'; Codehighlighter1_785_832_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    }</span>
				</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">else</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_785_832_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_785_832_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        alert(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">this is a top function</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img id="Codehighlighter1_860_880_Open_Image" onclick="this.style.display='none'; Codehighlighter1_860_880_Open_Text.style.display='none'; Codehighlighter1_860_880_Closed_Image.style.display='inline'; Codehighlighter1_860_880_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_860_880_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_860_880_Closed_Text.style.display='none'; Codehighlighter1_860_880_Open_Image.style.display='inline'; Codehighlighter1_860_880_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> handleCaller() </span>
		<span id="Codehighlighter1_860_880_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_860_880_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    callerDemo();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">callerDemo();</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//</span>
		<span style="COLOR: #008000">handleCaller("参数1","参数2");</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img id="Codehighlighter1_930_1006_Open_Image" onclick="this.style.display='none'; Codehighlighter1_930_1006_Open_Text.style.display='none'; Codehighlighter1_930_1006_Closed_Image.style.display='inline'; Codehighlighter1_930_1006_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_930_1006_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_930_1006_Closed_Text.style.display='none'; Codehighlighter1_930_1006_Open_Image.style.display='inline'; Codehighlighter1_930_1006_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span id="Codehighlighter1_930_1006_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
		<span id="Codehighlighter1_930_1006_Open_Text">
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 演示函数的callee属性.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 说明:arguments.callee:初始值就是正被执行的 Function 对象,用于匿名函数<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
				<span style="COLOR: #008000">*/</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img id="Codehighlighter1_1030_1061_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1030_1061_Open_Text.style.display='none'; Codehighlighter1_1030_1061_Closed_Image.style.display='inline'; Codehighlighter1_1030_1061_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_1030_1061_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1030_1061_Closed_Text.style.display='none'; Codehighlighter1_1030_1061_Open_Image.style.display='inline'; Codehighlighter1_1030_1061_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> calleeDemo() </span>
		<span id="Codehighlighter1_1030_1061_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_1030_1061_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(arguments.callee);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">calleeDemo();</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />//</span>
		<span style="COLOR: #008000">(function(arg0,arg1){alert("形数数目为:"+arguments.callee.length)})();</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img id="Codehighlighter1_1149_1321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1149_1321_Open_Text.style.display='none'; Codehighlighter1_1149_1321_Closed_Image.style.display='inline'; Codehighlighter1_1149_1321_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_1149_1321_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1149_1321_Closed_Text.style.display='none'; Codehighlighter1_1149_1321_Open_Image.style.display='inline'; Codehighlighter1_1149_1321_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
		</span>
		<span id="Codehighlighter1_1149_1321_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span>
		<span id="Codehighlighter1_1149_1321_Open_Text">
				<span style="COLOR: #008000">/*</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 演示apply,call函数的用法<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * 说明:作用都是将函数绑定到另外一个对象上去运行，两者仅在定义参数方式有所区别：<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *       apply(thisArg,argArray);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *     call(thisArg[,arg1,arg2…] ]);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *     即所有函数内部的this指针都会被赋值为thisArg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
				<span style="COLOR: #008000">*/</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img id="Codehighlighter1_1343_1451_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1343_1451_Open_Text.style.display='none'; Codehighlighter1_1343_1451_Closed_Image.style.display='inline'; Codehighlighter1_1343_1451_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_1343_1451_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1343_1451_Closed_Text.style.display='none'; Codehighlighter1_1343_1451_Open_Image.style.display='inline'; Codehighlighter1_1343_1451_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> ObjectA()</span>
		<span id="Codehighlighter1_1343_1451_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_1343_1451_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">执行ObjectA()</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(arguments[</span>
				<span style="COLOR: #000000">0</span>
				<span style="COLOR: #000000">]);<br /><img id="Codehighlighter1_1413_1424_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1413_1424_Open_Text.style.display='none'; Codehighlighter1_1413_1424_Closed_Image.style.display='inline'; Codehighlighter1_1413_1424_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1413_1424_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1413_1424_Closed_Text.style.display='none'; Codehighlighter1_1413_1424_Open_Image.style.display='inline'; Codehighlighter1_1413_1424_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.hit</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">function</span>
				<span style="COLOR: #000000">(msg)</span>
				<span id="Codehighlighter1_1413_1424_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1413_1424_Open_Text">
						<span style="COLOR: #000000">{alert(msg)}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.info</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">我来自ObjectA</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> <br /><img id="Codehighlighter1_1474_1629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1474_1629_Open_Text.style.display='none'; Codehighlighter1_1474_1629_Closed_Image.style.display='inline'; Codehighlighter1_1474_1629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1474_1629_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1474_1629_Closed_Text.style.display='none'; Codehighlighter1_1474_1629_Open_Image.style.display='inline'; Codehighlighter1_1474_1629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> ObjectB()</span>
		<span id="Codehighlighter1_1474_1629_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_1474_1629_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">执行ObjectB()</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">调用ObjectA()方法,同时ObjectA构造函数中的所有this就会被ObjectB中的this替代</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000">    ObjectA.apply(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">,arguments);</span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">ObjectA.call(this);</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000">    alert(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.info);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">ObjectB('参数0');</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
		<span style="COLOR: #0000ff">var</span>
		<span style="COLOR: #000000"> value</span>
		<span style="COLOR: #000000">=</span>
		<span style="COLOR: #000000">"</span>
		<span style="COLOR: #000000">global 变量</span>
		<span style="COLOR: #000000">"</span>
		<span style="COLOR: #000000">;<br /><img id="Codehighlighter1_1691_1716_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1691_1716_Open_Text.style.display='none'; Codehighlighter1_1691_1716_Closed_Image.style.display='inline'; Codehighlighter1_1691_1716_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1691_1716_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1691_1716_Closed_Text.style.display='none'; Codehighlighter1_1691_1716_Open_Image.style.display='inline'; Codehighlighter1_1691_1716_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> Obj()</span>
		<span id="Codehighlighter1_1691_1716_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_1691_1716_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">对象！</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img id="Codehighlighter1_1734_1757_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1734_1757_Open_Text.style.display='none'; Codehighlighter1_1734_1757_Closed_Image.style.display='inline'; Codehighlighter1_1734_1757_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
				<img id="Codehighlighter1_1734_1757_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1734_1757_Closed_Text.style.display='none'; Codehighlighter1_1734_1757_Open_Image.style.display='inline'; Codehighlighter1_1734_1757_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /> </span>
		<span style="COLOR: #0000ff">function</span>
		<span style="COLOR: #000000"> Fun1()</span>
		<span id="Codehighlighter1_1734_1757_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
				<img src="http://www.blogjava.net/images/dot.gif" />
		</span>
		<span id="Codehighlighter1_1734_1757_Open_Text">
				<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    alert(</span>
				<span style="COLOR: #0000ff">this</span>
				<span style="COLOR: #000000">.value);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span>
		</span>
		<span style="COLOR: #000000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">Fun1();</span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000"> </span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">Fun1.apply(window); </span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000"> </span>
		<span style="COLOR: #008000">//</span>
		<span style="COLOR: #008000">Fun1.apply(new Obj()); </span>
		<span style="COLOR: #008000">
				<br />
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
		</span>
		<span style="COLOR: #000000">&lt;/</span>
		<span style="COLOR: #000000">script</span>
		<span style="COLOR: #000000">&gt;<br /><br />from: <a href="/xfan/archive/2007/01/12/93504.html">http://www.blogjava.net/xfan/archive/2007/01/12/93504.html</a></span>
<img src ="http://www.blogjava.net/weidagang2046/aggbug/93554.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2007-01-13 08:52 <a href="http://www.blogjava.net/weidagang2046/articles/93554.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搜索引擎页面分析中的 javascript 处理</title><link>http://www.blogjava.net/weidagang2046/articles/88202.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Sat, 16 Dec 2006 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/88202.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/88202.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/88202.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/88202.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/88202.html</trackback:ping><description><![CDATA[搜索引擎页面分析中的 javascript 处理——在制作搜索引擎的时候、或者做页面分析及数据提取的时候，经常面临页面中存在许多javascript，而页面内容，相当一部分写入到了这些js脚本的命令中，而导致正常的DOM分析失败，无法提取所需的信息。 <br /><br />　　在制作搜索引擎的时候、或者做页面分析及数据提取的时候，经常面临页面中存在许多javascript，而页面内容，相当一部分写入到了这些js脚本的命令中，而导致正常的DOM分析失败，无法提取所需的信息。当然，如果这个页面模板确定，针对这个页面制作信息提取模板也不很难，每个页面人工的分析出需要提取的信息的位置，然后制作模板。可是对于general 的网页搜索的话，这就不大现实了。正巧前两天和朋友讨论到这个问题，有些想法。在这里，提供两个思路，供大家参考。 1、做一个简化的 javascript 解释器，执行脚本片段 做一个完整的 javascript 解释器是比较难得，但是做一个简化的 javascript 解释器则很容易。我们不需要那些复杂的库，我们只将基本的 javascript 语法实现，并且将涉及文字输出的函数部分实现就可以了。这样做的目的并不是要真正的完整执行这个javascript，而是将脚本中的字符串，按照其程序逻辑进行组合，最后输出这个脚本的完整输出。这样自然不全面，肯定由于很多功能没实现，导致输出的字符串和真实的输出不完全一样。但是，如果不出意外， <br /><br />　　在制作搜索引擎的时候、或者做页面分析及数据提取的时候，经常面临页面中存在许多javascript，这些javascript 比较烦人，因为有相当部分页面内容写入到了这些js脚本的命令中，而导致正常的DOM分析看不到这些文字，而使其中的文字数据提取失败。 <br /><br />　　当然，如果这个页面模板确定，针对这个特定的页面制作信息提取模板也不很难，每个页面人工的分析出需要提取的信息的位置，然后制作模板。可是对于general的网页搜索的话，这就不大现实了。正巧前两天和朋友讨论到这个问题，有些想法。在这里，提供两个思路，供大家参考。 <br /><br />　　1、做一个简化的 javascript 解释器，执行脚本片段 <br /><br />　　做一个完整的 javascript 解释器是比较难得，但是做一个简化的 javascript 解释器则很容易。我们不需要那些复杂的库，我们只将基本的 javascript 语法实现，并且将涉及文字输出的函数部分实现就可以了。 <br /><br />　　这样做的目的并不是要真正的完整执行这个javascript，而是将脚本中的字符串，按照其程序逻辑进行组合，最后输出这个脚本的完整输出。这样自然不全面，肯定由于很多功能没实现，导致输出的字符串和真实的输出不完全一样。但是，如果不出意外，应该不会产生太多的遗漏。因为所有的字符串输出部分我们都实现了，那么完全可以将这些字符串按照其将要输出的逻辑组合在一起。 <br /><br />　　对于根据动态条件做动态的事情的问题，如果这些条件无法确定，比如根据浏览器类型或者什么的。完全可以将两个分支的结果都输出。当然，我们不应该将这两块文字组合，中间应该有我们理解的分割符。 <br /><br />　　这样做得好处是高性能。这个解释器可以做得很小巧，由于并非完整执行js，所以性能也较之迅速一些。缺点是由于是简化的解释器，因此和真实的结果会有差异。但是一般来说，信息只会多而不会少，(因为同时输出了不同分支的结果)，所以，对于搜索引擎的页面分析来说，差不多是够用了。 <br /><br />　　2、用HTML渲染引擎完整的解析页面，最后从显示结果中取数据 <br /><br />　　采用Gecko (Firefox) 或者Trident (mshtml.dll) (IE) 这些用于浏览器的 HTML 渲染引擎来对页面进行完整的解析和渲染。最后对这些引擎的解析结果进行分析。 <br /><br />　　这样做得好处是和显示结果最接近，因为他们是页面的真实解析结果。但是缺点是性能相对较差，因为是对页面的所有元素的完整解析，所以做了很多与提取文字信息无用的劳动，如果分析大数据量的页面的时候，需要权衡一下。<br /><br />from: <a href="http://sskb.cn/yingxiao/914-search-java.htm">http://sskb.cn/yingxiao/914-search-java.htm</a><img src ="http://www.blogjava.net/weidagang2046/aggbug/88202.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2006-12-16 16:19 <a href="http://www.blogjava.net/weidagang2046/articles/88202.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax中文乱码问题解决方案（servlet）</title><link>http://www.blogjava.net/weidagang2046/articles/86610.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Sat, 09 Dec 2006 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/86610.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/86610.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/86610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/86610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/86610.html</trackback:ping><description><![CDATA[
		<div class="postbody">最近研究ajax，在界面上text中输入中文，发送出去后返回乱码。经过一个晚上的测试，以及得到满意答案，代码如下：<br /><br />HTML：<br />    ……<br />    //实际上这里的charset=utf-8 也是可以的，因为在中文平台下<br />    //用了GB2312<br />    &lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312"&gt;<br /><br />JS：<br />    <font color="#ff0000">我用了两个方法提交：GET 和 POST。<br />    在服务器端要对应不同的提交方式转换不同的编码。</font><br />   ……<br />    //要传递的参数<br />   var queryString = "firstName=" + firstName + "&amp;lastName=" + lastName<br />                          + "&amp;birthday=" + birthday;    function  <br /> <br />    //GET方式提交<br />    doRequestUsingGET() {<br />        createXMLHttpRequest();<br />        var url = "GetAndPostExample?" + queryString + "&amp;timeStamp="<br />                          + new Date().getTime();<br />        xmlHttp.onreadystatechange = handleStateChange;<br />        xmlHttp.open("GET", url, true);<br />        xmlHttp.send(null);<br />    }<br /><br />    //POST方式提交<br />    function doRequestUsingPOST() {<br />        createXMLHttpRequest();<br />        var url = "GetAndPostExample?timeStamp=" + new Date().getTime();<br />        xmlHttp.open("POST", url, true);<br />        xmlHttp.onreadystatechange = handleStateChange;<br />        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");<br />        xmlHttp.send(queryString);<br />    }<br /><br />servlet：<br />        response.setContentType("text/xml");<br /><br />        //<font color="#ff0000">这个一定要设置，这里的设置应该跟HTML中的一样，但是我在这里</font><br />        //用了 uft-8， 结果也是一样。<br />        response.setCharacterEncoding("GB2312");<br />      <br />        //<font color="#ff0000">当用POST方法时，一定要设置成utf-8，否则乱码</font><br />        String firstName = new String(request.getParameter("firstName").getBytes("ISO-8859-1"), "<font color="#ff0000">utf-8</font>");<br /><br />        //<font color="#ff0000">当用GET方法时，要设置成GB2312，否则乱码。</font><br />        String lastName = new String(request.getParameter("lastName").getBytes("ISO-8859-1"), "<font color="#ff0000">GB2312</font>");<br /><br />测试结果：<br />因为界面上两个控件firstName 和  lastName都输入中文。<br />接收xmlHttp.responseText后，会发现其中一个为乱码，一个可以正常显示中文。<br /><br />在网上还发现有人说用：<br />“老问题了，最简单的方法是，全部escape后发送。取回后unescape，绝对没有编码问题。”<br />我测试后发现escape后的东西全部变成null了。不知道有谁成功用过这个方法的，或者还有什么更好的解决乱码的方法，请拿出来共享一下吧 ：）<br /><br />from: <a href="http://www.themore.net/page/7/37/2006_08/detail_407_1.html">http://www.themore.net/page/7/37/2006_08/detail_407_1.html</a></div>
<img src ="http://www.blogjava.net/weidagang2046/aggbug/86610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2006-12-09 23:06 <a href="http://www.blogjava.net/weidagang2046/articles/86610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript 的面向对象特性参考</title><link>http://www.blogjava.net/weidagang2046/articles/86324.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Fri, 08 Dec 2006 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/86324.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/86324.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/86324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/86324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/86324.html</trackback:ping><description><![CDATA[
		<p>最近在看用javascript+css实现rich client。javascript 也是一个蛮有意思的语言。特别是其面向对象的实现和其他“标准”的OO launguage有很大的不同。但是，都是动态语言，我还是觉得它比起python语法和库都差得太远。可是没有explorer支持python开发啊。。。：（ </p>
		<br />
		<p>这是我学习javascript中面向对象特性的一点总结。希望对具有其他语言的面向对象设计经验的朋友理解javascript的OO有所帮助。我具有c++,java和python的面向对象设计的经验。</p>
		<p>总的感受， javascript作为一种弱类型的动态语言，语法接近于java，但其面向对象的方式更和python相识。</p>
		<p>
				<strong>1 面向对象的特性</strong>
		</p>
		<br />
		<p>类，成员变量，成员函数，类变量，类方法，继承，多态</p>
		<p>
				<strong>1） 类</strong>
		</p>
		<br />
		<p>类的定义：function Circle(r) { this.r = r; } </p>
		<br />
		<p>类的实例化： c = Circle(3);</p>
		<p>
				<strong>2）成员变量</strong>
		</p>
		<br />
		<p>成员变量在初始化函数里申明：this.r = r; </p>
		<br />
		<p>注意，在对象生成后，你也可以给它附上成员变量，比如c.name="my circle"， </p>
		<br />
		<p>但是除非特别的需要，我强烈建议你不要这样做。也就是所有的成员都应在初始化函数里声明。我认为这是一种好的style。 </p>
		<br />
		<p>这一点和python很相识。</p>
		<p>
				<strong>3）成员函数</strong>
		</p>
		<br />
		<p>成员函数的标准形式是这样的： </p>
		<br />
		<p>Cricle.prototype.area = function() { return 3.14 * this.r * this.r; } </p>
		<br />
		<p>这和java或python或c++都大不一样。但为了帮助理解，你可以把prototype看作基类。 </p>
		<br />
		<p>prototype里面的变量或方法，是所有对象共享的。 </p>
		<br />
		<p>比如，c.area()调用最终就会让解释器调用到Circle.prototype.area(). </p>
		<p>相比于java和c++，javascript具有他们都没有的一个语义，也就是你可以在prototype里定义变量。定义在prototype里的变量可以被所有的实例共享量。所以一般它应该是一个常数，比如：Circle.prototype.PI = 3.14.</p>
		<p>显然，prototype里的变量和方法都应该是不变的。每一个对象实例都不应该取修改prototype中的内容。虽然语言允许你可以这样做，但这样做没有任何意义，也违反了面向对象的语义（想想，java会让你动态修改一个类的方法吗）。 </p>
		<br />
		<p>当然，对于多态是另外一回事，在后面详述。 </p>
		<p>而且，我建议所有的成员函数都在紧接类定义的地方定义。而不应该在代码运行的某个地方对一个对象实例增加/修改成员函数。这样的结果是javascript的类定义尽量向java看齐。使得代码更清晰。</p>
		<p>
				<strong>4）类变量</strong>
		</p>
		<br />
		<p>类变量是属于一个类的变量。就像java里用static修饰的变量。因为它属于类，所以它也应该是一个常量。实例不应该去修改它，虽然你可以（java里可以用final修饰，使得类变量一旦定义，就不能修改）。这里可以看到，类变量和prototype里定义的变量的功能是相似的。确实如此，他们的目的都是一样的。但他们的访问方式 </p>
		<br />
		<p>不一样。比如： </p>
		<br />
		<p>Circle.prototype.PI = 3.14; </p>
		<br />
		<p>Circle.PI = 3.14; </p>
		<br />
		<p>
				<em>//用prototype里的变量</em>
		</p>
		<br />
		<p>Circle.prototype.area1 = function() { return this.PI * this.r * this.r; } </p>
		<br />
		<p>
				<em>//用类变量</em>
		</p>
		<br />
		<p>Circle.prototype.area2 = function() { return Circle.PI * this.r * this.r; }</p>
		<p>
				<strong>5）类方法</strong>
		</p>
		<br />
		<p>这个概念应该很简单。注意类方法里绝对不要用this关键字，和java完全一样。 </p>
		<br />
		<p>Circle.max = function(a, b) {<br />    return a.r &gt; b.r ? a : b; <br />} </p>
		<br />
		<p>theMax = Circle(new Circle(1), new Circle(4));</p>
		<p>
				<strong>6）继承</strong>
		</p>
		<br />
		<p>子类继承父类，那么 “子类实例” 具有和 “父类实例” 完全一样的行为。javascript是这样实现的。 </p>
		<br />
		<p>function SubCircle(x, y, r) { <br />  this.x = x;<br />  this.y = y;<br />  this.r =r;<br />} </p>
		<br />
		<p>SubCircle.prototype = new Circle(0);<br />记得前面说的吗？可以把prototype看作一个基类。这里，prototype确确实实是一个基类。它是如何实现的呢？ </p>
		<br />
		<p>举例如下：<br />sc = SubCirlce(1,1,3); <br />sc.area(); </p>
		<br />
		<p>调用的传递：<br />sc.area()-&gt;sc.prototype.area()-&gt;Circle(0).area()-&gt;Circle.prototype.area().<br />看来是不是很奇妙呢。 </p>
		<br />
		<p>通过这种方式，javascript实现了继承。</p>
		<p>
				<strong>7）多态</strong>
		</p>
		<br />
		<p>多态是子类会定义和父类具有相同signature的方法。假设在SubCircle所在的空间PI=100,而面积公式也变为 PI*R*R*R。 </p>
		<br />
		<p>SubCircle.prototype.PI = 100 </p>
		<br />
		<p>SubCircle.prototype.area = function() {<br />   return this.PI*this.r*this.r*this.r; <br />}<br />Sc.area() </p>
		<p>这样的操作可以认为是: </p>
		<br />
		<p>Sc.PI-&gt;sc.prototype.PI-&gt;Cricle(0).PI = 100 </p>
		<br />
		<p>Sc.area()-&gt;sc.prototype.area()-&gt;Circle(0).area.<br />这个时候，调用过程是这样的 </p>
		<br />
		<p>sc.area()-&gt;sc.prototype.area(),在这里解释器发现了area这个方法，于是它就调用此方法。 </p>
		<br />
		<p>而Cricle.prototype.area就永远也不会被调用。PI的调用也是如此。那么子类如何想调用父类的方法应怎么办呢？好像没有什么办法哦，谁知道可以告诉我。但面向对象的理论告诉我们，继承主要是提供接口而不是代码复用，所以还是少有这样的念头为好 ：）。 </p>
		<br />
		<p>下面是一个例子程序。包含上面的所有的概念。<br /><font color="#333333"><font face="宋体"><strong>例子<br /></strong>///////////define: Cricle//////////////////<br />function Circle(r) {<br />this.r = r;<br />}<br />Circle.PI = 3.14;<br />Circle.prototype.PI = 3.14;<br />Circle.prototype.area = function() { return Circle.PI*this.r*this.r; }<br />Circle.prototype.area2 = function() { return this.PI*this.r*this.r; } </font></font></p>
		<br />
		<p>
				<br />//// test<br />c = new Circle(3);<br />//alert("area1 :"+c.area());<br />//alert("area2 :"+c.area2());</p>
		<p>Circle.max = function(a, b) { return a.r&gt;b.r ? a.r : b.r; }<br />//alert("max is "+Circle.max(new Circle(1), new Circle(3)));</p>
		<p>c1 = new Circle(1);<br />c2 = new Circle(1);<br />c2.PI = 100;//Circle.prototype.PI=100;</p>
		<p>//alert("c1.area1 "+c1.area());<br />//alert("c1.area2 "+c1.area2());<br />//alert("c2.area1 "+c2.area());<br />//alert("c2.area2 "+c2.area2());</p>
		<br />
		<p>////////////////////////define: SubCircle //////////////////<br />function SubCircle(x, y, r) {<br />this.x = x;<br />this.y = y;<br />this.r = r;<br />}<br />SubCircle.prototype = new Circle(0);<br />SubCircle.prototype.PI = 100;<br />SubCircle.prototype.move2 = function(x, y) { this.x = x; this.y = y;}<br />SubCircle.prototype.area = function() { return this.PI*this.r*this.r*this.r; }</p>
		<p>//// test<br />sc = new SubCircle(0,0,2);</p>
		<p>alert(sc.area());<br /><br />from: <a href="http://www.klstudio.com/post/52.html">http://www.klstudio.com/post/52.html</a></p>
<img src ="http://www.blogjava.net/weidagang2046/aggbug/86324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2006-12-08 14:00 <a href="http://www.blogjava.net/weidagang2046/articles/86324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个xmlhttp读取xml的例子</title><link>http://www.blogjava.net/weidagang2046/articles/85981.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Wed, 06 Dec 2006 15:59:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/85981.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/85981.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/85981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/85981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/85981.html</trackback:ping><description><![CDATA[
		<font face="Courier New"> </font>
		<p>
				<font face="Courier New">这是一个网友在论坛上问的一个问题。大体上在javascript中用xmlhttp读取一个xml文件：</font>
		</p>
		<p>
				<font face="Courier New">xml文件内容如下：</font>
		</p>
		<p>
				<font face="Courier New">  </font>
		</p>
		<table cellspacing="1" cellpadding="1" width="98%" border="0">
				<tbody>
						<tr>
								<td bgcolor="#ffcc00">
										<font face="Courier New"> &lt;?xml version="1.0" encoding="gb2312"?&gt;<br />&lt;RECORDS&gt;<br />   &lt;CATEGORY_CARS&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1040372&lt;/URL&gt;<br />      &lt;TITLE&gt;9成新绿亮牌电动车转让&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;今年51购买发票、车牌齐全，松下48V电瓶，可以续行110分钟&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1041502&lt;/URL&gt;<br />      &lt;TITLE&gt;特价转让桑塔纳2000&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;原产配置,无事故车况好有手续,可办理过户并可按客户要求送到指定地点&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1044092&lt;/URL&gt;<br />      &lt;TITLE&gt;忍痛转让汽动滑板车&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;购置仅一周，状况良好，百公里耗油不足两升，速度可达３０多公里每小时&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1044448&lt;/URL&gt;<br />      &lt;TITLE&gt;特惠售电瓶车一辆&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;购买不足一月因工作关系转让，手续齐全，有意者请尽快联系！&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1050116&lt;/URL&gt;<br />      &lt;TITLE&gt;诚意转扬子江摩托车(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;YZJ50QT-2，买了两年，八成新车况极好，因工作只好忍痛割爱&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1050587&lt;/URL&gt;<br />      &lt;TITLE&gt;急购二手电瓶车&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;7成以上新，型号稍大脚踏板出可站小孩较好就在这两三天内&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1052652&lt;/URL&gt;<br />      &lt;TITLE&gt;转自用黑色呈捷一辆(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;TR2001B，9成新，车况良好，液压避震，金属反光镜，晨新真空胎&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1043941&lt;/URL&gt;<br />      &lt;TITLE&gt;广州本田马自达M6求租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;男30A照10年以上驾龄，熟悉上海及江浙一带周边道路，提供长短期用车业务&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1047092&lt;/URL&gt;<br />      &lt;TITLE&gt;全新别克诚意出租(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;真皮座椅，车况极佳。本人驾驶技术娴熟，熟悉市内道路并会简单英日文交流&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1052187&lt;/URL&gt;<br />      &lt;TITLE&gt;求购二手电瓶车一部&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;6成新以上，最好在普陀区交易，有意者msn联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1053335&lt;/URL&gt;<br />      &lt;TITLE&gt;几乎全新自行车转让&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;男士山地26型女式永久牌26型，购于家乐福均有发票，因搬迁诚意转让&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1044190&lt;/URL&gt;<br />      &lt;TITLE&gt;求好骑的二手车&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;品质好吉安特、永久的都可以，价钱好商量在浦东世纪公园附近交易&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1041523&lt;/URL&gt;<br />      &lt;TITLE&gt;寻人拼车费用面议&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;彭浦新村到徐家汇漕溪路，８点前到晚５点回程，有４-５人长包上下班&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051441&lt;/URL&gt;<br />      &lt;TITLE&gt;寻同路人拼车上下班&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;男，住虹口汶水东路在淮海中路上班，时间8：30－17：00&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1054749&lt;/URL&gt;<br />      &lt;TITLE&gt;面包车带车求职&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;全新东南得利卡面包车，三十年专职营运驾驶经验，低价出租亦可&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1038500&lt;/URL&gt;<br />      &lt;TITLE&gt;三十年驾龄B照带车求职&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;全新东南得利卡11座面包车带驾车可座十人.承接各种租车服务,专营司机&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;/CATEGORY_CARS&gt;<br />   &lt;CATEGORY_CITYLIFE&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1036176&lt;/URL&gt;<br />      &lt;TITLE&gt;刘若英世界巡演上海站&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;刘若英“公主彻夜未眠”世界巡回演唱会，锁定11/18上海大舞台&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1040570&lt;/URL&gt;<br />      &lt;TITLE&gt;国庆寻大鬼路子玩家&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;一直凑不足六人,有兴趣的朋友可以一起出来玩,时间初步定在10/5,地点看大家方便&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1043379&lt;/URL&gt;<br />      &lt;TITLE&gt;九折转让超女演唱会门票&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;因外出旅游欲九折转让，致电上海票务，他们负责送票上门&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1043153&lt;/URL&gt;<br />      &lt;TITLE&gt;专业汽车租赁公司&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;拥有大/中/小豪华及标准车型，性能好价格实惠，并可根据宾客的需要提供陪驾/代驾服务&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051918&lt;/URL&gt;<br />      &lt;TITLE&gt;想和王军霞一起跑步吗？&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;安利纽崔莱健康跑报名中，王军霞亲自领跑，参加健康跑，你就是健康冠军&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1048868&lt;/URL&gt;<br />      &lt;TITLE&gt;免费赠送波斯猫(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;本人因工作非常繁忙不能很好的照顾爱猫, 希望有爱猫的朋友能帮我照顾它&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ589655&lt;/URL&gt;<br />      &lt;TITLE&gt;有可爱的狗狗需要照顾吗?&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;喜欢小狗的我一只未能如愿，现在有条件了希望可以领养一只健康可爱的小狗&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1049943&lt;/URL&gt;<br />      &lt;TITLE&gt;征需要内存的朋友团购&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;大家一起买的话一定便宜啊，或者有谁认识人的，内部购买更便宜啊！&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1003751&lt;/URL&gt;<br />      &lt;TITLE&gt;陈奕迅2005上海演唱会&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;带给你优美动人平实的抒情歌曲,只有想不到,没有唱不到&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1019595&lt;/URL&gt;<br />      &lt;TITLE&gt;国际动漫展太空堡垒主题馆&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;太空堡垒中国联盟上海分部邀您重温传奇史诗,精彩不容错过&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1003779&lt;/URL&gt;<br />      &lt;TITLE&gt;迈克学摇滚倾情演唱会&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;F1中国大奖赛闭幕晚会,风靡世界的MLTR带给你抚动心弦的音乐&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ964856&lt;/URL&gt;<br />      &lt;TITLE&gt;温情迷你派对尽显女人魅力&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;晚免费的“魅力的我-色彩/彩妆学习秀”,快来加入这个美丽轻松的聚会吧 &lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ980288&lt;/URL&gt;<br />      &lt;TITLE&gt;寻共同练习salsa舞的朋友&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;每星期1－2次,每次一小时左右,愿意和你一起提高舞技,男士更好&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1016965&lt;/URL&gt;<br />      &lt;TITLE&gt;寻找：一起学古筝的朋友们&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;邀请和我一样爱好古筝的朋友共同学习,共同进步&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1032275&lt;/URL&gt;<br />      &lt;TITLE&gt;国家二级运动员陪练乒乓球&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;本人经过专业乒乓球训练12年,愿在业余时间与有兴趣人士切磋、教学&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1033483&lt;/URL&gt;<br />      &lt;TITLE&gt;寻人领养京巴小狗&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;因为工作关系无暇照看忍痛割爱,希望喜欢小狗且有一定收养条件的人来照顾她&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;/CATEGORY_CITYLIFE&gt;<br />   &lt;CATEGORY_FRIEND&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1015877&lt;/URL&gt;<br />      &lt;TITLE&gt;随和男人寻成熟女友(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;温和，追求简单生活，寻真诚热爱家庭生活的女性相知相爱&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1041173&lt;/URL&gt;<br />      &lt;TITLE&gt;两mm征驴友游三亚(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;我们两个女孩子想在11月份去三亚玩，具体时间未定，行程5天，费用自理&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1038755&lt;/URL&gt;<br />      &lt;TITLE&gt;十一象山看海征人同往 &lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;吹吹海风,品品海鲜，有兴趣的朋友赶快联系我吧 &lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1042714&lt;/URL&gt;<br />      &lt;TITLE&gt;高薪工程师寻有缘人 &lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;男74年生1米77,外企从事</font>
										<a href="http://tech.acnow.net/Html/SoftWare/" target="_blank">
												<font face="Courier New">软件</font>
										</a>
										<font face="Courier New">开发，高薪，欲结识一位有爱心女子为友&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1050886&lt;/URL&gt;<br />      &lt;TITLE&gt;女幼教寻男友(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;女８１年生，丰满成熟气质佳，望找一名本科学历以上的男士&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1056619&lt;/URL&gt;<br />      &lt;TITLE&gt;寻湖北咸宁“任我行”&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;我是罗倩，我的手机丢找不到你，见广告请速与我联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1042486&lt;/URL&gt;<br />      &lt;TITLE&gt;寻师妹游丽娜&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;曾一起在福州市综艺武术馆习武的林松很想你，请速和我联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1056846&lt;/URL&gt;<br />      &lt;TITLE&gt;山东小伙诚征女友(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;山东人85年生，高大英俊有固定收入，心底善良，非诚勿扰&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1032110&lt;/URL&gt;<br />      &lt;TITLE&gt;优秀男人找相宜女友&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;男174cm,名牌大学硕士研究生,市政府机关工作,品貌佳&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1027200&lt;/URL&gt;<br />      &lt;TITLE&gt;想在国庆行走漓江两畔吗?&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;因部分队员临时有事,故尚缺3-4名旅伴,邀有意者国庆同游阳朔山水&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1029016&lt;/URL&gt;<br />      &lt;TITLE&gt;寻友国庆周边一日游&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;十一假期期间任意一天,现只有我一人,寻同样孤单的朋友同玩&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd?AdId=953993&lt;/URL&gt;<br />      &lt;TITLE&gt;上海女孩诚征韩国朋友(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;我在新加坡留学,假期想结交几个韩国朋友互相进行语言学习,联系我吧&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ601190&lt;/URL&gt;<br />      &lt;TITLE&gt;温柔女人寻成熟稳重男士&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;25岁,开朗大方,国企工作,欲觅一个比较成熟型男士走过以后的岁月&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1026506&lt;/URL&gt;<br />      &lt;TITLE&gt;高挑美丽女店主寻成熟男士&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;自营服装店女店主,81年生,高挑美丽,月收入5000,有独居房&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1016313&lt;/URL&gt;<br />      &lt;TITLE&gt;衢州户外体验游&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;登山/穿越/篝火/烧烤/游湖/探索千古之谜,等你一起和大自然亲密接触&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1029693&lt;/URL&gt;<br />      &lt;TITLE&gt;寻原中百一店的袁伟&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;现在你在何处,不知可好,在此我真心祝愿你幸福快乐&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;/CATEGORY_FRIEND&gt;<br />   &lt;CATEGORY_HOUSING&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1041036&lt;/URL&gt;<br />      &lt;TITLE&gt;工商银行家属院寻求合租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;有热水器、电视、家具、床本人在任职TCL工业事业部，长期出差&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1040748&lt;/URL&gt;<br />      &lt;TITLE&gt;莘潭路莘松三村好房招租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;两室一厅一卫,全套家电 ,部分家具周围配套设施齐全交通便利&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1039380&lt;/URL&gt;<br />      &lt;TITLE&gt;七宝南国花园房寻合租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;三房两厅出租其中两间朝南，16平米，有大床/衣橱/电视/电话&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1041154&lt;/URL&gt;<br />      &lt;TITLE&gt;求租普通民房&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;一个人住，有床水电即可，位置在人民医院周围2里路附近&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1050278&lt;/URL&gt;<br />      &lt;TITLE&gt;适合男生的合租房&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;近华师大，出行交通便利，基本生活设施齐全，有阳台&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051094&lt;/URL&gt;<br />      &lt;TITLE&gt;求西藏南路附近租房 &lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;近瞿溪路口用于上钢琴课，有意者请尽快联系我&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1055107&lt;/URL&gt;<br />      &lt;TITLE&gt;出租莘庄地铁附近好房&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;小区环境优美品质高，生活/交通便利，设施全装修好，可短租&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1049382&lt;/URL&gt;<br />      &lt;TITLE&gt;急寻长宁区古北路附近租房&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;因工作需要急需在附近寻合租房，最好是一辆车能到古北路的69/72路等，有请速和我联系,急!&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1042000&lt;/URL&gt;<br />      &lt;TITLE&gt;平南四村全配房寻女性合租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;近漕宝路两室一厅一卫，小区周围配套设施齐全，交通便利&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1055161&lt;/URL&gt;<br />      &lt;TITLE&gt;浦东好房出租可看高楼夜景&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;步行10分钟可到2号线东昌路站，12平米+卫生间，有空调/冰箱/家具，仅限一人&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1053216&lt;/URL&gt;<br />      &lt;TITLE&gt;张江玉兰新苑等你入住&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;空调，电视，厨房设备齐全配备微波炉，仅剩下一间欲租从速&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051912&lt;/URL&gt;<br />      &lt;TITLE&gt;南方商城附近寻女生合租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;租房大，设施齐全，出行方便，寻工作稳定生活规律易相处的女生入住&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051207&lt;/URL&gt;<br />      &lt;TITLE&gt;寻市区合租伙伴&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;年后到市区上班，寻较好地段带简易家具/家电/淋浴室的合租房，限女生&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1047572&lt;/URL&gt;<br />      &lt;TITLE&gt;带小花园的好房出租&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;东方路蓝村路临近新地铁站,一室一厅.厨卫齐全室内新装修,家具齐全&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1056539&lt;/URL&gt;<br />      &lt;TITLE&gt;求租长宁区2室1厅房&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;长宁东华大学附近或者金沙江轻轨站附近，有生活设施，长租，价格面谈&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ895455&lt;/URL&gt;<br />      &lt;TITLE&gt;求租长宁区一室户&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;单间，天山路附近最佳，请尽快跟我联系，杨先生&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;/CATEGORY_HOUSING&gt;<br />   &lt;CATEGORY_JOBS&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ605259&lt;/URL&gt;<br />      &lt;TITLE&gt;礼品派发及现场礼仪&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;演唱会记者招待会,只限在校生或高中/三校毕业生,男女生不限&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1014811&lt;/URL&gt;<br />      &lt;TITLE&gt;想和明星近距离接触吗？&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;华世影视招影视演员/兼职见习,展示您演艺才华的舞台,提供专业发展机会&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1031231&lt;/URL&gt;<br />      &lt;TITLE&gt;高薪招聘网络客服人员&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;高中/高中以上文凭,普通话好善于沟通,有网上销售经验者优先&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1029787&lt;/URL&gt;<br />      &lt;TITLE&gt;国际乐器展览会兼职机会&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;2005上海国际乐器展览会招礼仪/录入/服务等兼职人员,欢迎报名&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1027170&lt;/URL&gt;<br />      &lt;TITLE&gt;卡思奇感诚聘幼教人员&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;亲和力强,形象好,素质高,有意者请携简历及近照到公司面谈&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1030616&lt;/URL&gt;<br />      &lt;TITLE&gt;高薪招聘</font>
										<a href="http://tech.acnow.net/Html/Program/Soft_Project/" target="_blank">
												<font face="Courier New">软件工程</font>
										</a>
										<font face="Courier New">师&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;精通JAVA/delphi/SQL serve,浦东陆家嘴上班,待遇从优&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1008972&lt;/URL&gt;<br />      &lt;TITLE&gt;仓管人员兼职的好去处&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;本公司经营印刷业务,欲招仓管或相关人员兼职,待遇优厚,机不可失&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1024270&lt;/URL&gt;<br />      &lt;TITLE&gt;豪斯婚礼天马影视招实习&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;广告</font>
										<a href="http://tech.acnow.net/Html/SoftWare/DesignOnline/" target="_blank">
												<font face="Courier New">设计</font>
										</a>
										<font face="Courier New">/影视制作/摄影/</font>
										<a href="http://tech.acnow.net/html/SoftWare/DesignOnline/artist/" target="_blank">
												<font face="Courier New">美工</font>
										</a>
										<font face="Courier New">设计/新娘化妆等实习机会,提供实战平台&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1027163&lt;/URL&gt;<br />      &lt;TITLE&gt;酒吧诚聘业务主管&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;本酒吧位于长宁区武夷路88号,现招聘酒吧业务主管一名,待遇从优&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1029926&lt;/URL&gt;<br />      &lt;TITLE&gt;招双休日派发人员&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;各类食品、日常用品、化妆品双休日派发,工作地点就近安排&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1016030&lt;/URL&gt;<br />      &lt;TITLE&gt;高薪聘请平面设计人员&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;熟练掌握photoshop等软件从业经验最好在一年以上,最好有喷绘操作经验&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1027149&lt;/URL&gt;<br />      &lt;TITLE&gt;诚聘专职/兼职销售人员&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;美国独资化妆品销售企业诚聘全职/兼职销售代表,回报丰厚&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1002288&lt;/URL&gt;<br />      &lt;TITLE&gt;正国机电招会计人员 &lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;女性有会计师从业资格证,3年以上相关专业工作经验,能够熟练操作电脑&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd?AdId=966377&lt;/URL&gt;<br />      &lt;TITLE&gt;传媒公司高薪招业务主任&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;22－28岁,大专以上学历,有房地产/酒店/餐饮/金融方面工作经验者优先&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1029151&lt;/URL&gt;<br />      &lt;TITLE&gt;高薪聘请文职人员若干&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;电话回访员/区域服务员/收费员各5名,沪高中,30-45岁,待遇从优&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1034664&lt;/URL&gt;<br />      &lt;TITLE&gt;招聘酒吧服务生&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;位于徐汇区，可兼职，晚7点至次日凌晨2点上班，待遇面谈&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;/CATEGORY_JOBS&gt;<br />   &lt;CATEGORY_SECONDHAND&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1035728&lt;/URL&gt;<br />      &lt;TITLE&gt;经典超薄笔记本!(图)&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;PIII1.2G/256M/40G/DVD/14.1TFT/LI电,全球联保至06年4月 &lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1005327&lt;/URL&gt;<br />      &lt;TITLE&gt;出步步高复读机/VCD&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;步步高复读机BK-791八成新,步步高便捷式VCD播放器-F7,全部低价出售&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1056362&lt;/URL&gt;<br />      &lt;TITLE&gt;超低价转让二手家具电器&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;因搬迁想尽快处理掉，自行车和家电都有发票，对需要的人来说真的实惠&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051854&lt;/URL&gt;<br />      &lt;TITLE&gt;寻找二手洗衣机&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;急需二手洗衣机一台,4.0G 公斤以上,最好能送货上门,价格可议&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1042275&lt;/URL&gt;<br />      &lt;TITLE&gt;低价转女士自行车/饮水机&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;凤凰牌26寸六成新，骑起来很轻松；美的台式饮水机，9成新，半价出售&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1039422&lt;/URL&gt;<br />      &lt;TITLE&gt;求购二手电脑&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;我在张江，不要太贵能用就行，有的朋友请跟我联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1054825&lt;/URL&gt;<br />      &lt;TITLE&gt;出让超女演唱会门票&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;本人是“笔笔”的粉丝，临时决定去旅游不能去了，有意者请与我联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051809&lt;/URL&gt;<br />      &lt;TITLE&gt;低价转星之健健身单次卡&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;适用于上海的七家星之健门店，环境舒适，有效期长至明年4月19日&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1051691&lt;/URL&gt;<br />      &lt;TITLE&gt;折价转让国际烟花节门票&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;两张，因工作原因无法前去，有意者请速联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1049993&lt;/URL&gt;<br />      &lt;TITLE&gt;求购二手彩屏手机&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;非国产，最好诺基亚，包括电池板和充电器&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1016140&lt;/URL&gt;<br />      &lt;TITLE&gt;超酷非利谱859转让&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;今年7月买进，手续齐全，有保，有意者请速联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1048154&lt;/URL&gt;<br />      &lt;TITLE&gt;出售超薄松下ＣＤ机&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;银色 ９成新 15.8mm仅重127克，金属味十足，高档气派&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1044191&lt;/URL&gt;<br />      &lt;TITLE&gt;转让原版CFA一二级教材&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;自购的原版教材，现考试已通过故出售，今年一二级的考生都用得着&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1055629&lt;/URL&gt;<br />      &lt;TITLE&gt;惊喜价全新兰蔻果汁唇彩&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;Ultra Shiny Lip Gloss，15ml装，法国原产，绝对实惠&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1049930&lt;/URL&gt;<br />      &lt;TITLE&gt;出国带回的sk-II面膜&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;净白修护，另有兰蔻洗面奶,数量不多欲购从速&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;RECORD&gt;<br />      &lt;URL&gt;http://shanghai.kijiji.com.cn/classifieds/ViewAd-W0QQAdIdZ1049911&lt;/URL&gt;<br />      &lt;TITLE&gt;低价出高夫礼盒&lt;/TITLE&gt;<br />      &lt;DESCRIPTION&gt;男士用的高夫三件套的礼盒，现低价出售或置换，有意者请电话联系&lt;/DESCRIPTION&gt;<br />   &lt;/RECORD&gt;<br />   &lt;/CATEGORY_SECONDHAND&gt;<br />&lt;/RECORDS&gt;<br /></font>
								</td>
						</tr>
				</tbody>
		</table>
		<font face="Courier New">
		</font>
		<p>
				<font face="Courier New">假设其网络地址为：</font>
				<a href="http://tech.acnow.net/rss/listings.xml">
						<font face="Courier New">/rss/listings.xml</font>
				</a>
		</p>
		<p>
				<font face="Courier New">则，针对网友的这个需求：</font>
		</p>
		<p>
		</p>
		<table cellspacing="1" cellpadding="1" width="98%" border="0">
				<tbody>
						<tr>
								<td bgcolor="#339999">
										<font face="Courier New"> 不过这个xml中有&lt;CATEGORY_FRIEND&gt;&lt;CATEGORY_CARS&gt;的各个节点,我想分别读出每个&lt;category&gt;中的数据,并随机显示一条出来即可。不知道改如何做。<br /></font>
								</td>
						</tr>
				</tbody>
		</table>
		<p>
				<font face="Courier New">写的代码如下：</font>
		</p>
		<font face="Courier New">&lt;body&gt;<br />&lt;div id=t&gt;&lt;/div&gt;<br />&lt;/body&gt;<br />&lt; script &gt;<br />x =new ActiveXObject("Microsoft.</font>
		<a href="http://tech.acnow.net/Html/Web/XML/" target="_blank">
				<font face="Courier New">XML</font>
		</a>
		<font face="Courier New">HTTP")<br />x.open("GET","/rss/listings.xml",false)<br />x.send()<br />if(x.status==200)<br />{<br />d = x.responseXML<br />c = "&lt;table&gt;"<br />nodes = d.selectNodes("//RECORDS") for(i = 0;i&lt;nodes[0].childNodes.length;i++)<br />{<br />   subnodes=nodes[0].childNodes[i].childNodes;<br />   j=Math.floor(subnodes.length * Math.random())<br />  <br />   c+="&lt;tr&gt;&lt;td style='color:ff0000;font-weight:bold'&gt;" +  nodes[0].childNodes[i].nodeName + "：&lt;/td&gt;&lt;/tr&gt;"<br />   c+="&lt;tr&gt;&lt;td&gt;&lt;a href='" + subnodes[j].childNodes[0].text + "'&gt;" + subnodes[j].childNodes[1].text + "&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;"<br />   c+="&lt;tr&gt;&lt;td&gt;" +subnodes[j].childNodes[2].text + "&lt;/td&gt;&lt;/tr&gt;"<br />}c += "&lt;/table&gt;"<br />document.all.t.inner</font>
		<a href="http://tech.acnow.net/Html/Web/HTML/" target="_blank">
				<font face="Courier New">HTML</font>
		</a>
		<font face="Courier New"> = c<br />}<br />&lt;/script&gt;<br /></font>
<img src ="http://www.blogjava.net/weidagang2046/aggbug/85981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weidagang2046/" target="_blank">weidagang2046</a> 2006-12-06 23:59 <a href="http://www.blogjava.net/weidagang2046/articles/85981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写高性能Web应用程序的10个入门技巧</title><link>http://www.blogjava.net/weidagang2046/articles/85980.html</link><dc:creator>weidagang2046</dc:creator><author>weidagang2046</author><pubDate>Wed, 06 Dec 2006 15:57:00 GMT</pubDate><guid>http://www.blogjava.net/weidagang2046/articles/85980.html</guid><wfw:comment>http://www.blogjava.net/weidagang2046/comments/85980.html</wfw:comment><comments>http://www.blogjava.net/weidagang2046/articles/85980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weidagang2046/comments/commentRss/85980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weidagang2046/services/trackbacks/85980.html</trackback:ping><description><![CDATA[
		<p>编写高性能Web应用程序的10个入门技巧<br /><br />  数据层性能 <br />  技巧 1 — 返回多个结果集 <br />  技巧 2 — 分页的数据访问 <br />  技巧 3 — 连接池 <br />  技巧 4 — ASP.NET 缓存 API <br />  技巧 5 — 每请求缓存 <br />  技巧 6 — 后台处理 <br />  技巧 7 — 页输出缓存和代理<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a><br />  技巧 8 — 运行 IIS 6.0（只要用于内核缓存） <br />  技巧 9 — 使用 Gzip 压缩 <br />  技巧 10 — <a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件视图状态 <br />  <br /><br />使用 ASP.NET 编写 Web 应用程序的简单程度令人不敢相信。正因为如此简单，所以很多<br />开发人员就不会花时间来设计其应用程序的结构，以获得更好的性能了。在本文中，我将<br />讲述 10 个用于编写高性能 Web 应用程序的技巧。但是我并不会将这些建议仅局限于 <br />ASP.NET 应用程序，因为这些应用程序只是 Web 应用程序的一部分。本文不作为对 Web <br />应用程序进行性能调整的权威性指南 — 一整本书恐怕都无法轻松讲清楚这个问题。请将<br />本文视作一个很好的起点。 <br /><br />成为工作狂之前，我原来喜欢攀岩。在进行任何大型攀岩活动之前，我都会首先仔细查看<br />指南中的路线，阅读以前游客提出的建议。但是，无论指南怎么好，您都需要真正的攀岩<br />体验，然后才能尝试一个特别具有挑战性的攀登。与之相似，当您面临修复性能问题或者<br />运行一个高吞吐量站点的问题时，您只能学习如何编写高性能 Web 应用程序。<br /><br />我的个人体验来自在 Microsoft 的 ASP.NET 部门作为基础架构程序经理的经验，在此期<br />间我运行和管理 www.ASP.NET，帮助设计社区<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的结构，社区<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>是几个著名 <br />ASP.NET 应用程序（组合到一个平台的 ASP.NET Forums、.Text 和 nGallery）。我确信<br />有些曾经帮助过我的技巧对您肯定也会有所帮助。<br /><br />您应该考虑将应用程序分为几个逻辑层。您可能听说过 3 层（或者 n 层）物理体系结构<br />一词。这些通常都是规定好的体系结构方式，将功能在进程和/或硬件之间进行了物理分离<br />。当系统需要扩大时，可以很轻松地添加更多的硬件。但是会出现一个与进程和机器跳跃<br />相关的性能下降，因此应该避免。所以，如果可能的话，请尽量在同一个应用程序中一起<br />运行 ASP.NET 页及其相关组件。<br /><br />因为代码分离以及层之间的边界，所以使用 Web 服务或远程处理将会使得性能下降 20% <br />甚至更多。<br /><br />数据层有点与众不同，因为通常情况下，最好具有专用于<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>的硬件。然而进程跳跃到<br /><a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>的成本依然很高，因此数据层的性能是您在优化代码时首先要考虑的问题。<br /><br />在深入应用程序的性能修复问题之前，请首先确保对应用程序进行剖析，以便找出具体的<br />问题所在。主要性能计数器（如表示执行垃圾回收所需时间百分比的计数器）对于找出应<br />用程序在哪些位置花费了其主要时间也非常有用。然而花费时间的位置通常非常不直观。<br /><br />本文讲述了两种类型的性能改善：大型优化（如使用 ASP.NET 缓存），和进行自身重复的<br />小型优化。这些小型优化有时特别有意思。您对代码进行一点小小的更改，就会获得很多<br />很多时间。使用大型优化，您可能会看到整体性能的较大飞跃。而使用小型优化时，对于<br />某个特定请求可能只会节省几毫秒的时间，但是每天所有请求加起来，则可能会产生巨大<br />的改善。<br /><br />数据层性能<br /><br /><br />谈到应用程序的性能调整，有一个试纸性的测试可用来对工作进行优先级划分：代码是否<br />访问<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>？如果是，频率是怎样的？请注意，这一相同测试也可应用于使用 Web 服务或<br />远程处理的代码，但是本文对这些内容未做讲述。<br /><br />如果某个特定的代码路径中必需进行<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>请求，并且您认为要首先优化其他领域（如字<br />符串操作），则请停止，然后执行这个试纸性测试。如果您的性能问题不是非常严重的话<br />，最好花一些时间来优化一下与<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>、返回的数据量、进出<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>的往返频率相关的花<br />费时间。<br /><br />了解这些常规信息之后，我们来看一下可能会有助于提高应用程序性能的十个技巧。首先<br />，我要讲述可能会引起最大改观的更改。<br /><br /><br />技巧 1 — 返回多个结果集<br /><br /><br />仔细查看您的<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>代码，看是否存在多次进入<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>的请求路径。每个这样的往返都会<br />降低应用程序可以提供的每秒请求数量。通过在一个<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>请求中返回多个结果集，可以<br />节省与<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>进行通信所需的总时间长度。同时因为减少了<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a><a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>管理请求的工作<br />，还会使得系统伸缩性更强。<br /><br />虽然可以使用动态 SQL 返回多个结果集，但是我首选使用存储过程。关于业务逻辑是否应<br />该驻留于存储过程的问题还存在一些争议，但是我认为，如果存储过程中的逻辑可以约束<br />返回数据的话（缩小数据集的大小、缩短网络上所花费时间，不必筛选逻辑层的数据），<br />则应赞成这样做。<br /><br />使用 SqlCommand 实例及其 ExecuteReader 方法填充强类型的业务类时，可以通过调用 <br />NextResult 将结果集指针向前移动。图 1 显示了使用类型类填充几个 ArrayList 的示例<br />会话。只从<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>返回您需要的数据将进一步减少<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>上的内存分配。 <br /><br />Figure 1 Extracting Multiple Resultsets from a DataReader<br />// read the first resultset<br />reader = command.ExecuteReader();<br /><br />// read the data from that resultset<br />while (reader.Read()) {<br />    suppliers.Add(PopulateSupplierFromIDataReader( reader ));<br />}<br /><br />// read the next resultset<br />reader.NextResult();<br /><br />// read the data from that second resultset<br />while (reader.Read()) {<br />    products.Add(PopulateProductFromIDataReader( reader ));<br />}<br /><br /><br />技巧 2 — 分页的数据访问<br /><br /><br />ASP.NET DataGrid 具有一个很好的功能：数据分页支持。在 DataGrid 中启用分页时，一<br />次会显示固定数量的记录。另外，在 DataGrid 的底部还会显示分页 UI，以便在记录之间<br />进行导航。该分页 UI 使您能够在所显示的数据之间向前和向后导航，并且一次显示固定<br />数量的记录。<br /><br />还有一个小小的波折。使用 DataGrid 的分页需要所有数据均与网格进行绑定。例如，您<br />的数据层需要返回所有数据，那么 DataGrid 就会基于当前页筛选显示的所有记录。如果<br />通过 DataGrid 进行分页时返回了 100,000 个记录，那么针对每个请求会放弃 99,975 个<br />记录（假设每页大小为 25 个记录）。当记录的数量不断增加时，应用程序的性能就会受<br />到影响，因为针对每个请求必须发送越来越多的数据。<br /><br />要编写性能更好的分页代码，一个极佳的方式是使用存储过程。图 2 显示了针对 <br />Northwind <a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>中的 Orders 表进行分页的一个示例存储过程。简而言之，您此时要做<br />的只是传递页索引和页大小。然后就会计算合适的结果集，并将其返回。 <br /><br />Figure 2 Paging Through the Orders Table<br />CREATE PROCEDURE northwind_OrdersPaged<br />(<br />    @PageIndex int, <br />    @PageSize int<br />)<br />AS<br />BEGIN<br />DECLARE @PageLowerBound int<br />DECLARE @PageUpperBound int<br />DECLARE @RowsToReturn int<br /><br />-- First set the rowcount<br />SET @RowsToReturn = @PageSize * (@PageIndex + 1)<br />SET ROWCOUNT @RowsToReturn<br /><br />-- Set the page bounds<br />SET @PageLowerBound = @PageSize * @PageIndex<br />SET @PageUpperBound = @PageLowerBound + @PageSize + 1<br /><br />-- Create a temp table to store the select results<br />CREATE TABLE #PageIndex <br />(<br />    IndexId int IDENTITY (1, 1) NOT NULL,<br />    OrderID int<br />)<br /><br />-- Insert into the temp table<br />INSERT INTO #PageIndex (OrderID)<br />SELECT <br />    OrderID<br />FROM <br />    Orders<br />ORDER BY <br />    OrderID DESC<br /><br />-- Return total count<br />SELECT COUNT(OrderID) FROM Orders<br /><br />-- Return paged results<br />SELECT <br />    O.*<br />FROM <br />    Orders O,<br />    #PageIndex PageIndex<br />WHERE <br />    O.OrderID = PageIndex.OrderID AND<br />    PageIndex.IndexID &gt; @PageLowerBound AND<br />    PageIndex.IndexID &lt; @PageUpperBound<br />ORDER BY <br />    PageIndex.IndexID<br /><br />END<br /><br /><br /><br />在社区<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>中，我们编写了一个分页<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件，以完成所有的数据分页。您将会看到<br />，我使用的就是技巧 1 中讨论的理念，从一个存储过程返回两个结果集：记录的总数和请<br />求的数据。<br /><br />返回记录的总数可能会根据所执行查询的不同而有所变化。例如，WHERE 子句可用来约束<br />返回的数据。为了计算在分页 UI 中显示的总页数，必须了解要返回记录的总数。例如，<br />如果总共有 1,000,000 条记录，并且要使用一个 WHERE 子句将其筛选为 1000 条记录，<br />那么分页逻辑就需要了解记录的总数才能正确呈现分页 UI。<br /><br /><br />技巧 3 — 连接池<br /><br /><br />在 Web 应用程序和 <a href="http://www.chinahtml.com/databases/2/" target="_blank">SQL Server</a>? 之间设置 TCP 连接可能是一个非常消耗资源的操作。Mi<br />crosoft 的开发人员到目前为止能够使用连接池已经有一段时间了，这使得他们能够重用<br /><a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>连接。他们不是针对每个请求都设置一个新的 TCP 连接，而是只在连接池中没有任<br />何连接时才设置新连接。当连接关闭时，它会返回连接池，在其中它会保持与<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>的连<br />接，而不是完全破坏该 TCP 连接。<br /><br />当然，您需要小心是否会出现泄漏连接。当您完成使用连接时，请一定要关闭这些连接。<br />再重复一遍：无论任何人对 Microsoft?.NET Framework 中的垃圾回收有什么评论，请一<br />定要在完成使用连接时针对该连接显式调用 Close 或 Dispose。不要相信公共语言运行库<br />(CLR) 会在预先确定的时间为您清除和关闭连接。尽管 CLR 最终会破坏该类，并强制连<br />接关闭，但是当针对对象的垃圾回收真正发生时，并不能保证。 <br /><br />要以最优化的方式使用连接池，需要遵守一些规则。首先打开连接，执行操作，然后关闭<br />该连接。如果您必须如此的话，可以针对每个请求多次打开和关闭连接（最好应用技巧 1<br />），但是不要一直将连接保持打开状态并使用各种不同的方法对其进行进出传递。第二，<br />使用相同的连接字符串（如果使用集成身份验证的话，还要使用相同的线程标识）。如果<br />不使用相同的连接字符串，例如根据登录的用户自定义连接字符串，那么您将无法得到连<br />接池提供的同一个优化值。如果您使用集成身份验证，同时还要模拟大量用户，连接池的<br />效率也会大大下降。尝试跟踪与连接池相关的任何性能问题时，.NET CLR 数据性能计数器<br />可能非常有用。 <br /><br />每当应用程序连接资源时，如在另一个进程中运行的<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>，您都应该重点考虑连接该资<br />源所花时间、发送或检索数据所花时间，以及往返的数量，从而进行优化。优化应用程序<br />中任何种类的进程跳跃都是获得更佳性能的首要一点。<br /><br />应用层包含了连接数据层、将数据转换为有意义类实例和业务流程的逻辑。例如社区服务<br />器，您要在其中填充Forums 或 Threads集合，应用业务规则（如权限）；最重要的是要在<br />其中执行缓存逻辑。<br /><br /><br />技巧 4 — ASP.NET 缓存 API<br /><br /><br />编写应用程序代码行之前，一个首要完成的操作是设计应用层的结构，以便最大化利用 <br />ASP.NET 缓存功能。<br /><br />如果您的组件要在 ASP.NET 应用程序中运行，则只需在该应用程序项目中包括一个 <br />System.Web.dll 引用。当您需要访问该缓存时，请使用 HttpRuntime.Cache 属性（通过 <br />Page.Cache 和 HttpContext.Cache 也可访问这个对象）。<br /><br />对于缓存数据，有几个规则。首先，如果数据可能会多次使用时，则这是使用缓存的一个<br />很好的备选情况。第二，如果数据是通用的，而不特定于某个具体的请求或用户时，则也<br />是使用缓存的一个很好的备选情况。如果数据是特定于用户或请求的，但是寿命较长的话<br />，仍然可以对其进行缓存，但是这种情况可能并不经常使用。第三，一个经常被忽略的规<br />则是，有时可能您缓存得太多。通常在一个 x86 计算机上，为了减少内存不足错误出现的<br />机会，您会想使用不高于 800MB 的专用字节运行进程。因此缓存应该有个限度。换句话说<br />，您可能能够重用某个计算结果，但是如果该计算采用 10 个参数的话，您可能要尝试缓<br />存 10 个排列，这样有可能给您带来麻烦。一个要求 ASP.NET 的最常见支持是由于过度缓<br />存引起的内存不足错误，尤其是对于大型数据集。<br /><br /><br />缓存有几个极佳的功能，您需要对它们有所了解。首先，缓存会实现最近最少使用的算法<br />，使得 ASP.NET 能够在内存运行效率较低的情况下强制缓存清除 － 从缓存自动删除未使<br />用过的项目。第二，缓存支持可以强制失效的过期依赖项。这些依赖项包括时间、密钥和<br />文件。时间经常会用到，但是对于 ASP.NET 2.0，引入了一个功能更强的新失效类型：数<br />据库缓存失效。它指的是当<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a>中的数据发生变化时自动删除缓存中的项。有关<a href="http://www.chinahtml.com/databases/" target="_blank">数据库</a><br />缓存失效的详细信息，请参阅 MSDN?Magazine 2004 年 7 月的 Dino Esposito Cutting <br />Edge 专栏。要了解缓存的体系结构，请参阅图 3。<br /><br />技巧 5 — 每请求缓存<br /><br />在本文前面部分，我提到了经常遍历代码路径的一些小改善可能会导致较大的整体性能收<br />益。对于这些小改善，其中有一个绝对是我的最爱，我将其称之为"每请求缓存"。<br /><br />缓存 API 的设计目的是为了将数据缓存较长的一段时间，或者缓存至满足某些条件时，但<br />每请求缓存则意味着只将数据缓存为该请求的持续时间。对于每个请求，要经常访问某个<br />特定的代码路径，但是数据却只需提取、应用、修改或更新一次。这听起来有些理论化，<br />那么我们来举一个具体的示例。<br /><br />在社区<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的论坛应用程序中，页面上使用的每个<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件都需要个性化的数据来确<br />定使用什么外观、使用什么样式表，以及其他个性化数据。这些数据中有些可以长期缓存<br />，但是有些数据却只针对每个请求提取一次，然后在执行该请求期间对其重用多次，如要<br />用于控件的外观。<br /><br />为了达到每请求缓存，请使用 ASP.NET HttpContext。对于每个请求，都会创建一个 <br />HttpContext 实例，在该请求期间从 HttpContext.Current 属性的任何位置都可访问该实<br />例。该 HttpContext 类具有一个特殊的 Items 集合属性；添加到此 Items 集合的对象和<br />数据只在该请求持续期间内进行缓存。正如您可以使用缓存来存储经常访问的数据一样，<br />您也可以使用 HttpContext.Items 来存储只基于每个请求使用的数据。它背后的逻辑非常<br />简单：数据在它不存在的时候添加到 HttpContext.Items 集合，在后来的查找中，只是返<br />回 HttpContext.Items 中的数据。<br /><br /><br />技巧 6 — 后台处理<br /><br /><br />通往代码的路径应该尽可能快速，是吗？可能有时您会觉得针对每个请求执行的或者每 <br />n 个请求执行一次的任务所需资源非常多。发送电子邮件或者分析和验证传入数据就是这<br />样的一些例子。<br /><br />剖析 ASP.NET Forums 1.0 并重新构建组成社区<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的内容时，我们发现添加新张贴的<br />代码路径非常慢。每次添加新张贴时，应用程序首先需要确保没有重复的张贴，然后必须<br />使用"坏词"筛选器分析该张贴，分析张贴的字符图释，对张贴添加标记并进行索引，请求<br />时将张贴添加到合适的队列，验证附件，最终张贴之后，立即向所有订阅者发出电子邮件<br />通知。很清楚，这涉及很多操作。<br /><br />经研究发现，大多数时间都花在了索引逻辑和发送电子邮件上。对张贴进行索引是一个非<br />常耗时的操作，人们发现内置的 System.Web.Mail 功能要连接 SMYP <a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>，然后连续发<br />送电子邮件。当某个特定张贴或主题领域的订阅者数量增加时，执行 AddPost 功能所需的<br />时间也越来越长。<br /><br />并不需要针对每个请求都进行电子邮件索引。理想情况下，我们想要将此操作进行批处理<br />，一次索引 25 个张贴或者每五分钟发送一次所有电子邮件。我们决定使用以前用于对数<br />据缓存失效进行原型设计的代码，这个失效是用于最终进入 Visual Studio? 2005 的内容<br />的。<br /><br />System.Threading 命名空间中的 Timer 类非常有用，但是在 .NET Framework 中不是很<br />有名，至少对于 Web 开发人员来说是这样。创建之后，这个 Timer 类将以一个可配置的<br />间隔针对 ThreadPool 中的某个线程调用指定的回调。这就表示，您可以对代码进行设置<br />，使其能够在没有对 ASP.NET 应用程序进行传入请求的情况下得以执行，这是后台处理的<br />理想情况。您还可以在此后台进程中执行如索引或发送电子邮件之类的操作。 <br /><br />但是，这一技术有几个问题。如果应用程序域卸载，该计时器实例将停止触发其事件。另<br />外，因为 CLR 对于每个进程的线程数量具有一个硬性标准，所以可能会出现这样的情形：<br /><a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>负载很重，其中计时器可能没有可在其基础上得以完成的线程，在某种程度上可能<br />会造成延迟。ASP.NET 通过在进程中保留一定数量的可用线程，并且仅使用总线程的一部<br />分用于请求处理，试图将上述情况发生的机会降到最低。但是，如果您具有很多异步操作<br />时，这可能就是一个问题了。 <br /><br />这里没有足够的空间来放置该代码，但是您可以下载一个可以看懂的示例，网址是 <br />www.rob-howard.net。请了解一下 Blackbelt TechEd 2004 演示中的幻灯片和演示。<br /><br /><br />技巧 7 — 页输出缓存和代理<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a><br /><br /><br />ASP.NET 是您的表示层（或者说应该是您的表示层）；它由页、用户控件、<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件（H<br />ttpHandlers 和 HttpModules）以及它们生成的内容组成。如果您具有一个 ASP.NET 页，<br />它会生成输出（HTML、XML、图像或任何其他数据），并且您针对每个请求运行此代码时，<br />它都会生成相同的输出，那么您就拥有一个可用于页输出缓存的绝佳备选内容。 <br /><br />将此行内容添加页的最上端 <br /><br />&lt;%@ Page OutputCache VaryByParams="none" Duration="60" %&gt; <br /><br />就可以高效地为此页生成一次输出，然后对它进行多次重用，时间最长为 60 秒，此时该<br />页将重新执行，输出也将再一次添加到 ASP.NET 缓存。通过使用一些低级程序化 API 也<br />可以完成此行为。对于输出缓存有几个可配置的设置，如刚刚讲到的 VaryByParams 属性<br />。VaryByParams 刚好被请求到，但还允许您指定 HTTP GET 或 HTTP POST 参数来更改缓<br />存项。例如，只需设置 VaryByParam="Report" 即可对 default.aspx?Report=1 或 <br />default.aspx?Report=2 进行输出缓存。通过指定一个以分号分隔的列表，还可以指定其<br />他参数。 <br /><br />很多人都不知道何时使用输出缓存，ASP.NET 页还会生成一些位于缓存<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>下游的 <br />HTTP 标头，如 Microsoft Internet Security and Acceleration Server 或 Akamai 使<br />用的标头。设置了 HTTP 缓存标头之后，可以在这些网络资源上对文档进行缓存，客户端<br />请求也可在不必返回原始<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的情况下得以满足。<br /><br />因此，使用页输出缓存不会使得您的应用程序效率更高，但是它可能会减少<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>上的负<br />载，因为下游缓存技术会缓存文档。当然，这可能只是匿名内容；一旦它成为下游之后，<br />您就再也不会看到这些请求，并且再也无法执行身份验证以阻止对它的访问了。<br /><br /><br />技巧 8 — 运行 IIS 6.0（只要用于内核缓存）<br /><br /><br />如果您未运行 IIS 6.0 (<a href="http://www.chinahtml.com/systems/2/" target="_blank">Windows</a> Server? 2003)，那么您就错过了 Microsoft Web 服务<br />器中的一些很好的性能增强。在技巧 7 中，我讨论了输出缓存。在 IIS 5.0 中，请求是<br />通过 IIS 然后进入 ASP.NET 的。涉及到缓存时，ASP.NET 中的 HttpModule 会接收该请<br />求，并返回缓存中的内容。<br /><br />如果您正在使用 IIS 6.0，就会发现一个很好的小功能，称为内核缓存，它不需要对 <br />ASP.NET 进行任何代码更改。当请求由 ASP.NET 进行输出缓存时，IIS 内核缓存会接收缓<br />存数据的一个副本。当请求来自网络驱动程序时，内核级别的驱动程序（无上下文切换到<br />用户模式）就会接收该请求，如果经过了缓存，则会将缓存的数据刷新到响应，然后完成<br />执行。这就表示，当您将内核模式缓存与 IIS 和 ASP.NET 输出缓存一起使用时，就会看<br />到令人不敢相信的性能结果。在 ASP.NET 的 Visual Studio 2005 开发过程中，我一度是<br />负责 ASP.NET 性能的程序经理。开发人员完成具体工作，但是我要看到每天进行的所有报<br />告。内核模式缓存结果总是最有意思的。最常见的特征是网络充满了请求/响应，而 IIS <br />运行时的 CPU 使用率只有大约 5%。这太令人震惊了！当然使用 IIS 6.0 还有一些其他原<br />因，但是内核模式缓存是其中最明显的一个。<br /><br /><br />技巧 9 — 使用 Gzip 压缩<br /><br /><br />虽然使用 gzip 并不一定是<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>性能技巧（因为您可能会看到 CPU 使用率的提高），但<br />是使用 gzip 压缩可以减少<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>发送的字节数量。这就使人们觉得页速度加快了，并且<br />还减少了带宽的用量。根据所发送数据、可以压缩的程度以及客户端浏览器是否支持（IIS<br />只会向支持 gzip 压缩的客户端发送经过 gzip 压缩的内容，如 Internet Explorer <br />6.0 和 Firefox），您的<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>每秒可以服务于更多的请求。实际上，几乎每当您减少所<br />返回数据的数量时，都会增加每秒请求数。 <br /><br />Gzip 压缩已经内置到 IIS 6.0 中，并且其性能比 IIS 5.0 中使用的 gzip 压缩要好的多<br />，这是好消息。但不幸的是，当尝试在 IIS 6.0 中打开 gzip 压缩时，您可能无法在 <br />IIS 的属性对话中找到该设置。IIS 小组在该<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>中置入了卓越的 gzip 功能，但是忘<br />了包括一个用于启用该功能的管理 UI。要启用 gzip 压缩，您必须深入到 IIS 6.0 的 <br />XML 配置设置内部（这样不会引起心脏虚弱）。顺便提一句，这归功于 OrcsWeb 的 <br />Scott Forsyth，他帮助我提出了在 OrcsWeb 上宿主的 www.asp.net <a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的这个问题。<br /><br /><br />本文就不讲述步骤了，请阅读 Brad Wilson 的文章，网址是 IIS6 Compression。还有一<br />篇有关为 ASPX 启用压缩的知识库文章，网址是 Enable ASPX Compression in IIS。但是<br />您应该注意，由于一些实施细节，IIS 6.0 中不能同时存在动态压缩和内核缓存。<br /><br /><br />技巧 10 — <a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件视图状态<br /><br /><br />视图状态是一个有趣的名称，用于表示在所生成页的隐藏输出字段中存储一些状态数据的 <br />ASP.NET。当该页张贴回<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>时，<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>可以分析、验证、并将此视图状态数据应用回该<br />页的控件树。视图状态是一个非常强大的功能，因为它允许状态与客户端一起保持，并且<br />它不需要 cookie 或<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>内存即可保存此状态。很多 ASP.NET <a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件都使用视图状<br />态来保持在与页元素进行交互期间创建的设置，例如保存对数据进行分页时显示的当前页<br />。 <br /><br />然而使用视图状态也有一些缺点。首先，服务或请求页时，它都会增加页的总负载。对张<br />贴回<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>的视图状态数据进行序列化或取消序列化时，也会发生额外的开销。最后，视<br />图状态会增加<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>上的内存分配。<br /><br />几个<a href="http://www.chinahtml.com/systems/" target="_blank">服务器</a>控件有着过度使用视图状态的趋势，即使在并不需要的情况下也要使用它，其<br />中最著名的是 DataGrid。ViewState 属性的默认行为是启用，但是如果您不需要，则