2

これには通常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) { }
    });

そして、これがWebAPIコントローラーです。

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

1 に答える 1

6

まだ遅いものを正確に特定しましたか?

例えば; IngredientSearch メソッドで、コードを

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

[HttpGet]
public string IngredientSearch(string search)
{
    return String.Empty;
}

まだ時間がかかりますか?

もしそうなら; 次に、スクリプト ライブラリの問題に注目する必要があります。そうでない場合は、DB レイヤーに問題があります。

このようなバグは追跡するのが面倒なことが多いため、仮定を忘れて少しずつテストする必要があります。上記の変更により、多くの問題が解消されます。わずかな労力で大きな手がかりが得られるからです。

PS: 申し訳ありませんが、これは答えではないことはわかっています。しかし、コードの変更を明確に強調できるように、1 つとして投稿したかったのです。反対票を投じないでください!

于 2012-08-13T01:51:03.433 に答える