| 域名空间 下载中心 社区论坛 信息公告 MY小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | Q Q 专栏 | 建站经验 | 在线工具 | 站长Club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
微软建议的ASP性能优化28条守则(7)http://www.iyit.net 日期:2006-6-7 11:11:50 来源: 点击: |
许多人在循环语句中建立一个字符串,如下所示: s = ?<table>? & vbCrLf For Each fld in rs.Fields s = s & ? <th>? & fld.Name & ?</th> ? Next While Not rs.EOF s = s & vbCrLf & ? <tr>? For Each fld in rs.Fields s = s & ? <td>? & fld.Value & ?</td> ? Next s = s & ? </tr>? rs.MoveNext Wend s = s & vbCrLf & ?</table>? & vbCrLf Response.Write s 采用这种方法会出现一些问题。第一个问题是反复串联字符串需要花两次方的时间,更通俗地说,运行这种循环语句所花的时间与记录数乘以字段数所得值的平方成正比。举一个更简单的例子,就可以更清楚地说明这一问题。 s = ?? For i = Asc(?A?) to Asc(?Z?) s = s & Chr(i) Next 在第一次迭代中,您获得了一个字符的字符串 ?A?。在第二次迭代中,VBScript 必须重新分配字符串并将两个字符 (?AB?) 复制到 s 中。在第三次迭代中,它还必须再次重新分配 s 并将三个字符复制到 s 中。在 N 次(第 26 次)迭代中,它必须重新分配并将 N 个字符复制到 s 中。总共就是 1+2+3+...+N,即 N*(N+1)/2 次复制。 在上面的记录集举例中,如果有 100 个记录和 5 个字段,内循环将执行 100*5 = 500 次,所有的复制和重新分配所花的时间与 500*500 = 250,000 成正比。这对于中等大小的记录集来说复制操作太多了。 在本例中,代码可以用 Response.Write() 或内嵌脚本 (<% = fld.Value %>) 替代字符串串联来改进。如果启用了响应缓冲的话(应该的),这样做就会更快,因为 Response.Write 只将数据附加到响应缓冲的末尾。并不涉及重新分配,因此效率很高。 在将 ADO 记录集转换为 HTML 表的特定情况下,应考虑使用 GetRows 或 GetString。 如果在 JScript 中串联字符串,特别建议使用 += 运算符,即,使用 s += ?某字符串?,而不使用 s = s + ?某字符串?。 技巧 21:启用浏览器和代理缓存 在默认情况下,ASP 禁止在浏览器和代理中进行缓存。这是有意义的,因为就实质而言 ASP 页面是动态的,上面有随时间不断变化的潜在信息。如果页面不要求在每个视图上进行刷新,您应启用浏览器和代理缓存。这可使浏览器和代理在一定的时间内使用页面的“缓存”副本,您可以控制时间的长短。缓存可以大大减轻服务器上的负载,缩短用户的等待时间。 哪一种动态页面可作为要缓存的页面呢?下面举一些例子: 天气预报页面,在此页面上,每隔 5 分钟更新一次天气预报。 列出新闻条目或新闻稿的主页,它一天更新两次。 共同基金业绩列表,在此列表中,基本统计信息每隔几小时更新一次。 注意,在使用浏览器或代理缓存的情况下,Web 服务器上记录的访问次数减少了。如果您想准确地测量所有页面视图或张帖公布,您就不希望使用浏览器和代理缓存。 浏览器缓存由 HTTP“过期”报头控制,该报头由 Web 服务器发送给浏览器。ASP 提供两个简单的机制发送此报头。要设置页面使其过多少分钟后到期,则应设置 Response.Expires 属性。下面的例子告诉浏览器内容在 10 分钟内过期: <% Response.Expires = 10 %> 若将 Response.Expires 设置为负数或 0,则禁用缓存。一定要使用大的负数,如 -1000(略多于一天),以避免服务器和浏览器时钟之间的不匹配。第二个属性 Response.ExpiresAbsolute 将使您设置内容过期的具体时间: <% Response.ExpiresAbsolute = #May 31,2001 13:30:15# %> 您可以不使用 Response 对象设置过期时间,而将 <META> 标记写进 HTML,通常写在 HTML 文件的 <HEAD> 部分。一些浏览器将遵照此指令,而代理则不然。 <META HTTP-EQUIV=?Expires? VALUE=?May 31,2001 13:30:15?> 最后,您可以使用 Response.CacheControl 属性,指示其内容是否可以让 HTTP 代理缓存。若将此属性设置为“Public”,代理就可以缓存此内容。 <% Response.CacheControl = ?Public? %> 在默认情况下,此属性被设置为“Private”。注意,对于显示某用户特定数据的页面,不应启用代理缓存,因为代理可能给用户提供属于其他用户的页面。 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:微软建议的ASP性能优化28条守则(8) 下一篇:微软建议的ASP性能优化28条守则(6) 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||