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

时间:2009-01-28 20:23:55

标签: asp.net optimization seo

我在网页门户中严重依赖嵌套的母版页,这会导致ASP.NET为它创建的控件生成巨大的ID标签,例如: “ctl00_ctl00_MainBody_ctl00_lblDescription”

我创建的lblDescription标签。

有没有办法减少这种混乱?

除了删除视图状态之外,还有其他任何技术(对于一般情况而言都是如此)来减少页面重量吗?

12 个答案:

答案 0 :(得分:11)

答案 1 :(得分:5)

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

答案 2 :(得分:2)

我不知道如何删除客户端ID膨胀,但是一些使您的网页变小的一般提示是:

  • 将任何.js / .css缩小并合并到一个文件中。
  • 在页面顶部包含css,在底部包含js(实际上不会缩小它,但UI会加载得更快)

答案 3 :(得分:1)

如果您使用标签,请确保您确实需要使用标签(在<span>标签中生成文字。您可以使用Literal代替。

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

如果您正在尝试更改ASP.NET生成的模糊ID,那么您可以在那里做很多事情。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

CSS Friendly适配器将为您做很多工作,将您的ASP.NET控件从大型丑陋的长ID命名表转换为更简洁的div,名称更短。

我过去曾经使用它们,它们确实可以产生巨大的变化。除此之外,在任何不需要它的控件上关闭视图状态。符合正确的CSS / HTML,它将产生另一个显着的差异。

祝你好运!

答案 6 :(得分:1)

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

答案 7 :(得分:1)

特别是在转发器,ListViews和GridViews中,将控件命名为简短。

这应该通过上下文(产品列表)

显而易见

如果转发器中只有一个HyperLink,请将其命名为 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>

这将呈现如下内容:

<a id="ctl00_rptProducts_ctrl0_hl" href="/products.aspx?id=5">
  Product Name
</a>
<img id="ctl00_rptProducts_ctrl0_img" src="images/5.png"/>

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

答案 8 :(得分:1)

使用CSS Sprites可以减少请求数量,从而加快页面速度。以下是a few articles I found.

答案 9 :(得分:0)

我想如果你在没有重新组装你的页面的情况下绝望地做这件事(并且没有其他合理的想法奏效;)),你可以这样做:

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

至少,这就是我要尝试的。我不确定它与某些html和/或javascript结构有多好,但我认为它可以完成。 我怀疑这样做会很痛苦,特别是如果较短的唯一ID碰巧与任何合法的非id值冲突。

编辑:记得。你也需要处理ViewState ...(需要解码,修复和重新编码。看起来好像很麻烦:)但话又说回来,如果你要去那个麻烦,你呢通过覆盖load / save viewstate方法可以更好地压缩视图状态... 几年前,我用这种方法将一些巨大的页面(200K的html)减少到大约30K。事实上,在ViewState上使用自定义压缩通常足以大大减少页面大小。

答案 10 :(得分:0)

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

答案 11 :(得分:0)

如你所说,关闭视图状态是好的。另外我注意到ASP.NET树控件生成了大量的HTML(如果你有相当数量的节点)。我最终编写了自己的树控件,生成了标准树控件的1/4 HTML。所以你可以寻找那些特别糟糕的控件,并编写自己的控件。