æä»¬å°è¯ä¸ºä½ æä¾12个æå·§æ¥æ¹è¿ä½ çJavaScript乿 ãä½ å¯è½ä¼åç°å¾é¾ä¸æ¬¡æ§è®°ä½ä¸é¢æå°çæææå·§ãä½éè¿å®è·µï¼ä½ ä¼å¦ä¼ææè¿äºæ¹æ³ï¼å¹¶è§è¯JavaScriptæ§è½çé大æåã
è¯è | æ¶æ¿ç¨
å®¡æ ¡ | åæ·å¨
ç±äºä»£ç å¯è§æ§ä½ï¼ä½¿ç¨Javaèæ¬è¿è¡ç¼ç å¯è½ä¼å¾èæ¶ãè¿éæ12个ä¼é çJavaScriptæå·§ï¼å¯ä»¥å¸®å©ä½ å¨2023å¹´ä¼å代ç çæã
JavaScriptå·²ç»æä¸ºä¸ä¸æ¹å¼å人å䏿䏻è¦èæ¬è¯è¨ã对äºå端ç¼ç¨ãæå»ºäº¤äºå¼ãåè½ä¸°å¯çç½ç«ä»¥åå¿«éæµç çWebåºç¨ç¨åºæ¥è¯´ï¼è¿æ¯ä¸ä¸ªä¸å¯æè®®çå·¥å ·ãæ¯ä¸ªå端ç¨åºåé½ç¥éJavaScriptï¼ç¶èï¼å¦æå¨ä¸ç¥æ çæ åµä¸ä½¿ç¨å®ï¼æ åµä¼å徿´ç³ãç³ç³çJavaScript代ç ä¼å½±åç½ç«çæ§è½ã渲æé度åå è½½æ¶é´ãå¨è¿ç¯åæä¸ï¼æä»¬å°å享ä¸äºæå·§ï¼å¸®å©ä½ ä¼åæªæ¥çJavaScript乿 ã让æä»¬ä¸èµ·æ¥ççã
ä¸ãç¼©å°æä»¶çJavaScript代ç
缩å°ä»£ç 䏿··æ·ä»£ç ä¸åãç¶èï¼è¿ä¸¤ç§æ¹æ³é½æ¯è½¬æ¢JavaScriptçæ¹æ³ââè¯»èµ·æ¥æ´å¤æææ´å°ã缩å°å®ç°äºåè ï¼å¹¶å¯ä»¥ç¼©å°æä»¶å¤§å°ä»¥åå°é¡µé¢å è½½æ¶é´ãæ¢è¡ç¬¦ãå¤ä½ç©ºæ ¼ã注éçé½ä¼å¢å JavaScriptæä»¶ç大å°ï¼å¹¶å½±å页é¢å è½½çé度ã缩å°ä»£ç å¯ä»¥è§£å³è¿ä¸ªé®é¢ã
äºãæé¤.jsåºä¸æªä½¿ç¨çç»ä»¶
å¼å人å使ç¨JavaScriptåºï¼å¦jQuery UIæjQuery Mobileçãè¿æå³ç代ç å å«äºæ¯ä¸ªåºçææç»ä»¶ï¼èä½ å¯è½åªéè¦å ¶ä¸çä¸äºç»ä»¶ã
å¦æä½ ç²¾éäºçè§£å°å¨åºçåªä¸ªå ä¸å å«åªäºç»ä»¶ï¼é£ä¹å°±éæ©é£äºç¹å®çç»ä»¶ãä½ çç½ç«å°å è½½æ´å¿«ï¼ç¨æ·å°å¾å°ä¸ä¸ªå¾å¥½çä½éªã
ä¸ã使ç¨HTTP/2åè®®
è¿ä¸ä¸»è¦äºèç½åè®®ï¼HTTPï¼çæ´æ°çæ¬å¯ä»¥ä¸ºå¼å人åæä¾è®¸å¤å¾é ·çåè½ãå®çä¼å¤ä¼ç¹ä¹ä¸æ¯å¤è·¯å¤ç¨ãè¿å è®¸ä½ ä½¿ç¨TCPè¿æ¥å¹¶åå°æ¥å类似ç请æ±åååºãæ¤å¤ï¼æ©æçäºèç½åè®®éè¦å¯¹JavaScriptç论æéå½»çäºè§£åå¢å¼ºçç¥è¯ï¼èHTTP/2å¯ä»¥ä½¿JavaScriptå¿«éå è½½ãå æ¤ï¼HTTP/2卿§è½ä¸è¦æ¯HTTPå议好å¾å¤ã


