Inhaltsverzeichnis
Script 的堵塞(block)特性
1. Deferred Script (延迟脚本)
2. Dynamic Script Elements (动态脚本)
3. XMLHttpRequest Script Injection (XHR动态插入)
参考
Heim Web-Frontend HTML-Tutorial HTML中的script标签研究_html/css_WEB-ITnose

HTML中的script标签研究_html/css_WEB-ITnose

Jun 24, 2016 am 11:43 AM

Script 的堵塞(block)特性

Scripts without async or defer attributes, as well as inline scripts, are fetched and executed immediately, before the browser continues to parse the page. - MDN

the blocking nature of JavaScript, which is to say that nothing else can happen while JavaScript code is being executed. In fact, most browsers use a single process for both user interface (UI) updates and JavaScript execution, so only one can happen at any given moment in time. The longer JavaScript takes to execute, the longer it takes before the browser is free to respond to user input. - Nicholas C. Zakas「High Performance JavaScript 」

上面引用两段话的意思大致是,当浏览器解析DOM文档时,一旦遇到 script 标签(没有defer 和 async 属性)就会立即下载并执行,与此同时浏览器对文档的解析将会停止,直到 script 代码执行完成。出现这种堵塞行为一方面是因为浏览器的UI渲染,交互行为等都是单线程操作,另一方是因为 script 里面的代码可能会影响到后面文档的解析,比如下面的代码:

html<script type="text/javascript">  document.write("The date is " + (new Date()).toDateString());</script>

这个堵塞特性会严重的影响用户体验,下面是几种优化方案:

  • 尽量把脚本往文档的后面放,以减少对文档的堵塞,最好放在 前面。
  • 尽量把脚本按照它们的依赖关系放在一个文件中

不过更好的方法是下面的非堵塞加载脚本(Nonblocking Scripts)的方法:

1. Deferred Script (延迟脚本)

Script 有一个 defer 属性,拥有这个属性的script表明这个script不会修改DOM,因此这段脚本会在文档树全部解析完成后触发( to be executed after the document has been parsed). 但这个属性并不被所有的浏览器支持。

2. Dynamic Script Elements (动态脚本)

原理就是使用脚本创建 script 元素,设置 src 需为要动态添加脚本的 URL,再把这个 script 添加到DOM中。有时我们需要动态脚本加载完成后再执行某些操作,这就需要我们在脚本加载完成后添加一个回调函数,这个可以通过 script 的 onload 事件实现。下面的实现代码:

