【发布时间】:2012-08-09 06:12:15
【问题描述】:
这通常需要 2-4 秒,这对于它正在做的工作来说似乎太长了。 这是 AJAX:
$("#IngTable").html("<center><img src=../img/loading.gif /></center>");
var search = document.getElementById("IngSearch").value;
var apiLink = "/API/Ingredient/Search?search=" + search;
$.ajaxSetup({ accepts: "application/json" });
$.ajax({
url: apiLink,
type: "GET",
success: function(data) {
var ingredients = JSON.parse(data);
var htmlIngred = "";
for (var i = 0; i < ingredients.length; i++) {
htmlIngred += "<tbody><td><span>" + ingredients[i].Name + "</span></td><td><a class='btn btn-success btn-mini' onclick='addIngred(" + ingredients[i].IngredientId + ");'>Add</a></td></tbody>";
}
document.getElementById("IngTable").innerHTML = htmlIngred;
},
error: function (a, b, c) { }
});
这里是 Web API 控制器:
[HttpGet]
public string IngredientSearch(string search)
{
var sw = Stopwatch.StartNew();
var db = new Glubee.Model.GlubeeEntities();
var results = db.Ingredients.Where(x => x.Name.Contains(search)).ToArray();
sw.Stop();
return JsonConvert.SerializeObject(results);
}
成分表中只有 16 项内容,每项内容长度不超过 20 个字符。
有没有人知道问题可能出在哪里,导致需要这么长时间?
编辑:如果有帮助,这是我的 Global.asax.cs 页面:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
这是我的 RouteConfig:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
【问题讨论】:
-
在您的数据库上放置一个分析器并检查您的 Sql 执行情况
-
成分搜索耗时过长?
-
@benPearce 我在 IngredientSearch 函数的开头和结尾放了一个秒表,它在 30-100 毫秒之间,大部分时间接近 40 毫秒,所以我认为问题不在于功能。
-
@rikitikitik 请参阅上面的评论。谢谢你的帮助。
-
@user1308743 Web API 中的方法名称是成分搜索,而在 ajax 中您正在调用 /API/Ingredient/Search?search 所以这是正确的 Web API 调用
标签: c# javascript jquery ajax asp.net-mvc