Heim Web-Frontend js-Tutorial Starlight in PDF umwandeln: Erfahrungen und Erkenntnisse

Starlight in PDF umwandeln: Erfahrungen und Erkenntnisse

Jan 15, 2025 am 10:24 AM

Stellen Sie sich vor, Sie erhalten eine Aufgabe: Erstellen Sie in einer Woche eine neue Dokumentationswebsite. Es sollte optisch ansprechend, schnell und einfach zu navigieren sein. Sie erhalten einen Stapel *.docs-Dateien, Bilder und Screenshots mit der Anweisung, „erledigen“.

Es stehen viele hervorragende Tools zur Auswahl, wie zum Beispiel Docusaurus, Nextra, VitePress, Docus und andere. Zuvor hatte ich großartige Erfahrungen beim Erstellen einer Dokumentationswebsite mit Starlight gemacht, daher war es meine Wahl für diese Aufgabe. Allerdings habe ich eine fehlende Funktion entdeckt: die Möglichkeit, aus der Dokumentation ein PDF zu generieren. Und es war eine der Anforderungen. „Klingt nach einem netten Nebenprojekt“, dachte ich mir.

Die Aufgabe angehen

Zuerst schien es einfach: Seiten abrufen, HTML analysieren, Inhalte gruppieren und voilà!

Starlight-basierte Websites verfügen über eine Schaltfläche „Weiter“, um durch die Dokumentation zu navigieren. Da es sich bei PDF im Wesentlichen um eine Reihe von Seiten handelt, schien es logisch, diese mit der Schaltfläche „Weiter“ einzeln zu analysieren. Da die Website statische Seiten generiert, habe ich schnell ein Skript geschrieben, um den HTML-Code abzurufen, die erforderlichen Teile abzufragen und alles zusammenzufügen. Allerdings erwies sich die Erstellung einer PDF-Datei, die den Stil der Website beibehielt, als komplexer. Nach einigem Brainstorming wurde mir klar, dass Puppeteer die beste Lösung war.

Jetzt wurde der Prozess klar:

  1. Identifizieren Sie die Startseite. Dies ist die erste Seite mit der Schaltfläche „Weiter“.
  2. Navigieren Sie durch die Seiten. Extrahieren Sie die Überschrift und den Hauptinhalt von jeder Seite und erstellen Sie gleichzeitig ein Inhaltsverzeichnis.
  3. Kombinieren Sie den Inhalt. Fügen Sie Seitenumbrüche und zusätzliche Stile hinzu.
  4. Bereiten Sie den endgültigen HTML-Code vor. Schreiben Sie den neu. der Startseite mit dem resultierenden HTML.
  5. Ressourcen laden. Scrollen Sie auf der Seite nach unten, um alle Bilder zu laden.
  6. Generieren Sie das PDF.Die Methode Page.pdf() von Puppeteer bringt es auf den Punkt.
  7. Fertig!
So funktioniert Starlight-to-PDF. Nach diesem Muster können Sie ähnliche Tools für andere Dokumentations-Frameworks erstellen, denen die PDF-Exportfunktion fehlt.

Nächste Schritte

Sobald die Grundfunktionalität fertig war, war es an der Zeit, einige Extras hinzuzufügen. Nachfolgend finden Sie die interessantesten und anspruchsvollsten Funktionen.

Kopf- und Fußzeilen hinzufügen

