【问题标题】:Is there a reason to prefer jQuery.Ajax to asp.net UpdatePanel?是否有理由更喜欢 jQuery.Ajax 而不是 asp.net UpdatePanel?
【发布时间】:2011-03-18 10:03:07
【问题描述】:

如果我正在开发一个 asp.Net 应用程序,在某些情况下我是否应该忘记 MS Ajax UpdatePanels 而更喜欢 jQuery.Ajax 来更新我的页面的某些部分?

谢谢

【问题讨论】:

    标签: asp.net jquery updatepanel


    【解决方案1】:

    是的,事实上,您应该几乎总是更喜欢使用您自己的(或 jQuery 的)ajax 功能。

    与 MS Ajax UpdatePanel 相关的很多开销(它执行完整的回发,然后更新页面上更改的元素),因此启用 AJAX 的网站 - 响应性、连续性等 - 几乎完全丢失(恕我直言)。您几乎无法控制通过电缆实际提交的内容、返回的内容以及返回给客户端时的处理方式。

    另一方面,使用 jQuery Ajax,您可以获得完全和即时的控制,您可以根据需要发出轻量(或重)请求,并让我们面对现实吧 - API 并不难使用比更新面板的。

    考虑到这一点,在某些情况下 UpdatePanel 还可以,甚至更好。特别是在 ASP.NET WebForms 中,如果用户不能使用 javascript,以优雅降级的方式仅返回页面的一部分可能会很棘手,并且对于快速的“拖放”开发风格,真的有jQuery 无法与之竞争。 (您是否喜欢拖放式开发完全是另一回事......)

    【讨论】:

    • 虽然我完全同意这种观点并且也更喜欢 jQuery,但“几乎不可能在一个页面中拥有多个 UpdatePanel”的说法完全是错误的,这很容易做到,而且很常见。
    • 第二!我曾参与过决定使用 UpdatePanel 而不是普通 AJAX 的项目,并且性能往往很糟糕。在一种特殊情况下,DataGridView + UpdatePanel 的组合很好地使应用程序瘫痪并使其几乎无用。我们最终重新设计了这部分应用程序以避免使用 UpdatePanel。我什至会说,基本上没有使用 UpdatePanel 而不是任何其他方式通过 AJAX 检索数据的好方案。
    • @Nick - 那么自从我上次尝试以来,多个更新面板的问题可能已经解决了。正如我所说,这是几年前的事了。 (一看到MVC框架,我就完全被迷住了……:P)
    • 自从它们可用以来,就一直以完全相同的方式完成,因此该陈述从未为真。无论时间背景如何,这是一个无效的陈述。您应该删除它,那是您没有正确使用它们,而不是该技术固有的无能。需要明确我鄙视 UpdatePanels,但直接提供有关 任何 平台的错误信息并不是提出论据的好方法。
    • @Nick:那里 - 删除它。但我确信当我这样做时(一定是 2007 年秋天),我在互联网上到处寻找可以在一个页面中使用多个更新面板的解决方案,无论我尝试了什么我想做的事情(这本来很容易,就像带有 jQ​​uery 的苹果派一样)如果不是完全的话,那么该死的几乎是不可能的。这可能是一些奇怪的边缘情况,但它是更新面板,当时没有人知道该怎么做。
    【解决方案2】:

    当然, 恕我直言,您应该更喜欢 jQuery 而不是标准的 ASP.Net 更新面板。 原因(主要)是性能,当您使用 jQuery.ajax 发布一些数据时,您只发布服务器需要理解帖子的内容。 这通常是文本的 1-2 个参数。

    当您使用更新面板执行相同的帖子时,整个页面会在后台运行到服务器,然后整个页面返回并呈现该区域。

    如果你使用jQuery,你可以在服务器上创建一个ashx页面,这个页面没有普通webform的页面加载和生命周期,而且非常轻量级。

    【讨论】:

    • 我有一个问题想问...如果客户端浏览器中禁用了 javascript 怎么办?
    • @Amit - 然后它会正常回发,您可以使用 UpdatePanels 或 jQuery 获得类似的行为 :)
    【解决方案3】:

    我会说你绝对应该更喜欢 jQuery AJAX 而不是 ASP.NET AJAX UpdatePanel。如果您查看ASP.NET AJAX site,确实没有提到 ASP.NET AJAX 和/或 UpdatePanel...但是很多都提到了 jQuery。事实上,微软似乎更喜欢使用 jQuery 作为客户端 JavaScript AJAX 框架的 ASP.NET 开发人员,而不是 UpdatePanel 和相关的 ASP.NET AJAX 控件。

    他们仍然提供指向 AJAX 控件工具包的链接,但是有这么多 jQuery 插件,你为什么需要工具包?

    UpdatePanel 速度较慢且体积较大——使用 jQuery AJAX。

    【讨论】:

      【解决方案4】:

      如果您对整个 ASP.Net 回发方案感到满意,那么坚持使用此类控件的一个优点是(大多数情况下)它们可以保护您免受回发等副作用的影响。但在这种特定情况下,它会带来成本:每个 AJAX 请求(包括视图状态)都有一个完整的回发,与直接 AJAX 请求相比,这可能会影响性能,参见:

      http://geekswithblogs.net/dlussier/archive/2007/09/06/115188.aspx

      我也不确定它是否能很好地处理跨站点请求(JSONP 等),因此需要考虑两个警告。

      【讨论】:

        【解决方案5】:

        正如其他人所说,MS-Ajax 和 UpdatePanel 的性能很差 - 有时甚至无法使用。正如其他人所指出的,应该小而轻的 ajax 回调很重,因为它们还包含完整的 ViewState。

        除了这些问题,我还发现了 MS-Ajax 的其他一些缺点:

        1. MS 生成的 javascript 包含大量开销。我假设他们已经内置了很多类型检查和变量检查,目的是让他们的 javascript 更加类型安全。这种开销会显着减慢浏览器端的处理速度 - 特别是当那些生成的 javascript 函数被重复/递归调用时(就像某些 3rd-party 控件的情况一样)。
        2. ASPX 代码隐藏变得更加复杂和难以维护,因为在页面的初始加载以及每个单独的 ajax 回调中都执行相同的页面生命周期。像所有复杂的代码一样,熟练的开发人员和优秀的代码集可以克服这一点 - 但它仍然是一个需要考虑的缺点。

        最后一点:MS-Ajax 和 UpdatePanels 的一个好处是,您可以摆脱 90% 的 javascript 无知并且仍然对它们进行编码。 “传统” ajax 比 MS-Ajax 涉及更多的 javascript 编码。

        【讨论】:

          猜你喜欢
          • 2011-06-18
          • 2011-11-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 2022-01-03
          • 2010-09-15
          • 1970-01-01
          相关资源
          最近更新 更多