我在网页门户中严重依赖嵌套的母版页,这会导致ASP.NET为它创建的控件生成巨大的ID标签,例如: “ctl00_ctl00_MainBody_ctl00_lblDescription”
我创建的lblDescription标签。
有没有办法减少这种混乱?
除了删除视图状态之外,还有其他任何技术(对于一般情况而言都是如此)来减少页面重量吗?
答案 0 :(得分:11)
答案 1 :(得分:5)
尽可能使用HTML控件。 HTML控件。除非您指定runat="server"
属性,否则它们更轻,因为没有服务器端对象。
答案 2 :(得分:2)
我不知道如何删除客户端ID膨胀,但是一些使您的网页变小的一般提示是:
答案 3 :(得分:1)
如果您使用标签,请确保您确实需要使用标签(在<span>
标签中生成文字。您可以使用Literal
代替。
在不需要它的控件上(或在整个页面/网站上)设置EnableViewState="False"
如果您正在尝试更改ASP.NET生成的模糊ID,那么您可以在那里做很多事情。
答案 4 :(得分:1)
答案 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。所以你可以寻找那些特别糟糕的控件,并编写自己的控件。