4

我在经典 ASP 中编辑一些遗留代码,这些代码使用大量如下代码:

pf "<div class=""span-6 last"" style=""margin-top:4px;"">"
pf "<div class=""clean-lightblue-left"" style=""margin-top:4px;"">"
pf "<span style=""float: left; margin-right: 0.3em;"" class=""ui-icon ui-icon-print""></span><a href=""#report"" name=""report"" id=""topic_report_download"">Topic Progress : <b>Download Report</b></a>"
pf "</div></div>"

response.write在此示例中,pf 是一个实用函数,它与换行符 基本相同。

我宁愿做这样的事情:

...asp code
%> 
Regular HTML code here
<%
asp code...

我是asp的新手,但我听说过上下文切换,而且它可能很昂贵。这两个选项哪个更昂贵?

4

3 回答 3

1

我认为平面 HTML 很好,因为当您通过 response.write 渲染 HTML 时,它会执行两个语句,比如一个执行 response.write,然后渲染 HTML。但是当我们编写 HTML 代码时,它会直接在浏览器中呈现。

于 2011-10-20T08:34:52.290 回答
1

首先让我总结一下你的具体例子。一系列Response.Write仅携带纯字符串文字的调用将比将完整的 HTML 作为脚本代码之外的内容包含起来要慢。

由于某些文档(或者可能是历史)中的一些不幸的措辞,这种“上下文切换”的想法有点谬误。我们倾向于将 ASP 文件视为 HTML,其中包含一些使用<% script here %>. 事实上,ASP 文件是一个脚本文件,其中包含一些 HTML。如果您认为它是使用分隔的 html 内容(在文件的开头和结尾处%> content here <%带有隐含的>%和),则更容易推断出它的进展情况。<%

当文件被解析为 p 代码时,会创建一个完全可由脚本引擎处理的文件(没有“上下文切换”)。实际上%> .... <%变成了 Response.Write 的一种特殊形式,它将 之间的内容发送%><%到缓冲区。不同之处在于字节逐字出现在原始 ASP 文件中,而标准Response.Write接受来自 VBScript 的 Unicode 字符串,然后必须编码为Response.CodePage一组字节以放入缓冲区。

因此,“上下文切换”实际上只是脚本必须写入缓冲区的次数。在你的 HTML 中有很多<% = someExpression %>会创建大量的缓冲区写入。

这些天来,除非您生成大量 HTML(Doozer 提到的文章已有 10 年历史),否则您将打开缓冲。许多写入的成本非常低。减少它们会有所帮助,但必须记住 VBScript 处理字符串接触的方式也不是没有问题。

于 2011-10-21T12:23:13.627 回答
0

您应该阅读这些提高性能的 ASP 技巧,但具体请看#16

此外,散布少量脚本和 HTML 会导致脚本引擎和 HTML 之间切换,从而降低性能

至少。确保 Response.Buffer 设置为 true。上述之间的性能差异可能很小,但是,如果我了解您想要更改它的方式,我认为您想要更改它的方式会更好。然而,如果你想改变它,最终是你的决定。我会看看你自己是否应该更改代码的可读性和可维护性。

于 2011-10-19T15:34:33.673 回答