如何在浏览器中首次命中后缩短数据之前的时间

时间:2020-03-05 18:49:15  来源:igfitidea点击:

我们有几个大型解决方案,每个解决方案都有大约40个单独的项目(类库和嵌套网站)。完全重建整个过程大约需要2分钟。

系统上的几个规格:

  • Visual Studio 2005,C#
  • 主项目是一个Web应用程序项目
  • 总共40个项目(4个Web项目)
  • 我们使用内部VS网络服务器
  • 我们广泛使用用户控件,直到包含文本框的用户控件为止
  • 我们有几个内联的Web项目,可以使我们进行部分部署
  • 约120个用户控件
  • 大约200.000行代码(包括HTML)
  • 我们使用Source Safe

我想知道的是如何减少第一次使用浏览器访问该网站所需的时间。而且,我不是在谈论完整部署,而是在代码,构建,刷新浏览器中做一些小的更改。
第一次命中大约需要1分钟15秒,之后数据才能恢复。

为了加快速度,我对Ram磁盘做了一些试验,特别是更改了web.config中的<compilation>属性,将tempDirectory设置为我的Ram磁盘。
这确实加快了速度。有趣的是,这完全删除了浏览器第一次命中时的所有IO访​​问。

评论
在开发过程中,我们永远不会完全编译,而只会部分编译。例如,编译正在处理的类库,然后编译主站点,然后将其从类库复制二进制文件到bin目录。

我了解到关键文件已更改(例如bin dir)后,asp.net引擎需要解析所有ascx / aspx文件,但是,我不明白的是为什么当只有一个库dll有文件时,为什么需要这样做被修改。

因此,任何人都知道一种方法:
对解决方案进行细分,以在配置文件或者其他内容中提供更快的首次匹配或者微调设置。

再说一遍:我只在谈论开发,而不是在生产部署,因此执行预编译选项是不适用的。

谢谢鲁文

解决方案

回答

哇,有120个用户控件,其中一些只包含一个TextBox?这听起来像很多代码。

更改库项目时,需要重新编译依赖于该库项目的所有项目,并且还需要重新编译依赖于该库项目的每个项目,等等。我们知道我们只对函数进行了1行更改,但这并不影响我们所有的用户控件,但是编译器并不知道。

我们可能已经知道,ASPX和ASCX文件仅在首次单击Web应用程序时才编译。

通过将ASCX文件更改为Composite Controls,而不是在另一个Library Project中,可以提高速度。然后,将在编译时(如果愿意)而不是在Web应用程序加载时对它们进行编译。