Merge pull request #9538 from abpframework/berkan/improve-performance-on-docs-module

Improve performance on docs module
pull/9542/head
ebicoglu 4 years ago committed by GitHub
commit 9c51cf8a13
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,14 +0,0 @@
using System;
using Volo.Abp.Application.Dtos;
namespace Volo.Docs.Admin.Documents
{
public class DocumentWithoutDetailsDto : EntityDto<Guid>
{
public virtual string Version { get; set; }
public virtual string LanguageCode { get; set; }
public virtual string Format { get; set; }
}
}

@ -65,7 +65,8 @@ namespace Volo.Docs.Documents
{
var project = await _projectRepository.GetAsync(input.ProjectId);
input.Version = GetProjectVersionPrefixIfExist(project) + input.Version;
var inputVersionStringBuilder = new StringBuilder();
input.Version = inputVersionStringBuilder.Append(GetProjectVersionPrefixIfExist(project)).Append(input.Version).ToString();
return await GetDocumentWithDetailsDtoAsync(
project,
@ -79,11 +80,14 @@ namespace Volo.Docs.Documents
{
var project = await _projectRepository.GetAsync(input.ProjectId);
input.Version = GetProjectVersionPrefixIfExist(project) + input.Version;
var sb = new StringBuilder();
input.Version = sb.Append(GetProjectVersionPrefixIfExist(project)).Append(input.Version).ToString();
sb.Clear();
return await GetDocumentWithDetailsDtoAsync(
project,
project.DefaultDocumentName + "." + project.Format,
sb.Append(project.DefaultDocumentName).Append(".").Append(project.Format).ToString(),
input.LanguageCode,
input.Version
);
@ -226,7 +230,7 @@ namespace Volo.Docs.Documents
private async Task AddDocumentToUrls(string prefix, Project project, DocumentWithoutDetails document,
List<string> documentUrls)
{
var navigationNodes = await GetNavigationNodesAsync(prefix, project, document);
var navigationNodes = await GetNavigationNodesAsync(project, document);
AddDocumentUrls(prefix, navigationNodes, documentUrls, project, document);
}
@ -244,7 +248,7 @@ namespace Volo.Docs.Documents
});
}
private async Task<List<NavigationNode>> GetNavigationNodesAsync(string prefix, Project project,
private async Task<List<NavigationNode>> GetNavigationNodesAsync(Project project,
DocumentWithoutDetails document)
{
var version = GetProjectVersionPrefixIfExist(project) + document.Version;
@ -286,10 +290,12 @@ namespace Volo.Docs.Documents
private string NormalizePath(string prefix, string path, string shortName, DocumentWithoutDetails document)
{
var pathWithoutFileExtension = RemoveFileExtensionFromPath(path, document.Format);
var normalizedPath = prefix + document.LanguageCode + "/" + shortName + "/" + document.Version + "/" +
pathWithoutFileExtension;
return normalizedPath;
var normalizedPathStringBuilder = new StringBuilder();
normalizedPathStringBuilder.Append(prefix).Append(document.LanguageCode).Append("/").Append(shortName)
.Append("/").Append(document.Version).Append("/").Append(pathWithoutFileExtension);
return normalizedPathStringBuilder.ToString();
}
private string RemoveFileExtensionFromPath(string path, string format)
@ -375,21 +381,6 @@ namespace Volo.Docs.Documents
return await GetDocumentAsync(documentName, project, languageCode, version, document);
}
var cacheKey = CacheKeyGenerator.GenerateDocumentUpdateInfoCacheKey(
project,
document.Name,
document.LanguageCode,
document.Version
);
await DocumentUpdateCache.SetAsync(cacheKey, new DocumentUpdateInfo
{
Name = document.Name,
CreationTime = document.CreationTime,
LastUpdatedTime = document.LastUpdatedTime,
LastSignificantUpdateTime = document.LastSignificantUpdateTime
});
return CreateDocumentWithDetailsDto(project, document);
}

