Каков наилучший способ реализовать несколько одновременных запросов Ajax в одном представлении / странице? - PullRequest
2 голосов
/ 27 июня 2019

В веб-приложении, управляемом данными, у меня есть несколько видов бритвы, которые содержат таблицы, которые были созданы с использованием tabulator , и обновляются с использованием самообращающихся ajax-функций через интервал.В большинстве представлений количество таблиц не превышает трех, а производительность сети и отставание между обновлениями довольно быстрые.В настоящее время я создаю представление, содержащее более шести таблиц, и вижу увеличение количества пропущенных запросов, стагнацию данных и общую медлительность, которая, по-видимому, напрямую связана с увеличением числа одновременных запросов на странице.Я ни в коем случае не эксперт по JavaScript или MVC, и пытаюсь выяснить, является ли мой код просто неэффективным, или сам подход неверен.

По сути, каждая таблица табулятора имеет функцию ajax, которая воздействует на конечную точку на слоях MVC, которая направляется к конечной точке WebApi2 для получения последних данных и, наконец, использует одну из функций загрузки табуляторов для загрузки данных.в стол.Конец данных - это SQL с использованием Entity Framework.Я пробовал несколько реализаций, построенных вокруг этого процесса, но ниже представлен подход, который я сейчас использую.

    // Function for waiting in between calls
    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    // Function for getting data from endpoint
    async function fetch() {
        $.ajax({
            type: "GET",
            url: www.mydata.com,
        }).done(async function (data) {
            // Tabulator function for replacing existing data with new
            table.replaceData(data);
            await sleep(10000);
            fetch();
            }).fail(async function () {
                await sleep(10000);
                fetch();
        })
    }
    // Call the fetch function the first time, self calls afterwards
    fetch();

Каждая таблица в представлении запускает версию фрагмента кода выше.Я добавил функции сна, надеясь ввести некоторую задержку между запросами.Стоит также отметить, что на уровне ASP.NET MVC также наблюдается повышенная загруженность.Требуется больше времени для обслуживания запроса, сделанного пользователем, чтобы создать новую сущность, потому что все остальные запросы летят туда-сюда.

...