From a2abfc596965111c28ea43d9ab986732692e022f Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Tue, 28 Jun 2022 17:49:14 +0900 Subject: Write response as soon as data is ready Previously the entire archive had to be read before the template is executed, thus large archives takes forever to render from slow backing FS. --- main.go | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index b364d20..dfc01a5 100644 --- a/main.go +++ b/main.go @@ -48,7 +48,6 @@ type Archive struct { Title string Prev string Next string - Entries []Page } // Type Directory represents a library directory in file system. @@ -147,7 +146,17 @@ func main() { // Render archive page entries, _ := os.ReadDir(path.Join(p, "..")) index := find(entries, stat.Name()) - var pages []Page + prev := "" + if index > 0 { + prev = entries[index-1].Name() + } + next := "" + if index < len(entries)-1 { + next = entries[index+1].Name() + } + t.ExecuteTemplate(w, "archive-head.html", + Archive{ stat.Name(), prev, next }) + for i, f := range cbz.File { image, _ := cbz.File[i].Open() defer image.Close() @@ -155,21 +164,11 @@ func main() { n, _ := image.Read(buf) mime := http.DetectContentType(buf[:n]) if strings.HasPrefix(mime, "image/") { - pages = append(pages, Page{i, f.Name}) + t.ExecuteTemplate(w, "archive-page.html", + Page{i, f.Name}) } } - - prev := "" - if index > 0 { - prev = entries[index-1].Name() - } - next := "" - if index < len(entries)-1 { - next = entries[index+1].Name() - } - t.ExecuteTemplate(w, "archive.html", Archive{ - stat.Name(), prev, next, pages, - }) + t.ExecuteTemplate(w, "archive-foot.html", nil) }) addr := os.Getenv("PHYLACTERY_ADDRESS") -- cgit 1.4.1