将BigPipe应用于.NET以提高性能

3

一篇非常酷的文章,介绍了Facebook如何将页面分成“pagelets”,以最大化服务器和浏览器在构建复杂页面时抓取各种资源(广告、动态信息、好友等)的工作量。他们称之为BigPipe。

Steve Souders在其中一次讲座中谈到了这个话题,他将其称为“提前刷新文档”。

在.NET中,你不能轻易地做到这一点,但我通过覆盖渲染方法并提前刷新响应缓冲区来实现了这一点,所以它是可能的,并且效果相当不错。但我从未尝试过这么大规模的操作。我的问题是,在.NET中构建BigPipe是否可行?他们说他们是用Java和PHP构建的。我认为在.NET中也可以做到,但我想知道.NET Winforms架构是否适合做这样的事情。

我正在考虑在我们公司推动一个类似的项目,但需要进行更多的研究,因为这不是一个小项目。我想构建一个可以支持将任意页面分解成这些“pagelets”的东西。在.NET中,将我们的自定义用户控件转换为这些“pagelets”并将它们一次性“刷新”可能很好,就像bigpipe风格一样。
有什么评论/想法吗?
1个回答

3
我已经在一个ASP.Net MVC Web项目中实现了BigPipe的版本,通过早期刷新和并行执行页面元素内容。您可以在如何使用ASP.Net MVC实现BigPipe上阅读它,并在GitHub上分叉它。
如果您将页面元素实现为PartialViews并在HTML文档末尾,在关闭<body>标签之前执行,则可以轻松应用此技术。
此外,如果要充分利用BigPipe,则应按特定顺序加载页面元素所需的Javascript和CSS,以提供最佳用户体验。 BigPipe在注入页面元素的HTML之前并行加载CSS资源,当每个页面元素都被注入后,它才进行Javascript的并行下载和执行。

你好Jose,如果您有时间,我想和您简短交流一下。我正在按照您的教程尝试在我的MVC项目中实现bigpipe,但是我的页面片段在父视图/布局之前渲染。这听起来像是一个明显的问题吗?我已经尝试查看您的示例项目,但它无法在VS 2013中打开。 - Adrian
嗨@Adrian,你成功让这个解决方案工作了吗?我也在尝试让它工作。 - Raha
是的,我做了。你有什么困难? - Adrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接