我在网站的个人资料页面上使用数据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");
}
}
答案 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);
}