Baseline Widely available *
HTML <script>
å
ç´ ç¨äºåµå
¥å¯æ§è¡ä»£ç ææ°æ®ï¼è¿é常ç¨ä½åµå
¥æè
å¼ç¨ JavaScript 代ç ã<script>
å
ç´ ä¹è½å¨å
¶ä»è¯è¨ä¸ä½¿ç¨ï¼æ¯å¦ WebGL ç GLSL çè²å¨è¯è¨å JSONã
该å ç´ å å«å ¨å±å±æ§ã
async
å¯¹äºæ®éèæ¬ï¼å¦æåå¨ async
屿§ï¼é£ä¹æ®éèæ¬ä¼è¢«å¹¶è¡è¯·æ±ï¼å¹¶å°½å¿«è§£æåæ§è¡ã
å¯¹äºæ¨¡åèæ¬ï¼å¦æåå¨ async
屿§ï¼é£ä¹èæ¬åå
¶ææä¾èµé½ä¼å¨å»¶ç¼éå䏿§è¡ï¼å æ¤å®ä»¬ä¼è¢«å¹¶è¡è¯·æ±ï¼å¹¶å°½å¿«è§£æåæ§è¡ã
è¯¥å±æ§è½å¤æ¶é¤è§£æé»å¡ç Javascriptãè§£æé»å¡ç Javascript ä¼å¯¼è´æµè§å¨å¿
é¡»å è½½å¹¶ä¸æ§è¡èæ¬ï¼ä¹åæè½ç»§ç»è§£æãdefer
å¨è¿ä¸ç¹ä¸ä¹æç±»ä¼¼çä½ç¨ã
è¿æ¯ä¸ªå¸å°å±æ§ï¼å¸å°å±æ§çå卿å³ç true å¼ï¼å¸å°å±æ§ç缺失æå³ç false å¼ã
å ³äºæµè§å¨æ¯æï¼è¯·åè§æµè§å¨å ¼å®¹æ§ç« èãå¦å¯åè§ asm.js ç弿¥èæ¬æç« ã
crossorigin
æ£å¸¸ç script
å
ç´ å°æå°çä¿¡æ¯ä¼ éç» window.onerror
ï¼ç¨äºé£äºæ²¡æéè¿æ å CORS æ£æ¥çèæ¬ãè¦å
许对éæåªä½ä½¿ç¨ç¬ç«ååçç½ç«è¿è¡é误记å½ï¼è¯·ä½¿ç¨æ¤å±æ§ãåè§ CORS è®¾ç½®å±æ§ï¼ä»¥è·å¾å¯¹å
¶ææåæ°çæ´å¤æè¿°æ§è§£éã
defer
è¿ä¸ªå¸å°å±æ§ç设置æ¯ä¸ºäºåæµè§å¨è¡¨æï¼è¯¥èæ¬æ¯è¦å¨ææ¡£è¢«è§£æåï¼ä½å¨è§¦å DOMContentLoaded
äºä»¶ä¹åæ§è¡çã
å
å« defer
屿§çèæ¬å°é»å¡ DOMContentLoaded
äºä»¶è§¦åï¼ç´å°èæ¬å®æå 载并æ§è¡ã
è¦åï¼ æ¬å±æ§ä¸åºå¨ç¼ºå° src
屿§çæ
åµä¸ä½¿ç¨ï¼ä¹å°±æ¯å
èèæ¬çæ
åµä¸ï¼ï¼è¿ç§æ
åµä¸å°ä¸ä¼çæã
defer
屿§å¯¹æ¨¡åèæ¬ä¹ä¸ä¼çæââå®ä»¬é»è®¤æ¯ defer çã
å
å« defer
屿§çèæ¬ä¼æç
§å®ä»¬åºç°å¨ææ¡£ä¸çé¡ºåºæ§è¡ã
è¿ä¸ªå±æ§è½å¤æ¶é¤é»å¡è§£æç JavaScriptï¼å¨è¿ç§æ
åµä¸ï¼æµè§å¨å¿
é¡»å¨ç»§ç»è§£æä¹åå è½½åæ§è¡èæ¬ãasync
å¨è¿ç§æ
åµä¸ä¹æç±»ä¼¼çææã
fetchpriority
å®éªæ§
æä¾ä¸ä¸ªæç¤ºï¼è¯´æå¨è·åå¤é¨èæ¬æ¶è¦ä½¿ç¨çç¸å¯¹ä¼å 级ãå 许çå¼ï¼
high
è·åè¯¥èæ¬çä¼å 级æ¯å ¶ä»å¤é¨èæ¬çç级è¦é«ã
low
è·åè¯¥èæ¬çä¼å 级æ¯å ¶ä»å¤é¨èæ¬çç级è¦ä½ã
auto
é»è®¤å¼ï¼èªå¨ç¡®å®è·åè¯¥èæ¬çç¸å¯¹ä¼å 级ã
integrity
å å«ç¨æ·ä»£çå¯ç¨äºéªè¯æè·åå°èµæºç宿´æ§çå èå æ°æ®ãåè§åèµæºå®æ´æ§ã
nomodule
è¿ä¸ªå¸å°å±æ§è¢«è®¾ç½®æ¥æ æè¿ä¸ªèæ¬ä¸åºè¯¥å¨æ¯æ ES 模åçæµè§å¨ä¸æ§è¡ãå®é ä¸ï¼è¿å¯ç¨äºå¨ä¸æ¯ææ¨¡åå JavaScript çæ§æµè§å¨ä¸æä¾åéèæ¬ã
nonce
å¨ script-src Content-Security-Policy ä¸å è®¸èæ¬çä¸ä¸ªä¸æ¬¡æ§å å¯éæºæ°ï¼nonceï¼ãæå¡å¨æ¯æ¬¡ä¼ è¾çç¥æ¶é½å¿ é¡»çæä¸ä¸ªå¯ä¸ç nonce å¼ãæä¾ä¸ä¸ªæ æ³çæµç nonce æ¯è³å ³éè¦çï¼å 为ç»è¿ä¸ä¸ªèµæºççç¥æ¯å¾®ä¸è¶³éçã
referrerpolicy
表示å¨è·åèæ¬æèæ¬è·åèµæºæ¶ï¼è¦åéåªä¸ª referrerï¼
no-referrer
ï¼ä¸ä¼åé Referer
æ 头ãno-referrer-when-downgrade
ï¼é»è®¤ï¼ï¼å¦ææ²¡æ TLSï¼HTTPSï¼åè®®ï¼Referer
æ 头å°ä¸ä¼è¢«åéå°æºä¸ãorigin
ï¼åéç referrer å°è¢«éå¶å¨ referrer 页é¢çæºï¼å
¶åè®®ã主æºå端å£ãorigin-when-cross-origin
ï¼å°ä¼éå¶åéè³å
¶ä»æºç referrer çåè®®ã主æºå端å£å·ãå¨åæºç导èªä¸ä»ç¶å
æ¬è·¯å¾ãsame-origin
ï¼å¨åæºå
å°åé referrerï¼ä½æ¯è·¨æºè¯·æ±ä¸å
å« referrer ä¿¡æ¯ãstrict-origin
ï¼åªå¨åè®®å®å
¨ç级ç¸åæ¶ï¼å¦ HTTPSâHTTPSï¼åéææ¡£çæºä½ä¸º referrerï¼ç®æ å®å
¨æ§éä½ï¼å¦ HTTPSâHTTPï¼æ¶ä¸åéãstrict-origin-when-cross-origin
ï¼å¨æ§è¡åæºè¯·æ±æ¶ï¼åé宿´ç URLï¼ä½åªå¨åè®®å®å
¨çº§å«ä¿æä¸åï¼å¦ HTTPSâHTTPSï¼æ¶åéæºï¼èå¨ç®æ å®å
¨æ§éä½ï¼å¦ HTTPSâHTTPï¼æ¶ä¸åéæ å¤´ãunsafe-url
ï¼referrer å°å
嫿ºåè·¯å¾ï¼ä½ä¸å
å«ç段ãå¯ç åç¨æ·åï¼ãè¿ä¸ªå¼æ¯ä¸å®å
¨çï¼å 为å®å° TLS ä¿æ¤çèµæºçæºåè·¯å¾æ³é²ç»ä¸å®å
¨çæºã
夿³¨ï¼ 空å符串ï¼""
ï¼æ¢æ¯é»è®¤å¼ï¼ä¹æ¯å¨ä¸æ¯æ referrerpolicy
çæ
åµä¸çä¸ä¸ªåéå¼ãå¦ææ²¡æå¨ <script>
å
ç´ ä¸æç¡®æå® referrerpolicy
ï¼å®å°éç¨æ´é«çº§å«ç referrer çç¥ï¼å³å¯¹æ´ä¸ªææ¡£æå设置ççç¥ãå¦ææ²¡ææ´é«çº§å«ççç¥ï¼ç©ºå符串å°è¢«è§ä¸ºçåäº no-referrer-when-downgrade
ã
src
è¿ä¸ªå±æ§å®ä¹å¼ç¨å¤é¨èæ¬ç URIï¼è¿å¯ä»¥ç¨æ¥ä»£æ¿ç´æ¥å¨ææ¡£ä¸åµå ¥èæ¬ã
type
è¯¥å±æ§è¡¨ç¤ºæä»£è¡¨çèæ¬ç±»åãè¯¥å±æ§çå¼å¯è½ä¸ºä»¥ä¸ç±»åï¼
ä»£è¡¨èæ¬ä¸ºå å« JavaScript 代ç çâä¼ ç»çèæ¬âãå¦æèæ¬æçæ¯ JavaScript 代ç ï¼æä»¬é¼å±ä½è çç¥è¿ä¸ªå±æ§ï¼è䏿¯æå®ä¸ä¸ª MIME ç±»åãææç JavaScript MIME ç±»åé½åå¨ IANA çåªä½ç±»åè§èä¸ã
module
æ¤å¼å¯¼è´ä»£ç 被è§ä¸º JavaScript 模åãå
¶ä¸ç代ç å
容ä¼å»¶åå¤çãcharset
å defer
屿§ä¸ä¼çæã对äºä½¿ç¨ module
çæ´å¤ä¿¡æ¯ï¼è¯·åè§ JavaScript 模åæåãä¸ä¼ ç»ä»£ç ä¸åçæ¯ï¼æ¨¡å代ç éè¦ä½¿ç¨ CORS åè®®æ¥è·¨æºè·åã
importmap
æ¤å¼ä»£è¡¨å ç´ ä½å å å«å¯¼å ¥æ å°ï¼importmapï¼è¡¨ãå¯¼å ¥æ å°è¡¨æ¯ä¸ä¸ª JSON 对象ï¼å¼åè å¯ä»¥ç¨å®æ¥æ§å¶æµè§å¨å¨å¯¼å ¥ JavaScript æ¨¡åæ¶å¦ä½è§£ææ¨¡åæ è¯ç¬¦ã
æåµå
¥çå
容被è§ä¸ºä¸ä¸ªæ°æ®åï¼ä¸ä¼è¢«æµè§å¨å¤çãå¼å人åå¿
é¡»ä½¿ç¨ææç MIME ç±»åï¼ä½ä¸æ¯ JavaScript MIME ç±»åæ¥è¡¨ç¤ºæ°æ®åãææå
¶ä»å±æ§ï¼å
æ¬ src
åä¼è¢«å¿½ç¥ã
blocking
å®éªæ§
è¿ä¸ªå±æ§æç¡®æåºï¼å¨è·åèæ¬çè¿ç¨ä¸ï¼æäºæä½åºè¯¥è¢«é»æãè¦é»æçæä½å¿ é¡»æ¯ä¸ä¸ªä»¥ç©ºæ ¼åéçå表ï¼ä¸é¢ååºäºé»æå±æ§ã
render
ï¼å±å¹ä¸æ¸²æå
容çæä½åºè¯¥è¢«é»æãcharset
å·²å¼ç¨
妿åå¨ï¼å®çå¼å¿
é¡»æ¯ ASCII 大å°å䏿æçâutf-8
âçå¹é
ãæ²¡æå¿
è¦æå® charset
屿§ï¼å ä¸ºææ¡£å¿
é¡»ä½¿ç¨ UTF-8ï¼èä¸ script
å
ç´ ä»ææ¡£ç»§æ¿å
¶å符ç¼ç ã
language
å·²å¼ç¨ éæ å
å type
屿§ç±»ä¼¼ï¼è¿ä¸ªå±æ§å®ä¹èæ¬ä½¿ç¨çè¯è¨ã使¯ä¸ type
ä¸åçæ¯ï¼è¿ä¸ªå±æ§çå¯è½å¼ä»æªè¢«æ ååè¿ãè¯·ç¨ type
屿§ä»£æ¿è¿ä¸ªå±æ§ã
没æ async
ãdefer
æ type="module"
屿§çèæ¬ï¼ä»¥å没æ type="module"
屿§çå
èèæ¬ï¼ä¼å¨æµè§å¨ç»§ç»è§£æé¡µé¢ä¹åç«å³è·åå¹¶æ§è¡ã
èæ¬åºè¯¥ä»¥ text/javascript
ç MIME ç±»åæä¾ï¼ä½æµè§å¨æ¯è¾å®½å®¹ï¼åªæå¨èæ¬ä»¥å¾åç±»åï¼image/*
ï¼ãè§é¢ç±»åï¼video/*
ï¼ãé³é¢ç±»åï¼audio/*
ï¼æ text/csv
æä¾æ¶æä¼é»æ¢å®ä»¬ãå¦æèæ¬åé»ï¼å°å该å
ç´ åé error
äºä»¶ï¼å¦åï¼å°åé load
äºä»¶ã
ä¸é¢è¿äºç¤ºä¾è¯´æäºå¦ä½ä½¿ç¨ <script>
å
ç´ æ¥å¯¼å
¥ï¼å¤é¨ï¼èæ¬ã
<script src="javascript.js"></script>
以ä¸ç¤ºä¾å±ç¤ºäºå¦ä½å <script>
å
ç´ å
æ¾å
¥ï¼å
èï¼èæ¬ã
<script>
alert("Hello World!");
</script>
async å defer
使ç¨äº async
屿§å è½½çèæ¬ä¸ä¼å¨ä¸è½½æ¶é»å¡é¡µé¢ãè¿æå³çå¨èæ¬æ§è¡å®æä¹åï¼å°æ æ³ä¸ºç¨æ·å¤ç忏²æç½é¡µä¸çå
¶ä½å
å®¹ãæ æ³ä¿è¯èæ¬çè¿è¡æ¬¡åºãå½é¡µé¢çèæ¬ä¹é´å½¼æ¤ç¬ç«ï¼ä¸ä¸ä¾èµäºæ¬é¡µé¢çå
¶ä»ä»»ä½èæ¬æ¶ï¼async
æ¯æçæ³çéæ©ã
ä½¿ç¨ defer
屿§å è½½çèæ¬å°æç
§å®ä»¬å¨é¡µé¢ä¸åºç°ç顺åºå è½½ãå¨é¡µé¢å
容å
¨é¨å è½½å®æ¯ä¹åï¼èæ¬ä¸ä¼è¿è¡ï¼å¦æèæ¬ä¾èµäº DOM çåå¨ï¼ä¾å¦ï¼èæ¬ä¿®æ¹äºé¡µé¢ä¸çä¸ä¸ªæå¤ä¸ªå
ç´ ï¼ï¼è¿ä¸ç¹é常æç¨ã
以䏿¯ä¸åèæ¬å è½½æ¹æ³çå¯è§å表示ï¼ä»¥åè¿å¯¹é¡µé¢æå³çä»ä¹ï¼
该å¾çæ¥èª HTML è§èï¼ç»è¿äºå¤å¶åè£åªï¼ä»¥ CC BY 4.0 è·å¾ææã
æ¯å¦ï¼å¦æä½ ç页é¢è¦å 载以ä¸ä¸ä¸ªèæ¬ï¼
<script async src="js/vendor/jquery.js"></script>
<script async src="js/script2.js"></script>
<script async src="js/script3.js"></script>
ä½ ä¸è½ä¾èµèæ¬çå 载顺åºãjquery.js
å¯è½å¨ script2
å script3
ä¹åæä¹åè°ç¨ï¼å¦æè¿æ ·ï¼åä¸¤ä¸ªèæ¬ä¸ä¾èµ jquery
ç彿°å°äº§çé误ï¼å ä¸ºèæ¬è¿è¡æ¶ jquery
å°æªå è½½ã
async
åºè¯¥å¨æå¤§éåå°èæ¬éè¦å è½½ï¼å¹¶ä¸åªæ³å°½å¿«å è½½å°ä½çæ
åµä¸ä½¿ç¨ãä¾å¦ï¼ä½ å¯è½éè¦å è½½ä¸äºæ¸¸ææ°æ®æä»¶ï¼è¿å¨æ¸¸æçæ£å¼å§æ¶æ¯éè¦çï¼ä½ç°å¨ä½ åªæ³æ¾ç¤ºæ¸¸æä»ç»ãæ é¢å大å
ï¼è䏿³è¢«èæ¬å è½½é»å¡ã
è§£å³è¿ä¸é®é¢å¯ä½¿ç¨ defer
屿§ï¼å¨èæ¬åå
容ä¸è½½åï¼èæ¬å°æç
§å¨é¡µé¢ä¸åºç°ç顺åºå è½½åè¿è¡ï¼
<script defer src="js/vendor/jquery.js"></script>
<script defer src="js/script2.js"></script>
<script defer src="js/script3.js"></script>
å¨ç¬¬äºä¸ªç¤ºä¾ä¸ï¼æä»¬å¯ä»¥ç¡®ä¿ jquery.js
å¿
å®å¨ script2.js
å script3.js
ä¹åå è½½ï¼åæ¶ script2.js
å¿
å®å¨ script3.js
ä¹åå è½½ãå¨é¡µé¢å
容å
¨é¨å è½½å®æä¹åï¼å®ä»¬ä¸ä¼è¿è¡ï¼å¦æä½ çèæ¬ä¾èµäº DOMï¼ä¾å¦ï¼å®ä»¬ä¿®æ¹äºé¡µé¢ä¸çä¸ä¸ªæå¤ä¸ªå
ç´ ï¼ï¼è¿å°é常æç¨ã
å°ç»ï¼
async
å defer
é½æç¤ºæµè§å¨å¨é¡µé¢çå
¶ä»é¨åï¼DOM çï¼æ£å¨ä¸è½½æ¶ï¼å¨ä¸ä¸ªåç¬ç线ç¨ä¸ä¸è½½èæ¬ï¼å æ¤å¨è·åè¿ç¨ä¸é¡µé¢å è½½ä¸ä¼è¢«é»å¡ãasync
屿§çèæ¬å°å¨ä¸è½½å®æåç«å³æ§è¡ãè¿å°é»å¡é¡µé¢ï¼å¹¶ä¸ä¿è¯ä»»ä½ç¹å®çæ§è¡é¡ºåºãdefer
屿§çèæ¬å°æç
§å®ä»¬ç顺åºå è½½ï¼å¹¶ä¸åªæå¨ææèæ¬å è½½å®æ¯åæä¼æ§è¡ãasync
ãdefer
å è½½èæ¬ï¼å¹¶å°å
³èçèæ¬æä½ æ³è¦æµè§å¨å è½½å®ä»¬ç顺åºç½®äºç¸åº <script>
å
ç´ ä¸ãæ¯æ module
ä½ä¸º type
屿§çæµè§å¨å¿½ç¥ä»»ä½å
·æ nomodule
屿§çèæ¬ãè¿ç§æºå¶å¯ä»¥å
è®¸ä½ å¨ä½¿ç¨æ¨¡åèæ¬æ¶ä¸ºä¸æ¯æçæµè§å¨æä¾ nomodule
æ è®°çåè½èæ¬ã
<script type="module" src="main.js"></script>
<script nomodule src="fallback.js"></script>
使ç¨å¯¼å
¥æ å°å¯¼å
¥æ¨¡å
å¨èæ¬ä¸å¯¼å
¥æ¨¡åæ¶ï¼å¦æä½ ä¸ä½¿ç¨ type=importmap
ç¹æ§ï¼é£ä¹æ¯ä¸ªæ¨¡åé½å¿
é¡»ä½¿ç¨æ¨¡åæå®ç¬¦æ¥å¯¼å
¥ï¼è¯¥æå®ç¬¦å¯ä»¥æ¯ç»å¯¹çä¹å¯ä»¥æ¯ç¸å¯¹ç URLãå¨ä¸é¢çä¾åä¸ï¼ç¬¬ä¸ä¸ªæ¨¡åæ è¯ç¬¦ï¼â./shapes/square.jsâï¼æ¯ç¸å¯¹äºææ¡£çæ ¹ URL è§£æçï¼è第äºä¸ªæ¯ç»å¯¹ URLã
import { name as squareName, draw } from "./shapes/square.js";
import { name as circleName } from "https://example.com/shapes/circle.js";
å¯¼å ¥æ å°å è®¸ä½ æä¾ä¸ä¸ªæ å°ï¼å½å¹é çæ¶åï¼å¯ä»¥æ¿æ¢æ¨¡åæ è¯ç¬¦ææ¬ãä¸é¢çå¯¼å ¥æ å°å®ä¹äºâsquareâåâcircleâé®ï¼å¯ä»¥ä½ä¸ºä¸è¿°æ¨¡åæå®çå«åã
<script type="importmap">
{
"imports": {
"square": "./shapes/square.js",
"circle": "https://example.com/shapes/circle.js"
}
}
</script>
è¿å 许æä»¬ä½¿ç¨æ¨¡åæ è¯ç¬¦ä¸çåç§°å¯¼å ¥æ¨¡åï¼è䏿¯ç»å¯¹æç¸å¯¹ç URLï¼ã
import { name as squareName, draw } from "square";
import { name as circleName } from "circle";
å ³äºä½¿ç¨å¯¼å ¥æ å°çæ´å¤ä¾åï¼è¯·åè§ JavaScript 模åæåä¸ç使ç¨å¯¼å ¥æ å°å¯¼å ¥æ¨¡åç« èã
å¨ HTML ä¸åµå ¥æ°æ®ä½ ä¹å¯ä»¥ä½¿ç¨ <script>
å
ç´ æ¥å¨ HTML ä¸åµå
¥æå¡ç«¯æ¸²æçæ°æ®ï¼å¨ type
屿§ä¸æå®ä¸ä¸ªåæ³çé JavaScript MIME ç±»åå³å¯ã
<!-- ç±æå¡ç«¯çæ -->
<script id="data" type="application/json">
{
"userId": 1234,
"userName": "Maria Cruz",
"memberSince": "2000-01-01T00:00:00.000Z"
}
</script>
<!-- éæä»£ç -->
<script>
const userInfo = JSON.parse(document.getElementById("data").text);
console.log("User information: %o", userInfo);
</script>
å¨èæ¬è¢«è·ååæ§è¡ä¹å黿¢æ¸²æ
ä½ å¯ä»¥å¨ blocking
屿§ä¸å
å« render
æ è®°ï¼é¡µé¢ç渲æå°è¢«é»æ¢ï¼ç´å°èæ¬è¢«è·ååæ§è¡ãå¨ä¸é¢çä¾åä¸ï¼æä»¬å°éäºä¸ä¸ªå¼æ¥èæ¬ç渲æãè¿æ ·ï¼èæ¬ä¸ä¼é»å¡è§£æï¼ä½ä¿è¯å¨æ¸²æå¼å§å被æ§è¡ã
<script blocking="render" async src="async-script.js"></script>
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4