网站首次访问速度慢 解决方案

  大家都知道,网站在第一次启动的时候首先需要对网站进行编译,所以首次访问会有一定的时间消耗。但随着项目功能模块的增加,网站的启动速度越来越慢,甚至到现在需要将近一分钟,令人难以接受,特别是在开发调试下,更是大大降低了开发效率。在百度和谷歌上面搜索过相关的问题,也没有找到答案,大多数人都说这是正常的,甚至有人还怪到MS的头上来。

  没办法,只能往MS的编译方向上找了,这时,刚好看到了Artech的《深入剖析ASP.NET的编译原理》,总算找到原因了,编译过程如下:

  • Step1:当ASP.NET收到对于某个Page的Request,根据这个request对应的Url试着找到该page对应的Preservation File,如果没有找到,重新编译Page所在目录下的所有需要编译的文件,同时生成一些额外的文件,包括Preservation File。
  • Step2:然后解析这个Preservation File,通过hash和filehash判断文件自身或者是Dependent File是否在上一次编译之后进行过任何的修改,如果是的,则重新编译。然后重新执行Step2。
  • Step3:通过Preservation File 的assembly attribute Load对应的assembly(如果Assembly还没有被Load的话),通过type获知对应的aspx type,然后借助FastObjectFactory的对应的Create_ASP_XXX创建这个type。这个新创建的对象就是我们需要的Http Handler,在之上执行相应的操作把结果Response到客户端。

  网站在首次收到客户端对某个页面的请求,将会对该页面所在目录下所有需要编译的文件进行编译,而刚好我的网站并没有对功能模块进行分目录,也就相当于对整个网站的页面进行一次编译,速度当然难以接受。找到原因自然就好办了,以模块为单位进行分目录。以下是分目录前后首次访问所耗的时间:

未分目录

已分目录

第一次

33s

12s

第二次

39s

9s

第三次

34s

9s

  从数据上可以看到,效果还是相当的明显,而且数据是在开发模式上做的测试,发布到生产机器上还能进一步减少启动时间。

原文地址:https://www.cnblogs.com/gudieaofei/p/1969146.html