我最近在我的應用程序中添加了一些搜索功能。它運行良好,但有一個項目名爲Folder
,因此需要我進行一些Web服務調用。我一次最多返回100個項目,如果所有100個項目都是特定類型的,並且每個項目需要3或4個Web服務呼叫,則需要長達30秒才能獲取信息。MVC - 在多個地方延遲加載1個字符串
我得到的信息位是Path
。 Path
與PC上的文件路徑相同,並且在每個級別都進行新的Web服務調用。如果我刪除代碼以獲取返回的每個項目的此路徑,我可以在大約2 - 3秒內將結果呈現給用戶,並獲得100個結果。這是在我的開發機器上,所以我希望生產速度更快。
我想要做的是在屏幕上載入每個Folder
後獲得Path
。通過這種方式,大部分信息已經在那裏供用戶在可接受的時間內查看,並且Path
稍後載入。
我至今在我的控制方法,該方法將返回Path
作爲一個字符串:
[HttpGet]
public string _SearchGetFolderPath(int folderID)
{
using (SA sa = new SA())
using (IRWS irws = new IRWS(sa.Ticket))
{
return irws.getFolderPathfromFolderID(folderID);
}
}
在上述方法中,SA對象是Web服務和IRWS用戶身份對象是我保持我的Web服務調用的地方。
然後,我有這個在我看來:
@*Display Each Returned Result*@
@foreach (var item in Model)
{
<div class="panel panel-default">
<div class="panel-heading clearfix">
<h3 class="panel-title pull-left">@(item.Name)</h3>
<span class="pull-right">@item.AspectType.AspectName</span>
</div>
<div class="panel-body">
<dl class="dl-horizontal">
@foreach (var value in item.FieldValues)
{
<dt>@value.FieldName</dt>
@*Test if Item is a Folder and Field is Path*@
if (item.AspectType.AspectTypeID == -10 && value.FieldName.Contains("Path"))
{
/*Folder Path - get path*/
// HERE IS WHERE I WOULD LIKE TO LAZY LOAD THE PATH
}
else if (false)
{
}
else
{
<dd>@value.FieldValue</dd>
}
}
</dl>
</div>
</div>
<br />
}
我想這同樣工作,如何我的應用程序工作的另一部分。每一個Folder
有一個頁面,提供更多的信息,我用我的所有用戶界面的Telerik,所以我懶加載Folder
的孩子在Panel Bar
(http://demos.telerik.com/aspnet-mvc/panelbar/ajax)。
任何想法或建議,非常感謝。謝謝。
高速緩存路徑的問題是路徑可隨時更改。 – JohZant
添加了基於文件夾ID位的延遲加載和緩存,希望它有幫助:) 如果值發生更改(如果使用的語句不是昂貴的代碼行,但「getFolderPath」是昂貴的線) –
你是正確的,'irws.getFolderPathfromFolderID(folderID)'有一個循環,它將獲得下一個孩子的細節,直到它有一個完整的路徑。也許我應該讓它按照舊式的方式工作......每個路徑都有一個按鈕。哈哈。 – JohZant