2013-10-01 5 views
0

Я использую данные uri для изображения аватара на странице профиля сайта (я использую asp.net) Профиль сайта быстро открывается, но когда я нажимаю ссылку на странице профиля, хром показывает загрузку сообщения в левом нижнем углу, и он загружается очень медленно. Я не могу понять, что загружается на странице профиля. Также я контролирую загрузку страницы, используя свойство ispostback страницы профиля. когда я быстро удаляю страницу аватара.данные uri slowing down загрузка страницы

Итак, мой вопрос: я думаю, что сайт пытается загрузить данные 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"); 
      } 
     } 
    } 

Master страница ниже, когда я нажимаю кнопку на странице профиля он вызывает editprofile страницу, но она очень медленно:

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

Эта строка заставляет браузер включать данные изображения каждый раз:

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); 
      }