HTML中的script标签研究_html/css_WEB-ITnose
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);}
缺点是不能跨域请求
参考

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

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.

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.

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.

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.

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.

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.

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.

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.
