【问题标题】:Pre-loading Azure web-site to increase first visit load time预加载 Azure 网站以增加首次访问加载时间
【发布时间】:2013-01-23 15:01:14
【问题描述】:

我现在正在为 Azure 创建一个新的 Web 应用程序。

我注意到,如果我有一段时间(30 多分钟)不访问该网站,那么在我第一次访问时加载需要一段时间(20 多秒)。我认为这是因为 Azure 必须去编译应用程序。有没有一种方法可以防止在长时间空闲后必须遵守应用程序。或者以某种方式在本地预编译 Web 应用程序 - 然后将其部署到 Azure,因此不需要在服务器上编译?

我正在使用 VS 2012、Web 应用程序(Web 表单)和 Web 部署

您可以访问我的网站Here

【问题讨论】:

    标签: c# webforms azure-web-app-service asp.net-4.5


    【解决方案1】:

    不幸的是,Azure 网站无法解决这个问题。正如您所说,这是因为 IIS 是一个需求驱动的 Web 服务器,因此只有在被要求时才会执行此操作。因此,IIS 工作进程仅在对该工作进程中托管的站点的请求到达时才会启动。

    如果您使用的是 VS2012 和 web 部署,那么您很可能已经在编译代码。在 .Net 中,此编译步骤仅将其部分转换为独立于 CPU 的 IL(中间语言),然后工作进程需要将其转换为可以在该机器上运行的本机代码。这就是为什么您的网站需要一段时间才能加载的原因。

    他们确实开始使用 IIS 7.5 提供一个热身模块(应用程序初始化),该模块包含在 IIS 8 中,以解决初始化繁重网站的问题,不幸的是它不适用于 Azure 网站,因为它是一个本机模块。如果您想使用它,则必须切换到 Azure 云服务或虚拟机来运行您的网站。

    我知道人们使用的另一种选择是使用云监控服务,例如 pingdom,它显然会不断地向您网站上的页面发出请求,从而使工作进程保持活动状态。最后一个远非理想的替代方案是在某处有一个简单的脚本,该脚本向页面发出请求以使其保持活动状态。

    但是,如果您的网站变得流行,则无需执行任何这些步骤,因为人们访问您的网站这一事实将使工作进程保持活力。

    【讨论】:

    • 谢谢,我打算做一个云监控系统,这样在我的网站再次获得稳定的流量之前,它看起来很像修复。
    【解决方案2】:

    我刚刚通过 Google Page Speed 运行了您的网站: https://developers.google.com/speed/pagespeed/insights#url=http_3A_2F_2Fffinfo.azurewebsites.net_2F&mobile=false

    如果您担心“共享”网站实例的速度/性能,您应该修复其中列出的一些项目。拥有 375kb 的巨大背景可能不是最好的主意......而且它甚至没有被压缩。

    如果可以的话,转移到一个“超小”的云服务实例,你可以优化很多额外的东西(关闭 ASP.NET 模块、删除标头、控制压缩、客户端缓存)。您的目标是拥有一个受欢迎的网站,对吗?...开始吧:)

    【讨论】:

    • 感谢您的意见,此时我并不真正关心第一次加载后网站的速度/性能。我更关心应用程序池的回收导致网站重新编译。
    【解决方案3】:

    它不是开箱即用的,但通过预定 ping 来保持云服务温暖的一种简单方法是使用 Windows Azure 移动服务,如 here 所述

    它基本上是一个小脚本,计划每 15 分钟访问您的网站。

    function KeepAlive() 
    {     
        KeepSiteAlive("http://www.yousayhello.co.uk");     
    }
    
    function KeepSiteAlive (siteurl) 
    {
         console.info("Warming up "+siteurl);
         var httpRequest = require('request');
         httpRequest(siteurl, function(err, response, body)         
         {             
            if (err)
            {
                     console.warn("Couldn't retrieve site");                             
            }
            else if (response.statusCode !== 200)
            {
                  console.warn("Bad response");             
            }
            else             
            {              
                console.info("Site Warmed Up!");             
            }                         
          });
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多