<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post//</link>
<title><![CDATA[ASP技巧集锦（官方权威版）-5]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Web开发]]></category>
<pubDate>Sun, 24 Jun 2007 17:48:37 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//</guid> 
<description>
<![CDATA[ 
	技巧 13：避免重新定义数组<br/>　　尽量避免 Redim 数组。从关心性能的角度来说，如果计算机受物理内存的限制，最好一开始将数组的维数设置为最差方案 - 而不要将维数设置为最佳方案，再根据需要重新定义维数。这并不意味着明知道不需要那么多而就是应该分配太多的内存。<br/>　　下面代码展示了您没有必要地使用了Dim 和 Redim 来解决。<br/>　　&lt;% <br/>　　Dim MyArray()<br/>　　Redim MyArray(2)<br/>　　MyArray(0) = &quot;hello&quot;<br/>　　MyArray(1) = &quot;good-bye&quot;<br/>　　MyArray(2) = &quot;farewell&quot;<br/>　　...<br/>　　&#039; 一些别的代码中，这里您不需要更多的空间，然后 ...<br/>　　Redim Preserve MyArray(5)<br/>　　MyArray(3) = &quot;more stuff&quot;<br/>　　MyArray(4) = &quot;even more stuff&quot;<br/>　　MyArray(5) = &quot;yet more stuff&quot;<br/>　　%&gt;<br/>　　更好的办法是只须一开始 Dim 数组为正确的大小（本例中为 5），而不是 Redim 数组，再加大数组。这可能会浪费一点儿内存（如果没有用尽所有元素），但是获得的是速度。<br/>　　<br/>　　技巧 14：使用响应缓冲<br/>　　您可以通过打开“响应缓冲区”来缓冲值得输出的整个页。这将写入浏览器的数据量降为最小，从而提高总体性能。每次写入都会有大量开销（包括 IIS 和通过电缆发送的数据量），因此写入的越少越好。TCP/IP 的工作效率，在发送少量大的数据块时明显高于发送大量小的数据块时，原因在于它的低速启动和 Nagling 算法（用于最小化网络阻塞）。<br/>　　打开响应缓冲有两种方法。第一种，可以使用“Internet 服务管理器”为整个应用程序打开响应缓冲。这是推荐的方法，在 IIS 4.0 和 IIS 5.0 中，在默认情况下，为新的 ASP 应用程序打开响应缓冲。第二种，逐页将下列代码行放在 ASP 页的开头，从而启用响应缓冲：<br/>　　&lt;% Response.Buffer = True %&gt;<br/>　　该行代码必须在任何响应数据写入浏览器之前执行（也就是说，在任何 HTML 出现在 ASP 脚本中之前和任何 Cookies 被使用 Response.Cookies 集合设置之前）。通常，最好是为整个应用程序打开响应缓冲。这允许省略上面每页中的代码行。<br/>　　Response.Flush <br/>　　响应缓冲的通病是用户感觉 ASP 页响应迟钝（尽管总体响应时间改善了），因为他们需要等到整个页生成后才能看见该页。对于长时间运行的页面，可以通过设置 Response.Buffer = False 关闭响应缓冲。但是，更好的策略是使用 Response.Flush 方法。该方法刷新由 ASP 绘入浏览器的所有 HTML。例如，绘制了具有 1,000 行的表的 100 行后，ASP 可以调用 Response.Flush 强制将结果绘制到浏览器；这允许用户在其余的行准备好之前先看到头 100 行。该技术给了您两个举世无双的好东西 - 响应缓冲与浏览器中数据的逐步显示的组合。<br/>　　（注意，在上面 1,000 行表的示例中，许多浏览器，在看到 &lt;/table&gt; 结束标记之前不会开始绘制表。请检查目标浏览器的支持性。要解决该问题，请将表分割为具有较少行的多个表，然后在每个表后面调用 Response.Flush。新版本的 Internet Explorer 将在表完全下载之前绘制表，特别是如果指定表的列宽则绘制速度更快；这避免强制 Internet Explorer 通过度量每个单元格的内容来计算列宽。）<br/>　　响应缓冲的另一个通病是在生成大型页时将使用服务器的大量内存。对于该问题，除了要求生成大型页的技巧外，还可以通过巧妙地使用 Response.Flush 来解决。<br/>　　<br/>　　技巧 15：批处理内嵌脚本和 Response.Write 语句 <br/>　　VBScript 语法 &lt;% = expression %&gt; 将“表达式”的值写入 ASP 输出流。如果响应缓冲没有打开，则这些语句的每一句都会导致通过网络，以许多小型包的形式，向浏览器写入数据。这是非常慢的。另外，解释少量脚本和 HTML，将导致在脚本引擎和 HTML 之间切换，也降低了性能。因此，请使用下面技巧：用对 Response.Write 的一个调用，替换内嵌的密集组合表达式。例如，在下面范例中，每行每字段有一个对响应流的写入，每行都有许多 VBScript 和 HTML 之间的切换：<br/>　　&lt;table&gt;<br/>　　&lt;% For Each fld in rs.Fields %&gt;<br/>　　 &lt;th&gt;&lt;% = fld.Name %&gt;&lt;/th&gt;<br/>　　&lt;%<br/>　　Next <br/>　　While Not rs.EOF<br/>　　%&gt;<br/>　　 &lt;tr&gt;<br/>　　 &lt;% For Each fld in rs.Fields %&gt;<br/>　　 &lt;td&gt;&lt;% = fld.Value %&gt;&lt;/td&gt;<br/>　　 &lt;% Next <br/>　　 &lt;/tr&gt;<br/>　　 &lt;% rs.MoveNext <br/>　　Wend %&gt;<br/>　　&lt;/table&gt;<br/>　　下面是更有效的代码，每行中有一个对响应流的写入。所有代码均包含在一个 VBScript 块内：<br/>　　&lt;table&gt;<br/>　　&lt;%<br/>　　 For each fld in rs.Fields<br/>　　 Response.Write (&quot;&lt;th&gt;&quot; &amp; fld.Name &amp; &quot;&lt;/th&gt;&quot; &amp; vbCrLf)<br/>　　 Next<br/>　　 While Not rs.EOF<br/>　　 Response.Write (&quot;&lt;tr&gt;&quot;)<br/>　　 For Each fld in rs.Fields %&gt;<br/>　　 Response.Write(&quot;&lt;td&gt;&quot; &amp; fld.Value &amp; &quot;&lt;/td&gt;&quot; &amp; vbCrLf)<br/>　　 Next<br/>　　 Response.Write &quot;&lt;/tr&gt;&quot;<br/>　　 Wend<br/>　　%&gt;<br/>　　&lt;/table&gt;<br/>　　当响应缓冲被禁用时，本技巧的作用更大。最好启用响应缓冲，然后观察批处理 Response.Write 是否对性能有帮助。<br/>　　（在这一特例中，构建表的主体的嵌套循环 (While Not rs.EOF...) 可以被精心构造的、对 GetString 的调用所替代。） 
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post//#blogcomment</link>
<title><![CDATA[[评论] ASP技巧集锦（官方权威版）-5]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>