0

サイトのプロフィール ページのアバター画像にデータ uri を使用しています (私は asp.net を使用しています)。スロー。プロフィールページに何をアップロードしているのか理解できません。また、プロファイル ページの 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");
            }
        }
    }

マスターページは下にあり、プロファイルページのボタンをクリックすると、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");
        }
    }
4

1 に答える 1

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);
            }
于 2013-10-01T11:34:58.360 に答える