代码之家  ›  专栏  ›  技术社区  ›  Matt Dawdy

浪费的Ajax页面加载

  •  3
  • Matt Dawdy  · 技术社区  · 15 年前

    我已经开始了一份新工作,我正在做的这个项目有一个非常奇怪的结构。每个页面都是一个.NET ASPX页面,它可以很好地加载,但在加载时什么都不做。所有内容实际上都是从jquery document.onready处理程序加载的。

    更有趣的是,onready处理程序调用了一些Ajax调用,这些调用将整个.aspx页面放到页面上的div中,但首先它去掉了返回页面的几个部分。这是前一个程序员在其Ajax调用返回的所有HTML上运行的“魔力”脚本:

    function CleanupResponseText(responseText, uniqueName) {
        responseText = responseText.replace("theForm.submit();", "SubmitSubForm(theForm, $(theForm).parent());");
        responseText = responseText.replace(new RegExp("theForm", "g"), uniqueName);
        responseText = responseText.replace(new RegExp("doPostBack", "g"), "doPostBack" + uniqueName);
        return responseText;
    }
    

    然后他截取任何形式的表单回发,并运行自己的表单提交功能:

    function SubmitSubForm(form, container) {
    //ShowLoading(container);
    $(form).ajaxSubmit( {
                url: $(form).attr("action"),
                success: function(responseText) {
                    $(container).html(CleanupResponseText(responseText, form.id));
                    $("form", container).css("margin-top", "0").css("padding-top", "0");
                    //HideLoading(container);
                }
            }
        );
    }
    

    我是不是觉得这不太理想?我的意思是,一个浏览器是如何去掉HTML、head和其他标签的,而这些标签与你真正想要放入这个分区的内容没有任何关系?

    此外,他还返回了诸如asp:gridview控件和关联的viewstate之类的内容,如果他的数据集很大,则这些内容可能非常大。

    以前有人见过这个吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   coolnalu    15 年前

    2006年初,当我第一次学习Ajax时,我使用它在页面加载后检索页面的主要内容。(或者更确切地说,在HTML的底部)。但我很快就放弃了。

    感觉不对劲。

    • 如果网页可以在互联网上访问,那么这对市场营销/搜索引擎优化(SEO)是非常不利的。因为搜索引擎将看到一个空页面。我认为大多数爬虫不需要运行javascript。
    • 从性能上讲,这没什么帮助。随着时间的推移,我们已经了解到Ajax最适合用来更新HTML的小片段。如果通过Ajax返回的内容大于“加载大小”,那么您实际上没有得到任何好处。使用缓存,加载时间非常短。
    • 兼容性。尽管所有主要的浏览器都很好地支持Ajax,但不值得让页面完全依赖于JS,因为它不会中断。另外,Ajax请求不需要在移动设备上使用更多的CPU,从而使用更多的电池。
    • 历史实施可能更难。如果在历史记录中来回切换,页面很可能是空的,或者必须再次调用服务器来检索内容。

    尽管它可以工作,但它仍然觉得它更像是一个黑客,而不是可靠的代码。

        2
  •  1
  •   s_hewitt    15 年前

    ASP.NET不支持在同一页上具有多个窗体。看起来这是在回避这个问题。

    你的网站运行缓慢吗?(你需要担心这个性能吗?)

    你的页面有多个吗 <html> <body> <head> 里面有标签吗?或者是在返回控件以便在页面上呈现之前删除的内容?如果把它们留在浏览器中,浏览器就可以随意地处理它,而且行为(据我所知)没有定义,也无法确定是否一致。

        3
  •  1
  •   user166390    15 年前

    …而且装载量很好…

    没问题,没关系:(-)我不会选择这种方法。

    但是,要回答这个问题:现代Web浏览器只需丢弃给定上下文的无效HTML标记(html/head/body不在DIV中;-)而 尽最大努力 尽他们所能。因此,虽然不美观并且依赖于实现细节,但是浏览器的最大努力使这对于广泛的输入成为可能。YMMV。