Use preloads and defer to speed up page loads

This commit is contained in:
Zed 2021-01-03 01:36:53 +01:00
parent 18988a6a55
commit b3b0654507

View file

@ -32,7 +32,7 @@ proc renderNavbar*(title, rss: string; req: Request): VNode =
iconReferer "cog", "/settings", path, title="Preferences"
proc renderHead*(prefs: Prefs; cfg: Config; titleText=""; desc=""; video="";
images: seq[string] = @[]; ogTitle=""): VNode =
images: seq[string] = @[]; ogTitle=""; theme=""; rss=""): VNode =
let ogType =
if video.len > 0: "video"
elif images.len > 0: "photo"
@ -45,8 +45,17 @@ proc renderHead*(prefs: Prefs; cfg: Config; titleText=""; desc=""; video="";
opensearchUrl = "http://" & cfg.hostname & "/opensearch"
buildHtml(head):
link(rel="stylesheet", `type`="text/css", href="/css/style.css?v=3")
link(rel="stylesheet", `type`="text/css", href="/css/fontello.css?v=2")
link(rel="preload", type="text/css", href="/css/style.css?v=3", `as`="style")
link(rel="preload", type="text/css", href="/css/fontello.css?v=2", `as`="style")
link(rel="preload", href="/fonts/fontello.woff2?21002321", `as`="font")
link(rel="stylesheet", type="text/css", href="/css/style.css?v=3")
link(rel="stylesheet", type="text/css", href="/css/fontello.css?v=2")
if theme.len > 0:
link(rel="preload", type="text/css", href=(&"/css/themes/{theme}.css"), `as`="style")
link(rel="stylesheet", type="text/css", href=(&"/css/themes/{theme}.css"))
link(rel="apple-touch-icon", sizes="180x180", href="/apple-touch-icon.png")
link(rel="icon", type="image/png", sizes="32x32", href="/favicon-32x32.png")
link(rel="icon", type="image/png", sizes="16x16", href="/favicon-16x16.png")
@ -55,12 +64,15 @@ proc renderHead*(prefs: Prefs; cfg: Config; titleText=""; desc=""; video="";
link(rel="search", type="application/opensearchdescription+xml", title=cfg.title,
href=opensearchUrl)
if rss.len > 0:
link(rel="alternate", type="application/rss+xml", href=rss, title="RSS feed")
if prefs.hlsPlayback:
script(src="/js/hls.light.min.js")
script(src="/js/hlsPlayback.js")
script(src="/js/hls.light.min.js", `defer`="")
script(src="/js/hlsPlayback.js", `defer`="")
if prefs.infiniteScroll:
script(src="/js/infiniteScroll.js")
script(src="/js/infiniteScroll.js", `defer`="")
title:
if titleText.len > 0:
@ -92,12 +104,7 @@ proc renderMain*(body: VNode; req: Request; cfg: Config; prefs=defaultPrefs;
theme = toLowerAscii(req.params["theme"]).replace(" ", "_")
let node = buildHtml(html(lang="en")):
renderHead(prefs, cfg, titleText, desc, video, images, ogTitle):
if theme.len > 0:
link(rel="stylesheet", `type`="text/css", href=(&"/css/themes/{theme}.css"))
if rss.len > 0:
link(rel="alternate", `type`="application/rss+xml", href=rss, title="RSS feed")
renderHead(prefs, cfg, titleText, desc, video, images, ogTitle, theme, rss)
body:
renderNavbar(cfg.title, rss, req)