@ -108,6 +108,8 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
private string GetLeafNode(NavigationNode node, string content)
{
var sb = new StringBuilder();
var textCss = node.Path.IsNullOrEmpty() ? "tree-toggle" : "";
var isNodeSelected = node.IsSelected(SelectedDocumentName);
var listItemCss = node.HasChildItems ? "nav-header" : "last-link";
@ -123,31 +125,36 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
}
else
{
var badge = "";
var badgeStringBuilder = new StringBuilder();
if (!node.Path.IsNullOrWhiteSpace() && node.CreationTime.HasValue && node.LastUpdatedTime.HasValue)
{
if(node.CreationTime + TimeSpan.FromDays(14) > DateTime.Now)
{
var newBadge = "<span class='badge badge-primary ml-2' title=\"" + _localizer["NewExplanation"] + "\">" + _localizer["New"] + "</span>";
badge += newBadge;
var newBadge = sb.Append("<span class='badge badge-primary ml-2' title=\"").Append(_localizer["NewExplanation"]).Append("\">").Append(_localizer["New"]).Append("</span>").ToString();
badgeStringBuilder.Append(newBadge);
}
else if (node.LastSignificantUpdateTime != null && node.LastSignificantUpdateTime + TimeSpan.FromDays(14) > DateTime.Now)
{
var updBadge = "<span class='badge badge-light ml-2' title=\"" + _localizer["UpdatedExplanation"] + "\">" + _localizer["Upd"] + "</span>";
badge += updBadge;
var updBadge = sb.Append("<span class='badge badge-light ml-2' title=\"").Append(_localizer["UpdatedExplanation"]).Append("\">").Append(_localizer["Upd"]).Append("</span>");
badgeStringBuilder.Append(updBadge);
}
}
sb.Clear();
listInnerItem = string.Format(ListItemAnchor, NormalizePath(node.Path), textCss,
node.Text.IsNullOrEmpty()
? "?"
: node.Text + badge);
: sb.Append(node.Text).Append(badgeStringBuilder).ToString());
}
sb.Clear();
return string.Format(LiItemTemplateWithLink,
listItemCss,
node.HasChildItems ? "chevron-right" : "long-arrow-right " + (node.Path.IsNullOrEmpty() ? "no-link" : "has-link"),
node.HasChildItems ? "chevron-right" : sb.Append("long-arrow-right ").Append(node.Path.IsNullOrEmpty() ? "no-link" : "has-link").ToString(),
listInnerItem,
content);
}
@ -168,7 +175,8 @@ namespace Volo.Docs.Areas.Documents.TagHelpers
var prefix = _uiOptions.RoutePrefix;
return prefix + LanguageCode + "/" + ProjectName + "/" + Version + "/" + pathWithoutFileExtension;
var sb = new StringBuilder();
return sb.Append(prefix).Append(LanguageCode).Append("/").Append(ProjectName).Append("/").Append(Version).Append("/").Append(pathWithoutFileExtension).ToString();
}
private string RemoveFileExtensionFromPath(string path)

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using Volo.Docs.Utils;
@ -34,7 +35,12 @@ namespace Volo.Docs.HtmlConverting
public static string ReplaceCodeBlocksLanguage(string content, string currentLanguage, string newLanguage)
{
return Regex.Replace(content, "<code class=\"" + currentLanguage + "\">", "<code class=\"" + newLanguage + "\">", RegexOptions.IgnoreCase);
var sb = new StringBuilder();
var pattern = sb.Append("<code class=\"").Append(currentLanguage).Append("\">").ToString();
sb.Clear();
var replacement = sb.Append("<code class=\"").Append(newLanguage).Append("\">").ToString();
return Regex.Replace(content, pattern, replacement, RegexOptions.IgnoreCase);
}
/// <summary>

