summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-03-12 15:23:44 +0800
committerGitHub <noreply@github.com>2024-03-12 07:23:44 +0000
commitd8bd6f34f09bc9a6602bebb33bdc9e1f255a0d7c (patch)
tree1536b715fb816410535893e7ba10279d89119638 /routers
parentaed3b53abdd02a3ffbf9e8eb90272ff567333073 (diff)
downloadgitea-d8bd6f34f09bc9a6602bebb33bdc9e1f255a0d7c.tar.gz
gitea-d8bd6f34f09bc9a6602bebb33bdc9e1f255a0d7c.zip
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>
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/repo/issue_comment.go4
-rw-r--r--routers/web/repo/issue.go39
-rw-r--r--routers/web/repo/pull_review.go8
3 files changed, 20 insertions, 31 deletions
diff --git a/routers/api/v1/repo/issue_comment.go b/routers/api/v1/repo/issue_comment.go
index 21aabadf3d..070571ba62 100644
--- a/routers/api/v1/repo/issue_comment.go
+++ b/routers/api/v1/repo/issue_comment.go
@@ -323,10 +323,6 @@ func ListRepoIssueComments(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadIssues", err)
return
}
- if err := comments.LoadPosters(ctx); err != nil {
- ctx.Error(http.StatusInternalServerError, "LoadPosters", err)
- return
- }
if err := comments.LoadAttachments(ctx); err != nil {
ctx.Error(http.StatusInternalServerError, "LoadAttachments", err)
return
diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go
index 83a5b76bf1..8935cc80e2 100644
--- a/routers/web/repo/issue.go
+++ b/routers/web/repo/issue.go
@@ -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 {
diff --git a/routers/web/repo/pull_review.go b/routers/web/repo/pull_review.go
index bce807aacd..5385ebfc97 100644
--- a/routers/web/repo/pull_review.go
+++ b/routers/web/repo/pull_review.go
@@ -179,11 +179,9 @@ func renderConversation(ctx *context.Context, comment *issues_model.Comment, ori
return
}
- for _, c := range comments {
- if err := c.LoadAttachments(ctx); err != nil {
- ctx.ServerError("LoadAttachments", err)
- return
- }
+ if err := comments.LoadAttachments(ctx); err != nil {
+ ctx.ServerError("LoadAttachments", err)
+ return
}
ctx.Data["IsAttachmentEnabled"] = setting.Attachment.Enabled