JavaScript æ§è½ä¼å
èèå¦ä½å¨ä½ çç½ç«ä¸ä½¿ç¨ JavaScript 以åå¦ä½åå°å®å¯è½é æçæ§è½é®é¢æ¯é常éè¦çãè½ç¶å¾çåè§é¢å äºå¹³åç½ç«ä¸è½½åèç 70% 以ä¸ï¼ä½æ¯éåèæ¥çï¼JavaScript 对æ§è½çè´é¢å½±åæ´å¤§ââå®ä¼æ¾èå½±åä¸è½½æ¶é´ãæ¸²ææ§è½ãCPU åçµæ± 使ç¨ãæ¬æä»ç»äºä¸äºä¼å JavaScript çæå·§åæ¹æ³ï¼ä»¥æé«ä½ çç½ç«çæ§è½ã
| åæï¼ | åºæ¬çè®¡ç®æºç¥è¯ï¼ å·²å®è£ åºæ¬è½¯ä»¶ï¼ä»¥å对客æ·ç«¯ Web ææ¯çåºæ¬äºè§£ã |
|---|---|
| ç®æ ï¼ | äºè§£ JavaScript 对 Web æ§è½çå½±åï¼ä»¥åå¦ä½åè½»æè§£å³ç¸å ³é®é¢ã |
ä¼åä¸å¦
å¨å¼å§ä¼å代ç ä¹åï¼ä½ åºè¯¥å åçä¸ä¸ªé®é¢ï¼âæéè¦ä¼åä»ä¹ï¼âä¸é¢è®¨è®ºçä¸äºæå·§åæ¹æ³æ¯éç¨äºä»»ä½ Web 项ç®çè¯å¥½å®è·µï¼èå ¶ä»ä¸äºåªå¨ç¹å®æ åµä¸æéè¦ãè¯å¾å¨ææå°æ¹åºç¨è¿äºææ¯å¯è½æ¯ä¸å¿ è¦çï¼ä¹å¯è½æ¯æµªè´¹æ¶é´ãä½ åºè¯¥ç¡®å®æ¯ä¸ªé¡¹ç®å®é ä¸éè¦åªäºæ§è½ä¼åã
为æ¤ï¼ä½ éè¦æµéæ§è½ãæ£å¦åé¢ç龿¥æç¤ºï¼æå¤ç§ä¸åçæ¹æ³æ¥æµéæ§è½ï¼å ¶ä¸ä¸äºæ¹æ³æ¶åå¤æçæ§è½ APIãç¶èï¼æå¥½çå ¥é¨æ¹å¼æ¯å¦ä¹ å¦ä½ä½¿ç¨å ç½®çæµè§å¨ç½ç»åæ§è½å·¥å ·ï¼æ¥ç页é¢å è½½çåªäºé¨åè±è´¹äºå¾é¿æ¶é´ï¼å¹¶éè¦è¿è¡ä¼åã
ä¼å JavaScript çä¸è½½
æé«æãæä¸é»å¡ç JavaScript æ¯æ ¹æ¬ä¸ä½¿ç¨ JavaScriptãä½ åºè¯¥å°½éå°ä½¿ç¨ JavaScriptã以䏿¯ä¸äºéè¦è®°ä½çç¹ï¼
- å¹¶éæ»æ¯éè¦æ¡æ¶ï¼ä½ å¯è½çæä½¿ç¨æä¸ª JavaScript æ¡æ¶ãå¦æä½ å¯¹ä½¿ç¨è¯¥æ¡æ¶æç»éªåä¿¡å¿ï¼å¹¶ä¸åæ¬¢å®æä¾çææå·¥å ·ï¼é£ä¹å®å¯è½æ¯ä½ æå»ºå¤§å¤æ°é¡¹ç®çé¦éãç¶èï¼æ¡æ¶ä¼å¢å JavaScript çè´æ ãå¦æä½ åå»ºçæ¯ä¸ä¸ªç¸å¯¹éæçä½éªï¼å¯¹ JavaScript çè¦æ±å¾å°ï¼é£ä¹ä½ å¯è½ä¸éè¦é£ä¸ªæ¡æ¶ãä¹è®¸ä½ å¯ä»¥ä½¿ç¨å è¡æ å JavaScript æ¥å®ç°ä½ éè¦çåè½ã
- èèæ´ç®åçè§£å³æ¹æ¡ï¼ä½ å¯è½æä¸ä¸ªå丽ãæè¶£çè§£å³æ¹æ¡è¦å®ç°ï¼ä½è¯·èèç¨æ·æ¯å¦ä¼å欢å®ãä»ä»¬æ¯å¦æ´å欢ç®åçä¸è¥¿ï¼
- å 餿ªä½¿ç¨ç代ç ï¼è¿å¬èµ·æ¥å¾ææ¾ï¼ä½ä»¤äººæè®¶çæ¯å¾å¤å¼åè å¿è®°æ¸ é¤å¨å¼åè¿ç¨ä¸æ·»å çä¸ä¼è¢«ç¨å°çåè½ãä½ éè¦è°¨æ å¹¶ææè¯å°æ·»å åå é¤ä»£ç ãææèæ¬é½ä¼è¢«è§£æï¼æ è®ºå®æ¯å¦è¢«ä½¿ç¨ï¼å æ¤ï¼å å¿«ä¸è½½é度çä¸ä¸ªå¿«éæ¹æ³æ¯æè±ä»»ä½ä¸ä¼è¢«ä½¿ç¨çåè½ãæ¤å¤ï¼è¦èèé常åªä¼ä½¿ç¨æ¡æ¶ä¸çä¸å°é¨ååè½ãæ¯å¦æå¯è½å建ä¸ä¸ªä» å å«ä½ æéé¨åçæ¡æ¶çèªå®ä¹æå»ºçæ¬ï¼
- èèä½¿ç¨æµè§å¨å
ç½®ç¹æ§ï¼ä¹è®¸ä½ å¯ä»¥ä½¿ç¨æµè§å¨å·²ç»å
·å¤çç¹æ§ï¼è䏿¯éè¿ JavaScript èªå·±å建ãä¾å¦ï¼
- 使ç¨å ç½®ç客æ·ç«¯è¡¨åéªè¯ã
- ä½¿ç¨æµè§å¨èªå¸¦ç
<video>ææ¾å¨ã - ä½¿ç¨ CSS å¨ç»è䏿¯ JavaScript å¨ç»åºï¼åè§å¤çå¨ç»ï¼ã
ä½ è¿åºè¯¥å° JavaScript åæè¡¨ç¤ºå ³é®é¨ååéå ³é®é¨åçå¤ä¸ªæä»¶ãéè¿ä½¿ç¨ JavaScript 模åå¯ä»¥æ¯ä» 使ç¨åç¬çå¤é¨ JavaScript æä»¶æ´é«æå°å®ç°è¿ä¸ç¹ã
ç¶åï¼ä½ å¯ä»¥ä¼åè¿äºè¾å°çæä»¶ã代ç å缩åå°æä»¶ä¸çå符æ°ï¼ä»èåå° JavaScript çåèæ°æå¤§å°ãGzip å缩è¿ä¸æ¥å缩æä»¶ï¼å³ä½¿ä½ ä¸å¯¹ä»£ç è¿è¡å缩ä¹åºè¯¥ä½¿ç¨ãBrotli åç¼©ç±»ä¼¼äº Gzipï¼ä½é常ä¼äº Gzip å缩ã
ä½ å¯ä»¥æå¨æååä¼å代ç ï¼ä½é常使ç¨ç±»ä¼¼ Webpack çæ¨¡åæå å·¥å ·ä¼å徿´å¥½ã
å¤çè§£æåæ§è¡
卿¥çæ¬èä¸å å«çè¦ç¹ä¹åï¼éè¦çæ¯è¦äºè§£æµè§å¨é¡µé¢æ¸²æè¿ç¨ä¸ JavaScript æ¯å¨åªéå¤ççãå½ä¸ä¸ªç½é¡µè¢«å è½½æ¶ï¼
- é常é¦å è§£æ HTMLï¼æç §é¡µé¢ä¸åºç°ç顺åºè¿è¡è§£æã
- éå° CSS æ¶ï¼è§£æ CSS 以äºè§£éè¦åºç¨äºé¡µé¢çæ ·å¼ã卿¤æé´ï¼å¼å§è·å龿¥çèµæºï¼å¦å¾ååç½ç»åä½ã
- éå° JavaScript æ¶ï¼æµè§å¨è§£æãè¯ä¼°å¹¶æ§è¡å®ã
- ç¨åï¼æµè§å¨æ ¹æ®åºç¨äºæ¯ä¸ª HTML å ç´ ç CSS æ¥ç¡®å®æ¯ä¸ªå ç´ çæ ·å¼ã
- ç¶åå°ç»è¿æ ·å¼å¤ççç»æç»å¶å°å±å¹ä¸ã
夿³¨ï¼è¿åªæ¯ä¸ä¸ªé常ç®åçåè¿°ï¼ä½å¯ä»¥è®©ä½ äºè§£åççäºæ ã
è¿éå ³é®çæ¥éª¤æ¯ç¬¬ 3 æ¥ãé»è®¤æ åµä¸ï¼JavaScript çè§£æåæ§è¡ä¼é»å¡æ¸²æãè¿æå³çæµè§å¨å¨éå° JavaScript ä¹åï¼ä¼é»å¡è§£æä»»ä½åºç°å¨å ¶åç HTML 代ç ï¼ç´å°èæ¬å¤ç宿ãå æ¤ï¼æ ·å¼åç»å¶ä¹ä¼è¢«é»å¡ãå æ¤ï¼ä½ ä¸ä» éè¦ä»ç»èèä½ è¦ä¸è½½çå 容ï¼è¿è¦èè代ç 使¶ä»¥å以ä½ç§æ¹å¼æ§è¡ã
æ¥ä¸æ¥çå 个é¨åæä¾äºä¼å JavaScript è§£æåæ§è¡çæç¨æå·§ã
å°½æ©å è½½å ³é®èµæº
妿æä¸ªèæ¬é常éè¦ï¼å¹¶ä¸ä½ æ
å¿ç±äºå è½½é度ä¸å¤å¿«è影忧è½ï¼ä½ å¯ä»¥å¨ææ¡£ç <head> ä¸å è½½å®ï¼
<head>
...
<script src="main.js"></script>
...
</head>
è¿ä¸ªæ¹æ³å¯ä»¥æ£å¸¸å·¥ä½ï¼ä½ä¼é»å¡æ¸²æãæ´å¥½ççç¥æ¯ä½¿ç¨ rel="preload" æ¥ä¸ºå
³é® JavaScript å建ä¸ä¸ªé¢å è½½å¨ï¼
<head>
...
<!-- é¢å è½½ JavaScript æä»¶ -->
<link rel="preload" href="important-js.js" as="script" />
<!-- é¢å è½½ JavaScript 模å -->
<link rel="modulepreload" href="important-module.js" />
...
</head>
é¢å è½½ç <link> 尽快è·å JavaScriptï¼èä¸ä¼é»å¡æ¸²æãç¶åï¼ä½ å¯ä»¥å¨é¡µé¢ä¸ä»»ä½ä½ç½®ä½¿ç¨å®ï¼
<!-- å¨åéçä½ç½®å
å«è¯¥èæ¬ -->
<script src="important-js.js"></script>
æè å¨èæ¬ä¸ä½¿ç¨å®ï¼å¨ä½¿ç¨ JavaScript 模åçæ åµä¸ï¼ï¼
import { function } from "important-module.js";
夿³¨ï¼é¢å 载并ä¸è½ä¿è¯èæ¬å¨ä½ å å«å®æ¶å·²ç»å è½½å®æï¼ä½å®ç¡®å®æå³çå®å°å°½æ©å¼å§ä¸è½½ãå³ä½¿æªå®å ¨ç§»é¤é»å¡æ¸²æçæ¶é´ï¼æ¸²æé»å¡æ¶é´ä»å°ç¼©çã
æ¨è¿éå ³é® JavaScript çæ§è¡
å¦ä¸æ¹é¢ï¼ä½ åºè¯¥å°½éæ¨è¿è§£æåæ§è¡éå ³é® JavaScript çæ¶é´ï¼ç´å°å®çæ£éè¦æ¶åå è½½ãæåå è½½å®ä¼ä¸å¿ è¦å°é»å¡æ¸²æã
é¦å
ï¼ä½ å¯ä»¥ç» <script> å
ç´ æ·»å async 屿§ï¼
<head>
...
<script async src="main.js"></script>
...
</head>
è¿ä¼å¯¼è´èæ¬è·åä¸ DOM è§£æå¹¶è¡è¿è¡ï¼å æ¤å®å°å¨å䏿¶é´åå¤å¥½ï¼ä¸ä¼é»å¡æ¸²æã
夿³¨ï¼è¿æå¦ä¸ä¸ªå±æ§ deferï¼å®ä¼å¯¼è´èæ¬å¨ææ¡£è§£æå®æä¹åï¼ä½å¨è§¦å DOMContentLoaded äºä»¶ä¹åæ§è¡ãè¿ä¸ async æç±»ä¼¼çææã
ä½ ä¹å¯ä»¥ç´å°éè¦æ¶æå è½½ JavaScriptãè¿å¯ä»¥éè¿ DOM èæ¬ç¼åæ¥å®ç°ï¼ä¾å¦ï¼
const scriptElem = document.createElement("script");
scriptElem.src = "index.js";
scriptElem.addEventListener("load", () => {
// 䏿¦ index.js å·²å®å
¨å è½½ï¼è¿è¡å
¶ä¸ç彿°
init();
});
document.head.append(scriptElem);
å¯ä»¥ä½¿ç¨ import() 彿°å¨æå è½½ JavaScript 模åï¼
import("./modules/myModule.js").then((module) => {
// 对模åè¿è¡æä½
});
åè§£é¿ä»»å¡
彿µè§å¨è¿è¡ JavaScript æ¶ï¼å®ä¼å°èæ¬ç»ç»ææé¡ºåºè¿è¡çä»»å¡ï¼ä¾å¦è¿è¡ fetch 请æ±ãéè¿äºä»¶å¤çç¨åºé©±å¨ç¨æ·äº¤äºåè¾å ¥ãè¿è¡ JavaScript 驱å¨çå¨ç»ççã
大é¨åä»»å¡é½å¨ä¸»çº¿ç¨ä¸è¿è¡ï¼ä½ä¹æä¾å¤ï¼æ¯å¦è¿è¡å¨ Web Worker ä¸ç JavaScriptã主线ç¨ä¸æ¬¡åªè½è¿è¡ä¸ä¸ªä»»å¡ã
å½å个任å¡çæ§è¡æ¶é´è¶ è¿ 50 æ¯«ç§æ¶ï¼å®è¢«å½ç±»ä¸ºé¿ä»»å¡ãå¦æç¨æ·å¨é¿ä»»å¡æ£å¨è¿è¡æ¶å°è¯ä¸é¡µé¢äº¤äºæè¯·æ±éè¦ç UI æ´æ°ï¼ä»ä»¬çä½éªå°åå°å½±åã颿çååºæè§è§æ´æ°å°è¢«å»¶è¿ï¼å¯¼è´ UI çèµ·æ¥è¿éææ ååºã
为äºè§£å³è¿ä¸ªé®é¢ï¼ä½ éè¦å°é¿ä»»å¡å解为è¾å°çä»»å¡ãè¿æ ·å¯ä»¥ç»æµè§å¨æ´å¤æºä¼æ§è¡éè¦çç¨æ·äº¤äºå¤çæ UI æ¸²ææ´æ°ï¼æµè§å¨å¯ä»¥å¨æ¯ä¸ªè¾å°ä»»å¡ä¹é´æ§è¡å®ä»¬ï¼è䏿¯ä» ä» å¨é¿ä»»å¡ä¹åæä¹åæ§è¡ãå¨ä½ ç JavaScript ä¸ï¼ä½ å¯ä»¥éè¿å°ä»£ç æå为åç¬ç彿°æ¥å®ç°è¿ä¸ç¹ãè¿æ ·åä¹æå ¶ä»å 个åå ï¼æ¯å¦æ´å®¹æç»´æ¤ãè°è¯åç¼åæµè¯ã
ä¾å¦ï¼
function main() {
a();
b();
c();
d();
e();
}
ç¶èï¼è¿ç§ç»æå¯¹äºä¸»çº¿ç¨é»å¡å¹¶æ²¡æå¸®å©ãç±äºææäºä¸ªå½æ°é½å¨ä¸ä¸ªä¸»å½æ°ä¸è¿è¡ï¼æµè§å¨å°å®ä»¬æ´ä½ä½ä¸ºä¸ä¸ªé¿ä»»å¡è¿è¡ã
为äºå¤çè¿ä¸ªé®é¢ï¼æä»¬å¾åäºå®æè¿è¡ä¸ä¸ªâyieldâ彿°ï¼ä»¥ä½¿ä»£ç â让æ¥ç»ä¸»çº¿ç¨âãè¿æå³çæä»¬ç代ç 被åæå¤ä¸ªä»»å¡ï¼å¨æ§è¡æ¯ä¸ªä»»å¡ä¹é´ï¼æµè§å¨ææºä¼å¤çé«ä¼å
级任å¡ï¼æ¯å¦æ´æ° UIãä¸ä¸ªå¸¸è§çæ¨¡å¼æ¯ä½¿ç¨ setTimeout() å°æ§è¡æ¨è¿å°ä¸ä¸ªåç¬çä»»å¡ä¸ï¼
function yield() {
return new Promise((resolve) => {
setTimeout(resolve, 0);
});
}
å¯ä»¥å¨è¿æ ·çä»»å¡è¿è¡æ¨¡å¼ä¸ä½¿ç¨å®ï¼ä»¥å¨æ¯ä¸ªä»»å¡è¿è¡å让æ¥ç»ä¸»çº¿ç¨ï¼
async function main() {
// å建è¦è¿è¡ç彿°æ°ç»
const tasks = [a, b, c, d, e];
// 循ç¯éåä»»å¡
while (tasks.length > 0) {
// ä»ä»»å¡æ°ç»ä¸ååºç¬¬ä¸ä¸ªä»»å¡
const task = tasks.shift();
// è¿è¡ä»»å¡
task();
// 让æ¥ç»ä¸»çº¿ç¨
await yield();
}
}
为äºè¿ä¸æ¥æ¹è¿ï¼æä»¬å¯ä»¥ä½¿ç¨ navigator.scheduling.isInputPending()ï¼ä»
å¨ç¨æ·å°è¯ä¸é¡µé¢äº¤äºæ¶è¿è¡ yield() 彿°ï¼
async function main() {
// å建è¦è¿è¡ç彿°æ°ç»
const tasks = [a, b, c, d, e];
while (tasks.length > 0) {
// 让æ¥ç»æèµ·çç¨æ·è¾å
¥
if (navigator.scheduling.isInputPending()) {
await yield();
} else {
// ä»ä»»å¡æ°ç»ä¸ååºç¬¬ä¸ä¸ªä»»å¡
const task = tasks.shift();
// è¿è¡ä»»å¡
task();
}
}
}
è¿æ ·å¯ä»¥é¿å å¨ç¨æ·ç§¯æä¸é¡µé¢äº¤äºæ¶é»å¡ä¸»çº¿ç¨ï¼ä»èæä¾æ´æµç çç¨æ·ä½éªãç¶èï¼éè¿ä» å¨å¿ è¦æ¶è®©æ¥ï¼æä»¬å¯ä»¥å¨æ²¡æç¨æ·è¾å ¥éè¦å¤çæ¶ç»§ç»è¿è¡å½åä»»å¡ãè¿ä¹é¿å äºä»»å¡è¢«æ¾ç½®å¨éåæ«å°¾ï¼æå¨å ¶ä»éå¿ è¦çæµè§å¨åå§åä»»å¡ä¹åã
å¤ç JavaScript å¨ç»
å¨ç»å¯ä»¥æ¹åæç¥æ§è½ï¼ä½¿ç颿´å æµç ï¼è®©ç¨æ·å¨çå¾ é¡µé¢å è½½æ¶æè§å°è¿å±ï¼ä¾å¦å è½½æè½¬å¾æ ï¼ãç¶èï¼æ´å¤§æ´å¤çå¨ç»èªç¶éè¦æ´å¤çå¤çè½åæ¥å¤çï¼è¿å¯è½ä¼é使§è½ã
ææ¾ç¶çå¨ç»å»ºè®®æ¯ä½¿ç¨æ´å°çå¨ç»ââå»é¤ä»»ä½éå¿ è¦çå¨ç»ï¼æèèä¸ºç¨æ·æä¾ä¸ä¸ªå好设置ï¼è®©ä»ä»¬å¯ä»¥å ³éå¨ç»ï¼ä¾å¦å½ä»ä»¬ä½¿ç¨ä½åçè®¾å¤æçµæ± çµéæéçç§»å¨è®¾å¤æ¶ã
对äºå ³é®ç DOM å¨ç»ï¼å»ºè®®å°½å¯è½ä½¿ç¨ CSS å¨ç»ï¼è䏿¯ JavaScript å¨ç»ï¼Web å¨ç» API æä¾äºä¸ç§éè¿ JavaScript ç´æ¥è¿æ¥å° CSS å¨ç»çæ¹å¼ï¼ãç´æ¥ä½¿ç¨æµè§å¨æ§è¡ DOM å¨ç»è䏿¯ä½¿ç¨ JavaScript æçºµå èæ ·å¼è¡¨çæçæ´é«ãå¦è¯·åé CSS æ§è½ä¼å > å¤çå¨ç»ã
å¯¹äºæ æ³å¨ JavaScript ä¸å¤ççå¨ç»ï¼ä¾å¦å¨ HTML <canvas> ä¸å建å¨ç»ï¼å»ºè®®ä½¿ç¨ Window.requestAnimationFrame() è䏿¯æ§çé项ï¼ä¾å¦ Window.setInterval()ãrequestAnimationFrame() æ¹æ³ä¸é¨è®¾è®¡ç¨äºé«æãä¸è´å°å¤çå¨ç»å¸§ï¼ä»¥è·å¾æµç
çç¨æ·ä½éªãåºæ¬æ¨¡å¼å¦ä¸æç¤ºï¼
function loop() {
// å¨ç»å¶ä¸ä¸å¸§å¨ç»ä¹åæ¸
é¤ canvas
ctx.fillStyle = "rgba(0, 0, 0, 0.25)";
ctx.fillRect(0, 0, width, height);
// å¨ canvas ä¸ç»å¶å¯¹è±¡å¹¶æ´æ°å
¶ä½ç½®æ°æ®ï¼
// åå¤ä¸ä¸å¸§å¨ç»
for (const ball of balls) {
ball.draw();
ball.update();
}
// è°ç¨ requestAnimationFrameï¼å¨æ£ç¡®çæ¶é´å次è¿è¡ loop() 彿°ï¼
// ä»¥ä¿æå¨ç»çæµç
æ§
requestAnimationFrame(loop);
}
// è°ç¨ loop() 彿°ä¸æ¬¡ï¼å¯å¨å¨ç»
loop();
ä½ å¯ä»¥å¨ç»å¶å¾å½¢ > å¨ç»ä¸æ¾å°æå ³ canvas å¨ç»çç®ä»ï¼ä»¥åå¨å¯¹è±¡æå»ºå®è·µ 䏿¾å°æ´è¯¦ç»ç示ä¾ãä½ è¿å¯ä»¥å¨ Canvas æç¨ä¸æ¾å°ä¸æ´å¥ canvas æç¨ã
ä¼åäºä»¶æ§è½
è·è¸ªåå¤çäºä»¶å¯¹äºæµè§å¨æ¥è¯´æ¯å¾èèµæºçï¼ç¹å«æ¯å½ä½ æç»è¿è¡ä¸ä¸ªäºä»¶æ¶ãä¾å¦ï¼ä½ å¯ä»¥ä½¿ç¨ mousemove äºä»¶æ¥è·è¸ªé¼ æ çä½ç½®ï¼ä»¥æ£æ¥å®æ¯å¦ä»å¨é¡µé¢çæä¸ªåºåå
ï¼
function handleMouseMove() {
// å½é¼ æ æéå¨ elem å
æ¶æ§è¡ä¸äºæä½
}
elem.addEventListener("mousemove", handleMouseMove);
ä½ å¯è½å¨é¡µé¢ä¸è¿è¡ä¸ä¸ª <canvas> 游æãå½é¼ æ å¨ canvas å
鍿¶ï¼ä½ éè¦ä¸ææ£æ¥é¼ æ ç§»å¨åå
æ ä½ç½®ï¼å¹¶æ´æ°æ¸¸æç¶æââå
æ¬åæ°ãæ¶é´ãææç²¾çµçä½ç½®ä»¥åç¢°ææ£æµä¿¡æ¯çã䏿¦æ¸¸æç»æï¼ä½ å°ä¸åéè¦è¿è¡ææè¿äºæä½ï¼å®é
ä¸ï¼ç»§ç»ä¿æçå¬è¯¥äºä»¶å°æµªè´¹å¤çè½åã
å æ¤ï¼æå¥½æ¯å é¤ä¸åéè¦çäºä»¶çå¬å¨ãå¯ä»¥ä½¿ç¨ removeEventListener() æ¥å®ç°ï¼
elem.removeEventListener("mousemove", handleMouseMove);
å¦ä¸ä¸ªè¦ç¹æ¯å°½å¯è½ä½¿ç¨äºä»¶å§æãå½ä½ æä¸äºä»£ç éè¦å¨ç¨æ·ä¸å¤§éåå ç´ ä¸çä»»ä½ä¸ä¸ªè¿è¡äº¤äºæ¶ï¼å¯ä»¥å¨å®ä»¬çç¶å ç´ ä¸è®¾ç½®äºä»¶çå¬å¨ãå¨ä»»ä½åå ç´ ä¸è§¦åçäºä»¶é½ä¼å泡å°å®ä»¬çç¶å ç´ ï¼è¿æ ·ä½ æ éåç¬ä¸ºæ¯ä¸ªåå ç´ è®¾ç½®äºä»¶çå¬å¨ãåå°è¦è·è¸ªçäºä»¶çå¬å¨æ°éå¯ä»¥æé«æ§è½ã
请åé äºä»¶å§æä»¥äºè§£æ´å¤è¯¦ç»ä¿¡æ¯åä¸ä¸ªæç¨ç示ä¾ã
ç¼åæ´é«æä»£ç çæå·§
æå 个éç¨çæä½³å®è·µå¯ä»¥ä½¿ä½ ç代ç è¿è¡æ´é«æã
-
åå° DOM æä½ï¼è®¿é®åæ´æ° DOM çè®¡ç®ææ¬å¾é«ï¼å æ¤ä½ åºè¯¥å°½éåå° JavaScript è¿ç§æä½æ¹é¢çæä½éï¼ç¹å«æ¯å¨æ§è¡æç»ç DOM å¨ç»æ¶ï¼åè§ä¸é¢çå¤ç JavaScript å¨ç»ï¼ã
-
æ¹éè¿è¡ DOM æ´æ¹ï¼å¯¹äºéè¦ç DOM æ´æ¹ï¼ä½ åºè¯¥å°å®ä»¬ææ¹æ¬¡å¤çï¼è䏿¯å¨æ¯ä¸ªæ´æ¹åçæ¶åç¬æ§è¡ãè¿å¯ä»¥åå°æµè§å¨å®é æ§è¡çå·¥ä½éï¼å¹¶æ¹åæç¥æ§è½ãå°å¤ä¸ªæ´æ°ä¸æ¬¡æ§å®æï¼è䏿¯ä¸æè¿è¡å°çæ´æ°ï¼å¯ä»¥ä½¿çé¢çèµ·æ¥æ´æµç ãä¸ä¸ªæç¨çæå·§æ¯ï¼å½ä½ æå¤§é HTML 代ç è¦æ·»å å°é¡µé¢æ¶ï¼å æå»ºæ´ä¸ªç段ï¼é常å¨
DocumentFragmentå é¨ï¼ï¼ç¶å䏿¬¡æ§å°å ¶éå å° DOM ä¸ï¼è䏿¯é个éå æ¯ä¸ªé¡¹ç®ã -
ç®å HTML 代ç ï¼DOM æ è¶ç®åï¼ä½¿ç¨ JavaScript è¿è¡è®¿é®åæä½çé度就è¶å¿«ãä»ç»æèä½ çç¨æ·çé¢çéæ±ï¼å¹¶å é¤ä¸å¿ è¦çåä½ä»£ç ã
-
åå°å¾ªç¯ä»£ç çæ°éï¼å¾ªç¯æ¯å¾æ¶èèµæºçï¼å æ¤å°½å¯è½åå°ä»£ç ä¸ç循ç¯ä½¿ç¨éãå¨ä¸å¯é¿å 使ç¨å¾ªç¯çæ åµä¸ï¼
-
å¨ä¸å¿ è¦æ¶é¿å è¿è¡å®æ´ç循ç¯ï¼éæ¶ä½¿ç¨
breakæcontinueè¯å¥ãä¾å¦ï¼å¦æä½ æ£å¨æç´¢æ°ç»ä¸çç¹å®åç§°ï¼æ¾å°åç§°åå°±å¯ä»¥è·³åºå¾ªç¯ï¼æ²¡æå¿ è¦ç»§ç»è¿è¡å¾ªç¯è¿ä»£ï¼jsfunction processGroup(array) { const toFind = "Bob"; for (let i = 0; i < array.length - 1; i++) { if (array[i] === toFind) { processMatchingArray(array); break; } } } -
å¨å¾ªç¯å¤æ§è¡åªéè¦å䏿¬¡çå·¥ä½ãè¿å¯è½å¬èµ·æ¥æç¹æ¾èæè§ï¼ä½å¾å®¹æè¢«å¿½è§ãçä¸é¢ç代ç çæ®µï¼å®è·åä¸ä¸ªå å«è¦è¿è¡æç§å¤ççæ°æ®ç JSON 对象ãå¨è¿ç§æ åµä¸ï¼
fetch()æä½å¨æ¯æ¬¡å¾ªç¯è¿ä»£ä¸é½è¢«æ§è¡ï¼è¿æ¯ä¸ç§æµªè´¹è®¡ç®è½åçåæ³ãå¯ä»¥å°ç¬¬ 3 å第 4 è¡ç§»å°å¾ªç¯å¤é¨ï¼è¿æ ·ç½ç»è·åæä½åªä¼æ§è¡ä¸æ¬¡ãjsasync function returnResults(number) { for (let i = 0; i < number; i++) { const response = await fetch(`/results?number=${number}`); const results = await response.json(); processResult(results[i]); } }
-
-
å°è®¡ç®ä»»å¡ç§»å°ä¸»çº¿ç¨ä¹å¤ï¼å¨å颿们è°å°äº JavaScript é常å¨ä¸»çº¿ç¨ä¸è¿è¡ä»»å¡ï¼é¿æ¶é´çæä½å¯è½ä¼é»å¡ä¸»çº¿ç¨ï¼ä»èå¯¼è´ UI æ§è½å¾å·®ãæä»¬è¿å±ç¤ºäºå¦ä½å°é¿ä»»å¡å解为è¾å°çä»»å¡ï¼ä»¥ç¼è§£è¿ä¸ªé®é¢ãå¤çè¿ç±»é®é¢çå¦ä¸ç§æ¹æ³æ¯å°ä»»å¡å®å ¨ç§»å°ä¸»çº¿ç¨ä¹å¤ãæå ç§æ¹æ³å¯ä»¥å®ç°è¿ä¸ç¹ï¼
- 使ç¨å¼æ¥ä»£ç ï¼å¼æ¥ JavaScriptåºæ¬ä¸æ¯æä¸ä¼é»å¡ä¸»çº¿ç¨ç JavaScriptã弿¥ API é常ç¨äºå¤ç诸å¦ä»ç½ç»è·åèµæºãè®¿é®æ¬å°æä»¶ç³»ç»ä¸çæä»¶ææå¼ç¨æ·ç½ç»æå头æµçæä½ãå 为è¿äºæä½å¯è½éè¦å¾é¿æ¶é´ï¼æä»¥å¨çå¾ å®ä»¬å®æçè¿ç¨ä¸é»å¡ä¸»çº¿ç¨æ¯ä¸å¥½çãç¸åï¼æµè§å¨ä¼æ§è¡è¿äºå½æ°ï¼ç»§ç»è¿è¡åç»ä»£ç ï¼è¿äºå½æ°å°å¨å°æ¥æä¸ªæ¶é´ç¹è¿åç»æãç°ä»£å¼æ¥ API åºäº Promiseï¼è¿æ¯ä¸ç§ç¨äºå¤ç弿¥æä½ç JavaScript è¯è¨ç¹æ§ãå¦æä½ æåè½å¯ä»¥ä»å¼æ¥è¿è¡ä¸åçï¼åå¯ä»¥ç¼åèªå·±çåºäº Promise ç彿°ã
- å¨ Web Worker ä¸è¿è¡è®¡ç®ï¼Web Worker æ¯ä¸ç§æºå¶ï¼å è®¸ä½ æå¼ä¸ä¸ªåç¬ççº¿ç¨æ¥è¿è¡ä¸æ®µ JavaScript 代ç ï¼ä»¥ä¾¿ä¸ä¼é»å¡ä¸»çº¿ç¨ãWorker æä¸äºéå¶ï¼æå¤§çéå¶æ¯ä½ ä¸è½å¨ Worker å é¨è¿è¡ DOM èæ¬ãä½ å¯ä»¥æ§è¡å¤§å¤æ°å ¶ä»æä½ï¼å¹¶ä¸ Worker å¯ä»¥ä¸ä¸»çº¿ç¨ä¹é´åéåæ¥æ¶æ¶æ¯ãWorker ç主è¦ç¨ä¾æ¯å¦æä½ æå¤§é计ç®éè¦è¿è¡ï¼èä¸å¸æå®é»å¡ä¸»çº¿ç¨ï¼é£ä¹å°±éè¦ä½¿ç¨ Workerãå¨ Worker ä¸è¿è¡è®¡ç®ï¼çå¾ ç»æï¼å¹¶å¨åå¤å¥½æ¶å°ç»æåéå主线ç¨ã
- ä½¿ç¨ WebGPUï¼WebGPU æ¯ä¸ç§æµè§å¨ APIï¼å 许 Web å¼å人å使ç¨åºå±ç³»ç»ç GPUï¼Graphics Processing Unitï¼å¾å½¢å¤çåå ï¼æ¥è¿è¡é«æ§è½è®¡ç®åç»å¶å¤æçå¾åï¼è¿äºå¾åå¯ä»¥å¨æµè§å¨ä¸åç°ãå®ç¸å¯¹å¤æï¼ä½å¯ä»¥æä¾æ¯ Web Worker æ´å¥½çæ§è½ä¼å¿ã
åè§
- ä¼åé¿ä»»å¡ï¼web.developers.google.cnï¼2022 å¹´ï¼
- Canvas æç¨