feat(提升性能): 继续优化性能
build.yaml / build (push) Successful in 36s

This commit is contained in:
2026-07-14 10:21:21 +08:00
parent c17aae5a74
commit 3fecdbf89e
6 changed files with 23 additions and 15 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ go 1.25.0
require ( require (
github.com/tdewolff/canvas v0.0.0-20260708151538-b3beae08c578 github.com/tdewolff/canvas v0.0.0-20260708151538-b3beae08c578
github.com/tdewolff/font v0.0.0-20260527091451-1663e68cb8a4 github.com/tdewolff/font v0.0.0-20260527091451-1663e68cb8a4
github.com/xiaoqidun/jbig2 v0.0.0-20260710074125-96fddd152f49 github.com/xiaoqidun/jbig2 v0.0.0-20260714021516-ffe617d6fbc8
golang.org/x/image v0.44.0 golang.org/x/image v0.44.0
golang.org/x/text v0.40.0 golang.org/x/text v0.40.0
) )
+2 -2
View File
@@ -73,8 +73,8 @@ github.com/tdewolff/test v1.0.12 h1:7F21DqIajswxuche0geHdrUZRCWE4oko4b7bcmkkrxk=
github.com/tdewolff/test v1.0.12/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/tdewolff/test v1.0.12/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8=
github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E= github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E=
github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ= github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ=
github.com/xiaoqidun/jbig2 v0.0.0-20260710074125-96fddd152f49 h1:h/1lOG9/75eK4atpQFcm9oGXmxekMVfsPJowtYLXu5w= github.com/xiaoqidun/jbig2 v0.0.0-20260714021516-ffe617d6fbc8 h1:HSruvQiN+t72xcn4VQyvB4GRCyX0dnu3+6k4DFnmPvM=
github.com/xiaoqidun/jbig2 v0.0.0-20260710074125-96fddd152f49/go.mod h1:4ieZvd1EYR3zUzaAT4H8vLDb6XO+yjnxuh33So/5iC4= github.com/xiaoqidun/jbig2 v0.0.0-20260714021516-ffe617d6fbc8/go.mod h1:4ieZvd1EYR3zUzaAT4H8vLDb6XO+yjnxuh33So/5iC4=
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+1
View File
@@ -73,6 +73,7 @@ func NewRenderer(reader *Reader, opts ...RendererOption) *Renderer {
FontMap: make(map[string]*canvas.FontFamily), FontMap: make(map[string]*canvas.FontFamily),
fontFSCache: make(map[fontFSKey]*canvas.FontFamily), fontFSCache: make(map[fontFSKey]*canvas.FontFamily),
textGlyphPathCache: make(map[textGlyphPathCacheKey]textGlyphPathCacheValue), textGlyphPathCache: make(map[textGlyphPathCacheKey]textGlyphPathCacheValue),
templatePageCache: make(map[string]*PageContent),
} }
for _, opt := range opts { for _, opt := range opts {
opt(r) opt(r)
+1
View File
@@ -291,6 +291,7 @@ func (r *Renderer) fontUsage(doc *Document, pages []*PageContent) map[string]int
for _, tpl := range doc.CommonData.TemplatePage { for _, tpl := range doc.CommonData.TemplatePage {
page, err := r.Reader.PageContent(Page{BaseLoc: tpl.BaseLoc}) page, err := r.Reader.PageContent(Page{BaseLoc: tpl.BaseLoc})
if err == nil { if err == nil {
r.templatePageCache[tpl.ID] = page
r.countPageFonts(page, usage) r.countPageFonts(page, usage)
} }
} }
+1
View File
@@ -35,6 +35,7 @@ type Renderer struct {
FontCIDMap map[string]map[uint16]rune FontCIDMap map[string]map[uint16]rune
fontFSCache map[fontFSKey]*canvas.FontFamily fontFSCache map[fontFSKey]*canvas.FontFamily
textGlyphPathCache map[textGlyphPathCacheKey]textGlyphPathCacheValue textGlyphPathCache map[textGlyphPathCacheKey]textGlyphPathCacheValue
templatePageCache map[string]*PageContent
fontDirs []string fontDirs []string
fontFS []fs.FS fontFS []fs.FS
} }
+17 -12
View File
@@ -38,19 +38,24 @@ func (r *Renderer) renderAnnotations(ctx *canvas.Context, pageID string, pageH f
// renderTemplate 渲染模板 // renderTemplate 渲染模板
// 入参: ctx 画布上下文, templateID 模板ID, pageH 页面高度 // 入参: ctx 画布上下文, templateID 模板ID, pageH 页面高度
func (r *Renderer) renderTemplate(ctx *canvas.Context, templateID string, pageH float64) { func (r *Renderer) renderTemplate(ctx *canvas.Context, templateID string, pageH float64) {
var tplPage *TemplatePage tplContent := r.templatePageCache[templateID]
for _, tp := range r.Reader.doc.CommonData.TemplatePage { if tplContent == nil {
if tp.ID == templateID { var tplPage *TemplatePage
tplPage = &tp for i := range r.Reader.doc.CommonData.TemplatePage {
break if r.Reader.doc.CommonData.TemplatePage[i].ID == templateID {
tplPage = &r.Reader.doc.CommonData.TemplatePage[i]
break
}
} }
} if tplPage == nil {
if tplPage == nil { return
return }
} var err error
tplContent, err := r.Reader.PageContent(Page{BaseLoc: tplPage.BaseLoc}) tplContent, err = r.Reader.PageContent(Page{BaseLoc: tplPage.BaseLoc})
if err != nil { if err != nil {
return return
}
r.templatePageCache[templateID] = tplContent
} }
if tplContent.Content.Layer != nil { if tplContent.Content.Layer != nil {
for _, layer := range tplContent.Content.Layer { for _, layer := range tplContent.Content.Layer {