最近我一直致力于严重依赖AJAX调用的项目。在过去,大多数这些调用都使用自己的aspx页面发布到例如。 AJAXgetResults.aspx。在做了一些研究之后,我在代码隐藏中看到了一些使用jquery的.ajax函数和webmethods的例子。我想我的问题归结为。通过webmethod路线是否有任何性能增益/损失?我认为它仍然会像它所在的页面一样安全,对吧?任何其他建议都非常欢迎!谢谢!
答案 0 :(得分:1)
我想这取决于您希望在AJAX调用期间发生的控制级别。 Web方法肯定会有用,但我在最近的一个项目中使用的是为每个要向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;
}
}
}
答案 1 :(得分:1)
如果你的应用程序在很大程度上依赖于AJAX(更常见的是XHR),我会调查WCF Rest并以JSON形式返回结果。您将减少消耗的带宽并且通常可以获得性能改进,我发现WCF序列化和身份验证也非常优于使用页面即服务。通常,您可以通过将这些页面更改为服务来提高性能。