Skip to content

Commit a14fd5b

Browse files
Merge pull request #6 from netresearch/perf/prerender-index
2 parents 73466fe + 3e90936 commit a14fd5b

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

internal/web/templates/templates.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package templates
22

3-
import "embed"
3+
import (
4+
"bytes"
5+
_ "embed"
6+
"html/template"
47

5-
//go:embed *.html
6-
var Templates embed.FS
8+
"github.com/netresearch/ldap-selfservice-password-changer/internal/options"
9+
)
10+
11+
//go:embed index.html
12+
var rawIndex string
713

814
type InputOpts struct {
915
Name string
@@ -24,3 +30,23 @@ func MakeInputOpts(name, placeholder, type_, autocomplete string) InputOpts {
2430
autocomplete,
2531
}
2632
}
33+
34+
func RenderIndex(opts *options.Opts) ([]byte, error) {
35+
funcs := template.FuncMap{"InputOpts": MakeInputOpts}
36+
37+
tpl, err := template.New("index").Funcs(funcs).Parse(rawIndex)
38+
if err != nil {
39+
return nil, err
40+
}
41+
42+
data := map[string]any{
43+
"opts": opts,
44+
}
45+
46+
var buf bytes.Buffer
47+
if err = tpl.ExecuteTemplate(&buf, "index", data); err != nil {
48+
return nil, err
49+
}
50+
51+
return buf.Bytes(), nil
52+
}

main.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"github.com/gofiber/fiber/v2"
88
"github.com/gofiber/fiber/v2/middleware/compress"
99
"github.com/gofiber/fiber/v2/middleware/filesystem"
10-
"github.com/gofiber/template/html/v2"
1110
"github.com/netresearch/ldap-selfservice-password-changer/internal/options"
1211
"github.com/netresearch/ldap-selfservice-password-changer/internal/rpc"
1312
"github.com/netresearch/ldap-selfservice-password-changer/internal/web/static"
@@ -22,13 +21,14 @@ func main() {
2221
log.Fatalf("An error occurred during initialization: %v", err)
2322
}
2423

25-
views := html.NewFileSystem(http.FS(templates.Templates), ".html")
26-
views.AddFunc("InputOpts", templates.MakeInputOpts)
24+
index, err := templates.RenderIndex(opts)
25+
if err != nil {
26+
log.Fatalf("An error occurred during rendering the page: %v", err)
27+
}
2728

2829
app := fiber.New(fiber.Config{
2930
AppName: "netresearch/ldap-selfservice-password-changer",
3031
BodyLimit: 4 * 1024,
31-
Views: views,
3232
})
3333

3434
app.Use(compress.New(compress.Config{
@@ -41,9 +41,8 @@ func main() {
4141
}))
4242

4343
app.Get("/", func(c *fiber.Ctx) error {
44-
return c.Render("index", fiber.Map{
45-
"opts": opts,
46-
})
44+
c.Set("Content-Type", fiber.MIMETextHTMLCharsetUTF8)
45+
return c.Send(index)
4746
})
4847

4948
app.Post("/api/rpc", rpcHandler.Handle)

0 commit comments

Comments
 (0)