我在经典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>"
在此示例中,pf是一个实用函数,它与带有行返回的response.write
基本相同。
我宁愿做这样的事情:
...asp code
%>
Regular HTML code here
<%
asp code...
我是asp的新手,但我听说过上下文切换,而且成本很高。这两种选择中哪一种更昂贵?
答案 0 :(得分:1)
我认为平面HTML很好,因为当你通过response.write呈现HTML时,它会执行两个语句,比如执行response.write,然后呈现HTML。但是当我们编写HTML代码时,它会直接在浏览器中呈现。
答案 1 :(得分:1)
首先让我以你的具体例子为底线。一系列只携带普通字符串文字的Response.Write
调用比将完整的HTML包含在脚本代码之外的内容要慢。
这种“上下文切换”的概念由于某些文档(或者可能是历史)中的一些不幸的措辞而有点谬误。我们倾向于将ASP文件视为HTML,并使用<% script here %>
在其中插入一些脚本。事实上,ASP文件是一个脚本文件,其中包含一些HTML。如果您将其视为使用%> content here <%
(在文件的开头和结尾隐含>%
和<%
分隔html内容),则更容易推断它的结果。
当文件被解析为p代码时,会创建一个完全由脚本引擎处理的文件(没有“上下文切换”)。实际上%> .... <%
成为Response.Write的一种特殊形式,它将%><%
之间的内容发送到缓冲区。不同之处在于字节逐字逐句显示在原始ASP文件中,而标准Response.Write
接受来自VBScript的Unicode字符串,然后必须编码为Response.CodePage
一组字节以放入缓冲液中。
因此,“上下文切换”实际上只是脚本必须写入缓冲区的次数。在HTML中有许多<% = someExpression %>
会产生大量的缓冲区写入。
这些天,除非你生成一个疯狂的大量HTML(文章Doozer提到的是10岁)你将打开缓冲。许多写入的成本非常低。减少它们可能有所帮助,但必须记住VBScript处理字符串连接的方式也不是没有问题。
答案 2 :(得分:0)
您应该阅读这些ASP Tips to Improve Performance,但请特别注意#16
此外,散布少量脚本和HTML会导致脚本引擎和HTML之间的切换,从而降低性能
至少。确保Response.Buffer设置为true。上述之间的性能差异可能很小,但是,如果我了解您想要如何更改它,我认为您想要更改它的方式会更好。但是,如果你想改变它,最终你决定做出决定。我会考虑代码对你自己是否应该改变它的可读性和可维护性。