åãGZIP模åéç¨äºApacheãNode.jsåNginx
GZIPæ¯ä¸ç§ä»¤äººæå¹çåç¼©ææ¯ï¼å®æ¯å¨å å¹´åäºèç½è¿æ²¡æåç°å¨è¿æ ·é«éåå±çæ¶åå¼å ¥çãå®åå°äºWebæå¡å¨ä¸çæä»¶ï¼å°éææä»¶å缩å°çå®å¤§å°ç80%å°90%ãç±äºJavaScriptæ¯ææ¬æä»¶ï¼ä½ å¯ä»¥ä½¿ç¨GZIPæ¥å缩JavaScriptæä»¶ï¼ä¹æå©äºåå°é¡µé¢å è½½æ¶é´ã

æä¸äºæ¨¡åå¯ç¨äºWebæå¡å¨ï¼å æ¬NginxåApacheãç±äºJavaScriptåæ¶ç¨äºå端ç¼ç¨åå端ç¼ç¨ï¼å æ¤å¯ä»¥ä½¿ç¨Node.jsçzlibæ¨¡åæ¥å缩JSæä»¶ã
// Code to run zlib module Const zlib = require(âzlibâ);1.2.3.
使ç¨GZIPç代ç ï¼
Const gzip = zlib.createGzip();Const fs = require(âfsâ);Const inp = fs.createReadStream(âinput.txtâ);Const out = fs.createWriteStream(âinput.txt.gzâ);Inp.pipe(gzip).pipe(out);1.2.3.4.5.6.7.8.9.
äºã缩çDOM屿¬¡åè®¿é®æ·±åº¦
DOM (Document Object Modelï¼ææ¡£å¯¹è±¡æ¨¡å)æ¯ç»æç½é¡µç»æçå¯¹è±¡çæ°æ®è¡¨ç¤ºå½¢å¼ãæ¯ä¸ªWeb页é¢é½æ¯ææ¡£ï¼é常æ¯ä¸ä¸ªHTMLæä»¶ï¼ææ¡£ä¸çæ¯ä¸ªå¯¹è±¡ç§°ä¸ºèç¹ãä½ä¸ºå¯¹ç¨æ·è¾å ¥çååºï¼JavaScriptä¼å½±åDOMåå ¶èç¹æ¹åç»æãæ ·å¼åå 容ã
æ¯æ¬¡JavaScript代ç 访é®DOMç»ä»¶æä¿®æ¹DOMæ¶ï¼è¿åå³äºå¼åäººåæ¯æä¹å¤çDOMçãå¦æç³»ç»å¿ é¡»å¨DOMä¸éæ°è®¡ç®å¤ä¸ªèç¹ï¼è¿å°æ¶èæ´å¤å åå¹¶é使§è½ãå¨ä¼åä»£ç æ¶ï¼ä¿®åªåé¿çDOMçæ åç»æå±æ¬¡æ¯ä¸ä¸ªå¾å¥½çæ¹æ³ãä¿æè¾å°çDOMæå¾å¤å¥½å¤ï¼
åå°å åæ³æ¼çé£é©
ä¼åç½ç»æçåè´è½½æ§è½
è¯å¥½çæ§è¡æ§è½
ä¸é¢æ¯ä¸äºæå°åDOMçæ¹æ³ï¼
åå°DOMå¼ç¨
åé¿å¤æå¨ç»
ä¿æç®åçCSSè§è
å ãå°JavaScript代ç åCSSæ¾å¨headé¨å
æ¤æ¹æ³å¸®å©ä½ æ´å¿«å°å è½½ç½é¡µï¼ä½æ¯ï¼ä½ éè¦å¯¹DOMåSCCOMæå¾å¥½ççè§£ãè¿æ ·åçç®çæ¯å¨headé¨åä¿çæ´å°çCSSåJavaScript代ç ï¼ä»¥ä¾¿é¡µé¢ç«å³å è½½ï¼èæ´ä¸è¬ç代ç é常ä¿åå¨ä¸åç.CSSå.jsæä»¶ä¸ã
ä¸ãæå¼çå¾ ï¼æ¾å°promise.alléä¸èµ·æ§è¡
ä½ åºè¯¥å°è°ç¨åæªè§£å³çpromiseåå¹¶å°ä¸ä¸ªæ°ç»ä¸ï¼è䏿¯çå¾ æ§è¡ãä¾å¦ï¼å¦æè¦å¯¹æ°æ®åºè¿è¡å¤æ¬¡è°ç¨ï¼é常éè¦çå¾ çæ¶é´æ¯æ¯æ¬¡è°ç¨å®æçæ¶é´ä¹åã
//Code to call two databases
const getUsers = async () => {const consumers = await findAllConsumers();const managers = await findAllManagers();Return { consumers, managers}}1.2.3.4.5.6.7.8.9.10.11.
æå¥½çæ¹æ³ä¹ä¸æ¯åæ¶è¿è¡ä¸¤ä¸ªè°ç¨ï¼å¹¶å¨å¤§çº¦ä¸åçæ¶é´å è§£æè¾åºã
// code to call both databases simultaneously
const getUsers = async () => {const consumers = findAllConsumers();const managers = findAllManagers();Return Promise.all([consumers, managers]);}1.2.3.4.5.6.7.8.
ä½ ä¸å¿ çå¾ ä¸¤ä¸ªæ°æ®åºé½æ§è¡å®æï¼ä¸¤è æ¯å¹¶è¡è¿è¡çã
å «ã代ç åå²
è¿æ¯ä¸ç§å®è·µï¼å°å½æ°å¼å ç´ ç代ç åè§£å¨å°æä»¶ä¸ï¼ä»¥ä¾¿å¨éè¦æ¶è°ç¨ãå°ä»£ç åå²ä¸ºå°åï¼ç¨åºç¨ç¨åºä¸ç¹å®åè½åç¹æ§çé¨åå è½½æ¶é´æ¿æ¢å个大åJavaScriptæä»¶çå è½½æ¶é´ãä½ å¯ä»¥ä½¿ç¨ä¸åä½å¯ç¨çæå å·¥å ·æ¥åå²ä»£ç 以è¿è¡åºç¨ç¨åºä¼åã
ä¹ãæµè¯ä»£ç
æµè¯å¯¹äºè¯å«å åæ³æ¼çæ§è½é®é¢å¹¶æ¢å¤å®ä»¬è³å ³éè¦ãä¸é¢æ¯ä¸äºå¸¸ç¨çJavaScriptæµè¯å·¥å ·ï¼
1.Console.time()
è¿æ¯ä¸ä¸ªå ç½®çJavaScript彿°ï¼å¯ä»¥ä½¿ç¨å®æ¥æ£æ¥æ§è¡æä¸ªè¿ç¨éè¦å¤é¿æ¶é´ãå¨è¿ä¸ªè¿ç¨çå¼å§ï¼åªéè°ç¨ï¼Console.time(label);
å¨è¿éï¼labelå¯ä»¥æ¯ä½ ç»å®æ¶å¨çå¯ä¸åç§°ãå¨è¿ä¸ªè¿ç¨çæåï¼åªéè¦è°ç¨ï¼Console.timeEnd(label);
ç¼åæ¤ä»£ç å¯ä¸ºä½ æä¾æ§è¡æä¸ªè¿ç¨çå¤çæ¶é´ã
2.YSlow
宿¯ä¸ä¸ªå¼æºçæ§è½æµéå·¥å ·ï¼å¯ä»¥è¯ä¼°ç½ç«å¹¶æä¾æ§è½æ¹è¿å»ºè®®ãYSlowè°ç¨ä½ çç½ç«ï¼å¹¶å°å ¶æ§è½ä¸é èçç½ç«æ§è½æ åè¿è¡æ¯è¾ãå®ä¼ç»ä½ ä¸ä¸ªä»äº0å°100%ä¹é´çåæ°ãè¿æ¯å¢å¼ºä»£ç 以è·å¾æ´å¥½æ§è½çå¥½æ¹æ³ã
åãå¨é群ä¸è¿è¡åºç¨ç¨åº
å¨Node.jsä¸ï¼ä½ å¯ä»¥å©ç¨éç¾¤æ¨¡åæ¥è¿è¡ä¸ç¶è¿ç¨å¹¶åè¿è¡çåè¿ç¨ãåé群æè¿ç¨å¨V8ãäºä»¶å¾ªç¯åå åä¸è¿è¡ãè¿å°ä¸ºæ¯ä¸ªè¿ç¨åé è´è½½åä»»å¡ã