@ -209,11 +209,15 @@ namespace Volo.Docs.Pages.Documents.Project
private IActionResult ReloadPageWithCulture()
{
var returnUrl = DocumentsUrlPrefix + LanguageCode + "/" + ProjectName + "/"
+ (LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version) + "/" +
DocumentName;
var sb = new StringBuilder();
return Redirect("/Abp/Languages/Switch?culture=" + LanguageCode + "&uiCulture=" + LanguageCode + "&returnUrl=" + returnUrl);
var returnUrl = sb.Append(DocumentsUrlPrefix).Append(LanguageCode).Append("/").Append(ProjectName)
.Append("/").Append(LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version).Append("/").Append(DocumentName);
sb.Clear();
return Redirect(sb.Append("/Abp/Languages/Switch?culture=").Append(LanguageCode).Append("&uiCulture=")
.Append(LanguageCode).Append("&returnUrl=").Append(returnUrl).ToString());
}
private IActionResult RedirectToDefaultLanguage()
@ -242,10 +246,12 @@ namespace Volo.Docs.Pages.Documents.Project
{
var projects = await _projectAppService.GetListAsync();
var sb = new StringBuilder();
ProjectSelectItems = projects.Items.Select(p => new SelectListItem
{
Text = p.Name,
Value = p.Id != Project.Id ? DocumentsUrlPrefix + LanguageCode + "/" + p.ShortName + "/" + DocsAppConsts.Latest : null,
Value = p.Id != Project.Id ? sb.Append(DocumentsUrlPrefix).Append(LanguageCode).Append("/").Append(p.ShortName).Append("/").Append(DocsAppConsts.Latest).ToString() : null,
Selected = p.Id == Project.Id
}).ToList();
}
@ -383,14 +389,15 @@ namespace Volo.Docs.Pages.Documents.Project
version = DocsAppConsts.Latest;
}
var link = DocumentsUrlPrefix + LanguageCode + "/" + ProjectName + "/" + version;
var linkStringBuilder = new StringBuilder();
linkStringBuilder.Append(DocumentsUrlPrefix).Append(LanguageCode).Append("/").Append(ProjectName).Append("/").Append(version);
if (documentName != null)
{
link += "/" + DocumentName;
linkStringBuilder.Append("/").Append(DocumentName);
}
return link;
return linkStringBuilder.ToString();
}
public string GetSpecificVersionOrLatest()
@ -407,7 +414,8 @@ namespace Volo.Docs.Pages.Documents.Project
private async Task SetDocumentAsync()
{
DocumentNameWithExtension = DocumentName + "." + Project.Format;
var sb = new StringBuilder();
DocumentNameWithExtension = sb.Append(DocumentName).Append(".").Append(Project.Format).ToString();
try
{
@ -435,12 +443,14 @@ namespace Volo.Docs.Pages.Documents.Project
{
LanguageSelectListItems = new List<SelectListItem>();
var sb = new StringBuilder();
foreach (var language in LanguageConfig.Languages)
{
LanguageSelectListItems.Add(
new SelectListItem(
language.DisplayName,
DocumentsUrlPrefix + language.Code + "/" + Project.ShortName + "/" + (LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version) + "/" + DocumentName,
sb.Append(DocumentsUrlPrefix).Append(language.Code).Append("/").Append(Project.ShortName).Append("/").Append(LatestVersionInfo.IsSelected ? DocsAppConsts.Latest : Version).Append("/").Append(DocumentName).ToString(),
language.Code == LanguageCode
)
);
@ -614,8 +624,8 @@ namespace Volo.Docs.Pages.Documents.Project
}
);
}
else
{
return await _documentAppService.GetAsync(
new GetDocumentInput
{
@ -626,7 +636,6 @@ namespace Volo.Docs.Pages.Documents.Project
}
);
}
}
private async Task SetDocumentPreferencesAsync()
{

Loading…
Cancel
Save