jsfunction loadJS(url, callback){  var script = document.createElement('script');  script.type = 'text/javascript';  if(script.readyState){  // 兼容IE的旧版本    script.onreadystatechange = function(){      if(script.readyState == 'loaded' || script.readyState == 'complete'){        script.onreadystatechange = null;        callback();      }    }  }  else{     script.onload = function(){      callback();    }      }  script.src = url;  document.getElementsByTagName('head')[0].appendChild(script);}

有时我们需要我们动态加载的脚本按照我们加载的顺序执行,但上面的实现并不能保证这一点,加载的脚本在下载完成后就会立即执行,而不会按照我们定义的顺序。要解决这个问题也不难,可以参照下面的代码:

jsloadJS('a.js', function(){  loadJS('b.js', function(){    loadJS('c.js', function(){      app.init();    })  })})

当有大量的脚本需要动态添加时,这样写也会遇到问题;另外的解决方案是利用一些现成的库,比如 LABjs

3. XMLHttpRequest Script Injection (XHR动态插入)

原理是利用XMLHttpReques(XHR)对象,动态获取一段JS代码,然后插入文档。
相对其他方法来说的一个优点是可以“懒执行”,也就是JS代码已经先下载好了并没有执行,可以在需要的来执行(?)(之前的动态脚本在下载后会立即执行)。实现代码:

jsfunction xhrLoadJS (url, callback){  var xhr = new XMLHttpRequest();  xhr.open('get', url, true);  xhr.onreadystatechange = function(){    if(xhr.readyState == 4){      if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){        var script = document.createElement('script');        script.type = 'text/script';        script.text = xhr.responseText;        eval(xhr.responseText);  // 执行代码        document.body.appendChild(script);        callback();      }    }  }  xhr.send(null);}

缺点是不能跨域请求

参考

  • Javascript 装载和执行
  • MDN Script元素
  • Nicholas C. Zakas 所著的「High Performance JavaScript 」的第一章 "Loading and Execution"
  • Erklärung dieser Website
    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

    Heiße KI -Werkzeuge

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Heiße Themen

    PHP-Tutorial
    1506
    276
    Implementierung des nativen faulen Ladens für Bilder in HTML Implementierung des nativen faulen Ladens für Bilder in HTML Jul 12, 2025 am 12:48 AM

    Native Lazy Loading ist eine integrierte Browserfunktion, die das faule Laden von Bildern durch Hinzufügen von Loading = "Lazy" zum Tag hinzufügen kann. 1. Es erfordert keine Bibliotheken von JavaScript oder Drittanbietern und wird direkt in HTML verwendet. 2. Es ist für Bilder geeignet, die nicht auf dem ersten Bildschirm unterhalb der Seite, die Scrolling-Add-Ons und große Bildressourcen angezeigt werden. 3. Es ist nicht für Bilder mit dem ersten Bildschirm oder Display geeignet: keine; 4. Bei der Verwendung sollte ein geeigneter Platzhalter festgelegt werden, um Layout -Jitter zu vermeiden. 5. Es sollte das Laden von Responsive Bild in Kombination mit SRCSet- und Größenattributen optimieren. 6. Kompatibilitätsprobleme müssen berücksichtigt werden. Einige alte Browser unterstützen es nicht. Sie können durch Merkmalserkennung verwendet und mit JavaScript -Lösungen kombiniert werden.

    Implementierung ansprechender Bilder mit den Attributen HTML SRCSET und Größen Implementierung ansprechender Bilder mit den Attributen HTML SRCSET und Größen Jul 12, 2025 am 12:15 AM

    SRCSET und Größen sind wichtige Eigenschaften für die HTML -Implementierung von reaktionsschnellen Bildern. SRCSET bietet mehrere Bildquellen und ihre Breite oder Pixeldichte wie 400 W und 800W, und der Browser wählt das entsprechende Bild entsprechend aus. Größen definiert die Anzeigebreite des Bildes unter verschiedenen Bildschirmbreiten, wie z. Im tatsächlichen Gebrauch müssen Sie mit der Medienabfrage eindeutig benannte multisige Bilder vorbereiten und die Leistung der Geräte testen, um zu vermeiden, dass Sie Größen oder Einheitsfehler ignorieren, wodurch Bandbreite speichert und die Leistung verbessert wird.

    Was sind die Unterschiede und Anwendungsfälle für HTML -Textbereiche und Eingabetyp -Text? Was sind die Unterschiede und Anwendungsfälle für HTML -Textbereiche und Eingabetyp -Text? Jul 12, 2025 am 02:48 AM

    Der Hauptunterschied besteht darin, dass TextArea mehrere Zeilen der Texteingabe unterstützt, während InputText nur in einer einzelnen Zeile verfügbar ist. 1. Verwenden Sie InputType = "Text", um für kurze und einzelne Benutzereingaben wie Benutzername, E-Mail-Adresse usw. geeignet zu sein, und kann MaxLength festlegen, um die Anzahl der Zeichen zu begrenzen. Der Browser bietet eine automatische Füllfunktion und erleichtert das gleichmäßige Stylen von Browsern. 2. Verwenden Sie TextArea für Szenarien, die mehrere Eingangszeilen erfordern, z. B. Kommentarfelder, Rückkopplungsformulare, Support -Linienbrüche und Absätze und können die Größe durch CSS steuern oder die Einstellfunktion deaktivieren. Beide Unterstützungsfunktionen wie Platzhalter und erforderliche Füllungen. TextArea definiert jedoch die Größe durch Zeilen und Cols, und die Eingabe verwendet das Größenattribut.

    Das ` vs.`  `in HTML Das ` vs.` `in HTML Jul 19, 2025 am 12:41 AM

    Es handelt sich um ein Element auf Blockebene, das verwendet wird, um große Blockgehaltbereiche zu teilen. Es ist ein Inline -Element, das für die Verpackung kleiner Segmente von Text oder Inhaltsfragmenten geeignet ist. Die spezifischen Unterschiede sind wie folgt: 1. Nehmen Sie ausschließlich eine Reihe ein, Breite und Höhe, innere und äußere Ränder können festgelegt werden, die häufig in Layoutstrukturen wie Header, Seitenleisten usw. verwendet werden; 2. Wickeln Sie keine Linien ein, belegen Sie nur die Inhaltsbreite und werden für die lokale Stilkontrolle wie Verfärbungen, Fettdruck usw. verwendet. 3. In Bezug auf die Nutzungsszenarien ist es für die Layout- und Strukturorganisation des Gesamtbereichs geeignet und wird für Anpassungen im kleinen Maßstab verwendet, die das Gesamtlayout nicht beeinflussen. 4. Beim Verschachteln kann es alle Elemente enthalten, und Blockebene sollten im Inneren nicht verschachtelt sein.

    Essentielle HTML -Tags für Anfänger Essentielle HTML -Tags für Anfänger Jul 27, 2025 am 03:45 AM

    Um schnell mit HTML zu beginnen, müssen Sie nur ein paar grundlegende Tags beherrschen, um ein Web -Skelett zu erstellen. 1. Die Seitenstruktur ist unerlässlich und enthält das Stammelement Meta -Informationen und ist der Inhaltsanzeigebereich. 2. Verwenden Sie den Titel. Je höher das Niveau, desto kleiner ist die Zahl. Verwenden Sie Tags, um den Text zu segmentieren, um zu vermeiden, dass das Level überspringt. 3. Die Link verwendet Tags und stimmt mit den HREF -Attributen überein, und das Bild verwendet Tags und enthält SRC- und ALT -Attribute. V. Jeder Eintrag ist dargestellt und muss in die Liste verschachtelt sein. 5. Anfänger müssen nicht alle Tags auswendig machen. Es ist effizienter zu schreiben und zu überprüfen, während Sie schreiben. Beherrschen Sie die Struktur, den Text, die Links, Bilder und Listen, um grundlegende Webseiten zu erstellen.

    Wie erstelle ich ein einfaches Popup oder ein Modal mit HTML, CSS und JS? Wie erstelle ich ein einfaches Popup oder ein Modal mit HTML, CSS und JS? Jul 12, 2025 am 02:42 AM

    Um einen grundlegenden Pop-up-Effekt zu erzielen, müssen Sie die folgenden Schritte ausführen: 1. Struktur: Verwenden Sie HTML, um Triggertasten, Maskenebene und Popup-Inhaltsbereich zu erstellen. 2. Stil: Setzen Sie die Standardstile für versteckte, zentrierte Layout, Maskenhintergrund und schließen Sie die Schaltflächenstile durch CSS. 3. Interaktion: Verwenden Sie JavaScript, um Klick-Ereignisse zu binden, um die Popup-Anzeige zu steuern und auszublenden. Sie können die ESC-Schließfunktion erweitern. 4. Optimierung: Fügen Sie CSS -Animation hinzu, um die Benutzererfahrung zu verbessern. Der gesamte Prozess erfordert keine Bibliothek von Drittanbietern, die für die schnelle Verwirklichung grundlegender Popup-Funktionen geeignet ist.

    Was sind Webarbeiter und wie beziehen sie sich auf HTML? Was sind Webarbeiter und wie beziehen sie sich auf HTML? Jul 12, 2025 am 03:03 AM

    Webworker sind unabhängige Threads, die im Browser-Hintergrund ausgeführt werden und zur Ausführung zeitaufwändiger Aufgaben verwendet werden, ohne die Benutzeroberfläche zu blockieren. Sie werden über JavaScript -Dateien implementiert und von Skripten auf HTML -Seiten gestartet. Sobald sie ausgeführt wurden, werden sie vom Haupt -Thread getrennt. 1. Webworker können nicht direkt auf die DOM zugreifen, um die Seitenstabilität zu gewährleisten. 2. Sie erkennen eine sichere Kommunikation mit dem Hauptfaden durch Postmessage () und OnMessage; 3. Es eignet sich zur Verarbeitung von CPU-intensiven Aufgaben wie Bildern, komplexen Computing, Datenanalyse; 4. Es unterstützt einige APIs wie SetTimeout, Fetch und IndexedDB. 5. Wenn Sie es verwenden, müssen Sie auf Debugging-Schwierigkeiten, Speicherverbrauch, Cross-Domänen-Beschränkungen und andere Probleme achten.

    Schatten -Dom -Konzepte und HTML -Integration Schatten -Dom -Konzepte und HTML -Integration Jul 24, 2025 am 01:39 AM

    Shadowdom ist eine Technologie, die in der Webkomponenten -Technologie verwendet wird, um isolierte DOM -Subträume zu erstellen. 1. Es ermöglicht das Reittier einer unabhängigen DOM -Struktur für gewöhnliche HTML -Elemente mit eigenen Stilen und Verhaltensweisen und wirkt sich nicht auf das Hauptdokument aus. 2. über JavaScript erstellt, z. 3.. In Kombination mit HTML hat es drei Hauptmerkmale: klare Struktur, Stilisolation und Inhaltsprojektion (Slot); 4. Notizen umfassen komplexe Debugging, Style Scope Control, Performance Overhead und Framework -Kompatibilitätsprobleme. Kurz gesagt, Shadowdom bietet native Kapselungsfunktionen für den Aufbau wiederverwendbarer und nicht bedeckender UI-Komponenten.

    See all articles