首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Response.Write对<%= %>

Response.Write对<%= %>
EN

Stack Overflow用户
提问于 2008-09-30 01:51:12
回答 14查看 76.6K关注 0票数 28

请记住,这是针对经典asp

更好的是,包含在Response.Write语句中的所有HTML或者通过<%= %>将变量插入到HTML中。

例如

代码语言:javascript
复制
Response.Write "<table>" & vbCrlf
Response.Write "<tr>" &vbCrLf
Response.Write "<td class=""someClass"">" & someVariable & "</td>" & vbCrLf
Response.Write "</tr>" & vbCrLf
Response.Write "</table>" & vbCrLf

VS

代码语言:javascript
复制
<table>
  <tr>
     <td class="someClass"><%= someVariable %></td>
  </tr>
</table>

我主要是从性能的角度来问,当有多个变量要插入时,在哪个方面对服务器的影响最小?

如果没有技术上的差异,那么支持这一种的理由是什么呢?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2008-09-30 02:59:13

首先,您应该考虑的最重要的因素是易于维护。你可以用金钱和时间买一个服务器场,否则你就不得不破译一个混乱的网站来维护它。

无论如何,这都不重要。最后,ASP所做的只是执行一个脚本!ASP解析器获取页面,并将<%= expression %>转换为直接脚本调用,每个相邻的HTML块都成为对Response.Write的一个巨大调用。除非页面在磁盘上发生更改,否则将缓存和重用生成的脚本,这将导致重新计算缓存的脚本。

现在,过多地使用<%= %>导致了现代版本的“意大利面代码”:可怕的“标签汤”。你将无法使逻辑的正面或反面。另一方面,过多地使用Response.Write意味着在页面呈现之前您将永远无法看到它。在适当的时候使用<%= %>,以充分利用这两个世界。

我的第一个原则是注意“可变文本”与“静态文本”的比例。

如果您只有几个地方可以替换可变文本,那么<%= %>语法非常紧凑和可读性很强。然而,随着<%= %>开始积累,它们掩盖了越来越多的HTML,同时也掩盖了越来越多的您的逻辑。通常情况下,一旦开始使用关于循环,就需要停止并切换到Response.Write`。

没有太多其他硬性的规则。您需要决定您的特定页面(或页面中的哪个部分)哪个更重要,或者更难理解,或者更容易被打破:您的逻辑还是HTML?通常是一种或另一种(我见过数百例这两种情况)。

如果您的逻辑更关键,那么您应该更加重视Response.Write;它将使逻辑更加突出。如果您的HTML更关键,请选择<%= %>,这将使页面结构更加可见。

有时,我不得不同时编写这两个版本并将它们进行比较,以决定哪个版本更易读;这是最后的手段,但在代码新鲜的时候这样做,三个月后,当您必须进行更改时,您会很高兴的。

票数 44
EN

Stack Overflow用户

发布于 2008-09-30 01:53:02

从个人偏好的角度来看,我更喜欢<%= %>方法,因为我觉得它提供了更好的将变量内容与静态内容分离的方法。

票数 13
EN

Stack Overflow用户

发布于 2008-09-30 07:46:28

这里的许多答案表明,这两种方法产生的输出是相同的,选择的是编码风格和性能。它似乎相信,<% %>之外的静态内容变成了单个Response.Write。

但是,更准确的说法是,<% %>之外的代码是与BinaryWrite一起发送的。

Response.Write接受Unicode字符串并将其编码到当前的Response.CodePage中,然后将其放入缓冲区。对ASP文件中的静态内容不进行这种编码。<% %>之外的字符按字节逐字转储到缓冲区中。

因此,在Response.CodePage与用于保存ASP文件的CodePage不同的地方,这两种方法的结果可能有所不同。

例如,假设我将此内容保存在标准的1252代码页中:-

代码语言:javascript
复制
<%
     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“。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/151448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档