请记住,这是针对经典asp的
更好的是,包含在Response.Write语句中的所有HTML或者通过<%= %>将变量插入到HTML中。
例如
Response.Write "<table>" & vbCrlf
Response.Write "<tr>" &vbCrLf
Response.Write "<td class=""someClass"">" & someVariable & "</td>" & vbCrLf
Response.Write "</tr>" & vbCrLf
Response.Write "</table>" & vbCrLfVS
<table>
<tr>
<td class="someClass"><%= someVariable %></td>
</tr>
</table>我主要是从性能的角度来问,当有多个变量要插入时,在哪个方面对服务器的影响最小?
如果没有技术上的差异,那么支持这一种的理由是什么呢?
发布于 2008-09-30 02:59:13
首先,您应该考虑的最重要的因素是易于维护。你可以用金钱和时间买一个服务器场,否则你就不得不破译一个混乱的网站来维护它。
无论如何,这都不重要。最后,ASP所做的只是执行一个脚本!ASP解析器获取页面,并将<%= expression %>转换为直接脚本调用,每个相邻的HTML块都成为对Response.Write的一个巨大调用。除非页面在磁盘上发生更改,否则将缓存和重用生成的脚本,这将导致重新计算缓存的脚本。
现在,过多地使用<%= %>导致了现代版本的“意大利面代码”:可怕的“标签汤”。你将无法使逻辑的正面或反面。另一方面,过多地使用Response.Write意味着在页面呈现之前您将永远无法看到它。在适当的时候使用<%= %>,以充分利用这两个世界。
我的第一个原则是注意“可变文本”与“静态文本”的比例。
如果您只有几个地方可以替换可变文本,那么<%= %>语法非常紧凑和可读性很强。然而,随着<%= %>开始积累,它们掩盖了越来越多的HTML,同时也掩盖了越来越多的您的逻辑。通常情况下,一旦开始使用关于循环,就需要停止并切换到Response.Write`。
没有太多其他硬性的规则。您需要决定您的特定页面(或页面中的哪个部分)哪个更重要,或者更难理解,或者更容易被打破:您的逻辑还是HTML?通常是一种或另一种(我见过数百例这两种情况)。
如果您的逻辑更关键,那么您应该更加重视Response.Write;它将使逻辑更加突出。如果您的HTML更关键,请选择<%= %>,这将使页面结构更加可见。
有时,我不得不同时编写这两个版本并将它们进行比较,以决定哪个版本更易读;这是最后的手段,但在代码新鲜的时候这样做,三个月后,当您必须进行更改时,您会很高兴的。
发布于 2008-09-30 01:53:02
从个人偏好的角度来看,我更喜欢<%= %>方法,因为我觉得它提供了更好的将变量内容与静态内容分离的方法。
发布于 2008-09-30 07:46:28
这里的许多答案表明,这两种方法产生的输出是相同的,选择的是编码风格和性能。它似乎相信,<% %>之外的静态内容变成了单个Response.Write。
但是,更准确的说法是,<% %>之外的代码是与BinaryWrite一起发送的。
Response.Write接受Unicode字符串并将其编码到当前的Response.CodePage中,然后将其放入缓冲区。对ASP文件中的静态内容不进行这种编码。<% %>之外的字符按字节逐字转储到缓冲区中。
因此,在Response.CodePage与用于保存ASP文件的CodePage不同的地方,这两种方法的结果可能有所不同。
例如,假设我将此内容保存在标准的1252代码页中:-
<%
Response.CodePage = 65001
Response.CharSet = "UTF-8"
%>
<p> The British £</p>
<%Response.Write("<p> The British £</p>")%>第一段被混淆了,因为to不会使用UTF-8编码发送,第二段是可以的,因为提供给UTF-8的Unicode字符串是编码的。
因此,从性能的角度来看,最好使用静态内容,因为它不需要编码,但是如果保存的代码页与输出代码页不同,则需要小心。出于这个原因,我宁愿保存为UTF-8,包括<%@ codepage=65001和设置Response.Charset = "UTF-8“。
https://stackoverflow.com/questions/151448
复制相似问题