实现BigPipe for .NET以提高性能

时间:2010-06-23 23:04:44

标签: .net performance scalable

非常酷article关于facebook如何将其页面分解为“pagelets”以最大化服务器和浏览器在构建抓取各种资源(广告,供稿,朋友等)的复杂页面时所做的工作。他们称之为bigpipe。

steve souders在他的一次谈话中实际上谈到了这一点,他称之为“提前清理文件”。

在.NET中,你不能轻易做到这一点,但我已经通过覆盖渲染方法和提前刷新响应缓冲区来完成它,所以它是可能的并且它的工作非常好。但我从未尝试过这么大的规模。我的问题是,在.NET中构建BigPipe是否可行?他们说他们用java和PHP构建了他们的。我认为它也可以在.NET中完成,但我想知道.NET winforms架构是否可能不是最理想的做这样的事情。

我正在考虑在我们公司推动一个项目来建立这样的东西 - 但是需要做更多的研究,因为这不会是一个小项目。我想构建一些可以支持将任意页面分解为这些“pagelets”的东西。在.NET中,能够将我们的自定义用户控件转换为这些“pagelets”并将它们“刷新”成块状 - bigpipe风格可能会很棒。

评论/想法?

1 个答案:

答案 0 :(得分:3)

我已经在ASP.Net MVC Web项目中实现了一个BigPipe版本,通过提前刷新并并行执行pagelet内容。您可以在How To Implement BigPipe Using ASP.Net MVC上阅读并在GitHub上进行分析。

如果您将pagelet实现为在HTML文档末尾执行的PartialViews,就在关闭<body>部分之前,这种技术很容易应用。

此外,如果您想充分利用BigPipe,您应该按特定顺序加载pagelet所需的Javascript和CSS,从而提供最佳的用户体验。在注入页面中的pagelet的HTML之前,BigPipe并行加载CSS资源,并且当每个pagelet被注入时,它将继续进行Javascript并行下载和执行。