代码之家  ›  专栏  ›  技术社区  ›  EMP

逐步流化ASP.NET页的输出-或呈现HTTP请求之外的页

  •  1
  • EMP  · 技术社区  · 14 年前

    我有一个包含许多重复块的ASP.NET 2.0页面,包括第三方服务器端控件(所以它不仅仅是纯HTML)。就CPU和RAM而言,每一个都是相当昂贵的。我目前正在使用标准中继器控件。

    这种简单的方法有两个问题:

    1. 整个页面必须在返回到客户机之前呈现,因此用户必须等待很长时间才能看到任何数据。(我使用 Response.Write 所以有 反馈 ,但没有实际结果。)
    2. ASP.NET工作进程必须同时将所有内容保存在内存中。这并没有内在的需求:一旦处理了一个块,它就不会被更改,所以它可以返回到客户机,并且内存可以被释放。

    我想以某种方式将这些块一次返回一个给客户机,因为每个块都是生成的。我正在考虑将中继器中的内容提取到一个单独的页面中,并使用Ajax反复获取它,但这其中涉及到一些复杂的问题,我想知道是否有更简单的方法。理想情况下,我希望将其保留为一个页面(从客户机的角度来看),但以增量方式返回。

    另一种方法是做类似的事情,但是在服务器上:仍然创建一个单独的页面,但是 服务器 访问它,然后 Response.Write() 它到达响应流的HTML 真实的 客户请求。但是,这里有没有一种方法可以避免HTTP请求?是否有一些ASP.NET方法可以呈现一个用户控件或HTTP请求之外的页面,并将HTML作为字符串返回给我?

    我也愿意接受其他关于如何做到这一点的想法。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Roman    14 年前

    另一种方法是做一些类似的事情,但是在服务器上:仍然创建一个单独的页面,但是让服务器访问它,然后响应.write()它得到的实际客户机请求的响应流的HTML。

    如果将每个中继器行的内容提取到一个用户控件中,就可以这样做。然后可以使用 LoadControl 方法,为其提供应呈现的正确数据(必要时调用DataBind),然后使用 Render 方法。这基本上就是您所想的,而不是创建一个全新的请求。

    免责声明: 就总执行时间而言,我不知道这是否会比您当前的解决方案更好或更差。

        2
  •  0
  •   Raj Kaimal    14 年前

    对WebService进行Ajax调用以获取部分HTML结果。您可以使用此处描述的视图管理器来呈现Web服务中的Web控件并返回结果HTML。

    http://weblogs.asp.net/scottgu/archive/2006/10/22/Tip_2F00_Trick_3A00_-Cool-UI-Templating-Technique-to-use-with-ASP.NET-AJAX-for-non_2D00_UpdatePanel-scenarios.aspx

        3
  •  0
  •   egrunin    14 年前

    这种方式不使用Ajax:

    <div><script src="pageparts.aspx?partid=news"/></div>
    <div><script src="pageparts.aspx?partid=weather"/></div>
    <div><script src="pageparts.aspx?partid=email"/></div>
    

    工作方式: pageparts.aspx 发出构造页面相关部分的javascript。零件不会以任何可预测的顺序出现。您可能需要修复部件的布局,这样页面在填充时不会跳来跳去。

    其结果类似于igoogle.com(这就是我使用这些URL的原因)。

    您的服务器端代码如下所示:

    <asp:Repeater id="rpParts" runat="server">
        <ItemTemplate>
            <div><asp:Literal id="litPart" runat="server"/></div>
        </ItemTemplate>
    </asp:Repeater>
    

    你生成了 <script> 在代码隐藏中标记。所有实际构造数据并将其放入 document.write() 进去 帕斯帕斯

    如果将一个大型数据库查询拆分为多个小型数据库查询,这可能不起作用,因为最终可能会花费更长的时间。

    编辑

    整个问题都在 实际构造数据“!如果我 可以把它当作一根绳子

    这对我来说没什么意义。您当前发送给客户的是什么,以及如何构建它?

    另外,为了完整性,这里有一个纯非javascript方法:

    <div><iframe src="part1.aspx"/></div>
    <div><iframe src="part2.aspx"/></div>
    <div><iframe src="part3.aspx"/></div>
    

    这很难看,而且看起来很难看,即使在您无法控制数据的情况下也能正常工作。