<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Suche on Natenoms Blog</title><link>https://natenom.de/tags/suche/</link><description>Recent content in Suche on Natenoms Blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright/><lastBuildDate>Fri, 27 Oct 2023 22:52:53 +0200</lastBuildDate><atom:link href="https://natenom.de/tags/suche/index.xml" rel="self" type="application/rss+xml"/><item><title>Suche im Wiki verbessert</title><link>https://natenom.de/2023/10/suche-im-wiki-verbessert/</link><pubDate>Fri, 27 Oct 2023 22:52:53 +0200</pubDate><guid>https://natenom.de/2023/10/suche-im-wiki-verbessert/</guid><description>&lt;p>Habe heute die Suche im Wiki verbessert. Bisher gab es in den Suchfeldern keine Vorgabetexte und nach der Ausführung der Suche verschwanden die Suchstrings.&lt;/p>
&lt;p>Das habe ich jetzt beides behoben.&lt;/p></description><content:encoded><![CDATA[<p>Habe heute die Suche im Wiki verbessert. Bisher gab es in den Suchfeldern keine Vorgabetexte und nach der Ausführung der Suche verschwanden die Suchstrings.</p>
<p>Das habe ich jetzt beides behoben.</p>
<p>Als Text steht in beiden Suchfeldern jetzt &ldquo;Diese Seite durchsuchen&rdquo; und wenn die Suche ausgeführt wurde, wird in beiden Suchfeldern der verwendete Suchstring eingefügt, sodass man diesen nun einfach anpassen kann, statt alles neu eingeben zu müssen.</p>
<p>Früher mit verschwundenem Suchstring:</p>
 <figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-alt_hu8cf72bb9ad5993846f461036e882336c_23546_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="274" /></picture></figure>
<p>Jetzt mit Suchstring, der erhalten bleibt:</p>
 <figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover_hua72002b8b1be0e488feae6537d46e64d_26280_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="274" /></picture></figure>
<p>Da ich davon keine Ahnung habe und das nur auf Copy &amp; Paste basiert, hat es ewig gedauert, dann aber im Ergebnis sehr einfach.</p>
<p>Ich habe in die Funktion <code>populateResults</code> in der Datei <code>offsearch.js</code> am Anfang nur diese beiden Zeilen einfügen müssen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span>  <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#34;#custom-searchbox&#34;</span>).<span style="color:#a6e22e">val</span>(<span style="color:#a6e22e">searchQuery</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#34;#search-query&#34;</span>).<span style="color:#a6e22e">val</span>(<span style="color:#a6e22e">searchQuery</span>);
</span></span></code></pre></div><div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Es gibt übrigens sowohl einen Menüeintrag für &ldquo;Suche&rdquo; als auch das Eingabefeld, weil Letzteres auf mobilen Geräten nicht mehr angezeigt wird. Aber davon hab ich ja keine Ahnung, wie ihr wisst, daher bleibt das erstmal so.</div>
</div>


<p>Details zu der Suchfunktion mit fuse.js, die ich im Wiki statt der Defaultsuche vom Docsy-Theme verwende, <a  href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/">gibt es hier</a>.</p>]]></content:encoded><enclosure url="https://natenom.de/2023/10/suche-im-wiki-verbessert/2023-10-27-suche-wiki-neu-cover.webp" length="26280" type="image/webp"/></item><item><title>Suchfunktion im Blog massiv beschleunigt (und wie man Beiträge von der Suche ausschließen kann)</title><link>https://natenom.de/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/</link><pubDate>Sun, 01 May 2022 15:11:04 +0200</pubDate><guid>https://natenom.de/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/</guid><description><![CDATA[<p>Obwohl im Blog als auch im <a  href="https://wiki.natenom.de/">Wiki</a> dieselbe Suche (FuseJS) verwendet wird, dauert es im Blog deutlich länger bis die Ergebnisse angezeigt werden, als im Wiki, wo die Ergebnisse fast sofort zu sehen sind.</p>
<p>Meine erst Vermutung war, dass es unter anderem daran liegt, dass es im Blog um die 2600 Beiträge gibt, während es im Wiki &ldquo;nur&rdquo; 578 Seiten sind. Daraus ergibt sich für den Blog eine Dateigröße für die <code>index.json</code>-Datei von über 3,8 MiB, während es im Wiki 0,87 MiB sind.</p>
<p>Die genannte json-Datei muss der Client-Browser herunterladen, um darin dann per JavaScript lokal die Suche anzuwenden. Und bei einer Datei um 3,8 MiB dauert das dann sehr lange.</p>
<p>Erst später stellte ich fest, dass es weit mehr Optimierungspotential durch die Konfiguration der Suche via FuseJS gibt.</p>]]></description><content:encoded><![CDATA[<p>Obwohl im Blog als auch im <a  href="https://wiki.natenom.de/">Wiki</a> dieselbe Suche (FuseJS) verwendet wird, dauert es im Blog deutlich länger bis die Ergebnisse angezeigt werden, als im Wiki, wo die Ergebnisse fast sofort zu sehen sind.</p>
<p>Meine erst Vermutung war, dass es unter anderem daran liegt, dass es im Blog um die 2600 Beiträge gibt, während es im Wiki &ldquo;nur&rdquo; 578 Seiten sind. Daraus ergibt sich für den Blog eine Dateigröße für die <code>index.json</code>-Datei von über 3,8 MiB, während es im Wiki 0,87 MiB sind.</p>
<p>Die genannte json-Datei muss der Client-Browser herunterladen, um darin dann per JavaScript lokal die Suche anzuwenden. Und bei einer Datei um 3,8 MiB dauert das dann sehr lange.</p>
<p>Erst später stellte ich fest, dass es weit mehr Optimierungspotential durch die Konfiguration der Suche via FuseJS gibt.</p>
<p>Es gibt also zwei Ansätze für die Optimierung der Suchfunktion im Blog.</p>
<ul>
<li><a  href="#a_fusejs-optimieren">FuseJS Einstellungen optimieren</a></li>
<li><a  href="#a_beitraege-ausschliessen">Suchindex verkleinern durch Auschließen von Beiträgen</a></li>
</ul>
<p>Letzteres kann man auch umsetzen, wenn man bestimmte Inhalte generell aus der Suche ausschließen möchte.</p>

<h2 id="a_fusejs-optimieren" data-numberify>FuseJS optimieren (das größte Potential)<a class="anchor ms-1" href="#a_fusejs-optimieren"></a></h2>
<p>Es gibt viele Einstellungen für FuseJS. Die Wirkung der meisten Einstellungen verstehe ich nicht wirklich. Ich habe also erst einmal im Blog das selbe eingestellt wie auch in der Suche im Wiki:</p>
<pre><code>shouldSort: true,
includeMatches: true,
threshold: 0.0,
tokenize:true,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 3,
</code></pre>
<p><em>(Die Syntax für die Einstellungen im Wiki ist eine andere als im Blog. Denn dort sind die Einstellunen nicht im Front Matter hinterlegt, sondern direkt im JavaScript, da ich die <a  href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/">Originalsuchfunktion im Wiki selbst durch FuseJS ersetzt hatte</a>)</em></p>
<p>Im Blog wird daraus in der Datein <code>config.toml</code> im Bereich <code>params</code>:</p>
<pre><code>search.fuse.threshold = 0.0
search.fuse.location = 0
search.fuse.distance = 100
search.fuse.minMatchCharLength = 3
</code></pre>
<p>Hier die <a  class='urlextern'  href="https://hbs.razonyang.com/en/docs/layouts/search/">Hilfeseite zu FuseJS, wie es im Blog verwendet wird</a>.</p>
<p>Hier die vollständige Liste der Einstellungen für FuseJS <a  class='urlextern'  href="https://fusejs.io/api/options.html">gibt es hier</a>.</p>

<h3 id="ergebnis-der-vom-wiki-übernommenen-einstellungen" data-numberify>Ergebnis der vom Wiki übernommenen Einstellungen<a class="anchor ms-1" href="#ergebnis-der-vom-wiki-übernommenen-einstellungen"></a></h3>
<p>Vor den Änderungen hatte eine Suche nach z. B. <a  href="/search/?q=ettlingen%20und%20zur%c3%bcck">&ldquo;ettlingen und zurück&rdquo;</a> im Chromium-Browser 20 Sekunden gedauert und es wurden 1741 Ergebnisse gefunden, von denen nur das erste Ergebnis alle Begriffe beinhaltete.</p>
<p>Die vielen weiteren Ergebnise sind vermutlich dem Fuzzy-Search geschuldet. Aber damit kann ich persönlich eh nichts anfangen, das konnte also eh weg.</p>
<p></p><figure class="image-caption"><a href="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog.png"><picture>
                <source type="image/webp" srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="Suchergebnisse im Blog nach den Begriffen &amp;rsquo;ettlingen und zurück&amp;rsquo;. Das erste Ergebnis passt, der Rest beinhaltet nicht alle Begriffe." srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-alte-suche-blog_hu96fb3dbd42b5654a9bcde5e47dda7aec_174593_816x0_resize_q95_h2_catmullrom_3.webp" title="Suche im Blog mit alten Einstellungen." loading="lazy" width="816" height="567" /></picture></a><figcaption>Suche im Blog mit alten Einstellungen.</figcaption></figure><p>
</p>
<p>Nach der Änderung der Sucheinstellungen dauert die Suche weniger als 1 Sekunde und es wird nur das einzig passende Ergebnis angezeigt:</p>
<p></p><figure class="image-caption"><a href="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog.png"><picture>
                <source type="image/webp" srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="Suchergebnisse im Blog nach den Begriffen &amp;rsquo;ettlingen und zurück&amp;rsquo;. Das einzigen beiden Ergebnisse passen." srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog_huea1de37256a471ce19793b95172bd4dd_145748_816x0_resize_q95_h2_catmullrom_3.webp" title="Suche im Blog mit neuen Einstellungen." loading="lazy" width="816" height="389" /></picture></a><figcaption>Suche im Blog mit neuen Einstellungen.</figcaption></figure><p>
</p>
<p>Bei anderen Suchbegriffen, wie z. B. &ldquo;Staatsanwaltschaft&rdquo;, wurden wegen Fuzzy-Search Ergebnisse gefunden, die den Begriff &ldquo;Staatsanwaltschaft&rdquo; gar nicht beinhalteten sondern nur eine Teilmenge der selben Buchstaben in anderen Konstellationen und Wörtern. So war ein Ergebnis z. B. der Blogbeitrag mit dem Titel &ldquo;<a  href="/2016/12/fotografie-landschaft/">Fotografie: Landschaft</a>&rdquo;, der nur Fotos und gar keinen Text beinhaltete.</p>

<h3 id="a_erweiterte-suche" data-numberify>Erweiterte Suche aktiviert<a class="anchor ms-1" href="#a_erweiterte-suche"></a></h3>
<p>Ich habe im Blog für FuseJS auch gleich die erweiterte Suche aktiviert, denn damit kann man tolle Dinge machen, wie man <a  class='urlextern'  href="https://fusejs.io/examples.html#extended-search">hier nachlesen kann</a>.</p>
<p>So findet man z. B. alle Blogbeiträge, die mit dem String &ldquo;Fotos&rdquo; beginnen:</p>
<pre><code>^Fotos
</code></pre>
<p>Oder mit dem String &ldquo;werfen&rdquo; enden:</p>
<pre><code>werfen$
</code></pre>
<p>Mit den alten Einstellungen für die Suche findet diese für &ldquo;werfen&rdquo; 2216 Ergebnisse und die meisten beinhalten den Begriff nicht einmal.</p>
<p>Leerzeichen werden als <code>AND</code> verwendet und für <code>OR</code> nutzt man Pipe-Zeichen (<code>|</code>).</p>
<p>Zur Aktivierung der erweiterten Suche fügt man in die Datei <code>config.toml</code> im Bereich <code>[params]</code> ein:</p>
<pre><code>search.fuse.useExtendedSearch = true
</code></pre>
<p>Man findet zusätzlich noch ein paar mehr relevante Ergebnisse auch ohne explizite Verwendung der erweiterten Möglichkeiten.</p>

<h3 id="ergebnis-der-optimierung-der-fusejs-einstellungen" data-numberify>Ergebnis der Optimierung der FuseJS-Einstellungen<a class="anchor ms-1" href="#ergebnis-der-optimierung-der-fusejs-einstellungen"></a></h3>
<p>Jetzt bin ich auch im Blog mit der Suchfunktion sehr zufrieden. Ich habe bisher alles gefunden, wonach ich testweise gesucht habe, und das ohne viele, viele weitere unnötige Suchergebnisse.</p>
<p>Dazu gibt es jetzt noch erweiterte Suchfunktionen, wie oben beschrieben. Damit muss ich mich nur erinnern, welche Begriffe ich in einem Beitrag verwendet haben könnte.</p>
<p>Zum Beispiel hatte ich mal den Spruch &ldquo;rechter Reifen Mittelstreifen&rdquo; verwendet, den ich jetzt so auch finde. Zusätzlich kann ich Beiträge finden, die genau diesen String enthalten ODER mit dem String &ldquo;bußgeldstelle&rdquo; beginnen mit <code>&quot;rechter reifen mittelstreifen&quot;|^bußgeldstelle</code> und <a  href="/search/?q=%22rechter%20reifen%20mittelstreifen%22%7C%5Ebu%C3%9Fgeldstelle">das Ergebnis beinhaltet 17 Blogbeiträge</a>:</p>
<p></p><figure class="image-caption"><a href="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2.png"><picture>
                <source type="image/webp" srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-2_huc3fccf615613d0c1192e671f097a39d3_224448_816x0_resize_q95_h2_catmullrom_3.webp" title="" loading="lazy" width="816" height="543" /></picture></a><figcaption></figcaption></figure><p>
</p>
<p>Sucht man nur nach &ldquo;bußgeldstelle&rdquo;, dann werden 26 Blogbeiträge gefunden.</p>
<p>Und die Suche ist jetzt schnell, die Ergebnisse sind immer nach circa einer Sekunde da (in Chromium, in Firefox aus dem selben Rechner nach ca. 3 bis 4 Sekunden..</p>
<p>Und als mir dann noch einfiel, dass die Bußgeldstelle mir gegenüber mal die Kombination &ldquo;scharf rechts&rdquo; verwendete, kann ich auch danach noch suchen mit dem Suchbegriff <code>bußgeldstelle &quot;scharf rechts&quot;</code> und <a  href="/search/?q=bu%C3%9Fgeldstelle%20%22scharf%20rechts%22">das Ergebnis ist</a>:</p>
<p></p><figure class="image-caption"><a href="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts.png"><picture>
                <source type="image/webp" srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/images/2022-05-01-neue-suche-blog-scharf-rechts_hu0a35505a144d92ce3c9f8bef6a0934c1_96275_816x0_resize_q95_h2_catmullrom_3.webp" title="" loading="lazy" width="816" height="272" /></picture></a><figcaption></figcaption></figure><p>
</p>
<p>Kurz: Die neue Suche rockt 👍 😄</p>

<h2 id="a_beitraege-ausschliessen" data-numberify>Bestimmte Dinge aus der Suche ausschließen (wenig Potenzial)<a class="anchor ms-1" href="#a_beitraege-ausschliessen"></a></h2>
<p>Mein erster Ansatz war es, bestimmte Dinge aus dem Suchindex auszuschließen. Erst danach probierte ich die <a  href="#a_fusejs-optimieren">Optimierung der Einstellungen von FuseJS</a> aus, das letzlich zum erhofften Performanceschub führte.</p>
<p>Ich will das hier aber trotzdem stehen lassen, da es vielleicht je nach Website nützlich sein kann, bestimmte Kategorien oder alte Blogbeiträge vom Suchindex auszuschließen.</p>

<h3 id="kategorien-ausschließen" data-numberify>Kategorien ausschließen<a class="anchor ms-1" href="#kategorien-ausschließen"></a></h3>
<p>Man kann Kategorien ausschließen, die sowieso wenig gesucht werden, weil sie z. B. fast nur Fotos enthalten oder auch Kategorien, zu denen es schon lange keine Inhalte mehr gab, wie hier im Blog z. B. &ldquo;Spiele&rdquo;.</p>

<h3 id="alte-beiträge-ausschließen" data-numberify>Alte Beiträge ausschließen<a class="anchor ms-1" href="#alte-beiträge-ausschließen"></a></h3>
<p>Genau. Siehe unten. 😊</p>

<h3 id="inhalt-teilweise-aus-der-suche-entfernen" data-numberify>Inhalt (teilweise) aus der Suche entfernen<a class="anchor ms-1" href="#inhalt-teilweise-aus-der-suche-entfernen"></a></h3>
<p>Derzeit beinhaltet die json-Datei noch den kompletten Inhalt eines Blogbeitrags. Das könnte man ändern und nur noch z. B. Tags, Kategorien, Daten aus dem Front Matter und vielleicht noch die ersten 250 Zeichen des Inhalts jedes Blogbeitrags in die json-Datei einfügen.</p>
<p>Das gefällt mir aber nicht, da man dann auch nur Dinge findet, die in diesen ersten 250 Zeichen enthalten sind.</p>

<h3 id="umsetzung-an-einem-beispiel" data-numberify>Umsetzung an einem Beispiel<a class="anchor ms-1" href="#umsetzung-an-einem-beispiel"></a></h3>
<p>Hier beispielhaft eine Erläuterung, wie man Blogbeiträge von der Suche (bzw. von der Eintragung in die <code>index.json</code>) ausschließt, die die folgenden Bedingungen erfüllen.</p>
<ul>
<li>Beiträge, die älter sind als 5 Jahre.</li>
<li>Beiträge, die zu den folgenden Kategorien gehören:
<ul>
<li><a  href="/categories/fotografie/">Fotografie</a></li>
<li><a  href="/categories/mumble/">Mumble</a></li>
<li><a  href="/categories/mumble/">Musik</a></li>
<li><a  href="/categories/spiele/">Spiele</a></li>
</ul>
</li>
</ul>
<p>Zur Umsetzung muss man die Datei <code>themes/hugo-theme-bootstrap/layouts/index.json</code> nach <code>layouts/index.json</code> kopieren und wie folgt anpassen:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-jinja" data-lang="jinja"><span style="display:flex;"><span><span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>.Scratch.Add <span style="color:#e6db74">&#34;index&#34;</span> slice -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{</span><span style="color:#f92672">-</span> range .Site.RegularPages -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">if</span> ge <span style="color:#f92672">(</span>sub now.Year .Date.Year<span style="color:#f92672">)</span> <span style="color:#ae81ff">4</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> <span style="color:#66d9ef">or</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">in</span> .Params.categories <span style="color:#e6db74">&#34;Musik&#34;</span><span style="color:#f92672">)</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">in</span> .Params.categories <span style="color:#e6db74">&#34;Fotografie&#34;</span><span style="color:#f92672">)</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">in</span> .Params.categories <span style="color:#e6db74">&#34;Mumble&#34;</span><span style="color:#f92672">)</span> <span style="color:#f92672">(</span><span style="color:#66d9ef">in</span> .Params.categories <span style="color:#e6db74">&#34;Spiele&#34;</span><span style="color:#f92672">)</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">else</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>date <span style="color:#f92672">:=</span> .Date.Format <span style="color:#960050;background-color:#1e0010">$</span>.Site.Params.dateFormat -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>title <span style="color:#f92672">:=</span> .Title <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">if</span> <span style="color:#960050;background-color:#1e0010">$</span>.Site.Params.titleCase -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>title <span style="color:#f92672">=</span> title <span style="color:#960050;background-color:#1e0010">$</span>title -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> end -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>img <span style="color:#f92672">:=</span> <span style="color:#e6db74">&#34;&#34;</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">if</span> .Params.Images -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>img <span style="color:#f92672">=</span> index .Params.Images <span style="color:#ae81ff">0</span> <span style="color:#f92672">|</span> <span style="color:#a6e22e">absURL</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">else</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>images <span style="color:#f92672">:=</span> .Resources.ByType <span style="color:#e6db74">&#34;image&#34;</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>featured <span style="color:#f92672">:=</span> <span style="color:#960050;background-color:#1e0010">$</span>images.GetMatch <span style="color:#e6db74">&#34;*feature*&#34;</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">if</span> <span style="color:#66d9ef">not</span> <span style="color:#960050;background-color:#1e0010">$</span>featured <span style="color:#75715e">}}{{</span> <span style="color:#960050;background-color:#1e0010">$</span>featured <span style="color:#f92672">=</span> <span style="color:#960050;background-color:#1e0010">$</span>images.GetMatch <span style="color:#e6db74">&#34;{*cover*,*thumbnail*}&#34;</span> <span style="color:#75715e">}}{{</span> end -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#66d9ef">with</span> <span style="color:#960050;background-color:#1e0010">$</span>featured -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>img <span style="color:#f92672">=</span> <span style="color:#960050;background-color:#1e0010">$</span>featured.Permalink -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> end -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> end -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>item <span style="color:#f92672">:=</span> <span style="color:#f92672">(</span>dict <span style="color:#e6db74">&#34;title&#34;</span> <span style="color:#960050;background-color:#1e0010">$</span>title <span style="color:#e6db74">&#34;tags&#34;</span> .Params.tags <span style="color:#e6db74">&#34;categories&#34;</span> .Params.categories <span style="color:#e6db74">&#34;series&#34;</span> .Params.series <span style="color:#e6db74">&#34;content&#34;</span> .Plain <span style="color:#e6db74">&#34;permalink&#34;</span> .Permalink <span style="color:#e6db74">&#34;date&#34;</span> <span style="color:#960050;background-color:#1e0010">$</span>date <span style="color:#e6db74">&#34;img&#34;</span> <span style="color:#960050;background-color:#1e0010">$</span>img<span style="color:#f92672">)</span> -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>.Scratch.Add <span style="color:#e6db74">&#34;index&#34;</span> <span style="color:#960050;background-color:#1e0010">$</span>item -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">{{</span> end <span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{</span><span style="color:#f92672">-</span> end -<span style="color:#75715e">}}</span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">{{</span><span style="color:#f92672">-</span> <span style="color:#960050;background-color:#1e0010">$</span>.Scratch.Get <span style="color:#e6db74">&#34;index&#34;</span> <span style="color:#f92672">|</span> <span style="color:#a6e22e">uniq</span> <span style="color:#f92672">|</span> <span style="color:#a6e22e">jsonify</span> -<span style="color:#75715e">}}</span></span></span></code></pre></div>
<p>Um einen Hinweis auf der Suchseite einfügen zu können, kopiert man die Datei <code>themes/hugo-theme-bootstrap/layouts/_default/search.html</code> nach <code>layouts/_default/search.html</code> und trägt z. B. ein:</p>
<pre><code>&lt;p&gt;&lt;a href=&quot;/ueber/suche/&quot;&gt;Hinweis: Einige Blogbeiträge sind von der Suche ausgeschlossen. Für Details hier klicken.&lt;/a&gt;&lt;/p&gt;
</code></pre>

<h3 id="ergebnis-der-optimierung-via-weglassen" data-numberify>Ergebnis der Optimierung via Weglassen<a class="anchor ms-1" href="#ergebnis-der-optimierung-via-weglassen"></a></h3>
<p>Im Ergebnis wurde die index.json statt 3,8 MiB nur noch ca. 1,4 MiB groß. Ohne <a  href="#a_fusejs-optimieren">Optimierung der Sucheinstellungen von FuseJS</a> wurde das aber nur etwas schneller.</p>]]></content:encoded><enclosure url="https://natenom.de/2022/05/suchfunktion-im-blog-massiv-beschleunigt-und-ausschluss-von-beitraegen/cover.png" length="174624" type="image/png"/></item><item><title>Mein neues Wiki mit Hugo – Neue Suche und andere Optimierungen</title><link>https://natenom.de/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/</link><pubDate>Tue, 22 Mar 2022 18:04:56 +0100</pubDate><guid>https://natenom.de/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/</guid><description><![CDATA[<p>Nachdem ich vor ein paar Tagen mein neues Wiki online stellte und komplett zufrieden war, schaute ich auch mal auf der Website <a  class='urlextern'  href="https://pagespeed.web.dev/">pagespeed.web.dev</a> nach, wie viele Punkte das Wiki bekommt.</p>
<p>Schock: Es waren nur 52 Punkte (mobile Ansicht) und 71 Punkte (Desktop). Das ist weit weniger, als bei meinem alten Wiki mit 74 Punkten (mobil) und 98 Punkten (Desktop).</p>]]></description><content:encoded><![CDATA[<p>Nachdem ich vor ein paar Tagen mein neues Wiki online stellte und komplett zufrieden war, schaute ich auch mal auf der Website <a  class='urlextern'  href="https://pagespeed.web.dev/">pagespeed.web.dev</a> nach, wie viele Punkte das Wiki bekommt.</p>
<p>Schock: Es waren nur 52 Punkte (mobile Ansicht) und 71 Punkte (Desktop). Das ist weit weniger, als bei meinem alten Wiki mit 74 Punkten (mobil) und 98 Punkten (Desktop).</p>
<p></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_a4ea59e36698e9072a94b870c5d3fa9a.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_f92f8c0777e60ea91230c7486962cb43.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_16971a4668dbfd25a4565e91c35ff5f4.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_a4ea59e36698e9072a94b870c5d3fa9a.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_f92f8c0777e60ea91230c7486962cb43.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_16971a4668dbfd25a4565e91c35ff5f4.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_125346_16971a4668dbfd25a4565e91c35ff5f4.webp" title="" loading="lazy" width="816" height="710" /></picture><figcaption></figcaption></figure><p>
</p>
<p></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_e5ca22bca05f7a3ca9ca3b4faa7f9e32.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_299ee1af79a9315fcdfe386e79939fa1.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_536f501a2f6ff8fc8a903e7ab0167b6d.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_e5ca22bca05f7a3ca9ca3b4faa7f9e32.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_299ee1af79a9315fcdfe386e79939fa1.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_536f501a2f6ff8fc8a903e7ab0167b6d.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu135ddcacfb2813adbbe146be2d6de259_138964_536f501a2f6ff8fc8a903e7ab0167b6d.webp" title="" loading="lazy" width="816" height="710" /></picture><figcaption></figcaption></figure><p>
</p>
<p>Da das verwendete Theme mit dem Namen &ldquo;Docsy&rdquo; von Google stammt (das habe ich erst nach der Entscheidung dafür bemerkt), nahm ich an, dass auch die Punktezahl bei dem Test entsprechend hoch sein sollte.</p>
<p>Auch die Website des Themes <a  class='urlextern'  href="https://pagespeed.web.dev/report?url=https%3A%2F%2Fwww.docsy.dev%2F">erreicht dort nur 48 Punkte (mobil) und immerhin 96 Punkte (Desktop)</a>.</p>

<h2 id="unschön-gemachte-offlinesuche" data-numberify>Unschön gemachte Offlinesuche<a class="anchor ms-1" href="#unschön-gemachte-offlinesuche"></a></h2>
<p>Dann haben wir (Vri und ich) viel ausprobiert und haben herausgefunden, dass es hauptsächlich an der verwendeten Offlinesuche des Themes liegt. Schaltet man diese ab, dann steigt das Ergebnis auf 89 Punkte (mobile Ansicht) und 100 Punkte (Desktop).</p>
<p>Der Grund: Die Index-Datei für die Offlinesuche wird bei jedem Seitenaufruf automatisch abgerufen und ausgewertet. Bei einer ungepackten Größe von ca. 800 KiB der json-Datei ist das nicht unerheblich.</p>

<h2 id="unschönes-css" data-numberify>Unschönes CSS<a class="anchor ms-1" href="#unschönes-css"></a></h2>
<p>Aber auch ein &ldquo;Preload&rdquo; eines CSS ist nicht gerade schön gemacht. Dieses bewirkt, dass es relativ lange dauert, bevor überhaupt Inhalte im Browser angezeigt werden.</p>

<h2 id="was-nun" data-numberify>Was nun?<a class="anchor ms-1" href="#was-nun"></a></h2>
<p>Mir ist grundsätzlich egal, wie viele Menschen auf meinen Webseiten gucken und ich habe deshalb dazu auch keine Auswertungen. Mir ist jedoch wichtig, dass man die Inhalte findet, wenn man danach sucht. Und meines Wissens verweisen Suchmaschinen weniger gerne auf Webseiten, die relativ langsam sind. <em>(Stimmt dieses alte Halbwissen überhaupt noch?)</em></p>
<p>Abgesehen davon soll das neue Wiki auch auf älterer Hardware (Desktop und Smartphone) und langsamen Verbindungen gut funktionieren.</p>

<h2 id="optimierungen" data-numberify>Optimierungen<a class="anchor ms-1" href="#optimierungen"></a></h2>

<h3 id="css-ohne-preload" data-numberify>CSS ohne Preload<a class="anchor ms-1" href="#css-ohne-preload"></a></h3>
<p>Um das Preload aus dem CSS herauszubekommen, kopiert man die Datei <code>themes/docsy/layouts/partials/head-css.html</code> nach <code>layouts/partials/head-css.html</code> und ändert die unteren Zeilen von:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>&lt;link rel=&#34;preload&#34; href=&#34;{{ $css.RelPermalink }}&#34; as=&#34;style&#34;&gt;
</span></span><span style="display:flex;"><span>&lt;link href=&#34;{{ $css.RelPermalink }}&#34; rel=&#34;stylesheet&#34; integrity=&#34;{{ $css.Data.integrity }}&#34;&gt;</span></span></code></pre></div>
<p>Nach:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>&lt;link href=&#34;{{ $css.RelPermalink }}&#34; rel=&#34;stylesheet&#34;&gt;
</span></span><span style="display:flex;"><span>&lt;link href=&#34;{{ $css.RelPermalink }}&#34; rel=&#34;stylesheet&#34; integrity=&#34;{{ $css.Data.integrity }}&#34;&gt;</span></span></code></pre></div></p>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content">25.03.2022: Jemand hat mich darauf hingewiesen, dass diese beiden geänderten Zeilen zwei mal das selbe einbinden. Ich habe daher die letzte mit <code>integrity=</code> gelöscht.</div>
</div>

<h3 id="suche-nur-auf-bestimmten-seiten" data-numberify>Suche nur auf bestimmten Seiten<a class="anchor ms-1" href="#suche-nur-auf-bestimmten-seiten"></a></h3>
<p>Eine Möglichkeit ist es, die eingebaute Offlinesuche des Themes nicht mehr auf allen Seiten im Wiki anzuzeigen, sondern nur auf einer eigenen Suchseite.</p>
<p>Ich bin kein Profi bei sowas, habe mir den Quelltext des Themes angeschaut und keine Stelle gefunden, das zu tun und diese Möglichkeit daher verworfen. Aber schlaue Menschen können hier bestimmt mehr und könnten das für sich so umsetzen. Daher sei diese Möglichkeit genannt.</p>

<h3 id="andere-implementierung-für-die-suche" data-numberify>Andere Implementierung für die Suche<a class="anchor ms-1" href="#andere-implementierung-für-die-suche"></a></h3>
<p>Eine andere Möglichkeit ist, die eingebaute Suchfunktion zu deaktivieren und selbst eine zu implementieren. Ich habe mich für die Methode entschieden, die in <a  class='urlextern'  href="https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae#static-js-searchjs">diesem Gist beschrieben</a> wird. (In der <a  class='urlextern'  href="https://gohugo.io/tools/search/">Hugo-Dokumentation wird u. a. darauf verwiesen</a>.</p>
<p>Der Code im Gist steht unter der MIT-Lizenz zur Verfügung, <a  class='urlextern'  href="https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae#mit-license">siehe hier</a>.</p>

<h4 id="zu-erstellende-dateien-und-verzeichnisse" data-numberify>Zu erstellende Dateien und Verzeichnisse<a class="anchor ms-1" href="#zu-erstellende-dateien-und-verzeichnisse"></a></h4>
<ol>
<li>
<p>In die Datei <code>config.toml</code>:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[outputs]
</span></span><span style="display:flex;"><span>home = [ &#34;HTML&#34;, &#34;JSON&#34; ]</span></span></code></pre></div></p>
</li>
<li>
<p>In die Datei <code>content/de/search/_index.md</code>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>---
</span></span><span style="display:flex;"><span>title: &#34;Suche&#34;
</span></span><span style="display:flex;"><span>sitemap:
</span></span><span style="display:flex;"><span>  priority : 0.1
</span></span><span style="display:flex;"><span>layout: &#34;search&#34;
</span></span><span style="display:flex;"><span>weight: 20
</span></span><span style="display:flex;"><span>menu:
</span></span><span style="display:flex;"><span>  main:
</span></span><span style="display:flex;"><span>    weight: 50
</span></span><span style="display:flex;"><span>---</span></span></code></pre></div></p>
</li>
<li>
<p>In die Datei <code>layouts/_default/index.json</code>:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>{{- $.Scratch.Add &#34;index&#34; slice -}}
</span></span><span style="display:flex;"><span>{{- range .Site.RegularPages -}}
</span></span><span style="display:flex;"><span>    {{- $.Scratch.Add &#34;index&#34; (dict &#34;title&#34; .Title &#34;tags&#34; .Params.tags &#34;categories&#34; .Params.categories &#34;contents&#34; .Plain &#34;permalink&#34; .Permalink) -}}
</span></span><span style="display:flex;"><span>{{- end -}}
</span></span><span style="display:flex;"><span>{{- $.Scratch.Get &#34;index&#34; | jsonify -}}</span></span></code></pre></div></p>
</li>
</ol>
<p>Beim nächsten Bau der Website wird die Datei <code>/index.json</code> automatisch erstellt.</p>
<ol start="4">
<li>
<p>In die Datei <code>layouts/_default/search.html</code> (abgeändert vom Original, da es nicht funktioniert hat):
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>{{ define &#34;main&#34; }}
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/js/offsearch/jquery.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/js/offsearch/fuse.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/js/offsearch/jquery.mark.min.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;/js/offsearch/offsearch.js&#34;</span>&gt;&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">section</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;offsearch&#34;</span>&gt;
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">noscript</span>&gt;&lt;<span style="color:#f92672">p</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;offsearch-noscript&#34;</span>&gt;Diese Suchfunktion benötigt JavaScript.&lt;/<span style="color:#f92672">p</span>&gt;&lt;/<span style="color:#f92672">noscript</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">class</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;offsearch&#34;</span> &gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">form</span> <span style="color:#a6e22e">action</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;{{ &#34;</span><span style="color:#a6e22e">search</span><span style="color:#960050;background-color:#1e0010">&#34;</span> <span style="color:#960050;background-color:#1e0010">|</span> <span style="color:#a6e22e">absURL</span> <span style="color:#960050;background-color:#1e0010">}}&#34;</span>&gt;
</span></span><span style="display:flex;"><span>      &lt;<span style="color:#f92672">input</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search-query&#34;</span> <span style="color:#a6e22e">name</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;s&#34;</span> <span style="color:#a6e22e">placeholder</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Wiki durchsuchen…&#34;</span> <span style="color:#a6e22e">aria-label</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;Search&#34;</span> /&gt;
</span></span><span style="display:flex;"><span>    &lt;/<span style="color:#f92672">form</span>&gt;
</span></span><span style="display:flex;"><span>    &lt;<span style="color:#f92672">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search-results&#34;</span>&gt;&lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>  &lt;/<span style="color:#f92672">div</span>&gt;
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">section</span>&gt;
</span></span><span style="display:flex;"><span><span style="color:#75715e">&lt;!-- this template is sucked in by search.js and appended to the search-results div above. So editing here will adjust style --&gt;</span>
</span></span><span style="display:flex;"><span>&lt;<span style="color:#f92672">script</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;search-result-template&#34;</span> <span style="color:#a6e22e">type</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;text/x-js-template&#34;</span>&gt;
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">div</span> <span style="color:#a6e22e">id</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;summary-${key}&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">h4</span><span style="color:#f92672">&gt;&lt;</span><span style="color:#a6e22e">a</span> <span style="color:#a6e22e">href</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;${link}&#34;</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">title</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/a&gt;&lt;/h4&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">snippet</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/p&gt;</span>
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">$</span>{ <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">tags</span> }<span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">Tags</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">tags</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/p&gt;${ end }</span>
</span></span><span style="display:flex;"><span>      <span style="color:#a6e22e">$</span>{ <span style="color:#a6e22e">isset</span> <span style="color:#a6e22e">categories</span> }<span style="color:#f92672">&lt;</span><span style="color:#a6e22e">p</span><span style="color:#f92672">&gt;</span><span style="color:#a6e22e">Categories</span><span style="color:#f92672">:</span> <span style="color:#a6e22e">$</span>{<span style="color:#a6e22e">categories</span>}<span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/p&gt;${ end }</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;</span><span style="color:#960050;background-color:#1e0010">/div&gt;</span>
</span></span><span style="display:flex;"><span>&lt;/<span style="color:#f92672">script</span>&gt;
</span></span><span style="display:flex;"><span>{{ end }}</span></span></code></pre></div></p>
</li>
<li>
<p>Ich habe das Verzeichnis <code>static/js/offsearch/</code> erstellt, wo später die notwendigen JavaScript-Dateien bereitgestellt werden.</p>
</li>
<li>
<p>JavaScript selbst hosten: Ich habe die in der Originaldatei <code>search.html</code> eingebundenen Dateien ins Verzeichnis <code>static/js/offsearch/</code> heruntergeladen, diese entsprechend lokal eingebunden und hoste sie nun selbst.</p>
</li>
<li>
<p>JavaScript für die Suchfunktion
Diese Datei kommt nach <code>static/js/offsearch/offsearch.js</code>:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">=</span><span style="color:#ae81ff">60</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">fuseOptions</span> <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">shouldSort</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">includeMatches</span><span style="color:#f92672">:</span> <span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">threshold</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0.0</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">tokenize</span><span style="color:#f92672">:</span><span style="color:#66d9ef">true</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">location</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">0</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">distance</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">100</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">maxPatternLength</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">32</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">minMatchCharLength</span><span style="color:#f92672">:</span> <span style="color:#ae81ff">1</span>,
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">keys</span><span style="color:#f92672">:</span> [
</span></span><span style="display:flex;"><span>    {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;title&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.8</span>},
</span></span><span style="display:flex;"><span>    {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;contents&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.5</span>},
</span></span><span style="display:flex;"><span>    {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;tags&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.3</span>},
</span></span><span style="display:flex;"><span>    {<span style="color:#a6e22e">name</span><span style="color:#f92672">:</span><span style="color:#e6db74">&#34;categories&#34;</span>,<span style="color:#a6e22e">weight</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0.3</span>}
</span></span><span style="display:flex;"><span>]
</span></span><span style="display:flex;"><span>};
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">searchQuery</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">param</span>(<span style="color:#e6db74">&#34;s&#34;</span>);
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">searchQuery</span>){
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#34;#search-query&#34;</span>).<span style="color:#a6e22e">val</span>(<span style="color:#a6e22e">searchQuery</span>);
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">executeSearch</span>(<span style="color:#a6e22e">searchQuery</span>);
</span></span><span style="display:flex;"><span>}<span style="color:#66d9ef">else</span> {
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-results&#39;</span>).<span style="color:#a6e22e">append</span>(<span style="color:#e6db74">&#34;&lt;p&gt;Please enter a word or phrase above&lt;/p&gt;&#34;</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">executeSearch</span>(<span style="color:#a6e22e">searchQuery</span>){
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">getJSON</span>( <span style="color:#e6db74">&#34;/index.json&#34;</span>, <span style="color:#66d9ef">function</span>( <span style="color:#a6e22e">data</span> ) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">pages</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">data</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">fuse</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> <span style="color:#a6e22e">Fuse</span>(<span style="color:#a6e22e">pages</span>, <span style="color:#a6e22e">fuseOptions</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">fuse</span>.<span style="color:#a6e22e">search</span>(<span style="color:#a6e22e">searchQuery</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">console</span>.<span style="color:#a6e22e">log</span>({<span style="color:#e6db74">&#34;matches&#34;</span><span style="color:#f92672">:</span><span style="color:#a6e22e">result</span>});
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">result</span>.<span style="color:#a6e22e">length</span> <span style="color:#f92672">&gt;</span> <span style="color:#ae81ff">0</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">populateResults</span>(<span style="color:#a6e22e">result</span>);
</span></span><span style="display:flex;"><span>    }<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-results&#39;</span>).<span style="color:#a6e22e">append</span>(<span style="color:#e6db74">&#34;&lt;p&gt;No matches found&lt;/p&gt;&#34;</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">populateResults</span>(<span style="color:#a6e22e">result</span>){
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span>(<span style="color:#a6e22e">result</span>,<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">key</span>,<span style="color:#a6e22e">value</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">contents</span><span style="color:#f92672">=</span> <span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">contents</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">snippet</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">snippetHighlights</span><span style="color:#f92672">=</span>[];
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">tags</span> <span style="color:#f92672">=</span>[];
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span>( <span style="color:#a6e22e">fuseOptions</span>.<span style="color:#a6e22e">tokenize</span> ){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">snippetHighlights</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">searchQuery</span>);
</span></span><span style="display:flex;"><span>    }<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span>(<span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">matches</span>,<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">matchKey</span>,<span style="color:#a6e22e">mvalue</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">key</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;tags&#34;</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">key</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;categories&#34;</span> ){
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">snippetHighlights</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">value</span>);
</span></span><span style="display:flex;"><span>        }<span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">key</span> <span style="color:#f92672">==</span> <span style="color:#e6db74">&#34;contents&#34;</span>){
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">start</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">&gt;</span><span style="color:#ae81ff">0</span><span style="color:#f92672">?</span><span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>]<span style="color:#f92672">-</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">:</span><span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">end</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">&lt;</span><span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">length</span><span style="color:#f92672">?</span><span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">1</span>]<span style="color:#f92672">+</span><span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">:</span><span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">length</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">snippet</span> <span style="color:#f92672">+=</span> <span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">substring</span>(<span style="color:#a6e22e">start</span>,<span style="color:#a6e22e">end</span>);
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">snippetHighlights</span>.<span style="color:#a6e22e">push</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">substring</span>(<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>],<span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">1</span>]<span style="color:#f92672">-</span><span style="color:#a6e22e">mvalue</span>.<span style="color:#a6e22e">indices</span>[<span style="color:#ae81ff">0</span>][<span style="color:#ae81ff">0</span>]<span style="color:#f92672">+</span><span style="color:#ae81ff">1</span>));
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">snippet</span>.<span style="color:#a6e22e">length</span><span style="color:#f92672">&lt;</span><span style="color:#ae81ff">1</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">snippet</span> <span style="color:#f92672">+=</span> <span style="color:#a6e22e">contents</span>.<span style="color:#a6e22e">substring</span>(<span style="color:#ae81ff">0</span>,<span style="color:#a6e22e">summaryInclude</span><span style="color:#f92672">*</span><span style="color:#ae81ff">2</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">//pull template from hugo templarte definition
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">templateDefinition</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-result-template&#39;</span>).<span style="color:#a6e22e">html</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">//replace values
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">output</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">render</span>(<span style="color:#a6e22e">templateDefinition</span>,{<span style="color:#a6e22e">key</span><span style="color:#f92672">:</span><span style="color:#a6e22e">key</span>,<span style="color:#a6e22e">title</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">title</span>,<span style="color:#a6e22e">link</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">permalink</span>,<span style="color:#a6e22e">tags</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">tags</span>,<span style="color:#a6e22e">categories</span><span style="color:#f92672">:</span><span style="color:#a6e22e">value</span>.<span style="color:#a6e22e">item</span>.<span style="color:#a6e22e">categories</span>,<span style="color:#a6e22e">snippet</span><span style="color:#f92672">:</span><span style="color:#a6e22e">snippet</span>});
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#39;#search-results&#39;</span>).<span style="color:#a6e22e">append</span>(<span style="color:#a6e22e">output</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">$</span>.<span style="color:#a6e22e">each</span>(<span style="color:#a6e22e">snippetHighlights</span>,<span style="color:#66d9ef">function</span>(<span style="color:#a6e22e">snipkey</span>,<span style="color:#a6e22e">snipvalue</span>){
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">$</span>(<span style="color:#e6db74">&#34;#summary-&#34;</span><span style="color:#f92672">+</span><span style="color:#a6e22e">key</span>).<span style="color:#a6e22e">mark</span>(<span style="color:#a6e22e">snipvalue</span>);
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">param</span>(<span style="color:#a6e22e">name</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> decodeURIComponent((<span style="color:#a6e22e">location</span>.<span style="color:#a6e22e">search</span>.<span style="color:#a6e22e">split</span>(<span style="color:#a6e22e">name</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;=&#39;</span>)[<span style="color:#ae81ff">1</span>] <span style="color:#f92672">||</span> <span style="color:#e6db74">&#39;&#39;</span>).<span style="color:#a6e22e">split</span>(<span style="color:#e6db74">&#39;&amp;&#39;</span>)[<span style="color:#ae81ff">0</span>]).<span style="color:#a6e22e">replace</span>(<span style="color:#e6db74">/\+/g</span>, <span style="color:#e6db74">&#39; &#39;</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">function</span> <span style="color:#a6e22e">render</span>(<span style="color:#a6e22e">templateString</span>, <span style="color:#a6e22e">data</span>) {
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">conditionalMatches</span>,<span style="color:#a6e22e">conditionalPattern</span>,<span style="color:#a6e22e">copy</span>;
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">conditionalPattern</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">/\$\{\s*isset ([a-zA-Z]*) \s*\}(.*)\$\{\s*end\s*}/g</span>;
</span></span><span style="display:flex;"><span><span style="color:#75715e">//since loop below depends on re.lastInxdex, we use a copy to capture any manipulations whilst inside the loop
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#a6e22e">copy</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">templateString</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">while</span> ((<span style="color:#a6e22e">conditionalMatches</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">conditionalPattern</span>.<span style="color:#a6e22e">exec</span>(<span style="color:#a6e22e">templateString</span>)) <span style="color:#f92672">!==</span> <span style="color:#66d9ef">null</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">if</span>(<span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">1</span>]]){
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">//valid key, remove conditionals, leave contents.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#a6e22e">copy</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">copy</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">0</span>],<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">2</span>]);
</span></span><span style="display:flex;"><span>    }<span style="color:#66d9ef">else</span>{
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">//not valid, remove entire section
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>    <span style="color:#a6e22e">copy</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">copy</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#a6e22e">conditionalMatches</span>[<span style="color:#ae81ff">0</span>],<span style="color:#e6db74">&#39;&#39;</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">templateString</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">copy</span>;
</span></span><span style="display:flex;"><span><span style="color:#75715e">//now any conditionals removed we can do simple substitution
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">var</span> <span style="color:#a6e22e">key</span>, <span style="color:#a6e22e">find</span>, <span style="color:#a6e22e">re</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> (<span style="color:#a6e22e">key</span> <span style="color:#66d9ef">in</span> <span style="color:#a6e22e">data</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">find</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;\\$\\{\\s*&#39;</span> <span style="color:#f92672">+</span> <span style="color:#a6e22e">key</span> <span style="color:#f92672">+</span> <span style="color:#e6db74">&#39;\\s*\\}&#39;</span>;
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">re</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">new</span> RegExp(<span style="color:#a6e22e">find</span>, <span style="color:#e6db74">&#39;g&#39;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">templateString</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">templateString</span>.<span style="color:#a6e22e">replace</span>(<span style="color:#a6e22e">re</span>, <span style="color:#a6e22e">data</span>[<span style="color:#a6e22e">key</span>]);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">return</span> <span style="color:#a6e22e">templateString</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">/* MIT License
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">Copyright 2022 Edward A. Webbinaro
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">Permission is hereby granted, free of charge, to any person
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">obtaining a copy of this software and associated documentation
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">files (the &#34;Software&#34;), to deal in the Software without
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">restriction, including without limitation the rights to
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">use, copy, modify, merge, publish, distribute, sublicense,
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">and/or sell copies of the Software, and to permit persons
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">to whom the Software is furnished to do so, subject to
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">the following conditions:
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">The above copyright notice and this permission notice shall
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">be included in all copies or substantial portions of the Software.
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">THE SOFTWARE IS PROVIDED &#34;AS IS&#34;, WITHOUT WARRANTY OF
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
</span></span></span><span style="display:flex;"><span><span style="color:#75715e">DEALINGS IN THE SOFTWARE. */</span></span></span></code></pre></div></p>
</li>
</ol>

<h4 id="noch-etwas-css-für-die-neue-suchfunktion" data-numberify>Noch etwas CSS für die neue Suchfunktion<a class="anchor ms-1" href="#noch-etwas-css-für-die-neue-suchfunktion"></a></h4>
<p>Dieses CSS kommt in die Datei <code>assets/css/_styles_project.scss</code>:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.offsearch form {margin-bottom: 40px;}
</span></span><span style="display:flex;"><span>.offsearch #search-query {width: 100%; padding: 10px;}
</span></span><span style="display:flex;"><span>.offsearch #search-results p {hyphens: auto;}</span></span></code></pre></div></p>

<h4 id="ergebnis--suchfunktion-auf-einer-einzelnen-seite" data-numberify>Ergebnis – Suchfunktion auf einer einzelnen Seite<a class="anchor ms-1" href="#ergebnis--suchfunktion-auf-einer-einzelnen-seite"></a></h4>
<p>Die Suche findet man jetzt unter <a  href="https://wiki.natenom.de/search/">wiki.natenom.com/search/</a> und diese Seite ist immer rechts oben verlinkt.</p>
<p>Für die Zukunft ist geplant, diese als Suchfeld in der Navigation einzufügen.</p>
<p>Ich bin sehr zufrieden mit der neuen Suche. Im Vergleich zu der Suche im Blog ist sie extrem schnell und zeigt die Ergebnisse auch schön an.</p>
<p>Deshalb werde ich diese Suche in den nächsten Tagen vermutlich auch in meinem Blog einbauen. Dort dauert die Suche aktuell sehr lange und verursacht sehr viel CPU-Last, obwohl dort als auch im neuen Wiki <a  class='urlextern'  href="https://fusejs.io/">fuse.js</a> genutzt wird.</p>
<p></p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-neue-suche-im-neuen-wiki_hu6cea242130cd4f5322f24f37902a6af3_79290_816x0_resize_q95_h2_catmullrom_3.webp" title="Neue Suche im neuen Wiki" loading="lazy" width="816" height="446" /></picture></a><figcaption>Neue Suche im neuen Wiki</figcaption></figure><p>
</p>
<p>Bei der Punktezahl erreicht das Wiki jetzt in 89 Punkte (mobil) (statt zuvor 52) und 100 Punkte (Desktop) (statt zuvor 71).</p>
<p></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_eea79d505cbc6af6a93ea0eef27a93d9.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_857e6e6665f0ef0b3d5a1ebffac440e5.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_2ee73814ff2766e624c6c5d603375e37.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_eea79d505cbc6af6a93ea0eef27a93d9.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_857e6e6665f0ef0b3d5a1ebffac440e5.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_2ee73814ff2766e624c6c5d603375e37.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_125702_2ee73814ff2766e624c6c5d603375e37.webp" title="89 Punkte für die mobile Ansicht" loading="lazy" width="816" height="708" /></picture><figcaption>89 Punkte für die mobile Ansicht</figcaption></figure><p>
</p>
<p></p><figure class="image-caption"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_85d4f421e40d249d7e99097df0b0191d.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_73b519f1fd1690d9fae279e1f0702133.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_4f265062b97adbd5e9cfce3f7cb2f726.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_85d4f421e40d249d7e99097df0b0191d.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_73b519f1fd1690d9fae279e1f0702133.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_4f265062b97adbd5e9cfce3f7cb2f726.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/_hu800f6acdbdfaf0c6f3e590b3cc99fe6e_137423_4f265062b97adbd5e9cfce3f7cb2f726.webp" title="100 Punkte für die Desktop Ansicht" loading="lazy" width="816" height="708" /></picture><figcaption>100 Punkte für die Desktop Ansicht</figcaption></figure><p>
</p>

<h3 id="sidebar" data-numberify>Sidebar<a class="anchor ms-1" href="#sidebar"></a></h3>
<p>Ursprünglich hatte ich die Sidebar links (Seitenverzeichnis) so eingestellt, dass man jeden Bereich einzeln aufklappen/zuklappen konnte. Dadurch wurden aber im fertigen HTML ungefähr 2000 Zeilen nur für die Sidebar eingefügt. Übersichtlicher wurde es dadurch aber nicht.</p>
<p></p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-aufklappbar_hua1c850ead444d36ce113802bfa5b5f8c_447107_816x0_resize_q95_h2_catmullrom_3.webp" title="sidebar_menu_foldable = true" loading="lazy" width="816" height="523" /></picture></a><figcaption>sidebar_menu_foldable = true</figcaption></figure><p>
</p>
<p>Deshalb habe ich die Sidebar jetzt so eingestellt, dass aufklappen/einklappen nicht mehr möglich ist. Es ist immer nur der aktuelle Bereich geöffnet.</p>
<p>Hier gibt es vom Theme mehrere Einstellungsmöglichkeiten im Bereich <code>params</code> in der Datei <code>config.toml</code>:</p>
<ul>
<li><code>ui.ul_show</code> – Gibt an, bis zu welcher Anzahl die Unterebenen des aktuellen Bereichs geöffnet dargestellt werden.
<ul>
<li>Hier mit <code>ui.ul_show = 1</code> </p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-1_hu703f199450f0b9f1b2eada2e0196058a_445419_816x0_resize_q95_h2_catmullrom_3.webp" title="ui.ul_show = 1" loading="lazy" width="816" height="523" /></picture></a><figcaption>ui.ul_show = 1</figcaption></figure><p>
</li>
<li>Hier mit <code>ui.ul_show = 2</code> </p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-nicht-aufklappbar-ul-show-2_hu4633a6a92cfe403971b70afbf57f7346_446861_816x0_resize_q95_h2_catmullrom_3.webp" title="ui.ul_show = 2" loading="lazy" width="816" height="523" /></picture></a><figcaption>ui.ul_show = 2</figcaption></figure><p>
</li>
</ul>
</li>
<li><code>sidebar_menu_compact</code> – Man kann auch alles immer offen einstellen. Aber das eignet sich wirklich nur für sehr kleine Websites: </p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-21-sidebar-compact-false_hud35ec0696c9840b09f92aa7f8fea8430_448990_816x0_resize_q95_h2_catmullrom_3.webp" title="sidebar_menu_compact = false" loading="lazy" width="816" height="523" /></picture></a><figcaption>sidebar_menu_compact = false</figcaption></figure><p>
</li>
</ul>
<p>Auch auf die generierten HTML-Dateien wirkt sich das aus. Circa 2000 Zeilen werden benötigt, wenn die Sidebar aufklappbar ist und &ldquo;nur&rdquo; noch ca. 1400, wenn die Sidebar nur im aktuellen Bereich geöffnet ist. <em>(Ich hätte erwartet, dass es im letzteren Fall bei sehr kleinen Bereichen wie &ldquo;Fotografie&rdquo; nur ein paar Dutzend Zeilen wären.)</em></p>
<p><a  class='urlextern'  href="https://www.docsy.dev/docs/adding-content/navigation/#section-menu-options">Dokumentation zur Sidebar</a></p>

<h3 id="zeit-zum-rendern-des-wiki" data-numberify>Zeit zum Rendern des Wiki<a class="anchor ms-1" href="#zeit-zum-rendern-des-wiki"></a></h3>
<p>Beim Durchstöbern der Einstellungsmöglichkeiten zur Sidebar (<a  href="#optimierung--sidebar">siehe oben</a>) habe ich auch die <code>sidebar_cache_limit</code> gefunden.</p>
<p>Aus der Dokumentation:</p>
<pre><code>On large sites (default: &gt; 2000 pages) the section menu is not generated for each page, but cached for the whole section. The HTML classes for marking the active menu item (and menu path) are then set using JS. You can adjust the limit for activating the cached section menu with the optional parameter .ui.sidebar_cache_limit.
</code></pre>
<p>In meinem Wiki gibt es aktuell 1333 Seiten und ich habe das Limit testweise auf 500 eingestellt:</p>
<pre><code>sidebar_cache_limit = 500
</code></pre>
<p>Die Zeit, um mein gesamtes Wiki zu rendern verringert sich damit von circa 12 Sekunden auf circa 2 Sekunden.</p>
<p>Der Nachteil ist jedoch, dass die übergeordneten Seiten nicht mehr angezeigt werden, sobald man zu tief in den Unterebenen eines Bereichs ist.</p>
<p></p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-cached_hu8d0b628ae7e8831f915000633f270ec8_149846_816x0_resize_q95_h2_catmullrom_3.webp" title="Sidebar wird gecached und es ist nicht alles sichtbar." loading="lazy" width="816" height="583" /></picture></a><figcaption>Sidebar wird gecached und es ist nicht alles sichtbar.</figcaption></figure><p>
</p>
<p></p><figure class="image-caption"><a href="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached.png"><picture>
                <source type="image/webp" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_360x0_resize_q95_h2_catmullrom_3.webp 360w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_500x0_resize_q95_h2_catmullrom_3.webp 500w,/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_360x0_resize_q95_h2_catmullrom_3.webp 360w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_500x0_resize_q95_h2_catmullrom_3.webp 500w, /2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_816x0_resize_q95_h2_catmullrom_3.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/images/2022-03-22-sidebar-not-cached_hu33d0182cf2cdff4949dec88c9c0f9335_165734_816x0_resize_q95_h2_catmullrom_3.webp" title="Sidebar wird nicht gecached und es ist alles sichtbar." loading="lazy" width="816" height="583" /></picture></a><figcaption>Sidebar wird nicht gecached und es ist alles sichtbar.</figcaption></figure><p>
</p>
<p>Damit ich nicht in Zukunft von diesem Mechanismus überrascht werde, sobald das Wiki über 2000 Seiten hat, habe ich den Wert auf 5000 eingestellt.</p>

<h3 id="swap-fonts" data-numberify>Swap Fonts<a class="anchor ms-1" href="#swap-fonts"></a></h3>
<p>Ich wurde darauf hingewiesen, dass in bei der Einbindung der selbst gehosteten Schriften im CSS noch einstellen kann, dass lokal vorhandene Systemschriften im Browser verwendet werden, solange die vom Server bereitgestellten Schriften noch nicht heruntergeladen wurden. Dadurch werden Inhalte früher dargestellt.</p>
<p>Pro <code>@font-face {</code>-Eintrag in der Datei <code>assets/scss/_variables_project.scss</code> kommt diese Zeile hinzu: <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-css" data-lang="css"><span style="display:flex;"><span><span style="color:#f92672">font-display</span><span style="color:#f92672">:</span> <span style="color:#f92672">swap</span><span style="color:#f92672">;</span></span></span></code></pre></div>

<h3 id="gar-keine-systemfremden-schriften" data-numberify>Gar keine systemfremden Schriften<a class="anchor ms-1" href="#gar-keine-systemfremden-schriften"></a></h3>
<p>Es ist auch möglich, die Verwendung der eingebundenen Schriften komplett zu unterbinden. Dazu trägt man in der Datei <code>assets/scss/_variables_project.scss</code> ein:</p>
<pre><code>$td-enable-google-fonts: false;
</code></pre>
<p>Mir gefällt die verwendete Schriftart des Themes, daher nutze ich nicht die Möglichkeit zur Abschaltung.</p>

<h2 id="galerie-hinzugefügt" data-numberify>Galerie hinzugefügt<a class="anchor ms-1" href="#galerie-hinzugefügt"></a></h2>
<p>Ich habe zum Wiki-Theme noch die <a  href="/2022/02/aenderungen-blog-hoehere-aufloesung-hovereffekt/">hugo-shortcode-gallery</a> hinzugefügt, die ich auch bereits hier im Blog verwende.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd themes
</span></span><span style="display:flex;"><span>git submodule add https://github.com/mfg92/hugo-shortcode-gallery.git</span></span></code></pre></div>
<p>Änderungen in der Datei <code>config.toml</code>:</p>
<ul>
<li>Aus <code>theme = &quot;docsy&quot;</code> wird <code>theme = [ &quot;docsy&quot;, &quot;hugo-shortcode-gallery&quot; ]</code></li>
</ul>
<p>Dazu kommen diese Einträge in den Bereich <code>params</code> (die ich so auch im Blog verwende):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span><span style="color:#a6e22e">galleryShowExif</span> = <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">gallerylastRow</span> = <span style="color:#e6db74">&#34;nojustify&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">gallerythumbnailResizeOptions</span> = <span style="color:#e6db74">&#34;450x450 q85 Lanczos&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">gallerythumbnailHoverEffect</span> = <span style="color:#e6db74">&#34;enlarge&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">galleryloadJQuery</span> = <span style="color:#66d9ef">true</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">galleryrowHeight</span> = <span style="color:#e6db74">&#34;150&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">gallerysortOrder</span> = <span style="color:#e6db74">&#34;desc&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">gallerypreviewType</span> = <span style="color:#e6db74">&#34;none&#34;</span></span></span></code></pre></div>
<p>Eine Beispielgalerie kann man hier ansehen: <a  href="https://wiki.natenom.de/docs/sauerbraten/maps/kleinestadt/#screenshots">wiki.natenom.com/docs/sauerbraten/maps/kleinestadt/</a>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a  class='urlextern'  href="https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display">https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded><enclosure url="https://natenom.de/2022/03/mein-neues-wiki-mit-hugo-neue-suche-und-andere-optimierungen/cover.png" length="149846" type="image/png"/></item><item><title>OsmAnd~ Update auf Version 2.5 mit vielen neuen Funktionen – jetzt auch bei F-Droid verfügbar</title><link>https://natenom.de/2016/12/osmand-update-auf-version-2-5-mit-vielen-neuen-funktionen-jetzt-auch-bei-f-droid-verfuegbar/</link><pubDate>Tue, 20 Dec 2016 15:01:10 +0000</pubDate><guid>https://natenom.de/2016/12/osmand-update-auf-version-2-5-mit-vielen-neuen-funktionen-jetzt-auch-bei-f-droid-verfuegbar/</guid><description>&lt;p>Seit heute gibt es bei F-Droid endlich das Update auf Version 2.5.4 von OsmAnd~, das es bei GooglePlay in der beschränkten Variante schon seit Anfang November gibt.&lt;/p>
&lt;p>Und es sind viele gute Neuerungen enthalten.&lt;/p></description><content:encoded><![CDATA[<p>Seit heute gibt es bei F-Droid endlich das Update auf Version 2.5.4 von OsmAnd~, das es bei GooglePlay in der beschränkten Variante schon seit Anfang November gibt.</p>
<p>Und es sind viele gute Neuerungen enthalten.</p>
<h2 id="umgang-mit-poi--8222point-of-interest8220" data-numberify>Umgang mit POI – &#8222;Point Of Interest&#8220;<a class="anchor ms-1" href="#umgang-mit-poi--8222point-of-interest8220"></a></h2>
<p>Eine der Neuerungen ist, dass man jetzt endlich die Informationen zu POIs direkt auf der Karte abrufen kann, ohne diese erst umständlich aktivieren zu müssen. Das war bisher ein Punkt, der mich im Vergleich zu Google Maps massiv an OsmAnd gestört hat.</p>
<div id='gallery-113' class='gallery galleryid-37838 gallery-columns-3 gallery-size-medium'>
  <figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_1.png.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_1.png-169x300.png" class="attachment-medium size-medium" alt="" loading="lazy" aria-describedby="gallery-113-37847" srcset="/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_1.png-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_1.png-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_1.png-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_1.png.png 720w" sizes="(max-width: 169px) 100vw, 169px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-113-37847'> Anklickbares POI auf der Karte </figcaption></figure><figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_2.png.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_2.png-169x300.png" class="attachment-medium size-medium" alt="" loading="lazy" aria-describedby="gallery-113-37848" srcset="/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_2.png-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_2.png-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_2.png-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_2.png.png 720w" sizes="(max-width: 169px) 100vw, 169px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-113-37848'> Details eines POI </figcaption></figure><figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_3.png.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_3.png-169x300.png" class="attachment-medium size-medium" alt="" loading="lazy" aria-describedby="gallery-113-37849" srcset="/wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_3.png-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_3.png-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_3.png-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_2.5_update_poi_handling_3.png.png 720w" sizes="(max-width: 169px) 100vw, 169px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-113-37849'> Beschreibung eines POI </figcaption></figure>
</div>

<h2 id="verbesserte-suche-in-pois-und-filter" data-numberify>Verbesserte Suche in POIs und Filter<a class="anchor ms-1" href="#verbesserte-suche-in-pois-und-filter"></a></h2>
<p>Die Suche für Point of Interests beinhaltet jetzt auch Filter, z. B. die Vorgabe, dass ein Geschäft im Moment der Suche geöffnet haben soll. Oder dass es WLAN anbietet. Oder dass es eine bestimmte Mahlzeit gibt, und sehr vieles mehr.</p>
<div id='gallery-114' class='gallery galleryid-37838 gallery-columns-2 gallery-size-large'>
  <figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_1.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_1-576x1024.png" class="attachment-large size-large" alt="" loading="lazy" aria-describedby="gallery-114-37854" srcset="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_1-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_1-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_1-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_1.png 720w" sizes="(max-width: 576px) 100vw, 576px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-114-37854'> Filter in der Suche definieren </figcaption></figure><figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_2.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_2-576x1024.png" class="attachment-large size-large" alt="" loading="lazy" aria-describedby="gallery-114-37855" srcset="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_2-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_2-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_2-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_2.png 720w" sizes="(max-width: 576px) 100vw, 576px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-114-37855'> Passende Ergebnisse werden angezeigt </figcaption></figure><figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_3.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_3-576x1024.png" class="attachment-large size-large" alt="" loading="lazy" aria-describedby="gallery-114-37856" srcset="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_3-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_3-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_3-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_3.png 720w" sizes="(max-width: 576px) 100vw, 576px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-114-37856'> Ort anzeigen </figcaption></figure><figure class='gallery-item'> 
  <div class='gallery-icon portrait'>
    <a href='/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_4.png'><img src="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_4-576x1024.png" class="attachment-large size-large" alt="" loading="lazy" aria-describedby="gallery-114-37857" srcset="/wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_4-576x1024.png 576w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_4-84x150.png 84w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_4-169x300.png 169w, /wp-content/uploads/2016/12/android_app_osmand_update_2.5.4_POI_filters_4.png 720w" sizes="(max-width: 576px) 100vw, 576px" style="width:100%;height:177.78%;max-width:720px;" /></a>
  </div><figcaption class='wp-caption-text gallery-caption' id='gallery-114-37857'> Beschreibung des Ortes </figcaption></figure>
</div>
<p>Man muss allerdings innerhalb von OsmAnd~ das aktualisierte Kartenmaterial herunterladen und anschließend die App neustarten, sonst sind nur die Öffnungszeiten als Filter verfügbar.</p>

<h2 id="topologische-karte" data-numberify>Topologische Karte<a class="anchor ms-1" href="#topologische-karte"></a></h2>
<p>Besonders interessant für Fahrradfahrer ist die neue Topo-Ansicht.</p>
<p>Diese hat im Vergleich zur normalen Karte einen viel höheren Kontrast und dadurch kann man unter anderem die <a  href="/2014/09/plugin-fuer-osmand-bei-f-droid-zeigt-hoehenlinien-und-hillshading-an/">Höhenlinien</a> besser erkennen und Berge/Hügel besser einschätzen.</p>
<p>Hier ein Vergleich, links mit der normalen Ansicht und rechts mit der neuen Topo-Ansicht:</p>
<figure id="attachment_37845" aria-describedby="caption-attachment-37845" style="width: 474px" class="wp-caption alignnone">[<img loading="lazy" class="wp-image-37845 size-large" src="/wp-content/uploads/2016/12/android_app_osmand_2.5.4_update_normal_view_compared_to_topo_view-600x519.png" srcset="/wp-content/uploads/2016/12/android_app_osmand_2.5.4_update_normal_view_compared_to_topo_view-600x519.png 600w, /wp-content/uploads/2016/12/android_app_osmand_2.5.4_update_normal_view_compared_to_topo_view-150x130.png 150w, /wp-content/uploads/2016/12/android_app_osmand_2.5.4_update_normal_view_compared_to_topo_view-300x260.png 300w, /wp-content/uploads/2016/12/android_app_osmand_2.5.4_update_normal_view_compared_to_topo_view-768x665.png 768w, /wp-content/uploads/2016/12/android_app_osmand_2.5.4_update_normal_view_compared_to_topo_view.png 1440w" sizes="(max-width: 474px) 100vw, 474px" />][2]<figcaption id="caption-attachment-37845" class="wp-caption-text">Vergleich der normalen Ansicht (links) mit der neuen kontrastreicheren Topo-Ansicht (rechts)</figcaption></figure>
<p>Weitere Details zur neuen Topo-Ansicht gibt es auf der Hersteller-Seite, <a  class='urlextern'  href="http://osmand.net/blog?id=topo_style">siehe hier</a>.</p>
<p>Ich hoffe sehr, dass es in Zukunft in OsmAnd auch ein zusätzliches <a  href="/2016/10/snap-017/">Höhenprofil</a> für berechnete Routen geben wird, wie es z. B. bei <a  href="/2016/08/fahrradreisenfahrradtouren-planen-mit-openrouteservice-org/">OpenRouteService.org</a> oder bei <a  href="/2014/10/routen-aus-marble-in-osmand-auf-android-nutzen/">Marble</a> der Fall ist.</p>

<h2 id="treppen" data-numberify>Treppen<a class="anchor ms-1" href="#treppen"></a></h2>
<p>Ich weiss nicht, seit wann diese Funktion in der App enthalten ist, aber sie gefällt mir auch sehr gut: Man kann angeben, dass bei der Routenberechnung fürs Fahrrad Treppen gemieden werden sollen. Mit eben solchen habe ich schon <a  href="/2016/09/radreise-zum-bodensee-erster-tag-streckenprobleme-navigationssoftware-bergaufstieg-bremsversagen/">schlechte Erfahrungen</a> gemacht. Danke für diese Funktion :)</p>

<h2 id="osmand-installieren" data-numberify>OsmAnd installieren<a class="anchor ms-1" href="#osmand-installieren"></a></h2>
<p>Die App gibt es für Android bei <a  class='urlextern'  href="https://f-droid.org/repository/browse/?fdid=net.osmand.plus">F-Droid</a> (kostenlos) und bei <a  class='urlextern'  href="https://play.google.com/store/apps/details?id=net.osmand">Google Play</a> (kostenpflichtig) und für iOS im <a  class='urlextern'  href="https://itunes.apple.com/app/apple-store/id934850257?mt=8">App Store von Apple</a>.</p>]]></content:encoded></item><item><title>Firefox-Addon durchsucht Tabs und kann noch mehr…</title><link>https://natenom.de/2015/03/firefox-addon-durchsucht-tabs-und-kann-noch-mehr/</link><pubDate>Sat, 14 Mar 2015 22:33:21 +0000</pubDate><guid>https://natenom.de/2015/03/firefox-addon-durchsucht-tabs-und-kann-noch-mehr/</guid><description>&lt;p>Normalerweise sind in meinem Browser immer mehr als 100 Tabs geöffnet, wenn auch meist nicht aktiv. Besonders viele Tabs kommen zusammen, wenn man etwas recherchiert.&lt;/p>
&lt;p>Einem bestimmten Tab zu finden, ist in Firefox extrem nervig, weil man sich immer wieder durchscrollen muss…&lt;/p></description><content:encoded><![CDATA[<p>Normalerweise sind in meinem Browser immer mehr als 100 Tabs geöffnet, wenn auch meist nicht aktiv. Besonders viele Tabs kommen zusammen, wenn man etwas recherchiert.</p>
<p>Einem bestimmten Tab zu finden, ist in Firefox extrem nervig, weil man sich immer wieder durchscrollen muss…</p>
<p>Abhilfe schafft das Addon „All Tabs Helper“ für Firefox. Es wird dabei per Voreinstellung nur der Titel eines Tabs durchsucht; optional auch die URL und sogar der Inhalt der geöffneten Webseite der Tabs.</p>
<p><a  href="/wp-content/uploads/2015/03/firefox_all-tabs-helper_search.png"><img loading="lazy" class="alignnone size-medium wp-image-31454" src="/wp-content/uploads/2015/03/firefox_all-tabs-helper_search-300x251.png" alt="firefox_all-tabs-helper_search" srcset="/wp-content/uploads/2015/03/firefox_all-tabs-helper_search-300x251.png 300w, /wp-content/uploads/2015/03/firefox_all-tabs-helper_search-150x125.png 150w, /wp-content/uploads/2015/03/firefox_all-tabs-helper_search.png 305w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>Interessant ist auch die Funktion „dups“, bei der alle Tabs angezeigt werden, die dieselbe URL geöffnet haben. Solche lassen sich direkt schließen.</p>
<p>Und es gibt noch die Funktion, die zuletzt aktivierten Tabs anzuzeigen.</p>
<p>Es ist auch möglich, die Reihenfolge der Tabs per Drag-n-Drop zu verändern.</p>
<p>Unter „Anpassen“ im Firefox-Menü lässt sich ein Button des AddOns zur Toolbar hinzufügen; drückt man diesen, öffnet sich das AddOn dauerhaft links in einer Sidebar.</p>
<p>Das Addon gibt es <a  class='urlextern'  href="https://addons.mozilla.org/en-us/firefox/addon/all-tabs-helper/"title="All Tabs Helper :: Add-ons for Firefox">hier</a>.</p>
<p> </p>]]></content:encoded></item><item><title>Google-Alert – RSS-Feed von Google-Suchergebnissen</title><link>https://natenom.de/2014/02/google-alert-rss-feed-von-google-suchergebnissen/</link><pubDate>Thu, 13 Feb 2014 07:48:48 +0000</pubDate><guid>https://natenom.de/2014/02/google-alert-rss-feed-von-google-suchergebnissen/</guid><description>&lt;p>Durch &lt;a class='urlextern' href="https://www.google.com/alerts"title="Google Alerts - Monitor the Web for interesting new content">Google-Alert&lt;/a> kann man sich darüber informieren lassen, wenn sich im  Suchergebnis einer definierten Suche etwas Neues auftaucht; dabei kann eingestellt werden, ob man wöchentlich, täglich oder sofort eine Benachrichtigung per Email bekommt.&lt;/p></description><content:encoded><![CDATA[<p>Durch <a  class='urlextern'  href="https://www.google.com/alerts"title="Google Alerts - Monitor the Web for interesting new content">Google-Alert</a> kann man sich darüber informieren lassen, wenn sich im  Suchergebnis einer definierten Suche etwas Neues auftaucht; dabei kann eingestellt werden, ob man wöchentlich, täglich oder sofort eine Benachrichtigung per Email bekommt.</p>
<p>Wer bei Google angemeldet ist, erhält zusätzlich die Möglichkeit, einen entsprechenden Feed für die Ergebnisse zu nutzen.</p>
<p>Ist vielleicht schon total alt und kennt jeder, habe jedoch erst gestern davon erfahren; daher wird es vermutlich auch andere Menschen geben, die das noch nicht kennen…</p>
<p>Tipp: Möchte man Web-Seiten ohne Feed beobachten, dann kann man z. B. <a  href="/2013/09/benachrichtigung-bei-aenderung-einer-web-seite-auch-ohne-rss-feed-mailwebsitechanges/"title="Benachrichtigung bei Änderung einer Web-Seite auch ohne News-Feed – MailWebsiteChanges">MailWebSiteChanges</a> nutzen.</p>]]></content:encoded></item></channel></rss>