Browse Source

#3169

repo square:improve loading speed
tags/v1.22.12.1^2
chenyifan01 2 years ago
parent
commit
0cfbbf06c5
3 changed files with 99 additions and 7 deletions
  1. +2
    -0
      modules/setting/setting.go
  2. +16
    -6
      routers/home.go
  3. +81
    -1
      services/repository/square.go

+ 2
- 0
modules/setting/setting.go View File

@@ -668,6 +668,7 @@ var (

//repo square config
IncubationSourceOrgId int64
PaperRepoTopicName string

//nginx proxy
PROXYURL string
@@ -1579,6 +1580,7 @@ func NewContext() {

sec = Cfg.Section("repo-square")
IncubationSourceOrgId = sec.Key("INCUBATION_ORG_ID").MustInt64(9)
PaperRepoTopicName = sec.Key("PAPER_REPO_TOPIC_NAME").MustString("openi-paper")

sec = Cfg.Section("point")
CloudBrainPaySwitch = sec.Key("CLOUDBRAIN_PAY_SWITCH").MustBool(false)


+ 16
- 6
routers/home.go View File

@@ -7,8 +7,8 @@ package routers

import (
"bytes"
"encoding/json"
"code.gitea.io/gitea/routers/response"
"encoding/json"
"net/http"
"strconv"
"strings"
@@ -300,9 +300,19 @@ func ExploreRepos(ctx *context.Context) {
}

func GetRepoSquarePage(ctx *context.Context) {
//banner
ctx.Data["SquareBanners"] = repository.GetBanners()
//配置的标签
ctx.Data["SquareTopics"] = repository.GetTopics()
ctx.Data["SquareRecommendRepos"] = repository.GetRecommendRepos()

repos, _ := repository.GetPreferredRepos()
ctx.Data["SquarePreferredRepos"] = repos
//领域精选
ctx.HTML(200, tplRepoSquare)
}
func GetRepoSearchPage(ctx *context.Context) {
ctx.Data["Topics"] = repository.GetTopics()
ctx.HTML(200, tplRepoSearch)
}

@@ -361,11 +371,11 @@ func RepoFind(ctx *context.Context) {
topic := strings.Trim(ctx.Query("topic"), " ")
sort := strings.Trim(ctx.Query("sort"), " ")
page := ctx.QueryInt("page")
pageSize := models.AvailablePageSize(ctx.QueryInt("pageSize"))
pageSize := ctx.QueryInt("pageSize")
if pageSize == 0 {
pageSize = models.PageSize15
pageSize = 15
}
if !pageSize.IsLegal() {
if pageSize > 100 {
ctx.JSON(http.StatusOK, response.ServerError("pageSize illegal"))
return
}
@@ -379,7 +389,7 @@ func RepoFind(ctx *context.Context) {
}

result, err := repository.FindRepos(repository.FindReposOptions{
ListOptions: models.ListOptions{Page: page, PageSize: pageSize.Int()},
ListOptions: models.ListOptions{Page: page, PageSize: pageSize},
Actor: ctx.User,
Sort: sort,
Keyword: keyword,
@@ -966,4 +976,4 @@ func HomePrivacy(ctx *context.Context) {

func HomeResoruceDesc(ctx *context.Context) {
ctx.HTML(200, tplResoruceDesc)
}
}

+ 81
- 1
services/repository/square.go View File

@@ -4,9 +4,87 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"encoding/json"
"github.com/patrickmn/go-cache"
"time"
)

var repoSquareCache = cache.New(2*time.Minute, 1*time.Minute)

const (
RREFERED_CACHE = "PreferredRepos"
REPO_BANNER_CACHE = "RepoBanner"
TOPICS_CACHE = "RepoTopics"
RECOMMEND_CACHE = "RecommendRepos"
)

func GetBanners() []map[string]string {
v, success := repoSquareCache.Get(REPO_BANNER_CACHE)
if success {
log.Debug("GetBanners from cache,value = %v", v)
if v == nil {
return nil
}
r := v.([]map[string]string)
return r
}
repoMap := getMapContent("repos/square_banner")
repoSquareCache.Set(REPO_BANNER_CACHE, repoMap, 1*time.Minute)
return repoMap
}

func GetTopics() []map[string]string {
v, success := repoSquareCache.Get(TOPICS_CACHE)
if success {
log.Debug("GetTopics from cache,value = %v", v)
if v == nil {
return nil
}
r := v.([]map[string]string)
return r
}
repoMap := getMapContent("repos/recommend_topics")
repoSquareCache.Set(TOPICS_CACHE, repoMap, 1*time.Minute)
return repoMap
}

func getMapContent(fileName string) []map[string]string {
url := setting.RecommentRepoAddr + fileName
result, err := RecommendContentFromPromote(url)
remap := make([]map[string]string, 0)
if err == nil {
json.Unmarshal([]byte(result), &remap)
}
return remap
}

func GetRecommendRepos() []map[string]interface{} {
v, success := repoSquareCache.Get(RECOMMEND_CACHE)
if success {
log.Debug("GetRecommendRepos from cache,value = %v", v)
if v == nil {
return nil
}
r := v.([]map[string]interface{})
return r
}
repoMap := getMapContent("home/projects")
r, _ := GetRecommendRepoFromPromote(repoMap)
repoSquareCache.Set(RECOMMEND_CACHE, r, 1*time.Minute)
return r
}

func GetPreferredRepos() ([]*models.Repository4Card, error) {
v, success := repoSquareCache.Get(RREFERED_CACHE)
if success {
log.Debug("GetPreferredRepos from cache,value = %v", v)
if v == nil {
return nil, nil
}
r := v.([]*models.Repository4Card)
return r, nil
}

repos, err := models.GetSelectedRepos(models.FindSelectedReposOpts{
ListOptions: models.ListOptions{
PageSize: 10,
@@ -21,6 +99,8 @@ func GetPreferredRepos() ([]*models.Repository4Card, error) {
for i, r := range repos {
result[i] = r.ToCardFormat()
}

repoSquareCache.Set(RREFERED_CACHE, result, 1*time.Minute)
return result, nil
}

@@ -51,7 +131,7 @@ func GetHotPaperRepos() ([]*models.Repository4Card, error) {
},
OrderBy: models.SearchOrderByLastMonthVisitsReverse + "," + models.SearchOrderByRecentUpdated,
TopicOnly: true,
TopicName: "openi-paper",
TopicName: setting.PaperRepoTopicName,
AllPublic: true,
})
if err != nil {


Loading…
Cancel
Save