關于eiblog的二次修改流程記錄

運行時加載博客程序運行的時候,初始化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)

本文鏈接:參與評論 ?

--EOF--

提醒:本文最后更新于 114 天前,文中所描述的信息可能已發生改變,請謹慎使用。

專題「架構」的其它文章 ?

Comments

toto足球指数