【问题标题】:Render asp.net repeater as-and-when chunks of html is ready (streaming)当 html 块准备好(流式传输)时渲染 asp.net 转发器
【发布时间】:2010-04-22 13:29:42
【问题描述】:

问题是呈现大量报告。基本上,我们有很多数据在 html 报告中呈现(主要使用中继器或网格视图)。碰巧的是,数据开始时很小,现在我们拥有大量数据。已经建立了很多这样的报告,所以完全重写不是一种选择。哎呀,业务甚至不让我们分页数据。 现在,每次我们尝试渲染一些报告时,服务器内存都会增加。所以问题是 - 有没有办法我们可以将数据绑定到转发器并让它在块准备好时将 html 流式传输到浏览器?这样,我们希望不要一次将所有数据带入应用服务器。我想我们将使用数据读取器或其他东西来获取部分数据并将其呈现给浏览器。任何指针、链接、想法?

【问题讨论】:

    标签: asp.net streaming asynchronous


    【解决方案1】:

    这将是一个有趣的 JQuery 无限滚动解决方案。

    http://www.infinite-scroll.com/

    由于不允许您执行分页,因此您可以滚动抛出,然后才从数据库中获取记录并显示。问题之一是您需要使用 JavaScript 向 GridView 控件动态添加行。

    将其视为 Google 阅读器,您可以在其中向下滚动浏览提要,然后加载所有提要。

    【讨论】:

    • 我会探索无限卷轴。我已经在几个网站上看到了这些实现,这看起来很有希望。非常感谢。
    【解决方案2】:

    你有几个选择,但你不能使用中继器来做。

    ASP.NET 在到达the rendering stage of the page lifecycle 之前不会输出在 ASPX 中定义的 HTML。在此之前,几乎任何事情都可能发生在页面上(在 Page_Init、Page_Load 等中):它可能会向页面添加或删除控件,它可能会绑定数据源等。因此无法知道要发送什么到还没有客户。

    一个选项是使用 AJAX 从客户端构建报告:首先加载 HTML,然后通过对服务器的增量调用来修改它,直到您使用了所有报告数据。这可以让你将你的报告分成你想要的任何大小的块,但它可能会变得相当复杂。 (另一方面,也许有人已经构建了一个控件来促进这一点。)

    另一种选择是控制您的 HTML 生成并在您的代码隐藏类中手动编写整个页面(而不是使用漂亮、易于阅读的 .aspx 模板)。要查看实际情况,请创建一个完全空的 .aspx(除了 @Page 声明),并将其放入其 Page_Load 方法中:

    protected void Page_Load(object sender, EventArgs e) 
    {
        Response.Write("<html><body><ul>");
    
        // this could be iterating a data reader
        for(int i=0; i<5; i++) 
        {
            Response.Write("<li>Item " + i.ToString() + "</li>");
    
            // you might tweak your buffer settings instead of flushing on
            // each write - this is just for demonstration purposes
            Response.Flush();
    
            // this just dramatizes the fact that it's streaming
            // by adding a two-second delay
            System.Threading.Thread.Sleep(2000);
        }
        Response.Write("</ul></body></html>");
    }
    

    【讨论】:

    • 我正在考虑这些问题。无论如何,它在 php 和其他 web 堆栈中都是这样工作的。感谢您的宝贵时间。
    【解决方案3】:

    在这种情况下,Response.Write 是您的朋友。不幸的是,您将放弃 Data binding 和 repeaters 的细节。这是一个链接http://highscalability.com/plentyoffish-architecture

    【讨论】:

    • 感谢您的链接。我一直怀疑您必须超越 asp.net 控件才能处理严重的负载。这只是证实了这一点。基本上你和杰夫的回答指向了我应该采取的总体方向,我肯定会开始考虑这些方面。
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 2021-07-13
    • 2017-07-06
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    相关资源
    最近更新 更多