【问题标题】:How can I minimize the weight of my ASP.NET pages?如何最小化 ASP.NET 页面的重量?
【发布时间】:2009-01-28 20:23:55
【问题描述】:

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

对于我创建的 lblDescription 标签。

有什么办法可以减少这种混乱吗?

除了删除视图状态之外,还有什么其他技术(抱歉笼统)来减少页面重量?

【问题讨论】:

    标签: asp.net optimization seo


    【解决方案1】:

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我不知道如何消除客户端 ID 膨胀,但一些缩小页面的一般技巧是:

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

      【讨论】:

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

        【讨论】:

          【解决方案5】:

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

          CSS Friendly 适配器将帮助您将 ASP.NET 控件从大而难看的长 id 命名表转换为更简洁、名称更短的 div。

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

          祝你好运!

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 这不会打破标签式浏览多个视图进入同一个站点吗?
            【解决方案7】:

            特别是在中继器、ListViews 和 GridViews 中,将您的控件命名为简短的名称。

            这在上下文(产品列表)中应该很明显

            如果中继器中只有一个超链接,请将其命名为 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 开始占用更多空间。在中继器内部,如果您的中继器命名良好,短 ID 应该足够清晰。

            【讨论】:

              【解决方案8】:

              使用CSS Sprites 可以通过减少请求数量来加速您的页面。这里是a fewarticlesI found.

              【讨论】:

                【解决方案9】:

                在您使用标签的情况下,请确保您确实需要使用标签(它会在 &lt;span&gt; 标记中生成文本。您可以改用 Literal

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

                如果您尝试更改由 ASP.NET 生成的晦涩的 ID,那么您无能为力。

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                  • 为什么这被否决了?这有点过时了,但它仍然是有效的建议,因为许多(旧的,被授予的)浏览器呈现表格的速度比 div 慢。
                  • 我很惊讶看到有多少人使用表格进行布局并抱怨速度。
                  • 你有正确的答案 - 它是关于发出的 html。
                  【解决方案11】:

                  正如您所提到的,关闭视图状态很好。此外,我注意到 ASP.NET 树控件会生成大量 HTML(如果您有相当数量的节点)。我最终编写了自己的树控件,它生成标准树控件的 1/4 的 HTML。因此,您可以寻找这样的控件,尤其是糟糕的控件,然后编写自己的控件。

                  【讨论】:

                    【解决方案12】:

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

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

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-11-06
                      • 1970-01-01
                      相关资源
                      最近更新 更多