我现在正在为Azure创建一个新的Web应用程序。
我注意到如果我没有访问该网站一段时间(30多分钟),我第一次访问时需要一段时间才能加载(20多秒)。我认为这是因为Azure必须经历并编译应用程序。有没有办法防止应用程序在空闲一段时间后必须被编译。或者以某种方式在本地预先编译Web应用程序 - 然后将其部署到Azure,这样就不需要在服务器上进行编译了?
我正在使用VS 2012,Web应用程序(Web窗体)和Web部署
您可以访问我的网站Here。
答案 0 :(得分:1)
不幸的是,Azure网站无法解决这个问题。正如您所说,这是因为IIS是一个需求驱动的Web服务器,所以只有当它被要求时才会这样做。因此,只有当请求到达此工作进程中托管的站点时,IIS工作进程才会进行旋转。
如果您正在使用VS2012和Web部署,那么您很可能已经在编译代码。在.Net中,这个编译步骤只将它部分地转换为与CPU无关的IL(中间语言),然后工作进程需要将其转换为可以在该机器上运行的本机代码。这就是为什么您的网站需要一段时间才能加载。
他们确实开始使用IIS 7.5中的IIS 7.5进行预热模块(应用程序初始化)以解决初始化重型站点的问题,但遗憾的是,它不适用于Azure网站,因为它是本机模块。如果要使用它,则必须切换到Azure云服务或虚拟机才能运行您的站点。
我知道人们使用的另一种选择是使用ping监控服务,例如pingdom,它显然会不断向您网站上的页面发出请求,从而使工作进程保持活动状态。最后一个远非理想的替代方案是在某处创建一个简单的脚本,该页面向页面发出请求以使其保持活动状态。
但是,如果您的网站变得流行,则不需要执行任何这些步骤,因为人们访问您的网站这一事实将使工作进程保持活跃。
答案 1 :(得分:0)
我刚刚通过Google Page Speed运行了您的网站: https://developers.google.com/speed/pagespeed/insights#url=http_3A_2F_2Fffinfo.azurewebsites.net_2F&mobile=false
如果您担心“共享”WebSite实例的速度/性能,您应该修复其中列出的一些项目。拥有375kb的巨大背景可能不是最好的主意......它甚至没有被压缩。
如果可以的话,转移到云服务的“超小”实例,您可以优化许多其他内容(关闭ASP.NET模块,删除标头,控制压缩,客户端缓存)。你的目标是拥有一个受欢迎的网站,对吗?......开始吧:)
答案 2 :(得分:0)
它不是开箱即用的,但是通过预定ping来保持云服务温暖的一种简单方法是按照here所述使用Windows Azure移动服务
它基本上是一个小脚本,计划每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!");
}
});
}