如何在Web应用程序之外预生成js包?

时间:2015-01-22 19:12:07

标签: c# asp.net-mvc-4 bundle system.web.optimization

我正在开发一个Web应用程序,它使用System.Web.Optimization库将大量js脚本打包到包中。

为了减少第一个用户的响应时间,我准备Application_Start中的所有包,并强制将它们添加到缓存中。当然,这增加了Application_Start作为回报的时间。

我设法将GenerateBundleResponse()的结果保存到文件中,然后只将这些文件的内容加载到Application_Start的缓存中,但它需要运行应用程序两次:第一次“冷”启动准备脚本并将它们保存到文件中,而第二个脚本可以使用准备好的脚本并快速启动。

public abstract class FileBasedBundle : Bundle
{
    public override BundleResponse GenerateBundleResponse(BundleContext context)
    {
        if (File.Exists(bundlePath))
        {
            var content = File.ReadAllText(bundlePath);
            var fileList = GenerateFileList(context);
            return new BundleResponse(content, fileList);
        }

        var response = base.GenerateBundleResponse(context);
        File.WriteAllText(bundlePath, response.Content);
        return response;
    }
}

问题是:如何在某些工具包或脚本中准备捆绑包以便在远程计算机上进行部署,以便不启动应用程序两次? System.Web.Optimization有什么替代方法可以在Web应用程序上下文之外运行吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

可以试试这个捆绑包 - 编译&缩小Less / Sass / Stylus / Css / JS / CoffeeScript / LiveScript文件。

https://github.com/ServiceStack/Bundler