如何最小化ASP.NET页面的重量?

如何最小化ASP.NET页面的重量?,asp.net,optimization,seo,Asp.net,Optimization,Seo,我严重依赖web门户中的嵌套母版页,这会导致ASP.NET为其创建的控件生成巨大的ID标记,例如: “ctl00\u ctl00\u主体\u ctl00\u LBL说明” 对于我创建的LBL描述标签 有没有办法减少这种混乱 除了删除viewstate之外,还有什么其他减轻页面重量的技术(抱歉太笼统了?只要可能,请使用HTML控件。HTML控件。它们更轻,因为除非您指定runat=“server”属性,否则没有服务器端对象。我不知道如何删除客户端id膨胀,但一些使页面更小的一般提示如下: 缩小并

我严重依赖web门户中的嵌套母版页,这会导致ASP.NET为其创建的控件生成巨大的ID标记,例如: “ctl00\u ctl00\u主体\u ctl00\u LBL说明”

对于我创建的LBL描述标签

有没有办法减少这种混乱


除了删除viewstate之外,还有什么其他减轻页面重量的技术(抱歉太笼统了?

只要可能,请使用HTML控件。HTML控件。它们更轻,因为除非您指定
runat=“server”
属性,否则没有服务器端对象。

我不知道如何删除客户端id膨胀,但一些使页面更小的一般提示如下:

  • 缩小并将任何.js/.css合并到一个文件中
  • 在页面顶部包含css,在底部包含js(这并不会使页面变小,但UI的加载速度会更快)

我想,如果你不顾一切地想在不重新调整页面的情况下完成这项工作(而其他明智的想法都不起作用),你可以这样做:

编写一个http模块,当页面发送到客户端时,该模块会动态解析和提取具有较短、可识别的唯一ID的ID,并将它们存储在应用程序范围哈希表中。然后,在返回行程中,对输入数据执行反向步骤

至少,我会这么做。我不确定它与某些html和/或javascript结构配合得有多好,但我认为这是可以做到的。 我怀疑这将是一件痛苦的事,尤其是如果较短的唯一id与任何合法的非id值发生冲突

编辑:刚刚记起来。您还需要处理ViewState。。。(这需要解码、修复和重新编码。似乎有很多麻烦:)但是,如果您要遇到麻烦,您可以通过重写load/save viewstate方法更好地压缩viewstate。。。
几年前,我用这种方法将一些巨大的页面(200K的html)削减到大约30K。事实上,在ViewState上使用自定义压缩通常足以大大减小页面大小。

在使用标签的情况下,请确保确实需要使用标签(该标签在
标记中生成文本。您可以使用
文字

在不需要的控件(或整个页面/网站)上设置
EnableViewState=“False”

如果您试图更改ASP.NET生成的模糊ID,那么您在这方面做不了什么。

  • 看着它,照它说的做(我从这里开始)
  • 关闭视图状态
  • 用于减小JavaScript文件的大小
  • (死链接)
  • 使用标准gzip/放气压缩
  • 使用将为您提供更小的ID

使用html/css设置页面样式,避免表格布局,在创建标签时指定id,越短越好。

如您所述,关闭viewstate是很好的。此外,我注意到ASP.NET树控件生成大量html(如果您有相当多的节点)。我最终编写了自己的树控件,生成标准树控件HTML的1/4。因此,您可以查找这样的控件,它们特别糟糕,然后编写自己的控件。

  • 启用IIS静态/动态压缩
  • 对控件和页面使用缓存
  • Ajax内容加载—当您希望以比优先级较低的内容更快的速度查看主要内容时,它会有所帮助

Terrapin有一些很好的建议,但它们非常理想化。如果您正在寻找更适用于当前情况的解决方案,请查看控制适配器

适配器将为您完成大量工作,将ASP.NET控件从丑陋的长id命名表转换为更简洁的div,并使用更短的名称

我在过去使用过它们,它们真的可以带来巨大的不同。除此之外,关闭任何不需要它的控件的viewstate。遵循正确的CSS/HTML,这将带来另一个显著的不同


祝你好运!

要最小化ASP.NET页面的重量,还可以覆盖(页面类的)PageStatePersister属性使用SessionPageStatePersister。请参见示例。这样,Viewstate将保留在服务器端的会话对象中,从而减少客户端html页面的大小。

特别是在中继器、ListView和GridView中,请将控件命名为简短的名称

从上下文(产品列表)可以看出这一点

如果中继器中只有一个超链接,请将其称为hl。无需将这些控件称为HyperLinkProduct

<asp:Repeater id="rptProducts" runat="server">
    <ItemTemplate>
       <asp:HyperLink id="hl" runat="server" NavigateUrl='<%# Eval("URL") %>'>
            <%# Eval("Name") %>
       </asp:HyperLink>
       <asp:Image id="img" runat="server" ImageUrl='<%# Eval("ImageUrl") %>' />
    </ItemTemplate>
</asp:Repeater>


将这些ID名称乘以100,如果您使用长描述性名称,您的ID将开始占用更多空间。在中继器内部,如果您的中继器名称良好,则短ID应该足够清晰。

使用可以通过减少请求数量来加快页面速度。以下是将多个视图的选项卡式浏览分解为同一个网站?为什么会被否决?它有点过时,但它仍然是有效的建议,因为许多人(更老,理所当然)浏览器呈现表格的速度比DIV慢。我很惊讶地看到有多少人使用表格进行布局,并抱怨速度太快。你的答案是正确的-这是关于发出的html。仅供参考,ASP.NET 4支持较小的客户端ID-Yslow实际上在周五下午6点在网站投入生产之前解决了我们的问题。谢谢!
<a id="ctl00_rptProducts_ctrl0_hl" href="/products.aspx?id=5">
  Product Name
</a>
<img id="ctl00_rptProducts_ctrl0_img" src="images/5.png"/>