Do some performance optimize for issues list and view issue/pull (#29515)
This PR do some performance optimzations. - [x] Add `index` for the column `comment_id` of `Attachment` table to accelerate query from the database. - [x] Remove unnecessary database queries when viewing issues. Before some conditions which id = 0 will be sent to the database - [x] Remove duplicated load posters - [x] Batch loading attachements, isread of comments on viewing issue --------- Co-authored-by: Zettat123 <zettat123@gmail.com>
This commit is contained in:
parent
aed3b53abd
commit
d8bd6f34f0
10 changed files with 121 additions and 61 deletions
|
@ -324,15 +324,15 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption opt
|
|||
return
|
||||
}
|
||||
|
||||
// Get posters.
|
||||
for i := range issues {
|
||||
// Check read status
|
||||
if !ctx.IsSigned {
|
||||
issues[i].IsRead = true
|
||||
} else if err = issues[i].GetIsRead(ctx, ctx.Doer.ID); err != nil {
|
||||
ctx.ServerError("GetIsRead", err)
|
||||
if ctx.IsSigned {
|
||||
if err := issues.LoadIsRead(ctx, ctx.Doer.ID); err != nil {
|
||||
ctx.ServerError("LoadIsRead", err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
for i := range issues {
|
||||
issues[i].IsRead = true
|
||||
}
|
||||
}
|
||||
|
||||
commitStatuses, lastStatus, err := pull_service.GetIssuesAllCommitStatus(ctx, issues)
|
||||
|
@ -1604,20 +1604,20 @@ func ViewIssue(ctx *context.Context) {
|
|||
|
||||
// Render comments and and fetch participants.
|
||||
participants[0] = issue.Poster
|
||||
|
||||
if err := issue.Comments.LoadAttachmentsByIssue(ctx); err != nil {
|
||||
ctx.ServerError("LoadAttachmentsByIssue", err)
|
||||
return
|
||||
}
|
||||
if err := issue.Comments.LoadPosters(ctx); err != nil {
|
||||
ctx.ServerError("LoadPosters", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, comment = range issue.Comments {
|
||||
comment.Issue = issue
|
||||
|
||||
if err := comment.LoadPoster(ctx); err != nil {
|
||||
ctx.ServerError("LoadPoster", err)
|
||||
return
|
||||
}
|
||||
|
||||
if comment.Type == issues_model.CommentTypeComment || comment.Type == issues_model.CommentTypeReview {
|
||||
if err := comment.LoadAttachments(ctx); err != nil {
|
||||
ctx.ServerError("LoadAttachments", err)
|
||||
return
|
||||
}
|
||||
|
||||
comment.RenderedContent, err = markdown.RenderString(&markup.RenderContext{
|
||||
Links: markup.Links{
|
||||
Base: ctx.Repo.RepoLink,
|
||||
|
@ -1665,7 +1665,6 @@ func ViewIssue(ctx *context.Context) {
|
|||
comment.Milestone = ghostMilestone
|
||||
}
|
||||
} else if comment.Type == issues_model.CommentTypeProject {
|
||||
|
||||
if err = comment.LoadProject(ctx); err != nil {
|
||||
ctx.ServerError("LoadProject", err)
|
||||
return
|
||||
|
@ -1731,10 +1730,6 @@ func ViewIssue(ctx *context.Context) {
|
|||
for _, codeComments := range comment.Review.CodeComments {
|
||||
for _, lineComments := range codeComments {
|
||||
for _, c := range lineComments {
|
||||
if err := c.LoadAttachments(ctx); err != nil {
|
||||
ctx.ServerError("LoadAttachments", err)
|
||||
return
|
||||
}
|
||||
// Check tag.
|
||||
role, ok = marked[c.PosterID]
|
||||
if ok {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue