【发布时间】:2019-11-09 00:01:43
【问题描述】:
在一个数据驱动的 Web 应用程序中,我有几个 razor 视图,其中包含使用 tabulator 创建的表,并使用自调用 ajax 函数在时间间隔内进行更新。在大多数视图中,表的数量不超过三个,并且网络性能和更新之间的延迟相当快。我目前正在创建一个包含六个表的视图,并且看到丢弃请求的增加、数据的停滞以及似乎直接归因于页面上并发请求数量增加的总体缓慢。我绝不是 JavaScript 或 MVC 专家,我正在尝试调查我的代码是否只是效率低下,或者方法本身是否错误。
本质上,每个制表器表都有一个 ajax 函数,该函数将命中 MVC 层的端点,该函数路由到 WebApi2 端点以检索最新数据,最后,使用制表器加载函数之一将数据加载到表中.数据端是使用实体框架的 SQL。我已经尝试了几个围绕这个过程构建的实现,但下面是我目前使用的方法。
// 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();
视图中的每个表都运行上面的代码 sn-p 的一个版本。我添加了睡眠功能,希望在请求之间引入一些延迟。还值得指出的是,在 ASP.NET MVC 层,拥塞也增加了。由于所有其他请求来回飞来飞去,因此服务用户创建新实体的请求需要更长的时间。
【问题讨论】:
-
你将什么传回视图? ViewModel 只包含所需的字段,还是包含整个实体?一页上的 6 个表不应该破坏银行,但我会仔细查看正在发出的请求数量,以及在服务器端触发的查询数量和类型。对于像搜索条件这样的查找,我希望将它们组合成一个请求。对于搜索,请确保您对请求进行去抖动以避免不必要的往返。关键点是努力不发送比您需要的信息更多的信息,而不是您需要的频率。
标签: c# ajax asp.net-mvc entity-framework tabulator