åä¸ãå åæº¢åº
å¨è¿ç§ç¶æä¸ï¼è¿ç¨å®æäºå¯¹å åç使ç¨ï¼ä½æ²¡æå°å ¶è¿åç»å¦ä¸ä¸ªåºç¨ç¨åºæè¿ç¨ä½¿ç¨çæä½ç³»ç»ãæ¯æ¬¡å¨JavaScriptä¸å建对象æå£°æåéæ¶ï¼é½ä¼å ç¨å åãå½ä½ 使ç¨å®ä¸ä¸ªå¯¹è±¡æåéæ¶ï¼å åæº¢åºå¯è½ä¼åçï¼ä½JSè¿è¡æ¶ä»ç¶ä¼èèä½ è¿éè¦å®ãè¿å°å½±åç³»ç»æ§è½ï¼å 为åºè¯¥ä¸ºå ¶ä»ä¸åå¯ç¨çè¿ç¨éæ¾èµæºãé¿å JavaScriptå åæ³æ¼çæä½³æ¹æ³æ¯éå½å°ç®¡çä½ç¨åã
åäºã弿¥å è½½ï¼DeferåAsyncæ ç¾
JavaScriptç弿¥å è½½æå³çç½ç«ä»¥å¤ä¿¡æ¯æµçæ¹å¼å è½½ã

