分享
 
 
 

ASP技巧集锦(官方权威版)-5

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

技巧 13:避免重新定义数组

尽量避免 Redim 数组。从关心性能的角度来说,如果计算机受物理内存的限制,最好一开始将数组的维数设置为最差方案 - 而不要将维数设置为最佳方案,再根据需要重新定义维数。这并不意味着明知道不需要那么多而就是应该分配太多的内存。

下面代码展示了您没有必要地使用了Dim 和 Redim 来解决。

<%

Dim MyArray()

Redim MyArray(2)

MyArray(0) = "hello"

MyArray(1) = "good-bye"

MyArray(2) = "farewell"

...

' 一些别的代码中,这里您不需要更多的空间,然后 ...

Redim Preserve MyArray(5)

MyArray(3) = "more stuff"

MyArray(4) = "even more stuff"

MyArray(5) = "yet more stuff"

%>

更好的办法是只须一开始 Dim 数组为正确的大小(本例中为 5),而不是 Redim 数组,再加大数组。这可能会浪费一点儿内存(如果没有用尽所有元素),但是获得的是速度。

技巧 14:使用响应缓冲

您可以通过打开“响应缓冲区”来缓冲值得输出的整个页。这将写入浏览器的数据量降为最小,从而提高总体性能。每次写入都会有大量开销(包括 IIS 和通过电缆发送的数据量),因此写入的越少越好。TCP/IP 的工作效率,在发送少量大的数据块时明显高于发送大量小的数据块时,原因在于它的低速启动和 Nagling 算法(用于最小化网络阻塞)。

打开响应缓冲有两种方法。第一种,可以使用“Internet 服务管理器”为整个应用程序打开响应缓冲。这是推荐的方法,在 IIS 4.0 和 IIS 5.0 中,在默认情况下,为新的 ASP 应用程序打开响应缓冲。第二种,逐页将下列代码行放在 ASP 页的开头,从而启用响应缓冲:

<% Response.Buffer = True %>

该行代码必须在任何响应数据写入浏览器之前执行(也就是说,在任何 HTML 出现在 ASP 脚本中之前和任何 Cookies 被使用 Response.Cookies 集合设置之前)。通常,最好是为整个应用程序打开响应缓冲。这允许省略上面每页中的代码行。

Response.Flush

响应缓冲的通病是用户感觉 ASP 页响应迟钝(尽管总体响应时间改善了),因为他们需要等到整个页生成后才能看见该页。对于长时间运行的页面,可以通过设置 Response.Buffer = False 关闭响应缓冲。但是,更好的策略是使用 Response.Flush 方法。该方法刷新由 ASP 绘入浏览器的所有 HTML。例如,绘制了具有 1,000 行的表的 100 行后,ASP 可以调用 Response.Flush 强制将结果绘制到浏览器;这允许用户在其余的行准备好之前先看到头 100 行。该技术给了您两个举世无双的好东西 - 响应缓冲与浏览器中数据的逐步显示的组合。

(注意,在上面 1,000 行表的示例中,许多浏览器,在看到 </table> 结束标记之前不会开始绘制表。请检查目标浏览器的支持性。要解决该问题,请将表分割为具有较少行的多个表,然后在每个表后面调用 Response.Flush。新版本的 Internet Explorer 将在表完全下载之前绘制表,特别是如果指定表的列宽则绘制速度更快;这避免强制 Internet Explorer 通过度量每个单元格的内容来计算列宽。)

响应缓冲的另一个通病是在生成大型页时将使用服务器的大量内存。对于该问题,除了要求生成大型页的技巧外,还可以通过巧妙地使用 Response.Flush 来解决。

技巧 15:批处理内嵌脚本和 Response.Write 语句

VBScript 语法 <% = expression %> 将“表达式”的值写入 ASP 输出流。如果响应缓冲没有打开,则这些语句的每一句都会导致通过网络,以许多小型包的形式,向浏览器写入数据。这是非常慢的。另外,解释少量脚本和 HTML,将导致在脚本引擎和 HTML 之间切换,也降低了性能。因此,请使用下面技巧:用对 Response.Write 的一个调用,替换内嵌的密集组合表达式。例如,在下面范例中,每行每字段有一个对响应流的写入,每行都有许多 VBScript 和 HTML 之间的切换:

<table>

<% For Each fld in rs.Fields %>

<th><% = fld.Name %></th>

<%

Next

While Not rs.EOF

%>

<tr>

<% For Each fld in rs.Fields %>

<td><% = fld.Value %></td>

<% Next

</tr>

<% rs.MoveNext

Wend %>

</table>

下面是更有效的代码,每行中有一个对响应流的写入。所有代码均包含在一个 VBScript 块内:

<table>

<%

For each fld in rs.Fields

Response.Write ("<th>" & fld.Name & "</th>" & vbCrLf)

Next

While Not rs.EOF

Response.Write ("<tr>")

For Each fld in rs.Fields %>

Response.Write("<td>" & fld.Value & "</td>" & vbCrLf)

Next

Response.Write "</tr>"

Wend

%>

</table>

当响应缓冲被禁用时,本技巧的作用更大。最好启用响应缓冲,然后观察批处理 Response.Write 是否对性能有帮助。

(在这一特例中,构建表的主体的嵌套循环 (While Not rs.EOF...) 可以被精心构造的、对 GetString 的调用所替代。)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有