運行時加載博客程序運行的時候,初始化db連接時,就已經把一些需要用到的數據從數據庫取出來,以后都不要再次查詢,所以博客的性能還是不錯的, 該邏輯代碼在
func init() {
數據庫加索引
err := mgo.Index(DB, COLLECTION_ACCOUNT, []string{"username"})
if err != nil {
logd.Fatal(err)
}
err = mgo.Index(DB, COLLECTION_ARTICLE, []string{"id"})
if err != nil {
logd.Fatal(err)
}
err = mgo.Index(DB, COLLECTION_ARTICLE, []string{"slug"})
if err != nil {
logd.Fatal(err)
}
// 讀取帳號信息
loadAccount()
// 獲取文章數據
loadArticles()
// 生成markdown文檔
// 在這里初始化拿文章的數據內容, 初始函數算出當前頁數的文章,做了分頁處理
go generateMarkdown()
// 啟動定時器
go timer()
// 獲取評論數量
go PostsCount()
}
裝載文章信息,例如標題,內容,標簽等,邏輯代碼在
func loadArticles() {
err := mgo.FindAll(DB, COLLECTION_ARTICLE, mgo.M{"isdraft": false, "deletetime": mgo.M{"$eq": time.Time{}}}, &Ei.Articles)
if err != nil {
logd.Fatal(err)
}
sort.Sort(Ei.Articles)
for i, v := range Ei.Articles {
// 渲染文章
GenerateExcerptAndRender(v)
Ei.MapArticles[v.Slug] = v
// 分析文章
if v.ID < setting.Conf.General.StartID {
continue
}
if i > 0 {
v.Prev = Ei.Articles[i-1]
}
if Ei.Articles[i+1].ID >= setting.Conf.General.StartID {
v.Next = Ei.Articles[i+1]
}
upArticle(v, false)
}
Ei.CH <- SERIES_MD
Ei.CH <- ARCHIVE_MD
}
把一些需要的文章信息從數據庫取出來
err := mgo.FindAll(DB, COLLECTION_ARTICLE, mgo.M{"isdraft": false, "deletetime": mgo.M{"$eq": time.Time{}}}, &Ei.Articles)
上面是把數據庫需要的一些數據進行初始裝載, 至于對系統使用的 Ei 變量的一些信息, 就是在這個函數進行初始化的
func upArticle(artc *Article, needSort bool) {
// tag
for _, tag := range artc.Tags {
Ei.Tags[tag] = append(Ei.Tags[tag], artc)
if needSort {
sort.Sort(Ei.Tags[tag])
}
}
// serie
for i, serie := range Ei.Series {
if serie.ID == artc.SerieID {
Ei.Series[i].Articles = append(Ei.Series[i].Articles, artc)
if needSort {
sort.Sort(Ei.Series[i].Articles)
Ei.CH <- SERIES_MD
}
break
}
}
// archive
y, m, _ := artc.CreateTime.Date()
for i, archive := range Ei.Archives {
if ay, am, _ := archive.Time.Date(); y == ay && m == am {
Ei.Archives[i].Articles = append(Ei.Archives[i].Articles, artc)
if needSort {
sort.Sort(Ei.Archives[i].Articles)
Ei.CH <- ARCHIVE_MD
}
return
}
}
Ei.Archives = append(Ei.Archives, &Archive{Time: artc.CreateTime,
Articles: SortArticles{artc}})
if needSort {
Ei.CH <- ARCHIVE_MD
}
}
上面這個函數的調用發生在
// 在函數 loadArticles 處
upArticle(newArtc, true)
本文鏈接:http://www.tfdwme.live/post/def1bd58.html,參與評論 ?
--EOF--
發表于 2019-06-21 10:57:00,并被添加「eiblog」標簽。
本站使用「署名 4.0 國際」創作共享協議,轉載請注明作者及原網址。更多說明 ?
提醒:本文最后更新于 114 天前,文中所描述的信息可能已發生改變,請謹慎使用。
專題「架構」的其它文章 ?
- 一張圖,一段代碼解釋RPC是怎么回事 (Mar 03, 2019)
- Golang熱更新 (Jan 12, 2019)
- Kafka實戰-Kafka到Storm (Jan 10, 2019)
- K8S 部署一個完整項目案例 (Jan 05, 2019)
Comments