![](/img/trans.png)
[英]React.js with MVC ASP.NET TTFB loading of .jsx takes too long
[英]ASP.NET CORE MVC Loading table page takes too long
我有一張訂單表(大約 8000 條記錄),該表需要幾秒鍾才能加載。
原因是頁面上顯示的字段之一是從另一個表 (returnProductName) 中檢索的。
刪除此 function 時,表格加載速度很快。
加載記錄時,我使用的是 Skip and Take,但是在檢索產品名稱時,我正在迭代所有訂單,因為如果用戶想按產品名稱搜索,它將顯示該產品的所有結果。
產品表不大(大約70條記錄)
我不明白為什么 function 會使頁面加載如此緩慢。
我知道我可以將產品名稱列添加到表中並在添加新訂單時填充它,但這聽起來不對,
誰能告訴我這個延遲的原因?
返回產品名稱 Function:
public string returnProductName(int productId)
{
return (_unitOfWork.Product.GetAll().Where(q => q.Id == productId).Select(q =>
q.ProductName)).FirstOrDefault();
}
加載頁面數據的Function:
[HttpPost]
public ActionResult GetList()
{
//Server Side parameters
int start = Convert.ToInt32(Request.Form["start"].FirstOrDefault());
int length = Convert.ToInt32(Request.Form["length"].FirstOrDefault());
string searchValue = Request.Form["search[value]"].FirstOrDefault();
string sortColumnName = Request.Form["columns["+Request.Form["order[0][column]"]+"][name]"].FirstOrDefault();
string sortDirection = Request.Form["order[0][dir]"].FirstOrDefault();
List<Order> orderList = new List<Order>();
orderList = _unitOfWork.Order.GetAll().ToList();//Working Fast
int totalRows = orderList.Count;
foreach (Order order in orderList)
{
order.ProductName = returnProductName(order.ProductId);
}
if (!string.IsNullOrEmpty(searchValue))
{
orderList = orderList.Where(x => x.FullAddress.ToLower().Contains(searchValue.ToLower())
x.Id.ToString().Contains(searchValue.ToLower()) ||
x.OrderStatus.ToLower().Contains(searchValue.ToLower()) ||
x.ProductName.ToLower().Contains(searchValue.ToLower()) |||
x.Quantity.ToString().Contains(searchValue.ToLower()) ||
x.Cost.ToString().Contains(searchValue.ToLower()) ||
(!string.IsNullOrEmpty(x.TrackingNumber) && x.TrackingNumber.ToString().Contains(searchValue.ToLower()))
).ToList<Order>();
}
int totalRowsAfterFiltering = orderList.Count;
orderList = orderList.Skip(start).Take(length).ToList<Order>();
return Json(new { data = orderList, draw = Request.Form["draw"], recordsTotal = totalRows ,
recordsFiltered = totalRowsAfterFiltering});
}
我可能會考慮更新GetAll()
方法或創建另一個返回字典的方法。
在這種情況下GetAllById()
然后更新我將重命名為GetProductName()
的returnProductName
:
// Or whatever your type is
public Dictionary<int, List<Product>> GetAllById()
{
// your code..
return data
.GroupBy(x => x.Id)
.ToDictionary(x => x.Key, x => x.ToList());
}
public string GetProductName(int productId)
{
var products = _unitOfWork.Product.GetAllById();
return products[productId].FirstOrDefault(q => q.ProductName);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.