å½Webæµè§å¨æ¾å°çå符串æ¶ï¼å®å°å¨JavaScriptæ§è¡æé´åæ¢å建DOMåCSSOM模åãè¿å°±æ¯å¤§å¤æ°JavaScriptä»£ç æ¾å¨ä¸»HTML代ç ä¹åçåå ãçä¸é¢çä»£ç æ¥çè§£è¿ä¸ç¹ï¼
This will not appear until hello.js is loaded.1.2.3.4.5.6.7.8.9.
ä½ å¯ä»¥ç»JavaScriptæ·»å ä¸ä¸ªasyncæ ç¾ï¼è¿æ ·DOM模åå°±å¯ä»¥å¹¶è¡å建ï¼å¹¶ä¸å¨JavaScriptå è½½åæ§è¡æ¶ä¸ä¼è¢«å¹²æ°ã
åä¸ãæ»ç»
æä»¬å°è¯ä¸ºä½ æä¾12个æå·§æ¥æ¹è¿ä½ çJavaScript乿 ãä½ å¯è½ä¼åç°å¾é¾ä¸æ¬¡æ§è®°ä½ä¸é¢æå°çæææå·§ãä½éè¿å®è·µï¼ä½ ä¼å¦ä¼ææè¿äºæ¹æ³ï¼å¹¶è§è¯JavaScriptæ§è½çé大æåã
åæé¾æ¥ï¼https://dzone.com/articles/12-ways-to-optimize-your-javascript-journey
è¯è ä»ç»
æ¶æ¿ç¨ï¼51CTO社åºç¼è¾ï¼ä¿¡æ¯ç³»ç»é¡¹ç®ç®¡çå¸ãä¿¡æ¯ç³»ç»ççå¸ãPMPï¼æçç»¼åæ§è¯æ ä¸å®¶ï¼æ¥æ15å¹´çå¼åç»éªã
责任ç¼è¾ï¼æ¦æçæ¥æºï¼ 51CTOææ¯æ

