代码之家  ›  专栏  ›  技术社区  ›  Mike Florian Doyen

在ASP.NET中使用jquery进行Ajax调用时有哪些最佳实践?

  •  0
  • Mike Florian Doyen  · 技术社区  · 15 年前

    最近,我一直在研究严重依赖Ajax调用的项目。在过去,这些调用中的大多数都使用了自己的aspx页面来发布到例如ajaxgetresults.aspx。在做了一些研究之后,我在codebehind中看到了一些使用jquery.ajax函数和webmethods的示例。我想我的问题可以归结为。通过webmethod路线是否有任何性能增益/损失?我假设它仍然和它所在的页面一样安全,对吗?任何其他建议都非常欢迎!谢谢!

    2 回复  |  直到 15 年前
        1
  •  1
  •   marr75    15 年前

    如果您的应用程序严重依赖Ajax(更普遍的是XHR),那么我将研究WCF REST并在JSON中返回结果。我发现,WCF序列化和身份验证大大优于将页面用作服务,这将减少带宽消耗,并通常提高性能。通常,您的性能应该通过将这些页面更改为服务来提高。

        2
  •  1
  •   Sam    15 年前

    我想这取决于您想要控制在Ajax调用期间发生的事情的级别。webmethods当然可以工作,但我最近在一个项目中使用的是根据您希望向Ajax调用公开的不同功能创建一个.ashx处理程序。您仍然可以访问任何上下文变量,如请求、响应、查询字符串、会话等,并且逻辑被很好地封装在远离任何页面的地方,并且您也不会得到“正常”页面处理和生命周期的开销,这将提高性能。

    只是要小心设置缓存级别,因为默认情况下ASHX处理程序看起来非常“可缓存”。

    例如,ashx检索某个职位的所有员工,并以json格式返回结果:

    public class GetEmployeesForPosition : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "application/json";
                context.Response.Clear();
                context.Response.AddHeader("Pragma", "no-cache");
                context.Response.AddHeader("Expires", "-1");
    
                var position = new Entity.Model.Position { Code = context.Request.QueryString["code"] };
                var language = new Language { Key = context.Request.QueryString["language"] };
    
                var list = new EmployeeManager().GetForPosition(position, language);
                var employeeMenuList = new List<KeyValuePair<string, string>>();
                foreach (var emp in list)
                {
                    var item = new KeyValuePair<string, string>(emp.Person.Number, emp.Person.DisplayName);
                    employeeMenuList.Add(item);
                }
    
                var json = JsonSerializer.ToJson(employeeMenuList);
                context.Response.Write(json);
            }
    
            public bool IsReusable
            {
                get
                {
                    return true;
                }
            }
        }
    
    推荐文章