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 ++++++++++++++--------------- templates/archive-foot.html | 2 ++ templates/archive-head.html | 12 ++++++++++++ templates/archive-page.html | 1 + templates/archive.html | 15 --------------- 5 files changed, 29 insertions(+), 30 deletions(-) create mode 100644 templates/archive-foot.html create mode 100644 templates/archive-head.html create mode 100644 templates/archive-page.html delete mode 100644 templates/archive.html 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") diff --git a/templates/archive-foot.html b/templates/archive-foot.html new file mode 100644 index 0000000..1e370b9 --- /dev/null +++ b/templates/archive-foot.html @@ -0,0 +1,2 @@ + +{{template "base-foot.html" -}} diff --git a/templates/archive-head.html b/templates/archive-head.html new file mode 100644 index 0000000..ed643e3 --- /dev/null +++ b/templates/archive-head.html @@ -0,0 +1,12 @@ +{{template "base-head.html" -}} + +{{.Title}} + + +
diff --git a/templates/archive-page.html b/templates/archive-page.html new file mode 100644 index 0000000..8011ece --- /dev/null +++ b/templates/archive-page.html @@ -0,0 +1 @@ + {{.Name}} diff --git a/templates/archive.html b/templates/archive.html deleted file mode 100644 index 619a5bc..0000000 --- a/templates/archive.html +++ /dev/null @@ -1,15 +0,0 @@ -{{template "base-head.html" -}} - -{{.Title}} - - -
{{range .Entries}} - {{.Name}}{{end}} -
-{{template "base-foot.html" -}} -- cgit 1.4.1