数据uri减慢页面加载速度

时间:2013-10-01 11:26:05

标签: asp.net pageload data-uri slowdown

我在网站的个人资料页面上使用数据uri作为头像图片。(我正在使用asp.net)个人资料网站正在快速打开但是当我点击个人资料页面上的链接时,Chrome会在左下角显示上传消息并且它上传速度很慢。我无法理解在个人资料页面上上传的内容。我还使用配置文件页面的ispostback属性控制页面加载。当我快速删除头像页面加载。

所以,我的问题是我认为网站尝试上传每个页面事件的数据uri图像,这样会减慢页面速度。但为什么上传我无法理解。

个人资料页面代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Request.Cookies["UserType"] != null)
            {
                Session["UserType"] = Request.Cookies["UserType"].Value;
            }
            if ((string)Session["UserType"] == Contact.EntityLogicalName)
            {
                CrmConnection = ConnectCrm.Single;
                FormsIdentity ident = User.Identity as FormsIdentity;

                if (ident != null)
                {
                   ...
                   ...
                    avatar2.ImageUrl = "/assets/avatars/avatar2.png";
                    IQueryable<Annotation> annotations = AnnotationOperations.SelectAnnotationByObjectId(CrmConnection.Context, new Guid(Id));
                    foreach (var annotation in annotations)
                    {
                        if (annotation.FileName.Contains("avatar"))
                        {
                            avatar2.ImageUrl = "data:image/png;base64," + annotation.DocumentBody;
                            break;
                        }
                    }

                }
            }
            else
            {
                Response.Redirect("~/Default.aspx");
            }
        }
    }

当我点击配置文件页面上的按钮时,母版页面在下面,它调用了编辑页面,但它非常慢:

protected void lnbSettings_Click(object sender, EventArgs e)
    {
        if (this.Page.User.Identity.IsAuthenticated)
        {
           ....

            if ((string)Session["UserType"] == Contact.EntityLogicalName)
            {
                Response.Redirect("~/Members/EditProfile.aspx", false);
            }
        }
    }

EditProfile页面代码:

   protected void Page_Load(object sender, EventArgs e)
    {

        if (Request.Cookies["UserType"] != null)
        {
            Session["UserType"] = Request.Cookies["UserType"].Value;
        }
        if ((string)Session["UserType"] == Contact.EntityLogicalName)
        {
            CrmConnection = ConnectCrm.Single;
            if (!IsPostBack)
            {
                SetFields();
            }
            else
            {
                contact = (Contact)Session["Contact"];
                langArr = (new_yabancidil[])Session["LangArr"];
            }
        }
        else
        {
            Response.Redirect("~/Default.aspx");
        }
    }

1 个答案:

答案 0 :(得分:0)

此行强制浏览器每次都包含图像数据:

avatar2.ImageUrl = "data:image/png;base64," + annotation.DocumentBody;

要允许浏览器缓存图像,您需要将图像URL设置为ASHX文件,并在请求时将图像字节提供给浏览器。因为所有页面加载的图像URL对于该用户都是相同的,浏览器知道它已经有图像,不需要再次请求它。

ashx文件的示例代码:

            Image image = [load image from file here];
            if (image != null)
            {
                image.Save(context.Response.OutputStream, ImageFormat.Png);
            }