ASP.NET:如何更快地加载页面

时间:2011-11-10 16:24:32

标签: asp.net

我们用ASP.NET编写了Portal。但它有许多Javascripts,我们的页面加载缓慢。 在某些页面中,页面大小为1.5 MB! 减少或压缩页面大小以使其更快的最佳方法是什么? 感谢

3 个答案:

答案 0 :(得分:6)

有几件事:

  1. 最小化您的javascript和CSS文件。 JS的Google has a nice minimizer
  2. 缓存图片,js文件和css文件。有关如何从IIS here执行此操作的信息。
  3. 禁用ViewState if you can或至少仅在需要它的控件上启用它。
  4. 在IIS上使用压缩
  5. 使用内容分发网络(CDN)提供javascript库,例如jQuery等。
  6. 使用Smush.it
  7. 优化您的图片
  8. 将javascript代码放在页面底部,以便页面开始渲染更快
  9. 如果您使用JSON进行UI和后端之间的数据交换,请确保也压缩它。
  10. 使用sprite me为图片图标,背景等创建精灵。

答案 1 :(得分:1)

你可以做很多不同的事情。任何简单的方法都是实现压缩。

在我的网站上,我在我的web.config文件中有这个:

<system.web>
    <httpModules>
        <add name="CompressionModule" type="Utility.HttpCompressionModule"/>
    </httpModules>
</system.web>

这是HttpCompressionModule:

public class HttpCompressionModule : IHttpModule
{
    /// <summary>
    /// Initializes a new instance of the <see cref="AjaxHttpCompressionModule"/> class.
    /// </summary>
    public HttpCompressionModule()
    {
    }

    #region IHttpModule Members

    /// <summary>
    /// Disposes of the resources (other than memory) used by the module that implements <see cref="T:System.Web.IHttpModule"/>.
    /// </summary>
    void IHttpModule.Dispose()
    {

    }

    /// <summary>
    /// Initializes a module and prepares it to handle requests.
    /// </summary>
    /// <param name="context">An <see cref="T:System.Web.HttpApplication"/> that provides access to the methods, properties, and events common to all application objects within an ASP.NET application</param>
    void IHttpModule.Init(HttpApplication context)
    {
        context.BeginRequest += (new EventHandler(this.context_BeginRequest));
    }

    #endregion

    /// <summary>
    /// Handles the BeginRequest event of the context control.
    /// </summary>
    /// <param name="sender">The source of the event.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    void context_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        string encodings = app.Request.Headers.Get("Accept-Encoding");
        Stream baseStream = app.Response.Filter;


        if (string.IsNullOrEmpty(encodings))
            return;

        string url = app.Request.RawUrl.ToLower();

        if (url.Contains(".js") || url.Contains(".css") || url.Contains("ajax.ashx"))
        {

            encodings = encodings.ToLower();

            if (encodings.Contains("gzip") || encodings == "*")
            {
                app.Response.Filter = new GZipStream(baseStream, CompressionMode.Compress);
                app.Response.AppendHeader("Content-Encoding", "gzip");

            }
            else if (encodings.Contains("deflate"))
            {
                app.Response.Filter = new DeflateStream(baseStream, CompressionMode.Compress);
                app.Response.AppendHeader("Content-Encoding", "deflate");
            }
        }
    }
}

也许你可以尝试类似的东西。

你可以做的另一件事是缩小你的javascript和css。这意味着要做一些事情,比如用短的名称替换长变量名,以及删除注释和空格。您可以在构建脚本中包含一些可以执行此操作的内容。我的网站使用python作为它的构建文件,它们非常冗长和令人费解,所以我不会在这里发布它们。有一个关于编写python脚本来缩小css的问题,这可能会给你一个很好的起点:Link

答案 2 :(得分:0)

  • 将您的CSS组合,缩小并压缩成一个文件。
  • 将JavaScripts文件合并并缩小为一个文件。
  • 将您的图片,CSS和JS文件放在CDN上。
  • 根据您的IIS版本,有页面压缩选项。

另外,不要忘记ViewState。不需要时将其关闭,可以大大增加页面大小。