Es ist schön, eine Seitenzahl und einige zusätzliche Informationen in der Kopf- oder Fußzeile zu haben. Die Page.pdf()-Methode von Puppeteer akzeptiert headerTemplate- und footerTemplate-Optionen. Diese Optionen akzeptieren HTML-Strings. Puppeteer fügt automatisch Werte in die Elemente ein, die bestimmte Dienstprogrammklassen haben:

  • .date: formatiertes Datum;
  • .title: Tag-Wert;</li> <li> .url: URL der Seite, auf der die Druckfunktion aufgerufen wurde;</li> <li> .pageNumber: aktuelle Seitenzahl;</li> <li> .totalPages: Gesamtzahl der Seiten im Dokument.</li> </ul> <p>Da wir den gesamten Inhalt vor dem Drucken auf einer Seite zusammenfassen, haben Titel und URL für uns keinen großen Wert: Der eingefügte Wert bleibt immer derselbe. Andere Kurse helfen jedoch sehr. Hier ist ein Beispiel für eine Fußzeilenvorlage:<br> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><style> .footer-container { --color: #000; display: flex; align-items: center; justify-content: space-between; border-block-start: 1px solid var(--color); color: var(--color); font-size: 10px; font-family: Arial, Helvetica, sans-serif; margin-inline: 1.5cm 1cm; padding-block: 0.25cm 0.5cm; width: 100%; } </style> <div> <p>To use this, do not forget to set the displayHeaderFooter property to true:<br> </p> <pre class="brush:php;toolbar:false">import puppeteer from 'puppeteer'; const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://someUrl'); const footerTemplateStr = '<style>...<style><div>...</div>' // replace with the HTML string from the example above await page.pdf({ displayHeaderFooter: true, footerTemplate: footerTemplateStr }) </pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p>Hier sind einige Erkenntnisse, die Sie im Hinterkopf behalten sollten:</p> </pre> <ul> <li>Die Vorlage muss eine gültige HTML-Struktur sein.</li> <li>Definieren Sie die CSS-Eigenschaft „font-size“ so, dass der Standardwert von Puppeteer 0 ist.</li> <li>Verwenden Sie Inline <style> Tag, um Ihre Stile zu definieren. Website-Stile sind in den Vorlagen nicht verfügbar.</li> <li>Bilder sollten als Base64-Strings codiert werden.</li> <li>Verwenden Sie die Randoption von Puppeteer, um das gewünschte Layout zu erreichen.</li> </ul> <h3> Was ist mit CLI-Stilen? </h3> <p>Alles funktioniert gut, das resultierende PDF sieht gut aus, aber die Terminalmeldungen wirken langweilig. Die Liebe zum Detail trennt das Gute vom Großen, nicht wahr? Machen wir unsere Nachrichten bunter und leichter lesbar.</p> <p>Hier kommt die Magie der ANSI-Escape-Sequenzen zum Vorschein. Ich entschied, dass 4-Bit-Farben für den Job ausreichen würden. Nehmen wir an, Sie möchten einen weißen Text auf rotem Hintergrund haben <em>(das habe ich für mein [ERROR]:-Präfix vor Fehlermeldungen verwendet)</em>. So können Sie diesen Look erreichen:<br> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">console.log('\x1b[37;41m', 'White on red message'); </pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p>Lassen Sie es uns aufschlüsseln:</p> <ul> <li> x1b[ ist ein hexadezimaler Escape-Code (Sie können auch u001b als Unicode-Alternative verwenden);</li> <li> 37 ist eine weiße Vordergrundfarbe, wobei 3 für den Vordergrund und 7 für die weiße Farbe steht;</li> <li> 41 ist eine rote Hintergrundfarbe, wobei 4 für den Hintergrund und 1 für die rote Farbe steht.</li> </ul> <p>Alles funktioniert, aber jetzt werden alle unsere console.log()-Ausgaben auf diese Weise gestaltet. Um den Stil auf die Standardeinstellungen zurückzusetzen, fügen Sie am Ende einfach die Reset-Sequenz x1b[0m hinzu:<br> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">console.log('\x1b[37;41m', 'White on red message', '\x1b[0m'); </pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p>Viel besser. Was wäre, wenn wir fetten Cyan-Text auf einem grauen Hintergrund <em>(helles Schwarz in den Namen von 4-Bit-Farben)</em> wünschen? Es ist ganz einfach:<br> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">console.log('\x1b[1;36;100m', 'Cyan on gray message in bold', '\x1b[0m'); </pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p>Hier ist, was jeder Teil bewirkt:</p> <ul> <li> 1 nach dem Escape-Code wendet den Fettdruck an;</li> <li> 36 setzt die Textfarbe auf Cyan;</li> <li> 100 ändert den Hintergrund in eine helle schwarze Farbe, wobei 10 <em>hell</em> bedeutet und 0 ein Code für <em>schwarz</em> ist.</li> </ul> <p>Mit diesem Wissen können Sie Ihr CLI-Tool optisch ansprechend gestalten. Beispielsweise habe ich in meinem Projekt alle URLs und Dateipfade als unterstrichenen blauen Text gestaltet:<br> </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">console.log('\x1b[4;34m', './underlined/blue', '\x1b[0m') </pre><div class="contentsignin">Nach dem Login kopieren</div></div> <p>Schauen Sie sich dieses Cheatsheet an, um mehr zum Thema zu erfahren.</p> <h2> Einpacken </h2> <p>Man weiß nie, wann eine Routineaufgabe zu einem lohnenden Nebenprojekt inspirieren könnte. Die Entwicklung von starlight-to-pdf lieferte wertvolle Erfahrungen mit Puppeteer und CLI-Styling, und in der Open-Source-Community entstand ein neues Tool. Hier ist eine kurze Demonstration:</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173690789360353.jpg" class="lazy" alt="Transforming Starlight into PDF: experience and insights"></p> <p>Das obige ist der detaillierte Inhalt vonStarlight in PDF umwandeln: Erfahrungen und Erkenntnisse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!</p> </div> </div> <div class="wzconShengming_sp"> <div class="bzsmdiv_sp">Erklärung dieser Website</div> <div>Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn</div> </div> </div> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="2507867629"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div class="AI_ToolDetails_main4sR"> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-5902227090019525" data-ad-slot="3653428331" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <!-- <div class="phpgenera_Details_mainR4"> <div class="phpmain1_4R_readrank"> <div class="phpmain1_4R_readrank_top"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/hotarticle2.png" alt="" /> <h2>Heißer Artikel</h2> </div> <div class="phpgenera_Details_mainR4_bottom"> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796796771.html" title="Wie kann ich KB5055612 in Windows 10 nicht installieren?" class="phpgenera_Details_mainR4_bottom_title">Wie kann ich KB5055612 in Windows 10 nicht installieren?</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>4 Wochen vor</span> <span>By DDD</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796797907.html" title="<🎜>: Wachsen Sie einen Garten - Komplette Mutationsführer" class="phpgenera_Details_mainR4_bottom_title"><🎜>: Wachsen Sie einen Garten - Komplette Mutationsführer</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>3 Wochen vor</span> <span>By DDD</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796797130.html" title="<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys" class="phpgenera_Details_mainR4_bottom_title"><🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>3 Wochen vor</span> <span>By 尊渡假赌尊渡假赌尊渡假赌</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796796926.html" title="Nordhold: Fusionssystem, erklärt" class="phpgenera_Details_mainR4_bottom_title">Nordhold: Fusionssystem, erklärt</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>4 Wochen vor</span> <span>By 尊渡假赌尊渡假赌尊渡假赌</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796797896.html" title="Mandragora: Flüstern des Hexenbaum" class="phpgenera_Details_mainR4_bottom_title">Mandragora: Flüstern des Hexenbaum</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>3 Wochen vor</span> <span>By 尊渡假赌尊渡假赌尊渡假赌</span> </div> </div> </div> <div class="phpgenera_Details_mainR3_more"> <a href="https://www.php.cn/de/article.html">Mehr anzeigen</a> </div> </div> </div> --> <div class="phpgenera_Details_mainR3"> <div class="phpmain1_4R_readrank"> <div class="phpmain1_4R_readrank_top"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/hottools2.png" alt="" /> <h2>Heiße KI -Werkzeuge</h2> </div> <div class="phpgenera_Details_mainR3_bottom"> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411540686492.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Undresser.AI Undress" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_title"> <h3>Undresser.AI Undress</h3> </a> <p>KI-gestützte App zum Erstellen realistischer Aktfotos</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411552797167.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="AI Clothes Remover" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_title"> <h3>AI Clothes Remover</h3> </a> <p>Online-KI-Tool zum Entfernen von Kleidung aus Fotos.</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/ai_manual/001/246/273/173410641626608.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Undress AI Tool" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_title"> <h3>Undress AI Tool</h3> </a> <p>Ausziehbilder kostenlos</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411529149311.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Clothoff.io" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_title"> <h3>Clothoff.io</h3> </a> <p>KI-Kleiderentferner</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/ai_manual/001/246/273/173414504068133.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Video Face Swap" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_title"> <h3>Video Face Swap</h3> </a> <p>Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!</p> </div> </div> </div> <div class="phpgenera_Details_mainR3_more"> <a href="https://www.php.cn/de/ai">Mehr anzeigen</a> </div> </div> </div> <script src="https://sw.php.cn/hezuo/cac1399ab368127f9b113b14eb3316d0.js" type="text/javascript"></script> <div class="phpgenera_Details_mainR4"> <div class="phpmain1_4R_readrank"> <div class="phpmain1_4R_readrank_top"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/hotarticle2.png" alt="" /> <h2>Heißer Artikel</h2> </div> <div class="phpgenera_Details_mainR4_bottom"> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796796771.html" title="Wie kann ich KB5055612 in Windows 10 nicht installieren?" class="phpgenera_Details_mainR4_bottom_title">Wie kann ich KB5055612 in Windows 10 nicht installieren?</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>4 Wochen vor</span> <span>By DDD</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796797907.html" title="<🎜>: Wachsen Sie einen Garten - Komplette Mutationsführer" class="phpgenera_Details_mainR4_bottom_title"><🎜>: Wachsen Sie einen Garten - Komplette Mutationsführer</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>3 Wochen vor</span> <span>By DDD</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796797130.html" title="<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys" class="phpgenera_Details_mainR4_bottom_title"><🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>3 Wochen vor</span> <span>By 尊渡假赌尊渡假赌尊渡假赌</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796796926.html" title="Nordhold: Fusionssystem, erklärt" class="phpgenera_Details_mainR4_bottom_title">Nordhold: Fusionssystem, erklärt</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>4 Wochen vor</span> <span>By 尊渡假赌尊渡假赌尊渡假赌</span> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/1796797896.html" title="Mandragora: Flüstern des Hexenbaum" class="phpgenera_Details_mainR4_bottom_title">Mandragora: Flüstern des Hexenbaum</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <span>3 Wochen vor</span> <span>By 尊渡假赌尊渡假赌尊渡假赌</span> </div> </div> </div> <div class="phpgenera_Details_mainR3_more"> <a href="https://www.php.cn/de/article.html">Mehr anzeigen</a> </div> </div> </div> <div class="phpgenera_Details_mainR3"> <div class="phpmain1_4R_readrank"> <div class="phpmain1_4R_readrank_top"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/hottools2.png" alt="" /> <h2>Heiße Werkzeuge</h2> </div> <div class="phpgenera_Details_mainR3_bottom"> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/toolset/development-tools/92" title="Notepad++7.3.1" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/manual/000/000/001/58ab96f0f39f7357.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Notepad++7.3.1" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/toolset/development-tools/92" title="Notepad++7.3.1" class="phpmain_tab2_mids_title"> <h3>Notepad++7.3.1</h3> </a> <p>Einfach zu bedienender und kostenloser Code-Editor</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/toolset/development-tools/93" title="SublimeText3 chinesische Version" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/manual/000/000/001/58ab97a3baad9677.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="SublimeText3 chinesische Version" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/toolset/development-tools/93" title="SublimeText3 chinesische Version" class="phpmain_tab2_mids_title"> <h3>SublimeText3 chinesische Version</h3> </a> <p>Chinesische Version, sehr einfach zu bedienen</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/toolset/development-tools/121" title="Senden Sie Studio 13.0.1" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/manual/000/000/001/58ab97ecd1ab2670.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Senden Sie Studio 13.0.1" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/toolset/development-tools/121" title="Senden Sie Studio 13.0.1" class="phpmain_tab2_mids_title"> <h3>Senden Sie Studio 13.0.1</h3> </a> <p>Leistungsstarke integrierte PHP-Entwicklungsumgebung</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/manual/000/000/001/58d0e0fc74683535.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Dreamweaver CS6" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_title"> <h3>Dreamweaver CS6</h3> </a> <p>Visuelle Webentwicklungstools</p> </div> </div> <div class="phpmain_tab2_mids_top"> <a href="https://www.php.cn/de/toolset/development-tools/500" title="SublimeText3 Mac-Version" class="phpmain_tab2_mids_top_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" class="lazy" data-src="https://img.php.cn/upload/manual/000/000/001/58d34035e2757995.png?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="SublimeText3 Mac-Version" /> </a> <div class="phpmain_tab2_mids_info"> <a href="https://www.php.cn/de/toolset/development-tools/500" title="SublimeText3 Mac-Version" class="phpmain_tab2_mids_title"> <h3>SublimeText3 Mac-Version</h3> </a> <p>Codebearbeitungssoftware auf Gottesniveau (SublimeText3)</p> </div> </div> </div> <div class="phpgenera_Details_mainR3_more"> <a href="https://www.php.cn/de/ai">Mehr anzeigen</a> </div> </div> </div> <div class="phpgenera_Details_mainR4"> <div class="phpmain1_4R_readrank"> <div class="phpmain1_4R_readrank_top"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/hotarticle2.png" alt="" /> <h2>Heiße Themen</h2> </div> <div class="phpgenera_Details_mainR4_bottom"> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/java-tutorial" title="Java-Tutorial" class="phpgenera_Details_mainR4_bottom_title">Java-Tutorial</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/eyess.png" alt="" /> <span>1670</span> </div> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/tiezi.png" alt="" /> <span>14</span> </div> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/cakephp-tutor" title="CakePHP-Tutorial" class="phpgenera_Details_mainR4_bottom_title">CakePHP-Tutorial</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/eyess.png" alt="" /> <span>1428</span> </div> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/tiezi.png" alt="" /> <span>52</span> </div> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/laravel-tutori" title="Laravel-Tutorial" class="phpgenera_Details_mainR4_bottom_title">Laravel-Tutorial</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/eyess.png" alt="" /> <span>1329</span> </div> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/tiezi.png" alt="" /> <span>25</span> </div> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/php-tutorial" title="PHP-Tutorial" class="phpgenera_Details_mainR4_bottom_title">PHP-Tutorial</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/eyess.png" alt="" /> <span>1274</span> </div> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/tiezi.png" alt="" /> <span>29</span> </div> </div> </div> <div class="phpgenera_Details_mainR4_bottoms"> <a href="https://www.php.cn/de/faq/c-tutorial" title="C#-Tutorial" class="phpgenera_Details_mainR4_bottom_title">C#-Tutorial</a> <div class="phpgenera_Details_mainR4_bottoms_info"> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/eyess.png" alt="" /> <span>1256</span> </div> <div class="phpgenera_Details_mainR4_bottoms_infos"> <img src="/static/imghw/tiezi.png" alt="" /> <span>24</span> </div> </div> </div> </div> <div class="phpgenera_Details_mainR3_more"> <a href="https://www.php.cn/de/faq/zt">Mehr anzeigen</a> </div> </div> </div> </div> </div> <div class="Article_Details_main2"> <div class="phpgenera_Details_mainL4"> <div class="phpmain1_2_top"> <a href="javascript:void(0);" class="phpmain1_2_top_title">Related knowledge<img src="/static/imghw/index2_title2.png" alt="" /></a> </div> <div class="phpgenera_Details_mainL4_info"> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796796853.html" title="Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174473354083140.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit" /> </a> <a href="https://www.php.cn/de/faq/1796796853.html" title="Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit" class="phphistorical_Version2_mids_title">Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit</a> <span class="Articlelist_txts_time">Apr 16, 2025 am 12:12 AM</span> <p class="Articlelist_txts_p">Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796795636.html" title="Von C/C nach JavaScript: Wie alles funktioniert" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174456030117549.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Von C/C nach JavaScript: Wie alles funktioniert" /> </a> <a href="https://www.php.cn/de/faq/1796795636.html" title="Von C/C nach JavaScript: Wie alles funktioniert" class="phphistorical_Version2_mids_title">Von C/C nach JavaScript: Wie alles funktioniert</a> <span class="Articlelist_txts_time">Apr 14, 2025 am 12:05 AM</span> <p class="Articlelist_txts_p">Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796797846.html" title="JavaScript und das Web: Kernfunktionalität und Anwendungsfälle" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174490675171406.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="JavaScript und das Web: Kernfunktionalität und Anwendungsfälle" /> </a> <a href="https://www.php.cn/de/faq/1796797846.html" title="JavaScript und das Web: Kernfunktionalität und Anwendungsfälle" class="phphistorical_Version2_mids_title">JavaScript und das Web: Kernfunktionalität und Anwendungsfälle</a> <span class="Articlelist_txts_time">Apr 18, 2025 am 12:19 AM</span> <p class="Articlelist_txts_p">Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796798357.html" title="JavaScript in Aktion: Beispiele und Projekte in realer Welt" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174499280060776.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="JavaScript in Aktion: Beispiele und Projekte in realer Welt" /> </a> <a href="https://www.php.cn/de/faq/1796798357.html" title="JavaScript in Aktion: Beispiele und Projekte in realer Welt" class="phphistorical_Version2_mids_title">JavaScript in Aktion: Beispiele und Projekte in realer Welt</a> <span class="Articlelist_txts_time">Apr 19, 2025 am 12:13 AM</span> <p class="Articlelist_txts_p">Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796797281.html" title="Verständnis der JavaScript -Engine: Implementierungsdetails" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174481955113957.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Verständnis der JavaScript -Engine: Implementierungsdetails" /> </a> <a href="https://www.php.cn/de/faq/1796797281.html" title="Verständnis der JavaScript -Engine: Implementierungsdetails" class="phphistorical_Version2_mids_title">Verständnis der JavaScript -Engine: Implementierungsdetails</a> <span class="Articlelist_txts_time">Apr 17, 2025 am 12:05 AM</span> <p class="Articlelist_txts_p">Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796796259.html" title="Python gegen JavaScript: Community, Bibliotheken und Ressourcen" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174464741163649.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Python gegen JavaScript: Community, Bibliotheken und Ressourcen" /> </a> <a href="https://www.php.cn/de/faq/1796796259.html" title="Python gegen JavaScript: Community, Bibliotheken und Ressourcen" class="phphistorical_Version2_mids_title">Python gegen JavaScript: Community, Bibliotheken und Ressourcen</a> <span class="Articlelist_txts_time">Apr 15, 2025 am 12:16 AM</span> <p class="Articlelist_txts_p">Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796801667.html" title="Python vs. JavaScript: Entwicklungsumgebungen und Tools" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174559739183083.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Python vs. JavaScript: Entwicklungsumgebungen und Tools" /> </a> <a href="https://www.php.cn/de/faq/1796801667.html" title="Python vs. JavaScript: Entwicklungsumgebungen und Tools" class="phphistorical_Version2_mids_title">Python vs. JavaScript: Entwicklungsumgebungen und Tools</a> <span class="Articlelist_txts_time">Apr 26, 2025 am 12:09 AM</span> <p class="Articlelist_txts_p">Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.</p> </div> <div class="phphistorical_Version2_mids"> <a href="https://www.php.cn/de/faq/1796798854.html" title="Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern" class="phphistorical_Version2_mids_img"> <img onerror="this.onerror=''; this.src='/static/imghw/default1.png'" src="/static/imghw/default1.png" class="lazy" data-src="https://img.php.cn/upload/article/001/253/068/174507851090169.jpg?x-oss-process=image/resize,m_fill,h_207,w_330" alt="Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern" /> </a> <a href="https://www.php.cn/de/faq/1796798854.html" title="Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern" class="phphistorical_Version2_mids_title">Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern</a> <span class="Articlelist_txts_time">Apr 20, 2025 am 12:01 AM</span> <p class="Articlelist_txts_p">C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.</p> </div> </div> <a href="https://www.php.cn/de/web-designer.html" class="phpgenera_Details_mainL4_botton"> <span>See all articles</span> <img src="/static/imghw/down_right.png" alt="" /> </a> </div> </div> </div> </main> <footer> <div class="footer"> <div class="footertop"> <img src="/static/imghw/logo.png" alt=""> <p>Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!</p> </div> <div class="footermid"> <a href="https://www.php.cn/de/about/us.html">Über uns</a> <a href="https://www.php.cn/de/about/disclaimer.html">Haftungsausschluss</a> <a href="https://www.php.cn/de/update/article_0_1.html">Sitemap</a> </div> <div class="footerbottom"> <p> © php.cn All rights reserved </p> </div> </div> </footer> <input type="hidden" id="verifycode" value="/captcha.html"> <script>layui.use(['element', 'carousel'], function () {var element = layui.element;$ = layui.jquery;var carousel = layui.carousel;carousel.render({elem: '#test1', width: '100%', height: '330px', arrow: 'always'});$.getScript('/static/js/jquery.lazyload.min.js', function () {$("img").lazyload({placeholder: "/static/images/load.jpg", effect: "fadeIn", threshold: 200, skip_invisible: false});});});</script> <script src="/static/js/common_new.js"></script> <script type="text/javascript" src="/static/js/jquery.cookie.js?1747183431"></script> <script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script> <link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all' /> <script type='text/javascript' src='/static/js/viewer.min.js?1'></script> <script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script> <script type="text/javascript" src="/static/js/global.min.js?5.5.53"></script> <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function () { var u = "https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u + 'matomo.php']); _paq.push(['setSiteId', '9']); var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s); })(); </script> <script> // top layui.use(function () { var util = layui.util; util.fixbar({ on: { mouseenter: function (type) { layer.tips(type, this, { tips: 4, fixed: true, }); }, mouseleave: function (type) { layer.closeAll("tips"); }, }, }); }); document.addEventListener("DOMContentLoaded", (event) => { // 定义一个函数来处理滚动链接的点击事件 function setupScrollLink(scrollLinkId, targetElementId) { const scrollLink = document.getElementById(scrollLinkId); const targetElement = document.getElementById(targetElementId); if (scrollLink && targetElement) { scrollLink.addEventListener("click", (e) => { e.preventDefault(); // 阻止默认链接行为 targetElement.scrollIntoView({ behavior: "smooth" }); // 平滑滚动到目标元素 }); } else { console.warn( `Either scroll link with ID '${scrollLinkId}' or target element with ID '${targetElementId}' not found.` ); } } // 使用该函数设置多个滚动链接 setupScrollLink("Article_Details_main1L2s_1", "article_main_title1"); setupScrollLink("Article_Details_main1L2s_2", "article_main_title2"); setupScrollLink("Article_Details_main1L2s_3", "article_main_title3"); setupScrollLink("Article_Details_main1L2s_4", "article_main_title4"); setupScrollLink("Article_Details_main1L2s_5", "article_main_title5"); setupScrollLink("Article_Details_main1L2s_6", "article_main_title6"); // 可以继续添加更多的滚动链接设置 }); window.addEventListener("scroll", function () { var fixedElement = document.getElementById("Article_Details_main1Lmain"); var scrollTop = window.scrollY || document.documentElement.scrollTop; // 兼容不同浏览器 var clientHeight = window.innerHeight || document.documentElement.clientHeight; // 视口高度 var scrollHeight = document.documentElement.scrollHeight; // 页面总高度 // 计算距离底部的距离 var distanceToBottom = scrollHeight - scrollTop - clientHeight; // 当距离底部小于或等于300px时,取消固定定位 if (distanceToBottom <= 980) { fixedElement.classList.remove("Article_Details_main1Lmain"); fixedElement.classList.add("Article_Details_main1Lmain_relative"); } else { // 否则,保持固定定位 fixedElement.classList.remove("Article_Details_main1Lmain_relative"); fixedElement.classList.add("Article_Details_main1Lmain"); } }); </script> <script> document.addEventListener('DOMContentLoaded', function() { const mainNav = document.querySelector('.Article_Details_main1Lmain'); const header = document.querySelector('header'); if (mainNav) { window.addEventListener('scroll', function() { const scrollPosition = window.scrollY; if (scrollPosition > 84) { mainNav.classList.add('fixed'); } else { mainNav.classList.remove('fixed'); } }); } }); </script> </body> </html>