| <!DOCTYPE html SYSTEM "about:legacy-compat"> | |
| <html lang="fr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
| <meta content="width=device-width, initial-scale=1" name="viewport"> | |
| <!-- | |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| This file is generated from xml source: DO NOT EDIT | |
| XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
| --> | |
| <title>ab - L'outil de test des performances du serveur HTTP | |
| Apache - Serveur HTTP Apache Version 2.5</title> | |
| <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet"> | |
| <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size"> | |
| <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css"><link rel="stylesheet" type="text/css" href="../style/css/prettify.css"> | |
| <script src="../style/scripts/prettify.min.js"> | |
| </script> | |
| <link href="../images/favicon.png" rel="shortcut icon"></head> | |
| <body id="manual-page"><div id="page-header"> | |
| <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p> | |
| <p class="apache">Serveur HTTP Apache Version 2.5</p> | |
| <img alt="" src="../images/feather.png"></div> | |
| <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div> | |
| <div id="path"> | |
| <a href="https://www.apache.org/">Apache</a> > <a href="https://httpd.apache.org/">Serveur HTTP</a> > <a href="https://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.5</a> > <a href="./">Programmes</a></div><div id="page-content"><div id="preamble"><h1>ab - L'outil de test des performances du serveur HTTP | |
| Apache</h1> | |
| <button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button> | |
| <div class="toplang"> | |
| <p><span>Langues Disponibles: </span><a href="../en/programs/ab.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../fr/programs/ab.html" title="Français"> fr </a> | | |
| <a href="../ko/programs/ab.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/programs/ab.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> | |
| </div> | |
| <p><code class="program"><a href="../programs/ab.html">ab</a></code> est un utilitaire qui vous permet de tester les | |
| performances de votre serveur HTTP Apache. Il a été conçu pour vous | |
| donner une idée du degré de performances de votre installation | |
| d'Apache. Il vous permet en particulier de déterminer le nombre de | |
| réquêtes que votre installation d'Apache est capable de servir par | |
| seconde.</p> | |
| </div> | |
| <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#synopsis">Syntaxe</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#options">Options</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#output">Sortie</a></li> | |
| <li><img alt="" src="../images/down.gif"> <a href="#bugs">Bogues</a></li> | |
| </ul><h3>Voir aussi</h3><ul class="seealso"><li><code class="program"><a href="../programs/httpd.html">httpd</a></code></li></ul></div> | |
| <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="synopsis">Syntaxe <a title="Lien permanent" href="#synopsis" class="permalink">¶</a></h2> | |
| <p><code><strong>ab</strong> | |
| [ -<strong>A</strong> <var>nom utilisateur</var>:<var>mot de passe</var> ] | |
| [ -<strong>b</strong> <var>taille tampon</var> ] | |
| [ -<strong>B</strong> <var>adresse locale</var> ] | |
| [ -<strong>c</strong> <var>simultanéité</var> ] | |
| [ -<strong>C</strong> <var>nom cookie</var>=<var>valeur</var> ] | |
| [ -<strong>d</strong> ] | |
| [ -<strong>e</strong> <var>fichier csv</var> ] | |
| [ -<strong>E</strong> <var>fichier du certificat client</var> ] | |
| [ -<strong>f</strong> <var>protocole</var> ] | |
| [ -<strong>g</strong> <var>fichier gnuplot</var> ] | |
| [ -<strong>h</strong> ] | |
| [ -<strong>H</strong> <var>en-tête personnalisé</var> ] | |
| [ -<strong>i</strong> ] | |
| [ -<strong>k</strong> ] | |
| [ -<strong>l</strong> ] | |
| [ -<strong>m</strong> <var>méthode HTTP</var> ] | |
| [ -<strong>n</strong> <var>requêtes</var> ] | |
| [ -<strong>p</strong> <var>fichier POST</var> ] | |
| [ -<strong>P</strong> | |
| <var>nom utilisateur mandataire</var>:<var>mot de passe</var> ] | |
| [ -<strong>q</strong> ] | |
| [ -<strong>r</strong> ] | |
| [ -<strong>R</strong> <var>délai nouvelle connexion</var> ] | |
| [ -<strong>s</strong> <var>délai</var> ] | |
| [ -<strong>S</strong> ] | |
| [ -<strong>t</strong> <var>limite de durée</var> ] | |
| [ -<strong>T</strong> <var>type de contenu</var> ] | |
| [ -<strong>u</strong> <var>fichier PUT</var> ] | |
| [ -<strong>v</strong> <var>verbosité</var>] | |
| [ -<strong>V</strong> ] | |
| [ -<strong>w</strong> ] | |
| [ -<strong>x</strong> <var>attributs <table></var> ] | |
| [ -<strong>X</strong> <var>mandataire</var>[:<var>port</var>] ] | |
| [ -<strong>y</strong> <var>attributs <tr></var> ] | |
| [ -<strong>z</strong> <var>attributs <td></var> ] | |
| [ -<strong>Z</strong> <var>algorithme chiffrement</var> ] | |
| [http[s]://]<var>nom serveur</var>[:<var>port</var>]/<var>chemin</var></code></p> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="options">Options <a title="Lien permanent" href="#options" class="permalink">¶</a></h2> | |
| <dl> | |
| <dt><code>-A <var>nom utilisateur</var>:<var>mot de passe</var></code></dt> | |
| <dd>Fournit le support d'une authentification de base vers le | |
| serveur. Les nom utilisateur et mot de passe sont séparés par un | |
| seul caractère <code>:</code> et transmis sous forme codée base64. | |
| La chaîne est envoyée que le serveur en ait besoin ou non (qu'il ait | |
| renvoyé un code "401 authentication needed" ou non).</dd> | |
| <dt><code>-b <var>taille tampon</var></code></dt> | |
| <dd>Taille du tampon d'émission/réception TCP, en octets.</dd> | |
| <dt><code>-B <var>adress -locale</var></code></dt> | |
| <dd>Adresse à laquelle se rattacher lors des connexions sortantes.</dd> | |
| <dt><code>-c <var>simultanéité</var></code></dt> | |
| <dd>Nombre de requêtes à effectuer simultanément. Par défaut, une | |
| seule requête est effectuée à la fois.</dd> | |
| <dt><code>-C <var>nom cookie</var>=<var>valeur</var></code></dt> | |
| <dd>Ajoute une ligne <code>Cookie:</code> à la requête. L'argument | |
| se présente en général sous la forme d'une | |
| paire <code><var>nom</var>=<var>valeur</var></code>. Ce champ peut | |
| être répété.</dd> | |
| <dt><code>-d</code></dt> | |
| <dd>N'affiche pas le "pourcentage servi dans la table XX [ms]". | |
| (support de l'héritage).</dd> | |
| <dt><code>-e <var>fichier csv</var></code></dt> | |
| <dd>Enregistre des valeurs séparées par des virgules (CSV) dans un | |
| fichier, indiquant pour chaque pourcentage (de 1% à 100 %), le temps | |
| (en millisecondes) mis pour servir ce pourcentage de requêtes. Ce | |
| fichier est en général plus utile qu'un fichier 'gnuplot', car les | |
| résultats sont déjà sous forme binaire.</dd> | |
| <dt><code>-E <var>fichier du certificat client</var></code></dt> | |
| <dd>Utilise le certificat client au format PEM qu'il contient pour | |
| s'authentifier auprès du serveur lors d'une connexion à un site web sous | |
| SSL. Ce fichier doit contenir le certificat client suivi des certificats | |
| intermédiaires et de la clé privé. Disponible à partir de la version 2.4.36 | |
| du serveur HTTP Apache.</dd> | |
| <dt><code>-f <var>protocole</var></code></dt> | |
| <dd>Spécifie le protocole SSL/TLS (SSL2, SSL3, TLS1, TLS1.1, TLS1.2, or ALL).<br> | |
| TLS1.1 et TLS1.2 sont supportés à partir de la version 2.4.4 du | |
| serveur HTTP Apache.</dd> | |
| <dt><code>-g <var>fichier gnuplot</var></code></dt> | |
| <dd>Enregistre toutes les valeurs mesurées dans un fichier 'gnuplot' | |
| ou TSV (valeurs séparées par des tabulations). Ce fichier peut être | |
| facilement importé dans des programmes comme Gnuplot, IDL, | |
| Mathematica, Igor ou même Excel. La première ligne du fichier | |
| contient les noms des valeurs.</dd> | |
| <dt><code>-h</code></dt> | |
| <dd>Affiche une aide à propos de l'utilisation du programme.</dd> | |
| <dt><code>-H <var>en-tête personnalisé</var></code></dt> | |
| <dd>Ajoute des en-têtes supplémentaires à la requête. L'argument se | |
| présente sous la forme d'une ligne d'en-tête valide, autrement dit | |
| une paire champ/valeur séparés par un caractère ':' (par exemple | |
| <code>"Accept-Encoding: zip/zop;8bit"</code>).</dd> | |
| <dt><code>-i</code></dt> | |
| <dd>Effectue des requêtes <code>HEAD</code> plutôt que | |
| <code>GET</code>.</dd> | |
| <dt><code>-k</code></dt> | |
| <dd>Active la fonctionnalité des connexions HTTP persistantes | |
| (KeepAlive), c'est à dire effectue plusieurs requêtes au cours d'une | |
| seule session HTTP. Cette fonctionnalité est désactivée par | |
| défaut.</dd> | |
| <dt><code>-l</code></dt> | |
| <dd>Ne signale pas les erreurs si la taille de la réponse n'est pas | |
| constante. Cette option peut s'avérer utile pour les pages | |
| dynamiques.<br> | |
| Disponible à partir de la version 2.4.7 du serveur HTTP Apache. | |
| </dd> | |
| <dt><code>-m <var>méthode HTTP</var></code></dt> | |
| <dd>Méthode HTTP personnalisée à utiliser pour les requêtes.<br> | |
| Disponible à partir de la version 2.4.10 du serveur HTTP | |
| Apache.</dd> | |
| <dt><code>-n <var>requêtes</var></code></dt> | |
| <dd>Nombre de requêtes à effectuer au cours du test de performances. | |
| Par défaut, une seule requête est effectuée, ce qui ne permet pas | |
| d'obtenir des résultats représentatifs.</dd> | |
| <dt><code>-p <var>fichier POST</var></code></dt> | |
| <dd>Fichier contenant les données pour les requêtes POST. | |
| Assurez-vous de spécifier aussi le paramètre <code>-T</code>.</dd> | |
| <dt><code>-P <var>nom utilisateur mandataire</var>:<var>mot de passe</var></code></dt> | |
| <dd>Fournit les informations d'authentification basique pour un | |
| mandataire en-route. Les nom d'utilisateur et mot de passe sont | |
| séparés par un simple caractère <code>:</code> et envoyés sur le | |
| réseau codés en base64. La chaîne est envoyée, que le mandataire en | |
| ait besoin ou non (qu'il ait renvoyé un code "407 proxy | |
| authentication needed" ou non).</dd> | |
| <dt><code>-q</code></dt> | |
| <dd>Lorsque plus de 150 requêtes sont traitées, <code class="program"><a href="../programs/ab.html">ab</a></code> | |
| affiche la progression du traitement sur <code>stderr</code> tous | |
| les 10% du nombre total ou toutes les 100 requêtes. Le drapeau | |
| <code>-q</code> permet de supprimer ces messages.</dd> | |
| <dt><code>-r</code></dt> | |
| <dd>Ne s'arrête pas en cas d'erreur de réception du socket.</dd> | |
| <dt><code>-R <var>délai nouvelle connexion</var></code></dt> | |
| <dd>Nombre de millisecondes entre chaque nouvelle connexion au démarrage. | |
| Par défaut, il n'y a pas de délai. Démarrer trop de connexions simultanées | |
| peut déclencher une protection contre les dénis de service au niveau du | |
| réseau, ce qui peut fausser les résultats du test. Introduire un délai entre | |
| les démarrages des connexions simultanées permet de contourner ce problème. | |
| Le test peut se terminer avant que la montée en puissance des connexions | |
| simultanées ne soit achevée. Si c'est le cas, le nombre total de connexions | |
| simultanées établies sera indiqué dans les résultats. | |
| <br> | |
| Disponible à partir de la version 2.5.1 du serveur HTTP Apache.</dd> | |
| <dt><code>-s <var>timeout</var></code></dt> | |
| <dd>Temps maximum d'attente en secondes du socket avant de considérer | |
| le délai comme dépassé. La valeur par défaut est de 30 secondes.<br> | |
| Disponible à partir de la version 2.4.4 du serveur HTTP | |
| Apache.</dd> | |
| <dt><code>-S</code></dt> | |
| <dd>N'affiche ni les valeurs de déviation standards et médianes, ni | |
| les messages d'erreur et d'avertissement lorsque les valeurs | |
| médianes et moyennes sont égales à une ou deux fois la valeur de | |
| déviation standard. Par défaut les valeurs mini/moyenne/maxi sont | |
| affichées (support de l'héritage).</dd> | |
| <dt><code>-t <var>limite durée</var></code></dt> | |
| <dd>Durée maximale en secondes du test de performances. Ceci | |
| implique un <code>-n 50000</code> en interne. Utilisez cette option | |
| si vous souhaitez tester les performances du serveur pendant une | |
| durée fixée à l'avance. Par défaut, il n'y a pas de limite de | |
| durée.</dd> | |
| <dt><code>-T <var>type contenu</var></code></dt> | |
| <dd>Valeur de l'en-tête Content-type à utiliser pour les données | |
| POST/PUT, par exemple | |
| <code>application/x-www-form-urlencoded</code>. | |
| La valeur par défaut est <code>text/plain</code>.</dd> | |
| <dt><code>-u <var>fichier PUT</var></code></dt> | |
| <dd>Fichier contenant des données PUT. Ne pas oublier de spécifier | |
| aussi <code>-T</code>.</dd> | |
| <dt><code>-v <var>verbosité</var></code></dt> | |
| <dd>Définit le niveau de verbosité - les niveaux <code>4</code> et | |
| supérieurs permettent d'afficher des informations à propos des | |
| en-têtes, les niveaux <code>3</code> et supérieurs les codes de | |
| réponse (404, 200, etc...), et les niveaux <code>2</code> et | |
| supérieurs les messages d'avertissement et d'information.</dd> | |
| <dt><code>-V</code></dt> | |
| <dd>Affiche le numéro de version et s'arrête.</dd> | |
| <dt><code>-w</code></dt> | |
| <dd>Affiche les résultats dans des tables HTML. La table par défaut | |
| comporte deux colonnes sur fond blanc.</dd> | |
| <dt><code>-x <var>attributs <table></var></code></dt> | |
| <dd>La chaîne à utiliser comme attributs pour | |
| <code><table></code>. Les attributs sont insérés | |
| <code><table <var>ici</var> ></code>.</dd> | |
| <dt><code>-X <var>mandataire</var>[:<var>port</var>]</code></dt> | |
| <dd>Utilise un serveur mandataire pour les requêtes.</dd> | |
| <dt><code>-y <var>attributs <tr></var></code></dt> | |
| <dd>La chaîne à utiliser comme attributs pour | |
| <code><tr></code>.</dd> | |
| <dt><code>-z <var>attributs <td></var></code></dt> | |
| <dd>La chaîne à utiliser comme attributs pour | |
| <code><td></code>.</dd> | |
| <dt><code>-Z <var>algorithme chiffrement</var></code></dt> | |
| <dd>Spécifie l'algorithme de chiffrement SSL/TLS (Voir les | |
| algorithme de chiffrement openssl).</dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="output">Sortie <a title="Lien permanent" href="#output" class="permalink">¶</a></h2> | |
| <p>Vous touverez dans ce qui suit la liste des valeurs retournées | |
| par <code class="program"><a href="../programs/ab.html">ab</a></code> : | |
| </p> | |
| <dl> | |
| <dt>Server Software</dt> | |
| <dd>La valeur, si elle existe, de l'en-tête HTTP | |
| <var>server</var> renvoyée dans la première réponse réussie. | |
| Elle comporte tous les caractères de l'en-tête jusqu'à ce qu'un | |
| caractère de valeur décimale 32 soit rencontré (le plus souvent | |
| un espace ou une fin de ligne).</dd> | |
| <dt>Server Hostname</dt> | |
| <dd>Le nom DNS ou l'adresse IP fourni dans la ligne de commande.</dd> | |
| <dt>Server Port</dt> | |
| <dd>Le port auquel ab est connecté. Si la ligne de commande ne | |
| spécifie aucun port, le port par défaut sera 80 pour http et 443 | |
| pour https.</dd> | |
| <dt>SSL/TLS Protocol</dt> | |
| <dd>Les paramètres de protocole négociés entre le client et le | |
| serveur. Uniquement si SSL est utilisé.</dd> | |
| <dt>Document Path</dt> | |
| <dd>L'URI de la requête interprété à partir de la chaîne de la | |
| ligne de commande.</dd> | |
| <dt>Document Length</dt> | |
| <dd>Il s'agit de la taille en octets du premier document renvoyé | |
| avec succès. Si la taille du document est modifiée au cours | |
| du test, la réponse est considérée comme une erreur.</dd> | |
| <dt>Concurrency Level</dt> | |
| <dd>Le nombre de clients simultanés utilisés au cours du test.</dd> | |
| <dt>Time taken for tests</dt> | |
| <dd>Il s'agit du temps écoulé entre le moment de la première | |
| connexion au socket et la réception de la dernière | |
| réponse.</dd> | |
| <dt>Complete requests</dt> | |
| <dd>Le nombre de réponses reçues avec succès.</dd> | |
| <dt>Failed requests</dt> | |
| <dd>Le nombre de requêtes considérées comme erronées. Si ce | |
| nombre est différent de 0, une ligne supplémentaire indiquera le | |
| nombre de requêtes ayant échoué suite à un problème de | |
| connexion, de lecture, de taille de contenu erronée ou | |
| d'exceptions.</dd> | |
| <dt>Write errors</dt> | |
| <dd>Le nombre d'erreurs rencontrées en cours d'écriture (broken pipe).</dd> | |
| <dt>Non-2xx responses</dt> | |
| <dd>Le nombre de réponses dont le code était en dehors de la | |
| série 200. Si toutes les réponses appartiennent à la série 200, | |
| cette ligne est absente.</dd> | |
| <dt>Keep-Alive requests</dt> | |
| <dd>Le nombre de connexions promues à l'état de connexions | |
| persistantes.</dd> | |
| <dt>Total body sent</dt> | |
| <dd>Si le test a été configuré dans ce sens, il s'agit du nombre | |
| total d'octets envoyés au cours du test. Ce champ est omis si le | |
| test ne prévoyait pas d'envoi de corps.</dd> | |
| <dt>Total transferred</dt> | |
| <dd>Le nombre total d'octets reçus du serveur. Ce nombre | |
| correspond à peu près au nombre d'octets envoyés sur la ligne.</dd> | |
| <dt>HTML transferred</dt> | |
| <dd>Le nombre total d'octets utiles (contenus) reçus du serveur. | |
| Ce nombre n'inclut pas les octets correspondant aux en-têtes | |
| HTTP.</dd> | |
| <dt>Requests per second</dt> | |
| <dd>Il s'agit du nombre de requêtes par seconde. Il correspond | |
| au nombre de requêtes divisé par la durée totale du traitement.</dd> | |
| <dt>Time per request</dt> | |
| <dd>La durée moyenne du traitement d'une requête. La première | |
| valeur est calculée selon la formule <code>concurrency * | |
| timetaken * 1000 / done</code>, alors que la seconde valeur est | |
| calculée selon la formule <code>timetaken * 1000 / done</code>.</dd> | |
| <dt>Transfer rate</dt> | |
| <dd>Le taux de transfert calculé selon la formule | |
| <code>totalread / 1024 / timetaken</code>.</dd> | |
| </dl> | |
| </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div> | |
| <div class="section"> | |
| <h2 id="bugs">Bogues <a title="Lien permanent" href="#bugs" class="permalink">¶</a></h2> | |
| <p>De nombreux tampons de taille fixe sont déclarés statiquement. | |
| Combiné avec l'interprétation poussive des arguments de la ligne de | |
| commande, les en-têtes de réponse du serveur et autres entrées | |
| externes, ceci peut vous affecter.</p> | |
| <p>HTTP/1.x n'est pas complètement implémenté ; seules certaines | |
| formes de réponses 'attendues' sont acceptées. L'utilisation | |
| relativement intense de <code>strstr(3)</code> provoque un affichage | |
| en tête de profil, ce qui peut faire croire à un problème de | |
| performances ; en d'autres termes, vous mesurez les performances de | |
| <code class="program"><a href="../programs/ab.html">ab</a></code> plutôt que celles du serveur.</p> | |
| </div></div> | |
| <div class="bottomlang"> | |
| <p><span>Langues Disponibles: </span><a href="../en/programs/ab.html" hreflang="en" rel="alternate" title="English"> en </a> | | |
| <a href="../fr/programs/ab.html" title="Français"> fr </a> | | |
| <a href="../ko/programs/ab.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | | |
| <a href="../tr/programs/ab.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> | |
| </div><div id="footer"> | |
| <p class="apache">Copyright 2026 The Apache Software Foundation.<br>Autorisé sous <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> | |
| <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p></div><script><!--//--><![CDATA[//><!-- | |
| if (typeof(prettyPrint) !== 'undefined') { | |
| prettyPrint(); | |
| } | |
| var langToggle = document.querySelector('.lang-toggle'); | |
| var topLang = document.querySelector('.toplang'); | |
| if (langToggle && topLang) { | |
| langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); }); | |
| } | |
| var qv = document.getElementById('quickview'); | |
| if (qv) { | |
| document.body.appendChild(qv); | |
| var qvBtn = document.createElement('button'); | |
| qvBtn.className = 'qv-toggle'; | |
| qvBtn.setAttribute('aria-label', 'Toggle page navigation'); | |
| qvBtn.innerHTML = '☰'; | |
| document.body.appendChild(qvBtn); | |
| qvBtn.addEventListener('click', function() { | |
| var isOpen = qv.classList.toggle('open'); | |
| if (isOpen) { | |
| qv.style.top = window.scrollY + 10 + 'px'; | |
| } | |
| }); | |
| window.addEventListener('scroll', function() { qv.classList.remove('open'); }); | |
| } | |
| //--><!]]></script> | |
| </body></html> |